@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/SqliteDo.ts
CHANGED
|
@@ -1,7 +1,33 @@
|
|
|
1
|
+
import { SqliteClient } from "@effect/sql-sqlite-do/SqliteClient";
|
|
2
|
+
import { NativeDatabase, PersistenceConfigurationError } from "@yielded/auth-persistence/Adapter";
|
|
1
3
|
import type { AnyRelations } from "drizzle-orm";
|
|
2
|
-
import type
|
|
4
|
+
import { type EffectSQLiteDoDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-do";
|
|
3
5
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
4
|
-
import { Effect } from "effect";
|
|
6
|
+
import { Context, Effect, Layer } from "effect";
|
|
7
|
+
|
|
8
|
+
import { nativeDatabase } from "./drizzle/native-database";
|
|
9
|
+
|
|
10
|
+
/** The application-owned Drizzle database used to construct persistence services. */
|
|
11
|
+
export class Database extends Context.Service<Database, EffectSQLiteDoDatabase<AnyRelations>>()(
|
|
12
|
+
"effect-auth/persistence-drizzle/SqliteDo/Database",
|
|
13
|
+
) {}
|
|
14
|
+
|
|
15
|
+
/** The SQL-client Layer must configure storage so Drizzle owns transactionSync. */
|
|
16
|
+
export const databaseLayer = Layer.effect(
|
|
17
|
+
Database,
|
|
18
|
+
Effect.gen(function* () {
|
|
19
|
+
const client = yield* SqliteClient;
|
|
20
|
+
const storage = client.config.storage;
|
|
21
|
+
|
|
22
|
+
if (storage === undefined)
|
|
23
|
+
return yield* PersistenceConfigurationError.make({
|
|
24
|
+
reason:
|
|
25
|
+
"SqliteDo requires a SQL client configured with storage for synchronous transactions",
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
return yield* makeWithDefaults({ storage });
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
5
31
|
|
|
6
32
|
import type {
|
|
7
33
|
ExternalIdentityTables,
|
|
@@ -18,19 +44,24 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
|
|
|
18
44
|
import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
|
|
19
45
|
import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
|
|
20
46
|
|
|
21
|
-
const sessionTarget = makeSqliteSessionTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
47
|
+
const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
48
|
+
Database,
|
|
22
49
|
sqliteSessionConfiguration("synchronous", Effect.void),
|
|
23
50
|
);
|
|
24
51
|
|
|
25
|
-
const proofTarget = makeSqliteProofTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
52
|
+
const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
53
|
+
Database,
|
|
26
54
|
sqliteProofConfiguration("synchronous", Effect.void),
|
|
27
55
|
);
|
|
28
56
|
|
|
29
|
-
const passwordTarget = makeSqlitePasswordTarget<
|
|
30
|
-
|
|
31
|
-
|
|
57
|
+
const passwordTarget = makeSqlitePasswordTarget<
|
|
58
|
+
Database,
|
|
59
|
+
EffectSQLiteDoDatabase<AnyRelations>,
|
|
60
|
+
true
|
|
61
|
+
>(Database, sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
|
|
32
62
|
|
|
33
|
-
const emailTarget = makeSqliteEmailTarget<EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
63
|
+
const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteDoDatabase<AnyRelations>, true>(
|
|
64
|
+
Database,
|
|
34
65
|
sqliteEmailConfiguration("synchronous", Effect.void, Effect.void),
|
|
35
66
|
);
|
|
36
67
|
|
|
@@ -95,9 +126,11 @@ export const makeIdentityServices = <
|
|
|
95
126
|
Request extends AnySQLiteTable,
|
|
96
127
|
NativeId,
|
|
97
128
|
>(
|
|
98
|
-
database: EffectSQLiteDoDatabase<AnyRelations>,
|
|
99
129
|
mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
|
|
100
|
-
) =>
|
|
130
|
+
) =>
|
|
131
|
+
makeSqliteIdentityServices(mapping, "synchronous").pipe(
|
|
132
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
133
|
+
);
|
|
101
134
|
|
|
102
135
|
export const makeSubjectProvisioningServices = <
|
|
103
136
|
Subject extends AnySQLiteTable,
|
|
@@ -105,25 +138,30 @@ export const makeSubjectProvisioningServices = <
|
|
|
105
138
|
Request extends AnySQLiteTable,
|
|
106
139
|
NativeId,
|
|
107
140
|
>(
|
|
108
|
-
database: EffectSQLiteDoDatabase<AnyRelations>,
|
|
109
141
|
mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
|
|
110
|
-
) =>
|
|
142
|
+
) =>
|
|
143
|
+
makeSqliteSubjectProvisioningServices(mapping, "synchronous").pipe(
|
|
144
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
145
|
+
);
|
|
111
146
|
|
|
112
147
|
export const makeExternalIdentityServices = <
|
|
113
148
|
Subject extends AnySQLiteTable,
|
|
114
149
|
External extends AnySQLiteTable,
|
|
115
150
|
NativeId,
|
|
116
151
|
>(
|
|
117
|
-
database: EffectSQLiteDoDatabase<AnyRelations>,
|
|
118
152
|
mapping: ExternalIdentityTables<Subject, External, NativeId>,
|
|
119
|
-
) =>
|
|
153
|
+
) =>
|
|
154
|
+
makeSqliteExternalIdentityServices(mapping).pipe(
|
|
155
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
156
|
+
);
|
|
120
157
|
|
|
121
158
|
import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
|
|
122
159
|
|
|
123
160
|
const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
|
|
161
|
+
Database,
|
|
124
162
|
EffectSQLiteDoDatabase<AnyRelations>,
|
|
125
163
|
true
|
|
126
|
-
>(sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
|
|
164
|
+
>(Database, sqlitePasswordConfiguration("synchronous", Effect.void, Effect.void));
|
|
127
165
|
|
|
128
166
|
export const { makePasswordPreparedPersistenceServices, coordinatePasswordPreparedPersistence } =
|
|
129
167
|
passwordPreparedTarget;
|
|
@@ -133,10 +171,11 @@ export { passwordPreparedPersistenceLayer } from "./drizzle/password-prepared-ta
|
|
|
133
171
|
import { makeOAuthTarget } from "./drizzle/oauth-drivers";
|
|
134
172
|
|
|
135
173
|
const oauthTarget = makeOAuthTarget<
|
|
174
|
+
Database,
|
|
136
175
|
EffectSQLiteDoDatabase<AnyRelations>,
|
|
137
176
|
AnySQLiteTable<{ dialect: "sqlite" }>,
|
|
138
177
|
true
|
|
139
|
-
>({
|
|
178
|
+
>(Database, {
|
|
140
179
|
mode: "synchronous",
|
|
141
180
|
dialect: "sqlite",
|
|
142
181
|
locking: false,
|
|
@@ -161,11 +200,12 @@ export const {
|
|
|
161
200
|
import { makePasskeyTarget } from "./drizzle/passkey-drivers";
|
|
162
201
|
|
|
163
202
|
const passkeyTarget = makePasskeyTarget<
|
|
203
|
+
Database,
|
|
164
204
|
EffectSQLiteDoDatabase<AnyRelations>,
|
|
165
205
|
AnySQLiteTable<{ dialect: "sqlite" }>,
|
|
166
206
|
unknown,
|
|
167
207
|
true
|
|
168
|
-
>({
|
|
208
|
+
>(Database, {
|
|
169
209
|
mode: "synchronous",
|
|
170
210
|
dialect: "sqlite",
|
|
171
211
|
locking: false,
|
|
@@ -188,11 +228,12 @@ export const {
|
|
|
188
228
|
import { makeTotpTarget } from "./drizzle/totp-target";
|
|
189
229
|
|
|
190
230
|
const totpTarget = makeTotpTarget<
|
|
231
|
+
Database,
|
|
191
232
|
EffectSQLiteDoDatabase<AnyRelations>,
|
|
192
233
|
AnySQLiteTable<{ dialect: "sqlite" }>,
|
|
193
234
|
unknown,
|
|
194
235
|
true
|
|
195
|
-
>({
|
|
236
|
+
>(Database, {
|
|
196
237
|
mode: "synchronous",
|
|
197
238
|
dialect: "sqlite",
|
|
198
239
|
locking: false,
|
|
@@ -204,11 +245,12 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
|
|
|
204
245
|
import { makePhoneTarget } from "./drizzle/phone-target";
|
|
205
246
|
|
|
206
247
|
const phoneTarget = makePhoneTarget<
|
|
248
|
+
Database,
|
|
207
249
|
EffectSQLiteDoDatabase<AnyRelations>,
|
|
208
250
|
AnySQLiteTable<{ dialect: "sqlite" }>,
|
|
209
251
|
unknown,
|
|
210
252
|
true
|
|
211
|
-
>({
|
|
253
|
+
>(Database, {
|
|
212
254
|
mode: "synchronous",
|
|
213
255
|
dialect: "sqlite",
|
|
214
256
|
locking: false,
|
package/src/SqliteNode.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
|
+
import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
|
|
1
2
|
import type { AnyRelations } from "drizzle-orm";
|
|
2
3
|
import { type EffectSQLiteNodeDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-node";
|
|
3
4
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
4
|
-
import { Effect } from "effect";
|
|
5
|
+
import { Context, Effect, Layer } from "effect";
|
|
6
|
+
|
|
7
|
+
import { nativeDatabase } from "./drizzle/native-database";
|
|
8
|
+
|
|
9
|
+
/** The application-owned Drizzle database used to construct persistence services. */
|
|
10
|
+
export class Database extends Context.Service<Database, EffectSQLiteNodeDatabase<AnyRelations>>()(
|
|
11
|
+
"effect-auth/persistence-drizzle/SqliteNode/Database",
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
/** Construct Drizzle from the driver's SQL-client Layer. */
|
|
15
|
+
export const databaseLayer = Layer.effect(Database, makeWithDefaults({}));
|
|
5
16
|
|
|
6
17
|
import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
|
|
7
18
|
import type {
|
|
@@ -22,29 +33,34 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
|
|
|
22
33
|
import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
|
|
23
34
|
import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
|
|
24
35
|
|
|
25
|
-
const sessionTarget = makeSqliteSessionTarget<EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
26
|
-
|
|
36
|
+
const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
37
|
+
Database,
|
|
38
|
+
(service) => sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(service)),
|
|
27
39
|
);
|
|
28
40
|
|
|
29
|
-
const proofTarget = makeSqliteProofTarget<EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
30
|
-
|
|
41
|
+
const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
42
|
+
Database,
|
|
43
|
+
(service) => sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(service)),
|
|
31
44
|
);
|
|
32
45
|
|
|
33
|
-
const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
34
|
-
|
|
46
|
+
const passwordTarget = makeSqlitePasswordTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
47
|
+
Database,
|
|
48
|
+
(service) =>
|
|
35
49
|
sqlitePasswordConfiguration(
|
|
36
50
|
"interactive",
|
|
37
|
-
sqlClientPasswordStandaloneGuard(
|
|
38
|
-
sqlClientProofStandaloneGuard(
|
|
51
|
+
sqlClientPasswordStandaloneGuard(service),
|
|
52
|
+
sqlClientProofStandaloneGuard(service),
|
|
39
53
|
),
|
|
40
54
|
);
|
|
41
55
|
|
|
42
|
-
const emailTarget = makeSqliteEmailTarget<EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteNodeDatabase<AnyRelations>>(
|
|
57
|
+
Database,
|
|
58
|
+
(service) =>
|
|
59
|
+
sqliteEmailConfiguration(
|
|
60
|
+
"interactive",
|
|
61
|
+
sqlClientEmailStandaloneGuard(service),
|
|
62
|
+
sqlClientProofStandaloneGuard(service),
|
|
63
|
+
),
|
|
48
64
|
);
|
|
49
65
|
|
|
50
66
|
export const {
|
|
@@ -86,9 +102,11 @@ export const makeIdentityServices = <
|
|
|
86
102
|
Request extends AnySQLiteTable,
|
|
87
103
|
NativeId,
|
|
88
104
|
>(
|
|
89
|
-
database: EffectSQLiteNodeDatabase<AnyRelations>,
|
|
90
105
|
mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
|
|
91
|
-
) =>
|
|
106
|
+
) =>
|
|
107
|
+
makeSqliteIdentityServices(mapping, "interactive").pipe(
|
|
108
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
109
|
+
);
|
|
92
110
|
|
|
93
111
|
export const makeSubjectProvisioningServices = <
|
|
94
112
|
Subject extends AnySQLiteTable,
|
|
@@ -96,28 +114,33 @@ export const makeSubjectProvisioningServices = <
|
|
|
96
114
|
Request extends AnySQLiteTable,
|
|
97
115
|
NativeId,
|
|
98
116
|
>(
|
|
99
|
-
database: EffectSQLiteNodeDatabase<AnyRelations>,
|
|
100
117
|
mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
|
|
101
|
-
) =>
|
|
118
|
+
) =>
|
|
119
|
+
makeSqliteSubjectProvisioningServices(mapping, "interactive").pipe(
|
|
120
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
121
|
+
);
|
|
102
122
|
|
|
103
123
|
export const makeExternalIdentityServices = <
|
|
104
124
|
Subject extends AnySQLiteTable,
|
|
105
125
|
External extends AnySQLiteTable,
|
|
106
126
|
NativeId,
|
|
107
127
|
>(
|
|
108
|
-
database: EffectSQLiteNodeDatabase<AnyRelations>,
|
|
109
128
|
mapping: ExternalIdentityTables<Subject, External, NativeId>,
|
|
110
|
-
) =>
|
|
129
|
+
) =>
|
|
130
|
+
makeSqliteExternalIdentityServices(mapping).pipe(
|
|
131
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
132
|
+
);
|
|
111
133
|
|
|
112
134
|
import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
|
|
113
135
|
|
|
114
136
|
const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
|
|
137
|
+
Database,
|
|
115
138
|
EffectSQLiteNodeDatabase<AnyRelations>
|
|
116
|
-
>((
|
|
139
|
+
>(Database, (service) =>
|
|
117
140
|
sqlitePasswordConfiguration(
|
|
118
141
|
"interactive",
|
|
119
|
-
sqlClientPasswordStandaloneGuard(
|
|
120
|
-
sqlClientProofStandaloneGuard(
|
|
142
|
+
sqlClientPasswordStandaloneGuard(service),
|
|
143
|
+
sqlClientProofStandaloneGuard(service),
|
|
121
144
|
),
|
|
122
145
|
);
|
|
123
146
|
|
|
@@ -130,9 +153,10 @@ import { makeOAuthTarget } from "./drizzle/oauth-drivers";
|
|
|
130
153
|
import { sqlClientOAuthStandaloneGuard } from "./drizzle/oauth-target";
|
|
131
154
|
|
|
132
155
|
const oauthTarget = makeOAuthTarget<
|
|
156
|
+
Database,
|
|
133
157
|
EffectSQLiteNodeDatabase<AnyRelations>,
|
|
134
158
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
135
|
-
>({
|
|
159
|
+
>(Database, {
|
|
136
160
|
mode: "interactive",
|
|
137
161
|
dialect: "sqlite",
|
|
138
162
|
locking: false,
|
|
@@ -158,9 +182,10 @@ import { makePasskeyTarget } from "./drizzle/passkey-drivers";
|
|
|
158
182
|
import { sqlClientPasskeyStandaloneGuard } from "./drizzle/passkey-target";
|
|
159
183
|
|
|
160
184
|
const passkeyTarget = makePasskeyTarget<
|
|
185
|
+
Database,
|
|
161
186
|
EffectSQLiteNodeDatabase<AnyRelations>,
|
|
162
187
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
163
|
-
>({
|
|
188
|
+
>(Database, {
|
|
164
189
|
mode: "interactive",
|
|
165
190
|
dialect: "sqlite",
|
|
166
191
|
locking: false,
|
|
@@ -183,9 +208,10 @@ export const {
|
|
|
183
208
|
import { makeTotpTarget, sqlClientTotpStandaloneGuard } from "./drizzle/totp-target";
|
|
184
209
|
|
|
185
210
|
const totpTarget = makeTotpTarget<
|
|
211
|
+
Database,
|
|
186
212
|
EffectSQLiteNodeDatabase<AnyRelations>,
|
|
187
213
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
188
|
-
>({
|
|
214
|
+
>(Database, {
|
|
189
215
|
mode: "interactive",
|
|
190
216
|
dialect: "sqlite",
|
|
191
217
|
locking: false,
|
|
@@ -197,9 +223,10 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
|
|
|
197
223
|
import { makePhoneTarget, sqlClientPhoneStandaloneGuard } from "./drizzle/phone-target";
|
|
198
224
|
|
|
199
225
|
const phoneTarget = makePhoneTarget<
|
|
226
|
+
Database,
|
|
200
227
|
EffectSQLiteNodeDatabase<AnyRelations>,
|
|
201
228
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
202
|
-
>({
|
|
229
|
+
>(Database, {
|
|
203
230
|
mode: "interactive",
|
|
204
231
|
dialect: "sqlite",
|
|
205
232
|
locking: false,
|
package/src/SqliteWasm.ts
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
|
+
import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
|
|
1
2
|
import type { AnyRelations } from "drizzle-orm";
|
|
2
3
|
import { type EffectSQLiteWasmDatabase, makeWithDefaults } from "drizzle-orm/effect-sqlite-wasm";
|
|
3
4
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
4
|
-
import { Effect } from "effect";
|
|
5
|
+
import { Context, Effect, Layer } from "effect";
|
|
6
|
+
|
|
7
|
+
import { nativeDatabase } from "./drizzle/native-database";
|
|
8
|
+
|
|
9
|
+
/** The application-owned Drizzle database used to construct persistence services. */
|
|
10
|
+
export class Database extends Context.Service<Database, EffectSQLiteWasmDatabase<AnyRelations>>()(
|
|
11
|
+
"effect-auth/persistence-drizzle/SqliteWasm/Database",
|
|
12
|
+
) {}
|
|
13
|
+
|
|
14
|
+
/** Construct Drizzle from the driver's SQL-client Layer. */
|
|
15
|
+
export const databaseLayer = Layer.effect(Database, makeWithDefaults({}));
|
|
5
16
|
|
|
6
17
|
import { sqlClientEmailStandaloneGuard } from "./drizzle/email-target";
|
|
7
18
|
import type {
|
|
@@ -22,29 +33,34 @@ import { makeSqlitePasswordTarget, sqlitePasswordConfiguration } from "./drizzle
|
|
|
22
33
|
import { makeSqliteProofTarget, sqliteProofConfiguration } from "./drizzle/sqlite-proofs";
|
|
23
34
|
import { makeSqliteSessionTarget, sqliteSessionConfiguration } from "./drizzle/sqlite-sessions";
|
|
24
35
|
|
|
25
|
-
const sessionTarget = makeSqliteSessionTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
26
|
-
|
|
36
|
+
const sessionTarget = makeSqliteSessionTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
37
|
+
Database,
|
|
38
|
+
(service) => sqliteSessionConfiguration("interactive", sqlClientSessionStandaloneGuard(service)),
|
|
27
39
|
);
|
|
28
40
|
|
|
29
|
-
const proofTarget = makeSqliteProofTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
30
|
-
|
|
41
|
+
const proofTarget = makeSqliteProofTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
42
|
+
Database,
|
|
43
|
+
(service) => sqliteProofConfiguration("interactive", sqlClientProofStandaloneGuard(service)),
|
|
31
44
|
);
|
|
32
45
|
|
|
33
|
-
const passwordTarget = makeSqlitePasswordTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
34
|
-
|
|
46
|
+
const passwordTarget = makeSqlitePasswordTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
47
|
+
Database,
|
|
48
|
+
(service) =>
|
|
35
49
|
sqlitePasswordConfiguration(
|
|
36
50
|
"interactive",
|
|
37
|
-
sqlClientPasswordStandaloneGuard(
|
|
38
|
-
sqlClientProofStandaloneGuard(
|
|
51
|
+
sqlClientPasswordStandaloneGuard(service),
|
|
52
|
+
sqlClientProofStandaloneGuard(service),
|
|
39
53
|
),
|
|
40
54
|
);
|
|
41
55
|
|
|
42
|
-
const emailTarget = makeSqliteEmailTarget<EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
56
|
+
const emailTarget = makeSqliteEmailTarget<Database, EffectSQLiteWasmDatabase<AnyRelations>>(
|
|
57
|
+
Database,
|
|
58
|
+
(service) =>
|
|
59
|
+
sqliteEmailConfiguration(
|
|
60
|
+
"interactive",
|
|
61
|
+
sqlClientEmailStandaloneGuard(service),
|
|
62
|
+
sqlClientProofStandaloneGuard(service),
|
|
63
|
+
),
|
|
48
64
|
);
|
|
49
65
|
|
|
50
66
|
export const {
|
|
@@ -86,9 +102,11 @@ export const makeIdentityServices = <
|
|
|
86
102
|
Request extends AnySQLiteTable,
|
|
87
103
|
NativeId,
|
|
88
104
|
>(
|
|
89
|
-
database: EffectSQLiteWasmDatabase<AnyRelations>,
|
|
90
105
|
mapping: IdentityTables<Subject, Identifier, External, Request, NativeId>,
|
|
91
|
-
) =>
|
|
106
|
+
) =>
|
|
107
|
+
makeSqliteIdentityServices(mapping, "interactive").pipe(
|
|
108
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
109
|
+
);
|
|
92
110
|
|
|
93
111
|
export const makeSubjectProvisioningServices = <
|
|
94
112
|
Subject extends AnySQLiteTable,
|
|
@@ -96,28 +114,33 @@ export const makeSubjectProvisioningServices = <
|
|
|
96
114
|
Request extends AnySQLiteTable,
|
|
97
115
|
NativeId,
|
|
98
116
|
>(
|
|
99
|
-
database: EffectSQLiteWasmDatabase<AnyRelations>,
|
|
100
117
|
mapping: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>,
|
|
101
|
-
) =>
|
|
118
|
+
) =>
|
|
119
|
+
makeSqliteSubjectProvisioningServices(mapping, "interactive").pipe(
|
|
120
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
121
|
+
);
|
|
102
122
|
|
|
103
123
|
export const makeExternalIdentityServices = <
|
|
104
124
|
Subject extends AnySQLiteTable,
|
|
105
125
|
External extends AnySQLiteTable,
|
|
106
126
|
NativeId,
|
|
107
127
|
>(
|
|
108
|
-
database: EffectSQLiteWasmDatabase<AnyRelations>,
|
|
109
128
|
mapping: ExternalIdentityTables<Subject, External, NativeId>,
|
|
110
|
-
) =>
|
|
129
|
+
) =>
|
|
130
|
+
makeSqliteExternalIdentityServices(mapping).pipe(
|
|
131
|
+
Effect.provideServiceEffect(NativeDatabase, nativeDatabase(Database)),
|
|
132
|
+
);
|
|
111
133
|
|
|
112
134
|
import { makeSqlitePasswordPreparedTarget } from "./drizzle/sqlite-password-prepared";
|
|
113
135
|
|
|
114
136
|
const passwordPreparedTarget = makeSqlitePasswordPreparedTarget<
|
|
137
|
+
Database,
|
|
115
138
|
EffectSQLiteWasmDatabase<AnyRelations>
|
|
116
|
-
>((
|
|
139
|
+
>(Database, (service) =>
|
|
117
140
|
sqlitePasswordConfiguration(
|
|
118
141
|
"interactive",
|
|
119
|
-
sqlClientPasswordStandaloneGuard(
|
|
120
|
-
sqlClientProofStandaloneGuard(
|
|
142
|
+
sqlClientPasswordStandaloneGuard(service),
|
|
143
|
+
sqlClientProofStandaloneGuard(service),
|
|
121
144
|
),
|
|
122
145
|
);
|
|
123
146
|
|
|
@@ -130,9 +153,10 @@ import { makeOAuthTarget } from "./drizzle/oauth-drivers";
|
|
|
130
153
|
import { sqlClientOAuthStandaloneGuard } from "./drizzle/oauth-target";
|
|
131
154
|
|
|
132
155
|
const oauthTarget = makeOAuthTarget<
|
|
156
|
+
Database,
|
|
133
157
|
EffectSQLiteWasmDatabase<AnyRelations>,
|
|
134
158
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
135
|
-
>({
|
|
159
|
+
>(Database, {
|
|
136
160
|
mode: "interactive",
|
|
137
161
|
dialect: "sqlite",
|
|
138
162
|
locking: false,
|
|
@@ -158,9 +182,10 @@ import { makePasskeyTarget } from "./drizzle/passkey-drivers";
|
|
|
158
182
|
import { sqlClientPasskeyStandaloneGuard } from "./drizzle/passkey-target";
|
|
159
183
|
|
|
160
184
|
const passkeyTarget = makePasskeyTarget<
|
|
185
|
+
Database,
|
|
161
186
|
EffectSQLiteWasmDatabase<AnyRelations>,
|
|
162
187
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
163
|
-
>({
|
|
188
|
+
>(Database, {
|
|
164
189
|
mode: "interactive",
|
|
165
190
|
dialect: "sqlite",
|
|
166
191
|
locking: false,
|
|
@@ -183,9 +208,10 @@ export const {
|
|
|
183
208
|
import { makeTotpTarget, sqlClientTotpStandaloneGuard } from "./drizzle/totp-target";
|
|
184
209
|
|
|
185
210
|
const totpTarget = makeTotpTarget<
|
|
211
|
+
Database,
|
|
186
212
|
EffectSQLiteWasmDatabase<AnyRelations>,
|
|
187
213
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
188
|
-
>({
|
|
214
|
+
>(Database, {
|
|
189
215
|
mode: "interactive",
|
|
190
216
|
dialect: "sqlite",
|
|
191
217
|
locking: false,
|
|
@@ -197,9 +223,10 @@ export const { makeTotpPersistenceServices, coordinateTotpPersistence } = totpTa
|
|
|
197
223
|
import { makePhoneTarget, sqlClientPhoneStandaloneGuard } from "./drizzle/phone-target";
|
|
198
224
|
|
|
199
225
|
const phoneTarget = makePhoneTarget<
|
|
226
|
+
Database,
|
|
200
227
|
EffectSQLiteWasmDatabase<AnyRelations>,
|
|
201
228
|
AnySQLiteTable<{ dialect: "sqlite" }>
|
|
202
|
-
>({
|
|
229
|
+
>(Database, {
|
|
203
230
|
mode: "interactive",
|
|
204
231
|
dialect: "sqlite",
|
|
205
232
|
locking: false,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { D1Client } from "@effect/sql-d1/D1Client";
|
|
2
|
+
import type { AnyRelations } from "drizzle-orm";
|
|
3
|
+
import type { EffectSQLiteD1Database } from "drizzle-orm/effect-d1";
|
|
4
|
+
import { Context } from "effect";
|
|
5
|
+
|
|
6
|
+
/** Application-owned D1 database, including the client that owns native batches. */
|
|
7
|
+
export class Database extends Context.Service<
|
|
8
|
+
Database,
|
|
9
|
+
EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client }
|
|
10
|
+
>()("effect-auth/persistence-drizzle/D1/Database") {}
|