@nxgt/janus 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +101 -15
- package/dist/auth/config/janus-config.d.ts +2 -0
- package/dist/auth/config/janus-config.d.ts.map +1 -1
- package/dist/auth/config/resolved-config.d.ts +1 -0
- package/dist/auth/config/resolved-config.d.ts.map +1 -1
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/port/assert-stores.d.ts.map +1 -1
- package/dist/auth/port/memory/sessions.d.ts.map +1 -1
- package/dist/auth/port/types/sessions.d.ts +16 -1
- package/dist/auth/port/types/sessions.d.ts.map +1 -1
- package/dist/auth/port/types/tokens.d.ts +7 -2
- package/dist/auth/port/types/tokens.d.ts.map +1 -1
- package/dist/auth/second-factor/{regenerate-attempts.d.ts → app-code-attempts.d.ts} +13 -10
- package/dist/auth/second-factor/app-code-attempts.d.ts.map +1 -0
- package/dist/auth/sessions/authenticate.d.ts.map +1 -1
- package/dist/auth/sessions/fresh.d.ts +26 -0
- package/dist/auth/sessions/fresh.d.ts.map +1 -0
- package/dist/auth/sessions/standing.d.ts +20 -0
- package/dist/auth/sessions/standing.d.ts.map +1 -0
- package/dist/auth/step-up/codes.d.ts +29 -0
- package/dist/auth/step-up/codes.d.ts.map +1 -0
- package/dist/auth/step-up/flows.d.ts +19 -0
- package/dist/auth/step-up/flows.d.ts.map +1 -0
- package/dist/auth/step-up/open.d.ts +23 -0
- package/dist/auth/step-up/open.d.ts.map +1 -0
- package/dist/auth/step-up/request.d.ts +12 -0
- package/dist/auth/step-up/request.d.ts.map +1 -0
- package/dist/auth/types/index.d.ts +1 -0
- package/dist/auth/types/index.d.ts.map +1 -1
- package/dist/auth/types/janus.d.ts +2 -1
- package/dist/auth/types/janus.d.ts.map +1 -1
- package/dist/auth/types/step-up.d.ts +79 -0
- package/dist/auth/types/step-up.d.ts.map +1 -0
- package/dist/auth/users/any-type-api.d.ts +2 -2
- package/dist/auth/users/any-type-api.d.ts.map +1 -1
- package/dist/auth/users/type-api.d.ts +1 -1
- package/dist/auth/users/type-api.d.ts.map +1 -1
- package/dist/chunks/{index-5e2fw7he.js → index-j2gd8fry.js} +12 -3
- package/dist/chunks/{index-5e2fw7he.js.map → index-j2gd8fry.js.map} +4 -4
- package/dist/chunks/{index-5tm04t5p.js → index-jp2kka6d.js} +2 -2
- package/dist/chunks/{index-6f6wja93.js → index-km7ffctx.js} +2 -2
- package/dist/chunks/{index-4m49cye4.js → index-rd2rddvv.js} +15 -12
- package/dist/chunks/{index-4m49cye4.js.map → index-rd2rddvv.js.map} +3 -3
- package/dist/conformance/cases/outage.d.ts.map +1 -1
- package/dist/conformance/cases/sessions/index.d.ts.map +1 -1
- package/dist/conformance/cases/sessions/reauthentication.d.ts +4 -0
- package/dist/conformance/cases/sessions/reauthentication.d.ts.map +1 -0
- package/dist/conformance/cases/tokens/index.d.ts.map +1 -1
- package/dist/conformance/cases/tokens/kinds.d.ts +4 -0
- package/dist/conformance/cases/tokens/kinds.d.ts.map +1 -0
- package/dist/conformance/index.js +147 -60
- package/dist/conformance/index.js.map +8 -6
- package/dist/errors/janus-error/codes.d.ts +7 -0
- package/dist/errors/janus-error/codes.d.ts.map +1 -1
- package/dist/errors/janus-error/index.d.ts +1 -1
- package/dist/errors/janus-error/index.d.ts.map +1 -1
- package/dist/errors/janus-error/refusals.d.ts +8 -0
- package/dist/errors/janus-error/refusals.d.ts.map +1 -1
- package/dist/errors/janus-error/status.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +175 -18
- package/dist/index.js.map +16 -10
- package/dist/permissions/index.js +3 -3
- package/docs/README.md +1 -0
- package/docs/guide/adapters.md +38 -4
- package/docs/guide/errors.md +1 -0
- package/docs/guide/second-factor.md +22 -16
- package/docs/guide/sessions.md +7 -0
- package/docs/guide/step-up.md +178 -0
- package/docs/guide/users.md +1 -0
- package/docs/guide/vocabulary.md +3 -2
- package/docs/roadmap.md +12 -16
- package/docs/troubleshooting.md +182 -7
- package/package.json +1 -1
- package/dist/auth/second-factor/regenerate-attempts.d.ts.map +0 -1
- /package/dist/chunks/{index-5tm04t5p.js.map → index-jp2kka6d.js.map} +0 -0
- /package/dist/chunks/{index-6f6wja93.js.map → index-km7ffctx.js.map} +0 -0
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/conformance/assert.ts", "../src/conformance/fixtures.ts", "../src/conformance/cases/outage.ts", "../src/conformance/cases/sessions/deletion.ts", "../src/conformance/cases/sessions/extension.ts", "../src/conformance/cases/sessions/inserts.ts", "../src/conformance/cases/sessions/reads.ts", "../src/conformance/cases/sessions/revocation.ts", "../src/conformance/cases/sessions/index.ts", "../src/conformance/cases/tokens/attempts.ts", "../src/conformance/cases/tokens/deletion.ts", "../src/conformance/cases/tokens/inserts.ts", "../src/conformance/cases/tokens/redemption.ts", "../src/conformance/cases/tokens/spending.ts", "../src/conformance/cases/tokens/index.ts", "../src/conformance/cases/users/deletion.ts", "../src/conformance/cases/users/inserts.ts", "../src/conformance/cases/users/listing.ts", "../src/conformance/cases/users/second-factor.ts", "../src/conformance/cases/users/patches.ts", "../src/conformance/cases/users/reads.ts", "../src/conformance/cases/users/versions.ts", "../src/conformance/cases/users/index.ts", "../src/conformance/describe.ts", "../src/conformance/reference.ts", "../src/conformance/relations/fixtures.ts", "../src/conformance/relations/cases/deletion.ts", "../src/conformance/relations/cases/reads.ts", "../src/conformance/relations/cases/traversal.ts", "../src/conformance/relations/cases/writes.ts", "../src/conformance/relations/cases/index.ts", "../src/conformance/relations/cases/outage.ts", "../src/conformance/relations/describe.ts", "../src/conformance/relations/reference.ts"],
|
|
3
|
+
"sources": ["../src/conformance/assert.ts", "../src/conformance/fixtures.ts", "../src/conformance/cases/outage.ts", "../src/conformance/cases/sessions/deletion.ts", "../src/conformance/cases/sessions/extension.ts", "../src/conformance/cases/sessions/inserts.ts", "../src/conformance/cases/sessions/reads.ts", "../src/conformance/cases/sessions/reauthentication.ts", "../src/conformance/cases/sessions/revocation.ts", "../src/conformance/cases/sessions/index.ts", "../src/conformance/cases/tokens/attempts.ts", "../src/conformance/cases/tokens/deletion.ts", "../src/conformance/cases/tokens/inserts.ts", "../src/conformance/cases/tokens/kinds.ts", "../src/conformance/cases/tokens/redemption.ts", "../src/conformance/cases/tokens/spending.ts", "../src/conformance/cases/tokens/index.ts", "../src/conformance/cases/users/deletion.ts", "../src/conformance/cases/users/inserts.ts", "../src/conformance/cases/users/listing.ts", "../src/conformance/cases/users/second-factor.ts", "../src/conformance/cases/users/patches.ts", "../src/conformance/cases/users/reads.ts", "../src/conformance/cases/users/versions.ts", "../src/conformance/cases/users/index.ts", "../src/conformance/describe.ts", "../src/conformance/reference.ts", "../src/conformance/relations/fixtures.ts", "../src/conformance/relations/cases/deletion.ts", "../src/conformance/relations/cases/reads.ts", "../src/conformance/relations/cases/traversal.ts", "../src/conformance/relations/cases/writes.ts", "../src/conformance/relations/cases/index.ts", "../src/conformance/relations/cases/outage.ts", "../src/conformance/relations/describe.ts", "../src/conformance/relations/reference.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"/**\n * The suite's five assertions.\n *\n * **No assertion library, no test framework**: `bun:test` in the dependency\n * graph of a published library is a dependency every consumer installs, and an\n * adapter author on vitest could not run the suite at all. Each throws a plain\n * `Error` whose message names the port method and what it should have answered\n * — the sentence an adapter author reads first.\n */\n\n/** Fails unless `actual` deep-equals `expected`: dates by instant, `1` never `'1'`. */\nexport function equal(actual: unknown, expected: unknown, what: string): void {\n\tconst difference = differ(actual, expected, '');\n\tif (difference !== null) {\n\t\tthrow new Error(\n\t\t\t`${what}\\n at ${difference.path || '(root)'}: expected ${show(difference.expected)}, got ${show(difference.actual)}`,\n\t\t);\n\t}\n}\n\n/** Fails unless `actual` is `null` — not `undefined`, which is a store that forgot to answer. */\nexport function isNull(actual: unknown, what: string): void {\n\tif (actual !== null) {\n\t\tthrow new Error(\n\t\t\t`${what}\\n expected null, got ${actual === undefined ? 'undefined — an absence is null; undefined is a store that forgot to answer' : show(actual)}`,\n\t\t);\n\t}\n}\n\n/** Fails unless `condition` holds. */\nexport function ok(condition: boolean, what: string): void {\n\tif (!condition) throw new Error(what);\n}\n\n/**\n * The rejection of `promise`, or a failure when it resolves.\n *\n * **Settled where it is created**, with `.then(ok, ko)`: a rejection awaited\n * too late is counted unhandled by Bun and fails the case with the very error\n * it was checking — measured in nxgt-data, where a loaded CI runner failed\n * where an idle laptop passed.\n */\nexport function rejects(\n\tpromise: Promise<unknown>,\n\twhat: string,\n): Promise<unknown> {\n\treturn promise.then(\n\t\t(answer) => {\n\t\t\tthrow new Error(`${what}\\n expected a rejection, got ${show(answer)}`);\n\t\t},\n\t\t(error: unknown) => error,\n\t);\n}\n\n/**\n * The `instanceof` probe: a class that is named like this package's but is not\n * this package's class means **two copies of `@nxgt/janus`** are installed —\n * the adapter depends on it instead of peering it. Then `StoreConflict` stops\n * passing through the core, and a login that is taken is answered as an\n * outage.\n *\n * The probe says what breaks; `verify:artifacts` says whether a duplicate is\n * present. Both are needed.\n *\n * `name` is the error's own `name` field, passed rather than read from\n * `cls.name`: a bundler renames a class that collides — `StoreFailure2` in\n * `dist` — and the probe would then never recognise the duplicate.\n */\nexport function isOurs<T>(\n\terror: unknown,\n\tcls: abstract new (...args: never[]) => T,\n\tname: string,\n\twhat: string,\n): asserts error is T {\n\tif (error instanceof cls) return;\n\n\t// Same name, not the same class: the duplicate the probe exists for.\n\tif ((error as { name?: unknown } | null)?.name === name) {\n\t\tthrow new Error(\n\t\t\t`${what}\\n the error is named ${name} but is not @nxgt/janus's ${name}: two copies of @nxgt/janus are installed. The adapter must list it as a peer dependency, never a dependency`,\n\t\t);\n\t}\n\n\tthrow new Error(`${what}\\n expected ${name}, got ${show(error)}`);\n}\n\ninterface Difference {\n\treadonly path: string;\n\treadonly expected: unknown;\n\treadonly actual: unknown;\n}\n\nfunction differ(\n\tactual: unknown,\n\texpected: unknown,\n\tpath: string,\n): Difference | null {\n\tif (expected instanceof Date || actual instanceof Date) {\n\t\treturn actual instanceof Date &&\n\t\t\texpected instanceof Date &&\n\t\t\tactual.getTime() === expected.getTime()\n\t\t\t? null\n\t\t\t: { path, expected, actual };\n\t}\n\n\tif (Array.isArray(expected) || Array.isArray(actual)) {\n\t\tif (!Array.isArray(expected) || !Array.isArray(actual)) {\n\t\t\treturn { path, expected, actual };\n\t\t}\n\t\tif (expected.length !== actual.length) {\n\t\t\treturn {\n\t\t\t\tpath: `${path}.length`,\n\t\t\t\texpected: expected.length,\n\t\t\t\tactual: actual.length,\n\t\t\t};\n\t\t}\n\t\tfor (let i = 0; i < expected.length; i += 1) {\n\t\t\tconst inner = differ(actual[i], expected[i], `${path}[${i}]`);\n\t\t\tif (inner !== null) return inner;\n\t\t}\n\t\treturn null;\n\t}\n\n\tif (\n\t\ttypeof expected === 'object' &&\n\t\texpected !== null &&\n\t\ttypeof actual === 'object' &&\n\t\tactual !== null\n\t) {\n\t\tconst keys = new Set([...Object.keys(expected), ...Object.keys(actual)]);\n\t\tfor (const key of keys) {\n\t\t\tconst inner = differ(\n\t\t\t\t(actual as Record<string, unknown>)[key],\n\t\t\t\t(expected as Record<string, unknown>)[key],\n\t\t\t\tpath === '' ? key : `${path}.${key}`,\n\t\t\t);\n\t\t\tif (inner !== null) return inner;\n\t\t}\n\t\treturn null;\n\t}\n\n\treturn Object.is(actual, expected) ? null : { path, expected, actual };\n}\n\nfunction show(value: unknown): string {\n\tif (value instanceof Error) return `${value.name}: ${value.message}`;\n\tif (value instanceof Date) return value.toISOString();\n\tif (value === undefined) return 'undefined';\n\tif (typeof value === 'string') return JSON.stringify(value);\n\ttry {\n\t\tconst json = JSON.stringify(value);\n\t\treturn json.length > 200 ? `${json.slice(0, 200)}…` : json;\n\t} catch {\n\t\treturn String(value);\n\t}\n}\n",
|
|
6
6
|
"import type {\n\tSessionRecord,\n\tTokenRecord,\n\tUserRecord,\n} from '../auth/port/types';\nimport { mintId } from '../ids/id';\n\n/**\n * Records the cases write. Every id is minted, so no two cases — and no two\n * records of one case — ever collide by accident; every collision a case\n * tests is one it wrote on purpose.\n */\n\nexport const at = (iso: string): Date => new Date(iso);\n\n/** A fresh login, so each record holds its own unless a case says otherwise. */\nconst fresh = () => `user-${mintId()}@example.test`;\n\nexport function userRecord(overrides: Partial<UserRecord> = {}): UserRecord {\n\tconst email = fresh();\n\treturn {\n\t\tid: mintId(),\n\t\ttype: 'user',\n\t\tschemaVersion: '1',\n\t\tactive: true,\n\t\tfields: { email, name: { first: 'Ada', last: 'Lovelace' } },\n\t\tlogins: [email],\n\t\tpassword: {\n\t\t\thash: '$scrypt$ln=17,r=8,p=1$c2FsdA==$a2V5',\n\t\t\tupdatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\t},\n\t\tsecondFactor: null,\n\t\temailVerifiedAt: null,\n\t\tversion: 0,\n\t\tcreatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\tupdatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\t...overrides,\n\t};\n}\n\nexport function sessionRecord(\n\toverrides: Partial<SessionRecord> = {},\n): SessionRecord {\n\treturn {\n\t\tid: mintId(),\n\t\ttokenHash: hexOf(mintId()),\n\t\tuserId: mintId(),\n\t\tauthenticatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\texpiresAt: at('2099-01-01T00:00:00.000Z'),\n\t\trevokedAt: null,\n\t\tcreatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\t...overrides,\n\t};\n}\n\nexport function tokenRecord(overrides: Partial<TokenRecord> = {}): TokenRecord {\n\treturn {\n\t\ttokenHash: hexOf(mintId()),\n\t\tkind: 'resetPassword',\n\t\tuserId: mintId(),\n\t\taddress: fresh(),\n\t\tcodeHash: null,\n\t\tattempts: 0,\n\t\texpiresAt: at('2099-01-01T00:00:00.000Z'),\n\t\tspentAt: null,\n\t\tcreatedAt: at('2026-01-01T00:00:00.000Z'),\n\t\t...overrides,\n\t};\n}\n\n/** A 64-character hex string, shaped like a `sha256`, unique per call. */\nfunction hexOf(seed: string): string {\n\treturn seed.replace(/-/g, '').padEnd(64, '0').slice(0, 64);\n}\n",
|
|
7
|
-
"import type { JanusStores } from '../../auth/port/types';\nimport { JanusError, StoreFailure } from '../../errors/janus-error';\nimport { isOurs, ok, rejects } from '../assert';\nimport { at, sessionRecord, tokenRecord, userRecord } from '../fixtures';\nimport type { CaseContext, ConformanceCase, PortMethod } from '../types';\n\n/**\n * **The invariant, as cases.** For each of the
|
|
7
|
+
"import type { JanusStores } from '../../auth/port/types';\nimport { JanusError, StoreFailure } from '../../errors/janus-error';\nimport { isOurs, ok, rejects } from '../assert';\nimport { at, sessionRecord, tokenRecord, userRecord } from '../fixtures';\nimport type { CaseContext, ConformanceCase, PortMethod } from '../types';\n\n/**\n * **The invariant, as cases.** For each of the fourteen methods whose honest\n * answer can be \"nothing\" — `null`, `false`, `0`, an empty page — a store that\n * cannot answer must **reject**, and the rejection must not be `NOT_FOUND`.\n *\n * Every case seeds a record first, so a store that swallows its failure into an\n * absence answers something *false* rather than something merely empty.\n *\n * The rejection is either `@nxgt/janus`'s own `StoreFailure` — the `instanceof`\n * probe, which fails on a second copy of the package — or an error that is no\n * `JanusError` at all, which the core wraps into `STORE_FAILED` itself.\n */\nfunction outage<S extends keyof JanusStores>(\n\tslot: S,\n\tmethod: PortMethod<S>,\n\tcall: (context: CaseContext) => Promise<unknown>,\n\tseed: (context: CaseContext) => Promise<void>,\n): ConformanceCase {\n\treturn {\n\t\tid: `outage.${method}`,\n\t\tgroup: 'outage',\n\t\tname: `${slot}.${method} rejects when the store cannot answer — never null, false, 0 or an empty page`,\n\t\tneeds: 'faults',\n\t\tasync run(context) {\n\t\t\tawait seed(context);\n\t\t\tawait context.faults?.fail(slot, method);\n\n\t\t\tconst error = await rejects(\n\t\t\t\tcall(context),\n\t\t\t\t`${slot}.${method} under an outage should reject: answering an absence turns an outage into a silent lockout`,\n\t\t\t);\n\n\t\t\tif (\n\t\t\t\terror instanceof JanusError ||\n\t\t\t\t(error as { name?: unknown })?.name === 'StoreFailure'\n\t\t\t) {\n\t\t\t\tisOurs(\n\t\t\t\t\terror,\n\t\t\t\t\tStoreFailure,\n\t\t\t\t\t'StoreFailure',\n\t\t\t\t\t`${slot}.${method} under an outage`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tok(\n\t\t\t\t(error as { code?: unknown } | null)?.code !== 'NOT_FOUND',\n\t\t\t\t`${slot}.${method} under an outage rejected with NOT_FOUND: an outage is never an absence`,\n\t\t\t);\n\t\t},\n\t};\n}\n\nconst user = userRecord();\nconst session = sessionRecord({ userId: user.id });\nconst token = tokenRecord({ userId: user.id });\nconst now = at('2026-02-01T00:00:00.000Z');\n\n/** Each case writes the same three records, fresh stores every time. */\nconst seed = async ({ stores }: CaseContext) => {\n\tawait stores.users.insertUser(user);\n\tawait stores.sessions.insertSession(session);\n\tawait stores.tokens.insertToken(token);\n};\n\nexport const outageCases: readonly ConformanceCase[] = [\n\toutage(\n\t\t'users',\n\t\t'findUser',\n\t\t({ stores }) => stores.users.findUser(user.id),\n\t\tseed,\n\t),\n\toutage(\n\t\t'users',\n\t\t'findUserByLogin',\n\t\t({ stores }) =>\n\t\t\tstores.users.findUserByLogin(user.type, user.logins[0] ?? ''),\n\t\tseed,\n\t),\n\toutage(\n\t\t'users',\n\t\t'listUsers',\n\t\t({ stores }) =>\n\t\t\tstores.users.listUsers({ type: user.type, after: null, limit: 10 }),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'findSessionByTokenHash',\n\t\t({ stores }) => stores.sessions.findSessionByTokenHash(session.tokenHash),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'extendSession',\n\t\t({ stores }) =>\n\t\t\tstores.sessions.extendSession(session.id, at('2099-06-01T00:00:00.000Z')),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'reauthenticateSession',\n\t\t({ stores }) => stores.sessions.reauthenticateSession(session.id, now),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'revokeSession',\n\t\t({ stores }) => stores.sessions.revokeSession(session.id, now),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'revokeUserSessions',\n\t\t({ stores }) => stores.sessions.revokeUserSessions(user.id, now),\n\t\tseed,\n\t),\n\toutage(\n\t\t'tokens',\n\t\t'consumeToken',\n\t\t({ stores }) =>\n\t\t\tstores.tokens.consumeToken(token.tokenHash, 'resetPassword', now),\n\t\tseed,\n\t),\n\toutage(\n\t\t'tokens',\n\t\t'countAttempt',\n\t\t({ stores }) =>\n\t\t\tstores.tokens.countAttempt(token.tokenHash, 'resetPassword'),\n\t\tseed,\n\t),\n\toutage(\n\t\t'tokens',\n\t\t'spendUserTokens',\n\t\t({ stores }) =>\n\t\t\tstores.tokens.spendUserTokens(user.id, 'resetPassword', now),\n\t\tseed,\n\t),\n\toutage(\n\t\t'users',\n\t\t'deleteUser',\n\t\t({ stores }) => stores.users.deleteUser(user.id),\n\t\tseed,\n\t),\n\toutage(\n\t\t'sessions',\n\t\t'deleteUserSessions',\n\t\t({ stores }) => stores.sessions.deleteUserSessions(user.id),\n\t\tseed,\n\t),\n\toutage(\n\t\t'tokens',\n\t\t'deleteUserTokens',\n\t\t({ stores }) => stores.tokens.deleteUserTokens(user.id),\n\t\tseed,\n\t),\n];\n",
|
|
8
8
|
"import { mintId } from '../../../ids/id';\nimport { equal, isNull, ok } from '../../assert';\nimport { at, sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What a deletion of sessions removes — a user’s, or the lapsed ones — and what it leaves. */\nexport const sessionDeletionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.deleteUser',\n\t\tgroup,\n\t\tname: 'deletes every session of one user — standing, revoked or lapsed — and counts them',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst lapsed = sessionRecord({\n\t\t\t\tuserId,\n\t\t\t\texpiresAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tconst records = [\n\t\t\t\tsessionRecord({ userId }),\n\t\t\t\tsessionRecord({ userId, revokedAt: at('2026-01-02T00:00:00.000Z') }),\n\t\t\t\tlapsed,\n\t\t\t];\n\t\t\tconst stranger = sessionRecord();\n\t\t\tfor (const record of [...records, stranger]) {\n\t\t\t\tawait stores.sessions.insertSession(record);\n\t\t\t}\n\n\t\t\t// The lapsed one may be gone already: a store with its own expiry —\n\t\t\t// a Redis key TTL — drops it as soon as it lapses, which the port\n\t\t\t// allows. Whether it is still there is what the store answers for it.\n\t\t\tconst lapsedHeld =\n\t\t\t\t(await stores.sessions.findSessionByTokenHash(lapsed.tokenHash)) !==\n\t\t\t\tnull;\n\t\t\tconst expected = lapsedHeld ? 3 : 2;\n\t\t\tconst deleted = await stores.sessions.deleteUserSessions(userId);\n\t\t\tok(\n\t\t\t\tdeleted === expected,\n\t\t\t\t`deleteUserSessions: how many it deleted, revoked and lapsed ones included — ${String(expected)}, as the lapsed one is ${lapsedHeld ? 'still held' : 'already expired'}; got ${String(deleted)}`,\n\t\t\t);\n\t\t\tfor (const record of records) {\n\t\t\t\tisNull(\n\t\t\t\t\tawait stores.sessions.findSessionByTokenHash(record.tokenHash),\n\t\t\t\t\t'findSessionByTokenHash after deleteUserSessions',\n\t\t\t\t);\n\t\t\t}\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(stranger.tokenHash),\n\t\t\t\tstranger,\n\t\t\t\t'deleteUserSessions should not touch another user',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.deleteUserSessions(userId),\n\t\t\t\t0,\n\t\t\t\t'deleteUserSessions for a user with none answers 0, not a failure',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'sessions.deleteExpired',\n\t\tgroup,\n\t\tname: 'deletes sessions whose expiry is at or before the instant, and only those',\n\t\tneeds: 'deleteExpiredSessions',\n\t\tasync run({ stores }) {\n\t\t\tconst collect = stores.sessions.deleteExpiredSessions;\n\t\t\tok(collect !== undefined, 'deleteExpiredSessions should be present');\n\t\t\tconst lapsed = sessionRecord({\n\t\t\t\texpiresAt: at('2026-01-10T00:00:00.000Z'),\n\t\t\t});\n\t\t\tconst living = sessionRecord({\n\t\t\t\texpiresAt: at('2026-01-10T00:00:00.001Z'),\n\t\t\t});\n\t\t\tawait stores.sessions.insertSession(lapsed);\n\t\t\tawait stores.sessions.insertSession(living);\n\n\t\t\tequal(\n\t\t\t\tawait collect?.call(stores.sessions, at('2026-01-10T00:00:00.000Z')),\n\t\t\t\t1,\n\t\t\t\t'deleteExpiredSessions: how many it deleted',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(lapsed.tokenHash),\n\t\t\t\t'findSessionByTokenHash after deleteExpiredSessions',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(living.tokenHash),\n\t\t\t\tliving,\n\t\t\t\t'deleteExpiredSessions should keep a session one millisecond short of lapsing',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
9
9
|
"import { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What an extension moves, and the revoked session it never brings back. */\nexport const sessionExtensionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.extend',\n\t\tgroup,\n\t\tname: 'extends a standing session, and never brings back a revoked one',\n\t\tasync run({ stores }) {\n\t\t\tconst standing = sessionRecord();\n\t\t\tconst revoked = sessionRecord({\n\t\t\t\trevokedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tawait stores.sessions.insertSession(standing);\n\t\t\tawait stores.sessions.insertSession(revoked);\n\t\t\tconst later = at('2099-06-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.extendSession(standing.id, later),\n\t\t\t\t{ ...standing, expiresAt: later },\n\t\t\t\t'extendSession should answer the session with its new expiresAt',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.extendSession(revoked.id, later),\n\t\t\t\t'extendSession on a revoked session — an extension racing a revocation must never bring it back',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(revoked.tokenHash),\n\t\t\t\trevoked,\n\t\t\t\t'extendSession refused on a revoked session should have written nothing',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.extendSession(mintId(), later),\n\t\t\t\t'extendSession on an unknown session',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
10
10
|
"import { equal } from '../../assert';\nimport { sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What an insert writes, and what retrying it writes: nothing. */\nexport const sessionInsertCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.idempotentInsert',\n\t\tgroup,\n\t\tname: 'is idempotent under retry: inserting an existing session id writes nothing',\n\t\tasync run({ stores }) {\n\t\t\tconst record = sessionRecord();\n\t\t\tawait stores.sessions.insertSession(record);\n\t\t\tawait stores.sessions.insertSession({\n\t\t\t\t...record,\n\t\t\t\texpiresAt: new Date('2099-06-01T00:00:00.000Z'),\n\t\t\t});\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(record.tokenHash),\n\t\t\t\trecord,\n\t\t\t\t'insertSession retried with the same id should write nothing',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
11
11
|
"import { equal, isNull } from '../../assert';\nimport { at, sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What a lookup by token hash answers: a stored session verbatim, never a changed one. */\nexport const sessionReadCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.verbatim',\n\t\tgroup,\n\t\tname: 'answers a stored session verbatim — revoked or lapsed — or null once lapsed, and never a changed record',\n\t\tasync run({ stores }) {\n\t\t\tconst standing = sessionRecord();\n\t\t\tconst revoked = sessionRecord({\n\t\t\t\trevokedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tconst lapsed = sessionRecord({\n\t\t\t\texpiresAt: at('2020-01-01T00:00:00.000Z'),\n\t\t\t});\n\t\t\tfor (const record of [standing, revoked, lapsed]) {\n\t\t\t\tawait stores.sessions.insertSession(record);\n\t\t\t}\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(standing.tokenHash),\n\t\t\t\tstanding,\n\t\t\t\t'findSessionByTokenHash for a standing session',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(revoked.tokenHash),\n\t\t\t\trevoked,\n\t\t\t\t'findSessionByTokenHash for a revoked session should answer it verbatim — revocation is the core’s to read',\n\t\t\t);\n\n\t\t\t// A TTL index may already have dropped it: null is allowed, a changed\n\t\t\t// record is not.\n\t\t\tconst found = await stores.sessions.findSessionByTokenHash(\n\t\t\t\tlapsed.tokenHash,\n\t\t\t);\n\t\t\tif (found !== null) {\n\t\t\t\tequal(\n\t\t\t\t\tfound,\n\t\t\t\t\tlapsed,\n\t\t\t\t\t'findSessionByTokenHash for a lapsed session should answer it verbatim, or null',\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash('f'.repeat(64)),\n\t\t\t\t'findSessionByTokenHash for an unknown hash',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
12
|
+
"import { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What a step-up moves on a session, and the revoked session it never brings back. */\nexport const sessionReauthenticationCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.reauthenticate',\n\t\tgroup,\n\t\tname: 'moves authenticatedAt on a standing session, and never brings back a revoked one',\n\t\tasync run({ stores }) {\n\t\t\tconst standing = sessionRecord();\n\t\t\tconst revoked = sessionRecord({\n\t\t\t\trevokedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tawait stores.sessions.insertSession(standing);\n\t\t\tawait stores.sessions.insertSession(revoked);\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.reauthenticateSession(standing.id, now),\n\t\t\t\t{ ...standing, authenticatedAt: now },\n\t\t\t\t'reauthenticateSession should answer the session with its new authenticatedAt, and every other field as it was',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(standing.tokenHash),\n\t\t\t\t{ ...standing, authenticatedAt: now },\n\t\t\t\t'reauthenticateSession should have written authenticatedAt, and read back the same',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.reauthenticateSession(revoked.id, now),\n\t\t\t\t'reauthenticateSession on a revoked session — a confirmation racing a revocation must never bring it back',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(revoked.tokenHash),\n\t\t\t\trevoked,\n\t\t\t\t'reauthenticateSession refused on a revoked session should have written nothing',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.sessions.reauthenticateSession(mintId(), now),\n\t\t\t\t'reauthenticateSession on an unknown session',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'sessions.reauthenticateRace',\n\t\tgroup,\n\t\tname: 'never brings back a session whose revocation races its confirmation',\n\t\tasync run({ stores }) {\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\t\t\tfor (let round = 0; round < 10; round += 1) {\n\t\t\t\tconst record = sessionRecord();\n\t\t\t\tawait stores.sessions.insertSession(record);\n\n\t\t\t\tawait Promise.all([\n\t\t\t\t\tstores.sessions.reauthenticateSession(record.id, now),\n\t\t\t\t\tstores.sessions.revokeSession(record.id, now),\n\t\t\t\t]);\n\n\t\t\t\tequal(\n\t\t\t\t\t(await stores.sessions.findSessionByTokenHash(record.tokenHash))\n\t\t\t\t\t\t?.revokedAt,\n\t\t\t\t\tnow,\n\t\t\t\t\t'reauthenticateSession racing revokeSession: the session should stay revoked — one conditional write, never a read then a write',\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n];\n",
|
|
12
13
|
"import { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, sessionRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'sessions';\n\n/** What a revocation marks — one session, or every one of a user — and what it keeps. */\nexport const sessionRevocationCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'sessions.revoke',\n\t\tgroup,\n\t\tname: 'revokes once and keeps the first revokedAt; answers false only when there is no session',\n\t\tasync run({ stores }) {\n\t\t\tconst record = sessionRecord();\n\t\t\tawait stores.sessions.insertSession(record);\n\t\t\tconst first = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeSession(record.id, first),\n\t\t\t\ttrue,\n\t\t\t\t'revokeSession on a standing session',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeSession(\n\t\t\t\t\trecord.id,\n\t\t\t\t\tat('2026-03-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\ttrue,\n\t\t\t\t'revokeSession on a revoked session still answers true: the session exists',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.sessions.findSessionByTokenHash(record.tokenHash))\n\t\t\t\t\t?.revokedAt,\n\t\t\t\tfirst,\n\t\t\t\t'revokeSession twice should keep the first revokedAt',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeSession(mintId(), first),\n\t\t\t\tfalse,\n\t\t\t\t'revokeSession on an unknown session',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'sessions.revokeUser',\n\t\tgroup,\n\t\tname: 'revokes every standing session of one user but the one excepted, and counts only what it revoked',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst current = sessionRecord({ userId });\n\t\t\tconst other = sessionRecord({ userId });\n\t\t\tconst already = sessionRecord({\n\t\t\t\tuserId,\n\t\t\t\trevokedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tconst stranger = sessionRecord();\n\t\t\tfor (const record of [current, other, already, stranger]) {\n\t\t\t\tawait stores.sessions.insertSession(record);\n\t\t\t}\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeUserSessions(userId, now, current.id),\n\t\t\t\t1,\n\t\t\t\t'revokeUserSessions with except: how many this call revoked',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\t(await stores.sessions.findSessionByTokenHash(current.tokenHash))\n\t\t\t\t\t?.revokedAt ?? null,\n\t\t\t\t'revokeUserSessions should spare the excepted session',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.sessions.findSessionByTokenHash(already.tokenHash))\n\t\t\t\t\t?.revokedAt,\n\t\t\t\talready.revokedAt,\n\t\t\t\t'revokeUserSessions should keep an earlier revokedAt',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.findSessionByTokenHash(stranger.tokenHash),\n\t\t\t\tstranger,\n\t\t\t\t'revokeUserSessions should not touch another user',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeUserSessions(userId, now),\n\t\t\t\t1,\n\t\t\t\t'revokeUserSessions without except',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.sessions.revokeUserSessions(mintId(), now),\n\t\t\t\t0,\n\t\t\t\t'revokeUserSessions for a user with none answers 0, not a failure',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
13
|
-
"import type { ConformanceCase } from '../../types';\nimport { sessionDeletionCases } from './deletion';\nimport { sessionExtensionCases } from './extension';\nimport { sessionInsertCases } from './inserts';\nimport { sessionReadCases } from './reads';\nimport { sessionRevocationCases } from './revocation';\n\n/** Every case of the session store, in the order they are described. */\nexport const sessionStoreCases: readonly ConformanceCase[] = [\n\t...sessionReadCases,\n\t...sessionInsertCases,\n\t...sessionExtensionCases,\n\t...sessionRevocationCases,\n\t...sessionDeletionCases,\n];\n",
|
|
14
|
+
"import type { ConformanceCase } from '../../types';\nimport { sessionDeletionCases } from './deletion';\nimport { sessionExtensionCases } from './extension';\nimport { sessionInsertCases } from './inserts';\nimport { sessionReadCases } from './reads';\nimport { sessionReauthenticationCases } from './reauthentication';\nimport { sessionRevocationCases } from './revocation';\n\n/** Every case of the session store, in the order they are described. */\nexport const sessionStoreCases: readonly ConformanceCase[] = [\n\t...sessionReadCases,\n\t...sessionInsertCases,\n\t...sessionExtensionCases,\n\t...sessionReauthenticationCases,\n\t...sessionRevocationCases,\n\t...sessionDeletionCases,\n];\n",
|
|
14
15
|
"import { equal, isNull } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/**\n * How an attempt at a code is counted: once per call, never on a spent token,\n * and never lost to a race with the redemption.\n */\nexport const tokenAttemptCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.countAttempt',\n\t\tgroup,\n\t\tname: 'counts an attempt at a code, and answers the token as it is after the call',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({\n\t\t\t\tkind: 'signInCode',\n\t\t\t\tcodeHash: 'c'.repeat(64),\n\t\t\t});\n\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.countAttempt(record.tokenHash, 'signInCode'),\n\t\t\t\t{ ...record, attempts: 1 },\n\t\t\t\t'countAttempt the first time should answer the token with attempts 1, codeHash as written',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.countAttempt(record.tokenHash, 'signInCode'),\n\t\t\t\t{ ...record, attempts: 2 },\n\t\t\t\t'countAttempt the second time should answer attempts 2',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'signInCode',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\t{ ...record, attempts: 2 },\n\t\t\t\t'consumeToken should answer the attempts counted, and spend the token',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.countAttemptConcurrency',\n\t\tgroup,\n\t\tname: 'gives twenty concurrent attempts twenty distinct counts — one conditional write, never a read then a write',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({ kind: 'secondFactor' });\n\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\tconst answers = await Promise.all(\n\t\t\t\tArray.from({ length: 20 }, () =>\n\t\t\t\t\tstores.tokens.countAttempt(record.tokenHash, 'secondFactor'),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tequal(\n\t\t\t\tanswers\n\t\t\t\t\t.map((answer) => answer?.attempts)\n\t\t\t\t\t.sort((a, b) => (a ?? 0) - (b ?? 0)),\n\t\t\t\tArray.from({ length: 20 }, (_, index) => index + 1),\n\t\t\t\t'countAttempt: twenty concurrent calls should answer 1 to 20, each once — two guesses reading one count is a guess for free',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.countAttemptRace',\n\t\tgroup,\n\t\tname: 'never counts an attempt once the token is spent, when attempts and a redemption race',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({ kind: 'signInCode' });\n\t\t\tawait stores.tokens.insertToken(record);\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\t\t\tconst count = () =>\n\t\t\t\tstores.tokens.countAttempt(record.tokenHash, 'signInCode');\n\n\t\t\tconst answers = await Promise.all([\n\t\t\t\t...Array.from({ length: 10 }, count),\n\t\t\t\tstores.tokens.consumeToken(record.tokenHash, 'signInCode', now),\n\t\t\t\t...Array.from({ length: 10 }, count),\n\t\t\t]);\n\t\t\tconst final = await stores.tokens.consumeToken(\n\t\t\t\trecord.tokenHash,\n\t\t\t\t'signInCode',\n\t\t\t\tnow,\n\t\t\t);\n\t\t\tif (final === null) {\n\t\t\t\tthrow new Error('consumeToken after the race should answer the token');\n\t\t\t}\n\t\t\tconst counted = answers\n\t\t\t\t.slice(0, 10)\n\t\t\t\t.concat(answers.slice(11))\n\t\t\t\t.filter((answer) => answer !== null && answer.spentAt === null)\n\t\t\t\t.map((answer) => answer?.attempts ?? 0)\n\t\t\t\t.sort((a, b) => a - b);\n\n\t\t\tequal(\n\t\t\t\tcounted,\n\t\t\t\tArray.from({ length: final.attempts }, (_, index) => index + 1),\n\t\t\t\t'countAttempt: the attempts answered unspent should be 1 to the final count, each once',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tanswers\n\t\t\t\t\t.filter((answer) => answer !== null && answer.spentAt !== null)\n\t\t\t\t\t.every((answer) => answer?.attempts === final.attempts),\n\t\t\t\ttrue,\n\t\t\t\t'countAttempt: every answer after the spend should carry the final count — an attempt counted on a spent token is one the limit never saw',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.countAttemptSpent',\n\t\tgroup,\n\t\tname: 'does not count an attempt at a spent token, nor at a token of another kind, nor at none',\n\t\tasync run({ stores }) {\n\t\t\tconst spent = tokenRecord({\n\t\t\t\tkind: 'signInCode',\n\t\t\t\tattempts: 3,\n\t\t\t\tspentAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tconst other = tokenRecord({ kind: 'resetPassword' });\n\t\t\tawait stores.tokens.insertToken(spent);\n\t\t\tawait stores.tokens.insertToken(other);\n\n\t\t\tfor (const call of ['first', 'second']) {\n\t\t\t\tequal(\n\t\t\t\t\tawait stores.tokens.countAttempt(spent.tokenHash, 'signInCode'),\n\t\t\t\t\tspent,\n\t\t\t\t\t`countAttempt on a spent token, the ${call} time, should answer it as it is: attempts still 3, nothing written`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.countAttempt(other.tokenHash, 'signInCode'),\n\t\t\t\t'countAttempt for a resetPassword token counted as signInCode',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\tother.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\tother,\n\t\t\t\t'countAttempt of the other kind should not have counted: attempts still 0',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.countAttempt('0'.repeat(64), 'signInCode'),\n\t\t\t\t'countAttempt for an unknown hash',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
15
16
|
"import { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/** What a deletion of a user's tokens removes, and what it leaves. */\nexport const tokenDeletionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.deleteUser',\n\t\tgroup,\n\t\tname: 'deletes every token of one user, spent or not, of either kind, and counts them',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst records = [\n\t\t\t\ttokenRecord({ userId }),\n\t\t\t\ttokenRecord({ userId, kind: 'verifyEmail' }),\n\t\t\t\ttokenRecord({ userId, spentAt: at('2026-01-02T00:00:00.000Z') }),\n\t\t\t];\n\t\t\tconst stranger = tokenRecord();\n\t\t\tfor (const record of [...records, stranger]) {\n\t\t\t\tawait stores.tokens.insertToken(record);\n\t\t\t}\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.deleteUserTokens(userId),\n\t\t\t\t3,\n\t\t\t\t'deleteUserTokens: how many it deleted',\n\t\t\t);\n\t\t\tfor (const record of records) {\n\t\t\t\tisNull(\n\t\t\t\t\tawait stores.tokens.consumeToken(record.tokenHash, record.kind, now),\n\t\t\t\t\t'consumeToken after deleteUserTokens',\n\t\t\t\t);\n\t\t\t}\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\tstranger.tokenHash,\n\t\t\t\t\tstranger.kind,\n\t\t\t\t\tnow,\n\t\t\t\t),\n\t\t\t\tstranger,\n\t\t\t\t'deleteUserTokens should not touch another user',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.deleteUserTokens(userId),\n\t\t\t\t0,\n\t\t\t\t'deleteUserTokens for a user with none answers 0, not a failure',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
16
17
|
"import { equal } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/**\n * What a store keeps of an inserted token: an empty address, an expiry it\n * leaves to the core, and the first write under a retry.\n */\nexport const tokenInsertCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.challenge',\n\t\tgroup,\n\t\tname: \"keeps a second-factor challenge, whose address is '' — nothing was sent for it\",\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({ kind: 'secondFactor', address: '' });\n\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.countAttempt(record.tokenHash, 'secondFactor'),\n\t\t\t\t{ ...record, attempts: 1 },\n\t\t\t\t\"countAttempt should answer a challenge with its empty address kept — a store that refuses '' refuses every sign-in with a second factor\",\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'secondFactor',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\t{ ...record, attempts: 1 },\n\t\t\t\t'consumeToken should spend the challenge and answer it as it was',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.lapsed',\n\t\tgroup,\n\t\tname: 'spends a lapsed token all the same: expiry is compared by the core, after the call',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({ expiresAt: at('2020-01-01T00:00:00.000Z') });\n\t\t\tawait stores.tokens.insertToken(record);\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tconst first = await stores.tokens.consumeToken(\n\t\t\t\trecord.tokenHash,\n\t\t\t\t'resetPassword',\n\t\t\t\tnow,\n\t\t\t);\n\t\t\t// A store may have dropped a lapsed token already; if it answers, it\n\t\t\t// answers it unspent, and spends it.\n\t\t\tif (first !== null) {\n\t\t\t\tequal(\n\t\t\t\t\tfirst,\n\t\t\t\t\trecord,\n\t\t\t\t\t'consumeToken on a lapsed token should answer it as it was',\n\t\t\t\t);\n\t\t\t\tequal(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t\t\t'resetPassword',\n\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t)\n\t\t\t\t\t)?.spentAt,\n\t\t\t\t\tnow,\n\t\t\t\t\t'consumeToken should have spent the lapsed token, so it can never be retried',\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.idempotentInsert',\n\t\tgroup,\n\t\tname: 'is idempotent under retry: inserting an existing token hash writes nothing',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord();\n\t\t\tawait stores.tokens.insertToken(record);\n\t\t\tawait stores.tokens.insertToken({\n\t\t\t\t...record,\n\t\t\t\taddress: 'other@example.test',\n\t\t\t});\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\trecord,\n\t\t\t\t'insertToken retried with the same hash should write nothing',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
18
|
+
"import type { TokenKind } from '../../../auth/port/types';\nimport { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/**\n * Every kind the port names. A store that lists them — a column's `CHECK`, a\n * schema's enum — refuses a kind it was not told of, and this is where that\n * shows. A record over the union, so a kind added to the port and not here\n * stops this file compiling.\n */\nconst KINDS = Object.keys({\n\tverifyEmail: true,\n\tresetPassword: true,\n\tsecondFactor: true,\n\tsignInCode: true,\n\tstepUp: true,\n} satisfies Record<TokenKind, true>) as TokenKind[];\n\n/** Each kind stored and redeemed as itself, and the two codes kept apart. */\nexport const tokenKindCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.everyKind',\n\t\tgroup,\n\t\tname: 'stores, counts and spends a token of every kind the port names',\n\t\tasync run({ stores }) {\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\t\t\tfor (const kind of KINDS) {\n\t\t\t\tconst record = tokenRecord({ kind, codeHash: 'c'.repeat(64) });\n\t\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\t\tequal(\n\t\t\t\t\tawait stores.tokens.countAttempt(record.tokenHash, kind),\n\t\t\t\t\t{ ...record, attempts: 1 },\n\t\t\t\t\t`countAttempt on a ${kind} token should answer it with one attempt`,\n\t\t\t\t);\n\t\t\t\tequal(\n\t\t\t\t\tawait stores.tokens.consumeToken(record.tokenHash, kind, now),\n\t\t\t\t\t{ ...record, attempts: 1 },\n\t\t\t\t\t`consumeToken on a ${kind} token should answer it as it was — spentAt null`,\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.stepUpKind',\n\t\tgroup,\n\t\tname: 'keeps a step-up apart from a sign-in code: neither is counted, spent nor answered as the other',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst stepUp = tokenRecord({ userId, kind: 'stepUp' });\n\t\t\tconst signInCode = tokenRecord({ userId, kind: 'signInCode' });\n\t\t\tawait stores.tokens.insertToken(stepUp);\n\t\t\tawait stores.tokens.insertToken(signInCode);\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.countAttempt(stepUp.tokenHash, 'signInCode'),\n\t\t\t\t'countAttempt for a stepUp token counted as signInCode',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.consumeToken(signInCode.tokenHash, 'stepUp', now),\n\t\t\t\t'consumeToken for a signInCode token redeemed as stepUp',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.spendUserTokens(userId, 'stepUp', now),\n\t\t\t\t1,\n\t\t\t\t'spendUserTokens of stepUp: the step-up only',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\tsignInCode.tokenHash,\n\t\t\t\t\t'signInCode',\n\t\t\t\t\tnow,\n\t\t\t\t),\n\t\t\t\tsignInCode,\n\t\t\t\t'spendUserTokens of stepUp should not touch a sign-in code, nor anything else have counted it',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
17
19
|
"import { equal, isNull } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/**\n * How a token is redeemed: once, by one conditional write, and only as its own\n * kind.\n */\nexport const tokenRedemptionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.consume',\n\t\tgroup,\n\t\tname: 'answers the token as it was before the call: spentAt null means this call spent it',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord();\n\t\t\tawait stores.tokens.insertToken(record);\n\t\t\tconst first = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tfirst,\n\t\t\t\t),\n\t\t\t\trecord,\n\t\t\t\t'consumeToken the first time should answer the token as it was — spentAt null',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tat('2026-02-02T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\t{ ...record, spentAt: first },\n\t\t\t\t'consumeToken the second time should answer it spent at the first call’s instant, and change nothing',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.concurrency',\n\t\tgroup,\n\t\tname: 'lets exactly one of twenty concurrent redemptions spend a token — one conditional write, never a read then a write',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord();\n\t\t\tawait stores.tokens.insertToken(record);\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tconst answers = await Promise.all(\n\t\t\t\tArray.from({ length: 20 }, () =>\n\t\t\t\t\tstores.tokens.consumeToken(record.tokenHash, 'resetPassword', now),\n\t\t\t\t),\n\t\t\t);\n\n\t\t\tequal(\n\t\t\t\tanswers.filter((answer) => answer !== null && answer.spentAt === null)\n\t\t\t\t\t.length,\n\t\t\t\t1,\n\t\t\t\t'consumeToken: of twenty concurrent calls, exactly one should see spentAt null — a reset token redeemed twice is an account takeover',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.kind',\n\t\tgroup,\n\t\tname: 'does not know, and does not spend, a token of the other kind',\n\t\tasync run({ stores }) {\n\t\t\tconst record = tokenRecord({ kind: 'verifyEmail' });\n\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\t'consumeToken for a verifyEmail token redeemed as resetPassword',\n\t\t\t);\n\t\t\tconst own = await stores.tokens.consumeToken(\n\t\t\t\trecord.tokenHash,\n\t\t\t\t'verifyEmail',\n\t\t\t\tat('2026-02-02T00:00:00.000Z'),\n\t\t\t);\n\t\t\tequal(\n\t\t\t\town,\n\t\t\t\trecord,\n\t\t\t\t'consumeToken of the other kind should not have spent the token: redeemed as its own kind, it is still unspent',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\t'0'.repeat(64),\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tat('2026-02-01T00:00:00.000Z'),\n\t\t\t\t),\n\t\t\t\t'consumeToken for an unknown hash',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
18
20
|
"import { mintId } from '../../../ids/id';\nimport { equal } from '../../assert';\nimport { at, tokenRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'tokens';\n\n/**\n * How the tokens of one user and one kind are spent together: all but the one\n * named, each once, even against a redemption.\n */\nexport const tokenSpendingCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'tokens.spendUserTokens',\n\t\tgroup,\n\t\tname: 'spends every unspent token of one user and one kind, and counts them, leaving the rest as they were',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst first = tokenRecord({ userId, kind: 'signInCode' });\n\t\t\tconst second = tokenRecord({ userId, kind: 'signInCode', attempts: 2 });\n\t\t\tconst spentBefore = at('2026-01-02T00:00:00.000Z');\n\t\t\tconst spent = tokenRecord({\n\t\t\t\tuserId,\n\t\t\t\tkind: 'signInCode',\n\t\t\t\tspentAt: spentBefore,\n\t\t\t});\n\t\t\tconst otherKind = tokenRecord({ userId, kind: 'resetPassword' });\n\t\t\tconst otherUser = tokenRecord({ kind: 'signInCode' });\n\t\t\tfor (const record of [first, second, spent, otherKind, otherUser]) {\n\t\t\t\tawait stores.tokens.insertToken(record);\n\t\t\t}\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.spendUserTokens(userId, 'signInCode', now),\n\t\t\t\t2,\n\t\t\t\t'spendUserTokens: how many it spent — the two unspent signInCode tokens, not the one already spent',\n\t\t\t);\n\t\t\tfor (const record of [first, second]) {\n\t\t\t\tequal(\n\t\t\t\t\tawait stores.tokens.consumeToken(record.tokenHash, 'signInCode', now),\n\t\t\t\t\t{ ...record, spentAt: now },\n\t\t\t\t\t'spendUserTokens should have spent it at `at`, keeping its attempts',\n\t\t\t\t);\n\t\t\t}\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(spent.tokenHash, 'signInCode', now),\n\t\t\t\tspent,\n\t\t\t\t'spendUserTokens should keep the spentAt of a token already spent',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\totherKind.tokenHash,\n\t\t\t\t\t'resetPassword',\n\t\t\t\t\tnow,\n\t\t\t\t),\n\t\t\t\totherKind,\n\t\t\t\t'spendUserTokens should not touch a token of another kind',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\totherUser.tokenHash,\n\t\t\t\t\t'signInCode',\n\t\t\t\t\tnow,\n\t\t\t\t),\n\t\t\t\totherUser,\n\t\t\t\t'spendUserTokens should not touch another user',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.spendUserTokens(userId, 'signInCode', now),\n\t\t\t\t0,\n\t\t\t\t'spendUserTokens for a user with none left unspent answers 0, not a failure',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.spendUserTokens(mintId(), 'signInCode', now),\n\t\t\t\t0,\n\t\t\t\t'spendUserTokens for a user with no token at all answers 0',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.spendUserTokensExcept',\n\t\tgroup,\n\t\tname: 'spares the token named by except, and spends the rest',\n\t\tasync run({ stores }) {\n\t\t\tconst userId = mintId();\n\t\t\tconst kept = tokenRecord({ userId, kind: 'signInCode' });\n\t\t\tconst others = [\n\t\t\t\ttokenRecord({ userId, kind: 'signInCode' }),\n\t\t\t\ttokenRecord({ userId, kind: 'signInCode' }),\n\t\t\t];\n\t\t\tfor (const record of [kept, ...others]) {\n\t\t\t\tawait stores.tokens.insertToken(record);\n\t\t\t}\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.spendUserTokens(\n\t\t\t\t\tuserId,\n\t\t\t\t\t'signInCode',\n\t\t\t\t\tnow,\n\t\t\t\t\tkept.tokenHash,\n\t\t\t\t),\n\t\t\t\t2,\n\t\t\t\t'spendUserTokens with except: how many it spent — every token but the one named',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.tokens.consumeToken(kept.tokenHash, 'signInCode', now),\n\t\t\t\tkept,\n\t\t\t\t'spendUserTokens should not spend the token named by except',\n\t\t\t);\n\t\t\tfor (const record of others) {\n\t\t\t\tequal(\n\t\t\t\t\t(\n\t\t\t\t\t\tawait stores.tokens.consumeToken(\n\t\t\t\t\t\t\trecord.tokenHash,\n\t\t\t\t\t\t\t'signInCode',\n\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t)\n\t\t\t\t\t)?.spentAt,\n\t\t\t\t\tnow,\n\t\t\t\t\t'spendUserTokens with except should spend every other token',\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n\t{\n\t\tid: 'tokens.spendUserTokensRace',\n\t\tgroup,\n\t\tname: \"spends a token once, when spending a user's tokens races a redemption\",\n\t\tasync run({ stores }) {\n\t\t\tconst now = at('2026-02-01T00:00:00.000Z');\n\t\t\tfor (let round = 0; round < 10; round += 1) {\n\t\t\t\tconst record = tokenRecord({ kind: 'signInCode' });\n\t\t\t\tawait stores.tokens.insertToken(record);\n\n\t\t\t\tconst [counted, redeemed] = await Promise.all([\n\t\t\t\t\tstores.tokens.spendUserTokens(record.userId, 'signInCode', now),\n\t\t\t\t\tstores.tokens.consumeToken(record.tokenHash, 'signInCode', now),\n\t\t\t\t]);\n\n\t\t\t\tequal(\n\t\t\t\t\tcounted + (redeemed?.spentAt === null ? 1 : 0),\n\t\t\t\t\t1,\n\t\t\t\t\t'spendUserTokens and consumeToken: exactly one of the two should have spent the token',\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t},\n];\n",
|
|
19
|
-
"import type { ConformanceCase } from '../../types';\nimport { tokenAttemptCases } from './attempts';\nimport { tokenDeletionCases } from './deletion';\nimport { tokenInsertCases } from './inserts';\nimport { tokenRedemptionCases } from './redemption';\nimport { tokenSpendingCases } from './spending';\n\n/** Every case of the token store, in the order they are described. */\nexport const tokenStoreCases: readonly ConformanceCase[] = [\n\t...tokenRedemptionCases,\n\t...tokenAttemptCases,\n\t...tokenSpendingCases,\n\t...tokenInsertCases,\n\t...tokenDeletionCases,\n];\n",
|
|
21
|
+
"import type { ConformanceCase } from '../../types';\nimport { tokenAttemptCases } from './attempts';\nimport { tokenDeletionCases } from './deletion';\nimport { tokenInsertCases } from './inserts';\nimport { tokenKindCases } from './kinds';\nimport { tokenRedemptionCases } from './redemption';\nimport { tokenSpendingCases } from './spending';\n\n/** Every case of the token store, in the order they are described. */\nexport const tokenStoreCases: readonly ConformanceCase[] = [\n\t...tokenRedemptionCases,\n\t...tokenAttemptCases,\n\t...tokenSpendingCases,\n\t...tokenInsertCases,\n\t...tokenKindCases,\n\t...tokenDeletionCases,\n];\n",
|
|
20
22
|
"import { equal, isNull } from '../../assert';\nimport { userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\n/** What a deletion removes, and what it leaves. */\nexport const userDeletionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.delete',\n\t\tgroup,\n\t\tname: 'deletes a user and frees their logins, answers false for nobody, and touches no other user',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord();\n\t\t\tconst other = userRecord();\n\t\t\tawait stores.users.insertUser(record);\n\t\t\tawait stores.users.insertUser(other);\n\t\t\tconst [login] = record.logins;\n\n\t\t\tequal(\n\t\t\t\tawait stores.users.deleteUser(record.id),\n\t\t\t\ttrue,\n\t\t\t\t'deleteUser for a stored user should answer true',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.users.findUser(record.id),\n\t\t\t\t'findUser after deleteUser',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.users.findUserByLogin(record.type, login ?? ''),\n\t\t\t\t'findUserByLogin for a deleted user’s login',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.users.deleteUser(record.id),\n\t\t\t\tfalse,\n\t\t\t\t'deleteUser replayed should answer false, not fail: a deletion interrupted half-way is replayed',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(other.id),\n\t\t\t\tother,\n\t\t\t\t'deleteUser should not touch another user',\n\t\t\t);\n\t\t\t// The login is free for a new account: the index forgot it.\n\t\t\tconst successor = userRecord({ logins: [login ?? ''] });\n\t\t\tequal(\n\t\t\t\tawait stores.users.insertUser(successor),\n\t\t\t\tsuccessor,\n\t\t\t\t'insertUser onto a deleted user’s login should succeed',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
21
23
|
"import { StoreConflict } from '../../../errors/janus-error';\nimport { equal, isOurs, ok } from '../../assert';\nimport { userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\n/** What an insert does twice: nothing under a retry, one winner under a race. */\nexport const userInsertCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.idempotentInsert',\n\t\tgroup,\n\t\tname: 'is idempotent under retry: inserting an existing id answers the stored record and writes nothing',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord();\n\t\t\tawait stores.users.insertUser(record);\n\n\t\t\tconst retried = await stores.users.insertUser({\n\t\t\t\t...record,\n\t\t\t\tfields: { email: 'changed@example.test' },\n\t\t\t});\n\n\t\t\tequal(\n\t\t\t\tretried,\n\t\t\t\trecord,\n\t\t\t\t'insertUser retried with the same id should answer the stored record',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(record.id),\n\t\t\t\trecord,\n\t\t\t\t'insertUser retried should write nothing',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.uniqueness',\n\t\tgroup,\n\t\tname: 'lets exactly one of twenty concurrent inserts hold a login: uniqueness is a constraint, not a read',\n\t\tasync run({ stores }) {\n\t\t\tconst records = Array.from({ length: 20 }, () =>\n\t\t\t\tuserRecord({ logins: ['contested@example.test'] }),\n\t\t\t);\n\n\t\t\tconst outcomes = await Promise.allSettled(\n\t\t\t\trecords.map((record) => stores.users.insertUser(record)),\n\t\t\t);\n\t\t\tconst accepted = outcomes.filter((o) => o.status === 'fulfilled');\n\t\t\tconst refused = outcomes.flatMap((o) =>\n\t\t\t\to.status === 'rejected' ? [o.reason as unknown] : [],\n\t\t\t);\n\n\t\t\tequal(\n\t\t\t\taccepted.length,\n\t\t\t\t1,\n\t\t\t\t'insertUser: of twenty concurrent inserts of one login, exactly one should be accepted — a read followed by a write lets several through',\n\t\t\t);\n\t\t\tfor (const error of refused) {\n\t\t\t\tisOurs(\n\t\t\t\t\terror,\n\t\t\t\t\tStoreConflict,\n\t\t\t\t\t'StoreConflict',\n\t\t\t\t\t'insertUser should refuse a taken login with StoreConflict',\n\t\t\t\t);\n\t\t\t\tequal(error.code, 'LOGIN_TAKEN', 'insertUser: the conflict code');\n\t\t\t\tequal(\n\t\t\t\t\terror.login,\n\t\t\t\t\t'contested@example.test',\n\t\t\t\t\t'insertUser: the conflict should name the login',\n\t\t\t\t);\n\t\t\t\tok(\n\t\t\t\t\t!error.message.includes('contested@example.test'),\n\t\t\t\t\t`insertUser: the conflict's message should not quote the login — a message never carries a value; got ${JSON.stringify(error.message)}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tlet stored = 0;\n\t\t\tfor (const record of records) {\n\t\t\t\tif ((await stores.users.findUser(record.id)) !== null) stored += 1;\n\t\t\t}\n\t\t\tequal(stored, 1, 'insertUser: a refused insert should write nothing');\n\t\t},\n\t},\n];\n",
|
|
22
24
|
"import { equal, ok } from '../../assert';\nimport { userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\n/** How the users of one type are paged. */\nexport const userListingCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.pagination',\n\t\tgroup,\n\t\tname: 'pages 25 users of one type by 10 in ascending id order, with no gap, no repeat and no other type, and ends on a null cursor',\n\t\tasync run({ stores }) {\n\t\t\tconst records = Array.from({ length: 25 }, () => userRecord());\n\t\t\tconst others = Array.from({ length: 5 }, () =>\n\t\t\t\tuserRecord({ type: 'staff' }),\n\t\t\t);\n\t\t\t// Written newest first, and interleaved with another type, so neither\n\t\t\t// insertion order nor the whole collection is the answer.\n\t\t\tfor (const [index, record] of [...records].reverse().entries()) {\n\t\t\t\tawait stores.users.insertUser(record);\n\t\t\t\tconst other = others[index];\n\t\t\t\tif (other !== undefined) await stores.users.insertUser(other);\n\t\t\t}\n\t\t\tconst expected = records.map((record) => record.id).sort();\n\n\t\t\tconst seen: string[] = [];\n\t\t\tconst sizes: number[] = [];\n\t\t\tlet after: string | null = null;\n\t\t\tfor (let page = 0; page < 10; page += 1) {\n\t\t\t\tconst answer = await stores.users.listUsers({\n\t\t\t\t\ttype: 'user',\n\t\t\t\t\tafter,\n\t\t\t\t\tlimit: 10,\n\t\t\t\t});\n\t\t\t\tseen.push(...answer.items.map((item) => item.id));\n\t\t\t\tsizes.push(answer.items.length);\n\t\t\t\tafter = answer.nextCursor;\n\t\t\t\tif (after === null) break;\n\t\t\t}\n\n\t\t\tequal(sizes, [10, 10, 5], 'listUsers: page sizes for 25 users by 10');\n\t\t\tequal(\n\t\t\t\tseen,\n\t\t\t\texpected,\n\t\t\t\t'listUsers: every id of the type once, in ascending order',\n\t\t\t);\n\n\t\t\t// The cursor need not name a stored user.\n\t\t\tconst between = await stores.users.listUsers({\n\t\t\t\ttype: 'user',\n\t\t\t\tafter: '00000000-0000-7000-8000-000000000000',\n\t\t\t\tlimit: 3,\n\t\t\t});\n\t\t\tok(\n\t\t\t\tbetween.items[0]?.id === expected[0],\n\t\t\t\t'listUsers: a cursor naming no stored user should start after it, not fail',\n\t\t\t);\n\t\t},\n\t},\n];\n",
|
|
@@ -37,7 +39,7 @@
|
|
|
37
39
|
"import { describeSuite, fromGlobals, SKIP_REASONS } from '../describe';\nimport type { ConformanceRunner } from '../types';\nimport { relationStoreCases } from './cases';\nimport { relationOutageCases } from './cases/outage';\nimport type { RelationCase, RelationHarness } from './types';\n\n/** Every case, in the order they are described. */\nexport const allRelationCases: readonly RelationCase[] = [\n\t...relationStoreCases,\n\t...relationOutageCases,\n];\n\n/** Runs one case against a freshly opened store, and closes it, pass or fail. */\nexport async function runRelationCase(\n\trelationCase: RelationCase,\n\tharness: RelationHarness,\n): Promise<{ readonly skipped: string } | { readonly passed: true }> {\n\tconst opened = await harness.open();\n\n\ttry {\n\t\tif (relationCase.needs === 'faults' && opened.faults === undefined) {\n\t\t\treturn { skipped: SKIP_REASONS.faults };\n\t\t}\n\t\tawait relationCase.run({\n\t\t\tstore: opened.store,\n\t\t\tfaults: opened.faults ?? null,\n\t\t});\n\t\treturn { passed: true };\n\t} finally {\n\t\tawait opened.close?.();\n\t}\n}\n\n/** Describes the whole relation suite under the adapter's test runner. */\nexport function describeRelationStores(options: {\n\treadonly name: string;\n\treadonly harness: RelationHarness;\n\treadonly runner?: ConformanceRunner;\n\t/** Case ids to skip, each with the reason — reported, never silent. */\n\treadonly skip?: Readonly<Record<string, string>>;\n\treadonly faults?: boolean;\n}): void {\n\tdescribeSuite({\n\t\ttitle: `${options.name} — @nxgt/janus relation conformance`,\n\t\tcases: allRelationCases,\n\t\trun: (relationCase) => runRelationCase(relationCase, options.harness),\n\t\trunner: options.runner ?? fromGlobals('describeRelationStores'),\n\t\tskip: options.skip ?? {},\n\t\tfaults: options.faults,\n\t});\n}\n",
|
|
38
40
|
"import { StoreFailure } from '../../errors/janus-error';\nimport { createMemoryRelations } from '../../permissions/port/memory';\nimport type { RelationStore } from '../../permissions/port/types';\nimport type { RelationHarness } from './types';\n\n/** The reference store, with faults: what the suite proves itself against. */\nexport function referenceRelationHarness(): RelationHarness {\n\treturn {\n\t\tasync open() {\n\t\t\tconst failing = new Set<string>();\n\t\t\tconst inner = createMemoryRelations();\n\t\t\tconst store = Object.fromEntries(\n\t\t\t\tObject.entries(inner).map(([method, fn]) => [\n\t\t\t\t\tmethod,\n\t\t\t\t\t(...args: unknown[]) =>\n\t\t\t\t\t\tfailing.has(method)\n\t\t\t\t\t\t\t? Promise.reject(\n\t\t\t\t\t\t\t\t\tnew StoreFailure(\n\t\t\t\t\t\t\t\t\t\t`relations.${method}: the store could not answer`,\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tslot: 'relations',\n\t\t\t\t\t\t\t\t\t\t\toperation: method,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: (fn as (...a: unknown[]) => unknown).apply(inner, args),\n\t\t\t\t]),\n\t\t\t) as unknown as RelationStore;\n\n\t\t\treturn {\n\t\t\t\tstore,\n\t\t\t\tfaults: {\n\t\t\t\t\tasync fail(method) {\n\t\t\t\t\t\tfailing.add(method);\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n"
|
|
39
41
|
],
|
|
40
|
-
"mappings": "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",
|
|
41
|
-
"debugId": "
|
|
42
|
+
"mappings": ";;;;;;;;;;;;;;;;AAWO,SAAS,KAAK,CAAC,QAAiB,UAAmB,MAAoB;AAAA,EAC7E,MAAM,aAAa,OAAO,QAAQ,UAAU,EAAE;AAAA,EAC9C,IAAI,eAAe,MAAM;AAAA,IACxB,MAAM,IAAI,MACT,GAAG;AAAA,OAAc,WAAW,QAAQ,sBAAsB,KAAK,WAAW,QAAQ,UAAU,KAAK,WAAW,MAAM,GACnH;AAAA,EACD;AAAA;AAIM,SAAS,MAAM,CAAC,QAAiB,MAAoB;AAAA,EAC3D,IAAI,WAAW,MAAM;AAAA,IACpB,MAAM,IAAI,MACT,GAAG;AAAA,uBAA8B,WAAW,YAAY,+EAA+E,KAAK,MAAM,GACnJ;AAAA,EACD;AAAA;AAIM,SAAS,EAAE,CAAC,WAAoB,MAAoB;AAAA,EAC1D,IAAI,CAAC;AAAA,IAAW,MAAM,IAAI,MAAM,IAAI;AAAA;AAW9B,SAAS,OAAO,CACtB,SACA,MACmB;AAAA,EACnB,OAAO,QAAQ,KACd,CAAC,WAAW;AAAA,IACX,MAAM,IAAI,MAAM,GAAG;AAAA,8BAAqC,KAAK,MAAM,GAAG;AAAA,KAEvE,CAAC,UAAmB,KACrB;AAAA;AAiBM,SAAS,MAAS,CACxB,OACA,KACA,MACA,MACqB;AAAA,EACrB,IAAI,iBAAiB;AAAA,IAAK;AAAA,EAG1B,IAAK,OAAqC,SAAS,MAAM;AAAA,IACxD,MAAM,IAAI,MACT,GAAG;AAAA,uBAA8B,iCAAiC,kHACnE;AAAA,EACD;AAAA,EAEA,MAAM,IAAI,MAAM,GAAG;AAAA,aAAoB,aAAa,KAAK,KAAK,GAAG;AAAA;AASlE,SAAS,MAAM,CACd,QACA,UACA,MACoB;AAAA,EACpB,IAAI,oBAAoB,QAAQ,kBAAkB,MAAM;AAAA,IACvD,OAAO,kBAAkB,QACxB,oBAAoB,QACpB,OAAO,QAAQ,MAAM,SAAS,QAAQ,IACpC,OACA,EAAE,MAAM,UAAU,OAAO;AAAA,EAC7B;AAAA,EAEA,IAAI,MAAM,QAAQ,QAAQ,KAAK,MAAM,QAAQ,MAAM,GAAG;AAAA,IACrD,IAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,CAAC,MAAM,QAAQ,MAAM,GAAG;AAAA,MACvD,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA,IACjC;AAAA,IACA,IAAI,SAAS,WAAW,OAAO,QAAQ;AAAA,MACtC,OAAO;AAAA,QACN,MAAM,GAAG;AAAA,QACT,UAAU,SAAS;AAAA,QACnB,QAAQ,OAAO;AAAA,MAChB;AAAA,IACD;AAAA,IACA,SAAS,IAAI,EAAG,IAAI,SAAS,QAAQ,KAAK,GAAG;AAAA,MAC5C,MAAM,QAAQ,OAAO,OAAO,IAAI,SAAS,IAAI,GAAG,QAAQ,IAAI;AAAA,MAC5D,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,IACC,OAAO,aAAa,YACpB,aAAa,QACb,OAAO,WAAW,YAClB,WAAW,MACV;AAAA,IACD,MAAM,OAAO,IAAI,IAAI,CAAC,GAAG,OAAO,KAAK,QAAQ,GAAG,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC;AAAA,IACvE,WAAW,OAAO,MAAM;AAAA,MACvB,MAAM,QAAQ,OACZ,OAAmC,MACnC,SAAqC,MACtC,SAAS,KAAK,MAAM,GAAG,QAAQ,KAChC;AAAA,MACA,IAAI,UAAU;AAAA,QAAM,OAAO;AAAA,IAC5B;AAAA,IACA,OAAO;AAAA,EACR;AAAA,EAEA,OAAO,OAAO,GAAG,QAAQ,QAAQ,IAAI,OAAO,EAAE,MAAM,UAAU,OAAO;AAAA;AAGtE,SAAS,IAAI,CAAC,OAAwB;AAAA,EACrC,IAAI,iBAAiB;AAAA,IAAO,OAAO,GAAG,MAAM,SAAS,MAAM;AAAA,EAC3D,IAAI,iBAAiB;AAAA,IAAM,OAAO,MAAM,YAAY;AAAA,EACpD,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO,KAAK,UAAU,KAAK;AAAA,EAC1D,IAAI;AAAA,IACH,MAAM,OAAO,KAAK,UAAU,KAAK;AAAA,IACjC,OAAO,KAAK,SAAS,MAAM,GAAG,KAAK,MAAM,GAAG,GAAG,OAAO;AAAA,IACrD,MAAM;AAAA,IACP,OAAO,OAAO,KAAK;AAAA;AAAA;;;AC5Id,IAAM,KAAK,CAAC,QAAsB,IAAI,KAAK,GAAG;AAGrD,IAAM,QAAQ,MAAM,QAAQ,QAAO;AAE5B,SAAS,UAAU,CAAC,YAAiC,CAAC,GAAe;AAAA,EAC3E,MAAM,QAAQ,MAAM;AAAA,EACpB,OAAO;AAAA,IACN,IAAI,QAAO;AAAA,IACX,MAAM;AAAA,IACN,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ,EAAE,OAAO,MAAM,EAAE,OAAO,OAAO,MAAM,WAAW,EAAE;AAAA,IAC1D,QAAQ,CAAC,KAAK;AAAA,IACd,UAAU;AAAA,MACT,MAAM;AAAA,MACN,WAAW,GAAG,0BAA0B;AAAA,IACzC;AAAA,IACA,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,SAAS;AAAA,IACT,WAAW,GAAG,0BAA0B;AAAA,IACxC,WAAW,GAAG,0BAA0B;AAAA,OACrC;AAAA,EACJ;AAAA;AAGM,SAAS,aAAa,CAC5B,YAAoC,CAAC,GACrB;AAAA,EAChB,OAAO;AAAA,IACN,IAAI,QAAO;AAAA,IACX,WAAW,MAAM,QAAO,CAAC;AAAA,IACzB,QAAQ,QAAO;AAAA,IACf,iBAAiB,GAAG,0BAA0B;AAAA,IAC9C,WAAW,GAAG,0BAA0B;AAAA,IACxC,WAAW;AAAA,IACX,WAAW,GAAG,0BAA0B;AAAA,OACrC;AAAA,EACJ;AAAA;AAGM,SAAS,WAAW,CAAC,YAAkC,CAAC,GAAgB;AAAA,EAC9E,OAAO;AAAA,IACN,WAAW,MAAM,QAAO,CAAC;AAAA,IACzB,MAAM;AAAA,IACN,QAAQ,QAAO;AAAA,IACf,SAAS,MAAM;AAAA,IACf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,WAAW,GAAG,0BAA0B;AAAA,IACxC,SAAS;AAAA,IACT,WAAW,GAAG,0BAA0B;AAAA,OACrC;AAAA,EACJ;AAAA;AAID,SAAS,KAAK,CAAC,MAAsB;AAAA,EACpC,OAAO,KAAK,QAAQ,MAAM,EAAE,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,GAAG,EAAE;AAAA;;;ACtD1D,SAAS,MAAmC,CAC3C,MACA,QACA,MACA,MACkB;AAAA,EAClB,OAAO;AAAA,IACN,IAAI,UAAU;AAAA,IACd,OAAO;AAAA,IACP,MAAM,GAAG,QAAQ;AAAA,IACjB,OAAO;AAAA,SACD,IAAG,CAAC,SAAS;AAAA,MAClB,MAAM,KAAK,OAAO;AAAA,MAClB,MAAM,QAAQ,QAAQ,KAAK,MAAM,MAAM;AAAA,MAEvC,MAAM,QAAQ,MAAM,QACnB,KAAK,OAAO,GACZ,GAAG,QAAQ,kGACZ;AAAA,MAEA,IACC,iBAAiB,eAChB,OAA8B,SAAS,gBACvC;AAAA,QACD,OACC,OACA,eACA,gBACA,GAAG,QAAQ,wBACZ;AAAA,MACD;AAAA,MACA,GACE,OAAqC,SAAS,aAC/C,GAAG,QAAQ,+EACZ;AAAA;AAAA,EAEF;AAAA;AAGD,IAAM,OAAO,WAAW;AACxB,IAAM,UAAU,cAAc,EAAE,QAAQ,KAAK,GAAG,CAAC;AACjD,IAAM,QAAQ,YAAY,EAAE,QAAQ,KAAK,GAAG,CAAC;AAC7C,IAAM,MAAM,GAAG,0BAA0B;AAGzC,IAAM,OAAO,SAAS,aAA0B;AAAA,EAC/C,MAAM,OAAO,MAAM,WAAW,IAAI;AAAA,EAClC,MAAM,OAAO,SAAS,cAAc,OAAO;AAAA,EAC3C,MAAM,OAAO,OAAO,YAAY,KAAK;AAAA;AAG/B,IAAM,cAA0C;AAAA,EACtD,OACC,SACA,YACA,GAAG,aAAa,OAAO,MAAM,SAAS,KAAK,EAAE,GAC7C,IACD;AAAA,EACA,OACC,SACA,mBACA,GAAG,aACF,OAAO,MAAM,gBAAgB,KAAK,MAAM,KAAK,OAAO,MAAM,EAAE,GAC7D,IACD;AAAA,EACA,OACC,SACA,aACA,GAAG,aACF,OAAO,MAAM,UAAU,EAAE,MAAM,KAAK,MAAM,OAAO,MAAM,OAAO,GAAG,CAAC,GACnE,IACD;AAAA,EACA,OACC,YACA,0BACA,GAAG,aAAa,OAAO,SAAS,uBAAuB,QAAQ,SAAS,GACxE,IACD;AAAA,EACA,OACC,YACA,iBACA,GAAG,aACF,OAAO,SAAS,cAAc,QAAQ,IAAI,GAAG,0BAA0B,CAAC,GACzE,IACD;AAAA,EACA,OACC,YACA,yBACA,GAAG,aAAa,OAAO,SAAS,sBAAsB,QAAQ,IAAI,GAAG,GACrE,IACD;AAAA,EACA,OACC,YACA,iBACA,GAAG,aAAa,OAAO,SAAS,cAAc,QAAQ,IAAI,GAAG,GAC7D,IACD;AAAA,EACA,OACC,YACA,sBACA,GAAG,aAAa,OAAO,SAAS,mBAAmB,KAAK,IAAI,GAAG,GAC/D,IACD;AAAA,EACA,OACC,UACA,gBACA,GAAG,aACF,OAAO,OAAO,aAAa,MAAM,WAAW,iBAAiB,GAAG,GACjE,IACD;AAAA,EACA,OACC,UACA,gBACA,GAAG,aACF,OAAO,OAAO,aAAa,MAAM,WAAW,eAAe,GAC5D,IACD;AAAA,EACA,OACC,UACA,mBACA,GAAG,aACF,OAAO,OAAO,gBAAgB,KAAK,IAAI,iBAAiB,GAAG,GAC5D,IACD;AAAA,EACA,OACC,SACA,cACA,GAAG,aAAa,OAAO,MAAM,WAAW,KAAK,EAAE,GAC/C,IACD;AAAA,EACA,OACC,YACA,sBACA,GAAG,aAAa,OAAO,SAAS,mBAAmB,KAAK,EAAE,GAC1D,IACD;AAAA,EACA,OACC,UACA,oBACA,GAAG,aAAa,OAAO,OAAO,iBAAiB,KAAK,EAAE,GACtD,IACD;AACD;;AC3JA,IAAM,QAAQ;AAGP,IAAM,uBAAmD;AAAA,EAC/D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,SAAS,cAAc;AAAA,QAC5B;AAAA,QACA,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,UAAU;AAAA,QACf,cAAc,EAAE,OAAO,CAAC;AAAA,QACxB,cAAc,EAAE,QAAQ,WAAW,GAAG,0BAA0B,EAAE,CAAC;AAAA,QACnE;AAAA,MACD;AAAA,MACA,MAAM,WAAW,cAAc;AAAA,MAC/B,WAAW,UAAU,CAAC,GAAG,SAAS,QAAQ,GAAG;AAAA,QAC5C,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC3C;AAAA,MAKA,MAAM,aACJ,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,MAC9D;AAAA,MACD,MAAM,WAAW,aAAa,IAAI;AAAA,MAClC,MAAM,UAAU,MAAM,OAAO,SAAS,mBAAmB,MAAM;AAAA,MAC/D,GACC,YAAY,UACZ,+EAA+E,OAAO,QAAQ,2BAA2B,aAAa,eAAe,0BAA0B,OAAO,OAAO,GAC9L;AAAA,MACA,WAAW,UAAU,SAAS;AAAA,QAC7B,OACC,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,GAC7D,iDACD;AAAA,MACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,SAAS,SAAS,GAC/D,UACA,kDACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,mBAAmB,MAAM,GAC/C,GACA,kEACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,IACN,OAAO;AAAA,SACD,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,UAAU,OAAO,SAAS;AAAA,MAChC,GAAG,YAAY,WAAW,yCAAyC;AAAA,MACnE,MAAM,SAAS,cAAc;AAAA,QAC5B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,SAAS,cAAc;AAAA,QAC5B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC1C,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAE1C,MACC,MAAM,SAAS,KAAK,OAAO,UAAU,GAAG,0BAA0B,CAAC,GACnE,GACA,4CACD;AAAA,MACA,OACC,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,GAC7D,oDACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,GAC7D,QACA,8EACD;AAAA;AAAA,EAEF;AACD;;;ACvFA,IAAM,SAAQ;AAGP,IAAM,wBAAoD;AAAA,EAChE;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,WAAW,cAAc;AAAA,MAC/B,MAAM,UAAU,cAAc;AAAA,QAC7B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,OAAO,SAAS,cAAc,QAAQ;AAAA,MAC5C,MAAM,OAAO,SAAS,cAAc,OAAO;AAAA,MAC3C,MAAM,QAAQ,GAAG,0BAA0B;AAAA,MAE3C,MACC,MAAM,OAAO,SAAS,cAAc,SAAS,IAAI,KAAK,GACtD,KAAK,UAAU,WAAW,MAAM,GAChC,gEACD;AAAA,MACA,OACC,MAAM,OAAO,SAAS,cAAc,QAAQ,IAAI,KAAK,GACrD,gGACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,QAAQ,SAAS,GAC9D,SACA,wEACD;AAAA,MACA,OACC,MAAM,OAAO,SAAS,cAAc,QAAO,GAAG,KAAK,GACnD,qCACD;AAAA;AAAA,EAEF;AACD;;;ACtCA,IAAM,SAAQ;AAGP,IAAM,qBAAiD;AAAA,EAC7D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,cAAc;AAAA,MAC7B,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC1C,MAAM,OAAO,SAAS,cAAc;AAAA,WAChC;AAAA,QACH,WAAW,IAAI,KAAK,0BAA0B;AAAA,MAC/C,CAAC;AAAA,MAED,MACC,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,GAC7D,QACA,6DACD;AAAA;AAAA,EAEF;AACD;;;ACvBA,IAAM,SAAQ;AAGP,IAAM,mBAA+C;AAAA,EAC3D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,WAAW,cAAc;AAAA,MAC/B,MAAM,UAAU,cAAc;AAAA,QAC7B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,SAAS,cAAc;AAAA,QAC5B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,WAAW,UAAU,CAAC,UAAU,SAAS,MAAM,GAAG;AAAA,QACjD,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC3C;AAAA,MAEA,MACC,MAAM,OAAO,SAAS,uBAAuB,SAAS,SAAS,GAC/D,UACA,+CACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,QAAQ,SAAS,GAC9D,SACA,2GACD;AAAA,MAIA,MAAM,QAAQ,MAAM,OAAO,SAAS,uBACnC,OAAO,SACR;AAAA,MACA,IAAI,UAAU,MAAM;AAAA,QACnB,MACC,OACA,QACA,gFACD;AAAA,MACD;AAAA,MAEA,OACC,MAAM,OAAO,SAAS,uBAAuB,IAAI,OAAO,EAAE,CAAC,GAC3D,4CACD;AAAA;AAAA,EAEF;AACD;;;ACjDA,IAAM,SAAQ;AAGP,IAAM,+BAA2D;AAAA,EACvE;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,WAAW,cAAc;AAAA,MAC/B,MAAM,UAAU,cAAc;AAAA,QAC7B,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,OAAO,SAAS,cAAc,QAAQ;AAAA,MAC5C,MAAM,OAAO,SAAS,cAAc,OAAO;AAAA,MAC3C,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MACC,MAAM,OAAO,SAAS,sBAAsB,SAAS,IAAI,GAAG,GAC5D,KAAK,UAAU,iBAAiB,IAAI,GACpC,+GACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,SAAS,SAAS,GAC/D,KAAK,UAAU,iBAAiB,IAAI,GACpC,mFACD;AAAA,MACA,OACC,MAAM,OAAO,SAAS,sBAAsB,QAAQ,IAAI,GAAG,GAC3D,0GACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,QAAQ,SAAS,GAC9D,SACA,gFACD;AAAA,MACA,OACC,MAAM,OAAO,SAAS,sBAAsB,QAAO,GAAG,GAAG,GACzD,6CACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,MAAM,GAAG,0BAA0B;AAAA,MACzC,SAAS,QAAQ,EAAG,QAAQ,IAAI,SAAS,GAAG;AAAA,QAC3C,MAAM,SAAS,cAAc;AAAA,QAC7B,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,QAE1C,MAAM,QAAQ,IAAI;AAAA,UACjB,OAAO,SAAS,sBAAsB,OAAO,IAAI,GAAG;AAAA,UACpD,OAAO,SAAS,cAAc,OAAO,IAAI,GAAG;AAAA,QAC7C,CAAC;AAAA,QAED,OACE,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,IAC3D,WACH,KACA,gIACD;AAAA,MACD;AAAA;AAAA,EAEF;AACD;;;AClEA,IAAM,SAAQ;AAGP,IAAM,yBAAqD;AAAA,EACjE;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,cAAc;AAAA,MAC7B,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC1C,MAAM,QAAQ,GAAG,0BAA0B;AAAA,MAE3C,MACC,MAAM,OAAO,SAAS,cAAc,OAAO,IAAI,KAAK,GACpD,MACA,qCACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,cACrB,OAAO,IACP,GAAG,0BAA0B,CAC9B,GACA,MACA,2EACD;AAAA,MACA,OACE,MAAM,OAAO,SAAS,uBAAuB,OAAO,SAAS,IAC3D,WACH,OACA,qDACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,cAAc,QAAO,GAAG,KAAK,GACnD,OACA,qCACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,UAAU,cAAc,EAAE,OAAO,CAAC;AAAA,MACxC,MAAM,QAAQ,cAAc,EAAE,OAAO,CAAC;AAAA,MACtC,MAAM,UAAU,cAAc;AAAA,QAC7B;AAAA,QACA,WAAW,GAAG,0BAA0B;AAAA,MACzC,CAAC;AAAA,MACD,MAAM,WAAW,cAAc;AAAA,MAC/B,WAAW,UAAU,CAAC,SAAS,OAAO,SAAS,QAAQ,GAAG;AAAA,QACzD,MAAM,OAAO,SAAS,cAAc,MAAM;AAAA,MAC3C;AAAA,MACA,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MACC,MAAM,OAAO,SAAS,mBAAmB,QAAQ,KAAK,QAAQ,EAAE,GAChE,GACA,4DACD;AAAA,MACA,QACE,MAAM,OAAO,SAAS,uBAAuB,QAAQ,SAAS,IAC5D,aAAa,MAChB,sDACD;AAAA,MACA,OACE,MAAM,OAAO,SAAS,uBAAuB,QAAQ,SAAS,IAC5D,WACH,QAAQ,WACR,qDACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,uBAAuB,SAAS,SAAS,GAC/D,UACA,kDACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,mBAAmB,QAAQ,GAAG,GACpD,GACA,mCACD;AAAA,MACA,MACC,MAAM,OAAO,SAAS,mBAAmB,QAAO,GAAG,GAAG,GACtD,GACA,kEACD;AAAA;AAAA,EAEF;AACD;;;ACtFO,IAAM,oBAAgD;AAAA,EAC5D,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;;ACZA,IAAM,SAAQ;AAMP,IAAM,oBAAgD;AAAA,EAC5D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY;AAAA,QAC1B,MAAM;AAAA,QACN,UAAU,IAAI,OAAO,EAAE;AAAA,MACxB,CAAC;AAAA,MACD,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MAEtC,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,YAAY,GAC/D,KAAK,QAAQ,UAAU,EAAE,GACzB,0FACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,YAAY,GAC/D,KAAK,QAAQ,UAAU,EAAE,GACzB,uDACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,cACA,GAAG,0BAA0B,CAC9B,GACA,KAAK,QAAQ,UAAU,EAAE,GACzB,sEACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY,EAAE,MAAM,eAAe,CAAC;AAAA,MACnD,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MAEtC,MAAM,UAAU,MAAM,QAAQ,IAC7B,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAC1B,OAAO,OAAO,aAAa,OAAO,WAAW,cAAc,CAC5D,CACD;AAAA,MAEA,MACC,QACE,IAAI,CAAC,WAAW,QAAQ,QAAQ,EAChC,KAAK,CAAC,GAAG,OAAO,KAAK,MAAM,KAAK,EAAE,GACpC,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,UAAU,QAAQ,CAAC,GAClD,4HACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AAAA,MACjD,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,MAAM,GAAG,0BAA0B;AAAA,MACzC,MAAM,QAAQ,MACb,OAAO,OAAO,aAAa,OAAO,WAAW,YAAY;AAAA,MAE1D,MAAM,UAAU,MAAM,QAAQ,IAAI;AAAA,QACjC,GAAG,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,KAAK;AAAA,QACnC,OAAO,OAAO,aAAa,OAAO,WAAW,cAAc,GAAG;AAAA,QAC9D,GAAG,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,KAAK;AAAA,MACpC,CAAC;AAAA,MACD,MAAM,QAAQ,MAAM,OAAO,OAAO,aACjC,OAAO,WACP,cACA,GACD;AAAA,MACA,IAAI,UAAU,MAAM;AAAA,QACnB,MAAM,IAAI,MAAM,qDAAqD;AAAA,MACtE;AAAA,MACA,MAAM,UAAU,QACd,MAAM,GAAG,EAAE,EACX,OAAO,QAAQ,MAAM,EAAE,CAAC,EACxB,OAAO,CAAC,WAAW,WAAW,QAAQ,OAAO,YAAY,IAAI,EAC7D,IAAI,CAAC,WAAW,QAAQ,YAAY,CAAC,EACrC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC;AAAA,MAEtB,MACC,SACA,MAAM,KAAK,EAAE,QAAQ,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,QAAQ,CAAC,GAC9D,uFACD;AAAA,MACA,MACC,QACE,OAAO,CAAC,WAAW,WAAW,QAAQ,OAAO,YAAY,IAAI,EAC7D,MAAM,CAAC,WAAW,QAAQ,aAAa,MAAM,QAAQ,GACvD,MACA,0IACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,QAAQ,YAAY;AAAA,QACzB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,GAAG,0BAA0B;AAAA,MACvC,CAAC;AAAA,MACD,MAAM,QAAQ,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAAA,MACnD,MAAM,OAAO,OAAO,YAAY,KAAK;AAAA,MACrC,MAAM,OAAO,OAAO,YAAY,KAAK;AAAA,MAErC,WAAW,QAAQ,CAAC,SAAS,QAAQ,GAAG;AAAA,QACvC,MACC,MAAM,OAAO,OAAO,aAAa,MAAM,WAAW,YAAY,GAC9D,OACA,sCAAsC,yEACvC;AAAA,MACD;AAAA,MACA,OACC,MAAM,OAAO,OAAO,aAAa,MAAM,WAAW,YAAY,GAC9D,8DACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,MAAM,WACN,iBACA,GAAG,0BAA0B,CAC9B,GACA,OACA,0EACD;AAAA,MACA,OACC,MAAM,OAAO,OAAO,aAAa,IAAI,OAAO,EAAE,GAAG,YAAY,GAC7D,kCACD;AAAA;AAAA,EAEF;AACD;;;AClJA,IAAM,SAAQ;AAGP,IAAM,qBAAiD;AAAA,EAC7D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,UAAU;AAAA,QACf,YAAY,EAAE,OAAO,CAAC;AAAA,QACtB,YAAY,EAAE,QAAQ,MAAM,cAAc,CAAC;AAAA,QAC3C,YAAY,EAAE,QAAQ,SAAS,GAAG,0BAA0B,EAAE,CAAC;AAAA,MAChE;AAAA,MACA,MAAM,WAAW,YAAY;AAAA,MAC7B,WAAW,UAAU,CAAC,GAAG,SAAS,QAAQ,GAAG;AAAA,QAC5C,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACvC;AAAA,MACA,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MACC,MAAM,OAAO,OAAO,iBAAiB,MAAM,GAC3C,GACA,uCACD;AAAA,MACA,WAAW,UAAU,SAAS;AAAA,QAC7B,OACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,OAAO,MAAM,GAAG,GACnE,qCACD;AAAA,MACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,SAAS,WACT,SAAS,MACT,GACD,GACA,UACA,gDACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,iBAAiB,MAAM,GAC3C,GACA,gEACD;AAAA;AAAA,EAEF;AACD;;;ACjDA,IAAM,SAAQ;AAMP,IAAM,mBAA+C;AAAA,EAC3D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY,EAAE,MAAM,gBAAgB,SAAS,GAAG,CAAC;AAAA,MAChE,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MAEtC,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,cAAc,GACjE,KAAK,QAAQ,UAAU,EAAE,GACzB,yIACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,gBACA,GAAG,0BAA0B,CAC9B,GACA,KAAK,QAAQ,UAAU,EAAE,GACzB,iEACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY,EAAE,WAAW,GAAG,0BAA0B,EAAE,CAAC;AAAA,MACxE,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MAAM,QAAQ,MAAM,OAAO,OAAO,aACjC,OAAO,WACP,iBACA,GACD;AAAA,MAGA,IAAI,UAAU,MAAM;AAAA,QACnB,MACC,OACA,QACA,2DACD;AAAA,QACA,OAEE,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,iBACA,GACD,IACE,SACH,KACA,6EACD;AAAA,MACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY;AAAA,MAC3B,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,OAAO,OAAO,YAAY;AAAA,WAC5B;AAAA,QACH,SAAS;AAAA,MACV,CAAC;AAAA,MAED,MACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,iBACA,GAAG,0BAA0B,CAC9B,GACA,QACA,6DACD;AAAA;AAAA,EAEF;AACD;;;ACxFA,IAAM,UAAQ;AAQd,IAAM,QAAQ,OAAO,KAAK;AAAA,EACzB,aAAa;AAAA,EACb,eAAe;AAAA,EACf,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,QAAQ;AACT,CAAmC;AAG5B,IAAM,iBAA6C;AAAA,EACzD;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,MAAM,GAAG,0BAA0B;AAAA,MACzC,WAAW,QAAQ,OAAO;AAAA,QACzB,MAAM,SAAS,YAAY,EAAE,MAAM,UAAU,IAAI,OAAO,EAAE,EAAE,CAAC;AAAA,QAC7D,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,QAEtC,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,IAAI,GACvD,KAAK,QAAQ,UAAU,EAAE,GACzB,qBAAqB,8CACtB;AAAA,QACA,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,MAAM,GAAG,GAC5D,KAAK,QAAQ,UAAU,EAAE,GACzB,qBAAqB,sDACtB;AAAA,MACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,SAAS,YAAY,EAAE,QAAQ,MAAM,SAAS,CAAC;AAAA,MACrD,MAAM,aAAa,YAAY,EAAE,QAAQ,MAAM,aAAa,CAAC;AAAA,MAC7D,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,OAAO,OAAO,YAAY,UAAU;AAAA,MAC1C,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,OACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,YAAY,GAC/D,uDACD;AAAA,MACA,OACC,MAAM,OAAO,OAAO,aAAa,WAAW,WAAW,UAAU,GAAG,GACpE,wDACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,gBAAgB,QAAQ,UAAU,GAAG,GACzD,GACA,6CACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,WAAW,WACX,cACA,GACD,GACA,YACA,8FACD;AAAA;AAAA,EAEF;AACD;;;AC/EA,IAAM,UAAQ;AAMP,IAAM,uBAAmD;AAAA,EAC/D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY;AAAA,MAC3B,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,QAAQ,GAAG,0BAA0B;AAAA,MAE3C,MACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,iBACA,KACD,GACA,QACA,8EACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,iBACA,GAAG,0BAA0B,CAC9B,GACA,KAAK,QAAQ,SAAS,MAAM,GAC5B,qGACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY;AAAA,MAC3B,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACtC,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MAAM,UAAU,MAAM,QAAQ,IAC7B,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAC1B,OAAO,OAAO,aAAa,OAAO,WAAW,iBAAiB,GAAG,CAClE,CACD;AAAA,MAEA,MACC,QAAQ,OAAO,CAAC,WAAW,WAAW,QAAQ,OAAO,YAAY,IAAI,EACnE,QACF,GACA,qIACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,YAAY,EAAE,MAAM,cAAc,CAAC;AAAA,MAClD,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MAEtC,OACC,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,iBACA,GAAG,0BAA0B,CAC9B,GACA,gEACD;AAAA,MACA,MAAM,MAAM,MAAM,OAAO,OAAO,aAC/B,OAAO,WACP,eACA,GAAG,0BAA0B,CAC9B;AAAA,MACA,MACC,KACA,QACA,+GACD;AAAA,MACA,OACC,MAAM,OAAO,OAAO,aACnB,IAAI,OAAO,EAAE,GACb,iBACA,GAAG,0BAA0B,CAC9B,GACA,kCACD;AAAA;AAAA,EAEF;AACD;;;AC9FA,IAAM,UAAQ;AAMP,IAAM,qBAAiD;AAAA,EAC7D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,QAAQ,YAAY,EAAE,QAAQ,MAAM,aAAa,CAAC;AAAA,MACxD,MAAM,SAAS,YAAY,EAAE,QAAQ,MAAM,cAAc,UAAU,EAAE,CAAC;AAAA,MACtE,MAAM,cAAc,GAAG,0BAA0B;AAAA,MACjD,MAAM,QAAQ,YAAY;AAAA,QACzB;AAAA,QACA,MAAM;AAAA,QACN,SAAS;AAAA,MACV,CAAC;AAAA,MACD,MAAM,YAAY,YAAY,EAAE,QAAQ,MAAM,gBAAgB,CAAC;AAAA,MAC/D,MAAM,YAAY,YAAY,EAAE,MAAM,aAAa,CAAC;AAAA,MACpD,WAAW,UAAU,CAAC,OAAO,QAAQ,OAAO,WAAW,SAAS,GAAG;AAAA,QAClE,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACvC;AAAA,MACA,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MACC,MAAM,OAAO,OAAO,gBAAgB,QAAQ,cAAc,GAAG,GAC7D,GACA,mGACD;AAAA,MACA,WAAW,UAAU,CAAC,OAAO,MAAM,GAAG;AAAA,QACrC,MACC,MAAM,OAAO,OAAO,aAAa,OAAO,WAAW,cAAc,GAAG,GACpE,KAAK,QAAQ,SAAS,IAAI,GAC1B,oEACD;AAAA,MACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aAAa,MAAM,WAAW,cAAc,GAAG,GACnE,OACA,kEACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,UAAU,WACV,iBACA,GACD,GACA,WACA,0DACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aACnB,UAAU,WACV,cACA,GACD,GACA,WACA,+CACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,gBAAgB,QAAQ,cAAc,GAAG,GAC7D,GACA,4EACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,gBAAgB,QAAO,GAAG,cAAc,GAAG,GAC/D,GACA,2DACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,QAAO;AAAA,MACtB,MAAM,OAAO,YAAY,EAAE,QAAQ,MAAM,aAAa,CAAC;AAAA,MACvD,MAAM,SAAS;AAAA,QACd,YAAY,EAAE,QAAQ,MAAM,aAAa,CAAC;AAAA,QAC1C,YAAY,EAAE,QAAQ,MAAM,aAAa,CAAC;AAAA,MAC3C;AAAA,MACA,WAAW,UAAU,CAAC,MAAM,GAAG,MAAM,GAAG;AAAA,QACvC,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,MACvC;AAAA,MACA,MAAM,MAAM,GAAG,0BAA0B;AAAA,MAEzC,MACC,MAAM,OAAO,OAAO,gBACnB,QACA,cACA,KACA,KAAK,SACN,GACA,GACA,gFACD;AAAA,MACA,MACC,MAAM,OAAO,OAAO,aAAa,KAAK,WAAW,cAAc,GAAG,GAClE,MACA,4DACD;AAAA,MACA,WAAW,UAAU,QAAQ;AAAA,QAC5B,OAEE,MAAM,OAAO,OAAO,aACnB,OAAO,WACP,cACA,GACD,IACE,SACH,KACA,4DACD;AAAA,MACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,MAAM,GAAG,0BAA0B;AAAA,MACzC,SAAS,QAAQ,EAAG,QAAQ,IAAI,SAAS,GAAG;AAAA,QAC3C,MAAM,SAAS,YAAY,EAAE,MAAM,aAAa,CAAC;AAAA,QACjD,MAAM,OAAO,OAAO,YAAY,MAAM;AAAA,QAEtC,OAAO,SAAS,YAAY,MAAM,QAAQ,IAAI;AAAA,UAC7C,OAAO,OAAO,gBAAgB,OAAO,QAAQ,cAAc,GAAG;AAAA,UAC9D,OAAO,OAAO,aAAa,OAAO,WAAW,cAAc,GAAG;AAAA,QAC/D,CAAC;AAAA,QAED,MACC,WAAW,UAAU,YAAY,OAAO,IAAI,IAC5C,GACA,sFACD;AAAA,MACD;AAAA;AAAA,EAEF;AACD;;;AC5IO,IAAM,kBAA8C;AAAA,EAC1D,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;;ACZA,IAAM,UAAQ;AAGP,IAAM,oBAAgD;AAAA,EAC5D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,QAAQ,WAAW;AAAA,MACzB,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MACpC,MAAM,OAAO,MAAM,WAAW,KAAK;AAAA,MACnC,OAAO,SAAS,OAAO;AAAA,MAEvB,MACC,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,GACvC,MACA,iDACD;AAAA,MACA,OACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,2BACD;AAAA,MACA,OACC,MAAM,OAAO,MAAM,gBAAgB,OAAO,MAAM,SAAS,EAAE,GAC3D,4CACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,WAAW,OAAO,EAAE,GACvC,OACA,gGACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,SAAS,MAAM,EAAE,GACpC,OACA,0CACD;AAAA,MAEA,MAAM,YAAY,WAAW,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC;AAAA,MACtD,MACC,MAAM,OAAO,MAAM,WAAW,SAAS,GACvC,WACA,uDACD;AAAA;AAAA,EAEF;AACD;;;AC9CA,IAAM,UAAQ;AAGP,IAAM,kBAA8C;AAAA,EAC1D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MAEpC,MAAM,UAAU,MAAM,OAAO,MAAM,WAAW;AAAA,WAC1C;AAAA,QACH,QAAQ,EAAE,OAAO,uBAAuB;AAAA,MACzC,CAAC;AAAA,MAED,MACC,SACA,QACA,qEACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,QACA,yCACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAC1C,WAAW,EAAE,QAAQ,CAAC,wBAAwB,EAAE,CAAC,CAClD;AAAA,MAEA,MAAM,WAAW,MAAM,QAAQ,WAC9B,QAAQ,IAAI,CAAC,WAAW,OAAO,MAAM,WAAW,MAAM,CAAC,CACxD;AAAA,MACA,MAAM,WAAW,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,WAAW;AAAA,MAChE,MAAM,UAAU,SAAS,QAAQ,CAAC,MACjC,EAAE,WAAW,aAAa,CAAC,EAAE,MAAiB,IAAI,CAAC,CACpD;AAAA,MAEA,MACC,SAAS,QACT,GACA,yIACD;AAAA,MACA,WAAW,SAAS,SAAS;AAAA,QAC5B,OACC,OACA,gBACA,iBACA,2DACD;AAAA,QACA,MAAM,MAAM,MAAM,eAAe,+BAA+B;AAAA,QAChE,MACC,MAAM,OACN,0BACA,gDACD;AAAA,QACA,GACC,CAAC,MAAM,QAAQ,SAAS,wBAAwB,GAChD,wGAAwG,KAAK,UAAU,MAAM,OAAO,GACrI;AAAA,MACD;AAAA,MACA,IAAI,SAAS;AAAA,MACb,WAAW,UAAU,SAAS;AAAA,QAC7B,IAAK,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,MAAO;AAAA,UAAM,UAAU;AAAA,MAClE;AAAA,MACA,MAAM,QAAQ,GAAG,mDAAmD;AAAA;AAAA,EAEtE;AACD;;;AC7EA,IAAM,UAAQ;AAGP,IAAM,mBAA+C;AAAA,EAC3D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,UAAU,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAAM,WAAW,CAAC;AAAA,MAC7D,MAAM,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,GAAG,MACxC,WAAW,EAAE,MAAM,QAAQ,CAAC,CAC7B;AAAA,MAGA,YAAY,OAAO,WAAW,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG;AAAA,QAC/D,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,QACpC,MAAM,QAAQ,OAAO;AAAA,QACrB,IAAI,UAAU;AAAA,UAAW,MAAM,OAAO,MAAM,WAAW,KAAK;AAAA,MAC7D;AAAA,MACA,MAAM,WAAW,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE,EAAE,KAAK;AAAA,MAEzD,MAAM,OAAiB,CAAC;AAAA,MACxB,MAAM,QAAkB,CAAC;AAAA,MACzB,IAAI,QAAuB;AAAA,MAC3B,SAAS,OAAO,EAAG,OAAO,IAAI,QAAQ,GAAG;AAAA,QACxC,MAAM,SAAS,MAAM,OAAO,MAAM,UAAU;AAAA,UAC3C,MAAM;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACR,CAAC;AAAA,QACD,KAAK,KAAK,GAAG,OAAO,MAAM,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC;AAAA,QAChD,MAAM,KAAK,OAAO,MAAM,MAAM;AAAA,QAC9B,QAAQ,OAAO;AAAA,QACf,IAAI,UAAU;AAAA,UAAM;AAAA,MACrB;AAAA,MAEA,MAAM,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,0CAA0C;AAAA,MACpE,MACC,MACA,UACA,0DACD;AAAA,MAGA,MAAM,UAAU,MAAM,OAAO,MAAM,UAAU;AAAA,QAC5C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC;AAAA,MACD,GACC,QAAQ,MAAM,IAAI,OAAO,SAAS,IAClC,2EACD;AAAA;AAAA,EAEF;AACD;;;ACrDO,IAAM,eAAmC;AAAA,EAC/C,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU;AAAA,EACV,eAAe,CAAC;AACjB;AAMO,IAAM,gBAAmC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACD;AAOO,IAAM,uBAAwC;AAAA,EACpD,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,MAAM;AAAA,OACA,IAAG,GAAG,UAAU;AAAA,IACrB,MAAM,SAAS,WAAW,EAAE,aAAa,CAAC;AAAA,IAC1C,MACC,MAAM,OAAO,MAAM,WAAW,MAAM,GACpC,QACA,8GACD;AAAA,IACA,MAAM,qBAAqB,QAAQ,OAAO,EAAE;AAAA,IAE5C,MAAM,YAAgC;AAAA,SAClC;AAAA,MACH,aAAa,GAAG,0BAA0B;AAAA,MAC1C,UAAU;AAAA,MACV;AAAA,IACD;AAAA,IACA,MAAM,YAAY,QAAQ,OAAO,IAAI,WAAW,GAAG,cAAc;AAAA,IACjE,OACE,MAAM,OAAO,MAAM,WAAW,OAAO,IAAI,EAAE,WAAW,UAAU,CAAC,EAAE,GAAG,CAAC,GACtE,cACF,WACA,4EACD;AAAA,IAEA,MAAM,mBAAmB,QAAQ,OAAO,IAAI,SAAS;AAAA,IACrD,MAAM,gBAAgB,QAAQ,OAAO,EAAE;AAAA;AAEzC;AAGA,IAAM,YAAY,CAAC,YAClB,IAAI,KAAK,KAAK,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC;AAGxC,eAAe,oBAAoB,CAAC,QAAqB,IAAQ;AAAA,EAChE,MAAM,OAAO,MAAM,OAAO,MAAM,SAAS,EAAE;AAAA,EAC3C,GAAG,SAAS,MAAM,kDAAkD;AAAA,EACpE,MAAM,QAAQ,MAAM;AAAA,EACpB,GACC,UAAU,QAAQ,UAAU,WAC5B,mHACD;AAAA,EACA,MACC,OAAO,eACP,CAAC,GACD,6EACD;AAAA;AAID,eAAe,WAAW,CACzB,QACA,IACA,QACA,SACA,MACC;AAAA,EACD,MAAM,UAAU,MAAM,OAAO,MAAM,WAClC,IACA;AAAA,IACC,WAAW,UAAU,OAAO;AAAA,IAC5B,cAAc;AAAA,EACf,GACA,OACD;AAAA,EACA,MACC,QAAQ,cACR,QACA,qBAAqB,sFACtB;AAAA,EACA,OACE,MAAM,OAAO,MAAM,SAAS,EAAE,IAAI,cACnC,QACA,oCAAoC,2EACrC;AAAA;AAID,eAAe,kBAAkB,CAChC,QACA,IACA,WACC;AAAA,EACD,MAAM,OAAO,cAAc,OAAO,CAAC,GAAG,UAAU,UAAU,CAAC;AAAA,EAC3D,MAAM,YACL,QACA,IACA,KAAK,WAAW,eAAe,KAAK,GACpC,GACA,2CACD;AAAA,EACA,MAAM,YACL,QACA,IACA,KAAK,WAAW,eAAe,CAAC,EAAE,GAClC,GACA,oCACD;AAAA;AAID,eAAe,eAAe,CAAC,QAAqB,IAAQ;AAAA,EAC3D,MAAM,YACL,QACA,IACA,KAAK,cAAc,cAAc,GACjC,GACA,kCACD;AAAA,EACA,QAEE,MAAM,OAAO,MAAM,WAClB,IACA,EAAE,WAAW,UAAU,CAAC,GAAG,cAAc,KAAK,GAC9C,CACD,GACC,cACF,oEACD;AAAA,EACA,QACE,MAAM,OAAO,MAAM,SAAS,EAAE,IAAI,cACnC,kFACD;AAAA,EACA,MAAM,YACL,QACA,IACA,cACA,GACA,6FACD;AAAA;;;ACxJD,IAAM,UAAQ;AAMP,IAAM,iBAA6C;AAAA,EACzD;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,QACzB,QAAQ,EAAE,OAAO,qBAAqB,MAAM,MAAM;AAAA,QAClD,cAAc;AAAA,aACV;AAAA,UACH,aAAa,GAAG,0BAA0B;AAAA,UAC1C,UAAU;AAAA,UACV,eAAe,cAAc,MAAM,GAAG,CAAC;AAAA,QACxC;AAAA,QACA,iBAAiB,GAAG,0BAA0B;AAAA,MAC/C,CAAC;AAAA,MACD,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MAEpC,MAAM,UAAU,MAAM,OAAO,MAAM,WAClC,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,GAAG,eAAe,IAAI,GAChE,CACD;AAAA,MAEA,MACC,SACA;AAAA,WACI;AAAA,QACH,eAAe;AAAA,QACf,SAAS;AAAA,QACT,WAAW,GAAG,0BAA0B;AAAA,MACzC,GACA,gIACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MAEpC,MAAM,OAAO,MAAM,OAAO,MAAM,WAC/B,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,EAAE,GAC5C,CACD;AAAA,MACA,MACC,KAAK,UACL,OAAO,UACP,+CACD;AAAA,MAEA,MAAM,UAAU,MAAM,OAAO,MAAM,WAClC,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,GAAG,UAAU,KAAK,GAC5D,CACD;AAAA,MACA,OACC,QAAQ,UACR,2DACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,QAAQ,WAAW;AAAA,MACzB,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MACpC,MAAM,OAAO,MAAM,WAAW,KAAK;AAAA,MACnC,OAAO,OAAO,OAAO;AAAA,MACrB,MAAM,QAAQ;AAAA,MAEd,MAAM,OAAO,MAAM,WAClB,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,GAAG,QAAQ,CAAC,KAAK,EAAE,GAC7D,CACD;AAAA,MAEA,OACC,MAAM,OAAO,MAAM,gBAAgB,QAAQ,OAAO,EAAE,GACpD,iDACD;AAAA,MACA,OACE,MAAM,OAAO,MAAM,gBAAgB,QAAQ,KAAK,IAAI,IACrD,OAAO,IACP,gDACD;AAAA,MAEA,MAAM,QAAQ,MAAM,QACnB,OAAO,MAAM,WACZ,MAAM,IACN,EAAE,WAAW,GAAG,0BAA0B,GAAG,QAAQ,CAAC,KAAK,EAAE,GAC7D,CACD,GACA,0DACD;AAAA,MACA,OACC,OACA,gBACA,iBACA,+DACD;AAAA,MACA,MAAM,MAAM,MAAM,eAAe,+BAA+B;AAAA,MAChE,MACC,MAAM,OAAO,MAAM,SAAS,MAAM,EAAE,GACpC,OACA,4DACD;AAAA;AAAA,EAEF;AACD;;;AChIA,IAAM,UAAQ;AAMP,IAAM,gBAA4C;AAAA,EACxD;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,QACzB,QAAQ;AAAA,UACP,OAAO;AAAA,UACP,MAAM,EAAE,OAAO,OAAO,MAAM,WAAW;AAAA,UACvC,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO,CAAC,MAAM,OAAO,IAAI;AAAA,UACzB,MAAM;AAAA,UACN,SAAS;AAAA,UACT,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;AAAA,UAC5C,MAAM,CAAC,KAAK,GAAG;AAAA,QAChB;AAAA,QACA,iBAAiB,GAAG,0BAA0B;AAAA,MAC/C,CAAC;AAAA,MAED,MACC,MAAM,OAAO,MAAM,WAAW,MAAM,GACpC,QACA,+CACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,QACA,6DACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,OAAO;AAAA,MACb,MAAM,SAAS,WAAW;AAAA,QACzB,QAAQ,CAAC,IAAI;AAAA,QACb,QAAQ,EAAE,OAAO,qBAAqB,OAAO,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,EAAE;AAAA,MACvE,CAAC;AAAA,MAED,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MACpC,MACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,QACA,gEACD;AAAA,MACA,OACE,MAAM,OAAO,MAAM,gBAAgB,QAAQ,IAAI,IAAI,IACpD,OAAO,IACP,6DACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,OACC,MAAM,OAAO,MAAM,SAAS,QAAO,CAAC,GACpC,4BACD;AAAA,MACA,OACC,MAAM,OAAO,MAAM,gBAAgB,QAAQ,qBAAqB,GAChE,sCACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,UAAU,EAAE,MAAM,QAAQ,OAAO,MAAM,OAAO,GAAG,CAAC,GACrE,EAAE,OAAO,CAAC,GAAG,YAAY,KAAK,GAC9B,yDACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,QAAQ,WAAW,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AAAA,MACzD,MAAM,QAAQ,WAAW,EAAE,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AAAA,MACzD,MAAM,QAAQ,WAAW,EAAE,MAAM,SAAS,QAAQ,CAAC,kBAAkB,EAAE,CAAC;AAAA,MAExE,WAAW,UAAU,CAAC,OAAO,OAAO,KAAK,GAAG;AAAA,QAC3C,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MACrC;AAAA,MAEA,OACE,MAAM,OAAO,MAAM,gBAAgB,QAAQ,kBAAkB,IAAI,IAClE,MAAM,IACN,4DACD;AAAA,MACA,OACE,MAAM,OAAO,MAAM,gBAAgB,QAAQ,kBAAkB,IAAI,IAClE,MAAM,IACN,+EACD;AAAA,MACA,OACE,MAAM,OAAO,MAAM,gBAAgB,SAAS,kBAAkB,IAAI,IACnE,MAAM,IACN,mFACD;AAAA;AAAA,EAEF;AACD;;;AChHA,IAAM,UAAQ;AAMP,IAAM,mBAA+C;AAAA,EAC3D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MAEpC,MAAM,UAAU,MAAM,OAAO,MAAM,WAClC,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,GAAG,QAAQ,MAAM,GAC3D,CACD;AAAA,MACA,MAAM,WAAuB;AAAA,WACzB;AAAA,QACH,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW,GAAG,0BAA0B;AAAA,MACzC;AAAA,MAEA,MACC,SACA,UACA,gDACD;AAAA,MACA,MACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,UACA,2BACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,SAAS,WAAW;AAAA,MAC1B,MAAM,OAAO,MAAM,WAAW,MAAM;AAAA,MACpC,MAAM,OAAO,MAAM,WAClB,OAAO,IACP,EAAE,WAAW,GAAG,0BAA0B,GAAG,QAAQ,MAAM,GAC3D,CACD;AAAA,MACA,MAAM,SAAS,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE;AAAA,MAEpD,MAAM,QAAQ,MAAM,QACnB,OAAO,MAAM,WACZ,OAAO,IACP;AAAA,QACC,WAAW,GAAG,0BAA0B;AAAA,QACxC,QAAQ;AAAA,QACR,QAAQ,EAAE,OAAO,2BAA2B;AAAA,MAC7C,GACA,CACD,GACA,6CACD;AAAA,MAEA,OACC,OACA,gBACA,iBACA,gEACD;AAAA,MACA,MAAM,MAAM,MAAM,oBAAoB,+BAA+B;AAAA,MACrE,MAAM,MAAM,iBAAiB,GAAG,6BAA6B;AAAA,MAC7D,MAAM,MAAM,eAAe,GAAG,2BAA2B;AAAA,MAEzD,MACC,MAAM,OAAO,MAAM,SAAS,OAAO,EAAE,GACrC,QACA,gEACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,UAAU;AAAA,MACrB,MAAM,QAAQ,MAAM,QACnB,OAAO,MAAM,WACZ,QAAO,GACP,EAAE,WAAW,GAAG,0BAA0B,EAAE,GAC5C,CACD,GACA,2CACD;AAAA,MAEA,OACC,OACA,gBACA,iBACA,sFACD;AAAA;AAAA,EAEF;AACD;;;ACvGO,IAAM,iBAA6C;AAAA,EACzD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;;ACJO,IAAM,WAAuC;AAAA,EACnD,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;AAGO,IAAM,eAAe;AAAA,EAC3B,QACC;AAAA,EACD,uBACC;AACF;AASA,eAAsB,OAAO,CAC5B,iBACA,SACoE;AAAA,EACpE,MAAM,SAAuB,MAAM,QAAQ,KAAK;AAAA,EAEhD,IAAI;AAAA,IACH,IAAI,gBAAgB,UAAU,YAAY,OAAO,WAAW,WAAW;AAAA,MACtE,OAAO,EAAE,SAAS,aAAa,OAAO;AAAA,IACvC;AAAA,IACA,IACC,gBAAgB,UAAU,2BAC1B,OAAO,OAAO,SAAS,0BAA0B,WAChD;AAAA,MACD,OAAO,EAAE,SAAS,aAAa,sBAAsB;AAAA,IACtD;AAAA,IAEA,MAAM,gBAAgB,IAAI;AAAA,MACzB,QAAQ,OAAO;AAAA,MACf,QAAQ,OAAO,UAAU;AAAA,IAC1B,CAAC;AAAA,IACD,OAAO,EAAE,QAAQ,KAAK;AAAA,YACrB;AAAA,IACD,MAAM,OAAO,QAAQ;AAAA;AAAA;AAsBhB,SAAS,mBAAmB,CAAC,SAQ3B;AAAA,EACR,cAAc;AAAA,IACb,OAAO,GAAG,QAAQ;AAAA,IAClB,OAAO;AAAA,IACP,KAAK,CAAC,oBAAoB,QAAQ,iBAAiB,QAAQ,OAAO;AAAA,IAClE,QAAQ,QAAQ,UAAU,YAAY,qBAAqB;AAAA,IAC3D,MAAM,QAAQ,QAAQ,CAAC;AAAA,IACvB,QAAQ,QAAQ;AAAA,EACjB,CAAC;AAAA;AAgBK,SAAS,aAAsC,CAAC,SAS9C;AAAA,EACR,QAAQ,QAAQ,MAAM,UAAU;AAAA,EAChC,MAAM,SAAS,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAAA,EAErD,MAAM,QACL,QAAQ,WAAW,QAChB,GAAG,QAAQ,0BAA0B,aAAa,YAClD,QAAQ;AAAA,EAEZ,OAAO,SAAS,OAAO,MAAM;AAAA,IAC5B,WAAW,SAAS,QAAQ;AAAA,MAC3B,OAAO,SAAS,OAAO,MAAM;AAAA,QAC5B,WAAW,mBAAmB,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,KAAK,GAAG;AAAA,UACrE,MAAM,SAAS,KAAK,gBAAgB;AAAA,UACpC,IAAI,WAAW,WAAW;AAAA,YACzB,OAAO,GAAG,KACT,GAAG,gBAAgB,mBAAmB,UACtC,YAAY,EACb;AAAA,YACA;AAAA,UACD;AAAA,UACA,IAAI,gBAAgB,UAAU,YAAY,QAAQ,WAAW,OAAO;AAAA,YACnE,OAAO,GAAG,KACT,GAAG,gBAAgB,mBAAmB,aAAa,UACnD,YAAY,EACb;AAAA,YACA;AAAA,UACD;AAAA,UAEA,OAAO,GAAG,gBAAgB,MAAM,YAAY;AAAA,YAC3C,MAAM,UAAU,MAAM,QAAQ,IAAI,eAAe;AAAA,YACjD,IAAI,aAAa,SAAS;AAAA,cACzB,QAAQ,YACP,GAAG,gBAAgB,eAAe,QAAQ,WAC1C,EAAE,MAAM,4BAA4B,CACrC;AAAA,YACD;AAAA,WACA;AAAA,QACF;AAAA,OACA;AAAA,IACF;AAAA,GACA;AAAA;AAGK,SAAS,WAAW,CAAC,OAAkC;AAAA,EAC7D,MAAM,UAAU;AAAA,EAKhB,IACC,OAAO,QAAQ,aAAa,cAC5B,OAAO,QAAQ,OAAO,YACrB;AAAA,IACD,MAAM,IAAI,UACT,GAAG,mHACJ;AAAA,EACD;AAAA,EAEA,OAAO,EAAE,UAAU,QAAQ,UAAU,IAAI,QAAQ,GAAG;AAAA;;ACpK9C,SAAS,gBAAgB,GAAuB;AAAA,EACtD,OAAO;AAAA,SACA,KAAI,GAAG;AAAA,MACZ,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,SAAS,WAAW,oBAAmB,GAAG,OAAO;AAAA,MAEvD,MAAM,SAAsB;AAAA,aACrB,KAAI,CAAC,MAAM,QAAQ;AAAA,UACxB,QAAQ,IAAI,GAAG,QAAQ,QAAQ;AAAA;AAAA,MAEjC;AAAA,MAEA,OAAO,EAAE,QAAQ,OAAO;AAAA;AAAA,EAE1B;AAAA;AAGD,SAAS,UAAU,CAClB,QACA,SACc;AAAA,EACd,MAAM,OAAO,CAAmB,MAAc,UAAgB;AAAA,IAC7D,MAAM,UAAmC,CAAC;AAAA,IAC1C,YAAY,QAAQ,OAAO,OAAO,QAAQ,KAAK,GAAG;AAAA,MACjD,QAAQ,UAAU,IAAI,SAAoB;AAAA,QACzC,IAAI,QAAQ,IAAI,GAAG,QAAQ,QAAQ,GAAG;AAAA,UACrC,OAAO,QAAQ,OACd,IAAI,cAAa,GAAG,QAAQ,sCAAsC;AAAA,YACjE;AAAA,YACA,WAAW;AAAA,UACZ,CAAC,CACF;AAAA,QACD;AAAA,QACA,OAAQ,GAAoC,MAAM,OAAO,IAAI;AAAA;AAAA,IAE/D;AAAA,IACA,OAAO;AAAA;AAAA,EAGR,OAAO;AAAA,IACN,OAAO,KAAK,SAAS,OAAO,KAAK;AAAA,IACjC,UAAU,KAAK,YAAY,OAAO,QAAQ;AAAA,IAC1C,QAAQ,KAAK,UAAU,OAAO,MAAM;AAAA,EACrC;AAAA;;AC/CM,IAAM,SAAS,CAAC,MAAc,KAAa,QAAO,OAAe;AAAA,EACvE;AAAA,EACA;AACD;AACO,IAAM,MAAM,CAClB,MACA,IACA,cACiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACD;AACO,IAAM,QAAQ,CACpB,QACA,UACA,aACoB,EAAE,QAAQ,UAAU,QAAQ;AAG1C,IAAM,SAAS,CAAC,aACtB,SAAS,IAAI,cAAa,EAAE,KAAK;;;AC5BlC,IAAM,UAAQ;AAGP,IAAM,wBAAiD;AAAA,EAC7D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,OAAO,OAAO,MAAM;AAAA,MAC1B,MAAM,QAAQ,OAAO,MAAM;AAAA,MAC3B,MAAM,OAAO;AAAA,QACZ,MAAM,OAAO,UAAU,OAAO,OAAO,CAAC;AAAA,QACtC,MAAM,OAAO,QAAQ,GAAG,UAAU,IAAI,QAAQ,MAAM,IAAI,QAAQ,CAAC;AAAA,MAClE;AAAA,MACA,MAAM,MAAM,MAAM;AAAA,QACjB,KAAK;AAAA,UACJ,MAAM,MAAM,UAAU,OAAO,OAAO,CAAC;AAAA,UACrC,MAAM,OAAO,QAAQ,GAAG,QAAQ,IAAI;AAAA,UACpC,MAAM,OAAO,QAAQ,GAAG,UAAU,IAAI,QAAQ,KAAK,IAAI,QAAQ,CAAC;AAAA,UAChE,GAAG;AAAA,QACJ;AAAA,MACD,CAAC;AAAA,MAED,MACC,MAAM,MAAM,aAAa,IAAI,GAC7B,GACA,mCACD;AAAA,MACA,WAAW,YAAY,MAAM;AAAA,QAC5B,MACC,MAAM,MAAM,IAAI,QAAQ,GACxB,MACA,8CACD;AAAA,MACD;AAAA,MACA,MACC,MAAM,MAAM,aAAa,IAAI,GAC7B,GACA,gDACD;AAAA;AAAA,EAEF;AACD;;;AC1CA,IAAM,UAAQ;AAOP,IAAM,oBAA6C;AAAA,EACzD;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,UAAU,SAAS;AAAA,MACzC,MAAM,SAAS,MAAM,QAAQ,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,MAC5D,MAAM,YAAY,MAAM,QAAQ,UAAU,IAAI,QAAQ,MAAM,QAAQ,CAAC;AAAA,MACrE,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,QAAQ,SAAS,EAAE,CAAC;AAAA,MAE9C,MAAM,MAAM,MAAM,IAAI,MAAM,GAAG,MAAM,yBAAyB;AAAA,MAC9D,MAAM,MAAM,MAAM,IAAI,SAAS,GAAG,MAAM,+BAA+B;AAAA,MACvE,MACC,MAAM,MAAM,IAAI,MAAM,QAAQ,UAAU,OAAO,WAAW,IAAI,CAAC,CAAC,GAChE,OACA,+EACD;AAAA,MACA,MACC,MAAM,MAAM,IAAI,MAAM,QAAQ,UAAU,OAAO,QAAQ,IAAI,CAAC,CAAC,GAC7D,OACA,qEACD;AAAA,MACA,MACC,MAAM,MAAM,IACX,MAAM,OAAO,UAAU,SAAS,GAAG,UAAU,OAAO,OAAO,CAC5D,GACA,OACA,uEACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MAGpB,MAAM,OAAO;AAAA,MACb,MAAM,SAAS,OAAO,UAAU,IAAI;AAAA,MACpC,MAAM,UAAU,MAAM,QAAQ,UAAU,IAAI,QAAQ,MAAM,QAAQ,CAAC;AAAA,MACnE,MAAM,SAAS,MAAM,QAAQ,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,MAC5D,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,SAAS,MAAM,EAAE,CAAC;AAAA,MAE5C,MAAM,MAAM,MAAM,IAAI,OAAO,GAAG,MAAM,gCAAgC;AAAA,MAGtE,MACC,MAAM,MAAM,gBAAgB,QAAQ,QAAQ,GAC5C,CAAC,IAAI,QAAQ,MAAM,QAAQ,CAAC,GAC5B,+CACD;AAAA,MACA,MACC,MAAM,MAAM,aAAa,QAAQ,QAAQ,GACzC,CAAC,OAAO,SAAS,IAAI,CAAC,GACtB,+CACD;AAAA,MACA,MACC,MAAM,MAAM,YAAY;AAAA,QACvB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,OAAO;AAAA,QAChB,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC,GACD,EAAE,OAAO,CAAC,IAAI,GAAG,YAAY,KAAK,GAClC,8CACD;AAAA,MACA,MACC,MAAM,MAAM,IACX,MACC,OAAO,UAAU,KAAK,QAAQ,gBAAM,cAAI,CAAC,GACzC,UACA,QAAQ,OACT,CACD,GACA,OACA,iDACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,QAAQ,OAAO,OAAO;AAAA,MAE5B,MAAM,SAAS,KAAK,OAAO,UAAU,UAAU;AAAA,MAC/C,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,QAAQ,UAAU,MAAM,CAAC,EAAE,CAAC;AAAA,MAE5D,MACC,MAAM,MAAM,IAAI,MAAM,QAAQ,UAAU,KAAK,CAAC,GAC9C,MACA,+DACD;AAAA,MACA,MACC,MAAM,MAAM,aAAa,QAAQ,QAAQ,GACzC,CAAC,KAAK,GACN,yCACD;AAAA,MACA,MACC,MAAM,MAAM,gBAAgB,QAAQ,QAAQ,GAC5C,CAAC,GACD,gDACD;AAAA,MACA,MACC,MAAM,MAAM,YAAY;AAAA,QACvB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC,GACD,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,YAAY,KAAK,GACvC,8DACD;AAAA,MACA,MACC,MAAM,MAAM,YAAY;AAAA,QACvB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS,IAAI,SAAS,MAAM,IAAI,GAAG;AAAA,QACnC,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC,GACD,EAAE,OAAO,CAAC,GAAG,YAAY,KAAK,GAC9B,+DACD;AAAA,MACA,MAAM,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,QAAQ,UAAU,MAAM,CAAC,EAAE,CAAC;AAAA,MAC/D,MACC,MAAM,MAAM,IAAI,MAAM,QAAQ,UAAU,KAAK,CAAC,GAC9C,OACA,gDACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,QAAQ,OAAO,OAAO;AAAA,MAE5B,MAAM,MAAM,MAAM,IAAI,MAAM,QAAQ,UAAU,KAAK,CAAC,GAAG,OAAO,KAAK;AAAA,MACnE,MACC,MAAM,MAAM,gBAAgB,QAAQ,QAAQ,GAC5C,CAAC,GACD,iBACD;AAAA,MACA,MAAM,MAAM,MAAM,aAAa,QAAQ,QAAQ,GAAG,CAAC,GAAG,cAAc;AAAA,MACpE,MACC,MAAM,MAAM,YAAY;AAAA,QACvB,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC,GACD,EAAE,OAAO,CAAC,GAAG,YAAY,KAAK,GAC9B,+BACD;AAAA,MACA,MAAM,MAAM,MAAM,aAAa,KAAK,GAAG,GAAG,cAAc;AAAA;AAAA,EAE1D;AACD;;;AC/KA,IAAM,UAAQ;AAMP,IAAM,yBAAkD;AAAA,EAC9D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,QAAQ,OAAO,OAAO;AAAA,MAC5B,MAAM,OAAO,OAAO,MAAM;AAAA,MAC1B,MAAM,UAAU,IAAI,QAAQ,KAAK,IAAI,QAAQ;AAAA,MAC7C,MAAM,QAAQ,IAAI,QAAQ,KAAK,IAAI,MAAM;AAAA,MACzC,MAAM,MAAM,MAAM;AAAA,QACjB,KAAK;AAAA,UACJ,MAAM,QAAQ,UAAU,KAAK;AAAA,UAC7B,MAAM,QAAQ,UAAU,IAAI;AAAA,UAC5B,MAAM,QAAQ,UAAU,OAAO;AAAA,UAC/B,MAAM,QAAQ,UAAU,KAAK;AAAA,UAE7B,MAAM,QAAQ,UAAU,IAAI,QAAQ,KAAK,IAAI,OAAO,CAAC;AAAA,UACrD,MAAM,OAAO,QAAQ,GAAG,UAAU,IAAI,QAAQ,SAAS,QAAQ,CAAC;AAAA,QACjE;AAAA,MACD,CAAC;AAAA,MAED,MACC,OAAO,MAAM,MAAM,gBAAgB,QAAQ,QAAQ,CAAC,GACpD,OAAO,CAAC,SAAS,KAAK,CAAC,GACvB,kEACD;AAAA,MACA,MACC,OAAO,MAAM,MAAM,aAAa,QAAQ,QAAQ,CAAC,GACjD,OAAO,CAAC,OAAO,IAAI,CAAC,GACpB,0EACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,QAAQ,OAAO,OAAO;AAAA,MAC5B,MAAM,MAAM,MAAM,KACjB,EAAE,QAAQ,GAAG,GACb,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,GACxC;AAAA,MAEA,WAAW,MAAM,CAAC,GAAG,GAAG,EAAE,QAAQ,GAAG;AAAA,QACpC,MAAM,MAAM,MAAM;AAAA,UACjB,KAAK;AAAA,YACJ,MAAM,OAAO,UAAU,EAAE,GAAG,UAAU,KAAK;AAAA,YAC3C,MAAM,OAAO,UAAU,GAAG,KAAK,GAAG,UAAU,KAAK;AAAA,YACjD,MAAM,OAAO,UAAU,EAAE,GAAG,UAAU,KAAK;AAAA,YAC3C,MACC,OAAO,UAAU,GAAG,KAAK,GACzB,UACA,IAAI,SAAS,MAAM,IAAI,GAAG,CAC3B;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,MAEA,MAAM,OAAiB,CAAC;AAAA,MACxB,MAAM,QAAkB,CAAC;AAAA,MACzB,IAAI,QAAuB;AAAA,MAC3B,SAAS,OAAO,EAAG,OAAO,IAAI,QAAQ,GAAG;AAAA,QACxC,MAAM,SAAS,MAAM,MAAM,YAAY;AAAA,UACtC,MAAM;AAAA,UACN,UAAU;AAAA,UACV,SAAS;AAAA,UACT;AAAA,UACA,OAAO;AAAA,QACR,CAAC;AAAA,QACD,KAAK,KAAK,GAAG,OAAO,KAAK;AAAA,QACzB,MAAM,KAAK,OAAO,MAAM,MAAM;AAAA,QAC9B,QAAQ,OAAO;AAAA,QACf,IAAI,UAAU;AAAA,UAAM;AAAA,MACrB;AAAA,MAEA,MAAM,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,8CAA8C;AAAA,MACxE,MAAM,MAAM,KAAK,gDAAgD;AAAA,MACjE,MAAM,UAAU,MAAM,MAAM,YAAY;AAAA,QACvC,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,QACT,OAAO;AAAA,QACP,OAAO;AAAA,MACR,CAAC;AAAA,MACD,MACC,QAAQ,OACR,CAAC,OAAO,KAAK,GACb,qEACD;AAAA;AAAA,EAEF;AACD;;;ACpGA,IAAM,UAAQ;AAGP,IAAM,qBAA8C;AAAA,EAC1D;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,SAAS,MAAM,QAAQ,UAAU,OAAO,MAAM,CAAC;AAAA,MACrD,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAAA,MACnC,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAAA,MACnC,MAAM,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,QAAQ,UAAU,OAAO,MAAM,CAAC,CAAC,EAAE,CAAC;AAAA,MAEvE,OACE,MAAM,MAAM,aAAa,QAAQ,QAAQ,GAAG,QAC7C,GACA,mDACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,QAAQ,IACb,MAAM,KAAK,EAAE,QAAQ,GAAG,GAAG,MAC1B,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,QAAQ,UAAU,MAAM,CAAC,EAAE,CAAC,CACvD,CACD;AAAA,MAEA,MACC,MAAM,MAAM,aAAa,QAAQ,QAAQ,GACzC,CAAC,MAAM,GACP,wDACD;AAAA;AAAA,EAEF;AAAA,EACA;AAAA,IACC,IAAI;AAAA,IACJ;AAAA,IACA,MAAM;AAAA,SACA,IAAG,GAAG,SAAS;AAAA,MACpB,MAAM,SAAS,OAAO,QAAQ;AAAA,MAC9B,MAAM,SAAS,MAAM,QAAQ,SAAS,OAAO,SAAS,GAAG,CAAC;AAAA,MAC1D,MAAM,QAAQ,MAAM,QAAQ,SAAS,OAAO,SAAS,GAAG,CAAC;AAAA,MACzD,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAAA,MAEnC,MAAM,MAAM,MAAM,EAAE,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AAAA,MAEpD,MAAM,MAAM,MAAM,IAAI,MAAM,GAAG,OAAO,mBAAmB;AAAA,MACzD,MAAM,MAAM,MAAM,IAAI,KAAK,GAAG,MAAM,iBAAiB;AAAA;AAAA,EAEvD;AACD;;;ACvDO,IAAM,qBAA8C;AAAA,EAC1D,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACJ;;ACCA,SAAS,OAAM,CACd,QACA,MACA,OACe;AAAA,EACf,OAAO;AAAA,IACN,IAAI,UAAU;AAAA,IACd,OAAO;AAAA,IACP,MAAM,aAAa;AAAA,IACnB,OAAO;AAAA,SACD,IAAG,GAAG,OAAO,UAAU;AAAA,MAC5B,MAAM,MAAM,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;AAAA,MACnC,MAAM,QAAQ,KAAK,MAAM;AAAA,MAEzB,MAAM,QAAQ,MAAM,QACnB,KAAK,KAAK,GACV,aAAa,sCACd;AAAA,MACA,IACC,iBAAiB,eAChB,OAA8B,SAAS,gBACvC;AAAA,QACD,OACC,OACA,eACA,gBACA,aAAa,wBACd;AAAA,MACD;AAAA,MACA,GACE,OAAqC,SAAS,aAC/C,aAAa,+EACd;AAAA,MACA,MAAM,QAAQ,KAAK;AAAA;AAAA,EAErB;AAAA;AAGD,IAAM,eAAuB,EAAE,MAAM,UAAU,IAAI,SAAS;AAC5D,IAAM,gBAAwB,EAAE,MAAM,SAAS,IAAI,SAAS;AAC5D,IAAM,SAAS,MAAM,cAAc,UAAU,aAAa;AAEnD,IAAM,sBAA+C;AAAA,EAC3D,QACC,SACA,CAAC,UACA,MAAM,MAAM;AAAA,IACX,QAAQ,CAAC,MAAM;AAAA,IACf,KAAK,CAAC,MAAM,cAAc,SAAS,aAAa,CAAC;AAAA,EAClD,CAAC,GAEF,OAAO,UAAU;AAAA,IAChB,MACC,MAAM,MAAM,IAAI,MAAM,GACtB,MACA,gFACD;AAAA,IACA,MACC,MAAM,MAAM,IAAI,MAAM,cAAc,SAAS,aAAa,CAAC,GAC3D,OACA,8EACD;AAAA,GAEF;AAAA,EACA,QAAO,OAAO,CAAC,UAAU,MAAM,IAAI,MAAM,CAAC;AAAA,EAC1C,QAAO,mBAAmB,CAAC,UAC1B,MAAM,gBAAgB,cAAc,QAAQ,CAC7C;AAAA,EACA,QAAO,gBAAgB,CAAC,UAAU,MAAM,aAAa,cAAc,QAAQ,CAAC;AAAA,EAC5E,QAAO,eAAe,CAAC,UACtB,MAAM,YAAY;AAAA,IACjB,MAAM;AAAA,IACN,UAAU;AAAA,IACV,SAAS;AAAA,IACT,OAAO;AAAA,IACP,OAAO;AAAA,EACR,CAAC,CACF;AAAA,EACA,QAAO,gBAAgB,CAAC,UAAU,MAAM,aAAa,aAAa,CAAC;AACpE;;ACrFO,IAAM,mBAA4C;AAAA,EACxD,GAAG;AAAA,EACH,GAAG;AACJ;AAGA,eAAsB,eAAe,CACpC,cACA,SACoE;AAAA,EACpE,MAAM,SAAS,MAAM,QAAQ,KAAK;AAAA,EAElC,IAAI;AAAA,IACH,IAAI,aAAa,UAAU,YAAY,OAAO,WAAW,WAAW;AAAA,MACnE,OAAO,EAAE,SAAS,aAAa,OAAO;AAAA,IACvC;AAAA,IACA,MAAM,aAAa,IAAI;AAAA,MACtB,OAAO,OAAO;AAAA,MACd,QAAQ,OAAO,UAAU;AAAA,IAC1B,CAAC;AAAA,IACD,OAAO,EAAE,QAAQ,KAAK;AAAA,YACrB;AAAA,IACD,MAAM,OAAO,QAAQ;AAAA;AAAA;AAKhB,SAAS,sBAAsB,CAAC,SAO9B;AAAA,EACR,cAAc;AAAA,IACb,OAAO,GAAG,QAAQ;AAAA,IAClB,OAAO;AAAA,IACP,KAAK,CAAC,iBAAiB,gBAAgB,cAAc,QAAQ,OAAO;AAAA,IACpE,QAAQ,QAAQ,UAAU,YAAY,wBAAwB;AAAA,IAC9D,MAAM,QAAQ,QAAQ,CAAC;AAAA,IACvB,QAAQ,QAAQ;AAAA,EACjB,CAAC;AAAA;;AC3CK,SAAS,wBAAwB,GAAoB;AAAA,EAC3D,OAAO;AAAA,SACA,KAAI,GAAG;AAAA,MACZ,MAAM,UAAU,IAAI;AAAA,MACpB,MAAM,QAAQ,uBAAsB;AAAA,MACpC,MAAM,QAAQ,OAAO,YACpB,OAAO,QAAQ,KAAK,EAAE,IAAI,EAAE,QAAQ,QAAQ;AAAA,QAC3C;AAAA,QACA,IAAI,SACH,QAAQ,IAAI,MAAM,IACf,QAAQ,OACR,IAAI,cACH,aAAa,sCACb;AAAA,UACC,MAAM;AAAA,UACN,WAAW;AAAA,QACZ,CACD,CACD,IACE,GAAoC,MAAM,OAAO,IAAI;AAAA,MAC3D,CAAC,CACF;AAAA,MAEA,OAAO;AAAA,QACN;AAAA,QACA,QAAQ;AAAA,eACD,KAAI,CAAC,QAAQ;AAAA,YAClB,QAAQ,IAAI,MAAM;AAAA;AAAA,QAEpB;AAAA,MACD;AAAA;AAAA,EAEF;AAAA;",
|
|
43
|
+
"debugId": "B2CA4E7F432AAE2464756E2164756E21",
|
|
42
44
|
"names": []
|
|
43
45
|
}
|
|
@@ -109,6 +109,13 @@ export type JanusErrorCode =
|
|
|
109
109
|
* `disable` it first: enrolling again must not quietly switch it off.
|
|
110
110
|
*/
|
|
111
111
|
| 'SECOND_FACTOR_ACTIVE'
|
|
112
|
+
/**
|
|
113
|
+
* The session proved who it is longer ago than the action asks —
|
|
114
|
+
* `assertFresh`, and `fresh()` in `@nxgt/janus-hono`. Not a denial: ask
|
|
115
|
+
* for a step-up, and the same request goes through once it is confirmed.
|
|
116
|
+
* Carries `userId`.
|
|
117
|
+
*/
|
|
118
|
+
| 'STEP_UP_REQUIRED'
|
|
112
119
|
/** A cursor this store did not mint, or one written for another ordering.
|
|
113
120
|
* Never a silent first page: a caller paging a list would loop for ever. */
|
|
114
121
|
| 'INVALID_CURSOR'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc;AACzB;;;;;;;;;;GAUG;AACD,cAAc;AAChB;;;;;GAKG;GACD,WAAW;AACb;;;;;;;GAOG;GACD,aAAa;AACf;;;;GAIG;GACD,kBAAkB;AACpB;;;GAGG;GACD,cAAc;AAChB;;;GAGG;GACD,oBAAoB;AACtB;;;;;GAKG;GACD,qBAAqB;AACvB;;;;GAIG;GACD,kBAAkB;AACpB;;;GAGG;GACD,eAAe;AACjB,kCAAkC;GAChC,eAAe;AACjB;;;GAGG;GACD,aAAa;AACf;;;GAGG;GACD,eAAe;AACjB;;;GAGG;GACD,aAAa;AACf;;;;;;GAMG;GACD,cAAc;AAChB,yEAAyE;GACvE,4BAA4B;AAC9B;;;GAGG;GACD,sBAAsB;AACxB;4EAC4E;GAC1E,gBAAgB;AAClB;;;;GAIG;GACD,aAAa;AACf;;;;;;GAMG;GACD,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,cAAc;AACzB;;;;;;;;;;GAUG;AACD,cAAc;AAChB;;;;;GAKG;GACD,WAAW;AACb;;;;;;;GAOG;GACD,aAAa;AACf;;;;GAIG;GACD,kBAAkB;AACpB;;;GAGG;GACD,cAAc;AAChB;;;GAGG;GACD,oBAAoB;AACtB;;;;;GAKG;GACD,qBAAqB;AACvB;;;;GAIG;GACD,kBAAkB;AACpB;;;GAGG;GACD,eAAe;AACjB,kCAAkC;GAChC,eAAe;AACjB;;;GAGG;GACD,aAAa;AACf;;;GAGG;GACD,eAAe;AACjB;;;GAGG;GACD,aAAa;AACf;;;;;;GAMG;GACD,cAAc;AAChB,yEAAyE;GACvE,4BAA4B;AAC9B;;;GAGG;GACD,sBAAsB;AACxB;;;;;GAKG;GACD,kBAAkB;AACpB;4EAC4E;GAC1E,gBAAgB;AAClB;;;;GAIG;GACD,aAAa;AACf;;;;;;GAMG;GACD,kBAAkB,CAAC"}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
export { JanusError } from './base';
|
|
12
12
|
export type { JanusErrorCode } from './codes';
|
|
13
13
|
export type { CredentialRefusal, Issue, JanusErrorOptions } from './options';
|
|
14
|
-
export { CredentialError, InvalidCursorError, PermissionDepthError, SecondFactorError, TokenError, UnsupportedError, UserInactiveError, UserInvalidError, } from './refusals';
|
|
14
|
+
export { CredentialError, InvalidCursorError, PermissionDepthError, SecondFactorError, StepUpRequiredError, TokenError, UnsupportedError, UserInactiveError, UserInvalidError, } from './refusals';
|
|
15
15
|
export { type JanusErrorStatus, statusOf } from './status';
|
|
16
16
|
export { NotFoundError, StoreConflict, StoreFailure } from './store';
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -32,6 +32,14 @@ export declare class SecondFactorError extends JanusError {
|
|
|
32
32
|
readonly code: JanusErrorCode;
|
|
33
33
|
constructor(code: Extract<JanusErrorCode, 'SECOND_FACTOR_NOT_ENROLLED' | 'SECOND_FACTOR_ACTIVE'>, message: string, options?: JanusErrorOptions);
|
|
34
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* The session proved who it is longer ago than the action asks: confirm it
|
|
37
|
+
* with a step-up, then send the request again.
|
|
38
|
+
*/
|
|
39
|
+
export declare class StepUpRequiredError extends JanusError {
|
|
40
|
+
name: string;
|
|
41
|
+
readonly code: "STEP_UP_REQUIRED";
|
|
42
|
+
}
|
|
35
43
|
/** A cursor this store did not mint, or one for another ordering. */
|
|
36
44
|
export declare class InvalidCursorError extends JanusError {
|
|
37
45
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refusals.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/refusals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,gDAAgD;AAChD,qBAAa,gBAAiB,SAAQ,UAAU;IACtC,IAAI,SAAsB;IACnC,SAAkB,IAAI,EAAG,cAAc,CAAU;CACjD;AAED,0FAA0F;AAC1F,qBAAa,eAAgB,SAAQ,UAAU;IACrC,IAAI,SAAqB;IAClC,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACd,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,CACjE,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED,sEAAsE;AACtE,qBAAa,iBAAkB,SAAQ,UAAU;IACvC,IAAI,SAAuB;IACpC,SAAkB,IAAI,EAAG,eAAe,CAAU;CAClD;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAChC,IAAI,SAAgB;IAC7B,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACZ,eAAe,GACf,aAAa,GACb,eAAe,GACf,aAAa,GACb,cAAc,CAChB,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED,iEAAiE;AACjE,qBAAa,iBAAkB,SAAQ,UAAU;IACvC,IAAI,SAAuB;IACpC,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACd,4BAA4B,GAAG,sBAAsB,CACrD,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED,qEAAqE;AACrE,qBAAa,kBAAmB,SAAQ,UAAU;IACxC,IAAI,SAAwB;IACrC,SAAkB,IAAI,EAAG,gBAAgB,CAAU;CACnD;AAED,4EAA4E;AAC5E,qBAAa,gBAAiB,SAAQ,UAAU;IACtC,IAAI,SAAsB;IACnC,SAAkB,IAAI,EAAG,aAAa,CAAU;CAChD;AAED,0EAA0E;AAC1E,qBAAa,oBAAqB,SAAQ,UAAU;IAC1C,IAAI,SAA0B;IACvC,SAAkB,IAAI,EAAG,kBAAkB,CAAU;CACrD"}
|
|
1
|
+
{"version":3,"file":"refusals.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/refusals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAEnD,gDAAgD;AAChD,qBAAa,gBAAiB,SAAQ,UAAU;IACtC,IAAI,SAAsB;IACnC,SAAkB,IAAI,EAAG,cAAc,CAAU;CACjD;AAED,0FAA0F;AAC1F,qBAAa,eAAgB,SAAQ,UAAU;IACrC,IAAI,SAAqB;IAClC,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACd,oBAAoB,GAAG,qBAAqB,GAAG,kBAAkB,CACjE,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED,sEAAsE;AACtE,qBAAa,iBAAkB,SAAQ,UAAU;IACvC,IAAI,SAAuB;IACpC,SAAkB,IAAI,EAAG,eAAe,CAAU;CAClD;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAChC,IAAI,SAAgB;IAC7B,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACZ,eAAe,GACf,aAAa,GACb,eAAe,GACf,aAAa,GACb,cAAc,CAChB,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED,iEAAiE;AACjE,qBAAa,iBAAkB,SAAQ,UAAU;IACvC,IAAI,SAAuB;IACpC,SAAkB,IAAI,EAAE,cAAc,CAAC;gBAGtC,IAAI,EAAE,OAAO,CACZ,cAAc,EACd,4BAA4B,GAAG,sBAAsB,CACrD,EACD,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,iBAAiB;CAK5B;AAED;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACzC,IAAI,SAAyB;IACtC,SAAkB,IAAI,EAAG,kBAAkB,CAAU;CACrD;AAED,qEAAqE;AACrE,qBAAa,kBAAmB,SAAQ,UAAU;IACxC,IAAI,SAAwB;IACrC,SAAkB,IAAI,EAAG,gBAAgB,CAAU;CACnD;AAED,4EAA4E;AAC5E,qBAAa,gBAAiB,SAAQ,UAAU;IACtC,IAAI,SAAsB;IACnC,SAAkB,IAAI,EAAG,aAAa,CAAU;CAChD;AAED,0EAA0E;AAC1E,qBAAa,oBAAqB,SAAQ,UAAU;IAC1C,IAAI,SAA0B;IACvC,SAAkB,IAAI,EAAG,kBAAkB,CAAU;CACrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/errors/janus-error/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE7E;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,gBAAgB,CA+B/D"}
|
package/dist/index.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* `@nxgt/janus/conformance` fails an adapter that breaks it.
|
|
22
22
|
*/
|
|
23
23
|
export * from './auth/index';
|
|
24
|
-
export { CredentialError, type CredentialRefusal, InvalidCursorError, type Issue, JanusError, type JanusErrorCode, type JanusErrorOptions, type JanusErrorStatus, NotFoundError, PermissionDepthError, SecondFactorError, StoreConflict, StoreFailure, statusOf, TokenError, UnsupportedError, UserInactiveError, UserInvalidError, } from './errors/janus-error';
|
|
24
|
+
export { CredentialError, type CredentialRefusal, InvalidCursorError, type Issue, JanusError, type JanusErrorCode, type JanusErrorOptions, type JanusErrorStatus, NotFoundError, PermissionDepthError, SecondFactorError, StepUpRequiredError, StoreConflict, StoreFailure, statusOf, TokenError, UnsupportedError, UserInactiveError, UserInvalidError, } from './errors/janus-error';
|
|
25
25
|
export { type Id, isId, mintedAt, mintId, } from './ids/id';
|
|
26
26
|
export { type CursorPage, DEFAULT_PAGE_SIZE, invalidCursor, MAX_PAGE_SIZE, pageLimit, } from './pagination/cursor-page';
|
|
27
27
|
export { formatEntity, formatSubject, formatTuple, parseSubject, parseTuple, } from './subjects/notation';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,cAAc,cAAc,CAAC;AAC7B,OAAO,EACN,eAAe,EACf,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,KAAK,EACV,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,KAAK,EAAE,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,GACN,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,UAAU,EACf,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,SAAS,GACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,MAAM,EACX,OAAO,EACP,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,EACL,SAAS,GACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,cAAc,cAAc,CAAC;AAC7B,OAAO,EACN,eAAe,EACf,KAAK,iBAAiB,EACtB,kBAAkB,EAClB,KAAK,KAAK,EACV,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,KAAK,EAAE,EACP,IAAI,EACJ,QAAQ,EACR,MAAM,GACN,MAAM,UAAU,CAAC;AAClB,OAAO,EACN,KAAK,UAAU,EACf,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,SAAS,GACT,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACN,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,GACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,KAAK,MAAM,EACX,OAAO,EACP,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,EACL,SAAS,GACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
|