@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 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<{
@@ -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<{
@@ -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<{
@@ -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<{
@@ -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<{
@@ -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)) return yield* unavailable();
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<NativePasskeyServices, never, Crypto.Crypto | LifecycleHooks>;\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;AAeF,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"}
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":";;;;;;;;;AAeA,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,CACF"}
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.31","dependencies":{"@yielded/auth":"0.1.0-beta.31","@yielded/auth-persistence":"0.1.0-beta.31"},"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.31","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}}}
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<NativePasskeyServices, never, Crypto.Crypto | LifecycleHooks>;
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* unavailable();
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* unavailable();
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* unavailable();
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* unavailable();
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* unavailable();
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
  );