70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
import { apiFetch, type ApiSettings } from "@govoplan/core-webui";
|
|
|
|
export type AccountSession = {
|
|
id: string;
|
|
tenant_id: string;
|
|
current: boolean;
|
|
status: "active" | "expired" | "revoked";
|
|
created_at: string;
|
|
last_seen_at?: string | null;
|
|
expires_at: string;
|
|
revoked_at?: string | null;
|
|
client?: string | null;
|
|
};
|
|
|
|
export type AccountSessionList = {
|
|
sessions: AccountSession[];
|
|
};
|
|
|
|
export function fetchAccountSessions(
|
|
settings: ApiSettings
|
|
): Promise<AccountSessionList> {
|
|
return apiFetch<AccountSessionList>(settings, "/api/v1/auth/sessions", {
|
|
cache: "no-store"
|
|
});
|
|
}
|
|
|
|
export function revokeAccountSession(
|
|
settings: ApiSettings,
|
|
sessionId: string
|
|
): Promise<{ session: AccountSession; revoked: boolean }> {
|
|
return apiFetch(settings, `/api/v1/auth/sessions/${encodeURIComponent(sessionId)}/revoke`, {
|
|
method: "POST"
|
|
});
|
|
}
|
|
|
|
export function revokeOtherAccountSessions(
|
|
settings: ApiSettings
|
|
): Promise<{ revoked_count: number }> {
|
|
return apiFetch(settings, "/api/v1/auth/sessions/revoke-others", {
|
|
method: "POST"
|
|
});
|
|
}
|
|
|
|
export function fetchAdminUserSessions(
|
|
settings: ApiSettings,
|
|
userId: string
|
|
): Promise<AccountSessionList> {
|
|
return apiFetch(
|
|
settings,
|
|
`/api/v1/admin/users/${encodeURIComponent(userId)}/sessions`,
|
|
{ cache: "no-store" }
|
|
);
|
|
}
|
|
|
|
export function revokeAdminUserSession(
|
|
settings: ApiSettings,
|
|
userId: string,
|
|
sessionId: string,
|
|
currentPassword: string
|
|
): Promise<{ session: AccountSession; revoked: boolean }> {
|
|
return apiFetch(
|
|
settings,
|
|
`/api/v1/admin/users/${encodeURIComponent(userId)}/sessions/${encodeURIComponent(sessionId)}/revoke`,
|
|
{
|
|
method: "POST",
|
|
body: JSON.stringify({ current_password: currentPassword })
|
|
}
|
|
);
|
|
}
|