@yielded/auth-persistence-drizzle 0.1.0-beta.1 → 0.1.0-beta.13
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/dist/D1.d.mts +23 -18
- package/dist/D1.mjs +10 -4
- package/dist/D1.mjs.map +1 -1
- package/dist/Libsql.d.mts +58 -53
- package/dist/Libsql.mjs +20 -15
- package/dist/Libsql.mjs.map +1 -1
- package/dist/Mysql2.d.mts +58 -46
- package/dist/Mysql2.mjs +13 -6
- package/dist/Mysql2.mjs.map +1 -1
- package/dist/Pglite.d.mts +52 -41
- package/dist/Pglite.mjs +12 -7
- package/dist/Pglite.mjs.map +1 -1
- package/dist/Postgres.d.mts +59 -48
- package/dist/Postgres.mjs +12 -7
- package/dist/Postgres.mjs.map +1 -1
- package/dist/SqliteBun.d.mts +67 -62
- package/dist/SqliteBun.mjs +20 -14
- package/dist/SqliteBun.mjs.map +1 -1
- package/dist/SqliteDo.d.mts +58 -52
- package/dist/SqliteDo.mjs +26 -14
- package/dist/SqliteDo.mjs.map +1 -1
- package/dist/SqliteNode.d.mts +58 -53
- package/dist/SqliteNode.mjs +20 -14
- package/dist/SqliteNode.mjs.map +1 -1
- package/dist/SqliteWasm.d.mts +58 -53
- package/dist/SqliteWasm.mjs +20 -14
- package/dist/SqliteWasm.mjs.map +1 -1
- package/dist/drizzle/d1-database.d.mts +11 -0
- package/dist/drizzle/d1-database.mjs +8 -0
- package/dist/drizzle/d1-database.mjs.map +1 -0
- package/dist/drizzle/d1-emails.d.mts +8 -7
- package/dist/drizzle/d1-emails.mjs +7 -4
- package/dist/drizzle/d1-emails.mjs.map +1 -1
- package/dist/drizzle/d1-identity.mjs +12 -9
- package/dist/drizzle/d1-identity.mjs.map +1 -1
- package/dist/drizzle/d1-oauth.d.mts +10 -9
- package/dist/drizzle/d1-oauth.mjs +7 -4
- package/dist/drizzle/d1-oauth.mjs.map +1 -1
- package/dist/drizzle/d1-passkey.d.mts +3 -14
- package/dist/drizzle/d1-passkey.mjs +2 -1
- package/dist/drizzle/d1-passkey.mjs.map +1 -1
- package/dist/drizzle/d1-password-prepared.d.mts +4 -3
- package/dist/drizzle/d1-password-prepared.mjs +3 -1
- package/dist/drizzle/d1-password-prepared.mjs.map +1 -1
- package/dist/drizzle/d1-passwords.d.mts +6 -5
- package/dist/drizzle/d1-passwords.mjs +11 -7
- package/dist/drizzle/d1-passwords.mjs.map +1 -1
- package/dist/drizzle/d1-phone.d.mts +3 -4
- package/dist/drizzle/d1-phone.mjs +2 -1
- package/dist/drizzle/d1-phone.mjs.map +1 -1
- package/dist/drizzle/d1-planning.d.mts +1 -1
- package/dist/drizzle/d1-proofs.d.mts +4 -3
- package/dist/drizzle/d1-proofs.mjs +3 -1
- package/dist/drizzle/d1-proofs.mjs.map +1 -1
- package/dist/drizzle/d1-sessions.d.mts +11 -10
- package/dist/drizzle/d1-sessions.mjs +15 -9
- package/dist/drizzle/d1-sessions.mjs.map +1 -1
- package/dist/drizzle/d1-totp.d.mts +3 -4
- package/dist/drizzle/d1-totp.mjs +2 -1
- package/dist/drizzle/d1-totp.mjs.map +1 -1
- package/dist/drizzle/email-registration.mjs +2 -1
- package/dist/drizzle/email-registration.mjs.map +1 -1
- package/dist/drizzle/email-target.d.mts +7 -6
- package/dist/drizzle/email-target.mjs +10 -10
- package/dist/drizzle/email-target.mjs.map +1 -1
- package/dist/drizzle/mysql-database.d.mts +8 -0
- package/dist/drizzle/mysql-database.mjs +8 -0
- package/dist/drizzle/mysql-database.mjs.map +1 -0
- package/dist/drizzle/mysql-emails.d.mts +7 -6
- package/dist/drizzle/mysql-emails.mjs +12 -8
- package/dist/drizzle/mysql-emails.mjs.map +1 -1
- package/dist/drizzle/mysql-identity.mjs +12 -9
- package/dist/drizzle/mysql-identity.mjs.map +1 -1
- package/dist/drizzle/mysql-password-prepared.d.mts +3 -2
- package/dist/drizzle/mysql-password-prepared.mjs +6 -2
- package/dist/drizzle/mysql-password-prepared.mjs.map +1 -1
- package/dist/drizzle/mysql-passwords.d.mts +6 -4
- package/dist/drizzle/mysql-passwords.mjs +11 -7
- package/dist/drizzle/mysql-passwords.mjs.map +1 -1
- package/dist/drizzle/mysql-proofs.d.mts +3 -2
- package/dist/drizzle/mysql-proofs.mjs +8 -4
- package/dist/drizzle/mysql-proofs.mjs.map +1 -1
- package/dist/drizzle/mysql-sessions.d.mts +11 -10
- package/dist/drizzle/mysql-sessions.mjs +16 -12
- package/dist/drizzle/mysql-sessions.mjs.map +1 -1
- package/dist/drizzle/native-database.mjs +10 -0
- package/dist/drizzle/native-database.mjs.map +1 -0
- package/dist/drizzle/oauth-connected-drivers.mjs +7 -5
- package/dist/drizzle/oauth-connected-drivers.mjs.map +1 -1
- package/dist/drizzle/oauth-connected-settlement.mjs +3 -2
- package/dist/drizzle/oauth-connected-settlement.mjs.map +1 -1
- package/dist/drizzle/oauth-connected-sign-in.mjs +4 -3
- package/dist/drizzle/oauth-connected-sign-in.mjs.map +1 -1
- package/dist/drizzle/oauth-connected-target.d.mts +6 -7
- package/dist/drizzle/oauth-connected-target.mjs +4 -5
- package/dist/drizzle/oauth-connected-target.mjs.map +1 -1
- package/dist/drizzle/oauth-drivers.mjs +8 -6
- package/dist/drizzle/oauth-drivers.mjs.map +1 -1
- package/dist/drizzle/oauth-target.d.mts +12 -11
- package/dist/drizzle/oauth-target.mjs +13 -12
- package/dist/drizzle/oauth-target.mjs.map +1 -1
- package/dist/drizzle/passkey-drivers.mjs +8 -6
- package/dist/drizzle/passkey-drivers.mjs.map +1 -1
- package/dist/drizzle/passkey-write-drivers.mjs +5 -3
- package/dist/drizzle/passkey-write-drivers.mjs.map +1 -1
- package/dist/drizzle/passkey-write-target.d.mts +1 -1
- package/dist/drizzle/password-prepared-sql.mjs +2 -1
- package/dist/drizzle/password-prepared-sql.mjs.map +1 -1
- package/dist/drizzle/password-prepared-target.d.mts +3 -2
- package/dist/drizzle/password-prepared-target.mjs +4 -3
- package/dist/drizzle/password-prepared-target.mjs.map +1 -1
- package/dist/drizzle/password-registration.mjs +2 -1
- package/dist/drizzle/password-registration.mjs.map +1 -1
- package/dist/drizzle/password-target.d.mts +5 -4
- package/dist/drizzle/password-target.mjs +8 -8
- package/dist/drizzle/password-target.mjs.map +1 -1
- package/dist/drizzle/pg-database.d.mts +9 -0
- package/dist/drizzle/pg-database.mjs +8 -0
- package/dist/drizzle/pg-database.mjs.map +1 -0
- package/dist/drizzle/pg-emails.d.mts +7 -6
- package/dist/drizzle/pg-emails.mjs +12 -8
- package/dist/drizzle/pg-emails.mjs.map +1 -1
- package/dist/drizzle/pg-identity.mjs +12 -9
- package/dist/drizzle/pg-identity.mjs.map +1 -1
- package/dist/drizzle/pg-password-prepared.d.mts +3 -2
- package/dist/drizzle/pg-password-prepared.mjs +6 -2
- package/dist/drizzle/pg-password-prepared.mjs.map +1 -1
- package/dist/drizzle/pg-passwords.d.mts +6 -4
- package/dist/drizzle/pg-passwords.mjs +11 -7
- package/dist/drizzle/pg-passwords.mjs.map +1 -1
- package/dist/drizzle/pg-proofs.d.mts +3 -2
- package/dist/drizzle/pg-proofs.mjs +8 -4
- package/dist/drizzle/pg-proofs.mjs.map +1 -1
- package/dist/drizzle/pg-sessions.d.mts +11 -10
- package/dist/drizzle/pg-sessions.mjs +16 -12
- package/dist/drizzle/pg-sessions.mjs.map +1 -1
- package/dist/drizzle/phone-target.d.mts +4 -3
- package/dist/drizzle/phone-target.mjs +12 -11
- package/dist/drizzle/phone-target.mjs.map +1 -1
- package/dist/drizzle/proof-target.d.mts +3 -2
- package/dist/drizzle/proof-target.mjs +5 -5
- package/dist/drizzle/proof-target.mjs.map +1 -1
- package/dist/drizzle/session-sql.d.mts +1 -0
- package/dist/drizzle/session-target.d.mts +10 -8
- package/dist/drizzle/session-target.mjs +11 -11
- package/dist/drizzle/session-target.mjs.map +1 -1
- package/dist/drizzle/sqlite-emails.mjs +9 -5
- package/dist/drizzle/sqlite-emails.mjs.map +1 -1
- package/dist/drizzle/sqlite-identity.mjs +14 -11
- package/dist/drizzle/sqlite-identity.mjs.map +1 -1
- package/dist/drizzle/sqlite-password-prepared.mjs +7 -3
- package/dist/drizzle/sqlite-password-prepared.mjs.map +1 -1
- package/dist/drizzle/sqlite-passwords.mjs +10 -6
- package/dist/drizzle/sqlite-passwords.mjs.map +1 -1
- package/dist/drizzle/sqlite-proofs.mjs +7 -3
- package/dist/drizzle/sqlite-proofs.mjs.map +1 -1
- package/dist/drizzle/sqlite-sessions.mjs +16 -12
- package/dist/drizzle/sqlite-sessions.mjs.map +1 -1
- package/dist/drizzle/standalone-guard.d.mts +2 -0
- package/dist/drizzle/standalone-guard.mjs +8 -4
- package/dist/drizzle/standalone-guard.mjs.map +1 -1
- package/dist/drizzle/totp-target.d.mts +4 -3
- package/dist/drizzle/totp-target.mjs +31 -28
- package/dist/drizzle/totp-target.mjs.map +1 -1
- package/package.json +1 -1
- package/src/D1.ts +37 -10
- package/src/Libsql.ts +45 -17
- package/src/Mysql2.ts +39 -13
- package/src/Pglite.ts +47 -13
- package/src/Postgres.ts +47 -13
- package/src/SqliteBun.ts +58 -30
- package/src/SqliteDo.ts +61 -19
- package/src/SqliteNode.ts +55 -28
- package/src/SqliteWasm.ts +55 -28
- package/src/drizzle/d1-database.ts +10 -0
- package/src/drizzle/d1-emails.ts +84 -84
- package/src/drizzle/d1-identity.ts +17 -20
- package/src/drizzle/d1-oauth.ts +19 -8
- package/src/drizzle/d1-passkey.ts +5 -1
- package/src/drizzle/d1-password-prepared.ts +38 -37
- package/src/drizzle/d1-passwords.ts +118 -108
- package/src/drizzle/d1-phone.ts +5 -1
- package/src/drizzle/d1-proofs.ts +29 -30
- package/src/drizzle/d1-sessions.ts +51 -38
- package/src/drizzle/d1-totp.ts +5 -1
- package/src/drizzle/email-registration.ts +6 -2
- package/src/drizzle/email-target.ts +17 -19
- package/src/drizzle/mysql-database.ts +8 -0
- package/src/drizzle/mysql-emails.ts +28 -16
- package/src/drizzle/mysql-identity.ts +18 -21
- package/src/drizzle/mysql-password-prepared.ts +10 -8
- package/src/drizzle/mysql-passwords.ts +21 -9
- package/src/drizzle/mysql-proofs.ts +16 -5
- package/src/drizzle/mysql-sessions.ts +40 -17
- package/src/drizzle/native-database.ts +22 -0
- package/src/drizzle/oauth-connected-drivers.ts +18 -6
- package/src/drizzle/oauth-connected-settlement.ts +5 -3
- package/src/drizzle/oauth-connected-sign-in.ts +7 -3
- package/src/drizzle/oauth-connected-target.ts +16 -17
- package/src/drizzle/oauth-drivers.ts +26 -10
- package/src/drizzle/oauth-target.ts +30 -42
- package/src/drizzle/passkey-drivers.ts +21 -13
- package/src/drizzle/passkey-write-drivers.ts +11 -6
- package/src/drizzle/password-prepared-sql.ts +2 -4
- package/src/drizzle/password-prepared-target.ts +9 -6
- package/src/drizzle/password-registration.ts +7 -8
- package/src/drizzle/password-target.ts +19 -18
- package/src/drizzle/pg-database.ts +10 -0
- package/src/drizzle/pg-emails.ts +28 -16
- package/src/drizzle/pg-identity.ts +18 -22
- package/src/drizzle/pg-password-prepared.ts +10 -8
- package/src/drizzle/pg-passwords.ts +21 -9
- package/src/drizzle/pg-proofs.ts +16 -5
- package/src/drizzle/pg-sessions.ts +40 -17
- package/src/drizzle/phone-target.ts +22 -17
- package/src/drizzle/proof-target.ts +9 -12
- package/src/drizzle/session-target.ts +32 -50
- package/src/drizzle/sqlite-emails.ts +30 -13
- package/src/drizzle/sqlite-identity.ts +22 -42
- package/src/drizzle/sqlite-password-prepared.ts +23 -9
- package/src/drizzle/sqlite-passwords.ts +29 -15
- package/src/drizzle/sqlite-proofs.ts +28 -5
- package/src/drizzle/sqlite-sessions.ts +49 -23
- package/src/drizzle/standalone-guard.ts +18 -6
- package/src/drizzle/totp-target.ts +61 -60
- package/dist/drizzle/d1-identity.d.mts +0 -30
- package/dist/drizzle/mysql-identity.d.mts +0 -21
- package/dist/drizzle/pg-identity.d.mts +0 -22
package/src/drizzle/d1-emails.ts
CHANGED
|
@@ -37,6 +37,7 @@ import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
|
37
37
|
import { Schema, Cause, DateTime, Effect, Option, Context } from "effect";
|
|
38
38
|
import type { Statement } from "effect/sql/Statement";
|
|
39
39
|
|
|
40
|
+
import { Database as DatabaseService } from "./d1-database";
|
|
40
41
|
import { CurrentD1PlanningDatabase, makeD1Owner } from "./d1-planning";
|
|
41
42
|
import { compileD1ProofCompletionPlan } from "./d1-proofs";
|
|
42
43
|
import { D1BatchStatements } from "./D1BatchStatements";
|
|
@@ -1268,10 +1269,9 @@ export const makeD1EmailSignInServices = <
|
|
|
1268
1269
|
C extends AnySQLiteTable,
|
|
1269
1270
|
NativeId,
|
|
1270
1271
|
>(
|
|
1271
|
-
database: Database,
|
|
1272
1272
|
mapping: EmailSignInMapping<S, I, C, NativeId>,
|
|
1273
1273
|
) =>
|
|
1274
|
-
Effect.
|
|
1274
|
+
Effect.map(DatabaseService, (database) => ({
|
|
1275
1275
|
emailSignInTargets: EmailSignInTargets.of({
|
|
1276
1276
|
lookup: (input) => {
|
|
1277
1277
|
if (!validEmailSignInConstraints(mapping as any)) return Effect.fail(unavailable());
|
|
@@ -1293,9 +1293,9 @@ export const makeD1EmailSignInServices = <
|
|
|
1293
1293
|
);
|
|
1294
1294
|
},
|
|
1295
1295
|
}),
|
|
1296
|
-
});
|
|
1296
|
+
}));
|
|
1297
1297
|
|
|
1298
|
-
export const makeD1EmailAddressServices = <
|
|
1298
|
+
export const makeD1EmailAddressServices = Effect.fnUntraced(function* <
|
|
1299
1299
|
S extends AnySQLiteTable,
|
|
1300
1300
|
I extends AnySQLiteTable,
|
|
1301
1301
|
C extends AnySQLiteTable,
|
|
@@ -1315,7 +1315,6 @@ export const makeD1EmailAddressServices = <
|
|
|
1315
1315
|
PCr extends AnySQLiteTable,
|
|
1316
1316
|
PNativeId,
|
|
1317
1317
|
>(
|
|
1318
|
-
database: Database,
|
|
1319
1318
|
mapping: D1EmailAddressMapping<S, I, C, AC, M, NativeId>,
|
|
1320
1319
|
proofMapping: D1ProofPersistenceMapping<
|
|
1321
1320
|
PRq,
|
|
@@ -1331,56 +1330,57 @@ export const makeD1EmailAddressServices = <
|
|
|
1331
1330
|
PCr,
|
|
1332
1331
|
PNativeId
|
|
1333
1332
|
>,
|
|
1334
|
-
)
|
|
1335
|
-
|
|
1336
|
-
const hooks = yield* LifecycleHooks;
|
|
1333
|
+
) {
|
|
1334
|
+
const database = yield* DatabaseService;
|
|
1337
1335
|
|
|
1338
|
-
|
|
1339
|
-
mapping as unknown as AddressMapping,
|
|
1340
|
-
proofMapping as unknown as ProofMapping,
|
|
1341
|
-
);
|
|
1336
|
+
const hooks = yield* LifecycleHooks;
|
|
1342
1337
|
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1338
|
+
const plans = makeAddressPlans(
|
|
1339
|
+
mapping as unknown as AddressMapping,
|
|
1340
|
+
proofMapping as unknown as ProofMapping,
|
|
1341
|
+
);
|
|
1346
1342
|
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1351
|
-
Effect.provideService(LifecycleHooks, hooks),
|
|
1352
|
-
);
|
|
1343
|
+
const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
|
|
1344
|
+
Effect.gen(function* () {
|
|
1345
|
+
if (yield* hasCommitScope) return yield* unavailable();
|
|
1353
1346
|
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
.
|
|
1367
|
-
.
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1347
|
+
return yield* executeStandalone(plan, 2);
|
|
1348
|
+
}).pipe(
|
|
1349
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1350
|
+
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1351
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1352
|
+
);
|
|
1353
|
+
|
|
1354
|
+
const service: EmailAddressPersistence["Service"] = {
|
|
1355
|
+
target: (input) =>
|
|
1356
|
+
plans
|
|
1357
|
+
.target(input)
|
|
1358
|
+
.pipe(
|
|
1359
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1360
|
+
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1361
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1362
|
+
translateFailure,
|
|
1363
|
+
),
|
|
1364
|
+
checkCompletion: (input) =>
|
|
1365
|
+
plans
|
|
1366
|
+
.checkCompletion(input)
|
|
1367
|
+
.pipe(
|
|
1368
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1369
|
+
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1370
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1371
|
+
translateFailure,
|
|
1372
|
+
),
|
|
1373
|
+
verifyWithProof: (input, prepare) =>
|
|
1374
|
+
run(plans.verifyWithProof(input, prepare)).pipe(translateFailure),
|
|
1375
|
+
changeWithProof: (input, prepare) =>
|
|
1376
|
+
run(plans.changeWithProof(input, prepare)).pipe(translateFailure),
|
|
1377
|
+
cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
|
|
1378
|
+
};
|
|
1382
1379
|
|
|
1383
|
-
|
|
1380
|
+
return { emailAddressPersistence: service };
|
|
1381
|
+
});
|
|
1382
|
+
|
|
1383
|
+
export const makeD1EmailRegistrationServices = Effect.fnUntraced(function* <
|
|
1384
1384
|
Registration,
|
|
1385
1385
|
S extends AnySQLiteTable,
|
|
1386
1386
|
I extends AnySQLiteTable,
|
|
@@ -1401,7 +1401,6 @@ export const makeD1EmailRegistrationServices = <
|
|
|
1401
1401
|
PCr extends AnySQLiteTable,
|
|
1402
1402
|
PNativeId,
|
|
1403
1403
|
>(
|
|
1404
|
-
database: Database,
|
|
1405
1404
|
mapping: D1EmailRegistrationMapping<Registration, S, I, C, AC, Rq, NativeId>,
|
|
1406
1405
|
proofMapping: D1ProofPersistenceMapping<
|
|
1407
1406
|
PRq,
|
|
@@ -1417,44 +1416,45 @@ export const makeD1EmailRegistrationServices = <
|
|
|
1417
1416
|
PCr,
|
|
1418
1417
|
PNativeId
|
|
1419
1418
|
>,
|
|
1420
|
-
)
|
|
1421
|
-
|
|
1422
|
-
const hooks = yield* LifecycleHooks;
|
|
1419
|
+
) {
|
|
1420
|
+
const database = yield* DatabaseService;
|
|
1423
1421
|
|
|
1424
|
-
|
|
1425
|
-
mapping as unknown as RegistrationMapping<Registration> & {
|
|
1426
|
-
readonly d1: AddressMapping["d1"];
|
|
1427
|
-
},
|
|
1428
|
-
proofMapping as unknown as ProofMapping,
|
|
1429
|
-
);
|
|
1422
|
+
const hooks = yield* LifecycleHooks;
|
|
1430
1423
|
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1424
|
+
const plans = makeRegistrationPlans(
|
|
1425
|
+
mapping as unknown as RegistrationMapping<Registration> & {
|
|
1426
|
+
readonly d1: AddressMapping["d1"];
|
|
1427
|
+
},
|
|
1428
|
+
proofMapping as unknown as ProofMapping,
|
|
1429
|
+
);
|
|
1434
1430
|
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1439
|
-
Effect.provideService(LifecycleHooks, hooks),
|
|
1440
|
-
);
|
|
1431
|
+
const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
|
|
1432
|
+
Effect.gen(function* () {
|
|
1433
|
+
if (yield* hasCommitScope) return yield* unavailable();
|
|
1441
1434
|
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1449
|
-
Effect.provideService(LifecycleHooks, hooks),
|
|
1450
|
-
translateFailure,
|
|
1451
|
-
),
|
|
1452
|
-
registerWithProof: (input, prepare) =>
|
|
1453
|
-
run(plans.registerWithProof(input, prepare)).pipe(translateFailure),
|
|
1454
|
-
};
|
|
1435
|
+
return yield* executeStandalone(plan, 2);
|
|
1436
|
+
}).pipe(
|
|
1437
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1438
|
+
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1439
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1440
|
+
);
|
|
1455
1441
|
|
|
1456
|
-
|
|
1457
|
-
|
|
1442
|
+
const service: EmailRegistrationAuthority<Registration> = {
|
|
1443
|
+
inspect: (input) =>
|
|
1444
|
+
plans
|
|
1445
|
+
.inspect(input)
|
|
1446
|
+
.pipe(
|
|
1447
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1448
|
+
Effect.provideService(CurrentEmailSql, database as unknown as EmailSqlDatabase),
|
|
1449
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1450
|
+
translateFailure,
|
|
1451
|
+
),
|
|
1452
|
+
registerWithProof: (input, prepare) =>
|
|
1453
|
+
run(plans.registerWithProof(input, prepare)).pipe(translateFailure),
|
|
1454
|
+
};
|
|
1455
|
+
|
|
1456
|
+
return { registrationAuthority: service };
|
|
1457
|
+
});
|
|
1458
1458
|
|
|
1459
1459
|
type CoordinatorError<E> = E | EmailUnavailable | HookConfigurationError;
|
|
1460
1460
|
|
|
@@ -18,7 +18,6 @@ import {
|
|
|
18
18
|
is,
|
|
19
19
|
sql,
|
|
20
20
|
SQL,
|
|
21
|
-
type AnyRelations,
|
|
22
21
|
type InferInsertModel,
|
|
23
22
|
type Table,
|
|
24
23
|
} from "drizzle-orm";
|
|
@@ -26,6 +25,7 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
|
|
|
26
25
|
import type { AnySQLiteTable, SQLiteColumn } from "drizzle-orm/sqlite-core";
|
|
27
26
|
import { Cause, Effect, Schema } from "effect";
|
|
28
27
|
|
|
28
|
+
import { Database as DatabaseService } from "./d1-database";
|
|
29
29
|
import {
|
|
30
30
|
column,
|
|
31
31
|
isMappedConstraintConflict,
|
|
@@ -92,15 +92,14 @@ const selectFields = <T extends Table>(
|
|
|
92
92
|
* database-generated subject id from the first insert via last_insert_rowid;
|
|
93
93
|
* the optional identifier then reads that stable id from the receipt.
|
|
94
94
|
*/
|
|
95
|
-
export const makeD1SubjectProvisioningServices = <
|
|
95
|
+
export const makeD1SubjectProvisioningServices = Effect.fnUntraced(function* <
|
|
96
96
|
Subject extends AnySQLiteTable,
|
|
97
97
|
Identifier extends AnySQLiteTable,
|
|
98
98
|
Request extends AnySQLiteTable,
|
|
99
99
|
NativeId,
|
|
100
|
-
>(
|
|
101
|
-
database
|
|
102
|
-
|
|
103
|
-
) => {
|
|
100
|
+
>(mapping: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>) {
|
|
101
|
+
const database = yield* DatabaseService;
|
|
102
|
+
|
|
104
103
|
const db = database as RuntimeDatabase;
|
|
105
104
|
const requestTable = mapping.provisioningRequest.table;
|
|
106
105
|
|
|
@@ -254,16 +253,15 @@ export const makeD1SubjectProvisioningServices = <
|
|
|
254
253
|
}, mapUnavailable);
|
|
255
254
|
|
|
256
255
|
return { subjectProvisioner: SubjectProvisioner.of({ provision }) } as const;
|
|
257
|
-
};
|
|
256
|
+
});
|
|
258
257
|
|
|
259
|
-
export const makeD1ExternalIdentityServices = <
|
|
258
|
+
export const makeD1ExternalIdentityServices = Effect.fnUntraced(function* <
|
|
260
259
|
Subject extends AnySQLiteTable,
|
|
261
260
|
External extends AnySQLiteTable,
|
|
262
261
|
NativeId,
|
|
263
|
-
>(
|
|
264
|
-
database
|
|
265
|
-
|
|
266
|
-
) => {
|
|
262
|
+
>(mapping: D1ExternalIdentityMapping<Subject, External, NativeId>) {
|
|
263
|
+
const database = yield* DatabaseService;
|
|
264
|
+
|
|
267
265
|
const db = database as RuntimeDatabase;
|
|
268
266
|
const externalTable = mapping.externalIdentity.table;
|
|
269
267
|
|
|
@@ -358,18 +356,17 @@ export const makeD1ExternalIdentityServices = <
|
|
|
358
356
|
}, mapUnavailable);
|
|
359
357
|
|
|
360
358
|
return { externalIdentityMutation: ExternalIdentityMutation.of({ bind }) } as const;
|
|
361
|
-
};
|
|
359
|
+
});
|
|
362
360
|
|
|
363
|
-
export const makeD1IdentityServices = <
|
|
361
|
+
export const makeD1IdentityServices = Effect.fnUntraced(function* <
|
|
364
362
|
Subject extends AnySQLiteTable,
|
|
365
363
|
Identifier extends AnySQLiteTable,
|
|
366
364
|
External extends AnySQLiteTable,
|
|
367
365
|
Request extends AnySQLiteTable,
|
|
368
366
|
NativeId,
|
|
369
|
-
>(
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
...makeD1ExternalIdentityServices(database, mapping),
|
|
367
|
+
>(mapping: D1GeneratedIdentityMapping<Subject, Identifier, External, Request, NativeId>) {
|
|
368
|
+
return {
|
|
369
|
+
...(yield* makeD1SubjectProvisioningServices(mapping)),
|
|
370
|
+
...(yield* makeD1ExternalIdentityServices(mapping)),
|
|
371
|
+
};
|
|
375
372
|
});
|
package/src/drizzle/d1-oauth.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { D1Client } from "@effect/sql-d1/D1Client";
|
|
2
|
+
import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
|
|
2
3
|
import type { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
3
4
|
import {
|
|
4
5
|
OAuthAccountsPersistence,
|
|
@@ -11,8 +12,10 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
|
|
|
11
12
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
12
13
|
import { Effect, Context } from "effect";
|
|
13
14
|
|
|
15
|
+
import { Database as DatabaseService } from "./d1-database";
|
|
14
16
|
import { makeD1Owner } from "./d1-planning";
|
|
15
17
|
import { D1BatchStatements } from "./D1BatchStatements";
|
|
18
|
+
import { nativeDatabase } from "./native-database";
|
|
16
19
|
import type {
|
|
17
20
|
OAuthAccountsMapping,
|
|
18
21
|
OAuthD1Mapping,
|
|
@@ -54,9 +57,11 @@ export const makeD1OAuthAccountsServices = <
|
|
|
54
57
|
U extends SQLiteTable,
|
|
55
58
|
N,
|
|
56
59
|
>(
|
|
57
|
-
database: Database,
|
|
58
60
|
mapping: OAuthAccountsMapping<S, O, C, AC, F, T, U, N> & OAuthD1Mapping,
|
|
59
|
-
) =>
|
|
61
|
+
) =>
|
|
62
|
+
makeTargetOAuthAccountsServices(mapping, configuration).pipe(
|
|
63
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
|
|
64
|
+
);
|
|
60
65
|
|
|
61
66
|
export const makeD1OAuthSignInServices = <
|
|
62
67
|
S extends SQLiteTable,
|
|
@@ -66,9 +71,11 @@ export const makeD1OAuthSignInServices = <
|
|
|
66
71
|
F extends SQLiteTable,
|
|
67
72
|
N,
|
|
68
73
|
>(
|
|
69
|
-
database: Database,
|
|
70
74
|
mapping: OAuthSignInMapping<S, O, C, AC, F, N> & OAuthD1Mapping,
|
|
71
|
-
) =>
|
|
75
|
+
) =>
|
|
76
|
+
makeTargetOAuthSignInServices(mapping, configuration).pipe(
|
|
77
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
|
|
78
|
+
);
|
|
72
79
|
|
|
73
80
|
export const makeD1OAuthRegistrationIntentServices = <
|
|
74
81
|
S extends SQLiteTable,
|
|
@@ -80,9 +87,11 @@ export const makeD1OAuthRegistrationIntentServices = <
|
|
|
80
87
|
I extends SQLiteTable,
|
|
81
88
|
N,
|
|
82
89
|
>(
|
|
83
|
-
database: Database,
|
|
84
90
|
mapping: OAuthRegistrationIntentMapping<S, O, C, AC, F, T, I, N> & OAuthD1Mapping,
|
|
85
|
-
) =>
|
|
91
|
+
) =>
|
|
92
|
+
makeTargetOAuthRegistrationIntentServices(mapping, configuration).pipe(
|
|
93
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
|
|
94
|
+
);
|
|
86
95
|
|
|
87
96
|
export const makeD1OAuthRegistrationServices = <
|
|
88
97
|
Registration,
|
|
@@ -95,9 +104,11 @@ export const makeD1OAuthRegistrationServices = <
|
|
|
95
104
|
R extends SQLiteTable,
|
|
96
105
|
N,
|
|
97
106
|
>(
|
|
98
|
-
database: Database,
|
|
99
107
|
mapping: OAuthRegistrationMapping<Registration, S, O, C, AC, T, I, R, N> & OAuthD1Mapping,
|
|
100
|
-
) =>
|
|
108
|
+
) =>
|
|
109
|
+
makeTargetOAuthRegistrationServices<Registration>(mapping, configuration).pipe(
|
|
110
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(DatabaseService)),
|
|
111
|
+
);
|
|
101
112
|
|
|
102
113
|
export function coordinateD1OAuthSignIn<
|
|
103
114
|
S extends SQLiteTable,
|
|
@@ -10,6 +10,7 @@ import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
|
|
|
10
10
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
11
11
|
import { Effect, Context } from "effect";
|
|
12
12
|
|
|
13
|
+
import { Database as DatabaseService } from "./d1-database";
|
|
13
14
|
import { makeD1Owner } from "./d1-planning";
|
|
14
15
|
import { D1BatchStatements } from "./D1BatchStatements";
|
|
15
16
|
import { makePasskeyTarget } from "./passkey-drivers";
|
|
@@ -38,7 +39,10 @@ const configuration = {
|
|
|
38
39
|
standaloneGuard: () => Effect.void,
|
|
39
40
|
};
|
|
40
41
|
|
|
41
|
-
const target = makePasskeyTarget<Database, Table, D1PasskeyMapping>(
|
|
42
|
+
const target = makePasskeyTarget<DatabaseService, Database, Table, D1PasskeyMapping>(
|
|
43
|
+
DatabaseService,
|
|
44
|
+
configuration,
|
|
45
|
+
);
|
|
42
46
|
|
|
43
47
|
export const {
|
|
44
48
|
makePasskeyCredentialServices,
|
|
@@ -32,6 +32,7 @@ import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
|
32
32
|
import { Cause, DateTime, Effect, Predicate, Redacted, Schema, Context } from "effect";
|
|
33
33
|
import type { Statement } from "effect/sql/Statement";
|
|
34
34
|
|
|
35
|
+
import { Database as DatabaseService } from "./d1-database";
|
|
35
36
|
import { balancedD1And as and, compactD1GeneratedStatement } from "./d1-generated-statement";
|
|
36
37
|
import { passwordD1Kernel as kernel } from "./d1-passwords";
|
|
37
38
|
import { CurrentD1PlanningDatabase, makeD1Owner } from "./d1-planning";
|
|
@@ -964,7 +965,7 @@ const makePreparedPlans = (mapping: Mapping, proofMapping?: any) => {
|
|
|
964
965
|
return services;
|
|
965
966
|
};
|
|
966
967
|
|
|
967
|
-
export const makeD1PasswordPreparedPersistenceServices = <
|
|
968
|
+
export const makeD1PasswordPreparedPersistenceServices = Effect.fnUntraced(function* <
|
|
968
969
|
S extends AnySQLiteTable,
|
|
969
970
|
I extends AnySQLiteTable,
|
|
970
971
|
C extends AnySQLiteTable,
|
|
@@ -984,47 +985,47 @@ export const makeD1PasswordPreparedPersistenceServices = <
|
|
|
984
985
|
PCr extends AnySQLiteTable = AnySQLiteTable,
|
|
985
986
|
PNativeId = unknown,
|
|
986
987
|
>(
|
|
987
|
-
database: Database,
|
|
988
988
|
mapping: D1PasswordPreparedPersistenceMapping<S, I, C, AC, At, RS, CE, M, T, B, NativeId>,
|
|
989
989
|
proofMapping?: D1PasswordPreparedProofMapping<PS, PC, PM, PSub, PI, PCr, PNativeId>,
|
|
990
|
-
)
|
|
991
|
-
|
|
992
|
-
const hooks = yield* LifecycleHooks;
|
|
993
|
-
const plans = makePreparedPlans(mapping as unknown as Mapping, proofMapping);
|
|
990
|
+
) {
|
|
991
|
+
const database = yield* DatabaseService;
|
|
994
992
|
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
if (yield* hasCommitScope) return yield* unavailable();
|
|
993
|
+
const hooks = yield* LifecycleHooks;
|
|
994
|
+
const plans = makePreparedPlans(mapping as unknown as Mapping, proofMapping);
|
|
998
995
|
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
|
|
1003
|
-
Effect.provideService(LifecycleHooks, hooks),
|
|
1004
|
-
);
|
|
996
|
+
const run = <Out, Err, Env>(plan: Effect.Effect<Planned<Out>, Err, Env>) =>
|
|
997
|
+
Effect.gen(function* () {
|
|
998
|
+
if (yield* hasCommitScope) return yield* unavailable();
|
|
1005
999
|
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1000
|
+
return yield* executeStandalone(plan);
|
|
1001
|
+
}).pipe(
|
|
1002
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1003
|
+
Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
|
|
1004
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1005
|
+
);
|
|
1006
|
+
|
|
1007
|
+
const service: PasswordPreparedPersistence = {
|
|
1008
|
+
reserve: (input, prepare) => run(plans.reserve(input, prepare)).pipe(translateFailure),
|
|
1009
|
+
publishReady: (input, prepare) =>
|
|
1010
|
+
run(plans.publishReady(input, prepare)).pipe(translateFailure),
|
|
1011
|
+
context: (input) =>
|
|
1012
|
+
plans
|
|
1013
|
+
.context(input)
|
|
1014
|
+
.pipe(
|
|
1015
|
+
Effect.provideService(CurrentD1PlanningDatabase, database),
|
|
1016
|
+
Effect.provideService(CurrentPasswordSql, database as unknown as PasswordSqlDatabase),
|
|
1017
|
+
Effect.provideService(LifecycleHooks, hooks),
|
|
1018
|
+
translateContextFailure,
|
|
1019
|
+
),
|
|
1020
|
+
complete: (input, prepare) => run(plans.complete(input, prepare)).pipe(translateFailure),
|
|
1021
|
+
resetWithProof: (input, prepare) =>
|
|
1022
|
+
run(plans.resetWithProof(input, prepare)).pipe(translateFailure),
|
|
1023
|
+
cancel: (input, prepare) => run(plans.cancel(input, prepare)).pipe(translateFailure),
|
|
1024
|
+
cleanup: (input, prepare) => run(plans.cleanup(input, prepare)).pipe(translateFailure),
|
|
1025
|
+
};
|
|
1026
|
+
|
|
1027
|
+
return { passwordPreparedPersistence: service };
|
|
1028
|
+
});
|
|
1028
1029
|
|
|
1029
1030
|
export function coordinateD1PasswordPreparedPersistence<
|
|
1030
1031
|
TargetId,
|