@yielded/auth-persistence-drizzle 0.1.0-beta.1 → 0.1.0-beta.13

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 (228) hide show
  1. package/dist/D1.d.mts +23 -18
  2. package/dist/D1.mjs +10 -4
  3. package/dist/D1.mjs.map +1 -1
  4. package/dist/Libsql.d.mts +58 -53
  5. package/dist/Libsql.mjs +20 -15
  6. package/dist/Libsql.mjs.map +1 -1
  7. package/dist/Mysql2.d.mts +58 -46
  8. package/dist/Mysql2.mjs +13 -6
  9. package/dist/Mysql2.mjs.map +1 -1
  10. package/dist/Pglite.d.mts +52 -41
  11. package/dist/Pglite.mjs +12 -7
  12. package/dist/Pglite.mjs.map +1 -1
  13. package/dist/Postgres.d.mts +59 -48
  14. package/dist/Postgres.mjs +12 -7
  15. package/dist/Postgres.mjs.map +1 -1
  16. package/dist/SqliteBun.d.mts +67 -62
  17. package/dist/SqliteBun.mjs +20 -14
  18. package/dist/SqliteBun.mjs.map +1 -1
  19. package/dist/SqliteDo.d.mts +58 -52
  20. package/dist/SqliteDo.mjs +26 -14
  21. package/dist/SqliteDo.mjs.map +1 -1
  22. package/dist/SqliteNode.d.mts +58 -53
  23. package/dist/SqliteNode.mjs +20 -14
  24. package/dist/SqliteNode.mjs.map +1 -1
  25. package/dist/SqliteWasm.d.mts +58 -53
  26. package/dist/SqliteWasm.mjs +20 -14
  27. package/dist/SqliteWasm.mjs.map +1 -1
  28. package/dist/drizzle/d1-database.d.mts +11 -0
  29. package/dist/drizzle/d1-database.mjs +8 -0
  30. package/dist/drizzle/d1-database.mjs.map +1 -0
  31. package/dist/drizzle/d1-emails.d.mts +8 -7
  32. package/dist/drizzle/d1-emails.mjs +7 -4
  33. package/dist/drizzle/d1-emails.mjs.map +1 -1
  34. package/dist/drizzle/d1-identity.mjs +12 -9
  35. package/dist/drizzle/d1-identity.mjs.map +1 -1
  36. package/dist/drizzle/d1-oauth.d.mts +10 -9
  37. package/dist/drizzle/d1-oauth.mjs +7 -4
  38. package/dist/drizzle/d1-oauth.mjs.map +1 -1
  39. package/dist/drizzle/d1-passkey.d.mts +3 -14
  40. package/dist/drizzle/d1-passkey.mjs +2 -1
  41. package/dist/drizzle/d1-passkey.mjs.map +1 -1
  42. package/dist/drizzle/d1-password-prepared.d.mts +4 -3
  43. package/dist/drizzle/d1-password-prepared.mjs +3 -1
  44. package/dist/drizzle/d1-password-prepared.mjs.map +1 -1
  45. package/dist/drizzle/d1-passwords.d.mts +6 -5
  46. package/dist/drizzle/d1-passwords.mjs +11 -7
  47. package/dist/drizzle/d1-passwords.mjs.map +1 -1
  48. package/dist/drizzle/d1-phone.d.mts +3 -4
  49. package/dist/drizzle/d1-phone.mjs +2 -1
  50. package/dist/drizzle/d1-phone.mjs.map +1 -1
  51. package/dist/drizzle/d1-planning.d.mts +1 -1
  52. package/dist/drizzle/d1-proofs.d.mts +4 -3
  53. package/dist/drizzle/d1-proofs.mjs +3 -1
  54. package/dist/drizzle/d1-proofs.mjs.map +1 -1
  55. package/dist/drizzle/d1-sessions.d.mts +11 -10
  56. package/dist/drizzle/d1-sessions.mjs +15 -9
  57. package/dist/drizzle/d1-sessions.mjs.map +1 -1
  58. package/dist/drizzle/d1-totp.d.mts +3 -4
  59. package/dist/drizzle/d1-totp.mjs +2 -1
  60. package/dist/drizzle/d1-totp.mjs.map +1 -1
  61. package/dist/drizzle/email-registration.mjs +2 -1
  62. package/dist/drizzle/email-registration.mjs.map +1 -1
  63. package/dist/drizzle/email-target.d.mts +7 -6
  64. package/dist/drizzle/email-target.mjs +10 -10
  65. package/dist/drizzle/email-target.mjs.map +1 -1
  66. package/dist/drizzle/mysql-database.d.mts +8 -0
  67. package/dist/drizzle/mysql-database.mjs +8 -0
  68. package/dist/drizzle/mysql-database.mjs.map +1 -0
  69. package/dist/drizzle/mysql-emails.d.mts +7 -6
  70. package/dist/drizzle/mysql-emails.mjs +12 -8
  71. package/dist/drizzle/mysql-emails.mjs.map +1 -1
  72. package/dist/drizzle/mysql-identity.mjs +12 -9
  73. package/dist/drizzle/mysql-identity.mjs.map +1 -1
  74. package/dist/drizzle/mysql-password-prepared.d.mts +3 -2
  75. package/dist/drizzle/mysql-password-prepared.mjs +6 -2
  76. package/dist/drizzle/mysql-password-prepared.mjs.map +1 -1
  77. package/dist/drizzle/mysql-passwords.d.mts +6 -4
  78. package/dist/drizzle/mysql-passwords.mjs +11 -7
  79. package/dist/drizzle/mysql-passwords.mjs.map +1 -1
  80. package/dist/drizzle/mysql-proofs.d.mts +3 -2
  81. package/dist/drizzle/mysql-proofs.mjs +8 -4
  82. package/dist/drizzle/mysql-proofs.mjs.map +1 -1
  83. package/dist/drizzle/mysql-sessions.d.mts +11 -10
  84. package/dist/drizzle/mysql-sessions.mjs +16 -12
  85. package/dist/drizzle/mysql-sessions.mjs.map +1 -1
  86. package/dist/drizzle/native-database.mjs +10 -0
  87. package/dist/drizzle/native-database.mjs.map +1 -0
  88. package/dist/drizzle/oauth-connected-drivers.mjs +7 -5
  89. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
  90. package/dist/drizzle/oauth-connected-settlement.mjs +3 -2
  91. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -1
  92. package/dist/drizzle/oauth-connected-sign-in.mjs +4 -3
  93. package/dist/drizzle/oauth-connected-sign-in.mjs.map +1 -1
  94. package/dist/drizzle/oauth-connected-target.d.mts +6 -7
  95. package/dist/drizzle/oauth-connected-target.mjs +4 -5
  96. package/dist/drizzle/oauth-connected-target.mjs.map +1 -1
  97. package/dist/drizzle/oauth-drivers.mjs +8 -6
  98. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  99. package/dist/drizzle/oauth-target.d.mts +12 -11
  100. package/dist/drizzle/oauth-target.mjs +13 -12
  101. package/dist/drizzle/oauth-target.mjs.map +1 -1
  102. package/dist/drizzle/passkey-drivers.mjs +8 -6
  103. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  104. package/dist/drizzle/passkey-write-drivers.mjs +5 -3
  105. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  106. package/dist/drizzle/passkey-write-target.d.mts +1 -1
  107. package/dist/drizzle/password-prepared-sql.mjs +2 -1
  108. package/dist/drizzle/password-prepared-sql.mjs.map +1 -1
  109. package/dist/drizzle/password-prepared-target.d.mts +3 -2
  110. package/dist/drizzle/password-prepared-target.mjs +4 -3
  111. package/dist/drizzle/password-prepared-target.mjs.map +1 -1
  112. package/dist/drizzle/password-registration.mjs +2 -1
  113. package/dist/drizzle/password-registration.mjs.map +1 -1
  114. package/dist/drizzle/password-target.d.mts +5 -4
  115. package/dist/drizzle/password-target.mjs +8 -8
  116. package/dist/drizzle/password-target.mjs.map +1 -1
  117. package/dist/drizzle/pg-database.d.mts +9 -0
  118. package/dist/drizzle/pg-database.mjs +8 -0
  119. package/dist/drizzle/pg-database.mjs.map +1 -0
  120. package/dist/drizzle/pg-emails.d.mts +7 -6
  121. package/dist/drizzle/pg-emails.mjs +12 -8
  122. package/dist/drizzle/pg-emails.mjs.map +1 -1
  123. package/dist/drizzle/pg-identity.mjs +12 -9
  124. package/dist/drizzle/pg-identity.mjs.map +1 -1
  125. package/dist/drizzle/pg-password-prepared.d.mts +3 -2
  126. package/dist/drizzle/pg-password-prepared.mjs +6 -2
  127. package/dist/drizzle/pg-password-prepared.mjs.map +1 -1
  128. package/dist/drizzle/pg-passwords.d.mts +6 -4
  129. package/dist/drizzle/pg-passwords.mjs +11 -7
  130. package/dist/drizzle/pg-passwords.mjs.map +1 -1
  131. package/dist/drizzle/pg-proofs.d.mts +3 -2
  132. package/dist/drizzle/pg-proofs.mjs +8 -4
  133. package/dist/drizzle/pg-proofs.mjs.map +1 -1
  134. package/dist/drizzle/pg-sessions.d.mts +11 -10
  135. package/dist/drizzle/pg-sessions.mjs +16 -12
  136. package/dist/drizzle/pg-sessions.mjs.map +1 -1
  137. package/dist/drizzle/phone-target.d.mts +4 -3
  138. package/dist/drizzle/phone-target.mjs +12 -11
  139. package/dist/drizzle/phone-target.mjs.map +1 -1
  140. package/dist/drizzle/proof-target.d.mts +3 -2
  141. package/dist/drizzle/proof-target.mjs +5 -5
  142. package/dist/drizzle/proof-target.mjs.map +1 -1
  143. package/dist/drizzle/session-sql.d.mts +1 -0
  144. package/dist/drizzle/session-target.d.mts +10 -8
  145. package/dist/drizzle/session-target.mjs +11 -11
  146. package/dist/drizzle/session-target.mjs.map +1 -1
  147. package/dist/drizzle/sqlite-emails.mjs +9 -5
  148. package/dist/drizzle/sqlite-emails.mjs.map +1 -1
  149. package/dist/drizzle/sqlite-identity.mjs +14 -11
  150. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  151. package/dist/drizzle/sqlite-password-prepared.mjs +7 -3
  152. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -1
  153. package/dist/drizzle/sqlite-passwords.mjs +10 -6
  154. package/dist/drizzle/sqlite-passwords.mjs.map +1 -1
  155. package/dist/drizzle/sqlite-proofs.mjs +7 -3
  156. package/dist/drizzle/sqlite-proofs.mjs.map +1 -1
  157. package/dist/drizzle/sqlite-sessions.mjs +16 -12
  158. package/dist/drizzle/sqlite-sessions.mjs.map +1 -1
  159. package/dist/drizzle/standalone-guard.d.mts +2 -0
  160. package/dist/drizzle/standalone-guard.mjs +8 -4
  161. package/dist/drizzle/standalone-guard.mjs.map +1 -1
  162. package/dist/drizzle/totp-target.d.mts +4 -3
  163. package/dist/drizzle/totp-target.mjs +31 -28
  164. package/dist/drizzle/totp-target.mjs.map +1 -1
  165. package/package.json +1 -1
  166. package/src/D1.ts +37 -10
  167. package/src/Libsql.ts +45 -17
  168. package/src/Mysql2.ts +39 -13
  169. package/src/Pglite.ts +47 -13
  170. package/src/Postgres.ts +47 -13
  171. package/src/SqliteBun.ts +58 -30
  172. package/src/SqliteDo.ts +61 -19
  173. package/src/SqliteNode.ts +55 -28
  174. package/src/SqliteWasm.ts +55 -28
  175. package/src/drizzle/d1-database.ts +10 -0
  176. package/src/drizzle/d1-emails.ts +84 -84
  177. package/src/drizzle/d1-identity.ts +17 -20
  178. package/src/drizzle/d1-oauth.ts +19 -8
  179. package/src/drizzle/d1-passkey.ts +5 -1
  180. package/src/drizzle/d1-password-prepared.ts +38 -37
  181. package/src/drizzle/d1-passwords.ts +118 -108
  182. package/src/drizzle/d1-phone.ts +5 -1
  183. package/src/drizzle/d1-proofs.ts +29 -30
  184. package/src/drizzle/d1-sessions.ts +51 -38
  185. package/src/drizzle/d1-totp.ts +5 -1
  186. package/src/drizzle/email-registration.ts +6 -2
  187. package/src/drizzle/email-target.ts +17 -19
  188. package/src/drizzle/mysql-database.ts +8 -0
  189. package/src/drizzle/mysql-emails.ts +28 -16
  190. package/src/drizzle/mysql-identity.ts +18 -21
  191. package/src/drizzle/mysql-password-prepared.ts +10 -8
  192. package/src/drizzle/mysql-passwords.ts +21 -9
  193. package/src/drizzle/mysql-proofs.ts +16 -5
  194. package/src/drizzle/mysql-sessions.ts +40 -17
  195. package/src/drizzle/native-database.ts +22 -0
  196. package/src/drizzle/oauth-connected-drivers.ts +18 -6
  197. package/src/drizzle/oauth-connected-settlement.ts +5 -3
  198. package/src/drizzle/oauth-connected-sign-in.ts +7 -3
  199. package/src/drizzle/oauth-connected-target.ts +16 -17
  200. package/src/drizzle/oauth-drivers.ts +26 -10
  201. package/src/drizzle/oauth-target.ts +30 -42
  202. package/src/drizzle/passkey-drivers.ts +21 -13
  203. package/src/drizzle/passkey-write-drivers.ts +11 -6
  204. package/src/drizzle/password-prepared-sql.ts +2 -4
  205. package/src/drizzle/password-prepared-target.ts +9 -6
  206. package/src/drizzle/password-registration.ts +7 -8
  207. package/src/drizzle/password-target.ts +19 -18
  208. package/src/drizzle/pg-database.ts +10 -0
  209. package/src/drizzle/pg-emails.ts +28 -16
  210. package/src/drizzle/pg-identity.ts +18 -22
  211. package/src/drizzle/pg-password-prepared.ts +10 -8
  212. package/src/drizzle/pg-passwords.ts +21 -9
  213. package/src/drizzle/pg-proofs.ts +16 -5
  214. package/src/drizzle/pg-sessions.ts +40 -17
  215. package/src/drizzle/phone-target.ts +22 -17
  216. package/src/drizzle/proof-target.ts +9 -12
  217. package/src/drizzle/session-target.ts +32 -50
  218. package/src/drizzle/sqlite-emails.ts +30 -13
  219. package/src/drizzle/sqlite-identity.ts +22 -42
  220. package/src/drizzle/sqlite-password-prepared.ts +23 -9
  221. package/src/drizzle/sqlite-passwords.ts +29 -15
  222. package/src/drizzle/sqlite-proofs.ts +28 -5
  223. package/src/drizzle/sqlite-sessions.ts +49 -23
  224. package/src/drizzle/standalone-guard.ts +18 -6
  225. package/src/drizzle/totp-target.ts +61 -60
  226. package/dist/drizzle/d1-identity.d.mts +0 -30
  227. package/dist/drizzle/mysql-identity.d.mts +0 -21
  228. package/dist/drizzle/pg-identity.d.mts +0 -22
@@ -37,6 +37,7 @@ import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
37
37
  import { Schema, Cause, DateTime, Effect, Option, Context } from "effect";
38
38
  import type { Statement } from "effect/sql/Statement";
39
39
 
40
+ import { Database as DatabaseService } from "./d1-database";
40
41
  import { CurrentD1PlanningDatabase, makeD1Owner } from "./d1-planning";
41
42
  import { compileD1ProofCompletionPlan } from "./d1-proofs";
42
43
  import { D1BatchStatements } from "./D1BatchStatements";
@@ -1268,10 +1269,9 @@ export const makeD1EmailSignInServices = <
1268
1269
  C extends AnySQLiteTable,
1269
1270
  NativeId,
1270
1271
  >(
1271
- database: Database,
1272
1272
  mapping: EmailSignInMapping<S, I, C, NativeId>,
1273
1273
  ) =>
1274
- Effect.succeed({
1274
+ Effect.map(DatabaseService, (database) => ({
1275
1275
  emailSignInTargets: EmailSignInTargets.of({
1276
1276
  lookup: (input) => {
1277
1277
  if (!validEmailSignInConstraints(mapping as any)) return Effect.fail(unavailable());
@@ -1293,9 +1293,9 @@ export const makeD1EmailSignInServices = <
1293
1293
  );
1294
1294
  },
1295
1295
  }),
1296
- });
1296
+ }));
1297
1297
 
1298
- export const makeD1EmailAddressServices = <
1298
+ export const makeD1EmailAddressServices = Effect.fnUntraced(function* <
1299
1299
  S extends AnySQLiteTable,
1300
1300
  I extends AnySQLiteTable,
1301
1301
  C extends AnySQLiteTable,
@@ -1315,7 +1315,6 @@ export const makeD1EmailAddressServices = <
1315
1315
  PCr extends AnySQLiteTable,
1316
1316
  PNativeId,
1317
1317
  >(
1318
- database: Database,
1319
1318
  mapping: D1EmailAddressMapping<S, I, C, AC, M, NativeId>,
1320
1319
  proofMapping: D1ProofPersistenceMapping<
1321
1320
  PRq,
@@ -1331,56 +1330,57 @@ export const makeD1EmailAddressServices = <
1331
1330
  PCr,
1332
1331
  PNativeId
1333
1332
  >,
1334
- ) =>
1335
- Effect.gen(function* () {
1336
- const hooks = yield* LifecycleHooks;
1333
+ ) {
1334
+ const database = yield* DatabaseService;
1337
1335
 
1338
- const plans = makeAddressPlans(
1339
- mapping as unknown as AddressMapping,
1340
- proofMapping as unknown as ProofMapping,
1341
- );
1336
+ const hooks = yield* LifecycleHooks;
1342
1337
 
1343
- const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
1344
- Effect.gen(function* () {
1345
- if (yield* hasCommitScope) return yield* unavailable();
1338
+ const plans = makeAddressPlans(
1339
+ mapping as unknown as AddressMapping,
1340
+ proofMapping as unknown as ProofMapping,
1341
+ );
1346
1342
 
1347
- return yield* executeStandalone(plan, 2);
1348
- }).pipe(
1349
- Effect.provideService(CurrentD1PlanningDatabase, database),
1350
- Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1351
- Effect.provideService(LifecycleHooks, hooks),
1352
- );
1343
+ const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
1344
+ Effect.gen(function* () {
1345
+ if (yield* hasCommitScope) return yield* unavailable();
1353
1346
 
1354
- const service: EmailAddressPersistence["Service"] = {
1355
- target: (input) =>
1356
- plans
1357
- .target(input)
1358
- .pipe(
1359
- Effect.provideService(CurrentD1PlanningDatabase, database),
1360
- Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1361
- Effect.provideService(LifecycleHooks, hooks),
1362
- translateFailure,
1363
- ),
1364
- checkCompletion: (input) =>
1365
- plans
1366
- .checkCompletion(input)
1367
- .pipe(
1368
- Effect.provideService(CurrentD1PlanningDatabase, database),
1369
- Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1370
- Effect.provideService(LifecycleHooks, hooks),
1371
- translateFailure,
1372
- ),
1373
- verifyWithProof: (input, prepare) =>
1374
- run(plans.verifyWithProof(input, prepare)).pipe(translateFailure),
1375
- changeWithProof: (input, prepare) =>
1376
- run(plans.changeWithProof(input, prepare)).pipe(translateFailure),
1377
- cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
1378
- };
1379
-
1380
- return { emailAddressPersistence: service };
1381
- });
1347
+ return yield* executeStandalone(plan, 2);
1348
+ }).pipe(
1349
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1350
+ Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1351
+ Effect.provideService(LifecycleHooks, hooks),
1352
+ );
1353
+
1354
+ const service: EmailAddressPersistence["Service"] = {
1355
+ target: (input) =>
1356
+ plans
1357
+ .target(input)
1358
+ .pipe(
1359
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1360
+ Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1361
+ Effect.provideService(LifecycleHooks, hooks),
1362
+ translateFailure,
1363
+ ),
1364
+ checkCompletion: (input) =>
1365
+ plans
1366
+ .checkCompletion(input)
1367
+ .pipe(
1368
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1369
+ Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1370
+ Effect.provideService(LifecycleHooks, hooks),
1371
+ translateFailure,
1372
+ ),
1373
+ verifyWithProof: (input, prepare) =>
1374
+ run(plans.verifyWithProof(input, prepare)).pipe(translateFailure),
1375
+ changeWithProof: (input, prepare) =>
1376
+ run(plans.changeWithProof(input, prepare)).pipe(translateFailure),
1377
+ cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
1378
+ };
1382
1379
 
1383
- export const makeD1EmailRegistrationServices = <
1380
+ return { emailAddressPersistence: service };
1381
+ });
1382
+
1383
+ export const makeD1EmailRegistrationServices = Effect.fnUntraced(function* <
1384
1384
  Registration,
1385
1385
  S extends AnySQLiteTable,
1386
1386
  I extends AnySQLiteTable,
@@ -1401,7 +1401,6 @@ export const makeD1EmailRegistrationServices = <
1401
1401
  PCr extends AnySQLiteTable,
1402
1402
  PNativeId,
1403
1403
  >(
1404
- database: Database,
1405
1404
  mapping: D1EmailRegistrationMapping<Registration, S, I, C, AC, Rq, NativeId>,
1406
1405
  proofMapping: D1ProofPersistenceMapping<
1407
1406
  PRq,
@@ -1417,44 +1416,45 @@ export const makeD1EmailRegistrationServices = <
1417
1416
  PCr,
1418
1417
  PNativeId
1419
1418
  >,
1420
- ) =>
1421
- Effect.gen(function* () {
1422
- const hooks = yield* LifecycleHooks;
1419
+ ) {
1420
+ const database = yield* DatabaseService;
1423
1421
 
1424
- const plans = makeRegistrationPlans(
1425
- mapping as unknown as RegistrationMapping<Registration> & {
1426
- readonly d1: AddressMapping["d1"];
1427
- },
1428
- proofMapping as unknown as ProofMapping,
1429
- );
1422
+ const hooks = yield* LifecycleHooks;
1430
1423
 
1431
- const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
1432
- Effect.gen(function* () {
1433
- if (yield* hasCommitScope) return yield* unavailable();
1424
+ const plans = makeRegistrationPlans(
1425
+ mapping as unknown as RegistrationMapping<Registration> & {
1426
+ readonly d1: AddressMapping["d1"];
1427
+ },
1428
+ proofMapping as unknown as ProofMapping,
1429
+ );
1434
1430
 
1435
- return yield* executeStandalone(plan, 2);
1436
- }).pipe(
1437
- Effect.provideService(CurrentD1PlanningDatabase, database),
1438
- Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1439
- Effect.provideService(LifecycleHooks, hooks),
1440
- );
1431
+ const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
1432
+ Effect.gen(function* () {
1433
+ if (yield* hasCommitScope) return yield* unavailable();
1441
1434
 
1442
- const service: EmailRegistrationAuthority<Registration> = {
1443
- inspect: (input) =>
1444
- plans
1445
- .inspect(input)
1446
- .pipe(
1447
- Effect.provideService(CurrentD1PlanningDatabase, database),
1448
- Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1449
- Effect.provideService(LifecycleHooks, hooks),
1450
- translateFailure,
1451
- ),
1452
- registerWithProof: (input, prepare) =>
1453
- run(plans.registerWithProof(input, prepare)).pipe(translateFailure),
1454
- };
1435
+ return yield* executeStandalone(plan, 2);
1436
+ }).pipe(
1437
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1438
+ Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1439
+ Effect.provideService(LifecycleHooks, hooks),
1440
+ );
1455
1441
 
1456
- return { registrationAuthority: service };
1457
- });
1442
+ const service: EmailRegistrationAuthority<Registration> = {
1443
+ inspect: (input) =>
1444
+ plans
1445
+ .inspect(input)
1446
+ .pipe(
1447
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1448
+ Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
1449
+ Effect.provideService(LifecycleHooks, hooks),
1450
+ translateFailure,
1451
+ ),
1452
+ registerWithProof: (input, prepare) =>
1453
+ run(plans.registerWithProof(input, prepare)).pipe(translateFailure),
1454
+ };
1455
+
1456
+ return { registrationAuthority: service };
1457
+ });
1458
1458
 
1459
1459
  type CoordinatorError<E> = E | EmailUnavailable | HookConfigurationError;
1460
1460
 
@@ -18,7 +18,6 @@ import {
18
18
  is,
19
19
  sql,
20
20
  SQL,
21
- type AnyRelations,
22
21
  type InferInsertModel,
23
22
  type Table,
24
23
  } from "drizzle-orm";
@@ -26,6 +25,7 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
26
25
  import type { AnySQLiteTable, SQLiteColumn } from "drizzle-orm/sqlite-core";
27
26
  import { Cause, Effect, Schema } from "effect";
28
27
 
28
+ import { Database as DatabaseService } from "./d1-database";
29
29
  import {
30
30
  column,
31
31
  isMappedConstraintConflict,
@@ -92,15 +92,14 @@ const selectFields = <T extends Table>(
92
92
  * database-generated subject id from the first insert via last_insert_rowid;
93
93
  * the optional identifier then reads that stable id from the receipt.
94
94
  */
95
- export const makeD1SubjectProvisioningServices = <
95
+ export const makeD1SubjectProvisioningServices = Effect.fnUntraced(function* <
96
96
  Subject extends AnySQLiteTable,
97
97
  Identifier extends AnySQLiteTable,
98
98
  Request extends AnySQLiteTable,
99
99
  NativeId,
100
- >(
101
- database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
102
- mapping: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>,
103
- ) => {
100
+ >(mapping: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>) {
101
+ const database = yield* DatabaseService;
102
+
104
103
  const db = database as RuntimeDatabase;
105
104
  const requestTable = mapping.provisioningRequest.table;
106
105
 
@@ -254,16 +253,15 @@ export const makeD1SubjectProvisioningServices = <
254
253
  }, mapUnavailable);
255
254
 
256
255
  return { subjectProvisioner: SubjectProvisioner.of({ provision }) } as const;
257
- };
256
+ });
258
257
 
259
- export const makeD1ExternalIdentityServices = <
258
+ export const makeD1ExternalIdentityServices = Effect.fnUntraced(function* <
260
259
  Subject extends AnySQLiteTable,
261
260
  External extends AnySQLiteTable,
262
261
  NativeId,
263
- >(
264
- database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
265
- mapping: D1ExternalIdentityMapping<Subject, External, NativeId>,
266
- ) => {
262
+ >(mapping: D1ExternalIdentityMapping<Subject, External, NativeId>) {
263
+ const database = yield* DatabaseService;
264
+
267
265
  const db = database as RuntimeDatabase;
268
266
  const externalTable = mapping.externalIdentity.table;
269
267
 
@@ -358,18 +356,17 @@ export const makeD1ExternalIdentityServices = <
358
356
  }, mapUnavailable);
359
357
 
360
358
  return { externalIdentityMutation: ExternalIdentityMutation.of({ bind }) } as const;
361
- };
359
+ });
362
360
 
363
- export const makeD1IdentityServices = <
361
+ export const makeD1IdentityServices = Effect.fnUntraced(function* <
364
362
  Subject extends AnySQLiteTable,
365
363
  Identifier extends AnySQLiteTable,
366
364
  External extends AnySQLiteTable,
367
365
  Request extends AnySQLiteTable,
368
366
  NativeId,
369
- >(
370
- database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
371
- mapping: D1GeneratedIdentityMapping<Subject, Identifier, External, Request, NativeId>,
372
- ) => ({
373
- ...makeD1SubjectProvisioningServices(database, mapping),
374
- ...makeD1ExternalIdentityServices(database, mapping),
367
+ >(mapping: D1GeneratedIdentityMapping<Subject, Identifier, External, Request, NativeId>) {
368
+ return {
369
+ ...(yield* makeD1SubjectProvisioningServices(mapping)),
370
+ ...(yield* makeD1ExternalIdentityServices(mapping)),
371
+ };
375
372
  });
@@ -1,4 +1,5 @@
1
1
  import type { D1Client } from "@effect/sql-d1/D1Client";
2
+ import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
2
3
  import type { LifecycleHooks } from "@yielded/auth/Hooks";
3
4
  import {
4
5
  OAuthAccountsPersistence,
@@ -11,8 +12,10 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
11
12
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
12
13
  import { Effect, Context } from "effect";
13
14
 
15
+ import { Database as DatabaseService } from "./d1-database";
14
16
  import { makeD1Owner } from "./d1-planning";
15
17
  import { D1BatchStatements } from "./D1BatchStatements";
18
+ import { nativeDatabase } from "./native-database";
16
19
  import type {
17
20
  OAuthAccountsMapping,
18
21
  OAuthD1Mapping,
@@ -54,9 +57,11 @@ export const makeD1OAuthAccountsServices = <
54
57
  U extends SQLiteTable,
55
58
  N,
56
59
  >(
57
- database: Database,
58
60
  mapping: OAuthAccountsMapping<S, O, C, AC, F, T, U, N> & OAuthD1Mapping,
59
- ) => makeTargetOAuthAccountsServices(database, mapping, configuration);
61
+ ) =>
62
+ makeTargetOAuthAccountsServices(mapping, configuration).pipe(
63
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
64
+ );
60
65
 
61
66
  export const makeD1OAuthSignInServices = <
62
67
  S extends SQLiteTable,
@@ -66,9 +71,11 @@ export const makeD1OAuthSignInServices = <
66
71
  F extends SQLiteTable,
67
72
  N,
68
73
  >(
69
- database: Database,
70
74
  mapping: OAuthSignInMapping<S, O, C, AC, F, N> & OAuthD1Mapping,
71
- ) => makeTargetOAuthSignInServices(database, mapping, configuration);
75
+ ) =>
76
+ makeTargetOAuthSignInServices(mapping, configuration).pipe(
77
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
78
+ );
72
79
 
73
80
  export const makeD1OAuthRegistrationIntentServices = <
74
81
  S extends SQLiteTable,
@@ -80,9 +87,11 @@ export const makeD1OAuthRegistrationIntentServices = <
80
87
  I extends SQLiteTable,
81
88
  N,
82
89
  >(
83
- database: Database,
84
90
  mapping: OAuthRegistrationIntentMapping<S, O, C, AC, F, T, I, N> & OAuthD1Mapping,
85
- ) => makeTargetOAuthRegistrationIntentServices(database, mapping, configuration);
91
+ ) =>
92
+ makeTargetOAuthRegistrationIntentServices(mapping, configuration).pipe(
93
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
94
+ );
86
95
 
87
96
  export const makeD1OAuthRegistrationServices = <
88
97
  Registration,
@@ -95,9 +104,11 @@ export const makeD1OAuthRegistrationServices = <
95
104
  R extends SQLiteTable,
96
105
  N,
97
106
  >(
98
- database: Database,
99
107
  mapping: OAuthRegistrationMapping<Registration, S, O, C, AC, T, I, R, N> & OAuthD1Mapping,
100
- ) => makeTargetOAuthRegistrationServices<Registration>(database, mapping, configuration);
108
+ ) =>
109
+ makeTargetOAuthRegistrationServices<Registration>(mapping, configuration).pipe(
110
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
111
+ );
101
112
 
102
113
  export function coordinateD1OAuthSignIn<
103
114
  S extends SQLiteTable,
@@ -10,6 +10,7 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
10
10
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
11
11
  import { Effect, Context } from "effect";
12
12
 
13
+ import { Database as DatabaseService } from "./d1-database";
13
14
  import { makeD1Owner } from "./d1-planning";
14
15
  import { D1BatchStatements } from "./D1BatchStatements";
15
16
  import { makePasskeyTarget } from "./passkey-drivers";
@@ -38,7 +39,10 @@ const configuration = {
38
39
  standaloneGuard: () => Effect.void,
39
40
  };
40
41
 
41
- const target = makePasskeyTarget<Database, Table, D1PasskeyMapping>(configuration);
42
+ const target = makePasskeyTarget<DatabaseService, Database, Table, D1PasskeyMapping>(
43
+ DatabaseService,
44
+ configuration,
45
+ );
42
46
 
43
47
  export const {
44
48
  makePasskeyCredentialServices,
@@ -32,6 +32,7 @@ import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
32
32
  import { Cause, DateTime, Effect, Predicate, Redacted, Schema, Context } from "effect";
33
33
  import type { Statement } from "effect/sql/Statement";
34
34
 
35
+ import { Database as DatabaseService } from "./d1-database";
35
36
  import { balancedD1And as and, compactD1GeneratedStatement } from "./d1-generated-statement";
36
37
  import { passwordD1Kernel as kernel } from "./d1-passwords";
37
38
  import { CurrentD1PlanningDatabase, makeD1Owner } from "./d1-planning";
@@ -964,7 +965,7 @@ const makePreparedPlans = (mapping: Mapping, proofMapping?: any) => {
964
965
  return services;
965
966
  };
966
967
 
967
- export const makeD1PasswordPreparedPersistenceServices = <
968
+ export const makeD1PasswordPreparedPersistenceServices = Effect.fnUntraced(function* <
968
969
  S extends AnySQLiteTable,
969
970
  I extends AnySQLiteTable,
970
971
  C extends AnySQLiteTable,
@@ -984,47 +985,47 @@ export const makeD1PasswordPreparedPersistenceServices = <
984
985
  PCr extends AnySQLiteTable = AnySQLiteTable,
985
986
  PNativeId = unknown,
986
987
  >(
987
- database: Database,
988
988
  mapping: D1PasswordPreparedPersistenceMapping<S, I, C, AC, At, RS, CE, M, T, B, NativeId>,
989
989
  proofMapping?: D1PasswordPreparedProofMapping<PS, PC, PM, PSub, PI, PCr, PNativeId>,
990
- ) =>
991
- Effect.gen(function* () {
992
- const hooks = yield* LifecycleHooks;
993
- const plans = makePreparedPlans(mapping as unknown as Mapping, proofMapping);
990
+ ) {
991
+ const database = yield* DatabaseService;
994
992
 
995
- const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
996
- Effect.gen(function* () {
997
- if (yield* hasCommitScope) return yield* unavailable();
993
+ const hooks = yield* LifecycleHooks;
994
+ const plans = makePreparedPlans(mapping as unknown as Mapping, proofMapping);
998
995
 
999
- return yield* executeStandalone(plan);
1000
- }).pipe(
1001
- Effect.provideService(CurrentD1PlanningDatabase, database),
1002
- Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
1003
- Effect.provideService(LifecycleHooks, hooks),
1004
- );
996
+ const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
997
+ Effect.gen(function* () {
998
+ if (yield* hasCommitScope) return yield* unavailable();
1005
999
 
1006
- const service: PasswordPreparedPersistence = {
1007
- reserve: (input, prepare) => run(plans.reserve(input, prepare)).pipe(translateFailure),
1008
- publishReady: (input, prepare) =>
1009
- run(plans.publishReady(input, prepare)).pipe(translateFailure),
1010
- context: (input) =>
1011
- plans
1012
- .context(input)
1013
- .pipe(
1014
- Effect.provideService(CurrentD1PlanningDatabase, database),
1015
- Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
1016
- Effect.provideService(LifecycleHooks, hooks),
1017
- translateContextFailure,
1018
- ),
1019
- complete: (input, prepare) => run(plans.complete(input, prepare)).pipe(translateFailure),
1020
- resetWithProof: (input, prepare) =>
1021
- run(plans.resetWithProof(input, prepare)).pipe(translateFailure),
1022
- cancel: (input, prepare) => run(plans.cancel(input, prepare)).pipe(translateFailure),
1023
- cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
1024
- };
1025
-
1026
- return { passwordPreparedPersistence: service };
1027
- });
1000
+ return yield* executeStandalone(plan);
1001
+ }).pipe(
1002
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1003
+ Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
1004
+ Effect.provideService(LifecycleHooks, hooks),
1005
+ );
1006
+
1007
+ const service: PasswordPreparedPersistence = {
1008
+ reserve: (input, prepare) => run(plans.reserve(input, prepare)).pipe(translateFailure),
1009
+ publishReady: (input, prepare) =>
1010
+ run(plans.publishReady(input, prepare)).pipe(translateFailure),
1011
+ context: (input) =>
1012
+ plans
1013
+ .context(input)
1014
+ .pipe(
1015
+ Effect.provideService(CurrentD1PlanningDatabase, database),
1016
+ Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
1017
+ Effect.provideService(LifecycleHooks, hooks),
1018
+ translateContextFailure,
1019
+ ),
1020
+ complete: (input, prepare) => run(plans.complete(input, prepare)).pipe(translateFailure),
1021
+ resetWithProof: (input, prepare) =>
1022
+ run(plans.resetWithProof(input, prepare)).pipe(translateFailure),
1023
+ cancel: (input, prepare) => run(plans.cancel(input, prepare)).pipe(translateFailure),
1024
+ cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
1025
+ };
1026
+
1027
+ return { passwordPreparedPersistence: service };
1028
+ });
1028
1029
 
1029
1030
  export function coordinateD1PasswordPreparedPersistence<
1030
1031
  TargetId,