@yielded/auth-persistence-drizzle 0.1.0-beta.1 → 0.1.0-beta.12
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 +27 -22
- package/dist/D1.mjs +10 -4
- package/dist/D1.mjs.map +1 -1
- package/dist/Libsql.d.mts +66 -61
- 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 +43 -32
- 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 +58 -53
- package/dist/SqliteBun.mjs +20 -14
- package/dist/SqliteBun.mjs.map +1 -1
- package/dist/SqliteDo.d.mts +66 -60
- 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 +66 -61
- 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 +14 -13
- 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 +5 -2
- 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-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 +74 -76
- 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-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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-sessions.mjs","names":[],"sources":["../../src/drizzle/sqlite-sessions.ts"],"sourcesContent":["import type { LifecycleHooks, HookConfigurationError } from \"@yielded/auth/Hooks\";\nimport {\n AuthenticationAuthority,\n type SessionUnavailable,\n type PendingAuthentication,\n type SessionRepository,\n type SignedSessionValidity,\n type StatefulSessionPersistence,\n type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { AnyRelations } from \"drizzle-orm\";\nimport type { EffectLibsqlDatabase } from \"drizzle-orm/effect-libsql\";\nimport type { EffectSQLiteBunDatabase } from \"drizzle-orm/effect-sqlite-bun\";\nimport type { EffectSQLiteDoDatabase } from \"drizzle-orm/effect-sqlite-do\";\nimport type { EffectSQLiteNodeDatabase } from \"drizzle-orm/effect-sqlite-node\";\nimport type { EffectSQLiteWasmDatabase } from \"drizzle-orm/effect-sqlite-wasm\";\nimport type { AnySQLiteTable } from \"drizzle-orm/sqlite-core\";\nimport { Context, Effect } from \"effect\";\nimport type { SqlError } from \"effect/sql/SqlError\";\n\nimport type {\n AuthenticationAuthorityMapping,\n PendingAuthenticationMapping,\n SignedSessionValidityMapping,\n StatefulSessionMapping,\n} from \"./session-model\";\nimport {\n coordinateTargetAuthenticationAuthority,\n coordinateTargetPendingAuthentication,\n coordinateTargetSignedSessionValidity,\n coordinateTargetStatefulSessions,\n makeTargetAuthenticationAuthorityServices,\n makeTargetPendingAuthenticationServices,\n makeTargetSignedSessionValidityServices,\n makeTargetStatefulSessionServices,\n type SessionTargetConfiguration,\n makeTargetSessionStepUpServices,\n coordinateTargetSessionStepUp,\n} from \"./session-target\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\ntype Database =\n | EffectLibsqlDatabase<AnyRelations>\n | EffectSQLiteBunDatabase<AnyRelations>\n | EffectSQLiteDoDatabase<AnyRelations>\n | EffectSQLiteNodeDatabase<AnyRelations>\n | EffectSQLiteWasmDatabase<AnyRelations>;\ntype TransactionOf<D extends Database> = Parameters<Parameters<D[\"transaction\"]>[0]>[0];\n\nexport const sqliteSessionConfiguration = (\n mode: \"interactive\" | \"synchronous\",\n standaloneGuard: Effect.Effect<void, SessionUnavailable>,\n coordinatorGuard?: Effect.Effect<void, SessionUnavailable>,\n): SessionTargetConfiguration => ({\n mode,\n locking: false,\n standaloneGuard,\n ...(coordinatorGuard === undefined ? {} : { coordinatorGuard }),\n});\n\nexport const makeSqliteAuthenticationAuthorityServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n>(\n database: Database,\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetAuthenticationAuthorityServices<Claims>(database, mapping, configuration);\n\nexport const makeSqlitePendingAuthenticationServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n>(\n database: Database,\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetPendingAuthenticationServices<Claims>(database, mapping, configuration);\n\nexport const makeSqliteStatefulSessionServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n database: Database,\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetStatefulSessionServices<Claims>(database, mapping, configuration);\n\nexport const makeSqliteSignedSessionValidityServices = <\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n database: Database,\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetSignedSessionValidityServices(database, mapping, configuration);\n\nexport const coordinateSqliteAuthenticationAuthority = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly authenticationAuthority: AuthenticationAuthority[\"Service\"] },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetAuthenticationAuthority<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqlitePendingAuthentication = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly pendingAuthentication: PendingAuthentication<Claims> },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetPendingAuthentication<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqliteStatefulSessions = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: {\n readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;\n readonly sessionRepository: SessionRepository;\n },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetStatefulSessions<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqliteSignedSessionValidity = <\n D extends Database,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly signedSessionValidity: SignedSessionValidity },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetSignedSessionValidity<TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const makeSqliteSessionTarget = <D extends Database, Synchronous extends boolean = false>(\n configuration: SessionTargetConfiguration | ((database: D) => SessionTargetConfiguration),\n) => {\n const configurationFor = (database: D) =>\n typeof configuration === \"function\" ? configuration(database) : configuration;\n\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<Id> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n (Synchronous extends true ? never : Exclude<R, Id>) | LifecycleHooks | DatabaseRequirements\n >;\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<Id | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, Id | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, Id> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteSessionStepUp(\n database,\n options.mapping,\n options.target,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly sessionStepUpPersistence: SessionStepUpPersistence<Claims> },\n ) => {\n const provided = Context.make(options.target, services.sessionStepUpPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<AuthenticationAuthority> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, AuthenticationAuthority>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<AuthenticationAuthority | TxId> : R\n >,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, AuthenticationAuthority | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, AuthenticationAuthority> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteAuthenticationAuthority(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly authenticationAuthority: AuthenticationAuthority[\"Service\"] },\n ) => {\n const provided = Context.make(AuthenticationAuthority, services.authenticationAuthority);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqlitePendingAuthentication(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly pendingAuthentication: PendingAuthentication<Claims> },\n ) => {\n const provided = Context.make(options.target, services.pendingAuthentication);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PersistenceId | RepositoryId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PersistenceId | RepositoryId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PersistenceId | RepositoryId | TxId> : R\n >,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PersistenceId | RepositoryId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, PersistenceId | RepositoryId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteStatefulSessions(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: {\n readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;\n readonly sessionRepository: SessionRepository;\n },\n ) => {\n const provided = Context.make(\n options.persistence,\n services.statefulSessionPersistence,\n ).pipe(Context.add(options.repository, services.sessionRepository));\n\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteSignedSessionValidity(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly signedSessionValidity: SignedSessionValidity },\n ) => {\n const provided = Context.make(options.target, services.signedSessionValidity);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n makeSessionStepUpServices: <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n database: D,\n mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n ) => makeSqliteSessionStepUpServices(database, mapping, target, configurationFor(database)),\n coordinateSessionStepUp,\n makeAuthenticationAuthorityServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n >(\n database: D,\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n ) => makeSqliteAuthenticationAuthorityServices(database, mapping, configurationFor(database)),\n makePendingAuthenticationServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n >(\n database: D,\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n ) => makeSqlitePendingAuthenticationServices(database, mapping, configurationFor(database)),\n makeStatefulSessionServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n database: D,\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n ) => makeSqliteStatefulSessionServices(database, mapping, configurationFor(database)),\n makeSignedSessionValidityServices: <\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n database: D,\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n ) => makeSqliteSignedSessionValidityServices(database, mapping, configurationFor(database)),\n coordinateAuthenticationAuthority,\n coordinatePendingAuthentication,\n coordinateStatefulSessions,\n coordinateSignedSessionValidity,\n };\n};\n\nimport type { SessionStepUpMapping } from \"./step-up-model\";\n\nexport const makeSqliteSessionStepUpServices = <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n database: Database,\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n configuration: SessionTargetConfiguration,\n) => makeTargetSessionStepUpServices(database, mapping, target, configuration);\n\nexport const coordinateSqliteSessionStepUp = <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n D extends Database,\n A,\n E,\n R,\n>(\n database: D,\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly sessionStepUpPersistence: SessionStepUpPersistence<Claims> },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetSessionStepUp<Claims, Id, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n target,\n configuration,\n owner,\n );\n"],"mappings":";;;;AAiDA,MAAa,8BACX,MACA,iBACA,sBACgC;CAChC;CACA,SAAS;CACT;CACA,GAAI,qBAAqB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB;AAC/D;AAEA,MAAa,6CAQX,UACA,SACA,kBACG,0CAAkD,UAAU,SAAS,aAAa;AAEvF,MAAa,2CAQX,UACA,SACA,kBACG,wCAAgD,UAAU,SAAS,aAAa;AAErF,MAAa,qCAUX,UACA,SACA,kBACG,kCAA0C,UAAU,SAAS,aAAa;AAE/E,MAAa,2CAMX,UACA,SACA,kBACG,wCAAwC,UAAU,SAAS,aAAa;AAE7E,MAAa,2CAYX,UACA,SACA,eACA,UAKA,wCACE,UACA,SACA,eACA,KACF;AAEF,MAAa,yCAYX,UACA,SACA,eACA,UAKA,sCACE,UACA,SACA,eACA,KACF;AAEF,MAAa,oCAcX,UACA,SACA,eACA,UAQA,iCACE,UACA,SACA,eACA,KACF;AAEF,MAAa,yCAUX,UACA,SACA,eACA,UAKA,sCACE,UACA,SACA,eACA,KACF;AAEF,MAAa,2BACX,kBACG;CACH,MAAM,oBAAoB,aACxB,OAAO,kBAAkB,aAAa,cAAc,QAAQ,IAAI;CAkFlE,SAAS,wBAmBP,SACA,SAcA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,8BACE,UACA,QAAQ,SACR,QAAQ,QACR,iBAAiB,QAAQ,IAEvB,aACA,aACG;GACH,MAAM,WAAW,QAAQ,KAAK,QAAQ,QAAQ,SAAS,wBAAwB;GAC/E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CA6DA,SAAS,kCAgBP,SACA,SAIA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,wCACE,UACA,QAAQ,SACR,iBAAiB,QAAQ,IAEvB,aACA,aACG;GACH,MAAM,WAAW,QAAQ,KAAK,yBAAyB,SAAS,uBAAuB;GACvF,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CA6DA,SAAS,gCAiBP,SACA,SAKA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,sCACE,UACA,QAAQ,SACR,iBAAiB,QAAQ,IAEvB,aACA,aACG;GACH,MAAM,WAAW,QAAQ,KAAK,QAAQ,QAAQ,SAAS,qBAAqB;GAC5E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CA2FA,SAAS,2BAoBP,SACA,SAeA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,iCACE,UACA,QAAQ,SACR,iBAAiB,QAAQ,IAEvB,aACA,aAIG;GACH,MAAM,WAAW,QAAQ,KACvB,QAAQ,aACR,SAAS,0BACX,CAAC,CAAC,KAAK,QAAQ,IAAI,QAAQ,YAAY,SAAS,iBAAiB,CAAC;GAElE,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAyDA,SAAS,gCAeP,SACA,SAKA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,sCACE,UACA,QAAQ,SACR,iBAAiB,QAAQ,IAEvB,aACA,aACG;GACH,MAAM,WAAW,QAAQ,KAAK,QAAQ,QAAQ,SAAS,qBAAqB;GAC5E,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,OAAO;EACL,4BAWE,UACA,SAUA,WACG,gCAAgC,UAAU,SAAS,QAAQ,iBAAiB,QAAQ,CAAC;EAC1F;EACA,sCAQE,UACA,YACG,0CAA0C,UAAU,SAAS,iBAAiB,QAAQ,CAAC;EAC5F,oCAQE,UACA,YACG,wCAAwC,UAAU,SAAS,iBAAiB,QAAQ,CAAC;EAC1F,8BAUE,UACA,YACG,kCAAkC,UAAU,SAAS,iBAAiB,QAAQ,CAAC;EACpF,oCAME,UACA,YACG,wCAAwC,UAAU,SAAS,iBAAiB,QAAQ,CAAC;EAC1F;EACA;EACA;EACA;CACF;AACF;AAIA,MAAa,mCAWX,UACA,SACA,QACA,kBACG,gCAAgC,UAAU,SAAS,QAAQ,aAAa;AAE7E,MAAa,iCAeX,UACA,SACA,QACA,eACA,UAKA,8BACE,UACA,SACA,QACA,eACA,KACF"}
|
|
1
|
+
{"version":3,"file":"sqlite-sessions.mjs","names":[],"sources":["../../src/drizzle/sqlite-sessions.ts"],"sourcesContent":["import type { LifecycleHooks, HookConfigurationError } from \"@yielded/auth/Hooks\";\nimport {\n AuthenticationAuthority,\n type SessionUnavailable,\n type PendingAuthentication,\n type SessionRepository,\n type SignedSessionValidity,\n type StatefulSessionPersistence,\n type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { AnyRelations } from \"drizzle-orm\";\nimport type { EffectLibsqlDatabase } from \"drizzle-orm/effect-libsql\";\nimport type { EffectSQLiteBunDatabase } from \"drizzle-orm/effect-sqlite-bun\";\nimport type { EffectSQLiteDoDatabase } from \"drizzle-orm/effect-sqlite-do\";\nimport type { EffectSQLiteNodeDatabase } from \"drizzle-orm/effect-sqlite-node\";\nimport type { EffectSQLiteWasmDatabase } from \"drizzle-orm/effect-sqlite-wasm\";\nimport type { AnySQLiteTable } from \"drizzle-orm/sqlite-core\";\nimport { Context, Effect } from \"effect\";\nimport type { SqlError } from \"effect/sql/SqlError\";\n\nimport { nativeDatabase } from \"./native-database\";\nimport type {\n AuthenticationAuthorityMapping,\n PendingAuthenticationMapping,\n SignedSessionValidityMapping,\n StatefulSessionMapping,\n} from \"./session-model\";\nimport { CurrentSessionSql } from \"./session-sql\";\nimport {\n coordinateTargetAuthenticationAuthority,\n coordinateTargetPendingAuthentication,\n coordinateTargetSignedSessionValidity,\n coordinateTargetStatefulSessions,\n makeTargetAuthenticationAuthorityServices,\n makeTargetPendingAuthenticationServices,\n makeTargetSignedSessionValidityServices,\n makeTargetStatefulSessionServices,\n type SessionTargetConfiguration,\n makeTargetSessionStepUpServices,\n coordinateTargetSessionStepUp,\n} from \"./session-target\";\nimport {\n type TransactionService,\n acquireTransactionService,\n transactionService,\n} from \"./standalone-guard\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\ntype Database =\n | EffectLibsqlDatabase<AnyRelations>\n | EffectSQLiteBunDatabase<AnyRelations>\n | EffectSQLiteDoDatabase<AnyRelations>\n | EffectSQLiteNodeDatabase<AnyRelations>\n | EffectSQLiteWasmDatabase<AnyRelations>;\ntype TransactionOf<D extends Database> = Parameters<Parameters<D[\"transaction\"]>[0]>[0];\n\nexport const sqliteSessionConfiguration = (\n mode: \"interactive\" | \"synchronous\",\n standaloneGuard: Effect.Effect<void, SessionUnavailable>,\n coordinatorGuard?: Effect.Effect<void, SessionUnavailable>,\n): SessionTargetConfiguration => ({\n mode,\n locking: false,\n standaloneGuard,\n ...(coordinatorGuard === undefined ? {} : { coordinatorGuard }),\n});\n\nexport const makeSqliteAuthenticationAuthorityServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n>(\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetAuthenticationAuthorityServices<Claims>(mapping, configuration);\n\nexport const makeSqlitePendingAuthenticationServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n>(\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetPendingAuthenticationServices<Claims>(mapping, configuration);\n\nexport const makeSqliteStatefulSessionServices = <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetStatefulSessionServices<Claims>(mapping, configuration);\n\nexport const makeSqliteSignedSessionValidityServices = <\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n) => makeTargetSignedSessionValidityServices(mapping, configuration);\n\nexport const coordinateSqliteAuthenticationAuthority = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly authenticationAuthority: AuthenticationAuthority[\"Service\"] },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetAuthenticationAuthority<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqlitePendingAuthentication = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly pendingAuthentication: PendingAuthentication<Claims> },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetPendingAuthentication<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqliteStatefulSessions = <\n Claims,\n D extends Database,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: {\n readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;\n readonly sessionRepository: SessionRepository;\n },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetStatefulSessions<Claims, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const coordinateSqliteSignedSessionValidity = <\n D extends Database,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n>(\n database: D,\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly signedSessionValidity: SignedSessionValidity },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetSignedSessionValidity<TransactionOf<D>, A, E, R>(\n database,\n mapping,\n configuration,\n owner,\n );\n\nexport const makeSqliteSessionTarget = <\n DatabaseId,\n D extends Database,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration:\n | SessionTargetConfiguration\n | ((service: TransactionService | undefined) => SessionTargetConfiguration),\n) => {\n const configurationFor = (database: D) =>\n typeof configuration === \"function\"\n ? configuration(transactionService(database))\n : configuration;\n\n const standaloneConfiguration =\n typeof configuration === \"function\"\n ? Effect.map(acquireTransactionService(databaseService), configuration)\n : Effect.succeed(configuration);\n\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<Id> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n (Synchronous extends true ? never : Exclude<R, Id>) | LifecycleHooks | DatabaseRequirements\n >;\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<Id | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, Id | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSessionStepUp<\n Database extends D,\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, Id> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteSessionStepUp(\n database,\n options.mapping,\n options.target,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly sessionStepUpPersistence: SessionStepUpPersistence<Claims> },\n ) => {\n const provided = Context.make(options.target, services.sessionStepUpPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<AuthenticationAuthority> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, AuthenticationAuthority>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<AuthenticationAuthority | TxId> : R\n >,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, AuthenticationAuthority | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateAuthenticationAuthority<\n Database extends D,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, AuthenticationAuthority> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteAuthenticationAuthority(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly authenticationAuthority: AuthenticationAuthority[\"Service\"] },\n ) => {\n const provided = Context.make(AuthenticationAuthority, services.authenticationAuthority);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinatePendingAuthentication<\n Database extends D,\n TargetId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, F, NativeId>;\n readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqlitePendingAuthentication(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly pendingAuthentication: PendingAuthentication<Claims> },\n ) => {\n const provided = Context.make(options.target, services.pendingAuthentication);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<PersistenceId | RepositoryId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PersistenceId | RepositoryId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<\n A,\n E,\n Synchronous extends true ? NoInfer<PersistenceId | RepositoryId | TxId> : R\n >,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, PersistenceId | RepositoryId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateStatefulSessions<\n Database extends D,\n PersistenceId,\n RepositoryId,\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: StatefulSessionMapping<\n NoInfer<Claims>,\n S,\n C,\n Session,\n F,\n P,\n NativeId,\n NativeSessionId\n >;\n readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, PersistenceId | RepositoryId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteStatefulSessions(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: {\n readonly statefulSessionPersistence: StatefulSessionPersistence<Claims>;\n readonly sessionRepository: SessionRepository;\n },\n ) => {\n const provided = Context.make(\n options.persistence,\n services.statefulSessionPersistence,\n ).pipe(Context.add(options.repository, services.sessionRepository));\n\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TargetId | TxId> : R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TargetId | TxId>)\n | LifecycleHooks\n | DatabaseRequirements\n >;\n function coordinateSignedSessionValidity<\n Database extends D,\n TargetId,\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n A,\n E,\n R,\n DatabaseError,\n DatabaseRequirements,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>;\n readonly target: SuppliedService<TargetId, SignedSessionValidity>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | SessionUnavailable | HookConfigurationError | SqlError | DatabaseError,\n Exclude<R, TargetId> | LifecycleHooks | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateSqliteSignedSessionValidity(\n database,\n options.mapping,\n configurationFor(database),\n (\n transaction: TransactionOf<Database>,\n services: { readonly signedSessionValidity: SignedSessionValidity },\n ) => {\n const provided = Context.make(options.target, services.signedSessionValidity);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n makeSessionStepUpServices: <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n mapping: SessionStepUpMapping<\n NoInfer<Claims>,\n S,\n C,\n I,\n Session,\n T,\n NativeId,\n NativeSessionId\n >,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n ) =>\n Effect.flatMap(standaloneConfiguration, (configuration) =>\n makeSqliteSessionStepUpServices(mapping, target, configuration),\n ).pipe(Effect.provideServiceEffect(CurrentSessionSql, nativeDatabase(databaseService))),\n coordinateSessionStepUp,\n makeAuthenticationAuthorityServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n >(\n mapping: AuthenticationAuthorityMapping<Claims, S, C, F, P, NativeId>,\n ) =>\n Effect.flatMap(standaloneConfiguration, (configuration) =>\n makeSqliteAuthenticationAuthorityServices(mapping, configuration),\n ).pipe(Effect.provideServiceEffect(CurrentSessionSql, nativeDatabase(databaseService))),\n makePendingAuthenticationServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n P extends AnySQLiteTable,\n F extends AnySQLiteTable,\n NativeId,\n >(\n mapping: PendingAuthenticationMapping<Claims, S, C, P, F, NativeId>,\n ) =>\n Effect.flatMap(standaloneConfiguration, (configuration) =>\n makeSqlitePendingAuthenticationServices(mapping, configuration),\n ).pipe(Effect.provideServiceEffect(CurrentSessionSql, nativeDatabase(databaseService))),\n makeStatefulSessionServices: <\n Claims,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n F extends AnySQLiteTable,\n P extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n mapping: StatefulSessionMapping<Claims, S, C, Session, F, P, NativeId, NativeSessionId>,\n ) =>\n Effect.flatMap(standaloneConfiguration, (configuration) =>\n makeSqliteStatefulSessionServices(mapping, configuration),\n ).pipe(Effect.provideServiceEffect(CurrentSessionSql, nativeDatabase(databaseService))),\n makeSignedSessionValidityServices: <\n S extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n >(\n mapping: SignedSessionValidityMapping<S, T, NativeId, NativeSessionId>,\n ) =>\n Effect.flatMap(standaloneConfiguration, (configuration) =>\n makeSqliteSignedSessionValidityServices(mapping, configuration),\n ).pipe(Effect.provideServiceEffect(CurrentSessionSql, nativeDatabase(databaseService))),\n coordinateAuthenticationAuthority,\n coordinatePendingAuthentication,\n coordinateStatefulSessions,\n coordinateSignedSessionValidity,\n };\n};\n\nimport type { SessionStepUpMapping } from \"./step-up-model\";\n\nexport const makeSqliteSessionStepUpServices = <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n>(\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n configuration: SessionTargetConfiguration,\n) => makeTargetSessionStepUpServices(mapping, target, configuration);\n\nexport const coordinateSqliteSessionStepUp = <\n Claims,\n Id,\n S extends AnySQLiteTable,\n C extends AnySQLiteTable,\n I extends AnySQLiteTable,\n Session extends AnySQLiteTable,\n T extends AnySQLiteTable,\n NativeId,\n NativeSessionId,\n D extends Database,\n A,\n E,\n R,\n>(\n database: D,\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n configuration: SessionTargetConfiguration,\n owner: (\n transaction: TransactionOf<D>,\n services: { readonly sessionStepUpPersistence: SessionStepUpPersistence<Claims> },\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateTargetSessionStepUp<Claims, Id, TransactionOf<D>, A, E, R>(\n database,\n mapping,\n target,\n configuration,\n owner,\n );\n"],"mappings":"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"}
|
|
@@ -5,13 +5,17 @@ const transactionService = (database) => {
|
|
|
5
5
|
if (!Predicate.hasProperty(database, "$client") || !Predicate.hasProperty(database.$client, "transactionService") || !Context.isKey(database.$client.transactionService)) return;
|
|
6
6
|
return database.$client.transactionService;
|
|
7
7
|
};
|
|
8
|
+
/** Capture the foreign client's marker while acquiring standalone services. */
|
|
9
|
+
const acquireTransactionService = (service) => Effect.map(Effect.service(service), (database) => {
|
|
10
|
+
if (!Predicate.hasProperty(database, "$client") || !Predicate.hasProperty(database.$client, "transactionService") || !Context.isKey(database.$client.transactionService)) return;
|
|
11
|
+
return database.$client.transactionService;
|
|
12
|
+
});
|
|
8
13
|
/** Bind the client-specific transaction marker at foreign adapter construction. */
|
|
9
|
-
const sqlClientStandaloneGuard = (
|
|
10
|
-
const service = transactionService(database);
|
|
14
|
+
const sqlClientStandaloneGuard = (service, unavailable) => {
|
|
11
15
|
if (service === void 0) return Effect.suspend(() => Effect.fail(unavailable()));
|
|
12
|
-
return requireStandalone(unavailable,
|
|
16
|
+
return requireStandalone(unavailable, service);
|
|
13
17
|
};
|
|
14
18
|
//#endregion
|
|
15
|
-
export { sqlClientStandaloneGuard };
|
|
19
|
+
export { acquireTransactionService, sqlClientStandaloneGuard, transactionService };
|
|
16
20
|
|
|
17
21
|
//# sourceMappingURL=standalone-guard.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"standalone-guard.mjs","names":[],"sources":["../../src/drizzle/standalone-guard.ts"],"sourcesContent":["import { requireStandalone } from \"@yielded/auth-persistence/Adapter\";\nimport { Context, Effect, Predicate } from \"effect\";\nimport type * as SqlClient from \"effect/sql/SqlClient\";\n\
|
|
1
|
+
{"version":3,"file":"standalone-guard.mjs","names":[],"sources":["../../src/drizzle/standalone-guard.ts"],"sourcesContent":["import { requireStandalone } from \"@yielded/auth-persistence/Adapter\";\nimport { Context, Effect, Predicate } from \"effect\";\nimport type * as SqlClient from \"effect/sql/SqlClient\";\n\nexport type TransactionService = Context.Key<\n SqlClient.TransactionConnection,\n SqlClient.TransactionConnection.Service\n>;\n\nexport const transactionService = (database: unknown): TransactionService | undefined => {\n if (\n !Predicate.hasProperty(database, \"$client\") ||\n !Predicate.hasProperty(database.$client, \"transactionService\") ||\n !Context.isKey(database.$client.transactionService)\n ) {\n return undefined;\n }\n\n return database.$client.transactionService;\n};\n\n/** Capture the foreign client's marker while acquiring standalone services. */\nexport const acquireTransactionService = <Id, Database>(service: Context.Key<Id, Database>) =>\n Effect.map(Effect.service(service), (database): TransactionService | undefined => {\n if (\n !Predicate.hasProperty(database, \"$client\") ||\n !Predicate.hasProperty(database.$client, \"transactionService\") ||\n !Context.isKey(database.$client.transactionService)\n ) {\n return undefined;\n }\n\n return database.$client.transactionService;\n });\n\n/** Bind the client-specific transaction marker at foreign adapter construction. */\nexport const sqlClientStandaloneGuard = <Failure>(\n service: TransactionService | undefined,\n unavailable: () => Failure,\n): Effect.Effect<void, Failure> => {\n if (service === undefined) return Effect.suspend(() => Effect.fail(unavailable()));\n\n return requireStandalone(unavailable, service);\n};\n"],"mappings":";;;AASA,MAAa,sBAAsB,aAAsD;CACvF,IACE,CAAC,UAAU,YAAY,UAAU,SAAS,KAC1C,CAAC,UAAU,YAAY,SAAS,SAAS,oBAAoB,KAC7D,CAAC,QAAQ,MAAM,SAAS,QAAQ,kBAAkB,GAElD;CAGF,OAAO,SAAS,QAAQ;AAC1B;;AAGA,MAAa,6BAA2C,YACtD,OAAO,IAAI,OAAO,QAAQ,OAAO,IAAI,aAA6C;CAChF,IACE,CAAC,UAAU,YAAY,UAAU,SAAS,KAC1C,CAAC,UAAU,YAAY,SAAS,SAAS,oBAAoB,KAC7D,CAAC,QAAQ,MAAM,SAAS,QAAQ,kBAAkB,GAElD;CAGF,OAAO,SAAS,QAAQ;AAC1B,CAAC;;AAGH,MAAa,4BACX,SACA,gBACiC;CACjC,IAAI,YAAY,KAAA,GAAW,OAAO,OAAO,cAAc,OAAO,KAAK,YAAY,CAAC,CAAC;CAEjF,OAAO,kBAAkB,aAAa,OAAO;AAC/C"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { PersistenceMappingError } from "./model.mjs";
|
|
1
|
+
import { PersistenceMappingError as PersistenceMappingError$1 } from "./model.mjs";
|
|
2
2
|
import "./transaction-owner.mjs";
|
|
3
3
|
import { TransactionCoordinatorError } from "./transaction-execution.mjs";
|
|
4
4
|
import "./totp-model.mjs";
|
|
5
5
|
import "./SuppliedService.mjs";
|
|
6
|
+
import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
|
|
6
7
|
import { Table } from "drizzle-orm";
|
|
7
|
-
import { Effect } from "effect";
|
|
8
|
+
import { Context, Effect } from "effect";
|
|
8
9
|
import { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
9
10
|
import { TotpConfigurationError, TotpPersistence, TotpUnavailable } from "@yielded/auth/Totp";
|
|
10
11
|
import { Statement } from "effect/sql/Statement";
|
|
11
12
|
//#region src/drizzle/totp-target.d.ts
|
|
12
|
-
export type TotpCoordinatorError<E> = TransactionCoordinatorError<E, TotpUnavailable> | TotpConfigurationError | PersistenceMappingError;
|
|
13
|
+
export type TotpCoordinatorError<E> = TransactionCoordinatorError<E, TotpUnavailable> | TotpConfigurationError | PersistenceMappingError$1;
|
|
13
14
|
//#endregion
|
|
14
15
|
//# sourceMappingURL=totp-target.d.mts.map
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { coordinateTransactionOwner, makeTransactionExecution, sqlClientTransactionStandaloneGuard } from "./transaction-execution.mjs";
|
|
2
2
|
import { requiredTotpConstraints } from "./totp-model.mjs";
|
|
3
3
|
import { CurrentTotpTransaction, captureTotp, invariant, mutateTotp, unavailable } from "./totp-state.mjs";
|
|
4
|
+
import { nativeDatabase } from "./native-database.mjs";
|
|
5
|
+
import { NativeDatabase } from "@yielded/auth-persistence/Adapter";
|
|
4
6
|
import { Context, Effect, Schema } from "effect";
|
|
5
7
|
import { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
6
8
|
import { TotpConfigurationError, TotpMutation, TotpPersistence, TotpPolicy } from "@yielded/auth/Totp";
|
|
7
9
|
import { randomId } from "@yielded/auth-crypto";
|
|
8
10
|
//#region src/drizzle/totp-target.ts
|
|
9
|
-
const sqlClientTotpStandaloneGuard = (
|
|
11
|
+
const sqlClientTotpStandaloneGuard = (service) => sqlClientTransactionStandaloneGuard(unavailable, service);
|
|
10
12
|
const validateMapping = (original, configuration) => {
|
|
11
13
|
const mapping = original;
|
|
12
14
|
invariant(mapping.moduleId.length > 0);
|
|
@@ -22,47 +24,48 @@ const validateMapping = (original, configuration) => {
|
|
|
22
24
|
subjectIds: Object.freeze({ ...mapping.subjectIds })
|
|
23
25
|
});
|
|
24
26
|
};
|
|
25
|
-
const services = (mapping, execution
|
|
26
|
-
snapshot: Effect.fn("TotpNative.snapshot")(function* (input) {
|
|
27
|
-
const captured = { ...input };
|
|
28
|
-
invariant(captured.moduleId === mapping.moduleId);
|
|
29
|
-
yield* execution.admit;
|
|
30
|
-
return yield* execution.run(Effect.map(captureTotp(mapping, captured.subjectId), (value) => value?.snapshot), false).pipe(Effect.provideService(LifecycleHooks, hooks));
|
|
31
|
-
}, Effect.catchDefect(() => Effect.fail(unavailable()))),
|
|
32
|
-
mutate: (original, prepare) => Effect.suspend(() => {
|
|
33
|
-
const codec = Schema.toCodecIso(TotpMutation);
|
|
34
|
-
const input = Schema.decodeSync(codec)(Schema.encodeSync(codec)(original));
|
|
35
|
-
return execution.admit.pipe(Effect.andThen(execution.run(Effect.gen(function* () {
|
|
36
|
-
const decision = yield* mutateTotp(mapping, input), owner = yield* CurrentTotpTransaction;
|
|
37
|
-
owner.guards.push(owner.journal.prepare(void 0));
|
|
38
|
-
const receipt = prepare(decision, owner.journal);
|
|
39
|
-
invariant(receipt?._tag === "PreparedCommit" && Effect.isEffect(receipt.read));
|
|
40
|
-
owner.guards.push(receipt);
|
|
41
|
-
return receipt;
|
|
42
|
-
}))), Effect.provideService(LifecycleHooks, hooks));
|
|
43
|
-
}).pipe(Effect.catchDefect(() => Effect.fail(unavailable())))
|
|
44
|
-
}) });
|
|
45
|
-
const makeTargetTotpPersistence = (database, source, configuration) => Effect.gen(function* () {
|
|
27
|
+
const services = Effect.fnUntraced(function* (mapping, execution) {
|
|
46
28
|
const hooks = yield* LifecycleHooks;
|
|
29
|
+
return { totpPersistence: TotpPersistence.of({
|
|
30
|
+
snapshot: Effect.fn("TotpNative.snapshot")(function* (input) {
|
|
31
|
+
const captured = { ...input };
|
|
32
|
+
invariant(captured.moduleId === mapping.moduleId);
|
|
33
|
+
yield* execution.admit;
|
|
34
|
+
return yield* execution.run(Effect.map(captureTotp(mapping, captured.subjectId), (value) => value?.snapshot), false).pipe(Effect.provideService(LifecycleHooks, hooks));
|
|
35
|
+
}, Effect.catchDefect(() => Effect.fail(unavailable()))),
|
|
36
|
+
mutate: (original, prepare) => Effect.suspend(() => {
|
|
37
|
+
const codec = Schema.toCodecIso(TotpMutation);
|
|
38
|
+
const input = Schema.decodeSync(codec)(Schema.encodeSync(codec)(original));
|
|
39
|
+
return execution.admit.pipe(Effect.andThen(execution.run(Effect.gen(function* () {
|
|
40
|
+
const decision = yield* mutateTotp(mapping, input), owner = yield* CurrentTotpTransaction;
|
|
41
|
+
owner.guards.push(owner.journal.prepare(void 0));
|
|
42
|
+
const receipt = prepare(decision, owner.journal);
|
|
43
|
+
invariant(receipt?._tag === "PreparedCommit" && Effect.isEffect(receipt.read));
|
|
44
|
+
owner.guards.push(receipt);
|
|
45
|
+
return receipt;
|
|
46
|
+
}))), Effect.provideService(LifecycleHooks, hooks));
|
|
47
|
+
}).pipe(Effect.catchDefect(() => Effect.fail(unavailable())))
|
|
48
|
+
}) };
|
|
49
|
+
});
|
|
50
|
+
const makeTargetTotpPersistence = (source, configuration) => Effect.gen(function* () {
|
|
47
51
|
const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
|
|
48
52
|
const mapping = yield* Effect.try({
|
|
49
53
|
try: () => validateMapping(original, configuration),
|
|
50
54
|
catch: () => TotpConfigurationError.make({})
|
|
51
55
|
});
|
|
52
|
-
const execution = makeTransactionExecution(CurrentTotpTransaction,
|
|
53
|
-
return services(mapping, execution
|
|
56
|
+
const execution = yield* makeTransactionExecution(CurrentTotpTransaction, configuration, unavailable, randomId);
|
|
57
|
+
return yield* services(mapping, execution);
|
|
54
58
|
});
|
|
55
59
|
const coordinateTargetTotp = (database, source, configuration, body) => Effect.gen(function* () {
|
|
56
|
-
const hooks = yield* LifecycleHooks;
|
|
57
60
|
const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);
|
|
58
61
|
const mapping = yield* Effect.try({
|
|
59
62
|
try: () => validateMapping(original, configuration),
|
|
60
63
|
catch: () => TotpConfigurationError.make({})
|
|
61
64
|
});
|
|
62
|
-
return yield* coordinateTransactionOwner(database, CurrentTotpTransaction, configuration, Effect.void, unavailable, randomId, (execution) => services(mapping, execution,
|
|
65
|
+
return yield* coordinateTransactionOwner(database, CurrentTotpTransaction, configuration, Effect.void, unavailable, randomId, (execution) => services(mapping, execution), (transaction, acquireServices, append) => Effect.flatMap(acquireServices, (boundServices) => body(transaction, boundServices, append)));
|
|
63
66
|
});
|
|
64
67
|
/** Concrete driver wrappers select transaction mode; cryptography always precedes these owners. */
|
|
65
|
-
const makeTotpTarget = (configuration) => {
|
|
68
|
+
const makeTotpTarget = (databaseService, configuration) => {
|
|
66
69
|
function coordinateTotpPersistence(acquire, options, body) {
|
|
67
70
|
return Effect.flatMap(acquire, (database) => coordinateTargetTotp(database, options.mapping, configuration, (transaction, services) => {
|
|
68
71
|
const provided = Context.make(TotpPersistence, services.totpPersistence);
|
|
@@ -71,7 +74,7 @@ const makeTotpTarget = (configuration) => {
|
|
|
71
74
|
}));
|
|
72
75
|
}
|
|
73
76
|
return {
|
|
74
|
-
makeTotpPersistenceServices: (
|
|
77
|
+
makeTotpPersistenceServices: (mapping) => makeTargetTotpPersistence(mapping, configuration).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),
|
|
75
78
|
coordinateTotpPersistence
|
|
76
79
|
};
|
|
77
80
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"totp-target.mjs","names":[],"sources":["../../src/drizzle/totp-target.ts"],"sourcesContent":["import { randomId } from \"@yielded/auth-crypto\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n TotpConfigurationError,\n type TotpUnavailable,\n TotpMutation,\n TotpPolicy,\n TotpPersistence,\n} from \"@yielded/auth/Totp\";\nimport type { Table } from \"drizzle-orm\";\n/* oxlint-disable no-explicit-any -- shared native implementation; driver entrypoints retain exact database and table types. */\nimport { Context, Effect, Schema } from \"effect\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport type { SuppliedService } from \"./SuppliedService\";\nimport {\n type TotpMapping,\n type TotpMappingSource,\n type TotpPersistenceServices,\n requiredTotpConstraints,\n} from \"./totp-model\";\nimport {\n captureTotp,\n CurrentTotpTransaction,\n invariant,\n mutateTotp,\n unavailable,\n} from \"./totp-state\";\nimport {\n coordinateTransactionOwner,\n makeTransactionExecution,\n sqlClientTransactionStandaloneGuard,\n type TransactionExecution,\n type TransactionTargetConfiguration,\n type TransactionCoordinatorError,\n} from \"./transaction-execution\";\nimport type { TransactionNativeDatabase } from \"./transaction-owner\";\nexport type TotpTargetConfiguration = TransactionTargetConfiguration<TotpUnavailable>;\n\nexport type TotpCoordinatorError<E> =\n | TransactionCoordinatorError<E, TotpUnavailable>\n | TotpConfigurationError\n | PersistenceMappingError;\n\nexport const sqlClientTotpStandaloneGuard = (\n database: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, database);\n\nconst validateMapping = <M>(original: M, configuration: TotpTargetConfiguration): M => {\n const mapping = original as any;\n\n invariant(mapping.moduleId.length > 0);\n Schema.decodeSync(TotpPolicy)(mapping.policy);\n for (const [key, value] of Object.entries(requiredTotpConstraints))\n invariant(mapping.constraints?.[key] === value);\n if (configuration.mode === \"batch\") invariant(mapping.d1?.primary === true);\n\n return Object.freeze({\n ...mapping,\n policy: Object.freeze({ ...mapping.policy }),\n subject: Object.freeze({ ...mapping.subject }),\n factor: Object.freeze({ ...mapping.factor }),\n credential: Object.freeze({ ...mapping.credential }),\n subjectIds: Object.freeze({ ...mapping.subjectIds }),\n });\n};\n\nconst services = (\n mapping: any,\n execution: TransactionExecution<TotpUnavailable, CurrentTotpTransaction>,\n hooks: LifecycleHooks[\"Service\"],\n): TotpPersistenceServices => ({\n totpPersistence: TotpPersistence.of({\n snapshot: Effect.fn(\"TotpNative.snapshot\")(\n function* (input) {\n const captured = { ...input };\n\n invariant(captured.moduleId === mapping.moduleId);\n yield* execution.admit;\n\n return yield* execution\n .run(\n Effect.map(captureTotp(mapping, captured.subjectId), (value) => value?.snapshot),\n false,\n )\n .pipe(Effect.provideService(LifecycleHooks, hooks));\n },\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ),\n mutate: (original, prepare) =>\n Effect.suspend(() => {\n // Detach caller-owned payloads before any driver or hook can suspend.\n const codec = Schema.toCodecIso(TotpMutation);\n const input = Schema.decodeSync(codec)(Schema.encodeSync(codec)(original));\n\n return execution.admit.pipe(\n Effect.andThen(\n execution.run(\n Effect.gen(function* () {\n const decision = yield* mutateTotp(mapping, input),\n owner = yield* CurrentTotpTransaction;\n\n owner.guards.push(owner.journal.prepare(undefined));\n const receipt = prepare(decision, owner.journal);\n\n invariant(receipt?._tag === \"PreparedCommit\" && Effect.isEffect(receipt.read));\n owner.guards.push(receipt as any);\n\n return receipt;\n }),\n ),\n ),\n Effect.provideService(LifecycleHooks, hooks),\n );\n }).pipe(Effect.catchDefect(() => Effect.fail(unavailable()))),\n }),\n});\n\nexport const makeTargetTotpPersistence = <\n S extends Table,\n F extends Table,\n C extends Table,\n N,\n RSetup = never,\n>(\n database: TransactionNativeDatabase,\n source: TotpMappingSource<TotpMapping<S, F, C, N>, RSetup>,\n configuration: TotpTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const hooks = yield* LifecycleHooks;\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => TotpConfigurationError.make({}),\n });\n\n const execution = makeTransactionExecution(\n CurrentTotpTransaction,\n database,\n configuration,\n unavailable,\n randomId,\n );\n\n return services(mapping, execution, hooks);\n });\n\nexport const coordinateTargetTotp = <M, A, E, R, RSetup = never>(\n database: TransactionNativeDatabase,\n source: TotpMappingSource<M, RSetup>,\n configuration: TotpTargetConfiguration,\n body: (\n transaction: any,\n services: TotpPersistenceServices,\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, TotpCoordinatorError<E>, R | RSetup | LifecycleHooks> =>\n Effect.gen(function* () {\n const hooks = yield* LifecycleHooks;\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => TotpConfigurationError.make({}),\n });\n\n return yield* coordinateTransactionOwner(\n database,\n CurrentTotpTransaction,\n configuration,\n Effect.void,\n unavailable,\n randomId,\n (execution) => services(mapping, execution, hooks),\n body,\n );\n });\n\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\n/** Concrete driver wrappers select transaction mode; cryptography always precedes these owners. */\nexport const makeTotpTarget = <\n D extends { readonly transaction: any },\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n configuration: TotpTargetConfiguration,\n) => {\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TotpPersistence> : R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TotpPersistence>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TotpPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TotpPersistence | TxId>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n Exclude<R, TotpPersistence> | LifecycleHooks | RSetup | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateTargetTotp(\n database as any,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services) => {\n const provided = Context.make(TotpPersistence, services.totpPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n makeTotpPersistenceServices: <\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n RSetup = never,\n >(\n database: Database,\n mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>,\n ) => makeTargetTotpPersistence(database as any, mapping, configuration),\n coordinateTotpPersistence,\n };\n};\n"],"mappings":";;;;;;;;AA6CA,MAAa,gCACX,aACG,oCAAoC,aAAa,QAAQ;AAE9D,MAAM,mBAAsB,UAAa,kBAA8C;CACrF,MAAM,UAAU;CAEhB,UAAU,QAAQ,SAAS,SAAS,CAAC;CACrC,OAAO,WAAW,UAAU,CAAC,CAAC,QAAQ,MAAM;CAC5C,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,uBAAuB,GAC/D,UAAU,QAAQ,cAAc,SAAS,KAAK;CAChD,IAAI,cAAc,SAAS,SAAS,UAAU,QAAQ,IAAI,YAAY,IAAI;CAE1E,OAAO,OAAO,OAAO;EACnB,GAAG;EACH,QAAQ,OAAO,OAAO,EAAE,GAAG,QAAQ,OAAO,CAAC;EAC3C,SAAS,OAAO,OAAO,EAAE,GAAG,QAAQ,QAAQ,CAAC;EAC7C,QAAQ,OAAO,OAAO,EAAE,GAAG,QAAQ,OAAO,CAAC;EAC3C,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,WAAW,CAAC;EACnD,YAAY,OAAO,OAAO,EAAE,GAAG,QAAQ,WAAW,CAAC;CACrD,CAAC;AACH;AAEA,MAAM,YACJ,SACA,WACA,WAC6B,EAC7B,iBAAiB,gBAAgB,GAAG;CAClC,UAAU,OAAO,GAAG,qBAAqB,CAAC,CACxC,WAAW,OAAO;EAChB,MAAM,WAAW,EAAE,GAAG,MAAM;EAE5B,UAAU,SAAS,aAAa,QAAQ,QAAQ;EAChD,OAAO,UAAU;EAEjB,OAAO,OAAO,UACX,IACC,OAAO,IAAI,YAAY,SAAS,SAAS,SAAS,IAAI,UAAU,OAAO,QAAQ,GAC/E,KACF,CAAC,CACA,KAAK,OAAO,eAAe,gBAAgB,KAAK,CAAC;CACtD,GACA,OAAO,kBAAkB,OAAO,KAAK,YAAY,CAAC,CAAC,CACrD;CACA,SAAS,UAAU,YACjB,OAAO,cAAc;EAEnB,MAAM,QAAQ,OAAO,WAAW,YAAY;EAC5C,MAAM,QAAQ,OAAO,WAAW,KAAK,CAAC,CAAC,OAAO,WAAW,KAAK,CAAC,CAAC,QAAQ,CAAC;EAEzE,OAAO,UAAU,MAAM,KACrB,OAAO,QACL,UAAU,IACR,OAAO,IAAI,aAAa;GACtB,MAAM,WAAW,OAAO,WAAW,SAAS,KAAK,GAC/C,QAAQ,OAAO;GAEjB,MAAM,OAAO,KAAK,MAAM,QAAQ,QAAQ,KAAA,CAAS,CAAC;GAClD,MAAM,UAAU,QAAQ,UAAU,MAAM,OAAO;GAE/C,UAAU,SAAS,SAAS,oBAAoB,OAAO,SAAS,QAAQ,IAAI,CAAC;GAC7E,MAAM,OAAO,KAAK,OAAc;GAEhC,OAAO;EACT,CAAC,CACH,CACF,GACA,OAAO,eAAe,gBAAgB,KAAK,CAC7C;CACF,CAAC,CAAC,CAAC,KAAK,OAAO,kBAAkB,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC;AAChE,CAAC,EACH;AAEA,MAAa,6BAOX,UACA,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO;CACrB,MAAM,WAAW,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS,OAAO,QAAQ,MAAM;CAEhF,MAAM,UAAU,OAAO,OAAO,IAAI;EAChC,WAAW,gBAAgB,UAAU,aAAa;EAClD,aAAa,uBAAuB,KAAK,CAAC,CAAC;CAC7C,CAAC;CAED,MAAM,YAAY,yBAChB,wBACA,UACA,eACA,aACA,QACF;CAEA,OAAO,SAAS,SAAS,WAAW,KAAK;AAC3C,CAAC;AAEH,MAAa,wBACX,UACA,QACA,eACA,SAMA,OAAO,IAAI,aAAa;CACtB,MAAM,QAAQ,OAAO;CACrB,MAAM,WAAW,OAAO,OAAO,SAAS,MAAM,IAAI,SAAS,OAAO,QAAQ,MAAM;CAEhF,MAAM,UAAU,OAAO,OAAO,IAAI;EAChC,WAAW,gBAAgB,UAAU,aAAa;EAClD,aAAa,uBAAuB,KAAK,CAAC,CAAC;CAC7C,CAAC;CAED,OAAO,OAAO,2BACZ,UACA,wBACA,eACA,OAAO,MACP,aACA,WACC,cAAc,SAAS,SAAS,WAAW,KAAK,GACjD,IACF;AACF,CAAC;;AAOH,MAAa,kBAMX,kBACG;CAyDH,SAAS,0BAeP,SACA,SAIA,MAKA;EACA,OAAO,OAAO,QAAQ,UAAU,aAC9B,qBACE,UACA,QAAQ,SACR,gBACC,aAAsC,aAAa;GAClD,MAAM,WAAW,QAAQ,KAAK,iBAAiB,SAAS,eAAe;GACvE,MAAM,OAAO,OAAO,eAAe,MAAM,QAAQ;GAEjD,OAAO,QAAQ,gBAAgB,KAAA,IAC3B,OACA,OAAO,eAAe,MAAM,QAAQ,aAAa,QAAQ,YAAY,GAAG,WAAW,CAAC;EAC1F,CACF,CACF;CACF;CAEA,OAAO;EACL,8BAQE,UACA,YACG,0BAA0B,UAAiB,SAAS,aAAa;EACtE;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"totp-target.mjs","names":[],"sources":["../../src/drizzle/totp-target.ts"],"sourcesContent":["import { randomId } from \"@yielded/auth-crypto\";\nimport { NativeDatabase } from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n TotpConfigurationError,\n type TotpUnavailable,\n TotpMutation,\n TotpPolicy,\n TotpPersistence,\n} from \"@yielded/auth/Totp\";\nimport type { Table } from \"drizzle-orm\";\n/* oxlint-disable no-explicit-any -- shared native implementation; driver entrypoints retain exact database and table types. */\nimport { Context, Effect, Schema } from \"effect\";\nimport type { Statement } from \"effect/sql/Statement\";\n\nimport type { PersistenceMappingError } from \"./model\";\nimport { nativeDatabase } from \"./native-database\";\nimport type { SuppliedService } from \"./SuppliedService\";\nimport {\n type TotpMapping,\n type TotpMappingSource,\n type TotpPersistenceServices,\n requiredTotpConstraints,\n} from \"./totp-model\";\nimport {\n captureTotp,\n CurrentTotpTransaction,\n invariant,\n mutateTotp,\n unavailable,\n} from \"./totp-state\";\nimport {\n coordinateTransactionOwner,\n makeTransactionExecution,\n sqlClientTransactionStandaloneGuard,\n type TransactionExecution,\n type TransactionTargetConfiguration,\n type TransactionCoordinatorError,\n} from \"./transaction-execution\";\nimport type { TransactionNativeDatabase } from \"./transaction-owner\";\nexport type TotpTargetConfiguration = TransactionTargetConfiguration<TotpUnavailable>;\n\nexport type TotpCoordinatorError<E> =\n | TransactionCoordinatorError<E, TotpUnavailable>\n | TotpConfigurationError\n | PersistenceMappingError;\n\nexport const sqlClientTotpStandaloneGuard = (\n service: Parameters<typeof sqlClientTransactionStandaloneGuard>[1],\n) => sqlClientTransactionStandaloneGuard(unavailable, service);\n\nconst validateMapping = <M>(original: M, configuration: TotpTargetConfiguration): M => {\n const mapping = original as any;\n\n invariant(mapping.moduleId.length > 0);\n Schema.decodeSync(TotpPolicy)(mapping.policy);\n for (const [key, value] of Object.entries(requiredTotpConstraints))\n invariant(mapping.constraints?.[key] === value);\n if (configuration.mode === \"batch\") invariant(mapping.d1?.primary === true);\n\n return Object.freeze({\n ...mapping,\n policy: Object.freeze({ ...mapping.policy }),\n subject: Object.freeze({ ...mapping.subject }),\n factor: Object.freeze({ ...mapping.factor }),\n credential: Object.freeze({ ...mapping.credential }),\n subjectIds: Object.freeze({ ...mapping.subjectIds }),\n });\n};\n\nconst services = Effect.fnUntraced(function* (\n mapping: any,\n execution: TransactionExecution<TotpUnavailable, CurrentTotpTransaction>,\n): Effect.fn.Return<TotpPersistenceServices, never, LifecycleHooks> {\n const hooks = yield* LifecycleHooks;\n\n return {\n totpPersistence: TotpPersistence.of({\n snapshot: Effect.fn(\"TotpNative.snapshot\")(\n function* (input) {\n const captured = { ...input };\n\n invariant(captured.moduleId === mapping.moduleId);\n yield* execution.admit;\n\n return yield* execution\n .run(\n Effect.map(captureTotp(mapping, captured.subjectId), (value) => value?.snapshot),\n false,\n )\n .pipe(Effect.provideService(LifecycleHooks, hooks));\n },\n Effect.catchDefect(() => Effect.fail(unavailable())),\n ),\n mutate: (original, prepare) =>\n Effect.suspend(() => {\n // Detach caller-owned payloads before any driver or hook can suspend.\n const codec = Schema.toCodecIso(TotpMutation);\n const input = Schema.decodeSync(codec)(Schema.encodeSync(codec)(original));\n\n return execution.admit.pipe(\n Effect.andThen(\n execution.run(\n Effect.gen(function* () {\n const decision = yield* mutateTotp(mapping, input),\n owner = yield* CurrentTotpTransaction;\n\n owner.guards.push(owner.journal.prepare(undefined));\n const receipt = prepare(decision, owner.journal);\n\n invariant(receipt?._tag === \"PreparedCommit\" && Effect.isEffect(receipt.read));\n owner.guards.push(receipt as any);\n\n return receipt;\n }),\n ),\n ),\n Effect.provideService(LifecycleHooks, hooks),\n );\n }).pipe(Effect.catchDefect(() => Effect.fail(unavailable()))),\n }),\n };\n});\n\nexport const makeTargetTotpPersistence = <\n S extends Table,\n F extends Table,\n C extends Table,\n N,\n RSetup = never,\n>(\n source: TotpMappingSource<TotpMapping<S, F, C, N>, RSetup>,\n configuration: TotpTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => TotpConfigurationError.make({}),\n });\n\n const execution = yield* makeTransactionExecution(\n CurrentTotpTransaction,\n configuration,\n unavailable,\n randomId,\n );\n\n return yield* services(mapping, execution);\n });\n\nexport const coordinateTargetTotp = <M, A, E, R, RSetup = never>(\n database: TransactionNativeDatabase,\n source: TotpMappingSource<M, RSetup>,\n configuration: TotpTargetConfiguration,\n body: (\n transaction: any,\n services: TotpPersistenceServices,\n append: (statement: Statement<any>) => void,\n ) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, TotpCoordinatorError<E>, R | RSetup | LifecycleHooks> =>\n Effect.gen(function* () {\n const original = yield* Effect.isEffect(source) ? source : Effect.succeed(source);\n\n const mapping = yield* Effect.try({\n try: () => validateMapping(original, configuration),\n catch: () => TotpConfigurationError.make({}),\n });\n\n return yield* coordinateTransactionOwner(\n database,\n CurrentTotpTransaction,\n configuration,\n Effect.void,\n unavailable,\n randomId,\n (execution) => services(mapping, execution),\n (transaction, acquireServices, append) =>\n Effect.flatMap(acquireServices, (boundServices) =>\n body(transaction, boundServices, append),\n ),\n );\n });\n\ntype TransactionOf<D> = D extends { readonly transaction: (...args: any[]) => any }\n ? Parameters<Parameters<D[\"transaction\"]>[0]>[0]\n : never;\n\n/** Concrete driver wrappers select transaction mode; cryptography always precedes these owners. */\nexport const makeTotpTarget = <\n DatabaseId,\n D extends { readonly transaction: any },\n T extends Table,\n Extra = unknown,\n Synchronous extends boolean = false,\n>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: TotpTargetConfiguration,\n) => {\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TotpPersistence> : R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TotpPersistence>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, Synchronous extends true ? NoInfer<TotpPersistence | TxId> : R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n | (Synchronous extends true ? never : Exclude<R, TotpPersistence | TxId>)\n | LifecycleHooks\n | RSetup\n | DatabaseRequirements\n >;\n function coordinateTotpPersistence<\n Database extends D,\n S extends T,\n F extends T,\n C extends T,\n N,\n A,\n E,\n R,\n TxId,\n TxShape,\n RSetup = never,\n DatabaseError = never,\n DatabaseRequirements = never,\n >(\n acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>,\n options: {\n readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>;\n readonly transaction?: SuppliedService<TxId, NoInfer<TransactionOf<Database>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n TotpCoordinatorError<E> | DatabaseError,\n Exclude<R, TotpPersistence> | LifecycleHooks | RSetup | DatabaseRequirements\n > {\n return Effect.flatMap(acquire, (database) =>\n coordinateTargetTotp(\n database as any,\n options.mapping,\n configuration,\n (transaction: TransactionOf<Database>, services) => {\n const provided = Context.make(TotpPersistence, services.totpPersistence);\n const work = Effect.provideContext(body, provided);\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n return {\n makeTotpPersistenceServices: <S extends T, F extends T, C extends T, N, RSetup = never>(\n mapping: TotpMappingSource<TotpMapping<S, F, C, N> & Extra, RSetup>,\n ) =>\n makeTargetTotpPersistence(mapping, configuration).pipe(\n Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)),\n ),\n coordinateTotpPersistence,\n };\n};\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@yielded/auth-persistence-drizzle","version":"0.1.0-beta.
|
|
1
|
+
{"name":"@yielded/auth-persistence-drizzle","version":"0.1.0-beta.12","dependencies":{"@noble/hashes":"2.3.0","@yielded/auth":"0.1.0-beta.12","@yielded/auth-crypto":"0.1.0-beta.12","@yielded/auth-persistence":"0.1.0-beta.12"},"devDependencies":{"@effect/platform-bun":"4.0.0","@effect/platform-node":"4.0.0","@effect/sql-d1":"4.0.0","@effect/sql-libsql":"4.0.0","@effect/sql-mysql2":"4.0.0","@effect/sql-pg":"4.0.0","@effect/sql-pglite":"4.0.0","@effect/sql-sqlite-bun":"4.0.0","@effect/sql-sqlite-do":"4.0.0","@effect/sql-sqlite-node":"4.0.0","@effect/sql-sqlite-wasm":"4.0.0","@effect/vitest":"4.0.0","drizzle-orm":"1.0.0-rc.4","effect":"4.0.0","typescript":"7.0.2","vite-plus":"0.3.3"},"peerDependencies":{"@effect/sql-d1":">=4.0.0","@effect/sql-libsql":">=4.0.0","@effect/sql-mysql2":">=4.0.0","@effect/sql-pg":">=4.0.0","@effect/sql-pglite":">=4.0.0","@effect/sql-sqlite-bun":">=4.0.0","@effect/sql-sqlite-do":">=4.0.0","@effect/sql-sqlite-node":">=4.0.0","@effect/sql-sqlite-wasm":">=4.0.0","drizzle-orm":">=1.0.0-rc.4","effect":"^4.0.0"},"exports":{".":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"./D1":{"types":"./dist/D1.d.mts","default":"./dist/D1.mjs"},"./Libsql":{"types":"./dist/Libsql.d.mts","default":"./dist/Libsql.mjs"},"./Mysql2":{"types":"./dist/Mysql2.d.mts","default":"./dist/Mysql2.mjs"},"./Pglite":{"types":"./dist/Pglite.d.mts","default":"./dist/Pglite.mjs"},"./Postgres":{"types":"./dist/Postgres.d.mts","default":"./dist/Postgres.mjs"},"./SqliteBun":{"types":"./dist/SqliteBun.d.mts","default":"./dist/SqliteBun.mjs"},"./SqliteDo":{"types":"./dist/SqliteDo.d.mts","default":"./dist/SqliteDo.mjs"},"./SqliteNode":{"types":"./dist/SqliteNode.d.mts","default":"./dist/SqliteNode.mjs"},"./SqliteWasm":{"types":"./dist/SqliteWasm.d.mts","default":"./dist/SqliteWasm.mjs"}},"description":"Drizzle persistence, table mappings, and migration adapters for Yielded Auth.","homepage":"https://yielded.dev/auth/","bugs":{"url":"https://github.com/yielded-dev/auth/issues"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/yielded-dev/auth.git","directory":"packages/auth-persistence-drizzle"},"files":["dist","src"],"type":"module","sideEffects":[],"publishConfig":{"access":"public"},"scripts":{"build":"vp pack","check":"tsc --noEmit -p tsconfig.json","test":"vp test --passWithNoTests","example:totp":"bun test/fixtures/totp-sqlite-bun.ts"},"peerDependenciesMeta":{"@effect/sql-d1":{"optional":true},"@effect/sql-libsql":{"optional":true},"@effect/sql-mysql2":{"optional":true},"@effect/sql-pg":{"optional":true},"@effect/sql-pglite":{"optional":true},"@effect/sql-sqlite-bun":{"optional":true},"@effect/sql-sqlite-do":{"optional":true},"@effect/sql-sqlite-node":{"optional":true},"@effect/sql-sqlite-wasm":{"optional":true}}}
|
package/src/D1.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import type { D1Client } from "@effect/sql-d1/D1Client";
|
|
2
2
|
export { makeTotpPersistenceServices, coordinateTotpPersistence } from "./drizzle/d1-totp";
|
|
3
3
|
import type { AnyRelations } from "drizzle-orm";
|
|
4
|
-
import type
|
|
4
|
+
import { type EffectSQLiteD1Database, makeWithDefaults } from "drizzle-orm/effect-d1";
|
|
5
5
|
import type { AnySQLiteTable } from "drizzle-orm/sqlite-core";
|
|
6
6
|
|
|
7
|
+
import { Database } from "./drizzle/d1-database";
|
|
8
|
+
export { Database } from "./drizzle/d1-database";
|
|
9
|
+
|
|
7
10
|
export {
|
|
8
11
|
makeD1OAuthAccountsServices as makeOAuthAccountsServices,
|
|
9
12
|
makeD1OAuthSignInServices as makeOAuthSignInServices,
|
|
@@ -52,12 +55,28 @@ export {
|
|
|
52
55
|
makeD1EmailSignInServices as makeEmailSignInServices,
|
|
53
56
|
} from "./drizzle/d1-emails";
|
|
54
57
|
|
|
55
|
-
import
|
|
58
|
+
import type {
|
|
59
|
+
D1GeneratedIdentityMapping,
|
|
60
|
+
D1SubjectProvisioningMapping,
|
|
61
|
+
D1ExternalIdentityMapping,
|
|
62
|
+
} from "./drizzle/model";
|
|
56
63
|
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
export const makeSubjectProvisioningServices = <
|
|
65
|
+
Subject extends AnySQLiteTable,
|
|
66
|
+
Identifier extends AnySQLiteTable,
|
|
67
|
+
Request extends AnySQLiteTable,
|
|
68
|
+
NativeId,
|
|
69
|
+
>(
|
|
70
|
+
mapping: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>,
|
|
71
|
+
) => makeD1SubjectProvisioningServices(mapping);
|
|
72
|
+
|
|
73
|
+
export const makeExternalIdentityServices = <
|
|
74
|
+
Subject extends AnySQLiteTable,
|
|
75
|
+
External extends AnySQLiteTable,
|
|
76
|
+
NativeId,
|
|
77
|
+
>(
|
|
78
|
+
mapping: D1ExternalIdentityMapping<Subject, External, NativeId>,
|
|
79
|
+
) => makeD1ExternalIdentityServices(mapping);
|
|
61
80
|
|
|
62
81
|
export const commitMode = "batch" as const;
|
|
63
82
|
|
|
@@ -68,9 +87,8 @@ export const makeIdentityServices = <
|
|
|
68
87
|
Request extends AnySQLiteTable,
|
|
69
88
|
NativeId,
|
|
70
89
|
>(
|
|
71
|
-
database: EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
|
|
72
90
|
mapping: D1GeneratedIdentityMapping<Subject, Identifier, External, Request, NativeId>,
|
|
73
|
-
) => makeD1IdentityServices(
|
|
91
|
+
) => makeD1IdentityServices(mapping);
|
|
74
92
|
|
|
75
93
|
export {
|
|
76
94
|
makeD1SessionStepUpServices as makeSessionStepUpServices,
|
|
@@ -84,16 +102,22 @@ export {
|
|
|
84
102
|
|
|
85
103
|
export { passwordPreparedPersistenceLayer } from "./drizzle/password-prepared-target";
|
|
86
104
|
|
|
87
|
-
import { Effect } from "effect";
|
|
105
|
+
import { Effect, Layer } from "effect";
|
|
88
106
|
|
|
89
107
|
import { makeD1OAuthConnectedTarget } from "./drizzle/oauth-connected-drivers";
|
|
90
108
|
import type { OAuthD1Mapping } from "./drizzle/oauth-model";
|
|
91
109
|
|
|
92
110
|
const connectedTarget = makeD1OAuthConnectedTarget<
|
|
111
|
+
Database,
|
|
93
112
|
EffectSQLiteD1Database<AnyRelations> & { readonly $client: D1Client },
|
|
94
113
|
AnySQLiteTable<{ dialect: "sqlite" }>,
|
|
95
114
|
OAuthD1Mapping
|
|
96
|
-
>(
|
|
115
|
+
>(Database, {
|
|
116
|
+
mode: "batch",
|
|
117
|
+
dialect: "sqlite",
|
|
118
|
+
locking: false,
|
|
119
|
+
standaloneGuard: () => Effect.void,
|
|
120
|
+
});
|
|
97
121
|
|
|
98
122
|
export const {
|
|
99
123
|
makeOAuthConnectedServices,
|
|
@@ -118,3 +142,6 @@ export {
|
|
|
118
142
|
export { D1BatchStatements } from "./drizzle/D1BatchStatements";
|
|
119
143
|
|
|
120
144
|
export { makePhonePersistenceServices, coordinatePhonePersistence } from "./drizzle/d1-phone";
|
|
145
|
+
|
|
146
|
+
/** Construct Drizzle from the driver's SQL-client Layer. */
|
|
147
|
+
export const databaseLayer = Layer.effect(Database, makeWithDefaults({}));
|