@aooth/auth-moost 0.1.8 → 0.1.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aooth/auth-moost",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "description": "Moost auth integration for aoothjs — AuthGuard interceptor, useAuth composable, REST endpoints, workflows",
5
5
  "keywords": [
6
6
  "aoothjs",
@@ -57,33 +57,33 @@
57
57
  "access": "public"
58
58
  },
59
59
  "dependencies": {
60
- "@atscript/moost-wf": "^0.1.88",
60
+ "@atscript/moost-wf": "^0.1.91",
61
61
  "@wooksjs/http-body": "^0.7.17",
62
- "@aooth/arbac-moost": "^0.1.8",
63
- "@aooth/idp": "0.1.8",
64
- "@aooth/auth": "0.1.8",
65
- "@aooth/user": "0.1.8"
62
+ "@aooth/arbac-moost": "^0.1.10",
63
+ "@aooth/auth": "0.1.10",
64
+ "@aooth/idp": "0.1.10",
65
+ "@aooth/user": "0.1.10"
66
66
  },
67
67
  "devDependencies": {
68
- "@atscript/core": "^0.1.69",
69
- "@atscript/typescript": "^0.1.69",
70
- "@atscript/ui": "^0.1.88",
71
- "@atscript/ui-fns": "^0.1.88",
72
- "@moostjs/event-http": "^0.6.23",
73
- "@moostjs/event-wf": "^0.6.23",
74
- "moost": "^0.6.23",
75
- "unplugin-atscript": "^0.1.69",
68
+ "@atscript/core": "^0.1.71",
69
+ "@atscript/typescript": "^0.1.71",
70
+ "@atscript/ui": "^0.1.91",
71
+ "@atscript/ui-fns": "^0.1.91",
72
+ "@moostjs/event-http": "^0.6.24",
73
+ "@moostjs/event-wf": "^0.6.24",
74
+ "moost": "^0.6.24",
75
+ "unplugin-atscript": "^0.1.71",
76
76
  "wooks": "^0.7.17"
77
77
  },
78
78
  "peerDependencies": {
79
- "@atscript/moost-wf": "^0.1.88",
80
- "@atscript/typescript": "^0.1.69",
81
- "@moostjs/event-http": "^0.6.23",
82
- "@moostjs/event-wf": "^0.6.23",
79
+ "@atscript/moost-wf": "^0.1.91",
80
+ "@atscript/typescript": "^0.1.71",
81
+ "@moostjs/event-http": "^0.6.24",
82
+ "@moostjs/event-wf": "^0.6.24",
83
83
  "@wooksjs/event-core": "^0.7.17",
84
84
  "@wooksjs/event-http": "^0.7.17",
85
85
  "@wooksjs/http-body": "^0.7.17",
86
- "moost": "^0.6.23"
86
+ "moost": "^0.6.24"
87
87
  },
88
88
  "peerDependenciesMeta": {
89
89
  "@atscript/typescript": {
@@ -506,6 +506,7 @@ export interface AskPhoneForm extends WithInlineConsentForm {
506
506
  @meta.label 'Set up two-factor authentication'
507
507
  @meta.description 'Pick a method to receive your verification codes.'
508
508
  @wf.context.pass 'public'
509
+ @ui.form.submit.text 'Continue'
509
510
  export interface EnrollPickMethodForm {
510
511
  @ui.form.order 10
511
512
  @ui.form.type 'radio'
@@ -514,9 +515,18 @@ export interface EnrollPickMethodForm {
514
515
  @meta.required
515
516
  method: string
516
517
 
518
+ // Login/invite opt-in only: a user who chose to defer MFA backs out here.
517
519
  @ui.form.action 'skip', 'Skip for now'
518
520
  @ui.form.fn.hidden '(_, _d, ctx) => ctx.public?.mfaEnroll?.mode !== "optional"'
519
521
  skip?: ui.action
522
+
523
+ // Manage-MFA only: the user opened this on purpose, so "Skip" makes no
524
+ // sense — a `cancel` action is declared instead (host-rendered, see below).
525
+ // Built-in cancel hidden but kept whitelisted so a host can fire it — see
526
+ // auth-moost CLAUDE.md "Manage-MFA host cancel" (consumer renders its own).
527
+ @ui.form.action 'cancel', 'Cancel'
528
+ @ui.form.fn.hidden '() => true'
529
+ cancel?: ui.action
520
530
  }
521
531
 
522
532
  /**
@@ -530,34 +540,46 @@ export interface EnrollPickMethodForm {
530
540
  @ui.form.fn.title '(_, _d, ctx) => ctx.public?.mfaEnroll?.method === "sms" ? "Add your phone number" : "Add your email"'
531
541
  @meta.description 'We will send you a one-time code to confirm.'
532
542
  @wf.context.pass 'public'
543
+ @ui.form.submit.text 'Send code'
533
544
  export interface EnrollAddressForm {
534
545
  @ui.form.order 10
535
546
  @ui.form.type 'text'
547
+ // Transport-aware label: this single field collects either a phone number
548
+ // (sms) or an email (email), so the label reads the chosen transport off
549
+ // `ctx.public.mfaEnroll.method`. `@meta.label 'Address'` is the static
550
+ // fallback when `@atscript/ui-fns` is absent (the fn key overrides it when
551
+ // present — fn wins over static, else static is the fallback).
536
552
  @meta.label 'Address'
553
+ @ui.form.fn.label '(_, _d, ctx) => ctx.public?.mfaEnroll?.method === "sms" ? "Phone number" : ctx.public?.mfaEnroll?.method === "email" ? "Email address" : "Address"'
537
554
  @meta.required
555
+ // Client-side format hint — email branch must look like an email; the SMS
556
+ // branch stays free-form (server-side E.164 normalization). The robust
557
+ // check is server-side in the `enroll-address` step regardless of client.
558
+ @ui.form.validate '(v, _d, ctx) => ctx.public?.mfaEnroll?.method !== "email" || /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(v) || "Enter a valid email address"'
538
559
  address: string
539
560
 
540
561
  @ui.form.action 'skip', 'Skip for now'
541
562
  @ui.form.fn.hidden '(_, _d, ctx) => ctx.public?.mfaEnroll?.mode !== "optional"'
542
563
  skip?: ui.action
543
564
 
565
+ // Built-in cancel hidden but kept whitelisted so a host can fire it — see
566
+ // auth-moost CLAUDE.md "Manage-MFA host cancel" (consumer renders its own).
567
+ @ui.form.action 'cancel', 'Cancel'
568
+ @ui.form.fn.hidden '() => true'
569
+ cancel?: ui.action
570
+
544
571
  @ui.form.action 'useDifferentMethod', 'Use a different method'
545
- @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.mfaEnroll?.availableTransports?.length ?? 0) < 2'
572
+ @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.mfaEnroll?.availableTransports?.length ?? 0) < 2 || ctx.public?.mfaEnroll?.mode === "manage"'
546
573
  useDifferentMethod?: ui.action
547
574
  }
548
575
 
549
576
  /**
550
- * Forced MFA enrollment — confirm code, shared by all three transports.
577
+ * MFA enrollment — confirm code, shared by all three transports.
551
578
  *
552
- * **TOTP branch.** `ctx.public.mfaEnroll.secret` holds the base32 secret and
553
- * `ctx.public.mfaEnroll.uri` the `otpauth://` URI both are produced server-side by
554
- * `setup-mfa-method` and ride the `@wf.context.pass 'public'` whitelist.
555
- * The `qrCode` field renders the `otpauth://` URI as a scannable QR image via
556
- * the `AsQrCode` component (from `@atscript/vue-aooth`, registered on
557
- * `<AsWfForm :components>`); its `@ui.form.fn.value` exposes the URI string the
558
- * component consumes. `AsQrCode` ALSO extracts the base32 secret from the URI
559
- * and renders it for manual entry (its `manualSecret` prop defaults on), so
560
- * users whose authenticator app lacks a QR scanner can still set up.
579
+ * **TOTP branch.** The scannable QR + manual base32 secret are shown on the
580
+ * PRECEDING `enroll-totp-qr` step ({@link EnrollTotpQrForm}), so this form only
581
+ * collects the 6-digit code the authenticator generates — `transportHint`
582
+ * reminds the user to enter it.
561
583
  *
562
584
  * **SMS / email branch.** Single `transportHint` paragraph shows the masked
563
585
  * recipient.
@@ -567,22 +589,9 @@ export interface EnrollAddressForm {
567
589
  @ui.form.submit.text 'Confirm'
568
590
  export interface EnrollConfirmForm {
569
591
  @ui.form.order 1
570
- @ui.form.fn.value '(_, _d, ctx) => ctx.public?.mfaEnroll?.method === "totp" ? "Add the account to your authenticator app, then enter the 6-digit code it generates." : ctx.public?.pincode?.sentTo ? "Code sent to " + ctx.public.pincode.sentTo + ". Enter it below to confirm." : "Enter the code to confirm enrollment."'
592
+ @ui.form.fn.value '(_, _d, ctx) => ctx.public?.mfaEnroll?.method === "totp" ? "Enter the 6-digit code from your authenticator app." : ctx.public?.pincode?.sentTo ? "Code sent to " + ctx.public.pincode.sentTo + ". Enter it below to confirm." : "Enter the code to confirm enrollment."'
571
593
  transportHint?: ui.paragraph
572
594
 
573
- /**
574
- * Phantom field — `otpauth://` URI rendered as a scannable QR image by the
575
- * `AsQrCode` component. `AsQrCode` also extracts the base32 secret from the
576
- * URI and shows it for manual entry (its `manualSecret` prop defaults on),
577
- * so there is no separate manual-secret field.
578
- */
579
- @ui.form.order 5
580
- @ui.form.component 'AsQrCode'
581
- @ui.form.fn.attr 'size', '() => 180'
582
- @ui.form.fn.value '(_, _d, ctx) => ctx.public?.mfaEnroll?.uri || ""'
583
- @ui.form.fn.hidden '(_, _d, ctx) => ctx.public?.mfaEnroll?.method !== "totp" || !ctx.public?.mfaEnroll?.uri'
584
- qrCode: ui.paragraph
585
-
586
595
  @ui.form.order 10
587
596
  @ui.form.type 'text'
588
597
  @meta.label 'Code'
@@ -599,14 +608,143 @@ export interface EnrollConfirmForm {
599
608
  resend?: ui.action
600
609
 
601
610
  @ui.form.action 'useDifferentMethod', 'Use a different method'
602
- @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.mfaEnroll?.availableTransports?.length ?? 0) < 2'
611
+ @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.mfaEnroll?.availableTransports?.length ?? 0) < 2 || ctx.public?.mfaEnroll?.mode === "manage"'
603
612
  useDifferentMethod?: ui.action
604
613
 
614
+ // Built-in cancel hidden but kept whitelisted so a host can fire it — see
615
+ // auth-moost CLAUDE.md "Manage-MFA host cancel" (consumer renders its own).
616
+ @ui.form.action 'cancel', 'Cancel'
617
+ @ui.form.fn.hidden '() => true'
618
+ cancel?: ui.action
619
+
605
620
  @ui.form.action 'skip', 'Skip for now'
606
621
  @ui.form.fn.hidden '(_, _d, ctx) => ctx.public?.mfaEnroll?.mode !== "optional"'
607
622
  skip?: ui.action
608
623
  }
609
624
 
625
+ /**
626
+ * MFA enrollment — TOTP QR step. Shown on its OWN pause (the `enroll-totp-qr`
627
+ * step) BETWEEN method-pick and code-entry, so the user scans first and types
628
+ * the code on the next screen — instead of QR + input crowded on one form.
629
+ *
630
+ * `ctx.public.mfaEnroll.uri` carries the `otpauth://` URI (provisioned
631
+ * server-side). The `qrCode` field renders it as a scannable image via the
632
+ * `AsQrCode` component (`@atscript/vue-aooth`); `AsQrCode` also extracts the
633
+ * base32 secret from the URI and shows it for manual entry (its `manualSecret`
634
+ * prop defaults on), so users whose app lacks a scanner can still set up.
635
+ */
636
+ @meta.label 'Scan this QR code'
637
+ @meta.description 'Open your authenticator app and scan the code (or enter the key manually), then continue to enter the code it shows.'
638
+ @wf.context.pass 'public'
639
+ @ui.form.submit.text 'Continue'
640
+ export interface EnrollTotpQrForm {
641
+ @ui.form.order 5
642
+ @ui.form.component 'AsQrCode'
643
+ @ui.form.fn.attr 'size', '() => 180'
644
+ @ui.form.fn.value '(_, _d, ctx) => ctx.public?.mfaEnroll?.uri || ""'
645
+ qrCode: ui.paragraph
646
+
647
+ @ui.form.action 'useDifferentMethod', 'Use a different method'
648
+ @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.mfaEnroll?.availableTransports?.length ?? 0) < 2 || ctx.public?.mfaEnroll?.mode === "manage"'
649
+ useDifferentMethod?: ui.action
650
+
651
+ // Built-in cancel hidden but kept whitelisted so a host can fire it — see
652
+ // auth-moost CLAUDE.md "Manage-MFA host cancel" (consumer renders its own).
653
+ @ui.form.action 'cancel', 'Cancel'
654
+ @ui.form.fn.hidden '() => true'
655
+ cancel?: ui.action
656
+
657
+ @ui.form.action 'skip', 'Skip for now'
658
+ @ui.form.fn.hidden '(_, _d, ctx) => ctx.public?.mfaEnroll?.mode !== "optional"'
659
+ skip?: ui.action
660
+ }
661
+
662
+ /**
663
+ * Manage-MFA menu — the authenticated user's hub for the standalone
664
+ * `auth/add-mfa/flow` once they have ≥1 confirmed factor (shown after the
665
+ * step-up challenge). A single radio whose value encodes both action and
666
+ * target (`add:totp` / `replace:email` / `remove:sms`):
667
+ * - **Add** options come from `ctx.public.manage.candidates` (un-enrolled).
668
+ * - **Change / Remove** options come from `ctx.public.mfa.enrolledMethods`,
669
+ * with any transport in `ctx.public.manage.locked` omitted (a handle-bound
670
+ * factor the consumer forbids changing here — `lockedNote` explains why).
671
+ *
672
+ * A zero-MFA user never sees this form — the flow routes straight to the
673
+ * enrol picker (first-time opt-in).
674
+ */
675
+ @meta.label 'Manage two-factor authentication'
676
+ @meta.description 'Add, change, or remove a verification method.'
677
+ @wf.context.pass 'public'
678
+ @ui.form.submit.text 'Continue'
679
+ export interface ManageMfaForm {
680
+ @ui.form.order 5
681
+ @ui.form.fn.value '(_, _d, ctx) => (ctx.public?.manage?.locked?.length ?? 0) > 0 ? "Some methods are also used to sign in and can’t be changed here." : ""'
682
+ @ui.form.fn.hidden '(_, _d, ctx) => (ctx.public?.manage?.locked?.length ?? 0) === 0'
683
+ lockedNote: ui.paragraph
684
+
685
+ @ui.form.order 10
686
+ @ui.form.type 'radio'
687
+ @ui.form.fn.options '(_, _d, ctx) => { const lbl = (t) => t === "totp" ? "authenticator app" : t === "sms" ? "SMS" : t === "email" ? "email" : t; const locked = ctx.public?.manage?.locked ?? []; const out = []; for (const t of (ctx.public?.manage?.candidates ?? [])) out.push({ key: "add:" + t, label: "Add " + lbl(t) }); for (const m of (ctx.public?.mfa?.enrolledMethods ?? [])) { if (locked.includes(m.kind)) continue; out.push({ key: "replace:" + m.kind, label: "Change " + lbl(m.kind) + (m.masked ? " (" + m.masked + ")" : "") }); out.push({ key: "remove:" + m.kind, label: "Remove " + lbl(m.kind) }); } return out; }'
688
+ @meta.label 'What would you like to do?'
689
+ @meta.required
690
+ operation: string
691
+
692
+ // Hidden built-in cancel — host renders its own and fires `cancel` on
693
+ // abandon (so the durable wf-state row is cleaned, not left to expire).
694
+ @ui.form.action 'cancel', 'Cancel'
695
+ @ui.form.fn.hidden '() => true'
696
+ cancel?: ui.action
697
+ }
698
+
699
+ /**
700
+ * Manage-MFA — confirm removing a factor. Fieldless apart from the explanatory
701
+ * paragraph; the primary submit ('Remove') performs the removal, 'Cancel'
702
+ * backs out. `manage-menu` has already bound the target transport on
703
+ * `ctx.addMfa.target`; the description reads it back for the user.
704
+ */
705
+ @meta.label 'Remove this method?'
706
+ @wf.context.pass 'public'
707
+ @ui.form.submit.text 'Remove'
708
+ export interface RemoveMfaConfirmForm {
709
+ @ui.form.order 1
710
+ @ui.form.fn.value '(_, _d, ctx) => { const t = ctx.public?.mfaEnroll?.method; const lbl = t === "totp" ? "your authenticator app" : t === "sms" ? "SMS codes" : t === "email" ? "email codes" : "this method"; return "Remove " + lbl + " as a two-factor method? You can set it up again later."; }'
711
+ notice: ui.paragraph
712
+
713
+ // Hidden built-in cancel — host renders its own and fires `cancel` on
714
+ // abandon (so the durable wf-state row is cleaned, not left to expire).
715
+ @ui.form.action 'cancel', 'Cancel'
716
+ @ui.form.fn.hidden '() => true'
717
+ cancel?: ui.action
718
+ }
719
+
720
+ /**
721
+ * Manage-MFA password re-auth — the step-up FALLBACK rendered when the user's
722
+ * only confirmed factor(s) are of kinds the policy no longer allows, so nothing
723
+ * is MFA-challengeable (`ctx.addMfa.stepUpMode === "password"`). A single
724
+ * current-password field; the submit verifies it via `UserService.verifyPassword`
725
+ * and 'Cancel' backs out. See `AuthWorkflow.managePasswordReauth`.
726
+ */
727
+ @meta.label 'Confirm your password'
728
+ @meta.description 'Re-enter your account password to manage your two-factor methods.'
729
+ @wf.context.pass 'public'
730
+ @ui.form.submit.text 'Verify'
731
+ export interface PasswordReauthForm {
732
+ @ui.form.order 10
733
+ @ui.form.type 'password'
734
+ @meta.label 'Password'
735
+ @ui.form.autocomplete 'current-password'
736
+ @meta.sensitive
737
+ @meta.required
738
+ @expect.minLength 1
739
+ password: string
740
+
741
+ // Hidden built-in cancel — host renders its own and fires `cancel` on
742
+ // abandon (so the durable wf-state row is cleaned, not left to expire).
743
+ @ui.form.action 'cancel', 'Cancel'
744
+ @ui.form.fn.hidden '() => true'
745
+ cancel?: ui.action
746
+ }
747
+
610
748
  /**
611
749
  * Standalone consent-bump prompt. Fires for returning users with pending
612
750
  * consents (set by `prepare-consents` from `ConsentStore.getPendingConsents`)
@@ -209,11 +209,12 @@ export declare class AskPhoneForm extends WithInlineConsentForm {
209
209
 
210
210
  /**
211
211
  * Atscript interface **EnrollPickMethodForm**
212
- * @see {@link ./forms.as:509:18}
212
+ * @see {@link ./forms.as:510:18}
213
213
  */
214
214
  export declare class EnrollPickMethodForm {
215
215
  method: string
216
216
  // skip: ui.action
217
+ // cancel: ui.action
217
218
  static __is_atscript_annotated_type: true
218
219
  static type: TAtscriptTypeObject<keyof EnrollPickMethodForm, EnrollPickMethodForm>
219
220
  static metadata: TMetadataMap<AtscriptMetadata>
@@ -226,11 +227,12 @@ export declare class EnrollPickMethodForm {
226
227
 
227
228
  /**
228
229
  * Atscript interface **EnrollAddressForm**
229
- * @see {@link ./forms.as:533:18}
230
+ * @see {@link ./forms.as:544:18}
230
231
  */
231
232
  export declare class EnrollAddressForm {
232
233
  address: string
233
234
  // skip: ui.action
235
+ // cancel: ui.action
234
236
  // useDifferentMethod: ui.action
235
237
  static __is_atscript_annotated_type: true
236
238
  static type: TAtscriptTypeObject<keyof EnrollAddressForm, EnrollAddressForm>
@@ -244,14 +246,14 @@ export declare class EnrollAddressForm {
244
246
 
245
247
  /**
246
248
  * Atscript interface **EnrollConfirmForm**
247
- * @see {@link ./forms.as:568:18}
249
+ * @see {@link ./forms.as:590:18}
248
250
  */
249
251
  export declare class EnrollConfirmForm {
250
252
  // transportHint: ui.paragraph
251
- // qrCode: ui.paragraph
252
253
  code: string
253
254
  // resend: ui.action
254
255
  // useDifferentMethod: ui.action
256
+ // cancel: ui.action
255
257
  // skip: ui.action
256
258
  static __is_atscript_annotated_type: true
257
259
  static type: TAtscriptTypeObject<keyof EnrollConfirmForm, EnrollConfirmForm>
@@ -263,9 +265,80 @@ export declare class EnrollConfirmForm {
263
265
  static toExampleData?: () => any
264
266
  }
265
267
 
268
+ /**
269
+ * Atscript interface **EnrollTotpQrForm**
270
+ * @see {@link ./forms.as:640:18}
271
+ */
272
+ export declare class EnrollTotpQrForm {
273
+ // qrCode: ui.paragraph
274
+ // useDifferentMethod: ui.action
275
+ // cancel: ui.action
276
+ // skip: ui.action
277
+ static __is_atscript_annotated_type: true
278
+ static type: TAtscriptTypeObject<keyof EnrollTotpQrForm, EnrollTotpQrForm>
279
+ static metadata: TMetadataMap<AtscriptMetadata>
280
+ static validator: (opts?: Partial<TValidatorOptions>) => Validator<typeof EnrollTotpQrForm>
281
+ /** @deprecated JSON Schema support is disabled. Calling this method will throw a runtime error. To enable, set `jsonSchema: 'lazy'` or `jsonSchema: 'bundle'` in tsPlugin options, or add `@emit.jsonSchema` annotation to individual interfaces. */
282
+ static toJsonSchema: () => any
283
+ /** @deprecated Example Data support is disabled. To enable, set `exampleData: true` in tsPlugin options. */
284
+ static toExampleData?: () => any
285
+ }
286
+
287
+ /**
288
+ * Atscript interface **ManageMfaForm**
289
+ * @see {@link ./forms.as:679:18}
290
+ */
291
+ export declare class ManageMfaForm {
292
+ // lockedNote: ui.paragraph
293
+ operation: string
294
+ // cancel: ui.action
295
+ static __is_atscript_annotated_type: true
296
+ static type: TAtscriptTypeObject<keyof ManageMfaForm, ManageMfaForm>
297
+ static metadata: TMetadataMap<AtscriptMetadata>
298
+ static validator: (opts?: Partial<TValidatorOptions>) => Validator<typeof ManageMfaForm>
299
+ /** @deprecated JSON Schema support is disabled. Calling this method will throw a runtime error. To enable, set `jsonSchema: 'lazy'` or `jsonSchema: 'bundle'` in tsPlugin options, or add `@emit.jsonSchema` annotation to individual interfaces. */
300
+ static toJsonSchema: () => any
301
+ /** @deprecated Example Data support is disabled. To enable, set `exampleData: true` in tsPlugin options. */
302
+ static toExampleData?: () => any
303
+ }
304
+
305
+ /**
306
+ * Atscript interface **RemoveMfaConfirmForm**
307
+ * @see {@link ./forms.as:708:18}
308
+ */
309
+ export declare class RemoveMfaConfirmForm {
310
+ // notice: ui.paragraph
311
+ // cancel: ui.action
312
+ static __is_atscript_annotated_type: true
313
+ static type: TAtscriptTypeObject<keyof RemoveMfaConfirmForm, RemoveMfaConfirmForm>
314
+ static metadata: TMetadataMap<AtscriptMetadata>
315
+ static validator: (opts?: Partial<TValidatorOptions>) => Validator<typeof RemoveMfaConfirmForm>
316
+ /** @deprecated JSON Schema support is disabled. Calling this method will throw a runtime error. To enable, set `jsonSchema: 'lazy'` or `jsonSchema: 'bundle'` in tsPlugin options, or add `@emit.jsonSchema` annotation to individual interfaces. */
317
+ static toJsonSchema: () => any
318
+ /** @deprecated Example Data support is disabled. To enable, set `exampleData: true` in tsPlugin options. */
319
+ static toExampleData?: () => any
320
+ }
321
+
322
+ /**
323
+ * Atscript interface **PasswordReauthForm**
324
+ * @see {@link ./forms.as:731:18}
325
+ */
326
+ export declare class PasswordReauthForm {
327
+ password: string
328
+ // cancel: ui.action
329
+ static __is_atscript_annotated_type: true
330
+ static type: TAtscriptTypeObject<keyof PasswordReauthForm, PasswordReauthForm>
331
+ static metadata: TMetadataMap<AtscriptMetadata>
332
+ static validator: (opts?: Partial<TValidatorOptions>) => Validator<typeof PasswordReauthForm>
333
+ /** @deprecated JSON Schema support is disabled. Calling this method will throw a runtime error. To enable, set `jsonSchema: 'lazy'` or `jsonSchema: 'bundle'` in tsPlugin options, or add `@emit.jsonSchema` annotation to individual interfaces. */
334
+ static toJsonSchema: () => any
335
+ /** @deprecated Example Data support is disabled. To enable, set `exampleData: true` in tsPlugin options. */
336
+ static toExampleData?: () => any
337
+ }
338
+
266
339
  /**
267
340
  * Atscript interface **TermsBumpForm**
268
- * @see {@link ./forms.as:622:18}
341
+ * @see {@link ./forms.as:760:18}
269
342
  */
270
343
  export declare class TermsBumpForm extends WithInlineConsentForm {
271
344
  static __is_atscript_annotated_type: true
@@ -280,7 +353,7 @@ export declare class TermsBumpForm extends WithInlineConsentForm {
280
353
 
281
354
  /**
282
355
  * Atscript interface **ConcurrencyLimitForm**
283
- * @see {@link ./forms.as:635:18}
356
+ * @see {@link ./forms.as:773:18}
284
357
  */
285
358
  export declare class ConcurrencyLimitForm {
286
359
  static __is_atscript_annotated_type: true
@@ -295,7 +368,7 @@ export declare class ConcurrencyLimitForm {
295
368
 
296
369
  /**
297
370
  * Atscript interface **MagicLinkRequestForm**
298
- * @see {@link ./forms.as:645:18}
371
+ * @see {@link ./forms.as:783:18}
299
372
  */
300
373
  export declare class MagicLinkRequestForm {
301
374
  identifier: string
@@ -311,7 +384,7 @@ export declare class MagicLinkRequestForm {
311
384
 
312
385
  /**
313
386
  * Atscript interface **RecoveryModeSelectForm**
314
- * @see {@link ./forms.as:660:18}
387
+ * @see {@link ./forms.as:798:18}
315
388
  */
316
389
  export declare class RecoveryModeSelectForm {
317
390
  mode: string
@@ -327,7 +400,7 @@ export declare class RecoveryModeSelectForm {
327
400
 
328
401
  /**
329
402
  * Atscript interface **RecoveryFactorForm**
330
- * @see {@link ./forms.as:683:18}
403
+ * @see {@link ./forms.as:821:18}
331
404
  */
332
405
  export declare class RecoveryFactorForm {
333
406
  factor: string
@@ -344,7 +417,7 @@ export declare class RecoveryFactorForm {
344
417
 
345
418
  /**
346
419
  * Atscript interface **ChangePasswordForm**
347
- * @see {@link ./forms.as:717:18}
420
+ * @see {@link ./forms.as:855:18}
348
421
  */
349
422
  export declare class ChangePasswordForm {
350
423
  // intro: ui.paragraph
@@ -364,7 +437,7 @@ export declare class ChangePasswordForm {
364
437
 
365
438
  /**
366
439
  * Atscript interface **ProveControlForm**
367
- * @see {@link ./forms.as:782:18}
440
+ * @see {@link ./forms.as:920:18}
368
441
  */
369
442
  export declare class ProveControlForm {
370
443
  // intro: ui.paragraph
@@ -382,7 +455,7 @@ export declare class ProveControlForm {
382
455
 
383
456
  /**
384
457
  * Atscript interface **ProveControlOtpForm**
385
- * @see {@link ./forms.as:817:18}
458
+ * @see {@link ./forms.as:955:18}
386
459
  */
387
460
  export declare class ProveControlOtpForm {
388
461
  // intro: ui.paragraph