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

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 +186 -0
  34. package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
  35. package/dist/EffectQbSqliteStorage.js +439 -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,439 @@
1
+ import { Data, Effect, Layer, Option } from "effect";
2
+ import { Column, Executor, Query, Scalar, 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
+ const queryInsert = (table, values) => Query.insert(table, values);
77
+ const queryUpdate = (table, values) => Query.update(table, values);
78
+ const queryEq = (left, right) => Query.eq(left, right);
79
+ const queryGt = (left, right) => Query.gt(left, right);
80
+ const queryLte = (left, right) => Query.lte(left, right);
81
+ const queryIsNull = (value) => Query.isNull(value);
82
+ const queryIn = (value, first, ...rest) => Query.in(value, first, ...rest);
83
+ const executePlan = (executor, plan) => executor.execute(plan);
84
+ const omitUndefined = (record) => Object.fromEntries(Object.entries(record).filter(([, value]) => value !== undefined));
85
+ const sessionMetadataEnvelopeKey = "__effectAuthSession";
86
+ const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
87
+ const decodeSessionMetadata = (value) => {
88
+ const decoded = jsonDecode(value);
89
+ const envelope = isRecord(decoded)
90
+ ? decoded[sessionMetadataEnvelopeKey]
91
+ : undefined;
92
+ if (!isRecord(envelope) || envelope.version !== 1) {
93
+ return omitUndefined({
94
+ metadata: decoded,
95
+ });
96
+ }
97
+ return omitUndefined({
98
+ metadata: envelope.metadata,
99
+ claims: envelope.claims,
100
+ });
101
+ };
102
+ const encodeSessionMetadata = (row) => {
103
+ if (row.claims === undefined) {
104
+ return jsonEncode(row.metadata);
105
+ }
106
+ return jsonEncode({
107
+ [sessionMetadataEnvelopeKey]: omitUndefined({
108
+ version: 1,
109
+ metadata: row.metadata,
110
+ claims: row.claims,
111
+ }),
112
+ });
113
+ };
114
+ const decodeDefaultUserRow = (row) => omitUndefined({
115
+ id: UserId(row.id),
116
+ email: Email(row.email),
117
+ emailVerified: decodeBoolean(row.emailVerified),
118
+ createdAt: UnixMillis(Number(row.createdAt)),
119
+ updatedAt: UnixMillis(Number(row.updatedAt)),
120
+ disabledAt: optionalUnixMillis(row.disabledAt),
121
+ metadata: jsonDecode(row.metadata),
122
+ });
123
+ const decodeUserRow = (tables, row) => tables.user.decode === undefined
124
+ ? decodeDefaultUserRow(row)
125
+ : tables.user.decode(row);
126
+ const decodeDefaultPasswordCredentialRow = (row) => omitUndefined({
127
+ id: CredentialId(row.id),
128
+ userId: UserId(row.userId),
129
+ passwordHash: row.passwordHash ?? "",
130
+ createdAt: UnixMillis(Number(row.createdAt)),
131
+ updatedAt: UnixMillis(Number(row.updatedAt)),
132
+ revokedAt: optionalUnixMillis(row.revokedAt),
133
+ metadata: jsonDecode(row.metadata),
134
+ });
135
+ const decodePasswordCredentialRow = (tables, row) => tables.credential.decodePassword === undefined
136
+ ? decodeDefaultPasswordCredentialRow(row)
137
+ : tables.credential.decodePassword(row);
138
+ const decodeDefaultSessionRow = (row) => {
139
+ const sessionMetadata = decodeSessionMetadata(row.metadata);
140
+ return omitUndefined({
141
+ id: SessionId(row.id),
142
+ userId: UserId(row.userId),
143
+ secretHash: row.secretHash,
144
+ createdAt: UnixMillis(Number(row.createdAt)),
145
+ expiresAt: UnixMillis(Number(row.expiresAt)),
146
+ authTime: UnixMillis(Number(row.authTime)),
147
+ aal: row.aal,
148
+ amr: decodeAmr(row.amr),
149
+ mfaVerifiedAt: optionalUnixMillis(row.mfaVerifiedAt),
150
+ metadata: sessionMetadata.metadata,
151
+ claims: sessionMetadata.claims,
152
+ revokedAt: optionalUnixMillis(row.revokedAt),
153
+ lastSeenAt: optionalUnixMillis(row.lastSeenAt),
154
+ rotatedAt: optionalUnixMillis(row.rotatedAt),
155
+ });
156
+ };
157
+ const decodeSessionRow = (tables, row) => tables.session.decode === undefined
158
+ ? decodeDefaultSessionRow(row)
159
+ : tables.session.decode(row);
160
+ const decodeDefaultVerificationRow = (row) => omitUndefined({
161
+ id: ChallengeId(row.id),
162
+ type: row.type,
163
+ subject: row.subject,
164
+ secretHash: row.secretHash ?? undefined,
165
+ createdAt: UnixMillis(Number(row.createdAt)),
166
+ expiresAt: UnixMillis(Number(row.expiresAt)),
167
+ metadata: jsonDecode(row.metadata),
168
+ consumedAt: optionalUnixMillis(row.consumedAt),
169
+ });
170
+ const decodeVerificationRow = (tables, row) => tables.verification.decode === undefined
171
+ ? decodeDefaultVerificationRow(row)
172
+ : tables.verification.decode(row);
173
+ const userInsert = (row) => ({
174
+ id: row.id,
175
+ email: row.email,
176
+ email_verified: row.emailVerified ? 1 : 0,
177
+ created_at: Number(row.createdAt),
178
+ updated_at: Number(row.updatedAt),
179
+ disabled_at: row.disabledAt === undefined ? null : Number(row.disabledAt),
180
+ metadata: jsonEncode(row.metadata),
181
+ });
182
+ const passwordCredentialInsert = (row) => ({
183
+ id: row.id,
184
+ user_id: row.userId,
185
+ type: "password",
186
+ password_hash: row.passwordHash,
187
+ created_at: Number(row.createdAt),
188
+ updated_at: Number(row.updatedAt),
189
+ revoked_at: row.revokedAt === undefined ? null : Number(row.revokedAt),
190
+ metadata: jsonEncode(row.metadata),
191
+ });
192
+ const sessionInsert = (row) => ({
193
+ id: row.id,
194
+ user_id: row.userId,
195
+ secret_hash: row.secretHash,
196
+ created_at: Number(row.createdAt),
197
+ expires_at: Number(row.expiresAt),
198
+ auth_time: Number(row.authTime),
199
+ aal: row.aal,
200
+ amr: JSON.stringify(row.amr),
201
+ mfa_verified_at: row.mfaVerifiedAt === undefined ? null : Number(row.mfaVerifiedAt),
202
+ metadata: encodeSessionMetadata(row),
203
+ revoked_at: null,
204
+ last_seen_at: null,
205
+ rotated_at: null,
206
+ });
207
+ const verificationInsert = (row) => ({
208
+ id: row.id,
209
+ type: row.type,
210
+ subject: row.subject,
211
+ secret_hash: row.secretHash ?? null,
212
+ created_at: Number(row.createdAt),
213
+ expires_at: Number(row.expiresAt),
214
+ metadata: jsonEncode(row.metadata),
215
+ consumed_at: null,
216
+ });
217
+ const userMarkEmailVerifiedUpdate = (input) => ({
218
+ email_verified: 1,
219
+ updated_at: Number(input.updatedAt),
220
+ });
221
+ const sessionRefreshUpdate = (input) => omitUndefined({
222
+ expires_at: Number(input.expiresAt),
223
+ last_seen_at: input.lastSeenAt === undefined ? undefined : Number(input.lastSeenAt),
224
+ });
225
+ const sessionRotateUpdate = (input) => omitUndefined({
226
+ secret_hash: input.secretHash,
227
+ rotated_at: Number(input.rotatedAt),
228
+ expires_at: input.expiresAt === undefined ? undefined : Number(input.expiresAt),
229
+ });
230
+ const sessionUpdateClaimsUpdate = (row, input) => ({
231
+ metadata: encodeSessionMetadata({
232
+ ...row,
233
+ claims: input.claims,
234
+ }),
235
+ });
236
+ const sessionRevokeUpdate = (input) => ({
237
+ revoked_at: Number(input.revokedAt),
238
+ });
239
+ const verificationConsumeUpdate = (input) => ({
240
+ consumed_at: Number(input.consumedAt),
241
+ });
242
+ const makeInternalAuthSqliteTables = (names = {}) => {
243
+ const user = makeAuthUserTable(names.user ?? "auth_user");
244
+ const credential = makeAuthCredentialTable(names.credential ?? "auth_credential");
245
+ const session = makeAuthSessionTable(names.session ?? "auth_session");
246
+ const verification = makeAuthVerificationTable(names.verification ?? "auth_verification");
247
+ return {
248
+ user: {
249
+ table: user,
250
+ select: {
251
+ id: user.id,
252
+ email: user.email,
253
+ emailVerified: user.email_verified,
254
+ createdAt: user.created_at,
255
+ updatedAt: user.updated_at,
256
+ disabledAt: user.disabled_at,
257
+ metadata: user.metadata,
258
+ },
259
+ insert: userInsert,
260
+ markEmailVerified: userMarkEmailVerifiedUpdate,
261
+ },
262
+ credential: {
263
+ table: credential,
264
+ select: {
265
+ id: credential.id,
266
+ userId: credential.user_id,
267
+ type: credential.type,
268
+ passwordHash: credential.password_hash,
269
+ createdAt: credential.created_at,
270
+ updatedAt: credential.updated_at,
271
+ revokedAt: credential.revoked_at,
272
+ metadata: credential.metadata,
273
+ },
274
+ insertPassword: passwordCredentialInsert,
275
+ },
276
+ session: {
277
+ table: session,
278
+ select: {
279
+ id: session.id,
280
+ userId: session.user_id,
281
+ secretHash: session.secret_hash,
282
+ createdAt: session.created_at,
283
+ expiresAt: session.expires_at,
284
+ authTime: session.auth_time,
285
+ aal: session.aal,
286
+ amr: session.amr,
287
+ mfaVerifiedAt: session.mfa_verified_at,
288
+ metadata: session.metadata,
289
+ revokedAt: session.revoked_at,
290
+ lastSeenAt: session.last_seen_at,
291
+ rotatedAt: session.rotated_at,
292
+ },
293
+ insert: sessionInsert,
294
+ refresh: sessionRefreshUpdate,
295
+ rotate: sessionRotateUpdate,
296
+ updateClaims: sessionUpdateClaimsUpdate,
297
+ revoke: sessionRevokeUpdate,
298
+ },
299
+ verification: {
300
+ table: verification,
301
+ select: {
302
+ id: verification.id,
303
+ type: verification.type,
304
+ subject: verification.subject,
305
+ secretHash: verification.secret_hash,
306
+ createdAt: verification.created_at,
307
+ expiresAt: verification.expires_at,
308
+ metadata: verification.metadata,
309
+ consumedAt: verification.consumed_at,
310
+ },
311
+ insert: verificationInsert,
312
+ consume: verificationConsumeUpdate,
313
+ },
314
+ };
315
+ };
316
+ const asAuthSqliteTables = (tables) => tables;
317
+ export const defineEffectQbAuthTables = (tables) => asAuthSqliteTables(tables);
318
+ export const makeAuthSqliteTables = (names = {}) => asAuthSqliteTables(makeInternalAuthSqliteTables(names));
319
+ export const authSqliteTables = makeAuthSqliteTables();
320
+ const selectUserColumns = (tables) => tables.user.select;
321
+ const selectCredentialColumns = (tables) => tables.credential.select;
322
+ const selectSessionColumns = (tables) => tables.session.select;
323
+ const selectVerificationColumns = (tables) => tables.verification.select;
324
+ const storageError = (entity, operation, cause) => StorageError.fromUnknown(entity, operation, cause);
325
+ const findUserById = (executor, tables, id, operation = "find") => executePlan(executor, Query.select(selectUserColumns(tables)).pipe(Query.from(tables.user.table), Query.where(queryEq(tables.user.select.id, id)))).pipe(Effect.mapError((cause) => storageError("user", operation, cause)), Effect.map((rows) => rows[0] === undefined
326
+ ? Option.none()
327
+ : Option.some(decodeUserRow(tables, rows[0]))));
328
+ const findUserByEmail = (executor, tables, email, operation = "find") => executePlan(executor, Query.select(selectUserColumns(tables)).pipe(Query.from(tables.user.table), Query.where(queryEq(tables.user.select.email, email)))).pipe(Effect.mapError((cause) => storageError("user", operation, cause)), Effect.map((rows) => rows[0] === undefined
329
+ ? Option.none()
330
+ : Option.some(decodeUserRow(tables, rows[0]))));
331
+ const findPasswordCredentialByUserId = (executor, tables, userId, operation = "find") => executePlan(executor, Query.select(selectCredentialColumns(tables)).pipe(Query.from(tables.credential.table), Query.where(queryEq(tables.credential.select.userId, userId)), Query.where(queryEq(tables.credential.select.type, "password")))).pipe(Effect.mapError((cause) => storageError("credential", operation, cause)), Effect.map((rows) => rows[0] === undefined
332
+ ? Option.none()
333
+ : Option.some(decodePasswordCredentialRow(tables, rows[0]))));
334
+ const findSessionById = (executor, tables, id, operation = "find") => executePlan(executor, Query.select(selectSessionColumns(tables)).pipe(Query.from(tables.session.table), Query.where(queryEq(tables.session.select.id, id)))).pipe(Effect.mapError((cause) => storageError("session", operation, cause)), Effect.map((rows) => rows[0] === undefined
335
+ ? Option.none()
336
+ : Option.some(decodeSessionRow(tables, rows[0]))));
337
+ const findVerificationById = (executor, tables, id, operation = "find") => executePlan(executor, Query.select(selectVerificationColumns(tables)).pipe(Query.from(tables.verification.table), Query.where(queryEq(tables.verification.select.id, id)))).pipe(Effect.mapError((cause) => storageError("verification", operation, cause)), Effect.map((rows) => rows[0] === undefined
338
+ ? Option.none()
339
+ : Option.some(decodeVerificationRow(tables, rows[0]))));
340
+ export const makeEffectQbSqliteUserStore = (executor, options = {}) => {
341
+ const tables = options.tables ?? authSqliteTables;
342
+ return UserStore.make({
343
+ findById: (id) => findUserById(executor, tables, id),
344
+ findByEmail: (email) => findUserByEmail(executor, tables, email),
345
+ insert: (row) => executePlan(executor, queryInsert(tables.user.table, mutationValues(tables.user.insert(row)))).pipe(Effect.mapError((cause) => storageError("user", "insert", cause)), Effect.asVoid),
346
+ markEmailVerified: (input) => executePlan(executor, queryUpdate(tables.user.table, mutationValues(tables.user.markEmailVerified(input))).pipe(Query.where(queryEq(tables.user.select.id, input.userId)), Query.returning(selectUserColumns(tables)))).pipe(Effect.mapError((cause) => storageError("user", "markEmailVerified", cause)), Effect.map((rows) => rows[0] === undefined
347
+ ? Option.none()
348
+ : Option.some(decodeUserRow(tables, rows[0])))),
349
+ });
350
+ };
351
+ export const makeEffectQbSqliteCredentialStore = (executor, options = {}) => {
352
+ const tables = options.tables ?? authSqliteTables;
353
+ return CredentialStore.make({
354
+ findPasswordByUserId: (userId) => findPasswordCredentialByUserId(executor, tables, userId),
355
+ insertPassword: (row) => executePlan(executor, queryInsert(tables.credential.table, mutationValues(tables.credential.insertPassword(row)))).pipe(Effect.mapError((cause) => storageError("credential", "insert", cause)), Effect.asVoid),
356
+ });
357
+ };
358
+ export const makeEffectQbSqliteSessionStore = (executor, options = {}) => {
359
+ const tables = options.tables ?? authSqliteTables;
360
+ return SessionStore.make({
361
+ findById: (id) => findSessionById(executor, tables, id),
362
+ insert: (row) => executePlan(executor, queryInsert(tables.session.table, mutationValues(tables.session.insert(row)))).pipe(Effect.mapError((cause) => storageError("session", "insert", cause)), Effect.asVoid),
363
+ refresh: (input) => {
364
+ const query = queryUpdate(tables.session.table, mutationValues(tables.session.refresh(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), Query.returning(selectSessionColumns(tables)));
365
+ return executePlan(executor, query).pipe(Effect.mapError((cause) => storageError("session", "refresh", cause)), Effect.map((rows) => rows[0] === undefined
366
+ ? Option.none()
367
+ : Option.some(decodeSessionRow(tables, rows[0]))));
368
+ },
369
+ rotate: (input) => {
370
+ const query = queryUpdate(tables.session.table, mutationValues(tables.session.rotate(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), Query.returning(selectSessionColumns(tables)));
371
+ return executePlan(executor, query).pipe(Effect.mapError((cause) => storageError("session", "rotate", cause)), Effect.map((rows) => rows[0] === undefined
372
+ ? Option.none()
373
+ : Option.some(decodeSessionRow(tables, rows[0]))));
374
+ },
375
+ updateClaims: (input) => findSessionById(executor, tables, input.sessionId, "updateClaims").pipe(Effect.flatMap((rowOption) => {
376
+ if (Option.isNone(rowOption)) {
377
+ return Effect.succeed(Option.none());
378
+ }
379
+ return executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.updateClaims(rowOption.value, input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)), Query.returning(selectSessionColumns(tables)))).pipe(Effect.mapError((cause) => storageError("session", "updateClaims", cause)), Effect.map((rows) => rows[0] === undefined
380
+ ? Option.none()
381
+ : Option.some(decodeSessionRow(tables, rows[0]))));
382
+ })),
383
+ revoke: (input) => executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.revoke(input))).pipe(Query.where(queryEq(tables.session.select.id, input.sessionId)))).pipe(Effect.mapError((cause) => storageError("session", "revoke", cause)), Effect.asVoid),
384
+ revokeAllForUser: (input) => executePlan(executor, queryUpdate(tables.session.table, mutationValues(tables.session.revoke(input))).pipe(Query.where(queryEq(tables.session.select.userId, input.userId)))).pipe(Effect.mapError((cause) => storageError("session", "revokeAllForUser", cause)), Effect.asVoid),
385
+ });
386
+ };
387
+ export const makeEffectQbSqliteVerificationStore = (executor, options = {}) => {
388
+ const tables = options.tables ?? authSqliteTables;
389
+ return VerificationStore.make({
390
+ findById: (id) => findVerificationById(executor, tables, id),
391
+ insert: (row) => executePlan(executor, queryInsert(tables.verification.table, mutationValues(tables.verification.insert(row)))).pipe(Effect.mapError((cause) => storageError("verification", "insert", cause)), Effect.asVoid),
392
+ consume: (input) => {
393
+ 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))));
394
+ const plan = input.type === undefined
395
+ ? base
396
+ : base.pipe(Query.where(queryEq(tables.verification.select.type, input.type)));
397
+ return executePlan(executor, plan.pipe(Query.returning({ id: tables.verification.select.id }))).pipe(Effect.mapError((cause) => storageError("verification", "consume", cause)), Effect.flatMap((rows) => rows[0] === undefined
398
+ ? Effect.succeed(Option.none())
399
+ : findVerificationById(executor, tables, input.id, "consume")));
400
+ },
401
+ deleteExpired: (input) => {
402
+ if (input.limit === undefined) {
403
+ return executePlan(executor, Query.delete(tables.verification.table).pipe(Query.where(queryLte(tables.verification.select.expiresAt, Number(input.now))), Query.returning({ id: tables.verification.select.id }))).pipe(Effect.mapError((cause) => storageError("verification", "deleteExpired", cause)), Effect.map((rows) => rows.length));
404
+ }
405
+ return executePlan(executor, Query.select({ id: tables.verification.select.id }).pipe(Query.from(tables.verification.table), Query.where(queryLte(tables.verification.select.expiresAt, Number(input.now))), Query.limit(input.limit))).pipe(Effect.mapError((cause) => storageError("verification", "deleteExpired", cause)), Effect.flatMap((rows) => {
406
+ const [first, ...rest] = rows.map((row) => row.id);
407
+ if (first === undefined) {
408
+ return Effect.succeed(0);
409
+ }
410
+ return executePlan(executor, Query.delete(tables.verification.table).pipe(Query.where(queryIn(tables.verification.select.id, first, ...rest)), Query.returning({ id: tables.verification.select.id }))).pipe(Effect.mapError((cause) => storageError("verification", "deleteExpired", cause)), Effect.map((deleted) => deleted.length));
411
+ }));
412
+ },
413
+ });
414
+ };
415
+ export const makeEffectQbSqliteStorage = (executor, options = {}) => ({
416
+ userStore: makeEffectQbSqliteUserStore(executor, options),
417
+ credentialStore: makeEffectQbSqliteCredentialStore(executor, options),
418
+ sessionStore: makeEffectQbSqliteSessionStore(executor, options),
419
+ verificationStore: makeEffectQbSqliteVerificationStore(executor, options),
420
+ });
421
+ 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)));
422
+ export const makeD1EffectQbSqliteExecutor = (database) => Executor.make({
423
+ driver: Executor.driver((query) => Effect.tryPromise({
424
+ try: () => database
425
+ .prepare(query.sql)
426
+ .bind(...query.params)
427
+ .all(),
428
+ catch: (cause) => new D1EffectQbError({ message: "D1 query failed", cause }),
429
+ }).pipe(Effect.flatMap((result) => {
430
+ if (result.success === false || result.error !== undefined) {
431
+ return Effect.fail(new D1EffectQbError({
432
+ message: result.error ?? "D1 query failed",
433
+ }));
434
+ }
435
+ return Effect.succeed([...(result.results ?? [])]);
436
+ }))),
437
+ });
438
+ export const D1EffectQbSqliteAuthStorageLive = (database, options = {}) => EffectQbSqliteAuthStorageLive(makeD1EffectQbSqliteExecutor(database), options);
439
+ //# sourceMappingURL=EffectQbSqliteStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EffectQbSqliteStorage.js","sourceRoot":"","sources":["../src/EffectQbSqliteStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG1E,OAAO,EACL,WAAW,EACX,YAAY,EACZ,KAAK,EACL,SAAS,EACT,UAAU,EACV,MAAM,GACP,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAiDtB,MAAM,OAAO,eAAgB,SAAQ,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAGrE;CAAG;AAkDL,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE,CACzC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;IACf,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE;IACpB,cAAc,EAAE,MAAM,CAAC,GAAG,EAAE;IAC5B,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC/C,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;CAC9C,CAAC,CAAC;AAEL,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;IACf,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;IACtB,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;IACnB,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAClD,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;CAC9C,CAAC,CAAC;AAEL,MAAM,oBAAoB,GAAG,CAAC,IAAY,EAAE,EAAE,CAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;IACf,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;IACtB,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE;IAC1B,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,SAAS,EAAE,MAAM,CAAC,GAAG,EAAE;IACvB,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;IAClB,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;IAClB,eAAe,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9C,YAAY,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;CAC/C,CAAC,CAAC;AAEL,MAAM,yBAAyB,GAAG,CAAC,IAAY,EAAE,EAAE,CACjD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;IACf,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE;IACnB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;IACtB,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAChD,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,UAAU,EAAE,MAAM,CAAC,GAAG,EAAE;IACxB,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,WAAW,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;CAChD,CAAC,CAAC;AAEL,MAAM,sBAAsB,GAAkB,MAAM,CAAC,GAAG,CACtD,0DAA0D,CAC3D,CAAC;AA4JF,MAAM,UAAU,GAAG,CAAC,KAAc,EAAiB,EAAE,CACnD,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAErD,MAAM,UAAU,GAAG,CAAC,KAAc,EAAW,EAAE;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/D,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAc,EAA0B,EAAE,CACpE,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhF,MAAM,SAAS,GAAG,CAChB,KAA8C,EACd,EAAE,CAClC,OAAO,KAAK,KAAK,QAAQ;IACvB,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAoC;IACvD,CAAC,CAAC,KAAK,CAAC;AAEZ,MAAM,aAAa,GAAG,CAAC,KAAc,EAAW,EAAE;IAChD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,CAAC;IAC5D,CAAC;IAED,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAA2B,EAAE,CACjE,KAAgC,CAAC;AAEnC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,MAAe,EAAE,EAAE,CACtD,KAAK,CAAC,MAAM,CAAC,KAA4B,EAAE,MAAe,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,MAAe,EAAE,EAAE,CACtD,KAAK,CAAC,MAAM,CAAC,KAA4B,EAAE,MAAe,CAAC,CAAC;AAC9D,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,KAAc,EAAE,EAAE,CAChD,KAAK,CAAC,EAAE,CAAC,IAAa,EAAE,KAAc,CAAC,CAAC;AAC1C,MAAM,OAAO,GAAG,CAAC,IAAa,EAAE,KAAc,EAAE,EAAE,CAChD,KAAK,CAAC,EAAE,CAAC,IAAa,EAAE,KAAc,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,CAAC,IAAa,EAAE,KAAc,EAAE,EAAE,CACjD,KAAK,CAAC,GAAG,CAAC,IAAa,EAAE,KAAc,CAAC,CAAC;AAC3C,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAc,CAAC,CAAC;AACrE,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAc,EAAE,GAAG,IAAwB,EAAE,EAAE,CAC9E,KAAK,CAAC,EAAE,CAAC,KAAc,EAAE,KAAc,EAAE,GAAI,IAAyB,CAAC,CAAC;AAE1E,MAAM,WAAW,GAAG,CAClB,QAAgC,EAChC,IAAa,EACyB,EAAE,CACxC,QAAQ,CAAC,OAAO,CAAC,IAAa,CAAyC,CAAC;AAE1E,MAAM,aAAa,GAAG,CACpB,MAAS,EACN,EAAE,CACL,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAC7D,CAAC;AAET,MAAM,0BAA0B,GAAG,qBAA8B,CAAC;AAElE,MAAM,QAAQ,GAAG,CAAC,KAAc,EAA8C,EAAE,CAC9E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEvE,MAAM,qBAAqB,GAAG,CAC5B,KAAc,EAC2B,EAAE;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC;QAChC,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC;QACrC,CAAC,CAAC,SAAS,CAAC;IAEd,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAClD,OAAO,aAAa,CAAC;YACnB,QAAQ,EAAE,OAAwD;SACnE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,aAAa,CAAC;QACnB,QAAQ,EAAE,QAAQ,CAAC,QAEN;QACb,MAAM,EAAE,QAAQ,CAAC,MAAmC;KACrD,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,GAAkB,EAAiB,EAAE;IAClE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,CAAC,0BAA0B,CAAC,EAAE,aAAa,CAAC;YAC1C,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;KACH,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAgC,EAAW,EAAE,CACzE,aAAa,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;IAC/C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;IAC9C,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAEpB;CACd,CAAC,CAAC;AAEL,MAAM,aAAa,GAAG,CACpB,MAAwB,EACxB,GAAgC,EACvB,EAAE,CACX,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;IAC9B,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC;IAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAE9B,MAAM,kCAAkC,GAAG,CACzC,GAAsC,EACf,EAAE,CACzB,aAAa,CAAC;IACZ,EAAE,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;IAC1B,YAAY,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE;IACpC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAEpB;CACd,CAAC,CAAC;AAEL,MAAM,2BAA2B,GAAG,CAClC,MAAwB,EACxB,GAAsC,EACf,EAAE,CACzB,MAAM,CAAC,UAAU,CAAC,cAAc,KAAK,SAAS;IAC5C,CAAC,CAAC,kCAAkC,CAAC,GAAG,CAAC;IACzC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAE5C,MAAM,uBAAuB,GAAG,CAC9B,GAAmC,EACvB,EAAE;IACd,MAAM,eAAe,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE5D,OAAO,aAAa,CAAC;QACnB,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5C,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,GAAG,EAAE,GAAG,CAAC,GAAyB;QAClC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACvB,aAAa,EAAE,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC;QACpD,QAAQ,EAAE,eAAe,CAAC,QAAQ;QAClC,MAAM,EAAE,eAAe,CAAC,MAAM;QAC9B,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;QAC5C,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;QAC9C,SAAS,EAAE,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,MAAwB,EACxB,GAAmC,EACvB,EAAE,CACd,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS;IACjC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEjC,MAAM,4BAA4B,GAAG,CACnC,GAAwC,EACvB,EAAE,CACnB,aAAa,CAAC;IACZ,EAAE,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,IAAqB;IAC/B,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;IACvC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAEpB;IACb,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;CAC/C,CAAC,CAAC;AAEL,MAAM,qBAAqB,GAAG,CAC5B,MAAwB,EACxB,GAAwC,EACvB,EAAE,CACnB,MAAM,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS;IACtC,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC;IACnC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,GAAG,CAAC,GAAe,EAAE,EAAE,CAAC,CAAC;IACvC,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,KAAK,EAAE,GAAG,CAAC,KAAK;IAChB,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;IACzE,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,GAA6B,EAAE,EAAE,CAAC,CAAC;IACnE,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,IAAI,EAAE,UAAU;IAChB,aAAa,EAAE,GAAG,CAAC,YAAY;IAC/B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACtE,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;CACnC,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC;IAC7C,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,OAAO,EAAE,GAAG,CAAC,MAAM;IACnB,WAAW,EAAE,GAAG,CAAC,UAAU;IAC3B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC/B,GAAG,EAAE,GAAG,CAAC,GAAG;IACZ,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IAC5B,eAAe,EACb,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;IACpE,QAAQ,EAAE,qBAAqB,CAAC,GAAG,CAAC;IACpC,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;CACjB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,GAAuB,EAAE,EAAE,CAAC,CAAC;IACvD,EAAE,EAAE,GAAG,CAAC,EAAE;IACV,IAAI,EAAE,GAAG,CAAC,IAAI;IACd,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,WAAW,EAAE,GAAG,CAAC,UAAU,IAAI,IAAI;IACnC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACjC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClC,WAAW,EAAE,IAAI;CAClB,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,CAAC,KAAiC,EAAE,EAAE,CAAC,CAAC;IAC1E,cAAc,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,KAA+B,EAAE,EAAE,CAC/D,aAAa,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IACnC,YAAY,EACV,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;CACxE,CAAC,CAAC;AAEL,MAAM,mBAAmB,GAAG,CAAC,KAA8B,EAAE,EAAE,CAC7D,aAAa,CAAC;IACZ,WAAW,EAAE,KAAK,CAAC,UAAU;IAC7B,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;IACnC,UAAU,EACR,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;CACtE,CAAC,CAAC;AAEL,MAAM,yBAAyB,GAAG,CAChC,GAAe,EACf,KAAoC,EACpC,EAAE,CAAC,CAAC;IACJ,QAAQ,EAAE,qBAAqB,CAAC;QAC9B,GAAG,GAAG;QACN,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,KAAiC,EAAE,EAAE,CAAC,CAAC;IAClE,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,CAAC,KAA+B,EAAE,EAAE,CAAC,CAAC;IACtE,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CAAC,QAA8B,EAAE,EAAE,EAAE;IACxE,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,uBAAuB,CACxC,KAAK,CAAC,UAAU,IAAI,iBAAiB,CACtC,CAAC;IACF,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,OAAO,IAAI,cAAc,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,yBAAyB,CAC5C,KAAK,CAAC,YAAY,IAAI,mBAAmB,CAC1C,CAAC;IAEF,OAAO;QACL,IAAI,EAAE;YACJ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,aAAa,EAAE,IAAI,CAAC,cAAc;gBAClC,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,UAAU,EAAE,IAAI,CAAC,WAAW;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB;YACD,MAAM,EAAE,UAAU;YAClB,iBAAiB,EAAE,2BAA2B;SAC/C;QACD,UAAU,EAAE;YACV,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE;gBACN,EAAE,EAAE,UAAU,CAAC,EAAE;gBACjB,MAAM,EAAE,UAAU,CAAC,OAAO;gBAC1B,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,YAAY,EAAE,UAAU,CAAC,aAAa;gBACtC,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,SAAS,EAAE,UAAU,CAAC,UAAU;gBAChC,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B;YACD,cAAc,EAAE,wBAAwB;SACzC;QACD,OAAO,EAAE;YACP,KAAK,EAAE,OAAO;YACd,MAAM,EAAE;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,OAAO,CAAC,OAAO;gBACvB,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,aAAa,EAAE,OAAO,CAAC,eAAe;gBACtC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,OAAO,CAAC,UAAU;gBAC7B,UAAU,EAAE,OAAO,CAAC,YAAY;gBAChC,SAAS,EAAE,OAAO,CAAC,UAAU;aAC9B;YACD,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,oBAAoB;YAC7B,MAAM,EAAE,mBAAmB;YAC3B,YAAY,EAAE,yBAAyB;YACvC,MAAM,EAAE,mBAAmB;SAC5B;QACD,YAAY,EAAE;YACZ,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE;gBACN,EAAE,EAAE,YAAY,CAAC,EAAE;gBACnB,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,UAAU,EAAE,YAAY,CAAC,WAAW;gBACpC,SAAS,EAAE,YAAY,CAAC,UAAU;gBAClC,SAAS,EAAE,YAAY,CAAC,UAAU;gBAClC,QAAQ,EAAE,YAAY,CAAC,QAAQ;gBAC/B,UAAU,EAAE,YAAY,CAAC,WAAW;aACrC;YACD,MAAM,EAAE,kBAAkB;YAC1B,OAAO,EAAE,yBAAyB;SACnC;KACgC,CAAC;AACtC,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,MAAc,EACa,EAAE,CAAC,MAAmC,CAAC;AAEpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAGtC,MAAc,EACa,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAA8B,EAAE,EACd,EAAE,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;AAE/E,MAAM,CAAC,MAAM,gBAAgB,GAAqB,oBAAoB,EAAE,CAAC;AAEzE,MAAM,iBAAiB,GAAG,CAAC,MAAwB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAE3E,MAAM,uBAAuB,GAAG,CAAC,MAAwB,EAAE,EAAE,CAC3D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;AAE3B,MAAM,oBAAoB,GAAG,CAAC,MAAwB,EAAE,EAAE,CACxD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AAExB,MAAM,yBAAyB,GAAG,CAAC,MAAwB,EAAE,EAAE,CAC7D,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;AAE7B,MAAM,YAAY,GAAG,CACnB,MAA0D,EAC1D,SAAiB,EACjB,KAAc,EACA,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAEtE,MAAM,YAAY,GAAG,CACnB,QAAgC,EAChC,MAAwB,EACxB,EAAU,EACV,SAAS,GAAG,MAAM,EAClB,EAAE,CACF,WAAW,CACT,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAC7B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAChD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAW;IACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAChD,CACF,CAAC;AAEJ,MAAM,eAAe,GAAG,CACtB,QAAgC,EAChC,MAAwB,EACxB,KAAY,EACZ,SAAS,GAAG,MAAM,EAClB,EAAE,CACF,WAAW,CACT,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAC7B,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CACtD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAClE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAW;IACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAChD,CACF,CAAC;AAEJ,MAAM,8BAA8B,GAAG,CACrC,QAAgC,EAChC,MAAwB,EACxB,MAAc,EACd,SAAS,GAAG,MAAM,EAClB,EAAE,CACF,WAAW,CACT,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAChD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EACnC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC7D,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAChE,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EACxE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAyB;IACtC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9D,CACF,CAAC;AAEJ,MAAM,eAAe,GAAG,CACtB,QAAgC,EAChC,MAAwB,EACxB,EAAa,EACb,SAAS,GAAG,MAAM,EAClB,EAAE,CACF,WAAW,CACT,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC7C,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAChC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CACnD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EACrE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAc;IAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CACF,CAAC;AAEJ,MAAM,oBAAoB,GAAG,CAC3B,QAAgC,EAChC,MAAwB,EACxB,EAAe,EACf,SAAS,GAAG,MAAM,EAClB,EAAE,CACF,WAAW,CACT,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EACrC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CACxD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAC1E,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAmB;IAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACxD,CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,QAAgC,EAChC,UAA4C,EAAE,EAC5B,EAAE;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAElD,OAAO,SAAS,CAAC,IAAI,CAAC;QACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;QACpD,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC;QAChE,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,WAAW,CACT,QAAQ,EACR,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CACxE,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EACjE,MAAM,CAAC,MAAM,CACd;QACH,iBAAiB,EAAE,CAAC,KAAiC,EAAE,EAAE,CACvD,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,IAAI,CAAC,KAAK,EACjB,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CACrD,CAAC,IAAI,CACJ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EACzD,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAC3C,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,CAAC,CACjD,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAW;YACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAChD,CACF;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iCAAiC,GAAG,CAC/C,QAAgC,EAChC,UAA4C,EAAE,EACtB,EAAE;IAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAElD,OAAO,eAAe,CAAC,IAAI,CAAC;QAC1B,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE,CAC/B,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QAC1D,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CACtB,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,UAAU,CAAC,KAAK,EACvB,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CACtD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EACvE,MAAM,CAAC,MAAM,CACd;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,QAAgC,EAChC,UAA4C,EAAE,EACzB,EAAE;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAElD,OAAO,YAAY,CAAC,IAAI,CAAC;QACvB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;QACvD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC3C,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CACd;QACH,OAAO,EAAE,CAAC,KAA+B,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAC9C,CAAC,IAAI,CACJ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAC/D,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAC9C,CAAC;YAEF,OAAO,WAAW,CAAiC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EACrE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAc;gBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CACF,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,CAAC,KAA8B,EAAE,EAAE;YACzC,MAAM,KAAK,GAAG,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC,IAAI,CACJ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAC/D,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAC9C,CAAC;YAEF,OAAO,WAAW,CAAiC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EACpE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAc;gBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CACF,CAAC;QACJ,CAAC;QACD,YAAY,EAAE,CAAC,KAAoC,EAAE,EAAE,CACrD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,IAAI,CACrE,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,WAAW,CAChB,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CACZ,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CACpD,CACF,CAAC,IAAI,CACJ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,EAC/D,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAC9C,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAC/C,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBACnB,CAAC,CAAC,MAAM,CAAC,IAAI,EAAc;gBAC3B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CACnD,CACF,CAAC;QACJ,CAAC,CAAC,CACH;QACH,MAAM,EAAE,CAAC,KAA8B,EAAE,EAAE,CACzC,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CACxE,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,EACpE,MAAM,CAAC,MAAM,CACd;QACH,gBAAgB,EAAE,CAAC,KAAwC,EAAE,EAAE,CAC7D,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,OAAO,CAAC,KAAK,EACpB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACzE,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,CAAC,CACnD,EACD,MAAM,CAAC,MAAM,CACd;KACJ,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,QAAgC,EAChC,UAA4C,EAAE,EACpB,EAAE;IAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAAC;IAElD,OAAO,iBAAiB,CAAC,IAAI,CAAC;QAC5B,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC;QAC5D,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CACd,WAAW,CACT,QAAQ,EACR,WAAW,CACT,MAAM,CAAC,YAAY,CAAC,KAAK,EACzB,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAChD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,CAAC,CAC9C,EACD,MAAM,CAAC,MAAM,CACd;QACH,OAAO,EAAE,CAAC,KAA+B,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,WAAW,CACtB,MAAM,CAAC,YAAY,CAAC,KAAK,EACzB,cAAc,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACnD,CAAC,IAAI,CACJ,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAC7D,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAC/D,KAAK,CAAC,KAAK,CACT,OAAO,CACL,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EACpC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CACzB,CACF,CACF,CAAC;YACF,MAAM,IAAI,GACR,KAAK,CAAC,IAAI,KAAK,SAAS;gBACtB,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;YAER,OAAO,WAAW,CAChB,QAAQ,EACR,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAClE,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,cAAc,EAAE,SAAS,EAAE,KAAK,CAAC,CAC/C,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACtB,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBACnB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAmB,CAAC;gBAChD,CAAC,CAAC,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAChE,CACF,CAAC;QACJ,CAAC;QACD,aAAa,EAAE,CAAC,KAAqC,EAAE,EAAE;YACvD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC9B,OAAO,WAAW,CAChB,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1C,KAAK,CAAC,KAAK,CACT,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAClE,EACD,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CACvD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,cAAc,EAAE,eAAe,EAAE,KAAK,CAAC,CACrD,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAClC,CAAC;YACJ,CAAC;YAED,OAAO,WAAW,CAChB,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CACtD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EACrC,KAAK,CAAC,KAAK,CACT,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAClE,EACD,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CACzB,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,cAAc,EAAE,eAAe,EAAE,KAAK,CAAC,CACrD,EACD,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACtB,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAEnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC3B,CAAC;gBAED,OAAO,WAAW,CAChB,QAAQ,EACR,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAC1C,KAAK,CAAC,KAAK,CACT,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CACvD,EACD,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CACvD,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,YAAY,CAAC,cAAc,EAAE,eAAe,EAAE,KAAK,CAAC,CACrD,EACD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CACxC,CAAC;YACJ,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,QAAgC,EAChC,UAA4C,EAAE,EACjB,EAAE,CAAC,CAAC;IACjC,SAAS,EAAE,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC;IACzD,eAAe,EAAE,iCAAiC,CAAC,QAAQ,EAAE,OAAO,CAAC;IACrE,YAAY,EAAE,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC/D,iBAAiB,EAAE,mCAAmC,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC1E,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,QAAgC,EAChC,UAA4C,EAAE,EAC9C,EAAE,CACF,KAAK,CAAC,QAAQ,CACZ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,2BAA2B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EACxE,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAC5B,iCAAiC,CAAC,QAAQ,EAAE,OAAO,CAAC,CACrD,EACD,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CACzB,8BAA8B,CAAC,QAAQ,EAAE,OAAO,CAAC,CAClD,EACD,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAC9B,mCAAmC,CAAC,QAAQ,EAAE,OAAO,CAAC,CACvD,CACF,CAAC;AAEJ,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,QAAgC,EACR,EAAE,CAC1B,QAAQ,CAAC,IAAI,CAAC;IACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAkB,CAAC,KAAK,EAAE,EAAE,CACjD,MAAM,CAAC,UAAU,CAAC;QAChB,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;aACL,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;aAClB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;aACrB,GAAG,EAAoB;QAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;KAC7D,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACxB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3D,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,eAAe,CAAC;gBAClB,OAAO,EAAE,MAAM,CAAC,KAAK,IAAI,iBAAiB;aAC3C,CAAC,CACH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CACH,CACF;CACF,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,QAAgC,EAChC,UAA4C,EAAE,EAC9C,EAAE,CACF,6BAA6B,CAC3B,4BAA4B,CAAC,QAAQ,CAAC,EACtC,OAAO,CACR,CAAC"}
@@ -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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"}