@authsome/ui-core 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -529,6 +529,7 @@ interface SlugAvailableResponse {
529
529
  }
530
530
  interface StartRequest {
531
531
  Provider: string;
532
+ redirect_url?: string;
532
533
  }
533
534
  interface StartResponse {
534
535
  auth_url: string;
@@ -1680,6 +1681,15 @@ declare class AuthClient extends AuthClient$1 {
1680
1681
  * Simplifies the call-site by accepting code + token directly.
1681
1682
  */
1682
1683
  verifySMSCodeForMFA(code: string, token: string): Promise<any>;
1684
+ /**
1685
+ * Complete a device authorization (RFC 8628).
1686
+ *
1687
+ * Approves or denies a device code. Requires an authenticated session —
1688
+ * pass the session token so the backend can identify the user.
1689
+ */
1690
+ completeDeviceAuthorization(userCode: string, action: "approve" | "deny", token?: string): Promise<{
1691
+ status: string;
1692
+ }>;
1683
1693
  /**
1684
1694
  * Fetch the client configuration from the backend.
1685
1695
  *
package/dist/index.js CHANGED
@@ -1609,6 +1609,36 @@ var AuthClient2 = class extends AuthClient {
1609
1609
  async verifySMSCodeForMFA(code, token) {
1610
1610
  return super.verifySMSCode({ code }, token);
1611
1611
  }
1612
+ /**
1613
+ * Complete a device authorization (RFC 8628).
1614
+ *
1615
+ * Approves or denies a device code. Requires an authenticated session —
1616
+ * pass the session token so the backend can identify the user.
1617
+ */
1618
+ async completeDeviceAuthorization(userCode, action, token) {
1619
+ const base = this.baseURL;
1620
+ const fetchFn = this.fetchFn;
1621
+ const headers = {
1622
+ "Content-Type": "application/json"
1623
+ };
1624
+ if (token) {
1625
+ headers.Authorization = `Bearer ${token}`;
1626
+ }
1627
+ const res = await fetchFn(`${base}/v1/oauth/device/complete`, {
1628
+ method: "POST",
1629
+ headers,
1630
+ credentials: "include",
1631
+ body: JSON.stringify({ user_code: userCode, action })
1632
+ });
1633
+ if (!res.ok) {
1634
+ const body = await res.json().catch(() => ({}));
1635
+ throw new AuthClientError(
1636
+ body.error || "Failed to authorize device",
1637
+ res.status
1638
+ );
1639
+ }
1640
+ return res.json();
1641
+ }
1612
1642
  /**
1613
1643
  * Fetch the client configuration from the backend.
1614
1644
  *
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/api-client.ts","../src/client.ts","../src/auth.ts","../src/webauthn.ts"],"sourcesContent":["// Code generated by authsome sdkgen. DO NOT EDIT.\n\nimport type {\n ACSRequest,\n AdminDeleteUserRequest,\n AdminGetUserRequest,\n AdminImpersonateRequest,\n AdminListOrgsRequest,\n AdminListUsersRequest,\n AdminStatsRequest,\n AdminStatsResponse,\n AdminStopImpersonationRequest,\n AdminUnbanUserRequest,\n AdminUserListResponse,\n AuthMethod,\n AuthResponse,\n BulkError,\n BulkImportResult,\n BulkRevokeSessionsRequest,\n BulkRevokeSessionsResponse,\n CallbackRequest,\n CallbackResponse,\n ChallengeRequest,\n ChallengeResponse,\n CheckSlugRequest,\n ClientConfigBranding,\n ClientConfigFieldValidation,\n ClientConfigMFA,\n ClientConfigResponse,\n ClientConfigSSO,\n ClientConfigSSOConnection,\n ClientConfigSelectOption,\n ClientConfigSignupField,\n ClientConfigSocial,\n ClientConfigSocialProvider,\n ClientConfigToggle,\n CloneEnvironmentResponse,\n Config,\n CreateKeyRequest,\n CreateKeyResponse,\n CredentialInfo,\n Definition,\n DefinitionGroup,\n DeleteAccountRequest,\n DeleteAppClientConfigRequest,\n DeleteAppSessionConfigRequest,\n DeleteDeviceRequest,\n DeleteOrgRequest,\n DeleteRequest,\n DeleteResponse,\n DeleteSettingRequest,\n DeleteTeamRequest,\n DeleteWebhookRequest,\n Device,\n DeviceListResponse,\n DisableRequest,\n DisableResponse,\n EnrollRequest,\n EnrollResponse,\n Environment,\n EnvironmentListResponse,\n EnvironmentSettingsResponse,\n ExportDataRequest,\n ForgotPasswordResponse,\n GetAppClientConfigRequest,\n GetAppSessionConfigRequest,\n GetClientConfigRequest,\n GetDeviceRequest,\n GetMeRequest,\n GetOrgRequest,\n GetTeamRequest,\n GetWebhookRequest,\n HealthResponse,\n Invitation,\n InvitationListResponse,\n KeyListItem,\n ListAuthMethodsRequest,\n ListAuthMethodsResponse,\n ListDefinitionsResponse,\n ListDevicesRequest,\n ListEnvironmentsRequest,\n ListInvitationsRequest,\n ListKeysRequest,\n ListKeysResponse,\n ListMembersRequest,\n ListNamespaceDefinitionsRequest,\n ListOrgsRequest,\n ListRequest,\n ListResponse,\n ListRolesRequest,\n ListSessionsRequest,\n ListSettingsDefinitionsRequest,\n ListTeamsRequest,\n ListWebhooksRequest,\n LoginBeginRequest,\n LoginBeginResponse,\n LoginFinishRequest,\n LoginFinishResponse,\n LoginRequest,\n LoginResponse,\n Member,\n MemberListResponse,\n Object,\n ObjectFieldDef,\n OrgListResponse,\n Organization,\n Permission,\n PermissionListResponse,\n RecoveryRegenerateRequest,\n RecoveryRegenerateResponse,\n RecoveryVerifyRequest,\n RecoveryVerifyResponse,\n RegisterBeginRequest,\n RegisterBeginResponse,\n RegisterFinishRequest,\n RegisterFinishResponse,\n RemoveMemberRequest,\n ResolveSettingRequest,\n ResolveSettingsRequest,\n ResolvedSetting,\n ResolvedSettingResponse,\n ResolvedSettingsResponse,\n RevokeKeyRequest,\n RevokeSessionRequest,\n Role,\n RoleListResponse,\n SMSSendRequest,\n SMSSendResponse,\n SMSVerifyRequest,\n SMSVerifyResponse,\n ScopeValue,\n SelectOption,\n SendRequest,\n SendResponse,\n SessionListResponse,\n SettingValueResponse,\n Settings,\n SignOutRequest,\n SlugAvailableResponse,\n StartRequest,\n StartResponse,\n StatusResponse,\n Team,\n TeamListResponse,\n TokenResponse,\n TrustDeviceRequest,\n UIMetadata,\n UnenforceSettingRequest,\n UnlinkAuthMethodRequest,\n UnlinkAuthMethodResponse,\n User,\n UserRoleListResponse,\n Validation,\n VerifyMFARequest,\n VerifyMFAResponse,\n VerifyRequest,\n VerifyResponse,\n VisibilityCondition,\n Webhook,\n WebhookListResponse,\n SetAppClientConfigRequest,\n SetAppSessionConfigRequest,\n AdminBulkRevokeSessionsRequest,\n AdminBulkImportUsersRequest,\n EnforceSettingRequest,\n SetSettingRequest,\n AdminBanUserRequest,\n ChangePasswordRequest,\n CreateEnvironmentRequest,\n UpdateEnvironmentRequest,\n CloneEnvironmentRequest,\n UpdateEnvironmentSettingsRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n RevokeAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n DeleteMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n DisableMFARequest,\n RegenerateMFARecoveryCodesRequest,\n VerifyRecoveryCodeRequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n CreateOrganizationRequest,\n AcceptInvitationRequest,\n DeclineInvitationRequest,\n UpdateOrganizationRequest,\n DeleteOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n UpdateMemberRequest,\n CreateTeamRequest,\n UpdateTeamRequest,\n PasskeyLoginBeginRequest,\n PasskeyLoginFinishRequest,\n PasskeyRegisterBeginRequest,\n PasskeyRegisterFinishRequest,\n DeletePasskeyRequest,\n RefreshRequest,\n ResetPasswordRequest,\n AuthsomeCreateRoleRequest,\n AuthsomeUpdateRoleRequest,\n AuthsomeAssignRoleRequest,\n AuthsomeAddPermissionRequest,\n AuthsomeUnassignRoleRequest,\n SignInRequest,\n SignUpRequest,\n StartOAuthRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n StartSSOLoginRequest,\n VerifyEmailRequest,\n CreateWebhookRequest,\n UpdateWebhookRequest,\n} from './api-types';\n\nexport interface AuthClientConfig {\n /** Base URL of the AuthSome API (e.g., \"https://api.example.com\") */\n baseURL: string;\n /** Optional custom fetch implementation */\n fetch?: typeof globalThis.fetch;\n}\n\nexport class AuthClient {\n private baseURL: string;\n private fetchFn: typeof globalThis.fetch;\n\n constructor(config: AuthClientConfig | Pick<{ baseURL: string; fetch?: typeof globalThis.fetch }, 'baseURL' | 'fetch'>) {\n this.baseURL = config.baseURL.replace(/\\/+$/, '');\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n // ──────────────────────────────────────────────────\n // Generated methods\n // ──────────────────────────────────────────────────\n\n /**\n * Get AuthSome manifest\n * GET /.well-known/authsome/manifest\n */\n async getManifest(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/manifest\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get OpenAPI specification\n * GET /.well-known/authsome/openapi\n */\n async getOpenAPI(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/openapi\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get per-app client config overrides\n * GET /v1/admin/apps/{appId}/client-config\n */\n async getAppClientConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app client config overrides\n * PUT /v1/admin/apps/{appId}/client-config\n */\n async setAppClientConfig(appId: string, body: SetAppClientConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app client config overrides\n * DELETE /v1/admin/apps/{appId}/client-config\n */\n async deleteAppClientConfig(appId: string, body: DeleteAppClientConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get per-app session config\n * GET /v1/admin/apps/{appId}/session-config\n */\n async getAppSessionConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app session config\n * PUT /v1/admin/apps/{appId}/session-config\n */\n async setAppSessionConfig(appId: string, body: SetAppSessionConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app session config\n * DELETE /v1/admin/apps/{appId}/session-config\n */\n async deleteAppSessionConfig(appId: string, body: DeleteAppSessionConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk revoke sessions (admin)\n * DELETE /v1/admin/bulk/sessions\n */\n async adminBulkRevokeSessions(body: AdminBulkRevokeSessionsRequest, token: string): Promise<BulkRevokeSessionsResponse> {\n const path = \"/v1/admin/bulk/sessions\";\n return this.request<BulkRevokeSessionsResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk import users (admin)\n * POST /v1/admin/bulk/users/import\n */\n async adminBulkImportUsers(body: AdminBulkImportUsersRequest, token: string): Promise<BulkImportResult> {\n const path = \"/v1/admin/bulk/users/import\";\n return this.request<BulkImportResult>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Stop impersonation (admin)\n * POST /v1/admin/impersonate/stop\n */\n async adminStopImpersonation(body: AdminStopImpersonationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/admin/impersonate/stop\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Impersonate user (admin)\n * POST /v1/admin/impersonate/{userId}\n */\n async adminImpersonate(userId: string, body: AdminImpersonateRequest, token: string): Promise<AuthResponse> {\n const path = `/v1/admin/impersonate/${userId}`;\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List organizations (admin)\n * GET /v1/admin/orgs\n */\n async adminListOrgs(token: string): Promise<OrgListResponse> {\n const path = \"/v1/admin/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List all setting definitions\n * GET /v1/admin/settings/definitions\n */\n async listSettingsDefinitions(token: string): Promise<ListDefinitionsResponse> {\n const path = \"/v1/admin/settings/definitions\";\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List definitions for a namespace\n * GET /v1/admin/settings/definitions/{namespace}\n */\n async listNamespaceSettingsDefinitions(namespace: string, token: string): Promise<ListDefinitionsResponse> {\n const path = `/v1/admin/settings/definitions/${namespace}`;\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Enforce a setting value at a scope\n * PUT /v1/admin/settings/enforce/{key}\n */\n async enforceSetting(key: string, body: EnforceSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove enforcement from a setting\n * DELETE /v1/admin/settings/enforce/{key}\n */\n async unenforceSetting(key: string, body: UnenforceSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Resolve all settings at a scope\n * GET /v1/admin/settings/resolve\n */\n async resolveSettings(token: string): Promise<ResolvedSettingsResponse> {\n const path = \"/v1/admin/settings/resolve\";\n return this.request<ResolvedSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Resolve one setting with cascade details\n * GET /v1/admin/settings/resolve/{key}\n */\n async resolveSetting(key: string, token: string): Promise<ResolvedSettingResponse> {\n const path = `/v1/admin/settings/resolve/${key}`;\n return this.request<ResolvedSettingResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set a setting value at a scope\n * PUT /v1/admin/settings/values/{key}\n */\n async setSetting(key: string, body: SetSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete a setting override at a scope\n * DELETE /v1/admin/settings/values/{key}\n */\n async deleteSetting(key: string, body: DeleteSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get stats (admin)\n * GET /v1/admin/stats\n */\n async adminGetStats(token: string): Promise<AdminStatsResponse> {\n const path = \"/v1/admin/stats\";\n return this.request<AdminStatsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List users (admin)\n * GET /v1/admin/users\n */\n async adminListUsers(token: string): Promise<AdminUserListResponse> {\n const path = \"/v1/admin/users\";\n return this.request<AdminUserListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get user (admin)\n * GET /v1/admin/users/{userId}\n */\n async adminGetUser(userId: string, token: string): Promise<User> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete user (admin)\n * DELETE /v1/admin/users/{userId}\n */\n async adminDeleteUser(userId: string, body: AdminDeleteUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Ban user (admin)\n * POST /v1/admin/users/{userId}/ban\n */\n async adminBanUser(userId: string, body: AdminBanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/ban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Unban user (admin)\n * POST /v1/admin/users/{userId}/unban\n */\n async adminUnbanUser(userId: string, body: AdminUnbanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/unban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Change password\n * POST /v1/change-password\n */\n async changePassword(body: ChangePasswordRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/change-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get client configuration\n * GET /v1/client-config\n */\n async getClientConfig(token: string): Promise<ClientConfigResponse> {\n const path = \"/v1/client-config\";\n return this.request<ClientConfigResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List devices\n * GET /v1/devices\n */\n async listDevices(token: string): Promise<DeviceListResponse> {\n const path = \"/v1/devices\";\n return this.request<DeviceListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get device\n * GET /v1/devices/{deviceId}\n */\n async getDevice(deviceId: string, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<Device>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete device\n * DELETE /v1/devices/{deviceId}\n */\n async deleteDevice(deviceId: string, body: DeleteDeviceRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Trust device\n * PATCH /v1/devices/{deviceId}/trust\n */\n async trustDevice(deviceId: string, body: TrustDeviceRequest, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}/trust`;\n return this.request<Device>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * List environments\n * GET /v1/environments\n */\n async listEnvironments(token: string): Promise<EnvironmentListResponse> {\n const path = \"/v1/environments\";\n return this.request<EnvironmentListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create environment\n * POST /v1/environments\n */\n async createEnvironment(body: CreateEnvironmentRequest, token: string): Promise<Environment> {\n const path = \"/v1/environments\";\n return this.request<Environment>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get environment\n * GET /v1/environments/{envId}\n */\n async getEnvironment(envId: string, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment\n * PATCH /v1/environments/{envId}\n */\n async updateEnvironment(envId: string, body: UpdateEnvironmentRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete environment\n * DELETE /v1/environments/{envId}\n */\n async deleteEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Clone environment\n * POST /v1/environments/{envId}/clone\n */\n async cloneEnvironment(envId: string, body: CloneEnvironmentRequest, token: string): Promise<CloneEnvironmentResponse> {\n const path = `/v1/environments/${envId}/clone`;\n return this.request<CloneEnvironmentResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Set default environment\n * POST /v1/environments/{envId}/set-default\n */\n async setDefaultEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}/set-default`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get environment settings\n * GET /v1/environments/{envId}/settings\n */\n async getEnvironmentSettings(envId: string, token: string): Promise<EnvironmentSettingsResponse> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<EnvironmentSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment settings\n * PATCH /v1/environments/{envId}/settings\n */\n async updateEnvironmentSettings(envId: string, body: UpdateEnvironmentSettingsRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Forgot password\n * POST /v1/forgot-password\n */\n async forgotPassword(body: ForgotPasswordRequest): Promise<ForgotPasswordResponse> {\n const path = \"/v1/forgot-password\";\n return this.request<ForgotPasswordResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Health check\n * GET /v1/health\n */\n async getHealth(): Promise<HealthResponse> {\n const path = \"/v1/health\";\n return this.request<HealthResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * List API keys\n * GET /v1/keys\n */\n async listAPIKeys(token: string): Promise<ListKeysResponse> {\n const path = \"/v1/keys\";\n return this.request<ListKeysResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create API key\n * POST /v1/keys\n */\n async createAPIKey(body: CreateAPIKeyRequest, token: string): Promise<CreateKeyResponse> {\n const path = \"/v1/keys\";\n return this.request<CreateKeyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke API key\n * DELETE /v1/keys/{keyId}\n */\n async revokeAPIKey(keyId: string, body: RevokeAPIKeyRequest, token: string): Promise<void> {\n const path = `/v1/keys/${keyId}`;\n return this.request<void>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Send magic link\n * POST /v1/magic-link/send\n */\n async sendMagicLink(body: SendMagicLinkRequest): Promise<SendResponse> {\n const path = \"/v1/magic-link/send\";\n return this.request<SendResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Verify magic link\n * POST /v1/magic-link/verify\n */\n async verifyMagicLink(body: VerifyMagicLinkRequest): Promise<VerifyResponse> {\n const path = \"/v1/magic-link/verify\";\n return this.request<VerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Get current user\n * GET /v1/me\n */\n async getMe(token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update current user\n * PATCH /v1/me\n */\n async updateMe(body: UpdateMeRequest, token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete account\n * DELETE /v1/me\n */\n async deleteMe(body: DeleteMeRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/me\";\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List linked auth methods\n * GET /v1/me/auth-methods\n */\n async listAuthMethods(token: string): Promise<ListAuthMethodsResponse> {\n const path = \"/v1/me/auth-methods\";\n return this.request<ListAuthMethodsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unlink an auth method\n * DELETE /v1/me/auth-methods/{provider}\n */\n async unlinkAuthMethod(provider: string, body: UnlinkAuthMethodRequest, token: string): Promise<UnlinkAuthMethodResponse> {\n const path = `/v1/me/auth-methods/${provider}`;\n return this.request<UnlinkAuthMethodResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Export user data\n * GET /v1/me/export\n */\n async exportMyData(token: string): Promise<Record<string, unknown>> {\n const path = \"/v1/me/export\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * MFA challenge\n * POST /v1/mfa/challenge\n */\n async challengeMFA(body: ChallengeMFARequest): Promise<ChallengeResponse> {\n const path = \"/v1/mfa/challenge\";\n return this.request<ChallengeResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Enroll in MFA\n * POST /v1/mfa/enroll\n */\n async enrollMFA(body: EnrollMFARequest, token: string): Promise<EnrollResponse> {\n const path = \"/v1/mfa/enroll\";\n return this.request<EnrollResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Disable MFA\n * DELETE /v1/mfa/enrollment\n */\n async disableMFA(body: DisableMFARequest, token: string): Promise<DisableResponse> {\n const path = \"/v1/mfa/enrollment\";\n return this.request<DisableResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Regenerate MFA recovery codes\n * POST /v1/mfa/recovery/regenerate\n */\n async regenerateMFARecoveryCodes(body: RegenerateMFARecoveryCodesRequest, token: string): Promise<RecoveryRegenerateResponse> {\n const path = \"/v1/mfa/recovery/regenerate\";\n return this.request<RecoveryRegenerateResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA recovery code\n * POST /v1/mfa/recovery/verify\n */\n async verifyRecoveryCode(body: VerifyRecoveryCodeRequest): Promise<RecoveryVerifyResponse> {\n const path = \"/v1/mfa/recovery/verify\";\n return this.request<RecoveryVerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Send SMS verification code\n * POST /v1/mfa/sms/send\n */\n async sendSMSCode(body: SendSMSCodeRequest, token: string): Promise<SMSSendResponse> {\n const path = \"/v1/mfa/sms/send\";\n return this.request<SMSSendResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify SMS code\n * POST /v1/mfa/sms/verify\n */\n async verifySMSCode(body: VerifySMSCodeRequest, token: string): Promise<SMSVerifyResponse> {\n const path = \"/v1/mfa/sms/verify\";\n return this.request<SMSVerifyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA code\n * POST /v1/mfa/verify\n */\n async verifyMFA(body: VerifyMFARequest): Promise<VerifyMFAResponse> {\n const path = \"/v1/mfa/verify\";\n return this.request<VerifyMFAResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List organizations\n * GET /v1/orgs\n */\n async listOrganizations(token: string): Promise<OrgListResponse> {\n const path = \"/v1/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create organization\n * POST /v1/orgs\n */\n async createOrganization(body: CreateOrganizationRequest, token: string): Promise<Organization> {\n const path = \"/v1/orgs\";\n return this.request<Organization>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Check slug availability\n * GET /v1/orgs/check-slug\n */\n async checkOrgSlug(token: string): Promise<SlugAvailableResponse> {\n const path = \"/v1/orgs/check-slug\";\n return this.request<SlugAvailableResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Accept invitation\n * POST /v1/orgs/invitations/accept\n */\n async acceptInvitation(body: AcceptInvitationRequest, token: string): Promise<Member> {\n const path = \"/v1/orgs/invitations/accept\";\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Decline invitation\n * POST /v1/orgs/invitations/decline\n */\n async declineInvitation(body: DeclineInvitationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/orgs/invitations/decline\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get organization\n * GET /v1/orgs/{orgId}\n */\n async getOrganization(orgId: string, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update organization\n * PATCH /v1/orgs/{orgId}\n */\n async updateOrganization(orgId: string, body: UpdateOrganizationRequest, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete organization\n * DELETE /v1/orgs/{orgId}\n */\n async deleteOrganization(orgId: string, body: DeleteOrganizationRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List invitations\n * GET /v1/orgs/{orgId}/invitations\n */\n async listInvitations(orgId: string, token: string): Promise<InvitationListResponse> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<InvitationListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create invitation\n * POST /v1/orgs/{orgId}/invitations\n */\n async createInvitation(orgId: string, body: CreateInvitationRequest, token: string): Promise<Invitation> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<Invitation>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List members\n * GET /v1/orgs/{orgId}/members\n */\n async listMembers(orgId: string, token: string): Promise<MemberListResponse> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<MemberListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add member\n * POST /v1/orgs/{orgId}/members\n */\n async addMember(orgId: string, body: AddMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Update member role\n * PATCH /v1/orgs/{orgId}/members/{memberId}\n */\n async updateMember(orgId: string, memberId: string, body: UpdateMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<Member>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove member\n * DELETE /v1/orgs/{orgId}/members/{memberId}\n */\n async removeMember(orgId: string, memberId: string, body: RemoveMemberRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List teams\n * GET /v1/orgs/{orgId}/teams\n */\n async listTeams(orgId: string, token: string): Promise<TeamListResponse> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<TeamListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create team\n * POST /v1/orgs/{orgId}/teams\n */\n async createTeam(orgId: string, body: CreateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<Team>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get team\n * GET /v1/orgs/{orgId}/teams/{teamId}\n */\n async getTeam(orgId: string, teamId: string, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update team\n * PATCH /v1/orgs/{orgId}/teams/{teamId}\n */\n async updateTeam(orgId: string, teamId: string, body: UpdateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete team\n * DELETE /v1/orgs/{orgId}/teams/{teamId}\n */\n async deleteTeam(orgId: string, teamId: string, body: DeleteTeamRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List passkeys\n * GET /v1/passkeys/\n */\n async listPasskeys(token: string): Promise<ListResponse> {\n const path = \"/v1/passkeys/\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Begin passkey login\n * POST /v1/passkeys/login/begin\n */\n async passkeyLoginBegin(body: PasskeyLoginBeginRequest): Promise<LoginBeginResponse> {\n const path = \"/v1/passkeys/login/begin\";\n return this.request<LoginBeginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Complete passkey login\n * POST /v1/passkeys/login/finish\n */\n async passkeyLoginFinish(body: PasskeyLoginFinishRequest): Promise<LoginFinishResponse> {\n const path = \"/v1/passkeys/login/finish\";\n return this.request<LoginFinishResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Begin passkey registration\n * POST /v1/passkeys/register/begin\n */\n async passkeyRegisterBegin(body: PasskeyRegisterBeginRequest, token: string): Promise<RegisterBeginResponse> {\n const path = \"/v1/passkeys/register/begin\";\n return this.request<RegisterBeginResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Complete passkey registration\n * POST /v1/passkeys/register/finish\n */\n async passkeyRegisterFinish(body: PasskeyRegisterFinishRequest, token: string): Promise<RegisterFinishResponse> {\n const path = \"/v1/passkeys/register/finish\";\n return this.request<RegisterFinishResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete passkey\n * DELETE /v1/passkeys/{credentialId}\n */\n async deletePasskey(credentialId: string, body: DeletePasskeyRequest, token: string): Promise<DeleteResponse> {\n const path = `/v1/passkeys/${credentialId}`;\n return this.request<DeleteResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Refresh tokens\n * POST /v1/refresh\n */\n async refresh(body: RefreshRequest): Promise<TokenResponse> {\n const path = \"/v1/refresh\";\n return this.request<TokenResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Reset password\n * POST /v1/reset-password\n */\n async resetPassword(body: ResetPasswordRequest): Promise<StatusResponse> {\n const path = \"/v1/reset-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List roles\n * GET /v1/roles\n */\n async authsomeListRoles(token: string): Promise<RoleListResponse> {\n const path = \"/v1/roles\";\n return this.request<RoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create role\n * POST /v1/roles\n */\n async authsomeCreateRole(body: AuthsomeCreateRoleRequest, token: string): Promise<Role> {\n const path = \"/v1/roles\";\n return this.request<Role>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get role\n * GET /v1/roles/{roleId}\n */\n async authsomeGetRole(roleId: string, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update role\n * PATCH /v1/roles/{roleId}\n */\n async authsomeUpdateRole(roleId: string, body: AuthsomeUpdateRoleRequest, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete role\n * DELETE /v1/roles/{roleId}\n */\n async authsomeDeleteRole(roleId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Assign role to user\n * POST /v1/roles/{roleId}/assign\n */\n async authsomeAssignRole(roleId: string, body: AuthsomeAssignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/assign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List role permissions\n * GET /v1/roles/{roleId}/permissions\n */\n async authsomeListRolePermissions(roleId: string, token: string): Promise<PermissionListResponse> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<PermissionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add permission to role\n * POST /v1/roles/{roleId}/permissions\n */\n async authsomeAddPermission(roleId: string, body: AuthsomeAddPermissionRequest, token: string): Promise<Permission> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<Permission>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove permission from role\n * DELETE /v1/roles/{roleId}/permissions/{permissionId}\n */\n async authsomeRemovePermission(roleId: string, permissionId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/permissions/${permissionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unassign role from user\n * POST /v1/roles/{roleId}/unassign\n */\n async authsomeUnassignRole(roleId: string, body: AuthsomeUnassignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/unassign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List sessions\n * GET /v1/sessions\n */\n async listSessions(token: string): Promise<SessionListResponse> {\n const path = \"/v1/sessions\";\n return this.request<SessionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Revoke session\n * DELETE /v1/sessions/{sessionId}\n */\n async revokeSession(sessionId: string, body: RevokeSessionRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/sessions/${sessionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign in\n * POST /v1/signin\n */\n async signIn(body: SignInRequest): Promise<AuthResponse> {\n const path = \"/v1/signin\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Sign out\n * POST /v1/signout\n */\n async signOut(body: SignOutRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/signout\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign up\n * POST /v1/signup\n */\n async signUp(body: SignUpRequest): Promise<AuthResponse> {\n const path = \"/v1/signup\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start OAuth flow\n * POST /v1/social/{provider}\n */\n async startOAuth(provider: string, body: StartOAuthRequest): Promise<StartResponse> {\n const path = `/v1/social/${provider}`;\n return this.request<StartResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * OAuth callback\n * GET /v1/social/{provider}/callback\n */\n async oauthCallback(provider: string): Promise<CallbackResponse> {\n const path = `/v1/social/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * SSO SAML ACS endpoint\n * POST /v1/sso/{provider}/acs\n */\n async ssoACS(provider: string, body: SsoACSRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/acs`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * SSO callback (OIDC)\n * POST /v1/sso/{provider}/callback\n */\n async ssoCallback(provider: string, body: SsoCallbackRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start SSO login flow\n * POST /v1/sso/{provider}/login\n */\n async startSSOLogin(provider: string, body: StartSSOLoginRequest): Promise<LoginResponse> {\n const path = `/v1/sso/${provider}/login`;\n return this.request<LoginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List user roles\n * GET /v1/users/{userId}/roles\n */\n async authsomeListUserRoles(userId: string, token: string): Promise<UserRoleListResponse> {\n const path = `/v1/users/${userId}/roles`;\n return this.request<UserRoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Verify email\n * POST /v1/verify-email\n */\n async verifyEmail(body: VerifyEmailRequest): Promise<StatusResponse> {\n const path = \"/v1/verify-email\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List webhooks\n * GET /v1/webhooks\n */\n async listWebhooks(token: string): Promise<WebhookListResponse> {\n const path = \"/v1/webhooks\";\n return this.request<WebhookListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create webhook\n * POST /v1/webhooks\n */\n async createWebhook(body: CreateWebhookRequest, token: string): Promise<Webhook> {\n const path = \"/v1/webhooks\";\n return this.request<Webhook>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get webhook\n * GET /v1/webhooks/{webhookId}\n */\n async getWebhook(webhookId: string, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update webhook\n * PATCH /v1/webhooks/{webhookId}\n */\n async updateWebhook(webhookId: string, body: UpdateWebhookRequest, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete webhook\n * DELETE /v1/webhooks/{webhookId}\n */\n async deleteWebhook(webhookId: string, body: DeleteWebhookRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n // ──────────────────────────────────────────────────\n // Internal request helper\n // ──────────────────────────────────────────────────\n\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n token?: string,\n ): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const response = await this.fetchFn(`${this.baseURL}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let apiError: { error?: string; code?: number } | undefined;\n try {\n apiError = await response.json();\n } catch {\n // Response body is not JSON.\n }\n throw new AuthClientError(\n apiError?.error ?? `Request failed with status ${response.status}`,\n apiError?.code ?? response.status,\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n}\n\nexport class AuthClientError extends Error {\n code?: number;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'AuthClientError';\n this.code = code;\n }\n}\n\n","/**\n * AuthClient adapter — thin wrapper over the auto-generated API client.\n *\n * The generated client lives in ./generated/api-client.ts and covers all\n * core + plugin endpoints. This file extends it with a few convenience\n * overrides so that auth.ts (and downstream consumers) keep working\n * without changes.\n */\n\nimport {\n AuthClient as GeneratedClient,\n AuthClientError,\n type AuthClientConfig,\n} from \"./generated/api-client\";\nimport type { ClientConfig } from \"./types\";\n\n// ── Re-exports ───────────────────────────────────────\n\nexport { AuthClientError };\nexport type { AuthClientConfig };\n\n// Re-export generated request types used by auth.ts\nexport type { SignInRequest, SignUpRequest } from \"./generated/api-types\";\n\n// Re-export all generated API model types\nexport type {\n AuthResponse,\n Device,\n EnrollResponse,\n Invitation,\n KeyListItem,\n Member,\n Organization,\n TokenResponse,\n User,\n} from \"./generated/api-types\";\n\n// Backward-compatible type aliases for types renamed in the dynamic spec.\nexport type { KeyListItem as APIKey } from \"./generated/api-types\";\nexport type { EnrollResponse as MFAEnrollment } from \"./generated/api-types\";\n\n// Re-export all generated request types\nexport type {\n AdminBanUserRequest,\n ChangePasswordRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n VerifyMFARequest,\n CreateOrganizationRequest,\n UpdateOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n RefreshRequest,\n ResetPasswordRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n VerifyEmailRequest,\n VerifyRecoveryCodeRequest,\n} from \"./generated/api-types\";\n\n// Backward-compatible request type aliases\nexport type { SendMagicLinkRequest as MagicLinkSendRequest } from \"./generated/api-types\";\nexport type { VerifyMagicLinkRequest as MagicLinkVerifyRequest } from \"./generated/api-types\";\nexport type { ChallengeMFARequest as MfaChallengeRequest } from \"./generated/api-types\";\nexport type { EnrollMFARequest as MfaEnrollRequest } from \"./generated/api-types\";\nexport type { SendSMSCodeRequest as MfaSMSSendRequest } from \"./generated/api-types\";\nexport type { VerifySMSCodeRequest as MfaSMSVerifyRequest } from \"./generated/api-types\";\nexport type { VerifyMFARequest as MfaVerifyRequest } from \"./generated/api-types\";\nexport type { CreateOrganizationRequest as CreateOrgRequest } from \"./generated/api-types\";\nexport type { UpdateOrganizationRequest as UpdateOrgRequest } from \"./generated/api-types\";\n\n// ── Manual types (not in the OpenAPI spec) ───────────\n\n/** Options for paginated list endpoints. */\nexport interface ListOptions {\n limit?: number;\n offset?: number;\n}\n\n/** Paginated list response. */\nexport interface ListResponse<T> {\n items: T[];\n total: number;\n}\n\n// ── AuthClient adapter ──────────────────────────────\n\n/**\n * AuthClient extends the auto-generated client with backward-compatible\n * convenience methods that auth.ts depends on.\n *\n * All 80+ generated endpoints are inherited as-is. Only two methods\n * are overridden to preserve the simpler call-site signatures used by\n * the auth state machine.\n */\nexport class AuthClient extends GeneratedClient {\n /**\n * Refresh session tokens.\n *\n * Accepts a raw refresh-token string (used by auth.ts) or the full\n * RefreshRequest body.\n */\n override async refresh(body: { refresh_token: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { refresh_token: body } : body;\n return super.refresh(req);\n }\n\n /**\n * Sign out.\n *\n * Accepts a raw token string (used by auth.ts) or the full\n * (body, token) pair from the generated client.\n */\n override async signOut(bodyOrToken: unknown, token?: string): Promise<any> {\n if (typeof bodyOrToken === \"string\") {\n return super.signOut({} as any, bodyOrToken);\n }\n return super.signOut(bodyOrToken as any, token!);\n }\n\n /**\n * MFA challenge — bridge for auth.ts.\n *\n * auth.ts calls `mfaChallenge({ enrollment_id, code })` and expects\n * an AuthResponse back. The generated client uses `challengeMFA`.\n */\n async mfaChallenge(body: { enrollment_id?: string; code: string }): Promise<any> {\n return super.challengeMFA(body as any);\n }\n\n /**\n * Verify an MFA recovery code.\n *\n * Accepts a raw code string (used by auth.ts) or the full request body.\n */\n override async verifyRecoveryCode(body: { code: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { code: body } : body;\n return super.verifyRecoveryCode(req);\n }\n\n /**\n * Send an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting just the session token.\n */\n async sendSMSCodeForMFA(token: string): Promise<any> {\n return super.sendSMSCode({}, token);\n }\n\n /**\n * Verify an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting code + token directly.\n */\n async verifySMSCodeForMFA(code: string, token: string): Promise<any> {\n return super.verifySMSCode({ code }, token);\n }\n\n /**\n * Fetch the client configuration from the backend.\n *\n * The config describes which auth methods are enabled so SDK\n * components can auto-configure without manual props.\n */\n async fetchClientConfig(publishableKey?: string): Promise<ClientConfig> {\n const url = new URL(\"/v1/client-config\", (this as any).config.baseURL);\n if (publishableKey) {\n url.searchParams.set(\"key\", publishableKey);\n }\n const fetchFn = (this as any).config.fetch ?? globalThis.fetch;\n const res = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n if (!res.ok) {\n throw new AuthClientError(\"Failed to fetch client config\", res.status);\n }\n return res.json();\n }\n}\n","/**\n * Framework-agnostic authentication state machine.\n *\n * Manages sign-in/sign-up flows, token persistence, automatic refresh,\n * and MFA challenges. Framework adapters (React, Vue, etc.) wrap this\n * class and expose reactive state.\n */\n\nimport { AuthClient, type SignInRequest, type SignUpRequest, AuthClientError } from \"./client\";\nimport type { AuthConfig, AuthState, ClientConfig, Session, TokenStorage, User } from \"./types\";\n\nconst SESSION_KEY = \"authsome:session\";\nconst CONFIG_KEY = \"authsome:client_config\";\nconst REFRESH_BEFORE_MS = 60_000; // Refresh 60 s before expiry.\nconst CONFIG_TTL_MS = 5 * 60_000; // Cache client config for 5 minutes.\n\n/** Default in-memory storage (lost on page reload). */\nconst memoryStorage: TokenStorage = (() => {\n const store = new Map<string, string>();\n return {\n getItem: (key: string) => store.get(key) ?? null,\n setItem: (key: string, value: string) => {\n store.set(key, value);\n },\n removeItem: (key: string) => {\n store.delete(key);\n },\n };\n})();\n\n/** Try to use localStorage, fall back to memory. */\nfunction defaultStorage(): TokenStorage {\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n return window.localStorage;\n }\n } catch {\n // SSR or restricted environments.\n }\n return memoryStorage;\n}\n\n/**\n * AuthManager is the core state machine that drives authentication.\n *\n * Usage:\n * ```ts\n * const auth = new AuthManager({ baseURL: \"https://api.example.com\" });\n * auth.subscribe((state) => console.log(state));\n * await auth.initialize(); // hydrate from storage\n * await auth.signIn({ email, password });\n * ```\n */\nexport class AuthManager {\n private client: AuthClient;\n private storage: TokenStorage;\n private state: AuthState = { status: \"idle\" };\n private listeners = new Set<(state: AuthState) => void>();\n private refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private onError?: (error: { error: string; code?: number }) => void;\n\n private publishableKey?: string;\n private clientConfig: ClientConfig | null = null;\n private configListeners = new Set<(config: ClientConfig | null) => void>();\n private configFetchPromise: Promise<ClientConfig> | null = null;\n\n constructor(config: AuthConfig) {\n this.client = new AuthClient(config);\n this.storage = config.storage ?? defaultStorage();\n this.onError = config.onError;\n this.publishableKey = config.publishableKey;\n\n if (config.initialClientConfig) {\n this.clientConfig = config.initialClientConfig;\n }\n\n if (config.onStateChange) {\n this.listeners.add(config.onStateChange);\n }\n }\n\n // ── Public API ────────────────────────────────────\n\n /** Current auth state (snapshot). */\n getState(): AuthState {\n return this.state;\n }\n\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe(listener: (state: AuthState) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /** Access the underlying HTTP client. */\n getClient(): AuthClient {\n return this.client;\n }\n\n /**\n * Initialize by hydrating the session from storage.\n * When a publishableKey is set, also fetches client config in parallel.\n * Call this once on app start.\n */\n async initialize(): Promise<void> {\n // Kick off config fetch in parallel (non-blocking).\n if (this.publishableKey && !this.clientConfig) {\n void this.fetchClientConfig();\n }\n\n try {\n const raw = await this.storage.getItem(SESSION_KEY);\n if (!raw) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n const session: Session = JSON.parse(raw);\n const expiresAt = new Date(session.expires_at).getTime();\n\n if (Date.now() >= expiresAt) {\n // Token expired — try refresh.\n await this.refreshSession(session.refresh_token);\n return;\n }\n\n // Token still valid — fetch user profile.\n this.setState({ status: \"loading\" });\n const user = await this.client.getMe(session.session_token);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n } catch {\n // Never destroy the session on errors during initialization.\n // The server may be temporarily unreachable (404/500/network) or the\n // token might need refreshing. Only an explicit signOut() clears storage.\n // Preserve whatever session we have and schedule a refresh attempt.\n const stored = await this.storage.getItem(SESSION_KEY);\n if (stored) {\n const session: Session = JSON.parse(stored);\n this.setState({ status: \"authenticated\", user: null as unknown as User, session });\n this.scheduleRefresh(session);\n } else {\n this.setState({ status: \"unauthenticated\" });\n }\n }\n }\n\n /** Sign in with email & password. */\n async signIn(credentials: SignInRequest): Promise<void> {\n // Note: we intentionally do NOT set global state to \"loading\" here.\n // The form components manage their own isSubmitting state. Setting global\n // \"loading\" would cause parent components that conditionally render based\n // on isLoading to unmount the form, losing its local state (step, fields).\n try {\n const res = await this.client.signIn(credentials);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(), // fallback\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign up with email & password. */\n async signUp(data: SignUpRequest): Promise<void> {\n // See signIn() comment — forms manage their own loading state.\n try {\n const res = await this.client.signUp(data);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign out and clear the session. */\n async signOut(): Promise<void> {\n const token = this.getSessionToken();\n if (token) {\n try {\n await this.client.signOut(token);\n } catch {\n // Best-effort server sign-out.\n }\n }\n this.clearRefreshTimer();\n await this.clearSession();\n this.setState({ status: \"unauthenticated\" });\n }\n\n /** Submit an MFA challenge code. */\n async submitMFACode(enrollmentId: string, code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.mfaChallenge({ enrollment_id: enrollmentId, code });\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Submit an MFA recovery code. */\n async submitRecoveryCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.verifyRecoveryCode(code);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Send an SMS code for MFA verification. Returns masked phone + expiry info. */\n async sendSMSCode(): Promise<{ sent: boolean; phone_masked: string; expires_in_seconds: number }> {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n return this.client.sendSMSCodeForMFA(token);\n }\n\n /** Submit an SMS verification code during MFA challenge. */\n async submitSMSCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n const res = await this.client.verifySMSCodeForMFA(code, token);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Refresh the current session manually. */\n async refreshNow(): Promise<void> {\n const state = this.state;\n if (state.status !== \"authenticated\") return;\n await this.refreshSession(state.session.refresh_token);\n }\n\n /** Get the current session token (if authenticated). */\n getSessionToken(): string | null {\n if (this.state.status === \"authenticated\") {\n return this.state.session.session_token;\n }\n if (this.state.status === \"mfa_required\") {\n return this.state.session.session_token;\n }\n return null;\n }\n\n /** Get the current user (if authenticated). */\n getUser(): User | null {\n if (this.state.status === \"authenticated\") {\n return this.state.user;\n }\n return null;\n }\n\n // ── Client Config API ────────────────────────────\n\n /** Get the cached client config (or null if not yet fetched). */\n getClientConfig(): ClientConfig | null {\n return this.clientConfig;\n }\n\n /** Subscribe to client config changes. Returns an unsubscribe function. */\n subscribeConfig(listener: (config: ClientConfig | null) => void): () => void {\n this.configListeners.add(listener);\n return () => {\n this.configListeners.delete(listener);\n };\n }\n\n /**\n * Fetch client config from the backend.\n * Deduplicates concurrent calls and caches the result with a TTL.\n */\n async fetchClientConfig(): Promise<ClientConfig> {\n // Deduplicate concurrent fetches.\n if (this.configFetchPromise) {\n return this.configFetchPromise;\n }\n\n // Check storage cache.\n try {\n const cached = await this.storage.getItem(CONFIG_KEY);\n if (cached) {\n const { config, fetchedAt } = JSON.parse(cached) as { config: ClientConfig; fetchedAt: number };\n if (Date.now() - fetchedAt < CONFIG_TTL_MS) {\n this.setClientConfig(config);\n return config;\n }\n }\n } catch {\n // Cache miss or parse error — fetch fresh.\n }\n\n this.configFetchPromise = this.client\n .fetchClientConfig(this.publishableKey)\n .then(async (config) => {\n this.setClientConfig(config);\n // Cache with timestamp.\n try {\n await this.storage.setItem(\n CONFIG_KEY,\n JSON.stringify({ config, fetchedAt: Date.now() }),\n );\n } catch {\n // Storage write failure is non-fatal.\n }\n return config;\n })\n .finally(() => {\n this.configFetchPromise = null;\n });\n\n return this.configFetchPromise;\n }\n\n /** Tear down: clear timers and listeners. */\n destroy(): void {\n this.clearRefreshTimer();\n this.listeners.clear();\n this.configListeners.clear();\n }\n\n // ── Internals ─────────────────────────────────────\n\n private async handleAuthResponse(user: User, session: Session): Promise<void> {\n await this.persistSession(session);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n }\n\n private async refreshSession(refreshToken: string, attempt = 0): Promise<void> {\n try {\n const newSession = await this.client.refresh(refreshToken);\n const user = await this.client.getMe(newSession.session_token);\n await this.persistSession(newSession);\n this.setState({ status: \"authenticated\", user, session: newSession });\n this.scheduleRefresh(newSession);\n } catch {\n // Never destroy the session on refresh failure. The refresh token\n // may still be valid — the server could be temporarily unreachable.\n // Schedule a retry in 30 seconds. Only explicit signOut() clears storage.\n this.clearRefreshTimer();\n this.refreshTimer = setTimeout(() => {\n void this.refreshSession(refreshToken);\n }, 30_000);\n }\n }\n\n private scheduleRefresh(session: Session): void {\n this.clearRefreshTimer();\n const expiresAt = new Date(session.expires_at).getTime();\n const delay = expiresAt - Date.now() - REFRESH_BEFORE_MS;\n\n if (delay <= 0) {\n // Already near expiry — refresh immediately.\n void this.refreshSession(session.refresh_token);\n return;\n }\n\n this.refreshTimer = setTimeout(() => {\n void this.refreshSession(session.refresh_token);\n }, delay);\n }\n\n private clearRefreshTimer(): void {\n if (this.refreshTimer !== null) {\n clearTimeout(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n private async persistSession(session: Session): Promise<void> {\n await this.storage.setItem(SESSION_KEY, JSON.stringify(session));\n }\n\n private async clearSession(): Promise<void> {\n await this.storage.removeItem(SESSION_KEY);\n }\n\n private setClientConfig(config: ClientConfig): void {\n this.clientConfig = config;\n for (const listener of this.configListeners) {\n try {\n listener(config);\n } catch {\n // Listener errors should not break the config flow.\n }\n }\n }\n\n private setState(newState: AuthState): void {\n this.state = newState;\n for (const listener of this.listeners) {\n try {\n listener(newState);\n } catch {\n // Listener errors should not break the state machine.\n }\n }\n }\n\n private handleError(err: unknown): void {\n const message = err instanceof AuthClientError ? err.message : \"An unexpected error occurred\";\n const code = err instanceof AuthClientError ? err.code : undefined;\n\n // MFA required is returned as a specific error code.\n if (code === 403 && message.toLowerCase().includes(\"mfa\")) {\n const token = this.getSessionToken();\n if (token) {\n this.setState({\n status: \"mfa_required\",\n session: {\n session_token: token,\n refresh_token: \"\",\n expires_at: new Date(Date.now() + 300_000).toISOString(),\n },\n });\n return;\n }\n }\n\n this.setState({ status: \"error\", error: message });\n this.onError?.({ error: message, code });\n }\n}\n","/**\n * WebAuthn encoding helpers.\n *\n * The go-webauthn backend serialises binary fields (challenge, user.id,\n * credential IDs, …) as **base64url strings** in JSON. The browser\n * WebAuthn API requires those same fields as ArrayBuffer / Uint8Array.\n *\n * These helpers bridge the gap in both directions:\n * begin response → browser API (base64url string → ArrayBuffer)\n * browser API → finish POST (ArrayBuffer → base64url string)\n */\n\n// ── low-level codecs ──────────────────────────────────────────────\n\n/** Decode a base64url-encoded string into a Uint8Array. */\nexport function base64urlToBuffer(base64url: string): Uint8Array {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = base64 + \"=\".repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/** Encode an ArrayBuffer (or Uint8Array) to a base64url string (no padding). */\nexport function bufferToBase64url(\n buffer: ArrayBuffer | Uint8Array,\n): string {\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n// ── begin → browser helpers ────────────────────────────────────────\n\n/**\n * Prepare the options object returned by `/passkeys/register/begin`\n * for `navigator.credentials.create({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, user.id, excludeCredentials[].id\n */\nexport function prepareCreationOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialCreationOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // user.id\n if (out.user && typeof out.user === \"object\") {\n const user = { ...(out.user as Record<string, unknown>) };\n if (typeof user.id === \"string\") {\n user.id = base64urlToBuffer(user.id);\n }\n out.user = user;\n }\n\n // excludeCredentials[].id\n if (Array.isArray(out.excludeCredentials)) {\n out.excludeCredentials = (\n out.excludeCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialCreationOptions;\n}\n\n/**\n * Prepare the options object returned by `/passkeys/login/begin`\n * for `navigator.credentials.get({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, allowCredentials[].id\n */\nexport function prepareRequestOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialRequestOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // allowCredentials[].id\n if (Array.isArray(out.allowCredentials)) {\n out.allowCredentials = (\n out.allowCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialRequestOptions;\n}\n\n// ── browser → finish helpers ───────────────────────────────────────\n\n/**\n * Serialize a PublicKeyCredential returned by navigator.credentials\n * into a plain object suitable for POSTing to the `/finish` endpoint.\n *\n * Converts ArrayBuffer fields → base64url strings so they survive\n * JSON.stringify and match what go-webauthn expects.\n */\nexport function serializeCredential(\n credential: Credential,\n): Record<string, unknown> {\n const cred = credential as PublicKeyCredential;\n const response = cred.response;\n\n const result: Record<string, unknown> = {\n id: cred.id,\n rawId: bufferToBase64url(cred.rawId),\n type: cred.type,\n response: {} as Record<string, unknown>,\n };\n\n const serializedResponse: Record<string, unknown> = {\n clientDataJSON: bufferToBase64url(response.clientDataJSON),\n };\n\n // Attestation response (register finish)\n if (\"attestationObject\" in response) {\n const attestation = response as AuthenticatorAttestationResponse;\n serializedResponse.attestationObject = bufferToBase64url(\n attestation.attestationObject,\n );\n }\n\n // Assertion response (login finish)\n if (\"authenticatorData\" in response) {\n const assertion = response as AuthenticatorAssertionResponse;\n serializedResponse.authenticatorData = bufferToBase64url(\n assertion.authenticatorData,\n );\n serializedResponse.signature = bufferToBase64url(assertion.signature);\n if (assertion.userHandle) {\n serializedResponse.userHandle = bufferToBase64url(assertion.userHandle);\n }\n }\n\n result.response = serializedResponse;\n\n // Include authenticatorAttachment if present\n if (cred.authenticatorAttachment) {\n result.authenticatorAttachment = cred.authenticatorAttachment;\n }\n\n return result;\n}\n"],"mappings":"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","names":["AuthClient","AuthClient"]}
1
+ {"version":3,"sources":["../src/generated/api-client.ts","../src/client.ts","../src/auth.ts","../src/webauthn.ts"],"sourcesContent":["// Code generated by authsome sdkgen. DO NOT EDIT.\n\nimport type {\n ACSRequest,\n AdminDeleteUserRequest,\n AdminGetUserRequest,\n AdminImpersonateRequest,\n AdminListOrgsRequest,\n AdminListUsersRequest,\n AdminStatsRequest,\n AdminStatsResponse,\n AdminStopImpersonationRequest,\n AdminUnbanUserRequest,\n AdminUserListResponse,\n AuthMethod,\n AuthResponse,\n BulkError,\n BulkImportResult,\n BulkRevokeSessionsRequest,\n BulkRevokeSessionsResponse,\n CallbackRequest,\n CallbackResponse,\n ChallengeRequest,\n ChallengeResponse,\n CheckSlugRequest,\n ClientConfigBranding,\n ClientConfigFieldValidation,\n ClientConfigMFA,\n ClientConfigResponse,\n ClientConfigSSO,\n ClientConfigSSOConnection,\n ClientConfigSelectOption,\n ClientConfigSignupField,\n ClientConfigSocial,\n ClientConfigSocialProvider,\n ClientConfigToggle,\n CloneEnvironmentResponse,\n Config,\n CreateKeyRequest,\n CreateKeyResponse,\n CredentialInfo,\n Definition,\n DefinitionGroup,\n DeleteAccountRequest,\n DeleteAppClientConfigRequest,\n DeleteAppSessionConfigRequest,\n DeleteDeviceRequest,\n DeleteOrgRequest,\n DeleteRequest,\n DeleteResponse,\n DeleteSettingRequest,\n DeleteTeamRequest,\n DeleteWebhookRequest,\n Device,\n DeviceListResponse,\n DisableRequest,\n DisableResponse,\n EnrollRequest,\n EnrollResponse,\n Environment,\n EnvironmentListResponse,\n EnvironmentSettingsResponse,\n ExportDataRequest,\n ForgotPasswordResponse,\n GetAppClientConfigRequest,\n GetAppSessionConfigRequest,\n GetClientConfigRequest,\n GetDeviceRequest,\n GetMeRequest,\n GetOrgRequest,\n GetTeamRequest,\n GetWebhookRequest,\n HealthResponse,\n Invitation,\n InvitationListResponse,\n KeyListItem,\n ListAuthMethodsRequest,\n ListAuthMethodsResponse,\n ListDefinitionsResponse,\n ListDevicesRequest,\n ListEnvironmentsRequest,\n ListInvitationsRequest,\n ListKeysRequest,\n ListKeysResponse,\n ListMembersRequest,\n ListNamespaceDefinitionsRequest,\n ListOrgsRequest,\n ListRequest,\n ListResponse,\n ListRolesRequest,\n ListSessionsRequest,\n ListSettingsDefinitionsRequest,\n ListTeamsRequest,\n ListWebhooksRequest,\n LoginBeginRequest,\n LoginBeginResponse,\n LoginFinishRequest,\n LoginFinishResponse,\n LoginRequest,\n LoginResponse,\n Member,\n MemberListResponse,\n Object,\n ObjectFieldDef,\n OrgListResponse,\n Organization,\n Permission,\n PermissionListResponse,\n RecoveryRegenerateRequest,\n RecoveryRegenerateResponse,\n RecoveryVerifyRequest,\n RecoveryVerifyResponse,\n RegisterBeginRequest,\n RegisterBeginResponse,\n RegisterFinishRequest,\n RegisterFinishResponse,\n RemoveMemberRequest,\n ResolveSettingRequest,\n ResolveSettingsRequest,\n ResolvedSetting,\n ResolvedSettingResponse,\n ResolvedSettingsResponse,\n RevokeKeyRequest,\n RevokeSessionRequest,\n Role,\n RoleListResponse,\n SMSSendRequest,\n SMSSendResponse,\n SMSVerifyRequest,\n SMSVerifyResponse,\n ScopeValue,\n SelectOption,\n SendRequest,\n SendResponse,\n SessionListResponse,\n SettingValueResponse,\n Settings,\n SignOutRequest,\n SlugAvailableResponse,\n StartRequest,\n StartResponse,\n StatusResponse,\n Team,\n TeamListResponse,\n TokenResponse,\n TrustDeviceRequest,\n UIMetadata,\n UnenforceSettingRequest,\n UnlinkAuthMethodRequest,\n UnlinkAuthMethodResponse,\n User,\n UserRoleListResponse,\n Validation,\n VerifyMFARequest,\n VerifyMFAResponse,\n VerifyRequest,\n VerifyResponse,\n VisibilityCondition,\n Webhook,\n WebhookListResponse,\n SetAppClientConfigRequest,\n SetAppSessionConfigRequest,\n AdminBulkRevokeSessionsRequest,\n AdminBulkImportUsersRequest,\n EnforceSettingRequest,\n SetSettingRequest,\n AdminBanUserRequest,\n ChangePasswordRequest,\n CreateEnvironmentRequest,\n UpdateEnvironmentRequest,\n CloneEnvironmentRequest,\n UpdateEnvironmentSettingsRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n RevokeAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n DeleteMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n DisableMFARequest,\n RegenerateMFARecoveryCodesRequest,\n VerifyRecoveryCodeRequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n CreateOrganizationRequest,\n AcceptInvitationRequest,\n DeclineInvitationRequest,\n UpdateOrganizationRequest,\n DeleteOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n UpdateMemberRequest,\n CreateTeamRequest,\n UpdateTeamRequest,\n PasskeyLoginBeginRequest,\n PasskeyLoginFinishRequest,\n PasskeyRegisterBeginRequest,\n PasskeyRegisterFinishRequest,\n DeletePasskeyRequest,\n RefreshRequest,\n ResetPasswordRequest,\n AuthsomeCreateRoleRequest,\n AuthsomeUpdateRoleRequest,\n AuthsomeAssignRoleRequest,\n AuthsomeAddPermissionRequest,\n AuthsomeUnassignRoleRequest,\n SignInRequest,\n SignUpRequest,\n StartOAuthRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n StartSSOLoginRequest,\n VerifyEmailRequest,\n CreateWebhookRequest,\n UpdateWebhookRequest,\n} from './api-types';\n\nexport interface AuthClientConfig {\n /** Base URL of the AuthSome API (e.g., \"https://api.example.com\") */\n baseURL: string;\n /** Optional custom fetch implementation */\n fetch?: typeof globalThis.fetch;\n}\n\nexport class AuthClient {\n private baseURL: string;\n private fetchFn: typeof globalThis.fetch;\n\n constructor(config: AuthClientConfig | Pick<{ baseURL: string; fetch?: typeof globalThis.fetch }, 'baseURL' | 'fetch'>) {\n this.baseURL = config.baseURL.replace(/\\/+$/, '');\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n // ──────────────────────────────────────────────────\n // Generated methods\n // ──────────────────────────────────────────────────\n\n /**\n * Get AuthSome manifest\n * GET /.well-known/authsome/manifest\n */\n async getManifest(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/manifest\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get OpenAPI specification\n * GET /.well-known/authsome/openapi\n */\n async getOpenAPI(): Promise<Record<string, unknown>> {\n const path = \"/.well-known/authsome/openapi\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Get per-app client config overrides\n * GET /v1/admin/apps/{appId}/client-config\n */\n async getAppClientConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app client config overrides\n * PUT /v1/admin/apps/{appId}/client-config\n */\n async setAppClientConfig(appId: string, body: SetAppClientConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app client config overrides\n * DELETE /v1/admin/apps/{appId}/client-config\n */\n async deleteAppClientConfig(appId: string, body: DeleteAppClientConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get per-app session config\n * GET /v1/admin/apps/{appId}/session-config\n */\n async getAppSessionConfig(appId: string, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set per-app session config\n * PUT /v1/admin/apps/{appId}/session-config\n */\n async setAppSessionConfig(appId: string, body: SetAppSessionConfigRequest, token: string): Promise<Config> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<Config>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete per-app session config\n * DELETE /v1/admin/apps/{appId}/session-config\n */\n async deleteAppSessionConfig(appId: string, body: DeleteAppSessionConfigRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk revoke sessions (admin)\n * DELETE /v1/admin/bulk/sessions\n */\n async adminBulkRevokeSessions(body: AdminBulkRevokeSessionsRequest, token: string): Promise<BulkRevokeSessionsResponse> {\n const path = \"/v1/admin/bulk/sessions\";\n return this.request<BulkRevokeSessionsResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Bulk import users (admin)\n * POST /v1/admin/bulk/users/import\n */\n async adminBulkImportUsers(body: AdminBulkImportUsersRequest, token: string): Promise<BulkImportResult> {\n const path = \"/v1/admin/bulk/users/import\";\n return this.request<BulkImportResult>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Stop impersonation (admin)\n * POST /v1/admin/impersonate/stop\n */\n async adminStopImpersonation(body: AdminStopImpersonationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/admin/impersonate/stop\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Impersonate user (admin)\n * POST /v1/admin/impersonate/{userId}\n */\n async adminImpersonate(userId: string, body: AdminImpersonateRequest, token: string): Promise<AuthResponse> {\n const path = `/v1/admin/impersonate/${userId}`;\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List organizations (admin)\n * GET /v1/admin/orgs\n */\n async adminListOrgs(token: string): Promise<OrgListResponse> {\n const path = \"/v1/admin/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List all setting definitions\n * GET /v1/admin/settings/definitions\n */\n async listSettingsDefinitions(token: string): Promise<ListDefinitionsResponse> {\n const path = \"/v1/admin/settings/definitions\";\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List definitions for a namespace\n * GET /v1/admin/settings/definitions/{namespace}\n */\n async listNamespaceSettingsDefinitions(namespace: string, token: string): Promise<ListDefinitionsResponse> {\n const path = `/v1/admin/settings/definitions/${namespace}`;\n return this.request<ListDefinitionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Enforce a setting value at a scope\n * PUT /v1/admin/settings/enforce/{key}\n */\n async enforceSetting(key: string, body: EnforceSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove enforcement from a setting\n * DELETE /v1/admin/settings/enforce/{key}\n */\n async unenforceSetting(key: string, body: UnenforceSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/enforce/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Resolve all settings at a scope\n * GET /v1/admin/settings/resolve\n */\n async resolveSettings(token: string): Promise<ResolvedSettingsResponse> {\n const path = \"/v1/admin/settings/resolve\";\n return this.request<ResolvedSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Resolve one setting with cascade details\n * GET /v1/admin/settings/resolve/{key}\n */\n async resolveSetting(key: string, token: string): Promise<ResolvedSettingResponse> {\n const path = `/v1/admin/settings/resolve/${key}`;\n return this.request<ResolvedSettingResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Set a setting value at a scope\n * PUT /v1/admin/settings/values/{key}\n */\n async setSetting(key: string, body: SetSettingRequest, token: string): Promise<SettingValueResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<SettingValueResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete a setting override at a scope\n * DELETE /v1/admin/settings/values/{key}\n */\n async deleteSetting(key: string, body: DeleteSettingRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/settings/values/${key}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get stats (admin)\n * GET /v1/admin/stats\n */\n async adminGetStats(token: string): Promise<AdminStatsResponse> {\n const path = \"/v1/admin/stats\";\n return this.request<AdminStatsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List users (admin)\n * GET /v1/admin/users\n */\n async adminListUsers(token: string): Promise<AdminUserListResponse> {\n const path = \"/v1/admin/users\";\n return this.request<AdminUserListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get user (admin)\n * GET /v1/admin/users/{userId}\n */\n async adminGetUser(userId: string, token: string): Promise<User> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete user (admin)\n * DELETE /v1/admin/users/{userId}\n */\n async adminDeleteUser(userId: string, body: AdminDeleteUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Ban user (admin)\n * POST /v1/admin/users/{userId}/ban\n */\n async adminBanUser(userId: string, body: AdminBanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/ban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Unban user (admin)\n * POST /v1/admin/users/{userId}/unban\n */\n async adminUnbanUser(userId: string, body: AdminUnbanUserRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/users/${userId}/unban`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Change password\n * POST /v1/change-password\n */\n async changePassword(body: ChangePasswordRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/change-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get client configuration\n * GET /v1/client-config\n */\n async getClientConfig(token: string): Promise<ClientConfigResponse> {\n const path = \"/v1/client-config\";\n return this.request<ClientConfigResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List devices\n * GET /v1/devices\n */\n async listDevices(token: string): Promise<DeviceListResponse> {\n const path = \"/v1/devices\";\n return this.request<DeviceListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get device\n * GET /v1/devices/{deviceId}\n */\n async getDevice(deviceId: string, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<Device>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete device\n * DELETE /v1/devices/{deviceId}\n */\n async deleteDevice(deviceId: string, body: DeleteDeviceRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Trust device\n * PATCH /v1/devices/{deviceId}/trust\n */\n async trustDevice(deviceId: string, body: TrustDeviceRequest, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}/trust`;\n return this.request<Device>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * List environments\n * GET /v1/environments\n */\n async listEnvironments(token: string): Promise<EnvironmentListResponse> {\n const path = \"/v1/environments\";\n return this.request<EnvironmentListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create environment\n * POST /v1/environments\n */\n async createEnvironment(body: CreateEnvironmentRequest, token: string): Promise<Environment> {\n const path = \"/v1/environments\";\n return this.request<Environment>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get environment\n * GET /v1/environments/{envId}\n */\n async getEnvironment(envId: string, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment\n * PATCH /v1/environments/{envId}\n */\n async updateEnvironment(envId: string, body: UpdateEnvironmentRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete environment\n * DELETE /v1/environments/{envId}\n */\n async deleteEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Clone environment\n * POST /v1/environments/{envId}/clone\n */\n async cloneEnvironment(envId: string, body: CloneEnvironmentRequest, token: string): Promise<CloneEnvironmentResponse> {\n const path = `/v1/environments/${envId}/clone`;\n return this.request<CloneEnvironmentResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Set default environment\n * POST /v1/environments/{envId}/set-default\n */\n async setDefaultEnvironment(envId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/environments/${envId}/set-default`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get environment settings\n * GET /v1/environments/{envId}/settings\n */\n async getEnvironmentSettings(envId: string, token: string): Promise<EnvironmentSettingsResponse> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<EnvironmentSettingsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update environment settings\n * PATCH /v1/environments/{envId}/settings\n */\n async updateEnvironmentSettings(envId: string, body: UpdateEnvironmentSettingsRequest, token: string): Promise<Environment> {\n const path = `/v1/environments/${envId}/settings`;\n return this.request<Environment>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Forgot password\n * POST /v1/forgot-password\n */\n async forgotPassword(body: ForgotPasswordRequest): Promise<ForgotPasswordResponse> {\n const path = \"/v1/forgot-password\";\n return this.request<ForgotPasswordResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Health check\n * GET /v1/health\n */\n async getHealth(): Promise<HealthResponse> {\n const path = \"/v1/health\";\n return this.request<HealthResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * List API keys\n * GET /v1/keys\n */\n async listAPIKeys(token: string): Promise<ListKeysResponse> {\n const path = \"/v1/keys\";\n return this.request<ListKeysResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create API key\n * POST /v1/keys\n */\n async createAPIKey(body: CreateAPIKeyRequest, token: string): Promise<CreateKeyResponse> {\n const path = \"/v1/keys\";\n return this.request<CreateKeyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke API key\n * DELETE /v1/keys/{keyId}\n */\n async revokeAPIKey(keyId: string, body: RevokeAPIKeyRequest, token: string): Promise<void> {\n const path = `/v1/keys/${keyId}`;\n return this.request<void>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Send magic link\n * POST /v1/magic-link/send\n */\n async sendMagicLink(body: SendMagicLinkRequest): Promise<SendResponse> {\n const path = \"/v1/magic-link/send\";\n return this.request<SendResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Verify magic link\n * POST /v1/magic-link/verify\n */\n async verifyMagicLink(body: VerifyMagicLinkRequest): Promise<VerifyResponse> {\n const path = \"/v1/magic-link/verify\";\n return this.request<VerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Get current user\n * GET /v1/me\n */\n async getMe(token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update current user\n * PATCH /v1/me\n */\n async updateMe(body: UpdateMeRequest, token: string): Promise<User> {\n const path = \"/v1/me\";\n return this.request<User>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete account\n * DELETE /v1/me\n */\n async deleteMe(body: DeleteMeRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/me\";\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List linked auth methods\n * GET /v1/me/auth-methods\n */\n async listAuthMethods(token: string): Promise<ListAuthMethodsResponse> {\n const path = \"/v1/me/auth-methods\";\n return this.request<ListAuthMethodsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unlink an auth method\n * DELETE /v1/me/auth-methods/{provider}\n */\n async unlinkAuthMethod(provider: string, body: UnlinkAuthMethodRequest, token: string): Promise<UnlinkAuthMethodResponse> {\n const path = `/v1/me/auth-methods/${provider}`;\n return this.request<UnlinkAuthMethodResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Export user data\n * GET /v1/me/export\n */\n async exportMyData(token: string): Promise<Record<string, unknown>> {\n const path = \"/v1/me/export\";\n return this.request<Record<string, unknown>>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * MFA challenge\n * POST /v1/mfa/challenge\n */\n async challengeMFA(body: ChallengeMFARequest): Promise<ChallengeResponse> {\n const path = \"/v1/mfa/challenge\";\n return this.request<ChallengeResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Enroll in MFA\n * POST /v1/mfa/enroll\n */\n async enrollMFA(body: EnrollMFARequest, token: string): Promise<EnrollResponse> {\n const path = \"/v1/mfa/enroll\";\n return this.request<EnrollResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Disable MFA\n * DELETE /v1/mfa/enrollment\n */\n async disableMFA(body: DisableMFARequest, token: string): Promise<DisableResponse> {\n const path = \"/v1/mfa/enrollment\";\n return this.request<DisableResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Regenerate MFA recovery codes\n * POST /v1/mfa/recovery/regenerate\n */\n async regenerateMFARecoveryCodes(body: RegenerateMFARecoveryCodesRequest, token: string): Promise<RecoveryRegenerateResponse> {\n const path = \"/v1/mfa/recovery/regenerate\";\n return this.request<RecoveryRegenerateResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA recovery code\n * POST /v1/mfa/recovery/verify\n */\n async verifyRecoveryCode(body: VerifyRecoveryCodeRequest): Promise<RecoveryVerifyResponse> {\n const path = \"/v1/mfa/recovery/verify\";\n return this.request<RecoveryVerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Send SMS verification code\n * POST /v1/mfa/sms/send\n */\n async sendSMSCode(body: SendSMSCodeRequest, token: string): Promise<SMSSendResponse> {\n const path = \"/v1/mfa/sms/send\";\n return this.request<SMSSendResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify SMS code\n * POST /v1/mfa/sms/verify\n */\n async verifySMSCode(body: VerifySMSCodeRequest, token: string): Promise<SMSVerifyResponse> {\n const path = \"/v1/mfa/sms/verify\";\n return this.request<SMSVerifyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Verify MFA code\n * POST /v1/mfa/verify\n */\n async verifyMFA(body: VerifyMFARequest): Promise<VerifyMFAResponse> {\n const path = \"/v1/mfa/verify\";\n return this.request<VerifyMFAResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List organizations\n * GET /v1/orgs\n */\n async listOrganizations(token: string): Promise<OrgListResponse> {\n const path = \"/v1/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create organization\n * POST /v1/orgs\n */\n async createOrganization(body: CreateOrganizationRequest, token: string): Promise<Organization> {\n const path = \"/v1/orgs\";\n return this.request<Organization>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Check slug availability\n * GET /v1/orgs/check-slug\n */\n async checkOrgSlug(token: string): Promise<SlugAvailableResponse> {\n const path = \"/v1/orgs/check-slug\";\n return this.request<SlugAvailableResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Accept invitation\n * POST /v1/orgs/invitations/accept\n */\n async acceptInvitation(body: AcceptInvitationRequest, token: string): Promise<Member> {\n const path = \"/v1/orgs/invitations/accept\";\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Decline invitation\n * POST /v1/orgs/invitations/decline\n */\n async declineInvitation(body: DeclineInvitationRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/orgs/invitations/decline\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get organization\n * GET /v1/orgs/{orgId}\n */\n async getOrganization(orgId: string, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update organization\n * PATCH /v1/orgs/{orgId}\n */\n async updateOrganization(orgId: string, body: UpdateOrganizationRequest, token: string): Promise<Organization> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<Organization>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete organization\n * DELETE /v1/orgs/{orgId}\n */\n async deleteOrganization(orgId: string, body: DeleteOrganizationRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List invitations\n * GET /v1/orgs/{orgId}/invitations\n */\n async listInvitations(orgId: string, token: string): Promise<InvitationListResponse> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<InvitationListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create invitation\n * POST /v1/orgs/{orgId}/invitations\n */\n async createInvitation(orgId: string, body: CreateInvitationRequest, token: string): Promise<Invitation> {\n const path = `/v1/orgs/${orgId}/invitations`;\n return this.request<Invitation>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List members\n * GET /v1/orgs/{orgId}/members\n */\n async listMembers(orgId: string, token: string): Promise<MemberListResponse> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<MemberListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add member\n * POST /v1/orgs/{orgId}/members\n */\n async addMember(orgId: string, body: AddMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members`;\n return this.request<Member>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Update member role\n * PATCH /v1/orgs/{orgId}/members/{memberId}\n */\n async updateMember(orgId: string, memberId: string, body: UpdateMemberRequest, token: string): Promise<Member> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<Member>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove member\n * DELETE /v1/orgs/{orgId}/members/{memberId}\n */\n async removeMember(orgId: string, memberId: string, body: RemoveMemberRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List teams\n * GET /v1/orgs/{orgId}/teams\n */\n async listTeams(orgId: string, token: string): Promise<TeamListResponse> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<TeamListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create team\n * POST /v1/orgs/{orgId}/teams\n */\n async createTeam(orgId: string, body: CreateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams`;\n return this.request<Team>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get team\n * GET /v1/orgs/{orgId}/teams/{teamId}\n */\n async getTeam(orgId: string, teamId: string, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update team\n * PATCH /v1/orgs/{orgId}/teams/{teamId}\n */\n async updateTeam(orgId: string, teamId: string, body: UpdateTeamRequest, token: string): Promise<Team> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<Team>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete team\n * DELETE /v1/orgs/{orgId}/teams/{teamId}\n */\n async deleteTeam(orgId: string, teamId: string, body: DeleteTeamRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List passkeys\n * GET /v1/passkeys/\n */\n async listPasskeys(token: string): Promise<ListResponse> {\n const path = \"/v1/passkeys/\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Begin passkey login\n * POST /v1/passkeys/login/begin\n */\n async passkeyLoginBegin(body: PasskeyLoginBeginRequest): Promise<LoginBeginResponse> {\n const path = \"/v1/passkeys/login/begin\";\n return this.request<LoginBeginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Complete passkey login\n * POST /v1/passkeys/login/finish\n */\n async passkeyLoginFinish(body: PasskeyLoginFinishRequest): Promise<LoginFinishResponse> {\n const path = \"/v1/passkeys/login/finish\";\n return this.request<LoginFinishResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Begin passkey registration\n * POST /v1/passkeys/register/begin\n */\n async passkeyRegisterBegin(body: PasskeyRegisterBeginRequest, token: string): Promise<RegisterBeginResponse> {\n const path = \"/v1/passkeys/register/begin\";\n return this.request<RegisterBeginResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Complete passkey registration\n * POST /v1/passkeys/register/finish\n */\n async passkeyRegisterFinish(body: PasskeyRegisterFinishRequest, token: string): Promise<RegisterFinishResponse> {\n const path = \"/v1/passkeys/register/finish\";\n return this.request<RegisterFinishResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete passkey\n * DELETE /v1/passkeys/{credentialId}\n */\n async deletePasskey(credentialId: string, body: DeletePasskeyRequest, token: string): Promise<DeleteResponse> {\n const path = `/v1/passkeys/${credentialId}`;\n return this.request<DeleteResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Refresh tokens\n * POST /v1/refresh\n */\n async refresh(body: RefreshRequest): Promise<TokenResponse> {\n const path = \"/v1/refresh\";\n return this.request<TokenResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Reset password\n * POST /v1/reset-password\n */\n async resetPassword(body: ResetPasswordRequest): Promise<StatusResponse> {\n const path = \"/v1/reset-password\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List roles\n * GET /v1/roles\n */\n async authsomeListRoles(token: string): Promise<RoleListResponse> {\n const path = \"/v1/roles\";\n return this.request<RoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create role\n * POST /v1/roles\n */\n async authsomeCreateRole(body: AuthsomeCreateRoleRequest, token: string): Promise<Role> {\n const path = \"/v1/roles\";\n return this.request<Role>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get role\n * GET /v1/roles/{roleId}\n */\n async authsomeGetRole(roleId: string, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update role\n * PATCH /v1/roles/{roleId}\n */\n async authsomeUpdateRole(roleId: string, body: AuthsomeUpdateRoleRequest, token: string): Promise<Role> {\n const path = `/v1/roles/${roleId}`;\n return this.request<Role>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete role\n * DELETE /v1/roles/{roleId}\n */\n async authsomeDeleteRole(roleId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Assign role to user\n * POST /v1/roles/{roleId}/assign\n */\n async authsomeAssignRole(roleId: string, body: AuthsomeAssignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/assign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List role permissions\n * GET /v1/roles/{roleId}/permissions\n */\n async authsomeListRolePermissions(roleId: string, token: string): Promise<PermissionListResponse> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<PermissionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Add permission to role\n * POST /v1/roles/{roleId}/permissions\n */\n async authsomeAddPermission(roleId: string, body: AuthsomeAddPermissionRequest, token: string): Promise<Permission> {\n const path = `/v1/roles/${roleId}/permissions`;\n return this.request<Permission>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Remove permission from role\n * DELETE /v1/roles/{roleId}/permissions/{permissionId}\n */\n async authsomeRemovePermission(roleId: string, permissionId: string, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/permissions/${permissionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Unassign role from user\n * POST /v1/roles/{roleId}/unassign\n */\n async authsomeUnassignRole(roleId: string, body: AuthsomeUnassignRoleRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/roles/${roleId}/unassign`;\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List sessions\n * GET /v1/sessions\n */\n async listSessions(token: string): Promise<SessionListResponse> {\n const path = \"/v1/sessions\";\n return this.request<SessionListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Revoke session\n * DELETE /v1/sessions/{sessionId}\n */\n async revokeSession(sessionId: string, body: RevokeSessionRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/sessions/${sessionId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign in\n * POST /v1/signin\n */\n async signIn(body: SignInRequest): Promise<AuthResponse> {\n const path = \"/v1/signin\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Sign out\n * POST /v1/signout\n */\n async signOut(body: SignOutRequest, token: string): Promise<StatusResponse> {\n const path = \"/v1/signout\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Sign up\n * POST /v1/signup\n */\n async signUp(body: SignUpRequest): Promise<AuthResponse> {\n const path = \"/v1/signup\";\n return this.request<AuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start OAuth flow\n * POST /v1/social/{provider}\n */\n async startOAuth(provider: string, body: StartOAuthRequest): Promise<StartResponse> {\n const path = `/v1/social/${provider}`;\n return this.request<StartResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * OAuth callback\n * GET /v1/social/{provider}/callback\n */\n async oauthCallback(provider: string): Promise<CallbackResponse> {\n const path = `/v1/social/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * SSO SAML ACS endpoint\n * POST /v1/sso/{provider}/acs\n */\n async ssoACS(provider: string, body: SsoACSRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/acs`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * SSO callback (OIDC)\n * POST /v1/sso/{provider}/callback\n */\n async ssoCallback(provider: string, body: SsoCallbackRequest): Promise<CallbackResponse> {\n const path = `/v1/sso/${provider}/callback`;\n return this.request<CallbackResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Start SSO login flow\n * POST /v1/sso/{provider}/login\n */\n async startSSOLogin(provider: string, body: StartSSOLoginRequest): Promise<LoginResponse> {\n const path = `/v1/sso/${provider}/login`;\n return this.request<LoginResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List user roles\n * GET /v1/users/{userId}/roles\n */\n async authsomeListUserRoles(userId: string, token: string): Promise<UserRoleListResponse> {\n const path = `/v1/users/${userId}/roles`;\n return this.request<UserRoleListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Verify email\n * POST /v1/verify-email\n */\n async verifyEmail(body: VerifyEmailRequest): Promise<StatusResponse> {\n const path = \"/v1/verify-email\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List webhooks\n * GET /v1/webhooks\n */\n async listWebhooks(token: string): Promise<WebhookListResponse> {\n const path = \"/v1/webhooks\";\n return this.request<WebhookListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create webhook\n * POST /v1/webhooks\n */\n async createWebhook(body: CreateWebhookRequest, token: string): Promise<Webhook> {\n const path = \"/v1/webhooks\";\n return this.request<Webhook>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get webhook\n * GET /v1/webhooks/{webhookId}\n */\n async getWebhook(webhookId: string, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update webhook\n * PATCH /v1/webhooks/{webhookId}\n */\n async updateWebhook(webhookId: string, body: UpdateWebhookRequest, token: string): Promise<Webhook> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<Webhook>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete webhook\n * DELETE /v1/webhooks/{webhookId}\n */\n async deleteWebhook(webhookId: string, body: DeleteWebhookRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n // ──────────────────────────────────────────────────\n // Internal request helper\n // ──────────────────────────────────────────────────\n\n\n private async request<T>(\n method: string,\n path: string,\n body?: unknown,\n token?: string,\n ): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n 'Accept': 'application/json',\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n\n const response = await this.fetchFn(`${this.baseURL}${path}`, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let apiError: { error?: string; code?: number } | undefined;\n try {\n apiError = await response.json();\n } catch {\n // Response body is not JSON.\n }\n throw new AuthClientError(\n apiError?.error ?? `Request failed with status ${response.status}`,\n apiError?.code ?? response.status,\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n}\n\nexport class AuthClientError extends Error {\n code?: number;\n\n constructor(message: string, code?: number) {\n super(message);\n this.name = 'AuthClientError';\n this.code = code;\n }\n}\n\n","/**\n * AuthClient adapter — thin wrapper over the auto-generated API client.\n *\n * The generated client lives in ./generated/api-client.ts and covers all\n * core + plugin endpoints. This file extends it with a few convenience\n * overrides so that auth.ts (and downstream consumers) keep working\n * without changes.\n */\n\nimport {\n AuthClient as GeneratedClient,\n AuthClientError,\n type AuthClientConfig,\n} from \"./generated/api-client\";\nimport type { ClientConfig } from \"./types\";\n\n// ── Re-exports ───────────────────────────────────────\n\nexport { AuthClientError };\nexport type { AuthClientConfig };\n\n// Re-export generated request types used by auth.ts\nexport type { SignInRequest, SignUpRequest } from \"./generated/api-types\";\n\n// Re-export all generated API model types\nexport type {\n AuthResponse,\n Device,\n EnrollResponse,\n Invitation,\n KeyListItem,\n Member,\n Organization,\n TokenResponse,\n User,\n} from \"./generated/api-types\";\n\n// Backward-compatible type aliases for types renamed in the dynamic spec.\nexport type { KeyListItem as APIKey } from \"./generated/api-types\";\nexport type { EnrollResponse as MFAEnrollment } from \"./generated/api-types\";\n\n// Re-export all generated request types\nexport type {\n AdminBanUserRequest,\n ChangePasswordRequest,\n ForgotPasswordRequest,\n CreateAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n VerifyMFARequest,\n CreateOrganizationRequest,\n UpdateOrganizationRequest,\n CreateInvitationRequest,\n AddMemberRequest,\n RefreshRequest,\n ResetPasswordRequest,\n SsoACSRequest,\n SsoCallbackRequest,\n VerifyEmailRequest,\n VerifyRecoveryCodeRequest,\n} from \"./generated/api-types\";\n\n// Backward-compatible request type aliases\nexport type { SendMagicLinkRequest as MagicLinkSendRequest } from \"./generated/api-types\";\nexport type { VerifyMagicLinkRequest as MagicLinkVerifyRequest } from \"./generated/api-types\";\nexport type { ChallengeMFARequest as MfaChallengeRequest } from \"./generated/api-types\";\nexport type { EnrollMFARequest as MfaEnrollRequest } from \"./generated/api-types\";\nexport type { SendSMSCodeRequest as MfaSMSSendRequest } from \"./generated/api-types\";\nexport type { VerifySMSCodeRequest as MfaSMSVerifyRequest } from \"./generated/api-types\";\nexport type { VerifyMFARequest as MfaVerifyRequest } from \"./generated/api-types\";\nexport type { CreateOrganizationRequest as CreateOrgRequest } from \"./generated/api-types\";\nexport type { UpdateOrganizationRequest as UpdateOrgRequest } from \"./generated/api-types\";\n\n// ── Manual types (not in the OpenAPI spec) ───────────\n\n/** Options for paginated list endpoints. */\nexport interface ListOptions {\n limit?: number;\n offset?: number;\n}\n\n/** Paginated list response. */\nexport interface ListResponse<T> {\n items: T[];\n total: number;\n}\n\n// ── AuthClient adapter ──────────────────────────────\n\n/**\n * AuthClient extends the auto-generated client with backward-compatible\n * convenience methods that auth.ts depends on.\n *\n * All 80+ generated endpoints are inherited as-is. Only two methods\n * are overridden to preserve the simpler call-site signatures used by\n * the auth state machine.\n */\nexport class AuthClient extends GeneratedClient {\n /**\n * Refresh session tokens.\n *\n * Accepts a raw refresh-token string (used by auth.ts) or the full\n * RefreshRequest body.\n */\n override async refresh(body: { refresh_token: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { refresh_token: body } : body;\n return super.refresh(req);\n }\n\n /**\n * Sign out.\n *\n * Accepts a raw token string (used by auth.ts) or the full\n * (body, token) pair from the generated client.\n */\n override async signOut(bodyOrToken: unknown, token?: string): Promise<any> {\n if (typeof bodyOrToken === \"string\") {\n return super.signOut({} as any, bodyOrToken);\n }\n return super.signOut(bodyOrToken as any, token!);\n }\n\n /**\n * MFA challenge — bridge for auth.ts.\n *\n * auth.ts calls `mfaChallenge({ enrollment_id, code })` and expects\n * an AuthResponse back. The generated client uses `challengeMFA`.\n */\n async mfaChallenge(body: { enrollment_id?: string; code: string }): Promise<any> {\n return super.challengeMFA(body as any);\n }\n\n /**\n * Verify an MFA recovery code.\n *\n * Accepts a raw code string (used by auth.ts) or the full request body.\n */\n override async verifyRecoveryCode(body: { code: string } | string): Promise<any> {\n const req = typeof body === \"string\" ? { code: body } : body;\n return super.verifyRecoveryCode(req);\n }\n\n /**\n * Send an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting just the session token.\n */\n async sendSMSCodeForMFA(token: string): Promise<any> {\n return super.sendSMSCode({}, token);\n }\n\n /**\n * Verify an SMS code for MFA — bridge for auth.ts.\n *\n * Simplifies the call-site by accepting code + token directly.\n */\n async verifySMSCodeForMFA(code: string, token: string): Promise<any> {\n return super.verifySMSCode({ code }, token);\n }\n\n /**\n * Complete a device authorization (RFC 8628).\n *\n * Approves or denies a device code. Requires an authenticated session —\n * pass the session token so the backend can identify the user.\n */\n async completeDeviceAuthorization(\n userCode: string,\n action: \"approve\" | \"deny\",\n token?: string,\n ): Promise<{ status: string }> {\n const base = (this as any).baseURL as string;\n const fetchFn = (this as any).fetchFn as typeof globalThis.fetch;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (token) {\n headers.Authorization = `Bearer ${token}`;\n }\n\n const res = await fetchFn(`${base}/v1/oauth/device/complete`, {\n method: \"POST\",\n headers,\n credentials: \"include\",\n body: JSON.stringify({ user_code: userCode, action }),\n });\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({}));\n throw new AuthClientError(\n (body as Record<string, string>).error || \"Failed to authorize device\",\n res.status,\n );\n }\n return res.json();\n }\n\n /**\n * Fetch the client configuration from the backend.\n *\n * The config describes which auth methods are enabled so SDK\n * components can auto-configure without manual props.\n */\n async fetchClientConfig(publishableKey?: string): Promise<ClientConfig> {\n const url = new URL(\"/v1/client-config\", (this as any).config.baseURL);\n if (publishableKey) {\n url.searchParams.set(\"key\", publishableKey);\n }\n const fetchFn = (this as any).config.fetch ?? globalThis.fetch;\n const res = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n });\n if (!res.ok) {\n throw new AuthClientError(\"Failed to fetch client config\", res.status);\n }\n return res.json();\n }\n}\n","/**\n * Framework-agnostic authentication state machine.\n *\n * Manages sign-in/sign-up flows, token persistence, automatic refresh,\n * and MFA challenges. Framework adapters (React, Vue, etc.) wrap this\n * class and expose reactive state.\n */\n\nimport { AuthClient, type SignInRequest, type SignUpRequest, AuthClientError } from \"./client\";\nimport type { AuthConfig, AuthState, ClientConfig, Session, TokenStorage, User } from \"./types\";\n\nconst SESSION_KEY = \"authsome:session\";\nconst CONFIG_KEY = \"authsome:client_config\";\nconst REFRESH_BEFORE_MS = 60_000; // Refresh 60 s before expiry.\nconst CONFIG_TTL_MS = 5 * 60_000; // Cache client config for 5 minutes.\n\n/** Default in-memory storage (lost on page reload). */\nconst memoryStorage: TokenStorage = (() => {\n const store = new Map<string, string>();\n return {\n getItem: (key: string) => store.get(key) ?? null,\n setItem: (key: string, value: string) => {\n store.set(key, value);\n },\n removeItem: (key: string) => {\n store.delete(key);\n },\n };\n})();\n\n/** Try to use localStorage, fall back to memory. */\nfunction defaultStorage(): TokenStorage {\n try {\n if (typeof window !== \"undefined\" && window.localStorage) {\n return window.localStorage;\n }\n } catch {\n // SSR or restricted environments.\n }\n return memoryStorage;\n}\n\n/**\n * AuthManager is the core state machine that drives authentication.\n *\n * Usage:\n * ```ts\n * const auth = new AuthManager({ baseURL: \"https://api.example.com\" });\n * auth.subscribe((state) => console.log(state));\n * await auth.initialize(); // hydrate from storage\n * await auth.signIn({ email, password });\n * ```\n */\nexport class AuthManager {\n private client: AuthClient;\n private storage: TokenStorage;\n private state: AuthState = { status: \"idle\" };\n private listeners = new Set<(state: AuthState) => void>();\n private refreshTimer: ReturnType<typeof setTimeout> | null = null;\n private onError?: (error: { error: string; code?: number }) => void;\n\n private publishableKey?: string;\n private clientConfig: ClientConfig | null = null;\n private configListeners = new Set<(config: ClientConfig | null) => void>();\n private configFetchPromise: Promise<ClientConfig> | null = null;\n\n constructor(config: AuthConfig) {\n this.client = new AuthClient(config);\n this.storage = config.storage ?? defaultStorage();\n this.onError = config.onError;\n this.publishableKey = config.publishableKey;\n\n if (config.initialClientConfig) {\n this.clientConfig = config.initialClientConfig;\n }\n\n if (config.onStateChange) {\n this.listeners.add(config.onStateChange);\n }\n }\n\n // ── Public API ────────────────────────────────────\n\n /** Current auth state (snapshot). */\n getState(): AuthState {\n return this.state;\n }\n\n /** Subscribe to state changes. Returns an unsubscribe function. */\n subscribe(listener: (state: AuthState) => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /** Access the underlying HTTP client. */\n getClient(): AuthClient {\n return this.client;\n }\n\n /**\n * Initialize by hydrating the session from storage.\n * When a publishableKey is set, also fetches client config in parallel.\n * Call this once on app start.\n */\n async initialize(): Promise<void> {\n // Kick off config fetch in parallel (non-blocking).\n if (this.publishableKey && !this.clientConfig) {\n void this.fetchClientConfig();\n }\n\n try {\n const raw = await this.storage.getItem(SESSION_KEY);\n if (!raw) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n const session: Session = JSON.parse(raw);\n const expiresAt = new Date(session.expires_at).getTime();\n\n if (Date.now() >= expiresAt) {\n // Token expired — try refresh.\n await this.refreshSession(session.refresh_token);\n return;\n }\n\n // Token still valid — fetch user profile.\n this.setState({ status: \"loading\" });\n const user = await this.client.getMe(session.session_token);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n } catch {\n // Never destroy the session on errors during initialization.\n // The server may be temporarily unreachable (404/500/network) or the\n // token might need refreshing. Only an explicit signOut() clears storage.\n // Preserve whatever session we have and schedule a refresh attempt.\n const stored = await this.storage.getItem(SESSION_KEY);\n if (stored) {\n const session: Session = JSON.parse(stored);\n this.setState({ status: \"authenticated\", user: null as unknown as User, session });\n this.scheduleRefresh(session);\n } else {\n this.setState({ status: \"unauthenticated\" });\n }\n }\n }\n\n /** Sign in with email & password. */\n async signIn(credentials: SignInRequest): Promise<void> {\n // Note: we intentionally do NOT set global state to \"loading\" here.\n // The form components manage their own isSubmitting state. Setting global\n // \"loading\" would cause parent components that conditionally render based\n // on isLoading to unmount the form, losing its local state (step, fields).\n try {\n const res = await this.client.signIn(credentials);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(), // fallback\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign up with email & password. */\n async signUp(data: SignUpRequest): Promise<void> {\n // See signIn() comment — forms manage their own loading state.\n try {\n const res = await this.client.signUp(data);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /** Sign out and clear the session. */\n async signOut(): Promise<void> {\n const token = this.getSessionToken();\n if (token) {\n try {\n await this.client.signOut(token);\n } catch {\n // Best-effort server sign-out.\n }\n }\n this.clearRefreshTimer();\n await this.clearSession();\n this.setState({ status: \"unauthenticated\" });\n }\n\n /** Submit an MFA challenge code. */\n async submitMFACode(enrollmentId: string, code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.mfaChallenge({ enrollment_id: enrollmentId, code });\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Submit an MFA recovery code. */\n async submitRecoveryCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const res = await this.client.verifyRecoveryCode(code);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Send an SMS code for MFA verification. Returns masked phone + expiry info. */\n async sendSMSCode(): Promise<{ sent: boolean; phone_masked: string; expires_in_seconds: number }> {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n return this.client.sendSMSCodeForMFA(token);\n }\n\n /** Submit an SMS verification code during MFA challenge. */\n async submitSMSCode(code: string): Promise<void> {\n this.setState({ status: \"loading\" });\n try {\n const token = this.getSessionToken();\n if (!token) throw new Error(\"No session token available\");\n const res = await this.client.verifySMSCodeForMFA(code, token);\n const session: Session = {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: new Date(Date.now() + 3600_000).toISOString(),\n };\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n this.handleError(err);\n }\n }\n\n /** Refresh the current session manually. */\n async refreshNow(): Promise<void> {\n const state = this.state;\n if (state.status !== \"authenticated\") return;\n await this.refreshSession(state.session.refresh_token);\n }\n\n /** Get the current session token (if authenticated). */\n getSessionToken(): string | null {\n if (this.state.status === \"authenticated\") {\n return this.state.session.session_token;\n }\n if (this.state.status === \"mfa_required\") {\n return this.state.session.session_token;\n }\n return null;\n }\n\n /** Get the current user (if authenticated). */\n getUser(): User | null {\n if (this.state.status === \"authenticated\") {\n return this.state.user;\n }\n return null;\n }\n\n // ── Client Config API ────────────────────────────\n\n /** Get the cached client config (or null if not yet fetched). */\n getClientConfig(): ClientConfig | null {\n return this.clientConfig;\n }\n\n /** Subscribe to client config changes. Returns an unsubscribe function. */\n subscribeConfig(listener: (config: ClientConfig | null) => void): () => void {\n this.configListeners.add(listener);\n return () => {\n this.configListeners.delete(listener);\n };\n }\n\n /**\n * Fetch client config from the backend.\n * Deduplicates concurrent calls and caches the result with a TTL.\n */\n async fetchClientConfig(): Promise<ClientConfig> {\n // Deduplicate concurrent fetches.\n if (this.configFetchPromise) {\n return this.configFetchPromise;\n }\n\n // Check storage cache.\n try {\n const cached = await this.storage.getItem(CONFIG_KEY);\n if (cached) {\n const { config, fetchedAt } = JSON.parse(cached) as { config: ClientConfig; fetchedAt: number };\n if (Date.now() - fetchedAt < CONFIG_TTL_MS) {\n this.setClientConfig(config);\n return config;\n }\n }\n } catch {\n // Cache miss or parse error — fetch fresh.\n }\n\n this.configFetchPromise = this.client\n .fetchClientConfig(this.publishableKey)\n .then(async (config) => {\n this.setClientConfig(config);\n // Cache with timestamp.\n try {\n await this.storage.setItem(\n CONFIG_KEY,\n JSON.stringify({ config, fetchedAt: Date.now() }),\n );\n } catch {\n // Storage write failure is non-fatal.\n }\n return config;\n })\n .finally(() => {\n this.configFetchPromise = null;\n });\n\n return this.configFetchPromise;\n }\n\n /** Tear down: clear timers and listeners. */\n destroy(): void {\n this.clearRefreshTimer();\n this.listeners.clear();\n this.configListeners.clear();\n }\n\n // ── Internals ─────────────────────────────────────\n\n private async handleAuthResponse(user: User, session: Session): Promise<void> {\n await this.persistSession(session);\n this.setState({ status: \"authenticated\", user, session });\n this.scheduleRefresh(session);\n }\n\n private async refreshSession(refreshToken: string, attempt = 0): Promise<void> {\n try {\n const newSession = await this.client.refresh(refreshToken);\n const user = await this.client.getMe(newSession.session_token);\n await this.persistSession(newSession);\n this.setState({ status: \"authenticated\", user, session: newSession });\n this.scheduleRefresh(newSession);\n } catch {\n // Never destroy the session on refresh failure. The refresh token\n // may still be valid — the server could be temporarily unreachable.\n // Schedule a retry in 30 seconds. Only explicit signOut() clears storage.\n this.clearRefreshTimer();\n this.refreshTimer = setTimeout(() => {\n void this.refreshSession(refreshToken);\n }, 30_000);\n }\n }\n\n private scheduleRefresh(session: Session): void {\n this.clearRefreshTimer();\n const expiresAt = new Date(session.expires_at).getTime();\n const delay = expiresAt - Date.now() - REFRESH_BEFORE_MS;\n\n if (delay <= 0) {\n // Already near expiry — refresh immediately.\n void this.refreshSession(session.refresh_token);\n return;\n }\n\n this.refreshTimer = setTimeout(() => {\n void this.refreshSession(session.refresh_token);\n }, delay);\n }\n\n private clearRefreshTimer(): void {\n if (this.refreshTimer !== null) {\n clearTimeout(this.refreshTimer);\n this.refreshTimer = null;\n }\n }\n\n private async persistSession(session: Session): Promise<void> {\n await this.storage.setItem(SESSION_KEY, JSON.stringify(session));\n }\n\n private async clearSession(): Promise<void> {\n await this.storage.removeItem(SESSION_KEY);\n }\n\n private setClientConfig(config: ClientConfig): void {\n this.clientConfig = config;\n for (const listener of this.configListeners) {\n try {\n listener(config);\n } catch {\n // Listener errors should not break the config flow.\n }\n }\n }\n\n private setState(newState: AuthState): void {\n this.state = newState;\n for (const listener of this.listeners) {\n try {\n listener(newState);\n } catch {\n // Listener errors should not break the state machine.\n }\n }\n }\n\n private handleError(err: unknown): void {\n const message = err instanceof AuthClientError ? err.message : \"An unexpected error occurred\";\n const code = err instanceof AuthClientError ? err.code : undefined;\n\n // MFA required is returned as a specific error code.\n if (code === 403 && message.toLowerCase().includes(\"mfa\")) {\n const token = this.getSessionToken();\n if (token) {\n this.setState({\n status: \"mfa_required\",\n session: {\n session_token: token,\n refresh_token: \"\",\n expires_at: new Date(Date.now() + 300_000).toISOString(),\n },\n });\n return;\n }\n }\n\n this.setState({ status: \"error\", error: message });\n this.onError?.({ error: message, code });\n }\n}\n","/**\n * WebAuthn encoding helpers.\n *\n * The go-webauthn backend serialises binary fields (challenge, user.id,\n * credential IDs, …) as **base64url strings** in JSON. The browser\n * WebAuthn API requires those same fields as ArrayBuffer / Uint8Array.\n *\n * These helpers bridge the gap in both directions:\n * begin response → browser API (base64url string → ArrayBuffer)\n * browser API → finish POST (ArrayBuffer → base64url string)\n */\n\n// ── low-level codecs ──────────────────────────────────────────────\n\n/** Decode a base64url-encoded string into a Uint8Array. */\nexport function base64urlToBuffer(base64url: string): Uint8Array {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = base64 + \"=\".repeat((4 - (base64.length % 4)) % 4);\n const binary = atob(padded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/** Encode an ArrayBuffer (or Uint8Array) to a base64url string (no padding). */\nexport function bufferToBase64url(\n buffer: ArrayBuffer | Uint8Array,\n): string {\n const bytes =\n buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary)\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\n// ── begin → browser helpers ────────────────────────────────────────\n\n/**\n * Prepare the options object returned by `/passkeys/register/begin`\n * for `navigator.credentials.create({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, user.id, excludeCredentials[].id\n */\nexport function prepareCreationOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialCreationOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // user.id\n if (out.user && typeof out.user === \"object\") {\n const user = { ...(out.user as Record<string, unknown>) };\n if (typeof user.id === \"string\") {\n user.id = base64urlToBuffer(user.id);\n }\n out.user = user;\n }\n\n // excludeCredentials[].id\n if (Array.isArray(out.excludeCredentials)) {\n out.excludeCredentials = (\n out.excludeCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialCreationOptions;\n}\n\n/**\n * Prepare the options object returned by `/passkeys/login/begin`\n * for `navigator.credentials.get({ publicKey })`.\n *\n * Converts base64url strings → Uint8Array for:\n * challenge, allowCredentials[].id\n */\nexport function prepareRequestOptions(\n options: Record<string, unknown>,\n): PublicKeyCredentialRequestOptions {\n const publicKey = (options.publicKey ?? options) as Record<string, unknown>;\n\n const out: Record<string, unknown> = { ...publicKey };\n\n // challenge\n if (typeof out.challenge === \"string\") {\n out.challenge = base64urlToBuffer(out.challenge);\n }\n\n // allowCredentials[].id\n if (Array.isArray(out.allowCredentials)) {\n out.allowCredentials = (\n out.allowCredentials as Record<string, unknown>[]\n ).map((c) => {\n if (typeof c.id === \"string\") {\n return { ...c, id: base64urlToBuffer(c.id) };\n }\n return c;\n });\n }\n\n return out as unknown as PublicKeyCredentialRequestOptions;\n}\n\n// ── browser → finish helpers ───────────────────────────────────────\n\n/**\n * Serialize a PublicKeyCredential returned by navigator.credentials\n * into a plain object suitable for POSTing to the `/finish` endpoint.\n *\n * Converts ArrayBuffer fields → base64url strings so they survive\n * JSON.stringify and match what go-webauthn expects.\n */\nexport function serializeCredential(\n credential: Credential,\n): Record<string, unknown> {\n const cred = credential as PublicKeyCredential;\n const response = cred.response;\n\n const result: Record<string, unknown> = {\n id: cred.id,\n rawId: bufferToBase64url(cred.rawId),\n type: cred.type,\n response: {} as Record<string, unknown>,\n };\n\n const serializedResponse: Record<string, unknown> = {\n clientDataJSON: bufferToBase64url(response.clientDataJSON),\n };\n\n // Attestation response (register finish)\n if (\"attestationObject\" in response) {\n const attestation = response as AuthenticatorAttestationResponse;\n serializedResponse.attestationObject = bufferToBase64url(\n attestation.attestationObject,\n );\n }\n\n // Assertion response (login finish)\n if (\"authenticatorData\" in response) {\n const assertion = response as AuthenticatorAssertionResponse;\n serializedResponse.authenticatorData = bufferToBase64url(\n assertion.authenticatorData,\n );\n serializedResponse.signature = bufferToBase64url(assertion.signature);\n if (assertion.userHandle) {\n serializedResponse.userHandle = bufferToBase64url(assertion.userHandle);\n }\n }\n\n result.response = serializedResponse;\n\n // Include authenticatorAttachment if present\n if (cred.authenticatorAttachment) {\n result.authenticatorAttachment = cred.authenticatorAttachment;\n }\n\n return result;\n}\n"],"mappings":"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","names":["AuthClient","AuthClient"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@authsome/ui-core",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "Framework-agnostic auth state machine and API client for AuthSome",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,16 +23,16 @@
23
23
  "url": "https://github.com/xraph/authsome.git",
24
24
  "directory": "ui/packages/core"
25
25
  },
26
- "devDependencies": {
27
- "tsup": "^8.4.0",
28
- "typescript": "^5.8.0"
29
- },
30
- "license": "MIT",
31
26
  "scripts": {
32
27
  "build": "tsup src/index.ts --format esm --dts --clean",
33
28
  "dev": "tsup src/index.ts --format esm --dts --watch",
34
29
  "typecheck": "tsc --noEmit",
35
30
  "lint": "eslint src/",
36
31
  "clean": "rm -rf dist"
37
- }
38
- }
32
+ },
33
+ "devDependencies": {
34
+ "tsup": "^8.4.0",
35
+ "typescript": "^5.8.0"
36
+ },
37
+ "license": "MIT"
38
+ }