@cairs-npm/express-auth-2fa 0.1.3 → 0.1.5
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/dist/index.cjs +21 -11
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -246
- package/dist/index.d.ts +31 -246
- package/dist/index.js +21 -11
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.cts
CHANGED
|
@@ -161,145 +161,67 @@ interface Logger {
|
|
|
161
161
|
error: (obj: object, msg?: string) => void;
|
|
162
162
|
}
|
|
163
163
|
declare const configSchema: z.ZodObject<{
|
|
164
|
-
db: z.
|
|
164
|
+
db: z.ZodCustom<Db, Db>;
|
|
165
165
|
issuer: z.ZodString;
|
|
166
|
-
/** PEM PKCS8 private key (Ed25519 or RSA). Required, min 32 bytes. */
|
|
167
166
|
jwtPrivateKey: z.ZodString;
|
|
168
|
-
/** 32-byte AES key, raw string or base64. Required. */
|
|
169
167
|
encryptionKey: z.ZodString;
|
|
170
168
|
keyId: z.ZodDefault<z.ZodString>;
|
|
171
|
-
userAdapter: z.
|
|
172
|
-
smsProvider: z.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
hooks: z.ZodOptional<z.ZodType<Hooks, z.ZodTypeDef, Hooks>>;
|
|
179
|
-
clock: z.ZodOptional<z.ZodType<Clock, z.ZodTypeDef, Clock>>;
|
|
169
|
+
userAdapter: z.ZodCustom<UserAdapter, UserAdapter>;
|
|
170
|
+
smsProvider: z.ZodCustom<SmsProvider, SmsProvider>;
|
|
171
|
+
emailProvider: z.ZodOptional<z.ZodCustom<EmailProvider, EmailProvider>>;
|
|
172
|
+
client: z.ZodOptional<z.ZodCustom<MongoClient, MongoClient>>;
|
|
173
|
+
logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
|
|
174
|
+
hooks: z.ZodOptional<z.ZodCustom<Hooks, Hooks>>;
|
|
175
|
+
clock: z.ZodOptional<z.ZodCustom<Clock, Clock>>;
|
|
180
176
|
collectionPrefix: z.ZodDefault<z.ZodString>;
|
|
181
|
-
/**
|
|
182
|
-
* Passkeys (WebAuthn) as a second step. `rpID` is the site's domain (e.g. "childmatch.com",
|
|
183
|
-
* "localhost"); `origins` are the exact browser origins allowed (e.g. "https://app.childmatch.com").
|
|
184
|
-
* Omit to turn passkeys off.
|
|
185
|
-
*/
|
|
186
177
|
passkeys: z.ZodOptional<z.ZodObject<{
|
|
187
178
|
rpID: z.ZodString;
|
|
188
179
|
rpName: z.ZodString;
|
|
189
|
-
origins: z.ZodArray<z.ZodString
|
|
190
|
-
},
|
|
191
|
-
|
|
192
|
-
rpName: string;
|
|
193
|
-
origins: string[];
|
|
194
|
-
}, {
|
|
195
|
-
rpID: string;
|
|
196
|
-
rpName: string;
|
|
197
|
-
origins: string[];
|
|
198
|
-
}>>;
|
|
199
|
-
/**
|
|
200
|
-
* Allow POST /auth/login/start: sign in with the identifier and a verification method only
|
|
201
|
-
* (no password). Single-factor — enable only for apps that already sign in by code. Pass a
|
|
202
|
-
* function to allow it per request, e.g. only for `type: "badge"`.
|
|
203
|
-
*/
|
|
204
|
-
passwordlessLogin: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodType<(input: {
|
|
180
|
+
origins: z.ZodArray<z.ZodString>;
|
|
181
|
+
}, z.core.$strip>>;
|
|
182
|
+
passwordlessLogin: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
|
|
205
183
|
username: string;
|
|
206
184
|
type?: string;
|
|
207
|
-
}) => boolean | Promise<boolean>,
|
|
185
|
+
}) => boolean | Promise<boolean>, (input: {
|
|
208
186
|
username: string;
|
|
209
187
|
type?: string;
|
|
210
188
|
}) => boolean | Promise<boolean>>]>>;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
twoStepEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
217
|
-
/** 2-Step Verification state for users who have not chosen one yet. */
|
|
189
|
+
twoStepEnabled: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
|
|
190
|
+
userId: string;
|
|
191
|
+
}) => boolean | Promise<boolean>, (input: {
|
|
192
|
+
userId: string;
|
|
193
|
+
}) => boolean | Promise<boolean>>]>>;
|
|
218
194
|
twoStepDefault: z.ZodDefault<z.ZodBoolean>;
|
|
219
|
-
limits: z.
|
|
220
|
-
/** Failed passwords before lockout (BR-2). */
|
|
195
|
+
limits: z.ZodPrefault<z.ZodObject<{
|
|
221
196
|
loginMaxAttempts: z.ZodDefault<z.ZodNumber>;
|
|
222
|
-
/** Window for failed-login counting, minutes (BR-2). */
|
|
223
197
|
loginWindowMin: z.ZodDefault<z.ZodNumber>;
|
|
224
|
-
/** Lockout duration, minutes (BR-2, BR-9). */
|
|
225
198
|
lockMinutes: z.ZodDefault<z.ZodNumber>;
|
|
226
|
-
/** Min seconds between SMS sends on one challenge (BR-6). */
|
|
227
199
|
smsResendSec: z.ZodDefault<z.ZodNumber>;
|
|
228
|
-
/** Max SMS sends per challenge (BR-6). */
|
|
229
200
|
smsMaxPerChallenge: z.ZodDefault<z.ZodNumber>;
|
|
230
|
-
/** Max SMS sends per user per hour (BR-6). */
|
|
231
201
|
smsMaxPerUserHour: z.ZodDefault<z.ZodNumber>;
|
|
232
|
-
/** Wrong codes per challenge before lockout (BR-9). */
|
|
233
202
|
mfaMaxAttempts: z.ZodDefault<z.ZodNumber>;
|
|
234
|
-
/** Max verification methods per user (BR-16). */
|
|
235
203
|
maxMethods: z.ZodDefault<z.ZodNumber>;
|
|
236
|
-
/** Per-IP login requests per minute (NFR-B4). */
|
|
237
204
|
loginIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
238
|
-
/** Per-IP MFA verify requests per minute (NFR-B4). */
|
|
239
205
|
verifyIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
240
|
-
/** Per-IP step-up requests per minute (NFR-B4). */
|
|
241
206
|
stepUpIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
242
|
-
},
|
|
243
|
-
loginMaxAttempts: number;
|
|
244
|
-
loginWindowMin: number;
|
|
245
|
-
lockMinutes: number;
|
|
246
|
-
smsResendSec: number;
|
|
247
|
-
smsMaxPerChallenge: number;
|
|
248
|
-
smsMaxPerUserHour: number;
|
|
249
|
-
mfaMaxAttempts: number;
|
|
250
|
-
maxMethods: number;
|
|
251
|
-
loginIpPerMin: number;
|
|
252
|
-
verifyIpPerMin: number;
|
|
253
|
-
stepUpIpPerMin: number;
|
|
254
|
-
}, {
|
|
255
|
-
loginMaxAttempts?: number | undefined;
|
|
256
|
-
loginWindowMin?: number | undefined;
|
|
257
|
-
lockMinutes?: number | undefined;
|
|
258
|
-
smsResendSec?: number | undefined;
|
|
259
|
-
smsMaxPerChallenge?: number | undefined;
|
|
260
|
-
smsMaxPerUserHour?: number | undefined;
|
|
261
|
-
mfaMaxAttempts?: number | undefined;
|
|
262
|
-
maxMethods?: number | undefined;
|
|
263
|
-
loginIpPerMin?: number | undefined;
|
|
264
|
-
verifyIpPerMin?: number | undefined;
|
|
265
|
-
stepUpIpPerMin?: number | undefined;
|
|
266
|
-
}>>;
|
|
267
|
-
/**
|
|
268
|
-
* Set false to turn off every RATE_LIMITED check: the per-IP limits on login / code
|
|
269
|
-
* verify / send / step-up and the code-send cooldown and caps. Account lockouts after
|
|
270
|
-
* failed passwords or codes (LOCKED) still apply.
|
|
271
|
-
*/
|
|
207
|
+
}, z.core.$strip>>;
|
|
272
208
|
rateLimits: z.ZodDefault<z.ZodBoolean>;
|
|
273
|
-
argon2: z.
|
|
209
|
+
argon2: z.ZodPrefault<z.ZodObject<{
|
|
274
210
|
memoryKiB: z.ZodDefault<z.ZodNumber>;
|
|
275
211
|
iterations: z.ZodDefault<z.ZodNumber>;
|
|
276
212
|
parallelism: z.ZodDefault<z.ZodNumber>;
|
|
277
|
-
},
|
|
278
|
-
|
|
279
|
-
iterations: number;
|
|
280
|
-
parallelism: number;
|
|
281
|
-
}, {
|
|
282
|
-
memoryKiB?: number | undefined;
|
|
283
|
-
iterations?: number | undefined;
|
|
284
|
-
parallelism?: number | undefined;
|
|
285
|
-
}>>;
|
|
286
|
-
cookies: z.ZodDefault<z.ZodObject<{
|
|
213
|
+
}, z.core.$strip>>;
|
|
214
|
+
cookies: z.ZodPrefault<z.ZodObject<{
|
|
287
215
|
secure: z.ZodDefault<z.ZodBoolean>;
|
|
288
216
|
domain: z.ZodOptional<z.ZodString>;
|
|
289
|
-
sameSite: z.ZodDefault<z.ZodEnum<
|
|
217
|
+
sameSite: z.ZodDefault<z.ZodEnum<{
|
|
218
|
+
lax: "lax";
|
|
219
|
+
strict: "strict";
|
|
220
|
+
none: "none";
|
|
221
|
+
}>>;
|
|
290
222
|
path: z.ZodDefault<z.ZodString>;
|
|
291
|
-
},
|
|
292
|
-
|
|
293
|
-
secure: boolean;
|
|
294
|
-
sameSite: "lax" | "strict" | "none";
|
|
295
|
-
domain?: string | undefined;
|
|
296
|
-
}, {
|
|
297
|
-
path?: string | undefined;
|
|
298
|
-
secure?: boolean | undefined;
|
|
299
|
-
domain?: string | undefined;
|
|
300
|
-
sameSite?: "lax" | "strict" | "none" | undefined;
|
|
301
|
-
}>>;
|
|
302
|
-
ttl: z.ZodDefault<z.ZodObject<{
|
|
223
|
+
}, z.core.$strip>>;
|
|
224
|
+
ttl: z.ZodPrefault<z.ZodObject<{
|
|
303
225
|
accessTokenSec: z.ZodDefault<z.ZodNumber>;
|
|
304
226
|
refreshTokenDays: z.ZodDefault<z.ZodNumber>;
|
|
305
227
|
trustedDeviceDays: z.ZodDefault<z.ZodNumber>;
|
|
@@ -307,146 +229,9 @@ declare const configSchema: z.ZodObject<{
|
|
|
307
229
|
stepUpSec: z.ZodDefault<z.ZodNumber>;
|
|
308
230
|
pendingMethodMin: z.ZodDefault<z.ZodNumber>;
|
|
309
231
|
auditDays: z.ZodDefault<z.ZodNumber>;
|
|
310
|
-
},
|
|
311
|
-
accessTokenSec: number;
|
|
312
|
-
refreshTokenDays: number;
|
|
313
|
-
trustedDeviceDays: number;
|
|
314
|
-
challengeSec: number;
|
|
315
|
-
stepUpSec: number;
|
|
316
|
-
pendingMethodMin: number;
|
|
317
|
-
auditDays: number;
|
|
318
|
-
}, {
|
|
319
|
-
accessTokenSec?: number | undefined;
|
|
320
|
-
refreshTokenDays?: number | undefined;
|
|
321
|
-
trustedDeviceDays?: number | undefined;
|
|
322
|
-
challengeSec?: number | undefined;
|
|
323
|
-
stepUpSec?: number | undefined;
|
|
324
|
-
pendingMethodMin?: number | undefined;
|
|
325
|
-
auditDays?: number | undefined;
|
|
326
|
-
}>>;
|
|
327
|
-
/** Serve GET /auth/openapi.json (A.7 docs). */
|
|
232
|
+
}, z.core.$strip>>;
|
|
328
233
|
exposeDocs: z.ZodDefault<z.ZodBoolean>;
|
|
329
|
-
},
|
|
330
|
-
db: Db;
|
|
331
|
-
issuer: string;
|
|
332
|
-
jwtPrivateKey: string;
|
|
333
|
-
encryptionKey: string;
|
|
334
|
-
keyId: string;
|
|
335
|
-
userAdapter: UserAdapter;
|
|
336
|
-
smsProvider: SmsProvider;
|
|
337
|
-
collectionPrefix: string;
|
|
338
|
-
passwordlessLogin: boolean | ((input: {
|
|
339
|
-
username: string;
|
|
340
|
-
type?: string;
|
|
341
|
-
}) => boolean | Promise<boolean>);
|
|
342
|
-
twoStepEnabled: boolean;
|
|
343
|
-
twoStepDefault: boolean;
|
|
344
|
-
limits: {
|
|
345
|
-
loginMaxAttempts: number;
|
|
346
|
-
loginWindowMin: number;
|
|
347
|
-
lockMinutes: number;
|
|
348
|
-
smsResendSec: number;
|
|
349
|
-
smsMaxPerChallenge: number;
|
|
350
|
-
smsMaxPerUserHour: number;
|
|
351
|
-
mfaMaxAttempts: number;
|
|
352
|
-
maxMethods: number;
|
|
353
|
-
loginIpPerMin: number;
|
|
354
|
-
verifyIpPerMin: number;
|
|
355
|
-
stepUpIpPerMin: number;
|
|
356
|
-
};
|
|
357
|
-
rateLimits: boolean;
|
|
358
|
-
argon2: {
|
|
359
|
-
memoryKiB: number;
|
|
360
|
-
iterations: number;
|
|
361
|
-
parallelism: number;
|
|
362
|
-
};
|
|
363
|
-
cookies: {
|
|
364
|
-
path: string;
|
|
365
|
-
secure: boolean;
|
|
366
|
-
sameSite: "lax" | "strict" | "none";
|
|
367
|
-
domain?: string | undefined;
|
|
368
|
-
};
|
|
369
|
-
ttl: {
|
|
370
|
-
accessTokenSec: number;
|
|
371
|
-
refreshTokenDays: number;
|
|
372
|
-
trustedDeviceDays: number;
|
|
373
|
-
challengeSec: number;
|
|
374
|
-
stepUpSec: number;
|
|
375
|
-
pendingMethodMin: number;
|
|
376
|
-
auditDays: number;
|
|
377
|
-
};
|
|
378
|
-
exposeDocs: boolean;
|
|
379
|
-
emailProvider?: EmailProvider | undefined;
|
|
380
|
-
client?: MongoClient | undefined;
|
|
381
|
-
logger?: Logger | undefined;
|
|
382
|
-
hooks?: Hooks | undefined;
|
|
383
|
-
clock?: Clock | undefined;
|
|
384
|
-
passkeys?: {
|
|
385
|
-
rpID: string;
|
|
386
|
-
rpName: string;
|
|
387
|
-
origins: string[];
|
|
388
|
-
} | undefined;
|
|
389
|
-
}, {
|
|
390
|
-
db: Db;
|
|
391
|
-
issuer: string;
|
|
392
|
-
jwtPrivateKey: string;
|
|
393
|
-
encryptionKey: string;
|
|
394
|
-
userAdapter: UserAdapter;
|
|
395
|
-
smsProvider: SmsProvider;
|
|
396
|
-
keyId?: string | undefined;
|
|
397
|
-
emailProvider?: EmailProvider | undefined;
|
|
398
|
-
client?: MongoClient | undefined;
|
|
399
|
-
logger?: Logger | undefined;
|
|
400
|
-
hooks?: Hooks | undefined;
|
|
401
|
-
clock?: Clock | undefined;
|
|
402
|
-
collectionPrefix?: string | undefined;
|
|
403
|
-
passkeys?: {
|
|
404
|
-
rpID: string;
|
|
405
|
-
rpName: string;
|
|
406
|
-
origins: string[];
|
|
407
|
-
} | undefined;
|
|
408
|
-
passwordlessLogin?: boolean | ((input: {
|
|
409
|
-
username: string;
|
|
410
|
-
type?: string;
|
|
411
|
-
}) => boolean | Promise<boolean>) | undefined;
|
|
412
|
-
twoStepEnabled?: boolean | undefined;
|
|
413
|
-
twoStepDefault?: boolean | undefined;
|
|
414
|
-
limits?: {
|
|
415
|
-
loginMaxAttempts?: number | undefined;
|
|
416
|
-
loginWindowMin?: number | undefined;
|
|
417
|
-
lockMinutes?: number | undefined;
|
|
418
|
-
smsResendSec?: number | undefined;
|
|
419
|
-
smsMaxPerChallenge?: number | undefined;
|
|
420
|
-
smsMaxPerUserHour?: number | undefined;
|
|
421
|
-
mfaMaxAttempts?: number | undefined;
|
|
422
|
-
maxMethods?: number | undefined;
|
|
423
|
-
loginIpPerMin?: number | undefined;
|
|
424
|
-
verifyIpPerMin?: number | undefined;
|
|
425
|
-
stepUpIpPerMin?: number | undefined;
|
|
426
|
-
} | undefined;
|
|
427
|
-
rateLimits?: boolean | undefined;
|
|
428
|
-
argon2?: {
|
|
429
|
-
memoryKiB?: number | undefined;
|
|
430
|
-
iterations?: number | undefined;
|
|
431
|
-
parallelism?: number | undefined;
|
|
432
|
-
} | undefined;
|
|
433
|
-
cookies?: {
|
|
434
|
-
path?: string | undefined;
|
|
435
|
-
secure?: boolean | undefined;
|
|
436
|
-
domain?: string | undefined;
|
|
437
|
-
sameSite?: "lax" | "strict" | "none" | undefined;
|
|
438
|
-
} | undefined;
|
|
439
|
-
ttl?: {
|
|
440
|
-
accessTokenSec?: number | undefined;
|
|
441
|
-
refreshTokenDays?: number | undefined;
|
|
442
|
-
trustedDeviceDays?: number | undefined;
|
|
443
|
-
challengeSec?: number | undefined;
|
|
444
|
-
stepUpSec?: number | undefined;
|
|
445
|
-
pendingMethodMin?: number | undefined;
|
|
446
|
-
auditDays?: number | undefined;
|
|
447
|
-
} | undefined;
|
|
448
|
-
exposeDocs?: boolean | undefined;
|
|
449
|
-
}>;
|
|
234
|
+
}, z.core.$strip>;
|
|
450
235
|
type AuthConfigInput = z.input<typeof configSchema>;
|
|
451
236
|
type AuthConfig = z.output<typeof configSchema> & {
|
|
452
237
|
clock: Clock;
|
package/dist/index.d.ts
CHANGED
|
@@ -161,145 +161,67 @@ interface Logger {
|
|
|
161
161
|
error: (obj: object, msg?: string) => void;
|
|
162
162
|
}
|
|
163
163
|
declare const configSchema: z.ZodObject<{
|
|
164
|
-
db: z.
|
|
164
|
+
db: z.ZodCustom<Db, Db>;
|
|
165
165
|
issuer: z.ZodString;
|
|
166
|
-
/** PEM PKCS8 private key (Ed25519 or RSA). Required, min 32 bytes. */
|
|
167
166
|
jwtPrivateKey: z.ZodString;
|
|
168
|
-
/** 32-byte AES key, raw string or base64. Required. */
|
|
169
167
|
encryptionKey: z.ZodString;
|
|
170
168
|
keyId: z.ZodDefault<z.ZodString>;
|
|
171
|
-
userAdapter: z.
|
|
172
|
-
smsProvider: z.
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
hooks: z.ZodOptional<z.ZodType<Hooks, z.ZodTypeDef, Hooks>>;
|
|
179
|
-
clock: z.ZodOptional<z.ZodType<Clock, z.ZodTypeDef, Clock>>;
|
|
169
|
+
userAdapter: z.ZodCustom<UserAdapter, UserAdapter>;
|
|
170
|
+
smsProvider: z.ZodCustom<SmsProvider, SmsProvider>;
|
|
171
|
+
emailProvider: z.ZodOptional<z.ZodCustom<EmailProvider, EmailProvider>>;
|
|
172
|
+
client: z.ZodOptional<z.ZodCustom<MongoClient, MongoClient>>;
|
|
173
|
+
logger: z.ZodOptional<z.ZodCustom<Logger, Logger>>;
|
|
174
|
+
hooks: z.ZodOptional<z.ZodCustom<Hooks, Hooks>>;
|
|
175
|
+
clock: z.ZodOptional<z.ZodCustom<Clock, Clock>>;
|
|
180
176
|
collectionPrefix: z.ZodDefault<z.ZodString>;
|
|
181
|
-
/**
|
|
182
|
-
* Passkeys (WebAuthn) as a second step. `rpID` is the site's domain (e.g. "childmatch.com",
|
|
183
|
-
* "localhost"); `origins` are the exact browser origins allowed (e.g. "https://app.childmatch.com").
|
|
184
|
-
* Omit to turn passkeys off.
|
|
185
|
-
*/
|
|
186
177
|
passkeys: z.ZodOptional<z.ZodObject<{
|
|
187
178
|
rpID: z.ZodString;
|
|
188
179
|
rpName: z.ZodString;
|
|
189
|
-
origins: z.ZodArray<z.ZodString
|
|
190
|
-
},
|
|
191
|
-
|
|
192
|
-
rpName: string;
|
|
193
|
-
origins: string[];
|
|
194
|
-
}, {
|
|
195
|
-
rpID: string;
|
|
196
|
-
rpName: string;
|
|
197
|
-
origins: string[];
|
|
198
|
-
}>>;
|
|
199
|
-
/**
|
|
200
|
-
* Allow POST /auth/login/start: sign in with the identifier and a verification method only
|
|
201
|
-
* (no password). Single-factor — enable only for apps that already sign in by code. Pass a
|
|
202
|
-
* function to allow it per request, e.g. only for `type: "badge"`.
|
|
203
|
-
*/
|
|
204
|
-
passwordlessLogin: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodType<(input: {
|
|
180
|
+
origins: z.ZodArray<z.ZodString>;
|
|
181
|
+
}, z.core.$strip>>;
|
|
182
|
+
passwordlessLogin: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
|
|
205
183
|
username: string;
|
|
206
184
|
type?: string;
|
|
207
|
-
}) => boolean | Promise<boolean>,
|
|
185
|
+
}) => boolean | Promise<boolean>, (input: {
|
|
208
186
|
username: string;
|
|
209
187
|
type?: string;
|
|
210
188
|
}) => boolean | Promise<boolean>>]>>;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
twoStepEnabled: z.ZodDefault<z.ZodBoolean>;
|
|
217
|
-
/** 2-Step Verification state for users who have not chosen one yet. */
|
|
189
|
+
twoStepEnabled: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
|
|
190
|
+
userId: string;
|
|
191
|
+
}) => boolean | Promise<boolean>, (input: {
|
|
192
|
+
userId: string;
|
|
193
|
+
}) => boolean | Promise<boolean>>]>>;
|
|
218
194
|
twoStepDefault: z.ZodDefault<z.ZodBoolean>;
|
|
219
|
-
limits: z.
|
|
220
|
-
/** Failed passwords before lockout (BR-2). */
|
|
195
|
+
limits: z.ZodPrefault<z.ZodObject<{
|
|
221
196
|
loginMaxAttempts: z.ZodDefault<z.ZodNumber>;
|
|
222
|
-
/** Window for failed-login counting, minutes (BR-2). */
|
|
223
197
|
loginWindowMin: z.ZodDefault<z.ZodNumber>;
|
|
224
|
-
/** Lockout duration, minutes (BR-2, BR-9). */
|
|
225
198
|
lockMinutes: z.ZodDefault<z.ZodNumber>;
|
|
226
|
-
/** Min seconds between SMS sends on one challenge (BR-6). */
|
|
227
199
|
smsResendSec: z.ZodDefault<z.ZodNumber>;
|
|
228
|
-
/** Max SMS sends per challenge (BR-6). */
|
|
229
200
|
smsMaxPerChallenge: z.ZodDefault<z.ZodNumber>;
|
|
230
|
-
/** Max SMS sends per user per hour (BR-6). */
|
|
231
201
|
smsMaxPerUserHour: z.ZodDefault<z.ZodNumber>;
|
|
232
|
-
/** Wrong codes per challenge before lockout (BR-9). */
|
|
233
202
|
mfaMaxAttempts: z.ZodDefault<z.ZodNumber>;
|
|
234
|
-
/** Max verification methods per user (BR-16). */
|
|
235
203
|
maxMethods: z.ZodDefault<z.ZodNumber>;
|
|
236
|
-
/** Per-IP login requests per minute (NFR-B4). */
|
|
237
204
|
loginIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
238
|
-
/** Per-IP MFA verify requests per minute (NFR-B4). */
|
|
239
205
|
verifyIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
240
|
-
/** Per-IP step-up requests per minute (NFR-B4). */
|
|
241
206
|
stepUpIpPerMin: z.ZodDefault<z.ZodNumber>;
|
|
242
|
-
},
|
|
243
|
-
loginMaxAttempts: number;
|
|
244
|
-
loginWindowMin: number;
|
|
245
|
-
lockMinutes: number;
|
|
246
|
-
smsResendSec: number;
|
|
247
|
-
smsMaxPerChallenge: number;
|
|
248
|
-
smsMaxPerUserHour: number;
|
|
249
|
-
mfaMaxAttempts: number;
|
|
250
|
-
maxMethods: number;
|
|
251
|
-
loginIpPerMin: number;
|
|
252
|
-
verifyIpPerMin: number;
|
|
253
|
-
stepUpIpPerMin: number;
|
|
254
|
-
}, {
|
|
255
|
-
loginMaxAttempts?: number | undefined;
|
|
256
|
-
loginWindowMin?: number | undefined;
|
|
257
|
-
lockMinutes?: number | undefined;
|
|
258
|
-
smsResendSec?: number | undefined;
|
|
259
|
-
smsMaxPerChallenge?: number | undefined;
|
|
260
|
-
smsMaxPerUserHour?: number | undefined;
|
|
261
|
-
mfaMaxAttempts?: number | undefined;
|
|
262
|
-
maxMethods?: number | undefined;
|
|
263
|
-
loginIpPerMin?: number | undefined;
|
|
264
|
-
verifyIpPerMin?: number | undefined;
|
|
265
|
-
stepUpIpPerMin?: number | undefined;
|
|
266
|
-
}>>;
|
|
267
|
-
/**
|
|
268
|
-
* Set false to turn off every RATE_LIMITED check: the per-IP limits on login / code
|
|
269
|
-
* verify / send / step-up and the code-send cooldown and caps. Account lockouts after
|
|
270
|
-
* failed passwords or codes (LOCKED) still apply.
|
|
271
|
-
*/
|
|
207
|
+
}, z.core.$strip>>;
|
|
272
208
|
rateLimits: z.ZodDefault<z.ZodBoolean>;
|
|
273
|
-
argon2: z.
|
|
209
|
+
argon2: z.ZodPrefault<z.ZodObject<{
|
|
274
210
|
memoryKiB: z.ZodDefault<z.ZodNumber>;
|
|
275
211
|
iterations: z.ZodDefault<z.ZodNumber>;
|
|
276
212
|
parallelism: z.ZodDefault<z.ZodNumber>;
|
|
277
|
-
},
|
|
278
|
-
|
|
279
|
-
iterations: number;
|
|
280
|
-
parallelism: number;
|
|
281
|
-
}, {
|
|
282
|
-
memoryKiB?: number | undefined;
|
|
283
|
-
iterations?: number | undefined;
|
|
284
|
-
parallelism?: number | undefined;
|
|
285
|
-
}>>;
|
|
286
|
-
cookies: z.ZodDefault<z.ZodObject<{
|
|
213
|
+
}, z.core.$strip>>;
|
|
214
|
+
cookies: z.ZodPrefault<z.ZodObject<{
|
|
287
215
|
secure: z.ZodDefault<z.ZodBoolean>;
|
|
288
216
|
domain: z.ZodOptional<z.ZodString>;
|
|
289
|
-
sameSite: z.ZodDefault<z.ZodEnum<
|
|
217
|
+
sameSite: z.ZodDefault<z.ZodEnum<{
|
|
218
|
+
lax: "lax";
|
|
219
|
+
strict: "strict";
|
|
220
|
+
none: "none";
|
|
221
|
+
}>>;
|
|
290
222
|
path: z.ZodDefault<z.ZodString>;
|
|
291
|
-
},
|
|
292
|
-
|
|
293
|
-
secure: boolean;
|
|
294
|
-
sameSite: "lax" | "strict" | "none";
|
|
295
|
-
domain?: string | undefined;
|
|
296
|
-
}, {
|
|
297
|
-
path?: string | undefined;
|
|
298
|
-
secure?: boolean | undefined;
|
|
299
|
-
domain?: string | undefined;
|
|
300
|
-
sameSite?: "lax" | "strict" | "none" | undefined;
|
|
301
|
-
}>>;
|
|
302
|
-
ttl: z.ZodDefault<z.ZodObject<{
|
|
223
|
+
}, z.core.$strip>>;
|
|
224
|
+
ttl: z.ZodPrefault<z.ZodObject<{
|
|
303
225
|
accessTokenSec: z.ZodDefault<z.ZodNumber>;
|
|
304
226
|
refreshTokenDays: z.ZodDefault<z.ZodNumber>;
|
|
305
227
|
trustedDeviceDays: z.ZodDefault<z.ZodNumber>;
|
|
@@ -307,146 +229,9 @@ declare const configSchema: z.ZodObject<{
|
|
|
307
229
|
stepUpSec: z.ZodDefault<z.ZodNumber>;
|
|
308
230
|
pendingMethodMin: z.ZodDefault<z.ZodNumber>;
|
|
309
231
|
auditDays: z.ZodDefault<z.ZodNumber>;
|
|
310
|
-
},
|
|
311
|
-
accessTokenSec: number;
|
|
312
|
-
refreshTokenDays: number;
|
|
313
|
-
trustedDeviceDays: number;
|
|
314
|
-
challengeSec: number;
|
|
315
|
-
stepUpSec: number;
|
|
316
|
-
pendingMethodMin: number;
|
|
317
|
-
auditDays: number;
|
|
318
|
-
}, {
|
|
319
|
-
accessTokenSec?: number | undefined;
|
|
320
|
-
refreshTokenDays?: number | undefined;
|
|
321
|
-
trustedDeviceDays?: number | undefined;
|
|
322
|
-
challengeSec?: number | undefined;
|
|
323
|
-
stepUpSec?: number | undefined;
|
|
324
|
-
pendingMethodMin?: number | undefined;
|
|
325
|
-
auditDays?: number | undefined;
|
|
326
|
-
}>>;
|
|
327
|
-
/** Serve GET /auth/openapi.json (A.7 docs). */
|
|
232
|
+
}, z.core.$strip>>;
|
|
328
233
|
exposeDocs: z.ZodDefault<z.ZodBoolean>;
|
|
329
|
-
},
|
|
330
|
-
db: Db;
|
|
331
|
-
issuer: string;
|
|
332
|
-
jwtPrivateKey: string;
|
|
333
|
-
encryptionKey: string;
|
|
334
|
-
keyId: string;
|
|
335
|
-
userAdapter: UserAdapter;
|
|
336
|
-
smsProvider: SmsProvider;
|
|
337
|
-
collectionPrefix: string;
|
|
338
|
-
passwordlessLogin: boolean | ((input: {
|
|
339
|
-
username: string;
|
|
340
|
-
type?: string;
|
|
341
|
-
}) => boolean | Promise<boolean>);
|
|
342
|
-
twoStepEnabled: boolean;
|
|
343
|
-
twoStepDefault: boolean;
|
|
344
|
-
limits: {
|
|
345
|
-
loginMaxAttempts: number;
|
|
346
|
-
loginWindowMin: number;
|
|
347
|
-
lockMinutes: number;
|
|
348
|
-
smsResendSec: number;
|
|
349
|
-
smsMaxPerChallenge: number;
|
|
350
|
-
smsMaxPerUserHour: number;
|
|
351
|
-
mfaMaxAttempts: number;
|
|
352
|
-
maxMethods: number;
|
|
353
|
-
loginIpPerMin: number;
|
|
354
|
-
verifyIpPerMin: number;
|
|
355
|
-
stepUpIpPerMin: number;
|
|
356
|
-
};
|
|
357
|
-
rateLimits: boolean;
|
|
358
|
-
argon2: {
|
|
359
|
-
memoryKiB: number;
|
|
360
|
-
iterations: number;
|
|
361
|
-
parallelism: number;
|
|
362
|
-
};
|
|
363
|
-
cookies: {
|
|
364
|
-
path: string;
|
|
365
|
-
secure: boolean;
|
|
366
|
-
sameSite: "lax" | "strict" | "none";
|
|
367
|
-
domain?: string | undefined;
|
|
368
|
-
};
|
|
369
|
-
ttl: {
|
|
370
|
-
accessTokenSec: number;
|
|
371
|
-
refreshTokenDays: number;
|
|
372
|
-
trustedDeviceDays: number;
|
|
373
|
-
challengeSec: number;
|
|
374
|
-
stepUpSec: number;
|
|
375
|
-
pendingMethodMin: number;
|
|
376
|
-
auditDays: number;
|
|
377
|
-
};
|
|
378
|
-
exposeDocs: boolean;
|
|
379
|
-
emailProvider?: EmailProvider | undefined;
|
|
380
|
-
client?: MongoClient | undefined;
|
|
381
|
-
logger?: Logger | undefined;
|
|
382
|
-
hooks?: Hooks | undefined;
|
|
383
|
-
clock?: Clock | undefined;
|
|
384
|
-
passkeys?: {
|
|
385
|
-
rpID: string;
|
|
386
|
-
rpName: string;
|
|
387
|
-
origins: string[];
|
|
388
|
-
} | undefined;
|
|
389
|
-
}, {
|
|
390
|
-
db: Db;
|
|
391
|
-
issuer: string;
|
|
392
|
-
jwtPrivateKey: string;
|
|
393
|
-
encryptionKey: string;
|
|
394
|
-
userAdapter: UserAdapter;
|
|
395
|
-
smsProvider: SmsProvider;
|
|
396
|
-
keyId?: string | undefined;
|
|
397
|
-
emailProvider?: EmailProvider | undefined;
|
|
398
|
-
client?: MongoClient | undefined;
|
|
399
|
-
logger?: Logger | undefined;
|
|
400
|
-
hooks?: Hooks | undefined;
|
|
401
|
-
clock?: Clock | undefined;
|
|
402
|
-
collectionPrefix?: string | undefined;
|
|
403
|
-
passkeys?: {
|
|
404
|
-
rpID: string;
|
|
405
|
-
rpName: string;
|
|
406
|
-
origins: string[];
|
|
407
|
-
} | undefined;
|
|
408
|
-
passwordlessLogin?: boolean | ((input: {
|
|
409
|
-
username: string;
|
|
410
|
-
type?: string;
|
|
411
|
-
}) => boolean | Promise<boolean>) | undefined;
|
|
412
|
-
twoStepEnabled?: boolean | undefined;
|
|
413
|
-
twoStepDefault?: boolean | undefined;
|
|
414
|
-
limits?: {
|
|
415
|
-
loginMaxAttempts?: number | undefined;
|
|
416
|
-
loginWindowMin?: number | undefined;
|
|
417
|
-
lockMinutes?: number | undefined;
|
|
418
|
-
smsResendSec?: number | undefined;
|
|
419
|
-
smsMaxPerChallenge?: number | undefined;
|
|
420
|
-
smsMaxPerUserHour?: number | undefined;
|
|
421
|
-
mfaMaxAttempts?: number | undefined;
|
|
422
|
-
maxMethods?: number | undefined;
|
|
423
|
-
loginIpPerMin?: number | undefined;
|
|
424
|
-
verifyIpPerMin?: number | undefined;
|
|
425
|
-
stepUpIpPerMin?: number | undefined;
|
|
426
|
-
} | undefined;
|
|
427
|
-
rateLimits?: boolean | undefined;
|
|
428
|
-
argon2?: {
|
|
429
|
-
memoryKiB?: number | undefined;
|
|
430
|
-
iterations?: number | undefined;
|
|
431
|
-
parallelism?: number | undefined;
|
|
432
|
-
} | undefined;
|
|
433
|
-
cookies?: {
|
|
434
|
-
path?: string | undefined;
|
|
435
|
-
secure?: boolean | undefined;
|
|
436
|
-
domain?: string | undefined;
|
|
437
|
-
sameSite?: "lax" | "strict" | "none" | undefined;
|
|
438
|
-
} | undefined;
|
|
439
|
-
ttl?: {
|
|
440
|
-
accessTokenSec?: number | undefined;
|
|
441
|
-
refreshTokenDays?: number | undefined;
|
|
442
|
-
trustedDeviceDays?: number | undefined;
|
|
443
|
-
challengeSec?: number | undefined;
|
|
444
|
-
stepUpSec?: number | undefined;
|
|
445
|
-
pendingMethodMin?: number | undefined;
|
|
446
|
-
auditDays?: number | undefined;
|
|
447
|
-
} | undefined;
|
|
448
|
-
exposeDocs?: boolean | undefined;
|
|
449
|
-
}>;
|
|
234
|
+
}, z.core.$strip>;
|
|
450
235
|
type AuthConfigInput = z.input<typeof configSchema>;
|
|
451
236
|
type AuthConfig = z.output<typeof configSchema> & {
|
|
452
237
|
clock: Clock;
|