@yielded/auth-persistence-drizzle 0.1.0-beta.17 → 0.1.0-beta.19

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 (142) hide show
  1. package/README.md +8 -1
  2. package/dist/D1.d.mts +120 -120
  3. package/dist/Libsql.d.mts +154 -154
  4. package/dist/Mysql2.d.mts +166 -166
  5. package/dist/Pglite.d.mts +166 -166
  6. package/dist/Postgres.d.mts +152 -152
  7. package/dist/SqliteBun.d.mts +168 -168
  8. package/dist/SqliteDo.d.mts +237 -259
  9. package/dist/SqliteDo.mjs +30 -45
  10. package/dist/SqliteDo.mjs.map +1 -1
  11. package/dist/SqliteNode.d.mts +154 -154
  12. package/dist/SqliteWasm.d.mts +163 -163
  13. package/dist/drizzle/crypto.mjs +11 -0
  14. package/dist/drizzle/crypto.mjs.map +1 -0
  15. package/dist/drizzle/d1-identity.mjs +2 -2
  16. package/dist/drizzle/d1-identity.mjs.map +1 -1
  17. package/dist/drizzle/d1-oauth.d.mts +16 -16
  18. package/dist/drizzle/d1-oauth.mjs.map +1 -1
  19. package/dist/drizzle/d1-passkey.d.mts +6 -6
  20. package/dist/drizzle/d1-passkey.mjs.map +1 -1
  21. package/dist/drizzle/d1-password-prepared.mjs +3 -3
  22. package/dist/drizzle/d1-password-prepared.mjs.map +1 -1
  23. package/dist/drizzle/d1-passwords.d.mts +1 -1
  24. package/dist/drizzle/d1-passwords.mjs +1 -1
  25. package/dist/drizzle/d1-passwords.mjs.map +1 -1
  26. package/dist/drizzle/d1-phone.d.mts +3 -3
  27. package/dist/drizzle/d1-phone.mjs.map +1 -1
  28. package/dist/drizzle/d1-proofs.d.mts +1 -1
  29. package/dist/drizzle/d1-sessions.d.mts +1 -1
  30. package/dist/drizzle/d1-sessions.mjs +4 -3
  31. package/dist/drizzle/d1-sessions.mjs.map +1 -1
  32. package/dist/drizzle/d1-totp.d.mts +3 -3
  33. package/dist/drizzle/d1-totp.mjs.map +1 -1
  34. package/dist/drizzle/mysql-identity.mjs +2 -2
  35. package/dist/drizzle/mysql-identity.mjs.map +1 -1
  36. package/dist/drizzle/oauth-accounts.mjs +9 -8
  37. package/dist/drizzle/oauth-accounts.mjs.map +1 -1
  38. package/dist/drizzle/oauth-connected-collection.mjs +1 -1
  39. package/dist/drizzle/oauth-connected-collection.mjs.map +1 -1
  40. package/dist/drizzle/oauth-connected-custody.mjs +5 -4
  41. package/dist/drizzle/oauth-connected-custody.mjs.map +1 -1
  42. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
  43. package/dist/drizzle/oauth-connected-flow.mjs +8 -7
  44. package/dist/drizzle/oauth-connected-flow.mjs.map +1 -1
  45. package/dist/drizzle/oauth-connected-management.mjs +3 -2
  46. package/dist/drizzle/oauth-connected-management.mjs.map +1 -1
  47. package/dist/drizzle/oauth-connected-reference.mjs +8 -4
  48. package/dist/drizzle/oauth-connected-reference.mjs.map +1 -1
  49. package/dist/drizzle/oauth-connected-settlement.mjs +4 -4
  50. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -1
  51. package/dist/drizzle/oauth-connected-sign-in.mjs +11 -10
  52. package/dist/drizzle/oauth-connected-sign-in.mjs.map +1 -1
  53. package/dist/drizzle/oauth-connected-state.d.mts +265 -265
  54. package/dist/drizzle/oauth-connected-state.mjs +23 -20
  55. package/dist/drizzle/oauth-connected-state.mjs.map +1 -1
  56. package/dist/drizzle/oauth-connected-target.d.mts +105 -105
  57. package/dist/drizzle/oauth-connected-target.mjs.map +1 -1
  58. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  59. package/dist/drizzle/oauth-flow.mjs +1 -1
  60. package/dist/drizzle/oauth-flow.mjs.map +1 -1
  61. package/dist/drizzle/oauth-model.d.mts +4 -4
  62. package/dist/drizzle/oauth-model.mjs.map +1 -1
  63. package/dist/drizzle/oauth-registration.mjs +2 -2
  64. package/dist/drizzle/oauth-registration.mjs.map +1 -1
  65. package/dist/drizzle/oauth-state.mjs +11 -12
  66. package/dist/drizzle/oauth-state.mjs.map +1 -1
  67. package/dist/drizzle/oauth-target.d.mts +4 -4
  68. package/dist/drizzle/oauth-target.mjs.map +1 -1
  69. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  70. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  71. package/dist/drizzle/passkey-write-target.d.mts +1 -1
  72. package/dist/drizzle/password-prepared-sql.mjs +1 -1
  73. package/dist/drizzle/password-prepared-sql.mjs.map +1 -1
  74. package/dist/drizzle/password-prepared-state.mjs +1 -1
  75. package/dist/drizzle/pg-identity.mjs +2 -2
  76. package/dist/drizzle/pg-identity.mjs.map +1 -1
  77. package/dist/drizzle/phone-model.d.mts +2 -2
  78. package/dist/drizzle/phone-model.mjs +3 -3
  79. package/dist/drizzle/phone-model.mjs.map +1 -1
  80. package/dist/drizzle/phone-target.d.mts +1 -1
  81. package/dist/drizzle/phone-target.mjs +2 -2
  82. package/dist/drizzle/phone-target.mjs.map +1 -1
  83. package/dist/drizzle/sqlite-do-database.d.mts +29 -0
  84. package/dist/drizzle/sqlite-do-database.mjs +45 -0
  85. package/dist/drizzle/sqlite-do-database.mjs.map +1 -0
  86. package/dist/drizzle/sqlite-emails.mjs.map +1 -1
  87. package/dist/drizzle/sqlite-identity.mjs +2 -2
  88. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  89. package/dist/drizzle/sqlite-passwords.mjs.map +1 -1
  90. package/dist/drizzle/sqlite-proofs.mjs.map +1 -1
  91. package/dist/drizzle/sqlite-sessions.mjs.map +1 -1
  92. package/dist/drizzle/storage-validation.mjs +17 -9
  93. package/dist/drizzle/storage-validation.mjs.map +1 -1
  94. package/dist/drizzle/totp-state.mjs +8 -8
  95. package/dist/drizzle/totp-state.mjs.map +1 -1
  96. package/dist/drizzle/totp-target.d.mts +1 -1
  97. package/dist/drizzle/totp-target.mjs +2 -2
  98. package/dist/drizzle/totp-target.mjs.map +1 -1
  99. package/package.json +1 -1
  100. package/src/SqliteDo.ts +63 -70
  101. package/src/drizzle/crypto.ts +14 -0
  102. package/src/drizzle/d1-identity.ts +2 -2
  103. package/src/drizzle/d1-oauth.ts +14 -5
  104. package/src/drizzle/d1-passkey.ts +5 -1
  105. package/src/drizzle/d1-password-prepared.ts +11 -5
  106. package/src/drizzle/d1-passwords.ts +1 -1
  107. package/src/drizzle/d1-phone.ts +2 -1
  108. package/src/drizzle/d1-sessions.ts +8 -2
  109. package/src/drizzle/d1-totp.ts +6 -2
  110. package/src/drizzle/mysql-identity.ts +2 -2
  111. package/src/drizzle/oauth-accounts.ts +14 -13
  112. package/src/drizzle/oauth-connected-collection.ts +1 -1
  113. package/src/drizzle/oauth-connected-custody.ts +8 -6
  114. package/src/drizzle/oauth-connected-drivers.ts +9 -3
  115. package/src/drizzle/oauth-connected-flow.ts +6 -6
  116. package/src/drizzle/oauth-connected-management.ts +1 -1
  117. package/src/drizzle/oauth-connected-reference.ts +14 -9
  118. package/src/drizzle/oauth-connected-settlement.ts +4 -4
  119. package/src/drizzle/oauth-connected-sign-in.ts +11 -10
  120. package/src/drizzle/oauth-connected-state.ts +40 -25
  121. package/src/drizzle/oauth-connected-target.ts +9 -5
  122. package/src/drizzle/oauth-drivers.ts +13 -5
  123. package/src/drizzle/oauth-flow.ts +1 -1
  124. package/src/drizzle/oauth-model.ts +4 -4
  125. package/src/drizzle/oauth-registration.ts +2 -2
  126. package/src/drizzle/oauth-state.ts +17 -15
  127. package/src/drizzle/oauth-target.ts +11 -3
  128. package/src/drizzle/passkey-drivers.ts +7 -3
  129. package/src/drizzle/passkey-write-drivers.ts +11 -2
  130. package/src/drizzle/password-prepared-sql.ts +1 -1
  131. package/src/drizzle/pg-identity.ts +2 -2
  132. package/src/drizzle/phone-model.ts +3 -3
  133. package/src/drizzle/phone-target.ts +11 -4
  134. package/src/drizzle/sqlite-do-database.ts +87 -0
  135. package/src/drizzle/sqlite-emails.ts +1 -1
  136. package/src/drizzle/sqlite-identity.ts +2 -2
  137. package/src/drizzle/sqlite-passwords.ts +1 -1
  138. package/src/drizzle/sqlite-proofs.ts +2 -2
  139. package/src/drizzle/sqlite-sessions.ts +2 -2
  140. package/src/drizzle/storage-validation.ts +15 -6
  141. package/src/drizzle/totp-state.ts +8 -8
  142. package/src/drizzle/totp-target.ts +11 -5
@@ -4,7 +4,7 @@ import "./oauth-owner.mjs";
4
4
  import "./oauth-registration.mjs";
5
5
  import { TransactionCoordinatorError, TransactionTargetConfiguration } from "./transaction-execution.mjs";
6
6
  import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
7
- import { Context, Effect, Layer } from "effect";
7
+ import { Context, Crypto, Effect, Layer } from "effect";
8
8
  import { LifecycleHooks } from "@yielded/auth/Hooks";
9
9
  import { OAuthAccountRevision, OAuthAccountsPersistence, OAuthClaim, OAuthClaimDecision, OAuthCleanupInput, OAuthCredentialSnapshot, OAuthIssueDecision, OAuthLinkClaimDecision, OAuthLinkDecision, OAuthLinkIssueDecision, OAuthLinkPendingFlow, OAuthPendingFlow, OAuthRegistrationIntent, OAuthRegistrationIntents, OAuthSettlementDecision, OAuthSignInPersistence, OAuthUnavailable, OAuthUnlinkDecision, OAuthUnlinkInspection, OAuthVerifiedExternalIdentity, PrepareOAuthCommit } from "@yielded/auth/OAuth";
10
10
  import { Statement } from "effect/sql/Statement";
@@ -43,7 +43,7 @@ export declare const makeTargetOAuthSignInServices: (mapping: any, configuration
43
43
  readonly hasMore: boolean;
44
44
  }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, OAuthUnavailable>;
45
45
  };
46
- }, OAuthUnavailable, LifecycleHooks | NativeDatabase>;
46
+ }, OAuthUnavailable, Crypto.Crypto | LifecycleHooks | NativeDatabase>;
47
47
  export declare const makeTargetOAuthRegistrationIntentServices: (mapping: any, configuration: OAuthTargetConfiguration) => Effect.Effect<{
48
48
  oauthRegistrationIntents: {
49
49
  readonly settle: <A>(input: {
@@ -53,7 +53,7 @@ export declare const makeTargetOAuthRegistrationIntentServices: (mapping: any, c
53
53
  readonly nowMillis: number;
54
54
  }, prepare: PrepareOAuthCommit<import("@yielded/auth/OAuth").OAuthRegistrationSettlement, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, OAuthUnavailable>;
55
55
  };
56
- }, OAuthUnavailable, LifecycleHooks | NativeDatabase>;
56
+ }, OAuthUnavailable, Crypto.Crypto | LifecycleHooks | NativeDatabase>;
57
57
  export declare const makeTargetOAuthAccountsServices: (mapping: any, configuration: OAuthTargetConfiguration) => Effect.Effect<{
58
58
  oauthAccountsPersistence: {
59
59
  readonly capture: (input: {
@@ -99,7 +99,7 @@ export declare const makeTargetOAuthAccountsServices: (mapping: any, configurati
99
99
  readonly hasMore: boolean;
100
100
  }, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, OAuthUnavailable>;
101
101
  };
102
- }, OAuthUnavailable, LifecycleHooks | NativeDatabase>;
102
+ }, OAuthUnavailable, Crypto.Crypto | LifecycleHooks | NativeDatabase>;
103
103
  export declare const oauthAccountsPersistenceLayer: <E, R>(services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthAccountsServices>>, E, R>) => Layer.Layer<OAuthAccountsPersistence, E, Exclude<R, import("effect/Scope").Scope>>;
104
104
  export declare const oauthSignInPersistenceLayer: <E, R>(services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthSignInServices>>, E, R>) => Layer.Layer<OAuthSignInPersistence, E, Exclude<R, import("effect/Scope").Scope>>;
105
105
  export declare const oauthRegistrationIntentsLayer: <E, R>(services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationIntentServices>>, E, R>) => Layer.Layer<OAuthRegistrationIntents, E, Exclude<R, import("effect/Scope").Scope>>;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-target.mjs","names":[],"sources":["../../src/drizzle/oauth-target.ts"],"sourcesContent":["import type { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n OAuthAccountRevision,\n OAuthLinkClaimDecision,\n OAuthLinkDecision,\n OAuthLinkIssueDecision,\n OAuthLinkPendingFlow,\n OAuthUnlinkDecision,\n OAuthUnlinkInspection,\n OAuthAccountsPersistence,\n OAuthRegistrationIntents,\n OAuthSignInPersistence,\n type PrepareOAuthCommit,\n OAuthRegistrationIntent,\n OAuthRegistrationFingerprint,\n OAuthClaim,\n OAuthClaimDecision,\n OAuthCleanupInput,\n OAuthIssueDecision,\n OAuthPendingFlow,\n OAuthSettlementDecision,\n OAuthVerifiedExternalIdentity,\n OAuthCredentialSnapshot,\n snapshotOAuthSync,\n type OAuthUnavailable,\n} from \"@yielded/auth/OAuth\";\nimport type { SecurityRevision } from \"@yielded/auth/Sessions\";\n/* oxlint-disable no-explicit-any -- concrete driver entry points restore table/database generics. */\nimport { eq, sql } from \"drizzle-orm\";\nimport { type Context, Effect, Layer } from \"effect\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport {\n accountCurrent,\n claimLink,\n inspectUnlink,\n issueLink,\n preflightLink,\n settleLink,\n unlink,\n} from \"./oauth-accounts\";\nimport {\n claimFlow,\n cleanupFlows,\n discoverOwned,\n exactClaim,\n issueFlow,\n matchesAccess,\n readFlow,\n resolveOwned,\n terminalFlow,\n} from \"./oauth-flow\";\nimport {\n accountsInputs,\n capturedOAuthService,\n registrationInputs,\n registrationIntentInputs,\n signInInputs,\n} from \"./oauth-input\";\nimport type { OAuthRegistrationAuthority } from \"./oauth-model\";\nimport { both, col, equal, CurrentOAuthTransaction, type OAuthNativeDatabase } from \"./oauth-owner\";\nimport {\n inspectIntent,\n register,\n registrationData,\n registrationResources,\n type RegistrationCallbacks,\n settleRegistrationIntent,\n} from \"./oauth-registration\";\nimport { captureOAuthMapping, invariant, nonce, unavailable } from \"./oauth-state\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport {\n coordinateTransactionOwner,\n makeTransactionExecution,\n sqlClientTransactionStandaloneGuard,\n type TransactionTargetConfiguration,\n type TransactionCoordinatorError,\n type TransactionExecution,\n} from \"./transaction-execution\";\n\nexport type OAuthTargetConfiguration = TransactionTargetConfiguration<OAuthUnavailable>;\nexport type OAuthCoordinatorError<E> = TransactionCoordinatorError<E, OAuthUnavailable>;\nexport type OAuthExecution = TransactionExecution<OAuthUnavailable, CurrentOAuthTransaction, never>;\n\nexport const sqlClientOAuthStandaloneGuard = (\n service: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, service);\n\nexport const makeOAuthExecution = Effect.fnUntraced(function* (\n configuration: OAuthTargetConfiguration,\n mapping: unknown,\n): Effect.fn.Return<OAuthExecution, OAuthUnavailable, LifecycleHooks | NativeDatabase> {\n const hooks = yield* LifecycleHooks;\n\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n\n const execution = yield* makeTransactionExecution(\n CurrentOAuthTransaction,\n configuration,\n unavailable,\n nonce,\n );\n\n return {\n ...execution,\n run: (operation, mutation) =>\n execution.run(operation, mutation).pipe(Effect.provideService(LifecycleHooks, hooks)),\n };\n});\n\nconst prepareValue = <Value, A>(value: Value, prepare: PrepareOAuthCommit<Value, A>) =>\n Effect.flatMap(CurrentOAuthTransaction, (owner) =>\n Effect.sync(() => {\n owner.guards.push(owner.journal.prepare(undefined));\n\n return prepare(value, owner.journal);\n }),\n );\n\nexport const makeOAuthSignIn = (\n mapping: any,\n execute: OAuthExecution,\n): OAuthSignInPersistence[\"Service\"] =>\n capturedOAuthService<OAuthSignInPersistence[\"Service\"]>(\n {\n issue: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const input = snapshotOAuthSync(OAuthPendingFlow, original);\n const value = yield* issueFlow(mapping, input, \"sign-in\");\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthIssueDecision, value as never),\n prepare,\n );\n }),\n ),\n claim: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const read = yield* readFlow(mapping, input, \"sign-in\");\n\n const claim =\n read.row !== undefined && read.flow !== undefined && matchesAccess(read.flow, input)\n ? yield* claimFlow(mapping, { row: read.row, flow: read.flow }, input.claimId)\n : undefined;\n\n return yield* prepareValue(\n snapshotOAuthSync(\n OAuthClaimDecision,\n claim === undefined\n ? { _tag: \"Rejected\" }\n : { _tag: \"Claimed\", claim: claim as typeof OAuthClaim.Type },\n ),\n prepare,\n );\n }),\n ),\n settle: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const claim = snapshotOAuthSync(OAuthClaim, original.claim);\n const outcome = original.outcome;\n\n const identity =\n outcome._tag === \"Verified\"\n ? snapshotOAuthSync(OAuthVerifiedExternalIdentity, outcome.identity).identity\n : undefined;\n\n if (identity !== undefined)\n invariant(\n identity.provider === claim.flow.context.provider &&\n identity.issuer === claim.flow.context.issuer,\n );\n\n // Discover/lock the existing subject before locking its claimed flow.\n const found =\n identity === undefined ? undefined : yield* discoverOwned(mapping, identity);\n\n const exact = yield* exactClaim(mapping, claim, \"sign-in\");\n let value: typeof OAuthSettlementDecision.Type = { _tag: \"Rejected\" };\n\n if (exact !== undefined) {\n const credential =\n identity === undefined\n ? undefined\n : resolveOwned(mapping, claim.flow.context.moduleId, identity, found);\n\n value =\n outcome._tag !== \"Verified\"\n ? { _tag: outcome._tag }\n : credential === undefined\n ? { _tag: \"Rejected\" }\n : { _tag: \"Verified\", credential };\n yield* terminalFlow(mapping, claim.flow, value._tag);\n }\n\n return yield* prepareValue(snapshotOAuthSync(OAuthSettlementDecision, value), prepare);\n }),\n ),\n cleanup: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* cleanupFlows(mapping, input, \"sign-in\");\n\n return yield* prepareValue(value, prepare);\n }),\n ),\n },\n signInInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeOAuthRegistrationIntents = (\n mapping: any,\n execute: OAuthExecution,\n): OAuthRegistrationIntents[\"Service\"] =>\n capturedOAuthService<OAuthRegistrationIntents[\"Service\"]>(\n {\n settle: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* settleRegistrationIntent(mapping, {\n claim: snapshotOAuthSync(OAuthClaim, input.claim),\n identity: snapshotOAuthSync(OAuthVerifiedExternalIdentity, input.identity),\n ...(input.intent === undefined\n ? {}\n : { intent: snapshotOAuthSync(OAuthRegistrationIntent, input.intent) }),\n });\n\n return yield* prepareValue(value, prepare);\n }),\n ),\n },\n registrationIntentInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeOAuthRegistration = <Registration>(\n mapping: any,\n execute: OAuthExecution,\n allocated?: Awaited<ReturnType<typeof registrationResources>> extends Effect.Effect<\n infer A,\n any,\n any\n >\n ? A\n : never,\n): OAuthRegistrationAuthority<Registration> =>\n capturedOAuthService<OAuthRegistrationAuthority<Registration>>(\n {\n read: (input) =>\n execute.run(\n Effect.map(inspectIntent(mapping, input), (result) => result?.inspection),\n false,\n ),\n inspect: (input) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const intent = snapshotOAuthSync(OAuthRegistrationIntent, input.intent);\n const stored = mapping.application.encode(input.registration);\n\n invariant(\n typeof stored === \"string\" && new TextEncoder().encode(stored).length <= 1048576,\n );\n const detached = { intent, registration: mapping.application.decode(stored) };\n\n const checked = execute.bound\n ? (invariant(mapping.inspectSync !== undefined), mapping.inspectSync(detached))\n : yield* (mapping as RegistrationCallbacks<Registration>).inspect(detached);\n\n invariant(typeof checked.eligible === \"boolean\");\n\n return {\n fingerprint: snapshotOAuthSync(OAuthRegistrationFingerprint, checked.fingerprint),\n eligible: checked.eligible,\n };\n }).pipe(\n (effect) => (execute.bound ? execute.run(effect, false) : effect),\n Effect.onExit((exit) =>\n Effect.sync(() => {\n if (exit._tag === \"Failure\") execute.poison();\n }),\n ),\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n register: (input, prepare) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const data = yield* registrationData(mapping, input, execute.bound);\n const resources = allocated ?? (yield* registrationResources(mapping));\n\n return yield* execute.run(\n Effect.gen(function* () {\n const value = yield* register(mapping, input, data, resources);\n\n return yield* prepareValue(value, prepare);\n }),\n );\n }).pipe(\n Effect.onExit((exit) =>\n Effect.sync(() => {\n if (exit._tag === \"Failure\") execute.poison();\n }),\n ),\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n cleanup: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const owner = yield* CurrentOAuthTransaction;\n\n const input = snapshotOAuthSync(OAuthCleanupInput, original),\n i = mapping.intent,\n r = mapping.command;\n\n const now = yield* owner.now(mapping.clock);\n\n const candidates = yield* owner.read(\n i.table,\n both(\n eq(col(i.table, i.moduleId), input.moduleId),\n sql`${col(i.table, i.state)} <> 'ProvisioningPending' and ${col(i.table, i.retentionUntil)} < ${mapping.clock.encodeInstant(now)}`,\n ),\n { limit: input.limit, observe: false, takeOnly: true },\n );\n\n let removed = 0;\n\n for (const candidate of candidates.rows) {\n const selected = yield* owner.read(\n i.table,\n equal(i.table, {\n [i.moduleId]: input.moduleId,\n [i.reference]: candidate[i.reference],\n }),\n { limit: 1 },\n );\n\n const row = selected.rows[0];\n\n if (row === undefined || row[i.state] === \"ProvisioningPending\") continue;\n let horizon = mapping.clock.decodeInstant(row[i.retentionUntil]);\n\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n if (row[i.commandId] !== null) {\n const commands = yield* owner.read(\n r.table,\n equal(r.table, {\n [r.moduleId]: input.moduleId,\n [r.commandId]: row[i.commandId],\n }),\n { limit: 1 },\n );\n\n const command = commands.rows[0];\n\n if (command === undefined) continue;\n horizon = Math.max(horizon, mapping.clock.decodeInstant(command[r.retentionUntil]));\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n yield* owner.remove(r.table, {\n [r.moduleId]: input.moduleId,\n [r.commandId]: row[i.commandId],\n });\n }\n yield* owner.remove(i.table, {\n [i.moduleId]: input.moduleId,\n [i.reference]: row[i.reference],\n });\n owner.postconditions.push(sql`${mapping.clock.engineNowMillis} > ${horizon}`);\n removed++;\n }\n\n return yield* prepareValue(\n { removed, hasMore: candidates.rows.length === input.limit },\n prepare,\n );\n }),\n ),\n },\n registrationInputs(mapping.application),\n execute.active,\n execute.poison,\n );\n\nexport const makeTargetOAuthSignInServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthSignInPersistence: makeOAuthSignIn(captured, execution),\n }));\n};\n\nexport const makeTargetOAuthRegistrationIntentServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthRegistrationIntents: makeOAuthRegistrationIntents(captured, execution),\n }));\n};\n\nexport const makeTargetOAuthRegistrationServices = <Registration>(\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n registrationAuthority: makeOAuthRegistration<Registration>(captured, execution),\n }));\n};\n\nexport const coordinateOAuthOwner = <Services, Transaction, A, E, R>(\n database: OAuthNativeDatabase,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n allocate: (mapping: any) => Effect.Effect<any, PersistenceMappingError>,\n services: (mapping: any, execution: OAuthExecution, resources: any) => Services,\n owner: (\n transaction: Transaction,\n services: Services,\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, OAuthCoordinatorError<E>, R | LifecycleHooks | NativeDatabase> => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.flatMap(LifecycleHooks, (hooks) =>\n coordinateTransactionOwner(\n database,\n CurrentOAuthTransaction,\n configuration,\n validateDrizzleStorage(captured).pipe(\n Effect.andThen(Effect.suspend(() => allocate(captured))),\n ),\n unavailable,\n nonce,\n (execution, resources) =>\n services(\n captured,\n {\n ...execution,\n run: (operation, mutation) =>\n execution.run(operation, mutation).pipe(Effect.provideService(LifecycleHooks, hooks)),\n },\n resources,\n ),\n owner,\n ).pipe(Effect.provideService(LifecycleHooks, hooks)),\n );\n};\n\nconst accountResources = (mapping: any) =>\n Effect.gen(function* () {\n return {\n credentialId: snapshotOAuthSync(\n OAuthCredentialSnapshot.fields.credentialId,\n yield* mapping.allocateCredentialId as Effect.Effect<string, PersistenceMappingError>,\n ),\n revision: snapshotOAuthSync(\n OAuthCredentialSnapshot.fields.credentialRevision,\n yield* mapping.allocateRevision as Effect.Effect<SecurityRevision, PersistenceMappingError>,\n ),\n };\n });\n\nexport const coordinateTargetOAuthRegistration = <Registration, Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly registrationAuthority: OAuthRegistrationAuthority<Registration> },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n registrationResources,\n (captured, execute, resources) => ({\n registrationAuthority: makeOAuthRegistration<Registration>(captured, execute, resources),\n }),\n owner,\n );\n\nexport const coordinateTargetOAuthSignIn = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthSignInPersistence: OAuthSignInPersistence[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n () => Effect.void,\n (captured, execute) => ({ oauthSignInPersistence: makeOAuthSignIn(captured, execute) }),\n owner,\n );\n\nexport const coordinateTargetOAuthRegistrationIntents = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthRegistrationIntents: OAuthRegistrationIntents[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n () => Effect.void,\n (captured, execute) => ({\n oauthRegistrationIntents: makeOAuthRegistrationIntents(captured, execute),\n }),\n owner,\n );\n\nexport const coordinateTargetOAuthAccounts = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthAccountsPersistence: OAuthAccountsPersistence[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n accountResources,\n (captured, execute, resources) => ({\n oauthAccountsPersistence: makeOAuthAccounts(captured, execute, resources),\n }),\n owner,\n );\n\nexport const makeOAuthAccounts = (\n mapping: any,\n execute: OAuthExecution,\n resources?: any,\n): OAuthAccountsPersistence[\"Service\"] =>\n capturedOAuthService<OAuthAccountsPersistence[\"Service\"]>(\n {\n capture: (input) =>\n execute.run(\n Effect.map(accountCurrent(mapping, input.subjectId), (current) =>\n current === undefined\n ? undefined\n : snapshotOAuthSync(OAuthAccountRevision, current.revision),\n ),\n false,\n ),\n issue: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* issueLink(mapping, input);\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthLinkIssueDecision, value as never),\n prepare,\n );\n }),\n ),\n preflight: (input) =>\n execute.run(\n Effect.map(preflightLink(mapping, input), (current) =>\n current === undefined\n ? undefined\n : snapshotOAuthSync(OAuthLinkPendingFlow, current.flow),\n ),\n false,\n ),\n claim: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* claimLink(mapping, input);\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthLinkClaimDecision, value as never),\n prepare,\n );\n }),\n ),\n settle: (input, prepare) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const allocated = resources ?? (yield* accountResources(mapping));\n\n return yield* execute.run(\n Effect.gen(function* () {\n const value = yield* settleLink(mapping, input, allocated as never);\n\n return yield* prepareValue(snapshotOAuthSync(OAuthLinkDecision, value), prepare);\n }),\n );\n }).pipe(\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n inspectUnlink: (input) =>\n execute.run(\n Effect.map(inspectUnlink(mapping, input), (value) =>\n snapshotOAuthSync(OAuthUnlinkInspection, value),\n ),\n false,\n ),\n unlink: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* unlink(mapping, input);\n\n return yield* prepareValue(snapshotOAuthSync(OAuthUnlinkDecision, value), prepare);\n }),\n ),\n cleanup: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const owner = yield* CurrentOAuthTransaction;\n const value = yield* cleanupFlows(mapping, input, \"link\");\n const remaining = input.limit - value.terminalized - value.removed;\n\n const now = yield* owner.now(mapping.clock),\n r = mapping.command;\n\n let removed = 0;\n\n if (remaining > 0) {\n const rows = yield* owner.read(\n r.table,\n both(\n eq(col(r.table, r.moduleId), input.moduleId),\n sql`${col(r.table, r.retentionUntil)} < ${mapping.clock.encodeInstant(now)}`,\n ),\n { limit: remaining, observe: false, takeOnly: true },\n );\n\n for (const row of rows.rows) {\n const key = { [r.moduleId]: input.moduleId, [r.commandId]: row[r.commandId] };\n const selected = yield* owner.read(r.table, equal(r.table, key), { limit: 1 });\n const current = selected.rows[0];\n\n if (current === undefined) continue;\n const horizon = mapping.clock.decodeInstant(current[r.retentionUntil]);\n\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n yield* owner.remove(r.table, key);\n owner.postconditions.push(sql`${mapping.clock.engineNowMillis} > ${horizon}`);\n removed++;\n }\n }\n\n return yield* prepareValue(\n {\n ...value,\n removed: value.removed + removed,\n hasMore: value.hasMore || remaining === removed,\n },\n prepare,\n );\n }),\n ),\n },\n accountsInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeTargetOAuthAccountsServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthAccountsPersistence: makeOAuthAccounts(captured, execution),\n }));\n};\n\nexport const oauthAccountsPersistenceLayer = <E, R>(\n services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthAccountsServices>>, E, R>,\n) =>\n Layer.effect(\n OAuthAccountsPersistence,\n Effect.map(services, (value) => value.oauthAccountsPersistence),\n );\n\nexport const oauthSignInPersistenceLayer = <E, R>(\n services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthSignInServices>>, E, R>,\n) =>\n Layer.effect(\n OAuthSignInPersistence,\n Effect.map(services, (value) => value.oauthSignInPersistence),\n );\n\nexport const oauthRegistrationIntentsLayer = <E, R>(\n services: Effect.Effect<\n Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationIntentServices>>,\n E,\n R\n >,\n) =>\n Layer.effect(\n OAuthRegistrationIntents,\n Effect.map(services, (value) => value.oauthRegistrationIntents),\n );\n\nexport const oauthRegistrationAuthorityLayer = <Id, Registration, E, R>(\n tag: Context.Key<Id, OAuthRegistrationAuthority<Registration>>,\n services: Effect.Effect<\n { readonly registrationAuthority: OAuthRegistrationAuthority<Registration> },\n E,\n R\n >,\n) =>\n Layer.effect(\n tag,\n Effect.map(services, (value) => value.registrationAuthority),\n );\n"],"mappings":"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"}
1
+ {"version":3,"file":"oauth-target.mjs","names":[],"sources":["../../src/drizzle/oauth-target.ts"],"sourcesContent":["import type { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n OAuthAccountRevision,\n OAuthLinkClaimDecision,\n OAuthLinkDecision,\n OAuthLinkIssueDecision,\n OAuthLinkPendingFlow,\n OAuthUnlinkDecision,\n OAuthUnlinkInspection,\n OAuthAccountsPersistence,\n OAuthRegistrationIntents,\n OAuthSignInPersistence,\n type PrepareOAuthCommit,\n OAuthRegistrationIntent,\n OAuthRegistrationFingerprint,\n OAuthClaim,\n OAuthClaimDecision,\n OAuthCleanupInput,\n OAuthIssueDecision,\n OAuthPendingFlow,\n OAuthSettlementDecision,\n OAuthVerifiedExternalIdentity,\n OAuthCredentialSnapshot,\n snapshotOAuthSync,\n type OAuthUnavailable,\n} from \"@yielded/auth/OAuth\";\nimport type { SecurityRevision } from \"@yielded/auth/Sessions\";\n/* oxlint-disable no-explicit-any -- concrete driver entry points restore table/database generics. */\nimport { eq, sql } from \"drizzle-orm\";\nimport { type Crypto, type Context, Effect, Layer } from \"effect\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport {\n accountCurrent,\n claimLink,\n inspectUnlink,\n issueLink,\n preflightLink,\n settleLink,\n unlink,\n} from \"./oauth-accounts\";\nimport {\n claimFlow,\n cleanupFlows,\n discoverOwned,\n exactClaim,\n issueFlow,\n matchesAccess,\n readFlow,\n resolveOwned,\n terminalFlow,\n} from \"./oauth-flow\";\nimport {\n accountsInputs,\n capturedOAuthService,\n registrationInputs,\n registrationIntentInputs,\n signInInputs,\n} from \"./oauth-input\";\nimport type { OAuthRegistrationAuthority } from \"./oauth-model\";\nimport { both, col, equal, CurrentOAuthTransaction, type OAuthNativeDatabase } from \"./oauth-owner\";\nimport {\n inspectIntent,\n register,\n registrationData,\n registrationResources,\n type RegistrationCallbacks,\n settleRegistrationIntent,\n} from \"./oauth-registration\";\nimport { captureOAuthMapping, invariant, nonce, unavailable } from \"./oauth-state\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport {\n coordinateTransactionOwner,\n makeTransactionExecution,\n sqlClientTransactionStandaloneGuard,\n type TransactionTargetConfiguration,\n type TransactionCoordinatorError,\n type TransactionExecution,\n} from \"./transaction-execution\";\n\nexport type OAuthTargetConfiguration = TransactionTargetConfiguration<OAuthUnavailable>;\nexport type OAuthCoordinatorError<E> = TransactionCoordinatorError<E, OAuthUnavailable>;\nexport type OAuthExecution = TransactionExecution<OAuthUnavailable, CurrentOAuthTransaction, never>;\n\nexport const sqlClientOAuthStandaloneGuard = (\n service: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, service);\n\nexport const makeOAuthExecution = Effect.fnUntraced(function* (\n configuration: OAuthTargetConfiguration,\n mapping: unknown,\n): Effect.fn.Return<\n OAuthExecution,\n OAuthUnavailable,\n LifecycleHooks | NativeDatabase | Crypto.Crypto\n> {\n const hooks = yield* LifecycleHooks;\n\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n\n const execution = yield* makeTransactionExecution(\n CurrentOAuthTransaction,\n configuration,\n unavailable,\n nonce,\n );\n\n return {\n ...execution,\n run: (operation, mutation) =>\n execution.run(operation, mutation).pipe(Effect.provideService(LifecycleHooks, hooks)),\n };\n});\n\nconst prepareValue = <Value, A>(value: Value, prepare: PrepareOAuthCommit<Value, A>) =>\n Effect.flatMap(CurrentOAuthTransaction, (owner) =>\n Effect.sync(() => {\n owner.guards.push(owner.journal.prepare(undefined));\n\n return prepare(value, owner.journal);\n }),\n );\n\nexport const makeOAuthSignIn = (\n mapping: any,\n execute: OAuthExecution,\n): OAuthSignInPersistence[\"Service\"] =>\n capturedOAuthService<OAuthSignInPersistence[\"Service\"]>(\n {\n issue: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const input = snapshotOAuthSync(OAuthPendingFlow, original);\n const value = yield* issueFlow(mapping, input, \"sign-in\");\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthIssueDecision, value as never),\n prepare,\n );\n }),\n ),\n claim: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const read = yield* readFlow(mapping, input, \"sign-in\");\n\n const claim =\n read.row !== undefined && read.flow !== undefined && matchesAccess(read.flow, input)\n ? yield* claimFlow(mapping, { row: read.row, flow: read.flow }, input.claimId)\n : undefined;\n\n return yield* prepareValue(\n snapshotOAuthSync(\n OAuthClaimDecision,\n claim === undefined\n ? { _tag: \"Rejected\" }\n : { _tag: \"Claimed\", claim: claim as typeof OAuthClaim.Type },\n ),\n prepare,\n );\n }),\n ),\n settle: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const claim = snapshotOAuthSync(OAuthClaim, original.claim);\n const outcome = original.outcome;\n\n const identity =\n outcome._tag === \"Verified\"\n ? snapshotOAuthSync(OAuthVerifiedExternalIdentity, outcome.identity).identity\n : undefined;\n\n if (identity !== undefined)\n invariant(\n identity.provider === claim.flow.context.provider &&\n identity.issuer === claim.flow.context.issuer,\n );\n\n // Discover/lock the existing subject before locking its claimed flow.\n const found =\n identity === undefined ? undefined : yield* discoverOwned(mapping, identity);\n\n const exact = yield* exactClaim(mapping, claim, \"sign-in\");\n let value: typeof OAuthSettlementDecision.Type = { _tag: \"Rejected\" };\n\n if (exact !== undefined) {\n const credential =\n identity === undefined\n ? undefined\n : resolveOwned(mapping, claim.flow.context.moduleId, identity, found);\n\n value =\n outcome._tag !== \"Verified\"\n ? { _tag: outcome._tag }\n : credential === undefined\n ? { _tag: \"Rejected\" }\n : { _tag: \"Verified\", credential };\n yield* terminalFlow(mapping, claim.flow, value._tag);\n }\n\n return yield* prepareValue(snapshotOAuthSync(OAuthSettlementDecision, value), prepare);\n }),\n ),\n cleanup: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* cleanupFlows(mapping, input, \"sign-in\");\n\n return yield* prepareValue(value, prepare);\n }),\n ),\n },\n signInInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeOAuthRegistrationIntents = (\n mapping: any,\n execute: OAuthExecution,\n): OAuthRegistrationIntents[\"Service\"] =>\n capturedOAuthService<OAuthRegistrationIntents[\"Service\"]>(\n {\n settle: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* settleRegistrationIntent(mapping, {\n claim: snapshotOAuthSync(OAuthClaim, input.claim),\n identity: snapshotOAuthSync(OAuthVerifiedExternalIdentity, input.identity),\n ...(input.intent === undefined\n ? {}\n : { intent: snapshotOAuthSync(OAuthRegistrationIntent, input.intent) }),\n });\n\n return yield* prepareValue(value, prepare);\n }),\n ),\n },\n registrationIntentInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeOAuthRegistration = <Registration>(\n mapping: any,\n execute: OAuthExecution,\n allocated?: Awaited<ReturnType<typeof registrationResources>> extends Effect.Effect<\n infer A,\n any,\n any\n >\n ? A\n : never,\n): OAuthRegistrationAuthority<Registration> =>\n capturedOAuthService<OAuthRegistrationAuthority<Registration>>(\n {\n read: (input) =>\n execute.run(\n Effect.map(inspectIntent(mapping, input), (result) => result?.inspection),\n false,\n ),\n inspect: (input) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const intent = snapshotOAuthSync(OAuthRegistrationIntent, input.intent);\n const stored = mapping.application.encode(input.registration);\n\n invariant(\n typeof stored === \"string\" && new TextEncoder().encode(stored).length <= 1048576,\n );\n const detached = { intent, registration: mapping.application.decode(stored) };\n\n const checked = execute.bound\n ? (invariant(mapping.inspectSync !== undefined), mapping.inspectSync(detached))\n : yield* (mapping as RegistrationCallbacks<Registration>).inspect(detached);\n\n invariant(typeof checked.eligible === \"boolean\");\n\n return {\n fingerprint: snapshotOAuthSync(OAuthRegistrationFingerprint, checked.fingerprint),\n eligible: checked.eligible,\n };\n }).pipe(\n (effect) => (execute.bound ? execute.run(effect, false) : effect),\n Effect.onExit((exit) =>\n Effect.sync(() => {\n if (exit._tag === \"Failure\") execute.poison();\n }),\n ),\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n register: (input, prepare) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const data = yield* registrationData(mapping, input, execute.bound);\n const resources = allocated ?? (yield* registrationResources(mapping));\n\n return yield* execute.run(\n Effect.gen(function* () {\n const value = yield* register(mapping, input, data, resources);\n\n return yield* prepareValue(value, prepare);\n }),\n );\n }).pipe(\n Effect.onExit((exit) =>\n Effect.sync(() => {\n if (exit._tag === \"Failure\") execute.poison();\n }),\n ),\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n cleanup: (original, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const owner = yield* CurrentOAuthTransaction;\n\n const input = snapshotOAuthSync(OAuthCleanupInput, original),\n i = mapping.intent,\n r = mapping.command;\n\n const now = yield* owner.now(mapping.clock);\n\n const candidates = yield* owner.read(\n i.table,\n both(\n eq(col(i.table, i.moduleId), input.moduleId),\n sql`${col(i.table, i.state)} <> 'ProvisioningPending' and ${col(i.table, i.retentionUntil)} < ${mapping.clock.encodeInstant(now)}`,\n ),\n { limit: input.limit, observe: false, takeOnly: true },\n );\n\n let removed = 0;\n\n for (const candidate of candidates.rows) {\n const selected = yield* owner.read(\n i.table,\n equal(i.table, {\n [i.moduleId]: input.moduleId,\n [i.reference]: candidate[i.reference],\n }),\n { limit: 1 },\n );\n\n const row = selected.rows[0];\n\n if (row === undefined || row[i.state] === \"ProvisioningPending\") continue;\n let horizon = mapping.clock.decodeInstant(row[i.retentionUntil]);\n\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n if (row[i.commandId] !== null) {\n const commands = yield* owner.read(\n r.table,\n equal(r.table, {\n [r.moduleId]: input.moduleId,\n [r.commandId]: row[i.commandId],\n }),\n { limit: 1 },\n );\n\n const command = commands.rows[0];\n\n if (command === undefined) continue;\n horizon = Math.max(horizon, mapping.clock.decodeInstant(command[r.retentionUntil]));\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n yield* owner.remove(r.table, {\n [r.moduleId]: input.moduleId,\n [r.commandId]: row[i.commandId],\n });\n }\n yield* owner.remove(i.table, {\n [i.moduleId]: input.moduleId,\n [i.reference]: row[i.reference],\n });\n owner.postconditions.push(sql`${mapping.clock.engineNowMillis} > ${horizon}`);\n removed++;\n }\n\n return yield* prepareValue(\n { removed, hasMore: candidates.rows.length === input.limit },\n prepare,\n );\n }),\n ),\n },\n registrationInputs(mapping.application),\n execute.active,\n execute.poison,\n );\n\nexport const makeTargetOAuthSignInServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthSignInPersistence: makeOAuthSignIn(captured, execution),\n }));\n};\n\nexport const makeTargetOAuthRegistrationIntentServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthRegistrationIntents: makeOAuthRegistrationIntents(captured, execution),\n }));\n};\n\nexport const makeTargetOAuthRegistrationServices = <Registration>(\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n registrationAuthority: makeOAuthRegistration<Registration>(captured, execution),\n }));\n};\n\nexport const coordinateOAuthOwner = <Services, Transaction, A, E, R>(\n database: OAuthNativeDatabase,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n allocate: (mapping: any) => Effect.Effect<any, PersistenceMappingError>,\n services: (mapping: any, execution: OAuthExecution, resources: any) => Services,\n owner: (\n transaction: Transaction,\n services: Services,\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<\n A,\n OAuthCoordinatorError<E>,\n R | Crypto.Crypto | LifecycleHooks | NativeDatabase\n> => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.flatMap(LifecycleHooks, (hooks) =>\n coordinateTransactionOwner(\n database,\n CurrentOAuthTransaction,\n configuration,\n validateDrizzleStorage(captured).pipe(\n Effect.andThen(Effect.suspend(() => allocate(captured))),\n ),\n unavailable,\n nonce,\n (execution, resources) =>\n services(\n captured,\n {\n ...execution,\n run: (operation, mutation) =>\n execution.run(operation, mutation).pipe(Effect.provideService(LifecycleHooks, hooks)),\n },\n resources,\n ),\n owner,\n ).pipe(Effect.provideService(LifecycleHooks, hooks)),\n );\n};\n\nconst accountResources = (mapping: any) =>\n Effect.gen(function* () {\n return {\n credentialId: snapshotOAuthSync(\n OAuthCredentialSnapshot.fields.credentialId,\n yield* mapping.allocateCredentialId as Effect.Effect<string, PersistenceMappingError>,\n ),\n revision: snapshotOAuthSync(\n OAuthCredentialSnapshot.fields.credentialRevision,\n yield* mapping.allocateRevision as Effect.Effect<SecurityRevision, PersistenceMappingError>,\n ),\n };\n });\n\nexport const coordinateTargetOAuthRegistration = <Registration, Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly registrationAuthority: OAuthRegistrationAuthority<Registration> },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n registrationResources,\n (captured, execute, resources) => ({\n registrationAuthority: makeOAuthRegistration<Registration>(captured, execute, resources),\n }),\n owner,\n );\n\nexport const coordinateTargetOAuthSignIn = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthSignInPersistence: OAuthSignInPersistence[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n () => Effect.void,\n (captured, execute) => ({ oauthSignInPersistence: makeOAuthSignIn(captured, execute) }),\n owner,\n );\n\nexport const coordinateTargetOAuthRegistrationIntents = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthRegistrationIntents: OAuthRegistrationIntents[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n () => Effect.void,\n (captured, execute) => ({\n oauthRegistrationIntents: makeOAuthRegistrationIntents(captured, execute),\n }),\n owner,\n );\n\nexport const coordinateTargetOAuthAccounts = <Transaction, A, E, R>(\n database: any,\n mapping: any,\n configuration: OAuthTargetConfiguration,\n owner: (\n transaction: Transaction,\n services: { readonly oauthAccountsPersistence: OAuthAccountsPersistence[\"Service\"] },\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOAuthOwner(\n database,\n mapping,\n configuration,\n accountResources,\n (captured, execute, resources) => ({\n oauthAccountsPersistence: makeOAuthAccounts(captured, execute, resources),\n }),\n owner,\n );\n\nexport const makeOAuthAccounts = (\n mapping: any,\n execute: OAuthExecution,\n resources?: any,\n): OAuthAccountsPersistence[\"Service\"] =>\n capturedOAuthService<OAuthAccountsPersistence[\"Service\"]>(\n {\n capture: (input) =>\n execute.run(\n Effect.map(accountCurrent(mapping, input.subjectId), (current) =>\n current === undefined\n ? undefined\n : snapshotOAuthSync(OAuthAccountRevision, current.revision),\n ),\n false,\n ),\n issue: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* issueLink(mapping, input);\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthLinkIssueDecision, value as never),\n prepare,\n );\n }),\n ),\n preflight: (input) =>\n execute.run(\n Effect.map(preflightLink(mapping, input), (current) =>\n current === undefined\n ? undefined\n : snapshotOAuthSync(OAuthLinkPendingFlow, current.flow),\n ),\n false,\n ),\n claim: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* claimLink(mapping, input);\n\n return yield* prepareValue(\n snapshotOAuthSync(OAuthLinkClaimDecision, value as never),\n prepare,\n );\n }),\n ),\n settle: (input, prepare) =>\n Effect.gen(function* () {\n yield* execute.admit;\n const allocated = resources ?? (yield* accountResources(mapping));\n\n return yield* execute.run(\n Effect.gen(function* () {\n const value = yield* settleLink(mapping, input, allocated as never);\n\n return yield* prepareValue(snapshotOAuthSync(OAuthLinkDecision, value), prepare);\n }),\n );\n }).pipe(\n Effect.mapError(unavailable),\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ) as never,\n inspectUnlink: (input) =>\n execute.run(\n Effect.map(inspectUnlink(mapping, input), (value) =>\n snapshotOAuthSync(OAuthUnlinkInspection, value),\n ),\n false,\n ),\n unlink: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const value = yield* unlink(mapping, input);\n\n return yield* prepareValue(snapshotOAuthSync(OAuthUnlinkDecision, value), prepare);\n }),\n ),\n cleanup: (input, prepare) =>\n execute.run(\n Effect.gen(function* () {\n const owner = yield* CurrentOAuthTransaction;\n const value = yield* cleanupFlows(mapping, input, \"link\");\n const remaining = input.limit - value.terminalized - value.removed;\n\n const now = yield* owner.now(mapping.clock),\n r = mapping.command;\n\n let removed = 0;\n\n if (remaining > 0) {\n const rows = yield* owner.read(\n r.table,\n both(\n eq(col(r.table, r.moduleId), input.moduleId),\n sql`${col(r.table, r.retentionUntil)} < ${mapping.clock.encodeInstant(now)}`,\n ),\n { limit: remaining, observe: false, takeOnly: true },\n );\n\n for (const row of rows.rows) {\n const key = { [r.moduleId]: input.moduleId, [r.commandId]: row[r.commandId] };\n const selected = yield* owner.read(r.table, equal(r.table, key), { limit: 1 });\n const current = selected.rows[0];\n\n if (current === undefined) continue;\n const horizon = mapping.clock.decodeInstant(current[r.retentionUntil]);\n\n if (!Number.isSafeInteger(horizon) || horizon >= (yield* owner.now(mapping.clock)))\n continue;\n yield* owner.remove(r.table, key);\n owner.postconditions.push(sql`${mapping.clock.engineNowMillis} > ${horizon}`);\n removed++;\n }\n }\n\n return yield* prepareValue(\n {\n ...value,\n removed: value.removed + removed,\n hasMore: value.hasMore || remaining === removed,\n },\n prepare,\n );\n }),\n ),\n },\n accountsInputs,\n execute.active,\n execute.poison,\n );\n\nexport const makeTargetOAuthAccountsServices = (\n mapping: any,\n configuration: OAuthTargetConfiguration,\n) => {\n const captured = captureOAuthMapping(mapping);\n\n return Effect.map(makeOAuthExecution(configuration, captured), (execution) => ({\n oauthAccountsPersistence: makeOAuthAccounts(captured, execution),\n }));\n};\n\nexport const oauthAccountsPersistenceLayer = <E, R>(\n services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthAccountsServices>>, E, R>,\n) =>\n Layer.effect(\n OAuthAccountsPersistence,\n Effect.map(services, (value) => value.oauthAccountsPersistence),\n );\n\nexport const oauthSignInPersistenceLayer = <E, R>(\n services: Effect.Effect<Effect.Success<ReturnType<typeof makeTargetOAuthSignInServices>>, E, R>,\n) =>\n Layer.effect(\n OAuthSignInPersistence,\n Effect.map(services, (value) => value.oauthSignInPersistence),\n );\n\nexport const oauthRegistrationIntentsLayer = <E, R>(\n services: Effect.Effect<\n Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationIntentServices>>,\n E,\n R\n >,\n) =>\n Layer.effect(\n OAuthRegistrationIntents,\n Effect.map(services, (value) => value.oauthRegistrationIntents),\n );\n\nexport const oauthRegistrationAuthorityLayer = <Id, Registration, E, R>(\n tag: Context.Key<Id, OAuthRegistrationAuthority<Registration>>,\n services: Effect.Effect<\n { readonly registrationAuthority: OAuthRegistrationAuthority<Registration> },\n E,\n R\n >,\n) =>\n Layer.effect(\n tag,\n Effect.map(services, (value) => value.registrationAuthority),\n );\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"passkey-drivers.mjs","names":[],"sources":["../../src/drizzle/passkey-drivers.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyPersistence } from \"@yielded/auth/Passkey\";\nimport type { Table } from \"drizzle-orm\";\nimport { Effect, Context } from \"effect\";\n\nimport { nativeDatabase } from \"./native-database\";\nimport type {\n PasskeyCredentialMapping,\n PasskeyEnrollmentContextMapping,\n PasskeyMappingSource,\n PasskeyPersistenceMapping,\n PasskeyPersistenceServices,\n} from \"./passkey-model\";\nimport type {\n PasskeyRegistrationCeremonyMapping,\n PasskeyRegistrationCeremonyServices,\n} from \"./passkey-registration-ceremony-model\";\nimport {\n type PasskeyCoordinatorError,\n coordinateTargetPasskey,\n coordinateTargetPasskeyRegistration,\n makeTargetPasskeyCredentials,\n makeTargetPasskeyEnrollmentContext,\n makeTargetPasskeyPersistence,\n makeTargetPasskeyRegistration,\n type PasskeyTargetConfiguration,\n} from \"./passkey-target\";\nimport { makePasskeyWriteTarget } from \"./passkey-write-drivers\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\n// oxlint-disable-next-line no-explicit-any -- inspect only the concrete database's installed generic transaction callback.\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\nexport const makePasskeyTarget = <\n DatabaseId,\n D,\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: PasskeyTargetConfiguration,\n) => {\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence>)\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n Exclude<R, PasskeyPersistence> | LifecycleHooks | DatabaseRequirements | RSetup\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskey(\n database,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services: PasskeyPersistenceServices) => {\n const provided = Context.make(PasskeyPersistence, services.passkeyPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence>)\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n Exclude<R, PasskeyPersistence> | LifecycleHooks | DatabaseRequirements | RSetup\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyRegistration(\n database,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services: PasskeyRegistrationCeremonyServices) => {\n const provided = Context.make(PasskeyPersistence, services.passkeyPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n return {\n ...makePasskeyWriteTarget<DatabaseId, D, T, Extra, Synchronous>(databaseService, configuration),\n makePasskeyCredentialServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<PasskeyCredentialMapping<S, C, F, O, H, N> & Extra, RSetup>,\n ) =>\n makeTargetPasskeyCredentials(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyEnrollmentContextServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyEnrollmentContextMapping<PasskeyCredentialMapping<S, C, F, O, H, N>, M, N> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyEnrollmentContext(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyPersistenceServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyPersistence(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyRegistrationCeremonyServices: <\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyRegistration(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n coordinatePasskeyPersistence,\n coordinatePasskeyRegistrationCeremony,\n };\n};\n"],"mappings":";;;;;;;AAoCA,MAAa,qBAOX,iBACA,kBACG;CA2FH,SAAS,6BAqBP,SACA,SAeA,MAKA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,wBACE,UACA,QAAQ,SACR,gBACC,aAAsC,aAAyC;GAC9E,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB;GAC7E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAmEA,SAAS,sCAiBP,SACA,SAOA,MAKA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,oCACE,UACA,QAAQ,SACR,gBACC,aAAsC,aAAkD;GACvF,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB;GAC7E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,OAAO;EACL,GAAG,uBAA6D,iBAAiB,aAAa;EAC9F,gCASE,YAEA,6BAA6B,SAAS,aAAa,CAAC,CAAC,KACnD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,uCAUE,YAKA,mCAAmC,SAAS,aAAa,CAAC,CAAC,KACzD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,iCAaE,YAaA,6BAA6B,SAAS,aAAa,CAAC,CAAC,KACnD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,0CASE,YAKA,8BAA8B,SAAS,aAAa,CAAC,CAAC,KACpD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF;EACA;CACF;AACF"}
1
+ {"version":3,"file":"passkey-drivers.mjs","names":[],"sources":["../../src/drizzle/passkey-drivers.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyPersistence } from \"@yielded/auth/Passkey\";\nimport type { Table } from \"drizzle-orm\";\nimport { type Crypto, Effect, Context } from \"effect\";\n\nimport { nativeDatabase } from \"./native-database\";\nimport type {\n PasskeyCredentialMapping,\n PasskeyEnrollmentContextMapping,\n PasskeyMappingSource,\n PasskeyPersistenceMapping,\n PasskeyPersistenceServices,\n} from \"./passkey-model\";\nimport type {\n PasskeyRegistrationCeremonyMapping,\n PasskeyRegistrationCeremonyServices,\n} from \"./passkey-registration-ceremony-model\";\nimport {\n type PasskeyCoordinatorError,\n coordinateTargetPasskey,\n coordinateTargetPasskeyRegistration,\n makeTargetPasskeyCredentials,\n makeTargetPasskeyEnrollmentContext,\n makeTargetPasskeyPersistence,\n makeTargetPasskeyRegistration,\n type PasskeyTargetConfiguration,\n} from \"./passkey-target\";\nimport { makePasskeyWriteTarget } from \"./passkey-write-drivers\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\n// oxlint-disable-next-line no-explicit-any -- inspect only the concrete database's installed generic transaction callback.\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\nexport const makePasskeyTarget = <\n DatabaseId,\n D,\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: PasskeyTargetConfiguration,\n) => {\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence>)\n | Crypto.Crypto\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | TxId>)\n | Crypto.Crypto\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyPersistence<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n Exclude<R, PasskeyPersistence> | Crypto.Crypto | LifecycleHooks | DatabaseRequirements | RSetup\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskey(\n database,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services: PasskeyPersistenceServices) => {\n const provided = Context.make(PasskeyPersistence, services.passkeyPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence>)\n | Crypto.Crypto\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PasskeyPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | TxId>)\n | Crypto.Crypto\n | LifecycleHooks\n | DatabaseRequirements\n | RSetup\n >;\n function coordinatePasskeyRegistrationCeremony<\n Database extends D,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n Exclude<R, PasskeyPersistence> | Crypto.Crypto | LifecycleHooks | DatabaseRequirements | RSetup\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyRegistration(\n database,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services: PasskeyRegistrationCeremonyServices) => {\n const provided = Context.make(PasskeyPersistence, services.passkeyPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n return {\n ...makePasskeyWriteTarget<DatabaseId, D, T, Extra, Synchronous>(databaseService, configuration),\n makePasskeyCredentialServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<PasskeyCredentialMapping<S, C, F, O, H, N> & Extra, RSetup>,\n ) =>\n makeTargetPasskeyCredentials(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyEnrollmentContextServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyEnrollmentContextMapping<PasskeyCredentialMapping<S, C, F, O, H, N>, M, N> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyEnrollmentContext(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyPersistenceServices: <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyPersistenceMapping<\n PasskeyCredentialMapping<S, C, F, O, H, N>,\n M,\n Flow,\n Admission,\n Charge,\n N\n > &\n Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyPersistence(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n makePasskeyRegistrationCeremonyServices: <\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n H extends T,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyRegistrationCeremonyMapping<M, Flow, Admission, Charge, Intent, H> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyRegistration(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n coordinatePasskeyPersistence,\n coordinatePasskeyRegistrationCeremony,\n };\n};\n"],"mappings":";;;;;;;AAoCA,MAAa,qBAOX,iBACA,kBACG;CA6FH,SAAS,6BAqBP,SACA,SAeA,MAKA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,wBACE,UACA,QAAQ,SACR,gBACC,aAAsC,aAAyC;GAC9E,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB;GAC7E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAqEA,SAAS,sCAiBP,SACA,SAOA,MAKA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,oCACE,UACA,QAAQ,SACR,gBACC,aAAsC,aAAkD;GACvF,MAAM,WAAW,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB;GAC7E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,OAAO;EACL,GAAG,uBAA6D,iBAAiB,aAAa;EAC9F,gCASE,YAEA,6BAA6B,SAAS,aAAa,CAAC,CAAC,KACnD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,uCAUE,YAKA,mCAAmC,SAAS,aAAa,CAAC,CAAC,KACzD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,iCAaE,YAaA,6BAA6B,SAAS,aAAa,CAAC,CAAC,KACnD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF,0CASE,YAKA,8BAA8B,SAAS,aAAa,CAAC,CAAC,KACpD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;EACF;EACA;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"passkey-write-drivers.mjs","names":[],"sources":["../../src/drizzle/passkey-write-drivers.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyManagementPersistence, PasskeyPersistence } from \"@yielded/auth/Passkey\";\nimport type { Table } from \"drizzle-orm\";\nimport { Context, Effect } from \"effect\";\n\nimport { nativeDatabase } from \"./native-database\";\nimport type { PasskeyMappingSource } from \"./passkey-model\";\nimport type { PasskeyCoordinatorError, PasskeyTargetConfiguration } from \"./passkey-target\";\nimport type {\n PasskeyManagementMapping,\n PasskeyRegistrationMapping,\n PasskeyRegistrationWriter,\n} from \"./passkey-write-model\";\nimport {\n coordinateTargetPasskeyManagement,\n coordinateTargetPasskeyRegistrationWriter,\n makeTargetPasskeyManagement,\n makeTargetPasskeyRegistrationWriter,\n} from \"./passkey-write-target\";\nimport type { SuppliedService } from \"./SuppliedService\";\n// oxlint-disable-next-line no-explicit-any -- inspect the installed concrete transaction callback.\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\nexport const makePasskeyWriteTarget = <\n DatabaseId,\n D,\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: PasskeyTargetConfiguration,\n) => {\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true\n ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence | TxId>\n : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence | TxId>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyManagement(\n database,\n options.mapping,\n configuration,\n (\n transaction: TransactionOf<Database>,\n services,\n ): Effect.Effect<A, E, Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>> => {\n const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(\n Context.add(PasskeyManagementPersistence, services.passkeyManagementPersistence),\n );\n\n const work = Effect.provideContext(body, context);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n const makePasskeyManagementServices = <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyManagement(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n );\n\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId | TxId> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId | TxId>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n Exclude<R, PasskeyPersistence | AuthorityId> | LifecycleHooks | RSetup | DatabaseRequirements\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyRegistrationWriter(\n database,\n options.mapping,\n configuration,\n (\n transaction: TransactionOf<Database>,\n services: import(\"./passkey-write-model\").PasskeyRegistrationServices<Value>,\n ) => {\n const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(\n Context.add(options.authority, services.passkeyRegistrationAuthority),\n );\n\n const work = Effect.provideContext(body, context);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n const makePasskeyRegistrationServices = <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyRegistrationWriter<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n Value,\n RSetup\n >(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n );\n\n return {\n makePasskeyManagementServices,\n makePasskeyRegistrationServices,\n coordinatePasskeyManagement,\n coordinatePasskeyRegistration,\n };\n};\n"],"mappings":";;;;;;AA0BA,MAAa,0BAOX,iBACA,kBACG;CA2FH,SAAS,4BAsBP,SACA,SAOA,MAQA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,kCACE,UACA,QAAQ,SACR,gBAEE,aACA,aACuF;GACvF,MAAM,UAAU,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB,CAAC,CAAC,KAC5E,QAAQ,IAAI,8BAA8B,SAAS,4BAA4B,CACjF;GAEA,MAAM,OAAO,OAAO,eAAe,MAAM,OAAO;GAEhD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,MAAM,iCAcJ,YAKA,4BAA4B,SAAS,aAAa,CAAC,CAAC,KAClD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;CA8FF,SAAS,8BAwBP,SACA,SASA,MAKA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,0CACE,UACA,QAAQ,SACR,gBAEE,aACA,aACG;GACH,MAAM,UAAU,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB,CAAC,CAAC,KAC5E,QAAQ,IAAI,QAAQ,WAAW,SAAS,4BAA4B,CACtE;GAEA,MAAM,OAAO,OAAO,eAAe,MAAM,OAAO;GAEhD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,MAAM,mCAeJ,YAMA,oCAKE,SAAS,aAAa,CAAC,CAAC,KACxB,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;CAEF,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
1
+ {"version":3,"file":"passkey-write-drivers.mjs","names":[],"sources":["../../src/drizzle/passkey-write-drivers.ts"],"sourcesContent":["import { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyManagementPersistence, PasskeyPersistence } from \"@yielded/auth/Passkey\";\nimport type { Table } from \"drizzle-orm\";\nimport { type Crypto, Context, Effect } from \"effect\";\n\nimport { nativeDatabase } from \"./native-database\";\nimport type { PasskeyMappingSource } from \"./passkey-model\";\nimport type { PasskeyCoordinatorError, PasskeyTargetConfiguration } from \"./passkey-target\";\nimport type {\n PasskeyManagementMapping,\n PasskeyRegistrationMapping,\n PasskeyRegistrationWriter,\n} from \"./passkey-write-model\";\nimport {\n coordinateTargetPasskeyManagement,\n coordinateTargetPasskeyRegistrationWriter,\n makeTargetPasskeyManagement,\n makeTargetPasskeyRegistrationWriter,\n} from \"./passkey-write-target\";\nimport type { SuppliedService } from \"./SuppliedService\";\n// oxlint-disable-next-line no-explicit-any -- inspect the installed concrete transaction callback.\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\nexport const makePasskeyWriteTarget = <\n DatabaseId,\n D,\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: PasskeyTargetConfiguration,\n) => {\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction?: never;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true\n ? NoInfer<PasskeyPersistence | PasskeyManagementPersistence | TxId>\n : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true\n ? never\n : Exclude<R, PasskeyPersistence | PasskeyManagementPersistence | TxId>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyManagement<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyManagement(\n database,\n options.mapping,\n configuration,\n (\n transaction: TransactionOf<Database>,\n services,\n ): Effect.Effect<A, E, Exclude<R, PasskeyPersistence | PasskeyManagementPersistence>> => {\n const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(\n Context.add(PasskeyManagementPersistence, services.passkeyManagementPersistence),\n );\n\n const work = Effect.provideContext(body, context);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n const makePasskeyManagementServices = <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Command extends T,\n N,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyManagementMapping<S, C, F, O, H, M, Flow, Admission, Charge, Command, N> & Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyManagement(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n );\n\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PasskeyPersistence | AuthorityId | TxId> : R\n >,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PasskeyPersistence | AuthorityId | TxId>)\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinatePasskeyRegistration<\n Database extends D,\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n A,\n E,\n R,\n AuthorityId,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >;\n readonly authority: Context.Key<AuthorityId, PasskeyRegistrationWriter<Value>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n PasskeyCoordinatorError<E> | DatabaseError,\n | Exclude<R, PasskeyPersistence | AuthorityId>\n | Crypto.Crypto\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n > {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateTargetPasskeyRegistrationWriter(\n database,\n options.mapping,\n configuration,\n (\n transaction: TransactionOf<Database>,\n services: import(\"./passkey-write-model\").PasskeyRegistrationServices<Value>,\n ) => {\n const context = Context.make(PasskeyPersistence, services.passkeyPersistence).pipe(\n Context.add(options.authority, services.passkeyRegistrationAuthority),\n );\n\n const work = Effect.provideContext(body, context);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ).pipe(Effect.provideService(NativeDatabase, database)),\n );\n }\n\n const makePasskeyRegistrationServices = <\n S extends T,\n C extends T,\n F extends T,\n O extends T,\n H extends T,\n M extends T,\n Flow extends T,\n Admission extends T,\n Charge extends T,\n Intent extends T,\n N,\n Value,\n RSetup = never,\n >(\n mapping: PasskeyMappingSource<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n RSetup\n >,\n ) =>\n makeTargetPasskeyRegistrationWriter<\n PasskeyRegistrationMapping<S, C, F, O, H, M, Flow, Admission, Charge, Intent, N, Value> &\n Extra,\n Value,\n RSetup\n >(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n );\n\n return {\n makePasskeyManagementServices,\n makePasskeyRegistrationServices,\n coordinatePasskeyManagement,\n coordinatePasskeyRegistration,\n };\n};\n"],"mappings":";;;;;;AA0BA,MAAa,0BAOX,iBACA,kBACG;CA6FH,SAAS,4BAsBP,SACA,SAOA,MASA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,kCACE,UACA,QAAQ,SACR,gBAEE,aACA,aACuF;GACvF,MAAM,UAAU,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB,CAAC,CAAC,KAC5E,QAAQ,IAAI,8BAA8B,SAAS,4BAA4B,CACjF;GAEA,MAAM,OAAO,OAAO,eAAe,MAAM,OAAO;GAEhD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,MAAM,iCAcJ,YAKA,4BAA4B,SAAS,aAAa,CAAC,CAAC,KAClD,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;CAgGF,SAAS,8BAwBP,SACA,SASA,MASA;EACA,OAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,aAC9C,0CACE,UACA,QAAQ,SACR,gBAEE,aACA,aACG;GACH,MAAM,UAAU,QAAQ,KAAK,oBAAoB,SAAS,kBAAkB,CAAC,CAAC,KAC5E,QAAQ,IAAI,QAAQ,WAAW,SAAS,4BAA4B,CACtE;GAEA,MAAM,OAAO,OAAO,eAAe,MAAM,OAAO;GAEhD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CAAC,CAAC,KAAK,OAAO,eAAe,gBAAgB,QAAQ,CAAC,CACxD;CACF;CAEA,MAAM,mCAeJ,YAMA,oCAKE,SAAS,aAAa,CAAC,CAAC,KACxB,OAAO,qBAAqB,gBAAgB,eAAe,eAAe,CAAC,CAC7E;CAEF,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}
@@ -1,5 +1,5 @@
1
1
  //#region src/drizzle/passkey-write-target.d.ts
2
- declare const passkeyManagementPersistenceLayer: <E, R>(services: import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, E, R>) => import("effect/Layer").Layer<import("@yielded/auth/Passkey").PasskeyManagementPersistence, E, Exclude<R, import("effect/Scope").Scope>>, makeTargetPasskeyManagement: <M, RSetup>(source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration) => import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>, makeTargetPasskeyRegistrationWriter: <M, R, RSetup>(source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration) => import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyRegistrationServices<R>, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>, coordinateTargetPasskeyManagement: <M, RSetup, Transaction, A, E, R>(database: any, source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration, body: (transaction: Transaction, services: import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, append: (statement: import("effect/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, import("@yielded/auth-persistence/Adapter").PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>, coordinateTargetPasskeyRegistrationWriter: <M, Value, RSetup, Transaction, A, E, R>(database: any, source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration, body: (transaction: Transaction, services: import("@yielded/auth-persistence/Adapter").PasskeyRegistrationServices<Value>, append: (statement: import("effect/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, import("@yielded/auth-persistence/Adapter").PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>;
2
+ declare const passkeyManagementPersistenceLayer: <E, R>(services: import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, E, R>) => import("effect/Layer").Layer<import("@yielded/auth/Passkey").PasskeyManagementPersistence, E, Exclude<R, import("effect/Scope").Scope>>, makeTargetPasskeyManagement: <M, RSetup>(source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration) => import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, RSetup | import("effect/Crypto").Crypto | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>, makeTargetPasskeyRegistrationWriter: <M, R, RSetup>(source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration) => import("effect/Effect").Effect<import("@yielded/auth-persistence/Adapter").PasskeyRegistrationServices<R>, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, RSetup | import("effect/Crypto").Crypto | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase>, coordinateTargetPasskeyManagement: <M, RSetup, Transaction, A, E, R>(database: any, source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration, body: (transaction: Transaction, services: import("@yielded/auth-persistence/Adapter").PasskeyManagementServices, append: (statement: import("effect/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, import("@yielded/auth-persistence/Adapter").PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase | import("effect/Crypto").Crypto>, coordinateTargetPasskeyRegistrationWriter: <M, Value, RSetup, Transaction, A, E, R>(database: any, source: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<M, RSetup>, configuration: import("@yielded/auth-persistence/Adapter").PasskeyTargetConfiguration, body: (transaction: Transaction, services: import("@yielded/auth-persistence/Adapter").PasskeyRegistrationServices<Value>, append: (statement: import("effect/sql/Statement").Statement<unknown>) => void) => import("effect/Effect").Effect<A, E, R>) => import("effect/Effect").Effect<A, import("@yielded/auth-persistence/Adapter").PasskeyCoordinatorError<E>, R | RSetup | import("@yielded/auth/Hooks").LifecycleHooks | import("@yielded/auth-persistence/Adapter").NativeDatabase | import("effect/Crypto").Crypto>;
3
3
  //#endregion
4
4
  export { passkeyManagementPersistenceLayer };
5
5
  //# sourceMappingURL=passkey-write-target.d.mts.map
@@ -251,7 +251,7 @@ const makeSqlPasswordPreparedPersistence = Effect.fn("makeSqlPasswordPreparedPer
251
251
  if ((yield* readIntent(mapping, and(eq(c.moduleId, input.moduleId), eq(c.commandId, input.commandId)), configuration.locking)).length) return prepare({ _tag: "Existing" }, journal);
252
252
  const now = yield* nowMillis, nativeNow = p.encodeInstant(now);
253
253
  const scope = identifierScope({
254
- credential: authority.snapshot,
254
+ ...authority.snapshot === void 0 ? {} : { credential: authority.snapshot },
255
255
  revision: authority.revision
256
256
  });
257
257
  if (((yield* read(transaction.select({ total: count() }).from(t.table).where(and(eq(c.moduleId, input.moduleId), eq(c.subjectId, authority.nativeSubjectId), or(and(eq(c.state, t.states.Preparing), gt(c.preparationExpiresAt, nativeNow)), and(eq(c.state, t.states.Ready), gt(c.expiresAt, nativeNow))))), false))[0]?.total ?? 0) >= input.policy.maximumPendingPerSubject) return yield* unavailable();