@cairs-npm/express-auth-2fa 0.1.4 → 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.d.cts CHANGED
@@ -161,150 +161,67 @@ interface Logger {
161
161
  error: (obj: object, msg?: string) => void;
162
162
  }
163
163
  declare const configSchema: z.ZodObject<{
164
- db: z.ZodType<Db, z.ZodTypeDef, Db>;
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.ZodType<UserAdapter, z.ZodTypeDef, UserAdapter>;
172
- smsProvider: z.ZodType<SmsProvider, z.ZodTypeDef, SmsProvider>;
173
- /** Enables the always-present EMAIL method (default for new users). */
174
- emailProvider: z.ZodOptional<z.ZodType<EmailProvider, z.ZodTypeDef, EmailProvider>>;
175
- /** MongoClient for transactions; defaults to the client behind `db`. */
176
- client: z.ZodOptional<z.ZodType<MongoClient, z.ZodTypeDef, MongoClient>>;
177
- logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
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, "many">;
190
- }, "strip", z.ZodTypeAny, {
191
- rpID: string;
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>, z.ZodTypeDef, (input: {
185
+ }) => boolean | Promise<boolean>, (input: {
208
186
  username: string;
209
187
  type?: string;
210
188
  }) => boolean | Promise<boolean>>]>>;
211
- /**
212
- * 2-Step Verification switch above each user's own choice. False: password sign-in never
213
- * asks for a code and the two-step setting can't be turned on. Passwordless sign-in still
214
- * sends a code — it's the only factor there. Pass a function to decide per user, e.g. from
215
- * an organization setting.
216
- */
217
- twoStepEnabled: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodType<(input: {
189
+ twoStepEnabled: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
218
190
  userId: string;
219
- }) => boolean | Promise<boolean>, z.ZodTypeDef, (input: {
191
+ }) => boolean | Promise<boolean>, (input: {
220
192
  userId: string;
221
193
  }) => boolean | Promise<boolean>>]>>;
222
- /** 2-Step Verification state for users who have not chosen one yet. */
223
194
  twoStepDefault: z.ZodDefault<z.ZodBoolean>;
224
- limits: z.ZodDefault<z.ZodObject<{
225
- /** Failed passwords before lockout (BR-2). */
195
+ limits: z.ZodPrefault<z.ZodObject<{
226
196
  loginMaxAttempts: z.ZodDefault<z.ZodNumber>;
227
- /** Window for failed-login counting, minutes (BR-2). */
228
197
  loginWindowMin: z.ZodDefault<z.ZodNumber>;
229
- /** Lockout duration, minutes (BR-2, BR-9). */
230
198
  lockMinutes: z.ZodDefault<z.ZodNumber>;
231
- /** Min seconds between SMS sends on one challenge (BR-6). */
232
199
  smsResendSec: z.ZodDefault<z.ZodNumber>;
233
- /** Max SMS sends per challenge (BR-6). */
234
200
  smsMaxPerChallenge: z.ZodDefault<z.ZodNumber>;
235
- /** Max SMS sends per user per hour (BR-6). */
236
201
  smsMaxPerUserHour: z.ZodDefault<z.ZodNumber>;
237
- /** Wrong codes per challenge before lockout (BR-9). */
238
202
  mfaMaxAttempts: z.ZodDefault<z.ZodNumber>;
239
- /** Max verification methods per user (BR-16). */
240
203
  maxMethods: z.ZodDefault<z.ZodNumber>;
241
- /** Per-IP login requests per minute (NFR-B4). */
242
204
  loginIpPerMin: z.ZodDefault<z.ZodNumber>;
243
- /** Per-IP MFA verify requests per minute (NFR-B4). */
244
205
  verifyIpPerMin: z.ZodDefault<z.ZodNumber>;
245
- /** Per-IP step-up requests per minute (NFR-B4). */
246
206
  stepUpIpPerMin: z.ZodDefault<z.ZodNumber>;
247
- }, "strip", z.ZodTypeAny, {
248
- loginMaxAttempts: number;
249
- loginWindowMin: number;
250
- lockMinutes: number;
251
- smsResendSec: number;
252
- smsMaxPerChallenge: number;
253
- smsMaxPerUserHour: number;
254
- mfaMaxAttempts: number;
255
- maxMethods: number;
256
- loginIpPerMin: number;
257
- verifyIpPerMin: number;
258
- stepUpIpPerMin: number;
259
- }, {
260
- loginMaxAttempts?: number | undefined;
261
- loginWindowMin?: number | undefined;
262
- lockMinutes?: number | undefined;
263
- smsResendSec?: number | undefined;
264
- smsMaxPerChallenge?: number | undefined;
265
- smsMaxPerUserHour?: number | undefined;
266
- mfaMaxAttempts?: number | undefined;
267
- maxMethods?: number | undefined;
268
- loginIpPerMin?: number | undefined;
269
- verifyIpPerMin?: number | undefined;
270
- stepUpIpPerMin?: number | undefined;
271
- }>>;
272
- /**
273
- * Set false to turn off every RATE_LIMITED check: the per-IP limits on login / code
274
- * verify / send / step-up and the code-send cooldown and caps. Account lockouts after
275
- * failed passwords or codes (LOCKED) still apply.
276
- */
207
+ }, z.core.$strip>>;
277
208
  rateLimits: z.ZodDefault<z.ZodBoolean>;
278
- argon2: z.ZodDefault<z.ZodObject<{
209
+ argon2: z.ZodPrefault<z.ZodObject<{
279
210
  memoryKiB: z.ZodDefault<z.ZodNumber>;
280
211
  iterations: z.ZodDefault<z.ZodNumber>;
281
212
  parallelism: z.ZodDefault<z.ZodNumber>;
282
- }, "strip", z.ZodTypeAny, {
283
- memoryKiB: number;
284
- iterations: number;
285
- parallelism: number;
286
- }, {
287
- memoryKiB?: number | undefined;
288
- iterations?: number | undefined;
289
- parallelism?: number | undefined;
290
- }>>;
291
- cookies: z.ZodDefault<z.ZodObject<{
213
+ }, z.core.$strip>>;
214
+ cookies: z.ZodPrefault<z.ZodObject<{
292
215
  secure: z.ZodDefault<z.ZodBoolean>;
293
216
  domain: z.ZodOptional<z.ZodString>;
294
- sameSite: z.ZodDefault<z.ZodEnum<["lax", "strict", "none"]>>;
217
+ sameSite: z.ZodDefault<z.ZodEnum<{
218
+ lax: "lax";
219
+ strict: "strict";
220
+ none: "none";
221
+ }>>;
295
222
  path: z.ZodDefault<z.ZodString>;
296
- }, "strip", z.ZodTypeAny, {
297
- path: string;
298
- secure: boolean;
299
- sameSite: "lax" | "strict" | "none";
300
- domain?: string | undefined;
301
- }, {
302
- path?: string | undefined;
303
- secure?: boolean | undefined;
304
- domain?: string | undefined;
305
- sameSite?: "lax" | "strict" | "none" | undefined;
306
- }>>;
307
- ttl: z.ZodDefault<z.ZodObject<{
223
+ }, z.core.$strip>>;
224
+ ttl: z.ZodPrefault<z.ZodObject<{
308
225
  accessTokenSec: z.ZodDefault<z.ZodNumber>;
309
226
  refreshTokenDays: z.ZodDefault<z.ZodNumber>;
310
227
  trustedDeviceDays: z.ZodDefault<z.ZodNumber>;
@@ -312,150 +229,9 @@ declare const configSchema: z.ZodObject<{
312
229
  stepUpSec: z.ZodDefault<z.ZodNumber>;
313
230
  pendingMethodMin: z.ZodDefault<z.ZodNumber>;
314
231
  auditDays: z.ZodDefault<z.ZodNumber>;
315
- }, "strip", z.ZodTypeAny, {
316
- accessTokenSec: number;
317
- refreshTokenDays: number;
318
- trustedDeviceDays: number;
319
- challengeSec: number;
320
- stepUpSec: number;
321
- pendingMethodMin: number;
322
- auditDays: number;
323
- }, {
324
- accessTokenSec?: number | undefined;
325
- refreshTokenDays?: number | undefined;
326
- trustedDeviceDays?: number | undefined;
327
- challengeSec?: number | undefined;
328
- stepUpSec?: number | undefined;
329
- pendingMethodMin?: number | undefined;
330
- auditDays?: number | undefined;
331
- }>>;
332
- /** Serve GET /auth/openapi.json (A.7 docs). */
232
+ }, z.core.$strip>>;
333
233
  exposeDocs: z.ZodDefault<z.ZodBoolean>;
334
- }, "strip", z.ZodTypeAny, {
335
- db: Db;
336
- issuer: string;
337
- jwtPrivateKey: string;
338
- encryptionKey: string;
339
- keyId: string;
340
- userAdapter: UserAdapter;
341
- smsProvider: SmsProvider;
342
- collectionPrefix: string;
343
- passwordlessLogin: boolean | ((input: {
344
- username: string;
345
- type?: string;
346
- }) => boolean | Promise<boolean>);
347
- twoStepEnabled: boolean | ((input: {
348
- userId: string;
349
- }) => boolean | Promise<boolean>);
350
- twoStepDefault: boolean;
351
- limits: {
352
- loginMaxAttempts: number;
353
- loginWindowMin: number;
354
- lockMinutes: number;
355
- smsResendSec: number;
356
- smsMaxPerChallenge: number;
357
- smsMaxPerUserHour: number;
358
- mfaMaxAttempts: number;
359
- maxMethods: number;
360
- loginIpPerMin: number;
361
- verifyIpPerMin: number;
362
- stepUpIpPerMin: number;
363
- };
364
- rateLimits: boolean;
365
- argon2: {
366
- memoryKiB: number;
367
- iterations: number;
368
- parallelism: number;
369
- };
370
- cookies: {
371
- path: string;
372
- secure: boolean;
373
- sameSite: "lax" | "strict" | "none";
374
- domain?: string | undefined;
375
- };
376
- ttl: {
377
- accessTokenSec: number;
378
- refreshTokenDays: number;
379
- trustedDeviceDays: number;
380
- challengeSec: number;
381
- stepUpSec: number;
382
- pendingMethodMin: number;
383
- auditDays: number;
384
- };
385
- exposeDocs: boolean;
386
- emailProvider?: EmailProvider | undefined;
387
- client?: MongoClient | undefined;
388
- logger?: Logger | undefined;
389
- hooks?: Hooks | undefined;
390
- clock?: Clock | undefined;
391
- passkeys?: {
392
- rpID: string;
393
- rpName: string;
394
- origins: string[];
395
- } | undefined;
396
- }, {
397
- db: Db;
398
- issuer: string;
399
- jwtPrivateKey: string;
400
- encryptionKey: string;
401
- userAdapter: UserAdapter;
402
- smsProvider: SmsProvider;
403
- keyId?: string | undefined;
404
- emailProvider?: EmailProvider | undefined;
405
- client?: MongoClient | undefined;
406
- logger?: Logger | undefined;
407
- hooks?: Hooks | undefined;
408
- clock?: Clock | undefined;
409
- collectionPrefix?: string | undefined;
410
- passkeys?: {
411
- rpID: string;
412
- rpName: string;
413
- origins: string[];
414
- } | undefined;
415
- passwordlessLogin?: boolean | ((input: {
416
- username: string;
417
- type?: string;
418
- }) => boolean | Promise<boolean>) | undefined;
419
- twoStepEnabled?: boolean | ((input: {
420
- userId: string;
421
- }) => boolean | Promise<boolean>) | undefined;
422
- twoStepDefault?: boolean | undefined;
423
- limits?: {
424
- loginMaxAttempts?: number | undefined;
425
- loginWindowMin?: number | undefined;
426
- lockMinutes?: number | undefined;
427
- smsResendSec?: number | undefined;
428
- smsMaxPerChallenge?: number | undefined;
429
- smsMaxPerUserHour?: number | undefined;
430
- mfaMaxAttempts?: number | undefined;
431
- maxMethods?: number | undefined;
432
- loginIpPerMin?: number | undefined;
433
- verifyIpPerMin?: number | undefined;
434
- stepUpIpPerMin?: number | undefined;
435
- } | undefined;
436
- rateLimits?: boolean | undefined;
437
- argon2?: {
438
- memoryKiB?: number | undefined;
439
- iterations?: number | undefined;
440
- parallelism?: number | undefined;
441
- } | undefined;
442
- cookies?: {
443
- path?: string | undefined;
444
- secure?: boolean | undefined;
445
- domain?: string | undefined;
446
- sameSite?: "lax" | "strict" | "none" | undefined;
447
- } | undefined;
448
- ttl?: {
449
- accessTokenSec?: number | undefined;
450
- refreshTokenDays?: number | undefined;
451
- trustedDeviceDays?: number | undefined;
452
- challengeSec?: number | undefined;
453
- stepUpSec?: number | undefined;
454
- pendingMethodMin?: number | undefined;
455
- auditDays?: number | undefined;
456
- } | undefined;
457
- exposeDocs?: boolean | undefined;
458
- }>;
234
+ }, z.core.$strip>;
459
235
  type AuthConfigInput = z.input<typeof configSchema>;
460
236
  type AuthConfig = z.output<typeof configSchema> & {
461
237
  clock: Clock;
package/dist/index.d.ts CHANGED
@@ -161,150 +161,67 @@ interface Logger {
161
161
  error: (obj: object, msg?: string) => void;
162
162
  }
163
163
  declare const configSchema: z.ZodObject<{
164
- db: z.ZodType<Db, z.ZodTypeDef, Db>;
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.ZodType<UserAdapter, z.ZodTypeDef, UserAdapter>;
172
- smsProvider: z.ZodType<SmsProvider, z.ZodTypeDef, SmsProvider>;
173
- /** Enables the always-present EMAIL method (default for new users). */
174
- emailProvider: z.ZodOptional<z.ZodType<EmailProvider, z.ZodTypeDef, EmailProvider>>;
175
- /** MongoClient for transactions; defaults to the client behind `db`. */
176
- client: z.ZodOptional<z.ZodType<MongoClient, z.ZodTypeDef, MongoClient>>;
177
- logger: z.ZodOptional<z.ZodType<Logger, z.ZodTypeDef, Logger>>;
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, "many">;
190
- }, "strip", z.ZodTypeAny, {
191
- rpID: string;
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>, z.ZodTypeDef, (input: {
185
+ }) => boolean | Promise<boolean>, (input: {
208
186
  username: string;
209
187
  type?: string;
210
188
  }) => boolean | Promise<boolean>>]>>;
211
- /**
212
- * 2-Step Verification switch above each user's own choice. False: password sign-in never
213
- * asks for a code and the two-step setting can't be turned on. Passwordless sign-in still
214
- * sends a code — it's the only factor there. Pass a function to decide per user, e.g. from
215
- * an organization setting.
216
- */
217
- twoStepEnabled: z.ZodDefault<z.ZodUnion<[z.ZodBoolean, z.ZodType<(input: {
189
+ twoStepEnabled: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodCustom<(input: {
218
190
  userId: string;
219
- }) => boolean | Promise<boolean>, z.ZodTypeDef, (input: {
191
+ }) => boolean | Promise<boolean>, (input: {
220
192
  userId: string;
221
193
  }) => boolean | Promise<boolean>>]>>;
222
- /** 2-Step Verification state for users who have not chosen one yet. */
223
194
  twoStepDefault: z.ZodDefault<z.ZodBoolean>;
224
- limits: z.ZodDefault<z.ZodObject<{
225
- /** Failed passwords before lockout (BR-2). */
195
+ limits: z.ZodPrefault<z.ZodObject<{
226
196
  loginMaxAttempts: z.ZodDefault<z.ZodNumber>;
227
- /** Window for failed-login counting, minutes (BR-2). */
228
197
  loginWindowMin: z.ZodDefault<z.ZodNumber>;
229
- /** Lockout duration, minutes (BR-2, BR-9). */
230
198
  lockMinutes: z.ZodDefault<z.ZodNumber>;
231
- /** Min seconds between SMS sends on one challenge (BR-6). */
232
199
  smsResendSec: z.ZodDefault<z.ZodNumber>;
233
- /** Max SMS sends per challenge (BR-6). */
234
200
  smsMaxPerChallenge: z.ZodDefault<z.ZodNumber>;
235
- /** Max SMS sends per user per hour (BR-6). */
236
201
  smsMaxPerUserHour: z.ZodDefault<z.ZodNumber>;
237
- /** Wrong codes per challenge before lockout (BR-9). */
238
202
  mfaMaxAttempts: z.ZodDefault<z.ZodNumber>;
239
- /** Max verification methods per user (BR-16). */
240
203
  maxMethods: z.ZodDefault<z.ZodNumber>;
241
- /** Per-IP login requests per minute (NFR-B4). */
242
204
  loginIpPerMin: z.ZodDefault<z.ZodNumber>;
243
- /** Per-IP MFA verify requests per minute (NFR-B4). */
244
205
  verifyIpPerMin: z.ZodDefault<z.ZodNumber>;
245
- /** Per-IP step-up requests per minute (NFR-B4). */
246
206
  stepUpIpPerMin: z.ZodDefault<z.ZodNumber>;
247
- }, "strip", z.ZodTypeAny, {
248
- loginMaxAttempts: number;
249
- loginWindowMin: number;
250
- lockMinutes: number;
251
- smsResendSec: number;
252
- smsMaxPerChallenge: number;
253
- smsMaxPerUserHour: number;
254
- mfaMaxAttempts: number;
255
- maxMethods: number;
256
- loginIpPerMin: number;
257
- verifyIpPerMin: number;
258
- stepUpIpPerMin: number;
259
- }, {
260
- loginMaxAttempts?: number | undefined;
261
- loginWindowMin?: number | undefined;
262
- lockMinutes?: number | undefined;
263
- smsResendSec?: number | undefined;
264
- smsMaxPerChallenge?: number | undefined;
265
- smsMaxPerUserHour?: number | undefined;
266
- mfaMaxAttempts?: number | undefined;
267
- maxMethods?: number | undefined;
268
- loginIpPerMin?: number | undefined;
269
- verifyIpPerMin?: number | undefined;
270
- stepUpIpPerMin?: number | undefined;
271
- }>>;
272
- /**
273
- * Set false to turn off every RATE_LIMITED check: the per-IP limits on login / code
274
- * verify / send / step-up and the code-send cooldown and caps. Account lockouts after
275
- * failed passwords or codes (LOCKED) still apply.
276
- */
207
+ }, z.core.$strip>>;
277
208
  rateLimits: z.ZodDefault<z.ZodBoolean>;
278
- argon2: z.ZodDefault<z.ZodObject<{
209
+ argon2: z.ZodPrefault<z.ZodObject<{
279
210
  memoryKiB: z.ZodDefault<z.ZodNumber>;
280
211
  iterations: z.ZodDefault<z.ZodNumber>;
281
212
  parallelism: z.ZodDefault<z.ZodNumber>;
282
- }, "strip", z.ZodTypeAny, {
283
- memoryKiB: number;
284
- iterations: number;
285
- parallelism: number;
286
- }, {
287
- memoryKiB?: number | undefined;
288
- iterations?: number | undefined;
289
- parallelism?: number | undefined;
290
- }>>;
291
- cookies: z.ZodDefault<z.ZodObject<{
213
+ }, z.core.$strip>>;
214
+ cookies: z.ZodPrefault<z.ZodObject<{
292
215
  secure: z.ZodDefault<z.ZodBoolean>;
293
216
  domain: z.ZodOptional<z.ZodString>;
294
- sameSite: z.ZodDefault<z.ZodEnum<["lax", "strict", "none"]>>;
217
+ sameSite: z.ZodDefault<z.ZodEnum<{
218
+ lax: "lax";
219
+ strict: "strict";
220
+ none: "none";
221
+ }>>;
295
222
  path: z.ZodDefault<z.ZodString>;
296
- }, "strip", z.ZodTypeAny, {
297
- path: string;
298
- secure: boolean;
299
- sameSite: "lax" | "strict" | "none";
300
- domain?: string | undefined;
301
- }, {
302
- path?: string | undefined;
303
- secure?: boolean | undefined;
304
- domain?: string | undefined;
305
- sameSite?: "lax" | "strict" | "none" | undefined;
306
- }>>;
307
- ttl: z.ZodDefault<z.ZodObject<{
223
+ }, z.core.$strip>>;
224
+ ttl: z.ZodPrefault<z.ZodObject<{
308
225
  accessTokenSec: z.ZodDefault<z.ZodNumber>;
309
226
  refreshTokenDays: z.ZodDefault<z.ZodNumber>;
310
227
  trustedDeviceDays: z.ZodDefault<z.ZodNumber>;
@@ -312,150 +229,9 @@ declare const configSchema: z.ZodObject<{
312
229
  stepUpSec: z.ZodDefault<z.ZodNumber>;
313
230
  pendingMethodMin: z.ZodDefault<z.ZodNumber>;
314
231
  auditDays: z.ZodDefault<z.ZodNumber>;
315
- }, "strip", z.ZodTypeAny, {
316
- accessTokenSec: number;
317
- refreshTokenDays: number;
318
- trustedDeviceDays: number;
319
- challengeSec: number;
320
- stepUpSec: number;
321
- pendingMethodMin: number;
322
- auditDays: number;
323
- }, {
324
- accessTokenSec?: number | undefined;
325
- refreshTokenDays?: number | undefined;
326
- trustedDeviceDays?: number | undefined;
327
- challengeSec?: number | undefined;
328
- stepUpSec?: number | undefined;
329
- pendingMethodMin?: number | undefined;
330
- auditDays?: number | undefined;
331
- }>>;
332
- /** Serve GET /auth/openapi.json (A.7 docs). */
232
+ }, z.core.$strip>>;
333
233
  exposeDocs: z.ZodDefault<z.ZodBoolean>;
334
- }, "strip", z.ZodTypeAny, {
335
- db: Db;
336
- issuer: string;
337
- jwtPrivateKey: string;
338
- encryptionKey: string;
339
- keyId: string;
340
- userAdapter: UserAdapter;
341
- smsProvider: SmsProvider;
342
- collectionPrefix: string;
343
- passwordlessLogin: boolean | ((input: {
344
- username: string;
345
- type?: string;
346
- }) => boolean | Promise<boolean>);
347
- twoStepEnabled: boolean | ((input: {
348
- userId: string;
349
- }) => boolean | Promise<boolean>);
350
- twoStepDefault: boolean;
351
- limits: {
352
- loginMaxAttempts: number;
353
- loginWindowMin: number;
354
- lockMinutes: number;
355
- smsResendSec: number;
356
- smsMaxPerChallenge: number;
357
- smsMaxPerUserHour: number;
358
- mfaMaxAttempts: number;
359
- maxMethods: number;
360
- loginIpPerMin: number;
361
- verifyIpPerMin: number;
362
- stepUpIpPerMin: number;
363
- };
364
- rateLimits: boolean;
365
- argon2: {
366
- memoryKiB: number;
367
- iterations: number;
368
- parallelism: number;
369
- };
370
- cookies: {
371
- path: string;
372
- secure: boolean;
373
- sameSite: "lax" | "strict" | "none";
374
- domain?: string | undefined;
375
- };
376
- ttl: {
377
- accessTokenSec: number;
378
- refreshTokenDays: number;
379
- trustedDeviceDays: number;
380
- challengeSec: number;
381
- stepUpSec: number;
382
- pendingMethodMin: number;
383
- auditDays: number;
384
- };
385
- exposeDocs: boolean;
386
- emailProvider?: EmailProvider | undefined;
387
- client?: MongoClient | undefined;
388
- logger?: Logger | undefined;
389
- hooks?: Hooks | undefined;
390
- clock?: Clock | undefined;
391
- passkeys?: {
392
- rpID: string;
393
- rpName: string;
394
- origins: string[];
395
- } | undefined;
396
- }, {
397
- db: Db;
398
- issuer: string;
399
- jwtPrivateKey: string;
400
- encryptionKey: string;
401
- userAdapter: UserAdapter;
402
- smsProvider: SmsProvider;
403
- keyId?: string | undefined;
404
- emailProvider?: EmailProvider | undefined;
405
- client?: MongoClient | undefined;
406
- logger?: Logger | undefined;
407
- hooks?: Hooks | undefined;
408
- clock?: Clock | undefined;
409
- collectionPrefix?: string | undefined;
410
- passkeys?: {
411
- rpID: string;
412
- rpName: string;
413
- origins: string[];
414
- } | undefined;
415
- passwordlessLogin?: boolean | ((input: {
416
- username: string;
417
- type?: string;
418
- }) => boolean | Promise<boolean>) | undefined;
419
- twoStepEnabled?: boolean | ((input: {
420
- userId: string;
421
- }) => boolean | Promise<boolean>) | undefined;
422
- twoStepDefault?: boolean | undefined;
423
- limits?: {
424
- loginMaxAttempts?: number | undefined;
425
- loginWindowMin?: number | undefined;
426
- lockMinutes?: number | undefined;
427
- smsResendSec?: number | undefined;
428
- smsMaxPerChallenge?: number | undefined;
429
- smsMaxPerUserHour?: number | undefined;
430
- mfaMaxAttempts?: number | undefined;
431
- maxMethods?: number | undefined;
432
- loginIpPerMin?: number | undefined;
433
- verifyIpPerMin?: number | undefined;
434
- stepUpIpPerMin?: number | undefined;
435
- } | undefined;
436
- rateLimits?: boolean | undefined;
437
- argon2?: {
438
- memoryKiB?: number | undefined;
439
- iterations?: number | undefined;
440
- parallelism?: number | undefined;
441
- } | undefined;
442
- cookies?: {
443
- path?: string | undefined;
444
- secure?: boolean | undefined;
445
- domain?: string | undefined;
446
- sameSite?: "lax" | "strict" | "none" | undefined;
447
- } | undefined;
448
- ttl?: {
449
- accessTokenSec?: number | undefined;
450
- refreshTokenDays?: number | undefined;
451
- trustedDeviceDays?: number | undefined;
452
- challengeSec?: number | undefined;
453
- stepUpSec?: number | undefined;
454
- pendingMethodMin?: number | undefined;
455
- auditDays?: number | undefined;
456
- } | undefined;
457
- exposeDocs?: boolean | undefined;
458
- }>;
234
+ }, z.core.$strip>;
459
235
  type AuthConfigInput = z.input<typeof configSchema>;
460
236
  type AuthConfig = z.output<typeof configSchema> & {
461
237
  clock: Clock;
package/dist/index.js CHANGED
@@ -111,16 +111,16 @@ var configSchema = z.object({
111
111
  ]).default(true),
112
112
  /** 2-Step Verification state for users who have not chosen one yet. */
113
113
  twoStepDefault: z.boolean().default(false),
114
- limits: limitSchema.default({}),
114
+ limits: limitSchema.prefault({}),
115
115
  /**
116
116
  * Set false to turn off every RATE_LIMITED check: the per-IP limits on login / code
117
117
  * verify / send / step-up and the code-send cooldown and caps. Account lockouts after
118
118
  * failed passwords or codes (LOCKED) still apply.
119
119
  */
120
120
  rateLimits: z.boolean().default(true),
121
- argon2: argon2Schema.default({}),
122
- cookies: cookieSchema.default({}),
123
- ttl: ttlSchema.default({}),
121
+ argon2: argon2Schema.prefault({}),
122
+ cookies: cookieSchema.prefault({}),
123
+ ttl: ttlSchema.prefault({}),
124
124
  /** Serve GET /auth/openapi.json (A.7 docs). */
125
125
  exposeDocs: z.boolean().default(false)
126
126
  });