@absolutejs/auth 0.75.3 → 0.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,7 +19,7 @@
19
19
  "import type {\n\tLinkedProviderBinding,\n\tLinkedProviderBindingStore,\n\tLinkedProviderGrant,\n\tLinkedProviderGrantStore,\n\tJsonObject\n} from '@absolutejs/linked-providers';\nimport { neon } from '@neondatabase/serverless';\nimport { desc, eq, sql as drizzleSql } from 'drizzle-orm';\nimport { drizzle } from 'drizzle-orm/neon-http';\nimport { jsonb, pgTable, text, timestamp, varchar } from 'drizzle-orm/pg-core';\nimport type { AnyPgDatabase } from '../stores/postgres';\nimport type { OAuth2ConfigurationOptions } from '../types';\nimport { createOAuthLinkedProviderCredentialResolver } from './oauthResolver';\n\nexport const linkedProviderBindingsTable = pgTable('linked_provider_bindings', {\n\tavailable_scopes: jsonb('available_scopes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcapabilities: jsonb('capabilities').$type<string[]>().default([]),\n\tconnector_provider: varchar('connector_provider', { length: 64 }).notNull(),\n\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\temail: varchar('email', { length: 320 }),\n\texternal_account_id: varchar('external_account_id', {\n\t\tlength: 255\n\t}).notNull(),\n\texternal_account_type: varchar('external_account_type', {\n\t\tlength: 64\n\t}).notNull(),\n\tgrant_id: varchar('grant_id', { length: 255 }).notNull(),\n\tid: varchar('id', { length: 255 }).primaryKey(),\n\tlabel: varchar('label', { length: 255 }),\n\tmetadata: jsonb('metadata').$type<JsonObject>().default({}),\n\tstatus: varchar('status', { length: 64 })\n\t\t.$type<LinkedProviderBinding['status']>()\n\t\t.notNull(),\n\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\tusername: varchar('username', { length: 255 })\n});\nexport const linkedProviderGrantsTable = pgTable('linked_provider_grants', {\n\taccess_token_ciphertext: text('access_token_ciphertext'),\n\tauth_provider_key: varchar('auth_provider_key', { length: 64 }).notNull(),\n\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\texpires_at: timestamp('expires_at'),\n\tgranted_scopes: jsonb('granted_scopes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tid: varchar('id', { length: 255 }).primaryKey(),\n\tlast_refresh_error: text('last_refresh_error'),\n\tlast_refreshed_at: timestamp('last_refreshed_at'),\n\tmetadata: jsonb('metadata').$type<JsonObject>().default({}),\n\towner_ref: varchar('owner_ref', { length: 255 }).notNull(),\n\tprovider_family: varchar('provider_family', { length: 64 }).notNull(),\n\tprovider_subject: varchar('provider_subject', { length: 255 }).notNull(),\n\trefresh_token_ciphertext: text('refresh_token_ciphertext'),\n\tstatus: varchar('status', { length: 64 })\n\t\t.$type<LinkedProviderGrant['status']>()\n\t\t.notNull(),\n\ttoken_type: varchar('token_type', { length: 64 }),\n\tupdated_at: timestamp('updated_at').notNull().defaultNow()\n});\nexport type LinkedProviderGrantRow =\n\ttypeof linkedProviderGrantsTable.$inferSelect;\nexport type LinkedProviderBindingRow =\n\ttypeof linkedProviderBindingsTable.$inferSelect;\n\nconst toTimestamp = (value: number | undefined) =>\n\tvalue === undefined ? null : new Date(value);\n\nconst fromTimestamp = (value: Date | null) =>\n\tvalue === null ? undefined : value.getTime();\n\nconst toGrant = (row: LinkedProviderGrantRow): LinkedProviderGrant => ({\n\taccessTokenCiphertext: row.access_token_ciphertext ?? undefined,\n\tauthProviderKey: row.auth_provider_key,\n\tcreatedAt: row.created_at.getTime(),\n\texpiresAt: fromTimestamp(row.expires_at),\n\tgrantedScopes: row.granted_scopes ?? [],\n\tid: row.id,\n\tlastRefreshedAt: fromTimestamp(row.last_refreshed_at),\n\tlastRefreshError: row.last_refresh_error ?? undefined,\n\tmetadata: row.metadata ?? undefined,\n\townerRef: row.owner_ref,\n\tproviderFamily: row.provider_family,\n\tproviderSubject: row.provider_subject,\n\trefreshTokenCiphertext: row.refresh_token_ciphertext ?? undefined,\n\tstatus: row.status,\n\ttokenType: row.token_type ?? undefined,\n\tupdatedAt: row.updated_at.getTime()\n});\n\nconst toBinding = (row: LinkedProviderBindingRow): LinkedProviderBinding => ({\n\tavailableScopes: row.available_scopes ?? [],\n\tcapabilities: row.capabilities ?? undefined,\n\tconnectorProvider: row.connector_provider,\n\tcreatedAt: row.created_at.getTime(),\n\temail: row.email ?? undefined,\n\texternalAccountId: row.external_account_id,\n\texternalAccountType: row.external_account_type,\n\tgrantId: row.grant_id,\n\tid: row.id,\n\tlabel: row.label ?? undefined,\n\tmetadata: row.metadata ?? undefined,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at.getTime(),\n\tusername: row.username ?? undefined\n});\n\nexport const createNeonLinkedProviderBindingStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): LinkedProviderBindingStore => ({\n\tgetBinding: async (id) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(linkedProviderBindingsTable)\n\t\t\t.where(eq(linkedProviderBindingsTable.id, id))\n\t\t\t.limit(1);\n\n\t\treturn row ? toBinding(row) : undefined;\n\t},\n\tlistBindingsByGrant: async (grantId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(linkedProviderBindingsTable)\n\t\t\t.where(eq(linkedProviderBindingsTable.grant_id, grantId))\n\t\t\t.orderBy(desc(linkedProviderBindingsTable.updated_at));\n\n\t\treturn rows.map(toBinding);\n\t},\n\tlistBindingsByOwner: async (ownerRef) => {\n\t\tconst rows = await db\n\t\t\t.select({ binding: linkedProviderBindingsTable })\n\t\t\t.from(linkedProviderBindingsTable)\n\t\t\t.innerJoin(\n\t\t\t\tlinkedProviderGrantsTable,\n\t\t\t\teq(\n\t\t\t\t\tlinkedProviderBindingsTable.grant_id,\n\t\t\t\t\tlinkedProviderGrantsTable.id\n\t\t\t\t)\n\t\t\t)\n\t\t\t.where(eq(linkedProviderGrantsTable.owner_ref, ownerRef))\n\t\t\t.orderBy(desc(linkedProviderBindingsTable.updated_at));\n\n\t\treturn rows.map(({ binding }) => toBinding(binding));\n\t},\n\tremoveBinding: async (id) => {\n\t\tawait db\n\t\t\t.delete(linkedProviderBindingsTable)\n\t\t\t.where(eq(linkedProviderBindingsTable.id, id));\n\t},\n\tsaveBinding: async (binding) => {\n\t\tawait db\n\t\t\t.insert(linkedProviderBindingsTable)\n\t\t\t.values({\n\t\t\t\tavailable_scopes: binding.availableScopes,\n\t\t\t\tcapabilities: binding.capabilities ?? [],\n\t\t\t\tconnector_provider: binding.connectorProvider,\n\t\t\t\tcreated_at: new Date(binding.createdAt),\n\t\t\t\temail: binding.email ?? null,\n\t\t\t\texternal_account_id: binding.externalAccountId,\n\t\t\t\texternal_account_type: binding.externalAccountType,\n\t\t\t\tgrant_id: binding.grantId,\n\t\t\t\tid: binding.id,\n\t\t\t\tlabel: binding.label ?? null,\n\t\t\t\tmetadata: binding.metadata ?? {},\n\t\t\t\tstatus: binding.status,\n\t\t\t\tupdated_at: new Date(binding.updatedAt),\n\t\t\t\tusername: binding.username ?? null\n\t\t\t})\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: {\n\t\t\t\t\tavailable_scopes: binding.availableScopes,\n\t\t\t\t\tcapabilities: binding.capabilities ?? [],\n\t\t\t\t\tconnector_provider: binding.connectorProvider,\n\t\t\t\t\temail: binding.email ?? null,\n\t\t\t\t\texternal_account_id: binding.externalAccountId,\n\t\t\t\t\texternal_account_type: binding.externalAccountType,\n\t\t\t\t\tgrant_id: binding.grantId,\n\t\t\t\t\tlabel: binding.label ?? null,\n\t\t\t\t\tmetadata: binding.metadata ?? {},\n\t\t\t\t\tstatus: binding.status,\n\t\t\t\t\tupdated_at: new Date(binding.updatedAt),\n\t\t\t\t\tusername: binding.username ?? null\n\t\t\t\t},\n\t\t\t\ttarget: linkedProviderBindingsTable.id\n\t\t\t});\n\t}\n});\nexport const createNeonLinkedProviderGrantStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): LinkedProviderGrantStore => ({\n\tgetGrant: async (id) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(linkedProviderGrantsTable)\n\t\t\t.where(eq(linkedProviderGrantsTable.id, id))\n\t\t\t.limit(1);\n\n\t\treturn row ? toGrant(row) : undefined;\n\t},\n\tlistGrantsByOwner: async (ownerRef) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(linkedProviderGrantsTable)\n\t\t\t.where(eq(linkedProviderGrantsTable.owner_ref, ownerRef))\n\t\t\t.orderBy(desc(linkedProviderGrantsTable.updated_at));\n\n\t\treturn rows.map(toGrant);\n\t},\n\tremoveGrant: async (id) => {\n\t\tawait db\n\t\t\t.delete(linkedProviderBindingsTable)\n\t\t\t.where(eq(linkedProviderBindingsTable.grant_id, id));\n\t\tawait db\n\t\t\t.delete(linkedProviderGrantsTable)\n\t\t\t.where(eq(linkedProviderGrantsTable.id, id));\n\t},\n\tsaveGrant: async (grant) => {\n\t\tawait db\n\t\t\t.insert(linkedProviderGrantsTable)\n\t\t\t.values({\n\t\t\t\taccess_token_ciphertext: grant.accessTokenCiphertext ?? null,\n\t\t\t\tauth_provider_key: grant.authProviderKey,\n\t\t\t\tcreated_at: new Date(grant.createdAt),\n\t\t\t\texpires_at: toTimestamp(grant.expiresAt),\n\t\t\t\tgranted_scopes: grant.grantedScopes,\n\t\t\t\tid: grant.id,\n\t\t\t\tlast_refresh_error: grant.lastRefreshError ?? null,\n\t\t\t\tlast_refreshed_at: toTimestamp(grant.lastRefreshedAt),\n\t\t\t\tmetadata: grant.metadata ?? {},\n\t\t\t\towner_ref: grant.ownerRef,\n\t\t\t\tprovider_family: grant.providerFamily,\n\t\t\t\tprovider_subject: grant.providerSubject,\n\t\t\t\trefresh_token_ciphertext: grant.refreshTokenCiphertext ?? null,\n\t\t\t\tstatus: grant.status,\n\t\t\t\ttoken_type: grant.tokenType ?? null,\n\t\t\t\tupdated_at: new Date(grant.updatedAt)\n\t\t\t})\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: {\n\t\t\t\t\taccess_token_ciphertext:\n\t\t\t\t\t\tgrant.accessTokenCiphertext ?? null,\n\t\t\t\t\tauth_provider_key: grant.authProviderKey,\n\t\t\t\t\texpires_at: toTimestamp(grant.expiresAt),\n\t\t\t\t\tgranted_scopes: grant.grantedScopes,\n\t\t\t\t\tlast_refresh_error: grant.lastRefreshError ?? null,\n\t\t\t\t\tlast_refreshed_at: toTimestamp(grant.lastRefreshedAt),\n\t\t\t\t\tmetadata: grant.metadata ?? {},\n\t\t\t\t\towner_ref: grant.ownerRef,\n\t\t\t\t\tprovider_family: grant.providerFamily,\n\t\t\t\t\tprovider_subject: grant.providerSubject,\n\t\t\t\t\trefresh_token_ciphertext: drizzleSql`coalesce(excluded.refresh_token_ciphertext, ${linkedProviderGrantsTable.refresh_token_ciphertext})`,\n\t\t\t\t\tstatus: grant.status,\n\t\t\t\t\ttoken_type: grant.tokenType ?? null,\n\t\t\t\t\tupdated_at: new Date(grant.updatedAt)\n\t\t\t\t},\n\t\t\t\ttarget: linkedProviderGrantsTable.id\n\t\t\t});\n\t}\n});\nexport const createNeonLinkedProviderStores = (databaseUrl: string) => {\n\tconst sql = neon(databaseUrl);\n\tconst db = drizzle({ client: sql });\n\n\treturn {\n\t\tbindingStore: createNeonLinkedProviderBindingStore(db),\n\t\tdb,\n\t\tgrantStore: createNeonLinkedProviderGrantStore(db)\n\t};\n};\n\nexport type CreateNeonOAuthLinkedProviderCredentialResolverOptions = {\n\tdatabaseUrl: string;\n\tprovidersConfiguration: OAuth2ConfigurationOptions;\n\tnow?: () => number;\n};\n\nexport const createNeonOAuthLinkedProviderCredentialResolver = async ({\n\tdatabaseUrl,\n\tnow,\n\tprovidersConfiguration\n}: CreateNeonOAuthLinkedProviderCredentialResolverOptions) => {\n\tconst stores = createNeonLinkedProviderStores(databaseUrl);\n\n\treturn createOAuthLinkedProviderCredentialResolver({\n\t\t...stores,\n\t\tnow,\n\t\tprovidersConfiguration\n\t});\n};\n",
20
20
  "// @bun\n// src/constants.ts\nvar BASE64_BLOCK_SIZE = 4;\nvar NUM_GENERATOR_BYTES = 32;\n\n// src/graphqlQueries.ts\nvar anilistProfileQuery = `query {\n Viewer {\n id\n name\n about\n avatar {\n large\n medium\n }\n bannerImage\n siteUrl\n createdAt\n updatedAt\n donatorTier\n donatorBadge\n unreadNotificationCount\n options {\n titleLanguage\n displayAdultContent\n airingNotifications\n profileColor\n activityMergeTime\n staffNameLanguage\n }\n mediaListOptions {\n scoreFormat\n rowOrder\n animeList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n mangaList {\n sectionOrder\n customLists\n advancedScoringEnabled\n }\n }\n statistics {\n anime {\n count\n meanScore\n minutesWatched\n episodesWatched\n }\n manga {\n count\n meanScore\n chaptersRead\n volumesRead\n }\n }\n favourites {\n anime {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n manga {\n nodes {\n id\n title {\n romaji\n english\n }\n siteUrl\n }\n }\n characters {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n staff {\n nodes {\n id\n name {\n full\n }\n image {\n large\n }\n }\n }\n studios {\n nodes {\n id\n name\n siteUrl\n }\n }\n }\n isFollower\n isFollowing\n }\n}`;\n\n// src/providers.ts\nvar defineProviders = (providers) => providers;\nvar providers = defineProviders({\n \"42\": {\n authorizationUrl: \"https://api.intra.42.fr/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.intra.42.fr/v2/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.intra.42.fr/oauth/token\"\n }\n },\n absolutejs: {\n authorizationUrl: (config) => `https://${config.baseURL ?? \"absolutejs.ai\"}/oauth2/authorize`,\n email: [\"email\"],\n fullName: [\"name\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.baseURL ?? \"absolutejs.ai\"}/oauth2/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.baseURL ?? \"absolutejs.ai\"}/oauth2/revoke`\n },\n scopeRequired: false,\n subject: [\"sub\"],\n subjectBySource: {\n idToken: [\"sub\"],\n profile: [\"sub\"]\n },\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.baseURL ?? \"absolutejs.ai\"}/oauth2/token`\n }\n },\n amazoncognito: {\n authorizationUrl: \"https://${domain}/oauth2/authorize\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/userInfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/revoke`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/token`\n }\n },\n anilist: {\n authorizationUrl: \"https://anilist.co/api/v2/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: anilistProfileQuery\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://graphql.anilist.co\"\n },\n scopeRequired: false,\n subject: [\"data\", \"Viewer\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://anilist.co/api/v2/oauth/token\"\n }\n },\n apple: {\n authorizationUrl: \"https://appleid.apple.com/auth/authorize\",\n createAuthorizationURLSearchParams: {\n response_mode: \"form_post\"\n },\n createClientSecret: (config) => createAppleClientSecret(config),\n isOIDC: true,\n isRefreshable: true,\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n tokenParamName: \"token\",\n url: \"https://appleid.apple.com/auth/revoke\"\n },\n scopeRequired: false,\n subject: [\"sub\"],\n subjectBySource: {\n idToken: [\"sub\"]\n },\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://appleid.apple.com/auth/token\"\n }\n },\n atlassian: {\n authorizationUrl: \"https://auth.atlassian.com/authorize\",\n createAuthorizationURLSearchParams: {\n audience: \"api.atlassian.com\"\n },\n email: [\"email\"],\n fullName: [\"name\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"picture\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.atlassian.com/me\"\n },\n scopeRequired: true,\n subject: [\"account_id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.atlassian.com/oauth/token\"\n }\n },\n attio: {\n authorizationUrl: \"https://app.attio.com/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.attio.com/v2/self\"\n },\n scopeRequired: true,\n subject: [\"workspace_id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://app.attio.com/oauth/token\"\n }\n },\n auth0: {\n authorizationUrl: (config) => `https://${config.domain}/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n inputSource: \"refreshToken\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth/revoke`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth/token`\n }\n },\n authentik: {\n authorizationUrl: (config) => `https://${config.baseURL}/oauth/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.baseURL}/api/v3/user/`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.baseURL}/oauth/token`\n }\n },\n autodesk: {\n authorizationUrl: \"https://developer.api.autodesk.com/authentication/v2/authorize\",\n email: [\"email\"],\n familyName: [\"family_name\"],\n fullName: [\"name\"],\n givenName: [\"given_name\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.userprofile.autodesk.com/userinfo\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://developer.api.autodesk.com/authentication/v2/token\"\n }\n },\n azureadb2c: {\n authorizationUrl: (config) => `https://${config.tenantSubdomain}.b2clogin.com/${config.tenantSubdomain}.onmicrosoft.com/${config.policy}/oauth2/v2.0/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n scopeRequired: false,\n subject: [\"sub\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.tenantSubdomain}.b2clogin.com/${config.tenantSubdomain}.onmicrosoft.com/${config.policy}/oauth2/v2.0/token`\n }\n },\n battlenet: {\n authorizationUrl: \"https://oauth.battle.net/authorize\",\n isOIDC: true,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.battle.net/userinfo\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.battle.net/token\"\n }\n },\n bitbucket: {\n authorizationUrl: \"https://bitbucket.org/site/oauth2/authorize\",\n fullName: [\"display_name\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"links\", \"avatar\", \"href\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.bitbucket.org/2.0/user\"\n },\n scopeRequired: false,\n subject: [\"uuid\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://bitbucket.org/site/oauth2/access_token\"\n }\n },\n box: {\n authorizationUrl: \"https://account.box.com/api/oauth2/authorize\",\n email: [\"login\"],\n fullName: [\"name\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"avatar_url\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.box.com/2.0/users/me\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.box.com/oauth2/revoke\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.box.com/oauth2/token\"\n }\n },\n bungie: {\n authorizationUrl: \"https://www.bungie.net/en/OAuth/Authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"X-API-Key\": \"<YOUR_API_KEY>\"\n },\n method: \"GET\",\n url: \"https://www.bungie.net/Platform/User/GetCurrentBungieNetUser\"\n },\n scopeRequired: false,\n subject: [\"Response\", \"membershipId\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.bungie.net/Platform/App/OAuth/token\"\n }\n },\n calendly: {\n authorizationUrl: \"https://auth.calendly.com/oauth/authorize\",\n email: [\"resource\", \"email\"],\n fullName: [\"resource\", \"name\"],\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.calendly.com/users/me\"\n },\n scopeRequired: false,\n subject: [\"resource\", \"uri\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.calendly.com/oauth/token\"\n }\n },\n close: {\n authorizationUrl: \"https://app.close.com/oauth2/authorize/\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.close.com/api/v1/me/\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.close.com/oauth2/token/\"\n }\n },\n coinbase: {\n authorizationUrl: \"https://www.coinbase.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.coinbase.com/v2/user\"\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.coinbase.com/oauth/token\"\n }\n },\n discord: {\n authorizationUrl: \"https://discord.com/api/oauth2/authorize\",\n email: [\"email\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"avatar\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://discord.com/api/users/@me\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://discord.com/api/oauth2/token\"\n }\n },\n donationalerts: {\n authorizationUrl: \"https://www.donationalerts.com/oauth/authorize\",\n email: [\"data\", \"email\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"data\", \"avatar\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.donationalerts.com/api/v1/user/oauth\"\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.donationalerts.com/oauth/token\"\n }\n },\n dribbble: {\n authorizationUrl: \"https://dribbble.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.dribbble.com/v2/user\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://dribbble.com/oauth/token\"\n }\n },\n dropbox: {\n authorizationUrl: \"https://www.dropbox.com/oauth2/authorize\",\n email: [\"email\"],\n familyName: [\"name\", \"surname\"],\n fullName: [\"name\", \"display_name\"],\n givenName: [\"name\", \"given_name\"],\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"POST\",\n url: \"https://api.dropboxapi.com/2/users/get_current_account\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.dropboxapi.com/2/auth/token/revoke\"\n },\n scopeRequired: false,\n subject: [\"account_id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.dropboxapi.com/oauth2/token\"\n }\n },\n epicgames: {\n authorizationUrl: \"https://www.epicgames.com/id/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.epicgames.dev/epic/oauth/v2/userInfo\"\n },\n scopeRequired: false,\n subject: [\"account_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.epicgames.dev/epic/oauth/v1/token\"\n }\n },\n etsy: {\n authorizationUrl: \"https://www.etsy.com/oauth/connect\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.etsy.com/v3/application/users/me\"\n },\n scopeRequired: false,\n subject: [\"results\", \"0\", \"user_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.etsy.com/v3/public/oauth/token\"\n }\n },\n facebook: {\n authorizationUrl: \"https://www.facebook.com/v16.0/dialog/oauth\",\n email: [\"email\"],\n familyName: [\"family_name\"],\n fullName: [\"name\"],\n givenName: [\"given_name\"],\n isOIDC: true,\n isRefreshable: false,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n searchParams: [[\"fields\", \"id,name,email,picture\"]],\n url: \"https://graph.facebook.com/me\"\n },\n scopeRequired: false,\n subject: [\"sub\"],\n subjectBySource: {\n idToken: [\"sub\"],\n profile: [\"id\"]\n },\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://graph.facebook.com/v16.0/oauth/access_token\"\n }\n },\n figma: {\n authorizationUrl: \"https://www.figma.com/oauth\",\n email: [\"email\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"img_url\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.figma.com/v1/me\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.figma.com/v1/oauth/token\"\n }\n },\n gitea: {\n authorizationUrl: (config) => `${config.baseURL}/login/oauth/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/user`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/login/oauth/access_token`\n }\n },\n github: {\n authorizationUrl: \"https://github.com/login/oauth/authorize\",\n email: [\"email\"],\n isOIDC: false,\n isRefreshable: false,\n picture: [\"avatar_url\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.github.com/user\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://github.com/login/oauth/access_token\"\n }\n },\n gitlab: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n email: [\"email\"],\n fullName: [\"name\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://gitlab.com/api/v4/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n gohighlevel: {\n authorizationUrl: \"https://marketplace.gohighlevel.com/v2/oauth/chooselocation\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n Version: \"2021-07-28\"\n },\n method: \"GET\",\n url: \"https://services.leadconnectorhq.com/users/me\"\n },\n scopeRequired: true,\n subject: [\"locationId\"],\n subjectBySource: {\n tokenResponse: [\"locationId\"]\n },\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://services.leadconnectorhq.com/oauth/token\"\n }\n },\n google: {\n authorizationUrl: \"https://accounts.google.com/o/oauth2/v2/auth\",\n email: [\"email\"],\n familyName: [\"family_name\"],\n fullName: [\"name\"],\n givenName: [\"given_name\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openidconnect.googleapis.com/v1/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://oauth2.googleapis.com/revoke\"\n },\n scopeRequired: true,\n subject: [\"sub\"],\n subjectBySource: {\n idToken: [\"sub\"],\n profile: [\"sub\"]\n },\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth2.googleapis.com/token\"\n }\n },\n hubspot: {\n authorizationUrl: \"https://app.hubspot.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"path\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.hubapi.com/oauth/v1/access-tokens\"\n },\n scopeRequired: true,\n subject: [\"hub_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.hubapi.com/oauth/v1/token\"\n }\n },\n intuit: {\n authorizationUrl: \"https://appcenter.intuit.com/connect/oauth2\",\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => config.environment === \"production\" ? \"https://accounts.platform.intuit.com/v1/openid_connect/userinfo\" : \"https://sandbox-accounts.platform.intuit.com/v1/openid_connect/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${encodeBase64(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://developer.api.intuit.com/v2/oauth2/tokens/revoke\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer\"\n }\n },\n kakao: {\n authorizationUrl: \"https://kauth.kakao.com/oauth/authorize\",\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://kapi.kakao.com/v2/user/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://kauth.kakao.com/oauth/token\"\n }\n },\n keycloak: {\n authorizationUrl: (config) => `${config.realmURL}/protocol/openid-connect/auth`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/v1/user\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/revoke`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.realmURL}/protocol/openid-connect/token`\n }\n },\n kick: {\n authorizationUrl: \"https://id.kick.com/oauth/authorize\",\n email: [\"data\", \"email\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"data\", \"profile_picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.kick.com/public/v1/users\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://id.kick.com/oauth/revoke\"\n },\n scopeRequired: true,\n subject: [\"data\", \"user_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.kick.com/oauth/token\"\n }\n },\n lichess: {\n authorizationUrl: \"https://lichess.org/oauth/authorize\",\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://lichess.org/api/account\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://lichess.org/api/token\"\n }\n },\n line: {\n authorizationUrl: \"https://access.line.me/oauth2/v2.1/authorize\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.line.me/v2/profile\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.line.me/oauth2/v2.1/token\"\n }\n },\n linear: {\n authorizationUrl: \"https://linear.app/oauth/authorize\",\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { viewer { id name } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.linear.app/graphql\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.linear.app/oauth/revoke\"\n },\n scopeRequired: false,\n subject: [\"data\", \"viewer\", \"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.linear.app/oauth/token\"\n }\n },\n linkedin: {\n authorizationUrl: \"https://www.linkedin.com/oauth/v2/authorization\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.linkedin.com/v2/me\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.linkedin.com/oauth/v2/accessToken\"\n }\n },\n mastodon: {\n authorizationUrl: (config) => `${config.baseURL}/oauth/authorize`,\n isOIDC: false,\n isRefreshable: false,\n picture: [\"avatar\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/api/v1/accounts/verify_credentials`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `${config.baseURL}/oauth/revoke`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/oauth/token`\n }\n },\n mercadolibre: {\n authorizationUrl: \"https://auth.mercadolibre.com/authorization\",\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadolibre.com/users/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadolibre.com/oauth/token\"\n }\n },\n mercadopago: {\n authorizationUrl: \"https://auth.mercadopago.com/authorization\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.mercadopago.com/v1/users/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.mercadopago.com/oauth/token\"\n }\n },\n microsoftentraexternalid: {\n authorizationUrl: (config) => `https://${config.tenantSubdomain}.ciamlogin.com/${config.tenantId}/oauth2/v2.0/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n scopeRequired: false,\n subject: [\"sub\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.tenantSubdomain}.ciamlogin.com/${config.tenantId}/oauth2/v2.0/token`\n }\n },\n microsoftentraid: {\n authorizationUrl: (config) => `https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://graph.microsoft.com/oidc/userinfo\"\n },\n scopeRequired: false,\n subject: [\"sub\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://login.microsoftonline.com/${config.tenantId}/oauth2/v2.0/token`\n }\n },\n monday: {\n authorizationUrl: \"https://auth.monday.com/oauth2/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: \"query { me { id name email } }\"\n },\n encoding: \"application/json\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.monday.com/v2\"\n },\n scopeRequired: true,\n subject: [\"data\", \"me\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.monday.com/oauth2/token\"\n }\n },\n myanimelist: {\n authorizationUrl: \"https://myanimelist.net/v1/oauth2/authorize\",\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"plain\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.myanimelist.net/v2/users/@me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://myanimelist.net/v1/oauth2/token\"\n }\n },\n naver: {\n authorizationUrl: \"https://nid.naver.com/oauth2.0/authorize\",\n email: [\"response\", \"email\"],\n fullName: [\"response\", \"name\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"response\", \"profile_image\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://openapi.naver.com/v1/nid/me\"\n },\n scopeRequired: false,\n subject: [\"response\", \"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://nid.naver.com/oauth2.0/token\"\n }\n },\n notion: {\n authorizationUrl: \"https://api.notion.com/v1/oauth/authorize\",\n email: [\"bot\", \"owner\", \"user\", \"person\", \"email\"],\n isOIDC: false,\n isRefreshable: false,\n picture: [\"bot\", \"owner\", \"user\", \"avatar_url\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: {\n \"Notion-Version\": \"2022-06-28\"\n },\n method: \"GET\",\n url: \"https://api.notion.com/v1/users/me\"\n },\n scopeRequired: false,\n subject: [\"bot\", \"owner\", \"user\", \"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.notion.com/v1/oauth/token\"\n }\n },\n okta: {\n authorizationUrl: (config) => `https://${config.domain}/oauth2/default/v1/authorize`,\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/userinfo`\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/revoke`\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/default/v1/token`\n }\n },\n onspark: {\n authorizationUrl: \"https://onspark.com/oauth2/authorize\",\n email: [\"email\"],\n familyName: [\"family_name\"],\n fullName: [\"name\"],\n givenName: [\"given_name\"],\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://onspark.com/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n tokenParamName: \"token\",\n url: \"https://onspark.com/oauth2/revoke\"\n },\n scopeRequired: true,\n subject: [\"sub\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://onspark.com/oauth2/token\"\n }\n },\n osu: {\n authorizationUrl: \"https://osu.ppy.sh/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n picture: [\"avatar_url\"],\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://osu.ppy.sh/api/v2/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://osu.ppy.sh/oauth/token\"\n }\n },\n patreon: {\n authorizationUrl: \"https://www.patreon.com/oauth2/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.patreon.com/api/oauth2/v2/identity\"\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.patreon.com/api/oauth2/token\"\n }\n },\n pipedrive: {\n authorizationUrl: \"https://oauth.pipedrive.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.pipedrive.com/v1/users/me\"\n },\n scopeRequired: true,\n subject: [\"data\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.pipedrive.com/oauth/token\"\n }\n },\n polar: {\n authorizationUrl: \"https://polar.sh/oauth2/authorize\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.polar.sh/v1/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://api.polar.sh/v1/oauth2/revoke\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.polar.sh/v1/oauth2/token\"\n }\n },\n polaraccesslink: {\n authorizationUrl: \"https://flow.polar.com/oauth2/authorization\",\n isOIDC: false,\n isRefreshable: false,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/me\"\n },\n scopeRequired: false,\n subject: [\"x_user_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://polarremote.com/v2/oauth2/token\"\n }\n },\n polarteampro: {\n authorizationUrl: \"https://auth.polar.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.polaraccesslink.com/v3/users/<USER_ID>\"\n },\n scopeRequired: false,\n subject: [\"x_user_id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://auth.polar.com/oauth/token\"\n }\n },\n reddit: {\n authorizationUrl: \"https://www.reddit.com/api/v1/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://oauth.reddit.com/api/v1/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n body: new URLSearchParams({\n token_type_hint: \"refresh_token\"\n }),\n encoding: \"application/json\",\n inputSource: \"refreshToken\",\n url: \"https://www.reddit.com/api/v1/revoke_token\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"header\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.reddit.com/api/v1/access_token\"\n }\n },\n roblox: {\n authorizationUrl: \"https://apis.roblox.com/oauth/v1/authorize\",\n isOIDC: true,\n isRefreshable: true,\n picture: [\"picture\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://apis.roblox.com/oauth/v1/userinfo\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://apis.roblox.com/oauth/v1/token\"\n }\n },\n salesforce: {\n authorizationUrl: \"https://login.salesforce.com/services/oauth2/authorize\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.salesforce.com/services/oauth2/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://login.salesforce.com/services/oauth2/revoke\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://login.salesforce.com/services/oauth2/token\"\n }\n },\n shikimori: {\n authorizationUrl: \"https://shikimori.org/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://shikimori.one/api/users/whoami\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://shikimori.org/oauth/token\"\n }\n },\n slack: {\n authorizationUrl: \"https://slack.com/openid/connect/authorize\",\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://slack.com/api/users.identity\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://slack.com/api/auth.revoke\"\n },\n scopeRequired: true,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://slack.com/api/openid.connect.token\"\n }\n },\n slackuser: {\n accessTokenPath: [\"authed_user\", \"access_token\"],\n authorizationUrl: \"https://slack.com/oauth/v2/authorize\",\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"POST\",\n url: \"https://slack.com/api/auth.test\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://slack.com/api/auth.revoke\"\n },\n scopeParamName: \"user_scope\",\n scopeRequired: true,\n subject: [\"user_id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://slack.com/api/oauth.v2.access\"\n }\n },\n spotify: {\n authorizationUrl: \"https://accounts.spotify.com/authorize\",\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.spotify.com/v1/me\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://accounts.spotify.com/api/token\"\n }\n },\n startgg: {\n authorizationUrl: \"https://start.gg/oauth/authorize\",\n email: [\"data\", \"currentUser\", \"email\"],\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n body: {\n query: `query { currentUser { id slug email player { gamerTag } } }`\n },\n encoding: \"application/json\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\"\n },\n method: \"POST\",\n url: \"https://api.start.gg/gql/alpha\"\n },\n scopeRequired: false,\n subject: [\"data\", \"currentUser\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.start.gg/oauth/access_token\"\n }\n },\n strava: {\n authorizationUrl: \"https://www.strava.com/oauth/authorize\",\n familyName: [\"lastname\"],\n givenName: [\"firstname\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"profile\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://www.strava.com/api/v3/athlete\"\n },\n revocationRequest: {\n authIn: \"query\",\n body: new URLSearchParams({\n token_type_hint: \"access_token\"\n }),\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://www.strava.com/oauth/deauthorize\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://www.strava.com/oauth/token\"\n }\n },\n synology: {\n authorizationUrl: (config) => `${config.baseURL}/webman/sso/SSOOauth.cgi?client_id=${config.clientId}&response_type=code&redirect_uri=${config.redirectUri}`,\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `${config.baseURL}/webman/sso/SSOUserInfo.cgi?client_id=${config.clientId}&access_token=${config.accessToken}`\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `${config.baseURL}/webman/sso/SSOAccessToken.cgi?client_id=${config.clientId}&client_secret=${config.clientSecret}`\n }\n },\n tiktok: {\n authorizationUrl: \"https://www.tiktok.com/v2/auth/authorize\",\n createAuthorizationURLSearchParams: (config) => ({\n client_key: config.clientId\n }),\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://open.douyin.com/oauth/userinfo\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"token\",\n url: \"https://open.tiktokapis.com/v2/oauth/revoke/\"\n },\n scopeRequired: false,\n subject: [\"data\", \"open_id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://open.tiktokapis.com/v2/oauth/token/\"\n }\n },\n tiltify: {\n authorizationUrl: \"https://v5api.tiltify.com/oauth/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://v5api.tiltify.com/api/public/current-user\"\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://v5api.tiltify.com/oauth/token\"\n }\n },\n tumblr: {\n authorizationUrl: \"https://www.tumblr.com/oauth2/authorize\",\n isOIDC: false,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.tumblr.com/v2/user/info\"\n },\n scopeRequired: false,\n subject: [\"response\", \"user\", \"name\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.tumblr.com/v2/oauth2/token\"\n }\n },\n twitch: {\n authorizationUrl: \"https://id.twitch.tv/oauth2/authorize\",\n isOIDC: true,\n isRefreshable: true,\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n method: \"GET\",\n url: \"https://api.twitch.tv/helix/users\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n \"Client-Id\": config.clientId\n }),\n tokenParamName: \"token\",\n url: \"https://id.twitch.tv/oauth2/revoke\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://id.twitch.tv/oauth2/token\"\n }\n },\n twitter: {\n authorizationUrl: \"https://twitter.com/i/oauth2/authorize\",\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.twitter.com/2/users/me\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.twitter.com/2/oauth2/revoke\"\n },\n scopeRequired: false,\n subject: [\"data\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.twitter.com/2/oauth2/token\"\n }\n },\n vk: {\n authorizationUrl: \"https://oauth.vk.com/authorize\",\n isOIDC: false,\n isRefreshable: false,\n profileRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.vk.com/method/users.get\"\n },\n scopeRequired: false,\n subject: [\"response\", \"0\", \"id\"],\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.vk.com/access_token\"\n }\n },\n withings: {\n accessTokenPath: [\"body\", \"access_token\"],\n authorizationUrl: \"https://account.withings.com/oauth2_user/authorize2\",\n isOIDC: false,\n isRefreshable: true,\n refreshAccessTokenBody: {\n action: \"requesttoken\"\n },\n revocationRequest: {\n authIn: \"body\",\n body: (config) => getWithingsSignatureParams(config, \"revoke\"),\n encoding: \"application/x-www-form-urlencoded\",\n includeClientCredentials: false,\n inputSource: \"subject\",\n inputType: \"number\",\n tokenParamName: \"userid\",\n url: \"https://wbsapi.withings.net/v2/oauth2\",\n validateResponse: (value) => assertWithingsSuccess(value)\n },\n scopeDelimiter: \",\",\n scopeRequired: true,\n subject: [\"userid\"],\n subjectBySource: {\n tokenResponse: [\"body\", \"userid\"]\n },\n subjectType: \"number\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://wbsapi.withings.net/v2/oauth2\"\n },\n validateAuthorizationCodeBody: {\n action: \"requesttoken\"\n }\n },\n workos: {\n authorizationUrl: (config) => `https://${config.domain}/oauth2/authorize`,\n createAuthorizationURLSearchParams: () => {\n const nonce = crypto.randomUUID();\n return {\n nonce\n };\n },\n email: [\"email\"],\n familyName: [\"family_name\"],\n fullName: [\"name\"],\n givenName: [\"given_name\"],\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"POST\",\n url: (config) => `https://${config.domain}/oauth2/userinfo`\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://${config.domain}/oauth2/token`\n }\n },\n yahoo: {\n authorizationUrl: \"https://api.login.yahoo.com/oauth2/request_auth\",\n isOIDC: true,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.login.yahoo.com/openid/v1/userinfo\"\n },\n revocationRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n url: \"https://api.login.yahoo.com/oauth2/revoke\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://api.login.yahoo.com/oauth2/get_token\"\n }\n },\n yandex: {\n authorizationUrl: \"https://oauth.yandex.com/authorize\",\n createAuthorizationURLSearchParams: {\n device_id: crypto.randomUUID(),\n device_name: `${navigator.platform ?? \"Unknown\"} \\u2014 ${(navigator.userAgent.split(\")\")[0] || \"\").split(\"(\").pop() || \"Unknown\"}`\n },\n email: [\"default_email\"],\n familyName: [\"last_name\"],\n fullName: [\"real_name\"],\n givenName: [\"first_name\"],\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://login.yandex.ru/info\"\n },\n revocationRequest: {\n authIn: \"body\",\n encoding: \"application/json\",\n tokenParamName: \"access_token\",\n url: \"https://oauth.yandex.com/revoke_token\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://oauth.yandex.com/token\"\n }\n },\n zoho: {\n authorizationUrl: (config) => `https://accounts.zoho.${config.region ?? \"com\"}/oauth/v2/auth`,\n isOIDC: false,\n isRefreshable: true,\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: (config) => `https://accounts.zoho.${config.region ?? \"com\"}/oauth/user/info`\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/x-www-form-urlencoded\",\n tokenParamName: \"token\",\n url: (config) => `https://accounts.zoho.${config.region ?? \"com\"}/oauth/v2/token/revoke`\n },\n scopeRequired: true,\n subject: [\"ZUID\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: (config) => `https://accounts.zoho.${config.region ?? \"com\"}/oauth/v2/token`\n }\n },\n zoom: {\n authorizationUrl: \"https://zoom.us/oauth/authorize\",\n email: [\"email\"],\n familyName: [\"last_name\"],\n givenName: [\"first_name\"],\n isOIDC: false,\n isRefreshable: true,\n picture: [\"pic_url\"],\n PKCEMethod: \"S256\",\n profileRequest: {\n authIn: \"header\",\n encoding: \"application/json\",\n method: \"GET\",\n url: \"https://api.zoom.us/v2/users/me\"\n },\n revocationRequest: {\n authIn: \"query\",\n encoding: \"application/json\",\n headers: (config) => ({\n Authorization: `Basic ${btoa(`${config.clientId}:${config.clientSecret}`)}`\n }),\n tokenParamName: \"token\",\n url: \"https://zoom.us/oauth/revoke\"\n },\n scopeRequired: false,\n subject: [\"id\"],\n subjectType: \"string\",\n tokenRequest: {\n authIn: \"body\",\n encoding: \"application/x-www-form-urlencoded\",\n url: \"https://zoom.us/oauth/token\"\n }\n }\n});\nfunction defineProvider(config) {\n return config === undefined ? (providerConfig) => providerConfig : config;\n}\n\n// src/typeGuards.ts\nvar hasClientSecret = (credentials) => {\n if (typeof credentials !== \"object\" || credentials === null)\n return false;\n const secret = Reflect.get(credentials, \"clientSecret\");\n return typeof secret === \"string\";\n};\nvar isExpectedType = (value, kind) => {\n switch (kind) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\";\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"object\":\n return typeof value === \"object\" && value !== null;\n default:\n return false;\n }\n};\nvar isObject = (value) => value !== null && typeof value === \"object\" && !Array.isArray(value) && Object.prototype.toString.call(value) === \"[object Object]\";\nvar isOIDCProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isOIDC;\n};\nvar isPKCEProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.PKCEMethod !== undefined;\n};\nfunction isProfileOAuth2Client(providerOrClient, maybeClient) {\n const client = maybeClient ?? providerOrClient;\n if (maybeClient !== undefined && (typeof providerOrClient !== \"string\" || !isProfileProviderOption(providerOrClient))) {\n return false;\n }\n return typeof client === \"object\" && client !== null && \"fetchUserProfile\" in client && typeof client.fetchUserProfile === \"function\";\n}\nvar isProfileProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.profileRequest !== undefined;\n};\nfunction isRefreshableOAuth2Client(providerOrClient, maybeClient) {\n const client = maybeClient ?? providerOrClient;\n if (maybeClient !== undefined && (typeof providerOrClient !== \"string\" || !isRefreshableProviderOption(providerOrClient))) {\n return false;\n }\n return typeof client === \"object\" && client !== null && \"refreshAccessToken\" in client && typeof client.refreshAccessToken === \"function\";\n}\nvar isRefreshableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.isRefreshable;\n};\nfunction isRevocableOAuth2Client(providerOrClient, maybeClient) {\n const client = maybeClient ?? providerOrClient;\n if (maybeClient !== undefined && (typeof providerOrClient !== \"string\" || !isRevocableProviderOption(providerOrClient))) {\n return false;\n }\n return typeof client === \"object\" && client !== null && \"resolveRevocationInput\" in client && typeof client.resolveRevocationInput === \"function\" && \"revokeToken\" in client && typeof client.revokeToken === \"function\";\n}\nvar isRevocableProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.revocationRequest !== undefined;\n};\nvar isScopeRequiredProviderOption = (option) => {\n if (!isValidProviderOption(option))\n return false;\n const provider = providers[option];\n return provider.scopeRequired;\n};\nvar isValidProviderOption = (option) => Object.hasOwn(providers, option);\n\n// src/utils.ts\nvar readPath = (value, path) => path.reduce((cursor, key) => cursor && typeof cursor === \"object\" ? Reflect.get(cursor, key) : undefined, value);\nvar assertWithingsSuccess = (value) => {\n if (!isObject(value) || value.status !== 0) {\n const status = isObject(value) ? value.status : \"invalid response\";\n const detail = isObject(value) && typeof value.error === \"string\" ? `: ${value.error}` : \"\";\n throw new Error(`Withings request failed (${String(status)})${detail}`);\n }\n};\nvar createOAuth2FetchError = async (response) => {\n const clone = response.clone();\n const prefix = `HTTP ${response.status} ${response.statusText} for ${response.url}`;\n const payload = await response.json().catch(() => null);\n if (payload && typeof payload === \"object\" && Object.keys(payload).length) {\n return new Error(`${prefix}\n${JSON.stringify(payload)}`);\n }\n const text = await clone.text().catch(() => \"\");\n if (text) {\n return new Error(`${prefix}\n${text}`);\n }\n return new Error(prefix);\n};\nvar createOAuth2Request = ({\n url,\n body,\n authIn,\n headers,\n encoding,\n clientId,\n clientSecret\n}) => {\n const oauthHeaders = new Headers(headers);\n oauthHeaders.set(\"Accept\", \"application/json\");\n oauthHeaders.set(\"User-Agent\", \"citra\");\n if (authIn === \"header\") {\n if (!clientSecret) {\n throw new Error(\"clientSecret required for header auth\");\n }\n oauthHeaders.set(\"Authorization\", `Basic ${encodeBase64(`${clientId}:${clientSecret}`)}`);\n }\n if (body === undefined && authIn !== \"body\") {\n return new Request(url, {\n headers: oauthHeaders,\n method: \"POST\"\n });\n }\n if (encoding === \"application/json\") {\n oauthHeaders.set(\"Content-Type\", \"application/json\");\n const jsonBody = body instanceof URLSearchParams ? Object.fromEntries(body.entries()) : { ...body };\n if (authIn === \"body\")\n jsonBody.client_id = clientId;\n if (authIn === \"body\" && clientSecret)\n jsonBody.client_secret = clientSecret;\n return new Request(url, {\n body: JSON.stringify(jsonBody),\n headers: oauthHeaders,\n method: \"POST\"\n });\n }\n oauthHeaders.set(\"Content-Type\", \"application/x-www-form-urlencoded\");\n const entries = body instanceof URLSearchParams ? Array.from(body.entries()) : Object.entries(body ?? {}).filter((entry) => typeof entry[1] === \"string\");\n const params = new URLSearchParams(entries);\n if (authIn === \"body\") {\n params.set(\"client_id\", clientId);\n clientSecret && params.set(\"client_secret\", clientSecret);\n }\n return new Request(url, {\n body: params.toString(),\n headers: oauthHeaders,\n method: \"POST\"\n });\n};\nvar decodeBase64 = (input, toUint8Array = false) => {\n const b64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\") + \"==\".slice(0, (BASE64_BLOCK_SIZE - input.length % BASE64_BLOCK_SIZE) % BASE64_BLOCK_SIZE);\n const raw = atob(b64);\n if (!toUint8Array) {\n return raw;\n }\n const bytes = new Uint8Array(raw.length);\n for (let i = 0;i < raw.length; i++) {\n bytes[i] = raw.charCodeAt(i);\n }\n return bytes;\n};\nvar decodeJWT = (tokenString) => {\n const [headerSegment, payloadSegment, signatureSegment] = tokenString.split(\".\");\n if (!headerSegment || !payloadSegment || !signatureSegment) {\n throw new Error(\"Invalid JWT format\");\n }\n const decodedPayload = decodeBase64(payloadSegment);\n if (typeof decodedPayload !== \"string\") {\n throw new Error(\"Expected JWT payload to be a UTF-8 string\");\n }\n const claims = JSON.parse(decodedPayload);\n return claims;\n};\nvar encodeBase64 = (input) => {\n let raw;\n if (typeof input === \"string\") {\n raw = input;\n } else {\n const bytes = input instanceof Uint8Array ? input : new Uint8Array(input);\n raw = bytes.reduce((acc, byte) => acc + String.fromCharCode(byte), \"\");\n }\n return btoa(raw);\n};\nvar getWithingsSignatureParams = async (config, action) => {\n const timestamp = Math.floor(Date.now() / 1000);\n const nonceSignature = await hmacSha256(`getnonce,${config.clientId},${timestamp}`, config.clientSecret);\n const nonceUrl = new URL(\"https://wbsapi.withings.net/v2/signature\");\n nonceUrl.searchParams.set(\"action\", \"getnonce\");\n nonceUrl.searchParams.set(\"client_id\", config.clientId);\n nonceUrl.searchParams.set(\"timestamp\", timestamp.toString());\n nonceUrl.searchParams.set(\"signature\", nonceSignature);\n const nonceTarget = nonceUrl.toString();\n const nonceResponse = await fetch(nonceTarget, { method: \"POST\" });\n if (!nonceResponse.ok) {\n throw await createOAuth2FetchError(nonceResponse);\n }\n const nonceData = await nonceResponse.json();\n if (!isObject(nonceData) || nonceData.status !== 0 || !isObject(nonceData.body) || typeof nonceData.body.nonce !== \"string\" || nonceData.body.nonce.length === 0) {\n throw new Error(\"Withings returned an invalid nonce response\");\n }\n const { nonce } = nonceData.body;\n const signature = await hmacSha256(`${action},${config.clientId},${nonce}`, config.clientSecret);\n return {\n action,\n client_id: config.clientId,\n nonce,\n signature\n };\n};\nvar hmacSha256 = async (message, secret) => {\n const encoder = new TextEncoder;\n const key = await crypto.subtle.importKey(\"raw\", encoder.encode(secret), { hash: \"SHA-256\", name: \"HMAC\" }, false, [\"sign\"]);\n const sigBuffer = await crypto.subtle.sign(\"HMAC\", key, encoder.encode(message));\n return Array.from(new Uint8Array(sigBuffer)).map((byte) => byte.toString(16).padStart(2, \"0\")).join(\"\");\n};\nvar parseOAuth2TokenResponse = (value, accessTokenPath) => {\n if (!isObject(value)) {\n throw new Error(\"OAuth token endpoint returned a non-object response\");\n }\n const oauthError = Reflect.get(value, \"error\");\n if (typeof oauthError === \"string\" && oauthError.length > 0) {\n throw new Error(`OAuth token exchange failed: ${oauthError}`);\n }\n const response = { ...value };\n const nestedToken = accessTokenPath ? readPath(value, accessTokenPath) : undefined;\n if (typeof nestedToken === \"string\" && nestedToken.length > 0) {\n response.access_token = nestedToken;\n }\n if (typeof response.access_token !== \"string\" || response.access_token.length === 0) {\n throw new Error(\"OAuth token endpoint returned no access_token\");\n }\n for (const key of [\"refresh_token\", \"token_type\", \"scope\", \"id_token\"]) {\n const field = response[key];\n if (field !== undefined && typeof field !== \"string\") {\n throw new Error(`OAuth token endpoint returned invalid ${key}: expected string`);\n }\n }\n const expiresIn = response.expires_in;\n if (typeof expiresIn === \"string\" && expiresIn.trim() !== \"\") {\n response.expires_in = Number(expiresIn);\n }\n if (response.expires_in !== undefined && (typeof response.expires_in !== \"number\" || !Number.isFinite(response.expires_in) || response.expires_in < 0)) {\n throw new Error(\"OAuth token endpoint returned invalid expires_in: expected a non-negative number\");\n }\n return response;\n};\nvar readIdentityKey = (value, key) => {\n if (Array.isArray(value)) {\n if (!/^\\d+$/.test(key)) {\n throw new Error(`Invalid identity data shape: expected an array index, got ${key}`);\n }\n return value[Number(key)];\n }\n if (!isObject(value)) {\n throw new Error(`Invalid identity data shape: expected object, got ${typeof value}`);\n }\n return value[key];\n};\nvar extractPropFromIdentity = (identity, keys, propType) => {\n let value = identity;\n for (const key of keys) {\n value = readIdentityKey(value, key);\n }\n if (propType !== undefined && !isExpectedType(value, propType)) {\n throw new Error(`Invalid identity data shape: expected ${propType}, got ${typeof value}`);\n }\n return value;\n};\nvar getProviderSubjectKeys = (providerConfiguration, source) => providerConfiguration.subjectBySource?.[source] ?? providerConfiguration.subject;\nvar setPropInIdentity = (identity, keys, value) => {\n if (keys.length === 0) {\n return identity;\n }\n let cursor = identity;\n for (const key of keys.slice(0, -1)) {\n const next = cursor[key];\n cursor[key] = isObject(next) ? next : {};\n cursor = cursor[key];\n }\n cursor[keys[keys.length - 1]] = value;\n return identity;\n};\nvar normalizeProviderIdentity = ({\n identity,\n providerConfiguration,\n source\n}) => {\n const sourceKeys = getProviderSubjectKeys(providerConfiguration, source);\n const canonicalKeys = providerConfiguration.subject;\n if (sourceKeys.join(\".\") === canonicalKeys.join(\".\")) {\n return identity;\n }\n const subject = extractPropFromIdentity(identity, sourceKeys, providerConfiguration.subjectType);\n const normalizedIdentity = structuredClone(identity);\n return setPropInIdentity(normalizedIdentity, canonicalKeys, subject);\n};\n\n// src/arctic-utils.ts\nvar DAYS_IN_APPLE_CLIENT_SECRET_LIFETIME = 180;\nvar HOURS_PER_DAY = 24;\nvar MINUTES_PER_HOUR = 60;\nvar SECONDS_PER_MINUTE = 60;\nvar APPLE_CLIENT_SECRET_LIFETIME_SECONDS = SECONDS_PER_MINUTE * MINUTES_PER_HOUR * HOURS_PER_DAY * DAYS_IN_APPLE_CLIENT_SECRET_LIFETIME;\nvar APPLE_ISSUER = \"https://appleid.apple.com\";\nvar MILLISECONDS_PER_SECOND = 1000;\nvar createS256CodeChallenge = async (codeVerifier) => {\n const data = new TextEncoder().encode(codeVerifier);\n const hashBuffer = await crypto.subtle.digest(\"SHA-256\", data);\n return base64Url(hashBuffer);\n};\nvar createRandomBase64UrlGenerator = (length) => () => {\n const buffer = crypto.getRandomValues(new Uint8Array(length));\n return base64Url(buffer);\n};\nvar generateCodeVerifier = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar generateState = createRandomBase64UrlGenerator(NUM_GENERATOR_BYTES);\nvar base64Url = (input) => encodeBase64(input).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\nvar encodeJwtPart = (value) => base64Url(new TextEncoder().encode(JSON.stringify(value)));\nvar createAppleClientSecret = async (credentials) => {\n const issuedAt = Math.floor(Date.now() / MILLISECONDS_PER_SECOND);\n const header = encodeJwtPart({\n alg: \"ES256\",\n kid: credentials.keyId,\n typ: \"JWT\"\n });\n const payload = encodeJwtPart({\n aud: APPLE_ISSUER,\n exp: issuedAt + APPLE_CLIENT_SECRET_LIFETIME_SECONDS,\n iat: issuedAt,\n iss: credentials.teamId,\n sub: credentials.clientId\n });\n const signingInput = `${header}.${payload}`;\n const privateKey = await crypto.subtle.importKey(\"pkcs8\", Uint8Array.from(credentials.pkcs8PrivateKey), { name: \"ECDSA\", namedCurve: \"P-256\" }, false, [\"sign\"]);\n const signature = await crypto.subtle.sign({ hash: \"SHA-256\", name: \"ECDSA\" }, privateKey, new TextEncoder().encode(signingInput));\n return `${signingInput}.${base64Url(signature)}`;\n};\n// src/oidc.ts\nvar ALG_ES256 = \"ES256\";\nvar ALG_RS256 = \"RS256\";\nvar CLOCK_SKEW_SECONDS = 60;\nvar DEFAULT_SCOPES = [\"openid\", \"email\", \"profile\"];\nvar JWKS_REFETCH_COOLDOWN_MS = 60000;\nvar JWT_SEGMENT_COUNT = 3;\nvar MILLISECONDS_PER_SECOND2 = 1000;\nvar trimTrailingSlash = (value) => value.endsWith(\"/\") ? value.slice(0, -1) : value;\nvar fetchJson = async (url) => {\n const response = await fetch(url, {\n headers: { accept: \"application/json\" }\n });\n if (!response.ok) {\n throw await createOAuth2FetchError(response);\n }\n return response.json();\n};\nvar decodeJsonSegment = (segment) => {\n const decoded = decodeBase64(segment);\n if (typeof decoded !== \"string\") {\n throw new Error(\"Expected a base64url-encoded JWT segment\");\n }\n const parsed = JSON.parse(decoded);\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new Error(\"Expected a JWT segment to decode to a JSON object\");\n }\n return parsed;\n};\nvar importVerificationKey = (jwk, alg) => {\n if (alg === ALG_RS256) {\n return crypto.subtle.importKey(\"jwk\", jwk, { hash: \"SHA-256\", name: \"RSASSA-PKCS1-v1_5\" }, false, [\"verify\"]);\n }\n if (alg === ALG_ES256) {\n return crypto.subtle.importKey(\"jwk\", jwk, { name: \"ECDSA\", namedCurve: \"P-256\" }, false, [\"verify\"]);\n }\n throw new Error(`Unsupported id_token signing algorithm \"${alg}\"`);\n};\nvar verifySignature = (key, alg, signingInput, signature) => {\n const algorithm = alg === ALG_ES256 ? { hash: \"SHA-256\", name: \"ECDSA\" } : { name: \"RSASSA-PKCS1-v1_5\" };\n return crypto.subtle.verify(algorithm, key, new Uint8Array(signature), new TextEncoder().encode(signingInput));\n};\nvar selectKey = (jwks, kid) => jwks.find((jwk) => kid === undefined || jwk.kid === kid);\nvar assertClaims = (payload, expected) => {\n const aud = Reflect.get(payload, \"aud\");\n const azp = Reflect.get(payload, \"azp\");\n const exp = Reflect.get(payload, \"exp\");\n const iat = Reflect.get(payload, \"iat\");\n const iss = Reflect.get(payload, \"iss\");\n const nbf = Reflect.get(payload, \"nbf\");\n const sub = Reflect.get(payload, \"sub\");\n const audiences = Array.isArray(aud) ? aud : [aud];\n const nowSeconds = Math.floor(Date.now() / MILLISECONDS_PER_SECOND2);\n if (iss !== expected.issuer) {\n throw new Error('id_token \"iss\" does not match the provider issuer');\n }\n if (typeof sub !== \"string\" || sub.length === 0) {\n throw new Error('id_token is missing \"sub\"');\n }\n if (!audiences.includes(expected.audience)) {\n throw new Error('id_token \"aud\" does not include the client id');\n }\n if (audiences.some((audience) => typeof audience !== \"string\") || typeof aud !== \"string\" && !Array.isArray(aud)) {\n throw new Error('id_token \"aud\" must be a string or string array');\n }\n if (audiences.length > 1 && (typeof azp !== \"string\" || azp !== expected.audience)) {\n throw new Error('id_token with multiple audiences requires matching \"azp\"');\n }\n if (typeof exp !== \"number\" || exp + CLOCK_SKEW_SECONDS < nowSeconds) {\n throw new Error(\"id_token has expired\");\n }\n if (typeof iat !== \"number\") {\n throw new Error('id_token is missing numeric \"iat\"');\n }\n if (iat > nowSeconds + CLOCK_SKEW_SECONDS) {\n throw new Error('id_token \"iat\" is in the future');\n }\n if (nbf !== undefined && (typeof nbf !== \"number\" || nbf > nowSeconds + CLOCK_SKEW_SECONDS)) {\n throw new Error(\"id_token is not active yet\");\n }\n if (expected.nonce !== undefined && Reflect.get(payload, \"nonce\") !== expected.nonce) {\n throw new Error('id_token \"nonce\" does not match');\n }\n const claims = { ...payload, aud, exp, iss, sub };\n return claims;\n};\nvar verifyIdToken = async ({\n audience,\n idToken,\n issuer,\n jwks,\n nonce\n}) => {\n const segments = idToken.split(\".\");\n const [headerSegment, payloadSegment, signatureSegment] = segments;\n if (segments.length !== JWT_SEGMENT_COUNT || headerSegment === undefined || payloadSegment === undefined || signatureSegment === undefined) {\n throw new Error(\"Invalid id_token: expected three segments\");\n }\n const header = decodeJsonSegment(headerSegment);\n const alg = Reflect.get(header, \"alg\");\n const kid = Reflect.get(header, \"kid\");\n if (typeof alg !== \"string\") {\n throw new Error('id_token header is missing \"alg\"');\n }\n const jwk = selectKey(jwks, typeof kid === \"string\" ? kid : undefined);\n if (jwk === undefined) {\n throw new Error('No JWKS key matches the id_token \"kid\"');\n }\n const key = await importVerificationKey(jwk, alg);\n const signature = decodeBase64(signatureSegment, true);\n if (typeof signature === \"string\") {\n throw new Error(\"Failed to decode the id_token signature\");\n }\n const isValid = await verifySignature(key, alg, `${headerSegment}.${payloadSegment}`, signature);\n if (!isValid) {\n throw new Error(\"id_token signature verification failed\");\n }\n return assertClaims(decodeJsonSegment(payloadSegment), {\n audience,\n issuer,\n nonce\n });\n};\nvar toDiscoveryDocument = (value, expectedIssuer) => {\n if (typeof value !== \"object\" || value === null) {\n throw new Error(\"OIDC discovery document is not a JSON object\");\n }\n const issuer = Reflect.get(value, \"issuer\");\n const authorizationEndpoint = Reflect.get(value, \"authorization_endpoint\");\n const tokenEndpoint = Reflect.get(value, \"token_endpoint\");\n const jwksUri = Reflect.get(value, \"jwks_uri\");\n const userinfoEndpoint = Reflect.get(value, \"userinfo_endpoint\");\n if (typeof issuer !== \"string\" || typeof authorizationEndpoint !== \"string\" || typeof tokenEndpoint !== \"string\" || typeof jwksUri !== \"string\") {\n throw new Error(\"OIDC discovery document is missing required endpoints\");\n }\n if (trimTrailingSlash(issuer) !== trimTrailingSlash(expectedIssuer)) {\n throw new Error(`OIDC discovery issuer \"${issuer}\" does not match configured issuer \"${expectedIssuer}\"`);\n }\n return {\n authorization_endpoint: authorizationEndpoint,\n issuer,\n jwks_uri: jwksUri,\n token_endpoint: tokenEndpoint,\n userinfo_endpoint: typeof userinfoEndpoint === \"string\" ? userinfoEndpoint : undefined\n };\n};\nvar fetchDiscoveryDocument = async (issuer) => {\n const base = trimTrailingSlash(issuer);\n const document = await fetchJson(`${base}/.well-known/openid-configuration`);\n return toDiscoveryDocument(document, issuer);\n};\nvar fetchJwks = async (jwksUri) => {\n const body = await fetchJson(jwksUri);\n const value = Reflect.get(body ?? {}, \"keys\");\n if (!Array.isArray(value)) {\n throw new Error('JWKS response is missing a \"keys\" array');\n }\n const keys = value;\n return keys;\n};\nvar createOIDCClient = async (config) => {\n const discovery = await fetchDiscoveryDocument(config.issuer);\n const scopes = config.scopes !== undefined && config.scopes.length > 0 ? config.scopes : DEFAULT_SCOPES;\n let cachedJwks;\n let jwksFetchedAtMs = 0;\n const resolveJwks = async (forceRefresh) => {\n const isStale = Date.now() - jwksFetchedAtMs > JWKS_REFETCH_COOLDOWN_MS;\n if (cachedJwks === undefined || forceRefresh && isStale) {\n cachedJwks = await fetchJwks(discovery.jwks_uri);\n jwksFetchedAtMs = Date.now();\n }\n return cachedJwks;\n };\n const createAuthorizationUrl = async (options) => {\n const url = new URL(discovery.authorization_endpoint);\n const challenge = await createS256CodeChallenge(options.codeVerifier);\n const { searchParams } = url;\n searchParams.set(\"client_id\", config.clientId);\n searchParams.set(\"code_challenge\", challenge);\n searchParams.set(\"code_challenge_method\", \"S256\");\n searchParams.set(\"redirect_uri\", config.redirectUri);\n searchParams.set(\"response_type\", \"code\");\n searchParams.set(\"scope\", (options.scope ?? scopes).join(\" \"));\n searchParams.set(\"state\", options.state);\n if (options.nonce !== undefined) {\n searchParams.set(\"nonce\", options.nonce);\n }\n return url;\n };\n const validateAuthorizationCode = async (options) => {\n const body = new URLSearchParams;\n body.set(\"client_id\", config.clientId);\n body.set(\"client_secret\", config.clientSecret);\n body.set(\"code\", options.code);\n body.set(\"code_verifier\", options.codeVerifier);\n body.set(\"grant_type\", \"authorization_code\");\n body.set(\"redirect_uri\", config.redirectUri);\n const response = await fetch(discovery.token_endpoint, {\n body,\n headers: {\n accept: \"application/json\",\n \"content-type\": \"application/x-www-form-urlencoded\"\n },\n method: \"POST\"\n });\n if (!response.ok) {\n throw await createOAuth2FetchError(response);\n }\n const tokens = parseOAuth2TokenResponse(await response.json());\n return tokens;\n };\n const verifyToken = async (idToken, options) => {\n const jwks = await resolveJwks(false);\n const params = {\n audience: config.clientId,\n idToken,\n issuer: discovery.issuer,\n nonce: options?.nonce\n };\n try {\n return await verifyIdToken({ ...params, jwks });\n } catch (error) {\n const refreshed = await resolveJwks(true);\n if (refreshed === jwks)\n throw error;\n return verifyIdToken({ ...params, jwks: refreshed });\n }\n };\n const fetchUserProfile = async (accessToken) => {\n if (discovery.userinfo_endpoint === undefined) {\n throw new Error(\"OIDC provider does not expose a userinfo endpoint\");\n }\n const response = await fetch(discovery.userinfo_endpoint, {\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${accessToken}`\n }\n });\n if (!response.ok) {\n throw new Error(`OIDC userinfo request failed with status ${response.status}`);\n }\n const profile = await response.json();\n return profile;\n };\n return {\n createAuthorizationUrl,\n discovery,\n fetchUserProfile,\n validateAuthorizationCode,\n verifyIdToken: verifyToken\n };\n};\n// src/providerOptions.ts\nvar oidcProviderOptions = Object.keys(providers).filter(isOIDCProviderOption);\nvar pkceProviderOptions = Object.keys(providers).filter(isPKCEProviderOption);\nvar profileProviderOptions = Object.keys(providers).filter(isProfileProviderOption);\nvar providerOptions = Object.keys(providers).filter(isValidProviderOption);\nvar refreshableProviderOptions = Object.keys(providers).filter(isRefreshableProviderOption);\nvar revocableProviderOptions = Object.keys(providers).filter(isRevocableProviderOption);\nvar scopeRequiredProviderOptions = Object.keys(providers).filter(isScopeRequiredProviderOption);\n\n// src/index.ts\nvar buildOAuth2Client = async (meta, config) => {\n const isConfigPropertyFunction = (cfgProp) => typeof cfgProp === \"function\";\n const resolveConfigProp = async (cfgProp) => {\n const result = isConfigPropertyFunction(cfgProp) ? cfgProp(config) : cfgProp;\n return result;\n };\n const resolveClientSecret = async () => {\n if (meta.createClientSecret) {\n return resolveConfigProp(meta.createClientSecret);\n }\n return hasClientSecret(config) ? config.clientSecret : undefined;\n };\n const authorizationUrl = await resolveConfigProp(meta.authorizationUrl);\n const tokenUrl = await resolveConfigProp(meta.tokenRequest.url);\n const client = {\n async createAuthorizationUrl(opts) {\n const { state, scope = [], searchParams = [], codeVerifier } = opts;\n const url = new URL(authorizationUrl);\n url.searchParams.set(\"response_type\", \"code\");\n url.searchParams.set(\"client_id\", config.clientId);\n if (config.redirectUri)\n url.searchParams.set(\"redirect_uri\", config.redirectUri);\n if (state)\n url.searchParams.set(\"state\", state);\n if (scope.length !== 0) {\n url.searchParams.set(meta.scopeParamName ?? \"scope\", scope.join(meta.scopeDelimiter ?? \" \"));\n }\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"`codeVerifier` is required when PKCE is enabled\");\n }\n const codeChallenge = meta.PKCEMethod === \"S256\" ? await createS256CodeChallenge(codeVerifier) : codeVerifier;\n url.searchParams.set(\"code_challenge_method\", meta.PKCEMethod);\n url.searchParams.set(\"code_challenge\", codeChallenge);\n }\n Object.entries(await resolveConfigProp(meta.createAuthorizationURLSearchParams) ?? {}).forEach(([key, value]) => url.searchParams.set(key, value));\n searchParams.forEach(([key, value]) => url.searchParams.set(key, value));\n return url;\n },\n async fetchUserProfile(accessToken) {\n const { profileRequest } = meta;\n if (!profileRequest) {\n throw new Error(\"OIDC provider exposes identity through the id_token and does not define a UserInfo endpoint\");\n }\n const {\n url,\n method,\n authIn,\n searchParams,\n body: profileBody,\n headers,\n encoding\n } = profileRequest;\n const endpoint = new URL(await resolveConfigProp(url));\n const resolvedBody = await resolveConfigProp(profileBody);\n new URLSearchParams(await resolveConfigProp(searchParams)).forEach((value, key) => endpoint.searchParams.append(key, value));\n let headerEntries = [];\n const rawHeaders = headers ? await resolveConfigProp(headers) : undefined;\n if (rawHeaders instanceof Headers)\n headerEntries = Array.from(rawHeaders.entries());\n else if (Array.isArray(rawHeaders))\n headerEntries = rawHeaders;\n else if (rawHeaders && typeof rawHeaders === \"object\")\n headerEntries = Object.entries(rawHeaders);\n const profileHeaders = Object.fromEntries(headerEntries.filter(([, value]) => value !== \"\"));\n if (authIn === \"header\") {\n profileHeaders.Authorization = `Bearer ${accessToken}`;\n } else if (authIn === \"path\") {\n endpoint.pathname = `${endpoint.pathname.replace(/\\/+$/, \"\")}/${encodeURIComponent(accessToken)}`;\n } else {\n endpoint.searchParams.append(\"access_token\", accessToken);\n }\n const init = { headers: profileHeaders, method };\n if (method === \"POST\" && resolvedBody !== undefined) {\n profileHeaders[\"Content-Type\"] = encoding;\n init.body = encoding === \"application/json\" ? JSON.stringify(resolvedBody) : new URLSearchParams(resolvedBody).toString();\n }\n const profileTarget = endpoint.toString();\n const response = await fetch(profileTarget, init);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return response.json();\n },\n async refreshAccessToken(refreshToken) {\n const { authIn, encoding } = meta.tokenRequest;\n const params = new URLSearchParams(meta.refreshAccessTokenBody);\n params.set(\"grant_type\", \"refresh_token\");\n params.set(\"refresh_token\", refreshToken);\n const { clientId } = config;\n const clientSecretValue = await resolveClientSecret();\n if (clientSecretValue) {\n params.set(\"client_id\", clientId);\n params.set(\"client_secret\", clientSecretValue);\n }\n const request = createOAuth2Request({\n authIn,\n body: params,\n clientId,\n clientSecret: clientSecretValue,\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return parseOAuth2TokenResponse(await response.json());\n },\n resolveRevocationInput(context) {\n const { revocationRequest } = meta;\n if (!revocationRequest) {\n throw new Error(\"Token revocation not defined for this provider\");\n }\n const inputSource = revocationRequest.inputSource ?? \"accessToken\";\n const input = context[inputSource];\n if (input === undefined) {\n throw new Error(`Revocation requires ${inputSource}, but it was not provided`);\n }\n const expectsNumber = revocationRequest.authIn !== \"header\" && revocationRequest.inputType === \"number\";\n if (expectsNumber && (typeof input !== \"number\" || !Number.isFinite(input))) {\n throw new TypeError(\"This provider requires a numeric revocation input\");\n }\n if (!expectsNumber && typeof input !== \"string\") {\n throw new TypeError(\"This provider requires a string revocation input\");\n }\n return input;\n },\n async revokeToken(input) {\n const { revocationRequest } = meta;\n if (!revocationRequest) {\n throw new Error(\"Token revocation not defined for this provider\");\n }\n if (revocationRequest.authIn !== \"header\" && revocationRequest.inputType === \"number\" && (typeof input !== \"number\" || !Number.isFinite(input))) {\n throw new TypeError(\"This provider requires a numeric revocation input\");\n }\n const {\n url,\n authIn,\n body,\n encoding,\n headers,\n includeClientCredentials = true,\n tokenParamName,\n validateResponse\n } = revocationRequest;\n const endpoint = await resolveConfigProp(url);\n const resolvedBody = await resolveConfigProp(body);\n const revocationBody = resolvedBody === undefined ? undefined : new URLSearchParams(resolvedBody);\n const revocationHeaders = new Headers(headers && await resolveConfigProp(headers));\n const { clientId } = config;\n const clientSecret = await resolveClientSecret();\n let request;\n if (authIn === \"body\") {\n const bodyWithToken = revocationBody ?? new URLSearchParams;\n bodyWithToken.set(tokenParamName, String(input));\n const hasAuthorizationHeader = revocationHeaders.has(\"Authorization\");\n if (includeClientCredentials && !hasAuthorizationHeader)\n bodyWithToken.set(\"client_id\", clientId);\n if (includeClientCredentials && !hasAuthorizationHeader && clientSecret)\n bodyWithToken.set(\"client_secret\", clientSecret);\n request = createOAuth2Request({\n authIn: hasAuthorizationHeader || !includeClientCredentials ? \"query\" : \"body\",\n body: bodyWithToken,\n clientId,\n clientSecret,\n encoding,\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else if (authIn === \"header\") {\n revocationHeaders.set(\"Authorization\", `Bearer ${String(input)}`);\n request = createOAuth2Request({\n authIn: \"query\",\n body: revocationBody,\n clientId,\n encoding,\n headers: revocationHeaders,\n url: endpoint.toString()\n });\n } else {\n const queryEndpoint = new URL(endpoint);\n queryEndpoint.searchParams.set(tokenParamName, String(input));\n request = createOAuth2Request({\n authIn: \"query\",\n body: revocationBody,\n clientId,\n encoding,\n headers: revocationHeaders,\n url: queryEndpoint.toString()\n });\n }\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n if (validateResponse) {\n await validateResponse(await response.json().catch(() => {\n return;\n }));\n }\n },\n async validateAuthorizationCode(opts) {\n const { code, codeVerifier } = opts;\n const { authIn, encoding } = meta.tokenRequest;\n const bodyObj = {};\n for (const key in meta.validateAuthorizationCodeBody ?? {}) {\n const value = meta.validateAuthorizationCodeBody[key];\n if (typeof value === \"string\")\n bodyObj[key] = value;\n }\n bodyObj.grant_type = \"authorization_code\";\n bodyObj.code = code;\n if (config.redirectUri)\n bodyObj.redirect_uri = config.redirectUri;\n if (meta.PKCEMethod !== undefined) {\n if (!codeVerifier) {\n throw new Error(\"codeVerifier required when PKCE is enabled\");\n }\n bodyObj.code_verifier = codeVerifier;\n }\n const payload = encoding === \"application/json\" ? bodyObj : new URLSearchParams(bodyObj);\n const request = createOAuth2Request({\n authIn,\n body: payload,\n clientId: config.clientId,\n clientSecret: await resolveClientSecret(),\n encoding,\n url: tokenUrl\n });\n const response = await fetch(request);\n if (!response.ok)\n throw await createOAuth2FetchError(response);\n return parseOAuth2TokenResponse(await response.json(), meta.accessTokenPath);\n }\n };\n if (!meta.profileRequest) {\n Reflect.deleteProperty(client, \"fetchUserProfile\");\n }\n if (!meta.isRefreshable) {\n Reflect.deleteProperty(client, \"refreshAccessToken\");\n }\n if (!meta.revocationRequest) {\n Reflect.deleteProperty(client, \"resolveRevocationInput\");\n Reflect.deleteProperty(client, \"revokeToken\");\n }\n return client;\n};\nvar createCustomOAuth2Client = (providerConfig, credentials) => buildOAuth2Client(providerConfig, credentials);\nvar createOAuth2Client = (providerName, config) => buildOAuth2Client(providers[providerName], config);\nexport {\n verifyIdToken,\n scopeRequiredProviderOptions,\n revocableProviderOptions,\n refreshableProviderOptions,\n providers,\n providerOptions,\n profileProviderOptions,\n pkceProviderOptions,\n parseOAuth2TokenResponse,\n oidcProviderOptions,\n normalizeProviderIdentity,\n isValidProviderOption,\n isScopeRequiredProviderOption,\n isRevocableProviderOption,\n isRevocableOAuth2Client,\n isRefreshableProviderOption,\n isRefreshableOAuth2Client,\n isProfileProviderOption,\n isProfileOAuth2Client,\n isPKCEProviderOption,\n isObject,\n isOIDCProviderOption,\n isExpectedType,\n hmacSha256,\n hasClientSecret,\n getWithingsSignatureParams,\n getProviderSubjectKeys,\n generateState,\n generateCodeVerifier,\n extractPropFromIdentity,\n encodeBase64,\n defineProviders,\n defineProvider,\n decodeJWT,\n decodeBase64,\n createS256CodeChallenge,\n createOIDCClient,\n createOAuth2Request,\n createOAuth2FetchError,\n createOAuth2Client,\n createCustomOAuth2Client,\n createAppleClientSecret,\n base64Url,\n assertWithingsSuccess\n};\n",
21
21
  "import { eq } from 'drizzle-orm';\nimport { bigint, integer, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { LockoutRecord, LockoutStore } from './types';\n\nconst KEY_LENGTH = 320;\n\nexport const lockoutsTable = pgTable('auth_lockouts', {\n\tfailed_attempts: integer('failed_attempts').notNull().default(0),\n\tkey: varchar('key', { length: KEY_LENGTH }).primaryKey(),\n\tlocked_until_ms: bigint('locked_until_ms', { mode: 'number' }),\n\twindow_started_at_ms: bigint('window_started_at_ms', {\n\t\tmode: 'number'\n\t}).notNull()\n});\n\ntype LockoutRow = typeof lockoutsTable.$inferSelect;\ntype LockoutInsert = typeof lockoutsTable.$inferInsert;\n\nconst toRecord = (row: LockoutRow): LockoutRecord => ({\n\tfailedAttempts: row.failed_attempts,\n\tkey: row.key,\n\tlockedUntil: row.locked_until_ms ?? undefined,\n\twindowStartedAt: row.window_started_at_ms\n});\n\nexport const createNeonLockoutStore = (databaseUrl: string) =>\n\tcreatePostgresLockoutStore(createNeonDatabase(databaseUrl));\nexport const createPostgresLockoutStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): LockoutStore => {\n\tconst get = async (key: string) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(lockoutsTable)\n\t\t\t.where(eq(lockoutsTable.key, key))\n\t\t\t.limit(1);\n\n\t\treturn row ? toRecord(row) : undefined;\n\t};\n\tconst save = async (record: LockoutRecord) => {\n\t\tconst values: LockoutInsert = {\n\t\t\tfailed_attempts: record.failedAttempts,\n\t\t\tkey: record.key,\n\t\t\tlocked_until_ms: record.lockedUntil ?? null,\n\t\t\twindow_started_at_ms: record.windowStartedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(lockoutsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({ set: values, target: lockoutsTable.key });\n\t};\n\n\treturn {\n\t\tget,\n\t\tincrement: async (key, windowMs) => {\n\t\t\tconst now = Date.now();\n\t\t\tconst existing = await get(key);\n\t\t\tconst next: LockoutRecord =\n\t\t\t\texisting !== undefined &&\n\t\t\t\tnow - existing.windowStartedAt <= windowMs\n\t\t\t\t\t? {\n\t\t\t\t\t\t\t...existing,\n\t\t\t\t\t\t\tfailedAttempts: existing.failedAttempts + 1\n\t\t\t\t\t\t}\n\t\t\t\t\t: { failedAttempts: 1, key, windowStartedAt: now };\n\t\t\tawait save(next);\n\n\t\t\treturn next;\n\t\t},\n\t\tlock: async (key, lockedUntil) => {\n\t\t\tconst existing = (await get(key)) ?? {\n\t\t\t\tfailedAttempts: 0,\n\t\t\t\tkey,\n\t\t\t\twindowStartedAt: Date.now()\n\t\t\t};\n\t\t\tawait save({ ...existing, lockedUntil });\n\t\t},\n\t\treset: async (key) => {\n\t\t\tawait db.delete(lockoutsTable).where(eq(lockoutsTable.key, key));\n\t\t}\n\t};\n};\n",
22
- "import { and, eq, isNull, lte, or, sql } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\tsmallint,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { MfaEnrollment, MFAStore } from './types';\n\nconst ID_LENGTH = 255;\nconst PHONE_LENGTH = 20;\n\nexport const mfaEnrollmentsTable = pgTable('auth_mfa_enrollments', {\n\tbackup_code_hashes: jsonb('backup_code_hashes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tsms_challenge_id: text('sms_challenge_id'),\n\tsms_code_sent_at_ms: bigint('sms_code_sent_at_ms', { mode: 'number' }),\n\tsms_failed_attempts: smallint('sms_failed_attempts').notNull().default(0),\n\tsms_pending_code_expires_at_ms: bigint('sms_pending_code_expires_at_ms', {\n\t\tmode: 'number'\n\t}),\n\tsms_pending_code_hash: text('sms_pending_code_hash'),\n\tsms_pending_purpose: text('sms_pending_purpose').$type<\n\t\tMfaEnrollment['smsPendingPurpose']\n\t>(),\n\tsms_phone: varchar('sms_phone', { length: PHONE_LENGTH }),\n\tsms_provider_reference: text('sms_provider_reference'),\n\tsms_verified: boolean('sms_verified').notNull().default(false),\n\ttotp_failed_attempts: smallint('totp_failed_attempts').notNull().default(0),\n\ttotp_secret_ciphertext: text('totp_secret_ciphertext'),\n\ttotp_verified: boolean('totp_verified').notNull().default(false),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype MfaRow = typeof mfaEnrollmentsTable.$inferSelect;\ntype MfaInsert = typeof mfaEnrollmentsTable.$inferInsert;\n\nconst toEnrollment = (row: MfaRow): MfaEnrollment => ({\n\tbackupCodeHashes: row.backup_code_hashes,\n\tcreatedAt: row.created_at_ms,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tsmsChallengeId: row.sms_challenge_id ?? undefined,\n\tsmsCodeSentAt: row.sms_code_sent_at_ms ?? undefined,\n\tsmsFailedAttempts: row.sms_failed_attempts,\n\tsmsPendingCodeExpiresAt: row.sms_pending_code_expires_at_ms ?? undefined,\n\tsmsPendingCodeHash: row.sms_pending_code_hash ?? undefined,\n\tsmsPendingPurpose: row.sms_pending_purpose ?? undefined,\n\tsmsPhone: row.sms_phone ?? undefined,\n\tsmsProviderReference: row.sms_provider_reference ?? undefined,\n\tsmsVerified: row.sms_verified,\n\ttotpFailedAttempts: row.totp_failed_attempts,\n\ttotpSecretCiphertext: row.totp_secret_ciphertext ?? undefined,\n\ttotpVerified: row.totp_verified,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nexport const createNeonMfaStore = (databaseUrl: string) =>\n\tcreatePostgresMfaStore(createNeonDatabase(databaseUrl));\nexport const createPostgresMfaStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): MFAStore => {\n\tconst toValues = (enrollment: MfaEnrollment): MfaInsert => ({\n\t\tbackup_code_hashes: enrollment.backupCodeHashes,\n\t\tcreated_at_ms: enrollment.createdAt,\n\t\tlast_used_at_ms: enrollment.lastUsedAt ?? null,\n\t\tsms_challenge_id: enrollment.smsChallengeId ?? null,\n\t\tsms_code_sent_at_ms: enrollment.smsCodeSentAt ?? null,\n\t\tsms_failed_attempts: enrollment.smsFailedAttempts ?? 0,\n\t\tsms_pending_code_expires_at_ms:\n\t\t\tenrollment.smsPendingCodeExpiresAt ?? null,\n\t\tsms_pending_code_hash: enrollment.smsPendingCodeHash ?? null,\n\t\tsms_pending_purpose: enrollment.smsPendingPurpose ?? null,\n\t\tsms_phone: enrollment.smsPhone ?? null,\n\t\tsms_provider_reference: enrollment.smsProviderReference ?? null,\n\t\tsms_verified: enrollment.smsVerified,\n\t\ttotp_failed_attempts: enrollment.totpFailedAttempts ?? 0,\n\t\ttotp_secret_ciphertext: enrollment.totpSecretCiphertext ?? null,\n\t\ttotp_verified: enrollment.totpVerified,\n\t\tupdated_at_ms: enrollment.updatedAt,\n\t\tuser_id: enrollment.userId\n\t});\n\n\treturn {\n\t\tclaimSmsChallenge: async ({\n\t\t\tchallengeId,\n\t\t\tcooldownCutoff,\n\t\t\tenrollment\n\t\t}) => {\n\t\t\tconst values = toValues({\n\t\t\t\t...enrollment,\n\t\t\t\tsmsChallengeId: challengeId\n\t\t\t});\n\t\t\tconst rows = await db\n\t\t\t\t.insert(mfaEnrollmentsTable)\n\t\t\t\t.values(values)\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\tsms_challenge_id: challengeId,\n\t\t\t\t\t\tsms_code_sent_at_ms: enrollment.smsCodeSentAt ?? null,\n\t\t\t\t\t\tsms_failed_attempts: 0,\n\t\t\t\t\t\tsms_pending_code_expires_at_ms:\n\t\t\t\t\t\t\tenrollment.smsPendingCodeExpiresAt ?? null,\n\t\t\t\t\t\tsms_pending_code_hash: null,\n\t\t\t\t\t\tsms_pending_purpose:\n\t\t\t\t\t\t\tenrollment.smsPendingPurpose ?? null,\n\t\t\t\t\t\tsms_phone: enrollment.smsPhone ?? null,\n\t\t\t\t\t\tsms_provider_reference: null,\n\t\t\t\t\t\tsms_verified: enrollment.smsVerified,\n\t\t\t\t\t\tupdated_at_ms: enrollment.updatedAt\n\t\t\t\t\t},\n\t\t\t\t\tsetWhere: or(\n\t\t\t\t\t\tisNull(mfaEnrollmentsTable.sms_code_sent_at_ms),\n\t\t\t\t\t\tlte(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_code_sent_at_ms,\n\t\t\t\t\t\t\tcooldownCutoff\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\ttarget: mfaEnrollmentsTable.user_id\n\t\t\t\t})\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tcompleteSmsChallenge: async ({\n\t\t\tchallengeId,\n\t\t\tlastUsedAt,\n\t\t\tsmsVerified,\n\t\t\tuserId\n\t\t}) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tlast_used_at_ms: lastUsedAt,\n\t\t\t\t\tsms_challenge_id: null,\n\t\t\t\t\tsms_failed_attempts: 0,\n\t\t\t\t\tsms_pending_code_expires_at_ms: null,\n\t\t\t\t\tsms_pending_code_hash: null,\n\t\t\t\t\tsms_pending_purpose: null,\n\t\t\t\t\tsms_provider_reference: null,\n\t\t\t\t\tsms_verified: smsVerified,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tfinalizeSmsChallenge: async (input) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tsms_pending_code_expires_at_ms: input.expiresAt,\n\t\t\t\t\tsms_pending_code_hash: input.hash ?? null,\n\t\t\t\t\tsms_provider_reference: input.providerReference ?? null,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, input.userId),\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_challenge_id,\n\t\t\t\t\t\t\tinput.challengeId\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tgetEnrollment: async (userId) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(mfaEnrollmentsTable)\n\t\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toEnrollment(row) : undefined;\n\t\t},\n\t\tlistEnrollments: async () => {\n\t\t\tconst rows = await db.select().from(mfaEnrollmentsTable);\n\n\t\t\treturn rows.map(toEnrollment);\n\t\t},\n\t\trecordSmsFailure: async ({ challengeId, maxAttempts, userId }) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tsms_failed_attempts: sql`${mfaEnrollmentsTable.sms_failed_attempts} + 1`,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId),\n\t\t\t\t\t\tlte(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_failed_attempts,\n\t\t\t\t\t\t\tmaxAttempts - 1\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({\n\t\t\t\t\tattempts: mfaEnrollmentsTable.sms_failed_attempts\n\t\t\t\t});\n\n\t\t\treturn rows[0]?.attempts;\n\t\t},\n\t\tremoveEnrollment: async (userId) => {\n\t\t\tawait db\n\t\t\t\t.delete(mfaEnrollmentsTable)\n\t\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId));\n\t\t},\n\t\trollbackSmsChallenge: async ({ challengeId, previous, userId }) => {\n\t\t\tif (previous) {\n\t\t\t\tawait db\n\t\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t\t.set(toValues(previous))\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\t\teq(\n\t\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_challenge_id,\n\t\t\t\t\t\t\t\tchallengeId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait db\n\t\t\t\t.delete(mfaEnrollmentsTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t},\n\t\tsaveEnrollment: async (enrollment) => {\n\t\t\tconst values = toValues(enrollment);\n\t\t\tawait db\n\t\t\t\t.insert(mfaEnrollmentsTable)\n\t\t\t\t.values(values)\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: values,\n\t\t\t\t\ttarget: mfaEnrollmentsTable.user_id\n\t\t\t\t});\n\t\t}\n\t};\n};\n",
22
+ "import { and, eq, isNull, lte, or, sql } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\tsmallint,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { MfaEnrollment, MfaFactor, MFAStore } from './types';\n\nconst ID_LENGTH = 255;\nconst PHONE_LENGTH = 20;\n\nexport const mfaEnrollmentsTable = pgTable('auth_mfa_enrollments', {\n\tbackup_code_hashes: jsonb('backup_code_hashes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tmfa_factors: jsonb('mfa_factors').$type<MfaFactor[]>(),\n\tsms_challenge_id: text('sms_challenge_id'),\n\tsms_code_sent_at_ms: bigint('sms_code_sent_at_ms', { mode: 'number' }),\n\tsms_failed_attempts: smallint('sms_failed_attempts').notNull().default(0),\n\tsms_pending_code_expires_at_ms: bigint('sms_pending_code_expires_at_ms', {\n\t\tmode: 'number'\n\t}),\n\tsms_pending_code_hash: text('sms_pending_code_hash'),\n\tsms_pending_factor_id: text('sms_pending_factor_id'),\n\tsms_pending_purpose: text('sms_pending_purpose').$type<\n\t\tMfaEnrollment['smsPendingPurpose']\n\t>(),\n\tsms_phone: varchar('sms_phone', { length: PHONE_LENGTH }),\n\tsms_provider_reference: text('sms_provider_reference'),\n\tsms_verified: boolean('sms_verified').notNull().default(false),\n\ttotp_failed_attempts: smallint('totp_failed_attempts').notNull().default(0),\n\ttotp_secret_ciphertext: text('totp_secret_ciphertext'),\n\ttotp_verified: boolean('totp_verified').notNull().default(false),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype MfaRow = typeof mfaEnrollmentsTable.$inferSelect;\ntype MfaInsert = typeof mfaEnrollmentsTable.$inferInsert;\n\nconst toEnrollment = (row: MfaRow): MfaEnrollment => ({\n\tbackupCodeHashes: row.backup_code_hashes,\n\tcreatedAt: row.created_at_ms,\n\tfactors: row.mfa_factors ?? undefined,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tsmsChallengeId: row.sms_challenge_id ?? undefined,\n\tsmsCodeSentAt: row.sms_code_sent_at_ms ?? undefined,\n\tsmsFailedAttempts: row.sms_failed_attempts,\n\tsmsPendingCodeExpiresAt: row.sms_pending_code_expires_at_ms ?? undefined,\n\tsmsPendingCodeHash: row.sms_pending_code_hash ?? undefined,\n\tsmsPendingFactorId: row.sms_pending_factor_id ?? undefined,\n\tsmsPendingPurpose: row.sms_pending_purpose ?? undefined,\n\tsmsPhone: row.sms_phone ?? undefined,\n\tsmsProviderReference: row.sms_provider_reference ?? undefined,\n\tsmsVerified: row.sms_verified,\n\ttotpFailedAttempts: row.totp_failed_attempts,\n\ttotpSecretCiphertext: row.totp_secret_ciphertext ?? undefined,\n\ttotpVerified: row.totp_verified,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nexport const createNeonMfaStore = (databaseUrl: string) =>\n\tcreatePostgresMfaStore(createNeonDatabase(databaseUrl));\nexport const createPostgresMfaStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): MFAStore => {\n\tconst toValues = (enrollment: MfaEnrollment): MfaInsert => ({\n\t\tbackup_code_hashes: enrollment.backupCodeHashes,\n\t\tcreated_at_ms: enrollment.createdAt,\n\t\tlast_used_at_ms: enrollment.lastUsedAt ?? null,\n\t\tmfa_factors: enrollment.factors ?? null,\n\t\tsms_challenge_id: enrollment.smsChallengeId ?? null,\n\t\tsms_code_sent_at_ms: enrollment.smsCodeSentAt ?? null,\n\t\tsms_failed_attempts: enrollment.smsFailedAttempts ?? 0,\n\t\tsms_pending_code_expires_at_ms:\n\t\t\tenrollment.smsPendingCodeExpiresAt ?? null,\n\t\tsms_pending_code_hash: enrollment.smsPendingCodeHash ?? null,\n\t\tsms_pending_factor_id: enrollment.smsPendingFactorId ?? null,\n\t\tsms_pending_purpose: enrollment.smsPendingPurpose ?? null,\n\t\tsms_phone: enrollment.smsPhone ?? null,\n\t\tsms_provider_reference: enrollment.smsProviderReference ?? null,\n\t\tsms_verified: enrollment.smsVerified,\n\t\ttotp_failed_attempts: enrollment.totpFailedAttempts ?? 0,\n\t\ttotp_secret_ciphertext: enrollment.totpSecretCiphertext ?? null,\n\t\ttotp_verified: enrollment.totpVerified,\n\t\tupdated_at_ms: enrollment.updatedAt,\n\t\tuser_id: enrollment.userId\n\t});\n\n\treturn {\n\t\tclaimSmsChallenge: async ({\n\t\t\tchallengeId,\n\t\t\tcooldownCutoff,\n\t\t\tenrollment\n\t\t}) => {\n\t\t\tconst values = toValues({\n\t\t\t\t...enrollment,\n\t\t\t\tsmsChallengeId: challengeId\n\t\t\t});\n\t\t\tconst rows = await db\n\t\t\t\t.insert(mfaEnrollmentsTable)\n\t\t\t\t.values(values)\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\tmfa_factors: enrollment.factors ?? null,\n\t\t\t\t\t\tsms_challenge_id: challengeId,\n\t\t\t\t\t\tsms_code_sent_at_ms: enrollment.smsCodeSentAt ?? null,\n\t\t\t\t\t\tsms_failed_attempts: 0,\n\t\t\t\t\t\tsms_pending_code_expires_at_ms:\n\t\t\t\t\t\t\tenrollment.smsPendingCodeExpiresAt ?? null,\n\t\t\t\t\t\tsms_pending_code_hash: null,\n\t\t\t\t\t\tsms_pending_factor_id:\n\t\t\t\t\t\t\tenrollment.smsPendingFactorId ?? null,\n\t\t\t\t\t\tsms_pending_purpose:\n\t\t\t\t\t\t\tenrollment.smsPendingPurpose ?? null,\n\t\t\t\t\t\tsms_phone: enrollment.smsPhone ?? null,\n\t\t\t\t\t\tsms_provider_reference: null,\n\t\t\t\t\t\tsms_verified: enrollment.smsVerified,\n\t\t\t\t\t\tupdated_at_ms: enrollment.updatedAt\n\t\t\t\t\t},\n\t\t\t\t\tsetWhere: or(\n\t\t\t\t\t\tisNull(mfaEnrollmentsTable.sms_code_sent_at_ms),\n\t\t\t\t\t\tlte(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_code_sent_at_ms,\n\t\t\t\t\t\t\tcooldownCutoff\n\t\t\t\t\t\t)\n\t\t\t\t\t),\n\t\t\t\t\ttarget: mfaEnrollmentsTable.user_id\n\t\t\t\t})\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tcompleteSmsChallenge: async ({\n\t\t\tchallengeId,\n\t\t\tfactors,\n\t\t\tlastUsedAt,\n\t\t\tsmsVerified,\n\t\t\tuserId\n\t\t}) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tlast_used_at_ms: lastUsedAt,\n\t\t\t\t\tmfa_factors: factors,\n\t\t\t\t\tsms_challenge_id: null,\n\t\t\t\t\tsms_failed_attempts: 0,\n\t\t\t\t\tsms_pending_code_expires_at_ms: null,\n\t\t\t\t\tsms_pending_code_hash: null,\n\t\t\t\t\tsms_pending_factor_id: null,\n\t\t\t\t\tsms_pending_purpose: null,\n\t\t\t\t\tsms_provider_reference: null,\n\t\t\t\t\tsms_verified: smsVerified,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tfinalizeSmsChallenge: async (input) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tsms_pending_code_expires_at_ms: input.expiresAt,\n\t\t\t\t\tsms_pending_code_hash: input.hash ?? null,\n\t\t\t\t\tsms_provider_reference: input.providerReference ?? null,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, input.userId),\n\t\t\t\t\t\teq(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_challenge_id,\n\t\t\t\t\t\t\tinput.challengeId\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({ userId: mfaEnrollmentsTable.user_id });\n\n\t\t\treturn rows.length === 1;\n\t\t},\n\t\tgetEnrollment: async (userId) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(mfaEnrollmentsTable)\n\t\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toEnrollment(row) : undefined;\n\t\t},\n\t\tlistEnrollments: async () => {\n\t\t\tconst rows = await db.select().from(mfaEnrollmentsTable);\n\n\t\t\treturn rows.map(toEnrollment);\n\t\t},\n\t\trecordSmsFailure: async ({ challengeId, maxAttempts, userId }) => {\n\t\t\tconst rows = await db\n\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t.set({\n\t\t\t\t\tsms_failed_attempts: sql`${mfaEnrollmentsTable.sms_failed_attempts} + 1`,\n\t\t\t\t\tupdated_at_ms: Date.now()\n\t\t\t\t})\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId),\n\t\t\t\t\t\tlte(\n\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_failed_attempts,\n\t\t\t\t\t\t\tmaxAttempts - 1\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\t.returning({\n\t\t\t\t\tattempts: mfaEnrollmentsTable.sms_failed_attempts\n\t\t\t\t});\n\n\t\t\treturn rows[0]?.attempts;\n\t\t},\n\t\tremoveEnrollment: async (userId) => {\n\t\t\tawait db\n\t\t\t\t.delete(mfaEnrollmentsTable)\n\t\t\t\t.where(eq(mfaEnrollmentsTable.user_id, userId));\n\t\t},\n\t\trollbackSmsChallenge: async ({ challengeId, previous, userId }) => {\n\t\t\tif (previous) {\n\t\t\t\tawait db\n\t\t\t\t\t.update(mfaEnrollmentsTable)\n\t\t\t\t\t.set(toValues(previous))\n\t\t\t\t\t.where(\n\t\t\t\t\t\tand(\n\t\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\t\teq(\n\t\t\t\t\t\t\t\tmfaEnrollmentsTable.sms_challenge_id,\n\t\t\t\t\t\t\t\tchallengeId\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait db\n\t\t\t\t.delete(mfaEnrollmentsTable)\n\t\t\t\t.where(\n\t\t\t\t\tand(\n\t\t\t\t\t\teq(mfaEnrollmentsTable.user_id, userId),\n\t\t\t\t\t\teq(mfaEnrollmentsTable.sms_challenge_id, challengeId)\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t},\n\t\tsaveEnrollment: async (enrollment) => {\n\t\t\tconst values = toValues(enrollment);\n\t\t\tawait db\n\t\t\t\t.insert(mfaEnrollmentsTable)\n\t\t\t\t.values(values)\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: values,\n\t\t\t\t\ttarget: mfaEnrollmentsTable.user_id\n\t\t\t\t});\n\t\t}\n\t};\n};\n",
23
23
  "import { and, desc, eq, gt, isNull, lt, or, sql } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tjsonb,\n\tpgTable,\n\ttext,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAuthorizationCode,\n\tAuthorizationCodeStore,\n\tBackchannelAuthRequest,\n\tBackchannelAuthStatus,\n\tBackchannelAuthStore,\n\tClientAssertionJtiStore,\n\tClientRegistrationToken,\n\tClientRegistrationTokenStore,\n\tDeviceAuthorization,\n\tDeviceAuthorizationStatus,\n\tDeviceAuthorizationStore,\n\tInitialAccessTokenStore,\n\tLogoutDelivery,\n\tLogoutDeliveryStore,\n\tOAuthClient,\n\tOAuthClientStore,\n\tOidcRefreshToken,\n\tOidcRefreshTokenStore,\n\tPushedAuthorizationRequest,\n\tPushedAuthorizationRequestStore,\n\tSocketTicket,\n\tSocketTicketStore\n} from './types';\n\nconst URL_LENGTH = 2048;\nconst DEFAULT_LIST_LIMIT = 100;\n\nconst ID_LENGTH = 255;\nconst BACKCHANNEL_AUTH_STATUSES = new Set<BackchannelAuthStatus>([\n\t'approved',\n\t'denied',\n\t'pending'\n]);\nconst DEVICE_AUTHORIZATION_STATUSES = new Set<DeviceAuthorizationStatus>([\n\t'approved',\n\t'denied',\n\t'pending'\n]);\n\nconst backchannelAuthStatus = (value: string) => {\n\tfor (const status of BACKCHANNEL_AUTH_STATUSES)\n\t\tif (status === value) return status;\n\n\tthrow new Error(\n\t\t`Invalid persisted backchannel authorization status: ${value}`\n\t);\n};\n\nconst deviceAuthorizationStatus = (value: string) => {\n\tfor (const status of DEVICE_AUTHORIZATION_STATUSES)\n\t\tif (status === value) return status;\n\n\tthrow new Error(`Invalid persisted device authorization status: ${value}`);\n};\n\nexport const oauthBackchannelAuthRequestsTable = pgTable(\n\t'auth_oauth_backchannel_auth_requests',\n\t{\n\t\tauth_req_id: varchar('auth_req_id', { length: ID_LENGTH }).primaryKey(),\n\t\tbinding_message: text('binding_message'),\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinterval_seconds: bigint('interval_seconds', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tlast_polled_at_ms: bigint('last_polled_at_ms', { mode: 'number' }),\n\t\tscopes: text('scopes').array().notNull(),\n\t\tstatus: varchar('status', { length: 16 }).notNull(),\n\t\tuser_sub: varchar('user_sub', { length: ID_LENGTH })\n\t}\n);\nexport const oauthClientAssertionJtisTable = pgTable(\n\t'auth_oauth_client_assertion_jtis',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcomposite_key: varchar('composite_key', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tjti: varchar('jti', { length: ID_LENGTH }).notNull()\n\t}\n);\nexport const oauthClientRegistrationTokensTable = pgTable(\n\t'auth_oauth_client_registration_tokens',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n\t}\n);\nexport const oauthClientsTable = pgTable('auth_oauth_clients', {\n\tbackchannel_logout_uri: varchar('backchannel_logout_uri', {\n\t\tlength: URL_LENGTH\n\t}),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).primaryKey(),\n\thashed_secret: varchar('hashed_secret', { length: ID_LENGTH }),\n\tjwks_json: jsonb('jwks_json').$type<JsonWebKey[]>(),\n\tjwks_uri: varchar('jwks_uri', { length: URL_LENGTH }),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\tpost_logout_redirect_uris: text('post_logout_redirect_uris').array(),\n\tredirect_uris: text('redirect_uris').array().notNull(),\n\trequire_pushed_authorization_requests: boolean(\n\t\t'require_pushed_authorization_requests'\n\t),\n\trequire_signed_request_object: boolean('require_signed_request_object'),\n\tscopes: text('scopes').array().notNull()\n});\nexport const oauthCodesTable = pgTable('auth_oauth_codes', {\n\tacr: varchar('acr', { length: ID_LENGTH }),\n\taudience: varchar('audience', { length: URL_LENGTH }),\n\tclaims_json: jsonb('claims_json').$type<Record<string, unknown>>(),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcode_challenge: varchar('code_challenge', { length: ID_LENGTH }).notNull(),\n\tcode_hash: varchar('code_hash', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdpop_jkt: varchar('dpop_jkt', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tnonce: varchar('nonce', { length: ID_LENGTH }),\n\tredirect_uri: varchar('redirect_uri', { length: ID_LENGTH }).notNull(),\n\tscopes: text('scopes').array().notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const oauthDeviceAuthorizationsTable = pgTable(\n\t'auth_oauth_device_authorizations',\n\t{\n\t\taudience: varchar('audience', { length: 2048 }),\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tdevice_code_hash: varchar('device_code_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinterval_seconds: bigint('interval_seconds', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tscopes: text('scopes').array().notNull(),\n\t\tstatus: varchar('status', { length: 16 }).notNull(),\n\t\tuser_code: varchar('user_code', { length: 16 }).notNull().unique(),\n\t\tuser_sub: varchar('user_sub', { length: ID_LENGTH })\n\t}\n);\nexport const oauthInitialAccessTokensTable = pgTable(\n\t'auth_oauth_initial_access_tokens',\n\t{\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n\t}\n);\nexport const oauthLogoutDeliveriesTable = pgTable(\n\t'auth_oauth_logout_deliveries',\n\t{\n\t\tattempts: bigint('attempts', { mode: 'number' }).notNull(),\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tendpoint_url: varchar('endpoint_url', { length: URL_LENGTH }).notNull(),\n\t\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\t\tlast_error: text('last_error'),\n\t\tlast_status: bigint('last_status', { mode: 'number' }),\n\t\tlogout_token: text('logout_token').notNull(),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t}\n);\nexport const oauthPushedAuthorizationRequestsTable = pgTable(\n\t'auth_oauth_pushed_authorization_requests',\n\t{\n\t\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tparams_json: jsonb('params_json')\n\t\t\t.$type<Record<string, string>>()\n\t\t\t.notNull(),\n\t\trequest_uri_hash: varchar('request_uri_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey()\n\t}\n);\nexport const oauthRefreshTokensTable = pgTable('auth_oauth_refresh_tokens', {\n\tacr: varchar('acr', { length: ID_LENGTH }),\n\taudience: varchar('audience', { length: URL_LENGTH }),\n\tclaims_json: jsonb('claims_json').$type<Record<string, unknown>>(),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tconsumed_token_hashes: text('consumed_token_hashes')\n\t\t.array()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdpop_jkt: varchar('dpop_jkt', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tfamily_id: varchar('family_id', { length: ID_LENGTH }).notNull(),\n\trevoked_at_ms: bigint('revoked_at_ms', { mode: 'number' }),\n\tscopes: text('scopes').array().notNull(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const oauthSocketTicketsTable = pgTable('auth_oauth_socket_tickets', {\n\taudience: varchar('audience', { length: URL_LENGTH }).notNull(),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tscopes: text('scopes').array().notNull(),\n\tsubject: varchar('subject', { length: ID_LENGTH }).notNull(),\n\tticket_hash: varchar('ticket_hash', { length: ID_LENGTH }).primaryKey()\n});\n\ntype ClientRow = typeof oauthClientsTable.$inferSelect;\ntype CodeRow = typeof oauthCodesTable.$inferSelect;\ntype DeviceAuthRow = typeof oauthDeviceAuthorizationsTable.$inferSelect;\ntype LogoutDeliveryRow = typeof oauthLogoutDeliveriesTable.$inferSelect;\ntype RefreshRow = typeof oauthRefreshTokensTable.$inferSelect;\n\nconst toClient = (row: ClientRow): OAuthClient => ({\n\tbackchannelLogoutUri: row.backchannel_logout_uri ?? undefined,\n\tclientId: row.client_id,\n\thashedSecret: row.hashed_secret ?? undefined,\n\tjwks: row.jwks_json ?? undefined,\n\tjwksUri: row.jwks_uri ?? undefined,\n\tname: row.name,\n\tpostLogoutRedirectUris: row.post_logout_redirect_uris ?? undefined,\n\tredirectUris: row.redirect_uris,\n\trequirePushedAuthorizationRequests:\n\t\trow.require_pushed_authorization_requests ?? undefined,\n\trequireSignedRequestObject: row.require_signed_request_object ?? undefined,\n\tscopes: row.scopes\n});\n\nconst toLogoutDelivery = (row: LogoutDeliveryRow): LogoutDelivery => ({\n\tattempts: row.attempts,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tendpointUrl: row.endpoint_url,\n\tid: row.id,\n\tlastError: row.last_error ?? undefined,\n\tlastStatus: row.last_status ?? undefined,\n\tlogoutToken: row.logout_token,\n\tuserId: row.user_id\n});\n\nconst toCode = (row: CodeRow): AuthorizationCode => ({\n\tacr: row.acr ?? undefined,\n\taudience: row.audience ?? undefined,\n\tclaims: row.claims_json ?? undefined,\n\tclientId: row.client_id,\n\tcodeChallenge: row.code_challenge,\n\tcodeHash: row.code_hash,\n\tcreatedAt: row.created_at_ms,\n\tdpopJkt: row.dpop_jkt ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\tnonce: row.nonce ?? undefined,\n\tredirectUri: row.redirect_uri,\n\tscopes: row.scopes,\n\tuserId: row.user_id\n});\n\nconst toCodeValues = (\n\tcode: AuthorizationCode\n): typeof oauthCodesTable.$inferInsert => ({\n\tacr: code.acr ?? null,\n\taudience: code.audience ?? null,\n\tclaims_json: code.claims ?? null,\n\tclient_id: code.clientId,\n\tcode_challenge: code.codeChallenge,\n\tcode_hash: code.codeHash,\n\tcreated_at_ms: code.createdAt,\n\tdpop_jkt: code.dpopJkt ?? null,\n\texpires_at_ms: code.expiresAt,\n\tnonce: code.nonce ?? null,\n\tredirect_uri: code.redirectUri,\n\tscopes: code.scopes,\n\tuser_id: code.userId\n});\n\nconst toDeviceAuth = (row: DeviceAuthRow): DeviceAuthorization => ({\n\taudience: row.audience ?? undefined,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tdeviceCodeHash: row.device_code_hash,\n\texpiresAt: row.expires_at_ms,\n\tintervalSeconds: row.interval_seconds,\n\tscopes: row.scopes,\n\tstatus: deviceAuthorizationStatus(row.status),\n\tuserCode: row.user_code,\n\tuserSub: row.user_sub ?? undefined\n});\n\nconst toRefresh = (row: RefreshRow): OidcRefreshToken => ({\n\tacr: row.acr ?? undefined,\n\taudience: row.audience ?? undefined,\n\tclaims: row.claims_json ?? undefined,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\tdpopJkt: row.dpop_jkt ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\tfamilyId: row.family_id,\n\tscopes: row.scopes,\n\ttokenHash: row.token_hash,\n\tuserId: row.user_id\n});\n\nconst toRefreshValues = (\n\ttoken: OidcRefreshToken\n): typeof oauthRefreshTokensTable.$inferInsert => ({\n\tacr: token.acr ?? null,\n\taudience: token.audience ?? null,\n\tclaims_json: token.claims ?? null,\n\tclient_id: token.clientId,\n\tconsumed_token_hashes: [],\n\tcreated_at_ms: token.createdAt,\n\tdpop_jkt: token.dpopJkt ?? null,\n\texpires_at_ms: token.expiresAt,\n\tfamily_id: token.familyId,\n\trevoked_at_ms: null,\n\tscopes: token.scopes,\n\ttoken_hash: token.tokenHash,\n\tuser_id: token.userId\n});\n\nexport const createNeonAuthorizationCodeStore = (databaseUrl: string) =>\n\tcreatePostgresAuthorizationCodeStore(createNeonDatabase(databaseUrl));\nexport const createNeonClientAssertionJtiStore = (databaseUrl: string) =>\n\tcreatePostgresClientAssertionJtiStore(createNeonDatabase(databaseUrl));\nexport const createNeonClientRegistrationTokenStore = (databaseUrl: string) =>\n\tcreatePostgresClientRegistrationTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonDeviceAuthorizationStore = (databaseUrl: string) =>\n\tcreatePostgresDeviceAuthorizationStore(createNeonDatabase(databaseUrl));\nexport const createNeonInitialAccessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresInitialAccessTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonLogoutDeliveryStore = (databaseUrl: string) =>\n\tcreatePostgresLogoutDeliveryStore(createNeonDatabase(databaseUrl));\nexport const createNeonOAuthClientStore = (databaseUrl: string) =>\n\tcreatePostgresOAuthClientStore(createNeonDatabase(databaseUrl));\nexport const createNeonOidcRefreshTokenStore = (databaseUrl: string) =>\n\tcreatePostgresOidcRefreshTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonPushedAuthorizationRequestStore = (\n\tdatabaseUrl: string\n) =>\n\tcreatePostgresPushedAuthorizationRequestStore(\n\t\tcreateNeonDatabase(databaseUrl)\n\t);\nexport const createPostgresAuthorizationCodeStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AuthorizationCodeStore => ({\n\tconsumeCode: async (codeHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthCodesTable)\n\t\t\t.where(eq(oauthCodesTable.code_hash, codeHash))\n\t\t\t.returning();\n\n\t\treturn row ? toCode(row) : undefined;\n\t},\n\tdeleteForClient: async (clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthCodesTable)\n\t\t\t.where(eq(oauthCodesTable.client_id, clientId))\n\t\t\t.returning({ codeHash: oauthCodesTable.code_hash });\n\n\t\treturn deleted.length;\n\t},\n\tdeleteForUserClient: async (userId, clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthCodesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthCodesTable.user_id, userId),\n\t\t\t\t\teq(oauthCodesTable.client_id, clientId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({ codeHash: oauthCodesTable.code_hash });\n\n\t\treturn deleted.length;\n\t},\n\tsaveCode: async (code) => {\n\t\tawait db.insert(oauthCodesTable).values(toCodeValues(code));\n\t}\n});\nexport const createPostgresClientAssertionJtiStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ClientAssertionJtiStore => ({\n\trecordIfFresh: async (clientId, jti, expiresAt) => {\n\t\t// Lazy GC of expired entries on each call. Bounded by the assertion `exp` window\n\t\t// (~5 min), so this stays cheap even at high call volume.\n\t\tawait db\n\t\t\t.delete(oauthClientAssertionJtisTable)\n\t\t\t.where(lt(oauthClientAssertionJtisTable.expires_at_ms, Date.now()));\n\t\tconst compositeKey = `${clientId}|${jti}`;\n\t\ttry {\n\t\t\tawait db.insert(oauthClientAssertionJtisTable).values({\n\t\t\t\tclient_id: clientId,\n\t\t\t\tcomposite_key: compositeKey,\n\t\t\t\texpires_at_ms: expiresAt,\n\t\t\t\tjti\n\t\t\t});\n\n\t\t\treturn true;\n\t\t} catch {\n\t\t\t// PK collision = we've seen this jti for this client before = replay.\n\t\t\treturn false;\n\t\t}\n\t}\n});\nexport const createPostgresClientRegistrationTokenStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): ClientRegistrationTokenStore => ({\n\tdeleteByClientId: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(oauthClientRegistrationTokensTable)\n\t\t\t.where(eq(oauthClientRegistrationTokensTable.client_id, clientId));\n\t},\n\tdeleteForClient: async (clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthClientRegistrationTokensTable)\n\t\t\t.where(eq(oauthClientRegistrationTokensTable.client_id, clientId))\n\t\t\t.returning({\n\t\t\t\ttokenHash: oauthClientRegistrationTokensTable.token_hash\n\t\t\t});\n\n\t\treturn deleted.length;\n\t},\n\tfindByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthClientRegistrationTokensTable)\n\t\t\t.where(eq(oauthClientRegistrationTokensTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\t\tif (!row) return undefined;\n\t\tconst token: ClientRegistrationToken = {\n\t\t\tclientId: row.client_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\ttokenHash: row.token_hash\n\t\t};\n\n\t\treturn token;\n\t},\n\tsaveToken: async (token) => {\n\t\t// One reg token per client — drop any prior token before saving.\n\t\tawait db\n\t\t\t.delete(oauthClientRegistrationTokensTable)\n\t\t\t.where(\n\t\t\t\teq(oauthClientRegistrationTokensTable.client_id, token.clientId)\n\t\t\t);\n\t\tawait db.insert(oauthClientRegistrationTokensTable).values({\n\t\t\tclient_id: token.clientId,\n\t\t\tcreated_at_ms: token.createdAt,\n\t\t\ttoken_hash: token.tokenHash\n\t\t});\n\t}\n});\nexport const createPostgresDeviceAuthorizationStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): DeviceAuthorizationStore => ({\n\tdeleteByDeviceCodeHash: async (deviceCodeHash) => {\n\t\tawait db\n\t\t\t.delete(oauthDeviceAuthorizationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t);\n\t},\n\tdeleteForClient: async (clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthDeviceAuthorizationsTable)\n\t\t\t.where(eq(oauthDeviceAuthorizationsTable.client_id, clientId))\n\t\t\t.returning({\n\t\t\t\tdeviceCodeHash: oauthDeviceAuthorizationsTable.device_code_hash\n\t\t\t});\n\n\t\treturn deleted.length;\n\t},\n\tdeleteForUserClient: async (userId, clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthDeviceAuthorizationsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthDeviceAuthorizationsTable.user_sub, userId),\n\t\t\t\t\teq(oauthDeviceAuthorizationsTable.client_id, clientId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({\n\t\t\t\tdeviceCodeHash: oauthDeviceAuthorizationsTable.device_code_hash\n\t\t\t});\n\n\t\treturn deleted.length;\n\t},\n\tfindByDeviceCodeHash: async (deviceCodeHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthDeviceAuthorizationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toDeviceAuth(row) : undefined;\n\t},\n\tfindByUserCode: async (userCode) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthDeviceAuthorizationsTable)\n\t\t\t.where(eq(oauthDeviceAuthorizationsTable.user_code, userCode))\n\t\t\t.limit(1);\n\n\t\treturn row ? toDeviceAuth(row) : undefined;\n\t},\n\tsaveDeviceAuthorization: async (deviceAuthorization) => {\n\t\tawait db.insert(oauthDeviceAuthorizationsTable).values({\n\t\t\taudience: deviceAuthorization.audience ?? null,\n\t\t\tclient_id: deviceAuthorization.clientId,\n\t\t\tcreated_at_ms: deviceAuthorization.createdAt,\n\t\t\tdevice_code_hash: deviceAuthorization.deviceCodeHash,\n\t\t\texpires_at_ms: deviceAuthorization.expiresAt,\n\t\t\tinterval_seconds: deviceAuthorization.intervalSeconds,\n\t\t\tscopes: deviceAuthorization.scopes,\n\t\t\tstatus: deviceAuthorization.status,\n\t\t\tuser_code: deviceAuthorization.userCode,\n\t\t\tuser_sub: deviceAuthorization.userSub ?? null\n\t\t});\n\t},\n\tupdateStatus: async (deviceCodeHash, status, userSub) => {\n\t\tawait db\n\t\t\t.update(oauthDeviceAuthorizationsTable)\n\t\t\t.set({ status, user_sub: userSub ?? null })\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthDeviceAuthorizationsTable.device_code_hash,\n\t\t\t\t\tdeviceCodeHash\n\t\t\t\t)\n\t\t\t);\n\t}\n});\nexport const createPostgresInitialAccessTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): InitialAccessTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthInitialAccessTokensTable)\n\t\t\t.where(eq(oauthInitialAccessTokensTable.token_hash, tokenHash))\n\t\t\t.returning({\n\t\t\t\ttoken_hash: oauthInitialAccessTokensTable.token_hash\n\t\t\t});\n\n\t\treturn deleted.length > 0;\n\t}\n});\nexport const createPostgresLogoutDeliveryStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): LogoutDeliveryStore => ({\n\tlistFailed: async (limit = DEFAULT_LIST_LIMIT) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(oauthLogoutDeliveriesTable)\n\t\t\t.orderBy(desc(oauthLogoutDeliveriesTable.created_at_ms))\n\t\t\t.limit(limit);\n\n\t\treturn rows.map(toLogoutDelivery);\n\t},\n\trecordFailure: async (delivery) => {\n\t\tawait db.insert(oauthLogoutDeliveriesTable).values({\n\t\t\tattempts: delivery.attempts,\n\t\t\tclient_id: delivery.clientId,\n\t\t\tcreated_at_ms: delivery.createdAt,\n\t\t\tendpoint_url: delivery.endpointUrl,\n\t\t\tid: delivery.id,\n\t\t\tlast_error: delivery.lastError ?? null,\n\t\t\tlast_status: delivery.lastStatus ?? null,\n\t\t\tlogout_token: delivery.logoutToken,\n\t\t\tuser_id: delivery.userId\n\t\t});\n\t},\n\tremoveFailure: async (deliveryId) => {\n\t\tawait db\n\t\t\t.delete(oauthLogoutDeliveriesTable)\n\t\t\t.where(eq(oauthLogoutDeliveriesTable.id, deliveryId));\n\t}\n});\n// Maps an OAuthClient domain object to the row shape (used by saveClient + updateClient).\nconst toClientValues = (\n\tclient: OAuthClient\n): typeof oauthClientsTable.$inferInsert => ({\n\tbackchannel_logout_uri: client.backchannelLogoutUri ?? null,\n\tclient_id: client.clientId,\n\thashed_secret: client.hashedSecret ?? null,\n\tjwks_json: client.jwks ?? null,\n\tjwks_uri: client.jwksUri ?? null,\n\tname: client.name,\n\tpost_logout_redirect_uris: client.postLogoutRedirectUris ?? null,\n\tredirect_uris: client.redirectUris,\n\trequire_pushed_authorization_requests:\n\t\tclient.requirePushedAuthorizationRequests ?? null,\n\trequire_signed_request_object: client.requireSignedRequestObject ?? null,\n\tscopes: client.scopes\n});\n\nexport const createPostgresOAuthClientStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): OAuthClientStore => ({\n\tdeleteClient: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(oauthClientsTable)\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId));\n\t},\n\tfindClient: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthClientsTable)\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toClient(row) : undefined;\n\t},\n\tsaveClient: async (client) => {\n\t\tawait db.insert(oauthClientsTable).values(toClientValues(client));\n\t},\n\tupdateClient: async (clientId, client) => {\n\t\tawait db\n\t\t\t.update(oauthClientsTable)\n\t\t\t.set(toClientValues(client))\n\t\t\t.where(eq(oauthClientsTable.client_id, clientId));\n\t}\n});\nexport const createPostgresOidcRefreshTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): OidcRefreshTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tor(\n\t\t\t\t\teq(oauthRefreshTokensTable.token_hash, tokenHash),\n\t\t\t\t\tsql`${tokenHash} = ANY(${oauthRefreshTokensTable.consumed_token_hashes})`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning();\n\n\t\treturn row ? toRefresh(row) : undefined;\n\t},\n\tdeleteForClient: async (clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(eq(oauthRefreshTokensTable.client_id, clientId))\n\t\t\t.returning({ tokenHash: oauthRefreshTokensTable.token_hash });\n\n\t\treturn deleted.length;\n\t},\n\tdeleteForUser: async (userId) => {\n\t\tawait db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(eq(oauthRefreshTokensTable.user_id, userId));\n\t},\n\tdeleteForUserClient: async (userId, clientId) => {\n\t\tconst deleted = await db\n\t\t\t.delete(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthRefreshTokensTable.user_id, userId),\n\t\t\t\t\teq(oauthRefreshTokensTable.client_id, clientId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({ tokenHash: oauthRefreshTokensTable.token_hash });\n\n\t\treturn deleted.length;\n\t},\n\tgetToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthRefreshTokensTable.token_hash, tokenHash),\n\t\t\t\t\tisNull(oauthRefreshTokensTable.revoked_at_ms)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toRefresh(row) : undefined;\n\t},\n\tlistClientIdsForUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.selectDistinct({ client_id: oauthRefreshTokensTable.client_id })\n\t\t\t.from(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(oauthRefreshTokensTable.user_id, userId),\n\t\t\t\t\tisNull(oauthRefreshTokensTable.revoked_at_ms),\n\t\t\t\t\tgt(oauthRefreshTokensTable.expires_at_ms, Date.now())\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn rows.map((row) => row.client_id);\n\t},\n\tlistConnections: async () => {\n\t\tconst rows = await db\n\t\t\t.selectDistinct({\n\t\t\t\tclientId: oauthRefreshTokensTable.client_id,\n\t\t\t\tuserId: oauthRefreshTokensTable.user_id\n\t\t\t})\n\t\t\t.from(oauthRefreshTokensTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\tgt(oauthRefreshTokensTable.expires_at_ms, Date.now()),\n\t\t\t\t\tisNull(oauthRefreshTokensTable.revoked_at_ms)\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn rows;\n\t},\n\trevokeByConsumedToken: async (tokenHash) => {\n\t\tconst rows = await db\n\t\t\t.update(oauthRefreshTokensTable)\n\t\t\t.set({ revoked_at_ms: Date.now() })\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\tisNull(oauthRefreshTokensTable.revoked_at_ms),\n\t\t\t\t\tsql`${tokenHash} = ANY(${oauthRefreshTokensTable.consumed_token_hashes})`\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({ familyId: oauthRefreshTokensTable.family_id });\n\n\t\treturn rows.length > 0;\n\t},\n\trotateToken: async (currentTokenHash, replacement) => {\n\t\tconst active = and(\n\t\t\teq(oauthRefreshTokensTable.token_hash, currentTokenHash),\n\t\t\tisNull(oauthRefreshTokensTable.revoked_at_ms)\n\t\t);\n\t\tconst consumed = sql<boolean>`${currentTokenHash} = ANY(${oauthRefreshTokensTable.consumed_token_hashes})`;\n\t\tconst rows = await db\n\t\t\t.update(oauthRefreshTokensTable)\n\t\t\t.set({\n\t\t\t\tacr: sql`CASE WHEN ${active} THEN ${replacement.acr ?? null} ELSE ${oauthRefreshTokensTable.acr} END`,\n\t\t\t\taudience: sql`CASE WHEN ${active} THEN ${replacement.audience ?? null} ELSE ${oauthRefreshTokensTable.audience} END`,\n\t\t\t\tclaims_json: sql`CASE WHEN ${active} THEN ${JSON.stringify(replacement.claims ?? null)}::jsonb ELSE ${oauthRefreshTokensTable.claims_json} END`,\n\t\t\t\tclient_id: sql`CASE WHEN ${active} THEN ${replacement.clientId} ELSE ${oauthRefreshTokensTable.client_id} END`,\n\t\t\t\tconsumed_token_hashes: sql`CASE WHEN ${active} THEN array_append(${oauthRefreshTokensTable.consumed_token_hashes}, ${currentTokenHash}) ELSE ${oauthRefreshTokensTable.consumed_token_hashes} END`,\n\t\t\t\tcreated_at_ms: sql`CASE WHEN ${active} THEN ${replacement.createdAt} ELSE ${oauthRefreshTokensTable.created_at_ms} END`,\n\t\t\t\tdpop_jkt: sql`CASE WHEN ${active} THEN ${replacement.dpopJkt ?? null} ELSE ${oauthRefreshTokensTable.dpop_jkt} END`,\n\t\t\t\texpires_at_ms: sql`CASE WHEN ${active} THEN ${replacement.expiresAt} ELSE ${oauthRefreshTokensTable.expires_at_ms} END`,\n\t\t\t\trevoked_at_ms: sql`CASE WHEN ${consumed} THEN ${Date.now()} ELSE ${oauthRefreshTokensTable.revoked_at_ms} END`,\n\t\t\t\tscopes: sql`CASE WHEN ${active} THEN ${replacement.scopes} ELSE ${oauthRefreshTokensTable.scopes} END`,\n\t\t\t\ttoken_hash: sql`CASE WHEN ${active} THEN ${replacement.tokenHash} ELSE ${oauthRefreshTokensTable.token_hash} END`,\n\t\t\t\tuser_id: sql`CASE WHEN ${active} THEN ${replacement.userId} ELSE ${oauthRefreshTokensTable.user_id} END`\n\t\t\t})\n\t\t\t.where(or(active, consumed))\n\t\t\t.returning({\n\t\t\t\trevokedAt: oauthRefreshTokensTable.revoked_at_ms,\n\t\t\t\ttokenHash: oauthRefreshTokensTable.token_hash\n\t\t\t});\n\n\t\treturn (\n\t\t\trows.length === 1 &&\n\t\t\trows[0]?.revokedAt === null &&\n\t\t\trows[0]?.tokenHash === replacement.tokenHash\n\t\t);\n\t},\n\tsaveToken: async (token) => {\n\t\tawait db.insert(oauthRefreshTokensTable).values(toRefreshValues(token));\n\t}\n});\nexport const createPostgresPushedAuthorizationRequestStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): PushedAuthorizationRequestStore => ({\n\tconsumeRequest: async (requestUriHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthPushedAuthorizationRequestsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\toauthPushedAuthorizationRequestsTable.request_uri_hash,\n\t\t\t\t\trequestUriHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning();\n\t\tif (!row) return undefined;\n\t\t// Lazy GC of expired rows from prior writes — keeps the table thin without a\n\t\t// dedicated cron. Same call returns undefined if THIS request was already expired.\n\t\tawait db\n\t\t\t.delete(oauthPushedAuthorizationRequestsTable)\n\t\t\t.where(\n\t\t\t\tlt(\n\t\t\t\t\toauthPushedAuthorizationRequestsTable.expires_at_ms,\n\t\t\t\t\tDate.now()\n\t\t\t\t)\n\t\t\t);\n\t\tif (row.expires_at_ms < Date.now()) return undefined;\n\t\tconst request: PushedAuthorizationRequest = {\n\t\t\tclientId: row.client_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\texpiresAt: row.expires_at_ms,\n\t\t\tparams: row.params_json,\n\t\t\trequestUriHash: row.request_uri_hash\n\t\t};\n\n\t\treturn request;\n\t},\n\tsaveRequest: async (request) => {\n\t\tawait db.insert(oauthPushedAuthorizationRequestsTable).values({\n\t\t\tclient_id: request.clientId,\n\t\t\tcreated_at_ms: request.createdAt,\n\t\t\texpires_at_ms: request.expiresAt,\n\t\t\tparams_json: request.params,\n\t\t\trequest_uri_hash: request.requestUriHash\n\t\t});\n\t}\n});\n\ntype BackchannelAuthRow = typeof oauthBackchannelAuthRequestsTable.$inferSelect;\n\nconst toBackchannelAuth = (\n\trow: BackchannelAuthRow\n): BackchannelAuthRequest => ({\n\tauthReqId: row.auth_req_id,\n\tbindingMessage: row.binding_message ?? undefined,\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tintervalSeconds: row.interval_seconds,\n\tlastPolledAt: row.last_polled_at_ms ?? undefined,\n\tscopes: row.scopes,\n\tstatus: backchannelAuthStatus(row.status),\n\tuserSub: row.user_sub ?? undefined\n});\n\nexport const createNeonBackchannelAuthStore = (databaseUrl: string) =>\n\tcreatePostgresBackchannelAuthStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresBackchannelAuthStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): BackchannelAuthStore => ({\n\tdeleteByAuthReqId: async (authReqId) => {\n\t\tawait db\n\t\t\t.delete(oauthBackchannelAuthRequestsTable)\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t},\n\tfindByAuthReqId: async (authReqId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(oauthBackchannelAuthRequestsTable)\n\t\t\t.where(eq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toBackchannelAuth(row) : undefined;\n\t},\n\trecordPoll: async (authReqId, polledAt) => {\n\t\tawait db\n\t\t\t.update(oauthBackchannelAuthRequestsTable)\n\t\t\t.set({ last_polled_at_ms: polledAt })\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t},\n\tsaveBackchannelAuth: async (request) => {\n\t\tawait db.insert(oauthBackchannelAuthRequestsTable).values({\n\t\t\tauth_req_id: request.authReqId,\n\t\t\tbinding_message: request.bindingMessage ?? null,\n\t\t\tclient_id: request.clientId,\n\t\t\tcreated_at_ms: request.createdAt,\n\t\t\texpires_at_ms: request.expiresAt,\n\t\t\tinterval_seconds: request.intervalSeconds,\n\t\t\tlast_polled_at_ms: request.lastPolledAt ?? null,\n\t\t\tscopes: request.scopes,\n\t\t\tstatus: request.status,\n\t\t\tuser_sub: request.userSub ?? null\n\t\t});\n\t},\n\tupdateStatus: async (authReqId, status, userSub) => {\n\t\tawait db\n\t\t\t.update(oauthBackchannelAuthRequestsTable)\n\t\t\t.set({ status, user_sub: userSub ?? null })\n\t\t\t.where(\n\t\t\t\teq(oauthBackchannelAuthRequestsTable.auth_req_id, authReqId)\n\t\t\t);\n\t}\n});\n\ntype SocketTicketRow = typeof oauthSocketTicketsTable.$inferSelect;\n\nconst toSocketTicket = (row: SocketTicketRow): SocketTicket => ({\n\taudience: row.audience,\n\tclientId: row.client_id,\n\texpiresAt: row.expires_at_ms,\n\tscopes: row.scopes,\n\tsubject: row.subject,\n\tticketHash: row.ticket_hash\n});\n\nexport const createNeonSocketTicketStore = (databaseUrl: string) =>\n\tcreatePostgresSocketTicketStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSocketTicketStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): SocketTicketStore => ({\n\tconsumeTicket: async (ticketHash, now = Date.now()) => {\n\t\tconst [row] = await db\n\t\t\t.delete(oauthSocketTicketsTable)\n\t\t\t.where(eq(oauthSocketTicketsTable.ticket_hash, ticketHash))\n\t\t\t.returning();\n\t\tif (!row || row.expires_at_ms <= now) return undefined;\n\n\t\treturn toSocketTicket(row);\n\t},\n\tsaveTicket: async (ticket) => {\n\t\tawait db.insert(oauthSocketTicketsTable).values({\n\t\t\taudience: ticket.audience,\n\t\t\tclient_id: ticket.clientId,\n\t\t\texpires_at_ms: ticket.expiresAt,\n\t\t\tscopes: ticket.scopes,\n\t\t\tsubject: ticket.subject,\n\t\t\tticket_hash: ticket.ticketHash\n\t\t});\n\t}\n});\n",
24
24
  "import { and, desc, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tjsonb,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tInvitationState,\n\tMembershipStatus,\n\tOrganization,\n\tOrganizationInvitation,\n\tOrganizationMembership,\n\tOrganizationStore\n} from './types';\n\nconst ID_LENGTH = 255;\nconst NAME_LENGTH = 255;\nconst STATE_LENGTH = 16;\n\nexport const organizationInvitationsTable = pgTable(\n\t'auth_organization_invitations',\n\t{\n\t\taccepted_at_ms: bigint('accepted_at_ms', { mode: 'number' }),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\temail: varchar('email', { length: ID_LENGTH }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tinvitation_id: varchar('invitation_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\tinviter_user_id: varchar('inviter_user_id', { length: ID_LENGTH }),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstate: varchar('state', { length: STATE_LENGTH })\n\t\t\t.$type<InvitationState>()\n\t\t\t.notNull()\n\t\t\t.default('pending'),\n\t\ttoken_hash: varchar('token_hash', { length: ID_LENGTH })\n\t\t\t.notNull()\n\t\t\t.unique()\n\t}\n);\nexport const organizationMembershipsTable = pgTable(\n\t'auth_organization_memberships',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\torganization_id: varchar('organization_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).notNull(),\n\t\troles: jsonb('roles').$type<string[]>().notNull().default([]),\n\t\tstatus: varchar('status', { length: STATE_LENGTH })\n\t\t\t.$type<MembershipStatus>()\n\t\t\t.notNull()\n\t\t\t.default('active'),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.organization_id, table.user_id] })]\n);\nexport const organizationsTable = pgTable('auth_organizations', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tmetadata: jsonb('metadata').$type<Record<string, unknown>>(),\n\tname: varchar('name', { length: NAME_LENGTH }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype OrganizationRow = typeof organizationsTable.$inferSelect;\ntype MembershipRow = typeof organizationMembershipsTable.$inferSelect;\ntype InvitationRow = typeof organizationInvitationsTable.$inferSelect;\ntype OrganizationInsert = typeof organizationsTable.$inferInsert;\ntype MembershipInsert = typeof organizationMembershipsTable.$inferInsert;\ntype InvitationInsert = typeof organizationInvitationsTable.$inferInsert;\n\nconst toOrganization = (row: OrganizationRow): Organization => ({\n\tcreatedAt: row.created_at_ms,\n\tmetadata: row.metadata ?? undefined,\n\tname: row.name,\n\torganizationId: row.organization_id,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toMembership = (row: MembershipRow): OrganizationMembership => ({\n\tcreatedAt: row.created_at_ms,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nconst toInvitation = (row: InvitationRow): OrganizationInvitation => ({\n\tacceptedAt: row.accepted_at_ms ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\tinvitationId: row.invitation_id,\n\tinviterUserId: row.inviter_user_id ?? undefined,\n\torganizationId: row.organization_id,\n\troles: row.roles,\n\tstate: row.state,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonOrganizationStore = (databaseUrl: string) =>\n\tcreatePostgresOrganizationStore(createNeonDatabase(databaseUrl));\nexport const createPostgresOrganizationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): OrganizationStore => ({\n\tdeleteOrganization: async (organizationId) => {\n\t\tawait db\n\t\t\t.delete(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId));\n\t},\n\tgetInvitation: async (invitationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.invitation_id, invitationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetInvitationByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(eq(organizationInvitationsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toInvitation(row) : undefined;\n\t},\n\tgetMembership: async (organizationId, userId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toMembership(row) : undefined;\n\t},\n\tgetOrganization: async (organizationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(organizationsTable)\n\t\t\t.where(eq(organizationsTable.organization_id, organizationId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toOrganization(row) : undefined;\n\t},\n\tlistInvitationsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationInvitationsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationInvitationsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toInvitation);\n\t},\n\tlistMembershipsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\teq(organizationMembershipsTable.organization_id, organizationId)\n\t\t\t);\n\n\t\treturn rows.map(toMembership);\n\t},\n\tlistMembershipsByUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationMembershipsTable)\n\t\t\t.where(eq(organizationMembershipsTable.user_id, userId));\n\n\t\treturn rows.map(toMembership);\n\t},\n\tlistOrganizations: async () => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(organizationsTable)\n\t\t\t.orderBy(desc(organizationsTable.created_at_ms));\n\n\t\treturn rows.map(toOrganization);\n\t},\n\tremoveMembership: async (organizationId, userId) => {\n\t\tawait db\n\t\t\t.delete(organizationMembershipsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\t\torganizationId\n\t\t\t\t\t),\n\t\t\t\t\teq(organizationMembershipsTable.user_id, userId)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tsaveInvitation: async (invitation) => {\n\t\tconst values: InvitationInsert = {\n\t\t\taccepted_at_ms: invitation.acceptedAt ?? null,\n\t\t\tcreated_at_ms: invitation.createdAt,\n\t\t\temail: invitation.email,\n\t\t\texpires_at_ms: invitation.expiresAt,\n\t\t\tinvitation_id: invitation.invitationId,\n\t\t\tinviter_user_id: invitation.inviterUserId ?? null,\n\t\t\torganization_id: invitation.organizationId,\n\t\t\troles: invitation.roles,\n\t\t\tstate: invitation.state,\n\t\t\ttoken_hash: invitation.tokenHash\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationInvitationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: organizationInvitationsTable.invitation_id\n\t\t\t});\n\t},\n\tsaveMembership: async (membership) => {\n\t\tconst values: MembershipInsert = {\n\t\t\tcreated_at_ms: membership.createdAt,\n\t\t\torganization_id: membership.organizationId,\n\t\t\troles: membership.roles,\n\t\t\tstatus: membership.status,\n\t\t\tupdated_at_ms: membership.updatedAt,\n\t\t\tuser_id: membership.userId\n\t\t};\n\t\tawait db\n\t\t\t.insert(organizationMembershipsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [\n\t\t\t\t\torganizationMembershipsTable.organization_id,\n\t\t\t\t\torganizationMembershipsTable.user_id\n\t\t\t\t]\n\t\t\t});\n\t},\n\tsaveOrganization: async (organization) => {\n\t\tconst values: OrganizationInsert = {\n\t\t\tcreated_at_ms: organization.createdAt,\n\t\t\tmetadata: organization.metadata ?? null,\n\t\t\tname: organization.name,\n\t\t\torganization_id: organization.organizationId,\n\t\t\tupdated_at_ms: organization.updatedAt\n\t\t};\n\t\tawait db.insert(organizationsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: organizationsTable.organization_id\n\t\t});\n\t}\n});\n",
25
25
  "import { eq } from 'drizzle-orm';\nimport { bigint, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { PasswordlessToken, PasswordlessTokenStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const passwordlessTokensTable = pgTable('auth_passwordless_tokens', {\n\temail: varchar('email', { length: ID_LENGTH }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).primaryKey()\n});\n\ntype PasswordlessRow = typeof passwordlessTokensTable.$inferSelect;\ntype PasswordlessInsert = typeof passwordlessTokensTable.$inferInsert;\n\nconst toToken = (row: PasswordlessRow): PasswordlessToken => ({\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonPasswordlessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresPasswordlessTokenStore(createNeonDatabase(databaseUrl));\nexport const createPostgresPasswordlessTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): PasswordlessTokenStore => ({\n\tconsumeToken: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.delete(passwordlessTokensTable)\n\t\t\t.where(eq(passwordlessTokensTable.token_hash, tokenHash))\n\t\t\t.returning();\n\n\t\treturn row ? toToken(row) : undefined;\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values: PasswordlessInsert = {\n\t\t\temail: token.email,\n\t\t\texpires_at_ms: token.expiresAt,\n\t\t\ttoken_hash: token.tokenHash\n\t\t};\n\t\tawait db\n\t\t\t.insert(passwordlessTokensTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: passwordlessTokensTable.token_hash\n\t\t\t});\n\t}\n});\n",
@@ -35,10 +35,10 @@
35
35
  "import { desc, eq } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tWebhookDelivery,\n\tWebhookDeliveryStore,\n\tWebhookEvent\n} from './types';\n\nconst ID_LENGTH = 255;\nconst URL_LENGTH = 2048;\nconst DEFAULT_LIST_LIMIT = 100;\n\nexport const webhookDeliveriesTable = pgTable('auth_webhook_deliveries', {\n\tattempts: bigint('attempts', { mode: 'number' }).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tendpoint_url: varchar('endpoint_url', { length: URL_LENGTH }).notNull(),\n\tenvelope_id: varchar('envelope_id', { length: ID_LENGTH }).primaryKey(),\n\tenvelope_json: jsonb('envelope_json').$type<WebhookEvent>().notNull(),\n\tlast_error: text('last_error'),\n\tlast_status: bigint('last_status', { mode: 'number' })\n});\n\ntype DeliveryRow = typeof webhookDeliveriesTable.$inferSelect;\n\nconst toDelivery = (row: DeliveryRow): WebhookDelivery => ({\n\tattempts: row.attempts,\n\tcreatedAt: row.created_at_ms,\n\tendpointUrl: row.endpoint_url,\n\tenvelope: row.envelope_json,\n\tlastError: row.last_error ?? undefined,\n\tlastStatus: row.last_status ?? undefined\n});\n\nexport const createNeonWebhookDeliveryStore = (databaseUrl: string) =>\n\tcreatePostgresWebhookDeliveryStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresWebhookDeliveryStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): WebhookDeliveryStore => ({\n\tlistFailed: async (limit = DEFAULT_LIST_LIMIT) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(webhookDeliveriesTable)\n\t\t\t.orderBy(desc(webhookDeliveriesTable.created_at_ms))\n\t\t\t.limit(limit);\n\n\t\treturn rows.map(toDelivery);\n\t},\n\trecordFailure: async (delivery) => {\n\t\tawait db.insert(webhookDeliveriesTable).values({\n\t\t\tattempts: delivery.attempts,\n\t\t\tcreated_at_ms: delivery.createdAt,\n\t\t\tendpoint_url: delivery.endpointUrl,\n\t\t\tenvelope_id: delivery.envelope.id,\n\t\t\tenvelope_json: delivery.envelope,\n\t\t\tlast_error: delivery.lastError ?? null,\n\t\t\tlast_status: delivery.lastStatus ?? null\n\t\t});\n\t},\n\tremoveFailure: async (envelopeId) => {\n\t\tawait db\n\t\t\t.delete(webhookDeliveriesTable)\n\t\t\t.where(eq(webhookDeliveriesTable.envelope_id, envelopeId));\n\t}\n});\n",
36
36
  "// Translate the package's existing `pgTable` definitions into `CREATE TABLE IF NOT EXISTS`\n// SQL, so each block's migration is derived from the same drizzle schema the runtime store\n// already uses. Eliminates the transcription-drift risk of hand-writing CREATE TABLEs that\n// have to stay in sync with the table definitions in `src/<block>/postgresStores.ts`.\n//\n// What this covers: column name + type + nullability + default + primary key + unique +\n// composite primary key. Doesn't cover: foreign keys (none of the package's tables use\n// them across blocks — sub-keys are referenced by id without referential integrity),\n// indices (consumers can add their own per their workload), check constraints (none in\n// the schema). If a block ever needs any of those, hand-write that migration entry\n// alongside the auto-generated one.\n\nimport { is, SQL } from 'drizzle-orm';\nimport {\n\tgetTableConfig,\n\ttype PgColumn,\n\ttype PgTable\n} from 'drizzle-orm/pg-core';\n\n// Defaults declared with drizzle's `sql\\`...\\`` template are `SQL` objects; render them as\n// raw SQL expressions (e.g. `now()`) instead of letting them fall into the generic-object\n// JSON branch, which would emit a `{\"queryChunks\":[...]}::jsonb` literal.\nconst renderChunk = (chunk: unknown) => {\n\tif (chunk === null || typeof chunk !== 'object') return String(chunk);\n\tconst value = Reflect.get(chunk, 'value');\n\tif (Array.isArray(value)) return value.map((part) => String(part)).join('');\n\n\treturn '';\n};\n\nconst formatSqlTemplate = (value: SQL) =>\n\tvalue.queryChunks.map(renderChunk).join('');\n\nconst formatDefault = (value: unknown) => {\n\tif (value === null || value === undefined) return 'NULL';\n\tif (is(value, SQL)) return formatSqlTemplate(value);\n\tif (typeof value === 'string') return `'${value.replace(/'/gu, \"''\")}'`;\n\tif (typeof value === 'boolean') return value ? 'true' : 'false';\n\tif (typeof value === 'number') return String(value);\n\tif (Array.isArray(value) || typeof value === 'object') {\n\t\treturn `'${JSON.stringify(value)}'::jsonb`;\n\t}\n\n\treturn String(value);\n};\n\n/**\n * The column's SQL type, brackets included.\n *\n * Drizzle 1.0 stopped giving array columns their own class: `.array()` records\n * a dimension count on the same column and `getSQLType()` reports only the\n * element type. Taking that at face value writes `scopes text` where\n * `scopes text[]` was meant, and nothing complains at migration time -- an\n * array written to a text column is silently stringified to `{a,b}` and read\n * back as a string, so the damage surfaces far away, as\n * `scopes.join is not a function` on the first token exchange.\n */\nconst columnSqlType = (column: PgColumn) => {\n\tconst dimensions = Reflect.get(column, 'dimensions');\n\tconst elementType = column.getSQLType();\n\n\treturn typeof dimensions === 'number' && dimensions > 0\n\t\t? `${elementType}${'[]'.repeat(dimensions)}`\n\t\t: elementType;\n};\n\nconst columnSql = (column: PgColumn) => {\n\tconst parts = [`\"${column.name}\"`, columnSqlType(column)];\n\tif (column.primary) parts.push('PRIMARY KEY');\n\tif (column.notNull && !column.primary) parts.push('NOT NULL');\n\tif (column.hasDefault && column.default !== undefined) {\n\t\tparts.push(`DEFAULT ${formatDefault(column.default)}`);\n\t}\n\tif (column.isUnique) parts.push('UNIQUE');\n\n\treturn parts.join(' ');\n};\n\nconst compositePkLine = (compositePk: readonly PgColumn[]) =>\n\t`PRIMARY KEY (${compositePk.map((column) => `\"${column.name}\"`).join(', ')})`;\n\n// Emit a single `CREATE TABLE IF NOT EXISTS` for one table. Idempotent — re-running is a\n// no-op even when the consumer already wired the table by hand. The composite-PK case is\n// handled separately because Drizzle splits it out of the column metadata.\nconst tableToCreateSql = (table: PgTable) => {\n\tconst cfg = getTableConfig(table);\n\tconst columnLines = cfg.columns.map(columnSql);\n\tconst singlePk = cfg.columns.find((column) => column.primary);\n\tconst compositePk = cfg.primaryKeys[0]?.columns ?? [];\n\tconst lines =\n\t\tsinglePk === undefined && compositePk.length > 0\n\t\t\t? [...columnLines, compositePkLine(compositePk)]\n\t\t\t: columnLines;\n\tconst body = lines.map((line) => `\\t${line}`).join(',\\n');\n\n\treturn `CREATE TABLE IF NOT EXISTS \"${cfg.name}\" (\\n${body}\\n);`;\n};\n\n// Block migrations are always declared as one `0001_init` covering every table the block\n// owns + (rare) hand-written follow-up ids for schema changes. This helper does the init\n// step — pass every table you want included.\nexport const tablesToInitSql = (tables: PgTable[]) =>\n\ttables.map(tableToCreateSql).join('\\n\\n');\n",
37
37
  "// Migration runner. Uses `@neondatabase/serverless`'s Pool (already a package dep) so\n// consumers don't need to install drizzle-kit or a separate migrator. The Pool client\n// supports multi-statement queries (a block's init migration emits one CREATE TABLE per\n// table joined by `;`), which the HTTP `neon()` function does not.\n//\n// Tracks applied migrations in an `auth_migrations` table keyed by `${block}/${id}`.\n// Idempotent — re-running is a no-op when everything's been applied.\n//\n// Consumers can invoke programmatically (`await runMigrations({ databaseUrl })`) at boot\n// or via the bundled CLI (`bunx absolute-auth migrate --db $DATABASE_URL`).\n\nimport { Pool } from '@neondatabase/serverless';\nimport { blockMigrations, type BlockName } from './index';\n\nexport type RunMigrationsOptions = {\n\t/** Existing SQL client. When provided, the runner does not create or close a pool. */\n\tclient?: MigrationClient;\n\t/** Postgres connection string used by the default Neon-compatible pool. */\n\tdatabaseUrl?: string;\n\t/** Subset of blocks to apply. Omit to apply every block the package ships. */\n\tblocks?: BlockName[];\n\t/** Optional logger; defaults to console.log. Pass `() => undefined` for silent mode. */\n\tlog?: (message: string) => void;\n};\n\nexport type MigrationRunResult = {\n\tapplied: string[];\n\tskipped: string[];\n};\n\nexport type MigrationQueryResult = {\n\trows: unknown[];\n};\n\nexport type MigrationClient = {\n\tquery: (\n\t\ttext: string,\n\t\tvalues?: readonly unknown[]\n\t) => Promise<MigrationQueryResult>;\n};\n\nconst JOURNAL_DDL = `CREATE TABLE IF NOT EXISTS \"auth_migrations\" (\n\t\"id\" text PRIMARY KEY,\n\t\"applied_at_ms\" bigint NOT NULL\n);`;\n\ntype JournalRow = { id: string };\n\nconst isJournalRow = (value: unknown): value is JournalRow =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\ttypeof Reflect.get(value, 'id') === 'string';\n\nconst isBlockName = (value: string): value is BlockName =>\n\tObject.hasOwn(blockMigrations, value);\n\nconst allBlockNames = () => Object.keys(blockMigrations).filter(isBlockName);\n\nconst applyOne = async (\n\tclient: MigrationClient,\n\tid: string,\n\tsql: string,\n\tlog: (message: string) => void\n) => {\n\tawait client.query(sql);\n\tawait client.query(\n\t\t`INSERT INTO \"auth_migrations\" (\"id\", \"applied_at_ms\") VALUES ($1, $2)`,\n\t\t[id, Date.now()]\n\t);\n\tlog(`apply ${id}`);\n};\n\nconst runOne = async (\n\tclient: MigrationClient,\n\tid: string,\n\tsql: string,\n\tapplied: Set<string>,\n\tresult: MigrationRunResult,\n\tlog: (message: string) => void\n) => {\n\tif (applied.has(id)) {\n\t\tresult.skipped.push(id);\n\t\tlog(`skip ${id}`);\n\n\t\treturn;\n\t}\n\tawait applyOne(client, id, sql, log);\n\tresult.applied.push(id);\n};\n\nexport const runMigrations = async ({\n\tblocks,\n\tclient,\n\tdatabaseUrl,\n\tlog = console.log\n}: RunMigrationsOptions) => {\n\tlet ownedPool: Pool | undefined;\n\tlet migrationClient: MigrationClient;\n\tif (client !== undefined) {\n\t\tmigrationClient = client;\n\t} else {\n\t\tif (databaseUrl === undefined)\n\t\t\tthrow new Error('runMigrations requires databaseUrl or client');\n\t\townedPool = new Pool({ connectionString: databaseUrl });\n\t\tmigrationClient = ownedPool;\n\t}\n\tconst result: MigrationRunResult = { applied: [], skipped: [] };\n\n\ttry {\n\t\tawait migrationClient.query(JOURNAL_DDL);\n\t\tconst journal = await migrationClient.query(\n\t\t\t`SELECT \"id\" FROM \"auth_migrations\"`\n\t\t);\n\t\tconst applied = new Set(\n\t\t\tjournal.rows.filter(isJournalRow).map((row) => row.id)\n\t\t);\n\n\t\tconst selected = blocks ?? allBlockNames();\n\t\tconst flat = selected.flatMap((block) =>\n\t\t\tblockMigrations[block].migrations.map((migration) => ({\n\t\t\t\tid: `${block}/${migration.id}`,\n\t\t\t\tsql: migration.sql\n\t\t\t}))\n\t\t);\n\n\t\tawait flat.reduce(async (prior, item) => {\n\t\t\tawait prior;\n\n\t\t\treturn runOne(\n\t\t\t\tmigrationClient,\n\t\t\t\titem.id,\n\t\t\t\titem.sql,\n\t\t\t\tapplied,\n\t\t\t\tresult,\n\t\t\t\tlog\n\t\t\t);\n\t\t}, Promise.resolve());\n\t} finally {\n\t\tawait ownedPool?.end();\n\t}\n\n\treturn result;\n};\n",
38
- "// Single export of every block's migrations. Consumers pick which blocks they enabled\n// in `auth()` and pass that subset to `runMigrations({ blocks: [...] })`, or omit `blocks`\n// to apply every migration the package ships. Adding a new block's migrations: import its\n// tables here + add to the `blockMigrations` map.\n\nimport {\n\tknownDevicesTable,\n\tloginHistoryTable\n} from '../adaptive/postgresStores';\nimport {\n\taccessTokensTable,\n\tapiClientsTable,\n\tapiKeysTable\n} from '../apikeys/postgresStores';\nimport {\n\tagentDelegationsTable,\n\tagentIdentityRegistrationsTable,\n\tagentRegistrationsTable\n} from '../agents/postgresStores';\nimport { auditEventsTable } from '../audit/postgresAuditStore';\nimport {\n\tcredentialResetTokensTable,\n\tcredentialVerificationTokensTable,\n\tcredentialsTable\n} from '../credentials/postgresCredentialStore';\nimport { warrantsTable } from '../fga/postgresStores';\nimport {\n\tlinkedProviderBindingsTable,\n\tlinkedProviderGrantsTable\n} from '../linkedProviders/neonStores';\nimport { lockoutsTable } from '../lockout/postgresLockoutStore';\nimport { mfaEnrollmentsTable } from '../mfa/postgresMfaStore';\nimport {\n\toauthBackchannelAuthRequestsTable,\n\toauthClientAssertionJtisTable,\n\toauthClientRegistrationTokensTable,\n\toauthClientsTable,\n\toauthCodesTable,\n\toauthDeviceAuthorizationsTable,\n\toauthInitialAccessTokensTable,\n\toauthLogoutDeliveriesTable,\n\toauthPushedAuthorizationRequestsTable,\n\toauthRefreshTokensTable,\n\toauthSocketTicketsTable\n} from '../oidc/postgresStores';\nimport {\n\torganizationInvitationsTable,\n\torganizationMembershipsTable,\n\torganizationsTable\n} from '../organizations/postgresOrganizationStore';\nimport { passwordlessTokensTable } from '../passwordless/postgresPasswordlessTokenStore';\nimport { setupSessionsTable } from '../portal/postgresSetupSessionStore';\nimport { rolesTable } from '../roles/postgresRoleStore';\nimport { scimTokensTable } from '../scim/postgresScimTokenStore';\nimport {\n\tauthSessionsTable,\n\tauthUnregisteredSessionsTable\n} from '../session/neonStore';\nimport { samlServiceProvidersTable } from '../sso/postgresSamlServiceProviderStore';\nimport { ssoConnectionsTable } from '../sso/postgresSsoConnectionStore';\nimport {\n\tvcCredentialNoncesTable,\n\tvcCredentialOffersTable,\n\tvcPresentationRequestsTable\n} from '../vc/postgresVcStores';\nimport { vaultEntriesTable } from '../vault/postgresVaultStore';\nimport { webauthnCredentialsTable } from '../webauthn/postgresWebAuthnCredentialStore';\nimport { webhookDeliveriesTable } from '../webhooks/postgresStore';\nimport { tablesToInitSql } from './generate';\nimport type { BlockMigrations, Migration } from './types';\n\nexport type BlockName =\n\t| 'adaptive'\n\t| 'agents'\n\t| 'apikeys'\n\t| 'audit'\n\t| 'credentials'\n\t| 'fga'\n\t| 'linkedProviders'\n\t| 'lockout'\n\t| 'mfa'\n\t| 'oidc'\n\t| 'organizations'\n\t| 'passwordless'\n\t| 'portal'\n\t| 'roles'\n\t| 'scim'\n\t| 'sessions'\n\t| 'sso'\n\t| 'vault'\n\t| 'vc'\n\t| 'webauthn'\n\t| 'webhooks';\n\nconst initMigration = (\n\tblock: BlockName,\n\ttables: Parameters<typeof tablesToInitSql>[0]\n): BlockMigrations => ({\n\tblock,\n\tmigrations: [{ id: '0001_init', sql: tablesToInitSql(tables) }]\n});\n\n// Additive SMS-factor columns for the `mfa` block. Fresh installs already get these via the\n// generated `0001_init` CREATE TABLE; this `ALTER ... ADD COLUMN IF NOT EXISTS` brings tables\n// created before the SMS factor up to date. Idempotent — safe to re-run.\nconst mfaSmsColumnsMigration: Migration = {\n\tid: '0002_sms_factor',\n\tsql: [\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_phone\" varchar(20);',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_verified\" boolean NOT NULL DEFAULT false;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_code_hash\" text;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_code_expires_at_ms\" bigint;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_failed_attempts\" smallint NOT NULL DEFAULT 0;'\n\t].join('\\n')\n};\n\nconst credentialDeferredUserMigration: Migration = {\n\tid: '0002_deferred_user_creation',\n\tsql: 'ALTER TABLE \"auth_credentials\" ADD COLUMN IF NOT EXISTS \"registration_data\" jsonb;'\n};\n\n// Additive TOTP-lockout column for the `mfa` block. Tracks consecutive failed TOTP/backup-code\n// verifications at the login challenge, independent of the first-factor (password) lockout.\n// Fresh installs get it via `0001_init`; this brings older tables up to date. Idempotent.\nconst mfaTotpLockoutMigration: Migration = {\n\tid: '0003_totp_lockout',\n\tsql: 'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"totp_failed_attempts\" smallint NOT NULL DEFAULT 0;'\n};\n\nconst mfaSmsDeliveryPolicyMigration: Migration = {\n\tid: '0004_sms_delivery_policy',\n\tsql: [\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_code_sent_at_ms\" bigint;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_purpose\" text;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_provider_reference\" text;'\n\t].join('\\n')\n};\n\nconst mfaSmsAtomicChallengeMigration: Migration = {\n\tid: '0005_sms_atomic_challenge',\n\tsql: 'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_challenge_id\" text;'\n};\n\nconst oidcResourceAudienceMigration: Migration = {\n\tid: '0002_resource_audience',\n\tsql: [\n\t\t'ALTER TABLE \"auth_oauth_codes\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);'\n\t].join('\\n')\n};\n\nconst oidcRefreshTokenFamiliesMigration: Migration = {\n\tid: '0003_refresh_token_families',\n\tsql: [\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"family_id\" varchar(255);',\n\t\t'UPDATE \"auth_oauth_refresh_tokens\" SET \"family_id\" = \"token_hash\" WHERE \"family_id\" IS NULL;',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ALTER COLUMN \"family_id\" SET NOT NULL;',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"consumed_token_hashes\" text[] NOT NULL DEFAULT ARRAY[]::text[];',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"revoked_at_ms\" bigint;'\n\t].join('\\n')\n};\n\nconst oidcSocketTicketsMigration: Migration = {\n\tid: '0004_socket_tickets',\n\tsql: tablesToInitSql([oauthSocketTicketsTable])\n};\n\nconst oidcDeviceAudienceMigration: Migration = {\n\tid: '0005_device_resource_audience',\n\tsql: 'ALTER TABLE \"auth_oauth_device_authorizations\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);'\n};\n\nconst sessionOAuthSubjectMigration: Migration = {\n\tid: '0002_oauth_subject',\n\tsql: [\n\t\t'ALTER TABLE \"auth_sessions\" ADD COLUMN IF NOT EXISTS \"oauth_subject_json\" jsonb;',\n\t\t'ALTER TABLE \"auth_unregistered_sessions\" ADD COLUMN IF NOT EXISTS \"oauth_subject_json\" jsonb;'\n\t].join('\\n')\n};\n\nexport const blockMigrations: Record<BlockName, BlockMigrations> = {\n\tadaptive: initMigration('adaptive', [knownDevicesTable, loginHistoryTable]),\n\tagents: {\n\t\tblock: 'agents',\n\t\tmigrations: [\n\t\t\t...initMigration('agents', [\n\t\t\t\tagentRegistrationsTable,\n\t\t\t\tagentDelegationsTable,\n\t\t\t\tagentIdentityRegistrationsTable\n\t\t\t]).migrations,\n\t\t\t{\n\t\t\t\tid: '0002_identity_registration',\n\t\t\t\tsql: tablesToInitSql([agentIdentityRegistrationsTable])\n\t\t\t}\n\t\t]\n\t},\n\tapikeys: initMigration('apikeys', [\n\t\taccessTokensTable,\n\t\tapiClientsTable,\n\t\tapiKeysTable\n\t]),\n\taudit: initMigration('audit', [auditEventsTable]),\n\tcredentials: {\n\t\tblock: 'credentials',\n\t\tmigrations: [\n\t\t\t...initMigration('credentials', [\n\t\t\t\tcredentialsTable,\n\t\t\t\tcredentialResetTokensTable,\n\t\t\t\tcredentialVerificationTokensTable\n\t\t\t]).migrations,\n\t\t\tcredentialDeferredUserMigration\n\t\t]\n\t},\n\tfga: initMigration('fga', [warrantsTable]),\n\tlinkedProviders: initMigration('linkedProviders', [\n\t\tlinkedProviderBindingsTable,\n\t\tlinkedProviderGrantsTable\n\t]),\n\tlockout: initMigration('lockout', [lockoutsTable]),\n\tmfa: {\n\t\tblock: 'mfa',\n\t\tmigrations: [\n\t\t\t...initMigration('mfa', [mfaEnrollmentsTable]).migrations,\n\t\t\tmfaSmsColumnsMigration,\n\t\t\tmfaTotpLockoutMigration,\n\t\t\tmfaSmsDeliveryPolicyMigration,\n\t\t\tmfaSmsAtomicChallengeMigration\n\t\t]\n\t},\n\toidc: {\n\t\tblock: 'oidc',\n\t\tmigrations: [\n\t\t\t...initMigration('oidc', [\n\t\t\t\toauthBackchannelAuthRequestsTable,\n\t\t\t\toauthClientAssertionJtisTable,\n\t\t\t\toauthClientRegistrationTokensTable,\n\t\t\t\toauthClientsTable,\n\t\t\t\toauthCodesTable,\n\t\t\t\toauthDeviceAuthorizationsTable,\n\t\t\t\toauthInitialAccessTokensTable,\n\t\t\t\toauthLogoutDeliveriesTable,\n\t\t\t\toauthPushedAuthorizationRequestsTable,\n\t\t\t\toauthRefreshTokensTable,\n\t\t\t\toauthSocketTicketsTable\n\t\t\t]).migrations,\n\t\t\toidcResourceAudienceMigration,\n\t\t\toidcRefreshTokenFamiliesMigration,\n\t\t\toidcSocketTicketsMigration,\n\t\t\toidcDeviceAudienceMigration\n\t\t]\n\t},\n\torganizations: initMigration('organizations', [\n\t\torganizationsTable,\n\t\torganizationMembershipsTable,\n\t\torganizationInvitationsTable\n\t]),\n\tpasswordless: initMigration('passwordless', [passwordlessTokensTable]),\n\tportal: initMigration('portal', [setupSessionsTable]),\n\troles: initMigration('roles', [rolesTable]),\n\tscim: initMigration('scim', [scimTokensTable]),\n\tsessions: {\n\t\tblock: 'sessions',\n\t\tmigrations: [\n\t\t\t...initMigration('sessions', [\n\t\t\t\tauthSessionsTable,\n\t\t\t\tauthUnregisteredSessionsTable\n\t\t\t]).migrations,\n\t\t\tsessionOAuthSubjectMigration\n\t\t]\n\t},\n\tsso: initMigration('sso', [ssoConnectionsTable, samlServiceProvidersTable]),\n\tvault: initMigration('vault', [vaultEntriesTable]),\n\tvc: initMigration('vc', [\n\t\tvcCredentialOffersTable,\n\t\tvcCredentialNoncesTable,\n\t\tvcPresentationRequestsTable\n\t]),\n\twebauthn: initMigration('webauthn', [webauthnCredentialsTable]),\n\twebhooks: initMigration('webhooks', [webhookDeliveriesTable])\n};\n\nexport { runMigrations } from './runner';\nexport type {\n\tMigrationClient,\n\tMigrationQueryResult,\n\tMigrationRunResult,\n\tRunMigrationsOptions\n} from './runner';\nexport type { Migration, BlockMigrations } from './types';\n",
38
+ "// Single export of every block's migrations. Consumers pick which blocks they enabled\n// in `auth()` and pass that subset to `runMigrations({ blocks: [...] })`, or omit `blocks`\n// to apply every migration the package ships. Adding a new block's migrations: import its\n// tables here + add to the `blockMigrations` map.\n\nimport {\n\tknownDevicesTable,\n\tloginHistoryTable\n} from '../adaptive/postgresStores';\nimport {\n\taccessTokensTable,\n\tapiClientsTable,\n\tapiKeysTable\n} from '../apikeys/postgresStores';\nimport {\n\tagentDelegationsTable,\n\tagentIdentityRegistrationsTable,\n\tagentRegistrationsTable\n} from '../agents/postgresStores';\nimport { auditEventsTable } from '../audit/postgresAuditStore';\nimport {\n\tcredentialResetTokensTable,\n\tcredentialVerificationTokensTable,\n\tcredentialsTable\n} from '../credentials/postgresCredentialStore';\nimport { warrantsTable } from '../fga/postgresStores';\nimport {\n\tlinkedProviderBindingsTable,\n\tlinkedProviderGrantsTable\n} from '../linkedProviders/neonStores';\nimport { lockoutsTable } from '../lockout/postgresLockoutStore';\nimport { mfaEnrollmentsTable } from '../mfa/postgresMfaStore';\nimport {\n\toauthBackchannelAuthRequestsTable,\n\toauthClientAssertionJtisTable,\n\toauthClientRegistrationTokensTable,\n\toauthClientsTable,\n\toauthCodesTable,\n\toauthDeviceAuthorizationsTable,\n\toauthInitialAccessTokensTable,\n\toauthLogoutDeliveriesTable,\n\toauthPushedAuthorizationRequestsTable,\n\toauthRefreshTokensTable,\n\toauthSocketTicketsTable\n} from '../oidc/postgresStores';\nimport {\n\torganizationInvitationsTable,\n\torganizationMembershipsTable,\n\torganizationsTable\n} from '../organizations/postgresOrganizationStore';\nimport { passwordlessTokensTable } from '../passwordless/postgresPasswordlessTokenStore';\nimport { setupSessionsTable } from '../portal/postgresSetupSessionStore';\nimport { rolesTable } from '../roles/postgresRoleStore';\nimport { scimTokensTable } from '../scim/postgresScimTokenStore';\nimport {\n\tauthSessionsTable,\n\tauthUnregisteredSessionsTable\n} from '../session/neonStore';\nimport { samlServiceProvidersTable } from '../sso/postgresSamlServiceProviderStore';\nimport { ssoConnectionsTable } from '../sso/postgresSsoConnectionStore';\nimport {\n\tvcCredentialNoncesTable,\n\tvcCredentialOffersTable,\n\tvcPresentationRequestsTable\n} from '../vc/postgresVcStores';\nimport { vaultEntriesTable } from '../vault/postgresVaultStore';\nimport { webauthnCredentialsTable } from '../webauthn/postgresWebAuthnCredentialStore';\nimport { webhookDeliveriesTable } from '../webhooks/postgresStore';\nimport { tablesToInitSql } from './generate';\nimport type { BlockMigrations, Migration } from './types';\n\nexport type BlockName =\n\t| 'adaptive'\n\t| 'agents'\n\t| 'apikeys'\n\t| 'audit'\n\t| 'credentials'\n\t| 'fga'\n\t| 'linkedProviders'\n\t| 'lockout'\n\t| 'mfa'\n\t| 'oidc'\n\t| 'organizations'\n\t| 'passwordless'\n\t| 'portal'\n\t| 'roles'\n\t| 'scim'\n\t| 'sessions'\n\t| 'sso'\n\t| 'vault'\n\t| 'vc'\n\t| 'webauthn'\n\t| 'webhooks';\n\nconst initMigration = (\n\tblock: BlockName,\n\ttables: Parameters<typeof tablesToInitSql>[0]\n): BlockMigrations => ({\n\tblock,\n\tmigrations: [{ id: '0001_init', sql: tablesToInitSql(tables) }]\n});\n\n// Additive SMS-factor columns for the `mfa` block. Fresh installs already get these via the\n// generated `0001_init` CREATE TABLE; this `ALTER ... ADD COLUMN IF NOT EXISTS` brings tables\n// created before the SMS factor up to date. Idempotent — safe to re-run.\nconst mfaSmsColumnsMigration: Migration = {\n\tid: '0002_sms_factor',\n\tsql: [\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_phone\" varchar(20);',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_verified\" boolean NOT NULL DEFAULT false;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_code_hash\" text;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_code_expires_at_ms\" bigint;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_failed_attempts\" smallint NOT NULL DEFAULT 0;'\n\t].join('\\n')\n};\n\nconst credentialDeferredUserMigration: Migration = {\n\tid: '0002_deferred_user_creation',\n\tsql: 'ALTER TABLE \"auth_credentials\" ADD COLUMN IF NOT EXISTS \"registration_data\" jsonb;'\n};\n\n// Additive TOTP-lockout column for the `mfa` block. Tracks consecutive failed TOTP/backup-code\n// verifications at the login challenge, independent of the first-factor (password) lockout.\n// Fresh installs get it via `0001_init`; this brings older tables up to date. Idempotent.\nconst mfaTotpLockoutMigration: Migration = {\n\tid: '0003_totp_lockout',\n\tsql: 'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"totp_failed_attempts\" smallint NOT NULL DEFAULT 0;'\n};\n\nconst mfaSmsDeliveryPolicyMigration: Migration = {\n\tid: '0004_sms_delivery_policy',\n\tsql: [\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_code_sent_at_ms\" bigint;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_purpose\" text;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_provider_reference\" text;'\n\t].join('\\n')\n};\n\nconst mfaSmsAtomicChallengeMigration: Migration = {\n\tid: '0005_sms_atomic_challenge',\n\tsql: 'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_challenge_id\" text;'\n};\n\nconst mfaMultipleFactorsMigration: Migration = {\n\tid: '0006_multiple_factors',\n\tsql: [\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"mfa_factors\" jsonb;',\n\t\t'ALTER TABLE \"auth_mfa_enrollments\" ADD COLUMN IF NOT EXISTS \"sms_pending_factor_id\" text;'\n\t].join('\\n')\n};\n\nconst oidcResourceAudienceMigration: Migration = {\n\tid: '0002_resource_audience',\n\tsql: [\n\t\t'ALTER TABLE \"auth_oauth_codes\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);'\n\t].join('\\n')\n};\n\nconst oidcRefreshTokenFamiliesMigration: Migration = {\n\tid: '0003_refresh_token_families',\n\tsql: [\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"family_id\" varchar(255);',\n\t\t'UPDATE \"auth_oauth_refresh_tokens\" SET \"family_id\" = \"token_hash\" WHERE \"family_id\" IS NULL;',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ALTER COLUMN \"family_id\" SET NOT NULL;',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"consumed_token_hashes\" text[] NOT NULL DEFAULT ARRAY[]::text[];',\n\t\t'ALTER TABLE \"auth_oauth_refresh_tokens\" ADD COLUMN IF NOT EXISTS \"revoked_at_ms\" bigint;'\n\t].join('\\n')\n};\n\nconst oidcSocketTicketsMigration: Migration = {\n\tid: '0004_socket_tickets',\n\tsql: tablesToInitSql([oauthSocketTicketsTable])\n};\n\nconst oidcDeviceAudienceMigration: Migration = {\n\tid: '0005_device_resource_audience',\n\tsql: 'ALTER TABLE \"auth_oauth_device_authorizations\" ADD COLUMN IF NOT EXISTS \"audience\" varchar(2048);'\n};\n\nconst sessionOAuthSubjectMigration: Migration = {\n\tid: '0002_oauth_subject',\n\tsql: [\n\t\t'ALTER TABLE \"auth_sessions\" ADD COLUMN IF NOT EXISTS \"oauth_subject_json\" jsonb;',\n\t\t'ALTER TABLE \"auth_unregistered_sessions\" ADD COLUMN IF NOT EXISTS \"oauth_subject_json\" jsonb;'\n\t].join('\\n')\n};\n\nexport const blockMigrations: Record<BlockName, BlockMigrations> = {\n\tadaptive: initMigration('adaptive', [knownDevicesTable, loginHistoryTable]),\n\tagents: {\n\t\tblock: 'agents',\n\t\tmigrations: [\n\t\t\t...initMigration('agents', [\n\t\t\t\tagentRegistrationsTable,\n\t\t\t\tagentDelegationsTable,\n\t\t\t\tagentIdentityRegistrationsTable\n\t\t\t]).migrations,\n\t\t\t{\n\t\t\t\tid: '0002_identity_registration',\n\t\t\t\tsql: tablesToInitSql([agentIdentityRegistrationsTable])\n\t\t\t}\n\t\t]\n\t},\n\tapikeys: initMigration('apikeys', [\n\t\taccessTokensTable,\n\t\tapiClientsTable,\n\t\tapiKeysTable\n\t]),\n\taudit: initMigration('audit', [auditEventsTable]),\n\tcredentials: {\n\t\tblock: 'credentials',\n\t\tmigrations: [\n\t\t\t...initMigration('credentials', [\n\t\t\t\tcredentialsTable,\n\t\t\t\tcredentialResetTokensTable,\n\t\t\t\tcredentialVerificationTokensTable\n\t\t\t]).migrations,\n\t\t\tcredentialDeferredUserMigration\n\t\t]\n\t},\n\tfga: initMigration('fga', [warrantsTable]),\n\tlinkedProviders: initMigration('linkedProviders', [\n\t\tlinkedProviderBindingsTable,\n\t\tlinkedProviderGrantsTable\n\t]),\n\tlockout: initMigration('lockout', [lockoutsTable]),\n\tmfa: {\n\t\tblock: 'mfa',\n\t\tmigrations: [\n\t\t\t...initMigration('mfa', [mfaEnrollmentsTable]).migrations,\n\t\t\tmfaSmsColumnsMigration,\n\t\t\tmfaTotpLockoutMigration,\n\t\t\tmfaSmsDeliveryPolicyMigration,\n\t\t\tmfaSmsAtomicChallengeMigration,\n\t\t\tmfaMultipleFactorsMigration\n\t\t]\n\t},\n\toidc: {\n\t\tblock: 'oidc',\n\t\tmigrations: [\n\t\t\t...initMigration('oidc', [\n\t\t\t\toauthBackchannelAuthRequestsTable,\n\t\t\t\toauthClientAssertionJtisTable,\n\t\t\t\toauthClientRegistrationTokensTable,\n\t\t\t\toauthClientsTable,\n\t\t\t\toauthCodesTable,\n\t\t\t\toauthDeviceAuthorizationsTable,\n\t\t\t\toauthInitialAccessTokensTable,\n\t\t\t\toauthLogoutDeliveriesTable,\n\t\t\t\toauthPushedAuthorizationRequestsTable,\n\t\t\t\toauthRefreshTokensTable,\n\t\t\t\toauthSocketTicketsTable\n\t\t\t]).migrations,\n\t\t\toidcResourceAudienceMigration,\n\t\t\toidcRefreshTokenFamiliesMigration,\n\t\t\toidcSocketTicketsMigration,\n\t\t\toidcDeviceAudienceMigration\n\t\t]\n\t},\n\torganizations: initMigration('organizations', [\n\t\torganizationsTable,\n\t\torganizationMembershipsTable,\n\t\torganizationInvitationsTable\n\t]),\n\tpasswordless: initMigration('passwordless', [passwordlessTokensTable]),\n\tportal: initMigration('portal', [setupSessionsTable]),\n\troles: initMigration('roles', [rolesTable]),\n\tscim: initMigration('scim', [scimTokensTable]),\n\tsessions: {\n\t\tblock: 'sessions',\n\t\tmigrations: [\n\t\t\t...initMigration('sessions', [\n\t\t\t\tauthSessionsTable,\n\t\t\t\tauthUnregisteredSessionsTable\n\t\t\t]).migrations,\n\t\t\tsessionOAuthSubjectMigration\n\t\t]\n\t},\n\tsso: initMigration('sso', [ssoConnectionsTable, samlServiceProvidersTable]),\n\tvault: initMigration('vault', [vaultEntriesTable]),\n\tvc: initMigration('vc', [\n\t\tvcCredentialOffersTable,\n\t\tvcCredentialNoncesTable,\n\t\tvcPresentationRequestsTable\n\t]),\n\twebauthn: initMigration('webauthn', [webauthnCredentialsTable]),\n\twebhooks: initMigration('webhooks', [webhookDeliveriesTable])\n};\n\nexport { runMigrations } from './runner';\nexport type {\n\tMigrationClient,\n\tMigrationQueryResult,\n\tMigrationRunResult,\n\tRunMigrationsOptions\n} from './runner';\nexport type { Migration, BlockMigrations } from './types';\n",
39
39
  "#!/usr/bin/env bun\n// CLI dispatcher. The bin entry `absolute-auth` lands here; the first\n// positional decides which subcommand we run.\n//\n// bunx absolute-auth migrate --db <url> [--blocks block1,block2,...]\n// bunx absolute-auth import <source> <file> --db <url> [--commit]\n//\n// Subcommands:\n// migrate apply the package's Drizzle migrations\n// import read a user export from another auth library, insert into our schema\n// help print this message\n\nimport { importers, runImport } from './import';\nimport { blockMigrations, type BlockName, runMigrations } from '../migrations';\n\nconst TOP_USAGE = `Usage:\n bunx absolute-auth <command> [options]\n\nCommands:\n migrate Apply the package's Drizzle migrations\n import <source> <file> Import a user export from another auth library\n <source> is one of: ${Object.keys(importers).sort().join(', ')}\n help Print this message\n\nRun 'bunx absolute-auth <command> --help' for command-specific options.\n`;\n\nconst MIGRATE_USAGE = `Usage:\n bunx absolute-auth migrate --db <url> [--blocks block1,block2,...]\n\nOptions:\n --db, --database-url Postgres connection string (falls back to DATABASE_URL env)\n --blocks Comma-separated subset of blocks to apply (default: all)\n --help Print this message\n\nAvailable blocks: ${Object.keys(blockMigrations).sort().join(', ')}\n`;\n\nconst IMPORT_USAGE = `Usage:\n bunx absolute-auth import <source> <file> --db <url> [--commit]\n\nArguments:\n source one of: ${Object.keys(importers).sort().join(', ')}\n file path to the export JSON (see docs/MIGRATE-FROM-*.md per source)\n\nOptions:\n --db, --database-url Postgres connection string (falls back to DATABASE_URL env)\n --commit Without this, the run is a dry-run (counts only, no inserts)\n --help Print this message\n`;\n\ntype MigrateArgs = {\n\tblocks: string[] | undefined;\n\tdatabaseUrl: string | undefined;\n\thelp: boolean;\n};\n\nconst isBlockName = (value: string): value is BlockName =>\n\tObject.hasOwn(blockMigrations, value);\n\nconst applyMigrateFlag = (\n\tparsed: MigrateArgs,\n\targs: string[],\n\tflag: string | undefined\n) => {\n\tif (flag === '--help' || flag === '-h') {\n\t\tparsed.help = true;\n\n\t\treturn;\n\t}\n\tif (flag === '--db' || flag === '--database-url') {\n\t\tparsed.databaseUrl = args.shift();\n\n\t\treturn;\n\t}\n\tif (flag !== '--blocks') return;\n\tconst list = args.shift() ?? '';\n\tparsed.blocks = list\n\t\t.split(',')\n\t\t.map((entry) => entry.trim())\n\t\t.filter((entry) => entry.length > 0);\n};\n\nconst parseMigrateArgs = (argv: string[]) => {\n\tconst parsed: MigrateArgs = {\n\t\tblocks: undefined,\n\t\tdatabaseUrl: undefined,\n\t\thelp: false\n\t};\n\tconst args = [...argv];\n\twhile (args.length > 0) {\n\t\tapplyMigrateFlag(parsed, args, args.shift());\n\t}\n\n\treturn parsed;\n};\n\ntype ImportArgs = {\n\tcommit: boolean;\n\tdatabaseUrl: string | undefined;\n\tfile: string | undefined;\n\thelp: boolean;\n\tsource: string | undefined;\n};\n\nconst applyImportArgument = (\n\tparsed: ImportArgs,\n\targs: string[],\n\tpositionals: string[],\n\tnext: string | undefined\n) => {\n\tif (next === undefined) return;\n\tif (next === '--help' || next === '-h') {\n\t\tparsed.help = true;\n\n\t\treturn;\n\t}\n\tif (next === '--db' || next === '--database-url') {\n\t\tparsed.databaseUrl = args.shift();\n\n\t\treturn;\n\t}\n\tif (next === '--commit') {\n\t\tparsed.commit = true;\n\n\t\treturn;\n\t}\n\tif (!next.startsWith('--')) positionals.push(next);\n};\n\nconst parseImportArgs = (argv: string[]) => {\n\tconst parsed: ImportArgs = {\n\t\tcommit: false,\n\t\tdatabaseUrl: undefined,\n\t\tfile: undefined,\n\t\thelp: false,\n\t\tsource: undefined\n\t};\n\tconst args = [...argv];\n\tconst positionals: string[] = [];\n\twhile (args.length > 0) {\n\t\tapplyImportArgument(parsed, args, positionals, args.shift());\n\t}\n\tconst [source, file] = positionals;\n\tparsed.source = source;\n\tparsed.file = file;\n\n\treturn parsed;\n};\n\nconst die = (message: string, usage: string) => {\n\tprocess.stderr.write(`error: ${message}\\n\\n`);\n\tprocess.stderr.write(usage);\n\tprocess.exit(1);\n};\n\nconst runMigrate = async (argv: string[]) => {\n\tconst { blocks, databaseUrl, help } = parseMigrateArgs(argv);\n\tif (help) {\n\t\tprocess.stdout.write(MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst resolved = databaseUrl ?? process.env['DATABASE_URL'];\n\tif (resolved === undefined || resolved.length === 0) {\n\t\tdie('a Postgres URL is required (--db or DATABASE_URL)', MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst unknown =\n\t\tblocks?.filter((block) => !(block in blockMigrations)) ?? [];\n\tif (unknown.length > 0) {\n\t\tdie(`unknown block(s): ${unknown.join(', ')}`, MIGRATE_USAGE);\n\n\t\treturn;\n\t}\n\tconst selectedBlocks = blocks?.filter(isBlockName);\n\tconst result = await runMigrations({\n\t\tblocks: selectedBlocks,\n\t\tdatabaseUrl: resolved\n\t});\n\tprocess.stdout.write(\n\t\t`\\n${result.applied.length} migration(s) applied, ${result.skipped.length} skipped.\\n`\n\t);\n};\n\nconst runImportCommand = async (argv: string[]) => {\n\tconst { commit, databaseUrl, file, help, source } = parseImportArgs(argv);\n\tif (help) {\n\t\tprocess.stdout.write(IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tif (source === undefined) {\n\t\tdie('source is required', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tconst importer = importers[source];\n\tif (importer === undefined) {\n\t\tdie(`unknown source \"${source}\"`, IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tif (file === undefined) {\n\t\tdie('file path is required', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\tconst resolved = databaseUrl ?? process.env['DATABASE_URL'];\n\tif (resolved === undefined || resolved.length === 0) {\n\t\tdie('a Postgres URL is required (--db or DATABASE_URL)', IMPORT_USAGE);\n\n\t\treturn;\n\t}\n\n\tprocess.stdout.write(`[${source}] parsing ${file}…\\n`);\n\tconst result = await importer.parse(file);\n\tprocess.stdout.write(\n\t\t`[${source}] parsed ${result.users.length} user(s), ${result.identities.length} identity row(s).\\n`\n\t);\n\tconst counts = await runImport(result, { commit, databaseUrl: resolved });\n\tif (commit) {\n\t\tprocess.stdout.write(\n\t\t\t`[${source}] inserted ${counts.userCount} user(s), ${counts.identityCount} new identity row(s). ✓\\n`\n\t\t);\n\t} else {\n\t\tprocess.stdout.write(\n\t\t\t`[${source}] dry-run — pass --commit to insert.\\n`\n\t\t);\n\t}\n};\n\nconst main = async () => {\n\tconst argv = process.argv.slice(2);\n\tconst command = argv.shift();\n\tif (command === undefined || command === 'help' || command === '--help') {\n\t\tprocess.stdout.write(TOP_USAGE);\n\n\t\treturn;\n\t}\n\tif (command === 'migrate') {\n\t\tawait runMigrate(argv);\n\n\t\treturn;\n\t}\n\tif (command === 'import') {\n\t\tawait runImportCommand(argv);\n\n\t\treturn;\n\t}\n\tdie(`unknown command \"${command}\"`, TOP_USAGE);\n};\n\nawait main();\n"
40
40
  ],
41
- "mappings": "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",
42
- "debugId": "A94ED948A86827BA64756E2164756E21",
41
+ "mappings": "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",
42
+ "debugId": "56E24220E33BD93664756E2164756E21",
43
43
  "names": []
44
44
  }