@yielded/auth-persistence 0.1.0-beta.10

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 (182) hide show
  1. package/README.md +27 -0
  2. package/dist/Adapter.d.mts +30 -0
  3. package/dist/Adapter.mjs +25 -0
  4. package/dist/index.d.mts +7 -0
  5. package/dist/index.mjs +7 -0
  6. package/dist/internal/PasswordPreparedPostconditions.d.mts +22 -0
  7. package/dist/internal/PasswordPreparedPostconditions.mjs +12 -0
  8. package/dist/internal/PasswordPreparedPostconditions.mjs.map +1 -0
  9. package/dist/internal/configuration.d.mts +174 -0
  10. package/dist/internal/configuration.mjs +7 -0
  11. package/dist/internal/configuration.mjs.map +1 -0
  12. package/dist/internal/email-kernel.d.mts +275 -0
  13. package/dist/internal/email-kernel.mjs +487 -0
  14. package/dist/internal/email-kernel.mjs.map +1 -0
  15. package/dist/internal/mapping-error.d.mts +10 -0
  16. package/dist/internal/mapping-error.mjs +30 -0
  17. package/dist/internal/mapping-error.mjs.map +1 -0
  18. package/dist/internal/models/common.d.mts +12 -0
  19. package/dist/internal/models/email-model.d.mts +353 -0
  20. package/dist/internal/models/email-model.mjs +21 -0
  21. package/dist/internal/models/email-model.mjs.map +1 -0
  22. package/dist/internal/models/passkey-model.d.mts +266 -0
  23. package/dist/internal/models/passkey-model.mjs +34 -0
  24. package/dist/internal/models/passkey-model.mjs.map +1 -0
  25. package/dist/internal/models/passkey-registration-ceremony-model.d.mts +49 -0
  26. package/dist/internal/models/passkey-registration-ceremony-model.mjs +18 -0
  27. package/dist/internal/models/passkey-registration-ceremony-model.mjs.map +1 -0
  28. package/dist/internal/models/passkey-write-model.d.mts +189 -0
  29. package/dist/internal/models/passkey-write-model.mjs +13 -0
  30. package/dist/internal/models/passkey-write-model.mjs.map +1 -0
  31. package/dist/internal/models/password-model.d.mts +328 -0
  32. package/dist/internal/models/password-model.mjs +23 -0
  33. package/dist/internal/models/password-model.mjs.map +1 -0
  34. package/dist/internal/models/proof-model.d.mts +285 -0
  35. package/dist/internal/models/proof-model.mjs +17 -0
  36. package/dist/internal/models/proof-model.mjs.map +1 -0
  37. package/dist/internal/models/session-model.d.mts +199 -0
  38. package/dist/internal/models/session-model.mjs +20 -0
  39. package/dist/internal/models/session-model.mjs.map +1 -0
  40. package/dist/internal/models/step-up-model.d.mts +66 -0
  41. package/dist/internal/models/step-up-model.mjs +9 -0
  42. package/dist/internal/models/step-up-model.mjs.map +1 -0
  43. package/dist/internal/oauth-app.d.mts +11 -0
  44. package/dist/internal/oauth-app.mjs +57 -0
  45. package/dist/internal/oauth-app.mjs.map +1 -0
  46. package/dist/internal/oauth-server.d.mts +10 -0
  47. package/dist/internal/oauth-server.mjs +66 -0
  48. package/dist/internal/oauth-server.mjs.map +1 -0
  49. package/dist/internal/passkey/admission.d.mts +6 -0
  50. package/dist/internal/passkey/admission.mjs +216 -0
  51. package/dist/internal/passkey/admission.mjs.map +1 -0
  52. package/dist/internal/passkey/credentials.d.mts +14 -0
  53. package/dist/internal/passkey/credentials.mjs +249 -0
  54. package/dist/internal/passkey/credentials.mjs.map +1 -0
  55. package/dist/internal/passkey/enrollment.mjs +138 -0
  56. package/dist/internal/passkey/enrollment.mjs.map +1 -0
  57. package/dist/internal/passkey/flow.d.mts +21 -0
  58. package/dist/internal/passkey/flow.mjs +452 -0
  59. package/dist/internal/passkey/flow.mjs.map +1 -0
  60. package/dist/internal/passkey/management.mjs +231 -0
  61. package/dist/internal/passkey/management.mjs.map +1 -0
  62. package/dist/internal/passkey/registration-ceremony.d.mts +9 -0
  63. package/dist/internal/passkey/registration-ceremony.mjs +129 -0
  64. package/dist/internal/passkey/registration-ceremony.mjs.map +1 -0
  65. package/dist/internal/passkey/registration-custody.d.mts +2 -0
  66. package/dist/internal/passkey/registration-custody.mjs +52 -0
  67. package/dist/internal/passkey/registration-custody.mjs.map +1 -0
  68. package/dist/internal/passkey/registration-write.mjs +211 -0
  69. package/dist/internal/passkey/registration-write.mjs.map +1 -0
  70. package/dist/internal/passkey/state.d.mts +10 -0
  71. package/dist/internal/passkey/state.mjs +234 -0
  72. package/dist/internal/passkey/state.mjs.map +1 -0
  73. package/dist/internal/passkey/target.d.mts +19 -0
  74. package/dist/internal/passkey/target.mjs +190 -0
  75. package/dist/internal/passkey/target.mjs.map +1 -0
  76. package/dist/internal/passkey/write-state.d.mts +17 -0
  77. package/dist/internal/passkey/write-state.mjs +345 -0
  78. package/dist/internal/passkey/write-state.mjs.map +1 -0
  79. package/dist/internal/passkey/write-target.mjs +192 -0
  80. package/dist/internal/passkey/write-target.mjs.map +1 -0
  81. package/dist/internal/passkey-kernel.d.mts +5592 -0
  82. package/dist/internal/passkey-kernel.mjs +49 -0
  83. package/dist/internal/passkey-kernel.mjs.map +1 -0
  84. package/dist/internal/passkeys.d.mts +7 -0
  85. package/dist/internal/passkeys.mjs +368 -0
  86. package/dist/internal/passkeys.mjs.map +1 -0
  87. package/dist/internal/password-kernel.d.mts +290 -0
  88. package/dist/internal/password-kernel.mjs +704 -0
  89. package/dist/internal/password-kernel.mjs.map +1 -0
  90. package/dist/internal/persistence.d.mts +25 -0
  91. package/dist/internal/persistence.mjs +291 -0
  92. package/dist/internal/persistence.mjs.map +1 -0
  93. package/dist/internal/phone-kernel.d.mts +162 -0
  94. package/dist/internal/phone-kernel.mjs +434 -0
  95. package/dist/internal/phone-kernel.mjs.map +1 -0
  96. package/dist/internal/proof-kernel.d.mts +93 -0
  97. package/dist/internal/proof-kernel.mjs +619 -0
  98. package/dist/internal/proof-kernel.mjs.map +1 -0
  99. package/dist/internal/query-operations.d.mts +61 -0
  100. package/dist/internal/registration-contract.d.mts +16 -0
  101. package/dist/internal/registration.mjs +66 -0
  102. package/dist/internal/registration.mjs.map +1 -0
  103. package/dist/internal/session-kernel.d.mts +48 -0
  104. package/dist/internal/session-kernel.mjs +737 -0
  105. package/dist/internal/session-kernel.mjs.map +1 -0
  106. package/dist/internal/sql-persistence.d.mts +10 -0
  107. package/dist/internal/sql-persistence.mjs +37 -0
  108. package/dist/internal/sql-persistence.mjs.map +1 -0
  109. package/dist/internal/sql-query.mjs +207 -0
  110. package/dist/internal/sql-query.mjs.map +1 -0
  111. package/dist/internal/sql-table.d.mts +36 -0
  112. package/dist/internal/sql-table.mjs +81 -0
  113. package/dist/internal/sql-table.mjs.map +1 -0
  114. package/dist/internal/standalone.d.mts +9 -0
  115. package/dist/internal/standalone.mjs +13 -0
  116. package/dist/internal/standalone.mjs.map +1 -0
  117. package/dist/internal/step-up-state.d.mts +49 -0
  118. package/dist/internal/step-up-state.mjs +32 -0
  119. package/dist/internal/step-up-state.mjs.map +1 -0
  120. package/dist/internal/storage-mapping.mjs +686 -0
  121. package/dist/internal/storage-mapping.mjs.map +1 -0
  122. package/dist/internal/storage-tables.d.mts +913 -0
  123. package/dist/internal/storage-tables.mjs +387 -0
  124. package/dist/internal/storage-tables.mjs.map +1 -0
  125. package/dist/internal/storage-validation.mjs +58 -0
  126. package/dist/internal/storage-validation.mjs.map +1 -0
  127. package/dist/internal/transaction-execution-kernel.d.mts +38 -0
  128. package/dist/internal/transaction-execution-kernel.mjs +116 -0
  129. package/dist/internal/transaction-execution-kernel.mjs.map +1 -0
  130. package/dist/internal/transaction-kernel.d.mts +77 -0
  131. package/dist/internal/transaction-kernel.mjs +260 -0
  132. package/dist/internal/transaction-kernel.mjs.map +1 -0
  133. package/package.json +1 -0
  134. package/src/Adapter.ts +291 -0
  135. package/src/index.ts +6 -0
  136. package/src/internal/PasswordPreparedPostconditions.ts +30 -0
  137. package/src/internal/configuration.ts +282 -0
  138. package/src/internal/email-kernel.ts +1535 -0
  139. package/src/internal/mapping-error.ts +36 -0
  140. package/src/internal/models/common.ts +11 -0
  141. package/src/internal/models/email-model.ts +559 -0
  142. package/src/internal/models/passkey-model.ts +390 -0
  143. package/src/internal/models/passkey-registration-ceremony-model.ts +72 -0
  144. package/src/internal/models/passkey-write-model.ts +297 -0
  145. package/src/internal/models/password-model.ts +513 -0
  146. package/src/internal/models/proof-model.ts +424 -0
  147. package/src/internal/models/session-model.ts +375 -0
  148. package/src/internal/models/step-up-model.ts +135 -0
  149. package/src/internal/oauth-app.ts +82 -0
  150. package/src/internal/oauth-server.ts +89 -0
  151. package/src/internal/passkey/admission.ts +361 -0
  152. package/src/internal/passkey/credentials.ts +511 -0
  153. package/src/internal/passkey/enrollment.ts +326 -0
  154. package/src/internal/passkey/flow.ts +1062 -0
  155. package/src/internal/passkey/management.ts +421 -0
  156. package/src/internal/passkey/registration-ceremony.ts +283 -0
  157. package/src/internal/passkey/registration-custody.ts +91 -0
  158. package/src/internal/passkey/registration-write.ts +426 -0
  159. package/src/internal/passkey/state.ts +353 -0
  160. package/src/internal/passkey/target.ts +586 -0
  161. package/src/internal/passkey/write-state.ts +681 -0
  162. package/src/internal/passkey/write-target.ts +452 -0
  163. package/src/internal/passkey-kernel.ts +104 -0
  164. package/src/internal/passkeys.ts +606 -0
  165. package/src/internal/password-kernel.ts +2124 -0
  166. package/src/internal/persistence.ts +588 -0
  167. package/src/internal/phone-kernel.ts +846 -0
  168. package/src/internal/proof-kernel.ts +1954 -0
  169. package/src/internal/query-operations.ts +81 -0
  170. package/src/internal/registration-contract.ts +22 -0
  171. package/src/internal/registration.ts +161 -0
  172. package/src/internal/session-kernel.ts +2217 -0
  173. package/src/internal/sql-persistence.ts +45 -0
  174. package/src/internal/sql-query.ts +298 -0
  175. package/src/internal/sql-table.ts +104 -0
  176. package/src/internal/standalone.ts +30 -0
  177. package/src/internal/step-up-state.ts +139 -0
  178. package/src/internal/storage-mapping.ts +708 -0
  179. package/src/internal/storage-tables.ts +408 -0
  180. package/src/internal/storage-validation.ts +117 -0
  181. package/src/internal/transaction-execution-kernel.ts +313 -0
  182. package/src/internal/transaction-kernel.ts +593 -0
@@ -0,0 +1,297 @@
1
+ import type { PreparedCommit } from "@yielded/auth/Hooks";
2
+ import type {
3
+ PasskeyUnavailable,
4
+ PasskeyActionAuthorization,
5
+ PasskeyCeremony,
6
+ PasskeyClaim,
7
+ PasskeyCredential,
8
+ PasskeyCredentialSummary,
9
+ PasskeyIssueDecision,
10
+ PasskeyRegistrationResult,
11
+ PasskeyRegistrationVerified,
12
+ PasskeyRequirement,
13
+ PasskeyRevision,
14
+ PasskeyManagementPersistence,
15
+ PreparePasskeyCommit,
16
+ PasskeyManagementPolicy,
17
+ PasskeyMethodPolicy,
18
+ } from "@yielded/auth/Passkey";
19
+ import type { TokenDigest } from "@yielded/auth/Schema";
20
+ import type { SessionInvalidationWindow } from "@yielded/auth/Sessions";
21
+ import type { Effect, Schema } from "effect";
22
+
23
+ import type { TableModel as Table, SqlExpression } from "../query-operations";
24
+ import type { PersistenceMappingError } from "./common";
25
+ import type {
26
+ PasskeyColumn,
27
+ PasskeyCredentialMapping,
28
+ PasskeyFlowTable,
29
+ PasskeyHandleReservationTable,
30
+ PasskeyPersistenceMapping,
31
+ PasskeyPersistenceServices,
32
+ } from "./passkey-model";
33
+ import type { PasskeyRegistrationIntentReadTable } from "./passkey-registration-ceremony-model";
34
+
35
+ export interface PasskeyCredentialInsert<N> {
36
+ readonly subjectId: N;
37
+ readonly credential: PasskeyCredential;
38
+ readonly summary: PasskeyCredentialSummary;
39
+ readonly marker: string;
40
+ }
41
+
42
+ export interface PasskeyWriteTables<
43
+ S extends Table,
44
+ C extends Table,
45
+ F extends Table,
46
+ O extends Table,
47
+ H extends Table,
48
+ N,
49
+ Expression extends SqlExpression = SqlExpression,
50
+ > {
51
+ readonly credential: {
52
+ readonly name: PasskeyColumn<C>;
53
+ readonly createdAt: PasskeyColumn<C>;
54
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => C["insert"];
55
+ readonly encodePrimarySignIn: (value: boolean) => unknown;
56
+ readonly encodeEnrollmentUserVerified: (value: boolean) => unknown;
57
+ readonly encodeBackupEligible: (value: boolean) => unknown;
58
+ readonly activeStatus: unknown;
59
+ readonly removedStatus: unknown;
60
+ };
61
+ readonly authority: {
62
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => F["insert"];
63
+ readonly activeStatus: unknown;
64
+ readonly removedStatus: unknown;
65
+ };
66
+ readonly credentialOwnership: {
67
+ readonly encodeInsert: (input: PasskeyCredentialInsert<N>) => O["insert"];
68
+ readonly ownedState: unknown;
69
+ readonly removedState: unknown;
70
+ };
71
+ readonly handleOwnership: {
72
+ readonly encodeInsert: (input: {
73
+ readonly subjectId: N;
74
+ readonly rpId: string;
75
+ readonly userHandle: string;
76
+ readonly marker: string;
77
+ }) => H["insert"];
78
+ readonly ownedState: unknown;
79
+ };
80
+ /** All mutable policy dependencies must be subject columns or declared module guards. */
81
+ readonly policy: {
82
+ readonly subjectColumns: ReadonlyArray<PasskeyColumn<S>>;
83
+ readonly management: (row: Readonly<Partial<S["select"]>>) => PasskeyManagementPolicy;
84
+ readonly requirement: (
85
+ row: Readonly<Partial<S["select"]>>,
86
+ action: PasskeyActionAuthorization["challenge"]["action"],
87
+ ) => Effect.Effect<typeof PasskeyRequirement.Type, PersistenceMappingError>;
88
+ readonly metadata: (subjectId: N) => Expression;
89
+ readonly action: (subjectId: N, authorization: PasskeyActionAuthorization) => Expression;
90
+ /** Usable primary/recovery path AND required remaining factors. Evaluated with the target excluded, before and after removal. Connected grants/factor-only credentials are not primary paths. */
91
+ readonly remainingSignIn: (
92
+ subjectId: N,
93
+ removedCredentialId: string,
94
+ row: Readonly<Partial<S["select"]>>,
95
+ ) => Effect.Effect<Expression, PersistenceMappingError>;
96
+ };
97
+ }
98
+
99
+ export interface PasskeyInvalidationInput<N> {
100
+ readonly subjectId: N;
101
+ readonly previousRevision: typeof PasskeyRevision.Type.securityRevision;
102
+ readonly securityRevision: typeof PasskeyRevision.Type.securityRevision;
103
+ readonly invalidation: SessionInvalidationWindow;
104
+ }
105
+
106
+ export interface PasskeyInvalidationMutation<N, Expression extends SqlExpression = SqlExpression> {
107
+ readonly table: object;
108
+ readonly where: (input: PasskeyInvalidationInput<N>) => Expression;
109
+ readonly values: (input: PasskeyInvalidationInput<N>) => Readonly<Record<string, unknown>>;
110
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => Expression;
111
+ }
112
+
113
+ /** Same-owner updates for consumer session/pending tables. No external effects or callbacks after commit. */
114
+ export const passkeyInvalidationMutation = <
115
+ T extends Table,
116
+ N,
117
+ Expression extends SqlExpression = SqlExpression,
118
+ >(input: {
119
+ readonly table: T["table"];
120
+ readonly where: (input: PasskeyInvalidationInput<N>) => Expression;
121
+ readonly values: (input: PasskeyInvalidationInput<N>) => Partial<T["insert"]>;
122
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => Expression;
123
+ }): PasskeyInvalidationMutation<N, Expression> => input;
124
+
125
+ export interface PasskeyCommandTable<T extends Table, N> {
126
+ readonly table: T["table"];
127
+ readonly moduleId: PasskeyColumn<T>;
128
+ readonly commandId: PasskeyColumn<T>;
129
+ readonly subjectId: PasskeyColumn<T>;
130
+ readonly credentialId: PasskeyColumn<T>;
131
+ readonly intent: PasskeyColumn<T>;
132
+ readonly decision: PasskeyColumn<T>;
133
+ readonly retentionUntil: PasskeyColumn<T>;
134
+ readonly version: PasskeyColumn<T>;
135
+ readonly encodeInsert: (input: {
136
+ readonly moduleId: string;
137
+ readonly commandId: string;
138
+ readonly subjectId: N;
139
+ readonly credentialId: string;
140
+ }) => T["insert"];
141
+ }
142
+
143
+ export interface PasskeyManagementMapping<
144
+ S extends Table,
145
+ C extends Table,
146
+ F extends Table,
147
+ O extends Table,
148
+ H extends Table,
149
+ M extends Table,
150
+ Flow extends Table,
151
+ A extends Table,
152
+ Charge extends Table,
153
+ Command extends Table,
154
+ N,
155
+ Expression extends SqlExpression = SqlExpression,
156
+ > extends PasskeyPersistenceMapping<
157
+ PasskeyCredentialMapping<S, C, F, O, H, N, Expression>,
158
+ M,
159
+ Flow,
160
+ A,
161
+ Charge,
162
+ N,
163
+ Expression,
164
+ C
165
+ > {
166
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N, Expression>;
167
+ readonly command: PasskeyCommandTable<Command, N>;
168
+ readonly managementConstraints: typeof requiredPasskeyManagementConstraints;
169
+ /** Removal must match the installed session strategy and change the subject revision; immediate sessions must consult that authority or be updated here. Enrollment preserves existing authentication. */
170
+ readonly invalidation: {
171
+ readonly window: SessionInvalidationWindow;
172
+ readonly mutations: ReadonlyArray<PasskeyInvalidationMutation<N, Expression>>;
173
+ readonly postcondition: (input: PasskeyInvalidationInput<N>) => Expression;
174
+ };
175
+ }
176
+
177
+ export const requiredPasskeyManagementConstraints = { command: ["moduleId", "commandId"] } as const;
178
+
179
+ export interface PasskeyManagementServices extends PasskeyPersistenceServices {
180
+ readonly passkeyManagementPersistence: PasskeyManagementPersistence["Service"];
181
+ }
182
+
183
+ export interface PasskeyRegistrationWriter<R> {
184
+ readonly inspect: (registration: R) => Effect.Effect<
185
+ {
186
+ readonly fingerprint: TokenDigest;
187
+ readonly eligible: boolean;
188
+ readonly name: string;
189
+ readonly displayName: string;
190
+ },
191
+ PasskeyUnavailable
192
+ >;
193
+ readonly issueRegistration: <A>(
194
+ input: {
195
+ readonly ceremony: PasskeyCeremony;
196
+ readonly policy: PasskeyMethodPolicy;
197
+ readonly registration: R;
198
+ },
199
+ prepare: PreparePasskeyCommit<PasskeyIssueDecision, A>,
200
+ ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
201
+ readonly completeRegistration: <A>(
202
+ input: {
203
+ readonly claim: PasskeyClaim;
204
+ readonly verified: PasskeyRegistrationVerified;
205
+ readonly nowMillis: number;
206
+ },
207
+ prepare: PreparePasskeyCommit<
208
+ | PasskeyRegistrationResult
209
+ | {
210
+ readonly _tag: "Rejected";
211
+ },
212
+ A
213
+ >,
214
+ ) => Effect.Effect<PreparedCommit<A>, PasskeyUnavailable>;
215
+ }
216
+
217
+ export interface PasskeyRegistrationServices<R> extends PasskeyPersistenceServices {
218
+ readonly passkeyRegistrationAuthority: PasskeyRegistrationWriter<R>;
219
+ }
220
+
221
+ export interface PasskeyRegistrationMapping<
222
+ S extends Table,
223
+ C extends Table,
224
+ F extends Table,
225
+ O extends Table,
226
+ H extends Table,
227
+ M extends Table,
228
+ Flow extends Table,
229
+ A extends Table,
230
+ Charge extends Table,
231
+ Intent extends Table,
232
+ N,
233
+ R,
234
+ Expression extends SqlExpression = SqlExpression,
235
+ > extends PasskeyPersistenceMapping<
236
+ PasskeyCredentialMapping<S, C, F, O, H, N, Expression>,
237
+ M,
238
+ Flow,
239
+ A,
240
+ Charge,
241
+ N,
242
+ Expression,
243
+ C
244
+ > {
245
+ readonly write: PasskeyWriteTables<S, C, F, O, H, N, Expression>;
246
+ readonly flow: PasskeyFlowTable<Flow>;
247
+ readonly handle: PasskeyHandleReservationTable<H, Expression> & {
248
+ readonly reservedState: unknown;
249
+ readonly encodeInsert: (input: {
250
+ readonly ceremony: PasskeyCeremony;
251
+ readonly reservationId: string;
252
+ }) => H["insert"];
253
+ };
254
+ readonly intent: PasskeyRegistrationIntentReadTable<Intent, Expression> & {
255
+ readonly pendingState: unknown;
256
+ readonly acceptedState: unknown;
257
+ readonly rejectedState: unknown;
258
+ readonly encodeInsert: (input: {
259
+ readonly ceremony: PasskeyCeremony;
260
+ readonly registration: R;
261
+ readonly reservationId: string;
262
+ }) => Intent["insert"];
263
+ };
264
+ /** Consumer-owned data and identity, synchronously encoded inside the owner. A SQL-local registration creates no session and needs no email address. */
265
+ readonly registration: {
266
+ readonly schema: Schema.Codec<R, unknown, never, never>;
267
+ readonly describe: (registration: R) => {
268
+ readonly name: string;
269
+ readonly displayName: string;
270
+ };
271
+ readonly eligible: (registration: R) => Expression;
272
+ /** Commit-time application policy after provisioning. Unlike `eligible`, this
273
+ * must permit the newly created subject and retain every mutable prerequisite.
274
+ * Declare mutable external policy rows in module.guards so native locking
275
+ * owners serialize revocation through commit; this predicate alone is not a lock. */
276
+ readonly finalEligibility: (input: {
277
+ readonly registration: R;
278
+ readonly subjectId: N;
279
+ }) => Expression;
280
+ readonly subject: (input: {
281
+ readonly registration: R;
282
+ readonly ceremony: PasskeyCeremony;
283
+ readonly marker: string;
284
+ }) => {
285
+ readonly subjectId: N;
286
+ readonly values: S["insert"];
287
+ };
288
+ readonly activeStatus: unknown;
289
+ };
290
+ readonly registrationConstraints: typeof requiredPasskeyRegistrationWriteConstraints;
291
+ }
292
+
293
+ export const requiredPasskeyRegistrationWriteConstraints = {
294
+ intentFlow: ["moduleId", "flowId"],
295
+ intentCommand: ["moduleId", "commandId"],
296
+ handle: ["handleKey"],
297
+ } as const;