@yielded/auth-persistence 0.1.0-beta.8 → 0.1.0-beta.9

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.
Files changed (116) hide show
  1. package/README.md +4 -0
  2. package/dist/DrizzleD1.d.mts +7 -7
  3. package/dist/DrizzleLibsql.d.mts +31 -31
  4. package/dist/DrizzleLibsql.mjs +7 -22
  5. package/dist/DrizzleLibsql.mjs.map +1 -1
  6. package/dist/DrizzleMysql2.d.mts +8 -8
  7. package/dist/DrizzlePglite.d.mts +15 -15
  8. package/dist/DrizzlePostgres.d.mts +13 -13
  9. package/dist/DrizzleSqliteBun.d.mts +24 -24
  10. package/dist/DrizzleSqliteDo.d.mts +29 -29
  11. package/dist/DrizzleSqliteNode.d.mts +22 -22
  12. package/dist/DrizzleSqliteWasm.d.mts +24 -24
  13. package/dist/_virtual/_rolldown/runtime.mjs +13 -0
  14. package/dist/drizzle/D1BatchStatements.d.mts +1 -2
  15. package/dist/drizzle/SuppliedService.d.mts +1 -2
  16. package/dist/drizzle/d1-emails.d.mts +5 -6
  17. package/dist/drizzle/d1-identity.d.mts +2 -3
  18. package/dist/drizzle/d1-oauth.d.mts +10 -11
  19. package/dist/drizzle/d1-passkey.d.mts +5 -6
  20. package/dist/drizzle/d1-password-prepared.d.mts +2 -3
  21. package/dist/drizzle/d1-passwords.d.mts +4 -5
  22. package/dist/drizzle/d1-phone.d.mts +2 -3
  23. package/dist/drizzle/d1-planning.d.mts +1 -2
  24. package/dist/drizzle/d1-proofs.d.mts +2 -3
  25. package/dist/drizzle/d1-sessions.d.mts +10 -11
  26. package/dist/drizzle/d1-totp.d.mts +2 -3
  27. package/dist/drizzle/email-model.d.mts +30 -31
  28. package/dist/drizzle/email-registration.d.mts +1 -2
  29. package/dist/drizzle/email-target.d.mts +3 -4
  30. package/dist/drizzle/model.d.mts +41 -41
  31. package/dist/drizzle/model.mjs +3 -5
  32. package/dist/drizzle/model.mjs.map +1 -1
  33. package/dist/drizzle/mysql-emails.d.mts +7 -8
  34. package/dist/drizzle/mysql-identity.d.mts +2 -3
  35. package/dist/drizzle/mysql-password-prepared.d.mts +3 -4
  36. package/dist/drizzle/mysql-passwords.d.mts +6 -7
  37. package/dist/drizzle/mysql-proofs.d.mts +3 -4
  38. package/dist/drizzle/mysql-sessions.d.mts +15 -16
  39. package/dist/drizzle/mysql.d.mts +8 -9
  40. package/dist/drizzle/oauth-connected-model.d.mts +21 -22
  41. package/dist/drizzle/oauth-connected-reference.d.mts +1 -2
  42. package/dist/drizzle/oauth-connected-state.d.mts +1950 -7
  43. package/dist/drizzle/oauth-connected-target.d.mts +7 -8
  44. package/dist/drizzle/oauth-flow.d.mts +22 -2
  45. package/dist/drizzle/oauth-model.d.mts +45 -46
  46. package/dist/drizzle/oauth-owner.d.mts +10 -2
  47. package/dist/drizzle/oauth-target.d.mts +9 -10
  48. package/dist/drizzle/passkey-model.d.mts +34 -35
  49. package/dist/drizzle/passkey-registration-ceremony-model.d.mts +5 -6
  50. package/dist/drizzle/passkey-write-model.d.mts +13 -14
  51. package/dist/drizzle/password-model.d.mts +29 -30
  52. package/dist/drizzle/password-prepared-model.d.mts +10 -11
  53. package/dist/drizzle/password-prepared-target.d.mts +1 -2
  54. package/dist/drizzle/password-registration.d.mts +1 -2
  55. package/dist/drizzle/password-target.d.mts +2 -3
  56. package/dist/drizzle/pg-emails.d.mts +7 -8
  57. package/dist/drizzle/pg-password-prepared.d.mts +3 -4
  58. package/dist/drizzle/pg-passwords.d.mts +6 -7
  59. package/dist/drizzle/pg-proofs.d.mts +3 -4
  60. package/dist/drizzle/pg-sessions.d.mts +15 -16
  61. package/dist/drizzle/pg.d.mts +10 -11
  62. package/dist/drizzle/phone-model.d.mts +9 -10
  63. package/dist/drizzle/phone-target.d.mts +1 -2
  64. package/dist/drizzle/proof-model.d.mts +25 -26
  65. package/dist/drizzle/proof-target.d.mts +1 -2
  66. package/dist/drizzle/session-model.d.mts +25 -26
  67. package/dist/drizzle/session-target.d.mts +4 -5
  68. package/dist/drizzle/sqlite.d.mts +8 -9
  69. package/dist/drizzle/standalone-guard.mjs +3 -5
  70. package/dist/drizzle/standalone-guard.mjs.map +1 -1
  71. package/dist/drizzle/step-up-model.d.mts +6 -7
  72. package/dist/drizzle/totp-model.d.mts +7 -8
  73. package/dist/drizzle/totp-state.d.mts +2 -3
  74. package/dist/drizzle/totp-target.d.mts +1 -2
  75. package/dist/drizzle/transaction-mysql.mjs +1 -0
  76. package/dist/drizzle/transaction-mysql.mjs.map +1 -1
  77. package/dist/drizzle/transaction-owner.d.mts +3 -2
  78. package/dist/index.d.mts +2 -1
  79. package/dist/index.mjs +2 -1
  80. package/dist/internal/configuration.d.mts +19 -19
  81. package/dist/internal/mapping-error.d.mts +2 -3
  82. package/dist/internal/oauth-app.d.mts +1 -2
  83. package/dist/internal/oauth-app.mjs +3 -4
  84. package/dist/internal/oauth-app.mjs.map +1 -1
  85. package/dist/internal/oauth-server.d.mts +10 -0
  86. package/dist/internal/oauth-server.mjs +66 -0
  87. package/dist/internal/oauth-server.mjs.map +1 -0
  88. package/dist/internal/passkey/target.d.mts +2 -3
  89. package/dist/internal/passkeys.mjs +2 -1
  90. package/dist/internal/passkeys.mjs.map +1 -1
  91. package/dist/internal/persistence.mjs +3 -2
  92. package/dist/internal/persistence.mjs.map +1 -1
  93. package/dist/internal/sql-persistence.d.mts +1 -2
  94. package/dist/internal/sql-table.d.mts +6 -7
  95. package/dist/internal/sql-table.mjs +12 -2
  96. package/dist/internal/sql-table.mjs.map +1 -1
  97. package/dist/internal/standalone.mjs +13 -0
  98. package/dist/internal/standalone.mjs.map +1 -0
  99. package/dist/internal/storage-tables.d.mts +5 -6
  100. package/dist/internal/transaction-execution-kernel.d.mts +2 -3
  101. package/dist/internal/transaction-execution-kernel.mjs +3 -5
  102. package/dist/internal/transaction-execution-kernel.mjs.map +1 -1
  103. package/dist/internal/transaction-kernel.d.mts +49 -2
  104. package/package.json +1 -1
  105. package/src/DrizzleLibsql.ts +10 -54
  106. package/src/drizzle/model.ts +8 -10
  107. package/src/drizzle/standalone-guard.ts +4 -9
  108. package/src/drizzle/transaction-mysql.ts +2 -0
  109. package/src/index.ts +1 -0
  110. package/src/internal/oauth-app.ts +4 -5
  111. package/src/internal/oauth-server.ts +89 -0
  112. package/src/internal/passkeys.ts +2 -6
  113. package/src/internal/persistence.ts +3 -5
  114. package/src/internal/sql-table.ts +17 -2
  115. package/src/internal/standalone.ts +30 -0
  116. package/src/internal/transaction-execution-kernel.ts +3 -7
@@ -16,7 +16,7 @@ import { Statement } from "effect/unstable/sql/Statement";
16
16
  type Database = D1PlanningDatabase;
17
17
  type D1DomainError = SessionStepUpInvalid | PendingAuthenticationInvalid | SessionConflict | SessionInvalid | SessionUnavailable | StaleAuthentication;
18
18
  type D1CoordinatorError<E> = E | D1DomainError | HookConfigurationError;
19
- declare const makeD1AuthenticationAuthorityServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId>(database: Database, mapping: D1AuthenticationAuthorityMapping<Claims, Subject, Credential, Flow, Pending, NativeSubjectId>) => Effect.Effect<{
19
+ export declare const makeD1AuthenticationAuthorityServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId>(database: Database, mapping: D1AuthenticationAuthorityMapping<Claims, Subject, Credential, Flow, Pending, NativeSubjectId>) => Effect.Effect<{
20
20
  authenticationAuthority: {
21
21
  readonly capture: (subjectId: SubjectId, credentialIds: ReadonlyArray<string>) => Effect.Effect<AuthenticationRevision, StaleAuthentication | SessionUnavailable>;
22
22
  readonly requirements: (evidence: AuthenticationEvidence) => Effect.Effect<AuthenticationRequirement, StaleAuthentication | SessionUnavailable>;
@@ -29,39 +29,38 @@ declare const makeD1AuthenticationAuthorityServices: <Claims, Subject extends An
29
29
  }, prepare: PrepareSessionCommit<void, A>) => Effect.Effect<PreparedCommit<A>, StaleAuthentication | PendingAuthenticationInvalid | SessionUnavailable>;
30
30
  };
31
31
  }, never, LifecycleHooks>;
32
- declare const makeD1PendingAuthenticationServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Pending extends AnySQLiteTable, Flow extends AnySQLiteTable, NativeSubjectId>(database: Database, mapping: D1PendingAuthenticationMapping<Claims, Subject, Credential, Pending, Flow, NativeSubjectId>) => Effect.Effect<{
32
+ export declare const makeD1PendingAuthenticationServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Pending extends AnySQLiteTable, Flow extends AnySQLiteTable, NativeSubjectId>(database: Database, mapping: D1PendingAuthenticationMapping<Claims, Subject, Credential, Pending, Flow, NativeSubjectId>) => Effect.Effect<{
33
33
  pendingAuthentication: PendingAuthentication<Claims>;
34
34
  }, never, LifecycleHooks>;
35
- declare const makeD1StatefulSessionServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Session extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, NativeSessionId>(database: Database, mapping: D1StatefulSessionMapping<Claims, Subject, Credential, Session, Flow, Pending, NativeSubjectId, NativeSessionId>) => Effect.Effect<{
35
+ export declare const makeD1StatefulSessionServices: <Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Session extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, NativeSessionId>(database: Database, mapping: D1StatefulSessionMapping<Claims, Subject, Credential, Session, Flow, Pending, NativeSubjectId, NativeSessionId>) => Effect.Effect<{
36
36
  statefulSessionPersistence: StatefulSessionPersistence<Claims>;
37
37
  sessionRepository: SessionRepository;
38
38
  }, never, LifecycleHooks>;
39
- declare const makeD1SignedSessionValidityServices: <Subject extends AnySQLiteTable, Tombstone extends AnySQLiteTable, NativeSubjectId, NativeSessionId>(database: Database, mapping: D1SignedSessionValidityMapping<Subject, Tombstone, NativeSubjectId, NativeSessionId>) => Effect.Effect<{
39
+ export declare const makeD1SignedSessionValidityServices: <Subject extends AnySQLiteTable, Tombstone extends AnySQLiteTable, NativeSubjectId, NativeSessionId>(database: Database, mapping: D1SignedSessionValidityMapping<Subject, Tombstone, NativeSubjectId, NativeSessionId>) => Effect.Effect<{
40
40
  signedSessionValidity: SignedSessionValidity;
41
41
  }, never, LifecycleHooks>;
42
- declare function coordinateD1AuthenticationAuthority<Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
42
+ export declare function coordinateD1AuthenticationAuthority<Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
43
43
  readonly mapping: D1AuthenticationAuthorityMapping<Claims, Subject, Credential, Flow, Pending, NativeSubjectId>;
44
44
  }, body: Effect.Effect<A, E, R>): Effect.Effect<A, D1CoordinatorError<E> | DatabaseError, Exclude<R, AuthenticationAuthority | D1BatchStatements> | LifecycleHooks | DatabaseRequirements>;
45
- declare function coordinateD1PendingAuthentication<TargetId, Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Pending extends AnySQLiteTable, Flow extends AnySQLiteTable, NativeSubjectId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
45
+ export declare function coordinateD1PendingAuthentication<TargetId, Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Pending extends AnySQLiteTable, Flow extends AnySQLiteTable, NativeSubjectId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
46
46
  readonly mapping: D1PendingAuthenticationMapping<NoInfer<Claims>, Subject, Credential, Pending, Flow, NativeSubjectId>;
47
47
  readonly target: SuppliedService<TargetId, PendingAuthentication<Claims>>;
48
48
  }, body: Effect.Effect<A, E, R>): Effect.Effect<A, D1CoordinatorError<E> | DatabaseError, Exclude<R, TargetId | D1BatchStatements> | LifecycleHooks | DatabaseRequirements>;
49
- declare function coordinateD1StatefulSessions<PersistenceId, RepositoryId, Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Session extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
49
+ export declare function coordinateD1StatefulSessions<PersistenceId, RepositoryId, Claims, Subject extends AnySQLiteTable, Credential extends AnySQLiteTable, Session extends AnySQLiteTable, Flow extends AnySQLiteTable, Pending extends AnySQLiteTable, NativeSubjectId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
50
50
  readonly mapping: D1StatefulSessionMapping<NoInfer<Claims>, Subject, Credential, Session, Flow, Pending, NativeSubjectId, NativeSessionId>;
51
51
  readonly persistence: SuppliedService<PersistenceId, StatefulSessionPersistence<Claims>>;
52
52
  readonly repository: SuppliedService<RepositoryId, SessionRepository>;
53
53
  }, body: Effect.Effect<A, E, R>): Effect.Effect<A, D1CoordinatorError<E> | DatabaseError, Exclude<R, PersistenceId | RepositoryId | D1BatchStatements> | LifecycleHooks | DatabaseRequirements>;
54
- declare function coordinateD1SignedSessionValidity<TargetId, Subject extends AnySQLiteTable, Tombstone extends AnySQLiteTable, NativeSubjectId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
54
+ export declare function coordinateD1SignedSessionValidity<TargetId, Subject extends AnySQLiteTable, Tombstone extends AnySQLiteTable, NativeSubjectId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
55
55
  readonly mapping: D1SignedSessionValidityMapping<Subject, Tombstone, NativeSubjectId, NativeSessionId>;
56
56
  readonly target: SuppliedService<TargetId, SignedSessionValidity>;
57
57
  }, body: Effect.Effect<A, E, R>): Effect.Effect<A, D1CoordinatorError<E> | DatabaseError, Exclude<R, TargetId | D1BatchStatements> | LifecycleHooks | DatabaseRequirements>;
58
- declare const makeD1SessionStepUpServices: <Claims, Id, S extends AnySQLiteTable, C extends AnySQLiteTable, I extends AnySQLiteTable, Session extends AnySQLiteTable, T extends AnySQLiteTable, NativeId, NativeSessionId>(database: Database, mapping: D1SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>, target: Context.Service<Id, SessionStepUpPersistence<Claims>>) => Effect.Effect<{
58
+ export declare const makeD1SessionStepUpServices: <Claims, Id, S extends AnySQLiteTable, C extends AnySQLiteTable, I extends AnySQLiteTable, Session extends AnySQLiteTable, T extends AnySQLiteTable, NativeId, NativeSessionId>(database: Database, mapping: D1SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>, target: Context.Service<Id, SessionStepUpPersistence<Claims>>) => Effect.Effect<{
59
59
  sessionStepUpPersistence: SessionStepUpPersistence<Claims>;
60
60
  }, never, LifecycleHooks>;
61
- declare function coordinateD1SessionStepUp<Claims, Id, S extends AnySQLiteTable, C extends AnySQLiteTable, I extends AnySQLiteTable, Session extends AnySQLiteTable, T extends AnySQLiteTable, NativeId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
61
+ export declare function coordinateD1SessionStepUp<Claims, Id, S extends AnySQLiteTable, C extends AnySQLiteTable, I extends AnySQLiteTable, Session extends AnySQLiteTable, T extends AnySQLiteTable, NativeId, NativeSessionId, A, E, R, DatabaseError, DatabaseRequirements>(acquire: Effect.Effect<Database, DatabaseError, DatabaseRequirements>, options: {
62
62
  readonly mapping: D1SessionStepUpMapping<NoInfer<Claims>, S, C, I, Session, T, NativeId, NativeSessionId>;
63
63
  readonly target: SuppliedService<Id, SessionStepUpPersistence<Claims>>;
64
64
  }, body: Effect.Effect<A, E, R>): Effect.Effect<A, D1CoordinatorError<E> | DatabaseError, Exclude<R, Id | D1BatchStatements> | LifecycleHooks | DatabaseRequirements>;
65
65
  //#endregion
66
- export { coordinateD1AuthenticationAuthority, coordinateD1PendingAuthentication, coordinateD1SessionStepUp, coordinateD1SignedSessionValidity, coordinateD1StatefulSessions, makeD1AuthenticationAuthorityServices, makeD1PendingAuthenticationServices, makeD1SessionStepUpServices, makeD1SignedSessionValidityServices, makeD1StatefulSessionServices };
67
66
  //# sourceMappingURL=d1-sessions.d.mts.map
@@ -15,12 +15,11 @@ type Database = EffectSQLiteD1Database<AnyRelations> & {
15
15
  readonly $client: D1Client;
16
16
  };
17
17
  type Table$1 = AnySQLiteTable;
18
- declare const makeTotpPersistenceServices: <Database extends EffectSQLiteD1Database<import("drizzle-orm").TablesRelationalConfig> & {
18
+ export declare const makeTotpPersistenceServices: <Database extends EffectSQLiteD1Database<import("drizzle-orm").TablesRelationalConfig> & {
19
19
  readonly $client: D1Client;
20
20
  }, S extends Table$1, F extends Table$1, C extends Table$1, N, RSetup = never>(database: Database, mapping: TotpMappingSource<TotpMapping<S, F, C, N> & D1TotpMapping, RSetup>) => Effect.Effect<TotpPersistenceServices, PersistenceMappingError | import("@yielded/auth/Totp").TotpConfigurationError, RSetup | LifecycleHooks>;
21
- declare const coordinateTotpPersistence: <D extends Database, S extends Table$1, F extends Table$1, C extends Table$1, N, A, E, R, RSetup = never, DatabaseError = never, DatabaseRequirements = never>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
21
+ export declare const coordinateTotpPersistence: <D extends Database, S extends Table$1, F extends Table$1, C extends Table$1, N, A, E, R, RSetup = never, DatabaseError = never, DatabaseRequirements = never>(acquire: Effect.Effect<D, DatabaseError, DatabaseRequirements>, options: {
22
22
  readonly mapping: TotpMappingSource<TotpMapping<S, F, C, N> & D1TotpMapping, RSetup>;
23
23
  }, body: Effect.Effect<A, E, R>) => Effect.Effect<A, TotpCoordinatorError<E> | DatabaseError, Exclude<R, TotpPersistence | D1BatchStatements> | LifecycleHooks | RSetup | DatabaseRequirements>;
24
24
  //#endregion
25
- export { coordinateTotpPersistence, makeTotpPersistenceServices };
26
25
  //# sourceMappingURL=d1-totp.d.mts.map
@@ -9,7 +9,7 @@ import { LoginIdentifier } from "@yielded/auth/Identity";
9
9
  import { InferInsertModel, InferSelectModel, SQL, Table } from "drizzle-orm";
10
10
  //#region src/drizzle/email-model.d.ts
11
11
  type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
12
- interface EmailSubjectReadTable<Subject extends Table> {
12
+ export interface EmailSubjectReadTable<Subject extends Table> {
13
13
  readonly table: Subject;
14
14
  readonly id: ColumnKey<Subject>;
15
15
  readonly status: ColumnKey<Subject>;
@@ -17,13 +17,13 @@ interface EmailSubjectReadTable<Subject extends Table> {
17
17
  readonly isActiveStatus: (value: unknown) => boolean;
18
18
  readonly d1ActiveStatusValue?: unknown;
19
19
  }
20
- interface EmailSubjectTable<Subject extends Table> extends EmailSubjectReadTable<Subject> {
20
+ export interface EmailSubjectTable<Subject extends Table> extends EmailSubjectReadTable<Subject> {
21
21
  readonly decodeActionRequirement: (row: InferSelectModel<Subject>, action: EmailAction) => Effect.Effect<AuthenticationRequirement, PersistenceMappingError>;
22
22
  readonly nextSecurityRevision?: (current: SecurityRevision) => Effect.Effect<SecurityRevision, PersistenceMappingError>;
23
23
  readonly nextSecurityRevisionSync?: (current: SecurityRevision) => SecurityRevision;
24
24
  readonly d1ActiveStatusValue?: unknown;
25
25
  }
26
- interface EmailIdentifierReadTable<Identifier extends Table> {
26
+ export interface EmailIdentifierReadTable<Identifier extends Table> {
27
27
  readonly table: Identifier;
28
28
  readonly namespace: ColumnKey<Identifier>;
29
29
  readonly value: ColumnKey<Identifier>;
@@ -32,7 +32,7 @@ interface EmailIdentifierReadTable<Identifier extends Table> {
32
32
  readonly bindingRevision: ColumnKey<Identifier>;
33
33
  readonly isCurrent: (row: InferSelectModel<Identifier>) => boolean;
34
34
  }
35
- interface EmailIdentifierTable<Identifier extends Table, NativeSubjectId> extends EmailIdentifierReadTable<Identifier> {
35
+ export interface EmailIdentifierTable<Identifier extends Table, NativeSubjectId> extends EmailIdentifierReadTable<Identifier> {
36
36
  /** True only for an active, unverified binding. Confirming it preserves existing sessions. */
37
37
  readonly isMutableTarget: (row: InferSelectModel<Identifier>) => boolean;
38
38
  readonly encodeVerifiedInsert: (input: {
@@ -60,7 +60,7 @@ interface EmailIdentifierTable<Identifier extends Table, NativeSubjectId> extend
60
60
  readonly nativeSubjectId: NativeSubjectId;
61
61
  }) => SQL;
62
62
  }
63
- interface EmailCredentialReadTable<Subject extends Table, Identifier extends Table, Credential extends Table, _NativeSubjectId> {
63
+ export interface EmailCredentialReadTable<Subject extends Table, Identifier extends Table, Credential extends Table, _NativeSubjectId> {
64
64
  readonly table: Credential;
65
65
  readonly moduleId: ColumnKey<Credential>;
66
66
  readonly subjectId: ColumnKey<Credential>;
@@ -77,7 +77,7 @@ interface EmailCredentialReadTable<Subject extends Table, Identifier extends Tab
77
77
  readonly credential: InferSelectModel<Credential>;
78
78
  }) => Effect.Effect<import("@yielded/auth/Email").EmailCredentialSnapshot, PersistenceMappingError>;
79
79
  }
80
- interface EmailCredentialTable<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> extends EmailCredentialReadTable<Subject, Identifier, Credential, NativeSubjectId> {
80
+ export interface EmailCredentialTable<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> extends EmailCredentialReadTable<Subject, Identifier, Credential, NativeSubjectId> {
81
81
  readonly encodeVerifiedInsert: (input: {
82
82
  readonly moduleId: string;
83
83
  readonly subjectId: NativeSubjectId;
@@ -95,7 +95,7 @@ interface EmailCredentialTable<Subject extends Table, Identifier extends Table,
95
95
  }) => Partial<InferInsertModel<Credential>>;
96
96
  readonly d1ActiveStatusValue?: unknown;
97
97
  }
98
- interface EmailAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
98
+ export interface EmailAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
99
99
  readonly table: Credential;
100
100
  readonly subjectId: ColumnKey<Credential>;
101
101
  readonly credentialId: ColumnKey<Credential>;
@@ -111,7 +111,7 @@ interface EmailAuthorityCredentialTable<Credential extends Table, NativeSubjectI
111
111
  readonly encodeRetirement: (revision: SecurityRevision) => Partial<InferInsertModel<Credential>>;
112
112
  readonly d1ActiveStatusValue?: unknown;
113
113
  }
114
- interface EmailCommandTable<Command extends Table> {
114
+ export interface EmailCommandTable<Command extends Table> {
115
115
  readonly table: Command;
116
116
  readonly moduleId: ColumnKey<Command>;
117
117
  readonly commandId: ColumnKey<Command>;
@@ -126,13 +126,13 @@ interface EmailCommandTable<Command extends Table> {
126
126
  readonly retentionUntilMillis: number;
127
127
  }) => InferInsertModel<Command>;
128
128
  }
129
- interface RequiredEmailSignInConstraints {
129
+ export interface RequiredEmailSignInConstraints {
130
130
  readonly identifier: "unique(identifier.namespace,identifier.value)";
131
131
  readonly credentialId: "unique(emailCredential.moduleId,emailCredential.credentialId)";
132
132
  readonly credentialIdentifier: "unique(emailCredential.moduleId,emailCredential.identifierNamespace,emailCredential.identifierValue)";
133
133
  }
134
- declare const requiredEmailSignInConstraints: RequiredEmailSignInConstraints;
135
- interface EmailSignInMapping<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> {
134
+ export declare const requiredEmailSignInConstraints: RequiredEmailSignInConstraints;
135
+ export interface EmailSignInMapping<Subject extends Table, Identifier extends Table, Credential extends Table, NativeSubjectId> {
136
136
  readonly subject: EmailSubjectReadTable<Subject>;
137
137
  readonly identifier: EmailIdentifierReadTable<Identifier>;
138
138
  readonly credential: EmailCredentialReadTable<Subject, Identifier, Credential, NativeSubjectId>;
@@ -140,17 +140,17 @@ interface EmailSignInMapping<Subject extends Table, Identifier extends Table, Cr
140
140
  readonly constraints: RequiredEmailSignInConstraints;
141
141
  readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;
142
142
  }
143
- interface RequiredEmailAddressConstraints extends RequiredEmailSignInConstraints {
143
+ export interface RequiredEmailAddressConstraints extends RequiredEmailSignInConstraints {
144
144
  readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
145
145
  readonly command: "unique(emailCommand.moduleId,emailCommand.commandId)";
146
146
  }
147
- declare const requiredEmailAddressConstraints: RequiredEmailAddressConstraints;
148
- interface EmailD1Clock {
147
+ export declare const requiredEmailAddressConstraints: RequiredEmailAddressConstraints;
148
+ export interface EmailD1Clock {
149
149
  readonly engineNow: SQL;
150
150
  readonly engineNowMillis: SQL;
151
151
  readonly engineInstantPlus: (millis: number) => SQL;
152
152
  }
153
- interface EmailAddressMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Command extends Table, NativeSubjectId> extends EmailSignInMapping<Subject, Identifier, Credential, NativeSubjectId> {
153
+ export interface EmailAddressMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Command extends Table, NativeSubjectId> extends EmailSignInMapping<Subject, Identifier, Credential, NativeSubjectId> {
154
154
  readonly subject: EmailSubjectTable<Subject>;
155
155
  readonly identifier: EmailIdentifierTable<Identifier, NativeSubjectId>;
156
156
  readonly credential: EmailCredentialTable<Subject, Identifier, Credential, NativeSubjectId>;
@@ -171,7 +171,7 @@ interface EmailAddressMapping<Subject extends Table, Identifier extends Table, C
171
171
  readonly isCredentialConflict: (cause: unknown) => boolean;
172
172
  readonly d1?: EmailD1Clock;
173
173
  }
174
- type D1EmailAddressMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Command extends Table, NativeSubjectId> = EmailAddressMapping<Subject, Identifier, Credential, AuthorityCredential, Command, NativeSubjectId> & {
174
+ export type D1EmailAddressMapping<Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Command extends Table, NativeSubjectId> = EmailAddressMapping<Subject, Identifier, Credential, AuthorityCredential, Command, NativeSubjectId> & {
175
175
  readonly d1: EmailD1Clock;
176
176
  readonly subject: EmailSubjectTable<Subject> & {
177
177
  readonly d1ActiveStatusValue: unknown;
@@ -187,8 +187,8 @@ type D1EmailAddressMapping<Subject extends Table, Identifier extends Table, Cred
187
187
  readonly d1ActiveStatusValue: unknown;
188
188
  };
189
189
  };
190
- type EmailRegistrationState = "pending" | "registered";
191
- interface EmailRegistrationIntent<Registration> {
190
+ export type EmailRegistrationState = "pending" | "registered";
191
+ export interface EmailRegistrationIntent<Registration> {
192
192
  readonly moduleId: string;
193
193
  readonly commandId: string;
194
194
  readonly identifier: LoginIdentifier;
@@ -201,7 +201,7 @@ interface EmailRegistrationIntent<Registration> {
201
201
  readonly binding: ProofBinding;
202
202
  };
203
203
  }
204
- interface EmailRegistrationTable<Registration, Request extends Table, NativeSubjectId> {
204
+ export interface EmailRegistrationTable<Registration, Request extends Table, NativeSubjectId> {
205
205
  readonly table: Request;
206
206
  readonly moduleId: ColumnKey<Request>;
207
207
  readonly commandId: ColumnKey<Request>;
@@ -220,7 +220,7 @@ interface EmailRegistrationTable<Registration, Request extends Table, NativeSubj
220
220
  readonly _tag: "Registered";
221
221
  }>, PersistenceMappingError>;
222
222
  }
223
- interface EmailRegistrationProvisioning<Registration, Subject extends Table, NativeSubjectId> {
223
+ export interface EmailRegistrationProvisioning<Registration, Subject extends Table, NativeSubjectId> {
224
224
  readonly encodeSubjectInsert: (input: EmailRegistrationIntent<Registration>, values: {
225
225
  readonly nativeSubjectId: NativeSubjectId | undefined;
226
226
  readonly securityRevision: SecurityRevision;
@@ -229,7 +229,7 @@ interface EmailRegistrationProvisioning<Registration, Subject extends Table, Nat
229
229
  readonly allocateSubjectIdSync?: () => NativeSubjectId;
230
230
  readonly decodeGeneratedId?: (rows: ReadonlyArray<unknown>) => Effect.Effect<NativeSubjectId, PersistenceMappingError>;
231
231
  }
232
- interface EmailRegistrationIdentifierTable<Identifier extends Table, NativeSubjectId> {
232
+ export interface EmailRegistrationIdentifierTable<Identifier extends Table, NativeSubjectId> {
233
233
  readonly table: Identifier;
234
234
  readonly namespace: ColumnKey<Identifier>;
235
235
  readonly value: ColumnKey<Identifier>;
@@ -249,7 +249,7 @@ interface EmailRegistrationIdentifierTable<Identifier extends Table, NativeSubje
249
249
  readonly bindingRevision: SecurityRevision;
250
250
  }) => InferInsertModel<Identifier>;
251
251
  }
252
- interface EmailRegistrationCredentialTable<Credential extends Table, NativeSubjectId> {
252
+ export interface EmailRegistrationCredentialTable<Credential extends Table, NativeSubjectId> {
253
253
  readonly table: Credential;
254
254
  readonly moduleId: ColumnKey<Credential>;
255
255
  readonly subjectId: ColumnKey<Credential>;
@@ -268,7 +268,7 @@ interface EmailRegistrationCredentialTable<Credential extends Table, NativeSubje
268
268
  readonly credentialRevision: SecurityRevision;
269
269
  }) => InferInsertModel<Credential>;
270
270
  }
271
- interface EmailRegistrationAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
271
+ export interface EmailRegistrationAuthorityCredentialTable<Credential extends Table, NativeSubjectId> {
272
272
  readonly table: Credential;
273
273
  readonly subjectId: ColumnKey<Credential>;
274
274
  readonly credentialId: ColumnKey<Credential>;
@@ -282,12 +282,12 @@ interface EmailRegistrationAuthorityCredentialTable<Credential extends Table, Na
282
282
  readonly revision: SecurityRevision;
283
283
  }) => InferInsertModel<Credential>;
284
284
  }
285
- interface RequiredEmailRegistrationConstraints extends RequiredEmailSignInConstraints {
285
+ export interface RequiredEmailRegistrationConstraints extends RequiredEmailSignInConstraints {
286
286
  readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
287
287
  readonly request: "unique(emailRegistration.moduleId,emailRegistration.commandId)";
288
288
  readonly pendingReference: "unique(emailRegistration.pendingReference)";
289
289
  }
290
- declare const requiredEmailRegistrationConstraints: RequiredEmailRegistrationConstraints;
290
+ export declare const requiredEmailRegistrationConstraints: RequiredEmailRegistrationConstraints;
291
291
  type EmailRegistrationBase<Registration, Request extends Table, NativeSubjectId> = {
292
292
  readonly registration: EmailRegistrationTable<Registration, Request, NativeSubjectId>;
293
293
  readonly constraints: Pick<RequiredEmailRegistrationConstraints, "request" | "pendingReference">;
@@ -316,7 +316,7 @@ type EmailRegistrationBase<Registration, Request extends Table, NativeSubjectId>
316
316
  readonly retentionMillis: number;
317
317
  readonly isRequestConflict: (cause: unknown) => boolean;
318
318
  };
319
- type EmailRegistrationMapping<Registration, Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Request extends Table, NativeSubjectId> = EmailRegistrationBase<Registration, Request, NativeSubjectId> & ({
319
+ export type EmailRegistrationMapping<Registration, Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Request extends Table, NativeSubjectId> = EmailRegistrationBase<Registration, Request, NativeSubjectId> & ({
320
320
  readonly mode: "atomic";
321
321
  readonly subject: EmailSubjectReadTable<Subject>;
322
322
  readonly identifier: EmailRegistrationIdentifierTable<Identifier, NativeSubjectId>;
@@ -343,12 +343,11 @@ type EmailRegistrationMapping<Registration, Subject extends Table, Identifier ex
343
343
  } | {
344
344
  readonly mode: "pending";
345
345
  });
346
- type AnyEmailSignInMapping = EmailSignInMapping<Table, Table, Table, unknown>;
347
- type AnyEmailAddressMapping = EmailAddressMapping<Table, Table, Table, Table, Table, unknown>;
348
- type AnyEmailRegistrationMapping<Registration = unknown> = EmailRegistrationMapping<Registration, Table, Table, Table, Table, Table, unknown>;
349
- type D1EmailRegistrationMapping<Registration, Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Request extends Table, NativeSubjectId> = EmailRegistrationMapping<Registration, Subject, Identifier, Credential, AuthorityCredential, Request, NativeSubjectId> & {
346
+ export type AnyEmailSignInMapping = EmailSignInMapping<Table, Table, Table, unknown>;
347
+ export type AnyEmailAddressMapping = EmailAddressMapping<Table, Table, Table, Table, Table, unknown>;
348
+ export type AnyEmailRegistrationMapping<Registration = unknown> = EmailRegistrationMapping<Registration, Table, Table, Table, Table, Table, unknown>;
349
+ export type D1EmailRegistrationMapping<Registration, Subject extends Table, Identifier extends Table, Credential extends Table, AuthorityCredential extends Table, Request extends Table, NativeSubjectId> = EmailRegistrationMapping<Registration, Subject, Identifier, Credential, AuthorityCredential, Request, NativeSubjectId> & {
350
350
  readonly d1: EmailD1Clock;
351
351
  };
352
352
  //#endregion
353
- export { AnyEmailAddressMapping, AnyEmailRegistrationMapping, AnyEmailSignInMapping, D1EmailAddressMapping, D1EmailRegistrationMapping, EmailAddressMapping, EmailAuthorityCredentialTable, EmailCommandTable, EmailCredentialReadTable, EmailCredentialTable, EmailD1Clock, EmailIdentifierReadTable, EmailIdentifierTable, EmailRegistrationAuthorityCredentialTable, EmailRegistrationCredentialTable, EmailRegistrationIdentifierTable, EmailRegistrationIntent, EmailRegistrationMapping, EmailRegistrationProvisioning, EmailRegistrationState, EmailRegistrationTable, EmailSignInMapping, EmailSubjectReadTable, EmailSubjectTable, RequiredEmailAddressConstraints, RequiredEmailRegistrationConstraints, RequiredEmailSignInConstraints, requiredEmailAddressConstraints, requiredEmailRegistrationConstraints, requiredEmailSignInConstraints };
354
353
  //# sourceMappingURL=email-model.d.mts.map
@@ -8,7 +8,7 @@ import { EmailCommandId, EmailRegistrationDecision, EmailUnavailable, PrepareEma
8
8
  import { ProofCompletionPlan } from "@yielded/auth/Proofs";
9
9
  import { LoginIdentifier } from "@yielded/auth/Identity";
10
10
  //#region src/drizzle/email-registration.d.ts
11
- interface EmailRegistrationAuthority<Registration> {
11
+ export interface EmailRegistrationAuthority<Registration> {
12
12
  readonly inspect: (input: {
13
13
  readonly identifier: LoginIdentifier;
14
14
  readonly registration: Registration;
@@ -26,5 +26,4 @@ interface EmailRegistrationAuthority<Registration> {
26
26
  }, prepare: PrepareEmailCommit<EmailRegistrationDecision, A>) => Effect.Effect<PreparedCommit<A>, EmailUnavailable>;
27
27
  }
28
28
  //#endregion
29
- export { EmailRegistrationAuthority };
30
29
  //# sourceMappingURL=email-registration.d.mts.map
@@ -6,15 +6,14 @@ import { HookConfigurationError, LifecycleHooks } from "@yielded/auth/Hooks";
6
6
  import { EmailAddressPersistence, EmailSignInTargets, EmailUnavailable } from "@yielded/auth/Email";
7
7
  import "effect/unstable/sql/SqlError";
8
8
  //#region src/drizzle/email-target.d.ts
9
- declare const emailSignInTargetsLayer: (services: Effect.Effect<{
9
+ export declare const emailSignInTargetsLayer: (services: Effect.Effect<{
10
10
  readonly emailSignInTargets: EmailSignInTargets["Service"];
11
11
  }>) => Layer.Layer<EmailSignInTargets, never, never>;
12
- declare const emailAddressPersistenceLayer: (services: Effect.Effect<{
12
+ export declare const emailAddressPersistenceLayer: (services: Effect.Effect<{
13
13
  readonly emailAddressPersistence: EmailAddressPersistence["Service"];
14
14
  }, never, LifecycleHooks>) => Layer.Layer<EmailAddressPersistence, never, LifecycleHooks>;
15
- declare const emailRegistrationLayer: <Id, Registration>(tag: Context.Key<Id, EmailRegistrationAuthority<Registration>>, services: Effect.Effect<{
15
+ export declare const emailRegistrationLayer: <Id, Registration>(tag: Context.Key<Id, EmailRegistrationAuthority<Registration>>, services: Effect.Effect<{
16
16
  readonly registrationAuthority: EmailRegistrationAuthority<Registration>;
17
17
  }, never, LifecycleHooks>) => Layer.Layer<Id, never, LifecycleHooks>;
18
18
  //#endregion
19
- export { emailAddressPersistenceLayer, emailRegistrationLayer, emailSignInTargetsLayer };
20
19
  //# sourceMappingURL=email-target.d.mts.map
@@ -9,40 +9,40 @@ import { AuthStoreError } from "@yielded/auth/Errors";
9
9
  import { AnyColumn, InferInsertModel, InferSelectModel, Table } from "drizzle-orm";
10
10
  import * as SqlClient from "effect/unstable/sql/SqlClient";
11
11
  //#region src/drizzle/model.d.ts
12
- type CommitMode = "interactive" | "synchronous" | "batch";
12
+ export type CommitMode = "interactive" | "synchronous" | "batch";
13
13
  /**
14
14
  * Ordinary error-channel consumes must own their commit. Coordinated callers
15
15
  * use the decision methods inside their outer transaction and translate only
16
16
  * after that owner commits.
17
17
  */
18
- interface SqlClientTransactionDatabase {
18
+ export interface SqlClientTransactionDatabase {
19
19
  readonly $client: Pick<SqlClient.SqlClient, "transactionService">;
20
20
  }
21
- declare const requireStandaloneConsume: (database: SqlClientTransactionDatabase) => Effect.Effect<void, AuthStoreError>;
22
- interface InstantCodec<NativeInstant> {
21
+ export declare const requireStandaloneConsume: (database: SqlClientTransactionDatabase) => Effect.Effect<void, AuthStoreError>;
22
+ export interface InstantCodec<NativeInstant> {
23
23
  readonly encode: (instant: DateTime.Utc) => NativeInstant;
24
24
  readonly decode: (native: NativeInstant) => Effect.Effect<DateTime.Utc, PersistenceMappingError>;
25
25
  }
26
- interface RequiredAuthStoreConstraints {
26
+ export interface RequiredAuthStoreConstraints {
27
27
  readonly series: "unique(namespace,value,purpose)";
28
28
  readonly challengeDigest: "unique(tokenDigest)";
29
29
  readonly registrationDigest: "unique(tokenDigest)";
30
30
  }
31
- interface RequiredOAuthStateConstraints {
31
+ export interface RequiredOAuthStateConstraints {
32
32
  readonly oauthStateDigest: "unique(stateDigest)";
33
33
  }
34
- interface RequiredAuthConstraints extends RequiredAuthStoreConstraints, RequiredOAuthStateConstraints {}
35
- declare const requiredAuthConstraints: RequiredAuthConstraints;
36
- declare const requiredAuthStoreConstraints: RequiredAuthStoreConstraints;
37
- declare const requiredOAuthStateConstraints: RequiredOAuthStateConstraints;
34
+ export interface RequiredAuthConstraints extends RequiredAuthStoreConstraints, RequiredOAuthStateConstraints {}
35
+ export declare const requiredAuthConstraints: RequiredAuthConstraints;
36
+ export declare const requiredAuthStoreConstraints: RequiredAuthStoreConstraints;
37
+ export declare const requiredOAuthStateConstraints: RequiredOAuthStateConstraints;
38
38
  type ColumnKey<T extends Table> = Extract<keyof T["_"]["columns"], string>;
39
- interface ChallengeRecord {
39
+ export interface ChallengeRecord {
40
40
  readonly challenge: NewChallenge;
41
41
  readonly namespace: string;
42
42
  readonly failedAttempts: number;
43
43
  readonly consumed: boolean;
44
44
  }
45
- interface ChallengeColumns<T extends Table> {
45
+ export interface ChallengeColumns<T extends Table> {
46
46
  readonly challengeId: ColumnKey<T>;
47
47
  readonly tokenDigest: ColumnKey<T>;
48
48
  readonly namespace: ColumnKey<T>;
@@ -63,7 +63,7 @@ interface ChallengeColumns<T extends Table> {
63
63
  * issuance watermark until every previously accepted issuance has expired;
64
64
  * current-row expiry alone is insufficient if historical lifetimes were longer.
65
65
  */
66
- interface ChallengeTableMapping<T extends Table> {
66
+ export interface ChallengeTableMapping<T extends Table> {
67
67
  readonly table: T;
68
68
  readonly columns: ChallengeColumns<T>;
69
69
  readonly identifierNamespace: string;
@@ -80,29 +80,29 @@ interface ChallengeTableMapping<T extends Table> {
80
80
  }) => Readonly<Record<string, unknown>>;
81
81
  readonly decode: (row: InferSelectModel<T>) => Effect.Effect<ChallengeRecord, PersistenceMappingError>;
82
82
  }
83
- interface RegistrationRecord {
83
+ export interface RegistrationRecord {
84
84
  readonly registration: PendingRegistration;
85
85
  readonly consumed: boolean;
86
86
  }
87
- interface RegistrationColumns<T extends Table> {
87
+ export interface RegistrationColumns<T extends Table> {
88
88
  readonly registrationId: ColumnKey<T>;
89
89
  readonly tokenDigest: ColumnKey<T>;
90
90
  readonly expiresAt: ColumnKey<T>;
91
91
  readonly consumed: ColumnKey<T>;
92
92
  }
93
- interface RegistrationTableMapping<T extends Table> {
93
+ export interface RegistrationTableMapping<T extends Table> {
94
94
  readonly table: T;
95
95
  readonly columns: RegistrationColumns<T>;
96
96
  readonly encodeInstant: (instant: DateTime.Utc) => unknown;
97
97
  readonly encodeInsert: (input: NewRegistration, consumed: false) => InferInsertModel<T>;
98
98
  readonly decode: (row: InferSelectModel<T>) => Effect.Effect<RegistrationRecord, PersistenceMappingError>;
99
99
  }
100
- interface OAuthStateColumns<T extends Table> {
100
+ export interface OAuthStateColumns<T extends Table> {
101
101
  readonly stateDigest: ColumnKey<T>;
102
102
  readonly expiresAt: ColumnKey<T>;
103
103
  readonly consumed: ColumnKey<T>;
104
104
  }
105
- interface OAuthStateTableMapping<T extends Table> {
105
+ export interface OAuthStateTableMapping<T extends Table> {
106
106
  readonly table: T;
107
107
  readonly columns: OAuthStateColumns<T>;
108
108
  readonly encodeInstant: (instant: DateTime.Utc) => unknown;
@@ -112,44 +112,44 @@ interface OAuthStateTableMapping<T extends Table> {
112
112
  readonly consumed: boolean;
113
113
  }, PersistenceMappingError>;
114
114
  }
115
- interface AuthStoreTables<Challenge extends Table, Registration extends Table> {
115
+ export interface AuthStoreTables<Challenge extends Table, Registration extends Table> {
116
116
  readonly constraints: RequiredAuthStoreConstraints;
117
117
  readonly challenge: ChallengeTableMapping<Challenge>;
118
118
  readonly registration: RegistrationTableMapping<Registration>;
119
119
  }
120
- interface OAuthStateTables<State extends Table> {
120
+ export interface OAuthStateTables<State extends Table> {
121
121
  readonly constraints: RequiredOAuthStateConstraints;
122
122
  readonly oauthState: OAuthStateTableMapping<State>;
123
123
  }
124
- interface AuthTables<Challenge extends Table, Registration extends Table, State extends Table> {
124
+ export interface AuthTables<Challenge extends Table, Registration extends Table, State extends Table> {
125
125
  readonly constraints: RequiredAuthConstraints;
126
126
  readonly challenge: ChallengeTableMapping<Challenge>;
127
127
  readonly registration: RegistrationTableMapping<Registration>;
128
128
  readonly oauthState: OAuthStateTableMapping<State>;
129
129
  }
130
- interface RequiredIdentityConstraints {
130
+ export interface RequiredIdentityConstraints {
131
131
  readonly identifier: "unique(namespace,value)";
132
132
  readonly externalIdentity: "unique(provider,issuer,subject)";
133
133
  readonly provisioningRequest: "unique(requestId)";
134
134
  readonly provisioningSubject: "notNull(provisioningRequest.subjectId)";
135
135
  }
136
- interface RequiredSubjectProvisioningConstraints {
136
+ export interface RequiredSubjectProvisioningConstraints {
137
137
  readonly identifier: "unique(namespace,value)";
138
138
  readonly provisioningRequest: "unique(requestId)";
139
139
  readonly provisioningSubject: "notNull(provisioningRequest.subjectId)";
140
140
  }
141
- interface RequiredExternalIdentityConstraints {
141
+ export interface RequiredExternalIdentityConstraints {
142
142
  readonly externalIdentity: "unique(provider,issuer,subject)";
143
143
  }
144
- declare const requiredIdentityConstraints: RequiredIdentityConstraints;
145
- declare const requiredSubjectProvisioningConstraints: RequiredSubjectProvisioningConstraints;
146
- declare const requiredExternalIdentityConstraints: RequiredExternalIdentityConstraints;
147
- interface SubjectIdCodec<NativeId> {
144
+ export declare const requiredIdentityConstraints: RequiredIdentityConstraints;
145
+ export declare const requiredSubjectProvisioningConstraints: RequiredSubjectProvisioningConstraints;
146
+ export declare const requiredExternalIdentityConstraints: RequiredExternalIdentityConstraints;
147
+ export interface SubjectIdCodec<NativeId> {
148
148
  readonly toNative: (id: SubjectId) => Effect.Effect<NativeId, PersistenceMappingError>;
149
149
  readonly toSubject: (id: NativeId) => Effect.Effect<SubjectId, PersistenceMappingError>;
150
150
  readonly equals: (left: NativeId, right: NativeId) => boolean;
151
151
  }
152
- interface SubjectProvisioningTables<Subject extends Table, Identifier extends Table, Request extends Table, NativeId> {
152
+ export interface SubjectProvisioningTables<Subject extends Table, Identifier extends Table, Request extends Table, NativeId> {
153
153
  readonly constraints: RequiredSubjectProvisioningConstraints;
154
154
  readonly subject: {
155
155
  readonly table: Subject;
@@ -181,7 +181,7 @@ interface SubjectProvisioningTables<Subject extends Table, Identifier extends Ta
181
181
  /** Narrows only database constraint failures; every other cause is unavailable. */
182
182
  readonly isConstraintConflict: (cause: unknown) => boolean;
183
183
  }
184
- interface ExternalIdentityTables<Subject extends Table, External extends Table, NativeId> {
184
+ export interface ExternalIdentityTables<Subject extends Table, External extends Table, NativeId> {
185
185
  readonly constraints: RequiredExternalIdentityConstraints;
186
186
  readonly subject: {
187
187
  readonly table: Subject;
@@ -200,7 +200,7 @@ interface ExternalIdentityTables<Subject extends Table, External extends Table,
200
200
  readonly subjectId: SubjectIdCodec<NativeId>;
201
201
  readonly isConstraintConflict: (cause: unknown) => boolean;
202
202
  }
203
- interface IdentityTables<Subject extends Table, Identifier extends Table, External extends Table, Request extends Table, NativeId> {
203
+ export interface IdentityTables<Subject extends Table, Identifier extends Table, External extends Table, Request extends Table, NativeId> {
204
204
  readonly constraints: RequiredIdentityConstraints;
205
205
  readonly subject: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>["subject"];
206
206
  readonly identifier: SubjectProvisioningTables<Subject, Identifier, Request, NativeId>["identifier"];
@@ -210,7 +210,7 @@ interface IdentityTables<Subject extends Table, Identifier extends Table, Extern
210
210
  readonly isConstraintConflict: (cause: unknown) => boolean;
211
211
  }
212
212
  /** Extra encoders used by D1's ordered batch when the subject id is database-generated. */
213
- interface D1SubjectProvisioningMapping<Subject extends Table, Identifier extends Table, Request extends Table, NativeId> extends SubjectProvisioningTables<Subject, Identifier, Request, NativeId> {
213
+ export interface D1SubjectProvisioningMapping<Subject extends Table, Identifier extends Table, Request extends Table, NativeId> extends SubjectProvisioningTables<Subject, Identifier, Request, NativeId> {
214
214
  readonly d1: {
215
215
  readonly requestInsertWithoutSubject: (requestId: string, fingerprint: string) => Partial<InferInsertModel<Request>>;
216
216
  readonly identifierInsertWithoutSubject: (identifier: LoginIdentifier, verifiedAt: DateTime.Utc | undefined) => Partial<InferInsertModel<Identifier>>;
@@ -218,33 +218,33 @@ interface D1SubjectProvisioningMapping<Subject extends Table, Identifier extends
218
218
  readonly generatedRowIdAlias?: "rowid" | "_rowid_" | "oid";
219
219
  };
220
220
  }
221
- interface D1ExternalIdentityMapping<Subject extends Table, External extends Table, NativeId> extends ExternalIdentityTables<Subject, External, NativeId> {
221
+ export interface D1ExternalIdentityMapping<Subject extends Table, External extends Table, NativeId> extends ExternalIdentityTables<Subject, External, NativeId> {
222
222
  readonly d1: {
223
223
  readonly activeStatusValue: unknown;
224
224
  };
225
225
  }
226
- interface D1GeneratedIdentityMapping<Subject extends Table, Identifier extends Table, External extends Table, Request extends Table, NativeId> extends IdentityTables<Subject, Identifier, External, Request, NativeId> {
226
+ export interface D1GeneratedIdentityMapping<Subject extends Table, Identifier extends Table, External extends Table, Request extends Table, NativeId> extends IdentityTables<Subject, Identifier, External, Request, NativeId> {
227
227
  readonly d1: D1SubjectProvisioningMapping<Subject, Identifier, Request, NativeId>["d1"] & D1ExternalIdentityMapping<Subject, External, NativeId>["d1"];
228
228
  }
229
- declare const provisioningFingerprint: (input: SubjectProvisioningInput) => string;
229
+ export declare const provisioningFingerprint: (input: SubjectProvisioningInput) => string;
230
230
  /**
231
231
  * Drizzle wraps Effect SQL failures before adapters observe them. Give the
232
232
  * consumer classifier each semantic wrapper in the short `cause`/`reason`
233
233
  * chain without exposing query text or bound parameters through public errors.
234
234
  */
235
- declare const column: <T extends Table>(table: T, key: ColumnKey<T>) => AnyColumn;
236
- declare const updateValues: <T extends Table>(entries: ReadonlyArray<readonly [ColumnKey<T>, unknown]>) => Partial<InferInsertModel<T>>;
237
- type ChallengeInput = ConsumeChallenge;
235
+ export declare const column: <T extends Table>(table: T, key: ColumnKey<T>) => AnyColumn;
236
+ export declare const updateValues: <T extends Table>(entries: ReadonlyArray<readonly [ColumnKey<T>, unknown]>) => Partial<InferInsertModel<T>>;
237
+ export type ChallengeInput = ConsumeChallenge;
238
238
  /** Acquire an application database in Effect and expose the auth stores as one layer. */
239
- declare const authServicesLayer: <E, R>(acquire: Effect.Effect<{
239
+ export declare const authServicesLayer: <E, R>(acquire: Effect.Effect<{
240
240
  readonly authStore: AuthStore["Service"];
241
241
  readonly oauthStateStore: OAuthStateStore["Service"];
242
242
  }, E, R>) => Layer.Layer<AuthStore | OAuthStateStore, E, Exclude<R, import("effect/Scope").Scope>>;
243
243
  /** Acquire an application database in Effect and expose the identity services as one layer. */
244
- declare const identityServicesLayer: <E, R>(acquire: Effect.Effect<{
244
+ export declare const identityServicesLayer: <E, R>(acquire: Effect.Effect<{
245
245
  readonly subjectProvisioner: SubjectProvisioner["Service"];
246
246
  readonly externalIdentityMutation: ExternalIdentityMutation["Service"];
247
247
  }, E, R>) => Layer.Layer<ExternalIdentityMutation | SubjectProvisioner, E, Exclude<R, import("effect/Scope").Scope>>;
248
248
  //#endregion
249
- export { AuthStoreTables, AuthTables, ChallengeColumns, type ChallengeConsumeDecision, ChallengeInput, ChallengeRecord, ChallengeTableMapping, CommitMode, type ConsumeDecision, D1ExternalIdentityMapping, D1GeneratedIdentityMapping, D1SubjectProvisioningMapping, ExternalIdentityTables, IdentityTables, InstantCodec, OAuthStateColumns, OAuthStateTableMapping, OAuthStateTables, PersistenceMappingError, RegistrationColumns, RegistrationRecord, RegistrationTableMapping, RequiredAuthConstraints, RequiredAuthStoreConstraints, RequiredExternalIdentityConstraints, RequiredIdentityConstraints, RequiredOAuthStateConstraints, RequiredSubjectProvisioningConstraints, SqlClientTransactionDatabase, SubjectIdCodec, SubjectProvisioningTables, authServicesLayer, column, identityServicesLayer, isMappedConstraintConflict, provisioningFingerprint, requireStandaloneConsume, requiredAuthConstraints, requiredAuthStoreConstraints, requiredExternalIdentityConstraints, requiredIdentityConstraints, requiredOAuthStateConstraints, requiredSubjectProvisioningConstraints, updateValues };
249
+ export { type ChallengeConsumeDecision, type ConsumeDecision, PersistenceMappingError, isMappedConstraintConflict };
250
250
  //# sourceMappingURL=model.d.mts.map
@@ -1,5 +1,6 @@
1
1
  import { PersistenceMappingError, isMappedConstraintConflict } from "../internal/mapping-error.mjs";
2
- import { Context, DateTime, Effect, Layer, Option } from "effect";
2
+ import { requireStandalone } from "../internal/standalone.mjs";
3
+ import { Context, DateTime, Effect, Layer } from "effect";
3
4
  import "@yielded/auth/Schema";
4
5
  import { ExternalIdentityMutation, SubjectProvisioner } from "@yielded/auth/Identity";
5
6
  import { OAuthStateStore } from "@yielded/auth/OAuth";
@@ -7,10 +8,7 @@ import { AuthStore } from "@yielded/auth/AuthStore";
7
8
  import { AuthStoreError } from "@yielded/auth/Errors";
8
9
  import { getTableColumns } from "drizzle-orm";
9
10
  //#region src/drizzle/model.ts
10
- const requireStandaloneConsume = (database) => Effect.serviceOption(database.$client.transactionService).pipe(Effect.flatMap(Option.match({
11
- onNone: () => Effect.void,
12
- onSome: () => AuthStoreError.make({ message: "Use the decision consume API inside an outer database transaction" })
13
- })));
11
+ const requireStandaloneConsume = (database) => requireStandalone(() => AuthStoreError.make({ message: "Use the decision consume API inside an outer database transaction" }), database.$client);
14
12
  const requiredAuthConstraints = {
15
13
  series: "unique(namespace,value,purpose)",
16
14
  challengeDigest: "unique(tokenDigest)",