domain0 0.1.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/README.md +629 -0
- package/dist/contracts.cjs +1773 -0
- package/dist/contracts.cjs.map +1 -0
- package/dist/contracts.d.cts +2 -0
- package/dist/contracts.d.mts +2 -0
- package/dist/contracts.mjs +1627 -0
- package/dist/contracts.mjs.map +1 -0
- package/dist/error-BB4-lyc4.cjs +48 -0
- package/dist/error-BB4-lyc4.cjs.map +1 -0
- package/dist/error-Cyd6a9ay.mjs +31 -0
- package/dist/error-Cyd6a9ay.mjs.map +1 -0
- package/dist/index-CtQn01os.d.cts +6930 -0
- package/dist/index-CtQn01os.d.mts +6930 -0
- package/dist/index.cjs +246 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.mjs +91 -0
- package/dist/index.mjs.map +1 -0
- package/dist/sdk-7CglngBt.d.mts +196 -0
- package/dist/sdk-BHIxsxUT.mjs +3997 -0
- package/dist/sdk-BHIxsxUT.mjs.map +1 -0
- package/dist/sdk-BKtsupNk.d.cts +196 -0
- package/dist/sdk-C0q5dV-6.cjs +4074 -0
- package/dist/sdk-C0q5dV-6.cjs.map +1 -0
- package/dist/server.cjs +103 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +19 -0
- package/dist/server.d.mts +19 -0
- package/dist/server.mjs +102 -0
- package/dist/server.mjs.map +1 -0
- package/dist/ui.cjs +12 -0
- package/dist/ui.d.cts +286 -0
- package/dist/ui.d.mts +286 -0
- package/dist/ui.mjs +2 -0
- package/package.json +112 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.mjs","names":[],"sources":["../src/contracts/primitives.ts","../src/contracts/dns.ts","../src/contracts/provider.ts","../src/contracts/connection.ts","../src/contracts/connection-flow.ts","../src/contracts/shared-flow.ts","../src/contracts/dkim-guidance.ts","../src/contracts/connect-events.ts","../src/contracts/setup-policy.ts","../src/contracts/white-label.ts","../src/contracts/manual-setup-documentation.ts","../src/contracts/connect-configuration.ts","../src/contracts/conformance.ts","../src/contracts/domain-check.ts","../src/contracts/error.ts","../src/contracts/localization.ts","../src/contracts/platform.ts","../src/contracts/webhook.ts"],"sourcesContent":["import { z } from 'zod'\n\nconst identifier = z.string().trim().min(1).max(200)\n\nexport const ConnectionIdSchema = identifier.brand<'ConnectionId'>().meta({ id: 'ConnectionId' })\nexport type ConnectionId = z.infer<typeof ConnectionIdSchema>\n\nexport const ApplicationIdSchema = identifier.brand<'ApplicationId'>().meta({ id: 'ApplicationId' })\nexport type ApplicationId = z.infer<typeof ApplicationIdSchema>\n\nexport const TenantIdSchema = identifier.brand<'TenantId'>().meta({ id: 'TenantId' })\nexport type TenantId = z.infer<typeof TenantIdSchema>\n\nexport const ProviderIdSchema = z\n .string()\n .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/)\n .brand<'ProviderId'>()\n .meta({ id: 'ProviderId' })\nexport type ProviderId = z.infer<typeof ProviderIdSchema>\n\nexport const CommandIdSchema = identifier.brand<'CommandId'>().meta({ id: 'CommandId' })\nexport type CommandId = z.infer<typeof CommandIdSchema>\n\nexport const DomainNameSchema = z\n .string()\n .trim()\n .toLowerCase()\n .overwrite((value) => value.replace(/\\.$/, ''))\n .min(3)\n .max(253)\n .regex(/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/)\n .refine((value) => !/^\\d+(?:\\.\\d+){3}$/.test(value), 'IP addresses are not domain names')\n .brand<'DomainName'>()\n .meta({ id: 'DomainName' })\nexport type DomainName = z.infer<typeof DomainNameSchema>\n\nexport const IsoDateTimeSchema = z.iso.datetime({ offset: true }).meta({ id: 'IsoDateTime' })\nexport type IsoDateTime = z.infer<typeof IsoDateTimeSchema>\n","import { z } from 'zod'\n\nimport { DomainNameSchema } from './primitives'\n\nconst RelativeDnsHostSchema = z\n .string()\n .trim()\n .toLowerCase()\n .overwrite((value) => value.replace(/\\.$/, ''))\n .min(1)\n .max(253)\n .refine(isRelativeDnsHost, 'Host must be @ or a valid relative DNS name')\n\nconst caaValuePattern = /^([0-9]{1,3})[\\t ]+([A-Za-z0-9-]{1,15})[\\t ]+(?:\"([^\\r\\n\"]*)\"|([^\\r\\n\"]+))$/\n\nexport const DnsRecordTypeSchema = z\n .enum(['A', 'AAAA', 'CNAME', 'CAA', 'MX', 'TXT', 'NS'])\n .meta({ id: 'DnsRecordType' })\nexport type DnsRecordType = z.infer<typeof DnsRecordTypeSchema>\n\nconst DmarcTagNameSchema = z.string().regex(/^[a-z]{1,32}$/)\nconst DmarcTagValueSchema = z\n .string()\n .min(1)\n .max(4096)\n .refine((value) => value.trim() === value && /^[\\x20-\\x3a\\x3c-\\x7e]+$/.test(value), {\n message: 'DMARC tag values must be trimmed printable ASCII without semicolons',\n })\nconst DmarcTagMapSchema = z\n .record(DmarcTagNameSchema, DmarcTagValueSchema)\n .refine((tags) => Object.keys(tags).length <= 32, 'At most 32 DMARC tags are allowed')\n\nexport const AdvancedDmarcOptionsSchema = z\n .object({\n inheritRootDmarc: z.boolean().default(false),\n overrideTags: DmarcTagMapSchema.default({}),\n removeTags: z.array(DmarcTagNameSchema).max(32).refine(\n (tags) => new Set(tags).size === tags.length,\n 'DMARC tags to remove must be unique',\n ).default([]),\n addTagsIfNotExist: DmarcTagMapSchema.default({}),\n })\n .strict()\n .refine(\n (options) => options.inheritRootDmarc || Object.keys(options.overrideTags).length > 0 ||\n options.removeTags.length > 0 || Object.keys(options.addTagsIfNotExist).length > 0,\n 'At least one advanced DMARC option is required',\n )\n .superRefine((options, context) => {\n for (const [field, tags] of [\n ['overrideTags', options.overrideTags],\n ['addTagsIfNotExist', options.addTagsIfNotExist],\n ] as const) {\n for (const [name, value] of Object.entries(tags)) {\n if (!isValidKnownDmarcTag(name, value)) {\n context.addIssue({\n code: 'custom',\n path: [field, name],\n message: `Invalid value for the ${name} DMARC tag`,\n })\n }\n }\n }\n })\n .meta({ id: 'AdvancedDmarcOptions' })\nexport type AdvancedDmarcOptions = z.infer<typeof AdvancedDmarcOptionsSchema>\n\nconst CoreDnsRecordSchema = z\n .object({\n host: RelativeDnsHostSchema,\n type: DnsRecordTypeSchema,\n value: z.string().trim().min(1).max(65_535),\n ttl: z.number().int().min(1).max(2_147_483_647).default(300),\n priority: z.number().int().min(0).max(65_535).optional(),\n optional: z.boolean().default(false),\n })\n .strict()\n .superRefine((record, context) => {\n if (record.type === 'MX' && record.priority === undefined) {\n context.addIssue({\n code: 'custom',\n path: ['priority'],\n message: 'MX records require a priority',\n })\n }\n if (record.type !== 'MX' && record.priority !== undefined) {\n context.addIssue({\n code: 'custom',\n path: ['priority'],\n message: 'Only MX records accept a priority',\n })\n }\n if (record.type === 'A' && !z.ipv4().safeParse(record.value).success) {\n context.addIssue({ code: 'custom', path: ['value'], message: 'A records require an IPv4 address' })\n }\n if (record.type === 'AAAA' && !z.ipv6().safeParse(record.value).success) {\n context.addIssue({ code: 'custom', path: ['value'], message: 'AAAA records require an IPv6 address' })\n }\n if (['CNAME', 'MX', 'NS'].includes(record.type) && !DomainNameSchema.safeParse(record.value).success) {\n context.addIssue({ code: 'custom', path: ['value'], message: `${record.type} records require a domain name` })\n }\n if (record.type === 'CAA') {\n const match = caaValuePattern.exec(record.value)\n if (match === null || Number(match[1]) > 255) {\n context.addIssue({\n code: 'custom',\n path: ['value'],\n message: 'CAA values must contain flags, a tag, and a quoted value',\n })\n }\n }\n if (record.type === 'TXT' && /[\\u0000\\r\\n]/.test(record.value)) {\n context.addIssue({ code: 'custom', path: ['value'], message: 'TXT values cannot contain NUL or newlines' })\n }\n })\n\nexport const ResolvedDnsRecordSchema = CoreDnsRecordSchema.meta({ id: 'ResolvedDnsRecord' })\nexport type ResolvedDnsRecord = z.infer<typeof ResolvedDnsRecordSchema>\n\nexport const DnsRecordSchema = CoreDnsRecordSchema\n .safeExtend({ advancedDmarcOptions: AdvancedDmarcOptionsSchema.optional() })\n .superRefine((record, context) => {\n if (record.advancedDmarcOptions === undefined) return\n if (record.type !== 'TXT' || (record.host !== '_dmarc' && !record.host.startsWith('_dmarc.'))) {\n context.addIssue({\n code: 'custom',\n path: ['advancedDmarcOptions'],\n message: 'Advanced DMARC options require a TXT record at a _dmarc host',\n })\n }\n if (!isValidDmarcRecord(record.value)) {\n context.addIssue({\n code: 'custom',\n path: ['value'],\n message: 'Advanced DMARC options require a valid DMARC1 value with a policy tag',\n })\n }\n })\n .meta({ id: 'DnsRecord' })\nexport type DnsRecord = z.infer<typeof DnsRecordSchema>\n\nexport const ExistingRecordPolicySchema = z\n .object({\n validateDmarc: z.boolean().default(false),\n validateCAA: z.boolean().default(false),\n })\n .strict()\n .meta({ id: 'ExistingRecordPolicy' })\nexport type ExistingRecordPolicy = z.infer<typeof ExistingRecordPolicySchema>\n\nexport const DnsIntentSchema = z\n .object({\n domain: DomainNameSchema,\n records: z.array(DnsRecordSchema).min(1).max(100),\n existingRecordPolicy: ExistingRecordPolicySchema.default({\n validateDmarc: false,\n validateCAA: false,\n }),\n })\n .strict()\n .meta({ id: 'DnsIntent' })\nexport type DnsIntent = z.infer<typeof DnsIntentSchema>\n\nexport const ResolvedDnsIntentSchema = z\n .object({\n domain: DomainNameSchema,\n records: z.array(ResolvedDnsRecordSchema).max(100),\n })\n .strict()\n .meta({ id: 'ResolvedDnsIntent' })\nexport type ResolvedDnsIntent = z.infer<typeof ResolvedDnsIntentSchema>\n\nexport const CheckRecordsInputSchema = ResolvedDnsIntentSchema.meta({ id: 'CheckRecordsInput' })\nexport type CheckRecordsInput = z.input<typeof CheckRecordsInputSchema>\n\nexport const CheckedRecordSchema = z\n .object({\n record: ResolvedDnsRecordSchema,\n authoritativeServers: z.number().int().min(1).max(16),\n matchingServers: z.number().int().min(0).max(16),\n propagated: z.boolean(),\n })\n .strict()\n .superRefine((result, context) => {\n if (result.matchingServers > result.authoritativeServers) {\n context.addIssue({\n code: 'custom',\n path: ['matchingServers'],\n message: 'Matching nameservers cannot exceed authoritative nameservers',\n })\n }\n if (result.propagated !== (result.matchingServers === result.authoritativeServers)) {\n context.addIssue({\n code: 'custom',\n path: ['propagated'],\n message: 'Propagation state must match the authoritative nameserver counts',\n })\n }\n })\n .meta({ id: 'CheckedRecord' })\nexport type CheckedRecord = z.infer<typeof CheckedRecordSchema>\n\nexport const CheckRecordsResponseSchema = z\n .object({\n domain: DomainNameSchema,\n allPropagated: z.boolean(),\n records: z.array(CheckedRecordSchema).min(1).max(100),\n })\n .strict()\n .superRefine((result, context) => {\n if (result.allPropagated !== result.records.every((record) => record.propagated)) {\n context.addIssue({\n code: 'custom',\n path: ['allPropagated'],\n message: 'Overall propagation state must match every record result',\n })\n }\n })\n .meta({ id: 'CheckRecordsResponse' })\nexport type CheckRecordsResponse = z.infer<typeof CheckRecordsResponseSchema>\n\nexport const ConflictPolicySchema = z\n .enum(['preserve', 'replace_same_name_and_type', 'replace_all_at_name'])\n .meta({ id: 'ConflictPolicy' })\nexport type ConflictPolicy = z.infer<typeof ConflictPolicySchema>\n\nexport const SpfConflictPolicySchema = z\n .enum(['merge', 'replace'])\n .meta({ id: 'SpfConflictPolicy' })\nexport type SpfConflictPolicy = z.infer<typeof SpfConflictPolicySchema>\n\nexport const ChangeActionSchema = z.enum(['create', 'replace', 'delete']).meta({ id: 'ChangeAction' })\nexport type ChangeAction = z.infer<typeof ChangeActionSchema>\n\nexport const PlannedChangeSchema = z\n .object({\n action: ChangeActionSchema,\n before: ResolvedDnsRecordSchema.optional(),\n after: ResolvedDnsRecordSchema.optional(),\n destructive: z.boolean(),\n })\n .strict()\n .superRefine((change, context) => {\n if (change.action === 'create' && change.after === undefined) {\n context.addIssue({ code: 'custom', path: ['after'], message: 'Create requires the resulting record' })\n }\n if (change.action === 'replace' && (change.before === undefined || change.after === undefined)) {\n context.addIssue({ code: 'custom', message: 'Replace requires both current and resulting records' })\n }\n if (change.action === 'delete' && change.before === undefined) {\n context.addIssue({ code: 'custom', path: ['before'], message: 'Delete requires the current record' })\n }\n })\n .meta({ id: 'PlannedChange' })\nexport type PlannedChange = z.infer<typeof PlannedChangeSchema>\n\nfunction isRelativeDnsHost(value: string): boolean {\n if (value === '@') return true\n const labels = value.split('.')\n return labels.every((label, index) => {\n if (label === '*') return index === 0\n return label.length >= 1 && label.length <= 63 &&\n !label.startsWith('-') && !label.endsWith('-') && /^[a-z0-9_-]+$/.test(label)\n })\n}\n\nfunction isValidDmarcRecord(value: string): boolean {\n const parts = value.split(';').map((part) => part.trim()).filter(Boolean)\n const seen = new Set<string>()\n if (parts.length < 2) return false\n for (const [index, part] of parts.entries()) {\n const separator = part.indexOf('=')\n if (separator <= 0) return false\n const name = part.slice(0, separator).trim().toLowerCase()\n const tagValue = part.slice(separator + 1).trim()\n if (!DmarcTagNameSchema.safeParse(name).success || !DmarcTagValueSchema.safeParse(tagValue).success || seen.has(name)) {\n return false\n }\n if (index === 0 && (name !== 'v' || tagValue !== 'DMARC1')) return false\n if (!isValidKnownDmarcTag(name, tagValue)) return false\n seen.add(name)\n }\n return seen.has('p')\n}\n\nfunction isValidKnownDmarcTag(name: string, value: string): boolean {\n if (name === 'v') return value === 'DMARC1'\n if (['p', 'sp', 'np'].includes(name)) return ['none', 'quarantine', 'reject'].includes(value)\n if (['adkim', 'aspf'].includes(name)) return value === 'r' || value === 's'\n if (name === 'pct') return /^\\d{1,3}$/.test(value) && Number(value) <= 100\n if (name === 'ri') return /^[1-9]\\d*$/.test(value)\n if (name === 'rf') return value === 'afrf'\n if (name === 'fo') {\n const options = value.split(':')\n return options.length > 0 && new Set(options).size === options.length &&\n options.every((option) => ['0', '1', 'd', 's'].includes(option)) &&\n !(options.includes('0') && options.includes('1'))\n }\n return true\n}\n","import { z } from 'zod'\n\nimport { IsoDateTimeSchema, ProviderIdSchema } from './primitives'\n\nexport const ProviderImplementationSchema = z.enum([\n 'automatic',\n 'domain_connect',\n 'manual',\n 'unverified',\n]).meta({ id: 'ProviderImplementation' })\nexport type ProviderImplementation = z.infer<typeof ProviderImplementationSchema>\n\nexport const AuthorizationMethodSchema = z.enum([\n 'oauth2_pkce',\n 'api_token',\n 'api_key',\n 'basic',\n 'session',\n 'domain_connect',\n 'manual',\n]).meta({ id: 'AuthorizationMethod' })\nexport type AuthorizationMethod = z.infer<typeof AuthorizationMethodSchema>\n\nexport const ProviderCapabilitiesSchema = z\n .strictObject({\n rootNSModification: z.enum(['supported', 'unsupported', 'unverified']),\n })\n .meta({ id: 'ProviderCapabilities' })\nexport type ProviderCapabilities = z.infer<typeof ProviderCapabilitiesSchema>\n\nexport const ProviderDetectionUnavailableReasonCodeSchema = z\n .enum(['no_stable_public_provider_identity'])\n .meta({ id: 'ProviderDetectionUnavailableReasonCode' })\nexport type ProviderDetectionUnavailableReasonCode = z.infer<\n typeof ProviderDetectionUnavailableReasonCodeSchema\n>\n\nexport const ProviderDetectionSchema = z\n .discriminatedUnion('method', [\n z.strictObject({\n method: z.enum(['nameserver', 'domain_connect', 'nameserver_or_domain_connect']),\n }),\n z.strictObject({\n method: z.literal('manual'),\n reasonCode: ProviderDetectionUnavailableReasonCodeSchema,\n }),\n ])\n .meta({ id: 'ProviderDetection' })\nexport type ProviderDetection = z.infer<typeof ProviderDetectionSchema>\n\nconst ProviderReferenceUrlSchema = z\n .url({ protocol: /^https$/ })\n .regex(/^https:\\/\\//, 'Provider reference URL must use HTTPS')\n .refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === ''\n }, 'Provider reference URL must not contain credentials')\n .meta({ format: 'uri' })\n\nexport const ProviderSchema = z\n .object({\n id: ProviderIdSchema,\n name: z.string().trim().min(1),\n referenceUrl: ProviderReferenceUrlSchema,\n implementation: ProviderImplementationSchema,\n availableAuthorizationMethods: z.array(AuthorizationMethodSchema).refine(\n (methods) => new Set(methods).size === methods.length,\n 'Authorization methods must be unique',\n ),\n capabilities: ProviderCapabilitiesSchema,\n detection: ProviderDetectionSchema,\n limitations: z.array(z.string().min(1)),\n })\n .strict()\n .superRefine((provider, context) => {\n const methods = provider.availableAuthorizationMethods\n const valid = provider.implementation === 'automatic'\n ? methods.every((method) => method !== 'domain_connect' && method !== 'manual')\n : provider.implementation === 'domain_connect'\n ? methods.every((method) => method === 'domain_connect')\n : provider.implementation === 'manual'\n ? methods.every((method) => method === 'manual')\n : methods.length === 0\n if (!valid) {\n context.addIssue({\n code: 'custom',\n path: ['availableAuthorizationMethods'],\n message: 'Authorization methods must match the verified provider implementation',\n })\n }\n })\n .meta({ id: 'Provider' })\nexport type Provider = z.infer<typeof ProviderSchema>\n\nexport const ListProvidersResponseSchema = z\n .object({ providers: z.array(ProviderSchema) })\n .strict()\n .meta({ id: 'ListProvidersResponse' })\nexport type ListProvidersResponse = z.infer<typeof ListProvidersResponseSchema>\n\nexport const ProviderHealthStatusSchema = z\n .enum(['operational', 'unavailable'])\n .meta({ id: 'ProviderHealthStatus' })\nexport type ProviderHealthStatus = z.infer<typeof ProviderHealthStatusSchema>\n\nexport const ProviderHealthReasonSchema = z\n .enum([\n 'automatic_ready',\n 'domain_connect_ready',\n 'runtime_authorization_unavailable',\n 'manual_only',\n 'unverified',\n ])\n .meta({ id: 'ProviderHealthReason' })\nexport type ProviderHealthReason = z.infer<typeof ProviderHealthReasonSchema>\n\nexport const ProviderHealthSchema = z\n .object({\n providerId: ProviderIdSchema,\n providerName: z.string().trim().min(1).max(200),\n enabled: z.boolean(),\n status: ProviderHealthStatusSchema,\n reason: ProviderHealthReasonSchema,\n })\n .strict()\n .superRefine((health, context) => {\n const readyReason = health.reason === 'automatic_ready' || health.reason === 'domain_connect_ready'\n const matchingStatus = health.enabled\n ? health.status === 'operational'\n : health.status === 'unavailable'\n if (health.enabled !== readyReason || !matchingStatus) {\n context.addIssue({\n code: 'custom',\n path: ['enabled'],\n message: 'Enabled, status, and reason must describe the same provider health state',\n })\n }\n })\n .meta({ id: 'ProviderHealth' })\nexport type ProviderHealth = z.infer<typeof ProviderHealthSchema>\n\nexport const ProviderHealthResponseSchema = z\n .object({\n observedAt: IsoDateTimeSchema,\n refreshAfter: IsoDateTimeSchema,\n providers: z.array(ProviderHealthSchema),\n })\n .strict()\n .superRefine((report, context) => {\n if (Date.parse(report.refreshAfter) <= Date.parse(report.observedAt)) {\n context.addIssue({\n code: 'custom',\n path: ['refreshAfter'],\n message: 'Provider health refresh deadline must be after its observation time',\n })\n }\n const providerIds = report.providers.map((provider) => provider.providerId)\n if (new Set(providerIds).size !== providerIds.length) {\n context.addIssue({\n code: 'custom',\n path: ['providers'],\n message: 'Provider health entries must have unique provider IDs',\n })\n }\n })\n .meta({ id: 'ProviderHealthResponse' })\nexport type ProviderHealthResponse = z.infer<typeof ProviderHealthResponseSchema>\n","import { z } from 'zod'\n\nimport {\n ConflictPolicySchema,\n DnsIntentSchema,\n PlannedChangeSchema,\n ResolvedDnsIntentSchema,\n SpfConflictPolicySchema,\n} from './dns'\nimport {\n ApplicationIdSchema,\n CommandIdSchema,\n ConnectionIdSchema,\n IsoDateTimeSchema,\n ProviderIdSchema,\n TenantIdSchema,\n} from './primitives'\nimport { ProviderSchema } from './provider'\n\nexport const ConnectionStateSchema = z.enum([\n 'requested',\n 'detecting_provider',\n 'provider_selected',\n 'domain_connect_pending',\n 'authorization_pending',\n 'authorized',\n 'planning',\n 'awaiting_confirmation',\n 'applying',\n 'propagation_pending',\n 'active',\n 'manual_required',\n 'failed_retryable',\n 'failed_terminal',\n 'cancelled',\n]).meta({ id: 'ConnectionState' })\nexport type ConnectionState = z.infer<typeof ConnectionStateSchema>\n\nexport const RetryResumeStateSchema = z.enum([\n 'authorized',\n 'awaiting_confirmation',\n 'applying',\n]).meta({ id: 'RetryResumeState' })\nexport type RetryResumeState = z.infer<typeof RetryResumeStateSchema>\n\nexport const ConnectionFailureCodeSchema = z.enum([\n 'provider_snapshot_timeout',\n 'provider_apply_timeout',\n]).meta({ id: 'ConnectionFailureCode' })\nexport type ConnectionFailureCode = z.infer<typeof ConnectionFailureCodeSchema>\n\nexport const ConnectionFailureSchema = z\n .object({\n code: ConnectionFailureCodeSchema,\n retryable: z.literal(true),\n resumeState: RetryResumeStateSchema,\n occurredAt: IsoDateTimeSchema,\n })\n .strict()\n .meta({ id: 'ConnectionFailure' })\nexport type ConnectionFailure = z.infer<typeof ConnectionFailureSchema>\n\nexport const PlanWarningCodeSchema = z\n .enum(['spf_policy_replaced', 'spf_policy_merged'])\n .meta({ id: 'PlanWarningCode' })\nexport type PlanWarningCode = z.infer<typeof PlanWarningCodeSchema>\n\nexport const ChangePlanSchema = z\n .object({\n digest: z.string().regex(/^[a-f0-9]{64}$/),\n changes: z.array(PlannedChangeSchema).min(1),\n warnings: z.array(PlanWarningCodeSchema),\n expiresAt: IsoDateTimeSchema,\n })\n .strict()\n .meta({ id: 'ChangePlan' })\nexport type ChangePlan = z.infer<typeof ChangePlanSchema>\n\nexport const ConnectionSchema = z\n .object({\n id: ConnectionIdSchema,\n applicationId: ApplicationIdSchema,\n tenantId: TenantIdSchema,\n intent: DnsIntentSchema,\n effectiveIntent: ResolvedDnsIntentSchema.optional(),\n state: ConnectionStateSchema,\n provider: ProviderSchema.optional(),\n plan: ChangePlanSchema.optional(),\n failure: ConnectionFailureSchema.optional(),\n optionalFailures: z.array(z.string()),\n createdAt: IsoDateTimeSchema,\n updatedAt: IsoDateTimeSchema,\n })\n .strict()\n .superRefine((connection, context) => {\n const requiresFailure = connection.state === 'failed_retryable'\n if (requiresFailure !== (connection.failure !== undefined)) {\n context.addIssue({\n code: 'custom',\n path: ['failure'],\n message: requiresFailure\n ? 'A retryable failure state requires failure details'\n : 'Failure details are allowed only in a retryable failure state',\n })\n }\n if (connection.effectiveIntent !== undefined && connection.effectiveIntent.domain !== connection.intent.domain) {\n context.addIssue({\n code: 'custom',\n path: ['effectiveIntent', 'domain'],\n message: 'Effective intent must use the requested intent domain',\n })\n }\n })\n .meta({ id: 'Connection' })\nexport type Connection = z.infer<typeof ConnectionSchema>\n\nexport const CreateConnectionInputSchema = z\n .object({\n applicationId: ApplicationIdSchema,\n tenantId: TenantIdSchema,\n intent: DnsIntentSchema,\n commandId: CommandIdSchema,\n })\n .strict()\n .meta({ id: 'CreateConnectionInput' })\nexport type CreateConnectionInput = z.input<typeof CreateConnectionInputSchema>\n\nexport const CreateConnectionResponseSchema = z\n .object({ connection: ConnectionSchema })\n .strict()\n .meta({ id: 'ConnectionResponse' })\nexport type CreateConnectionResponse = z.infer<typeof CreateConnectionResponseSchema>\n\nexport const GetConnectionResponseSchema = CreateConnectionResponseSchema\nexport type GetConnectionResponse = z.infer<typeof GetConnectionResponseSchema>\n\nexport const ProviderCandidateSchema = z\n .object({ provider: ProviderSchema, confidence: z.number().min(0).max(1) })\n .strict()\n .meta({ id: 'ProviderCandidate' })\nexport type ProviderCandidate = z.infer<typeof ProviderCandidateSchema>\n\nexport const DetectProviderResponseSchema = z\n .object({\n connection: ConnectionSchema,\n candidates: z.array(ProviderCandidateSchema),\n })\n .strict()\n .meta({ id: 'DetectProviderResponse' })\nexport type DetectProviderResponse = z.infer<typeof DetectProviderResponseSchema>\n\nexport const SelectProviderInputSchema = z\n .object({\n providerId: ProviderIdSchema,\n commandId: CommandIdSchema,\n })\n .strict()\n .meta({ id: 'SelectProviderInput' })\nexport type SelectProviderInput = z.input<typeof SelectProviderInputSchema>\n\nconst DomainConnectIdSchema = z.string().regex(/^[A-Za-z0-9._-]{1,63}$/)\nconst DomainConnectPropertyNameSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9_-]{0,62}$/)\nconst reservedDomainConnectProperties = new Set([\n 'domain', 'host', 'groupId', 'providerName', 'serviceName', 'instanceId',\n 'redirect_uri', 'state', 'sig', 'key',\n])\nconst DomainConnectPropertiesSchema = z\n .record(\n DomainConnectPropertyNameSchema,\n z.string().min(1).max(4096).refine(\n (value) => value.trim() === value && !/[\\u0000\\r\\n]/.test(value),\n 'Domain Connect property values must be trimmed and single-line',\n ),\n )\n .refine((properties) => Object.keys(properties).length <= 64, 'At most 64 Domain Connect properties are allowed')\n .refine(\n (properties) => Object.keys(properties).every((name) => !reservedDomainConnectProperties.has(name)),\n 'Domain Connect properties must not override reserved protocol parameters',\n )\n\nexport const DomainConnectTemplateSchema = z\n .object({\n serviceProviderId: DomainConnectIdSchema,\n serviceId: DomainConnectIdSchema,\n host: z.string().max(253).regex(\n /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)(?:\\.(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?))*$/,\n ).optional(),\n groupId: DomainConnectIdSchema.optional(),\n providerName: z.string().trim().min(1).max(200).optional(),\n serviceName: z.string().trim().min(1).max(200).optional(),\n instanceId: DomainConnectIdSchema.optional(),\n properties: DomainConnectPropertiesSchema,\n })\n .strict()\n .meta({ id: 'DomainConnectTemplate' })\nexport type DomainConnectTemplate = z.input<typeof DomainConnectTemplateSchema>\n\nexport const StartDomainConnectInputSchema = DomainConnectTemplateSchema\n .extend({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'StartDomainConnectInput' })\nexport type StartDomainConnectInput = z.input<typeof StartDomainConnectInputSchema>\n\nconst DomainConnectHandoffUrlSchema = z\n .url({ protocol: /^https$/ })\n .refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === '' && url.hash === ''\n }, 'Domain Connect handoff URL must be HTTPS without credentials or a fragment')\n\nexport const StartDomainConnectResponseSchema = z\n .object({\n connection: ConnectionSchema,\n handoffUrl: DomainConnectHandoffUrlSchema,\n })\n .strict()\n .meta({ id: 'StartDomainConnectResponse' })\nexport type StartDomainConnectResponse = z.infer<typeof StartDomainConnectResponseSchema>\n\nexport const SubmitDomainConnectCompletionInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'SubmitDomainConnectCompletionInput' })\nexport type SubmitDomainConnectCompletionInput = z.input<typeof SubmitDomainConnectCompletionInputSchema>\n\nexport const ConfirmPlanInputSchema = z\n .object({\n digest: z.string().regex(/^[a-f0-9]{64}$/),\n allowDestructive: z.boolean(),\n commandId: CommandIdSchema,\n })\n .strict()\n .meta({ id: 'ConfirmPlanInput' })\nexport type ConfirmPlanInput = z.input<typeof ConfirmPlanInputSchema>\n\nexport const StartOAuthInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'StartOAuthInput' })\nexport type StartOAuthInput = z.input<typeof StartOAuthInputSchema>\n\nexport const StartOAuthResponseSchema = z\n .object({\n connection: ConnectionSchema,\n authorizationUrl: z.url({ protocol: /^https$/ }),\n expiresAt: IsoDateTimeSchema,\n })\n .strict()\n .meta({ id: 'StartOAuthResponse' })\nexport type StartOAuthResponse = z.infer<typeof StartOAuthResponseSchema>\n\nconst SecretSchema = z.string().min(1).max(16_384).refine(\n (value) => value.trim() === value,\n 'Credential values must not have leading or trailing whitespace',\n).meta({\n format: 'password',\n writeOnly: true,\n})\n\nexport const ApiTokenCredentialsSchema = z.object({\n kind: z.literal('api_token'),\n token: SecretSchema,\n}).strict().meta({ id: 'ApiTokenCredentials' })\n\nexport const AccessKeyCredentialsSchema = z.object({\n kind: z.literal('access_key'),\n keyId: SecretSchema,\n secret: SecretSchema,\n}).strict().meta({ id: 'AccessKeyCredentials' })\n\nexport const UsernamePasswordCredentialsSchema = z.object({\n kind: z.literal('username_password'),\n username: SecretSchema,\n password: SecretSchema,\n}).strict().meta({ id: 'UsernamePasswordCredentials' })\n\nexport const AccountTokenCredentialsSchema = z.object({\n kind: z.literal('account_token'),\n accountId: SecretSchema,\n token: SecretSchema,\n}).strict().meta({ id: 'AccountTokenCredentials' })\n\nexport const UsernameTokenCredentialsSchema = z.object({\n kind: z.literal('username_token'),\n username: SecretSchema,\n token: SecretSchema,\n}).strict().meta({ id: 'UsernameTokenCredentials' })\n\nexport const OvhCredentialsSchema = z.object({\n kind: z.literal('ovh'),\n endpoint: z.enum([\n 'ovh-eu', 'ovh-us', 'ovh-ca', 'kimsufi-eu', 'kimsufi-ca',\n 'soyoustart-eu', 'soyoustart-ca',\n ]),\n applicationKey: SecretSchema,\n applicationSecret: SecretSchema,\n consumerKey: SecretSchema,\n}).strict().meta({ id: 'OvhCredentials' })\n\nexport const PrivateKeyCredentialsSchema = z.object({\n kind: z.literal('private_key'),\n login: SecretSchema,\n privateKey: SecretSchema.refine(\n (value) => /^(-----BEGIN (?:RSA )?PRIVATE KEY-----)[\\s\\S]+(-----END (?:RSA )?PRIVATE KEY-----)$/.test(value),\n 'A PKCS#8 or PKCS#1 PEM private key is required',\n ),\n}).strict().meta({ id: 'PrivateKeyCredentials' })\n\nexport const AwsSessionCredentialsSchema = z.object({\n kind: z.literal('aws_session'),\n keyId: SecretSchema.regex(/^[A-Z0-9]{16,128}$/),\n secret: SecretSchema,\n sessionToken: SecretSchema,\n hostedZoneId: z.string().regex(/^Z[A-Z0-9]{1,63}$/),\n expiresAt: IsoDateTimeSchema,\n}).strict().meta({ id: 'AwsSessionCredentials' })\n\nconst CPanelEndpointSchema = z.url({ protocol: /^https$/ }).refine((value) => {\n const url = new URL(value)\n return url.port === '2083' && url.username === '' && url.password === '' &&\n (url.pathname === '' || url.pathname === '/') && url.search === '' && url.hash === ''\n}, 'cPanel endpoint must be an HTTPS origin on port 2083')\n\nexport const CPanelCredentialsSchema = z.object({\n kind: z.literal('cpanel'),\n endpoint: CPanelEndpointSchema,\n username: SecretSchema,\n token: SecretSchema,\n}).strict().meta({ id: 'CPanelCredentials' })\n\nexport const ClientCredentialsSchema = z.object({\n kind: z.literal('client_credentials'),\n clientId: SecretSchema,\n clientSecret: SecretSchema,\n}).strict().meta({ id: 'ClientCredentials' })\n\nfunction credentialInput<\n const Provider extends string,\n Credentials extends z.ZodType,\n>(providerId: Provider, credentials: Credentials) {\n return z.object({\n providerId: z.literal(providerId),\n credentials,\n commandId: CommandIdSchema,\n }).strict()\n}\n\nconst directCredentialAuthorizationOptions = [\n credentialInput('alibaba-cloud', AccessKeyCredentialsSchema),\n credentialInput('all-inkl', UsernamePasswordCredentialsSchema),\n credentialInput('amazon-route-53', AwsSessionCredentialsSchema),\n credentialInput('cloudflare', ApiTokenCredentialsSchema),\n credentialInput('cloudns', AccountTokenCredentialsSchema),\n credentialInput('digitalocean', ApiTokenCredentialsSchema),\n credentialInput('dnsimple', AccountTokenCredentialsSchema),\n credentialInput('dreamhost', ApiTokenCredentialsSchema),\n credentialInput('dynadot', AccessKeyCredentialsSchema),\n credentialInput('easydns', AccessKeyCredentialsSchema),\n credentialInput('gandi', ApiTokenCredentialsSchema),\n credentialInput('godaddy', ApiTokenCredentialsSchema),\n credentialInput('hetzner', ApiTokenCredentialsSchema),\n credentialInput('hostgator', CPanelCredentialsSchema),\n credentialInput('hostinger', ApiTokenCredentialsSchema),\n credentialInput('hosting-com', CPanelCredentialsSchema),\n credentialInput('inmotion-hosting', CPanelCredentialsSchema),\n credentialInput('ionos', ApiTokenCredentialsSchema),\n credentialInput('name-com', UsernameTokenCredentialsSchema),\n credentialInput('namesilo', ApiTokenCredentialsSchema),\n credentialInput('netlify', ApiTokenCredentialsSchema),\n credentialInput('o2switch', CPanelCredentialsSchema),\n credentialInput('openprovider', ApiTokenCredentialsSchema),\n credentialInput('opensrs', ClientCredentialsSchema),\n credentialInput('ovh', OvhCredentialsSchema),\n credentialInput('porkbun', AccessKeyCredentialsSchema),\n credentialInput('simply', ApiTokenCredentialsSchema),\n credentialInput('spaceship', AccessKeyCredentialsSchema),\n credentialInput('transip', PrivateKeyCredentialsSchema),\n credentialInput('united-domains', ApiTokenCredentialsSchema),\n credentialInput('vercel', ApiTokenCredentialsSchema),\n credentialInput('wix', AccountTokenCredentialsSchema),\n] as const\n\ntype DirectCredentialAuthorizationOption = typeof directCredentialAuthorizationOptions[number]\nexport type DirectCredentialProviderId = z.input<DirectCredentialAuthorizationOption>['providerId']\nexport type DirectCredentialKind = z.input<DirectCredentialAuthorizationOption>['credentials']['kind']\n\ntype DirectCredentialKindByProvider = {\n readonly [ProviderId in DirectCredentialProviderId]: Extract<\n z.input<DirectCredentialAuthorizationOption>,\n { providerId: ProviderId }\n >['credentials']['kind']\n}\n\n// The UI consumes this projection of the Zod authorization contract. Deriving\n// it from the union options keeps provider identity, credential validation, and\n// credential rendering on one source of truth.\nexport const directCredentialKindByProvider = Object.freeze(Object.fromEntries(\n directCredentialAuthorizationOptions.map((option) => [\n option.shape.providerId.value,\n option.shape.credentials.shape.kind.value,\n ]),\n)) as DirectCredentialKindByProvider\n\nexport const AuthorizeWithCredentialInputSchema = z.discriminatedUnion(\n 'providerId',\n directCredentialAuthorizationOptions,\n).meta({ id: 'AuthorizeWithCredentialInput' })\nexport type AuthorizeWithCredentialInput = z.input<typeof AuthorizeWithCredentialInputSchema>\n\nexport const OAuthCallbackResponseSchema = z\n .object({ completed: z.literal(true) })\n .strict()\n .meta({ id: 'OAuthCallbackResponse' })\nexport type OAuthCallbackResponse = z.infer<typeof OAuthCallbackResponseSchema>\n\nexport const PreparePlanInputSchema = z\n .object({\n conflictPolicy: ConflictPolicySchema,\n spfPolicy: SpfConflictPolicySchema.default('merge'),\n commandId: CommandIdSchema,\n })\n .strict()\n .meta({ id: 'PreparePlanInput' })\nexport type PreparePlanInput = z.input<typeof PreparePlanInputSchema>\n\nexport const ApplyPlanInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'ApplyPlanInput' })\nexport type ApplyPlanInput = z.input<typeof ApplyPlanInputSchema>\n\nexport const VerifyPropagationInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'VerifyPropagationInput' })\nexport type VerifyPropagationInput = z.input<typeof VerifyPropagationInputSchema>\n\nexport const StartManualConfigurationInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'StartManualConfigurationInput' })\nexport type StartManualConfigurationInput = z.input<typeof StartManualConfigurationInputSchema>\n\nexport const SubmitManualCompletionInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'SubmitManualCompletionInput' })\nexport type SubmitManualCompletionInput = z.input<typeof SubmitManualCompletionInputSchema>\n\nexport const CancelConnectionInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'CancelConnectionInput' })\nexport type CancelConnectionInput = z.input<typeof CancelConnectionInputSchema>\n\nexport const RetryConnectionInputSchema = z\n .object({ commandId: CommandIdSchema })\n .strict()\n .meta({ id: 'RetryConnectionInput' })\nexport type RetryConnectionInput = z.input<typeof RetryConnectionInputSchema>\n\nexport const IssueConnectionTokenInputSchema = z\n .object({\n origin: z.url().refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === '' && url.search === '' && url.hash === '' &&\n (url.pathname === '' || url.pathname === '/') &&\n (url.protocol === 'https:' || (url.protocol === 'http:' && isLoopbackHost(url.hostname)))\n }, 'Origin must be an HTTPS origin without a path, query, or fragment'),\n })\n .strict()\n .meta({ id: 'IssueConnectionTokenInput' })\nexport type IssueConnectionTokenInput = z.input<typeof IssueConnectionTokenInputSchema>\n\nexport const IssueConnectionTokenResponseSchema = z\n .object({\n accessToken: z.string().min(1).max(8192),\n tokenType: z.literal('Bearer'),\n expiresAt: IsoDateTimeSchema,\n })\n .strict()\n .meta({ id: 'IssueConnectionTokenResponse' })\nexport type IssueConnectionTokenResponse = z.infer<typeof IssueConnectionTokenResponseSchema>\n\nfunction isLoopbackHost(hostname: string): boolean {\n return hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '[::1]'\n}\n","import { z } from 'zod'\n\nimport { DnsRecordSchema, ExistingRecordPolicySchema } from './dns'\nimport {\n ApplicationIdSchema,\n CommandIdSchema,\n ConnectionIdSchema,\n DomainNameSchema,\n IsoDateTimeSchema,\n TenantIdSchema,\n} from './primitives'\n\nexport const ConnectionFlowIdSchema = z.string().trim().min(1).max(200).meta({ id: 'ConnectionFlowId' })\nexport type ConnectionFlowId = z.infer<typeof ConnectionFlowIdSchema>\n\nexport const ConditionalDnsRecordsSchema = z.strictObject({\n domain: z.array(DnsRecordSchema).min(1).max(100),\n subDomain: z.array(DnsRecordSchema).min(1).max(100).optional(),\n rootNS: z.array(DnsRecordSchema).min(1).max(100).optional(),\n}).superRefine((records, context) => {\n records.rootNS?.forEach((record, index) => {\n if (record.host !== '@' || record.type !== 'NS') {\n context.addIssue({\n code: 'custom',\n path: ['rootNS', index],\n message: 'rootNS accepts only NS records at the zone apex',\n })\n }\n })\n}).meta({ id: 'ConditionalDnsRecords' })\nexport type ConditionalDnsRecords = z.infer<typeof ConditionalDnsRecordsSchema>\n\nconst DirectConnectionFlowTargetInputSchema = z.strictObject({\n domain: DomainNameSchema,\n records: z.array(DnsRecordSchema).min(1).max(100),\n})\n\nconst ConditionalConnectionFlowTargetInputSchema = z.strictObject({\n domain: DomainNameSchema,\n conditionalRecords: ConditionalDnsRecordsSchema,\n})\n\nexport const ConnectionFlowTargetInputSchema = z.union([\n DirectConnectionFlowTargetInputSchema,\n ConditionalConnectionFlowTargetInputSchema,\n]).meta({ id: 'ConnectionFlowTargetInput' })\nexport type ConnectionFlowTargetInput = z.input<typeof ConnectionFlowTargetInputSchema>\n\nexport const CreateConnectionFlowInputSchema = z.strictObject({\n applicationId: ApplicationIdSchema,\n tenantId: TenantIdSchema,\n existingRecordPolicy: ExistingRecordPolicySchema.default({\n validateDmarc: false,\n validateCAA: false,\n }),\n targets: z.array(ConnectionFlowTargetInputSchema).min(2).max(100).superRefine((targets, context) => {\n const seen = new Set<string>()\n targets.forEach((target, index) => {\n if (seen.has(target.domain)) {\n context.addIssue({ code: 'custom', path: [index, 'domain'], message: 'Flow target domains must be unique' })\n }\n seen.add(target.domain)\n })\n }),\n commandId: CommandIdSchema,\n}).meta({ id: 'CreateConnectionFlowInput' })\nexport type CreateConnectionFlowInput = z.input<typeof CreateConnectionFlowInputSchema>\n\nexport const ConnectionFlowTargetSchema = z.strictObject({\n domain: DomainNameSchema,\n state: z.enum(['pending', 'provisioned']),\n connectionId: ConnectionIdSchema.optional(),\n}).superRefine((target, context) => {\n if ((target.state === 'provisioned') !== (target.connectionId !== undefined)) {\n context.addIssue({\n code: 'custom',\n path: ['connectionId'],\n message: target.state === 'provisioned'\n ? 'A provisioned target requires a connection id'\n : 'A pending target cannot have a connection id',\n })\n }\n}).meta({ id: 'ConnectionFlowTarget' })\nexport type ConnectionFlowTarget = z.infer<typeof ConnectionFlowTargetSchema>\n\nexport const ConnectionFlowSchema = z.strictObject({\n id: ConnectionFlowIdSchema,\n applicationId: ApplicationIdSchema,\n tenantId: TenantIdSchema,\n state: z.enum(['provisioning', 'ready']),\n targets: z.array(ConnectionFlowTargetSchema).min(2).max(100),\n createdAt: IsoDateTimeSchema,\n updatedAt: IsoDateTimeSchema,\n}).superRefine((flow, context) => {\n const allProvisioned = flow.targets.every((target) => target.state === 'provisioned')\n if ((flow.state === 'ready') !== allProvisioned) {\n context.addIssue({ code: 'custom', path: ['state'], message: 'Flow state must match target provisioning state' })\n }\n}).meta({ id: 'ConnectionFlow' })\nexport type ConnectionFlow = z.infer<typeof ConnectionFlowSchema>\n\nexport const ConnectionFlowResponseSchema = z.strictObject({ flow: ConnectionFlowSchema })\n .meta({ id: 'ConnectionFlowResponse' })\nexport type ConnectionFlowResponse = z.infer<typeof ConnectionFlowResponseSchema>\n","import { z } from 'zod'\n\nimport { ConnectionIdSchema, IsoDateTimeSchema } from './primitives'\n\nexport const SharedFlowIdSchema = z.string().min(1).max(200).brand<'SharedFlowId'>()\nexport type SharedFlowId = z.infer<typeof SharedFlowIdSchema>\n\nexport const SharedFlowTokenSchema = z.string().regex(/^[A-Za-z0-9_-]{43}$/).brand<'SharedFlowToken'>()\nexport type SharedFlowToken = z.infer<typeof SharedFlowTokenSchema>\n\nexport const CreateSharedFlowInputSchema = z.strictObject({\n connectionId: ConnectionIdSchema,\n expiresAt: IsoDateTimeSchema,\n})\nexport type CreateSharedFlowInput = z.infer<typeof CreateSharedFlowInputSchema>\n\nexport const CreateSharedFlowResponseSchema = z.strictObject({\n sharedFlowId: SharedFlowIdSchema,\n token: SharedFlowTokenSchema,\n expiresAt: IsoDateTimeSchema,\n})\nexport type CreateSharedFlowResponse = z.infer<typeof CreateSharedFlowResponseSchema>\n\nexport const ResolveSharedFlowInputSchema = z.strictObject({\n token: SharedFlowTokenSchema,\n origin: z.string().url().max(2048),\n})\nexport type ResolveSharedFlowInput = z.infer<typeof ResolveSharedFlowInputSchema>\n\nexport const ResolveSharedFlowResponseSchema = z.strictObject({\n sharedFlowId: SharedFlowIdSchema,\n connectionId: ConnectionIdSchema,\n accessToken: z.string().min(1).max(8192),\n expiresAt: IsoDateTimeSchema,\n})\nexport type ResolveSharedFlowResponse = z.infer<typeof ResolveSharedFlowResponseSchema>\n\nexport const SharedFlowUrlSchema = z.string().url().max(4096)\nexport type SharedFlowUrl = z.infer<typeof SharedFlowUrlSchema>\n\nexport const SharedFlowInvitationUrlSchema = SharedFlowUrlSchema.superRefine(\n (value, context) => {\n const url = new URL(value)\n const secure = url.protocol === 'https:'\n const loopback = url.protocol === 'http:' && isLoopbackHostname(url.hostname)\n if (!secure && !loopback) {\n context.addIssue({\n code: 'custom',\n message: 'Shared-flow invitation URLs must use HTTPS, except on loopback development hosts',\n })\n }\n if (url.username !== '' || url.password !== '') {\n context.addIssue({\n code: 'custom',\n message: 'Shared-flow invitation URLs cannot contain user information',\n })\n }\n const fragment = new URLSearchParams(url.hash.slice(1))\n const token = fragment.get('domain0')\n if (fragment.size !== 1 || !SharedFlowTokenSchema.safeParse(token).success) {\n context.addIssue({\n code: 'custom',\n message: 'Shared-flow invitation URLs require one valid domain0 capability in the fragment',\n })\n }\n },\n).meta({ id: 'SharedFlowInvitationUrl' })\nexport type SharedFlowInvitationUrl = z.infer<typeof SharedFlowInvitationUrlSchema>\n\nexport const SharedFlowInvitationSchema = z.object({\n sharedFlowId: SharedFlowIdSchema,\n url: SharedFlowInvitationUrlSchema,\n expiresAt: IsoDateTimeSchema,\n}).strict().meta({ id: 'SharedFlowInvitation' })\nexport type SharedFlowInvitation = z.infer<typeof SharedFlowInvitationSchema>\nexport type SharedFlowInvitationInput = z.input<typeof SharedFlowInvitationSchema>\n\nfunction isLoopbackHostname(hostname: string): boolean {\n const normalized = hostname.toLowerCase()\n return normalized === 'localhost' || normalized === '[::1]' || /^127(?:\\.[0-9]{1,3}){3}$/.test(normalized)\n}\n","import { z } from 'zod'\n\nimport { DomainNameSchema, IsoDateTimeSchema } from './primitives'\n\nexport const DkimSelectorSchema = z\n .string()\n .trim()\n .toLowerCase()\n .min(1)\n .max(63)\n .regex(/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/)\n .brand<'DkimSelector'>()\n .meta({ id: 'DkimSelector' })\nexport type DkimSelector = z.infer<typeof DkimSelectorSchema>\n\nexport const DkimGuidanceInputSchema = z\n .object({\n selectors: z.array(DkimSelectorSchema).max(10).default([]),\n })\n .strict()\n .superRefine((input, context) => {\n if (new Set(input.selectors).size !== input.selectors.length) {\n context.addIssue({\n code: 'custom',\n path: ['selectors'],\n message: 'DKIM selectors must be unique',\n })\n }\n })\n .meta({ id: 'DkimGuidanceInput' })\nexport type DkimGuidanceInput = z.input<typeof DkimGuidanceInputSchema>\n\nexport const Domain0DkimGuidanceOptionsSchema = z\n .object({\n enableDkim: z.boolean().default(false),\n dkimSelectors: z.array(DkimSelectorSchema).max(10).default([]),\n })\n .strict()\n .superRefine((input, context) => {\n if (new Set(input.dkimSelectors).size !== input.dkimSelectors.length) {\n context.addIssue({\n code: 'custom',\n path: ['dkimSelectors'],\n message: 'DKIM selectors must be unique',\n })\n }\n })\n .meta({ id: 'Domain0DkimGuidanceOptions' })\nexport type Domain0DkimGuidanceOptions = z.input<typeof Domain0DkimGuidanceOptionsSchema>\n\nconst GoogleWorkspaceEmailProviderSchema = z.object({\n id: z.literal('google_workspace'),\n name: z.literal('Google Workspace'),\n guideUrl: z.literal('https://support.google.com/a/answer/174124'),\n}).strict()\n\nconst Microsoft365EmailProviderSchema = z.object({\n id: z.literal('microsoft_365'),\n name: z.literal('Microsoft 365'),\n guideUrl: z.literal('https://learn.microsoft.com/en-us/defender-office-365/email-authentication-dkim-configure'),\n}).strict()\n\nconst ZohoMailEmailProviderSchema = z.object({\n id: z.literal('zoho_mail'),\n name: z.literal('Zoho Mail'),\n guideUrl: z.literal('https://www.zoho.com/mail/help/adminconsole/dkim-configuration.html'),\n}).strict()\n\nexport const EmailProviderSchema = z\n .discriminatedUnion('id', [\n GoogleWorkspaceEmailProviderSchema,\n Microsoft365EmailProviderSchema,\n ZohoMailEmailProviderSchema,\n ])\n .meta({ id: 'EmailProvider' })\nexport type EmailProvider = z.infer<typeof EmailProviderSchema>\nexport type EmailProviderId = EmailProvider['id']\n\nexport const EmailProviderDetectionStatusSchema = z\n .enum(['detected', 'ambiguous', 'unknown'])\n .meta({ id: 'EmailProviderDetectionStatus' })\nexport type EmailProviderDetectionStatus = z.infer<typeof EmailProviderDetectionStatusSchema>\n\nexport const DkimDnsRecordTypeSchema = z\n .enum(['TXT', 'CNAME'])\n .meta({ id: 'DkimDnsRecordType' })\nexport type DkimDnsRecordType = z.infer<typeof DkimDnsRecordTypeSchema>\n\nexport const DkimDnsEvidenceStatusSchema = z\n .enum(['record_observed', 'no_record_observed', 'not_checked', 'lookup_unavailable'])\n .meta({ id: 'DkimDnsEvidenceStatus' })\nexport type DkimDnsEvidenceStatus = z.infer<typeof DkimDnsEvidenceStatusSchema>\n\nexport const DkimDnsRecordEvidenceSchema = z\n .object({\n selector: DkimSelectorSchema,\n types: z.array(DkimDnsRecordTypeSchema).min(1).max(2).refine(\n (types) => new Set(types).size === types.length,\n 'Observed DKIM DNS record types must be unique',\n ),\n })\n .strict()\n .meta({ id: 'DkimDnsRecordEvidence' })\nexport type DkimDnsRecordEvidence = z.infer<typeof DkimDnsRecordEvidenceSchema>\n\nexport const DkimDnsEvidenceSchema = z\n .object({\n status: DkimDnsEvidenceStatusSchema,\n selectorsChecked: z.array(DkimSelectorSchema).max(12).refine(\n (selectors) => new Set(selectors).size === selectors.length,\n 'Checked DKIM selectors must be unique',\n ),\n records: z.array(DkimDnsRecordEvidenceSchema).max(12),\n })\n .strict()\n .superRefine((evidence, context) => {\n const checked = new Set(evidence.selectorsChecked)\n if (evidence.records.some((record) => !checked.has(record.selector))) {\n context.addIssue({\n code: 'custom',\n path: ['records'],\n message: 'Observed records must belong to checked selectors',\n })\n }\n if (evidence.status === 'not_checked' && (\n evidence.selectorsChecked.length !== 0 || evidence.records.length !== 0\n )) {\n context.addIssue({\n code: 'custom',\n path: ['status'],\n message: 'Not-checked evidence cannot include selector observations',\n })\n }\n if (evidence.status === 'record_observed' && evidence.records.length === 0) {\n context.addIssue({\n code: 'custom',\n path: ['records'],\n message: 'Observed status requires at least one DNS record',\n })\n }\n if (evidence.status !== 'record_observed' && evidence.records.length !== 0) {\n context.addIssue({\n code: 'custom',\n path: ['records'],\n message: 'Only observed status can include DNS records',\n })\n }\n if (['no_record_observed', 'lookup_unavailable'].includes(evidence.status) &&\n evidence.selectorsChecked.length === 0) {\n context.addIssue({\n code: 'custom',\n path: ['selectorsChecked'],\n message: 'A DNS lookup status requires at least one checked selector',\n })\n }\n })\n .meta({ id: 'DkimDnsEvidence' })\nexport type DkimDnsEvidence = z.infer<typeof DkimDnsEvidenceSchema>\n\nexport const DkimGuidanceResponseSchema = z\n .object({\n domain: DomainNameSchema,\n detectionStatus: EmailProviderDetectionStatusSchema,\n candidates: z.array(EmailProviderSchema).max(3),\n provider: EmailProviderSchema.optional(),\n mxHosts: z.array(DomainNameSchema).max(20).refine(\n (hosts) => new Set(hosts).size === hosts.length,\n 'MX hosts must be unique',\n ),\n dkimDns: DkimDnsEvidenceSchema,\n observedAt: IsoDateTimeSchema,\n })\n .strict()\n .superRefine((result, context) => {\n const candidateIds = result.candidates.map((candidate) => candidate.id)\n if (new Set(candidateIds).size !== candidateIds.length) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Email provider candidates must be unique',\n })\n }\n if (result.detectionStatus === 'detected' && (\n result.candidates.length !== 1 || result.provider?.id !== result.candidates[0]?.id\n )) {\n context.addIssue({\n code: 'custom',\n path: ['provider'],\n message: 'Detected status requires exactly one matching provider',\n })\n }\n if (result.detectionStatus === 'ambiguous' && (\n result.candidates.length < 2 || result.provider !== undefined\n )) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Ambiguous status requires multiple candidates and no resolved provider',\n })\n }\n if (result.detectionStatus === 'unknown' && (\n result.candidates.length !== 0 || result.provider !== undefined\n )) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Unknown status cannot include an email provider',\n })\n }\n })\n .meta({ id: 'DkimGuidanceResponse' })\nexport type DkimGuidanceResponse = z.infer<typeof DkimGuidanceResponseSchema>\n","import { z } from 'zod'\n\nimport { ConnectionSchema, ConnectionStateSchema } from './connection'\nimport {\n SharedFlowIdSchema,\n SharedFlowInvitationUrlSchema,\n} from './shared-flow'\nimport { IsoDateTimeSchema } from './primitives'\nimport { EmailProviderSchema } from './dkim-guidance'\n\nexport const Domain0ConnectStepSchema = z.union([\n z.enum([\n 'loading',\n 'provider_detection',\n 'provider_selection',\n 'cancellation_confirmation',\n ]),\n ConnectionStateSchema,\n]).meta({ id: 'Domain0ConnectStep' })\nexport type Domain0ConnectStep = z.infer<typeof Domain0ConnectStepSchema>\n\nexport const Domain0ConnectCloseReasonSchema = z.enum([\n 'close_button',\n 'escape',\n 'programmatic',\n 'destroyed',\n 'success',\n]).meta({ id: 'Domain0ConnectCloseReason' })\nexport type Domain0ConnectCloseReason = z.infer<typeof Domain0ConnectCloseReasonSchema>\n\nconst ActiveConnectionSchema = ConnectionSchema.and(\n z.object({ state: z.literal('active') }),\n)\n\nconst ManualConnectionSchema = ConnectionSchema.and(\n z.object({ state: z.literal('manual_required') }),\n)\n\nexport const Domain0ConnectSuccessEventSchema = z.object({\n type: z.literal('success'),\n connection: ActiveConnectionSchema,\n}).strict().meta({ id: 'Domain0ConnectSuccessEvent' })\n\nexport const Domain0ConnectCloseEventSchema = z.object({\n type: z.literal('close'),\n reason: Domain0ConnectCloseReasonSchema,\n connection: ConnectionSchema.optional(),\n step: Domain0ConnectStepSchema.optional(),\n}).strict().meta({ id: 'Domain0ConnectCloseEvent' })\n\nexport const Domain0ConnectStepChangeEventSchema = z.object({\n type: z.literal('step_change'),\n step: Domain0ConnectStepSchema,\n previousStep: Domain0ConnectStepSchema.optional(),\n connection: ConnectionSchema.optional(),\n}).strict().meta({ id: 'Domain0ConnectStepChangeEvent' })\n\nexport const Domain0ManualSetupDocumentationClickEventSchema = z.object({\n type: z.literal('manual_setup_documentation_click'),\n connection: ManualConnectionSchema,\n}).strict().meta({ id: 'Domain0ManualSetupDocumentationClickEvent' })\n\nexport const Domain0RequestCloseEventSchema = z.object({\n type: z.literal('request_close'),\n connection: ConnectionSchema.optional(),\n step: Domain0ConnectStepSchema,\n}).strict().meta({ id: 'Domain0RequestCloseEvent' })\n\nexport const Domain0SharedFlowSentEventSchema = z.object({\n type: z.literal('shared_flow_sent'),\n connection: ManualConnectionSchema,\n sharedFlowId: SharedFlowIdSchema,\n url: SharedFlowInvitationUrlSchema,\n expiresAt: IsoDateTimeSchema,\n}).strict().meta({ id: 'Domain0SharedFlowSentEvent' })\n\nexport const Domain0DkimSetupDocumentationClickEventSchema = z.object({\n type: z.literal('dkim_setup_documentation_click'),\n connection: ActiveConnectionSchema,\n emailProvider: EmailProviderSchema,\n}).strict().meta({ id: 'Domain0DkimSetupDocumentationClickEvent' })\n\nexport const Domain0ConnectEventSchema = z.discriminatedUnion('type', [\n Domain0ConnectSuccessEventSchema,\n Domain0ConnectCloseEventSchema,\n Domain0ConnectStepChangeEventSchema,\n Domain0ManualSetupDocumentationClickEventSchema,\n Domain0RequestCloseEventSchema,\n Domain0SharedFlowSentEventSchema,\n Domain0DkimSetupDocumentationClickEventSchema,\n]).meta({ id: 'Domain0ConnectEvent' })\n\nexport type Domain0ConnectEvent = z.infer<typeof Domain0ConnectEventSchema>\nexport type Domain0ConnectSuccessEvent = z.infer<typeof Domain0ConnectSuccessEventSchema>\nexport type Domain0ConnectCloseEvent = z.infer<typeof Domain0ConnectCloseEventSchema>\nexport type Domain0ConnectStepChangeEvent = z.infer<typeof Domain0ConnectStepChangeEventSchema>\nexport type Domain0ManualSetupDocumentationClickEvent = z.infer<\n typeof Domain0ManualSetupDocumentationClickEventSchema\n>\nexport type Domain0RequestCloseEvent = z.infer<typeof Domain0RequestCloseEventSchema>\nexport type Domain0SharedFlowSentEvent = z.infer<typeof Domain0SharedFlowSentEventSchema>\nexport type Domain0DkimSetupDocumentationClickEvent = z.infer<\n typeof Domain0DkimSetupDocumentationClickEventSchema\n>\n","import { z } from 'zod'\n\nexport const Domain0SetupPolicySchema = z\n .object({\n mode: z.enum(['automatic', 'manual']).default('automatic'),\n })\n .strict()\n\nexport type Domain0SetupPolicy = z.output<typeof Domain0SetupPolicySchema>\nexport type Domain0SetupPolicyInput = z.input<typeof Domain0SetupPolicySchema>\n","import { z } from 'zod'\n\nconst opaqueHexColorPattern = /^#[0-9A-F]{6}$/\nconst backdropHexColorPattern = /^#[0-9A-F]{8}$/\n\nconst OpaqueHexColorSchema = z\n .string()\n .trim()\n .toUpperCase()\n .regex(opaqueHexColorPattern, 'Expected an opaque #RRGGBB color')\n\nconst BackdropHexColorSchema = z\n .string()\n .trim()\n .toUpperCase()\n .regex(backdropHexColorPattern, 'Expected a #RRGGBBAA backdrop color')\n\nconst WhiteLabelTextSchema = z\n .string()\n .trim()\n .min(1)\n .max(500)\n .refine(\n (value) => !/[<>\\u0000-\\u001F\\u007F]/.test(value),\n 'White-label copy must be plain text without markup or control characters',\n )\n\nexport const Domain0ApplicationNameSchema = WhiteLabelTextSchema.max(120)\n .meta({ id: 'Domain0ApplicationName' })\nexport type Domain0ApplicationName = z.infer<typeof Domain0ApplicationNameSchema>\n\nexport const Domain0WhiteLabelLogoUrlSchema = z\n .string()\n .trim()\n .min(1)\n .max(2_048)\n .refine((value) => {\n try {\n const parsed = new URL(value)\n return parsed.protocol === 'https:' && parsed.username === '' && parsed.password === ''\n } catch {\n return false\n }\n }, 'Logo must be an HTTPS URL without embedded credentials')\n .meta({ id: 'Domain0WhiteLabelLogoUrl' })\nexport type Domain0WhiteLabelLogoUrl = z.infer<typeof Domain0WhiteLabelLogoUrlSchema>\n\nfunction copyWithPlaceholders(...allowed: string[]) {\n return WhiteLabelTextSchema.refine((value) => {\n const withoutAllowedPlaceholders = allowed.reduce(\n (copy, placeholder) => copy.replaceAll(placeholder, ''),\n value,\n )\n return !/[{}]/.test(withoutAllowedPlaceholders)\n }, `Only these placeholders are allowed: ${allowed.join(', ') || 'none'}`)\n}\n\nfunction localizedCopy(message: ReturnType<typeof copyWithPlaceholders>) {\n const localized = z.object({\n en: message,\n es: message.optional(),\n pt: message.optional(),\n 'pt-br': message.optional(),\n 'pt-pt': message.optional(),\n fr: message.optional(),\n it: message.optional(),\n de: message.optional(),\n nl: message.optional(),\n pl: message.optional(),\n tr: message.optional(),\n ja: message.optional(),\n da: message.optional(),\n sv: message.optional(),\n }).strict()\n\n return z.union([\n message.transform((en) => ({ en })),\n localized,\n ])\n}\n\nexport function colorContrastRatio(foreground: string, background: string): number {\n return parsedColorContrastRatio(\n OpaqueHexColorSchema.parse(foreground),\n OpaqueHexColorSchema.parse(background),\n )\n}\n\nfunction parsedColorContrastRatio(foreground: string, background: string): number {\n const foregroundLuminance = relativeLuminance(foreground)\n const backgroundLuminance = relativeLuminance(background)\n const lighter = Math.max(foregroundLuminance, backgroundLuminance)\n const darker = Math.min(foregroundLuminance, backgroundLuminance)\n return (lighter + 0.05) / (darker + 0.05)\n}\n\nfunction isSafeFontFamilyStack(value: string): boolean {\n const families = value.split(',')\n return families.length <= 10 && families.every((family) => {\n const trimmed = family.trim()\n if (trimmed.length === 0) {\n return false\n }\n const quote = trimmed.at(0)\n if (quote === '\"' || quote === \"'\") {\n return trimmed.at(-1) === quote && /^[A-Za-z0-9 -]+$/.test(trimmed.slice(1, -1))\n }\n return /^-?[A-Za-z][A-Za-z0-9 -]*$/.test(trimmed)\n })\n}\n\nfunction relativeLuminance(color: string): number {\n const channels = [1, 3, 5].map((start) => Number.parseInt(color.slice(start, start + 2), 16) / 255)\n const [red, green, blue] = channels.map((channel) => (\n channel <= 0.04045 ? channel / 12.92 : ((channel + 0.055) / 1.055) ** 2.4\n )) as [number, number, number]\n return (0.2126 * red) + (0.7152 * green) + (0.0722 * blue)\n}\n\ntype ThemePaletteToken =\n | 'surface'\n | 'text'\n | 'mutedText'\n | 'border'\n | 'primary'\n | 'onPrimary'\n | 'link'\n | 'focus'\n | 'danger'\n | 'onDanger'\n\ninterface ContrastPair {\n readonly foreground: ThemePaletteToken\n readonly background: ThemePaletteToken\n readonly minimum: number\n readonly purpose: string\n}\n\nconst contrastPairs: readonly ContrastPair[] = [\n { foreground: 'text', background: 'surface', minimum: 4.5, purpose: 'body text' },\n { foreground: 'mutedText', background: 'surface', minimum: 4.5, purpose: 'secondary text' },\n { foreground: 'onPrimary', background: 'primary', minimum: 4.5, purpose: 'primary control text' },\n { foreground: 'danger', background: 'surface', minimum: 4.5, purpose: 'error text' },\n { foreground: 'onDanger', background: 'danger', minimum: 4.5, purpose: 'danger control text' },\n { foreground: 'link', background: 'surface', minimum: 4.5, purpose: 'link text' },\n { foreground: 'border', background: 'surface', minimum: 3, purpose: 'control boundaries' },\n { foreground: 'primary', background: 'surface', minimum: 3, purpose: 'primary control boundaries' },\n { foreground: 'focus', background: 'surface', minimum: 3, purpose: 'focus indicators' },\n]\n\n// The Domain0 system. Ink carries primary actions so exactly one thing on\n// screen is loud; enlarger blue is kept for links, focus and the verified\n// state. border stays dark enough to clear the 3:1 the schema enforces for\n// control boundaries — the light hairlines are a separate CSS variable.\nconst lightPaletteDefaults = {\n surface: '#FFFFFF',\n text: '#0A0A0A',\n mutedText: '#6B6B6B',\n border: '#73737C',\n primary: '#0A0A0A',\n onPrimary: '#FFFFFF',\n link: '#2B21FF',\n focus: '#2B21FF',\n danger: '#B3261E',\n onDanger: '#FFFFFF',\n} as const\n\nconst darkPaletteDefaults = {\n surface: '#111827',\n text: '#F9FAFB',\n mutedText: '#D1D5DB',\n border: '#D1D5DB',\n primary: '#BFDBFE',\n onPrimary: '#172554',\n link: '#BFDBFE',\n focus: '#FBBF24',\n danger: '#FCA5A5',\n onDanger: '#450A0A',\n} as const\n\nfunction themePaletteSchema(defaults: Readonly<Record<ThemePaletteToken, string>>) {\n return z.object({\n surface: OpaqueHexColorSchema.default(defaults.surface),\n text: OpaqueHexColorSchema.default(defaults.text),\n mutedText: OpaqueHexColorSchema.default(defaults.mutedText),\n border: OpaqueHexColorSchema.default(defaults.border),\n primary: OpaqueHexColorSchema.default(defaults.primary),\n onPrimary: OpaqueHexColorSchema.default(defaults.onPrimary),\n link: OpaqueHexColorSchema.default(defaults.link),\n focus: OpaqueHexColorSchema.default(defaults.focus),\n danger: OpaqueHexColorSchema.default(defaults.danger),\n onDanger: OpaqueHexColorSchema.default(defaults.onDanger),\n }).strict().superRefine((palette, context) => {\n for (const pair of contrastPairs) {\n const ratio = parsedColorContrastRatio(palette[pair.foreground], palette[pair.background])\n if (ratio < pair.minimum) {\n context.addIssue({\n code: 'custom',\n path: [pair.foreground],\n message: `${pair.purpose} requires ${pair.minimum}:1 contrast against ${pair.background}; received ${ratio.toFixed(2)}:1`,\n })\n }\n }\n })\n}\n\nconst LightThemePaletteSchema = themePaletteSchema(lightPaletteDefaults)\nconst DarkThemePaletteSchema = themePaletteSchema(darkPaletteDefaults)\n\nexport type Domain0ThemePalette = z.output<typeof LightThemePaletteSchema>\nexport type Domain0ThemePaletteInput = z.input<typeof LightThemePaletteSchema>\n\nexport const Domain0WhiteLabelThemeSchema = z\n .object({\n colorMode: z.enum(['light', 'dark', 'system']).default('system'),\n light: LightThemePaletteSchema.prefault({}),\n dark: DarkThemePaletteSchema.prefault({}),\n backdrop: BackdropHexColorSchema.default('#111827B8'),\n widthPx: z.number().int().min(320).max(960).default(672),\n dialogRadiusPx: z.number().int().min(0).max(48).default(20),\n buttonRadiusPx: z.number().int().min(0).max(999).default(999),\n inputRadiusPx: z.number().int().min(0).max(32).default(12),\n fontFamily: z\n .string()\n .trim()\n .min(1)\n .max(200)\n .refine(isSafeFontFamilyStack, 'Use a comma-separated system font stack without URLs or CSS syntax')\n .default(\n '\"PP Neue Montreal\", \"Inter Tight\", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\n ),\n fontWeight: z.number().int().min(100).max(900).multipleOf(50).default(400),\n boldFontWeight: z.number().int().min(100).max(900).multipleOf(50).default(500),\n })\n .strict()\n .superRefine((theme, context) => {\n if (theme.boldFontWeight < theme.fontWeight) {\n context.addIssue({\n code: 'custom',\n path: ['boldFontWeight'],\n message: 'Bold font weight must be at least the normal font weight',\n })\n }\n })\n\nexport type Domain0WhiteLabelTheme = z.output<typeof Domain0WhiteLabelThemeSchema>\nexport type Domain0WhiteLabelThemeInput = z.input<typeof Domain0WhiteLabelThemeSchema>\n\nexport const Domain0WhiteLabelCopySchema = z\n .object({\n initialSubtitle: localizedCopy(copyWithPlaceholders()).optional(),\n providerLoginMessage: localizedCopy(copyWithPlaceholders('{PROVIDER}')).optional(),\n successTitle: localizedCopy(copyWithPlaceholders('{DOMAIN}')).optional(),\n successDescription: localizedCopy(copyWithPlaceholders('{DOMAIN}')).optional(),\n successButton: localizedCopy(copyWithPlaceholders()).optional(),\n manuallyScreen: z\n .object({\n disableManualSetupDocumentationLink: z.boolean().default(false),\n stepByStepGuide: localizedCopy(copyWithPlaceholders()).optional(),\n })\n .strict()\n .prefault({}),\n })\n .strict()\n\nexport type Domain0WhiteLabelCopy = z.output<typeof Domain0WhiteLabelCopySchema>\nexport type Domain0WhiteLabelCopyInput = z.input<typeof Domain0WhiteLabelCopySchema>\n\nconst DisabledControlSchema = z\n .object({\n disable: z.boolean().default(false),\n })\n .strict()\n\nexport const Domain0WhiteLabelCustomPropertiesSchema = z\n .object({\n manualConfiguration: z\n .object({\n disableScreen: z.boolean().default(false),\n })\n .strict()\n .prefault({}),\n providerLogin: z\n .object({\n forwardLink: DisabledControlSchema.prefault({}),\n gotoManualLink: DisabledControlSchema.prefault({}),\n })\n .strict()\n .prefault({}),\n })\n .strict()\n\nexport type Domain0WhiteLabelCustomProperties = z.output<\n typeof Domain0WhiteLabelCustomPropertiesSchema\n>\nexport type Domain0WhiteLabelCustomPropertiesInput = z.input<\n typeof Domain0WhiteLabelCustomPropertiesSchema\n>\n\nexport const Domain0WhiteLabelSchema = z\n .object({\n theme: Domain0WhiteLabelThemeSchema.prefault({}),\n copy: Domain0WhiteLabelCopySchema.prefault({}),\n logo: Domain0WhiteLabelLogoUrlSchema.optional(),\n logoBackgroundColor: OpaqueHexColorSchema.optional(),\n removeLogoBorder: z.boolean().default(false),\n hideCompanyLogo: z.boolean().default(false),\n hideCompanyName: z.boolean().default(false),\n removeShareLogin: z.boolean().default(false),\n skipCongratulationsScreen: z.boolean().default(false),\n customProperties: Domain0WhiteLabelCustomPropertiesSchema.prefault({}),\n })\n .strict()\n\nexport type Domain0WhiteLabel = z.output<typeof Domain0WhiteLabelSchema>\nexport type Domain0WhiteLabelInput = z.input<typeof Domain0WhiteLabelSchema>\n","import { z } from 'zod'\n\nexport const ManualSetupDocumentationUrlSchema = z\n .url({ protocol: /^https$/ })\n .max(2048)\n .refine((value) => {\n const url = new URL(value)\n return url.username === '' && url.password === ''\n }, 'Manual setup documentation URL must not contain credentials')\n .brand<'ManualSetupDocumentationUrl'>()\n .meta({ id: 'ManualSetupDocumentationUrl' })\n\nexport type ManualSetupDocumentationUrl = z.output<\n typeof ManualSetupDocumentationUrlSchema\n>\nexport type ManualSetupDocumentationUrlInput = z.input<\n typeof ManualSetupDocumentationUrlSchema\n>\n","import { z } from 'zod'\n\nimport { Domain0DkimGuidanceOptionsSchema } from './dkim-guidance'\nimport { Domain0SetupPolicySchema } from './setup-policy'\nimport { Domain0ApplicationNameSchema, Domain0WhiteLabelSchema } from './white-label'\nimport { ManualSetupDocumentationUrlSchema } from './manual-setup-documentation'\n\nexport const Domain0ConnectConfigurationSchema = z\n .object({\n applicationName: Domain0ApplicationNameSchema.optional(),\n whiteLabel: Domain0WhiteLabelSchema.prefault({}),\n setupPolicy: Domain0SetupPolicySchema.prefault({}),\n dkim: Domain0DkimGuidanceOptionsSchema.prefault({}),\n manualSetupDocumentation: ManualSetupDocumentationUrlSchema.optional(),\n })\n .strict()\n .superRefine((configuration, context) => {\n const { customProperties } = configuration.whiteLabel\n const forcedManual = configuration.setupPolicy.mode === 'manual'\n\n if (forcedManual && customProperties.manualConfiguration.disableScreen) {\n context.addIssue({\n code: 'custom',\n path: ['whiteLabel', 'customProperties', 'manualConfiguration', 'disableScreen'],\n message: 'Forced manual setup requires the manual configuration screen',\n })\n }\n if (forcedManual && customProperties.providerLogin.gotoManualLink.disable) {\n context.addIssue({\n code: 'custom',\n path: ['whiteLabel', 'customProperties', 'providerLogin', 'gotoManualLink', 'disable'],\n message: 'Forced manual setup cannot disable entry into manual configuration',\n })\n }\n if (configuration.dkim.enableDkim && configuration.whiteLabel.skipCongratulationsScreen) {\n context.addIssue({\n code: 'custom',\n path: ['whiteLabel', 'skipCongratulationsScreen'],\n message: 'DKIM guidance requires the success screen',\n })\n }\n })\n .meta({ id: 'Domain0ConnectConfiguration' })\n\nexport type Domain0ConnectConfiguration = z.output<typeof Domain0ConnectConfigurationSchema>\nexport type Domain0ConnectConfigurationInput = z.input<typeof Domain0ConnectConfigurationSchema>\n","import { z } from 'zod'\n\nimport { DomainNameSchema, IsoDateTimeSchema } from './primitives'\n\nexport const CompiledProviderIdSchema = z.enum([\n 'alibaba-cloud', 'all-inkl', 'amazon-route-53', 'cloudflare', 'cloudns',\n 'digitalocean', 'dnsimple', 'dreamhost', 'dynadot', 'easydns', 'gandi',\n 'godaddy', 'hetzner', 'hostgator', 'hostinger', 'hosting-com',\n 'inmotion-hosting', 'ionos', 'name-com', 'namecheap', 'namesilo', 'netlify',\n 'o2switch', 'openprovider', 'opensrs', 'ovh', 'porkbun', 'simply', 'spaceship',\n 'transip', 'united-domains', 'vercel', 'wix',\n]).meta({ id: 'CompiledProviderId' })\nexport type CompiledProviderId = z.infer<typeof CompiledProviderIdSchema>\n\nexport const ProviderConformanceCheckNameSchema = z.enum([\n 'authenticated_snapshot',\n 'reserved_name_available',\n 'create_sibling',\n 'create_target',\n 'rrset_sibling_preservation',\n 'idempotent_replay',\n 'replace_target',\n 'authoritative_propagation',\n 'delete_target',\n 'scoped_cleanup',\n]).meta({ id: 'ProviderConformanceCheckName' })\nexport type ProviderConformanceCheckName = z.infer<typeof ProviderConformanceCheckNameSchema>\n\nexport const expectedProviderConformanceChecks = [\n 'authenticated_snapshot',\n 'reserved_name_available',\n 'create_sibling',\n 'create_target',\n 'rrset_sibling_preservation',\n 'idempotent_replay',\n 'replace_target',\n 'authoritative_propagation',\n 'delete_target',\n 'scoped_cleanup',\n] as const satisfies readonly ProviderConformanceCheckName[]\n\nconst ProviderConformanceCheckSchema = z.object({\n name: ProviderConformanceCheckNameSchema,\n}).strict()\n\nconst SourceRevisionSchema = z.union([\n z.literal('unknown'),\n z.string().regex(/^[a-f0-9]{40,64}$/),\n])\n\nexport const ProviderConformanceEvidenceSchema = z.object({\n schemaVersion: z.literal(1),\n providerId: CompiledProviderIdSchema,\n adapterVersion: z.string().min(1).max(200).refine(isTrimmedSingleLine),\n sourceRevision: SourceRevisionSchema,\n sourceModified: z.boolean(),\n binarySha256: z.string().regex(/^[a-f0-9]{64}$/),\n zone: DomainNameSchema,\n runId: z.string().regex(/^[a-f0-9]{16,64}$/),\n host: z.string(),\n startedAt: IsoDateTimeSchema,\n completedAt: IsoDateTimeSchema,\n passed: z.boolean(),\n checks: z.array(ProviderConformanceCheckSchema).max(expectedProviderConformanceChecks.length),\n cleanupAttempted: z.boolean(),\n cleanupCompleted: z.boolean(),\n}).strict().superRefine((evidence, context) => {\n if (evidence.host !== `_domain0-conformance-${evidence.runId}`) {\n context.addIssue({\n code: 'custom', path: ['host'],\n message: 'Conformance hostname must be derived from the random run ID',\n })\n }\n if (Date.parse(evidence.completedAt) < Date.parse(evidence.startedAt)) {\n context.addIssue({\n code: 'custom', path: ['completedAt'],\n message: 'Conformance completion must not precede its start',\n })\n }\n const names = evidence.checks.map((check) => check.name)\n if (!validCheckSequence(names)) {\n context.addIssue({\n code: 'custom', path: ['checks'],\n message: 'Conformance checks must be an ordered prefix followed optionally by scoped cleanup',\n })\n }\n const cleanupCheck = names.includes('scoped_cleanup')\n if ((evidence.cleanupCompleted && !evidence.cleanupAttempted) || cleanupCheck !== evidence.cleanupCompleted) {\n context.addIssue({\n code: 'custom', path: ['cleanupCompleted'],\n message: 'Completed cleanup requires an attempted cleanup and the scoped-cleanup check',\n })\n }\n}).meta({ id: 'ProviderConformanceEvidence' })\nexport type ProviderConformanceEvidence = z.infer<typeof ProviderConformanceEvidenceSchema>\n\n// This schema checks Domain0's evidence policy. Reports are unsigned, so a\n// successful parse does not authenticate the artifact or its producer.\nexport const VerifiedProviderConformanceEvidenceSchema = ProviderConformanceEvidenceSchema.refine(\n (evidence) => evidence.passed && !evidence.sourceModified && evidence.sourceRevision !== 'unknown' &&\n evidence.cleanupAttempted && evidence.cleanupCompleted &&\n evidence.checks.every((check, index) => check.name === expectedProviderConformanceChecks[index]) &&\n evidence.checks.length === expectedProviderConformanceChecks.length,\n 'Verified live-suite evidence requires clean traceable source, every ordered check, and completed cleanup',\n).meta({ id: 'VerifiedProviderConformanceEvidence' })\nexport type VerifiedProviderConformanceEvidence = z.infer<typeof VerifiedProviderConformanceEvidenceSchema>\n\nfunction validCheckSequence(checks: readonly ProviderConformanceCheckName[]): boolean {\n let position = 0\n let cleanupSeen = false\n for (const check of checks) {\n if (check === 'scoped_cleanup') {\n if (cleanupSeen) return false\n cleanupSeen = true\n continue\n }\n if (cleanupSeen || check !== expectedProviderConformanceChecks[position]) return false\n position += 1\n }\n return true\n}\n\nfunction isTrimmedSingleLine(value: string): boolean {\n return value.trim() === value && !/[\\u0000\\r\\n]/.test(value)\n}\n","import { z } from 'zod'\n\nimport { ResolvedDnsRecordSchema } from './dns'\nimport { DomainNameSchema } from './primitives'\nimport { ProviderSchema } from './provider'\n\nexport const DomainDelegationStatusSchema = z\n .enum(['delegated', 'undelegated', 'unknown'])\n .meta({ id: 'DomainDelegationStatus' })\nexport type DomainDelegationStatus = z.infer<typeof DomainDelegationStatusSchema>\n\nexport const DomainSetupSupportSchema = z\n .enum(['automatic', 'manual', 'unavailable', 'ambiguous', 'unknown'])\n .meta({ id: 'DomainSetupSupport' })\nexport type DomainSetupSupport = z.infer<typeof DomainSetupSupportSchema>\n\nexport const RecordConflictReasonSchema = z\n .enum([\n 'same_name_and_type',\n 'cname_collision',\n 'mx_set_collision',\n 'spf_collision',\n 'ns_delegation',\n ])\n .meta({ id: 'RecordConflictReason' })\nexport type RecordConflictReason = z.infer<typeof RecordConflictReasonSchema>\n\nexport const CheckDomainInputSchema = z\n .object({\n domain: DomainNameSchema,\n records: z.array(ResolvedDnsRecordSchema).max(100).default([]),\n checkConflicts: z.boolean().default(false),\n })\n .strict()\n .superRefine((input, context) => {\n if (input.checkConflicts && input.records.length === 0) {\n context.addIssue({\n code: 'custom',\n path: ['records'],\n message: 'Record conflict analysis requires at least one requested record',\n })\n }\n })\n .meta({ id: 'CheckDomainInput' })\nexport type CheckDomainInput = z.input<typeof CheckDomainInputSchema>\n\nexport const DomainProviderCandidateSchema = z\n .object({\n provider: ProviderSchema,\n confidence: z.number().min(0).max(1),\n exact: z.boolean(),\n })\n .strict()\n .meta({ id: 'DomainProviderCandidate' })\nexport type DomainProviderCandidate = z.infer<typeof DomainProviderCandidateSchema>\n\nexport const DomainRecordConflictSchema = z\n .object({\n requested: ResolvedDnsRecordSchema,\n existing: z.array(ResolvedDnsRecordSchema).max(1_000),\n reasons: z.array(RecordConflictReasonSchema).min(1).max(5).refine(\n (reasons) => new Set(reasons).size === reasons.length,\n 'Conflict reasons must be unique',\n ),\n })\n .strict()\n .meta({ id: 'DomainRecordConflict' })\nexport type DomainRecordConflict = z.infer<typeof DomainRecordConflictSchema>\n\nexport const ConflictAnalysisSchema = z\n .object({\n status: z.enum(['not_requested', 'complete', 'partial']),\n authoritativeServers: z.number().int().min(0).max(16),\n respondingServers: z.number().int().min(0).max(16),\n conflicts: z.array(DomainRecordConflictSchema).max(100),\n })\n .strict()\n .superRefine((analysis, context) => {\n if (analysis.respondingServers > analysis.authoritativeServers) {\n context.addIssue({\n code: 'custom',\n path: ['respondingServers'],\n message: 'Responding nameservers cannot exceed authoritative nameservers',\n })\n }\n if (analysis.status === 'complete' && analysis.respondingServers !== analysis.authoritativeServers) {\n context.addIssue({\n code: 'custom',\n path: ['status'],\n message: 'Complete analysis requires every authoritative nameserver to respond',\n })\n }\n if (analysis.status === 'partial' && (\n analysis.respondingServers === 0 || analysis.respondingServers >= analysis.authoritativeServers\n )) {\n context.addIssue({\n code: 'custom',\n path: ['status'],\n message: 'Partial analysis requires some but not all authoritative nameservers to respond',\n })\n }\n if (analysis.status === 'not_requested' && analysis.conflicts.length !== 0) {\n context.addIssue({\n code: 'custom',\n path: ['conflicts'],\n message: 'Conflict results cannot exist when analysis was not requested',\n })\n }\n })\n .meta({ id: 'ConflictAnalysis' })\nexport type ConflictAnalysis = z.infer<typeof ConflictAnalysisSchema>\n\nexport const CheckDomainResponseSchema = z\n .object({\n domain: DomainNameSchema,\n delegationStatus: DomainDelegationStatusSchema,\n candidates: z.array(DomainProviderCandidateSchema).max(65),\n provider: ProviderSchema.optional(),\n setupSupport: DomainSetupSupportSchema,\n conflictAnalysis: ConflictAnalysisSchema,\n })\n .strict()\n .superRefine((result, context) => {\n const candidateIds = result.candidates.map((candidate) => candidate.provider.id)\n if (new Set(candidateIds).size !== candidateIds.length) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Provider candidates must be unique',\n })\n }\n if (result.delegationStatus === 'undelegated' && (\n result.candidates.length !== 0 || result.provider !== undefined || result.setupSupport !== 'unavailable'\n )) {\n context.addIssue({\n code: 'custom',\n path: ['delegationStatus'],\n message: 'Undelegated domains cannot have provider support',\n })\n }\n if (result.provider !== undefined && !result.candidates.some(\n (candidate) => candidate.exact && candidate.provider.id === result.provider?.id,\n )) {\n context.addIssue({\n code: 'custom',\n path: ['provider'],\n message: 'Resolved provider must be an exact provider candidate',\n })\n }\n if (['automatic', 'manual'].includes(result.setupSupport) && result.provider === undefined) {\n context.addIssue({\n code: 'custom',\n path: ['setupSupport'],\n message: 'Available setup support requires a resolved provider',\n })\n }\n if (result.setupSupport === 'automatic' && !result.provider?.availableAuthorizationMethods.some(\n (method) => method !== 'manual',\n )) {\n context.addIssue({\n code: 'custom',\n path: ['setupSupport'],\n message: 'Automatic setup requires a configured non-manual authorization method',\n })\n }\n if (result.setupSupport === 'manual' && (\n result.provider?.availableAuthorizationMethods.length !== 1 ||\n result.provider.availableAuthorizationMethods[0] !== 'manual'\n )) {\n context.addIssue({\n code: 'custom',\n path: ['setupSupport'],\n message: 'Manual setup requires the manual authorization method',\n })\n }\n if (result.setupSupport === 'ambiguous' && result.candidates.length === 0) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Ambiguous setup requires provider candidates',\n })\n }\n if (result.setupSupport === 'unknown' && result.candidates.length !== 0) {\n context.addIssue({\n code: 'custom',\n path: ['candidates'],\n message: 'Unknown setup cannot include provider candidates',\n })\n }\n if (['ambiguous', 'unknown'].includes(result.setupSupport) && result.provider !== undefined) {\n context.addIssue({\n code: 'custom',\n path: ['provider'],\n message: 'Ambiguous or unknown support cannot resolve one provider',\n })\n }\n })\n .meta({ id: 'CheckDomainResponse' })\nexport type CheckDomainResponse = z.infer<typeof CheckDomainResponseSchema>\n","import { z } from 'zod'\n\nexport const Domain0ErrorCodeSchema = z.enum([\n 'invalid_request',\n 'unauthorized',\n 'forbidden',\n 'not_found',\n 'conflict',\n 'rate_limited',\n 'dns_unavailable',\n 'provider_unavailable',\n 'provider_authorization_failed',\n 'provider_limitation',\n 'plan_expired',\n 'propagation_pending',\n 'internal_error',\n]).meta({ id: 'Domain0ErrorCode' })\nexport type Domain0ErrorCode = z.infer<typeof Domain0ErrorCodeSchema>\n\nexport const Domain0ErrorResponseSchema = z\n .object({\n error: z\n .object({\n code: Domain0ErrorCodeSchema,\n message: z.string().min(1),\n requestId: z.string().min(1),\n retryable: z.boolean(),\n details: z.record(z.string(), z.unknown()).optional(),\n })\n .strict(),\n })\n .strict()\n .meta({ id: 'ErrorResponse' })\nexport type Domain0ErrorResponse = z.infer<typeof Domain0ErrorResponseSchema>\n","import { z } from 'zod'\n\n/** Locale identifiers supported by Entri Connect's public configuration contract. */\nexport const domain0Locales = [\n 'en',\n 'es',\n 'pt',\n 'pt-br',\n 'pt-pt',\n 'fr',\n 'it',\n 'de',\n 'nl',\n 'pl',\n 'tr',\n 'ja',\n 'da',\n 'sv',\n] as const\n\nexport const Domain0LocaleSchema = z.enum(domain0Locales).meta({ id: 'Domain0Locale' })\n\nexport type Domain0Locale = z.infer<typeof Domain0LocaleSchema>\n","import { z } from 'zod'\n\nimport { DnsIntentSchema } from './dns'\n\n/** Public platform request. Application and tenant identity come from the API key. */\nexport const PlatformCreateConnectionInputSchema = z\n .strictObject({ intent: DnsIntentSchema })\n .meta({ id: 'PlatformCreateConnectionInput' })\nexport type PlatformCreateConnectionInput = z.input<\n typeof PlatformCreateConnectionInputSchema\n>\n","import { z } from 'zod'\n\nimport {\n ApplicationIdSchema,\n ConnectionIdSchema,\n IsoDateTimeSchema,\n TenantIdSchema,\n} from './primitives'\n\nexport const Domain0WebhookEventTypeSchema = z.enum([\n 'connection.requested',\n 'provider.detection_started',\n 'provider.selected',\n 'authorization.required',\n 'domain_connect.started',\n 'domain_connect.submitted',\n 'authorization.completed',\n 'connection.planning_started',\n 'connection.plan_prepared',\n 'connection.planning_restarted',\n 'connection.already_configured',\n 'connection.plan_confirmed',\n 'connection.changes_applied',\n 'connection.propagation_checked',\n 'connection.activated',\n 'connection.manual_required',\n 'connection.manual_submitted',\n 'connection.failed_retryable',\n 'connection.retry_started',\n 'connection.cancelled',\n]).meta({ id: 'Domain0WebhookEventType' })\nexport type Domain0WebhookEventType = z.infer<typeof Domain0WebhookEventTypeSchema>\n\nexport const Domain0WebhookEventIdSchema = z\n .string()\n .regex(/^[0-9a-f]{64}$/)\n .brand<'Domain0WebhookEventId'>()\n .meta({ id: 'Domain0WebhookEventId' })\nexport type Domain0WebhookEventId = z.infer<typeof Domain0WebhookEventIdSchema>\n\nexport const Domain0WebhookAttributesSchema = z\n .record(z.string().min(1).max(100), z.string().max(4_000))\n .superRefine((attributes, context) => {\n if (Object.keys(attributes).length > 64) {\n context.addIssue({\n code: 'custom',\n message: 'Webhook attributes must contain at most 64 entries',\n })\n }\n })\n .meta({ id: 'Domain0WebhookAttributes' })\n\nexport const Domain0WebhookEventSchema = z.strictObject({\n schemaVersion: z.literal(1),\n eventId: Domain0WebhookEventIdSchema,\n type: Domain0WebhookEventTypeSchema,\n connectionId: ConnectionIdSchema,\n applicationId: ApplicationIdSchema,\n tenantId: TenantIdSchema,\n sequence: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),\n occurredAt: IsoDateTimeSchema,\n attributes: Domain0WebhookAttributesSchema,\n}).meta({ id: 'Domain0WebhookEvent' })\nexport type Domain0WebhookEvent = z.infer<typeof Domain0WebhookEventSchema>\n\nexport const Domain0WebhookVerificationErrorCodeSchema = z.enum([\n 'invalid_headers',\n 'stale_timestamp',\n 'invalid_signature',\n 'invalid_payload',\n 'crypto_unavailable',\n]).meta({ id: 'Domain0WebhookVerificationErrorCode' })\nexport type Domain0WebhookVerificationErrorCode = z.infer<\n typeof Domain0WebhookVerificationErrorCodeSchema\n>\n\nexport class Domain0WebhookVerificationError extends Error {\n override readonly name = 'Domain0WebhookVerificationError'\n\n constructor(\n readonly code: Domain0WebhookVerificationErrorCode,\n message: string,\n options?: ErrorOptions,\n ) {\n super(message, options)\n }\n}\n\nexport const DOMAIN0_WEBHOOK_HEADER_NAMES = {\n eventId: 'x-domain0-event-id',\n eventType: 'x-domain0-event-type',\n deliveryAttempt: 'x-domain0-delivery-attempt',\n schemaVersion: 'x-domain0-schema-version',\n signatureKeyId: 'x-domain0-signature-key-id',\n timestamp: 'x-domain0-timestamp',\n signature: 'x-domain0-signature',\n} as const\n\nexport type Domain0WebhookHeaderSource =\n | { get(name: string): string | null }\n | Readonly<Record<string, string | readonly string[] | undefined>>\n\nexport interface VerifyDomain0WebhookInput {\n readonly body: string | Uint8Array\n readonly headers: Domain0WebhookHeaderSource\n readonly secretKeyring: Readonly<Record<string, Uint8Array | undefined>>\n readonly nowUnixSeconds?: number\n readonly maxAgeSeconds?: number\n readonly maxBodyBytes?: number\n readonly crypto?: Crypto\n}\n\nconst normalizedHeadersSchema = z.strictObject({\n eventId: Domain0WebhookEventIdSchema,\n eventType: z.string().regex(/^domain0\\.[a-z_]+\\.[a-z_]+$/).max(100),\n deliveryAttempt: z.string().regex(/^[1-9][0-9]{0,8}$/).transform(Number),\n schemaVersion: z.literal('1'),\n signatureKeyId: z.string().regex(/^[A-Za-z0-9._-]{1,64}$/),\n timestamp: z.string().regex(/^[0-9]{1,12}$/).transform(Number),\n signature: z.string().regex(/^v1=[0-9a-f]{64}$/),\n})\n\nconst textEncoder = new TextEncoder()\n\nexport async function verifyDomain0Webhook(\n input: VerifyDomain0WebhookInput,\n): Promise<Domain0WebhookEvent> {\n const body = typeof input.body === 'string'\n ? textEncoder.encode(input.body)\n : new Uint8Array(input.body)\n const maxBodyBytes = boundedPositiveInteger(input.maxBodyBytes ?? 1_048_576, 16_777_216)\n if (!(body instanceof Uint8Array) || body.byteLength === 0 || body.byteLength > maxBodyBytes) {\n throw verificationError('invalid_payload', 'Webhook body is empty or exceeds the configured limit')\n }\n\n const headers = parseHeaders(input.headers)\n const now = boundedNonNegativeInteger(\n input.nowUnixSeconds ?? Math.floor(Date.now() / 1_000),\n Number.MAX_SAFE_INTEGER,\n )\n const maxAgeSeconds = boundedPositiveInteger(input.maxAgeSeconds ?? 300, 86_400)\n if (Math.abs(now - headers.timestamp) > maxAgeSeconds) {\n throw verificationError('stale_timestamp', 'Webhook timestamp is outside the accepted replay window')\n }\n\n const hasSecret = Object.prototype.hasOwnProperty.call(input.secretKeyring, headers.signatureKeyId)\n const secret = hasSecret ? input.secretKeyring[headers.signatureKeyId] : undefined\n if (!(secret instanceof Uint8Array) || secret.byteLength !== 32) {\n throw verificationError('invalid_signature', 'Webhook signature is invalid')\n }\n const crypto = input.crypto ?? globalThis.crypto\n if (crypto?.subtle === undefined) {\n throw verificationError('crypto_unavailable', 'Web Crypto is unavailable')\n }\n\n const signature = hexToBytes(headers.signature.slice(3))\n const prefix = textEncoder.encode(`v1.${headers.signatureKeyId}.${headers.timestamp}.`)\n const signedBytes = new Uint8Array(prefix.byteLength + body.byteLength)\n signedBytes.set(prefix)\n signedBytes.set(body, prefix.byteLength)\n const key = await crypto.subtle.importKey(\n 'raw',\n new Uint8Array(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['verify'],\n )\n const verified = await crypto.subtle.verify('HMAC', key, new Uint8Array(signature), signedBytes)\n if (!verified) {\n throw verificationError('invalid_signature', 'Webhook signature is invalid')\n }\n\n let decoded: unknown\n try {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(body)\n decoded = JSON.parse(text)\n } catch (error) {\n throw verificationError('invalid_payload', 'Verified webhook body is not valid UTF-8 JSON', error)\n }\n const parsed = Domain0WebhookEventSchema.safeParse(decoded)\n if (!parsed.success) {\n throw verificationError('invalid_payload', 'Verified webhook body does not match schema version 1', parsed.error)\n }\n if (\n parsed.data.eventId !== headers.eventId\n || `domain0.${parsed.data.type}` !== headers.eventType\n || String(parsed.data.schemaVersion) !== headers.schemaVersion\n ) {\n throw verificationError('invalid_payload', 'Verified webhook headers do not match the event body')\n }\n return parsed.data\n}\n\nfunction parseHeaders(source: Domain0WebhookHeaderSource): z.infer<typeof normalizedHeadersSchema> {\n const values: Record<keyof typeof DOMAIN0_WEBHOOK_HEADER_NAMES, string | undefined> = {\n eventId: undefined,\n eventType: undefined,\n deliveryAttempt: undefined,\n schemaVersion: undefined,\n signatureKeyId: undefined,\n timestamp: undefined,\n signature: undefined,\n }\n if ('get' in source && typeof source.get === 'function') {\n for (const [key, name] of Object.entries(DOMAIN0_WEBHOOK_HEADER_NAMES)) {\n values[key as keyof typeof values] = source.get(name) ?? undefined\n }\n } else {\n const accepted = new Map<string, keyof typeof DOMAIN0_WEBHOOK_HEADER_NAMES>()\n for (const key of Object.keys(DOMAIN0_WEBHOOK_HEADER_NAMES) as Array<keyof typeof DOMAIN0_WEBHOOK_HEADER_NAMES>) {\n accepted.set(DOMAIN0_WEBHOOK_HEADER_NAMES[key], key)\n }\n const observed = new Set<string>()\n for (const [providedName, providedValue] of Object.entries(source)) {\n const name = providedName.toLowerCase()\n const key = accepted.get(name)\n if (key === undefined) continue\n if (observed.has(name) || typeof providedValue !== 'string') {\n throw verificationError('invalid_headers', 'Webhook headers are missing, duplicated, or malformed')\n }\n observed.add(name)\n values[key as keyof typeof values] = providedValue\n }\n }\n const parsed = normalizedHeadersSchema.safeParse(values)\n if (!parsed.success) {\n throw verificationError('invalid_headers', 'Webhook headers are missing, duplicated, or malformed', parsed.error)\n }\n return parsed.data\n}\n\nfunction boundedPositiveInteger(value: number, maximum: number): number {\n if (!Number.isSafeInteger(value) || value < 1 || value > maximum) {\n throw verificationError('invalid_headers', 'Webhook verification limits are invalid')\n }\n return value\n}\n\nfunction boundedNonNegativeInteger(value: number, maximum: number): number {\n if (!Number.isSafeInteger(value) || value < 0 || value > maximum) {\n throw verificationError('invalid_headers', 'Webhook verification time is invalid')\n }\n return value\n}\n\nfunction hexToBytes(value: string): Uint8Array {\n const result = new Uint8Array(value.length / 2)\n for (let index = 0; index < value.length; index += 2) {\n result[index / 2] = Number.parseInt(value.slice(index, index + 2), 16)\n }\n return result\n}\n\nfunction verificationError(\n code: Domain0WebhookVerificationErrorCode,\n message: string,\n cause?: unknown,\n): Domain0WebhookVerificationError {\n return new Domain0WebhookVerificationError(code, message, cause === undefined ? undefined : { cause })\n}\n"],"mappings":";;AAEA,MAAM,aAAa,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AAEnD,MAAa,qBAAqB,WAAW,MAAsB,CAAC,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC;AAGhG,MAAa,sBAAsB,WAAW,MAAuB,CAAC,CAAC,KAAK,EAAE,IAAI,gBAAgB,CAAC;AAGnG,MAAa,iBAAiB,WAAW,MAAkB,CAAC,CAAC,KAAK,EAAE,IAAI,WAAW,CAAC;AAGpF,MAAa,mBAAmB,EAC7B,OAAO,CAAC,CACR,MAAM,4BAA4B,CAAC,CACnC,MAAoB,CAAC,CACrB,KAAK,EAAE,IAAI,aAAa,CAAC;AAG5B,MAAa,kBAAkB,WAAW,MAAmB,CAAC,CAAC,KAAK,EAAE,IAAI,YAAY,CAAC;AAGvF,MAAa,mBAAmB,EAC7B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,YAAY,CAAC,CACb,WAAW,UAAU,MAAM,QAAQ,OAAO,EAAE,CAAC,CAAC,CAC9C,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,MAAM,gGAAgG,CAAC,CACvG,QAAQ,UAAU,CAAC,oBAAoB,KAAK,KAAK,GAAG,mCAAmC,CAAC,CACxF,MAAoB,CAAC,CACrB,KAAK,EAAE,IAAI,aAAa,CAAC;AAG5B,MAAa,oBAAoB,EAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,cAAc,CAAC;;;AChC5F,MAAM,wBAAwB,EAC3B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,YAAY,CAAC,CACb,WAAW,UAAU,MAAM,QAAQ,OAAO,EAAE,CAAC,CAAC,CAC9C,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,OAAO,mBAAmB,6CAA6C;AAE1E,MAAM,kBAAkB;AAExB,MAAa,sBAAsB,EAChC,KAAK;CAAC;CAAK;CAAQ;CAAS;CAAO;CAAM;CAAO;AAAI,CAAC,CAAC,CACtD,KAAK,EAAE,IAAI,gBAAgB,CAAC;AAG/B,MAAM,qBAAqB,EAAE,OAAO,CAAC,CAAC,MAAM,eAAe;AAC3D,MAAM,sBAAsB,EACzB,OAAO,CAAC,CACR,IAAI,CAAC,CAAC,CACN,IAAI,IAAI,CAAC,CACT,QAAQ,UAAU,MAAM,KAAK,MAAM,SAAS,0BAA0B,KAAK,KAAK,GAAG,EAClF,SAAS,sEACX,CAAC;AACH,MAAM,oBAAoB,EACvB,OAAO,oBAAoB,mBAAmB,CAAC,CAC/C,QAAQ,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,UAAU,IAAI,mCAAmC;AAEvF,MAAa,6BAA6B,EACvC,OAAO;CACN,kBAAkB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAC3C,cAAc,kBAAkB,QAAQ,CAAC,CAAC;CAC1C,YAAY,EAAE,MAAM,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAC7C,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,QACtC,qCACF,CAAC,CAAC,QAAQ,CAAC,CAAC;CACZ,mBAAmB,kBAAkB,QAAQ,CAAC,CAAC;AACjD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,QACE,YAAY,QAAQ,oBAAoB,OAAO,KAAK,QAAQ,YAAY,CAAC,CAAC,SAAS,KAClF,QAAQ,WAAW,SAAS,KAAK,OAAO,KAAK,QAAQ,iBAAiB,CAAC,CAAC,SAAS,GACnF,gDACF,CAAC,CACA,aAAa,SAAS,YAAY;CACjC,KAAK,MAAM,CAAC,OAAO,SAAS,CAC1B,CAAC,gBAAgB,QAAQ,YAAY,GACrC,CAAC,qBAAqB,QAAQ,iBAAiB,CACjD,GACE,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,IAAI,GAC7C,IAAI,CAAC,qBAAqB,MAAM,KAAK,GACnC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,OAAO,IAAI;EAClB,SAAS,yBAAyB,KAAK;CACzC,CAAC;AAIT,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAM,sBAAsB,EACzB,OAAO;CACN,MAAM;CACN,MAAM;CACN,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAM;CAC1C,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAa,CAAC,CAAC,QAAQ,GAAG;CAC3D,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAM,CAAC,CAAC,SAAS;CACvD,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;AACrC,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,IAAI,OAAO,SAAS,QAAQ,OAAO,aAAa,KAAA,GAC9C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,UAAU;EACjB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,SAAS,QAAQ,OAAO,aAAa,KAAA,GAC9C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,UAAU;EACjB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,SAAS,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,OAAO,KAAK,CAAC,CAAC,SAC3D,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS;CAAoC,CAAC;CAEpG,IAAI,OAAO,SAAS,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,OAAO,KAAK,CAAC,CAAC,SAC9D,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS;CAAuC,CAAC;CAEvG,IAAI;EAAC;EAAS;EAAM;CAAI,CAAC,CAAC,SAAS,OAAO,IAAI,KAAK,CAAC,iBAAiB,UAAU,OAAO,KAAK,CAAC,CAAC,SAC3F,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS,GAAG,OAAO,KAAK;CAAgC,CAAC;CAE/G,IAAI,OAAO,SAAS,OAAO;EACzB,MAAM,QAAQ,gBAAgB,KAAK,OAAO,KAAK;EAC/C,IAAI,UAAU,QAAQ,OAAO,MAAM,EAAE,IAAI,KACvC,QAAQ,SAAS;GACf,MAAM;GACN,MAAM,CAAC,OAAO;GACd,SAAS;EACX,CAAC;CAEL;CACA,IAAI,OAAO,SAAS,SAAS,eAAe,KAAK,OAAO,KAAK,GAC3D,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS;CAA4C,CAAC;AAE9G,CAAC;AAEH,MAAa,0BAA0B,oBAAoB,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAG3F,MAAa,kBAAkB,oBAC5B,WAAW,EAAE,sBAAsB,2BAA2B,SAAS,EAAE,CAAC,CAAC,CAC3E,aAAa,QAAQ,YAAY;CAChC,IAAI,OAAO,yBAAyB,KAAA,GAAW;CAC/C,IAAI,OAAO,SAAS,SAAU,OAAO,SAAS,YAAY,CAAC,OAAO,KAAK,WAAW,SAAS,GACzF,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,sBAAsB;EAC7B,SAAS;CACX,CAAC;CAEH,IAAI,CAAC,mBAAmB,OAAO,KAAK,GAClC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,OAAO;EACd,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,YAAY,CAAC;AAG3B,MAAa,6BAA6B,EACvC,OAAO;CACN,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACxC,aAAa,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;AACxC,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,kBAAkB,EAC5B,OAAO;CACN,QAAQ;CACR,SAAS,EAAE,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;CAChD,sBAAsB,2BAA2B,QAAQ;EACvD,eAAe;EACf,aAAa;CACf,CAAC;AACH,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,YAAY,CAAC;AAG3B,MAAa,0BAA0B,EACpC,OAAO;CACN,QAAQ;CACR,SAAS,EAAE,MAAM,uBAAuB,CAAC,CAAC,IAAI,GAAG;AACnD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,0BAA0B,wBAAwB,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAG/F,MAAa,sBAAsB,EAChC,OAAO;CACN,QAAQ;CACR,sBAAsB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;CACpD,iBAAiB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;CAC/C,YAAY,EAAE,QAAQ;AACxB,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,IAAI,OAAO,kBAAkB,OAAO,sBAClC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,iBAAiB;EACxB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,gBAAgB,OAAO,oBAAoB,OAAO,uBAC3D,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,gBAAgB,CAAC;AAG/B,MAAa,6BAA6B,EACvC,OAAO;CACN,QAAQ;CACR,eAAe,EAAE,QAAQ;CACzB,SAAS,EAAE,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AACtD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,IAAI,OAAO,kBAAkB,OAAO,QAAQ,OAAO,WAAW,OAAO,UAAU,GAC7E,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,eAAe;EACtB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,uBAAuB,EACjC,KAAK;CAAC;CAAY;CAA8B;AAAqB,CAAC,CAAC,CACvE,KAAK,EAAE,IAAI,iBAAiB,CAAC;AAGhC,MAAa,0BAA0B,EACpC,KAAK,CAAC,SAAS,SAAS,CAAC,CAAC,CAC1B,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,qBAAqB,EAAE,KAAK;CAAC;CAAU;CAAW;AAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,eAAe,CAAC;AAGrG,MAAa,sBAAsB,EAChC,OAAO;CACN,QAAQ;CACR,QAAQ,wBAAwB,SAAS;CACzC,OAAO,wBAAwB,SAAS;CACxC,aAAa,EAAE,QAAQ;AACzB,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,IAAI,OAAO,WAAW,YAAY,OAAO,UAAU,KAAA,GACjD,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS;CAAuC,CAAC;CAEvG,IAAI,OAAO,WAAW,cAAc,OAAO,WAAW,KAAA,KAAa,OAAO,UAAU,KAAA,IAClF,QAAQ,SAAS;EAAE,MAAM;EAAU,SAAS;CAAsD,CAAC;CAErG,IAAI,OAAO,WAAW,YAAY,OAAO,WAAW,KAAA,GAClD,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,QAAQ;EAAG,SAAS;CAAqC,CAAC;AAExG,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,gBAAgB,CAAC;AAG/B,SAAS,kBAAkB,OAAwB;CACjD,IAAI,UAAU,KAAK,OAAO;CAE1B,OADe,MAAM,MAAM,GACf,CAAC,CAAC,OAAO,OAAO,UAAU;EACpC,IAAI,UAAU,KAAK,OAAO,UAAU;EACpC,OAAO,MAAM,UAAU,KAAK,MAAM,UAAU,MAC1C,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,SAAS,GAAG,KAAK,gBAAgB,KAAK,KAAK;CAChF,CAAC;AACH;AAEA,SAAS,mBAAmB,OAAwB;CAClD,MAAM,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,OAAO;CACxE,MAAM,uBAAO,IAAI,IAAY;CAC7B,IAAI,MAAM,SAAS,GAAG,OAAO;CAC7B,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,QAAQ,GAAG;EAC3C,MAAM,YAAY,KAAK,QAAQ,GAAG;EAClC,IAAI,aAAa,GAAG,OAAO;EAC3B,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY;EACzD,MAAM,WAAW,KAAK,MAAM,YAAY,CAAC,CAAC,CAAC,KAAK;EAChD,IAAI,CAAC,mBAAmB,UAAU,IAAI,CAAC,CAAC,WAAW,CAAC,oBAAoB,UAAU,QAAQ,CAAC,CAAC,WAAW,KAAK,IAAI,IAAI,GAClH,OAAO;EAET,IAAI,UAAU,MAAM,SAAS,OAAO,aAAa,WAAW,OAAO;EACnE,IAAI,CAAC,qBAAqB,MAAM,QAAQ,GAAG,OAAO;EAClD,KAAK,IAAI,IAAI;CACf;CACA,OAAO,KAAK,IAAI,GAAG;AACrB;AAEA,SAAS,qBAAqB,MAAc,OAAwB;CAClE,IAAI,SAAS,KAAK,OAAO,UAAU;CACnC,IAAI;EAAC;EAAK;EAAM;CAAI,CAAC,CAAC,SAAS,IAAI,GAAG,OAAO;EAAC;EAAQ;EAAc;CAAQ,CAAC,CAAC,SAAS,KAAK;CAC5F,IAAI,CAAC,SAAS,MAAM,CAAC,CAAC,SAAS,IAAI,GAAG,OAAO,UAAU,OAAO,UAAU;CACxE,IAAI,SAAS,OAAO,OAAO,YAAY,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK;CACvE,IAAI,SAAS,MAAM,OAAO,aAAa,KAAK,KAAK;CACjD,IAAI,SAAS,MAAM,OAAO,UAAU;CACpC,IAAI,SAAS,MAAM;EACjB,MAAM,UAAU,MAAM,MAAM,GAAG;EAC/B,OAAO,QAAQ,SAAS,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,UAC7D,QAAQ,OAAO,WAAW;GAAC;GAAK;GAAK;GAAK;EAAG,CAAC,CAAC,SAAS,MAAM,CAAC,KAC/D,EAAE,QAAQ,SAAS,GAAG,KAAK,QAAQ,SAAS,GAAG;CACnD;CACA,OAAO;AACT;;;ACvSA,MAAa,+BAA+B,EAAE,KAAK;CACjD;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,yBAAyB,CAAC;AAGxC,MAAa,4BAA4B,EAAE,KAAK;CAC9C;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,sBAAsB,CAAC;AAGrC,MAAa,6BAA6B,EACvC,aAAa,EACZ,oBAAoB,EAAE,KAAK;CAAC;CAAa;CAAe;AAAY,CAAC,EACvE,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,+CAA+C,EACzD,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAC5C,KAAK,EAAE,IAAI,yCAAyC,CAAC;AAKxD,MAAa,0BAA0B,EACpC,mBAAmB,UAAU,CAC5B,EAAE,aAAa,EACb,QAAQ,EAAE,KAAK;CAAC;CAAc;CAAkB;AAA8B,CAAC,EACjF,CAAC,GACD,EAAE,aAAa;CACb,QAAQ,EAAE,QAAQ,QAAQ;CAC1B,YAAY;AACd,CAAC,CACH,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAM,6BAA6B,EAChC,IAAI,EAAE,UAAU,UAAU,CAAC,CAAC,CAC5B,MAAM,eAAe,uCAAuC,CAAC,CAC7D,QAAQ,UAAU;CACjB,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,OAAO,IAAI,aAAa,MAAM,IAAI,aAAa;AACjD,GAAG,qDAAqD,CAAC,CACxD,KAAK,EAAE,QAAQ,MAAM,CAAC;AAEzB,MAAa,iBAAiB,EAC3B,OAAO;CACN,IAAI;CACJ,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;CAC7B,cAAc;CACd,gBAAgB;CAChB,+BAA+B,EAAE,MAAM,yBAAyB,CAAC,CAAC,QAC/D,YAAY,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,QAC/C,sCACF;CACA,cAAc;CACd,WAAW;CACX,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,UAAU,YAAY;CAClC,MAAM,UAAU,SAAS;CAQzB,IAAI,EAPU,SAAS,mBAAmB,cACtC,QAAQ,OAAO,WAAW,WAAW,oBAAoB,WAAW,QAAQ,IAC5E,SAAS,mBAAmB,mBAC1B,QAAQ,OAAO,WAAW,WAAW,gBAAgB,IACrD,SAAS,mBAAmB,WAC1B,QAAQ,OAAO,WAAW,WAAW,QAAQ,IAC7C,QAAQ,WAAW,IAEzB,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,+BAA+B;EACtC,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,WAAW,CAAC;AAG1B,MAAa,8BAA8B,EACxC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,EAAE,CAAC,CAAC,CAC9C,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,6BAA6B,EACvC,KAAK,CAAC,eAAe,aAAa,CAAC,CAAC,CACpC,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,6BAA6B,EACvC,KAAK;CACJ;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,uBAAuB,EACjC,OAAO;CACN,YAAY;CACZ,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;CAC9C,SAAS,EAAE,QAAQ;CACnB,QAAQ;CACR,QAAQ;AACV,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,MAAM,cAAc,OAAO,WAAW,qBAAqB,OAAO,WAAW;CAC7E,MAAM,iBAAiB,OAAO,UAC1B,OAAO,WAAW,gBAClB,OAAO,WAAW;CACtB,IAAI,OAAO,YAAY,eAAe,CAAC,gBACrC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,iBAAiB,CAAC;AAGhC,MAAa,+BAA+B,EACzC,OAAO;CACN,YAAY;CACZ,cAAc;CACd,WAAW,EAAE,MAAM,oBAAoB;AACzC,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,IAAI,KAAK,MAAM,OAAO,YAAY,KAAK,KAAK,MAAM,OAAO,UAAU,GACjE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc;EACrB,SAAS;CACX,CAAC;CAEH,MAAM,cAAc,OAAO,UAAU,KAAK,aAAa,SAAS,UAAU;CAC1E,IAAI,IAAI,IAAI,WAAW,CAAC,CAAC,SAAS,YAAY,QAC5C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,WAAW;EAClB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,yBAAyB,CAAC;;;AClJxC,MAAa,wBAAwB,EAAE,KAAK;CAC1C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,kBAAkB,CAAC;AAGjC,MAAa,yBAAyB,EAAE,KAAK;CAC3C;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,8BAA8B,EAAE,KAAK,CAChD,6BACA,wBACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,0BAA0B,EACpC,OAAO;CACN,MAAM;CACN,WAAW,EAAE,QAAQ,IAAI;CACzB,aAAa;CACb,YAAY;AACd,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,wBAAwB,EAClC,KAAK,CAAC,uBAAuB,mBAAmB,CAAC,CAAC,CAClD,KAAK,EAAE,IAAI,kBAAkB,CAAC;AAGjC,MAAa,mBAAmB,EAC7B,OAAO;CACN,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,gBAAgB;CACzC,SAAS,EAAE,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC;CAC3C,UAAU,EAAE,MAAM,qBAAqB;CACvC,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,aAAa,CAAC;AAG5B,MAAa,mBAAmB,EAC7B,OAAO;CACN,IAAI;CACJ,eAAe;CACf,UAAU;CACV,QAAQ;CACR,iBAAiB,wBAAwB,SAAS;CAClD,OAAO;CACP,UAAU,eAAe,SAAS;CAClC,MAAM,iBAAiB,SAAS;CAChC,SAAS,wBAAwB,SAAS;CAC1C,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC;CACpC,WAAW;CACX,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,YAAY,YAAY;CACpC,MAAM,kBAAkB,WAAW,UAAU;CAC7C,IAAI,qBAAqB,WAAW,YAAY,KAAA,IAC9C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS,kBACL,uDACA;CACN,CAAC;CAEH,IAAI,WAAW,oBAAoB,KAAA,KAAa,WAAW,gBAAgB,WAAW,WAAW,OAAO,QACtG,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,mBAAmB,QAAQ;EAClC,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,aAAa,CAAC;AAG5B,MAAa,8BAA8B,EACxC,OAAO;CACN,eAAe;CACf,UAAU;CACV,QAAQ;CACR,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,iCAAiC,EAC3C,OAAO,EAAE,YAAY,iBAAiB,CAAC,CAAC,CACxC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,qBAAqB,CAAC;AAGpC,MAAa,8BAA8B;AAG3C,MAAa,0BAA0B,EACpC,OAAO;CAAE,UAAU;CAAgB,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAAE,CAAC,CAAC,CAC1E,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,+BAA+B,EACzC,OAAO;CACN,YAAY;CACZ,YAAY,EAAE,MAAM,uBAAuB;AAC7C,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,yBAAyB,CAAC;AAGxC,MAAa,4BAA4B,EACtC,OAAO;CACN,YAAY;CACZ,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,sBAAsB,CAAC;AAGrC,MAAM,wBAAwB,EAAE,OAAO,CAAC,CAAC,MAAM,wBAAwB;AACvE,MAAM,kCAAkC,EAAE,OAAO,CAAC,CAAC,MAAM,+BAA+B;AACxF,MAAM,kDAAkC,IAAI,IAAI;CAC9C;CAAU;CAAQ;CAAW;CAAgB;CAAe;CAC5D;CAAgB;CAAS;CAAO;AAClC,CAAC;AACD,MAAM,gCAAgC,EACnC,OACC,iCACA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QACzB,UAAU,MAAM,KAAK,MAAM,SAAS,CAAC,eAAe,KAAK,KAAK,GAC/D,gEACF,CACF,CAAC,CACA,QAAQ,eAAe,OAAO,KAAK,UAAU,CAAC,CAAC,UAAU,IAAI,kDAAkD,CAAC,CAChH,QACE,eAAe,OAAO,KAAK,UAAU,CAAC,CAAC,OAAO,SAAS,CAAC,gCAAgC,IAAI,IAAI,CAAC,GAClG,0EACF;AAEF,MAAa,8BAA8B,EACxC,OAAO;CACN,mBAAmB;CACnB,WAAW;CACX,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MACxB,2FACF,CAAC,CAAC,SAAS;CACX,SAAS,sBAAsB,SAAS;CACxC,cAAc,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CACzD,aAAa,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CACxD,YAAY,sBAAsB,SAAS;CAC3C,YAAY;AACd,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,gCAAgC,4BAC1C,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,0BAA0B,CAAC;AAGzC,MAAM,gCAAgC,EACnC,IAAI,EAAE,UAAU,UAAU,CAAC,CAAC,CAC5B,QAAQ,UAAU;CACjB,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,OAAO,IAAI,aAAa,MAAM,IAAI,aAAa,MAAM,IAAI,SAAS;AACpE,GAAG,4EAA4E;AAEjF,MAAa,mCAAmC,EAC7C,OAAO;CACN,YAAY;CACZ,YAAY;AACd,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,6BAA6B,CAAC;AAG5C,MAAa,2CAA2C,EACrD,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,qCAAqC,CAAC;AAGpD,MAAa,yBAAyB,EACnC,OAAO;CACN,QAAQ,EAAE,OAAO,CAAC,CAAC,MAAM,gBAAgB;CACzC,kBAAkB,EAAE,QAAQ;CAC5B,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,wBAAwB,EAClC,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,kBAAkB,CAAC;AAGjC,MAAa,2BAA2B,EACrC,OAAO;CACN,YAAY;CACZ,kBAAkB,EAAE,IAAI,EAAE,UAAU,UAAU,CAAC;CAC/C,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,qBAAqB,CAAC;AAGpC,MAAM,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAM,CAAC,CAAC,QAChD,UAAU,MAAM,KAAK,MAAM,OAC5B,gEACF,CAAC,CAAC,KAAK;CACL,QAAQ;CACR,WAAW;AACb,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CAChD,MAAM,EAAE,QAAQ,WAAW;CAC3B,OAAO;AACT,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,sBAAsB,CAAC;AAE9C,MAAa,6BAA6B,EAAE,OAAO;CACjD,MAAM,EAAE,QAAQ,YAAY;CAC5B,OAAO;CACP,QAAQ;AACV,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAE/C,MAAa,oCAAoC,EAAE,OAAO;CACxD,MAAM,EAAE,QAAQ,mBAAmB;CACnC,UAAU;CACV,UAAU;AACZ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,8BAA8B,CAAC;AAEtD,MAAa,gCAAgC,EAAE,OAAO;CACpD,MAAM,EAAE,QAAQ,eAAe;CAC/B,WAAW;CACX,OAAO;AACT,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,0BAA0B,CAAC;AAElD,MAAa,iCAAiC,EAAE,OAAO;CACrD,MAAM,EAAE,QAAQ,gBAAgB;CAChC,UAAU;CACV,OAAO;AACT,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,2BAA2B,CAAC;AAEnD,MAAa,uBAAuB,EAAE,OAAO;CAC3C,MAAM,EAAE,QAAQ,KAAK;CACrB,UAAU,EAAE,KAAK;EACf;EAAU;EAAU;EAAU;EAAc;EAC5C;EAAiB;CACnB,CAAC;CACD,gBAAgB;CAChB,mBAAmB;CACnB,aAAa;AACf,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,iBAAiB,CAAC;AAEzC,MAAa,8BAA8B,EAAE,OAAO;CAClD,MAAM,EAAE,QAAQ,aAAa;CAC7B,OAAO;CACP,YAAY,aAAa,QACtB,UAAU,sFAAsF,KAAK,KAAK,GAC3G,gDACF;AACF,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAEhD,MAAa,8BAA8B,EAAE,OAAO;CAClD,MAAM,EAAE,QAAQ,aAAa;CAC7B,OAAO,aAAa,MAAM,oBAAoB;CAC9C,QAAQ;CACR,cAAc;CACd,cAAc,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB;CAClD,WAAW;AACb,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAEhD,MAAM,uBAAuB,EAAE,IAAI,EAAE,UAAU,UAAU,CAAC,CAAC,CAAC,QAAQ,UAAU;CAC5E,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,OAAO,IAAI,SAAS,UAAU,IAAI,aAAa,MAAM,IAAI,aAAa,OACnE,IAAI,aAAa,MAAM,IAAI,aAAa,QAAQ,IAAI,WAAW,MAAM,IAAI,SAAS;AACvF,GAAG,sDAAsD;AAEzD,MAAa,0BAA0B,EAAE,OAAO;CAC9C,MAAM,EAAE,QAAQ,QAAQ;CACxB,UAAU;CACV,UAAU;CACV,OAAO;AACT,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAE5C,MAAa,0BAA0B,EAAE,OAAO;CAC9C,MAAM,EAAE,QAAQ,oBAAoB;CACpC,UAAU;CACV,cAAc;AAChB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAE5C,SAAS,gBAGP,YAAsB,aAA0B;CAChD,OAAO,EAAE,OAAO;EACd,YAAY,EAAE,QAAQ,UAAU;EAChC;EACA,WAAW;CACb,CAAC,CAAC,CAAC,OAAO;AACZ;AAEA,MAAM,uCAAuC;CAC3C,gBAAgB,iBAAiB,0BAA0B;CAC3D,gBAAgB,YAAY,iCAAiC;CAC7D,gBAAgB,mBAAmB,2BAA2B;CAC9D,gBAAgB,cAAc,yBAAyB;CACvD,gBAAgB,WAAW,6BAA6B;CACxD,gBAAgB,gBAAgB,yBAAyB;CACzD,gBAAgB,YAAY,6BAA6B;CACzD,gBAAgB,aAAa,yBAAyB;CACtD,gBAAgB,WAAW,0BAA0B;CACrD,gBAAgB,WAAW,0BAA0B;CACrD,gBAAgB,SAAS,yBAAyB;CAClD,gBAAgB,WAAW,yBAAyB;CACpD,gBAAgB,WAAW,yBAAyB;CACpD,gBAAgB,aAAa,uBAAuB;CACpD,gBAAgB,aAAa,yBAAyB;CACtD,gBAAgB,eAAe,uBAAuB;CACtD,gBAAgB,oBAAoB,uBAAuB;CAC3D,gBAAgB,SAAS,yBAAyB;CAClD,gBAAgB,YAAY,8BAA8B;CAC1D,gBAAgB,YAAY,yBAAyB;CACrD,gBAAgB,WAAW,yBAAyB;CACpD,gBAAgB,YAAY,uBAAuB;CACnD,gBAAgB,gBAAgB,yBAAyB;CACzD,gBAAgB,WAAW,uBAAuB;CAClD,gBAAgB,OAAO,oBAAoB;CAC3C,gBAAgB,WAAW,0BAA0B;CACrD,gBAAgB,UAAU,yBAAyB;CACnD,gBAAgB,aAAa,0BAA0B;CACvD,gBAAgB,WAAW,2BAA2B;CACtD,gBAAgB,kBAAkB,yBAAyB;CAC3D,gBAAgB,UAAU,yBAAyB;CACnD,gBAAgB,OAAO,6BAA6B;AACtD;AAgBA,MAAa,iCAAiC,OAAO,OAAO,OAAO,YACjE,qCAAqC,KAAK,WAAW,CACnD,OAAO,MAAM,WAAW,OACxB,OAAO,MAAM,YAAY,MAAM,KAAK,KACtC,CAAC,CACH,CAAC;AAED,MAAa,qCAAqC,EAAE,mBAClD,cACA,oCACF,CAAC,CAAC,KAAK,EAAE,IAAI,+BAA+B,CAAC;AAG7C,MAAa,8BAA8B,EACxC,OAAO,EAAE,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,yBAAyB,EACnC,OAAO;CACN,gBAAgB;CAChB,WAAW,wBAAwB,QAAQ,OAAO;CAClD,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,uBAAuB,EACjC,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,iBAAiB,CAAC;AAGhC,MAAa,+BAA+B,EACzC,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,yBAAyB,CAAC;AAGxC,MAAa,sCAAsC,EAChD,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,gCAAgC,CAAC;AAG/C,MAAa,oCAAoC,EAC9C,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,8BAA8B,CAAC;AAG7C,MAAa,8BAA8B,EACxC,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,6BAA6B,EACvC,OAAO,EAAE,WAAW,gBAAgB,CAAC,CAAC,CACtC,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,kCAAkC,EAC5C,OAAO,EACN,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,UAAU;CAChC,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,OAAO,IAAI,aAAa,MAAM,IAAI,aAAa,MAAM,IAAI,WAAW,MAAM,IAAI,SAAS,OACpF,IAAI,aAAa,MAAM,IAAI,aAAa,SACxC,IAAI,aAAa,YAAa,IAAI,aAAa,WAAW,eAAe,IAAI,QAAQ;AAC1F,GAAG,mEAAmE,EACxE,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,4BAA4B,CAAC;AAG3C,MAAa,qCAAqC,EAC/C,OAAO;CACN,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;CACvC,WAAW,EAAE,QAAQ,QAAQ;CAC7B,WAAW;AACb,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,+BAA+B,CAAC;AAG9C,SAAS,eAAe,UAA2B;CACjD,OAAO,aAAa,eAAe,aAAa,eAAe,aAAa;AAC9E;;;AC1dA,MAAa,yBAAyB,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGvG,MAAa,8BAA8B,EAAE,aAAa;CACxD,QAAQ,EAAE,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;CAC/C,WAAW,EAAE,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;CAC7D,QAAQ,EAAE,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;AAC5D,CAAC,CAAC,CAAC,aAAa,SAAS,YAAY;CACnC,QAAQ,QAAQ,SAAS,QAAQ,UAAU;EACzC,IAAI,OAAO,SAAS,OAAO,OAAO,SAAS,MACzC,QAAQ,SAAS;GACf,MAAM;GACN,MAAM,CAAC,UAAU,KAAK;GACtB,SAAS;EACX,CAAC;CAEL,CAAC;AACH,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAM,wCAAwC,EAAE,aAAa;CAC3D,QAAQ;CACR,SAAS,EAAE,MAAM,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AAClD,CAAC;AAED,MAAM,6CAA6C,EAAE,aAAa;CAChE,QAAQ;CACR,oBAAoB;AACtB,CAAC;AAED,MAAa,kCAAkC,EAAE,MAAM,CACrD,uCACA,0CACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,4BAA4B,CAAC;AAG3C,MAAa,kCAAkC,EAAE,aAAa;CAC5D,eAAe;CACf,UAAU;CACV,sBAAsB,2BAA2B,QAAQ;EACvD,eAAe;EACf,aAAa;CACf,CAAC;CACD,SAAS,EAAE,MAAM,+BAA+B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,SAAS,YAAY;EAClG,MAAM,uBAAO,IAAI,IAAY;EAC7B,QAAQ,SAAS,QAAQ,UAAU;GACjC,IAAI,KAAK,IAAI,OAAO,MAAM,GACxB,QAAQ,SAAS;IAAE,MAAM;IAAU,MAAM,CAAC,OAAO,QAAQ;IAAG,SAAS;GAAqC,CAAC;GAE7G,KAAK,IAAI,OAAO,MAAM;EACxB,CAAC;CACH,CAAC;CACD,WAAW;AACb,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,4BAA4B,CAAC;AAG3C,MAAa,6BAA6B,EAAE,aAAa;CACvD,QAAQ;CACR,OAAO,EAAE,KAAK,CAAC,WAAW,aAAa,CAAC;CACxC,cAAc,mBAAmB,SAAS;AAC5C,CAAC,CAAC,CAAC,aAAa,QAAQ,YAAY;CAClC,IAAK,OAAO,UAAU,mBAAoB,OAAO,iBAAiB,KAAA,IAChE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc;EACrB,SAAS,OAAO,UAAU,gBACtB,kDACA;CACN,CAAC;AAEL,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,uBAAuB,EAAE,aAAa;CACjD,IAAI;CACJ,eAAe;CACf,UAAU;CACV,OAAO,EAAE,KAAK,CAAC,gBAAgB,OAAO,CAAC;CACvC,SAAS,EAAE,MAAM,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;CAC3D,WAAW;CACX,WAAW;AACb,CAAC,CAAC,CAAC,aAAa,MAAM,YAAY;CAChC,MAAM,iBAAiB,KAAK,QAAQ,OAAO,WAAW,OAAO,UAAU,aAAa;CACpF,IAAK,KAAK,UAAU,YAAa,gBAC/B,QAAQ,SAAS;EAAE,MAAM;EAAU,MAAM,CAAC,OAAO;EAAG,SAAS;CAAkD,CAAC;AAEpH,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,iBAAiB,CAAC;AAGhC,MAAa,+BAA+B,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC,CAAC,CACvF,KAAK,EAAE,IAAI,yBAAyB,CAAC;;;AClGxC,MAAa,qBAAqB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAsB;AAGnF,MAAa,wBAAwB,EAAE,OAAO,CAAC,CAAC,MAAM,qBAAqB,CAAC,CAAC,MAAyB;AAGtG,MAAa,8BAA8B,EAAE,aAAa;CACxD,cAAc;CACd,WAAW;AACb,CAAC;AAGD,MAAa,iCAAiC,EAAE,aAAa;CAC3D,cAAc;CACd,OAAO;CACP,WAAW;AACb,CAAC;AAGD,MAAa,+BAA+B,EAAE,aAAa;CACzD,OAAO;CACP,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;AACnC,CAAC;AAGD,MAAa,kCAAkC,EAAE,aAAa;CAC5D,cAAc;CACd,cAAc;CACd,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;CACvC,WAAW;AACb,CAAC;AAGD,MAAa,sBAAsB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI;AAG5D,MAAa,gCAAgC,oBAAoB,aAC9D,OAAO,YAAY;CAClB,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,MAAM,SAAS,IAAI,aAAa;CAChC,MAAM,WAAW,IAAI,aAAa,WAAW,mBAAmB,IAAI,QAAQ;CAC5E,IAAI,CAAC,UAAU,CAAC,UACd,QAAQ,SAAS;EACf,MAAM;EACN,SAAS;CACX,CAAC;CAEH,IAAI,IAAI,aAAa,MAAM,IAAI,aAAa,IAC1C,QAAQ,SAAS;EACf,MAAM;EACN,SAAS;CACX,CAAC;CAEH,MAAM,WAAW,IAAI,gBAAgB,IAAI,KAAK,MAAM,CAAC,CAAC;CACtD,MAAM,QAAQ,SAAS,IAAI,SAAS;CACpC,IAAI,SAAS,SAAS,KAAK,CAAC,sBAAsB,UAAU,KAAK,CAAC,CAAC,SACjE,QAAQ,SAAS;EACf,MAAM;EACN,SAAS;CACX,CAAC;AAEL,CACF,CAAC,CAAC,KAAK,EAAE,IAAI,0BAA0B,CAAC;AAGxC,MAAa,6BAA6B,EAAE,OAAO;CACjD,cAAc;CACd,KAAK;CACL,WAAW;AACb,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAI/C,SAAS,mBAAmB,UAA2B;CACrD,MAAM,aAAa,SAAS,YAAY;CACxC,OAAO,eAAe,eAAe,eAAe,WAAW,2BAA2B,KAAK,UAAU;AAC3G;;;AC5EA,MAAa,qBAAqB,EAC/B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,YAAY,CAAC,CACb,IAAI,CAAC,CAAC,CACN,IAAI,EAAE,CAAC,CACP,MAAM,wCAAwC,CAAC,CAC/C,MAAsB,CAAC,CACvB,KAAK,EAAE,IAAI,eAAe,CAAC;AAG9B,MAAa,0BAA0B,EACpC,OAAO,EACN,WAAW,EAAE,MAAM,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAC3D,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,OAAO,YAAY;CAC/B,IAAI,IAAI,IAAI,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,UAAU,QACpD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,WAAW;EAClB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,mCAAmC,EAC7C,OAAO;CACN,YAAY,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACrC,eAAe,EAAE,MAAM,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC/D,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,OAAO,YAAY;CAC/B,IAAI,IAAI,IAAI,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,cAAc,QAC5D,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,eAAe;EACtB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,6BAA6B,CAAC;AAG5C,MAAM,qCAAqC,EAAE,OAAO;CAClD,IAAI,EAAE,QAAQ,kBAAkB;CAChC,MAAM,EAAE,QAAQ,kBAAkB;CAClC,UAAU,EAAE,QAAQ,4CAA4C;AAClE,CAAC,CAAC,CAAC,OAAO;AAEV,MAAM,kCAAkC,EAAE,OAAO;CAC/C,IAAI,EAAE,QAAQ,eAAe;CAC7B,MAAM,EAAE,QAAQ,eAAe;CAC/B,UAAU,EAAE,QAAQ,2FAA2F;AACjH,CAAC,CAAC,CAAC,OAAO;AAEV,MAAM,8BAA8B,EAAE,OAAO;CAC3C,IAAI,EAAE,QAAQ,WAAW;CACzB,MAAM,EAAE,QAAQ,WAAW;CAC3B,UAAU,EAAE,QAAQ,qEAAqE;AAC3F,CAAC,CAAC,CAAC,OAAO;AAEV,MAAa,sBAAsB,EAChC,mBAAmB,MAAM;CACxB;CACA;CACA;AACF,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,gBAAgB,CAAC;AAI/B,MAAa,qCAAqC,EAC/C,KAAK;CAAC;CAAY;CAAa;AAAS,CAAC,CAAC,CAC1C,KAAK,EAAE,IAAI,+BAA+B,CAAC;AAG9C,MAAa,0BAA0B,EACpC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC,CACtB,KAAK,EAAE,IAAI,oBAAoB,CAAC;AAGnC,MAAa,8BAA8B,EACxC,KAAK;CAAC;CAAmB;CAAsB;CAAe;AAAoB,CAAC,CAAC,CACpF,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,8BAA8B,EACxC,OAAO;CACN,UAAU;CACV,OAAO,EAAE,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QACnD,UAAU,IAAI,IAAI,KAAK,CAAC,CAAC,SAAS,MAAM,QACzC,+CACF;AACF,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,wBAAwB,EAClC,OAAO;CACN,QAAQ;CACR,kBAAkB,EAAE,MAAM,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QACnD,cAAc,IAAI,IAAI,SAAS,CAAC,CAAC,SAAS,UAAU,QACrD,uCACF;CACA,SAAS,EAAE,MAAM,2BAA2B,CAAC,CAAC,IAAI,EAAE;AACtD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,UAAU,YAAY;CAClC,MAAM,UAAU,IAAI,IAAI,SAAS,gBAAgB;CACjD,IAAI,SAAS,QAAQ,MAAM,WAAW,CAAC,QAAQ,IAAI,OAAO,QAAQ,CAAC,GACjE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,kBACtB,SAAS,iBAAiB,WAAW,KAAK,SAAS,QAAQ,WAAW,IAEtE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,QAAQ;EACf,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,qBAAqB,SAAS,QAAQ,WAAW,GACvE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,qBAAqB,SAAS,QAAQ,WAAW,GACvE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS;CACX,CAAC;CAEH,IAAI,CAAC,sBAAsB,oBAAoB,CAAC,CAAC,SAAS,SAAS,MAAM,KACvE,SAAS,iBAAiB,WAAW,GACrC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,kBAAkB;EACzB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,kBAAkB,CAAC;AAGjC,MAAa,6BAA6B,EACvC,OAAO;CACN,QAAQ;CACR,iBAAiB;CACjB,YAAY,EAAE,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC;CAC9C,UAAU,oBAAoB,SAAS;CACvC,SAAS,EAAE,MAAM,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QACxC,UAAU,IAAI,IAAI,KAAK,CAAC,CAAC,SAAS,MAAM,QACzC,yBACF;CACA,SAAS;CACT,YAAY;AACd,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,MAAM,eAAe,OAAO,WAAW,KAAK,cAAc,UAAU,EAAE;CACtE,IAAI,IAAI,IAAI,YAAY,CAAC,CAAC,SAAS,aAAa,QAC9C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,oBAAoB,eAC7B,OAAO,WAAW,WAAW,KAAK,OAAO,UAAU,OAAO,OAAO,WAAW,EAAE,EAAE,KAEhF,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,UAAU;EACjB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,oBAAoB,gBAC7B,OAAO,WAAW,SAAS,KAAK,OAAO,aAAa,KAAA,IAEpD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,oBAAoB,cAC7B,OAAO,WAAW,WAAW,KAAK,OAAO,aAAa,KAAA,IAEtD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;;;ACxMtC,MAAa,2BAA2B,EAAE,MAAM,CAC9C,EAAE,KAAK;CACL;CACA;CACA;CACA;AACF,CAAC,GACD,qBACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,qBAAqB,CAAC;AAGpC,MAAa,kCAAkC,EAAE,KAAK;CACpD;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,4BAA4B,CAAC;AAG3C,MAAM,yBAAyB,iBAAiB,IAC9C,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,QAAQ,EAAE,CAAC,CACzC;AAEA,MAAM,yBAAyB,iBAAiB,IAC9C,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,iBAAiB,EAAE,CAAC,CAClD;AAEA,MAAa,mCAAmC,EAAE,OAAO;CACvD,MAAM,EAAE,QAAQ,SAAS;CACzB,YAAY;AACd,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,6BAA6B,CAAC;AAErD,MAAa,iCAAiC,EAAE,OAAO;CACrD,MAAM,EAAE,QAAQ,OAAO;CACvB,QAAQ;CACR,YAAY,iBAAiB,SAAS;CACtC,MAAM,yBAAyB,SAAS;AAC1C,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,2BAA2B,CAAC;AAEnD,MAAa,sCAAsC,EAAE,OAAO;CAC1D,MAAM,EAAE,QAAQ,aAAa;CAC7B,MAAM;CACN,cAAc,yBAAyB,SAAS;CAChD,YAAY,iBAAiB,SAAS;AACxC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,gCAAgC,CAAC;AAExD,MAAa,kDAAkD,EAAE,OAAO;CACtE,MAAM,EAAE,QAAQ,kCAAkC;CAClD,YAAY;AACd,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,4CAA4C,CAAC;AAEpE,MAAa,iCAAiC,EAAE,OAAO;CACrD,MAAM,EAAE,QAAQ,eAAe;CAC/B,YAAY,iBAAiB,SAAS;CACtC,MAAM;AACR,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,2BAA2B,CAAC;AAEnD,MAAa,mCAAmC,EAAE,OAAO;CACvD,MAAM,EAAE,QAAQ,kBAAkB;CAClC,YAAY;CACZ,cAAc;CACd,KAAK;CACL,WAAW;AACb,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,6BAA6B,CAAC;AAErD,MAAa,gDAAgD,EAAE,OAAO;CACpE,MAAM,EAAE,QAAQ,gCAAgC;CAChD,YAAY;CACZ,eAAe;AACjB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,0CAA0C,CAAC;AAElE,MAAa,4BAA4B,EAAE,mBAAmB,QAAQ;CACpE;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,sBAAsB,CAAC;;;ACxFrC,MAAa,2BAA2B,EACrC,OAAO,EACN,MAAM,EAAE,KAAK,CAAC,aAAa,QAAQ,CAAC,CAAC,CAAC,QAAQ,WAAW,EAC3D,CAAC,CAAC,CACD,OAAO;;;ACJV,MAAM,wBAAwB;AAC9B,MAAM,0BAA0B;AAEhC,MAAM,uBAAuB,EAC1B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,YAAY,CAAC,CACb,MAAM,uBAAuB,kCAAkC;AAElE,MAAM,yBAAyB,EAC5B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,YAAY,CAAC,CACb,MAAM,yBAAyB,qCAAqC;AAEvE,MAAM,uBAAuB,EAC1B,OAAO,CAAC,CACR,KAAK,CAAC,CACN,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,QACE,UAAU,CAAC,0BAA0B,KAAK,KAAK,GAChD,0EACF;AAEF,MAAa,+BAA+B,qBAAqB,IAAI,GAAG,CAAC,CACtE,KAAK,EAAE,IAAI,yBAAyB,CAAC;AAGxC,MAAa,iCAAiC,EAC3C,OAAO,CAAC,CACR,KAAK,CAAC,CACN,IAAI,CAAC,CAAC,CACN,IAAI,IAAK,CAAC,CACV,QAAQ,UAAU;CACjB,IAAI;EACF,MAAM,SAAS,IAAI,IAAI,KAAK;EAC5B,OAAO,OAAO,aAAa,YAAY,OAAO,aAAa,MAAM,OAAO,aAAa;CACvF,QAAQ;EACN,OAAO;CACT;AACF,GAAG,wDAAwD,CAAC,CAC3D,KAAK,EAAE,IAAI,2BAA2B,CAAC;AAG1C,SAAS,qBAAqB,GAAG,SAAmB;CAClD,OAAO,qBAAqB,QAAQ,UAAU;EAC5C,MAAM,6BAA6B,QAAQ,QACxC,MAAM,gBAAgB,KAAK,WAAW,aAAa,EAAE,GACtD,KACF;EACA,OAAO,CAAC,OAAO,KAAK,0BAA0B;CAChD,GAAG,wCAAwC,QAAQ,KAAK,IAAI,KAAK,QAAQ;AAC3E;AAEA,SAAS,cAAc,SAAkD;CACvE,MAAM,YAAY,EAAE,OAAO;EACzB,IAAI;EACJ,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,SAAS,QAAQ,SAAS;EAC1B,SAAS,QAAQ,SAAS;EAC1B,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;EACrB,IAAI,QAAQ,SAAS;CACvB,CAAC,CAAC,CAAC,OAAO;CAEV,OAAO,EAAE,MAAM,CACb,QAAQ,WAAW,QAAQ,EAAE,GAAG,EAAE,GAClC,SACF,CAAC;AACH;AAEA,SAAgB,mBAAmB,YAAoB,YAA4B;CACjF,OAAO,yBACL,qBAAqB,MAAM,UAAU,GACrC,qBAAqB,MAAM,UAAU,CACvC;AACF;AAEA,SAAS,yBAAyB,YAAoB,YAA4B;CAChF,MAAM,sBAAsB,kBAAkB,UAAU;CACxD,MAAM,sBAAsB,kBAAkB,UAAU;CACxD,MAAM,UAAU,KAAK,IAAI,qBAAqB,mBAAmB;CACjE,MAAM,SAAS,KAAK,IAAI,qBAAqB,mBAAmB;CAChE,QAAQ,UAAU,QAAS,SAAS;AACtC;AAEA,SAAS,sBAAsB,OAAwB;CACrD,MAAM,WAAW,MAAM,MAAM,GAAG;CAChC,OAAO,SAAS,UAAU,MAAM,SAAS,OAAO,WAAW;EACzD,MAAM,UAAU,OAAO,KAAK;EAC5B,IAAI,QAAQ,WAAW,GACrB,OAAO;EAET,MAAM,QAAQ,QAAQ,GAAG,CAAC;EAC1B,IAAI,UAAU,QAAO,UAAU,KAC7B,OAAO,QAAQ,GAAG,EAAE,MAAM,SAAS,mBAAmB,KAAK,QAAQ,MAAM,GAAG,EAAE,CAAC;EAEjF,OAAO,6BAA6B,KAAK,OAAO;CAClD,CAAC;AACH;AAEA,SAAS,kBAAkB,OAAuB;CAEhD,MAAM,CAAC,KAAK,OAAO,QADF;EAAC;EAAG;EAAG;CAAC,CAAC,CAAC,KAAK,UAAU,OAAO,SAAS,MAAM,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,GAC7D,CAAC,CAAC,KAAK,YACvC,WAAW,SAAU,UAAU,UAAU,UAAU,QAAS,UAAU,GACvE;CACD,OAAQ,QAAS,MAAQ,QAAS,QAAU,QAAS;AACvD;AAqBA,MAAM,gBAAyC;CAC7C;EAAE,YAAY;EAAQ,YAAY;EAAW,SAAS;EAAK,SAAS;CAAY;CAChF;EAAE,YAAY;EAAa,YAAY;EAAW,SAAS;EAAK,SAAS;CAAiB;CAC1F;EAAE,YAAY;EAAa,YAAY;EAAW,SAAS;EAAK,SAAS;CAAuB;CAChG;EAAE,YAAY;EAAU,YAAY;EAAW,SAAS;EAAK,SAAS;CAAa;CACnF;EAAE,YAAY;EAAY,YAAY;EAAU,SAAS;EAAK,SAAS;CAAsB;CAC7F;EAAE,YAAY;EAAQ,YAAY;EAAW,SAAS;EAAK,SAAS;CAAY;CAChF;EAAE,YAAY;EAAU,YAAY;EAAW,SAAS;EAAG,SAAS;CAAqB;CACzF;EAAE,YAAY;EAAW,YAAY;EAAW,SAAS;EAAG,SAAS;CAA6B;CAClG;EAAE,YAAY;EAAS,YAAY;EAAW,SAAS;EAAG,SAAS;CAAmB;AACxF;AAMA,MAAM,uBAAuB;CAC3B,SAAS;CACT,MAAM;CACN,WAAW;CACX,QAAQ;CACR,SAAS;CACT,WAAW;CACX,MAAM;CACN,OAAO;CACP,QAAQ;CACR,UAAU;AACZ;AAEA,MAAM,sBAAsB;CAC1B,SAAS;CACT,MAAM;CACN,WAAW;CACX,QAAQ;CACR,SAAS;CACT,WAAW;CACX,MAAM;CACN,OAAO;CACP,QAAQ;CACR,UAAU;AACZ;AAEA,SAAS,mBAAmB,UAAuD;CACjF,OAAO,EAAE,OAAO;EACd,SAAS,qBAAqB,QAAQ,SAAS,OAAO;EACtD,MAAM,qBAAqB,QAAQ,SAAS,IAAI;EAChD,WAAW,qBAAqB,QAAQ,SAAS,SAAS;EAC1D,QAAQ,qBAAqB,QAAQ,SAAS,MAAM;EACpD,SAAS,qBAAqB,QAAQ,SAAS,OAAO;EACtD,WAAW,qBAAqB,QAAQ,SAAS,SAAS;EAC1D,MAAM,qBAAqB,QAAQ,SAAS,IAAI;EAChD,OAAO,qBAAqB,QAAQ,SAAS,KAAK;EAClD,QAAQ,qBAAqB,QAAQ,SAAS,MAAM;EACpD,UAAU,qBAAqB,QAAQ,SAAS,QAAQ;CAC1D,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,SAAS,YAAY;EAC5C,KAAK,MAAM,QAAQ,eAAe;GAChC,MAAM,QAAQ,yBAAyB,QAAQ,KAAK,aAAa,QAAQ,KAAK,WAAW;GACzF,IAAI,QAAQ,KAAK,SACf,QAAQ,SAAS;IACf,MAAM;IACN,MAAM,CAAC,KAAK,UAAU;IACtB,SAAS,GAAG,KAAK,QAAQ,YAAY,KAAK,QAAQ,sBAAsB,KAAK,WAAW,aAAa,MAAM,QAAQ,CAAC,EAAE;GACxH,CAAC;EAEL;CACF,CAAC;AACH;AAEA,MAAM,0BAA0B,mBAAmB,oBAAoB;AACvE,MAAM,yBAAyB,mBAAmB,mBAAmB;AAKrE,MAAa,+BAA+B,EACzC,OAAO;CACN,WAAW,EAAE,KAAK;EAAC;EAAS;EAAQ;CAAQ,CAAC,CAAC,CAAC,QAAQ,QAAQ;CAC/D,OAAO,wBAAwB,SAAS,CAAC,CAAC;CAC1C,MAAM,uBAAuB,SAAS,CAAC,CAAC;CACxC,UAAU,uBAAuB,QAAQ,WAAW;CACpD,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG;CACvD,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC1D,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,GAAG;CAC5D,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzD,YAAY,EACT,OAAO,CAAC,CACR,KAAK,CAAC,CACN,IAAI,CAAC,CAAC,CACN,IAAI,GAAG,CAAC,CACR,OAAO,uBAAuB,oEAAoE,CAAC,CACnG,QACC,8HACF;CACF,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,GAAG;CACzE,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,GAAG;AAC/E,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,OAAO,YAAY;CAC/B,IAAI,MAAM,iBAAiB,MAAM,YAC/B,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,gBAAgB;EACvB,SAAS;CACX,CAAC;AAEL,CAAC;AAKH,MAAa,8BAA8B,EACxC,OAAO;CACN,iBAAiB,cAAc,qBAAqB,CAAC,CAAC,CAAC,SAAS;CAChE,sBAAsB,cAAc,qBAAqB,YAAY,CAAC,CAAC,CAAC,SAAS;CACjF,cAAc,cAAc,qBAAqB,UAAU,CAAC,CAAC,CAAC,SAAS;CACvE,oBAAoB,cAAc,qBAAqB,UAAU,CAAC,CAAC,CAAC,SAAS;CAC7E,eAAe,cAAc,qBAAqB,CAAC,CAAC,CAAC,SAAS;CAC9D,gBAAgB,EACb,OAAO;EACN,qCAAqC,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;EAC9D,iBAAiB,cAAc,qBAAqB,CAAC,CAAC,CAAC,SAAS;CAClE,CAAC,CAAC,CACD,OAAO,CAAC,CACR,SAAS,CAAC,CAAC;AAChB,CAAC,CAAC,CACD,OAAO;AAKV,MAAM,wBAAwB,EAC3B,OAAO,EACN,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,EACpC,CAAC,CAAC,CACD,OAAO;AAEV,MAAa,0CAA0C,EACpD,OAAO;CACN,qBAAqB,EAClB,OAAO,EACN,eAAe,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK,EAC1C,CAAC,CAAC,CACD,OAAO,CAAC,CACR,SAAS,CAAC,CAAC;CACd,eAAe,EACZ,OAAO;EACN,aAAa,sBAAsB,SAAS,CAAC,CAAC;EAC9C,gBAAgB,sBAAsB,SAAS,CAAC,CAAC;CACnD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,SAAS,CAAC,CAAC;AAChB,CAAC,CAAC,CACD,OAAO;AASV,MAAa,0BAA0B,EACpC,OAAO;CACN,OAAO,6BAA6B,SAAS,CAAC,CAAC;CAC/C,MAAM,4BAA4B,SAAS,CAAC,CAAC;CAC7C,MAAM,+BAA+B,SAAS;CAC9C,qBAAqB,qBAAqB,SAAS;CACnD,kBAAkB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAC3C,iBAAiB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAC1C,iBAAiB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAC1C,kBAAkB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CAC3C,2BAA2B,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;CACpD,kBAAkB,wCAAwC,SAAS,CAAC,CAAC;AACvE,CAAC,CAAC,CACD,OAAO;;;ACtTV,MAAa,oCAAoC,EAC9C,IAAI,EAAE,UAAU,UAAU,CAAC,CAAC,CAC5B,IAAI,IAAI,CAAC,CACT,QAAQ,UAAU;CACjB,MAAM,MAAM,IAAI,IAAI,KAAK;CACzB,OAAO,IAAI,aAAa,MAAM,IAAI,aAAa;AACjD,GAAG,6DAA6D,CAAC,CAChE,MAAqC,CAAC,CACtC,KAAK,EAAE,IAAI,8BAA8B,CAAC;;;ACH7C,MAAa,oCAAoC,EAC9C,OAAO;CACN,iBAAiB,6BAA6B,SAAS;CACvD,YAAY,wBAAwB,SAAS,CAAC,CAAC;CAC/C,aAAa,yBAAyB,SAAS,CAAC,CAAC;CACjD,MAAM,iCAAiC,SAAS,CAAC,CAAC;CAClD,0BAA0B,kCAAkC,SAAS;AACvE,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,eAAe,YAAY;CACvC,MAAM,EAAE,qBAAqB,cAAc;CAC3C,MAAM,eAAe,cAAc,YAAY,SAAS;CAExD,IAAI,gBAAgB,iBAAiB,oBAAoB,eACvD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM;GAAC;GAAc;GAAoB;GAAuB;EAAe;EAC/E,SAAS;CACX,CAAC;CAEH,IAAI,gBAAgB,iBAAiB,cAAc,eAAe,SAChE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM;GAAC;GAAc;GAAoB;GAAiB;GAAkB;EAAS;EACrF,SAAS;CACX,CAAC;CAEH,IAAI,cAAc,KAAK,cAAc,cAAc,WAAW,2BAC5D,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc,2BAA2B;EAChD,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,8BAA8B,CAAC;;;ACtC7C,MAAa,2BAA2B,EAAE,KAAK;CAC7C;CAAiB;CAAY;CAAmB;CAAc;CAC9D;CAAgB;CAAY;CAAa;CAAW;CAAW;CAC/D;CAAW;CAAW;CAAa;CAAa;CAChD;CAAoB;CAAS;CAAY;CAAa;CAAY;CAClE;CAAY;CAAgB;CAAW;CAAO;CAAW;CAAU;CACnE;CAAW;CAAkB;CAAU;AACzC,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,qBAAqB,CAAC;AAGpC,MAAa,qCAAqC,EAAE,KAAK;CACvD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,+BAA+B,CAAC;AAG9C,MAAa,oCAAoC;CAC/C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,iCAAiC,EAAE,OAAO,EAC9C,MAAM,mCACR,CAAC,CAAC,CAAC,OAAO;AAEV,MAAM,uBAAuB,EAAE,MAAM,CACnC,EAAE,QAAQ,SAAS,GACnB,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB,CACtC,CAAC;AAED,MAAa,oCAAoC,EAAE,OAAO;CACxD,eAAe,EAAE,QAAQ,CAAC;CAC1B,YAAY;CACZ,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,OAAO,mBAAmB;CACrE,gBAAgB;CAChB,gBAAgB,EAAE,QAAQ;CAC1B,cAAc,EAAE,OAAO,CAAC,CAAC,MAAM,gBAAgB;CAC/C,MAAM;CACN,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB;CAC3C,MAAM,EAAE,OAAO;CACf,WAAW;CACX,aAAa;CACb,QAAQ,EAAE,QAAQ;CAClB,QAAQ,EAAE,MAAM,8BAA8B,CAAC,CAAC,IAAI,kCAAkC,MAAM;CAC5F,kBAAkB,EAAE,QAAQ;CAC5B,kBAAkB,EAAE,QAAQ;AAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,UAAU,YAAY;CAC7C,IAAI,SAAS,SAAS,wBAAwB,SAAS,SACrD,QAAQ,SAAS;EACf,MAAM;EAAU,MAAM,CAAC,MAAM;EAC7B,SAAS;CACX,CAAC;CAEH,IAAI,KAAK,MAAM,SAAS,WAAW,IAAI,KAAK,MAAM,SAAS,SAAS,GAClE,QAAQ,SAAS;EACf,MAAM;EAAU,MAAM,CAAC,aAAa;EACpC,SAAS;CACX,CAAC;CAEH,MAAM,QAAQ,SAAS,OAAO,KAAK,UAAU,MAAM,IAAI;CACvD,IAAI,CAAC,mBAAmB,KAAK,GAC3B,QAAQ,SAAS;EACf,MAAM;EAAU,MAAM,CAAC,QAAQ;EAC/B,SAAS;CACX,CAAC;CAEH,MAAM,eAAe,MAAM,SAAS,gBAAgB;CACpD,IAAK,SAAS,oBAAoB,CAAC,SAAS,oBAAqB,iBAAiB,SAAS,kBACzF,QAAQ,SAAS;EACf,MAAM;EAAU,MAAM,CAAC,kBAAkB;EACzC,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,8BAA8B,CAAC;AAK7C,MAAa,4CAA4C,kCAAkC,QACxF,aAAa,SAAS,UAAU,CAAC,SAAS,kBAAkB,SAAS,mBAAmB,aACvF,SAAS,oBAAoB,SAAS,oBACtC,SAAS,OAAO,OAAO,OAAO,UAAU,MAAM,SAAS,kCAAkC,MAAM,KAC/F,SAAS,OAAO,WAAW,kCAAkC,QAC/D,0GACF,CAAC,CAAC,KAAK,EAAE,IAAI,sCAAsC,CAAC;AAGpD,SAAS,mBAAmB,QAA0D;CACpF,IAAI,WAAW;CACf,IAAI,cAAc;CAClB,KAAK,MAAM,SAAS,QAAQ;EAC1B,IAAI,UAAU,kBAAkB;GAC9B,IAAI,aAAa,OAAO;GACxB,cAAc;GACd;EACF;EACA,IAAI,eAAe,UAAU,kCAAkC,WAAW,OAAO;EACjF,YAAY;CACd;CACA,OAAO;AACT;AAEA,SAAS,oBAAoB,OAAwB;CACnD,OAAO,MAAM,KAAK,MAAM,SAAS,CAAC,eAAe,KAAK,KAAK;AAC7D;;;ACtHA,MAAa,+BAA+B,EACzC,KAAK;CAAC;CAAa;CAAe;AAAS,CAAC,CAAC,CAC7C,KAAK,EAAE,IAAI,yBAAyB,CAAC;AAGxC,MAAa,2BAA2B,EACrC,KAAK;CAAC;CAAa;CAAU;CAAe;CAAa;AAAS,CAAC,CAAC,CACpE,KAAK,EAAE,IAAI,qBAAqB,CAAC;AAGpC,MAAa,6BAA6B,EACvC,KAAK;CACJ;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,yBAAyB,EACnC,OAAO;CACN,QAAQ;CACR,SAAS,EAAE,MAAM,uBAAuB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;CAC7D,gBAAgB,EAAE,QAAQ,CAAC,CAAC,QAAQ,KAAK;AAC3C,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,OAAO,YAAY;CAC/B,IAAI,MAAM,kBAAkB,MAAM,QAAQ,WAAW,GACnD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,SAAS;EAChB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,gCAAgC,EAC1C,OAAO;CACN,UAAU;CACV,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;CACnC,OAAO,EAAE,QAAQ;AACnB,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,0BAA0B,CAAC;AAGzC,MAAa,6BAA6B,EACvC,OAAO;CACN,WAAW;CACX,UAAU,EAAE,MAAM,uBAAuB,CAAC,CAAC,IAAI,GAAK;CACpD,SAAS,EAAE,MAAM,0BAA0B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QACxD,YAAY,IAAI,IAAI,OAAO,CAAC,CAAC,SAAS,QAAQ,QAC/C,iCACF;AACF,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,uBAAuB,CAAC;AAGtC,MAAa,yBAAyB,EACnC,OAAO;CACN,QAAQ,EAAE,KAAK;EAAC;EAAiB;EAAY;CAAS,CAAC;CACvD,sBAAsB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;CACpD,mBAAmB,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE;CACjD,WAAW,EAAE,MAAM,0BAA0B,CAAC,CAAC,IAAI,GAAG;AACxD,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,UAAU,YAAY;CAClC,IAAI,SAAS,oBAAoB,SAAS,sBACxC,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,mBAAmB;EAC1B,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,cAAc,SAAS,sBAAsB,SAAS,sBAC5E,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,QAAQ;EACf,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,cACtB,SAAS,sBAAsB,KAAK,SAAS,qBAAqB,SAAS,uBAE3E,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,QAAQ;EACf,SAAS;CACX,CAAC;CAEH,IAAI,SAAS,WAAW,mBAAmB,SAAS,UAAU,WAAW,GACvE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,WAAW;EAClB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,4BAA4B,EACtC,OAAO;CACN,QAAQ;CACR,kBAAkB;CAClB,YAAY,EAAE,MAAM,6BAA6B,CAAC,CAAC,IAAI,EAAE;CACzD,UAAU,eAAe,SAAS;CAClC,cAAc;CACd,kBAAkB;AACpB,CAAC,CAAC,CACD,OAAO,CAAC,CACR,aAAa,QAAQ,YAAY;CAChC,MAAM,eAAe,OAAO,WAAW,KAAK,cAAc,UAAU,SAAS,EAAE;CAC/E,IAAI,IAAI,IAAI,YAAY,CAAC,CAAC,SAAS,aAAa,QAC9C,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,qBAAqB,kBAC9B,OAAO,WAAW,WAAW,KAAK,OAAO,aAAa,KAAA,KAAa,OAAO,iBAAiB,gBAE3F,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,kBAAkB;EACzB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,aAAa,KAAA,KAAa,CAAC,OAAO,WAAW,MACrD,cAAc,UAAU,SAAS,UAAU,SAAS,OAAO,OAAO,UAAU,EAC/E,GACE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,UAAU;EACjB,SAAS;CACX,CAAC;CAEH,IAAI,CAAC,aAAa,QAAQ,CAAC,CAAC,SAAS,OAAO,YAAY,KAAK,OAAO,aAAa,KAAA,GAC/E,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc;EACrB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,iBAAiB,eAAe,CAAC,OAAO,UAAU,8BAA8B,MACxF,WAAW,WAAW,QACzB,GACE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc;EACrB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,iBAAiB,aAC1B,OAAO,UAAU,8BAA8B,WAAW,KAC1D,OAAO,SAAS,8BAA8B,OAAO,WAErD,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,cAAc;EACrB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,iBAAiB,eAAe,OAAO,WAAW,WAAW,GACtE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;CAEH,IAAI,OAAO,iBAAiB,aAAa,OAAO,WAAW,WAAW,GACpE,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,YAAY;EACnB,SAAS;CACX,CAAC;CAEH,IAAI,CAAC,aAAa,SAAS,CAAC,CAAC,SAAS,OAAO,YAAY,KAAK,OAAO,aAAa,KAAA,GAChF,QAAQ,SAAS;EACf,MAAM;EACN,MAAM,CAAC,UAAU;EACjB,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,sBAAsB,CAAC;;;ACnMrC,MAAa,yBAAyB,EAAE,KAAK;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,mBAAmB,CAAC;AAGlC,MAAa,6BAA6B,EACvC,OAAO,EACN,OAAO,EACJ,OAAO;CACN,MAAM;CACN,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CACzB,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC3B,WAAW,EAAE,QAAQ;CACrB,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS;AACtD,CAAC,CAAC,CACD,OAAO,EACZ,CAAC,CAAC,CACD,OAAO,CAAC,CACR,KAAK,EAAE,IAAI,gBAAgB,CAAC;;;;AC7B/B,MAAa,iBAAiB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,sBAAsB,EAAE,KAAK,cAAc,CAAC,CAAC,KAAK,EAAE,IAAI,gBAAgB,CAAC;;;;ACftF,MAAa,sCAAsC,EAChD,aAAa,EAAE,QAAQ,gBAAgB,CAAC,CAAC,CACzC,KAAK,EAAE,IAAI,gCAAgC,CAAC;;;ACE/C,MAAa,gCAAgC,EAAE,KAAK;CAClD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,0BAA0B,CAAC;AAGzC,MAAa,8BAA8B,EACxC,OAAO,CAAC,CACR,MAAM,gBAAgB,CAAC,CACvB,MAA+B,CAAC,CAChC,KAAK,EAAE,IAAI,wBAAwB,CAAC;AAGvC,MAAa,iCAAiC,EAC3C,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,GAAK,CAAC,CAAC,CACzD,aAAa,YAAY,YAAY;CACpC,IAAI,OAAO,KAAK,UAAU,CAAC,CAAC,SAAS,IACnC,QAAQ,SAAS;EACf,MAAM;EACN,SAAS;CACX,CAAC;AAEL,CAAC,CAAC,CACD,KAAK,EAAE,IAAI,2BAA2B,CAAC;AAE1C,MAAa,4BAA4B,EAAE,aAAa;CACtD,eAAe,EAAE,QAAQ,CAAC;CAC1B,SAAS;CACT,MAAM;CACN,cAAc;CACd,eAAe;CACf,UAAU;CACV,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,gBAAgB;CACjE,YAAY;CACZ,YAAY;AACd,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,sBAAsB,CAAC;AAGrC,MAAa,4CAA4C,EAAE,KAAK;CAC9D;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,sCAAsC,CAAC;AAKrD,IAAa,kCAAb,cAAqD,MAAM;CAI9C;CAHX,OAAyB;CAEzB,YACE,MACA,SACA,SACA;EACA,MAAM,SAAS,OAAO;EAJb,KAAA,OAAA;CAKX;AACF;AAEA,MAAa,+BAA+B;CAC1C,SAAS;CACT,WAAW;CACX,iBAAiB;CACjB,eAAe;CACf,gBAAgB;CAChB,WAAW;CACX,WAAW;AACb;AAgBA,MAAM,0BAA0B,EAAE,aAAa;CAC7C,SAAS;CACT,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,6BAA6B,CAAC,CAAC,IAAI,GAAG;CAClE,iBAAiB,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB,CAAC,CAAC,UAAU,MAAM;CACvE,eAAe,EAAE,QAAQ,GAAG;CAC5B,gBAAgB,EAAE,OAAO,CAAC,CAAC,MAAM,wBAAwB;CACzD,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC,UAAU,MAAM;CAC7D,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,mBAAmB;AACjD,CAAC;AAED,MAAM,cAAc,IAAI,YAAY;AAEpC,eAAsB,qBACpB,OAC8B;CAC9B,MAAM,OAAO,OAAO,MAAM,SAAS,WAC/B,YAAY,OAAO,MAAM,IAAI,IAC7B,IAAI,WAAW,MAAM,IAAI;CAC7B,MAAM,eAAe,uBAAuB,MAAM,gBAAgB,SAAW,QAAU;CACvF,IAAI,EAAE,gBAAgB,eAAe,KAAK,eAAe,KAAK,KAAK,aAAa,cAC9E,MAAM,kBAAkB,mBAAmB,uDAAuD;CAGpG,MAAM,UAAU,aAAa,MAAM,OAAO;CAC1C,MAAM,MAAM,0BACV,MAAM,kBAAkB,KAAK,MAAM,KAAK,IAAI,IAAI,GAAK,GACrD,OAAO,gBACT;CACA,MAAM,gBAAgB,uBAAuB,MAAM,iBAAiB,KAAK,KAAM;CAC/E,IAAI,KAAK,IAAI,MAAM,QAAQ,SAAS,IAAI,eACtC,MAAM,kBAAkB,mBAAmB,yDAAyD;CAItG,MAAM,SADY,OAAO,UAAU,eAAe,KAAK,MAAM,eAAe,QAAQ,cAC7D,IAAI,MAAM,cAAc,QAAQ,kBAAkB,KAAA;CACzE,IAAI,EAAE,kBAAkB,eAAe,OAAO,eAAe,IAC3D,MAAM,kBAAkB,qBAAqB,8BAA8B;CAE7E,MAAM,SAAS,MAAM,UAAU,WAAW;CAC1C,IAAI,QAAQ,WAAW,KAAA,GACrB,MAAM,kBAAkB,sBAAsB,2BAA2B;CAG3E,MAAM,YAAY,WAAW,QAAQ,UAAU,MAAM,CAAC,CAAC;CACvD,MAAM,SAAS,YAAY,OAAO,MAAM,QAAQ,eAAe,GAAG,QAAQ,UAAU,EAAE;CACtF,MAAM,cAAc,IAAI,WAAW,OAAO,aAAa,KAAK,UAAU;CACtE,YAAY,IAAI,MAAM;CACtB,YAAY,IAAI,MAAM,OAAO,UAAU;CACvC,MAAM,MAAM,MAAM,OAAO,OAAO,UAC9B,OACA,IAAI,WAAW,MAAM,GACrB;EAAE,MAAM;EAAQ,MAAM;CAAU,GAChC,OACA,CAAC,QAAQ,CACX;CAEA,IAAI,CAAC,MADkB,OAAO,OAAO,OAAO,QAAQ,KAAK,IAAI,WAAW,SAAS,GAAG,WAAW,GAE7F,MAAM,kBAAkB,qBAAqB,8BAA8B;CAG7E,IAAI;CACJ,IAAI;EACF,MAAM,OAAO,IAAI,YAAY,SAAS,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI;EAClE,UAAU,KAAK,MAAM,IAAI;CAC3B,SAAS,OAAO;EACd,MAAM,kBAAkB,mBAAmB,iDAAiD,KAAK;CACnG;CACA,MAAM,SAAS,0BAA0B,UAAU,OAAO;CAC1D,IAAI,CAAC,OAAO,SACV,MAAM,kBAAkB,mBAAmB,yDAAyD,OAAO,KAAK;CAElH,IACE,OAAO,KAAK,YAAY,QAAQ,WAC7B,WAAW,OAAO,KAAK,WAAW,QAAQ,aAC1C,OAAO,OAAO,KAAK,aAAa,MAAM,QAAQ,eAEjD,MAAM,kBAAkB,mBAAmB,sDAAsD;CAEnG,OAAO,OAAO;AAChB;AAEA,SAAS,aAAa,QAA6E;CACjG,MAAM,SAAgF;EACpF,SAAS,KAAA;EACT,WAAW,KAAA;EACX,iBAAiB,KAAA;EACjB,eAAe,KAAA;EACf,gBAAgB,KAAA;EAChB,WAAW,KAAA;EACX,WAAW,KAAA;CACb;CACA,IAAI,SAAS,UAAU,OAAO,OAAO,QAAQ,YAC3C,KAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,4BAA4B,GACnE,OAAO,OAA8B,OAAO,IAAI,IAAI,KAAK,KAAA;MAEtD;EACL,MAAM,2BAAW,IAAI,IAAuD;EAC5E,KAAK,MAAM,OAAO,OAAO,KAAK,4BAA4B,GACxD,SAAS,IAAI,6BAA6B,MAAM,GAAG;EAErD,MAAM,2BAAW,IAAI,IAAY;EACjC,KAAK,MAAM,CAAC,cAAc,kBAAkB,OAAO,QAAQ,MAAM,GAAG;GAClE,MAAM,OAAO,aAAa,YAAY;GACtC,MAAM,MAAM,SAAS,IAAI,IAAI;GAC7B,IAAI,QAAQ,KAAA,GAAW;GACvB,IAAI,SAAS,IAAI,IAAI,KAAK,OAAO,kBAAkB,UACjD,MAAM,kBAAkB,mBAAmB,uDAAuD;GAEpG,SAAS,IAAI,IAAI;GACjB,OAAO,OAA8B;EACvC;CACF;CACA,MAAM,SAAS,wBAAwB,UAAU,MAAM;CACvD,IAAI,CAAC,OAAO,SACV,MAAM,kBAAkB,mBAAmB,yDAAyD,OAAO,KAAK;CAElH,OAAO,OAAO;AAChB;AAEA,SAAS,uBAAuB,OAAe,SAAyB;CACtE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,SACvD,MAAM,kBAAkB,mBAAmB,yCAAyC;CAEtF,OAAO;AACT;AAEA,SAAS,0BAA0B,OAAe,SAAyB;CACzE,IAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,KAAK,QAAQ,SACvD,MAAM,kBAAkB,mBAAmB,sCAAsC;CAEnF,OAAO;AACT;AAEA,SAAS,WAAW,OAA2B;CAC7C,MAAM,SAAS,IAAI,WAAW,MAAM,SAAS,CAAC;CAC9C,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GACjD,OAAO,QAAQ,KAAK,OAAO,SAAS,MAAM,MAAM,OAAO,QAAQ,CAAC,GAAG,EAAE;CAEvE,OAAO;AACT;AAEA,SAAS,kBACP,MACA,SACA,OACiC;CACjC,OAAO,IAAI,gCAAgC,MAAM,SAAS,UAAU,KAAA,IAAY,KAAA,IAAY,EAAE,MAAM,CAAC;AACvG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//#region src/client/error.ts
|
|
2
|
+
var Domain0Error = class extends Error {
|
|
3
|
+
status;
|
|
4
|
+
response;
|
|
5
|
+
constructor(status, response) {
|
|
6
|
+
super(response.error.message);
|
|
7
|
+
this.name = "Domain0Error";
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.response = response;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var Domain0ProtocolError = class extends Error {
|
|
13
|
+
cause;
|
|
14
|
+
constructor(message, cause) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = "Domain0ProtocolError";
|
|
17
|
+
this.cause = cause;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var Domain0TransportError = class extends Error {
|
|
21
|
+
cause;
|
|
22
|
+
constructor(cause) {
|
|
23
|
+
super("The Domain0 API could not be reached");
|
|
24
|
+
this.name = "Domain0TransportError";
|
|
25
|
+
this.cause = cause;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
Object.defineProperty(exports, "Domain0Error", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
get: function() {
|
|
32
|
+
return Domain0Error;
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(exports, "Domain0ProtocolError", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function() {
|
|
38
|
+
return Domain0ProtocolError;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(exports, "Domain0TransportError", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
get: function() {
|
|
44
|
+
return Domain0TransportError;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=error-BB4-lyc4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-BB4-lyc4.cjs","names":[],"sources":["../src/client/error.ts"],"sourcesContent":["import type { Domain0ErrorResponse } from '../contracts'\n\nexport class Domain0Error extends Error {\n readonly status: number\n readonly response: Domain0ErrorResponse\n\n constructor(status: number, response: Domain0ErrorResponse) {\n super(response.error.message)\n this.name = 'Domain0Error'\n this.status = status\n this.response = response\n }\n}\n\nexport class Domain0ProtocolError extends Error {\n override readonly cause: unknown\n\n constructor(message: string, cause?: unknown) {\n super(message)\n this.name = 'Domain0ProtocolError'\n this.cause = cause\n }\n}\n\nexport class Domain0TransportError extends Error {\n override readonly cause: unknown\n\n constructor(cause: unknown) {\n super('The Domain0 API could not be reached')\n this.name = 'Domain0TransportError'\n this.cause = cause\n }\n}\n"],"mappings":";AAEA,IAAa,eAAb,cAAkC,MAAM;CACtC;CACA;CAEA,YAAY,QAAgB,UAAgC;EAC1D,MAAM,SAAS,MAAM,OAAO;EAC5B,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,WAAW;CAClB;AACF;AAEA,IAAa,uBAAb,cAA0C,MAAM;CAC9C;CAEA,YAAY,SAAiB,OAAiB;EAC5C,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,QAAQ;CACf;AACF;AAEA,IAAa,wBAAb,cAA2C,MAAM;CAC/C;CAEA,YAAY,OAAgB;EAC1B,MAAM,sCAAsC;EAC5C,KAAK,OAAO;EACZ,KAAK,QAAQ;CACf;AACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/client/error.ts
|
|
2
|
+
var Domain0Error = class extends Error {
|
|
3
|
+
status;
|
|
4
|
+
response;
|
|
5
|
+
constructor(status, response) {
|
|
6
|
+
super(response.error.message);
|
|
7
|
+
this.name = "Domain0Error";
|
|
8
|
+
this.status = status;
|
|
9
|
+
this.response = response;
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
var Domain0ProtocolError = class extends Error {
|
|
13
|
+
cause;
|
|
14
|
+
constructor(message, cause) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = "Domain0ProtocolError";
|
|
17
|
+
this.cause = cause;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var Domain0TransportError = class extends Error {
|
|
21
|
+
cause;
|
|
22
|
+
constructor(cause) {
|
|
23
|
+
super("The Domain0 API could not be reached");
|
|
24
|
+
this.name = "Domain0TransportError";
|
|
25
|
+
this.cause = cause;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
//#endregion
|
|
29
|
+
export { Domain0ProtocolError as n, Domain0TransportError as r, Domain0Error as t };
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=error-Cyd6a9ay.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-Cyd6a9ay.mjs","names":[],"sources":["../src/client/error.ts"],"sourcesContent":["import type { Domain0ErrorResponse } from '../contracts'\n\nexport class Domain0Error extends Error {\n readonly status: number\n readonly response: Domain0ErrorResponse\n\n constructor(status: number, response: Domain0ErrorResponse) {\n super(response.error.message)\n this.name = 'Domain0Error'\n this.status = status\n this.response = response\n }\n}\n\nexport class Domain0ProtocolError extends Error {\n override readonly cause: unknown\n\n constructor(message: string, cause?: unknown) {\n super(message)\n this.name = 'Domain0ProtocolError'\n this.cause = cause\n }\n}\n\nexport class Domain0TransportError extends Error {\n override readonly cause: unknown\n\n constructor(cause: unknown) {\n super('The Domain0 API could not be reached')\n this.name = 'Domain0TransportError'\n this.cause = cause\n }\n}\n"],"mappings":";AAEA,IAAa,eAAb,cAAkC,MAAM;CACtC;CACA;CAEA,YAAY,QAAgB,UAAgC;EAC1D,MAAM,SAAS,MAAM,OAAO;EAC5B,KAAK,OAAO;EACZ,KAAK,SAAS;EACd,KAAK,WAAW;CAClB;AACF;AAEA,IAAa,uBAAb,cAA0C,MAAM;CAC9C;CAEA,YAAY,SAAiB,OAAiB;EAC5C,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,QAAQ;CACf;AACF;AAEA,IAAa,wBAAb,cAA2C,MAAM;CAC/C;CAEA,YAAY,OAAgB;EAC1B,MAAM,sCAAsC;EAC5C,KAAK,OAAO;EACZ,KAAK,QAAQ;CACf;AACF"}
|