@yielded/auth-persistence-drizzle 0.1.0-beta.31 → 0.1.0-beta.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/D1.d.mts +4 -4
- package/dist/Libsql.d.mts +4 -4
- package/dist/Mysql2.d.mts +4 -4
- package/dist/Pglite.d.mts +4 -4
- package/dist/Postgres.d.mts +4 -4
- package/dist/SqliteBun.d.mts +4 -4
- package/dist/SqliteDo.d.mts +4 -4
- package/dist/SqliteNode.d.mts +4 -4
- package/dist/SqliteWasm.d.mts +4 -4
- package/dist/drizzle/oauth-target.mjs +5 -1
- package/dist/drizzle/oauth-target.mjs.map +1 -1
- package/dist/drizzle/passkey/target.mjs.map +1 -1
- package/dist/drizzle/session-drivers.mjs +6 -5
- package/dist/drizzle/session-drivers.mjs.map +1 -1
- package/dist/drizzle/storage-validation.mjs +2 -1
- package/dist/drizzle/storage-validation.mjs.map +1 -1
- package/package.json +1 -1
- package/src/drizzle/oauth-target.ts +5 -1
- package/src/drizzle/passkey/target.ts +5 -1
- package/src/drizzle/session-drivers.ts +16 -5
- package/src/drizzle/storage-validation.ts +2 -0
package/README.md
CHANGED
|
@@ -23,6 +23,7 @@ D1 also supports managed tables through `AuthPersistence.make(auth).managed(...)
|
|
|
23
23
|
Supply the primary D1 binding through `D1Client.layer` and apply generated SQL
|
|
24
24
|
with `AuthPersistence.migrationsLayer({ migrations })` using bundled SQL,
|
|
25
25
|
or with your existing D1 migration runner. Its composed services use atomic batches.
|
|
26
|
+
OAuth sign-in and retained provider access use the same managed composition.
|
|
26
27
|
Password provisioning returns subject values through `Persistence.Provisioning`;
|
|
27
28
|
the library commits the account and credentials together.
|
|
28
29
|
|
package/dist/D1.d.mts
CHANGED
|
@@ -238,7 +238,7 @@ export declare const makePasskeyCredentialServices: <S extends D1Table, C extend
|
|
|
238
238
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
239
239
|
}) => import("effect/Effect").Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
240
240
|
};
|
|
241
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends D1Table, C extends D1Table, F extends D1Table, Flow extends D1Table, N, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyPersistenceMapping<PasskeyCredentialMapping<S, C, F, N>, Flow, N> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
241
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends D1Table, C extends D1Table, F extends D1Table, Flow extends D1Table, N, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyPersistenceMapping<PasskeyCredentialMapping<S, C, F, N>, Flow, N> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
242
242
|
passkeyPersistence: {
|
|
243
243
|
readonly issue: <A>(input: {
|
|
244
244
|
readonly ceremony: import("@yielded/auth/Passkey").PasskeyCeremony;
|
|
@@ -255,7 +255,7 @@ export declare const makePasskeyCredentialServices: <S extends D1Table, C extend
|
|
|
255
255
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
256
256
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
257
257
|
};
|
|
258
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends D1Table, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
258
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends D1Table, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
259
259
|
passkeyPersistence: {
|
|
260
260
|
readonly issue: <A>(input: {
|
|
261
261
|
readonly ceremony: import("@yielded/auth/Passkey").PasskeyCeremony;
|
|
@@ -377,7 +377,7 @@ export declare const makePasskeyCredentialServices: <S extends D1Table, C extend
|
|
|
377
377
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
378
378
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
379
379
|
};
|
|
380
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends D1Table, C extends D1Table, F extends D1Table, Flow extends D1Table, N, Value, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationMapping<S, C, F, Flow, N, Value> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
380
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends D1Table, C extends D1Table, F extends D1Table, Flow extends D1Table, N, Value, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationMapping<S, C, F, Flow, N, Value> & D1PasskeyMapping, RSetup>) => import("effect/Effect").Effect<{
|
|
381
381
|
passkeyRegistrationAuthority: import("@yielded/auth-persistence/Adapter").PasskeyRegistrationWriter<Value>;
|
|
382
382
|
passkeyPersistence: {
|
|
383
383
|
readonly issue: <A>(input: {
|
|
@@ -395,7 +395,7 @@ export declare const makePasskeyCredentialServices: <S extends D1Table, C extend
|
|
|
395
395
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
396
396
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
397
397
|
};
|
|
398
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
398
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
399
399
|
<Database extends D1Database, S extends D1Table, C extends D1Table, F extends D1Table, Flow extends D1Table, N, A, E, R, RSetup = never, DatabaseError = never, DatabaseRequirements = never>(acquire: import("effect/Effect").Effect<Database, DatabaseError, DatabaseRequirements>, options: {
|
|
400
400
|
readonly mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyManagementMapping<S, C, F, Flow, N> & D1PasskeyMapping, RSetup>;
|
|
401
401
|
readonly transaction?: never;
|
package/dist/Libsql.d.mts
CHANGED
|
@@ -376,7 +376,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
376
376
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
377
377
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
378
378
|
};
|
|
379
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
379
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
380
380
|
dialect: "sqlite";
|
|
381
381
|
}>, C extends AnySQLiteTable<{
|
|
382
382
|
dialect: "sqlite";
|
|
@@ -401,7 +401,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
401
401
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
402
402
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
403
403
|
};
|
|
404
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
404
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
405
405
|
dialect: "sqlite";
|
|
406
406
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
407
407
|
passkeyPersistence: {
|
|
@@ -557,7 +557,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
557
557
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
558
558
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
559
559
|
};
|
|
560
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
560
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
561
561
|
dialect: "sqlite";
|
|
562
562
|
}>, C extends AnySQLiteTable<{
|
|
563
563
|
dialect: "sqlite";
|
|
@@ -583,7 +583,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
583
583
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
584
584
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
585
585
|
};
|
|
586
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
586
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
587
587
|
<Database extends EffectLibsqlDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnySQLiteTable<{
|
|
588
588
|
dialect: "sqlite";
|
|
589
589
|
}>, C extends AnySQLiteTable<{
|
package/dist/Mysql2.d.mts
CHANGED
|
@@ -371,7 +371,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyMySqlTable<{
|
|
|
371
371
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
372
372
|
}) => import("effect/Effect").Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
373
373
|
};
|
|
374
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyMySqlTable<{
|
|
374
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyMySqlTable<{
|
|
375
375
|
dialect: "mysql";
|
|
376
376
|
}>, C extends AnyMySqlTable<{
|
|
377
377
|
dialect: "mysql";
|
|
@@ -396,7 +396,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyMySqlTable<{
|
|
|
396
396
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
397
397
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
398
398
|
};
|
|
399
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyMySqlTable<{
|
|
399
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyMySqlTable<{
|
|
400
400
|
dialect: "mysql";
|
|
401
401
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => import("effect/Effect").Effect<{
|
|
402
402
|
passkeyPersistence: {
|
|
@@ -552,7 +552,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyMySqlTable<{
|
|
|
552
552
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
553
553
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
554
554
|
};
|
|
555
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyMySqlTable<{
|
|
555
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyMySqlTable<{
|
|
556
556
|
dialect: "mysql";
|
|
557
557
|
}>, C extends AnyMySqlTable<{
|
|
558
558
|
dialect: "mysql";
|
|
@@ -578,7 +578,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyMySqlTable<{
|
|
|
578
578
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
579
579
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => import("effect/Effect").Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
580
580
|
};
|
|
581
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
581
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
582
582
|
<Database extends EffectMysql2Database<import("drizzle-orm").TablesRelationalConfig>, S extends AnyMySqlTable<{
|
|
583
583
|
dialect: "mysql";
|
|
584
584
|
}>, C extends AnyMySqlTable<{
|
package/dist/Pglite.d.mts
CHANGED
|
@@ -372,7 +372,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
372
372
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
373
373
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
374
374
|
};
|
|
375
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyPgTable<{
|
|
375
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyPgTable<{
|
|
376
376
|
dialect: "pg";
|
|
377
377
|
}>, C extends AnyPgTable<{
|
|
378
378
|
dialect: "pg";
|
|
@@ -397,7 +397,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
397
397
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
398
398
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
399
399
|
};
|
|
400
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyPgTable<{
|
|
400
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyPgTable<{
|
|
401
401
|
dialect: "pg";
|
|
402
402
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
403
403
|
passkeyPersistence: {
|
|
@@ -553,7 +553,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
553
553
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
554
554
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
555
555
|
};
|
|
556
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyPgTable<{
|
|
556
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyPgTable<{
|
|
557
557
|
dialect: "pg";
|
|
558
558
|
}>, C extends AnyPgTable<{
|
|
559
559
|
dialect: "pg";
|
|
@@ -579,7 +579,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
579
579
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
580
580
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
581
581
|
};
|
|
582
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
582
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
583
583
|
<Database extends EffectPgDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnyPgTable<{
|
|
584
584
|
dialect: "pg";
|
|
585
585
|
}>, C extends AnyPgTable<{
|
package/dist/Postgres.d.mts
CHANGED
|
@@ -372,7 +372,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
372
372
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
373
373
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
374
374
|
};
|
|
375
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyPgTable<{
|
|
375
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnyPgTable<{
|
|
376
376
|
dialect: "pg";
|
|
377
377
|
}>, C extends AnyPgTable<{
|
|
378
378
|
dialect: "pg";
|
|
@@ -397,7 +397,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
397
397
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
398
398
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
399
399
|
};
|
|
400
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyPgTable<{
|
|
400
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnyPgTable<{
|
|
401
401
|
dialect: "pg";
|
|
402
402
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
403
403
|
passkeyPersistence: {
|
|
@@ -553,7 +553,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
553
553
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
554
554
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
555
555
|
};
|
|
556
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyPgTable<{
|
|
556
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnyPgTable<{
|
|
557
557
|
dialect: "pg";
|
|
558
558
|
}>, C extends AnyPgTable<{
|
|
559
559
|
dialect: "pg";
|
|
@@ -579,7 +579,7 @@ export declare const makePasskeyCredentialServices: <S extends AnyPgTable<{
|
|
|
579
579
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
580
580
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
581
581
|
};
|
|
582
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
582
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
583
583
|
<Database extends EffectPgDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnyPgTable<{
|
|
584
584
|
dialect: "pg";
|
|
585
585
|
}>, C extends AnyPgTable<{
|
package/dist/SqliteBun.d.mts
CHANGED
|
@@ -376,7 +376,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
376
376
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
377
377
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
378
378
|
};
|
|
379
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
379
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
380
380
|
dialect: "sqlite";
|
|
381
381
|
}>, C extends AnySQLiteTable<{
|
|
382
382
|
dialect: "sqlite";
|
|
@@ -401,7 +401,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
401
401
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
402
402
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
403
403
|
};
|
|
404
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
404
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
405
405
|
dialect: "sqlite";
|
|
406
406
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
407
407
|
passkeyPersistence: {
|
|
@@ -557,7 +557,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
557
557
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
558
558
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
559
559
|
};
|
|
560
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
560
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
561
561
|
dialect: "sqlite";
|
|
562
562
|
}>, C extends AnySQLiteTable<{
|
|
563
563
|
dialect: "sqlite";
|
|
@@ -583,7 +583,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
583
583
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
584
584
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
585
585
|
};
|
|
586
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
586
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
587
587
|
<Database extends EffectSQLiteBunDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnySQLiteTable<{
|
|
588
588
|
dialect: "sqlite";
|
|
589
589
|
}>, C extends AnySQLiteTable<{
|
package/dist/SqliteDo.d.mts
CHANGED
|
@@ -378,7 +378,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
378
378
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
379
379
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
380
380
|
};
|
|
381
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
381
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
382
382
|
dialect: "sqlite";
|
|
383
383
|
}>, C extends AnySQLiteTable<{
|
|
384
384
|
dialect: "sqlite";
|
|
@@ -403,7 +403,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
403
403
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
404
404
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
405
405
|
};
|
|
406
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
406
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
407
407
|
dialect: "sqlite";
|
|
408
408
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
409
409
|
passkeyPersistence: {
|
|
@@ -559,7 +559,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
559
559
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
560
560
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
561
561
|
};
|
|
562
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
562
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
563
563
|
dialect: "sqlite";
|
|
564
564
|
}>, C extends AnySQLiteTable<{
|
|
565
565
|
dialect: "sqlite";
|
|
@@ -585,7 +585,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
585
585
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
586
586
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
587
587
|
};
|
|
588
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
588
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
589
589
|
<Database extends DatabaseValue<import("drizzle-orm").TablesRelationalConfig>, S extends AnySQLiteTable<{
|
|
590
590
|
dialect: "sqlite";
|
|
591
591
|
}>, C extends AnySQLiteTable<{
|
package/dist/SqliteNode.d.mts
CHANGED
|
@@ -376,7 +376,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
376
376
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
377
377
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
378
378
|
};
|
|
379
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
379
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
380
380
|
dialect: "sqlite";
|
|
381
381
|
}>, C extends AnySQLiteTable<{
|
|
382
382
|
dialect: "sqlite";
|
|
@@ -401,7 +401,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
401
401
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
402
402
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
403
403
|
};
|
|
404
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
404
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
405
405
|
dialect: "sqlite";
|
|
406
406
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
407
407
|
passkeyPersistence: {
|
|
@@ -557,7 +557,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
557
557
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
558
558
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
559
559
|
};
|
|
560
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
560
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
561
561
|
dialect: "sqlite";
|
|
562
562
|
}>, C extends AnySQLiteTable<{
|
|
563
563
|
dialect: "sqlite";
|
|
@@ -583,7 +583,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
583
583
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
584
584
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
585
585
|
};
|
|
586
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
586
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
587
587
|
<Database extends EffectSQLiteNodeDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnySQLiteTable<{
|
|
588
588
|
dialect: "sqlite";
|
|
589
589
|
}>, C extends AnySQLiteTable<{
|
package/dist/SqliteWasm.d.mts
CHANGED
|
@@ -376,7 +376,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
376
376
|
readonly protocolCredentialId: import("@yielded/auth/Passkey").PasskeyProtocolCredentialId;
|
|
377
377
|
}) => Effect.Effect<import("@yielded/auth/Passkey").PasskeyCredential | undefined, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
378
378
|
};
|
|
379
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
379
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | Exclude<RSetup, NativeDatabase>>, makePasskeyPersistenceServices: <S extends AnySQLiteTable<{
|
|
380
380
|
dialect: "sqlite";
|
|
381
381
|
}>, C extends AnySQLiteTable<{
|
|
382
382
|
dialect: "sqlite";
|
|
@@ -401,7 +401,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
401
401
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
402
402
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
403
403
|
};
|
|
404
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
404
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationCeremonyServices: <Flow extends AnySQLiteTable<{
|
|
405
405
|
dialect: "sqlite";
|
|
406
406
|
}>, RSetup = never>(mapping: import("@yielded/auth-persistence/Adapter").PasskeyMappingSource<PasskeyRegistrationCeremonyMapping<Flow>, RSetup>) => Effect.Effect<{
|
|
407
407
|
passkeyPersistence: {
|
|
@@ -557,7 +557,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
557
557
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
558
558
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
559
559
|
};
|
|
560
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
560
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, makePasskeyRegistrationServices: <S extends AnySQLiteTable<{
|
|
561
561
|
dialect: "sqlite";
|
|
562
562
|
}>, C extends AnySQLiteTable<{
|
|
563
563
|
dialect: "sqlite";
|
|
@@ -583,7 +583,7 @@ export declare const makePasskeyCredentialServices: <S extends AnySQLiteTable<{
|
|
|
583
583
|
readonly limit: import("@yielded/auth/Persistence").CleanupLimit;
|
|
584
584
|
}, prepare: import("@yielded/auth/Passkey").PreparePasskeyCommit<import("@yielded/auth/Persistence").CleanupResult, A>) => Effect.Effect<import("@yielded/auth/Hooks").PreparedCommit<A>, import("@yielded/auth/Passkey").PasskeyUnavailable>;
|
|
585
585
|
};
|
|
586
|
-
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
586
|
+
}, import("@yielded/auth/Passkey").PasskeyConfigurationError | import("@yielded/auth/Passkey").PasskeyUnavailable | import("@yielded/auth-persistence/Adapter").PersistenceMappingError, import("effect/Crypto").Crypto | Database | import("@yielded/auth/Hooks").LifecycleHooks | Exclude<RSetup, NativeDatabase>>, coordinatePasskeyManagement: {
|
|
587
587
|
<Database extends EffectSQLiteWasmDatabase<import("drizzle-orm").TablesRelationalConfig>, S extends AnySQLiteTable<{
|
|
588
588
|
dialect: "sqlite";
|
|
589
589
|
}>, C extends AnySQLiteTable<{
|
|
@@ -2,13 +2,17 @@ import { coordinateNativeTarget, nativeTarget } from "./native-target.mjs";
|
|
|
2
2
|
import { validateDrizzleStorage } from "./storage-validation.mjs";
|
|
3
3
|
import { captureOAuthMapping, makeNativeOAuthAccountsServices, makeNativeOAuthConnectedServices, makeNativeOAuthRegistrationIntentServices, makeNativeOAuthRegistrationServices, makeNativeOAuthRevocationServices, makeNativeOAuthSignInServices, oauthAccountsPersistenceLayer, oauthConnectedPersistenceLayer, oauthConnectedRevocationsLayer, oauthRegistrationAuthorityLayer, oauthRegistrationIntentsLayer, oauthSignInPersistenceLayer } from "@yielded/auth-persistence/Adapter";
|
|
4
4
|
import { Effect } from "effect";
|
|
5
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
5
6
|
import { OAuthUnavailable } from "@yielded/auth/OAuth";
|
|
6
7
|
//#region src/drizzle/oauth-target.ts
|
|
7
8
|
const unavailable = () => OAuthUnavailable.make({});
|
|
8
9
|
const mapped = Effect.fnUntraced(function* (original, configuration) {
|
|
9
10
|
const mapping = captureOAuthMapping(original);
|
|
10
11
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
11
|
-
if (configuration.mode === "batch" && !(typeof mapping === "object" && mapping !== null && "d1" in mapping && typeof mapping.d1 === "object" && mapping.d1 !== null && "primary" in mapping.d1 && mapping.d1.primary === true))
|
|
12
|
+
if (configuration.mode === "batch" && !(typeof mapping === "object" && mapping !== null && "d1" in mapping && typeof mapping.d1 === "object" && mapping.d1 !== null && "primary" in mapping.d1 && mapping.d1.primary === true)) {
|
|
13
|
+
yield* reportAuthDiagnostic("persistence-validation", "configuration");
|
|
14
|
+
return yield* unavailable();
|
|
15
|
+
}
|
|
12
16
|
return {
|
|
13
17
|
mapping,
|
|
14
18
|
...yield* nativeTarget(configuration)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-target.mjs","names":[],"sources":["../../src/drizzle/oauth-target.ts"],"sourcesContent":["import {\n captureOAuthMapping,\n makeNativeOAuthSignInServices,\n makeNativeOAuthAccountsServices,\n makeNativeOAuthRegistrationIntentServices,\n makeNativeOAuthRegistrationServices,\n makeNativeOAuthConnectedServices,\n makeNativeOAuthRevocationServices,\n type OAuthNativeReadMapping,\n type OAuthNativeAccountsMapping,\n type OAuthNativeRegistrationIntentMapping,\n type OAuthNativeRegistrationMapping,\n type OAuthNativeConnectedMapping,\n type OAuthNativeRevocationMapping,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { OAuthUnavailable } from \"@yielded/auth/OAuth\";\nimport { Effect } from \"effect\";\n\nimport type { D1BatchStatements } from \"./D1BatchStatements\";\nimport type { NativeDatabaseHandle } from \"./native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nexport {\n oauthAccountsPersistenceLayer,\n oauthSignInPersistenceLayer,\n oauthRegistrationIntentsLayer,\n oauthRegistrationAuthorityLayer,\n oauthConnectedPersistenceLayer,\n oauthConnectedRevocationsLayer,\n} from \"@yielded/auth-persistence/Adapter\";\n\nexport type OAuthTargetConfiguration = NativeTargetConfiguration;\n\nexport type OAuthCoordinatorError<E> = E | OAuthUnavailable;\nconst unavailable = () => OAuthUnavailable.make({});\n\nconst mapped = Effect.fnUntraced(function* (\n original: unknown,\n configuration: OAuthTargetConfiguration,\n) {\n const mapping = captureOAuthMapping(original);\n\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n !(\n typeof mapping === \"object\" &&\n mapping !== null &&\n \"d1\" in mapping &&\n typeof mapping.d1 === \"object\" &&\n mapping.d1 !== null &&\n \"primary\" in mapping.d1 &&\n mapping.d1.primary === true\n )\n )\n return yield* unavailable();\n\n return { mapping, ...(yield* nativeTarget(configuration)) };\n});\n\nexport const makeTargetOAuthSignInServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthSignInServices(\n target.tables,\n target.mapping as OAuthNativeReadMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthAccountsServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthAccountsServices(\n target.tables,\n target.mapping as OAuthNativeAccountsMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthRegistrationIntentServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRegistrationIntentServices(\n target.tables,\n target.mapping as OAuthNativeRegistrationIntentMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthConnectedServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthConnectedServices(\n target.tables,\n target.mapping as OAuthNativeConnectedMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthConnectedRevocationServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRevocationServices(\n target.tables,\n target.mapping as OAuthNativeRevocationMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthRegistrationServices = <Registration>(\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRegistrationServices(\n target.tables,\n target.mapping as OAuthNativeRegistrationMapping<Registration>,\n target.batch,\n ),\n );\n });\n\nconst coordinateOwner = <Services, Transaction, A, E, R, ES, RS>(\n database: NativeDatabaseHandle,\n configuration: OAuthTargetConfiguration,\n make: Effect.Effect<Services, ES, RS>,\n body: (transaction: Transaction, services: Services) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, E | OAuthUnavailable, Exclude<R, D1BatchStatements> | RS | LifecycleHooks> =>\n coordinateNativeTarget(unavailable, database, configuration, make, body);\n\nexport const coordinateTargetOAuthSignIn = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthSignInServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthSignInServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthAccounts = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthAccountsServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthAccountsServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthRegistrationIntents = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationIntentServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthRegistrationIntentServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthConnected = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthConnectedServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthConnectedServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthConnectedRevocations = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthConnectedRevocationServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthConnectedRevocationServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthRegistration = <Registration, Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationServices<Registration>>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthRegistrationServices<Registration>(mapping, configuration),\n body,\n );\n"],"mappings":";;;;;;AAwCA,MAAM,oBAAoB,iBAAiB,KAAK,CAAC,CAAC;AAElD,MAAM,SAAS,OAAO,WAAW,WAC/B,UACA,eACA;CACA,MAAM,UAAU,oBAAoB,QAAQ;CAE5C,OAAO,uBAAuB,OAAO,CAAC,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC;CACxE,IACE,cAAc,SAAS,WACvB,EACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,WACR,OAAO,QAAQ,OAAO,YACtB,QAAQ,OAAO,QACf,aAAa,QAAQ,MACrB,QAAQ,GAAG,YAAY,OAGzB,OAAO,OAAO,YAAY;CAE5B,OAAO;EAAE;EAAS,GAAI,OAAO,aAAa,aAAa;CAAG;AAC5D,CAAC;AAED,MAAa,iCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,8BACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,mCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,gCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,6CACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,0CACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,oCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,iCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,8CACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,kCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,uCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,oCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAM,mBACJ,UACA,eACA,MACA,SAEA,uBAAuB,aAAa,UAAU,eAAe,MAAM,IAAI;AAEzE,MAAa,+BACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,8BAA8B,SAAS,aAAa,GACpD,IACF;AAEF,MAAa,iCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,gCAAgC,SAAS,aAAa,GACtD,IACF;AAEF,MAAa,4CACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,0CAA0C,SAAS,aAAa,GAChE,IACF;AAEF,MAAa,kCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,iCAAiC,SAAS,aAAa,GACvD,IACF;AAEF,MAAa,6CACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,2CAA2C,SAAS,aAAa,GACjE,IACF;AAEF,MAAa,qCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,oCAAkD,SAAS,aAAa,GACxE,IACF"}
|
|
1
|
+
{"version":3,"file":"oauth-target.mjs","names":[],"sources":["../../src/drizzle/oauth-target.ts"],"sourcesContent":["import {\n captureOAuthMapping,\n makeNativeOAuthSignInServices,\n makeNativeOAuthAccountsServices,\n makeNativeOAuthRegistrationIntentServices,\n makeNativeOAuthRegistrationServices,\n makeNativeOAuthConnectedServices,\n makeNativeOAuthRevocationServices,\n type OAuthNativeReadMapping,\n type OAuthNativeAccountsMapping,\n type OAuthNativeRegistrationIntentMapping,\n type OAuthNativeRegistrationMapping,\n type OAuthNativeConnectedMapping,\n type OAuthNativeRevocationMapping,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { OAuthUnavailable } from \"@yielded/auth/OAuth\";\nimport { reportAuthDiagnostic } from \"@yielded/auth/Persistence\";\nimport { Effect } from \"effect\";\n\nimport type { D1BatchStatements } from \"./D1BatchStatements\";\nimport type { NativeDatabaseHandle } from \"./native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\n\nexport {\n oauthAccountsPersistenceLayer,\n oauthSignInPersistenceLayer,\n oauthRegistrationIntentsLayer,\n oauthRegistrationAuthorityLayer,\n oauthConnectedPersistenceLayer,\n oauthConnectedRevocationsLayer,\n} from \"@yielded/auth-persistence/Adapter\";\n\nexport type OAuthTargetConfiguration = NativeTargetConfiguration;\n\nexport type OAuthCoordinatorError<E> = E | OAuthUnavailable;\nconst unavailable = () => OAuthUnavailable.make({});\n\nconst mapped = Effect.fnUntraced(function* (\n original: unknown,\n configuration: OAuthTargetConfiguration,\n) {\n const mapping = captureOAuthMapping(original);\n\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n !(\n typeof mapping === \"object\" &&\n mapping !== null &&\n \"d1\" in mapping &&\n typeof mapping.d1 === \"object\" &&\n mapping.d1 !== null &&\n \"primary\" in mapping.d1 &&\n mapping.d1.primary === true\n )\n ) {\n yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\");\n\n return yield* unavailable();\n }\n\n return { mapping, ...(yield* nativeTarget(configuration)) };\n});\n\nexport const makeTargetOAuthSignInServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthSignInServices(\n target.tables,\n target.mapping as OAuthNativeReadMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthAccountsServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthAccountsServices(\n target.tables,\n target.mapping as OAuthNativeAccountsMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthRegistrationIntentServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRegistrationIntentServices(\n target.tables,\n target.mapping as OAuthNativeRegistrationIntentMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthConnectedServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthConnectedServices(\n target.tables,\n target.mapping as OAuthNativeConnectedMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthConnectedRevocationServices = (\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRevocationServices(\n target.tables,\n target.mapping as OAuthNativeRevocationMapping,\n target.batch,\n ),\n );\n });\n\nexport const makeTargetOAuthRegistrationServices = <Registration>(\n source: unknown,\n configuration: OAuthTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* mapped(source, configuration);\n\n return yield* target.provide(\n makeNativeOAuthRegistrationServices(\n target.tables,\n target.mapping as OAuthNativeRegistrationMapping<Registration>,\n target.batch,\n ),\n );\n });\n\nconst coordinateOwner = <Services, Transaction, A, E, R, ES, RS>(\n database: NativeDatabaseHandle,\n configuration: OAuthTargetConfiguration,\n make: Effect.Effect<Services, ES, RS>,\n body: (transaction: Transaction, services: Services) => Effect.Effect<A, E, R>,\n): Effect.Effect<A, E | OAuthUnavailable, Exclude<R, D1BatchStatements> | RS | LifecycleHooks> =>\n coordinateNativeTarget(unavailable, database, configuration, make, body);\n\nexport const coordinateTargetOAuthSignIn = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthSignInServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthSignInServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthAccounts = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthAccountsServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthAccountsServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthRegistrationIntents = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationIntentServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthRegistrationIntentServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthConnected = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthConnectedServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthConnectedServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthConnectedRevocations = <Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthConnectedRevocationServices>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthConnectedRevocationServices(mapping, configuration),\n body,\n );\n\nexport const coordinateTargetOAuthRegistration = <Registration, Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n mapping: unknown,\n configuration: OAuthTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetOAuthRegistrationServices<Registration>>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinateOwner(\n database,\n configuration,\n makeTargetOAuthRegistrationServices<Registration>(mapping, configuration),\n body,\n );\n"],"mappings":";;;;;;;AAyCA,MAAM,oBAAoB,iBAAiB,KAAK,CAAC,CAAC;AAElD,MAAM,SAAS,OAAO,WAAW,WAC/B,UACA,eACA;CACA,MAAM,UAAU,oBAAoB,QAAQ;CAE5C,OAAO,uBAAuB,OAAO,CAAC,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC;CACxE,IACE,cAAc,SAAS,WACvB,EACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,WACR,OAAO,QAAQ,OAAO,YACtB,QAAQ,OAAO,QACf,aAAa,QAAQ,MACrB,QAAQ,GAAG,YAAY,OAEzB;EACA,OAAO,qBAAqB,0BAA0B,eAAe;EAErE,OAAO,OAAO,YAAY;CAC5B;CAEA,OAAO;EAAE;EAAS,GAAI,OAAO,aAAa,aAAa;CAAG;AAC5D,CAAC;AAED,MAAa,iCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,8BACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,mCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,gCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,6CACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,0CACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,oCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,iCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,8CACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,kCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAa,uCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,OAAO,QAAQ,aAAa;CAElD,OAAO,OAAO,OAAO,QACnB,oCACE,OAAO,QACP,OAAO,SACP,OAAO,KACT,CACF;AACF,CAAC;AAEH,MAAM,mBACJ,UACA,eACA,MACA,SAEA,uBAAuB,aAAa,UAAU,eAAe,MAAM,IAAI;AAEzE,MAAa,+BACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,8BAA8B,SAAS,aAAa,GACpD,IACF;AAEF,MAAa,iCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,gCAAgC,SAAS,aAAa,GACtD,IACF;AAEF,MAAa,4CACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,0CAA0C,SAAS,aAAa,GAChE,IACF;AAEF,MAAa,kCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,iCAAiC,SAAS,aAAa,GACvD,IACF;AAEF,MAAa,6CACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,2CAA2C,SAAS,aAAa,GACjE,IACF;AAEF,MAAa,qCACX,UACA,SACA,eACA,SAKA,gBACE,UACA,eACA,oCAAkD,SAAS,aAAa,GACxE,IACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target.mjs","names":[],"sources":["../../../src/drizzle/passkey/target.ts"],"sourcesContent":["import {\n type SqlBatchCommit,\n makeBatchPasskeyServices,\n makeNativePasskeyCeremonyServices,\n makeNativePasskeyCredentialServices,\n makeNativePasskeyServices,\n type NativeSqlTables,\n type NativePasskeyCeremonyMapping,\n type PasskeyNativeMapping,\n type PasskeyNativeRead,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyConfigurationError, PasskeyUnavailable } from \"@yielded/auth/Passkey\";\nimport { type Crypto, Effect } from \"effect\";\nimport type { SqlClient } from \"effect/sql\";\n\nimport type { D1BatchStatements } from \"../D1BatchStatements\";\nimport type { PersistenceMappingError } from \"../model\";\nimport {\n NativeDatabase,\n type NativeDatabaseHandle,\n type NativePhysicalDatabase,\n} from \"../native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"../native-target\";\nimport type { PasskeyPersistenceServices, PasskeyMappingSource } from \"../passkey-model\";\nimport { validateDrizzleStorage } from \"../storage-validation\";\nexport type PasskeyTargetConfiguration = NativeTargetConfiguration;\n\nexport type PasskeyCoordinatorError<E> =\n | E\n | PasskeyUnavailable\n | PasskeyConfigurationError\n | PersistenceMappingError;\n\nconst unavailable = () => PasskeyUnavailable.make({});\n\nconst emptyHooks: LifecycleHooks[\"Service\"] = {\n before: () => Effect.void,\n after: () => Effect.succeed([]),\n};\n\n// Mapped table/SQL generics end here. Persisted values are decoded by shared schemas.\nexport const capturePasskeyMapping = <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n) =>\n Effect.flatMap(Effect.isEffect(source) ? source : Effect.succeed(source), (mapping) =>\n validateDrizzleStorage(mapping).pipe(\n Effect.andThen(\n Effect.try({\n try: () => {\n if (\n configuration.mode === \"batch\" &&\n !(\n typeof mapping === \"object\" &&\n mapping !== null &&\n \"d1\" in mapping &&\n typeof mapping.d1 === \"object\" &&\n mapping.d1 !== null &&\n \"primary\" in mapping.d1 &&\n mapping.d1.primary === true\n )\n )\n throw PasskeyConfigurationError.make({});\n\n return mapping;\n },\n catch: () => PasskeyConfigurationError.make({}),\n }),\n ),\n ),\n );\n\ntype NativePasskeyServices = Effect.Success<ReturnType<typeof makeNativePasskeyServices>>;\n\ninterface PasskeyMapped<M> {\n readonly mapping: M;\n readonly database: NativePhysicalDatabase;\n readonly tables: NativeSqlTables;\n readonly batch: SqlBatchCommit[\"Service\"] | undefined;\n readonly provide: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, Exclude<Exclude<R, SqlClient.SqlClient>, SqlBatchCommit>>;\n readonly base: () => Effect.Effect
|
|
1
|
+
{"version":3,"file":"target.mjs","names":[],"sources":["../../../src/drizzle/passkey/target.ts"],"sourcesContent":["import {\n type SqlBatchCommit,\n makeBatchPasskeyServices,\n makeNativePasskeyCeremonyServices,\n makeNativePasskeyCredentialServices,\n makeNativePasskeyServices,\n type NativeSqlTables,\n type NativePasskeyCeremonyMapping,\n type PasskeyNativeMapping,\n type PasskeyNativeRead,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { PasskeyConfigurationError, PasskeyUnavailable } from \"@yielded/auth/Passkey\";\nimport { type Crypto, Effect } from \"effect\";\nimport type { SqlClient } from \"effect/sql\";\n\nimport type { D1BatchStatements } from \"../D1BatchStatements\";\nimport type { PersistenceMappingError } from \"../model\";\nimport {\n NativeDatabase,\n type NativeDatabaseHandle,\n type NativePhysicalDatabase,\n} from \"../native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"../native-target\";\nimport type { PasskeyPersistenceServices, PasskeyMappingSource } from \"../passkey-model\";\nimport { validateDrizzleStorage } from \"../storage-validation\";\nexport type PasskeyTargetConfiguration = NativeTargetConfiguration;\n\nexport type PasskeyCoordinatorError<E> =\n | E\n | PasskeyUnavailable\n | PasskeyConfigurationError\n | PersistenceMappingError;\n\nconst unavailable = () => PasskeyUnavailable.make({});\n\nconst emptyHooks: LifecycleHooks[\"Service\"] = {\n before: () => Effect.void,\n after: () => Effect.succeed([]),\n};\n\n// Mapped table/SQL generics end here. Persisted values are decoded by shared schemas.\nexport const capturePasskeyMapping = <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n) =>\n Effect.flatMap(Effect.isEffect(source) ? source : Effect.succeed(source), (mapping) =>\n validateDrizzleStorage(mapping).pipe(\n Effect.andThen(\n Effect.try({\n try: () => {\n if (\n configuration.mode === \"batch\" &&\n !(\n typeof mapping === \"object\" &&\n mapping !== null &&\n \"d1\" in mapping &&\n typeof mapping.d1 === \"object\" &&\n mapping.d1 !== null &&\n \"primary\" in mapping.d1 &&\n mapping.d1.primary === true\n )\n )\n throw PasskeyConfigurationError.make({});\n\n return mapping;\n },\n catch: () => PasskeyConfigurationError.make({}),\n }),\n ),\n ),\n );\n\ntype NativePasskeyServices = Effect.Success<ReturnType<typeof makeNativePasskeyServices>>;\n\ninterface PasskeyMapped<M> {\n readonly mapping: M;\n readonly database: NativePhysicalDatabase;\n readonly tables: NativeSqlTables;\n readonly batch: SqlBatchCommit[\"Service\"] | undefined;\n readonly provide: <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n ) => Effect.Effect<A, E, Exclude<Exclude<R, SqlClient.SqlClient>, SqlBatchCommit>>;\n readonly base: () => Effect.Effect<\n NativePasskeyServices,\n PasskeyUnavailable,\n Crypto.Crypto | LifecycleHooks\n >;\n}\n\nexport const makePasskeyMapped = Effect.fnUntraced(function* <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n): Effect.fn.Return<\n PasskeyMapped<M>,\n PasskeyConfigurationError | PersistenceMappingError,\n R | NativeDatabase\n> {\n const mapping = yield* capturePasskeyMapping(source, configuration);\n const database = yield* NativeDatabase;\n const { tables, batch, provide } = yield* nativeTarget(configuration);\n const native = mapping as unknown as PasskeyNativeMapping;\n\n return {\n mapping,\n database,\n tables,\n batch,\n provide,\n base: () =>\n provide(\n configuration.mode === \"batch\"\n ? makeBatchPasskeyServices(tables, native)\n : makeNativePasskeyServices(tables, native),\n ),\n };\n});\n\nexport const makeTargetPasskeyCredentials = <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* makePasskeyMapped(source, configuration);\n\n return yield* target\n .provide(\n makeNativePasskeyCredentialServices(\n target.tables,\n target.mapping as unknown as PasskeyNativeRead,\n ),\n )\n .pipe(Effect.provideService(LifecycleHooks, emptyHooks));\n }).pipe(Effect.catchDefect(() => Effect.fail(PasskeyConfigurationError.make({}))));\n\nexport const makeTargetPasskeyPersistence = <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* makePasskeyMapped(source, configuration);\n\n const base = yield* target.base();\n\n return { passkeyPersistence: base.passkeyPersistence } satisfies PasskeyPersistenceServices;\n });\n\nexport const makeTargetPasskeyRegistration = <M, R>(\n source: PasskeyMappingSource<M, R>,\n configuration: PasskeyTargetConfiguration,\n) =>\n Effect.gen(function* () {\n const target = yield* makePasskeyMapped(source, configuration);\n\n return yield* target.provide(\n makeNativePasskeyCeremonyServices(\n target.tables,\n target.mapping as unknown as NativePasskeyCeremonyMapping,\n configuration.mode === \"batch\" ? target.batch : undefined,\n ),\n );\n });\n\nexport const coordinatePasskeyOwner = <S, Transaction, A, E, R, ESetup, RSetup>(\n database: NativeDatabaseHandle,\n configuration: PasskeyTargetConfiguration,\n make: Effect.Effect<S, ESetup, RSetup>,\n body: (transaction: Transaction, services: S) => Effect.Effect<A, E, R>,\n): Effect.Effect<\n A,\n E | PasskeyUnavailable,\n Exclude<R, D1BatchStatements> | RSetup | LifecycleHooks\n> => coordinateNativeTarget(unavailable, database, configuration, make, body);\n\nexport const coordinateTargetPasskey = <M, RSetup, Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n source: PasskeyMappingSource<M, RSetup>,\n configuration: PasskeyTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetPasskeyPersistence>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinatePasskeyOwner(\n database,\n configuration,\n makeTargetPasskeyPersistence(source, configuration),\n body,\n );\n\nexport const coordinateTargetPasskeyRegistration = <M, RSetup, Transaction, A, E, R>(\n database: NativeDatabaseHandle,\n source: PasskeyMappingSource<M, RSetup>,\n configuration: PasskeyTargetConfiguration,\n body: (\n transaction: Transaction,\n services: Effect.Success<ReturnType<typeof makeTargetPasskeyRegistration>>,\n ) => Effect.Effect<A, E, R>,\n) =>\n coordinatePasskeyOwner(\n database,\n configuration,\n makeTargetPasskeyRegistration(source, configuration),\n body,\n );\n"],"mappings":";;;;;;;;AAsCA,MAAM,oBAAoB,mBAAmB,KAAK,CAAC,CAAC;AAEpD,MAAM,aAAwC;CAC5C,cAAc,OAAO;CACrB,aAAa,OAAO,QAAQ,CAAC,CAAC;AAChC;AAGA,MAAa,yBACX,QACA,kBAEA,OAAO,QAAQ,OAAO,SAAS,MAAM,IAAI,SAAS,OAAO,QAAQ,MAAM,IAAI,YACzE,uBAAuB,OAAO,CAAC,CAAC,KAC9B,OAAO,QACL,OAAO,IAAI;CACT,WAAW;EACT,IACE,cAAc,SAAS,WACvB,EACE,OAAO,YAAY,YACnB,YAAY,QACZ,QAAQ,WACR,OAAO,QAAQ,OAAO,YACtB,QAAQ,OAAO,QACf,aAAa,QAAQ,MACrB,QAAQ,GAAG,YAAY,OAGzB,MAAM,0BAA0B,KAAK,CAAC,CAAC;EAEzC,OAAO;CACT;CACA,aAAa,0BAA0B,KAAK,CAAC,CAAC;AAChD,CAAC,CACH,CACF,CACF;AAmBF,MAAa,oBAAoB,OAAO,WAAW,WACjD,QACA,eAKA;CACA,MAAM,UAAU,OAAO,sBAAsB,QAAQ,aAAa;CAClE,MAAM,WAAW,OAAO;CACxB,MAAM,EAAE,QAAQ,OAAO,YAAY,OAAO,aAAa,aAAa;CACpE,MAAM,SAAS;CAEf,OAAO;EACL;EACA;EACA;EACA;EACA;EACA,YACE,QACE,cAAc,SAAS,UACnB,yBAAyB,QAAQ,MAAM,IACvC,0BAA0B,QAAQ,MAAM,CAC9C;CACJ;AACF,CAAC;AAED,MAAa,gCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,kBAAkB,QAAQ,aAAa;CAE7D,OAAO,OAAO,OACX,QACC,oCACE,OAAO,QACP,OAAO,OACT,CACF,CAAC,CACA,KAAK,OAAO,eAAe,gBAAgB,UAAU,CAAC;AAC3D,CAAC,CAAC,CAAC,KAAK,OAAO,kBAAkB,OAAO,KAAK,0BAA0B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnF,MAAa,gCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CAKtB,OAAO,EAAE,qBAAoB,QAFT,OAFE,kBAAkB,QAAQ,aAAa,EAAA,CAElC,KAAK,EAAA,CAEE,mBAAmB;AACvD,CAAC;AAEH,MAAa,iCACX,QACA,kBAEA,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,OAAO,kBAAkB,QAAQ,aAAa;CAE7D,OAAO,OAAO,OAAO,QACnB,kCACE,OAAO,QACP,OAAO,SACP,cAAc,SAAS,UAAU,OAAO,QAAQ,KAAA,CAClD,CACF;AACF,CAAC;AAEH,MAAa,0BACX,UACA,eACA,MACA,SAKG,uBAAuB,aAAa,UAAU,eAAe,MAAM,IAAI;AAE5E,MAAa,2BACX,UACA,QACA,eACA,SAKA,uBACE,UACA,eACA,6BAA6B,QAAQ,aAAa,GAClD,IACF;AAEF,MAAa,uCACX,UACA,QACA,eACA,SAKA,uBACE,UACA,eACA,8BAA8B,QAAQ,aAAa,GACnD,IACF"}
|
|
@@ -4,6 +4,7 @@ import { coordinateNativeTarget, nativeTarget } from "./native-target.mjs";
|
|
|
4
4
|
import { validateDrizzleStorage } from "./storage-validation.mjs";
|
|
5
5
|
import { makeNativeAuthenticationAuthorityServices, makeNativePendingAuthenticationServices, makeNativeSessionCleanupServices, makeNativeSessionStepUpServices, makeNativeSignedSessionValidityServices, makeNativeStatefulSessionServices } from "@yielded/auth-persistence/Adapter";
|
|
6
6
|
import { Effect } from "effect";
|
|
7
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
7
8
|
import { AuthenticationAuthority, SessionUnavailable } from "@yielded/auth/Sessions";
|
|
8
9
|
//#region src/drizzle/session-drivers.ts
|
|
9
10
|
const unavailable = () => SessionUnavailable.make({});
|
|
@@ -16,7 +17,7 @@ const clockMapping = (mapping) => ({
|
|
|
16
17
|
const makeSessionTarget = (databaseService, configuration) => {
|
|
17
18
|
const authenticationAuthority = (mapping) => Effect.gen(function* () {
|
|
18
19
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
19
|
-
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
|
|
20
|
+
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(Effect.andThen(unavailable()));
|
|
20
21
|
const target = yield* nativeTarget(configuration);
|
|
21
22
|
return yield* target.provide(makeNativeAuthenticationAuthorityServices(target.tables, mapping));
|
|
22
23
|
});
|
|
@@ -28,7 +29,7 @@ const makeSessionTarget = (databaseService, configuration) => {
|
|
|
28
29
|
}
|
|
29
30
|
const pendingAuthentication = (mapping) => Effect.gen(function* () {
|
|
30
31
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
31
|
-
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
|
|
32
|
+
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(Effect.andThen(unavailable()));
|
|
32
33
|
const target = yield* nativeTarget(configuration);
|
|
33
34
|
return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));
|
|
34
35
|
});
|
|
@@ -40,7 +41,7 @@ const makeSessionTarget = (databaseService, configuration) => {
|
|
|
40
41
|
}
|
|
41
42
|
const statefulSessionPersistence = (mapping) => Effect.gen(function* () {
|
|
42
43
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
43
|
-
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
|
|
44
|
+
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(Effect.andThen(unavailable()));
|
|
44
45
|
const target = yield* nativeTarget(configuration);
|
|
45
46
|
return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));
|
|
46
47
|
});
|
|
@@ -52,7 +53,7 @@ const makeSessionTarget = (databaseService, configuration) => {
|
|
|
52
53
|
}
|
|
53
54
|
const signedSessionValidity = (mapping) => Effect.gen(function* () {
|
|
54
55
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
55
|
-
if (configuration.mode === "batch" && mapping.d1?.primary !== true) return yield* unavailable();
|
|
56
|
+
if (configuration.mode === "batch" && mapping.d1?.primary !== true) return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(Effect.andThen(unavailable()));
|
|
56
57
|
const target = yield* nativeTarget(configuration);
|
|
57
58
|
return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));
|
|
58
59
|
});
|
|
@@ -64,7 +65,7 @@ const makeSessionTarget = (databaseService, configuration) => {
|
|
|
64
65
|
}
|
|
65
66
|
const sessionStepUpPersistence = (mapping) => Effect.gen(function* () {
|
|
66
67
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
67
|
-
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* unavailable();
|
|
68
|
+
if (configuration.mode === "batch" && (mapping.d1?.primary !== true || mapping.subject.requirementColumns === void 0)) return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(Effect.andThen(unavailable()));
|
|
68
69
|
const target = yield* nativeTarget(configuration);
|
|
69
70
|
return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));
|
|
70
71
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-drivers.mjs","names":[],"sources":["../../src/drizzle/session-drivers.ts"],"sourcesContent":["import {\n makeNativeAuthenticationAuthorityServices,\n type NativeAuthenticationAuthorityMapping,\n makeNativePendingAuthenticationServices,\n type NativePendingAuthenticationMapping,\n makeNativeStatefulSessionServices,\n type NativeStatefulSessionMapping,\n makeNativeSignedSessionValidityServices,\n type NativeSignedSessionValidityMapping,\n makeNativeSessionStepUpServices,\n type NativeSessionStepUpMapping,\n makeNativeSessionCleanupServices,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport {\n AuthenticationAuthority,\n SessionUnavailable,\n type PendingAuthentication,\n type StatefulSessionPersistence,\n type SessionRepository,\n type SignedSessionValidity,\n type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { Table } from \"drizzle-orm\";\nimport { Effect, type Context } from \"effect\";\n\nimport type { NativeDriverDatabase, NativeDriverTransaction } from \"./driver-types\";\nimport { nativeClock, type MappedClock } from \"./native-clock\";\nimport { NativeDatabase, nativeDatabase } from \"./native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type {\n AuthenticationAuthorityMapping,\n PendingAuthenticationMapping,\n StatefulSessionMapping,\n SignedSessionValidityMapping,\n SessionCleanupMapping,\n} from \"./session-model\";\nimport type { SessionStepUpMapping } from \"./step-up-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\nconst unavailable = () => SessionUnavailable.make({});\n\nconst clockMapping = <T extends { readonly clock: MappedClock }>(mapping: T) => ({\n ...mapping,\n clock: nativeClock(mapping.clock),\n});\n\n/** Foreign table/ID callback variance is erased only at this physical mapping\n * boundary. All subjects, sessions, pending payloads and policy use their codecs. */\nexport const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: NativeTargetConfiguration,\n) => {\n const authenticationAuthority = <Claims>(mapping: NativeAuthenticationAuthorityMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeAuthenticationAuthorityServices(target.tables, mapping),\n );\n });\n\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority | TxId> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n authenticationAuthority(\n clockMapping(options.mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(AuthenticationAuthority, services.authenticationAuthority),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const pendingAuthentication = <Claims>(mapping: NativePendingAuthenticationMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));\n });\n\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n pendingAuthentication(\n clockMapping(options.mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.pendingAuthentication),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const statefulSessionPersistence = <Claims>(mapping: NativeStatefulSessionMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));\n });\n\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId | TxId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n statefulSessionPersistence(\n clockMapping(options.mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.persistence, services.statefulSessionPersistence),\n Effect.provideService(options.repository, services.sessionRepository),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const signedSessionValidity = (mapping: NativeSignedSessionValidityMapping) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (configuration.mode === \"batch\" && mapping.d1?.primary !== true)\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));\n });\n\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n signedSessionValidity(\n clockMapping(options.mapping) as unknown as NativeSignedSessionValidityMapping,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.signedSessionValidity),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const sessionStepUpPersistence = <Claims>(mapping: NativeSessionStepUpMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* unavailable();\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));\n });\n\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n sessionStepUpPersistence(\n clockMapping(options.mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.sessionStepUpPersistence),\n );\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 coordinateAuthenticationAuthority,\n makeAuthenticationAuthorityServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>,\n ) =>\n authenticationAuthority(\n clockMapping(mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinatePendingAuthentication,\n makePendingAuthenticationServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: PendingAuthenticationMapping<Claims, S, C, P, N>,\n ) =>\n pendingAuthentication(\n clockMapping(mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateStatefulSessions,\n makeStatefulSessionServices: <\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n >(\n mapping: StatefulSessionMapping<Claims, S, C, Session, P, N, NS>,\n ) =>\n statefulSessionPersistence(\n clockMapping(mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSignedSessionValidity,\n makeSignedSessionValidityServices: <S extends Table, T extends Table, N, NS>(\n mapping: SignedSessionValidityMapping<S, T, N, NS>,\n ) =>\n signedSessionValidity(\n clockMapping(mapping) as unknown as NativeSignedSessionValidityMapping,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSessionStepUp,\n makeSessionStepUpServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n Id,\n >(\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n ) =>\n sessionStepUpPersistence(\n clockMapping(mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n )\n .pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)))\n .pipe(\n Effect.map((services) => ({\n sessionStepUpPersistence: target.of(services.sessionStepUpPersistence),\n })),\n ),\n makeSessionCleanupServices: <P extends Table, T extends Table, N, NS>(\n mapping: SessionCleanupMapping<P, T, N, NS>,\n ) =>\n Effect.gen(function* () {\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeSessionCleanupServices(\n target.tables,\n clockMapping(mapping) as unknown as Parameters<\n typeof makeNativeSessionCleanupServices\n >[1],\n ),\n );\n }).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-drivers.mjs","names":[],"sources":["../../src/drizzle/session-drivers.ts"],"sourcesContent":["import {\n makeNativeAuthenticationAuthorityServices,\n type NativeAuthenticationAuthorityMapping,\n makeNativePendingAuthenticationServices,\n type NativePendingAuthenticationMapping,\n makeNativeStatefulSessionServices,\n type NativeStatefulSessionMapping,\n makeNativeSignedSessionValidityServices,\n type NativeSignedSessionValidityMapping,\n makeNativeSessionStepUpServices,\n type NativeSessionStepUpMapping,\n makeNativeSessionCleanupServices,\n} from \"@yielded/auth-persistence/Adapter\";\nimport type { LifecycleHooks } from \"@yielded/auth/Hooks\";\nimport { reportAuthDiagnostic } from \"@yielded/auth/Persistence\";\nimport {\n AuthenticationAuthority,\n SessionUnavailable,\n type PendingAuthentication,\n type StatefulSessionPersistence,\n type SessionRepository,\n type SignedSessionValidity,\n type SessionStepUpPersistence,\n} from \"@yielded/auth/Sessions\";\nimport type { Table } from \"drizzle-orm\";\nimport { Effect, type Context } from \"effect\";\n\nimport type { NativeDriverDatabase, NativeDriverTransaction } from \"./driver-types\";\nimport { nativeClock, type MappedClock } from \"./native-clock\";\nimport { NativeDatabase, nativeDatabase } from \"./native-database\";\nimport {\n nativeTarget,\n coordinateNativeTarget,\n type NativeTargetConfiguration,\n} from \"./native-target\";\nimport type {\n AuthenticationAuthorityMapping,\n PendingAuthenticationMapping,\n StatefulSessionMapping,\n SignedSessionValidityMapping,\n SessionCleanupMapping,\n} from \"./session-model\";\nimport type { SessionStepUpMapping } from \"./step-up-model\";\nimport { validateDrizzleStorage } from \"./storage-validation\";\nimport type { SuppliedService } from \"./SuppliedService\";\n\nconst unavailable = () => SessionUnavailable.make({});\n\nconst clockMapping = <T extends { readonly clock: MappedClock }>(mapping: T) => ({\n ...mapping,\n clock: nativeClock(mapping.clock),\n});\n\n/** Foreign table/ID callback variance is erased only at this physical mapping\n * boundary. All subjects, sessions, pending payloads and policy use their codecs. */\nexport const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(\n databaseService: Context.Service<DatabaseId, D>,\n configuration: NativeTargetConfiguration,\n) => {\n const authenticationAuthority = <Claims>(mapping: NativeAuthenticationAuthorityMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n Effect.andThen(unavailable()),\n );\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeAuthenticationAuthorityServices(target.tables, mapping),\n );\n });\n\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, AuthenticationAuthority | TxId> | DR | LifecycleHooks\n >;\n function coordinateAuthenticationAuthority<\n DB extends D,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n authenticationAuthority(\n clockMapping(options.mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(AuthenticationAuthority, services.authenticationAuthority),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const pendingAuthentication = <Claims>(mapping: NativePendingAuthenticationMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n Effect.andThen(unavailable()),\n );\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));\n });\n\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinatePendingAuthentication<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: PendingAuthenticationMapping<NoInfer<Claims>, S, C, P, N>;\n readonly target: SuppliedService<Id, PendingAuthentication<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n pendingAuthentication(\n clockMapping(options.mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.pendingAuthentication),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const statefulSessionPersistence = <Claims>(mapping: NativeStatefulSessionMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n Effect.andThen(unavailable()),\n );\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));\n });\n\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<\n A,\n E | DE | SessionUnavailable,\n Exclude<R, Id | RepositoryId | TxId> | DR | LifecycleHooks\n >;\n function coordinateStatefulSessions<\n DB extends D,\n Id,\n RepositoryId,\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: StatefulSessionMapping<NoInfer<Claims>, S, C, Session, P, N, NS>;\n readonly persistence: SuppliedService<Id, StatefulSessionPersistence<Claims>>;\n readonly repository: SuppliedService<RepositoryId, SessionRepository>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n statefulSessionPersistence(\n clockMapping(options.mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.persistence, services.statefulSessionPersistence),\n Effect.provideService(options.repository, services.sessionRepository),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const signedSessionValidity = (mapping: NativeSignedSessionValidityMapping) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (configuration.mode === \"batch\" && mapping.d1?.primary !== true)\n return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n Effect.andThen(unavailable()),\n );\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));\n });\n\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSignedSessionValidity<\n DB extends D,\n Id,\n S extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SignedSessionValidityMapping<S, T, N, NS>;\n readonly target: SuppliedService<Id, SignedSessionValidity>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n signedSessionValidity(\n clockMapping(options.mapping) as unknown as NativeSignedSessionValidityMapping,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.signedSessionValidity),\n );\n\n return options.transaction === undefined\n ? work\n : Effect.provideService(work, options.transaction, options.transaction.of(transaction));\n },\n ),\n );\n }\n\n const sessionStepUpPersistence = <Claims>(mapping: NativeSessionStepUpMapping<Claims>) =>\n Effect.gen(function* () {\n yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));\n if (\n configuration.mode === \"batch\" &&\n (mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)\n )\n return yield* reportAuthDiagnostic(\"persistence-validation\", \"configuration\").pipe(\n Effect.andThen(unavailable()),\n );\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));\n });\n\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: never;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ): Effect.Effect<A, E | DE | SessionUnavailable, Exclude<R, Id | TxId> | DR | LifecycleHooks>;\n function coordinateSessionStepUp<\n DB extends D,\n Id,\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n A,\n E,\n R,\n DE,\n DR,\n TxId,\n TxShape,\n >(\n acquire: Effect.Effect<DB, DE, DR>,\n options: {\n readonly mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>;\n readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;\n readonly transaction?: SuppliedService<TxId, NoInfer<NativeDriverTransaction<DB>>, TxShape>;\n },\n body: Effect.Effect<A, E, R>,\n ) {\n return Effect.flatMap(nativeDatabase(acquire), (database) =>\n coordinateNativeTarget(\n unavailable,\n database,\n configuration,\n sessionStepUpPersistence(\n clockMapping(options.mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n ),\n (transaction: NativeDriverTransaction<DB>, services) => {\n const work = body.pipe(\n Effect.provideService(options.target, services.sessionStepUpPersistence),\n );\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 coordinateAuthenticationAuthority,\n makeAuthenticationAuthorityServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: AuthenticationAuthorityMapping<Claims, S, C, P, N>,\n ) =>\n authenticationAuthority(\n clockMapping(mapping) as unknown as NativeAuthenticationAuthorityMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinatePendingAuthentication,\n makePendingAuthenticationServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n N,\n >(\n mapping: PendingAuthenticationMapping<Claims, S, C, P, N>,\n ) =>\n pendingAuthentication(\n clockMapping(mapping) as unknown as NativePendingAuthenticationMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateStatefulSessions,\n makeStatefulSessionServices: <\n Claims,\n S extends Table,\n C extends Table,\n Session extends Table,\n P extends Table,\n N,\n NS,\n >(\n mapping: StatefulSessionMapping<Claims, S, C, Session, P, N, NS>,\n ) =>\n statefulSessionPersistence(\n clockMapping(mapping) as unknown as NativeStatefulSessionMapping<Claims>,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSignedSessionValidity,\n makeSignedSessionValidityServices: <S extends Table, T extends Table, N, NS>(\n mapping: SignedSessionValidityMapping<S, T, N, NS>,\n ) =>\n signedSessionValidity(\n clockMapping(mapping) as unknown as NativeSignedSessionValidityMapping,\n ).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n coordinateSessionStepUp,\n makeSessionStepUpServices: <\n Claims,\n S extends Table,\n C extends Table,\n P extends Table,\n Session extends Table,\n T extends Table,\n N,\n NS,\n Id,\n >(\n mapping: SessionStepUpMapping<NoInfer<Claims>, S, C, P, Session, T, N, NS>,\n target: Context.Service<Id, SessionStepUpPersistence<Claims>>,\n ) =>\n sessionStepUpPersistence(\n clockMapping(mapping) as unknown as NativeSessionStepUpMapping<Claims>,\n )\n .pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService)))\n .pipe(\n Effect.map((services) => ({\n sessionStepUpPersistence: target.of(services.sessionStepUpPersistence),\n })),\n ),\n makeSessionCleanupServices: <P extends Table, T extends Table, N, NS>(\n mapping: SessionCleanupMapping<P, T, N, NS>,\n ) =>\n Effect.gen(function* () {\n const target = yield* nativeTarget(configuration);\n\n return yield* target.provide(\n makeNativeSessionCleanupServices(\n target.tables,\n clockMapping(mapping) as unknown as Parameters<\n typeof makeNativeSessionCleanupServices\n >[1],\n ),\n );\n }).pipe(Effect.provideServiceEffect(NativeDatabase, nativeDatabase(databaseService))),\n };\n};\n"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import { Effect } from "effect";
|
|
|
5
5
|
import { MySqlTable, getTableConfig } from "drizzle-orm/mysql-core";
|
|
6
6
|
import { PgTable, getTableConfig as getTableConfig$1 } from "drizzle-orm/pg-core";
|
|
7
7
|
import { SqlClient } from "effect/sql/SqlClient";
|
|
8
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
8
9
|
//#region src/drizzle/storage-validation.ts
|
|
9
10
|
/** Validate at acquisition using the root database supplied by the adapter. */
|
|
10
11
|
const validateDrizzleStorage = Effect.fnUntraced(function* (mapping) {
|
|
@@ -48,7 +49,7 @@ const validateDrizzleStorage = Effect.fnUntraced(function* (mapping) {
|
|
|
48
49
|
}, Effect.catchDefect(() => Effect.fail(PersistenceMappingError.make({
|
|
49
50
|
operation: "mapping",
|
|
50
51
|
cause: "Cannot inspect SQL storage metadata"
|
|
51
|
-
}))));
|
|
52
|
+
}))), Effect.tapError(() => reportAuthDiagnostic("persistence-validation", "mapping")));
|
|
52
53
|
//#endregion
|
|
53
54
|
export { validateDrizzleStorage };
|
|
54
55
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-validation.mjs","names":["getPgTableConfig","getMysqlTableConfig"],"sources":["../../src/drizzle/storage-validation.ts"],"sourcesContent":["import {\n PersistenceMappingError,\n validateStorageBatch,\n type StorageValidation,\n storageKeyPlans,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { getTableColumns, getTableName, is, Table } from \"drizzle-orm\";\nimport { getTableConfig as getMysqlTableConfig, MySqlTable } from \"drizzle-orm/mysql-core\";\nimport { getTableConfig as getPgTableConfig, PgTable } from \"drizzle-orm/pg-core\";\nimport { Effect } from \"effect\";\nimport { SqlClient } from \"effect/sql/SqlClient\";\n\nimport { NativeDatabase } from \"./native-database\";\n\n/** Validate at acquisition using the root database supplied by the adapter. */\nexport const validateDrizzleStorage = Effect.fnUntraced(\n function* (mapping: unknown) {\n const physical = yield* Effect.try({\n try: () =>\n storageKeyPlans(mapping, (table) => {\n if (!is(table, Table)) throw new Error(\"Missing storage table\");\n\n return getTableColumns(table);\n }),\n catch: () =>\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Invalid storage key mapping\",\n }),\n });\n\n const { $client: client } = yield* NativeDatabase;\n\n const batches = new Map<\"pg\" | \"mysql\" | \"sqlite\", StorageValidation[]>();\n\n for (const plan of physical) {\n if (!is(plan.table, Table))\n return yield* PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Missing storage table\",\n });\n const pg = is(plan.table, PgTable);\n const mysql = is(plan.table, MySqlTable);\n\n const schema = pg\n ? getPgTableConfig(plan.table).schema\n : mysql\n ? getMysqlTableConfig(plan.table).schema\n : undefined;\n\n const columns = getTableColumns(plan.table);\n\n const dialect = pg ? \"pg\" : mysql ? \"mysql\" : \"sqlite\";\n const batch = batches.get(dialect) ?? [];\n\n batch.push({\n table: {\n name: getTableName(plan.table),\n ...(schema === undefined ? {} : { schema }),\n columns: Object.fromEntries(plan.keys.map((key) => [key, { name: columns[key]!.name }])),\n },\n required: [plan.keys],\n });\n batches.set(dialect, batch);\n }\n for (const [dialect, requirements] of batches) {\n yield* validateStorageBatch(dialect, requirements).pipe(\n Effect.provideService(SqlClient, client),\n Effect.mapError(() =>\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Required SQL storage key is unavailable\",\n }),\n ),\n );\n }\n },\n Effect.catchDefect(() =>\n Effect.fail(\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Cannot inspect SQL storage metadata\",\n }),\n ),\n ),\n);\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage-validation.mjs","names":["getPgTableConfig","getMysqlTableConfig"],"sources":["../../src/drizzle/storage-validation.ts"],"sourcesContent":["import {\n PersistenceMappingError,\n validateStorageBatch,\n type StorageValidation,\n storageKeyPlans,\n} from \"@yielded/auth-persistence/Adapter\";\nimport { reportAuthDiagnostic } from \"@yielded/auth/Persistence\";\nimport { getTableColumns, getTableName, is, Table } from \"drizzle-orm\";\nimport { getTableConfig as getMysqlTableConfig, MySqlTable } from \"drizzle-orm/mysql-core\";\nimport { getTableConfig as getPgTableConfig, PgTable } from \"drizzle-orm/pg-core\";\nimport { Effect } from \"effect\";\nimport { SqlClient } from \"effect/sql/SqlClient\";\n\nimport { NativeDatabase } from \"./native-database\";\n\n/** Validate at acquisition using the root database supplied by the adapter. */\nexport const validateDrizzleStorage = Effect.fnUntraced(\n function* (mapping: unknown) {\n const physical = yield* Effect.try({\n try: () =>\n storageKeyPlans(mapping, (table) => {\n if (!is(table, Table)) throw new Error(\"Missing storage table\");\n\n return getTableColumns(table);\n }),\n catch: () =>\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Invalid storage key mapping\",\n }),\n });\n\n const { $client: client } = yield* NativeDatabase;\n\n const batches = new Map<\"pg\" | \"mysql\" | \"sqlite\", StorageValidation[]>();\n\n for (const plan of physical) {\n if (!is(plan.table, Table))\n return yield* PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Missing storage table\",\n });\n const pg = is(plan.table, PgTable);\n const mysql = is(plan.table, MySqlTable);\n\n const schema = pg\n ? getPgTableConfig(plan.table).schema\n : mysql\n ? getMysqlTableConfig(plan.table).schema\n : undefined;\n\n const columns = getTableColumns(plan.table);\n\n const dialect = pg ? \"pg\" : mysql ? \"mysql\" : \"sqlite\";\n const batch = batches.get(dialect) ?? [];\n\n batch.push({\n table: {\n name: getTableName(plan.table),\n ...(schema === undefined ? {} : { schema }),\n columns: Object.fromEntries(plan.keys.map((key) => [key, { name: columns[key]!.name }])),\n },\n required: [plan.keys],\n });\n batches.set(dialect, batch);\n }\n for (const [dialect, requirements] of batches) {\n yield* validateStorageBatch(dialect, requirements).pipe(\n Effect.provideService(SqlClient, client),\n Effect.mapError(() =>\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Required SQL storage key is unavailable\",\n }),\n ),\n );\n }\n },\n Effect.catchDefect(() =>\n Effect.fail(\n PersistenceMappingError.make({\n operation: \"mapping\",\n cause: \"Cannot inspect SQL storage metadata\",\n }),\n ),\n ),\n Effect.tapError(() => reportAuthDiagnostic(\"persistence-validation\", \"mapping\")),\n);\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,yBAAyB,OAAO,WAC3C,WAAW,SAAkB;CAC3B,MAAM,WAAW,OAAO,OAAO,IAAI;EACjC,WACE,gBAAgB,UAAU,UAAU;GAClC,IAAI,CAAC,GAAG,OAAO,KAAK,GAAG,MAAM,IAAI,MAAM,uBAAuB;GAE9D,OAAO,gBAAgB,KAAK;EAC9B,CAAC;EACH,aACE,wBAAwB,KAAK;GAC3B,WAAW;GACX,OAAO;EACT,CAAC;CACL,CAAC;CAED,MAAM,EAAE,SAAS,WAAW,OAAO;CAEnC,MAAM,0BAAU,IAAI,IAAoD;CAExE,KAAK,MAAM,QAAQ,UAAU;EAC3B,IAAI,CAAC,GAAG,KAAK,OAAO,KAAK,GACvB,OAAO,OAAO,wBAAwB,KAAK;GACzC,WAAW;GACX,OAAO;EACT,CAAC;EACH,MAAM,KAAK,GAAG,KAAK,OAAO,OAAO;EACjC,MAAM,QAAQ,GAAG,KAAK,OAAO,UAAU;EAEvC,MAAM,SAAS,KACXA,iBAAiB,KAAK,KAAK,CAAC,CAAC,SAC7B,QACEC,eAAoB,KAAK,KAAK,CAAC,CAAC,SAChC,KAAA;EAEN,MAAM,UAAU,gBAAgB,KAAK,KAAK;EAE1C,MAAM,UAAU,KAAK,OAAO,QAAQ,UAAU;EAC9C,MAAM,QAAQ,QAAQ,IAAI,OAAO,KAAK,CAAC;EAEvC,MAAM,KAAK;GACT,OAAO;IACL,MAAM,aAAa,KAAK,KAAK;IAC7B,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;IACzC,SAAS,OAAO,YAAY,KAAK,KAAK,KAAK,QAAQ,CAAC,KAAK,EAAE,MAAM,QAAQ,IAAI,CAAE,KAAK,CAAC,CAAC,CAAC;GACzF;GACA,UAAU,CAAC,KAAK,IAAI;EACtB,CAAC;EACD,QAAQ,IAAI,SAAS,KAAK;CAC5B;CACA,KAAK,MAAM,CAAC,SAAS,iBAAiB,SACpC,OAAO,qBAAqB,SAAS,YAAY,CAAC,CAAC,KACjD,OAAO,eAAe,WAAW,MAAM,GACvC,OAAO,eACL,wBAAwB,KAAK;EAC3B,WAAW;EACX,OAAO;CACT,CAAC,CACH,CACF;AAEJ,GACA,OAAO,kBACL,OAAO,KACL,wBAAwB,KAAK;CAC3B,WAAW;CACX,OAAO;AACT,CAAC,CACH,CACF,GACA,OAAO,eAAe,qBAAqB,0BAA0B,SAAS,CAAC,CACjF"}
|
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.32","dependencies":{"@yielded/auth":"0.1.0-beta.32","@yielded/auth-persistence":"0.1.0-beta.32"},"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","@yielded/crypto":"0.1.0-beta.32","drizzle-orm":"1.0.0-rc.4","effect":"4.0.0","typescript":"7.0.2","vite":"npm:@voidzero-dev/vite-plus-core@1.1.0","vite-plus":"1.1.0","vitest":"5.0.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}}}
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
} from "@yielded/auth-persistence/Adapter";
|
|
16
16
|
import type { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
17
17
|
import { OAuthUnavailable } from "@yielded/auth/OAuth";
|
|
18
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
18
19
|
import { Effect } from "effect";
|
|
19
20
|
|
|
20
21
|
import type { D1BatchStatements } from "./D1BatchStatements";
|
|
@@ -58,8 +59,11 @@ const mapped = Effect.fnUntraced(function* (
|
|
|
58
59
|
"primary" in mapping.d1 &&
|
|
59
60
|
mapping.d1.primary === true
|
|
60
61
|
)
|
|
61
|
-
)
|
|
62
|
+
) {
|
|
63
|
+
yield* reportAuthDiagnostic("persistence-validation", "configuration");
|
|
64
|
+
|
|
62
65
|
return yield* unavailable();
|
|
66
|
+
}
|
|
63
67
|
|
|
64
68
|
return { mapping, ...(yield* nativeTarget(configuration)) };
|
|
65
69
|
});
|
|
@@ -85,7 +85,11 @@ interface PasskeyMapped<M> {
|
|
|
85
85
|
readonly provide: <A, E, R>(
|
|
86
86
|
effect: Effect.Effect<A, E, R>,
|
|
87
87
|
) => Effect.Effect<A, E, Exclude<Exclude<R, SqlClient.SqlClient>, SqlBatchCommit>>;
|
|
88
|
-
readonly base: () => Effect.Effect<
|
|
88
|
+
readonly base: () => Effect.Effect<
|
|
89
|
+
NativePasskeyServices,
|
|
90
|
+
PasskeyUnavailable,
|
|
91
|
+
Crypto.Crypto | LifecycleHooks
|
|
92
|
+
>;
|
|
89
93
|
}
|
|
90
94
|
|
|
91
95
|
export const makePasskeyMapped = Effect.fnUntraced(function* <M, R>(
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
makeNativeSessionCleanupServices,
|
|
13
13
|
} from "@yielded/auth-persistence/Adapter";
|
|
14
14
|
import type { LifecycleHooks } from "@yielded/auth/Hooks";
|
|
15
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
15
16
|
import {
|
|
16
17
|
AuthenticationAuthority,
|
|
17
18
|
SessionUnavailable,
|
|
@@ -63,7 +64,9 @@ export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
|
63
64
|
configuration.mode === "batch" &&
|
|
64
65
|
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
65
66
|
)
|
|
66
|
-
return yield*
|
|
67
|
+
return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(
|
|
68
|
+
Effect.andThen(unavailable()),
|
|
69
|
+
);
|
|
67
70
|
const target = yield* nativeTarget(configuration);
|
|
68
71
|
|
|
69
72
|
return yield* target.provide(
|
|
@@ -171,7 +174,9 @@ export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
|
171
174
|
configuration.mode === "batch" &&
|
|
172
175
|
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
173
176
|
)
|
|
174
|
-
return yield*
|
|
177
|
+
return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(
|
|
178
|
+
Effect.andThen(unavailable()),
|
|
179
|
+
);
|
|
175
180
|
const target = yield* nativeTarget(configuration);
|
|
176
181
|
|
|
177
182
|
return yield* target.provide(makeNativePendingAuthenticationServices(target.tables, mapping));
|
|
@@ -275,7 +280,9 @@ export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
|
275
280
|
configuration.mode === "batch" &&
|
|
276
281
|
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
277
282
|
)
|
|
278
|
-
return yield*
|
|
283
|
+
return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(
|
|
284
|
+
Effect.andThen(unavailable()),
|
|
285
|
+
);
|
|
279
286
|
const target = yield* nativeTarget(configuration);
|
|
280
287
|
|
|
281
288
|
return yield* target.provide(makeNativeStatefulSessionServices(target.tables, mapping));
|
|
@@ -397,7 +404,9 @@ export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
|
397
404
|
Effect.gen(function* () {
|
|
398
405
|
yield* validateDrizzleStorage(mapping).pipe(Effect.mapError(unavailable));
|
|
399
406
|
if (configuration.mode === "batch" && mapping.d1?.primary !== true)
|
|
400
|
-
return yield*
|
|
407
|
+
return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(
|
|
408
|
+
Effect.andThen(unavailable()),
|
|
409
|
+
);
|
|
401
410
|
const target = yield* nativeTarget(configuration);
|
|
402
411
|
|
|
403
412
|
return yield* target.provide(makeNativeSignedSessionValidityServices(target.tables, mapping));
|
|
@@ -498,7 +507,9 @@ export const makeSessionTarget = <DatabaseId, D extends NativeDriverDatabase>(
|
|
|
498
507
|
configuration.mode === "batch" &&
|
|
499
508
|
(mapping.d1?.primary !== true || mapping.subject.requirementColumns === undefined)
|
|
500
509
|
)
|
|
501
|
-
return yield*
|
|
510
|
+
return yield* reportAuthDiagnostic("persistence-validation", "configuration").pipe(
|
|
511
|
+
Effect.andThen(unavailable()),
|
|
512
|
+
);
|
|
502
513
|
const target = yield* nativeTarget(configuration);
|
|
503
514
|
|
|
504
515
|
return yield* target.provide(makeNativeSessionStepUpServices(target.tables, mapping));
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
type StorageValidation,
|
|
5
5
|
storageKeyPlans,
|
|
6
6
|
} from "@yielded/auth-persistence/Adapter";
|
|
7
|
+
import { reportAuthDiagnostic } from "@yielded/auth/Persistence";
|
|
7
8
|
import { getTableColumns, getTableName, is, Table } from "drizzle-orm";
|
|
8
9
|
import { getTableConfig as getMysqlTableConfig, MySqlTable } from "drizzle-orm/mysql-core";
|
|
9
10
|
import { getTableConfig as getPgTableConfig, PgTable } from "drizzle-orm/pg-core";
|
|
@@ -83,4 +84,5 @@ export const validateDrizzleStorage = Effect.fnUntraced(
|
|
|
83
84
|
}),
|
|
84
85
|
),
|
|
85
86
|
),
|
|
87
|
+
Effect.tapError(() => reportAuthDiagnostic("persistence-validation", "mapping")),
|
|
86
88
|
);
|