@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.
- package/README.md +622 -61
- package/dist/AuditLog.d.ts.map +1 -1
- package/dist/AuditLog.js +1 -1
- package/dist/AuditLog.js.map +1 -1
- package/dist/AuthConfig.d.ts +51 -0
- package/dist/AuthConfig.d.ts.map +1 -0
- package/dist/AuthConfig.js +56 -0
- package/dist/AuthConfig.js.map +1 -0
- package/dist/AuthFlow.d.ts +292 -35
- package/dist/AuthFlow.d.ts.map +1 -1
- package/dist/AuthFlow.js +130 -6
- package/dist/AuthFlow.js.map +1 -1
- package/dist/AuthKernel.d.ts +3 -0
- package/dist/AuthKernel.d.ts.map +1 -0
- package/dist/AuthKernel.js +9 -0
- package/dist/AuthKernel.js.map +1 -0
- package/dist/Challenge.d.ts +19 -3
- package/dist/Challenge.d.ts.map +1 -1
- package/dist/Challenge.js +157 -1
- package/dist/Challenge.js.map +1 -1
- package/dist/Client.d.ts +36 -0
- package/dist/Client.d.ts.map +1 -0
- package/dist/Client.js +55 -0
- package/dist/Client.js.map +1 -0
- package/dist/Crypto.d.ts +6 -1
- package/dist/Crypto.d.ts.map +1 -1
- package/dist/Crypto.js +62 -1
- package/dist/Crypto.js.map +1 -1
- package/dist/D1Kysely.d.ts +6 -3
- package/dist/D1Kysely.d.ts.map +1 -1
- package/dist/D1Kysely.js +8 -5
- package/dist/D1Kysely.js.map +1 -1
- package/dist/EffectQbSqliteStorage.d.ts +186 -0
- package/dist/EffectQbSqliteStorage.d.ts.map +1 -0
- package/dist/EffectQbSqliteStorage.js +439 -0
- package/dist/EffectQbSqliteStorage.js.map +1 -0
- package/dist/EmailOtp.d.ts +117 -0
- package/dist/EmailOtp.d.ts.map +1 -0
- package/dist/EmailOtp.js +279 -0
- package/dist/EmailOtp.js.map +1 -0
- package/dist/EmailVerification.d.ts +121 -0
- package/dist/EmailVerification.d.ts.map +1 -0
- package/dist/EmailVerification.js +201 -0
- package/dist/EmailVerification.js.map +1 -0
- package/dist/HttpApi/Api.d.ts +175 -0
- package/dist/HttpApi/Api.d.ts.map +1 -0
- package/dist/HttpApi/Api.js +340 -0
- package/dist/HttpApi/Api.js.map +1 -0
- package/dist/HttpApi/Endpoints.d.ts +92 -0
- package/dist/HttpApi/Endpoints.d.ts.map +1 -0
- package/dist/HttpApi/Endpoints.js +48 -0
- package/dist/HttpApi/Endpoints.js.map +1 -0
- package/dist/HttpApi/Errors.d.ts +82 -0
- package/dist/HttpApi/Errors.d.ts.map +1 -0
- package/dist/HttpApi/Errors.js +184 -0
- package/dist/HttpApi/Errors.js.map +1 -0
- package/dist/HttpApi/Schemas.d.ts +86 -0
- package/dist/HttpApi/Schemas.d.ts.map +1 -0
- package/dist/HttpApi/Schemas.js +63 -0
- package/dist/HttpApi/Schemas.js.map +1 -0
- package/dist/HttpApi/Security.d.ts +147 -0
- package/dist/HttpApi/Security.d.ts.map +1 -0
- package/dist/HttpApi/Security.js +439 -0
- package/dist/HttpApi/Security.js.map +1 -0
- package/dist/HttpApi/Transport.d.ts +31 -0
- package/dist/HttpApi/Transport.d.ts.map +1 -0
- package/dist/HttpApi/Transport.js +169 -0
- package/dist/HttpApi/Transport.js.map +1 -0
- package/dist/HttpApi/index.d.ts +8 -0
- package/dist/HttpApi/index.d.ts.map +1 -0
- package/dist/HttpApi/index.js +7 -0
- package/dist/HttpApi/index.js.map +1 -0
- package/dist/HttpApi.d.ts +2 -0
- package/dist/HttpApi.d.ts.map +1 -0
- package/dist/HttpApi.js +2 -0
- package/dist/HttpApi.js.map +1 -0
- package/dist/Identifiers.d.ts.map +1 -1
- package/dist/Identifiers.js.map +1 -1
- package/dist/Internal.d.ts +7 -0
- package/dist/Internal.d.ts.map +1 -0
- package/dist/Internal.js +12 -0
- package/dist/Internal.js.map +1 -0
- package/dist/KyselyStorage.d.ts +28 -2
- package/dist/KyselyStorage.d.ts.map +1 -1
- package/dist/KyselyStorage.js +223 -33
- package/dist/KyselyStorage.js.map +1 -1
- package/dist/Mailer.d.ts +116 -0
- package/dist/Mailer.d.ts.map +1 -0
- package/dist/Mailer.js +101 -0
- package/dist/Mailer.js.map +1 -0
- package/dist/Password.d.ts +107 -0
- package/dist/Password.d.ts.map +1 -0
- package/dist/Password.js +252 -0
- package/dist/Password.js.map +1 -0
- package/dist/Policy.d.ts +7 -4
- package/dist/Policy.d.ts.map +1 -1
- package/dist/Policy.js +28 -5
- package/dist/Policy.js.map +1 -1
- package/dist/Privacy.d.ts +15 -0
- package/dist/Privacy.d.ts.map +1 -1
- package/dist/Privacy.js +58 -1
- package/dist/Privacy.js.map +1 -1
- package/dist/RateLimiter.d.ts +104 -0
- package/dist/RateLimiter.d.ts.map +1 -0
- package/dist/RateLimiter.js +118 -0
- package/dist/RateLimiter.js.map +1 -0
- package/dist/Sessions.d.ts +73 -11
- package/dist/Sessions.d.ts.map +1 -1
- package/dist/Sessions.js +412 -1
- package/dist/Sessions.js.map +1 -1
- package/dist/Storage.d.ts +60 -5
- package/dist/Storage.d.ts.map +1 -1
- package/dist/Storage.js +11 -1
- package/dist/Storage.js.map +1 -1
- package/dist/StorageMigrations.d.ts +2 -1
- package/dist/StorageMigrations.d.ts.map +1 -1
- package/dist/StorageMigrations.js +33 -2
- package/dist/StorageMigrations.js.map +1 -1
- package/dist/Testing.d.ts +9 -1
- package/dist/Testing.d.ts.map +1 -1
- package/dist/Testing.js +30 -2
- package/dist/Testing.js.map +1 -1
- package/dist/WaitUntil.d.ts.map +1 -1
- package/dist/WaitUntil.js +1 -1
- package/dist/WaitUntil.js.map +1 -1
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts +34 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js +30 -0
- package/dist/alchemy/cloudflare/RateLimitDurableObject.js.map +1 -0
- package/dist/cloudflare/RateLimitDurableObject.d.ts +50 -0
- package/dist/cloudflare/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/cloudflare/RateLimitDurableObject.js +51 -0
- package/dist/cloudflare/RateLimitDurableObject.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/RateLimitDurableObject.d.ts +32 -0
- package/dist/internal/RateLimitDurableObject.d.ts.map +1 -0
- package/dist/internal/RateLimitDurableObject.js +80 -0
- package/dist/internal/RateLimitDurableObject.js.map +1 -0
- package/migrations/0002_auth_password.sql +25 -0
- 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":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { Context, Duration, Effect, Layer, Redacted } from "effect";
|
|
2
|
+
import { AuthFlow } from "./AuthFlow.js";
|
|
3
|
+
import type { AuthFlowService, AuthFlowPrimaryFactorResult, AuthResultOf } from "./AuthFlow.js";
|
|
4
|
+
import { Challenge } from "./Challenge.js";
|
|
5
|
+
import type { ChallengeService } from "./Challenge.js";
|
|
6
|
+
import { Crypto } from "./Crypto.js";
|
|
7
|
+
import type { CryptoService } from "./Crypto.js";
|
|
8
|
+
import type { ChallengeId, UnixMillis } from "./Identifiers.js";
|
|
9
|
+
import { Email } from "./Identifiers.js";
|
|
10
|
+
import { AuthMailer } from "./Mailer.js";
|
|
11
|
+
import type { AuthMailerService } from "./Mailer.js";
|
|
12
|
+
import { UserStore } from "./Storage.js";
|
|
13
|
+
import type { UserStoreService } from "./Storage.js";
|
|
14
|
+
export interface EmailOtpStartInput {
|
|
15
|
+
readonly email: Email;
|
|
16
|
+
readonly secret?: Redacted.Redacted<string>;
|
|
17
|
+
readonly ttl?: Duration.Duration;
|
|
18
|
+
readonly locale?: string;
|
|
19
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
20
|
+
}
|
|
21
|
+
export interface EmailOtpStarted {
|
|
22
|
+
readonly challengeId: ChallengeId;
|
|
23
|
+
readonly email: Email;
|
|
24
|
+
readonly expiresAt: UnixMillis;
|
|
25
|
+
}
|
|
26
|
+
export interface EmailOtpVerifyInput {
|
|
27
|
+
readonly challengeId: ChallengeId;
|
|
28
|
+
readonly secret: Redacted.Redacted<string>;
|
|
29
|
+
}
|
|
30
|
+
declare const EmailOtpStartError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
31
|
+
readonly _tag: "EmailOtpStartError";
|
|
32
|
+
} & Readonly<A>;
|
|
33
|
+
export declare class EmailOtpStartError extends EmailOtpStartError_base<{
|
|
34
|
+
readonly message: string;
|
|
35
|
+
readonly cause?: unknown;
|
|
36
|
+
}> {
|
|
37
|
+
}
|
|
38
|
+
declare const EmailOtpVerifyError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
39
|
+
readonly _tag: "EmailOtpVerifyError";
|
|
40
|
+
} & Readonly<A>;
|
|
41
|
+
export declare class EmailOtpVerifyError extends EmailOtpVerifyError_base<{
|
|
42
|
+
readonly message: string;
|
|
43
|
+
readonly cause?: unknown;
|
|
44
|
+
}> {
|
|
45
|
+
}
|
|
46
|
+
export type EmailOtpSecretGeneratorOperation = "generate" | "normalize";
|
|
47
|
+
declare const EmailOtpSecretGeneratorError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
48
|
+
readonly _tag: "EmailOtpSecretGeneratorError";
|
|
49
|
+
} & Readonly<A>;
|
|
50
|
+
export declare class EmailOtpSecretGeneratorError extends EmailOtpSecretGeneratorError_base<{
|
|
51
|
+
readonly operation: EmailOtpSecretGeneratorOperation;
|
|
52
|
+
readonly message: string;
|
|
53
|
+
readonly cause?: unknown;
|
|
54
|
+
}> {
|
|
55
|
+
}
|
|
56
|
+
export type EmailOtpError = EmailOtpStartError | EmailOtpVerifyError;
|
|
57
|
+
export type EmailOtpVerifyResult = AuthFlowPrimaryFactorResult<"email-otp"> | AuthResultOf<"InvalidCredentials" | "AccountDisabled">;
|
|
58
|
+
export interface EmailOtpLoginService {
|
|
59
|
+
readonly start: (input: EmailOtpStartInput) => Effect.Effect<EmailOtpStarted, EmailOtpStartError>;
|
|
60
|
+
readonly verify: (input: EmailOtpVerifyInput) => Effect.Effect<EmailOtpVerifyResult, EmailOtpVerifyError>;
|
|
61
|
+
}
|
|
62
|
+
declare const EmailOtpLogin_base: Context.ServiceClass<EmailOtpLogin, "auth/login/EmailOtp", EmailOtpLoginService>;
|
|
63
|
+
export declare class EmailOtpLogin extends EmailOtpLogin_base {
|
|
64
|
+
}
|
|
65
|
+
export declare namespace EmailOtpLogin {
|
|
66
|
+
const make: (service: EmailOtpLoginService) => EmailOtpLoginService;
|
|
67
|
+
}
|
|
68
|
+
export interface EmailOtpSecretGenerateInput {
|
|
69
|
+
readonly email: Email;
|
|
70
|
+
readonly locale?: string;
|
|
71
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
72
|
+
}
|
|
73
|
+
export interface GeneratedEmailOtpSecret {
|
|
74
|
+
readonly secret: Redacted.Redacted<string>;
|
|
75
|
+
}
|
|
76
|
+
export interface EmailOtpSecretNormalizeInput {
|
|
77
|
+
readonly secret: Redacted.Redacted<string>;
|
|
78
|
+
}
|
|
79
|
+
export interface EmailOtpSecretGeneratorService {
|
|
80
|
+
readonly generate: (input: EmailOtpSecretGenerateInput) => Effect.Effect<GeneratedEmailOtpSecret, EmailOtpSecretGeneratorError>;
|
|
81
|
+
readonly normalize: (input: EmailOtpSecretNormalizeInput) => Effect.Effect<Redacted.Redacted<string>, EmailOtpSecretGeneratorError>;
|
|
82
|
+
}
|
|
83
|
+
declare const EmailOtpSecretGenerator_base: Context.ServiceClass<EmailOtpSecretGenerator, "auth/email-otp/SecretGenerator", EmailOtpSecretGeneratorService>;
|
|
84
|
+
export declare class EmailOtpSecretGenerator extends EmailOtpSecretGenerator_base {
|
|
85
|
+
}
|
|
86
|
+
export declare namespace EmailOtpSecretGenerator {
|
|
87
|
+
const make: (service: EmailOtpSecretGeneratorService) => EmailOtpSecretGeneratorService;
|
|
88
|
+
}
|
|
89
|
+
export interface EmailOtpSecretGeneratorOptions {
|
|
90
|
+
readonly alphabet?: string;
|
|
91
|
+
readonly length?: number;
|
|
92
|
+
}
|
|
93
|
+
export interface EmailOtpOptions extends EmailOtpSecretGeneratorOptions {
|
|
94
|
+
readonly ttl?: Duration.Duration;
|
|
95
|
+
readonly userIdBytes?: number;
|
|
96
|
+
}
|
|
97
|
+
export interface EmailOtpDependencies extends EmailOtpOptions {
|
|
98
|
+
readonly challenge: ChallengeService;
|
|
99
|
+
readonly users: UserStoreService;
|
|
100
|
+
readonly crypto: CryptoService;
|
|
101
|
+
readonly authFlow: AuthFlowService;
|
|
102
|
+
readonly authMailer: AuthMailerService;
|
|
103
|
+
readonly secretGenerator: EmailOtpSecretGeneratorService;
|
|
104
|
+
}
|
|
105
|
+
export declare const defaultEmailOtpTtl: Duration.Duration;
|
|
106
|
+
export declare const defaultEmailOtpAlphabet = "0123456789";
|
|
107
|
+
export declare const defaultEmailOtpLength = 6;
|
|
108
|
+
export interface AlphabetEmailOtpSecretGeneratorDependencies extends EmailOtpSecretGeneratorOptions {
|
|
109
|
+
readonly crypto: CryptoService;
|
|
110
|
+
}
|
|
111
|
+
export declare const makeAlphabetEmailOtpSecretGenerator: (dependencies: AlphabetEmailOtpSecretGeneratorDependencies) => EmailOtpSecretGeneratorService;
|
|
112
|
+
export declare const EmailOtpSecretGeneratorLive: (options?: EmailOtpSecretGeneratorOptions) => Layer.Layer<EmailOtpSecretGenerator, never, Crypto>;
|
|
113
|
+
export declare const makeEmailOtpLogin: (dependencies: EmailOtpDependencies) => EmailOtpLoginService;
|
|
114
|
+
export declare const EmailOtpLoginLive: (options?: EmailOtpOptions) => Layer.Layer<EmailOtpLogin, never, Crypto | Challenge | UserStore | AuthFlow | AuthMailer | EmailOtpSecretGenerator>;
|
|
115
|
+
export declare const EmailOtpFeatureLive: Layer.Layer<EmailOtpLogin | EmailOtpSecretGenerator, never, Crypto | Challenge | UserStore | AuthFlow | AuthMailer>;
|
|
116
|
+
export {};
|
|
117
|
+
//# sourceMappingURL=EmailOtp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailOtp.d.ts","sourceRoot":"","sources":["../src/EmailOtp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAEP,QAAQ,EACR,MAAM,EACN,KAAK,EAEL,QAAQ,EACT,MAAM,QAAQ,CAAC;AAGhB,OAAO,EAAE,QAAQ,EAAc,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EACV,eAAe,EACf,2BAA2B,EAC3B,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,KAAK,EAAU,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAW,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C;;;;AAED,qBAAa,kBAAmB,SAAQ,wBAEtC;IACA,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;;;;AAEL,qBAAa,mBAAoB,SAAQ,yBAEvC;IACA,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,MAAM,gCAAgC,GAAG,UAAU,GAAG,WAAW,CAAC;;;;AAExE,qBAAa,4BAA6B,SAAQ,kCAEhD;IACA,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,mBAAmB,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAC5B,2BAA2B,CAAC,WAAW,CAAC,GACxC,YAAY,CAAC,oBAAoB,GAAG,iBAAiB,CAAC,CAAC;AAE3D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,CACd,KAAK,EAAE,kBAAkB,KACtB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,CACf,KAAK,EAAE,mBAAmB,KACvB,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC;CAC/D;;AAED,qBAAa,aAAc,SAAQ,kBAGT;CAAG;AAE7B,yBAAiB,aAAa,CAAC;IACtB,MAAM,IAAI,GAAI,SAAS,oBAAoB,KAAG,oBAC1B,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,2BAA2B,KAC/B,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,4BAA4B,CAAC,CAAC;IAC1E,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,4BAA4B,KAChC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC,CAAC;CAC7E;;AAED,qBAAa,uBAAwB,SAAQ,4BAGR;CAAG;AAExC,yBAAiB,uBAAuB,CAAC;IAChC,MAAM,IAAI,GACf,SAAS,8BAA8B,KACtC,8BAAqE,CAAC;CAC1E;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAgB,SAAQ,8BAA8B;IACrE,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,8BAA8B,CAAC;CAC1D;AAMD,eAAO,MAAM,kBAAkB,mBAAuB,CAAC;AACvD,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAgFvC,MAAM,WAAW,2CACf,SAAQ,8BAA8B;IACtC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC;AAED,eAAO,MAAM,mCAAmC,GAC9C,cAAc,2CAA2C,KACxD,8BAwBF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,UAAU,8BAA8B,wDAavC,CAAC;AAgLJ,eAAO,MAAM,iBAAiB,GAC5B,cAAc,oBAAoB,KACjC,oBAoHF,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,UAAU,eAAe,wHAqBxD,CAAC;AAEJ,eAAO,MAAM,mBAAmB,qHAE/B,CAAC"}
|