@effect-auth/core 0.1.0-alpha.1 → 0.1.0-alpha.2

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 (143) hide show
  1. package/README.md +622 -61
  2. package/dist/AuditLog.d.ts.map +1 -1
  3. package/dist/AuditLog.js +1 -1
  4. package/dist/AuditLog.js.map +1 -1
  5. package/dist/AuthConfig.d.ts +51 -0
  6. package/dist/AuthConfig.d.ts.map +1 -0
  7. package/dist/AuthConfig.js +56 -0
  8. package/dist/AuthConfig.js.map +1 -0
  9. package/dist/AuthFlow.d.ts +292 -35
  10. package/dist/AuthFlow.d.ts.map +1 -1
  11. package/dist/AuthFlow.js +130 -6
  12. package/dist/AuthFlow.js.map +1 -1
  13. package/dist/AuthKernel.d.ts +3 -0
  14. package/dist/AuthKernel.d.ts.map +1 -0
  15. package/dist/AuthKernel.js +9 -0
  16. package/dist/AuthKernel.js.map +1 -0
  17. package/dist/Challenge.d.ts +19 -3
  18. package/dist/Challenge.d.ts.map +1 -1
  19. package/dist/Challenge.js +157 -1
  20. package/dist/Challenge.js.map +1 -1
  21. package/dist/Client.d.ts +36 -0
  22. package/dist/Client.d.ts.map +1 -0
  23. package/dist/Client.js +55 -0
  24. package/dist/Client.js.map +1 -0
  25. package/dist/Crypto.d.ts +6 -1
  26. package/dist/Crypto.d.ts.map +1 -1
  27. package/dist/Crypto.js +62 -1
  28. package/dist/Crypto.js.map +1 -1
  29. package/dist/D1Kysely.d.ts +6 -3
  30. package/dist/D1Kysely.d.ts.map +1 -1
  31. package/dist/D1Kysely.js +8 -5
  32. package/dist/D1Kysely.js.map +1 -1
  33. package/dist/EffectQbSqliteStorage.d.ts +183 -0
  34. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  35. package/dist/EffectQbSqliteStorage.js +446 -0
  36. package/dist/EffectQbSqliteStorage.js.map +1 -0
  37. package/dist/EmailOtp.d.ts +117 -0
  38. package/dist/EmailOtp.d.ts.map +1 -0
  39. package/dist/EmailOtp.js +279 -0
  40. package/dist/EmailOtp.js.map +1 -0
  41. package/dist/EmailVerification.d.ts +121 -0
  42. package/dist/EmailVerification.d.ts.map +1 -0
  43. package/dist/EmailVerification.js +201 -0
  44. package/dist/EmailVerification.js.map +1 -0
  45. package/dist/HttpApi/Api.d.ts +175 -0
  46. package/dist/HttpApi/Api.d.ts.map +1 -0
  47. package/dist/HttpApi/Api.js +340 -0
  48. package/dist/HttpApi/Api.js.map +1 -0
  49. package/dist/HttpApi/Endpoints.d.ts +92 -0
  50. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  51. package/dist/HttpApi/Endpoints.js +48 -0
  52. package/dist/HttpApi/Endpoints.js.map +1 -0
  53. package/dist/HttpApi/Errors.d.ts +82 -0
  54. package/dist/HttpApi/Errors.d.ts.map +1 -0
  55. package/dist/HttpApi/Errors.js +184 -0
  56. package/dist/HttpApi/Errors.js.map +1 -0
  57. package/dist/HttpApi/Schemas.d.ts +86 -0
  58. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  59. package/dist/HttpApi/Schemas.js +63 -0
  60. package/dist/HttpApi/Schemas.js.map +1 -0
  61. package/dist/HttpApi/Security.d.ts +147 -0
  62. package/dist/HttpApi/Security.d.ts.map +1 -0
  63. package/dist/HttpApi/Security.js +439 -0
  64. package/dist/HttpApi/Security.js.map +1 -0
  65. package/dist/HttpApi/Transport.d.ts +31 -0
  66. package/dist/HttpApi/Transport.d.ts.map +1 -0
  67. package/dist/HttpApi/Transport.js +169 -0
  68. package/dist/HttpApi/Transport.js.map +1 -0
  69. package/dist/HttpApi/index.d.ts +8 -0
  70. package/dist/HttpApi/index.d.ts.map +1 -0
  71. package/dist/HttpApi/index.js +7 -0
  72. package/dist/HttpApi/index.js.map +1 -0
  73. package/dist/HttpApi.d.ts +2 -0
  74. package/dist/HttpApi.d.ts.map +1 -0
  75. package/dist/HttpApi.js +2 -0
  76. package/dist/HttpApi.js.map +1 -0
  77. package/dist/Identifiers.d.ts.map +1 -1
  78. package/dist/Identifiers.js.map +1 -1
  79. package/dist/Internal.d.ts +7 -0
  80. package/dist/Internal.d.ts.map +1 -0
  81. package/dist/Internal.js +12 -0
  82. package/dist/Internal.js.map +1 -0
  83. package/dist/KyselyStorage.d.ts +28 -2
  84. package/dist/KyselyStorage.d.ts.map +1 -1
  85. package/dist/KyselyStorage.js +223 -33
  86. package/dist/KyselyStorage.js.map +1 -1
  87. package/dist/Mailer.d.ts +116 -0
  88. package/dist/Mailer.d.ts.map +1 -0
  89. package/dist/Mailer.js +101 -0
  90. package/dist/Mailer.js.map +1 -0
  91. package/dist/Password.d.ts +107 -0
  92. package/dist/Password.d.ts.map +1 -0
  93. package/dist/Password.js +252 -0
  94. package/dist/Password.js.map +1 -0
  95. package/dist/Policy.d.ts +7 -4
  96. package/dist/Policy.d.ts.map +1 -1
  97. package/dist/Policy.js +28 -5
  98. package/dist/Policy.js.map +1 -1
  99. package/dist/Privacy.d.ts +15 -0
  100. package/dist/Privacy.d.ts.map +1 -1
  101. package/dist/Privacy.js +58 -1
  102. package/dist/Privacy.js.map +1 -1
  103. package/dist/RateLimiter.d.ts +104 -0
  104. package/dist/RateLimiter.d.ts.map +1 -0
  105. package/dist/RateLimiter.js +118 -0
  106. package/dist/RateLimiter.js.map +1 -0
  107. package/dist/Sessions.d.ts +73 -11
  108. package/dist/Sessions.d.ts.map +1 -1
  109. package/dist/Sessions.js +412 -1
  110. package/dist/Sessions.js.map +1 -1
  111. package/dist/Storage.d.ts +60 -5
  112. package/dist/Storage.d.ts.map +1 -1
  113. package/dist/Storage.js +11 -1
  114. package/dist/Storage.js.map +1 -1
  115. package/dist/StorageMigrations.d.ts +2 -1
  116. package/dist/StorageMigrations.d.ts.map +1 -1
  117. package/dist/StorageMigrations.js +33 -2
  118. package/dist/StorageMigrations.js.map +1 -1
  119. package/dist/Testing.d.ts +9 -1
  120. package/dist/Testing.d.ts.map +1 -1
  121. package/dist/Testing.js +30 -2
  122. package/dist/Testing.js.map +1 -1
  123. package/dist/WaitUntil.d.ts.map +1 -1
  124. package/dist/WaitUntil.js +1 -1
  125. package/dist/WaitUntil.js.map +1 -1
  126. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  127. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  128. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  129. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  130. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  131. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  132. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  133. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  134. package/dist/index.d.ts +6 -0
  135. package/dist/index.d.ts.map +1 -1
  136. package/dist/index.js +6 -0
  137. package/dist/index.js.map +1 -1
  138. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  139. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  140. package/dist/internal/RateLimitDurableObject.js +80 -0
  141. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  142. package/migrations/0002_auth_password.sql +25 -0
  143. package/package.json +76 -20
@@ -0,0 +1,446 @@
1
+ import { Data, Effect, Layer, Option } from "effect";
2
+ import { Column, Executor, Query, Table } from "effect-qb/sqlite";
3
+ import { ChallengeId, CredentialId, Email, SessionId, UnixMillis, UserId, } from "./Identifiers.js";
4
+ import { CredentialStore, SessionStore, StorageError, UserStore, VerificationStore, } from "./Storage.js";
5
+ export class D1EffectQbError extends Data.TaggedError("D1EffectQbError") {
6
+ }
7
+ const makeAuthUserTable = (name) => Table.make(name, {
8
+ id: Column.text().pipe(Column.primaryKey),
9
+ email: Column.text(),
10
+ email_verified: Column.int(),
11
+ created_at: Column.int(),
12
+ updated_at: Column.int(),
13
+ disabled_at: Column.int().pipe(Column.nullable),
14
+ metadata: Column.text().pipe(Column.nullable),
15
+ });
16
+ const makeAuthCredentialTable = (name) => Table.make(name, {
17
+ id: Column.text().pipe(Column.primaryKey),
18
+ user_id: Column.text(),
19
+ type: Column.text(),
20
+ password_hash: Column.text().pipe(Column.nullable),
21
+ created_at: Column.int(),
22
+ updated_at: Column.int(),
23
+ revoked_at: Column.int().pipe(Column.nullable),
24
+ metadata: Column.text().pipe(Column.nullable),
25
+ });
26
+ const makeAuthSessionTable = (name) => Table.make(name, {
27
+ id: Column.text().pipe(Column.primaryKey),
28
+ user_id: Column.text(),
29
+ secret_hash: Column.text(),
30
+ created_at: Column.int(),
31
+ expires_at: Column.int(),
32
+ auth_time: Column.int(),
33
+ aal: Column.text(),
34
+ amr: Column.text(),
35
+ mfa_verified_at: Column.int().pipe(Column.nullable),
36
+ metadata: Column.text().pipe(Column.nullable),
37
+ revoked_at: Column.int().pipe(Column.nullable),
38
+ last_seen_at: Column.int().pipe(Column.nullable),
39
+ rotated_at: Column.int().pipe(Column.nullable),
40
+ });
41
+ const makeAuthVerificationTable = (name) => Table.make(name, {
42
+ id: Column.text().pipe(Column.primaryKey),
43
+ type: Column.text(),
44
+ subject: Column.text(),
45
+ secret_hash: Column.text().pipe(Column.nullable),
46
+ created_at: Column.int(),
47
+ expires_at: Column.int(),
48
+ metadata: Column.text().pipe(Column.nullable),
49
+ consumed_at: Column.int().pipe(Column.nullable),
50
+ });
51
+ const authSqliteTablesTypeId = Symbol.for("@effect-auth/core/EffectQbSqliteStorage/AuthSqliteTables");
52
+ const jsonEncode = (value) => value === undefined ? null : JSON.stringify(value);
53
+ const jsonDecode = (value) => {
54
+ if (value === null || value === undefined) {
55
+ return undefined;
56
+ }
57
+ return typeof value === "string" ? JSON.parse(value) : value;
58
+ };
59
+ const optionalUnixMillis = (value) => value === null || value === undefined ? undefined : UnixMillis(Number(value));
60
+ const decodeAmr = (value) => typeof value === "string"
61
+ ? JSON.parse(value)
62
+ : value;
63
+ const decodeBoolean = (value) => {
64
+ if (typeof value === "boolean") {
65
+ return value;
66
+ }
67
+ if (typeof value === "number") {
68
+ return value !== 0;
69
+ }
70
+ if (typeof value === "string") {
71
+ return value !== "" && value !== "0" && value !== "false";
72
+ }
73
+ return value !== null && value !== undefined;
74
+ };
75
+ const mutationValues = (value) => value;
76
+ // Concrete effect-qb table generics are erased after `defineEffectQbAuthTables`;
77
+ // mapping definitions keep typed encoders at the app boundary.
78
+ const querySelect = (selection) => Query.select(selection);
79
+ const queryReturning = (selection) => Query.returning(selection);
80
+ const queryFrom = (table) => Query.from(table);
81
+ const queryInsert = (table, values) => Query.insert(table, values);
82
+ const queryUpdate = (table, values) => Query.update(table, values);
83
+ const queryDelete = (table) => Query.delete(table);
84
+ const queryEq = (left, right) => Query.eq(left, right);
85
+ const queryGt = (left, right) => Query.gt(left, right);
86
+ const queryLte = (left, right) => Query.lte(left, right);
87
+ const queryIsNull = (value) => Query.isNull(value);
88
+ const queryIn = (value, first, ...rest) => Query.in(value, first, ...rest);
89
+ const executePlan = (executor, plan) => executor.execute(plan);
90
+ const omitUndefined = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
91
+ const sessionMetadataEnvelopeKey = "__effectAuthSession";
92
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
93
+ const decodeSessionMetadata = (value) => {
94
+ const decoded = jsonDecode(value);
95
+ const envelope = isRecord(decoded)
96
+ ? decoded[sessionMetadataEnvelopeKey]
97
+ : undefined;
98
+ if (!isRecord(envelope) || envelope.version !== 1) {
99
+ return omitUndefined({
100
+ metadata: decoded,
101
+ });
102
+ }
103
+ return omitUndefined({
104
+ metadata: envelope.metadata,
105
+ claims: envelope.claims,
106
+ });
107
+ };
108
+ const encodeSessionMetadata = (row) => {
109
+ if (row.claims === undefined) {
110
+ return jsonEncode(row.metadata);
111
+ }
112
+ return jsonEncode({
113
+ [sessionMetadataEnvelopeKey]: omitUndefined({
114
+ version: 1,
115
+ metadata: row.metadata,
116
+ claims: row.claims,
117
+ }),
118
+ });
119
+ };
120
+ const decodeDefaultUserRow = (row) => omitUndefined({
121
+ id: UserId(row.id),
122
+ email: Email(row.email),
123
+ emailVerified: decodeBoolean(row.emailVerified),
124
+ createdAt: UnixMillis(Number(row.createdAt)),
125
+ updatedAt: UnixMillis(Number(row.updatedAt)),
126
+ disabledAt: optionalUnixMillis(row.disabledAt),
127
+ metadata: jsonDecode(row.metadata),
128
+ });
129
+ const decodeUserRow = (tables, row) => tables.user.decode === undefined
130
+ ? decodeDefaultUserRow(row)
131
+ : tables.user.decode(row);
132
+ const decodeDefaultPasswordCredentialRow = (row) => omitUndefined({
133
+ id: CredentialId(row.id),
134
+ userId: UserId(row.userId),
135
+ passwordHash: row.passwordHash ?? "",
136
+ createdAt: UnixMillis(Number(row.createdAt)),
137
+ updatedAt: UnixMillis(Number(row.updatedAt)),
138
+ revokedAt: optionalUnixMillis(row.revokedAt),
139
+ metadata: jsonDecode(row.metadata),
140
+ });
141
+ const decodePasswordCredentialRow = (tables, row) => tables.credential.decodePassword === undefined
142
+ ? decodeDefaultPasswordCredentialRow(row)
143
+ : tables.credential.decodePassword(row);
144
+ const decodeDefaultSessionRow = (row) => {
145
+ const sessionMetadata = decodeSessionMetadata(row.metadata);
146
+ return omitUndefined({
147
+ id: SessionId(row.id),
148
+ userId: UserId(row.userId),
149
+ secretHash: row.secretHash,
150
+ createdAt: UnixMillis(Number(row.createdAt)),
151
+ expiresAt: UnixMillis(Number(row.expiresAt)),
152
+ authTime: UnixMillis(Number(row.authTime)),
153
+ aal: row.aal,
154
+ amr: decodeAmr(row.amr),
155
+ mfaVerifiedAt: optionalUnixMillis(row.mfaVerifiedAt),
156
+ metadata: sessionMetadata.metadata,
157
+ claims: sessionMetadata.claims,
158
+ revokedAt: optionalUnixMillis(row.revokedAt),
159
+ lastSeenAt: optionalUnixMillis(row.lastSeenAt),
160
+ rotatedAt: optionalUnixMillis(row.rotatedAt),
161
+ });
162
+ };
163
+ const decodeSessionRow = (tables, row) => tables.session.decode === undefined
164
+ ? decodeDefaultSessionRow(row)
165
+ : tables.session.decode(row);
166
+ const decodeDefaultVerificationRow = (row) => omitUndefined({
167
+ id: ChallengeId(row.id),
168
+ type: row.type,
169
+ subject: row.subject,
170
+ secretHash: row.secretHash ?? undefined,
171
+ createdAt: UnixMillis(Number(row.createdAt)),
172
+ expiresAt: UnixMillis(Number(row.expiresAt)),
173
+ metadata: jsonDecode(row.metadata),
174
+ consumedAt: optionalUnixMillis(row.consumedAt),
175
+ });
176
+ const decodeVerificationRow = (tables, row) => tables.verification.decode === undefined
177
+ ? decodeDefaultVerificationRow(row)
178
+ : tables.verification.decode(row);
179
+ const userInsert = (row) => ({
180
+ id: row.id,
181
+ email: row.email,
182
+ email_verified: row.emailVerified ? 1 : 0,
183
+ created_at: Number(row.createdAt),
184
+ updated_at: Number(row.updatedAt),
185
+ disabled_at: row.disabledAt === undefined ? null : Number(row.disabledAt),
186
+ metadata: jsonEncode(row.metadata),
187
+ });
188
+ const passwordCredentialInsert = (row) => ({
189
+ id: row.id,
190
+ user_id: row.userId,
191
+ type: "password",
192
+ password_hash: row.passwordHash,
193
+ created_at: Number(row.createdAt),
194
+ updated_at: Number(row.updatedAt),
195
+ revoked_at: row.revokedAt === undefined ? null : Number(row.revokedAt),
196
+ metadata: jsonEncode(row.metadata),
197
+ });
198
+ const sessionInsert = (row) => ({
199
+ id: row.id,
200
+ user_id: row.userId,
201
+ secret_hash: row.secretHash,
202
+ created_at: Number(row.createdAt),
203
+ expires_at: Number(row.expiresAt),
204
+ auth_time: Number(row.authTime),
205
+ aal: row.aal,
206
+ amr: JSON.stringify(row.amr),
207
+ mfa_verified_at: row.mfaVerifiedAt === undefined ? null : Number(row.mfaVerifiedAt),
208
+ metadata: encodeSessionMetadata(row),
209
+ revoked_at: null,
210
+ last_seen_at: null,
211
+ rotated_at: null,
212
+ });
213
+ const verificationInsert = (row) => ({
214
+ id: row.id,
215
+ type: row.type,
216
+ subject: row.subject,
217
+ secret_hash: row.secretHash ?? null,
218
+ created_at: Number(row.createdAt),
219
+ expires_at: Number(row.expiresAt),
220
+ metadata: jsonEncode(row.metadata),
221
+ consumed_at: null,
222
+ });
223
+ const userMarkEmailVerifiedUpdate = (input) => ({
224
+ email_verified: 1,
225
+ updated_at: Number(input.updatedAt),
226
+ });
227
+ const sessionRefreshUpdate = (input) => omitUndefined({
228
+ expires_at: Number(input.expiresAt),
229
+ last_seen_at: input.lastSeenAt === undefined ? undefined : Number(input.lastSeenAt),
230
+ });
231
+ const sessionRotateUpdate = (input) => omitUndefined({
232
+ secret_hash: input.secretHash,
233
+ rotated_at: Number(input.rotatedAt),
234
+ expires_at: input.expiresAt === undefined ? undefined : Number(input.expiresAt),
235
+ });
236
+ const sessionUpdateClaimsUpdate = (row, input) => ({
237
+ metadata: encodeSessionMetadata({
238
+ ...row,
239
+ claims: input.claims,
240
+ }),
241
+ });
242
+ const sessionRevokeUpdate = (input) => ({
243
+ revoked_at: Number(input.revokedAt),
244
+ });
245
+ const verificationConsumeUpdate = (input) => ({
246
+ consumed_at: Number(input.consumedAt),
247
+ });
248
+ const makeInternalAuthSqliteTables = (names = {}) => {
249
+ const user = makeAuthUserTable(names.user ?? "auth_user");
250
+ const credential = makeAuthCredentialTable(names.credential ?? "auth_credential");
251
+ const session = makeAuthSessionTable(names.session ?? "auth_session");
252
+ const verification = makeAuthVerificationTable(names.verification ?? "auth_verification");
253
+ return {
254
+ user: {
255
+ table: user,
256
+ select: {
257
+ id: user.id,
258
+ email: user.email,
259
+ emailVerified: user.email_verified,
260
+ createdAt: user.created_at,
261
+ updatedAt: user.updated_at,
262
+ disabledAt: user.disabled_at,
263
+ metadata: user.metadata,
264
+ },
265
+ insert: userInsert,
266
+ markEmailVerified: userMarkEmailVerifiedUpdate,
267
+ },
268
+ credential: {
269
+ table: credential,
270
+ select: {
271
+ id: credential.id,
272
+ userId: credential.user_id,
273
+ type: credential.type,
274
+ passwordHash: credential.password_hash,
275
+ createdAt: credential.created_at,
276
+ updatedAt: credential.updated_at,
277
+ revokedAt: credential.revoked_at,
278
+ metadata: credential.metadata,
279
+ },
280
+ insertPassword: passwordCredentialInsert,
281
+ },
282
+ session: {
283
+ table: session,
284
+ select: {
285
+ id: session.id,
286
+ userId: session.user_id,
287
+ secretHash: session.secret_hash,
288
+ createdAt: session.created_at,
289
+ expiresAt: session.expires_at,
290
+ authTime: session.auth_time,
291
+ aal: session.aal,
292
+ amr: session.amr,
293
+ mfaVerifiedAt: session.mfa_verified_at,
294
+ metadata: session.metadata,
295
+ revokedAt: session.revoked_at,
296
+ lastSeenAt: session.last_seen_at,
297
+ rotatedAt: session.rotated_at,
298
+ },
299
+ insert: sessionInsert,
300
+ refresh: sessionRefreshUpdate,
301
+ rotate: sessionRotateUpdate,
302
+ updateClaims: sessionUpdateClaimsUpdate,
303
+ revoke: sessionRevokeUpdate,
304
+ },
305
+ verification: {
306
+ table: verification,
307
+ select: {
308
+ id: verification.id,
309
+ type: verification.type,
310
+ subject: verification.subject,
311
+ secretHash: verification.secret_hash,
312
+ createdAt: verification.created_at,
313
+ expiresAt: verification.expires_at,
314
+ metadata: verification.metadata,
315
+ consumedAt: verification.consumed_at,
316
+ },
317
+ insert: verificationInsert,
318
+ consume: verificationConsumeUpdate,
319
+ },
320
+ };
321
+ };
322
+ const asAuthSqliteTables = (tables) => tables;
323
+ export const defineEffectQbAuthTables = (tables) => asAuthSqliteTables(tables);
324
+ export const makeAuthSqliteTables = (names = {}) => asAuthSqliteTables(makeInternalAuthSqliteTables(names));
325
+ export const authSqliteTables = makeAuthSqliteTables();
326
+ const selectUserColumns = (tables) => tables.user.select;
327
+ const selectCredentialColumns = (tables) => tables.credential.select;
328
+ const selectSessionColumns = (tables) => tables.session.select;
329
+ const selectVerificationColumns = (tables) => tables.verification.select;
330
+ const storageError = (entity, operation, cause) => StorageError.fromUnknown(entity, operation, cause);
331
+ const runEffectQb = (entity, operation, effect) => Effect.mapError(effect, (cause) => storageError(entity, operation, cause));
332
+ const findUserById = (executor, tables, id, operation = "find") => runEffectQb("user", operation, executePlan(executor, querySelect(selectUserColumns(tables)).pipe(queryFrom(tables.user.table), Query.where(queryEq(tables.user.select.id, id))))).pipe(Effect.map((rows) => rows[0] === undefined
333
+ ? Option.none()
334
+ : Option.some(decodeUserRow(tables, rows[0]))));
335
+ const findUserByEmail = (executor, tables, email, operation = "find") => runEffectQb("user", operation, executePlan(executor, querySelect(selectUserColumns(tables)).pipe(queryFrom(tables.user.table), Query.where(queryEq(tables.user.select.email, email))))).pipe(Effect.map((rows) => rows[0] === undefined
336
+ ? Option.none()
337
+ : Option.some(decodeUserRow(tables, rows[0]))));
338
+ const findPasswordCredentialByUserId = (executor, tables, userId, operation = "find") => runEffectQb("credential", operation, executePlan(executor, querySelect(selectCredentialColumns(tables)).pipe(queryFrom(tables.credential.table), Query.where(queryEq(tables.credential.select.userId, userId)), Query.where(queryEq(tables.credential.select.type, "password"))))).pipe(Effect.map((rows) => rows[0] === undefined
339
+ ? Option.none()
340
+ : Option.some(decodePasswordCredentialRow(tables, rows[0]))));
341
+ const findSessionById = (executor, tables, id, operation = "find") => runEffectQb("session", operation, executePlan(executor, querySelect(selectSessionColumns(tables)).pipe(queryFrom(tables.session.table), Query.where(queryEq(tables.session.select.id, id))))).pipe(Effect.map((rows) => rows[0] === undefined
342
+ ? Option.none()
343
+ : Option.some(decodeSessionRow(tables, rows[0]))));
344
+ const findVerificationById = (executor, tables, id, operation = "find") => runEffectQb("verification", operation, executePlan(executor, querySelect(selectVerificationColumns(tables)).pipe(queryFrom(tables.verification.table), Query.where(queryEq(tables.verification.select.id, id))))).pipe(Effect.map((rows) => rows[0] === undefined
345
+ ? Option.none()
346
+ : Option.some(decodeVerificationRow(tables, rows[0]))));
347
+ export const makeEffectQbSqliteUserStore = (executor, options = {}) => {
348
+ const tables = options.tables ?? authSqliteTables;
349
+ return UserStore.make({
350
+ findById: (id) => findUserById(executor, tables, id),
351
+ findByEmail: (email) => findUserByEmail(executor, tables, email),
352
+ insert: (row) => runEffectQb("user", "insert", executePlan(executor, queryInsert(tables.user.table, mutationValues(tables.user.insert(row))))).pipe(Effect.asVoid),
353
+ markEmailVerified: (input) => runEffectQb("user", "markEmailVerified", executePlan(executor, queryUpdate(tables.user.table, mutationValues(tables.user.markEmailVerified(input))).pipe(Query.where(queryEq(tables.user.select.id, input.userId)), queryReturning(selectUserColumns(tables))))).pipe(Effect.map((rows) => rows[0] === undefined
354
+ ? Option.none()
355
+ : Option.some(decodeUserRow(tables, rows[0])))),
356
+ });
357
+ };
358
+ export const makeEffectQbSqliteCredentialStore = (executor, options = {}) => {
359
+ const tables = options.tables ?? authSqliteTables;
360
+ return CredentialStore.make({
361
+ findPasswordByUserId: (userId) => findPasswordCredentialByUserId(executor, tables, userId),
362
+ insertPassword: (row) => runEffectQb("credential", "insert", executePlan(executor, queryInsert(tables.credential.table, mutationValues(tables.credential.insertPassword(row))))).pipe(Effect.asVoid),
363
+ });
364
+ };
365
+ export const makeEffectQbSqliteSessionStore = (executor, options = {}) => {
366
+ const tables = options.tables ?? authSqliteTables;
367
+ return SessionStore.make({
368
+ findById: (id) => findSessionById(executor, tables, id),
369
+ insert: (row) => runEffectQb("session", "insert", executePlan(executor, queryInsert(tables.session.table, mutationValues(tables.session.insert(row))))).pipe(Effect.asVoid),
370
+ refresh: (input) => {
371
+ const query = queryUpdate(tables.session.table, mutationValues(tables.session.refresh(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), queryReturning(selectSessionColumns(tables)));
372
+ return runEffectQb("session", "refresh", executePlan(executor, query)).pipe(Effect.map((rows) => rows[0] === undefined
373
+ ? Option.none()
374
+ : Option.some(decodeSessionRow(tables, rows[0]))));
375
+ },
376
+ rotate: (input) => {
377
+ const query = queryUpdate(tables.session.table, mutationValues(tables.session.rotate(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), queryReturning(selectSessionColumns(tables)));
378
+ return runEffectQb("session", "rotate", executePlan(executor, query)).pipe(Effect.map((rows) => rows[0] === undefined
379
+ ? Option.none()
380
+ : Option.some(decodeSessionRow(tables, rows[0]))));
381
+ },
382
+ updateClaims: (input) => findSessionById(executor, tables, input.sessionId, "updateClaims").pipe(Effect.flatMap((rowOption) => {
383
+ if (Option.isNone(rowOption)) {
384
+ return Effect.succeed(Option.none());
385
+ }
386
+ return runEffectQb("session", "updateClaims", executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.updateClaims(rowOption.value, input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), queryReturning(selectSessionColumns(tables))))).pipe(Effect.map((rows) => rows[0] === undefined
387
+ ? Option.none()
388
+ : Option.some(decodeSessionRow(tables, rows[0]))));
389
+ })),
390
+ revoke: (input) => runEffectQb("session", "revoke", executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.revoke(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId))))).pipe(Effect.asVoid),
391
+ revokeAllForUser: (input) => runEffectQb("session", "revokeAllForUser", executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.revoke(input))).pipe(Query.where(queryEq(tables.session.select.userId, input.userId))))).pipe(Effect.asVoid),
392
+ });
393
+ };
394
+ export const makeEffectQbSqliteVerificationStore = (executor, options = {}) => {
395
+ const tables = options.tables ?? authSqliteTables;
396
+ return VerificationStore.make({
397
+ findById: (id) => findVerificationById(executor, tables, id),
398
+ insert: (row) => runEffectQb("verification", "insert", executePlan(executor, queryInsert(tables.verification.table, mutationValues(tables.verification.insert(row))))).pipe(Effect.asVoid),
399
+ consume: (input) => {
400
+ const base = queryUpdate(tables.verification.table, mutationValues(tables.verification.consume(input))).pipe(Query.where(queryEq(tables.verification.select.id, input.id)), Query.where(queryIsNull(tables.verification.select.consumedAt)), Query.where(queryGt(tables.verification.select.expiresAt, Number(input.consumedAt))));
401
+ const plan = input.type === undefined
402
+ ? base
403
+ : base.pipe(Query.where(queryEq(tables.verification.select.type, input.type)));
404
+ return runEffectQb("verification", "consume", executePlan(executor, plan.pipe(queryReturning({ id: tables.verification.select.id })))).pipe(Effect.flatMap((rows) => rows[0] === undefined
405
+ ? Effect.succeed(Option.none())
406
+ : findVerificationById(executor, tables, input.id, "consume")));
407
+ },
408
+ deleteExpired: (input) => {
409
+ if (input.limit === undefined) {
410
+ return runEffectQb("verification", "deleteExpired", executePlan(executor, queryDelete(tables.verification.table).pipe(Query.where(queryLte(tables.verification.select.expiresAt, Number(input.now))), queryReturning({ id: tables.verification.select.id })))).pipe(Effect.map((rows) => rows.length));
411
+ }
412
+ return runEffectQb("verification", "deleteExpired", executePlan(executor, querySelect({ id: tables.verification.select.id }).pipe(queryFrom(tables.verification.table), Query.where(queryLte(tables.verification.select.expiresAt, Number(input.now))), Query.limit(input.limit)))).pipe(Effect.flatMap((rows) => {
413
+ const [first, ...rest] = rows.map((row) => row.id);
414
+ if (first === undefined) {
415
+ return Effect.succeed(0);
416
+ }
417
+ return runEffectQb("verification", "deleteExpired", executePlan(executor, queryDelete(tables.verification.table).pipe(Query.where(queryIn(tables.verification.select.id, first, ...rest)), queryReturning({ id: tables.verification.select.id })))).pipe(Effect.map((deleted) => deleted.length));
418
+ }));
419
+ },
420
+ });
421
+ };
422
+ export const makeEffectQbSqliteStorage = (executor, options = {}) => ({
423
+ userStore: makeEffectQbSqliteUserStore(executor, options),
424
+ credentialStore: makeEffectQbSqliteCredentialStore(executor, options),
425
+ sessionStore: makeEffectQbSqliteSessionStore(executor, options),
426
+ verificationStore: makeEffectQbSqliteVerificationStore(executor, options),
427
+ });
428
+ export const EffectQbSqliteAuthStorageLive = (executor, options = {}) => Layer.mergeAll(Layer.succeed(UserStore)(makeEffectQbSqliteUserStore(executor, options)), Layer.succeed(CredentialStore)(makeEffectQbSqliteCredentialStore(executor, options)), Layer.succeed(SessionStore)(makeEffectQbSqliteSessionStore(executor, options)), Layer.succeed(VerificationStore)(makeEffectQbSqliteVerificationStore(executor, options)));
429
+ export const makeD1EffectQbSqliteExecutor = (database) => Executor.make({
430
+ driver: Executor.driver((query) => Effect.tryPromise({
431
+ try: () => database
432
+ .prepare(query.sql)
433
+ .bind(...query.params)
434
+ .all(),
435
+ catch: (cause) => new D1EffectQbError({ message: "D1 query failed", cause }),
436
+ }).pipe(Effect.flatMap((result) => {
437
+ if (result.success === false || result.error !== undefined) {
438
+ return Effect.fail(new D1EffectQbError({
439
+ message: result.error ?? "D1 query failed",
440
+ }));
441
+ }
442
+ return Effect.succeed([...(result.results ?? [])]);
443
+ }))),
444
+ });
445
+ export const D1EffectQbSqliteAuthStorageLive = (database, options = {}) => EffectQbSqliteAuthStorageLive(makeD1EffectQbSqliteExecutor(database), options);
446
+ //# sourceMappingURL=EffectQbSqliteStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffectQbSqliteStorage.js","sourceRoot":"","sources":["../src/EffectQbSqliteStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { Context, Duration, Effect, Layer, Redacted } from "effect";
2
+ import { AuthFlow } from "./AuthFlow.js";
3
+ import type { AuthFlowService, AuthFlowPrimaryFactorResult, AuthResultOf } from "./AuthFlow.js";
4
+ import { Challenge } from "./Challenge.js";
5
+ import type { ChallengeService } from "./Challenge.js";
6
+ import { Crypto } from "./Crypto.js";
7
+ import type { CryptoService } from "./Crypto.js";
8
+ import type { ChallengeId, UnixMillis } from "./Identifiers.js";
9
+ import { Email } from "./Identifiers.js";
10
+ import { AuthMailer } from "./Mailer.js";
11
+ import type { AuthMailerService } from "./Mailer.js";
12
+ import { UserStore } from "./Storage.js";
13
+ import type { UserStoreService } from "./Storage.js";
14
+ export interface EmailOtpStartInput {
15
+ readonly email: Email;
16
+ readonly secret?: Redacted.Redacted<string>;
17
+ readonly ttl?: Duration.Duration;
18
+ readonly locale?: string;
19
+ readonly metadata?: Readonly<Record<string, unknown>>;
20
+ }
21
+ export interface EmailOtpStarted {
22
+ readonly challengeId: ChallengeId;
23
+ readonly email: Email;
24
+ readonly expiresAt: UnixMillis;
25
+ }
26
+ export interface EmailOtpVerifyInput {
27
+ readonly challengeId: ChallengeId;
28
+ readonly secret: Redacted.Redacted<string>;
29
+ }
30
+ declare const EmailOtpStartError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
31
+ readonly _tag: "EmailOtpStartError";
32
+ } & Readonly<A>;
33
+ export declare class EmailOtpStartError extends EmailOtpStartError_base<{
34
+ readonly message: string;
35
+ readonly cause?: unknown;
36
+ }> {
37
+ }
38
+ declare const EmailOtpVerifyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
39
+ readonly _tag: "EmailOtpVerifyError";
40
+ } & Readonly<A>;
41
+ export declare class EmailOtpVerifyError extends EmailOtpVerifyError_base<{
42
+ readonly message: string;
43
+ readonly cause?: unknown;
44
+ }> {
45
+ }
46
+ export type EmailOtpSecretGeneratorOperation = "generate" | "normalize";
47
+ declare const EmailOtpSecretGeneratorError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
48
+ readonly _tag: "EmailOtpSecretGeneratorError";
49
+ } & Readonly<A>;
50
+ export declare class EmailOtpSecretGeneratorError extends EmailOtpSecretGeneratorError_base<{
51
+ readonly operation: EmailOtpSecretGeneratorOperation;
52
+ readonly message: string;
53
+ readonly cause?: unknown;
54
+ }> {
55
+ }
56
+ export type EmailOtpError = EmailOtpStartError | EmailOtpVerifyError;
57
+ export type EmailOtpVerifyResult = AuthFlowPrimaryFactorResult<"email-otp"> | AuthResultOf<"InvalidCredentials" | "AccountDisabled">;
58
+ export interface EmailOtpLoginService {
59
+ readonly start: (input: EmailOtpStartInput) => Effect.Effect<EmailOtpStarted, EmailOtpStartError>;
60
+ readonly verify: (input: EmailOtpVerifyInput) => Effect.Effect<EmailOtpVerifyResult, EmailOtpVerifyError>;
61
+ }
62
+ declare const EmailOtpLogin_base: Context.ServiceClass<EmailOtpLogin, "auth/login/EmailOtp", EmailOtpLoginService>;
63
+ export declare class EmailOtpLogin extends EmailOtpLogin_base {
64
+ }
65
+ export declare namespace EmailOtpLogin {
66
+ const make: (service: EmailOtpLoginService) => EmailOtpLoginService;
67
+ }
68
+ export interface EmailOtpSecretGenerateInput {
69
+ readonly email: Email;
70
+ readonly locale?: string;
71
+ readonly metadata?: Readonly<Record<string, unknown>>;
72
+ }
73
+ export interface GeneratedEmailOtpSecret {
74
+ readonly secret: Redacted.Redacted<string>;
75
+ }
76
+ export interface EmailOtpSecretNormalizeInput {
77
+ readonly secret: Redacted.Redacted<string>;
78
+ }
79
+ export interface EmailOtpSecretGeneratorService {
80
+ readonly generate: (input: EmailOtpSecretGenerateInput) => Effect.Effect<GeneratedEmailOtpSecret, EmailOtpSecretGeneratorError>;
81
+ readonly normalize: (input: EmailOtpSecretNormalizeInput) => Effect.Effect<Redacted.Redacted<string>, EmailOtpSecretGeneratorError>;
82
+ }
83
+ declare const EmailOtpSecretGenerator_base: Context.ServiceClass<EmailOtpSecretGenerator, "auth/email-otp/SecretGenerator", EmailOtpSecretGeneratorService>;
84
+ export declare class EmailOtpSecretGenerator extends EmailOtpSecretGenerator_base {
85
+ }
86
+ export declare namespace EmailOtpSecretGenerator {
87
+ const make: (service: EmailOtpSecretGeneratorService) => EmailOtpSecretGeneratorService;
88
+ }
89
+ export interface EmailOtpSecretGeneratorOptions {
90
+ readonly alphabet?: string;
91
+ readonly length?: number;
92
+ }
93
+ export interface EmailOtpOptions extends EmailOtpSecretGeneratorOptions {
94
+ readonly ttl?: Duration.Duration;
95
+ readonly userIdBytes?: number;
96
+ }
97
+ export interface EmailOtpDependencies extends EmailOtpOptions {
98
+ readonly challenge: ChallengeService;
99
+ readonly users: UserStoreService;
100
+ readonly crypto: CryptoService;
101
+ readonly authFlow: AuthFlowService;
102
+ readonly authMailer: AuthMailerService;
103
+ readonly secretGenerator: EmailOtpSecretGeneratorService;
104
+ }
105
+ export declare const defaultEmailOtpTtl: Duration.Duration;
106
+ export declare const defaultEmailOtpAlphabet = "0123456789";
107
+ export declare const defaultEmailOtpLength = 6;
108
+ export interface AlphabetEmailOtpSecretGeneratorDependencies extends EmailOtpSecretGeneratorOptions {
109
+ readonly crypto: CryptoService;
110
+ }
111
+ export declare const makeAlphabetEmailOtpSecretGenerator: (dependencies: AlphabetEmailOtpSecretGeneratorDependencies) => EmailOtpSecretGeneratorService;
112
+ export declare const EmailOtpSecretGeneratorLive: (options?: EmailOtpSecretGeneratorOptions) => Layer.Layer<EmailOtpSecretGenerator, never, Crypto>;
113
+ export declare const makeEmailOtpLogin: (dependencies: EmailOtpDependencies) => EmailOtpLoginService;
114
+ export declare const EmailOtpLoginLive: (options?: EmailOtpOptions) => Layer.Layer<EmailOtpLogin, never, Crypto | Challenge | UserStore | AuthFlow | AuthMailer | EmailOtpSecretGenerator>;
115
+ export declare const EmailOtpFeatureLive: Layer.Layer<EmailOtpLogin | EmailOtpSecretGenerator, never, Crypto | Challenge | UserStore | AuthFlow | AuthMailer>;
116
+ export {};
117
+ //# sourceMappingURL=EmailOtp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailOtp.d.ts","sourceRoot":"","sources":["../src/EmailOtp.ts"],"names":[],"mappings":"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"}