@effect-auth/core 0.1.0-alpha.0 → 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 (147) hide show
  1. package/README.md +679 -36
  2. package/dist/AuditLog.d.ts +3 -0
  3. package/dist/AuditLog.d.ts.map +1 -1
  4. package/dist/AuditLog.js +6 -3
  5. package/dist/AuditLog.js.map +1 -1
  6. package/dist/AuthConfig.d.ts +51 -0
  7. package/dist/AuthConfig.d.ts.map +1 -0
  8. package/dist/AuthConfig.js +56 -0
  9. package/dist/AuthConfig.js.map +1 -0
  10. package/dist/AuthFlow.d.ts +295 -35
  11. package/dist/AuthFlow.d.ts.map +1 -1
  12. package/dist/AuthFlow.js +133 -6
  13. package/dist/AuthFlow.js.map +1 -1
  14. package/dist/AuthKernel.d.ts +3 -0
  15. package/dist/AuthKernel.d.ts.map +1 -0
  16. package/dist/AuthKernel.js +9 -0
  17. package/dist/AuthKernel.js.map +1 -0
  18. package/dist/Challenge.d.ts +22 -3
  19. package/dist/Challenge.d.ts.map +1 -1
  20. package/dist/Challenge.js +160 -1
  21. package/dist/Challenge.js.map +1 -1
  22. package/dist/Client.d.ts +36 -0
  23. package/dist/Client.d.ts.map +1 -0
  24. package/dist/Client.js +55 -0
  25. package/dist/Client.js.map +1 -0
  26. package/dist/Crypto.d.ts +9 -1
  27. package/dist/Crypto.d.ts.map +1 -1
  28. package/dist/Crypto.js +65 -1
  29. package/dist/Crypto.js.map +1 -1
  30. package/dist/D1Kysely.d.ts +43 -0
  31. package/dist/D1Kysely.d.ts.map +1 -0
  32. package/dist/D1Kysely.js +78 -0
  33. package/dist/D1Kysely.js.map +1 -0
  34. package/dist/EffectQbSqliteStorage.d.ts +183 -0
  35. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  36. package/dist/EffectQbSqliteStorage.js +446 -0
  37. package/dist/EffectQbSqliteStorage.js.map +1 -0
  38. package/dist/EmailOtp.d.ts +117 -0
  39. package/dist/EmailOtp.d.ts.map +1 -0
  40. package/dist/EmailOtp.js +279 -0
  41. package/dist/EmailOtp.js.map +1 -0
  42. package/dist/EmailVerification.d.ts +121 -0
  43. package/dist/EmailVerification.d.ts.map +1 -0
  44. package/dist/EmailVerification.js +201 -0
  45. package/dist/EmailVerification.js.map +1 -0
  46. package/dist/HttpApi/Api.d.ts +175 -0
  47. package/dist/HttpApi/Api.d.ts.map +1 -0
  48. package/dist/HttpApi/Api.js +340 -0
  49. package/dist/HttpApi/Api.js.map +1 -0
  50. package/dist/HttpApi/Endpoints.d.ts +92 -0
  51. package/dist/HttpApi/Endpoints.d.ts.map +1 -0
  52. package/dist/HttpApi/Endpoints.js +48 -0
  53. package/dist/HttpApi/Endpoints.js.map +1 -0
  54. package/dist/HttpApi/Errors.d.ts +82 -0
  55. package/dist/HttpApi/Errors.d.ts.map +1 -0
  56. package/dist/HttpApi/Errors.js +184 -0
  57. package/dist/HttpApi/Errors.js.map +1 -0
  58. package/dist/HttpApi/Schemas.d.ts +86 -0
  59. package/dist/HttpApi/Schemas.d.ts.map +1 -0
  60. package/dist/HttpApi/Schemas.js +63 -0
  61. package/dist/HttpApi/Schemas.js.map +1 -0
  62. package/dist/HttpApi/Security.d.ts +147 -0
  63. package/dist/HttpApi/Security.d.ts.map +1 -0
  64. package/dist/HttpApi/Security.js +439 -0
  65. package/dist/HttpApi/Security.js.map +1 -0
  66. package/dist/HttpApi/Transport.d.ts +31 -0
  67. package/dist/HttpApi/Transport.d.ts.map +1 -0
  68. package/dist/HttpApi/Transport.js +169 -0
  69. package/dist/HttpApi/Transport.js.map +1 -0
  70. package/dist/HttpApi/index.d.ts +8 -0
  71. package/dist/HttpApi/index.d.ts.map +1 -0
  72. package/dist/HttpApi/index.js +7 -0
  73. package/dist/HttpApi/index.js.map +1 -0
  74. package/dist/HttpApi.d.ts +2 -0
  75. package/dist/HttpApi.d.ts.map +1 -0
  76. package/dist/HttpApi.js +2 -0
  77. package/dist/HttpApi.js.map +1 -0
  78. package/dist/Identifiers.d.ts.map +1 -1
  79. package/dist/Identifiers.js.map +1 -1
  80. package/dist/Internal.d.ts +7 -0
  81. package/dist/Internal.d.ts.map +1 -0
  82. package/dist/Internal.js +12 -0
  83. package/dist/Internal.js.map +1 -0
  84. package/dist/KyselyStorage.d.ts +67 -0
  85. package/dist/KyselyStorage.d.ts.map +1 -0
  86. package/dist/KyselyStorage.js +366 -0
  87. package/dist/KyselyStorage.js.map +1 -0
  88. package/dist/Mailer.d.ts +116 -0
  89. package/dist/Mailer.d.ts.map +1 -0
  90. package/dist/Mailer.js +101 -0
  91. package/dist/Mailer.js.map +1 -0
  92. package/dist/Password.d.ts +107 -0
  93. package/dist/Password.d.ts.map +1 -0
  94. package/dist/Password.js +252 -0
  95. package/dist/Password.js.map +1 -0
  96. package/dist/Policy.d.ts +7 -4
  97. package/dist/Policy.d.ts.map +1 -1
  98. package/dist/Policy.js +28 -5
  99. package/dist/Policy.js.map +1 -1
  100. package/dist/Privacy.d.ts +18 -0
  101. package/dist/Privacy.d.ts.map +1 -1
  102. package/dist/Privacy.js +63 -3
  103. package/dist/Privacy.js.map +1 -1
  104. package/dist/RateLimiter.d.ts +104 -0
  105. package/dist/RateLimiter.d.ts.map +1 -0
  106. package/dist/RateLimiter.js +118 -0
  107. package/dist/RateLimiter.js.map +1 -0
  108. package/dist/Sessions.d.ts +85 -11
  109. package/dist/Sessions.d.ts.map +1 -1
  110. package/dist/Sessions.js +424 -1
  111. package/dist/Sessions.js.map +1 -1
  112. package/dist/Storage.d.ts +162 -0
  113. package/dist/Storage.d.ts.map +1 -0
  114. package/dist/Storage.js +27 -0
  115. package/dist/Storage.js.map +1 -0
  116. package/dist/StorageMigrations.d.ts +8 -0
  117. package/dist/StorageMigrations.d.ts.map +1 -0
  118. package/dist/StorageMigrations.js +68 -0
  119. package/dist/StorageMigrations.js.map +1 -0
  120. package/dist/Testing.d.ts +9 -1
  121. package/dist/Testing.d.ts.map +1 -1
  122. package/dist/Testing.js +30 -2
  123. package/dist/Testing.js.map +1 -1
  124. package/dist/WaitUntil.d.ts +3 -0
  125. package/dist/WaitUntil.d.ts.map +1 -1
  126. package/dist/WaitUntil.js +6 -3
  127. package/dist/WaitUntil.js.map +1 -1
  128. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
  129. package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  130. package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
  131. package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
  132. package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
  133. package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
  134. package/dist/cloudflare/RateLimitDurableObject.js +51 -0
  135. package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
  136. package/dist/index.d.ts +7 -0
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +7 -0
  139. package/dist/index.js.map +1 -1
  140. package/dist/internal/RateLimitDurableObject.d.ts +32 -0
  141. package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
  142. package/dist/internal/RateLimitDurableObject.js +80 -0
  143. package/dist/internal/RateLimitDurableObject.js.map +1 -0
  144. package/migrations/0001_auth_storage.sql +32 -0
  145. package/migrations/0002_auth_password.sql +25 -0
  146. package/package.json +97 -16
  147. package/LICENSE +0 -21
package/dist/Sessions.js CHANGED
@@ -1,4 +1,14 @@
1
- import { Context, Data, Effect } from "effect";
1
+ import { Context, Data, Duration, Effect, Layer, Option } from "effect";
2
+ import { AuthSecrets, AuthSessionCookieConfig, AuthSessionsConfig, } from "./AuthConfig.js";
3
+ import { Crypto } from "./Crypto.js";
4
+ import { SessionId, SessionToken, UnixMillis } from "./Identifiers.js";
5
+ import { addMillis, currentUnixMillis, timingSafeEqualString, } from "./Internal.js";
6
+ import { SessionStore } from "./Storage.js";
7
+ export const defaultSessionTtlPolicy = {
8
+ idleTtl: Duration.days(30),
9
+ absoluteTtl: Duration.days(90),
10
+ refreshAfter: Duration.days(1),
11
+ };
2
12
  export class SessionCreateError extends Data.TaggedError("SessionCreateError") {
3
13
  }
4
14
  export class SessionValidateError extends Data.TaggedError("SessionValidateError") {
@@ -7,14 +17,427 @@ export class SessionRefreshError extends Data.TaggedError("SessionRefreshError")
7
17
  }
8
18
  export class SessionRotateError extends Data.TaggedError("SessionRotateError") {
9
19
  }
20
+ export class SessionUpdateClaimsError extends Data.TaggedError("SessionUpdateClaimsError") {
21
+ }
10
22
  export class SessionRevokeError extends Data.TaggedError("SessionRevokeError") {
11
23
  }
12
24
  export class Sessions extends Context.Service()("auth/Sessions") {
13
25
  }
26
+ (function (Sessions) {
27
+ Sessions.make = (service) => Sessions.of(service);
28
+ })(Sessions || (Sessions = {}));
29
+ const resolveTtl = (ttl) => ttl ?? defaultSessionTtlPolicy;
30
+ const ttlMillis = (ttl) => Duration.toMillis(ttl);
31
+ const sessionExpiresAt = (now, authTime, ttl) => UnixMillis(Math.min(Number(addMillis(now, ttlMillis(ttl.idleTtl))), Number(addMillis(authTime, ttlMillis(ttl.absoluteTtl)))));
32
+ const parseSessionToken = (token) => {
33
+ const raw = String(token);
34
+ const separator = raw.indexOf(".");
35
+ if (separator <= 0 || separator === raw.length - 1) {
36
+ return undefined;
37
+ }
38
+ return {
39
+ sessionId: raw.slice(0, separator),
40
+ secret: raw.slice(separator + 1),
41
+ };
42
+ };
43
+ const makeSessionToken = (sessionId, secret) => `${sessionId}.${secret}`;
44
+ const hashSessionSecret = (crypto, key, secret) => crypto.hmacSha256({ key, data: secret });
45
+ const isExpired = (row, now, ttl) => row.revokedAt !== undefined ||
46
+ Number(row.expiresAt) <= Number(now) ||
47
+ Number(addMillis(row.authTime, ttlMillis(ttl.absoluteTtl))) <= Number(now);
48
+ const shouldRefresh = (row, now, ttl) => row.lastSeenAt === undefined ||
49
+ Number(now) - Number(row.lastSeenAt) >= ttlMillis(ttl.refreshAfter) ||
50
+ Number(row.expiresAt) - Number(now) <= ttlMillis(ttl.refreshAfter);
51
+ const issuedFromRow = (row, token) => ({
52
+ sessionId: row.id,
53
+ userId: row.userId,
54
+ token,
55
+ authTime: row.authTime,
56
+ expiresAt: row.expiresAt,
57
+ aal: row.aal,
58
+ amr: row.amr,
59
+ claims: row.claims,
60
+ });
61
+ const currentFromRow = (row) => ({
62
+ sessionId: row.id,
63
+ userId: row.userId,
64
+ authTime: row.authTime,
65
+ expiresAt: row.expiresAt,
66
+ aal: row.aal,
67
+ amr: row.amr,
68
+ claims: row.claims,
69
+ });
70
+ const validatedFromRow = (row, token) => ({
71
+ issued: issuedFromRow(row, token),
72
+ currentSession: currentFromRow(row),
73
+ actor: {
74
+ userId: row.userId,
75
+ sessionId: row.id,
76
+ },
77
+ });
78
+ export const makeSessions = (dependencies) => {
79
+ const ttl = resolveTtl(dependencies.ttl);
80
+ const sessionIdBytes = dependencies.sessionIdBytes ?? 16;
81
+ const sessionSecretBytes = dependencies.sessionSecretBytes ?? 32;
82
+ return Sessions.make({
83
+ create: Effect.fn("auth.session.create")(function* (input) {
84
+ yield* Effect.annotateCurrentSpan({
85
+ "auth.method": input.method,
86
+ "auth.aal": input.aal,
87
+ "auth.amr_count": input.amr.length,
88
+ });
89
+ const now = input.now ?? (yield* currentUnixMillis);
90
+ const inputTtl = resolveTtl(input.ttl ?? ttl);
91
+ const sessionId = SessionId(yield* dependencies.crypto.randomToken(sessionIdBytes).pipe(Effect.mapError((cause) => new SessionCreateError({
92
+ message: "Failed to generate session id",
93
+ cause,
94
+ }))));
95
+ const secret = yield* dependencies.crypto
96
+ .randomToken(sessionSecretBytes)
97
+ .pipe(Effect.mapError((cause) => new SessionCreateError({
98
+ message: "Failed to generate session secret",
99
+ cause,
100
+ })));
101
+ const token = makeSessionToken(sessionId, secret);
102
+ const secretHash = yield* hashSessionSecret(dependencies.crypto, dependencies.secret, secret).pipe(Effect.mapError((cause) => new SessionCreateError({
103
+ message: "Failed to hash session secret",
104
+ cause,
105
+ })));
106
+ const expiresAt = sessionExpiresAt(now, now, inputTtl);
107
+ yield* dependencies.sessionStore
108
+ .insert({
109
+ id: sessionId,
110
+ userId: input.userId,
111
+ secretHash,
112
+ createdAt: now,
113
+ expiresAt,
114
+ authTime: now,
115
+ aal: input.aal,
116
+ amr: input.amr,
117
+ claims: input.claims,
118
+ metadata: input.metadata,
119
+ })
120
+ .pipe(Effect.mapError((cause) => new SessionCreateError({
121
+ message: "Failed to store session",
122
+ cause,
123
+ })));
124
+ return {
125
+ sessionId,
126
+ userId: input.userId,
127
+ token,
128
+ authTime: now,
129
+ expiresAt,
130
+ aal: input.aal,
131
+ amr: input.amr,
132
+ claims: input.claims,
133
+ };
134
+ }),
135
+ validate: Effect.fn("auth.session.validate")(function* (token) {
136
+ const parsed = parseSessionToken(token);
137
+ if (parsed === undefined) {
138
+ yield* Effect.annotateCurrentSpan("auth.session.token_format", "invalid");
139
+ return yield* new SessionValidateError({
140
+ message: "Invalid session token",
141
+ });
142
+ }
143
+ yield* Effect.annotateCurrentSpan("auth.session.token_format", "opaque");
144
+ const now = yield* currentUnixMillis;
145
+ const rowOption = yield* dependencies.sessionStore
146
+ .findById(parsed.sessionId)
147
+ .pipe(Effect.mapError((cause) => new SessionValidateError({
148
+ message: "Failed to load session",
149
+ cause,
150
+ })));
151
+ if (Option.isNone(rowOption)) {
152
+ return yield* new SessionValidateError({
153
+ message: "Session not found",
154
+ });
155
+ }
156
+ const row = rowOption.value;
157
+ if (isExpired(row, now, ttl)) {
158
+ return yield* new SessionValidateError({ message: "Session expired" });
159
+ }
160
+ const secretHash = yield* hashSessionSecret(dependencies.crypto, dependencies.secret, parsed.secret).pipe(Effect.mapError((cause) => new SessionValidateError({
161
+ message: "Failed to hash session secret",
162
+ cause,
163
+ })));
164
+ const secretMatches = yield* timingSafeEqualString(dependencies.crypto, secretHash, row.secretHash).pipe(Effect.mapError((cause) => new SessionValidateError({
165
+ message: "Failed to compare session secret",
166
+ cause,
167
+ })));
168
+ if (!secretMatches) {
169
+ return yield* new SessionValidateError({
170
+ message: "Invalid session token",
171
+ });
172
+ }
173
+ return validatedFromRow(row, token);
174
+ }),
175
+ refresh: Effect.fn("auth.session.refresh")(function* (token) {
176
+ const parsed = parseSessionToken(token);
177
+ if (parsed === undefined) {
178
+ yield* Effect.annotateCurrentSpan("auth.session.token_format", "invalid");
179
+ return yield* new SessionRefreshError({
180
+ message: "Invalid session token",
181
+ });
182
+ }
183
+ yield* Effect.annotateCurrentSpan("auth.session.token_format", "opaque");
184
+ const now = yield* currentUnixMillis;
185
+ const rowOption = yield* dependencies.sessionStore
186
+ .findById(parsed.sessionId)
187
+ .pipe(Effect.mapError((cause) => new SessionRefreshError({
188
+ message: "Failed to load session",
189
+ cause,
190
+ })));
191
+ if (Option.isNone(rowOption)) {
192
+ return yield* new SessionRefreshError({ message: "Session not found" });
193
+ }
194
+ const row = rowOption.value;
195
+ if (isExpired(row, now, ttl)) {
196
+ return yield* new SessionRefreshError({ message: "Session expired" });
197
+ }
198
+ const secretHash = yield* hashSessionSecret(dependencies.crypto, dependencies.secret, parsed.secret).pipe(Effect.mapError((cause) => new SessionRefreshError({
199
+ message: "Failed to hash session secret",
200
+ cause,
201
+ })));
202
+ const secretMatches = yield* timingSafeEqualString(dependencies.crypto, secretHash, row.secretHash).pipe(Effect.mapError((cause) => new SessionRefreshError({
203
+ message: "Failed to compare session secret",
204
+ cause,
205
+ })));
206
+ if (!secretMatches) {
207
+ return yield* new SessionRefreshError({
208
+ message: "Invalid session token",
209
+ });
210
+ }
211
+ if (!shouldRefresh(row, now, ttl)) {
212
+ yield* Effect.annotateCurrentSpan("auth.session.refreshed", false);
213
+ return issuedFromRow(row, token);
214
+ }
215
+ const refreshed = yield* dependencies.sessionStore
216
+ .refresh({
217
+ sessionId: row.id,
218
+ expiresAt: sessionExpiresAt(now, row.authTime, ttl),
219
+ lastSeenAt: now,
220
+ })
221
+ .pipe(Effect.mapError((cause) => new SessionRefreshError({
222
+ message: "Failed to refresh session",
223
+ cause,
224
+ })));
225
+ if (Option.isNone(refreshed)) {
226
+ return yield* new SessionRefreshError({ message: "Session not found" });
227
+ }
228
+ yield* Effect.annotateCurrentSpan("auth.session.refreshed", true);
229
+ return issuedFromRow(refreshed.value, token);
230
+ }),
231
+ rotate: Effect.fn("auth.session.rotate")(function* (input) {
232
+ const now = yield* currentUnixMillis;
233
+ const secret = yield* dependencies.crypto
234
+ .randomToken(sessionSecretBytes)
235
+ .pipe(Effect.mapError((cause) => new SessionRotateError({
236
+ message: "Failed to generate session secret",
237
+ cause,
238
+ })));
239
+ const secretHash = yield* hashSessionSecret(dependencies.crypto, dependencies.secret, secret).pipe(Effect.mapError((cause) => new SessionRotateError({
240
+ message: "Failed to hash session secret",
241
+ cause,
242
+ })));
243
+ const rotated = yield* dependencies.sessionStore
244
+ .rotate({
245
+ sessionId: input.sessionId,
246
+ secretHash,
247
+ rotatedAt: now,
248
+ })
249
+ .pipe(Effect.mapError((cause) => new SessionRotateError({
250
+ message: "Failed to rotate session",
251
+ cause,
252
+ })));
253
+ if (Option.isNone(rotated)) {
254
+ return yield* new SessionRotateError({ message: "Session not found" });
255
+ }
256
+ return issuedFromRow(rotated.value, makeSessionToken(input.sessionId, secret));
257
+ }),
258
+ updateClaims: Effect.fn("auth.session.update_claims")(function* (input) {
259
+ yield* Effect.annotateCurrentSpan("auth.session.claims_updated", true);
260
+ const now = yield* currentUnixMillis;
261
+ const rowOption = yield* dependencies.sessionStore
262
+ .findById(input.sessionId)
263
+ .pipe(Effect.mapError((cause) => new SessionUpdateClaimsError({
264
+ message: "Failed to load session",
265
+ cause,
266
+ })));
267
+ if (Option.isNone(rowOption)) {
268
+ return yield* new SessionUpdateClaimsError({
269
+ message: "Session not found",
270
+ });
271
+ }
272
+ if (isExpired(rowOption.value, now, ttl)) {
273
+ return yield* new SessionUpdateClaimsError({
274
+ message: "Session expired",
275
+ });
276
+ }
277
+ const updated = yield* dependencies.sessionStore
278
+ .updateClaims({
279
+ sessionId: input.sessionId,
280
+ claims: input.claims,
281
+ })
282
+ .pipe(Effect.mapError((cause) => new SessionUpdateClaimsError({
283
+ message: "Failed to update session claims",
284
+ cause,
285
+ })));
286
+ if (Option.isNone(updated)) {
287
+ return yield* new SessionUpdateClaimsError({
288
+ message: "Session not found",
289
+ });
290
+ }
291
+ return currentFromRow(updated.value);
292
+ }),
293
+ revoke: Effect.fn("auth.session.revoke")(function* (input) {
294
+ const now = yield* currentUnixMillis;
295
+ yield* dependencies.sessionStore
296
+ .revoke({
297
+ sessionId: input.sessionId,
298
+ revokedAt: now,
299
+ reason: input.reason,
300
+ })
301
+ .pipe(Effect.mapError((cause) => new SessionRevokeError({
302
+ message: "Failed to revoke session",
303
+ cause,
304
+ })));
305
+ }),
306
+ revokeAllForUser: Effect.fn("auth.session.revoke_all_for_user")(function* (userId) {
307
+ const now = yield* currentUnixMillis;
308
+ yield* dependencies.sessionStore
309
+ .revokeAllForUser({
310
+ userId,
311
+ revokedAt: now,
312
+ })
313
+ .pipe(Effect.mapError((cause) => new SessionRevokeError({
314
+ message: "Failed to revoke user sessions",
315
+ cause,
316
+ })));
317
+ }),
318
+ });
319
+ };
320
+ export function SessionsLive(options) {
321
+ return Layer.effect(Sessions)(Effect.gen(function* () {
322
+ const crypto = yield* Crypto;
323
+ const sessionStore = yield* SessionStore;
324
+ const resolvedOptions = options ??
325
+ {
326
+ ...(yield* AuthSessionsConfig),
327
+ secret: (yield* AuthSecrets).session,
328
+ };
329
+ return makeSessions({
330
+ ...resolvedOptions,
331
+ crypto,
332
+ sessionStore,
333
+ });
334
+ }));
335
+ }
14
336
  export class SessionCookie extends Context.Service()("auth/SessionCookie") {
15
337
  }
338
+ (function (SessionCookie) {
339
+ SessionCookie.make = (service) => SessionCookie.of(service);
340
+ })(SessionCookie || (SessionCookie = {}));
341
+ export const defaultSessionCookieOptions = {
342
+ name: "__Host-session",
343
+ secure: true,
344
+ httpOnly: true,
345
+ sameSite: "lax",
346
+ path: "/",
347
+ };
348
+ const resolveSessionCookieOptions = (options = {}) => {
349
+ const resolved = {
350
+ ...defaultSessionCookieOptions,
351
+ ...options,
352
+ };
353
+ if (resolved.name.startsWith("__Host-")) {
354
+ return {
355
+ ...resolved,
356
+ secure: true,
357
+ path: "/",
358
+ domain: undefined,
359
+ };
360
+ }
361
+ return resolved;
362
+ };
363
+ const sameSiteHeaderValue = (sameSite) => {
364
+ switch (sameSite) {
365
+ case "strict": {
366
+ return "Strict";
367
+ }
368
+ case "none": {
369
+ return "None";
370
+ }
371
+ case "lax": {
372
+ return "Lax";
373
+ }
374
+ }
375
+ };
376
+ const appendCookieAttributes = (parts, options) => {
377
+ if (options.httpOnly) {
378
+ parts.push("HttpOnly");
379
+ }
380
+ if (options.secure) {
381
+ parts.push("Secure");
382
+ }
383
+ parts.push(`SameSite=${sameSiteHeaderValue(options.sameSite)}`);
384
+ parts.push(`Path=${options.path}`);
385
+ if (options.domain !== undefined) {
386
+ parts.push(`Domain=${options.domain}`);
387
+ }
388
+ return parts;
389
+ };
390
+ const serializeSessionCookie = (options, value, expiresAt) => {
391
+ const parts = [`${options.name}=${encodeURIComponent(value)}`];
392
+ if (expiresAt !== undefined) {
393
+ parts.push(`Expires=${new Date(Number(expiresAt)).toUTCString()}`);
394
+ }
395
+ return appendCookieAttributes(parts, options).join("; ");
396
+ };
397
+ const serializeClearSessionCookie = (options) => appendCookieAttributes([`${options.name}=`, "Max-Age=0", "Expires=Thu, 01 Jan 1970 00:00:00 GMT"], options).join("; ");
398
+ const parseCookieHeader = (header, name) => {
399
+ if (header === null) {
400
+ return Option.none();
401
+ }
402
+ for (const part of header.split(";")) {
403
+ const trimmed = part.trim();
404
+ const separator = trimmed.indexOf("=");
405
+ if (separator <= 0) {
406
+ continue;
407
+ }
408
+ if (trimmed.slice(0, separator) !== name) {
409
+ continue;
410
+ }
411
+ try {
412
+ // decodeURIComponent throws URIError for malformed percent-encoding; treat that cookie as absent.
413
+ return Option.some(SessionToken(decodeURIComponent(trimmed.slice(separator + 1))));
414
+ }
415
+ catch {
416
+ return Option.none();
417
+ }
418
+ }
419
+ return Option.none();
420
+ };
421
+ export const makeSessionCookie = (options) => {
422
+ const resolved = resolveSessionCookieOptions(options);
423
+ return SessionCookie.make({
424
+ read: Effect.fn("auth.session_cookie.read")((request) => Effect.succeed(parseCookieHeader(request.headers.get("Cookie"), resolved.name))),
425
+ commit: Effect.fn("auth.session_cookie.commit")((issued) => Effect.succeed(serializeSessionCookie(resolved, issued.token, issued.expiresAt))),
426
+ clear: Effect.fn("auth.session_cookie.clear")(() => Effect.succeed(serializeClearSessionCookie(resolved)))(),
427
+ });
428
+ };
429
+ export const SessionCookieLive = (options) => Layer.effect(SessionCookie)(Effect.gen(function* () {
430
+ const resolvedOptions = options ?? (yield* AuthSessionCookieConfig);
431
+ return makeSessionCookie(resolvedOptions);
432
+ }));
16
433
  export class CurrentSession extends Context.Service()("auth/CurrentSession") {
17
434
  }
435
+ (function (CurrentSession) {
436
+ CurrentSession.make = (service) => CurrentSession.of(service);
437
+ })(CurrentSession || (CurrentSession = {}));
18
438
  export class CurrentActor extends Context.Service()("auth/CurrentActor") {
19
439
  }
440
+ (function (CurrentActor) {
441
+ CurrentActor.make = (service) => CurrentActor.of(service);
442
+ })(CurrentActor || (CurrentActor = {}));
20
443
  //# sourceMappingURL=Sessions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sessions.js","sourceRoot":"","sources":["../src/Sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AA0E9C,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAEL,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAG/E;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAG7E;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAkBL,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAA6B,CAAC,eAAe,CAAC;CAAG;AAQ9F,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAAuC,CAAC,oBAAoB,CAAC;CAAG;AAElH,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAAuC,CAAC,qBAAqB,CAAC;CAAG;AAEpH,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,OAAO,EAAmC,CAAC,mBAAmB,CAAC;CAAG"}
1
+ {"version":3,"file":"Sessions.js","sourceRoot":"","sources":["../src/Sessions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxE,OAAO,EACL,WAAW,EACX,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEvE,OAAO,EACL,SAAS,EACT,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA6B5C,MAAM,CAAC,MAAM,uBAAuB,GAAqB;IACvD,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;CAC/B,CAAC;AA6DF,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAEL,MAAM,OAAO,oBAAqB,SAAQ,IAAI,CAAC,WAAW,CACxD,sBAAsB,CAItB;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,IAAI,CAAC,WAAW,CACvD,qBAAqB,CAIrB;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAEL,MAAM,OAAO,wBAAyB,SAAQ,IAAI,CAAC,WAAW,CAC5D,0BAA0B,CAI1B;CAAG;AAEL,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAG3E;CAAG;AAkCL,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAA6B,CACxE,eAAe,CAChB;CAAG;AAEJ,WAAiB,QAAQ;IACV,aAAI,GAAG,CAAC,OAAwB,EAAmB,EAAE,CAChE,QAAQ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,EAHgB,QAAQ,KAAR,QAAQ,QAGxB;AAmBD,MAAM,UAAU,GAAG,CAAC,GAAsB,EAAoB,EAAE,CAC9D,GAAG,IAAI,uBAAuB,CAAC;AAEjC,MAAM,SAAS,GAAG,CAAC,GAAsB,EAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAE7E,MAAM,gBAAgB,GAAG,CACvB,GAAe,EACf,QAAoB,EACpB,GAAqB,EACT,EAAE,CACd,UAAU,CACR,IAAI,CAAC,GAAG,CACN,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAC9C,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CACxD,CACF,CAAC;AAEJ,MAAM,iBAAiB,GAAG,CACxB,KAAmB,EACa,EAAE;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEnC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAc;QAC/C,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;KACjC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,SAAoB,EAAE,MAAc,EAAgB,EAAE,CAC9E,GAAG,SAAS,IAAI,MAAM,EAAkB,CAAC;AAE3C,MAAM,iBAAiB,GAAG,CACxB,MAAqB,EACrB,GAAc,EACd,MAAc,EACd,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;AAE9C,MAAM,SAAS,GAAG,CAChB,GAAe,EACf,GAAe,EACf,GAAqB,EACZ,EAAE,CACX,GAAG,CAAC,SAAS,KAAK,SAAS;IAC3B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IACpC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;AAE7E,MAAM,aAAa,GAAG,CACpB,GAAe,EACf,GAAe,EACf,GAAqB,EACZ,EAAE,CACX,GAAG,CAAC,UAAU,KAAK,SAAS;IAC5B,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC;IACnE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAErE,MAAM,aAAa,GAAG,CACpB,GAAe,EACf,KAAmB,EACJ,EAAE,CAAC,CAAC;IACnB,SAAS,EAAE,GAAG,CAAC,EAAE;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,KAAK;IACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;IACtB,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,MAAM,EAAE,GAAG,CAAC,MAAM;CACnB,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,CAAC,GAAe,EAAuB,EAAE,CAAC,CAAC;IAChE,SAAS,EAAE,GAAG,CAAC,EAAE;IACjB,MAAM,EAAE,GAAG,CAAC,MAAM;IAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;IACtB,SAAS,EAAE,GAAG,CAAC,SAAS;IACxB,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,MAAM,EAAE,GAAG,CAAC,MAAM;CACnB,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CACvB,GAAe,EACf,KAAmB,EACD,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC;IACnC,KAAK,EAAE;QACL,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,EAAE;KAClB;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,YAAkC,EACjB,EAAE;IACnB,MAAM,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,IAAI,EAAE,CAAC;IACzD,MAAM,kBAAkB,GAAG,YAAY,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAEjE,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAChD,KAAyB;YAEzB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC;gBAChC,aAAa,EAAE,KAAK,CAAC,MAAM;gBAC3B,UAAU,EAAE,KAAK,CAAC,GAAG;gBACrB,gBAAgB,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM;aACnC,CAAC,CAAC;YAEH,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,SAAS,CACzB,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,+BAA+B;gBACxC,KAAK;aACN,CAAC,CACL,CACF,CACF,CAAC;YACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM;iBACtC,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,mCAAmC;gBAC5C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACJ,MAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CACzC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,EACnB,MAAM,CACP,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,+BAA+B;gBACxC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACF,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAEvD,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC7B,MAAM,CAAC;gBACN,EAAE,EAAE,SAAS;gBACb,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,UAAU;gBACV,SAAS,EAAE,GAAG;gBACd,SAAS;gBACT,QAAQ,EAAE,GAAG;gBACb,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,yBAAyB;gBAClC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,OAAO;gBACL,SAAS;gBACT,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,KAAK;gBACL,QAAQ,EAAE,GAAG;gBACb,SAAS;gBACT,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;QACJ,CAAC,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EACpD,KAAmB;YAEnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAC/B,2BAA2B,EAC3B,SAAS,CACV,CAAC;gBACF,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,uBAAuB;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;YAEzE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC/C,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;iBAC1B,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,oBAAoB,CAAC;gBACvB,OAAO,EAAE,wBAAwB;gBACjC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,mBAAmB;iBAC7B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;YAE5B,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CACzC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,EACnB,MAAM,CAAC,MAAM,CACd,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,oBAAoB,CAAC;gBACvB,OAAO,EAAE,+BAA+B;gBACxC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACF,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAChD,YAAY,CAAC,MAAM,EACnB,UAAU,EACV,GAAG,CAAC,UAAU,CACf,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,oBAAoB,CAAC;gBACvB,OAAO,EAAE,kCAAkC;gBAC3C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC;oBACrC,OAAO,EAAE,uBAAuB;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,OAAO,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAmB;YACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAExC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAC/B,2BAA2B,EAC3B,SAAS,CACV,CAAC;gBACF,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC;oBACpC,OAAO,EAAE,uBAAuB;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;YAEzE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC/C,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;iBAC1B,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,wBAAwB;gBACjC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;YAE5B,IAAI,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CACzC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,EACnB,MAAM,CAAC,MAAM,CACd,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,+BAA+B;gBACxC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACF,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAChD,YAAY,CAAC,MAAM,EACnB,UAAU,EACV,GAAG,CAAC,UAAU,CACf,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,kCAAkC;gBAC3C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEF,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC;oBACpC,OAAO,EAAE,uBAAuB;iBACjC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;gBACnE,OAAO,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC/C,OAAO,CAAC;gBACP,SAAS,EAAE,GAAG,CAAC,EAAE;gBACjB,SAAS,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC;gBACnD,UAAU,EAAE,GAAG;aAChB,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,mBAAmB,CAAC;gBACtB,OAAO,EAAE,2BAA2B;gBACpC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,mBAAmB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;YAElE,OAAO,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAChD,KAAyB;YAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM;iBACtC,WAAW,CAAC,kBAAkB,CAAC;iBAC/B,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,mCAAmC;gBAC5C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACJ,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,CACzC,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,MAAM,EACnB,MAAM,CACP,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,+BAA+B;gBACxC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YACF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC7C,MAAM,CAAC;gBACN,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,UAAU;gBACV,SAAS,EAAE,GAAG;aACf,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,0BAA0B;gBACnC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC,CAAC,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,OAAO,aAAa,CAClB,OAAO,CAAC,KAAK,EACb,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAC1C,CAAC;QACJ,CAAC,CAAC;QACF,YAAY,EAAE,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAC7D,KAA+B;YAE/B,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;YAEvE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC/C,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;iBACzB,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,wBAAwB,CAAC;gBAC3B,OAAO,EAAE,wBAAwB;gBACjC,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,KAAK,CAAC,CAAC,IAAI,wBAAwB,CAAC;oBACzC,OAAO,EAAE,mBAAmB;iBAC7B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAC,CAAC,IAAI,wBAAwB,CAAC;oBACzC,OAAO,EAAE,iBAAiB;iBAC3B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC7C,YAAY,CAAC;gBACZ,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,wBAAwB,CAAC;gBAC3B,OAAO,EAAE,iCAAiC;gBAC1C,KAAK;aACN,CAAC,CACL,CACF,CAAC;YAEJ,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,KAAK,CAAC,CAAC,IAAI,wBAAwB,CAAC;oBACzC,OAAO,EAAE,mBAAmB;iBAC7B,CAAC,CAAC;YACL,CAAC;YAED,OAAO,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAChD,KAAyB;YAEzB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YAErC,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC7B,MAAM,CAAC;gBACN,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,GAAG;gBACd,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,0BAA0B;gBACnC,KAAK;aACN,CAAC,CACL,CACF,CAAC;QACN,CAAC,CAAC;QACF,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,kCAAkC,CAAC,CAAC,QAAQ,CAAC,EACvE,MAAc;YAEd,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;YAErC,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY;iBAC7B,gBAAgB,CAAC;gBAChB,MAAM;gBACN,SAAS,EAAE,GAAG;aACf,CAAC;iBACD,IAAI,CACH,MAAM,CAAC,QAAQ,CACb,CAAC,KAAK,EAAE,EAAE,CACR,IAAI,kBAAkB,CAAC;gBACrB,OAAO,EAAE,gCAAgC;gBACzC,KAAK;aACN,CAAC,CACL,CACF,CAAC;QACN,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC;AAUF,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAC3B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;QAC7B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;QACzC,MAAM,eAAe,GACnB,OAAO;YACN;gBACC,GAAG,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC;gBAC9B,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO;aACV,CAAC;QAE/B,OAAO,YAAY,CAAC;YAClB,GAAG,eAAe;YAClB,MAAM;YACN,YAAY;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAYD,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAG/C,CAAC,oBAAoB,CAAC;CAAG;AAE5B,WAAiB,aAAa;IACf,kBAAI,GAAG,CAAC,OAA6B,EAAwB,EAAE,CAC1E,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC,EAHgB,aAAa,KAAb,aAAa,QAG7B;AAsBD,MAAM,CAAC,MAAM,2BAA2B,GAAiC;IACvE,IAAI,EAAE,gBAAgB;IACtB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,QAAQ,EAAE,KAAK;IACf,IAAI,EAAE,GAAG;CACV,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAClC,UAAgC,EAAE,EACJ,EAAE;IAChC,MAAM,QAAQ,GAAG;QACf,GAAG,2BAA2B;QAC9B,GAAG,OAAO;KACX,CAAC;IAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,GAAG,QAAQ;YACX,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,GAAG;YACT,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAAC,QAA+B,EAAU,EAAE;IACtE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,KAAe,EACf,OAAqC,EAC3B,EAAE;IACZ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,YAAY,mBAAmB,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAEnC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAC7B,OAAqC,EACrC,KAAa,EACb,SAAsB,EACd,EAAE;IACV,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAClC,OAAqC,EAC7B,EAAE,CACV,sBAAsB,CACpB,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,EAAE,WAAW,EAAE,uCAAuC,CAAC,EAC1E,OAAO,CACR,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEf,MAAM,iBAAiB,GAAG,CACxB,MAAqB,EACrB,IAAY,EACsB,EAAE;IACpC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEvC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,SAAS;QACX,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,kGAAkG;YAClG,OAAO,MAAM,CAAC,IAAI,CAChB,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAC/D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAA8B,EACR,EAAE;IACxB,MAAM,QAAQ,GAAG,2BAA2B,CAAC,OAAO,CAAC,CAAC;IAEtD,OAAO,aAAa,CAAC,IAAI,CAAC;QACxB,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,OAAgB,EAAE,EAAE,CAC/D,MAAM,CAAC,OAAO,CACZ,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAChE,CACF;QACD,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,CAAC,MAAqB,EAAE,EAAE,CACxE,MAAM,CAAC,OAAO,CACZ,sBAAsB,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CACjE,CACF;QACD,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC,GAAG,EAAE,CACjD,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CACtD,EAAE;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAA8B,EAAE,EAAE,CAClE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,eAAe,GAAG,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,CAAC;IAEpE,OAAO,iBAAiB,CAAC,eAAe,CAAC,CAAC;AAC5C,CAAC,CAAC,CACH,CAAC;AAEJ,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,OAAO,EAGhD,CAAC,qBAAqB,CAAC;CAAG;AAE7B,WAAiB,cAAc;IAChB,mBAAI,GAAG,CAAC,OAA4B,EAAuB,EAAE,CACxE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC,EAHgB,cAAc,KAAd,cAAc,QAG9B;AAED,MAAM,OAAO,YAAa,SAAQ,OAAO,CAAC,OAAO,EAG9C,CAAC,mBAAmB,CAAC;CAAG;AAE3B,WAAiB,YAAY;IACd,iBAAI,GAAG,CAAC,OAA0B,EAAqB,EAAE,CACpE,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,EAHgB,YAAY,KAAZ,YAAY,QAG5B"}
@@ -0,0 +1,162 @@
1
+ import type { Effect } from "effect";
2
+ import { Context } from "effect";
3
+ import type * as Option from "effect/Option";
4
+ import type { ChallengeType } from "./Challenge.js";
5
+ import type { ChallengeId, CredentialId, Email, SessionId, UnixMillis, UserId } from "./Identifiers.js";
6
+ import type { AuthAssuranceLevel, AuthMethodReference, SessionClaims } from "./Sessions.js";
7
+ export type StorageEntity = "user" | "credential" | "session" | "verification" | (string & {});
8
+ export type StorageOperation = "find" | "insert" | "update" | "delete" | "consume" | (string & {});
9
+ declare const StorageError_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 & {
10
+ readonly _tag: "StorageError";
11
+ } & Readonly<A>;
12
+ export declare class StorageError extends StorageError_base<{
13
+ readonly entity: StorageEntity;
14
+ readonly operation: StorageOperation;
15
+ readonly message: string;
16
+ readonly cause?: unknown;
17
+ }> {
18
+ }
19
+ export declare namespace StorageError {
20
+ const fromUnknown: (entity: StorageEntity, operation: StorageOperation, cause: unknown, message?: string) => StorageError;
21
+ }
22
+ export interface NewUserRow {
23
+ readonly id: UserId;
24
+ readonly email: Email;
25
+ readonly emailVerified: boolean;
26
+ readonly createdAt: UnixMillis;
27
+ readonly updatedAt: UnixMillis;
28
+ readonly disabledAt?: UnixMillis;
29
+ readonly metadata?: Readonly<Record<string, unknown>>;
30
+ }
31
+ export interface UserRow extends NewUserRow {
32
+ }
33
+ export interface UserMarkEmailVerifiedInput {
34
+ readonly userId: UserId;
35
+ readonly updatedAt: UnixMillis;
36
+ }
37
+ export interface UserStoreService {
38
+ readonly findById: (id: UserId) => Effect.Effect<Option.Option<UserRow>, StorageError>;
39
+ readonly findByEmail: (email: Email) => Effect.Effect<Option.Option<UserRow>, StorageError>;
40
+ readonly insert: (row: NewUserRow) => Effect.Effect<void, StorageError>;
41
+ readonly markEmailVerified: (input: UserMarkEmailVerifiedInput) => Effect.Effect<Option.Option<UserRow>, StorageError>;
42
+ }
43
+ declare const UserStore_base: Context.ServiceClass<UserStore, "auth/UserStore", UserStoreService>;
44
+ export declare class UserStore extends UserStore_base {
45
+ }
46
+ export declare namespace UserStore {
47
+ const make: (service: UserStoreService) => UserStoreService;
48
+ }
49
+ export interface NewPasswordCredentialRow {
50
+ readonly id: CredentialId;
51
+ readonly userId: UserId;
52
+ readonly passwordHash: string;
53
+ readonly createdAt: UnixMillis;
54
+ readonly updatedAt: UnixMillis;
55
+ readonly revokedAt?: UnixMillis;
56
+ readonly metadata?: Readonly<Record<string, unknown>>;
57
+ }
58
+ export interface PasswordCredentialRow extends NewPasswordCredentialRow {
59
+ }
60
+ export interface CredentialStoreService {
61
+ readonly findPasswordByUserId: (userId: UserId) => Effect.Effect<Option.Option<PasswordCredentialRow>, StorageError>;
62
+ readonly insertPassword: (row: NewPasswordCredentialRow) => Effect.Effect<void, StorageError>;
63
+ }
64
+ declare const CredentialStore_base: Context.ServiceClass<CredentialStore, "auth/CredentialStore", CredentialStoreService>;
65
+ export declare class CredentialStore extends CredentialStore_base {
66
+ }
67
+ export declare namespace CredentialStore {
68
+ const make: (service: CredentialStoreService) => CredentialStoreService;
69
+ }
70
+ export interface NewSessionRow {
71
+ readonly id: SessionId;
72
+ readonly userId: UserId;
73
+ readonly secretHash: string;
74
+ readonly createdAt: UnixMillis;
75
+ readonly expiresAt: UnixMillis;
76
+ readonly authTime: UnixMillis;
77
+ readonly aal: AuthAssuranceLevel;
78
+ readonly amr: readonly AuthMethodReference[];
79
+ readonly claims?: SessionClaims;
80
+ readonly mfaVerifiedAt?: UnixMillis;
81
+ readonly metadata?: Readonly<Record<string, unknown>>;
82
+ }
83
+ export interface SessionRow extends NewSessionRow {
84
+ readonly revokedAt?: UnixMillis;
85
+ readonly lastSeenAt?: UnixMillis;
86
+ readonly rotatedAt?: UnixMillis;
87
+ }
88
+ export interface SessionRefreshStoreInput {
89
+ readonly sessionId: SessionId;
90
+ readonly expiresAt: UnixMillis;
91
+ readonly lastSeenAt?: UnixMillis;
92
+ }
93
+ export interface SessionRotateStoreInput {
94
+ readonly sessionId: SessionId;
95
+ readonly secretHash: string;
96
+ readonly rotatedAt: UnixMillis;
97
+ readonly expiresAt?: UnixMillis;
98
+ }
99
+ export interface SessionUpdateClaimsStoreInput {
100
+ readonly sessionId: SessionId;
101
+ readonly claims: SessionClaims;
102
+ }
103
+ export interface SessionRevokeStoreInput {
104
+ readonly sessionId: SessionId;
105
+ readonly revokedAt: UnixMillis;
106
+ readonly reason?: string;
107
+ }
108
+ export interface SessionRevokeAllForUserStoreInput {
109
+ readonly userId: UserId;
110
+ readonly revokedAt: UnixMillis;
111
+ readonly reason?: string;
112
+ }
113
+ export interface SessionStoreService {
114
+ readonly findById: (id: SessionId) => Effect.Effect<Option.Option<SessionRow>, StorageError>;
115
+ readonly insert: (row: NewSessionRow) => Effect.Effect<void, StorageError>;
116
+ readonly refresh: (input: SessionRefreshStoreInput) => Effect.Effect<Option.Option<SessionRow>, StorageError>;
117
+ readonly rotate: (input: SessionRotateStoreInput) => Effect.Effect<Option.Option<SessionRow>, StorageError>;
118
+ readonly updateClaims: (input: SessionUpdateClaimsStoreInput) => Effect.Effect<Option.Option<SessionRow>, StorageError>;
119
+ readonly revoke: (input: SessionRevokeStoreInput) => Effect.Effect<void, StorageError>;
120
+ readonly revokeAllForUser: (input: SessionRevokeAllForUserStoreInput) => Effect.Effect<void, StorageError>;
121
+ }
122
+ declare const SessionStore_base: Context.ServiceClass<SessionStore, "auth/SessionStore", SessionStoreService>;
123
+ export declare class SessionStore extends SessionStore_base {
124
+ }
125
+ export declare namespace SessionStore {
126
+ const make: (service: SessionStoreService) => SessionStoreService;
127
+ }
128
+ export interface NewVerificationRow {
129
+ readonly id: ChallengeId;
130
+ readonly type: ChallengeType;
131
+ readonly subject: string;
132
+ readonly secretHash?: string;
133
+ readonly createdAt: UnixMillis;
134
+ readonly expiresAt: UnixMillis;
135
+ readonly metadata?: Readonly<Record<string, unknown>>;
136
+ }
137
+ export interface VerificationRow extends NewVerificationRow {
138
+ readonly consumedAt?: UnixMillis;
139
+ }
140
+ export interface VerificationConsumeInput {
141
+ readonly id: ChallengeId;
142
+ readonly type?: ChallengeType;
143
+ readonly consumedAt: UnixMillis;
144
+ }
145
+ export interface VerificationDeleteExpiredInput {
146
+ readonly now: UnixMillis;
147
+ readonly limit?: number;
148
+ }
149
+ export interface VerificationStoreService {
150
+ readonly findById: (id: ChallengeId) => Effect.Effect<Option.Option<VerificationRow>, StorageError>;
151
+ readonly insert: (row: NewVerificationRow) => Effect.Effect<void, StorageError>;
152
+ readonly consume: (input: VerificationConsumeInput) => Effect.Effect<Option.Option<VerificationRow>, StorageError>;
153
+ readonly deleteExpired: (input: VerificationDeleteExpiredInput) => Effect.Effect<number, StorageError>;
154
+ }
155
+ declare const VerificationStore_base: Context.ServiceClass<VerificationStore, "auth/VerificationStore", VerificationStoreService>;
156
+ export declare class VerificationStore extends VerificationStore_base {
157
+ }
158
+ export declare namespace VerificationStore {
159
+ const make: (service: VerificationStoreService) => VerificationStoreService;
160
+ }
161
+ export {};
162
+ //# sourceMappingURL=Storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Storage.d.ts","sourceRoot":"","sources":["../src/Storage.ts"],"names":[],"mappings":"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"}