@authsome/ui-core 1.6.1 → 1.7.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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/api-client.ts","../src/client.ts","../src/auth.ts","../src/redirect.ts","../src/webauthn.ts"],"sourcesContent":["// Code generated by authsome sdkgen. DO NOT EDIT.\n\nimport type {\n ACSRequest,\n AdminAppResponse,\n AdminCatalogProvider,\n AdminCatalogResponse,\n AdminCreateConnectionResponse,\n AdminDeleteAppRequest,\n AdminDeleteConnectionResponse,\n AdminDeleteProviderResponse,\n AdminDeleteServiceAccountRequest,\n AdminDeleteUserRequest,\n AdminGetServiceAccountRequest,\n AdminGetUserRequest,\n AdminImpersonateRequest,\n AdminListConnectionsResponse,\n AdminListOrgsRequest,\n AdminListProvidersResponse,\n AdminListServiceAccountsRequest,\n AdminListUsersRequest,\n AdminPlatformOwnerResponse,\n AdminProvider,\n AdminProviderResponse,\n AdminRevokePlatformOwnerRequest,\n AdminServiceAccountAPIKeyResponse,\n AdminServiceAccountListResponse,\n AdminServiceAccountResponse,\n AdminStatsRequest,\n AdminStatsResponse,\n AdminStopImpersonationRequest,\n AdminUnbanUserRequest,\n AdminUserListResponse,\n AuthMethod,\n AuthResponse,\n AuthorizeRequest,\n BulkError,\n BulkImportResult,\n BulkRevokeSessionsRequest,\n BulkRevokeSessionsResponse,\n CallbackRequest,\n CallbackResponse,\n CancelSubscriptionRequest,\n ChallengeRequest,\n ChallengeResponse,\n ChangePlanRequest,\n CheckEntitlementRequest,\n CheckSlugRequest,\n ClientConfigBranding,\n ClientConfigCaptcha,\n ClientConfigEmailVerification,\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 Connection,\n Consent,\n CouponResponse,\n CreateClientResponse,\n CreateCouponRequest,\n CreateKeyRequest,\n CreateKeyResponse,\n CreatePlanRequest,\n CreateSubscriptionRequest,\n CredentialInfo,\n Definition,\n DefinitionGroup,\n DeleteAccountRequest,\n DeleteAppClientConfigRequest,\n DeleteAppSessionConfigRequest,\n DeleteClientRequest,\n DeleteCouponRequest,\n DeleteDeviceRequest,\n DeleteOrgRequest,\n DeleteRequest,\n DeleteResponse,\n DeleteSettingRequest,\n DeleteTeamRequest,\n DeleteWebhookRequest,\n Device,\n DeviceAuthRequest,\n DeviceAuthResponse,\n DeviceCompleteRequest,\n DeviceCompleteResponse,\n DeviceListResponse,\n DisableRequest,\n DisableResponse,\n DiscoveryRequest,\n DiscoveryResponse,\n Email,\n EnrollRequest,\n EnrollResponse,\n EntitlementResponse,\n Environment,\n EnvironmentListResponse,\n EnvironmentSettingsResponse,\n ExportDataRequest,\n FeatureInput,\n ForgotPasswordResponse,\n GetActiveSubRequest,\n GetAppClientConfigRequest,\n GetAppSessionConfigRequest,\n GetClientConfigRequest,\n GetDeviceRequest,\n GetInvoiceRequest,\n GetMeRequest,\n GetOrgRequest,\n GetPlanRequest,\n GetTeamRequest,\n GetWebhookRequest,\n GroupRef,\n GroupResource,\n HealthResponse,\n IntrospectResponse,\n IntrospectUser,\n Invitation,\n InvitationListResponse,\n InvoiceResponse,\n KeyListItem,\n ListAuthMethodsRequest,\n ListAuthMethodsResponse,\n ListClientsRequest,\n ListClientsResponse,\n ListConsentsRequest,\n ListCouponsRequest,\n ListCouponsResponse,\n ListDefinitionsResponse,\n ListDevicesRequest,\n ListEnvironmentsRequest,\n ListInvitationsRequest,\n ListInvoicesRequest,\n ListInvoicesResponse,\n ListKeysRequest,\n ListKeysResponse,\n ListMembersRequest,\n ListNamespaceDefinitionsRequest,\n ListOrgsRequest,\n ListPlansRequest,\n ListPlansResponse,\n ListRequest,\n ListResponse,\n ListRolesRequest,\n ListSessionsRequest,\n ListSettingsDefinitionsRequest,\n ListSubscriptionsRequest,\n ListSubscriptionsResponse,\n ListTeamsRequest,\n ListWebhooksRequest,\n LoginBeginRequest,\n LoginBeginResponse,\n LoginFinishRequest,\n LoginFinishResponse,\n LoginRequest,\n LoginResponse,\n MarkInvoicePaidRequest,\n Member,\n MemberListResponse,\n MemberRef,\n Meta,\n Name,\n OAuth2Client,\n Object,\n ObjectFieldDef,\n OrgListResponse,\n Organization,\n Permission,\n PermissionListResponse,\n PlanIDRequest,\n PlanResponse,\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 Response,\n RevokeKeyRequest,\n RevokeRequest,\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 SubIDRequest,\n SwitchOrgResponse,\n Team,\n TeamListResponse,\n TokenRequest,\n TokenResponse,\n TrustDeviceRequest,\n UIMetadata,\n UnenforceSettingRequest,\n UnlinkAuthMethodRequest,\n UnlinkAuthMethodResponse,\n UsageItemResponse,\n UsageSummaryRequest,\n UsageSummaryResponse,\n User,\n UserInfo,\n UserInfoRequest,\n UserResource,\n UserRoleListResponse,\n Validation,\n VerifyMFARequest,\n VerifyMFAResponse,\n VerifyRequest,\n VerifyResponse,\n VisibilityCondition,\n VoidInvoiceRequest,\n Webhook,\n WebhookListResponse,\n scimGroupPathParam,\n scimUserPathParam,\n ScimCreateGroupRequest,\n ScimReplaceGroupRequest,\n ScimPatchGroupRequest,\n ScimDeleteGroupRequest,\n ScimCreateUserRequest,\n ScimReplaceUserRequest,\n ScimPatchUserRequest,\n ScimDeleteUserRequest,\n AdminCreateAppRequest,\n SetAppClientConfigRequest,\n SetAppSessionConfigRequest,\n AdminBulkRevokeSessionsRequest,\n AdminBulkImportUsersRequest,\n CreateOAuth2ClientRequest,\n DeleteOAuth2ClientRequest,\n AdminGrantPlatformOwnerRequest,\n AdminCreateServiceAccountRequest,\n AdminCreateServiceAccountAPIKeyRequest,\n EnforceSettingRequest,\n SetSettingRequest,\n SocialAdminUpsertProviderRequest,\n SsoAdminCreateConnectionRequest,\n SsoAdminUpdateConnectionRequest,\n AdminCreateUserRequest,\n AdminUpdateUserRequest,\n AdminBanUserRequest,\n CreateBillingPlanRequest,\n ActivateBillingPlanRequest,\n ArchiveBillingPlanRequest,\n ChangeSubscriptionPlanRequest,\n PauseSubscriptionRequest,\n ResumeSubscriptionRequest,\n ChangePasswordRequest,\n GrantConsentRequest,\n RevokeConsentRequest,\n CreateEnvironmentRequest,\n UpdateEnvironmentRequest,\n CloneEnvironmentRequest,\n UpdateEnvironmentSettingsRequest,\n ForgotPasswordRequest,\n IntrospectTokenRequest,\n CreateAPIKeyRequest,\n RevokeAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n UpdateMeRequest,\n DeleteMeRequest,\n SwitchOrgRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n DisableMFARequest,\n RegenerateMFARecoveryCodesRequest,\n VerifyRecoveryCodeRequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n Oauth2DeviceAuthorizeRequest,\n Oauth2DeviceCompleteRequest,\n Oauth2RevokeRequest,\n Oauth2TokenRequest,\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 PhoneAuthStartRequest,\n PhoneAuthVerifyRequest,\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 ResendEmailVerificationRequest,\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 /**\n * Publishable key (`pk_live_*` / `pk_test_*` / `pk_stg_*`) sent on every\n * request as the X-Publishable-Key header. The server resolves this to\n * the owning App on the public-auth path (signup, signin, forgot-\n * password, resend-verification), so frontends never need to know — or\n * send — the App's UUID. Without it, those endpoints reject with 400\n * \"app context required\".\n */\n publishableKey?: string;\n /** Optional custom fetch implementation */\n fetch?: typeof globalThis.fetch;\n}\n\nexport class AuthClient {\n private baseURL: string;\n private publishableKey: string | undefined;\n private fetchFn: typeof globalThis.fetch;\n\n constructor(config: AuthClientConfig | Pick<{ baseURL: string; publishableKey?: string; fetch?: typeof globalThis.fetch }, 'baseURL' | 'publishableKey' | 'fetch'>) {\n this.baseURL = config.baseURL.replace(/\\/+$/, '');\n this.publishableKey = (config as { publishableKey?: string }).publishableKey;\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n /** Set the publishable key sent on every request as X-Publishable-Key. */\n setPublishableKey(key: string | undefined): void {\n this.publishableKey = key;\n }\n\n /** Get the current publishable key. */\n getPublishableKey(): string | undefined {\n return this.publishableKey;\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 * OpenID Connect Discovery\n * GET /.well-known/openid-configuration\n */\n async oidcDiscovery(token: string): Promise<DiscoveryResponse> {\n const path = \"/.well-known/openid-configuration\";\n return this.request<DiscoveryResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SCIM Groups\n * GET /scim/v2/Groups\n */\n async scimListGroups(token: string): Promise<ListResponse> {\n const path = \"/scim/v2/Groups\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SCIM Group\n * POST /scim/v2/Groups\n */\n async scimCreateGroup(body: ScimCreateGroupRequest, token: string): Promise<GroupResource> {\n const path = \"/scim/v2/Groups\";\n return this.request<GroupResource>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get SCIM Group\n * GET /scim/v2/Groups/{groupId}\n */\n async scimGetGroup(groupId: string, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Replace SCIM Group\n * PUT /scim/v2/Groups/{groupId}\n */\n async scimReplaceGroup(groupId: string, body: ScimReplaceGroupRequest, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Patch SCIM Group\n * PATCH /scim/v2/Groups/{groupId}\n */\n async scimPatchGroup(groupId: string, body: ScimPatchGroupRequest, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete SCIM Group\n * DELETE /scim/v2/Groups/{groupId}\n */\n async scimDeleteGroup(groupId: string, body: ScimDeleteGroupRequest, token: string): Promise<Object> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<Object>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * SCIM Resource Types\n * GET /scim/v2/ResourceTypes\n */\n async scimResourceTypes(token: string): Promise<Object> {\n const path = \"/scim/v2/ResourceTypes\";\n return this.request<Object>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SCIM Schemas\n * GET /scim/v2/Schemas\n */\n async scimSchemas(token: string): Promise<Object> {\n const path = \"/scim/v2/Schemas\";\n return this.request<Object>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SCIM Service Provider Configuration\n * GET /scim/v2/ServiceProviderConfig\n */\n async scimServiceProviderConfig(token: string): Promise<Object> {\n const path = \"/scim/v2/ServiceProviderConfig\";\n return this.request<Object>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SCIM Users\n * GET /scim/v2/Users\n */\n async scimListUsers(token: string): Promise<ListResponse> {\n const path = \"/scim/v2/Users\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SCIM User\n * POST /scim/v2/Users\n */\n async scimCreateUser(body: ScimCreateUserRequest, token: string): Promise<UserResource> {\n const path = \"/scim/v2/Users\";\n return this.request<UserResource>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get SCIM User\n * GET /scim/v2/Users/{userId}\n */\n async scimGetUser(userId: string, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Replace SCIM User\n * PUT /scim/v2/Users/{userId}\n */\n async scimReplaceUser(userId: string, body: ScimReplaceUserRequest, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Patch SCIM User\n * PATCH /scim/v2/Users/{userId}\n */\n async scimPatchUser(userId: string, body: ScimPatchUserRequest, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete SCIM User\n * DELETE /scim/v2/Users/{userId}\n */\n async scimDeleteUser(userId: string, body: ScimDeleteUserRequest, token: string): Promise<Object> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<Object>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Create application (admin)\n * POST /v1/admin/apps\n */\n async adminCreateApp(body: AdminCreateAppRequest, token: string): Promise<AdminAppResponse> {\n const path = \"/v1/admin/apps\";\n return this.request<AdminAppResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete application (admin)\n * DELETE /v1/admin/apps/{appId}\n */\n async adminDeleteApp(appId: string, body: AdminDeleteAppRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/apps/${appId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\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 OAuth2 clients\n * GET /v1/admin/oauth/clients\n */\n async listOAuth2Clients(token: string): Promise<ListClientsResponse> {\n const path = \"/v1/admin/oauth/clients\";\n return this.request<ListClientsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create OAuth2 client\n * POST /v1/admin/oauth/clients\n */\n async createOAuth2Client(body: CreateOAuth2ClientRequest, token: string): Promise<CreateClientResponse> {\n const path = \"/v1/admin/oauth/clients\";\n return this.request<CreateClientResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete OAuth2 client\n * DELETE /v1/admin/oauth/clients/{clientId}\n */\n async deleteOAuth2Client(clientId: string, body: DeleteOAuth2ClientRequest, token: string): Promise<void> {\n const path = `/v1/admin/oauth/clients/${clientId}`;\n return this.request<void>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List organizations (admin)\n * GET /v1/admin/orgs\n */\n async adminListOrgs(): Promise<OrgListResponse> {\n const path = \"/v1/admin/orgs\";\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Grant platform-owner role (admin)\n * POST /v1/admin/platform/owners\n */\n async adminGrantPlatformOwner(body: AdminGrantPlatformOwnerRequest, token: string): Promise<AdminPlatformOwnerResponse> {\n const path = \"/v1/admin/platform/owners\";\n return this.request<AdminPlatformOwnerResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke platform-owner role (admin)\n * DELETE /v1/admin/platform/owners/{userID}\n */\n async adminRevokePlatformOwner(userID: string, body: AdminRevokePlatformOwnerRequest, token: string): Promise<AdminPlatformOwnerResponse> {\n const path = `/v1/admin/platform/owners/${userID}`;\n return this.request<AdminPlatformOwnerResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * List service accounts (admin)\n * GET /v1/admin/service-accounts\n */\n async adminListServiceAccounts(token: string): Promise<AdminServiceAccountListResponse> {\n const path = \"/v1/admin/service-accounts\";\n return this.request<AdminServiceAccountListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create service account (admin)\n * POST /v1/admin/service-accounts\n */\n async adminCreateServiceAccount(body: AdminCreateServiceAccountRequest, token: string): Promise<AdminServiceAccountResponse> {\n const path = \"/v1/admin/service-accounts\";\n return this.request<AdminServiceAccountResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get service account (admin)\n * GET /v1/admin/service-accounts/{serviceAccountId}\n */\n async adminGetServiceAccount(serviceAccountId: string, token: string): Promise<AdminServiceAccountResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}`;\n return this.request<AdminServiceAccountResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete service account (admin)\n * DELETE /v1/admin/service-accounts/{serviceAccountId}\n */\n async adminDeleteServiceAccount(serviceAccountId: string, body: AdminDeleteServiceAccountRequest, token: string): Promise<StatusResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}`;\n return this.request<StatusResponse>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Create service account API key (admin)\n * POST /v1/admin/service-accounts/{serviceAccountId}/api-keys\n */\n async adminCreateServiceAccountAPIKey(serviceAccountId: string, body: AdminCreateServiceAccountAPIKeyRequest, token: string): Promise<AdminServiceAccountAPIKeyResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}/api-keys`;\n return this.request<AdminServiceAccountAPIKeyResponse>(\n 'POST',\n path,\n body,\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 * List social providers (admin)\n * GET /v1/admin/social/providers\n */\n async socialAdminListProviders(app_id: string, token: string): Promise<AdminListProvidersResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/social/providers\" + (qs ? `?${qs}` : '');\n return this.request<AdminListProvidersResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List supported social providers\n * GET /v1/admin/social/providers/catalog\n */\n async socialAdminCatalog(token: string): Promise<AdminCatalogResponse> {\n const path = \"/v1/admin/social/providers/catalog\";\n return this.request<AdminCatalogResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Configure a social provider (admin)\n * PUT /v1/admin/social/providers/{provider}\n */\n async socialAdminUpsertProvider(provider: string, body: SocialAdminUpsertProviderRequest, app_id: string, token: string): Promise<AdminProviderResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = `/v1/admin/social/providers/${provider}` + (qs ? `?${qs}` : '');\n return this.request<AdminProviderResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete a social provider (admin)\n * DELETE /v1/admin/social/providers/{provider}\n */\n async socialAdminDeleteProvider(provider: string, app_id: string, token: string): Promise<AdminDeleteProviderResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = `/v1/admin/social/providers/${provider}` + (qs ? `?${qs}` : '');\n return this.request<AdminDeleteProviderResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SSO connections for an app (admin)\n * GET /v1/admin/sso/connections\n */\n async ssoAdminListConnections(app_id: string, token: string): Promise<AdminListConnectionsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/sso/connections\" + (qs ? `?${qs}` : '');\n return this.request<AdminListConnectionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SSO connection (admin)\n * POST /v1/admin/sso/connections\n */\n async ssoAdminCreateConnection(body: SsoAdminCreateConnectionRequest, token: string): Promise<AdminCreateConnectionResponse> {\n const path = \"/v1/admin/sso/connections\";\n return this.request<AdminCreateConnectionResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get SSO connection (admin)\n * GET /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminGetConnection(connectionId: string, token: string): Promise<Connection> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<Connection>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update SSO connection (admin)\n * PUT /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminUpdateConnection(connectionId: string, body: SsoAdminUpdateConnectionRequest, token: string): Promise<Connection> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<Connection>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete SSO connection (admin)\n * DELETE /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminDeleteConnection(connectionId: string, token: string): Promise<AdminDeleteConnectionResponse> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<AdminDeleteConnectionResponse>(\n 'DELETE',\n path,\n undefined,\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 * Create user (admin)\n * POST /v1/admin/users/create\n */\n async adminCreateUser(body: AdminCreateUserRequest, token: string): Promise<User> {\n const path = \"/v1/admin/users/create\";\n return this.request<User>(\n 'POST',\n path,\n body,\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 * Update user (admin)\n * PATCH /v1/admin/users/{userId}\n */\n async adminUpdateUser(userId: string, body: AdminUpdateUserRequest, token: string): Promise<User> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<User>(\n 'PATCH',\n path,\n body,\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 * List coupons\n * GET /v1/billing/coupons\n */\n async listCoupons(token: string): Promise<ListCouponsResponse> {\n const path = \"/v1/billing/coupons\";\n return this.request<ListCouponsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create coupon\n * POST /v1/billing/coupons\n */\n async createCoupon(body: CreateCouponRequest, token: string): Promise<CouponResponse> {\n const path = \"/v1/billing/coupons\";\n return this.request<CouponResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete coupon\n * DELETE /v1/billing/coupons/{couponId}\n */\n async deleteCoupon(couponId: string, body: DeleteCouponRequest, token: string): Promise<void> {\n const path = `/v1/billing/coupons/${couponId}`;\n return this.request<void>(\n 'DELETE',\n path,\n body,\n token,\n );\n }\n\n /**\n * Check feature entitlement\n * GET /v1/billing/entitlements/{featureKey}\n */\n async checkEntitlement(featureKey: string, token: string): Promise<EntitlementResponse> {\n const path = `/v1/billing/entitlements/${featureKey}`;\n return this.request<EntitlementResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List invoices\n * GET /v1/billing/invoices\n */\n async listInvoices(token: string): Promise<ListInvoicesResponse> {\n const path = \"/v1/billing/invoices\";\n return this.request<ListInvoicesResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get invoice\n * GET /v1/billing/invoices/{invoiceId}\n */\n async getInvoice(invoiceId: string, token: string): Promise<InvoiceResponse> {\n const path = `/v1/billing/invoices/${invoiceId}`;\n return this.request<InvoiceResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Mark invoice as paid\n * POST /v1/billing/invoices/{invoiceId}/pay\n */\n async markInvoicePaid(invoiceId: string, body: MarkInvoicePaidRequest, token: string): Promise<void> {\n const path = `/v1/billing/invoices/${invoiceId}/pay`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Void an invoice\n * POST /v1/billing/invoices/{invoiceId}/void\n */\n async voidInvoice(invoiceId: string, body: VoidInvoiceRequest, token: string): Promise<void> {\n const path = `/v1/billing/invoices/${invoiceId}/void`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List billing plans\n * GET /v1/billing/plans\n */\n async listBillingPlans(token: string): Promise<ListPlansResponse> {\n const path = \"/v1/billing/plans\";\n return this.request<ListPlansResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create billing plan\n * POST /v1/billing/plans\n */\n async createBillingPlan(body: CreateBillingPlanRequest, token: string): Promise<PlanResponse> {\n const path = \"/v1/billing/plans\";\n return this.request<PlanResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get billing plan\n * GET /v1/billing/plans/{planId}\n */\n async getBillingPlan(planId: string, token: string): Promise<PlanResponse> {\n const path = `/v1/billing/plans/${planId}`;\n return this.request<PlanResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Activate a billing plan\n * POST /v1/billing/plans/{planId}/activate\n */\n async activateBillingPlan(planId: string, body: ActivateBillingPlanRequest, token: string): Promise<void> {\n const path = `/v1/billing/plans/${planId}/activate`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Archive a billing plan\n * POST /v1/billing/plans/{planId}/archive\n */\n async archiveBillingPlan(planId: string, body: ArchiveBillingPlanRequest, token: string): Promise<void> {\n const path = `/v1/billing/plans/${planId}/archive`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List subscriptions\n * GET /v1/billing/subscriptions\n */\n async listSubscriptions(token: string): Promise<ListSubscriptionsResponse> {\n const path = \"/v1/billing/subscriptions\";\n return this.request<ListSubscriptionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create subscription\n * POST /v1/billing/subscriptions\n */\n async createSubscription(body: CreateSubscriptionRequest, token: string): Promise<Response> {\n const path = \"/v1/billing/subscriptions\";\n return this.request<Response>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get active subscription\n * GET /v1/billing/subscriptions/active\n */\n async getActiveSubscription(token: string): Promise<Response> {\n const path = \"/v1/billing/subscriptions/active\";\n return this.request<Response>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Cancel subscription\n * POST /v1/billing/subscriptions/{subId}/cancel\n */\n async cancelSubscription(subId: string, body: CancelSubscriptionRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/cancel`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Change subscription plan\n * POST /v1/billing/subscriptions/{subId}/change-plan\n */\n async changeSubscriptionPlan(subId: string, body: ChangeSubscriptionPlanRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/change-plan`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Pause subscription\n * POST /v1/billing/subscriptions/{subId}/pause\n */\n async pauseSubscription(subId: string, body: PauseSubscriptionRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/pause`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Resume subscription\n * POST /v1/billing/subscriptions/{subId}/resume\n */\n async resumeSubscription(subId: string, body: ResumeSubscriptionRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/resume`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get usage summary\n * GET /v1/billing/usage\n */\n async getUsageSummary(token: string): Promise<UsageSummaryResponse> {\n const path = \"/v1/billing/usage\";\n return this.request<UsageSummaryResponse>(\n 'GET',\n path,\n undefined,\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 consents\n * GET /v1/consent\n */\n async listConsents(): Promise<ListResponse> {\n const path = \"/v1/consent\";\n return this.request<ListResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Grant consent\n * POST /v1/consent/grant\n */\n async grantConsent(body: GrantConsentRequest): Promise<Consent> {\n const path = \"/v1/consent/grant\";\n return this.request<Consent>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Revoke consent\n * POST /v1/consent/revoke\n */\n async revokeConsent(body: RevokeConsentRequest): Promise<StatusResponse> {\n const path = \"/v1/consent/revoke\";\n return this.request<StatusResponse>(\n 'POST',\n path,\n body,\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 * Introspect token\n * POST /v1/introspect\n */\n async introspectToken(body: IntrospectTokenRequest): Promise<IntrospectResponse> {\n const path = \"/v1/introspect\";\n return this.request<IntrospectResponse>(\n 'POST',\n path,\n body,\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 * Switch active organization\n * POST /v1/me/switch-org\n */\n async switchOrg(body: SwitchOrgRequest, token: string): Promise<SwitchOrgResponse> {\n const path = \"/v1/me/switch-org\";\n return this.request<SwitchOrgResponse>(\n 'POST',\n path,\n body,\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 * OAuth2 Authorization\n * GET /v1/oauth/authorize\n */\n async oauth2Authorize(): Promise<void> {\n const path = \"/v1/oauth/authorize\";\n return this.request<void>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Device Authorization\n * POST /v1/oauth/device/authorize\n */\n async oauth2DeviceAuthorize(body: Oauth2DeviceAuthorizeRequest): Promise<DeviceAuthResponse> {\n const path = \"/v1/oauth/device/authorize\";\n return this.request<DeviceAuthResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Complete device authorization\n * POST /v1/oauth/device/complete\n */\n async oauth2DeviceComplete(body: Oauth2DeviceCompleteRequest): Promise<DeviceCompleteResponse> {\n const path = \"/v1/oauth/device/complete\";\n return this.request<DeviceCompleteResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Revoke token\n * POST /v1/oauth/revoke\n */\n async oauth2Revoke(body: Oauth2RevokeRequest, token: string): Promise<void> {\n const path = \"/v1/oauth/revoke\";\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * OAuth2 Token\n * POST /v1/oauth/token\n */\n async oauth2Token(body: Oauth2TokenRequest): Promise<TokenResponse> {\n const path = \"/v1/oauth/token\";\n return this.request<TokenResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * OIDC UserInfo\n * GET /v1/oauth/userinfo\n */\n async oauth2UserInfo(token: string): Promise<UserInfo> {\n const path = \"/v1/oauth/userinfo\";\n return this.request<UserInfo>(\n 'GET',\n path,\n undefined,\n token,\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 * Start phone authentication\n * POST /v1/phone/start\n */\n async phoneAuthStart(body: PhoneAuthStartRequest): Promise<StartResponse> {\n const path = \"/v1/phone/start\";\n return this.request<StartResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Verify phone OTP\n * POST /v1/phone/verify\n */\n async phoneAuthVerify(body: PhoneAuthVerifyRequest): Promise<VerifyResponse> {\n const path = \"/v1/phone/verify\";\n return this.request<VerifyResponse>(\n 'POST',\n path,\n body,\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 * Resend email verification\n * POST /v1/verify-email/resend\n */\n async resendEmailVerification(body: ResendEmailVerificationRequest): Promise<StatusResponse> {\n const path = \"/v1/verify-email/resend\";\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 if (this.publishableKey) {\n headers['X-Publishable-Key'] = this.publishableKey;\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; type?: string; [k: string]: unknown } | 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 apiError?.type,\n apiError, // full decoded body so callers can read extras like mfa_ticket / available_methods\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 // Stable string error code from the backend envelope (e.g.\n // \"email_not_verified\", \"captcha_required\", \"mfa_required\"). Lets\n // the UI branch on specific failure modes instead of pattern-\n // matching on the human-readable message.\n type?: string;\n // Full decoded JSON body when the response body was JSON. Lets\n // callers read tagged extras the envelope carries beyond\n // {error, code, type} — e.g. mfa_ticket and available_methods on\n // a 403 with type:\"mfa_required\". Undefined when the body wasn't\n // JSON.\n details?: Record<string, unknown>;\n\n constructor(message: string, code?: number, type?: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'AuthClientError';\n this.code = code;\n this.type = type;\n this.details = details;\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 * Reads `baseURL` and `fetchFn` directly off the generated parent\n * class — earlier generator templates kept a `this.config` ref but\n * the current embedded template stores fields individually, so the\n * old `(this as any).config.baseURL` shape produced `undefined` and\n * the URL constructor threw.\n */\n async fetchClientConfig(publishableKey?: string): Promise<ClientConfig> {\n const baseURL = (this as any).baseURL as string;\n const fetchFn = ((this as any).fetchFn as typeof globalThis.fetch) ?? globalThis.fetch;\n const url = new URL(\"/v1/client-config\", baseURL);\n if (publishableKey) {\n url.searchParams.set(\"key\", publishableKey);\n }\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\n/**\n * Storage key under which the whole Session (tokens + expiry) is persisted.\n *\n * Exported because a cookie-backed TokenStorage writes it as a cookie name,\n * and server-side readers have to know what to look for. See\n * @authsome/ui-nextjs readSessionToken.\n */\nexport const SESSION_STORAGE_KEY = \"authsome:session\";\n\nconst SESSION_KEY = SESSION_STORAGE_KEY;\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// Used only when a server response omits expires_at.\nconst DEFAULT_SESSION_TTL_MS = 3600_000;\n// Bounds the refresh retry loop. Without a cap a revoked token is retried for\n// as long as the tab stays open.\nconst MAX_REFRESH_ATTEMPTS = 5;\nconst REFRESH_RETRY_BASE_MS = 30_000;\n\n/**\n * In-memory token storage. Cleared on page reload, and unreachable to any\n * other script on the page.\n *\n * This is the default. Persisting tokens in localStorage means the refresh\n * token — good for weeks — sits somewhere any injected script can read, so a\n * single XSS becomes long-term account access rather than a page-lifetime\n * problem. Surviving reloads is better solved by letting the backend set\n * httpOnly session cookies, which JavaScript cannot read at all; see\n * createCookieStorage's notes and the Next.js proxy.\n *\n * If you accept the tradeoff, opt in explicitly with createLocalStorage().\n */\nfunction createMemoryStorage(): 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/**\n * Token storage backed by window.localStorage, falling back to memory where\n * localStorage is unavailable (SSR, restricted contexts).\n *\n * Opt in only if you understand the exposure: everything written here,\n * including the refresh token, is readable by any script running on the page.\n * Prefer backend-set httpOnly cookies where you can.\n *\n * new AuthManager({ baseURL, storage: createLocalStorage() })\n */\nexport function createLocalStorage(): 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 createMemoryStorage();\n}\n\n/**\n * Builds a Session from an auth response.\n *\n * The server's own `expires_at` is authoritative. Three of the four call sites\n * used to hardcode \"now + 1 hour\" instead, so with any other server-side TTL\n * the refresh timer was scheduled against a lifetime the token did not have —\n * a shorter one left the client sitting on a dead token until minute 59.\n * The fallback applies only when the server omits the field.\n */\nfunction toSession(res: {\n session_token: string;\n refresh_token: string;\n expires_at?: string;\n}): Session {\n return {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: res.expires_at ?? new Date(Date.now() + DEFAULT_SESSION_TTL_MS).toISOString(),\n };\n}\n\n/**\n * Reports whether an error is the server rejecting the credential, as opposed\n * to the request never getting a verdict.\n *\n * Only 401/403 count. A 404, a 5xx, a timeout or a DNS failure say nothing\n * about whether the token is valid, and must not be read as \"signed out\" —\n * a misconfigured baseURL would otherwise log out every user.\n */\nfunction isAuthRejection(err: unknown): boolean {\n if (err instanceof AuthClientError) {\n return err.code === 401 || err.code === 403;\n }\n return false;\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; type?: string }) => 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 ?? createMemoryStorage();\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 (err) {\n await this.handleInitFailure(err);\n }\n }\n\n /**\n * Resolves the state when hydrating a stored session failed.\n *\n * The two failure modes must not be conflated. A rejected credential means\n * the user is signed out. An unreachable server means we simply do not know,\n * and signing them out over a transient blip is its own bug — which is what\n * the previous behaviour tried to avoid, by reporting \"authenticated\" with a\n * null user. That kept people signed in through an outage but told every\n * consumer gating on `isAuthenticated` to render protected UI for a session\n * nothing had validated, and made `user.email` a crash.\n *\n * So: rejection signs out; unavailability yields \"unknown\", which is not\n * authenticated but retains the session and keeps a refresh scheduled so the\n * app recovers on its own.\n */\n private async handleInitFailure(err: unknown): Promise<void> {\n const stored = await this.storage.getItem(SESSION_KEY);\n if (!stored) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n let session: Session;\n try {\n session = JSON.parse(stored);\n } catch {\n // Unparseable storage is not a session at all.\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n if (isAuthRejection(err)) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n this.setState({ status: \"unknown\", session });\n this.scheduleRefresh(session);\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 = toSession(res);\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n // MFA required: surface the ticket + available methods so the\n // form can swap to the challenge UI. The ticket is server-side\n // partial-auth; submitMFAChallenge below completes the round-\n // trip and issues a real session.\n if (\n err instanceof AuthClientError &&\n err.type === \"mfa_required\" &&\n err.details\n ) {\n const ticket = typeof err.details[\"mfa_ticket\"] === \"string\"\n ? (err.details[\"mfa_ticket\"] as string)\n : \"\";\n const methods = Array.isArray(err.details[\"available_methods\"])\n ? (err.details[\"available_methods\"] as string[])\n : [];\n if (ticket) {\n this.setState({\n status: \"mfa_required\",\n email: credentials.email ?? \"\",\n mfaTicket: ticket,\n availableMethods: methods,\n });\n // Do NOT rethrow — the form switches to the challenge view\n // on this state, the same way it switches on\n // verification_pending after sign-up.\n return;\n }\n }\n\n // Specifically surface email_not_verified as a first-class state\n // so the UI can swap to a \"verify your email\" panel rather than a\n // generic error.\n if (\n err instanceof AuthClientError &&\n err.type === \"email_not_verified\"\n ) {\n this.setState({\n status: \"email_not_verified\",\n email: credentials.email ?? \"\",\n });\n throw err;\n }\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 // The signup response always includes a session token, but when the\n // backend has email verification enabled (the default) that token is\n // unusable until the email is verified. The UI must NOT route the\n // user into the signed-in shell — it should show a \"check your inbox\"\n // panel. We therefore discard the session entirely and surface a\n // verification_pending state.\n //\n // Enumeration-resistance note: when a duplicate signup is detected,\n // the backend returns a byte-shape-identical 201 with a synthetic\n // session token. We treat both real and duplicate signups the same.\n await this.client.signUp(data);\n this.setState({\n status: \"verification_pending\",\n email: data.email,\n });\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /**\n * Resend the verification email for an unverified account.\n *\n * Always resolves; the backend returns 200 regardless of whether the\n * email is registered, unregistered, or already verified — that's the\n * enumeration-resistance contract. UI callers should disable the\n * button + show a generic \"if your email is registered, we sent a new\n * link\" confirmation rather than branching on the response.\n */\n async resendVerification(email: string): Promise<void> {\n if (!email) return;\n try {\n await this.client.resendEmailVerification({ email });\n } catch (err) {\n // Surface transport errors via onError but don't propagate —\n // the UI message is intentionally generic.\n this.onError?.({\n error: err instanceof Error ? err.message : \"resend failed\",\n });\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 /**\n * Submit the MFA challenge code against the ticket from the\n * mfa_required state. On success: real session minted, state →\n * \"authenticated\". On bad code: state stays \"mfa_required\" so\n * the form can show the error inline; the ticket remains valid\n * for the 5-minute server-side TTL.\n *\n * Throws if called outside the mfa_required state — the caller\n * has nowhere to send the code.\n */\n async submitMFAChallenge(code: string): Promise<void> {\n const state = this.state;\n if (state.status !== \"mfa_required\") {\n throw new Error(\"auth: submitMFAChallenge called outside the mfa_required state\");\n }\n try {\n const res = await this.client.challengeMFA({\n mfa_ticket: state.mfaTicket,\n code,\n });\n const session: Session = toSession(res);\n await this.handleAuthResponse(res.user as User, session);\n } catch (err) {\n // Don't fall into the generic error handler — bad code should\n // leave the form on the challenge view, not bounce back to the\n // sign-in form. The caller (the challenge form) surfaces the\n // 401 inline.\n this.onError?.({\n error: err instanceof Error ? err.message : \"challenge failed\",\n });\n throw err;\n }\n }\n\n /**\n * @deprecated Use submitMFAChallenge(code). The old enrollment-id\n * + partial-session shape was removed in the MFA consolidation;\n * this thin shim only exists so older callers don't break their\n * build, but the enrollmentId argument is now ignored.\n */\n async submitMFACode(_enrollmentId: string, code: string): Promise<void> {\n return this.submitMFAChallenge(code);\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 = toSession(res);\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 = toSession(res);\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 /**\n * Get the current session token (if authenticated). Returns null\n * during the MFA challenge — there is no real session yet, only a\n * ticket the challenge handler validates internally.\n */\n getSessionToken(): string | null {\n if (this.state.status === \"authenticated\") {\n return this.state.session.session_token;\n }\n return null;\n }\n\n /**\n * Get the active MFA ticket (only set during the mfa_required\n * state). Form components driving the challenge UI read this to\n * confirm they have a partial-auth credential before letting the\n * user submit a code.\n */\n getMFATicket(): string | null {\n return this.state.status === \"mfa_required\" ? this.state.mfaTicket : 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 /**\n * Exchanges the refresh token for a new session.\n *\n * On failure the two cases are separated, as they are in initialize: a\n * rejected token means signed out, anything else means no verdict and is\n * worth retrying.\n *\n * `attempt` was previously accepted and never read, and the retry path\n * called back in without it — so a permanently-invalid token retried every\n * 30s for as long as the tab stayed open, and the user was never signed out.\n * It now bounds the retries and backs off between them.\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 (err) {\n // The server rejected the token: retrying cannot help.\n if (isAuthRejection(err)) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n if (attempt >= MAX_REFRESH_ATTEMPTS) {\n // Out of retries without ever reaching the server. The session is\n // retained — the token may still be good — but nothing has validated\n // it, so we must not keep claiming authenticated.\n const stored = await this.storage.getItem(SESSION_KEY);\n if (stored) {\n try {\n this.setState({ status: \"unknown\", session: JSON.parse(stored) });\n return;\n } catch {\n // Fall through to unauthenticated on unparseable storage.\n }\n }\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n // No verdict — back off and try again.\n this.clearRefreshTimer();\n this.refreshTimer = setTimeout(\n () => {\n void this.refreshSession(refreshToken, attempt + 1);\n },\n REFRESH_RETRY_BASE_MS * 2 ** attempt,\n );\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 const type = err instanceof AuthClientError ? err.type : undefined;\n\n // MFA required is now handled directly inside signIn() — the\n // backend returns it as a structured error envelope with a\n // mfa_ticket extra and the new contract requires that ticket\n // be carried into state, not the (no-longer-issued) partial-\n // session token. The legacy \"code === 403 && contains 'mfa'\"\n // branch was removed; if a 403 with type:\"mfa_required\" reaches\n // handleError it means signIn didn't catch it, which is a bug\n // worth surfacing as an error rather than silently transitioning.\n\n this.setState({ status: \"error\", error: message });\n this.onError?.({ error: message, code, type });\n }\n}\n","/**\n * Redirect-target validation.\n *\n * Sign-in and sign-up flows accept a `?redirect=` parameter so a user who was\n * bounced to the auth page lands back where they started. That parameter is\n * attacker-controlled: without validation, `?redirect=https://evil.com` sends\n * the user to a hostile page *immediately after they authenticate*, which is\n * the most convincing possible moment to present a fake \"confirm your\n * password\" screen. It can also carry `javascript:` payloads.\n *\n * The check here resolves the candidate against the current origin and\n * compares origins, rather than inspecting the string. String checks are the\n * usual approach and they leak: `startsWith(\"/\")` accepts `//evil.com` and\n * `/\\evil.com`, both of which browsers resolve to a different host.\n */\n\n/** Schemes a redirect may use. Everything else (javascript:, data:, blob:) is refused. */\nconst ALLOWED_PROTOCOLS = new Set([\"http:\", \"https:\"]);\n\n/** Options controlling which redirect targets are acceptable. */\nexport interface SafeRedirectOptions {\n /**\n * Origin the app is currently served from — `window.location.origin` in a\n * browser. Redirects to this origin are always allowed.\n */\n currentOrigin: string;\n /**\n * Extra origins accepted as redirect targets, for deployments where the auth\n * UI and the app live on different hosts. Empty by default: same-origin only.\n *\n * Entries are matched **exactly**, by origin. Wildcards and subdomain\n * patterns are deliberately unsupported — every tenant host must be listed\n * in full. Pattern matching here is a well-known source of account-takeover\n * bugs, and an explicit list is worth the verbosity.\n *\n * Each entry must be an absolute URL (\"https://portal.example.com\"); it is\n * reduced to its origin, so a trailing slash, a path, or a capitalized host\n * are all tolerated. Entries that cannot be parsed are ignored and will\n * never match.\n */\n allowedOrigins?: string[];\n}\n\n/**\n * Reports whether `candidate` is safe to navigate to after authentication.\n *\n * Accepts relative paths (\"/dashboard\", \"/a/b?x=1#f\") and absolute URLs whose\n * origin is the current origin or an allowed one. Refuses everything else,\n * including a malformed candidate.\n */\nexport function isSafeRedirect(\n candidate: string | null | undefined,\n options: SafeRedirectOptions,\n): boolean {\n if (typeof candidate !== \"string\" || candidate.trim() === \"\") {\n return false;\n }\n\n let resolved: URL;\n try {\n // Resolving against currentOrigin collapses the evasion cases —\n // \"//evil.com\", \"/\\evil.com\", \"\\thttps://evil.com\" — onto their real\n // origin, where the comparison below catches them.\n resolved = new URL(candidate, options.currentOrigin);\n } catch {\n return false;\n }\n\n // Opaque-origin schemes (javascript:, data:) never reach the comparison.\n if (!ALLOWED_PROTOCOLS.has(resolved.protocol)) {\n return false;\n }\n\n if (resolved.origin === options.currentOrigin) {\n return true;\n }\n\n // Exact origin match against the allowlist — no wildcards by design.\n // Entries are normalized so config formatting can't cause a silent miss.\n return (options.allowedOrigins ?? []).some(\n (allowed) => toOrigin(allowed) === resolved.origin,\n );\n}\n\n/**\n * Reduces an allowlist entry to its canonical origin, or `null` when it isn't\n * a parseable absolute URL. Returning `null` keeps a malformed entry inert:\n * it matches nothing rather than matching everything.\n */\nfunction toOrigin(value: string): string | null {\n try {\n const { origin } = new URL(value);\n // Opaque-origin schemes (data:, javascript:) stringify to \"null\" and must\n // never be treated as a real origin to compare against.\n return origin === \"null\" ? null : origin;\n } catch {\n return null;\n }\n}\n\n/**\n * Returns `candidate` when it passes {@link isSafeRedirect}, otherwise\n * `fallback`. Use this at navigation sites so an unsafe value degrades to a\n * known-good destination instead of blocking the user.\n */\nexport function safeRedirectTarget(\n candidate: string | null | undefined,\n fallback: string,\n options: SafeRedirectOptions,\n): string {\n return isSafeRedirect(candidate, options) ? (candidate as string) : fallback;\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/redirect.ts","../src/webauthn.ts"],"sourcesContent":["// Code generated by authsome sdkgen. DO NOT EDIT.\n\nimport type {\n AcceptInvitationRequest,\n AddMemberRequest,\n AddPermissionRequest,\n AdminAppResponse,\n AdminBanUserRequest,\n AdminCatalogProvider,\n AdminCatalogResponse,\n AdminCopyUserRequest,\n AdminCreateAppRequest,\n AdminCreateConnectionRequest,\n AdminCreateConnectionResponse,\n AdminCreateServiceAccountAPIKeyRequest,\n AdminCreateServiceAccountRequest,\n AdminCreateUserRequest,\n AdminDeleteConnectionResponse,\n AdminDeleteProviderResponse,\n AdminGrantPlatformOwnerRequest,\n AdminListConnectionsResponse,\n AdminListProvidersResponse,\n AdminPlatformOwnerResponse,\n AdminProvider,\n AdminProviderResponse,\n AdminServiceAccountAPIKeyResponse,\n AdminServiceAccountListResponse,\n AdminServiceAccountResponse,\n AdminStatsResponse,\n AdminUpdateConnectionRequest,\n AdminUpdateUserRequest,\n AdminUpsertProviderRequest,\n AdminUserListResponse,\n ApiStatusResponse,\n ApiTokenResponse,\n AppclientconfigConfig,\n AppsessionconfigConfig,\n AssertionResponse,\n AssignRoleRequest,\n AttestationResponse,\n AuthMethod,\n AuthResponse,\n BulkError,\n BulkImportResult,\n BulkImportUsersRequest,\n BulkRevokeSessionsResponse,\n CancelSubscriptionRequest,\n ChallengeRequest,\n ChallengeResponse,\n ChangePasswordRequest,\n ChangePlanRequest,\n ClientConfigBranding,\n ClientConfigCaptcha,\n ClientConfigEmailVerification,\n ClientConfigFieldValidation,\n ClientConfigMFA,\n ClientConfigResponse,\n ClientConfigSSO,\n ClientConfigSSOConnection,\n ClientConfigSelectOption,\n ClientConfigSignupField,\n ClientConfigSocial,\n ClientConfigSocialProvider,\n ClientConfigToggle,\n CloneEnvironmentRequest,\n CloneEnvironmentResponse,\n Connection,\n Consent,\n ConsentListResponse,\n ConsentStatusResponse,\n CouponResponse,\n CreateClientRequest,\n CreateClientResponse,\n CreateCouponRequest,\n CreateEnvironmentRequest,\n CreateInvitationRequest,\n CreateKeyRequest,\n CreateKeyResponse,\n CreateOrgRequest,\n CreatePlanRequest,\n CreateRoleRequest,\n CreateSubscriptionRequest,\n CreateTeamRequest,\n CreateWebhookRequest,\n CredentialInfo,\n DeclineInvitationRequest,\n Definition,\n DefinitionGroup,\n DelegationListResponse,\n DelegationResponse,\n DeleteResponse,\n Device,\n DeviceAuthResponse,\n DeviceCompleteResponse,\n DeviceListResponse,\n DisableRequest,\n DisableResponse,\n DiscoveryResponse,\n Email,\n Empty,\n EnforceSettingRequest,\n EnrollRequest,\n EnrollResponse,\n EntitlementResponse,\n Environment,\n EnvironmentListResponse,\n EnvironmentSettingsResponse,\n ExchangeRequest,\n FeatureInput,\n ForgotPasswordRequest,\n ForgotPasswordResponse,\n GrantConsentRequest,\n GroupRef,\n GroupResource,\n HealthResponse,\n IntrospectConfirmation,\n IntrospectRequest,\n IntrospectResponse,\n IntrospectUser,\n Invitation,\n InvitationListResponse,\n InvoiceResponse,\n KeyListItem,\n ListAuthMethodsResponse,\n ListClientsResponse,\n ListCouponsResponse,\n ListDefinitionsResponse,\n ListInvoicesResponse,\n ListKeysResponse,\n ListPlansResponse,\n ListSubscriptionsResponse,\n LoginBeginResponse,\n LoginByDomainRequest,\n LoginFinishResponse,\n LoginResponse,\n MagiclinkVerifyRequest,\n MagiclinkVerifyResponse,\n MarkInvoicePaidRequest,\n MeResponse,\n Member,\n MemberListResponse,\n MemberRef,\n Meta,\n MintChildRequest,\n MintChildResponse,\n Name,\n OAuth2Client,\n Oauth2providerTokenResponse,\n ObjectFieldDef,\n OrgListResponse,\n Organization,\n OrganizationStatusResponse,\n PasskeyListResponse,\n Permission,\n PermissionListResponse,\n PhoneStartResponse,\n PhoneVerifyRequest,\n PhoneVerifyResponse,\n PlanResponse,\n RecoveryRegenerateResponse,\n RecoveryVerifyRequest,\n RecoveryVerifyResponse,\n RefreshRequest,\n RegisterBeginRequest,\n RegisterBeginResponse,\n RegisterClientRequest,\n RegisterClientResponse,\n RegisterFinishResponse,\n ResendVerificationRequest,\n ResetPasswordRequest,\n ResolvedSetting,\n ResolvedSettingResponse,\n ResolvedSettingsResponse,\n ResourceTypeList,\n Response,\n RevokeConsentRequest,\n Role,\n RoleListResponse,\n RotateClientSecretResponse,\n SMSSendRequest,\n SMSSendResponse,\n SMSVerifyRequest,\n SMSVerifyResponse,\n SchemaList,\n ScimListResponse,\n ScopeValue,\n SelectOption,\n SendRequest,\n SendResponse,\n ServiceProviderConfig,\n SessionListResponse,\n SetAppClientConfigRequest,\n SetAppSessionConfigRequest,\n SetSettingRequest,\n SettingValueResponse,\n Settings,\n SignInRequest,\n SignUpRequest,\n SlugAvailableResponse,\n SocialCallbackResponse,\n SocialStartResponse,\n SsoCallbackResponse,\n StartRequest,\n SwitchOrgRequest,\n SwitchOrgResponse,\n Team,\n TeamListResponse,\n TokenExchangeRequest,\n TokenExchangeResponse,\n UIMetadata,\n UnassignRoleRequest,\n UnlinkAuthMethodResponse,\n UpdateClientRequest,\n UpdateClientResponse,\n UpdateEnvironmentRequest,\n UpdateEnvironmentSettingsRequest,\n UpdateMeRequest,\n UpdateMemberRequest,\n UpdateOrgRequest,\n UpdateRegistrationRequest,\n UpdateRoleRequest,\n UpdateTeamRequest,\n UpdateWebhookRequest,\n UsageItemResponse,\n UsageSummaryResponse,\n User,\n UserInfo,\n UserResource,\n UserRoleListResponse,\n Validation,\n VerifyEmailRequest,\n VerifyMFARequest,\n VerifyMFAResponse,\n VisibilityCondition,\n VoidInvoiceRequest,\n Webhook,\n WebhookListResponse,\n AdminBulkImportUsersRequest,\n CreateOAuth2ClientRequest,\n UpdateOAuth2ClientRequest,\n SocialAdminUpsertProviderRequest,\n SsoAdminCreateConnectionRequest,\n SsoAdminUpdateConnectionRequest,\n CreateBillingPlanRequest,\n ChangeSubscriptionPlanRequest,\n IntrospectTokenRequest,\n CreateAPIKeyRequest,\n SendMagicLinkRequest,\n VerifyMagicLinkRequest,\n ChallengeMFARequest,\n EnrollMFARequest,\n DisableMFARequest,\n VerifyRecoveryCodeRequest,\n SendSMSCodeRequest,\n VerifySMSCodeRequest,\n Oauth2DeviceAuthorizeRequest,\n Oauth2DeviceCompleteRequest,\n Oauth2RegisterClientRequest,\n Oauth2UpdateRegistrationRequest,\n Oauth2RevokeRequest,\n Oauth2TokenRequest,\n CreateOrganizationRequest,\n UpdateOrganizationRequest,\n PasskeyLoginFinishRequest,\n PasskeyRegisterBeginRequest,\n PasskeyRegisterFinishRequest,\n PhoneAuthStartRequest,\n PhoneAuthVerifyRequest,\n MintChildPrincipalRequest,\n AuthsomeCreateRoleRequest,\n AuthsomeUpdateRoleRequest,\n AuthsomeAssignRoleRequest,\n AuthsomeAddPermissionRequest,\n AuthsomeUnassignRoleRequest,\n SsoExchangeRequest,\n StartSSOLoginByDomainRequest,\n ExchangeTokenRequest,\n ResendEmailVerificationRequest,\n} from './api-types';\n/**\n * Strips trailing slashes from a base URL.\n *\n * This was `replace(/\\/+$/, '')`, which backtracks: a caller passing a URL\n * ending in many slashes makes the engine retry from every one of them, so the\n * work grows with the square of that run. The base URL comes from whoever\n * constructs the client, which is not always a literal. Walking backwards is\n * linear and needs no engine at all.\n */\nfunction stripTrailingSlashes(url: string): string {\n let end = url.length;\n while (end > 0 && url.charCodeAt(end - 1) === 47) {\n end--;\n }\n return url.slice(0, end);\n}\n\n/**\n * Encodes a body as application/x-www-form-urlencoded, which RFC 6749 section\n * 4.1.3 requires at the OAuth2 token endpoint. Absent values stay off the wire\n * entirely, the same as the JSON path omits them.\n *\n * An array field is written once per element rather than as one value. A form\n * body carries repeated fields, not lists, and RFC 8707 relies on that: the\n * token endpoint reads every `resource` it is given. Stringifying the array\n * instead would join it on commas, which reaches the server as a single value\n * that is not a URI, so one resource would arrive mangled and the rest would\n * vanish. An empty array leaves the field off, matching the Go client.\n */\nfunction encodeForm(body: unknown): string {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(body as Record<string, unknown>)) {\n if (value === undefined || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n for (const element of value) {\n params.append(key, String(element));\n }\n continue;\n }\n params.set(key, String(value));\n }\n return params.toString();\n}\n\nexport interface AuthClientConfig {\n /** Base URL of the AuthSome API (e.g., \"https://api.example.com\") */\n baseURL: string;\n /**\n * Publishable key (`pk_live_*` / `pk_test_*` / `pk_stg_*`) sent on every\n * request as the X-Publishable-Key header. The server resolves this to\n * the owning App on the public-auth path (signup, signin, forgot-\n * password, resend-verification), so frontends never need to know — or\n * send — the App's UUID. Without it, those endpoints reject with 400\n * \"app context required\".\n */\n publishableKey?: string;\n /** Optional custom fetch implementation */\n fetch?: typeof globalThis.fetch;\n}\n\nexport class AuthClient {\n private baseURL: string;\n private publishableKey: string | undefined;\n private fetchFn: typeof globalThis.fetch;\n\n constructor(config: AuthClientConfig | Pick<{ baseURL: string; publishableKey?: string; fetch?: typeof globalThis.fetch }, 'baseURL' | 'publishableKey' | 'fetch'>) {\n this.baseURL = stripTrailingSlashes(config.baseURL);\n this.publishableKey = (config as { publishableKey?: string }).publishableKey;\n this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);\n }\n\n /** Set the publishable key sent on every request as X-Publishable-Key. */\n setPublishableKey(key: string | undefined): void {\n this.publishableKey = key;\n }\n\n /** Get the current publishable key. */\n getPublishableKey(): string | undefined {\n return this.publishableKey;\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 * OpenID Connect Discovery\n * GET /.well-known/openid-configuration\n */\n async oidcDiscoveryPrefixed(token: string): Promise<DiscoveryResponse> {\n const path = \"/.well-known/openid-configuration\";\n return this.request<DiscoveryResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SCIM Groups\n * GET /scim/v2/Groups\n */\n async scimListGroups(token: string): Promise<ScimListResponse> {\n const path = \"/scim/v2/Groups\";\n return this.request<ScimListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SCIM Group\n * POST /scim/v2/Groups\n */\n async scimCreateGroup(token: string): Promise<GroupResource> {\n const path = \"/scim/v2/Groups\";\n return this.request<GroupResource>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get SCIM Group\n * GET /scim/v2/Groups/{groupId}\n */\n async scimGetGroup(groupId: string, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Replace SCIM Group\n * PUT /scim/v2/Groups/{groupId}\n */\n async scimReplaceGroup(groupId: string, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'PUT',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Patch SCIM Group\n * PATCH /scim/v2/Groups/{groupId}\n */\n async scimPatchGroup(groupId: string, token: string): Promise<GroupResource> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<GroupResource>(\n 'PATCH',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete SCIM Group\n * DELETE /scim/v2/Groups/{groupId}\n */\n async scimDeleteGroup(groupId: string, token: string): Promise<Empty> {\n const path = `/scim/v2/Groups/${groupId}`;\n return this.request<Empty>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SCIM Resource Types\n * GET /scim/v2/ResourceTypes\n */\n async scimResourceTypes(token: string): Promise<ResourceTypeList> {\n const path = \"/scim/v2/ResourceTypes\";\n return this.request<ResourceTypeList>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SCIM Schemas\n * GET /scim/v2/Schemas\n */\n async scimSchemas(token: string): Promise<SchemaList> {\n const path = \"/scim/v2/Schemas\";\n return this.request<SchemaList>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SCIM Service Provider Configuration\n * GET /scim/v2/ServiceProviderConfig\n */\n async scimServiceProviderConfig(token: string): Promise<ServiceProviderConfig> {\n const path = \"/scim/v2/ServiceProviderConfig\";\n return this.request<ServiceProviderConfig>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SCIM Users\n * GET /scim/v2/Users\n */\n async scimListUsers(token: string): Promise<ScimListResponse> {\n const path = \"/scim/v2/Users\";\n return this.request<ScimListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SCIM User\n * POST /scim/v2/Users\n */\n async scimCreateUser(token: string): Promise<UserResource> {\n const path = \"/scim/v2/Users\";\n return this.request<UserResource>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get SCIM User\n * GET /scim/v2/Users/{userId}\n */\n async scimGetUser(userId: string, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Replace SCIM User\n * PUT /scim/v2/Users/{userId}\n */\n async scimReplaceUser(userId: string, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'PUT',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Patch SCIM User\n * PATCH /scim/v2/Users/{userId}\n */\n async scimPatchUser(userId: string, token: string): Promise<UserResource> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<UserResource>(\n 'PATCH',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete SCIM User\n * DELETE /scim/v2/Users/{userId}\n */\n async scimDeleteUser(userId: string, token: string): Promise<Empty> {\n const path = `/scim/v2/Users/${userId}`;\n return this.request<Empty>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create application (admin)\n * POST /v1/admin/apps\n */\n async adminCreateApp(body: AdminCreateAppRequest, token: string): Promise<AdminAppResponse> {\n const path = \"/v1/admin/apps\";\n return this.request<AdminAppResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete application (admin)\n * DELETE /v1/admin/apps/{appId}\n */\n async adminDeleteApp(appId: string, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/apps/${appId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\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<AppclientconfigConfig> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<AppclientconfigConfig>(\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<AppclientconfigConfig> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<AppclientconfigConfig>(\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/apps/${appId}/client-config`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\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<AppsessionconfigConfig> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<AppsessionconfigConfig>(\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<AppsessionconfigConfig> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<AppsessionconfigConfig>(\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/apps/${appId}/session-config`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Bulk revoke sessions (admin)\n * DELETE /v1/admin/bulk/sessions\n */\n async adminBulkRevokeSessions(user_id: string, token: string): Promise<BulkRevokeSessionsResponse> {\n const params = new URLSearchParams();\n if (user_id !== undefined) params.set('user_id', String(user_id));\n const qs = params.toString();\n const path = \"/v1/admin/bulk/sessions\" + (qs ? `?${qs}` : '');\n return this.request<BulkRevokeSessionsResponse>(\n 'DELETE',\n path,\n undefined,\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(token: string): Promise<ApiStatusResponse> {\n const path = \"/v1/admin/impersonate/stop\";\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Impersonate user (admin)\n * POST /v1/admin/impersonate/{userId}\n */\n async adminImpersonate(userId: string, token: string): Promise<AuthResponse> {\n const path = `/v1/admin/impersonate/${userId}`;\n return this.request<AuthResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List OAuth2 clients\n * GET /v1/admin/oauth/clients\n */\n async listOAuth2Clients(app_id: string, token: string): Promise<ListClientsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/oauth/clients\" + (qs ? `?${qs}` : '');\n return this.request<ListClientsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create OAuth2 client\n * POST /v1/admin/oauth/clients\n */\n async createOAuth2Client(body: CreateOAuth2ClientRequest, token: string): Promise<CreateClientResponse> {\n const path = \"/v1/admin/oauth/clients\";\n return this.request<CreateClientResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Update OAuth2 client\n * PATCH /v1/admin/oauth/clients/{clientId}\n */\n async updateOAuth2Client(clientId: string, body: UpdateOAuth2ClientRequest, token: string): Promise<UpdateClientResponse> {\n const path = `/v1/admin/oauth/clients/${clientId}`;\n return this.request<UpdateClientResponse>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete OAuth2 client\n * DELETE /v1/admin/oauth/clients/{clientId}\n */\n async deleteOAuth2Client(clientId: string, token: string): Promise<void> {\n const path = `/v1/admin/oauth/clients/${clientId}`;\n return this.request<void>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Rotate OAuth2 client secret\n * POST /v1/admin/oauth/clients/{clientId}/secret\n */\n async rotateOAuth2ClientSecret(clientId: string, token: string): Promise<RotateClientSecretResponse> {\n const path = `/v1/admin/oauth/clients/${clientId}/secret`;\n return this.request<RotateClientSecretResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List organizations (admin)\n * GET /v1/admin/orgs\n */\n async adminListOrgs(app_id: string, token: string): Promise<OrgListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/orgs\" + (qs ? `?${qs}` : '');\n return this.request<OrgListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Grant platform-owner role (admin)\n * POST /v1/admin/platform/owners\n */\n async adminGrantPlatformOwner(body: AdminGrantPlatformOwnerRequest, token: string): Promise<AdminPlatformOwnerResponse> {\n const path = \"/v1/admin/platform/owners\";\n return this.request<AdminPlatformOwnerResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke platform-owner role (admin)\n * DELETE /v1/admin/platform/owners/{userID}\n */\n async adminRevokePlatformOwner(userID: string, token: string): Promise<AdminPlatformOwnerResponse> {\n const path = `/v1/admin/platform/owners/${userID}`;\n return this.request<AdminPlatformOwnerResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List service accounts (admin)\n * GET /v1/admin/service-accounts\n */\n async adminListServiceAccounts(app_id: string, token: string, limit?: number, cursor?: string): Promise<AdminServiceAccountListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (limit !== undefined) params.set('limit', String(limit));\n if (cursor !== undefined) params.set('cursor', String(cursor));\n const qs = params.toString();\n const path = \"/v1/admin/service-accounts\" + (qs ? `?${qs}` : '');\n return this.request<AdminServiceAccountListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create service account (admin)\n * POST /v1/admin/service-accounts\n */\n async adminCreateServiceAccount(body: AdminCreateServiceAccountRequest, token: string): Promise<AdminServiceAccountResponse> {\n const path = \"/v1/admin/service-accounts\";\n return this.request<AdminServiceAccountResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get service account (admin)\n * GET /v1/admin/service-accounts/{serviceAccountId}\n */\n async adminGetServiceAccount(serviceAccountId: string, token: string): Promise<AdminServiceAccountResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}`;\n return this.request<AdminServiceAccountResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Delete service account (admin)\n * DELETE /v1/admin/service-accounts/{serviceAccountId}\n */\n async adminDeleteServiceAccount(serviceAccountId: string, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create service account API key (admin)\n * POST /v1/admin/service-accounts/{serviceAccountId}/api-keys\n */\n async adminCreateServiceAccountAPIKey(serviceAccountId: string, body: AdminCreateServiceAccountAPIKeyRequest, token: string): Promise<AdminServiceAccountAPIKeyResponse> {\n const path = `/v1/admin/service-accounts/${serviceAccountId}/api-keys`;\n return this.request<AdminServiceAccountAPIKeyResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List all setting definitions\n * GET /v1/admin/settings/definitions\n */\n async listSettingsDefinitions(namespace: string, category: string, token: string): Promise<ListDefinitionsResponse> {\n const params = new URLSearchParams();\n if (namespace !== undefined) params.set('namespace', String(namespace));\n if (category !== undefined) params.set('category', String(category));\n const qs = params.toString();\n const path = \"/v1/admin/settings/definitions\" + (qs ? `?${qs}` : '');\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, scope: string, scope_id: string, token: string): Promise<ApiStatusResponse> {\n const params = new URLSearchParams();\n if (scope !== undefined) params.set('scope', String(scope));\n if (scope_id !== undefined) params.set('scope_id', String(scope_id));\n const qs = params.toString();\n const path = `/v1/admin/settings/enforce/${key}` + (qs ? `?${qs}` : '');\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Resolve all settings at a scope\n * GET /v1/admin/settings/resolve\n */\n async resolveSettings(namespace: string, app_id: string, org_id: string, user_id: string, token: string): Promise<ResolvedSettingsResponse> {\n const params = new URLSearchParams();\n if (namespace !== undefined) params.set('namespace', String(namespace));\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (org_id !== undefined) params.set('org_id', String(org_id));\n if (user_id !== undefined) params.set('user_id', String(user_id));\n const qs = params.toString();\n const path = \"/v1/admin/settings/resolve\" + (qs ? `?${qs}` : '');\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, app_id: string, org_id: string, user_id: string, token: string): Promise<ResolvedSettingResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (org_id !== undefined) params.set('org_id', String(org_id));\n if (user_id !== undefined) params.set('user_id', String(user_id));\n const qs = params.toString();\n const path = `/v1/admin/settings/resolve/${key}` + (qs ? `?${qs}` : '');\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, scope: string, scope_id: string, token: string): Promise<ApiStatusResponse> {\n const params = new URLSearchParams();\n if (scope !== undefined) params.set('scope', String(scope));\n if (scope_id !== undefined) params.set('scope_id', String(scope_id));\n const qs = params.toString();\n const path = `/v1/admin/settings/values/${key}` + (qs ? `?${qs}` : '');\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List social providers (admin)\n * GET /v1/admin/social/providers\n */\n async socialAdminListProviders(app_id: string, token: string): Promise<AdminListProvidersResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/social/providers\" + (qs ? `?${qs}` : '');\n return this.request<AdminListProvidersResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List supported social providers\n * GET /v1/admin/social/providers/catalog\n */\n async socialAdminCatalog(token: string): Promise<AdminCatalogResponse> {\n const path = \"/v1/admin/social/providers/catalog\";\n return this.request<AdminCatalogResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Configure a social provider (admin)\n * PUT /v1/admin/social/providers/{provider}\n */\n async socialAdminUpsertProvider(provider: string, body: SocialAdminUpsertProviderRequest, app_id: string, token: string): Promise<AdminProviderResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = `/v1/admin/social/providers/${provider}` + (qs ? `?${qs}` : '');\n return this.request<AdminProviderResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete a social provider (admin)\n * DELETE /v1/admin/social/providers/{provider}\n */\n async socialAdminDeleteProvider(provider: string, app_id: string, token: string): Promise<AdminDeleteProviderResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = `/v1/admin/social/providers/${provider}` + (qs ? `?${qs}` : '');\n return this.request<AdminDeleteProviderResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List SSO connections for an app (admin)\n * GET /v1/admin/sso/connections\n */\n async ssoAdminListConnections(app_id: string, token: string): Promise<AdminListConnectionsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/sso/connections\" + (qs ? `?${qs}` : '');\n return this.request<AdminListConnectionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create SSO connection (admin)\n * POST /v1/admin/sso/connections\n */\n async ssoAdminCreateConnection(body: SsoAdminCreateConnectionRequest, token: string): Promise<AdminCreateConnectionResponse> {\n const path = \"/v1/admin/sso/connections\";\n return this.request<AdminCreateConnectionResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get SSO connection (admin)\n * GET /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminGetConnection(connectionId: string, token: string): Promise<Connection> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<Connection>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update SSO connection (admin)\n * PUT /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminUpdateConnection(connectionId: string, body: SsoAdminUpdateConnectionRequest, token: string): Promise<Connection> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<Connection>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete SSO connection (admin)\n * DELETE /v1/admin/sso/connections/{connectionId}\n */\n async ssoAdminDeleteConnection(connectionId: string, token: string): Promise<AdminDeleteConnectionResponse> {\n const path = `/v1/admin/sso/connections/${connectionId}`;\n return this.request<AdminDeleteConnectionResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get stats (admin)\n * GET /v1/admin/stats\n */\n async adminGetStats(app_id: string, token: string): Promise<AdminStatsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/admin/stats\" + (qs ? `?${qs}` : '');\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(app_id: string, token: string, email?: string, cursor?: string, limit?: number): Promise<AdminUserListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (email !== undefined) params.set('email', String(email));\n if (cursor !== undefined) params.set('cursor', String(cursor));\n if (limit !== undefined) params.set('limit', String(limit));\n const qs = params.toString();\n const path = \"/v1/admin/users\" + (qs ? `?${qs}` : '');\n return this.request<AdminUserListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Copy user to another app (admin)\n * POST /v1/admin/users/copy\n */\n async adminCopyUser(body: AdminCopyUserRequest, token: string): Promise<User> {\n const path = \"/v1/admin/users/copy\";\n return this.request<User>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Create user (admin)\n * POST /v1/admin/users/create\n */\n async adminCreateUser(body: AdminCreateUserRequest, token: string): Promise<User> {\n const path = \"/v1/admin/users/create\";\n return this.request<User>(\n 'POST',\n path,\n body,\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 * Update user (admin)\n * PATCH /v1/admin/users/{userId}\n */\n async adminUpdateUser(userId: string, body: AdminUpdateUserRequest, token: string): Promise<User> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<User>(\n 'PATCH',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete user (admin)\n * DELETE /v1/admin/users/{userId}\n */\n async adminDeleteUser(userId: string, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/users/${userId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\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<ApiStatusResponse> {\n const path = `/v1/admin/users/${userId}/ban`;\n return this.request<ApiStatusResponse>(\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/admin/users/${userId}/unban`;\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List coupons\n * GET /v1/billing/coupons\n */\n async listCoupons(app_id: string, token: string): Promise<ListCouponsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/billing/coupons\" + (qs ? `?${qs}` : '');\n return this.request<ListCouponsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create coupon\n * POST /v1/billing/coupons\n */\n async createCoupon(body: CreateCouponRequest, token: string): Promise<CouponResponse> {\n const path = \"/v1/billing/coupons\";\n return this.request<CouponResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete coupon\n * DELETE /v1/billing/coupons/{couponId}\n */\n async deleteCoupon(couponId: string, token: string): Promise<void> {\n const path = `/v1/billing/coupons/${couponId}`;\n return this.request<void>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Check feature entitlement\n * GET /v1/billing/entitlements/{featureKey}\n */\n async checkEntitlement(featureKey: string, token: string): Promise<EntitlementResponse> {\n const path = `/v1/billing/entitlements/${featureKey}`;\n return this.request<EntitlementResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List invoices\n * GET /v1/billing/invoices\n */\n async listInvoices(app_id: string, tenant_id: string, token: string): Promise<ListInvoicesResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (tenant_id !== undefined) params.set('tenant_id', String(tenant_id));\n const qs = params.toString();\n const path = \"/v1/billing/invoices\" + (qs ? `?${qs}` : '');\n return this.request<ListInvoicesResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get invoice\n * GET /v1/billing/invoices/{invoiceId}\n */\n async getInvoice(invoiceId: string, token: string): Promise<InvoiceResponse> {\n const path = `/v1/billing/invoices/${invoiceId}`;\n return this.request<InvoiceResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Mark invoice as paid\n * POST /v1/billing/invoices/{invoiceId}/pay\n */\n async markInvoicePaid(invoiceId: string, body: MarkInvoicePaidRequest, token: string): Promise<void> {\n const path = `/v1/billing/invoices/${invoiceId}/pay`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Void an invoice\n * POST /v1/billing/invoices/{invoiceId}/void\n */\n async voidInvoice(invoiceId: string, body: VoidInvoiceRequest, token: string): Promise<void> {\n const path = `/v1/billing/invoices/${invoiceId}/void`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List billing plans\n * GET /v1/billing/plans\n */\n async listBillingPlans(app_id: string, token: string): Promise<ListPlansResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/billing/plans\" + (qs ? `?${qs}` : '');\n return this.request<ListPlansResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create billing plan\n * POST /v1/billing/plans\n */\n async createBillingPlan(body: CreateBillingPlanRequest, token: string): Promise<PlanResponse> {\n const path = \"/v1/billing/plans\";\n return this.request<PlanResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get billing plan\n * GET /v1/billing/plans/{planId}\n */\n async getBillingPlan(planId: string, token: string): Promise<PlanResponse> {\n const path = `/v1/billing/plans/${planId}`;\n return this.request<PlanResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Activate a billing plan\n * POST /v1/billing/plans/{planId}/activate\n */\n async activateBillingPlan(planId: string, token: string): Promise<void> {\n const path = `/v1/billing/plans/${planId}/activate`;\n return this.request<void>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Archive a billing plan\n * POST /v1/billing/plans/{planId}/archive\n */\n async archiveBillingPlan(planId: string, token: string): Promise<void> {\n const path = `/v1/billing/plans/${planId}/archive`;\n return this.request<void>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List subscriptions\n * GET /v1/billing/subscriptions\n */\n async listSubscriptions(app_id: string, tenant_id: string, token: string, status?: string): Promise<ListSubscriptionsResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (tenant_id !== undefined) params.set('tenant_id', String(tenant_id));\n if (status !== undefined) params.set('status', String(status));\n const qs = params.toString();\n const path = \"/v1/billing/subscriptions\" + (qs ? `?${qs}` : '');\n return this.request<ListSubscriptionsResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Create subscription\n * POST /v1/billing/subscriptions\n */\n async createSubscription(body: CreateSubscriptionRequest, token: string): Promise<Response> {\n const path = \"/v1/billing/subscriptions\";\n return this.request<Response>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Get active subscription\n * GET /v1/billing/subscriptions/active\n */\n async getActiveSubscription(app_id: string, tenant_id: string, token: string): Promise<Response> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (tenant_id !== undefined) params.set('tenant_id', String(tenant_id));\n const qs = params.toString();\n const path = \"/v1/billing/subscriptions/active\" + (qs ? `?${qs}` : '');\n return this.request<Response>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Cancel subscription\n * POST /v1/billing/subscriptions/{subId}/cancel\n */\n async cancelSubscription(subId: string, body: CancelSubscriptionRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/cancel`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Change subscription plan\n * POST /v1/billing/subscriptions/{subId}/change-plan\n */\n async changeSubscriptionPlan(subId: string, body: ChangeSubscriptionPlanRequest, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/change-plan`;\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Pause subscription\n * POST /v1/billing/subscriptions/{subId}/pause\n */\n async pauseSubscription(subId: string, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/pause`;\n return this.request<void>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Resume subscription\n * POST /v1/billing/subscriptions/{subId}/resume\n */\n async resumeSubscription(subId: string, token: string): Promise<void> {\n const path = `/v1/billing/subscriptions/${subId}/resume`;\n return this.request<void>(\n 'POST',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Get usage summary\n * GET /v1/billing/usage\n */\n async getUsageSummary(app_id: string, tenant_id: string, token: string): Promise<UsageSummaryResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (tenant_id !== undefined) params.set('tenant_id', String(tenant_id));\n const qs = params.toString();\n const path = \"/v1/billing/usage\" + (qs ? `?${qs}` : '');\n return this.request<UsageSummaryResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Change password\n * POST /v1/change-password\n */\n async changePassword(body: ChangePasswordRequest, token: string): Promise<ApiStatusResponse> {\n const path = \"/v1/change-password\";\n return this.request<ApiStatusResponse>(\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, key?: string): Promise<ClientConfigResponse> {\n const params = new URLSearchParams();\n if (key !== undefined) params.set('key', String(key));\n const qs = params.toString();\n const path = \"/v1/client-config\" + (qs ? `?${qs}` : '');\n return this.request<ClientConfigResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List consents\n * GET /v1/consent\n */\n async listConsents(purpose: string, cursor: string, limit: number, token: string): Promise<ConsentListResponse> {\n const params = new URLSearchParams();\n if (purpose !== undefined) params.set('purpose', String(purpose));\n if (cursor !== undefined) params.set('cursor', String(cursor));\n if (limit !== undefined) params.set('limit', String(limit));\n const qs = params.toString();\n const path = \"/v1/consent\" + (qs ? `?${qs}` : '');\n return this.request<ConsentListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Grant consent\n * POST /v1/consent/grant\n */\n async grantConsent(body: GrantConsentRequest, token: string): Promise<Consent> {\n const path = \"/v1/consent/grant\";\n return this.request<Consent>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Revoke consent\n * POST /v1/consent/revoke\n */\n async revokeConsent(body: RevokeConsentRequest, token: string): Promise<ConsentStatusResponse> {\n const path = \"/v1/consent/revoke\";\n return this.request<ConsentStatusResponse>(\n 'POST',\n path,\n body,\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/devices/${deviceId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Trust device\n * PATCH /v1/devices/{deviceId}/trust\n */\n async trustDevice(deviceId: string, token: string): Promise<Device> {\n const path = `/v1/devices/${deviceId}/trust`;\n return this.request<Device>(\n 'PATCH',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List environments\n * GET /v1/environments\n */\n async listEnvironments(app_id: string, token: string): Promise<EnvironmentListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/environments\" + (qs ? `?${qs}` : '');\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<ApiStatusResponse> {\n const path = `/v1/environments/${envId}`;\n return this.request<ApiStatusResponse>(\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<ApiStatusResponse> {\n const path = `/v1/environments/${envId}/set-default`;\n return this.request<ApiStatusResponse>(\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 * Introspect token\n * POST /v1/introspect\n */\n async introspectToken(body: IntrospectTokenRequest): Promise<IntrospectResponse> {\n const path = \"/v1/introspect\";\n return this.request<IntrospectResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List API keys\n * GET /v1/keys\n */\n async listAPIKeys(app_id: string, token: string, user_id?: string): Promise<ListKeysResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (user_id !== undefined) params.set('user_id', String(user_id));\n const qs = params.toString();\n const path = \"/v1/keys\" + (qs ? `?${qs}` : '');\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, token: string): Promise<void> {\n const path = `/v1/keys/${keyId}`;\n return this.request<void>(\n 'DELETE',\n path,\n undefined,\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<MagiclinkVerifyResponse> {\n const path = \"/v1/magic-link/verify\";\n return this.request<MagiclinkVerifyResponse>(\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<MeResponse> {\n const path = \"/v1/me\";\n return this.request<MeResponse>(\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(token: string): Promise<ApiStatusResponse> {\n const path = \"/v1/me\";\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\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, token: string): Promise<UnlinkAuthMethodResponse> {\n const path = `/v1/me/auth-methods/${provider}`;\n return this.request<UnlinkAuthMethodResponse>(\n 'DELETE',\n path,\n undefined,\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 * Switch active organization\n * POST /v1/me/switch-org\n */\n async switchOrg(body: SwitchOrgRequest, token: string): Promise<SwitchOrgResponse> {\n const path = \"/v1/me/switch-org\";\n return this.request<SwitchOrgResponse>(\n 'POST',\n path,\n body,\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(token: string): Promise<RecoveryRegenerateResponse> {\n const path = \"/v1/mfa/recovery/regenerate\";\n return this.request<RecoveryRegenerateResponse>(\n 'POST',\n path,\n undefined,\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 * OAuth2 Authorization\n * GET /v1/oauth/authorize\n */\n async oauth2Authorize(response_type: string, client_id: string, redirect_uri?: string, scope?: string, state?: string, code_challenge?: string, code_challenge_method?: string, resource?: string[]): Promise<void> {\n const params = new URLSearchParams();\n if (response_type !== undefined) params.set('response_type', String(response_type));\n if (client_id !== undefined) params.set('client_id', String(client_id));\n if (redirect_uri !== undefined) params.set('redirect_uri', String(redirect_uri));\n if (scope !== undefined) params.set('scope', String(scope));\n if (state !== undefined) params.set('state', String(state));\n if (code_challenge !== undefined) params.set('code_challenge', String(code_challenge));\n if (code_challenge_method !== undefined) params.set('code_challenge_method', String(code_challenge_method));\n // Repeated once per element: a query string carries repeated keys, not\n // lists, which is how RFC 8707 sends `resource`. String() on an array\n // would join it on commas and reach the server as one value.\n if (resource !== undefined) for (const element of resource) params.append('resource', String(element));\n const qs = params.toString();\n const path = \"/v1/oauth/authorize\" + (qs ? `?${qs}` : '');\n return this.request<void>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Device Authorization\n * POST /v1/oauth/device/authorize\n */\n async oauth2DeviceAuthorize(body: Oauth2DeviceAuthorizeRequest): Promise<DeviceAuthResponse> {\n const path = \"/v1/oauth/device/authorize\";\n return this.request<DeviceAuthResponse>(\n 'POST',\n path,\n body,\n undefined,\n true,\n );\n }\n\n /**\n * Complete device authorization\n * POST /v1/oauth/device/complete\n */\n async oauth2DeviceComplete(body: Oauth2DeviceCompleteRequest, token: string): Promise<DeviceCompleteResponse> {\n const path = \"/v1/oauth/device/complete\";\n return this.request<DeviceCompleteResponse>(\n 'POST',\n path,\n body,\n token,\n true,\n );\n }\n\n /**\n * Register OAuth2 client\n * POST /v1/oauth/register\n */\n async oauth2RegisterClient(body: Oauth2RegisterClientRequest, token: string): Promise<RegisterClientResponse> {\n const path = \"/v1/oauth/register\";\n return this.request<RegisterClientResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Read OAuth2 client registration\n * GET /v1/oauth/register/{clientId}\n */\n async oauth2ReadRegistration(clientId: string, token: string): Promise<RegisterClientResponse> {\n const path = `/v1/oauth/register/${clientId}`;\n return this.request<RegisterClientResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Update OAuth2 client registration\n * PUT /v1/oauth/register/{clientId}\n */\n async oauth2UpdateRegistration(clientId: string, body: Oauth2UpdateRegistrationRequest, token: string): Promise<RegisterClientResponse> {\n const path = `/v1/oauth/register/${clientId}`;\n return this.request<RegisterClientResponse>(\n 'PUT',\n path,\n body,\n token,\n );\n }\n\n /**\n * Delete OAuth2 client registration\n * DELETE /v1/oauth/register/{clientId}\n */\n async oauth2DeleteRegistration(clientId: string, token: string): Promise<void> {\n const path = `/v1/oauth/register/${clientId}`;\n return this.request<void>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Revoke token\n * POST /v1/oauth/revoke\n */\n async oauth2Revoke(body: Oauth2RevokeRequest, token: string): Promise<void> {\n const path = \"/v1/oauth/revoke\";\n return this.request<void>(\n 'POST',\n path,\n body,\n token,\n true,\n );\n }\n\n /**\n * OAuth2 Token\n * POST /v1/oauth/token\n */\n async oauth2Token(body: Oauth2TokenRequest): Promise<Oauth2providerTokenResponse> {\n const path = \"/v1/oauth/token\";\n return this.request<Oauth2providerTokenResponse>(\n 'POST',\n path,\n body,\n undefined,\n true,\n );\n }\n\n /**\n * OIDC UserInfo\n * GET /v1/oauth/userinfo\n */\n async oauth2UserInfo(token: string): Promise<UserInfo> {\n const path = \"/v1/oauth/userinfo\";\n return this.request<UserInfo>(\n 'GET',\n path,\n undefined,\n token,\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(app_id: string, slug: string, token: string): Promise<SlugAvailableResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n if (slug !== undefined) params.set('slug', String(slug));\n const qs = params.toString();\n const path = \"/v1/orgs/check-slug\" + (qs ? `?${qs}` : '');\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<OrganizationStatusResponse> {\n const path = \"/v1/orgs/invitations/decline\";\n return this.request<OrganizationStatusResponse>(\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, token: string): Promise<OrganizationStatusResponse> {\n const path = `/v1/orgs/${orgId}`;\n return this.request<OrganizationStatusResponse>(\n 'DELETE',\n path,\n undefined,\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, token: string): Promise<OrganizationStatusResponse> {\n const path = `/v1/orgs/${orgId}/members/${memberId}`;\n return this.request<OrganizationStatusResponse>(\n 'DELETE',\n path,\n undefined,\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, token: string): Promise<OrganizationStatusResponse> {\n const path = `/v1/orgs/${orgId}/teams/${teamId}`;\n return this.request<OrganizationStatusResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * List passkeys\n * GET /v1/passkeys\n */\n async listPasskeys(token: string): Promise<PasskeyListResponse> {\n const path = \"/v1/passkeys\";\n return this.request<PasskeyListResponse>(\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(): Promise<LoginBeginResponse> {\n const path = \"/v1/passkeys/login/begin\";\n return this.request<LoginBeginResponse>(\n 'POST',\n path,\n undefined,\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, token: string): Promise<DeleteResponse> {\n const path = `/v1/passkeys/${credentialId}`;\n return this.request<DeleteResponse>(\n 'DELETE',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Start phone authentication\n * POST /v1/phone/start\n */\n async phoneAuthStart(body: PhoneAuthStartRequest): Promise<PhoneStartResponse> {\n const path = \"/v1/phone/start\";\n return this.request<PhoneStartResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Verify phone OTP\n * POST /v1/phone/verify\n */\n async phoneAuthVerify(body: PhoneAuthVerifyRequest): Promise<PhoneVerifyResponse> {\n const path = \"/v1/phone/verify\";\n return this.request<PhoneVerifyResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List what may act on your behalf\n * GET /v1/principals/me/delegations\n */\n async listMyDelegations(token: string): Promise<DelegationListResponse> {\n const path = \"/v1/principals/me/delegations\";\n return this.request<DelegationListResponse>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Mint an ephemeral child principal\n * POST /v1/principals/{id}/children\n */\n async mintChildPrincipal(id: string, body: MintChildPrincipalRequest, token: string): Promise<MintChildResponse> {\n const path = `/v1/principals/${id}/children`;\n return this.request<MintChildResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Refresh tokens\n * POST /v1/refresh\n */\n async refresh(body: RefreshRequest): Promise<ApiTokenResponse> {\n const path = \"/v1/refresh\";\n return this.request<ApiTokenResponse>(\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<ApiStatusResponse> {\n const path = \"/v1/reset-password\";\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List roles\n * GET /v1/roles\n */\n async authsomeListRoles(app_id: string, token: string): Promise<RoleListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/roles\" + (qs ? `?${qs}` : '');\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<ApiStatusResponse> {\n const path = `/v1/roles/${roleId}`;\n return this.request<ApiStatusResponse>(\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<ApiStatusResponse> {\n const path = `/v1/roles/${roleId}/assign`;\n return this.request<ApiStatusResponse>(\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<ApiStatusResponse> {\n const path = `/v1/roles/${roleId}/permissions/${permissionId}`;\n return this.request<ApiStatusResponse>(\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<ApiStatusResponse> {\n const path = `/v1/roles/${roleId}/unassign`;\n return this.request<ApiStatusResponse>(\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/sessions/${sessionId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\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(token: string): Promise<ApiStatusResponse> {\n const path = \"/v1/signout\";\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n undefined,\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, frontend_url?: string, redirect_url?: string): Promise<SocialStartResponse> {\n const params = new URLSearchParams();\n if (frontend_url !== undefined) params.set('frontend_url', String(frontend_url));\n if (redirect_url !== undefined) params.set('redirect_url', String(redirect_url));\n const qs = params.toString();\n const path = `/v1/social/${provider}` + (qs ? `?${qs}` : '');\n return this.request<SocialStartResponse>(\n 'POST',\n path,\n undefined,\n );\n }\n\n /**\n * OAuth callback\n * GET /v1/social/{provider}/callback\n */\n async oauthCallback(provider: string, state?: string, code?: string, error?: string): Promise<SocialCallbackResponse> {\n const params = new URLSearchParams();\n if (state !== undefined) params.set('state', String(state));\n if (code !== undefined) params.set('code', String(code));\n if (error !== undefined) params.set('error', String(error));\n const qs = params.toString();\n const path = `/v1/social/${provider}/callback` + (qs ? `?${qs}` : '');\n return this.request<SocialCallbackResponse>(\n 'GET',\n path,\n undefined,\n );\n }\n\n /**\n * Exchange SSO one-time code for a session\n * POST /v1/sso/exchange\n */\n async ssoExchange(body: SsoExchangeRequest, token: string): Promise<SsoCallbackResponse> {\n const path = \"/v1/sso/exchange\";\n return this.request<SsoCallbackResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * Start SSO login by email domain\n * POST /v1/sso/login\n */\n async startSSOLoginByDomain(body: StartSSOLoginByDomainRequest, token: string): Promise<LoginResponse> {\n const path = \"/v1/sso/login\";\n return this.request<LoginResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * SSO SAML ACS endpoint\n * POST /v1/sso/{provider}/acs\n */\n async ssoACS(provider: string): Promise<void> {\n const path = `/v1/sso/${provider}/acs`;\n return this.request<void>(\n 'POST',\n path,\n undefined,\n );\n }\n\n /**\n * SSO OIDC redirect landing\n * GET /v1/sso/{provider}/callback\n */\n async ssoOIDCRedirect(provider: string, token: string): Promise<void> {\n const path = `/v1/sso/${provider}/callback`;\n return this.request<void>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * SSO callback (OIDC)\n * POST /v1/sso/{provider}/callback\n */\n async ssoCallback(provider: string, state?: string, code?: string, error?: string): Promise<SsoCallbackResponse> {\n const params = new URLSearchParams();\n if (state !== undefined) params.set('state', String(state));\n if (code !== undefined) params.set('code', String(code));\n if (error !== undefined) params.set('error', String(error));\n const qs = params.toString();\n const path = `/v1/sso/${provider}/callback` + (qs ? `?${qs}` : '');\n return this.request<SsoCallbackResponse>(\n 'POST',\n path,\n undefined,\n );\n }\n\n /**\n * Start SSO login flow\n * POST /v1/sso/{provider}/login\n */\n async startSSOLogin(provider: string, return_url?: string): Promise<LoginResponse> {\n const params = new URLSearchParams();\n if (return_url !== undefined) params.set('return_url', String(return_url));\n const qs = params.toString();\n const path = `/v1/sso/${provider}/login` + (qs ? `?${qs}` : '');\n return this.request<LoginResponse>(\n 'POST',\n path,\n undefined,\n );\n }\n\n /**\n * SAML SP metadata\n * GET /v1/sso/{provider}/metadata\n */\n async ssoSPMetadata(provider: string, token: string): Promise<void> {\n const path = `/v1/sso/${provider}/metadata`;\n return this.request<void>(\n 'GET',\n path,\n undefined,\n token,\n );\n }\n\n /**\n * Exchange a credential for a delegated session\n * POST /v1/token/exchange\n */\n async exchangeToken(body: ExchangeTokenRequest, token: string): Promise<TokenExchangeResponse> {\n const path = \"/v1/token/exchange\";\n return this.request<TokenExchangeResponse>(\n 'POST',\n path,\n body,\n token,\n );\n }\n\n /**\n * List user roles\n * GET /v1/users/{userId}/roles\n */\n async authsomeListUserRoles(userId: string, token: string, app_id?: string): Promise<UserRoleListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = `/v1/users/${userId}/roles` + (qs ? `?${qs}` : '');\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<ApiStatusResponse> {\n const path = \"/v1/verify-email\";\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * Resend email verification\n * POST /v1/verify-email/resend\n */\n async resendEmailVerification(body: ResendEmailVerificationRequest): Promise<ApiStatusResponse> {\n const path = \"/v1/verify-email/resend\";\n return this.request<ApiStatusResponse>(\n 'POST',\n path,\n body,\n );\n }\n\n /**\n * List webhooks\n * GET /v1/webhooks\n */\n async listWebhooks(app_id: string, token: string): Promise<WebhookListResponse> {\n const params = new URLSearchParams();\n if (app_id !== undefined) params.set('app_id', String(app_id));\n const qs = params.toString();\n const path = \"/v1/webhooks\" + (qs ? `?${qs}` : '');\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, token: string): Promise<ApiStatusResponse> {\n const path = `/v1/webhooks/${webhookId}`;\n return this.request<ApiStatusResponse>(\n 'DELETE',\n path,\n undefined,\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 form?: boolean,\n ): Promise<T> {\n const headers: Record<string, string> = {\n 'Content-Type': form ? 'application/x-www-form-urlencoded' : 'application/json',\n 'Accept': 'application/json',\n };\n\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n }\n if (this.publishableKey) {\n headers['X-Publishable-Key'] = this.publishableKey;\n }\n\n const response = await this.fetchFn(`${this.baseURL}${path}`, {\n method,\n headers,\n body: body !== undefined ? (form ? encodeForm(body) : JSON.stringify(body)) : undefined,\n });\n\n if (!response.ok) {\n let apiError: { error?: string; code?: number; type?: string; [k: string]: unknown } | 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 apiError?.type,\n apiError, // full decoded body so callers can read extras like mfa_ticket / available_methods\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 // Stable string error code from the backend envelope (e.g.\n // \"email_not_verified\", \"captcha_required\", \"mfa_required\"). Lets\n // the UI branch on specific failure modes instead of pattern-\n // matching on the human-readable message.\n type?: string;\n // Full decoded JSON body when the response body was JSON. Lets\n // callers read tagged extras the envelope carries beyond\n // {error, code, type} — e.g. mfa_ticket and available_methods on\n // a 403 with type:\"mfa_required\". Undefined when the body wasn't\n // JSON.\n details?: Record<string, unknown>;\n\n constructor(message: string, code?: number, type?: string, details?: Record<string, unknown>) {\n super(message);\n this.name = 'AuthClientError';\n this.code = code;\n this.type = type;\n this.details = details;\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 {\n ApiStatusResponse,\n ApiTokenResponse,\n RefreshRequest,\n} from \"./generated/api-types\";\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 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\";\nexport type { ApiTokenResponse as TokenResponse } 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 PasskeyLoginFinishRequest,\n PasskeyRegisterFinishRequest,\n RefreshRequest,\n ResetPasswordRequest,\n VerifyEmailRequest,\n VerifyRecoveryCodeRequest,\n} from \"./generated/api-types\";\n\n// SsoACSRequest and SsoCallbackRequest used to be re-exported here. Both\n// endpoints now carry their input in the path and query string rather than a\n// body, so the spec no longer describes a request schema for either and there\n// is nothing left to alias. Call ssoACS(provider) and ssoCallback(provider,\n// state, code, error) directly.\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: RefreshRequest | string): Promise<ApiTokenResponse> {\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). The generated client used\n * to take a (body, token) pair; the endpoint no longer reads a body, so the\n * two-argument form is still accepted and its first argument ignored rather\n * than breaking callers outside this package.\n */\n override async signOut(bodyOrToken: unknown, token?: string): Promise<ApiStatusResponse> {\n if (typeof bodyOrToken === \"string\") {\n return super.signOut(bodyOrToken);\n }\n return super.signOut(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 * Reads `baseURL` and `fetchFn` directly off the generated parent\n * class — earlier generator templates kept a `this.config` ref but\n * the current embedded template stores fields individually, so the\n * old `(this as any).config.baseURL` shape produced `undefined` and\n * the URL constructor threw.\n */\n async fetchClientConfig(publishableKey?: string): Promise<ClientConfig> {\n const baseURL = (this as any).baseURL as string;\n const fetchFn = ((this as any).fetchFn as typeof globalThis.fetch) ?? globalThis.fetch;\n const url = new URL(\"/v1/client-config\", baseURL);\n if (publishableKey) {\n url.searchParams.set(\"key\", publishableKey);\n }\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\n/**\n * Storage key under which the whole Session (tokens + expiry) is persisted.\n *\n * Exported because a cookie-backed TokenStorage writes it as a cookie name,\n * and server-side readers have to know what to look for. See\n * @authsome/ui-nextjs readSessionToken.\n */\nexport const SESSION_STORAGE_KEY = \"authsome:session\";\n\nconst SESSION_KEY = SESSION_STORAGE_KEY;\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// Used only when a server response omits expires_at.\nconst DEFAULT_SESSION_TTL_MS = 3600_000;\n// Bounds the refresh retry loop. Without a cap a revoked token is retried for\n// as long as the tab stays open.\nconst MAX_REFRESH_ATTEMPTS = 5;\nconst REFRESH_RETRY_BASE_MS = 30_000;\n\n/**\n * In-memory token storage. Cleared on page reload, and unreachable to any\n * other script on the page.\n *\n * This is the default. Persisting tokens in localStorage means the refresh\n * token — good for weeks — sits somewhere any injected script can read, so a\n * single XSS becomes long-term account access rather than a page-lifetime\n * problem. Surviving reloads is better solved by letting the backend set\n * httpOnly session cookies, which JavaScript cannot read at all; see\n * createCookieStorage's notes and the Next.js proxy.\n *\n * If you accept the tradeoff, opt in explicitly with createLocalStorage().\n */\nfunction createMemoryStorage(): 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/**\n * Token storage backed by window.localStorage, falling back to memory where\n * localStorage is unavailable (SSR, restricted contexts).\n *\n * Opt in only if you understand the exposure: everything written here,\n * including the refresh token, is readable by any script running on the page.\n * Prefer backend-set httpOnly cookies where you can.\n *\n * new AuthManager({ baseURL, storage: createLocalStorage() })\n */\nexport function createLocalStorage(): 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 createMemoryStorage();\n}\n\n/**\n * Builds a Session from an auth response.\n *\n * The server's own `expires_at` is authoritative. Three of the four call sites\n * used to hardcode \"now + 1 hour\" instead, so with any other server-side TTL\n * the refresh timer was scheduled against a lifetime the token did not have —\n * a shorter one left the client sitting on a dead token until minute 59.\n * The fallback applies only when the server omits the field.\n */\nfunction toSession(res: {\n session_token: string;\n refresh_token: string;\n expires_at?: string;\n}): Session {\n return {\n session_token: res.session_token,\n refresh_token: res.refresh_token,\n expires_at: res.expires_at ?? new Date(Date.now() + DEFAULT_SESSION_TTL_MS).toISOString(),\n };\n}\n\n/**\n * Reports whether an error is the server rejecting the credential, as opposed\n * to the request never getting a verdict.\n *\n * Only 401/403 count. A 404, a 5xx, a timeout or a DNS failure say nothing\n * about whether the token is valid, and must not be read as \"signed out\" —\n * a misconfigured baseURL would otherwise log out every user.\n */\nfunction isAuthRejection(err: unknown): boolean {\n if (err instanceof AuthClientError) {\n return err.code === 401 || err.code === 403;\n }\n return false;\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; type?: string }) => 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 ?? createMemoryStorage();\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 (err) {\n await this.handleInitFailure(err);\n }\n }\n\n /**\n * Resolves the state when hydrating a stored session failed.\n *\n * The two failure modes must not be conflated. A rejected credential means\n * the user is signed out. An unreachable server means we simply do not know,\n * and signing them out over a transient blip is its own bug — which is what\n * the previous behaviour tried to avoid, by reporting \"authenticated\" with a\n * null user. That kept people signed in through an outage but told every\n * consumer gating on `isAuthenticated` to render protected UI for a session\n * nothing had validated, and made `user.email` a crash.\n *\n * So: rejection signs out; unavailability yields \"unknown\", which is not\n * authenticated but retains the session and keeps a refresh scheduled so the\n * app recovers on its own.\n */\n private async handleInitFailure(err: unknown): Promise<void> {\n const stored = await this.storage.getItem(SESSION_KEY);\n if (!stored) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n let session: Session;\n try {\n session = JSON.parse(stored);\n } catch {\n // Unparseable storage is not a session at all.\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n if (isAuthRejection(err)) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n this.setState({ status: \"unknown\", session });\n this.scheduleRefresh(session);\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 = toSession(res);\n await this.handleAuthResponse(res.user, session);\n } catch (err) {\n // MFA required: surface the ticket + available methods so the\n // form can swap to the challenge UI. The ticket is server-side\n // partial-auth; submitMFAChallenge below completes the round-\n // trip and issues a real session.\n if (\n err instanceof AuthClientError &&\n err.type === \"mfa_required\" &&\n err.details\n ) {\n const ticket = typeof err.details[\"mfa_ticket\"] === \"string\"\n ? (err.details[\"mfa_ticket\"] as string)\n : \"\";\n const methods = Array.isArray(err.details[\"available_methods\"])\n ? (err.details[\"available_methods\"] as string[])\n : [];\n if (ticket) {\n this.setState({\n status: \"mfa_required\",\n email: credentials.email ?? \"\",\n mfaTicket: ticket,\n availableMethods: methods,\n });\n // Do NOT rethrow — the form switches to the challenge view\n // on this state, the same way it switches on\n // verification_pending after sign-up.\n return;\n }\n }\n\n // Specifically surface email_not_verified as a first-class state\n // so the UI can swap to a \"verify your email\" panel rather than a\n // generic error.\n if (\n err instanceof AuthClientError &&\n err.type === \"email_not_verified\"\n ) {\n this.setState({\n status: \"email_not_verified\",\n email: credentials.email ?? \"\",\n });\n throw err;\n }\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 // The signup response always includes a session token, but when the\n // backend has email verification enabled (the default) that token is\n // unusable until the email is verified. The UI must NOT route the\n // user into the signed-in shell — it should show a \"check your inbox\"\n // panel. We therefore discard the session entirely and surface a\n // verification_pending state.\n //\n // Enumeration-resistance note: when a duplicate signup is detected,\n // the backend returns a byte-shape-identical 201 with a synthetic\n // session token. We treat both real and duplicate signups the same.\n await this.client.signUp(data);\n this.setState({\n status: \"verification_pending\",\n email: data.email,\n });\n } catch (err) {\n this.handleError(err);\n throw err;\n }\n }\n\n /**\n * Resend the verification email for an unverified account.\n *\n * Always resolves; the backend returns 200 regardless of whether the\n * email is registered, unregistered, or already verified — that's the\n * enumeration-resistance contract. UI callers should disable the\n * button + show a generic \"if your email is registered, we sent a new\n * link\" confirmation rather than branching on the response.\n */\n async resendVerification(email: string): Promise<void> {\n if (!email) return;\n try {\n await this.client.resendEmailVerification({ email });\n } catch (err) {\n // Surface transport errors via onError but don't propagate —\n // the UI message is intentionally generic.\n this.onError?.({\n error: err instanceof Error ? err.message : \"resend failed\",\n });\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 /**\n * Submit the MFA challenge code against the ticket from the\n * mfa_required state. On success: real session minted, state →\n * \"authenticated\". On bad code: state stays \"mfa_required\" so\n * the form can show the error inline; the ticket remains valid\n * for the 5-minute server-side TTL.\n *\n * Throws if called outside the mfa_required state — the caller\n * has nowhere to send the code.\n */\n async submitMFAChallenge(code: string): Promise<void> {\n const state = this.state;\n if (state.status !== \"mfa_required\") {\n throw new Error(\"auth: submitMFAChallenge called outside the mfa_required state\");\n }\n try {\n const res = await this.client.challengeMFA({\n mfa_ticket: state.mfaTicket,\n code,\n });\n const session: Session = toSession(res);\n await this.handleAuthResponse(res.user as User, session);\n } catch (err) {\n // Don't fall into the generic error handler — bad code should\n // leave the form on the challenge view, not bounce back to the\n // sign-in form. The caller (the challenge form) surfaces the\n // 401 inline.\n this.onError?.({\n error: err instanceof Error ? err.message : \"challenge failed\",\n });\n throw err;\n }\n }\n\n /**\n * @deprecated Use submitMFAChallenge(code). The old enrollment-id\n * + partial-session shape was removed in the MFA consolidation;\n * this thin shim only exists so older callers don't break their\n * build, but the enrollmentId argument is now ignored.\n */\n async submitMFACode(_enrollmentId: string, code: string): Promise<void> {\n return this.submitMFAChallenge(code);\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 = toSession(res);\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 = toSession(res);\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 /**\n * Get the current session token (if authenticated). Returns null\n * during the MFA challenge — there is no real session yet, only a\n * ticket the challenge handler validates internally.\n */\n getSessionToken(): string | null {\n if (this.state.status === \"authenticated\") {\n return this.state.session.session_token;\n }\n return null;\n }\n\n /**\n * Get the active MFA ticket (only set during the mfa_required\n * state). Form components driving the challenge UI read this to\n * confirm they have a partial-auth credential before letting the\n * user submit a code.\n */\n getMFATicket(): string | null {\n return this.state.status === \"mfa_required\" ? this.state.mfaTicket : 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 /**\n * Exchanges the refresh token for a new session.\n *\n * On failure the two cases are separated, as they are in initialize: a\n * rejected token means signed out, anything else means no verdict and is\n * worth retrying.\n *\n * `attempt` was previously accepted and never read, and the retry path\n * called back in without it — so a permanently-invalid token retried every\n * 30s for as long as the tab stayed open, and the user was never signed out.\n * It now bounds the retries and backs off between them.\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 (err) {\n // The server rejected the token: retrying cannot help.\n if (isAuthRejection(err)) {\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n if (attempt >= MAX_REFRESH_ATTEMPTS) {\n // Out of retries without ever reaching the server. The session is\n // retained — the token may still be good — but nothing has validated\n // it, so we must not keep claiming authenticated.\n const stored = await this.storage.getItem(SESSION_KEY);\n if (stored) {\n try {\n this.setState({ status: \"unknown\", session: JSON.parse(stored) });\n return;\n } catch {\n // Fall through to unauthenticated on unparseable storage.\n }\n }\n this.setState({ status: \"unauthenticated\" });\n return;\n }\n\n // No verdict — back off and try again.\n this.clearRefreshTimer();\n this.refreshTimer = setTimeout(\n () => {\n void this.refreshSession(refreshToken, attempt + 1);\n },\n REFRESH_RETRY_BASE_MS * 2 ** attempt,\n );\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 const type = err instanceof AuthClientError ? err.type : undefined;\n\n // MFA required is now handled directly inside signIn() — the\n // backend returns it as a structured error envelope with a\n // mfa_ticket extra and the new contract requires that ticket\n // be carried into state, not the (no-longer-issued) partial-\n // session token. The legacy \"code === 403 && contains 'mfa'\"\n // branch was removed; if a 403 with type:\"mfa_required\" reaches\n // handleError it means signIn didn't catch it, which is a bug\n // worth surfacing as an error rather than silently transitioning.\n\n this.setState({ status: \"error\", error: message });\n this.onError?.({ error: message, code, type });\n }\n}\n","/**\n * Redirect-target validation.\n *\n * Sign-in and sign-up flows accept a `?redirect=` parameter so a user who was\n * bounced to the auth page lands back where they started. That parameter is\n * attacker-controlled: without validation, `?redirect=https://evil.com` sends\n * the user to a hostile page *immediately after they authenticate*, which is\n * the most convincing possible moment to present a fake \"confirm your\n * password\" screen. It can also carry `javascript:` payloads.\n *\n * The check here resolves the candidate against the current origin and\n * compares origins, rather than inspecting the string. String checks are the\n * usual approach and they leak: `startsWith(\"/\")` accepts `//evil.com` and\n * `/\\evil.com`, both of which browsers resolve to a different host.\n */\n\n/** Schemes a redirect may use. Everything else (javascript:, data:, blob:) is refused. */\nconst ALLOWED_PROTOCOLS = new Set([\"http:\", \"https:\"]);\n\n/** Options controlling which redirect targets are acceptable. */\nexport interface SafeRedirectOptions {\n /**\n * Origin the app is currently served from — `window.location.origin` in a\n * browser. Redirects to this origin are always allowed.\n */\n currentOrigin: string;\n /**\n * Extra origins accepted as redirect targets, for deployments where the auth\n * UI and the app live on different hosts. Empty by default: same-origin only.\n *\n * Entries are matched **exactly**, by origin. Wildcards and subdomain\n * patterns are deliberately unsupported — every tenant host must be listed\n * in full. Pattern matching here is a well-known source of account-takeover\n * bugs, and an explicit list is worth the verbosity.\n *\n * Each entry must be an absolute URL (\"https://portal.example.com\"); it is\n * reduced to its origin, so a trailing slash, a path, or a capitalized host\n * are all tolerated. Entries that cannot be parsed are ignored and will\n * never match.\n */\n allowedOrigins?: string[];\n}\n\n/**\n * Reports whether `candidate` is safe to navigate to after authentication.\n *\n * Accepts relative paths (\"/dashboard\", \"/a/b?x=1#f\") and absolute URLs whose\n * origin is the current origin or an allowed one. Refuses everything else,\n * including a malformed candidate.\n */\nexport function isSafeRedirect(\n candidate: string | null | undefined,\n options: SafeRedirectOptions,\n): boolean {\n if (typeof candidate !== \"string\" || candidate.trim() === \"\") {\n return false;\n }\n\n let resolved: URL;\n try {\n // Resolving against currentOrigin collapses the evasion cases —\n // \"//evil.com\", \"/\\evil.com\", \"\\thttps://evil.com\" — onto their real\n // origin, where the comparison below catches them.\n resolved = new URL(candidate, options.currentOrigin);\n } catch {\n return false;\n }\n\n // Opaque-origin schemes (javascript:, data:) never reach the comparison.\n if (!ALLOWED_PROTOCOLS.has(resolved.protocol)) {\n return false;\n }\n\n if (resolved.origin === options.currentOrigin) {\n return true;\n }\n\n // Exact origin match against the allowlist — no wildcards by design.\n // Entries are normalized so config formatting can't cause a silent miss.\n return (options.allowedOrigins ?? []).some(\n (allowed) => toOrigin(allowed) === resolved.origin,\n );\n}\n\n/**\n * Reduces an allowlist entry to its canonical origin, or `null` when it isn't\n * a parseable absolute URL. Returning `null` keeps a malformed entry inert:\n * it matches nothing rather than matching everything.\n */\nfunction toOrigin(value: string): string | null {\n try {\n const { origin } = new URL(value);\n // Opaque-origin schemes (data:, javascript:) stringify to \"null\" and must\n // never be treated as a real origin to compare against.\n return origin === \"null\" ? null : origin;\n } catch {\n return null;\n }\n}\n\n/**\n * Returns `candidate` when it passes {@link isSafeRedirect}, otherwise\n * `fallback`. Use this at navigation sites so an unsafe value degrades to a\n * known-good destination instead of blocking the user.\n */\nexport function safeRedirectTarget(\n candidate: string | null | undefined,\n fallback: string,\n options: SafeRedirectOptions,\n): string {\n return isSafeRedirect(candidate, options) ? (candidate as string) : fallback;\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"]}