Feat(Fix): Multi Org, Suspension, User Detail

Multi Org switch, members suspend/unsuspend status, delete account, next serial, show email in user member search
This commit is contained in:
2026-03-02 23:55:47 +05:45
parent 6cab506603
commit b97937f080
16 changed files with 2011 additions and 298 deletions
+28
View File
@@ -455,6 +455,10 @@ export const api = {
body: JSON.stringify(data),
}),
// Delete the current user's own account (soft delete)
deleteMe: (requestConfig?: RequestConfig) =>
request<{ message: string }>('/users/me', { method: 'DELETE' }, true, requestConfig),
organizations: (requestConfig?: RequestConfig) =>
request<OrganizationsResponse>('/users/me/organizations', {}, true, requestConfig),
@@ -548,6 +552,15 @@ export const api = {
unsuspendUser: (userId: string, requestConfig?: RequestConfig) =>
request<{ user: User }>(`/admin/users/${userId}/unsuspend`, { method: 'POST' }, true, requestConfig),
// Permanently delete a user — revokes certs, cascades DB delete, unrecoverable
hardDeleteUser: (userId: string, requestConfig?: RequestConfig) =>
request<{ deleted_user_id: string; deleted_user_email: string; ssh_keys_deleted: number; certs_revoked: number }>(
`/admin/users/${userId}/delete`,
{ method: 'POST', body: JSON.stringify({ confirm: true }) },
true,
requestConfig,
),
// Get the cert policy for a department
getDeptCertPolicy: (orgId: string, deptId: string, requestConfig?: RequestConfig) =>
request<{ cert_policy: DeptCertPolicy }>(`/organizations/${orgId}/departments/${deptId}/cert-policy`, {}, true, requestConfig),
@@ -801,6 +814,10 @@ export const api = {
getById: (orgId: string, requestConfig?: RequestConfig) =>
request<{ organization: Organization; member_count: number }>(`/organizations/${orgId}`, {}, true, requestConfig),
// Delete an organization (owner only; must have no other members)
deleteOrganization: (orgId: string, requestConfig?: RequestConfig) =>
request<{ message: string }>(`/organizations/${orgId}`, { method: 'DELETE' }, true, requestConfig),
// Get organization members
getMembers: (orgId: string, requestConfig?: RequestConfig) =>
request<{ members: OrganizationMember[]; count: number }>(`/organizations/${orgId}/members`, {}, true, requestConfig),
@@ -976,6 +993,15 @@ export const api = {
method: 'POST',
}, true, requestConfig),
// Transfer organization ownership to another member
transferOwnership: (orgId: string, newOwnerUserId: string, requestConfig?: RequestConfig) =>
request<{ previous_owner: OrganizationMember; new_owner: OrganizationMember }>(
`/organizations/${orgId}/transfer-ownership`,
{ method: 'POST', body: JSON.stringify({ new_owner_user_id: newOwnerUserId }) },
true,
requestConfig,
),
// List Certificate Authorities for an org
getCAs: (orgId: string, requestConfig?: RequestConfig) =>
request<{ cas: OrgCA[]; count: number }>(`/organizations/${orgId}/cas`, {}, true, requestConfig),
@@ -1364,6 +1390,8 @@ export interface OrgCA {
total_certs: number;
active_certs: number;
revoked_certs: number;
/** Next serial number that will be assigned when a certificate is issued. */
next_serial_number: number | null;
created_at: string | null;
updated_at: string | null;
/** Set when the key was last rotated. */