@yielded/auth-persistence-drizzle 0.1.0-beta.1 → 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 (222) hide show
  1. package/dist/D1.d.mts +27 -22
  2. package/dist/D1.mjs +10 -4
  3. package/dist/D1.mjs.map +1 -1
  4. package/dist/Libsql.d.mts +66 -61
  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 +43 -32
  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 +58 -53
  17. package/dist/SqliteBun.mjs +20 -14
  18. package/dist/SqliteBun.mjs.map +1 -1
  19. package/dist/SqliteDo.d.mts +66 -60
  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 +66 -61
  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 +14 -13
  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 +5 -2
  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-target.d.mts +6 -7
  91. package/dist/drizzle/oauth-connected-target.mjs +4 -5
  92. package/dist/drizzle/oauth-connected-target.mjs.map +1 -1
  93. package/dist/drizzle/oauth-drivers.mjs +8 -6
  94. package/dist/drizzle/oauth-drivers.mjs.map +1 -1
  95. package/dist/drizzle/oauth-target.d.mts +12 -11
  96. package/dist/drizzle/oauth-target.mjs +13 -12
  97. package/dist/drizzle/oauth-target.mjs.map +1 -1
  98. package/dist/drizzle/passkey-drivers.mjs +8 -6
  99. package/dist/drizzle/passkey-drivers.mjs.map +1 -1
  100. package/dist/drizzle/passkey-write-drivers.mjs +5 -3
  101. package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
  102. package/dist/drizzle/passkey-write-target.d.mts +1 -1
  103. package/dist/drizzle/password-prepared-sql.mjs +2 -1
  104. package/dist/drizzle/password-prepared-sql.mjs.map +1 -1
  105. package/dist/drizzle/password-prepared-target.d.mts +3 -2
  106. package/dist/drizzle/password-prepared-target.mjs +4 -3
  107. package/dist/drizzle/password-prepared-target.mjs.map +1 -1
  108. package/dist/drizzle/password-registration.mjs +2 -1
  109. package/dist/drizzle/password-registration.mjs.map +1 -1
  110. package/dist/drizzle/password-target.d.mts +5 -4
  111. package/dist/drizzle/password-target.mjs +8 -8
  112. package/dist/drizzle/password-target.mjs.map +1 -1
  113. package/dist/drizzle/pg-database.d.mts +9 -0
  114. package/dist/drizzle/pg-database.mjs +8 -0
  115. package/dist/drizzle/pg-database.mjs.map +1 -0
  116. package/dist/drizzle/pg-emails.d.mts +7 -6
  117. package/dist/drizzle/pg-emails.mjs +12 -8
  118. package/dist/drizzle/pg-emails.mjs.map +1 -1
  119. package/dist/drizzle/pg-identity.mjs +12 -9
  120. package/dist/drizzle/pg-identity.mjs.map +1 -1
  121. package/dist/drizzle/pg-password-prepared.d.mts +3 -2
  122. package/dist/drizzle/pg-password-prepared.mjs +6 -2
  123. package/dist/drizzle/pg-password-prepared.mjs.map +1 -1
  124. package/dist/drizzle/pg-passwords.d.mts +6 -4
  125. package/dist/drizzle/pg-passwords.mjs +11 -7
  126. package/dist/drizzle/pg-passwords.mjs.map +1 -1
  127. package/dist/drizzle/pg-proofs.d.mts +3 -2
  128. package/dist/drizzle/pg-proofs.mjs +8 -4
  129. package/dist/drizzle/pg-proofs.mjs.map +1 -1
  130. package/dist/drizzle/pg-sessions.d.mts +11 -10
  131. package/dist/drizzle/pg-sessions.mjs +16 -12
  132. package/dist/drizzle/pg-sessions.mjs.map +1 -1
  133. package/dist/drizzle/phone-target.d.mts +4 -3
  134. package/dist/drizzle/phone-target.mjs +12 -11
  135. package/dist/drizzle/phone-target.mjs.map +1 -1
  136. package/dist/drizzle/proof-target.d.mts +3 -2
  137. package/dist/drizzle/proof-target.mjs +5 -5
  138. package/dist/drizzle/proof-target.mjs.map +1 -1
  139. package/dist/drizzle/session-sql.d.mts +1 -0
  140. package/dist/drizzle/session-target.d.mts +10 -8
  141. package/dist/drizzle/session-target.mjs +11 -11
  142. package/dist/drizzle/session-target.mjs.map +1 -1
  143. package/dist/drizzle/sqlite-emails.mjs +9 -5
  144. package/dist/drizzle/sqlite-emails.mjs.map +1 -1
  145. package/dist/drizzle/sqlite-identity.mjs +14 -11
  146. package/dist/drizzle/sqlite-identity.mjs.map +1 -1
  147. package/dist/drizzle/sqlite-password-prepared.mjs +7 -3
  148. package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -1
  149. package/dist/drizzle/sqlite-passwords.mjs +10 -6
  150. package/dist/drizzle/sqlite-passwords.mjs.map +1 -1
  151. package/dist/drizzle/sqlite-proofs.mjs +7 -3
  152. package/dist/drizzle/sqlite-proofs.mjs.map +1 -1
  153. package/dist/drizzle/sqlite-sessions.mjs +16 -12
  154. package/dist/drizzle/sqlite-sessions.mjs.map +1 -1
  155. package/dist/drizzle/standalone-guard.d.mts +2 -0
  156. package/dist/drizzle/standalone-guard.mjs +8 -4
  157. package/dist/drizzle/standalone-guard.mjs.map +1 -1
  158. package/dist/drizzle/totp-target.d.mts +4 -3
  159. package/dist/drizzle/totp-target.mjs +31 -28
  160. package/dist/drizzle/totp-target.mjs.map +1 -1
  161. package/package.json +1 -1
  162. package/src/D1.ts +37 -10
  163. package/src/Libsql.ts +45 -17
  164. package/src/Mysql2.ts +39 -13
  165. package/src/Pglite.ts +47 -13
  166. package/src/Postgres.ts +47 -13
  167. package/src/SqliteBun.ts +58 -30
  168. package/src/SqliteDo.ts +61 -19
  169. package/src/SqliteNode.ts +55 -28
  170. package/src/SqliteWasm.ts +55 -28
  171. package/src/drizzle/d1-database.ts +10 -0
  172. package/src/drizzle/d1-emails.ts +84 -84
  173. package/src/drizzle/d1-identity.ts +17 -20
  174. package/src/drizzle/d1-oauth.ts +19 -8
  175. package/src/drizzle/d1-passkey.ts +5 -1
  176. package/src/drizzle/d1-password-prepared.ts +38 -37
  177. package/src/drizzle/d1-passwords.ts +74 -76
  178. package/src/drizzle/d1-phone.ts +5 -1
  179. package/src/drizzle/d1-proofs.ts +29 -30
  180. package/src/drizzle/d1-sessions.ts +51 -38
  181. package/src/drizzle/d1-totp.ts +5 -1
  182. package/src/drizzle/email-registration.ts +6 -2
  183. package/src/drizzle/email-target.ts +17 -19
  184. package/src/drizzle/mysql-database.ts +8 -0
  185. package/src/drizzle/mysql-emails.ts +28 -16
  186. package/src/drizzle/mysql-identity.ts +18 -21
  187. package/src/drizzle/mysql-password-prepared.ts +10 -8
  188. package/src/drizzle/mysql-passwords.ts +21 -9
  189. package/src/drizzle/mysql-proofs.ts +16 -5
  190. package/src/drizzle/mysql-sessions.ts +40 -17
  191. package/src/drizzle/native-database.ts +22 -0
  192. package/src/drizzle/oauth-connected-drivers.ts +18 -6
  193. package/src/drizzle/oauth-connected-target.ts +16 -17
  194. package/src/drizzle/oauth-drivers.ts +26 -10
  195. package/src/drizzle/oauth-target.ts +30 -42
  196. package/src/drizzle/passkey-drivers.ts +21 -13
  197. package/src/drizzle/passkey-write-drivers.ts +11 -6
  198. package/src/drizzle/password-prepared-sql.ts +2 -4
  199. package/src/drizzle/password-prepared-target.ts +9 -6
  200. package/src/drizzle/password-registration.ts +7 -8
  201. package/src/drizzle/password-target.ts +19 -18
  202. package/src/drizzle/pg-database.ts +10 -0
  203. package/src/drizzle/pg-emails.ts +28 -16
  204. package/src/drizzle/pg-identity.ts +18 -22
  205. package/src/drizzle/pg-password-prepared.ts +10 -8
  206. package/src/drizzle/pg-passwords.ts +21 -9
  207. package/src/drizzle/pg-proofs.ts +16 -5
  208. package/src/drizzle/pg-sessions.ts +40 -17
  209. package/src/drizzle/phone-target.ts +22 -17
  210. package/src/drizzle/proof-target.ts +9 -12
  211. package/src/drizzle/session-target.ts +32 -50
  212. package/src/drizzle/sqlite-emails.ts +30 -13
  213. package/src/drizzle/sqlite-identity.ts +22 -42
  214. package/src/drizzle/sqlite-password-prepared.ts +23 -9
  215. package/src/drizzle/sqlite-passwords.ts +29 -15
  216. package/src/drizzle/sqlite-proofs.ts +28 -5
  217. package/src/drizzle/sqlite-sessions.ts +49 -23
  218. package/src/drizzle/standalone-guard.ts +18 -6
  219. package/src/drizzle/totp-target.ts +61 -60
  220. package/dist/drizzle/d1-identity.d.mts +0 -30
  221. package/dist/drizzle/mysql-identity.d.mts +0 -21
  222. package/dist/drizzle/pg-identity.d.mts +0 -22
package/src/SqliteDo.ts CHANGED
@@ -1,7 +1,33 @@
1
+ import { SqliteClient } from "@effect/sql-sqlite-do/SqliteClient";
2
+ import { NativeDatabase, PersistenceConfigurationError } from "@yielded/auth-persistence/Adapter";
1
3
  import type { AnyRelations } from "drizzle-orm";
2
- import type { EffectSQLiteDoDatabase } from "drizzle-orm/effect-sqlite-do";
4
+ import { type EffectSQLiteDoDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-do";
3
5
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
4
- import { Effect } from "effect";
6
+ import { Context, Effect, Layer } from "effect";
7
+
8
+ import { nativeDatabase } from "./drizzle/native-database";
9
+
10
+ /** The application-owned Drizzle database used to construct persistence services. */
11
+ export class Database extends Context.Service<Database, EffectSQLiteDoDatabase<AnyRelations>>()(
12
+ "effect-auth/persistence-drizzle/SqliteDo/Database",
13
+ ) {}
14
+
15
+ /** The SQL-client Layer must configure storage so Drizzle owns transactionSync. */
16
+ export const databaseLayer = Layer.effect(
17
+ Database,
18
+ Effect.gen(function* () {
19
+ const client = yield* SqliteClient;
20
+ const storage = client.config.storage;
21
+
22
+ if (storage === undefined)
23
+ return yield* PersistenceConfigurationError.make({
24
+ reason:
25
+ "SqliteDo requires a SQL client configured with storage for synchronous transactions",
26
+ });
27
+
28
+ return yield* makeWithDefaults({ storage });
29
+ }),
30
+ );
5
31
 
6
32
  import type {
7
33
  ExternalIdentityTables,
@@ -18,19 +44,24 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
18
44
  import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
19
45
  import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
20
46
 
21
- const sessionTarget = makeSqliteSessionTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
47
+ const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
48
+ Database,
22
49
  sqliteSessionConfiguration("synchronous", Effect.void),
23
50
  );
24
51
 
25
- const proofTarget = makeSqliteProofTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
52
+ const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
53
+ Database,
26
54
  sqliteProofConfiguration("synchronous", Effect.void),
27
55
  );
28
56
 
29
- const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
30
- sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void),
31
- );
57
+ const passwordTarget = makeSqlitePasswordTarget<
58
+ Database,
59
+ EffectSQLiteDoDatabase<AnyRelations>,
60
+ true
61
+ >(Database, sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
32
62
 
33
- const emailTarget = makeSqliteEmailTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
63
+ const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
64
+ Database,
34
65
  sqliteEmailConfiguration("synchronous", Effect.void, Effect.void),
35
66
  );
36
67
 
@@ -95,9 +126,11 @@ export const makeIdentityServices = <
95
126
  Request extends AnySQLiteTable,
96
127
  NativeId,
97
128
  >(
98
- database: EffectSQLiteDoDatabase<AnyRelations>,
99
129
  mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
100
- ) => makeSqliteIdentityServices(database, mapping, "synchronous");
130
+ ) =>
131
+ makeSqliteIdentityServices(mapping, "synchronous").pipe(
132
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
133
+ );
101
134
 
102
135
  export const makeSubjectProvisioningServices = <
103
136
  Subject extends AnySQLiteTable,
@@ -105,25 +138,30 @@ export const makeSubjectProvisioningServices = <
105
138
  Request extends AnySQLiteTable,
106
139
  NativeId,
107
140
  >(
108
- database: EffectSQLiteDoDatabase<AnyRelations>,
109
141
  mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
110
- ) => makeSqliteSubjectProvisioningServices(database, mapping, "synchronous");
142
+ ) =>
143
+ makeSqliteSubjectProvisioningServices(mapping, "synchronous").pipe(
144
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
145
+ );
111
146
 
112
147
  export const makeExternalIdentityServices = <
113
148
  Subject extends AnySQLiteTable,
114
149
  External extends AnySQLiteTable,
115
150
  NativeId,
116
151
  >(
117
- database: EffectSQLiteDoDatabase<AnyRelations>,
118
152
  mapping: ExternalIdentityTables<Subject, External, NativeId>,
119
- ) => makeSqliteExternalIdentityServices(database, mapping);
153
+ ) =>
154
+ makeSqliteExternalIdentityServices(mapping).pipe(
155
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
156
+ );
120
157
 
121
158
  import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
122
159
 
123
160
  const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
161
+ Database,
124
162
  EffectSQLiteDoDatabase<AnyRelations>,
125
163
  true
126
- >(sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
164
+ >(Database, sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
127
165
 
128
166
  export const { makePasswordPreparedPersistenceServices, coordinatePasswordPreparedPersistence } =
129
167
  passwordPreparedTarget;
@@ -133,10 +171,11 @@ export { passwordPreparedPersistenceLayer } from "./drizzle/password-prepared-ta
133
171
  import { makeOAuthTarget } from "./drizzle/oauth-drivers";
134
172
 
135
173
  const oauthTarget = makeOAuthTarget<
174
+ Database,
136
175
  EffectSQLiteDoDatabase<AnyRelations>,
137
176
  AnySQLiteTable<{ dialect: "sqlite" }>,
138
177
  true
139
- >({
178
+ >(Database, {
140
179
  mode: "synchronous",
141
180
  dialect: "sqlite",
142
181
  locking: false,
@@ -161,11 +200,12 @@ export const {
161
200
  import { makePasskeyTarget } from "./drizzle/passkey-drivers";
162
201
 
163
202
  const passkeyTarget = makePasskeyTarget<
203
+ Database,
164
204
  EffectSQLiteDoDatabase<AnyRelations>,
165
205
  AnySQLiteTable<{ dialect: "sqlite" }>,
166
206
  unknown,
167
207
  true
168
- >({
208
+ >(Database, {
169
209
  mode: "synchronous",
170
210
  dialect: "sqlite",
171
211
  locking: false,
@@ -188,11 +228,12 @@ export const {
188
228
  import { makeTotpTarget } from "./drizzle/totp-target";
189
229
 
190
230
  const totpTarget = makeTotpTarget<
231
+ Database,
191
232
  EffectSQLiteDoDatabase<AnyRelations>,
192
233
  AnySQLiteTable<{ dialect: "sqlite" }>,
193
234
  unknown,
194
235
  true
195
- >({
236
+ >(Database, {
196
237
  mode: "synchronous",
197
238
  dialect: "sqlite",
198
239
  locking: false,
@@ -204,11 +245,12 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
204
245
  import { makePhoneTarget } from "./drizzle/phone-target";
205
246
 
206
247
  const phoneTarget = makePhoneTarget<
248
+ Database,
207
249
  EffectSQLiteDoDatabase<AnyRelations>,
208
250
  AnySQLiteTable<{ dialect: "sqlite" }>,
209
251
  unknown,
210
252
  true
211
- >({
253
+ >(Database, {
212
254
  mode: "synchronous",
213
255
  dialect: "sqlite",
214
256
  locking: false,
package/src/SqliteNode.ts CHANGED
@@ -1,7 +1,18 @@
1
+ import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
1
2
  import type { AnyRelations } from "drizzle-orm";
2
3
  import { type EffectSQLiteNodeDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-node";
3
4
  import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
4
- import { Effect } from "effect";
5
+ import { Context, Effect, Layer } from "effect";
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, EffectSQLiteNodeDatabase<AnyRelations>>()(
11
+ "effect-auth/persistence-drizzle/SqliteNode/Database",
12
+ ) {}
13
+
14
+ /** Construct Drizzle from the driver's SQL-client Layer. */
15
+ export const databaseLayer = Layer.effect(Database, makeWithDefaults({}));
5
16
 
6
17
  import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
7
18
  import type {
@@ -22,29 +33,34 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
22
33
  import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
23
34
  import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
24
35
 
25
- const sessionTarget = makeSqliteSessionTarget<EffectSQLiteNodeDatabase<AnyRelations>>((database) =>
26
- sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(database)),
36
+ const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
37
+ Database,
38
+ (service) => sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(service)),
27
39
  );
28
40
 
29
- const proofTarget = makeSqliteProofTarget<EffectSQLiteNodeDatabase<AnyRelations>>((database) =>
30
- sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(database)),
41
+ const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
42
+ Database,
43
+ (service) => sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(service)),
31
44
  );
32
45
 
33
- const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteNodeDatabase<AnyRelations>>(
34
- (database) =>
46
+ const passwordTarget = makeSqlitePasswordTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
47
+ Database,
48
+ (service) =>
35
49
  sqlitePasswordConfiguration(
36
50
  "interactive",
37
- sqlClientPasswordStandaloneGuard(database),
38
- sqlClientProofStandaloneGuard(database),
51
+ sqlClientPasswordStandaloneGuard(service),
52
+ sqlClientProofStandaloneGuard(service),
39
53
  ),
40
54
  );
41
55
 
42
- const emailTarget = makeSqliteEmailTarget<EffectSQLiteNodeDatabase<AnyRelations>>((database) =>
43
- sqliteEmailConfiguration(
44
- "interactive",
45
- sqlClientEmailStandaloneGuard(database),
46
- sqlClientProofStandaloneGuard(database),
47
- ),
56
+ const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
57
+ Database,
58
+ (service) =>
59
+ sqliteEmailConfiguration(
60
+ "interactive",
61
+ sqlClientEmailStandaloneGuard(service),
62
+ sqlClientProofStandaloneGuard(service),
63
+ ),
48
64
  );
49
65
 
50
66
  export const {
@@ -86,9 +102,11 @@ export const makeIdentityServices = <
86
102
  Request extends AnySQLiteTable,
87
103
  NativeId,
88
104
  >(
89
- database: EffectSQLiteNodeDatabase<AnyRelations>,
90
105
  mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
91
- ) => makeSqliteIdentityServices(database, mapping, "interactive");
106
+ ) =>
107
+ makeSqliteIdentityServices(mapping, "interactive").pipe(
108
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
109
+ );
92
110
 
93
111
  export const makeSubjectProvisioningServices = <
94
112
  Subject extends AnySQLiteTable,
@@ -96,28 +114,33 @@ export const makeSubjectProvisioningServices = <
96
114
  Request extends AnySQLiteTable,
97
115
  NativeId,
98
116
  >(
99
- database: EffectSQLiteNodeDatabase<AnyRelations>,
100
117
  mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
101
- ) => makeSqliteSubjectProvisioningServices(database, mapping, "interactive");
118
+ ) =>
119
+ makeSqliteSubjectProvisioningServices(mapping, "interactive").pipe(
120
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
121
+ );
102
122
 
103
123
  export const makeExternalIdentityServices = <
104
124
  Subject extends AnySQLiteTable,
105
125
  External extends AnySQLiteTable,
106
126
  NativeId,
107
127
  >(
108
- database: EffectSQLiteNodeDatabase<AnyRelations>,
109
128
  mapping: ExternalIdentityTables<Subject, External, NativeId>,
110
- ) => makeSqliteExternalIdentityServices(database, mapping);
129
+ ) =>
130
+ makeSqliteExternalIdentityServices(mapping).pipe(
131
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
132
+ );
111
133
 
112
134
  import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
113
135
 
114
136
  const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
137
+ Database,
115
138
  EffectSQLiteNodeDatabase<AnyRelations>
116
- >((database) =>
139
+ >(Database, (service) =>
117
140
  sqlitePasswordConfiguration(
118
141
  "interactive",
119
- sqlClientPasswordStandaloneGuard(database),
120
- sqlClientProofStandaloneGuard(database),
142
+ sqlClientPasswordStandaloneGuard(service),
143
+ sqlClientProofStandaloneGuard(service),
121
144
  ),
122
145
  );
123
146
 
@@ -130,9 +153,10 @@ import { makeOAuthTarget } from "./drizzle/oauth-drivers";
130
153
  import { sqlClientOAuthStandaloneGuard } from "./drizzle/oauth-target";
131
154
 
132
155
  const oauthTarget = makeOAuthTarget<
156
+ Database,
133
157
  EffectSQLiteNodeDatabase<AnyRelations>,
134
158
  AnySQLiteTable<{ dialect: "sqlite" }>
135
- >({
159
+ >(Database, {
136
160
  mode: "interactive",
137
161
  dialect: "sqlite",
138
162
  locking: false,
@@ -158,9 +182,10 @@ import { makePasskeyTarget } from "./drizzle/passkey-drivers";
158
182
  import { sqlClientPasskeyStandaloneGuard } from "./drizzle/passkey-target";
159
183
 
160
184
  const passkeyTarget = makePasskeyTarget<
185
+ Database,
161
186
  EffectSQLiteNodeDatabase<AnyRelations>,
162
187
  AnySQLiteTable<{ dialect: "sqlite" }>
163
- >({
188
+ >(Database, {
164
189
  mode: "interactive",
165
190
  dialect: "sqlite",
166
191
  locking: false,
@@ -183,9 +208,10 @@ export const {
183
208
  import { makeTotpTarget, sqlClientTotpStandaloneGuard } from "./drizzle/totp-target";
184
209
 
185
210
  const totpTarget = makeTotpTarget<
211
+ Database,
186
212
  EffectSQLiteNodeDatabase<AnyRelations>,
187
213
  AnySQLiteTable<{ dialect: "sqlite" }>
188
- >({
214
+ >(Database, {
189
215
  mode: "interactive",
190
216
  dialect: "sqlite",
191
217
  locking: false,
@@ -197,9 +223,10 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
197
223
  import { makePhoneTarget, sqlClientPhoneStandaloneGuard } from "./drizzle/phone-target";
198
224
 
199
225
  const phoneTarget = makePhoneTarget<
226
+ Database,
200
227
  EffectSQLiteNodeDatabase<AnyRelations>,
201
228
  AnySQLiteTable<{ dialect: "sqlite" }>
202
- >({
229
+ >(Database, {
203
230
  mode: "interactive",
204
231
  dialect: "sqlite",
205
232
  locking: false,
package/src/SqliteWasm.ts CHANGED
@@ -1,7 +1,18 @@
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";
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({}));
5
16
 
6
17
  import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
7
18
  import type {
@@ -22,29 +33,34 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
22
33
  import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
23
34
  import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
24
35
 
25
- const sessionTarget = makeSqliteSessionTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
26
- sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(database)),
36
+ const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
37
+ Database,
38
+ (service) => sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(service)),
27
39
  );
28
40
 
29
- const proofTarget = makeSqliteProofTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
30
- sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(database)),
41
+ const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
42
+ Database,
43
+ (service) => sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(service)),
31
44
  );
32
45
 
33
- const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
34
- (database) =>
46
+ const passwordTarget = makeSqlitePasswordTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
47
+ Database,
48
+ (service) =>
35
49
  sqlitePasswordConfiguration(
36
50
  "interactive",
37
- sqlClientPasswordStandaloneGuard(database),
38
- sqlClientProofStandaloneGuard(database),
51
+ sqlClientPasswordStandaloneGuard(service),
52
+ sqlClientProofStandaloneGuard(service),
39
53
  ),
40
54
  );
41
55
 
42
- const emailTarget = makeSqliteEmailTarget<EffectSQLiteWasmDatabase<AnyRelations>>((database) =>
43
- sqliteEmailConfiguration(
44
- "interactive",
45
- sqlClientEmailStandaloneGuard(database),
46
- sqlClientProofStandaloneGuard(database),
47
- ),
56
+ const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
57
+ Database,
58
+ (service) =>
59
+ sqliteEmailConfiguration(
60
+ "interactive",
61
+ sqlClientEmailStandaloneGuard(service),
62
+ sqlClientProofStandaloneGuard(service),
63
+ ),
48
64
  );
49
65
 
50
66
  export const {
@@ -86,9 +102,11 @@ export const makeIdentityServices = <
86
102
  Request extends AnySQLiteTable,
87
103
  NativeId,
88
104
  >(
89
- database: EffectSQLiteWasmDatabase<AnyRelations>,
90
105
  mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
91
- ) => makeSqliteIdentityServices(database, mapping, "interactive");
106
+ ) =>
107
+ makeSqliteIdentityServices(mapping, "interactive").pipe(
108
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
109
+ );
92
110
 
93
111
  export const makeSubjectProvisioningServices = <
94
112
  Subject extends AnySQLiteTable,
@@ -96,28 +114,33 @@ export const makeSubjectProvisioningServices = <
96
114
  Request extends AnySQLiteTable,
97
115
  NativeId,
98
116
  >(
99
- database: EffectSQLiteWasmDatabase<AnyRelations>,
100
117
  mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
101
- ) => makeSqliteSubjectProvisioningServices(database, mapping, "interactive");
118
+ ) =>
119
+ makeSqliteSubjectProvisioningServices(mapping, "interactive").pipe(
120
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
121
+ );
102
122
 
103
123
  export const makeExternalIdentityServices = <
104
124
  Subject extends AnySQLiteTable,
105
125
  External extends AnySQLiteTable,
106
126
  NativeId,
107
127
  >(
108
- database: EffectSQLiteWasmDatabase<AnyRelations>,
109
128
  mapping: ExternalIdentityTables<Subject, External, NativeId>,
110
- ) => makeSqliteExternalIdentityServices(database, mapping);
129
+ ) =>
130
+ makeSqliteExternalIdentityServices(mapping).pipe(
131
+ Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
132
+ );
111
133
 
112
134
  import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
113
135
 
114
136
  const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
137
+ Database,
115
138
  EffectSQLiteWasmDatabase<AnyRelations>
116
- >((database) =>
139
+ >(Database, (service) =>
117
140
  sqlitePasswordConfiguration(
118
141
  "interactive",
119
- sqlClientPasswordStandaloneGuard(database),
120
- sqlClientProofStandaloneGuard(database),
142
+ sqlClientPasswordStandaloneGuard(service),
143
+ sqlClientProofStandaloneGuard(service),
121
144
  ),
122
145
  );
123
146
 
@@ -130,9 +153,10 @@ import { makeOAuthTarget } from "./drizzle/oauth-drivers";
130
153
  import { sqlClientOAuthStandaloneGuard } from "./drizzle/oauth-target";
131
154
 
132
155
  const oauthTarget = makeOAuthTarget<
156
+ Database,
133
157
  EffectSQLiteWasmDatabase<AnyRelations>,
134
158
  AnySQLiteTable<{ dialect: "sqlite" }>
135
- >({
159
+ >(Database, {
136
160
  mode: "interactive",
137
161
  dialect: "sqlite",
138
162
  locking: false,
@@ -158,9 +182,10 @@ import { makePasskeyTarget } from "./drizzle/passkey-drivers";
158
182
  import { sqlClientPasskeyStandaloneGuard } from "./drizzle/passkey-target";
159
183
 
160
184
  const passkeyTarget = makePasskeyTarget<
185
+ Database,
161
186
  EffectSQLiteWasmDatabase<AnyRelations>,
162
187
  AnySQLiteTable<{ dialect: "sqlite" }>
163
- >({
188
+ >(Database, {
164
189
  mode: "interactive",
165
190
  dialect: "sqlite",
166
191
  locking: false,
@@ -183,9 +208,10 @@ export const {
183
208
  import { makeTotpTarget, sqlClientTotpStandaloneGuard } from "./drizzle/totp-target";
184
209
 
185
210
  const totpTarget = makeTotpTarget<
211
+ Database,
186
212
  EffectSQLiteWasmDatabase<AnyRelations>,
187
213
  AnySQLiteTable<{ dialect: "sqlite" }>
188
- >({
214
+ >(Database, {
189
215
  mode: "interactive",
190
216
  dialect: "sqlite",
191
217
  locking: false,
@@ -197,9 +223,10 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
197
223
  import { makePhoneTarget, sqlClientPhoneStandaloneGuard } from "./drizzle/phone-target";
198
224
 
199
225
  const phoneTarget = makePhoneTarget<
226
+ Database,
200
227
  EffectSQLiteWasmDatabase<AnyRelations>,
201
228
  AnySQLiteTable<{ dialect: "sqlite" }>
202
- >({
229
+ >(Database, {
203
230
  mode: "interactive",
204
231
  dialect: "sqlite",
205
232
  locking: false,
@@ -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") {}