@absolutejs/auth 0.56.19 → 0.57.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.
Files changed (51) hide show
  1. package/dist/agents/index.js +44 -37
  2. package/dist/agents/index.js.map +7 -7
  3. package/dist/audit/postgresAuditStore.d.ts +1 -1
  4. package/dist/audit/types.d.ts +2 -0
  5. package/dist/audit/wrap.d.ts +4 -2
  6. package/dist/cli/import/auth0.d.ts +1 -1
  7. package/dist/cli/import/clerk.d.ts +1 -1
  8. package/dist/cli/import/lucia.d.ts +1 -1
  9. package/dist/cli/import/nextauth.d.ts +1 -1
  10. package/dist/cli/import/types.d.ts +1 -0
  11. package/dist/cli/migrate.js +91 -47
  12. package/dist/cli/migrate.js.map +14 -13
  13. package/dist/client/react.d.ts +21 -21
  14. package/dist/client/react.js +35 -37
  15. package/dist/client/react.js.map +6 -6
  16. package/dist/client/solid.d.ts +21 -21
  17. package/dist/client/solid.js +24 -24
  18. package/dist/client/solid.js.map +3 -3
  19. package/dist/client/svelte.d.ts +21 -21
  20. package/dist/client/svelte.js +25 -25
  21. package/dist/client/svelte.js.map +3 -3
  22. package/dist/client/vue.d.ts +21 -21
  23. package/dist/client/vue.js +32 -32
  24. package/dist/client/vue.js.map +3 -3
  25. package/dist/credentials/import.d.ts +16 -1
  26. package/dist/credentials/register.d.ts +1 -1
  27. package/dist/credentials/routes.d.ts +1 -1
  28. package/dist/fingerprint-client/index.js +4 -3
  29. package/dist/fingerprint-client/index.js.map +3 -3
  30. package/dist/index.d.ts +3 -3
  31. package/dist/index.js +6416 -262
  32. package/dist/index.js.map +166 -26
  33. package/dist/manifest.js +3713 -271
  34. package/dist/manifest.js.map +30 -4
  35. package/dist/manifest.json +3 -2
  36. package/dist/oidc/clientIdMetadata.d.ts +1 -5
  37. package/dist/oidc/index.js.map +2 -2
  38. package/dist/oidc/vci.d.ts +1 -1
  39. package/dist/routes/callback.d.ts +1 -1
  40. package/dist/server.js +6412 -261
  41. package/dist/server.js.map +166 -26
  42. package/dist/session/neonStore.d.ts +2 -2
  43. package/dist/session/redisStore.d.ts +2 -2
  44. package/dist/session/types.d.ts +2 -0
  45. package/dist/stores/postgres.d.ts +2 -2
  46. package/dist/types.d.ts +2 -1
  47. package/dist/vault/index.js.map +2 -2
  48. package/dist/webauthn.js +27 -1
  49. package/dist/webauthn.js.map +3 -3
  50. package/docs/MIGRATE-FROM-LUCIA.md +19 -2
  51. package/package.json +1 -1
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/cli/import/index.ts", "../../src/cli/import/auth0.ts", "../../src/cli/import/clerk.ts", "../../src/cli/import/lucia.ts", "../../src/cli/import/nextauth.ts", "../../src/cli/import/supabase.ts", "../../src/adaptive/postgresStores.ts", "../../src/stores/postgres.ts", "../../src/apikeys/postgresStores.ts", "../../src/agents/postgresStores.ts", "../../src/audit/postgresAuditStore.ts", "../../src/credentials/postgresCredentialStore.ts", "../../src/fga/postgresStores.ts", "../../src/linkedProviders/neonStores.ts", "../../node_modules/citra/dist/index.js", "../../src/lockout/postgresLockoutStore.ts", "../../src/mfa/postgresMfaStore.ts", "../../src/oidc/postgresStores.ts", "../../src/organizations/postgresOrganizationStore.ts", "../../src/passwordless/postgresPasswordlessTokenStore.ts", "../../src/portal/postgresSetupSessionStore.ts", "../../src/roles/postgresRoleStore.ts", "../../src/scim/postgresScimTokenStore.ts", "../../src/session/neonStore.ts", "../../src/sso/postgresSamlServiceProviderStore.ts", "../../src/sso/postgresSsoConnectionStore.ts", "../../src/vc/postgresVcStores.ts", "../../src/vault/postgresVaultStore.ts", "../../src/webauthn/postgresWebAuthnCredentialStore.ts", "../../src/webhooks/postgresStore.ts", "../../src/migrations/generate.ts", "../../src/migrations/runner.ts", "../../src/migrations/index.ts", "../../src/cli/migrate.ts"],
3
+ "sources": ["../../src/cli/import/index.ts", "../../src/cli/import/auth0.ts", "../../src/cli/import/types.ts", "../../src/cli/import/clerk.ts", "../../src/cli/import/lucia.ts", "../../src/cli/import/nextauth.ts", "../../src/cli/import/supabase.ts", "../../src/adaptive/postgresStores.ts", "../../src/stores/postgres.ts", "../../src/apikeys/postgresStores.ts", "../../src/agents/postgresStores.ts", "../../src/audit/postgresAuditStore.ts", "../../src/credentials/postgresCredentialStore.ts", "../../src/fga/postgresStores.ts", "../../src/linkedProviders/neonStores.ts", "../../node_modules/citra/dist/index.js", "../../src/lockout/postgresLockoutStore.ts", "../../src/mfa/postgresMfaStore.ts", "../../src/oidc/postgresStores.ts", "../../src/organizations/postgresOrganizationStore.ts", "../../src/passwordless/postgresPasswordlessTokenStore.ts", "../../src/portal/postgresSetupSessionStore.ts", "../../src/roles/postgresRoleStore.ts", "../../src/scim/postgresScimTokenStore.ts", "../../src/session/neonStore.ts", "../../src/sso/postgresSamlServiceProviderStore.ts", "../../src/sso/postgresSsoConnectionStore.ts", "../../src/vc/postgresVcStores.ts", "../../src/vault/postgresVaultStore.ts", "../../src/webauthn/postgresWebAuthnCredentialStore.ts", "../../src/webhooks/postgresStore.ts", "../../src/migrations/generate.ts", "../../src/migrations/runner.ts", "../../src/migrations/index.ts", "../../src/cli/migrate.ts"],
4
4
  "sourcesContent": [
5
5
  "// Dispatcher for the `import` subcommand. Picks the right per-source\n// parser (`auth0` / `clerk` / `supabase` / `lucia` / `nextauth`), runs\n// it against the export file, and writes the resulting users +\n// identities into the @absolutejs/auth schema via Postgres.\n//\n// One subcommand entry point, one dispatch table, one writer. Adding a\n// new source means: drop a `<source>.ts` parser that returns\n// `ImportResult`, register it here, done.\n\nimport { neon } from '@neondatabase/serverless';\nimport { auth0Importer } from './auth0';\nimport { clerkImporter } from './clerk';\nimport { luciaImporter } from './lucia';\nimport { nextauthImporter } from './nextauth';\nimport { supabaseImporter } from './supabase';\nimport type { ImportResult, Importer } from './types';\n\nexport const importers: Record<string, Importer> = {\n\tauth0: auth0Importer,\n\tclerk: clerkImporter,\n\tlucia: luciaImporter,\n\tnextauth: nextauthImporter,\n\tsupabase: supabaseImporter\n};\n\nexport type ImportOptions = {\n\tcommit: boolean;\n\tdatabaseUrl: string;\n};\n\n// Write the parsed records into the DB. Pre-flight by checking the\n// `users` + `auth_identities` tables exist (the consumer should have\n// run `bunx absolute-auth migrate` first). The writer assigns a fresh\n// UUID `sub` to each imported user — we don't reuse the source's\n// primary key as our `sub`, because most sources hand out short opaque\n// strings that aren't UUIDs.\nexport const runImport = async (\n\tresult: ImportResult,\n\toptions: ImportOptions\n) => {\n\tconst sql = neon(options.databaseUrl);\n\n\t// Map source externalId → fresh UUID sub so we can link identities\n\t// after the user inserts land.\n\tconst subByExternalId = new Map<string, string>();\n\tfor (const user of result.users) {\n\t\tsubByExternalId.set(user.externalId, crypto.randomUUID());\n\t}\n\n\tif (!options.commit) {\n\t\t// Dry run: just summarise.\n\t\treturn {\n\t\t\tidentityCount: result.identities.length,\n\t\t\tuserCount: result.users.length\n\t\t};\n\t}\n\n\t// Real run: insert users one at a time (per-source uniqueness keys\n\t// vary; INSERT ... ON CONFLICT DO NOTHING on email keeps the writer\n\t// idempotent for repeated runs).\n\tfor (const user of result.users) {\n\t\tconst sub = subByExternalId.get(user.externalId);\n\t\tawait sql`\n\t\t\tINSERT INTO users (sub, email, password, family_name, given_name, email_verified, created_at)\n\t\t\tVALUES (\n\t\t\t\t${sub},\n\t\t\t\t${user.email.toLowerCase().trim()},\n\t\t\t\t${user.passwordHash ?? null},\n\t\t\t\t${user.familyName ?? null},\n\t\t\t\t${user.givenName ?? null},\n\t\t\t\t${user.emailVerified},\n\t\t\t\tto_timestamp(${user.createdAtMs} / 1000.0)\n\t\t\t)\n\t\t\tON CONFLICT (email) DO NOTHING\n\t\t`;\n\t}\n\n\t// Insert identities. Skip rows whose source user we didn't insert\n\t// (e.g. email-collision dedupe). The lookup goes through email\n\t// because `subByExternalId` is in-process — we need to resolve the\n\t// canonical sub from whatever's in the DB now.\n\tlet insertedIdentities = 0;\n\tfor (const identity of result.identities) {\n\t\tconst sub = subByExternalId.get(identity.userExternalId);\n\t\tif (sub === undefined) continue;\n\t\tconst inserted = await sql`\n\t\t\tINSERT INTO auth_identities (id, auth_provider, provider_subject, user_sub, metadata)\n\t\t\tVALUES (\n\t\t\t\t${`${identity.authProvider}:${identity.providerSubject}`},\n\t\t\t\t${identity.authProvider},\n\t\t\t\t${identity.providerSubject},\n\t\t\t\t${sub},\n\t\t\t\t${identity.metadata ?? {}}\n\t\t\t)\n\t\t\tON CONFLICT (auth_provider, provider_subject) DO NOTHING\n\t\t\tRETURNING id\n\t\t`;\n\t\tif (Array.isArray(inserted) && inserted.length > 0)\n\t\t\tinsertedIdentities++;\n\t}\n\n\treturn {\n\t\tidentityCount: insertedIdentities,\n\t\tuserCount: result.users.length\n\t};\n};\n",
6
- "// Auth0 user export importer.\n//\n// Auth0's user export comes as a JSON or NDJSON file (depending on which\n// export endpoint you used). Each line/object is a user with this shape\n// (fields you'll always see):\n//\n// {\n// \"user_id\": \"auth0|663c...\",\n// \"email\": \"alice@example.com\",\n// \"email_verified\": true,\n// \"name\": \"Alice\",\n// \"given_name\": \"Alice\",\n// \"family_name\": \"Smith\",\n// \"created_at\": \"2024-03-12T...\",\n// \"identities\": [\n// { \"provider\": \"auth0\", \"user_id\": \"663c...\", \"connection\": \"Username-Password-Authentication\" },\n// { \"provider\": \"google-oauth2\", \"user_id\": \"11839...\", ...}\n// ],\n// \"password_hash\": \"$2b$10$...\" // present if export-with-passwords was enabled\n// }\n//\n// Get the export via: Auth0 dashboard → User Management → Users → Export.\n// Or programmatically: POST /api/v2/jobs/users-exports with fields=password_hash.\n// Auth0 hashes with bcrypt by default; verbatim copy works.\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype Auth0Identity = {\n\tconnection?: string;\n\tprovider: string;\n\tuser_id: string;\n};\n\ntype Auth0User = {\n\tcreated_at?: string;\n\temail: string;\n\temail_verified?: boolean;\n\tfamily_name?: string;\n\tgiven_name?: string;\n\tidentities?: Auth0Identity[];\n\tname?: string;\n\tpassword_hash?: string;\n\tuser_id: string;\n};\n\nconst parseUsersFromText = (text: string): Auth0User[] => {\n\tconst trimmed = text.trim();\n\tif (trimmed.startsWith('[')) {\n\t\treturn JSON.parse(trimmed) as Auth0User[];\n\t}\n\n\t// NDJSON — one user per line.\n\treturn trimmed\n\t\t.split('\\n')\n\t\t.filter((line) => line.length > 0)\n\t\t.map((line) => JSON.parse(line) as Auth0User);\n};\n\nexport const auth0Importer: Importer = {\n\tsource: 'auth0',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst auth0Users = parseUsersFromText(text);\n\n\t\tconst users = auth0Users.map((raw) => ({\n\t\t\tcreatedAtMs:\n\t\t\t\traw.created_at === undefined\n\t\t\t\t\t? Date.now()\n\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\temail: raw.email,\n\t\t\temailVerified: raw.email_verified ?? false,\n\t\t\texternalId: raw.user_id,\n\t\t\tfamilyName: raw.family_name,\n\t\t\tgivenName: raw.given_name,\n\t\t\tpasswordHash: raw.password_hash,\n\t\t\tpasswordHashAlgo:\n\t\t\t\traw.password_hash?.startsWith('$2b$') ||\n\t\t\t\traw.password_hash?.startsWith('$2a$') ||\n\t\t\t\traw.password_hash?.startsWith('$2y$')\n\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t: undefined\n\t\t}));\n\n\t\t// Auth0 always has at least one identity (the auth0 connection\n\t\t// itself); skip that one. Real OAuth identities are\n\t\t// google-oauth2 / github / apple / etc.\n\t\tconst identities = auth0Users.flatMap((raw) =>\n\t\t\t(raw.identities ?? [])\n\t\t\t\t.filter((identity) => identity.provider !== 'auth0')\n\t\t\t\t.map((identity) => ({\n\t\t\t\t\tauthProvider: identity.provider.replace('-oauth2', ''),\n\t\t\t\t\tcreatedAtMs:\n\t\t\t\t\t\traw.created_at === undefined\n\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\t\t\tmetadata:\n\t\t\t\t\t\tidentity.connection === undefined\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: { connection: identity.connection },\n\t\t\t\t\tproviderSubject: identity.user_id,\n\t\t\t\t\tuserExternalId: raw.user_id\n\t\t\t\t}))\n\t\t);\n\n\t\treturn { identities, source: 'auth0', users };\n\t}\n};\n",
7
- "// Clerk user export importer.\n//\n// Clerk doesn't expose a CSV export from the dashboard (as of 2026), but\n// you can iterate every user via GET /v1/users?limit=500&offset=N from\n// the backend API. The shape is:\n//\n// {\n// \"id\": \"user_2N...\",\n// \"email_addresses\": [{ \"email_address\": \"alice@x\", \"verification\": { \"status\": \"verified\" } }],\n// \"external_accounts\": [{ \"provider\": \"oauth_google\", \"external_id\": \"1183...\" }],\n// \"first_name\": \"Alice\",\n// \"last_name\": \"Smith\",\n// \"created_at\": 1709999999000,\n// \"password_enabled\": true,\n// \"password_digest\": \"$argon2id$...\" // requires the password-export beta\n// }\n//\n// Save the concatenated result as a single JSON array file → pass to\n// this importer. Clerk uses argon2id by default; verbatim copy works.\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype ClerkEmail = {\n\temail_address: string;\n\tverification?: { status?: string };\n};\n\ntype ClerkExternalAccount = {\n\texternal_id?: string;\n\tprovider: string;\n\tprovider_user_id?: string;\n};\n\ntype ClerkUser = {\n\tcreated_at?: number;\n\temail_addresses?: ClerkEmail[];\n\texternal_accounts?: ClerkExternalAccount[];\n\tfirst_name?: string;\n\tid: string;\n\tlast_name?: string;\n\tpassword_digest?: string;\n\tprimary_email_address_id?: string;\n};\n\nconst stripOauthPrefix = (provider: string) =>\n\tprovider.startsWith('oauth_') ? provider.slice('oauth_'.length) : provider;\n\nexport const clerkImporter: Importer = {\n\tsource: 'clerk',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst clerkUsers: ClerkUser[] = JSON.parse(text);\n\n\t\tconst users = clerkUsers\n\t\t\t.filter(\n\t\t\t\t(raw) =>\n\t\t\t\t\traw.email_addresses !== undefined &&\n\t\t\t\t\traw.email_addresses.length > 0\n\t\t\t)\n\t\t\t.map((raw) => {\n\t\t\t\tconst primary =\n\t\t\t\t\traw.email_addresses?.find(\n\t\t\t\t\t\t(e) =>\n\t\t\t\t\t\t\traw.primary_email_address_id === undefined ||\n\t\t\t\t\t\t\te.email_address.length > 0\n\t\t\t\t\t) ?? raw.email_addresses?.[0];\n\n\t\t\t\treturn {\n\t\t\t\t\tcreatedAtMs: raw.created_at ?? Date.now(),\n\t\t\t\t\temail: primary?.email_address ?? '',\n\t\t\t\t\temailVerified: primary?.verification?.status === 'verified',\n\t\t\t\t\texternalId: raw.id,\n\t\t\t\t\tfamilyName: raw.last_name,\n\t\t\t\t\tgivenName: raw.first_name,\n\t\t\t\t\tpasswordHash: raw.password_digest,\n\t\t\t\t\tpasswordHashAlgo: raw.password_digest?.startsWith(\n\t\t\t\t\t\t'$argon2id'\n\t\t\t\t\t)\n\t\t\t\t\t\t? ('argon2id' as const)\n\t\t\t\t\t\t: raw.password_digest?.startsWith('$2')\n\t\t\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst identities = clerkUsers.flatMap((raw) =>\n\t\t\t(raw.external_accounts ?? []).map((account) => ({\n\t\t\t\tauthProvider: stripOauthPrefix(account.provider),\n\t\t\t\tcreatedAtMs: raw.created_at ?? Date.now(),\n\t\t\t\tproviderSubject:\n\t\t\t\t\taccount.provider_user_id ?? account.external_id ?? '',\n\t\t\t\tuserExternalId: raw.id\n\t\t\t}))\n\t\t);\n\n\t\treturn { identities, source: 'clerk', users };\n\t}\n};\n",
8
- "// Lucia v3 user importer.\n//\n// Lucia (deprecated 2024) keeps users in `user` + key/identity rows in\n// `key` (or `oauth_account` depending on adapter). Export both tables\n// as JSON arrays and concatenate:\n//\n// {\n// \"users\": [{ \"id\": \"abc...\", \"email\": \"alice@x\", \"created_at\": 17... }, …],\n// \"keys\": [\n// { \"id\": \"email:alice@x\", \"user_id\": \"abc...\", \"hashed_password\": \"$argon2id$...\" },\n// { \"id\": \"google:118392...\", \"user_id\": \"abc...\" }\n// ]\n// }\n//\n// Lucia's default hash is argon2id from `oslo/password`; verbatim copy\n// works.\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype LuciaUser = {\n\tcreated_at?: number | string;\n\temail?: string;\n\tid: string;\n};\n\ntype LuciaKey = {\n\thashed_password?: string;\n\tid: string;\n\tuser_id: string;\n};\n\ntype LuciaExport = {\n\tkeys?: LuciaKey[];\n\tusers: LuciaUser[];\n};\n\nconst toMs = (value: number | string | undefined) => {\n\tif (value === undefined) return Date.now();\n\tif (typeof value === 'number') return value < 1e12 ? value * 1000 : value;\n\n\treturn Date.parse(value);\n};\n\nexport const luciaImporter: Importer = {\n\tsource: 'lucia',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: LuciaExport = JSON.parse(text);\n\n\t\t// Lucia's keys are formatted as `provider:subject`. The `email:`\n\t\t// keys carry the password hash; OAuth keys (`google:`, `github:`,\n\t\t// …) are the identities.\n\t\tconst passwordByUserId = new Map<string, string | undefined>();\n\t\tconst oauthKeys: LuciaKey[] = [];\n\t\tfor (const key of parsed.keys ?? []) {\n\t\t\tconst separator = key.id.indexOf(':');\n\t\t\tif (separator < 0) continue;\n\t\t\tconst provider = key.id.slice(0, separator);\n\t\t\tif (provider === 'email' || provider === 'username') {\n\t\t\t\tpasswordByUserId.set(key.user_id, key.hashed_password);\n\t\t\t} else {\n\t\t\t\toauthKeys.push(key);\n\t\t\t}\n\t\t}\n\n\t\tconst users = parsed.users.map((raw) => ({\n\t\t\tcreatedAtMs: toMs(raw.created_at),\n\t\t\temail: raw.email ?? '',\n\t\t\temailVerified: true,\n\t\t\texternalId: raw.id,\n\t\t\tpasswordHash: passwordByUserId.get(raw.id),\n\t\t\tpasswordHashAlgo: passwordByUserId\n\t\t\t\t.get(raw.id)\n\t\t\t\t?.startsWith('$argon2id')\n\t\t\t\t? ('argon2id' as const)\n\t\t\t\t: passwordByUserId.get(raw.id)?.startsWith('$2')\n\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t: undefined\n\t\t}));\n\n\t\tconst identities = oauthKeys.map((key) => {\n\t\t\tconst separator = key.id.indexOf(':');\n\n\t\t\treturn {\n\t\t\t\tauthProvider: key.id.slice(0, separator),\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tproviderSubject: key.id.slice(separator + 1),\n\t\t\t\tuserExternalId: key.user_id\n\t\t\t};\n\t\t});\n\n\t\treturn { identities, source: 'lucia', users };\n\t}\n};\n",
9
- "// NextAuth.js / Auth.js importer.\n//\n// NextAuth.js stores users in `users` and OAuth links in `accounts`\n// (Drizzle / Prisma adapter naming). MongoDB and SQL Server adapters\n// follow the same conceptual shape with different table naming.\n// Concatenate the two tables as a single JSON document:\n//\n// {\n// \"users\": [\n// { \"id\": \"...\", \"email\": \"alice@x\", \"emailVerified\": \"2024-01-01...\",\n// \"name\": \"Alice Smith\", \"image\": \"...\" },\n// …\n// ],\n// \"accounts\": [\n// { \"userId\": \"...\", \"provider\": \"google\", \"providerAccountId\": \"118392...\",\n// \"type\": \"oauth\" }\n// ]\n// }\n//\n// NextAuth doesn't ship a Credentials password store by default its\n// official guidance is to discourage passwords. If your app added a\n// custom credentials provider, you'll have the hashes in your own\n// custom column; pass them via the optional `passwordsByUserId` field:\n//\n// { \"users\": […], \"accounts\": […],\n// \"passwordsByUserId\": { \"user_id_1\": \"$argon2id$…\" } }\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype NextAuthUser = {\n\temail: string;\n\temailVerified?: string | null;\n\tid: string;\n\timage?: string;\n\tname?: string;\n};\n\ntype NextAuthAccount = {\n\tprovider: string;\n\tproviderAccountId: string;\n\ttype?: string;\n\tuserId: string;\n};\n\ntype NextAuthExport = {\n\taccounts?: NextAuthAccount[];\n\tpasswordsByUserId?: Record<string, string | undefined>;\n\tusers: NextAuthUser[];\n};\n\nconst splitName = (full: string | undefined) => {\n\tif (full === undefined)\n\t\treturn { familyName: undefined, givenName: undefined };\n\tconst parts = full.split(/\\s+/);\n\tif (parts.length === 1)\n\t\treturn { familyName: undefined, givenName: parts[0] };\n\n\treturn {\n\t\tfamilyName: parts.slice(1).join(' '),\n\t\tgivenName: parts[0]\n\t};\n};\n\nexport const nextauthImporter: Importer = {\n\tsource: 'nextauth',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: NextAuthExport = JSON.parse(text);\n\n\t\tconst users = parsed.users.map((raw) => {\n\t\t\tconst split = splitName(raw.name);\n\t\t\tconst passwordHash = parsed.passwordsByUserId?.[raw.id];\n\n\t\t\treturn {\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\temail: raw.email,\n\t\t\t\temailVerified:\n\t\t\t\t\traw.emailVerified !== null &&\n\t\t\t\t\traw.emailVerified !== undefined,\n\t\t\t\texternalId: raw.id,\n\t\t\t\tfamilyName: split.familyName,\n\t\t\t\tgivenName: split.givenName,\n\t\t\t\tpasswordHash,\n\t\t\t\tpasswordHashAlgo: passwordHash?.startsWith('$argon2id')\n\t\t\t\t\t? ('argon2id' as const)\n\t\t\t\t\t: passwordHash?.startsWith('$2')\n\t\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t\t: undefined\n\t\t\t};\n\t\t});\n\n\t\tconst identities = (parsed.accounts ?? [])\n\t\t\t.filter(\n\t\t\t\t(account) =>\n\t\t\t\t\taccount.type === undefined || account.type === 'oauth'\n\t\t\t)\n\t\t\t.map((account) => ({\n\t\t\t\tauthProvider: account.provider,\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tproviderSubject: account.providerAccountId,\n\t\t\t\tuserExternalId: account.userId\n\t\t\t}));\n\n\t\treturn { identities, source: 'nextauth', users };\n\t}\n};\n",
6
+ "// Auth0 user export importer.\n//\n// Auth0's user export comes as a JSON or NDJSON file (depending on which\n// export endpoint you used). Each line/object is a user with this shape\n// (fields you'll always see):\n//\n// {\n// \"user_id\": \"auth0|663c...\",\n// \"email\": \"alice@example.com\",\n// \"email_verified\": true,\n// \"name\": \"Alice\",\n// \"given_name\": \"Alice\",\n// \"family_name\": \"Smith\",\n// \"created_at\": \"2024-03-12T...\",\n// \"identities\": [\n// { \"provider\": \"auth0\", \"user_id\": \"663c...\", \"connection\": \"Username-Password-Authentication\" },\n// { \"provider\": \"google-oauth2\", \"user_id\": \"11839...\", ...}\n// ],\n// \"password_hash\": \"$2b$10$...\" // present if export-with-passwords was enabled\n// }\n//\n// Get the export via: Auth0 dashboard → User Management → Users → Export.\n// Or programmatically: POST /api/v2/jobs/users-exports with fields=password_hash.\n// Auth0 hashes with bcrypt by default; verbatim copy works.\n\nimport { readFile } from 'node:fs/promises';\nimport {\n\tdetectPasswordHashAlgorithm,\n\ttype ImportResult,\n\ttype Importer\n} from './types';\n\ntype Auth0Identity = {\n\tconnection?: string;\n\tprovider: string;\n\tuser_id: string;\n};\n\ntype Auth0User = {\n\tcreated_at?: string;\n\temail: string;\n\temail_verified?: boolean;\n\tfamily_name?: string;\n\tgiven_name?: string;\n\tidentities?: Auth0Identity[];\n\tname?: string;\n\tpassword_hash?: string;\n\tuser_id: string;\n};\n\nconst isAuth0Identity = (value: unknown): value is Auth0Identity =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\ttypeof Reflect.get(value, 'provider') === 'string' &&\n\ttypeof Reflect.get(value, 'user_id') === 'string';\n\nconst isAuth0User = (value: unknown): value is Auth0User =>\n\ttypeof value === 'object' &&\n\tvalue !== null &&\n\ttypeof Reflect.get(value, 'email') === 'string' &&\n\ttypeof Reflect.get(value, 'user_id') === 'string' &&\n\t(Reflect.get(value, 'identities') === undefined ||\n\t\t(Array.isArray(Reflect.get(value, 'identities')) &&\n\t\t\tReflect.get(value, 'identities').every(isAuth0Identity)));\n\nconst requireAuth0User = (value: unknown) => {\n\tif (!isAuth0User(value)) throw new Error('Invalid Auth0 user export record');\n\n\treturn value;\n};\n\nconst parseUsersFromText = (text: string) => {\n\tconst trimmed = text.trim();\n\tif (trimmed.startsWith('[')) {\n\t\tconst parsed: unknown = JSON.parse(trimmed);\n\t\tif (!Array.isArray(parsed))\n\t\t\tthrow new Error('Auth0 JSON export must be an array');\n\n\t\treturn parsed.map(requireAuth0User);\n\t}\n\n\t// NDJSON — one user per line.\n\treturn trimmed\n\t\t.split('\\n')\n\t\t.filter((line) => line.length > 0)\n\t\t.map((line) => requireAuth0User(JSON.parse(line)));\n};\n\nexport const auth0Importer: Importer = {\n\tsource: 'auth0',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst auth0Users = parseUsersFromText(text);\n\n\t\tconst users = auth0Users.map((raw) => ({\n\t\t\tcreatedAtMs:\n\t\t\t\traw.created_at === undefined\n\t\t\t\t\t? Date.now()\n\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\temail: raw.email,\n\t\t\temailVerified: raw.email_verified ?? false,\n\t\t\texternalId: raw.user_id,\n\t\t\tfamilyName: raw.family_name,\n\t\t\tgivenName: raw.given_name,\n\t\t\tpasswordHash: raw.password_hash,\n\t\t\t\tpasswordHashAlgo: detectPasswordHashAlgorithm(raw.password_hash)\n\t\t}));\n\n\t\t// Auth0 always has at least one identity (the auth0 connection\n\t\t// itself); skip that one. Real OAuth identities are\n\t\t// google-oauth2 / github / apple / etc.\n\t\tconst identities = auth0Users.flatMap((raw) =>\n\t\t\t(raw.identities ?? [])\n\t\t\t\t.filter((identity) => identity.provider !== 'auth0')\n\t\t\t\t.map((identity) => ({\n\t\t\t\t\tauthProvider: identity.provider.replace('-oauth2', ''),\n\t\t\t\t\tcreatedAtMs:\n\t\t\t\t\t\traw.created_at === undefined\n\t\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\t\t\tmetadata:\n\t\t\t\t\t\tidentity.connection === undefined\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: { connection: identity.connection },\n\t\t\t\t\tproviderSubject: identity.user_id,\n\t\t\t\t\tuserExternalId: raw.user_id\n\t\t\t\t}))\n\t\t);\n\n\t\treturn { identities, source: 'auth0', users };\n\t}\n};\n",
7
+ "// Shared shape every importer outputs. The dispatcher does the actual DB\n// writes importers just transform source-format JSON into these\n// neutral records. Keeps the per-source code small + lets us add new\n// sources without refactoring the writer.\n\nexport const detectPasswordHashAlgorithm: (\n\thash?: string\n) => ImportedUser['passwordHashAlgo'] = (hash) => {\n\tif (hash?.startsWith('$argon2id')) return 'argon2id';\n\tif (\n\t\thash?.startsWith('$2b$') ||\n\t\thash?.startsWith('$2a$') ||\n\t\thash?.startsWith('$2y$') ||\n\t\thash?.startsWith('$2')\n\t)\n\t\treturn 'bcrypt';\n\n\treturn undefined;\n};\n\nexport type ImportedUser = {\n\tcreatedAtMs: number;\n\temail: string;\n\temailVerified: boolean;\n\t// Provider's primary key for this user, kept so re-imports can dedupe.\n\texternalId: string;\n\tfamilyName?: string;\n\tgivenName?: string;\n\t// Password hash in its original format (bcrypt / argon2id / scrypt).\n\t// `@absolutejs/auth` writes it verbatim into users.password; the\n\t// rehash-on-next-login dance is handled by the credentials block at\n\t// runtime (it sniffs argon2id headers and reverifies via bcryptjs/scrypt\n\t// for legacy formats, then rewrites to argon2id on success).\n\tpasswordHash?: string;\n\tpasswordHashAlgo?: 'argon2id' | 'bcrypt' | 'scrypt' | 'pbkdf2';\n};\n\nexport type ImportedIdentity = {\n\tauthProvider: string;\n\tcreatedAtMs: number;\n\t// Anything from the source we want to keep around (e.g. Apple's\n\t// first-sign-in name, QuickBooks realmId).\n\tmetadata?: Record<string, unknown>;\n\tproviderSubject: string;\n\t// Match against ImportedUser.externalId to link rows.\n\tuserExternalId: string;\n};\n\nexport type ImportResult = {\n\tidentities: ImportedIdentity[];\n\tsource: string;\n\tusers: ImportedUser[];\n};\n\nexport type Importer = {\n\t// Read the file at `path` and return the neutral records. Should NOT\n\t// touch the database — the dispatcher does that uniformly.\n\tparse: (path: string) => Promise<ImportResult>;\n\t// User-facing label for help text + logs.\n\tsource: string;\n};\n",
8
+ "// Clerk user export importer.\n//\n// Clerk doesn't expose a CSV export from the dashboard (as of 2026), but\n// you can iterate every user via GET /v1/users?limit=500&offset=N from\n// the backend API. The shape is:\n//\n// {\n// \"id\": \"user_2N...\",\n// \"email_addresses\": [{ \"email_address\": \"alice@x\", \"verification\": { \"status\": \"verified\" } }],\n// \"external_accounts\": [{ \"provider\": \"oauth_google\", \"external_id\": \"1183...\" }],\n// \"first_name\": \"Alice\",\n// \"last_name\": \"Smith\",\n// \"created_at\": 1709999999000,\n// \"password_enabled\": true,\n// \"password_digest\": \"$argon2id$...\" // requires the password-export beta\n// }\n//\n// Save the concatenated result as a single JSON array file → pass to\n// this importer. Clerk uses argon2id by default; verbatim copy works.\n\nimport { readFile } from 'node:fs/promises';\nimport {\n\tdetectPasswordHashAlgorithm,\n\ttype ImportResult,\n\ttype Importer\n} from './types';\n\ntype ClerkEmail = {\n\temail_address: string;\n\tverification?: { status?: string };\n};\n\ntype ClerkExternalAccount = {\n\texternal_id?: string;\n\tprovider: string;\n\tprovider_user_id?: string;\n};\n\ntype ClerkUser = {\n\tcreated_at?: number;\n\temail_addresses?: ClerkEmail[];\n\texternal_accounts?: ClerkExternalAccount[];\n\tfirst_name?: string;\n\tid: string;\n\tlast_name?: string;\n\tpassword_digest?: string;\n\tprimary_email_address_id?: string;\n};\n\nconst stripOauthPrefix = (provider: string) =>\n\tprovider.startsWith('oauth_') ? provider.slice('oauth_'.length) : provider;\n\nexport const clerkImporter: Importer = {\n\tsource: 'clerk',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst clerkUsers: ClerkUser[] = JSON.parse(text);\n\n\t\tconst users = clerkUsers\n\t\t\t.filter(\n\t\t\t\t(raw) =>\n\t\t\t\t\traw.email_addresses !== undefined &&\n\t\t\t\t\traw.email_addresses.length > 0\n\t\t\t)\n\t\t\t.map((raw) => {\n\t\t\t\tconst primary =\n\t\t\t\t\traw.email_addresses?.find(\n\t\t\t\t\t\t\t(email) =>\n\t\t\t\t\t\t\t\traw.primary_email_address_id === undefined ||\n\t\t\t\t\t\t\t\temail.email_address.length > 0\n\t\t\t\t\t) ?? raw.email_addresses?.[0];\n\n\t\t\t\treturn {\n\t\t\t\t\tcreatedAtMs: raw.created_at ?? Date.now(),\n\t\t\t\t\temail: primary?.email_address ?? '',\n\t\t\t\t\temailVerified: primary?.verification?.status === 'verified',\n\t\t\t\t\texternalId: raw.id,\n\t\t\t\t\tfamilyName: raw.last_name,\n\t\t\t\t\tgivenName: raw.first_name,\n\t\t\t\t\tpasswordHash: raw.password_digest,\n\t\t\t\t\tpasswordHashAlgo: detectPasswordHashAlgorithm(\n\t\t\t\t\t\traw.password_digest\n\t\t\t\t\t)\n\t\t\t\t};\n\t\t\t});\n\n\t\tconst identities = clerkUsers.flatMap((raw) =>\n\t\t\t(raw.external_accounts ?? []).map((account) => ({\n\t\t\t\tauthProvider: stripOauthPrefix(account.provider),\n\t\t\t\tcreatedAtMs: raw.created_at ?? Date.now(),\n\t\t\t\tproviderSubject:\n\t\t\t\t\taccount.provider_user_id ?? account.external_id ?? '',\n\t\t\t\tuserExternalId: raw.id\n\t\t\t}))\n\t\t);\n\n\t\treturn { identities, source: 'clerk', users };\n\t}\n};\n",
9
+ "// Lucia v3 user importer.\n//\n// Lucia (deprecated 2024) keeps users in `user` + key/identity rows in\n// `key` (or `oauth_account` depending on adapter). Export both tables\n// as JSON arrays and concatenate:\n//\n// {\n// \"users\": [{ \"id\": \"abc...\", \"email\": \"alice@x\", \"created_at\": 17... }, ],\n// \"keys\": [\n// { \"id\": \"email:alice@x\", \"user_id\": \"abc...\", \"hashed_password\": \"$argon2id$...\" },\n// { \"id\": \"google:118392...\", \"user_id\": \"abc...\" }\n// ]\n// }\n//\n// Lucia's default hash is argon2id from `oslo/password`; verbatim copy\n// works.\n\nimport { readFile } from 'node:fs/promises';\nimport {\n\tdetectPasswordHashAlgorithm,\n\ttype ImportResult,\n\ttype Importer\n} from './types';\n\ntype LuciaUser = {\n\tcreated_at?: number | string;\n\temail?: string;\n\tid: string;\n};\n\ntype LuciaKey = {\n\thashed_password?: string;\n\tid: string;\n\tuser_id: string;\n};\n\ntype LuciaExport = {\n\tkeys?: LuciaKey[];\n\tusers: LuciaUser[];\n};\n\nconst toMs = (value: number | string | undefined) => {\n\tif (value === undefined) return Date.now();\n\tif (typeof value === 'number') return value < 1e12 ? value * 1000 : value;\n\n\treturn Date.parse(value);\n};\n\nconst classifyLuciaKey = (\n\tkey: LuciaKey,\n\tpasswordByUserId: Map<string, string | undefined>,\n\toauthKeys: LuciaKey[]\n) => {\n\tconst separator = key.id.indexOf(':');\n\tif (separator < 0) return;\n\tconst provider = key.id.slice(0, separator);\n\tif (provider === 'email' || provider === 'username') {\n\t\tpasswordByUserId.set(key.user_id, key.hashed_password);\n\n\t\treturn;\n\t}\n\toauthKeys.push(key);\n};\n\nexport const luciaImporter: Importer = {\n\tsource: 'lucia',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: LuciaExport = JSON.parse(text);\n\n\t\t// Lucia's keys are formatted as `provider:subject`. The `email:`\n\t\t// keys carry the password hash; OAuth keys (`google:`, `github:`,\n\t\t// …) are the identities.\n\t\tconst passwordByUserId = new Map<string, string | undefined>();\n\t\tconst oauthKeys: LuciaKey[] = [];\n\t\tfor (const key of parsed.keys ?? []) {\n\t\t\tclassifyLuciaKey(key, passwordByUserId, oauthKeys);\n\t\t}\n\n\t\tconst users = parsed.users.map((raw) => ({\n\t\t\tcreatedAtMs: toMs(raw.created_at),\n\t\t\temail: raw.email ?? '',\n\t\t\temailVerified: true,\n\t\t\texternalId: raw.id,\n\t\t\tpasswordHash: passwordByUserId.get(raw.id),\n\t\t\t\tpasswordHashAlgo: detectPasswordHashAlgorithm(\n\t\t\t\t\tpasswordByUserId.get(raw.id)\n\t\t\t\t)\n\t\t}));\n\n\t\tconst identities = oauthKeys.map((key) => {\n\t\t\tconst separator = key.id.indexOf(':');\n\n\t\t\treturn {\n\t\t\t\tauthProvider: key.id.slice(0, separator),\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tproviderSubject: key.id.slice(separator + 1),\n\t\t\t\tuserExternalId: key.user_id\n\t\t\t};\n\t\t});\n\n\t\treturn { identities, source: 'lucia', users };\n\t}\n};\n",
10
+ "// NextAuth.js / Auth.js importer.\n//\n// NextAuth.js stores users in `users` and OAuth links in `accounts`\n// (Drizzle / Prisma adapter naming). MongoDB and SQL Server adapters\n// follow the same conceptual shape with different table naming.\n// Concatenate the two tables as a single JSON document:\n//\n// {\n// \"users\": [\n// { \"id\": \"...\", \"email\": \"alice@x\", \"emailVerified\": \"2024-01-01...\",\n// \"name\": \"Alice Smith\", \"image\": \"...\" },\n// …\n// ],\n// \"accounts\": [\n// { \"userId\": \"...\", \"provider\": \"google\", \"providerAccountId\": \"118392...\",\n// \"type\": \"oauth\" }\n// ]\n// }\n//\n// NextAuth doesn't ship a Credentials password store by default — its\n// official guidance is to discourage passwords. If your app added a\n// custom credentials provider, you'll have the hashes in your own\n// custom column; pass them via the optional `passwordsByUserId` field:\n//\n// { \"users\": […], \"accounts\": […],\n// \"passwordsByUserId\": { \"user_id_1\": \"$argon2id$…\" } }\n\nimport { readFile } from 'node:fs/promises';\nimport {\n\tdetectPasswordHashAlgorithm,\n\ttype ImportResult,\n\ttype Importer\n} from './types';\n\ntype NextAuthUser = {\n\temail: string;\n\temailVerified?: string | null;\n\tid: string;\n\timage?: string;\n\tname?: string;\n};\n\ntype NextAuthAccount = {\n\tprovider: string;\n\tproviderAccountId: string;\n\ttype?: string;\n\tuserId: string;\n};\n\ntype NextAuthExport = {\n\taccounts?: NextAuthAccount[];\n\tpasswordsByUserId?: Record<string, string | undefined>;\n\tusers: NextAuthUser[];\n};\n\nconst splitName = (full: string | undefined) => {\n\tif (full === undefined)\n\t\treturn { familyName: undefined, givenName: undefined };\n\tconst parts = full.split(/\\s+/);\n\tif (parts.length === 1)\n\t\treturn { familyName: undefined, givenName: parts[0] };\n\n\treturn {\n\t\tfamilyName: parts.slice(1).join(' '),\n\t\tgivenName: parts[0]\n\t};\n};\n\nexport const nextauthImporter: Importer = {\n\tsource: 'nextauth',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: NextAuthExport = JSON.parse(text);\n\n\t\tconst users = parsed.users.map((raw) => {\n\t\t\tconst split = splitName(raw.name);\n\t\t\tconst passwordHash = parsed.passwordsByUserId?.[raw.id];\n\n\t\t\treturn {\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\temail: raw.email,\n\t\t\t\temailVerified:\n\t\t\t\t\traw.emailVerified !== null &&\n\t\t\t\t\traw.emailVerified !== undefined,\n\t\t\t\texternalId: raw.id,\n\t\t\t\tfamilyName: split.familyName,\n\t\t\t\tgivenName: split.givenName,\n\t\t\t\tpasswordHash,\n\t\t\t\t\tpasswordHashAlgo:\n\t\t\t\t\t\tdetectPasswordHashAlgorithm(passwordHash)\n\t\t\t};\n\t\t});\n\n\t\tconst identities = (parsed.accounts ?? [])\n\t\t\t.filter(\n\t\t\t\t(account) =>\n\t\t\t\t\taccount.type === undefined || account.type === 'oauth'\n\t\t\t)\n\t\t\t.map((account) => ({\n\t\t\t\tauthProvider: account.provider,\n\t\t\t\tcreatedAtMs: Date.now(),\n\t\t\t\tproviderSubject: account.providerAccountId,\n\t\t\t\tuserExternalId: account.userId\n\t\t\t}));\n\n\t\treturn { identities, source: 'nextauth', users };\n\t}\n};\n",
10
11
  "// Supabase Auth importer.\n//\n// Supabase stores auth state in the `auth.users` + `auth.identities`\n// tables of your Postgres. Easiest path: dump the two tables to JSON\n// via `psql -c \"COPY (SELECT row_to_json(t) FROM auth.users t) TO ...\"`,\n// then concatenate the two files into one JSON document:\n//\n// {\n// \"users\": [\n// { \"id\": \"...\", \"email\": \"alice@x\", \"encrypted_password\": \"$2a$10$...\",\n// \"email_confirmed_at\": \"2024-01-01T...\", \"created_at\": \"...\",\n// \"raw_user_meta_data\": { \"full_name\": \"Alice Smith\" } },\n// …\n// ],\n// \"identities\": [\n// { \"user_id\": \"...\", \"provider\": \"google\", \"provider_id\": \"118392...\",\n// \"identity_data\": {...}, \"created_at\": \"...\" }\n// ]\n// }\n//\n// Supabase uses bcrypt for the `encrypted_password` column; verbatim copy\n// works (and our credentials block sniffs the $2 prefix at next login).\n\nimport { readFile } from 'node:fs/promises';\nimport type { ImportResult, Importer } from './types';\n\ntype SupabaseUser = {\n\tcreated_at?: string;\n\temail: string;\n\temail_confirmed_at?: string;\n\tencrypted_password?: string;\n\tid: string;\n\traw_user_meta_data?: {\n\t\tfamily_name?: string;\n\t\tfull_name?: string;\n\t\tgiven_name?: string;\n\t};\n};\n\ntype SupabaseIdentity = {\n\tcreated_at?: string;\n\tprovider: string;\n\tprovider_id: string;\n\tuser_id: string;\n};\n\ntype SupabaseExport = {\n\tidentities?: SupabaseIdentity[];\n\tusers: SupabaseUser[];\n};\n\nconst splitFullName = (full: string | undefined) => {\n\tif (full === undefined)\n\t\treturn { familyName: undefined, givenName: undefined };\n\tconst parts = full.split(/\\s+/);\n\tif (parts.length === 1)\n\t\treturn { familyName: undefined, givenName: parts[0] };\n\n\treturn {\n\t\tfamilyName: parts.slice(1).join(' '),\n\t\tgivenName: parts[0]\n\t};\n};\n\nexport const supabaseImporter: Importer = {\n\tsource: 'supabase',\n\tparse: async (path: string): Promise<ImportResult> => {\n\t\tconst text = await readFile(path, 'utf-8');\n\t\tconst parsed: SupabaseExport = JSON.parse(text);\n\n\t\tconst users = parsed.users.map((raw) => {\n\t\t\tconst meta = raw.raw_user_meta_data ?? {};\n\t\t\tconst split = splitFullName(meta.full_name);\n\n\t\t\treturn {\n\t\t\t\tcreatedAtMs:\n\t\t\t\t\traw.created_at === undefined\n\t\t\t\t\t\t? Date.now()\n\t\t\t\t\t\t: Date.parse(raw.created_at),\n\t\t\t\temail: raw.email,\n\t\t\t\temailVerified: raw.email_confirmed_at !== undefined,\n\t\t\t\texternalId: raw.id,\n\t\t\t\tfamilyName: meta.family_name ?? split.familyName,\n\t\t\t\tgivenName: meta.given_name ?? split.givenName,\n\t\t\t\tpasswordHash: raw.encrypted_password,\n\t\t\t\tpasswordHashAlgo: raw.encrypted_password?.startsWith('$2')\n\t\t\t\t\t? ('bcrypt' as const)\n\t\t\t\t\t: undefined\n\t\t\t};\n\t\t});\n\n\t\tconst identities = (parsed.identities ?? []).map((identity) => ({\n\t\t\tauthProvider: identity.provider,\n\t\t\tcreatedAtMs:\n\t\t\t\tidentity.created_at === undefined\n\t\t\t\t\t? Date.now()\n\t\t\t\t\t: Date.parse(identity.created_at),\n\t\t\tproviderSubject: identity.provider_id,\n\t\t\tuserExternalId: identity.user_id\n\t\t}));\n\n\t\treturn { identities, source: 'supabase', users };\n\t}\n};\n",
11
12
  "import { and, desc, eq } from 'drizzle-orm';\nimport {\n\tbigint,\n\tboolean,\n\tdoublePrecision,\n\tpgTable,\n\tprimaryKey,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tKnownDevice,\n\tKnownDeviceStore,\n\tLoginAttempt,\n\tLoginHistoryStore\n} from './types';\n\nconst ID_LENGTH = 255;\n\nexport const knownDevicesTable = pgTable(\n\t'auth_known_devices',\n\t{\n\t\tdevice_id: varchar('device_id', { length: ID_LENGTH }).notNull(),\n\t\tfirst_seen_at_ms: bigint('first_seen_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tlabel: varchar('label', { length: ID_LENGTH }),\n\t\tlast_seen_at_ms: bigint('last_seen_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\ttrusted: boolean('trusted').notNull().default(false),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.user_id, table.device_id] })]\n);\n\nexport const loginHistoryTable = pgTable('auth_login_history', {\n\tattempt_id: varchar('attempt_id', { length: ID_LENGTH }).primaryKey(),\n\tcountry: varchar('country', { length: ID_LENGTH }),\n\tdevice_id: varchar('device_id', { length: ID_LENGTH }).notNull(),\n\tip_address: varchar('ip_address', { length: ID_LENGTH }),\n\tlatitude: doublePrecision('latitude'),\n\tlongitude: doublePrecision('longitude'),\n\toutcome: varchar('outcome', { length: ID_LENGTH }).notNull(),\n\ttimestamp_ms: bigint('timestamp_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\n\ntype KnownDeviceRow = typeof knownDevicesTable.$inferSelect;\ntype LoginAttemptRow = typeof loginHistoryTable.$inferSelect;\n\nconst toRiskAction = (value: string) => {\n\tif (value === 'deny') return 'deny';\n\tif (value === 'step_up') return 'step_up';\n\n\treturn 'allow';\n};\n\nconst toDevice = (row: KnownDeviceRow): KnownDevice => ({\n\tdeviceId: row.device_id,\n\tfirstSeenAt: row.first_seen_at_ms,\n\tlabel: row.label ?? undefined,\n\tlastSeenAt: row.last_seen_at_ms,\n\ttrusted: row.trusted,\n\tuserId: row.user_id\n});\n\nconst toDeviceValues = (\n\tdevice: KnownDevice\n): typeof knownDevicesTable.$inferInsert => ({\n\tdevice_id: device.deviceId,\n\tfirst_seen_at_ms: device.firstSeenAt,\n\tlabel: device.label ?? null,\n\tlast_seen_at_ms: device.lastSeenAt,\n\ttrusted: device.trusted,\n\tuser_id: device.userId\n});\n\nconst toAttempt = (row: LoginAttemptRow): LoginAttempt => ({\n\tattemptId: row.attempt_id,\n\tcountry: row.country ?? undefined,\n\tdeviceId: row.device_id,\n\tipAddress: row.ip_address ?? undefined,\n\tlatitude: row.latitude ?? undefined,\n\tlongitude: row.longitude ?? undefined,\n\toutcome: toRiskAction(row.outcome),\n\ttimestamp: row.timestamp_ms,\n\tuserId: row.user_id\n});\n\nconst toAttemptValues = (\n\tattempt: LoginAttempt\n): typeof loginHistoryTable.$inferInsert => ({\n\tattempt_id: attempt.attemptId,\n\tcountry: attempt.country ?? null,\n\tdevice_id: attempt.deviceId,\n\tip_address: attempt.ipAddress ?? null,\n\tlatitude: attempt.latitude ?? null,\n\tlongitude: attempt.longitude ?? null,\n\toutcome: attempt.outcome,\n\ttimestamp_ms: attempt.timestamp,\n\tuser_id: attempt.userId\n});\n\nexport const createNeonKnownDeviceStore = (databaseUrl: string) =>\n\tcreatePostgresKnownDeviceStore(createNeonDatabase(databaseUrl));\nexport const createNeonLoginHistoryStore = (databaseUrl: string) =>\n\tcreatePostgresLoginHistoryStore(createNeonDatabase(databaseUrl));\nexport const createPostgresKnownDeviceStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): KnownDeviceStore => ({\n\tfindDevice: async (userId, deviceId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(knownDevicesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(knownDevicesTable.user_id, userId),\n\t\t\t\t\teq(knownDevicesTable.device_id, deviceId)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toDevice(row) : undefined;\n\t},\n\tlistDevices: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(knownDevicesTable)\n\t\t\t.where(eq(knownDevicesTable.user_id, userId))\n\t\t\t.orderBy(desc(knownDevicesTable.last_seen_at_ms));\n\n\t\treturn rows.map(toDevice);\n\t},\n\tsaveDevice: async (device) => {\n\t\tconst values = toDeviceValues(device);\n\t\tawait db\n\t\t\t.insert(knownDevicesTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [knownDevicesTable.user_id, knownDevicesTable.device_id]\n\t\t\t});\n\t}\n});\nexport const createPostgresLoginHistoryStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): LoginHistoryStore => ({\n\tlistRecent: async (userId, limit) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(loginHistoryTable)\n\t\t\t.where(eq(loginHistoryTable.user_id, userId))\n\t\t\t.orderBy(desc(loginHistoryTable.timestamp_ms))\n\t\t\t.limit(limit);\n\n\t\treturn rows.map(toAttempt);\n\t},\n\trecordAttempt: async (attempt) => {\n\t\tawait db.insert(loginHistoryTable).values(toAttemptValues(attempt));\n\t}\n});\n",
12
- "import { neon } from '@neondatabase/serverless';\nimport { drizzle } from 'drizzle-orm/neon-http';\nimport type { PgAsyncDatabase } from 'drizzle-orm/pg-core';\n\n// Shared scaffolding for the enterprise stores. Every new store ships an\n// in-memory implementation (dev/test) plus a Postgres implementation that accepts\n// a Drizzle `PgDatabase` — so it runs on Neon (neon-http) AND node-postgres without\n// the package bundling a second driver. `createNeonDatabase` is the convenience\n// wrapper consumers reach for when they just want a Neon connection string.\n\n// PgAsyncDatabase (drizzle 1.0; was PgDatabase pre-1.0) is effectively invariant\n// over its type parameters (query-result HKT, relational config), and TS can't\n// reliably re-infer those base params from a concrete driver *subclass*\n// (PostgresJsDatabase, NeonHttpDatabase, …). So the only way to accept any\n// driver with NO caller-side cast is a generic store constructor whose db\n// parameter is bound by `AnyPgDatabase`: `<DB extends AnyPgDatabase>(db: DB)`.\n// The `any`s live ONLY in this bound — `DB` is inferred as the caller's exact\n// database type, so store bodies stay fully typed (this is not `db: any`).\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- constraint bound only; DB infers the caller's exact db type\nexport type AnyPgDatabase = PgAsyncDatabase<any, any>;\n\nexport const createNeonDatabase = (databaseUrl: string) =>\n\tdrizzle({ client: neon(databaseUrl) });\n",
13
+ "import { neon } from '@neondatabase/serverless';\nimport { drizzle } from 'drizzle-orm/neon-http';\nimport type {\n\tPgAsyncDatabase,\n\tPgQueryResultHKT\n} from 'drizzle-orm/pg-core';\n\n// Shared scaffolding for the enterprise stores. Every new store ships an\n// in-memory implementation (dev/test) plus a Postgres implementation that accepts\n// a Drizzle `PgDatabase` — so it runs on Neon (neon-http) AND node-postgres without\n// the package bundling a second driver. `createNeonDatabase` is the convenience\n// wrapper consumers reach for when they just want a Neon connection string.\n\n// PgAsyncDatabase (drizzle 1.0; was PgDatabase pre-1.0) is effectively invariant\n// over its type parameters (query-result HKT, relational config), and TS can't\n// reliably re-infer those base params from a concrete driver *subclass*\n// (PostgresJsDatabase, NeonHttpDatabase, …). So the only way to accept any\n// driver with NO caller-side cast is a generic store constructor whose db\n// parameter is bound by `AnyPgDatabase`: `<DB extends AnyPgDatabase>(db: DB)`.\n// The `any`s live ONLY in this bound — `DB` is inferred as the caller's exact\n// database type, so store bodies stay fully typed (this is not `db: any`).\nexport type AnyPgDatabase = PgAsyncDatabase<PgQueryResultHKT>;\n\nexport const createNeonDatabase = (databaseUrl: string) =>\n\tdrizzle({ client: neon(databaseUrl) });\n",
13
14
  "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAccessToken,\n\tAccessTokenStore,\n\tApiClient,\n\tApiClientStore,\n\tApiKey,\n\tApiKeyStore\n} from './types';\n\nconst ID_LENGTH = 255;\n\nexport const accessTokensTable = pgTable('auth_access_tokens', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\nexport const apiClientsTable = pgTable('auth_api_clients', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_secret: varchar('hashed_secret', { length: ID_LENGTH }).notNull(),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tscopes: text('scopes').array().notNull()\n});\nexport const apiKeysTable = pgTable('auth_api_keys', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }),\n\thashed_key: varchar('hashed_key', { length: ID_LENGTH }).notNull(),\n\tkey_id: varchar('key_id', { length: ID_LENGTH }).primaryKey(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tname: varchar('name', { length: ID_LENGTH }).notNull(),\n\towner_id: varchar('owner_id', { length: ID_LENGTH }),\n\tprefix: varchar('prefix', { length: ID_LENGTH }).notNull(),\n\tscopes: text('scopes').array().notNull()\n});\n\ntype ApiKeyRow = typeof apiKeysTable.$inferSelect;\ntype ApiClientRow = typeof apiClientsTable.$inferSelect;\ntype AccessTokenRow = typeof accessTokensTable.$inferSelect;\n\nconst toKey = (row: ApiKeyRow): ApiKey => ({\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms ?? undefined,\n\thashedKey: row.hashed_key,\n\tkeyId: row.key_id,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tprefix: row.prefix,\n\tscopes: row.scopes\n});\n\nconst toKeyValues = (key: ApiKey): typeof apiKeysTable.$inferInsert => ({\n\tcreated_at_ms: key.createdAt,\n\texpires_at_ms: key.expiresAt ?? null,\n\thashed_key: key.hashedKey,\n\tkey_id: key.keyId,\n\tlast_used_at_ms: key.lastUsedAt ?? null,\n\tname: key.name,\n\towner_id: key.ownerId ?? null,\n\tprefix: key.prefix,\n\tscopes: key.scopes\n});\n\nconst toClient = (row: ApiClientRow): ApiClient => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\thashedSecret: row.hashed_secret,\n\tname: row.name,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes\n});\n\nconst toClientValues = (\n\tclient: ApiClient\n): typeof apiClientsTable.$inferInsert => ({\n\tclient_id: client.clientId,\n\tcreated_at_ms: client.createdAt,\n\thashed_secret: client.hashedSecret,\n\tname: client.name,\n\towner_id: client.ownerId ?? null,\n\tscopes: client.scopes\n});\n\nconst toAccessToken = (row: AccessTokenRow): AccessToken => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\thashedToken: row.hashed_token,\n\townerId: row.owner_id ?? undefined,\n\tscopes: row.scopes,\n\ttokenId: row.token_id\n});\n\nconst toAccessTokenValues = (\n\ttoken: AccessToken\n): typeof accessTokensTable.$inferInsert => ({\n\tclient_id: token.clientId,\n\tcreated_at_ms: token.createdAt,\n\texpires_at_ms: token.expiresAt,\n\thashed_token: token.hashedToken,\n\towner_id: token.ownerId ?? null,\n\tscopes: token.scopes,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonAccessTokenStore = (databaseUrl: string) =>\n\tcreatePostgresAccessTokenStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiClientStore = (databaseUrl: string) =>\n\tcreatePostgresApiClientStore(createNeonDatabase(databaseUrl));\nexport const createNeonApiKeyStore = (databaseUrl: string) =>\n\tcreatePostgresApiKeyStore(createNeonDatabase(databaseUrl));\nexport const createPostgresAccessTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AccessTokenStore => ({\n\tdeleteExpired: async (now) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(lt(accessTokensTable.expires_at_ms, now));\n\t},\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(accessTokensTable)\n\t\t\t.where(eq(accessTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toAccessToken(row) : undefined;\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toAccessTokenValues(token);\n\t\tawait db.insert(accessTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: accessTokensTable.token_id\n\t\t});\n\t}\n});\nexport const createPostgresApiClientStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ApiClientStore => ({\n\tdeleteClient: async (clientId) => {\n\t\tawait db\n\t\t\t.delete(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.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(apiClientsTable)\n\t\t\t.where(eq(apiClientsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toClient(row) : undefined;\n\t},\n\tlistClients: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiClientsTable)\n\t\t\t\t\t\t.where(eq(apiClientsTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiClientsTable.created_at_ms));\n\n\t\treturn rows.map(toClient);\n\t},\n\tsaveClient: async (client) => {\n\t\tconst values = toClientValues(client);\n\t\tawait db.insert(apiClientsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiClientsTable.client_id\n\t\t});\n\t}\n});\nexport const createPostgresApiKeyStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ApiKeyStore => ({\n\tdeleteKey: async (keyId) => {\n\t\tawait db.delete(apiKeysTable).where(eq(apiKeysTable.key_id, keyId));\n\t},\n\tfindByHashedKey: async (hashedKey) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(apiKeysTable)\n\t\t\t.where(eq(apiKeysTable.hashed_key, hashedKey))\n\t\t\t.limit(1);\n\n\t\treturn row ? toKey(row) : undefined;\n\t},\n\tlistKeys: async (ownerId) => {\n\t\tconst rows =\n\t\t\townerId === undefined\n\t\t\t\t? await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms))\n\t\t\t\t: await db\n\t\t\t\t\t\t.select()\n\t\t\t\t\t\t.from(apiKeysTable)\n\t\t\t\t\t\t.where(eq(apiKeysTable.owner_id, ownerId))\n\t\t\t\t\t\t.orderBy(desc(apiKeysTable.created_at_ms));\n\n\t\treturn rows.map(toKey);\n\t},\n\tsaveKey: async (key) => {\n\t\tconst values = toKeyValues(key);\n\t\tawait db.insert(apiKeysTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: apiKeysTable.key_id\n\t\t});\n\t},\n\ttouchKey: async (keyId, lastUsedAt) => {\n\t\tawait db\n\t\t\t.update(apiKeysTable)\n\t\t\t.set({ last_used_at_ms: lastUsedAt })\n\t\t\t.where(eq(apiKeysTable.key_id, keyId));\n\t}\n});\n",
14
- "import { and, desc, eq, gt, isNull, or, sql } from 'drizzle-orm';\nimport {\n\tbigint,\n\tcustomType,\n\tinteger,\n\tpgTable,\n\tuniqueIndex,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAgentDelegation,\n\tAgentDelegationStatus,\n\tAgentDelegationStore,\n\tAgentIdentityRegistration,\n\tAgentIdentityRegistrationKind,\n\tAgentIdentityRegistrationStatus,\n\tAgentIdentityRegistrationStore,\n\tAgentRegistration,\n\tAgentRegistrationStatus,\n\tAgentRegistrationStore\n} from './types';\n\nconst ID_LENGTH = 255;\nconst NAME_LENGTH = 255;\nconst STATUS_LENGTH = 16;\n\n// Drizzle 1.0's built-in JSONB codec is not yet serialized by Bun SQL. This\n// package-owned custom type preserves one portable boundary for Bun SQL,\n// postgres.js, and Neon while `$type<T>()` retains each column's exact shape.\nconst portableJsonb = customType<{ data: unknown; driverData: unknown }>({\n\tdataType: () => 'jsonb',\n\tfromDriver: (value) =>\n\t\ttypeof value === 'string' ? JSON.parse(value) : value,\n\ttoDriver: (value) => JSON.stringify(value)\n});\nconst encodedJsonb = <Value>(value: Value) =>\n\tsql<Value>`${JSON.stringify(value)}::text::jsonb`;\n\nexport const agentDelegationsTable = pgTable('auth_agent_delegations', {\n\tagent_id: varchar('agent_id', { length: ID_LENGTH }).notNull(),\n\tauthorization_details: portableJsonb('authorization_details').$type<\n\t\tRecord<string, unknown>[]\n\t>(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdelegation_id: varchar('delegation_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\tscopes: portableJsonb('scopes').$type<string[]>().notNull().default([]),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.$type<AgentDelegationStatus>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const agentIdentityRegistrationsTable = pgTable(\n\t'auth_agent_identity_registrations',\n\t{\n\t\tagent_id: varchar('agent_id', { length: ID_LENGTH }).notNull().unique(),\n\t\tclaim_attempt:\n\t\t\tportableJsonb('claim_attempt').$type<\n\t\t\t\tAgentIdentityRegistration['claimAttempt']\n\t\t\t>(),\n\t\tclaim_attempt_token_hash: varchar('claim_attempt_token_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).unique(),\n\t\tclaim_expires_at_ms: bigint('claim_expires_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tclaim_token_hash: varchar('claim_token_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t})\n\t\t\t.notNull()\n\t\t\t.unique(),\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\tkind: varchar('kind', { length: 32 })\n\t\t\t.$type<AgentIdentityRegistrationKind>()\n\t\t\t.notNull(),\n\t\tlast_polled_at_ms: bigint('last_polled_at_ms', { mode: 'number' }),\n\t\tlogin_hint: varchar('login_hint', { length: ID_LENGTH }),\n\t\tregistration_id: varchar('registration_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t\t.$type<AgentIdentityRegistrationStatus>()\n\t\t\t.notNull(),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\t\tupstream_client_id: varchar('upstream_client_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}),\n\t\tupstream_issuer: varchar('upstream_issuer', { length: ID_LENGTH }),\n\t\tupstream_subject: varchar('upstream_subject', { length: ID_LENGTH }),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }),\n\t\tversion: integer('version').notNull()\n\t},\n\t(table) => [\n\t\tuniqueIndex('auth_agent_identity_upstream_unique').on(\n\t\t\ttable.upstream_issuer,\n\t\t\ttable.upstream_subject,\n\t\t\ttable.upstream_client_id\n\t\t)\n\t]\n);\nexport const agentRegistrationsTable = pgTable('auth_agent_registrations', {\n\tagent_id: varchar('agent_id', { length: ID_LENGTH }).primaryKey(),\n\tallowed_scopes: portableJsonb('allowed_scopes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).unique(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tmetadata: portableJsonb('metadata').$type<Record<string, unknown>>(),\n\tname: varchar('name', { length: NAME_LENGTH }).notNull(),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.$type<AgentRegistrationStatus>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype RegistrationRow = typeof agentRegistrationsTable.$inferSelect;\ntype DelegationRow = typeof agentDelegationsTable.$inferSelect;\ntype IdentityRegistrationRow =\n\ttypeof agentIdentityRegistrationsTable.$inferSelect;\n\nconst toRegistration = (row: RegistrationRow): AgentRegistration => ({\n\tagentId: row.agent_id,\n\tallowedScopes: row.allowed_scopes,\n\tclientId: row.client_id ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\tmetadata: row.metadata ?? undefined,\n\tname: row.name,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toDelegation = (row: DelegationRow): AgentDelegation => ({\n\tagentId: row.agent_id,\n\tauthorizationDetails: row.authorization_details ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\tdelegationId: row.delegation_id,\n\texpiresAt: row.expires_at_ms ?? undefined,\n\torganizationId: row.organization_id ?? undefined,\n\tscopes: row.scopes,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nconst toIdentityRegistration = (\n\trow: IdentityRegistrationRow\n): AgentIdentityRegistration => ({\n\tagentId: row.agent_id,\n\tclaimAttempt: row.claim_attempt ?? undefined,\n\tclaimExpiresAt: row.claim_expires_at_ms,\n\tclaimTokenHash: row.claim_token_hash,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tkind: row.kind,\n\tlastPolledAt: row.last_polled_at_ms ?? undefined,\n\tloginHint: row.login_hint ?? undefined,\n\tregistrationId: row.registration_id,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tupstream:\n\t\trow.upstream_client_id === null ||\n\t\trow.upstream_issuer === null ||\n\t\trow.upstream_subject === null\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: row.upstream_client_id,\n\t\t\t\t\tissuer: row.upstream_issuer,\n\t\t\t\t\tsubject: row.upstream_subject\n\t\t\t\t},\n\tuserId: row.user_id ?? undefined,\n\tversion: row.version\n});\n\nconst identityRegistrationValues = (\n\tregistration: AgentIdentityRegistration\n) => ({\n\tagent_id: registration.agentId,\n\tclaim_attempt:\n\t\tregistration.claimAttempt === undefined\n\t\t\t? null\n\t\t\t: encodedJsonb(registration.claimAttempt),\n\tclaim_attempt_token_hash: registration.claimAttempt?.tokenHash ?? null,\n\tclaim_expires_at_ms: registration.claimExpiresAt,\n\tclaim_token_hash: registration.claimTokenHash,\n\tcreated_at_ms: registration.createdAt,\n\texpires_at_ms: registration.expiresAt,\n\tkind: registration.kind,\n\tlast_polled_at_ms: registration.lastPolledAt ?? null,\n\tlogin_hint: registration.loginHint ?? null,\n\tregistration_id: registration.registrationId,\n\tstatus: registration.status,\n\tupdated_at_ms: registration.updatedAt,\n\tupstream_client_id: registration.upstream?.clientId ?? null,\n\tupstream_issuer: registration.upstream?.issuer ?? null,\n\tupstream_subject: registration.upstream?.subject ?? null,\n\tuser_id: registration.userId ?? null,\n\tversion: registration.version\n});\n\nexport const createNeonAgentDelegationStore = (databaseUrl: string) =>\n\tcreateDrizzleAgentDelegationStore(createNeonDatabase(databaseUrl));\nexport const createNeonAgentIdentityRegistrationStore = (databaseUrl: string) =>\n\tcreatePostgresAgentIdentityRegistrationStore(\n\t\tcreateNeonDatabase(databaseUrl)\n\t);\nexport const createNeonAgentRegistrationStore = (databaseUrl: string) =>\n\tcreatePostgresAgentRegistrationStore(createNeonDatabase(databaseUrl));\nexport const createDrizzleAgentDelegationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AgentDelegationStore => ({\n\tfindActiveDelegation: async ({\n\t\tagentId,\n\t\tnow = Date.now(),\n\t\torganizationId,\n\t\tuserId\n\t}) => {\n\t\tconst organizationCondition =\n\t\t\torganizationId === undefined\n\t\t\t\t? isNull(agentDelegationsTable.organization_id)\n\t\t\t\t: eq(agentDelegationsTable.organization_id, organizationId);\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentDelegationsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(agentDelegationsTable.agent_id, agentId),\n\t\t\t\t\teq(agentDelegationsTable.user_id, userId),\n\t\t\t\t\torganizationCondition,\n\t\t\t\t\teq(agentDelegationsTable.status, 'active'),\n\t\t\t\t\tor(\n\t\t\t\t\t\tisNull(agentDelegationsTable.expires_at_ms),\n\t\t\t\t\t\tgt(agentDelegationsTable.expires_at_ms, now)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.orderBy(desc(agentDelegationsTable.updated_at_ms))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toDelegation(row);\n\t},\n\tfindByDelegationId: async (delegationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentDelegationsTable)\n\t\t\t.where(eq(agentDelegationsTable.delegation_id, delegationId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toDelegation(row);\n\t},\n\tlistDelegations: async (agentId) => {\n\t\tconst base = db.select().from(agentDelegationsTable);\n\t\tconst rows = await (agentId === undefined\n\t\t\t? base.orderBy(desc(agentDelegationsTable.created_at_ms))\n\t\t\t: base\n\t\t\t\t\t.where(eq(agentDelegationsTable.agent_id, agentId))\n\t\t\t\t\t.orderBy(desc(agentDelegationsTable.created_at_ms)));\n\n\t\treturn rows.map(toDelegation);\n\t},\n\tsaveDelegation: async (delegation) => {\n\t\tconst values = {\n\t\t\tagent_id: delegation.agentId,\n\t\t\tauthorization_details:\n\t\t\t\tdelegation.authorizationDetails === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: encodedJsonb(delegation.authorizationDetails),\n\t\t\tcreated_at_ms: delegation.createdAt,\n\t\t\tdelegation_id: delegation.delegationId,\n\t\t\texpires_at_ms: delegation.expiresAt ?? null,\n\t\t\torganization_id: delegation.organizationId ?? null,\n\t\t\tscopes: encodedJsonb(delegation.scopes),\n\t\t\tstatus: delegation.status,\n\t\t\tupdated_at_ms: delegation.updatedAt,\n\t\t\tuser_id: delegation.userId\n\t\t};\n\t\tawait db\n\t\t\t.insert(agentDelegationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: agentDelegationsTable.delegation_id\n\t\t\t});\n\t}\n});\n/** @deprecated Use createDrizzleAgentDelegationStore. */\nexport const createPostgresAgentDelegationStore =\n\tcreateDrizzleAgentDelegationStore;\nexport const createPostgresAgentIdentityRegistrationStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): AgentIdentityRegistrationStore => ({\n\tcreate: async (registration) => {\n\t\tconst rows = await db\n\t\t\t.insert(agentIdentityRegistrationsTable)\n\t\t\t.values(identityRegistrationValues(registration))\n\t\t\t.onConflictDoNothing()\n\t\t\t.returning({ id: agentIdentityRegistrationsTable.registration_id });\n\n\t\treturn rows.length === 1;\n\t},\n\tfindByAgentId: async (agentId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(eq(agentIdentityRegistrationsTable.agent_id, agentId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByAttemptTokenHash: async (attemptTokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.claim_attempt_token_hash,\n\t\t\t\t\tattemptTokenHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByClaimTokenHash: async (claimTokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.claim_token_hash,\n\t\t\t\t\tclaimTokenHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByRegistrationId: async (registrationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.registration_id,\n\t\t\t\t\tregistrationId\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByUpstreamIdentity: async ({ clientId, issuer, subject }) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.upstream_client_id,\n\t\t\t\t\t\tclientId\n\t\t\t\t\t),\n\t\t\t\t\teq(agentIdentityRegistrationsTable.upstream_issuer, issuer),\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.upstream_subject,\n\t\t\t\t\t\tsubject\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\treplace: async (registration, expectedVersion) => {\n\t\tconst next: AgentIdentityRegistration = {\n\t\t\t...registration,\n\t\t\tversion: expectedVersion + 1\n\t\t};\n\t\tconst values = identityRegistrationValues(next);\n\t\tconst rows = await db\n\t\t\t.update(agentIdentityRegistrationsTable)\n\t\t\t.set(values)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.registration_id,\n\t\t\t\t\t\tregistration.registrationId\n\t\t\t\t\t),\n\t\t\t\t\teq(agentIdentityRegistrationsTable.version, expectedVersion)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({ id: agentIdentityRegistrationsTable.registration_id });\n\n\t\treturn rows.length === 1;\n\t}\n});\nexport const createPostgresAgentRegistrationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AgentRegistrationStore => ({\n\tfindByAgentId: async (agentId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.where(eq(agentRegistrationsTable.agent_id, agentId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toRegistration(row);\n\t},\n\tfindByClientId: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.where(eq(agentRegistrationsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toRegistration(row);\n\t},\n\tlistRegistrations: async () => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.orderBy(desc(agentRegistrationsTable.created_at_ms));\n\n\t\treturn rows.map(toRegistration);\n\t},\n\tsaveRegistration: async (registration) => {\n\t\tconst values = {\n\t\t\tagent_id: registration.agentId,\n\t\t\tallowed_scopes: encodedJsonb(registration.allowedScopes),\n\t\t\tclient_id: registration.clientId ?? null,\n\t\t\tcreated_at_ms: registration.createdAt,\n\t\t\tmetadata:\n\t\t\t\tregistration.metadata === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: encodedJsonb(registration.metadata),\n\t\t\tname: registration.name,\n\t\t\tstatus: registration.status,\n\t\t\tupdated_at_ms: registration.updatedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(agentRegistrationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: agentRegistrationsTable.agent_id\n\t\t\t});\n\t}\n});\n",
15
- "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { AuditEvent, AuditEventType, AuditSink } from './types';\n\nconst ID_LENGTH = 255;\nconst IP_LENGTH = 64;\nconst TYPE_LENGTH = 64;\nconst DEFAULT_AUDIT_LIMIT = 100;\n\nexport const auditEventsTable = pgTable('auth_audit_events', {\n\tat_ms: bigint('at_ms', { mode: 'number' }).notNull(),\n\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\tip: varchar('ip', { length: IP_LENGTH }),\n\tmetadata_json: jsonb('metadata_json').$type<Record<string, unknown>>(),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\ttype: varchar('type', { length: TYPE_LENGTH }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH })\n});\n\ntype AuditRow = typeof auditEventsTable.$inferSelect;\n\nconst toEvent = (row: AuditRow): AuditEvent => ({\n\tat: row.at_ms,\n\tip: row.ip ?? undefined,\n\tmetadata: row.metadata_json ?? undefined,\n\torganizationId: row.organization_id ?? undefined,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: `type` was persisted from AuditEventType, so reading it back is sound\n\ttype: row.type as AuditEventType,\n\tuserId: row.user_id ?? undefined\n});\n\nexport const createNeonAuditSink = (databaseUrl: string) =>\n\tcreatePostgresAuditSink(createNeonDatabase(databaseUrl));\nexport const createPostgresAuditSink = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AuditSink => ({\n\tappend: async (event) => {\n\t\tawait db.insert(auditEventsTable).values({\n\t\t\tat_ms: event.at,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tip: event.ip ?? null,\n\t\t\tmetadata_json: event.metadata ?? null,\n\t\t\torganization_id: event.organizationId ?? null,\n\t\t\ttype: event.type,\n\t\t\tuser_id: event.userId ?? null\n\t\t});\n\t},\n\tlist: async (filter) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(auditEventsTable)\n\t\t\t.where(\n\t\t\t\tfilter?.userId\n\t\t\t\t\t? eq(auditEventsTable.user_id, filter.userId)\n\t\t\t\t\t: undefined\n\t\t\t)\n\t\t\t.orderBy(desc(auditEventsTable.at_ms))\n\t\t\t.limit(filter?.limit ?? DEFAULT_AUDIT_LIMIT);\n\n\t\treturn rows.map(toEvent);\n\t},\n\tprune: async (before) => {\n\t\tconst deleted = await db\n\t\t\t.delete(auditEventsTable)\n\t\t\t.where(lt(auditEventsTable.at_ms, before))\n\t\t\t.returning({ id: auditEventsTable.id });\n\n\t\treturn deleted.length;\n\t}\n});\n",
15
+ "import { and, desc, eq, gt, isNull, or } from 'drizzle-orm';\nimport {\n\tbigint,\n\tcustomType,\n\tinteger,\n\tpgTable,\n\tuniqueIndex,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tAgentDelegation,\n\tAgentDelegationStatus,\n\tAgentDelegationStore,\n\tAgentIdentityRegistration,\n\tAgentIdentityRegistrationKind,\n\tAgentIdentityRegistrationStatus,\n\tAgentIdentityRegistrationStore,\n\tAgentRegistration,\n\tAgentRegistrationStatus,\n\tAgentRegistrationStore\n} from './types';\n\nconst ID_LENGTH = 255;\nconst NAME_LENGTH = 255;\nconst STATUS_LENGTH = 16;\n\n// Drizzle 1.0's built-in JSONB codec is not yet serialized by Bun SQL. This\n// package-owned custom type preserves one portable boundary for Bun SQL,\n// postgres.js, and Neon while `$type<T>()` retains each column's exact shape.\nconst portableJsonb = customType<{ data: unknown; driverData: unknown }>({\n\tdataType: () => 'jsonb',\n\tfromDriver: (value) =>\n\t\ttypeof value === 'string' ? JSON.parse(value) : value,\n\ttoDriver: (value) => JSON.stringify(value)\n});\nexport const agentDelegationsTable = pgTable('auth_agent_delegations', {\n\tagent_id: varchar('agent_id', { length: ID_LENGTH }).notNull(),\n\tauthorization_details: portableJsonb('authorization_details').$type<\n\t\tRecord<string, unknown>[]\n\t>(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tdelegation_id: varchar('delegation_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\tscopes: portableJsonb('scopes').$type<string[]>().notNull().default([]),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.$type<AgentDelegationStatus>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const agentIdentityRegistrationsTable = pgTable(\n\t'auth_agent_identity_registrations',\n\t{\n\t\tagent_id: varchar('agent_id', { length: ID_LENGTH }).notNull().unique(),\n\t\tclaim_attempt:\n\t\t\tportableJsonb('claim_attempt').$type<\n\t\t\t\tAgentIdentityRegistration['claimAttempt']\n\t\t\t>(),\n\t\tclaim_attempt_token_hash: varchar('claim_attempt_token_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t}).unique(),\n\t\tclaim_expires_at_ms: bigint('claim_expires_at_ms', {\n\t\t\tmode: 'number'\n\t\t}).notNull(),\n\t\tclaim_token_hash: varchar('claim_token_hash', {\n\t\t\tlength: ID_LENGTH\n\t\t})\n\t\t\t.notNull()\n\t\t\t.unique(),\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\tkind: varchar('kind', { length: 32 })\n\t\t\t.$type<AgentIdentityRegistrationKind>()\n\t\t\t.notNull(),\n\t\tlast_polled_at_ms: bigint('last_polled_at_ms', { mode: 'number' }),\n\t\tlogin_hint: varchar('login_hint', { length: ID_LENGTH }),\n\t\tregistration_id: varchar('registration_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}).primaryKey(),\n\t\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t\t.$type<AgentIdentityRegistrationStatus>()\n\t\t\t.notNull(),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\t\tupstream_client_id: varchar('upstream_client_id', {\n\t\t\tlength: ID_LENGTH\n\t\t}),\n\t\tupstream_issuer: varchar('upstream_issuer', { length: ID_LENGTH }),\n\t\tupstream_subject: varchar('upstream_subject', { length: ID_LENGTH }),\n\t\tuser_id: varchar('user_id', { length: ID_LENGTH }),\n\t\tversion: integer('version').notNull()\n\t},\n\t(table) => [\n\t\tuniqueIndex('auth_agent_identity_upstream_unique').on(\n\t\t\ttable.upstream_issuer,\n\t\t\ttable.upstream_subject,\n\t\t\ttable.upstream_client_id\n\t\t)\n\t]\n);\nexport const agentRegistrationsTable = pgTable('auth_agent_registrations', {\n\tagent_id: varchar('agent_id', { length: ID_LENGTH }).primaryKey(),\n\tallowed_scopes: portableJsonb('allowed_scopes')\n\t\t.$type<string[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).unique(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tmetadata: portableJsonb('metadata').$type<Record<string, unknown>>(),\n\tname: varchar('name', { length: NAME_LENGTH }).notNull(),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.$type<AgentRegistrationStatus>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype RegistrationRow = typeof agentRegistrationsTable.$inferSelect;\ntype DelegationRow = typeof agentDelegationsTable.$inferSelect;\ntype IdentityRegistrationRow =\n\ttypeof agentIdentityRegistrationsTable.$inferSelect;\n\nconst toRegistration = (row: RegistrationRow): AgentRegistration => ({\n\tagentId: row.agent_id,\n\tallowedScopes: row.allowed_scopes,\n\tclientId: row.client_id ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\tmetadata: row.metadata ?? undefined,\n\tname: row.name,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toDelegation = (row: DelegationRow): AgentDelegation => ({\n\tagentId: row.agent_id,\n\tauthorizationDetails: row.authorization_details ?? undefined,\n\tcreatedAt: row.created_at_ms,\n\tdelegationId: row.delegation_id,\n\texpiresAt: row.expires_at_ms ?? undefined,\n\torganizationId: row.organization_id ?? undefined,\n\tscopes: row.scopes,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id\n});\n\nconst toIdentityRegistration = (\n\trow: IdentityRegistrationRow\n): AgentIdentityRegistration => ({\n\tagentId: row.agent_id,\n\tclaimAttempt: row.claim_attempt ?? undefined,\n\tclaimExpiresAt: row.claim_expires_at_ms,\n\tclaimTokenHash: row.claim_token_hash,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tkind: row.kind,\n\tlastPolledAt: row.last_polled_at_ms ?? undefined,\n\tloginHint: row.login_hint ?? undefined,\n\tregistrationId: row.registration_id,\n\tstatus: row.status,\n\tupdatedAt: row.updated_at_ms,\n\tupstream:\n\t\trow.upstream_client_id === null ||\n\t\trow.upstream_issuer === null ||\n\t\trow.upstream_subject === null\n\t\t\t? undefined\n\t\t\t: {\n\t\t\t\t\tclientId: row.upstream_client_id,\n\t\t\t\t\tissuer: row.upstream_issuer,\n\t\t\t\t\tsubject: row.upstream_subject\n\t\t\t\t},\n\tuserId: row.user_id ?? undefined,\n\tversion: row.version\n});\n\nconst identityRegistrationValues = (\n\tregistration: AgentIdentityRegistration\n) => ({\n\tagent_id: registration.agentId,\n\tclaim_attempt:\n\t\tregistration.claimAttempt === undefined\n\t\t\t? null\n\t\t\t: registration.claimAttempt,\n\tclaim_attempt_token_hash: registration.claimAttempt?.tokenHash ?? null,\n\tclaim_expires_at_ms: registration.claimExpiresAt,\n\tclaim_token_hash: registration.claimTokenHash,\n\tcreated_at_ms: registration.createdAt,\n\texpires_at_ms: registration.expiresAt,\n\tkind: registration.kind,\n\tlast_polled_at_ms: registration.lastPolledAt ?? null,\n\tlogin_hint: registration.loginHint ?? null,\n\tregistration_id: registration.registrationId,\n\tstatus: registration.status,\n\tupdated_at_ms: registration.updatedAt,\n\tupstream_client_id: registration.upstream?.clientId ?? null,\n\tupstream_issuer: registration.upstream?.issuer ?? null,\n\tupstream_subject: registration.upstream?.subject ?? null,\n\tuser_id: registration.userId ?? null,\n\tversion: registration.version\n});\n\nexport const createNeonAgentDelegationStore = (databaseUrl: string) =>\n\tcreateDrizzleAgentDelegationStore(createNeonDatabase(databaseUrl));\nexport const createNeonAgentIdentityRegistrationStore = (databaseUrl: string) =>\n\tcreatePostgresAgentIdentityRegistrationStore(\n\t\tcreateNeonDatabase(databaseUrl)\n\t);\nexport const createNeonAgentRegistrationStore = (databaseUrl: string) =>\n\tcreatePostgresAgentRegistrationStore(createNeonDatabase(databaseUrl));\nexport const createDrizzleAgentDelegationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AgentDelegationStore => ({\n\tfindActiveDelegation: async ({\n\t\tagentId,\n\t\tnow = Date.now(),\n\t\torganizationId,\n\t\tuserId\n\t}) => {\n\t\tconst organizationCondition =\n\t\t\torganizationId === undefined\n\t\t\t\t? isNull(agentDelegationsTable.organization_id)\n\t\t\t\t: eq(agentDelegationsTable.organization_id, organizationId);\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentDelegationsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(agentDelegationsTable.agent_id, agentId),\n\t\t\t\t\teq(agentDelegationsTable.user_id, userId),\n\t\t\t\t\torganizationCondition,\n\t\t\t\t\teq(agentDelegationsTable.status, 'active'),\n\t\t\t\t\tor(\n\t\t\t\t\t\tisNull(agentDelegationsTable.expires_at_ms),\n\t\t\t\t\t\tgt(agentDelegationsTable.expires_at_ms, now)\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.orderBy(desc(agentDelegationsTable.updated_at_ms))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toDelegation(row);\n\t},\n\tfindByDelegationId: async (delegationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentDelegationsTable)\n\t\t\t.where(eq(agentDelegationsTable.delegation_id, delegationId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toDelegation(row);\n\t},\n\tlistDelegations: async (agentId) => {\n\t\tconst base = db.select().from(agentDelegationsTable);\n\t\tconst rows = await (agentId === undefined\n\t\t\t? base.orderBy(desc(agentDelegationsTable.created_at_ms))\n\t\t\t: base\n\t\t\t\t\t.where(eq(agentDelegationsTable.agent_id, agentId))\n\t\t\t\t\t.orderBy(desc(agentDelegationsTable.created_at_ms)));\n\n\t\treturn rows.map(toDelegation);\n\t},\n\tsaveDelegation: async (delegation) => {\n\t\t\tconst values: typeof agentDelegationsTable.$inferInsert = {\n\t\t\tagent_id: delegation.agentId,\n\t\t\tauthorization_details:\n\t\t\t\tdelegation.authorizationDetails === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: delegation.authorizationDetails,\n\t\t\tcreated_at_ms: delegation.createdAt,\n\t\t\tdelegation_id: delegation.delegationId,\n\t\t\texpires_at_ms: delegation.expiresAt ?? null,\n\t\t\torganization_id: delegation.organizationId ?? null,\n\t\t\tscopes: delegation.scopes,\n\t\t\tstatus: delegation.status,\n\t\t\tupdated_at_ms: delegation.updatedAt,\n\t\t\tuser_id: delegation.userId\n\t\t};\n\t\tawait db\n\t\t\t.insert(agentDelegationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: agentDelegationsTable.delegation_id\n\t\t\t});\n\t}\n});\n/** @deprecated Use createDrizzleAgentDelegationStore. */\nexport const createPostgresAgentDelegationStore =\n\tcreateDrizzleAgentDelegationStore;\nexport const createPostgresAgentIdentityRegistrationStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): AgentIdentityRegistrationStore => ({\n\tcreate: async (registration) => {\n\t\tconst rows = await db\n\t\t\t.insert(agentIdentityRegistrationsTable)\n\t\t\t.values(identityRegistrationValues(registration))\n\t\t\t.onConflictDoNothing()\n\t\t\t.returning({ id: agentIdentityRegistrationsTable.registration_id });\n\n\t\treturn rows.length === 1;\n\t},\n\tfindByAgentId: async (agentId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(eq(agentIdentityRegistrationsTable.agent_id, agentId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByAttemptTokenHash: async (attemptTokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.claim_attempt_token_hash,\n\t\t\t\t\tattemptTokenHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByClaimTokenHash: async (claimTokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.claim_token_hash,\n\t\t\t\t\tclaimTokenHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByRegistrationId: async (registrationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tagentIdentityRegistrationsTable.registration_id,\n\t\t\t\t\tregistrationId\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\tfindByUpstreamIdentity: async ({ clientId, issuer, subject }) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentIdentityRegistrationsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.upstream_client_id,\n\t\t\t\t\t\tclientId\n\t\t\t\t\t),\n\t\t\t\t\teq(agentIdentityRegistrationsTable.upstream_issuer, issuer),\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.upstream_subject,\n\t\t\t\t\t\tsubject\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toIdentityRegistration(row);\n\t},\n\treplace: async (registration, expectedVersion) => {\n\t\tconst next: AgentIdentityRegistration = {\n\t\t\t...registration,\n\t\t\tversion: expectedVersion + 1\n\t\t};\n\t\tconst values = identityRegistrationValues(next);\n\t\tconst rows = await db\n\t\t\t.update(agentIdentityRegistrationsTable)\n\t\t\t.set(values)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\tagentIdentityRegistrationsTable.registration_id,\n\t\t\t\t\t\tregistration.registrationId\n\t\t\t\t\t),\n\t\t\t\t\teq(agentIdentityRegistrationsTable.version, expectedVersion)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.returning({ id: agentIdentityRegistrationsTable.registration_id });\n\n\t\treturn rows.length === 1;\n\t}\n});\nexport const createPostgresAgentRegistrationStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AgentRegistrationStore => ({\n\tfindByAgentId: async (agentId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.where(eq(agentRegistrationsTable.agent_id, agentId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toRegistration(row);\n\t},\n\tfindByClientId: async (clientId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.where(eq(agentRegistrationsTable.client_id, clientId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toRegistration(row);\n\t},\n\tlistRegistrations: async () => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(agentRegistrationsTable)\n\t\t\t.orderBy(desc(agentRegistrationsTable.created_at_ms));\n\n\t\treturn rows.map(toRegistration);\n\t},\n\tsaveRegistration: async (registration) => {\n\t\t\tconst values: typeof agentRegistrationsTable.$inferInsert = {\n\t\t\tagent_id: registration.agentId,\n\t\t\tallowed_scopes: registration.allowedScopes,\n\t\t\tclient_id: registration.clientId ?? null,\n\t\t\tcreated_at_ms: registration.createdAt,\n\t\t\tmetadata:\n\t\t\t\tregistration.metadata === undefined\n\t\t\t\t\t? null\n\t\t\t\t\t: registration.metadata,\n\t\t\tname: registration.name,\n\t\t\tstatus: registration.status,\n\t\t\tupdated_at_ms: registration.updatedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(agentRegistrationsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: agentRegistrationsTable.agent_id\n\t\t\t});\n\t}\n});\n",
16
+ "import { desc, eq, lt } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport {\n\tisAuditEventType,\n\ttype AuditEvent,\n\ttype AuditSink\n} from './types';\n\nconst ID_LENGTH = 255;\nconst IP_LENGTH = 64;\nconst TYPE_LENGTH = 64;\nconst DEFAULT_AUDIT_LIMIT = 100;\n\nexport const auditEventsTable = pgTable('auth_audit_events', {\n\tat_ms: bigint('at_ms', { mode: 'number' }).notNull(),\n\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\tip: varchar('ip', { length: IP_LENGTH }),\n\tmetadata_json: jsonb('metadata_json').$type<Record<string, unknown>>(),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\ttype: varchar('type', { length: TYPE_LENGTH }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH })\n});\n\ntype AuditRow = typeof auditEventsTable.$inferSelect;\n\nconst toEvent = (row: AuditRow): AuditEvent => {\n\tif (!isAuditEventType(row.type))\n\t\tthrow new Error(`Unknown persisted audit event type: ${row.type}`);\n\n\treturn {\n\t\tat: row.at_ms,\n\t\tip: row.ip ?? undefined,\n\t\tmetadata: row.metadata_json ?? undefined,\n\t\torganizationId: row.organization_id ?? undefined,\n\t\ttype: row.type,\n\t\tuserId: row.user_id ?? undefined\n\t};\n};\n\nexport const createNeonAuditSink = (databaseUrl: string) =>\n\tcreatePostgresAuditSink(createNeonDatabase(databaseUrl));\nexport const createPostgresAuditSink = <DB extends AnyPgDatabase>(\n\tdb: DB\n): AuditSink => ({\n\tappend: async (event) => {\n\t\tawait db.insert(auditEventsTable).values({\n\t\t\tat_ms: event.at,\n\t\t\tid: crypto.randomUUID(),\n\t\t\tip: event.ip ?? null,\n\t\t\tmetadata_json: event.metadata ?? null,\n\t\t\torganization_id: event.organizationId ?? null,\n\t\t\ttype: event.type,\n\t\t\tuser_id: event.userId ?? null\n\t\t});\n\t},\n\tlist: async (filter) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(auditEventsTable)\n\t\t\t.where(\n\t\t\t\tfilter?.userId\n\t\t\t\t\t? eq(auditEventsTable.user_id, filter.userId)\n\t\t\t\t\t: undefined\n\t\t\t)\n\t\t\t.orderBy(desc(auditEventsTable.at_ms))\n\t\t\t.limit(filter?.limit ?? DEFAULT_AUDIT_LIMIT);\n\n\t\treturn rows.map(toEvent);\n\t},\n\tprune: async (before) => {\n\t\tconst deleted = await db\n\t\t\t.delete(auditEventsTable)\n\t\t\t.where(lt(auditEventsTable.at_ms, before))\n\t\t\t.returning({ id: auditEventsTable.id });\n\n\t\treturn deleted.length;\n\t}\n});\n",
16
17
  "import { eq } from 'drizzle-orm';\nimport { bigint, boolean, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tCredentialRecord,\n\tCredentialStatus,\n\tCredentialStore,\n\tCredentialToken\n} from './types';\n\nconst EMAIL_LENGTH = 320;\nconst ID_LENGTH = 255;\nconst STATUS_LENGTH = 32;\nconst TOKEN_HASH_LENGTH = 255;\n\nexport const credentialsTable = pgTable('auth_credentials', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\temail: varchar('email', { length: EMAIL_LENGTH }).primaryKey(),\n\temail_verified: boolean('email_verified').notNull().default(false),\n\torganization_id: varchar('organization_id', { length: ID_LENGTH }),\n\tpassword_hash: text('password_hash').notNull(),\n\tstatus: varchar('status', { length: STATUS_LENGTH })\n\t\t.notNull()\n\t\t.default('active'),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH })\n});\n\nconst createTokenTable = (name: string) =>\n\tpgTable(name, {\n\t\temail: varchar('email', { length: EMAIL_LENGTH }).notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\ttoken_hash: varchar('token_hash', {\n\t\t\tlength: TOKEN_HASH_LENGTH\n\t\t}).primaryKey()\n\t});\n\nexport const credentialResetTokensTable = createTokenTable(\n\t'auth_credential_reset_tokens'\n);\nexport const credentialVerificationTokensTable = createTokenTable(\n\t'auth_credential_verification_tokens'\n);\n\ntype CredentialRow = typeof credentialsTable.$inferSelect;\ntype CredentialInsert = typeof credentialsTable.$inferInsert;\ntype TokenTable = ReturnType<typeof createTokenTable>;\ntype TokenRow = TokenTable['$inferSelect'];\ntype TokenInsert = TokenTable['$inferInsert'];\n\nconst CREDENTIAL_STATUSES: CredentialStatus[] = ['active', 'disabled'];\n\nconst isCredentialStatus = (value: string): value is CredentialStatus =>\n\tCREDENTIAL_STATUSES.some((status) => status === value);\n\nconst toCredentialRecord = (row: CredentialRow): CredentialRecord => ({\n\tcreatedAt: row.created_at_ms,\n\temail: row.email,\n\temailVerified: row.email_verified,\n\torganizationId: row.organization_id ?? undefined,\n\tpasswordHash: row.password_hash,\n\tstatus: isCredentialStatus(row.status) ? row.status : 'active',\n\tupdatedAt: row.updated_at_ms,\n\tuserId: row.user_id ?? undefined\n});\n\nconst toToken = (row: TokenRow): CredentialToken => ({\n\temail: row.email,\n\texpiresAt: row.expires_at_ms,\n\ttokenHash: row.token_hash\n});\n\nconst saveToken = async <DB extends AnyPgDatabase>(\n\tdb: DB,\n\ttable: TokenTable,\n\ttoken: CredentialToken\n) => {\n\tconst values: TokenInsert = {\n\t\temail: token.email.toLowerCase(),\n\t\texpires_at_ms: token.expiresAt,\n\t\ttoken_hash: token.tokenHash\n\t};\n\tawait db\n\t\t.insert(table)\n\t\t.values(values)\n\t\t.onConflictDoUpdate({ set: values, target: table.token_hash });\n};\n\nconst consumeToken = async <DB extends AnyPgDatabase>(\n\tdb: DB,\n\ttable: TokenTable,\n\ttokenHash: string\n) => {\n\tconst [row] = await db\n\t\t.select()\n\t\t.from(table)\n\t\t.where(eq(table.token_hash, tokenHash))\n\t\t.limit(1);\n\tif (!row) return undefined;\n\n\tawait db.delete(table).where(eq(table.token_hash, tokenHash));\n\tif (row.expires_at_ms < Date.now()) return undefined;\n\n\treturn toToken(row);\n};\n\nexport const createNeonCredentialStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialStore(createNeonDatabase(databaseUrl));\nexport const createPostgresCredentialStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): CredentialStore => ({\n\tconsumeResetToken: (tokenHash) =>\n\t\tconsumeToken(db, credentialResetTokensTable, tokenHash),\n\tconsumeVerificationToken: (tokenHash) =>\n\t\tconsumeToken(db, credentialVerificationTokensTable, tokenHash),\n\tgetCredentialByEmail: async (email) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(credentialsTable)\n\t\t\t.where(eq(credentialsTable.email, email.toLowerCase()))\n\t\t\t.limit(1);\n\n\t\treturn row ? toCredentialRecord(row) : undefined;\n\t},\n\tsaveCredential: async (credential) => {\n\t\tconst values: CredentialInsert = {\n\t\t\tcreated_at_ms: credential.createdAt,\n\t\t\temail: credential.email.toLowerCase(),\n\t\t\temail_verified: credential.emailVerified,\n\t\t\torganization_id: credential.organizationId ?? null,\n\t\t\tpassword_hash: credential.passwordHash,\n\t\t\tstatus: credential.status,\n\t\t\tupdated_at_ms: credential.updatedAt,\n\t\t\tuser_id: credential.userId ?? null\n\t\t};\n\t\tawait db.insert(credentialsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: credentialsTable.email\n\t\t});\n\t},\n\tsaveResetToken: (token) => saveToken(db, credentialResetTokensTable, token),\n\tsaveVerificationToken: (token) =>\n\t\tsaveToken(db, credentialVerificationTokensTable, token),\n\tsetEmailVerified: async (email) => {\n\t\tawait db\n\t\t\t.update(credentialsTable)\n\t\t\t.set({ email_verified: true, updated_at_ms: Date.now() })\n\t\t\t.where(eq(credentialsTable.email, email.toLowerCase()));\n\t}\n});\n",
17
18
  "import { and, eq } from 'drizzle-orm';\nimport { pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport { warrantKey } from './inMemoryStores';\nimport type { Warrant, WarrantStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const warrantsTable = pgTable('auth_fga_warrants', {\n\tid: varchar('id', { length: ID_LENGTH }).primaryKey(),\n\trelation: varchar('relation', { length: ID_LENGTH }).notNull(),\n\tresource_id: varchar('resource_id', { length: ID_LENGTH }).notNull(),\n\tresource_type: varchar('resource_type', { length: ID_LENGTH }).notNull(),\n\tsubject_id: varchar('subject_id', { length: ID_LENGTH }).notNull(),\n\tsubject_relation: varchar('subject_relation', { length: ID_LENGTH }),\n\tsubject_type: varchar('subject_type', { length: ID_LENGTH }).notNull()\n});\n\ntype WarrantRow = typeof warrantsTable.$inferSelect;\n\nconst toWarrant = (row: WarrantRow): Warrant => ({\n\trelation: row.relation,\n\tresourceId: row.resource_id,\n\tresourceType: row.resource_type,\n\tsubjectId: row.subject_id,\n\tsubjectRelation: row.subject_relation ?? undefined,\n\tsubjectType: row.subject_type\n});\n\nexport const createNeonWarrantStore = (databaseUrl: string) =>\n\tcreatePostgresWarrantStore(createNeonDatabase(databaseUrl));\nexport const createPostgresWarrantStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): WarrantStore => ({\n\tdeleteWarrant: async (warrant) => {\n\t\tawait db\n\t\t\t.delete(warrantsTable)\n\t\t\t.where(eq(warrantsTable.id, warrantKey(warrant)));\n\t},\n\tlistForResource: async (resourceType, resourceId, relation) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(warrantsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(warrantsTable.resource_type, resourceType),\n\t\t\t\t\teq(warrantsTable.resource_id, resourceId),\n\t\t\t\t\teq(warrantsTable.relation, relation)\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn rows.map(toWarrant);\n\t},\n\tlistResourceIds: async (resourceType) => {\n\t\tconst rows = await db\n\t\t\t.selectDistinct({ resourceId: warrantsTable.resource_id })\n\t\t\t.from(warrantsTable)\n\t\t\t.where(eq(warrantsTable.resource_type, resourceType));\n\n\t\treturn rows.map((row) => row.resourceId);\n\t},\n\tsaveWarrant: async (warrant) => {\n\t\tawait db\n\t\t\t.insert(warrantsTable)\n\t\t\t.values({\n\t\t\t\tid: warrantKey(warrant),\n\t\t\t\trelation: warrant.relation,\n\t\t\t\tresource_id: warrant.resourceId,\n\t\t\t\tresource_type: warrant.resourceType,\n\t\t\t\tsubject_id: warrant.subjectId,\n\t\t\t\tsubject_relation: warrant.subjectRelation ?? null,\n\t\t\t\tsubject_type: warrant.subjectType\n\t\t\t})\n\t\t\t.onConflictDoNothing({ target: warrantsTable.id });\n\t}\n});\n",
18
19
  "import type {\n\tLinkedProviderBinding,\n\tLinkedProviderBindingStore,\n\tLinkedProviderGrant,\n\tLinkedProviderGrantStore\n} from '@absolutejs/linked-providers';\nimport { neon } from '@neondatabase/serverless';\nimport { desc, eq } 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<Record<string, unknown>>().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<Record<string, unknown>>().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:\n\t\t\t\t\t\tgrant.refreshTokenCiphertext ?? null,\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",
@@ -25,7 +26,7 @@
25
26
  "import { eq } from 'drizzle-orm';\nimport { bigint, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { SetupCapability, SetupSession, SetupSessionStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const setupSessionsTable = pgTable('auth_setup_sessions', {\n\tcapabilities: jsonb('capabilities')\n\t\t.$type<SetupCapability[]>()\n\t\t.notNull()\n\t\t.default([]),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tcreated_by: varchar('created_by', { length: ID_LENGTH }),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\tsetup_session_id: varchar('setup_session_id', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\ttoken_hash: varchar('token_hash', { length: ID_LENGTH }).notNull().unique()\n});\n\ntype SetupRow = typeof setupSessionsTable.$inferSelect;\ntype SetupInsert = typeof setupSessionsTable.$inferInsert;\n\nconst toSession = (row: SetupRow): SetupSession => ({\n\tcapabilities: row.capabilities,\n\tcreatedAt: row.created_at_ms,\n\tcreatedBy: row.created_by ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\torganizationId: row.organization_id,\n\tsetupSessionId: row.setup_session_id,\n\ttokenHash: row.token_hash\n});\n\nexport const createNeonSetupSessionStore = (databaseUrl: string) =>\n\tcreatePostgresSetupSessionStore(createNeonDatabase(databaseUrl));\nexport const createPostgresSetupSessionStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): SetupSessionStore => ({\n\tdeleteSetupSession: async (setupSessionId) => {\n\t\tawait db\n\t\t\t.delete(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.setup_session_id, setupSessionId));\n\t},\n\tgetSetupSessionByTokenHash: async (tokenHash) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(setupSessionsTable)\n\t\t\t.where(eq(setupSessionsTable.token_hash, tokenHash))\n\t\t\t.limit(1);\n\n\t\treturn row ? toSession(row) : undefined;\n\t},\n\tsaveSetupSession: async (session) => {\n\t\tconst values: SetupInsert = {\n\t\t\tcapabilities: session.capabilities,\n\t\t\tcreated_at_ms: session.createdAt,\n\t\t\tcreated_by: session.createdBy ?? null,\n\t\t\texpires_at_ms: session.expiresAt,\n\t\t\torganization_id: session.organizationId,\n\t\t\tsetup_session_id: session.setupSessionId,\n\t\t\ttoken_hash: session.tokenHash\n\t\t};\n\t\tawait db.insert(setupSessionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: setupSessionsTable.setup_session_id\n\t\t});\n\t}\n});\n",
26
27
  "import { and, 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 { Role, RoleStore } from './types';\n\nconst ID_LENGTH = 255;\nconst SLUG_LENGTH = 128;\n// Global roles (no organizationId) live under the empty-string scope so the composite PK stays\n// NOT NULL (a real organizationId is never the empty string).\nconst GLOBAL_SCOPE = '';\n\nexport const rolesTable = pgTable(\n\t'auth_roles',\n\t{\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\torganization_id: varchar('organization_id', { length: ID_LENGTH })\n\t\t\t.notNull()\n\t\t\t.default(GLOBAL_SCOPE),\n\t\tpermissions: jsonb('permissions')\n\t\t\t.$type<string[]>()\n\t\t\t.notNull()\n\t\t\t.default([]),\n\t\tslug: varchar('slug', { length: SLUG_LENGTH }).notNull(),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n\t},\n\t(table) => [primaryKey({ columns: [table.organization_id, table.slug] })]\n);\n\ntype RoleRow = typeof rolesTable.$inferSelect;\ntype RoleInsert = typeof rolesTable.$inferInsert;\n\nconst toRole = (row: RoleRow): Role => ({\n\tcreatedAt: row.created_at_ms,\n\torganizationId:\n\t\trow.organization_id === GLOBAL_SCOPE ? undefined : row.organization_id,\n\tpermissions: row.permissions,\n\tslug: row.slug,\n\tupdatedAt: row.updated_at_ms\n});\n\nexport const createNeonRoleStore = (databaseUrl: string) =>\n\tcreatePostgresRoleStore(createNeonDatabase(databaseUrl));\nexport const createPostgresRoleStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): RoleStore => ({\n\tdeleteRole: async (slug, organizationId) => {\n\t\tawait db\n\t\t\t.delete(rolesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\trolesTable.organization_id,\n\t\t\t\t\t\torganizationId ?? GLOBAL_SCOPE\n\t\t\t\t\t),\n\t\t\t\t\teq(rolesTable.slug, slug)\n\t\t\t\t)\n\t\t\t);\n\t},\n\tgetRole: async (slug, organizationId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(rolesTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(\n\t\t\t\t\t\trolesTable.organization_id,\n\t\t\t\t\t\torganizationId ?? GLOBAL_SCOPE\n\t\t\t\t\t),\n\t\t\t\t\teq(rolesTable.slug, slug)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\n\t\treturn row ? toRole(row) : undefined;\n\t},\n\tlistRoles: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(rolesTable)\n\t\t\t.where(\n\t\t\t\teq(rolesTable.organization_id, organizationId ?? GLOBAL_SCOPE)\n\t\t\t);\n\n\t\treturn rows.map(toRole);\n\t},\n\tsaveRole: async (role) => {\n\t\tconst values: RoleInsert = {\n\t\t\tcreated_at_ms: role.createdAt,\n\t\t\torganization_id: role.organizationId ?? GLOBAL_SCOPE,\n\t\t\tpermissions: role.permissions,\n\t\t\tslug: role.slug,\n\t\t\tupdated_at_ms: role.updatedAt\n\t\t};\n\t\tawait db\n\t\t\t.insert(rolesTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: [rolesTable.organization_id, rolesTable.slug]\n\t\t\t});\n\t}\n});\n",
27
28
  "import { desc, eq } from 'drizzle-orm';\nimport { bigint, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { ScimToken, ScimTokenStore } from './types';\n\nconst ID_LENGTH = 255;\n\nexport const scimTokensTable = pgTable('auth_scim_tokens', {\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\thashed_token: varchar('hashed_token', { length: ID_LENGTH }).notNull(),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttoken_id: varchar('token_id', { length: ID_LENGTH }).primaryKey()\n});\n\ntype ScimTokenRow = typeof scimTokensTable.$inferSelect;\ntype ScimTokenInsert = typeof scimTokensTable.$inferInsert;\n\nconst toToken = (row: ScimTokenRow): ScimToken => ({\n\tcreatedAt: row.created_at_ms,\n\thashedToken: row.hashed_token,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\torganizationId: row.organization_id,\n\ttokenId: row.token_id\n});\n\nconst toValues = (token: ScimToken): ScimTokenInsert => ({\n\tcreated_at_ms: token.createdAt,\n\thashed_token: token.hashedToken,\n\tlast_used_at_ms: token.lastUsedAt ?? null,\n\torganization_id: token.organizationId,\n\ttoken_id: token.tokenId\n});\n\nexport const createNeonScimTokenStore = (databaseUrl: string) =>\n\tcreatePostgresScimTokenStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresScimTokenStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): ScimTokenStore => ({\n\tdeleteToken: async (tokenId) => {\n\t\tawait db\n\t\t\t.delete(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.token_id, tokenId));\n\t},\n\tfindByHashedToken: async (hashedToken) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.hashed_token, hashedToken))\n\t\t\t.limit(1);\n\n\t\treturn row ? toToken(row) : undefined;\n\t},\n\tlistTokens: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(scimTokensTable)\n\t\t\t.where(eq(scimTokensTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(scimTokensTable.created_at_ms));\n\n\t\treturn rows.map(toToken);\n\t},\n\tsaveToken: async (token) => {\n\t\tconst values = toValues(token);\n\t\tawait db.insert(scimTokensTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: scimTokensTable.token_id\n\t\t});\n\t}\n});\n",
28
- "import { neon } from '@neondatabase/serverless';\nimport { eq, lt } from 'drizzle-orm';\nimport { drizzle, NeonHttpDatabase } from 'drizzle-orm/neon-http';\nimport {\n\ttype AnyPgTable,\n\tbigint,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { isUserSessionId } from '../typeGuards';\nimport type { SessionData, UnregisteredSessionData } from '../types';\nimport type { AuthSessionStore } from './types';\n\nexport const authSessionsTable = pgTable(\n\t'auth_sessions',\n\t{\n\t\taccess_token: text('access_token'),\n\t\tauthenticated_at_ms: bigint('authenticated_at_ms', { mode: 'number' }),\n\t\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tid: varchar('id', { length: 255 }).primaryKey(),\n\t\trefresh_token: text('refresh_token'),\n\t\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\t\tuser_json: jsonb('user_json').$type<Record<string, unknown>>().notNull()\n\t},\n\t// Indexed so `deleteExpired` (DELETE WHERE expires_at_ms < now) is a range\n\t// scan, not a full-table scan, on the periodic cleanup.\n\t(table) => [index('auth_sessions_expires_at_idx').on(table.expires_at_ms)]\n);\n\nexport const authUnregisteredSessionsTable = pgTable(\n\t'auth_unregistered_sessions',\n\t{\n\t\taccess_token: text('access_token'),\n\t\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tid: varchar('id', { length: 255 }).primaryKey(),\n\t\trefresh_token: text('refresh_token'),\n\t\tsession_information_json: jsonb('session_information_json').$type<\n\t\t\tRecord<string, unknown>\n\t\t>(),\n\t\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\t\tuser_identity_json:\n\t\t\tjsonb('user_identity_json').$type<Record<string, unknown>>()\n\t},\n\t(table) => [\n\t\tindex('auth_unregistered_sessions_expires_at_idx').on(\n\t\t\ttable.expires_at_ms\n\t\t)\n\t]\n);\n\nexport const authSessionSchema = {\n\tauthSessions: authSessionsTable,\n\tauthUnregisteredSessions: authUnregisteredSessionsTable\n} satisfies Record<string, AnyPgTable>;\n\nexport type AuthSessionSchema = typeof authSessionSchema;\n\ntype AuthSessionRow = typeof authSessionsTable.$inferSelect;\ntype AuthUnregisteredSessionRow =\n\ttypeof authUnregisteredSessionsTable.$inferSelect;\n\nconst cloneUser = <UserType>(value: UserType) => {\n\tif (value === null || value === undefined) return value;\n\n\treturn structuredClone(value);\n};\n\nconst cloneRecord = (value?: Record<string, unknown>) =>\n\tvalue ? structuredClone(value) : undefined;\n\nconst toSessionData = <UserType>(\n\trow: AuthSessionRow\n): SessionData<UserType> => ({\n\taccessToken: row.access_token ?? undefined,\n\tauthenticatedAt: row.authenticated_at_ms ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- deserialization boundary: user_json was persisted from UserType, so reading it back as UserType is sound\n\tuser: cloneUser(row.user_json as UserType)\n});\n\nconst toUnregisteredSessionData = (\n\trow: AuthUnregisteredSessionRow\n): UnregisteredSessionData => ({\n\taccessToken: row.access_token ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\tsessionInformation: cloneRecord(row.session_information_json ?? undefined),\n\tuserIdentity: cloneRecord(row.user_identity_json ?? undefined)\n});\n\nexport const createNeonAuthSessionStore = <UserType>(\n\tdatabaseUrl: string\n): AuthSessionStore<UserType> => {\n\tconst sql = neon(databaseUrl);\n\tconst db: NeonHttpDatabase = drizzle({ client: sql });\n\n\treturn {\n\t\tgetSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toSessionData<UserType>(row) : undefined;\n\t\t},\n\t\tgetUnregisteredSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toUnregisteredSessionData(row) : undefined;\n\t\t},\n\t\tlistSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authSessionsTable.id })\n\t\t\t\t.from(authSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tlistUnregisteredSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authUnregisteredSessionsTable.id })\n\t\t\t\t.from(authUnregisteredSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tdeleteExpired: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.delete(authSessionsTable)\n\t\t\t\t.where(lt(authSessionsTable.expires_at_ms, Date.now()))\n\t\t\t\t.returning({ id: authSessionsTable.id });\n\n\t\t\treturn rows.length;\n\t\t},\n\t\tdeleteExpiredUnregistered: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.delete(authUnregisteredSessionsTable)\n\t\t\t\t.where(\n\t\t\t\t\tlt(authUnregisteredSessionsTable.expires_at_ms, Date.now())\n\t\t\t\t)\n\t\t\t\t.returning({ id: authUnregisteredSessionsTable.id });\n\n\t\t\treturn rows.length;\n\t\t},\n\t\tremoveSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id));\n\t\t},\n\t\tremoveUnregisteredSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id));\n\t\t},\n\t\tsetSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authSessionsTable.id\n\t\t\t\t});\n\t\t},\n\t\tsetUnregisteredSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authUnregisteredSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tsession_information_json: value.sessionInformation ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tsession_information_json:\n\t\t\t\t\t\t\tvalue.sessionInformation ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authUnregisteredSessionsTable.id\n\t\t\t\t});\n\t\t}\n\t};\n};\n",
29
+ "import { neon } from '@neondatabase/serverless';\nimport { eq, lt } from 'drizzle-orm';\nimport { drizzle, NeonHttpDatabase } from 'drizzle-orm/neon-http';\nimport {\n\ttype AnyPgTable,\n\tbigint,\n\tindex,\n\tjsonb,\n\tpgTable,\n\ttext,\n\ttimestamp,\n\tvarchar\n} from 'drizzle-orm/pg-core';\nimport { isUserSessionId } from '../typeGuards';\nimport type { SessionData, UnregisteredSessionData } from '../types';\nimport type { AuthSessionStore, SessionUserDecoder } from './types';\n\nexport const authSessionsTable = pgTable(\n\t'auth_sessions',\n\t{\n\t\taccess_token: text('access_token'),\n\t\tauthenticated_at_ms: bigint('authenticated_at_ms', { mode: 'number' }),\n\t\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tid: varchar('id', { length: 255 }).primaryKey(),\n\t\trefresh_token: text('refresh_token'),\n\t\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\t\tuser_json: jsonb('user_json').$type<Record<string, unknown>>().notNull()\n\t},\n\t// Indexed so `deleteExpired` (DELETE WHERE expires_at_ms < now) is a range\n\t// scan, not a full-table scan, on the periodic cleanup.\n\t(table) => [index('auth_sessions_expires_at_idx').on(table.expires_at_ms)]\n);\n\nexport const authUnregisteredSessionsTable = pgTable(\n\t'auth_unregistered_sessions',\n\t{\n\t\taccess_token: text('access_token'),\n\t\tcreated_at: timestamp('created_at').notNull().defaultNow(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tid: varchar('id', { length: 255 }).primaryKey(),\n\t\trefresh_token: text('refresh_token'),\n\t\tsession_information_json: jsonb('session_information_json').$type<\n\t\t\tRecord<string, unknown>\n\t\t>(),\n\t\tupdated_at: timestamp('updated_at').notNull().defaultNow(),\n\t\tuser_identity_json:\n\t\t\tjsonb('user_identity_json').$type<Record<string, unknown>>()\n\t},\n\t(table) => [\n\t\tindex('auth_unregistered_sessions_expires_at_idx').on(\n\t\t\ttable.expires_at_ms\n\t\t)\n\t]\n);\n\nexport const authSessionSchema = {\n\tauthSessions: authSessionsTable,\n\tauthUnregisteredSessions: authUnregisteredSessionsTable\n} satisfies Record<string, AnyPgTable>;\n\nexport type AuthSessionSchema = typeof authSessionSchema;\n\ntype AuthSessionRow = typeof authSessionsTable.$inferSelect;\ntype AuthUnregisteredSessionRow =\n\ttypeof authUnregisteredSessionsTable.$inferSelect;\n\nconst cloneUser = <UserType>(value: UserType) => {\n\tif (value === null || value === undefined) return value;\n\n\treturn structuredClone(value);\n};\n\nconst cloneRecord = (value?: Record<string, unknown>) =>\n\tvalue ? structuredClone(value) : undefined;\n\nconst toSessionData = <UserType>(\n\trow: AuthSessionRow,\n\tdecodeUser: SessionUserDecoder<UserType>\n): SessionData<UserType> => ({\n\taccessToken: row.access_token ?? undefined,\n\tauthenticatedAt: row.authenticated_at_ms ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\tuser: cloneUser(decodeUser(row.user_json))\n});\n\nconst toUnregisteredSessionData = (\n\trow: AuthUnregisteredSessionRow\n): UnregisteredSessionData => ({\n\taccessToken: row.access_token ?? undefined,\n\texpiresAt: row.expires_at_ms,\n\trefreshToken: row.refresh_token ?? undefined,\n\tsessionInformation: cloneRecord(row.session_information_json ?? undefined),\n\tuserIdentity: cloneRecord(row.user_identity_json ?? undefined)\n});\n\nexport const createNeonAuthSessionStore = <UserType>(\n\tdatabaseUrl: string,\n\tdecodeUser: SessionUserDecoder<UserType>\n): AuthSessionStore<UserType> => {\n\tconst sql = neon(databaseUrl);\n\tconst db: NeonHttpDatabase = drizzle({ client: sql });\n\n\treturn {\n\t\tdeleteExpired: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.delete(authSessionsTable)\n\t\t\t\t.where(lt(authSessionsTable.expires_at_ms, Date.now()))\n\t\t\t\t.returning({ id: authSessionsTable.id });\n\n\t\t\treturn rows.length;\n\t\t},\n\t\tdeleteExpiredUnregistered: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.delete(authUnregisteredSessionsTable)\n\t\t\t\t.where(\n\t\t\t\t\tlt(authUnregisteredSessionsTable.expires_at_ms, Date.now())\n\t\t\t\t)\n\t\t\t\t.returning({ id: authUnregisteredSessionsTable.id });\n\n\t\t\treturn rows.length;\n\t\t},\n\t\tgetSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toSessionData(row, decodeUser) : undefined;\n\t\t},\n\t\tgetUnregisteredSession: async (id) => {\n\t\t\tconst [row] = await db\n\t\t\t\t.select()\n\t\t\t\t.from(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id))\n\t\t\t\t.limit(1);\n\n\t\t\treturn row ? toUnregisteredSessionData(row) : undefined;\n\t\t},\n\t\tlistSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authSessionsTable.id })\n\t\t\t\t.from(authSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tlistUnregisteredSessionIds: async () => {\n\t\t\tconst rows = await db\n\t\t\t\t.select({ id: authUnregisteredSessionsTable.id })\n\t\t\t\t.from(authUnregisteredSessionsTable);\n\n\t\t\treturn rows.map((row) => row.id).filter(isUserSessionId);\n\t\t},\n\t\tremoveSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authSessionsTable)\n\t\t\t\t.where(eq(authSessionsTable.id, id));\n\t\t},\n\t\tremoveUnregisteredSession: async (id) => {\n\t\t\tawait db\n\t\t\t\t.delete(authUnregisteredSessionsTable)\n\t\t\t\t.where(eq(authUnregisteredSessionsTable.id, id));\n\t\t},\n\t\tsetSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\tauthenticated_at_ms: value.authenticatedAt ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_json: value.user ?? {}\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authSessionsTable.id\n\t\t\t\t});\n\t\t},\n\t\tsetUnregisteredSession: async (id, value) => {\n\t\t\tawait db\n\t\t\t\t.insert(authUnregisteredSessionsTable)\n\t\t\t\t.values({\n\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\tid,\n\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\tsession_information_json: value.sessionInformation ?? null,\n\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t})\n\t\t\t\t.onConflictDoUpdate({\n\t\t\t\t\tset: {\n\t\t\t\t\t\taccess_token: value.accessToken ?? null,\n\t\t\t\t\t\texpires_at_ms: value.expiresAt,\n\t\t\t\t\t\trefresh_token: value.refreshToken ?? null,\n\t\t\t\t\t\tsession_information_json:\n\t\t\t\t\t\t\tvalue.sessionInformation ?? null,\n\t\t\t\t\t\tupdated_at: new Date(),\n\t\t\t\t\t\tuser_identity_json: value.userIdentity ?? null\n\t\t\t\t\t},\n\t\t\t\t\ttarget: authUnregisteredSessionsTable.id\n\t\t\t\t});\n\t\t}\n\t};\n};\n",
29
30
  "import { eq } from 'drizzle-orm';\nimport { bigint, pgTable, text, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type { SamlServiceProvider, SamlServiceProviderStore } from './types';\n\nconst ID_LENGTH = 255;\nconst URL_LENGTH = 2048;\n\nexport const samlServiceProvidersTable = pgTable(\n\t'auth_saml_service_providers',\n\t{\n\t\tacs_url: varchar('acs_url', { length: URL_LENGTH }).notNull(),\n\t\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\t\tentity_id: varchar('entity_id', { length: URL_LENGTH }).primaryKey(),\n\t\tname_id_format: varchar('name_id_format', { length: ID_LENGTH }),\n\t\tsigning_cert: text('signing_cert'),\n\t\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n\t}\n);\n\ntype Row = typeof samlServiceProvidersTable.$inferSelect;\n\nconst toServiceProvider = (row: Row): SamlServiceProvider => ({\n\tacsUrl: row.acs_url,\n\tcreatedAt: row.created_at_ms,\n\tentityId: row.entity_id,\n\tnameIdFormat: row.name_id_format ?? undefined,\n\tsigningCert: row.signing_cert ?? undefined,\n\tupdatedAt: row.updated_at_ms\n});\n\nconst toValues = (\n\tserviceProvider: SamlServiceProvider\n): typeof samlServiceProvidersTable.$inferInsert => ({\n\tacs_url: serviceProvider.acsUrl,\n\tcreated_at_ms: serviceProvider.createdAt,\n\tentity_id: serviceProvider.entityId,\n\tname_id_format: serviceProvider.nameIdFormat ?? null,\n\tsigning_cert: serviceProvider.signingCert ?? null,\n\tupdated_at_ms: serviceProvider.updatedAt\n});\n\nexport const createNeonSamlServiceProviderStore = (databaseUrl: string) =>\n\tcreatePostgresSamlServiceProviderStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSamlServiceProviderStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdb: DB\n): SamlServiceProviderStore => ({\n\tdeleteServiceProvider: async (entityId) => {\n\t\tawait db\n\t\t\t.delete(samlServiceProvidersTable)\n\t\t\t.where(eq(samlServiceProvidersTable.entity_id, entityId));\n\t},\n\tfindServiceProvider: async (entityId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(samlServiceProvidersTable)\n\t\t\t.where(eq(samlServiceProvidersTable.entity_id, entityId))\n\t\t\t.limit(1);\n\n\t\treturn row === undefined ? undefined : toServiceProvider(row);\n\t},\n\tlistServiceProviders: async () => {\n\t\tconst rows = await db.select().from(samlServiceProvidersTable);\n\n\t\treturn rows.map(toServiceProvider);\n\t},\n\tsaveServiceProvider: async (serviceProvider) => {\n\t\tawait db\n\t\t\t.insert(samlServiceProvidersTable)\n\t\t\t.values(toValues(serviceProvider))\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: toValues(serviceProvider),\n\t\t\t\ttarget: samlServiceProvidersTable.entity_id\n\t\t\t});\n\t}\n});\n",
30
31
  "import { and, desc, eq } from 'drizzle-orm';\nimport { bigint, boolean, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tOidcConnection,\n\tOidcConnectionConfig,\n\tSamlConnection,\n\tSamlConnectionConfig,\n\tSSOConnection,\n\tSSOConnectionStore,\n\tSSOConnectionType\n} from './types';\n\nconst ID_LENGTH = 255;\nconst TYPE_LENGTH = 16;\n\nexport const ssoConnectionsTable = pgTable('auth_sso_connections', {\n\tconfig: jsonb('config')\n\t\t.$type<OidcConnectionConfig | SamlConnectionConfig>()\n\t\t.notNull(),\n\tconnection_id: varchar('connection_id', { length: ID_LENGTH }).primaryKey(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tenabled: boolean('enabled').notNull().default(true),\n\torganization_id: varchar('organization_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\ttype: varchar('type', { length: TYPE_LENGTH })\n\t\t.$type<SSOConnectionType>()\n\t\t.notNull(),\n\tupdated_at_ms: bigint('updated_at_ms', { mode: 'number' }).notNull()\n});\n\ntype SsoRow = typeof ssoConnectionsTable.$inferSelect;\ntype SsoInsert = typeof ssoConnectionsTable.$inferInsert;\n\nconst toStringArray = (value: unknown) =>\n\tArray.isArray(value)\n\t\t? value.filter((entry): entry is string => typeof entry === 'string')\n\t\t: [];\n\n// Validate the jsonb payload back into the typed config — never trust the column blindly\n// (and never `as`-cast it). Returns undefined for a malformed row.\nconst toOidcConfig = (value: object): OidcConnectionConfig | undefined => {\n\tconst clientId = Reflect.get(value, 'clientId');\n\tconst clientSecret = Reflect.get(value, 'clientSecret');\n\tconst issuer = Reflect.get(value, 'issuer');\n\tconst redirectUri = Reflect.get(value, 'redirectUri');\n\tif (\n\t\ttypeof clientId !== 'string' ||\n\t\ttypeof clientSecret !== 'string' ||\n\t\ttypeof issuer !== 'string' ||\n\t\ttypeof redirectUri !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tclientId,\n\t\tclientSecret,\n\t\tissuer,\n\t\tredirectUri,\n\t\tscopes: toStringArray(Reflect.get(value, 'scopes'))\n\t};\n};\n\nconst toSamlConfig = (value: object): SamlConnectionConfig | undefined => {\n\tconst idpEntityId = Reflect.get(value, 'idpEntityId');\n\tconst idpSsoUrl = Reflect.get(value, 'idpSsoUrl');\n\tconst idpX509Cert = Reflect.get(value, 'idpX509Cert');\n\tif (\n\t\ttypeof idpEntityId !== 'string' ||\n\t\ttypeof idpSsoUrl !== 'string' ||\n\t\ttypeof idpX509Cert !== 'string'\n\t) {\n\t\treturn undefined;\n\t}\n\n\tconst idpSloUrl = Reflect.get(value, 'idpSloUrl');\n\n\treturn {\n\t\tidpEntityId,\n\t\tidpSloUrl: typeof idpSloUrl === 'string' ? idpSloUrl : undefined,\n\t\tidpSsoUrl,\n\t\tidpX509Cert\n\t};\n};\n\nconst toConnection = (row: SsoRow) => {\n\tif (row.type === 'oidc') {\n\t\tconst config = toOidcConfig(row.config);\n\t\tif (config === undefined) return undefined;\n\n\t\tconst connection: OidcConnection = {\n\t\t\tconfig,\n\t\t\tconnectionId: row.connection_id,\n\t\t\tcreatedAt: row.created_at_ms,\n\t\t\tenabled: row.enabled,\n\t\t\torganizationId: row.organization_id,\n\t\t\ttype: 'oidc',\n\t\t\tupdatedAt: row.updated_at_ms\n\t\t};\n\n\t\treturn connection;\n\t}\n\n\tconst config = toSamlConfig(row.config);\n\tif (config === undefined) return undefined;\n\n\tconst connection: SamlConnection = {\n\t\tconfig,\n\t\tconnectionId: row.connection_id,\n\t\tcreatedAt: row.created_at_ms,\n\t\tenabled: row.enabled,\n\t\torganizationId: row.organization_id,\n\t\ttype: 'saml',\n\t\tupdatedAt: row.updated_at_ms\n\t};\n\n\treturn connection;\n};\n\nconst toValues = (connection: SSOConnection): SsoInsert => ({\n\tconfig: connection.config,\n\tconnection_id: connection.connectionId,\n\tcreated_at_ms: connection.createdAt,\n\tenabled: connection.enabled,\n\torganization_id: connection.organizationId,\n\ttype: connection.type,\n\tupdated_at_ms: connection.updatedAt\n});\n\nexport const createNeonSsoConnectionStore = (databaseUrl: string) =>\n\tcreatePostgresSsoConnectionStore(createNeonDatabase(databaseUrl));\n\nexport const createPostgresSsoConnectionStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): SSOConnectionStore => ({\n\tdeleteConnection: async (connectionId) => {\n\t\tawait db\n\t\t\t.delete(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId));\n\t},\n\tgetConnection: async (connectionId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.connection_id, connectionId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tgetConnectionByOrganization: async (organizationId, type) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(\n\t\t\t\tand(\n\t\t\t\t\teq(ssoConnectionsTable.organization_id, organizationId),\n\t\t\t\t\teq(ssoConnectionsTable.enabled, true),\n\t\t\t\t\ttype === undefined\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: eq(ssoConnectionsTable.type, type)\n\t\t\t\t)\n\t\t\t)\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms))\n\t\t\t.limit(1);\n\n\t\treturn row ? toConnection(row) : undefined;\n\t},\n\tlistConnectionsByOrganization: async (organizationId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(ssoConnectionsTable)\n\t\t\t.where(eq(ssoConnectionsTable.organization_id, organizationId))\n\t\t\t.orderBy(desc(ssoConnectionsTable.updated_at_ms));\n\n\t\treturn rows.flatMap((row) => {\n\t\t\tconst connection = toConnection(row);\n\n\t\t\treturn connection === undefined ? [] : [connection];\n\t\t});\n\t},\n\tsaveConnection: async (connection) => {\n\t\tconst values = toValues(connection);\n\t\tawait db.insert(ssoConnectionsTable).values(values).onConflictDoUpdate({\n\t\t\tset: values,\n\t\t\ttarget: ssoConnectionsTable.connection_id\n\t\t});\n\t}\n});\n",
31
32
  "// Postgres flavors of every VC store: credential offer (VCI), credential nonce (VCI),\n// presentation request (OID4VP). Same Drizzle pattern as the rest of the package — the\n// schema goes into the migrations block automatically via `getTableConfig`.\n//\n// All tables prefixed `auth_vc_*` so they sit alongside `auth_oauth_*` cleanly.\n\nimport { eq } from 'drizzle-orm';\nimport { bigint, boolean, jsonb, pgTable, varchar } from 'drizzle-orm/pg-core';\nimport { type AnyPgDatabase, createNeonDatabase } from '../stores/postgres';\nimport type {\n\tCredentialNonceRecord,\n\tCredentialNonceStore,\n\tCredentialOffer,\n\tCredentialOfferStore\n} from '../oidc/vci';\nimport type {\n\tPresentationRequest,\n\tPresentationRequestStore\n} from './openid4vp';\n\nconst ID_LENGTH = 255;\n\nexport const vcCredentialNoncesTable = pgTable('auth_vc_credential_nonces', {\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tnonce_hash: varchar('nonce_hash', { length: ID_LENGTH }).primaryKey()\n});\nexport const vcCredentialOffersTable = pgTable('auth_vc_credential_offers', {\n\tclient_id: varchar('client_id', { length: ID_LENGTH }).notNull(),\n\tconfiguration_id: varchar('configuration_id', {\n\t\tlength: ID_LENGTH\n\t}).notNull(),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\tpre_authorized_code_hash: varchar('pre_authorized_code_hash', {\n\t\tlength: ID_LENGTH\n\t}).primaryKey(),\n\tredeemed: boolean('redeemed').notNull(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\nexport const vcPresentationRequestsTable = pgTable(\n\t'auth_vc_presentation_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\texpected_issuer_jwk_json: jsonb('expected_issuer_jwk_json')\n\t\t\t.$type<JsonWebKey>()\n\t\t\t.notNull(),\n\t\texpires_at_ms: bigint('expires_at_ms', { mode: 'number' }).notNull(),\n\t\tnonce: varchar('nonce', { length: ID_LENGTH }).notNull(),\n\t\trequest_id: varchar('request_id', { length: ID_LENGTH }).primaryKey(),\n\t\trequested_claims: jsonb('requested_claims').$type<string[]>().notNull(),\n\t\tresponse_uri: varchar('response_uri', { length: ID_LENGTH }).notNull(),\n\t\tstate: varchar('state', { length: ID_LENGTH })\n\t}\n);\n\nconst toOffer = (\n\trow: typeof vcCredentialOffersTable.$inferSelect\n): CredentialOffer => ({\n\tclientId: row.client_id,\n\tconfigurationId: row.configuration_id,\n\tcreatedAt: row.created_at_ms,\n\texpiresAt: row.expires_at_ms,\n\tpreAuthorizedCodeHash: row.pre_authorized_code_hash,\n\tredeemed: row.redeemed,\n\tuserId: row.user_id\n});\n\nconst toOfferValues = (\n\toffer: CredentialOffer\n): typeof vcCredentialOffersTable.$inferInsert => ({\n\tclient_id: offer.clientId,\n\tconfiguration_id: offer.configurationId,\n\tcreated_at_ms: offer.createdAt,\n\texpires_at_ms: offer.expiresAt,\n\tpre_authorized_code_hash: offer.preAuthorizedCodeHash,\n\tredeemed: offer.redeemed,\n\tuser_id: offer.userId\n});\n\nconst toPresentationRequest = (\n\trow: typeof vcPresentationRequestsTable.$inferSelect\n): PresentationRequest => ({\n\tclientId: row.client_id,\n\tcreatedAt: row.created_at_ms,\n\texpectedIssuerPublicJwk: row.expected_issuer_jwk_json,\n\texpiresAt: row.expires_at_ms,\n\tnonce: row.nonce,\n\trequestedClaims: row.requested_claims,\n\trequestId: row.request_id,\n\tresponseUri: row.response_uri,\n\tstate: row.state ?? undefined\n});\n\nconst toPresentationRequestValues = (\n\trequest: PresentationRequest\n): typeof vcPresentationRequestsTable.$inferInsert => ({\n\tclient_id: request.clientId,\n\tcreated_at_ms: request.createdAt,\n\texpected_issuer_jwk_json: request.expectedIssuerPublicJwk,\n\texpires_at_ms: request.expiresAt,\n\tnonce: request.nonce,\n\trequest_id: request.requestId,\n\trequested_claims: request.requestedClaims,\n\tresponse_uri: request.responseUri,\n\tstate: request.state ?? null\n});\n\nexport const createNeonCredentialNonceStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialNonceStore(createNeonDatabase(databaseUrl));\nexport const createNeonCredentialOfferStore = (databaseUrl: string) =>\n\tcreatePostgresCredentialOfferStore(createNeonDatabase(databaseUrl));\nexport const createNeonPresentationRequestStore = (databaseUrl: string) =>\n\tcreatePostgresPresentationRequestStore(createNeonDatabase(databaseUrl));\nexport const createPostgresCredentialNonceStore = <DB extends AnyPgDatabase>(\n\tdatabase: DB\n): CredentialNonceStore => ({\n\tconsumeNonce: async (nonceHash) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcCredentialNoncesTable)\n\t\t\t.where(eq(vcCredentialNoncesTable.nonce_hash, nonceHash))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.delete(vcCredentialNoncesTable)\n\t\t\t.where(eq(vcCredentialNoncesTable.nonce_hash, nonceHash));\n\t\tconst record: CredentialNonceRecord = {\n\t\t\texpiresAt: row.expires_at_ms,\n\t\t\tnonceHash: row.nonce_hash\n\t\t};\n\n\t\treturn record;\n\t},\n\tsaveNonce: async (record) => {\n\t\tawait database.insert(vcCredentialNoncesTable).values({\n\t\t\texpires_at_ms: record.expiresAt,\n\t\t\tnonce_hash: record.nonceHash\n\t\t});\n\t}\n});\nexport const createPostgresCredentialOfferStore = <DB extends AnyPgDatabase>(\n\tdatabase: DB\n): CredentialOfferStore => ({\n\tconsumeOffer: async (preAuthorizedCodeHash) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcCredentialOffersTable)\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tvcCredentialOffersTable.pre_authorized_code_hash,\n\t\t\t\t\tpreAuthorizedCodeHash\n\t\t\t\t)\n\t\t\t)\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.update(vcCredentialOffersTable)\n\t\t\t.set({ redeemed: true })\n\t\t\t.where(\n\t\t\t\teq(\n\t\t\t\t\tvcCredentialOffersTable.pre_authorized_code_hash,\n\t\t\t\t\tpreAuthorizedCodeHash\n\t\t\t\t)\n\t\t\t);\n\n\t\treturn toOffer(row);\n\t},\n\tsaveOffer: async (offer) => {\n\t\tawait database\n\t\t\t.insert(vcCredentialOffersTable)\n\t\t\t.values(toOfferValues(offer));\n\t}\n});\nexport const createPostgresPresentationRequestStore = <\n\tDB extends AnyPgDatabase\n>(\n\tdatabase: DB\n): PresentationRequestStore => ({\n\tconsumeRequest: async (requestId) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\t\tif (row === undefined) return undefined;\n\t\tawait database\n\t\t\t.delete(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId));\n\n\t\treturn toPresentationRequest(row);\n\t},\n\tgetRequest: async (requestId) => {\n\t\tconst rows = await database\n\t\t\t.select()\n\t\t\t.from(vcPresentationRequestsTable)\n\t\t\t.where(eq(vcPresentationRequestsTable.request_id, requestId))\n\t\t\t.limit(1);\n\t\tconst [row] = rows;\n\n\t\treturn row === undefined ? undefined : toPresentationRequest(row);\n\t},\n\tsaveRequest: async (request) => {\n\t\tawait database\n\t\t\t.insert(vcPresentationRequestsTable)\n\t\t\t.values(toPresentationRequestValues(request));\n\t}\n});\n",
@@ -33,11 +34,11 @@
33
34
  "import { eq } 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 { WebAuthnCredential, WebAuthnCredentialStore } from './types';\n\nconst ID_LENGTH = 255;\nconst DEVICE_TYPE_LENGTH = 32;\n\nexport const webauthnCredentialsTable = pgTable('auth_webauthn_credentials', {\n\tbacked_up: boolean('backed_up'),\n\tcounter: bigint('counter', { mode: 'number' }).notNull().default(0),\n\tcreated_at_ms: bigint('created_at_ms', { mode: 'number' }).notNull(),\n\tcredential_id: varchar('credential_id', { length: ID_LENGTH }).primaryKey(),\n\tdevice_type: varchar('device_type', { length: DEVICE_TYPE_LENGTH }),\n\tlast_used_at_ms: bigint('last_used_at_ms', { mode: 'number' }),\n\tpublic_key: text('public_key').notNull(),\n\ttransports: jsonb('transports').$type<string[]>(),\n\tuser_id: varchar('user_id', { length: ID_LENGTH }).notNull()\n});\n\ntype WebAuthnRow = typeof webauthnCredentialsTable.$inferSelect;\ntype WebAuthnInsert = typeof webauthnCredentialsTable.$inferInsert;\n\nconst toCredential = (row: WebAuthnRow): WebAuthnCredential => ({\n\tbackedUp: row.backed_up ?? undefined,\n\tcounter: row.counter,\n\tcreatedAt: row.created_at_ms,\n\tcredentialId: row.credential_id,\n\tdeviceType: row.device_type ?? undefined,\n\tlastUsedAt: row.last_used_at_ms ?? undefined,\n\tpublicKey: row.public_key,\n\ttransports: row.transports ?? undefined,\n\tuserId: row.user_id\n});\n\nconst toValues = (credential: WebAuthnCredential): WebAuthnInsert => ({\n\tbacked_up: credential.backedUp ?? null,\n\tcounter: credential.counter,\n\tcreated_at_ms: credential.createdAt,\n\tcredential_id: credential.credentialId,\n\tdevice_type: credential.deviceType ?? null,\n\tlast_used_at_ms: credential.lastUsedAt ?? null,\n\tpublic_key: credential.publicKey,\n\ttransports: credential.transports ?? null,\n\tuser_id: credential.userId\n});\n\nexport const createNeonWebAuthnCredentialStore = (databaseUrl: string) =>\n\tcreatePostgresWebAuthnCredentialStore(createNeonDatabase(databaseUrl));\nexport const createPostgresWebAuthnCredentialStore = <DB extends AnyPgDatabase>(\n\tdb: DB\n): WebAuthnCredentialStore => ({\n\tgetCredential: async (credentialId) => {\n\t\tconst [row] = await db\n\t\t\t.select()\n\t\t\t.from(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.credential_id, credentialId))\n\t\t\t.limit(1);\n\n\t\treturn row ? toCredential(row) : undefined;\n\t},\n\tlistCredentialsByUser: async (userId) => {\n\t\tconst rows = await db\n\t\t\t.select()\n\t\t\t.from(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.user_id, userId));\n\n\t\treturn rows.map(toCredential);\n\t},\n\tremoveCredential: async (credentialId) => {\n\t\tawait db\n\t\t\t.delete(webauthnCredentialsTable)\n\t\t\t.where(eq(webauthnCredentialsTable.credential_id, credentialId));\n\t},\n\tsaveCredential: async (credential) => {\n\t\tconst values = toValues(credential);\n\t\tawait db\n\t\t\t.insert(webauthnCredentialsTable)\n\t\t\t.values(values)\n\t\t\t.onConflictDoUpdate({\n\t\t\t\tset: values,\n\t\t\t\ttarget: webauthnCredentialsTable.credential_id\n\t\t\t});\n\t}\n});\n",
34
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",
35
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\nconst columnSql = (column: PgColumn) => {\n\tconst parts = [`\"${column.name}\"`, column.getSQLType()];\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",
36
- "// 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\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\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 allBlockNames = () =>\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Object.keys widens to string[]; the values are typed BlockName by construction of the manifest\n\tObject.keys(blockMigrations) as BlockName[];\n\nconst applyOne = async (\n\tpool: Pool,\n\tid: string,\n\tsql: string,\n\tlog: (message: string) => void\n) => {\n\tawait pool.query(sql);\n\tawait pool.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\tpool: Pool,\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(pool, id, sql, log);\n\tresult.applied.push(id);\n};\n\nexport const runMigrations = async ({\n\tblocks,\n\tdatabaseUrl,\n\tlog = console.log\n}: RunMigrationsOptions) => {\n\tconst pool = new Pool({ connectionString: databaseUrl });\n\tconst result: MigrationRunResult = { applied: [], skipped: [] };\n\n\ttry {\n\t\tawait pool.query(JOURNAL_DDL);\n\t\tconst journal = await pool.query(`SELECT \"id\" FROM \"auth_migrations\"`);\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(pool, item.id, item.sql, applied, result, log);\n\t\t}, Promise.resolve());\n\t} finally {\n\t\tawait pool.end();\n\t}\n\n\treturn result;\n};\n",
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\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\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 typeof Reflect.get(value, 'id') === 'string';\n\nconst isBlockName = (value: string): value is BlockName =>\n Object.hasOwn(blockMigrations, value);\n\nconst allBlockNames = () =>\n Object.keys(blockMigrations).filter(isBlockName);\n\nconst applyOne = async (\n\tpool: Pool,\n\tid: string,\n\tsql: string,\n\tlog: (message: string) => void\n) => {\n\tawait pool.query(sql);\n\tawait pool.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\tpool: Pool,\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(pool, id, sql, log);\n\tresult.applied.push(id);\n};\n\nexport const runMigrations = async ({\n\tblocks,\n\tdatabaseUrl,\n\tlog = console.log\n}: RunMigrationsOptions) => {\n\tconst pool = new Pool({ connectionString: databaseUrl });\n\tconst result: MigrationRunResult = { applied: [], skipped: [] };\n\n\ttry {\n\t\tawait pool.query(JOURNAL_DDL);\n\t\tconst journal = await pool.query(`SELECT \"id\" FROM \"auth_migrations\"`);\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(pool, item.id, item.sql, applied, result, log);\n\t\t}, Promise.resolve());\n\t} finally {\n\t\tawait pool.end();\n\t}\n\n\treturn result;\n};\n",
37
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} 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\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 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\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: initMigration('credentials', [\n\t\tcredentialsTable,\n\t\tcredentialResetTokensTable,\n\t\tcredentialVerificationTokensTable\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]\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]).migrations,\n\t\t\toidcResourceAudienceMigration\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: initMigration('sessions', [\n\t\tauthSessionsTable,\n\t\tauthUnregisteredSessionsTable\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 { Migration, BlockMigrations } from './types';\n",
38
- "#!/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: BlockName[] | undefined;\n\tdatabaseUrl: string | undefined;\n\thelp: boolean;\n};\n\nconst parseMigrateArgs = (argv: string[]): MigrateArgs => {\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\tconst flag = args.shift();\n\t\tif (flag === '--help' || flag === '-h') {\n\t\t\tparsed.help = true;\n\t\t} else if (flag === '--db' || flag === '--database-url') {\n\t\t\tparsed.databaseUrl = args.shift();\n\t\t} else if (flag === '--blocks') {\n\t\t\tconst list = args.shift() ?? '';\n\t\t\tparsed.blocks = list\n\t\t\t\t.split(',')\n\t\t\t\t.map((entry) => entry.trim())\n\t\t\t\t.filter((entry) => entry.length > 0)\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validated against blockMigrations keys below\n\t\t\t\t.map((entry) => entry as BlockName);\n\t\t}\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 parseImportArgs = (argv: string[]): ImportArgs => {\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\tconst next = args.shift();\n\t\tif (next === undefined) break;\n\t\tif (next === '--help' || next === '-h') {\n\t\t\tparsed.help = true;\n\t\t} else if (next === '--db' || next === '--database-url') {\n\t\t\tparsed.databaseUrl = args.shift();\n\t\t} else if (next === '--commit') {\n\t\t\tparsed.commit = true;\n\t\t} else if (!next.startsWith('--')) {\n\t\t\tpositionals.push(next);\n\t\t}\n\t}\n\tparsed.source = positionals[0];\n\tparsed.file = positionals[1];\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 result = await runMigrations({ blocks, databaseUrl: resolved });\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"
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"
39
40
  ],
40
- "mappings": "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",
41
- "debugId": "65D4841F833D75BF64756E2164756E21",
41
+ "mappings": ";;;;AASA;;;ACgBA;;;ACpBO,IAAM,8BAE2B,CAAC,SAAS;AAAA,EACjD,IAAI,MAAM,WAAW,WAAW;AAAA,IAAG,OAAO;AAAA,EAC1C,IACC,MAAM,WAAW,MAAM,KACvB,MAAM,WAAW,MAAM,KACvB,MAAM,WAAW,MAAM,KACvB,MAAM,WAAW,IAAI;AAAA,IAErB,OAAO;AAAA,EAER;AAAA;;;ADiCD,IAAM,kBAAkB,CAAC,UACxB,OAAO,UAAU,YACjB,UAAU,QACV,OAAO,QAAQ,IAAI,OAAO,UAAU,MAAM,YAC1C,OAAO,QAAQ,IAAI,OAAO,SAAS,MAAM;AAE1C,IAAM,cAAc,CAAC,UACpB,OAAO,UAAU,YACjB,UAAU,QACV,OAAO,QAAQ,IAAI,OAAO,OAAO,MAAM,YACvC,OAAO,QAAQ,IAAI,OAAO,SAAS,MAAM,aACxC,QAAQ,IAAI,OAAO,YAAY,MAAM,aACpC,MAAM,QAAQ,QAAQ,IAAI,OAAO,YAAY,CAAC,KAC9C,QAAQ,IAAI,OAAO,YAAY,EAAE,MAAM,eAAe;AAEzD,IAAM,mBAAmB,CAAC,UAAmB;AAAA,EAC5C,IAAI,CAAC,YAAY,KAAK;AAAA,IAAG,MAAM,IAAI,MAAM,kCAAkC;AAAA,EAE3E,OAAO;AAAA;AAGR,IAAM,qBAAqB,CAAC,SAAiB;AAAA,EAC5C,MAAM,UAAU,KAAK,KAAK;AAAA,EAC1B,IAAI,QAAQ,WAAW,GAAG,GAAG;AAAA,IAC5B,MAAM,SAAkB,KAAK,MAAM,OAAO;AAAA,IAC1C,IAAI,CAAC,MAAM,QAAQ,MAAM;AAAA,MACxB,MAAM,IAAI,MAAM,oCAAoC;AAAA,IAErD,OAAO,OAAO,IAAI,gBAAgB;AAAA,EACnC;AAAA,EAGA,OAAO,QACL,MAAM;AAAA,CAAI,EACV,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,EAChC,IAAI,CAAC,SAAS,iBAAiB,KAAK,MAAM,IAAI,CAAC,CAAC;AAAA;AAG5C,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,SAAS,MAAM,OAAO;AAAA,IACzC,MAAM,aAAa,mBAAmB,IAAI;AAAA,IAE1C,MAAM,QAAQ,WAAW,IAAI,CAAC,SAAS;AAAA,MACtC,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,eAAe,IAAI,kBAAkB;AAAA,MACrC,YAAY,IAAI;AAAA,MAChB,YAAY,IAAI;AAAA,MAChB,WAAW,IAAI;AAAA,MACf,cAAc,IAAI;AAAA,MACjB,kBAAkB,4BAA4B,IAAI,aAAa;AAAA,IACjE,EAAE;AAAA,IAKF,MAAM,aAAa,WAAW,QAAQ,CAAC,SACrC,IAAI,cAAc,CAAC,GAClB,OAAO,CAAC,aAAa,SAAS,aAAa,OAAO,EAClD,IAAI,CAAC,cAAc;AAAA,MACnB,cAAc,SAAS,SAAS,QAAQ,WAAW,EAAE;AAAA,MACrD,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,MAC7B,UACC,SAAS,eAAe,YACrB,YACA,EAAE,YAAY,SAAS,WAAW;AAAA,MACtC,iBAAiB,SAAS;AAAA,MAC1B,gBAAgB,IAAI;AAAA,IACrB,EAAE,CACJ;AAAA,IAEA,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;AE/GA,qBAAS;AA6BT,IAAM,mBAAmB,CAAC,aACzB,SAAS,WAAW,QAAQ,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI;AAE5D,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,aAA0B,KAAK,MAAM,IAAI;AAAA,IAE/C,MAAM,QAAQ,WACZ,OACA,CAAC,QACA,IAAI,oBAAoB,aACxB,IAAI,gBAAgB,SAAS,CAC/B,EACC,IAAI,CAAC,QAAQ;AAAA,MACb,MAAM,UACL,IAAI,iBAAiB,KACnB,CAAC,UACA,IAAI,6BAA6B,aACjC,MAAM,cAAc,SAAS,CAChC,KAAK,IAAI,kBAAkB;AAAA,MAE5B,OAAO;AAAA,QACN,aAAa,IAAI,cAAc,KAAK,IAAI;AAAA,QACxC,OAAO,SAAS,iBAAiB;AAAA,QACjC,eAAe,SAAS,cAAc,WAAW;AAAA,QACjD,YAAY,IAAI;AAAA,QAChB,YAAY,IAAI;AAAA,QAChB,WAAW,IAAI;AAAA,QACf,cAAc,IAAI;AAAA,QAClB,kBAAkB,4BACjB,IAAI,eACL;AAAA,MACD;AAAA,KACA;AAAA,IAEF,MAAM,aAAa,WAAW,QAAQ,CAAC,SACrC,IAAI,qBAAqB,CAAC,GAAG,IAAI,CAAC,aAAa;AAAA,MAC/C,cAAc,iBAAiB,QAAQ,QAAQ;AAAA,MAC/C,aAAa,IAAI,cAAc,KAAK,IAAI;AAAA,MACxC,iBACC,QAAQ,oBAAoB,QAAQ,eAAe;AAAA,MACpD,gBAAgB,IAAI;AAAA,IACrB,EAAE,CACH;AAAA,IAEA,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;ACjFA,qBAAS;AAwBT,IAAM,OAAO,CAAC,UAAuC;AAAA,EACpD,IAAI,UAAU;AAAA,IAAW,OAAO,KAAK,IAAI;AAAA,EACzC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,QAAQ,gBAAO,QAAQ,OAAO;AAAA,EAEpE,OAAO,KAAK,MAAM,KAAK;AAAA;AAGxB,IAAM,mBAAmB,CACxB,KACA,kBACA,cACI;AAAA,EACJ,MAAM,YAAY,IAAI,GAAG,QAAQ,GAAG;AAAA,EACpC,IAAI,YAAY;AAAA,IAAG;AAAA,EACnB,MAAM,WAAW,IAAI,GAAG,MAAM,GAAG,SAAS;AAAA,EAC1C,IAAI,aAAa,WAAW,aAAa,YAAY;AAAA,IACpD,iBAAiB,IAAI,IAAI,SAAS,IAAI,eAAe;AAAA,IAErD;AAAA,EACD;AAAA,EACA,UAAU,KAAK,GAAG;AAAA;AAGZ,IAAM,gBAA0B;AAAA,EACtC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAsB,KAAK,MAAM,IAAI;AAAA,IAK3C,MAAM,mBAAmB,IAAI;AAAA,IAC7B,MAAM,YAAwB,CAAC;AAAA,IAC/B,WAAW,OAAO,OAAO,QAAQ,CAAC,GAAG;AAAA,MACpC,iBAAiB,KAAK,kBAAkB,SAAS;AAAA,IAClD;AAAA,IAEA,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,SAAS;AAAA,MACxC,aAAa,KAAK,IAAI,UAAU;AAAA,MAChC,OAAO,IAAI,SAAS;AAAA,MACpB,eAAe;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,cAAc,iBAAiB,IAAI,IAAI,EAAE;AAAA,MACxC,kBAAkB,4BACjB,iBAAiB,IAAI,IAAI,EAAE,CAC5B;AAAA,IACF,EAAE;AAAA,IAEF,MAAM,aAAa,UAAU,IAAI,CAAC,QAAQ;AAAA,MACzC,MAAM,YAAY,IAAI,GAAG,QAAQ,GAAG;AAAA,MAEpC,OAAO;AAAA,QACN,cAAc,IAAI,GAAG,MAAM,GAAG,SAAS;AAAA,QACvC,aAAa,KAAK,IAAI;AAAA,QACtB,iBAAiB,IAAI,GAAG,MAAM,YAAY,CAAC;AAAA,QAC3C,gBAAgB,IAAI;AAAA,MACrB;AAAA,KACA;AAAA,IAED,OAAO,EAAE,YAAY,QAAQ,SAAS,MAAM;AAAA;AAE9C;;;AC5EA,qBAAS;AA4BT,IAAM,YAAY,CAAC,SAA6B;AAAA,EAC/C,IAAI,SAAS;AAAA,IACZ,OAAO,EAAE,YAAY,WAAW,WAAW,UAAU;AAAA,EACtD,MAAM,QAAQ,KAAK,MAAM,KAAK;AAAA,EAC9B,IAAI,MAAM,WAAW;AAAA,IACpB,OAAO,EAAE,YAAY,WAAW,WAAW,MAAM,GAAG;AAAA,EAErD,OAAO;AAAA,IACN,YAAY,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,IACnC,WAAW,MAAM;AAAA,EAClB;AAAA;AAGM,IAAM,mBAA6B;AAAA,EACzC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAyB,KAAK,MAAM,IAAI;AAAA,IAE9C,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ;AAAA,MACvC,MAAM,QAAQ,UAAU,IAAI,IAAI;AAAA,MAChC,MAAM,eAAe,OAAO,oBAAoB,IAAI;AAAA,MAEpD,OAAO;AAAA,QACN,aAAa,KAAK,IAAI;AAAA,QACtB,OAAO,IAAI;AAAA,QACX,eACC,IAAI,kBAAkB,QACtB,IAAI,kBAAkB;AAAA,QACvB,YAAY,IAAI;AAAA,QAChB,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM;AAAA,QACjB;AAAA,QACC,kBACC,4BAA4B,YAAY;AAAA,MAC3C;AAAA,KACA;AAAA,IAED,MAAM,cAAc,OAAO,YAAY,CAAC,GACtC,OACA,CAAC,YACA,QAAQ,SAAS,aAAa,QAAQ,SAAS,OACjD,EACC,IAAI,CAAC,aAAa;AAAA,MAClB,cAAc,QAAQ;AAAA,MACtB,aAAa,KAAK,IAAI;AAAA,MACtB,iBAAiB,QAAQ;AAAA,MACzB,gBAAgB,QAAQ;AAAA,IACzB,EAAE;AAAA,IAEH,OAAO,EAAE,YAAY,QAAQ,YAAY,MAAM;AAAA;AAEjD;;;ACpFA,qBAAS;AA4BT,IAAM,gBAAgB,CAAC,SAA6B;AAAA,EACnD,IAAI,SAAS;AAAA,IACZ,OAAO,EAAE,YAAY,WAAW,WAAW,UAAU;AAAA,EACtD,MAAM,QAAQ,KAAK,MAAM,KAAK;AAAA,EAC9B,IAAI,MAAM,WAAW;AAAA,IACpB,OAAO,EAAE,YAAY,WAAW,WAAW,MAAM,GAAG;AAAA,EAErD,OAAO;AAAA,IACN,YAAY,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,IACnC,WAAW,MAAM;AAAA,EAClB;AAAA;AAGM,IAAM,mBAA6B;AAAA,EACzC,QAAQ;AAAA,EACR,OAAO,OAAO,SAAwC;AAAA,IACrD,MAAM,OAAO,MAAM,UAAS,MAAM,OAAO;AAAA,IACzC,MAAM,SAAyB,KAAK,MAAM,IAAI;AAAA,IAE9C,MAAM,QAAQ,OAAO,MAAM,IAAI,CAAC,QAAQ;AAAA,MACvC,MAAM,OAAO,IAAI,sBAAsB,CAAC;AAAA,MACxC,MAAM,QAAQ,cAAc,KAAK,SAAS;AAAA,MAE1C,OAAO;AAAA,QACN,aACC,IAAI,eAAe,YAChB,KAAK,IAAI,IACT,KAAK,MAAM,IAAI,UAAU;AAAA,QAC7B,OAAO,IAAI;AAAA,QACX,eAAe,IAAI,uBAAuB;AAAA,QAC1C,YAAY,IAAI;AAAA,QAChB,YAAY,KAAK,eAAe,MAAM;AAAA,QACtC,WAAW,KAAK,cAAc,MAAM;AAAA,QACpC,cAAc,IAAI;AAAA,QAClB,kBAAkB,IAAI,oBAAoB,WAAW,IAAI,IACrD,WACD;AAAA,MACJ;AAAA,KACA;AAAA,IAED,MAAM,cAAc,OAAO,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc;AAAA,MAC/D,cAAc,SAAS;AAAA,MACvB,aACC,SAAS,eAAe,YACrB,KAAK,IAAI,IACT,KAAK,MAAM,SAAS,UAAU;AAAA,MAClC,iBAAiB,SAAS;AAAA,MAC1B,gBAAgB,SAAS;AAAA,IAC1B,EAAE;AAAA,IAEF,OAAO,EAAE,YAAY,QAAQ,YAAY,MAAM;AAAA;AAEjD;;;ANtFO,IAAM,YAAsC;AAAA,EAClD,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AACX;AAaO,IAAM,YAAY,OACxB,QACA,YACI;AAAA,EACJ,MAAM,MAAM,KAAK,QAAQ,WAAW;AAAA,EAIpC,MAAM,kBAAkB,IAAI;AAAA,EAC5B,WAAW,QAAQ,OAAO,OAAO;AAAA,IAChC,gBAAgB,IAAI,KAAK,YAAY,OAAO,WAAW,CAAC;AAAA,EACzD;AAAA,EAEA,IAAI,CAAC,QAAQ,QAAQ;AAAA,IAEpB,OAAO;AAAA,MACN,eAAe,OAAO,WAAW;AAAA,MACjC,WAAW,OAAO,MAAM;AAAA,IACzB;AAAA,EACD;AAAA,EAKA,WAAW,QAAQ,OAAO,OAAO;AAAA,IAChC,MAAM,MAAM,gBAAgB,IAAI,KAAK,UAAU;AAAA,IAC/C,MAAM;AAAA;AAAA;AAAA,MAGF;AAAA,MACA,KAAK,MAAM,YAAY,EAAE,KAAK;AAAA,MAC9B,KAAK,gBAAgB;AAAA,MACrB,KAAK,cAAc;AAAA,MACnB,KAAK,aAAa;AAAA,MAClB,KAAK;AAAA,mBACQ,KAAK;AAAA;AAAA;AAAA;AAAA,EAIvB;AAAA,EAMA,IAAI,qBAAqB;AAAA,EACzB,WAAW,YAAY,OAAO,YAAY;AAAA,IACzC,MAAM,MAAM,gBAAgB,IAAI,SAAS,cAAc;AAAA,IACvD,IAAI,QAAQ;AAAA,MAAW;AAAA,IACvB,MAAM,WAAW,MAAM;AAAA;AAAA;AAAA,MAGnB,GAAG,SAAS,gBAAgB,SAAS;AAAA,MACrC,SAAS;AAAA,MACT,SAAS;AAAA,MACT;AAAA,MACA,SAAS,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAK1B,IAAI,MAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS;AAAA,MAChD;AAAA,EACF;AAAA,EAEA,OAAO;AAAA,IACN,eAAe;AAAA,IACf,WAAW,OAAO,MAAM;AAAA,EACzB;AAAA;;;AOxGD;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACDA,iBAAS;AACT;;;ADgBA,IAAM,YAAY;AAEX,IAAM,oBAAoB,QAChC,sBACA;AAAA,EACC,WAAW,QAAQ,aAAa,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,kBAAkB,OAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,QAAQ,SAAS,EAAE,QAAQ,UAAU,CAAC;AAAA,EAC7C,iBAAiB,OAAO,mBAAmB;AAAA,IAC1C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,SAAS,QAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACnD,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAC5D,GACA,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,CAAC,CAAC,CACtE;AAEO,IAAM,oBAAoB,QAAQ,sBAAsB;AAAA,EAC9D,YAAY,QAAQ,cAAc,EAAE,QAAQ,UAAU,CAAC,EAAE,WAAW;AAAA,EACpE,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC;AAAA,EACjD,WAAW,QAAQ,aAAa,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,YAAY,QAAQ,cAAc,EAAE,QAAQ,UAAU,CAAC;AAAA,EACvD,UAAU,gBAAgB,UAAU;AAAA,EACpC,WAAW,gBAAgB,WAAW;AAAA,EACtC,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAAA,EAC3D,cAAc,OAAO,gBAAgB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACjE,SAAS,QAAQ,WAAW,EAAE,QAAQ,UAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;AE9CD,iBAAS,aAAM;AACf,mBAAS,oBAAQ,2BAAe;AAWhC,IAAM,aAAY;AAEX,IAAM,oBAAoB,SAAQ,sBAAsB;AAAA,EAC9D,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACjE,CAAC;AACM,IAAM,kBAAkB,SAAQ,oBAAoB;AAAA,EAC1D,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;AACM,IAAM,eAAe,SAAQ,iBAAiB;AAAA,EACpD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAAA,EACzD,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACjE,QAAQ,SAAQ,UAAU,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAC5D,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,MAAM,SAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,QAAQ,SAAQ,UAAU,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACzD,QAAQ,KAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;;;ACzCD,gBAAS,cAAK,aAAM;AACpB;AAAA,YACC;AAAA;AAAA;AAAA,aAGA;AAAA;AAAA,aAEA;AAAA;AAgBD,IAAM,aAAY;AAClB,IAAM,cAAc;AACpB,IAAM,gBAAgB;AAKtB,IAAM,gBAAgB,WAAmD;AAAA,EACxE,UAAU,MAAM;AAAA,EAChB,YAAY,CAAC,UACZ,OAAO,UAAU,WAAW,KAAK,MAAM,KAAK,IAAI;AAAA,EACjD,UAAU,CAAC,UAAU,KAAK,UAAU,KAAK;AAC1C,CAAC;AACM,IAAM,wBAAwB,SAAQ,0BAA0B;AAAA,EACtE,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC7D,uBAAuB,cAAc,uBAAuB,EAAE,MAE5D;AAAA,EACF,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAQ,iBAAiB;AAAA,IACvC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAAA,EACzD,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,QAAQ,cAAc,QAAQ,EAAE,MAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA,EACtE,QAAQ,SAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,EACjD,MAA6B,EAC7B,QAAQ;AAAA,EACV,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;AACM,IAAM,kCAAkC,SAC9C,qCACA;AAAA,EACC,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ,EAAE,OAAO;AAAA,EACtE,eACC,cAAc,eAAe,EAAE,MAE7B;AAAA,EACH,0BAA0B,SAAQ,4BAA4B;AAAA,IAC7D,QAAQ;AAAA,EACT,CAAC,EAAE,OAAO;AAAA,EACV,qBAAqB,QAAO,uBAAuB;AAAA,IAClD,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,kBAAkB,SAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EACC,QAAQ,EACR,OAAO;AAAA,EACT,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAClC,MAAqC,EACrC,QAAQ;AAAA,EACV,mBAAmB,QAAO,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAAA,EACjE,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC;AAAA,EACvD,iBAAiB,SAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,QAAQ,SAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,EACjD,MAAuC,EACvC,QAAQ;AAAA,EACV,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,oBAAoB,SAAQ,sBAAsB;AAAA,IACjD,QAAQ;AAAA,EACT,CAAC;AAAA,EACD,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,kBAAkB,SAAQ,oBAAoB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjD,SAAS,QAAQ,SAAS,EAAE,QAAQ;AACrC,GACA,CAAC,UAAU;AAAA,EACV,YAAY,qCAAqC,EAAE,GAClD,MAAM,iBACN,MAAM,kBACN,MAAM,kBACP;AACD,CACD;AACO,IAAM,0BAA0B,SAAQ,4BAA4B;AAAA,EAC1E,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAChE,gBAAgB,cAAc,gBAAgB,EAC5C,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,WAAW,SAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,OAAO;AAAA,EAC9D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,cAAc,UAAU,EAAE,MAA+B;AAAA,EACnE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,QAAQ,SAAQ,UAAU,EAAE,QAAQ,cAAc,CAAC,EACjD,MAA+B,EAC/B,QAAQ;AAAA,EACV,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CAAC;;;ACrHD,iBAAS,aAAM,WAAI;AACnB,mBAAS,2BAAe,qBAAS;AAQjC,IAAM,aAAY;AAClB,IAAM,YAAY;AAClB,IAAM,cAAc;AAGb,IAAM,mBAAmB,SAAQ,qBAAqB;AAAA,EAC5D,OAAO,QAAO,SAAS,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnD,IAAI,SAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,IAAI,SAAQ,MAAM,EAAE,QAAQ,UAAU,CAAC;AAAA,EACvC,eAAe,MAAM,eAAe,EAAE,MAA+B;AAAA,EACrE,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,MAAM,SAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC;AAClD,CAAC;;;ACtBD,eAAS;AACT,mBAAS,oBAAQ,qBAAS,kBAAS,kBAAM;AASzC,IAAM,eAAe;AACrB,IAAM,aAAY;AAClB,IAAM,iBAAgB;AACtB,IAAM,oBAAoB;AAEnB,IAAM,mBAAmB,SAAQ,oBAAoB;AAAA,EAC3D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,SAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAAE,WAAW;AAAA,EAC7D,gBAAgB,SAAQ,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjE,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,eAAe,MAAK,eAAe,EAAE,QAAQ;AAAA,EAC7C,QAAQ,SAAQ,UAAU,EAAE,QAAQ,eAAc,CAAC,EACjD,QAAQ,EACR,QAAQ,QAAQ;AAAA,EAClB,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC;AAClD,CAAC;AAED,IAAM,mBAAmB,CAAC,SACzB,SAAQ,MAAM;AAAA,EACb,OAAO,SAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAAE,QAAQ;AAAA,EAC1D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,SAAQ,cAAc;AAAA,IACjC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AACf,CAAC;AAEK,IAAM,6BAA6B,iBACzC,8BACD;AACO,IAAM,oCAAoC,iBAChD,qCACD;;;AC1CA,gBAAS,YAAK;AACd,oBAAS,qBAAS;AAKlB,IAAM,aAAY;AAEX,IAAM,gBAAgB,SAAQ,qBAAqB;AAAA,EACzD,IAAI,SAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,UAAU,SAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC7D,aAAa,SAAQ,eAAe,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvE,YAAY,SAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACjE,kBAAkB,SAAQ,oBAAoB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnE,cAAc,SAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AACtE,CAAC;;;ACVD,iBAAS;AACT,iBAAS,aAAM;AACf,oBAAS;AACT,kBAAS,mBAAO,kBAAS,6BAAiB;;;ACN1C,IAAI,sBAAsB;AAG1B,IAAI,sBAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6G1B,IAAI,kBAAkB,CAAC,cAAc;AAErC,IAAI,YAAY,gBAAgB;AAAA,EAC9B,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,eAAe;AAAA,IACb,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,UAAU,IAAI;AAAA,IAChC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,oCAAoC;AAAA,MAClC,UAAU;AAAA,IACZ;AAAA,IACA,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,cAAc;AAAA,IACxB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,kBAAkB,CAAC,WAAW,WAAW,OAAO,gCAAgC,OAAO,mCAAmC,OAAO;AAAA,IACjI,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO,gCAAgC,OAAO,mCAAmC,OAAO;AAAA,IACtH;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,UAAU,CAAC,cAAc;AAAA,IACzB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS,UAAU,MAAM;AAAA,IACnC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,MAAM;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,QACP,aAAa;AAAA,MACf;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,cAAc;AAAA,IACpC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,OAAO,CAAC,YAAY,OAAO;AAAA,IAC3B,UAAU,CAAC,YAAY,MAAM;AAAA,IAC7B,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,KAAK;AAAA,IAC3B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,OAAO;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,QAAQ;AAAA,IAC1B,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,QAAQ,SAAS;AAAA,IAC9B,UAAU,CAAC,QAAQ,cAAc;AAAA,IACjC,WAAW,CAAC,QAAQ,YAAY;AAAA,IAChC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW,KAAK,SAAS;AAAA,IACnC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,cAAc,CAAC,CAAC,UAAU,uBAAuB,CAAC;AAAA,MAClD,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,iBAAiB;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,MACf,SAAS,CAAC,IAAI;AAAA,IAChB;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,OAAO,CAAC,OAAO;AAAA,IACf,UAAU,CAAC,MAAM;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,QACP,SAAS;AAAA,MACX;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,iBAAiB;AAAA,MACf,eAAe,CAAC,YAAY;AAAA,IAC9B;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,iBAAiB;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,MACf,SAAS,CAAC,KAAK;AAAA,IACjB;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,OAAO,gBAAgB,eAAe,oEAAoE;AAAA,IAC7H;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,eAAe,SAAS,aAAa,GAAG,OAAO,YAAY,OAAO,cAAc;AAAA,MAClF;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,OAAO;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,iBAAiB;AAAA,IACnC,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,UAAU,IAAI;AAAA,IAChC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO;AAAA,IACxC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO;AAAA,IAC7B;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,0BAA0B;AAAA,IACxB,kBAAkB,CAAC,WAAW,WAAW,OAAO,iCAAiC,OAAO;AAAA,IACxF,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO,iCAAiC,OAAO;AAAA,IAC7E;AAAA,EACF;AAAA,EACA,kBAAkB;AAAA,IAChB,kBAAkB,CAAC,WAAW,qCAAqC,OAAO;AAAA,IAC1E,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,qCAAqC,OAAO;AAAA,IAC/D;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,MAAM,IAAI;AAAA,IAC5B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,OAAO,CAAC,YAAY,OAAO;AAAA,IAC3B,UAAU,CAAC,YAAY,MAAM;AAAA,IAC7B,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,eAAe;AAAA,IACrC,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,IAAI;AAAA,IAC1B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO,SAAS,QAAQ,UAAU,OAAO;AAAA,IACjD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,OAAO,SAAS,QAAQ,YAAY;AAAA,IAC9C,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,QACP,kBAAkB;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,OAAO,SAAS,QAAQ,IAAI;AAAA,IACtC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,KAAK;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,KAAK;AAAA,IACH,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,YAAY;AAAA,IACtB,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,WAAW;AAAA,IACrB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,YAAY;AAAA,IACV,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB,CAAC,eAAe,cAAc;AAAA,IAC/C,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,OAAO,CAAC,QAAQ,eAAe,OAAO;AAAA,IACtC,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,gBAAgB;AAAA,MAClB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,eAAe,IAAI;AAAA,IACrC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,YAAY,CAAC,UAAU;AAAA,IACvB,WAAW,CAAC,WAAW;AAAA,IACvB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,IAAI,gBAAgB;AAAA,QACxB,iBAAiB;AAAA,MACnB,CAAC;AAAA,MACD,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,kBAAkB,CAAC,WAAW,GAAG,OAAO,6CAA6C,OAAO,4CAA4C,OAAO;AAAA,IAC/I,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,GAAG,OAAO,gDAAgD,OAAO,yBAAyB,OAAO;AAAA,IACpH;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,GAAG,OAAO,mDAAmD,OAAO,0BAA0B,OAAO;AAAA,IACxH;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,oCAAoC,CAAC,YAAY;AAAA,MAC/C,YAAY,OAAO;AAAA,IACrB;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,SAAS;AAAA,IAC3B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,QAAQ,MAAM;AAAA,IACpC,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,aAAa,OAAO;AAAA,MACtB;AAAA,MACA,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,aAAa,OAAO;AAAA,MACtB;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ,IAAI;AAAA,IACtB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,IAAI;AAAA,IACF,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,YAAY,KAAK,IAAI;AAAA,IAC/B,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,iBAAiB,CAAC,QAAQ,cAAc;AAAA,IACxC,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,MAAM,OAAO,WAAW;AAAA,QACtB,MAAM,QAAQ,MAAM,iBAAiB,MAAM;AAAA,QAC3C,IAAI,UAAU;AAAA,UACZ,MAAM,IAAI,MAAM,0CAA0C;AAAA,QAC5D,QAAQ,OAAO,oBAAoB;AAAA,QACnC,OAAO;AAAA,UACL,CAAC,UAAU,SAAS;AAAA,UACpB,CAAC,SAAS,KAAK;AAAA,UACf,CAAC,aAAa,OAAO,QAAQ;AAAA,UAC7B,CAAC,aAAa,eAAe;AAAA,QAC/B;AAAA;AAAA,MAEF,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,wBAAwB;AAAA,MACtB,QAAQ;AAAA,IACV;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,MAAM,OAAO,WAAW;AAAA,QACtB,MAAM,QAAQ,MAAM,iBAAiB,MAAM;AAAA,QAC3C,IAAI,CAAC;AAAA,UACH,MAAM,IAAI,MAAM,8BAA8B;AAAA,QAChD,QAAQ,OAAO,oBAAoB;AAAA,QACnC,OAAO;AAAA,UACL,CAAC,UAAU,QAAQ;AAAA,UACnB,CAAC,aAAa,OAAO,QAAQ;AAAA,UAC7B,CAAC,SAAS,KAAK;AAAA,UACf,CAAC,aAAa,eAAe;AAAA,QAC/B;AAAA;AAAA,MAEF,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,SAAS,CAAC,QAAQ;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,+BAA+B;AAAA,MAC7B,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB,CAAC,WAAW,WAAW,OAAO;AAAA,IAChD,oCAAoC,MAAM;AAAA,MACxC,MAAM,QAAQ,OAAO,WAAW;AAAA,MAChC,OAAO;AAAA,QACL;AAAA,MACF;AAAA;AAAA,IAEF,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,aAAa;AAAA,IAC1B,UAAU,CAAC,MAAM;AAAA,IACjB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,WAAW,OAAO;AAAA,IACrC;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,kBAAkB;AAAA,IAClB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,kBAAkB;AAAA,IAClB,oCAAoC;AAAA,MAClC,WAAW,OAAO,WAAW;AAAA,MAC7B,aAAa,GAAG,UAAU,YAAY,qBAAqB,UAAU,UAAU,MAAM,GAAG,EAAE,MAAM,IAAI,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,IAC1H;AAAA,IACA,OAAO,CAAC,eAAe;AAAA,IACvB,YAAY,CAAC,WAAW;AAAA,IACxB,UAAU,CAAC,WAAW;AAAA,IACtB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IACxE,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,MAAM;AAAA,IAChB,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK,CAAC,WAAW,yBAAyB,OAAO,UAAU;AAAA,IAC7D;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,kBAAkB;AAAA,IAClB,OAAO,CAAC,OAAO;AAAA,IACf,YAAY,CAAC,WAAW;AAAA,IACxB,WAAW,CAAC,YAAY;AAAA,IACxB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,SAAS,CAAC,SAAS;AAAA,IACnB,YAAY;AAAA,IACZ,gBAAgB;AAAA,MACd,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,KAAK;AAAA,IACP;AAAA,IACA,mBAAmB;AAAA,MACjB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS,CAAC,YAAY;AAAA,QACpB,eAAe,SAAS,KAAK,GAAG,OAAO,YAAY,OAAO,cAAc;AAAA,MAC1E;AAAA,MACA,gBAAgB;AAAA,MAChB,KAAK;AAAA,IACP;AAAA,IACA,eAAe;AAAA,IACf,SAAS,CAAC,IAAI;AAAA,IACd,aAAa;AAAA,IACb,cAAc;AAAA,MACZ,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,KAAK;AAAA,IACP;AAAA,EACF;AACF,CAAC;AAwBD,IAAI,uBAAuB,CAAC,WAAW;AAAA,EACrC,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAElB,IAAI,uBAAuB,CAAC,WAAW;AAAA,EACrC,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS,eAAe;AAAA;AAGjC,IAAI,8BAA8B,CAAC,WAAW;AAAA,EAC5C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAGlB,IAAI,4BAA4B,CAAC,WAAW;AAAA,EAC1C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS,sBAAsB;AAAA;AAExC,IAAI,gCAAgC,CAAC,WAAW;AAAA,EAC9C,IAAI,CAAC,sBAAsB,MAAM;AAAA,IAC/B,OAAO;AAAA,EACT,MAAM,WAAW,UAAU;AAAA,EAC3B,OAAO,SAAS;AAAA;AAElB,IAAI,wBAAwB,CAAC,WAAW,OAAO,OAAO,WAAW,MAAM;AAiFvE,IAAI,eAAe,CAAC,UAAU;AAAA,EAC5B,IAAI;AAAA,EACJ,IAAI,OAAO,UAAU,UAAU;AAAA,IAC7B,MAAM;AAAA,EACR,EAAO;AAAA,IACL,MAAM,QAAQ,iBAAiB,aAAa,QAAQ,IAAI,WAAW,KAAK;AAAA,IACxE,MAAM,MAAM,OAAO,CAAC,KAAK,SAAS,MAAM,OAAO,aAAa,IAAI,GAAG,EAAE;AAAA;AAAA,EAEvE,OAAO,KAAK,GAAG;AAAA;AAEjB,IAAI,mBAAmB,OAAO,WAAW;AAAA,EACvC,MAAM,YAAY,KAAK,MAAM,KAAK,IAAI,IAAI,IAAI;AAAA,EAC9C,MAAM,YAAY,YAAY,OAAO,YAAY;AAAA,EACjD,MAAM,kBAAkB,MAAM,WAAW,WAAW,OAAO,YAAY;AAAA,EACvE,MAAM,WAAW,IAAI,IAAI,0CAA0C;AAAA,EACnE,SAAS,aAAa,IAAI,UAAU,UAAU;AAAA,EAC9C,SAAS,aAAa,IAAI,aAAa,OAAO,QAAQ;AAAA,EACtD,SAAS,aAAa,IAAI,aAAa,UAAU,SAAS,CAAC;AAAA,EAC3D,SAAS,aAAa,IAAI,aAAa,eAAe;AAAA,EACtD,MAAM,cAAc,SAAS,SAAS;AAAA,EACtC,MAAM,gBAAgB,MAAM,MAAM,aAAa,EAAE,QAAQ,OAAO,CAAC;AAAA,EACjE,MAAM,YAAY,MAAM,cAAc,KAAK;AAAA,EAC3C,IAAI,UAAU,WAAW,GAAG;AAAA,IAC1B,OAAO;AAAA,MACL;AAAA,MACA,OAAO,UAAU,KAAK;AAAA,IACxB;AAAA,EACF;AAAA,EACA;AAAA;AAEF,IAAI,aAAa,OAAO,SAAS,WAAW;AAAA,EAC1C,MAAM,UAAU,IAAI;AAAA,EACpB,MAAM,MAAM,MAAM,OAAO,OAAO,UAAU,OAAO,QAAQ,OAAO,MAAM,GAAG,EAAE,MAAM,WAAW,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;AAAA,EAC3H,MAAM,YAAY,MAAM,OAAO,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,EAC/E,OAAO,MAAM,KAAK,IAAI,WAAW,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAAE,KAAK,EAAE;AAAA;AAoDxG,IAAI,iCAAiC,CAAC,WAAW,MAAM;AAAA,EACrD,MAAM,SAAS,OAAO,gBAAgB,IAAI,WAAW,MAAM,CAAC;AAAA,EAC5D,OAAO,UAAU,MAAM;AAAA;AAEzB,IAAI,uBAAuB,+BAA+B,mBAAmB;AAC7E,IAAI,gBAAgB,+BAA+B,mBAAmB;AACtE,IAAI,YAAY,CAAC,UAAU,aAAa,KAAK,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AA4OxG,IAAI,sBAAsB,OAAO,KAAK,SAAS,EAAE,OAAO,oBAAoB;AAC5E,IAAI,sBAAsB,OAAO,KAAK,SAAS,EAAE,OAAO,oBAAoB;AAC5E,IAAI,kBAAkB,OAAO,KAAK,SAAS,EAAE,OAAO,qBAAqB;AACzE,IAAI,6BAA6B,OAAO,KAAK,SAAS,EAAE,OAAO,2BAA2B;AAC1F,IAAI,2BAA2B,OAAO,KAAK,SAAS,EAAE,OAAO,yBAAyB;AACtF,IAAI,+BAA+B,OAAO,KAAK,SAAS,EAAE,OAAO,6BAA6B;;;AD93EvF,IAAM,8BAA8B,SAAQ,4BAA4B;AAAA,EAC9E,kBAAkB,OAAM,kBAAkB,EACxC,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,cAAc,OAAM,cAAc,EAAE,MAAgB,EAAE,QAAQ,CAAC,CAAC;AAAA,EAChE,oBAAoB,SAAQ,sBAAsB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAC1E,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,OAAO,SAAQ,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvC,qBAAqB,SAAQ,uBAAuB;AAAA,IACnD,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,uBAAuB,SAAQ,yBAAyB;AAAA,IACvD,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,UAAU,SAAQ,YAAY,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACvD,IAAI,SAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,OAAO,SAAQ,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACvC,UAAU,OAAM,UAAU,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA,EACvE,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EACtC,MAAuC,EACvC,QAAQ;AAAA,EACV,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,UAAU,SAAQ,YAAY,EAAE,QAAQ,IAAI,CAAC;AAC9C,CAAC;AACM,IAAM,4BAA4B,SAAQ,0BAA0B;AAAA,EAC1E,yBAAyB,MAAK,yBAAyB;AAAA,EACvD,mBAAmB,SAAQ,qBAAqB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACxE,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,YAAY,UAAU,YAAY;AAAA,EAClC,gBAAgB,OAAM,gBAAgB,EACpC,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,IAAI,SAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,oBAAoB,MAAK,oBAAoB;AAAA,EAC7C,mBAAmB,UAAU,mBAAmB;AAAA,EAChD,UAAU,OAAM,UAAU,EAAE,MAA+B,EAAE,QAAQ,CAAC,CAAC;AAAA,EACvE,WAAW,SAAQ,aAAa,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACzD,iBAAiB,SAAQ,mBAAmB,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EACpE,kBAAkB,SAAQ,oBAAoB,EAAE,QAAQ,IAAI,CAAC,EAAE,QAAQ;AAAA,EACvE,0BAA0B,MAAK,0BAA0B;AAAA,EACzD,QAAQ,SAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EACtC,MAAqC,EACrC,QAAQ;AAAA,EACV,YAAY,SAAQ,cAAc,EAAE,QAAQ,GAAG,CAAC;AAAA,EAChD,YAAY,UAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAC1D,CAAC;;;AE7DD,eAAS;AACT,mBAAS,oBAAQ,qBAAS,qBAAS;AAInC,IAAM,aAAa;AAEZ,IAAM,gBAAgB,SAAQ,iBAAiB;AAAA,EACrD,iBAAiB,SAAQ,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC/D,KAAK,SAAQ,OAAO,EAAE,QAAQ,WAAW,CAAC,EAAE,WAAW;AAAA,EACvD,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,sBAAsB,QAAO,wBAAwB;AAAA,IACpD,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AACZ,CAAC;;;ACdD,eAAS;AACT;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA;AAAA,UAEA;AAAA,aACA;AAAA;AAKD,IAAM,aAAY;AAClB,IAAM,eAAe;AAEd,IAAM,sBAAsB,SAAQ,wBAAwB;AAAA,EAClE,oBAAoB,OAAM,oBAAoB,EAC5C,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,QAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,qBAAqB,SAAS,qBAAqB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EACxE,gCAAgC,QAAO,kCAAkC;AAAA,IACxE,MAAM;AAAA,EACP,CAAC;AAAA,EACD,uBAAuB,MAAK,uBAAuB;AAAA,EACnD,WAAW,SAAQ,aAAa,EAAE,QAAQ,aAAa,CAAC;AAAA,EACxD,cAAc,SAAQ,cAAc,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC7D,sBAAsB,SAAS,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAC1E,wBAAwB,MAAK,wBAAwB;AAAA,EACrD,eAAe,SAAQ,eAAe,EAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAC/D,CAAC;;;ACnCD,gBAAS,cAAK,aAAM,YAAI,WAAI;AAC5B;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,aACA;AAAA;AA0BD,IAAM,aAAa;AAGnB,IAAM,aAAY;AAClB,IAAM,4BAA4B,IAAI,IAA2B;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACD,CAAC;AACD,IAAM,gCAAgC,IAAI,IAA+B;AAAA,EACxE;AAAA,EACA;AAAA,EACA;AACD,CAAC;AAkBM,IAAM,oCAAoC,UAChD,wCACA;AAAA,EACC,aAAa,UAAQ,eAAe,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACtE,iBAAiB,MAAK,iBAAiB;AAAA,EACvC,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,QAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,mBAAmB,QAAO,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAAA,EACjE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,QAAQ,UAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAClD,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AACpD,CACD;AACO,IAAM,gCAAgC,UAC5C,oCACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,UAAQ,iBAAiB;AAAA,IACvC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,KAAK,UAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AACpD,CACD;AACO,IAAM,qCAAqC,UACjD,yCACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACrE,CACD;AACO,IAAM,oBAAoB,UAAQ,sBAAsB;AAAA,EAC9D,wBAAwB,UAAQ,0BAA0B;AAAA,IACzD,QAAQ;AAAA,EACT,CAAC;AAAA,EACD,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,UAAQ,iBAAiB,EAAE,QAAQ,WAAU,CAAC;AAAA,EAC7D,WAAW,OAAM,WAAW,EAAE,MAAoB;AAAA,EAClD,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAW,CAAC;AAAA,EACpD,MAAM,UAAQ,QAAQ,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,2BAA2B,MAAK,2BAA2B,EAAE,MAAM;AAAA,EACnE,eAAe,MAAK,eAAe,EAAE,MAAM,EAAE,QAAQ;AAAA,EACrD,uCAAuC,SACtC,uCACD;AAAA,EACA,+BAA+B,SAAQ,+BAA+B;AAAA,EACtE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AACxC,CAAC;AACM,IAAM,kBAAkB,UAAQ,oBAAoB;AAAA,EAC1D,KAAK,UAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC;AAAA,EACzC,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAW,CAAC;AAAA,EACpD,aAAa,OAAM,aAAa,EAAE,MAA+B;AAAA,EACjE,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,gBAAgB,UAAQ,kBAAkB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACzE,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EAClE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,UAAQ,SAAS,EAAE,QAAQ,WAAU,CAAC;AAAA,EAC7C,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,SAAS,UAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;AACM,IAAM,iCAAiC,UAC7C,oCACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,kBAAkB,QAAO,oBAAoB;AAAA,IAC5C,MAAM;AAAA,EACP,CAAC,EAAE,QAAQ;AAAA,EACX,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,QAAQ,UAAQ,UAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ;AAAA,EAClD,WAAW,UAAQ,aAAa,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,OAAO;AAAA,EACjE,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AACpD,CACD;AACO,IAAM,gCAAgC,UAC5C,oCACA;AAAA,EACC,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AACrE,CACD;AACO,IAAM,6BAA6B,UACzC,gCACA;AAAA,EACC,UAAU,QAAO,YAAY,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACzD,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,WAAW,CAAC,EAAE,QAAQ;AAAA,EACtE,IAAI,UAAQ,MAAM,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpD,YAAY,MAAK,YAAY;AAAA,EAC7B,aAAa,QAAO,eAAe,EAAE,MAAM,SAAS,CAAC;AAAA,EACrD,cAAc,MAAK,cAAc,EAAE,QAAQ;AAAA,EAC3C,SAAS,UAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CACD;AACO,IAAM,wCAAwC,UACpD,4CACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,aAAa,OAAM,aAAa,EAC9B,MAA8B,EAC9B,QAAQ;AAAA,EACV,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AACf,CACD;AACO,IAAM,0BAA0B,UAAQ,6BAA6B;AAAA,EAC3E,KAAK,UAAQ,OAAO,EAAE,QAAQ,WAAU,CAAC;AAAA,EACzC,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAW,CAAC;AAAA,EACpD,aAAa,OAAM,aAAa,EAAE,MAA+B;AAAA,EACjE,WAAW,UAAQ,aAAa,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,UAAQ,YAAY,EAAE,QAAQ,WAAU,CAAC;AAAA,EACnD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,QAAQ,MAAK,QAAQ,EAAE,MAAM,EAAE,QAAQ;AAAA,EACvC,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EAAE,WAAW;AAAA,EACpE,SAAS,UAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;ACnMD,gBAAS,cAAK,aAAM;AACpB;AAAA,YACC;AAAA,WACA;AAAA,aACA;AAAA,gBACA;AAAA,aACA;AAAA;AAYD,IAAM,aAAY;AAClB,IAAM,eAAc;AACpB,IAAM,eAAe;AAEd,IAAM,+BAA+B,UAC3C,iCACA;AAAA,EACC,gBAAgB,QAAO,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC3D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,UAAQ,SAAS,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,UAAQ,iBAAiB;AAAA,IACvC,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,iBAAiB,UAAQ,mBAAmB,EAAE,QAAQ,WAAU,CAAC;AAAA,EACjE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,OAAM,OAAO,EAAE,MAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5D,OAAO,UAAQ,SAAS,EAAE,QAAQ,aAAa,CAAC,EAC9C,MAAuB,EACvB,QAAQ,EACR,QAAQ,SAAS;AAAA,EACnB,YAAY,UAAQ,cAAc,EAAE,QAAQ,WAAU,CAAC,EACrD,QAAQ,EACR,OAAO;AACV,CACD;AACO,IAAM,+BAA+B,UAC3C,iCACA;AAAA,EACC,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,OAAO,OAAM,OAAO,EAAE,MAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAAA,EAC5D,QAAQ,UAAQ,UAAU,EAAE,QAAQ,aAAa,CAAC,EAChD,MAAwB,EACxB,QAAQ,EACR,QAAQ,QAAQ;AAAA,EAClB,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,UAAQ,WAAW,EAAE,QAAQ,WAAU,CAAC,EAAE,QAAQ;AAC5D,GACA,CAAC,UAAU,CAAC,YAAW,EAAE,SAAS,CAAC,MAAM,iBAAiB,MAAM,OAAO,EAAE,CAAC,CAAC,CAC5E;AACO,IAAM,qBAAqB,UAAQ,sBAAsB;AAAA,EAC/D,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,UAAU,OAAM,UAAU,EAAE,MAA+B;AAAA,EAC3D,MAAM,UAAQ,QAAQ,EAAE,QAAQ,aAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,eAAe,QAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CAAC;;;ACvED,eAAS;AACT,mBAAS,qBAAQ,sBAAS;AAI1B,IAAM,cAAY;AAEX,IAAM,0BAA0B,UAAQ,4BAA4B;AAAA,EAC1E,OAAO,UAAQ,SAAS,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AACrE,CAAC;;;ACXD,eAAS;AACT,mBAAS,mBAAQ,mBAAO,sBAAS;AAIjC,IAAM,cAAY;AAEX,IAAM,qBAAqB,UAAQ,uBAAuB;AAAA,EAChE,cAAc,OAAM,cAAc,EAChC,MAAyB,EACzB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC;AAAA,EACvD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ,EAAE,OAAO;AAC3E,CAAC;;;ACtBD,gBAAS,YAAK;AACd;AAAA,YACC;AAAA,WACA;AAAA,aACA;AAAA,gBACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAClB,IAAM,cAAc;AAGpB,IAAM,eAAe;AAEd,IAAM,aAAa,UACzB,cACA;AAAA,EACC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,UAAQ,mBAAmB,EAAE,QAAQ,YAAU,CAAC,EAC/D,QAAQ,EACR,QAAQ,YAAY;AAAA,EACtB,aAAa,OAAM,aAAa,EAC9B,MAAgB,EAChB,QAAQ,EACR,QAAQ,CAAC,CAAC;AAAA,EACZ,MAAM,UAAQ,QAAQ,EAAE,QAAQ,YAAY,CAAC,EAAE,QAAQ;AAAA,EACvD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,GACA,CAAC,UAAU,CAAC,YAAW,EAAE,SAAS,CAAC,MAAM,iBAAiB,MAAM,IAAI,EAAE,CAAC,CAAC,CACzE;;;AChCA,iBAAS,aAAM;AACf,mBAAS,qBAAQ,sBAAS;AAI1B,IAAM,cAAY;AAEX,IAAM,kBAAkB,UAAQ,oBAAoB;AAAA,EAC1D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,iBAAiB,SAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,UAAU,UAAQ,YAAY,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AACjE,CAAC;;;ACfD,iBAAS;AACT,eAAS,YAAI;AACb,oBAAS;AACT;AAAA,YAEC;AAAA;AAAA,WAEA;AAAA,aACA;AAAA,UACA;AAAA,eACA;AAAA,aACA;AAAA;AAMM,IAAM,oBAAoB,UAChC,iBACA;AAAA,EACC,cAAc,MAAK,cAAc;AAAA,EACjC,qBAAqB,SAAO,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAAA,EACrE,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,IAAI,UAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,eAAe,MAAK,eAAe;AAAA,EACnC,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,WAAW,OAAM,WAAW,EAAE,MAA+B,EAAE,QAAQ;AACxE,GAGA,CAAC,UAAU,CAAC,MAAM,8BAA8B,EAAE,GAAG,MAAM,aAAa,CAAC,CAC1E;AAEO,IAAM,gCAAgC,UAC5C,8BACA;AAAA,EACC,cAAc,MAAK,cAAc;AAAA,EACjC,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,IAAI,UAAQ,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,WAAW;AAAA,EAC9C,eAAe,MAAK,eAAe;AAAA,EACnC,0BAA0B,OAAM,0BAA0B,EAAE,MAE1D;AAAA,EACF,YAAY,WAAU,YAAY,EAAE,QAAQ,EAAE,WAAW;AAAA,EACzD,oBACC,OAAM,oBAAoB,EAAE,MAA+B;AAC7D,GACA,CAAC,UAAU;AAAA,EACV,MAAM,2CAA2C,EAAE,GAClD,MAAM,aACP;AACD,CACD;;;ACtDA,eAAS;AACT,mBAAS,qBAAQ,mBAAS,kBAAM;AAIhC,IAAM,cAAY;AAClB,IAAM,cAAa;AAEZ,IAAM,4BAA4B,UACxC,+BACA;AAAA,EACC,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAW,CAAC,EAAE,QAAQ;AAAA,EAC5D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAW,CAAC,EAAE,WAAW;AAAA,EACnE,gBAAgB,UAAQ,kBAAkB,EAAE,QAAQ,YAAU,CAAC;AAAA,EAC/D,cAAc,MAAK,cAAc;AAAA,EACjC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CACD;;;AClBA,gBAAS,cAAK,aAAM;AACpB,mBAAS,qBAAQ,mBAAS,mBAAO,sBAAS;AAY1C,IAAM,cAAY;AAClB,IAAM,eAAc;AAEb,IAAM,sBAAsB,UAAQ,wBAAwB;AAAA,EAClE,QAAQ,OAAM,QAAQ,EACpB,MAAmD,EACnD,QAAQ;AAAA,EACV,eAAe,UAAQ,iBAAiB,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EAC1E,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,SAAS,SAAQ,SAAS,EAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAClD,iBAAiB,UAAQ,mBAAmB;AAAA,IAC3C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,MAAM,UAAQ,QAAQ,EAAE,QAAQ,aAAY,CAAC,EAC3C,MAAyB,EACzB,QAAQ;AAAA,EACV,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,CAAC;;;ACxBD,eAAS;AACT,mBAAS,qBAAQ,mBAAS,oBAAO,sBAAS;AAa1C,IAAM,cAAY;AAEX,IAAM,0BAA0B,UAAQ,6BAA6B;AAAA,EAC3E,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AACrE,CAAC;AACM,IAAM,0BAA0B,UAAQ,6BAA6B;AAAA,EAC3E,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,kBAAkB,UAAQ,oBAAoB;AAAA,IAC7C,QAAQ;AAAA,EACT,CAAC,EAAE,QAAQ;AAAA,EACX,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,0BAA0B,UAAQ,4BAA4B;AAAA,IAC7D,QAAQ;AAAA,EACT,CAAC,EAAE,WAAW;AAAA,EACd,UAAU,SAAQ,UAAU,EAAE,QAAQ;AAAA,EACtC,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;AACM,IAAM,8BAA8B,UAC1C,iCACA;AAAA,EACC,WAAW,UAAQ,aAAa,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC/D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,0BAA0B,QAAM,0BAA0B,EACxD,MAAkB,EAClB,QAAQ;AAAA,EACV,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,OAAO,UAAQ,SAAS,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACvD,YAAY,UAAQ,cAAc,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EACpE,kBAAkB,QAAM,kBAAkB,EAAE,MAAgB,EAAE,QAAQ;AAAA,EACtE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrE,OAAO,UAAQ,SAAS,EAAE,QAAQ,YAAU,CAAC;AAC9C,CACD;;;ACtDA,gBAAS,YAAK;AACd;AAAA,YACC;AAAA,aACA;AAAA,gBACA;AAAA,UACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAEX,IAAM,oBAAoB,UAChC,sBACA;AAAA,EACC,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,iBAAiB,MAAK,iBAAiB,EAAE,QAAQ;AAAA,EACjD,MAAM,UAAQ,QAAQ,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EACrD,UAAU,UAAQ,YAAY,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAAA,EAC7D,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AACpE,GACA,CAAC,WAAW,EAAE,IAAI,YAAW,EAAE,SAAS,CAAC,MAAM,UAAU,MAAM,IAAI,EAAE,CAAC,EAAE,EACzE;;;ACvBA,eAAS;AACT;AAAA,YACC;AAAA,aACA;AAAA,WACA;AAAA,aACA;AAAA,UACA;AAAA,aACA;AAAA;AAKD,IAAM,cAAY;AAClB,IAAM,qBAAqB;AAEpB,IAAM,2BAA2B,UAAQ,6BAA6B;AAAA,EAC5E,WAAW,SAAQ,WAAW;AAAA,EAC9B,SAAS,SAAO,WAAW,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EAClE,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,eAAe,UAAQ,iBAAiB,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EAC1E,aAAa,UAAQ,eAAe,EAAE,QAAQ,mBAAmB,CAAC;AAAA,EAClE,iBAAiB,SAAO,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAAA,EAC7D,YAAY,MAAK,YAAY,EAAE,QAAQ;AAAA,EACvC,YAAY,QAAM,YAAY,EAAE,MAAgB;AAAA,EAChD,SAAS,UAAQ,WAAW,EAAE,QAAQ,YAAU,CAAC,EAAE,QAAQ;AAC5D,CAAC;;;ACzBD,iBAAS,cAAM;AACf,mBAAS,mBAAQ,oBAAO,mBAAS,mBAAM;AAQvC,IAAM,cAAY;AAClB,IAAM,cAAa;AAGZ,IAAM,yBAAyB,UAAQ,2BAA2B;AAAA,EACxE,UAAU,SAAO,YAAY,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACzD,eAAe,SAAO,iBAAiB,EAAE,MAAM,SAAS,CAAC,EAAE,QAAQ;AAAA,EACnE,cAAc,UAAQ,gBAAgB,EAAE,QAAQ,YAAW,CAAC,EAAE,QAAQ;AAAA,EACtE,aAAa,UAAQ,eAAe,EAAE,QAAQ,YAAU,CAAC,EAAE,WAAW;AAAA,EACtE,eAAe,QAAM,eAAe,EAAE,MAAoB,EAAE,QAAQ;AAAA,EACpE,YAAY,OAAK,YAAY;AAAA,EAC7B,aAAa,SAAO,eAAe,EAAE,MAAM,SAAS,CAAC;AACtD,CAAC;;;ACTD;AACA;AAAA;AAAA;AASA,IAAM,cAAc,CAAC,UAAmB;AAAA,EACvC,IAAI,UAAU,QAAQ,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,KAAK;AAAA,EACpE,MAAM,QAAQ,QAAQ,IAAI,OAAO,OAAO;AAAA,EACxC,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO,MAAM,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE;AAAA,EAE1E,OAAO;AAAA;AAGR,IAAM,oBAAoB,CAAC,UAC1B,MAAM,YAAY,IAAI,WAAW,EAAE,KAAK,EAAE;AAE3C,IAAM,gBAAgB,CAAC,UAAmB;AAAA,EACzC,IAAI,UAAU,QAAQ,UAAU;AAAA,IAAW,OAAO;AAAA,EAClD,IAAI,GAAG,OAAO,GAAG;AAAA,IAAG,OAAO,kBAAkB,KAAK;AAAA,EAClD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,IAAI,MAAM,QAAQ,OAAO,IAAI;AAAA,EACnE,IAAI,OAAO,UAAU;AAAA,IAAW,OAAO,QAAQ,SAAS;AAAA,EACxD,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,OAAO,KAAK;AAAA,EAClD,IAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,UAAU,UAAU;AAAA,IACtD,OAAO,IAAI,KAAK,UAAU,KAAK;AAAA,EAChC;AAAA,EAEA,OAAO,OAAO,KAAK;AAAA;AAGpB,IAAM,YAAY,CAAC,WAAqB;AAAA,EACvC,MAAM,QAAQ,CAAC,IAAI,OAAO,SAAS,OAAO,WAAW,CAAC;AAAA,EACtD,IAAI,OAAO;AAAA,IAAS,MAAM,KAAK,aAAa;AAAA,EAC5C,IAAI,OAAO,WAAW,CAAC,OAAO;AAAA,IAAS,MAAM,KAAK,UAAU;AAAA,EAC5D,IAAI,OAAO,cAAc,OAAO,YAAY,WAAW;AAAA,IACtD,MAAM,KAAK,WAAW,cAAc,OAAO,OAAO,GAAG;AAAA,EACtD;AAAA,EACA,IAAI,OAAO;AAAA,IAAU,MAAM,KAAK,QAAQ;AAAA,EAExC,OAAO,MAAM,KAAK,GAAG;AAAA;AAGtB,IAAM,kBAAkB,CAAC,gBACxB,gBAAgB,YAAY,IAAI,CAAC,WAAW,IAAI,OAAO,OAAO,EAAE,KAAK,IAAI;AAK1E,IAAM,mBAAmB,CAAC,UAAmB;AAAA,EAC5C,MAAM,MAAM,eAAe,KAAK;AAAA,EAChC,MAAM,cAAc,IAAI,QAAQ,IAAI,SAAS;AAAA,EAC7C,MAAM,WAAW,IAAI,QAAQ,KAAK,CAAC,WAAW,OAAO,OAAO;AAAA,EAC5D,MAAM,cAAc,IAAI,YAAY,IAAI,WAAW,CAAC;AAAA,EACpD,MAAM,QACL,aAAa,aAAa,YAAY,SAAS,IAC5C,CAAC,GAAG,aAAa,gBAAgB,WAAW,CAAC,IAC7C;AAAA,EACJ,MAAM,OAAO,MAAM,IAAI,CAAC,SAAS,IAAK,MAAM,EAAE,KAAK;AAAA,CAAK;AAAA,EAExD,OAAO,+BAA+B,IAAI;AAAA,EAAY;AAAA;AAAA;AAMhD,IAAM,kBAAkB,CAAC,WAC/B,OAAO,IAAI,gBAAgB,EAAE,KAAK;AAAA;AAAA,CAAM;;;ACvEzC;AAgBA,IAAM,cAAc;AAAA;AAAA;AAAA;AAOpB,IAAM,eAAe,CAAC,UACrB,OAAO,UAAU,YACjB,UAAU,QACT,OAAO,QAAQ,IAAI,OAAO,IAAI,MAAM;AAEtC,IAAM,cAAc,CAAC,UACnB,OAAO,OAAO,iBAAiB,KAAK;AAEtC,IAAM,gBAAgB,MACpB,OAAO,KAAK,eAAe,EAAE,OAAO,WAAW;AAEjD,IAAM,WAAW,OAChB,MACA,IACA,KACA,QACI;AAAA,EACJ,MAAM,KAAK,MAAM,GAAG;AAAA,EACpB,MAAM,KAAK,MACV,yEACA,CAAC,IAAI,KAAK,IAAI,CAAC,CAChB;AAAA,EACA,IAAI,UAAU,IAAI;AAAA;AAGnB,IAAM,SAAS,OACd,MACA,IACA,KACA,SACA,QACA,QACI;AAAA,EACJ,IAAI,QAAQ,IAAI,EAAE,GAAG;AAAA,IACpB,OAAO,QAAQ,KAAK,EAAE;AAAA,IACtB,IAAI,UAAU,IAAI;AAAA,IAElB;AAAA,EACD;AAAA,EACA,MAAM,SAAS,MAAM,IAAI,KAAK,GAAG;AAAA,EACjC,OAAO,QAAQ,KAAK,EAAE;AAAA;AAGhB,IAAM,gBAAgB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,MAAM,QAAQ;AAAA,MACa;AAAA,EAC3B,MAAM,OAAO,IAAI,KAAK,EAAE,kBAAkB,YAAY,CAAC;AAAA,EACvD,MAAM,SAA6B,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,EAAE;AAAA,EAE9D,IAAI;AAAA,IACH,MAAM,KAAK,MAAM,WAAW;AAAA,IAC5B,MAAM,UAAU,MAAM,KAAK,MAAM,oCAAoC;AAAA,IACrE,MAAM,UAAU,IAAI,IACnB,QAAQ,KAAK,OAAO,YAAY,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,CACtD;AAAA,IAEA,MAAM,WAAW,UAAU,cAAc;AAAA,IACzC,MAAM,OAAO,SAAS,QAAQ,CAAC,UAC9B,gBAAgB,OAAO,WAAW,IAAI,CAAC,eAAe;AAAA,MACrD,IAAI,GAAG,SAAS,UAAU;AAAA,MAC1B,KAAK,UAAU;AAAA,IAChB,EAAE,CACH;AAAA,IAEA,MAAM,KAAK,OAAO,OAAO,OAAO,SAAS;AAAA,MACxC,MAAM;AAAA,MAEN,OAAO,OAAO,MAAM,KAAK,IAAI,KAAK,KAAK,SAAS,QAAQ,GAAG;AAAA,OACzD,QAAQ,QAAQ,CAAC;AAAA,YACnB;AAAA,IACD,MAAM,KAAK,IAAI;AAAA;AAAA,EAGhB,OAAO;AAAA;;;AChBR,IAAM,gBAAgB,CACrB,OACA,YACsB;AAAA,EACtB;AAAA,EACA,YAAY,CAAC,EAAE,IAAI,aAAa,KAAK,gBAAgB,MAAM,EAAE,CAAC;AAC/D;AAKA,IAAM,yBAAoC;AAAA,EACzC,IAAI;AAAA,EACJ,KAAK;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,EAAE,KAAK;AAAA,CAAI;AACZ;AAKA,IAAM,0BAAqC;AAAA,EAC1C,IAAI;AAAA,EACJ,KAAK;AACN;AAEA,IAAM,gCAA2C;AAAA,EAChD,IAAI;AAAA,EACJ,KAAK;AAAA,IACJ;AAAA,IACA;AAAA,EACD,EAAE,KAAK;AAAA,CAAI;AACZ;AAEO,IAAM,kBAAsD;AAAA,EAClE,UAAU,cAAc,YAAY,CAAC,mBAAmB,iBAAiB,CAAC;AAAA,EAC1E,QAAQ;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,MACX,GAAG,cAAc,UAAU;AAAA,QAC1B;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC,EAAE;AAAA,MACH;AAAA,QACC,IAAI;AAAA,QACJ,KAAK,gBAAgB,CAAC,+BAA+B,CAAC;AAAA,MACvD;AAAA,IACD;AAAA,EACD;AAAA,EACA,SAAS,cAAc,WAAW;AAAA,IACjC;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,OAAO,cAAc,SAAS,CAAC,gBAAgB,CAAC;AAAA,EAChD,aAAa,cAAc,eAAe;AAAA,IACzC;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,KAAK,cAAc,OAAO,CAAC,aAAa,CAAC;AAAA,EACzC,iBAAiB,cAAc,mBAAmB;AAAA,IACjD;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,SAAS,cAAc,WAAW,CAAC,aAAa,CAAC;AAAA,EACjD,KAAK;AAAA,IACJ,OAAO;AAAA,IACP,YAAY;AAAA,MACX,GAAG,cAAc,OAAO,CAAC,mBAAmB,CAAC,EAAE;AAAA,MAC/C;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA,EACA,MAAM;AAAA,IACL,OAAO;AAAA,IACP,YAAY;AAAA,MACX,GAAG,cAAc,QAAQ;AAAA,QACxB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAC,EAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AAAA,EACA,eAAe,cAAc,iBAAiB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,cAAc,cAAc,gBAAgB,CAAC,uBAAuB,CAAC;AAAA,EACrE,QAAQ,cAAc,UAAU,CAAC,kBAAkB,CAAC;AAAA,EACpD,OAAO,cAAc,SAAS,CAAC,UAAU,CAAC;AAAA,EAC1C,MAAM,cAAc,QAAQ,CAAC,eAAe,CAAC;AAAA,EAC7C,UAAU,cAAc,YAAY;AAAA,IACnC;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,KAAK,cAAc,OAAO,CAAC,qBAAqB,yBAAyB,CAAC;AAAA,EAC1E,OAAO,cAAc,SAAS,CAAC,iBAAiB,CAAC;AAAA,EACjD,IAAI,cAAc,MAAM;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AAAA,EACD,UAAU,cAAc,YAAY,CAAC,wBAAwB,CAAC;AAAA,EAC9D,UAAU,cAAc,YAAY,CAAC,sBAAsB,CAAC;AAC7D;;;ACrMA,IAAM,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+CAM6B,OAAO,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAMtF,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAQF,OAAO,KAAK,eAAe,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAGjE,IAAM,eAAe;AAAA;AAAA;AAAA;AAAA,sBAIC,OAAO,KAAK,SAAS,EAAE,KAAK,EAAE,KAAK,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAe7D,IAAM,eAAc,CAAC,UACpB,OAAO,OAAO,iBAAiB,KAAK;AAErC,IAAM,mBAAmB,CACxB,QACA,MACA,SACI;AAAA,EACJ,IAAI,SAAS,YAAY,SAAS,MAAM;AAAA,IACvC,OAAO,OAAO;AAAA,IAEd;AAAA,EACD;AAAA,EACA,IAAI,SAAS,UAAU,SAAS,kBAAkB;AAAA,IACjD,OAAO,cAAc,KAAK,MAAM;AAAA,IAEhC;AAAA,EACD;AAAA,EACA,IAAI,SAAS;AAAA,IAAY;AAAA,EACzB,MAAM,OAAO,KAAK,MAAM,KAAK;AAAA,EAC7B,OAAO,SAAS,KACd,MAAM,GAAG,EACT,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,CAAC,UAAU,MAAM,SAAS,CAAC;AAAA;AAGrC,IAAM,mBAAmB,CAAC,SAAmB;AAAA,EAC5C,MAAM,SAAsB;AAAA,IAC3B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,EACP;AAAA,EACA,MAAM,OAAO,CAAC,GAAG,IAAI;AAAA,EACrB,OAAO,KAAK,SAAS,GAAG;AAAA,IACvB,iBAAiB,QAAQ,MAAM,KAAK,MAAM,CAAC;AAAA,EAC5C;AAAA,EAEA,OAAO;AAAA;AAWR,IAAM,sBAAsB,CAC3B,QACA,MACA,aACA,SACI;AAAA,EACJ,IAAI,SAAS;AAAA,IAAW;AAAA,EACxB,IAAI,SAAS,YAAY,SAAS,MAAM;AAAA,IACvC,OAAO,OAAO;AAAA,IAEd;AAAA,EACD;AAAA,EACA,IAAI,SAAS,UAAU,SAAS,kBAAkB;AAAA,IACjD,OAAO,cAAc,KAAK,MAAM;AAAA,IAEhC;AAAA,EACD;AAAA,EACA,IAAI,SAAS,YAAY;AAAA,IACxB,OAAO,SAAS;AAAA,IAEhB;AAAA,EACD;AAAA,EACA,IAAI,CAAC,KAAK,WAAW,IAAI;AAAA,IAAG,YAAY,KAAK,IAAI;AAAA;AAGlD,IAAM,kBAAkB,CAAC,SAAmB;AAAA,EAC3C,MAAM,SAAqB;AAAA,IAC1B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACT;AAAA,EACA,MAAM,OAAO,CAAC,GAAG,IAAI;AAAA,EACrB,MAAM,cAAwB,CAAC;AAAA,EAC/B,OAAO,KAAK,SAAS,GAAG;AAAA,IACvB,oBAAoB,QAAQ,MAAM,aAAa,KAAK,MAAM,CAAC;AAAA,EAC5D;AAAA,EACA,OAAO,QAAQ,QAAQ;AAAA,EACvB,OAAO,SAAS;AAAA,EAChB,OAAO,OAAO;AAAA,EAEd,OAAO;AAAA;AAGR,IAAM,MAAM,CAAC,SAAiB,UAAkB;AAAA,EAC/C,QAAQ,OAAO,MAAM,UAAU;AAAA;AAAA,CAAa;AAAA,EAC5C,QAAQ,OAAO,MAAM,KAAK;AAAA,EAC1B,QAAQ,KAAK,CAAC;AAAA;AAGf,IAAM,aAAa,OAAO,SAAmB;AAAA,EAC5C,QAAQ,QAAQ,aAAa,SAAS,iBAAiB,IAAI;AAAA,EAC3D,IAAI,MAAM;AAAA,IACT,QAAQ,OAAO,MAAM,aAAa;AAAA,IAElC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,eAAe,QAAQ,IAAI;AAAA,EAC5C,IAAI,aAAa,aAAa,SAAS,WAAW,GAAG;AAAA,IACpD,IAAI,qDAAqD,aAAa;AAAA,IAEtE;AAAA,EACD;AAAA,EACA,MAAM,UACL,QAAQ,OAAO,CAAC,UAAU,EAAE,SAAS,gBAAgB,KAAK,CAAC;AAAA,EAC5D,IAAI,QAAQ,SAAS,GAAG;AAAA,IACvB,IAAI,qBAAqB,QAAQ,KAAK,IAAI,KAAK,aAAa;AAAA,IAE5D;AAAA,EACD;AAAA,EACA,MAAM,iBAAiB,QAAQ,OAAO,YAAW;AAAA,EACjD,MAAM,SAAS,MAAM,cAAc;AAAA,IAClC,QAAQ;AAAA,IACR,aAAa;AAAA,EACd,CAAC;AAAA,EACD,QAAQ,OAAO,MACd;AAAA,EAAK,OAAO,QAAQ,gCAAgC,OAAO,QAAQ;AAAA,CACpE;AAAA;AAGD,IAAM,mBAAmB,OAAO,SAAmB;AAAA,EAClD,QAAQ,QAAQ,aAAa,MAAM,MAAM,WAAW,gBAAgB,IAAI;AAAA,EACxE,IAAI,MAAM;AAAA,IACT,QAAQ,OAAO,MAAM,YAAY;AAAA,IAEjC;AAAA,EACD;AAAA,EACA,IAAI,WAAW,WAAW;AAAA,IACzB,IAAI,sBAAsB,YAAY;AAAA,IAEtC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,UAAU;AAAA,EAC3B,IAAI,aAAa,WAAW;AAAA,IAC3B,IAAI,mBAAmB,WAAW,YAAY;AAAA,IAE9C;AAAA,EACD;AAAA,EACA,IAAI,SAAS,WAAW;AAAA,IACvB,IAAI,yBAAyB,YAAY;AAAA,IAEzC;AAAA,EACD;AAAA,EACA,MAAM,WAAW,eAAe,QAAQ,IAAI;AAAA,EAC5C,IAAI,aAAa,aAAa,SAAS,WAAW,GAAG;AAAA,IACpD,IAAI,qDAAqD,YAAY;AAAA,IAErE;AAAA,EACD;AAAA,EAEA,QAAQ,OAAO,MAAM,IAAI,mBAAmB;AAAA,CAAQ;AAAA,EACpD,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI;AAAA,EACxC,QAAQ,OAAO,MACd,IAAI,kBAAkB,OAAO,MAAM,mBAAmB,OAAO,WAAW;AAAA,CACzE;AAAA,EACA,MAAM,SAAS,MAAM,UAAU,QAAQ,EAAE,QAAQ,aAAa,SAAS,CAAC;AAAA,EACxE,IAAI,QAAQ;AAAA,IACX,QAAQ,OAAO,MACd,IAAI,oBAAoB,OAAO,sBAAsB,OAAO;AAAA,CAC7D;AAAA,EACD,EAAO;AAAA,IACN,QAAQ,OAAO,MACd,IAAI;AAAA,CACL;AAAA;AAAA;AAIF,IAAM,OAAO,YAAY;AAAA,EACxB,MAAM,OAAO,QAAQ,KAAK,MAAM,CAAC;AAAA,EACjC,MAAM,UAAU,KAAK,MAAM;AAAA,EAC3B,IAAI,YAAY,aAAa,YAAY,UAAU,YAAY,UAAU;AAAA,IACxE,QAAQ,OAAO,MAAM,SAAS;AAAA,IAE9B;AAAA,EACD;AAAA,EACA,IAAI,YAAY,WAAW;AAAA,IAC1B,MAAM,WAAW,IAAI;AAAA,IAErB;AAAA,EACD;AAAA,EACA,IAAI,YAAY,UAAU;AAAA,IACzB,MAAM,iBAAiB,IAAI;AAAA,IAE3B;AAAA,EACD;AAAA,EACA,IAAI,oBAAoB,YAAY,SAAS;AAAA;AAG9C,MAAM,KAAK;",
42
+ "debugId": "F5FC77C8DEF0189164756E2164756E21",
42
43
  "names": []
43
44
  }