@logto/schemas 1.40.1 → 1.42.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.41.0-1779864280-add-password-expiration-policy.ts +23 -0
- package/alterations/1.41.0-1779864281-add-is-password-expired-to-users.ts +18 -0
- package/alterations/1.41.0-1780358400-drop-oidc-model-instances-legacy-grant-id-index.ts +25 -0
- package/alterations/1.41.0-1780381219-add-username-policy.ts +41 -0
- package/alterations/1.41.0-1780643665-set-sign-up-profile-fields-default.ts +20 -0
- package/alterations/1.41.0-1780906060-add-verification-code-policy.ts +19 -0
- package/alterations/1.41.0-1781689400-add-sentinel-activities-created-at-index.ts +25 -0
- package/alterations/1.41.0-1782354362-set-admin-account-center-profile-fields.ts +28 -0
- package/alterations/1.41.0-1782375106-cover-service-logs-tenant-type-index-with-created-at.ts +36 -0
- package/alterations/1.42.0-1783916980-add-domain-verification-files.ts +20 -0
- package/alterations/1.42.0-1784619793-add-service-logs-created-at-index.ts +33 -0
- package/alterations/1.42.0-1784620000-add-saml-sso-connector-signing-keys-table.ts +38 -0
- package/alterations/utils/1704934999-tables.ts +22 -1
- package/alterations-js/1.41.0-1779864280-add-password-expiration-policy.js +19 -0
- package/alterations-js/1.41.0-1779864281-add-is-password-expired-to-users.js +14 -0
- package/alterations-js/1.41.0-1780358400-drop-oidc-model-instances-legacy-grant-id-index.js +21 -0
- package/alterations-js/1.41.0-1780381219-add-username-policy.js +37 -0
- package/alterations-js/1.41.0-1780643665-set-sign-up-profile-fields-default.js +16 -0
- package/alterations-js/1.41.0-1780906060-add-verification-code-policy.js +15 -0
- package/alterations-js/1.41.0-1781689400-add-sentinel-activities-created-at-index.js +21 -0
- package/alterations-js/1.41.0-1782354362-set-admin-account-center-profile-fields.js +23 -0
- package/alterations-js/1.41.0-1782375106-cover-service-logs-tenant-type-index-with-created-at.js +32 -0
- package/alterations-js/1.42.0-1783916980-add-domain-verification-files.js +16 -0
- package/alterations-js/1.42.0-1784619793-add-service-logs-created-at-index.js +29 -0
- package/alterations-js/1.42.0-1784620000-add-saml-sso-connector-signing-keys-table.js +33 -0
- package/alterations-js/utils/1704934999-tables.js +19 -1
- package/lib/consts/experience.d.ts +3 -0
- package/lib/consts/experience.js +3 -0
- package/lib/consts/index.d.ts +2 -0
- package/lib/consts/index.js +2 -0
- package/lib/consts/message-rate-limit.d.ts +65 -0
- package/lib/consts/message-rate-limit.js +29 -0
- package/lib/consts/message-rate-limit.test.d.ts +1 -0
- package/lib/consts/message-rate-limit.test.js +20 -0
- package/lib/consts/verification-code.d.ts +10 -0
- package/lib/consts/verification-code.js +10 -0
- package/lib/db-entries/domain.d.ts +4 -2
- package/lib/db-entries/domain.js +5 -1
- package/lib/db-entries/index.d.ts +1 -0
- package/lib/db-entries/index.js +1 -0
- package/lib/db-entries/saml-sso-connector-signing-key.d.ts +32 -0
- package/lib/db-entries/saml-sso-connector-signing-key.js +49 -0
- package/lib/db-entries/sign-in-experience.d.ts +10 -4
- package/lib/db-entries/sign-in-experience.js +13 -1
- package/lib/db-entries/user.d.ts +5 -1
- package/lib/db-entries/user.js +8 -0
- package/lib/foundations/jsonb-types/account-centers.d.ts +3 -0
- package/lib/foundations/jsonb-types/account-centers.js +1 -0
- package/lib/foundations/jsonb-types/custom-domain.d.ts +57 -0
- package/lib/foundations/jsonb-types/custom-domain.js +51 -0
- package/lib/foundations/jsonb-types/custom-domain.test.d.ts +1 -0
- package/lib/foundations/jsonb-types/custom-domain.test.js +38 -0
- package/lib/foundations/jsonb-types/hooks.d.ts +4 -4
- package/lib/foundations/jsonb-types/hooks.js +2 -0
- package/lib/foundations/jsonb-types/one-time-tokens.d.ts +5 -0
- package/lib/foundations/jsonb-types/one-time-tokens.js +2 -0
- package/lib/foundations/jsonb-types/sentinel.d.ts +16 -1
- package/lib/foundations/jsonb-types/sentinel.js +15 -0
- package/lib/foundations/jsonb-types/sign-in-experience.d.ts +90 -3
- package/lib/foundations/jsonb-types/sign-in-experience.js +20 -0
- package/lib/foundations/jsonb-types/sign-in-experience.test.js +49 -1
- package/lib/foundations/jsonb-types/users.d.ts +9 -0
- package/lib/foundations/jsonb-types/users.js +1 -0
- package/lib/seeds/account-center.js +1 -0
- package/lib/seeds/sign-in-experience.js +1 -0
- package/lib/seeds/sign-in-experience.test.js +5 -1
- package/lib/types/application.d.ts +131 -1
- package/lib/types/application.js +8 -0
- package/lib/types/consent.d.ts +8 -0
- package/lib/types/custom-profile-fields.d.ts +5 -1
- package/lib/types/domain.d.ts +9 -0
- package/lib/types/hook.d.ts +9 -2
- package/lib/types/interaction-event.d.ts +11 -0
- package/lib/types/interaction-event.js +12 -0
- package/lib/types/interactions.d.ts +2 -11
- package/lib/types/interactions.js +5 -12
- package/lib/types/log/action.d.ts +7 -0
- package/lib/types/log/action.js +6 -0
- package/lib/types/log/index.d.ts +5 -2
- package/lib/types/log/index.js +1 -0
- package/lib/types/logto-config/action.d.ts +963 -0
- package/lib/types/logto-config/action.js +77 -0
- package/lib/types/logto-config/index.d.ts +91 -13
- package/lib/types/logto-config/index.js +12 -0
- package/lib/types/logto-config/index.test.js +25 -1
- package/lib/types/logto-config/jwt-customizer.d.ts +162 -1
- package/lib/types/logto-config/jwt-customizer.js +14 -0
- package/lib/types/organization.d.ts +136 -1
- package/lib/types/organization.js +3 -2
- package/lib/types/saml-application.d.ts +3 -0
- package/lib/types/saml-application.js +3 -0
- package/lib/types/sign-in-experience.d.ts +11 -4
- package/lib/types/sign-in-experience.js +1 -1
- package/lib/types/sso-connector.d.ts +58 -0
- package/lib/types/sso-connector.js +12 -0
- package/lib/types/ssr.d.ts +11 -0
- package/lib/types/user-assets.d.ts +10 -0
- package/lib/types/user-assets.js +17 -0
- package/lib/types/user-sessions.d.ts +309 -34
- package/lib/types/user-sessions.js +5 -0
- package/lib/types/user.d.ts +15 -0
- package/lib/types/user.js +1 -0
- package/lib/types/verification-records/one-time-token-verification.d.ts +5 -0
- package/package.json +8 -8
- package/tables/domains.sql +1 -0
- package/tables/oidc_model_instances.sql +0 -8
- package/tables/saml_sso_connector_signing_keys.sql +21 -0
- package/tables/sentinel_activities.sql +4 -0
- package/tables/service_logs.sql +7 -2
- package/tables/sign_in_experiences.sql +15 -2
- package/tables/users.sql +7 -0
|
@@ -1,10 +1,28 @@
|
|
|
1
1
|
import { sql } from '@silverhand/slonik';
|
|
2
2
|
const getId = (value) => sql.identifier([value]);
|
|
3
|
+
/**
|
|
4
|
+
* Returns the suffix used in the base Logto role name for the current database
|
|
5
|
+
* (`logto_tenant_<suffix>`).
|
|
6
|
+
*
|
|
7
|
+
* Historically the suffix was the raw database name (which may contain hyphens). A later
|
|
8
|
+
* convention normalised it by replacing hyphens with underscores. To remain compatible with
|
|
9
|
+
* both conventions we probe `pg_roles` for the normalised name first and fall back to the
|
|
10
|
+
* raw database name for legacy installations.
|
|
11
|
+
*/
|
|
3
12
|
const getDatabaseName = async (pool) => {
|
|
4
13
|
const { currentDatabase } = await pool.one(sql `
|
|
5
14
|
select current_database();
|
|
6
15
|
`);
|
|
7
|
-
|
|
16
|
+
const normalized = currentDatabase.replaceAll('-', '_');
|
|
17
|
+
if (normalized === currentDatabase) {
|
|
18
|
+
return currentDatabase;
|
|
19
|
+
}
|
|
20
|
+
const { exists } = await pool.one(sql `
|
|
21
|
+
select exists(
|
|
22
|
+
select 1 from pg_roles where rolname = ${'logto_tenant_' + normalized}
|
|
23
|
+
) as exists;
|
|
24
|
+
`);
|
|
25
|
+
return exists ? normalized : currentDatabase;
|
|
8
26
|
};
|
|
9
27
|
/**
|
|
10
28
|
* A function to call after the table is created. It will apply the necessary row-level security
|
|
@@ -10,5 +10,8 @@ export declare const experience: Readonly<{
|
|
|
10
10
|
readonly identifierRegister: "identifier-register";
|
|
11
11
|
readonly switchAccount: "switch-account";
|
|
12
12
|
readonly oneTimeToken: "one-time-token";
|
|
13
|
+
readonly accountSuspended: "account-suspended";
|
|
13
14
|
}>;
|
|
14
15
|
}>;
|
|
16
|
+
/** `postMessage` sender tag from admin Console sign-in experience live preview. */
|
|
17
|
+
export declare const signInExperiencePreviewMessageSender = "ac_preview";
|
package/lib/consts/experience.js
CHANGED
|
@@ -9,7 +9,10 @@ const routes = Object.freeze({
|
|
|
9
9
|
identifierRegister: 'identifier-register',
|
|
10
10
|
switchAccount: 'switch-account',
|
|
11
11
|
oneTimeToken: 'one-time-token',
|
|
12
|
+
accountSuspended: 'account-suspended',
|
|
12
13
|
});
|
|
13
14
|
export const experience = Object.freeze({
|
|
14
15
|
routes,
|
|
15
16
|
});
|
|
17
|
+
/** `postMessage` sender tag from admin Console sign-in experience live preview. */
|
|
18
|
+
export const signInExperiencePreviewMessageSender = 'ac_preview';
|
package/lib/consts/index.d.ts
CHANGED
|
@@ -6,5 +6,7 @@ export * from './tenant.js';
|
|
|
6
6
|
export * from './subscriptions.js';
|
|
7
7
|
export * from './experience.js';
|
|
8
8
|
export * from './sentinel.js';
|
|
9
|
+
export * from './message-rate-limit.js';
|
|
10
|
+
export * from './verification-code.js';
|
|
9
11
|
export * from './product-event.js';
|
|
10
12
|
export * from './application.js';
|
package/lib/consts/index.js
CHANGED
|
@@ -6,5 +6,7 @@ export * from './tenant.js';
|
|
|
6
6
|
export * from './subscriptions.js';
|
|
7
7
|
export * from './experience.js';
|
|
8
8
|
export * from './sentinel.js';
|
|
9
|
+
export * from './message-rate-limit.js';
|
|
10
|
+
export * from './verification-code.js';
|
|
9
11
|
export * from './product-event.js';
|
|
10
12
|
export * from './application.js';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* System-level rate-limit policy for outbound messages (verification codes and
|
|
4
|
+
* other notifications) over email/SMS.
|
|
5
|
+
*
|
|
6
|
+
* This is intentionally separate from `SentinelPolicy`: the sentinel throttles
|
|
7
|
+
* *failed verification attempts* and is tenant-configurable (a paid security
|
|
8
|
+
* feature), whereas this throttles *successful sends* and is mandatory and
|
|
9
|
+
* system-level — it is not exposed for tenant editing.
|
|
10
|
+
*
|
|
11
|
+
* Note: a per-send cooldown is intentionally omitted here. The experience app
|
|
12
|
+
* already enforces a client-side resend cooldown, and the windowed per-recipient
|
|
13
|
+
* cap below bounds abuse for non-UI callers without risking a server/client
|
|
14
|
+
* cooldown mismatch that could reject a legitimate resend.
|
|
15
|
+
*/
|
|
16
|
+
export type MessageRateLimitPolicy = {
|
|
17
|
+
/** Rolling window, in seconds, over which the per-recipient cap is counted. */
|
|
18
|
+
sendWindow: number;
|
|
19
|
+
/** Maximum number of sends to the same recipient within `sendWindow`. */
|
|
20
|
+
maxSendsPerRecipient: number;
|
|
21
|
+
};
|
|
22
|
+
export declare const messageRateLimitPolicyGuard: z.ZodObject<{
|
|
23
|
+
sendWindow: z.ZodNumber;
|
|
24
|
+
maxSendsPerRecipient: z.ZodNumber;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
sendWindow: number;
|
|
27
|
+
maxSendsPerRecipient: number;
|
|
28
|
+
}, {
|
|
29
|
+
sendWindow: number;
|
|
30
|
+
maxSendsPerRecipient: number;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* The default message rate limit policy. Applied to every tenant and not
|
|
34
|
+
* tenant-configurable.
|
|
35
|
+
*
|
|
36
|
+
* - `sendWindow`: 600 seconds (10 minutes)
|
|
37
|
+
* - `maxSendsPerRecipient`: 10 per window
|
|
38
|
+
*
|
|
39
|
+
* The window is short and rolling on purpose: a falsely-throttled recipient
|
|
40
|
+
* regains capacity within ~10 minutes rather than being unable to receive a
|
|
41
|
+
* message for up to an hour.
|
|
42
|
+
*/
|
|
43
|
+
export declare const defaultMessageRateLimitPolicy: Readonly<{
|
|
44
|
+
sendWindow: number;
|
|
45
|
+
maxSendsPerRecipient: number;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Internal, ops-only per-tenant override of {@link defaultMessageRateLimitPolicy}. Stored under the
|
|
49
|
+
* `messageRateLimitOverride` key in `logto_configs` and not exposed by any API — it exists solely
|
|
50
|
+
* as a relief valve for a legitimately high-volume tenant that trips the system cap.
|
|
51
|
+
*
|
|
52
|
+
* Every field is optional: the effective policy is resolved per field as `override ?? system
|
|
53
|
+
* default`, so a partial override only changes the fields it sets.
|
|
54
|
+
*/
|
|
55
|
+
export declare const messageRateLimitOverrideGuard: z.ZodObject<{
|
|
56
|
+
sendWindow: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
maxSendsPerRecipient: z.ZodOptional<z.ZodNumber>;
|
|
58
|
+
}, "strip", z.ZodTypeAny, {
|
|
59
|
+
sendWindow?: number | undefined;
|
|
60
|
+
maxSendsPerRecipient?: number | undefined;
|
|
61
|
+
}, {
|
|
62
|
+
sendWindow?: number | undefined;
|
|
63
|
+
maxSendsPerRecipient?: number | undefined;
|
|
64
|
+
}>;
|
|
65
|
+
export type MessageRateLimitOverride = z.infer<typeof messageRateLimitOverrideGuard>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const messageRateLimitPolicyGuard = z.object({
|
|
3
|
+
sendWindow: z.number().int().positive(),
|
|
4
|
+
maxSendsPerRecipient: z.number().int().positive(),
|
|
5
|
+
});
|
|
6
|
+
/**
|
|
7
|
+
* The default message rate limit policy. Applied to every tenant and not
|
|
8
|
+
* tenant-configurable.
|
|
9
|
+
*
|
|
10
|
+
* - `sendWindow`: 600 seconds (10 minutes)
|
|
11
|
+
* - `maxSendsPerRecipient`: 10 per window
|
|
12
|
+
*
|
|
13
|
+
* The window is short and rolling on purpose: a falsely-throttled recipient
|
|
14
|
+
* regains capacity within ~10 minutes rather than being unable to receive a
|
|
15
|
+
* message for up to an hour.
|
|
16
|
+
*/
|
|
17
|
+
export const defaultMessageRateLimitPolicy = Object.freeze({
|
|
18
|
+
sendWindow: 600,
|
|
19
|
+
maxSendsPerRecipient: 10,
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Internal, ops-only per-tenant override of {@link defaultMessageRateLimitPolicy}. Stored under the
|
|
23
|
+
* `messageRateLimitOverride` key in `logto_configs` and not exposed by any API — it exists solely
|
|
24
|
+
* as a relief valve for a legitimately high-volume tenant that trips the system cap.
|
|
25
|
+
*
|
|
26
|
+
* Every field is optional: the effective policy is resolved per field as `override ?? system
|
|
27
|
+
* default`, so a partial override only changes the fields it sets.
|
|
28
|
+
*/
|
|
29
|
+
export const messageRateLimitOverrideGuard = messageRateLimitPolicyGuard.partial();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { defaultMessageRateLimitPolicy, messageRateLimitPolicyGuard, } from './message-rate-limit.js';
|
|
3
|
+
describe('messageRateLimitPolicyGuard', () => {
|
|
4
|
+
it('parses a valid policy', () => {
|
|
5
|
+
expect(messageRateLimitPolicyGuard.parse({ sendWindow: 3600, maxSendsPerRecipient: 5 })).toEqual({ sendWindow: 3600, maxSendsPerRecipient: 5 });
|
|
6
|
+
});
|
|
7
|
+
it('rejects a non-numeric value', () => {
|
|
8
|
+
expect(messageRateLimitPolicyGuard.safeParse({ sendWindow: '3600', maxSendsPerRecipient: 5 }).success).toBe(false);
|
|
9
|
+
});
|
|
10
|
+
it.each([
|
|
11
|
+
{ sendWindow: 0, maxSendsPerRecipient: 5 },
|
|
12
|
+
{ sendWindow: 3600, maxSendsPerRecipient: 0 },
|
|
13
|
+
{ sendWindow: 3600.5, maxSendsPerRecipient: 5 },
|
|
14
|
+
])('rejects out-of-range or fractional values %o', (policy) => {
|
|
15
|
+
expect(messageRateLimitPolicyGuard.safeParse(policy).success).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
it('accepts the default policy', () => {
|
|
18
|
+
expect(messageRateLimitPolicyGuard.parse(defaultMessageRateLimitPolicy)).toEqual(defaultMessageRateLimitPolicy);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default verification code policy.
|
|
3
|
+
*
|
|
4
|
+
* - `expirationDuration`: 600 seconds (10 minutes)
|
|
5
|
+
* - `maxRetryAttempts`: 10
|
|
6
|
+
*/
|
|
7
|
+
export declare const defaultVerificationCodePolicy: Readonly<{
|
|
8
|
+
expirationDuration: number;
|
|
9
|
+
maxRetryAttempts: number;
|
|
10
|
+
}>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DomainStatus, DomainDnsRecords, CloudflareData, GeneratedSchema } from './../foundations/index.js';
|
|
1
|
+
import { DomainStatus, DomainDnsRecords, DomainVerificationFiles, CloudflareData, GeneratedSchema } from './../foundations/index.js';
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* @remarks This is a type for database creation.
|
|
@@ -11,6 +11,7 @@ export type CreateDomain = {
|
|
|
11
11
|
status?: DomainStatus;
|
|
12
12
|
errorMessage?: string | null;
|
|
13
13
|
dnsRecords?: DomainDnsRecords;
|
|
14
|
+
verificationFiles?: DomainVerificationFiles;
|
|
14
15
|
cloudflareData?: CloudflareData | null;
|
|
15
16
|
updatedAt?: number;
|
|
16
17
|
createdAt?: number;
|
|
@@ -22,9 +23,10 @@ export type Domain = {
|
|
|
22
23
|
status: DomainStatus;
|
|
23
24
|
errorMessage: string | null;
|
|
24
25
|
dnsRecords: DomainDnsRecords;
|
|
26
|
+
verificationFiles: DomainVerificationFiles;
|
|
25
27
|
cloudflareData: CloudflareData | null;
|
|
26
28
|
updatedAt: number;
|
|
27
29
|
createdAt: number;
|
|
28
30
|
};
|
|
29
|
-
export type DomainKeys = 'tenantId' | 'id' | 'domain' | 'status' | 'errorMessage' | 'dnsRecords' | 'cloudflareData' | 'updatedAt' | 'createdAt';
|
|
31
|
+
export type DomainKeys = 'tenantId' | 'id' | 'domain' | 'status' | 'errorMessage' | 'dnsRecords' | 'verificationFiles' | 'cloudflareData' | 'updatedAt' | 'createdAt';
|
|
30
32
|
export declare const Domains: GeneratedSchema<DomainKeys, CreateDomain, Domain, 'domains', 'domain'>;
|
package/lib/db-entries/domain.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { domainStatusGuard, domainDnsRecordsGuard, cloudflareDataGuard } from './../foundations/index.js';
|
|
3
|
+
import { domainStatusGuard, domainDnsRecordsGuard, domainVerificationFilesGuard, cloudflareDataGuard } from './../foundations/index.js';
|
|
4
4
|
const createGuard = z.object({
|
|
5
5
|
tenantId: z.string().max(21).optional(),
|
|
6
6
|
id: z.string().min(1).max(21),
|
|
@@ -8,6 +8,7 @@ const createGuard = z.object({
|
|
|
8
8
|
status: domainStatusGuard.optional(),
|
|
9
9
|
errorMessage: z.string().max(1024).nullable().optional(),
|
|
10
10
|
dnsRecords: domainDnsRecordsGuard.optional(),
|
|
11
|
+
verificationFiles: domainVerificationFilesGuard.optional(),
|
|
11
12
|
cloudflareData: cloudflareDataGuard.nullable().optional(),
|
|
12
13
|
updatedAt: z.number().optional(),
|
|
13
14
|
createdAt: z.number().optional(),
|
|
@@ -19,6 +20,7 @@ const guard = z.object({
|
|
|
19
20
|
status: domainStatusGuard,
|
|
20
21
|
errorMessage: z.string().max(1024).nullable(),
|
|
21
22
|
dnsRecords: domainDnsRecordsGuard,
|
|
23
|
+
verificationFiles: domainVerificationFilesGuard,
|
|
22
24
|
cloudflareData: cloudflareDataGuard.nullable(),
|
|
23
25
|
updatedAt: z.number(),
|
|
24
26
|
createdAt: z.number(),
|
|
@@ -33,6 +35,7 @@ export const Domains = Object.freeze({
|
|
|
33
35
|
status: 'status',
|
|
34
36
|
errorMessage: 'error_message',
|
|
35
37
|
dnsRecords: 'dns_records',
|
|
38
|
+
verificationFiles: 'verification_files',
|
|
36
39
|
cloudflareData: 'cloudflare_data',
|
|
37
40
|
updatedAt: 'updated_at',
|
|
38
41
|
createdAt: 'created_at',
|
|
@@ -44,6 +47,7 @@ export const Domains = Object.freeze({
|
|
|
44
47
|
'status',
|
|
45
48
|
'errorMessage',
|
|
46
49
|
'dnsRecords',
|
|
50
|
+
'verificationFiles',
|
|
47
51
|
'cloudflareData',
|
|
48
52
|
'updatedAt',
|
|
49
53
|
'createdAt',
|
|
@@ -55,6 +55,7 @@ export * from './roles-scope.js';
|
|
|
55
55
|
export * from './saml-application-config.js';
|
|
56
56
|
export * from './saml-application-secret.js';
|
|
57
57
|
export * from './saml-application-session.js';
|
|
58
|
+
export * from './saml-sso-connector-signing-key.js';
|
|
58
59
|
export * from './scope.js';
|
|
59
60
|
export * from './secret-enterprise-sso-connector-relation.js';
|
|
60
61
|
export * from './secret-social-connector-relation.js';
|
package/lib/db-entries/index.js
CHANGED
|
@@ -56,6 +56,7 @@ export * from './roles-scope.js';
|
|
|
56
56
|
export * from './saml-application-config.js';
|
|
57
57
|
export * from './saml-application-secret.js';
|
|
58
58
|
export * from './saml-application-session.js';
|
|
59
|
+
export * from './saml-sso-connector-signing-key.js';
|
|
59
60
|
export * from './scope.js';
|
|
60
61
|
export * from './secret-enterprise-sso-connector-relation.js';
|
|
61
62
|
export * from './secret-social-connector-relation.js';
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { GeneratedSchema } from './../foundations/index.js';
|
|
2
|
+
/**
|
|
3
|
+
*
|
|
4
|
+
* @remarks This is a type for database creation.
|
|
5
|
+
* @see {@link SamlSsoConnectorSigningKey} for the original type.
|
|
6
|
+
*/
|
|
7
|
+
export type CreateSamlSsoConnectorSigningKey = {
|
|
8
|
+
id: string;
|
|
9
|
+
tenantId?: string;
|
|
10
|
+
ssoConnectorId: string;
|
|
11
|
+
/** The SP private key (plaintext PEM) used to sign the SAML AuthnRequest. Tenant-isolated by RLS and never returned by the API. */
|
|
12
|
+
privateKey: string;
|
|
13
|
+
/** The PEM-encoded self-signed SP certificate matching the private key. Public and safe to expose. */
|
|
14
|
+
certificate: string;
|
|
15
|
+
createdAt?: number;
|
|
16
|
+
expiresAt: number;
|
|
17
|
+
active: boolean;
|
|
18
|
+
};
|
|
19
|
+
export type SamlSsoConnectorSigningKey = {
|
|
20
|
+
id: string;
|
|
21
|
+
tenantId: string;
|
|
22
|
+
ssoConnectorId: string;
|
|
23
|
+
/** The SP private key (plaintext PEM) used to sign the SAML AuthnRequest. Tenant-isolated by RLS and never returned by the API. */
|
|
24
|
+
privateKey: string;
|
|
25
|
+
/** The PEM-encoded self-signed SP certificate matching the private key. Public and safe to expose. */
|
|
26
|
+
certificate: string;
|
|
27
|
+
createdAt: number;
|
|
28
|
+
expiresAt: number;
|
|
29
|
+
active: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type SamlSsoConnectorSigningKeyKeys = 'id' | 'tenantId' | 'ssoConnectorId' | 'privateKey' | 'certificate' | 'createdAt' | 'expiresAt' | 'active';
|
|
32
|
+
export declare const SamlSsoConnectorSigningKeys: GeneratedSchema<SamlSsoConnectorSigningKeyKeys, CreateSamlSsoConnectorSigningKey, SamlSsoConnectorSigningKey, 'saml_sso_connector_signing_keys', 'saml_sso_connector_signing_key'>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const createGuard = z.object({
|
|
4
|
+
id: z.string().min(1).max(21),
|
|
5
|
+
tenantId: z.string().max(21).optional(),
|
|
6
|
+
ssoConnectorId: z.string().min(1).max(128),
|
|
7
|
+
privateKey: z.string().min(1),
|
|
8
|
+
certificate: z.string().min(1),
|
|
9
|
+
createdAt: z.number().optional(),
|
|
10
|
+
expiresAt: z.number(),
|
|
11
|
+
active: z.boolean(),
|
|
12
|
+
});
|
|
13
|
+
const guard = z.object({
|
|
14
|
+
id: z.string().min(1).max(21),
|
|
15
|
+
tenantId: z.string().max(21),
|
|
16
|
+
ssoConnectorId: z.string().min(1).max(128),
|
|
17
|
+
privateKey: z.string().min(1),
|
|
18
|
+
certificate: z.string().min(1),
|
|
19
|
+
createdAt: z.number(),
|
|
20
|
+
expiresAt: z.number(),
|
|
21
|
+
active: z.boolean(),
|
|
22
|
+
});
|
|
23
|
+
export const SamlSsoConnectorSigningKeys = Object.freeze({
|
|
24
|
+
table: 'saml_sso_connector_signing_keys',
|
|
25
|
+
tableSingular: 'saml_sso_connector_signing_key',
|
|
26
|
+
fields: {
|
|
27
|
+
id: 'id',
|
|
28
|
+
tenantId: 'tenant_id',
|
|
29
|
+
ssoConnectorId: 'sso_connector_id',
|
|
30
|
+
privateKey: 'private_key',
|
|
31
|
+
certificate: 'certificate',
|
|
32
|
+
createdAt: 'created_at',
|
|
33
|
+
expiresAt: 'expires_at',
|
|
34
|
+
active: 'active',
|
|
35
|
+
},
|
|
36
|
+
fieldKeys: [
|
|
37
|
+
'id',
|
|
38
|
+
'tenantId',
|
|
39
|
+
'ssoConnectorId',
|
|
40
|
+
'privateKey',
|
|
41
|
+
'certificate',
|
|
42
|
+
'createdAt',
|
|
43
|
+
'expiresAt',
|
|
44
|
+
'active',
|
|
45
|
+
],
|
|
46
|
+
createGuard,
|
|
47
|
+
guard,
|
|
48
|
+
updateGuard: guard.partial(),
|
|
49
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Color, Branding, LanguageInfo, SignIn, SignUp, SocialSignIn, ConnectorTargets, CustomContent, CustomUiAssets, CustomUiCsp, PartialPasswordPolicy, Mfa, AdaptiveMfa, CaptchaPolicy, SentinelPolicy, EmailBlocklistPolicy, ForgotPasswordMethods, PasskeySignIn, SignUpProfileFields, GeneratedSchema } from './../foundations/index.js';
|
|
1
|
+
import { Color, Branding, LanguageInfo, SignIn, SignUp, SocialSignIn, ConnectorTargets, CustomContent, CustomUiAssets, CustomUiCsp, PartialPasswordPolicy, Mfa, AdaptiveMfa, CaptchaPolicy, SentinelPolicy, EmailBlocklistPolicy, VerificationCodePolicy, ForgotPasswordMethods, PasskeySignIn, SignUpProfileFields, PasswordExpirationPolicy, UsernamePolicy, GeneratedSchema } from './../foundations/index.js';
|
|
2
2
|
import { AgreeToTermsPolicy, SignInMode } from './custom-types.js';
|
|
3
3
|
/**
|
|
4
4
|
*
|
|
@@ -35,10 +35,13 @@ export type CreateSignInExperience = {
|
|
|
35
35
|
captchaPolicy?: CaptchaPolicy;
|
|
36
36
|
sentinelPolicy?: SentinelPolicy;
|
|
37
37
|
emailBlocklistPolicy?: EmailBlocklistPolicy;
|
|
38
|
+
verificationCodePolicy?: VerificationCodePolicy;
|
|
38
39
|
forgotPasswordMethods?: ForgotPasswordMethods | null;
|
|
39
40
|
passkeySignIn?: PasskeySignIn;
|
|
40
|
-
/** Nullable by design: null keeps legacy full-catalog behavior and []
|
|
41
|
+
/** Nullable by design: null keeps legacy full-catalog behavior, and new rows default to [] to collect no custom profile fields. */
|
|
41
42
|
signUpProfileFields?: SignUpProfileFields | null;
|
|
43
|
+
passwordExpiration?: PasswordExpirationPolicy;
|
|
44
|
+
usernamePolicy?: UsernamePolicy;
|
|
42
45
|
};
|
|
43
46
|
export type SignInExperience = {
|
|
44
47
|
tenantId: string;
|
|
@@ -70,10 +73,13 @@ export type SignInExperience = {
|
|
|
70
73
|
captchaPolicy: CaptchaPolicy;
|
|
71
74
|
sentinelPolicy: SentinelPolicy;
|
|
72
75
|
emailBlocklistPolicy: EmailBlocklistPolicy;
|
|
76
|
+
verificationCodePolicy: VerificationCodePolicy;
|
|
73
77
|
forgotPasswordMethods: ForgotPasswordMethods | null;
|
|
74
78
|
passkeySignIn: PasskeySignIn;
|
|
75
|
-
/** Nullable by design: null keeps legacy full-catalog behavior and []
|
|
79
|
+
/** Nullable by design: null keeps legacy full-catalog behavior, and new rows default to [] to collect no custom profile fields. */
|
|
76
80
|
signUpProfileFields: SignUpProfileFields | null;
|
|
81
|
+
passwordExpiration: PasswordExpirationPolicy;
|
|
82
|
+
usernamePolicy: UsernamePolicy;
|
|
77
83
|
};
|
|
78
|
-
export type SignInExperienceKeys = 'tenantId' | 'id' | 'color' | 'branding' | 'hideLogtoBranding' | 'languageInfo' | 'termsOfUseUrl' | 'privacyPolicyUrl' | 'agreeToTermsPolicy' | 'signIn' | 'signUp' | 'socialSignIn' | 'socialSignInConnectorTargets' | 'signInMode' | 'customCss' | 'customContent' | 'customUiAssets' | 'customUiCsp' | 'passwordPolicy' | 'mfa' | 'adaptiveMfa' | 'singleSignOnEnabled' | 'supportEmail' | 'supportWebsiteUrl' | 'unknownSessionRedirectUrl' | 'captchaPolicy' | 'sentinelPolicy' | 'emailBlocklistPolicy' | 'forgotPasswordMethods' | 'passkeySignIn' | 'signUpProfileFields';
|
|
84
|
+
export type SignInExperienceKeys = 'tenantId' | 'id' | 'color' | 'branding' | 'hideLogtoBranding' | 'languageInfo' | 'termsOfUseUrl' | 'privacyPolicyUrl' | 'agreeToTermsPolicy' | 'signIn' | 'signUp' | 'socialSignIn' | 'socialSignInConnectorTargets' | 'signInMode' | 'customCss' | 'customContent' | 'customUiAssets' | 'customUiCsp' | 'passwordPolicy' | 'mfa' | 'adaptiveMfa' | 'singleSignOnEnabled' | 'supportEmail' | 'supportWebsiteUrl' | 'unknownSessionRedirectUrl' | 'captchaPolicy' | 'sentinelPolicy' | 'emailBlocklistPolicy' | 'verificationCodePolicy' | 'forgotPasswordMethods' | 'passkeySignIn' | 'signUpProfileFields' | 'passwordExpiration' | 'usernamePolicy';
|
|
79
85
|
export declare const SignInExperiences: GeneratedSchema<SignInExperienceKeys, CreateSignInExperience, SignInExperience, 'sign_in_experiences', 'sign_in_experience'>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { colorGuard, brandingGuard, languageInfoGuard, signInGuard, signUpGuard, socialSignInGuard, connectorTargetsGuard, customContentGuard, customUiAssetsGuard, customUiCspGuard, partialPasswordPolicyGuard, mfaGuard, adaptiveMfaGuard, captchaPolicyGuard, sentinelPolicyGuard, emailBlocklistPolicyGuard, forgotPasswordMethodsGuard, passkeySignInGuard, signUpProfileFieldsGuard } from './../foundations/index.js';
|
|
3
|
+
import { colorGuard, brandingGuard, languageInfoGuard, signInGuard, signUpGuard, socialSignInGuard, connectorTargetsGuard, customContentGuard, customUiAssetsGuard, customUiCspGuard, partialPasswordPolicyGuard, mfaGuard, adaptiveMfaGuard, captchaPolicyGuard, sentinelPolicyGuard, emailBlocklistPolicyGuard, verificationCodePolicyGuard, forgotPasswordMethodsGuard, passkeySignInGuard, signUpProfileFieldsGuard, passwordExpirationPolicyGuard, usernamePolicyGuard } from './../foundations/index.js';
|
|
4
4
|
import { AgreeToTermsPolicy, SignInMode } from './custom-types.js';
|
|
5
5
|
const createGuard = z.object({
|
|
6
6
|
tenantId: z.string().max(21).optional(),
|
|
@@ -31,9 +31,12 @@ const createGuard = z.object({
|
|
|
31
31
|
captchaPolicy: captchaPolicyGuard.optional(),
|
|
32
32
|
sentinelPolicy: sentinelPolicyGuard.optional(),
|
|
33
33
|
emailBlocklistPolicy: emailBlocklistPolicyGuard.optional(),
|
|
34
|
+
verificationCodePolicy: verificationCodePolicyGuard.optional(),
|
|
34
35
|
forgotPasswordMethods: forgotPasswordMethodsGuard.nullable().optional(),
|
|
35
36
|
passkeySignIn: passkeySignInGuard.optional(),
|
|
36
37
|
signUpProfileFields: signUpProfileFieldsGuard.nullable().optional(),
|
|
38
|
+
passwordExpiration: passwordExpirationPolicyGuard.optional(),
|
|
39
|
+
usernamePolicy: usernamePolicyGuard.optional(),
|
|
37
40
|
});
|
|
38
41
|
const guard = z.object({
|
|
39
42
|
tenantId: z.string().max(21),
|
|
@@ -64,9 +67,12 @@ const guard = z.object({
|
|
|
64
67
|
captchaPolicy: captchaPolicyGuard,
|
|
65
68
|
sentinelPolicy: sentinelPolicyGuard,
|
|
66
69
|
emailBlocklistPolicy: emailBlocklistPolicyGuard,
|
|
70
|
+
verificationCodePolicy: verificationCodePolicyGuard,
|
|
67
71
|
forgotPasswordMethods: forgotPasswordMethodsGuard.nullable(),
|
|
68
72
|
passkeySignIn: passkeySignInGuard,
|
|
69
73
|
signUpProfileFields: signUpProfileFieldsGuard.nullable(),
|
|
74
|
+
passwordExpiration: passwordExpirationPolicyGuard,
|
|
75
|
+
usernamePolicy: usernamePolicyGuard,
|
|
70
76
|
});
|
|
71
77
|
export const SignInExperiences = Object.freeze({
|
|
72
78
|
table: 'sign_in_experiences',
|
|
@@ -100,9 +106,12 @@ export const SignInExperiences = Object.freeze({
|
|
|
100
106
|
captchaPolicy: 'captcha_policy',
|
|
101
107
|
sentinelPolicy: 'sentinel_policy',
|
|
102
108
|
emailBlocklistPolicy: 'email_blocklist_policy',
|
|
109
|
+
verificationCodePolicy: 'verification_code_policy',
|
|
103
110
|
forgotPasswordMethods: 'forgot_password_methods',
|
|
104
111
|
passkeySignIn: 'passkey_sign_in',
|
|
105
112
|
signUpProfileFields: 'sign_up_profile_fields',
|
|
113
|
+
passwordExpiration: 'password_expiration',
|
|
114
|
+
usernamePolicy: 'username_policy',
|
|
106
115
|
},
|
|
107
116
|
fieldKeys: [
|
|
108
117
|
'tenantId',
|
|
@@ -133,9 +142,12 @@ export const SignInExperiences = Object.freeze({
|
|
|
133
142
|
'captchaPolicy',
|
|
134
143
|
'sentinelPolicy',
|
|
135
144
|
'emailBlocklistPolicy',
|
|
145
|
+
'verificationCodePolicy',
|
|
136
146
|
'forgotPasswordMethods',
|
|
137
147
|
'passkeySignIn',
|
|
138
148
|
'signUpProfileFields',
|
|
149
|
+
'passwordExpiration',
|
|
150
|
+
'usernamePolicy',
|
|
139
151
|
],
|
|
140
152
|
createGuard,
|
|
141
153
|
guard,
|
package/lib/db-entries/user.d.ts
CHANGED
|
@@ -24,7 +24,9 @@ export type CreateUser = {
|
|
|
24
24
|
logtoConfig?: JsonObject;
|
|
25
25
|
mfaVerifications?: MfaVerifications;
|
|
26
26
|
isSuspended?: boolean;
|
|
27
|
+
isPasswordExpired?: boolean;
|
|
27
28
|
lastSignInAt?: number | null;
|
|
29
|
+
passwordUpdatedAt?: number | null;
|
|
28
30
|
createdAt?: number;
|
|
29
31
|
updatedAt?: number;
|
|
30
32
|
};
|
|
@@ -47,9 +49,11 @@ export type User = {
|
|
|
47
49
|
logtoConfig: JsonObject;
|
|
48
50
|
mfaVerifications: MfaVerifications;
|
|
49
51
|
isSuspended: boolean;
|
|
52
|
+
isPasswordExpired: boolean;
|
|
50
53
|
lastSignInAt: number | null;
|
|
54
|
+
passwordUpdatedAt: number | null;
|
|
51
55
|
createdAt: number;
|
|
52
56
|
updatedAt: number;
|
|
53
57
|
};
|
|
54
|
-
export type UserKeys = 'tenantId' | 'id' | 'username' | 'primaryEmail' | 'primaryPhone' | 'passwordEncrypted' | 'passwordEncryptionMethod' | 'name' | 'avatar' | 'profile' | 'applicationId' | 'identities' | 'customData' | 'logtoConfig' | 'mfaVerifications' | 'isSuspended' | 'lastSignInAt' | 'createdAt' | 'updatedAt';
|
|
58
|
+
export type UserKeys = 'tenantId' | 'id' | 'username' | 'primaryEmail' | 'primaryPhone' | 'passwordEncrypted' | 'passwordEncryptionMethod' | 'name' | 'avatar' | 'profile' | 'applicationId' | 'identities' | 'customData' | 'logtoConfig' | 'mfaVerifications' | 'isSuspended' | 'isPasswordExpired' | 'lastSignInAt' | 'passwordUpdatedAt' | 'createdAt' | 'updatedAt';
|
|
55
59
|
export declare const Users: GeneratedSchema<UserKeys, CreateUser, User, 'users', 'user'>;
|
package/lib/db-entries/user.js
CHANGED
|
@@ -19,7 +19,9 @@ const createGuard = z.object({
|
|
|
19
19
|
logtoConfig: jsonObjectGuard.optional(),
|
|
20
20
|
mfaVerifications: mfaVerificationsGuard.optional(),
|
|
21
21
|
isSuspended: z.boolean().optional(),
|
|
22
|
+
isPasswordExpired: z.boolean().optional(),
|
|
22
23
|
lastSignInAt: z.number().nullable().optional(),
|
|
24
|
+
passwordUpdatedAt: z.number().nullable().optional(),
|
|
23
25
|
createdAt: z.number().optional(),
|
|
24
26
|
updatedAt: z.number().optional(),
|
|
25
27
|
});
|
|
@@ -40,7 +42,9 @@ const guard = z.object({
|
|
|
40
42
|
logtoConfig: jsonObjectGuard,
|
|
41
43
|
mfaVerifications: mfaVerificationsGuard,
|
|
42
44
|
isSuspended: z.boolean(),
|
|
45
|
+
isPasswordExpired: z.boolean(),
|
|
43
46
|
lastSignInAt: z.number().nullable(),
|
|
47
|
+
passwordUpdatedAt: z.number().nullable(),
|
|
44
48
|
createdAt: z.number(),
|
|
45
49
|
updatedAt: z.number(),
|
|
46
50
|
});
|
|
@@ -64,7 +68,9 @@ export const Users = Object.freeze({
|
|
|
64
68
|
logtoConfig: 'logto_config',
|
|
65
69
|
mfaVerifications: 'mfa_verifications',
|
|
66
70
|
isSuspended: 'is_suspended',
|
|
71
|
+
isPasswordExpired: 'is_password_expired',
|
|
67
72
|
lastSignInAt: 'last_sign_in_at',
|
|
73
|
+
passwordUpdatedAt: 'password_updated_at',
|
|
68
74
|
createdAt: 'created_at',
|
|
69
75
|
updatedAt: 'updated_at',
|
|
70
76
|
},
|
|
@@ -85,7 +91,9 @@ export const Users = Object.freeze({
|
|
|
85
91
|
'logtoConfig',
|
|
86
92
|
'mfaVerifications',
|
|
87
93
|
'isSuspended',
|
|
94
|
+
'isPasswordExpired',
|
|
88
95
|
'lastSignInAt',
|
|
96
|
+
'passwordUpdatedAt',
|
|
89
97
|
'createdAt',
|
|
90
98
|
'updatedAt',
|
|
91
99
|
],
|
|
@@ -20,6 +20,7 @@ export declare const accountCenterFieldControlGuard: z.ZodObject<{
|
|
|
20
20
|
social: z.ZodOptional<z.ZodNativeEnum<typeof AccountCenterControlValue>>;
|
|
21
21
|
customData: z.ZodOptional<z.ZodNativeEnum<typeof AccountCenterControlValue>>;
|
|
22
22
|
mfa: z.ZodOptional<z.ZodNativeEnum<typeof AccountCenterControlValue>>;
|
|
23
|
+
passkey: z.ZodOptional<z.ZodNativeEnum<typeof AccountCenterControlValue>>;
|
|
23
24
|
session: z.ZodOptional<z.ZodNativeEnum<typeof AccountCenterControlValue>>;
|
|
24
25
|
}, "strip", z.ZodTypeAny, {
|
|
25
26
|
name?: AccountCenterControlValue | undefined;
|
|
@@ -32,6 +33,7 @@ export declare const accountCenterFieldControlGuard: z.ZodObject<{
|
|
|
32
33
|
social?: AccountCenterControlValue | undefined;
|
|
33
34
|
customData?: AccountCenterControlValue | undefined;
|
|
34
35
|
mfa?: AccountCenterControlValue | undefined;
|
|
36
|
+
passkey?: AccountCenterControlValue | undefined;
|
|
35
37
|
session?: AccountCenterControlValue | undefined;
|
|
36
38
|
}, {
|
|
37
39
|
name?: AccountCenterControlValue | undefined;
|
|
@@ -44,6 +46,7 @@ export declare const accountCenterFieldControlGuard: z.ZodObject<{
|
|
|
44
46
|
social?: AccountCenterControlValue | undefined;
|
|
45
47
|
customData?: AccountCenterControlValue | undefined;
|
|
46
48
|
mfa?: AccountCenterControlValue | undefined;
|
|
49
|
+
passkey?: AccountCenterControlValue | undefined;
|
|
47
50
|
session?: AccountCenterControlValue | undefined;
|
|
48
51
|
}>;
|
|
49
52
|
export type AccountCenterFieldControl = z.infer<typeof accountCenterFieldControlGuard>;
|
|
@@ -22,6 +22,7 @@ export const accountCenterFieldControlGuard = z
|
|
|
22
22
|
social: z.nativeEnum(AccountCenterControlValue),
|
|
23
23
|
customData: z.nativeEnum(AccountCenterControlValue),
|
|
24
24
|
mfa: z.nativeEnum(AccountCenterControlValue),
|
|
25
|
+
passkey: z.nativeEnum(AccountCenterControlValue),
|
|
25
26
|
session: z.nativeEnum(AccountCenterControlValue),
|
|
26
27
|
})
|
|
27
28
|
.partial();
|
|
@@ -1,4 +1,61 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
export declare enum DomainVerificationFileContentType {
|
|
3
|
+
Text = "text/plain",
|
|
4
|
+
Json = "application/json"
|
|
5
|
+
}
|
|
6
|
+
export declare const domainVerificationFilePathGuard: z.ZodEffects<z.ZodString, string, string>;
|
|
7
|
+
export declare const domainVerificationFileGuard: z.ZodEffects<z.ZodObject<{
|
|
8
|
+
path: z.ZodEffects<z.ZodString, string, string>;
|
|
9
|
+
content: z.ZodString;
|
|
10
|
+
contentType: z.ZodNativeEnum<typeof DomainVerificationFileContentType>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
path: string;
|
|
13
|
+
content: string;
|
|
14
|
+
contentType: DomainVerificationFileContentType;
|
|
15
|
+
}, {
|
|
16
|
+
path: string;
|
|
17
|
+
content: string;
|
|
18
|
+
contentType: DomainVerificationFileContentType;
|
|
19
|
+
}>, {
|
|
20
|
+
path: string;
|
|
21
|
+
content: string;
|
|
22
|
+
contentType: DomainVerificationFileContentType;
|
|
23
|
+
}, {
|
|
24
|
+
path: string;
|
|
25
|
+
content: string;
|
|
26
|
+
contentType: DomainVerificationFileContentType;
|
|
27
|
+
}>;
|
|
28
|
+
export type DomainVerificationFile = z.infer<typeof domainVerificationFileGuard>;
|
|
29
|
+
export declare const domainVerificationFilesGuard: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodObject<{
|
|
30
|
+
path: z.ZodEffects<z.ZodString, string, string>;
|
|
31
|
+
content: z.ZodString;
|
|
32
|
+
contentType: z.ZodNativeEnum<typeof DomainVerificationFileContentType>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
path: string;
|
|
35
|
+
content: string;
|
|
36
|
+
contentType: DomainVerificationFileContentType;
|
|
37
|
+
}, {
|
|
38
|
+
path: string;
|
|
39
|
+
content: string;
|
|
40
|
+
contentType: DomainVerificationFileContentType;
|
|
41
|
+
}>, {
|
|
42
|
+
path: string;
|
|
43
|
+
content: string;
|
|
44
|
+
contentType: DomainVerificationFileContentType;
|
|
45
|
+
}, {
|
|
46
|
+
path: string;
|
|
47
|
+
content: string;
|
|
48
|
+
contentType: DomainVerificationFileContentType;
|
|
49
|
+
}>, "many">, {
|
|
50
|
+
path: string;
|
|
51
|
+
content: string;
|
|
52
|
+
contentType: DomainVerificationFileContentType;
|
|
53
|
+
}[], {
|
|
54
|
+
path: string;
|
|
55
|
+
content: string;
|
|
56
|
+
contentType: DomainVerificationFileContentType;
|
|
57
|
+
}[]>;
|
|
58
|
+
export type DomainVerificationFiles = z.infer<typeof domainVerificationFilesGuard>;
|
|
2
59
|
export declare const domainDnsRecordGuard: z.ZodObject<{
|
|
3
60
|
name: z.ZodString;
|
|
4
61
|
type: z.ZodString;
|