@yielded/auth-persistence 0.1.0-beta.7 → 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.
- package/README.md +9 -0
- package/dist/DrizzleD1.d.mts +9 -9
- package/dist/DrizzleLibsql.d.mts +25 -25
- package/dist/DrizzleLibsql.mjs +7 -22
- package/dist/DrizzleLibsql.mjs.map +1 -1
- package/dist/DrizzleMysql2.d.mts +15 -15
- package/dist/DrizzlePglite.d.mts +9 -9
- package/dist/DrizzlePostgres.d.mts +15 -15
- package/dist/DrizzleSqliteBun.d.mts +18 -18
- package/dist/DrizzleSqliteDo.d.mts +29 -29
- package/dist/DrizzleSqliteNode.d.mts +24 -24
- package/dist/DrizzleSqliteWasm.d.mts +24 -24
- package/dist/_virtual/_rolldown/runtime.mjs +13 -0
- package/dist/drizzle/D1BatchStatements.d.mts +1 -2
- package/dist/drizzle/SuppliedService.d.mts +1 -2
- package/dist/drizzle/d1-emails.d.mts +5 -6
- package/dist/drizzle/d1-identity.d.mts +2 -3
- package/dist/drizzle/d1-oauth.d.mts +10 -11
- package/dist/drizzle/d1-passkey.d.mts +5 -6
- package/dist/drizzle/d1-password-prepared.d.mts +2 -3
- package/dist/drizzle/d1-passwords.d.mts +4 -5
- package/dist/drizzle/d1-phone.d.mts +2 -3
- package/dist/drizzle/d1-planning.d.mts +1 -2
- package/dist/drizzle/d1-proofs.d.mts +2 -3
- package/dist/drizzle/d1-sessions.d.mts +10 -11
- package/dist/drizzle/d1-totp.d.mts +2 -3
- package/dist/drizzle/email-model.d.mts +30 -31
- package/dist/drizzle/email-registration.d.mts +1 -2
- package/dist/drizzle/email-target.d.mts +3 -4
- package/dist/drizzle/model.d.mts +42 -42
- package/dist/drizzle/model.mjs +4 -6
- package/dist/drizzle/model.mjs.map +1 -1
- package/dist/drizzle/mysql-emails.d.mts +7 -8
- package/dist/drizzle/mysql-identity.d.mts +2 -3
- package/dist/drizzle/mysql-password-prepared.d.mts +3 -4
- package/dist/drizzle/mysql-passwords.d.mts +6 -7
- package/dist/drizzle/mysql-proofs.d.mts +3 -4
- package/dist/drizzle/mysql-sessions.d.mts +15 -16
- package/dist/drizzle/mysql.d.mts +9 -10
- package/dist/drizzle/mysql.mjs +1 -1
- package/dist/drizzle/oauth-connected-model.d.mts +21 -22
- package/dist/drizzle/oauth-connected-reference.d.mts +1 -2
- package/dist/drizzle/oauth-connected-state.d.mts +1950 -7
- package/dist/drizzle/oauth-connected-target.d.mts +9 -10
- package/dist/drizzle/oauth-flow.d.mts +22 -2
- package/dist/drizzle/oauth-model.d.mts +45 -46
- package/dist/drizzle/oauth-owner.d.mts +10 -2
- package/dist/drizzle/oauth-target.d.mts +9 -10
- package/dist/drizzle/passkey-model.d.mts +34 -35
- package/dist/drizzle/passkey-registration-ceremony-model.d.mts +5 -6
- package/dist/drizzle/passkey-write-model.d.mts +13 -14
- package/dist/drizzle/password-model.d.mts +29 -30
- package/dist/drizzle/password-prepared-model.d.mts +10 -11
- package/dist/drizzle/password-prepared-target.d.mts +1 -2
- package/dist/drizzle/password-registration.d.mts +1 -2
- package/dist/drizzle/password-target.d.mts +2 -3
- package/dist/drizzle/pg-emails.d.mts +7 -8
- package/dist/drizzle/pg-password-prepared.d.mts +3 -4
- package/dist/drizzle/pg-passwords.d.mts +6 -7
- package/dist/drizzle/pg-proofs.d.mts +3 -4
- package/dist/drizzle/pg-sessions.d.mts +15 -16
- package/dist/drizzle/pg.d.mts +11 -12
- package/dist/drizzle/pg.mjs +1 -1
- package/dist/drizzle/phone-model.d.mts +9 -10
- package/dist/drizzle/phone-target.d.mts +1 -2
- package/dist/drizzle/proof-model.d.mts +25 -26
- package/dist/drizzle/proof-target.d.mts +1 -2
- package/dist/drizzle/session-model.d.mts +25 -26
- package/dist/drizzle/session-target.d.mts +4 -5
- package/dist/drizzle/sqlite.d.mts +9 -10
- package/dist/drizzle/sqlite.mjs +1 -1
- package/dist/drizzle/standalone-guard.mjs +3 -5
- package/dist/drizzle/standalone-guard.mjs.map +1 -1
- package/dist/drizzle/step-up-model.d.mts +6 -7
- package/dist/drizzle/totp-model.d.mts +7 -8
- package/dist/drizzle/totp-state.d.mts +2 -3
- package/dist/drizzle/totp-target.d.mts +1 -2
- package/dist/drizzle/transaction-mysql.mjs +1 -0
- package/dist/drizzle/transaction-mysql.mjs.map +1 -1
- package/dist/drizzle/transaction-owner.d.mts +3 -2
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +3 -1
- package/dist/internal/configuration.d.mts +19 -19
- package/dist/internal/mapping-error.d.mts +2 -3
- package/dist/internal/oauth-app.d.mts +11 -0
- package/dist/internal/oauth-app.mjs +57 -0
- package/dist/internal/oauth-app.mjs.map +1 -0
- package/dist/internal/oauth-server.d.mts +10 -0
- package/dist/internal/oauth-server.mjs +66 -0
- package/dist/internal/oauth-server.mjs.map +1 -0
- package/dist/internal/passkey/target.d.mts +2 -3
- package/dist/internal/passkeys.mjs +2 -1
- package/dist/internal/passkeys.mjs.map +1 -1
- package/dist/internal/persistence.mjs +3 -2
- package/dist/internal/persistence.mjs.map +1 -1
- package/dist/internal/sql-persistence.d.mts +1 -2
- package/dist/internal/sql-table.d.mts +6 -7
- package/dist/internal/sql-table.mjs +12 -2
- package/dist/internal/sql-table.mjs.map +1 -1
- package/dist/internal/standalone.mjs +13 -0
- package/dist/internal/standalone.mjs.map +1 -0
- package/dist/internal/storage-tables.d.mts +5 -6
- package/dist/internal/transaction-execution-kernel.d.mts +2 -3
- package/dist/internal/transaction-execution-kernel.mjs +3 -5
- package/dist/internal/transaction-execution-kernel.mjs.map +1 -1
- package/dist/internal/transaction-kernel.d.mts +49 -2
- package/package.json +1 -1
- package/src/DrizzleLibsql.ts +10 -54
- package/src/drizzle/model.ts +8 -10
- package/src/drizzle/standalone-guard.ts +4 -9
- package/src/drizzle/transaction-mysql.ts +2 -0
- package/src/index.ts +2 -0
- package/src/internal/oauth-app.ts +82 -0
- package/src/internal/oauth-server.ts +89 -0
- package/src/internal/passkeys.ts +2 -6
- package/src/internal/persistence.ts +3 -5
- package/src/internal/sql-table.ts +17 -2
- package/src/internal/standalone.ts +30 -0
- 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
|
package/dist/drizzle/model.d.mts
CHANGED
|
@@ -3,46 +3,46 @@ import { DateTime, Effect, Layer } from "effect";
|
|
|
3
3
|
import { ChallengeConsumeDecision } from "@yielded/auth/Persistence";
|
|
4
4
|
import { ConsumeChallenge, NewChallenge, NewRegistration, PendingRegistration, SubjectId } from "@yielded/auth/Schema";
|
|
5
5
|
import { ExternalIdentity, ExternalIdentityMutation, LoginIdentifier, SubjectProvisioner, SubjectProvisioningInput } from "@yielded/auth/Identity";
|
|
6
|
+
import { OAuthState, OAuthStateStore } from "@yielded/auth/OAuth";
|
|
6
7
|
import { AuthStore, ConsumeDecision } from "@yielded/auth/AuthStore";
|
|
7
8
|
import { AuthStoreError } from "@yielded/auth/Errors";
|
|
8
|
-
import { OAuthState, OAuthStateStore } from "@yielded/auth/OAuth";
|
|
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 {
|
|
249
|
+
export { type ChallengeConsumeDecision, type ConsumeDecision, PersistenceMappingError, isMappedConstraintConflict };
|
|
250
250
|
//# sourceMappingURL=model.d.mts.map
|
package/dist/drizzle/model.mjs
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { PersistenceMappingError, isMappedConstraintConflict } from "../internal/mapping-error.mjs";
|
|
2
|
-
import {
|
|
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";
|
|
6
|
+
import { OAuthStateStore } from "@yielded/auth/OAuth";
|
|
5
7
|
import { AuthStore } from "@yielded/auth/AuthStore";
|
|
6
8
|
import { AuthStoreError } from "@yielded/auth/Errors";
|
|
7
|
-
import { OAuthStateStore } from "@yielded/auth/OAuth";
|
|
8
9
|
import { getTableColumns } from "drizzle-orm";
|
|
9
10
|
//#region src/drizzle/model.ts
|
|
10
|
-
const requireStandaloneConsume = (database) =>
|
|
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)",
|