@seamless-auth/types 0.28.0 → 0.30.0
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/CHANGELOG.md +34 -0
- package/README.md +22 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/schemas/auth/auth.schema.d.ts +3 -0
- package/dist/schemas/auth/auth.schema.d.ts.map +1 -1
- package/dist/schemas/auth/auth.schema.js +2 -0
- package/dist/schemas/auth/auth.schema.js.map +1 -1
- package/dist/schemas/authEvent/schema.d.ts +43 -4
- package/dist/schemas/authEvent/schema.d.ts.map +1 -1
- package/dist/schemas/authEvent/schema.js +14 -1
- package/dist/schemas/authEvent/schema.js.map +1 -1
- package/dist/schemas/oauth/schema.d.ts +3 -0
- package/dist/schemas/oauth/schema.d.ts.map +1 -1
- package/dist/schemas/oauth/schema.js +8 -0
- package/dist/schemas/oauth/schema.js.map +1 -1
- package/dist/schemas/policy/schema.d.ts +555 -0
- package/dist/schemas/policy/schema.d.ts.map +1 -0
- package/dist/schemas/policy/schema.js +125 -0
- package/dist/schemas/policy/schema.js.map +1 -0
- package/dist/schemas/recovery/schema.d.ts +130 -0
- package/dist/schemas/recovery/schema.d.ts.map +1 -0
- package/dist/schemas/recovery/schema.js +81 -0
- package/dist/schemas/recovery/schema.js.map +1 -0
- package/dist/schemas/systemConfig/schema.d.ts +63 -2
- package/dist/schemas/systemConfig/schema.d.ts.map +1 -1
- package/dist/schemas/systemConfig/schema.js +51 -5
- package/dist/schemas/systemConfig/schema.js.map +1 -1
- package/package.json +4 -3
- package/src/index.ts +2 -0
- package/src/schemas/auth/auth.schema.ts +2 -0
- package/src/schemas/authEvent/schema.ts +14 -1
- package/src/schemas/oauth/schema.ts +8 -0
- package/src/schemas/policy/schema.ts +168 -0
- package/src/schemas/recovery/schema.ts +117 -0
- package/src/schemas/systemConfig/schema.ts +68 -5
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* The system config keys that decide who can sign in, and how. These are the ones a
|
|
4
|
+
* change can lock people out with, so each published change is kept as a version that
|
|
5
|
+
* can be restored in one step, and can be staged as a draft and dry-run first.
|
|
6
|
+
*/
|
|
7
|
+
export declare const POLICY_KEYS: readonly ["login_methods", "passkey_login_fallback_enabled", "phishing_resistant_only", "prompt_passkey_enrollment", "authenticator_policy", "lockout_policy", "recovery_codes", "account_recovery"];
|
|
8
|
+
export declare const PolicyKeySchema: z.ZodEnum<{
|
|
9
|
+
login_methods: "login_methods";
|
|
10
|
+
passkey_login_fallback_enabled: "passkey_login_fallback_enabled";
|
|
11
|
+
prompt_passkey_enrollment: "prompt_passkey_enrollment";
|
|
12
|
+
phishing_resistant_only: "phishing_resistant_only";
|
|
13
|
+
lockout_policy: "lockout_policy";
|
|
14
|
+
authenticator_policy: "authenticator_policy";
|
|
15
|
+
recovery_codes: "recovery_codes";
|
|
16
|
+
account_recovery: "account_recovery";
|
|
17
|
+
}>;
|
|
18
|
+
export type PolicyKey = z.infer<typeof PolicyKeySchema>;
|
|
19
|
+
export declare const PolicyDocumentSchema: z.ZodObject<{
|
|
20
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
21
|
+
passkey: "passkey";
|
|
22
|
+
magic_link: "magic_link";
|
|
23
|
+
email_otp: "email_otp";
|
|
24
|
+
phone_otp: "phone_otp";
|
|
25
|
+
oauth: "oauth";
|
|
26
|
+
}>>;
|
|
27
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
28
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
29
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
31
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
32
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
33
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
34
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
37
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
38
|
+
"cross-platform": "cross-platform";
|
|
39
|
+
platform: "platform";
|
|
40
|
+
any: "any";
|
|
41
|
+
}>>;
|
|
42
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
43
|
+
discouraged: "discouraged";
|
|
44
|
+
preferred: "preferred";
|
|
45
|
+
required: "required";
|
|
46
|
+
}>>;
|
|
47
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
48
|
+
direct: "direct";
|
|
49
|
+
none: "none";
|
|
50
|
+
}>>;
|
|
51
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
52
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
53
|
+
block: "block";
|
|
54
|
+
allow: "allow";
|
|
55
|
+
}>>;
|
|
56
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
57
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
58
|
+
}, z.core.$strip>>;
|
|
59
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
60
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
61
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
+
}, z.core.$strip>>;
|
|
63
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
64
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
65
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
export type PolicyDocument = z.infer<typeof PolicyDocumentSchema>;
|
|
69
|
+
/**
|
|
70
|
+
* How a version came to be. Drafts are optional: a whole-config PATCH that touches a
|
|
71
|
+
* policy key still applies immediately, and is recorded as a `config_patch` version so
|
|
72
|
+
* it can be rolled back like any other.
|
|
73
|
+
*/
|
|
74
|
+
export declare const PolicyVersionSourceSchema: z.ZodEnum<{
|
|
75
|
+
rollback: "rollback";
|
|
76
|
+
publish: "publish";
|
|
77
|
+
config_patch: "config_patch";
|
|
78
|
+
bootstrap: "bootstrap";
|
|
79
|
+
}>;
|
|
80
|
+
export type PolicyVersionSource = z.infer<typeof PolicyVersionSourceSchema>;
|
|
81
|
+
export declare const PolicyVersionSchema: z.ZodObject<{
|
|
82
|
+
version: z.ZodNumber;
|
|
83
|
+
policy: z.ZodObject<{
|
|
84
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
85
|
+
passkey: "passkey";
|
|
86
|
+
magic_link: "magic_link";
|
|
87
|
+
email_otp: "email_otp";
|
|
88
|
+
phone_otp: "phone_otp";
|
|
89
|
+
oauth: "oauth";
|
|
90
|
+
}>>;
|
|
91
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
92
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
93
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
94
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
95
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
96
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
97
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
98
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
99
|
+
}, z.core.$strip>>;
|
|
100
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
101
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
102
|
+
"cross-platform": "cross-platform";
|
|
103
|
+
platform: "platform";
|
|
104
|
+
any: "any";
|
|
105
|
+
}>>;
|
|
106
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
107
|
+
discouraged: "discouraged";
|
|
108
|
+
preferred: "preferred";
|
|
109
|
+
required: "required";
|
|
110
|
+
}>>;
|
|
111
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
112
|
+
direct: "direct";
|
|
113
|
+
none: "none";
|
|
114
|
+
}>>;
|
|
115
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
116
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
117
|
+
block: "block";
|
|
118
|
+
allow: "allow";
|
|
119
|
+
}>>;
|
|
120
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
121
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
122
|
+
}, z.core.$strip>>;
|
|
123
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
124
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
125
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
126
|
+
}, z.core.$strip>>;
|
|
127
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
128
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
129
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
130
|
+
}, z.core.$strip>>;
|
|
131
|
+
}, z.core.$strip>;
|
|
132
|
+
source: z.ZodEnum<{
|
|
133
|
+
rollback: "rollback";
|
|
134
|
+
publish: "publish";
|
|
135
|
+
config_patch: "config_patch";
|
|
136
|
+
bootstrap: "bootstrap";
|
|
137
|
+
}>;
|
|
138
|
+
publishedAt: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
139
|
+
publishedBy: z.ZodNullable<z.ZodString>;
|
|
140
|
+
rolledBackTo: z.ZodOptional<z.ZodNumber>;
|
|
141
|
+
}, z.core.$strip>;
|
|
142
|
+
export type PolicyVersion = z.infer<typeof PolicyVersionSchema>;
|
|
143
|
+
export declare const PolicyDraftSchema: z.ZodObject<{
|
|
144
|
+
policy: z.ZodObject<{
|
|
145
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
146
|
+
passkey: "passkey";
|
|
147
|
+
magic_link: "magic_link";
|
|
148
|
+
email_otp: "email_otp";
|
|
149
|
+
phone_otp: "phone_otp";
|
|
150
|
+
oauth: "oauth";
|
|
151
|
+
}>>;
|
|
152
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
153
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
154
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
155
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
156
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
157
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
158
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
159
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
160
|
+
}, z.core.$strip>>;
|
|
161
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
162
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
163
|
+
"cross-platform": "cross-platform";
|
|
164
|
+
platform: "platform";
|
|
165
|
+
any: "any";
|
|
166
|
+
}>>;
|
|
167
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
168
|
+
discouraged: "discouraged";
|
|
169
|
+
preferred: "preferred";
|
|
170
|
+
required: "required";
|
|
171
|
+
}>>;
|
|
172
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
173
|
+
direct: "direct";
|
|
174
|
+
none: "none";
|
|
175
|
+
}>>;
|
|
176
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
177
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
178
|
+
block: "block";
|
|
179
|
+
allow: "allow";
|
|
180
|
+
}>>;
|
|
181
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
182
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
183
|
+
}, z.core.$strip>>;
|
|
184
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
185
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
186
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
187
|
+
}, z.core.$strip>>;
|
|
188
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
189
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
190
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
191
|
+
}, z.core.$strip>>;
|
|
192
|
+
}, z.core.$strip>;
|
|
193
|
+
basedOnVersion: z.ZodNumber;
|
|
194
|
+
updatedAt: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
195
|
+
updatedBy: z.ZodNullable<z.ZodString>;
|
|
196
|
+
}, z.core.$strip>;
|
|
197
|
+
export type PolicyDraft = z.infer<typeof PolicyDraftSchema>;
|
|
198
|
+
/** `GET /system-config/policy`. */
|
|
199
|
+
export declare const PolicyStateResponseSchema: z.ZodObject<{
|
|
200
|
+
published: z.ZodObject<{
|
|
201
|
+
version: z.ZodNumber;
|
|
202
|
+
policy: z.ZodObject<{
|
|
203
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
204
|
+
passkey: "passkey";
|
|
205
|
+
magic_link: "magic_link";
|
|
206
|
+
email_otp: "email_otp";
|
|
207
|
+
phone_otp: "phone_otp";
|
|
208
|
+
oauth: "oauth";
|
|
209
|
+
}>>;
|
|
210
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
211
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
212
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
213
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
214
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
215
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
216
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
217
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
218
|
+
}, z.core.$strip>>;
|
|
219
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
220
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
221
|
+
"cross-platform": "cross-platform";
|
|
222
|
+
platform: "platform";
|
|
223
|
+
any: "any";
|
|
224
|
+
}>>;
|
|
225
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
226
|
+
discouraged: "discouraged";
|
|
227
|
+
preferred: "preferred";
|
|
228
|
+
required: "required";
|
|
229
|
+
}>>;
|
|
230
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
231
|
+
direct: "direct";
|
|
232
|
+
none: "none";
|
|
233
|
+
}>>;
|
|
234
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
235
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
236
|
+
block: "block";
|
|
237
|
+
allow: "allow";
|
|
238
|
+
}>>;
|
|
239
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
240
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
241
|
+
}, z.core.$strip>>;
|
|
242
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
243
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
244
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
245
|
+
}, z.core.$strip>>;
|
|
246
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
247
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
248
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
249
|
+
}, z.core.$strip>>;
|
|
250
|
+
}, z.core.$strip>;
|
|
251
|
+
source: z.ZodEnum<{
|
|
252
|
+
rollback: "rollback";
|
|
253
|
+
publish: "publish";
|
|
254
|
+
config_patch: "config_patch";
|
|
255
|
+
bootstrap: "bootstrap";
|
|
256
|
+
}>;
|
|
257
|
+
publishedAt: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
258
|
+
publishedBy: z.ZodNullable<z.ZodString>;
|
|
259
|
+
rolledBackTo: z.ZodOptional<z.ZodNumber>;
|
|
260
|
+
}, z.core.$strip>;
|
|
261
|
+
draft: z.ZodNullable<z.ZodObject<{
|
|
262
|
+
policy: z.ZodObject<{
|
|
263
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
264
|
+
passkey: "passkey";
|
|
265
|
+
magic_link: "magic_link";
|
|
266
|
+
email_otp: "email_otp";
|
|
267
|
+
phone_otp: "phone_otp";
|
|
268
|
+
oauth: "oauth";
|
|
269
|
+
}>>;
|
|
270
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
271
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
272
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
273
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
274
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
275
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
276
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
277
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
278
|
+
}, z.core.$strip>>;
|
|
279
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
280
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
281
|
+
"cross-platform": "cross-platform";
|
|
282
|
+
platform: "platform";
|
|
283
|
+
any: "any";
|
|
284
|
+
}>>;
|
|
285
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
286
|
+
discouraged: "discouraged";
|
|
287
|
+
preferred: "preferred";
|
|
288
|
+
required: "required";
|
|
289
|
+
}>>;
|
|
290
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
291
|
+
direct: "direct";
|
|
292
|
+
none: "none";
|
|
293
|
+
}>>;
|
|
294
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
295
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
296
|
+
block: "block";
|
|
297
|
+
allow: "allow";
|
|
298
|
+
}>>;
|
|
299
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
300
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
301
|
+
}, z.core.$strip>>;
|
|
302
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
303
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
304
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
305
|
+
}, z.core.$strip>>;
|
|
306
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
307
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
308
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
309
|
+
}, z.core.$strip>>;
|
|
310
|
+
}, z.core.$strip>;
|
|
311
|
+
basedOnVersion: z.ZodNumber;
|
|
312
|
+
updatedAt: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
313
|
+
updatedBy: z.ZodNullable<z.ZodString>;
|
|
314
|
+
}, z.core.$strip>>;
|
|
315
|
+
}, z.core.$strip>;
|
|
316
|
+
export type PolicyStateResponse = z.infer<typeof PolicyStateResponseSchema>;
|
|
317
|
+
/** `PUT /system-config/policy/draft`. */
|
|
318
|
+
export declare const PolicyDraftSaveRequestSchema: z.ZodObject<{
|
|
319
|
+
policy: z.ZodObject<{
|
|
320
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
321
|
+
passkey: "passkey";
|
|
322
|
+
magic_link: "magic_link";
|
|
323
|
+
email_otp: "email_otp";
|
|
324
|
+
phone_otp: "phone_otp";
|
|
325
|
+
oauth: "oauth";
|
|
326
|
+
}>>;
|
|
327
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
328
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
329
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
330
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
331
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
332
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
333
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
334
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
335
|
+
}, z.core.$strip>>;
|
|
336
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
337
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
338
|
+
"cross-platform": "cross-platform";
|
|
339
|
+
platform: "platform";
|
|
340
|
+
any: "any";
|
|
341
|
+
}>>;
|
|
342
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
343
|
+
discouraged: "discouraged";
|
|
344
|
+
preferred: "preferred";
|
|
345
|
+
required: "required";
|
|
346
|
+
}>>;
|
|
347
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
348
|
+
direct: "direct";
|
|
349
|
+
none: "none";
|
|
350
|
+
}>>;
|
|
351
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
352
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
353
|
+
block: "block";
|
|
354
|
+
allow: "allow";
|
|
355
|
+
}>>;
|
|
356
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
357
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
358
|
+
}, z.core.$strip>>;
|
|
359
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
360
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
361
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
362
|
+
}, z.core.$strip>>;
|
|
363
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
364
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
365
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
366
|
+
}, z.core.$strip>>;
|
|
367
|
+
}, z.core.$strip>;
|
|
368
|
+
}, z.core.$strict>;
|
|
369
|
+
export type PolicyDraftSaveRequest = z.infer<typeof PolicyDraftSaveRequestSchema>;
|
|
370
|
+
/**
|
|
371
|
+
* `POST /system-config/policy/publish`. `expectedVersion` is the published version the
|
|
372
|
+
* caller reviewed; publishing answers `409` if another version was published since, so
|
|
373
|
+
* a stale draft cannot silently undo someone else's change.
|
|
374
|
+
*/
|
|
375
|
+
export declare const PolicyPublishRequestSchema: z.ZodObject<{
|
|
376
|
+
expectedVersion: z.ZodNumber;
|
|
377
|
+
}, z.core.$strict>;
|
|
378
|
+
export type PolicyPublishRequest = z.infer<typeof PolicyPublishRequestSchema>;
|
|
379
|
+
/** `POST /system-config/policy/rollback`: publishes a copy of `version` as a new version. */
|
|
380
|
+
export declare const PolicyRollbackRequestSchema: z.ZodObject<{
|
|
381
|
+
version: z.ZodNumber;
|
|
382
|
+
expectedVersion: z.ZodNumber;
|
|
383
|
+
}, z.core.$strict>;
|
|
384
|
+
export type PolicyRollbackRequest = z.infer<typeof PolicyRollbackRequestSchema>;
|
|
385
|
+
/** `GET /system-config/policy/versions`, newest first. */
|
|
386
|
+
export declare const PolicyVersionsResponseSchema: z.ZodObject<{
|
|
387
|
+
versions: z.ZodArray<z.ZodObject<{
|
|
388
|
+
version: z.ZodNumber;
|
|
389
|
+
policy: z.ZodObject<{
|
|
390
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
391
|
+
passkey: "passkey";
|
|
392
|
+
magic_link: "magic_link";
|
|
393
|
+
email_otp: "email_otp";
|
|
394
|
+
phone_otp: "phone_otp";
|
|
395
|
+
oauth: "oauth";
|
|
396
|
+
}>>;
|
|
397
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
398
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
399
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
400
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
401
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
402
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
403
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
404
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
405
|
+
}, z.core.$strip>>;
|
|
406
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
407
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
408
|
+
"cross-platform": "cross-platform";
|
|
409
|
+
platform: "platform";
|
|
410
|
+
any: "any";
|
|
411
|
+
}>>;
|
|
412
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
413
|
+
discouraged: "discouraged";
|
|
414
|
+
preferred: "preferred";
|
|
415
|
+
required: "required";
|
|
416
|
+
}>>;
|
|
417
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
418
|
+
direct: "direct";
|
|
419
|
+
none: "none";
|
|
420
|
+
}>>;
|
|
421
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
422
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
423
|
+
block: "block";
|
|
424
|
+
allow: "allow";
|
|
425
|
+
}>>;
|
|
426
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
427
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
428
|
+
}, z.core.$strip>>;
|
|
429
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
430
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
431
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
432
|
+
}, z.core.$strip>>;
|
|
433
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
434
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
435
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
436
|
+
}, z.core.$strip>>;
|
|
437
|
+
}, z.core.$strip>;
|
|
438
|
+
source: z.ZodEnum<{
|
|
439
|
+
rollback: "rollback";
|
|
440
|
+
publish: "publish";
|
|
441
|
+
config_patch: "config_patch";
|
|
442
|
+
bootstrap: "bootstrap";
|
|
443
|
+
}>;
|
|
444
|
+
publishedAt: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
445
|
+
publishedBy: z.ZodNullable<z.ZodString>;
|
|
446
|
+
rolledBackTo: z.ZodOptional<z.ZodNumber>;
|
|
447
|
+
}, z.core.$strip>>;
|
|
448
|
+
}, z.core.$strip>;
|
|
449
|
+
export type PolicyVersionsResponse = z.infer<typeof PolicyVersionsResponseSchema>;
|
|
450
|
+
/**
|
|
451
|
+
* `POST /system-config/policy/dry-run`. Without `policy`, evaluates the current draft.
|
|
452
|
+
*/
|
|
453
|
+
export declare const PolicyDryRunRequestSchema: z.ZodObject<{
|
|
454
|
+
policy: z.ZodOptional<z.ZodObject<{
|
|
455
|
+
login_methods: z.ZodArray<z.ZodEnum<{
|
|
456
|
+
passkey: "passkey";
|
|
457
|
+
magic_link: "magic_link";
|
|
458
|
+
email_otp: "email_otp";
|
|
459
|
+
phone_otp: "phone_otp";
|
|
460
|
+
oauth: "oauth";
|
|
461
|
+
}>>;
|
|
462
|
+
passkey_login_fallback_enabled: z.ZodBoolean;
|
|
463
|
+
prompt_passkey_enrollment: z.ZodDefault<z.ZodBoolean>;
|
|
464
|
+
phishing_resistant_only: z.ZodDefault<z.ZodBoolean>;
|
|
465
|
+
lockout_policy: z.ZodDefault<z.ZodObject<{
|
|
466
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
467
|
+
maxFailures: z.ZodDefault<z.ZodNumber>;
|
|
468
|
+
windowSeconds: z.ZodDefault<z.ZodNumber>;
|
|
469
|
+
lockoutSeconds: z.ZodDefault<z.ZodNumber>;
|
|
470
|
+
}, z.core.$strip>>;
|
|
471
|
+
authenticator_policy: z.ZodDefault<z.ZodObject<{
|
|
472
|
+
attachment: z.ZodDefault<z.ZodEnum<{
|
|
473
|
+
"cross-platform": "cross-platform";
|
|
474
|
+
platform: "platform";
|
|
475
|
+
any: "any";
|
|
476
|
+
}>>;
|
|
477
|
+
userVerification: z.ZodDefault<z.ZodEnum<{
|
|
478
|
+
discouraged: "discouraged";
|
|
479
|
+
preferred: "preferred";
|
|
480
|
+
required: "required";
|
|
481
|
+
}>>;
|
|
482
|
+
attestation: z.ZodDefault<z.ZodEnum<{
|
|
483
|
+
direct: "direct";
|
|
484
|
+
none: "none";
|
|
485
|
+
}>>;
|
|
486
|
+
requireKnownAuthenticator: z.ZodDefault<z.ZodBoolean>;
|
|
487
|
+
syncedPasskeys: z.ZodDefault<z.ZodEnum<{
|
|
488
|
+
block: "block";
|
|
489
|
+
allow: "allow";
|
|
490
|
+
}>>;
|
|
491
|
+
aaguidAllowList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
492
|
+
aaguidDenyList: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
493
|
+
}, z.core.$strip>>;
|
|
494
|
+
recovery_codes: z.ZodDefault<z.ZodObject<{
|
|
495
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
496
|
+
requireAtEnrollment: z.ZodDefault<z.ZodBoolean>;
|
|
497
|
+
}, z.core.$strip>>;
|
|
498
|
+
account_recovery: z.ZodDefault<z.ZodObject<{
|
|
499
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
500
|
+
delay: z.ZodDefault<z.ZodString>;
|
|
501
|
+
}, z.core.$strip>>;
|
|
502
|
+
}, z.core.$strip>>;
|
|
503
|
+
days: z.ZodDefault<z.ZodNumber>;
|
|
504
|
+
}, z.core.$strict>;
|
|
505
|
+
export type PolicyDryRunRequest = z.infer<typeof PolicyDryRunRequestSchema>;
|
|
506
|
+
export declare const PolicyDryRunReasonSchema: z.ZodEnum<{
|
|
507
|
+
authenticator_not_allowed: "authenticator_not_allowed";
|
|
508
|
+
method_disabled: "method_disabled";
|
|
509
|
+
phishing_resistant_required: "phishing_resistant_required";
|
|
510
|
+
fallback_disabled: "fallback_disabled";
|
|
511
|
+
synced_passkey_blocked: "synced_passkey_blocked";
|
|
512
|
+
user_verification_required: "user_verification_required";
|
|
513
|
+
}>;
|
|
514
|
+
export type PolicyDryRunReason = z.infer<typeof PolicyDryRunReasonSchema>;
|
|
515
|
+
export declare const PolicyDryRunUserSchema: z.ZodObject<{
|
|
516
|
+
userId: z.ZodString;
|
|
517
|
+
email: z.ZodString;
|
|
518
|
+
signIns: z.ZodNumber;
|
|
519
|
+
reasons: z.ZodArray<z.ZodEnum<{
|
|
520
|
+
authenticator_not_allowed: "authenticator_not_allowed";
|
|
521
|
+
method_disabled: "method_disabled";
|
|
522
|
+
phishing_resistant_required: "phishing_resistant_required";
|
|
523
|
+
fallback_disabled: "fallback_disabled";
|
|
524
|
+
synced_passkey_blocked: "synced_passkey_blocked";
|
|
525
|
+
user_verification_required: "user_verification_required";
|
|
526
|
+
}>>;
|
|
527
|
+
lockedOut: z.ZodBoolean;
|
|
528
|
+
}, z.core.$strip>;
|
|
529
|
+
export type PolicyDryRunUser = z.infer<typeof PolicyDryRunUserSchema>;
|
|
530
|
+
export declare const PolicyDryRunResponseSchema: z.ZodObject<{
|
|
531
|
+
window: z.ZodObject<{
|
|
532
|
+
from: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
533
|
+
to: z.ZodPipe<z.ZodCoercedDate<unknown>, z.ZodTransform<string, Date>>;
|
|
534
|
+
}, z.core.$strip>;
|
|
535
|
+
signInsEvaluated: z.ZodNumber;
|
|
536
|
+
usersEvaluated: z.ZodNumber;
|
|
537
|
+
wouldFail: z.ZodArray<z.ZodObject<{
|
|
538
|
+
userId: z.ZodString;
|
|
539
|
+
email: z.ZodString;
|
|
540
|
+
signIns: z.ZodNumber;
|
|
541
|
+
reasons: z.ZodArray<z.ZodEnum<{
|
|
542
|
+
authenticator_not_allowed: "authenticator_not_allowed";
|
|
543
|
+
method_disabled: "method_disabled";
|
|
544
|
+
phishing_resistant_required: "phishing_resistant_required";
|
|
545
|
+
fallback_disabled: "fallback_disabled";
|
|
546
|
+
synced_passkey_blocked: "synced_passkey_blocked";
|
|
547
|
+
user_verification_required: "user_verification_required";
|
|
548
|
+
}>>;
|
|
549
|
+
lockedOut: z.ZodBoolean;
|
|
550
|
+
}, z.core.$strip>>;
|
|
551
|
+
usersLockedOut: z.ZodNumber;
|
|
552
|
+
breakGlassAccounts: z.ZodNumber;
|
|
553
|
+
}, z.core.$strip>;
|
|
554
|
+
export type PolicyDryRunResponse = z.infer<typeof PolicyDryRunResponseSchema>;
|
|
555
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/schemas/policy/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { IsoDate } from '../../shared.js';
|
|
3
|
+
import { SystemConfigSchema } from '../systemConfig/schema.js';
|
|
4
|
+
/**
|
|
5
|
+
* The system config keys that decide who can sign in, and how. These are the ones a
|
|
6
|
+
* change can lock people out with, so each published change is kept as a version that
|
|
7
|
+
* can be restored in one step, and can be staged as a draft and dry-run first.
|
|
8
|
+
*/
|
|
9
|
+
export const POLICY_KEYS = [
|
|
10
|
+
'login_methods',
|
|
11
|
+
'passkey_login_fallback_enabled',
|
|
12
|
+
'phishing_resistant_only',
|
|
13
|
+
'prompt_passkey_enrollment',
|
|
14
|
+
'authenticator_policy',
|
|
15
|
+
'lockout_policy',
|
|
16
|
+
'recovery_codes',
|
|
17
|
+
'account_recovery',
|
|
18
|
+
];
|
|
19
|
+
export const PolicyKeySchema = z.enum(POLICY_KEYS);
|
|
20
|
+
export const PolicyDocumentSchema = SystemConfigSchema.pick({
|
|
21
|
+
login_methods: true,
|
|
22
|
+
passkey_login_fallback_enabled: true,
|
|
23
|
+
phishing_resistant_only: true,
|
|
24
|
+
prompt_passkey_enrollment: true,
|
|
25
|
+
authenticator_policy: true,
|
|
26
|
+
lockout_policy: true,
|
|
27
|
+
recovery_codes: true,
|
|
28
|
+
account_recovery: true,
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* How a version came to be. Drafts are optional: a whole-config PATCH that touches a
|
|
32
|
+
* policy key still applies immediately, and is recorded as a `config_patch` version so
|
|
33
|
+
* it can be rolled back like any other.
|
|
34
|
+
*/
|
|
35
|
+
export const PolicyVersionSourceSchema = z.enum([
|
|
36
|
+
'publish',
|
|
37
|
+
'rollback',
|
|
38
|
+
'config_patch',
|
|
39
|
+
'bootstrap',
|
|
40
|
+
]);
|
|
41
|
+
export const PolicyVersionSchema = z.object({
|
|
42
|
+
version: z.number().int().positive(),
|
|
43
|
+
policy: PolicyDocumentSchema,
|
|
44
|
+
source: PolicyVersionSourceSchema,
|
|
45
|
+
publishedAt: IsoDate,
|
|
46
|
+
/** User id of the administrator, or null for a version the server wrote itself. */
|
|
47
|
+
publishedBy: z.string().nullable(),
|
|
48
|
+
/** The version a rollback restored. */
|
|
49
|
+
rolledBackTo: z.number().int().positive().optional(),
|
|
50
|
+
});
|
|
51
|
+
export const PolicyDraftSchema = z.object({
|
|
52
|
+
policy: PolicyDocumentSchema,
|
|
53
|
+
/** The published version the draft was started from. */
|
|
54
|
+
basedOnVersion: z.number().int().positive(),
|
|
55
|
+
updatedAt: IsoDate,
|
|
56
|
+
updatedBy: z.string().nullable(),
|
|
57
|
+
});
|
|
58
|
+
/** `GET /system-config/policy`. */
|
|
59
|
+
export const PolicyStateResponseSchema = z.object({
|
|
60
|
+
published: PolicyVersionSchema,
|
|
61
|
+
draft: PolicyDraftSchema.nullable(),
|
|
62
|
+
});
|
|
63
|
+
/** `PUT /system-config/policy/draft`. */
|
|
64
|
+
export const PolicyDraftSaveRequestSchema = z
|
|
65
|
+
.object({
|
|
66
|
+
policy: PolicyDocumentSchema,
|
|
67
|
+
})
|
|
68
|
+
.strict();
|
|
69
|
+
/**
|
|
70
|
+
* `POST /system-config/policy/publish`. `expectedVersion` is the published version the
|
|
71
|
+
* caller reviewed; publishing answers `409` if another version was published since, so
|
|
72
|
+
* a stale draft cannot silently undo someone else's change.
|
|
73
|
+
*/
|
|
74
|
+
export const PolicyPublishRequestSchema = z
|
|
75
|
+
.object({
|
|
76
|
+
expectedVersion: z.number().int().positive(),
|
|
77
|
+
})
|
|
78
|
+
.strict();
|
|
79
|
+
/** `POST /system-config/policy/rollback`: publishes a copy of `version` as a new version. */
|
|
80
|
+
export const PolicyRollbackRequestSchema = z
|
|
81
|
+
.object({
|
|
82
|
+
version: z.number().int().positive(),
|
|
83
|
+
expectedVersion: z.number().int().positive(),
|
|
84
|
+
})
|
|
85
|
+
.strict();
|
|
86
|
+
/** `GET /system-config/policy/versions`, newest first. */
|
|
87
|
+
export const PolicyVersionsResponseSchema = z.object({
|
|
88
|
+
versions: z.array(PolicyVersionSchema),
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* `POST /system-config/policy/dry-run`. Without `policy`, evaluates the current draft.
|
|
92
|
+
*/
|
|
93
|
+
export const PolicyDryRunRequestSchema = z
|
|
94
|
+
.object({
|
|
95
|
+
policy: PolicyDocumentSchema.optional(),
|
|
96
|
+
days: z.number().int().min(1).max(30).default(7),
|
|
97
|
+
})
|
|
98
|
+
.strict();
|
|
99
|
+
export const PolicyDryRunReasonSchema = z.enum([
|
|
100
|
+
'method_disabled',
|
|
101
|
+
'phishing_resistant_required',
|
|
102
|
+
'fallback_disabled',
|
|
103
|
+
'synced_passkey_blocked',
|
|
104
|
+
'authenticator_not_allowed',
|
|
105
|
+
'user_verification_required',
|
|
106
|
+
]);
|
|
107
|
+
export const PolicyDryRunUserSchema = z.object({
|
|
108
|
+
userId: z.string(),
|
|
109
|
+
email: z.string(),
|
|
110
|
+
/** Sign-ins in the window this policy would have refused. */
|
|
111
|
+
signIns: z.number().int().nonnegative(),
|
|
112
|
+
reasons: z.array(PolicyDryRunReasonSchema).min(1),
|
|
113
|
+
/** True when none of the user's enrolled factors would still sign them in. */
|
|
114
|
+
lockedOut: z.boolean(),
|
|
115
|
+
});
|
|
116
|
+
export const PolicyDryRunResponseSchema = z.object({
|
|
117
|
+
window: z.object({ from: IsoDate, to: IsoDate }),
|
|
118
|
+
signInsEvaluated: z.number().int().nonnegative(),
|
|
119
|
+
usersEvaluated: z.number().int().nonnegative(),
|
|
120
|
+
wouldFail: z.array(PolicyDryRunUserSchema),
|
|
121
|
+
usersLockedOut: z.number().int().nonnegative(),
|
|
122
|
+
/** Break-glass accounts are exempt from policy, so they are counted, never refused. */
|
|
123
|
+
breakGlassAccounts: z.number().int().nonnegative(),
|
|
124
|
+
});
|
|
125
|
+
//# sourceMappingURL=schema.js.map
|