@yielded/auth-persistence 0.1.0-beta.23 → 0.1.0-beta.24
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 +11 -0
- package/dist/Adapter.d.mts +12 -6
- package/dist/Adapter.mjs +8 -3
- package/dist/OAuthPersistence.d.mts +87 -0
- package/dist/OAuthPersistence.mjs +125 -0
- package/dist/OAuthPersistence.mjs.map +1 -0
- package/dist/_virtual/_rolldown/runtime.mjs +13 -0
- package/dist/index.d.mts +3 -1
- package/dist/index.mjs +3 -1
- package/dist/internal/configuration.d.mts +1 -1
- package/dist/internal/configuration.mjs.map +1 -1
- package/dist/internal/models/oauth-connected-model.d.mts +294 -0
- package/dist/internal/models/oauth-connected-model.mjs +22 -0
- package/dist/internal/models/oauth-connected-model.mjs.map +1 -0
- package/dist/internal/models/oauth-model.d.mts +467 -0
- package/dist/internal/models/oauth-model.mjs +49 -0
- package/dist/internal/models/oauth-model.mjs.map +1 -0
- package/dist/internal/models/password-model.d.mts +4 -47
- package/dist/internal/models/password-model.mjs +0 -1
- package/dist/internal/models/password-model.mjs.map +1 -1
- package/dist/internal/native-sql-table.d.mts +4 -0
- package/dist/internal/native-sql-table.mjs +7 -0
- package/dist/internal/native-sql-table.mjs.map +1 -1
- package/dist/internal/oauth/accounts.d.mts +8 -0
- package/dist/internal/oauth/accounts.mjs +379 -0
- package/dist/internal/oauth/accounts.mjs.map +1 -0
- package/dist/internal/oauth/connected-access.d.mts +9 -0
- package/dist/internal/oauth/connected-access.mjs +229 -0
- package/dist/internal/oauth/connected-access.mjs.map +1 -0
- package/dist/internal/oauth/connected-collection.d.mts +7 -0
- package/dist/internal/oauth/connected-collection.mjs +214 -0
- package/dist/internal/oauth/connected-collection.mjs.map +1 -0
- package/dist/internal/oauth/connected-custody.d.mts +6 -0
- package/dist/internal/oauth/connected-custody.mjs +165 -0
- package/dist/internal/oauth/connected-custody.mjs.map +1 -0
- package/dist/internal/oauth/connected-flow.d.mts +7 -0
- package/dist/internal/oauth/connected-flow.mjs +324 -0
- package/dist/internal/oauth/connected-flow.mjs.map +1 -0
- package/dist/internal/oauth/connected-input.mjs +122 -0
- package/dist/internal/oauth/connected-input.mjs.map +1 -0
- package/dist/internal/oauth/connected-keys.d.mts +2 -0
- package/dist/internal/oauth/connected-keys.mjs +22 -0
- package/dist/internal/oauth/connected-keys.mjs.map +1 -0
- package/dist/internal/oauth/connected-maintenance.d.mts +9 -0
- package/dist/internal/oauth/connected-maintenance.mjs +226 -0
- package/dist/internal/oauth/connected-maintenance.mjs.map +1 -0
- package/dist/internal/oauth/connected-management.d.mts +9 -0
- package/dist/internal/oauth/connected-management.mjs +243 -0
- package/dist/internal/oauth/connected-management.mjs.map +1 -0
- package/dist/internal/oauth/connected-reference.mjs +63 -0
- package/dist/internal/oauth/connected-reference.mjs.map +1 -0
- package/dist/internal/oauth/connected-settlement.d.mts +8 -0
- package/dist/internal/oauth/connected-settlement.mjs +141 -0
- package/dist/internal/oauth/connected-settlement.mjs.map +1 -0
- package/dist/internal/oauth/connected-sign-in.d.mts +10 -0
- package/dist/internal/oauth/connected-sign-in.mjs +281 -0
- package/dist/internal/oauth/connected-sign-in.mjs.map +1 -0
- package/dist/internal/oauth/connected-state.d.mts +14 -0
- package/dist/internal/oauth/connected-state.mjs +469 -0
- package/dist/internal/oauth/connected-state.mjs.map +1 -0
- package/dist/internal/oauth/connected-target.d.mts +21 -0
- package/dist/internal/oauth/connected-target.mjs +117 -0
- package/dist/internal/oauth/connected-target.mjs.map +1 -0
- package/dist/internal/oauth/flow.d.mts +5 -0
- package/dist/internal/oauth/flow.mjs +279 -0
- package/dist/internal/oauth/flow.mjs.map +1 -0
- package/dist/internal/oauth/input.mjs +127 -0
- package/dist/internal/oauth/input.mjs.map +1 -0
- package/dist/internal/oauth/owner.d.mts +10 -0
- package/dist/internal/oauth/owner.mjs +10 -0
- package/dist/internal/oauth/owner.mjs.map +1 -0
- package/dist/internal/oauth/query-compiler.d.mts +7 -0
- package/dist/internal/oauth/query-compiler.mjs +9 -0
- package/dist/internal/oauth/query-compiler.mjs.map +1 -0
- package/dist/internal/oauth/registration.d.mts +7 -0
- package/dist/internal/oauth/registration.mjs +393 -0
- package/dist/internal/oauth/registration.mjs.map +1 -0
- package/dist/internal/oauth/state.mjs +107 -0
- package/dist/internal/oauth/state.mjs.map +1 -0
- package/dist/internal/oauth/target.d.mts +31 -0
- package/dist/internal/oauth/target.mjs +273 -0
- package/dist/internal/oauth/target.mjs.map +1 -0
- package/dist/internal/oauth-kernel.d.mts +1423 -0
- package/dist/internal/oauth-kernel.mjs +187 -0
- package/dist/internal/oauth-kernel.mjs.map +1 -0
- package/dist/internal/oauth-proxy.d.mts +31 -0
- package/dist/internal/oauth-proxy.mjs +129 -0
- package/dist/internal/oauth-proxy.mjs.map +1 -0
- package/dist/internal/passkey-kernel.d.mts +5 -5
- package/dist/internal/{password-attempts.d.mts → password-credentials.d.mts} +3 -4
- package/dist/internal/password-credentials.mjs +121 -0
- package/dist/internal/password-credentials.mjs.map +1 -0
- package/dist/internal/password-kernel.d.mts +8 -24
- package/dist/internal/password-kernel.mjs +4 -42
- package/dist/internal/password-kernel.mjs.map +1 -1
- package/dist/internal/persistence.d.mts +1 -1
- package/dist/internal/persistence.mjs +2 -2
- package/dist/internal/persistence.mjs.map +1 -1
- package/dist/internal/query-operations.d.mts +2 -0
- package/dist/internal/session-kernel.d.mts +2 -2
- package/dist/internal/session-kernel.mjs +74 -18
- package/dist/internal/session-kernel.mjs.map +1 -1
- package/dist/internal/sql-oauth-connected-model.d.mts +29 -0
- package/dist/internal/sql-oauth-connected-model.mjs +7 -0
- package/dist/internal/sql-oauth-connected-model.mjs.map +1 -0
- package/dist/internal/sql-oauth-model.d.mts +60 -0
- package/dist/internal/sql-oauth-model.mjs +10 -0
- package/dist/internal/sql-oauth-model.mjs.map +1 -0
- package/dist/internal/sql-query.d.mts +12 -0
- package/dist/internal/sql-query.mjs +15 -18
- package/dist/internal/sql-query.mjs.map +1 -1
- package/dist/internal/sql-storage-validation.mjs +54 -0
- package/dist/internal/sql-storage-validation.mjs.map +1 -0
- package/dist/internal/storage-mapping.mjs +1 -37
- package/dist/internal/storage-mapping.mjs.map +1 -1
- package/dist/internal/storage-plans.d.mts +7 -0
- package/dist/internal/storage-plans.mjs +189 -0
- package/dist/internal/storage-plans.mjs.map +1 -0
- package/dist/internal/storage-tables.d.mts +0 -56
- package/dist/internal/storage-tables.mjs +0 -17
- package/dist/internal/storage-tables.mjs.map +1 -1
- package/dist/internal/storage-validation.d.mts +6 -1
- package/dist/internal/storage-validation.mjs +42 -1
- package/dist/internal/storage-validation.mjs.map +1 -1
- package/dist/internal/transaction-kernel.mjs +3 -2
- package/dist/internal/transaction-kernel.mjs.map +1 -1
- package/package.json +1 -1
- package/src/Adapter.ts +89 -5
- package/src/OAuthPersistence.ts +427 -0
- package/src/index.ts +3 -0
- package/src/internal/configuration.ts +1 -3
- package/src/internal/models/oauth-connected-model.ts +396 -0
- package/src/internal/models/oauth-model.ts +708 -0
- package/src/internal/models/password-model.ts +0 -56
- package/src/internal/native-sql-table.ts +14 -0
- package/src/internal/oauth/accounts.ts +838 -0
- package/src/internal/oauth/connected-access.ts +388 -0
- package/src/internal/oauth/connected-collection.ts +345 -0
- package/src/internal/oauth/connected-custody.ts +308 -0
- package/src/internal/oauth/connected-flow.ts +562 -0
- package/src/internal/oauth/connected-input.ts +147 -0
- package/src/internal/oauth/connected-keys.ts +31 -0
- package/src/internal/oauth/connected-maintenance.ts +379 -0
- package/src/internal/oauth/connected-management.ts +391 -0
- package/src/internal/oauth/connected-reference.ts +135 -0
- package/src/internal/oauth/connected-settlement.ts +278 -0
- package/src/internal/oauth/connected-sign-in.ts +472 -0
- package/src/internal/oauth/connected-state.ts +924 -0
- package/src/internal/oauth/connected-target.ts +307 -0
- package/src/internal/oauth/flow.ts +505 -0
- package/src/internal/oauth/input.ts +201 -0
- package/src/internal/oauth/owner.ts +22 -0
- package/src/internal/oauth/query-compiler.ts +15 -0
- package/src/internal/oauth/registration.ts +676 -0
- package/src/internal/oauth/state.ts +218 -0
- package/src/internal/oauth/target.ts +803 -0
- package/src/internal/oauth-kernel.ts +294 -0
- package/src/internal/oauth-proxy.ts +176 -0
- package/src/internal/password-credentials.ts +245 -0
- package/src/internal/password-kernel.ts +5 -98
- package/src/internal/persistence.ts +1 -1
- package/src/internal/query-operations.ts +2 -0
- package/src/internal/session-kernel.ts +143 -55
- package/src/internal/sql-oauth-connected-model.ts +145 -0
- package/src/internal/sql-oauth-model.ts +263 -0
- package/src/internal/sql-query.ts +16 -13
- package/src/internal/sql-storage-validation.ts +64 -0
- package/src/internal/storage-mapping.ts +0 -37
- package/src/internal/storage-plans.ts +218 -0
- package/src/internal/storage-tables.ts +0 -20
- package/src/internal/storage-validation.ts +58 -0
- package/src/internal/transaction-kernel.ts +6 -2
- package/dist/internal/password-attempts.mjs +0 -197
- package/dist/internal/password-attempts.mjs.map +0 -1
- package/src/internal/password-attempts.ts +0 -466
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { type RecoveryReference, type LoginIdentifier } from "@yielded/auth/Identity";
|
|
2
2
|
import type {
|
|
3
3
|
PasswordAction,
|
|
4
|
-
PasswordAttemptId,
|
|
5
4
|
PasswordCredentialSnapshot,
|
|
6
5
|
PasswordReplacement,
|
|
7
6
|
PasswordRegistrationDecision,
|
|
@@ -15,10 +14,6 @@ import type { PersistenceMappingError, SubjectIdCodec } from "./common";
|
|
|
15
14
|
|
|
16
15
|
type ColumnKey<T extends Table> = T["column"];
|
|
17
16
|
|
|
18
|
-
export type PasswordAttemptAction = "sign-in" | "change";
|
|
19
|
-
|
|
20
|
-
export type PasswordAttemptState = "pending" | "verified" | "rejected";
|
|
21
|
-
|
|
22
17
|
export interface PasswordSubjectTable<Subject extends Table, _NativeSubjectId> {
|
|
23
18
|
readonly table: Subject["table"];
|
|
24
19
|
readonly id: ColumnKey<Subject>;
|
|
@@ -121,48 +116,6 @@ export interface PasswordCredentialTable<
|
|
|
121
116
|
}) => Effect.Effect<PasswordCredentialSnapshot, PersistenceMappingError>;
|
|
122
117
|
}
|
|
123
118
|
|
|
124
|
-
export interface PasswordAttemptRecord {
|
|
125
|
-
readonly moduleId: string;
|
|
126
|
-
readonly action: PasswordAttemptAction;
|
|
127
|
-
readonly attemptId: PasswordAttemptId;
|
|
128
|
-
readonly identifier: LoginIdentifier;
|
|
129
|
-
readonly subjectId?: string;
|
|
130
|
-
readonly credentialId?: string;
|
|
131
|
-
readonly securityRevision?: SecurityRevision;
|
|
132
|
-
readonly credentialRevision?: SecurityRevision;
|
|
133
|
-
readonly verifierVersion?: SecurityRevision;
|
|
134
|
-
readonly identifierBindingRevision?: SecurityRevision;
|
|
135
|
-
readonly admittedAtMillis: number;
|
|
136
|
-
readonly deadlineMillis: number;
|
|
137
|
-
readonly retentionUntilMillis: number;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export interface PasswordAttemptTable<Attempt extends Table, NativeSubjectId> {
|
|
141
|
-
readonly table: Attempt["table"];
|
|
142
|
-
readonly moduleId: ColumnKey<Attempt>;
|
|
143
|
-
readonly action: ColumnKey<Attempt>;
|
|
144
|
-
readonly attemptId: ColumnKey<Attempt>;
|
|
145
|
-
readonly identifierNamespace: ColumnKey<Attempt>;
|
|
146
|
-
readonly identifierValue: ColumnKey<Attempt>;
|
|
147
|
-
readonly subjectId: ColumnKey<Attempt>;
|
|
148
|
-
readonly credentialId: ColumnKey<Attempt>;
|
|
149
|
-
readonly securityRevision: ColumnKey<Attempt>;
|
|
150
|
-
readonly credentialRevision: ColumnKey<Attempt>;
|
|
151
|
-
readonly verifierVersion: ColumnKey<Attempt>;
|
|
152
|
-
readonly identifierBindingRevision: ColumnKey<Attempt>;
|
|
153
|
-
readonly admittedAt: ColumnKey<Attempt>;
|
|
154
|
-
readonly deadline: ColumnKey<Attempt>;
|
|
155
|
-
readonly retentionUntil: ColumnKey<Attempt>;
|
|
156
|
-
readonly state: ColumnKey<Attempt>;
|
|
157
|
-
readonly encodeInsert: (
|
|
158
|
-
record: PasswordAttemptRecord,
|
|
159
|
-
input: {
|
|
160
|
-
readonly nativeSubjectId?: NativeSubjectId;
|
|
161
|
-
readonly state: "pending";
|
|
162
|
-
},
|
|
163
|
-
) => Attempt["insert"];
|
|
164
|
-
}
|
|
165
|
-
|
|
166
119
|
export interface PasswordCommandTable<Command extends Table> {
|
|
167
120
|
readonly table: Command["table"];
|
|
168
121
|
readonly moduleId: ColumnKey<Command>;
|
|
@@ -186,7 +139,6 @@ export interface RequiredPasswordConstraints {
|
|
|
186
139
|
readonly authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)";
|
|
187
140
|
readonly credentialSubject: "unique(credential.moduleId,credential.subjectId)";
|
|
188
141
|
readonly credentialId: "unique(credential.moduleId,credential.credentialId)";
|
|
189
|
-
readonly attempt: "unique(attempt.moduleId,attempt.attemptId)";
|
|
190
142
|
readonly command: "unique(command.moduleId,command.commandId)";
|
|
191
143
|
}
|
|
192
144
|
|
|
@@ -195,7 +147,6 @@ export const requiredPasswordConstraints: RequiredPasswordConstraints = {
|
|
|
195
147
|
authorityCredential: "unique(authorityCredential.subjectId,authorityCredential.credentialId)",
|
|
196
148
|
credentialSubject: "unique(credential.moduleId,credential.subjectId)",
|
|
197
149
|
credentialId: "unique(credential.moduleId,credential.credentialId)",
|
|
198
|
-
attempt: "unique(attempt.moduleId,attempt.attemptId)",
|
|
199
150
|
command: "unique(command.moduleId,command.commandId)",
|
|
200
151
|
};
|
|
201
152
|
|
|
@@ -216,7 +167,6 @@ export interface PasswordPersistenceMapping<
|
|
|
216
167
|
Identifier extends Table,
|
|
217
168
|
Credential extends Table,
|
|
218
169
|
AuthorityCredential extends Table,
|
|
219
|
-
Attempt extends Table,
|
|
220
170
|
Command extends Table,
|
|
221
171
|
NativeSubjectId,
|
|
222
172
|
Expression extends SqlExpression = SqlExpression,
|
|
@@ -229,14 +179,11 @@ export interface PasswordPersistenceMapping<
|
|
|
229
179
|
AuthorityCredential,
|
|
230
180
|
NativeSubjectId
|
|
231
181
|
>;
|
|
232
|
-
readonly attempt: PasswordAttemptTable<Attempt, NativeSubjectId>;
|
|
233
182
|
readonly command: PasswordCommandTable<Command>;
|
|
234
183
|
readonly subjectId: SubjectIdCodec<NativeSubjectId>;
|
|
235
184
|
readonly constraints: RequiredPasswordConstraints;
|
|
236
185
|
readonly encodeInstant: (epochMillis: number) => unknown;
|
|
237
186
|
readonly decodeInstant: (native: unknown) => Effect.Effect<number, PersistenceMappingError>;
|
|
238
|
-
readonly allocateAttemptId?: Effect.Effect<PasswordAttemptId, PersistenceMappingError>;
|
|
239
|
-
readonly allocateAttemptIdSync?: () => PasswordAttemptId;
|
|
240
187
|
readonly allocateCredentialId?: Effect.Effect<string, PersistenceMappingError>;
|
|
241
188
|
readonly allocateCredentialIdSync?: () => string;
|
|
242
189
|
readonly allocateRevision?: Effect.Effect<SecurityRevision, PersistenceMappingError>;
|
|
@@ -252,7 +199,6 @@ export type D1PasswordPersistenceMapping<
|
|
|
252
199
|
Identifier extends Table,
|
|
253
200
|
Credential extends Table,
|
|
254
201
|
AuthorityCredential extends Table,
|
|
255
|
-
Attempt extends Table,
|
|
256
202
|
Command extends Table,
|
|
257
203
|
NativeSubjectId,
|
|
258
204
|
Expression extends SqlExpression = SqlExpression,
|
|
@@ -261,7 +207,6 @@ export type D1PasswordPersistenceMapping<
|
|
|
261
207
|
Identifier,
|
|
262
208
|
Credential,
|
|
263
209
|
AuthorityCredential,
|
|
264
|
-
Attempt,
|
|
265
210
|
Command,
|
|
266
211
|
NativeSubjectId,
|
|
267
212
|
Expression
|
|
@@ -429,7 +374,6 @@ export type AnyPasswordPersistenceMapping<Expression extends SqlExpression = Sql
|
|
|
429
374
|
AnyTableModel,
|
|
430
375
|
AnyTableModel,
|
|
431
376
|
AnyTableModel,
|
|
432
|
-
AnyTableModel,
|
|
433
377
|
unknown,
|
|
434
378
|
Expression
|
|
435
379
|
>;
|
|
@@ -4,6 +4,7 @@ import * as Statement from "effect/sql/Statement";
|
|
|
4
4
|
|
|
5
5
|
import { PersistenceMappingError } from "./mapping-error";
|
|
6
6
|
import { Table, identifier } from "./sql-table";
|
|
7
|
+
import type { PhysicalTextColumn } from "./storage-validation";
|
|
7
8
|
|
|
8
9
|
/** Capture synchronous mapping callbacks without changing SQL execution errors. */
|
|
9
10
|
export const sqlMapping = <A>(thunk: () => A): Effect.Effect<A, PersistenceMappingError> =>
|
|
@@ -19,6 +20,9 @@ export interface SqlTable {
|
|
|
19
20
|
/** Alias reads only; writes continue to target the original physical table. */
|
|
20
21
|
readonly as: (alias: string) => SqlTable;
|
|
21
22
|
readonly column: (key: string) => Statement.Fragment;
|
|
23
|
+
/** Optional codec-free text candidate. Physical type/collation compatibility
|
|
24
|
+
* must still be checked against the database before comparing columns. */
|
|
25
|
+
readonly unencodedTextColumn?: (key: string) => PhysicalTextColumn | undefined;
|
|
22
26
|
/** Project every column under an ordinal alias, using a distinct prefix per table. */
|
|
23
27
|
readonly fields: (prefix: string) => Statement.Fragment;
|
|
24
28
|
readonly decode: (
|
|
@@ -98,6 +102,16 @@ const directTable = (client: SqlClient, physical: object): SqlTable => {
|
|
|
98
102
|
name: alias === undefined ? name : client`${name} AS ${reference}`,
|
|
99
103
|
as: bind,
|
|
100
104
|
column,
|
|
105
|
+
unencodedTextColumn: (key) =>
|
|
106
|
+
getColumn(key).options.type === "text"
|
|
107
|
+
? {
|
|
108
|
+
table: {
|
|
109
|
+
name: physical.name,
|
|
110
|
+
...(physical.schema === undefined ? {} : { schema: physical.schema }),
|
|
111
|
+
},
|
|
112
|
+
name: getColumn(key).options.name,
|
|
113
|
+
}
|
|
114
|
+
: undefined,
|
|
101
115
|
value,
|
|
102
116
|
fields: (prefix) =>
|
|
103
117
|
client.join(
|