@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.
- package/alterations/1.38.0-1772615848-add-oidc-model-instances-grant-id-partial-index.ts +26 -0
- package/alterations/1.38.0-1772619963-tune-oidc-model-instances-autovacuum.ts +28 -0
- package/alterations/1.38.0-1772621060-add-oidc-model-instances-grant-account-id-index.ts +26 -0
- package/alterations/1.39.0-1774752400-add-delete-account-url.ts +20 -0
- package/alterations/1.39.0-1774770686-add-account-center-custom-css.ts +20 -0
- package/alterations/1.39.0-1776502301-add-sign-up-profile-fields.ts +20 -0
- package/alterations-js/1.38.0-1772615848-add-oidc-model-instances-grant-id-partial-index.js +22 -0
- package/alterations-js/1.38.0-1772619963-tune-oidc-model-instances-autovacuum.js +24 -0
- package/alterations-js/1.38.0-1772621060-add-oidc-model-instances-grant-account-id-index.js +22 -0
- package/alterations-js/1.39.0-1774752400-add-delete-account-url.js +16 -0
- package/alterations-js/1.39.0-1774770686-add-account-center-custom-css.js +16 -0
- package/alterations-js/1.39.0-1776502301-add-sign-up-profile-fields.js +16 -0
- package/lib/consts/cookie.d.ts +1 -0
- package/lib/consts/cookie.js +1 -0
- package/lib/consts/experience.d.ts +1 -0
- package/lib/consts/experience.js +1 -0
- package/lib/consts/oidc.d.ts +3 -0
- package/lib/consts/oidc.js +3 -0
- package/lib/consts/system.d.ts +4 -0
- package/lib/consts/system.js +4 -0
- package/lib/db-entries/account-center.d.ts +9 -1
- package/lib/db-entries/account-center.js +8 -0
- package/lib/db-entries/sign-in-experience.d.ts +6 -2
- package/lib/db-entries/sign-in-experience.js +5 -1
- package/lib/foundations/jsonb-types/account-centers.d.ts +1 -0
- package/lib/foundations/jsonb-types/account-centers.js +8 -0
- package/lib/foundations/jsonb-types/oidc-module.d.ts +26 -7
- package/lib/foundations/jsonb-types/oidc-module.js +16 -1
- package/lib/foundations/jsonb-types/sign-in-experience.d.ts +36 -6
- package/lib/foundations/jsonb-types/sign-in-experience.js +10 -2
- package/lib/seeds/application.d.ts +3 -1
- package/lib/seeds/application.js +26 -1
- package/lib/types/alteration.d.ts +5 -0
- package/lib/types/application.d.ts +14 -2
- package/lib/types/connector.d.ts +8 -0
- package/lib/types/consent.d.ts +11 -3
- package/lib/types/consent.js +2 -1
- package/lib/types/custom-profile-fields.d.ts +7 -13
- package/lib/types/custom-profile-fields.js +6 -13
- package/lib/types/log/interaction.d.ts +4 -2
- package/lib/types/log/interaction.js +2 -0
- package/lib/types/log/token.d.ts +5 -3
- package/lib/types/log/token.js +2 -0
- package/lib/types/logto-config/index.d.ts +331 -15
- package/lib/types/logto-config/index.js +28 -4
- package/lib/types/logto-config/index.test.d.ts +1 -0
- package/lib/types/logto-config/index.test.js +29 -0
- package/lib/types/logto-config/jwt-customizer.d.ts +787 -253
- package/lib/types/logto-config/jwt-customizer.js +8 -3
- package/lib/types/logto-config/jwt-customizer.test.js +14 -2
- package/lib/types/oidc-config.d.ts +2 -1
- package/lib/types/oidc-config.js +1 -0
- package/lib/types/onboarding.d.ts +93 -1
- package/lib/types/onboarding.js +22 -1
- package/lib/types/sign-in-experience.d.ts +15 -4
- package/lib/types/user-logto-config.d.ts +49 -0
- package/lib/types/user-logto-config.js +19 -0
- package/lib/types/user-sessions.d.ts +712 -112
- package/lib/types/user-sessions.js +33 -2
- package/lib/types/verification-records/verification-type.d.ts +1 -1
- package/lib/types/verification-records/verification-type.js +1 -1
- package/lib/types/verification-records/web-authn-verification.d.ts +11 -11
- package/lib/types/verification-records/web-authn-verification.js +3 -3
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/utils/oidc-private-key.d.ts +88 -0
- package/lib/utils/oidc-private-key.js +163 -0
- package/lib/utils/oidc-private-key.test.d.ts +1 -0
- package/lib/utils/oidc-private-key.test.js +128 -0
- package/package.json +9 -8
- package/tables/account_centers.sql +4 -0
- package/tables/oidc_model_instances.sql +16 -0
- 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,
|
|
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
|
-
|
|
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 = [
|
|
4
|
+
const allFields = [
|
|
5
|
+
'script',
|
|
6
|
+
'environmentVariables',
|
|
7
|
+
'contextSample',
|
|
8
|
+
'tokenSample',
|
|
9
|
+
'blockIssuanceOnError',
|
|
10
|
+
];
|
|
5
11
|
const requiredFields = ['script'];
|
|
6
|
-
const optionalFields = [
|
|
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
|
}
|
package/lib/types/oidc-config.js
CHANGED
|
@@ -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 {};
|
package/lib/types/onboarding.js
CHANGED
|
@@ -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
|
*/
|