@yielded/auth-persistence-drizzle 0.1.0-beta.0 → 0.1.0-beta.12

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 (291) hide show
  1. package/README.md +6 -1
  2. package/dist/D1.d.mts +155 -40
  3. package/dist/D1.mjs +10 -6
  4. package/dist/D1.mjs.map +1 -1
  5. package/dist/Libsql.d.mts +251 -129
  6. package/dist/Libsql.mjs +20 -21
  7. package/dist/Libsql.mjs.map +1 -1
  8. package/dist/Mysql2.d.mts +208 -56
  9. package/dist/Mysql2.mjs +13 -8
  10. package/dist/Mysql2.mjs.map +1 -1
  11. package/dist/Pglite.d.mts +209 -57
  12. package/dist/Pglite.mjs +13 -9
  13. package/dist/Pglite.mjs.map +1 -1
  14. package/dist/Postgres.d.mts +207 -55
  15. package/dist/Postgres.mjs +13 -9
  16. package/dist/Postgres.mjs.map +1 -1
  17. package/dist/SqliteBun.d.mts +249 -126
  18. package/dist/SqliteBun.mjs +20 -18
  19. package/dist/SqliteBun.mjs.map +1 -1
  20. package/dist/SqliteDo.d.mts +248 -158
  21. package/dist/SqliteDo.mjs +26 -44
  22. package/dist/SqliteDo.mjs.map +1 -1
  23. package/dist/SqliteNode.d.mts +247 -124
  24. package/dist/SqliteNode.mjs +20 -18
  25. package/dist/SqliteNode.mjs.map +1 -1
  26. package/dist/SqliteWasm.d.mts +251 -128
  27. package/dist/SqliteWasm.mjs +20 -18
  28. package/dist/SqliteWasm.mjs.map +1 -1
  29. package/dist/drizzle/D1BatchStatements.d.mts +1 -1
  30. package/dist/drizzle/D1BatchStatements.mjs.map +1 -1
  31. package/dist/drizzle/d1-database.d.mts +11 -0
  32. package/dist/drizzle/d1-database.mjs +8 -0
  33. package/dist/drizzle/d1-database.mjs.map +1 -0
  34. package/dist/drizzle/d1-emails.d.mts +8 -7
  35. package/dist/drizzle/d1-emails.mjs +7 -4
  36. package/dist/drizzle/d1-emails.mjs.map +1 -1
  37. package/dist/drizzle/d1-generated-statement.mjs.map +1 -1
  38. package/dist/drizzle/d1-identity.mjs +12 -9
  39. package/dist/drizzle/d1-identity.mjs.map +1 -1
  40. package/dist/drizzle/d1-oauth.d.mts +41 -10
  41. package/dist/drizzle/d1-oauth.mjs +8 -5
  42. package/dist/drizzle/d1-oauth.mjs.map +1 -1
  43. package/dist/drizzle/d1-passkey.d.mts +3 -14
  44. package/dist/drizzle/d1-passkey.mjs +2 -1
  45. package/dist/drizzle/d1-passkey.mjs.map +1 -1
  46. package/dist/drizzle/d1-password-prepared.d.mts +4 -3
  47. package/dist/drizzle/d1-password-prepared.mjs +3 -1
  48. package/dist/drizzle/d1-password-prepared.mjs.map +1 -1
  49. package/dist/drizzle/d1-passwords.d.mts +7 -6
  50. package/dist/drizzle/d1-passwords.mjs +5 -2
  51. package/dist/drizzle/d1-passwords.mjs.map +1 -1
  52. package/dist/drizzle/d1-phone.d.mts +3 -4
  53. package/dist/drizzle/d1-phone.mjs +2 -1
  54. package/dist/drizzle/d1-phone.mjs.map +1 -1
  55. package/dist/drizzle/d1-planning.d.mts +1 -1
  56. package/dist/drizzle/d1-proofs.d.mts +5 -4
  57. package/dist/drizzle/d1-proofs.mjs +3 -1
  58. package/dist/drizzle/d1-proofs.mjs.map +1 -1
  59. package/dist/drizzle/d1-sessions.d.mts +14 -13
  60. package/dist/drizzle/d1-sessions.mjs +15 -9
  61. package/dist/drizzle/d1-sessions.mjs.map +1 -1
  62. package/dist/drizzle/d1-totp.d.mts +3 -4
  63. package/dist/drizzle/d1-totp.mjs +2 -1
  64. package/dist/drizzle/d1-totp.mjs.map +1 -1
  65. package/dist/drizzle/email-registration.d.mts +1 -1
  66. package/dist/drizzle/email-registration.mjs +2 -1
  67. package/dist/drizzle/email-registration.mjs.map +1 -1
  68. package/dist/drizzle/email-target.d.mts +8 -7
  69. package/dist/drizzle/email-target.mjs +10 -10
  70. package/dist/drizzle/email-target.mjs.map +1 -1
  71. package/dist/drizzle/model.d.mts +2 -126
  72. package/dist/drizzle/model.mjs +2 -21
  73. package/dist/drizzle/model.mjs.map +1 -1
  74. package/dist/drizzle/mysql-database.d.mts +8 -0
  75. package/dist/drizzle/mysql-database.mjs +8 -0
  76. package/dist/drizzle/mysql-database.mjs.map +1 -0
  77. package/dist/drizzle/mysql-emails.d.mts +8 -7
  78. package/dist/drizzle/mysql-emails.mjs +12 -8
  79. package/dist/drizzle/mysql-emails.mjs.map +1 -1
  80. package/dist/drizzle/mysql-identity.mjs +12 -9
  81. package/dist/drizzle/mysql-identity.mjs.map +1 -1
  82. package/dist/drizzle/mysql-password-prepared.d.mts +4 -3
  83. package/dist/drizzle/mysql-password-prepared.mjs +6 -2
  84. package/dist/drizzle/mysql-password-prepared.mjs.map +1 -1
  85. package/dist/drizzle/mysql-passwords.d.mts +7 -5
  86. package/dist/drizzle/mysql-passwords.mjs +11 -7
  87. package/dist/drizzle/mysql-passwords.mjs.map +1 -1
  88. package/dist/drizzle/mysql-proofs.d.mts +4 -3
  89. package/dist/drizzle/mysql-proofs.mjs +8 -4
  90. package/dist/drizzle/mysql-proofs.mjs.map +1 -1
  91. package/dist/drizzle/mysql-sessions.d.mts +12 -11
  92. package/dist/drizzle/mysql-sessions.mjs +16 -12
  93. package/dist/drizzle/mysql-sessions.mjs.map +1 -1
  94. package/dist/drizzle/native-database.mjs +10 -0
  95. package/dist/drizzle/native-database.mjs.map +1 -0
  96. package/dist/drizzle/oauth-accounts.mjs +1 -1
  97. package/dist/drizzle/oauth-connected-access.mjs +14 -12
  98. package/dist/drizzle/oauth-connected-access.mjs.map +1 -1
  99. package/dist/drizzle/oauth-connected-custody.mjs +2 -2
  100. package/dist/drizzle/oauth-connected-drivers.mjs +11 -6
  101. package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
  102. package/dist/drizzle/oauth-connected-flow.mjs +2 -2
  103. package/dist/drizzle/oauth-connected-input.mjs +14 -1
  104. package/dist/drizzle/oauth-connected-input.mjs.map +1 -1
  105. package/dist/drizzle/oauth-connected-maintenance.mjs +1 -1
  106. package/dist/drizzle/oauth-connected-management.mjs +2 -2
  107. package/dist/drizzle/oauth-connected-model.d.mts +17 -3
  108. package/dist/drizzle/oauth-connected-model.mjs.map +1 -1
  109. package/dist/drizzle/oauth-connected-settlement.mjs +51 -41
  110. package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -1
  111. package/dist/drizzle/oauth-connected-sign-in.mjs +263 -0
  112. package/dist/drizzle/oauth-connected-sign-in.mjs.map +1 -0
  113. package/dist/drizzle/oauth-connected-state.d.mts +110 -2
  114. package/dist/drizzle/oauth-connected-state.mjs +9 -4
  115. package/dist/drizzle/oauth-connected-state.mjs.map +1 -1
  116. package/dist/drizzle/oauth-connected-target.d.mts +142 -15
  117. package/dist/drizzle/oauth-connected-target.mjs +9 -6
  118. package/dist/drizzle/oauth-connected-target.mjs.map +1 -1
  119. package/dist/drizzle/oauth-drivers.mjs +9 -7
  120. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  121. package/dist/drizzle/oauth-flow.d.mts +1 -1
  122. package/dist/drizzle/oauth-flow.mjs +1 -1
  123. package/dist/drizzle/oauth-input.mjs +1 -1
  124. package/dist/drizzle/oauth-model.d.mts +1 -1
  125. package/dist/drizzle/oauth-owner.d.mts +1 -1
  126. package/dist/drizzle/oauth-registration.d.mts +2 -2
  127. package/dist/drizzle/oauth-registration.mjs +1 -1
  128. package/dist/drizzle/oauth-state.mjs +5 -4
  129. package/dist/drizzle/oauth-state.mjs.map +1 -1
  130. package/dist/drizzle/oauth-target.d.mts +14 -13
  131. package/dist/drizzle/oauth-target.mjs +14 -13
  132. package/dist/drizzle/oauth-target.mjs.map +1 -1
  133. package/dist/drizzle/passkey-drivers.mjs +8 -6
  134. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  135. package/dist/drizzle/passkey-write-drivers.mjs +5 -3
  136. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  137. package/dist/drizzle/passkey-write-target.d.mts +1 -1
  138. package/dist/drizzle/password-prepared-sql.mjs +2 -1
  139. package/dist/drizzle/password-prepared-sql.mjs.map +1 -1
  140. package/dist/drizzle/password-prepared-state.mjs +1 -1
  141. package/dist/drizzle/password-prepared-target.d.mts +4 -3
  142. package/dist/drizzle/password-prepared-target.mjs +4 -3
  143. package/dist/drizzle/password-prepared-target.mjs.map +1 -1
  144. package/dist/drizzle/password-registration.mjs +2 -1
  145. package/dist/drizzle/password-registration.mjs.map +1 -1
  146. package/dist/drizzle/password-target.d.mts +6 -5
  147. package/dist/drizzle/password-target.mjs +8 -8
  148. package/dist/drizzle/password-target.mjs.map +1 -1
  149. package/dist/drizzle/pg-database.d.mts +9 -0
  150. package/dist/drizzle/pg-database.mjs +8 -0
  151. package/dist/drizzle/pg-database.mjs.map +1 -0
  152. package/dist/drizzle/pg-emails.d.mts +8 -7
  153. package/dist/drizzle/pg-emails.mjs +12 -8
  154. package/dist/drizzle/pg-emails.mjs.map +1 -1
  155. package/dist/drizzle/pg-identity.mjs +92 -0
  156. package/dist/drizzle/pg-identity.mjs.map +1 -0
  157. package/dist/drizzle/pg-password-prepared.d.mts +4 -3
  158. package/dist/drizzle/pg-password-prepared.mjs +6 -2
  159. package/dist/drizzle/pg-password-prepared.mjs.map +1 -1
  160. package/dist/drizzle/pg-passwords.d.mts +7 -5
  161. package/dist/drizzle/pg-passwords.mjs +11 -7
  162. package/dist/drizzle/pg-passwords.mjs.map +1 -1
  163. package/dist/drizzle/pg-proofs.d.mts +4 -3
  164. package/dist/drizzle/pg-proofs.mjs +8 -4
  165. package/dist/drizzle/pg-proofs.mjs.map +1 -1
  166. package/dist/drizzle/pg-sessions.d.mts +12 -11
  167. package/dist/drizzle/pg-sessions.mjs +16 -12
  168. package/dist/drizzle/pg-sessions.mjs.map +1 -1
  169. package/dist/drizzle/phone-model.d.mts +1 -1
  170. package/dist/drizzle/phone-target.d.mts +5 -4
  171. package/dist/drizzle/phone-target.mjs +12 -11
  172. package/dist/drizzle/phone-target.mjs.map +1 -1
  173. package/dist/drizzle/proof-target.d.mts +4 -3
  174. package/dist/drizzle/proof-target.mjs +5 -5
  175. package/dist/drizzle/proof-target.mjs.map +1 -1
  176. package/dist/drizzle/session-sql.d.mts +1 -0
  177. package/dist/drizzle/session-target.d.mts +11 -9
  178. package/dist/drizzle/session-target.mjs +11 -11
  179. package/dist/drizzle/session-target.mjs.map +1 -1
  180. package/dist/drizzle/sqlite-emails.mjs +9 -5
  181. package/dist/drizzle/sqlite-emails.mjs.map +1 -1
  182. package/dist/drizzle/sqlite-identity.mjs +14 -11
  183. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  184. package/dist/drizzle/sqlite-password-prepared.mjs +7 -3
  185. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -1
  186. package/dist/drizzle/sqlite-passwords.mjs +10 -6
  187. package/dist/drizzle/sqlite-passwords.mjs.map +1 -1
  188. package/dist/drizzle/sqlite-proofs.mjs +7 -3
  189. package/dist/drizzle/sqlite-proofs.mjs.map +1 -1
  190. package/dist/drizzle/sqlite-sessions.mjs +16 -12
  191. package/dist/drizzle/sqlite-sessions.mjs.map +1 -1
  192. package/dist/drizzle/standalone-guard.d.mts +2 -0
  193. package/dist/drizzle/standalone-guard.mjs +8 -4
  194. package/dist/drizzle/standalone-guard.mjs.map +1 -1
  195. package/dist/drizzle/totp-model.d.mts +1 -1
  196. package/dist/drizzle/totp-target.d.mts +5 -4
  197. package/dist/drizzle/totp-target.mjs +31 -28
  198. package/dist/drizzle/totp-target.mjs.map +1 -1
  199. package/dist/drizzle/transaction-mysql.mjs +1 -1
  200. package/dist/drizzle/transaction-mysql.mjs.map +1 -1
  201. package/dist/index.d.mts +2 -4
  202. package/dist/index.mjs +2 -4
  203. package/dist/internal/drizzle-postgres.mjs.map +1 -1
  204. package/dist/internal/drizzle-sqlite.mjs.map +1 -1
  205. package/package.json +1 -1
  206. package/src/D1.ts +37 -26
  207. package/src/Libsql.ts +45 -61
  208. package/src/Mysql2.ts +39 -35
  209. package/src/Pglite.ts +48 -30
  210. package/src/Postgres.ts +48 -30
  211. package/src/SqliteBun.ts +59 -68
  212. package/src/SqliteDo.ts +61 -274
  213. package/src/SqliteNode.ts +56 -66
  214. package/src/SqliteWasm.ts +56 -66
  215. package/src/drizzle/D1BatchStatements.ts +1 -1
  216. package/src/drizzle/d1-database.ts +10 -0
  217. package/src/drizzle/d1-emails.ts +86 -88
  218. package/src/drizzle/d1-generated-statement.ts +1 -1
  219. package/src/drizzle/d1-identity.ts +17 -20
  220. package/src/drizzle/d1-oauth.ts +19 -8
  221. package/src/drizzle/d1-passkey.ts +5 -1
  222. package/src/drizzle/d1-password-prepared.ts +40 -42
  223. package/src/drizzle/d1-passwords.ts +76 -80
  224. package/src/drizzle/d1-phone.ts +5 -1
  225. package/src/drizzle/d1-proofs.ts +31 -34
  226. package/src/drizzle/d1-sessions.ts +53 -40
  227. package/src/drizzle/d1-totp.ts +5 -1
  228. package/src/drizzle/email-registration.ts +6 -2
  229. package/src/drizzle/email-target.ts +18 -20
  230. package/src/drizzle/model.ts +1 -208
  231. package/src/drizzle/mysql-database.ts +8 -0
  232. package/src/drizzle/mysql-emails.ts +29 -17
  233. package/src/drizzle/mysql-identity.ts +18 -21
  234. package/src/drizzle/mysql-password-prepared.ts +11 -9
  235. package/src/drizzle/mysql-passwords.ts +22 -10
  236. package/src/drizzle/mysql-proofs.ts +17 -6
  237. package/src/drizzle/mysql-sessions.ts +41 -18
  238. package/src/drizzle/native-database.ts +22 -0
  239. package/src/drizzle/oauth-connected-access.ts +8 -1
  240. package/src/drizzle/oauth-connected-drivers.ts +21 -6
  241. package/src/drizzle/oauth-connected-input.ts +13 -0
  242. package/src/drizzle/oauth-connected-model.ts +17 -0
  243. package/src/drizzle/oauth-connected-settlement.ts +65 -42
  244. package/src/drizzle/oauth-connected-sign-in.ts +438 -0
  245. package/src/drizzle/oauth-connected-state.ts +19 -7
  246. package/src/drizzle/oauth-connected-target.ts +26 -18
  247. package/src/drizzle/oauth-drivers.ts +26 -10
  248. package/src/drizzle/oauth-state.ts +5 -4
  249. package/src/drizzle/oauth-target.ts +31 -43
  250. package/src/drizzle/passkey-drivers.ts +21 -13
  251. package/src/drizzle/passkey-write-drivers.ts +11 -6
  252. package/src/drizzle/password-prepared-sql.ts +2 -4
  253. package/src/drizzle/password-prepared-target.ts +10 -7
  254. package/src/drizzle/password-registration.ts +7 -8
  255. package/src/drizzle/password-target.ts +20 -19
  256. package/src/drizzle/pg-database.ts +10 -0
  257. package/src/drizzle/pg-emails.ts +29 -17
  258. package/src/drizzle/pg-identity.ts +297 -0
  259. package/src/drizzle/pg-password-prepared.ts +11 -9
  260. package/src/drizzle/pg-passwords.ts +22 -10
  261. package/src/drizzle/pg-proofs.ts +17 -6
  262. package/src/drizzle/pg-sessions.ts +41 -18
  263. package/src/drizzle/phone-target.ts +23 -18
  264. package/src/drizzle/proof-target.ts +10 -13
  265. package/src/drizzle/session-target.ts +33 -51
  266. package/src/drizzle/sqlite-emails.ts +31 -14
  267. package/src/drizzle/sqlite-identity.ts +22 -42
  268. package/src/drizzle/sqlite-password-prepared.ts +24 -10
  269. package/src/drizzle/sqlite-passwords.ts +30 -16
  270. package/src/drizzle/sqlite-proofs.ts +29 -6
  271. package/src/drizzle/sqlite-sessions.ts +50 -24
  272. package/src/drizzle/standalone-guard.ts +19 -7
  273. package/src/drizzle/totp-target.ts +62 -61
  274. package/src/drizzle/transaction-mysql.ts +1 -1
  275. package/src/index.ts +0 -24
  276. package/src/internal/drizzle-postgres.ts +1 -1
  277. package/src/internal/drizzle-sqlite.ts +1 -1
  278. package/dist/drizzle/d1-identity.d.mts +0 -30
  279. package/dist/drizzle/mysql-identity.d.mts +0 -21
  280. package/dist/drizzle/mysql.d.mts +0 -69
  281. package/dist/drizzle/mysql.mjs +0 -218
  282. package/dist/drizzle/mysql.mjs.map +0 -1
  283. package/dist/drizzle/pg.d.mts +0 -80
  284. package/dist/drizzle/pg.mjs +0 -289
  285. package/dist/drizzle/pg.mjs.map +0 -1
  286. package/dist/drizzle/sqlite.d.mts +0 -77
  287. package/dist/drizzle/sqlite.mjs +0 -217
  288. package/dist/drizzle/sqlite.mjs.map +0 -1
  289. package/src/drizzle/mysql.ts +0 -687
  290. package/src/drizzle/pg.ts +0 -984
  291. package/src/drizzle/sqlite.ts +0 -705
package/src/SqliteWasm.ts CHANGED
@@ -1,32 +1,25 @@
1
+ import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
1
2
  import type { AnyRelations } from "drizzle-orm";
2
3
  import { type EffectSQLiteWasmDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-wasm";
3
4
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
4
- import { Effect } from "effect";
5
+ import { Context, Effect, Layer } from "effect";
5
6
 
7
+ import { nativeDatabase } from "./drizzle/native-database";
8
+
9
+ /** The application-owned Drizzle database used to construct persistence services. */
10
+ export class Database extends Context.Service<Database, EffectSQLiteWasmDatabase<AnyRelations>>()(
11
+ "effect-auth/persistence-drizzle/SqliteWasm/Database",
12
+ ) {}
13
+
14
+ /** Construct Drizzle from the driver's SQL-client Layer. */
15
+ export const databaseLayer = Layer.effect(Database, makeWithDefaults({}));
16
+
17
+ import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
6
18
  import type {
7
- AuthStoreTables,
8
- AuthTables,
9
19
  ExternalIdentityTables,
10
20
  IdentityTables,
11
- OAuthStateTables,
12
21
  SubjectProvisioningTables,
13
22
  } from "./drizzle/model";
14
- import {
15
- coordinateSqliteAuthStoreTransaction,
16
- coordinateSqliteAuthTransaction,
17
- coordinateSqliteOAuthStateTransaction,
18
- makeSqliteAuthServices,
19
- makeSqliteAuthStoreServices,
20
- makeSqliteOAuthStateServices,
21
- } from "./drizzle/sqlite";
22
-
23
- export {
24
- coordinateSqliteAuthStoreTransaction as coordinateAuthStoreTransaction,
25
- coordinateSqliteAuthTransaction as coordinateAuthTransaction,
26
- coordinateSqliteOAuthStateTransaction as coordinateOAuthStateTransaction,
27
- };
28
-
29
- import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
30
23
  import { sqlClientPasswordStandaloneGuard } from "./drizzle/password-target";
31
24
  import { sqlClientProofStandaloneGuard } from "./drizzle/proof-target";
32
25
  import { sqlClientSessionStandaloneGuard } from "./drizzle/session-target";
@@ -40,29 +33,34 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
40
33
  import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
41
34
  import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
42
35
 
43
- const sessionTarget = makeSqliteSessionTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
44
- sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(database)),
36
+ const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
37
+ Database,
38
+ (service) => sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(service)),
45
39
  );
46
40
 
47
- const proofTarget = makeSqliteProofTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
48
- sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(database)),
41
+ const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
42
+ Database,
43
+ (service) => sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(service)),
49
44
  );
50
45
 
51
- const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
52
- (database) =>
46
+ const passwordTarget = makeSqlitePasswordTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
47
+ Database,
48
+ (service) =>
53
49
  sqlitePasswordConfiguration(
54
50
  "interactive",
55
- sqlClientPasswordStandaloneGuard(database),
56
- sqlClientProofStandaloneGuard(database),
51
+ sqlClientPasswordStandaloneGuard(service),
52
+ sqlClientProofStandaloneGuard(service),
57
53
  ),
58
54
  );
59
55
 
60
- const emailTarget = makeSqliteEmailTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
61
- sqliteEmailConfiguration(
62
- "interactive",
63
- sqlClientEmailStandaloneGuard(database),
64
- sqlClientProofStandaloneGuard(database),
65
- ),
56
+ const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
57
+ Database,
58
+ (service) =>
59
+ sqliteEmailConfiguration(
60
+ "interactive",
61
+ sqlClientEmailStandaloneGuard(service),
62
+ sqlClientProofStandaloneGuard(service),
63
+ ),
66
64
  );
67
65
 
68
66
  export const {
@@ -97,25 +95,6 @@ export const {
97
95
 
98
96
  export const commitMode = "interactive" as const;
99
97
 
100
- export const makeAuthStoreServices = <C extends AnySQLiteTable, R extends AnySQLiteTable>(
101
- database: EffectSQLiteWasmDatabase<AnyRelations>,
102
- mapping: AuthStoreTables<C, R>,
103
- ) => makeSqliteAuthStoreServices(database, mapping);
104
-
105
- export const makeOAuthStateServices = <S extends AnySQLiteTable>(
106
- database: EffectSQLiteWasmDatabase<AnyRelations>,
107
- mapping: OAuthStateTables<S>,
108
- ) => makeSqliteOAuthStateServices(database, mapping);
109
-
110
- export const makeAuthServices = <
111
- C extends AnySQLiteTable,
112
- R extends AnySQLiteTable,
113
- S extends AnySQLiteTable,
114
- >(
115
- database: EffectSQLiteWasmDatabase<AnyRelations>,
116
- mapping: AuthTables<C, R, S>,
117
- ) => makeSqliteAuthServices(database, mapping);
118
-
119
98
  export const makeIdentityServices = <
120
99
  Subject extends AnySQLiteTable,
121
100
  Identifier extends AnySQLiteTable,
@@ -123,9 +102,11 @@ export const makeIdentityServices = <
123
102
  Request extends AnySQLiteTable,
124
103
  NativeId,
125
104
  >(
126
- database: EffectSQLiteWasmDatabase<AnyRelations>,
127
105
  mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
128
- ) => makeSqliteIdentityServices(database, mapping, "interactive");
106
+ ) =>
107
+ makeSqliteIdentityServices(mapping, "interactive").pipe(
108
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
109
+ );
129
110
 
130
111
  export const makeSubjectProvisioningServices = <
131
112
  Subject extends AnySQLiteTable,
@@ -133,28 +114,33 @@ export const makeSubjectProvisioningServices = <
133
114
  Request extends AnySQLiteTable,
134
115
  NativeId,
135
116
  >(
136
- database: EffectSQLiteWasmDatabase<AnyRelations>,
137
117
  mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
138
- ) => makeSqliteSubjectProvisioningServices(database, mapping, "interactive");
118
+ ) =>
119
+ makeSqliteSubjectProvisioningServices(mapping, "interactive").pipe(
120
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
121
+ );
139
122
 
140
123
  export const makeExternalIdentityServices = <
141
124
  Subject extends AnySQLiteTable,
142
125
  External extends AnySQLiteTable,
143
126
  NativeId,
144
127
  >(
145
- database: EffectSQLiteWasmDatabase<AnyRelations>,
146
128
  mapping: ExternalIdentityTables<Subject, External, NativeId>,
147
- ) => makeSqliteExternalIdentityServices(database, mapping);
129
+ ) =>
130
+ makeSqliteExternalIdentityServices(mapping).pipe(
131
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
132
+ );
148
133
 
149
134
  import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
150
135
 
151
136
  const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
137
+ Database,
152
138
  EffectSQLiteWasmDatabase<AnyRelations>
153
- >((database) =>
139
+ >(Database, (service) =>
154
140
  sqlitePasswordConfiguration(
155
141
  "interactive",
156
- sqlClientPasswordStandaloneGuard(database),
157
- sqlClientProofStandaloneGuard(database),
142
+ sqlClientPasswordStandaloneGuard(service),
143
+ sqlClientProofStandaloneGuard(service),
158
144
  ),
159
145
  );
160
146
 
@@ -167,9 +153,10 @@ import { makeOAuthTarget } from "./drizzle/oauth-drivers";
167
153
  import { sqlClientOAuthStandaloneGuard } from "./drizzle/oauth-target";
168
154
 
169
155
  const oauthTarget = makeOAuthTarget<
156
+ Database,
170
157
  EffectSQLiteWasmDatabase<AnyRelations>,
171
158
  AnySQLiteTable<{ dialect: "sqlite" }>
172
- >({
159
+ >(Database, {
173
160
  mode: "interactive",
174
161
  dialect: "sqlite",
175
162
  locking: false,
@@ -195,9 +182,10 @@ import { makePasskeyTarget } from "./drizzle/passkey-drivers";
195
182
  import { sqlClientPasskeyStandaloneGuard } from "./drizzle/passkey-target";
196
183
 
197
184
  const passkeyTarget = makePasskeyTarget<
185
+ Database,
198
186
  EffectSQLiteWasmDatabase<AnyRelations>,
199
187
  AnySQLiteTable<{ dialect: "sqlite" }>
200
- >({
188
+ >(Database, {
201
189
  mode: "interactive",
202
190
  dialect: "sqlite",
203
191
  locking: false,
@@ -220,9 +208,10 @@ export const {
220
208
  import { makeTotpTarget, sqlClientTotpStandaloneGuard } from "./drizzle/totp-target";
221
209
 
222
210
  const totpTarget = makeTotpTarget<
211
+ Database,
223
212
  EffectSQLiteWasmDatabase<AnyRelations>,
224
213
  AnySQLiteTable<{ dialect: "sqlite" }>
225
- >({
214
+ >(Database, {
226
215
  mode: "interactive",
227
216
  dialect: "sqlite",
228
217
  locking: false,
@@ -234,9 +223,10 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
234
223
  import { makePhoneTarget, sqlClientPhoneStandaloneGuard } from "./drizzle/phone-target";
235
224
 
236
225
  const phoneTarget = makePhoneTarget<
226
+ Database,
237
227
  EffectSQLiteWasmDatabase<AnyRelations>,
238
228
  AnySQLiteTable<{ dialect: "sqlite" }>
239
- >({
229
+ >(Database, {
240
230
  mode: "interactive",
241
231
  dialect: "sqlite",
242
232
  locking: false,
@@ -1,5 +1,5 @@
1
1
  import { Context, type Effect } from "effect";
2
- import type { Statement } from "effect/unstable/sql/Statement";
2
+ import type { Statement } from "effect/sql/Statement";
3
3
 
4
4
  /** Appends application statements to the current coordinator's single atomic batch. */
5
5
  export class D1BatchStatements extends Context.Service<
@@ -0,0 +1,10 @@
1
+ import type { D1Client } from "@effect/sql-d1/D1Client";
2
+ import type { AnyRelations } from "drizzle-orm";
3
+ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
4
+ import { Context } from "effect";
5
+
6
+ /** Application-owned D1 database, including the client that owns native batches. */
7
+ export class Database extends Context.Service<
8
+ Database,
9
+ EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client }
10
+ >()("effect-auth/persistence-drizzle/D1/Database") {}
@@ -35,8 +35,9 @@ import type { EffectDrizzleQueryError } from "drizzle-orm/effect-core";
35
35
  import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
36
36
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
37
37
  import { Schema, Cause, DateTime, Effect, Option, Context } from "effect";
38
- import type { Statement } from "effect/unstable/sql/Statement";
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
 
@@ -1797,9 +1797,7 @@ const executeStandalone = <A, E, R>(
1797
1797
  retries = 2,
1798
1798
  ): Effect.Effect<
1799
1799
  A,
1800
- | E
1801
- | import("@yielded/auth/Hooks").HookConfigurationError
1802
- | import("effect/unstable/sql/SqlError").SqlError,
1800
+ E | import("@yielded/auth/Hooks").HookConfigurationError | import("effect/sql/SqlError").SqlError,
1803
1801
  Exclude<R, CurrentCommitJournal> | CurrentD1PlanningDatabase | LifecycleHooks
1804
1802
  > =>
1805
1803
  Effect.suspend(() => {
@@ -1,6 +1,6 @@
1
1
  import { sql, type SQL } from "drizzle-orm";
2
2
  import { Schema } from "effect";
3
- import type { Statement } from "effect/unstable/sql/Statement";
3
+ import type { Statement } from "effect/sql/Statement";
4
4
 
5
5
  // oxlint-disable-next-line no-restricted-properties -- Statement.compile exposes untyped native SQL parameters.
6
6
  const valuesJson = Schema.encodeUnknownSync(
@@ -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,