@authn-sh/sdk-node 0.4.0-alpha.2 → 0.5.0-alpha.9

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/errors/index.ts","../src/resources/ListParams.ts","../src/resources/Manager.ts","../src/resources/PaginatedList.ts","../src/resources/ExternalAccounts.ts","../src/resources/Instance.ts","../src/util/Idempotency.ts","../src/resources/Invitations.ts","../src/resources/Lists.ts","../src/resources/OauthProviders.ts","../src/resources/Organizations.ts","../src/resources/PhoneNumbers.ts","../src/resources/RedirectUrls.ts","../src/resources/Roles.ts","../src/resources/Sessions.ts","../src/resources/SmsTemplates.ts","../src/resources/Users.ts","../src/transport/Transport.ts","../src/Authn.ts","../src/tokens/VerifiedClaims.ts","../src/tokens/TokenVerifier.ts","../src/webhooks/SignatureVerifier.ts"],"names":["meta"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error shape emitted by the authn.sh API.\n */\nexport interface AuthnApiError {\n code: string;\n message: string;\n longMessage?: string;\n meta?: Record<string, unknown>;\n}\n\n/**\n * Thrown when a request to the BAPI returns a non-2xx response.\n */\nexport class AuthnHttpError extends Error {\n public override readonly name ='AuthnHttpError';\n\n constructor(\n public readonly status: number,\n public readonly errors: AuthnApiError[],\n public readonly requestId: string | null,\n message?: string,\n ) {\n super(message ?? (errors[0]?.longMessage || errors[0]?.message) ?? `authn.sh API returned HTTP ${status}`);\n }\n\n /** The primary error code returned by the API (when present). */\n get code(): string | null {\n return this.errors[0]?.code ?? null;\n }\n}\n\n/**\n * Thrown when the SDK is misconfigured (missing secret key, malformed URL, etc.).\n */\nexport class AuthnConfigError extends Error {\n public override readonly name ='AuthnConfigError';\n}\n\n/**\n * Thrown when a JWT can't be verified — wrong signature, expired, malformed,\n * issuer mismatch, etc. The `reason` discriminates between the failure modes.\n */\nexport class AuthnTokenInvalidError extends Error {\n public override readonly name ='AuthnTokenInvalidError';\n\n constructor(\n public readonly reason:\n | 'malformed'\n | 'signature_invalid'\n | 'expired'\n | 'not_yet_valid'\n | 'issuer_mismatch'\n | 'audience_mismatch'\n | 'key_not_found'\n | 'jwks_fetch_failed',\n message?: string,\n ) {\n super(message ?? `Token invalid: ${reason}`);\n }\n}\n\n/**\n * Thrown when a webhook signature can't be verified.\n */\nexport class AuthnWebhookSignatureInvalidError extends Error {\n public override readonly name ='AuthnWebhookSignatureInvalidError';\n\n constructor(\n public readonly reason:\n | 'missing_signature_header'\n | 'malformed_signature_header'\n | 'no_matching_signature'\n | 'timestamp_too_old'\n | 'timestamp_missing',\n message?: string,\n ) {\n super(message ?? `Webhook signature invalid: ${reason}`);\n }\n}\n","/**\n * Pagination + ordering parameters shared by every `list*` BAPI call.\n * Resource-specific filter params extend this with their own fields.\n */\nexport class ListParams {\n constructor(\n public limit?: number,\n public offset?: number,\n public orderBy?: string,\n ) {}\n\n toQuery(): Record<string, unknown> {\n const q: Record<string, unknown> = {};\n if (this.limit !== undefined) q.limit = this.limit;\n if (this.offset !== undefined) q.offset = this.offset;\n if (this.orderBy !== undefined) q.order_by = this.orderBy;\n return q;\n }\n}\n","import type { Transport } from '../transport/Transport.js';\n\n/**\n * Base class for BAPI resource managers. Holds the shared Transport so\n * subclasses can `.send()` without juggling auth themselves.\n */\nexport abstract class Manager {\n constructor(protected readonly transport: Transport) {}\n}\n","/**\n * Generic paginated-list envelope returned by every `list*` BAPI endpoint.\n */\nexport interface PaginatedList<T> {\n data: T[];\n totalCount: number;\n}\n\n/**\n * Convert a snake_case `{data, total_count}` response into our camelCase shape.\n */\nexport function hydratePaginatedList<T>(\n raw: unknown,\n hydrate: (item: unknown) => T,\n): PaginatedList<T> {\n if (!raw || typeof raw !== 'object') {\n return { data: [], totalCount: 0 };\n }\n const obj = raw as Record<string, unknown>;\n const data = Array.isArray(obj.data) ? obj.data.map(hydrate) : [];\n const totalCount = typeof obj.total_count === 'number' ? obj.total_count : data.length;\n return { data, totalCount };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface ExternalAccount {\n id: string;\n object: 'external_account';\n provider: string;\n providerKey: string;\n providerUserId: string;\n emailAddress?: string | null;\n scopes: string[];\n publicMetadata: Record<string, unknown>;\n verified: boolean;\n linkedAt?: number | null;\n lastSignedInAt?: number | null;\n raw: Record<string, unknown>;\n}\n\nexport class ExternalAccountsListParams extends ListParams {\n constructor(\n public userId?: string,\n public oauthProviderId?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n if (this.oauthProviderId) q.oauth_provider_id = this.oauthProviderId;\n return q;\n }\n}\n\nexport class ExternalAccountsManager extends Manager {\n async list(params?: ExternalAccountsListParams): Promise<PaginatedList<ExternalAccount>> {\n const raw = await this.transport.send('GET', '/v1/external-accounts', {\n query: (params ?? new ExternalAccountsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateExternalAccount);\n }\n\n async get(externalAccountId: string): Promise<ExternalAccount> {\n const raw = await this.transport.send('GET', `/v1/external-accounts/${encodeURIComponent(externalAccountId)}`);\n return hydrateExternalAccount(raw);\n }\n\n async delete(externalAccountId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/external-accounts/${encodeURIComponent(externalAccountId)}`);\n }\n}\n\nexport function hydrateExternalAccount(raw: unknown): ExternalAccount {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const scopes = Array.isArray(obj.scopes) ? obj.scopes.filter((s): s is string => typeof s === 'string') : [];\n const meta = obj.public_metadata && typeof obj.public_metadata === 'object'\n ? (obj.public_metadata as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'external_account',\n provider: String(obj.provider ?? ''),\n providerKey: String(obj.provider_key ?? ''),\n providerUserId: String(obj.provider_user_id ?? ''),\n emailAddress: (obj.email_address as string | null | undefined) ?? null,\n scopes,\n publicMetadata: meta,\n verified: Boolean(obj.verified),\n linkedAt: (obj.linked_at as number | null | undefined) ?? null,\n lastSignedInAt: (obj.last_signed_in_at as number | null | undefined) ?? null,\n raw: obj,\n };\n}\n","import { Manager } from './Manager.js';\n\nexport interface InstanceSettings {\n id: string;\n object: 'instance';\n attributes: Record<string, unknown>;\n multiFactor: Record<string, unknown>;\n signUpMode?: string;\n raw: Record<string, unknown>;\n}\n\nexport class InstanceManager extends Manager {\n async get(): Promise<InstanceSettings> {\n const raw = await this.transport.send('GET', '/v1/instance');\n return hydrateInstance(raw);\n }\n\n async update(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance', { body: patch });\n return hydrateInstance(raw);\n }\n\n async updateRestrictions(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance/restrictions', { body: patch });\n return hydrateInstance(raw);\n }\n\n async updateOrganizationSettings(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance/organization-settings', { body: patch });\n return hydrateInstance(raw);\n }\n}\n\nexport function hydrateInstance(raw: unknown): InstanceSettings {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const meta = (key: string): Record<string, unknown> =>\n obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n return {\n id: String(obj.id ?? ''),\n object: 'instance',\n attributes: meta('attributes'),\n multiFactor: meta('multi_factor'),\n signUpMode: typeof obj.sign_up_mode === 'string' ? obj.sign_up_mode : undefined,\n raw: obj,\n };\n}\n","import { createHash, randomUUID } from 'node:crypto';\n\n/**\n * Build a stable Idempotency-Key for a request body. The same input\n * payload always produces the same key, so retries within npm\n * deduplication windows fold into the original call.\n *\n * Falls back to a random UUID when the runtime doesn't expose `crypto`.\n */\nexport function idempotencyKeyFor(payload: unknown): string {\n try {\n const json = JSON.stringify(payload ?? {});\n return createHash('sha256').update(json).digest('hex').slice(0, 32);\n } catch {\n return randomUUID();\n }\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Invitation {\n id: string;\n object: 'invitation';\n emailAddress: string;\n status: string;\n redirectUrl?: string | null;\n publicMetadata: Record<string, unknown>;\n expiresAt?: number | null;\n url?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class InvitationsListParams extends ListParams {\n constructor(\n public status?: string[],\n public emailAddress?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.status?.length) q.status = this.status;\n if (this.emailAddress) q.email_address = this.emailAddress;\n return q;\n }\n}\n\nexport class InvitationsManager extends Manager {\n async list(params?: InvitationsListParams): Promise<PaginatedList<Invitation>> {\n const raw = await this.transport.send('GET', '/v1/invitations', {\n query: (params ?? new InvitationsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateInvitation);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Invitation> {\n const raw = await this.transport.send('POST', '/v1/invitations', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateInvitation(raw);\n }\n\n async bulkCreate(invitations: Array<Record<string, unknown>>, idempotencyKey?: string): Promise<Invitation[]> {\n const raw = (await this.transport.send('POST', '/v1/invitations/bulk', {\n body: { invitations },\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(invitations),\n })) as { data?: unknown[] } | null;\n return (raw?.data ?? []).map(hydrateInvitation);\n }\n\n async revoke(invitationId: string): Promise<Invitation> {\n const raw = await this.transport.send('POST', `/v1/invitations/${encodeURIComponent(invitationId)}/revoke`);\n return hydrateInvitation(raw);\n }\n}\n\nexport function hydrateInvitation(raw: unknown): Invitation {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const meta = obj.public_metadata && typeof obj.public_metadata === 'object'\n ? (obj.public_metadata as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'invitation',\n emailAddress: String(obj.email_address ?? ''),\n status: String(obj.status ?? ''),\n redirectUrl: (obj.redirect_url as string | null | undefined) ?? null,\n publicMetadata: meta,\n expiresAt: (obj.expires_at as number | null | undefined) ?? null,\n url: (obj.url as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface AllowlistIdentifier {\n id: string;\n object: 'allowlist_identifier';\n identifier: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface BlocklistIdentifier {\n id: string;\n object: 'blocklist_identifier';\n identifier: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class AllowlistIdentifiersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<AllowlistIdentifier>> {\n const raw = await this.transport.send('GET', '/v1/allowlist-identifiers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateAllowlistIdentifier);\n }\n\n async create(data: { identifier: string }): Promise<AllowlistIdentifier> {\n const raw = await this.transport.send('POST', '/v1/allowlist-identifiers', { body: data });\n return hydrateAllowlistIdentifier(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/allowlist-identifiers/${encodeURIComponent(id)}`);\n }\n}\n\nexport class BlocklistIdentifiersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<BlocklistIdentifier>> {\n const raw = await this.transport.send('GET', '/v1/blocklist-identifiers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateBlocklistIdentifier);\n }\n\n async create(data: { identifier: string }): Promise<BlocklistIdentifier> {\n const raw = await this.transport.send('POST', '/v1/blocklist-identifiers', { body: data });\n return hydrateBlocklistIdentifier(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/blocklist-identifiers/${encodeURIComponent(id)}`);\n }\n}\n\nfunction hydrateIdentifier<O extends 'allowlist_identifier' | 'blocklist_identifier'>(\n raw: unknown,\n object: O,\n) {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object,\n identifier: String(obj.identifier ?? ''),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateAllowlistIdentifier(raw: unknown): AllowlistIdentifier {\n return hydrateIdentifier(raw, 'allowlist_identifier');\n}\n\nexport function hydrateBlocklistIdentifier(raw: unknown): BlocklistIdentifier {\n return hydrateIdentifier(raw, 'blocklist_identifier');\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface OauthProvider {\n id: string;\n object: 'oauth_provider';\n providerKind: 'preset' | 'custom_oidc' | 'custom_oauth2';\n providerKey: string;\n name: string;\n enabled: boolean;\n allowSignIn: boolean;\n allowSignUp: boolean;\n blockEmailSubaddresses: boolean;\n clientId: string;\n scopes: string[];\n additionalAuthorizationParams: Record<string, unknown>;\n attributeMapping: Record<string, string>;\n redirectUri: string;\n issuer?: string | null;\n discoveryEndpoint?: string | null;\n authorizationEndpoint?: string | null;\n tokenEndpoint?: string | null;\n userinfoEndpoint?: string | null;\n jwksUri?: string | null;\n idTokenSigningAlgs: string[];\n userinfoMethod?: 'GET' | 'POST' | null;\n userinfoAuth?: 'bearer' | 'basic' | 'query' | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OauthProviderTestResult {\n authorizeUrl: string;\n userinfoStatus: number | null;\n errors: Array<{ code: string; message: string }>;\n}\n\nexport class OauthProvidersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<OauthProvider>> {\n const raw = await this.transport.send('GET', '/v1/oauth-providers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateOauthProvider);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<OauthProvider> {\n const raw = await this.transport.send('POST', '/v1/oauth-providers', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateOauthProvider(raw);\n }\n\n async get(oauthProviderId: string): Promise<OauthProvider> {\n const raw = await this.transport.send('GET', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`);\n return hydrateOauthProvider(raw);\n }\n\n async update(oauthProviderId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<OauthProvider> {\n const raw = await this.transport.send('PATCH', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateOauthProvider(raw);\n }\n\n async delete(oauthProviderId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`);\n }\n\n async test(oauthProviderId: string): Promise<OauthProviderTestResult> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}/test`,\n )) as Record<string, unknown> | null;\n const errs = Array.isArray(raw?.errors)\n ? (raw.errors as unknown[]).map((e) => {\n const o = (e && typeof e === 'object' ? e : {}) as Record<string, unknown>;\n return { code: String(o.code ?? 'unknown'), message: String(o.message ?? o.long_message ?? '') };\n })\n : [];\n return {\n authorizeUrl: String(raw?.authorize_url ?? ''),\n userinfoStatus: (raw?.userinfo_status as number | null | undefined) ?? null,\n errors: errs,\n };\n }\n}\n\nexport function hydrateOauthProvider(raw: unknown): OauthProvider {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const scopes = Array.isArray(obj.scopes) ? obj.scopes.filter((s): s is string => typeof s === 'string') : [];\n const algs = Array.isArray(obj.id_token_signing_algs)\n ? obj.id_token_signing_algs.filter((s): s is string => typeof s === 'string')\n : [];\n const mapping: Record<string, string> = {};\n if (obj.attribute_mapping && typeof obj.attribute_mapping === 'object') {\n for (const [k, v] of Object.entries(obj.attribute_mapping as Record<string, unknown>)) {\n if (typeof v === 'string') mapping[k] = v;\n }\n }\n const authParams = obj.additional_authorization_params && typeof obj.additional_authorization_params === 'object'\n ? (obj.additional_authorization_params as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'oauth_provider',\n providerKind: (obj.provider_kind as OauthProvider['providerKind']) ?? 'preset',\n providerKey: String(obj.provider_key ?? ''),\n name: String(obj.name ?? ''),\n enabled: Boolean(obj.enabled),\n allowSignIn: Boolean(obj.allow_sign_in),\n allowSignUp: Boolean(obj.allow_sign_up),\n blockEmailSubaddresses: Boolean(obj.block_email_subaddresses),\n clientId: String(obj.client_id ?? ''),\n scopes,\n additionalAuthorizationParams: authParams,\n attributeMapping: mapping,\n redirectUri: String(obj.redirect_uri ?? ''),\n issuer: (obj.issuer as string | null | undefined) ?? null,\n discoveryEndpoint: (obj.discovery_endpoint as string | null | undefined) ?? null,\n authorizationEndpoint: (obj.authorization_endpoint as string | null | undefined) ?? null,\n tokenEndpoint: (obj.token_endpoint as string | null | undefined) ?? null,\n userinfoEndpoint: (obj.userinfo_endpoint as string | null | undefined) ?? null,\n jwksUri: (obj.jwks_uri as string | null | undefined) ?? null,\n idTokenSigningAlgs: algs,\n userinfoMethod: (obj.userinfo_method as OauthProvider['userinfoMethod']) ?? null,\n userinfoAuth: (obj.userinfo_auth as OauthProvider['userinfoAuth']) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import type { Transport } from '../transport/Transport.js';\nimport { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Organization {\n id: string;\n object: 'organization';\n name: string;\n slug?: string | null;\n imageUrl?: string | null;\n membersCount: number;\n pendingInvitationsCount: number;\n maxAllowedMemberships?: number | null;\n adminDeleteEnabled: boolean;\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n createdBy?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationMembership {\n id: string;\n object: 'organization_membership';\n organizationId: string;\n userId: string;\n role: string;\n permissions: string[];\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationInvitation {\n id: string;\n object: 'organization_invitation';\n organizationId: string;\n emailAddress: string;\n role: string;\n status: string;\n inviterUserId?: string | null;\n redirectUrl?: string | null;\n publicMetadata: Record<string, unknown>;\n expiresAt?: number | null;\n url?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationDomain {\n id: string;\n object: 'organization_domain';\n organizationId: string;\n name: string;\n verified: boolean;\n enrollmentMode: string;\n currentChallengeId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class OrganizationsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Organization>> {\n const raw = await this.transport.send('GET', '/v1/organizations', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateOrganization);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Organization> {\n const raw = await this.transport.send('POST', '/v1/organizations', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateOrganization(raw);\n }\n\n async get(orgId: string): Promise<Organization> {\n const raw = await this.transport.send('GET', `/v1/organizations/${encodeURIComponent(orgId)}`);\n return hydrateOrganization(raw);\n }\n\n async update(orgId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<Organization> {\n const raw = await this.transport.send('PATCH', `/v1/organizations/${encodeURIComponent(orgId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateOrganization(raw);\n }\n\n async delete(orgId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/organizations/${encodeURIComponent(orgId)}`);\n }\n\n members(orgId: string): OrganizationMembershipsManager {\n return new OrganizationMembershipsManager(this.transport, orgId);\n }\n\n invitations(orgId: string): OrganizationInvitationsManager {\n return new OrganizationInvitationsManager(this.transport, orgId);\n }\n\n domains(orgId: string): OrganizationDomainsManager {\n return new OrganizationDomainsManager(this.transport, orgId);\n }\n}\n\nexport class OrganizationMembershipsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(params?: ListParams): Promise<PaginatedList<OrganizationMembership>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships`,\n { query: (params ?? new ListParams()).toQuery() },\n );\n return hydratePaginatedList(raw, hydrateOrganizationMembership);\n }\n\n async create(data: { userId: string; role: string }, idempotencyKey?: string): Promise<OrganizationMembership> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships`,\n { body: { user_id: data.userId, role: data.role }, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data) },\n );\n return hydrateOrganizationMembership(raw);\n }\n\n async update(userId: string, role: string, idempotencyKey?: string): Promise<OrganizationMembership> {\n const raw = await this.transport.send(\n 'PATCH',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships/${encodeURIComponent(userId)}`,\n { body: { role }, idempotencyKey },\n );\n return hydrateOrganizationMembership(raw);\n }\n\n async delete(userId: string): Promise<void> {\n await this.transport.send(\n 'DELETE',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships/${encodeURIComponent(userId)}`,\n );\n }\n}\n\nexport class OrganizationInvitationsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(params?: ListParams): Promise<PaginatedList<OrganizationInvitation>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations`,\n { query: (params ?? new ListParams()).toQuery() },\n );\n return hydratePaginatedList(raw, hydrateOrganizationInvitation);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<OrganizationInvitation> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations`,\n { body: data, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data) },\n );\n return hydrateOrganizationInvitation(raw);\n }\n\n async bulkCreate(invitations: Array<Record<string, unknown>>, idempotencyKey?: string): Promise<OrganizationInvitation[]> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations/bulk`,\n { body: { invitations }, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(invitations) },\n )) as { data?: unknown[] } | null;\n return (raw?.data ?? []).map(hydrateOrganizationInvitation);\n }\n\n async revoke(invitationId: string): Promise<OrganizationInvitation> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations/${encodeURIComponent(invitationId)}/revoke`,\n );\n return hydrateOrganizationInvitation(raw);\n }\n}\n\nexport class OrganizationDomainsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(): Promise<PaginatedList<OrganizationDomain>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains`,\n );\n return hydratePaginatedList(raw, hydrateOrganizationDomain);\n }\n\n async create(name: string, enrollmentMode: string = 'manual_invitation'): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains`,\n { body: { name, enrollment_mode: enrollmentMode } },\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async get(domainId: string): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async update(domainId: string, patch: Record<string, unknown>): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'PATCH',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n { body: patch },\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async delete(domainId: string): Promise<void> {\n await this.transport.send(\n 'DELETE',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n );\n }\n}\n\nfunction meta(obj: Record<string, unknown>, key: string): Record<string, unknown> {\n return obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n}\n\nexport function hydrateOrganization(raw: unknown): Organization {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization',\n name: String(obj.name ?? ''),\n slug: (obj.slug as string | null | undefined) ?? null,\n imageUrl: (obj.image_url as string | null | undefined) ?? null,\n membersCount: typeof obj.members_count === 'number' ? obj.members_count : 0,\n pendingInvitationsCount: typeof obj.pending_invitations_count === 'number' ? obj.pending_invitations_count : 0,\n maxAllowedMemberships: (obj.max_allowed_memberships as number | null | undefined) ?? null,\n adminDeleteEnabled: Boolean(obj.admin_delete_enabled),\n publicMetadata: meta(obj, 'public_metadata'),\n privateMetadata: meta(obj, 'private_metadata'),\n createdBy: (obj.created_by as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationMembership(raw: unknown): OrganizationMembership {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const perms = Array.isArray(obj.permissions) ? obj.permissions.filter((p): p is string => typeof p === 'string') : [];\n return {\n id: String(obj.id ?? ''),\n object: 'organization_membership',\n organizationId: String(obj.organization_id ?? ''),\n userId: String(obj.user_id ?? ''),\n role: String(obj.role ?? ''),\n permissions: perms,\n publicMetadata: meta(obj, 'public_metadata'),\n privateMetadata: meta(obj, 'private_metadata'),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationInvitation(raw: unknown): OrganizationInvitation {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization_invitation',\n organizationId: String(obj.organization_id ?? ''),\n emailAddress: String(obj.email_address ?? ''),\n role: String(obj.role ?? ''),\n status: String(obj.status ?? ''),\n inviterUserId: (obj.inviter_user_id as string | null | undefined) ?? null,\n redirectUrl: (obj.redirect_url as string | null | undefined) ?? null,\n publicMetadata: meta(obj, 'public_metadata'),\n expiresAt: (obj.expires_at as number | null | undefined) ?? null,\n url: (obj.url as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationDomain(raw: unknown): OrganizationDomain {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization_domain',\n organizationId: String(obj.organization_id ?? ''),\n name: String(obj.name ?? ''),\n verified: Boolean(obj.verified),\n enrollmentMode: String(obj.enrollment_mode ?? 'manual_invitation'),\n currentChallengeId: (obj.current_challenge_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface PhoneNumber {\n id: string;\n object: 'phone_number';\n phoneNumber: string;\n verified: boolean;\n currentChallengeId?: string | null;\n isPrimary: boolean;\n reservedForSecondFactor: boolean;\n defaultSecondFactor: boolean;\n linkedToExternalAccountId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class PhoneNumbersListParams extends ListParams {\n constructor(\n public userId?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n return q;\n }\n}\n\nexport class PhoneNumbersManager extends Manager {\n async list(params?: PhoneNumbersListParams): Promise<PaginatedList<PhoneNumber>> {\n const raw = await this.transport.send('GET', '/v1/phone-numbers', {\n query: (params ?? new PhoneNumbersListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydratePhoneNumber);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('POST', '/v1/phone-numbers', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydratePhoneNumber(raw);\n }\n\n async get(phoneNumberId: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('GET', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`);\n return hydratePhoneNumber(raw);\n }\n\n async update(phoneNumberId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('PATCH', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydratePhoneNumber(raw);\n }\n\n async delete(phoneNumberId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`);\n }\n}\n\nexport function hydratePhoneNumber(raw: unknown): PhoneNumber {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'phone_number',\n phoneNumber: String(obj.phone_number ?? ''),\n verified: Boolean(obj.verified),\n currentChallengeId: (obj.current_challenge_id as string | null | undefined) ?? null,\n isPrimary: Boolean(obj.is_primary),\n reservedForSecondFactor: Boolean(obj.reserved_for_second_factor),\n defaultSecondFactor: Boolean(obj.default_second_factor),\n linkedToExternalAccountId: (obj.linked_to_external_account_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface RedirectUrl {\n id: string;\n object: 'redirect_url';\n url: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class RedirectUrlsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<RedirectUrl>> {\n const raw = await this.transport.send('GET', '/v1/redirect-urls', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateRedirectUrl);\n }\n\n async create(url: string): Promise<RedirectUrl> {\n const raw = await this.transport.send('POST', '/v1/redirect-urls', { body: { url } });\n return hydrateRedirectUrl(raw);\n }\n\n async get(id: string): Promise<RedirectUrl> {\n const raw = await this.transport.send('GET', `/v1/redirect-urls/${encodeURIComponent(id)}`);\n return hydrateRedirectUrl(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/redirect-urls/${encodeURIComponent(id)}`);\n }\n}\n\nexport function hydrateRedirectUrl(raw: unknown): RedirectUrl {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'redirect_url',\n url: String(obj.url ?? ''),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Role {\n id: string;\n object: 'role';\n key: string;\n name: string;\n description?: string | null;\n isCreatorEligible: boolean;\n isDefault: boolean;\n permissions: string[];\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface Permission {\n id: string;\n object: 'permission';\n key: string;\n name: string;\n description?: string | null;\n isSystem: boolean;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class RolesManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Role>> {\n const raw = await this.transport.send('GET', '/v1/roles', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateRole);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Role> {\n const raw = await this.transport.send('POST', '/v1/roles', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateRole(raw);\n }\n\n async get(roleId: string): Promise<Role> {\n const raw = await this.transport.send('GET', `/v1/roles/${encodeURIComponent(roleId)}`);\n return hydrateRole(raw);\n }\n\n async update(roleId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<Role> {\n const raw = await this.transport.send('PATCH', `/v1/roles/${encodeURIComponent(roleId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateRole(raw);\n }\n\n async delete(roleId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/roles/${encodeURIComponent(roleId)}`);\n }\n\n async setPermissions(roleId: string, permissionKeys: string[]): Promise<Role> {\n const raw = await this.transport.send('PUT', `/v1/roles/${encodeURIComponent(roleId)}/permissions`, {\n body: { permissions: permissionKeys },\n });\n return hydrateRole(raw);\n }\n}\n\nexport class PermissionsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Permission>> {\n const raw = await this.transport.send('GET', '/v1/permissions', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydratePermission);\n }\n}\n\nexport function hydrateRole(raw: unknown): Role {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const perms = Array.isArray(obj.permissions)\n ? obj.permissions.filter((p): p is string => typeof p === 'string')\n : [];\n return {\n id: String(obj.id ?? ''),\n object: 'role',\n key: String(obj.key ?? ''),\n name: String(obj.name ?? ''),\n description: (obj.description as string | null | undefined) ?? null,\n isCreatorEligible: Boolean(obj.is_creator_eligible),\n isDefault: Boolean(obj.is_default),\n permissions: perms,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydratePermission(raw: unknown): Permission {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'permission',\n key: String(obj.key ?? ''),\n name: String(obj.name ?? ''),\n description: (obj.description as string | null | undefined) ?? null,\n isSystem: Boolean(obj.is_system),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface Session {\n id: string;\n object: 'session';\n clientId: string;\n userId: string;\n status: string;\n lastActiveAt?: number | null;\n expireAt?: number | null;\n abandonAt?: number | null;\n lastActiveOrganizationId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class SessionsListParams extends ListParams {\n constructor(\n public userId?: string,\n public clientId?: string,\n public status?: string[],\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n if (this.clientId) q.client_id = this.clientId;\n if (this.status?.length) q.status = this.status;\n return q;\n }\n}\n\nexport class SessionsManager extends Manager {\n async list(params?: SessionsListParams): Promise<PaginatedList<Session>> {\n const raw = await this.transport.send('GET', '/v1/sessions', {\n query: (params ?? new SessionsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateSession);\n }\n\n async get(sessionId: string): Promise<Session> {\n const raw = await this.transport.send('GET', `/v1/sessions/${encodeURIComponent(sessionId)}`);\n return hydrateSession(raw);\n }\n\n async revoke(sessionId: string): Promise<Session> {\n const raw = await this.transport.send('POST', `/v1/sessions/${encodeURIComponent(sessionId)}/revoke`);\n return hydrateSession(raw);\n }\n\n async getToken(sessionId: string, template?: string): Promise<string> {\n const path = template\n ? `/v1/sessions/${encodeURIComponent(sessionId)}/tokens/${encodeURIComponent(template)}`\n : `/v1/sessions/${encodeURIComponent(sessionId)}/tokens`;\n const raw = (await this.transport.send('POST', path)) as { jwt?: string } | null;\n return raw?.jwt ?? '';\n }\n}\n\nexport function hydrateSession(raw: unknown): Session {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'session',\n clientId: String(obj.client_id ?? ''),\n userId: String(obj.user_id ?? ''),\n status: String(obj.status ?? ''),\n lastActiveAt: (obj.last_active_at as number | null | undefined) ?? null,\n expireAt: (obj.expire_at as number | null | undefined) ?? null,\n abandonAt: (obj.abandon_at as number | null | undefined) ?? null,\n lastActiveOrganizationId: (obj.last_active_organization_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { Manager } from './Manager.js';\n\nexport type SmsTemplateSlug = 'verification_code' | 'reset_password_code' | 'invitation';\n\nexport interface SmsTemplate {\n id: string;\n object: 'sms_template';\n slug: SmsTemplateSlug | string;\n body: string;\n deliveredByUs: boolean;\n fromNumberOverride?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class SmsTemplatesManager extends Manager {\n async list(): Promise<SmsTemplate[]> {\n const raw = await this.transport.send('GET', '/v1/sms-templates');\n if (!Array.isArray(raw)) return [];\n return (raw as unknown[]).map(hydrateSmsTemplate);\n }\n\n async get(slug: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('GET', `/v1/sms-templates/${encodeURIComponent(slug)}`);\n return hydrateSmsTemplate(raw);\n }\n\n async update(slug: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('PATCH', `/v1/sms-templates/${encodeURIComponent(slug)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateSmsTemplate(raw);\n }\n\n async revert(slug: string, idempotencyKey?: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('POST', `/v1/sms-templates/${encodeURIComponent(slug)}/revert`, {\n idempotencyKey,\n });\n return hydrateSmsTemplate(raw);\n }\n}\n\nexport function hydrateSmsTemplate(raw: unknown): SmsTemplate {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'sms_template',\n slug: String(obj.slug ?? '') as SmsTemplateSlug | string,\n body: String(obj.body ?? ''),\n deliveredByUs: Boolean(obj.delivered_by_us ?? true),\n fromNumberOverride: (obj.from_number_override as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface User {\n id: string;\n object: 'user';\n externalId?: string | null;\n username?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n imageUrl?: string | null;\n primaryEmailAddressId?: string | null;\n primaryPhoneNumberId?: string | null;\n emailAddresses: Array<Record<string, unknown>>;\n phoneNumbers: Array<Record<string, unknown>>;\n externalAccounts: Array<Record<string, unknown>>;\n passwordEnabled: boolean;\n totpEnabled: boolean;\n backupCodesEnabled: boolean;\n twoFactorEnabled: boolean;\n banned: boolean;\n locked: boolean;\n lastSignInAt?: number | null;\n lastActiveAt?: number | null;\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n unsafeMetadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface TotpVerificationResult {\n verified: boolean;\n reason?: string | null;\n}\n\nexport class UsersListParams extends ListParams {\n constructor(\n public emailAddress?: string[],\n public phoneNumber?: string[],\n public username?: string[],\n public externalId?: string[],\n public query?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.emailAddress?.length) q.email_address = this.emailAddress;\n if (this.phoneNumber?.length) q.phone_number = this.phoneNumber;\n if (this.username?.length) q.username = this.username;\n if (this.externalId?.length) q.external_id = this.externalId;\n if (this.query) q.query = this.query;\n return q;\n }\n}\n\nexport class UsersManager extends Manager {\n async list(params?: UsersListParams): Promise<PaginatedList<User>> {\n const raw = await this.transport.send('GET', '/v1/users', {\n query: (params ?? new UsersListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateUser);\n }\n\n async count(params?: UsersListParams): Promise<number> {\n const raw = (await this.transport.send('GET', '/v1/users/count', {\n query: (params ?? new UsersListParams()).toQuery(),\n })) as { total_count?: number } | null;\n return raw?.total_count ?? 0;\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<User> {\n const raw = await this.transport.send('POST', '/v1/users', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateUser(raw);\n }\n\n async get(userId: string): Promise<User> {\n const raw = await this.transport.send('GET', `/v1/users/${encodeURIComponent(userId)}`);\n return hydrateUser(raw);\n }\n\n async update(userId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<User> {\n const raw = await this.transport.send('PATCH', `/v1/users/${encodeURIComponent(userId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateUser(raw);\n }\n\n async delete(userId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}`);\n }\n\n async ban(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/ban`);\n return hydrateUser(raw);\n }\n\n async unban(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/unban`);\n return hydrateUser(raw);\n }\n\n async lock(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/lock`);\n return hydrateUser(raw);\n }\n\n async unlock(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/unlock`);\n return hydrateUser(raw);\n }\n\n async updateMetadata(userId: string, patch: Record<string, unknown>): Promise<User> {\n const raw = await this.transport.send('PATCH', `/v1/users/${encodeURIComponent(userId)}/metadata`, {\n body: patch,\n });\n return hydrateUser(raw);\n }\n\n async verifyPassword(userId: string, password: string): Promise<boolean> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/users/${encodeURIComponent(userId)}/verify-password`,\n { body: { password } },\n )) as { verified?: boolean } | null;\n return raw?.verified === true;\n }\n\n async verifyTotp(userId: string, code: string): Promise<TotpVerificationResult> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/users/${encodeURIComponent(userId)}/verify-totp`,\n { body: { code } },\n )) as { verified?: boolean; reason?: string } | null;\n return { verified: raw?.verified === true, reason: raw?.reason ?? null };\n }\n\n async disableMfa(userId: string): Promise<User> {\n const raw = await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}/mfa`);\n return hydrateUser(raw);\n }\n\n async uploadProfileImage(userId: string, bytes: Uint8Array, mime: string): Promise<User> {\n const headers = { 'Content-Type': mime };\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/profile-image`, {\n body: bytes,\n headers,\n });\n return hydrateUser(raw);\n }\n\n async deleteProfileImage(userId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}/profile-image`);\n }\n}\n\nexport function hydrateUser(raw: unknown): User {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const arr = (key: string): Array<Record<string, unknown>> =>\n Array.isArray(obj[key]) ? (obj[key] as Array<Record<string, unknown>>) : [];\n const meta = (key: string): Record<string, unknown> =>\n obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n return {\n id: String(obj.id ?? ''),\n object: 'user',\n externalId: (obj.external_id as string | null | undefined) ?? null,\n username: (obj.username as string | null | undefined) ?? null,\n firstName: (obj.first_name as string | null | undefined) ?? null,\n lastName: (obj.last_name as string | null | undefined) ?? null,\n imageUrl: (obj.image_url as string | null | undefined) ?? null,\n primaryEmailAddressId: (obj.primary_email_address_id as string | null | undefined) ?? null,\n primaryPhoneNumberId: (obj.primary_phone_number_id as string | null | undefined) ?? null,\n emailAddresses: arr('email_addresses'),\n phoneNumbers: arr('phone_numbers'),\n externalAccounts: arr('external_accounts'),\n passwordEnabled: Boolean(obj.password_enabled),\n totpEnabled: Boolean(obj.totp_enabled),\n backupCodesEnabled: Boolean(obj.backup_codes_enabled),\n twoFactorEnabled: Boolean(obj.two_factor_enabled),\n banned: Boolean(obj.banned),\n locked: Boolean(obj.locked),\n lastSignInAt: (obj.last_sign_in_at as number | null | undefined) ?? null,\n lastActiveAt: (obj.last_active_at as number | null | undefined) ?? null,\n publicMetadata: meta('public_metadata'),\n privateMetadata: meta('private_metadata'),\n unsafeMetadata: meta('unsafe_metadata'),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { AuthnHttpError, type AuthnApiError } from '../errors/index.js';\n\nexport interface TransportOptions {\n /** API base URL — typically `https://api.authn.sh/v1`. Trailing `/v1` is required. */\n apiUrl: string;\n /** Workspace-scoped secret key (`sk_test_…` / `sk_live_…`). */\n secretKey: string;\n /** Override the global fetch (e.g. for testing / proxying). */\n fetch?: typeof fetch;\n /** Default request timeout in milliseconds. Default 10_000. */\n timeoutMs?: number;\n /** User-Agent suffix, appended after `@authn-sh/sdk-node@<version>`. */\n userAgentSuffix?: string;\n}\n\nexport interface RequestOptions {\n /** Query parameters appended to the URL. Falsy values dropped. */\n query?: Record<string, unknown>;\n /** Body to send as JSON. */\n body?: unknown;\n /** Idempotency-Key header. */\n idempotencyKey?: string;\n /** Per-request timeout override. */\n timeoutMs?: number;\n /** Extra headers. Don't override Authorization / Content-Type. */\n headers?: Record<string, string>;\n}\n\n/**\n * Tiny fetch-based BAPI client. Bearer-authenticates with the workspace\n * secret key, raises `AuthnHttpError` on non-2xx, returns parsed JSON\n * on 2xx (or `null` on 204).\n *\n * Designed to run anywhere `fetch` exists: Node 18+, Edge runtimes,\n * Cloudflare Workers, Vercel Edge, Bun, Deno.\n */\nexport class Transport {\n private readonly apiUrl: string;\n private readonly secretKey: string;\n private readonly fetcher: typeof fetch;\n private readonly defaultTimeoutMs: number;\n private readonly userAgent: string;\n\n constructor(opts: TransportOptions) {\n this.apiUrl = opts.apiUrl.replace(/\\/$/, '');\n this.secretKey = opts.secretKey;\n this.fetcher = opts.fetch ?? globalThis.fetch;\n this.defaultTimeoutMs = opts.timeoutMs ?? 10_000;\n const base = `@authn-sh/sdk-node`;\n this.userAgent = opts.userAgentSuffix ? `${base} ${opts.userAgentSuffix}` : base;\n }\n\n /**\n * Send a request and parse the response as JSON. For 204 returns `null`.\n * Throws AuthnHttpError on non-2xx.\n */\n async send<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const url = this.buildUrl(path, opts.query);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.secretKey}`,\n Accept: 'application/json',\n 'User-Agent': this.userAgent,\n ...(opts.headers ?? {}),\n };\n let body: string | Uint8Array | undefined;\n if (opts.body !== undefined && opts.body !== null && method !== 'GET' && method !== 'DELETE') {\n if (opts.body instanceof Uint8Array) {\n body = opts.body;\n } else {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(opts.body);\n }\n }\n if (opts.idempotencyKey) {\n headers['Idempotency-Key'] = opts.idempotencyKey;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), opts.timeoutMs ?? this.defaultTimeoutMs);\n let res: Response;\n try {\n const init: RequestInit = { method, headers, signal: controller.signal };\n if (body !== undefined) {\n init.body = body as BodyInit;\n }\n res = await this.fetcher(url, init);\n } finally {\n clearTimeout(timeoutId);\n }\n\n const requestId = res.headers.get('x-request-id');\n\n if (res.status === 204) {\n return null as unknown as T;\n }\n\n const text = await res.text();\n let parsed: unknown = null;\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n // fall through; AuthnHttpError below will surface the raw body.\n }\n }\n\n if (!res.ok) {\n const errors = this.extractApiErrors(parsed);\n throw new AuthnHttpError(res.status, errors, requestId);\n }\n\n return parsed as T;\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const base = `${this.apiUrl}${path.startsWith('/') ? path : '/' + path}`;\n if (!query) return base;\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null || v === '') continue;\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item !== undefined && item !== null) params.append(k, String(item));\n }\n } else {\n params.append(k, String(v));\n }\n }\n const qs = params.toString();\n return qs ? `${base}?${qs}` : base;\n }\n\n private extractApiErrors(payload: unknown): AuthnApiError[] {\n if (\n payload &&\n typeof payload === 'object' &&\n 'errors' in payload &&\n Array.isArray((payload as { errors: unknown }).errors)\n ) {\n const out: AuthnApiError[] = [];\n for (const entry of (payload as { errors: unknown[] }).errors) {\n if (entry && typeof entry === 'object') {\n const e = entry as Record<string, unknown>;\n const err: AuthnApiError = {\n code: typeof e.code === 'string' ? e.code : 'unknown',\n message: typeof e.message === 'string' ? e.message : 'Unknown error',\n };\n if (typeof e.long_message === 'string') err.longMessage = e.long_message;\n if (e.meta && typeof e.meta === 'object') err.meta = e.meta as Record<string, unknown>;\n out.push(err);\n }\n }\n if (out.length > 0) return out;\n }\n return [{ code: 'unknown', message: 'Unknown error from authn.sh API' }];\n }\n}\n","import { AuthnConfigError } from './errors/index.js';\nimport { ExternalAccountsManager } from './resources/ExternalAccounts.js';\nimport { InstanceManager } from './resources/Instance.js';\nimport { InvitationsManager } from './resources/Invitations.js';\nimport {\n AllowlistIdentifiersManager,\n BlocklistIdentifiersManager,\n} from './resources/Lists.js';\nimport { OauthProvidersManager } from './resources/OauthProviders.js';\nimport { OrganizationsManager } from './resources/Organizations.js';\nimport { PhoneNumbersManager } from './resources/PhoneNumbers.js';\nimport { RedirectUrlsManager } from './resources/RedirectUrls.js';\nimport { RolesManager, PermissionsManager } from './resources/Roles.js';\nimport { SessionsManager } from './resources/Sessions.js';\nimport { SmsTemplatesManager } from './resources/SmsTemplates.js';\nimport { UsersManager } from './resources/Users.js';\nimport { Transport, type TransportOptions } from './transport/Transport.js';\n\nexport interface AuthnOptions {\n /** Workspace-scoped secret key — `sk_test_…` / `sk_live_…`. */\n secretKey: string;\n /** BAPI base URL (host only, no `/v1` — manager paths include it). Default `https://api.authn.sh`. */\n apiUrl?: string;\n /** Override the global fetch (testing / proxying). */\n fetch?: typeof fetch;\n /** Request timeout in milliseconds. Default 10_000. */\n timeoutMs?: number;\n /** User-Agent suffix, appended after `@authn-sh/sdk-node`. */\n userAgentSuffix?: string;\n}\n\n/**\n * BAPI client for authn.sh. Single entry point — instantiate once,\n * reuse across requests.\n *\n * @example\n * const authn = new Authn({ secretKey: process.env.AUTHN_SECRET_KEY! });\n * const user = await authn.users.get('user_01HXYZ...');\n * const session = await authn.sessions.get(req.cookies.authnSessionId);\n */\nexport class Authn {\n /** Underlying HTTP transport — exposed for advanced use cases. */\n public readonly transport: Transport;\n\n public readonly users: UsersManager;\n public readonly sessions: SessionsManager;\n public readonly organizations: OrganizationsManager;\n public readonly oauthProviders: OauthProvidersManager;\n public readonly phoneNumbers: PhoneNumbersManager;\n public readonly externalAccounts: ExternalAccountsManager;\n public readonly smsTemplates: SmsTemplatesManager;\n public readonly invitations: InvitationsManager;\n public readonly allowlistIdentifiers: AllowlistIdentifiersManager;\n public readonly blocklistIdentifiers: BlocklistIdentifiersManager;\n public readonly redirectUrls: RedirectUrlsManager;\n public readonly roles: RolesManager;\n public readonly permissions: PermissionsManager;\n public readonly instance: InstanceManager;\n\n constructor(opts: AuthnOptions) {\n if (!opts.secretKey || typeof opts.secretKey !== 'string') {\n throw new AuthnConfigError('Authn: secretKey is required.');\n }\n if (!opts.secretKey.startsWith('sk_test_') && !opts.secretKey.startsWith('sk_live_')) {\n throw new AuthnConfigError('Authn: secretKey must start with sk_test_ or sk_live_.');\n }\n const transportOpts: TransportOptions = {\n apiUrl: opts.apiUrl ?? 'https://api.authn.sh',\n secretKey: opts.secretKey,\n };\n if (opts.fetch !== undefined) transportOpts.fetch = opts.fetch;\n if (opts.timeoutMs !== undefined) transportOpts.timeoutMs = opts.timeoutMs;\n if (opts.userAgentSuffix !== undefined) transportOpts.userAgentSuffix = opts.userAgentSuffix;\n this.transport = new Transport(transportOpts);\n this.users = new UsersManager(this.transport);\n this.sessions = new SessionsManager(this.transport);\n this.organizations = new OrganizationsManager(this.transport);\n this.oauthProviders = new OauthProvidersManager(this.transport);\n this.phoneNumbers = new PhoneNumbersManager(this.transport);\n this.externalAccounts = new ExternalAccountsManager(this.transport);\n this.smsTemplates = new SmsTemplatesManager(this.transport);\n this.invitations = new InvitationsManager(this.transport);\n this.allowlistIdentifiers = new AllowlistIdentifiersManager(this.transport);\n this.blocklistIdentifiers = new BlocklistIdentifiersManager(this.transport);\n this.redirectUrls = new RedirectUrlsManager(this.transport);\n this.roles = new RolesManager(this.transport);\n this.permissions = new PermissionsManager(this.transport);\n this.instance = new InstanceManager(this.transport);\n }\n}\n","export interface VerifiedOrganization {\n id: string;\n slug?: string;\n role?: string;\n permissions: string[];\n}\n\nexport interface VerifiedActor {\n iss: string;\n sub: string;\n sid: string;\n}\n\n/**\n * Strongly-typed view of a verified session-JWT's claims.\n *\n * Use the helper methods (`hasRole`, `hasPermission`,\n * `hasVerifiedPhoneNumber`, `preferredSecondFactor`) rather than poking\n * into `raw` directly — the helpers are the stable surface, raw fields\n * may change shape.\n */\nexport class VerifiedClaims {\n constructor(\n public readonly sub: string,\n public readonly sid: string,\n public readonly iss: string,\n public readonly azp: string | null,\n public readonly exp: number,\n public readonly iat: number,\n public readonly nbf: number | null,\n public readonly actor: VerifiedActor | null,\n public readonly organization: VerifiedOrganization | null,\n public readonly wasTest: boolean,\n public readonly twoFactorVerified: boolean,\n public readonly secondFactorAgeSeconds: number | null,\n public readonly firstFactorAgeSeconds: number | null,\n public readonly phoneNumberVerified: boolean,\n public readonly defaultSecondFactor: 'totp' | 'phone_code' | 'backup_code' | null,\n public readonly raw: Record<string, unknown>,\n ) {}\n\n hasRole(roleKey: string): boolean {\n return this.organization?.role === roleKey;\n }\n\n hasPermission(permissionKey: string): boolean {\n return this.organization?.permissions.includes(permissionKey) ?? false;\n }\n\n hasVerifiedPhoneNumber(): boolean {\n return this.phoneNumberVerified;\n }\n\n preferredSecondFactor(): VerifiedClaims['defaultSecondFactor'] {\n return this.defaultSecondFactor;\n }\n}\n\n/**\n * Build a VerifiedClaims from a JWT claims-bag (post-signature-verify).\n */\nexport function buildVerifiedClaims(claims: Record<string, unknown>): VerifiedClaims {\n const num = (k: string): number => (typeof claims[k] === 'number' ? (claims[k] as number) : 0);\n const numOrNull = (k: string): number | null =>\n typeof claims[k] === 'number' ? (claims[k] as number) : null;\n const str = (k: string): string => (typeof claims[k] === 'string' ? (claims[k] as string) : '');\n const strOrNull = (k: string): string | null => (typeof claims[k] === 'string' ? (claims[k] as string) : null);\n\n const actorRaw = claims['actor'];\n const actor: VerifiedActor | null =\n actorRaw && typeof actorRaw === 'object'\n ? {\n iss: typeof (actorRaw as Record<string, unknown>).iss === 'string' ? ((actorRaw as Record<string, unknown>).iss as string) : '',\n sub: typeof (actorRaw as Record<string, unknown>).sub === 'string' ? ((actorRaw as Record<string, unknown>).sub as string) : '',\n sid: typeof (actorRaw as Record<string, unknown>).sid === 'string' ? ((actorRaw as Record<string, unknown>).sid as string) : '',\n }\n : null;\n\n const orgRaw = claims['org'];\n let organization: VerifiedOrganization | null = null;\n if (orgRaw && typeof orgRaw === 'object') {\n const o = orgRaw as Record<string, unknown>;\n const perms = Array.isArray(o.per) ? o.per.filter((p): p is string => typeof p === 'string') : [];\n organization = {\n id: typeof o.id === 'string' ? o.id : '',\n slug: typeof o.slg === 'string' ? o.slg : undefined,\n role: typeof o.rol === 'string' ? o.rol : undefined,\n permissions: perms,\n };\n }\n\n const dsfRaw = claims['dsf'];\n const dsf =\n dsfRaw === 'totp' || dsfRaw === 'phone_code' || dsfRaw === 'backup_code' ? dsfRaw : null;\n\n return new VerifiedClaims(\n str('sub'),\n str('sid'),\n str('iss'),\n strOrNull('azp'),\n num('exp'),\n num('iat'),\n numOrNull('nbf'),\n actor,\n organization,\n claims['wt'] === true,\n claims['tfv'] === true,\n numOrNull('sfa'),\n numOrNull('ffa'),\n claims['pnv'] === true,\n dsf,\n claims,\n );\n}\n","import { createRemoteJWKSet, jwtVerify, decodeProtectedHeader } from 'jose';\n\nimport { AuthnConfigError, AuthnTokenInvalidError } from '../errors/index.js';\n\nimport type { VerifiedClaims} from './VerifiedClaims.js';\nimport { buildVerifiedClaims } from './VerifiedClaims.js';\n\nexport interface TokenVerifierOptions {\n /**\n * Workspace publishable key (`pk_test_…` / `pk_live_…`). The verifier\n * decodes the FAPI host from the key, e.g. `pk_test_<env_slug>` →\n * `https://<env_slug>.authn.sh`.\n */\n publishableKey?: string;\n /**\n * Explicit FAPI base URL (`https://<env_slug>.authn.sh`). Use this\n * when self-hosting on a custom domain — overrides `publishableKey`\n * decoding.\n */\n frontendApiUrl?: string;\n /** JWKS cache TTL in seconds. Default 600. */\n jwksCacheTtlSeconds?: number;\n /** Allowed clock skew on exp/nbf validation in seconds. Default 5. */\n allowedClockSkewSeconds?: number;\n /** Override the global fetch (testing). */\n fetch?: typeof fetch;\n}\n\nconst SUPPORTED_ALGS = ['RS256', 'ES256', 'ES384', 'ES512'] as const;\n\n/**\n * Verifies session JWTs minted by an authn.sh Frontend API.\n *\n * Resolves the FAPI's JWKS URL from `publishableKey` or `frontendApiUrl`,\n * caches it in memory, and validates the signature + expiry + issuer.\n *\n * @example\n * const verifier = new TokenVerifier({ publishableKey: process.env.AUTHN_PUBLISHABLE_KEY! });\n * const claims = await verifier.verify(req.cookies.__session);\n * console.log(claims.sub); // user_…\n * console.log(claims.hasPermission('org:billing:read'));\n * console.log(claims.preferredSecondFactor()); // 'totp' | 'phone_code' | 'backup_code' | null\n */\nexport class TokenVerifier {\n private readonly frontendApiUrl: string;\n private readonly jwks: ReturnType<typeof createRemoteJWKSet>;\n private readonly allowedClockSkew: number;\n\n constructor(opts: TokenVerifierOptions = {}) {\n if (!opts.publishableKey && !opts.frontendApiUrl) {\n throw new AuthnConfigError('TokenVerifier: either publishableKey or frontendApiUrl is required.');\n }\n this.frontendApiUrl = opts.frontendApiUrl\n ? opts.frontendApiUrl.replace(/\\/$/, '')\n : decodeFrontendApiUrl(opts.publishableKey ?? '');\n\n const jwksUrl = new URL(`${this.frontendApiUrl}/v1/jwks`);\n this.jwks = createRemoteJWKSet(jwksUrl, {\n cacheMaxAge: (opts.jwksCacheTtlSeconds ?? 600) * 1000,\n cooldownDuration: 30_000,\n ...(opts.fetch ? { [Symbol.for('jose.fetch') as never]: opts.fetch } : {}),\n });\n this.allowedClockSkew = opts.allowedClockSkewSeconds ?? 5;\n }\n\n /**\n * Verify a JWT and return its claims. Throws AuthnTokenInvalidError on failure.\n *\n * @param expectedAzp If provided, the token's `azp` must match one of these.\n */\n async verify(jwt: string, expectedAzp: string[] = []): Promise<VerifiedClaims> {\n if (typeof jwt !== 'string' || jwt === '') {\n throw new AuthnTokenInvalidError('malformed', 'Token is empty.');\n }\n\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(jwt);\n } catch (e) {\n throw new AuthnTokenInvalidError('malformed', (e as Error).message);\n }\n if (!header.alg || !SUPPORTED_ALGS.includes(header.alg as typeof SUPPORTED_ALGS[number])) {\n throw new AuthnTokenInvalidError('signature_invalid', `Unsupported alg: ${String(header.alg)}`);\n }\n\n let claims: Record<string, unknown>;\n try {\n const result = await jwtVerify(jwt, this.jwks, {\n issuer: this.frontendApiUrl,\n clockTolerance: this.allowedClockSkew,\n algorithms: [...SUPPORTED_ALGS],\n });\n claims = result.payload as Record<string, unknown>;\n } catch (e) {\n const err = e as { code?: string; message: string };\n const reason = mapJoseError(err.code);\n throw new AuthnTokenInvalidError(reason, err.message);\n }\n\n if (expectedAzp.length > 0) {\n const azp = typeof claims.azp === 'string' ? claims.azp : null;\n if (azp === null || !expectedAzp.includes(azp)) {\n throw new AuthnTokenInvalidError(\n 'audience_mismatch',\n `azp claim \"${String(azp)}\" did not match the expected origins.`,\n );\n }\n }\n\n return buildVerifiedClaims(claims);\n }\n\n /**\n * Same as `verify` but returns `null` on failure instead of throwing.\n * Useful for \"best-effort\" auth that falls back to unauthenticated.\n */\n async tryVerify(jwt: string, expectedAzp: string[] = []): Promise<VerifiedClaims | null> {\n try {\n return await this.verify(jwt, expectedAzp);\n } catch {\n return null;\n }\n }\n}\n\nfunction mapJoseError(code: string | undefined): AuthnTokenInvalidError['reason'] {\n switch (code) {\n case 'ERR_JWT_EXPIRED':\n return 'expired';\n case 'ERR_JWT_CLAIM_VALIDATION_FAILED':\n return 'issuer_mismatch';\n case 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED':\n case 'ERR_JWS_INVALID':\n return 'signature_invalid';\n case 'ERR_JWKS_NO_MATCHING_KEY':\n return 'key_not_found';\n case 'ERR_JWKS_TIMEOUT':\n return 'jwks_fetch_failed';\n default:\n return 'signature_invalid';\n }\n}\n\n/**\n * Decode the FAPI URL embedded in a publishable key.\n *\n * Publishable keys look like `pk_(test|live)_<base64url-encoded-host>$`.\n * The host segment is `<env_slug>.authn.sh` (no scheme). We always\n * emit `https://`.\n */\nexport function decodeFrontendApiUrl(publishableKey: string): string {\n if (!publishableKey.startsWith('pk_test_') && !publishableKey.startsWith('pk_live_')) {\n throw new AuthnConfigError(\n `TokenVerifier: publishableKey must start with pk_test_ or pk_live_, got \"${publishableKey.slice(0, 8)}…\".`,\n );\n }\n const payload = publishableKey.replace(/^pk_(test|live)_/, '').replace(/\\$$/, '');\n let host: string;\n try {\n host = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));\n } catch {\n throw new AuthnConfigError(`TokenVerifier: publishableKey \"${publishableKey.slice(0, 16)}…\" is not base64url.`);\n }\n if (host === '') {\n throw new AuthnConfigError('TokenVerifier: publishableKey decoded to an empty host.');\n }\n return `https://${host.replace(/\\/$/, '')}`;\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\n\nimport { AuthnWebhookSignatureInvalidError } from '../errors/index.js';\n\nimport type { WebhookEvent } from './WebhookEvent.js';\n\nexport interface WebhookSignatureVerifierOptions {\n /**\n * `whsec_…` signing secret. Pass an array to tolerate key rotation —\n * a request is accepted if any provided signature matches any secret.\n */\n signingSecret: string | string[];\n /** Acceptable clock skew window in seconds. Default 300 (5 min). */\n toleranceSeconds?: number;\n /** Override the clock (testing). Returns unix seconds. */\n now?: () => number;\n}\n\n/**\n * Verifies authn.sh webhook signatures (svix-compatible scheme).\n *\n * The transport signs `{svix-id}.{svix-timestamp}.{rawBody}` with\n * HMAC-SHA256 keyed by `whsec_…`. Multiple secrets can be supplied to\n * tolerate rotation — a request is accepted if any provided signature\n * matches any configured secret.\n *\n * @example\n * app.post('/webhooks', express.raw({ type: 'application/json' }), (req, res) => {\n * const verifier = new WebhookSignatureVerifier({ signingSecret: process.env.AUTHN_WEBHOOK_SECRET! });\n * try {\n * const event = verifier.verify(req.body.toString('utf8'), req.headers);\n * // event.type === 'user.created' | 'phoneNumber.verified' | ...\n * } catch (e) {\n * return res.status(400).end();\n * }\n * res.status(204).end();\n * });\n */\nexport class WebhookSignatureVerifier {\n private readonly secrets: string[];\n private readonly tolerance: number;\n private readonly now: () => number;\n\n constructor(opts: WebhookSignatureVerifierOptions) {\n const list = Array.isArray(opts.signingSecret) ? opts.signingSecret : [opts.signingSecret];\n this.secrets = list.filter((s) => typeof s === 'string' && s !== '');\n if (this.secrets.length === 0) {\n throw new Error('WebhookSignatureVerifier: at least one signing secret must be provided.');\n }\n this.tolerance = opts.toleranceSeconds ?? 300;\n this.now = opts.now ?? (() => Math.floor(Date.now() / 1000));\n }\n\n verify(rawBody: string, headers: Record<string, string | string[] | undefined>): WebhookEvent {\n const id = headerLine(headers, 'svix-id');\n const timestamp = headerLine(headers, 'svix-timestamp');\n const signature = headerLine(headers, 'svix-signature');\n\n if (!id || !timestamp || !signature) {\n throw new AuthnWebhookSignatureInvalidError('missing_signature_header');\n }\n if (!/^\\d+$/.test(timestamp)) {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'svix-timestamp must be a unix-second integer.');\n }\n\n const tsInt = parseInt(timestamp, 10);\n if (Math.abs(this.now() - tsInt) > this.tolerance) {\n throw new AuthnWebhookSignatureInvalidError('timestamp_too_old');\n }\n\n const signedPayload = `${id}.${timestamp}.${rawBody}`;\n const providedSignatures = extractV1Signatures(signature);\n if (providedSignatures.length === 0) {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'No v1 signatures found in svix-signature.');\n }\n\n if (!this.matchesAny(signedPayload, providedSignatures)) {\n throw new AuthnWebhookSignatureInvalidError('no_matching_signature');\n }\n\n let payload: Record<string, unknown>;\n try {\n const parsed = JSON.parse(rawBody);\n payload = parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {};\n } catch {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'Webhook body is not JSON.');\n }\n\n return {\n type: typeof payload.type === 'string' ? payload.type : '',\n data: payload.data && typeof payload.data === 'object' ? (payload.data as Record<string, unknown>) : {},\n timestamp: tsInt,\n instanceId: typeof payload.instance_id === 'string' ? payload.instance_id : '',\n wasTest: payload.was_test === true,\n messageId: id,\n };\n }\n\n tryVerify(rawBody: string, headers: Record<string, string | string[] | undefined>): WebhookEvent | null {\n try {\n return this.verify(rawBody, headers);\n } catch {\n return null;\n }\n }\n\n private matchesAny(signedPayload: string, providedSignatures: string[]): boolean {\n for (const secret of this.secrets) {\n const key = stripWhsecPrefix(secret);\n const expected = createHmac('sha256', Buffer.from(key, 'base64')).update(signedPayload).digest();\n for (const sig of providedSignatures) {\n let provided: Buffer;\n try {\n provided = Buffer.from(sig, 'base64');\n } catch {\n continue;\n }\n if (provided.length === expected.length && timingSafeEqual(provided, expected)) {\n return true;\n }\n }\n }\n return false;\n }\n}\n\nfunction headerLine(headers: Record<string, string | string[] | undefined>, name: string): string | null {\n const lookup = name.toLowerCase();\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() === lookup) {\n if (Array.isArray(v)) return v[0] ?? null;\n if (typeof v === 'string') return v;\n }\n }\n return null;\n}\n\nfunction extractV1Signatures(header: string): string[] {\n const parts = header.split(/\\s+/);\n const out: string[] = [];\n for (const part of parts) {\n const eqIndex = part.indexOf(',');\n if (eqIndex === -1) continue;\n const scheme = part.slice(0, eqIndex);\n const value = part.slice(eqIndex + 1);\n if (scheme === 'v1') out.push(value);\n }\n return out;\n}\n\nfunction stripWhsecPrefix(secret: string): string {\n return secret.startsWith('whsec_') ? secret.slice(6) : secret;\n}\n"]}
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/resources/Manager.ts","../src/resources/Appearance.ts","../src/resources/ListParams.ts","../src/resources/PaginatedList.ts","../src/resources/ExternalAccounts.ts","../src/resources/Instance.ts","../src/util/Idempotency.ts","../src/resources/Invitations.ts","../src/resources/Lists.ts","../src/resources/Localization.ts","../src/resources/OauthProviders.ts","../src/resources/Organizations.ts","../src/resources/Passkeys.ts","../src/resources/PhoneNumbers.ts","../src/resources/RedirectUrls.ts","../src/resources/Roles.ts","../src/resources/Sessions.ts","../src/resources/SmsTemplates.ts","../src/resources/Users.ts","../src/transport/Transport.ts","../src/Authn.ts","../src/tokens/VerifiedClaims.ts","../src/tokens/TokenVerifier.ts","../src/webhooks/SignatureVerifier.ts"],"names":["meta"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Error shape emitted by the authn.sh API.\n */\nexport interface AuthnApiError {\n code: string;\n message: string;\n longMessage?: string;\n meta?: Record<string, unknown>;\n}\n\n/**\n * Thrown when a request to the BAPI returns a non-2xx response.\n */\nexport class AuthnHttpError extends Error {\n public override readonly name ='AuthnHttpError';\n\n constructor(\n public readonly status: number,\n public readonly errors: AuthnApiError[],\n public readonly requestId: string | null,\n message?: string,\n ) {\n super(message ?? (errors[0]?.longMessage || errors[0]?.message) ?? `authn.sh API returned HTTP ${status}`);\n }\n\n /** The primary error code returned by the API (when present). */\n get code(): string | null {\n return this.errors[0]?.code ?? null;\n }\n}\n\n/**\n * Thrown when the SDK is misconfigured (missing secret key, malformed URL, etc.).\n */\nexport class AuthnConfigError extends Error {\n public override readonly name ='AuthnConfigError';\n}\n\n/**\n * Thrown when a JWT can't be verified — wrong signature, expired, malformed,\n * issuer mismatch, etc. The `reason` discriminates between the failure modes.\n */\nexport class AuthnTokenInvalidError extends Error {\n public override readonly name ='AuthnTokenInvalidError';\n\n constructor(\n public readonly reason:\n | 'malformed'\n | 'signature_invalid'\n | 'expired'\n | 'not_yet_valid'\n | 'issuer_mismatch'\n | 'audience_mismatch'\n | 'key_not_found'\n | 'jwks_fetch_failed',\n message?: string,\n ) {\n super(message ?? `Token invalid: ${reason}`);\n }\n}\n\n/**\n * Thrown when a webhook signature can't be verified.\n */\nexport class AuthnWebhookSignatureInvalidError extends Error {\n public override readonly name ='AuthnWebhookSignatureInvalidError';\n\n constructor(\n public readonly reason:\n | 'missing_signature_header'\n | 'malformed_signature_header'\n | 'no_matching_signature'\n | 'timestamp_too_old'\n | 'timestamp_missing',\n message?: string,\n ) {\n super(message ?? `Webhook signature invalid: ${reason}`);\n }\n}\n","import type { Transport } from '../transport/Transport.js';\n\n/**\n * Base class for BAPI resource managers. Holds the shared Transport so\n * subclasses can `.send()` without juggling auth themselves.\n */\nexport abstract class Manager {\n constructor(protected readonly transport: Transport) {}\n}\n","import { Manager } from './Manager.js';\n\nexport interface AppearanceVariables {\n colorPrimary?: string;\n colorBackground?: string;\n colorText?: string;\n colorTextOnPrimary?: string;\n colorInputBackground?: string;\n colorInputText?: string;\n colorDanger?: string;\n colorSuccess?: string;\n colorWarning?: string;\n colorNeutral?: string;\n fontFamily?: string;\n fontFamilyButtons?: string;\n fontSize?: string;\n borderRadius?: string;\n spacingUnit?: string;\n [key: string]: string | undefined;\n}\n\nexport interface AppearanceLayout {\n logoImageUrl?: string | null;\n logoLinkUrl?: string | null;\n socialButtonsPlacement?: 'top' | 'bottom';\n socialButtonsVariant?: 'blockButton' | 'iconButton';\n showOptionalFields?: boolean;\n privacyPageUrl?: string | null;\n termsPageUrl?: string | null;\n helpPageUrl?: string | null;\n animations?: boolean;\n}\n\nexport interface Appearance {\n variables?: AppearanceVariables;\n elements?: Record<string, string>;\n layout?: AppearanceLayout;\n}\n\n/**\n * BAPI surface for the env-scoped `appearance` blob.\n * Mirrors sdk-php's `AppearanceManager`:\n *\n * - `GET /v1/instance/appearance` — fetch the current blob.\n * - `PUT /v1/instance/appearance` — replace wholesale.\n * - `PATCH /v1/instance/appearance` — sparse merge.\n *\n * The SDK transmits camelCase keys; the server's snake/camel boundary\n * is handled by the BAPI itself (the appearance schema is intentionally\n * camelCase per OA-4).\n */\nexport class AppearanceManager extends Manager {\n async get(): Promise<Appearance> {\n const raw = await this.transport.send('GET', '/v1/instance/appearance');\n return hydrateAppearance(raw);\n }\n\n async put(blob: Appearance, idempotencyKey?: string): Promise<Appearance> {\n const raw = await this.transport.send('PUT', '/v1/instance/appearance', {\n body: blob,\n idempotencyKey,\n });\n return hydrateAppearance(raw);\n }\n\n async patch(partial: Partial<Appearance>, idempotencyKey?: string): Promise<Appearance> {\n const raw = await this.transport.send('PATCH', '/v1/instance/appearance', {\n body: partial,\n idempotencyKey,\n });\n return hydrateAppearance(raw);\n }\n}\n\nexport function hydrateAppearance(raw: unknown): Appearance {\n if (!raw || typeof raw !== 'object') return {};\n const obj = raw as Record<string, unknown>;\n const out: Appearance = {};\n if (obj.variables && typeof obj.variables === 'object') {\n out.variables = obj.variables as AppearanceVariables;\n }\n if (obj.elements && typeof obj.elements === 'object') {\n out.elements = obj.elements as Record<string, string>;\n }\n if (obj.layout && typeof obj.layout === 'object') {\n out.layout = obj.layout as AppearanceLayout;\n }\n return out;\n}\n","/**\n * Pagination + ordering parameters shared by every `list*` BAPI call.\n * Resource-specific filter params extend this with their own fields.\n */\nexport class ListParams {\n constructor(\n public limit?: number,\n public offset?: number,\n public orderBy?: string,\n ) {}\n\n toQuery(): Record<string, unknown> {\n const q: Record<string, unknown> = {};\n if (this.limit !== undefined) q.limit = this.limit;\n if (this.offset !== undefined) q.offset = this.offset;\n if (this.orderBy !== undefined) q.order_by = this.orderBy;\n return q;\n }\n}\n","/**\n * Generic paginated-list envelope returned by every `list*` BAPI endpoint.\n */\nexport interface PaginatedList<T> {\n data: T[];\n totalCount: number;\n}\n\n/**\n * Convert a snake_case `{data, total_count}` response into our camelCase shape.\n */\nexport function hydratePaginatedList<T>(\n raw: unknown,\n hydrate: (item: unknown) => T,\n): PaginatedList<T> {\n if (!raw || typeof raw !== 'object') {\n return { data: [], totalCount: 0 };\n }\n const obj = raw as Record<string, unknown>;\n const data = Array.isArray(obj.data) ? obj.data.map(hydrate) : [];\n const totalCount = typeof obj.total_count === 'number' ? obj.total_count : data.length;\n return { data, totalCount };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface ExternalAccount {\n id: string;\n object: 'external_account';\n provider: string;\n providerKey: string;\n providerUserId: string;\n emailAddress?: string | null;\n scopes: string[];\n publicMetadata: Record<string, unknown>;\n verified: boolean;\n linkedAt?: number | null;\n lastSignedInAt?: number | null;\n raw: Record<string, unknown>;\n}\n\nexport class ExternalAccountsListParams extends ListParams {\n constructor(\n public userId?: string,\n public oauthProviderId?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n if (this.oauthProviderId) q.oauth_provider_id = this.oauthProviderId;\n return q;\n }\n}\n\nexport class ExternalAccountsManager extends Manager {\n async list(params?: ExternalAccountsListParams): Promise<PaginatedList<ExternalAccount>> {\n const raw = await this.transport.send('GET', '/v1/external-accounts', {\n query: (params ?? new ExternalAccountsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateExternalAccount);\n }\n\n async get(externalAccountId: string): Promise<ExternalAccount> {\n const raw = await this.transport.send('GET', `/v1/external-accounts/${encodeURIComponent(externalAccountId)}`);\n return hydrateExternalAccount(raw);\n }\n\n async delete(externalAccountId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/external-accounts/${encodeURIComponent(externalAccountId)}`);\n }\n}\n\nexport function hydrateExternalAccount(raw: unknown): ExternalAccount {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const scopes = Array.isArray(obj.scopes) ? obj.scopes.filter((s): s is string => typeof s === 'string') : [];\n const meta = obj.public_metadata && typeof obj.public_metadata === 'object'\n ? (obj.public_metadata as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'external_account',\n provider: String(obj.provider ?? ''),\n providerKey: String(obj.provider_key ?? ''),\n providerUserId: String(obj.provider_user_id ?? ''),\n emailAddress: (obj.email_address as string | null | undefined) ?? null,\n scopes,\n publicMetadata: meta,\n verified: Boolean(obj.verified),\n linkedAt: (obj.linked_at as number | null | undefined) ?? null,\n lastSignedInAt: (obj.last_signed_in_at as number | null | undefined) ?? null,\n raw: obj,\n };\n}\n","import { Manager } from './Manager.js';\n\nexport interface InstanceSettings {\n id: string;\n object: 'instance';\n attributes: Record<string, unknown>;\n multiFactor: Record<string, unknown>;\n signUpMode?: string;\n raw: Record<string, unknown>;\n}\n\nexport class InstanceManager extends Manager {\n async get(): Promise<InstanceSettings> {\n const raw = await this.transport.send('GET', '/v1/instance');\n return hydrateInstance(raw);\n }\n\n async update(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance', { body: patch });\n return hydrateInstance(raw);\n }\n\n async updateRestrictions(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance/restrictions', { body: patch });\n return hydrateInstance(raw);\n }\n\n async updateOrganizationSettings(patch: Record<string, unknown>): Promise<InstanceSettings> {\n const raw = await this.transport.send('PATCH', '/v1/instance/organization-settings', { body: patch });\n return hydrateInstance(raw);\n }\n}\n\nexport function hydrateInstance(raw: unknown): InstanceSettings {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const meta = (key: string): Record<string, unknown> =>\n obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n return {\n id: String(obj.id ?? ''),\n object: 'instance',\n attributes: meta('attributes'),\n multiFactor: meta('multi_factor'),\n signUpMode: typeof obj.sign_up_mode === 'string' ? obj.sign_up_mode : undefined,\n raw: obj,\n };\n}\n","import { createHash, randomUUID } from 'node:crypto';\n\n/**\n * Build a stable Idempotency-Key for a request body. The same input\n * payload always produces the same key, so retries within npm\n * deduplication windows fold into the original call.\n *\n * Falls back to a random UUID when the runtime doesn't expose `crypto`.\n */\nexport function idempotencyKeyFor(payload: unknown): string {\n try {\n const json = JSON.stringify(payload ?? {});\n return createHash('sha256').update(json).digest('hex').slice(0, 32);\n } catch {\n return randomUUID();\n }\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Invitation {\n id: string;\n object: 'invitation';\n emailAddress: string;\n status: string;\n redirectUrl?: string | null;\n publicMetadata: Record<string, unknown>;\n expiresAt?: number | null;\n url?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class InvitationsListParams extends ListParams {\n constructor(\n public status?: string[],\n public emailAddress?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.status?.length) q.status = this.status;\n if (this.emailAddress) q.email_address = this.emailAddress;\n return q;\n }\n}\n\nexport class InvitationsManager extends Manager {\n async list(params?: InvitationsListParams): Promise<PaginatedList<Invitation>> {\n const raw = await this.transport.send('GET', '/v1/invitations', {\n query: (params ?? new InvitationsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateInvitation);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Invitation> {\n const raw = await this.transport.send('POST', '/v1/invitations', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateInvitation(raw);\n }\n\n async bulkCreate(invitations: Array<Record<string, unknown>>, idempotencyKey?: string): Promise<Invitation[]> {\n const raw = (await this.transport.send('POST', '/v1/invitations/bulk', {\n body: { invitations },\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(invitations),\n })) as { data?: unknown[] } | null;\n return (raw?.data ?? []).map(hydrateInvitation);\n }\n\n async revoke(invitationId: string): Promise<Invitation> {\n const raw = await this.transport.send('POST', `/v1/invitations/${encodeURIComponent(invitationId)}/revoke`);\n return hydrateInvitation(raw);\n }\n}\n\nexport function hydrateInvitation(raw: unknown): Invitation {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const meta = obj.public_metadata && typeof obj.public_metadata === 'object'\n ? (obj.public_metadata as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'invitation',\n emailAddress: String(obj.email_address ?? ''),\n status: String(obj.status ?? ''),\n redirectUrl: (obj.redirect_url as string | null | undefined) ?? null,\n publicMetadata: meta,\n expiresAt: (obj.expires_at as number | null | undefined) ?? null,\n url: (obj.url as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface AllowlistIdentifier {\n id: string;\n object: 'allowlist_identifier';\n identifier: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface BlocklistIdentifier {\n id: string;\n object: 'blocklist_identifier';\n identifier: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class AllowlistIdentifiersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<AllowlistIdentifier>> {\n const raw = await this.transport.send('GET', '/v1/allowlist-identifiers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateAllowlistIdentifier);\n }\n\n async create(data: { identifier: string }): Promise<AllowlistIdentifier> {\n const raw = await this.transport.send('POST', '/v1/allowlist-identifiers', { body: data });\n return hydrateAllowlistIdentifier(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/allowlist-identifiers/${encodeURIComponent(id)}`);\n }\n}\n\nexport class BlocklistIdentifiersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<BlocklistIdentifier>> {\n const raw = await this.transport.send('GET', '/v1/blocklist-identifiers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateBlocklistIdentifier);\n }\n\n async create(data: { identifier: string }): Promise<BlocklistIdentifier> {\n const raw = await this.transport.send('POST', '/v1/blocklist-identifiers', { body: data });\n return hydrateBlocklistIdentifier(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/blocklist-identifiers/${encodeURIComponent(id)}`);\n }\n}\n\nfunction hydrateIdentifier<O extends 'allowlist_identifier' | 'blocklist_identifier'>(\n raw: unknown,\n object: O,\n) {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object,\n identifier: String(obj.identifier ?? ''),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateAllowlistIdentifier(raw: unknown): AllowlistIdentifier {\n return hydrateIdentifier(raw, 'allowlist_identifier');\n}\n\nexport function hydrateBlocklistIdentifier(raw: unknown): BlocklistIdentifier {\n return hydrateIdentifier(raw, 'blocklist_identifier');\n}\n","import { Manager } from './Manager.js';\n\nexport interface Localization {\n default_locale: string;\n fallback_locale: string;\n supported_locales: string[];\n /**\n * Sparse per-locale overrides: `{ [locale]: { [dot.keyed.key]: 'translation' } }`.\n * The SDK never stores the canonical defaults — those ship with\n * `@authn-sh/sdk-react`. The server stores overrides only and rejects\n * unknown canonical keys at save time.\n */\n overrides: Record<string, Record<string, string>>;\n}\n\n/**\n * BAPI surface for the env-scoped `localization` blob.\n * Mirrors sdk-php's `LocalizationManager`:\n *\n * - `GET /v1/instance/localization` — fetch the current blob.\n * - `PUT /v1/instance/localization` — replace wholesale.\n * - `PATCH /v1/instance/localization` — sparse merge per locale; setting a\n * leaf key to `null` removes that single override.\n */\nexport class LocalizationManager extends Manager {\n async get(): Promise<Localization> {\n const raw = await this.transport.send('GET', '/v1/instance/localization');\n return hydrateLocalization(raw);\n }\n\n async put(blob: Localization, idempotencyKey?: string): Promise<Localization> {\n const raw = await this.transport.send('PUT', '/v1/instance/localization', {\n body: blob,\n idempotencyKey,\n });\n return hydrateLocalization(raw);\n }\n\n async patch(\n partial: {\n default_locale?: string;\n fallback_locale?: string;\n supported_locales?: string[];\n // PATCH semantics: setting a leaf to `null` removes that key from\n // the override map server-side.\n overrides?: Record<string, Record<string, string | null>>;\n },\n idempotencyKey?: string,\n ): Promise<Localization> {\n const raw = await this.transport.send('PATCH', '/v1/instance/localization', {\n body: partial,\n idempotencyKey,\n });\n return hydrateLocalization(raw);\n }\n}\n\nexport function hydrateLocalization(raw: unknown): Localization {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n default_locale: typeof obj.default_locale === 'string' ? obj.default_locale : 'en-US',\n fallback_locale: typeof obj.fallback_locale === 'string' ? obj.fallback_locale : 'en-US',\n supported_locales: Array.isArray(obj.supported_locales)\n ? obj.supported_locales.filter((s): s is string => typeof s === 'string')\n : [],\n overrides:\n obj.overrides && typeof obj.overrides === 'object'\n ? (obj.overrides as Record<string, Record<string, string>>)\n : {},\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface OauthProvider {\n id: string;\n object: 'oauth_provider';\n providerKind: 'preset' | 'custom_oidc' | 'custom_oauth2';\n providerKey: string;\n name: string;\n enabled: boolean;\n allowSignIn: boolean;\n allowSignUp: boolean;\n blockEmailSubaddresses: boolean;\n clientId: string;\n scopes: string[];\n additionalAuthorizationParams: Record<string, unknown>;\n attributeMapping: Record<string, string>;\n redirectUri: string;\n issuer?: string | null;\n discoveryEndpoint?: string | null;\n authorizationEndpoint?: string | null;\n tokenEndpoint?: string | null;\n userinfoEndpoint?: string | null;\n jwksUri?: string | null;\n idTokenSigningAlgs: string[];\n userinfoMethod?: 'GET' | 'POST' | null;\n userinfoAuth?: 'bearer' | 'basic' | 'query' | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OauthProviderTestResult {\n authorizeUrl: string;\n userinfoStatus: number | null;\n errors: Array<{ code: string; message: string }>;\n}\n\nexport class OauthProvidersManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<OauthProvider>> {\n const raw = await this.transport.send('GET', '/v1/oauth-providers', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateOauthProvider);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<OauthProvider> {\n const raw = await this.transport.send('POST', '/v1/oauth-providers', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateOauthProvider(raw);\n }\n\n async get(oauthProviderId: string): Promise<OauthProvider> {\n const raw = await this.transport.send('GET', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`);\n return hydrateOauthProvider(raw);\n }\n\n async update(oauthProviderId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<OauthProvider> {\n const raw = await this.transport.send('PATCH', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateOauthProvider(raw);\n }\n\n async delete(oauthProviderId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}`);\n }\n\n async test(oauthProviderId: string): Promise<OauthProviderTestResult> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/oauth-providers/${encodeURIComponent(oauthProviderId)}/test`,\n )) as Record<string, unknown> | null;\n const errs = Array.isArray(raw?.errors)\n ? (raw.errors as unknown[]).map((e) => {\n const o = (e && typeof e === 'object' ? e : {}) as Record<string, unknown>;\n return { code: String(o.code ?? 'unknown'), message: String(o.message ?? o.long_message ?? '') };\n })\n : [];\n return {\n authorizeUrl: String(raw?.authorize_url ?? ''),\n userinfoStatus: (raw?.userinfo_status as number | null | undefined) ?? null,\n errors: errs,\n };\n }\n}\n\nexport function hydrateOauthProvider(raw: unknown): OauthProvider {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const scopes = Array.isArray(obj.scopes) ? obj.scopes.filter((s): s is string => typeof s === 'string') : [];\n const algs = Array.isArray(obj.id_token_signing_algs)\n ? obj.id_token_signing_algs.filter((s): s is string => typeof s === 'string')\n : [];\n const mapping: Record<string, string> = {};\n if (obj.attribute_mapping && typeof obj.attribute_mapping === 'object') {\n for (const [k, v] of Object.entries(obj.attribute_mapping as Record<string, unknown>)) {\n if (typeof v === 'string') mapping[k] = v;\n }\n }\n const authParams = obj.additional_authorization_params && typeof obj.additional_authorization_params === 'object'\n ? (obj.additional_authorization_params as Record<string, unknown>)\n : {};\n return {\n id: String(obj.id ?? ''),\n object: 'oauth_provider',\n providerKind: (obj.provider_kind as OauthProvider['providerKind']) ?? 'preset',\n providerKey: String(obj.provider_key ?? ''),\n name: String(obj.name ?? ''),\n enabled: Boolean(obj.enabled),\n allowSignIn: Boolean(obj.allow_sign_in),\n allowSignUp: Boolean(obj.allow_sign_up),\n blockEmailSubaddresses: Boolean(obj.block_email_subaddresses),\n clientId: String(obj.client_id ?? ''),\n scopes,\n additionalAuthorizationParams: authParams,\n attributeMapping: mapping,\n redirectUri: String(obj.redirect_uri ?? ''),\n issuer: (obj.issuer as string | null | undefined) ?? null,\n discoveryEndpoint: (obj.discovery_endpoint as string | null | undefined) ?? null,\n authorizationEndpoint: (obj.authorization_endpoint as string | null | undefined) ?? null,\n tokenEndpoint: (obj.token_endpoint as string | null | undefined) ?? null,\n userinfoEndpoint: (obj.userinfo_endpoint as string | null | undefined) ?? null,\n jwksUri: (obj.jwks_uri as string | null | undefined) ?? null,\n idTokenSigningAlgs: algs,\n userinfoMethod: (obj.userinfo_method as OauthProvider['userinfoMethod']) ?? null,\n userinfoAuth: (obj.userinfo_auth as OauthProvider['userinfoAuth']) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import type { Transport } from '../transport/Transport.js';\nimport { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Organization {\n id: string;\n object: 'organization';\n name: string;\n slug?: string | null;\n imageUrl?: string | null;\n membersCount: number;\n pendingInvitationsCount: number;\n maxAllowedMemberships?: number | null;\n adminDeleteEnabled: boolean;\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n createdBy?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationMembership {\n id: string;\n object: 'organization_membership';\n organizationId: string;\n userId: string;\n role: string;\n permissions: string[];\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationInvitation {\n id: string;\n object: 'organization_invitation';\n organizationId: string;\n emailAddress: string;\n role: string;\n status: string;\n inviterUserId?: string | null;\n redirectUrl?: string | null;\n publicMetadata: Record<string, unknown>;\n expiresAt?: number | null;\n url?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface OrganizationDomain {\n id: string;\n object: 'organization_domain';\n organizationId: string;\n name: string;\n verified: boolean;\n enrollmentMode: string;\n currentChallengeId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class OrganizationsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Organization>> {\n const raw = await this.transport.send('GET', '/v1/organizations', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateOrganization);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Organization> {\n const raw = await this.transport.send('POST', '/v1/organizations', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateOrganization(raw);\n }\n\n async get(orgId: string): Promise<Organization> {\n const raw = await this.transport.send('GET', `/v1/organizations/${encodeURIComponent(orgId)}`);\n return hydrateOrganization(raw);\n }\n\n async update(orgId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<Organization> {\n const raw = await this.transport.send('PATCH', `/v1/organizations/${encodeURIComponent(orgId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateOrganization(raw);\n }\n\n async delete(orgId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/organizations/${encodeURIComponent(orgId)}`);\n }\n\n members(orgId: string): OrganizationMembershipsManager {\n return new OrganizationMembershipsManager(this.transport, orgId);\n }\n\n invitations(orgId: string): OrganizationInvitationsManager {\n return new OrganizationInvitationsManager(this.transport, orgId);\n }\n\n domains(orgId: string): OrganizationDomainsManager {\n return new OrganizationDomainsManager(this.transport, orgId);\n }\n}\n\nexport class OrganizationMembershipsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(params?: ListParams): Promise<PaginatedList<OrganizationMembership>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships`,\n { query: (params ?? new ListParams()).toQuery() },\n );\n return hydratePaginatedList(raw, hydrateOrganizationMembership);\n }\n\n async create(data: { userId: string; role: string }, idempotencyKey?: string): Promise<OrganizationMembership> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships`,\n { body: { user_id: data.userId, role: data.role }, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data) },\n );\n return hydrateOrganizationMembership(raw);\n }\n\n async update(userId: string, role: string, idempotencyKey?: string): Promise<OrganizationMembership> {\n const raw = await this.transport.send(\n 'PATCH',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships/${encodeURIComponent(userId)}`,\n { body: { role }, idempotencyKey },\n );\n return hydrateOrganizationMembership(raw);\n }\n\n async delete(userId: string): Promise<void> {\n await this.transport.send(\n 'DELETE',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/memberships/${encodeURIComponent(userId)}`,\n );\n }\n}\n\nexport class OrganizationInvitationsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(params?: ListParams): Promise<PaginatedList<OrganizationInvitation>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations`,\n { query: (params ?? new ListParams()).toQuery() },\n );\n return hydratePaginatedList(raw, hydrateOrganizationInvitation);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<OrganizationInvitation> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations`,\n { body: data, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data) },\n );\n return hydrateOrganizationInvitation(raw);\n }\n\n async bulkCreate(invitations: Array<Record<string, unknown>>, idempotencyKey?: string): Promise<OrganizationInvitation[]> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations/bulk`,\n { body: { invitations }, idempotencyKey: idempotencyKey ?? idempotencyKeyFor(invitations) },\n )) as { data?: unknown[] } | null;\n return (raw?.data ?? []).map(hydrateOrganizationInvitation);\n }\n\n async revoke(invitationId: string): Promise<OrganizationInvitation> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/invitations/${encodeURIComponent(invitationId)}/revoke`,\n );\n return hydrateOrganizationInvitation(raw);\n }\n}\n\nexport class OrganizationDomainsManager {\n constructor(private readonly transport: Transport, private readonly orgId: string) {}\n\n async list(): Promise<PaginatedList<OrganizationDomain>> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains`,\n );\n return hydratePaginatedList(raw, hydrateOrganizationDomain);\n }\n\n async create(name: string, enrollmentMode: string = 'manual_invitation'): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'POST',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains`,\n { body: { name, enrollment_mode: enrollmentMode } },\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async get(domainId: string): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'GET',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async update(domainId: string, patch: Record<string, unknown>): Promise<OrganizationDomain> {\n const raw = await this.transport.send(\n 'PATCH',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n { body: patch },\n );\n return hydrateOrganizationDomain(raw);\n }\n\n async delete(domainId: string): Promise<void> {\n await this.transport.send(\n 'DELETE',\n `/v1/organizations/${encodeURIComponent(this.orgId)}/domains/${encodeURIComponent(domainId)}`,\n );\n }\n}\n\nfunction meta(obj: Record<string, unknown>, key: string): Record<string, unknown> {\n return obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n}\n\nexport function hydrateOrganization(raw: unknown): Organization {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization',\n name: String(obj.name ?? ''),\n slug: (obj.slug as string | null | undefined) ?? null,\n imageUrl: (obj.image_url as string | null | undefined) ?? null,\n membersCount: typeof obj.members_count === 'number' ? obj.members_count : 0,\n pendingInvitationsCount: typeof obj.pending_invitations_count === 'number' ? obj.pending_invitations_count : 0,\n maxAllowedMemberships: (obj.max_allowed_memberships as number | null | undefined) ?? null,\n adminDeleteEnabled: Boolean(obj.admin_delete_enabled),\n publicMetadata: meta(obj, 'public_metadata'),\n privateMetadata: meta(obj, 'private_metadata'),\n createdBy: (obj.created_by as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationMembership(raw: unknown): OrganizationMembership {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const perms = Array.isArray(obj.permissions) ? obj.permissions.filter((p): p is string => typeof p === 'string') : [];\n return {\n id: String(obj.id ?? ''),\n object: 'organization_membership',\n organizationId: String(obj.organization_id ?? ''),\n userId: String(obj.user_id ?? ''),\n role: String(obj.role ?? ''),\n permissions: perms,\n publicMetadata: meta(obj, 'public_metadata'),\n privateMetadata: meta(obj, 'private_metadata'),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationInvitation(raw: unknown): OrganizationInvitation {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization_invitation',\n organizationId: String(obj.organization_id ?? ''),\n emailAddress: String(obj.email_address ?? ''),\n role: String(obj.role ?? ''),\n status: String(obj.status ?? ''),\n inviterUserId: (obj.inviter_user_id as string | null | undefined) ?? null,\n redirectUrl: (obj.redirect_url as string | null | undefined) ?? null,\n publicMetadata: meta(obj, 'public_metadata'),\n expiresAt: (obj.expires_at as number | null | undefined) ?? null,\n url: (obj.url as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydrateOrganizationDomain(raw: unknown): OrganizationDomain {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'organization_domain',\n organizationId: String(obj.organization_id ?? ''),\n name: String(obj.name ?? ''),\n verified: Boolean(obj.verified),\n enrollmentMode: String(obj.enrollment_mode ?? 'manual_invitation'),\n currentChallengeId: (obj.current_challenge_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList } from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport type PasskeyTransport = 'usb' | 'nfc' | 'ble' | 'internal' | 'hybrid';\n\nexport interface Passkey {\n id: string;\n object: 'passkey';\n userId: string;\n nickname: string;\n transports: PasskeyTransport[];\n aaguid: string | null;\n verified: boolean;\n lastUsedAt: number | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class PasskeysListParams extends ListParams {\n constructor(public userId?: string, limit?: number, offset?: number, orderBy?: string) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n return q;\n }\n}\n\n/**\n * BAPI admin surface for passkeys. Mirrors sdk-php's `PasskeysManager`:\n *\n * - `GET /v1/passkeys` — list across the workspace (optionally filtered by `userId`).\n * - `GET /v1/passkeys/{id}` — single passkey row.\n * - `PATCH /v1/passkeys/{id}` — rename (`nickname` is the only mutable field).\n * - `DELETE /v1/passkeys/{id}` — soft-remove.\n *\n * FAPI-side enrollment / authentication lives in `@authn-sh/sdk-js`.\n * `@authn-sh/sdk-node` is admin-only.\n */\nexport class PasskeysManager extends Manager {\n async list(params?: PasskeysListParams): Promise<PaginatedList<Passkey>> {\n const raw = await this.transport.send('GET', '/v1/passkeys', {\n query: (params ?? new PasskeysListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydratePasskey);\n }\n\n async get(passkeyId: string): Promise<Passkey> {\n const raw = await this.transport.send('GET', `/v1/passkeys/${encodeURIComponent(passkeyId)}`);\n return hydratePasskey(raw);\n }\n\n async update(\n passkeyId: string,\n data: { nickname: string },\n idempotencyKey?: string,\n ): Promise<Passkey> {\n const raw = await this.transport.send(\n 'PATCH',\n `/v1/passkeys/${encodeURIComponent(passkeyId)}`,\n {\n body: data,\n idempotencyKey,\n },\n );\n return hydratePasskey(raw);\n }\n\n async delete(passkeyId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/passkeys/${encodeURIComponent(passkeyId)}`);\n }\n}\n\nexport function hydratePasskey(raw: unknown): Passkey {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'passkey',\n userId: String(obj.user_id ?? ''),\n nickname: typeof obj.nickname === 'string' ? obj.nickname : '',\n transports: Array.isArray(obj.transports)\n ? (obj.transports.filter((t) => typeof t === 'string') as PasskeyTransport[])\n : [],\n aaguid: typeof obj.aaguid === 'string' ? obj.aaguid : null,\n verified: Boolean(obj.verified),\n lastUsedAt: typeof obj.last_used_at === 'number' ? obj.last_used_at : null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface PhoneNumber {\n id: string;\n object: 'phone_number';\n phoneNumber: string;\n verified: boolean;\n currentChallengeId?: string | null;\n isPrimary: boolean;\n reservedForSecondFactor: boolean;\n defaultSecondFactor: boolean;\n linkedToExternalAccountId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class PhoneNumbersListParams extends ListParams {\n constructor(\n public userId?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n return q;\n }\n}\n\nexport class PhoneNumbersManager extends Manager {\n async list(params?: PhoneNumbersListParams): Promise<PaginatedList<PhoneNumber>> {\n const raw = await this.transport.send('GET', '/v1/phone-numbers', {\n query: (params ?? new PhoneNumbersListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydratePhoneNumber);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('POST', '/v1/phone-numbers', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydratePhoneNumber(raw);\n }\n\n async get(phoneNumberId: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('GET', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`);\n return hydratePhoneNumber(raw);\n }\n\n async update(phoneNumberId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<PhoneNumber> {\n const raw = await this.transport.send('PATCH', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydratePhoneNumber(raw);\n }\n\n async delete(phoneNumberId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/phone-numbers/${encodeURIComponent(phoneNumberId)}`);\n }\n}\n\nexport function hydratePhoneNumber(raw: unknown): PhoneNumber {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'phone_number',\n phoneNumber: String(obj.phone_number ?? ''),\n verified: Boolean(obj.verified),\n currentChallengeId: (obj.current_challenge_id as string | null | undefined) ?? null,\n isPrimary: Boolean(obj.is_primary),\n reservedForSecondFactor: Boolean(obj.reserved_for_second_factor),\n defaultSecondFactor: Boolean(obj.default_second_factor),\n linkedToExternalAccountId: (obj.linked_to_external_account_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface RedirectUrl {\n id: string;\n object: 'redirect_url';\n url: string;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class RedirectUrlsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<RedirectUrl>> {\n const raw = await this.transport.send('GET', '/v1/redirect-urls', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateRedirectUrl);\n }\n\n async create(url: string): Promise<RedirectUrl> {\n const raw = await this.transport.send('POST', '/v1/redirect-urls', { body: { url } });\n return hydrateRedirectUrl(raw);\n }\n\n async get(id: string): Promise<RedirectUrl> {\n const raw = await this.transport.send('GET', `/v1/redirect-urls/${encodeURIComponent(id)}`);\n return hydrateRedirectUrl(raw);\n }\n\n async delete(id: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/redirect-urls/${encodeURIComponent(id)}`);\n }\n}\n\nexport function hydrateRedirectUrl(raw: unknown): RedirectUrl {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'redirect_url',\n url: String(obj.url ?? ''),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface Role {\n id: string;\n object: 'role';\n key: string;\n name: string;\n description?: string | null;\n isCreatorEligible: boolean;\n isDefault: boolean;\n permissions: string[];\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface Permission {\n id: string;\n object: 'permission';\n key: string;\n name: string;\n description?: string | null;\n isSystem: boolean;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class RolesManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Role>> {\n const raw = await this.transport.send('GET', '/v1/roles', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateRole);\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<Role> {\n const raw = await this.transport.send('POST', '/v1/roles', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateRole(raw);\n }\n\n async get(roleId: string): Promise<Role> {\n const raw = await this.transport.send('GET', `/v1/roles/${encodeURIComponent(roleId)}`);\n return hydrateRole(raw);\n }\n\n async update(roleId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<Role> {\n const raw = await this.transport.send('PATCH', `/v1/roles/${encodeURIComponent(roleId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateRole(raw);\n }\n\n async delete(roleId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/roles/${encodeURIComponent(roleId)}`);\n }\n\n async setPermissions(roleId: string, permissionKeys: string[]): Promise<Role> {\n const raw = await this.transport.send('PUT', `/v1/roles/${encodeURIComponent(roleId)}/permissions`, {\n body: { permissions: permissionKeys },\n });\n return hydrateRole(raw);\n }\n}\n\nexport class PermissionsManager extends Manager {\n async list(params?: ListParams): Promise<PaginatedList<Permission>> {\n const raw = await this.transport.send('GET', '/v1/permissions', {\n query: (params ?? new ListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydratePermission);\n }\n}\n\nexport function hydrateRole(raw: unknown): Role {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const perms = Array.isArray(obj.permissions)\n ? obj.permissions.filter((p): p is string => typeof p === 'string')\n : [];\n return {\n id: String(obj.id ?? ''),\n object: 'role',\n key: String(obj.key ?? ''),\n name: String(obj.name ?? ''),\n description: (obj.description as string | null | undefined) ?? null,\n isCreatorEligible: Boolean(obj.is_creator_eligible),\n isDefault: Boolean(obj.is_default),\n permissions: perms,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n\nexport function hydratePermission(raw: unknown): Permission {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'permission',\n key: String(obj.key ?? ''),\n name: String(obj.name ?? ''),\n description: (obj.description as string | null | undefined) ?? null,\n isSystem: Boolean(obj.is_system),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\nexport interface Session {\n id: string;\n object: 'session';\n clientId: string;\n userId: string;\n status: string;\n lastActiveAt?: number | null;\n expireAt?: number | null;\n abandonAt?: number | null;\n lastActiveOrganizationId?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class SessionsListParams extends ListParams {\n constructor(\n public userId?: string,\n public clientId?: string,\n public status?: string[],\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.userId) q.user_id = this.userId;\n if (this.clientId) q.client_id = this.clientId;\n if (this.status?.length) q.status = this.status;\n return q;\n }\n}\n\nexport class SessionsManager extends Manager {\n async list(params?: SessionsListParams): Promise<PaginatedList<Session>> {\n const raw = await this.transport.send('GET', '/v1/sessions', {\n query: (params ?? new SessionsListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateSession);\n }\n\n async get(sessionId: string): Promise<Session> {\n const raw = await this.transport.send('GET', `/v1/sessions/${encodeURIComponent(sessionId)}`);\n return hydrateSession(raw);\n }\n\n async revoke(sessionId: string): Promise<Session> {\n const raw = await this.transport.send('POST', `/v1/sessions/${encodeURIComponent(sessionId)}/revoke`);\n return hydrateSession(raw);\n }\n\n async getToken(sessionId: string, template?: string): Promise<string> {\n const path = template\n ? `/v1/sessions/${encodeURIComponent(sessionId)}/tokens/${encodeURIComponent(template)}`\n : `/v1/sessions/${encodeURIComponent(sessionId)}/tokens`;\n const raw = (await this.transport.send('POST', path)) as { jwt?: string } | null;\n return raw?.jwt ?? '';\n }\n}\n\nexport function hydrateSession(raw: unknown): Session {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'session',\n clientId: String(obj.client_id ?? ''),\n userId: String(obj.user_id ?? ''),\n status: String(obj.status ?? ''),\n lastActiveAt: (obj.last_active_at as number | null | undefined) ?? null,\n expireAt: (obj.expire_at as number | null | undefined) ?? null,\n abandonAt: (obj.abandon_at as number | null | undefined) ?? null,\n lastActiveOrganizationId: (obj.last_active_organization_id as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { Manager } from './Manager.js';\n\nexport type SmsTemplateSlug = 'verification_code' | 'reset_password_code' | 'invitation';\n\nexport interface SmsTemplate {\n id: string;\n object: 'sms_template';\n slug: SmsTemplateSlug | string;\n body: string;\n deliveredByUs: boolean;\n fromNumberOverride?: string | null;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport class SmsTemplatesManager extends Manager {\n async list(): Promise<SmsTemplate[]> {\n const raw = await this.transport.send('GET', '/v1/sms-templates');\n if (!Array.isArray(raw)) return [];\n return (raw as unknown[]).map(hydrateSmsTemplate);\n }\n\n async get(slug: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('GET', `/v1/sms-templates/${encodeURIComponent(slug)}`);\n return hydrateSmsTemplate(raw);\n }\n\n async update(slug: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('PATCH', `/v1/sms-templates/${encodeURIComponent(slug)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateSmsTemplate(raw);\n }\n\n async revert(slug: string, idempotencyKey?: string): Promise<SmsTemplate> {\n const raw = await this.transport.send('POST', `/v1/sms-templates/${encodeURIComponent(slug)}/revert`, {\n idempotencyKey,\n });\n return hydrateSmsTemplate(raw);\n }\n}\n\nexport function hydrateSmsTemplate(raw: unknown): SmsTemplate {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n return {\n id: String(obj.id ?? ''),\n object: 'sms_template',\n slug: String(obj.slug ?? '') as SmsTemplateSlug | string,\n body: String(obj.body ?? ''),\n deliveredByUs: Boolean(obj.delivered_by_us ?? true),\n fromNumberOverride: (obj.from_number_override as string | null | undefined) ?? null,\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { idempotencyKeyFor } from '../util/Idempotency.js';\n\nimport { ListParams } from './ListParams.js';\nimport { Manager } from './Manager.js';\nimport type { PaginatedList} from './PaginatedList.js';\nimport { hydratePaginatedList } from './PaginatedList.js';\n\n\nexport interface User {\n id: string;\n object: 'user';\n externalId?: string | null;\n username?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n imageUrl?: string | null;\n primaryEmailAddressId?: string | null;\n primaryPhoneNumberId?: string | null;\n emailAddresses: Array<Record<string, unknown>>;\n phoneNumbers: Array<Record<string, unknown>>;\n externalAccounts: Array<Record<string, unknown>>;\n passwordEnabled: boolean;\n totpEnabled: boolean;\n backupCodesEnabled: boolean;\n twoFactorEnabled: boolean;\n banned: boolean;\n locked: boolean;\n lastSignInAt?: number | null;\n lastActiveAt?: number | null;\n publicMetadata: Record<string, unknown>;\n privateMetadata: Record<string, unknown>;\n unsafeMetadata: Record<string, unknown>;\n createdAt: number;\n updatedAt: number;\n raw: Record<string, unknown>;\n}\n\nexport interface TotpVerificationResult {\n verified: boolean;\n reason?: string | null;\n}\n\nexport class UsersListParams extends ListParams {\n constructor(\n public emailAddress?: string[],\n public phoneNumber?: string[],\n public username?: string[],\n public externalId?: string[],\n public query?: string,\n limit?: number,\n offset?: number,\n orderBy?: string,\n ) {\n super(limit, offset, orderBy);\n }\n\n override toQuery(): Record<string, unknown> {\n const q = super.toQuery();\n if (this.emailAddress?.length) q.email_address = this.emailAddress;\n if (this.phoneNumber?.length) q.phone_number = this.phoneNumber;\n if (this.username?.length) q.username = this.username;\n if (this.externalId?.length) q.external_id = this.externalId;\n if (this.query) q.query = this.query;\n return q;\n }\n}\n\nexport class UsersManager extends Manager {\n async list(params?: UsersListParams): Promise<PaginatedList<User>> {\n const raw = await this.transport.send('GET', '/v1/users', {\n query: (params ?? new UsersListParams()).toQuery(),\n });\n return hydratePaginatedList(raw, hydrateUser);\n }\n\n async count(params?: UsersListParams): Promise<number> {\n const raw = (await this.transport.send('GET', '/v1/users/count', {\n query: (params ?? new UsersListParams()).toQuery(),\n })) as { total_count?: number } | null;\n return raw?.total_count ?? 0;\n }\n\n async create(data: Record<string, unknown>, idempotencyKey?: string): Promise<User> {\n const raw = await this.transport.send('POST', '/v1/users', {\n body: data,\n idempotencyKey: idempotencyKey ?? idempotencyKeyFor(data),\n });\n return hydrateUser(raw);\n }\n\n async get(userId: string): Promise<User> {\n const raw = await this.transport.send('GET', `/v1/users/${encodeURIComponent(userId)}`);\n return hydrateUser(raw);\n }\n\n async update(userId: string, data: Record<string, unknown>, idempotencyKey?: string): Promise<User> {\n const raw = await this.transport.send('PATCH', `/v1/users/${encodeURIComponent(userId)}`, {\n body: data,\n idempotencyKey,\n });\n return hydrateUser(raw);\n }\n\n async delete(userId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}`);\n }\n\n async ban(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/ban`);\n return hydrateUser(raw);\n }\n\n async unban(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/unban`);\n return hydrateUser(raw);\n }\n\n async lock(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/lock`);\n return hydrateUser(raw);\n }\n\n async unlock(userId: string): Promise<User> {\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/unlock`);\n return hydrateUser(raw);\n }\n\n async updateMetadata(userId: string, patch: Record<string, unknown>): Promise<User> {\n const raw = await this.transport.send('PATCH', `/v1/users/${encodeURIComponent(userId)}/metadata`, {\n body: patch,\n });\n return hydrateUser(raw);\n }\n\n async verifyPassword(userId: string, password: string): Promise<boolean> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/users/${encodeURIComponent(userId)}/verify-password`,\n { body: { password } },\n )) as { verified?: boolean } | null;\n return raw?.verified === true;\n }\n\n async verifyTotp(userId: string, code: string): Promise<TotpVerificationResult> {\n const raw = (await this.transport.send(\n 'POST',\n `/v1/users/${encodeURIComponent(userId)}/verify-totp`,\n { body: { code } },\n )) as { verified?: boolean; reason?: string } | null;\n return { verified: raw?.verified === true, reason: raw?.reason ?? null };\n }\n\n async disableMfa(userId: string): Promise<User> {\n const raw = await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}/mfa`);\n return hydrateUser(raw);\n }\n\n async uploadProfileImage(userId: string, bytes: Uint8Array, mime: string): Promise<User> {\n const headers = { 'Content-Type': mime };\n const raw = await this.transport.send('POST', `/v1/users/${encodeURIComponent(userId)}/profile-image`, {\n body: bytes,\n headers,\n });\n return hydrateUser(raw);\n }\n\n async deleteProfileImage(userId: string): Promise<void> {\n await this.transport.send('DELETE', `/v1/users/${encodeURIComponent(userId)}/profile-image`);\n }\n}\n\nexport function hydrateUser(raw: unknown): User {\n const obj = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>;\n const arr = (key: string): Array<Record<string, unknown>> =>\n Array.isArray(obj[key]) ? (obj[key] as Array<Record<string, unknown>>) : [];\n const meta = (key: string): Record<string, unknown> =>\n obj[key] && typeof obj[key] === 'object' ? (obj[key] as Record<string, unknown>) : {};\n return {\n id: String(obj.id ?? ''),\n object: 'user',\n externalId: (obj.external_id as string | null | undefined) ?? null,\n username: (obj.username as string | null | undefined) ?? null,\n firstName: (obj.first_name as string | null | undefined) ?? null,\n lastName: (obj.last_name as string | null | undefined) ?? null,\n imageUrl: (obj.image_url as string | null | undefined) ?? null,\n primaryEmailAddressId: (obj.primary_email_address_id as string | null | undefined) ?? null,\n primaryPhoneNumberId: (obj.primary_phone_number_id as string | null | undefined) ?? null,\n emailAddresses: arr('email_addresses'),\n phoneNumbers: arr('phone_numbers'),\n externalAccounts: arr('external_accounts'),\n passwordEnabled: Boolean(obj.password_enabled),\n totpEnabled: Boolean(obj.totp_enabled),\n backupCodesEnabled: Boolean(obj.backup_codes_enabled),\n twoFactorEnabled: Boolean(obj.two_factor_enabled),\n banned: Boolean(obj.banned),\n locked: Boolean(obj.locked),\n lastSignInAt: (obj.last_sign_in_at as number | null | undefined) ?? null,\n lastActiveAt: (obj.last_active_at as number | null | undefined) ?? null,\n publicMetadata: meta('public_metadata'),\n privateMetadata: meta('private_metadata'),\n unsafeMetadata: meta('unsafe_metadata'),\n createdAt: typeof obj.created_at === 'number' ? obj.created_at : 0,\n updatedAt: typeof obj.updated_at === 'number' ? obj.updated_at : 0,\n raw: obj,\n };\n}\n","import { AuthnHttpError, type AuthnApiError } from '../errors/index.js';\n\nexport interface TransportOptions {\n /** API base URL — typically `https://api.authn.sh/v1`. Trailing `/v1` is required. */\n apiUrl: string;\n /** Workspace-scoped secret key (`sk_test_…` / `sk_live_…`). */\n secretKey: string;\n /** Override the global fetch (e.g. for testing / proxying). */\n fetch?: typeof fetch;\n /** Default request timeout in milliseconds. Default 10_000. */\n timeoutMs?: number;\n /** User-Agent suffix, appended after `@authn-sh/sdk-node@<version>`. */\n userAgentSuffix?: string;\n}\n\nexport interface RequestOptions {\n /** Query parameters appended to the URL. Falsy values dropped. */\n query?: Record<string, unknown>;\n /** Body to send as JSON. */\n body?: unknown;\n /** Idempotency-Key header. */\n idempotencyKey?: string;\n /** Per-request timeout override. */\n timeoutMs?: number;\n /** Extra headers. Don't override Authorization / Content-Type. */\n headers?: Record<string, string>;\n}\n\n/**\n * Tiny fetch-based BAPI client. Bearer-authenticates with the workspace\n * secret key, raises `AuthnHttpError` on non-2xx, returns parsed JSON\n * on 2xx (or `null` on 204).\n *\n * Designed to run anywhere `fetch` exists: Node 18+, Edge runtimes,\n * Cloudflare Workers, Vercel Edge, Bun, Deno.\n */\nexport class Transport {\n private readonly apiUrl: string;\n private readonly secretKey: string;\n private readonly fetcher: typeof fetch;\n private readonly defaultTimeoutMs: number;\n private readonly userAgent: string;\n\n constructor(opts: TransportOptions) {\n this.apiUrl = opts.apiUrl.replace(/\\/$/, '');\n this.secretKey = opts.secretKey;\n this.fetcher = opts.fetch ?? globalThis.fetch;\n this.defaultTimeoutMs = opts.timeoutMs ?? 10_000;\n const base = `@authn-sh/sdk-node`;\n this.userAgent = opts.userAgentSuffix ? `${base} ${opts.userAgentSuffix}` : base;\n }\n\n /**\n * Send a request and parse the response as JSON. For 204 returns `null`.\n * Throws AuthnHttpError on non-2xx.\n */\n async send<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const url = this.buildUrl(path, opts.query);\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.secretKey}`,\n Accept: 'application/json',\n 'User-Agent': this.userAgent,\n ...(opts.headers ?? {}),\n };\n let body: string | Uint8Array | undefined;\n if (opts.body !== undefined && opts.body !== null && method !== 'GET' && method !== 'DELETE') {\n if (opts.body instanceof Uint8Array) {\n body = opts.body;\n } else {\n headers['Content-Type'] = 'application/json';\n body = JSON.stringify(opts.body);\n }\n }\n if (opts.idempotencyKey) {\n headers['Idempotency-Key'] = opts.idempotencyKey;\n }\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), opts.timeoutMs ?? this.defaultTimeoutMs);\n let res: Response;\n try {\n const init: RequestInit = { method, headers, signal: controller.signal };\n if (body !== undefined) {\n init.body = body as BodyInit;\n }\n res = await this.fetcher(url, init);\n } finally {\n clearTimeout(timeoutId);\n }\n\n const requestId = res.headers.get('x-request-id');\n\n if (res.status === 204) {\n return null as unknown as T;\n }\n\n const text = await res.text();\n let parsed: unknown = null;\n if (text.length > 0) {\n try {\n parsed = JSON.parse(text);\n } catch {\n // fall through; AuthnHttpError below will surface the raw body.\n }\n }\n\n if (!res.ok) {\n const errors = this.extractApiErrors(parsed);\n throw new AuthnHttpError(res.status, errors, requestId);\n }\n\n return parsed as T;\n }\n\n private buildUrl(path: string, query?: Record<string, unknown>): string {\n const base = `${this.apiUrl}${path.startsWith('/') ? path : '/' + path}`;\n if (!query) return base;\n const params = new URLSearchParams();\n for (const [k, v] of Object.entries(query)) {\n if (v === undefined || v === null || v === '') continue;\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item !== undefined && item !== null) params.append(k, String(item));\n }\n } else {\n params.append(k, String(v));\n }\n }\n const qs = params.toString();\n return qs ? `${base}?${qs}` : base;\n }\n\n private extractApiErrors(payload: unknown): AuthnApiError[] {\n if (\n payload &&\n typeof payload === 'object' &&\n 'errors' in payload &&\n Array.isArray((payload as { errors: unknown }).errors)\n ) {\n const out: AuthnApiError[] = [];\n for (const entry of (payload as { errors: unknown[] }).errors) {\n if (entry && typeof entry === 'object') {\n const e = entry as Record<string, unknown>;\n const err: AuthnApiError = {\n code: typeof e.code === 'string' ? e.code : 'unknown',\n message: typeof e.message === 'string' ? e.message : 'Unknown error',\n };\n if (typeof e.long_message === 'string') err.longMessage = e.long_message;\n if (e.meta && typeof e.meta === 'object') err.meta = e.meta as Record<string, unknown>;\n out.push(err);\n }\n }\n if (out.length > 0) return out;\n }\n return [{ code: 'unknown', message: 'Unknown error from authn.sh API' }];\n }\n}\n","import { AuthnConfigError } from './errors/index.js';\nimport { AppearanceManager } from './resources/Appearance.js';\nimport { ExternalAccountsManager } from './resources/ExternalAccounts.js';\nimport { InstanceManager } from './resources/Instance.js';\nimport { InvitationsManager } from './resources/Invitations.js';\nimport {\n AllowlistIdentifiersManager,\n BlocklistIdentifiersManager,\n} from './resources/Lists.js';\nimport { LocalizationManager } from './resources/Localization.js';\nimport { OauthProvidersManager } from './resources/OauthProviders.js';\nimport { OrganizationsManager } from './resources/Organizations.js';\nimport { PasskeysManager } from './resources/Passkeys.js';\nimport { PhoneNumbersManager } from './resources/PhoneNumbers.js';\nimport { RedirectUrlsManager } from './resources/RedirectUrls.js';\nimport { RolesManager, PermissionsManager } from './resources/Roles.js';\nimport { SessionsManager } from './resources/Sessions.js';\nimport { SmsTemplatesManager } from './resources/SmsTemplates.js';\nimport { UsersManager } from './resources/Users.js';\nimport { Transport, type TransportOptions } from './transport/Transport.js';\n\nexport interface AuthnOptions {\n /** Workspace-scoped secret key — `sk_test_…` / `sk_live_…`. */\n secretKey: string;\n /** BAPI base URL (host only, no `/v1` — manager paths include it). Default `https://api.authn.sh`. */\n apiUrl?: string;\n /** Override the global fetch (testing / proxying). */\n fetch?: typeof fetch;\n /** Request timeout in milliseconds. Default 10_000. */\n timeoutMs?: number;\n /** User-Agent suffix, appended after `@authn-sh/sdk-node`. */\n userAgentSuffix?: string;\n}\n\n/**\n * BAPI client for authn.sh. Single entry point — instantiate once,\n * reuse across requests.\n *\n * @example\n * const authn = new Authn({ secretKey: process.env.AUTHN_SECRET_KEY! });\n * const user = await authn.users.get('user_01HXYZ...');\n * const session = await authn.sessions.get(req.cookies.authnSessionId);\n */\nexport class Authn {\n /** Underlying HTTP transport — exposed for advanced use cases. */\n public readonly transport: Transport;\n\n public readonly users: UsersManager;\n public readonly sessions: SessionsManager;\n public readonly organizations: OrganizationsManager;\n public readonly oauthProviders: OauthProvidersManager;\n public readonly phoneNumbers: PhoneNumbersManager;\n public readonly externalAccounts: ExternalAccountsManager;\n public readonly smsTemplates: SmsTemplatesManager;\n public readonly invitations: InvitationsManager;\n public readonly allowlistIdentifiers: AllowlistIdentifiersManager;\n public readonly blocklistIdentifiers: BlocklistIdentifiersManager;\n public readonly redirectUrls: RedirectUrlsManager;\n public readonly roles: RolesManager;\n public readonly permissions: PermissionsManager;\n public readonly instance: InstanceManager;\n public readonly passkeys: PasskeysManager;\n public readonly appearance: AppearanceManager;\n public readonly localization: LocalizationManager;\n\n constructor(opts: AuthnOptions) {\n if (!opts.secretKey || typeof opts.secretKey !== 'string') {\n throw new AuthnConfigError('Authn: secretKey is required.');\n }\n if (!opts.secretKey.startsWith('sk_test_') && !opts.secretKey.startsWith('sk_live_')) {\n throw new AuthnConfigError('Authn: secretKey must start with sk_test_ or sk_live_.');\n }\n const transportOpts: TransportOptions = {\n apiUrl: opts.apiUrl ?? 'https://api.authn.sh',\n secretKey: opts.secretKey,\n };\n if (opts.fetch !== undefined) transportOpts.fetch = opts.fetch;\n if (opts.timeoutMs !== undefined) transportOpts.timeoutMs = opts.timeoutMs;\n if (opts.userAgentSuffix !== undefined) transportOpts.userAgentSuffix = opts.userAgentSuffix;\n this.transport = new Transport(transportOpts);\n this.users = new UsersManager(this.transport);\n this.sessions = new SessionsManager(this.transport);\n this.organizations = new OrganizationsManager(this.transport);\n this.oauthProviders = new OauthProvidersManager(this.transport);\n this.phoneNumbers = new PhoneNumbersManager(this.transport);\n this.externalAccounts = new ExternalAccountsManager(this.transport);\n this.smsTemplates = new SmsTemplatesManager(this.transport);\n this.invitations = new InvitationsManager(this.transport);\n this.allowlistIdentifiers = new AllowlistIdentifiersManager(this.transport);\n this.blocklistIdentifiers = new BlocklistIdentifiersManager(this.transport);\n this.redirectUrls = new RedirectUrlsManager(this.transport);\n this.roles = new RolesManager(this.transport);\n this.permissions = new PermissionsManager(this.transport);\n this.instance = new InstanceManager(this.transport);\n this.passkeys = new PasskeysManager(this.transport);\n this.appearance = new AppearanceManager(this.transport);\n this.localization = new LocalizationManager(this.transport);\n }\n}\n","export interface VerifiedOrganization {\n id: string;\n slug?: string;\n role?: string;\n permissions: string[];\n}\n\nexport interface VerifiedActor {\n iss: string;\n sub: string;\n sid: string;\n}\n\n/**\n * Strongly-typed view of a verified session-JWT's claims.\n *\n * Use the helper methods (`hasRole`, `hasPermission`,\n * `hasVerifiedPhoneNumber`, `preferredSecondFactor`) rather than poking\n * into `raw` directly — the helpers are the stable surface, raw fields\n * may change shape.\n */\nexport class VerifiedClaims {\n constructor(\n public readonly sub: string,\n public readonly sid: string,\n public readonly iss: string,\n public readonly azp: string | null,\n public readonly exp: number,\n public readonly iat: number,\n public readonly nbf: number | null,\n public readonly actor: VerifiedActor | null,\n public readonly organization: VerifiedOrganization | null,\n public readonly wasTest: boolean,\n public readonly twoFactorVerified: boolean,\n public readonly secondFactorAgeSeconds: number | null,\n public readonly firstFactorAgeSeconds: number | null,\n public readonly phoneNumberVerified: boolean,\n public readonly defaultSecondFactor: 'totp' | 'phone_code' | 'backup_code' | null,\n /**\n * `true` when the session was completed via a passkey first-factor\n * ceremony (AU-15 sets the `pkv` claim on the session JWT).\n */\n public readonly passkeyVerified: boolean,\n /**\n * Number of verified passkeys enrolled on the user at session\n * creation time (AU-15 sets the `pkc` claim).\n */\n public readonly passkeyCount: number,\n public readonly raw: Record<string, unknown>,\n ) {}\n\n hasRole(roleKey: string): boolean {\n return this.organization?.role === roleKey;\n }\n\n hasPermission(permissionKey: string): boolean {\n return this.organization?.permissions.includes(permissionKey) ?? false;\n }\n\n hasVerifiedPhoneNumber(): boolean {\n return this.phoneNumberVerified;\n }\n\n preferredSecondFactor(): VerifiedClaims['defaultSecondFactor'] {\n return this.defaultSecondFactor;\n }\n\n hasVerifiedPasskey(): boolean {\n return this.passkeyVerified;\n }\n}\n\n/**\n * Build a VerifiedClaims from a JWT claims-bag (post-signature-verify).\n */\nexport function buildVerifiedClaims(claims: Record<string, unknown>): VerifiedClaims {\n const num = (k: string): number => (typeof claims[k] === 'number' ? (claims[k] as number) : 0);\n const numOrNull = (k: string): number | null =>\n typeof claims[k] === 'number' ? (claims[k] as number) : null;\n const str = (k: string): string => (typeof claims[k] === 'string' ? (claims[k] as string) : '');\n const strOrNull = (k: string): string | null => (typeof claims[k] === 'string' ? (claims[k] as string) : null);\n\n const actorRaw = claims['actor'];\n const actor: VerifiedActor | null =\n actorRaw && typeof actorRaw === 'object'\n ? {\n iss: typeof (actorRaw as Record<string, unknown>).iss === 'string' ? ((actorRaw as Record<string, unknown>).iss as string) : '',\n sub: typeof (actorRaw as Record<string, unknown>).sub === 'string' ? ((actorRaw as Record<string, unknown>).sub as string) : '',\n sid: typeof (actorRaw as Record<string, unknown>).sid === 'string' ? ((actorRaw as Record<string, unknown>).sid as string) : '',\n }\n : null;\n\n const orgRaw = claims['org'];\n let organization: VerifiedOrganization | null = null;\n if (orgRaw && typeof orgRaw === 'object') {\n const o = orgRaw as Record<string, unknown>;\n const perms = Array.isArray(o.per) ? o.per.filter((p): p is string => typeof p === 'string') : [];\n organization = {\n id: typeof o.id === 'string' ? o.id : '',\n slug: typeof o.slg === 'string' ? o.slg : undefined,\n role: typeof o.rol === 'string' ? o.rol : undefined,\n permissions: perms,\n };\n }\n\n const dsfRaw = claims['dsf'];\n const dsf =\n dsfRaw === 'totp' || dsfRaw === 'phone_code' || dsfRaw === 'backup_code' ? dsfRaw : null;\n\n return new VerifiedClaims(\n str('sub'),\n str('sid'),\n str('iss'),\n strOrNull('azp'),\n num('exp'),\n num('iat'),\n numOrNull('nbf'),\n actor,\n organization,\n claims['wt'] === true,\n claims['tfv'] === true,\n numOrNull('sfa'),\n numOrNull('ffa'),\n claims['pnv'] === true,\n dsf,\n claims['pkv'] === true,\n num('pkc'),\n claims,\n );\n}\n","import { createRemoteJWKSet, jwtVerify, decodeProtectedHeader } from 'jose';\n\nimport { AuthnConfigError, AuthnTokenInvalidError } from '../errors/index.js';\n\nimport type { VerifiedClaims} from './VerifiedClaims.js';\nimport { buildVerifiedClaims } from './VerifiedClaims.js';\n\nexport interface TokenVerifierOptions {\n /**\n * Workspace publishable key (`pk_test_…` / `pk_live_…`). The verifier\n * decodes the FAPI host from the key, e.g. `pk_test_<env_slug>` →\n * `https://<env_slug>.authn.sh`.\n */\n publishableKey?: string;\n /**\n * Explicit FAPI base URL (`https://<env_slug>.authn.sh`). Use this\n * when self-hosting on a custom domain — overrides `publishableKey`\n * decoding.\n */\n frontendApiUrl?: string;\n /** JWKS cache TTL in seconds. Default 600. */\n jwksCacheTtlSeconds?: number;\n /** Allowed clock skew on exp/nbf validation in seconds. Default 5. */\n allowedClockSkewSeconds?: number;\n /** Override the global fetch (testing). */\n fetch?: typeof fetch;\n}\n\nconst SUPPORTED_ALGS = ['RS256', 'ES256', 'ES384', 'ES512'] as const;\n\n/**\n * Verifies session JWTs minted by an authn.sh Frontend API.\n *\n * Resolves the FAPI's JWKS URL from `publishableKey` or `frontendApiUrl`,\n * caches it in memory, and validates the signature + expiry + issuer.\n *\n * @example\n * const verifier = new TokenVerifier({ publishableKey: process.env.AUTHN_PUBLISHABLE_KEY! });\n * const claims = await verifier.verify(req.cookies.__session);\n * console.log(claims.sub); // user_…\n * console.log(claims.hasPermission('org:billing:read'));\n * console.log(claims.preferredSecondFactor()); // 'totp' | 'phone_code' | 'backup_code' | null\n */\nexport class TokenVerifier {\n private readonly frontendApiUrl: string;\n private readonly jwks: ReturnType<typeof createRemoteJWKSet>;\n private readonly allowedClockSkew: number;\n\n constructor(opts: TokenVerifierOptions = {}) {\n if (!opts.publishableKey && !opts.frontendApiUrl) {\n throw new AuthnConfigError('TokenVerifier: either publishableKey or frontendApiUrl is required.');\n }\n this.frontendApiUrl = opts.frontendApiUrl\n ? opts.frontendApiUrl.replace(/\\/$/, '')\n : decodeFrontendApiUrl(opts.publishableKey ?? '');\n\n const jwksUrl = new URL(`${this.frontendApiUrl}/v1/jwks`);\n this.jwks = createRemoteJWKSet(jwksUrl, {\n cacheMaxAge: (opts.jwksCacheTtlSeconds ?? 600) * 1000,\n cooldownDuration: 30_000,\n ...(opts.fetch ? { [Symbol.for('jose.fetch') as never]: opts.fetch } : {}),\n });\n this.allowedClockSkew = opts.allowedClockSkewSeconds ?? 5;\n }\n\n /**\n * Verify a JWT and return its claims. Throws AuthnTokenInvalidError on failure.\n *\n * @param expectedAzp If provided, the token's `azp` must match one of these.\n */\n async verify(jwt: string, expectedAzp: string[] = []): Promise<VerifiedClaims> {\n if (typeof jwt !== 'string' || jwt === '') {\n throw new AuthnTokenInvalidError('malformed', 'Token is empty.');\n }\n\n let header: ReturnType<typeof decodeProtectedHeader>;\n try {\n header = decodeProtectedHeader(jwt);\n } catch (e) {\n throw new AuthnTokenInvalidError('malformed', (e as Error).message);\n }\n if (!header.alg || !SUPPORTED_ALGS.includes(header.alg as typeof SUPPORTED_ALGS[number])) {\n throw new AuthnTokenInvalidError('signature_invalid', `Unsupported alg: ${String(header.alg)}`);\n }\n\n let claims: Record<string, unknown>;\n try {\n const result = await jwtVerify(jwt, this.jwks, {\n issuer: this.frontendApiUrl,\n clockTolerance: this.allowedClockSkew,\n algorithms: [...SUPPORTED_ALGS],\n });\n claims = result.payload as Record<string, unknown>;\n } catch (e) {\n const err = e as { code?: string; message: string };\n const reason = mapJoseError(err.code);\n throw new AuthnTokenInvalidError(reason, err.message);\n }\n\n if (expectedAzp.length > 0) {\n const azp = typeof claims.azp === 'string' ? claims.azp : null;\n if (azp === null || !expectedAzp.includes(azp)) {\n throw new AuthnTokenInvalidError(\n 'audience_mismatch',\n `azp claim \"${String(azp)}\" did not match the expected origins.`,\n );\n }\n }\n\n return buildVerifiedClaims(claims);\n }\n\n /**\n * Same as `verify` but returns `null` on failure instead of throwing.\n * Useful for \"best-effort\" auth that falls back to unauthenticated.\n */\n async tryVerify(jwt: string, expectedAzp: string[] = []): Promise<VerifiedClaims | null> {\n try {\n return await this.verify(jwt, expectedAzp);\n } catch {\n return null;\n }\n }\n}\n\nfunction mapJoseError(code: string | undefined): AuthnTokenInvalidError['reason'] {\n switch (code) {\n case 'ERR_JWT_EXPIRED':\n return 'expired';\n case 'ERR_JWT_CLAIM_VALIDATION_FAILED':\n return 'issuer_mismatch';\n case 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED':\n case 'ERR_JWS_INVALID':\n return 'signature_invalid';\n case 'ERR_JWKS_NO_MATCHING_KEY':\n return 'key_not_found';\n case 'ERR_JWKS_TIMEOUT':\n return 'jwks_fetch_failed';\n default:\n return 'signature_invalid';\n }\n}\n\n/**\n * Decode the FAPI URL embedded in a publishable key.\n *\n * Publishable keys look like `pk_(test|live)_<base64url-encoded-host>$`.\n * The host segment is `<env_slug>.authn.sh` (no scheme). We always\n * emit `https://`.\n */\nexport function decodeFrontendApiUrl(publishableKey: string): string {\n if (!publishableKey.startsWith('pk_test_') && !publishableKey.startsWith('pk_live_')) {\n throw new AuthnConfigError(\n `TokenVerifier: publishableKey must start with pk_test_ or pk_live_, got \"${publishableKey.slice(0, 8)}…\".`,\n );\n }\n const payload = publishableKey.replace(/^pk_(test|live)_/, '').replace(/\\$$/, '');\n let host: string;\n try {\n host = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));\n } catch {\n throw new AuthnConfigError(`TokenVerifier: publishableKey \"${publishableKey.slice(0, 16)}…\" is not base64url.`);\n }\n if (host === '') {\n throw new AuthnConfigError('TokenVerifier: publishableKey decoded to an empty host.');\n }\n return `https://${host.replace(/\\/$/, '')}`;\n}\n","import { createHmac, timingSafeEqual } from 'node:crypto';\n\nimport { AuthnWebhookSignatureInvalidError } from '../errors/index.js';\n\nimport type { WebhookEvent } from './WebhookEvent.js';\n\nexport interface WebhookSignatureVerifierOptions {\n /**\n * `whsec_…` signing secret. Pass an array to tolerate key rotation —\n * a request is accepted if any provided signature matches any secret.\n */\n signingSecret: string | string[];\n /** Acceptable clock skew window in seconds. Default 300 (5 min). */\n toleranceSeconds?: number;\n /** Override the clock (testing). Returns unix seconds. */\n now?: () => number;\n}\n\n/**\n * Verifies authn.sh webhook signatures (svix-compatible scheme).\n *\n * The transport signs `{svix-id}.{svix-timestamp}.{rawBody}` with\n * HMAC-SHA256 keyed by `whsec_…`. Multiple secrets can be supplied to\n * tolerate rotation — a request is accepted if any provided signature\n * matches any configured secret.\n *\n * @example\n * app.post('/webhooks', express.raw({ type: 'application/json' }), (req, res) => {\n * const verifier = new WebhookSignatureVerifier({ signingSecret: process.env.AUTHN_WEBHOOK_SECRET! });\n * try {\n * const event = verifier.verify(req.body.toString('utf8'), req.headers);\n * // event.type === 'user.created' | 'phoneNumber.verified' | ...\n * } catch (e) {\n * return res.status(400).end();\n * }\n * res.status(204).end();\n * });\n */\nexport class WebhookSignatureVerifier {\n private readonly secrets: string[];\n private readonly tolerance: number;\n private readonly now: () => number;\n\n constructor(opts: WebhookSignatureVerifierOptions) {\n const list = Array.isArray(opts.signingSecret) ? opts.signingSecret : [opts.signingSecret];\n this.secrets = list.filter((s) => typeof s === 'string' && s !== '');\n if (this.secrets.length === 0) {\n throw new Error('WebhookSignatureVerifier: at least one signing secret must be provided.');\n }\n this.tolerance = opts.toleranceSeconds ?? 300;\n this.now = opts.now ?? (() => Math.floor(Date.now() / 1000));\n }\n\n verify(rawBody: string, headers: Record<string, string | string[] | undefined>): WebhookEvent {\n const id = headerLine(headers, 'svix-id');\n const timestamp = headerLine(headers, 'svix-timestamp');\n const signature = headerLine(headers, 'svix-signature');\n\n if (!id || !timestamp || !signature) {\n throw new AuthnWebhookSignatureInvalidError('missing_signature_header');\n }\n if (!/^\\d+$/.test(timestamp)) {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'svix-timestamp must be a unix-second integer.');\n }\n\n const tsInt = parseInt(timestamp, 10);\n if (Math.abs(this.now() - tsInt) > this.tolerance) {\n throw new AuthnWebhookSignatureInvalidError('timestamp_too_old');\n }\n\n const signedPayload = `${id}.${timestamp}.${rawBody}`;\n const providedSignatures = extractV1Signatures(signature);\n if (providedSignatures.length === 0) {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'No v1 signatures found in svix-signature.');\n }\n\n if (!this.matchesAny(signedPayload, providedSignatures)) {\n throw new AuthnWebhookSignatureInvalidError('no_matching_signature');\n }\n\n let payload: Record<string, unknown>;\n try {\n const parsed = JSON.parse(rawBody);\n payload = parsed && typeof parsed === 'object' ? (parsed as Record<string, unknown>) : {};\n } catch {\n throw new AuthnWebhookSignatureInvalidError('malformed_signature_header', 'Webhook body is not JSON.');\n }\n\n return {\n type: typeof payload.type === 'string' ? payload.type : '',\n data: payload.data && typeof payload.data === 'object' ? (payload.data as Record<string, unknown>) : {},\n timestamp: tsInt,\n instanceId: typeof payload.instance_id === 'string' ? payload.instance_id : '',\n wasTest: payload.was_test === true,\n messageId: id,\n };\n }\n\n tryVerify(rawBody: string, headers: Record<string, string | string[] | undefined>): WebhookEvent | null {\n try {\n return this.verify(rawBody, headers);\n } catch {\n return null;\n }\n }\n\n private matchesAny(signedPayload: string, providedSignatures: string[]): boolean {\n for (const secret of this.secrets) {\n const key = stripWhsecPrefix(secret);\n const expected = createHmac('sha256', Buffer.from(key, 'base64')).update(signedPayload).digest();\n for (const sig of providedSignatures) {\n let provided: Buffer;\n try {\n provided = Buffer.from(sig, 'base64');\n } catch {\n continue;\n }\n if (provided.length === expected.length && timingSafeEqual(provided, expected)) {\n return true;\n }\n }\n }\n return false;\n }\n}\n\nfunction headerLine(headers: Record<string, string | string[] | undefined>, name: string): string | null {\n const lookup = name.toLowerCase();\n for (const [k, v] of Object.entries(headers)) {\n if (k.toLowerCase() === lookup) {\n if (Array.isArray(v)) return v[0] ?? null;\n if (typeof v === 'string') return v;\n }\n }\n return null;\n}\n\nfunction extractV1Signatures(header: string): string[] {\n const parts = header.split(/\\s+/);\n const out: string[] = [];\n for (const part of parts) {\n const eqIndex = part.indexOf(',');\n if (eqIndex === -1) continue;\n const scheme = part.slice(0, eqIndex);\n const value = part.slice(eqIndex + 1);\n if (scheme === 'v1') out.push(value);\n }\n return out;\n}\n\nfunction stripWhsecPrefix(secret: string): string {\n return secret.startsWith('whsec_') ? secret.slice(6) : secret;\n}\n"]}