@nxgt/janus 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +148 -12
  2. package/dist/auth/email-flows/reset-password.d.ts.map +1 -1
  3. package/dist/auth/events.d.ts +3 -3
  4. package/dist/auth/index.d.ts +1 -1
  5. package/dist/auth/index.d.ts.map +1 -1
  6. package/dist/auth/magic-link.d.ts +3 -0
  7. package/dist/auth/magic-link.d.ts.map +1 -1
  8. package/dist/auth/one-time/issue.d.ts +6 -0
  9. package/dist/auth/one-time/issue.d.ts.map +1 -1
  10. package/dist/auth/port/assert-stores.d.ts.map +1 -1
  11. package/dist/auth/port/memory/users.d.ts.map +1 -1
  12. package/dist/auth/port/types/stores.d.ts +5 -0
  13. package/dist/auth/port/types/stores.d.ts.map +1 -1
  14. package/dist/auth/port/types/users.d.ts +17 -0
  15. package/dist/auth/port/types/users.d.ts.map +1 -1
  16. package/dist/auth/prepared.d.ts +21 -0
  17. package/dist/auth/prepared.d.ts.map +1 -0
  18. package/dist/auth/proven-sign-in.d.ts +22 -0
  19. package/dist/auth/proven-sign-in.d.ts.map +1 -0
  20. package/dist/auth/sign-in-code.d.ts +4 -0
  21. package/dist/auth/sign-in-code.d.ts.map +1 -1
  22. package/dist/auth/types/email-flows.d.ts +18 -0
  23. package/dist/auth/types/email-flows.d.ts.map +1 -1
  24. package/dist/auth/types/index.d.ts +2 -0
  25. package/dist/auth/types/index.d.ts.map +1 -1
  26. package/dist/auth/types/janus.d.ts +7 -5
  27. package/dist/auth/types/janus.d.ts.map +1 -1
  28. package/dist/auth/types/magic-link.d.ts +11 -0
  29. package/dist/auth/types/magic-link.d.ts.map +1 -1
  30. package/dist/auth/types/prepared.d.ts +41 -0
  31. package/dist/auth/types/prepared.d.ts.map +1 -0
  32. package/dist/auth/types/proven-sign-in.d.ts +43 -0
  33. package/dist/auth/types/proven-sign-in.d.ts.map +1 -0
  34. package/dist/auth/types/sign-in.d.ts +2 -2
  35. package/dist/auth/types/user-type.d.ts +15 -0
  36. package/dist/auth/types/user-type.d.ts.map +1 -1
  37. package/dist/auth/users/any-type-api.d.ts +2 -2
  38. package/dist/auth/users/any-type-api.d.ts.map +1 -1
  39. package/dist/auth/users/find-many.d.ts +29 -0
  40. package/dist/auth/users/find-many.d.ts.map +1 -0
  41. package/dist/auth/users/record-flows.d.ts.map +1 -1
  42. package/dist/auth/users/type-api.d.ts +2 -2
  43. package/dist/auth/users/type-api.d.ts.map +1 -1
  44. package/dist/chunks/{index-kvjj5xkp.js → index-6bjfv4xv.js} +8 -2
  45. package/dist/chunks/{index-kvjj5xkp.js.map → index-6bjfv4xv.js.map} +3 -3
  46. package/dist/conformance/cases/outage.d.ts.map +1 -1
  47. package/dist/conformance/cases/users/batch.d.ts +8 -0
  48. package/dist/conformance/cases/users/batch.d.ts.map +1 -0
  49. package/dist/conformance/cases/users/index.d.ts.map +1 -1
  50. package/dist/conformance/describe.d.ts +2 -1
  51. package/dist/conformance/describe.d.ts.map +1 -1
  52. package/dist/conformance/index.d.ts +1 -1
  53. package/dist/conformance/index.d.ts.map +1 -1
  54. package/dist/conformance/index.js +104 -44
  55. package/dist/conformance/index.js.map +7 -6
  56. package/dist/conformance/types.d.ts +10 -2
  57. package/dist/conformance/types.d.ts.map +1 -1
  58. package/dist/index.js +150 -23
  59. package/dist/index.js.map +14 -11
  60. package/docs/README.md +1 -1
  61. package/docs/guide/adapters.md +44 -4
  62. package/docs/guide/devices.md +4 -0
  63. package/docs/guide/email-flows.md +105 -0
  64. package/docs/guide/errors.md +2 -2
  65. package/docs/guide/events.md +2 -2
  66. package/docs/guide/magic-link.md +49 -2
  67. package/docs/guide/passwords.md +5 -2
  68. package/docs/guide/second-factor.md +1 -1
  69. package/docs/guide/sessions.md +94 -1
  70. package/docs/guide/sign-in-code.md +54 -2
  71. package/docs/guide/users.md +49 -0
  72. package/docs/roadmap.md +28 -39
  73. package/docs/troubleshooting.md +120 -7
  74. package/package.json +1 -1
@@ -1,10 +1,10 @@
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/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"],
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/batch.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 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",
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 fifteen methods whose honest\n * answer can be \"nothing\" — `null`, `false`, `0`, an empty page or list — a\n * store that cannot answer must **reject**, and the rejection must not be\n * `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\t{\n\t\t// Optional: a store without it is read with findUser, whose outage is\n\t\t// the case above.\n\t\t...outage(\n\t\t\t'users',\n\t\t\t'findUsers',\n\t\t\tasync ({ stores }) =>\n\t\t\t\tstores.users.findUsers?.call(stores.users, [user.id]),\n\t\t\tseed,\n\t\t),\n\t\tneeds: ['faults', 'findUsers'],\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",
@@ -19,6 +19,7 @@
19
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",
20
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",
21
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",
22
+ "import { mintId } from '../../../ids/id';\nimport { equal, ok } from '../../assert';\nimport { userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\nconst byId = (a: { id: string }, b: { id: string }) =>\n\ta.id < b.id ? -1 : a.id > b.id ? 1 : 0;\n\n/**\n * The optional `findUsers`: several users in one query. Skipped, with the\n * reason, for a store that does not implement it — the core then reads with\n * `findUser`.\n */\nexport const userBatchCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.findUsers',\n\t\tgroup,\n\t\tname: 'findUsers answers each stored user once, byte for byte and whatever its type, and leaves out an id nobody holds',\n\t\tneeds: 'findUsers',\n\t\tasync run({ stores }) {\n\t\t\tconst findUsers = stores.users.findUsers;\n\t\t\tok(findUsers !== undefined, 'findUsers should be present');\n\t\t\tconst patient = userRecord({ type: 'patient' });\n\t\t\tconst staff = userRecord({ type: 'staff' });\n\t\t\tconst other = userRecord();\n\t\t\tfor (const record of [patient, staff, other]) {\n\t\t\t\tawait stores.users.insertUser(record);\n\t\t\t}\n\n\t\t\tconst answer = await findUsers?.call(stores.users, [\n\t\t\t\tstaff.id,\n\t\t\t\tmintId(),\n\t\t\t\tpatient.id,\n\t\t\t]);\n\n\t\t\tok(\n\t\t\t\tArray.isArray(answer),\n\t\t\t\t'findUsers should answer a list — an absence is a shorter list, never null',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t[...(answer ?? [])].sort(byId),\n\t\t\t\t[patient, staff].sort(byId),\n\t\t\t\t'findUsers should answer the two stored users exactly as written, and only them',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.findUsersNone',\n\t\tgroup,\n\t\tname: 'findUsers answers an empty list, not null, when no id is held',\n\t\tneeds: 'findUsers',\n\t\tasync run({ stores }) {\n\t\t\tawait stores.users.insertUser(userRecord());\n\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUsers?.call(stores.users, [mintId(), mintId()]),\n\t\t\t\t[],\n\t\t\t\t'findUsers for ids nobody holds should answer []',\n\t\t\t);\n\t\t},\n\t},\n];\n",
22
23
  "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",
23
24
  "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",
24
25
  "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",
@@ -26,8 +27,8 @@
26
27
  "import { StoreConflict } from '../../../errors/janus-error';\nimport { equal, isNull, isOurs, rejects } from '../../assert';\nimport { at, userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\nimport {\n\trecoveryCodes,\n\tsecondFactor,\n\tsecondFactorSlotCase,\n} from './second-factor';\n\nconst group = 'users';\n\n/**\n * What a patch writes: the fields it names, and nothing else — a field left\n * out is kept, a slot named `null` is removed, a login moved away is freed.\n */\nexport const userPatchCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.omission',\n\t\tgroup,\n\t\tname: 'omission — the Kratos PUT trap: an update leaves every field it does not name exactly as it was',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord({\n\t\t\t\tfields: { email: 'kept@example.test', plan: 'pro' },\n\t\t\t\tsecondFactor: {\n\t\t\t\t\t...secondFactor,\n\t\t\t\t\tconfirmedAt: at('2026-01-03T00:00:00.000Z'),\n\t\t\t\t\tlastStep: 59_000_000,\n\t\t\t\t\trecoveryCodes: recoveryCodes.slice(0, 2),\n\t\t\t\t},\n\t\t\t\temailVerifiedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\t\t\tawait stores.users.insertUser(record);\n\n\t\t\tconst written = await stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z'), schemaVersion: '2' },\n\t\t\t\t0,\n\t\t\t);\n\n\t\t\tequal(\n\t\t\t\twritten,\n\t\t\t\t{\n\t\t\t\t\t...record,\n\t\t\t\t\tschemaVersion: '2',\n\t\t\t\t\tversion: 1,\n\t\t\t\t\tupdatedAt: at('2026-02-01T00:00:00.000Z'),\n\t\t\t\t},\n\t\t\t\t'updateUser naming only schemaVersion should leave active, fields, logins, password, secondFactor and emailVerifiedAt untouched',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.passwordSlot',\n\t\tgroup,\n\t\tname: 'keeps a password the patch does not name, and removes one the patch names null',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord();\n\t\t\tawait stores.users.insertUser(record);\n\n\t\t\tconst kept = await stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z') },\n\t\t\t\t0,\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tkept.password,\n\t\t\t\trecord.password,\n\t\t\t\t'updateUser not naming password should keep it',\n\t\t\t);\n\n\t\t\tconst removed = await stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-02T00:00:00.000Z'), password: null },\n\t\t\t\t1,\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tremoved.password,\n\t\t\t\t'updateUser with password: null should remove the password',\n\t\t\t);\n\t\t},\n\t},\n\tsecondFactorSlotCase,\n\t{\n\t\tid: 'users.loginsMove',\n\t\tgroup,\n\t\tname: 'moves logins on update: the old one is free, the new one found, one held elsewhere refused',\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 [old] = record.logins;\n\t\t\tconst moved = 'moved@example.test';\n\n\t\t\tawait stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z'), logins: [moved] },\n\t\t\t\t0,\n\t\t\t);\n\n\t\t\tisNull(\n\t\t\t\tawait stores.users.findUserByLogin('user', old ?? ''),\n\t\t\t\t'findUserByLogin for a login the update replaced',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.users.findUserByLogin('user', moved))?.id,\n\t\t\t\trecord.id,\n\t\t\t\t'findUserByLogin for the login the update wrote',\n\t\t\t);\n\n\t\t\tconst error = await rejects(\n\t\t\t\tstores.users.updateUser(\n\t\t\t\t\tother.id,\n\t\t\t\t\t{ updatedAt: at('2026-02-02T00:00:00.000Z'), logins: [moved] },\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t\t'updateUser onto a login another user holds should reject',\n\t\t\t);\n\t\t\tisOurs(\n\t\t\t\terror,\n\t\t\t\tStoreConflict,\n\t\t\t\t'StoreConflict',\n\t\t\t\t'updateUser onto a held login should reject with StoreConflict',\n\t\t\t);\n\t\t\tequal(error.code, 'LOGIN_TAKEN', 'updateUser: the conflict code');\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(other.id),\n\t\t\t\tother,\n\t\t\t\t'updateUser refused for a login should have written nothing',\n\t\t\t);\n\t\t},\n\t},\n];\n",
27
28
  "import { mintId } from '../../../ids/id';\nimport { equal, isNull } from '../../assert';\nimport { at, userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\n/**\n * What a read answers: the record exactly as written, `null` for an absence,\n * and a login found by its bytes alone.\n */\nexport const userReadCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.roundTrip',\n\t\tgroup,\n\t\tname: 'round-trips a record byte for byte: nested fields, a 1 that stays a number, a \"1\" that stays a string',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord({\n\t\t\t\tfields: {\n\t\t\t\t\temail: 'Ada@Example.test',\n\t\t\t\t\tname: { first: 'Ada', last: 'Lovelace' },\n\t\t\t\t\tcount: 1,\n\t\t\t\t\tcode: '1',\n\t\t\t\t\tzero: 0,\n\t\t\t\t\tflags: [true, false, null],\n\t\t\t\t\tnote: ' spaced ',\n\t\t\t\t\tunicode: 'Bob — ÿ',\n\t\t\t\t\tnested: { deep: { deeper: [1, { two: 2 }] } },\n\t\t\t\t\ttags: ['a', 'b'],\n\t\t\t\t},\n\t\t\t\temailVerifiedAt: at('2026-01-02T00:00:00.000Z'),\n\t\t\t});\n\n\t\t\tequal(\n\t\t\t\tawait stores.users.insertUser(record),\n\t\t\t\trecord,\n\t\t\t\t'insertUser should answer the record as stored',\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'findUser should answer the record exactly as it was written',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.edgeCharacters',\n\t\tgroup,\n\t\tname: 'round-trips every character the core lets through: control characters, U+FFFF and a surrogate pair',\n\t\tasync run({ stores }) {\n\t\t\tconst edge = 'a\\u0001\\u001f\\u007f\\uFFFF 😀 z';\n\t\t\tconst record = userRecord({\n\t\t\t\tlogins: [edge],\n\t\t\t\tfields: { email: 'ada@example.test', [edge]: [edge, { [edge]: edge }] },\n\t\t\t});\n\n\t\t\tawait stores.users.insertUser(record);\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(record.id),\n\t\t\t\trecord,\n\t\t\t\t'findUser should answer every edge character exactly as written',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.users.findUserByLogin('user', edge))?.id,\n\t\t\t\trecord.id,\n\t\t\t\t'findUserByLogin should find a login made of edge characters',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.absence',\n\t\tgroup,\n\t\tname: 'answers null for an absence, never undefined, and an empty page for an empty store',\n\t\tasync run({ stores }) {\n\t\t\tisNull(\n\t\t\t\tawait stores.users.findUser(mintId()),\n\t\t\t\t'findUser for an unknown id',\n\t\t\t);\n\t\t\tisNull(\n\t\t\t\tawait stores.users.findUserByLogin('user', 'nobody@example.test'),\n\t\t\t\t'findUserByLogin for an unknown login',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.users.listUsers({ type: 'user', after: null, limit: 10 }),\n\t\t\t\t{ items: [], nextCursor: null },\n\t\t\t\t'listUsers on an empty store should answer an empty page',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.loginBytes',\n\t\tgroup,\n\t\tname: 'compares logins as bytes, within one type: no case folding, no trimming, no collation',\n\t\tasync run({ stores }) {\n\t\t\tconst upper = userRecord({ logins: ['Ada@Example.test'] });\n\t\t\tconst lower = userRecord({ logins: ['ada@example.test'] });\n\t\t\tconst staff = userRecord({ type: 'staff', logins: ['ada@example.test'] });\n\n\t\t\tfor (const record of [upper, lower, staff]) {\n\t\t\t\tawait stores.users.insertUser(record);\n\t\t\t}\n\n\t\t\tequal(\n\t\t\t\t(await stores.users.findUserByLogin('user', 'Ada@Example.test'))?.id,\n\t\t\t\tupper.id,\n\t\t\t\t'findUserByLogin should find the login with its exact bytes',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.users.findUserByLogin('user', 'ada@example.test'))?.id,\n\t\t\t\tlower.id,\n\t\t\t\t'findUserByLogin should tell \"Ada@…\" from \"ada@…\": normalisation is the core’s',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\t(await stores.users.findUserByLogin('staff', 'ada@example.test'))?.id,\n\t\t\t\tstaff.id,\n\t\t\t\t'uniqueness is of (type, login): the same login under another type is another user',\n\t\t\t);\n\t\t},\n\t},\n];\n",
28
29
  "import type { UserRecord } from '../../../auth/port/types';\nimport { NotFoundError, StoreConflict } from '../../../errors/janus-error';\nimport { mintId } from '../../../ids/id';\nimport { equal, isOurs, rejects } from '../../assert';\nimport { at, userRecord } from '../../fixtures';\nimport type { ConformanceCase } from '../../types';\n\nconst group = 'users';\n\n/**\n * How an update is guarded: applied at the expected version, refused at a\n * stale one, and refused apart from both for an id nobody holds.\n */\nexport const userVersionCases: readonly ConformanceCase[] = [\n\t{\n\t\tid: 'users.versionIncrements',\n\t\tgroup,\n\t\tname: 'applies an update at the expected version, and answers the record written with its version one higher',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord();\n\t\t\tawait stores.users.insertUser(record);\n\n\t\t\tconst written = await stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z'), active: false },\n\t\t\t\t0,\n\t\t\t);\n\t\t\tconst expected: UserRecord = {\n\t\t\t\t...record,\n\t\t\t\tactive: false,\n\t\t\t\tversion: 1,\n\t\t\t\tupdatedAt: at('2026-02-01T00:00:00.000Z'),\n\t\t\t};\n\n\t\t\tequal(\n\t\t\t\twritten,\n\t\t\t\texpected,\n\t\t\t\t'updateUser should answer the record as written',\n\t\t\t);\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(record.id),\n\t\t\t\texpected,\n\t\t\t\t'findUser after updateUser',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.versionConflict',\n\t\tgroup,\n\t\tname: 'refuses a stale version with both versions, and leaves the record identical byte for byte',\n\t\tasync run({ stores }) {\n\t\t\tconst record = userRecord();\n\t\t\tawait stores.users.insertUser(record);\n\t\t\tawait stores.users.updateUser(\n\t\t\t\trecord.id,\n\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z'), active: false },\n\t\t\t\t0,\n\t\t\t);\n\t\t\tconst before = await stores.users.findUser(record.id);\n\n\t\t\tconst error = await rejects(\n\t\t\t\tstores.users.updateUser(\n\t\t\t\t\trecord.id,\n\t\t\t\t\t{\n\t\t\t\t\t\tupdatedAt: at('2026-03-01T00:00:00.000Z'),\n\t\t\t\t\t\tactive: true,\n\t\t\t\t\t\tfields: { email: 'overwritten@example.test' },\n\t\t\t\t\t},\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t\t'updateUser at a stale version should reject',\n\t\t\t);\n\n\t\t\tisOurs(\n\t\t\t\terror,\n\t\t\t\tStoreConflict,\n\t\t\t\t'StoreConflict',\n\t\t\t\t'updateUser at a stale version should reject with StoreConflict',\n\t\t\t);\n\t\t\tequal(error.code, 'VERSION_CONFLICT', 'updateUser: the conflict code');\n\t\t\tequal(error.expectedVersion, 0, 'updateUser: expectedVersion');\n\t\t\tequal(error.actualVersion, 1, 'updateUser: actualVersion');\n\t\t\t// A partial write that also reports a conflict is the worst of both.\n\t\t\tequal(\n\t\t\t\tawait stores.users.findUser(record.id),\n\t\t\t\tbefore,\n\t\t\t\t'updateUser refused for its version should have written nothing',\n\t\t\t);\n\t\t},\n\t},\n\t{\n\t\tid: 'users.unknownUpdate',\n\t\tgroup,\n\t\tname: 'refuses an update to an unknown id with NotFoundError, told apart from a version conflict',\n\t\tasync run({ stores }) {\n\t\t\tconst error = await rejects(\n\t\t\t\tstores.users.updateUser(\n\t\t\t\t\tmintId(),\n\t\t\t\t\t{ updatedAt: at('2026-02-01T00:00:00.000Z') },\n\t\t\t\t\t0,\n\t\t\t\t),\n\t\t\t\t'updateUser on an unknown id should reject',\n\t\t\t);\n\n\t\t\tisOurs(\n\t\t\t\terror,\n\t\t\t\tNotFoundError,\n\t\t\t\t'NotFoundError',\n\t\t\t\t'updateUser on an unknown id should reject with NotFoundError, not a version conflict',\n\t\t\t);\n\t\t},\n\t},\n];\n",
29
- "import type { ConformanceCase } from '../../types';\nimport { userDeletionCases } from './deletion';\nimport { userInsertCases } from './inserts';\nimport { userListingCases } from './listing';\nimport { userPatchCases } from './patches';\nimport { userReadCases } from './reads';\nimport { userVersionCases } from './versions';\n\n/** Every case of the user store, in the order they are described. */\nexport const userStoreCases: readonly ConformanceCase[] = [\n\t...userReadCases,\n\t...userInsertCases,\n\t...userVersionCases,\n\t...userPatchCases,\n\t...userListingCases,\n\t...userDeletionCases,\n];\n",
30
- "import { outageCases } from './cases/outage';\nimport { sessionStoreCases } from './cases/sessions';\nimport { tokenStoreCases } from './cases/tokens';\nimport { userStoreCases } from './cases/users';\nimport type {\n\tConformanceCase,\n\tConformanceHarness,\n\tConformanceRunner,\n\tOpenedStores,\n} from './types';\n\n/** Every case, in the order they are described. */\nexport const allCases: readonly ConformanceCase[] = [\n\t...userStoreCases,\n\t...sessionStoreCases,\n\t...tokenStoreCases,\n\t...outageCases,\n];\n\n/** Why a case did not run. A skip is always reported with its reason, never silent. */\nexport const SKIP_REASONS = {\n\tfaults:\n\t\t'faults not provided: the outage invariant is not proven for this adapter',\n\tdeleteExpiredSessions:\n\t\t'stores.sessions does not implement the optional deleteExpiredSessions',\n} as const;\n\n/**\n * Runs one case against one freshly opened set of stores, and closes them,\n * pass or fail. Answers the reason when the case cannot run on these stores.\n *\n * The runner-less layer: a loop over `allCases` calling this is a conformance\n * run with no test framework at all.\n */\nexport async function runCase(\n\tconformanceCase: ConformanceCase,\n\tharness: ConformanceHarness,\n): Promise<{ readonly skipped: string } | { readonly passed: true }> {\n\tconst opened: OpenedStores = await harness.open();\n\n\ttry {\n\t\tif (conformanceCase.needs === 'faults' && opened.faults === undefined) {\n\t\t\treturn { skipped: SKIP_REASONS.faults };\n\t\t}\n\t\tif (\n\t\t\tconformanceCase.needs === 'deleteExpiredSessions' &&\n\t\t\topened.stores.sessions.deleteExpiredSessions === undefined\n\t\t) {\n\t\t\treturn { skipped: SKIP_REASONS.deleteExpiredSessions };\n\t\t}\n\n\t\tawait conformanceCase.run({\n\t\t\tstores: opened.stores,\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/**\n * Describes the whole suite under the adapter's test runner.\n *\n * ```ts\n * import { describe, it } from 'bun:test';\n * describeJanusStores({ name: 'my adapter', harness, runner: { describe, it } });\n * ```\n *\n * `runner` may be left out under jest, or vitest with `globals: true`: the\n * suite then reads `describe` and `it` from `globalThis`. **Not under `bun\n * test`**, measured: Bun gives a test file `describe` and `it` as bare\n * identifiers, and not as properties of `globalThis` — so pass them.\n *\n * Whether a case can run depends on the stores its harness opens, which is only\n * known once they are open. So every case is described as a test; one that\n * cannot run passes **and says so in its name**, and a run without `faults`\n * is written above the suite, where it cannot be scrolled past.\n */\nexport function describeJanusStores(options: {\n\treadonly name: string;\n\treadonly harness: ConformanceHarness;\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\t/** Declared up front, so the report can say so before the first case runs. */\n\treadonly faults?: boolean;\n}): void {\n\tdescribeSuite({\n\t\ttitle: `${options.name} — @nxgt/janus conformance`,\n\t\tcases: allCases,\n\t\trun: (conformanceCase) => runCase(conformanceCase, options.harness),\n\t\trunner: options.runner ?? fromGlobals('describeJanusStores'),\n\t\tskip: options.skip ?? {},\n\t\tfaults: options.faults,\n\t});\n}\n\n/** What any suite's case declares, as far as describing it goes. */\ninterface DescribedCase {\n\treadonly id: string;\n\treadonly group: string;\n\treadonly name: string;\n\treadonly needs?: string;\n}\n\n/**\n * Describes one suite's cases, grouped, under a runner. Shared by every suite\n * this module exports, so a skip, an unproven outage and a missing runner read\n * the same in each.\n */\nexport function describeSuite<C extends DescribedCase>(options: {\n\treadonly title: string;\n\treadonly cases: readonly C[];\n\treadonly run: (\n\t\tconformanceCase: C,\n\t) => Promise<{ readonly skipped: string } | { readonly passed: true }>;\n\treadonly runner: ConformanceRunner;\n\treadonly skip: Readonly<Record<string, string>>;\n\treadonly faults: boolean | undefined;\n}): void {\n\tconst { runner, skip, cases } = options;\n\tconst groups = [...new Set(cases.map((c) => c.group))];\n\n\tconst title =\n\t\toptions.faults === false\n\t\t\t? `${options.title} (WITHOUT faults: ${SKIP_REASONS.faults})`\n\t\t\t: options.title;\n\n\trunner.describe(title, () => {\n\t\tfor (const group of groups) {\n\t\t\trunner.describe(group, () => {\n\t\t\t\tfor (const conformanceCase of cases.filter((c) => c.group === group)) {\n\t\t\t\t\tconst reason = skip[conformanceCase.id];\n\t\t\t\t\tif (reason !== undefined) {\n\t\t\t\t\t\trunner.it.skip(\n\t\t\t\t\t\t\t`${conformanceCase.name} — skipped: ${reason}`,\n\t\t\t\t\t\t\tasync () => {},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (conformanceCase.needs === 'faults' && options.faults === false) {\n\t\t\t\t\t\trunner.it.skip(\n\t\t\t\t\t\t\t`${conformanceCase.name} — skipped: ${SKIP_REASONS.faults}`,\n\t\t\t\t\t\t\tasync () => {},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\trunner.it(conformanceCase.name, async () => {\n\t\t\t\t\t\tconst outcome = await options.run(conformanceCase);\n\t\t\t\t\t\tif ('skipped' in outcome) {\n\t\t\t\t\t\t\tprocess.emitWarning(\n\t\t\t\t\t\t\t\t`${conformanceCase.id} skipped: ${outcome.skipped}`,\n\t\t\t\t\t\t\t\t{ code: 'JANUS_CONFORMANCE_SKIPPED' },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nexport function fromGlobals(where: string): ConformanceRunner {\n\tconst globals = globalThis as {\n\t\tdescribe?: ConformanceRunner['describe'];\n\t\tit?: ConformanceRunner['it'];\n\t};\n\n\tif (\n\t\ttypeof globals.describe !== 'function' ||\n\t\ttypeof globals.it !== 'function'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`${where}: no test runner on globalThis — pass runner: { describe, it } (under bun test: import them from 'bun:test')`,\n\t\t);\n\t}\n\n\treturn { describe: globals.describe, it: globals.it };\n}\n",
30
+ "import type { ConformanceCase } from '../../types';\nimport { userBatchCases } from './batch';\nimport { userDeletionCases } from './deletion';\nimport { userInsertCases } from './inserts';\nimport { userListingCases } from './listing';\nimport { userPatchCases } from './patches';\nimport { userReadCases } from './reads';\nimport { userVersionCases } from './versions';\n\n/** Every case of the user store, in the order they are described. */\nexport const userStoreCases: readonly ConformanceCase[] = [\n\t...userReadCases,\n\t...userBatchCases,\n\t...userInsertCases,\n\t...userVersionCases,\n\t...userPatchCases,\n\t...userListingCases,\n\t...userDeletionCases,\n];\n",
31
+ "import { outageCases } from './cases/outage';\nimport { sessionStoreCases } from './cases/sessions';\nimport { tokenStoreCases } from './cases/tokens';\nimport { userStoreCases } from './cases/users';\nimport type {\n\tCaseNeed,\n\tConformanceCase,\n\tConformanceHarness,\n\tConformanceRunner,\n\tOpenedStores,\n} from './types';\n\n/** Every case, in the order they are described. */\nexport const allCases: readonly ConformanceCase[] = [\n\t...userStoreCases,\n\t...sessionStoreCases,\n\t...tokenStoreCases,\n\t...outageCases,\n];\n\n/** Why a case did not run. A skip is always reported with its reason, never silent. */\nexport const SKIP_REASONS = {\n\tfaults:\n\t\t'faults not provided: the outage invariant is not proven for this adapter',\n\tdeleteExpiredSessions:\n\t\t'stores.sessions does not implement the optional deleteExpiredSessions',\n\tfindUsers:\n\t\t'stores.users does not implement the optional findUsers: findMany reads with findUser instead',\n} as const;\n\n/**\n * Runs one case against one freshly opened set of stores, and closes them,\n * pass or fail. Answers the reason when the case cannot run on these stores.\n *\n * The runner-less layer: a loop over `allCases` calling this is a conformance\n * run with no test framework at all.\n */\nexport async function runCase(\n\tconformanceCase: ConformanceCase,\n\tharness: ConformanceHarness,\n): Promise<{ readonly skipped: string } | { readonly passed: true }> {\n\tconst opened: OpenedStores = await harness.open();\n\n\ttry {\n\t\tconst missing = needsOf(conformanceCase).find(\n\t\t\t(need) => !provides(opened, need),\n\t\t);\n\t\tif (missing !== undefined) return { skipped: SKIP_REASONS[missing] };\n\n\t\tawait conformanceCase.run({\n\t\t\tstores: opened.stores,\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/** What a case needs, as a list, whether it declared one thing or several. */\nfunction needsOf(conformanceCase: ConformanceCase): readonly CaseNeed[] {\n\tconst { needs } = conformanceCase;\n\treturn needs === undefined ? [] : typeof needs === 'string' ? [needs] : needs;\n}\n\n/** Whether these stores, as opened, provide what a case needs. */\nfunction provides(opened: OpenedStores, need: CaseNeed): boolean {\n\tswitch (need) {\n\t\tcase 'faults':\n\t\t\treturn opened.faults !== undefined;\n\t\tcase 'deleteExpiredSessions':\n\t\t\treturn opened.stores.sessions.deleteExpiredSessions !== undefined;\n\t\tcase 'findUsers':\n\t\t\treturn opened.stores.users.findUsers !== undefined;\n\t}\n}\n\n/**\n * Describes the whole suite under the adapter's test runner.\n *\n * ```ts\n * import { describe, it } from 'bun:test';\n * describeJanusStores({ name: 'my adapter', harness, runner: { describe, it } });\n * ```\n *\n * `runner` may be left out under jest, or vitest with `globals: true`: the\n * suite then reads `describe` and `it` from `globalThis`. **Not under `bun\n * test`**, measured: Bun gives a test file `describe` and `it` as bare\n * identifiers, and not as properties of `globalThis` — so pass them.\n *\n * Whether a case can run depends on the stores its harness opens, which is only\n * known once they are open. So every case is described as a test; one that\n * cannot run passes **and says so in its name**, and a run without `faults`\n * is written above the suite, where it cannot be scrolled past.\n */\nexport function describeJanusStores(options: {\n\treadonly name: string;\n\treadonly harness: ConformanceHarness;\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\t/** Declared up front, so the report can say so before the first case runs. */\n\treadonly faults?: boolean;\n}): void {\n\tdescribeSuite({\n\t\ttitle: `${options.name} — @nxgt/janus conformance`,\n\t\tcases: allCases,\n\t\trun: (conformanceCase) => runCase(conformanceCase, options.harness),\n\t\trunner: options.runner ?? fromGlobals('describeJanusStores'),\n\t\tskip: options.skip ?? {},\n\t\tfaults: options.faults,\n\t});\n}\n\n/** What any suite's case declares, as far as describing it goes. */\ninterface DescribedCase {\n\treadonly id: string;\n\treadonly group: string;\n\treadonly name: string;\n\treadonly needs?: string | readonly string[];\n}\n\n/** What a described case needs, as a list, whether it named one thing or several. */\nfunction needsList(described: DescribedCase): readonly string[] {\n\tconst { needs } = described;\n\treturn needs === undefined ? [] : typeof needs === 'string' ? [needs] : needs;\n}\n\n/**\n * Describes one suite's cases, grouped, under a runner. Shared by every suite\n * this module exports, so a skip, an unproven outage and a missing runner read\n * the same in each.\n */\nexport function describeSuite<C extends DescribedCase>(options: {\n\treadonly title: string;\n\treadonly cases: readonly C[];\n\treadonly run: (\n\t\tconformanceCase: C,\n\t) => Promise<{ readonly skipped: string } | { readonly passed: true }>;\n\treadonly runner: ConformanceRunner;\n\treadonly skip: Readonly<Record<string, string>>;\n\treadonly faults: boolean | undefined;\n}): void {\n\tconst { runner, skip, cases } = options;\n\tconst groups = [...new Set(cases.map((c) => c.group))];\n\n\tconst title =\n\t\toptions.faults === false\n\t\t\t? `${options.title} (WITHOUT faults: ${SKIP_REASONS.faults})`\n\t\t\t: options.title;\n\n\trunner.describe(title, () => {\n\t\tfor (const group of groups) {\n\t\t\trunner.describe(group, () => {\n\t\t\t\tfor (const conformanceCase of cases.filter((c) => c.group === group)) {\n\t\t\t\t\tconst reason = skip[conformanceCase.id];\n\t\t\t\t\tif (reason !== undefined) {\n\t\t\t\t\t\trunner.it.skip(\n\t\t\t\t\t\t\t`${conformanceCase.name} — skipped: ${reason}`,\n\t\t\t\t\t\t\tasync () => {},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tneedsList(conformanceCase).includes('faults') &&\n\t\t\t\t\t\toptions.faults === false\n\t\t\t\t\t) {\n\t\t\t\t\t\trunner.it.skip(\n\t\t\t\t\t\t\t`${conformanceCase.name} — skipped: ${SKIP_REASONS.faults}`,\n\t\t\t\t\t\t\tasync () => {},\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\trunner.it(conformanceCase.name, async () => {\n\t\t\t\t\t\tconst outcome = await options.run(conformanceCase);\n\t\t\t\t\t\tif ('skipped' in outcome) {\n\t\t\t\t\t\t\tprocess.emitWarning(\n\t\t\t\t\t\t\t\t`${conformanceCase.id} skipped: ${outcome.skipped}`,\n\t\t\t\t\t\t\t\t{ code: 'JANUS_CONFORMANCE_SKIPPED' },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}\n\nexport function fromGlobals(where: string): ConformanceRunner {\n\tconst globals = globalThis as {\n\t\tdescribe?: ConformanceRunner['describe'];\n\t\tit?: ConformanceRunner['it'];\n\t};\n\n\tif (\n\t\ttypeof globals.describe !== 'function' ||\n\t\ttypeof globals.it !== 'function'\n\t) {\n\t\tthrow new TypeError(\n\t\t\t`${where}: no test runner on globalThis — pass runner: { describe, it } (under bun test: import them from 'bun:test')`,\n\t\t);\n\t}\n\n\treturn { describe: globals.describe, it: globals.it };\n}\n",
31
32
  "import { createMemoryStores } from '../auth/port/memory';\nimport type { JanusStores } from '../auth/port/types';\nimport { StoreFailure } from '../errors/janus-error';\nimport type { ConformanceHarness, StoreFaults } from './types';\n\n/**\n * The harness for the reference store: what `self.spec.ts` runs the suite\n * against, and **the example an adapter author copies**.\n *\n * Its faults are a wrapper, because an in-memory map has no network to cut —\n * which is exactly why the doc on `StoreFaults` says an adapter must not do\n * this: a wrapper proves the wrapper. For the reference store there is nothing\n * underneath to prove, and it fails the way a correct adapter does, with\n * `StoreFailure`.\n */\nexport function referenceHarness(): ConformanceHarness {\n\treturn {\n\t\tasync open() {\n\t\t\tconst failing = new Set<string>();\n\t\t\tconst stores = withFaults(createMemoryStores(), failing);\n\n\t\t\tconst faults: StoreFaults = {\n\t\t\t\tasync fail(slot, method) {\n\t\t\t\t\tfailing.add(`${slot}.${method}`);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\treturn { stores, faults };\n\t\t},\n\t};\n}\n\nfunction withFaults(\n\tstores: JanusStores,\n\tfailing: ReadonlySet<string>,\n): JanusStores {\n\tconst wrap = <S extends object>(slot: string, store: S): S => {\n\t\tconst wrapped: Record<string, unknown> = {};\n\t\tfor (const [method, fn] of Object.entries(store)) {\n\t\t\twrapped[method] = (...args: unknown[]) => {\n\t\t\t\tif (failing.has(`${slot}.${method}`)) {\n\t\t\t\t\treturn Promise.reject(\n\t\t\t\t\t\tnew StoreFailure(`${slot}.${method}: the store could not answer`, {\n\t\t\t\t\t\t\tslot: slot as keyof JanusStores,\n\t\t\t\t\t\t\toperation: method,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (fn as (...a: unknown[]) => unknown).apply(store, args);\n\t\t\t};\n\t\t}\n\t\treturn wrapped as S;\n\t};\n\n\treturn {\n\t\tusers: wrap('users', stores.users),\n\t\tsessions: wrap('sessions', stores.sessions),\n\t\ttokens: wrap('tokens', stores.tokens),\n\t};\n}\n",
32
33
  "import { mintId } from '../../ids/id';\nimport { formatSubject } from '../../subjects/notation';\nimport type {\n\tEntity,\n\tRelationTuple,\n\tSubject,\n\tSubjectSet,\n} from '../../subjects/subject';\n\n/** The tuples the relation cases write, and how they compare what comes back. */\n\nexport const entity = (type: string, id: string = mintId()): Entity => ({\n\ttype,\n\tid,\n});\nexport const set = (\n\ttype: string,\n\tid: string,\n\trelation: string,\n): SubjectSet => ({\n\ttype,\n\tid,\n\trelation,\n});\nexport const tuple = (\n\tobject: Entity,\n\trelation: string,\n\tsubject: Subject,\n): RelationTuple => ({ object, relation, subject });\n\n/** Order-free, so a store may answer in any order. */\nexport const sorted = (subjects: readonly Subject[]) =>\n\tsubjects.map(formatSubject).sort();\n",
33
34
  "import { equal } from '../../assert';\nimport { entity, set, tuple } from '../fixtures';\nimport type { RelationCase } from '../types';\n\nconst group = 'relations';\n\n/** What deleting an entity removes, and what it leaves. */\nexport const relationDeletionCases: readonly RelationCase[] = [\n\t{\n\t\tid: 'relations.deleteEntity',\n\t\tgroup,\n\t\tname: 'deletes every tuple naming an entity — as object, as subject, as a set’s entity — and counts them',\n\t\tasync run({ store }) {\n\t\t\tconst team = entity('team');\n\t\t\tconst other = entity('team');\n\t\t\tconst kept = [\n\t\t\t\ttuple(other, 'member', entity('staff')),\n\t\t\t\ttuple(entity('record'), 'viewer', set('team', other.id, 'member')),\n\t\t\t];\n\t\t\tawait store.write({\n\t\t\t\tadd: [\n\t\t\t\t\ttuple(team, 'member', entity('staff')),\n\t\t\t\t\ttuple(entity('record'), 'team', team),\n\t\t\t\t\ttuple(entity('record'), 'viewer', set('team', team.id, 'member')),\n\t\t\t\t\t...kept,\n\t\t\t\t],\n\t\t\t});\n\n\t\t\tequal(\n\t\t\t\tawait store.deleteEntity(team),\n\t\t\t\t3,\n\t\t\t\t'deleteEntity: how many it deleted',\n\t\t\t);\n\t\t\tfor (const survivor of kept) {\n\t\t\t\tequal(\n\t\t\t\t\tawait store.has(survivor),\n\t\t\t\t\ttrue,\n\t\t\t\t\t'deleteEntity should not touch another entity',\n\t\t\t\t);\n\t\t\t}\n\t\t\tequal(\n\t\t\t\tawait store.deleteEntity(team),\n\t\t\t\t0,\n\t\t\t\t'deleteEntity replayed answers 0, not a failure',\n\t\t\t);\n\t\t},\n\t},\n];\n",
@@ -39,7 +40,7 @@
39
40
  "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",
40
41
  "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"
41
42
  ],
42
- "mappings": "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",
43
- "debugId": "292F9396C913757C64756E2164756E21",
43
+ "mappings": "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",
44
+ "debugId": "E36CAD1FA03131AF64756E2164756E21",
44
45
  "names": []
45
46
  }
@@ -38,6 +38,11 @@ export interface OpenedStores {
38
38
  export interface ConformanceHarness {
39
39
  open(): Promise<OpenedStores>;
40
40
  }
41
+ /**
42
+ * What a case may need beyond the required port: the harness's `faults`, or
43
+ * an optional method of the stores it opens.
44
+ */
45
+ export type CaseNeed = 'faults' | 'deleteExpiredSessions' | 'findUsers';
41
46
  /** What a case runs against. */
42
47
  export interface CaseContext {
43
48
  readonly stores: JanusStores;
@@ -56,8 +61,11 @@ export interface ConformanceCase {
56
61
  readonly group: 'users' | 'sessions' | 'tokens' | 'outage';
57
62
  /** A sentence: what the store must do. */
58
63
  readonly name: string;
59
- /** What the case cannot run without; absent, the case is skipped with a reason. */
60
- readonly needs?: 'faults' | 'deleteExpiredSessions';
64
+ /**
65
+ * What the case cannot run without — one thing, or several; when one is
66
+ * absent, the case is skipped with a reason.
67
+ */
68
+ readonly needs?: CaseNeed | readonly CaseNeed[];
61
69
  run(context: CaseContext): Promise<void>;
62
70
  }
63
71
  /** The subset of a test runner the suite uses: bun:test, vitest and jest all have it. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conformance/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,0CAA0C;AAC1C,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,WAAW,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,GACzE,MAAM,CAAC;AAER;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,EAC/B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,2CAA2C;IAC3C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B;AAED,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3D,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,uBAAuB,CAAC;IACpD,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/C,EAAE,EAAE;QACH,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACpD,CAAC;CACF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/conformance/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,0CAA0C;AAC1C,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,WAAW,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,GACzE,MAAM,CAAC;AAER;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC3B;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,WAAW,EAC/B,IAAI,EAAE,CAAC,EACP,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,IAAI,CAAC,CAAC;CACjB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,2CAA2C;IAC3C,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IAClC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,uBAAuB,GAAG,WAAW,CAAC;AAExE,gCAAgC;AAChC,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3D,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,CAAC;IAChD,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC;AAED,yFAAyF;AACzF,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC/C,EAAE,EAAE;QACH,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACpD,CAAC;CACF"}