@aranova/tracking-browser 0.17.0 → 0.17.1

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../package.json","../../../tracking-core/src/consent.ts","../../../tracking-core/src/tracking.ts","../../../tracking-core/src/gtag.ts","../../../tracking-core/src/fbq.ts","../../../tracking-core/src/landing.ts","../../../tracking-core/src/resources/conversion-firing.ts","../../../tracking-core/src/resources/conversion-config.ts","../../../tracking-core/src/resources/sales/money.ts","../../../tracking-core/src/resources/conversion-autofire.ts","../../../tracking-core/src/session.ts","../../../../node_modules/zod/v3/external.js","../../../../node_modules/zod/v3/helpers/util.js","../../../../node_modules/zod/v3/ZodError.js","../../../../node_modules/zod/v3/locales/en.js","../../../../node_modules/zod/v3/errors.js","../../../../node_modules/zod/v3/helpers/parseUtil.js","../../../../node_modules/zod/v3/helpers/errorUtil.js","../../../../node_modules/zod/v3/types.js","../../../tracking-core/src/events/page-view.ts","../../../tracking-core/src/page-view.ts","../../../tracking-core/src/heartbeat.ts","../../../tracking-core/src/ingest.ts","../../../tracking-core/src/events/cta-click.ts","../../../tracking-core/src/events/sdk-heartbeat.ts","../../../tracking-core/src/events/form-start.ts","../../../tracking-core/src/events/form-submit.ts","../../../tracking-core/src/events/multi-page-session.ts","../../../tracking-core/src/events/page-exit.ts","../../../tracking-core/src/events/phone-click.ts","../../../tracking-core/src/events/scroll-depth.ts","../../../tracking-core/src/events/specific-page-visit.ts","../../../tracking-core/src/events/time-on-site.ts","../../../tracking-core/src/events/registry.ts","../../../tracking-core/src/triggers/time-on-site.ts","../../../tracking-core/src/triggers/specific-page-visit.ts","../../../tracking-core/src/triggers/scroll-depth.ts","../../../tracking-core/src/triggers/multi-page-session.ts","../../../tracking-core/src/triggers/form-start.ts","../../../tracking-core/src/triggers/page-exit.ts","../../../tracking-core/src/triggers/cta-click-capture.ts","../../../tracking-core/src/resources/sales/errors.ts","../../../tracking-core/src/resources/sales/transport.ts","../../../tracking-core/src/resources/sales/client.ts","../../../tracking-core/src/resources/sales/schema.ts"],"sourcesContent":["// Public entry for @aranova/tracking-browser. Served via jsDelivr for <script> installs:\n// https://cdn.jsdelivr.net/npm/@aranova/tracking-browser@<version>/dist/browser/aranova-tracking.global.js\nimport { version } from \"../package.json\";\nimport {\n attachAutoPageView,\n attachBfcacheRestore,\n attachCtaClickCapture,\n attachFormStart,\n attachPageExit,\n attachMultiPageSession,\n attachScrollDepth,\n attachSpecificPageVisit,\n attachTimeOnSite,\n bootstrapGoogleAdsTracking,\n bootstrapMetaPixel,\n bootstrapMultipleGtags,\n bootstrapMultiplePixels,\n captureTrackingParamsFromLocation,\n createConversionAutoFire,\n createSalesClient,\n createTrackingClient,\n getConsentChoice,\n getConsentState,\n getCookieValueFromDocument,\n getTrackingParamsFromCookieReader,\n optIn,\n optOut,\n resetConsent,\n resolveConversionConfig,\n setConsentState,\n TRACKING_COOKIE_MAX_AGE_SECONDS,\n withConversionAutoFire,\n type ConversionConfig,\n type ConversionConfigStore,\n type SalesClient,\n type TrackingClient,\n type TrackingInitConfig,\n type TrackingParams,\n type TriggerRegistryConfig,\n} from \"../../tracking-core/src/index\";\n// Direct import from events/registry so runtime validation can look up\n// metadata schemas by name. Importing it from the barrel would work too,\n// but going direct makes the dependency explicit.\nimport { getEventDefinition, type EventName } from \"../../tracking-core/src/events/registry\";\n\n// Re-export the ad-platform map types so a generated `aranova-services.ts` can\n// `import type { GtagEnvironmentMap, MetaPixelEnvironmentMap }` from this package\n// (the CLI `gen` annotates ARANOVA_GTAG_IDS / ARANOVA_META_PIXEL_IDS with them).\nexport type { GtagEnvironmentMap, MetaPixelEnvironmentMap } from \"../../tracking-core/src/index\";\n\nfunction getTrackingParams(): TrackingParams {\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n\n/**\n * Browser-script initialization config.\n *\n * Accepts the same trigger registry concept as the React and Next factories,\n * but validation is runtime-only because script-tag consumers usually write\n * plain JavaScript. Invalid manual events warn and are dropped.\n */\ninterface BrowserTrackingInitConfig extends TrackingInitConfig {\n /**\n * Trigger registry that controls automatic events and allowed manual events.\n *\n * Defaults to `{ automatic: { page_view: {} }, manual: {} }` when omitted.\n */\n triggers?: TriggerRegistryConfig;\n /**\n * GAP28 / unified-goal: enable real-time on-site conversion firing. When set, the SDK\n * fetches the per-business config from `cdnUrl` (with an optional offline-correct `baked`\n * fallback), then `recordSale`/`trackConversion`/automatic event-goals fire `gtag('event',\n * 'conversion', …)` for WEBPAGE-mapped goals. Omit to keep events analytics-only.\n */\n conversionConfig?: { cdnUrl: string; baked?: ConversionConfig | null };\n}\n\nlet activeClient: TrackingClient | null = null;\nlet activeRegistry: TriggerRegistryConfig | null = null;\nlet activeDetachers: Array<() => void> = [];\n// Sales client bound to the init() apiKey/endpoint. Public-key installs can\n// write sales; reads/CRUD are rejected by the backend (use a secret key on a\n// server). Null until init() runs with both creds.\nlet activeSales: SalesClient | null = null;\n\nfunction teardown(): void {\n // IMPORTANT: Detach in reverse (LIFO) order — multiple triggers patch\n // history.pushState and the chain only restores cleanly when unwound\n // in the opposite order of attachment.\n for (let i = activeDetachers.length - 1; i >= 0; i--) {\n activeDetachers[i]();\n }\n activeDetachers = [];\n if (activeClient !== null) {\n activeClient.destroy();\n activeClient = null;\n }\n activeRegistry = null;\n activeSales = null;\n}\n\n/**\n * Initialize the global browser tracking script.\n *\n * Call once from a `<script>` tag after loading\n * `aranova-tracking.global.js`. The function is re-entrant: calling it again\n * tears down existing listeners and installs the new configuration.\n *\n * @example\n * ```html\n * <script>\n * window.AranovaTracking.init({\n * apiKey: 'aranv_pk_...',\n * endpoint: 'https://api.example.com/tracking',\n * triggers: {\n * automatic: { page_view: {} },\n * manual: { form_submit: {} },\n * },\n * });\n * </script>\n * ```\n */\nexport function init(config: BrowserTrackingInitConfig = {}): void {\n if (typeof window === \"undefined\") return;\n\n // Re-assert the global in case it was deleted between init() calls.\n window.AranovaTracking = trackingScriptApi;\n\n const {\n apiKey,\n endpoint,\n autoCaptureTrackingParams = true,\n cookieMaxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n gtagId,\n gtagIds,\n metaPixelId,\n metaPixelIds,\n environment,\n // Deprecated no-op since consent v2 (opt-out model): the script ships no\n // banner. Destructured so passing it doesn't reach the client config.\n renderConsentBanner: _renderConsentBanner,\n triggers,\n conversionConfig,\n } = config;\n\n if (autoCaptureTrackingParams)\n captureTrackingParamsFromLocation(window.location.href, cookieMaxAgeSeconds);\n\n if (gtagIds && Object.keys(gtagIds).length > 0) {\n bootstrapMultipleGtags(gtagIds);\n } else if (gtagId) {\n bootstrapGoogleAdsTracking(gtagId);\n }\n\n if (metaPixelIds && Object.keys(metaPixelIds).length > 0) {\n bootstrapMultiplePixels(metaPixelIds);\n } else if (metaPixelId) {\n bootstrapMetaPixel(metaPixelId);\n }\n\n // Always teardown first so re-init is idempotent and cleans up old\n // trigger attachments before wiring new ones.\n teardown();\n\n if (!apiKey || !endpoint) {\n if (apiKey || endpoint) {\n // eslint-disable-next-line no-console\n console.warn(\n \"[AranovaTracking] init() requires both `apiKey` and `endpoint` to enable first-party event ingest. \" +\n \"Page-view events will not be sent.\",\n );\n }\n return;\n }\n\n // GAP28 / unified-goal: resolve the per-business firing config once (stale-while-revalidate\n // against the CDN). Drives recordSale/trackConversion firing AND automatic event-goal\n // auto-fire below. Null when the consumer didn't opt into conversion firing.\n const conversionStore: ConversionConfigStore | null = conversionConfig\n ? resolveConversionConfig({\n cdnUrl: conversionConfig.cdnUrl,\n baked: conversionConfig.baked,\n })\n : null;\n\n // Bind a sales client to these creds so `AranovaTracking.sales` can post sales\n // with the same (public) key, no re-passing of apiKey/endpoint.\n activeSales = createSalesClient({\n apiKey,\n endpoint,\n firing: conversionStore ?? undefined,\n });\n\n // Default registry: page_view auto-fires, no manual events. Lets\n // consumers install with just { apiKey, endpoint } and still get\n // page views, which is the historical zero-config behavior.\n const registry: TriggerRegistryConfig = triggers ?? {\n automatic: { page_view: {} },\n manual: {},\n };\n activeRegistry = registry;\n\n // Resolve gtag IDs for context: prefer gtagIds map, fall back to single gtagId.\n const resolvedGtagIds = gtagIds\n ? (Object.fromEntries(\n Object.entries(gtagIds).filter((e): e is [string, string] => e[1] != null),\n ) as Record<string, string>)\n : gtagId\n ? { default: gtagId }\n : undefined;\n\n const rawClient = createTrackingClient({\n apiKey,\n endpoint,\n surface: \"script\",\n packageName: \"@aranova/tracking-browser\",\n sdkVersion: version,\n triggers: registry,\n environment,\n activeGtagIds: resolvedGtagIds,\n });\n // When conversion firing is on, wrap the client so every automatic detector event ALSO\n // auto-fires a matching event-goal's conversion. Manual events never match (so no double\n // fire); sales/manual goals fire via recordSale/trackConversion instead.\n activeClient = conversionStore\n ? withConversionAutoFire(rawClient, createConversionAutoFire(conversionStore))\n : rawClient;\n\n // page_view is always wired (required in the type). Also attach\n // bfcache restore — it's cheap and covers a real edge case. page_exit is\n // SDK-internal: always attached, so dwell/exit analytics need no config.\n activeDetachers.push(attachAutoPageView(activeClient));\n activeDetachers.push(attachBfcacheRestore(activeClient));\n activeDetachers.push(attachPageExit(activeClient));\n\n const timeOnSite = registry.automatic.time_on_site;\n if (timeOnSite) {\n activeDetachers.push(attachTimeOnSite(activeClient, timeOnSite));\n }\n\n const specificPageVisit = registry.automatic.specific_page_visit;\n if (specificPageVisit) {\n activeDetachers.push(attachSpecificPageVisit(activeClient, specificPageVisit));\n }\n\n const scrollDepth = registry.automatic.scroll_depth;\n if (scrollDepth) {\n activeDetachers.push(attachScrollDepth(activeClient, scrollDepth));\n }\n\n const multiPageSession = registry.automatic.multi_page_session;\n if (multiPageSession) {\n activeDetachers.push(attachMultiPageSession(activeClient, multiPageSession));\n }\n\n const formStart = registry.automatic.form_start;\n if (formStart) {\n activeDetachers.push(attachFormStart(activeClient, formStart));\n }\n\n const ctaClick = registry.manual?.cta_click;\n if (ctaClick) {\n // No-ops unless the config opts into autoCapture.\n activeDetachers.push(attachCtaClickCapture(activeClient, ctaClick));\n }\n}\n\n/**\n * Fire a manually registered event from a browser-script install.\n *\n * Unlike React/Next, this is runtime-validated because the consumer may not\n * have TypeScript. Unregistered events or invalid metadata produce\n * `console.warn` and are dropped.\n */\nfunction trackEvent(eventType: string, metadata: Record<string, unknown>): void {\n if (activeClient === null) {\n // eslint-disable-next-line no-console\n console.warn(\"[AranovaTracking] trackEvent called before init({ apiKey, endpoint })\");\n return;\n }\n\n const registry = activeRegistry;\n if (registry === null) {\n // eslint-disable-next-line no-console\n console.warn(\n \"[AranovaTracking] trackEvent called but no trigger registry was passed to init()\",\n );\n return;\n }\n\n // Event must be in the manual registry — automatic events are fired\n // by the SDK itself and should not be manually triggered. `manual` is\n // an optional property on the config, so default to `{}` (no manually-\n // fireable events) when omitted.\n const manualRegistry = registry.manual ?? {};\n if (!(eventType in manualRegistry)) {\n // eslint-disable-next-line no-console\n console.warn(\n `[AranovaTracking] trackEvent: event \"${eventType}\" is not registered as a manual trigger. ` +\n \"Register it under `triggers.manual` in init().\",\n );\n return;\n }\n\n // Validate metadata shape at runtime.\n try {\n const def = getEventDefinition(eventType as EventName);\n def.metadataSchema.parse(metadata);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `[AranovaTracking] trackEvent: metadata for \"${eventType}\" failed schema validation`,\n err,\n );\n return;\n }\n\n activeClient.trackEvent({\n eventType,\n metadata,\n pageUrl: null,\n occurredAt: null,\n });\n}\n\n/**\n * The sales client bound to this install's `init()` apiKey/endpoint.\n *\n * `AranovaTracking.sales().record({ ... })` posts a sale with the configured\n * (public) key. `list`/`get`/`update`/`delete` exist on the same client but a\n * public key is rejected by the backend with a helpful 403 — those require a\n * secret key used server-side, never in the browser.\n *\n * Throws if called before `init({ apiKey, endpoint })`.\n */\nfunction sales(): SalesClient {\n if (activeSales === null) {\n throw new Error(\"[AranovaTracking] sales() called before init({ apiKey, endpoint })\");\n }\n return activeSales;\n}\n\n/**\n * Public API exposed as `window.AranovaTracking` by the browser script.\n *\n * Consent v2 (opt-out model): tracking is on by default. Wire a footer\n * \"cookie preferences\" control to `optOut()` / `optIn()` / `resetConsent()`;\n * `getConsentChoice()` reports the effective state + whether it was explicit.\n */\nconst trackingScriptApi = {\n init,\n captureTrackingParams: (): TrackingParams => captureTrackingParamsFromLocation(),\n getTrackingParams,\n getConsentState,\n setConsentState,\n getConsentChoice,\n optIn,\n optOut,\n resetConsent,\n trackEvent,\n sales,\n};\n\nif (typeof window !== \"undefined\") window.AranovaTracking = trackingScriptApi;\n\nexport default trackingScriptApi;\n","{\n \"name\": \"@aranova/tracking-browser\",\n \"version\": \"0.17.0\",\n \"private\": false,\n \"type\": \"commonjs\",\n \"description\": \"Aranova tracking global browser script (CDN / <script> install). Serve via jsDelivr, not as an npm import.\",\n \"files\": [\n \"dist/browser\",\n \"README.md\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/AranovaIO/aranova_internal.git\",\n \"directory\": \"packages/tracking-browser\"\n },\n \"homepage\": \"https://github.com/AranovaIO/aranova_internal/tree/master/packages/tracking-browser\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"dependencies\": {\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"jsdom\": \"^29.0.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^4.1.4\"\n },\n \"publishConfig\": {\n \"registry\": \"https://registry.npmjs.org\",\n \"access\": \"public\"\n }\n}\n","import type { ConsentState } from \"./types\";\n\n/**\n * localStorage key for the visitor's explicit consent choice.\n */\nexport const CONSENT_STATE_KEY = \"consent_state\";\n\n/**\n * localStorage key for the ISO timestamp when consent was last changed.\n */\nexport const CONSENT_TIMESTAMP_KEY = \"consent_timestamp\";\n\n/**\n * localStorage key for the ISO timestamp when an explicit decline expires.\n *\n * Written alongside a `denied` choice; absent for grants (they never expire).\n * Computed at WRITE time so every reader — including the inline\n * `beforeInteractive` scripts that can't import this module — only has to\n * compare a stored ISO string against the clock.\n */\nexport const CONSENT_EXPIRES_AT_KEY = \"consent_expires_at\";\n\n/**\n * How long an explicit decline is honored before the visitor reverts to the\n * default-granted state. Explicit grants never expire.\n */\nexport const DEFAULT_DECLINE_TTL_DAYS = 90;\n\nconst DAY_MS = 86_400_000;\n\n/**\n * Google Consent Mode value sent to `gtag('consent', 'update', ...)`.\n */\nexport type GtagConsentValue = \"granted\" | \"denied\";\n\n/**\n * Consent Mode v2 payload sent to Google Ads when consent changes.\n */\nexport interface ConsentUpdatePayload {\n ad_storage: GtagConsentValue;\n ad_user_data: GtagConsentValue;\n ad_personalization: GtagConsentValue;\n analytics_storage: GtagConsentValue;\n}\n\n/** Effective consent state — the opt-out model has no \"pending\". */\nexport type ConsentChoiceState = \"granted\" | \"denied\";\n\n/**\n * Where the effective state came from: `explicit` when the visitor made a\n * stored, still-valid choice; `default` otherwise (no choice, expired decline,\n * storage blocked, SSR).\n */\nexport type ConsentSource = \"default\" | \"explicit\";\n\n/**\n * The effective consent decision plus its provenance.\n */\nexport interface ConsentChoice {\n state: ConsentChoiceState;\n source: ConsentSource;\n /** ISO timestamp of the explicit choice; null for the default state. */\n updatedAt: string | null;\n /** ISO expiry of an unexpired decline; null for grants and the default state. */\n expiresAt: string | null;\n}\n\n/** Options for explicit consent writes. */\nexport interface SetConsentOptions {\n /** Days an explicit decline is honored. Defaults to {@link DEFAULT_DECLINE_TTL_DAYS}. */\n declineTtlDays?: number;\n}\n\nconst DEFAULT_CHOICE: ConsentChoice = {\n state: \"granted\",\n source: \"default\",\n updatedAt: null,\n expiresAt: null,\n};\n\ntype ConsentChangeListener = (choice: ConsentChoice) => void;\nconst changeListeners = new Set<ConsentChangeListener>();\n\n/**\n * Subscribe to consent changes (opt-in, opt-out, reset) made in THIS tab.\n * Cross-tab changes surface via the browser's `storage` event instead.\n * Returns an unsubscribe function.\n */\nexport function onConsentChange(listener: ConsentChangeListener): () => void {\n changeListeners.add(listener);\n return () => {\n changeListeners.delete(listener);\n };\n}\n\n// Takes the intended choice rather than re-reading storage: when localStorage\n// is blocked, a re-read would report default-granted right after an opt-out\n// click even though the live gtag/fbq revoke DID apply for this page load.\nfunction notifyConsentChanged(choice: ConsentChoice): void {\n for (const listener of changeListeners) {\n try {\n listener(choice);\n } catch {\n // a listener must never break the consent flow\n }\n }\n}\n\n/**\n * Build the Google Consent Mode v2 update payload for a single consent state.\n */\nexport function buildConsentPayload(state: GtagConsentValue): ConsentUpdatePayload {\n return {\n ad_storage: state,\n ad_user_data: state,\n ad_personalization: state,\n analytics_storage: state,\n };\n}\n\n/**\n * Resolve the visitor's effective consent (opt-out model).\n *\n * Default is GRANTED. Only a stored, unexpired explicit decline yields\n * `denied`. SSR, blocked storage, and expired declines all resolve to the\n * default. A legacy decline stored by the opt-in-era SDK (no expiry key) stays\n * denied and gets a fresh 90-day expiry backfilled, keeping this reader\n * consistent with the inline scripts (which treat a missing expiry as denied).\n */\nexport function getConsentChoice(): ConsentChoice {\n if (typeof window === \"undefined\") return DEFAULT_CHOICE;\n\n try {\n const stored = window.localStorage.getItem(CONSENT_STATE_KEY);\n const updatedAt = window.localStorage.getItem(CONSENT_TIMESTAMP_KEY);\n\n if (stored === \"granted\")\n return { state: \"granted\", source: \"explicit\", updatedAt, expiresAt: null };\n\n if (stored === \"denied\") {\n let expiresAt = window.localStorage.getItem(CONSENT_EXPIRES_AT_KEY);\n if (!expiresAt) {\n expiresAt = new Date(Date.now() + DEFAULT_DECLINE_TTL_DAYS * DAY_MS).toISOString();\n try {\n window.localStorage.setItem(CONSENT_EXPIRES_AT_KEY, expiresAt);\n } catch {\n // backfill is best-effort; the decline is still honored this read\n }\n }\n // A garbled expiry parses to NaN, the comparison is false, and the decline\n // stays honored (fail closed on the decliner's side). Only a parseable\n // expiry in the past reverts to the default.\n if (!(Date.parse(expiresAt) <= Date.now()))\n return { state: \"denied\", source: \"explicit\", updatedAt, expiresAt };\n }\n } catch {\n // localStorage blocked (sandboxed iframe / storage disabled) — default\n }\n\n return DEFAULT_CHOICE;\n}\n\n/**\n * Read the visitor's effective consent state.\n *\n * Opt-out model: returns `granted` unless a stored, unexpired explicit decline\n * exists. Never returns `pending` — that value survives in {@link ConsentState}\n * only so pre-v2 call sites keep compiling.\n */\nexport function getConsentState(): ConsentState {\n return getConsentChoice().state;\n}\n\nfunction pushConsentToPlatforms(state: GtagConsentValue): void {\n if (typeof window === \"undefined\") return;\n\n if (typeof window.gtag === \"function\")\n window.gtag(\"consent\", \"update\", buildConsentPayload(state));\n\n // Mirror to the Meta Pixel so one control gates both ad platforms.\n if (typeof window.fbq === \"function\")\n window.fbq(\"consent\", state === \"granted\" ? \"grant\" : \"revoke\");\n}\n\n/**\n * Persist an explicit visitor consent choice and push it live to Google\n * Consent Mode and the Meta Pixel.\n *\n * Declines expire after {@link DEFAULT_DECLINE_TTL_DAYS} days (override via\n * `options.declineTtlDays`); grants never expire.\n */\nexport function setConsentState(state: GtagConsentValue, options?: SetConsentOptions): void {\n if (typeof window === \"undefined\") return;\n\n // Compute the full intended choice BEFORE touching storage so (a) a garbage\n // TTL can't throw mid-write (state written, expiry not), and (b) listeners\n // get the visitor's actual choice even when storage is blocked.\n const requestedTtl = options?.declineTtlDays;\n const ttlDays =\n typeof requestedTtl === \"number\" && Number.isFinite(requestedTtl) && requestedTtl > 0\n ? requestedTtl\n : DEFAULT_DECLINE_TTL_DAYS;\n const updatedAt = new Date().toISOString();\n const expiresAt =\n state === \"denied\" ? new Date(Date.now() + ttlDays * DAY_MS).toISOString() : null;\n\n try {\n window.localStorage.setItem(CONSENT_STATE_KEY, state);\n window.localStorage.setItem(CONSENT_TIMESTAMP_KEY, updatedAt);\n if (expiresAt !== null) {\n window.localStorage.setItem(CONSENT_EXPIRES_AT_KEY, expiresAt);\n } else {\n window.localStorage.removeItem(CONSENT_EXPIRES_AT_KEY);\n }\n } catch {\n // localStorage blocked — still push the live consent update below so the\n // visitor's click takes effect for this page load even if it can't persist\n }\n\n pushConsentToPlatforms(state);\n notifyConsentChanged({ state, source: \"explicit\", updatedAt, expiresAt });\n}\n\n/**\n * Explicitly opt the visitor in to ad tracking (never expires).\n */\nexport function optIn(): void {\n setConsentState(\"granted\");\n}\n\n/**\n * Explicitly opt the visitor out of ad tracking for\n * {@link DEFAULT_DECLINE_TTL_DAYS} days (override via `options.declineTtlDays`).\n *\n * This is the primitive a client site's footer \"cookie preferences\" control\n * should call — the packages ship no consent UI of their own.\n */\nexport function optOut(options?: SetConsentOptions): void {\n setConsentState(\"denied\", options);\n}\n\n/**\n * Clear the stored explicit choice, returning the visitor to the\n * default-granted state, and push that state live to gtag + Meta.\n *\n * Power a \"Cookie preferences\" reset in a footer:\n *\n * ```tsx\n * const { reset } = useCookiePreferences();\n * <button onClick={reset}>Reset cookie preferences</button>\n * ```\n */\nexport function resetConsent(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n window.localStorage.removeItem(CONSENT_STATE_KEY);\n window.localStorage.removeItem(CONSENT_TIMESTAMP_KEY);\n window.localStorage.removeItem(CONSENT_EXPIRES_AT_KEY);\n } catch {\n // localStorage blocked — nothing to clear\n }\n\n pushConsentToPlatforms(\"granted\");\n notifyConsentChanged(DEFAULT_CHOICE);\n}\n\n/**\n * Re-apply a stored explicit consent choice to Google Consent Mode + Meta.\n *\n * @deprecated The v2 consent-default path ({@link applyDefaultConsentState} /\n * `createConsentDefaultScript`) already applies the effective state at\n * bootstrap, making this redundant. Pushes platform updates directly — it must\n * NOT route through {@link setConsentState}, which would renew the decline's\n * 90-day expiry on every page load.\n */\nexport function restoreStoredConsent(): ConsentState {\n const choice = getConsentChoice();\n\n if (choice.source === \"explicit\") pushConsentToPlatforms(choice.state);\n\n return choice.state;\n}\n\n/**\n * Inline-JS fragment that resolves the effective consent value into\n * `var aranovaConsent = 'granted' | 'denied'`.\n *\n * Single source of the expiry logic for every inline `<script>` builder (gtag\n * and Meta), so the runtime reader and the inline readers can't drift. Must\n * stay dependency-free ES5 and never throw (localStorage access throws in\n * sandboxed iframes).\n */\nexport function createEffectiveConsentSnippet(): string {\n // IIFE keeps the temporaries off the page's global scope — only\n // `aranovaConsent` (the value consumed by the rest of the script) leaks.\n return `\nvar aranovaConsent = (function () {\n try {\n if (window.localStorage.getItem('${CONSENT_STATE_KEY}') === 'denied') {\n var exp = window.localStorage.getItem('${CONSENT_EXPIRES_AT_KEY}');\n var expMs = exp ? Date.parse(exp) : NaN;\n if (!(expMs <= Date.now())) return 'denied';\n }\n } catch (e) {}\n return 'granted';\n})();\n`.trim();\n}\n","import type { TrackingParams } from \"./types\";\n\n/**\n * Default attribution cookie lifetime: 90 days.\n */\nexport const TRACKING_COOKIE_MAX_AGE_SECONDS = 7_776_000;\n\n/**\n * Attribution query/cookie keys captured by the SDK.\n */\nexport const TRACKING_PARAM_KEYS = [\n \"gclid\",\n \"fbclid\",\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n] as const;\n\nexport type TrackingParamKey = (typeof TRACKING_PARAM_KEYS)[number];\n\n/**\n * Create an all-null attribution parameter object.\n */\nexport function createEmptyTrackingParams(): TrackingParams {\n return {\n gclid: null,\n fbclid: null,\n utm_source: null,\n utm_medium: null,\n utm_campaign: null,\n utm_term: null,\n utm_content: null,\n };\n}\n\n/**\n * Normalize a raw cookie value into a tracking value.\n *\n * Empty strings and non-string values become `null`.\n */\nexport function normalizeTrackingCookieValue(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\n/**\n * Read all tracking params using the provided cookie reader.\n *\n * This is shared by browser, React, and Next server integrations.\n */\nexport function getTrackingParamsFromCookieReader(\n readCookie: (key: TrackingParamKey) => unknown,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((params, key) => {\n params[key] = normalizeTrackingCookieValue(readCookie(key));\n return params;\n }, createEmptyTrackingParams());\n}\n\n/**\n * Extract tracking params from URL search params.\n *\n * Only non-empty values are returned.\n */\nexport function getTrackingQueryValues(\n searchParams: Pick<URLSearchParams, \"get\">,\n): Partial<Record<TrackingParamKey, string>> {\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const value = searchParams.get(key);\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n params[key] = value;\n }\n\n return params;\n }, {});\n}\n\n/**\n * localStorage fallback prefix. Meta/Facebook in-app browsers (Instagram / FB\n * webviews) frequently block `document.cookie`; when a cookie write can't be\n * confirmed we mirror the value here so attribution (and `_fbc`) survives the\n * session and subsequent in-webview reloads instead of being silently lost.\n */\nconst FALLBACK_STORAGE_PREFIX = \"_aranova_track_\";\n\nfunction fallbackKey(name: string): string {\n return `${FALLBACK_STORAGE_PREFIX}${name}`;\n}\n\n/**\n * Persist a cookie value AND mirror it to localStorage. Generic over the cookie\n * name so it serves the attribution params AND the Meta `_fbc` cookie. Never\n * throws.\n *\n * The localStorage mirror is written UNCONDITIONALLY — it is NOT gated on a\n * cookie read-back. Meta/Instagram in-app webviews partition cookies: the write\n * is visible to a same-page read (so a verify-after-write would falsely pass)\n * yet is silently dropped on the next navigation/reload. Gating the fallback on\n * that read-back would leave the value unrecoverable in exactly the case it\n * exists for; a stale same-name cookie from a prior visit would also mask a\n * blocked write. So we always write both. {@link readCookieValue} prefers the\n * cookie when present, which keeps the mirror harmless when cookies work and\n * load-bearing when they don't survive navigation.\n */\nexport function persistCookieValue(\n name: string,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n const encoded = encodeURIComponent(value);\n if (typeof document !== \"undefined\") {\n try {\n document.cookie = `${name}=${encoded}; Max-Age=${maxAgeSeconds}; Path=/; SameSite=Lax`;\n } catch {\n // cookie blocked — the localStorage mirror below is the fallback\n }\n }\n if (typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(fallbackKey(name), encoded);\n } catch {\n // both blocked — give up silently, never break the host site\n }\n }\n}\n\n/**\n * Read a cookie value, falling back to the localStorage mirror written by\n * {@link persistCookieValue} when the cookie is absent (blocked webview).\n */\nexport function readCookieValue(name: string): string | null {\n if (typeof document !== \"undefined\") {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const match = cookies.find((cookie) => cookie.startsWith(`${name}=`));\n if (match) {\n const [, rawValue = \"\"] = match.split(\"=\");\n return normalizeTrackingCookieValue(decodeURIComponent(rawValue));\n }\n }\n if (typeof window !== \"undefined\") {\n try {\n const stored = window.localStorage.getItem(fallbackKey(name));\n if (stored) return normalizeTrackingCookieValue(decodeURIComponent(stored));\n } catch {\n // ignore\n }\n }\n return null;\n}\n\n/**\n * Read a tracking cookie from `document.cookie` (or the localStorage fallback).\n *\n * Returns `null` during SSR or when neither source has the value.\n */\nexport function getCookieValueFromDocument(key: TrackingParamKey): string | null {\n return readCookieValue(key);\n}\n\n/**\n * Persist one attribution value as a first-party cookie (localStorage fallback\n * when cookies are blocked).\n */\nexport function setTrackingCookie(\n key: TrackingParamKey,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n persistCookieValue(key, value, maxAgeSeconds);\n}\n\n/**\n * Merge two attribution param sets, preferring `primary`'s non-null values and\n * filling the gaps from `fallback`. Used to combine the cookie-backed read with\n * the synchronous init-time snapshot so a value captured before an SPA router\n * stripped the URL (or before a webview blocked the cookie) still wins.\n */\nexport function mergeTrackingParams(\n primary: TrackingParams,\n fallback: TrackingParams,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((merged, key) => {\n merged[key] = primary[key] ?? fallback[key];\n return merged;\n }, createEmptyTrackingParams());\n}\n\n/**\n * Capture any tracking params present in a URL search parameter source and\n * persist them to first-party cookies.\n *\n * Returns the subset of params that were found and persisted.\n */\nexport function persistTrackingParamsFromSearchParams(\n searchParams: Pick<URLSearchParams, \"get\">,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): Partial<Record<TrackingParamKey, string>> {\n const trackingValues = getTrackingQueryValues(searchParams);\n\n Object.entries(trackingValues).forEach(([key, value]) => {\n setTrackingCookie(key as TrackingParamKey, value, maxAgeSeconds);\n });\n\n return trackingValues;\n}\n\n/**\n * Capture tracking params from a URL, persist them to first-party cookies, and\n * return the current cookie-backed attribution state.\n *\n * Defaults to `window.location.href` in the browser.\n */\nexport function captureTrackingParamsFromLocation(\n url = typeof window === \"undefined\" ? \"\" : window.location.href,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): TrackingParams {\n const resolvedUrl =\n typeof window === \"undefined\"\n ? new URL(url || \"https://example.invalid\")\n : new URL(url, window.location.origin);\n persistTrackingParamsFromSearchParams(resolvedUrl.searchParams, maxAgeSeconds);\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n","// This module loads the Google tag (gtag.js), applies Consent Mode, and fires\n// `gtag('config', …)` (remarketing) plus real-time `gtag('event','conversion')`\n// via `fireGtagConversion` (GAP28). Consent v2 is OPT-OUT: the effective state\n// is granted unless the visitor stored an explicit, unexpired decline, so tags\n// run from first paint for the default visitor.\n// See docs/google-ads-deployment/gtags-and-conversion-tracking.md.\n\nimport { buildConsentPayload, createEffectiveConsentSnippet, getConsentState } from \"./consent\";\nimport type { GtagEnvironmentMap } from \"./types\";\n\n/**\n * Google Tag Manager script host used for gtag loading.\n */\nexport const GTAG_SCRIPT_HOST = \"https://www.googletagmanager.com/gtag/js\";\n\n/**\n * Attribute used to mark scripts inserted by the tracking SDK.\n */\nexport const TRACKING_SCRIPT_ATTRIBUTE = \"data-aranova-tracking\";\n\nfunction getScriptMarker(id: string): string {\n return `aranova-${id}`;\n}\n\n/**\n * Pattern matching valid Google Ads / GA4 tag IDs.\n *\n * Accepted formats: `AW-123456789`, `G-XXXXXXXXXX`, `GT-XXXXXXX`, `DC-XXXXXXX`.\n * IDs that don't match are silently dropped to prevent script injection when\n * interpolated into inline `<script>` content.\n */\nconst GTAG_ID_PATTERN = /^[A-Z]{1,3}-[A-Za-z0-9_-]+$/;\n\nexport function isValidGtagId(id: string): boolean {\n return GTAG_ID_PATTERN.test(id);\n}\n\n/**\n * Create an inline script that initializes gtag with the visitor's EFFECTIVE\n * consent as the Consent Mode default (opt-out model).\n *\n * Resolves granted/denied synchronously from localStorage in one shot — a\n * decliner never gets a granted window and the default visitor never gets a\n * denied one, so no `wait_for_update` and no follow-up restore script is\n * needed. Run it `beforeInteractive` so the default lands before gtag.js.\n */\nexport function createConsentDefaultScript(): string {\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\n${createEffectiveConsentSnippet()}\ngtag('consent', 'default', {\n ad_storage: aranovaConsent,\n ad_user_data: aranovaConsent,\n ad_personalization: aranovaConsent,\n analytics_storage: aranovaConsent\n});\n`.trim();\n}\n\n/**\n * Create an inline script that initializes gtag for a Google Ads tag id.\n */\nexport function createGtagInitScript(gtagId: string): string {\n if (!isValidGtagId(gtagId)) return \"\";\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\ngtag('js', new Date());\ngtag('config', '${gtagId}');\n`.trim();\n}\n\n/**\n * Create an inline script that pushes the effective consent as an update.\n *\n * @deprecated Redundant since consent v2 — `createConsentDefaultScript()`\n * already resolves the effective state (including decline expiry) into the\n * Consent Mode default, so no restore pass is needed. Kept expiry-aware for\n * integrations that still render it.\n */\nexport function createConsentRestoreScript(): string {\n return `\n${createEffectiveConsentSnippet()}\nif (window.gtag) {\n window.gtag('consent', 'update', {\n ad_storage: aranovaConsent,\n ad_user_data: aranovaConsent,\n ad_personalization: aranovaConsent,\n analytics_storage: aranovaConsent\n });\n}\n`.trim();\n}\n\n/**\n * Ensure `window.gtag` and `window.dataLayer` exist and return the gtag shim.\n */\nexport function ensureGtagFunction(): NonNullable<Window[\"gtag\"]> {\n window.dataLayer = window.dataLayer || [];\n\n if (typeof window.gtag === \"function\") return window.gtag;\n\n // CRITICAL: push the `arguments` object, NOT a rest-param array. gtag.js only\n // treats the canonical `dataLayer.push(arguments)` form as a command — a plain\n // array pushed to the dataLayer is ignored. With the array form, every\n // gtag('config' | 'consent' | 'event') call silently no-ops: the account never\n // registers, consent mode never applies, and conversions never fire (verified\n // live — the array form sends zero network hits; the arguments form sends the\n // pagead/conversion ping). Mirror Google's canonical inline snippet exactly.\n function gtag(): void {\n // eslint-disable-next-line prefer-rest-params\n window.dataLayer?.push(arguments);\n }\n window.gtag = gtag;\n\n return window.gtag;\n}\n\nconst SEND_TO_RE = /^AW-[A-Za-z0-9]+\\/[A-Za-z0-9_-]+$/;\n\n/** A gtag `send_to` target, e.g. `AW-123456789/AbC-D_efg`. */\nexport function isValidSendTo(sendTo: string): boolean {\n return SEND_TO_RE.test(sendTo);\n}\n\nexport interface GtagConversionInput {\n /** `AW-<id>/<label>` — the conversion action's firing target. */\n sendTo: string;\n /** Conversion value in MAJOR units; omit to let Google apply the action's default. */\n value?: number | null;\n currency?: string | null;\n transactionId?: string | null;\n}\n\n/**\n * Fire a real-time on-site conversion — `gtag('event','conversion',{ send_to, … })`\n * (GAP28). Browser-gated and never throws: `record()` is isomorphic and runs server-side\n * under a secret key where `window`/`gtag` are absent, so this no-ops there. Consent\n * gating + de-dup are the caller's responsibility (see `fireConversionWithConsent`).\n * Returns whether the event was actually pushed.\n */\nexport function fireGtagConversion(input: GtagConversionInput): boolean {\n if (typeof window === \"undefined\" || typeof window.gtag !== \"function\") return false;\n if (!isValidSendTo(input.sendTo)) return false;\n const params: Record<string, unknown> = { send_to: input.sendTo };\n if (input.value != null) params.value = input.value;\n if (input.currency) params.currency = input.currency;\n if (input.transactionId) params.transaction_id = input.transactionId;\n try {\n window.gtag(\"event\", \"conversion\", params);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Apply the visitor's EFFECTIVE consent as the Consent Mode default\n * (opt-out model): granted unless a stored, unexpired decline exists.\n *\n * Reading via `getConsentState()` also backfills the expiry key for\n * legacy opt-in-era declines, keeping later inline reads consistent.\n */\nexport function applyDefaultConsentState(): void {\n const gtag = ensureGtagFunction();\n gtag(\n \"consent\",\n \"default\",\n buildConsentPayload(getConsentState() === \"denied\" ? \"denied\" : \"granted\"),\n );\n}\n\n/**\n * Load the external gtag script once for the provided Google Ads tag id.\n */\nexport function loadGtagScript(gtagId: string): void {\n if (typeof document === \"undefined\") return;\n\n const marker = getScriptMarker(\"gtag-loader\");\n const existingScript = document.querySelector<HTMLScriptElement>(\n `script[${TRACKING_SCRIPT_ATTRIBUTE}=\"${marker}\"]`,\n );\n if (existingScript) return;\n\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `${GTAG_SCRIPT_HOST}?id=${encodeURIComponent(gtagId)}`;\n script.setAttribute(TRACKING_SCRIPT_ATTRIBUTE, marker);\n document.head.append(script);\n}\n\n/**\n * Send the initial `gtag('js')` and `gtag('config')` calls.\n */\nexport function initializeGtag(gtagId: string): void {\n const gtag = ensureGtagFunction();\n gtag(\"js\", new Date());\n gtag(\"config\", gtagId);\n}\n\n/**\n * Push the current effective consent to gtag as an update.\n *\n * @deprecated Redundant since consent v2 — `applyDefaultConsentState()`\n * already applies the effective state at bootstrap. Pushes directly (no\n * storage writes), so it never renews a decline's expiry.\n */\nexport function restoreConsentState(): void {\n if (typeof window === \"undefined\") return;\n\n const consentState = getConsentState();\n if (consentState === \"granted\" || consentState === \"denied\")\n window.gtag?.(\"consent\", \"update\", buildConsentPayload(consentState));\n}\n\n/**\n * Load and initialize Google Ads tracking with Consent Mode support.\n *\n * Used by framework components and browser-script initialization.\n */\nexport function bootstrapGoogleAdsTracking(gtagId: string): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!isValidGtagId(gtagId)) return;\n\n applyDefaultConsentState();\n loadGtagScript(gtagId);\n initializeGtag(gtagId);\n}\n\n/**\n * Load and initialize Google Ads tracking for ALL labelled gtag IDs.\n *\n * Every ID in the map gets a `gtag('config', ...)` call — gtag natively\n * supports multiple configured tags on the same page. The script loader\n * only runs once (for the first ID); subsequent IDs reuse the shared\n * `dataLayer`.\n */\nexport function bootstrapMultipleGtags(gtagIds: GtagEnvironmentMap): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n\n const ids = Object.values(gtagIds).filter(\n (id): id is string => typeof id === \"string\" && isValidGtagId(id),\n );\n if (ids.length === 0) return;\n\n applyDefaultConsentState();\n loadGtagScript(ids[0]!);\n\n // Call gtag('js') once, then gtag('config') per ID. initializeGtag\n // calls both, but gtag('js') should only fire once per page load.\n const gtag = ensureGtagFunction();\n gtag(\"js\", new Date());\n for (const id of ids) {\n gtag(\"config\", id);\n }\n}\n\n/**\n * Create an inline script that initializes gtag for multiple Google Ads tag ids.\n *\n * Used by the Next.js `GoogleAdsTracking` component when rendering `<Script>`\n * tags for a multi-gtag configuration.\n */\nexport function createGtagInitScriptMulti(gtagIds: string[]): string {\n const safeIds = gtagIds.filter(isValidGtagId);\n const configs = safeIds.map((id) => `gtag('config', '${id}');`).join(\"\\n\");\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\ngtag('js', new Date());\n${configs}\n`.trim();\n}\n","// The Meta Pixel (`fbq`) loader — the Facebook analogue of `gtag.ts`. It loads\n// fbevents.js and fires `fbq('init', …)` + `fbq('track','PageView')` to build Meta\n// remarketing / custom audiences (and let Meta optimize delivery + attribute).\n// Consent v2 is OPT-OUT: the pixel runs from first paint unless the visitor\n// stored an explicit, unexpired decline. This is NOT our in-house analytics\n// (that's the event ingest pipeline); it's the ad-platform tag, exactly like the\n// Google tag is for Google Ads.\n//\n// It also forms the Conversions-API-canonical `_fbc` cookie from the landing\n// `fbclid` (and reads the Pixel-set `_fbp`) so a future server-side Meta\n// Conversions API writeback has everything it needs.\n\nimport { createEffectiveConsentSnippet, getConsentState } from \"./consent\";\nimport { persistCookieValue, readCookieValue, TRACKING_COOKIE_MAX_AGE_SECONDS } from \"./tracking\";\nimport { TRACKING_SCRIPT_ATTRIBUTE } from \"./gtag\";\nimport type { MetaPixelEnvironmentMap } from \"./types\";\n\n/** Meta Pixel script host. */\nexport const FB_EVENTS_SCRIPT_HOST = \"https://connect.facebook.net/en_US/fbevents.js\";\n\n/** Cookie names Meta uses for the Conversions API. */\nexport const FBC_COOKIE = \"_fbc\";\nexport const FBP_COOKIE = \"_fbp\";\n\n/**\n * Valid Meta Pixel ID: a 15-16 digit number. IDs that don't match are dropped to\n * prevent script injection when interpolated into inline `<script>` content\n * (mirrors GTAG_ID_PATTERN).\n */\nconst META_PIXEL_ID_PATTERN = /^\\d{15,16}$/;\n\nexport function isValidMetaPixelId(id: string): boolean {\n return META_PIXEL_ID_PATTERN.test(id);\n}\n\n// ---------------------------------------------------------------------------\n// _fbc / _fbp cookie formation\n// ---------------------------------------------------------------------------\n\n/**\n * subdomainIndex for the `_fbc` value: `com` → 0, `example.com` → 1,\n * `www.example.com` → 2 (dot-label count minus one).\n */\nexport function computeFbSubdomainIndex(hostname: string): number {\n const labels = hostname.split(\".\").filter(Boolean);\n return Math.max(0, labels.length - 1);\n}\n\n/**\n * Build the CAPI-canonical `_fbc` value: `fb.<subdomainIndex>.<creationMs>.<fbclid>`.\n * Never hashed.\n */\nexport function buildFbc(fbclid: string, now: number, hostname?: string): string {\n const host = hostname ?? (typeof window === \"undefined\" ? \"\" : window.location.hostname);\n return `fb.${computeFbSubdomainIndex(host)}.${now}.${fbclid}`;\n}\n\n/** Current `_fbc` cookie (or localStorage fallback), if any. */\nexport function getFbcCookie(): string | null {\n return readCookieValue(FBC_COOKIE);\n}\n\n/** Current `_fbp` cookie — set by the Meta Pixel; we only ever read it. */\nexport function getFbpCookie(): string | null {\n return readCookieValue(FBP_COOKIE);\n}\n\nfunction readFbclidFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n try {\n const value = new URL(window.location.href).searchParams.get(\"fbclid\");\n return value && value.trim().length > 0 ? value : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Form and persist `_fbc` from the landing `fbclid` when the Pixel hasn't already\n * set it. Reads the fbclid from the URL first, then the captured attribution\n * cookie. No-ops when there's no fbclid or `_fbc` already exists. `_fbp` is\n * Pixel-only — never written here.\n */\nexport function captureFbc(now = typeof Date === \"undefined\" ? 0 : Date.now()): void {\n if (typeof window === \"undefined\") return;\n // A Pixel-set `_fbc` is canonical — don't overwrite it.\n if (getFbcCookie()) return;\n const fbclid = readFbclidFromUrl() ?? readCookieValue(\"fbclid\");\n if (!fbclid) return;\n persistCookieValue(FBC_COOKIE, buildFbc(fbclid, now), TRACKING_COOKIE_MAX_AGE_SECONDS);\n}\n\n// ---------------------------------------------------------------------------\n// fbq loader (mirrors gtag.ts)\n// ---------------------------------------------------------------------------\n\ntype FbqStub = ((...args: unknown[]) => void) & {\n callMethod?: (...args: unknown[]) => void;\n queue: unknown[][];\n push: unknown;\n loaded: boolean;\n version: string;\n};\n\nfunction getScriptMarker(id: string): string {\n return `aranova-${id}`;\n}\n\n/**\n * Ensure `window.fbq` exists (the standard fbevents bootstrap stub) and return\n * it. Safe to call repeatedly — it only initializes once.\n */\nexport function ensureFbqFunction(): NonNullable<Window[\"fbq\"]> {\n const w = window as Window & { fbq?: FbqStub; _fbq?: FbqStub };\n if (typeof w.fbq === \"function\") return w.fbq;\n\n const fbq = function (this: unknown, ...args: unknown[]) {\n if (fbq.callMethod) fbq.callMethod.apply(fbq, args);\n else fbq.queue.push(args);\n } as FbqStub;\n\n fbq.push = fbq;\n fbq.loaded = true;\n fbq.version = \"2.0\";\n fbq.queue = [];\n\n w.fbq = fbq;\n if (!w._fbq) w._fbq = fbq;\n return fbq;\n}\n\n/**\n * Apply the visitor's EFFECTIVE consent to the Meta Pixel (opt-out model):\n * grant unless a stored, unexpired decline exists.\n */\nexport function applyDefaultMetaConsentState(): void {\n ensureFbqFunction()(\"consent\", getConsentState() === \"denied\" ? \"revoke\" : \"grant\");\n}\n\n/** Load fbevents.js once. */\nexport function loadFbeventsScript(): void {\n if (typeof document === \"undefined\") return;\n const marker = getScriptMarker(\"fbq-loader\");\n const existing = document.querySelector<HTMLScriptElement>(\n `script[${TRACKING_SCRIPT_ATTRIBUTE}=\"${marker}\"]`,\n );\n if (existing) return;\n\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = FB_EVENTS_SCRIPT_HOST;\n script.setAttribute(TRACKING_SCRIPT_ATTRIBUTE, marker);\n document.head.append(script);\n}\n\n/** `fbq('init', id)` + the initial PageView. */\nexport function initializeMetaPixel(pixelId: string): void {\n const fbq = ensureFbqFunction();\n fbq(\"init\", pixelId);\n fbq(\"track\", \"PageView\");\n}\n\n/**\n * Push the current effective consent to fbq.\n *\n * @deprecated Redundant since consent v2 — `applyDefaultMetaConsentState()`\n * already applies the effective state at bootstrap. Pushes directly (no\n * storage writes), so it never renews a decline's expiry.\n */\nexport function restoreMetaConsentState(): void {\n if (typeof window === \"undefined\") return;\n const state = getConsentState();\n if (state === \"granted\") window.fbq?.(\"consent\", \"grant\");\n else if (state === \"denied\") window.fbq?.(\"consent\", \"revoke\");\n}\n\n/**\n * Load + initialize one Meta Pixel with Consent Mode support, and form `_fbc`.\n */\nexport function bootstrapMetaPixel(pixelId: string): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!isValidMetaPixelId(pixelId)) return;\n\n applyDefaultMetaConsentState();\n loadFbeventsScript();\n initializeMetaPixel(pixelId);\n captureFbc();\n}\n\n/**\n * Load + initialize ALL labelled Meta Pixel IDs (script loads once; `fbq('init')`\n * fires per id — the Pixel supports multiple pixels on one page).\n */\nexport function bootstrapMultiplePixels(pixelIds: MetaPixelEnvironmentMap): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n const ids = Object.values(pixelIds).filter(\n (id): id is string => typeof id === \"string\" && isValidMetaPixelId(id),\n );\n if (ids.length === 0) return;\n\n applyDefaultMetaConsentState();\n loadFbeventsScript();\n const fbq = ensureFbqFunction();\n for (const id of ids) {\n fbq(\"init\", id);\n }\n fbq(\"track\", \"PageView\");\n captureFbc();\n}\n\n// ---------------------------------------------------------------------------\n// Inline <script> builders for the Next.js <Script> path (mirror gtag.ts)\n// ---------------------------------------------------------------------------\n\n/** The standard fbevents stub as an inline string. */\nfunction fbqStubScript(): string {\n return `\n!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\nn.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\ndocument,'script','${FB_EVENTS_SCRIPT_HOST}');`.trim();\n}\n\n/**\n * Inline script that loads the fbevents stub and applies the visitor's\n * EFFECTIVE consent (opt-out model) before any `init`/`PageView` fires.\n */\nexport function createMetaConsentDefaultScript(): string {\n return `${fbqStubScript()}\n${createEffectiveConsentSnippet()}\nfbq('consent', aranovaConsent === 'denied' ? 'revoke' : 'grant');`;\n}\n\n/** Inline script that inits one pixel + PageView. */\nexport function createMetaPixelInitScript(pixelId: string): string {\n if (!isValidMetaPixelId(pixelId)) return \"\";\n return `fbq('init', '${pixelId}');\\nfbq('track', 'PageView');`;\n}\n\n/** Inline script that inits multiple pixels + a single PageView. */\nexport function createMetaPixelInitScriptMulti(pixelIds: string[]): string {\n const inits = pixelIds.filter(isValidMetaPixelId).map((id) => `fbq('init', '${id}');`);\n if (inits.length === 0) return \"\";\n return `${inits.join(\"\\n\")}\\nfbq('track', 'PageView');`;\n}\n\n/**\n * Inline script that pushes the effective consent into fbq.\n *\n * @deprecated Redundant since consent v2 — `createMetaConsentDefaultScript()`\n * already applies the effective state (including decline expiry) before the\n * pixel initializes. Kept expiry-aware for integrations that still render it.\n */\nexport function createMetaConsentRestoreScript(): string {\n return `\n${createEffectiveConsentSnippet()}\nif (window.fbq) {\n window.fbq('consent', aranovaConsent === 'denied' ? 'revoke' : 'grant');\n}`.trim();\n}\n","// Session-scoped LANDING attribution (ADR-016).\n//\n// The carried attribution channel (tracking.ts) persists gclid/fbclid/utm_*\n// for 90 days so journey stitching and conversion writeback keep working\n// across sessions. This module answers a different question — \"what did THIS\n// session's landing URL actually carry?\" — so the dashboard's source label is\n// never poisoned by a click from an earlier session.\n//\n// One localStorage record, keyed to the current session id and overwritten\n// whenever a new session is minted: self-cleaning, O(1) storage, survives\n// in-webview reloads (localStorage, not cookies — Meta/IG webviews silently\n// drop cookie writes, the exact failure mode the carried channel already\n// engineers around). An in-memory mirror covers storage-blocked environments.\n\nimport { getTrackingQueryValues, TRACKING_PARAM_KEYS, type TrackingParamKey } from \"./tracking\";\n\n/**\n * localStorage key for the landing-params record (same `_aranova_track_`\n * family as the carried-channel cookie mirrors).\n */\nexport const LANDING_STORAGE_KEY = \"_aranova_track_landing\";\n\n/**\n * Serialized landing record: the params present in the landing URL of the\n * session identified by `session_id`.\n */\nexport interface StoredLandingRecord {\n session_id: string;\n params: Partial<Record<TrackingParamKey, string>>;\n}\n\nlet memoryRecord: StoredLandingRecord | null = null;\n\nfunction sanitizeParams(value: unknown): Partial<Record<TrackingParamKey, string>> {\n if (typeof value !== \"object\" || value === null) return {};\n const source = value as Record<string, unknown>;\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const entry = source[key];\n if (typeof entry === \"string\" && entry.length > 0) params[key] = entry;\n return params;\n }, {});\n}\n\nfunction readStoredRecord(): StoredLandingRecord | null {\n try {\n const raw = window.localStorage.getItem(LANDING_STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as Partial<StoredLandingRecord>;\n if (typeof parsed.session_id !== \"string\" || parsed.session_id.length === 0) return null;\n return { session_id: parsed.session_id, params: sanitizeParams(parsed.params) };\n } catch {\n return null;\n }\n}\n\nfunction writeRecord(record: StoredLandingRecord): void {\n memoryRecord = record;\n try {\n window.localStorage.setItem(LANDING_STORAGE_KEY, JSON.stringify(record));\n } catch {\n // Storage blocked — the in-memory mirror above still serves this page.\n }\n}\n\nfunction captureFromUrl(url?: string): Partial<Record<TrackingParamKey, string>> {\n try {\n const resolved = new URL(url ?? window.location.href, window.location.origin);\n return getTrackingQueryValues(resolved.searchParams);\n } catch {\n return {};\n }\n}\n\n/**\n * Return the landing params for `sessionId`, capturing them from the current\n * URL when no record for that session exists yet.\n *\n * First-wins: a record whose `session_id` matches is returned as-is (a second\n * tab's URL never clobbers the session's true landing). A missing or\n * mismatched record means a new session just started — the current URL IS that\n * session's landing, so it is captured and persisted. Read-only with respect\n * to the carried channel: never touches cookies. Never throws; returns `{}`\n * during SSR.\n */\nexport function getOrCaptureLandingParams(\n sessionId: string,\n url?: string,\n): Partial<Record<TrackingParamKey, string>> {\n if (typeof window === \"undefined\") return {};\n\n const stored = readStoredRecord();\n if (stored && stored.session_id === sessionId) {\n memoryRecord = stored;\n return stored.params;\n }\n if (memoryRecord && memoryRecord.session_id === sessionId) {\n return memoryRecord.params;\n }\n\n const record: StoredLandingRecord = { session_id: sessionId, params: captureFromUrl(url) };\n writeRecord(record);\n return record.params;\n}\n\n/**\n * The 7 landing wire fields, null-filled. Key PRESENCE tells the backend the\n * landing is explicitly known; when it is NOT known the keys must be omitted\n * entirely so the backend falls back to parsing first_page.\n */\nexport interface LandingPayloadFields {\n landing_gclid: string | null;\n landing_fbclid: string | null;\n landing_utm_source: string | null;\n landing_utm_medium: string | null;\n landing_utm_campaign: string | null;\n landing_utm_term: string | null;\n landing_utm_content: string | null;\n}\n\n/**\n * Build the landing portion of a session payload — the single place the\n * \"present iff known\" wire contract is enforced. Returns `{}` (omit the keys)\n * when there is no landing knowledge: during SSR the session's landing URL is\n * simply not observable, and sending explicit nulls would wrongly tell the\n * backend \"this session landed with no params\", suppressing its fallback.\n */\nexport function buildLandingPayloadFields(\n sessionId: string,\n override?: Partial<Record<TrackingParamKey, string>>,\n): Partial<LandingPayloadFields> {\n const params =\n override ?? (typeof window === \"undefined\" ? null : getOrCaptureLandingParams(sessionId));\n if (params === null) return {};\n return {\n landing_gclid: params.gclid ?? null,\n landing_fbclid: params.fbclid ?? null,\n landing_utm_source: params.utm_source ?? null,\n landing_utm_medium: params.utm_medium ?? null,\n landing_utm_campaign: params.utm_campaign ?? null,\n landing_utm_term: params.utm_term ?? null,\n landing_utm_content: params.utm_content ?? null,\n };\n}\n\n/**\n * Drop the landing record (localStorage + memory). Paired with\n * `resetTrackingIdentity()`; also used by tests.\n */\nexport function clearLandingRecord(): void {\n memoryRecord = null;\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.removeItem(LANDING_STORAGE_KEY);\n } catch {\n // ignored\n }\n}\n","// Consent-gated, de-duped orchestration around the raw `fireGtagConversion` (GAP28).\n//\n// Consent v2 (opt-out model): fire unless the visitor's effective consent is an\n// explicit, unexpired decline. There is no \"pending\" state and therefore no\n// queue — the default visitor converts in real time.\n//\n// `fireGtagConversion` is itself browser-gated and never throws, so this is safe to call\n// from the isomorphic sales `record()` — server-side it simply no-ops.\n\nimport { getConsentState } from \"../consent\";\nimport { fireGtagConversion, type GtagConversionInput } from \"../gtag\";\n\nconst DEDUP_PREFIX = \"_aranova_conv_\";\n\nfunction dedupKey(input: GtagConversionInput): string {\n return `${DEDUP_PREFIX}${input.transactionId ?? \"\"}:${input.sendTo}`;\n}\n\n// Has this (transaction_id, send_to) already fired? Read-only — the key is written ONLY\n// after a successful fire (see `fireOnce`), so a fire that never happened (e.g. gtag not\n// ready yet) is never suppressed on retry. Best-effort: a blocked sessionStorage reads as\n// \"not fired\" so the conversion still gets a chance.\nfunction alreadyFired(input: GtagConversionInput): boolean {\n if (!input.transactionId || typeof window === \"undefined\") return false;\n try {\n return window.sessionStorage.getItem(dedupKey(input)) !== null;\n } catch {\n return false;\n }\n}\n\nfunction markFired(input: GtagConversionInput): void {\n if (!input.transactionId || typeof window === \"undefined\") return;\n try {\n window.sessionStorage.setItem(dedupKey(input), \"1\");\n } catch {\n // sessionStorage unavailable — Google's counting_type is the authoritative backstop\n }\n}\n\n// Fire once: skip if already fired, and only record the guard AFTER the fire succeeds.\nfunction fireOnce(input: GtagConversionInput): void {\n if (alreadyFired(input)) return;\n if (fireGtagConversion(input)) markFired(input);\n}\n\n/** Fire a conversion through the consent gate + de-dup guard. */\nexport function fireConversionWithConsent(input: GtagConversionInput): void {\n if (getConsentState() === \"denied\") return;\n fireOnce(input);\n}\n\n/**\n * Flush conversions queued while consent was pending.\n *\n * @deprecated No-op since consent v2 — there is no \"pending\" state, so nothing\n * is ever queued. Kept exported so pre-v2 integrations keep compiling.\n */\nexport function flushPendingConversions(): void {\n // intentionally empty\n}\n","// The client tracking config the SDK reads at runtime (GAP28 / ENG-46).\n//\n// The browser fetches the per-business object published to R2/CDN. This module is a\n// TOLERANT reader — it ignores unknown fields, defaults every field, and never throws — so\n// the backend can add fields freely (additive-only within the `v1` schema major) without\n// breaking an older SDK, and a newer object never breaks an older reader. See\n// docs/tracking-package/conversion-config-schema.md for the contract.\n\nexport interface ServiceFiring {\n send_to: string;\n /** Action's configured default value (cents); the SDK fires it only when a sale has no amount. */\n value_cents?: number | null;\n currency?: string | null;\n}\n\n/** Serializable on-page trigger (owned by tracking-core/src/events/trigger-spec.ts). The shape\n * varies by `event_type`; only the parameter for that type is set. */\nexport interface ConfigTriggerSpec {\n event_type: string;\n threshold_percent?: number;\n threshold_seconds?: number;\n page_threshold?: number;\n page_name?: string;\n}\n\n/** One unified conversion goal: a revenue `sale` or an on-page `event`. */\nexport interface ConversionGoal {\n key: string;\n label?: string;\n kind: \"sale\" | \"event\";\n /** Structured fire-when for event-goals; null for sales. */\n trigger: ConfigTriggerSpec | null;\n firing: ServiceFiring | null;\n}\n\nexport interface ConversionConfig {\n schema_version: number;\n config_version: number;\n business_id?: string;\n customer_id?: string | null;\n environment?: string;\n gtag_ids: Record<string, string>;\n meta_pixel_ids: Record<string, string>;\n /** LEGACY: sale-goals only (for pre-unified-goal readers). */\n services: Array<{\n key: string;\n label?: string;\n firing: ServiceFiring | null;\n }>;\n /** Unified goal list (sales + on-page events). Superset of `services`. */\n goals: ConversionGoal[];\n}\n\nexport interface ConversionConfigStore {\n /** Firing config for a goal/service key, or null when it doesn't fire on-site. */\n getFiring(key: string): ServiceFiring | null;\n /** The full goal for a key, or null when unknown. */\n getGoal(key: string): ConversionGoal | null;\n /** Every adopted goal (sales + events). */\n listGoals(): ConversionGoal[];\n /** The currently adopted config (baked / cached fallback until the fetch lands). */\n current(): ConversionConfig | null;\n /** True once a config is adopted (seeded synchronously from cache/baked, or fetched). */\n isReady(): boolean;\n /**\n * Run `listener` when a config first becomes available — immediately if already\n * ready, otherwise on the first adopt. Lets auto-fire replay automatic events that\n * occurred before the async CDN fetch resolved. Returns an unsubscribe fn.\n */\n onResolve(listener: () => void): () => void;\n /** Force a background revalidate against the CDN object. */\n revalidate(): Promise<void>;\n}\n\nfunction isStringMap(value: unknown): value is Record<string, string> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Object.values(value).every((v) => typeof v === \"string\")\n );\n}\n\nfunction parseFiring(value: unknown): ServiceFiring | null {\n if (!value || typeof value !== \"object\") return null;\n const f = value as Record<string, unknown>;\n if (typeof f.send_to !== \"string\") return null;\n return {\n send_to: f.send_to,\n value_cents: typeof f.value_cents === \"number\" ? f.value_cents : null,\n currency: typeof f.currency === \"string\" ? f.currency : null,\n };\n}\n\nfunction parseTrigger(value: unknown): ConfigTriggerSpec | null {\n if (!value || typeof value !== \"object\") return null;\n const t = value as Record<string, unknown>;\n if (typeof t.event_type !== \"string\") return null;\n const spec: ConfigTriggerSpec = { event_type: t.event_type };\n if (typeof t.threshold_percent === \"number\") spec.threshold_percent = t.threshold_percent;\n if (typeof t.threshold_seconds === \"number\") spec.threshold_seconds = t.threshold_seconds;\n if (typeof t.page_threshold === \"number\") spec.page_threshold = t.page_threshold;\n if (typeof t.page_name === \"string\") spec.page_name = t.page_name;\n return spec;\n}\n\n/** Tolerant parse of a raw config object — never throws; returns null only when unusable. */\nexport function parseConversionConfig(raw: unknown): ConversionConfig | null {\n if (!raw || typeof raw !== \"object\") return null;\n const obj = raw as Record<string, unknown>;\n const servicesRaw = Array.isArray(obj.services) ? obj.services : [];\n const services = servicesRaw.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n const s = entry as Record<string, unknown>;\n if (typeof s.key !== \"string\") return [];\n return [\n {\n key: s.key,\n label: typeof s.label === \"string\" ? s.label : undefined,\n firing: parseFiring(s.firing),\n },\n ];\n });\n const goalsRaw = Array.isArray(obj.goals) ? obj.goals : null;\n // Back-compat: an object from a pre-unified-goal backend has no `goals` — derive them from\n // the legacy `services` (all sale-goals) so the store always has a unified list.\n const goals: ConversionGoal[] = goalsRaw\n ? goalsRaw.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n const g = entry as Record<string, unknown>;\n if (typeof g.key !== \"string\") return [];\n return [\n {\n key: g.key,\n label: typeof g.label === \"string\" ? g.label : undefined,\n kind: g.kind === \"event\" ? \"event\" : \"sale\",\n trigger: parseTrigger(g.trigger),\n firing: parseFiring(g.firing),\n },\n ];\n })\n : services.map((s) => ({\n key: s.key,\n label: s.label,\n kind: \"sale\" as const,\n trigger: null,\n firing: s.firing,\n }));\n return {\n schema_version: typeof obj.schema_version === \"number\" ? obj.schema_version : 1,\n config_version: typeof obj.config_version === \"number\" ? obj.config_version : 0,\n business_id: typeof obj.business_id === \"string\" ? obj.business_id : undefined,\n customer_id: typeof obj.customer_id === \"string\" ? obj.customer_id : null,\n environment: typeof obj.environment === \"string\" ? obj.environment : undefined,\n gtag_ids: isStringMap(obj.gtag_ids) ? obj.gtag_ids : {},\n meta_pixel_ids: isStringMap(obj.meta_pixel_ids) ? obj.meta_pixel_ids : {},\n services,\n goals,\n };\n}\n\n// --- stale-while-revalidate cache (sessionStorage) -----------------------------------------\n\nconst CACHE_PREFIX = \"_aranova_cfg_\";\n\ninterface CachedEntry {\n etag: string | null;\n config: ConversionConfig;\n}\n\nfunction cacheKey(url: string): string {\n return `${CACHE_PREFIX}${url}`;\n}\n\nfunction readCache(url: string): CachedEntry | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.sessionStorage.getItem(cacheKey(url));\n if (!raw) return null;\n const parsed = JSON.parse(raw) as { etag?: unknown; config?: unknown };\n const config = parseConversionConfig(parsed.config);\n if (!config) return null;\n return {\n etag: typeof parsed.etag === \"string\" ? parsed.etag : null,\n config,\n };\n } catch {\n return null;\n }\n}\n\nfunction writeCache(url: string, entry: CachedEntry): void {\n if (typeof window === \"undefined\") return;\n try {\n window.sessionStorage.setItem(cacheKey(url), JSON.stringify(entry));\n } catch {\n // sessionStorage unavailable — runtime adoption still works, just not across inits\n }\n}\n\nexport interface ResolveConversionConfigOptions {\n /** Full URL of the per-business CDN object. */\n cdnUrl: string;\n /** Offline-correct fallback (e.g. the CLI-baked snapshot). */\n baked?: ConversionConfig | null;\n /** Injectable for tests / non-global-fetch runtimes. */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * Resolve the config with stale-while-revalidate: seed synchronously from the\n * sessionStorage cache (or the baked fallback), then conditionally re-fetch the CDN object\n * with `If-None-Match`. A fetched object is adopted only if its `config_version` is strictly\n * greater than what's cached, so a reordered edge copy can't downgrade fresher state.\n * Non-blocking and browser-only; a failed fetch leaves the seed in place.\n */\nexport function resolveConversionConfig(\n options: ResolveConversionConfigOptions,\n): ConversionConfigStore {\n const cached = readCache(options.cdnUrl);\n let current: ConversionConfig | null = cached?.config ?? options.baked ?? null;\n let etag: string | null = cached?.etag ?? null;\n const goalsByKey = new Map<string, ConversionGoal>();\n const resolveListeners = new Set<() => void>();\n\n function rebuildIndex(): void {\n goalsByKey.clear();\n for (const goal of current?.goals ?? []) {\n goalsByKey.set(goal.key, goal);\n }\n }\n\n function notifyResolved(): void {\n // One-shot: only the FIRST adoption matters for replay. Snapshot then clear so a\n // listener that re-subscribes inside its callback isn't double-run.\n const listeners = [...resolveListeners];\n resolveListeners.clear();\n // Isolate each listener: the set is already cleared, so one throwing subscriber\n // must not drop the others' buffered replays. Swallow (best-effort) to match the\n // SDK's policy of never surfacing tracking errors to the host page.\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // never let one subscriber break conversion replay\n }\n }\n }\n\n function adopt(next: ConversionConfig | null, nextEtag: string | null): void {\n if (!next) return;\n if (current && next.config_version <= current.config_version) return;\n const wasEmpty = current === null;\n current = next;\n etag = nextEtag;\n rebuildIndex();\n writeCache(options.cdnUrl, { etag, config: next });\n if (wasEmpty) notifyResolved();\n }\n\n async function revalidate(): Promise<void> {\n if (typeof window === \"undefined\") return;\n try {\n const doFetch = options.fetchImpl ?? globalThis.fetch;\n if (!doFetch) return;\n const headers: Record<string, string> = {};\n if (etag) headers[\"If-None-Match\"] = etag;\n const response = await doFetch(options.cdnUrl, {\n method: \"GET\",\n headers,\n });\n if (response.status === 304 || !response.ok) return;\n adopt(parseConversionConfig(await response.json()), response.headers.get(\"ETag\"));\n } catch {\n // best-effort; the cached / baked fallback stays in place\n }\n }\n\n rebuildIndex();\n void revalidate();\n\n return {\n getFiring: (key) => goalsByKey.get(key)?.firing ?? null,\n getGoal: (key) => goalsByKey.get(key) ?? null,\n listGoals: () => [...goalsByKey.values()],\n current: () => current,\n isReady: () => current !== null,\n onResolve: (listener) => {\n if (current !== null) {\n listener();\n return () => {};\n }\n resolveListeners.add(listener);\n return () => resolveListeners.delete(listener);\n },\n revalidate,\n };\n}\n","import type { SupportedCurrency } from \"./schema\";\n\n/**\n * Money conversion helpers.\n *\n * The API speaks **integer minor units (cents)** exclusively. These helpers move\n * between a human-facing major amount (dollars) and cents, and format cents for\n * display — so a consumer always has both representations without float math.\n */\n\n// Minor-unit exponent per supported currency (USD/CAD = 2 decimal places).\nconst MINOR_UNIT_EXPONENT: Record<SupportedCurrency, number> = {\n USD: 2,\n CAD: 2,\n};\n\nfunction exponentFor(currency: SupportedCurrency): number {\n return MINOR_UNIT_EXPONENT[currency] ?? 2;\n}\n\n/**\n * Convert a major amount (dollars `250.5`) to integer minor units (`25050`).\n *\n * Convenience only — the wire is always integer cents. Uses float multiply +\n * `Math.round`, so values that aren't exactly representable in binary float\n * (e.g. `1.005`) can round to the neighbouring cent. If you already hold an\n * exact cents integer, pass it straight through and skip this helper.\n */\nexport function toMinor(amount: number, currency: SupportedCurrency): number {\n return Math.round(amount * 10 ** exponentFor(currency));\n}\n\n/** Convert integer minor units (`25050`) to a major amount (`250.5`). */\nexport function fromMinor(cents: number, currency: SupportedCurrency): number {\n return cents / 10 ** exponentFor(currency);\n}\n\n/**\n * Format integer minor units as a localized currency string (e.g. `\"$250.50\"`).\n * Uses the built-in `Intl.NumberFormat` — no extra dependency.\n */\nexport function formatMoney(cents: number, currency: SupportedCurrency, locale?: string): string {\n return new Intl.NumberFormat(locale, { style: \"currency\", currency }).format(\n fromMinor(cents, currency),\n );\n}\n\n/**\n * Format an ISO timestamp in a specific IANA time zone (e.g. `America/Toronto`),\n * so dashboards stop hand-rolling `Intl`. Defaults to a short date-time; pass\n * `opts` to override fields. The `timeZone` is always forced to the argument.\n */\nexport function formatDateInTz(\n iso: string,\n timeZone: string,\n opts?: Intl.DateTimeFormatOptions,\n locale?: string,\n): string {\n const date = new Date(iso);\n // Guard malformed input: Intl.format(Invalid Date) throws a RangeError.\n if (Number.isNaN(date.getTime())) return iso;\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n ...opts,\n timeZone,\n }).format(date);\n}\n","// Auto-fire on-page conversions for AUTOMATIC event-goals (GAP28 / unified-goal ADR).\n//\n// The SDK's automatic detectors (scroll_depth, time_on_site, multi_page_session,\n// specific_page_visit, page_view, form_start) already emit analytics events via\n// `client.trackEvent`. This layer observes those events and ALSO fires a\n// `gtag('event','conversion')` when a published EVENT-goal's trigger threshold is met — so the\n// consumer writes ZERO conversion code for automatic goals (the config drives everything).\n//\n// Manual event-goals (form_submit/phone_click/cta_click) are NOT auto-fired here — the\n// consumer fires them explicitly via `trackConversion`. Sales fire via `recordSale`.\n\nimport type { TrackingClient, TrackEventInput } from \"../ingest\";\nimport type { ConversionConfigStore, ConversionGoal } from \"./conversion-config\";\nimport { fireConversionWithConsent } from \"./conversion-firing\";\nimport { fromMinor } from \"./sales/money\";\nimport type { SupportedCurrency } from \"./sales/schema\";\n\n// Does an automatic detector event satisfy this goal's trigger threshold? The detector only\n// emits at the consumer's configured analytics thresholds; a goal whose threshold the detector\n// never emits simply won't fire (a mismatch surfaced by the heartbeat report, never wrong).\nfunction thresholdMet(\n goal: ConversionGoal,\n eventType: string,\n metadata: Record<string, unknown>,\n): boolean {\n const t = goal.trigger;\n if (!t || t.event_type !== eventType) return false;\n switch (eventType) {\n case \"scroll_depth\":\n return (\n typeof metadata.depth_percent === \"number\" &&\n t.threshold_percent != null &&\n metadata.depth_percent >= t.threshold_percent\n );\n case \"time_on_site\":\n // The event carries duration_ms; the goal threshold is in seconds.\n return (\n typeof metadata.duration_ms === \"number\" &&\n t.threshold_seconds != null &&\n metadata.duration_ms >= t.threshold_seconds * 1000\n );\n case \"multi_page_session\":\n return (\n typeof metadata.page_count === \"number\" &&\n t.page_threshold != null &&\n metadata.page_count >= t.page_threshold\n );\n case \"specific_page_visit\":\n return typeof metadata.page_name === \"string\" && metadata.page_name === t.page_name;\n case \"page_view\":\n case \"form_start\":\n return true; // no threshold — fire whenever the detector emits\n default:\n return false; // unknown event_type (older SDK vs newer config) → no fire\n }\n}\n\nfunction currentPath(): string {\n return typeof window === \"undefined\" ? \"\" : window.location.pathname;\n}\n\nexport interface ConversionAutoFire {\n /** Fire any matching automatic event-goal's conversion for a just-emitted detector event. */\n onAutomaticEvent(eventType: string, metadata: Record<string, unknown>): void;\n}\n\n// Bound the pre-config buffer so a page that never resolves its config (offline, bad\n// URL) can't grow it without limit.\nconst MAX_BUFFERED_EVENTS = 50;\n\n/** Build the auto-fire matcher bound to a config store. */\nexport function createConversionAutoFire(\n store: Pick<ConversionConfigStore, \"listGoals\" | \"isReady\" | \"onResolve\">,\n): ConversionAutoFire {\n // Detectors fire synchronously, but the CDN config resolves async. The scroll_depth\n // initial-check in particular fires at page load — before a cold-cache fetch lands —\n // and the detector won't re-emit that threshold on the page. Buffer events that arrive\n // before the config is ready and replay them on the first resolve, so an early trigger\n // still converts (a beat late) instead of being silently dropped.\n const pending: Array<{ eventType: string; metadata: Record<string, unknown> }> = [];\n let subscribed = false;\n\n function fireMatching(eventType: string, metadata: Record<string, unknown>): void {\n for (const goal of store.listGoals()) {\n if (goal.kind !== \"event\" || !goal.firing) continue;\n if (!thresholdMet(goal, eventType, metadata)) continue;\n const firing = goal.firing;\n const cents = firing.value_cents ?? null;\n const currency = firing.currency ?? null;\n fireConversionWithConsent({\n sendTo: firing.send_to,\n value: cents != null && currency ? fromMinor(cents, currency as SupportedCurrency) : null,\n currency,\n // Page-scoped txn id → fire once per (goal, path) per session; engagement conversions\n // shouldn't re-fire as the visitor scrolls back and forth or re-enters a page.\n transactionId: `auto:${goal.key}:${currentPath()}`,\n });\n }\n }\n\n return {\n onAutomaticEvent(eventType, metadata) {\n if (store.isReady()) {\n fireMatching(eventType, metadata);\n return;\n }\n // Config still loading — buffer (bounded) and replay on the first resolve.\n if (pending.length < MAX_BUFFERED_EVENTS) pending.push({ eventType, metadata });\n if (!subscribed) {\n subscribed = true;\n store.onResolve(() => {\n const buffered = pending.splice(0);\n for (const event of buffered) fireMatching(event.eventType, event.metadata);\n });\n }\n },\n };\n}\n\n/**\n * Wrap a {@link TrackingClient} so every automatic event it tracks ALSO drives conversion\n * auto-fire. Pass the wrapped client to the `attach*` detectors. The auto-fire is best-effort\n * and never breaks ingest.\n */\nexport function withConversionAutoFire(\n client: TrackingClient,\n autoFire: ConversionAutoFire,\n): TrackingClient {\n return {\n ...client,\n trackEvent: (input: TrackEventInput) => {\n client.trackEvent(input);\n try {\n autoFire.onAutomaticEvent(input.eventType, input.metadata ?? {});\n } catch {\n // never let conversion firing break analytics ingest\n }\n },\n };\n}\n","// Visitor + session identity for the tracking SDK.\n//\n// Visitor: persistent localStorage UUID, never expires until the user clears\n// browser storage. Used for cross-session correlation.\n//\n// Session: rolling 30-minute idle window. Regenerated when more than\n// SESSION_IDLE_MS has passed since the last event. Matches the behavior of\n// GA4, PostHog, Mixpanel, etc., so analytics is comparable.\n\nimport { clearLandingRecord } from \"./landing\";\n\n/**\n * localStorage key for the persistent visitor id.\n */\nexport const VISITOR_STORAGE_KEY = \"aranova_tracking_visitor\";\n\n/**\n * localStorage key for the rolling session id state.\n */\nexport const SESSION_STORAGE_KEY = \"aranova_tracking_session\";\n\n/**\n * Idle window before a new session id is created.\n */\nexport const SESSION_IDLE_MS = 30 * 60 * 1000;\n\n/**\n * Serialized session state stored in localStorage.\n */\nexport interface StoredSession {\n /** Client-generated session UUID. */\n id: string;\n /** Unix timestamp in milliseconds for the most recent event/session touch. */\n last_event_at: number;\n}\n\nfunction safeUuid(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\")\n return crypto.randomUUID();\n // Fallback for ancient browsers — not cryptographically perfect but unique enough.\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}-${Math.random().toString(16).slice(2)}`;\n}\n\nfunction readLocalStorage(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeLocalStorage(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // Storage may be denied (private mode, blocked cookies, quota). Caller is\n // responsible for degrading gracefully.\n }\n}\n\n/**\n * Return the persistent visitor id for this browser profile.\n *\n * Creates and stores a new id when one does not already exist. During SSR,\n * returns an ephemeral id because browser storage is unavailable.\n */\nexport function getVisitorId(): string {\n if (typeof window === \"undefined\") return safeUuid();\n\n const existing = readLocalStorage(VISITOR_STORAGE_KEY);\n if (existing && existing.length > 0) return existing;\n\n const fresh = safeUuid();\n writeLocalStorage(VISITOR_STORAGE_KEY, fresh);\n return fresh;\n}\n\n/**\n * Result from `getOrRotateSessionId()`.\n */\nexport interface SessionIdResult {\n /** Current session id. */\n id: string;\n /** Whether this call created a new session. */\n isNew: boolean;\n}\n\n/**\n * Return the current session id, rotating it after the idle window expires.\n *\n * Also refreshes `last_event_at` for active sessions.\n */\nexport function getOrRotateSessionId(now: number = Date.now()): SessionIdResult {\n if (typeof window === \"undefined\") return { id: safeUuid(), isNew: true };\n\n const raw = readLocalStorage(SESSION_STORAGE_KEY);\n if (raw) {\n try {\n const parsed = JSON.parse(raw) as Partial<StoredSession>;\n if (typeof parsed.id === \"string\" && typeof parsed.last_event_at === \"number\") {\n if (now - parsed.last_event_at <= SESSION_IDLE_MS) {\n const refreshed: StoredSession = { id: parsed.id, last_event_at: now };\n writeLocalStorage(SESSION_STORAGE_KEY, JSON.stringify(refreshed));\n return { id: parsed.id, isNew: false };\n }\n }\n } catch {\n // Fall through to a fresh session.\n }\n }\n\n const fresh: StoredSession = { id: safeUuid(), last_event_at: now };\n writeLocalStorage(SESSION_STORAGE_KEY, JSON.stringify(fresh));\n return { id: fresh.id, isNew: true };\n}\n\n/**\n * Clear visitor and session identity from localStorage, including the\n * session-scoped landing record (a landing must never outlive its session).\n *\n * Intended for tests, debugging, and explicit user reset flows.\n */\nexport function resetTrackingIdentity(): void {\n clearLandingRecord();\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.removeItem(VISITOR_STORAGE_KEY);\n window.localStorage.removeItem(SESSION_STORAGE_KEY);\n } catch {\n // ignored\n }\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `page_view` event.\n *\n * The SDK emits this on initial load, SPA route changes, and bfcache restores.\n * Consumers do not call `trackEvent('page_view', ...)`; registering\n * `automatic: { page_view: {} }` enables the SDK-owned trigger.\n */\nexport const pageViewMetadataSchema = z\n .object({\n page: z\n .object({\n title: z.string().nullable(),\n path: z.string(),\n search: z.string(),\n hash: z.string(),\n })\n .strict(),\n referrer: z.string().nullable(),\n // `.nullable().optional()` — absent (undefined) OR explicit null OR a\n // real viewport object. Mirrors Pydantic's `_Viewport | None = None`\n // on the backend side so the drift test stays clean.\n viewport: z\n .object({\n w: z.number(),\n h: z.number(),\n })\n .strict()\n .nullable()\n .optional(),\n })\n .strict();\n\nexport type PageViewMetadata = z.infer<typeof pageViewMetadataSchema>;\n\n/**\n * Registration config for automatic `page_view`.\n *\n * `page_view` is required in every trigger registry and currently has no\n * options. Use `{ page_view: {} }`.\n */\nexport const pageViewConfigSchema = z.object({}).strict();\nexport type PageViewConfig = z.infer<typeof pageViewConfigSchema>;\n","// Auto page_view emission. Fires once on attach, then again on every SPA\n// navigation. Detects navigation via three signals:\n// - history.pushState (patched)\n// - history.replaceState (patched)\n// - popstate event (back/forward buttons)\n// - pageshow with event.persisted === true (back-forward cache restore)\n//\n// The Next.js provider can opt out of this and use `usePathname` instead so\n// it picks up App Router transitions reliably without monkey-patching globals.\n\nimport { pageViewMetadataSchema, type PageViewMetadata } from \"./events/page-view\";\nimport type { TrackingClient } from \"./ingest\";\n\n// Re-export so existing callers that import `PageViewMetadata` from\n// `./page-view` keep compiling. The canonical definition now lives in\n// `events/page-view.ts` and is derived from a Zod schema.\nexport type { PageViewMetadata } from \"./events/page-view\";\n\n/**\n * Session-storage key used to maintain the in-tab SPA referrer chain.\n */\nexport const LAST_FIRED_URL_STORAGE_KEY = \"aranova_tracking_last_fired_url\";\n\n// Tracks the previous in-session URL we fired a page_view for. SPA\n// navigation never updates `document.referrer` (the document is never\n// reloaded), so all events would otherwise share the same stale referrer\n// value. We track it ourselves: the referrer for an event at URL X is the\n// last URL we fired a page_view for, falling back to document.referrer for\n// the very first event of the session.\n//\n// Hybrid storage: the in-memory variable is the runtime source of truth\n// (cheap reads, no quota concerns), and sessionStorage is the durability\n// layer (survives full-page reloads and bfcache restoration). On first\n// read per JS context we lazily hydrate from sessionStorage; on every\n// write we update both layers. If sessionStorage is unavailable (private\n// mode, blocked extensions, quota errors) we silently fall back to\n// memory-only — the SDK stays functional, just loses cross-reload\n// referrer continuity in that one tab.\nlet lastFiredUrl: string | null = null;\nlet lastFiredUrlHydrated = false;\n\nfunction readSessionStorage(key: string): string | null {\n try {\n if (typeof window === \"undefined\") return null;\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeSessionStorage(key: string, value: string): void {\n try {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.setItem(key, value);\n } catch {\n // private mode / blocked / quota — memory-only is fine\n }\n}\n\nfunction deleteSessionStorage(key: string): void {\n try {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.removeItem(key);\n } catch {\n // ignore\n }\n}\n\nfunction getLastFiredUrl(): string | null {\n if (!lastFiredUrlHydrated) {\n lastFiredUrlHydrated = true;\n const stored = readSessionStorage(LAST_FIRED_URL_STORAGE_KEY);\n if (stored !== null) lastFiredUrl = stored;\n }\n return lastFiredUrl;\n}\n\nfunction setLastFiredUrl(url: string): void {\n lastFiredUrl = url;\n lastFiredUrlHydrated = true;\n writeSessionStorage(LAST_FIRED_URL_STORAGE_KEY, url);\n}\n\n/**\n * Clear the in-session URL tracking. Primarily an escape hatch for tests\n * so each test starts with a fresh referrer chain; production code\n * doesn't need this — the singleton client lives for the page lifetime.\n */\nexport function resetPageViewState(): void {\n lastFiredUrl = null;\n lastFiredUrlHydrated = false;\n deleteSessionStorage(LAST_FIRED_URL_STORAGE_KEY);\n}\n\n/**\n * Build canonical `page_view` metadata from the current browser document.\n *\n * Returns `null` outside the browser.\n */\nexport function buildPageViewMetadata(referrerOverride?: string | null): PageViewMetadata | null {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return null;\n // Run the constructed object through the Zod schema so the shape is\n // validated even when the SDK itself is the one building it. If the\n // schema ever drifts from what buildPageViewMetadata emits, the parse\n // throws here and the event is dropped rather than being sent malformed.\n return pageViewMetadataSchema.parse({\n page: {\n title: document.title || null,\n path: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n },\n referrer: referrerOverride !== undefined ? referrerOverride : document.referrer || null,\n viewport: { w: window.innerWidth, h: window.innerHeight },\n });\n}\n\n/**\n * Fire a `page_view` event through the low-level client.\n *\n * Used internally by automatic page view triggers and bfcache restore\n * handling.\n */\nexport function fireManualPageView(client: TrackingClient): void {\n if (typeof window === \"undefined\") return;\n\n const currentHref = window.location.href;\n const previousFiredUrl = getLastFiredUrl();\n\n // Internal SPA referrer: the previous URL we fired a page_view for in this\n // tab. Only counts when it differs from the current URL (a same-URL re-fire\n // — e.g. React StrictMode double-mount in dev, or a bfcache restore to the\n // same page — should not produce a self-referencing referrer).\n const internalReferrer =\n previousFiredUrl !== null && previousFiredUrl !== currentHref ? previousFiredUrl : null;\n\n // External referrer: where the user came from before loading the app.\n // Used as the fallback for the very first page_view of the session.\n const externalReferrer = typeof document !== \"undefined\" ? document.referrer || null : null;\n\n const referrer = internalReferrer ?? externalReferrer;\n\n const metadata = buildPageViewMetadata(referrer);\n client.trackEvent({\n eventType: \"page_view\",\n pageUrl: currentHref,\n metadata: metadata as unknown as Record<string, unknown> | null,\n });\n\n // Only advance the in-session pointer when the URL actually changed, so a\n // same-URL re-fire never poisons the next event's referrer.\n if (currentHref !== previousFiredUrl) {\n setLastFiredUrl(currentHref);\n }\n}\n\n/**\n * Attach a back-forward cache restore listener in isolation. Used by\n * surfaces that have their own SPA detection (e.g. the Next.js provider\n * uses `usePathname`) but still want to capture bfcache restores, which\n * don't go through any router state change.\n *\n * Returns a detach function that removes the listener.\n */\nexport function attachBfcacheRestore(client: TrackingClient): () => void {\n if (typeof window === \"undefined\") return () => {};\n\n function handlePageShow(event: PageTransitionEvent): void {\n if (!event.persisted) return;\n fireManualPageView(client);\n }\n\n window.addEventListener(\"pageshow\", handlePageShow);\n return () => {\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n}\n\nexport interface AttachAutoPageViewOptions {\n /** Skip the initial fire on attach (useful when the host already fired one). */\n skipInitial?: boolean;\n}\n\n/**\n * Attach automatic page view tracking for a browser SPA.\n *\n * Patches history navigation, listens to `popstate`, fires the initial\n * page view unless disabled, and returns a detach function.\n */\nexport function attachAutoPageView(\n client: TrackingClient,\n options: AttachAutoPageViewOptions = {},\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n let lastPath = window.location.pathname + window.location.search;\n\n function maybeFire(): void {\n const current = window.location.pathname + window.location.search;\n if (current === lastPath) return;\n lastPath = current;\n fireManualPageView(client);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n // Defer one tick so the URL is settled before we read it.\n setTimeout(maybeFire, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(maybeFire, 0);\n }\n\n // bfcache restore: when the user clicks an external link and hits the\n // back button, the browser can restore the page from its back-forward\n // cache without re-running any JS lifecycles. `popstate` does NOT fire\n // for bfcache restores, but `pageshow` does, with event.persisted === true.\n // When that happens we fire a fresh page_view so the session reflects\n // the re-entry.\n function handlePageShow(event: PageTransitionEvent): void {\n if (!event.persisted) return;\n fireManualPageView(client);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", maybeFire);\n window.addEventListener(\"pageshow\", handlePageShow);\n\n if (!options.skipInitial) fireManualPageView(client);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", maybeFire);\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n}\n","// Builds the metadata payload for the sdk_heartbeat event. Called once per\n// new session to report the SDK version and registered trigger configuration\n// back to the Aranova API.\n\nimport type { SdkHeartbeatMetadata } from \"./events/sdk-heartbeat\";\nimport type { TriggerRegistryConfig } from \"./events/registry\";\nimport type { TrackingInstallSurface } from \"./types\";\n\n/**\n * Recursively serialize a value into a JSON-safe form. Converts RegExp\n * instances to their `.source` string so the trigger config can survive\n * `JSON.stringify` without losing information.\n */\nfunction serializeValue(value: unknown): unknown {\n if (value instanceof RegExp) return value.source;\n if (Array.isArray(value)) return value.map(serializeValue);\n if (value !== null && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = serializeValue(v);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Build metadata for the SDK-internal `sdk_heartbeat` event.\n *\n * The heartbeat reports package version, install surface, registered trigger\n * names, and non-empty trigger config so the dashboard can show site coverage.\n */\nexport function buildHeartbeatMetadata(\n surface: TrackingInstallSurface,\n sdkVersion: string | null,\n packageName: string | null,\n triggers: TriggerRegistryConfig | null,\n gtagIds: Record<string, string> | null = null,\n): SdkHeartbeatMetadata {\n const automaticNames = triggers ? Object.keys(triggers.automatic) : [];\n const manualNames = triggers?.manual ? Object.keys(triggers.manual) : [];\n\n // Build trigger_config: the init params per event, with RegExp values\n // converted to strings. Skip events with empty config objects.\n let triggerConfig: Record<string, Record<string, unknown>> | null = null;\n if (triggers) {\n const cfg: Record<string, Record<string, unknown>> = {};\n for (const [name, config] of Object.entries(triggers.automatic)) {\n const serialized = serializeValue(config) as Record<string, unknown>;\n if (Object.keys(serialized).length > 0) {\n cfg[name] = serialized;\n }\n }\n if (triggers.manual) {\n for (const [name, config] of Object.entries(triggers.manual)) {\n if (config === undefined) continue;\n const serialized = serializeValue(config) as Record<string, unknown>;\n if (Object.keys(serialized).length > 0) {\n cfg[name] = serialized;\n }\n }\n }\n if (Object.keys(cfg).length > 0) {\n triggerConfig = cfg;\n }\n }\n\n return {\n sdk_version: sdkVersion ?? \"unknown\",\n package_name: packageName,\n surface,\n triggers: {\n automatic: automaticNames,\n manual: manualNames,\n },\n trigger_config: triggerConfig,\n configured_gtag_ids: gtagIds,\n };\n}\n","// Tracking ingest client. Queues events, debounce-flushes them to the\n// /tracking/events endpoint, and degrades silently on errors so a broken\n// network never breaks the host site.\n\nimport { getConsentChoice } from \"./consent\";\nimport { resetPageViewState } from \"./page-view\";\nimport type { PhoneConfig } from \"./phone-field\";\nimport { captureFbc, getFbcCookie, getFbpCookie } from \"./fbq\";\nimport {\n captureTrackingParamsFromLocation,\n createEmptyTrackingParams,\n getCookieValueFromDocument,\n getTrackingParamsFromCookieReader,\n mergeTrackingParams,\n} from \"./tracking\";\nimport type { TriggerRegistryConfig } from \"./events/registry\";\nimport { buildHeartbeatMetadata } from \"./heartbeat\";\nimport { buildLandingPayloadFields, getOrCaptureLandingParams } from \"./landing\";\nimport { getOrRotateSessionId, getVisitorId } from \"./session\";\nimport type {\n TrackingClientContext,\n TrackingEnvironment,\n TrackingInstallSurface,\n TrackingParams,\n TrackingSessionUpsertPayload,\n} from \"./types\";\n\n/**\n * Default debounce window before queued events are flushed.\n */\nexport const DEFAULT_FLUSH_INTERVAL_MS = 2000;\n\n/**\n * Default queue size that triggers an immediate flush.\n */\nexport const DEFAULT_MAX_QUEUE_SIZE = 10;\n\n/**\n * Hard server-side maximum event count per request body.\n */\nexport const HARD_MAX_BATCH = 50;\n\n/**\n * Header used to authenticate public tracking ingest requests.\n */\nexport const API_KEY_HEADER = \"X-Aranova-Api-Key\";\n\n/**\n * Identity headers stamped on every ingest request. Duplicate fields already\n * present in `session.context` but survive body-parse failures so the backend\n * can attribute 422s to the offending SDK install.\n */\nexport const SDK_VERSION_HEADER = \"X-Aranova-Sdk-Version\";\nexport const SDK_PACKAGE_HEADER = \"X-Aranova-Sdk-Package\";\nexport const SDK_SURFACE_HEADER = \"X-Aranova-Sdk-Surface\";\nexport const SDK_ENVIRONMENT_HEADER = \"X-Aranova-Sdk-Environment\";\n\n/**\n * Configuration for the low-level ingest client.\n *\n * Framework packages usually create this for you through `createTracking()`.\n */\nexport interface TrackingClientConfig {\n /** Public tracking API key issued for the business. */\n apiKey: string;\n /** Tracking endpoint base URL, usually ending in `/tracking`. */\n endpoint: string;\n /** SDK surface creating this client. */\n surface: TrackingInstallSurface;\n /** Package version reported in session context and heartbeat metadata. */\n sdkVersion?: string;\n /** Package name reported in session context and heartbeat metadata. */\n packageName?: string;\n /** Trigger registry so the heartbeat can report registered events. */\n triggers?: TriggerRegistryConfig;\n /** Override the default 2s debounce window. */\n flushIntervalMs?: number;\n /** Override the default 10-event batch trigger. */\n maxQueueSize?: number;\n /** Deployment environment label reported in session context. */\n environment?: TrackingEnvironment;\n /** All active gtag IDs, keyed by label. Included in session context. */\n activeGtagIds?: Record<string, string>;\n /** When true, swallow nothing — useful for tests. */\n debug?: boolean;\n /** Phone-field config, carried for parity; the React hook reads it via context. */\n phone?: PhoneConfig;\n}\n\n/**\n * Input accepted by the low-level stringly-typed client.\n *\n * Prefer the typed `trackEvent(eventName, metadata)` facade exposed by\n * `useTracking()` in React/Next integrations.\n */\nexport interface TrackEventInput {\n /** Event name to enqueue. */\n eventType: string;\n /** URL associated with the event. Defaults to the current page URL. */\n pageUrl?: string | null;\n /** Event-specific metadata. */\n metadata?: Record<string, unknown> | null;\n /** Timestamp override. Defaults to queue time. */\n occurredAt?: Date | string | null;\n}\n\ninterface QueuedEvent {\n event_type: string;\n page_url: string | null;\n metadata: Record<string, unknown> | null;\n occurred_at: string | null;\n}\n\n/**\n * Low-level tracking client responsible for queueing and flushing events.\n */\nexport interface TrackingClient {\n /** Enqueue an event for batched delivery. */\n trackEvent: (input: TrackEventInput) => void;\n /** Flush queued events immediately (fetch, non-keepalive). */\n flush: () => Promise<void>;\n /**\n * Flush queued events through the keepalive transport so the request\n * survives document unload. Use from `pagehide`/`visibilitychange:hidden`\n * handlers — a plain `flush()` there is aborted by the browser on unload.\n */\n flushBeacon: () => void;\n /** Return the current rolling session id. */\n getSessionId: () => string;\n /** Return the persistent visitor id. */\n getVisitorId: () => string;\n /** Remove timers/listeners and prevent future flushes. */\n destroy: () => void;\n}\n\ninterface IngestRequestBody {\n session: TrackingSessionUpsertPayload;\n events: Array<{\n event_type: string;\n page_url: string | null;\n metadata: Record<string, unknown> | null;\n occurred_at: string | null;\n }>;\n}\n\nfunction buildContext(\n surface: TrackingInstallSurface,\n sdkVersion: string | null,\n packageName: string | null,\n environment: TrackingEnvironment,\n activeGtagIds: Record<string, string> | null,\n): TrackingClientContext {\n return {\n surface,\n sdk_version: sdkVersion,\n package_name: packageName,\n site_origin: typeof window === \"undefined\" ? null : window.location.origin,\n page_title: typeof document === \"undefined\" ? null : document.title || null,\n referrer: typeof document === \"undefined\" ? null : document.referrer || null,\n environment,\n active_gtag_ids: activeGtagIds,\n };\n}\n\nfunction readTrackingParams(): TrackingParams {\n if (typeof window === \"undefined\") return createEmptyTrackingParams();\n // Capture from URL on every read so the first event in a session reflects the\n // landing-page params even if the cookie helper hasn't run yet.\n try {\n captureTrackingParamsFromLocation();\n } catch {\n // ignore\n }\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n\nfunction consentSnapshot(): Record<string, unknown> | null {\n try {\n // Effective consent + provenance so the dashboard can tell default-granted\n // (opt-out model, no interaction) apart from an explicit choice.\n const choice = getConsentChoice();\n return {\n state: choice.state,\n source: choice.source,\n updated_at: choice.updatedAt,\n expires_at: choice.expiresAt,\n };\n } catch {\n return null;\n }\n}\n\ninterface IdentityHeaders {\n sdkVersion: string;\n packageName: string;\n surface: string;\n environment: string;\n}\n\nasync function postWithFetch(\n url: string,\n body: string,\n apiKey: string,\n identity: IdentityHeaders,\n keepalive: boolean,\n): Promise<void> {\n if (typeof fetch !== \"function\") return;\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n [API_KEY_HEADER]: apiKey,\n [SDK_VERSION_HEADER]: identity.sdkVersion,\n [SDK_PACKAGE_HEADER]: identity.packageName,\n [SDK_SURFACE_HEADER]: identity.surface,\n [SDK_ENVIRONMENT_HEADER]: identity.environment,\n },\n body,\n keepalive,\n // CORS is open on the tracking endpoint; never send cookies.\n credentials: \"omit\",\n mode: \"cors\",\n });\n } catch {\n // fire-and-forget — never throw to the host site\n }\n}\n\nlet globalClient: TrackingClient | null = null;\nlet globalClientKey: string | null = null;\n\nfunction clientConfigKey(config: TrackingClientConfig): string {\n return `${config.apiKey}@${config.endpoint}#${config.surface}`;\n}\n\n/**\n * Return a page-level singleton tracking client. Creating the client anew on\n * every component mount is wrong — React StrictMode double-mounts dev-only,\n * and destroying+recreating the client between the cleanup and re-run strips\n * away the pushState patch that SPA auto page view relies on. A singleton\n * survives all of that: the client lives for the entire page, and providers\n * just attach/detach auto page view against it.\n *\n * If `apiKey` / `endpoint` / `surface` change between calls, the previous\n * singleton is destroyed and a new one replaces it. This covers hot-config\n * changes without leaking state.\n */\nexport function getOrCreateTrackingClient(config: TrackingClientConfig): TrackingClient {\n const key = clientConfigKey(config);\n if (globalClient !== null && globalClientKey === key) {\n return globalClient;\n }\n if (globalClient !== null) {\n globalClient.destroy();\n }\n globalClient = createTrackingClient(config);\n globalClientKey = key;\n return globalClient;\n}\n\n/**\n * Tear down the singleton if any. Primarily an escape hatch for tests where\n * each test should see a fresh client; production code rarely needs this.\n * Also clears the in-session SPA referrer so the next test starts with a\n * fresh referrer chain.\n */\nexport function resetGlobalTrackingClient(): void {\n if (globalClient !== null) {\n globalClient.destroy();\n }\n globalClient = null;\n globalClientKey = null;\n resetPageViewState();\n}\n\n/**\n * Create a low-level ingest client.\n *\n * The client queues events, debounces network flushes, sends an SDK heartbeat\n * once per new session, and swallows network errors so analytics never break\n * the host site.\n */\nexport function createTrackingClient(config: TrackingClientConfig): TrackingClient {\n const flushIntervalMs = config.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;\n const maxQueueSize = Math.min(config.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE, HARD_MAX_BATCH);\n const sdkVersion = config.sdkVersion ?? null;\n const packageName = config.packageName ?? null;\n // Default to 'production' so the wire payload always carries a valid enum\n // value. Sending null would fail the backend's strict enum validation.\n const environment: TrackingEnvironment = config.environment ?? \"production\";\n const activeGtagIds = config.activeGtagIds ?? null;\n const endpointBase = config.endpoint.replace(/\\/$/, \"\");\n const eventsUrl = `${endpointBase}/events`;\n const identityHeaders: IdentityHeaders = {\n sdkVersion: sdkVersion ?? \"\",\n packageName: packageName ?? \"\",\n surface: config.surface,\n environment,\n };\n\n let queue: QueuedEvent[] = [];\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n let firstPage: string | null = null;\n // Attribution captured synchronously at client creation (before any SPA router\n // can strip the query string). Merged into every session payload as a fallback\n // so a blocked-cookie webview or a stripped URL still attributes.\n let initialParams = createEmptyTrackingParams();\n let destroyed = false;\n\n // Initialize identity early so the first POST has stable values.\n const visitorId = getVisitorId();\n const initialSession = getOrRotateSessionId();\n let sessionId = initialSession.id;\n\n if (typeof window !== \"undefined\") {\n firstPage = window.location.href;\n try {\n initialParams = captureTrackingParamsFromLocation();\n } catch {\n // ignore — never break the host site\n }\n // Pin this session's LANDING params now, before any SPA router strips the\n // query string (reuses the stored record when the session already has one).\n getOrCaptureLandingParams(sessionId);\n try {\n captureFbc();\n } catch {\n // ignore\n }\n }\n\n // Queue an sdk_heartbeat event at the start of every new session.\n function enqueueHeartbeat(): void {\n const metadata = buildHeartbeatMetadata(\n config.surface,\n sdkVersion,\n packageName,\n config.triggers ?? null,\n activeGtagIds,\n );\n queue.push({\n event_type: \"sdk_heartbeat\",\n page_url: typeof window === \"undefined\" ? null : window.location.href,\n metadata: metadata as unknown as Record<string, unknown>,\n occurred_at: new Date().toISOString(),\n });\n }\n\n if (initialSession.isNew) {\n enqueueHeartbeat();\n }\n\n function buildSessionPayload(): TrackingSessionUpsertPayload {\n const rotated = getOrRotateSessionId();\n if (rotated.isNew && rotated.id !== sessionId) {\n // Session rotated mid-page (idle > 30min then user returned).\n enqueueHeartbeat();\n }\n sessionId = rotated.id;\n // Prefer the live cookie/localStorage read; fall back to the init-time\n // snapshot (covers a webview that blocked the cookie AND a router that\n // already stripped the landing URL by flush time).\n const params = mergeTrackingParams(readTrackingParams(), initialParams);\n const context = buildContext(\n config.surface,\n sdkVersion,\n packageName,\n environment,\n activeGtagIds,\n );\n return {\n session_id: sessionId,\n visitor_id: visitorId,\n gclid: params.gclid,\n fbclid: params.fbclid,\n fbc: getFbcCookie(),\n fbp: getFbpCookie(),\n utm_source: params.utm_source,\n utm_medium: params.utm_medium,\n utm_campaign: params.utm_campaign,\n utm_term: params.utm_term,\n utm_content: params.utm_content,\n // Landing params for the CURRENT session id — captured on the spot when\n // the session just rotated (the current URL is the rotated session's\n // landing), reused from the stored record otherwise. Keys are omitted\n // entirely when the landing isn't observable (SSR).\n ...buildLandingPayloadFields(sessionId),\n first_page: firstPage,\n consent_state: consentSnapshot(),\n context,\n };\n }\n\n function scheduleFlush(): void {\n if (flushTimer !== null || destroyed) return;\n flushTimer = setTimeout(() => {\n flushTimer = null;\n void flush();\n }, flushIntervalMs);\n }\n\n function clearScheduledFlush(): void {\n if (flushTimer !== null) {\n clearTimeout(flushTimer);\n flushTimer = null;\n }\n }\n\n async function flush(): Promise<void> {\n if (queue.length === 0) return;\n\n const events = queue.slice(0, HARD_MAX_BATCH);\n queue = queue.slice(events.length);\n clearScheduledFlush();\n\n const body: IngestRequestBody = {\n session: buildSessionPayload(),\n events,\n };\n\n const serialized = JSON.stringify(body);\n\n // Prefer fetch + keepalive for better error visibility. sendBeacon is the\n // pagehide fallback path because it survives navigation away.\n await postWithFetch(eventsUrl, serialized, config.apiKey, identityHeaders, false);\n }\n\n function trackEvent(input: TrackEventInput): void {\n if (destroyed) return;\n if (!input || typeof input.eventType !== \"string\" || input.eventType.length === 0) return;\n\n const occurredAt =\n input.occurredAt instanceof Date\n ? input.occurredAt.toISOString()\n : typeof input.occurredAt === \"string\"\n ? input.occurredAt\n : new Date().toISOString();\n\n queue.push({\n event_type: input.eventType,\n page_url: input.pageUrl ?? (typeof window === \"undefined\" ? null : window.location.href),\n metadata: input.metadata ?? null,\n occurred_at: occurredAt,\n });\n\n if (queue.length >= maxQueueSize) {\n void flush();\n } else {\n scheduleFlush();\n }\n }\n\n function flushOnUnload(): void {\n if (queue.length === 0) return;\n const events = queue.slice(0, HARD_MAX_BATCH);\n queue = queue.slice(events.length);\n clearScheduledFlush();\n\n const body: IngestRequestBody = {\n session: buildSessionPayload(),\n events,\n };\n const serialized = JSON.stringify(body);\n void postWithFetch(eventsUrl, serialized, config.apiKey, identityHeaders, true);\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"pagehide\", flushOnUnload);\n window.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") flushOnUnload();\n });\n }\n\n return {\n trackEvent,\n flush,\n flushBeacon: flushOnUnload,\n getSessionId: () => sessionId,\n getVisitorId: () => visitorId,\n destroy: () => {\n destroyed = true;\n // Fire any pending events through the keepalive path before tearing\n // down. Critical for React StrictMode in dev, where the provider's\n // first mount is immediately unmounted and its 2s debounce would\n // otherwise drop the initial page_view on the floor. Uses fetch\n // keepalive so the request survives the component tearing down.\n if (queue.length > 0) {\n flushOnUnload();\n }\n clearScheduledFlush();\n queue = [];\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"pagehide\", flushOnUnload);\n }\n },\n };\n}\n","import { z } from \"zod\";\n\n/**\n * Metadata for a manually fired `cta_click` event.\n *\n * Use this for non-phone calls to action such as directions, appointment\n * buttons, downloads, or external booking links.\n */\nexport const ctaClickMetadataSchema = z\n .object({\n cta_name: z.string(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n section: z.string().nullable().optional(),\n destination_url: z.string().nullable().optional(),\n // Set by auto-capture (and available to manual callers): the link target\n // and a short element descriptor (tag#id) for tying clicks to specific UI.\n href: z.string().nullable().optional(),\n element: z.string().nullable().optional(),\n })\n .strict();\n\nexport type CtaClickMetadata = z.infer<typeof ctaClickMetadataSchema>;\n\n/**\n * Registration config for `cta_click`.\n *\n * The event stays manually fireable; `autoCapture` additionally attaches a\n * delegated click listener that fires it for any element matching `selector`\n * (default `[data-aranova-cta]`) — tag your CTAs, get analytics for free.\n */\nexport const ctaClickConfigSchema = z\n .object({\n autoCapture: z\n .object({\n selector: z.string().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\nexport type CtaClickConfig = z.infer<typeof ctaClickConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Registered trigger names reported by the SDK heartbeat.\n */\nexport const sdkHeartbeatTriggersSchema = z\n .object({\n automatic: z.array(z.string()),\n manual: z.array(z.string()),\n })\n .strict();\n\n/**\n * Metadata for the SDK-internal `sdk_heartbeat` event.\n *\n * The SDK fires this once per new session so the dashboard can show which SDK\n * version, install surface, and trigger registry a client site is running.\n * Consumers do not manually register or fire this event.\n */\nexport const sdkHeartbeatMetadataSchema = z\n .object({\n sdk_version: z.string(),\n package_name: z.string().nullable(),\n surface: z.enum([\"next\", \"react\", \"script\"]),\n triggers: sdkHeartbeatTriggersSchema,\n trigger_config: z.record(z.string(), z.record(z.string(), z.unknown())).nullable().optional(),\n configured_gtag_ids: z.record(z.string(), z.string()).nullable().optional(),\n })\n .strict();\n\nexport type SdkHeartbeatMetadata = z.infer<typeof sdkHeartbeatMetadataSchema>;\n\n/**\n * Internal registration config for `sdk_heartbeat`.\n *\n * This event has no consumer-facing options.\n */\nexport const sdkHeartbeatConfigSchema = z.object({}).strict();\nexport type SdkHeartbeatConfig = z.infer<typeof sdkHeartbeatConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `form_start` event.\n *\n * The SDK emits this once per form when the visitor first focuses a field.\n */\nexport const formStartMetadataSchema = z\n .object({\n form: z\n .object({\n id: z.string(),\n action: z.string().nullable(),\n })\n .strict(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type FormStartMetadata = z.infer<typeof formStartMetadataSchema>;\n\n/**\n * Registration config for automatic `form_start`.\n *\n * Use `selector` to narrow which forms can trigger the event. When omitted,\n * the SDK observes all `<form>` elements.\n */\nexport const formStartConfigSchema = z\n .object({\n selector: z.string().optional(),\n })\n .strict();\n\nexport type FormStartConfig = z.infer<typeof formStartConfigSchema>;\n","import { z } from \"zod\";\n\n// form_submit is manual — the SDK never auto-fires this. Consumer code calls\n// `tracking.trackEvent('form_submit', { form, page })` from their own submit\n// handler. Registering it enables the type-level permission; omitting it\n// turns manual calls into a compile error.\n//\n// The optional `fields` array captures submitted form field metadata and JSON\n// values. Consumers explicitly build the fields array themselves so they\n// control exactly what is sent.\n\n/**\n * JSON-serializable value accepted by `form_submit.fields[].value`.\n *\n * This intentionally excludes `undefined`, functions, symbols, `Date`\n * instances, and non-finite numbers. Values are stored in PostgreSQL JSONB, so\n * consumers should send only data that has a stable JSON representation.\n */\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport const jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(jsonValueSchema),\n ]),\n);\n\n/**\n * Metadata for a manually fired `form_submit` event.\n *\n * Register the event with `manual: { form_submit: {} }`, then call\n * `trackEvent('form_submit', metadata)` from the host site's submit handler.\n *\n * `fields` is optional. If present, each field value must be JSON-serializable\n * and should be explicitly allowlisted by the integration. Do not send names,\n * emails, visitor phone numbers, addresses, payment data, medical details,\n * passwords, file contents, or free-text messages.\n *\n * @example\n * ```ts\n * tracking.trackEvent('form_submit', {\n * form: {\n * id: 'lead-form',\n * action: '/api/lead',\n * fields: [\n * {\n * name: 'service_interest',\n * type: 'select',\n * label: 'Service interest',\n * value: 'teeth_whitening',\n * },\n * ],\n * },\n * page: { path: window.location.pathname },\n * });\n * ```\n */\nexport const formSubmitMetadataSchema = z\n .object({\n form: z\n .object({\n id: z.string(),\n action: z.string().nullable(),\n fields: z\n .array(\n z\n .object({\n name: z.string(),\n type: z.string(),\n label: z.string().nullable(),\n value: jsonValueSchema,\n })\n .strict(),\n )\n .optional(),\n })\n .strict(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type FormSubmitMetadata = z.infer<typeof formSubmitMetadataSchema>;\n\n/**\n * Registration config for `form_submit`.\n *\n * This event is manual-only and currently has no registration options. The\n * empty object enables typed `trackEvent('form_submit', ...)` calls.\n */\nexport const formSubmitConfigSchema = z.object({}).strict();\nexport type FormSubmitConfig = z.infer<typeof formSubmitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `multi_page_session` event.\n *\n * Fired when the visitor reaches the configured distinct-page threshold in a\n * single tracking session.\n */\nexport const multiPageSessionMetadataSchema = z\n .object({\n page_count: z.number().int().min(2),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type MultiPageSessionMetadata = z.infer<typeof multiPageSessionMetadataSchema>;\n\n/**\n * Registration config for automatic `multi_page_session`.\n */\nexport const multiPageSessionConfigSchema = z\n .object({\n pageThreshold: z.number().int().min(2),\n })\n .strict();\n\nexport type MultiPageSessionConfig = z.infer<typeof multiPageSessionConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `page_exit` event.\n *\n * Fired when the user leaves a page (SPA navigation away, tab hidden, or\n * pagehide). `dwell_ms` is the ACTIVE (visible) time spent on the page segment\n * being closed — hidden time never counts, matching `time_on_site` semantics.\n * A page revisited after being hidden emits another `page_exit` for the next\n * visible segment, so summing `dwell_ms` per page/session yields total active\n * dwell without double counting.\n */\nexport const pageExitMetadataSchema = z\n .object({\n dwell_ms: z.number().int().min(0),\n // null = left without any scroll signal; floor is 0 so a valid 0% is never\n // rejected (a single bad field 422s the whole keepalive beacon batch).\n max_scroll_percent: z.number().int().min(0).max(100).nullable(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type PageExitMetadata = z.infer<typeof pageExitMetadataSchema>;\n\n/**\n * Registration config for automatic `page_exit`.\n *\n * SDK-internal: attached unconditionally (like `sdk_heartbeat`), so there are\n * no registration options.\n */\nexport const pageExitConfigSchema = z.object({}).strict();\nexport type PageExitConfig = z.infer<typeof pageExitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for a manually fired `phone_click` event.\n *\n * `phone_number` should be the business phone number from the clicked `tel:`\n * link, not a visitor-entered phone number. `section` can distinguish header,\n * footer, hero, or contact-page links.\n */\nexport const phoneClickMetadataSchema = z\n .object({\n phone_number: z.string(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n section: z.string().nullable().optional(),\n })\n .strict();\n\nexport type PhoneClickMetadata = z.infer<typeof phoneClickMetadataSchema>;\n\n/**\n * Registration config for `phone_click`.\n *\n * This event is manual-only and currently has no registration options.\n */\nexport const phoneClickConfigSchema = z.object({}).strict();\nexport type PhoneClickConfig = z.infer<typeof phoneClickConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `scroll_depth` event.\n *\n * Fired once per configured threshold per page.\n */\nexport const scrollDepthMetadataSchema = z\n .object({\n depth_percent: z.number().int().min(1).max(100),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type ScrollDepthMetadata = z.infer<typeof scrollDepthMetadataSchema>;\n\n/**\n * Registration config for automatic `scroll_depth`.\n *\n * `thresholds` are integer percentages from 1 to 100.\n */\nexport const scrollDepthConfigSchema = z\n .object({\n thresholds: z.array(z.number().int().min(1).max(100)).min(1),\n })\n .strict();\n\nexport type ScrollDepthConfig = z.infer<typeof scrollDepthConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Canonical page intent names supported by `specific_page_visit`.\n */\nexport const SPECIFIC_PAGE_NAMES = [\n \"contact_page\",\n \"about_page\",\n \"services_page\",\n \"booking_page\",\n \"location_page\",\n \"pricing_page\",\n \"faq_page\",\n \"testimonials_page\",\n] as const;\n\nexport type SpecificPageName = (typeof SPECIFIC_PAGE_NAMES)[number];\n\nexport const specificPageNameSchema = z.enum(SPECIFIC_PAGE_NAMES);\n\n/**\n * Metadata for the automatic `specific_page_visit` event.\n *\n * The SDK emits this when the current pathname matches one of the configured\n * named page patterns.\n */\nexport const specificPageVisitMetadataSchema = z\n .object({\n page_name: specificPageNameSchema,\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type SpecificPageVisitMetadata = z.infer<typeof specificPageVisitMetadataSchema>;\n\n/**\n * Registration config for automatic `specific_page_visit`.\n *\n * Each page entry pairs a semantic `name` with a `RegExp` that matches the\n * pathname. Use this instead of hard-coding path regexes downstream.\n */\nexport const specificPageVisitConfigSchema = z\n .object({\n pages: z\n .array(\n z\n .object({\n name: specificPageNameSchema,\n pathPattern: z.custom<RegExp>((value) => value instanceof RegExp, {\n message: \"pathPattern must be a RegExp\",\n }),\n })\n .strict(),\n )\n .min(1),\n })\n .strict();\n\nexport type SpecificPageVisitConfig = z.infer<typeof specificPageVisitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `time_on_site` event.\n *\n * The SDK starts a visibility-aware timer and fires once when visible\n * engagement crosses the configured threshold.\n */\nexport const timeOnSiteMetadataSchema = z\n .object({\n duration_ms: z.number().int().nonnegative(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type TimeOnSiteMetadata = z.infer<typeof timeOnSiteMetadataSchema>;\n\n/**\n * Registration config for automatic `time_on_site`.\n */\nexport const timeOnSiteConfigSchema = z\n .object({\n thresholdSeconds: z.number().int().positive(),\n })\n .strict();\nexport type TimeOnSiteConfig = z.infer<typeof timeOnSiteConfigSchema>;\n","import type { z } from \"zod\";\n\nimport {\n ctaClickConfigSchema,\n ctaClickMetadataSchema,\n type CtaClickConfig,\n type CtaClickMetadata,\n} from \"./cta-click\";\nimport {\n sdkHeartbeatConfigSchema,\n sdkHeartbeatMetadataSchema,\n type SdkHeartbeatConfig,\n type SdkHeartbeatMetadata,\n} from \"./sdk-heartbeat\";\nimport {\n formStartConfigSchema,\n formStartMetadataSchema,\n type FormStartConfig,\n type FormStartMetadata,\n} from \"./form-start\";\nimport {\n formSubmitConfigSchema,\n formSubmitMetadataSchema,\n type FormSubmitConfig,\n type FormSubmitMetadata,\n} from \"./form-submit\";\nimport {\n multiPageSessionConfigSchema,\n multiPageSessionMetadataSchema,\n type MultiPageSessionConfig,\n type MultiPageSessionMetadata,\n} from \"./multi-page-session\";\nimport {\n pageExitConfigSchema,\n pageExitMetadataSchema,\n type PageExitConfig,\n type PageExitMetadata,\n} from \"./page-exit\";\nimport {\n pageViewConfigSchema,\n pageViewMetadataSchema,\n type PageViewConfig,\n type PageViewMetadata,\n} from \"./page-view\";\nimport {\n phoneClickConfigSchema,\n phoneClickMetadataSchema,\n type PhoneClickConfig,\n type PhoneClickMetadata,\n} from \"./phone-click\";\nimport {\n scrollDepthConfigSchema,\n scrollDepthMetadataSchema,\n type ScrollDepthConfig,\n type ScrollDepthMetadata,\n} from \"./scroll-depth\";\nimport {\n specificPageVisitConfigSchema,\n specificPageVisitMetadataSchema,\n type SpecificPageVisitConfig,\n type SpecificPageVisitMetadata,\n} from \"./specific-page-visit\";\nimport {\n timeOnSiteConfigSchema,\n timeOnSiteMetadataSchema,\n type TimeOnSiteConfig,\n type TimeOnSiteMetadata,\n} from \"./time-on-site\";\n\n// Event kind — automatic events are fired by the SDK itself when their\n// client-side signal fires (page_view on navigation, time_on_site on timer,\n// etc). Manual events are only fireable via explicit consumer code.\nexport type EventKind = \"automatic\" | \"manual\";\n\n// The registry is the single client-side source of truth for \"what events\n// exist, what shape does their metadata take, and what kind are they\". The\n// backend mirror lives in apps/api/src/schemas/tracking_events.py and is\n// kept in sync via the drift test in apps/api/tests/test_event_schema_drift.py.\nexport const EVENT_REGISTRY = {\n // --- automatic triggers ---\n page_view: {\n kind: \"automatic\",\n metadataSchema: pageViewMetadataSchema,\n configSchema: pageViewConfigSchema,\n },\n time_on_site: {\n kind: \"automatic\",\n metadataSchema: timeOnSiteMetadataSchema,\n configSchema: timeOnSiteConfigSchema,\n },\n specific_page_visit: {\n kind: \"automatic\",\n metadataSchema: specificPageVisitMetadataSchema,\n configSchema: specificPageVisitConfigSchema,\n },\n scroll_depth: {\n kind: \"automatic\",\n metadataSchema: scrollDepthMetadataSchema,\n configSchema: scrollDepthConfigSchema,\n },\n multi_page_session: {\n kind: \"automatic\",\n metadataSchema: multiPageSessionMetadataSchema,\n configSchema: multiPageSessionConfigSchema,\n },\n form_start: {\n kind: \"automatic\",\n metadataSchema: formStartMetadataSchema,\n configSchema: formStartConfigSchema,\n },\n // --- SDK-internal automatic (not consumer-configurable) ---\n sdk_heartbeat: {\n kind: \"automatic\",\n metadataSchema: sdkHeartbeatMetadataSchema,\n configSchema: sdkHeartbeatConfigSchema,\n },\n page_exit: {\n kind: \"automatic\",\n metadataSchema: pageExitMetadataSchema,\n configSchema: pageExitConfigSchema,\n },\n // --- manual triggers ---\n form_submit: {\n kind: \"manual\",\n metadataSchema: formSubmitMetadataSchema,\n configSchema: formSubmitConfigSchema,\n },\n phone_click: {\n kind: \"manual\",\n metadataSchema: phoneClickMetadataSchema,\n configSchema: phoneClickConfigSchema,\n },\n cta_click: {\n kind: \"manual\",\n metadataSchema: ctaClickMetadataSchema,\n configSchema: ctaClickConfigSchema,\n },\n} as const;\n\n/**\n * Name of any event known to the tracking SDK.\n */\nexport type EventName = keyof typeof EVENT_REGISTRY;\n\n/**\n * Event names that are fired by the SDK when their configured signal occurs.\n *\n * Automatic events are not accepted by the typed `trackEvent()` API.\n */\nexport type AutomaticEventName = {\n [K in EventName]: (typeof EVENT_REGISTRY)[K][\"kind\"] extends \"automatic\" ? K : never;\n}[EventName];\n\n/**\n * Event names that consumer code can fire manually after registering them.\n */\nexport type ManualEventName = {\n [K in EventName]: (typeof EVENT_REGISTRY)[K][\"kind\"] extends \"manual\" ? K : never;\n}[EventName];\n\n// Map an event name to its explicit metadata / config TS type. We pull the\n// inferred types directly from the per-event files rather than deriving\n// via `z.infer<typeof EVENT_REGISTRY[K]['metadataSchema']>` so that error\n// messages name the event-specific type (PageViewMetadata, not an\n// anonymous zod inference).\ntype MetadataByName = {\n page_view: PageViewMetadata;\n time_on_site: TimeOnSiteMetadata;\n specific_page_visit: SpecificPageVisitMetadata;\n scroll_depth: ScrollDepthMetadata;\n multi_page_session: MultiPageSessionMetadata;\n form_start: FormStartMetadata;\n sdk_heartbeat: SdkHeartbeatMetadata;\n page_exit: PageExitMetadata;\n form_submit: FormSubmitMetadata;\n phone_click: PhoneClickMetadata;\n cta_click: CtaClickMetadata;\n};\n\ntype ConfigByName = {\n page_view: PageViewConfig;\n time_on_site: TimeOnSiteConfig;\n specific_page_visit: SpecificPageVisitConfig;\n scroll_depth: ScrollDepthConfig;\n multi_page_session: MultiPageSessionConfig;\n form_start: FormStartConfig;\n sdk_heartbeat: SdkHeartbeatConfig;\n page_exit: PageExitConfig;\n form_submit: FormSubmitConfig;\n phone_click: PhoneClickConfig;\n cta_click: CtaClickConfig;\n};\n\n/**\n * Metadata payload type for a specific tracking event.\n *\n * @example\n * ```ts\n * type SubmitMetadata = EventMetadata<'form_submit'>;\n * ```\n */\nexport type EventMetadata<K extends EventName> = MetadataByName[K];\n\n/**\n * Trigger registration config type for a specific tracking event.\n */\nexport type EventConfig<K extends EventName> = ConfigByName[K];\n\n// Runtime constant arrays for iteration at consumer / factory time.\n/**\n * Runtime list of automatic event names.\n */\nexport const ALL_AUTOMATIC_EVENT_NAMES: readonly AutomaticEventName[] = (\n Object.entries(EVENT_REGISTRY) as Array<[EventName, (typeof EVENT_REGISTRY)[EventName]]>\n)\n .filter(([, def]) => def.kind === \"automatic\")\n .map(([name]) => name) as AutomaticEventName[];\n\n/**\n * Runtime list of manual event names.\n */\nexport const ALL_MANUAL_EVENT_NAMES: readonly ManualEventName[] = (\n Object.entries(EVENT_REGISTRY) as Array<[EventName, (typeof EVENT_REGISTRY)[EventName]]>\n)\n .filter(([, def]) => def.kind === \"manual\")\n .map(([name]) => name) as ManualEventName[];\n\n/**\n * Trigger registry passed to `createTracking({ triggers })`.\n *\n * `automatic.page_view` is required because every install should capture page\n * views. Other automatic events are opt-in. Manual events must be registered\n * here before the typed client accepts `trackEvent()` calls for them.\n *\n * @example\n * ```ts\n * createTracking({\n * apiKey,\n * endpoint,\n * triggers: {\n * automatic: {\n * page_view: {},\n * time_on_site: { thresholdSeconds: 60 },\n * },\n * manual: {\n * form_submit: {},\n * phone_click: {},\n * },\n * },\n * });\n * ```\n */\nexport type TriggerRegistryConfig = {\n automatic: {\n page_view: EventConfig<\"page_view\">;\n } & Partial<{\n time_on_site: EventConfig<\"time_on_site\">;\n specific_page_visit: EventConfig<\"specific_page_visit\">;\n scroll_depth: EventConfig<\"scroll_depth\">;\n multi_page_session: EventConfig<\"multi_page_session\">;\n form_start: EventConfig<\"form_start\">;\n }>;\n manual?: Partial<{\n form_submit: EventConfig<\"form_submit\">;\n phone_click: EventConfig<\"phone_click\">;\n cta_click: EventConfig<\"cta_click\">;\n }>;\n};\n\n/**\n * Manual event names registered in a concrete trigger registry.\n *\n * Used by `TypedTrackingClient` so `trackEvent()` only accepts events the\n * consumer explicitly enabled.\n */\nexport type RegisteredManualEvents<TRegistry extends TriggerRegistryConfig> = Extract<\n keyof NonNullable<TRegistry[\"manual\"]>,\n ManualEventName\n>;\n\n/**\n * Automatic event names registered in a concrete trigger registry.\n */\nexport type RegisteredAutomaticEvents<TRegistry extends TriggerRegistryConfig> = Extract<\n keyof TRegistry[\"automatic\"],\n AutomaticEventName\n>;\n\n/**\n * Discriminated union of valid manual tracking calls for a registry.\n */\nexport type TrackableEvent<TRegistry extends TriggerRegistryConfig> = {\n [K in RegisteredManualEvents<TRegistry>]: {\n eventType: K;\n metadata: EventMetadata<K>;\n };\n}[RegisteredManualEvents<TRegistry>];\n\n// Runtime helper: look up a schema pair by name. Cast through `unknown`\n// because the registry is `as const` and TS loses the specific schema type\n// when indexing via a dynamic key.\nexport function getEventDefinition(name: EventName): {\n kind: EventKind;\n metadataSchema: z.ZodTypeAny;\n configSchema: z.ZodTypeAny;\n} {\n return EVENT_REGISTRY[name] as unknown as {\n kind: EventKind;\n metadataSchema: z.ZodTypeAny;\n configSchema: z.ZodTypeAny;\n };\n}\n","// time_on_site automatic trigger.\n//\n// Fires a single `time_on_site` event once the user has been actively\n// engaged with the tab for at least `thresholdSeconds`. The timer is\n// visibility-aware — when the tab goes hidden (other tab focused, app\n// backgrounded) we pause the counter, and resume when it comes back. This\n// stops the \"user opened the tab in the background and walked away\"\n// scenario from artificially inflating engagement.\n//\n// The event fires at most once per page load.\n\nimport type { TimeOnSiteConfig } from \"../events/time-on-site\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `time_on_site` trigger.\n *\n * Starts a visibility-aware timer and returns a detach function that clears\n * timers/listeners.\n */\nexport function attachTimeOnSite(client: TrackingClient, config: TimeOnSiteConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const thresholdMs = config.thresholdSeconds * 1000;\n let accumulatedMs = 0;\n let activeSince: number | null = document.visibilityState === \"visible\" ? Date.now() : null;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let fired = false;\n\n function fire(): void {\n if (fired) return;\n fired = true;\n client.trackEvent({\n eventType: \"time_on_site\",\n metadata: {\n duration_ms: thresholdMs,\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n function scheduleNext(): void {\n if (fired || activeSince === null) return;\n const remaining = thresholdMs - accumulatedMs;\n if (remaining <= 0) {\n fire();\n return;\n }\n timer = setTimeout(fire, remaining);\n }\n\n function clearTimer(): void {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n }\n\n function onVisibilityChange(): void {\n if (fired) return;\n if (document.visibilityState === \"hidden\") {\n // Pause — drain the current interval into accumulatedMs.\n if (activeSince !== null) {\n accumulatedMs += Date.now() - activeSince;\n activeSince = null;\n }\n clearTimer();\n } else {\n // Resume.\n activeSince = Date.now();\n scheduleNext();\n }\n }\n\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n scheduleNext();\n\n return () => {\n clearTimer();\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n };\n}\n","// specific_page_visit automatic trigger.\n//\n// Fires whenever the current path matches one of the consumer-supplied\n// patterns. Each pattern has a strongly typed page_name from the\n// SpecificPageName union. Dedupes so that repeated navigations to the same\n// (page_name, path) pair only fire once per page lifecycle.\n//\n// Replaces the old contact_page_visit trigger with multi-pattern support.\n\nimport type { SpecificPageVisitConfig } from \"../events/specific-page-visit\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `specific_page_visit` trigger.\n *\n * Watches navigation changes and fires when the current pathname matches a\n * configured named page pattern.\n */\nexport function attachSpecificPageVisit(\n client: TrackingClient,\n config: SpecificPageVisitConfig,\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n const { pages } = config;\n const firedSet = new Set<string>();\n\n function check(): void {\n const path = window.location.pathname;\n for (const { name, pathPattern } of pages) {\n pathPattern.lastIndex = 0; // Reset in case consumer passed /g or /y flag\n if (!pathPattern.test(path)) continue;\n const key = `${name}:${path}`;\n if (firedSet.has(key)) continue;\n firedSet.add(key);\n client.trackEvent({\n eventType: \"specific_page_visit\",\n metadata: { page_name: name, page: { path } } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(check, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(check, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", check);\n\n // Fire once on attach in case the current path already matches.\n check();\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n };\n}\n","// scroll_depth automatic trigger.\n//\n// Installs a requestAnimationFrame-throttled scroll listener and fires once\n// per configured threshold per page. Resets the fired set on SPA navigation\n// when the pathname actually changes (pushState / popstate). replaceState\n// is ignored since it's commonly used for query param updates without a\n// real page transition.\n\nimport type { ScrollDepthConfig } from \"../events/scroll-depth\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `scroll_depth` trigger.\n *\n * Installs a throttled scroll listener, fires each configured threshold once\n * per page, and returns a detach function.\n */\nexport function attachScrollDepth(client: TrackingClient, config: ScrollDepthConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const thresholds = new Set(config.thresholds);\n let firedForPath = new Set<number>();\n let currentPath = window.location.pathname;\n let rafId: number | null = null;\n\n function getScrollPercent(): number {\n const doc = document.documentElement;\n const scrollTop = window.scrollY || doc.scrollTop;\n const scrollHeight = doc.scrollHeight;\n const clientHeight = doc.clientHeight;\n if (scrollHeight <= clientHeight) return 100;\n return Math.round(((scrollTop + clientHeight) / scrollHeight) * 100);\n }\n\n function checkThresholds(): void {\n const percent = getScrollPercent();\n for (const threshold of thresholds) {\n if (percent >= threshold && !firedForPath.has(threshold)) {\n firedForPath.add(threshold);\n client.trackEvent({\n eventType: \"scroll_depth\",\n metadata: {\n depth_percent: threshold,\n page: { path: currentPath },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n }\n\n function onScroll(): void {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n checkThresholds();\n });\n }\n\n function resetIfPathChanged(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n currentPath = newPath;\n firedForPath = new Set();\n setTimeout(checkThresholds, 0);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n // Only reset if pathname actually changed — replaceState is commonly\n // used for query param updates that shouldn't re-trigger thresholds.\n setTimeout(resetIfPathChanged, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", resetIfPathChanged);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n\n // Initial check — handles short pages that don't require scrolling.\n setTimeout(checkThresholds, 0);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", resetIfPathChanged);\n window.removeEventListener(\"scroll\", onScroll);\n };\n}\n","// multi_page_session automatic trigger.\n//\n// Tracks distinct page paths visited in the current session via sessionStorage.\n// Fires once when the count reaches the configured threshold. Resets when\n// the session ID changes (30-min idle rotation).\n\nimport type { MultiPageSessionConfig } from \"../events/multi-page-session\";\nimport type { TrackingClient } from \"../ingest\";\nimport { getOrRotateSessionId } from \"../session\";\n\nconst STORAGE_KEY = \"aranova_tracking_mps_paths\";\nconst SESSION_KEY = \"aranova_tracking_mps_session\";\nconst FIRED_KEY = \"aranova_tracking_mps_fired\";\n\nfunction getSessionStorage(): Storage | null {\n try {\n return typeof window !== \"undefined\" ? window.sessionStorage : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Attach the automatic `multi_page_session` trigger.\n *\n * Tracks distinct paths in sessionStorage and fires once when the configured\n * page threshold is reached.\n */\nexport function attachMultiPageSession(\n client: TrackingClient,\n config: MultiPageSessionConfig,\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n const storage = getSessionStorage();\n if (!storage) return () => {};\n\n const { pageThreshold } = config;\n let lastCheckedPath = \"\";\n\n function getDistinctPaths(): Set<string> {\n try {\n const raw = storage!.getItem(STORAGE_KEY);\n return raw ? new Set(JSON.parse(raw) as string[]) : new Set();\n } catch {\n return new Set();\n }\n }\n\n function saveDistinctPaths(paths: Set<string>): void {\n try {\n storage!.setItem(STORAGE_KEY, JSON.stringify([...paths]));\n } catch {\n // sessionStorage full — degrade gracefully.\n }\n }\n\n function resetIfSessionChanged(): void {\n const currentSession = getOrRotateSessionId().id;\n const storedSession = storage!.getItem(SESSION_KEY);\n if (storedSession !== currentSession) {\n storage!.setItem(SESSION_KEY, currentSession);\n storage!.removeItem(STORAGE_KEY);\n storage!.removeItem(FIRED_KEY);\n }\n }\n\n function hasFired(): boolean {\n return storage!.getItem(FIRED_KEY) === \"1\";\n }\n\n function check(): void {\n // Skip if pathname hasn't changed — replaceState is commonly used for\n // query param updates and shouldn't trigger parse/serialize overhead.\n const currentPath = window.location.pathname;\n if (currentPath === lastCheckedPath) return;\n lastCheckedPath = currentPath;\n\n resetIfSessionChanged();\n\n if (hasFired()) return;\n\n const paths = getDistinctPaths();\n paths.add(currentPath);\n saveDistinctPaths(paths);\n\n if (paths.size >= pageThreshold) {\n storage!.setItem(FIRED_KEY, \"1\");\n client.trackEvent({\n eventType: \"multi_page_session\",\n metadata: {\n page_count: paths.size,\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(check, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(check, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", check);\n\n // Fire once on attach for the initial page.\n check();\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n };\n}\n","// form_start automatic trigger.\n//\n// Uses focusin event delegation on document to detect the first field\n// interaction inside a <form>. Fires once per form per page lifecycle.\n// Dedupes via a Set keyed on form id/action. Resets on SPA navigation.\n\nimport type { FormStartConfig } from \"../events/form-start\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `form_start` trigger.\n *\n * Uses `focusin` event delegation to detect the first interaction with each\n * matching form and returns a detach function.\n */\nexport function attachFormStart(client: TrackingClient, config: FormStartConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const selector = config.selector ?? \"form\";\n let firedForms = new Set<string>();\n let currentPath = window.location.pathname;\n\n function getFormKey(form: HTMLFormElement): string {\n if (form.id) return `id:${form.id}`;\n // Use getAttribute — the DOM property always returns a resolved URL,\n // never \"\" or null, so it can't distinguish \"no action\" from \"action=current page\".\n const explicitAction = form.getAttribute(\"action\");\n if (explicitAction) return `action:${explicitAction}`;\n const forms = Array.from(document.querySelectorAll(selector));\n return `index:${forms.indexOf(form)}`;\n }\n\n function onFocusIn(event: FocusEvent): void {\n const target = event.target;\n if (!(target instanceof HTMLElement)) return;\n\n // Walk up to the nearest matching <form>.\n const form = target.closest(selector) as HTMLFormElement | null;\n if (!form || form.tagName !== \"FORM\") return;\n\n const key = getFormKey(form);\n if (firedForms.has(key)) return;\n firedForms.add(key);\n\n client.trackEvent({\n eventType: \"form_start\",\n metadata: {\n form: {\n id: form.id || \"\",\n action: form.getAttribute(\"action\") ?? null,\n },\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n function resetIfPathChanged(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n currentPath = newPath;\n firedForms = new Set();\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", resetIfPathChanged);\n document.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", resetIfPathChanged);\n document.removeEventListener(\"focusin\", onFocusIn);\n };\n}\n","// page_exit automatic trigger (SDK-internal — attached unconditionally).\n//\n// Emits one `page_exit` per visible page segment with the ACTIVE dwell time\n// and the max scroll depth reached, on three leave signals:\n// - SPA navigation away (pushState / replaceState / popstate, pathname change)\n// - the tab going hidden (visibilitychange — the reliable mobile signal)\n// - pagehide (tab close / hard navigation)\n//\n// Dwell is visibility-aware like time_on_site: hidden time never counts. When\n// a hidden tab becomes visible again, the accumulator resets and the next\n// leave emits another segment — the backend sums segments per session.\n//\n// CRITICAL: on pagehide/hidden this trigger flushes the client itself via\n// `flushBeacon()` (keepalive transport). The ingest client's own\n// flush-on-pagehide listener is registered at client creation — BEFORE this\n// trigger attaches — so it fires first, sending the queue WITHOUT our\n// just-enqueued page_exit. We must therefore push it ourselves, and a plain\n// `flush()` is aborted by the browser on unload — only the keepalive beacon\n// survives, so `flushBeacon` (not `flush`) is load-bearing here.\n\nimport type { TrackingClient } from \"../ingest\";\n\n// Visible segments shorter than this are noise (no human reads a page for tens\n// of ms) and, load-bearingly, this drops the phantom emit from the\n// pagehide/visibilitychange double-fire. See emitSegment.\nconst MIN_SEGMENT_MS = 50;\n\nexport function attachPageExit(client: TrackingClient): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n let currentPath = window.location.pathname;\n let activeSince: number | null = document.visibilityState === \"visible\" ? Date.now() : null;\n let accumulatedMs = 0;\n let maxScrollPercent: number | null = null;\n let rafId: number | null = null;\n\n function getScrollPercent(): number {\n const doc = document.documentElement;\n const scrollTop = window.scrollY || doc.scrollTop;\n const scrollHeight = doc.scrollHeight;\n const clientHeight = doc.clientHeight;\n if (scrollHeight <= clientHeight) return 100;\n return Math.round(((scrollTop + clientHeight) / scrollHeight) * 100);\n }\n\n function onScroll(): void {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n const percent = getScrollPercent();\n if (percent >= 1 && (maxScrollPercent === null || percent > maxScrollPercent)) {\n maxScrollPercent = Math.min(percent, 100);\n }\n });\n }\n\n function settledDwellMs(): number {\n let total = accumulatedMs;\n if (activeSince !== null) {\n total += Date.now() - activeSince;\n }\n return Math.max(0, Math.round(total));\n }\n\n function emitSegment(path: string, flush: boolean): void {\n const dwell = settledDwellMs();\n // A segment shorter than this carries no signal — skip it. This also\n // absorbs the phantom emit when pagehide and visibilitychange:hidden both\n // fire on the same unload: the first emits the real segment and closes it\n // (activeSince = null below), so the second computes ~0ms and is dropped.\n if (dwell < MIN_SEGMENT_MS) return;\n client.trackEvent({\n eventType: \"page_exit\",\n metadata: {\n dwell_ms: dwell,\n max_scroll_percent: maxScrollPercent,\n page: { path },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n if (flush) {\n // The client's own pagehide flush already ran without this event — push\n // it through the keepalive beacon so it survives unload.\n client.flushBeacon();\n }\n // Close the segment. A new one only begins on an explicit visible/navigate\n // (both set activeSince themselves) — NOT here: at pagehide the document is\n // often still \"visible\", so restarting a segment would make the following\n // visibilitychange:hidden emit a phantom ~0ms duplicate.\n accumulatedMs = 0;\n activeSince = null;\n }\n\n function onNavigate(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n emitSegment(currentPath, false);\n currentPath = newPath;\n maxScrollPercent = null;\n accumulatedMs = 0;\n activeSince = document.visibilityState === \"visible\" ? Date.now() : null;\n }\n\n function onVisibilityChange(): void {\n if (document.visibilityState === \"hidden\") {\n emitSegment(currentPath, true);\n } else {\n // Back from hidden: a fresh segment starts accruing.\n activeSince = Date.now();\n }\n }\n\n function onPageHide(): void {\n emitSegment(currentPath, true);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(onNavigate, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(onNavigate, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", onNavigate);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n window.addEventListener(\"pagehide\", onPageHide);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", onNavigate);\n window.removeEventListener(\"scroll\", onScroll);\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n window.removeEventListener(\"pagehide\", onPageHide);\n };\n}\n","// cta_click auto-capture (opt-in via the cta_click registration config).\n//\n// A single delegated click listener fires `cta_click` for any element matching\n// the configured selector (default `[data-aranova-cta]`). The event itself\n// stays `manual` in the registry — consumers can still fire it from code; this\n// trigger just removes the need to hand-instrument every button.\n//\n// CTA identity: the `data-aranova-cta` attribute value when present, else the\n// element's trimmed text (capped). `href` and a short `element` descriptor\n// (tag#id) ride along so the dashboard can tie clicks to concrete UI.\n\nimport type { CtaClickConfig } from \"../events/cta-click\";\nimport type { TrackingClient } from \"../ingest\";\n\nexport const DEFAULT_CTA_SELECTOR = \"[data-aranova-cta]\";\n\nconst CTA_NAME_MAX_LENGTH = 120;\n\nfunction describeElement(el: Element): string {\n const tag = el.tagName.toLowerCase();\n return el.id ? `${tag}#${el.id}` : tag;\n}\n\nfunction resolveCtaName(el: Element): string {\n const explicit = el.getAttribute(\"data-aranova-cta\");\n if (explicit && explicit.trim().length > 0) return explicit.trim();\n const text = (el.textContent ?? \"\").trim().replace(/\\s+/g, \" \");\n if (text.length > 0) return text.slice(0, CTA_NAME_MAX_LENGTH);\n return describeElement(el);\n}\n\n/**\n * Attach the delegated cta_click auto-capture listener. Returns a detach\n * function. No-ops (returns a noop detacher) when `autoCapture` is absent.\n */\nexport function attachCtaClickCapture(client: TrackingClient, config: CtaClickConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n const autoCapture = config.autoCapture;\n if (!autoCapture) {\n return () => {};\n }\n const selector = autoCapture.selector ?? DEFAULT_CTA_SELECTOR;\n\n function onClick(event: MouseEvent): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n let matched: Element | null = null;\n try {\n matched = target.closest(selector);\n } catch {\n return; // invalid selector — never break the host site\n }\n if (matched === null) return;\n const href =\n matched instanceof HTMLAnchorElement ? matched.href || null : matched.getAttribute(\"href\");\n client.trackEvent({\n eventType: \"cta_click\",\n metadata: {\n cta_name: resolveCtaName(matched),\n page: { path: window.location.pathname },\n section: matched.getAttribute(\"data-aranova-section\"),\n destination_url: href,\n href,\n element: describeElement(matched),\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n // Capture phase so navigations that stop propagation still get counted.\n document.addEventListener(\"click\", onClick, true);\n return () => {\n document.removeEventListener(\"click\", onClick, true);\n };\n}\n","/**\n * Error thrown by the sales client (`createSalesClient`) on a\n * non-2xx response. Unlike the fire-and-forget event queue (which swallows\n * failures), a sale is a transaction the caller must be able to react to.\n */\nexport class AranovaApiError extends Error {\n readonly status: number;\n readonly code: string | undefined;\n readonly requestId: string | undefined;\n\n constructor(message: string, options: { status: number; code?: string; requestId?: string }) {\n super(message);\n this.name = \"AranovaApiError\";\n this.status = options.status;\n this.code = options.code;\n this.requestId = options.requestId;\n }\n}\n","import {\n API_KEY_HEADER,\n SDK_ENVIRONMENT_HEADER,\n SDK_PACKAGE_HEADER,\n SDK_SURFACE_HEADER,\n SDK_VERSION_HEADER,\n} from \"../../ingest\";\nimport { AranovaApiError } from \"./errors\";\n\n/** Shared config for every sales HTTP helper. */\nexport interface SalesTransportConfig {\n /** Public (`aranv_pk_…`) or secret (`aranv_sk_…`) API key. */\n apiKey: string;\n /**\n * Base tracking endpoint, e.g. `https://aranovainternal-production.up.railway.app/tracking`.\n * The `/sales` path is appended by the helpers.\n */\n endpoint: string;\n /** Optional SDK identity headers (mirrors the event ingest client). */\n sdkVersion?: string;\n packageName?: string;\n surface?: string;\n environment?: string;\n}\n\nfunction identityHeaders(config: SalesTransportConfig): Record<string, string> {\n const headers: Record<string, string> = { [API_KEY_HEADER]: config.apiKey };\n if (config.sdkVersion) headers[SDK_VERSION_HEADER] = config.sdkVersion;\n if (config.packageName) headers[SDK_PACKAGE_HEADER] = config.packageName;\n if (config.surface) headers[SDK_SURFACE_HEADER] = config.surface;\n if (config.environment) headers[SDK_ENVIRONMENT_HEADER] = config.environment;\n return headers;\n}\n\nfunction joinUrl(endpoint: string, path: string): string {\n return `${endpoint.replace(/\\/$/, \"\")}${path}`;\n}\n\n/**\n * Single awaited request used by every sales helper. Unlike the event queue,\n * this surfaces failures: any non-2xx rejects with an {@link AranovaApiError}.\n * Returns `undefined` for 204 No Content.\n */\nexport async function salesRequest<T>(\n config: SalesTransportConfig,\n method: string,\n path: string,\n body?: unknown,\n): Promise<T> {\n const headers = identityHeaders(config);\n if (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await fetch(joinUrl(config.endpoint, path), {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (!response.ok) {\n let detail: string | undefined;\n let code: string | undefined;\n try {\n const parsed: unknown = await response.json();\n if (parsed && typeof parsed === \"object\") {\n const record = parsed as Record<string, unknown>;\n if (typeof record.detail === \"string\") detail = record.detail;\n if (typeof record.code === \"string\") code = record.code;\n }\n } catch {\n // non-JSON error body — fall back to status text\n }\n throw new AranovaApiError(detail ?? response.statusText ?? \"Request failed\", {\n status: response.status,\n code,\n requestId: response.headers.get(\"x-request-id\") ?? undefined,\n });\n }\n\n if (response.status === 204) return undefined as T;\n return (await response.json()) as T;\n}\n","import type {\n BusinessConfig,\n CustomerGetOptions,\n CustomerGetResult,\n CustomerKpis,\n CustomerListPage,\n CustomerListQuery,\n CustomerSummaryQuery,\n Sale,\n SaleCursorPage,\n SaleInput,\n SaleListQueryV2,\n SaleSummaryQueryV2,\n SaleSummaryV2,\n SaleUpdateInput,\n SupportedCurrency,\n} from \"./schema\";\nimport type { ConversionConfigStore } from \"../conversion-config\";\nimport { fireConversionWithConsent } from \"../conversion-firing\";\nimport { salesRequest, type SalesTransportConfig } from \"./transport\";\nimport { fromMinor } from \"./money\";\n\n/** Config for {@link createSalesClient}. */\nexport interface SalesClientConfig extends SalesTransportConfig {\n /** Applied when an individual `record()` call omits `currency`. */\n defaultCurrency?: SupportedCurrency;\n /**\n * GAP28: when present, `record()` ALSO fires a real-time on-site conversion\n * (`gtag('event','conversion')`) for any recorded service that has a `firing` send_to in\n * the resolved config. Consent-gated + de-duped; no-ops server-side. Wire it from\n * `resolveConversionConfig(...)`.\n */\n firing?: Pick<ConversionConfigStore, \"getFiring\">;\n}\n\n// Fire the on-site conversion(s) for a just-recorded sale. Per-service value = the sale's\n// amount when present, else the action's configured default from config (Google applies\n// its own default when neither is sent). transaction_id ties the gtag fire to the sale so\n// retries/reloads de-dup within the WEBPAGE action.\nfunction fireRecordedConversions(\n firing: Pick<ConversionConfigStore, \"getFiring\"> | undefined,\n input: { external_id?: string | null; amount_total_cents?: number | null },\n recorded: { service?: string | null; amount_cents: number | null }[],\n sale: Sale,\n currency: SupportedCurrency,\n): void {\n if (!firing) return;\n const txnBase = input.external_id ?? sale.id;\n for (const item of recorded) {\n if (!item.service) continue;\n const config = firing.getFiring(item.service);\n if (!config) continue;\n const cents = item.amount_cents ?? config.value_cents ?? null;\n fireConversionWithConsent({\n sendTo: config.send_to,\n value: cents != null ? fromMinor(cents, currency) : null,\n currency: config.currency ?? currency,\n transactionId: `${txnBase}:${item.service}`,\n });\n }\n}\n\n/** Phone-keyed customer rollups (sk-only; a public key gets a `403`). */\nexport interface SalesCustomersClient {\n list(query?: CustomerListQuery): Promise<CustomerListPage>;\n /** `id` is the customer's E.164 phone. */\n get(id: string, options?: CustomerGetOptions): Promise<CustomerGetResult>;\n summary(query?: CustomerSummaryQuery): Promise<CustomerKpis>;\n}\n\n/** Business config (low-sensitivity — accepts a public or secret key). */\nexport interface SalesBusinessClient {\n config(): Promise<BusinessConfig>;\n}\n\n/**\n * One isomorphic sales client — what a key may *do* is enforced by the backend,\n * not by hiding methods. A **public** key (`aranv_pk_…`) may `record` (the\n * backend rejects reads/CRUD from it with a `403`); a **secret** key\n * (`aranv_sk_…`), used **server-side only**, gets full read/list/update/delete.\n * Never ship a secret key in a browser bundle.\n *\n * Generic over the service-key union `TService` and the manual-conversion key union\n * `TConversion`: bind the types emitted by `@aranova/tracking-cli gen` (`AranovaService`\n * and `AranovaConversion`) for compile-time-checked `service` / `trackConversion` keys.\n */\nexport interface SalesClient<\n TService extends string = string,\n TConversion extends string = string,\n> {\n record(\n input: Omit<SaleInput, \"currency\" | \"occurred_at\" | \"service\" | \"services\"> & {\n service?: TService | null;\n // XOR with `service`: record multiple services in one sale, each priced\n // individually. `amount_total_cents` is then optional (the backend derives\n // it as the sum). Keys are checked against the codegen `TService` union.\n services?: Array<{ service: TService; amount_cents: number }>;\n currency?: SupportedCurrency;\n occurred_at?: string;\n },\n ): Promise<Sale>;\n /**\n * Record a revenue sale — the intent-revealing alias of {@link record} in the unified-goal\n * API. POSTs `/sales` and ALSO fires the on-site conversion when the sale-goal is\n * WEBPAGE-mapped. Use this for anything with real revenue; use {@link trackConversion} for a\n * non-revenue on-page event.\n */\n recordSale(\n input: Omit<SaleInput, \"currency\" | \"occurred_at\" | \"service\" | \"services\"> & {\n service?: TService | null;\n services?: Array<{ service: TService; amount_cents: number }>;\n currency?: SupportedCurrency;\n occurred_at?: string;\n },\n ): Promise<Sale>;\n /**\n * Fire ONLY the on-site conversion for an event-goal `key` — for MANUAL event-goals\n * (`form_submit`, `phone_click`, `cta_click`) the consumer triggers explicitly. No `/sales`\n * write. No-ops when the goal isn't WEBPAGE-mapped (no resolved `send_to`) or the config\n * isn't wired. Consent-gated + de-duped. (Automatic event-goals fire themselves — no call.)\n */\n trackConversion(\n key: TConversion,\n options?: {\n transactionId?: string | null;\n value?: number | null;\n currency?: SupportedCurrency;\n },\n ): void;\n /** Keyset list with optional server sort + opt-in `total_count`. */\n list(query?: SaleListQueryV2): Promise<SaleCursorPage>;\n /**\n * Currency-grouped aggregations for the key's business. Additive v2 options:\n * calendar/custom ranges, IANA `timezone`, `granularity`, and `compare_to`.\n * Legacy `24h/7d/30d` keep their exact prior numbers. Secret key only.\n */\n summary(query: SaleSummaryQueryV2): Promise<SaleSummaryV2>;\n get(id: string): Promise<Sale>;\n update(\n id: string,\n patch: Omit<SaleUpdateInput, \"service\" | \"services\"> & {\n service?: TService | null;\n // Present ⇒ replaces the whole service set (XOR with `service`); the\n // backend recomputes `amount_total_cents` from the sum.\n services?: Array<{ service: TService; amount_cents: number }>;\n },\n ): Promise<Sale>;\n delete(id: string): Promise<void>;\n /** Phone-keyed customer rollups (sk-only). */\n customers: SalesCustomersClient;\n /** Business config (pk or sk). */\n business: SalesBusinessClient;\n}\n\nexport function createSalesClient<\n TService extends string = string,\n TConversion extends string = string,\n>(config: SalesClientConfig): SalesClient<TService, TConversion> {\n type RecordInput = Parameters<SalesClient<TService, TConversion>[\"record\"]>[0];\n\n async function record(input: RecordInput): Promise<Sale> {\n const currency = input.currency ?? config.defaultCurrency;\n if (!currency) {\n throw new Error(\n \"record: `currency` is required (pass it on the sale or set config.defaultCurrency)\",\n );\n }\n const body: SaleInput = {\n ...input,\n currency,\n occurred_at: input.occurred_at ?? new Date().toISOString(),\n };\n const sale = await salesRequest<Sale>(config, \"POST\", \"/sales\", body);\n // GAP28: fire the real-time on-site conversion(s) AFTER the sale is recorded, so the\n // gtag transaction_id and the offline path agree. Never throws (best-effort fire).\n const recorded = input.services?.length\n ? input.services.map((s) => ({\n service: s.service,\n amount_cents: s.amount_cents,\n }))\n : [\n {\n service: input.service,\n amount_cents: input.amount_total_cents ?? null,\n },\n ];\n fireRecordedConversions(config.firing, input, recorded, sale, currency);\n return sale;\n }\n\n return {\n record,\n // recordSale is the intent-revealing alias — same behavior, clearer call site.\n recordSale: record,\n\n trackConversion(key, options) {\n // Manual event-goal: fire the WEBPAGE conversion only (no /sales). No-op when the goal\n // isn't WEBPAGE-mapped or the config isn't wired.\n const firing = config.firing?.getFiring(key);\n if (!firing) return;\n const currency = firing.currency ?? options?.currency ?? config.defaultCurrency ?? null;\n const cents = firing.value_cents ?? null;\n const value =\n options?.value ??\n (cents != null && currency ? fromMinor(cents, currency as SupportedCurrency) : null);\n fireConversionWithConsent({\n sendTo: firing.send_to,\n value,\n currency,\n transactionId: options?.transactionId ?? null,\n });\n },\n\n async list(query) {\n // Pagination + sort travel at the top level; everything else is a filter.\n const { cursor, limit, sort, order, want_total, ...filters } = query ?? {};\n return salesRequest<SaleCursorPage>(config, \"POST\", \"/sales/query\", {\n filters,\n ...(limit !== undefined ? { limit } : {}),\n ...(cursor !== undefined ? { cursor } : {}),\n ...(sort !== undefined ? { sort } : {}),\n ...(order !== undefined ? { order } : {}),\n ...(want_total !== undefined ? { want_total } : {}),\n });\n },\n\n async summary(query) {\n const {\n range,\n include_categories,\n include_deleted_services,\n top_n,\n since,\n until,\n timezone,\n granularity,\n compare_to,\n ...filters\n } = query;\n return salesRequest<SaleSummaryV2>(config, \"POST\", \"/sales/summary\", {\n filters,\n ...(range !== undefined ? { range } : {}),\n ...(include_categories !== undefined ? { include_categories } : {}),\n ...(include_deleted_services !== undefined ? { include_deleted_services } : {}),\n ...(top_n !== undefined ? { top_n } : {}),\n ...(since !== undefined ? { since } : {}),\n ...(until !== undefined ? { until } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(granularity !== undefined ? { granularity } : {}),\n ...(compare_to !== undefined ? { compare_to } : {}),\n });\n },\n\n async get(id) {\n return salesRequest<Sale>(config, \"GET\", `/sales/${id}`);\n },\n\n async update(id, patch) {\n return salesRequest<Sale>(config, \"PATCH\", `/sales/${id}`, patch);\n },\n\n async delete(id) {\n await salesRequest<void>(config, \"DELETE\", `/sales/${id}`);\n },\n\n customers: {\n async list(query) {\n const { segment, sort, order, cursor, limit, want_total, ...filters } = query ?? {};\n return salesRequest<CustomerListPage>(config, \"POST\", \"/customers/query\", {\n filters,\n ...(segment !== undefined ? { segment } : {}),\n ...(sort !== undefined ? { sort } : {}),\n ...(order !== undefined ? { order } : {}),\n ...(cursor !== undefined ? { cursor } : {}),\n ...(limit !== undefined ? { limit } : {}),\n ...(want_total !== undefined ? { want_total } : {}),\n });\n },\n async get(id, options) {\n const params = new URLSearchParams();\n if (options?.include_sales !== undefined)\n params.set(\"include_sales\", String(options.include_sales));\n if (options?.limit !== undefined) params.set(\"limit\", String(options.limit));\n if (options?.cursor != null) params.set(\"cursor\", options.cursor);\n const qs = params.toString();\n // `id` is the E.164 phone (`+1…`) — must be URL-encoded.\n return salesRequest<CustomerGetResult>(\n config,\n \"GET\",\n `/customers/${encodeURIComponent(id)}${qs ? `?${qs}` : \"\"}`,\n );\n },\n async summary(query) {\n const { range, since, until, timezone, compare_to, ...filters } = query ?? {};\n return salesRequest<CustomerKpis>(config, \"POST\", \"/customers/summary\", {\n filters,\n ...(range !== undefined ? { range } : {}),\n ...(since !== undefined ? { since } : {}),\n ...(until !== undefined ? { until } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(compare_to !== undefined ? { compare_to } : {}),\n });\n },\n },\n\n business: {\n async config() {\n return salesRequest<BusinessConfig>(config, \"GET\", \"/business/config\");\n },\n },\n };\n}\n","import { z } from \"zod\";\n\n/**\n * Sales / Conversions wire schemas — the client-side source of truth.\n *\n * `saleCreateSchema` is mirrored by `SaleCreateSchema` in\n * `apps/api/src/schemas/tracking_sales.py` and enforced by the backend drift\n * test (the `resources` section of `events.schema.json`). Keep them in lockstep.\n *\n * Money is **integer minor units (cents)**; `quantity` is a decimal string;\n * `currency` is the required `SupportedCurrency` enum.\n */\n\nexport const SUPPORTED_CURRENCIES = [\"USD\", \"CAD\"] as const;\nexport type SupportedCurrency = (typeof SUPPORTED_CURRENCIES)[number];\n\nconst TRACKING_ENVIRONMENTS = [\"production\", \"development\"] as const;\n\nconst currencySchema = z.enum(SUPPORTED_CURRENCIES);\nconst centsSchema = z.number().int().nonnegative();\nconst quantitySchema = z.string().regex(/^\\d+(\\.\\d{1,3})?$/);\n// Free-form JSON object — the sale's extensibility escape hatch. Mirrors the\n// Pydantic `dict[str, Any]` (`additionalProperties: true`) on the wire.\nconst metadataSchema = z.record(z.unknown());\n\nexport const saleItemSchema = z\n .object({\n external_item_id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n category: z.string().nullable().optional(),\n quantity: quantitySchema,\n unit_price_cents: centsSchema,\n // Non-negativity validated on the wire — same contract as the other cents\n // fields — and backstopped by the DB CHECK.\n unit_cost_cents: centsSchema.nullable().optional(),\n })\n .strict();\n\n// One service covered by a sale, at its own price. `service` is the per-business\n// service key, validated against the taxonomy by the backend at write time.\nexport const saleServiceSchema = z\n .object({\n service: z.string(),\n amount_cents: centsSchema,\n })\n .strict();\n\n// Raw customer identity. Stored as-is on the backend for human display in\n// dashboards; hashing happens at writeback-upload time in the future Google\n// Ads reconciliation worker (see docs/tracking-package/conversion-writeback.md).\n// The SDK never hashes — pass values straight through.\nconst customerNameSchema = z.string().max(200);\nconst customerPhoneSchema = z.string().max(64);\nconst customerEmailSchema = z.string().max(320).email();\n\n// The singular `service` (priced by `amount_total_cents`) and the plural\n// `services` (each priced individually) are mutually exclusive. When `services`\n// is present, `amount_total_cents` is optional and the backend derives it as the\n// sum; otherwise it is required. Shared by create + update.\nfunction refineServiceXor(\n val: {\n service?: string | null;\n services?: ReadonlyArray<{ service: string; amount_cents: number }> | null;\n amount_total_cents?: number | null;\n },\n ctx: z.RefinementCtx,\n { requireAmount }: { requireAmount: boolean },\n): void {\n if (val.services != null) {\n if (val.service != null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"pass either `service` or `services`, not both\",\n path: [\"services\"],\n });\n }\n if (val.services.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"`services` must not be empty\",\n path: [\"services\"],\n });\n }\n const keys = val.services.map((s) => s.service);\n if (new Set(keys).size !== keys.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"`services` must not list the same service more than once\",\n path: [\"services\"],\n });\n }\n if (val.amount_total_cents != null) {\n const sum = val.services.reduce((acc, s) => acc + s.amount_cents, 0);\n if (val.amount_total_cents !== sum) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"amount_total_cents must equal the sum of the services amounts \" +\n \"(omit it to derive it automatically)\",\n path: [\"amount_total_cents\"],\n });\n }\n }\n } else if (requireAmount && val.amount_total_cents == null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"amount_total_cents is required unless `services` is provided\",\n path: [\"amount_total_cents\"],\n });\n }\n}\n\nexport const saleCreateSchema = z\n .object({\n external_id: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n service: z.string().nullable().optional(),\n services: z.array(saleServiceSchema).nullable().optional(),\n currency: currencySchema,\n // Optional only because the plural `services` form derives it from the sum\n // (see refineServiceXor); the singular/serviceless path still requires it.\n amount_total_cents: centsSchema.nullable().optional(),\n occurred_at: z.string().datetime(),\n environment: z.enum(TRACKING_ENVIRONMENTS).default(\"production\"),\n items: z.array(saleItemSchema).default([]),\n metadata: metadataSchema.nullable().optional(),\n customer_name: customerNameSchema.nullable().optional(),\n customer_phone: customerPhoneSchema.nullable().optional(),\n customer_email: customerEmailSchema.nullable().optional(),\n // CASL consent attestation: the customer agreed to receive SMS. Recorded\n // with a timestamp server-side; every SMS send path gates on it.\n sms_consent: z.boolean().default(false),\n })\n .strict()\n .superRefine((val, ctx) => refineServiceXor(val, ctx, { requireAmount: true }));\n\nexport const saleUpdateSchema = z\n .object({\n description: z.string().nullable().optional(),\n service: z.string().nullable().optional(),\n services: z.array(saleServiceSchema).nullable().optional(),\n currency: currencySchema.optional(),\n amount_total_cents: centsSchema.optional(),\n occurred_at: z.string().datetime().optional(),\n items: z.array(saleItemSchema).optional(),\n metadata: metadataSchema.nullable().optional(),\n customer_name: customerNameSchema.nullable().optional(),\n customer_phone: customerPhoneSchema.nullable().optional(),\n customer_email: customerEmailSchema.nullable().optional(),\n // NOT NULL server-side: omit to leave unchanged (explicit null is rejected).\n sms_consent: z.boolean().optional(),\n })\n .strict()\n .superRefine((val, ctx) => refineServiceXor(val, ctx, { requireAmount: false }));\n\nexport type SaleItemInput = z.input<typeof saleItemSchema>;\nexport type SaleServiceInput = z.input<typeof saleServiceSchema>;\n// Use the INPUT type so fields with Zod defaults (environment, items) and\n// occurred_at are optional for callers — the sales client fills them in.\nexport type SaleInput = z.input<typeof saleCreateSchema>;\nexport type SaleUpdateInput = z.input<typeof saleUpdateSchema>;\n\n// ---------------------------------------------------------------------------\n// Read shapes (server responses; not validated on the client)\n// ---------------------------------------------------------------------------\n\nexport interface SaleItem {\n id: string;\n external_item_id: string | null;\n name: string | null;\n category: string | null;\n quantity: string;\n unit_price_cents: number;\n unit_cost_cents: number | null;\n}\n\nexport interface SaleService {\n id: string;\n service_id: string;\n service_key: string;\n service_label: string;\n amount_cents: number;\n}\n\nexport interface Sale {\n id: string;\n business_id: string;\n business_name?: string | null;\n external_id: string | null;\n currency: SupportedCurrency;\n amount_total_cents: number;\n description: string | null;\n // Singular service fields are populated only for single-service sales (kept\n // for backwards compatibility); `services` is always the full set.\n service_id: string | null;\n service_key?: string | null;\n service_label?: string | null;\n services: SaleService[];\n occurred_at: string;\n environment: (typeof TRACKING_ENVIRONMENTS)[number];\n metadata: Record<string, unknown> | null;\n customer_name: string | null;\n customer_phone: string | null;\n customer_email: string | null;\n created_at: string;\n updated_at: string;\n items: SaleItem[];\n}\n\nexport interface SaleListPage {\n items: Sale[];\n total: number;\n}\n\nexport interface SaleCursorPage {\n items: Sale[];\n next_cursor: string | null;\n /** Populated only when `want_total` was requested (a single indexed COUNT). */\n total_count?: number;\n has_more?: boolean;\n}\n\n/**\n * Sortable columns on the secret-key (keyset) and admin (offset) list endpoints.\n * `business_name` only applies to the cross-business admin list — it sorts the\n * joined `businesses.name` column.\n */\nexport type SaleSortField =\n | \"occurred_at\"\n | \"created_at\"\n | \"amount_total_cents\"\n | \"customer_name\"\n | \"business_name\";\n\nexport type SaleSortOrder = \"asc\" | \"desc\";\n\n/**\n * Comprehensive filter shape mirrored from the backend's `SaleQueryFilters`.\n *\n * `search` runs case-insensitively across `customer_name`, `customer_phone`,\n * `customer_email`, `description`, and `external_id` — the human-facing\n * columns. `service_id` is the resolved per-business service UUID (different\n * from the create-time `service` *key*).\n */\nexport interface SaleFilters {\n business_id?: string;\n external_id?: string;\n service_id?: string;\n /** E.164 phone — the canonical customer key; filters sales for one customer. */\n customer_phone?: string;\n currency?: SupportedCurrency;\n environment?: (typeof TRACKING_ENVIRONMENTS)[number];\n since?: string;\n until?: string;\n min_amount_cents?: number;\n max_amount_cents?: number;\n search?: string;\n}\n\n/**\n * Full query input for `SalesClient.list()` — filters + pagination.\n *\n * Pagination is **keyset (cursor)**: `next_cursor` returned by one page is\n * passed back as `cursor` on the next. `null` / undefined cursor = first page.\n *\n * Ordering on this endpoint is fixed at **`occurred_at DESC, id DESC`** — the\n * cursor encodes a position in that index, so a different sort would\n * invalidate cursors mid-pagination. For ad-hoc sorted reads use the\n * dashboard admin endpoint, which is offset-paginated.\n */\nexport interface SaleListQuery extends SaleFilters {\n limit?: number;\n cursor?: string | null;\n}\n\n/** Keyset-safe sort columns (NOT-NULL, indexed). */\nexport type SaleKeysetSortField = \"occurred_at\" | \"created_at\" | \"amount_total_cents\";\n\n/** v2 list query — adds server sort + opt-in total. */\nexport interface SaleListQueryV2 extends SaleListQuery {\n sort?: SaleKeysetSortField;\n order?: SaleSortOrder;\n /** Opt-in: a single indexed COUNT over the filtered set. */\n want_total?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Sales summary (aggregations). Read by `SalesClient.summary()`. Every monetary\n// figure is grouped **by currency** — USD and CAD cents are never summed into a\n// single total. Money stays integer cents; only `quantity` is a decimal string.\n// ---------------------------------------------------------------------------\n\nexport const TRACKING_RANGES = [\"24h\", \"7d\", \"30d\"] as const;\nexport type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];\n\n/** Query input for `SalesClient.summary()` — filters + range + options. */\nexport interface SaleSummaryQuery extends SaleFilters {\n range: TrackingOverviewRange;\n /** Include the per-category line-item breakdown (extra join; default false). */\n include_categories?: boolean;\n /** Surface soft-deleted services individually (flagged \"(deleted)\") instead of\n * rolling them into a single \"Deleted services\" bucket. Default false. */\n include_deleted_services?: boolean;\n /** Cap on the by-service / by-category rows (1–50, default 10). */\n top_n?: number;\n}\n\nexport interface CurrencyRevenue {\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n average_order_value_cents: number;\n}\n\nexport interface SalesServiceBreakdown {\n service_id: string | null;\n service_key: string | null;\n /** \"Unassigned\" when the sale has no service. */\n service_label: string | null;\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n}\n\nexport interface SalesCategoryBreakdown {\n category: string | null;\n currency: SupportedCurrency;\n /** sum(unit_price_cents * quantity) — advisory, not authoritative. */\n revenue_cents: number;\n /** Decimal string. */\n quantity: string;\n}\n\nexport interface SalesTrendPoint {\n bucket_start: string;\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n}\n\nexport interface SaleSummary {\n range: TrackingOverviewRange;\n business_id: string | null;\n metrics: {\n sale_count: number;\n distinct_customers: number;\n by_currency: CurrencyRevenue[];\n };\n by_service: SalesServiceBreakdown[];\n by_currency: CurrencyRevenue[];\n by_category: SalesCategoryBreakdown[];\n series: SalesTrendPoint[];\n}\n\n// ---------------------------------------------------------------------------\n// v2 dashboard surface (additive, back-compat). Reads only → plain interfaces,\n// not drift-checked. Legacy `24h/7d/30d` callers get the same numbers; new\n// ranges/options layer on tz-correct calendar windows + comparisons.\n// ---------------------------------------------------------------------------\n\nexport const NAMED_RANGES = [\n \"today\",\n \"yesterday\",\n \"wtd\",\n \"mtd\",\n \"qtd\",\n \"ytd\",\n \"24h\",\n \"7d\",\n \"30d\",\n \"90d\",\n \"custom\",\n] as const;\n/** Superset of `TrackingOverviewRange` (`24h`/`7d`/`30d` stay valid). */\nexport type NamedRange = (typeof NAMED_RANGES)[number];\nexport type Granularity = \"hour\" | \"day\" | \"week\" | \"month\" | \"auto\";\nexport type CompareTo = \"previous_period\" | \"previous_year\" | \"none\";\n\nexport interface DistinctCustomersByCurrency {\n currency: SupportedCurrency;\n distinct_customers: number;\n}\n\nexport interface SummaryWindow {\n since: string;\n until: string;\n}\n\nexport interface SummaryCurrencyDelta {\n currency: SupportedCurrency;\n revenue_cents_delta: number;\n /** Ratio (0.12 = +12%); null when previous revenue was 0. */\n revenue_pct_delta: number | null;\n sale_count_delta: number;\n}\n\nexport interface SummaryDeltas {\n by_currency: SummaryCurrencyDelta[];\n sale_count_delta: number;\n distinct_customers_delta: number;\n}\n\nexport interface SaleSummaryPrevious {\n window: SummaryWindow;\n metrics: SaleSummaryV2[\"metrics\"];\n by_currency: CurrencyRevenue[];\n series: SalesTrendPoint[];\n}\n\n/** Query input for `SalesClient.summary()` v2 — widened range + tz/compare options. */\nexport interface SaleSummaryQueryV2 extends SaleFilters {\n range?: NamedRange;\n /** Required when `range === 'custom'`. */\n since?: string;\n until?: string;\n /** IANA tz, e.g. `America/Toronto`. Default = business tz. */\n timezone?: string;\n granularity?: Granularity;\n compare_to?: CompareTo;\n include_categories?: boolean;\n include_deleted_services?: boolean;\n top_n?: number;\n}\n\n/** Superset of `SaleSummary` (assignable to it). */\nexport interface SaleSummaryV2 extends Omit<SaleSummary, \"range\" | \"metrics\"> {\n range: NamedRange;\n metrics: SaleSummary[\"metrics\"] & {\n distinct_customers_by_currency: DistinctCustomersByCurrency[];\n };\n timezone: string | null;\n window: SummaryWindow | null;\n granularity: string | null;\n previous: SaleSummaryPrevious | null;\n deltas: SummaryDeltas | null;\n}\n\n// ---------------------------------------------------------------------------\n// Customers — phone-keyed (a customer IS their E.164 phone). `customer_id` is\n// the E.164 string. Money is per-currency, never summed.\n// ---------------------------------------------------------------------------\n\nexport type CustomerSegment = \"new\" | \"returning\" | \"repeat\" | \"lapsed\";\nexport type CustomerSortField = \"total_spent\" | \"last_purchase\" | \"purchases\" | \"first_purchase\";\n\nexport interface CustomerCurrencyTotal {\n currency: SupportedCurrency;\n revenue_cents: number;\n sale_count: number;\n average_order_value_cents: number;\n}\n\nexport interface CustomerSummary {\n /** The E.164 phone — the canonical customer id. */\n customer_id: string;\n display_name: string | null;\n email: string | null;\n phone: string;\n first_purchase_at: string;\n last_purchase_at: string;\n purchase_count: number;\n segment: CustomerSegment;\n totals: CustomerCurrencyTotal[];\n}\n\nexport type CustomerProfile = CustomerSummary;\n\nexport interface CustomerListQuery extends Omit<SaleFilters, \"external_id\"> {\n segment?: CustomerSegment;\n sort?: CustomerSortField;\n order?: SaleSortOrder;\n cursor?: string | null;\n limit?: number;\n want_total?: boolean;\n}\n\nexport interface CustomerListPage {\n items: CustomerSummary[];\n next_cursor: string | null;\n total_count: number | null;\n}\n\nexport interface CustomerGetOptions {\n include_sales?: boolean;\n limit?: number;\n cursor?: string | null;\n}\n\nexport interface CustomerGetResult {\n customer: CustomerProfile;\n /** Present only when `include_sales: true` (and a business-scoped key). */\n sales?: SaleCursorPage | null;\n}\n\nexport interface CustomerSummaryQuery extends SaleFilters {\n range?: NamedRange;\n since?: string;\n until?: string;\n timezone?: string;\n compare_to?: CompareTo;\n}\n\nexport interface CustomerSegmentCount {\n segment: CustomerSegment;\n count: number;\n}\n\nexport interface CustomerCurrencyDelta {\n currency: SupportedCurrency;\n revenue_cents_delta: number;\n /** Ratio (0.12 = +12%); null when previous revenue was 0. */\n revenue_pct_delta: number | null;\n}\n\nexport interface CustomerKpisDeltas {\n total_customers_delta: number;\n new_customers_delta: number;\n returning_customers_delta: number;\n repeat_rate_delta: number;\n ltv_by_currency: CustomerCurrencyDelta[];\n}\n\nexport interface CustomerKpisPrevious {\n window_since: string;\n window_until: string;\n total_customers: number;\n new_customers: number;\n returning_customers: number;\n repeat_rate: number;\n ltv_by_currency: CustomerCurrencyTotal[];\n}\n\nexport interface CustomerKpis {\n range: NamedRange;\n timezone: string;\n window_since: string;\n window_until: string;\n total_customers: number;\n new_customers: number;\n returning_customers: number;\n repeat_rate: number;\n by_segment: CustomerSegmentCount[];\n ltv_by_currency: CustomerCurrencyTotal[];\n /** Present only when `compare_to` is set. */\n previous?: CustomerKpisPrevious | null;\n deltas?: CustomerKpisDeltas | null;\n}\n\n// ---------------------------------------------------------------------------\n// Business config — supersets `fetchServices()`.\n// ---------------------------------------------------------------------------\n\nexport interface BusinessConfigService {\n key: string;\n label: string;\n archived: boolean;\n}\n\nexport interface BusinessConfigFeatures {\n customers: boolean;\n comparisons: boolean;\n retention: boolean;\n}\n\nexport interface BusinessConfig {\n business_id: string;\n display_name: string;\n timezone: string;\n primary_currency: SupportedCurrency;\n currencies: SupportedCurrency[];\n default_phone_country: string | null;\n services: BusinessConfigService[];\n features: BusinessConfigFeatures;\n}\n"],"mappings":"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","names":["src_exports","__export","src_default","init","version","CONSENT_STATE_KEY","CONSENT_TIMESTAMP_KEY","CONSENT_EXPIRES_AT_KEY","DEFAULT_CHOICE","changeListeners","notifyConsentChanged","choice","listener","changeListeners","buildConsentPayload","state","getConsentChoice","DEFAULT_CHOICE","stored","CONSENT_STATE_KEY","updatedAt","CONSENT_TIMESTAMP_KEY","expiresAt","CONSENT_EXPIRES_AT_KEY","getConsentState","pushConsentToPlatforms","setConsentState","options","requestedTtl","ttlDays","optIn","optOut","resetConsent","TRACKING_PARAM_KEYS","createEmptyTrackingParams","normalizeTrackingCookieValue","value","getTrackingParamsFromCookieReader","readCookie","params","key","getTrackingQueryValues","searchParams","FALLBACK_STORAGE_PREFIX","fallbackKey","name","persistCookieValue","maxAgeSeconds","encoded","readCookieValue","match","cookie","rawValue","stored","getCookieValueFromDocument","setTrackingCookie","mergeTrackingParams","primary","fallback","merged","persistTrackingParamsFromSearchParams","trackingValues","captureTrackingParamsFromLocation","url","resolvedUrl","GTAG_SCRIPT_HOST","TRACKING_SCRIPT_ATTRIBUTE","getScriptMarker","id","GTAG_ID_PATTERN","isValidGtagId","ensureGtagFunction","gtag","SEND_TO_RE","isValidSendTo","sendTo","fireGtagConversion","input","params","applyDefaultConsentState","buildConsentPayload","getConsentState","loadGtagScript","gtagId","marker","getScriptMarker","TRACKING_SCRIPT_ATTRIBUTE","script","GTAG_SCRIPT_HOST","initializeGtag","bootstrapGoogleAdsTracking","gtagId","isValidGtagId","applyDefaultConsentState","loadGtagScript","initializeGtag","bootstrapMultipleGtags","gtagIds","ids","id","gtag","ensureGtagFunction","FB_EVENTS_SCRIPT_HOST","FBC_COOKIE","FBP_COOKIE","META_PIXEL_ID_PATTERN","isValidMetaPixelId","id","computeFbSubdomainIndex","hostname","labels","buildFbc","fbclid","now","host","getFbcCookie","readCookieValue","getFbpCookie","readFbclidFromUrl","value","captureFbc","persistCookieValue","getScriptMarker","ensureFbqFunction","w","fbq","args","applyDefaultMetaConsentState","getConsentState","loadFbeventsScript","marker","TRACKING_SCRIPT_ATTRIBUTE","script","initializeMetaPixel","pixelId","bootstrapMetaPixel","pixelId","isValidMetaPixelId","applyDefaultMetaConsentState","loadFbeventsScript","initializeMetaPixel","captureFbc","bootstrapMultiplePixels","pixelIds","ids","id","fbq","ensureFbqFunction","LANDING_STORAGE_KEY","memoryRecord","sanitizeParams","value","source","TRACKING_PARAM_KEYS","params","key","entry","readStoredRecord","raw","parsed","writeRecord","record","captureFromUrl","url","resolved","getTrackingQueryValues","getOrCaptureLandingParams","sessionId","stored","buildLandingPayloadFields","override","DEDUP_PREFIX","dedupKey","input","alreadyFired","markFired","fireOnce","fireGtagConversion","fireConversionWithConsent","getConsentState","isStringMap","value","v","parseFiring","f","parseTrigger","t","spec","parseConversionConfig","raw","obj","services","entry","s","goalsRaw","goals","g","CACHE_PREFIX","cacheKey","url","readCache","parsed","config","writeCache","resolveConversionConfig","options","cached","current","etag","goalsByKey","resolveListeners","rebuildIndex","goal","notifyResolved","listeners","listener","adopt","next","nextEtag","wasEmpty","revalidate","doFetch","headers","response","key","MINOR_UNIT_EXPONENT","exponentFor","currency","fromMinor","cents","currency","exponentFor","thresholdMet","goal","eventType","metadata","t","currentPath","MAX_BUFFERED_EVENTS","createConversionAutoFire","store","pending","subscribed","fireMatching","firing","cents","currency","fireConversionWithConsent","fromMinor","buffered","event","withConversionAutoFire","client","autoFire","input","VISITOR_STORAGE_KEY","SESSION_STORAGE_KEY","SESSION_IDLE_MS","safeUuid","readLocalStorage","key","writeLocalStorage","value","getVisitorId","existing","fresh","getOrRotateSessionId","now","raw","parsed","refreshed","external_exports","__export","BRAND","DIRTY","EMPTY_PATH","INVALID","NEVER","OK","ParseStatus","ZodType","ZodAny","ZodArray","ZodBigInt","ZodBoolean","ZodBranded","ZodCatch","ZodDate","ZodDefault","ZodDiscriminatedUnion","ZodEffects","ZodEnum","ZodError","ZodFirstPartyTypeKind","ZodFunction","ZodIntersection","ZodIssueCode","ZodLazy","ZodLiteral","ZodMap","ZodNaN","ZodNativeEnum","ZodNever","ZodNull","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodParsedType","ZodPipeline","ZodPromise","ZodReadonly","ZodRecord","ZodSet","ZodString","ZodSymbol","ZodTuple","ZodUndefined","ZodUnion","ZodUnknown","ZodVoid","addIssueToContext","anyType","arrayType","bigIntType","booleanType","coerce","custom","dateType","datetimeRegex","en_default","discriminatedUnionType","effectsType","enumType","functionType","getErrorMap","getParsedType","instanceOfType","intersectionType","isAborted","isAsync","isDirty","isValid","late","lazyType","literalType","makeIssue","mapType","nanType","nativeEnumType","neverType","nullType","nullableType","numberType","objectType","objectUtil","oboolean","onumber","optionalType","ostring","pipelineType","preprocessType","promiseType","quotelessJson","recordType","setType","setErrorMap","strictObjectType","stringType","symbolType","tupleType","undefinedType","unionType","unknownType","util","voidType","util","_","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","k","filtered","e","object","keys","key","arr","checker","val","joinValues","array","separator","value","objectUtil","first","second","ZodParsedType","getParsedType","data","ZodIssueCode","util","quotelessJson","obj","ZodError","_ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","error","curr","i","el","value","formErrors","firstEl","errorMap","issue","_ctx","message","ZodIssueCode","ZodParsedType","util","en_default","overrideErrorMap","en_default","setErrorMap","map","overrideErrorMap","getErrorMap","makeIssue","params","data","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","m","map","EMPTY_PATH","addIssueToContext","ctx","overrideMap","getErrorMap","issue","en_default","x","ParseStatus","_ParseStatus","status","results","arrayValue","s","INVALID","pairs","syncPairs","pair","key","value","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","message","ParseInputLazyPath","parent","value","path","key","handleResult","ctx","result","isValid","error","ZodError","processCreateParams","params","errorMap","invalid_type_error","required_error","description","iss","message","ZodType","input","getParsedType","ParseStatus","isAsync","data","err","maybeAsyncResult","check","getIssueProperties","val","setError","ZodIssueCode","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","_ZodString","ZodParsedType","addIssueToContext","INVALID","status","tooBig","tooSmall","util","validation","errorUtil","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","_ZodNumber","kind","inclusive","ZodBigInt","_ZodBigInt","ZodBoolean","OK","ZodDate","_ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","_ZodArray","item","i","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","_ZodObject","shape","keys","shapeKeys","extraKeys","pairs","keyValidator","unknownKeys","catchall","syncPairs","pair","issue","defaultError","augmentation","merging","index","mask","newField","createZodEnum","handleResults","results","unionErrors","childCtx","dirty","issues","types","getDiscriminator","type","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","_ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","a","b","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","isAborted","merged","isDirty","left","right","_ZodTuple","items","itemIndex","x","rest","schemas","ZodRecord","_ZodRecord","keyType","valueType","first","second","third","ZodMap","finalMap","ZodSet","_ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","ZodFunction","_ZodFunction","makeArgsIssue","makeIssue","getErrorMap","en_default","makeReturnsIssue","returns","fn","me","parsedArgs","e","parsedReturns","returnType","func","getter","values","_ZodEnum","expectedValues","enumValues","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","DIRTY","executeRefinement","acc","inner","base","preprocess","ZodOptional","ZodType","input","ZodParsedType","OK","type","params","ZodFirstPartyTypeKind","processCreateParams","ZodNullable","ZodDefault","ctx","data","ZodCatch","newCtx","result","isAsync","ZodError","ZodNaN","addIssueToContext","ZodIssueCode","INVALID","BRAND","ZodBranded","ZodPipeline","_ZodPipeline","status","inResult","DIRTY","a","b","ZodReadonly","freeze","isValid","cleanParams","p","custom","check","_params","fatal","ZodAny","r","_fatal","late","ZodObject","ZodFirstPartyTypeKind","instanceOfType","cls","params","custom","data","stringType","ZodString","numberType","ZodNumber","nanType","ZodNaN","bigIntType","ZodBigInt","booleanType","ZodBoolean","dateType","ZodDate","symbolType","ZodSymbol","undefinedType","ZodUndefined","nullType","ZodNull","anyType","ZodAny","unknownType","ZodUnknown","neverType","ZodNever","voidType","ZodVoid","arrayType","ZodArray","objectType","ZodObject","strictObjectType","unionType","ZodUnion","discriminatedUnionType","ZodDiscriminatedUnion","intersectionType","ZodIntersection","tupleType","ZodTuple","recordType","ZodRecord","mapType","ZodMap","setType","ZodSet","functionType","ZodFunction","lazyType","ZodLazy","literalType","ZodLiteral","enumType","ZodEnum","nativeEnumType","ZodNativeEnum","promiseType","ZodPromise","effectsType","ZodEffects","optionalType","ZodOptional","nullableType","ZodNullable","preprocessType","pipelineType","ZodPipeline","ostring","onumber","oboolean","coerce","arg","NEVER","INVALID","pageViewMetadataSchema","external_exports","pageViewConfigSchema","LAST_FIRED_URL_STORAGE_KEY","lastFiredUrl","lastFiredUrlHydrated","readSessionStorage","key","writeSessionStorage","value","getLastFiredUrl","lastFiredUrlHydrated","stored","readSessionStorage","LAST_FIRED_URL_STORAGE_KEY","lastFiredUrl","setLastFiredUrl","url","writeSessionStorage","buildPageViewMetadata","referrerOverride","pageViewMetadataSchema","fireManualPageView","client","currentHref","previousFiredUrl","getLastFiredUrl","internalReferrer","externalReferrer","metadata","setLastFiredUrl","attachBfcacheRestore","handlePageShow","event","attachAutoPageView","options","lastPath","maybeFire","current","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","serializeValue","value","out","k","v","buildHeartbeatMetadata","surface","sdkVersion","packageName","triggers","gtagIds","automaticNames","manualNames","triggerConfig","cfg","name","config","serialized","DEFAULT_FLUSH_INTERVAL_MS","DEFAULT_MAX_QUEUE_SIZE","HARD_MAX_BATCH","API_KEY_HEADER","SDK_VERSION_HEADER","SDK_PACKAGE_HEADER","SDK_SURFACE_HEADER","SDK_ENVIRONMENT_HEADER","buildContext","surface","sdkVersion","packageName","environment","activeGtagIds","readTrackingParams","createEmptyTrackingParams","captureTrackingParamsFromLocation","getTrackingParamsFromCookieReader","getCookieValueFromDocument","consentSnapshot","choice","getConsentChoice","postWithFetch","url","body","apiKey","identity","keepalive","createTrackingClient","config","flushIntervalMs","DEFAULT_FLUSH_INTERVAL_MS","maxQueueSize","DEFAULT_MAX_QUEUE_SIZE","HARD_MAX_BATCH","sdkVersion","packageName","environment","activeGtagIds","eventsUrl","identityHeaders","queue","flushTimer","firstPage","initialParams","createEmptyTrackingParams","destroyed","visitorId","getVisitorId","initialSession","getOrRotateSessionId","sessionId","captureTrackingParamsFromLocation","getOrCaptureLandingParams","captureFbc","enqueueHeartbeat","metadata","buildHeartbeatMetadata","buildSessionPayload","rotated","params","mergeTrackingParams","readTrackingParams","context","buildContext","getFbcCookie","getFbpCookie","buildLandingPayloadFields","consentSnapshot","scheduleFlush","flush","clearScheduledFlush","events","body","serialized","postWithFetch","trackEvent","input","occurredAt","flushOnUnload","ctaClickMetadataSchema","external_exports","ctaClickConfigSchema","sdkHeartbeatTriggersSchema","external_exports","sdkHeartbeatMetadataSchema","sdkHeartbeatConfigSchema","formStartMetadataSchema","external_exports","formStartConfigSchema","jsonValueSchema","external_exports","formSubmitMetadataSchema","formSubmitConfigSchema","multiPageSessionMetadataSchema","external_exports","multiPageSessionConfigSchema","pageExitMetadataSchema","external_exports","pageExitConfigSchema","phoneClickMetadataSchema","external_exports","phoneClickConfigSchema","scrollDepthMetadataSchema","external_exports","scrollDepthConfigSchema","SPECIFIC_PAGE_NAMES","specificPageNameSchema","external_exports","specificPageVisitMetadataSchema","specificPageVisitConfigSchema","value","timeOnSiteMetadataSchema","external_exports","timeOnSiteConfigSchema","EVENT_REGISTRY","pageViewMetadataSchema","pageViewConfigSchema","timeOnSiteMetadataSchema","timeOnSiteConfigSchema","specificPageVisitMetadataSchema","specificPageVisitConfigSchema","scrollDepthMetadataSchema","scrollDepthConfigSchema","multiPageSessionMetadataSchema","multiPageSessionConfigSchema","formStartMetadataSchema","formStartConfigSchema","sdkHeartbeatMetadataSchema","sdkHeartbeatConfigSchema","pageExitMetadataSchema","pageExitConfigSchema","formSubmitMetadataSchema","formSubmitConfigSchema","phoneClickMetadataSchema","phoneClickConfigSchema","ctaClickMetadataSchema","ctaClickConfigSchema","ALL_AUTOMATIC_EVENT_NAMES","def","name","ALL_MANUAL_EVENT_NAMES","getEventDefinition","attachTimeOnSite","client","config","thresholdMs","accumulatedMs","activeSince","timer","fired","fire","scheduleNext","remaining","clearTimer","onVisibilityChange","attachSpecificPageVisit","client","config","pages","firedSet","check","path","name","pathPattern","key","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachScrollDepth","client","config","thresholds","firedForPath","currentPath","rafId","getScrollPercent","doc","scrollTop","scrollHeight","clientHeight","checkThresholds","percent","threshold","onScroll","resetIfPathChanged","newPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","STORAGE_KEY","SESSION_KEY","FIRED_KEY","getSessionStorage","attachMultiPageSession","client","config","storage","pageThreshold","lastCheckedPath","getDistinctPaths","raw","saveDistinctPaths","paths","resetIfSessionChanged","currentSession","getOrRotateSessionId","hasFired","check","currentPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachFormStart","client","config","selector","firedForms","currentPath","getFormKey","form","explicitAction","onFocusIn","event","target","key","resetIfPathChanged","newPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachPageExit","client","currentPath","activeSince","accumulatedMs","maxScrollPercent","rafId","getScrollPercent","doc","scrollTop","scrollHeight","clientHeight","onScroll","percent","settledDwellMs","total","emitSegment","path","flush","dwell","onNavigate","newPath","onVisibilityChange","onPageHide","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","DEFAULT_CTA_SELECTOR","describeElement","el","tag","resolveCtaName","explicit","text","attachCtaClickCapture","client","config","autoCapture","selector","DEFAULT_CTA_SELECTOR","onClick","event","target","matched","href","AranovaApiError","message","options","identityHeaders","config","headers","API_KEY_HEADER","SDK_VERSION_HEADER","SDK_PACKAGE_HEADER","SDK_SURFACE_HEADER","SDK_ENVIRONMENT_HEADER","joinUrl","endpoint","path","salesRequest","method","body","response","detail","code","parsed","record","AranovaApiError","fireRecordedConversions","firing","input","recorded","sale","currency","txnBase","item","config","cents","fireConversionWithConsent","fromMinor","createSalesClient","record","body","salesRequest","s","key","options","value","query","cursor","limit","sort","order","want_total","filters","range","include_categories","include_deleted_services","top_n","since","until","timezone","granularity","compare_to","id","patch","segment","params","qs","SUPPORTED_CURRENCIES","TRACKING_ENVIRONMENTS","currencySchema","external_exports","centsSchema","quantitySchema","metadataSchema","saleItemSchema","saleServiceSchema","customerNameSchema","customerPhoneSchema","customerEmailSchema","refineServiceXor","val","ctx","requireAmount","keys","s","sum","acc","saleCreateSchema","saleUpdateSchema","getTrackingParams","getTrackingParamsFromCookieReader","getCookieValueFromDocument","activeClient","activeRegistry","activeDetachers","activeSales","teardown","i","init","config","trackingScriptApi","apiKey","endpoint","autoCaptureTrackingParams","cookieMaxAgeSeconds","gtagId","gtagIds","metaPixelId","metaPixelIds","environment","_renderConsentBanner","triggers","conversionConfig","captureTrackingParamsFromLocation","bootstrapMultipleGtags","bootstrapGoogleAdsTracking","bootstrapMultiplePixels","bootstrapMetaPixel","conversionStore","resolveConversionConfig","createSalesClient","registry","resolvedGtagIds","e","rawClient","createTrackingClient","version","withConversionAutoFire","createConversionAutoFire","attachAutoPageView","attachBfcacheRestore","attachPageExit","timeOnSite","attachTimeOnSite","specificPageVisit","attachSpecificPageVisit","scrollDepth","attachScrollDepth","multiPageSession","attachMultiPageSession","formStart","attachFormStart","ctaClick","attachCtaClickCapture","trackEvent","eventType","metadata","manualRegistry","getEventDefinition","err","sales","getConsentState","setConsentState","getConsentChoice","optIn","optOut","resetConsent","src_default"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../package.json","../../../tracking-core/src/consent.ts","../../../tracking-core/src/tracking.ts","../../../tracking-core/src/gtag.ts","../../../tracking-core/src/fbq.ts","../../../tracking-core/src/landing.ts","../../../tracking-core/src/resources/conversion-firing.ts","../../../tracking-core/src/resources/conversion-config.ts","../../../tracking-core/src/resources/sales/money.ts","../../../tracking-core/src/resources/conversion-autofire.ts","../../../tracking-core/src/session.ts","../../../../node_modules/zod/v3/external.js","../../../../node_modules/zod/v3/helpers/util.js","../../../../node_modules/zod/v3/ZodError.js","../../../../node_modules/zod/v3/locales/en.js","../../../../node_modules/zod/v3/errors.js","../../../../node_modules/zod/v3/helpers/parseUtil.js","../../../../node_modules/zod/v3/helpers/errorUtil.js","../../../../node_modules/zod/v3/types.js","../../../tracking-core/src/events/page-view.ts","../../../tracking-core/src/page-view.ts","../../../tracking-core/src/heartbeat.ts","../../../tracking-core/src/ingest.ts","../../../tracking-core/src/events/cta-click.ts","../../../tracking-core/src/events/sdk-heartbeat.ts","../../../tracking-core/src/events/form-start.ts","../../../tracking-core/src/events/form-submit.ts","../../../tracking-core/src/events/multi-page-session.ts","../../../tracking-core/src/events/page-exit.ts","../../../tracking-core/src/events/phone-click.ts","../../../tracking-core/src/events/scroll-depth.ts","../../../tracking-core/src/events/specific-page-visit.ts","../../../tracking-core/src/events/time-on-site.ts","../../../tracking-core/src/events/registry.ts","../../../tracking-core/src/triggers/time-on-site.ts","../../../tracking-core/src/triggers/specific-page-visit.ts","../../../tracking-core/src/triggers/scroll-depth.ts","../../../tracking-core/src/triggers/multi-page-session.ts","../../../tracking-core/src/triggers/form-start.ts","../../../tracking-core/src/triggers/page-exit.ts","../../../tracking-core/src/triggers/cta-click-capture.ts","../../../../node_modules/libphonenumber-js/metadata.min.json.js","../../../../node_modules/libphonenumber-js/min/exports/withMetadataArgument.js","../../../../node_modules/libphonenumber-js/source/tools/semver-compare.js","../../../../node_modules/libphonenumber-js/source/helpers/isObject.js","../../../../node_modules/libphonenumber-js/source/helpers/isCallingCode.js","../../../../node_modules/libphonenumber-js/source/metadata.js","../../../../node_modules/libphonenumber-js/source/helpers/mergeArrays.js","../../../../node_modules/libphonenumber-js/source/helpers/checkNumberLength.js","../../../../node_modules/libphonenumber-js/source/isPossible.js","../../../../node_modules/libphonenumber-js/source/helpers/matchesEntirely.js","../../../../node_modules/libphonenumber-js/source/helpers/getNumberType.js","../../../../node_modules/libphonenumber-js/source/isValid.js","../../../../node_modules/libphonenumber-js/source/helpers/isCountryCode.js","../../../../node_modules/libphonenumber-js/source/helpers/getCountryAndCallingCodeFromOneOfThem.js","../../../../node_modules/libphonenumber-js/source/helpers/getPossibleCountriesForNumber.js","../../../../node_modules/libphonenumber-js/source/constants.js","../../../../node_modules/libphonenumber-js/source/helpers/stripIddPrefix.js","../../../../node_modules/libphonenumber-js/source/helpers/extractNationalNumberFromPossiblyIncompleteNumber.js","../../../../node_modules/libphonenumber-js/source/helpers/getCountryByNationalNumber.js","../../../../node_modules/libphonenumber-js/source/helpers/getCountryByCallingCode.js","../../../../node_modules/libphonenumber-js/source/helpers/extractNationalNumber.js","../../../../node_modules/libphonenumber-js/source/helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js","../../../../node_modules/libphonenumber-js/source/helpers/extractCountryCallingCode.js","../../../../node_modules/libphonenumber-js/source/helpers/applyInternationalSeparatorStyle.js","../../../../node_modules/libphonenumber-js/source/helpers/formatNationalNumberUsingFormat.js","../../../../node_modules/libphonenumber-js/source/helpers/getIddPrefix.js","../../../../node_modules/libphonenumber-js/source/helpers/extension/createExtensionPattern.js","../../../../node_modules/libphonenumber-js/source/helpers/isViablePhoneNumber.js","../../../../node_modules/libphonenumber-js/source/helpers/RFC3966.js","../../../../node_modules/libphonenumber-js/source/format.js","../../../../node_modules/libphonenumber-js/source/PhoneNumber.js","../../../../node_modules/libphonenumber-js/source/ParseError.js","../../../../node_modules/libphonenumber-js/source/helpers/extension/extractExtension.js","../../../../node_modules/libphonenumber-js/source/helpers/parseDigits.js","../../../../node_modules/libphonenumber-js/source/parseIncompletePhoneNumber.js","../../../../node_modules/libphonenumber-js/source/helpers/extractPhoneContext.js","../../../../node_modules/libphonenumber-js/source/helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js","../../../../node_modules/libphonenumber-js/source/parse.js","../../../../node_modules/libphonenumber-js/source/parsePhoneNumberWithError_.js","../../../../node_modules/libphonenumber-js/source/normalizeArguments.js","../../../../node_modules/libphonenumber-js/source/parsePhoneNumber_.js","../../../../node_modules/libphonenumber-js/source/parsePhoneNumber.js","../../../../node_modules/libphonenumber-js/min/exports/parsePhoneNumber.js","../../../tracking-core/src/phone.ts","../../../tracking-core/src/triggers/phone-click-capture.ts","../../../tracking-core/src/resources/sales/errors.ts","../../../tracking-core/src/resources/sales/transport.ts","../../../tracking-core/src/resources/sales/client.ts","../../../tracking-core/src/resources/sales/schema.ts"],"sourcesContent":["// Public entry for @aranova/tracking-browser. Served via jsDelivr for <script> installs:\n// https://cdn.jsdelivr.net/npm/@aranova/tracking-browser@<version>/dist/browser/aranova-tracking.global.js\nimport { version } from \"../package.json\";\nimport {\n attachAutoPageView,\n attachBfcacheRestore,\n attachCtaClickCapture,\n attachFormStart,\n attachPageExit,\n attachPhoneClickCapture,\n attachMultiPageSession,\n attachScrollDepth,\n attachSpecificPageVisit,\n attachTimeOnSite,\n bootstrapGoogleAdsTracking,\n bootstrapMetaPixel,\n bootstrapMultipleGtags,\n bootstrapMultiplePixels,\n captureTrackingParamsFromLocation,\n createConversionAutoFire,\n createSalesClient,\n createTrackingClient,\n getConsentChoice,\n getConsentState,\n getCookieValueFromDocument,\n getTrackingParamsFromCookieReader,\n optIn,\n optOut,\n resetConsent,\n resolveConversionConfig,\n setConsentState,\n TRACKING_COOKIE_MAX_AGE_SECONDS,\n withConversionAutoFire,\n type ConversionConfig,\n type ConversionConfigStore,\n type SalesClient,\n type TrackingClient,\n type TrackingInitConfig,\n type TrackingParams,\n type TriggerRegistryConfig,\n} from \"../../tracking-core/src/index\";\n// Direct import from events/registry so runtime validation can look up\n// metadata schemas by name. Importing it from the barrel would work too,\n// but going direct makes the dependency explicit.\nimport { getEventDefinition, type EventName } from \"../../tracking-core/src/events/registry\";\n\n// Re-export the ad-platform map types so a generated `aranova-services.ts` can\n// `import type { GtagEnvironmentMap, MetaPixelEnvironmentMap }` from this package\n// (the CLI `gen` annotates ARANOVA_GTAG_IDS / ARANOVA_META_PIXEL_IDS with them).\nexport type { GtagEnvironmentMap, MetaPixelEnvironmentMap } from \"../../tracking-core/src/index\";\n\nfunction getTrackingParams(): TrackingParams {\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n\n/**\n * Browser-script initialization config.\n *\n * Accepts the same trigger registry concept as the React and Next factories,\n * but validation is runtime-only because script-tag consumers usually write\n * plain JavaScript. Invalid manual events warn and are dropped.\n */\ninterface BrowserTrackingInitConfig extends TrackingInitConfig {\n /**\n * Trigger registry that controls automatic events and allowed manual events.\n *\n * Defaults to `{ automatic: { page_view: {} }, manual: {} }` when omitted.\n */\n triggers?: TriggerRegistryConfig;\n /**\n * GAP28 / unified-goal: enable real-time on-site conversion firing. When set, the SDK\n * fetches the per-business config from `cdnUrl` (with an optional offline-correct `baked`\n * fallback), then `recordSale`/`trackConversion`/automatic event-goals fire `gtag('event',\n * 'conversion', …)` for WEBPAGE-mapped goals. Omit to keep events analytics-only.\n */\n conversionConfig?: { cdnUrl: string; baked?: ConversionConfig | null };\n}\n\nlet activeClient: TrackingClient | null = null;\nlet activeRegistry: TriggerRegistryConfig | null = null;\nlet activeDetachers: Array<() => void> = [];\n// Sales client bound to the init() apiKey/endpoint. Public-key installs can\n// write sales; reads/CRUD are rejected by the backend (use a secret key on a\n// server). Null until init() runs with both creds.\nlet activeSales: SalesClient | null = null;\n\nfunction teardown(): void {\n // IMPORTANT: Detach in reverse (LIFO) order — multiple triggers patch\n // history.pushState and the chain only restores cleanly when unwound\n // in the opposite order of attachment.\n for (let i = activeDetachers.length - 1; i >= 0; i--) {\n activeDetachers[i]();\n }\n activeDetachers = [];\n if (activeClient !== null) {\n activeClient.destroy();\n activeClient = null;\n }\n activeRegistry = null;\n activeSales = null;\n}\n\n/**\n * Initialize the global browser tracking script.\n *\n * Call once from a `<script>` tag after loading\n * `aranova-tracking.global.js`. The function is re-entrant: calling it again\n * tears down existing listeners and installs the new configuration.\n *\n * @example\n * ```html\n * <script>\n * window.AranovaTracking.init({\n * apiKey: 'aranv_pk_...',\n * endpoint: 'https://api.example.com/tracking',\n * triggers: {\n * automatic: { page_view: {} },\n * manual: { form_submit: {} },\n * },\n * });\n * </script>\n * ```\n */\nexport function init(config: BrowserTrackingInitConfig = {}): void {\n if (typeof window === \"undefined\") return;\n\n // Re-assert the global in case it was deleted between init() calls.\n window.AranovaTracking = trackingScriptApi;\n\n const {\n apiKey,\n endpoint,\n autoCaptureTrackingParams = true,\n cookieMaxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n gtagId,\n gtagIds,\n metaPixelId,\n metaPixelIds,\n environment,\n // Deprecated no-op since consent v2 (opt-out model): the script ships no\n // banner. Destructured so passing it doesn't reach the client config.\n renderConsentBanner: _renderConsentBanner,\n triggers,\n conversionConfig,\n } = config;\n\n if (autoCaptureTrackingParams)\n captureTrackingParamsFromLocation(window.location.href, cookieMaxAgeSeconds);\n\n if (gtagIds && Object.keys(gtagIds).length > 0) {\n bootstrapMultipleGtags(gtagIds);\n } else if (gtagId) {\n bootstrapGoogleAdsTracking(gtagId);\n }\n\n if (metaPixelIds && Object.keys(metaPixelIds).length > 0) {\n bootstrapMultiplePixels(metaPixelIds);\n } else if (metaPixelId) {\n bootstrapMetaPixel(metaPixelId);\n }\n\n // Always teardown first so re-init is idempotent and cleans up old\n // trigger attachments before wiring new ones.\n teardown();\n\n if (!apiKey || !endpoint) {\n if (apiKey || endpoint) {\n // eslint-disable-next-line no-console\n console.warn(\n \"[AranovaTracking] init() requires both `apiKey` and `endpoint` to enable first-party event ingest. \" +\n \"Page-view events will not be sent.\",\n );\n }\n return;\n }\n\n // GAP28 / unified-goal: resolve the per-business firing config once (stale-while-revalidate\n // against the CDN). Drives recordSale/trackConversion firing AND automatic event-goal\n // auto-fire below. Null when the consumer didn't opt into conversion firing.\n const conversionStore: ConversionConfigStore | null = conversionConfig\n ? resolveConversionConfig({\n cdnUrl: conversionConfig.cdnUrl,\n baked: conversionConfig.baked,\n })\n : null;\n\n // Bind a sales client to these creds so `AranovaTracking.sales` can post sales\n // with the same (public) key, no re-passing of apiKey/endpoint.\n activeSales = createSalesClient({\n apiKey,\n endpoint,\n firing: conversionStore ?? undefined,\n });\n\n // Default registry: page_view auto-fires, no manual events. Lets\n // consumers install with just { apiKey, endpoint } and still get\n // page views, which is the historical zero-config behavior.\n const registry: TriggerRegistryConfig = triggers ?? {\n automatic: { page_view: {} },\n manual: {},\n };\n activeRegistry = registry;\n\n // Resolve gtag IDs for context: prefer gtagIds map, fall back to single gtagId.\n const resolvedGtagIds = gtagIds\n ? (Object.fromEntries(\n Object.entries(gtagIds).filter((e): e is [string, string] => e[1] != null),\n ) as Record<string, string>)\n : gtagId\n ? { default: gtagId }\n : undefined;\n\n const rawClient = createTrackingClient({\n apiKey,\n endpoint,\n surface: \"script\",\n packageName: \"@aranova/tracking-browser\",\n sdkVersion: version,\n triggers: registry,\n environment,\n activeGtagIds: resolvedGtagIds,\n });\n // When conversion firing is on, wrap the client so every automatic detector event ALSO\n // auto-fires a matching event-goal's conversion. Manual events never match (so no double\n // fire); sales/manual goals fire via recordSale/trackConversion instead.\n activeClient = conversionStore\n ? withConversionAutoFire(rawClient, createConversionAutoFire(conversionStore))\n : rawClient;\n\n // page_view is always wired (required in the type). Also attach\n // bfcache restore — it's cheap and covers a real edge case. page_exit is\n // SDK-internal: always attached, so dwell/exit analytics need no config.\n activeDetachers.push(attachAutoPageView(activeClient));\n activeDetachers.push(attachBfcacheRestore(activeClient));\n activeDetachers.push(attachPageExit(activeClient));\n\n const timeOnSite = registry.automatic.time_on_site;\n if (timeOnSite) {\n activeDetachers.push(attachTimeOnSite(activeClient, timeOnSite));\n }\n\n const specificPageVisit = registry.automatic.specific_page_visit;\n if (specificPageVisit) {\n activeDetachers.push(attachSpecificPageVisit(activeClient, specificPageVisit));\n }\n\n const scrollDepth = registry.automatic.scroll_depth;\n if (scrollDepth) {\n activeDetachers.push(attachScrollDepth(activeClient, scrollDepth));\n }\n\n const multiPageSession = registry.automatic.multi_page_session;\n if (multiPageSession) {\n activeDetachers.push(attachMultiPageSession(activeClient, multiPageSession));\n }\n\n const formStart = registry.automatic.form_start;\n if (formStart) {\n activeDetachers.push(attachFormStart(activeClient, formStart));\n }\n\n const ctaClick = registry.manual?.cta_click;\n if (ctaClick) {\n // No-ops unless the config opts into autoCapture.\n activeDetachers.push(attachCtaClickCapture(activeClient, ctaClick));\n }\n\n const phoneClick = registry.manual?.phone_click;\n if (phoneClick) {\n // No-ops unless the config opts into autoCapture. A captured tel: tap also\n // drives conversion auto-fire for a linked phone_click goal.\n activeDetachers.push(attachPhoneClickCapture(activeClient, phoneClick));\n }\n}\n\n/**\n * Fire a manually registered event from a browser-script install.\n *\n * Unlike React/Next, this is runtime-validated because the consumer may not\n * have TypeScript. Unregistered events or invalid metadata produce\n * `console.warn` and are dropped.\n */\nfunction trackEvent(eventType: string, metadata: Record<string, unknown>): void {\n if (activeClient === null) {\n // eslint-disable-next-line no-console\n console.warn(\"[AranovaTracking] trackEvent called before init({ apiKey, endpoint })\");\n return;\n }\n\n const registry = activeRegistry;\n if (registry === null) {\n // eslint-disable-next-line no-console\n console.warn(\n \"[AranovaTracking] trackEvent called but no trigger registry was passed to init()\",\n );\n return;\n }\n\n // Event must be in the manual registry — automatic events are fired\n // by the SDK itself and should not be manually triggered. `manual` is\n // an optional property on the config, so default to `{}` (no manually-\n // fireable events) when omitted.\n const manualRegistry = registry.manual ?? {};\n if (!(eventType in manualRegistry)) {\n // eslint-disable-next-line no-console\n console.warn(\n `[AranovaTracking] trackEvent: event \"${eventType}\" is not registered as a manual trigger. ` +\n \"Register it under `triggers.manual` in init().\",\n );\n return;\n }\n\n // Validate metadata shape at runtime.\n try {\n const def = getEventDefinition(eventType as EventName);\n def.metadataSchema.parse(metadata);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.warn(\n `[AranovaTracking] trackEvent: metadata for \"${eventType}\" failed schema validation`,\n err,\n );\n return;\n }\n\n activeClient.trackEvent({\n eventType,\n metadata,\n pageUrl: null,\n occurredAt: null,\n });\n}\n\n/**\n * The sales client bound to this install's `init()` apiKey/endpoint.\n *\n * `AranovaTracking.sales().record({ ... })` posts a sale with the configured\n * (public) key. `list`/`get`/`update`/`delete` exist on the same client but a\n * public key is rejected by the backend with a helpful 403 — those require a\n * secret key used server-side, never in the browser.\n *\n * Throws if called before `init({ apiKey, endpoint })`.\n */\nfunction sales(): SalesClient {\n if (activeSales === null) {\n throw new Error(\"[AranovaTracking] sales() called before init({ apiKey, endpoint })\");\n }\n return activeSales;\n}\n\n/**\n * Public API exposed as `window.AranovaTracking` by the browser script.\n *\n * Consent v2 (opt-out model): tracking is on by default. Wire a footer\n * \"cookie preferences\" control to `optOut()` / `optIn()` / `resetConsent()`;\n * `getConsentChoice()` reports the effective state + whether it was explicit.\n */\nconst trackingScriptApi = {\n init,\n captureTrackingParams: (): TrackingParams => captureTrackingParamsFromLocation(),\n getTrackingParams,\n getConsentState,\n setConsentState,\n getConsentChoice,\n optIn,\n optOut,\n resetConsent,\n trackEvent,\n sales,\n};\n\nif (typeof window !== \"undefined\") window.AranovaTracking = trackingScriptApi;\n\nexport default trackingScriptApi;\n","{\n \"name\": \"@aranova/tracking-browser\",\n \"version\": \"0.17.1\",\n \"private\": false,\n \"type\": \"commonjs\",\n \"description\": \"Aranova tracking global browser script (CDN / <script> install). Serve via jsDelivr, not as an npm import.\",\n \"files\": [\n \"dist/browser\",\n \"README.md\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/AranovaIO/aranova_internal.git\",\n \"directory\": \"packages/tracking-browser\"\n },\n \"homepage\": \"https://github.com/AranovaIO/aranova_internal/tree/master/packages/tracking-browser\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"dependencies\": {\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"jsdom\": \"^29.0.1\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^4.1.4\"\n },\n \"publishConfig\": {\n \"registry\": \"https://registry.npmjs.org\",\n \"access\": \"public\"\n }\n}\n","import type { ConsentState } from \"./types\";\n\n/**\n * localStorage key for the visitor's explicit consent choice.\n */\nexport const CONSENT_STATE_KEY = \"consent_state\";\n\n/**\n * localStorage key for the ISO timestamp when consent was last changed.\n */\nexport const CONSENT_TIMESTAMP_KEY = \"consent_timestamp\";\n\n/**\n * localStorage key for the ISO timestamp when an explicit decline expires.\n *\n * Written alongside a `denied` choice; absent for grants (they never expire).\n * Computed at WRITE time so every reader — including the inline\n * `beforeInteractive` scripts that can't import this module — only has to\n * compare a stored ISO string against the clock.\n */\nexport const CONSENT_EXPIRES_AT_KEY = \"consent_expires_at\";\n\n/**\n * How long an explicit decline is honored before the visitor reverts to the\n * default-granted state. Explicit grants never expire.\n */\nexport const DEFAULT_DECLINE_TTL_DAYS = 90;\n\nconst DAY_MS = 86_400_000;\n\n/**\n * Google Consent Mode value sent to `gtag('consent', 'update', ...)`.\n */\nexport type GtagConsentValue = \"granted\" | \"denied\";\n\n/**\n * Consent Mode v2 payload sent to Google Ads when consent changes.\n */\nexport interface ConsentUpdatePayload {\n ad_storage: GtagConsentValue;\n ad_user_data: GtagConsentValue;\n ad_personalization: GtagConsentValue;\n analytics_storage: GtagConsentValue;\n}\n\n/** Effective consent state — the opt-out model has no \"pending\". */\nexport type ConsentChoiceState = \"granted\" | \"denied\";\n\n/**\n * Where the effective state came from: `explicit` when the visitor made a\n * stored, still-valid choice; `default` otherwise (no choice, expired decline,\n * storage blocked, SSR).\n */\nexport type ConsentSource = \"default\" | \"explicit\";\n\n/**\n * The effective consent decision plus its provenance.\n */\nexport interface ConsentChoice {\n state: ConsentChoiceState;\n source: ConsentSource;\n /** ISO timestamp of the explicit choice; null for the default state. */\n updatedAt: string | null;\n /** ISO expiry of an unexpired decline; null for grants and the default state. */\n expiresAt: string | null;\n}\n\n/** Options for explicit consent writes. */\nexport interface SetConsentOptions {\n /** Days an explicit decline is honored. Defaults to {@link DEFAULT_DECLINE_TTL_DAYS}. */\n declineTtlDays?: number;\n}\n\nconst DEFAULT_CHOICE: ConsentChoice = {\n state: \"granted\",\n source: \"default\",\n updatedAt: null,\n expiresAt: null,\n};\n\ntype ConsentChangeListener = (choice: ConsentChoice) => void;\nconst changeListeners = new Set<ConsentChangeListener>();\n\n/**\n * Subscribe to consent changes (opt-in, opt-out, reset) made in THIS tab.\n * Cross-tab changes surface via the browser's `storage` event instead.\n * Returns an unsubscribe function.\n */\nexport function onConsentChange(listener: ConsentChangeListener): () => void {\n changeListeners.add(listener);\n return () => {\n changeListeners.delete(listener);\n };\n}\n\n// Takes the intended choice rather than re-reading storage: when localStorage\n// is blocked, a re-read would report default-granted right after an opt-out\n// click even though the live gtag/fbq revoke DID apply for this page load.\nfunction notifyConsentChanged(choice: ConsentChoice): void {\n for (const listener of changeListeners) {\n try {\n listener(choice);\n } catch {\n // a listener must never break the consent flow\n }\n }\n}\n\n/**\n * Build the Google Consent Mode v2 update payload for a single consent state.\n */\nexport function buildConsentPayload(state: GtagConsentValue): ConsentUpdatePayload {\n return {\n ad_storage: state,\n ad_user_data: state,\n ad_personalization: state,\n analytics_storage: state,\n };\n}\n\n/**\n * Resolve the visitor's effective consent (opt-out model).\n *\n * Default is GRANTED. Only a stored, unexpired explicit decline yields\n * `denied`. SSR, blocked storage, and expired declines all resolve to the\n * default. A legacy decline stored by the opt-in-era SDK (no expiry key) stays\n * denied and gets a fresh 90-day expiry backfilled, keeping this reader\n * consistent with the inline scripts (which treat a missing expiry as denied).\n */\nexport function getConsentChoice(): ConsentChoice {\n if (typeof window === \"undefined\") return DEFAULT_CHOICE;\n\n try {\n const stored = window.localStorage.getItem(CONSENT_STATE_KEY);\n const updatedAt = window.localStorage.getItem(CONSENT_TIMESTAMP_KEY);\n\n if (stored === \"granted\")\n return { state: \"granted\", source: \"explicit\", updatedAt, expiresAt: null };\n\n if (stored === \"denied\") {\n let expiresAt = window.localStorage.getItem(CONSENT_EXPIRES_AT_KEY);\n if (!expiresAt) {\n expiresAt = new Date(Date.now() + DEFAULT_DECLINE_TTL_DAYS * DAY_MS).toISOString();\n try {\n window.localStorage.setItem(CONSENT_EXPIRES_AT_KEY, expiresAt);\n } catch {\n // backfill is best-effort; the decline is still honored this read\n }\n }\n // A garbled expiry parses to NaN, the comparison is false, and the decline\n // stays honored (fail closed on the decliner's side). Only a parseable\n // expiry in the past reverts to the default.\n if (!(Date.parse(expiresAt) <= Date.now()))\n return { state: \"denied\", source: \"explicit\", updatedAt, expiresAt };\n }\n } catch {\n // localStorage blocked (sandboxed iframe / storage disabled) — default\n }\n\n return DEFAULT_CHOICE;\n}\n\n/**\n * Read the visitor's effective consent state.\n *\n * Opt-out model: returns `granted` unless a stored, unexpired explicit decline\n * exists. Never returns `pending` — that value survives in {@link ConsentState}\n * only so pre-v2 call sites keep compiling.\n */\nexport function getConsentState(): ConsentState {\n return getConsentChoice().state;\n}\n\nfunction pushConsentToPlatforms(state: GtagConsentValue): void {\n if (typeof window === \"undefined\") return;\n\n if (typeof window.gtag === \"function\")\n window.gtag(\"consent\", \"update\", buildConsentPayload(state));\n\n // Mirror to the Meta Pixel so one control gates both ad platforms.\n if (typeof window.fbq === \"function\")\n window.fbq(\"consent\", state === \"granted\" ? \"grant\" : \"revoke\");\n}\n\n/**\n * Persist an explicit visitor consent choice and push it live to Google\n * Consent Mode and the Meta Pixel.\n *\n * Declines expire after {@link DEFAULT_DECLINE_TTL_DAYS} days (override via\n * `options.declineTtlDays`); grants never expire.\n */\nexport function setConsentState(state: GtagConsentValue, options?: SetConsentOptions): void {\n if (typeof window === \"undefined\") return;\n\n // Compute the full intended choice BEFORE touching storage so (a) a garbage\n // TTL can't throw mid-write (state written, expiry not), and (b) listeners\n // get the visitor's actual choice even when storage is blocked.\n const requestedTtl = options?.declineTtlDays;\n const ttlDays =\n typeof requestedTtl === \"number\" && Number.isFinite(requestedTtl) && requestedTtl > 0\n ? requestedTtl\n : DEFAULT_DECLINE_TTL_DAYS;\n const updatedAt = new Date().toISOString();\n const expiresAt =\n state === \"denied\" ? new Date(Date.now() + ttlDays * DAY_MS).toISOString() : null;\n\n try {\n window.localStorage.setItem(CONSENT_STATE_KEY, state);\n window.localStorage.setItem(CONSENT_TIMESTAMP_KEY, updatedAt);\n if (expiresAt !== null) {\n window.localStorage.setItem(CONSENT_EXPIRES_AT_KEY, expiresAt);\n } else {\n window.localStorage.removeItem(CONSENT_EXPIRES_AT_KEY);\n }\n } catch {\n // localStorage blocked — still push the live consent update below so the\n // visitor's click takes effect for this page load even if it can't persist\n }\n\n pushConsentToPlatforms(state);\n notifyConsentChanged({ state, source: \"explicit\", updatedAt, expiresAt });\n}\n\n/**\n * Explicitly opt the visitor in to ad tracking (never expires).\n */\nexport function optIn(): void {\n setConsentState(\"granted\");\n}\n\n/**\n * Explicitly opt the visitor out of ad tracking for\n * {@link DEFAULT_DECLINE_TTL_DAYS} days (override via `options.declineTtlDays`).\n *\n * This is the primitive a client site's footer \"cookie preferences\" control\n * should call — the packages ship no consent UI of their own.\n */\nexport function optOut(options?: SetConsentOptions): void {\n setConsentState(\"denied\", options);\n}\n\n/**\n * Clear the stored explicit choice, returning the visitor to the\n * default-granted state, and push that state live to gtag + Meta.\n *\n * Power a \"Cookie preferences\" reset in a footer:\n *\n * ```tsx\n * const { reset } = useCookiePreferences();\n * <button onClick={reset}>Reset cookie preferences</button>\n * ```\n */\nexport function resetConsent(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n window.localStorage.removeItem(CONSENT_STATE_KEY);\n window.localStorage.removeItem(CONSENT_TIMESTAMP_KEY);\n window.localStorage.removeItem(CONSENT_EXPIRES_AT_KEY);\n } catch {\n // localStorage blocked — nothing to clear\n }\n\n pushConsentToPlatforms(\"granted\");\n notifyConsentChanged(DEFAULT_CHOICE);\n}\n\n/**\n * Re-apply a stored explicit consent choice to Google Consent Mode + Meta.\n *\n * @deprecated The v2 consent-default path ({@link applyDefaultConsentState} /\n * `createConsentDefaultScript`) already applies the effective state at\n * bootstrap, making this redundant. Pushes platform updates directly — it must\n * NOT route through {@link setConsentState}, which would renew the decline's\n * 90-day expiry on every page load.\n */\nexport function restoreStoredConsent(): ConsentState {\n const choice = getConsentChoice();\n\n if (choice.source === \"explicit\") pushConsentToPlatforms(choice.state);\n\n return choice.state;\n}\n\n/**\n * Inline-JS fragment that resolves the effective consent value into\n * `var aranovaConsent = 'granted' | 'denied'`.\n *\n * Single source of the expiry logic for every inline `<script>` builder (gtag\n * and Meta), so the runtime reader and the inline readers can't drift. Must\n * stay dependency-free ES5 and never throw (localStorage access throws in\n * sandboxed iframes).\n */\nexport function createEffectiveConsentSnippet(): string {\n // IIFE keeps the temporaries off the page's global scope — only\n // `aranovaConsent` (the value consumed by the rest of the script) leaks.\n return `\nvar aranovaConsent = (function () {\n try {\n if (window.localStorage.getItem('${CONSENT_STATE_KEY}') === 'denied') {\n var exp = window.localStorage.getItem('${CONSENT_EXPIRES_AT_KEY}');\n var expMs = exp ? Date.parse(exp) : NaN;\n if (!(expMs <= Date.now())) return 'denied';\n }\n } catch (e) {}\n return 'granted';\n})();\n`.trim();\n}\n","import type { TrackingParams } from \"./types\";\n\n/**\n * Default attribution cookie lifetime: 90 days.\n */\nexport const TRACKING_COOKIE_MAX_AGE_SECONDS = 7_776_000;\n\n/**\n * Attribution query/cookie keys captured by the SDK.\n */\nexport const TRACKING_PARAM_KEYS = [\n \"gclid\",\n \"fbclid\",\n \"utm_source\",\n \"utm_medium\",\n \"utm_campaign\",\n \"utm_term\",\n \"utm_content\",\n] as const;\n\nexport type TrackingParamKey = (typeof TRACKING_PARAM_KEYS)[number];\n\n/**\n * Create an all-null attribution parameter object.\n */\nexport function createEmptyTrackingParams(): TrackingParams {\n return {\n gclid: null,\n fbclid: null,\n utm_source: null,\n utm_medium: null,\n utm_campaign: null,\n utm_term: null,\n utm_content: null,\n };\n}\n\n/**\n * Normalize a raw cookie value into a tracking value.\n *\n * Empty strings and non-string values become `null`.\n */\nexport function normalizeTrackingCookieValue(value: unknown): string | null {\n return typeof value === \"string\" && value.length > 0 ? value : null;\n}\n\n/**\n * Read all tracking params using the provided cookie reader.\n *\n * This is shared by browser, React, and Next server integrations.\n */\nexport function getTrackingParamsFromCookieReader(\n readCookie: (key: TrackingParamKey) => unknown,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((params, key) => {\n params[key] = normalizeTrackingCookieValue(readCookie(key));\n return params;\n }, createEmptyTrackingParams());\n}\n\n/**\n * Extract tracking params from URL search params.\n *\n * Only non-empty values are returned.\n */\nexport function getTrackingQueryValues(\n searchParams: Pick<URLSearchParams, \"get\">,\n): Partial<Record<TrackingParamKey, string>> {\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const value = searchParams.get(key);\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n params[key] = value;\n }\n\n return params;\n }, {});\n}\n\n/**\n * localStorage fallback prefix. Meta/Facebook in-app browsers (Instagram / FB\n * webviews) frequently block `document.cookie`; when a cookie write can't be\n * confirmed we mirror the value here so attribution (and `_fbc`) survives the\n * session and subsequent in-webview reloads instead of being silently lost.\n */\nconst FALLBACK_STORAGE_PREFIX = \"_aranova_track_\";\n\nfunction fallbackKey(name: string): string {\n return `${FALLBACK_STORAGE_PREFIX}${name}`;\n}\n\n/**\n * Persist a cookie value AND mirror it to localStorage. Generic over the cookie\n * name so it serves the attribution params AND the Meta `_fbc` cookie. Never\n * throws.\n *\n * The localStorage mirror is written UNCONDITIONALLY — it is NOT gated on a\n * cookie read-back. Meta/Instagram in-app webviews partition cookies: the write\n * is visible to a same-page read (so a verify-after-write would falsely pass)\n * yet is silently dropped on the next navigation/reload. Gating the fallback on\n * that read-back would leave the value unrecoverable in exactly the case it\n * exists for; a stale same-name cookie from a prior visit would also mask a\n * blocked write. So we always write both. {@link readCookieValue} prefers the\n * cookie when present, which keeps the mirror harmless when cookies work and\n * load-bearing when they don't survive navigation.\n */\nexport function persistCookieValue(\n name: string,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n const encoded = encodeURIComponent(value);\n if (typeof document !== \"undefined\") {\n try {\n document.cookie = `${name}=${encoded}; Max-Age=${maxAgeSeconds}; Path=/; SameSite=Lax`;\n } catch {\n // cookie blocked — the localStorage mirror below is the fallback\n }\n }\n if (typeof window !== \"undefined\") {\n try {\n window.localStorage.setItem(fallbackKey(name), encoded);\n } catch {\n // both blocked — give up silently, never break the host site\n }\n }\n}\n\n/**\n * Read a cookie value, falling back to the localStorage mirror written by\n * {@link persistCookieValue} when the cookie is absent (blocked webview).\n */\nexport function readCookieValue(name: string): string | null {\n if (typeof document !== \"undefined\") {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const match = cookies.find((cookie) => cookie.startsWith(`${name}=`));\n if (match) {\n const [, rawValue = \"\"] = match.split(\"=\");\n return normalizeTrackingCookieValue(decodeURIComponent(rawValue));\n }\n }\n if (typeof window !== \"undefined\") {\n try {\n const stored = window.localStorage.getItem(fallbackKey(name));\n if (stored) return normalizeTrackingCookieValue(decodeURIComponent(stored));\n } catch {\n // ignore\n }\n }\n return null;\n}\n\n/**\n * Read a tracking cookie from `document.cookie` (or the localStorage fallback).\n *\n * Returns `null` during SSR or when neither source has the value.\n */\nexport function getCookieValueFromDocument(key: TrackingParamKey): string | null {\n return readCookieValue(key);\n}\n\n/**\n * Persist one attribution value as a first-party cookie (localStorage fallback\n * when cookies are blocked).\n */\nexport function setTrackingCookie(\n key: TrackingParamKey,\n value: string,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): void {\n persistCookieValue(key, value, maxAgeSeconds);\n}\n\n/**\n * Merge two attribution param sets, preferring `primary`'s non-null values and\n * filling the gaps from `fallback`. Used to combine the cookie-backed read with\n * the synchronous init-time snapshot so a value captured before an SPA router\n * stripped the URL (or before a webview blocked the cookie) still wins.\n */\nexport function mergeTrackingParams(\n primary: TrackingParams,\n fallback: TrackingParams,\n): TrackingParams {\n return TRACKING_PARAM_KEYS.reduce<TrackingParams>((merged, key) => {\n merged[key] = primary[key] ?? fallback[key];\n return merged;\n }, createEmptyTrackingParams());\n}\n\n/**\n * Capture any tracking params present in a URL search parameter source and\n * persist them to first-party cookies.\n *\n * Returns the subset of params that were found and persisted.\n */\nexport function persistTrackingParamsFromSearchParams(\n searchParams: Pick<URLSearchParams, \"get\">,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): Partial<Record<TrackingParamKey, string>> {\n const trackingValues = getTrackingQueryValues(searchParams);\n\n Object.entries(trackingValues).forEach(([key, value]) => {\n setTrackingCookie(key as TrackingParamKey, value, maxAgeSeconds);\n });\n\n return trackingValues;\n}\n\n/**\n * Capture tracking params from a URL, persist them to first-party cookies, and\n * return the current cookie-backed attribution state.\n *\n * Defaults to `window.location.href` in the browser.\n */\nexport function captureTrackingParamsFromLocation(\n url = typeof window === \"undefined\" ? \"\" : window.location.href,\n maxAgeSeconds = TRACKING_COOKIE_MAX_AGE_SECONDS,\n): TrackingParams {\n const resolvedUrl =\n typeof window === \"undefined\"\n ? new URL(url || \"https://example.invalid\")\n : new URL(url, window.location.origin);\n persistTrackingParamsFromSearchParams(resolvedUrl.searchParams, maxAgeSeconds);\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n","// This module loads the Google tag (gtag.js), applies Consent Mode, and fires\n// `gtag('config', …)` (remarketing) plus real-time `gtag('event','conversion')`\n// via `fireGtagConversion` (GAP28). Consent v2 is OPT-OUT: the effective state\n// is granted unless the visitor stored an explicit, unexpired decline, so tags\n// run from first paint for the default visitor.\n// See docs/google-ads-deployment/gtags-and-conversion-tracking.md.\n\nimport { buildConsentPayload, createEffectiveConsentSnippet, getConsentState } from \"./consent\";\nimport type { GtagEnvironmentMap } from \"./types\";\n\n/**\n * Google Tag Manager script host used for gtag loading.\n */\nexport const GTAG_SCRIPT_HOST = \"https://www.googletagmanager.com/gtag/js\";\n\n/**\n * Attribute used to mark scripts inserted by the tracking SDK.\n */\nexport const TRACKING_SCRIPT_ATTRIBUTE = \"data-aranova-tracking\";\n\nfunction getScriptMarker(id: string): string {\n return `aranova-${id}`;\n}\n\n/**\n * Pattern matching valid Google Ads / GA4 tag IDs.\n *\n * Accepted formats: `AW-123456789`, `G-XXXXXXXXXX`, `GT-XXXXXXX`, `DC-XXXXXXX`.\n * IDs that don't match are silently dropped to prevent script injection when\n * interpolated into inline `<script>` content.\n */\nconst GTAG_ID_PATTERN = /^[A-Z]{1,3}-[A-Za-z0-9_-]+$/;\n\nexport function isValidGtagId(id: string): boolean {\n return GTAG_ID_PATTERN.test(id);\n}\n\n/**\n * Create an inline script that initializes gtag with the visitor's EFFECTIVE\n * consent as the Consent Mode default (opt-out model).\n *\n * Resolves granted/denied synchronously from localStorage in one shot — a\n * decliner never gets a granted window and the default visitor never gets a\n * denied one, so no `wait_for_update` and no follow-up restore script is\n * needed. Run it `beforeInteractive` so the default lands before gtag.js.\n */\nexport function createConsentDefaultScript(): string {\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\n${createEffectiveConsentSnippet()}\ngtag('consent', 'default', {\n ad_storage: aranovaConsent,\n ad_user_data: aranovaConsent,\n ad_personalization: aranovaConsent,\n analytics_storage: aranovaConsent\n});\n`.trim();\n}\n\n/**\n * Create an inline script that initializes gtag for a Google Ads tag id.\n */\nexport function createGtagInitScript(gtagId: string): string {\n if (!isValidGtagId(gtagId)) return \"\";\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\ngtag('js', new Date());\ngtag('config', '${gtagId}');\n`.trim();\n}\n\n/**\n * Create an inline script that pushes the effective consent as an update.\n *\n * @deprecated Redundant since consent v2 — `createConsentDefaultScript()`\n * already resolves the effective state (including decline expiry) into the\n * Consent Mode default, so no restore pass is needed. Kept expiry-aware for\n * integrations that still render it.\n */\nexport function createConsentRestoreScript(): string {\n return `\n${createEffectiveConsentSnippet()}\nif (window.gtag) {\n window.gtag('consent', 'update', {\n ad_storage: aranovaConsent,\n ad_user_data: aranovaConsent,\n ad_personalization: aranovaConsent,\n analytics_storage: aranovaConsent\n });\n}\n`.trim();\n}\n\n/**\n * Ensure `window.gtag` and `window.dataLayer` exist and return the gtag shim.\n */\nexport function ensureGtagFunction(): NonNullable<Window[\"gtag\"]> {\n window.dataLayer = window.dataLayer || [];\n\n if (typeof window.gtag === \"function\") return window.gtag;\n\n // CRITICAL: push the `arguments` object, NOT a rest-param array. gtag.js only\n // treats the canonical `dataLayer.push(arguments)` form as a command — a plain\n // array pushed to the dataLayer is ignored. With the array form, every\n // gtag('config' | 'consent' | 'event') call silently no-ops: the account never\n // registers, consent mode never applies, and conversions never fire (verified\n // live — the array form sends zero network hits; the arguments form sends the\n // pagead/conversion ping). Mirror Google's canonical inline snippet exactly.\n function gtag(): void {\n // eslint-disable-next-line prefer-rest-params\n window.dataLayer?.push(arguments);\n }\n window.gtag = gtag;\n\n return window.gtag;\n}\n\nconst SEND_TO_RE = /^AW-[A-Za-z0-9]+\\/[A-Za-z0-9_-]+$/;\n\n/** A gtag `send_to` target, e.g. `AW-123456789/AbC-D_efg`. */\nexport function isValidSendTo(sendTo: string): boolean {\n return SEND_TO_RE.test(sendTo);\n}\n\nexport interface GtagConversionInput {\n /** `AW-<id>/<label>` — the conversion action's firing target. */\n sendTo: string;\n /** Conversion value in MAJOR units; omit to let Google apply the action's default. */\n value?: number | null;\n currency?: string | null;\n transactionId?: string | null;\n}\n\n/**\n * Fire a real-time on-site conversion — `gtag('event','conversion',{ send_to, … })`\n * (GAP28). Browser-gated and never throws: `record()` is isomorphic and runs server-side\n * under a secret key where `window`/`gtag` are absent, so this no-ops there. Consent\n * gating + de-dup are the caller's responsibility (see `fireConversionWithConsent`).\n * Returns whether the event was actually pushed.\n */\nexport function fireGtagConversion(input: GtagConversionInput): boolean {\n if (typeof window === \"undefined\" || typeof window.gtag !== \"function\") return false;\n if (!isValidSendTo(input.sendTo)) return false;\n const params: Record<string, unknown> = { send_to: input.sendTo };\n if (input.value != null) params.value = input.value;\n if (input.currency) params.currency = input.currency;\n if (input.transactionId) params.transaction_id = input.transactionId;\n try {\n window.gtag(\"event\", \"conversion\", params);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Apply the visitor's EFFECTIVE consent as the Consent Mode default\n * (opt-out model): granted unless a stored, unexpired decline exists.\n *\n * Reading via `getConsentState()` also backfills the expiry key for\n * legacy opt-in-era declines, keeping later inline reads consistent.\n */\nexport function applyDefaultConsentState(): void {\n const gtag = ensureGtagFunction();\n gtag(\n \"consent\",\n \"default\",\n buildConsentPayload(getConsentState() === \"denied\" ? \"denied\" : \"granted\"),\n );\n}\n\n/**\n * Load the external gtag script once for the provided Google Ads tag id.\n */\nexport function loadGtagScript(gtagId: string): void {\n if (typeof document === \"undefined\") return;\n\n const marker = getScriptMarker(\"gtag-loader\");\n const existingScript = document.querySelector<HTMLScriptElement>(\n `script[${TRACKING_SCRIPT_ATTRIBUTE}=\"${marker}\"]`,\n );\n if (existingScript) return;\n\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `${GTAG_SCRIPT_HOST}?id=${encodeURIComponent(gtagId)}`;\n script.setAttribute(TRACKING_SCRIPT_ATTRIBUTE, marker);\n document.head.append(script);\n}\n\n/**\n * Send the initial `gtag('js')` and `gtag('config')` calls.\n */\nexport function initializeGtag(gtagId: string): void {\n const gtag = ensureGtagFunction();\n gtag(\"js\", new Date());\n gtag(\"config\", gtagId);\n}\n\n/**\n * Push the current effective consent to gtag as an update.\n *\n * @deprecated Redundant since consent v2 — `applyDefaultConsentState()`\n * already applies the effective state at bootstrap. Pushes directly (no\n * storage writes), so it never renews a decline's expiry.\n */\nexport function restoreConsentState(): void {\n if (typeof window === \"undefined\") return;\n\n const consentState = getConsentState();\n if (consentState === \"granted\" || consentState === \"denied\")\n window.gtag?.(\"consent\", \"update\", buildConsentPayload(consentState));\n}\n\n/**\n * Load and initialize Google Ads tracking with Consent Mode support.\n *\n * Used by framework components and browser-script initialization.\n */\nexport function bootstrapGoogleAdsTracking(gtagId: string): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!isValidGtagId(gtagId)) return;\n\n applyDefaultConsentState();\n loadGtagScript(gtagId);\n initializeGtag(gtagId);\n}\n\n/**\n * Load and initialize Google Ads tracking for ALL labelled gtag IDs.\n *\n * Every ID in the map gets a `gtag('config', ...)` call — gtag natively\n * supports multiple configured tags on the same page. The script loader\n * only runs once (for the first ID); subsequent IDs reuse the shared\n * `dataLayer`.\n */\nexport function bootstrapMultipleGtags(gtagIds: GtagEnvironmentMap): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n\n const ids = Object.values(gtagIds).filter(\n (id): id is string => typeof id === \"string\" && isValidGtagId(id),\n );\n if (ids.length === 0) return;\n\n applyDefaultConsentState();\n loadGtagScript(ids[0]!);\n\n // Call gtag('js') once, then gtag('config') per ID. initializeGtag\n // calls both, but gtag('js') should only fire once per page load.\n const gtag = ensureGtagFunction();\n gtag(\"js\", new Date());\n for (const id of ids) {\n gtag(\"config\", id);\n }\n}\n\n/**\n * Create an inline script that initializes gtag for multiple Google Ads tag ids.\n *\n * Used by the Next.js `GoogleAdsTracking` component when rendering `<Script>`\n * tags for a multi-gtag configuration.\n */\nexport function createGtagInitScriptMulti(gtagIds: string[]): string {\n const safeIds = gtagIds.filter(isValidGtagId);\n const configs = safeIds.map((id) => `gtag('config', '${id}');`).join(\"\\n\");\n return `\nwindow.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\nwindow.gtag = gtag;\ngtag('js', new Date());\n${configs}\n`.trim();\n}\n","// The Meta Pixel (`fbq`) loader — the Facebook analogue of `gtag.ts`. It loads\n// fbevents.js and fires `fbq('init', …)` + `fbq('track','PageView')` to build Meta\n// remarketing / custom audiences (and let Meta optimize delivery + attribute).\n// Consent v2 is OPT-OUT: the pixel runs from first paint unless the visitor\n// stored an explicit, unexpired decline. This is NOT our in-house analytics\n// (that's the event ingest pipeline); it's the ad-platform tag, exactly like the\n// Google tag is for Google Ads.\n//\n// It also forms the Conversions-API-canonical `_fbc` cookie from the landing\n// `fbclid` (and reads the Pixel-set `_fbp`) so a future server-side Meta\n// Conversions API writeback has everything it needs.\n\nimport { createEffectiveConsentSnippet, getConsentState } from \"./consent\";\nimport { persistCookieValue, readCookieValue, TRACKING_COOKIE_MAX_AGE_SECONDS } from \"./tracking\";\nimport { TRACKING_SCRIPT_ATTRIBUTE } from \"./gtag\";\nimport type { MetaPixelEnvironmentMap } from \"./types\";\n\n/** Meta Pixel script host. */\nexport const FB_EVENTS_SCRIPT_HOST = \"https://connect.facebook.net/en_US/fbevents.js\";\n\n/** Cookie names Meta uses for the Conversions API. */\nexport const FBC_COOKIE = \"_fbc\";\nexport const FBP_COOKIE = \"_fbp\";\n\n/**\n * Valid Meta Pixel ID: a 15-16 digit number. IDs that don't match are dropped to\n * prevent script injection when interpolated into inline `<script>` content\n * (mirrors GTAG_ID_PATTERN).\n */\nconst META_PIXEL_ID_PATTERN = /^\\d{15,16}$/;\n\nexport function isValidMetaPixelId(id: string): boolean {\n return META_PIXEL_ID_PATTERN.test(id);\n}\n\n// ---------------------------------------------------------------------------\n// _fbc / _fbp cookie formation\n// ---------------------------------------------------------------------------\n\n/**\n * subdomainIndex for the `_fbc` value: `com` → 0, `example.com` → 1,\n * `www.example.com` → 2 (dot-label count minus one).\n */\nexport function computeFbSubdomainIndex(hostname: string): number {\n const labels = hostname.split(\".\").filter(Boolean);\n return Math.max(0, labels.length - 1);\n}\n\n/**\n * Build the CAPI-canonical `_fbc` value: `fb.<subdomainIndex>.<creationMs>.<fbclid>`.\n * Never hashed.\n */\nexport function buildFbc(fbclid: string, now: number, hostname?: string): string {\n const host = hostname ?? (typeof window === \"undefined\" ? \"\" : window.location.hostname);\n return `fb.${computeFbSubdomainIndex(host)}.${now}.${fbclid}`;\n}\n\n/** Current `_fbc` cookie (or localStorage fallback), if any. */\nexport function getFbcCookie(): string | null {\n return readCookieValue(FBC_COOKIE);\n}\n\n/** Current `_fbp` cookie — set by the Meta Pixel; we only ever read it. */\nexport function getFbpCookie(): string | null {\n return readCookieValue(FBP_COOKIE);\n}\n\nfunction readFbclidFromUrl(): string | null {\n if (typeof window === \"undefined\") return null;\n try {\n const value = new URL(window.location.href).searchParams.get(\"fbclid\");\n return value && value.trim().length > 0 ? value : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Form and persist `_fbc` from the landing `fbclid` when the Pixel hasn't already\n * set it. Reads the fbclid from the URL first, then the captured attribution\n * cookie. No-ops when there's no fbclid or `_fbc` already exists. `_fbp` is\n * Pixel-only — never written here.\n */\nexport function captureFbc(now = typeof Date === \"undefined\" ? 0 : Date.now()): void {\n if (typeof window === \"undefined\") return;\n // A Pixel-set `_fbc` is canonical — don't overwrite it.\n if (getFbcCookie()) return;\n const fbclid = readFbclidFromUrl() ?? readCookieValue(\"fbclid\");\n if (!fbclid) return;\n persistCookieValue(FBC_COOKIE, buildFbc(fbclid, now), TRACKING_COOKIE_MAX_AGE_SECONDS);\n}\n\n// ---------------------------------------------------------------------------\n// fbq loader (mirrors gtag.ts)\n// ---------------------------------------------------------------------------\n\ntype FbqStub = ((...args: unknown[]) => void) & {\n callMethod?: (...args: unknown[]) => void;\n queue: unknown[][];\n push: unknown;\n loaded: boolean;\n version: string;\n};\n\nfunction getScriptMarker(id: string): string {\n return `aranova-${id}`;\n}\n\n/**\n * Ensure `window.fbq` exists (the standard fbevents bootstrap stub) and return\n * it. Safe to call repeatedly — it only initializes once.\n */\nexport function ensureFbqFunction(): NonNullable<Window[\"fbq\"]> {\n const w = window as Window & { fbq?: FbqStub; _fbq?: FbqStub };\n if (typeof w.fbq === \"function\") return w.fbq;\n\n const fbq = function (this: unknown, ...args: unknown[]) {\n if (fbq.callMethod) fbq.callMethod.apply(fbq, args);\n else fbq.queue.push(args);\n } as FbqStub;\n\n fbq.push = fbq;\n fbq.loaded = true;\n fbq.version = \"2.0\";\n fbq.queue = [];\n\n w.fbq = fbq;\n if (!w._fbq) w._fbq = fbq;\n return fbq;\n}\n\n/**\n * Apply the visitor's EFFECTIVE consent to the Meta Pixel (opt-out model):\n * grant unless a stored, unexpired decline exists.\n */\nexport function applyDefaultMetaConsentState(): void {\n ensureFbqFunction()(\"consent\", getConsentState() === \"denied\" ? \"revoke\" : \"grant\");\n}\n\n/** Load fbevents.js once. */\nexport function loadFbeventsScript(): void {\n if (typeof document === \"undefined\") return;\n const marker = getScriptMarker(\"fbq-loader\");\n const existing = document.querySelector<HTMLScriptElement>(\n `script[${TRACKING_SCRIPT_ATTRIBUTE}=\"${marker}\"]`,\n );\n if (existing) return;\n\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = FB_EVENTS_SCRIPT_HOST;\n script.setAttribute(TRACKING_SCRIPT_ATTRIBUTE, marker);\n document.head.append(script);\n}\n\n/** `fbq('init', id)` + the initial PageView. */\nexport function initializeMetaPixel(pixelId: string): void {\n const fbq = ensureFbqFunction();\n fbq(\"init\", pixelId);\n fbq(\"track\", \"PageView\");\n}\n\n/**\n * Push the current effective consent to fbq.\n *\n * @deprecated Redundant since consent v2 — `applyDefaultMetaConsentState()`\n * already applies the effective state at bootstrap. Pushes directly (no\n * storage writes), so it never renews a decline's expiry.\n */\nexport function restoreMetaConsentState(): void {\n if (typeof window === \"undefined\") return;\n const state = getConsentState();\n if (state === \"granted\") window.fbq?.(\"consent\", \"grant\");\n else if (state === \"denied\") window.fbq?.(\"consent\", \"revoke\");\n}\n\n/**\n * Load + initialize one Meta Pixel with Consent Mode support, and form `_fbc`.\n */\nexport function bootstrapMetaPixel(pixelId: string): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n if (!isValidMetaPixelId(pixelId)) return;\n\n applyDefaultMetaConsentState();\n loadFbeventsScript();\n initializeMetaPixel(pixelId);\n captureFbc();\n}\n\n/**\n * Load + initialize ALL labelled Meta Pixel IDs (script loads once; `fbq('init')`\n * fires per id — the Pixel supports multiple pixels on one page).\n */\nexport function bootstrapMultiplePixels(pixelIds: MetaPixelEnvironmentMap): void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\n const ids = Object.values(pixelIds).filter(\n (id): id is string => typeof id === \"string\" && isValidMetaPixelId(id),\n );\n if (ids.length === 0) return;\n\n applyDefaultMetaConsentState();\n loadFbeventsScript();\n const fbq = ensureFbqFunction();\n for (const id of ids) {\n fbq(\"init\", id);\n }\n fbq(\"track\", \"PageView\");\n captureFbc();\n}\n\n// ---------------------------------------------------------------------------\n// Inline <script> builders for the Next.js <Script> path (mirror gtag.ts)\n// ---------------------------------------------------------------------------\n\n/** The standard fbevents stub as an inline string. */\nfunction fbqStubScript(): string {\n return `\n!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?\nn.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;\nn.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;\nt.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,\ndocument,'script','${FB_EVENTS_SCRIPT_HOST}');`.trim();\n}\n\n/**\n * Inline script that loads the fbevents stub and applies the visitor's\n * EFFECTIVE consent (opt-out model) before any `init`/`PageView` fires.\n */\nexport function createMetaConsentDefaultScript(): string {\n return `${fbqStubScript()}\n${createEffectiveConsentSnippet()}\nfbq('consent', aranovaConsent === 'denied' ? 'revoke' : 'grant');`;\n}\n\n/** Inline script that inits one pixel + PageView. */\nexport function createMetaPixelInitScript(pixelId: string): string {\n if (!isValidMetaPixelId(pixelId)) return \"\";\n return `fbq('init', '${pixelId}');\\nfbq('track', 'PageView');`;\n}\n\n/** Inline script that inits multiple pixels + a single PageView. */\nexport function createMetaPixelInitScriptMulti(pixelIds: string[]): string {\n const inits = pixelIds.filter(isValidMetaPixelId).map((id) => `fbq('init', '${id}');`);\n if (inits.length === 0) return \"\";\n return `${inits.join(\"\\n\")}\\nfbq('track', 'PageView');`;\n}\n\n/**\n * Inline script that pushes the effective consent into fbq.\n *\n * @deprecated Redundant since consent v2 — `createMetaConsentDefaultScript()`\n * already applies the effective state (including decline expiry) before the\n * pixel initializes. Kept expiry-aware for integrations that still render it.\n */\nexport function createMetaConsentRestoreScript(): string {\n return `\n${createEffectiveConsentSnippet()}\nif (window.fbq) {\n window.fbq('consent', aranovaConsent === 'denied' ? 'revoke' : 'grant');\n}`.trim();\n}\n","// Session-scoped LANDING attribution (ADR-016).\n//\n// The carried attribution channel (tracking.ts) persists gclid/fbclid/utm_*\n// for 90 days so journey stitching and conversion writeback keep working\n// across sessions. This module answers a different question — \"what did THIS\n// session's landing URL actually carry?\" — so the dashboard's source label is\n// never poisoned by a click from an earlier session.\n//\n// One localStorage record, keyed to the current session id and overwritten\n// whenever a new session is minted: self-cleaning, O(1) storage, survives\n// in-webview reloads (localStorage, not cookies — Meta/IG webviews silently\n// drop cookie writes, the exact failure mode the carried channel already\n// engineers around). An in-memory mirror covers storage-blocked environments.\n\nimport { getTrackingQueryValues, TRACKING_PARAM_KEYS, type TrackingParamKey } from \"./tracking\";\n\n/**\n * localStorage key for the landing-params record (same `_aranova_track_`\n * family as the carried-channel cookie mirrors).\n */\nexport const LANDING_STORAGE_KEY = \"_aranova_track_landing\";\n\n/**\n * Serialized landing record: the params present in the landing URL of the\n * session identified by `session_id`.\n */\nexport interface StoredLandingRecord {\n session_id: string;\n params: Partial<Record<TrackingParamKey, string>>;\n}\n\nlet memoryRecord: StoredLandingRecord | null = null;\n\nfunction sanitizeParams(value: unknown): Partial<Record<TrackingParamKey, string>> {\n if (typeof value !== \"object\" || value === null) return {};\n const source = value as Record<string, unknown>;\n return TRACKING_PARAM_KEYS.reduce<Partial<Record<TrackingParamKey, string>>>((params, key) => {\n const entry = source[key];\n if (typeof entry === \"string\" && entry.length > 0) params[key] = entry;\n return params;\n }, {});\n}\n\nfunction readStoredRecord(): StoredLandingRecord | null {\n try {\n const raw = window.localStorage.getItem(LANDING_STORAGE_KEY);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as Partial<StoredLandingRecord>;\n if (typeof parsed.session_id !== \"string\" || parsed.session_id.length === 0) return null;\n return { session_id: parsed.session_id, params: sanitizeParams(parsed.params) };\n } catch {\n return null;\n }\n}\n\nfunction writeRecord(record: StoredLandingRecord): void {\n memoryRecord = record;\n try {\n window.localStorage.setItem(LANDING_STORAGE_KEY, JSON.stringify(record));\n } catch {\n // Storage blocked — the in-memory mirror above still serves this page.\n }\n}\n\nfunction captureFromUrl(url?: string): Partial<Record<TrackingParamKey, string>> {\n try {\n const resolved = new URL(url ?? window.location.href, window.location.origin);\n return getTrackingQueryValues(resolved.searchParams);\n } catch {\n return {};\n }\n}\n\n/**\n * Return the landing params for `sessionId`, capturing them from the current\n * URL when no record for that session exists yet.\n *\n * First-wins: a record whose `session_id` matches is returned as-is (a second\n * tab's URL never clobbers the session's true landing). A missing or\n * mismatched record means a new session just started — the current URL IS that\n * session's landing, so it is captured and persisted. Read-only with respect\n * to the carried channel: never touches cookies. Never throws; returns `{}`\n * during SSR.\n */\nexport function getOrCaptureLandingParams(\n sessionId: string,\n url?: string,\n): Partial<Record<TrackingParamKey, string>> {\n if (typeof window === \"undefined\") return {};\n\n const stored = readStoredRecord();\n if (stored && stored.session_id === sessionId) {\n memoryRecord = stored;\n return stored.params;\n }\n if (memoryRecord && memoryRecord.session_id === sessionId) {\n return memoryRecord.params;\n }\n\n const record: StoredLandingRecord = { session_id: sessionId, params: captureFromUrl(url) };\n writeRecord(record);\n return record.params;\n}\n\n/**\n * The 7 landing wire fields, null-filled. Key PRESENCE tells the backend the\n * landing is explicitly known; when it is NOT known the keys must be omitted\n * entirely so the backend falls back to parsing first_page.\n */\nexport interface LandingPayloadFields {\n landing_gclid: string | null;\n landing_fbclid: string | null;\n landing_utm_source: string | null;\n landing_utm_medium: string | null;\n landing_utm_campaign: string | null;\n landing_utm_term: string | null;\n landing_utm_content: string | null;\n}\n\n/**\n * Build the landing portion of a session payload — the single place the\n * \"present iff known\" wire contract is enforced. Returns `{}` (omit the keys)\n * when there is no landing knowledge: during SSR the session's landing URL is\n * simply not observable, and sending explicit nulls would wrongly tell the\n * backend \"this session landed with no params\", suppressing its fallback.\n */\nexport function buildLandingPayloadFields(\n sessionId: string,\n override?: Partial<Record<TrackingParamKey, string>>,\n): Partial<LandingPayloadFields> {\n const params =\n override ?? (typeof window === \"undefined\" ? null : getOrCaptureLandingParams(sessionId));\n if (params === null) return {};\n return {\n landing_gclid: params.gclid ?? null,\n landing_fbclid: params.fbclid ?? null,\n landing_utm_source: params.utm_source ?? null,\n landing_utm_medium: params.utm_medium ?? null,\n landing_utm_campaign: params.utm_campaign ?? null,\n landing_utm_term: params.utm_term ?? null,\n landing_utm_content: params.utm_content ?? null,\n };\n}\n\n/**\n * Drop the landing record (localStorage + memory). Paired with\n * `resetTrackingIdentity()`; also used by tests.\n */\nexport function clearLandingRecord(): void {\n memoryRecord = null;\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.removeItem(LANDING_STORAGE_KEY);\n } catch {\n // ignored\n }\n}\n","// Consent-gated, de-duped orchestration around the raw `fireGtagConversion` (GAP28).\n//\n// Consent v2 (opt-out model): fire unless the visitor's effective consent is an\n// explicit, unexpired decline. There is no \"pending\" state and therefore no\n// queue — the default visitor converts in real time.\n//\n// `fireGtagConversion` is itself browser-gated and never throws, so this is safe to call\n// from the isomorphic sales `record()` — server-side it simply no-ops.\n\nimport { getConsentState } from \"../consent\";\nimport { fireGtagConversion, type GtagConversionInput } from \"../gtag\";\n\nconst DEDUP_PREFIX = \"_aranova_conv_\";\n\nfunction dedupKey(input: GtagConversionInput): string {\n return `${DEDUP_PREFIX}${input.transactionId ?? \"\"}:${input.sendTo}`;\n}\n\n// Has this (transaction_id, send_to) already fired? Read-only — the key is written ONLY\n// after a successful fire (see `fireOnce`), so a fire that never happened (e.g. gtag not\n// ready yet) is never suppressed on retry. Best-effort: a blocked sessionStorage reads as\n// \"not fired\" so the conversion still gets a chance.\nfunction alreadyFired(input: GtagConversionInput): boolean {\n if (!input.transactionId || typeof window === \"undefined\") return false;\n try {\n return window.sessionStorage.getItem(dedupKey(input)) !== null;\n } catch {\n return false;\n }\n}\n\nfunction markFired(input: GtagConversionInput): void {\n if (!input.transactionId || typeof window === \"undefined\") return;\n try {\n window.sessionStorage.setItem(dedupKey(input), \"1\");\n } catch {\n // sessionStorage unavailable — Google's counting_type is the authoritative backstop\n }\n}\n\n// Fire once: skip if already fired, and only record the guard AFTER the fire succeeds.\nfunction fireOnce(input: GtagConversionInput): void {\n if (alreadyFired(input)) return;\n if (fireGtagConversion(input)) markFired(input);\n}\n\n/** Fire a conversion through the consent gate + de-dup guard. */\nexport function fireConversionWithConsent(input: GtagConversionInput): void {\n if (getConsentState() === \"denied\") return;\n fireOnce(input);\n}\n\n/**\n * Flush conversions queued while consent was pending.\n *\n * @deprecated No-op since consent v2 — there is no \"pending\" state, so nothing\n * is ever queued. Kept exported so pre-v2 integrations keep compiling.\n */\nexport function flushPendingConversions(): void {\n // intentionally empty\n}\n","// The client tracking config the SDK reads at runtime (GAP28 / ENG-46).\n//\n// The browser fetches the per-business object published to R2/CDN. This module is a\n// TOLERANT reader — it ignores unknown fields, defaults every field, and never throws — so\n// the backend can add fields freely (additive-only within the `v1` schema major) without\n// breaking an older SDK, and a newer object never breaks an older reader. See\n// docs/tracking-package/conversion-config-schema.md for the contract.\n\nexport interface ServiceFiring {\n send_to: string;\n /** Action's configured default value (cents); the SDK fires it only when a sale has no amount. */\n value_cents?: number | null;\n currency?: string | null;\n}\n\n/** Serializable on-page trigger (owned by tracking-core/src/events/trigger-spec.ts). The shape\n * varies by `event_type`; only the parameter for that type is set. */\nexport interface ConfigTriggerSpec {\n event_type: string;\n threshold_percent?: number;\n threshold_seconds?: number;\n page_threshold?: number;\n page_name?: string;\n}\n\n/** One unified conversion goal: a revenue `sale` or an on-page `event`. */\nexport interface ConversionGoal {\n key: string;\n label?: string;\n kind: \"sale\" | \"event\";\n /** Structured fire-when for event-goals; null for sales. */\n trigger: ConfigTriggerSpec | null;\n firing: ServiceFiring | null;\n}\n\nexport interface ConversionConfig {\n schema_version: number;\n config_version: number;\n business_id?: string;\n customer_id?: string | null;\n environment?: string;\n gtag_ids: Record<string, string>;\n meta_pixel_ids: Record<string, string>;\n /** LEGACY: sale-goals only (for pre-unified-goal readers). */\n services: Array<{\n key: string;\n label?: string;\n firing: ServiceFiring | null;\n }>;\n /** Unified goal list (sales + on-page events). Superset of `services`. */\n goals: ConversionGoal[];\n}\n\nexport interface ConversionConfigStore {\n /** Firing config for a goal/service key, or null when it doesn't fire on-site. */\n getFiring(key: string): ServiceFiring | null;\n /** The full goal for a key, or null when unknown. */\n getGoal(key: string): ConversionGoal | null;\n /** Every adopted goal (sales + events). */\n listGoals(): ConversionGoal[];\n /** The currently adopted config (baked / cached fallback until the fetch lands). */\n current(): ConversionConfig | null;\n /** True once a config is adopted (seeded synchronously from cache/baked, or fetched). */\n isReady(): boolean;\n /**\n * Run `listener` when a config first becomes available — immediately if already\n * ready, otherwise on the first adopt. Lets auto-fire replay automatic events that\n * occurred before the async CDN fetch resolved. Returns an unsubscribe fn.\n */\n onResolve(listener: () => void): () => void;\n /** Force a background revalidate against the CDN object. */\n revalidate(): Promise<void>;\n}\n\nfunction isStringMap(value: unknown): value is Record<string, string> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Object.values(value).every((v) => typeof v === \"string\")\n );\n}\n\nfunction parseFiring(value: unknown): ServiceFiring | null {\n if (!value || typeof value !== \"object\") return null;\n const f = value as Record<string, unknown>;\n if (typeof f.send_to !== \"string\") return null;\n return {\n send_to: f.send_to,\n value_cents: typeof f.value_cents === \"number\" ? f.value_cents : null,\n currency: typeof f.currency === \"string\" ? f.currency : null,\n };\n}\n\nfunction parseTrigger(value: unknown): ConfigTriggerSpec | null {\n if (!value || typeof value !== \"object\") return null;\n const t = value as Record<string, unknown>;\n if (typeof t.event_type !== \"string\") return null;\n const spec: ConfigTriggerSpec = { event_type: t.event_type };\n if (typeof t.threshold_percent === \"number\") spec.threshold_percent = t.threshold_percent;\n if (typeof t.threshold_seconds === \"number\") spec.threshold_seconds = t.threshold_seconds;\n if (typeof t.page_threshold === \"number\") spec.page_threshold = t.page_threshold;\n if (typeof t.page_name === \"string\") spec.page_name = t.page_name;\n return spec;\n}\n\n/** Tolerant parse of a raw config object — never throws; returns null only when unusable. */\nexport function parseConversionConfig(raw: unknown): ConversionConfig | null {\n if (!raw || typeof raw !== \"object\") return null;\n const obj = raw as Record<string, unknown>;\n const servicesRaw = Array.isArray(obj.services) ? obj.services : [];\n const services = servicesRaw.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n const s = entry as Record<string, unknown>;\n if (typeof s.key !== \"string\") return [];\n return [\n {\n key: s.key,\n label: typeof s.label === \"string\" ? s.label : undefined,\n firing: parseFiring(s.firing),\n },\n ];\n });\n const goalsRaw = Array.isArray(obj.goals) ? obj.goals : null;\n // Back-compat: an object from a pre-unified-goal backend has no `goals` — derive them from\n // the legacy `services` (all sale-goals) so the store always has a unified list.\n const goals: ConversionGoal[] = goalsRaw\n ? goalsRaw.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n const g = entry as Record<string, unknown>;\n if (typeof g.key !== \"string\") return [];\n return [\n {\n key: g.key,\n label: typeof g.label === \"string\" ? g.label : undefined,\n kind: g.kind === \"event\" ? \"event\" : \"sale\",\n trigger: parseTrigger(g.trigger),\n firing: parseFiring(g.firing),\n },\n ];\n })\n : services.map((s) => ({\n key: s.key,\n label: s.label,\n kind: \"sale\" as const,\n trigger: null,\n firing: s.firing,\n }));\n return {\n schema_version: typeof obj.schema_version === \"number\" ? obj.schema_version : 1,\n config_version: typeof obj.config_version === \"number\" ? obj.config_version : 0,\n business_id: typeof obj.business_id === \"string\" ? obj.business_id : undefined,\n customer_id: typeof obj.customer_id === \"string\" ? obj.customer_id : null,\n environment: typeof obj.environment === \"string\" ? obj.environment : undefined,\n gtag_ids: isStringMap(obj.gtag_ids) ? obj.gtag_ids : {},\n meta_pixel_ids: isStringMap(obj.meta_pixel_ids) ? obj.meta_pixel_ids : {},\n services,\n goals,\n };\n}\n\n// --- stale-while-revalidate cache (sessionStorage) -----------------------------------------\n\nconst CACHE_PREFIX = \"_aranova_cfg_\";\n\ninterface CachedEntry {\n etag: string | null;\n config: ConversionConfig;\n}\n\nfunction cacheKey(url: string): string {\n return `${CACHE_PREFIX}${url}`;\n}\n\nfunction readCache(url: string): CachedEntry | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.sessionStorage.getItem(cacheKey(url));\n if (!raw) return null;\n const parsed = JSON.parse(raw) as { etag?: unknown; config?: unknown };\n const config = parseConversionConfig(parsed.config);\n if (!config) return null;\n return {\n etag: typeof parsed.etag === \"string\" ? parsed.etag : null,\n config,\n };\n } catch {\n return null;\n }\n}\n\nfunction writeCache(url: string, entry: CachedEntry): void {\n if (typeof window === \"undefined\") return;\n try {\n window.sessionStorage.setItem(cacheKey(url), JSON.stringify(entry));\n } catch {\n // sessionStorage unavailable — runtime adoption still works, just not across inits\n }\n}\n\nexport interface ResolveConversionConfigOptions {\n /** Full URL of the per-business CDN object. */\n cdnUrl: string;\n /** Offline-correct fallback (e.g. the CLI-baked snapshot). */\n baked?: ConversionConfig | null;\n /** Injectable for tests / non-global-fetch runtimes. */\n fetchImpl?: typeof fetch;\n}\n\n/**\n * Resolve the config with stale-while-revalidate: seed synchronously from the\n * sessionStorage cache (or the baked fallback), then conditionally re-fetch the CDN object\n * with `If-None-Match`. A fetched object is adopted only if its `config_version` is strictly\n * greater than what's cached, so a reordered edge copy can't downgrade fresher state.\n * Non-blocking and browser-only; a failed fetch leaves the seed in place.\n */\nexport function resolveConversionConfig(\n options: ResolveConversionConfigOptions,\n): ConversionConfigStore {\n const cached = readCache(options.cdnUrl);\n let current: ConversionConfig | null = cached?.config ?? options.baked ?? null;\n let etag: string | null = cached?.etag ?? null;\n const goalsByKey = new Map<string, ConversionGoal>();\n const resolveListeners = new Set<() => void>();\n\n function rebuildIndex(): void {\n goalsByKey.clear();\n for (const goal of current?.goals ?? []) {\n goalsByKey.set(goal.key, goal);\n }\n }\n\n function notifyResolved(): void {\n // One-shot: only the FIRST adoption matters for replay. Snapshot then clear so a\n // listener that re-subscribes inside its callback isn't double-run.\n const listeners = [...resolveListeners];\n resolveListeners.clear();\n // Isolate each listener: the set is already cleared, so one throwing subscriber\n // must not drop the others' buffered replays. Swallow (best-effort) to match the\n // SDK's policy of never surfacing tracking errors to the host page.\n for (const listener of listeners) {\n try {\n listener();\n } catch {\n // never let one subscriber break conversion replay\n }\n }\n }\n\n function adopt(next: ConversionConfig | null, nextEtag: string | null): void {\n if (!next) return;\n if (current && next.config_version <= current.config_version) return;\n const wasEmpty = current === null;\n current = next;\n etag = nextEtag;\n rebuildIndex();\n writeCache(options.cdnUrl, { etag, config: next });\n if (wasEmpty) notifyResolved();\n }\n\n async function revalidate(): Promise<void> {\n if (typeof window === \"undefined\") return;\n try {\n const doFetch = options.fetchImpl ?? globalThis.fetch;\n if (!doFetch) return;\n const headers: Record<string, string> = {};\n if (etag) headers[\"If-None-Match\"] = etag;\n const response = await doFetch(options.cdnUrl, {\n method: \"GET\",\n headers,\n });\n if (response.status === 304 || !response.ok) return;\n adopt(parseConversionConfig(await response.json()), response.headers.get(\"ETag\"));\n } catch {\n // best-effort; the cached / baked fallback stays in place\n }\n }\n\n rebuildIndex();\n void revalidate();\n\n return {\n getFiring: (key) => goalsByKey.get(key)?.firing ?? null,\n getGoal: (key) => goalsByKey.get(key) ?? null,\n listGoals: () => [...goalsByKey.values()],\n current: () => current,\n isReady: () => current !== null,\n onResolve: (listener) => {\n if (current !== null) {\n listener();\n return () => {};\n }\n resolveListeners.add(listener);\n return () => resolveListeners.delete(listener);\n },\n revalidate,\n };\n}\n","import type { SupportedCurrency } from \"./schema\";\n\n/**\n * Money conversion helpers.\n *\n * The API speaks **integer minor units (cents)** exclusively. These helpers move\n * between a human-facing major amount (dollars) and cents, and format cents for\n * display — so a consumer always has both representations without float math.\n */\n\n// Minor-unit exponent per supported currency (USD/CAD = 2 decimal places).\nconst MINOR_UNIT_EXPONENT: Record<SupportedCurrency, number> = {\n USD: 2,\n CAD: 2,\n};\n\nfunction exponentFor(currency: SupportedCurrency): number {\n return MINOR_UNIT_EXPONENT[currency] ?? 2;\n}\n\n/**\n * Convert a major amount (dollars `250.5`) to integer minor units (`25050`).\n *\n * Convenience only — the wire is always integer cents. Uses float multiply +\n * `Math.round`, so values that aren't exactly representable in binary float\n * (e.g. `1.005`) can round to the neighbouring cent. If you already hold an\n * exact cents integer, pass it straight through and skip this helper.\n */\nexport function toMinor(amount: number, currency: SupportedCurrency): number {\n return Math.round(amount * 10 ** exponentFor(currency));\n}\n\n/** Convert integer minor units (`25050`) to a major amount (`250.5`). */\nexport function fromMinor(cents: number, currency: SupportedCurrency): number {\n return cents / 10 ** exponentFor(currency);\n}\n\n/**\n * Format integer minor units as a localized currency string (e.g. `\"$250.50\"`).\n * Uses the built-in `Intl.NumberFormat` — no extra dependency.\n */\nexport function formatMoney(cents: number, currency: SupportedCurrency, locale?: string): string {\n return new Intl.NumberFormat(locale, { style: \"currency\", currency }).format(\n fromMinor(cents, currency),\n );\n}\n\n/**\n * Format an ISO timestamp in a specific IANA time zone (e.g. `America/Toronto`),\n * so dashboards stop hand-rolling `Intl`. Defaults to a short date-time; pass\n * `opts` to override fields. The `timeZone` is always forced to the argument.\n */\nexport function formatDateInTz(\n iso: string,\n timeZone: string,\n opts?: Intl.DateTimeFormatOptions,\n locale?: string,\n): string {\n const date = new Date(iso);\n // Guard malformed input: Intl.format(Invalid Date) throws a RangeError.\n if (Number.isNaN(date.getTime())) return iso;\n return new Intl.DateTimeFormat(locale, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n ...opts,\n timeZone,\n }).format(date);\n}\n","// Auto-fire on-page conversions for AUTOMATIC event-goals (GAP28 / unified-goal ADR).\n//\n// The SDK's automatic detectors (scroll_depth, time_on_site, multi_page_session,\n// specific_page_visit, page_view, form_start) already emit analytics events via\n// `client.trackEvent`. This layer observes those events and ALSO fires a\n// `gtag('event','conversion')` when a published EVENT-goal's trigger threshold is met — so the\n// consumer writes ZERO conversion code for automatic goals (the config drives everything).\n//\n// `phone_click` is the one manual event we ALSO auto-fire: a `tel:` tap (captured by\n// `attachPhoneClickCapture`) is an unambiguous on-site conversion, so a linked phone_click\n// event-goal fires with zero consumer code (see thresholdMet). The other manual event-goals\n// (form_submit/cta_click) are NOT auto-fired — the consumer fires them via `trackConversion`.\n// Sales fire via `recordSale`.\n\nimport type { TrackingClient, TrackEventInput } from \"../ingest\";\nimport type { ConversionConfigStore, ConversionGoal } from \"./conversion-config\";\nimport { fireConversionWithConsent } from \"./conversion-firing\";\nimport { fromMinor } from \"./sales/money\";\nimport type { SupportedCurrency } from \"./sales/schema\";\n\n// Does an automatic detector event satisfy this goal's trigger threshold? The detector only\n// emits at the consumer's configured analytics thresholds; a goal whose threshold the detector\n// never emits simply won't fire (a mismatch surfaced by the heartbeat report, never wrong).\nfunction thresholdMet(\n goal: ConversionGoal,\n eventType: string,\n metadata: Record<string, unknown>,\n): boolean {\n const t = goal.trigger;\n if (!t || t.event_type !== eventType) return false;\n switch (eventType) {\n case \"scroll_depth\":\n return (\n typeof metadata.depth_percent === \"number\" &&\n t.threshold_percent != null &&\n metadata.depth_percent >= t.threshold_percent\n );\n case \"time_on_site\":\n // The event carries duration_ms; the goal threshold is in seconds.\n return (\n typeof metadata.duration_ms === \"number\" &&\n t.threshold_seconds != null &&\n metadata.duration_ms >= t.threshold_seconds * 1000\n );\n case \"multi_page_session\":\n return (\n typeof metadata.page_count === \"number\" &&\n t.page_threshold != null &&\n metadata.page_count >= t.page_threshold\n );\n case \"specific_page_visit\":\n return typeof metadata.page_name === \"string\" && metadata.page_name === t.page_name;\n case \"page_view\":\n case \"form_start\":\n case \"phone_click\":\n // No threshold — fire whenever the detector emits. phone_click is captured by\n // attachPhoneClickCapture (a tel: tap); its presence IS the conversion.\n return true;\n default:\n return false; // unknown event_type (older SDK vs newer config) → no fire\n }\n}\n\nfunction currentPath(): string {\n return typeof window === \"undefined\" ? \"\" : window.location.pathname;\n}\n\nexport interface ConversionAutoFire {\n /** Fire any matching automatic event-goal's conversion for a just-emitted detector event. */\n onAutomaticEvent(eventType: string, metadata: Record<string, unknown>): void;\n}\n\n// Bound the pre-config buffer so a page that never resolves its config (offline, bad\n// URL) can't grow it without limit.\nconst MAX_BUFFERED_EVENTS = 50;\n\n/** Build the auto-fire matcher bound to a config store. */\nexport function createConversionAutoFire(\n store: Pick<ConversionConfigStore, \"listGoals\" | \"isReady\" | \"onResolve\">,\n): ConversionAutoFire {\n // Detectors fire synchronously, but the CDN config resolves async. The scroll_depth\n // initial-check in particular fires at page load — before a cold-cache fetch lands —\n // and the detector won't re-emit that threshold on the page. Buffer events that arrive\n // before the config is ready and replay them on the first resolve, so an early trigger\n // still converts (a beat late) instead of being silently dropped.\n const pending: Array<{ eventType: string; metadata: Record<string, unknown> }> = [];\n let subscribed = false;\n\n function fireMatching(eventType: string, metadata: Record<string, unknown>): void {\n for (const goal of store.listGoals()) {\n if (goal.kind !== \"event\" || !goal.firing) continue;\n if (!thresholdMet(goal, eventType, metadata)) continue;\n const firing = goal.firing;\n const cents = firing.value_cents ?? null;\n const currency = firing.currency ?? null;\n fireConversionWithConsent({\n sendTo: firing.send_to,\n value: cents != null && currency ? fromMinor(cents, currency as SupportedCurrency) : null,\n currency,\n // Page-scoped txn id → fire once per (goal, path) per session; engagement conversions\n // shouldn't re-fire as the visitor scrolls back and forth or re-enters a page.\n transactionId: `auto:${goal.key}:${currentPath()}`,\n });\n }\n }\n\n return {\n onAutomaticEvent(eventType, metadata) {\n if (store.isReady()) {\n fireMatching(eventType, metadata);\n return;\n }\n // Config still loading — buffer (bounded) and replay on the first resolve.\n if (pending.length < MAX_BUFFERED_EVENTS) pending.push({ eventType, metadata });\n if (!subscribed) {\n subscribed = true;\n store.onResolve(() => {\n const buffered = pending.splice(0);\n for (const event of buffered) fireMatching(event.eventType, event.metadata);\n });\n }\n },\n };\n}\n\n/**\n * Wrap a {@link TrackingClient} so every automatic event it tracks ALSO drives conversion\n * auto-fire. Pass the wrapped client to the `attach*` detectors. The auto-fire is best-effort\n * and never breaks ingest.\n */\nexport function withConversionAutoFire(\n client: TrackingClient,\n autoFire: ConversionAutoFire,\n): TrackingClient {\n return {\n ...client,\n trackEvent: (input: TrackEventInput) => {\n client.trackEvent(input);\n try {\n autoFire.onAutomaticEvent(input.eventType, input.metadata ?? {});\n } catch {\n // never let conversion firing break analytics ingest\n }\n },\n };\n}\n","// Visitor + session identity for the tracking SDK.\n//\n// Visitor: persistent localStorage UUID, never expires until the user clears\n// browser storage. Used for cross-session correlation.\n//\n// Session: rolling 30-minute idle window. Regenerated when more than\n// SESSION_IDLE_MS has passed since the last event. Matches the behavior of\n// GA4, PostHog, Mixpanel, etc., so analytics is comparable.\n\nimport { clearLandingRecord } from \"./landing\";\n\n/**\n * localStorage key for the persistent visitor id.\n */\nexport const VISITOR_STORAGE_KEY = \"aranova_tracking_visitor\";\n\n/**\n * localStorage key for the rolling session id state.\n */\nexport const SESSION_STORAGE_KEY = \"aranova_tracking_session\";\n\n/**\n * Idle window before a new session id is created.\n */\nexport const SESSION_IDLE_MS = 30 * 60 * 1000;\n\n/**\n * Serialized session state stored in localStorage.\n */\nexport interface StoredSession {\n /** Client-generated session UUID. */\n id: string;\n /** Unix timestamp in milliseconds for the most recent event/session touch. */\n last_event_at: number;\n}\n\nfunction safeUuid(): string {\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\")\n return crypto.randomUUID();\n // Fallback for ancient browsers — not cryptographically perfect but unique enough.\n return `${Date.now().toString(16)}-${Math.random().toString(16).slice(2)}-${Math.random().toString(16).slice(2)}`;\n}\n\nfunction readLocalStorage(key: string): string | null {\n try {\n return window.localStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeLocalStorage(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value);\n } catch {\n // Storage may be denied (private mode, blocked cookies, quota). Caller is\n // responsible for degrading gracefully.\n }\n}\n\n/**\n * Return the persistent visitor id for this browser profile.\n *\n * Creates and stores a new id when one does not already exist. During SSR,\n * returns an ephemeral id because browser storage is unavailable.\n */\nexport function getVisitorId(): string {\n if (typeof window === \"undefined\") return safeUuid();\n\n const existing = readLocalStorage(VISITOR_STORAGE_KEY);\n if (existing && existing.length > 0) return existing;\n\n const fresh = safeUuid();\n writeLocalStorage(VISITOR_STORAGE_KEY, fresh);\n return fresh;\n}\n\n/**\n * Result from `getOrRotateSessionId()`.\n */\nexport interface SessionIdResult {\n /** Current session id. */\n id: string;\n /** Whether this call created a new session. */\n isNew: boolean;\n}\n\n/**\n * Return the current session id, rotating it after the idle window expires.\n *\n * Also refreshes `last_event_at` for active sessions.\n */\nexport function getOrRotateSessionId(now: number = Date.now()): SessionIdResult {\n if (typeof window === \"undefined\") return { id: safeUuid(), isNew: true };\n\n const raw = readLocalStorage(SESSION_STORAGE_KEY);\n if (raw) {\n try {\n const parsed = JSON.parse(raw) as Partial<StoredSession>;\n if (typeof parsed.id === \"string\" && typeof parsed.last_event_at === \"number\") {\n if (now - parsed.last_event_at <= SESSION_IDLE_MS) {\n const refreshed: StoredSession = { id: parsed.id, last_event_at: now };\n writeLocalStorage(SESSION_STORAGE_KEY, JSON.stringify(refreshed));\n return { id: parsed.id, isNew: false };\n }\n }\n } catch {\n // Fall through to a fresh session.\n }\n }\n\n const fresh: StoredSession = { id: safeUuid(), last_event_at: now };\n writeLocalStorage(SESSION_STORAGE_KEY, JSON.stringify(fresh));\n return { id: fresh.id, isNew: true };\n}\n\n/**\n * Clear visitor and session identity from localStorage, including the\n * session-scoped landing record (a landing must never outlive its session).\n *\n * Intended for tests, debugging, and explicit user reset flows.\n */\nexport function resetTrackingIdentity(): void {\n clearLandingRecord();\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.removeItem(VISITOR_STORAGE_KEY);\n window.localStorage.removeItem(SESSION_STORAGE_KEY);\n } catch {\n // ignored\n }\n}\n","export * from \"./errors.js\";\nexport * from \"./helpers/parseUtil.js\";\nexport * from \"./helpers/typeAliases.js\";\nexport * from \"./helpers/util.js\";\nexport * from \"./types.js\";\nexport * from \"./ZodError.js\";\n","export var util;\n(function (util) {\n util.assertEqual = (_) => { };\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && Number.isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array.map((val) => (typeof val === \"string\" ? `'${val}'` : val)).join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nexport var objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nexport const ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return Number.isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n","import { util } from \"./helpers/util.js\";\nexport const ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nexport const quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nexport class ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n const firstEl = sub.path[0];\n fieldErrors[firstEl] = fieldErrors[firstEl] || [];\n fieldErrors[firstEl].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n","import { ZodIssueCode } from \"../ZodError.js\";\nimport { util, ZodParsedType } from \"../helpers/util.js\";\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"bigint\")\n message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\nexport default errorMap;\n","import defaultErrorMap from \"./locales/en.js\";\nlet overrideErrorMap = defaultErrorMap;\nexport { defaultErrorMap };\nexport function setErrorMap(map) {\n overrideErrorMap = map;\n}\nexport function getErrorMap() {\n return overrideErrorMap;\n}\n","import { getErrorMap } from \"../errors.js\";\nimport defaultErrorMap from \"../locales/en.js\";\nexport const makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nexport const EMPTY_PATH = [];\nexport function addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === defaultErrorMap ? undefined : defaultErrorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nexport class ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" && (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nexport const INVALID = Object.freeze({\n status: \"aborted\",\n});\nexport const DIRTY = (value) => ({ status: \"dirty\", value });\nexport const OK = (value) => ({ status: \"valid\", value });\nexport const isAborted = (x) => x.status === \"aborted\";\nexport const isDirty = (x) => x.status === \"dirty\";\nexport const isValid = (x) => x.status === \"valid\";\nexport const isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n","export var errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n // biome-ignore lint:\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message?.message;\n})(errorUtil || (errorUtil = {}));\n","import { ZodError, ZodIssueCode, } from \"./ZodError.js\";\nimport { defaultErrorMap, getErrorMap } from \"./errors.js\";\nimport { errorUtil } from \"./helpers/errorUtil.js\";\nimport { DIRTY, INVALID, OK, ParseStatus, addIssueToContext, isAborted, isAsync, isDirty, isValid, makeIssue, } from \"./helpers/parseUtil.js\";\nimport { util, ZodParsedType, getParsedType } from \"./helpers/util.js\";\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (Array.isArray(this._key)) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message ?? ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: message ?? required_error ?? ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: message ?? invalid_type_error ?? ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nexport class ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n const ctx = {\n common: {\n issues: [],\n async: params?.async ?? false,\n contextualErrorMap: params?.errorMap,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if (err?.message?.toLowerCase()?.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params?.errorMap,\n async: true,\n },\n path: params?.path || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\" ? refinementData(val, ctx) : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n let secondsRegexSource = `[0-5]\\\\d`;\n if (args.precision) {\n secondsRegexSource = `${secondsRegexSource}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n secondsRegexSource = `${secondsRegexSource}(\\\\.\\\\d+)?`;\n }\n const secondsQuantifier = args.precision ? \"+\" : \"?\"; // require seconds if precision is nonzero\n return `([01]\\\\d|2[0-3]):[0-5]\\\\d(:${secondsRegexSource})${secondsQuantifier}`;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n if (!header)\n return false;\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (\"typ\" in decoded && decoded?.typ !== \"JWT\")\n return false;\n if (!decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nexport class ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n offset: options?.offset ?? false,\n local: options?.local ?? false,\n ...errorUtil.errToObj(options?.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof options?.precision === \"undefined\" ? null : options?.precision,\n ...errorUtil.errToObj(options?.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options?.position,\n ...errorUtil.errToObj(options?.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport class ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" || (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null;\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" || ch.kind === \"int\" || ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: params?.coerce ?? false,\n ...processCreateParams(params),\n });\n};\nexport class ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: params?.coerce || false,\n ...processCreateParams(params),\n });\n};\nexport class ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (Number.isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: params?.coerce || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nexport class ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nexport class ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nexport class ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nexport class ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nexport class ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nexport class ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nexport class ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nexport class ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n this._cached = { shape, keys };\n return this._cached;\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") {\n }\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n const defaultError = this._def.errorMap?.(issue, ctx).message ?? ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: errorUtil.errToObj(message).message ?? defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n for (const key of util.objectKeys(mask)) {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n for (const key of util.objectKeys(this.shape)) {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n }\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nexport class ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nexport class ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nexport class ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\n// type ZodTupleItems = [ZodTypeAny, ...ZodTypeAny[]];\nexport class ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nexport class ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nexport class ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nexport class ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nexport class ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [ctx.common.contextualErrorMap, ctx.schemaErrorMap, getErrorMap(), defaultErrorMap].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args ? args : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nexport class ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nexport class ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nexport class ZodEnum extends ZodType {\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(this._def.values);\n }\n if (!this._cache.has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\nZodEnum.create = createZodEnum;\nexport class ZodNativeEnum extends ZodType {\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!this._cache) {\n this._cache = new Set(util.getValidEnumValues(this._def.values));\n }\n if (!this._cache.has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nexport class ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nexport class ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return INVALID;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {\n if (!isValid(base))\n return INVALID;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({\n status: status.value,\n value: result,\n }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nexport { ZodEffects as ZodTransformer };\nexport class ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nexport class ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nexport class ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\" ? params.default : () => params.default,\n ...processCreateParams(params),\n });\n};\nexport class ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nexport class ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nexport const BRAND = Symbol(\"zod_brand\");\nexport class ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nexport class ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nexport class ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result) ? result.then((data) => freeze(data)) : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\n////////////////////////////////////////\n////////////////////////////////////////\n////////// //////////\n////////// z.custom //////////\n////////// //////////\n////////////////////////////////////////\n////////////////////////////////////////\nfunction cleanParams(params, data) {\n const p = typeof params === \"function\" ? params(data) : typeof params === \"string\" ? { message: params } : params;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n return p2;\n}\nexport function custom(check, _params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n const r = check(data);\n if (r instanceof Promise) {\n return r.then((r) => {\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n });\n }\n if (!r) {\n const params = cleanParams(_params, data);\n const _fatal = params.fatal ?? fatal ?? true;\n ctx.addIssue({ code: \"custom\", ...params, fatal: _fatal });\n }\n return;\n });\n return ZodAny.create();\n}\nexport { ZodType as Schema, ZodType as ZodSchema };\nexport const late = {\n object: ZodObject.lazycreate,\n};\nexport var ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\n// requires TS 4.4+\nclass Class {\n constructor(..._) { }\n}\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nexport const coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nexport { anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, dateType as date, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, instanceOfType as instanceof, intersectionType as intersection, lazyType as lazy, literalType as literal, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, recordType as record, setType as set, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, voidType as void, };\nexport const NEVER = INVALID;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `page_view` event.\n *\n * The SDK emits this on initial load, SPA route changes, and bfcache restores.\n * Consumers do not call `trackEvent('page_view', ...)`; registering\n * `automatic: { page_view: {} }` enables the SDK-owned trigger.\n */\nexport const pageViewMetadataSchema = z\n .object({\n page: z\n .object({\n title: z.string().nullable(),\n path: z.string(),\n search: z.string(),\n hash: z.string(),\n })\n .strict(),\n referrer: z.string().nullable(),\n // `.nullable().optional()` — absent (undefined) OR explicit null OR a\n // real viewport object. Mirrors Pydantic's `_Viewport | None = None`\n // on the backend side so the drift test stays clean.\n viewport: z\n .object({\n w: z.number(),\n h: z.number(),\n })\n .strict()\n .nullable()\n .optional(),\n })\n .strict();\n\nexport type PageViewMetadata = z.infer<typeof pageViewMetadataSchema>;\n\n/**\n * Registration config for automatic `page_view`.\n *\n * `page_view` is required in every trigger registry and currently has no\n * options. Use `{ page_view: {} }`.\n */\nexport const pageViewConfigSchema = z.object({}).strict();\nexport type PageViewConfig = z.infer<typeof pageViewConfigSchema>;\n","// Auto page_view emission. Fires once on attach, then again on every SPA\n// navigation. Detects navigation via three signals:\n// - history.pushState (patched)\n// - history.replaceState (patched)\n// - popstate event (back/forward buttons)\n// - pageshow with event.persisted === true (back-forward cache restore)\n//\n// The Next.js provider can opt out of this and use `usePathname` instead so\n// it picks up App Router transitions reliably without monkey-patching globals.\n\nimport { pageViewMetadataSchema, type PageViewMetadata } from \"./events/page-view\";\nimport type { TrackingClient } from \"./ingest\";\n\n// Re-export so existing callers that import `PageViewMetadata` from\n// `./page-view` keep compiling. The canonical definition now lives in\n// `events/page-view.ts` and is derived from a Zod schema.\nexport type { PageViewMetadata } from \"./events/page-view\";\n\n/**\n * Session-storage key used to maintain the in-tab SPA referrer chain.\n */\nexport const LAST_FIRED_URL_STORAGE_KEY = \"aranova_tracking_last_fired_url\";\n\n// Tracks the previous in-session URL we fired a page_view for. SPA\n// navigation never updates `document.referrer` (the document is never\n// reloaded), so all events would otherwise share the same stale referrer\n// value. We track it ourselves: the referrer for an event at URL X is the\n// last URL we fired a page_view for, falling back to document.referrer for\n// the very first event of the session.\n//\n// Hybrid storage: the in-memory variable is the runtime source of truth\n// (cheap reads, no quota concerns), and sessionStorage is the durability\n// layer (survives full-page reloads and bfcache restoration). On first\n// read per JS context we lazily hydrate from sessionStorage; on every\n// write we update both layers. If sessionStorage is unavailable (private\n// mode, blocked extensions, quota errors) we silently fall back to\n// memory-only — the SDK stays functional, just loses cross-reload\n// referrer continuity in that one tab.\nlet lastFiredUrl: string | null = null;\nlet lastFiredUrlHydrated = false;\n\nfunction readSessionStorage(key: string): string | null {\n try {\n if (typeof window === \"undefined\") return null;\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n}\n\nfunction writeSessionStorage(key: string, value: string): void {\n try {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.setItem(key, value);\n } catch {\n // private mode / blocked / quota — memory-only is fine\n }\n}\n\nfunction deleteSessionStorage(key: string): void {\n try {\n if (typeof window === \"undefined\") return;\n window.sessionStorage.removeItem(key);\n } catch {\n // ignore\n }\n}\n\nfunction getLastFiredUrl(): string | null {\n if (!lastFiredUrlHydrated) {\n lastFiredUrlHydrated = true;\n const stored = readSessionStorage(LAST_FIRED_URL_STORAGE_KEY);\n if (stored !== null) lastFiredUrl = stored;\n }\n return lastFiredUrl;\n}\n\nfunction setLastFiredUrl(url: string): void {\n lastFiredUrl = url;\n lastFiredUrlHydrated = true;\n writeSessionStorage(LAST_FIRED_URL_STORAGE_KEY, url);\n}\n\n/**\n * Clear the in-session URL tracking. Primarily an escape hatch for tests\n * so each test starts with a fresh referrer chain; production code\n * doesn't need this — the singleton client lives for the page lifetime.\n */\nexport function resetPageViewState(): void {\n lastFiredUrl = null;\n lastFiredUrlHydrated = false;\n deleteSessionStorage(LAST_FIRED_URL_STORAGE_KEY);\n}\n\n/**\n * Build canonical `page_view` metadata from the current browser document.\n *\n * Returns `null` outside the browser.\n */\nexport function buildPageViewMetadata(referrerOverride?: string | null): PageViewMetadata | null {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return null;\n // Run the constructed object through the Zod schema so the shape is\n // validated even when the SDK itself is the one building it. If the\n // schema ever drifts from what buildPageViewMetadata emits, the parse\n // throws here and the event is dropped rather than being sent malformed.\n return pageViewMetadataSchema.parse({\n page: {\n title: document.title || null,\n path: window.location.pathname,\n search: window.location.search,\n hash: window.location.hash,\n },\n referrer: referrerOverride !== undefined ? referrerOverride : document.referrer || null,\n viewport: { w: window.innerWidth, h: window.innerHeight },\n });\n}\n\n/**\n * Fire a `page_view` event through the low-level client.\n *\n * Used internally by automatic page view triggers and bfcache restore\n * handling.\n */\nexport function fireManualPageView(client: TrackingClient): void {\n if (typeof window === \"undefined\") return;\n\n const currentHref = window.location.href;\n const previousFiredUrl = getLastFiredUrl();\n\n // Internal SPA referrer: the previous URL we fired a page_view for in this\n // tab. Only counts when it differs from the current URL (a same-URL re-fire\n // — e.g. React StrictMode double-mount in dev, or a bfcache restore to the\n // same page — should not produce a self-referencing referrer).\n const internalReferrer =\n previousFiredUrl !== null && previousFiredUrl !== currentHref ? previousFiredUrl : null;\n\n // External referrer: where the user came from before loading the app.\n // Used as the fallback for the very first page_view of the session.\n const externalReferrer = typeof document !== \"undefined\" ? document.referrer || null : null;\n\n const referrer = internalReferrer ?? externalReferrer;\n\n const metadata = buildPageViewMetadata(referrer);\n client.trackEvent({\n eventType: \"page_view\",\n pageUrl: currentHref,\n metadata: metadata as unknown as Record<string, unknown> | null,\n });\n\n // Only advance the in-session pointer when the URL actually changed, so a\n // same-URL re-fire never poisons the next event's referrer.\n if (currentHref !== previousFiredUrl) {\n setLastFiredUrl(currentHref);\n }\n}\n\n/**\n * Attach a back-forward cache restore listener in isolation. Used by\n * surfaces that have their own SPA detection (e.g. the Next.js provider\n * uses `usePathname`) but still want to capture bfcache restores, which\n * don't go through any router state change.\n *\n * Returns a detach function that removes the listener.\n */\nexport function attachBfcacheRestore(client: TrackingClient): () => void {\n if (typeof window === \"undefined\") return () => {};\n\n function handlePageShow(event: PageTransitionEvent): void {\n if (!event.persisted) return;\n fireManualPageView(client);\n }\n\n window.addEventListener(\"pageshow\", handlePageShow);\n return () => {\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n}\n\nexport interface AttachAutoPageViewOptions {\n /** Skip the initial fire on attach (useful when the host already fired one). */\n skipInitial?: boolean;\n}\n\n/**\n * Attach automatic page view tracking for a browser SPA.\n *\n * Patches history navigation, listens to `popstate`, fires the initial\n * page view unless disabled, and returns a detach function.\n */\nexport function attachAutoPageView(\n client: TrackingClient,\n options: AttachAutoPageViewOptions = {},\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n let lastPath = window.location.pathname + window.location.search;\n\n function maybeFire(): void {\n const current = window.location.pathname + window.location.search;\n if (current === lastPath) return;\n lastPath = current;\n fireManualPageView(client);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n // Defer one tick so the URL is settled before we read it.\n setTimeout(maybeFire, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(maybeFire, 0);\n }\n\n // bfcache restore: when the user clicks an external link and hits the\n // back button, the browser can restore the page from its back-forward\n // cache without re-running any JS lifecycles. `popstate` does NOT fire\n // for bfcache restores, but `pageshow` does, with event.persisted === true.\n // When that happens we fire a fresh page_view so the session reflects\n // the re-entry.\n function handlePageShow(event: PageTransitionEvent): void {\n if (!event.persisted) return;\n fireManualPageView(client);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", maybeFire);\n window.addEventListener(\"pageshow\", handlePageShow);\n\n if (!options.skipInitial) fireManualPageView(client);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", maybeFire);\n window.removeEventListener(\"pageshow\", handlePageShow);\n };\n}\n","// Builds the metadata payload for the sdk_heartbeat event. Called once per\n// new session to report the SDK version and registered trigger configuration\n// back to the Aranova API.\n\nimport type { SdkHeartbeatMetadata } from \"./events/sdk-heartbeat\";\nimport type { TriggerRegistryConfig } from \"./events/registry\";\nimport type { TrackingInstallSurface } from \"./types\";\n\n/**\n * Recursively serialize a value into a JSON-safe form. Converts RegExp\n * instances to their `.source` string so the trigger config can survive\n * `JSON.stringify` without losing information.\n */\nfunction serializeValue(value: unknown): unknown {\n if (value instanceof RegExp) return value.source;\n if (Array.isArray(value)) return value.map(serializeValue);\n if (value !== null && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n out[k] = serializeValue(v);\n }\n return out;\n }\n return value;\n}\n\n/**\n * Build metadata for the SDK-internal `sdk_heartbeat` event.\n *\n * The heartbeat reports package version, install surface, registered trigger\n * names, and non-empty trigger config so the dashboard can show site coverage.\n */\nexport function buildHeartbeatMetadata(\n surface: TrackingInstallSurface,\n sdkVersion: string | null,\n packageName: string | null,\n triggers: TriggerRegistryConfig | null,\n gtagIds: Record<string, string> | null = null,\n): SdkHeartbeatMetadata {\n const automaticNames = triggers ? Object.keys(triggers.automatic) : [];\n const manualNames = triggers?.manual ? Object.keys(triggers.manual) : [];\n\n // Build trigger_config: the init params per event, with RegExp values\n // converted to strings. Skip events with empty config objects.\n let triggerConfig: Record<string, Record<string, unknown>> | null = null;\n if (triggers) {\n const cfg: Record<string, Record<string, unknown>> = {};\n for (const [name, config] of Object.entries(triggers.automatic)) {\n const serialized = serializeValue(config) as Record<string, unknown>;\n if (Object.keys(serialized).length > 0) {\n cfg[name] = serialized;\n }\n }\n if (triggers.manual) {\n for (const [name, config] of Object.entries(triggers.manual)) {\n if (config === undefined) continue;\n const serialized = serializeValue(config) as Record<string, unknown>;\n if (Object.keys(serialized).length > 0) {\n cfg[name] = serialized;\n }\n }\n }\n if (Object.keys(cfg).length > 0) {\n triggerConfig = cfg;\n }\n }\n\n return {\n sdk_version: sdkVersion ?? \"unknown\",\n package_name: packageName,\n surface,\n triggers: {\n automatic: automaticNames,\n manual: manualNames,\n },\n trigger_config: triggerConfig,\n configured_gtag_ids: gtagIds,\n };\n}\n","// Tracking ingest client. Queues events, debounce-flushes them to the\n// /tracking/events endpoint, and degrades silently on errors so a broken\n// network never breaks the host site.\n\nimport { getConsentChoice } from \"./consent\";\nimport { resetPageViewState } from \"./page-view\";\nimport type { PhoneConfig } from \"./phone-field\";\nimport { captureFbc, getFbcCookie, getFbpCookie } from \"./fbq\";\nimport {\n captureTrackingParamsFromLocation,\n createEmptyTrackingParams,\n getCookieValueFromDocument,\n getTrackingParamsFromCookieReader,\n mergeTrackingParams,\n} from \"./tracking\";\nimport type { TriggerRegistryConfig } from \"./events/registry\";\nimport { buildHeartbeatMetadata } from \"./heartbeat\";\nimport { buildLandingPayloadFields, getOrCaptureLandingParams } from \"./landing\";\nimport { getOrRotateSessionId, getVisitorId } from \"./session\";\nimport type {\n TrackingClientContext,\n TrackingEnvironment,\n TrackingInstallSurface,\n TrackingParams,\n TrackingSessionUpsertPayload,\n} from \"./types\";\n\n/**\n * Default debounce window before queued events are flushed.\n */\nexport const DEFAULT_FLUSH_INTERVAL_MS = 2000;\n\n/**\n * Default queue size that triggers an immediate flush.\n */\nexport const DEFAULT_MAX_QUEUE_SIZE = 10;\n\n/**\n * Hard server-side maximum event count per request body.\n */\nexport const HARD_MAX_BATCH = 50;\n\n/**\n * Header used to authenticate public tracking ingest requests.\n */\nexport const API_KEY_HEADER = \"X-Aranova-Api-Key\";\n\n/**\n * Identity headers stamped on every ingest request. Duplicate fields already\n * present in `session.context` but survive body-parse failures so the backend\n * can attribute 422s to the offending SDK install.\n */\nexport const SDK_VERSION_HEADER = \"X-Aranova-Sdk-Version\";\nexport const SDK_PACKAGE_HEADER = \"X-Aranova-Sdk-Package\";\nexport const SDK_SURFACE_HEADER = \"X-Aranova-Sdk-Surface\";\nexport const SDK_ENVIRONMENT_HEADER = \"X-Aranova-Sdk-Environment\";\n\n/**\n * Configuration for the low-level ingest client.\n *\n * Framework packages usually create this for you through `createTracking()`.\n */\nexport interface TrackingClientConfig {\n /** Public tracking API key issued for the business. */\n apiKey: string;\n /** Tracking endpoint base URL, usually ending in `/tracking`. */\n endpoint: string;\n /** SDK surface creating this client. */\n surface: TrackingInstallSurface;\n /** Package version reported in session context and heartbeat metadata. */\n sdkVersion?: string;\n /** Package name reported in session context and heartbeat metadata. */\n packageName?: string;\n /** Trigger registry so the heartbeat can report registered events. */\n triggers?: TriggerRegistryConfig;\n /** Override the default 2s debounce window. */\n flushIntervalMs?: number;\n /** Override the default 10-event batch trigger. */\n maxQueueSize?: number;\n /** Deployment environment label reported in session context. */\n environment?: TrackingEnvironment;\n /** All active gtag IDs, keyed by label. Included in session context. */\n activeGtagIds?: Record<string, string>;\n /** When true, swallow nothing — useful for tests. */\n debug?: boolean;\n /** Phone-field config, carried for parity; the React hook reads it via context. */\n phone?: PhoneConfig;\n}\n\n/**\n * Input accepted by the low-level stringly-typed client.\n *\n * Prefer the typed `trackEvent(eventName, metadata)` facade exposed by\n * `useTracking()` in React/Next integrations.\n */\nexport interface TrackEventInput {\n /** Event name to enqueue. */\n eventType: string;\n /** URL associated with the event. Defaults to the current page URL. */\n pageUrl?: string | null;\n /** Event-specific metadata. */\n metadata?: Record<string, unknown> | null;\n /** Timestamp override. Defaults to queue time. */\n occurredAt?: Date | string | null;\n}\n\ninterface QueuedEvent {\n event_type: string;\n page_url: string | null;\n metadata: Record<string, unknown> | null;\n occurred_at: string | null;\n}\n\n/**\n * Low-level tracking client responsible for queueing and flushing events.\n */\nexport interface TrackingClient {\n /** Enqueue an event for batched delivery. */\n trackEvent: (input: TrackEventInput) => void;\n /** Flush queued events immediately (fetch, non-keepalive). */\n flush: () => Promise<void>;\n /**\n * Flush queued events through the keepalive transport so the request\n * survives document unload. Use from `pagehide`/`visibilitychange:hidden`\n * handlers — a plain `flush()` there is aborted by the browser on unload.\n */\n flushBeacon: () => void;\n /** Return the current rolling session id. */\n getSessionId: () => string;\n /** Return the persistent visitor id. */\n getVisitorId: () => string;\n /** Remove timers/listeners and prevent future flushes. */\n destroy: () => void;\n}\n\ninterface IngestRequestBody {\n session: TrackingSessionUpsertPayload;\n events: Array<{\n event_type: string;\n page_url: string | null;\n metadata: Record<string, unknown> | null;\n occurred_at: string | null;\n }>;\n}\n\nfunction buildContext(\n surface: TrackingInstallSurface,\n sdkVersion: string | null,\n packageName: string | null,\n environment: TrackingEnvironment,\n activeGtagIds: Record<string, string> | null,\n): TrackingClientContext {\n return {\n surface,\n sdk_version: sdkVersion,\n package_name: packageName,\n site_origin: typeof window === \"undefined\" ? null : window.location.origin,\n page_title: typeof document === \"undefined\" ? null : document.title || null,\n referrer: typeof document === \"undefined\" ? null : document.referrer || null,\n environment,\n active_gtag_ids: activeGtagIds,\n };\n}\n\nfunction readTrackingParams(): TrackingParams {\n if (typeof window === \"undefined\") return createEmptyTrackingParams();\n // Capture from URL on every read so the first event in a session reflects the\n // landing-page params even if the cookie helper hasn't run yet.\n try {\n captureTrackingParamsFromLocation();\n } catch {\n // ignore\n }\n return getTrackingParamsFromCookieReader(getCookieValueFromDocument);\n}\n\nfunction consentSnapshot(): Record<string, unknown> | null {\n try {\n // Effective consent + provenance so the dashboard can tell default-granted\n // (opt-out model, no interaction) apart from an explicit choice.\n const choice = getConsentChoice();\n return {\n state: choice.state,\n source: choice.source,\n updated_at: choice.updatedAt,\n expires_at: choice.expiresAt,\n };\n } catch {\n return null;\n }\n}\n\ninterface IdentityHeaders {\n sdkVersion: string;\n packageName: string;\n surface: string;\n environment: string;\n}\n\nasync function postWithFetch(\n url: string,\n body: string,\n apiKey: string,\n identity: IdentityHeaders,\n keepalive: boolean,\n): Promise<void> {\n if (typeof fetch !== \"function\") return;\n try {\n await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n [API_KEY_HEADER]: apiKey,\n [SDK_VERSION_HEADER]: identity.sdkVersion,\n [SDK_PACKAGE_HEADER]: identity.packageName,\n [SDK_SURFACE_HEADER]: identity.surface,\n [SDK_ENVIRONMENT_HEADER]: identity.environment,\n },\n body,\n keepalive,\n // CORS is open on the tracking endpoint; never send cookies.\n credentials: \"omit\",\n mode: \"cors\",\n });\n } catch {\n // fire-and-forget — never throw to the host site\n }\n}\n\nlet globalClient: TrackingClient | null = null;\nlet globalClientKey: string | null = null;\n\nfunction clientConfigKey(config: TrackingClientConfig): string {\n return `${config.apiKey}@${config.endpoint}#${config.surface}`;\n}\n\n/**\n * Return a page-level singleton tracking client. Creating the client anew on\n * every component mount is wrong — React StrictMode double-mounts dev-only,\n * and destroying+recreating the client between the cleanup and re-run strips\n * away the pushState patch that SPA auto page view relies on. A singleton\n * survives all of that: the client lives for the entire page, and providers\n * just attach/detach auto page view against it.\n *\n * If `apiKey` / `endpoint` / `surface` change between calls, the previous\n * singleton is destroyed and a new one replaces it. This covers hot-config\n * changes without leaking state.\n */\nexport function getOrCreateTrackingClient(config: TrackingClientConfig): TrackingClient {\n const key = clientConfigKey(config);\n if (globalClient !== null && globalClientKey === key) {\n return globalClient;\n }\n if (globalClient !== null) {\n globalClient.destroy();\n }\n globalClient = createTrackingClient(config);\n globalClientKey = key;\n return globalClient;\n}\n\n/**\n * Tear down the singleton if any. Primarily an escape hatch for tests where\n * each test should see a fresh client; production code rarely needs this.\n * Also clears the in-session SPA referrer so the next test starts with a\n * fresh referrer chain.\n */\nexport function resetGlobalTrackingClient(): void {\n if (globalClient !== null) {\n globalClient.destroy();\n }\n globalClient = null;\n globalClientKey = null;\n resetPageViewState();\n}\n\n/**\n * Create a low-level ingest client.\n *\n * The client queues events, debounces network flushes, sends an SDK heartbeat\n * once per new session, and swallows network errors so analytics never break\n * the host site.\n */\nexport function createTrackingClient(config: TrackingClientConfig): TrackingClient {\n const flushIntervalMs = config.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;\n const maxQueueSize = Math.min(config.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE, HARD_MAX_BATCH);\n const sdkVersion = config.sdkVersion ?? null;\n const packageName = config.packageName ?? null;\n // Default to 'production' so the wire payload always carries a valid enum\n // value. Sending null would fail the backend's strict enum validation.\n const environment: TrackingEnvironment = config.environment ?? \"production\";\n const activeGtagIds = config.activeGtagIds ?? null;\n const endpointBase = config.endpoint.replace(/\\/$/, \"\");\n const eventsUrl = `${endpointBase}/events`;\n const identityHeaders: IdentityHeaders = {\n sdkVersion: sdkVersion ?? \"\",\n packageName: packageName ?? \"\",\n surface: config.surface,\n environment,\n };\n\n let queue: QueuedEvent[] = [];\n let flushTimer: ReturnType<typeof setTimeout> | null = null;\n let firstPage: string | null = null;\n // Attribution captured synchronously at client creation (before any SPA router\n // can strip the query string). Merged into every session payload as a fallback\n // so a blocked-cookie webview or a stripped URL still attributes.\n let initialParams = createEmptyTrackingParams();\n let destroyed = false;\n\n // Initialize identity early so the first POST has stable values.\n const visitorId = getVisitorId();\n const initialSession = getOrRotateSessionId();\n let sessionId = initialSession.id;\n\n if (typeof window !== \"undefined\") {\n firstPage = window.location.href;\n try {\n initialParams = captureTrackingParamsFromLocation();\n } catch {\n // ignore — never break the host site\n }\n // Pin this session's LANDING params now, before any SPA router strips the\n // query string (reuses the stored record when the session already has one).\n getOrCaptureLandingParams(sessionId);\n try {\n captureFbc();\n } catch {\n // ignore\n }\n }\n\n // Queue an sdk_heartbeat event at the start of every new session.\n function enqueueHeartbeat(): void {\n const metadata = buildHeartbeatMetadata(\n config.surface,\n sdkVersion,\n packageName,\n config.triggers ?? null,\n activeGtagIds,\n );\n queue.push({\n event_type: \"sdk_heartbeat\",\n page_url: typeof window === \"undefined\" ? null : window.location.href,\n metadata: metadata as unknown as Record<string, unknown>,\n occurred_at: new Date().toISOString(),\n });\n }\n\n if (initialSession.isNew) {\n enqueueHeartbeat();\n }\n\n function buildSessionPayload(): TrackingSessionUpsertPayload {\n const rotated = getOrRotateSessionId();\n if (rotated.isNew && rotated.id !== sessionId) {\n // Session rotated mid-page (idle > 30min then user returned).\n enqueueHeartbeat();\n }\n sessionId = rotated.id;\n // Prefer the live cookie/localStorage read; fall back to the init-time\n // snapshot (covers a webview that blocked the cookie AND a router that\n // already stripped the landing URL by flush time).\n const params = mergeTrackingParams(readTrackingParams(), initialParams);\n const context = buildContext(\n config.surface,\n sdkVersion,\n packageName,\n environment,\n activeGtagIds,\n );\n return {\n session_id: sessionId,\n visitor_id: visitorId,\n gclid: params.gclid,\n fbclid: params.fbclid,\n fbc: getFbcCookie(),\n fbp: getFbpCookie(),\n utm_source: params.utm_source,\n utm_medium: params.utm_medium,\n utm_campaign: params.utm_campaign,\n utm_term: params.utm_term,\n utm_content: params.utm_content,\n // Landing params for the CURRENT session id — captured on the spot when\n // the session just rotated (the current URL is the rotated session's\n // landing), reused from the stored record otherwise. Keys are omitted\n // entirely when the landing isn't observable (SSR).\n ...buildLandingPayloadFields(sessionId),\n first_page: firstPage,\n consent_state: consentSnapshot(),\n context,\n };\n }\n\n function scheduleFlush(): void {\n if (flushTimer !== null || destroyed) return;\n flushTimer = setTimeout(() => {\n flushTimer = null;\n void flush();\n }, flushIntervalMs);\n }\n\n function clearScheduledFlush(): void {\n if (flushTimer !== null) {\n clearTimeout(flushTimer);\n flushTimer = null;\n }\n }\n\n async function flush(): Promise<void> {\n if (queue.length === 0) return;\n\n const events = queue.slice(0, HARD_MAX_BATCH);\n queue = queue.slice(events.length);\n clearScheduledFlush();\n\n const body: IngestRequestBody = {\n session: buildSessionPayload(),\n events,\n };\n\n const serialized = JSON.stringify(body);\n\n // Prefer fetch + keepalive for better error visibility. sendBeacon is the\n // pagehide fallback path because it survives navigation away.\n await postWithFetch(eventsUrl, serialized, config.apiKey, identityHeaders, false);\n }\n\n function trackEvent(input: TrackEventInput): void {\n if (destroyed) return;\n if (!input || typeof input.eventType !== \"string\" || input.eventType.length === 0) return;\n\n const occurredAt =\n input.occurredAt instanceof Date\n ? input.occurredAt.toISOString()\n : typeof input.occurredAt === \"string\"\n ? input.occurredAt\n : new Date().toISOString();\n\n queue.push({\n event_type: input.eventType,\n page_url: input.pageUrl ?? (typeof window === \"undefined\" ? null : window.location.href),\n metadata: input.metadata ?? null,\n occurred_at: occurredAt,\n });\n\n if (queue.length >= maxQueueSize) {\n void flush();\n } else {\n scheduleFlush();\n }\n }\n\n function flushOnUnload(): void {\n if (queue.length === 0) return;\n const events = queue.slice(0, HARD_MAX_BATCH);\n queue = queue.slice(events.length);\n clearScheduledFlush();\n\n const body: IngestRequestBody = {\n session: buildSessionPayload(),\n events,\n };\n const serialized = JSON.stringify(body);\n void postWithFetch(eventsUrl, serialized, config.apiKey, identityHeaders, true);\n }\n\n if (typeof window !== \"undefined\") {\n window.addEventListener(\"pagehide\", flushOnUnload);\n window.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") flushOnUnload();\n });\n }\n\n return {\n trackEvent,\n flush,\n flushBeacon: flushOnUnload,\n getSessionId: () => sessionId,\n getVisitorId: () => visitorId,\n destroy: () => {\n destroyed = true;\n // Fire any pending events through the keepalive path before tearing\n // down. Critical for React StrictMode in dev, where the provider's\n // first mount is immediately unmounted and its 2s debounce would\n // otherwise drop the initial page_view on the floor. Uses fetch\n // keepalive so the request survives the component tearing down.\n if (queue.length > 0) {\n flushOnUnload();\n }\n clearScheduledFlush();\n queue = [];\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\"pagehide\", flushOnUnload);\n }\n },\n };\n}\n","import { z } from \"zod\";\n\n/**\n * Metadata for a manually fired `cta_click` event.\n *\n * Use this for non-phone calls to action such as directions, appointment\n * buttons, downloads, or external booking links.\n */\nexport const ctaClickMetadataSchema = z\n .object({\n cta_name: z.string(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n section: z.string().nullable().optional(),\n destination_url: z.string().nullable().optional(),\n // Set by auto-capture (and available to manual callers): the link target\n // and a short element descriptor (tag#id) for tying clicks to specific UI.\n href: z.string().nullable().optional(),\n element: z.string().nullable().optional(),\n })\n .strict();\n\nexport type CtaClickMetadata = z.infer<typeof ctaClickMetadataSchema>;\n\n/**\n * Registration config for `cta_click`.\n *\n * The event stays manually fireable; `autoCapture` additionally attaches a\n * delegated click listener that fires it for any element matching `selector`\n * (default `[data-aranova-cta]`) — tag your CTAs, get analytics for free.\n */\nexport const ctaClickConfigSchema = z\n .object({\n autoCapture: z\n .object({\n selector: z.string().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\nexport type CtaClickConfig = z.infer<typeof ctaClickConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Registered trigger names reported by the SDK heartbeat.\n */\nexport const sdkHeartbeatTriggersSchema = z\n .object({\n automatic: z.array(z.string()),\n manual: z.array(z.string()),\n })\n .strict();\n\n/**\n * Metadata for the SDK-internal `sdk_heartbeat` event.\n *\n * The SDK fires this once per new session so the dashboard can show which SDK\n * version, install surface, and trigger registry a client site is running.\n * Consumers do not manually register or fire this event.\n */\nexport const sdkHeartbeatMetadataSchema = z\n .object({\n sdk_version: z.string(),\n package_name: z.string().nullable(),\n surface: z.enum([\"next\", \"react\", \"script\"]),\n triggers: sdkHeartbeatTriggersSchema,\n trigger_config: z.record(z.string(), z.record(z.string(), z.unknown())).nullable().optional(),\n configured_gtag_ids: z.record(z.string(), z.string()).nullable().optional(),\n })\n .strict();\n\nexport type SdkHeartbeatMetadata = z.infer<typeof sdkHeartbeatMetadataSchema>;\n\n/**\n * Internal registration config for `sdk_heartbeat`.\n *\n * This event has no consumer-facing options.\n */\nexport const sdkHeartbeatConfigSchema = z.object({}).strict();\nexport type SdkHeartbeatConfig = z.infer<typeof sdkHeartbeatConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `form_start` event.\n *\n * The SDK emits this once per form when the visitor first focuses a field.\n */\nexport const formStartMetadataSchema = z\n .object({\n form: z\n .object({\n id: z.string(),\n action: z.string().nullable(),\n })\n .strict(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type FormStartMetadata = z.infer<typeof formStartMetadataSchema>;\n\n/**\n * Registration config for automatic `form_start`.\n *\n * Use `selector` to narrow which forms can trigger the event. When omitted,\n * the SDK observes all `<form>` elements.\n */\nexport const formStartConfigSchema = z\n .object({\n selector: z.string().optional(),\n })\n .strict();\n\nexport type FormStartConfig = z.infer<typeof formStartConfigSchema>;\n","import { z } from \"zod\";\n\n// form_submit is manual — the SDK never auto-fires this. Consumer code calls\n// `tracking.trackEvent('form_submit', { form, page })` from their own submit\n// handler. Registering it enables the type-level permission; omitting it\n// turns manual calls into a compile error.\n//\n// The optional `fields` array captures submitted form field metadata and JSON\n// values. Consumers explicitly build the fields array themselves so they\n// control exactly what is sent.\n\n/**\n * JSON-serializable value accepted by `form_submit.fields[].value`.\n *\n * This intentionally excludes `undefined`, functions, symbols, `Date`\n * instances, and non-finite numbers. Values are stored in PostgreSQL JSONB, so\n * consumers should send only data that has a stable JSON representation.\n */\nexport type JsonValue =\n | string\n | number\n | boolean\n | null\n | JsonValue[]\n | { [key: string]: JsonValue };\n\nexport const jsonValueSchema: z.ZodType<JsonValue> = z.lazy(() =>\n z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n z.null(),\n z.array(jsonValueSchema),\n z.record(jsonValueSchema),\n ]),\n);\n\n/**\n * Metadata for a manually fired `form_submit` event.\n *\n * Register the event with `manual: { form_submit: {} }`, then call\n * `trackEvent('form_submit', metadata)` from the host site's submit handler.\n *\n * `fields` is optional. If present, each field value must be JSON-serializable\n * and should be explicitly allowlisted by the integration. Do not send names,\n * emails, visitor phone numbers, addresses, payment data, medical details,\n * passwords, file contents, or free-text messages.\n *\n * @example\n * ```ts\n * tracking.trackEvent('form_submit', {\n * form: {\n * id: 'lead-form',\n * action: '/api/lead',\n * fields: [\n * {\n * name: 'service_interest',\n * type: 'select',\n * label: 'Service interest',\n * value: 'teeth_whitening',\n * },\n * ],\n * },\n * page: { path: window.location.pathname },\n * });\n * ```\n */\nexport const formSubmitMetadataSchema = z\n .object({\n form: z\n .object({\n id: z.string(),\n action: z.string().nullable(),\n fields: z\n .array(\n z\n .object({\n name: z.string(),\n type: z.string(),\n label: z.string().nullable(),\n value: jsonValueSchema,\n })\n .strict(),\n )\n .optional(),\n })\n .strict(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type FormSubmitMetadata = z.infer<typeof formSubmitMetadataSchema>;\n\n/**\n * Registration config for `form_submit`.\n *\n * This event is manual-only and currently has no registration options. The\n * empty object enables typed `trackEvent('form_submit', ...)` calls.\n */\nexport const formSubmitConfigSchema = z.object({}).strict();\nexport type FormSubmitConfig = z.infer<typeof formSubmitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `multi_page_session` event.\n *\n * Fired when the visitor reaches the configured distinct-page threshold in a\n * single tracking session.\n */\nexport const multiPageSessionMetadataSchema = z\n .object({\n page_count: z.number().int().min(2),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type MultiPageSessionMetadata = z.infer<typeof multiPageSessionMetadataSchema>;\n\n/**\n * Registration config for automatic `multi_page_session`.\n */\nexport const multiPageSessionConfigSchema = z\n .object({\n pageThreshold: z.number().int().min(2),\n })\n .strict();\n\nexport type MultiPageSessionConfig = z.infer<typeof multiPageSessionConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `page_exit` event.\n *\n * Fired when the user leaves a page (SPA navigation away, tab hidden, or\n * pagehide). `dwell_ms` is the ACTIVE (visible) time spent on the page segment\n * being closed — hidden time never counts, matching `time_on_site` semantics.\n * A page revisited after being hidden emits another `page_exit` for the next\n * visible segment, so summing `dwell_ms` per page/session yields total active\n * dwell without double counting.\n */\nexport const pageExitMetadataSchema = z\n .object({\n dwell_ms: z.number().int().min(0),\n // null = left without any scroll signal; floor is 0 so a valid 0% is never\n // rejected (a single bad field 422s the whole keepalive beacon batch).\n max_scroll_percent: z.number().int().min(0).max(100).nullable(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type PageExitMetadata = z.infer<typeof pageExitMetadataSchema>;\n\n/**\n * Registration config for automatic `page_exit`.\n *\n * SDK-internal: attached unconditionally (like `sdk_heartbeat`), so there are\n * no registration options.\n */\nexport const pageExitConfigSchema = z.object({}).strict();\nexport type PageExitConfig = z.infer<typeof pageExitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for a manually fired `phone_click` event.\n *\n * `phone_number` should be the business phone number from the clicked `tel:`\n * link, not a visitor-entered phone number. `section` can distinguish header,\n * footer, hero, or contact-page links.\n */\nexport const phoneClickMetadataSchema = z\n .object({\n phone_number: z.string(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n section: z.string().nullable().optional(),\n })\n .strict();\n\nexport type PhoneClickMetadata = z.infer<typeof phoneClickMetadataSchema>;\n\n/**\n * Registration config for `phone_click`.\n *\n * The event stays manually fireable; `autoCapture` additionally attaches a\n * delegated click listener that fires it for any `tel:` link matching\n * `selector` (default `a[href^=\"tel:\"]`) — link your phone number, get the\n * analytics event (and, for a linked phone-click goal, the conversion) for free.\n */\nexport const phoneClickConfigSchema = z\n .object({\n autoCapture: z\n .object({\n selector: z.string().optional(),\n })\n .strict()\n .optional(),\n })\n .strict();\nexport type PhoneClickConfig = z.infer<typeof phoneClickConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `scroll_depth` event.\n *\n * Fired once per configured threshold per page.\n */\nexport const scrollDepthMetadataSchema = z\n .object({\n depth_percent: z.number().int().min(1).max(100),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type ScrollDepthMetadata = z.infer<typeof scrollDepthMetadataSchema>;\n\n/**\n * Registration config for automatic `scroll_depth`.\n *\n * `thresholds` are integer percentages from 1 to 100.\n */\nexport const scrollDepthConfigSchema = z\n .object({\n thresholds: z.array(z.number().int().min(1).max(100)).min(1),\n })\n .strict();\n\nexport type ScrollDepthConfig = z.infer<typeof scrollDepthConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Canonical page intent names supported by `specific_page_visit`.\n */\nexport const SPECIFIC_PAGE_NAMES = [\n \"contact_page\",\n \"about_page\",\n \"services_page\",\n \"booking_page\",\n \"location_page\",\n \"pricing_page\",\n \"faq_page\",\n \"testimonials_page\",\n] as const;\n\nexport type SpecificPageName = (typeof SPECIFIC_PAGE_NAMES)[number];\n\nexport const specificPageNameSchema = z.enum(SPECIFIC_PAGE_NAMES);\n\n/**\n * Metadata for the automatic `specific_page_visit` event.\n *\n * The SDK emits this when the current pathname matches one of the configured\n * named page patterns.\n */\nexport const specificPageVisitMetadataSchema = z\n .object({\n page_name: specificPageNameSchema,\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type SpecificPageVisitMetadata = z.infer<typeof specificPageVisitMetadataSchema>;\n\n/**\n * Registration config for automatic `specific_page_visit`.\n *\n * Each page entry pairs a semantic `name` with a `RegExp` that matches the\n * pathname. Use this instead of hard-coding path regexes downstream.\n */\nexport const specificPageVisitConfigSchema = z\n .object({\n pages: z\n .array(\n z\n .object({\n name: specificPageNameSchema,\n pathPattern: z.custom<RegExp>((value) => value instanceof RegExp, {\n message: \"pathPattern must be a RegExp\",\n }),\n })\n .strict(),\n )\n .min(1),\n })\n .strict();\n\nexport type SpecificPageVisitConfig = z.infer<typeof specificPageVisitConfigSchema>;\n","import { z } from \"zod\";\n\n/**\n * Metadata for the automatic `time_on_site` event.\n *\n * The SDK starts a visibility-aware timer and fires once when visible\n * engagement crosses the configured threshold.\n */\nexport const timeOnSiteMetadataSchema = z\n .object({\n duration_ms: z.number().int().nonnegative(),\n page: z\n .object({\n path: z.string(),\n })\n .strict(),\n })\n .strict();\n\nexport type TimeOnSiteMetadata = z.infer<typeof timeOnSiteMetadataSchema>;\n\n/**\n * Registration config for automatic `time_on_site`.\n */\nexport const timeOnSiteConfigSchema = z\n .object({\n thresholdSeconds: z.number().int().positive(),\n })\n .strict();\nexport type TimeOnSiteConfig = z.infer<typeof timeOnSiteConfigSchema>;\n","import type { z } from \"zod\";\n\nimport {\n ctaClickConfigSchema,\n ctaClickMetadataSchema,\n type CtaClickConfig,\n type CtaClickMetadata,\n} from \"./cta-click\";\nimport {\n sdkHeartbeatConfigSchema,\n sdkHeartbeatMetadataSchema,\n type SdkHeartbeatConfig,\n type SdkHeartbeatMetadata,\n} from \"./sdk-heartbeat\";\nimport {\n formStartConfigSchema,\n formStartMetadataSchema,\n type FormStartConfig,\n type FormStartMetadata,\n} from \"./form-start\";\nimport {\n formSubmitConfigSchema,\n formSubmitMetadataSchema,\n type FormSubmitConfig,\n type FormSubmitMetadata,\n} from \"./form-submit\";\nimport {\n multiPageSessionConfigSchema,\n multiPageSessionMetadataSchema,\n type MultiPageSessionConfig,\n type MultiPageSessionMetadata,\n} from \"./multi-page-session\";\nimport {\n pageExitConfigSchema,\n pageExitMetadataSchema,\n type PageExitConfig,\n type PageExitMetadata,\n} from \"./page-exit\";\nimport {\n pageViewConfigSchema,\n pageViewMetadataSchema,\n type PageViewConfig,\n type PageViewMetadata,\n} from \"./page-view\";\nimport {\n phoneClickConfigSchema,\n phoneClickMetadataSchema,\n type PhoneClickConfig,\n type PhoneClickMetadata,\n} from \"./phone-click\";\nimport {\n scrollDepthConfigSchema,\n scrollDepthMetadataSchema,\n type ScrollDepthConfig,\n type ScrollDepthMetadata,\n} from \"./scroll-depth\";\nimport {\n specificPageVisitConfigSchema,\n specificPageVisitMetadataSchema,\n type SpecificPageVisitConfig,\n type SpecificPageVisitMetadata,\n} from \"./specific-page-visit\";\nimport {\n timeOnSiteConfigSchema,\n timeOnSiteMetadataSchema,\n type TimeOnSiteConfig,\n type TimeOnSiteMetadata,\n} from \"./time-on-site\";\n\n// Event kind — automatic events are fired by the SDK itself when their\n// client-side signal fires (page_view on navigation, time_on_site on timer,\n// etc). Manual events are only fireable via explicit consumer code.\nexport type EventKind = \"automatic\" | \"manual\";\n\n// The registry is the single client-side source of truth for \"what events\n// exist, what shape does their metadata take, and what kind are they\". The\n// backend mirror lives in apps/api/src/schemas/tracking_events.py and is\n// kept in sync via the drift test in apps/api/tests/test_event_schema_drift.py.\nexport const EVENT_REGISTRY = {\n // --- automatic triggers ---\n page_view: {\n kind: \"automatic\",\n metadataSchema: pageViewMetadataSchema,\n configSchema: pageViewConfigSchema,\n },\n time_on_site: {\n kind: \"automatic\",\n metadataSchema: timeOnSiteMetadataSchema,\n configSchema: timeOnSiteConfigSchema,\n },\n specific_page_visit: {\n kind: \"automatic\",\n metadataSchema: specificPageVisitMetadataSchema,\n configSchema: specificPageVisitConfigSchema,\n },\n scroll_depth: {\n kind: \"automatic\",\n metadataSchema: scrollDepthMetadataSchema,\n configSchema: scrollDepthConfigSchema,\n },\n multi_page_session: {\n kind: \"automatic\",\n metadataSchema: multiPageSessionMetadataSchema,\n configSchema: multiPageSessionConfigSchema,\n },\n form_start: {\n kind: \"automatic\",\n metadataSchema: formStartMetadataSchema,\n configSchema: formStartConfigSchema,\n },\n // --- SDK-internal automatic (not consumer-configurable) ---\n sdk_heartbeat: {\n kind: \"automatic\",\n metadataSchema: sdkHeartbeatMetadataSchema,\n configSchema: sdkHeartbeatConfigSchema,\n },\n page_exit: {\n kind: \"automatic\",\n metadataSchema: pageExitMetadataSchema,\n configSchema: pageExitConfigSchema,\n },\n // --- manual triggers ---\n form_submit: {\n kind: \"manual\",\n metadataSchema: formSubmitMetadataSchema,\n configSchema: formSubmitConfigSchema,\n },\n phone_click: {\n kind: \"manual\",\n metadataSchema: phoneClickMetadataSchema,\n configSchema: phoneClickConfigSchema,\n },\n cta_click: {\n kind: \"manual\",\n metadataSchema: ctaClickMetadataSchema,\n configSchema: ctaClickConfigSchema,\n },\n} as const;\n\n/**\n * Name of any event known to the tracking SDK.\n */\nexport type EventName = keyof typeof EVENT_REGISTRY;\n\n/**\n * Event names that are fired by the SDK when their configured signal occurs.\n *\n * Automatic events are not accepted by the typed `trackEvent()` API.\n */\nexport type AutomaticEventName = {\n [K in EventName]: (typeof EVENT_REGISTRY)[K][\"kind\"] extends \"automatic\" ? K : never;\n}[EventName];\n\n/**\n * Event names that consumer code can fire manually after registering them.\n */\nexport type ManualEventName = {\n [K in EventName]: (typeof EVENT_REGISTRY)[K][\"kind\"] extends \"manual\" ? K : never;\n}[EventName];\n\n// Map an event name to its explicit metadata / config TS type. We pull the\n// inferred types directly from the per-event files rather than deriving\n// via `z.infer<typeof EVENT_REGISTRY[K]['metadataSchema']>` so that error\n// messages name the event-specific type (PageViewMetadata, not an\n// anonymous zod inference).\ntype MetadataByName = {\n page_view: PageViewMetadata;\n time_on_site: TimeOnSiteMetadata;\n specific_page_visit: SpecificPageVisitMetadata;\n scroll_depth: ScrollDepthMetadata;\n multi_page_session: MultiPageSessionMetadata;\n form_start: FormStartMetadata;\n sdk_heartbeat: SdkHeartbeatMetadata;\n page_exit: PageExitMetadata;\n form_submit: FormSubmitMetadata;\n phone_click: PhoneClickMetadata;\n cta_click: CtaClickMetadata;\n};\n\ntype ConfigByName = {\n page_view: PageViewConfig;\n time_on_site: TimeOnSiteConfig;\n specific_page_visit: SpecificPageVisitConfig;\n scroll_depth: ScrollDepthConfig;\n multi_page_session: MultiPageSessionConfig;\n form_start: FormStartConfig;\n sdk_heartbeat: SdkHeartbeatConfig;\n page_exit: PageExitConfig;\n form_submit: FormSubmitConfig;\n phone_click: PhoneClickConfig;\n cta_click: CtaClickConfig;\n};\n\n/**\n * Metadata payload type for a specific tracking event.\n *\n * @example\n * ```ts\n * type SubmitMetadata = EventMetadata<'form_submit'>;\n * ```\n */\nexport type EventMetadata<K extends EventName> = MetadataByName[K];\n\n/**\n * Trigger registration config type for a specific tracking event.\n */\nexport type EventConfig<K extends EventName> = ConfigByName[K];\n\n// Runtime constant arrays for iteration at consumer / factory time.\n/**\n * Runtime list of automatic event names.\n */\nexport const ALL_AUTOMATIC_EVENT_NAMES: readonly AutomaticEventName[] = (\n Object.entries(EVENT_REGISTRY) as Array<[EventName, (typeof EVENT_REGISTRY)[EventName]]>\n)\n .filter(([, def]) => def.kind === \"automatic\")\n .map(([name]) => name) as AutomaticEventName[];\n\n/**\n * Runtime list of manual event names.\n */\nexport const ALL_MANUAL_EVENT_NAMES: readonly ManualEventName[] = (\n Object.entries(EVENT_REGISTRY) as Array<[EventName, (typeof EVENT_REGISTRY)[EventName]]>\n)\n .filter(([, def]) => def.kind === \"manual\")\n .map(([name]) => name) as ManualEventName[];\n\n/**\n * Trigger registry passed to `createTracking({ triggers })`.\n *\n * `automatic.page_view` is required because every install should capture page\n * views. Other automatic events are opt-in. Manual events must be registered\n * here before the typed client accepts `trackEvent()` calls for them.\n *\n * @example\n * ```ts\n * createTracking({\n * apiKey,\n * endpoint,\n * triggers: {\n * automatic: {\n * page_view: {},\n * time_on_site: { thresholdSeconds: 60 },\n * },\n * manual: {\n * form_submit: {},\n * phone_click: {},\n * },\n * },\n * });\n * ```\n */\nexport type TriggerRegistryConfig = {\n automatic: {\n page_view: EventConfig<\"page_view\">;\n } & Partial<{\n time_on_site: EventConfig<\"time_on_site\">;\n specific_page_visit: EventConfig<\"specific_page_visit\">;\n scroll_depth: EventConfig<\"scroll_depth\">;\n multi_page_session: EventConfig<\"multi_page_session\">;\n form_start: EventConfig<\"form_start\">;\n }>;\n manual?: Partial<{\n form_submit: EventConfig<\"form_submit\">;\n phone_click: EventConfig<\"phone_click\">;\n cta_click: EventConfig<\"cta_click\">;\n }>;\n};\n\n/**\n * Manual event names registered in a concrete trigger registry.\n *\n * Used by `TypedTrackingClient` so `trackEvent()` only accepts events the\n * consumer explicitly enabled.\n */\nexport type RegisteredManualEvents<TRegistry extends TriggerRegistryConfig> = Extract<\n keyof NonNullable<TRegistry[\"manual\"]>,\n ManualEventName\n>;\n\n/**\n * Automatic event names registered in a concrete trigger registry.\n */\nexport type RegisteredAutomaticEvents<TRegistry extends TriggerRegistryConfig> = Extract<\n keyof TRegistry[\"automatic\"],\n AutomaticEventName\n>;\n\n/**\n * Discriminated union of valid manual tracking calls for a registry.\n */\nexport type TrackableEvent<TRegistry extends TriggerRegistryConfig> = {\n [K in RegisteredManualEvents<TRegistry>]: {\n eventType: K;\n metadata: EventMetadata<K>;\n };\n}[RegisteredManualEvents<TRegistry>];\n\n// Runtime helper: look up a schema pair by name. Cast through `unknown`\n// because the registry is `as const` and TS loses the specific schema type\n// when indexing via a dynamic key.\nexport function getEventDefinition(name: EventName): {\n kind: EventKind;\n metadataSchema: z.ZodTypeAny;\n configSchema: z.ZodTypeAny;\n} {\n return EVENT_REGISTRY[name] as unknown as {\n kind: EventKind;\n metadataSchema: z.ZodTypeAny;\n configSchema: z.ZodTypeAny;\n };\n}\n","// time_on_site automatic trigger.\n//\n// Fires a single `time_on_site` event once the user has been actively\n// engaged with the tab for at least `thresholdSeconds`. The timer is\n// visibility-aware — when the tab goes hidden (other tab focused, app\n// backgrounded) we pause the counter, and resume when it comes back. This\n// stops the \"user opened the tab in the background and walked away\"\n// scenario from artificially inflating engagement.\n//\n// The event fires at most once per page load.\n\nimport type { TimeOnSiteConfig } from \"../events/time-on-site\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `time_on_site` trigger.\n *\n * Starts a visibility-aware timer and returns a detach function that clears\n * timers/listeners.\n */\nexport function attachTimeOnSite(client: TrackingClient, config: TimeOnSiteConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const thresholdMs = config.thresholdSeconds * 1000;\n let accumulatedMs = 0;\n let activeSince: number | null = document.visibilityState === \"visible\" ? Date.now() : null;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let fired = false;\n\n function fire(): void {\n if (fired) return;\n fired = true;\n client.trackEvent({\n eventType: \"time_on_site\",\n metadata: {\n duration_ms: thresholdMs,\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n function scheduleNext(): void {\n if (fired || activeSince === null) return;\n const remaining = thresholdMs - accumulatedMs;\n if (remaining <= 0) {\n fire();\n return;\n }\n timer = setTimeout(fire, remaining);\n }\n\n function clearTimer(): void {\n if (timer !== null) {\n clearTimeout(timer);\n timer = null;\n }\n }\n\n function onVisibilityChange(): void {\n if (fired) return;\n if (document.visibilityState === \"hidden\") {\n // Pause — drain the current interval into accumulatedMs.\n if (activeSince !== null) {\n accumulatedMs += Date.now() - activeSince;\n activeSince = null;\n }\n clearTimer();\n } else {\n // Resume.\n activeSince = Date.now();\n scheduleNext();\n }\n }\n\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n scheduleNext();\n\n return () => {\n clearTimer();\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n };\n}\n","// specific_page_visit automatic trigger.\n//\n// Fires whenever the current path matches one of the consumer-supplied\n// patterns. Each pattern has a strongly typed page_name from the\n// SpecificPageName union. Dedupes so that repeated navigations to the same\n// (page_name, path) pair only fire once per page lifecycle.\n//\n// Replaces the old contact_page_visit trigger with multi-pattern support.\n\nimport type { SpecificPageVisitConfig } from \"../events/specific-page-visit\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `specific_page_visit` trigger.\n *\n * Watches navigation changes and fires when the current pathname matches a\n * configured named page pattern.\n */\nexport function attachSpecificPageVisit(\n client: TrackingClient,\n config: SpecificPageVisitConfig,\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n const { pages } = config;\n const firedSet = new Set<string>();\n\n function check(): void {\n const path = window.location.pathname;\n for (const { name, pathPattern } of pages) {\n pathPattern.lastIndex = 0; // Reset in case consumer passed /g or /y flag\n if (!pathPattern.test(path)) continue;\n const key = `${name}:${path}`;\n if (firedSet.has(key)) continue;\n firedSet.add(key);\n client.trackEvent({\n eventType: \"specific_page_visit\",\n metadata: { page_name: name, page: { path } } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(check, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(check, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", check);\n\n // Fire once on attach in case the current path already matches.\n check();\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n };\n}\n","// scroll_depth automatic trigger.\n//\n// Installs a requestAnimationFrame-throttled scroll listener and fires once\n// per configured threshold per page. Resets the fired set on SPA navigation\n// when the pathname actually changes (pushState / popstate). replaceState\n// is ignored since it's commonly used for query param updates without a\n// real page transition.\n\nimport type { ScrollDepthConfig } from \"../events/scroll-depth\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `scroll_depth` trigger.\n *\n * Installs a throttled scroll listener, fires each configured threshold once\n * per page, and returns a detach function.\n */\nexport function attachScrollDepth(client: TrackingClient, config: ScrollDepthConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const thresholds = new Set(config.thresholds);\n let firedForPath = new Set<number>();\n let currentPath = window.location.pathname;\n let rafId: number | null = null;\n\n function getScrollPercent(): number {\n const doc = document.documentElement;\n const scrollTop = window.scrollY || doc.scrollTop;\n const scrollHeight = doc.scrollHeight;\n const clientHeight = doc.clientHeight;\n if (scrollHeight <= clientHeight) return 100;\n return Math.round(((scrollTop + clientHeight) / scrollHeight) * 100);\n }\n\n function checkThresholds(): void {\n const percent = getScrollPercent();\n for (const threshold of thresholds) {\n if (percent >= threshold && !firedForPath.has(threshold)) {\n firedForPath.add(threshold);\n client.trackEvent({\n eventType: \"scroll_depth\",\n metadata: {\n depth_percent: threshold,\n page: { path: currentPath },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n }\n\n function onScroll(): void {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n checkThresholds();\n });\n }\n\n function resetIfPathChanged(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n currentPath = newPath;\n firedForPath = new Set();\n setTimeout(checkThresholds, 0);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n // Only reset if pathname actually changed — replaceState is commonly\n // used for query param updates that shouldn't re-trigger thresholds.\n setTimeout(resetIfPathChanged, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", resetIfPathChanged);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n\n // Initial check — handles short pages that don't require scrolling.\n setTimeout(checkThresholds, 0);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", resetIfPathChanged);\n window.removeEventListener(\"scroll\", onScroll);\n };\n}\n","// multi_page_session automatic trigger.\n//\n// Tracks distinct page paths visited in the current session via sessionStorage.\n// Fires once when the count reaches the configured threshold. Resets when\n// the session ID changes (30-min idle rotation).\n\nimport type { MultiPageSessionConfig } from \"../events/multi-page-session\";\nimport type { TrackingClient } from \"../ingest\";\nimport { getOrRotateSessionId } from \"../session\";\n\nconst STORAGE_KEY = \"aranova_tracking_mps_paths\";\nconst SESSION_KEY = \"aranova_tracking_mps_session\";\nconst FIRED_KEY = \"aranova_tracking_mps_fired\";\n\nfunction getSessionStorage(): Storage | null {\n try {\n return typeof window !== \"undefined\" ? window.sessionStorage : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Attach the automatic `multi_page_session` trigger.\n *\n * Tracks distinct paths in sessionStorage and fires once when the configured\n * page threshold is reached.\n */\nexport function attachMultiPageSession(\n client: TrackingClient,\n config: MultiPageSessionConfig,\n): () => void {\n if (typeof window === \"undefined\" || typeof history === \"undefined\") {\n return () => {};\n }\n\n const storage = getSessionStorage();\n if (!storage) return () => {};\n\n const { pageThreshold } = config;\n let lastCheckedPath = \"\";\n\n function getDistinctPaths(): Set<string> {\n try {\n const raw = storage!.getItem(STORAGE_KEY);\n return raw ? new Set(JSON.parse(raw) as string[]) : new Set();\n } catch {\n return new Set();\n }\n }\n\n function saveDistinctPaths(paths: Set<string>): void {\n try {\n storage!.setItem(STORAGE_KEY, JSON.stringify([...paths]));\n } catch {\n // sessionStorage full — degrade gracefully.\n }\n }\n\n function resetIfSessionChanged(): void {\n const currentSession = getOrRotateSessionId().id;\n const storedSession = storage!.getItem(SESSION_KEY);\n if (storedSession !== currentSession) {\n storage!.setItem(SESSION_KEY, currentSession);\n storage!.removeItem(STORAGE_KEY);\n storage!.removeItem(FIRED_KEY);\n }\n }\n\n function hasFired(): boolean {\n return storage!.getItem(FIRED_KEY) === \"1\";\n }\n\n function check(): void {\n // Skip if pathname hasn't changed — replaceState is commonly used for\n // query param updates and shouldn't trigger parse/serialize overhead.\n const currentPath = window.location.pathname;\n if (currentPath === lastCheckedPath) return;\n lastCheckedPath = currentPath;\n\n resetIfSessionChanged();\n\n if (hasFired()) return;\n\n const paths = getDistinctPaths();\n paths.add(currentPath);\n saveDistinctPaths(paths);\n\n if (paths.size >= pageThreshold) {\n storage!.setItem(FIRED_KEY, \"1\");\n client.trackEvent({\n eventType: \"multi_page_session\",\n metadata: {\n page_count: paths.size,\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(check, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(check, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", check);\n\n // Fire once on attach for the initial page.\n check();\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", check);\n };\n}\n","// form_start automatic trigger.\n//\n// Uses focusin event delegation on document to detect the first field\n// interaction inside a <form>. Fires once per form per page lifecycle.\n// Dedupes via a Set keyed on form id/action. Resets on SPA navigation.\n\nimport type { FormStartConfig } from \"../events/form-start\";\nimport type { TrackingClient } from \"../ingest\";\n\n/**\n * Attach the automatic `form_start` trigger.\n *\n * Uses `focusin` event delegation to detect the first interaction with each\n * matching form and returns a detach function.\n */\nexport function attachFormStart(client: TrackingClient, config: FormStartConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n const selector = config.selector ?? \"form\";\n let firedForms = new Set<string>();\n let currentPath = window.location.pathname;\n\n function getFormKey(form: HTMLFormElement): string {\n if (form.id) return `id:${form.id}`;\n // Use getAttribute — the DOM property always returns a resolved URL,\n // never \"\" or null, so it can't distinguish \"no action\" from \"action=current page\".\n const explicitAction = form.getAttribute(\"action\");\n if (explicitAction) return `action:${explicitAction}`;\n const forms = Array.from(document.querySelectorAll(selector));\n return `index:${forms.indexOf(form)}`;\n }\n\n function onFocusIn(event: FocusEvent): void {\n const target = event.target;\n if (!(target instanceof HTMLElement)) return;\n\n // Walk up to the nearest matching <form>.\n const form = target.closest(selector) as HTMLFormElement | null;\n if (!form || form.tagName !== \"FORM\") return;\n\n const key = getFormKey(form);\n if (firedForms.has(key)) return;\n firedForms.add(key);\n\n client.trackEvent({\n eventType: \"form_start\",\n metadata: {\n form: {\n id: form.id || \"\",\n action: form.getAttribute(\"action\") ?? null,\n },\n page: { path: window.location.pathname },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n function resetIfPathChanged(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n currentPath = newPath;\n firedForms = new Set();\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(resetIfPathChanged, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", resetIfPathChanged);\n document.addEventListener(\"focusin\", onFocusIn);\n\n return () => {\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", resetIfPathChanged);\n document.removeEventListener(\"focusin\", onFocusIn);\n };\n}\n","// page_exit automatic trigger (SDK-internal — attached unconditionally).\n//\n// Emits one `page_exit` per visible page segment with the ACTIVE dwell time\n// and the max scroll depth reached, on three leave signals:\n// - SPA navigation away (pushState / replaceState / popstate, pathname change)\n// - the tab going hidden (visibilitychange — the reliable mobile signal)\n// - pagehide (tab close / hard navigation)\n//\n// Dwell is visibility-aware like time_on_site: hidden time never counts. When\n// a hidden tab becomes visible again, the accumulator resets and the next\n// leave emits another segment — the backend sums segments per session.\n//\n// CRITICAL: on pagehide/hidden this trigger flushes the client itself via\n// `flushBeacon()` (keepalive transport). The ingest client's own\n// flush-on-pagehide listener is registered at client creation — BEFORE this\n// trigger attaches — so it fires first, sending the queue WITHOUT our\n// just-enqueued page_exit. We must therefore push it ourselves, and a plain\n// `flush()` is aborted by the browser on unload — only the keepalive beacon\n// survives, so `flushBeacon` (not `flush`) is load-bearing here.\n\nimport type { TrackingClient } from \"../ingest\";\n\n// Visible segments shorter than this are noise (no human reads a page for tens\n// of ms) and, load-bearingly, this drops the phantom emit from the\n// pagehide/visibilitychange double-fire. See emitSegment.\nconst MIN_SEGMENT_MS = 50;\n\nexport function attachPageExit(client: TrackingClient): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n\n let currentPath = window.location.pathname;\n let activeSince: number | null = document.visibilityState === \"visible\" ? Date.now() : null;\n let accumulatedMs = 0;\n let maxScrollPercent: number | null = null;\n let rafId: number | null = null;\n\n function getScrollPercent(): number {\n const doc = document.documentElement;\n const scrollTop = window.scrollY || doc.scrollTop;\n const scrollHeight = doc.scrollHeight;\n const clientHeight = doc.clientHeight;\n if (scrollHeight <= clientHeight) return 100;\n return Math.round(((scrollTop + clientHeight) / scrollHeight) * 100);\n }\n\n function onScroll(): void {\n if (rafId !== null) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n const percent = getScrollPercent();\n if (percent >= 1 && (maxScrollPercent === null || percent > maxScrollPercent)) {\n maxScrollPercent = Math.min(percent, 100);\n }\n });\n }\n\n function settledDwellMs(): number {\n let total = accumulatedMs;\n if (activeSince !== null) {\n total += Date.now() - activeSince;\n }\n return Math.max(0, Math.round(total));\n }\n\n function emitSegment(path: string, flush: boolean): void {\n const dwell = settledDwellMs();\n // A segment shorter than this carries no signal — skip it. This also\n // absorbs the phantom emit when pagehide and visibilitychange:hidden both\n // fire on the same unload: the first emits the real segment and closes it\n // (activeSince = null below), so the second computes ~0ms and is dropped.\n if (dwell < MIN_SEGMENT_MS) return;\n client.trackEvent({\n eventType: \"page_exit\",\n metadata: {\n dwell_ms: dwell,\n max_scroll_percent: maxScrollPercent,\n page: { path },\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n if (flush) {\n // The client's own pagehide flush already ran without this event — push\n // it through the keepalive beacon so it survives unload.\n client.flushBeacon();\n }\n // Close the segment. A new one only begins on an explicit visible/navigate\n // (both set activeSince themselves) — NOT here: at pagehide the document is\n // often still \"visible\", so restarting a segment would make the following\n // visibilitychange:hidden emit a phantom ~0ms duplicate.\n accumulatedMs = 0;\n activeSince = null;\n }\n\n function onNavigate(): void {\n const newPath = window.location.pathname;\n if (newPath === currentPath) return;\n emitSegment(currentPath, false);\n currentPath = newPath;\n maxScrollPercent = null;\n accumulatedMs = 0;\n activeSince = document.visibilityState === \"visible\" ? Date.now() : null;\n }\n\n function onVisibilityChange(): void {\n if (document.visibilityState === \"hidden\") {\n emitSegment(currentPath, true);\n } else {\n // Back from hidden: a fresh segment starts accruing.\n activeSince = Date.now();\n }\n }\n\n function onPageHide(): void {\n emitSegment(currentPath, true);\n }\n\n const originalPushState = history.pushState.bind(history);\n const originalReplaceState = history.replaceState.bind(history);\n\n function patchedPushState(this: History, ...args: Parameters<History[\"pushState\"]>): void {\n originalPushState(...args);\n setTimeout(onNavigate, 0);\n }\n function patchedReplaceState(this: History, ...args: Parameters<History[\"replaceState\"]>): void {\n originalReplaceState(...args);\n setTimeout(onNavigate, 0);\n }\n\n history.pushState = patchedPushState as History[\"pushState\"];\n history.replaceState = patchedReplaceState as History[\"replaceState\"];\n window.addEventListener(\"popstate\", onNavigate);\n window.addEventListener(\"scroll\", onScroll, { passive: true });\n document.addEventListener(\"visibilitychange\", onVisibilityChange);\n window.addEventListener(\"pagehide\", onPageHide);\n\n return () => {\n if (rafId !== null) cancelAnimationFrame(rafId);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n window.removeEventListener(\"popstate\", onNavigate);\n window.removeEventListener(\"scroll\", onScroll);\n document.removeEventListener(\"visibilitychange\", onVisibilityChange);\n window.removeEventListener(\"pagehide\", onPageHide);\n };\n}\n","// cta_click auto-capture (opt-in via the cta_click registration config).\n//\n// A single delegated click listener fires `cta_click` for any element matching\n// the configured selector (default `[data-aranova-cta]`). The event itself\n// stays `manual` in the registry — consumers can still fire it from code; this\n// trigger just removes the need to hand-instrument every button.\n//\n// CTA identity: the `data-aranova-cta` attribute value when present, else the\n// element's trimmed text (capped). `href` and a short `element` descriptor\n// (tag#id) ride along so the dashboard can tie clicks to concrete UI.\n\nimport type { CtaClickConfig } from \"../events/cta-click\";\nimport type { TrackingClient } from \"../ingest\";\n\nexport const DEFAULT_CTA_SELECTOR = \"[data-aranova-cta]\";\n\nconst CTA_NAME_MAX_LENGTH = 120;\n\nfunction describeElement(el: Element): string {\n const tag = el.tagName.toLowerCase();\n return el.id ? `${tag}#${el.id}` : tag;\n}\n\nfunction resolveCtaName(el: Element): string {\n const explicit = el.getAttribute(\"data-aranova-cta\");\n if (explicit && explicit.trim().length > 0) return explicit.trim();\n const text = (el.textContent ?? \"\").trim().replace(/\\s+/g, \" \");\n if (text.length > 0) return text.slice(0, CTA_NAME_MAX_LENGTH);\n return describeElement(el);\n}\n\n/**\n * Attach the delegated cta_click auto-capture listener. Returns a detach\n * function. No-ops (returns a noop detacher) when `autoCapture` is absent.\n */\nexport function attachCtaClickCapture(client: TrackingClient, config: CtaClickConfig): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n const autoCapture = config.autoCapture;\n if (!autoCapture) {\n return () => {};\n }\n const selector = autoCapture.selector ?? DEFAULT_CTA_SELECTOR;\n\n function onClick(event: MouseEvent): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n let matched: Element | null = null;\n try {\n matched = target.closest(selector);\n } catch {\n return; // invalid selector — never break the host site\n }\n if (matched === null) return;\n const href =\n matched instanceof HTMLAnchorElement ? matched.href || null : matched.getAttribute(\"href\");\n client.trackEvent({\n eventType: \"cta_click\",\n metadata: {\n cta_name: resolveCtaName(matched),\n page: { path: window.location.pathname },\n section: matched.getAttribute(\"data-aranova-section\"),\n destination_url: href,\n href,\n element: describeElement(matched),\n } as unknown as Record<string, unknown>,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n // Capture phase so navigations that stop propagation still get counted.\n document.addEventListener(\"click\", onClick, true);\n return () => {\n document.removeEventListener(\"click\", onClick, true);\n };\n}\n","// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"version\":4,\"country_calling_codes\":{\"1\":[\"US\",\"AG\",\"AI\",\"AS\",\"BB\",\"BM\",\"BS\",\"CA\",\"DM\",\"DO\",\"GD\",\"GU\",\"JM\",\"KN\",\"KY\",\"LC\",\"MP\",\"MS\",\"PR\",\"SX\",\"TC\",\"TT\",\"VC\",\"VG\",\"VI\"],\"7\":[\"RU\",\"KZ\"],\"20\":[\"EG\"],\"27\":[\"ZA\"],\"30\":[\"GR\"],\"31\":[\"NL\"],\"32\":[\"BE\"],\"33\":[\"FR\"],\"34\":[\"ES\"],\"36\":[\"HU\"],\"39\":[\"IT\",\"VA\"],\"40\":[\"RO\"],\"41\":[\"CH\"],\"43\":[\"AT\"],\"44\":[\"GB\",\"GG\",\"IM\",\"JE\"],\"45\":[\"DK\"],\"46\":[\"SE\"],\"47\":[\"NO\",\"SJ\"],\"48\":[\"PL\"],\"49\":[\"DE\"],\"51\":[\"PE\"],\"52\":[\"MX\"],\"53\":[\"CU\"],\"54\":[\"AR\"],\"55\":[\"BR\"],\"56\":[\"CL\"],\"57\":[\"CO\"],\"58\":[\"VE\"],\"60\":[\"MY\"],\"61\":[\"AU\",\"CC\",\"CX\"],\"62\":[\"ID\"],\"63\":[\"PH\"],\"64\":[\"NZ\"],\"65\":[\"SG\"],\"66\":[\"TH\"],\"81\":[\"JP\"],\"82\":[\"KR\"],\"84\":[\"VN\"],\"86\":[\"CN\"],\"90\":[\"TR\"],\"91\":[\"IN\"],\"92\":[\"PK\"],\"93\":[\"AF\"],\"94\":[\"LK\"],\"95\":[\"MM\"],\"98\":[\"IR\"],\"211\":[\"SS\"],\"212\":[\"MA\",\"EH\"],\"213\":[\"DZ\"],\"216\":[\"TN\"],\"218\":[\"LY\"],\"220\":[\"GM\"],\"221\":[\"SN\"],\"222\":[\"MR\"],\"223\":[\"ML\"],\"224\":[\"GN\"],\"225\":[\"CI\"],\"226\":[\"BF\"],\"227\":[\"NE\"],\"228\":[\"TG\"],\"229\":[\"BJ\"],\"230\":[\"MU\"],\"231\":[\"LR\"],\"232\":[\"SL\"],\"233\":[\"GH\"],\"234\":[\"NG\"],\"235\":[\"TD\"],\"236\":[\"CF\"],\"237\":[\"CM\"],\"238\":[\"CV\"],\"239\":[\"ST\"],\"240\":[\"GQ\"],\"241\":[\"GA\"],\"242\":[\"CG\"],\"243\":[\"CD\"],\"244\":[\"AO\"],\"245\":[\"GW\"],\"246\":[\"IO\"],\"247\":[\"AC\"],\"248\":[\"SC\"],\"249\":[\"SD\"],\"250\":[\"RW\"],\"251\":[\"ET\"],\"252\":[\"SO\"],\"253\":[\"DJ\"],\"254\":[\"KE\"],\"255\":[\"TZ\"],\"256\":[\"UG\"],\"257\":[\"BI\"],\"258\":[\"MZ\"],\"260\":[\"ZM\"],\"261\":[\"MG\"],\"262\":[\"RE\",\"YT\"],\"263\":[\"ZW\"],\"264\":[\"NA\"],\"265\":[\"MW\"],\"266\":[\"LS\"],\"267\":[\"BW\"],\"268\":[\"SZ\"],\"269\":[\"KM\"],\"290\":[\"SH\",\"TA\"],\"291\":[\"ER\"],\"297\":[\"AW\"],\"298\":[\"FO\"],\"299\":[\"GL\"],\"350\":[\"GI\"],\"351\":[\"PT\"],\"352\":[\"LU\"],\"353\":[\"IE\"],\"354\":[\"IS\"],\"355\":[\"AL\"],\"356\":[\"MT\"],\"357\":[\"CY\"],\"358\":[\"FI\",\"AX\"],\"359\":[\"BG\"],\"370\":[\"LT\"],\"371\":[\"LV\"],\"372\":[\"EE\"],\"373\":[\"MD\"],\"374\":[\"AM\"],\"375\":[\"BY\"],\"376\":[\"AD\"],\"377\":[\"MC\"],\"378\":[\"SM\"],\"380\":[\"UA\"],\"381\":[\"RS\"],\"382\":[\"ME\"],\"383\":[\"XK\"],\"385\":[\"HR\"],\"386\":[\"SI\"],\"387\":[\"BA\"],\"389\":[\"MK\"],\"420\":[\"CZ\"],\"421\":[\"SK\"],\"423\":[\"LI\"],\"500\":[\"FK\"],\"501\":[\"BZ\"],\"502\":[\"GT\"],\"503\":[\"SV\"],\"504\":[\"HN\"],\"505\":[\"NI\"],\"506\":[\"CR\"],\"507\":[\"PA\"],\"508\":[\"PM\"],\"509\":[\"HT\"],\"590\":[\"GP\",\"BL\",\"MF\"],\"591\":[\"BO\"],\"592\":[\"GY\"],\"593\":[\"EC\"],\"594\":[\"GF\"],\"595\":[\"PY\"],\"596\":[\"MQ\"],\"597\":[\"SR\"],\"598\":[\"UY\"],\"599\":[\"CW\",\"BQ\"],\"670\":[\"TL\"],\"672\":[\"NF\"],\"673\":[\"BN\"],\"674\":[\"NR\"],\"675\":[\"PG\"],\"676\":[\"TO\"],\"677\":[\"SB\"],\"678\":[\"VU\"],\"679\":[\"FJ\"],\"680\":[\"PW\"],\"681\":[\"WF\"],\"682\":[\"CK\"],\"683\":[\"NU\"],\"685\":[\"WS\"],\"686\":[\"KI\"],\"687\":[\"NC\"],\"688\":[\"TV\"],\"689\":[\"PF\"],\"690\":[\"TK\"],\"691\":[\"FM\"],\"692\":[\"MH\"],\"850\":[\"KP\"],\"852\":[\"HK\"],\"853\":[\"MO\"],\"855\":[\"KH\"],\"856\":[\"LA\"],\"880\":[\"BD\"],\"886\":[\"TW\"],\"960\":[\"MV\"],\"961\":[\"LB\"],\"962\":[\"JO\"],\"963\":[\"SY\"],\"964\":[\"IQ\"],\"965\":[\"KW\"],\"966\":[\"SA\"],\"967\":[\"YE\"],\"968\":[\"OM\"],\"970\":[\"PS\"],\"971\":[\"AE\"],\"972\":[\"IL\"],\"973\":[\"BH\"],\"974\":[\"QA\"],\"975\":[\"BT\"],\"976\":[\"MN\"],\"977\":[\"NP\"],\"992\":[\"TJ\"],\"993\":[\"TM\"],\"994\":[\"AZ\"],\"995\":[\"GE\"],\"996\":[\"KG\"],\"998\":[\"UZ\"]},\"countries\":{\"AC\":[\"247\",\"00\",\"(?:[01589]\\\\d|[46])\\\\d{4}\",[5,6]],\"AD\":[\"376\",\"00\",\"(?:1|6\\\\d)\\\\d{7}|[135-9]\\\\d{5}\",[6,8,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"[135-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]]],\"AE\":[\"971\",\"00\",\"(?:[4-7]\\\\d|9[0-689])\\\\d{7}|800\\\\d{2,9}|[2-4679]\\\\d{7}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{2,9})\",\"$1 $2\",[\"60|8\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[236]|[479][2-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{5})\",\"$1 $2 $3\",[\"[479]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AF\":[\"93\",\"00\",\"[2-7]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"]],\"0\"],\"AG\":[\"1\",\"011\",\"(?:268|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([457]\\\\d{6})$|1\",\"268$1\",0,\"268\"],\"AI\":[\"1\",\"011\",\"(?:264|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2457]\\\\d{6})$|1\",\"264$1\",0,\"264\"],\"AL\":[\"355\",\"00\",\"(?:700\\\\d\\\\d|900)\\\\d{3}|8\\\\d{5,7}|(?:[2-5]|6\\\\d)\\\\d{7}\",[6,7,8,9],[[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"80|9\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"4[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2358][2-5]|4\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[23578]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"]],\"0\"],\"AM\":[\"374\",\"00\",\"(?:[1-489]\\\\d|55|60|77)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]0\"],\"0 $1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2|3[12]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"1|47\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[3-9]\"],\"0$1\"]],\"0\"],\"AO\":[\"244\",\"00\",\"[29]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[29]\"]]]],\"AR\":[\"54\",\"00\",\"(?:11|[89]\\\\d\\\\d)\\\\d{8}|[2368]\\\\d{9}\",[10,11],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2-$3\",[\"2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9])\",\"2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8]))|2(?:2[24-9]|3[1-59]|47)\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5[56][46]|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|58|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|54(?:4|5[13-7]|6[89])|86[3-6]))|2(?:2[24-9]|3[1-59]|47)|38(?:[58][78]|7[378])|3(?:454|85[56])[46]|3(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"1\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[68]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[23]\"],\"0$1\",1],[\"(\\\\d)(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9(?:2[2-469]|3[3-578])\",\"9(?:2(?:2[024-9]|3[0-59]|47|6[245]|9[02-8])|3(?:3[28]|4[03-9]|5[2-46-8]|7[1-578]|8[2-9]))\",\"9(?:2(?:[23]02|6(?:[25]|4[6-8])|9(?:[02356]|4[02568]|72|8[23]))|3(?:3[28]|4(?:[04679]|3[5-8]|5[4-68]|8[2379])|5(?:[2467]|3[237]|8[2-5])|7[1-578]|8(?:[2469]|3[2578]|5[4-8]|7[36-8]|8[5-8])))|92(?:2[24-9]|3[1-59]|47)\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3[78]|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8[23])|7[1-578]|8(?:[2469]|3[278]|5(?:[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4[35][56]|58[45]|8(?:[38]5|54|76))[4-6]\",\"9(?:2(?:[23]02|6(?:[25]|4(?:64|[78]))|9(?:[02356]|4(?:[0268]|5[2-6])|72|8[23]))|3(?:3[28]|4(?:[04679]|3(?:5(?:4[0-25689]|[56])|[78])|5(?:4[46]|8)|8[2379])|5(?:[2467]|3[237]|8(?:[23]|4(?:[45]|60)|5(?:4[0-39]|5|64)))|7[1-578]|8(?:[2469]|3[278]|5(?:4(?:4|5[13-7]|6[89])|[56][46]|[78])|7[378]|8(?:6[3-6]|[78]))))|92(?:2[24-9]|3[1-59]|47)|93(?:4(?:36|5[56])|8(?:[38]5|76))[4-6]\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$2 15-$3-$4\",[\"91\"],\"0$1\",0,\"$1 $2 $3-$4\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$2 15-$3-$4\",[\"9\"],\"0$1\",0,\"$1 $2 $3-$4\"]],\"0\",0,\"0?(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1267])|3(?:02?|1[467]|2[03-6]|3[13-8]|[49][2-6]|5[2-8]|[67])|4(?:7[3-578]|9)|6(?:[0136]|2[24-6]|4[6-8]?|5[15-8])|80|9(?:0[1-3]|[19]|2\\\\d|3[1-6]|4[02568]?|5[2-4]|6[2-46]|72?|8[23]?))|3(?:3(?:2[79]|6|8[2578])|4(?:0[0-24-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6[02-9]|7[126]|8[2379]?|9[1-36-8])|5(?:1|2[1245]|3[237]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|6[24]|7(?:[069]|1[1568]|2[15]|3[145]|4[13]|5[14-8]|7[2-57]|8[126])|8(?:[01]|2[15-7]|3[2578]?|4[13-6]|5[4-8]?|6[1-357-9]|7[36-8]?|8[5-8]?|9[124])))15)?\",\"9$1\"],\"AS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|684|900)\\\\d{7}\",[10],0,\"1\",0,\"([267]\\\\d{6})$|1\",\"684$1\",0,\"684\"],\"AT\":[\"43\",\"00\",\"1\\\\d{3,12}|2\\\\d{6,12}|43(?:(?:0\\\\d|5[02-9])\\\\d{3,9}|2\\\\d{4,5}|[3467]\\\\d{4}|8\\\\d{4,6}|9\\\\d{4,7})|5\\\\d{4,12}|8\\\\d{7,12}|9\\\\d{8,12}|(?:[367]\\\\d|4[0-24-9])\\\\d{4,11}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{3,12})\",\"$1 $2\",[\"1(?:11|[2-9])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})\",\"$1 $2\",[\"517\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"5[079]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,10})\",\"$1 $2\",[\"(?:31|4)6|51|6(?:48|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\",\"(?:31|4)6|51|6(?:485|5[0-3579]|[6-9])|7(?:20|32|8)|[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,9})\",\"$1 $2\",[\"[2-467]|5[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,7})\",\"$1 $2 $3\",[\"5\"],\"0$1\"]],\"0\"],\"AU\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{7}(?:\\\\d(?:\\\\d{2})?)?|8[0-24-9]\\\\d{7})|[2-478]\\\\d{8}|1\\\\d{4,7}\",[5,6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"16\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"16\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"14|4\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[2378]\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:30|[89])\"]]],\"0\",0,\"(183[12])|0\",0,0,0,[[\"(?:(?:241|349)0\\\\d\\\\d|8(?:51(?:0(?:0[03-9]|[12479]\\\\d|3[2-9]|5[0-8]|6[1-9]|8[0-7])|1(?:[0235689]\\\\d|1[0-69]|4[0-589]|7[0-47-9])|2(?:0[0-79]|[18][13579]|2[14-9]|3[0-46-9]|[4-6]\\\\d|7[89]|9[0-4])|[34]\\\\d\\\\d)|91(?:(?:[0-58]\\\\d|6[0135-9])\\\\d|7(?:0[0-24-9]|[1-9]\\\\d)|9(?:[0-46-9]\\\\d|5[0-79]))))\\\\d{3}|(?:2(?:[0-26-9]\\\\d|3[0-8]|4[02-9]|5[0135-9])|3(?:[0-3589]\\\\d|4[0-578]|6[1-9]|7[0-35-9])|7(?:[013-57-9]\\\\d|2[0-8])|8(?:55|6[0-8]|[78]\\\\d|9[02-9]))\\\\d{6}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,[\"163\\\\d{2,6}\",[5,6,7,8,9]],[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"AW\":[\"297\",\"00\",\"(?:[25-79]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[25-9]\"]]]],\"AX\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"2\\\\d{4,9}|35\\\\d{4,5}|(?:60\\\\d\\\\d|800)\\\\d{4,6}|7\\\\d{5,11}|(?:[14]\\\\d|3[0-46-9]|50)\\\\d{4,8}\",[5,6,7,8,9,10,11,12],0,\"0\",0,0,0,0,\"18\",0,\"00\"],\"AZ\":[\"994\",\"00\",\"365\\\\d{6}|(?:[124579]\\\\d|60|88)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[28]|2|365|46\",\"1[28]|2|365[45]|46\",\"1[28]|2|365(?:4|5[02])|46\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[13-9]\"],\"0$1\"]],\"0\"],\"BA\":[\"387\",\"00\",\"6\\\\d{8}|(?:[35689]\\\\d|49|70)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[1-3]|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2-$3\",[\"[3-5]|6[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"6\"],\"0$1\"]],\"0\"],\"BB\":[\"1\",\"011\",\"(?:246|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"246$1\",0,\"246\"],\"BD\":[\"880\",\"00\",\"[1-469]\\\\d{9}|8[0-79]\\\\d{7,8}|[2-79]\\\\d{8}|[2-9]\\\\d{7}|[3-9]\\\\d{6}|[57-9]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1-$2\",[\"31[5-8]|[459]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1-$2\",[\"3(?:[67]|8[013-9])|4(?:6[168]|7|[89][18])|5(?:6[128]|9)|6(?:[15]|28|4[14])|7[2-589]|8(?:0[014-9]|[12])|9[358]|(?:3[2-5]|4[235]|5[2-578]|6[0389]|76|8[3-7]|9[24])1|(?:44|66)[01346-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,6})\",\"$1-$2\",[\"[13-9]|2[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{7,8})\",\"$1-$2\",[\"2\"],\"0$1\"]],\"0\"],\"BE\":[\"32\",\"00\",\"4\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:80|9)0\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[239]|4[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[15-8]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4\"],\"0$1\"]],\"0\"],\"BF\":[\"226\",\"00\",\"[024-7]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[024-7]\"]]]],\"BG\":[\"359\",\"00\",\"00800\\\\d{7}|[2-7]\\\\d{6,7}|[89]\\\\d{6,8}|2\\\\d{5}\",[6,7,8,9,12],[[\"(\\\\d)(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"43[1-6]|70[1-9]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[356]|4[124-7]|7[1-9]|8[1-6]|9[1-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"(?:70|8)0\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3\",[\"43[1-7]|7\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[48]|9[08]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"BH\":[\"973\",\"00\",\"[136-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[13679]|8[02-4679]\"]]]],\"BI\":[\"257\",\"00\",\"(?:[267]\\\\d|31)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2367]\"]]]],\"BJ\":[\"229\",\"00\",\"(?:01\\\\d|8)\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"0\"]]]],\"BL\":[\"590\",\"00\",\"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"(?:59(?:0(?:2[7-9]|3[3-7]|5[12]|87)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],[\"8[129]\\\\d{7}\"],0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"BM\":[\"1\",\"011\",\"(?:441|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"441$1\",0,\"441\"],\"BN\":[\"673\",\"00\",\"[2-578]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-578]\"]]]],\"BO\":[\"591\",\"00(?:1\\\\d)?\",\"(?:[2-7]\\\\d\\\\d|8001)\\\\d{5}\",[8,9],[[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[23]|4[46]|50\"]],[\"(\\\\d{8})\",\"$1\",[\"[5-7]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\",0,\"0(1\\\\d)?\"],\"BQ\":[\"599\",\"00\",\"(?:[34]1|7\\\\d)\\\\d{5}\",[7],0,0,0,0,0,0,\"[347]\"],\"BR\":[\"55\",\"00(?:1[245]|2[1-35]|31|4[13]|[56]5|99)\",\"[1-467]\\\\d{9,10}|55[0-46-9]\\\\d{8}|[34]\\\\d{7}|55\\\\d{7,8}|(?:5[0-46-9]|[89]\\\\d)\\\\d{7,9}\",[8,9,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"300|4(?:0[02]|37|86)\",\"300|4(?:0(?:0|20)|370|864)\"]],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:[358]|90)0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2-$3\",[\"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-57]\"],\"($1)\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1 $2-$3\",[\"[16][1-9]|[2-57-9]\"],\"($1)\"]],\"0\",0,\"(?:0|90)(?:(1[245]|2[1-35]|31|4[13]|[56]5|99)(\\\\d{10,11}))?\",\"$2\"],\"BS\":[\"1\",\"011\",\"(?:242|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([3-8]\\\\d{6})$|1\",\"242$1\",0,\"242\"],\"BT\":[\"975\",\"00\",\"[178]\\\\d{7}|[2-8]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-6]|7[246]|8[2-4]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[67]|[78]\"]]]],\"BW\":[\"267\",\"00\",\"(?:0800|(?:[37]|800)\\\\d)\\\\d{6}|(?:[2-6]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-6]|3[15-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"BY\":[\"375\",\"810\",\"(?:[12]\\\\d|33|44|902)\\\\d{7}|8(?:0[0-79]\\\\d{5,7}|[1-7]\\\\d{9})|8(?:1[0-489]|[5-79]\\\\d)\\\\d{7}|8[1-79]\\\\d{6,7}|8[0-79]\\\\d{5}|8\\\\d{5}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"800\"],\"8 $1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,4})\",\"$1 $2 $3\",[\"800\"],\"8 $1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{3})\",\"$1 $2-$3\",[\"1(?:5[169]|6[3-5]|7[179])|2(?:1[35]|2[34]|3[3-5])\",\"1(?:5[169]|6(?:3[1-3]|4|5[125])|7(?:1[3-9]|7[0-24-6]|9[2-7]))|2(?:1[35]|2[34]|3[3-5])\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"1(?:[56]|7[467])|2[1-3]\"],\"8 0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-4]\"],\"8 0$1\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"8 $1\"]],\"8\",0,\"0|80?\",0,0,0,0,\"8~10\"],\"BZ\":[\"501\",\"00\",\"(?:0800\\\\d|[2-8])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-8]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"0\"]]]],\"CA\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[7,10],0,\"1\",0,0,0,0,0,[[\"(?:2(?:04|[23]6|[48]9|5[07]|63)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42))[2-9]\\\\d{6}\",[10]],[\"\",[10]],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\",[10]],[\"900[2-9]\\\\d{6}\",[10]],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|(?:5(?:2[125-9]|3[23]|44|66|77|88)|6(?:22|33))[2-9]\\\\d{6}\",[10]],0,[\"310\\\\d{4}\",[7]],0,[\"600[2-9]\\\\d{6}\",[10]]]],\"CC\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:02|31|60|89)|1(?:18|76)|223)|91(?:0(?:1[0-2]|29)|1(?:[28]2|50|79)|2(?:10|64)|3(?:[06]8|22)|4[29]8|62\\\\d|70[23]|959))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CD\":[\"243\",\"00\",\"(?:(?:[189]|5\\\\d)\\\\d|2)\\\\d{7}|[1-68]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"[1-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"5\"],\"0$1\"]],\"0\"],\"CF\":[\"236\",\"00\",\"8776\\\\d{4}|(?:[27]\\\\d|61)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-8]\"]]]],\"CG\":[\"242\",\"00\",\"222\\\\d{6}|(?:0\\\\d|80)\\\\d{7}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[02]\"]]]],\"CH\":[\"41\",\"00\",\"8\\\\d{11}|[2-9]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8[047]|90\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]|81\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"8\"],\"0$1\"]],\"0\"],\"CI\":[\"225\",\"00\",\"[02]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d)(\\\\d{5})\",\"$1 $2 $3 $4\",[\"2\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"0\"]]]],\"CK\":[\"682\",\"00\",\"[2-578]\\\\d{4}\",[5],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"[2-578]\"]]]],\"CL\":[\"56\",\"(?:0|1(?:1[0-69]|2[02-5]|5[13-58]|69|7[0167]|8[018]))0\",\"12300\\\\d{6}|6\\\\d{9,10}|[2-9]\\\\d{8}\",[9,10,11],[[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"219\",\"2196\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"60|809\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[1-36]\"],\"($1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"9(?:10|[2-9])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3[2-5]|[47]|5[1-3578]|6[13-57]|8(?:0[1-8]|[1-9])\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"60|8\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"60\"]]]],\"CM\":[\"237\",\"00\",\"[26]\\\\d{8}|88\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"88\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[26]|88\"]]]],\"CN\":[\"86\",\"00|1(?:[12]\\\\d|79)\\\\d\\\\d00\",\"(?:(?:1[03-689]|2\\\\d)\\\\d\\\\d|6)\\\\d{8}|1\\\\d{10}|[126]\\\\d{6}(?:\\\\d(?:\\\\d{2})?)?|86\\\\d{5,6}|(?:[3-579]\\\\d|8[0-57-9])\\\\d{5,9}\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5,6})\",\"$1 $2\",[\"(?:10|2[0-57-9])[19]|3(?:[157]|35|49|9[1-68])|4(?:1[124-9]|2[179]|6[47-9]|7|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:07|1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3|4[13]|5[1-5]|7[0-79]|9[0-35-9])|(?:4[35]|59|85)[1-9]\",\"(?:10|2[0-57-9])(?:1[02]|9[56])|8078|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))1\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|80781|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))12\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|807812|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\",\"10(?:1(?:0|23)|9[56])|2[0-57-9](?:1(?:00|23)|9[56])|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:1[124-9]|2[179]|[35][1-9]|6[47-9]|7\\\\d|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:078|1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|3\\\\d|4[13]|5[1-5]|7[0-79]|9[0-35-9]))123\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"3(?:[157]|35|49|9[1-68])|4(?:[17]|2[179]|6[47-9]|8[23])|5(?:[1357]|2[37]|4[36]|6[1-46]|80)|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])|(?:4[35]|59|85)[1-9]\",\"(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[1-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))[19]\",\"85[23](?:10|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:10|9[56])\",\"85[23](?:100|95)|(?:3(?:[157]\\\\d|35|49|9[1-68])|4(?:[17]\\\\d|2[179]|[35][1-9]|6[47-9]|8[23])|5(?:[1357]\\\\d|2[37]|4[36]|6[1-46]|80|9[1-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\\\d|2[248]|3[014-9]|4[3-6]|6[023689])|8(?:1[236-8]|2[5-7]|[37]\\\\d|5[14-9]|8[36-8]|9[1-8])|9(?:0[1-3689]|1[1-79]|[379]\\\\d|4[13]|5[1-5]))(?:100|9[56])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"(?:4|80)0\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|2(?:[02-57-9]|1[1-9])\",\"10|2(?:[02-57-9]|1[1-9])\",\"10[0-79]|2(?:[02-57-9]|1[1-79])|(?:10|21)8(?:0[1-9]|[1-9])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[3-59]|7[02-68])|4(?:[26-8]|3[3-9]|5[2-9])|5(?:3[03-9]|[468]|7[028]|9[2-46-9])|6|7(?:[0-247]|3[04-9]|5[0-4689]|6[2368])|8(?:[1-358]|9[1-7])|9(?:[013479]|5[1-5])|(?:[34]1|55|79|87)[02-9]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-578]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"1[3-9]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"[12]\"],\"0$1\",1]],\"0\",0,\"(1(?:[12]\\\\d|79)\\\\d\\\\d)|0\",0,0,0,0,\"00\"],\"CO\":[\"57\",\"00(?:4(?:[14]4|56)|[579])\",\"(?:46|60\\\\d\\\\d)\\\\d{6}|(?:1\\\\d|[39])\\\\d{9}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"46\"]],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"6|90\"],\"($1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3[0-357]|9[14]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{7})\",\"$1-$2-$3\",[\"1\"],\"0$1\",0,\"$1 $2 $3\"]],\"0\",0,\"0([3579]|4(?:[14]4|56))?\"],\"CR\":[\"506\",\"00\",\"(?:8\\\\d|90)\\\\d{8}|(?:[24-8]\\\\d{3}|3005)\\\\d{4}\",[8,10],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[3-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[89]\"]]],0,0,\"(19(?:0[0-2468]|1[09]|20|66|77|99))\"],\"CU\":[\"53\",\"119\",\"(?:[2-7]|8\\\\d\\\\d)\\\\d{7}|[2-47]\\\\d{6}|[34]\\\\d{5}\",[6,7,8,10],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"2[1-4]|[34]\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{6,7})\",\"$1 $2\",[\"7\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"[56]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"8\"],\"0$1\"]],\"0\"],\"CV\":[\"238\",\"0\",\"(?:[2-59]\\\\d\\\\d|800)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"CW\":[\"599\",\"00\",\"(?:[34]1|60|(?:7|9\\\\d)\\\\d)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[3467]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9[4-8]\"]]],0,0,0,0,0,\"[69]\"],\"CX\":[\"61\",\"001[14-689]|14(?:1[14]|34|4[17]|[56]6|7[47]|88)0011\",\"1(?:[0-79]\\\\d{8}(?:\\\\d{2})?|8[0-24-9]\\\\d{7})|[148]\\\\d{8}|1\\\\d{5,7}\",[6,7,8,9,10,12],0,\"0\",0,\"([59]\\\\d{7})$|0\",\"8$1\",0,0,[[\"8(?:51(?:0(?:01|30|59|88)|1(?:17|46|75)|2(?:22|35))|91(?:00[6-9]|1(?:[28]1|49|78)|2(?:09|63)|3(?:12|26|75)|4(?:56|97)|64\\\\d|7(?:0[01]|1[0-2])|958))\\\\d{3}\",[9]],[\"4(?:79[01]|83[0-36-9]|95[0-3])\\\\d{5}|4(?:[0-36]\\\\d|4[047-9]|[58][0-24-9]|7[02-8]|9[0-47-9])\\\\d{6}\",[9]],[\"180(?:0\\\\d{3}|2)\\\\d{3}\",[7,10]],[\"190[0-26]\\\\d{6}\",[10]],0,0,0,0,[\"14(?:5(?:1[0458]|[23][458])|71\\\\d)\\\\d{4}\",[9]],[\"13(?:00\\\\d{6}(?:\\\\d{2})?|45[0-4]\\\\d{3})|13\\\\d{4}\",[6,8,10,12]]],\"0011\"],\"CY\":[\"357\",\"00\",\"(?:[279]\\\\d|[58]0)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[257-9]\"]]]],\"CZ\":[\"420\",\"00\",\"(?:[2-578]\\\\d|60)\\\\d{7}|9\\\\d{8,11}\",[9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]|9[015-7]\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"96\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]]],\"DE\":[\"49\",\"00\",\"[2579]\\\\d{5,14}|49(?:[34]0|69|8\\\\d)\\\\d\\\\d?|49(?:37|49|60|7[089]|9\\\\d)\\\\d{1,3}|49(?:2[024-9]|3[2-689]|7[1-7])\\\\d{1,8}|(?:1|[368]\\\\d|4[0-8])\\\\d{3,13}|49(?:[015]\\\\d|2[13]|31|[46][1-8])\\\\d{1,9}\",[4,5,6,7,8,9,10,11,12,13,14,15],[[\"(\\\\d{2})(\\\\d{3,13})\",\"$1 $2\",[\"3[02]|40|[68]9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,12})\",\"$1 $2\",[\"2(?:0[1-389]|1[124]|2[18]|3[14])|3(?:[35-9][15]|4[015])|906|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\",\"2(?:0[1-389]|12[0-8])|3(?:[35-9][15]|4[015])|906|2(?:[13][14]|2[18])|(?:2[4-9]|4[2-9]|[579][1-9]|[68][1-8])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2,11})\",\"$1 $2\",[\"[24-6]|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]\",\"[24-6]|3(?:3(?:0[1-467]|2[127-9]|3[124578]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|4[13578]|9[1346])|5(?:0[14]|2[1-3589]|6[1-4]|7[13468]|8[13568])|6(?:2[1-489]|3[124-6]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|6|7[1467]|8[136])|9(?:0[12479]|2[1358]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))|70[2-8]|8(?:0[2-9]|[1-8])|90[7-9]|[79][1-9]|3[68]4[1347]|3(?:47|60)[1356]|3(?:3[46]|46|5[49])[1246]|3[4579]3[1357]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"138\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{2,10})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,11})\",\"$1 $2\",[\"181\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{4,10})\",\"$1 $2 $3\",[\"1(?:3|80)|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,8})\",\"$1 $2\",[\"1[67]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7,12})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"185\",\"1850\",\"18500\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"18[68]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{7})\",\"$1 $2\",[\"15[1279]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{6})\",\"$1 $2\",[\"15[03568]\",\"15(?:[0568]|3[13])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{8})\",\"$1 $2\",[\"18\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{7,8})\",\"$1 $2 $3\",[\"1(?:6[023]|7)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{7})\",\"$1 $2 $3\",[\"15[279]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{8})\",\"$1 $2 $3\",[\"15\"],\"0$1\"]],\"0\"],\"DJ\":[\"253\",\"00\",\"(?:2\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[27]\"]]]],\"DK\":[\"45\",\"00\",\"[2-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-9]\"]]]],\"DM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|767|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"767$1\",0,\"767\"],\"DO\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"8001|8[024]9\"],\"DZ\":[\"213\",\"00\",\"(?:[1-4]|[5-79]\\\\d|80)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-8]\"],\"0$1\"]],\"0\"],\"EC\":[\"593\",\"00\",\"1\\\\d{9,10}|(?:[2-7]|9\\\\d)\\\\d{7}\",[8,9,10,11],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2-$3\",[\"[2-7]\"],\"(0$1)\",0,\"$1-$2-$3\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"EE\":[\"372\",\"00\",\"8\\\\d{9}|[4578]\\\\d{7}|(?:[3-8]\\\\d|90)\\\\d{5}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[369]|4[3-8]|5(?:[0-2]|5[0-478]|6[45])|7[1-9]|88\",\"[369]|4[3-8]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))|7[1-9]|88\"]],[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[45]|8(?:00|[1-49])\",\"[45]|8(?:00[1-9]|[1-49])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"EG\":[\"20\",\"00\",\"[189]\\\\d{8,9}|[24-6]\\\\d{8}|[135]\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{7,8})\",\"$1 $2\",[\"[23]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,7})\",\"$1 $2\",[\"1[35]|[4-6]|8[2468]|9[235-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{8})\",\"$1 $2\",[\"1\"],\"0$1\"]],\"0\"],\"EH\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],0,\"0\",0,0,0,0,0,[[\"528[89]\\\\d{5}\"],[\"(?:6(?:[0-79]\\\\d|8[0-247-9])|7(?:[016-8]\\\\d|2[0-8]|5[0-5]))\\\\d{6}\"],[\"80[0-7]\\\\d{6}\"],[\"89\\\\d{7}\"],0,0,0,0,[\"(?:592(?:4[0-2]|93)|80[89]\\\\d\\\\d)\\\\d{4}\"]]],\"ER\":[\"291\",\"00\",\"[178]\\\\d{6}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[178]\"],\"0$1\"]],\"0\"],\"ES\":[\"34\",\"00\",\"[5-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[89]00\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-9]\"]]]],\"ET\":[\"251\",\"00\",\"(?:11|[2-57-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-57-9]\"],\"0$1\"]],\"0\"],\"FI\":[\"358\",\"00|99(?:[01469]|5(?:[14]1|3[23]|5[59]|77|88|9[09]))\",\"[1-35689]\\\\d{4}|7\\\\d{10,11}|(?:[124-7]\\\\d|3[0-46-9])\\\\d{8}|[1-9]\\\\d{5,8}\",[5,6,7,8,9,10,11,12],[[\"(\\\\d{5})\",\"$1\",[\"20[2-59]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"(?:[1-3]0|[68])0|70[07-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,8})\",\"$1 $2\",[\"[14]|2[09]|50|7[135]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6,10})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d)(\\\\d{4,9})\",\"$1 $2\",[\"(?:19|[2568])[1-8]|3(?:0[1-9]|[1-9])|9\"],\"0$1\"]],\"0\",0,0,0,0,\"1[03-79]|[2-9]\",0,\"00\"],\"FJ\":[\"679\",\"0(?:0|52)\",\"45\\\\d{5}|(?:0800\\\\d|[235-9])\\\\d{6}\",[7,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[235-9]|45\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]]],0,0,0,0,0,0,0,\"00\"],\"FK\":[\"500\",\"00\",\"[2-7]\\\\d{4}\",[5]],\"FM\":[\"691\",\"00\",\"(?:[39]\\\\d\\\\d|820)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[389]\"]]]],\"FO\":[\"298\",\"00\",\"[2-9]\\\\d{5}\",[6],[[\"(\\\\d{6})\",\"$1\",[\"[2-9]\"]]],0,0,\"(10(?:01|[12]0|88))\"],\"FR\":[\"33\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0 $1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[1-79]\"],\"0$1\"]],\"0\"],\"GA\":[\"241\",\"00\",\"(?:[067]\\\\d|11)\\\\d{6}|[2-7]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"11|[67]\"],\"0$1\"]],0,0,\"0(11\\\\d{6}|60\\\\d{6}|61\\\\d{6}|6[256]\\\\d{6}|7[467]\\\\d{6})\",\"$1\"],\"GB\":[\"44\",\"00\",\"[1-357-9]\\\\d{9}|[18]\\\\d{8}|8\\\\d{6}\",[7,9,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"800\",\"8001\",\"80011\",\"800111\",\"8001111\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"845\",\"8454\",\"84546\",\"845464\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"1(?:38|5[23]|69|76|94)\",\"1(?:(?:38|69)7|5(?:24|39)|768|946)\",\"1(?:3873|5(?:242|39[4-6])|(?:697|768)[347]|9467)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"1(?:[2-69][02-9]|[78])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[25]|7(?:0|6[02-9])\",\"[25]|7(?:0|6(?:[03-9]|2[356]))\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1389]\"],\"0$1\"]],\"0\",0,\"0|180020\",0,0,0,[[\"(?:1(?:1(?:3(?:[0-58]\\\\d\\\\d|73[0-5])|4(?:(?:[0-5]\\\\d|70)\\\\d|69[7-9])|(?:(?:5[0-26-9]|[78][0-49])\\\\d|6(?:[0-4]\\\\d|5[01]))\\\\d)|(?:2(?:(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|9\\\\d)\\\\d|1(?:[0-7]\\\\d|8[0-3]))|(?:3(?:0\\\\d|1[0-8]|[25][02-9]|3[02-579]|[468][0-46-9]|7[1-35-79]|9[2-578])|4(?:0[03-9]|[137]\\\\d|[28][02-57-9]|4[02-69]|5[0-8]|[69][0-79])|5(?:0[1-35-9]|[16]\\\\d|2[024-9]|3[015689]|4[02-9]|5[03-9]|7[0-35-9]|8[0-468]|9[0-57-9])|6(?:0[034689]|1\\\\d|2[0-35689]|[38][013-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|9[0-24578])|7(?:0[0246-9]|2\\\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[013-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-57-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\\\d|8[02-9]|9[02569])|9(?:0[02-589]|[18]\\\\d|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|9[2-57]))\\\\d)\\\\d)|2(?:0[013478]|3[0189]|4[017]|8[0-46-9]|9[0-2])\\\\d{3})\\\\d{4}|1(?:2(?:0(?:46[1-4]|87[2-9])|545[1-79]|76(?:2\\\\d|3[1-8]|6[1-6])|9(?:7(?:2[0-4]|3[2-5])|8(?:2[2-8]|7[0-47-9]|8[3-5])))|3(?:6(?:38[2-5]|47[23])|8(?:47[04-9]|64[0157-9]))|4(?:044[1-7]|20(?:2[23]|8\\\\d)|6(?:0(?:30|5[2-57]|6[1-8]|7[2-8])|140)|8(?:052|87[1-3]))|5(?:2(?:4(?:3[2-79]|6\\\\d)|76\\\\d)|6(?:26[06-9]|686))|6(?:06(?:4\\\\d|7[4-79])|295[5-7]|35[34]\\\\d|47(?:24|61)|59(?:5[08]|6[67]|74)|9(?:55[0-4]|77[23]))|7(?:26(?:6[13-9]|7[0-7])|(?:442|688)\\\\d|50(?:2[0-3]|[3-68]2|76))|8(?:27[56]\\\\d|37(?:5[2-5]|8[239])|843[2-58])|9(?:0(?:0(?:6[1-8]|85)|52\\\\d)|3583|4(?:66[1-8]|9(?:2[01]|81))|63(?:23|3[1-4])|9561))\\\\d{3}\",[9,10]],[\"7(?:457[0-57-9]|700[01]|911[028])\\\\d{5}|7(?:[1-3]\\\\d\\\\d|4(?:[0-46-9]\\\\d|5[0-689])|5(?:0[0-8]|[13-9]\\\\d|2[0-35-9])|7(?:0[1-9]|[1-7]\\\\d|8[02-9]|9[0-689])|8(?:[014-9]\\\\d|[23][0-8])|9(?:[024-9]\\\\d|1[02-9]|3[0-689]))\\\\d{6}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[2-49]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]],0,\" x\"],\"GD\":[\"1\",\"011\",\"(?:473|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"473$1\",0,\"473\"],\"GE\":[\"995\",\"00\",\"(?:[3-57]\\\\d\\\\d|800)\\\\d{6}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"32\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[57]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[348]\"],\"0$1\"]],\"0\"],\"GF\":[\"594\",\"00\",\"(?:694\\\\d|7093)\\\\d{5}|(?:59|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]|80[6-9]|9[47]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[89]\"],\"0$1\"]],\"0\"],\"GG\":[\"44\",\"00\",\"(?:1481|[357-9]\\\\d{3})\\\\d{6}|8\\\\d{6}(?:\\\\d{2})?\",[7,9,10],0,\"0\",0,\"([25-9]\\\\d{5})$|0|180020\",\"1481$1\",0,0,[[\"1481[25-9]\\\\d{5}\",[10]],[\"7(?:(?:781|839)\\\\d|911[17])\\\\d{5}\",[10]],[\"80[08]\\\\d{7}|800\\\\d{6}|8001111\"],[\"(?:8(?:4[2-5]|7[0-3])|9(?:[01]\\\\d|8[0-3]))\\\\d{7}|845464\\\\d\",[7,10]],[\"70\\\\d{8}\",[10]],0,[\"(?:3[0347]|55)\\\\d{8}\",[10]],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\",[10]],[\"56\\\\d{8}\",[10]]]],\"GH\":[\"233\",\"00\",\"[235]\\\\d{8}|800\\\\d{5,6}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2358]\"],\"0$1\"]],\"0\"],\"GI\":[\"350\",\"00\",\"(?:[25]\\\\d|60)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"2\"]]]],\"GL\":[\"299\",\"00\",\"(?:19|[2-689]\\\\d|70)\\\\d{4}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"19|[2-9]\"]]]],\"GM\":[\"220\",\"00\",\"[2-9]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"GN\":[\"224\",\"00\",\"722\\\\d{6}|(?:3|6\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"3\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[67]\"]]]],\"GP\":[\"590\",\"00\",\"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|80[6-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"(?:59(?:0(?:0[1-68]|[14][0-24-9]|2[0-68]|3[1-9]|5[3-579]|[68][0-689]|7[08]|9\\\\d)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],[\"8[129]\\\\d{7}\"],0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"GQ\":[\"240\",\"00\",\"222\\\\d{6}|(?:3\\\\d|55|[89]0)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235]\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[89]\"]]]],\"GR\":[\"30\",\"00\",\"5005000\\\\d{3}|8\\\\d{9,11}|(?:[269]\\\\d|70)\\\\d{8}\",[10,11,12],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"21|7\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"2(?:2|3[2-57-9]|4[2-469]|5[2-59]|6[2-9]|7[2-69]|8[2-49])|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2689]\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{5})\",\"$1 $2 $3\",[\"8\"]]]],\"GT\":[\"502\",\"00\",\"80\\\\d{6}|(?:1\\\\d{3}|[2-7])\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-8]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"GU\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|671|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"671$1\",0,\"671\"],\"GW\":[\"245\",\"00\",\"[49]\\\\d{8}|4\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"40\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"]]]],\"GY\":[\"592\",\"001\",\"(?:[2-8]\\\\d{3}|9008)\\\\d{3}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"HK\":[\"852\",\"00(?:30|5[09]|[126-9]?)\",\"8[0-46-9]\\\\d{6,7}|9\\\\d{4,7}|(?:[2-7]|9\\\\d{3})\\\\d{7}\",[5,6,7,8,9,11],[[\"(\\\\d{3})(\\\\d{2,5})\",\"$1 $2\",[\"900\",\"9003\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2-7]|8[1-4]|9(?:0[1-9]|[1-8])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"9\"]]],0,0,0,0,0,0,0,\"00\"],\"HN\":[\"504\",\"00\",\"8\\\\d{10}|[237-9]\\\\d{7}\",[8,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[237-9]\"]]]],\"HR\":[\"385\",\"00\",\"[2-69]\\\\d{8}|80\\\\d{5,7}|[1-79]\\\\d{7}|6\\\\d{6}\",[7,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"6[01]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6|7[245]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-57]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"HT\":[\"509\",\"00\",\"[2-589]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-589]\"]]]],\"HU\":[\"36\",\"00\",\"[235-7]\\\\d{8}|[1-9]\\\\d{7}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27][2-9]|3[2-7]|4[24-9]|5[2-79]|6|8[2-57-9]|9[2-69]\"],\"(06 $1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"06 $1\"]],\"06\"],\"ID\":[\"62\",\"00[89]\",\"00[1-9]\\\\d{9,14}|(?:[1-36]|8\\\\d{5})\\\\d{6}|00\\\\d{9}|[1-9]\\\\d{8,10}|[2-9]\\\\d{7}\",[7,8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"15\"]],[\"(\\\\d{2})(\\\\d{5,9})\",\"$1 $2\",[\"2[124]|[36]1\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,7})\",\"$1 $2\",[\"800\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5,8})\",\"$1 $2\",[\"[2-79]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{3})\",\"$1-$2-$3\",[\"8[1-35-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6,8})\",\"$1 $2\",[\"1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"804\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"80\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1-$2-$3\",[\"8\"],\"0$1\"]],\"0\"],\"IE\":[\"353\",\"00\",\"(?:1\\\\d|[2569])\\\\d{6,8}|4\\\\d{6,9}|7\\\\d{8}|8\\\\d{8,9}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"2[24-9]|47|58|6[237-9]|9[35-9]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[45]0\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2569]|4[1-69]|7[14]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"70\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"81\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"4\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"IL\":[\"972\",\"0(?:0|1[2-9])\",\"1\\\\d{6}(?:\\\\d{3,5})?|[57]\\\\d{8}|[1-489]\\\\d{7}\",[7,8,9,10,11,12],[[\"(\\\\d{4})(\\\\d{3})\",\"$1-$2\",[\"125\"]],[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"121\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[2-489]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"12\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1-$2\",[\"159\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3-$4\",[\"1[7-9]\"]],[\"(\\\\d{3})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3-$4\",[\"15\"]]],\"0\"],\"IM\":[\"44\",\"00\",\"1624\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([25-8]\\\\d{5})$|0|180020\",\"1624$1\",0,\"74576|(?:16|7[56])24\"],\"IN\":[\"91\",\"00\",\"(?:000800|[2-9]\\\\d\\\\d)\\\\d{7}|1\\\\d{7,12}\",[8,9,10,11,12,13],[[\"(\\\\d{8})\",\"$1\",[\"5(?:0|2[23]|3[03]|[67]1|88)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|888)\",\"5(?:0|2(?:21|3)|3(?:0|3[23])|616|717|8888)\"],0,1],[\"(\\\\d{4})(\\\\d{4,5})\",\"$1 $2\",[\"180\",\"1800\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"140\"],0,1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[02]|33|4[04]|79[1-7]|80[2-46]\",\"11|2[02]|33|4[04]|79(?:[1-6]|7[19])|80(?:[2-4]|6[0-589])\",\"11|2[02]|33|4[04]|79(?:[124-6]|3(?:[02-9]|1[0-24-9])|7(?:1|9[1-6]))|80(?:[2-4]|6[0-589])\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1(?:2[0-249]|3[0-25]|4[145]|[68]|7[1257])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|5[12]|[78]1)|6(?:12|[2-4]1|5[17]|6[13]|80)|7(?:12|3[134]|61|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)|(?:43|59|75)[15]|(?:1[59]|29|67)[14]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|674|7(?:(?:3[34]|5[15])[2-6]|61[346]|88[0-8])|8(?:70[2-6]|84[235-7]|91[3-7])|(?:1(?:29|60|8[06])|261|552|6(?:12|[2-47]1|5[17]|6[13]|80)|7(?:12|31)|8(?:16|2[014]|3[126]|6[136]|7[78]|83))[2-7]\",\"1(?:2[0-24]|3[0-25]|4[145]|[59][14]|6[1-9]|7[1257]|8[1-57-9])|2(?:1[257]|3[013]|4[01]|5[0137]|6[058]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[0-26-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[025]|22|[36][25]|4[28]|[578]1|9[15])|6(?:12(?:[2-6]|7[0-8])|74[2-7])|7(?:3171|5[15][2-6]|61[346]|88(?:[2-7]|82))|8(?:70[2-6]|84(?:[2356]|7[19])|91(?:[3-6]|7[19]))|73[134][2-6]|8(?:16|2[014]|3[126]|6[136]|7[78]|83)(?:[2-6]|7[19])|(?:1(?:29|60|8[06])|261|552|6(?:[2-4]1|5[17]|6[13]|7(?:1|4[0189])|80)|7(?:12|88[01]))[2-7]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2[2457-9]|3[2-5]|4[235-7]|5[2-689]|6[24578]|7[235689]|8[1-6])|7(?:1[013-9]|3[129]|5[29]|6[02-5]|70)|807\",\"1(?:[2-479]|5[0235-9])|[2-5]|6(?:1[1358]|2(?:[2457]|84|95)|3(?:[2-4]|55)|4[235-7]|5[2-689]|6[24578]|7(?:[23569]|8[0-57-9])|8[1-6])|7(?:1(?:[013-8]|9[6-9])|3(?:17|2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4|5[0-367])|70[13-7])|807[19]\",\"1(?:[2-479]|5(?:[0236-9]|5[013-9]))|[2-5]|6(?:2(?:84|95)|355|8(?:28[235-7]|3))|73179|807(?:1|9[1-3])|(?:1552|6(?:(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24578])\\\\d|7(?:[23569]\\\\d|8[0-57-9])|8(?:[14-6]\\\\d|2[0-79]))|7(?:1(?:[013-8]\\\\d|9[6-9])|3(?:2[0-49]|9[2-57])|5(?:2[1-3]|9[0-6])|6(?:0[5689]|2[5-9]|3[02-8]|4\\\\d|5[0-367])|70[13-7]))[2-7]\"],\"0$1\",1],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"16|[6-9]\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{2,4})(\\\\d{4})\",\"$1 $2 $3\",[\"18[06]\",\"18[06]0\"],0,1],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"18\"],0,1]],\"0\"],\"IO\":[\"246\",\"00\",\"3\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"3\"]]]],\"IQ\":[\"964\",\"00\",\"(?:1|7\\\\d\\\\d)\\\\d{7}|[2-6]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"IR\":[\"98\",\"00\",\"[1-9]\\\\d{9}|(?:[1-8]\\\\d\\\\d|9)\\\\d{3,4}\",[4,5,6,7,10],[[\"(\\\\d{4,5})\",\"$1\",[\"96\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4,5})\",\"$1 $2\",[\"(?:1[137]|2[13-68]|3[1458]|4[145]|5[1468]|6[16]|7[1467]|8[13467])[12689]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-8]\"],\"0$1\"]],\"0\"],\"IS\":[\"354\",\"00|1(?:0(?:01|[12]0)|100)\",\"(?:38\\\\d|[4-9])\\\\d{6}\",[7,9],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[4-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"3\"]]],0,0,0,0,0,0,0,\"00\"],\"IT\":[\"39\",\"00\",\"0\\\\d{5,11}|1\\\\d{8,10}|3(?:[0-8]\\\\d{7,10}|9\\\\d{7,8})|(?:43|55|70)\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?\",[6,7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{4,6})\",\"$1 $2\",[\"0[26]\"]],[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"0[13-57-9][0159]|8(?:03|4[17]|9[2-5])\",\"0[13-57-9][0159]|8(?:03|4[17]|9(?:2|3[04]|[45][0-4]))\"]],[\"(\\\\d{4})(\\\\d{2,6})\",\"$1 $2\",[\"0(?:[13-579][2-46-8]|8[236-8])\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"894\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[26]|5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"1(?:44|[679])|[378]|43\"]],[\"(\\\\d{3})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"0[13-57-9][0159]|14\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{5})\",\"$1 $2 $3\",[\"0[26]\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[03]\"]]],0,0,0,0,0,0,[[\"0(?:669[0-79]\\\\d{1,6}|831\\\\d{2,8})|0(?:1(?:[0159]\\\\d|[27][1-5]|31|4[1-4]|6[1356]|8[2-57])|2\\\\d\\\\d|3(?:[0159]\\\\d|2[1-4]|3[12]|[48][1-6]|6[2-59]|7[1-7])|4(?:[0159]\\\\d|[23][1-9]|4[245]|6[1-5]|7[1-4]|81)|5(?:[0159]\\\\d|2[1-5]|3[2-6]|4[1-79]|6[4-6]|7[1-578]|8[3-8])|6(?:[0-57-9]\\\\d|6[0-8])|7(?:[0159]\\\\d|2[12]|3[1-7]|4[2-46]|6[13569]|7[13-6]|8[1-59])|8(?:[0159]\\\\d|2[3-578]|3[2356]|[6-8][1-5])|9(?:[0159]\\\\d|[238][1-5]|4[12]|6[1-8]|7[1-6]))\\\\d{2,7}\"],[\"3[2-9]\\\\d{7,8}|(?:31|43)\\\\d{8}\",[9,10]],[\"80(?:0\\\\d{3}|3)\\\\d{3}\",[6,9]],[\"(?:0878\\\\d{3}|89(?:2\\\\d|3[04]|4(?:[0-4]|[5-9]\\\\d\\\\d)|5[0-4]))\\\\d\\\\d|(?:1(?:44|6[346])|89(?:38|5[5-9]|9))\\\\d{6}\",[6,8,9,10]],[\"1(?:78\\\\d|99)\\\\d{6}\",[9,10]],[\"3[2-8]\\\\d{9,10}\",[11,12]],0,0,[\"55\\\\d{8}\",[10]],[\"84(?:[08]\\\\d{3}|[17])\\\\d{3}\",[6,9]]]],\"JE\":[\"44\",\"00\",\"1534\\\\d{6}|(?:[3578]\\\\d|90)\\\\d{8}\",[10],0,\"0\",0,\"([0-24-8]\\\\d{5})$|0|180020\",\"1534$1\",0,0,[[\"1534[0-24-8]\\\\d{5}\"],[\"7(?:(?:(?:50|82)9|937)\\\\d|7(?:00[378]|97\\\\d))\\\\d{5}\"],[\"80(?:07(?:35|81)|8901)\\\\d{4}\"],[\"(?:8(?:4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|90(?:066[59]|1810|71(?:07|55)))\\\\d{4}\"],[\"701511\\\\d{4}\"],0,[\"(?:3(?:0(?:07(?:35|81)|8901)|3\\\\d{4}|4(?:4(?:4(?:05|42|69)|703)|5(?:041|800))|7(?:0002|1206))|55\\\\d{4})\\\\d{4}\"],[\"76(?:464|652)\\\\d{5}|76(?:0[0-28]|2[356]|34|4[01347]|5[49]|6[0-369]|77|8[14]|9[139])\\\\d{6}\"],[\"56\\\\d{8}\"]]],\"JM\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|658|900)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"658|876\"],\"JO\":[\"962\",\"00\",\"(?:(?:[2689]|7\\\\d)\\\\d|32|427|53)\\\\d{6}\",[8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2356]|87\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"70\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[47]\"],\"0$1\"]],\"0\"],\"JP\":[\"81\",\"010\",\"00[1-9]\\\\d{6,14}|[25-9]\\\\d{9}|(?:00|[1-9]\\\\d\\\\d)\\\\d{6}\",[8,9,10,11,12,13,14,15,16,17],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1-$2-$3\",[\"(?:12|57|99)0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|499|5(?:76|97)|746|8(?:3[89]|47|51)|9(?:80|9[16])\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:76|97)9|7468|8(?:3(?:8[7-9]|96)|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\",\"1(?:267|3(?:7[247]|9[278])|466|5(?:47|58|64)|6(?:3[245]|48|5[4-68]))|499[2468]|5(?:769|979[2-69])|7468|8(?:3(?:8[7-9]|96[2457-9])|477|51[2-9])|9(?:802|9(?:1[23]|69))|1(?:45|58)[67]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"60\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"3|4(?:2[09]|7[01])|6[1-9]\",\"3|4(?:2(?:0|9[02-69])|7(?:0[019]|1))|6[1-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"1(?:1|5[45]|77|88|9[69])|2(?:2[1-37]|3[0-269]|4[59]|5|6[24]|7[1-358]|8[1369]|9[0-38])|4(?:[28][1-9]|3[0-57]|[45]|6[248]|7[2-579]|9[29])|5(?:2|3[0459]|4[0-369]|5[29]|8[02389]|9[0-389])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9[2-6])|8(?:2[124589]|3[26-9]|49|51|6|7[0-468]|8[68]|9[019])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9[1-489])\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2(?:[127]|3[014-9])|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9[19])|62|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|8[1-9]|9[29])|5(?:2|3(?:[045]|9[0-8])|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0-2469])|3(?:[29]|60)|49|51|6(?:[0-24]|36|5[0-3589]|7[23]|9[01459])|7[0-468]|8[68])|9(?:[23][1-9]|4[15]|5[138]|6[1-3]|7[156]|8[189]|9(?:[1289]|3[34]|4[0178]))|(?:264|837)[016-9]|2(?:57|93)[015-9]|(?:25[0468]|422|838)[01]|(?:47[59]|59[89]|8(?:6[68]|9))[019]\",\"1(?:1|5(?:4[018]|5[017])|77|88|9[69])|2(?:2[127]|3[0-269]|4[59]|5(?:[1-3]|5[0-69]|9(?:17|99))|6(?:2|4[016-9])|7(?:[1-35]|8[0189])|8(?:[16]|3[0134]|9[0-5])|9(?:[028]|17))|4(?:2(?:[13-79]|8[014-6])|3[0-57]|[45]|6[248]|7[2-47]|9[29])|5(?:2|3(?:[045]|9(?:[0-58]|6[4-9]|7[0-35689]))|4[0-369]|5[29]|8[02389]|9[0-3])|7(?:2[02-46-9]|34|[58]|6[0249]|7[57]|9(?:[23]|4[0-59]|5[01569]|6[0167]))|8(?:2(?:[1258]|4[0-39]|9[0169])|3(?:[29]|60|7(?:[017-9]|6[6-8]))|49|51|6(?:[0-24]|36[2-57-9]|5(?:[0-389]|5[23])|6(?:[01]|9[178])|7(?:2[2-468]|3[78])|9[0145])|7[0-468]|8[68])|9(?:4[15]|5[138]|7[156]|8[189]|9(?:[1289]|3(?:31|4[357])|4[0178]))|(?:8294|96)[1-3]|2(?:57|93)[015-9]|(?:223|8699)[014-9]|(?:25[0468]|422|838)[01]|(?:48|8292|9[23])[1-9]|(?:47[59]|59[89]|8(?:68|9))[019]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3\",[\"[14]|[289][2-9]|5[3-9]|7[2-4679]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"800\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[25-9]\"],\"0$1\"]],\"0\",0,\"(000[2569]\\\\d{4,6})$|(?:(?:003768)0?)|0\",\"$1\"],\"KE\":[\"254\",\"000\",\"(?:[17]\\\\d\\\\d|900)\\\\d{6}|(?:2|80)0\\\\d{6,7}|[4-6]\\\\d{6,8}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"[24-6]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[17]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\"],\"KG\":[\"996\",\"00\",\"8\\\\d{9}|[235-9]\\\\d{8}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3(?:1[346]|[24-79])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-79]|88\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d)(\\\\d{2,3})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"KH\":[\"855\",\"00[14-9]\",\"1\\\\d{9}|[1-9]\\\\d{7,8}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"KI\":[\"686\",\"00\",\"(?:[37]\\\\d|6[0-79])\\\\d{6}|(?:[2-48]\\\\d|50)\\\\d{3}\",[5,8],0,\"0\"],\"KM\":[\"269\",\"00\",\"[3478]\\\\d{6}\",[7],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[3478]\"]]]],\"KN\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"869$1\",0,\"869\"],\"KP\":[\"850\",\"00|99\",\"85\\\\d{6}|(?:19\\\\d|[2-7])\\\\d{7}\",[8,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-7]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"KR\":[\"82\",\"00(?:[125689]|3(?:[46]5|91)|7(?:00|27|3|55|6[126]))\",\"00[1-9]\\\\d{8,11}|(?:[12]|5\\\\d{3})\\\\d{7}|[13-6]\\\\d{9}|(?:[1-6]\\\\d|80)\\\\d{7}|[3-6]\\\\d{4,5}|(?:00|7)0\\\\d{8}\",[5,6,8,9,10,11,12,13,14],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1-$2\",[\"(?:3[1-3]|[46][1-4]|5[1-5])1\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"1\"]],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1-$2-$3\",[\"[36]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1-$2-$3\",[\"[1346]|5[1-5]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2-$3\",[\"[57]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})(\\\\d{4})\",\"$1-$2-$3\",[\"5\"],\"0$1\"]],\"0\",0,\"0(8(?:[1-46-8]|5\\\\d\\\\d))?\"],\"KW\":[\"965\",\"00\",\"18\\\\d{5}|(?:[2569]\\\\d|41)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3,4})\",\"$1 $2\",[\"[169]|2(?:[235]|4[1-35-9])|52\"]],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[245]\"]]]],\"KY\":[\"1\",\"011\",\"(?:345|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"345$1\",0,\"345\"],\"KZ\":[\"7\",\"810\",\"8\\\\d{13}|[78]\\\\d{9}\",[10,14],0,\"8\",0,0,0,0,\"7\",0,\"8~10\"],\"LA\":[\"856\",\"00\",\"[23]\\\\d{9}|3\\\\d{8}|(?:[235-8]\\\\d|41)\\\\d{6}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2[13]|3[14]|[4-8]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\"],\"LB\":[\"961\",\"00\",\"[27-9]\\\\d{7}|[13-9]\\\\d{6}\",[7,8],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[13-69]|7(?:[2-57]|62|8[0-6]|9[04-9])|8[02-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[27-9]\"]]],\"0\"],\"LC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|758|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-8]\\\\d{6})$|1\",\"758$1\",0,\"758\"],\"LI\":[\"423\",\"00\",\"[68]\\\\d{8}|(?:[2378]\\\\d|90)\\\\d{5}\",[7,9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2379]|8(?:0[09]|7)\",\"[2379]|8(?:0(?:02|9)|7)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"69\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]]],\"0\",0,\"(1001)|0\"],\"LK\":[\"94\",\"00\",\"[1-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[1-689]\"],\"0$1\"]],\"0\"],\"LR\":[\"231\",\"00\",\"(?:[2457]\\\\d|33|88)\\\\d{7}|(?:2\\\\d|[4-6])\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4[67]|[56]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-578]\"],\"0$1\"]],\"0\"],\"LS\":[\"266\",\"00\",\"(?:[256]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2568]\"]]]],\"LT\":[\"370\",\"00\",\"(?:[3469]\\\\d|52|[78]0)\\\\d{6}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"52[0-7]\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0 $1\",1],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"37|4(?:[15]|6[1-8])\"],\"(0-$1)\",1],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[3-6]\"],\"(0-$1)\",1]],\"0\",0,\"[08]\"],\"LU\":[\"352\",\"00\",\"35[013-9]\\\\d{4,8}|6\\\\d{8}|35\\\\d{2,4}|(?:[2457-9]\\\\d|3[0-46-9])\\\\d{2,9}\",[4,5,6,7,8,9,10,11],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"2(?:0[2-689]|[2-9])|[3-57]|8(?:0[2-9]|[13-9])|9(?:0[89]|[2-579])\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"20[2-689]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,5})\",\"$1 $2 $3 $4\",[\"[3-57]|8[13-9]|9(?:0[89]|[2-579])|(?:2|80)[2-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"80[01]|90[015]\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"20\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{1,2})\",\"$1 $2 $3 $4 $5\",[\"20\"]]],0,0,\"(15(?:0[06]|1[12]|[35]5|4[04]|6[26]|77|88|99)\\\\d)\"],\"LV\":[\"371\",\"00\",\"(?:[268]\\\\d|78|90)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2679]|8[01]\"]]]],\"LY\":[\"218\",\"00\",\"[2-9]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MA\":[\"212\",\"00\",\"[5-8]\\\\d{8}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1-$2\",[\"892\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1-$2\",[\"8(?:0[0-7]|9)\"],\"0$1\"],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[5-8]\"],\"0$1\"]],\"0\",0,0,0,0,\"[5-8]\"],\"MC\":[\"377\",\"00\",\"(?:[3489]|[67]\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"4\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[389]\"]],[\"(\\\\d)(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4 $5\",[\"[67]\"],\"0$1\"]],\"0\"],\"MD\":[\"373\",\"00\",\"(?:[235-7]\\\\d|[89]0)\\\\d{6}\",[8],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"22|3\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"[25-7]\"],\"0$1\"]],\"0\"],\"ME\":[\"382\",\"00\",\"(?:20|[3-79]\\\\d)\\\\d{6}|80\\\\d{6,7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"]],\"0\"],\"MF\":[\"590\",\"00\",\"7090\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"(?:59(?:0(?:0[079]|[14]3|[27][79]|3[03-7]|5[0-268]|87)|87\\\\d)|80[6-9]\\\\d\\\\d)\\\\d{4}\"],[\"(?:69(?:0\\\\d\\\\d|1(?:2[2-9]|3[0-5]))|7090[0-4])\\\\d{4}\"],[\"80[0-5]\\\\d{6}\"],[\"8[129]\\\\d{7}\"],0,0,0,0,[\"9(?:(?:39[5-7]|76[018])\\\\d|475[0-6])\\\\d{4}\"]]],\"MG\":[\"261\",\"00\",\"[23]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[23]\"],\"0$1\"]],\"0\",0,\"([24-9]\\\\d{6})$|0\",\"20$1\"],\"MH\":[\"692\",\"011\",\"329\\\\d{4}|(?:[256]\\\\d|45)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[2-6]\"]]],\"1\"],\"MK\":[\"389\",\"00\",\"[2-578]\\\\d{7}\",[8],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2|34[47]|4(?:[37]7|5[47]|64)\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[347]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[58]\"],\"0$1\"]],\"0\"],\"ML\":[\"223\",\"00\",\"[24-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24-9]\"]]]],\"MM\":[\"95\",\"00\",\"1\\\\d{5,7}|95\\\\d{6}|(?:[4-7]|9[0-46-9])\\\\d{6,8}|(?:2|8\\\\d)\\\\d{5,8}\",[6,7,8,9,10],[[\"(\\\\d)(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"16|2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"4(?:[2-46]|5[3-5])|5|6(?:[1-689]|7[235-7])|7(?:[0-4]|5[2-7])|8[1-5]|(?:60|86)[23]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[12]|452|678|86\",\"[12]|452|6788|86\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[4-7]|8[1-35]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4,6})\",\"$1 $2 $3\",[\"9(?:2[0-4]|[35-9]|4[137-9])\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"92\"],\"0$1\"],[\"(\\\\d)(\\\\d{5})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"MN\":[\"976\",\"001\",\"[12]\\\\d{7,9}|[5-9]\\\\d{7}\",[8,9,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"11|2[16]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]],[\"(\\\\d{3})(\\\\d{5,6})\",\"$1 $2\",[\"[12]2[1-3]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5,6})\",\"$1 $2\",[\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])\",\"[12](?:27|3[2-8]|4[2-68]|5[1-4689])[0-3]\"],\"0$1\"],[\"(\\\\d{5})(\\\\d{4,5})\",\"$1 $2\",[\"[12]\"],\"0$1\"]],\"0\"],\"MO\":[\"853\",\"00\",\"0800\\\\d{3}|(?:28|[68]\\\\d)\\\\d{6}\",[7,8],[[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[268]\"]]]],\"MP\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:67|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"670$1\",0,\"670\"],\"MQ\":[\"596\",\"00\",\"7091\\\\d{5}|(?:[56]9|[89]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-79]|8(?:0[6-9]|[36])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"MR\":[\"222\",\"00\",\"(?:[2-4]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-48]\"]]]],\"MS\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|664|900)\\\\d{7}\",[10],0,\"1\",0,\"([34]\\\\d{6})$|1\",\"664$1\",0,\"664\"],\"MT\":[\"356\",\"00\",\"3550\\\\d{4}|(?:[2579]\\\\d\\\\d|800)\\\\d{5}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[2357-9]\"]]]],\"MU\":[\"230\",\"0(?:0|[24-7]0|3[03])\",\"(?:[57]|8\\\\d\\\\d)\\\\d{7}|[2-468]\\\\d{6}\",[7,8,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-46]|8[013]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[57]\"]],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"8\"]]],0,0,0,0,0,0,0,\"020\"],\"MV\":[\"960\",\"0(?:0|19)\",\"(?:800|9[0-57-9]\\\\d)\\\\d{7}|[34679]\\\\d{6}\",[7,10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[34679]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]],0,0,0,0,0,0,0,\"00\"],\"MW\":[\"265\",\"00\",\"(?:[1289]\\\\d|31|77)\\\\d{7}|1\\\\d{6}\",[7,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[137-9]\"],\"0$1\"]],\"0\"],\"MX\":[\"52\",\"0[09]\",\"[2-9]\\\\d{9}\",[10],[[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"33|5[56]|81\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"MY\":[\"60\",\"00\",\"1\\\\d{8,9}|(?:3\\\\d|[4-9])\\\\d{7}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"[4-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1-$2 $3\",[\"1(?:[02469]|[378][1-9]|53)|8\",\"1(?:[02469]|[37][1-9]|53|8(?:[1-46-9]|5[7-9]))|8\"],\"0$1\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"3\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1-$2-$3-$4\",[\"1(?:[367]|80)\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1-$2 $3\",[\"15\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1-$2 $3\",[\"1\"],\"0$1\"]],\"0\"],\"MZ\":[\"258\",\"00\",\"(?:2|8\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2|8[2-79]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]]]],\"NA\":[\"264\",\"00\",\"[68]\\\\d{7,8}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"88\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"87\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"NC\":[\"687\",\"00\",\"(?:050|[2-57-9]\\\\d\\\\d)\\\\d{3}\",[6],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1.$2.$3\",[\"[02-57-9]\"]]]],\"NE\":[\"227\",\"00\",\"[027-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"08\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[089]|2[013]|7[0467]\"]]]],\"NF\":[\"672\",\"00\",\"[13]\\\\d{5}\",[6],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"1[0-3]\"]],[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"[13]\"]]],0,0,\"([0-258]\\\\d{4})$\",\"3$1\"],\"NG\":[\"234\",\"009\",\"(?:20|9\\\\d)\\\\d{8}|[78]\\\\d{9,13}\",[10,11,12,13,14],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"20[129]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})(\\\\d{5,6})\",\"$1 $2 $3\",[\"[78]\"],\"0$1\"]],\"0\"],\"NI\":[\"505\",\"00\",\"(?:1800|[25-8]\\\\d{3})\\\\d{4}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[125-8]\"]]]],\"NL\":[\"31\",\"00\",\"(?:[124-7]\\\\d\\\\d|3(?:[02-9]\\\\d|1[0-8]))\\\\d{6}|8\\\\d{6,9}|9\\\\d{6,10}|1\\\\d{4,5}\",[5,6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{4,7})\",\"$1 $2\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"66\"],\"0$1\"],[\"(\\\\d)(\\\\d{8})\",\"$1 $2\",[\"6\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1[16-8]|2[259]|3[124]|4[17-9]|5[124679]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-578]|91\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"9\"],\"0$1\"]],\"0\"],\"NO\":[\"47\",\"00\",\"(?:0|[2-9]\\\\d{3})\\\\d{4}\",[5,8],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[2-79]\"]]],0,0,0,0,0,\"[02-689]|7[0-8]\"],\"NP\":[\"977\",\"00\",\"(?:1\\\\d|9)\\\\d{9}|[1-9]\\\\d{7}\",[8,10,11],[[\"(\\\\d)(\\\\d{7})\",\"$1-$2\",[\"1[2-6]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1-$2\",[\"1[01]|[2-8]|9(?:[1-59]|[67][2-6])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"9\"]]],\"0\"],\"NR\":[\"674\",\"00\",\"(?:222|444|(?:55|8\\\\d)\\\\d|666|777|999)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[24-9]\"]]]],\"NU\":[\"683\",\"00\",\"(?:[4-7]|888\\\\d)\\\\d{3}\",[4,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"8\"]]]],\"NZ\":[\"64\",\"0(?:0|161)\",\"[1289]\\\\d{9}|50\\\\d{5}(?:\\\\d{2,3})?|[27-9]\\\\d{7,8}|(?:[34]\\\\d|6[0-35-9])\\\\d{6}|8\\\\d{4,6}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,8})\",\"$1 $2\",[\"8[1-79]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"50[036-8]|8|90\",\"50(?:[0367]|88)|8|90\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"24|[346]|7[2-57-9]|9[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:10|74)|[589]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"1|2[028]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,5})\",\"$1 $2 $3\",[\"2(?:[169]|7[0-35-9])|7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"00\"],\"OM\":[\"968\",\"00\",\"(?:1505|[279]\\\\d{3}|500)\\\\d{4}|800\\\\d{5,6}\",[7,8,9],[[\"(\\\\d{3})(\\\\d{4,6})\",\"$1 $2\",[\"[58]\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[179]\"]]]],\"PA\":[\"507\",\"00\",\"(?:00800|8\\\\d{3})\\\\d{6}|[68]\\\\d{7}|[1-57-9]\\\\d{6}\",[7,8,10,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[1-57-9]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1-$2\",[\"[68]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]]],\"PE\":[\"51\",\"00|19(?:1[124]|77|90)00\",\"(?:[14-8]|9\\\\d)\\\\d{7}\",[8,9],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"1\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[4-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"]]],\"0\",0,0,0,0,0,0,\"00\",\" Anexo \"],\"PF\":[\"689\",\"00\",\"4\\\\d{5}(?:\\\\d{2})?|8\\\\d{7,8}\",[6,8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"44\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"4|8[7-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"PG\":[\"675\",\"00|140[1-3]\",\"(?:180|[78]\\\\d{3})\\\\d{4}|(?:[2-589]\\\\d|64)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"18|[2-69]|85\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[78]\"]]],0,0,0,0,0,0,0,\"00\"],\"PH\":[\"63\",\"00\",\"(?:[2-7]|9\\\\d)\\\\d{8}|2\\\\d{5}|(?:1800|8)\\\\d{7,9}\",[6,8,9,10,11,12,13],[[\"(\\\\d)(\\\\d{5})\",\"$1 $2\",[\"2\"],\"(0$1)\"],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|544|88[245]|(?:52|64|86)2\",\"3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"346|4(?:27|9[35])|883\",\"3469|4(?:279|9(?:30|56))|8834\"],\"(0$1)\"],[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|8[2-8]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]],[\"(\\\\d{4})(\\\\d{1,2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3 $4\",[\"1\"]]],\"0\"],\"PK\":[\"92\",\"00\",\"122\\\\d{6}|[24-8]\\\\d{10,11}|9(?:[013-9]\\\\d{8,10}|2(?:[01]\\\\d\\\\d|2(?:[06-8]\\\\d|1[01]))\\\\d{7})|(?:[2-8]\\\\d{3}|92(?:[0-7]\\\\d|8[1-9]))\\\\d{6}|[24-9]\\\\d{8}|[89]\\\\d{7}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,7})\",\"$1 $2 $3\",[\"[89]0\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"1\"]],[\"(\\\\d{3})(\\\\d{6,7})\",\"$1 $2\",[\"2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8])\",\"9(?:2[3-8]|98)|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:22|3[27-9]|4[2-6]|6[3569]|9[25-7]))[2-9]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{7,8})\",\"$1 $2\",[\"(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\"],\"(0$1)\"],[\"(\\\\d{5})(\\\\d{5})\",\"$1 $2\",[\"58\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{7})\",\"$1 $2\",[\"3\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[24-9]\"],\"(0$1)\"]],\"0\"],\"PL\":[\"48\",\"00\",\"(?:6|8\\\\d\\\\d)\\\\d{7}|[1-9]\\\\d{6}(?:\\\\d{2})?|[26]\\\\d{5}\",[6,7,8,9,10],[[\"(\\\\d{5})\",\"$1\",[\"19\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"11|20|64\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"30|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])1\",\"30|(?:1[2-8]|2[2-69]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])19\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"64\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"21|39|45|5[0137]|6[0469]|7[02389]|8(?:0[14]|8)\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[2-8]|[2-7]|8[1-79]|9[145]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"8\"]]]],\"PM\":[\"508\",\"00\",\"[78]\\\\d{8}|[2-9]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[2-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"],\"0$1\"]],\"0\"],\"PR\":[\"1\",\"011\",\"(?:[589]\\\\d\\\\d|787)\\\\d{7}\",[10],0,\"1\",0,0,0,0,\"787|939\"],\"PS\":[\"970\",\"00\",\"[2489]2\\\\d{6}|(?:1\\\\d|5)\\\\d{8}\",[8,9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[2489]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"PT\":[\"351\",\"00\",\"1693\\\\d{5}|(?:[26-9]\\\\d|30)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2[12]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"16|[236-9]\"]]]],\"PW\":[\"680\",\"01[12]\",\"(?:[24-8]\\\\d\\\\d|345|900)\\\\d{4}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-9]\"]]]],\"PY\":[\"595\",\"00\",\"[36-8]\\\\d{5,8}|4\\\\d{6,8}|59\\\\d{6}|9\\\\d{5,10}|(?:2\\\\d|5[0-8])\\\\d{6,7}\",[6,7,8,9,10,11],[[\"(\\\\d{3})(\\\\d{3,6})\",\"$1 $2\",[\"[2-9]0\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"3[289]|4[246-8]|61|7[1-3]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{3})(\\\\d{4,5})\",\"$1 $2\",[\"2[279]|3[13-5]|4[359]|5|6(?:[34]|7[1-46-8])|7[46-8]|85\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2[14-68]|3[26-9]|4[1246-8]|6(?:1|75)|7[1-35]|8[1-36]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"87\"]],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"9(?:[5-79]|8[1-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-8]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"9\"]]],\"0\"],\"QA\":[\"974\",\"00\",\"800\\\\d{4}|(?:2|800)\\\\d{6}|(?:0080|[3-7])\\\\d{7}\",[7,8,9,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"2[136]|8\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[3-7]\"]]]],\"RE\":[\"262\",\"00\",\"709\\\\d{6}|(?:26|[689]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[26-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,[[\"2631[0-6]\\\\d{4}|26(?:2\\\\d|30|88)\\\\d{5}\"],[\"(?:69(?:2\\\\d\\\\d|3(?:[06][0-6]|1[0-3]|2[0-2]|3[0-39]|4\\\\d|5[0-5]|7[0-37]|8[0-8]|9[0-479]))|7092[0-3])\\\\d{4}\"],[\"80\\\\d{7}\"],[\"89[1-37-9]\\\\d{6}\"],0,0,0,0,[\"9(?:399[0-3]|479[0-6]|76(?:2[278]|3[0-37]))\\\\d{4}\"],[\"8(?:1[019]|2[0156]|84|90)\\\\d{6}\"]]],\"RO\":[\"40\",\"00\",\"(?:[236-8]\\\\d|90)\\\\d{7}|[23]\\\\d{5}\",[6,9],[[\"(\\\\d{3})(\\\\d{3})\",\"$1 $2\",[\"2[3-6]\",\"2[3-6]\\\\d9\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"219|31\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[23]1\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[236-9]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\" int \"],\"RS\":[\"381\",\"00\",\"38[02-9]\\\\d{6,9}|6\\\\d{7,9}|90\\\\d{4,8}|38\\\\d{5,6}|(?:7\\\\d\\\\d|800)\\\\d{3,9}|(?:[12]\\\\d|3[0-79])\\\\d{5,10}\",[6,7,8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3,9})\",\"$1 $2\",[\"(?:2[389]|39)0|[7-9]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{5,10})\",\"$1 $2\",[\"[1-36]\"],\"0$1\"]],\"0\"],\"RU\":[\"7\",\"810\",\"8\\\\d{13}|[347-9]\\\\d{9}\",[10,14],[[\"(\\\\d{4})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-8]|2[1-9])\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:1[23]|[2-9]2))\",\"7(?:1(?:[0-356]2|4[29]|7|8[27])|2(?:13[03-69]|62[013-9]))|72[1-57-9]2\"],\"8 ($1)\",1],[\"(\\\\d{5})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"7(?:1[0-68]|2[1-9])\",\"7(?:1(?:[06][3-6]|[18]|2[35]|[3-5][3-5])|2(?:[13][3-5]|[24-689]|7[457]))\",\"7(?:1(?:0(?:[356]|4[023])|[18]|2(?:3[013-9]|5)|3[45]|43[013-79]|5(?:3[1-8]|4[1-7]|5)|6(?:3[0-35-9]|[4-6]))|2(?:1(?:3[178]|[45])|[24-689]|3[35]|7[457]))|7(?:14|23)4[0-8]|71(?:33|45)[1-79]\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"8 ($1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[349]|8(?:[02-7]|1[1-8])\"],\"8 ($1)\",1],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"8\"],\"8 ($1)\"]],\"8\",0,0,0,0,\"[3489]\",0,\"8~10\"],\"RW\":[\"250\",\"00\",\"(?:06|[27]\\\\d\\\\d|[89]00)\\\\d{6}\",[8,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[7-9]\"],\"0$1\"]],\"0\"],\"SA\":[\"966\",\"00\",\"(?:[15]\\\\d|800|92)\\\\d{7}\",[9,10],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"9\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"5\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]]],\"0\"],\"SB\":[\"677\",\"0[01]\",\"[6-9]\\\\d{6}|[1-6]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"6[89]|7|8[4-9]|9(?:[1-8]|9[0-8])\"]]]],\"SC\":[\"248\",\"010|0[0-2]\",\"(?:[2489]\\\\d|64)\\\\d{5}\",[7],[[\"(\\\\d)(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[246]|9[57]\"]]],0,0,0,0,0,0,0,\"00\"],\"SD\":[\"249\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"SE\":[\"46\",\"00\",\"(?:[26]\\\\d\\\\d|9)\\\\d{9}|[1-9]\\\\d{8}|[1-689]\\\\d{7}|[1-4689]\\\\d{6}|2\\\\d{5}\",[6,7,8,9,10,12],[[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"20\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"9(?:00|39|44|9)\"],\"0$1\",0,\"$1 $2\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3\",[\"[12][136]|3[356]|4[0246]|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d)(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{2})\",\"$1-$2 $3\",[\"1[2457]|2(?:[247-9]|5[0138])|3[0247-9]|4[1357-9]|5[0-35-9]|6(?:[125689]|4[02-57]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{3})(\\\\d{2,3})(\\\\d{3})\",\"$1-$2 $3\",[\"9(?:00|39|44)\"],\"0$1\",0,\"$1 $2 $3\"],[\"(\\\\d{2})(\\\\d{2,3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"1[13689]|2[0136]|3[1356]|4[0246]|54|6[03]|90[1-9]\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"10|7\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"8\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4\",[\"[13-5]|2(?:[247-9]|5[0138])|6(?:[124-689]|7[0-2])|9(?:[125-8]|3[02-5]|4[0-3])\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{3})\",\"$1-$2 $3 $4\",[\"9\"],\"0$1\",0,\"$1 $2 $3 $4\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1-$2 $3 $4 $5\",[\"[26]\"],\"0$1\",0,\"$1 $2 $3 $4 $5\"]],\"0\"],\"SG\":[\"65\",\"0[0-3]\\\\d\",\"(?:(?:1\\\\d|8)\\\\d\\\\d|7000)\\\\d{7}|[3689]\\\\d{7}\",[8,10,11],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[369]|8(?:0[1-9]|[1-9])\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"]],[\"(\\\\d{4})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"1\"]]]],\"SH\":[\"290\",\"00\",\"(?:[256]\\\\d|8)\\\\d{3}\",[4,5],0,0,0,0,0,0,\"[256]\"],\"SI\":[\"386\",\"00|10(?:22|66|88|99)\",\"[1-7]\\\\d{7}|8\\\\d{4,7}|90\\\\d{4,6}\",[5,6,7,8],[[\"(\\\\d{2})(\\\\d{3,6})\",\"$1 $2\",[\"8[09]|9\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"59|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[37][01]|4[0139]|51|6\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[1-57]\"],\"(0$1)\"]],\"0\",0,0,0,0,0,0,\"00\"],\"SJ\":[\"47\",\"00\",\"0\\\\d{4}|(?:[489]\\\\d|79)\\\\d{6}\",[5,8],0,0,0,0,0,0,\"79\"],\"SK\":[\"421\",\"00\",\"[2-689]\\\\d{8}|[2-59]\\\\d{6}|[2-5]\\\\d{5}\",[6,7,9],[[\"(\\\\d)(\\\\d{2})(\\\\d{3,4})\",\"$1 $2 $3\",[\"21\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{2,3})\",\"$1 $2 $3\",[\"[3-5][1-8]1\",\"[3-5][1-8]1[67]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{3})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"2\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[689]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[3-5]\"],\"0$1\"]],\"0\"],\"SL\":[\"232\",\"00\",\"(?:[237-9]\\\\d|66)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[236-9]\"],\"(0$1)\"]],\"0\"],\"SM\":[\"378\",\"00\",\"(?:0549|[5-7]\\\\d)\\\\d{6}\",[8,10],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[5-7]\"]],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"0\"]]],0,0,\"([89]\\\\d{5})$\",\"0549$1\"],\"SN\":[\"221\",\"00\",\"(?:[378]\\\\d|93)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[379]\"]]]],\"SO\":[\"252\",\"00\",\"[346-9]\\\\d{8}|[12679]\\\\d{7}|[1-5]\\\\d{6}|[1348]\\\\d{5}\",[6,7,8,9],[[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"8[125]\"]],[\"(\\\\d{6})\",\"$1\",[\"[134]\"]],[\"(\\\\d)(\\\\d{6})\",\"$1 $2\",[\"[15]|2[0-79]|3[0-46-8]|4[0-7]\"]],[\"(\\\\d)(\\\\d{7})\",\"$1 $2\",[\"(?:2|90)4|[67]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[348]|64|79|90\"]],[\"(\\\\d{2})(\\\\d{5,7})\",\"$1 $2\",[\"1|28|6[0-35-9]|7[67]|9[2-9]\"]]],\"0\"],\"SR\":[\"597\",\"00\",\"(?:[2-5]|[6-9]\\\\d)\\\\d{5}\",[6,7],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1-$2-$3\",[\"56\"]],[\"(\\\\d{3})(\\\\d{3})\",\"$1-$2\",[\"[2-5]\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"[6-9]\"]]]],\"SS\":[\"211\",\"00\",\"[19]\\\\d{8}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[19]\"],\"0$1\"]],\"0\"],\"ST\":[\"239\",\"00\",\"(?:22|9\\\\d)\\\\d{5}\",[7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[29]\"]]]],\"SV\":[\"503\",\"00\",\"[25-7]\\\\d{7}|(?:80\\\\d|900)\\\\d{4}(?:\\\\d{4})?\",[7,8,11],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[89]\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[25-7]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"]]]],\"SX\":[\"1\",\"011\",\"7215\\\\d{6}|(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"(5\\\\d{6})$|1\",\"721$1\",0,\"721\"],\"SY\":[\"963\",\"00\",\"[1-359]\\\\d{8}|[1-5]\\\\d{7}\",[8,9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-4]|5[1-3]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[59]\"],\"0$1\",1]],\"0\"],\"SZ\":[\"268\",\"00\",\"0800\\\\d{4}|(?:[237]\\\\d|900)\\\\d{6}\",[8,9],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[0237]\"]],[\"(\\\\d{5})(\\\\d{4})\",\"$1 $2\",[\"9\"]]]],\"TA\":[\"290\",\"00\",\"8\\\\d{3}\",[4],0,0,0,0,0,0,\"8\"],\"TC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|649|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-479]\\\\d{6})$|1\",\"649$1\",0,\"649\"],\"TD\":[\"235\",\"00|16\",\"(?:22|[3689]\\\\d|77)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[236-9]\"]]],0,0,0,0,0,0,0,\"00\"],\"TG\":[\"228\",\"00\",\"[279]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[279]\"]]]],\"TH\":[\"66\",\"00[1-9]\",\"(?:001800|[2-57]|[689]\\\\d)\\\\d{7}|1\\\\d{7,9}\",[8,9,10,13],[[\"(\\\\d)(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"2\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[13-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"1\"]]],\"0\"],\"TJ\":[\"992\",\"810\",\"(?:[0-57-9]\\\\d|66)\\\\d{7}\",[9],[[\"(\\\\d{6})(\\\\d)(\\\\d{2})\",\"$1 $2 $3\",[\"331\",\"3317\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"44[02-479]|[34]7\"]],[\"(\\\\d{4})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"3(?:[1245]|3[12])\"]],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"\\\\d\"]]],0,0,0,0,0,0,0,\"8~10\"],\"TK\":[\"690\",\"00\",\"[2-47]\\\\d{3,6}\",[4,5,6,7]],\"TL\":[\"670\",\"00\",\"7\\\\d{7}|(?:[2-47]\\\\d|[89]0)\\\\d{5}\",[7,8],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[2-489]|70\"]],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"7\"]]]],\"TM\":[\"993\",\"810\",\"(?:[1-6]\\\\d|71)\\\\d{6}\",[8],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"12\"],\"(8 $1)\"],[\"(\\\\d{3})(\\\\d)(\\\\d{2})(\\\\d{2})\",\"$1 $2-$3-$4\",[\"[1-5]\"],\"(8 $1)\"],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"[67]\"],\"8 $1\"]],\"8\",0,0,0,0,0,0,\"8~10\"],\"TN\":[\"216\",\"00\",\"[2-57-9]\\\\d{7}\",[8],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-57-9]\"]]]],\"TO\":[\"676\",\"00\",\"(?:0800|(?:[5-8]\\\\d\\\\d|999)\\\\d)\\\\d{3}|[2-8]\\\\d{4}\",[5,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1-$2\",[\"[2-4]|50|6[09]|7[0-24-69]|8[05]\"]],[\"(\\\\d{4})(\\\\d{3})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[5-9]\"]]]],\"TR\":[\"90\",\"00\",\"4\\\\d{6}|8\\\\d{11,12}|(?:[2-58]\\\\d\\\\d|900)\\\\d{7}\",[7,10,12,13],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"512|8[01589]|90\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"5[0-79]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[24][1-8]|3[1-9]\"],\"(0$1)\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{6,7})\",\"$1 $2 $3\",[\"80\"],\"0$1\",1]],\"0\"],\"TT\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-46-8]\\\\d{6})$|1\",\"868$1\",0,\"868\"],\"TV\":[\"688\",\"00\",\"(?:2|7\\\\d\\\\d|90)\\\\d{4}\",[5,6,7],[[\"(\\\\d{2})(\\\\d{3})\",\"$1 $2\",[\"2\"]],[\"(\\\\d{2})(\\\\d{4})\",\"$1 $2\",[\"90\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"TW\":[\"886\",\"0(?:0[25-79]|19)\",\"[2-689]\\\\d{8}|7\\\\d{9,10}|[2-8]\\\\d{7}|2\\\\d{6}\",[7,8,9,10,11],[[\"(\\\\d{2})(\\\\d)(\\\\d{4})\",\"$1 $2 $3\",[\"202\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"826\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{2})(\\\\d{3})\",\"$1 $2 $3\",[\"83\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"82\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[25]0|37|49|8[09]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"[23568]|4(?:0[02-48]|[1-478])|7[1-9]\",\"[23568]|4(?:0[2-48]|[1-478])|(?:400|7)[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4,5})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\",0,0,0,0,0,0,0,\"#\"],\"TZ\":[\"255\",\"00[056]\",\"(?:[25-8]\\\\d|41|90)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[24]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"5\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[67]\"],\"0$1\"]],\"0\"],\"UA\":[\"380\",\"00\",\"[89]\\\\d{9}|[3-9]\\\\d{8}\",[9,10],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"6[12][29]|(?:3[1-8]|4[136-8]|5[12457]|6[49])2|(?:56|65)[24]\",\"6[12][29]|(?:35|4[1378]|5[12457]|6[49])2|(?:56|65)[24]|(?:3[1-46-8]|46)2[013-9]\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6[0135689]|7[4-6])|6(?:[12][3-7]|[459])\",\"3[1-8]|4(?:[1367]|[45][6-9]|8[4-6])|5(?:[1-5]|6(?:[015689]|3[02389])|7[4-6])|6(?:[12][3-7]|[459])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[3-7]|89|9[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[89]\"],\"0$1\"]],\"0\",0,0,0,0,0,0,\"0~0\"],\"UG\":[\"256\",\"00[057]\",\"800\\\\d{6}|(?:[29]0|[347]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{4})(\\\\d{5})\",\"$1 $2\",[\"202\",\"2024\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{6})\",\"$1 $2\",[\"[27-9]|4(?:6[45]|[7-9])\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[34]\"],\"0$1\"]],\"0\"],\"US\":[\"1\",\"011\",\"[2-9]\\\\d{9}|3\\\\d{6}\",[10],[[\"(\\\\d{3})(\\\\d{4})\",\"$1-$2\",[\"310\"],0,1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"($1) $2-$3\",[\"[2-9]\"],0,1,\"$1-$2-$3\"]],\"1\",0,0,0,0,0,[[\"(?:274[27]|(?:472|983)[2-47-9])\\\\d{6}|(?:2(?:0[1-35-9]|1[02-9]|2[03-57-9]|3[1459]|4[08]|5[1-46]|6[0279]|7[0269]|8[13])|3(?:0[1-57-9]|1[02-9]|2[013-79]|3[0-24679]|4[167]|5[0-3]|6[01349]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[023578]|58|6[349]|7[0589]|8[04])|5(?:0[1-57-9]|1[0235-8]|20|3[0149]|4[01]|5[179]|6[1-47]|7[0-5]|8[0256])|6(?:0[1-35-9]|1[024-9]|2[03689]|3[016]|4[0156]|5[01679]|6[0-279]|78|8[0-269])|7(?:0[1-46-8]|1[2-9]|2[04-8]|3[0-2478]|4[0378]|5[47]|6[02359]|7[0-59]|8[156])|8(?:0[1-68]|1[02-8]|2[0168]|3[0-2589]|4[03578]|5[046-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[0589]|3[0146-8]|4[01357-9]|5[12469]|7[0-3589]|8[04-69]))[2-9]\\\\d{6}\"],[\"\"],[\"8(?:00|33|44|55|66|77|88)[2-9]\\\\d{6}\"],[\"900[2-9]\\\\d{6}\"],[\"52(?:3(?:[2-46-9][02-9]\\\\d|5(?:[02-46-9]\\\\d|5[0-46-9]))|4(?:[2-478][02-9]\\\\d|5(?:[034]\\\\d|2[024-9]|5[0-46-9])|6(?:0[1-9]|[2-9]\\\\d)|9(?:[05-9]\\\\d|2[0-5]|49)))\\\\d{4}|52[34][2-9]1[02-9]\\\\d{4}|5(?:00|2[125-9]|3[23]|44|66|77|88)[2-9]\\\\d{6}\"]]],\"UY\":[\"598\",\"0(?:0|1[3-9]\\\\d)\",\"0004\\\\d{2,9}|[1249]\\\\d{7}|2\\\\d{3,4}|(?:[49]\\\\d|80)\\\\d{5}\",[4,5,6,7,8,9,10,11,12,13],[[\"(\\\\d{4,5})\",\"$1\",[\"21\"]],[\"(\\\\d{3})(\\\\d{3,4})\",\"$1 $2\",[\"0\"]],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[49]0|8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"9\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[124]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"0\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3 $4\",[\"0\"]]],\"0\",0,0,0,0,0,0,\"00\",\" int. \"],\"UZ\":[\"998\",\"00\",\"(?:20|33|[5-9]\\\\d)\\\\d{7}\",[9],[[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"[235-9]\"]]]],\"VA\":[\"39\",\"00\",\"0\\\\d{5,10}|3[0-8]\\\\d{7,10}|55\\\\d{8}|8\\\\d{5}(?:\\\\d{2,4})?|(?:1\\\\d|39)\\\\d{7,8}\",[6,7,8,9,10,11,12],0,0,0,0,0,0,\"06698\"],\"VC\":[\"1\",\"011\",\"(?:[58]\\\\d\\\\d|784|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-7]\\\\d{6})$|1\",\"784$1\",0,\"784\"],\"VE\":[\"58\",\"00\",\"[68]00\\\\d{7}|(?:[24]\\\\d|[59]0)\\\\d{8}\",[10],[[\"(\\\\d{3})(\\\\d{7})\",\"$1-$2\",[\"[24-689]\"],\"0$1\"]],\"0\"],\"VG\":[\"1\",\"011\",\"(?:284|[58]\\\\d\\\\d|900)\\\\d{7}\",[10],0,\"1\",0,\"([2-578]\\\\d{6})$|1\",\"284$1\",0,\"284\"],\"VI\":[\"1\",\"011\",\"[58]\\\\d{9}|(?:34|90)0\\\\d{7}\",[10],0,\"1\",0,\"([2-9]\\\\d{6})$|1\",\"340$1\",0,\"340\"],\"VN\":[\"84\",\"00\",\"[12]\\\\d{9}|[135-9]\\\\d{8}|[16]\\\\d{7}|[16-8]\\\\d{6}\",[7,8,9,10],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"80\"],\"0$1\",1],[\"(\\\\d{4})(\\\\d{4,6})\",\"$1 $2\",[\"1(?:2[02]|[89])\"],0,1],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"1[26]|6\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[357-9]\"],\"0$1\",1],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"2[48]\"],\"0$1\",1],[\"(\\\\d{3})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"2\"],\"0$1\",1]],\"0\"],\"VU\":[\"678\",\"00\",\"[57-9]\\\\d{6}|(?:[238]\\\\d|48)\\\\d{3}\",[5,7],[[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"[57-9]\"]]]],\"WF\":[\"681\",\"00\",\"(?:40|72|8\\\\d{4})\\\\d{4}|[89]\\\\d{5}\",[6,9],[[\"(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3\",[\"[47-9]\"]],[\"(\\\\d{3})(\\\\d{2})(\\\\d{2})(\\\\d{2})\",\"$1 $2 $3 $4\",[\"8\"]]]],\"WS\":[\"685\",\"0\",\"(?:[2-6]|8\\\\d{5})\\\\d{4}|[78]\\\\d{6}|[68]\\\\d{5}\",[5,6,7,10],[[\"(\\\\d{5})\",\"$1\",[\"[2-5]|6[1-9]\"]],[\"(\\\\d{3})(\\\\d{3,7})\",\"$1 $2\",[\"[68]\"]],[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"7\"]]]],\"XK\":[\"383\",\"00\",\"2\\\\d{7,8}|3\\\\d{7,11}|(?:4\\\\d\\\\d|[89]00)\\\\d{5}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{5})\",\"$1 $2\",[\"[89]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[2-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"2|39\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7,10})\",\"$1 $2\",[\"3\"],\"0$1\"]],\"0\"],\"YE\":[\"967\",\"00\",\"(?:1|7\\\\d)\\\\d{7}|[1-7]\\\\d{6}\",[7,8,9],[[\"(\\\\d)(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"[1-6]|7(?:[24-6]|8[0-7])\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"7\"],\"0$1\"]],\"0\"],\"YT\":[\"262\",\"00\",\"(?:639\\\\d|7093)\\\\d{5}|(?:26|80|9\\\\d)\\\\d{7}\",[9],0,\"0\",0,0,0,0,0,[[\"26(?:89\\\\d|9(?:0[0-467]|15|5[0-4]|6\\\\d|[78]0))\\\\d{4}\"],[\"(?:639(?:0[0-79]|1[019]|[267]\\\\d|3[09]|40|5[05-9]|9[04-79])|7093[5-7])\\\\d{4}\"],[\"80\\\\d{7}\"],0,0,0,0,0,[\"9(?:(?:39|47)8[01]|769\\\\d)\\\\d{4}\"]]],\"ZA\":[\"27\",\"00\",\"[1-79]\\\\d{8}|8\\\\d{4,9}\",[5,6,7,8,9,10],[[\"(\\\\d{2})(\\\\d{3,4})\",\"$1 $2\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{2,3})\",\"$1 $2 $3\",[\"8[1-4]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"860\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"[1-9]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"8\"],\"0$1\"]],\"0\"],\"ZM\":[\"260\",\"00\",\"800\\\\d{6}|(?:21|[579]\\\\d|63)\\\\d{7}\",[9],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[28]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"[579]\"],\"0$1\"]],\"0\"],\"ZW\":[\"263\",\"00\",\"2(?:[0-57-9]\\\\d{6,8}|6[0-24-9]\\\\d{6,7})|[38]\\\\d{9}|[35-8]\\\\d{8}|[3-6]\\\\d{7}|[1-689]\\\\d{6}|[1-3569]\\\\d{5}|[1356]\\\\d{4}\",[5,6,7,8,9,10],[[\"(\\\\d{3})(\\\\d{3,5})\",\"$1 $2\",[\"2(?:0[45]|2[278]|[49]8)|3(?:[09]8|17)|6(?:[29]8|37|75)|[23][78]|(?:33|5[15]|6[68])[78]\"],\"0$1\"],[\"(\\\\d)(\\\\d{3})(\\\\d{2,4})\",\"$1 $2 $3\",[\"[49]\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{4})\",\"$1 $2\",[\"80\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{7})\",\"$1 $2\",[\"24|8[13-59]|(?:2[05-79]|39|5[45]|6[15-8])2\",\"2(?:02[014]|4|[56]20|[79]2)|392|5(?:42|525)|6(?:[16-8]21|52[013])|8[13-59]\"],\"(0$1)\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"7\"],\"0$1\"],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:12|29)\",\"2(?:1[39]|2[0157]|[378]|[56][14])|3(?:123|29)\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{6})\",\"$1 $2\",[\"8\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3,5})\",\"$1 $2\",[\"1|2(?:0[0-36-9]|12|29|[56])|3(?:1[0-689]|[24-6])|5(?:[0236-9]|1[2-4])|6(?:[013-59]|7[0-46-9])|(?:33|55|6[68])[0-69]|(?:29|3[09]|62)[0-79]\"],\"0$1\"],[\"(\\\\d{2})(\\\\d{3})(\\\\d{3,4})\",\"$1 $2 $3\",[\"29[013-9]|39|54\"],\"0$1\"],[\"(\\\\d{4})(\\\\d{3,5})\",\"$1 $2\",[\"(?:25|54)8\",\"258|5483\"],\"0$1\"]],\"0\"]},\"nonGeographic\":{\"800\":[\"800\",0,\"(?:00|[1-9]\\\\d)\\\\d{6}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"\\\\d\"]]],0,0,0,0,0,0,[0,0,[\"(?:00|[1-9]\\\\d)\\\\d{6}\"]]],\"808\":[\"808\",0,\"[1-9]\\\\d{7}\",[8],[[\"(\\\\d{4})(\\\\d{4})\",\"$1 $2\",[\"[1-9]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,0,[\"[1-9]\\\\d{7}\"]]],\"870\":[\"870\",0,\"7\\\\d{11}|[235-7]\\\\d{8}\",[9,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"[235-7]\"]]],0,0,0,0,0,0,[0,[\"(?:[356]|774[45])\\\\d{8}|7[6-8]\\\\d{7}\"],0,0,0,0,0,0,[\"2\\\\d{8}\",[9]]]],\"878\":[\"878\",0,\"10\\\\d{10}\",[12],[[\"(\\\\d{2})(\\\\d{5})(\\\\d{5})\",\"$1 $2 $3\",[\"1\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"10\\\\d{10}\"]]],\"881\":[\"881\",0,\"6\\\\d{9}|[0-36-9]\\\\d{8}\",[9,10],[[\"(\\\\d)(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\",[\"[0-37-9]\"]],[\"(\\\\d)(\\\\d{3})(\\\\d{5,6})\",\"$1 $2 $3\",[\"6\"]]],0,0,0,0,0,0,[0,[\"6\\\\d{9}|[0-36-9]\\\\d{8}\"]]],\"882\":[\"882\",0,\"[13]\\\\d{6}(?:\\\\d{2,5})?|[19]\\\\d{7}|(?:[25]\\\\d\\\\d|4)\\\\d{7}(?:\\\\d{2})?\",[7,8,9,10,11,12],[[\"(\\\\d{2})(\\\\d{5})\",\"$1 $2\",[\"16|342\"]],[\"(\\\\d{2})(\\\\d{6})\",\"$1 $2\",[\"49\"]],[\"(\\\\d{2})(\\\\d{2})(\\\\d{4})\",\"$1 $2 $3\",[\"1[36]|9\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{3})\",\"$1 $2 $3\",[\"3[23]\"]],[\"(\\\\d{2})(\\\\d{3,4})(\\\\d{4})\",\"$1 $2 $3\",[\"16\"]],[\"(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"10|23|3(?:[15]|4[57])|4|5[12]\"]],[\"(\\\\d{3})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"34\"]],[\"(\\\\d{2})(\\\\d{4,5})(\\\\d{5})\",\"$1 $2 $3\",[\"[1-35]\"]]],0,0,0,0,0,0,[0,[\"342\\\\d{4}|(?:337|49)\\\\d{6}|(?:3(?:2|47|7\\\\d{3})|5(?:0\\\\d{3}|2[0-2]))\\\\d{7}\",[7,8,9,10,12]],0,0,0,[\"348[57]\\\\d{7}\",[11]],0,0,[\"1(?:3(?:0[0347]|[13][0139]|2[035]|4[013568]|6[0459]|7[06]|8[15-8]|9[0689])\\\\d{4}|6\\\\d{5,10})|(?:345\\\\d|9[89])\\\\d{6}|(?:10|2(?:3|85\\\\d)|3(?:[15]|[69]\\\\d\\\\d)|4[15-8]|51)\\\\d{8}\"]]],\"883\":[\"883\",0,\"(?:[1-4]\\\\d|51)\\\\d{6,10}\",[8,9,10,11,12],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{2,8})\",\"$1 $2 $3\",[\"[14]|2[24-689]|3[02-689]|51[24-9]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3\",[\"510\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{4})\",\"$1 $2 $3\",[\"21\"]],[\"(\\\\d{4})(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"51[13]\"]],[\"(\\\\d{3})(\\\\d{3})(\\\\d{3})(\\\\d{3})\",\"$1 $2 $3 $4\",[\"[235]\"]]],0,0,0,0,0,0,[0,0,0,0,0,0,0,0,[\"(?:2(?:00\\\\d\\\\d|10)|(?:370[1-9]|51\\\\d0)\\\\d)\\\\d{7}|51(?:00\\\\d{5}|[24-9]0\\\\d{4,7})|(?:1[0-79]|2[24-689]|3[02-689]|4[0-4])0\\\\d{5,9}\"]]],\"888\":[\"888\",0,\"\\\\d{11}\",[11],[[\"(\\\\d{3})(\\\\d{3})(\\\\d{5})\",\"$1 $2 $3\"]],0,0,0,0,0,0,[0,0,0,0,0,0,[\"\\\\d{11}\"]]],\"979\":[\"979\",0,\"[1359]\\\\d{8}\",[9],[[\"(\\\\d)(\\\\d{4})(\\\\d{4})\",\"$1 $2 $3\",[\"[1359]\"]]],0,0,0,0,0,0,[0,0,0,[\"[1359]\\\\d{8}\"]]]}}","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.min.json.js'\r\n\r\nexport default function withMetadataArgument(func, _arguments) {\r\n\tvar args = Array.prototype.slice.call(_arguments)\r\n\targs.push(metadata)\r\n\treturn func.apply(this, args)\r\n}","// Copy-pasted from:\r\n// https://github.com/substack/semver-compare/blob/master/index.js\r\n//\r\n// Inlining this function because some users reported issues with\r\n// importing from `semver-compare` in a browser with ES6 \"native\" modules.\r\n//\r\n// Fixes `semver-compare` not being able to compare versions with alpha/beta/etc \"tags\".\r\n// https://github.com/catamphetamine/libphonenumber-js/issues/381\r\nexport default function(a, b) {\r\n a = a.split('-')\r\n b = b.split('-')\r\n var pa = a[0].split('.')\r\n var pb = b[0].split('.')\r\n for (var i = 0; i < 3; i++) {\r\n var na = Number(pa[i])\r\n var nb = Number(pb[i])\r\n if (na > nb) return 1\r\n if (nb > na) return -1\r\n if (!isNaN(na) && isNaN(nb)) return 1\r\n if (isNaN(na) && !isNaN(nb)) return -1\r\n }\r\n if (a[1] && b[1]) {\r\n return a[1] > b[1] ? 1 : (a[1] < b[1] ? -1 : 0)\r\n }\r\n return !a[1] && b[1] ? 1 : (a[1] && !b[1] ? -1 : 0)\r\n}","const objectConstructor = {}.constructor;\r\n\r\nexport default function isObject(object) {\r\n return object !== undefined && object !== null && object.constructor === objectConstructor;\r\n}\r\n","const CALLING_CODE_REG_EXP = /^\\d+$/\r\n\r\nexport default function isCallingCode(string) {\r\n\treturn CALLING_CODE_REG_EXP.test(string)\r\n}\r\n","import compare from './tools/semver-compare.js'\r\nimport isObject from './helpers/isObject.js'\r\nimport isCallingCode from './helpers/isCallingCode.js'\r\n\r\n// Added \"possibleLengths\" and renamed\r\n// \"country_phone_code_to_countries\" to \"country_calling_codes\".\r\nconst V2 = '1.0.18'\r\n\r\n// Added \"idd_prefix\" and \"default_idd_prefix\".\r\nconst V3 = '1.2.0'\r\n\r\n// Moved `001` country code to \"nonGeographic\" section of metadata.\r\nconst V4 = '1.7.35'\r\n\r\nconst DEFAULT_EXT_PREFIX = ' ext. '\r\n\r\n/**\r\n * See: https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md\r\n */\r\nexport default class Metadata {\r\n\t/**\r\n\t * @param {object} metadata — Metadata JSON.\r\n\t */\r\n\tconstructor(metadata) {\r\n\t\tvalidateMetadata(metadata)\r\n\t\tthis.metadata = metadata\r\n\t\tsetVersion.call(this, metadata)\r\n\t}\r\n\r\n\tgetCountries() {\r\n\t\treturn Object.keys(this.metadata.countries).filter(_ => _ !== '001')\r\n\t}\r\n\r\n\tgetCountryMetadata(countryCode) {\r\n\t\treturn this.metadata.countries[countryCode]\r\n\t}\r\n\r\n\tnonGeographic() {\r\n\t\tif (this.v1 || this.v2 || this.v3) return\r\n\t\t// `nonGeographical` was a typo.\r\n\t\t// It's present in metadata generated from `1.7.35` to `1.7.37`.\r\n\t\t// The test case could be found by searching for \"nonGeographical\".\r\n\t\treturn this.metadata.nonGeographic || this.metadata.nonGeographical\r\n\t}\r\n\r\n\thasCountry(country) {\r\n\t\treturn this.getCountryMetadata(country) !== undefined\r\n\t}\r\n\r\n\thasCallingCode(callingCode) {\r\n\t\tif (this.getCountryCodesForCallingCode(callingCode)) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\tif (this.nonGeographic()[callingCode]) {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// A hacky workaround for old custom metadata (generated before V4).\r\n\t\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\t\tif (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisNonGeographicCallingCode(callingCode) {\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\treturn this.nonGeographic()[callingCode] ? true : false\r\n\t\t} else {\r\n\t\t\treturn this.getCountryCodesForCallingCode(callingCode) ? false : true\r\n\t\t}\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tcountry(countryCode) {\r\n\t\treturn this.selectNumberingPlan(countryCode)\r\n\t}\r\n\r\n\t/**\r\n\t * Selects a telephone numbering plan based on either a country code or a calling code.\r\n\t * @param {string} argument — Country code or calling code.\r\n\t * @param {string} legacyArgumentCallingCode — Legacy argument: calling code, if the first argument is not passed.\r\n\t */\r\n\tselectNumberingPlan(argument, legacyArgumentCallingCode) {\r\n\t\tlet countryCode\r\n\t\tlet callingCode\r\n\t\tif (argument) {\r\n\t\t\tif (isCallingCode(argument)) {\r\n\t\t\t\tcallingCode = argument\r\n\t\t\t} else {\r\n\t\t\t\tcountryCode = argument\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Previously, the signature of this method was: `.selectNumberingPlan(country, callingCode)`.\r\n\t\t// And if `country` argument wasn't passed, it looked into the second argument `callingCode`.\r\n\t\t// Now it's preferred to only pass either `country` or `callingCode` as the first argument.\r\n\t\tif (legacyArgumentCallingCode) {\r\n\t\t\tcallingCode = legacyArgumentCallingCode\r\n\t\t}\r\n\r\n\t\t// Select a telephone numbering plan.\r\n\t\tif (countryCode && countryCode !== '001') {\r\n\t\t\tconst countryMetadata = this.getCountryMetadata(countryCode)\r\n\t\t\tif (!countryMetadata) {\r\n\t\t\t\tthrow new Error(`Unknown country: ${countryCode}`)\r\n\t\t\t}\r\n\t\t\tthis.numberingPlan = new NumberingPlan(countryMetadata, this)\r\n\t\t} else if (callingCode) {\r\n\t\t\tif (!this.hasCallingCode(callingCode)) {\r\n\t\t\t\tthrow new Error(`Unknown calling code: ${callingCode}`)\r\n\t\t\t}\r\n\t\t\tthis.numberingPlan = new NumberingPlan(this.getNumberingPlanMetadata(callingCode), this)\r\n\t\t} else {\r\n\t\t\tthis.numberingPlan = undefined\r\n\t\t}\r\n\r\n\t\treturn this\r\n\t}\r\n\r\n\tgetCountryCodesForCallingCode(callingCode) {\r\n\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\tif (countryCodes) {\r\n\t\t\t// Metadata before V4 included \"non-geographic entity\" calling codes\r\n\t\t\t// inside `country_calling_codes` (for example, `\"881\":[\"001\"]`).\r\n\t\t\t// Now the semantics of `country_calling_codes` has changed:\r\n\t\t\t// it's specifically for \"countries\" now.\r\n\t\t\t// Older versions of custom metadata will simply skip parsing\r\n\t\t\t// \"non-geographic entity\" phone numbers with new versions\r\n\t\t\t// of this library: it's not considered a bug,\r\n\t\t\t// because such numbers are extremely rare,\r\n\t\t\t// and developers extremely rarely use custom metadata.\r\n\t\t\tif (countryCodes.length === 1 && countryCodes[0].length === 3) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\treturn countryCodes\r\n\t\t}\r\n\t}\r\n\r\n\tgetCountryCodeForCallingCode(callingCode) {\r\n\t\tconst countryCodes = this.getCountryCodesForCallingCode(callingCode)\r\n\t\tif (countryCodes) {\r\n\t\t\treturn countryCodes[0]\r\n\t\t}\r\n\t}\r\n\r\n\tgetNumberingPlanMetadata(callingCode) {\r\n\t\t// If a calling code is specified, choose the telephone numbering plan\r\n\t\t// of the \"default\" country for this calling code.\r\n\t\t// For example, if calling code `1` is passed,\r\n\t\t// the telephone numbering plan of `US` will be selected.\r\n\t\tconst countryCode = this.getCountryCodeForCallingCode(callingCode)\r\n\t\tif (countryCode) {\r\n\t\t\treturn this.getCountryMetadata(countryCode)\r\n\t\t}\r\n\t\tif (this.nonGeographic()) {\r\n\t\t\tconst metadata = this.nonGeographic()[callingCode]\r\n\t\t\tif (metadata) {\r\n\t\t\t\treturn metadata\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// A hacky workaround for old custom metadata (generated before V4).\r\n\t\t\t// In that metadata, there was no concept of \"non-geographic\" metadata\r\n\t\t\t// so metadata for `001` country code was stored along with other countries.\r\n\t\t\t// The test case can be found by searching for:\r\n\t\t\t// \"should work around `nonGeographic` metadata not existing\".\r\n\t\t\tconst countryCodes = this.countryCallingCodes()[callingCode]\r\n\t\t\tif (countryCodes && countryCodes.length === 1 && countryCodes[0] === '001') {\r\n\t\t\t\treturn this.metadata.countries['001']\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tcountryCallingCode() {\r\n\t\treturn this.numberingPlan.callingCode()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tIDDPrefix() {\r\n\t\treturn this.numberingPlan.IDDPrefix()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tdefaultIDDPrefix() {\r\n\t\treturn this.numberingPlan.defaultIDDPrefix()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalNumberPattern() {\r\n\t\treturn this.numberingPlan.nationalNumberPattern()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tpossibleLengths() {\r\n\t\treturn this.numberingPlan.possibleLengths()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tformats() {\r\n\t\treturn this.numberingPlan.formats()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalPrefixForParsing() {\r\n\t\treturn this.numberingPlan.nationalPrefixForParsing()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tnationalPrefixTransformRule() {\r\n\t\treturn this.numberingPlan.nationalPrefixTransformRule()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tleadingDigits() {\r\n\t\treturn this.numberingPlan.leadingDigits()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\thasTypes() {\r\n\t\treturn this.numberingPlan.hasTypes()\r\n\t}\r\n\r\n\t// Deprecated.\r\n\ttype(type) {\r\n\t\treturn this.numberingPlan.type(type)\r\n\t}\r\n\r\n\t// Deprecated.\r\n\text() {\r\n\t\treturn this.numberingPlan.ext()\r\n\t}\r\n\r\n\tcountryCallingCodes() {\r\n\t\tif (this.v1) return this.metadata.country_phone_code_to_countries\r\n\t\treturn this.metadata.country_calling_codes\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tchooseCountryByCountryCallingCode(callingCode) {\r\n\t\treturn this.selectNumberingPlan(callingCode)\r\n\t}\r\n\r\n\thasSelectedNumberingPlan() {\r\n\t\treturn this.numberingPlan !== undefined\r\n\t}\r\n}\r\n\r\nclass NumberingPlan {\r\n\tconstructor(metadata, globalMetadataObject) {\r\n\t\tthis.globalMetadataObject = globalMetadataObject\r\n\t\tthis.metadata = metadata\r\n\t\tsetVersion.call(this, globalMetadataObject.metadata)\r\n\t}\r\n\r\n\tcallingCode() {\r\n\t\treturn this.metadata[0]\r\n\t}\r\n\r\n\t// When multiple countries share the same calling code,\r\n\t// all phone number formatting rules are included in the metadata\r\n\t// of the \"default\" country for that calling code.\r\n\t// Any other countries' metdata doesn't include any formatting rules.\r\n\t// Google developers said that such storage architecture was chosen for performance reasons.\r\n\t//\r\n\t// For example, for NANPA region (\"North American Numbering Plan Administration\",\r\n\t// which includes USA, Canada, Cayman Islands, Bahamas, etc) all formatting rules\r\n\t// are contained in the metadata of `US` country.\r\n\t//\r\n\t// This is not public API.\r\n\t//\r\n\t_getDefaultCountryMetadataForThisCallingCode() {\r\n\t\treturn this.globalMetadataObject.getNumberingPlanMetadata(this.callingCode())\r\n\t}\r\n\r\n\t// Deprecated.\r\n\tgetDefaultCountryMetadataForRegion() {\r\n\t\treturn this._getDefaultCountryMetadataForThisCallingCode()\r\n\t}\r\n\r\n\t// Is always present.\r\n\tIDDPrefix() {\r\n\t\tif (this.v1 || this.v2) return\r\n\t\treturn this.metadata[1]\r\n\t}\r\n\r\n\t// Is only present when a country supports multiple IDD prefixes.\r\n\tdefaultIDDPrefix() {\r\n\t\tif (this.v1 || this.v2) return\r\n\t\treturn this.metadata[12]\r\n\t}\r\n\r\n\tnationalNumberPattern() {\r\n\t\tif (this.v1 || this.v2) return this.metadata[1]\r\n\t\treturn this.metadata[2]\r\n\t}\r\n\r\n\t// \"possible length\" data is always present in Google's metadata.\r\n\tpossibleLengths() {\r\n\t\tif (this.v1) return\r\n\t\treturn this.metadata[this.v2 ? 2 : 3]\r\n\t}\r\n\r\n\t_getFormats(metadata) {\r\n\t\treturn metadata[this.v1 ? 2 : this.v2 ? 3 : 4]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// formats are all stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tformats() {\r\n\t\tconst formats = this._getFormats(this.metadata) || this._getFormats(this._getDefaultCountryMetadataForThisCallingCode()) || []\r\n\t\treturn formats.map(_ => new Format(_, this))\r\n\t}\r\n\r\n\tnationalPrefix() {\r\n\t\treturn this.metadata[this.v1 ? 3 : this.v2 ? 4 : 5]\r\n\t}\r\n\r\n\t_getNationalPrefixFormattingRule(metadata) {\r\n\t\treturn metadata[this.v1 ? 4 : this.v2 ? 5 : 6]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// national prefix formatting rule is stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tnationalPrefixFormattingRule() {\r\n\t\treturn this._getNationalPrefixFormattingRule(this.metadata) || this._getNationalPrefixFormattingRule(this._getDefaultCountryMetadataForThisCallingCode())\r\n\t}\r\n\r\n\t_nationalPrefixForParsing() {\r\n\t\treturn this.metadata[this.v1 ? 5 : this.v2 ? 6 : 7]\r\n\t}\r\n\r\n\tnationalPrefixForParsing() {\r\n\t\t// If `national_prefix_for_parsing` is not set explicitly,\r\n\t\t// then infer it from `national_prefix` (if any)\r\n\t\treturn this._nationalPrefixForParsing() || this.nationalPrefix()\r\n\t}\r\n\r\n\tnationalPrefixTransformRule() {\r\n\t\treturn this.metadata[this.v1 ? 6 : this.v2 ? 7 : 8]\r\n\t}\r\n\r\n\t_getNationalPrefixIsOptionalWhenFormatting() {\r\n\t\treturn !!this.metadata[this.v1 ? 7 : this.v2 ? 8 : 9]\r\n\t}\r\n\r\n\t// For countries of the same region (e.g. NANPA)\r\n\t// \"national prefix is optional when formatting\" flag is\r\n\t// stored in the \"main\" country for that region.\r\n\t// E.g. \"RU\" and \"KZ\", \"US\" and \"CA\".\r\n\tnationalPrefixIsOptionalWhenFormattingInNationalFormat() {\r\n\t\treturn this._getNationalPrefixIsOptionalWhenFormatting(this.metadata) ||\r\n\t\t\tthis._getNationalPrefixIsOptionalWhenFormatting(this._getDefaultCountryMetadataForThisCallingCode())\r\n\t}\r\n\r\n\tleadingDigits() {\r\n\t\treturn this.metadata[this.v1 ? 8 : this.v2 ? 9 : 10]\r\n\t}\r\n\r\n\ttypes() {\r\n\t\treturn this.metadata[this.v1 ? 9 : this.v2 ? 10 : 11]\r\n\t}\r\n\r\n\thasTypes() {\r\n\t\t// Versions 1.2.0 - 1.2.4: can be `[]`.\r\n\t\t/* istanbul ignore next */\r\n\t\tif (this.types() && this.types().length === 0) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\t// Versions <= 1.2.4: can be `undefined`.\r\n\t\t// Version >= 1.2.5: can be `0`.\r\n\t\treturn !!this.types()\r\n\t}\r\n\r\n\ttype(type) {\r\n\t\tif (this.hasTypes() && getType(this.types(), type)) {\r\n\t\t\treturn new Type(getType(this.types(), type), this)\r\n\t\t}\r\n\t}\r\n\r\n\text() {\r\n\t\tif (this.v1 || this.v2) return DEFAULT_EXT_PREFIX\r\n\t\treturn this.metadata[13] || DEFAULT_EXT_PREFIX\r\n\t}\r\n}\r\n\r\nclass Format {\r\n\tconstructor(format, metadata) {\r\n\t\tthis._format = format\r\n\t\tthis.metadata = metadata\r\n\t}\r\n\r\n\tpattern() {\r\n\t\treturn this._format[0]\r\n\t}\r\n\r\n\tformat() {\r\n\t\treturn this._format[1]\r\n\t}\r\n\r\n\tleadingDigitsPatterns() {\r\n\t\treturn this._format[2] || []\r\n\t}\r\n\r\n\tnationalPrefixFormattingRule() {\r\n\t\treturn this._format[3] || this.metadata.nationalPrefixFormattingRule()\r\n\t}\r\n\r\n\tnationalPrefixIsOptionalWhenFormattingInNationalFormat() {\r\n\t\treturn !!this._format[4] || this.metadata.nationalPrefixIsOptionalWhenFormattingInNationalFormat()\r\n\t}\r\n\r\n\tnationalPrefixIsMandatoryWhenFormattingInNationalFormat() {\r\n\t\t// National prefix is omitted if there's no national prefix formatting rule\r\n\t\t// set for this country, or when the national prefix formatting rule\r\n\t\t// contains no national prefix itself, or when this rule is set but\r\n\t\t// national prefix is optional for this phone number format\r\n\t\t// (and it is not enforced explicitly)\r\n\t\treturn this.usesNationalPrefix() && !this.nationalPrefixIsOptionalWhenFormattingInNationalFormat()\r\n\t}\r\n\r\n\t// Checks whether national prefix formatting rule contains national prefix.\r\n\tusesNationalPrefix() {\r\n\t\treturn this.nationalPrefixFormattingRule() &&\r\n\t\t\t// Check that national prefix formatting rule is not a \"dummy\" one.\r\n\t\t\t!FIRST_GROUP_ONLY_PREFIX_PATTERN.test(this.nationalPrefixFormattingRule())\r\n\t\t\t// In compressed metadata, `this.nationalPrefixFormattingRule()` is `0`\r\n\t\t\t// when `national_prefix_formatting_rule` is not present.\r\n\t\t\t// So, `true` or `false` are returned explicitly here, so that\r\n\t\t\t// `0` number isn't returned.\r\n\t\t\t? true\r\n\t\t\t: false\r\n\t}\r\n\r\n\tinternationalFormat() {\r\n\t\treturn this._format[5] || this.format()\r\n\t}\r\n}\r\n\r\n/**\r\n * A pattern that is used to determine if the national prefix formatting rule\r\n * has the first group only, i.e., does not start with the national prefix.\r\n * Note that the pattern explicitly allows for unbalanced parentheses.\r\n */\r\nconst FIRST_GROUP_ONLY_PREFIX_PATTERN = /^\\(?\\$1\\)?$/\r\n\r\nclass Type {\r\n\tconstructor(type, metadata) {\r\n\t\tthis.type = type\r\n\t\tthis.metadata = metadata\r\n\t}\r\n\r\n\tpattern() {\r\n\t\tif (this.metadata.v1) return this.type\r\n\t\treturn this.type[0]\r\n\t}\r\n\r\n\tpossibleLengths() {\r\n\t\tif (this.metadata.v1) return\r\n\t\treturn this.type[1] || this.metadata.possibleLengths()\r\n\t}\r\n}\r\n\r\nfunction getType(types, type) {\r\n\tswitch (type) {\r\n\t\tcase 'FIXED_LINE':\r\n\t\t\treturn types[0]\r\n\t\tcase 'MOBILE':\r\n\t\t\treturn types[1]\r\n\t\tcase 'TOLL_FREE':\r\n\t\t\treturn types[2]\r\n\t\tcase 'PREMIUM_RATE':\r\n\t\t\treturn types[3]\r\n\t\tcase 'PERSONAL_NUMBER':\r\n\t\t\treturn types[4]\r\n\t\tcase 'VOICEMAIL':\r\n\t\t\treturn types[5]\r\n\t\tcase 'UAN':\r\n\t\t\treturn types[6]\r\n\t\tcase 'PAGER':\r\n\t\t\treturn types[7]\r\n\t\tcase 'VOIP':\r\n\t\t\treturn types[8]\r\n\t\tcase 'SHARED_COST':\r\n\t\t\treturn types[9]\r\n\t}\r\n}\r\n\r\nexport function validateMetadata(metadata) {\r\n\tif (!metadata) {\r\n\t\tthrow new Error('[libphonenumber-js] `metadata` argument not passed. Check your arguments.')\r\n\t}\r\n\r\n\t// `country_phone_code_to_countries` was renamed to `country_calling_codes` in `1.0.18`.\r\n\t// For that reason, it's not used in this detection algorithm.\r\n\t// Instead, it detects by `countries: {}` property existence.\r\n\tif (!isObject(metadata) || !isObject(metadata.countries)) {\r\n\t\tthrow new Error(`[libphonenumber-js] \\`metadata\\` argument was passed but it's not a valid metadata. Must be an object having \\`.countries\\` child object property. Got ${isObject(metadata) ? 'an object of shape: { ' + Object.keys(metadata).join(', ') + ' }' : 'a ' + typeOf(metadata) + ': ' + metadata}.`)\r\n\t}\r\n}\r\n\r\n// Babel transforms `typeof` into some \"branches\"\r\n// so istanbul will show this as \"branch not covered\".\r\n/* istanbul ignore next */\r\nconst typeOf = _ => typeof _\r\n\r\n/**\r\n * Returns extension prefix for a country.\r\n * @param {string} country\r\n * @param {object} metadata\r\n * @return {string?}\r\n * @example\r\n * // Returns \" ext. \"\r\n * getExtPrefix(\"US\")\r\n */\r\nexport function getExtPrefix(country, metadataJson) {\r\n\tconst metadata = new Metadata(metadataJson)\r\n\tif (metadata.hasCountry(country)) {\r\n\t\treturn metadata.selectNumberingPlan(country).ext()\r\n\t}\r\n\treturn DEFAULT_EXT_PREFIX\r\n}\r\n\r\n/**\r\n * Returns \"country calling code\" for a country.\r\n * Throws an error if the country doesn't exist or isn't supported by this library.\r\n * @param {string} country\r\n * @param {object} metadataJson\r\n * @return {string}\r\n * @example\r\n * // Returns \"44\"\r\n * getCountryCallingCode(\"GB\")\r\n */\r\nexport function getCountryCallingCode(country, metadataJson) {\r\n\tconst metadata = new Metadata(metadataJson)\r\n\tif (metadata.hasCountry(country)) {\r\n\t\treturn metadata.selectNumberingPlan(country).countryCallingCode()\r\n\t}\r\n\tthrow new Error(`Unknown country: ${country}`)\r\n}\r\n\r\n/**\r\n * Tells if a country code is supported.\r\n * @param {string} country\r\n * @param {object} metadataJson\r\n * @return {boolean}\r\n * @example\r\n * // Returns `true`\r\n * isSupportedCountry(\"GB\")\r\n */\r\nexport function isSupportedCountry(country, metadataJson) {\r\n\t// const metadata = new Metadata(metadataJson)\r\n\t// return metadata.hasCountry(country)\r\n\treturn metadataJson.countries.hasOwnProperty(country)\r\n}\r\n\r\n/**\r\n * Sets `v1`/`v2`/`v3`/`v4` properties on `this` object.\r\n * @param {object} metadata — Metadata JSON\r\n */\r\nfunction setVersion(metadata) {\r\n\tconst { version } = metadata\r\n\tif (typeof version === 'number') {\r\n\t\tthis.v1 = version === 1\r\n\t\tthis.v2 = version === 2\r\n\t\tthis.v3 = version === 3\r\n\t\tthis.v4 = version === 4\r\n\t} else {\r\n\t\tif (!version) {\r\n\t\t\tthis.v1 = true\r\n\t\t} else if (compare(version, V3) === -1) {\r\n\t\t\tthis.v2 = true\r\n\t\t} else if (compare(version, V4) === -1) {\r\n\t\t\tthis.v3 = true\r\n\t\t} else {\r\n\t\t\tthis.v4 = true\r\n\t\t}\r\n\t}\r\n}","/**\r\n * Merges two arrays.\r\n * @param {*} a\r\n * @param {*} b\r\n * @return {*}\r\n */\r\nexport default function mergeArrays(a, b) {\r\n\tconst merged = a.slice()\r\n\r\n\tfor (const element of b) {\r\n\t\tif (a.indexOf(element) < 0) {\r\n\t\t\tmerged.push(element)\r\n\t\t}\r\n\t}\r\n\r\n\treturn merged.sort((a, b) => a - b)\r\n\r\n\t// ES6 version, requires Set polyfill.\r\n\t// let merged = new Set(a)\r\n\t// for (const element of b) {\r\n\t// \tmerged.add(i)\r\n\t// }\r\n\t// return Array.from(merged).sort((a, b) => a - b)\r\n}","import Metadata from '../metadata.js'\r\nimport mergeArrays from './mergeArrays.js'\r\n\r\n/**\r\n * Checks phone number length against the phone numbering plan selected in metadata.\r\n * Optionally, it could be restrained by a specific country.\r\n * @param {string} nationalNumber\r\n * @param {string?} country — Specific country to use rather than the one that is pre-selected in the metadata instance.\r\n * @param {Metadata} metadata — Metadata instance with a selected numbering plan.\r\n * @returns {string}\r\n */\r\nexport default function checkNumberLength(nationalNumber, country, metadata) {\r\n\treturn checkNumberLengthForType(nationalNumber, undefined, country, metadata)\r\n}\r\n\r\n/**\r\n * Checks phone number length against the phone numbering plan selected in metadata.\r\n * Optionally, it could be restrained by a specific phone number type or a specific country.\r\n * @param {string} nationalNumber\r\n * @param {string?} type — Specific phone number type.\r\n * @param {string?} country — Specific country to use instead of the one that is pre-selected in the metadata instance.\r\n * @param {Metadata} metadata — Metadata instance with a selected numbering plan.\r\n * @returns {string} See the README on `validatePhoneNumberLength()` function, with an addition of a special case: when phone numbers of type `type` aren't possible in the telephone numbering plan, it will return \"INVALID_LENGTH\".\r\n */\r\n// Checks whether a number is possible for a certain `country` based on the number length.\r\n//\r\n// This function is not supported by metadata generated with ancient versions of\r\n// `libphonenumber-js` (before version `1.0.18`) which didn't include \"possible lengths\".\r\n//\r\n// There was also a known issue with `checkNumberLength()` function:\r\n// if a number is possible only in a certain `country` among several `countries`\r\n// that share the same \"country calling code\", that function would check\r\n// the possibility of the phone number only in the \"main\" `country` for the \"country calling code\"\r\n// and would not check if it's actually be possible in the speciifc `country`.\r\n//\r\n// For example, \"+1310xxxx\" numbers are valid in Canada.\r\n// However, they are not possible in the US due to being too short.\r\n// Since Canada and the US share the same country calling code — \"+1\" —\r\n// `checkNumberLength()` function used to return not \"IS_POSSIBLE\" for \"+1310xxxx\" numbers.\r\n//\r\n// In such cases, when using \"/max\" metadata, `isValid()` could output `true`\r\n// but at the same time `isPossible()` could output `false`, which was contradictory.\r\n//\r\n// See https://issuetracker.google.com/issues/335892662 for the discusson in Google's issues.\r\n//\r\n// The solution suggested by Google was implemented: an optional `country` argument\r\n// was added to `checkNumberLength()` function. If present, that `country` will be used\r\n// to check phone number length for that specific `country` rather than the \"main\" country\r\n// for the shared \"country calling code\".\r\n//\r\nexport function checkNumberLengthForType(nationalNumber, type, country, metadata) {\r\n\tif (country) {\r\n\t\t// If a specific `country` is specified, re-create a metadata instance with it.\r\n\t\tmetadata = new Metadata(metadata.metadata)\r\n\t\tmetadata.selectNumberingPlan(country)\r\n\t}\r\n\r\n\tconst type_info = metadata.type(type)\r\n\r\n\t// There should always be \"<possiblePengths/>\" set for every type element.\r\n\t// This is declared in the XML schema.\r\n\t// For size efficiency, where a sub-description (e.g. fixed-line)\r\n\t// has the same \"<possiblePengths/>\" as the \"general description\", this is missing,\r\n\t// so we fall back to the \"general description\". Where no numbers of the type\r\n\t// exist at all, there is one possible length (-1) which is guaranteed\r\n\t// not to match the length of any real phone number.\r\n\tlet possible_lengths = type_info && type_info.possibleLengths() || metadata.possibleLengths()\r\n\t// let local_lengths = type_info && type.possibleLengthsLocal() || metadata.possibleLengthsLocal()\r\n\r\n\t// Metadata before version `1.0.18` didn't contain `possible_lengths`.\r\n\tif (!possible_lengths) {\r\n\t\treturn 'IS_POSSIBLE'\r\n\t}\r\n\r\n\tif (type === 'FIXED_LINE_OR_MOBILE') {\r\n\t\t// No such country in metadata.\r\n\t\t/* istanbul ignore next */\r\n\t\tif (!metadata.type('FIXED_LINE')) {\r\n\t\t\t// The rare case has been encountered where no fixedLine data is available\r\n\t\t\t// (true for some non-geographic entities), so we just check mobile.\r\n\t\t\treturn checkNumberLengthForType(nationalNumber, 'MOBILE', country, metadata)\r\n\t\t}\r\n\r\n\t\tconst mobile_type = metadata.type('MOBILE')\r\n\t\tif (mobile_type) {\r\n\t\t\t// Merge the mobile data in if there was any. \"Concat\" creates a new\r\n\t\t\t// array, it doesn't edit possible_lengths in place, so we don't need a copy.\r\n\t\t\t// Note that when adding the possible lengths from mobile, we have\r\n\t\t\t// to again check they aren't empty since if they are this indicates\r\n\t\t\t// they are the same as the general desc and should be obtained from there.\r\n\t\t\tpossible_lengths = mergeArrays(possible_lengths, mobile_type.possibleLengths())\r\n\t\t\t// The current list is sorted; we need to merge in the new list and\r\n\t\t\t// re-sort (duplicates are okay). Sorting isn't so expensive because\r\n\t\t\t// the lists are very small.\r\n\r\n\t\t\t// if (local_lengths) {\r\n\t\t\t// \tlocal_lengths = mergeArrays(local_lengths, mobile_type.possibleLengthsLocal())\r\n\t\t\t// } else {\r\n\t\t\t// \tlocal_lengths = mobile_type.possibleLengthsLocal()\r\n\t\t\t// }\r\n\t\t}\r\n\t}\r\n\t// If the type doesn't exist then return 'INVALID_LENGTH'.\r\n\telse if (type && !type_info) {\r\n\t\treturn 'INVALID_LENGTH'\r\n\t}\r\n\r\n\tconst actual_length = nationalNumber.length\r\n\r\n\t// In `libphonenumber-js` all \"local-only\" formats are dropped for simplicity.\r\n\t// // This is safe because there is never an overlap beween the possible lengths\r\n\t// // and the local-only lengths; this is checked at build time.\r\n\t// if (local_lengths && local_lengths.indexOf(nationalNumber.length) >= 0)\r\n\t// {\r\n\t// \treturn 'IS_POSSIBLE_LOCAL_ONLY'\r\n\t// }\r\n\r\n\tconst minimum_length = possible_lengths[0]\r\n\r\n\tif (minimum_length === actual_length) {\r\n\t\treturn 'IS_POSSIBLE'\r\n\t}\r\n\r\n\tif (minimum_length > actual_length) {\r\n\t\treturn 'TOO_SHORT'\r\n\t}\r\n\r\n\tif (possible_lengths[possible_lengths.length - 1] < actual_length) {\r\n\t\treturn 'TOO_LONG'\r\n\t}\r\n\r\n\t// We skip the first element since we've already checked it.\r\n\treturn possible_lengths.indexOf(actual_length, 1) >= 0 ? 'IS_POSSIBLE' : 'INVALID_LENGTH'\r\n}","import Metadata from './metadata.js'\r\nimport checkNumberLength from './helpers/checkNumberLength.js'\r\n\r\n/**\r\n * Checks if a phone number is \"possible\" (basically just checks its length).\r\n *\r\n * isPossible(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {object} [options]\r\n * @param {object} metadataJson\r\n * @return {string}\r\n */\r\nexport default function isPossiblePhoneNumber(input, options, metadataJson) {\r\n\t/* istanbul ignore if */\r\n\tif (options === undefined) {\r\n\t\toptions = {}\r\n\t}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\tif (options.v2) {\r\n\t\tif (!input.countryCallingCode) {\r\n\t\t\tthrow new Error('Invalid phone number object passed')\r\n\t\t}\r\n\t\tmetadata.selectNumberingPlan(input.country || input.countryCallingCode)\r\n\t} else {\r\n\t\tif (!input.phone) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\tif (input.country) {\r\n\t\t\tif (!metadata.hasCountry(input.country)) {\r\n\t\t\t\tthrow new Error(`Unknown country: ${input.country}`)\r\n\t\t\t}\r\n\t\t\tmetadata.selectNumberingPlan(input.country)\r\n\t\t} else {\r\n\t\t\tif (!input.countryCallingCode) {\r\n\t\t\t\tthrow new Error('Invalid phone number object passed')\r\n\t\t\t}\r\n\t\t\tmetadata.selectNumberingPlan(input.countryCallingCode)\r\n\t\t}\r\n\t}\r\n\r\n\t// Old (legacy) metadata (< 1.0.18) had no \"possible length\" data.\r\n\t// So `isPossibleNumber()` function is supported only for non-legacy metadata.\r\n\tif (metadata.possibleLengths()) {\r\n\t\treturn isPossibleNumber(input.phone || input.nationalNumber, metadata)\r\n\t}\r\n\r\n\t// There was a bug in versions from `1.7.35` to `1.7.37` of `libphonenumber-js`\r\n\t// where \"possible_lengths\" property was missing from \"non-geographical\" numbering plans' metadata.\r\n\t// After that, the bug was noticed and fixed.\r\n\t// So for versions from `1.7.35` to `1.7.37`, just assume that all \"non=geotraphical\" numbers are possible.\r\n\t// The reason is that the bug was noticed relatively quickly (within a day or so)\r\n\t// and it's unlikely that anyone generated their custom metadata in that short time span.\r\n\t// And if they didn't generate any custom metadata then a follow-up package update would've silently fixed the bug.\r\n\tif (input.countryCallingCode && metadata.isNonGeographicCallingCode(input.countryCallingCode)) {\r\n\t\treturn true\r\n\t}\r\n\r\n\t// `isPossibleNumber()` function is not supported.\r\n\tthrow new Error('Missing \"possibleLengths\" in metadata. Perhaps the metadata has been generated before v1.0.18.');\r\n}\r\n\r\n/**\r\n * Tells if a given national (significant) number is possible\r\n * @param {string} nationalNumber\r\n * @param {Metadata} metadata = Metadata instance with a pre-selected telephone numbering plan.\r\n * @returns {boolean}\r\n */\r\nexport function isPossibleNumber(nationalNumber, metadata) {\r\n\tswitch (checkNumberLength(nationalNumber, undefined, metadata)) {\r\n\t\tcase 'IS_POSSIBLE':\r\n\t\t\treturn true\r\n\t\t// This library ignores \"local-only\" phone numbers (for simplicity).\r\n\t\t// See the readme for more info on what are \"local-only\" phone numbers.\r\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\r\n\t\t// \treturn !isInternational\r\n\t\tdefault:\r\n\t\t\treturn false\r\n\t}\r\n}","/**\r\n * Checks whether the entire input sequence can be matched\r\n * against the regular expression.\r\n * @return {boolean}\r\n */\r\nexport default function matchesEntirely(text, regularExpressionText) {\r\n\t// If the assigning of the `''` default value is moved to the arguments above,\r\n\t// the code coverage would decrease for some weird reason.\r\n\ttext = text || ''\r\n\treturn new RegExp('^(?:' + regularExpressionText + ')$').test(text)\r\n}","import Metadata from '../metadata.js'\r\nimport matchesEntirely from './matchesEntirely.js'\r\n\r\nconst NON_FIXED_LINE_PHONE_TYPES = [\r\n\t'MOBILE',\r\n\t'PREMIUM_RATE',\r\n\t'TOLL_FREE',\r\n\t'SHARED_COST',\r\n\t'VOIP',\r\n\t'PERSONAL_NUMBER',\r\n\t'PAGER',\r\n\t'UAN',\r\n\t'VOICEMAIL'\r\n]\r\n\r\n// Finds out national phone number type (fixed line, mobile, etc)\r\nexport default function getNumberType(input, options, metadataJson)\r\n{\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\t// When `parse()` returns an empty object — `{}` —\r\n\t// that means that the phone number is malformed,\r\n\t// so it can't possibly be valid.\r\n\tif (!input.country && !input.countryCallingCode) {\r\n\t\treturn\r\n\t}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\tmetadata.selectNumberingPlan(input.country || input.countryCallingCode)\r\n\r\n\tconst nationalNumber = options.v2 ? input.nationalNumber : input.phone\r\n\r\n\t// The following is copy-pasted from the original function:\r\n\t// https://github.com/googlei18n/libphonenumber/blob/3ea547d4fbaa2d0b67588904dfa5d3f2557c27ff/javascript/i18n/phonenumbers/phonenumberutil.js#L2835\r\n\r\n\t// Is this national number even valid for this country\r\n\tif (!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\r\n\t\treturn\r\n\t}\r\n\r\n\t// Is it fixed line number\r\n\tif (isNumberTypeEqualTo(nationalNumber, 'FIXED_LINE', metadata)) {\r\n\t\t// Because duplicate regular expressions are removed\r\n\t\t// to reduce metadata size, if \"mobile\" pattern is \"\"\r\n\t\t// then it means it was removed due to being a duplicate of the fixed-line pattern.\r\n\t\t//\r\n\t\tif (metadata.type('MOBILE') && metadata.type('MOBILE').pattern() === '') {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\t// `MOBILE` type pattern isn't included if it matched `FIXED_LINE` one.\r\n\t\t// For example, for \"US\" country.\r\n\t\t// Old metadata (< `1.0.18`) had a specific \"types\" data structure\r\n\t\t// that happened to be `undefined` for `MOBILE` in that case.\r\n\t\t// Newer metadata (>= `1.0.18`) has another data structure that is\r\n\t\t// not `undefined` for `MOBILE` in that case (it's just an empty array).\r\n\t\t// So this `if` is just for backwards compatibility with old metadata.\r\n\t\tif (!metadata.type('MOBILE')) {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\t// Check if the number happens to qualify as both fixed line and mobile.\r\n\t\t// (no such country in the minimal metadata set)\r\n\t\t/* istanbul ignore if */\r\n\t\tif (isNumberTypeEqualTo(nationalNumber, 'MOBILE', metadata)) {\r\n\t\t\treturn 'FIXED_LINE_OR_MOBILE'\r\n\t\t}\r\n\r\n\t\treturn 'FIXED_LINE'\r\n\t}\r\n\r\n\tfor (const type of NON_FIXED_LINE_PHONE_TYPES) {\r\n\t\tif (isNumberTypeEqualTo(nationalNumber, type, metadata)) {\r\n\t\t\treturn type\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport function isNumberTypeEqualTo(nationalNumber, type, metadata) {\r\n\tconst typeDefinition = metadata.type(type)\r\n\tif (!typeDefinition || !typeDefinition.pattern()) {\r\n\t\treturn false\r\n\t}\r\n\r\n\t// Check if any possible number lengths are present;\r\n\t// if so, we use them to avoid checking\r\n\t// the validation pattern if they don't match.\r\n\t// If they are absent, this means they match\r\n\t// the general description, which we have\r\n\t// already checked before a specific number type.\r\n\tif (\r\n\t\ttypeDefinition.possibleLengths() &&\r\n\t\ttypeDefinition.possibleLengths().indexOf(nationalNumber.length) < 0\r\n\t) {\r\n\t\treturn false\r\n\t}\r\n\r\n\treturn matchesEntirely(nationalNumber, typeDefinition.pattern())\r\n}","import Metadata from './metadata.js'\r\nimport matchesEntirely from './helpers/matchesEntirely.js'\r\nimport getNumberType from './helpers/getNumberType.js'\r\n\r\n/**\r\n * Checks if a given phone number is valid.\r\n *\r\n * isValid(phoneNumberInstance, { ..., v2: true }, metadata)\r\n *\r\n * isPossible({ phone: '8005553535', country: 'RU' }, { ... }, metadata)\r\n * isPossible({ phone: '8005553535', country: 'RU' }, undefined, metadata)\r\n *\r\n * If the `number` is a string, it will be parsed to an object,\r\n * but only if it contains only valid phone number characters (including punctuation).\r\n * If the `number` is an object, it is used as is.\r\n *\r\n * The optional `defaultCountry` argument is the default country.\r\n * I.e. it does not restrict to just that country,\r\n * e.g. in those cases where several countries share\r\n * the same phone numbering rules (NANPA, Britain, etc).\r\n * For example, even though the number `07624 369230`\r\n * belongs to the Isle of Man (\"IM\" country code)\r\n * calling `isValidNumber('07624369230', 'GB', metadata)`\r\n * still returns `true` because the country is not restricted to `GB`,\r\n * it's just that `GB` is the default one for the phone numbering rules.\r\n * For restricting the country see `isValidNumberForRegion()`\r\n * though restricting a country might not be a good idea.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isValidNumber('+78005553535', metadata)\r\n * isValidNumber('8005553535', 'RU', metadata)\r\n * isValidNumber('88005553535', 'RU', metadata)\r\n * isValidNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\r\nexport default function isValidNumber(input, options, metadataJson)\r\n{\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\tmetadata.selectNumberingPlan(input.country || input.countryCallingCode)\r\n\r\n\t// By default, countries only have type regexps when it's required for\r\n\t// distinguishing different countries having the same `countryCallingCode`.\r\n\tif (metadata.hasTypes()) {\r\n\t\treturn getNumberType(input, options, metadata.metadata) !== undefined\r\n\t}\r\n\r\n\t// If there are no type regexps for this country in metadata then use\r\n\t// `nationalNumberPattern` as a \"better than nothing\" replacement.\r\n\tconst nationalNumber = options.v2 ? input.nationalNumber : input.phone\r\n\treturn matchesEntirely(nationalNumber, metadata.nationalNumberPattern())\r\n}","const COUNTRY_CODE_REG_EXP = /^[A-Z]{2}$/\r\n\r\nexport default function isCountryCode(string) {\r\n\treturn COUNTRY_CODE_REG_EXP.test(string)\r\n}\r\n","import Metadata from '../metadata.js'\r\nimport isCountryCode from './isCountryCode.js'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\nexport default function getCountryAndCallingCodeFromOneOfThem(countryOrCallingCode, metadataJson) {\r\n\tlet country\r\n\tlet callingCode\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\t// If country code is passed then derive `countryCallingCode` from it.\r\n\t// Also store the country code as `.country`.\r\n\tif (isCountryCode(countryOrCallingCode)) {\r\n\t\tcountry = countryOrCallingCode\r\n\t\tmetadata.selectNumberingPlan(country)\r\n\t\tcallingCode = metadata.countryCallingCode()\r\n\t} else {\r\n\t\tcallingCode = countryOrCallingCode\r\n\t\t/* istanbul ignore if */\r\n\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\tif (metadata.isNonGeographicCallingCode(callingCode)) {\r\n\t\t\t\tcountry = '001'\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcallingCode\r\n\t}\r\n}","import Metadata from '../metadata.js'\r\n\r\n/**\r\n * Returns a list of countries that the phone number could potentially belong to.\r\n * @param {string} callingCode — Calling code.\r\n * @param {string} nationalNumber — National (significant) number.\r\n * @param {object} metadata — Metadata.\r\n * @return {string[]} A list of possible countries.\r\n */\r\nexport default function getPossibleCountriesForNumber(callingCode, nationalNumber, metadata) {\r\n\tconst _metadata = new Metadata(metadata)\r\n\tlet possibleCountries = _metadata.getCountryCodesForCallingCode(callingCode)\r\n\tif (!possibleCountries) {\r\n\t\treturn []\r\n\t}\r\n\treturn possibleCountries.filter((country) => {\r\n\t\treturn couldNationalNumberBelongToCountry(nationalNumber, country, metadata)\r\n\t})\r\n}\r\n\r\nfunction couldNationalNumberBelongToCountry(nationalNumber, country, metadataJson) {\r\n\tconst metadata = new Metadata(metadataJson)\r\n\tmetadata.selectNumberingPlan(country)\r\n\treturn metadata.numberingPlan.possibleLengths().indexOf(nationalNumber.length) >= 0\r\n}","// The minimum length of the national significant number.\r\nexport const MIN_LENGTH_FOR_NSN = 2\r\n\r\n// The ITU says the maximum length should be 15,\r\n// but one can find longer numbers in Germany.\r\nexport const MAX_LENGTH_FOR_NSN = 17\r\n\r\n// The maximum length of the country calling code.\r\nexport const MAX_LENGTH_COUNTRY_CODE = 3\r\n\r\n// Digits accepted in phone numbers\r\n// (ascii, fullwidth, arabic-indic, and eastern arabic digits).\r\nexport const VALID_DIGITS = '0-9\\uFF10-\\uFF19\\u0660-\\u0669\\u06F0-\\u06F9'\r\n\r\n// `DASHES` will be right after the opening square bracket of the \"character class\"\r\nconst DASHES = '-\\u2010-\\u2015\\u2212\\u30FC\\uFF0D'\r\nconst SLASHES = '\\uFF0F/'\r\nconst DOTS = '\\uFF0E.'\r\nexport const WHITESPACE = ' \\u00A0\\u00AD\\u200B\\u2060\\u3000'\r\nconst BRACKETS = '()\\uFF08\\uFF09\\uFF3B\\uFF3D\\\\[\\\\]'\r\n// export const OPENING_BRACKETS = '(\\uFF08\\uFF3B\\\\\\['\r\nconst TILDES = '~\\u2053\\u223C\\uFF5E'\r\n\r\n// Regular expression of acceptable punctuation found in phone numbers. This\r\n// excludes punctuation found as a leading character only. This consists of dash\r\n// characters, white space characters, full stops, slashes, square brackets,\r\n// parentheses and tildes. Full-width variants are also present.\r\nexport const VALID_PUNCTUATION = `${DASHES}${SLASHES}${DOTS}${WHITESPACE}${BRACKETS}${TILDES}`\r\n\r\nexport const PLUS_CHARS = '+\\uFF0B'\r\n// const LEADING_PLUS_CHARS_PATTERN = new RegExp('^[' + PLUS_CHARS + ']+')","import Metadata from '../metadata.js'\r\nimport { VALID_DIGITS } from '../constants.js'\r\n\r\nconst CAPTURING_DIGIT_PATTERN = new RegExp('([' + VALID_DIGITS + '])')\r\n\r\nexport default function stripIddPrefix(number, country, callingCode, metadataJson) {\r\n\tif (!country) {\r\n\t\treturn\r\n\t}\r\n\r\n\t// Get the IDD prefix pattern.\r\n\tconst metadata = new Metadata(metadataJson)\r\n\tmetadata.selectNumberingPlan(country || callingCode)\r\n\tconst IDDPrefixPattern = new RegExp(metadata.IDDPrefix())\r\n\r\n\t// Check if the number is IDD-prefixed.\r\n\tif (number.search(IDDPrefixPattern) !== 0) {\r\n\t\treturn\r\n\t}\r\n\r\n\t// Strip IDD prefix.\r\n\tnumber = number.slice(number.match(IDDPrefixPattern)[0].length)\r\n\r\n\t// If there're any digits after an IDD prefix,\r\n\t// then those digits are a country calling code.\r\n\t// Since no country code starts with a `0`,\r\n\t// the code below validates that the next digit (if present) is not `0`.\r\n\tconst matchedGroups = number.match(CAPTURING_DIGIT_PATTERN)\r\n\tif (matchedGroups && matchedGroups[1] != null && matchedGroups[1].length > 0) {\r\n\t\tif (matchedGroups[1] === '0') {\r\n\t\t\treturn\r\n\t\t}\r\n\t}\r\n\r\n\treturn number\r\n}","/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, nationalPrefix: string? carrierCode: string? }`. Even if a national prefix was extracted, it's not necessarily present in the returned object, so don't rely on its presence in the returned object in order to find out whether a national prefix has been extracted or not.\r\n */\r\nexport default function extractNationalNumberFromPossiblyIncompleteNumber(number, metadata) {\r\n\tif (number && metadata.numberingPlan.nationalPrefixForParsing()) {\r\n\t\t// See METADATA.md for the description of\r\n\t\t// `national_prefix_for_parsing` and `national_prefix_transform_rule`.\r\n\t\t// Attempt to parse the first digits as a national prefix.\r\n\t\tconst prefixPattern = new RegExp('^(?:' + metadata.numberingPlan.nationalPrefixForParsing() + ')')\r\n\t\tconst prefixMatch = prefixPattern.exec(number)\r\n\t\tif (prefixMatch) {\r\n\t\t\tlet nationalNumber\r\n\t\t\tlet carrierCode\r\n\t\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\r\n\t\t\t// If a `national_prefix_for_parsing` has any \"capturing groups\"\r\n\t\t\t// then it means that the national (significant) number is equal to\r\n\t\t\t// those \"capturing groups\" transformed via `national_prefix_transform_rule`,\r\n\t\t\t// and nothing could be said about the actual national prefix:\r\n\t\t\t// what is it and was it even there.\r\n\t\t\t// If a `national_prefix_for_parsing` doesn't have any \"capturing groups\",\r\n\t\t\t// then everything it matches is a national prefix.\r\n\t\t\t// To determine whether `national_prefix_for_parsing` matched any\r\n\t\t\t// \"capturing groups\", the value of the result of calling `.exec()`\r\n\t\t\t// is looked at, and if it has non-undefined values where there're\r\n\t\t\t// \"capturing groups\" in the regular expression, then it means\r\n\t\t\t// that \"capturing groups\" have been matched.\r\n\t\t\t// It's not possible to tell whether there'll be any \"capturing gropus\"\r\n\t\t\t// before the matching process, because a `national_prefix_for_parsing`\r\n\t\t\t// could exhibit both behaviors.\r\n\t\t\tconst capturedGroupsCount = prefixMatch.length - 1\r\n\t\t\tconst hasCapturedGroups = capturedGroupsCount > 0 && prefixMatch[capturedGroupsCount]\r\n\t\t\tif (metadata.nationalPrefixTransformRule() && hasCapturedGroups) {\r\n\t\t\t\tnationalNumber = number.replace(\r\n\t\t\t\t\tprefixPattern,\r\n\t\t\t\t\tmetadata.nationalPrefixTransformRule()\r\n\t\t\t\t)\r\n\t\t\t\t// If there's more than one captured group,\r\n\t\t\t\t// then carrier code is the second one.\r\n\t\t\t\tif (capturedGroupsCount > 1) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If there're no \"capturing groups\",\r\n\t\t\t// or if there're \"capturing groups\" but no\r\n\t\t\t// `national_prefix_transform_rule`,\r\n\t\t\t// then just strip the national prefix from the number,\r\n\t\t\t// and possibly a carrier code.\r\n\t\t\t// Seems like there could be more.\r\n\t\t\telse {\r\n\t\t\t\t// `prefixBeforeNationalNumber` is the whole substring matched by\r\n\t\t\t\t// the `national_prefix_for_parsing` regular expression.\r\n\t\t\t\t// There seem to be no guarantees that it's just a national prefix.\r\n\t\t\t\t// For example, if there's a carrier code, it's gonna be a\r\n\t\t\t\t// part of `prefixBeforeNationalNumber` too.\r\n\t\t\t\tconst prefixBeforeNationalNumber = prefixMatch[0]\r\n\t\t\t\tnationalNumber = number.slice(prefixBeforeNationalNumber.length)\r\n\t\t\t\t// If there's at least one captured group,\r\n\t\t\t\t// then carrier code is the first one.\r\n\t\t\t\tif (hasCapturedGroups) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Tries to guess whether a national prefix was present in the input.\r\n\t\t\t// This is not something copy-pasted from Google's library:\r\n\t\t\t// they don't seem to have an equivalent for that.\r\n\t\t\t// So this isn't an \"officially approved\" way of doing something like that.\r\n\t\t\t// But since there seems no other existing method, this library uses it.\r\n\t\t\tlet nationalPrefix\r\n\t\t\tif (hasCapturedGroups) {\r\n\t\t\t\tconst possiblePositionOfTheFirstCapturedGroup = number.indexOf(prefixMatch[1])\r\n\t\t\t\tconst possibleNationalPrefix = number.slice(0, possiblePositionOfTheFirstCapturedGroup)\r\n\t\t\t\t// Example: an Argentinian (AR) phone number `0111523456789`.\r\n\t\t\t\t// `prefixMatch[0]` is `01115`, and `$1` is `11`,\r\n\t\t\t\t// and the rest of the phone number is `23456789`.\r\n\t\t\t\t// The national number is transformed via `9$1` to `91123456789`.\r\n\t\t\t\t// National prefix `0` is detected being present at the start.\r\n\t\t\t\t// if (possibleNationalPrefix.indexOf(metadata.numberingPlan.nationalPrefix()) === 0) {\r\n\t\t\t\tif (possibleNationalPrefix === metadata.numberingPlan.nationalPrefix()) {\r\n\t\t\t\t\tnationalPrefix = metadata.numberingPlan.nationalPrefix()\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tnationalPrefix = prefixMatch[0]\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\tnationalNumber,\r\n\t\t\t\tnationalPrefix,\r\n\t\t\t\tcarrierCode\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n return {\r\n \tnationalNumber: number\r\n }\r\n}","import Metadata from '../metadata.js'\r\nimport getNumberType from './getNumberType.js'\r\n\r\n/**\r\n * Returns the exact country that a given national (significant) number belongs to\r\n * in case of ambiguity, i.e. when multiple countries share the same \"country calling code\".\r\n * @param {string} [nationalNumber]\r\n * @param {string[]} countries — A list of countries that share the same calling code.\r\n * @param {object} metadata — Metadata JSON.\r\n * @returns {string?} Returns the exact country this number belongs to, or `undefined` if the exact country couldn't be determined.\r\n */\r\nexport default function getCountryByNationalNumber(nationalNumber, countries, metadataJson) {\r\n\t// Create a new `metadata` instance because it will be selecting a `country`.\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\t// const matchingCountries = []\r\n\r\n\tfor (const country of countries) {\r\n\t\tmetadata.selectNumberingPlan(country)\r\n\t\t// \"Leading digits\" patterns are only defined for about 20% of all countries.\r\n\t\t// By definition, matching \"leading digits\" is a sufficient but not a necessary\r\n\t\t// condition for a phone number to belong to a country.\r\n\t\t// The point of \"leading digits\" check is that it's the fastest one to get a match.\r\n\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/blob/master/METADATA.md#leading_digits\r\n\t\t// I'd suppose that \"leading digits\" patterns are mutually exclusive for different countries\r\n\t\t// because of the intended use of that feature.\r\n\t\tif (metadata.leadingDigits()) {\r\n\t\t\tif (nationalNumber &&\r\n\t\t\t\tnationalNumber.search(metadata.leadingDigits()) === 0) {\r\n\t\t\t\treturn country\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Else perform full validation with all of those\r\n\t\t// fixed-line/mobile/etc regular expressions.\r\n\t\telse if (getNumberType({ phone: nationalNumber, country }, undefined, metadata.metadata)) {\r\n\t\t\t// When multiple countries share the same \"country calling code\",\r\n\t\t\t// type patterns aren't guaranteed to be unique among them.\r\n\t\t\t// For example, both `US` and `CA` have the same pattern for `toll_free` numbers.\r\n\t\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417147572\r\n\t\t\t//\r\n\t\t\t// That means that this `if` condition could be `true` for multiple countries from the list.\r\n\t\t\t// Currently, it just returns the first one, which is also the \"main\" country for the \"country calling code\".\r\n\t\t\t// In an example with `toll_free` numbers above, `\"US\"` would be returned even though\r\n\t\t\t// it could as well be `\"CA\"`.\r\n\t\t\t//\r\n\t\t\t// There was also a time when this attempted to be overly smart\r\n\t\t\t// and kept track of all such multiple matching countries\r\n\t\t\t// and then picked the one that matched the `defaultCountry`, if provided.\r\n\t\t\t// For example, with `toll_free` numbers above, and with `defaultCountry: \"CA\"`,\r\n\t\t\t// it would've returned `\"CA\"` instead of `\"US\"`.\r\n\t\t\t// Later it turned out that such \"overly smart\" behavior turned out to be just confusing,\r\n\t\t\t// so this \"overly smart\" country detection was reverted to returning the \"main\" country\r\n\t\t\t// for the \"country calling code\".\r\n\t\t\t// https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/154\r\n\t\t\t//\r\n\t\t\treturn country\r\n\t\t\t//\r\n\t\t\t// The \"overly smart\" behavior code:\r\n\t\t\t//\r\n\t\t\t// if (defaultCountry) {\r\n\t\t\t// \tif (country === defaultCountry) {\r\n\t\t\t// \t\treturn country\r\n\t\t\t// \t} else {\r\n\t\t\t// \t\tmatchingCountries.push(country)\r\n\t\t\t// \t}\r\n\t\t\t// } else {\r\n\t\t\t// \treturn country\r\n\t\t\t// }\r\n\t\t}\r\n\t}\r\n\r\n\t// // Return the first (\"main\") one of the `matchingCountries`.\r\n\t// if (matchingCountries.length > 0) {\r\n\t// \treturn matchingCountries[0]\r\n\t// }\r\n}","import getCountryByNationalNumber from './getCountryByNationalNumber.js'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\n/**\r\n * Returns the exact country that a given national (significant) number belongs to\r\n * in case of ambiguity, i.e. when multiple countries share the same \"country calling code\".\r\n * @param {string} [callingCode]\r\n * @param {string} [options.nationalNumber] — National (significant) number.\r\n * @param {Metadata} options.metadata — Metadata instance.\r\n * @returns {string?} Returns the most suitable country for this calling code and national (significant) number.\r\n */\r\nexport default function getCountryByCallingCode(callingCode, {\r\n\tnationalNumber,\r\n\tmetadata\r\n}) {\r\n\t/* istanbul ignore if */\r\n\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\tif (metadata.isNonGeographicCallingCode(callingCode)) {\r\n\t\t\treturn '001'\r\n\t\t}\r\n\t}\r\n\tconst possibleCountries = metadata.getCountryCodesForCallingCode(callingCode)\r\n\tif (!possibleCountries) {\r\n\t\treturn\r\n\t}\r\n\t// If there's just one country corresponding to the country code,\r\n\t// then just return it, without further phone number digits validation.\r\n\tif (possibleCountries.length === 1) {\r\n\t\treturn possibleCountries[0]\r\n\t}\r\n\treturn getCountryByNationalNumber(nationalNumber, possibleCountries, metadata.metadata)\r\n}","import extractNationalNumberFromPossiblyIncompleteNumber from './extractNationalNumberFromPossiblyIncompleteNumber.js'\r\nimport matchesEntirely from './matchesEntirely.js'\r\nimport checkNumberLength from './checkNumberLength.js'\r\nimport getCountryByCallingCode from './getCountryByCallingCode.js'\r\n\r\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {string?} country — Specific country to use instead of the one that is pre-selected in the metadata instance.\r\n * @param {Metadata} metadata — Metadata instance with a selected numbering plan.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\r\nexport default function extractNationalNumber(number, country, metadata) {\r\n\t// Parsing national prefixes and carrier codes\r\n\t// is only required for local phone numbers\r\n\t// but some people don't understand that\r\n\t// and sometimes write international phone numbers\r\n\t// with national prefixes (or maybe even carrier codes).\r\n\t// http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\r\n\t// Google's original library forgives such mistakes\r\n\t// and so does this library, because it has been requested:\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/127\r\n\tconst {\r\n\t\tcarrierCode,\r\n\t\tnationalNumber\r\n\t} = extractNationalNumberFromPossiblyIncompleteNumber(\r\n\t\tnumber,\r\n\t\tmetadata\r\n\t)\r\n\r\n\tif (nationalNumber !== number) {\r\n\t\tif (!shouldHaveExtractedNationalPrefix(number, nationalNumber, metadata)) {\r\n\t\t\t// Don't strip the national prefix.\r\n\t\t\treturn { nationalNumber: number }\r\n\t\t}\r\n\t\t// Check the national (significant) number length after extracting national prefix and carrier code.\r\n\t\t// Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature,\r\n\t\t// so this `if` will only be executed with newer metadata.\r\n\t\tif (metadata.numberingPlan.possibleLengths()) {\r\n\t\t\t// If an exact `country` is not specified, attempt to detect it from the assumed national number.\r\n\t\t\tif (!country) {\r\n\t\t\t\tcountry = getCountryByCallingCode(metadata.numberingPlan.callingCode(), {\r\n\t\t\t\t\tnationalNumber,\r\n\t\t\t\t\tmetadata\r\n\t\t\t\t})\r\n\t\t\t}\r\n\r\n\t\t\t// The number remaining after stripping the national prefix and carrier code\r\n\t\t\t// should be long enough to have a possible length for the country.\r\n\t\t\t// Otherwise, don't strip the national prefix and carrier code,\r\n\t\t\t// since the original number could be a valid number.\r\n\t\t\t// This check has been copy-pasted \"as is\" from Google's original library:\r\n\t\t\t// https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\r\n\t\t\t// It doesn't check for the \"possibility\" of the original `number`.\r\n\t\t\t// I guess it's fine not checking that one. It works as is anyway.\r\n\t\t\tif (!isPossibleIncompleteNationalNumber(nationalNumber, country, metadata)) {\r\n\t\t\t\t// Don't strip the national prefix.\r\n\t\t\t\treturn { nationalNumber: number }\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { nationalNumber, carrierCode }\r\n}\r\n\r\n// In some countries, the same digit could be a national prefix\r\n// or a leading digit of a valid phone number.\r\n// For example, in Russia, national prefix is `8`,\r\n// and also `800 555 35 35` is a valid number\r\n// in which `8` is not a national prefix, but the first digit\r\n// of a national (significant) number.\r\n// Same's with Belarus:\r\n// `82004910060` is a valid national (significant) number,\r\n// but `2004910060` is not.\r\n// To support such cases (to prevent the code from always stripping\r\n// national prefix), a condition is imposed: a national prefix\r\n// is not extracted when the original number is \"viable\" and the\r\n// resultant number is not, a \"viable\" national number being the one\r\n// that matches `national_number_pattern`.\r\nfunction shouldHaveExtractedNationalPrefix(nationalNumberBefore, nationalNumberAfter, metadata) {\r\n\t// The equivalent in Google's code is:\r\n\t// https://github.com/google/libphonenumber/blob/e326fa1fc4283bb05eb35cb3c15c18f98a31af33/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2969-L3004\r\n\tif (matchesEntirely(nationalNumberBefore, metadata.nationalNumberPattern()) &&\r\n\t\t!matchesEntirely(nationalNumberAfter, metadata.nationalNumberPattern())) {\r\n\t\treturn false\r\n\t}\r\n\t// This \"is possible\" national number (length) check has been commented out\r\n\t// because it's superceded by the (effectively) same check done in the\r\n\t// `extractNationalNumber()` function after it calls `shouldHaveExtractedNationalPrefix()`.\r\n\t// In other words, why run the same check twice if it could only be run once.\r\n\t// // Check the national (significant) number length after extracting national prefix and carrier code.\r\n\t// // Fixes a minor \"weird behavior\" bug: https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/57\r\n\t// // (Legacy generated metadata (before `1.0.18`) didn't support the \"possible lengths\" feature).\r\n\t// if (metadata.possibleLengths()) {\r\n\t// \tif (isPossibleIncompleteNationalNumber(nationalNumberBefore, metadata) &&\r\n\t// \t\t!isPossibleIncompleteNationalNumber(nationalNumberAfter, metadata)) {\r\n\t// \t\treturn false\r\n\t// \t}\r\n\t// }\r\n\treturn true\r\n}\r\n\r\n/**\r\n * Tells if a given incomplete national number is possible or not.\r\n * @param {string} nationalNumber\r\n * @param {string?} country — Specific country rather than the one that is pre-selected in the metadata instance.\r\n * @param {Metadata} metadata — Metadata instance with a selected numbering plan.\r\n * @returns {boolean}\r\n */\r\nfunction isPossibleIncompleteNationalNumber(nationalNumber, country, metadata) {\r\n\tswitch (checkNumberLength(nationalNumber, country, metadata)) {\r\n\t\tcase 'TOO_SHORT':\r\n\t\tcase 'INVALID_LENGTH':\r\n\t\t// This library ignores \"local-only\" phone numbers (for simplicity).\r\n\t\t// See the readme for more info on what are \"local-only\" phone numbers.\r\n\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\r\n\t\t\treturn false\r\n\t\tdefault:\r\n\t\t\treturn true\r\n\t}\r\n}","import Metadata from '../metadata.js'\r\nimport matchesEntirely from './matchesEntirely.js'\r\nimport extractNationalNumber from './extractNationalNumber.js'\r\nimport checkNumberLength from './checkNumberLength.js'\r\nimport getCountryCallingCode from '../getCountryCallingCode.js'\r\n\r\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits (only digits, no `+`).\r\n * @param {string} [country] — Exact country of the phone number.\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {object} metadataJson\r\n * @return {object} `{ countryCallingCode: string?, number: string }`, where `countryCallingCode` is the calling code that was extracted from the input `number` string, and `number` is the originally passed `number` without the extracted calling code.\r\n */\r\nexport default function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\tnumber,\r\n\tcountry,\r\n\tdefaultCountry,\r\n\tdefaultCallingCode,\r\n\tmetadataJson\r\n) {\r\n\t// Validate arguments.\r\n\t// The `number` is known to be in a non-international form\r\n\t// because there's no leading \"+\" character.\r\n\t// Therefore, there must be either `country` or `defaultCountry` or `defaultCallingCode`.\r\n\t// Otherwise, there'd be no source for the calling code to search for in the `number`.\r\n\tif (!(country || defaultCountry || defaultCallingCode)) {\r\n\t\t// There's no source for the calling code to search for in the `number`.\r\n\t\treturn { number }\r\n\t}\r\n\r\n\tconst countryCallingCode = country || defaultCountry\r\n\t\t? getCountryCallingCode(country || defaultCountry, metadataJson)\r\n\t\t: defaultCallingCode\r\n\r\n\tif (number.indexOf(countryCallingCode) === 0) {\r\n\t\tconst metadata = new Metadata(metadataJson)\r\n\t\tmetadata.selectNumberingPlan(country || defaultCountry || defaultCallingCode)\r\n\r\n\t\tconst possibleShorterNumber = number.slice(countryCallingCode.length)\r\n\r\n\t\tconst {\r\n\t\t\tnationalNumber: possibleShorterNationalNumber,\r\n\t\t} = extractNationalNumber(\r\n\t\t\tpossibleShorterNumber,\r\n\t\t\tundefined,\r\n\t\t\tmetadata\r\n\t\t)\r\n\r\n\t\tconst {\r\n\t\t\tnationalNumber\r\n\t\t} = extractNationalNumber(\r\n\t\t\tnumber,\r\n\t\t\tundefined,\r\n\t\t\tmetadata\r\n\t\t)\r\n\r\n\t\t// If the number was not valid before but is valid now,\r\n\t\t// or if it was too long before, we consider the number\r\n\t\t// with the country calling code stripped to be a better result\r\n\t\t// and keep that instead.\r\n\t\t// For example, in Germany (+49), `49` is a valid area code,\r\n\t\t// so if a number starts with `49`, it could be both a valid\r\n\t\t// national German number or an international number without\r\n\t\t// a leading `+`.\r\n\t\tif (\r\n\t\t\t(\r\n\t\t\t\t!matchesEntirely(nationalNumber, metadata.nationalNumberPattern()) &&\r\n\t\t\t\tmatchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern())\r\n\t\t\t)\r\n\t\t\t||\r\n\t\t\tcheckNumberLength(nationalNumber, undefined, metadata) === 'TOO_LONG'\r\n\t\t) {\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: possibleShorterNumber\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn { number }\r\n}","import stripIddPrefix from './stripIddPrefix.js'\r\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js'\r\nimport Metadata from '../metadata.js'\r\nimport { MAX_LENGTH_COUNTRY_CODE } from '../constants.js'\r\n\r\n/**\r\n * Attempts to extract a calling code from a phone number.\r\n * * If the phone number is found to be \"international\":\r\n * * It will attempt to identify the calling code part of it and whether that part is complete and valid.\r\n * * If the calling code part is complete and valid, it will return two properties:\r\n * that calling code part (without `+`) and the rest of the digits.\r\n * * Otherwise, i.e. if the calling code part is incomplete or invalid,\r\n * it will return an empty object.\r\n * * Otherwise, i.e. if the phone number is national, there's no callind code to extract\r\n * so it will just return the originally-passed `number` string as the only property.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Country.\r\n * @param {string} [defaultCountry] — Default country.\r\n * @param {string} [defaultCallingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadataJson\r\n * @return {object} `{ countryCallingCodeSource: string?, countryCallingCode: string?, number: string }`, where `countryCallingCodeSource` tells how the returned calling code was extracted (if it was extracted), `countryCallingCode` is the calling code that was extracted from the input `number` string, and `number` is the originally passed `number` without the extracted calling code (and without a `+`). If the calling code is present but incomplete or invalid, it will return an empty object.\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, null, metadata)\r\n * extractCountryCallingCode('2133734253', null, 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', null, 'RU', null, metadata)\r\n */\r\nexport default function extractCountryCallingCode(\r\n\tnumber,\r\n\tcountry,\r\n\tdefaultCountry,\r\n\tdefaultCallingCode,\r\n\tmetadataJson\r\n) {\r\n\tif (!number) {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tlet isNumberWithIddPrefix\r\n\r\n\t// If this is not an international phone number,\r\n\t// then either extract an \"IDD\" prefix, or extract a\r\n\t// country calling code from a number by autocorrecting it\r\n\t// by prepending a leading `+` in cases when it starts\r\n\t// with the country calling code.\r\n\t// https://wikitravel.org/en/International_dialling_prefix\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\tif (number[0] !== '+') {\r\n\t\t// Convert an \"out-of-country\" dialing phone number\r\n\t\t// to a proper international phone number.\r\n\t\tconst numberWithoutIDD = stripIddPrefix(number, country || defaultCountry, defaultCallingCode, metadataJson)\r\n\t\t// If an IDD prefix was stripped then\r\n\t\t// convert the number to international one\r\n\t\t// for subsequent parsing.\r\n\t\tif (numberWithoutIDD && numberWithoutIDD !== number) {\r\n\t\t\tisNumberWithIddPrefix = true\r\n\t\t\tnumber = '+' + numberWithoutIDD\r\n\t\t} else {\r\n\t\t\t// Check to see if the number starts with the country calling code\r\n\t\t\t// for the default country. If so, we remove the country calling code,\r\n\t\t\t// and do some checks on the validity of the number before and after.\r\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\t\t\tif (country || defaultCountry || defaultCallingCode) {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t} = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\t\t\t\t\tnumber,\r\n\t\t\t\t\tcountry,\r\n\t\t\t\t\tdefaultCountry,\r\n\t\t\t\t\tdefaultCallingCode,\r\n\t\t\t\t\tmetadataJson\r\n\t\t\t\t)\r\n\t\t\t\tif (countryCallingCode) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tcountryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',\r\n\t\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn {\r\n\t\t\t\t// No need to set it to `UNSPECIFIED`. It can be just `undefined`.\r\n\t\t\t\t// countryCallingCodeSource: 'UNSPECIFIED',\r\n\t\t\t\tnumber\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// `number` can only be international at this point.\r\n\r\n\t// Fast abortion: country codes do not begin with a '0'\r\n\tif (number[1] === '0') {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\t// The thing with country phone codes\r\n\t// is that they are orthogonal to each other\r\n\t// i.e. there's no such country phone code A\r\n\t// for which country phone code B exists\r\n\t// where B starts with A.\r\n\t// Therefore, while scanning digits,\r\n\t// if a valid country code is found,\r\n\t// that means that it is the country code.\r\n\t//\r\n\tlet i = 2\r\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\r\n\t\tconst countryCallingCode = number.slice(1, i)\r\n\t\tif (metadata.hasCallingCode(countryCallingCode)) {\r\n\t\t\tmetadata.selectNumberingPlan(countryCallingCode)\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: number.slice(i)\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\r\n\treturn {}\r\n}\r\n\r\n// The possible values for the returned `countryCallingCodeSource` are:\r\n//\r\n// Copy-pasted from:\r\n// https://github.com/google/libphonenumber/blob/master/resources/phonenumber.proto\r\n//\r\n// // The source from which the country_code is derived. This is not set in the\r\n// // general parsing method, but in the method that parses and keeps raw_input.\r\n// // New fields could be added upon request.\r\n// enum CountryCodeSource {\r\n// // Default value returned if this is not set, because the phone number was\r\n// // created using parse, not parseAndKeepRawInput. hasCountryCodeSource will\r\n// // return false if this is the case.\r\n// UNSPECIFIED = 0;\r\n//\r\n// // The country_code is derived based on a phone number with a leading \"+\",\r\n// // e.g. the French number \"+33 1 42 68 53 00\".\r\n// FROM_NUMBER_WITH_PLUS_SIGN = 1;\r\n//\r\n// // The country_code is derived based on a phone number with a leading IDD,\r\n// // e.g. the French number \"011 33 1 42 68 53 00\", as it is dialled from US.\r\n// FROM_NUMBER_WITH_IDD = 5;\r\n//\r\n// // The country_code is derived based on a phone number without a leading\r\n// // \"+\", e.g. the French number \"33 1 42 68 53 00\" when defaultCountry is\r\n// // supplied as France.\r\n// FROM_NUMBER_WITHOUT_PLUS_SIGN = 10;\r\n//\r\n// // The country_code is derived NOT based on the phone number itself, but\r\n// // from the defaultCountry parameter provided in the parsing function by the\r\n// // clients. This happens mostly for numbers written in the national format\r\n// // (without country code). For example, this would be set when parsing the\r\n// // French number \"01 42 68 53 00\", when defaultCountry is supplied as\r\n// // France.\r\n// FROM_DEFAULT_COUNTRY = 20;\r\n// }","import { VALID_PUNCTUATION } from '../constants.js'\r\n\r\n// Removes brackets and replaces dashes with spaces.\r\n//\r\n// E.g. \"(999) 111-22-33\" -> \"999 111 22 33\"\r\n//\r\n// For some reason Google's metadata contains `<intlFormat/>`s with brackets and dashes.\r\n// Meanwhile, there's no single opinion about using punctuation in international phone numbers.\r\n//\r\n// For example, Google's `<intlFormat/>` for USA is `+1 213-373-4253`.\r\n// And here's a quote from WikiPedia's \"North American Numbering Plan\" page:\r\n// https://en.wikipedia.org/wiki/North_American_Numbering_Plan\r\n//\r\n// \"The country calling code for all countries participating in the NANP is 1.\r\n// In international format, an NANP number should be listed as +1 301 555 01 00,\r\n// where 301 is an area code (Maryland).\"\r\n//\r\n// I personally prefer the international format without any punctuation.\r\n// For example, brackets are remnants of the old age, meaning that the\r\n// phone number part in brackets (so called \"area code\") can be omitted\r\n// if dialing within the same \"area\".\r\n// And hyphens were clearly introduced for splitting local numbers into memorizable groups.\r\n// For example, remembering \"5553535\" is difficult but \"555-35-35\" is much simpler.\r\n// Imagine a man taking a bus from home to work and seeing an ad with a phone number.\r\n// He has a couple of seconds to memorize that number until it passes by.\r\n// If it were spaces instead of hyphens the man wouldn't necessarily get it,\r\n// but with hyphens instead of spaces the grouping is more explicit.\r\n// I personally think that hyphens introduce visual clutter,\r\n// so I prefer replacing them with spaces in international numbers.\r\n// In the modern age all output is done on displays where spaces are clearly distinguishable\r\n// so hyphens can be safely replaced with spaces without losing any legibility.\r\n//\r\nexport default function applyInternationalSeparatorStyle(formattedNumber) {\r\n\treturn formattedNumber.replace(new RegExp(`[${VALID_PUNCTUATION}]+`, 'g'), ' ').trim()\r\n}","import applyInternationalSeparatorStyle from './applyInternationalSeparatorStyle.js'\r\n\r\n// This was originally set to $1 but there are some countries for which the\r\n// first group is not used in the national pattern (e.g. Argentina) so the $1\r\n// group does not match correctly. Therefore, we use `\\d`, so that the first\r\n// group actually used in the pattern will be matched.\r\nexport const FIRST_GROUP_PATTERN = /(\\$\\d)/\r\n\r\nexport default function formatNationalNumberUsingFormat(\r\n\tnumber,\r\n\tformat,\r\n\t{\r\n\t\tuseInternationalFormat,\r\n\t\twithNationalPrefix,\r\n\t\tcarrierCode,\r\n\t\tmetadata\r\n\t}\r\n) {\r\n\tconst formattedNumber = number.replace(\r\n\t\tnew RegExp(format.pattern()),\r\n\t\tuseInternationalFormat\r\n\t\t\t? format.internationalFormat()\r\n\t\t\t: (\r\n\t\t\t\t// This library doesn't use `domestic_carrier_code_formatting_rule`,\r\n\t\t\t\t// because that one is only used when formatting phone numbers\r\n\t\t\t\t// for dialing from a mobile phone, and this is not a dialing library.\r\n\t\t\t\t// carrierCode && format.domesticCarrierCodeFormattingRule()\r\n\t\t\t\t// \t// First, replace the $CC in the formatting rule with the desired carrier code.\r\n\t\t\t\t// \t// Then, replace the $FG in the formatting rule with the first group\r\n\t\t\t\t// \t// and the carrier code combined in the appropriate way.\r\n\t\t\t\t// \t? format.format().replace(FIRST_GROUP_PATTERN, format.domesticCarrierCodeFormattingRule().replace('$CC', carrierCode))\r\n\t\t\t\t// \t: (\r\n\t\t\t\t// \t\twithNationalPrefix && format.nationalPrefixFormattingRule()\r\n\t\t\t\t// \t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\r\n\t\t\t\t// \t\t\t: format.format()\r\n\t\t\t\t// \t)\r\n\t\t\t\twithNationalPrefix && format.nationalPrefixFormattingRule()\r\n\t\t\t\t\t? format.format().replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule())\r\n\t\t\t\t\t: format.format()\r\n\t\t\t)\r\n\t)\r\n\tif (useInternationalFormat) {\r\n\t\treturn applyInternationalSeparatorStyle(formattedNumber)\r\n\t}\r\n\treturn formattedNumber\r\n}","import Metadata from '../metadata.js'\r\n\r\n/**\r\n * Pattern that makes it easy to distinguish whether a region has a single\r\n * international dialing prefix or not. If a region has a single international\r\n * prefix (e.g. 011 in USA), it will be represented as a string that contains\r\n * a sequence of ASCII digits, and possibly a tilde, which signals waiting for\r\n * the tone. If there are multiple available international prefixes in a\r\n * region, they will be represented as a regex string that always contains one\r\n * or more characters that are not ASCII digits or a tilde.\r\n */\r\nconst SINGLE_IDD_PREFIX_REG_EXP = /^[\\d]+(?:[~\\u2053\\u223C\\uFF5E][\\d]+)?$/\r\n\r\n// If the `country` supports IDD calling, it returns a preferred IDD prefix.\r\n// If the `country` doesn't support IDD calling, it returns `undefined`.\r\nexport default function getIddPrefix(country, callingCode, metadata) {\r\n\tconst countryMetadata = new Metadata(metadata)\r\n\tcountryMetadata.selectNumberingPlan(country || callingCode)\r\n\tif (countryMetadata.defaultIDDPrefix()) {\r\n\t\treturn countryMetadata.defaultIDDPrefix()\r\n\t}\r\n\tif (SINGLE_IDD_PREFIX_REG_EXP.test(countryMetadata.IDDPrefix())) {\r\n\t\treturn countryMetadata.IDDPrefix()\r\n\t}\r\n}\r\n","import { VALID_DIGITS } from '../../constants.js'\r\n\r\n// The RFC 3966 format for extensions.\r\nconst RFC3966_EXTN_PREFIX = ';ext='\r\n\r\n/**\r\n * Helper method for constructing regular expressions for parsing. Creates\r\n * an expression that captures up to max_length digits.\r\n * @return {string} RegEx pattern to capture extension digits.\r\n */\r\nconst getExtensionDigitsPattern = (maxLength) => `([${VALID_DIGITS}]{1,${maxLength}})`\r\n\r\n/**\r\n * Helper initialiser method to create the regular-expression pattern to match\r\n * extensions.\r\n * Copy-pasted from Google's `libphonenumber`:\r\n * https://github.com/google/libphonenumber/blob/55b2646ec9393f4d3d6661b9c82ef9e258e8b829/javascript/i18n/phonenumbers/phonenumberutil.js#L759-L766\r\n * @return {string} RegEx pattern to capture extensions.\r\n */\r\nexport default function createExtensionPattern(purpose) {\r\n\t// We cap the maximum length of an extension based on the ambiguity of the way\r\n\t// the extension is prefixed. As per ITU, the officially allowed length for\r\n\t// extensions is actually 40, but we don't support this since we haven't seen real\r\n\t// examples and this introduces many false interpretations as the extension labels\r\n\t// are not standardized.\r\n\t/** @type {string} */\r\n\tvar extLimitAfterExplicitLabel = '20';\r\n\t/** @type {string} */\r\n\tvar extLimitAfterLikelyLabel = '15';\r\n\t/** @type {string} */\r\n\tvar extLimitAfterAmbiguousChar = '9';\r\n\t/** @type {string} */\r\n\tvar extLimitWhenNotSure = '6';\r\n\r\n\t/** @type {string} */\r\n\tvar possibleSeparatorsBetweenNumberAndExtLabel = \"[ \\u00A0\\\\t,]*\";\r\n\t// Optional full stop (.) or colon, followed by zero or more spaces/tabs/commas.\r\n\t/** @type {string} */\r\n\tvar possibleCharsAfterExtLabel = \"[:\\\\.\\uFF0E]?[ \\u00A0\\\\t,-]*\";\r\n\t/** @type {string} */\r\n\tvar optionalExtnSuffix = \"#?\";\r\n\r\n\t// Here the extension is called out in more explicit way, i.e mentioning it obvious\r\n\t// patterns like \"ext.\".\r\n\t/** @type {string} */\r\n\tvar explicitExtLabels =\r\n\t \"(?:e?xt(?:ensi(?:o\\u0301?|\\u00F3))?n?|\\uFF45?\\uFF58\\uFF54\\uFF4E?|\\u0434\\u043E\\u0431|anexo)\";\r\n\t// One-character symbols that can be used to indicate an extension, and less\r\n\t// commonly used or more ambiguous extension labels.\r\n\t/** @type {string} */\r\n\tvar ambiguousExtLabels = \"(?:[x\\uFF58#\\uFF03~\\uFF5E]|int|\\uFF49\\uFF4E\\uFF54)\";\r\n\t// When extension is not separated clearly.\r\n\t/** @type {string} */\r\n\tvar ambiguousSeparator = \"[- ]+\";\r\n\t// This is the same as possibleSeparatorsBetweenNumberAndExtLabel, but not matching\r\n\t// comma as extension label may have it.\r\n\t/** @type {string} */\r\n\tvar possibleSeparatorsNumberExtLabelNoComma = \"[ \\u00A0\\\\t]*\";\r\n\t// \",,\" is commonly used for auto dialling the extension when connected. First\r\n\t// comma is matched through possibleSeparatorsBetweenNumberAndExtLabel, so we do\r\n\t// not repeat it here. Semi-colon works in Iphone and Android also to pop up a\r\n\t// button with the extension number following.\r\n\t/** @type {string} */\r\n\tvar autoDiallingAndExtLabelsFound = \"(?:,{2}|;)\";\r\n\r\n\t/** @type {string} */\r\n\tvar rfcExtn = RFC3966_EXTN_PREFIX\r\n\t + getExtensionDigitsPattern(extLimitAfterExplicitLabel);\r\n\t/** @type {string} */\r\n\tvar explicitExtn = possibleSeparatorsBetweenNumberAndExtLabel + explicitExtLabels\r\n\t + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterExplicitLabel)\r\n\t + optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar ambiguousExtn = possibleSeparatorsBetweenNumberAndExtLabel + ambiguousExtLabels\r\n\t + possibleCharsAfterExtLabel\r\n\t+ getExtensionDigitsPattern(extLimitAfterAmbiguousChar)\r\n\t+ optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar americanStyleExtnWithSuffix = ambiguousSeparator\r\n\t+ getExtensionDigitsPattern(extLimitWhenNotSure) + \"#\";\r\n\r\n\t/** @type {string} */\r\n\tvar autoDiallingExtn = possibleSeparatorsNumberExtLabelNoComma\r\n\t + autoDiallingAndExtLabelsFound + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterLikelyLabel)\r\n\t+ optionalExtnSuffix;\r\n\t/** @type {string} */\r\n\tvar onlyCommasExtn = possibleSeparatorsNumberExtLabelNoComma\r\n\t + \"(?:,)+\" + possibleCharsAfterExtLabel\r\n\t + getExtensionDigitsPattern(extLimitAfterAmbiguousChar)\r\n\t + optionalExtnSuffix;\r\n\r\n\t// The first regular expression covers RFC 3966 format, where the extension is added\r\n\t// using \";ext=\". The second more generic where extension is mentioned with explicit\r\n\t// labels like \"ext:\". In both the above cases we allow more numbers in extension than\r\n\t// any other extension labels. The third one captures when single character extension\r\n\t// labels or less commonly used labels are used. In such cases we capture fewer\r\n\t// extension digits in order to reduce the chance of falsely interpreting two\r\n\t// numbers beside each other as a number + extension. The fourth one covers the\r\n\t// special case of American numbers where the extension is written with a hash\r\n\t// at the end, such as \"- 503#\". The fifth one is exclusively for extension\r\n\t// autodialling formats which are used when dialling and in this case we accept longer\r\n\t// extensions. The last one is more liberal on the number of commas that acts as\r\n\t// extension labels, so we have a strict cap on the number of digits in such extensions.\r\n\treturn rfcExtn + \"|\"\r\n\t + explicitExtn + \"|\"\r\n\t + ambiguousExtn + \"|\"\r\n\t + americanStyleExtnWithSuffix + \"|\"\r\n\t + autoDiallingExtn + \"|\"\r\n\t + onlyCommasExtn;\r\n}","import {\r\n\tMIN_LENGTH_FOR_NSN,\r\n\tVALID_DIGITS,\r\n\tVALID_PUNCTUATION,\r\n\tPLUS_CHARS\r\n} from '../constants.js'\r\n\r\nimport createExtensionPattern from './extension/createExtensionPattern.js'\r\n\r\n// Regular expression of viable phone numbers. This is location independent.\r\n// Checks we have at least three leading digits, and only valid punctuation,\r\n// alpha characters and digits in the phone number. Does not include extension\r\n// data. The symbol 'x' is allowed here as valid punctuation since it is often\r\n// used as a placeholder for carrier codes, for example in Brazilian phone\r\n// numbers. We also allow multiple '+' characters at the start.\r\n//\r\n// Corresponds to the following:\r\n// [digits]{minLengthNsn}|\r\n// plus_sign*\r\n// (([punctuation]|[star])*[digits]){3,}([punctuation]|[star]|[digits]|[alpha])*\r\n//\r\n// The first reg-ex is to allow short numbers (two digits long) to be parsed if\r\n// they are entered as \"15\" etc, but only if there is no punctuation in them.\r\n// The second expression restricts the number of digits to three or more, but\r\n// then allows them to be in international form, and to have alpha-characters\r\n// and punctuation. We split up the two reg-exes here and combine them when\r\n// creating the reg-ex VALID_PHONE_NUMBER_PATTERN itself so we can prefix it\r\n// with ^ and append $ to each branch.\r\n//\r\n// \"Note VALID_PUNCTUATION starts with a -,\r\n// so must be the first in the range\" (c) Google devs.\r\n// (wtf did they mean by saying that; probably nothing)\r\n//\r\nconst MIN_LENGTH_PHONE_NUMBER_PATTERN = '[' + VALID_DIGITS + ']{' + MIN_LENGTH_FOR_NSN + '}'\r\n//\r\n// And this is the second reg-exp:\r\n// (see MIN_LENGTH_PHONE_NUMBER_PATTERN for a full description of this reg-exp)\r\n//\r\nexport const VALID_PHONE_NUMBER =\r\n\t'[' + PLUS_CHARS + ']{0,1}' +\r\n\t'(?:' +\r\n\t\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t\t'[' + VALID_DIGITS + ']' +\r\n\t'){3,}' +\r\n\t'[' +\r\n\t\tVALID_PUNCTUATION +\r\n\t\tVALID_DIGITS +\r\n\t']*'\r\n\r\n// This regular expression isn't present in Google's `libphonenumber`\r\n// and is only used to determine whether the phone number being input\r\n// is too short for it to even consider it a \"valid\" number.\r\n// This is just a way to differentiate between a really invalid phone\r\n// number like \"abcde\" and a valid phone number that a user has just\r\n// started inputting, like \"+1\" or \"1\": both these cases would be\r\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\r\n// library can provide a more detailed error message — whether it's\r\n// really \"not a number\", or is it just a start of a valid phone number.\r\nconst VALID_PHONE_NUMBER_START_REG_EXP = new RegExp(\r\n\t'^' +\r\n\t'[' + PLUS_CHARS + ']{0,1}' +\r\n\t'(?:' +\r\n\t\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t\t'[' + VALID_DIGITS + ']' +\r\n\t'){1,2}' +\r\n\t'$'\r\n, 'i')\r\n\r\nexport const VALID_PHONE_NUMBER_WITH_EXTENSION =\r\n\tVALID_PHONE_NUMBER +\r\n\t// Phone number extensions\r\n\t'(?:' + createExtensionPattern() + ')?'\r\n\r\n// The combined regular expression for valid phone numbers:\r\n//\r\nconst VALID_PHONE_NUMBER_PATTERN = new RegExp(\r\n\t// Either a short two-digit-only phone number\r\n\t'^' +\r\n\t\tMIN_LENGTH_PHONE_NUMBER_PATTERN +\r\n\t'$' +\r\n\t'|' +\r\n\t// Or a longer fully parsed phone number (min 3 characters)\r\n\t'^' +\r\n\t\tVALID_PHONE_NUMBER_WITH_EXTENSION +\r\n\t'$'\r\n, 'i')\r\n\r\n// Checks to see if the string of characters could possibly be a phone number at\r\n// all. At the moment, checks to see that the string begins with at least 2\r\n// digits, ignoring any punctuation commonly found in phone numbers. This method\r\n// does not require the number to be normalized in advance - but does assume\r\n// that leading non-number symbols have been removed, such as by the method\r\n// `extract_possible_number`.\r\n//\r\nexport default function isViablePhoneNumber(number) {\r\n\treturn number.length >= MIN_LENGTH_FOR_NSN &&\r\n\t\tVALID_PHONE_NUMBER_PATTERN.test(number)\r\n}\r\n\r\n// This is just a way to differentiate between a really invalid phone\r\n// number like \"abcde\" and a valid phone number that a user has just\r\n// started inputting, like \"+1\" or \"1\": both these cases would be\r\n// considered `NOT_A_NUMBER` by Google's `libphonenumber`, but this\r\n// library can provide a more detailed error message — whether it's\r\n// really \"not a number\", or is it just a start of a valid phone number.\r\nexport function isViablePhoneNumberStart(number) {\r\n\treturn VALID_PHONE_NUMBER_START_REG_EXP.test(number)\r\n}","import isViablePhoneNumber from './isViablePhoneNumber.js'\r\n\r\n// https://www.ietf.org/rfc/rfc3966.txt\r\n\r\n/**\r\n * @param {string} text - Phone URI (RFC 3966).\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\r\nexport function parseRFC3966(text) {\r\n\tlet number\r\n\tlet ext\r\n\r\n\t// Replace \"tel:\" with \"tel=\" for parsing convenience.\r\n\ttext = text.replace(/^tel:/, 'tel=')\r\n\r\n\tfor (const part of text.split(';')) {\r\n\t\tconst [name, value] = part.split('=')\r\n\t\tswitch (name) {\r\n\t\t\tcase 'tel':\r\n\t\t\t\tnumber = value\r\n\t\t\t\tbreak\r\n\t\t\tcase 'ext':\r\n\t\t\t\text = value\r\n\t\t\t\tbreak\r\n\t\t\tcase 'phone-context':\r\n\t\t\t\t// Only \"country contexts\" are supported.\r\n\t\t\t\t// \"Domain contexts\" are ignored.\r\n\t\t\t\tif (value[0] === '+') {\r\n\t\t\t\t\tnumber = value + number\r\n\t\t\t\t}\r\n\t\t\t\tbreak\r\n\t\t}\r\n\t}\r\n\r\n\t// If the phone number is not viable, then abort.\r\n\tif (!isViablePhoneNumber(number)) {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst result = { number }\r\n\tif (ext) {\r\n\t\tresult.ext = ext\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * @param {object} - `{ ?number, ?extension }`.\r\n * @return {string} Phone URI (RFC 3966).\r\n */\r\nexport function formatRFC3966({ number, ext }) {\r\n\tif (!number) {\r\n\t\treturn ''\r\n\t}\r\n\tif (number[0] !== '+') {\r\n\t\tthrow new Error(`\"formatRFC3966()\" expects \"number\" to be in E.164 format.`)\r\n\t}\r\n\treturn `tel:${number}${ext ? ';ext=' + ext : ''}`\r\n}","// This is a port of Google Android `libphonenumber`'s\r\n// `phonenumberutil.js` of December 31th, 2018.\r\n//\r\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\r\n\r\nimport matchesEntirely from './helpers/matchesEntirely.js'\r\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js'\r\nimport Metadata, { getCountryCallingCode } from './metadata.js'\r\nimport getIddPrefix from './helpers/getIddPrefix.js'\r\nimport { formatRFC3966 } from './helpers/RFC3966.js'\r\n\r\nconst DEFAULT_OPTIONS = {\r\n\tformatExtension: (formattedNumber, extension, metadata) => `${formattedNumber}${metadata.ext()}${extension}`\r\n}\r\n\r\n/**\r\n * Formats a phone number.\r\n *\r\n * format(phoneNumberInstance, 'INTERNATIONAL', { ..., v2: true }, metadata)\r\n * format(phoneNumberInstance, 'NATIONAL', { ..., v2: true }, metadata)\r\n *\r\n * format({ phone: '8005553535', country: 'RU' }, 'INTERNATIONAL', { ... }, metadata)\r\n * format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', undefined, metadata)\r\n *\r\n * @param {object|PhoneNumber} input — If `options.v2: true` flag is passed, the `input` should be a `PhoneNumber` instance. Otherwise, it should be an object of shape `{ phone: '...', country: '...' }`.\r\n * @param {string} format\r\n * @param {object} [options]\r\n * @param {object} metadataJson\r\n * @return {string}\r\n */\r\nexport default function formatNumber(input, format, options, metadataJson) {\r\n\t// Apply default options.\r\n\tif (options) {\r\n\t\t// Using ES6 \"rest spread\" syntax here didn't work with `babel`/`istanbul`\r\n\t\t// for some weird reason: this line of code would cause the code coverage\r\n\t\t// to show as not 100%. That's because `babel`/`istanbul`, for some weird reason,\r\n\t\t// apparently doesn't know how to properly exclude Babel polyfills from code coverage.\r\n\t\t//\r\n\t\t// options = { ...DEFAULT_OPTIONS, ...options }\r\n\t\t//\r\n\t\toptions = merge({}, DEFAULT_OPTIONS, options)\r\n\t} else {\r\n\t\toptions = DEFAULT_OPTIONS\r\n\t}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\t// Normally, the `input` object is supposed to be a `PhoneNumber` class instance.\r\n\t// Also, according to the `PhoneNumber` class source code, `country` can't be \"001\".\r\n\t// It means that normally `input.country` or `input.countryCallingCode` is supposed\r\n\t// to be present because either of the two is always required to exist in a `PhoneNumber` instance.\r\n\t// This means that realistically, it's gonna step into either the first `if`\r\n\t// or the following `else if`, and normally it won't even reach the legacy-compatibility\r\n\t// `else return input.phone || ''` part.\r\n\t// So normally, it won't ever return an empty string here.\r\n\tif (input.country && input.country !== '001') {\r\n\t\t// Validate `input.country`.\r\n\t\tif (!metadata.hasCountry(input.country)) {\r\n\t\t\tthrow new Error(`Unknown country: ${input.country}`)\r\n\t\t}\r\n\t\tmetadata.selectNumberingPlan(input.country)\r\n\t}\r\n\telse if (input.countryCallingCode) {\r\n\t\tmetadata.selectNumberingPlan(input.countryCallingCode)\r\n\t}\r\n\telse return input.phone || ''\r\n\r\n\tconst countryCallingCode = metadata.countryCallingCode()\r\n\r\n\tconst nationalNumber = options.v2 ? input.nationalNumber : input.phone\r\n\r\n\t// This variable should have been declared inside `case`s\r\n\t// but Babel has a bug and it says \"duplicate variable declaration\".\r\n\tlet number\r\n\r\n\tswitch (format) {\r\n\t\tcase 'NATIONAL':\r\n\t\t\t// Normally, the `input` object is supposed to be a `PhoneNumber` class instance,\r\n\t\t\t// and a `PhoneNumber` class instance is always required to have a `nationalNumber`.\r\n\t\t\t// This means that the `if (!nationalNumber)` below is just for legacy-compatibility\r\n\t\t\t// and it normally can't really happen, so normally it won't ever return an empty string here.\r\n\t\t\tif (!nationalNumber) {\r\n\t\t\t\treturn ''\r\n\t\t\t}\r\n\t\t\tnumber = formatNationalNumber(nationalNumber, input.carrierCode, 'NATIONAL', metadata, options)\r\n\t\t\treturn addExtension(number, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tcase 'INTERNATIONAL':\r\n\t\t\t// Legacy argument support.\r\n\t\t\t// (`{ country: ..., phone: '' }`)\r\n\t\t\tif (!nationalNumber) {\r\n\t\t\t\treturn `+${countryCallingCode}`\r\n\t\t\t}\r\n\t\t\tnumber = formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata, options)\r\n\t\t\tnumber = `+${countryCallingCode} ${number}`\r\n\t\t\treturn addExtension(number, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tcase 'E.164':\r\n\t\t\t// `E.164` doesn't define \"phone number extensions\".\r\n\t\t\treturn `+${countryCallingCode}${nationalNumber}`\r\n\r\n\t\tcase 'RFC3966':\r\n\t\t\treturn formatRFC3966({\r\n\t\t\t\tnumber: `+${countryCallingCode}${nationalNumber}`,\r\n\t\t\t\text: input.ext\r\n\t\t\t})\r\n\r\n\t\t// For reference, here's Google's IDD formatter:\r\n\t\t// https://github.com/google/libphonenumber/blob/32719cf74e68796788d1ca45abc85dcdc63ba5b9/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L1546\r\n\t\t// Not saying that this IDD formatter replicates it 1:1, but it seems to work.\r\n\t\t// Who would even need to format phone numbers in IDD format anyway?\r\n\t\tcase 'IDD':\r\n\t\t\t// If the required `fromCountry` parameter is not passed, it will return `undefined`.\r\n\t\t\tif (!options.fromCountry) {\r\n\t\t\t\treturn\r\n\t\t\t\t// throw new Error('`fromCountry` option not passed for IDD-prefixed formatting.')\r\n\t\t\t}\r\n\t\t\tconst formattedNumber = formatIDD(\r\n\t\t\t\tnationalNumber,\r\n\t\t\t\tinput.carrierCode,\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\toptions.fromCountry,\r\n\t\t\t\tmetadata\r\n\t\t\t)\r\n\t\t\t// If the country of the phone number doesn't support IDD calling, it will return `undefined`.\r\n\t\t\tif (!formattedNumber) {\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t\treturn addExtension(formattedNumber, input.ext, metadata, options.formatExtension)\r\n\r\n\t\tdefault:\r\n\t\t\tthrow new Error(`Unknown \"format\" argument passed to \"formatNumber()\": \"${format}\"`)\r\n\t}\r\n}\r\n\r\nfunction formatNationalNumber(number, carrierCode, formatAs, metadata, options) {\r\n\tconst format = chooseFormatForNumber(metadata.formats(), number)\r\n\tif (!format) {\r\n\t\treturn number\r\n\t}\r\n\treturn formatNationalNumberUsingFormat(\r\n\t\tnumber,\r\n\t\tformat,\r\n\t\t{\r\n\t\t\tuseInternationalFormat: formatAs === 'INTERNATIONAL',\r\n\t\t\twithNationalPrefix: format.nationalPrefixIsOptionalWhenFormattingInNationalFormat() && (options && options.nationalPrefix === false) ? false : true,\r\n\t\t\tcarrierCode,\r\n\t\t\tmetadata\r\n\t\t}\r\n\t)\r\n}\r\n\r\nexport function chooseFormatForNumber(availableFormats, nationalNumber) {\r\n\t// Using a `for ... of` loop here didn't work with `babel`/`istanbul`:\r\n\t// for some weird reason, it showed code coverage less than 100%.\r\n\t// That's because `babel`/`istanbul`, for some weird reason,\r\n\t// apparently doesn't know how to properly exclude Babel polyfills from code coverage.\r\n\t//\r\n\t// for (const format of availableFormats) { ... }\r\n\t//\r\n\treturn pickFirstMatchingElement(availableFormats, (format) => {\r\n\t\t// Validate leading digits.\r\n\t\t// The test case for \"else path\" could be found by searching for\r\n\t\t// \"format.leadingDigitsPatterns().length === 0\".\r\n\t\tif (format.leadingDigitsPatterns().length > 0) {\r\n\t\t\t// The last leading_digits_pattern is used here, as it is the most detailed\r\n\t\t\tconst lastLeadingDigitsPattern = format.leadingDigitsPatterns()[format.leadingDigitsPatterns().length - 1]\r\n\t\t\t// If leading digits don't match then move on to the next phone number format\r\n\t\t\tif (nationalNumber.search(lastLeadingDigitsPattern) !== 0) {\r\n\t\t\t\treturn false\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Check that the national number matches the phone number format regular expression\r\n\t\treturn matchesEntirely(nationalNumber, format.pattern())\r\n\t})\r\n}\r\n\r\nfunction addExtension(formattedNumber, ext, metadata, formatExtension) {\r\n\treturn ext ? formatExtension(formattedNumber, ext, metadata) : formattedNumber\r\n}\r\n\r\nfunction formatIDD(\r\n\tnationalNumber,\r\n\tcarrierCode,\r\n\tcountryCallingCode,\r\n\tfromCountry,\r\n\tmetadata\r\n) {\r\n\tconst fromCountryCallingCode = getCountryCallingCode(fromCountry, metadata.metadata)\r\n\t// When calling within the same country calling code.\r\n\tif (fromCountryCallingCode === countryCallingCode) {\r\n\t\tconst formattedNumber = formatNationalNumber(nationalNumber, carrierCode, 'NATIONAL', metadata)\r\n\t\t// For NANPA regions, return the national format for these regions\r\n\t\t// but prefix it with the country calling code.\r\n\t\tif (countryCallingCode === '1') {\r\n\t\t\treturn countryCallingCode + ' ' + formattedNumber\r\n\t\t}\r\n\t\t// If regions share a country calling code, the country calling code need\r\n\t\t// not be dialled. This also applies when dialling within a region, so this\r\n\t\t// if clause covers both these cases. Technically this is the case for\r\n\t\t// dialling from La Reunion to other overseas departments of France (French\r\n\t\t// Guiana, Martinique, Guadeloupe), but not vice versa - so we don't cover\r\n\t\t// this edge case for now and for those cases return the version including\r\n\t\t// country calling code. Details here:\r\n\t\t// http://www.petitfute.com/voyage/225-info-pratiques-reunion\r\n\t\t//\r\n\t\treturn formattedNumber\r\n\t}\r\n\tconst iddPrefix = getIddPrefix(fromCountry, undefined, metadata.metadata)\r\n\tif (iddPrefix) {\r\n\t\treturn `${iddPrefix} ${countryCallingCode} ${formatNationalNumber(nationalNumber, null, 'INTERNATIONAL', metadata)}`\r\n\t}\r\n}\r\n\r\nfunction merge(...objects) {\r\n\tlet i = 1\r\n\twhile (i < objects.length) {\r\n\t\tif (objects[i]) {\r\n\t\t\tfor (const key in objects[i]) {\r\n\t\t\t\tobjects[0][key] = objects[i][key]\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\treturn objects[0]\r\n}\r\n\r\nfunction pickFirstMatchingElement(elements, testFunction) {\r\n\tlet i = 0\r\n\twhile (i < elements.length) {\r\n\t\tif (testFunction(elements[i])) {\r\n\t\t\treturn elements[i]\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}","import Metadata, { validateMetadata } from './metadata.js'\r\nimport isPossibleNumber from './isPossible.js'\r\nimport isValidNumber from './isValid.js'\r\nimport getNumberType from './helpers/getNumberType.js'\r\nimport getCountryAndCallingCodeFromOneOfThem from './helpers/getCountryAndCallingCodeFromOneOfThem.js'\r\nimport getPossibleCountriesForNumber from './helpers/getPossibleCountriesForNumber.js'\r\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js'\r\nimport isObject from './helpers/isObject.js'\r\nimport formatNumber from './format.js'\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\nexport default class PhoneNumber {\r\n\t/**\r\n\t * @param {string} countryOrCountryCallingCode\r\n\t * @param {string} nationalNumber\r\n\t * @param {object} metadata — Metadata JSON\r\n\t * @return {PhoneNumber}\r\n\t */\r\n\tconstructor(countryOrCountryCallingCode, nationalNumber, metadata) {\r\n\t\t// Validate `countryOrCountryCallingCode` argument.\r\n\t\tif (!countryOrCountryCallingCode) {\r\n\t\t\tthrow new TypeError('First argument is required')\r\n\t\t}\r\n\t\tif (typeof countryOrCountryCallingCode !== 'string') {\r\n\t\t\tthrow new TypeError('First argument must be a string')\r\n\t\t}\r\n\r\n\t\t// In case of public API use: `constructor(number, metadata)`.\r\n\t\t// Transform the arguments from `constructor(number, metadata)` to\r\n\t\t// `constructor(countryOrCountryCallingCode, nationalNumber, metadata)`.\r\n\t\tif (countryOrCountryCallingCode[0] === '+' && !nationalNumber) {\r\n\t\t\tthrow new TypeError('`metadata` argument not passed')\r\n\t\t}\r\n\t\tif (isObject(nationalNumber) && isObject(nationalNumber.countries)) {\r\n\t\t\tmetadata = nationalNumber\r\n\t\t\tconst e164Number = countryOrCountryCallingCode\r\n\t\t\tif (!E164_NUMBER_REGEXP.test(e164Number)) {\r\n\t\t\t\tthrow new Error('Invalid `number` argument passed: must consist of a \"+\" followed by digits')\r\n\t\t\t}\r\n\t\t\tconst { countryCallingCode, number } = extractCountryCallingCode(e164Number, undefined, undefined, undefined, metadata)\r\n\t\t\tnationalNumber = number\r\n\t\t\tcountryOrCountryCallingCode = countryCallingCode\r\n\t\t\tif (!nationalNumber) {\r\n\t\t\t\tthrow new Error('Invalid `number` argument passed: too short')\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Validate `nationalNumber` argument.\r\n\t\tif (!nationalNumber) {\r\n\t\t\tthrow new TypeError('`nationalNumber` argument is required')\r\n\t\t}\r\n\t\tif (typeof nationalNumber !== 'string') {\r\n\t\t\tthrow new TypeError('`nationalNumber` argument must be a string')\r\n\t\t}\r\n\r\n\t\t// Validate `metadata` argument.\r\n\t\tvalidateMetadata(metadata)\r\n\r\n\t\t// Initialize properties.\r\n\t\tconst { country, callingCode: countryCallingCode } = getCountryAndCallingCodeFromOneOfThem(\r\n\t\t\tcountryOrCountryCallingCode,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\tthis.country = country\r\n\t\tthis.countryCallingCode = countryCallingCode\r\n\t\tthis.nationalNumber = nationalNumber\r\n\t\tthis.number = '+' + this.countryCallingCode + this.nationalNumber\r\n\t\t// Exclude `metadata` property output from `PhoneNumber.toString()`\r\n\t\t// so that it doesn't clutter the console output of Node.js.\r\n\t\t// Previously, when Node.js did `console.log(new PhoneNumber(...))`,\r\n\t\t// it would output the whole internal structure of the `metadata` object.\r\n\t\tthis.getMetadata = () => metadata\r\n\t}\r\n\r\n\tsetExt(ext) {\r\n\t\tthis.ext = ext\r\n\t}\r\n\r\n\tgetPossibleCountries() {\r\n\t\tif (this.country) {\r\n\t\t\treturn [this.country]\r\n\t\t}\r\n\t\treturn getPossibleCountriesForNumber(\r\n\t\t\tthis.countryCallingCode,\r\n\t\t\tthis.nationalNumber,\r\n\t\t\tthis.getMetadata()\r\n\t\t)\r\n\t}\r\n\r\n\tisPossible() {\r\n\t\treturn isPossibleNumber(this, { v2: true }, this.getMetadata())\r\n\t}\r\n\r\n\tisValid() {\r\n\t\treturn isValidNumber(this, { v2: true }, this.getMetadata())\r\n\t}\r\n\r\n\tisNonGeographic() {\r\n\t\tconst metadata = new Metadata(this.getMetadata())\r\n\t\treturn metadata.isNonGeographicCallingCode(this.countryCallingCode)\r\n\t}\r\n\r\n\tisEqual(phoneNumber) {\r\n\t\treturn this.number === phoneNumber.number && this.ext === phoneNumber.ext\r\n\t}\r\n\r\n\t// `validateLength()` method was originally meant to be an equivalent for `validatePhoneNumberLength()`.\r\n\t//\r\n\t// Later, it became apparent that it's not really a true equivalent.\r\n\t// The reason is that a `PhoneNumber` instance is not created\r\n\t// when the phone number string is too short for it to be considered a valid phone number:\r\n\t// * When there must be at least 2 national (significant) number digits: `\"1\"`.\r\n // * When the country calling code part of an international number is incomplete: `\"+12\"`.\r\n\t//\r\n\t// So leaving this `validateLength()` method here would suggest a hidden anti-pattern\r\n\t// of using it instead of `validatePhoneNumberLength()` while ignoring\r\n\t// the \"too short to be even possible\" case from phone number length validation.\r\n\t// And ignoring that case wouldn't make any sense in a real-world application\r\n\t// because it would still be a valid case that should be handled.\r\n\t//\r\n\t// Because of that, this method was eventually commented out in order to not introduce\r\n\t// that kind of an anti-pattern.\r\n\t//\r\n\t// validateLength() {\r\n\t// \tconst result = checkNumberLength(\r\n\t// \t\tthis.nationalNumber,\r\n\t// \t\tundefined,\r\n\t// \t\tthis.getMetadata()\r\n\t// \t)\r\n\t// \tif (result !== 'IS_POSSIBLE') {\r\n\t// \t\treturn result\r\n\t// \t}\r\n\t// }\r\n\r\n\tgetType() {\r\n\t\treturn getNumberType(this, { v2: true }, this.getMetadata())\r\n\t}\r\n\r\n\tformat(format, options) {\r\n\t\treturn formatNumber(\r\n\t\t\tthis,\r\n\t\t\tformat,\r\n\t\t\toptions ? { ...options, v2: true } : { v2: true },\r\n\t\t\tthis.getMetadata()\r\n\t\t)\r\n\t}\r\n\r\n\tformatNational(options) {\r\n\t\treturn this.format('NATIONAL', options)\r\n\t}\r\n\r\n\tformatInternational(options) {\r\n\t\treturn this.format('INTERNATIONAL', options)\r\n\t}\r\n\r\n\tgetURI(options) {\r\n\t\treturn this.format('RFC3966', options)\r\n\t}\r\n}\r\n\r\nconst E164_NUMBER_REGEXP = /^\\+\\d+$/","// https://stackoverflow.com/a/46971044/970769\r\n// \"Breaking changes in Typescript 2.1\"\r\n// \"Extending built-ins like Error, Array, and Map may no longer work.\"\r\n// \"As a recommendation, you can manually adjust the prototype immediately after any super(...) calls.\"\r\n// https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\r\nexport default class ParseError extends Error {\r\n constructor(code) {\r\n super(code)\r\n // Set the prototype explicitly.\r\n // Any subclass of FooError will have to manually set the prototype as well.\r\n Object.setPrototypeOf(this, ParseError.prototype)\r\n this.name = this.constructor.name\r\n }\r\n}","import createExtensionPattern from './createExtensionPattern.js'\r\n\r\n// Regexp of all known extension prefixes used by different regions followed by\r\n// 1 or more valid digits, for use when parsing.\r\nconst EXTN_PATTERN = new RegExp('(?:' + createExtensionPattern() + ')$', 'i')\r\n\r\n// Strips any extension (as in, the part of the number dialled after the call is\r\n// connected, usually indicated with extn, ext, x or similar) from the end of\r\n// the number, and returns it.\r\nexport default function extractExtension(number) {\r\n\tconst start = number.search(EXTN_PATTERN)\r\n\tif (start < 0) {\r\n\t\treturn {}\r\n\t}\r\n\t// If we find a potential extension, and the number preceding this is a viable\r\n\t// number, we assume it is an extension.\r\n\tconst numberWithoutExtension = number.slice(0, start)\r\n\tconst matches = number.match(EXTN_PATTERN)\r\n\tlet i = 1\r\n\twhile (i < matches.length) {\r\n\t\tif (matches[i]) {\r\n\t\t\treturn {\r\n\t\t\t\tnumber: numberWithoutExtension,\r\n\t\t\t\text: matches[i]\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n}","// These mappings map a character (key) to a specific digit that should\r\n// replace it for normalization purposes. Non-European digits that\r\n// may be used in phone numbers are mapped to a European equivalent.\r\n//\r\n// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n//\r\nexport const DIGITS = {\r\n\t'0': '0',\r\n\t'1': '1',\r\n\t'2': '2',\r\n\t'3': '3',\r\n\t'4': '4',\r\n\t'5': '5',\r\n\t'6': '6',\r\n\t'7': '7',\r\n\t'8': '8',\r\n\t'9': '9',\r\n\t'\\uFF10': '0', // Fullwidth digit 0\r\n\t'\\uFF11': '1', // Fullwidth digit 1\r\n\t'\\uFF12': '2', // Fullwidth digit 2\r\n\t'\\uFF13': '3', // Fullwidth digit 3\r\n\t'\\uFF14': '4', // Fullwidth digit 4\r\n\t'\\uFF15': '5', // Fullwidth digit 5\r\n\t'\\uFF16': '6', // Fullwidth digit 6\r\n\t'\\uFF17': '7', // Fullwidth digit 7\r\n\t'\\uFF18': '8', // Fullwidth digit 8\r\n\t'\\uFF19': '9', // Fullwidth digit 9\r\n\t'\\u0660': '0', // Arabic-indic digit 0\r\n\t'\\u0661': '1', // Arabic-indic digit 1\r\n\t'\\u0662': '2', // Arabic-indic digit 2\r\n\t'\\u0663': '3', // Arabic-indic digit 3\r\n\t'\\u0664': '4', // Arabic-indic digit 4\r\n\t'\\u0665': '5', // Arabic-indic digit 5\r\n\t'\\u0666': '6', // Arabic-indic digit 6\r\n\t'\\u0667': '7', // Arabic-indic digit 7\r\n\t'\\u0668': '8', // Arabic-indic digit 8\r\n\t'\\u0669': '9', // Arabic-indic digit 9\r\n\t'\\u06F0': '0', // Eastern-Arabic digit 0\r\n\t'\\u06F1': '1', // Eastern-Arabic digit 1\r\n\t'\\u06F2': '2', // Eastern-Arabic digit 2\r\n\t'\\u06F3': '3', // Eastern-Arabic digit 3\r\n\t'\\u06F4': '4', // Eastern-Arabic digit 4\r\n\t'\\u06F5': '5', // Eastern-Arabic digit 5\r\n\t'\\u06F6': '6', // Eastern-Arabic digit 6\r\n\t'\\u06F7': '7', // Eastern-Arabic digit 7\r\n\t'\\u06F8': '8', // Eastern-Arabic digit 8\r\n\t'\\u06F9': '9' // Eastern-Arabic digit 9\r\n}\r\n\r\nexport function parseDigit(character) {\r\n\treturn DIGITS[character]\r\n}\r\n\r\n/**\r\n * Parses phone number digits from a string.\r\n * Drops all punctuation leaving only digits.\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * parseDigits('8 (800) 555')\r\n * // Outputs '8800555'.\r\n * ```\r\n */\r\nexport default function parseDigits(string) {\r\n\tlet result = ''\r\n\t// Using `.split('')` here instead of normal `for ... of`\r\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t// (the ones consisting of four bytes) but digits\r\n\t// (including non-European ones) don't fall into that range\r\n\t// so such \"exotic\" characters would be discarded anyway.\r\n\tfor (const character of string.split('')) {\r\n\t\tconst digit = parseDigit(character)\r\n\t\tif (digit) {\r\n\t\t\tresult += digit\r\n\t\t}\r\n\t}\r\n\treturn result\r\n}","import { parseDigit } from './helpers/parseDigits.js'\r\n\r\n/**\r\n * Parses phone number characters from a string.\r\n * Drops all punctuation leaving only digits and the leading `+` sign (if any).\r\n * Also converts wide-ascii and arabic-indic numerals to conventional numerals.\r\n * E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.\r\n * @param {string} string\r\n * @return {string}\r\n * @example\r\n * ```js\r\n * // Outputs '8800555'.\r\n * parseIncompletePhoneNumber('8 (800) 555')\r\n * // Outputs '+7800555'.\r\n * parseIncompletePhoneNumber('+7 800 555')\r\n * ```\r\n */\r\nexport default function parseIncompletePhoneNumber(string) {\r\n\tlet result = ''\r\n\t// Using `.split('')` here instead of normal `for ... of`\r\n\t// because the importing application doesn't neccessarily include an ES6 polyfill.\r\n\t// The `.split('')` approach discards \"exotic\" UTF-8 characters\r\n\t// (the ones consisting of four bytes) but digits\r\n\t// (including non-European ones) don't fall into that range\r\n\t// so such \"exotic\" characters would be discarded anyway.\r\n\tfor (const character of string.split('')) {\r\n\t\tresult += parsePhoneNumberCharacter(character, result) || ''\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * Parses next character while parsing phone number digits (including a `+`)\r\n * from text: discards everything except `+` and digits, and `+` is only allowed\r\n * at the start of a phone number.\r\n * For example, is used in `react-phone-number-input` where it uses\r\n * [`input-format`](https://gitlab.com/catamphetamine/input-format).\r\n * @param {string} character - Yet another character from raw input string.\r\n * @param {string?} prevParsedCharacters - Previous parsed characters.\r\n * @param {function?} eventListener - An optional \"on event\" function.\r\n * @return {string?} The parsed character.\r\n */\r\nexport function parsePhoneNumberCharacter(character, prevParsedCharacters, eventListener) {\r\n\t// Only allow a leading `+`.\r\n\tif (character === '+') {\r\n\t\t// If this `+` is not the first parsed character\r\n\t\t// then discard it.\r\n\t\tif (prevParsedCharacters) {\r\n\t\t\t// `eventListener` argument was added to this `export`ed function on Dec 26th, 2023.\r\n\t\t\t// Any 3rd-party code that used to `import` and call this function before that\r\n\t\t\t// won't be passing any `eventListener` argument.\r\n\t\t\t//\r\n\t\t\t// The addition of the `eventListener` argument was to fix the slightly-weird behavior\r\n\t\t\t// of parsing an input string when the user inputs something like `\"2+7\"\r\n\t\t\t// https://github.com/catamphetamine/react-phone-number-input/issues/437\r\n\t\t\t//\r\n\t\t\t// If the parser encounters an unexpected `+` in a string being parsed\r\n\t\t\t// then it simply discards that out-of-place `+` and any following characters.\r\n\t\t\t//\r\n\t\t\tif (typeof eventListener === 'function') {\r\n\t\t\t\teventListener('end')\r\n\t\t\t}\r\n\t\t\treturn\r\n\t\t}\r\n\t\treturn '+'\r\n\t}\r\n\t// Allow digits.\r\n\treturn parseDigit(character)\r\n}","// When phone numbers are written in `RFC3966` format — `\"tel:+12133734253\"` —\r\n// they can have their \"calling code\" part written separately in a `phone-context` parameter.\r\n// Example: `\"tel:12133734253;phone-context=+1\"`.\r\n// This function parses the full phone number from the local number and the `phone-context`\r\n// when the `phone-context` contains a `+` sign.\r\n\r\nimport {\r\n VALID_DIGITS,\r\n // PLUS_CHARS\r\n} from '../constants.js'\r\n\r\nexport const PLUS_SIGN = '+'\r\n\r\nconst RFC3966_VISUAL_SEPARATOR_ = '[\\\\-\\\\.\\\\(\\\\)]?'\r\n\r\nconst RFC3966_PHONE_DIGIT_ = '(' + '[' + VALID_DIGITS + ']' + '|' + RFC3966_VISUAL_SEPARATOR_ + ')'\r\n\r\nconst RFC3966_GLOBAL_NUMBER_DIGITS_ =\r\n\t'^' +\r\n\t'\\\\' +\r\n\tPLUS_SIGN +\r\n\tRFC3966_PHONE_DIGIT_ +\r\n\t'*' +\r\n\t'[' + VALID_DIGITS + ']' +\r\n\tRFC3966_PHONE_DIGIT_ +\r\n\t'*' +\r\n\t'$'\r\n\r\n/**\r\n * Regular expression of valid global-number-digits for the phone-context\r\n * parameter, following the syntax defined in RFC3966.\r\n */\r\nconst RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_ = new RegExp(RFC3966_GLOBAL_NUMBER_DIGITS_, 'g')\r\n\r\n// In this port of Google's library, we don't accept alpha characters in phone numbers.\r\n// const ALPHANUM_ = VALID_ALPHA_ + VALID_DIGITS\r\nconst ALPHANUM_ = VALID_DIGITS\r\n\r\nconst RFC3966_DOMAINLABEL_ = '[' + ALPHANUM_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*'\r\n\r\nconst VALID_ALPHA_ = 'a-zA-Z'\r\nconst RFC3966_TOPLABEL_ = '[' + VALID_ALPHA_ + ']+((\\\\-)*[' + ALPHANUM_ + '])*'\r\n\r\nconst RFC3966_DOMAINNAME_ = '^(' + RFC3966_DOMAINLABEL_ + '\\\\.)*' + RFC3966_TOPLABEL_ + '\\\\.?$'\r\n\r\n/**\r\n * Regular expression of valid domainname for the phone-context parameter,\r\n * following the syntax defined in RFC3966.\r\n */\r\nconst RFC3966_DOMAINNAME_PATTERN_ = new RegExp(RFC3966_DOMAINNAME_, 'g')\r\n\r\nexport const RFC3966_PREFIX_ = 'tel:'\r\nexport const RFC3966_PHONE_CONTEXT_ = ';phone-context='\r\nexport const RFC3966_ISDN_SUBADDRESS_ = ';isub='\r\n\r\n/**\r\n * Extracts the value of the phone-context parameter of `numberToExtractFrom`,\r\n * following the syntax defined in RFC3966.\r\n *\r\n * @param {string} numberToExtractFrom\r\n * @return {string|null} the extracted string (possibly empty), or `null` if no phone-context parameter is found.\r\n */\r\nexport default function extractPhoneContext(numberToExtractFrom) {\r\n\tconst indexOfPhoneContext = numberToExtractFrom.indexOf(RFC3966_PHONE_CONTEXT_)\r\n\t// If no phone-context parameter is present\r\n\tif (indexOfPhoneContext < 0) {\r\n\t\treturn null\r\n\t}\r\n\r\n\tconst phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT_.length\r\n\t// If phone-context parameter is empty\r\n\tif (phoneContextStart >= numberToExtractFrom.length) {\r\n\t\treturn ''\r\n\t}\r\n\r\n\tconst phoneContextEnd = numberToExtractFrom.indexOf(';', phoneContextStart)\r\n\t// If phone-context is not the last parameter\r\n\tif (phoneContextEnd >= 0) {\r\n\t\treturn numberToExtractFrom.substring(phoneContextStart, phoneContextEnd)\r\n\t} else {\r\n\t\treturn numberToExtractFrom.substring(phoneContextStart)\r\n\t}\r\n}\r\n\r\n/**\r\n * Returns whether the value of phoneContext follows the syntax defined in RFC3966.\r\n *\r\n * @param {string|null} phoneContext\r\n * @return {boolean}\r\n */\r\nexport function isPhoneContextValid(phoneContext) {\r\n\tif (phoneContext === null) {\r\n\t\treturn true\r\n\t}\r\n\r\n\tif (phoneContext.length === 0) {\r\n\t\treturn false\r\n\t}\r\n\r\n\t// Does phone-context value match pattern of global-number-digits or domainname.\r\n\treturn RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_.test(phoneContext) ||\r\n\t\tRFC3966_DOMAINNAME_PATTERN_.test(phoneContext)\r\n}","import extractPhoneContext, {\r\n\tisPhoneContextValid,\r\n\tPLUS_SIGN,\r\n\tRFC3966_PREFIX_,\r\n\tRFC3966_PHONE_CONTEXT_,\r\n\tRFC3966_ISDN_SUBADDRESS_\r\n} from './extractPhoneContext.js'\r\n\r\nimport ParseError from '../ParseError.js'\r\n\r\n/**\r\n * @param {string} numberToParse\r\n * @param {string} nationalNumber\r\n * @return {}\r\n */\r\nexport default function extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(numberToParse, {\r\n\textractFormattedPhoneNumber\r\n}) {\r\n\tconst phoneContext = extractPhoneContext(numberToParse)\r\n\tif (!isPhoneContextValid(phoneContext)) {\r\n\t\tthrow new ParseError('NOT_A_NUMBER')\r\n\t}\r\n\r\n\tlet phoneNumberString\r\n\r\n\tif (phoneContext === null) {\r\n\t\t// Extract a possible number from the string passed in.\r\n\t\t// (this strips leading characters that could not be the start of a phone number)\r\n\t\tphoneNumberString = extractFormattedPhoneNumber(numberToParse) || ''\r\n\t} else {\r\n\t\tphoneNumberString = ''\r\n\r\n\t\t// If the phone context contains a phone number prefix, we need to capture\r\n\t\t// it, whereas domains will be ignored.\r\n\t\tif (phoneContext.charAt(0) === PLUS_SIGN) {\r\n\t\t\tphoneNumberString += phoneContext\r\n\t\t}\r\n\r\n\t\t// Now append everything between the \"tel:\" prefix and the phone-context.\r\n\t\t// This should include the national number, an optional extension or\r\n\t\t// isdn-subaddress component. Note we also handle the case when \"tel:\" is\r\n\t\t// missing, as we have seen in some of the phone number inputs.\r\n\t\t// In that case, we append everything from the beginning.\r\n\t\tconst indexOfRfc3966Prefix = numberToParse.indexOf(RFC3966_PREFIX_)\r\n\t\tlet indexOfNationalNumber\r\n\t\t// RFC 3966 \"tel:\" prefix is preset at this stage because\r\n\t\t// `isPhoneContextValid()` requires it to be present.\r\n\t\t/* istanbul ignore else */\r\n\t\tif (indexOfRfc3966Prefix >= 0) {\r\n\t\t\tindexOfNationalNumber = indexOfRfc3966Prefix + RFC3966_PREFIX_.length\r\n\t\t} else {\r\n\t\t\tindexOfNationalNumber = 0\r\n\t\t}\r\n\t\tconst indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT_)\r\n\t\tphoneNumberString += numberToParse.substring(indexOfNationalNumber, indexOfPhoneContext)\r\n\t}\r\n\r\n\t// Delete the isdn-subaddress and everything after it if it is present.\r\n\t// Note extension won't appear at the same time with isdn-subaddress\r\n\t// according to paragraph 5.3 of the RFC3966 spec.\r\n\tconst indexOfIsdn = phoneNumberString.indexOf(RFC3966_ISDN_SUBADDRESS_)\r\n\tif (indexOfIsdn > 0) {\r\n\t\tphoneNumberString = phoneNumberString.substring(0, indexOfIsdn)\r\n\t}\r\n\t// If both phone context and isdn-subaddress are absent but other\r\n\t// parameters are present, the parameters are left in nationalNumber.\r\n\t// This is because we are concerned about deleting content from a potential\r\n\t// number string when there is no strong evidence that the number is\r\n\t// actually written in RFC3966.\r\n\r\n\tif (phoneNumberString !== '') {\r\n\t\treturn phoneNumberString\r\n\t}\r\n}","// This is a port of Google Android `libphonenumber`'s\r\n// `phonenumberutil.js` of December 31th, 2018.\r\n//\r\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\r\n\r\nimport {\r\n\tVALID_DIGITS,\r\n\tPLUS_CHARS,\r\n\tMIN_LENGTH_FOR_NSN,\r\n\tMAX_LENGTH_FOR_NSN\r\n} from './constants.js'\r\n\r\nimport ParseError from './ParseError.js'\r\nimport Metadata from './metadata.js'\r\nimport isViablePhoneNumber, { isViablePhoneNumberStart } from './helpers/isViablePhoneNumber.js'\r\nimport extractExtension from './helpers/extension/extractExtension.js'\r\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber.js'\r\nimport getCountryCallingCode from './getCountryCallingCode.js'\r\nimport { isPossibleNumber } from './isPossible.js'\r\n// import { parseRFC3966 } from './helpers/RFC3966.js'\r\nimport PhoneNumber from './PhoneNumber.js'\r\nimport matchesEntirely from './helpers/matchesEntirely.js'\r\nimport extractCountryCallingCode from './helpers/extractCountryCallingCode.js'\r\nimport extractNationalNumber from './helpers/extractNationalNumber.js'\r\n// import stripIddPrefix from './helpers/stripIddPrefix.js'\r\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js'\r\nimport extractFormattedPhoneNumberFromPossibleRfc3966NumberUri from './helpers/extractFormattedPhoneNumberFromPossibleRfc3966NumberUri.js'\r\n\r\n// We don't allow input strings for parsing to be longer than 250 chars.\r\n// This prevents malicious input from consuming CPU.\r\nconst MAX_INPUT_STRING_LENGTH = 250\r\n\r\n// This consists of the plus symbol, digits, and arabic-indic digits.\r\nconst PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']')\r\n\r\n// Regular expression of trailing characters that we want to remove.\r\n// A trailing `#` is sometimes used when writing phone numbers with extensions in US.\r\n// Example: \"+1 (645) 123 1234-910#\" number has extension \"910\".\r\nconst AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + '#' + ']+$')\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\n// Examples:\r\n//\r\n// ```js\r\n// parse('8 (800) 555-35-35', 'RU')\r\n// parse('8 (800) 555-35-35', 'RU', metadata)\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\r\n// parse('+7 800 555 35 35')\r\n// parse('+7 800 555 35 35', metadata)\r\n// ```\r\n//\r\n\r\n/**\r\n * Parses a phone number.\r\n *\r\n * parse('123456789', { defaultCountry: 'RU', v2: true }, metadata)\r\n * parse('123456789', { defaultCountry: 'RU' }, metadata)\r\n * parse('123456789', undefined, metadata)\r\n *\r\n * @param {string} input\r\n * @param {object} [options]\r\n * @param {object} metadataJson\r\n * @return {object|PhoneNumber?} If `options.v2: true` flag is passed, it returns a `PhoneNumber?` instance. Otherwise, returns an object of shape `{ phone: '...', country: '...' }` (or just `{}` if no phone number was parsed).\r\n */\r\nexport default function parse(text, options, metadataJson) {\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\tconst metadata = new Metadata(metadataJson)\r\n\r\n\t// Validate `defaultCountry`.\r\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\tthrow new Error(`Unknown country: ${options.defaultCountry}`)\r\n\t}\r\n\r\n\t// Parse the phone number.\r\n\tconst { number: formattedPhoneNumber, ext, error } = parseInput(text, options.v2, options.extract)\r\n\r\n\t// If the phone number is not viable then return nothing.\r\n\tif (!formattedPhoneNumber) {\r\n\t\tif (options.v2) {\r\n\t\t\tif (error === 'TOO_SHORT') {\r\n\t\t\t\tthrow new ParseError('TOO_SHORT')\r\n\t\t\t}\r\n\t\t\tthrow new ParseError('NOT_A_NUMBER')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst {\r\n\t\tcountry,\r\n\t\tnationalNumber,\r\n\t\tcountryCallingCode,\r\n\t\tcountryCallingCodeSource,\r\n\t\tcarrierCode\r\n\t} = parsePhoneNumber(\r\n\t\tformattedPhoneNumber,\r\n\t\toptions.defaultCountry,\r\n\t\toptions.defaultCallingCode,\r\n\t\t// If `country` is returned, its numbering plan will also be selected in `metadata`.\r\n\t\t// Otherwise, if `countryCallingCode` is returned, its numbering plan will also be selected in `metadata`.\r\n\t\t// Otherwise, if neither `country` nor `countryCallingCode` are returned, no numbering plan will be selected in `metadata`.\r\n\t\tmetadata\r\n\t)\r\n\r\n\tif (!metadata.hasSelectedNumberingPlan()) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\tif (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\r\n\t\t// Won't throw here because the regexp already demands length > 1.\r\n\t\t/* istanbul ignore if */\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_SHORT')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\t//\r\n\t// A sidenote:\r\n\t//\r\n\t// They say that sometimes national (significant) numbers\r\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\r\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\r\n\t// Such numbers will just be discarded.\r\n\t//\r\n\tif (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\tif (options.v2) {\r\n\t\tconst phoneNumber = new PhoneNumber(\r\n\t\t\tcountryCallingCode,\r\n\t\t\tnationalNumber,\r\n\t\t\tmetadata.metadata\r\n\t\t)\r\n\t\tif (country) {\r\n\t\t\tphoneNumber.country = country\r\n\t\t}\r\n\t\tif (carrierCode) {\r\n\t\t\tphoneNumber.carrierCode = carrierCode\r\n\t\t}\r\n\t\tif (ext) {\r\n\t\t\tphoneNumber.ext = ext\r\n\t\t}\r\n\t\tphoneNumber.__countryCallingCodeSource = countryCallingCodeSource\r\n\t\treturn phoneNumber\r\n\t}\r\n\r\n\t// Check if national phone number pattern matches the number.\r\n\t// National number pattern is different for each country,\r\n\t// even for those ones which are part of the \"NANPA\" group.\r\n\tconst valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ?\r\n\t\tmatchesEntirely(nationalNumber, metadata.nationalNumberPattern()) :\r\n\t\tfalse\r\n\r\n\tif (!options.extended) {\r\n\t\treturn valid ? result(country, nationalNumber, ext) : {}\r\n\t}\r\n\r\n\t// isInternational: countryCallingCode !== undefined\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tcarrierCode,\r\n\t\tvalid,\r\n\t\tpossible: valid ? true : (\r\n\t\t\toptions.extended === true &&\r\n\t\t\tmetadata.possibleLengths() &&\r\n\t\t\tisPossibleNumber(nationalNumber, metadata) ? true : false\r\n\t\t),\r\n\t\tphone: nationalNumber,\r\n\t\text\r\n\t}\r\n}\r\n\r\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} [extract] — If `false`, then will parse the entire `text` as a phone number.\r\n * @param {boolean} [throwOnError] — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\r\nfunction extractFormattedPhoneNumber(text, extract, throwOnError) {\r\n\tif (!text) {\r\n\t\treturn\r\n\t}\r\n\tif (text.length > MAX_INPUT_STRING_LENGTH) {\r\n\t\tif (throwOnError) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\treturn\r\n\t}\r\n\tif (extract === false) {\r\n\t\treturn text\r\n\t}\r\n\t// Attempt to extract a possible number from the string passed in\r\n\tconst startsAt = text.search(PHONE_NUMBER_START_PATTERN)\r\n\tif (startsAt < 0) {\r\n\t\treturn\r\n\t}\r\n\treturn text\r\n\t\t// Trim everything to the left of the phone number\r\n\t\t.slice(startsAt)\r\n\t\t// Remove trailing non-numerical characters\r\n\t\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '')\r\n}\r\n\r\n/**\r\n * @param {string} text - Input.\r\n * @param {boolean} v2 - Legacy API functions don't pass `v2: true` flag.\r\n * @param {boolean} [extract] - Whether to extract a phone number from `text`, or attempt to parse the entire text as a phone number.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\r\nfunction parseInput(text, v2, extract) {\r\n\t// // Parse RFC 3966 phone number URI.\r\n\t// if (text && text.indexOf('tel:') === 0) {\r\n\t// \treturn parseRFC3966(text)\r\n\t// }\r\n\t// let number = extractFormattedPhoneNumber(text, extract, v2)\r\n\tlet number = extractFormattedPhoneNumberFromPossibleRfc3966NumberUri(text, {\r\n\t\textractFormattedPhoneNumber: (text) => extractFormattedPhoneNumber(text, extract, v2)\r\n\t})\r\n\t// If the phone number is not viable, then abort.\r\n\tif (!number) {\r\n\t\treturn {}\r\n\t}\r\n\tif (!isViablePhoneNumber(number)) {\r\n\t\tif (isViablePhoneNumberStart(number)) {\r\n\t\t\treturn { error: 'TOO_SHORT' }\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\t// Attempt to parse extension first, since it doesn't require region-specific\r\n\t// data and we want to have the non-normalised number here.\r\n\tconst withExtensionStripped = extractExtension(number)\r\n\tif (withExtensionStripped.ext) {\r\n\t\treturn withExtensionStripped\r\n\t}\r\n\treturn { number }\r\n}\r\n\r\n/**\r\n * Creates `parse()` result object.\r\n */\r\nfunction result(country, nationalNumber, ext) {\r\n\tconst result = {\r\n\t\tcountry,\r\n\t\tphone: nationalNumber\r\n\t}\r\n\tif (ext) {\r\n\t\tresult.ext = ext\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata — Metadata instance with no pre-selected numbering plan. If `country` is returned, its numbering plan will also be selected in `metadata`. Otherwise, if `countryCallingCode` is returned, its numbering plan will also be selected in `metadata`. Otherwise, if neither `country` nor `countryCallingCode` are returned, no numbering plan will be selected in `metadata`.\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\r\nfunction parsePhoneNumber(\r\n\tformattedPhoneNumber,\r\n\tdefaultCountry,\r\n\tdefaultCallingCode,\r\n\tmetadata\r\n) {\r\n\t// Attempt to extract a calling code from a phone number.\r\n\t// * If the phone number is found to be \"international\":\r\n\t// * It will attempt to identify the calling code part of it and whether that part is complete and valid.\r\n\t// * If the calling code part is complete and valid, it will return two properties:\r\n\t// that calling code part (without `+`) and the rest of the digits.\r\n\t// * Otherwise, i.e. if the calling code part is incomplete or invalid,\r\n\t// it will return an empty object.\r\n\t// * Otherwise, i.e. if the phone number is national, there's no callind code to extract\r\n\t// so it will just return the originally-passed `number` string as the only property.\r\n\tlet {\r\n\t\t// `countryCallingCodeSource` tells how the returned calling code was extracted (if it was extracted).\r\n\t\tcountryCallingCodeSource,\r\n\t\t// `countryCallingCode` is the calling code that was extracted from the input phone number string.\r\n\t\tcountryCallingCode,\r\n\t\t// `number` is the originally passed `number` without the extracted calling code (and without a `+`).\r\n\t\t// If the calling code is present but incomplete or invalid, both `countryCallingCode` and `number`\r\n\t\t// will be returned as `undefined`.\r\n\t\tnumber\r\n\t} = extractCountryCallingCode(\r\n\t\tparseIncompletePhoneNumber(formattedPhoneNumber),\r\n\t\tundefined,\r\n\t\t// `defaultCountry` and `defaultCallingCode` are only used to detect\r\n\t\t// if it's an \"international\" phone number or not. They won't be used\r\n\t\t// to derive the resulting `countryCallingCode` from them, or anything like that.\r\n\t\tdefaultCountry,\r\n\t\tdefaultCallingCode,\r\n\t\tmetadata.metadata\r\n\t)\r\n\r\n\t// The exact country of the phone number\r\n\tlet country\r\n\r\n\t// If `formattedPhoneNumber` is passed in \"international\" format,\r\n\t// choose a country by `countryCallingCode`.\r\n\tif (countryCallingCode) {\r\n\t\tmetadata.selectNumberingPlan(countryCallingCode)\r\n\t}\r\n\t// Else, if `formattedPhoneNumber` is passed in \"national\" format,\r\n\t// then `number` is defined and `countryCallingCode` is `undefined`.\r\n\telse if (number && (defaultCountry || defaultCallingCode)) {\r\n\t\tif (defaultCountry) {\r\n\t\t\tcountry = defaultCountry\r\n\t\t\tmetadata.selectNumberingPlan(defaultCountry)\r\n\t\t\tcountryCallingCode = metadata.numberingPlan.callingCode()\r\n\t\t} else {\r\n\t\t\tmetadata.selectNumberingPlan(defaultCallingCode)\r\n\t\t\tcountryCallingCode = defaultCallingCode\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t\tif (metadata.isNonGeographicCallingCode(countryCallingCode)) {\r\n\t\t\t\t\tcountry = '001'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\telse return {}\r\n\r\n\t// At this point, `country` could be `undefined` but `countryCallingCode` is always defined.\r\n\t//\r\n\t// Also, if `country` is defined, its numbering plan is selected in `metadata`.\r\n\t// Otherwise, the numering plan for the `countryCallingCode` is selected in `metadata`.\r\n\r\n\tif (!number) {\r\n\t\treturn {\r\n\t\t\tcountryCallingCodeSource,\r\n\t\t\tcountryCallingCode\r\n\t\t}\r\n\t}\r\n\r\n\tconst {\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t} = extractNationalNumber(\r\n\t\tparseIncompletePhoneNumber(number),\r\n\t\tundefined,\r\n\t\tmetadata\r\n\t)\r\n\r\n\t// Sometimes there are several countries\r\n\t// corresponding to the same country phone code\r\n\t// (e.g. NANPA countries all having `1` country phone code).\r\n\t// Therefore, to reliably determine the exact country,\r\n\t// national (significant) number should have been parsed first.\r\n\t//\r\n\t// When `metadata.json` is generated, all \"ambiguous\" country phone codes\r\n\t// get their countries populated with the full set of\r\n\t// \"phone number type\" regular expressions.\r\n\t//\r\n\tconst exactCountry = getCountryByCallingCode(countryCallingCode, {\r\n\t\tnationalNumber,\r\n\t\tmetadata\r\n\t})\r\n\tif (exactCountry) {\r\n\t\tcountry = exactCountry\r\n\t\t/* istanbul ignore if */\r\n\t\tif (exactCountry === '001') {\r\n\t\t\t// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\r\n\t\t\t// If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\r\n\t\t\t// then remove the \"istanbul ignore if\".\r\n\t\t} else {\r\n\t\t\tmetadata.selectNumberingPlan(country)\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tcountryCallingCodeSource,\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t}\r\n}","import parse from './parse.js'\r\n\r\nexport default function parsePhoneNumberWithError(text, options, metadata) {\r\n\treturn parse(text, { ...options, v2: true }, metadata)\r\n}","import isObject from './helpers/isObject.js'\r\n\r\n// Extracts the following properties from function arguments:\r\n// * input `text`\r\n// * `options` object\r\n// * `metadata` JSON\r\nexport default function normalizeArguments(args) {\r\n\tconst [arg_1, arg_2, arg_3, arg_4] = Array.prototype.slice.call(args)\r\n\r\n\tlet text\r\n\tlet options\r\n\tlet metadata\r\n\r\n\t// If the phone number is passed as a string.\r\n\t// `parsePhoneNumber('88005553535', ...)`.\r\n\tif (typeof arg_1 === 'string') {\r\n\t\ttext = arg_1\r\n\t}\r\n\telse throw new TypeError('A text for parsing must be a string.')\r\n\r\n\t// If \"default country\" argument is being passed then move it to `options`.\r\n\t// `parsePhoneNumber('88005553535', 'RU', [options], metadata)`.\r\n\tif (!arg_2 || typeof arg_2 === 'string')\r\n\t{\r\n\t\tif (arg_4) {\r\n\t\t\toptions = arg_3\r\n\t\t\tmetadata = arg_4\r\n\t\t} else {\r\n\t\t\toptions = undefined\r\n\t\t\tmetadata = arg_3\r\n\t\t}\r\n\r\n\t\tif (arg_2) {\r\n\t\t\toptions = { defaultCountry: arg_2, ...options }\r\n\t\t}\r\n\t}\r\n\t// `defaultCountry` is not passed.\r\n\t// Example: `parsePhoneNumber('+78005553535', [options], metadata)`.\r\n\telse if (isObject(arg_2))\r\n\t{\r\n\t\tif (arg_3) {\r\n\t\t\toptions = arg_2\r\n\t\t\tmetadata = arg_3\r\n\t\t} else {\r\n\t\t\tmetadata = arg_2\r\n\t\t}\r\n\t}\r\n\telse throw new Error(`Invalid second argument: ${arg_2}`)\r\n\r\n\treturn {\r\n\t\ttext,\r\n\t\toptions,\r\n\t\tmetadata\r\n\t}\r\n}","import parsePhoneNumberWithError from './parsePhoneNumberWithError_.js'\r\nimport ParseError from './ParseError.js'\r\nimport { isSupportedCountry } from './metadata.js'\r\n\r\nexport default function parsePhoneNumber(text, options, metadata) {\r\n\t// Validate `defaultCountry`.\r\n\tif (options && options.defaultCountry && !isSupportedCountry(options.defaultCountry, metadata)) {\r\n\t\toptions = {\r\n\t\t\t...options,\r\n\t\t\tdefaultCountry: undefined\r\n\t\t}\r\n\t}\r\n\t// Parse phone number.\r\n\ttry {\r\n\t\treturn parsePhoneNumberWithError(text, options, metadata)\r\n\t} catch (error) {\r\n\t\t/* istanbul ignore else */\r\n\t\tif (error instanceof ParseError) {\r\n\t\t\t//\r\n\t\t} else {\r\n\t\t\tthrow error\r\n\t\t}\r\n\t}\r\n}\r\n","import normalizeArguments from './normalizeArguments.js'\r\nimport parsePhoneNumber_ from './parsePhoneNumber_.js'\r\n\r\nexport default function parsePhoneNumber() {\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\treturn parsePhoneNumber_(text, options, metadata)\r\n}\r\n","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { default as _parsePhoneNumber } from '../../core/index.js'\r\n\r\nexport function parsePhoneNumber() {\r\n\treturn withMetadataArgument(_parsePhoneNumber, arguments)\r\n}","// Framework-agnostic phone-number utilities — isomorphic (browser + Node/RSC),\n// zero React. Bundled `libphonenumber-js` (standard metadata) so clients add no\n// dependency. The transmitted value is ALWAYS E.164; display is the only knob.\n\nimport { AsYouType, parsePhoneNumberFromString, type CountryCode } from \"libphonenumber-js\";\n\nexport type { CountryCode };\n\n/**\n * How a phone number is shown in the UI. The transmitted value is always E.164\n * and is deliberately NOT part of this — only the display format is configurable.\n * A function form covers the long tail (`(parsed) => string`).\n */\nexport type PhoneDisplayFormat =\n | \"national\"\n | \"international\"\n | \"e164\"\n | ((parsed: ParsedPhone) => string);\n\nexport interface ParsedPhone {\n /** E.164 (`\"+14165550199\"`) or `null` when the input isn't a valid number. This is what gets transmitted. */\n e164: string | null;\n /** National display form (`\"(416) 555-0199\"`); empty string when unparseable. */\n national: string;\n /** International display form (`\"+1 416 555 0199\"`); empty string when unparseable. */\n international: string;\n /** ISO-3166 country resolved by libphonenumber, or `null`. */\n country: CountryCode | null;\n isValid: boolean;\n}\n\n/** Region assumed for numbers typed without a country code. */\nexport const DEFAULT_PHONE_COUNTRY: CountryCode = \"CA\";\n\n/** Parse a raw/display string into every representation at once (one parse → display + wire never drift). */\nexport function parsePhone(raw: string, country?: CountryCode): ParsedPhone {\n const region = country ?? DEFAULT_PHONE_COUNTRY;\n const parsed = parsePhoneNumberFromString(raw ?? \"\", region);\n if (!parsed) {\n return { e164: null, national: \"\", international: \"\", country: region, isValid: false };\n }\n const isValid = parsed.isValid();\n return {\n // E.164 is only surfaced for a *valid* number — a possible-but-invalid input\n // (e.g. too few digits) still parses but must not be transmitted.\n e164: isValid ? parsed.number : null,\n national: parsed.formatNational(),\n international: parsed.formatInternational(),\n country: parsed.country ?? region,\n isValid,\n };\n}\n\n/** Normalize any raw/display value to E.164, or `null` if it isn't a valid number. */\nexport function toE164(raw: string, country?: CountryCode): string | null {\n return parsePhone(raw, country).e164;\n}\n\n/** Format a value for display. Defaults to `'national'`. Never affects the wire value. */\nexport function formatPhone(\n value: string,\n format: PhoneDisplayFormat = \"national\",\n country?: CountryCode,\n): string {\n const parsed = parsePhone(value, country);\n if (typeof format === \"function\") return format(parsed);\n switch (format) {\n case \"international\":\n return parsed.international || value;\n case \"e164\":\n return parsed.e164 ?? value;\n case \"national\":\n default:\n return parsed.national || value;\n }\n}\n\n/** Live, incremental formatting for an `<input>` as the user types (`AsYouType`). */\nexport function formatPhoneAsTyped(raw: string, country?: CountryCode): string {\n return new AsYouType(country ?? DEFAULT_PHONE_COUNTRY).input(raw ?? \"\");\n}\n","// phone_click auto-capture (opt-in via the phone_click registration config).\n//\n// A single delegated click listener fires `phone_click` for any `tel:` link\n// matching the configured selector (default `a[href^=\"tel:\"]`). The event\n// itself stays `manual` in the registry — consumers can still fire it from\n// code; this trigger just removes the need to hand-instrument every call link.\n//\n// Unlike cta_click, a captured phone_click ALSO drives conversion auto-fire: a\n// `tel:` tap is an unambiguous on-site conversion, so `conversion-autofire`\n// fires a linked `phone_click` event-goal (see thresholdMet). The number rides\n// along as E.164 (`toE164`, falling back to the raw href value) so the\n// dashboard can tie clicks to a concrete number.\n//\n// Overlap caveat: the default selectors don't collide (`a[href^=\"tel:\"]` vs\n// cta_click's `[data-aranova-cta]`). If an operator tags a `tel:` link with\n// `data-aranova-cta` AND enables both auto-captures, one tap emits two analytics\n// events — but only phone_click auto-fires a conversion (cta_click is fire-on-\n// demand via trackConversion), so there's no double-count of the conversion.\n\nimport type { PhoneClickConfig, PhoneClickMetadata } from \"../events/phone-click\";\nimport type { TrackingClient } from \"../ingest\";\nimport { toE164 } from \"../phone\";\n\nexport const DEFAULT_TEL_SELECTOR = 'a[href^=\"tel:\"]';\n\n/** decodeURIComponent throws `URIError` on a malformed `%` sequence (e.g. `tel:+1%`),\n * which a `tel:` href can legitimately carry — return the raw value instead of letting\n * it escape the click listener (the module's no-throw contract). */\nfunction safeDecodeURIComponent(value: string): string {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\n/** The dialable number from a `tel:` href, normalized to E.164 when possible. */\nfunction resolvePhoneNumber(el: Element): string {\n const href = el instanceof HTMLAnchorElement ? el.href : (el.getAttribute(\"href\") ?? \"\");\n // Strip the scheme (and any `;`-suffixed params like `tel:+123;ext=9`) before normalizing.\n const raw = safeDecodeURIComponent(href.replace(/^tel:/i, \"\").split(\";\")[0]).trim();\n return toE164(raw) ?? raw;\n}\n\n/**\n * Attach the delegated phone_click auto-capture listener. Returns a detach\n * function. No-ops (returns a noop detacher) when `autoCapture` is absent.\n */\nexport function attachPhoneClickCapture(\n client: TrackingClient,\n config: PhoneClickConfig,\n): () => void {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return () => {};\n }\n const autoCapture = config.autoCapture;\n if (!autoCapture) {\n return () => {};\n }\n const selector = autoCapture.selector ?? DEFAULT_TEL_SELECTOR;\n\n function onClick(event: MouseEvent): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n let matched: Element | null = null;\n try {\n matched = target.closest(selector);\n } catch {\n return; // invalid selector — never break the host site\n }\n if (matched === null) return;\n // Typed so the emitted shape is checked against the schema (not an opaque cast).\n const metadata: PhoneClickMetadata = {\n phone_number: resolvePhoneNumber(matched),\n page: { path: window.location.pathname },\n section: matched.getAttribute(\"data-aranova-section\"),\n };\n client.trackEvent({\n eventType: \"phone_click\",\n metadata,\n pageUrl: window.location.href,\n occurredAt: null,\n });\n }\n\n // Capture phase so navigations that stop propagation still get counted.\n document.addEventListener(\"click\", onClick, true);\n return () => {\n document.removeEventListener(\"click\", onClick, true);\n };\n}\n","/**\n * Error thrown by the sales client (`createSalesClient`) on a\n * non-2xx response. Unlike the fire-and-forget event queue (which swallows\n * failures), a sale is a transaction the caller must be able to react to.\n */\nexport class AranovaApiError extends Error {\n readonly status: number;\n readonly code: string | undefined;\n readonly requestId: string | undefined;\n\n constructor(message: string, options: { status: number; code?: string; requestId?: string }) {\n super(message);\n this.name = \"AranovaApiError\";\n this.status = options.status;\n this.code = options.code;\n this.requestId = options.requestId;\n }\n}\n","import {\n API_KEY_HEADER,\n SDK_ENVIRONMENT_HEADER,\n SDK_PACKAGE_HEADER,\n SDK_SURFACE_HEADER,\n SDK_VERSION_HEADER,\n} from \"../../ingest\";\nimport { AranovaApiError } from \"./errors\";\n\n/** Shared config for every sales HTTP helper. */\nexport interface SalesTransportConfig {\n /** Public (`aranv_pk_…`) or secret (`aranv_sk_…`) API key. */\n apiKey: string;\n /**\n * Base tracking endpoint, e.g. `https://aranovainternal-production.up.railway.app/tracking`.\n * The `/sales` path is appended by the helpers.\n */\n endpoint: string;\n /** Optional SDK identity headers (mirrors the event ingest client). */\n sdkVersion?: string;\n packageName?: string;\n surface?: string;\n environment?: string;\n}\n\nfunction identityHeaders(config: SalesTransportConfig): Record<string, string> {\n const headers: Record<string, string> = { [API_KEY_HEADER]: config.apiKey };\n if (config.sdkVersion) headers[SDK_VERSION_HEADER] = config.sdkVersion;\n if (config.packageName) headers[SDK_PACKAGE_HEADER] = config.packageName;\n if (config.surface) headers[SDK_SURFACE_HEADER] = config.surface;\n if (config.environment) headers[SDK_ENVIRONMENT_HEADER] = config.environment;\n return headers;\n}\n\nfunction joinUrl(endpoint: string, path: string): string {\n return `${endpoint.replace(/\\/$/, \"\")}${path}`;\n}\n\n/**\n * Single awaited request used by every sales helper. Unlike the event queue,\n * this surfaces failures: any non-2xx rejects with an {@link AranovaApiError}.\n * Returns `undefined` for 204 No Content.\n */\nexport async function salesRequest<T>(\n config: SalesTransportConfig,\n method: string,\n path: string,\n body?: unknown,\n): Promise<T> {\n const headers = identityHeaders(config);\n if (body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await fetch(joinUrl(config.endpoint, path), {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n });\n\n if (!response.ok) {\n let detail: string | undefined;\n let code: string | undefined;\n try {\n const parsed: unknown = await response.json();\n if (parsed && typeof parsed === \"object\") {\n const record = parsed as Record<string, unknown>;\n if (typeof record.detail === \"string\") detail = record.detail;\n if (typeof record.code === \"string\") code = record.code;\n }\n } catch {\n // non-JSON error body — fall back to status text\n }\n throw new AranovaApiError(detail ?? response.statusText ?? \"Request failed\", {\n status: response.status,\n code,\n requestId: response.headers.get(\"x-request-id\") ?? undefined,\n });\n }\n\n if (response.status === 204) return undefined as T;\n return (await response.json()) as T;\n}\n","import type {\n BusinessConfig,\n CustomerGetOptions,\n CustomerGetResult,\n CustomerKpis,\n CustomerListPage,\n CustomerListQuery,\n CustomerSummaryQuery,\n Sale,\n SaleCursorPage,\n SaleInput,\n SaleListQueryV2,\n SaleSummaryQueryV2,\n SaleSummaryV2,\n SaleUpdateInput,\n SupportedCurrency,\n} from \"./schema\";\nimport type { ConversionConfigStore } from \"../conversion-config\";\nimport { fireConversionWithConsent } from \"../conversion-firing\";\nimport { salesRequest, type SalesTransportConfig } from \"./transport\";\nimport { fromMinor } from \"./money\";\n\n/** Config for {@link createSalesClient}. */\nexport interface SalesClientConfig extends SalesTransportConfig {\n /** Applied when an individual `record()` call omits `currency`. */\n defaultCurrency?: SupportedCurrency;\n /**\n * GAP28: when present, `record()` ALSO fires a real-time on-site conversion\n * (`gtag('event','conversion')`) for any recorded service that has a `firing` send_to in\n * the resolved config. Consent-gated + de-duped; no-ops server-side. Wire it from\n * `resolveConversionConfig(...)`.\n */\n firing?: Pick<ConversionConfigStore, \"getFiring\">;\n}\n\n// Fire the on-site conversion(s) for a just-recorded sale. Per-service value = the sale's\n// amount when present, else the action's configured default from config (Google applies\n// its own default when neither is sent). transaction_id ties the gtag fire to the sale so\n// retries/reloads de-dup within the WEBPAGE action.\nfunction fireRecordedConversions(\n firing: Pick<ConversionConfigStore, \"getFiring\"> | undefined,\n input: { external_id?: string | null; amount_total_cents?: number | null },\n recorded: { service?: string | null; amount_cents: number | null }[],\n sale: Sale,\n currency: SupportedCurrency,\n): void {\n if (!firing) return;\n const txnBase = input.external_id ?? sale.id;\n for (const item of recorded) {\n if (!item.service) continue;\n const config = firing.getFiring(item.service);\n if (!config) continue;\n const cents = item.amount_cents ?? config.value_cents ?? null;\n fireConversionWithConsent({\n sendTo: config.send_to,\n value: cents != null ? fromMinor(cents, currency) : null,\n currency: config.currency ?? currency,\n transactionId: `${txnBase}:${item.service}`,\n });\n }\n}\n\n/** Phone-keyed customer rollups (sk-only; a public key gets a `403`). */\nexport interface SalesCustomersClient {\n list(query?: CustomerListQuery): Promise<CustomerListPage>;\n /** `id` is the customer's E.164 phone. */\n get(id: string, options?: CustomerGetOptions): Promise<CustomerGetResult>;\n summary(query?: CustomerSummaryQuery): Promise<CustomerKpis>;\n}\n\n/** Business config (low-sensitivity — accepts a public or secret key). */\nexport interface SalesBusinessClient {\n config(): Promise<BusinessConfig>;\n}\n\n/**\n * One isomorphic sales client — what a key may *do* is enforced by the backend,\n * not by hiding methods. A **public** key (`aranv_pk_…`) may `record` (the\n * backend rejects reads/CRUD from it with a `403`); a **secret** key\n * (`aranv_sk_…`), used **server-side only**, gets full read/list/update/delete.\n * Never ship a secret key in a browser bundle.\n *\n * Generic over the service-key union `TService` and the manual-conversion key union\n * `TConversion`: bind the types emitted by `@aranova/tracking-cli gen` (`AranovaService`\n * and `AranovaConversion`) for compile-time-checked `service` / `trackConversion` keys.\n */\nexport interface SalesClient<\n TService extends string = string,\n TConversion extends string = string,\n> {\n record(\n input: Omit<SaleInput, \"currency\" | \"occurred_at\" | \"service\" | \"services\"> & {\n service?: TService | null;\n // XOR with `service`: record multiple services in one sale, each priced\n // individually. `amount_total_cents` is then optional (the backend derives\n // it as the sum). Keys are checked against the codegen `TService` union.\n services?: Array<{ service: TService; amount_cents: number }>;\n currency?: SupportedCurrency;\n occurred_at?: string;\n },\n ): Promise<Sale>;\n /**\n * Record a revenue sale — the intent-revealing alias of {@link record} in the unified-goal\n * API. POSTs `/sales` and ALSO fires the on-site conversion when the sale-goal is\n * WEBPAGE-mapped. Use this for anything with real revenue; use {@link trackConversion} for a\n * non-revenue on-page event.\n */\n recordSale(\n input: Omit<SaleInput, \"currency\" | \"occurred_at\" | \"service\" | \"services\"> & {\n service?: TService | null;\n services?: Array<{ service: TService; amount_cents: number }>;\n currency?: SupportedCurrency;\n occurred_at?: string;\n },\n ): Promise<Sale>;\n /**\n * Fire ONLY the on-site conversion for an event-goal `key` — for MANUAL event-goals\n * (`form_submit`, `phone_click`, `cta_click`) the consumer triggers explicitly. No `/sales`\n * write. No-ops when the goal isn't WEBPAGE-mapped (no resolved `send_to`) or the config\n * isn't wired. Consent-gated + de-duped. (Automatic event-goals fire themselves — no call.)\n */\n trackConversion(\n key: TConversion,\n options?: {\n transactionId?: string | null;\n value?: number | null;\n currency?: SupportedCurrency;\n },\n ): void;\n /** Keyset list with optional server sort + opt-in `total_count`. */\n list(query?: SaleListQueryV2): Promise<SaleCursorPage>;\n /**\n * Currency-grouped aggregations for the key's business. Additive v2 options:\n * calendar/custom ranges, IANA `timezone`, `granularity`, and `compare_to`.\n * Legacy `24h/7d/30d` keep their exact prior numbers. Secret key only.\n */\n summary(query: SaleSummaryQueryV2): Promise<SaleSummaryV2>;\n get(id: string): Promise<Sale>;\n update(\n id: string,\n patch: Omit<SaleUpdateInput, \"service\" | \"services\"> & {\n service?: TService | null;\n // Present ⇒ replaces the whole service set (XOR with `service`); the\n // backend recomputes `amount_total_cents` from the sum.\n services?: Array<{ service: TService; amount_cents: number }>;\n },\n ): Promise<Sale>;\n delete(id: string): Promise<void>;\n /** Phone-keyed customer rollups (sk-only). */\n customers: SalesCustomersClient;\n /** Business config (pk or sk). */\n business: SalesBusinessClient;\n}\n\nexport function createSalesClient<\n TService extends string = string,\n TConversion extends string = string,\n>(config: SalesClientConfig): SalesClient<TService, TConversion> {\n type RecordInput = Parameters<SalesClient<TService, TConversion>[\"record\"]>[0];\n\n async function record(input: RecordInput): Promise<Sale> {\n const currency = input.currency ?? config.defaultCurrency;\n if (!currency) {\n throw new Error(\n \"record: `currency` is required (pass it on the sale or set config.defaultCurrency)\",\n );\n }\n const body: SaleInput = {\n ...input,\n currency,\n occurred_at: input.occurred_at ?? new Date().toISOString(),\n };\n const sale = await salesRequest<Sale>(config, \"POST\", \"/sales\", body);\n // GAP28: fire the real-time on-site conversion(s) AFTER the sale is recorded, so the\n // gtag transaction_id and the offline path agree. Never throws (best-effort fire).\n const recorded = input.services?.length\n ? input.services.map((s) => ({\n service: s.service,\n amount_cents: s.amount_cents,\n }))\n : [\n {\n service: input.service,\n amount_cents: input.amount_total_cents ?? null,\n },\n ];\n fireRecordedConversions(config.firing, input, recorded, sale, currency);\n return sale;\n }\n\n return {\n record,\n // recordSale is the intent-revealing alias — same behavior, clearer call site.\n recordSale: record,\n\n trackConversion(key, options) {\n // Manual event-goal: fire the WEBPAGE conversion only (no /sales). No-op when the goal\n // isn't WEBPAGE-mapped or the config isn't wired.\n const firing = config.firing?.getFiring(key);\n if (!firing) return;\n const currency = firing.currency ?? options?.currency ?? config.defaultCurrency ?? null;\n const cents = firing.value_cents ?? null;\n const value =\n options?.value ??\n (cents != null && currency ? fromMinor(cents, currency as SupportedCurrency) : null);\n fireConversionWithConsent({\n sendTo: firing.send_to,\n value,\n currency,\n transactionId: options?.transactionId ?? null,\n });\n },\n\n async list(query) {\n // Pagination + sort travel at the top level; everything else is a filter.\n const { cursor, limit, sort, order, want_total, ...filters } = query ?? {};\n return salesRequest<SaleCursorPage>(config, \"POST\", \"/sales/query\", {\n filters,\n ...(limit !== undefined ? { limit } : {}),\n ...(cursor !== undefined ? { cursor } : {}),\n ...(sort !== undefined ? { sort } : {}),\n ...(order !== undefined ? { order } : {}),\n ...(want_total !== undefined ? { want_total } : {}),\n });\n },\n\n async summary(query) {\n const {\n range,\n include_categories,\n include_deleted_services,\n top_n,\n since,\n until,\n timezone,\n granularity,\n compare_to,\n ...filters\n } = query;\n return salesRequest<SaleSummaryV2>(config, \"POST\", \"/sales/summary\", {\n filters,\n ...(range !== undefined ? { range } : {}),\n ...(include_categories !== undefined ? { include_categories } : {}),\n ...(include_deleted_services !== undefined ? { include_deleted_services } : {}),\n ...(top_n !== undefined ? { top_n } : {}),\n ...(since !== undefined ? { since } : {}),\n ...(until !== undefined ? { until } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(granularity !== undefined ? { granularity } : {}),\n ...(compare_to !== undefined ? { compare_to } : {}),\n });\n },\n\n async get(id) {\n return salesRequest<Sale>(config, \"GET\", `/sales/${id}`);\n },\n\n async update(id, patch) {\n return salesRequest<Sale>(config, \"PATCH\", `/sales/${id}`, patch);\n },\n\n async delete(id) {\n await salesRequest<void>(config, \"DELETE\", `/sales/${id}`);\n },\n\n customers: {\n async list(query) {\n const { segment, sort, order, cursor, limit, want_total, ...filters } = query ?? {};\n return salesRequest<CustomerListPage>(config, \"POST\", \"/customers/query\", {\n filters,\n ...(segment !== undefined ? { segment } : {}),\n ...(sort !== undefined ? { sort } : {}),\n ...(order !== undefined ? { order } : {}),\n ...(cursor !== undefined ? { cursor } : {}),\n ...(limit !== undefined ? { limit } : {}),\n ...(want_total !== undefined ? { want_total } : {}),\n });\n },\n async get(id, options) {\n const params = new URLSearchParams();\n if (options?.include_sales !== undefined)\n params.set(\"include_sales\", String(options.include_sales));\n if (options?.limit !== undefined) params.set(\"limit\", String(options.limit));\n if (options?.cursor != null) params.set(\"cursor\", options.cursor);\n const qs = params.toString();\n // `id` is the E.164 phone (`+1…`) — must be URL-encoded.\n return salesRequest<CustomerGetResult>(\n config,\n \"GET\",\n `/customers/${encodeURIComponent(id)}${qs ? `?${qs}` : \"\"}`,\n );\n },\n async summary(query) {\n const { range, since, until, timezone, compare_to, ...filters } = query ?? {};\n return salesRequest<CustomerKpis>(config, \"POST\", \"/customers/summary\", {\n filters,\n ...(range !== undefined ? { range } : {}),\n ...(since !== undefined ? { since } : {}),\n ...(until !== undefined ? { until } : {}),\n ...(timezone !== undefined ? { timezone } : {}),\n ...(compare_to !== undefined ? { compare_to } : {}),\n });\n },\n },\n\n business: {\n async config() {\n return salesRequest<BusinessConfig>(config, \"GET\", \"/business/config\");\n },\n },\n };\n}\n","import { z } from \"zod\";\n\n/**\n * Sales / Conversions wire schemas — the client-side source of truth.\n *\n * `saleCreateSchema` is mirrored by `SaleCreateSchema` in\n * `apps/api/src/schemas/tracking_sales.py` and enforced by the backend drift\n * test (the `resources` section of `events.schema.json`). Keep them in lockstep.\n *\n * Money is **integer minor units (cents)**; `quantity` is a decimal string;\n * `currency` is the required `SupportedCurrency` enum.\n */\n\nexport const SUPPORTED_CURRENCIES = [\"USD\", \"CAD\"] as const;\nexport type SupportedCurrency = (typeof SUPPORTED_CURRENCIES)[number];\n\nconst TRACKING_ENVIRONMENTS = [\"production\", \"development\"] as const;\n\nconst currencySchema = z.enum(SUPPORTED_CURRENCIES);\nconst centsSchema = z.number().int().nonnegative();\nconst quantitySchema = z.string().regex(/^\\d+(\\.\\d{1,3})?$/);\n// Free-form JSON object — the sale's extensibility escape hatch. Mirrors the\n// Pydantic `dict[str, Any]` (`additionalProperties: true`) on the wire.\nconst metadataSchema = z.record(z.unknown());\n\nexport const saleItemSchema = z\n .object({\n external_item_id: z.string().nullable().optional(),\n name: z.string().nullable().optional(),\n category: z.string().nullable().optional(),\n quantity: quantitySchema,\n unit_price_cents: centsSchema,\n // Non-negativity validated on the wire — same contract as the other cents\n // fields — and backstopped by the DB CHECK.\n unit_cost_cents: centsSchema.nullable().optional(),\n })\n .strict();\n\n// One service covered by a sale, at its own price. `service` is the per-business\n// service key, validated against the taxonomy by the backend at write time.\nexport const saleServiceSchema = z\n .object({\n service: z.string(),\n amount_cents: centsSchema,\n })\n .strict();\n\n// Raw customer identity. Stored as-is on the backend for human display in\n// dashboards; hashing happens at writeback-upload time in the future Google\n// Ads reconciliation worker (see docs/tracking-package/conversion-writeback.md).\n// The SDK never hashes — pass values straight through.\nconst customerNameSchema = z.string().max(200);\nconst customerPhoneSchema = z.string().max(64);\nconst customerEmailSchema = z.string().max(320).email();\n\n// The singular `service` (priced by `amount_total_cents`) and the plural\n// `services` (each priced individually) are mutually exclusive. When `services`\n// is present, `amount_total_cents` is optional and the backend derives it as the\n// sum; otherwise it is required. Shared by create + update.\nfunction refineServiceXor(\n val: {\n service?: string | null;\n services?: ReadonlyArray<{ service: string; amount_cents: number }> | null;\n amount_total_cents?: number | null;\n },\n ctx: z.RefinementCtx,\n { requireAmount }: { requireAmount: boolean },\n): void {\n if (val.services != null) {\n if (val.service != null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"pass either `service` or `services`, not both\",\n path: [\"services\"],\n });\n }\n if (val.services.length === 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"`services` must not be empty\",\n path: [\"services\"],\n });\n }\n const keys = val.services.map((s) => s.service);\n if (new Set(keys).size !== keys.length) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"`services` must not list the same service more than once\",\n path: [\"services\"],\n });\n }\n if (val.amount_total_cents != null) {\n const sum = val.services.reduce((acc, s) => acc + s.amount_cents, 0);\n if (val.amount_total_cents !== sum) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message:\n \"amount_total_cents must equal the sum of the services amounts \" +\n \"(omit it to derive it automatically)\",\n path: [\"amount_total_cents\"],\n });\n }\n }\n } else if (requireAmount && val.amount_total_cents == null) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: \"amount_total_cents is required unless `services` is provided\",\n path: [\"amount_total_cents\"],\n });\n }\n}\n\nexport const saleCreateSchema = z\n .object({\n external_id: z.string().nullable().optional(),\n description: z.string().nullable().optional(),\n service: z.string().nullable().optional(),\n services: z.array(saleServiceSchema).nullable().optional(),\n currency: currencySchema,\n // Optional only because the plural `services` form derives it from the sum\n // (see refineServiceXor); the singular/serviceless path still requires it.\n amount_total_cents: centsSchema.nullable().optional(),\n occurred_at: z.string().datetime(),\n environment: z.enum(TRACKING_ENVIRONMENTS).default(\"production\"),\n items: z.array(saleItemSchema).default([]),\n metadata: metadataSchema.nullable().optional(),\n customer_name: customerNameSchema.nullable().optional(),\n customer_phone: customerPhoneSchema.nullable().optional(),\n customer_email: customerEmailSchema.nullable().optional(),\n // CASL consent attestation: the customer agreed to receive SMS. Recorded\n // with a timestamp server-side; every SMS send path gates on it.\n sms_consent: z.boolean().default(false),\n })\n .strict()\n .superRefine((val, ctx) => refineServiceXor(val, ctx, { requireAmount: true }));\n\nexport const saleUpdateSchema = z\n .object({\n description: z.string().nullable().optional(),\n service: z.string().nullable().optional(),\n services: z.array(saleServiceSchema).nullable().optional(),\n currency: currencySchema.optional(),\n amount_total_cents: centsSchema.optional(),\n occurred_at: z.string().datetime().optional(),\n items: z.array(saleItemSchema).optional(),\n metadata: metadataSchema.nullable().optional(),\n customer_name: customerNameSchema.nullable().optional(),\n customer_phone: customerPhoneSchema.nullable().optional(),\n customer_email: customerEmailSchema.nullable().optional(),\n // NOT NULL server-side: omit to leave unchanged (explicit null is rejected).\n sms_consent: z.boolean().optional(),\n })\n .strict()\n .superRefine((val, ctx) => refineServiceXor(val, ctx, { requireAmount: false }));\n\nexport type SaleItemInput = z.input<typeof saleItemSchema>;\nexport type SaleServiceInput = z.input<typeof saleServiceSchema>;\n// Use the INPUT type so fields with Zod defaults (environment, items) and\n// occurred_at are optional for callers — the sales client fills them in.\nexport type SaleInput = z.input<typeof saleCreateSchema>;\nexport type SaleUpdateInput = z.input<typeof saleUpdateSchema>;\n\n// ---------------------------------------------------------------------------\n// Read shapes (server responses; not validated on the client)\n// ---------------------------------------------------------------------------\n\nexport interface SaleItem {\n id: string;\n external_item_id: string | null;\n name: string | null;\n category: string | null;\n quantity: string;\n unit_price_cents: number;\n unit_cost_cents: number | null;\n}\n\nexport interface SaleService {\n id: string;\n service_id: string;\n service_key: string;\n service_label: string;\n amount_cents: number;\n}\n\nexport interface Sale {\n id: string;\n business_id: string;\n business_name?: string | null;\n external_id: string | null;\n currency: SupportedCurrency;\n amount_total_cents: number;\n description: string | null;\n // Singular service fields are populated only for single-service sales (kept\n // for backwards compatibility); `services` is always the full set.\n service_id: string | null;\n service_key?: string | null;\n service_label?: string | null;\n services: SaleService[];\n occurred_at: string;\n environment: (typeof TRACKING_ENVIRONMENTS)[number];\n metadata: Record<string, unknown> | null;\n customer_name: string | null;\n customer_phone: string | null;\n customer_email: string | null;\n created_at: string;\n updated_at: string;\n items: SaleItem[];\n}\n\nexport interface SaleListPage {\n items: Sale[];\n total: number;\n}\n\nexport interface SaleCursorPage {\n items: Sale[];\n next_cursor: string | null;\n /** Populated only when `want_total` was requested (a single indexed COUNT). */\n total_count?: number;\n has_more?: boolean;\n}\n\n/**\n * Sortable columns on the secret-key (keyset) and admin (offset) list endpoints.\n * `business_name` only applies to the cross-business admin list — it sorts the\n * joined `businesses.name` column.\n */\nexport type SaleSortField =\n | \"occurred_at\"\n | \"created_at\"\n | \"amount_total_cents\"\n | \"customer_name\"\n | \"business_name\";\n\nexport type SaleSortOrder = \"asc\" | \"desc\";\n\n/**\n * Comprehensive filter shape mirrored from the backend's `SaleQueryFilters`.\n *\n * `search` runs case-insensitively across `customer_name`, `customer_phone`,\n * `customer_email`, `description`, and `external_id` — the human-facing\n * columns. `service_id` is the resolved per-business service UUID (different\n * from the create-time `service` *key*).\n */\nexport interface SaleFilters {\n business_id?: string;\n external_id?: string;\n service_id?: string;\n /** E.164 phone — the canonical customer key; filters sales for one customer. */\n customer_phone?: string;\n currency?: SupportedCurrency;\n environment?: (typeof TRACKING_ENVIRONMENTS)[number];\n since?: string;\n until?: string;\n min_amount_cents?: number;\n max_amount_cents?: number;\n search?: string;\n}\n\n/**\n * Full query input for `SalesClient.list()` — filters + pagination.\n *\n * Pagination is **keyset (cursor)**: `next_cursor` returned by one page is\n * passed back as `cursor` on the next. `null` / undefined cursor = first page.\n *\n * Ordering on this endpoint is fixed at **`occurred_at DESC, id DESC`** — the\n * cursor encodes a position in that index, so a different sort would\n * invalidate cursors mid-pagination. For ad-hoc sorted reads use the\n * dashboard admin endpoint, which is offset-paginated.\n */\nexport interface SaleListQuery extends SaleFilters {\n limit?: number;\n cursor?: string | null;\n}\n\n/** Keyset-safe sort columns (NOT-NULL, indexed). */\nexport type SaleKeysetSortField = \"occurred_at\" | \"created_at\" | \"amount_total_cents\";\n\n/** v2 list query — adds server sort + opt-in total. */\nexport interface SaleListQueryV2 extends SaleListQuery {\n sort?: SaleKeysetSortField;\n order?: SaleSortOrder;\n /** Opt-in: a single indexed COUNT over the filtered set. */\n want_total?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Sales summary (aggregations). Read by `SalesClient.summary()`. Every monetary\n// figure is grouped **by currency** — USD and CAD cents are never summed into a\n// single total. Money stays integer cents; only `quantity` is a decimal string.\n// ---------------------------------------------------------------------------\n\nexport const TRACKING_RANGES = [\"24h\", \"7d\", \"30d\"] as const;\nexport type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];\n\n/** Query input for `SalesClient.summary()` — filters + range + options. */\nexport interface SaleSummaryQuery extends SaleFilters {\n range: TrackingOverviewRange;\n /** Include the per-category line-item breakdown (extra join; default false). */\n include_categories?: boolean;\n /** Surface soft-deleted services individually (flagged \"(deleted)\") instead of\n * rolling them into a single \"Deleted services\" bucket. Default false. */\n include_deleted_services?: boolean;\n /** Cap on the by-service / by-category rows (1–50, default 10). */\n top_n?: number;\n}\n\nexport interface CurrencyRevenue {\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n average_order_value_cents: number;\n}\n\nexport interface SalesServiceBreakdown {\n service_id: string | null;\n service_key: string | null;\n /** \"Unassigned\" when the sale has no service. */\n service_label: string | null;\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n}\n\nexport interface SalesCategoryBreakdown {\n category: string | null;\n currency: SupportedCurrency;\n /** sum(unit_price_cents * quantity) — advisory, not authoritative. */\n revenue_cents: number;\n /** Decimal string. */\n quantity: string;\n}\n\nexport interface SalesTrendPoint {\n bucket_start: string;\n currency: SupportedCurrency;\n sale_count: number;\n revenue_cents: number;\n}\n\nexport interface SaleSummary {\n range: TrackingOverviewRange;\n business_id: string | null;\n metrics: {\n sale_count: number;\n distinct_customers: number;\n by_currency: CurrencyRevenue[];\n };\n by_service: SalesServiceBreakdown[];\n by_currency: CurrencyRevenue[];\n by_category: SalesCategoryBreakdown[];\n series: SalesTrendPoint[];\n}\n\n// ---------------------------------------------------------------------------\n// v2 dashboard surface (additive, back-compat). Reads only → plain interfaces,\n// not drift-checked. Legacy `24h/7d/30d` callers get the same numbers; new\n// ranges/options layer on tz-correct calendar windows + comparisons.\n// ---------------------------------------------------------------------------\n\nexport const NAMED_RANGES = [\n \"today\",\n \"yesterday\",\n \"wtd\",\n \"mtd\",\n \"qtd\",\n \"ytd\",\n \"24h\",\n \"7d\",\n \"30d\",\n \"90d\",\n \"custom\",\n] as const;\n/** Superset of `TrackingOverviewRange` (`24h`/`7d`/`30d` stay valid). */\nexport type NamedRange = (typeof NAMED_RANGES)[number];\nexport type Granularity = \"hour\" | \"day\" | \"week\" | \"month\" | \"auto\";\nexport type CompareTo = \"previous_period\" | \"previous_year\" | \"none\";\n\nexport interface DistinctCustomersByCurrency {\n currency: SupportedCurrency;\n distinct_customers: number;\n}\n\nexport interface SummaryWindow {\n since: string;\n until: string;\n}\n\nexport interface SummaryCurrencyDelta {\n currency: SupportedCurrency;\n revenue_cents_delta: number;\n /** Ratio (0.12 = +12%); null when previous revenue was 0. */\n revenue_pct_delta: number | null;\n sale_count_delta: number;\n}\n\nexport interface SummaryDeltas {\n by_currency: SummaryCurrencyDelta[];\n sale_count_delta: number;\n distinct_customers_delta: number;\n}\n\nexport interface SaleSummaryPrevious {\n window: SummaryWindow;\n metrics: SaleSummaryV2[\"metrics\"];\n by_currency: CurrencyRevenue[];\n series: SalesTrendPoint[];\n}\n\n/** Query input for `SalesClient.summary()` v2 — widened range + tz/compare options. */\nexport interface SaleSummaryQueryV2 extends SaleFilters {\n range?: NamedRange;\n /** Required when `range === 'custom'`. */\n since?: string;\n until?: string;\n /** IANA tz, e.g. `America/Toronto`. Default = business tz. */\n timezone?: string;\n granularity?: Granularity;\n compare_to?: CompareTo;\n include_categories?: boolean;\n include_deleted_services?: boolean;\n top_n?: number;\n}\n\n/** Superset of `SaleSummary` (assignable to it). */\nexport interface SaleSummaryV2 extends Omit<SaleSummary, \"range\" | \"metrics\"> {\n range: NamedRange;\n metrics: SaleSummary[\"metrics\"] & {\n distinct_customers_by_currency: DistinctCustomersByCurrency[];\n };\n timezone: string | null;\n window: SummaryWindow | null;\n granularity: string | null;\n previous: SaleSummaryPrevious | null;\n deltas: SummaryDeltas | null;\n}\n\n// ---------------------------------------------------------------------------\n// Customers — phone-keyed (a customer IS their E.164 phone). `customer_id` is\n// the E.164 string. Money is per-currency, never summed.\n// ---------------------------------------------------------------------------\n\nexport type CustomerSegment = \"new\" | \"returning\" | \"repeat\" | \"lapsed\";\nexport type CustomerSortField = \"total_spent\" | \"last_purchase\" | \"purchases\" | \"first_purchase\";\n\nexport interface CustomerCurrencyTotal {\n currency: SupportedCurrency;\n revenue_cents: number;\n sale_count: number;\n average_order_value_cents: number;\n}\n\nexport interface CustomerSummary {\n /** The E.164 phone — the canonical customer id. */\n customer_id: string;\n display_name: string | null;\n email: string | null;\n phone: string;\n first_purchase_at: string;\n last_purchase_at: string;\n purchase_count: number;\n segment: CustomerSegment;\n totals: CustomerCurrencyTotal[];\n}\n\nexport type CustomerProfile = CustomerSummary;\n\nexport interface CustomerListQuery extends Omit<SaleFilters, \"external_id\"> {\n segment?: CustomerSegment;\n sort?: CustomerSortField;\n order?: SaleSortOrder;\n cursor?: string | null;\n limit?: number;\n want_total?: boolean;\n}\n\nexport interface CustomerListPage {\n items: CustomerSummary[];\n next_cursor: string | null;\n total_count: number | null;\n}\n\nexport interface CustomerGetOptions {\n include_sales?: boolean;\n limit?: number;\n cursor?: string | null;\n}\n\nexport interface CustomerGetResult {\n customer: CustomerProfile;\n /** Present only when `include_sales: true` (and a business-scoped key). */\n sales?: SaleCursorPage | null;\n}\n\nexport interface CustomerSummaryQuery extends SaleFilters {\n range?: NamedRange;\n since?: string;\n until?: string;\n timezone?: string;\n compare_to?: CompareTo;\n}\n\nexport interface CustomerSegmentCount {\n segment: CustomerSegment;\n count: number;\n}\n\nexport interface CustomerCurrencyDelta {\n currency: SupportedCurrency;\n revenue_cents_delta: number;\n /** Ratio (0.12 = +12%); null when previous revenue was 0. */\n revenue_pct_delta: number | null;\n}\n\nexport interface CustomerKpisDeltas {\n total_customers_delta: number;\n new_customers_delta: number;\n returning_customers_delta: number;\n repeat_rate_delta: number;\n ltv_by_currency: CustomerCurrencyDelta[];\n}\n\nexport interface CustomerKpisPrevious {\n window_since: string;\n window_until: string;\n total_customers: number;\n new_customers: number;\n returning_customers: number;\n repeat_rate: number;\n ltv_by_currency: CustomerCurrencyTotal[];\n}\n\nexport interface CustomerKpis {\n range: NamedRange;\n timezone: string;\n window_since: string;\n window_until: string;\n total_customers: number;\n new_customers: number;\n returning_customers: number;\n repeat_rate: number;\n by_segment: CustomerSegmentCount[];\n ltv_by_currency: CustomerCurrencyTotal[];\n /** Present only when `compare_to` is set. */\n previous?: CustomerKpisPrevious | null;\n deltas?: CustomerKpisDeltas | null;\n}\n\n// ---------------------------------------------------------------------------\n// Business config — supersets `fetchServices()`.\n// ---------------------------------------------------------------------------\n\nexport interface BusinessConfigService {\n key: string;\n label: string;\n archived: boolean;\n}\n\nexport interface BusinessConfigFeatures {\n customers: boolean;\n comparisons: boolean;\n retention: boolean;\n}\n\nexport interface BusinessConfig {\n business_id: string;\n display_name: string;\n timezone: string;\n primary_currency: SupportedCurrency;\n currencies: SupportedCurrency[];\n default_phone_country: string | null;\n services: BusinessConfigService[];\n features: BusinessConfigFeatures;\n}\n"],"mappings":"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C,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,KAAK,KAAK,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,GAAK,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,KAAK,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAAM,CAAC,IAAI,EAAE,IAA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","names":["src_exports","__export","src_default","init","version","CONSENT_STATE_KEY","CONSENT_TIMESTAMP_KEY","CONSENT_EXPIRES_AT_KEY","DEFAULT_CHOICE","changeListeners","notifyConsentChanged","choice","listener","changeListeners","buildConsentPayload","state","getConsentChoice","DEFAULT_CHOICE","stored","CONSENT_STATE_KEY","updatedAt","CONSENT_TIMESTAMP_KEY","expiresAt","CONSENT_EXPIRES_AT_KEY","getConsentState","pushConsentToPlatforms","setConsentState","options","requestedTtl","ttlDays","optIn","optOut","resetConsent","TRACKING_PARAM_KEYS","createEmptyTrackingParams","normalizeTrackingCookieValue","value","getTrackingParamsFromCookieReader","readCookie","params","key","getTrackingQueryValues","searchParams","FALLBACK_STORAGE_PREFIX","fallbackKey","name","persistCookieValue","maxAgeSeconds","encoded","readCookieValue","match","cookie","rawValue","stored","getCookieValueFromDocument","setTrackingCookie","mergeTrackingParams","primary","fallback","merged","persistTrackingParamsFromSearchParams","trackingValues","captureTrackingParamsFromLocation","url","resolvedUrl","GTAG_SCRIPT_HOST","TRACKING_SCRIPT_ATTRIBUTE","getScriptMarker","id","GTAG_ID_PATTERN","isValidGtagId","ensureGtagFunction","gtag","SEND_TO_RE","isValidSendTo","sendTo","fireGtagConversion","input","params","applyDefaultConsentState","buildConsentPayload","getConsentState","loadGtagScript","gtagId","marker","getScriptMarker","TRACKING_SCRIPT_ATTRIBUTE","script","GTAG_SCRIPT_HOST","initializeGtag","bootstrapGoogleAdsTracking","gtagId","isValidGtagId","applyDefaultConsentState","loadGtagScript","initializeGtag","bootstrapMultipleGtags","gtagIds","ids","id","gtag","ensureGtagFunction","FB_EVENTS_SCRIPT_HOST","FBC_COOKIE","FBP_COOKIE","META_PIXEL_ID_PATTERN","isValidMetaPixelId","id","computeFbSubdomainIndex","hostname","labels","buildFbc","fbclid","now","host","getFbcCookie","readCookieValue","getFbpCookie","readFbclidFromUrl","value","captureFbc","persistCookieValue","getScriptMarker","ensureFbqFunction","w","fbq","args","applyDefaultMetaConsentState","getConsentState","loadFbeventsScript","marker","TRACKING_SCRIPT_ATTRIBUTE","script","initializeMetaPixel","pixelId","bootstrapMetaPixel","pixelId","isValidMetaPixelId","applyDefaultMetaConsentState","loadFbeventsScript","initializeMetaPixel","captureFbc","bootstrapMultiplePixels","pixelIds","ids","id","fbq","ensureFbqFunction","LANDING_STORAGE_KEY","memoryRecord","sanitizeParams","value","source","TRACKING_PARAM_KEYS","params","key","entry","readStoredRecord","raw","parsed","writeRecord","record","captureFromUrl","url","resolved","getTrackingQueryValues","getOrCaptureLandingParams","sessionId","stored","buildLandingPayloadFields","override","DEDUP_PREFIX","dedupKey","input","alreadyFired","markFired","fireOnce","fireGtagConversion","fireConversionWithConsent","getConsentState","isStringMap","value","v","parseFiring","f","parseTrigger","t","spec","parseConversionConfig","raw","obj","services","entry","goalsRaw","goals","g","s","CACHE_PREFIX","cacheKey","url","readCache","parsed","config","writeCache","resolveConversionConfig","options","cached","current","etag","goalsByKey","resolveListeners","rebuildIndex","goal","notifyResolved","listeners","listener","adopt","next","nextEtag","wasEmpty","revalidate","doFetch","headers","response","key","MINOR_UNIT_EXPONENT","exponentFor","currency","fromMinor","cents","currency","exponentFor","thresholdMet","goal","eventType","metadata","t","currentPath","MAX_BUFFERED_EVENTS","createConversionAutoFire","store","pending","subscribed","fireMatching","firing","cents","currency","fireConversionWithConsent","fromMinor","buffered","event","withConversionAutoFire","client","autoFire","input","VISITOR_STORAGE_KEY","SESSION_STORAGE_KEY","SESSION_IDLE_MS","safeUuid","readLocalStorage","key","writeLocalStorage","value","getVisitorId","existing","fresh","getOrRotateSessionId","now","raw","parsed","refreshed","external_exports","__export","BRAND","DIRTY","EMPTY_PATH","INVALID","NEVER","OK","ParseStatus","ZodType","ZodAny","ZodArray","ZodBigInt","ZodBoolean","ZodBranded","ZodCatch","ZodDate","ZodDefault","ZodDiscriminatedUnion","ZodEffects","ZodEnum","ZodError","ZodFirstPartyTypeKind","ZodFunction","ZodIntersection","ZodIssueCode","ZodLazy","ZodLiteral","ZodMap","ZodNaN","ZodNativeEnum","ZodNever","ZodNull","ZodNullable","ZodNumber","ZodObject","ZodOptional","ZodParsedType","ZodPipeline","ZodPromise","ZodReadonly","ZodRecord","ZodSet","ZodString","ZodSymbol","ZodTuple","ZodUndefined","ZodUnion","ZodUnknown","ZodVoid","addIssueToContext","anyType","arrayType","bigIntType","booleanType","coerce","custom","dateType","datetimeRegex","en_default","discriminatedUnionType","effectsType","enumType","functionType","getErrorMap","getParsedType","instanceOfType","intersectionType","isAborted","isAsync","isDirty","isValid","late","lazyType","literalType","makeIssue","mapType","nanType","nativeEnumType","neverType","nullType","nullableType","numberType","objectType","objectUtil","oboolean","onumber","optionalType","ostring","pipelineType","preprocessType","promiseType","quotelessJson","recordType","setType","setErrorMap","strictObjectType","stringType","symbolType","tupleType","undefinedType","unionType","unknownType","util","voidType","util","_","assertIs","_arg","assertNever","_x","items","obj","item","validKeys","k","filtered","e","object","keys","key","arr","checker","val","joinValues","array","separator","value","objectUtil","first","second","ZodParsedType","getParsedType","data","ZodIssueCode","util","quotelessJson","obj","ZodError","_ZodError","issues","sub","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","error","curr","i","el","value","formErrors","firstEl","errorMap","issue","_ctx","message","ZodIssueCode","ZodParsedType","util","en_default","overrideErrorMap","en_default","setErrorMap","map","overrideErrorMap","getErrorMap","makeIssue","params","data","path","errorMaps","issueData","fullPath","fullIssue","errorMessage","maps","m","map","EMPTY_PATH","addIssueToContext","ctx","overrideMap","getErrorMap","issue","en_default","x","ParseStatus","_ParseStatus","status","results","arrayValue","s","INVALID","pairs","syncPairs","pair","key","value","finalObject","DIRTY","OK","isAborted","isDirty","isValid","isAsync","errorUtil","message","ParseInputLazyPath","parent","value","path","key","handleResult","ctx","result","isValid","error","ZodError","processCreateParams","params","errorMap","invalid_type_error","required_error","description","iss","message","ZodType","input","getParsedType","ParseStatus","isAsync","data","err","maybeAsyncResult","check","getIssueProperties","val","setError","ZodIssueCode","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","def","ZodOptional","ZodNullable","ZodArray","ZodPromise","option","ZodUnion","incoming","ZodIntersection","transform","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","target","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","jwtRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv4CidrRegex","ipv6Regex","ipv6CidrRegex","base64Regex","base64urlRegex","dateRegexSource","dateRegex","timeRegexSource","args","secondsRegexSource","secondsQuantifier","timeRegex","datetimeRegex","regex","opts","isValidIP","ip","version","isValidJWT","jwt","alg","header","base64","decoded","isValidCidr","ZodString","_ZodString","ZodParsedType","addIssueToContext","INVALID","status","tooBig","tooSmall","util","validation","errorUtil","options","minLength","maxLength","len","ch","min","max","floatSafeRemainder","step","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","_ZodNumber","kind","inclusive","ZodBigInt","_ZodBigInt","ZodBoolean","OK","ZodDate","_ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","_ZodArray","item","i","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","_ZodObject","shape","keys","shapeKeys","extraKeys","pairs","keyValidator","unknownKeys","catchall","syncPairs","pair","issue","defaultError","augmentation","merging","index","mask","newField","createZodEnum","handleResults","results","unionErrors","childCtx","dirty","issues","types","getDiscriminator","type","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","_ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","a","b","aType","bType","bKeys","sharedKeys","newObj","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","isAborted","merged","isDirty","left","right","_ZodTuple","items","itemIndex","x","rest","schemas","ZodRecord","_ZodRecord","keyType","valueType","first","second","third","ZodMap","finalMap","ZodSet","_ZodSet","finalizeSet","elements","parsedSet","element","minSize","maxSize","size","ZodFunction","_ZodFunction","makeArgsIssue","makeIssue","getErrorMap","en_default","makeReturnsIssue","returns","fn","me","parsedArgs","e","parsedReturns","returnType","func","getter","values","_ZodEnum","expectedValues","enumValues","newDef","opt","nativeEnumValues","promisified","effect","checkCtx","arg","processed","DIRTY","executeRefinement","acc","inner","base","preprocess","ZodOptional","ZodType","input","ZodParsedType","OK","type","params","ZodFirstPartyTypeKind","processCreateParams","ZodNullable","ZodDefault","ctx","data","ZodCatch","newCtx","result","isAsync","ZodError","ZodNaN","addIssueToContext","ZodIssueCode","INVALID","BRAND","ZodBranded","ZodPipeline","_ZodPipeline","status","inResult","DIRTY","a","b","ZodReadonly","freeze","isValid","cleanParams","p","custom","check","_params","fatal","ZodAny","r","_fatal","late","ZodObject","ZodFirstPartyTypeKind","instanceOfType","cls","params","custom","data","stringType","ZodString","numberType","ZodNumber","nanType","ZodNaN","bigIntType","ZodBigInt","booleanType","ZodBoolean","dateType","ZodDate","symbolType","ZodSymbol","undefinedType","ZodUndefined","nullType","ZodNull","anyType","ZodAny","unknownType","ZodUnknown","neverType","ZodNever","voidType","ZodVoid","arrayType","ZodArray","objectType","ZodObject","strictObjectType","unionType","ZodUnion","discriminatedUnionType","ZodDiscriminatedUnion","intersectionType","ZodIntersection","tupleType","ZodTuple","recordType","ZodRecord","mapType","ZodMap","setType","ZodSet","functionType","ZodFunction","lazyType","ZodLazy","literalType","ZodLiteral","enumType","ZodEnum","nativeEnumType","ZodNativeEnum","promiseType","ZodPromise","effectsType","ZodEffects","optionalType","ZodOptional","nullableType","ZodNullable","preprocessType","pipelineType","ZodPipeline","ostring","onumber","oboolean","coerce","arg","NEVER","INVALID","pageViewMetadataSchema","external_exports","pageViewConfigSchema","LAST_FIRED_URL_STORAGE_KEY","lastFiredUrl","lastFiredUrlHydrated","readSessionStorage","key","writeSessionStorage","value","getLastFiredUrl","lastFiredUrlHydrated","stored","readSessionStorage","LAST_FIRED_URL_STORAGE_KEY","lastFiredUrl","setLastFiredUrl","url","writeSessionStorage","buildPageViewMetadata","referrerOverride","pageViewMetadataSchema","fireManualPageView","client","currentHref","previousFiredUrl","getLastFiredUrl","internalReferrer","externalReferrer","metadata","setLastFiredUrl","attachBfcacheRestore","handlePageShow","event","attachAutoPageView","options","lastPath","maybeFire","current","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","serializeValue","value","out","k","v","buildHeartbeatMetadata","surface","sdkVersion","packageName","triggers","gtagIds","automaticNames","manualNames","triggerConfig","cfg","name","config","serialized","DEFAULT_FLUSH_INTERVAL_MS","DEFAULT_MAX_QUEUE_SIZE","HARD_MAX_BATCH","API_KEY_HEADER","SDK_VERSION_HEADER","SDK_PACKAGE_HEADER","SDK_SURFACE_HEADER","SDK_ENVIRONMENT_HEADER","buildContext","surface","sdkVersion","packageName","environment","activeGtagIds","readTrackingParams","createEmptyTrackingParams","captureTrackingParamsFromLocation","getTrackingParamsFromCookieReader","getCookieValueFromDocument","consentSnapshot","choice","getConsentChoice","postWithFetch","url","body","apiKey","identity","keepalive","createTrackingClient","config","flushIntervalMs","DEFAULT_FLUSH_INTERVAL_MS","maxQueueSize","DEFAULT_MAX_QUEUE_SIZE","HARD_MAX_BATCH","sdkVersion","packageName","environment","activeGtagIds","eventsUrl","identityHeaders","queue","flushTimer","firstPage","initialParams","createEmptyTrackingParams","destroyed","visitorId","getVisitorId","initialSession","getOrRotateSessionId","sessionId","captureTrackingParamsFromLocation","getOrCaptureLandingParams","captureFbc","enqueueHeartbeat","metadata","buildHeartbeatMetadata","buildSessionPayload","rotated","params","mergeTrackingParams","readTrackingParams","context","buildContext","getFbcCookie","getFbpCookie","buildLandingPayloadFields","consentSnapshot","scheduleFlush","flush","clearScheduledFlush","events","body","serialized","postWithFetch","trackEvent","input","occurredAt","flushOnUnload","ctaClickMetadataSchema","external_exports","ctaClickConfigSchema","sdkHeartbeatTriggersSchema","external_exports","sdkHeartbeatMetadataSchema","sdkHeartbeatConfigSchema","formStartMetadataSchema","external_exports","formStartConfigSchema","jsonValueSchema","external_exports","formSubmitMetadataSchema","formSubmitConfigSchema","multiPageSessionMetadataSchema","external_exports","multiPageSessionConfigSchema","pageExitMetadataSchema","external_exports","pageExitConfigSchema","phoneClickMetadataSchema","external_exports","phoneClickConfigSchema","scrollDepthMetadataSchema","external_exports","scrollDepthConfigSchema","SPECIFIC_PAGE_NAMES","specificPageNameSchema","external_exports","specificPageVisitMetadataSchema","specificPageVisitConfigSchema","value","timeOnSiteMetadataSchema","external_exports","timeOnSiteConfigSchema","EVENT_REGISTRY","pageViewMetadataSchema","pageViewConfigSchema","timeOnSiteMetadataSchema","timeOnSiteConfigSchema","specificPageVisitMetadataSchema","specificPageVisitConfigSchema","scrollDepthMetadataSchema","scrollDepthConfigSchema","multiPageSessionMetadataSchema","multiPageSessionConfigSchema","formStartMetadataSchema","formStartConfigSchema","sdkHeartbeatMetadataSchema","sdkHeartbeatConfigSchema","pageExitMetadataSchema","pageExitConfigSchema","formSubmitMetadataSchema","formSubmitConfigSchema","phoneClickMetadataSchema","phoneClickConfigSchema","ctaClickMetadataSchema","ctaClickConfigSchema","ALL_AUTOMATIC_EVENT_NAMES","def","name","ALL_MANUAL_EVENT_NAMES","getEventDefinition","attachTimeOnSite","client","config","thresholdMs","accumulatedMs","activeSince","timer","fired","fire","scheduleNext","remaining","clearTimer","onVisibilityChange","attachSpecificPageVisit","client","config","pages","firedSet","check","path","name","pathPattern","key","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachScrollDepth","client","config","thresholds","firedForPath","currentPath","rafId","getScrollPercent","doc","scrollTop","scrollHeight","clientHeight","checkThresholds","percent","threshold","onScroll","resetIfPathChanged","newPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","STORAGE_KEY","SESSION_KEY","FIRED_KEY","getSessionStorage","attachMultiPageSession","client","config","storage","pageThreshold","lastCheckedPath","getDistinctPaths","raw","saveDistinctPaths","paths","resetIfSessionChanged","currentSession","getOrRotateSessionId","hasFired","check","currentPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachFormStart","client","config","selector","firedForms","currentPath","getFormKey","form","explicitAction","onFocusIn","event","target","key","resetIfPathChanged","newPath","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","attachPageExit","client","currentPath","activeSince","accumulatedMs","maxScrollPercent","rafId","getScrollPercent","doc","scrollTop","scrollHeight","clientHeight","onScroll","percent","settledDwellMs","total","emitSegment","path","flush","dwell","onNavigate","newPath","onVisibilityChange","onPageHide","originalPushState","originalReplaceState","patchedPushState","args","patchedReplaceState","DEFAULT_CTA_SELECTOR","describeElement","el","tag","resolveCtaName","explicit","text","attachCtaClickCapture","client","config","autoCapture","selector","DEFAULT_CTA_SELECTOR","onClick","event","target","matched","href","metadata_min_json_default","withMetadataArgument","func","_arguments","args","metadata_min_json_default","semver_compare_default","a","b","split","pa","pb","i","na","Number","nb","isNaN","objectConstructor","constructor","isObject","object","CALLING_CODE_REG_EXP","isCallingCode","string","test","V3","V4","DEFAULT_EXT_PREFIX","Metadata","metadata","_classCallCheck","validateMetadata","setVersion","call","_createClass","key","value","Object","keys","countries","filter","_","countryCode","v1","v2","v3","nonGeographic","nonGeographical","country","getCountryMetadata","undefined","callingCode","getCountryCodesForCallingCode","countryCodes","countryCallingCodes","length","selectNumberingPlan","argument","legacyArgumentCallingCode","isCallingCode","countryMetadata","Error","concat","numberingPlan","NumberingPlan","hasCallingCode","getNumberingPlanMetadata","getCountryCodeForCallingCode","IDDPrefix","defaultIDDPrefix","nationalNumberPattern","possibleLengths","formats","nationalPrefixForParsing","nationalPrefixTransformRule","leadingDigits","hasTypes","type","ext","country_phone_code_to_countries","country_calling_codes","NumberingPlan","metadata","globalMetadataObject","_classCallCheck","setVersion","call","_createClass","key","value","getNumberingPlanMetadata","callingCode","_getDefaultCountryMetadataForThisCallingCode","v1","v2","_this","formats","_getFormats","map","_","Format","_getNationalPrefixFormattingRule","_nationalPrefixForParsing","nationalPrefix","_getNationalPrefixIsOptionalWhenFormatting","types","length","type","hasTypes","getType","Type","DEFAULT_EXT_PREFIX","format","_format","nationalPrefixFormattingRule","nationalPrefixIsOptionalWhenFormattingInNationalFormat","usesNationalPrefix","FIRST_GROUP_ONLY_PREFIX_PATTERN","test","possibleLengths","validateMetadata","Error","isObject","countries","concat","Object","keys","join","typeOf","_typeof","getCountryCallingCode","country","metadataJson","metadata","Metadata","hasCountry","selectNumberingPlan","countryCallingCode","Error","concat","isSupportedCountry","countries","hasOwnProperty","setVersion","version","v1","v2","v3","v4","compare","V3","V4","mergeArrays","a","b","merged","slice","_iterator","_createForOfIteratorHelperLoose","_step","done","element","value","indexOf","push","sort","checkNumberLength","nationalNumber","country","metadata","checkNumberLengthForType","undefined","type","Metadata","selectNumberingPlan","type_info","possible_lengths","possibleLengths","mobile_type","mergeArrays","actual_length","length","minimum_length","indexOf","isPossiblePhoneNumber","input","options","metadataJson","undefined","metadata","Metadata","v2","countryCallingCode","Error","selectNumberingPlan","country","phone","hasCountry","concat","possibleLengths","isPossibleNumber","nationalNumber","isNonGeographicCallingCode","checkNumberLength","matchesEntirely","text","regularExpressionText","RegExp","test","NON_FIXED_LINE_PHONE_TYPES","getNumberType","input","options","metadataJson","country","countryCallingCode","metadata","Metadata","selectNumberingPlan","nationalNumber","v2","phone","matchesEntirely","nationalNumberPattern","isNumberTypeEqualTo","type","pattern","_iterator","_createForOfIteratorHelperLoose","_step","done","value","typeDefinition","possibleLengths","indexOf","length","isValidNumber","input","options","metadataJson","metadata","Metadata","selectNumberingPlan","country","countryCallingCode","hasTypes","getNumberType","undefined","nationalNumber","v2","phone","matchesEntirely","nationalNumberPattern","COUNTRY_CODE_REG_EXP","isCountryCode","string","test","USE_NON_GEOGRAPHIC_COUNTRY_CODE","getCountryAndCallingCodeFromOneOfThem","countryOrCallingCode","metadataJson","country","callingCode","metadata","Metadata","isCountryCode","selectNumberingPlan","countryCallingCode","isNonGeographicCallingCode","getPossibleCountriesForNumber","callingCode","nationalNumber","metadata","_metadata","Metadata","possibleCountries","getCountryCodesForCallingCode","filter","country","couldNationalNumberBelongToCountry","metadataJson","selectNumberingPlan","numberingPlan","possibleLengths","indexOf","length","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","VALID_DIGITS","DASHES","SLASHES","DOTS","WHITESPACE","BRACKETS","TILDES","VALID_PUNCTUATION","concat","PLUS_CHARS","CAPTURING_DIGIT_PATTERN","RegExp","VALID_DIGITS","stripIddPrefix","number","country","callingCode","metadataJson","metadata","Metadata","selectNumberingPlan","IDDPrefixPattern","IDDPrefix","search","slice","match","length","matchedGroups","extractNationalNumberFromPossiblyIncompleteNumber","number","metadata","numberingPlan","nationalPrefixForParsing","prefixPattern","RegExp","prefixMatch","exec","nationalNumber","carrierCode","capturedGroupsCount","length","hasCapturedGroups","nationalPrefixTransformRule","replace","prefixBeforeNationalNumber","slice","nationalPrefix","possiblePositionOfTheFirstCapturedGroup","indexOf","possibleNationalPrefix","getCountryByNationalNumber","nationalNumber","countries","metadataJson","metadata","Metadata","_iterator","_createForOfIteratorHelperLoose","_step","done","country","value","selectNumberingPlan","leadingDigits","search","getNumberType","phone","undefined","USE_NON_GEOGRAPHIC_COUNTRY_CODE","getCountryByCallingCode","callingCode","_ref","nationalNumber","metadata","isNonGeographicCallingCode","possibleCountries","getCountryCodesForCallingCode","length","getCountryByNationalNumber","extractNationalNumber","number","country","metadata","_extractNationalNumbe","extractNationalNumberFromPossiblyIncompleteNumber","carrierCode","nationalNumber","shouldHaveExtractedNationalPrefix","numberingPlan","possibleLengths","getCountryByCallingCode","callingCode","isPossibleIncompleteNationalNumber","nationalNumberBefore","nationalNumberAfter","matchesEntirely","nationalNumberPattern","checkNumberLength","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","number","country","defaultCountry","defaultCallingCode","metadataJson","countryCallingCode","getCountryCallingCode","indexOf","metadata","Metadata","selectNumberingPlan","possibleShorterNumber","slice","length","_extractNationalNumbe","extractNationalNumber","undefined","possibleShorterNationalNumber","nationalNumber","_extractNationalNumbe2","matchesEntirely","nationalNumberPattern","checkNumberLength","extractCountryCallingCode","number","country","defaultCountry","defaultCallingCode","metadataJson","isNumberWithIddPrefix","numberWithoutIDD","stripIddPrefix","_extractCountryCallin","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","countryCallingCode","shorterNumber","countryCallingCodeSource","metadata","Metadata","i","MAX_LENGTH_COUNTRY_CODE","length","slice","hasCallingCode","selectNumberingPlan","applyInternationalSeparatorStyle","formattedNumber","replace","RegExp","concat","VALID_PUNCTUATION","trim","FIRST_GROUP_PATTERN","formatNationalNumberUsingFormat","number","format","_ref","useInternationalFormat","withNationalPrefix","carrierCode","metadata","formattedNumber","replace","RegExp","pattern","internationalFormat","nationalPrefixFormattingRule","applyInternationalSeparatorStyle","SINGLE_IDD_PREFIX_REG_EXP","getIddPrefix","country","callingCode","metadata","countryMetadata","Metadata","selectNumberingPlan","defaultIDDPrefix","test","IDDPrefix","RFC3966_EXTN_PREFIX","getExtensionDigitsPattern","maxLength","concat","VALID_DIGITS","createExtensionPattern","purpose","extLimitAfterExplicitLabel","extLimitAfterLikelyLabel","extLimitAfterAmbiguousChar","extLimitWhenNotSure","possibleSeparatorsBetweenNumberAndExtLabel","possibleCharsAfterExtLabel","optionalExtnSuffix","explicitExtLabels","ambiguousExtLabels","ambiguousSeparator","possibleSeparatorsNumberExtLabelNoComma","autoDiallingAndExtLabelsFound","rfcExtn","explicitExtn","ambiguousExtn","americanStyleExtnWithSuffix","autoDiallingExtn","onlyCommasExtn","MIN_LENGTH_PHONE_NUMBER_PATTERN","VALID_DIGITS","MIN_LENGTH_FOR_NSN","VALID_PHONE_NUMBER","PLUS_CHARS","VALID_PUNCTUATION","VALID_PHONE_NUMBER_START_REG_EXP","RegExp","VALID_PHONE_NUMBER_WITH_EXTENSION","createExtensionPattern","VALID_PHONE_NUMBER_PATTERN","isViablePhoneNumber","number","length","test","isViablePhoneNumberStart","formatRFC3966","_ref","number","ext","Error","concat","DEFAULT_OPTIONS","formatExtension","formattedNumber","extension","metadata","concat","ext","formatNumber","input","format","options","metadataJson","merge","Metadata","country","hasCountry","Error","selectNumberingPlan","countryCallingCode","phone","nationalNumber","v2","number","formatNationalNumber","carrierCode","addExtension","formatRFC3966","fromCountry","formatIDD","formatAs","chooseFormatForNumber","formats","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefix","availableFormats","pickFirstMatchingElement","leadingDigitsPatterns","length","lastLeadingDigitsPattern","search","matchesEntirely","pattern","fromCountryCallingCode","getCountryCallingCode","iddPrefix","getIddPrefix","undefined","i","_len","arguments","objects","Array","_key","key","elements","testFunction","PhoneNumber","countryOrCountryCallingCode","nationalNumber","metadata","_classCallCheck","TypeError","isObject","countries","e164Number","E164_NUMBER_REGEXP","test","Error","_extractCountryCallin","extractCountryCallingCode","undefined","countryCallingCode","number","validateMetadata","_getCountryAndCalling","getCountryAndCallingCodeFromOneOfThem","country","callingCode","getMetadata","_createClass","key","value","ext","getPossibleCountriesForNumber","isPossibleNumber","v2","isValidNumber","Metadata","isNonGeographicCallingCode","phoneNumber","getNumberType","format","options","formatNumber","_objectSpread","E164_NUMBER_REGEXP","ParseError","_Error","code","_this","_classCallCheck","_callSuper","Object","setPrototypeOf","prototype","name","constructor","_inherits","_createClass","_wrapNativeSuper","Error","EXTN_PATTERN","RegExp","createExtensionPattern","extractExtension","number","start","search","numberWithoutExtension","slice","matches","match","i","length","ext","DIGITS","parseDigit","character","parseIncompletePhoneNumber","string","result","_iterator","_createForOfIteratorHelperLoose","split","_step","done","character","value","parsePhoneNumberCharacter","prevParsedCharacters","eventListener","parseDigit","PLUS_SIGN","RFC3966_VISUAL_SEPARATOR_","RFC3966_PHONE_DIGIT_","VALID_DIGITS","RFC3966_GLOBAL_NUMBER_DIGITS_","RFC3966_GLOBAL_NUMBER_DIGITS_PATTERN_","RegExp","ALPHANUM_","RFC3966_DOMAINLABEL_","VALID_ALPHA_","RFC3966_TOPLABEL_","RFC3966_DOMAINNAME_","RFC3966_DOMAINNAME_PATTERN_","RFC3966_PREFIX_","RFC3966_PHONE_CONTEXT_","RFC3966_ISDN_SUBADDRESS_","extractPhoneContext","numberToExtractFrom","indexOfPhoneContext","indexOf","phoneContextStart","length","phoneContextEnd","substring","isPhoneContextValid","phoneContext","test","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","numberToParse","_ref","extractFormattedPhoneNumber","phoneContext","extractPhoneContext","isPhoneContextValid","ParseError","phoneNumberString","charAt","PLUS_SIGN","indexOfRfc3966Prefix","indexOf","RFC3966_PREFIX_","indexOfNationalNumber","length","indexOfPhoneContext","RFC3966_PHONE_CONTEXT_","substring","indexOfIsdn","RFC3966_ISDN_SUBADDRESS_","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","RegExp","PLUS_CHARS","VALID_DIGITS","AFTER_PHONE_NUMBER_END_PATTERN","USE_NON_GEOGRAPHIC_COUNTRY_CODE","parse","text","options","metadataJson","metadata","Metadata","defaultCountry","hasCountry","v2","ParseError","Error","concat","_parseInput","parseInput","extract","formattedPhoneNumber","number","ext","error","_parsePhoneNumber","parsePhoneNumber","defaultCallingCode","country","nationalNumber","countryCallingCode","countryCallingCodeSource","carrierCode","hasSelectedNumberingPlan","length","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","phoneNumber","PhoneNumber","__countryCallingCodeSource","valid","extended","matchesEntirely","nationalNumberPattern","possible","possibleLengths","isPossibleNumber","phone","result","extractFormattedPhoneNumber","throwOnError","startsAt","search","slice","replace","extractFormattedPhoneNumberFromPossibleRfc3966NumberUri","isViablePhoneNumber","isViablePhoneNumberStart","withExtensionStripped","extractExtension","_extractCountryCallin","extractCountryCallingCode","parseIncompletePhoneNumber","undefined","selectNumberingPlan","numberingPlan","callingCode","isNonGeographicCallingCode","_extractNationalNumbe","extractNationalNumber","exactCountry","getCountryByCallingCode","parsePhoneNumberWithError","text","options","metadata","parse","_objectSpread","v2","normalizeArguments","args","_Array$prototype$slic","Array","prototype","slice","call","_Array$prototype$slic2","_slicedToArray","arg_1","arg_2","arg_3","arg_4","text","options","metadata","TypeError","undefined","_objectSpread","defaultCountry","isObject","Error","concat","parsePhoneNumber","text","options","metadata","defaultCountry","isSupportedCountry","_objectSpread","undefined","parsePhoneNumberWithError","error","ParseError","parsePhoneNumber","_normalizeArguments","normalizeArguments","arguments","text","options","metadata","parsePhoneNumber_","parsePhoneNumber","withMetadataArgument","DEFAULT_PHONE_COUNTRY","parsePhone","raw","country","region","parsed","parsePhoneNumber","isValid","toE164","DEFAULT_TEL_SELECTOR","safeDecodeURIComponent","value","resolvePhoneNumber","el","href","raw","toE164","attachPhoneClickCapture","client","config","autoCapture","selector","onClick","event","target","matched","metadata","AranovaApiError","message","options","identityHeaders","config","headers","API_KEY_HEADER","SDK_VERSION_HEADER","SDK_PACKAGE_HEADER","SDK_SURFACE_HEADER","SDK_ENVIRONMENT_HEADER","joinUrl","endpoint","path","salesRequest","method","body","response","detail","code","parsed","record","AranovaApiError","fireRecordedConversions","firing","input","recorded","sale","currency","txnBase","item","config","cents","fireConversionWithConsent","fromMinor","createSalesClient","record","body","salesRequest","key","options","value","query","cursor","limit","sort","order","want_total","filters","range","include_categories","include_deleted_services","top_n","since","until","timezone","granularity","compare_to","id","patch","segment","params","qs","SUPPORTED_CURRENCIES","TRACKING_ENVIRONMENTS","currencySchema","external_exports","centsSchema","quantitySchema","metadataSchema","saleItemSchema","saleServiceSchema","customerNameSchema","customerPhoneSchema","customerEmailSchema","refineServiceXor","val","ctx","requireAmount","keys","s","sum","acc","saleCreateSchema","saleUpdateSchema","getTrackingParams","getTrackingParamsFromCookieReader","getCookieValueFromDocument","activeClient","activeRegistry","activeDetachers","activeSales","teardown","i","init","config","trackingScriptApi","apiKey","endpoint","autoCaptureTrackingParams","cookieMaxAgeSeconds","gtagId","gtagIds","metaPixelId","metaPixelIds","environment","_renderConsentBanner","triggers","conversionConfig","captureTrackingParamsFromLocation","bootstrapMultipleGtags","bootstrapGoogleAdsTracking","bootstrapMultiplePixels","bootstrapMetaPixel","conversionStore","resolveConversionConfig","createSalesClient","registry","resolvedGtagIds","e","rawClient","createTrackingClient","version","withConversionAutoFire","createConversionAutoFire","attachAutoPageView","attachBfcacheRestore","attachPageExit","timeOnSite","attachTimeOnSite","specificPageVisit","attachSpecificPageVisit","scrollDepth","attachScrollDepth","multiPageSession","attachMultiPageSession","formStart","attachFormStart","ctaClick","attachCtaClickCapture","phoneClick","attachPhoneClickCapture","trackEvent","eventType","metadata","manualRegistry","getEventDefinition","err","sales","getConsentState","setConsentState","getConsentChoice","optIn","optOut","resetConsent","src_default"]}