@logto/schemas 1.37.1 → 1.39.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.
Files changed (73) hide show
  1. package/alterations/1.38.0-1772615848-add-oidc-model-instances-grant-id-partial-index.ts +26 -0
  2. package/alterations/1.38.0-1772619963-tune-oidc-model-instances-autovacuum.ts +28 -0
  3. package/alterations/1.38.0-1772621060-add-oidc-model-instances-grant-account-id-index.ts +26 -0
  4. package/alterations/1.39.0-1774752400-add-delete-account-url.ts +20 -0
  5. package/alterations/1.39.0-1774770686-add-account-center-custom-css.ts +20 -0
  6. package/alterations/1.39.0-1776502301-add-sign-up-profile-fields.ts +20 -0
  7. package/alterations-js/1.38.0-1772615848-add-oidc-model-instances-grant-id-partial-index.js +22 -0
  8. package/alterations-js/1.38.0-1772619963-tune-oidc-model-instances-autovacuum.js +24 -0
  9. package/alterations-js/1.38.0-1772621060-add-oidc-model-instances-grant-account-id-index.js +22 -0
  10. package/alterations-js/1.39.0-1774752400-add-delete-account-url.js +16 -0
  11. package/alterations-js/1.39.0-1774770686-add-account-center-custom-css.js +16 -0
  12. package/alterations-js/1.39.0-1776502301-add-sign-up-profile-fields.js +16 -0
  13. package/lib/consts/cookie.d.ts +1 -0
  14. package/lib/consts/cookie.js +1 -0
  15. package/lib/consts/experience.d.ts +1 -0
  16. package/lib/consts/experience.js +1 -0
  17. package/lib/consts/oidc.d.ts +3 -0
  18. package/lib/consts/oidc.js +3 -0
  19. package/lib/consts/system.d.ts +4 -0
  20. package/lib/consts/system.js +4 -0
  21. package/lib/db-entries/account-center.d.ts +9 -1
  22. package/lib/db-entries/account-center.js +8 -0
  23. package/lib/db-entries/sign-in-experience.d.ts +6 -2
  24. package/lib/db-entries/sign-in-experience.js +5 -1
  25. package/lib/foundations/jsonb-types/account-centers.d.ts +1 -0
  26. package/lib/foundations/jsonb-types/account-centers.js +8 -0
  27. package/lib/foundations/jsonb-types/oidc-module.d.ts +26 -7
  28. package/lib/foundations/jsonb-types/oidc-module.js +16 -1
  29. package/lib/foundations/jsonb-types/sign-in-experience.d.ts +36 -6
  30. package/lib/foundations/jsonb-types/sign-in-experience.js +10 -2
  31. package/lib/seeds/application.d.ts +3 -1
  32. package/lib/seeds/application.js +26 -1
  33. package/lib/types/alteration.d.ts +5 -0
  34. package/lib/types/application.d.ts +14 -2
  35. package/lib/types/connector.d.ts +8 -0
  36. package/lib/types/consent.d.ts +11 -3
  37. package/lib/types/consent.js +2 -1
  38. package/lib/types/custom-profile-fields.d.ts +7 -13
  39. package/lib/types/custom-profile-fields.js +6 -13
  40. package/lib/types/log/interaction.d.ts +4 -2
  41. package/lib/types/log/interaction.js +2 -0
  42. package/lib/types/log/token.d.ts +5 -3
  43. package/lib/types/log/token.js +2 -0
  44. package/lib/types/logto-config/index.d.ts +331 -15
  45. package/lib/types/logto-config/index.js +28 -4
  46. package/lib/types/logto-config/index.test.d.ts +1 -0
  47. package/lib/types/logto-config/index.test.js +29 -0
  48. package/lib/types/logto-config/jwt-customizer.d.ts +787 -253
  49. package/lib/types/logto-config/jwt-customizer.js +8 -3
  50. package/lib/types/logto-config/jwt-customizer.test.js +14 -2
  51. package/lib/types/oidc-config.d.ts +2 -1
  52. package/lib/types/oidc-config.js +1 -0
  53. package/lib/types/onboarding.d.ts +93 -1
  54. package/lib/types/onboarding.js +22 -1
  55. package/lib/types/sign-in-experience.d.ts +15 -4
  56. package/lib/types/user-logto-config.d.ts +49 -0
  57. package/lib/types/user-logto-config.js +19 -0
  58. package/lib/types/user-sessions.d.ts +712 -112
  59. package/lib/types/user-sessions.js +33 -2
  60. package/lib/types/verification-records/verification-type.d.ts +1 -1
  61. package/lib/types/verification-records/verification-type.js +1 -1
  62. package/lib/types/verification-records/web-authn-verification.d.ts +11 -11
  63. package/lib/types/verification-records/web-authn-verification.js +3 -3
  64. package/lib/utils/index.d.ts +1 -0
  65. package/lib/utils/index.js +1 -0
  66. package/lib/utils/oidc-private-key.d.ts +88 -0
  67. package/lib/utils/oidc-private-key.js +163 -0
  68. package/lib/utils/oidc-private-key.test.d.ts +1 -0
  69. package/lib/utils/oidc-private-key.test.js +128 -0
  70. package/package.json +9 -8
  71. package/tables/account_centers.sql +4 -0
  72. package/tables/oidc_model_instances.sql +16 -0
  73. package/tables/sign_in_experiences.sql +2 -0
@@ -7,19 +7,20 @@ import { GrantType } from '../oidc-config.js';
7
7
  import { scopeResponseGuard } from '../scope.js';
8
8
  import { userInfoGuard } from '../user.js';
9
9
  import { backupCodeVerificationRecordDataGuard } from '../verification-records/backup-code-verification.js';
10
- import { emailCodeVerificationRecordDataGuard, phoneCodeVerificationRecordDataGuard, } from '../verification-records/code-verification.js';
10
+ import { emailCodeVerificationRecordDataGuard, mfaEmailCodeVerificationRecordDataGuard, mfaPhoneCodeVerificationRecordDataGuard, phoneCodeVerificationRecordDataGuard, } from '../verification-records/code-verification.js';
11
11
  import { enterpriseSsoVerificationRecordDataGuard } from '../verification-records/enterprise-sso-verification.js';
12
12
  import { newPasswordIdentityVerificationRecordDataGuard } from '../verification-records/new-password-identity-verification.js';
13
13
  import { oneTimeTokenVerificationRecordDataGuard } from '../verification-records/one-time-token-verification.js';
14
14
  import { passwordVerificationRecordDataGuard } from '../verification-records/password-verification.js';
15
15
  import { socialVerificationRecordDataGuard } from '../verification-records/social-verification.js';
16
16
  import { totpVerificationRecordDataGuard } from '../verification-records/totp-verification.js';
17
- import { webAuthnVerificationRecordDataGuard, signInWebAuthnVerificationRecordDataGuard, } from '../verification-records/web-authn-verification.js';
17
+ import { webAuthnVerificationRecordDataGuard, signInPasskeyVerificationRecordDataGuard, } from '../verification-records/web-authn-verification.js';
18
18
  import { accessTokenPayloadGuard, clientCredentialsPayloadGuard } from './oidc-provider.js';
19
19
  export const jwtCustomizerGuard = z.object({
20
20
  script: z.string(),
21
21
  environmentVariables: z.record(z.string()).optional(),
22
22
  contextSample: jsonObjectGuard.optional(),
23
+ blockIssuanceOnError: z.boolean().optional(),
23
24
  });
24
25
  export var LogtoJwtTokenKeyType;
25
26
  (function (LogtoJwtTokenKeyType) {
@@ -59,6 +60,8 @@ const jwtCustomizerUserInteractionVerificationRecordGuard = z.discriminatedUnion
59
60
  passwordVerificationRecordDataGuard,
60
61
  emailCodeVerificationRecordDataGuard,
61
62
  phoneCodeVerificationRecordDataGuard,
63
+ mfaEmailCodeVerificationRecordDataGuard,
64
+ mfaPhoneCodeVerificationRecordDataGuard,
62
65
  socialVerificationRecordDataGuard.omit({
63
66
  connectorSession: true,
64
67
  encryptedTokenSet: true,
@@ -85,7 +88,7 @@ const jwtCustomizerUserInteractionVerificationRecordGuard = z.discriminatedUnion
85
88
  authenticationChallenge: true,
86
89
  registrationInfo: true,
87
90
  }),
88
- signInWebAuthnVerificationRecordDataGuard.omit({
91
+ signInPasskeyVerificationRecordDataGuard.omit({
89
92
  registrationChallenge: true,
90
93
  authenticationChallenge: true,
91
94
  registrationInfo: true,
@@ -97,6 +100,8 @@ const jwtCustomizerUserInteractionVerificationRecordGuard = z.discriminatedUnion
97
100
  passwordEncryptionMethod: true,
98
101
  }),
99
102
  ]);
103
+ // This is to ensure that all the verification types are covered in the `jwtCustomizerUserInteractionVerificationRecordGuard`.
104
+ const _jwtCustomizerUserInteractionVerificationRecordTypeCoverage = true;
100
105
  export const jwtCustomizerUserInteractionContextGuard = z.object({
101
106
  interactionEvent: z.nativeEnum(InteractionEvent),
102
107
  userId: z.string(),
@@ -1,9 +1,20 @@
1
1
  import { pick } from '@silverhand/essentials';
2
2
  import { describe, expect, it } from 'vitest';
3
3
  import { accessTokenJwtCustomizerGuard, clientCredentialsJwtCustomizerGuard, } from './jwt-customizer.js';
4
- const allFields = ['script', 'environmentVariables', 'contextSample', 'tokenSample'];
4
+ const allFields = [
5
+ 'script',
6
+ 'environmentVariables',
7
+ 'contextSample',
8
+ 'tokenSample',
9
+ 'blockIssuanceOnError',
10
+ ];
5
11
  const requiredFields = ['script'];
6
- const optionalFields = ['environmentVariables', 'contextSample', 'tokenSample'];
12
+ const optionalFields = [
13
+ 'environmentVariables',
14
+ 'contextSample',
15
+ 'tokenSample',
16
+ 'blockIssuanceOnError',
17
+ ];
7
18
  const testClientCredentialsTokenPayload = {
8
19
  script: '',
9
20
  environmentVariables: {},
@@ -14,6 +25,7 @@ const testClientCredentialsTokenPayload = {
14
25
  },
15
26
  },
16
27
  tokenSample: {},
28
+ blockIssuanceOnError: false,
17
29
  };
18
30
  const testAccessTokenPayload = {
19
31
  ...testClientCredentialsTokenPayload,
@@ -9,5 +9,6 @@ export declare enum GrantType {
9
9
  AuthorizationCode = "authorization_code",
10
10
  RefreshToken = "refresh_token",
11
11
  ClientCredentials = "client_credentials",
12
- TokenExchange = "urn:ietf:params:oauth:grant-type:token-exchange"
12
+ TokenExchange = "urn:ietf:params:oauth:grant-type:token-exchange",
13
+ DeviceCode = "urn:ietf:params:oauth:grant-type:device_code"
13
14
  }
@@ -4,4 +4,5 @@ export var GrantType;
4
4
  GrantType["RefreshToken"] = "refresh_token";
5
5
  GrantType["ClientCredentials"] = "client_credentials";
6
6
  GrantType["TokenExchange"] = "urn:ietf:params:oauth:grant-type:token-exchange";
7
+ GrantType["DeviceCode"] = "urn:ietf:params:oauth:grant-type:device_code";
7
8
  })(GrantType || (GrantType = {}));
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  export declare const userOnboardingDataKey = "onboarding";
3
+ export declare const ossUserOnboardingDataKey = "ossOnboarding";
3
4
  export declare enum Project {
4
5
  Personal = "personal",
5
6
  Company = "company"
@@ -18,7 +19,6 @@ export declare enum Title {
18
19
  Product = "product",
19
20
  Others = "others"
20
21
  }
21
- /** @deprecated */
22
22
  export declare enum CompanySize {
23
23
  Scale1 = "1",
24
24
  Scale2 = "2-49",
@@ -81,6 +81,52 @@ declare const questionnaireGuard: z.ZodObject<{
81
81
  additionalFeatures?: AdditionalFeatures[] | undefined;
82
82
  }>;
83
83
  export type Questionnaire = z.infer<typeof questionnaireGuard>;
84
+ declare const ossQuestionnaireGuard: z.ZodObject<{
85
+ emailAddress: z.ZodOptional<z.ZodString>;
86
+ newsletter: z.ZodOptional<z.ZodBoolean>;
87
+ project: z.ZodOptional<z.ZodNativeEnum<typeof Project>>;
88
+ projectName: z.ZodOptional<z.ZodString>;
89
+ companyName: z.ZodOptional<z.ZodString>;
90
+ companySize: z.ZodOptional<z.ZodNativeEnum<typeof CompanySize>>;
91
+ }, "strip", z.ZodTypeAny, {
92
+ project?: Project | undefined;
93
+ companyName?: string | undefined;
94
+ companySize?: CompanySize | undefined;
95
+ emailAddress?: string | undefined;
96
+ newsletter?: boolean | undefined;
97
+ projectName?: string | undefined;
98
+ }, {
99
+ project?: Project | undefined;
100
+ companyName?: string | undefined;
101
+ companySize?: CompanySize | undefined;
102
+ emailAddress?: string | undefined;
103
+ newsletter?: boolean | undefined;
104
+ projectName?: string | undefined;
105
+ }>;
106
+ export type OssQuestionnaire = z.infer<typeof ossQuestionnaireGuard>;
107
+ export declare const ossSurveyReportPayloadGuard: z.ZodObject<{
108
+ emailAddress: z.ZodString;
109
+ newsletter: z.ZodOptional<z.ZodBoolean>;
110
+ project: z.ZodNativeEnum<typeof Project>;
111
+ projectName: z.ZodOptional<z.ZodString>;
112
+ companyName: z.ZodOptional<z.ZodString>;
113
+ companySize: z.ZodOptional<z.ZodNativeEnum<typeof CompanySize>>;
114
+ }, "strip", z.ZodTypeAny, {
115
+ project: Project;
116
+ emailAddress: string;
117
+ companyName?: string | undefined;
118
+ companySize?: CompanySize | undefined;
119
+ newsletter?: boolean | undefined;
120
+ projectName?: string | undefined;
121
+ }, {
122
+ project: Project;
123
+ emailAddress: string;
124
+ companyName?: string | undefined;
125
+ companySize?: CompanySize | undefined;
126
+ newsletter?: boolean | undefined;
127
+ projectName?: string | undefined;
128
+ }>;
129
+ export type OssSurveyReportPayload = z.infer<typeof ossSurveyReportPayloadGuard>;
84
130
  export declare const userOnboardingDataGuard: z.ZodObject<{
85
131
  questionnaire: z.ZodOptional<z.ZodObject<{
86
132
  project: z.ZodOptional<z.ZodNativeEnum<typeof Project>>;
@@ -141,4 +187,50 @@ export declare const userOnboardingDataGuard: z.ZodObject<{
141
187
  isOnboardingDone?: boolean | undefined;
142
188
  }>;
143
189
  export type UserOnboardingData = z.infer<typeof userOnboardingDataGuard>;
190
+ export declare const ossUserOnboardingDataGuard: z.ZodObject<{
191
+ questionnaire: z.ZodOptional<z.ZodObject<{
192
+ emailAddress: z.ZodOptional<z.ZodString>;
193
+ newsletter: z.ZodOptional<z.ZodBoolean>;
194
+ project: z.ZodOptional<z.ZodNativeEnum<typeof Project>>;
195
+ projectName: z.ZodOptional<z.ZodString>;
196
+ companyName: z.ZodOptional<z.ZodString>;
197
+ companySize: z.ZodOptional<z.ZodNativeEnum<typeof CompanySize>>;
198
+ }, "strip", z.ZodTypeAny, {
199
+ project?: Project | undefined;
200
+ companyName?: string | undefined;
201
+ companySize?: CompanySize | undefined;
202
+ emailAddress?: string | undefined;
203
+ newsletter?: boolean | undefined;
204
+ projectName?: string | undefined;
205
+ }, {
206
+ project?: Project | undefined;
207
+ companyName?: string | undefined;
208
+ companySize?: CompanySize | undefined;
209
+ emailAddress?: string | undefined;
210
+ newsletter?: boolean | undefined;
211
+ projectName?: string | undefined;
212
+ }>>;
213
+ isOnboardingDone: z.ZodOptional<z.ZodBoolean>;
214
+ }, "strip", z.ZodTypeAny, {
215
+ questionnaire?: {
216
+ project?: Project | undefined;
217
+ companyName?: string | undefined;
218
+ companySize?: CompanySize | undefined;
219
+ emailAddress?: string | undefined;
220
+ newsletter?: boolean | undefined;
221
+ projectName?: string | undefined;
222
+ } | undefined;
223
+ isOnboardingDone?: boolean | undefined;
224
+ }, {
225
+ questionnaire?: {
226
+ project?: Project | undefined;
227
+ companyName?: string | undefined;
228
+ companySize?: CompanySize | undefined;
229
+ emailAddress?: string | undefined;
230
+ newsletter?: boolean | undefined;
231
+ projectName?: string | undefined;
232
+ } | undefined;
233
+ isOnboardingDone?: boolean | undefined;
234
+ }>;
235
+ export type OssUserOnboardingData = z.infer<typeof ossUserOnboardingDataGuard>;
144
236
  export {};
@@ -1,5 +1,6 @@
1
1
  import { z } from 'zod';
2
2
  export const userOnboardingDataKey = 'onboarding';
3
+ export const ossUserOnboardingDataKey = 'ossOnboarding';
3
4
  export var Project;
4
5
  (function (Project) {
5
6
  Project["Personal"] = "personal";
@@ -21,7 +22,6 @@ export var Title;
21
22
  Title["Product"] = "product";
22
23
  Title["Others"] = "others";
23
24
  })(Title || (Title = {}));
24
- /** @deprecated */
25
25
  export var CompanySize;
26
26
  (function (CompanySize) {
27
27
  CompanySize["Scale1"] = "1";
@@ -30,6 +30,7 @@ export var CompanySize;
30
30
  CompanySize["Scale4"] = "200-999";
31
31
  CompanySize["Scale5"] = "1000+";
32
32
  })(CompanySize || (CompanySize = {}));
33
+ // Kept as a shared enum for OSS onboarding and existing questionnaire payloads.
33
34
  /** @deprecated */
34
35
  export var Reason;
35
36
  (function (Reason) {
@@ -69,7 +70,27 @@ const questionnaireGuard = z.object({
69
70
  stage: z.nativeEnum(Stage).optional(),
70
71
  additionalFeatures: z.array(z.nativeEnum(AdditionalFeatures)).optional(),
71
72
  });
73
+ const ossQuestionnaireGuard = z.object({
74
+ emailAddress: z.string().optional(),
75
+ newsletter: z.boolean().optional(),
76
+ project: z.nativeEnum(Project).optional(),
77
+ projectName: z.string().max(200).optional(),
78
+ companyName: z.string().optional(),
79
+ companySize: z.nativeEnum(CompanySize).optional(),
80
+ });
81
+ export const ossSurveyReportPayloadGuard = z.object({
82
+ emailAddress: z.string().email().max(320),
83
+ newsletter: z.boolean().optional(),
84
+ project: z.nativeEnum(Project),
85
+ projectName: z.string().max(200).optional(),
86
+ companyName: z.string().max(200).optional(),
87
+ companySize: z.nativeEnum(CompanySize).optional(),
88
+ });
72
89
  export const userOnboardingDataGuard = z.object({
73
90
  questionnaire: questionnaireGuard.optional(),
74
91
  isOnboardingDone: z.boolean().optional(),
75
92
  });
93
+ export const ossUserOnboardingDataGuard = z.object({
94
+ questionnaire: ossQuestionnaireGuard.optional(),
95
+ isOnboardingDone: z.boolean().optional(),
96
+ });
@@ -63,10 +63,10 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
63
63
  hideLogtoBranding: z.ZodType<boolean, z.ZodTypeDef, boolean>;
64
64
  languageInfo: z.ZodType<{
65
65
  autoDetect: boolean;
66
- fallbackLanguage: "af-ZA" | "am-ET" | "ar" | "ar-AR" | "as-IN" | "az-AZ" | "be-BY" | "bg-BG" | "bn-IN" | "br-FR" | "bs-BA" | "ca-ES" | "cb-IQ" | "co-FR" | "cs-CZ" | "cx-PH" | "cy-GB" | "da-DK" | "de" | "de-DE" | "el-GR" | "en" | "en-GB" | "en-US" | "eo-EO" | "es" | "es-ES" | "es-419" | "et-EE" | "eu-ES" | "fa-IR" | "ff-NG" | "fi" | "fi-FI" | "fo-FO" | "fr" | "fr-CA" | "fr-FR" | "fy-NL" | "ga-IE" | "gl-ES" | "gn-PY" | "gu-IN" | "ha-NG" | "he-IL" | "hi-IN" | "hr-HR" | "ht-HT" | "hu-HU" | "hy-AM" | "id-ID" | "ik-US" | "is-IS" | "it" | "it-IT" | "iu-CA" | "ja" | "ja-JP" | "ja-KS" | "jv-ID" | "ka-GE" | "kk-KZ" | "km-KH" | "kn-IN" | "ko" | "ko-KR" | "ku-TR" | "ky-KG" | "lo-LA" | "lt-LT" | "lv-LV" | "mg-MG" | "mk-MK" | "ml-IN" | "mn-MN" | "mr-IN" | "ms-MY" | "mt-MT" | "my-MM" | "nb-NO" | "ne-NP" | "nl" | "nl-BE" | "nl-NL" | "nn-NO" | "or-IN" | "pa-IN" | "pl-PL" | "ps-AF" | "pt" | "pt-BR" | "pt-PT" | "ro-RO" | "ru" | "ru-RU" | "rw-RW" | "sc-IT" | "si-LK" | "sk-SK" | "sl-SI" | "sn-ZW" | "sq-AL" | "sr-RS" | "sv" | "sv-SE" | "sw-KE" | "sy-SY" | "sz-PL" | "ta-IN" | "te-IN" | "tg-TJ" | "th" | "th-TH" | "tl-PH" | "tr" | "tr-TR" | "tt-RU" | "tz-MA" | "uk-UA" | "ur-PK" | "uz-UZ" | "vi-VN" | "zh" | "zh-CN" | "zh-HK" | "zh-MO" | "zh-TW" | "zz-TR";
66
+ fallbackLanguage: "af-ZA" | "am-ET" | "ar" | "ar-AR" | "as-IN" | "az-AZ" | "be-BY" | "bg-BG" | "bn-IN" | "br-FR" | "bs-BA" | "ca-ES" | "cb-IQ" | "co-FR" | "cs" | "cs-CZ" | "cx-PH" | "cy-GB" | "da-DK" | "de" | "de-DE" | "el-GR" | "en" | "en-GB" | "en-US" | "eo-EO" | "es" | "es-ES" | "es-419" | "et-EE" | "eu-ES" | "fa-IR" | "ff-NG" | "fi" | "fi-FI" | "fo-FO" | "fr" | "fr-CA" | "fr-FR" | "fy-NL" | "ga-IE" | "gl-ES" | "gn-PY" | "gu-IN" | "ha-NG" | "he-IL" | "hi-IN" | "hr-HR" | "ht-HT" | "hu-HU" | "hy-AM" | "id-ID" | "ik-US" | "is-IS" | "it" | "it-IT" | "iu-CA" | "ja" | "ja-JP" | "ja-KS" | "jv-ID" | "ka-GE" | "kk-KZ" | "km-KH" | "kn-IN" | "ko" | "ko-KR" | "ku-TR" | "ky-KG" | "lo-LA" | "lt-LT" | "lv-LV" | "mg-MG" | "mk-MK" | "ml-IN" | "mn-MN" | "mr-IN" | "ms-MY" | "mt-MT" | "my-MM" | "nb-NO" | "ne-NP" | "nl" | "nl-BE" | "nl-NL" | "nn-NO" | "or-IN" | "pa-IN" | "pl-PL" | "ps-AF" | "pt" | "pt-BR" | "pt-PT" | "ro-RO" | "ru" | "ru-RU" | "rw-RW" | "sc-IT" | "si-LK" | "sk-SK" | "sl-SI" | "sn-ZW" | "sq-AL" | "sr-RS" | "sv" | "sv-SE" | "sw-KE" | "sy-SY" | "sz-PL" | "ta-IN" | "te-IN" | "tg-TJ" | "th" | "th-TH" | "tl-PH" | "tr" | "tr-TR" | "tt-RU" | "tz-MA" | "uk-UA" | "ur-PK" | "uz-UZ" | "vi-VN" | "zh" | "zh-CN" | "zh-HK" | "zh-MO" | "zh-TW" | "zz-TR";
67
67
  }, z.ZodTypeDef, {
68
68
  autoDetect: boolean;
69
- fallbackLanguage: "af-ZA" | "am-ET" | "ar" | "ar-AR" | "as-IN" | "az-AZ" | "be-BY" | "bg-BG" | "bn-IN" | "br-FR" | "bs-BA" | "ca-ES" | "cb-IQ" | "co-FR" | "cs-CZ" | "cx-PH" | "cy-GB" | "da-DK" | "de" | "de-DE" | "el-GR" | "en" | "en-GB" | "en-US" | "eo-EO" | "es" | "es-ES" | "es-419" | "et-EE" | "eu-ES" | "fa-IR" | "ff-NG" | "fi" | "fi-FI" | "fo-FO" | "fr" | "fr-CA" | "fr-FR" | "fy-NL" | "ga-IE" | "gl-ES" | "gn-PY" | "gu-IN" | "ha-NG" | "he-IL" | "hi-IN" | "hr-HR" | "ht-HT" | "hu-HU" | "hy-AM" | "id-ID" | "ik-US" | "is-IS" | "it" | "it-IT" | "iu-CA" | "ja" | "ja-JP" | "ja-KS" | "jv-ID" | "ka-GE" | "kk-KZ" | "km-KH" | "kn-IN" | "ko" | "ko-KR" | "ku-TR" | "ky-KG" | "lo-LA" | "lt-LT" | "lv-LV" | "mg-MG" | "mk-MK" | "ml-IN" | "mn-MN" | "mr-IN" | "ms-MY" | "mt-MT" | "my-MM" | "nb-NO" | "ne-NP" | "nl" | "nl-BE" | "nl-NL" | "nn-NO" | "or-IN" | "pa-IN" | "pl-PL" | "ps-AF" | "pt" | "pt-BR" | "pt-PT" | "ro-RO" | "ru" | "ru-RU" | "rw-RW" | "sc-IT" | "si-LK" | "sk-SK" | "sl-SI" | "sn-ZW" | "sq-AL" | "sr-RS" | "sv" | "sv-SE" | "sw-KE" | "sy-SY" | "sz-PL" | "ta-IN" | "te-IN" | "tg-TJ" | "th" | "th-TH" | "tl-PH" | "tr" | "tr-TR" | "tt-RU" | "tz-MA" | "uk-UA" | "ur-PK" | "uz-UZ" | "vi-VN" | "zh" | "zh-CN" | "zh-HK" | "zh-MO" | "zh-TW" | "zz-TR";
69
+ fallbackLanguage: "af-ZA" | "am-ET" | "ar" | "ar-AR" | "as-IN" | "az-AZ" | "be-BY" | "bg-BG" | "bn-IN" | "br-FR" | "bs-BA" | "ca-ES" | "cb-IQ" | "co-FR" | "cs" | "cs-CZ" | "cx-PH" | "cy-GB" | "da-DK" | "de" | "de-DE" | "el-GR" | "en" | "en-GB" | "en-US" | "eo-EO" | "es" | "es-ES" | "es-419" | "et-EE" | "eu-ES" | "fa-IR" | "ff-NG" | "fi" | "fi-FI" | "fo-FO" | "fr" | "fr-CA" | "fr-FR" | "fy-NL" | "ga-IE" | "gl-ES" | "gn-PY" | "gu-IN" | "ha-NG" | "he-IL" | "hi-IN" | "hr-HR" | "ht-HT" | "hu-HU" | "hy-AM" | "id-ID" | "ik-US" | "is-IS" | "it" | "it-IT" | "iu-CA" | "ja" | "ja-JP" | "ja-KS" | "jv-ID" | "ka-GE" | "kk-KZ" | "km-KH" | "kn-IN" | "ko" | "ko-KR" | "ku-TR" | "ky-KG" | "lo-LA" | "lt-LT" | "lv-LV" | "mg-MG" | "mk-MK" | "ml-IN" | "mn-MN" | "mr-IN" | "ms-MY" | "mt-MT" | "my-MM" | "nb-NO" | "ne-NP" | "nl" | "nl-BE" | "nl-NL" | "nn-NO" | "or-IN" | "pa-IN" | "pl-PL" | "ps-AF" | "pt" | "pt-BR" | "pt-PT" | "ro-RO" | "ru" | "ru-RU" | "rw-RW" | "sc-IT" | "si-LK" | "sk-SK" | "sl-SI" | "sn-ZW" | "sq-AL" | "sr-RS" | "sv" | "sv-SE" | "sw-KE" | "sy-SY" | "sz-PL" | "ta-IN" | "te-IN" | "tg-TJ" | "th" | "th-TH" | "tl-PH" | "tr" | "tr-TR" | "tt-RU" | "tz-MA" | "uk-UA" | "ur-PK" | "uz-UZ" | "vi-VN" | "zh" | "zh-CN" | "zh-HK" | "zh-MO" | "zh-TW" | "zz-TR";
70
70
  }>;
71
71
  termsOfUseUrl: z.ZodType<string | null, z.ZodTypeDef, string | null>;
72
72
  privacyPolicyUrl: z.ZodType<string | null, z.ZodTypeDef, string | null>;
@@ -143,6 +143,11 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
143
143
  emailBlocklistPolicy: z.ZodType<import("../foundations/jsonb-types/sign-in-experience.js").EmailBlocklistPolicy, z.ZodTypeDef, import("../foundations/jsonb-types/sign-in-experience.js").EmailBlocklistPolicy>;
144
144
  forgotPasswordMethods: z.ZodType<import("../foundations/jsonb-types/sign-in-experience.js").ForgotPasswordMethod[] | null, z.ZodTypeDef, import("../foundations/jsonb-types/sign-in-experience.js").ForgotPasswordMethod[] | null>;
145
145
  passkeySignIn: z.ZodType<import("../foundations/jsonb-types/sign-in-experience.js").PasskeySignIn, z.ZodTypeDef, import("../foundations/jsonb-types/sign-in-experience.js").PasskeySignIn>;
146
+ signUpProfileFields: z.ZodType<{
147
+ name: string;
148
+ }[] | null, z.ZodTypeDef, {
149
+ name: string;
150
+ }[] | null>;
146
151
  }, "forgotPasswordMethods"> & {
147
152
  socialConnectors: z.ZodArray<z.ZodObject<Omit<{
148
153
  id: z.ZodString;
@@ -362,6 +367,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
362
367
  "ca-ES"?: string | undefined;
363
368
  "cb-IQ"?: string | undefined;
364
369
  "co-FR"?: string | undefined;
370
+ cs?: string | undefined;
365
371
  "cs-CZ"?: string | undefined;
366
372
  "cx-PH"?: string | undefined;
367
373
  "cy-GB"?: string | undefined;
@@ -502,6 +508,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
502
508
  "ca-ES"?: string | undefined;
503
509
  "cb-IQ"?: string | undefined;
504
510
  "co-FR"?: string | undefined;
511
+ cs?: string | undefined;
505
512
  "cs-CZ"?: string | undefined;
506
513
  "cx-PH"?: string | undefined;
507
514
  "cy-GB"?: string | undefined;
@@ -696,9 +703,9 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
696
703
  id: string;
697
704
  tenantId: string;
698
705
  mfa: import("../foundations/jsonb-types/sign-in-experience.js").Mfa;
706
+ customCss: string | null;
699
707
  color: import("../foundations/jsonb-types/sign-in-experience.js").Color;
700
708
  branding: import("../foundations/jsonb-types/sign-in-experience.js").Branding;
701
- customCss: string | null;
702
709
  termsOfUseUrl: string | null;
703
710
  privacyPolicyUrl: string | null;
704
711
  hideLogtoBranding: boolean;
@@ -721,6 +728,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
721
728
  sentinelPolicy: import("../foundations/jsonb-types/sign-in-experience.js").SentinelPolicy;
722
729
  emailBlocklistPolicy: import("../foundations/jsonb-types/sign-in-experience.js").EmailBlocklistPolicy;
723
730
  passkeySignIn: import("../foundations/jsonb-types/sign-in-experience.js").PasskeySignIn;
731
+ signUpProfileFields: import("../foundations/jsonb-types/sign-in-experience.js").SignUpProfileFields | null;
724
732
  socialConnectors: {
725
733
  name: {
726
734
  en: string;
@@ -739,6 +747,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
739
747
  "ca-ES"?: string | undefined;
740
748
  "cb-IQ"?: string | undefined;
741
749
  "co-FR"?: string | undefined;
750
+ cs?: string | undefined;
742
751
  "cs-CZ"?: string | undefined;
743
752
  "cx-PH"?: string | undefined;
744
753
  "cy-GB"?: string | undefined;
@@ -892,9 +901,9 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
892
901
  id: string;
893
902
  tenantId: string;
894
903
  mfa: import("../foundations/jsonb-types/sign-in-experience.js").Mfa;
904
+ customCss: string | null;
895
905
  color: import("../foundations/jsonb-types/sign-in-experience.js").Color;
896
906
  branding: import("../foundations/jsonb-types/sign-in-experience.js").Branding;
897
- customCss: string | null;
898
907
  termsOfUseUrl: string | null;
899
908
  privacyPolicyUrl: string | null;
900
909
  hideLogtoBranding: boolean;
@@ -917,6 +926,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
917
926
  sentinelPolicy: import("../foundations/jsonb-types/sign-in-experience.js").SentinelPolicy;
918
927
  emailBlocklistPolicy: import("../foundations/jsonb-types/sign-in-experience.js").EmailBlocklistPolicy;
919
928
  passkeySignIn: import("../foundations/jsonb-types/sign-in-experience.js").PasskeySignIn;
929
+ signUpProfileFields: import("../foundations/jsonb-types/sign-in-experience.js").SignUpProfileFields | null;
920
930
  socialConnectors: {
921
931
  name: {
922
932
  en: string;
@@ -935,6 +945,7 @@ export declare const fullSignInExperienceGuard: z.ZodObject<Omit<{
935
945
  "ca-ES"?: string | undefined;
936
946
  "cb-IQ"?: string | undefined;
937
947
  "co-FR"?: string | undefined;
948
+ cs?: string | undefined;
938
949
  "cs-CZ"?: string | undefined;
939
950
  "cx-PH"?: string | undefined;
940
951
  "cy-GB"?: string | undefined;
@@ -8,10 +8,23 @@ export declare const userPasskeySignInDataKey = "passkey_sign_in";
8
8
  * Schema for MFA-related data stored in user's logto_config
9
9
  */
10
10
  export declare const userMfaDataGuard: z.ZodObject<{
11
+ /**
12
+ * Whether the user has actively enabled/bound MFA factors
13
+ *
14
+ * Note: The `undefined` value indicates that a new user has never made a choice on enabling the optional MFA; or an
15
+ * existing user data was created before the introduction of this field, so the MFA enabled state is unknown. We need
16
+ * to check extra conditions to determine it when the user submits the experience interaction.
17
+ * @see {@link @logto/core/packages/core/src/routes/experience/classes/mfa.ts#assertOptionalMfaEnablement}
18
+ */
19
+ enabled: z.ZodOptional<z.ZodBoolean>;
11
20
  /**
12
21
  * Whether the user has skipped MFA binding flow
13
22
  */
14
23
  skipped: z.ZodOptional<z.ZodBoolean>;
24
+ /**
25
+ * Whether the user has skipped optional additional MFA binding suggestion
26
+ */
27
+ additionalBindingSuggestionSkipped: z.ZodOptional<z.ZodBoolean>;
15
28
  /**
16
29
  * Whether the user has skipped MFA verification on sign-in
17
30
  *
@@ -20,10 +33,14 @@ export declare const userMfaDataGuard: z.ZodObject<{
20
33
  */
21
34
  skipMfaOnSignIn: z.ZodOptional<z.ZodBoolean>;
22
35
  }, "strip", z.ZodTypeAny, {
36
+ enabled?: boolean | undefined;
23
37
  skipped?: boolean | undefined;
38
+ additionalBindingSuggestionSkipped?: boolean | undefined;
24
39
  skipMfaOnSignIn?: boolean | undefined;
25
40
  }, {
41
+ enabled?: boolean | undefined;
26
42
  skipped?: boolean | undefined;
43
+ additionalBindingSuggestionSkipped?: boolean | undefined;
27
44
  skipMfaOnSignIn?: boolean | undefined;
28
45
  }>;
29
46
  export type UserMfaData = z.infer<typeof userMfaDataGuard>;
@@ -41,15 +58,39 @@ export declare const userPasskeySignInDataGuard: z.ZodObject<{
41
58
  skipped?: boolean | undefined;
42
59
  }>;
43
60
  export type UserPasskeySignInData = z.infer<typeof userPasskeySignInDataGuard>;
61
+ /**
62
+ * Schema for the MFA settings API response (GET/PATCH /api/my-account/mfa-settings)
63
+ */
64
+ export declare const userMfaSettingsResponseGuard: z.ZodObject<{
65
+ skipMfaOnSignIn: z.ZodBoolean;
66
+ }, "strip", z.ZodTypeAny, {
67
+ skipMfaOnSignIn: boolean;
68
+ }, {
69
+ skipMfaOnSignIn: boolean;
70
+ }>;
71
+ export type UserMfaSettingsResponse = z.infer<typeof userMfaSettingsResponseGuard>;
44
72
  /**
45
73
  * Schema for user's logto_config field
46
74
  */
47
75
  export declare const userLogtoConfigGuard: z.ZodObject<{
48
76
  mfa: z.ZodOptional<z.ZodObject<{
77
+ /**
78
+ * Whether the user has actively enabled/bound MFA factors
79
+ *
80
+ * Note: The `undefined` value indicates that a new user has never made a choice on enabling the optional MFA; or an
81
+ * existing user data was created before the introduction of this field, so the MFA enabled state is unknown. We need
82
+ * to check extra conditions to determine it when the user submits the experience interaction.
83
+ * @see {@link @logto/core/packages/core/src/routes/experience/classes/mfa.ts#assertOptionalMfaEnablement}
84
+ */
85
+ enabled: z.ZodOptional<z.ZodBoolean>;
49
86
  /**
50
87
  * Whether the user has skipped MFA binding flow
51
88
  */
52
89
  skipped: z.ZodOptional<z.ZodBoolean>;
90
+ /**
91
+ * Whether the user has skipped optional additional MFA binding suggestion
92
+ */
93
+ additionalBindingSuggestionSkipped: z.ZodOptional<z.ZodBoolean>;
53
94
  /**
54
95
  * Whether the user has skipped MFA verification on sign-in
55
96
  *
@@ -58,10 +99,14 @@ export declare const userLogtoConfigGuard: z.ZodObject<{
58
99
  */
59
100
  skipMfaOnSignIn: z.ZodOptional<z.ZodBoolean>;
60
101
  }, "strip", z.ZodTypeAny, {
102
+ enabled?: boolean | undefined;
61
103
  skipped?: boolean | undefined;
104
+ additionalBindingSuggestionSkipped?: boolean | undefined;
62
105
  skipMfaOnSignIn?: boolean | undefined;
63
106
  }, {
107
+ enabled?: boolean | undefined;
64
108
  skipped?: boolean | undefined;
109
+ additionalBindingSuggestionSkipped?: boolean | undefined;
65
110
  skipMfaOnSignIn?: boolean | undefined;
66
111
  }>>;
67
112
  passkey_sign_in: z.ZodOptional<z.ZodObject<{
@@ -76,7 +121,9 @@ export declare const userLogtoConfigGuard: z.ZodObject<{
76
121
  }>>;
77
122
  }, "strip", z.ZodTypeAny, {
78
123
  mfa?: {
124
+ enabled?: boolean | undefined;
79
125
  skipped?: boolean | undefined;
126
+ additionalBindingSuggestionSkipped?: boolean | undefined;
80
127
  skipMfaOnSignIn?: boolean | undefined;
81
128
  } | undefined;
82
129
  passkey_sign_in?: {
@@ -84,7 +131,9 @@ export declare const userLogtoConfigGuard: z.ZodObject<{
84
131
  } | undefined;
85
132
  }, {
86
133
  mfa?: {
134
+ enabled?: boolean | undefined;
87
135
  skipped?: boolean | undefined;
136
+ additionalBindingSuggestionSkipped?: boolean | undefined;
88
137
  skipMfaOnSignIn?: boolean | undefined;
89
138
  } | undefined;
90
139
  passkey_sign_in?: {
@@ -11,10 +11,23 @@ export const userPasskeySignInDataKey = 'passkey_sign_in';
11
11
  * Schema for MFA-related data stored in user's logto_config
12
12
  */
13
13
  export const userMfaDataGuard = z.object({
14
+ /**
15
+ * Whether the user has actively enabled/bound MFA factors
16
+ *
17
+ * Note: The `undefined` value indicates that a new user has never made a choice on enabling the optional MFA; or an
18
+ * existing user data was created before the introduction of this field, so the MFA enabled state is unknown. We need
19
+ * to check extra conditions to determine it when the user submits the experience interaction.
20
+ * @see {@link @logto/core/packages/core/src/routes/experience/classes/mfa.ts#assertOptionalMfaEnablement}
21
+ */
22
+ enabled: z.boolean().optional(),
14
23
  /**
15
24
  * Whether the user has skipped MFA binding flow
16
25
  */
17
26
  skipped: z.boolean().optional(),
27
+ /**
28
+ * Whether the user has skipped optional additional MFA binding suggestion
29
+ */
30
+ additionalBindingSuggestionSkipped: z.boolean().optional(),
18
31
  /**
19
32
  * Whether the user has skipped MFA verification on sign-in
20
33
  *
@@ -32,6 +45,12 @@ export const userPasskeySignInDataGuard = z.object({
32
45
  */
33
46
  skipped: z.boolean().optional(),
34
47
  });
48
+ /**
49
+ * Schema for the MFA settings API response (GET/PATCH /api/my-account/mfa-settings)
50
+ */
51
+ export const userMfaSettingsResponseGuard = z.object({
52
+ skipMfaOnSignIn: z.boolean(),
53
+ });
35
54
  /**
36
55
  * Schema for user's logto_config field
37
56
  */