@aranova/tracking-next 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -1
- package/dist/blog-server.js.map +1 -1
- package/dist/blog-server.mjs.map +1 -1
- package/dist/blog.js.map +1 -1
- package/dist/blog.mjs.map +1 -1
- package/dist/calendar-server.d.mts +1 -1
- package/dist/calendar-server.d.ts +1 -1
- package/dist/calendar-server.js.map +1 -1
- package/dist/calendar-server.mjs.map +1 -1
- package/dist/calendar.d.mts +14 -3
- package/dist/calendar.d.ts +14 -3
- package/dist/calendar.js +212 -18
- package/dist/calendar.js.map +1 -1
- package/dist/calendar.mjs +211 -18
- package/dist/calendar.mjs.map +1 -1
- package/dist/client.d.mts +9 -3
- package/dist/client.d.ts +9 -3
- package/dist/client.js +550 -194
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +550 -194
- package/dist/client.mjs.map +1 -1
- package/dist/index.d.mts +10 -9
- package/dist/index.d.ts +10 -9
- package/dist/index.js +491 -284
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +490 -284
- package/dist/index.mjs.map +1 -1
- package/dist/{ingest-typed-BdKmlouW.d.ts → ingest-typed-MBuMe9Pn.d.ts} +94 -2
- package/dist/{ingest-typed-Bo7WPmpU.d.mts → ingest-typed-UA13xTfI.d.mts} +94 -2
- package/dist/{phone-utils-CubQif9Z.d.mts → phone-utils-C0ds6cqZ.d.mts} +6 -0
- package/dist/{phone-utils-CubQif9Z.d.ts → phone-utils-C0ds6cqZ.d.ts} +6 -0
- package/dist/phone.d.mts +1 -1
- package/dist/phone.d.ts +1 -1
- package/dist/{sales-DG150g3o.d.ts → sales-DQC815f3.d.ts} +1 -1
- package/dist/{sales-D7KstKA-.d.mts → sales-w1reW_Y3.d.mts} +1 -1
- package/dist/sales.d.mts +2 -2
- package/dist/sales.d.ts +2 -2
- package/dist/sales.js +17 -1
- package/dist/sales.js.map +1 -1
- package/dist/sales.mjs +17 -1
- package/dist/sales.mjs.map +1 -1
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/{tracking-config-runtime-D7prdTE1.d.mts → tracking-config-runtime-C6H7ofmo.d.mts} +6 -0
- package/dist/{tracking-config-runtime-D7prdTE1.d.ts → tracking-config-runtime-C6H7ofmo.d.ts} +6 -0
- package/dist/{transport-I_cMSFQ6.d.mts → transport-BlXQZs9Z.d.mts} +120 -50
- package/dist/{transport-CDmGOiCq.d.ts → transport-CAZYrZbB.d.ts} +120 -50
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -82,6 +82,7 @@ __export(src_exports, {
|
|
|
82
82
|
formatPhoneAsTyped: () => formatPhoneAsTyped,
|
|
83
83
|
formatSlotRange: () => formatSlotRange,
|
|
84
84
|
fromMinor: () => fromMinor,
|
|
85
|
+
getBookingAttribution: () => getBookingAttribution,
|
|
85
86
|
getConsentChoice: () => getConsentChoice,
|
|
86
87
|
getConsentState: () => getConsentState,
|
|
87
88
|
getEventSemantics: () => getEventSemantics,
|
|
@@ -339,6 +340,7 @@ var TRACKING_CAPABILITIES = [
|
|
|
339
340
|
"consent_controls",
|
|
340
341
|
"conversion_goals_auto",
|
|
341
342
|
"conversion_goals_manual",
|
|
343
|
+
"cross_site_linker",
|
|
342
344
|
"cta_click_capture",
|
|
343
345
|
"form_capture",
|
|
344
346
|
"phone_click_capture",
|
|
@@ -365,6 +367,9 @@ function readDomMarkers() {
|
|
|
365
367
|
return found;
|
|
366
368
|
}
|
|
367
369
|
|
|
370
|
+
// ../tracking-core/src/cross-site-link.ts
|
|
371
|
+
var z = __toESM(require("zod/mini"));
|
|
372
|
+
|
|
368
373
|
// ../tracking-core/src/tracking.ts
|
|
369
374
|
var TRACKING_COOKIE_MAX_AGE_SECONDS = 7776e3;
|
|
370
375
|
var TRACKING_PARAM_KEYS = [
|
|
@@ -609,6 +614,72 @@ function buildLandingPayloadFields(sessionId, override) {
|
|
|
609
614
|
};
|
|
610
615
|
}
|
|
611
616
|
|
|
617
|
+
// ../tracking-core/src/session.ts
|
|
618
|
+
var VISITOR_STORAGE_KEY = "aranova_tracking_visitor";
|
|
619
|
+
var SESSION_STORAGE_KEY = "aranova_tracking_session";
|
|
620
|
+
var SESSION_IDLE_MS = 30 * 60 * 1e3;
|
|
621
|
+
function readLocalStorage(key) {
|
|
622
|
+
try {
|
|
623
|
+
return window.localStorage.getItem(key);
|
|
624
|
+
} catch {
|
|
625
|
+
return null;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
function peekVisitorId() {
|
|
629
|
+
if (typeof window === "undefined") return null;
|
|
630
|
+
const existing = readLocalStorage(VISITOR_STORAGE_KEY);
|
|
631
|
+
return existing && existing.length > 0 ? existing : null;
|
|
632
|
+
}
|
|
633
|
+
function peekSessionId(now = Date.now()) {
|
|
634
|
+
if (typeof window === "undefined") return null;
|
|
635
|
+
const raw = readLocalStorage(SESSION_STORAGE_KEY);
|
|
636
|
+
if (!raw) return null;
|
|
637
|
+
try {
|
|
638
|
+
const parsed = JSON.parse(raw);
|
|
639
|
+
if (typeof parsed.id !== "string" || typeof parsed.last_event_at !== "number") return null;
|
|
640
|
+
return now - parsed.last_event_at <= SESSION_IDLE_MS ? parsed.id : null;
|
|
641
|
+
} catch {
|
|
642
|
+
return null;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// ../tracking-core/src/cross-site-link.ts
|
|
647
|
+
var LINK_PARAM = "_arv";
|
|
648
|
+
var LINK_TOKEN_TTL_MS = 5 * 60 * 1e3;
|
|
649
|
+
var FUTURE_SKEW_MS = 60 * 1e3;
|
|
650
|
+
var CARRIED_KEYS = {
|
|
651
|
+
g: "gclid",
|
|
652
|
+
w: "wbraid",
|
|
653
|
+
gb: "gbraid",
|
|
654
|
+
f: "fbclid",
|
|
655
|
+
y: "ylpcid"
|
|
656
|
+
};
|
|
657
|
+
var CARRIED_ENTRIES = Object.entries(CARRIED_KEYS);
|
|
658
|
+
var identifier = z.string().check(z.minLength(1), z.maxLength(128));
|
|
659
|
+
var optionalIdentifier = z.optional(identifier);
|
|
660
|
+
var linkTokenSchema = z.object({
|
|
661
|
+
v: identifier,
|
|
662
|
+
s: identifier,
|
|
663
|
+
// Epoch ms in base36.
|
|
664
|
+
t: z.string().check(z.regex(/^[0-9a-z]{1,12}$/)),
|
|
665
|
+
g: optionalIdentifier,
|
|
666
|
+
w: optionalIdentifier,
|
|
667
|
+
gb: optionalIdentifier,
|
|
668
|
+
f: optionalIdentifier,
|
|
669
|
+
fc: optionalIdentifier,
|
|
670
|
+
y: optionalIdentifier
|
|
671
|
+
});
|
|
672
|
+
function stripLinkParam(url) {
|
|
673
|
+
try {
|
|
674
|
+
const parsed = new URL(url, typeof window === "undefined" ? void 0 : window.location.href);
|
|
675
|
+
if (!parsed.searchParams.has(LINK_PARAM)) return url;
|
|
676
|
+
parsed.searchParams.delete(LINK_PARAM);
|
|
677
|
+
return parsed.href;
|
|
678
|
+
} catch {
|
|
679
|
+
return url;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
612
683
|
// ../tracking-core/src/payloads.ts
|
|
613
684
|
function createTrackingClientContext(surface, input = {}) {
|
|
614
685
|
return {
|
|
@@ -648,6 +719,7 @@ function createTrackingSessionUpsertPayload(trackingParams, input, context) {
|
|
|
648
719
|
};
|
|
649
720
|
}
|
|
650
721
|
function createTrackingEventCreatePayload(trackingParams, input, context) {
|
|
722
|
+
const pageUrl = input.pageUrl ?? (typeof window === "undefined" ? null : window.location.href);
|
|
651
723
|
return {
|
|
652
724
|
session_id: input.sessionId,
|
|
653
725
|
event_type: input.eventType,
|
|
@@ -658,7 +730,7 @@ function createTrackingEventCreatePayload(trackingParams, input, context) {
|
|
|
658
730
|
fbclid: trackingParams.fbclid,
|
|
659
731
|
fbc: getFbcCookie(),
|
|
660
732
|
fbp: getFbpCookie(),
|
|
661
|
-
page_url:
|
|
733
|
+
page_url: pageUrl === null ? null : stripLinkParam(pageUrl),
|
|
662
734
|
metadata: input.metadata ?? null,
|
|
663
735
|
context
|
|
664
736
|
};
|
|
@@ -770,7 +842,8 @@ function parseConversionConfig(raw) {
|
|
|
770
842
|
gtag_ids: isStringMap(obj.gtag_ids) ? obj.gtag_ids : {},
|
|
771
843
|
meta_pixel_ids: isStringMap(obj.meta_pixel_ids) ? obj.meta_pixel_ids : {},
|
|
772
844
|
services,
|
|
773
|
-
goals
|
|
845
|
+
goals,
|
|
846
|
+
linked_hostnames: Array.isArray(obj.linked_hostnames) ? obj.linked_hostnames.filter((h) => typeof h === "string" && h.length > 0) : []
|
|
774
847
|
};
|
|
775
848
|
}
|
|
776
849
|
var CACHE_PREFIX = "_aranova_cfg_";
|
|
@@ -854,6 +927,7 @@ function resolveConversionConfig(options) {
|
|
|
854
927
|
getFiring: (key) => goalsByKey.get(key)?.firing ?? null,
|
|
855
928
|
getGoal: (key) => goalsByKey.get(key) ?? null,
|
|
856
929
|
listGoals: () => [...goalsByKey.values()],
|
|
930
|
+
linkedHostnames: () => current?.linked_hostnames ?? [],
|
|
857
931
|
current: () => current,
|
|
858
932
|
isReady: () => current !== null,
|
|
859
933
|
onResolve: (listener) => {
|
|
@@ -1061,7 +1135,7 @@ function validateConfig(config, ref) {
|
|
|
1061
1135
|
function pageViewSnapshot() {
|
|
1062
1136
|
if (typeof window === "undefined" || typeof document === "undefined") return null;
|
|
1063
1137
|
return {
|
|
1064
|
-
href: window.location.href,
|
|
1138
|
+
href: stripLinkParam(window.location.href),
|
|
1065
1139
|
title: document.title || null,
|
|
1066
1140
|
referrer: document.referrer || null
|
|
1067
1141
|
};
|
|
@@ -1212,6 +1286,10 @@ var TrackingConfigRuntime = class {
|
|
|
1212
1286
|
listGoals() {
|
|
1213
1287
|
return this.current?.goals ?? [];
|
|
1214
1288
|
}
|
|
1289
|
+
/** Sibling hostnames for the linker — read from the cached object even while unconfirmed. */
|
|
1290
|
+
linkedHostnames() {
|
|
1291
|
+
return this.current?.linked_hostnames ?? [];
|
|
1292
|
+
}
|
|
1215
1293
|
async revalidateNow() {
|
|
1216
1294
|
try {
|
|
1217
1295
|
const headers = {};
|
|
@@ -1455,6 +1533,18 @@ var EVENT_SEMANTICS = {
|
|
|
1455
1533
|
category: "engagement",
|
|
1456
1534
|
outcomeRole: "engagement",
|
|
1457
1535
|
clientVisibility: "simple"
|
|
1536
|
+
},
|
|
1537
|
+
site_link_click: {
|
|
1538
|
+
label: "Left for sibling site",
|
|
1539
|
+
category: "page",
|
|
1540
|
+
outcomeRole: "navigation",
|
|
1541
|
+
clientVisibility: "detailed"
|
|
1542
|
+
},
|
|
1543
|
+
site_link_arrival: {
|
|
1544
|
+
label: "Arrived from sibling site",
|
|
1545
|
+
category: "page",
|
|
1546
|
+
outcomeRole: "navigation",
|
|
1547
|
+
clientVisibility: "simple"
|
|
1458
1548
|
}
|
|
1459
1549
|
};
|
|
1460
1550
|
function getEventSemantics(eventName) {
|
|
@@ -1696,11 +1786,11 @@ function createSalesClient(config) {
|
|
|
1696
1786
|
}
|
|
1697
1787
|
|
|
1698
1788
|
// ../tracking-core/src/resources/sales/schema.ts
|
|
1699
|
-
var
|
|
1789
|
+
var z3 = __toESM(require("zod/mini"));
|
|
1700
1790
|
|
|
1701
1791
|
// ../tracking-core/src/resources/sales/generated/zod.gen.ts
|
|
1702
|
-
var
|
|
1703
|
-
var zErrorCode =
|
|
1792
|
+
var z2 = __toESM(require("zod/mini"));
|
|
1793
|
+
var zErrorCode = z2.enum([
|
|
1704
1794
|
"missing_credentials",
|
|
1705
1795
|
"invalid_api_key",
|
|
1706
1796
|
"not_authenticated",
|
|
@@ -1715,9 +1805,19 @@ var zErrorCode = z.enum([
|
|
|
1715
1805
|
"bad_request",
|
|
1716
1806
|
"not_found",
|
|
1717
1807
|
"conflict",
|
|
1808
|
+
"gone",
|
|
1718
1809
|
"incompatible_payload",
|
|
1719
1810
|
"repeat_confirmation_required",
|
|
1720
1811
|
"idempotency_conflict",
|
|
1812
|
+
"slot_unavailable",
|
|
1813
|
+
"calendar_not_connected",
|
|
1814
|
+
"calendar_disconnected",
|
|
1815
|
+
"booking_not_found",
|
|
1816
|
+
"booking_not_cancellable",
|
|
1817
|
+
"booking_not_reschedulable",
|
|
1818
|
+
"manage_token_invalid",
|
|
1819
|
+
"google_error",
|
|
1820
|
+
"calendar_not_owned",
|
|
1721
1821
|
"validation_error",
|
|
1722
1822
|
"unknown_service",
|
|
1723
1823
|
"invalid_sale_properties",
|
|
@@ -1725,36 +1825,36 @@ var zErrorCode = z.enum([
|
|
|
1725
1825
|
"rate_limited",
|
|
1726
1826
|
"internal_error"
|
|
1727
1827
|
]);
|
|
1728
|
-
var zSaleItemEntitySchema =
|
|
1729
|
-
category:
|
|
1730
|
-
external_item_id:
|
|
1731
|
-
id:
|
|
1732
|
-
name:
|
|
1733
|
-
quantity:
|
|
1734
|
-
unit_cost_cents:
|
|
1735
|
-
unit_price_cents:
|
|
1828
|
+
var zSaleItemEntitySchema = z2.object({
|
|
1829
|
+
category: z2.nullable(z2.string()),
|
|
1830
|
+
external_item_id: z2.nullable(z2.string()),
|
|
1831
|
+
id: z2.uuid(),
|
|
1832
|
+
name: z2.nullable(z2.string()),
|
|
1833
|
+
quantity: z2.string().check(z2.regex(/^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$/)),
|
|
1834
|
+
unit_cost_cents: z2.nullable(z2.int()),
|
|
1835
|
+
unit_price_cents: z2.int()
|
|
1736
1836
|
});
|
|
1737
|
-
var zSaleItemInputSchema =
|
|
1738
|
-
category:
|
|
1739
|
-
external_item_id:
|
|
1740
|
-
name:
|
|
1741
|
-
quantity:
|
|
1742
|
-
unit_cost_cents:
|
|
1743
|
-
unit_price_cents:
|
|
1837
|
+
var zSaleItemInputSchema = z2.strictObject({
|
|
1838
|
+
category: z2.nullish(z2.string()),
|
|
1839
|
+
external_item_id: z2.nullish(z2.string()),
|
|
1840
|
+
name: z2.nullish(z2.string()),
|
|
1841
|
+
quantity: z2.string().check(z2.regex(/^\d+(\.\d{1,3})?$/)),
|
|
1842
|
+
unit_cost_cents: z2.nullish(z2.int().check(z2.gte(0))),
|
|
1843
|
+
unit_price_cents: z2.int().check(z2.gte(0))
|
|
1744
1844
|
});
|
|
1745
|
-
var zSaleServiceEntitySchema =
|
|
1746
|
-
amount_cents:
|
|
1747
|
-
id:
|
|
1748
|
-
mapped:
|
|
1749
|
-
service_id:
|
|
1750
|
-
service_key:
|
|
1751
|
-
service_label:
|
|
1845
|
+
var zSaleServiceEntitySchema = z2.object({
|
|
1846
|
+
amount_cents: z2.int(),
|
|
1847
|
+
id: z2.uuid(),
|
|
1848
|
+
mapped: z2.nullable(z2.boolean()),
|
|
1849
|
+
service_id: z2.uuid(),
|
|
1850
|
+
service_key: z2.string(),
|
|
1851
|
+
service_label: z2.string()
|
|
1752
1852
|
});
|
|
1753
|
-
var zSaleServiceInputSchema =
|
|
1754
|
-
amount_cents:
|
|
1755
|
-
service:
|
|
1853
|
+
var zSaleServiceInputSchema = z2.strictObject({
|
|
1854
|
+
amount_cents: z2.int().check(z2.gte(0)),
|
|
1855
|
+
service: z2.string()
|
|
1756
1856
|
});
|
|
1757
|
-
var zSmsAutomationState =
|
|
1857
|
+
var zSmsAutomationState = z2.enum([
|
|
1758
1858
|
"needs_check",
|
|
1759
1859
|
"failed",
|
|
1760
1860
|
"undelivered",
|
|
@@ -1766,7 +1866,7 @@ var zSmsAutomationState = z.enum([
|
|
|
1766
1866
|
"eligible",
|
|
1767
1867
|
"not_applicable"
|
|
1768
1868
|
]);
|
|
1769
|
-
var zSmsWithheldReason =
|
|
1869
|
+
var zSmsWithheldReason = z2.enum([
|
|
1770
1870
|
"automation_disabled",
|
|
1771
1871
|
"sms_disabled",
|
|
1772
1872
|
"no_phone",
|
|
@@ -1779,77 +1879,83 @@ var zSmsWithheldReason = z.enum([
|
|
|
1779
1879
|
"sender_not_ready",
|
|
1780
1880
|
"missing_review_url",
|
|
1781
1881
|
"no_handler",
|
|
1782
|
-
"dispatch_already_recorded"
|
|
1882
|
+
"dispatch_already_recorded",
|
|
1883
|
+
"text_back_disabled",
|
|
1884
|
+
"number_text_back_disabled",
|
|
1885
|
+
"number_not_active",
|
|
1886
|
+
"a2p_registration_required",
|
|
1887
|
+
"alert_recipient_cannot_receive_sms",
|
|
1888
|
+
"line_type_unresolved"
|
|
1783
1889
|
]);
|
|
1784
|
-
var zSaleSmsStatusSchema =
|
|
1785
|
-
can_send_now:
|
|
1786
|
-
last_message_at:
|
|
1787
|
-
reason_detail:
|
|
1890
|
+
var zSaleSmsStatusSchema = z2.object({
|
|
1891
|
+
can_send_now: z2._default(z2.boolean(), false),
|
|
1892
|
+
last_message_at: z2.nullable(z2.iso.datetime({ offset: true })),
|
|
1893
|
+
reason_detail: z2.nullable(z2.string()),
|
|
1788
1894
|
state: zSmsAutomationState,
|
|
1789
|
-
suppressed_by_other_sale:
|
|
1790
|
-
withheld_reason:
|
|
1895
|
+
suppressed_by_other_sale: z2._default(z2.boolean(), false),
|
|
1896
|
+
withheld_reason: z2.nullable(zSmsWithheldReason)
|
|
1791
1897
|
});
|
|
1792
|
-
var zSupportedCurrency =
|
|
1793
|
-
var zTrackingEnvironment =
|
|
1794
|
-
var zSaleCreateSchema =
|
|
1795
|
-
amount_total_cents:
|
|
1898
|
+
var zSupportedCurrency = z2.enum(["USD", "CAD"]);
|
|
1899
|
+
var zTrackingEnvironment = z2.enum(["production", "development"]);
|
|
1900
|
+
var zSaleCreateSchema = z2.strictObject({
|
|
1901
|
+
amount_total_cents: z2.nullish(z2.int().check(z2.gte(0))),
|
|
1796
1902
|
currency: zSupportedCurrency,
|
|
1797
|
-
customer_email:
|
|
1798
|
-
customer_name:
|
|
1799
|
-
customer_phone:
|
|
1800
|
-
description:
|
|
1801
|
-
environment:
|
|
1802
|
-
external_id:
|
|
1803
|
-
items:
|
|
1804
|
-
metadata:
|
|
1805
|
-
occurred_at:
|
|
1806
|
-
service:
|
|
1807
|
-
services:
|
|
1808
|
-
sms_consent:
|
|
1903
|
+
customer_email: z2.nullish(z2.email().check(z2.maxLength(320))),
|
|
1904
|
+
customer_name: z2.nullish(z2.string().check(z2.maxLength(200))),
|
|
1905
|
+
customer_phone: z2.nullish(z2.string().check(z2.maxLength(64))),
|
|
1906
|
+
description: z2.nullish(z2.string()),
|
|
1907
|
+
environment: z2._default(z2.optional(zTrackingEnvironment), "production"),
|
|
1908
|
+
external_id: z2.nullish(z2.string()),
|
|
1909
|
+
items: z2.optional(z2.array(zSaleItemInputSchema)),
|
|
1910
|
+
metadata: z2.nullish(z2.record(z2.string(), z2.unknown())),
|
|
1911
|
+
occurred_at: z2.iso.datetime({ offset: true }),
|
|
1912
|
+
service: z2.nullish(z2.string()),
|
|
1913
|
+
services: z2.nullish(z2.array(zSaleServiceInputSchema)),
|
|
1914
|
+
sms_consent: z2.nullish(z2.boolean())
|
|
1809
1915
|
});
|
|
1810
|
-
var zValidationError =
|
|
1811
|
-
ctx:
|
|
1812
|
-
input:
|
|
1813
|
-
loc:
|
|
1814
|
-
msg:
|
|
1815
|
-
type:
|
|
1916
|
+
var zValidationError = z2.object({
|
|
1917
|
+
ctx: z2.optional(z2.record(z2.string(), z2.unknown())),
|
|
1918
|
+
input: z2.optional(z2.unknown()),
|
|
1919
|
+
loc: z2.array(z2.union([z2.string(), z2.int()])),
|
|
1920
|
+
msg: z2.string(),
|
|
1921
|
+
type: z2.string()
|
|
1816
1922
|
});
|
|
1817
|
-
var zHttpValidationError =
|
|
1818
|
-
detail:
|
|
1923
|
+
var zHttpValidationError = z2.object({
|
|
1924
|
+
detail: z2.optional(z2.array(zValidationError))
|
|
1819
1925
|
});
|
|
1820
|
-
var zValidationErrorItem =
|
|
1821
|
-
loc:
|
|
1822
|
-
msg:
|
|
1823
|
-
type:
|
|
1926
|
+
var zValidationErrorItem = z2.object({
|
|
1927
|
+
loc: z2.array(z2.union([z2.string(), z2.int()])),
|
|
1928
|
+
msg: z2.string(),
|
|
1929
|
+
type: z2.string()
|
|
1824
1930
|
});
|
|
1825
|
-
var zApiErrorSchema =
|
|
1931
|
+
var zApiErrorSchema = z2.object({
|
|
1826
1932
|
code: zErrorCode,
|
|
1827
|
-
context:
|
|
1828
|
-
detail:
|
|
1829
|
-
errors:
|
|
1830
|
-
request_id:
|
|
1933
|
+
context: z2._default(z2.nullish(z2.record(z2.string(), z2.unknown())), null),
|
|
1934
|
+
detail: z2.string(),
|
|
1935
|
+
errors: z2._default(z2.nullish(z2.array(zValidationErrorItem)), null),
|
|
1936
|
+
request_id: z2._default(z2.nullish(z2.string()), null)
|
|
1831
1937
|
});
|
|
1832
|
-
var zWritebackEmailSource =
|
|
1833
|
-
var zWritebackEnrichmentStatus =
|
|
1834
|
-
var zWritebackSaleUploadCounts =
|
|
1835
|
-
failed:
|
|
1836
|
-
pending:
|
|
1837
|
-
skipped:
|
|
1838
|
-
submitted:
|
|
1839
|
-
total:
|
|
1840
|
-
uploaded:
|
|
1938
|
+
var zWritebackEmailSource = z2.enum(["NONE", "SALE", "CUSTOMER", "HARVESTED"]);
|
|
1939
|
+
var zWritebackEnrichmentStatus = z2.enum(["NONE", "MATCHED", "AMBIGUOUS"]);
|
|
1940
|
+
var zWritebackSaleUploadCounts = z2.object({
|
|
1941
|
+
failed: z2._default(z2.int(), 0),
|
|
1942
|
+
pending: z2._default(z2.int(), 0),
|
|
1943
|
+
skipped: z2._default(z2.int(), 0),
|
|
1944
|
+
submitted: z2._default(z2.int(), 0),
|
|
1945
|
+
total: z2._default(z2.int(), 0),
|
|
1946
|
+
uploaded: z2._default(z2.int(), 0)
|
|
1841
1947
|
});
|
|
1842
|
-
var zSaleWritebackStatusSchema =
|
|
1843
|
-
blocked_reason:
|
|
1844
|
-
can_dispatch:
|
|
1845
|
-
email_source:
|
|
1846
|
-
enrichment_status:
|
|
1847
|
-
gclid_attached:
|
|
1848
|
-
identifiers_sent:
|
|
1849
|
-
mapped_service_ids:
|
|
1850
|
-
matched_submit_count:
|
|
1851
|
-
needs_force:
|
|
1852
|
-
rollup:
|
|
1948
|
+
var zSaleWritebackStatusSchema = z2.object({
|
|
1949
|
+
blocked_reason: z2.nullable(z2.string()),
|
|
1950
|
+
can_dispatch: z2._default(z2.boolean(), false),
|
|
1951
|
+
email_source: z2.nullable(zWritebackEmailSource),
|
|
1952
|
+
enrichment_status: z2.nullable(zWritebackEnrichmentStatus),
|
|
1953
|
+
gclid_attached: z2._default(z2.boolean(), false),
|
|
1954
|
+
identifiers_sent: z2.nullable(z2.string()),
|
|
1955
|
+
mapped_service_ids: z2.array(z2.uuid()),
|
|
1956
|
+
matched_submit_count: z2.nullable(z2.int()),
|
|
1957
|
+
needs_force: z2._default(z2.boolean(), false),
|
|
1958
|
+
rollup: z2.enum([
|
|
1853
1959
|
"failed",
|
|
1854
1960
|
"skipped",
|
|
1855
1961
|
"pending",
|
|
@@ -1859,37 +1965,37 @@ var zSaleWritebackStatusSchema = z.object({
|
|
|
1859
1965
|
"out_of_window",
|
|
1860
1966
|
"blocked"
|
|
1861
1967
|
]),
|
|
1862
|
-
stale:
|
|
1863
|
-
uncovered_service_ids:
|
|
1968
|
+
stale: z2._default(z2.boolean(), false),
|
|
1969
|
+
uncovered_service_ids: z2.array(z2.uuid()),
|
|
1864
1970
|
uploads: zWritebackSaleUploadCounts
|
|
1865
1971
|
});
|
|
1866
|
-
var zSaleEntitySchema =
|
|
1867
|
-
amount_total_cents:
|
|
1868
|
-
business_id:
|
|
1869
|
-
business_name:
|
|
1870
|
-
created_at:
|
|
1871
|
-
currency:
|
|
1872
|
-
customer_email:
|
|
1873
|
-
customer_name:
|
|
1874
|
-
customer_name_placeholder_confirmed:
|
|
1875
|
-
customer_name_placeholder_confirmed_at:
|
|
1876
|
-
customer_phone:
|
|
1877
|
-
description:
|
|
1972
|
+
var zSaleEntitySchema = z2.object({
|
|
1973
|
+
amount_total_cents: z2.int(),
|
|
1974
|
+
business_id: z2.uuid(),
|
|
1975
|
+
business_name: z2.nullable(z2.string()),
|
|
1976
|
+
created_at: z2.iso.datetime({ offset: true }),
|
|
1977
|
+
currency: z2.string(),
|
|
1978
|
+
customer_email: z2.nullable(z2.string()),
|
|
1979
|
+
customer_name: z2.nullable(z2.string()),
|
|
1980
|
+
customer_name_placeholder_confirmed: z2._default(z2.boolean(), false),
|
|
1981
|
+
customer_name_placeholder_confirmed_at: z2.nullable(z2.iso.datetime({ offset: true })),
|
|
1982
|
+
customer_phone: z2.nullable(z2.string()),
|
|
1983
|
+
description: z2.nullable(z2.string()),
|
|
1878
1984
|
environment: zTrackingEnvironment,
|
|
1879
|
-
external_id:
|
|
1880
|
-
id:
|
|
1881
|
-
items:
|
|
1882
|
-
metadata:
|
|
1883
|
-
occurred_at:
|
|
1884
|
-
service_id:
|
|
1885
|
-
service_key:
|
|
1886
|
-
service_label:
|
|
1887
|
-
services:
|
|
1888
|
-
sms_automation:
|
|
1889
|
-
sms_consent:
|
|
1890
|
-
sms_consent_granted_at:
|
|
1891
|
-
updated_at:
|
|
1892
|
-
writeback:
|
|
1985
|
+
external_id: z2.nullable(z2.string()),
|
|
1986
|
+
id: z2.uuid(),
|
|
1987
|
+
items: z2.array(zSaleItemEntitySchema),
|
|
1988
|
+
metadata: z2.nullable(z2.record(z2.string(), z2.unknown())),
|
|
1989
|
+
occurred_at: z2.iso.datetime({ offset: true }),
|
|
1990
|
+
service_id: z2.nullable(z2.uuid()),
|
|
1991
|
+
service_key: z2.nullable(z2.string()),
|
|
1992
|
+
service_label: z2.nullable(z2.string()),
|
|
1993
|
+
services: z2.array(zSaleServiceEntitySchema),
|
|
1994
|
+
sms_automation: z2.nullable(zSaleSmsStatusSchema),
|
|
1995
|
+
sms_consent: z2._default(z2.boolean(), false),
|
|
1996
|
+
sms_consent_granted_at: z2.nullable(z2.iso.datetime({ offset: true })),
|
|
1997
|
+
updated_at: z2.iso.datetime({ offset: true }),
|
|
1998
|
+
writeback: z2.nullable(zSaleWritebackStatusSchema)
|
|
1893
1999
|
});
|
|
1894
2000
|
|
|
1895
2001
|
// ../tracking-core/src/resources/sales/schema.ts
|
|
@@ -1897,11 +2003,11 @@ var saleItemSchema = zSaleItemInputSchema;
|
|
|
1897
2003
|
var saleServiceSchema = zSaleServiceInputSchema;
|
|
1898
2004
|
var currencySchema = zSupportedCurrency;
|
|
1899
2005
|
var SUPPORTED_CURRENCIES = currencySchema.options;
|
|
1900
|
-
var centsSchema =
|
|
1901
|
-
var metadataSchema =
|
|
1902
|
-
var customerNameSchema =
|
|
1903
|
-
var customerPhoneSchema =
|
|
1904
|
-
var customerEmailSchema =
|
|
2006
|
+
var centsSchema = z3.int().check(z3.gte(0));
|
|
2007
|
+
var metadataSchema = z3.record(z3.string(), z3.unknown());
|
|
2008
|
+
var customerNameSchema = z3.string().check(z3.maxLength(200));
|
|
2009
|
+
var customerPhoneSchema = z3.string().check(z3.maxLength(64));
|
|
2010
|
+
var customerEmailSchema = z3.email().check(z3.maxLength(320));
|
|
1905
2011
|
function addIssue(ctx, path, message) {
|
|
1906
2012
|
ctx.issues.push({ code: "custom", input: ctx.value, path, message });
|
|
1907
2013
|
}
|
|
@@ -1935,24 +2041,24 @@ function refineServiceXor(val, ctx, { requireAmount }) {
|
|
|
1935
2041
|
);
|
|
1936
2042
|
}
|
|
1937
2043
|
}
|
|
1938
|
-
var saleCreateSchema =
|
|
1939
|
-
var saleUpdateSchema =
|
|
1940
|
-
description:
|
|
1941
|
-
service:
|
|
1942
|
-
services:
|
|
1943
|
-
currency:
|
|
1944
|
-
amount_total_cents:
|
|
1945
|
-
occurred_at:
|
|
1946
|
-
items:
|
|
1947
|
-
metadata:
|
|
1948
|
-
customer_name:
|
|
2044
|
+
var saleCreateSchema = z3.extend(zSaleCreateSchema, { items: z3._default(z3.array(saleItemSchema), []) }).check((ctx) => refineServiceXor(ctx.value, ctx, { requireAmount: true }));
|
|
2045
|
+
var saleUpdateSchema = z3.strictObject({
|
|
2046
|
+
description: z3.nullish(z3.string()),
|
|
2047
|
+
service: z3.nullish(z3.string()),
|
|
2048
|
+
services: z3.nullish(z3.array(saleServiceSchema)),
|
|
2049
|
+
currency: z3.optional(currencySchema),
|
|
2050
|
+
amount_total_cents: z3.optional(centsSchema),
|
|
2051
|
+
occurred_at: z3.optional(z3.iso.datetime()),
|
|
2052
|
+
items: z3.optional(z3.array(saleItemSchema)),
|
|
2053
|
+
metadata: z3.nullish(metadataSchema),
|
|
2054
|
+
customer_name: z3.nullish(customerNameSchema),
|
|
1949
2055
|
// Re-attest when changing a filler-looking name; the server clears the
|
|
1950
2056
|
// prior attestation whenever `customer_name` changes.
|
|
1951
|
-
customer_name_placeholder_confirmed:
|
|
1952
|
-
customer_phone:
|
|
1953
|
-
customer_email:
|
|
2057
|
+
customer_name_placeholder_confirmed: z3.optional(z3.boolean()),
|
|
2058
|
+
customer_phone: z3.nullish(customerPhoneSchema),
|
|
2059
|
+
customer_email: z3.nullish(customerEmailSchema),
|
|
1954
2060
|
// NOT NULL server-side: omit to leave unchanged (explicit null is rejected).
|
|
1955
|
-
sms_consent:
|
|
2061
|
+
sms_consent: z3.optional(z3.boolean())
|
|
1956
2062
|
}).check((ctx) => refineServiceXor(ctx.value, ctx, { requireAmount: false }));
|
|
1957
2063
|
var TRACKING_RANGES = ["24h", "7d", "30d"];
|
|
1958
2064
|
var NAMED_RANGES = [
|
|
@@ -1982,6 +2088,40 @@ function phoneField(name, raw, country) {
|
|
|
1982
2088
|
// src/index.ts
|
|
1983
2089
|
var import_client = require("@aranova/tracking-next/client");
|
|
1984
2090
|
|
|
2091
|
+
// ../tracking-core/src/resources/calendar/attribution.ts
|
|
2092
|
+
var LIMITS = {
|
|
2093
|
+
session_id: 64,
|
|
2094
|
+
visitor_id: 64,
|
|
2095
|
+
gclid: 256,
|
|
2096
|
+
fbclid: 256,
|
|
2097
|
+
utm_source: 128,
|
|
2098
|
+
utm_medium: 128,
|
|
2099
|
+
utm_campaign: 128,
|
|
2100
|
+
utm_term: 128,
|
|
2101
|
+
utm_content: 128
|
|
2102
|
+
};
|
|
2103
|
+
function getBookingAttribution() {
|
|
2104
|
+
if (typeof window === "undefined") return {};
|
|
2105
|
+
const params = getTrackingParamsFromCookieReader(getCookieValueFromDocument);
|
|
2106
|
+
const values = {
|
|
2107
|
+
session_id: peekSessionId(),
|
|
2108
|
+
visitor_id: peekVisitorId(),
|
|
2109
|
+
gclid: params.gclid,
|
|
2110
|
+
fbclid: params.fbclid,
|
|
2111
|
+
utm_source: params.utm_source,
|
|
2112
|
+
utm_medium: params.utm_medium,
|
|
2113
|
+
utm_campaign: params.utm_campaign,
|
|
2114
|
+
utm_term: params.utm_term,
|
|
2115
|
+
utm_content: params.utm_content
|
|
2116
|
+
};
|
|
2117
|
+
const attribution = {};
|
|
2118
|
+
for (const key of Object.keys(LIMITS)) {
|
|
2119
|
+
const value = values[key];
|
|
2120
|
+
if (value) attribution[key] = value.slice(0, LIMITS[key]);
|
|
2121
|
+
}
|
|
2122
|
+
return attribution;
|
|
2123
|
+
}
|
|
2124
|
+
|
|
1985
2125
|
// ../tracking-core/src/resources/calendar/transport.ts
|
|
1986
2126
|
async function calendarRequest(config, method, path, body) {
|
|
1987
2127
|
return apiRequest(config, method, `/calendar${path}`, body);
|
|
@@ -2080,80 +2220,119 @@ function isCalendarError(error, code) {
|
|
|
2080
2220
|
}
|
|
2081
2221
|
|
|
2082
2222
|
// ../tracking-core/src/resources/calendar/schema.ts
|
|
2083
|
-
var
|
|
2223
|
+
var z5 = __toESM(require("zod/mini"));
|
|
2084
2224
|
|
|
2085
2225
|
// ../tracking-core/src/resources/calendar/generated/zod.gen.ts
|
|
2086
|
-
var
|
|
2087
|
-
var zBookingAttendee =
|
|
2088
|
-
display_name:
|
|
2089
|
-
email:
|
|
2090
|
-
optional:
|
|
2226
|
+
var z4 = __toESM(require("zod/mini"));
|
|
2227
|
+
var zBookingAttendee = z4.strictObject({
|
|
2228
|
+
display_name: z4.nullish(z4.string().check(z4.maxLength(200))),
|
|
2229
|
+
email: z4.email().check(z4.maxLength(320)),
|
|
2230
|
+
optional: z4._default(z4.optional(z4.boolean()), false)
|
|
2091
2231
|
});
|
|
2092
|
-
var zBookingCancelSchema =
|
|
2093
|
-
notify_attendees:
|
|
2094
|
-
reason:
|
|
2232
|
+
var zBookingCancelSchema = z4.strictObject({
|
|
2233
|
+
notify_attendees: z4._default(z4.optional(z4.boolean()), true),
|
|
2234
|
+
reason: z4.nullish(z4.string().check(z4.maxLength(500)))
|
|
2095
2235
|
});
|
|
2096
|
-
var zBookingCustomerInput =
|
|
2097
|
-
email:
|
|
2098
|
-
name:
|
|
2099
|
-
phone:
|
|
2100
|
-
sms_consent:
|
|
2236
|
+
var zBookingCustomerInput = z4.strictObject({
|
|
2237
|
+
email: z4.email().check(z4.maxLength(320)),
|
|
2238
|
+
name: z4.nullish(z4.string().check(z4.maxLength(200))),
|
|
2239
|
+
phone: z4.nullish(z4.string().check(z4.maxLength(64))),
|
|
2240
|
+
sms_consent: z4._default(z4.optional(z4.boolean()), false)
|
|
2101
2241
|
});
|
|
2102
|
-
var zBookingCustomerOutput =
|
|
2103
|
-
email:
|
|
2104
|
-
name:
|
|
2105
|
-
phone:
|
|
2106
|
-
sms_consent:
|
|
2242
|
+
var zBookingCustomerOutput = z4.strictObject({
|
|
2243
|
+
email: z4.email().check(z4.maxLength(320)),
|
|
2244
|
+
name: z4.nullable(z4.string().check(z4.maxLength(200))),
|
|
2245
|
+
phone: z4.nullable(z4.string().check(z4.maxLength(64))),
|
|
2246
|
+
sms_consent: z4._default(z4.boolean(), false)
|
|
2107
2247
|
});
|
|
2108
|
-
var zBookingRescheduleSchema =
|
|
2109
|
-
duration_minutes:
|
|
2110
|
-
end_at:
|
|
2111
|
-
notify_attendees:
|
|
2112
|
-
reason:
|
|
2113
|
-
start_at:
|
|
2114
|
-
time_zone:
|
|
2248
|
+
var zBookingRescheduleSchema = z4.strictObject({
|
|
2249
|
+
duration_minutes: z4.nullish(z4.int().check(z4.gt(0), z4.lte(1440))),
|
|
2250
|
+
end_at: z4.nullish(z4.iso.datetime({ offset: true })),
|
|
2251
|
+
notify_attendees: z4._default(z4.optional(z4.boolean()), true),
|
|
2252
|
+
reason: z4.nullish(z4.string().check(z4.maxLength(500))),
|
|
2253
|
+
start_at: z4.iso.datetime({ offset: true }),
|
|
2254
|
+
time_zone: z4.string().check(z4.minLength(1), z4.maxLength(64), z4.regex(/^[A-Za-z0-9_+\-\/]+$/))
|
|
2115
2255
|
});
|
|
2116
|
-
var zBookingResponse =
|
|
2117
|
-
|
|
2118
|
-
|
|
2256
|
+
var zBookingResponse = z4.strictObject({
|
|
2257
|
+
all_day: z4.boolean(),
|
|
2258
|
+
appointment_type: z4.nullable(z4.string()),
|
|
2259
|
+
calendar_key: z4.string(),
|
|
2260
|
+
created_at: z4.iso.datetime({ offset: true }),
|
|
2119
2261
|
customer: zBookingCustomerOutput,
|
|
2120
|
-
end_at:
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2262
|
+
end_at: z4.iso.datetime({ offset: true }),
|
|
2263
|
+
google_event_id: z4.nullable(z4.string()),
|
|
2264
|
+
google_html_link: z4.nullable(z4.string()),
|
|
2265
|
+
google_sync_state: z4.enum(["queued", "synced", "uncertain", "failed", "drifted"]),
|
|
2266
|
+
ical_uid: z4.nullable(z4.string()),
|
|
2267
|
+
id: z4.string(),
|
|
2268
|
+
manage_token: z4.nullable(z4.string()),
|
|
2269
|
+
meet_url: z4.nullable(z4.string()),
|
|
2270
|
+
organizer_email: z4.nullable(z4.string()),
|
|
2271
|
+
start_at: z4.iso.datetime({ offset: true }),
|
|
2272
|
+
status: z4.enum(["pending", "confirmed", "cancelled", "no_show"]),
|
|
2273
|
+
time_zone: z4.string(),
|
|
2274
|
+
title: z4.string()
|
|
2130
2275
|
});
|
|
2131
|
-
var zBookingSource =
|
|
2132
|
-
var
|
|
2133
|
-
custom:
|
|
2134
|
-
|
|
2276
|
+
var zBookingSource = z4.enum(["website", "phone", "walk_in", "import", "operator"]);
|
|
2277
|
+
var zBookingMetadataInput = z4.strictObject({
|
|
2278
|
+
custom: z4.nullish(
|
|
2279
|
+
z4.record(z4.string(), z4.nullable(z4.union([z4.string(), z4.int(), z4.number(), z4.boolean()])))
|
|
2135
2280
|
),
|
|
2136
|
-
fbclid:
|
|
2137
|
-
gclid:
|
|
2138
|
-
landing_page:
|
|
2139
|
-
notes:
|
|
2140
|
-
referrer:
|
|
2141
|
-
schema_version:
|
|
2142
|
-
service:
|
|
2143
|
-
session_id:
|
|
2144
|
-
source:
|
|
2145
|
-
utm_campaign:
|
|
2146
|
-
utm_content:
|
|
2147
|
-
utm_medium:
|
|
2148
|
-
utm_source:
|
|
2149
|
-
utm_term:
|
|
2150
|
-
visitor_id:
|
|
2281
|
+
fbclid: z4.nullish(z4.string().check(z4.maxLength(256))),
|
|
2282
|
+
gclid: z4.nullish(z4.string().check(z4.maxLength(256))),
|
|
2283
|
+
landing_page: z4.nullish(z4.string().check(z4.maxLength(2048))),
|
|
2284
|
+
notes: z4.nullish(z4.string().check(z4.maxLength(2e3))),
|
|
2285
|
+
referrer: z4.nullish(z4.string().check(z4.maxLength(2048))),
|
|
2286
|
+
schema_version: z4._default(z4.optional(z4.int()), 1),
|
|
2287
|
+
service: z4.nullish(z4.string().check(z4.maxLength(64))),
|
|
2288
|
+
session_id: z4.nullish(z4.string().check(z4.maxLength(64))),
|
|
2289
|
+
source: z4.nullish(zBookingSource),
|
|
2290
|
+
utm_campaign: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2291
|
+
utm_content: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2292
|
+
utm_medium: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2293
|
+
utm_source: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2294
|
+
utm_term: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2295
|
+
visitor_id: z4.nullish(z4.string().check(z4.maxLength(64)))
|
|
2151
2296
|
});
|
|
2152
|
-
var
|
|
2153
|
-
|
|
2154
|
-
|
|
2297
|
+
var zBusySource = z4.enum(["google", "booking"]);
|
|
2298
|
+
var zBusyInterval = z4.strictObject({
|
|
2299
|
+
end_at: z4.iso.datetime({ offset: true }),
|
|
2300
|
+
source: zBusySource,
|
|
2301
|
+
start_at: z4.iso.datetime({ offset: true })
|
|
2155
2302
|
});
|
|
2156
|
-
var
|
|
2303
|
+
var zBusyWindow = z4.strictObject({
|
|
2304
|
+
since: z4.iso.datetime({ offset: true }),
|
|
2305
|
+
until: z4.iso.datetime({ offset: true })
|
|
2306
|
+
});
|
|
2307
|
+
var zBusyResponse = z4.strictObject({
|
|
2308
|
+
busy: z4.array(zBusyInterval),
|
|
2309
|
+
calendar_key: z4.string(),
|
|
2310
|
+
generated_at: z4.iso.datetime({ offset: true }),
|
|
2311
|
+
time_zone: z4.string(),
|
|
2312
|
+
window: zBusyWindow
|
|
2313
|
+
});
|
|
2314
|
+
var zCalendarSummary = z4.strictObject({
|
|
2315
|
+
allow_overlaps: z4.boolean(),
|
|
2316
|
+
calendar_key: z4.string(),
|
|
2317
|
+
connected_at: z4.nullable(z4.iso.datetime({ offset: true })),
|
|
2318
|
+
google_account_email: z4.nullable(z4.string()),
|
|
2319
|
+
granted_scopes: z4.nullable(z4.array(z4.string())),
|
|
2320
|
+
label: z4.string(),
|
|
2321
|
+
status: z4.enum([
|
|
2322
|
+
"pending_invite",
|
|
2323
|
+
"awaiting_calendar_selection",
|
|
2324
|
+
"connected",
|
|
2325
|
+
"needs_reconnect",
|
|
2326
|
+
"revoked",
|
|
2327
|
+
"disabled"
|
|
2328
|
+
]),
|
|
2329
|
+
time_zone: z4.string()
|
|
2330
|
+
});
|
|
2331
|
+
var zCustomLocation = z4.strictObject({
|
|
2332
|
+
kind: z4.literal("custom"),
|
|
2333
|
+
text: z4.string().check(z4.maxLength(1024))
|
|
2334
|
+
});
|
|
2335
|
+
var zErrorCode2 = z4.enum([
|
|
2157
2336
|
"missing_credentials",
|
|
2158
2337
|
"invalid_api_key",
|
|
2159
2338
|
"not_authenticated",
|
|
@@ -2168,9 +2347,19 @@ var zErrorCode2 = z3.enum([
|
|
|
2168
2347
|
"bad_request",
|
|
2169
2348
|
"not_found",
|
|
2170
2349
|
"conflict",
|
|
2350
|
+
"gone",
|
|
2171
2351
|
"incompatible_payload",
|
|
2172
2352
|
"repeat_confirmation_required",
|
|
2173
2353
|
"idempotency_conflict",
|
|
2354
|
+
"slot_unavailable",
|
|
2355
|
+
"calendar_not_connected",
|
|
2356
|
+
"calendar_disconnected",
|
|
2357
|
+
"booking_not_found",
|
|
2358
|
+
"booking_not_cancellable",
|
|
2359
|
+
"booking_not_reschedulable",
|
|
2360
|
+
"manage_token_invalid",
|
|
2361
|
+
"google_error",
|
|
2362
|
+
"calendar_not_owned",
|
|
2174
2363
|
"validation_error",
|
|
2175
2364
|
"unknown_service",
|
|
2176
2365
|
"invalid_sale_properties",
|
|
@@ -2178,66 +2367,67 @@ var zErrorCode2 = z3.enum([
|
|
|
2178
2367
|
"rate_limited",
|
|
2179
2368
|
"internal_error"
|
|
2180
2369
|
]);
|
|
2181
|
-
var zMeetLocation =
|
|
2182
|
-
kind:
|
|
2370
|
+
var zMeetLocation = z4.strictObject({
|
|
2371
|
+
kind: z4.literal("google_meet")
|
|
2183
2372
|
});
|
|
2184
|
-
var zPhoneLocation =
|
|
2185
|
-
kind:
|
|
2186
|
-
phone:
|
|
2373
|
+
var zPhoneLocation = z4.strictObject({
|
|
2374
|
+
kind: z4.literal("phone"),
|
|
2375
|
+
phone: z4.string().check(z4.maxLength(64))
|
|
2187
2376
|
});
|
|
2188
|
-
var zPhysicalLocation =
|
|
2189
|
-
address:
|
|
2190
|
-
kind:
|
|
2377
|
+
var zPhysicalLocation = z4.strictObject({
|
|
2378
|
+
address: z4.string().check(z4.maxLength(1024)),
|
|
2379
|
+
kind: z4.literal("physical")
|
|
2191
2380
|
});
|
|
2192
|
-
var zReminderMethod =
|
|
2193
|
-
var zBookingReminder =
|
|
2381
|
+
var zReminderMethod = z4.enum(["email", "popup"]);
|
|
2382
|
+
var zBookingReminder = z4.strictObject({
|
|
2194
2383
|
method: zReminderMethod,
|
|
2195
|
-
minutes_before:
|
|
2384
|
+
minutes_before: z4.int().check(z4.gte(0), z4.lte(40320))
|
|
2196
2385
|
});
|
|
2197
|
-
var zBookingReminders =
|
|
2198
|
-
overrides:
|
|
2199
|
-
use_calendar_defaults:
|
|
2386
|
+
var zBookingReminders = z4.strictObject({
|
|
2387
|
+
overrides: z4.optional(z4.array(zBookingReminder).check(z4.maxLength(5))),
|
|
2388
|
+
use_calendar_defaults: z4._default(z4.optional(z4.boolean()), true)
|
|
2200
2389
|
});
|
|
2201
|
-
var zBookingCreateSchema =
|
|
2202
|
-
appointment_type:
|
|
2203
|
-
attendees:
|
|
2204
|
-
buffer_after_minutes:
|
|
2205
|
-
buffer_before_minutes:
|
|
2206
|
-
calendar_key:
|
|
2390
|
+
var zBookingCreateSchema = z4.strictObject({
|
|
2391
|
+
appointment_type: z4.nullish(z4.string().check(z4.maxLength(64))),
|
|
2392
|
+
attendees: z4.optional(z4.array(zBookingAttendee).check(z4.maxLength(20))),
|
|
2393
|
+
buffer_after_minutes: z4._default(z4.optional(z4.int().check(z4.gte(0), z4.lte(1440))), 0),
|
|
2394
|
+
buffer_before_minutes: z4._default(z4.optional(z4.int().check(z4.gte(0), z4.lte(1440))), 0),
|
|
2395
|
+
calendar_key: z4.string().check(z4.minLength(1), z4.maxLength(64)),
|
|
2207
2396
|
customer: zBookingCustomerInput,
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2397
|
+
date: z4.nullish(z4.iso.date()),
|
|
2398
|
+
description: z4.nullish(z4.string().check(z4.maxLength(8e3))),
|
|
2399
|
+
duration_minutes: z4.nullish(z4.int().check(z4.gt(0), z4.lte(1440))),
|
|
2400
|
+
end_at: z4.nullish(z4.iso.datetime({ offset: true })),
|
|
2401
|
+
idempotency_key: z4.nullish(z4.string().check(z4.maxLength(128))),
|
|
2402
|
+
location: z4.nullish(z4.union([zMeetLocation, zPhysicalLocation, zPhoneLocation, zCustomLocation])),
|
|
2403
|
+
metadata: z4.nullish(zBookingMetadataInput),
|
|
2404
|
+
reminders: z4.nullish(zBookingReminders),
|
|
2405
|
+
send_invites: z4._default(z4.optional(z4.boolean()), true),
|
|
2406
|
+
start_at: z4.nullish(z4.iso.datetime({ offset: true })),
|
|
2407
|
+
time_zone: z4.string().check(z4.minLength(1), z4.maxLength(64), z4.regex(/^[A-Za-z0-9_+\-\/]+$/)),
|
|
2408
|
+
title: z4.nullish(z4.string().check(z4.maxLength(300)))
|
|
2219
2409
|
});
|
|
2220
|
-
var zValidationError2 =
|
|
2221
|
-
ctx:
|
|
2222
|
-
input:
|
|
2223
|
-
loc:
|
|
2224
|
-
msg:
|
|
2225
|
-
type:
|
|
2410
|
+
var zValidationError2 = z4.object({
|
|
2411
|
+
ctx: z4.optional(z4.record(z4.string(), z4.unknown())),
|
|
2412
|
+
input: z4.optional(z4.unknown()),
|
|
2413
|
+
loc: z4.array(z4.union([z4.string(), z4.int()])),
|
|
2414
|
+
msg: z4.string(),
|
|
2415
|
+
type: z4.string()
|
|
2226
2416
|
});
|
|
2227
|
-
var zHttpValidationError2 =
|
|
2228
|
-
detail:
|
|
2417
|
+
var zHttpValidationError2 = z4.object({
|
|
2418
|
+
detail: z4.optional(z4.array(zValidationError2))
|
|
2229
2419
|
});
|
|
2230
|
-
var zValidationErrorItem2 =
|
|
2231
|
-
loc:
|
|
2232
|
-
msg:
|
|
2233
|
-
type:
|
|
2420
|
+
var zValidationErrorItem2 = z4.object({
|
|
2421
|
+
loc: z4.array(z4.union([z4.string(), z4.int()])),
|
|
2422
|
+
msg: z4.string(),
|
|
2423
|
+
type: z4.string()
|
|
2234
2424
|
});
|
|
2235
|
-
var zApiErrorSchema2 =
|
|
2425
|
+
var zApiErrorSchema2 = z4.object({
|
|
2236
2426
|
code: zErrorCode2,
|
|
2237
|
-
context:
|
|
2238
|
-
detail:
|
|
2239
|
-
errors:
|
|
2240
|
-
request_id:
|
|
2427
|
+
context: z4._default(z4.nullish(z4.record(z4.string(), z4.unknown())), null),
|
|
2428
|
+
detail: z4.string(),
|
|
2429
|
+
errors: z4._default(z4.nullish(z4.array(zValidationErrorItem2)), null),
|
|
2430
|
+
request_id: z4._default(z4.nullish(z4.string()), null)
|
|
2241
2431
|
});
|
|
2242
2432
|
|
|
2243
2433
|
// ../tracking-core/src/resources/calendar/schema.ts
|
|
@@ -2247,22 +2437,17 @@ var MAX_REMINDER_OVERRIDES = 5;
|
|
|
2247
2437
|
var MAX_REMINDER_MINUTES = 40320;
|
|
2248
2438
|
var MAX_BOOKING_MINUTES = 1440;
|
|
2249
2439
|
var BOOKING_SOURCES = ["website", "phone", "walk_in", "import", "operator"];
|
|
2250
|
-
var BOOKING_STATUSES =
|
|
2251
|
-
var GOOGLE_SYNC_STATES =
|
|
2252
|
-
var CALENDAR_SYNC_STATUSES =
|
|
2253
|
-
"pending_invite",
|
|
2254
|
-
"awaiting_calendar_selection",
|
|
2255
|
-
"connected",
|
|
2256
|
-
"needs_reconnect",
|
|
2257
|
-
"revoked",
|
|
2258
|
-
"disabled"
|
|
2259
|
-
];
|
|
2440
|
+
var BOOKING_STATUSES = zBookingResponse.shape.status.options;
|
|
2441
|
+
var GOOGLE_SYNC_STATES = zBookingResponse.shape.google_sync_state.options;
|
|
2442
|
+
var CALENDAR_SYNC_STATUSES = zCalendarSummary.shape.status.options;
|
|
2260
2443
|
var CALENDAR_ERROR_CODES = [
|
|
2261
2444
|
"slot_unavailable",
|
|
2262
2445
|
"calendar_not_connected",
|
|
2263
2446
|
"calendar_disconnected",
|
|
2264
2447
|
"booking_not_found",
|
|
2265
|
-
"
|
|
2448
|
+
"booking_not_cancellable",
|
|
2449
|
+
"booking_not_reschedulable",
|
|
2450
|
+
"manage_token_invalid",
|
|
2266
2451
|
"rate_limited",
|
|
2267
2452
|
"google_error"
|
|
2268
2453
|
];
|
|
@@ -2274,29 +2459,29 @@ function isKnownTimeZone(timeZone) {
|
|
|
2274
2459
|
return false;
|
|
2275
2460
|
}
|
|
2276
2461
|
}
|
|
2277
|
-
var ianaTz =
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2462
|
+
var ianaTz = z5.string().check(
|
|
2463
|
+
z5.minLength(1),
|
|
2464
|
+
z5.maxLength(64),
|
|
2465
|
+
z5.regex(/^[A-Za-z0-9_+\-/]+$/),
|
|
2466
|
+
z5.refine(isKnownTimeZone, { error: "unknown IANA time zone" })
|
|
2282
2467
|
);
|
|
2283
2468
|
var bookingAttendeeSchema = zBookingAttendee;
|
|
2284
2469
|
var bookingReminderSchema = zBookingReminder;
|
|
2285
2470
|
var bookingCustomerSchema = zBookingCustomerInput;
|
|
2286
|
-
var bookingMetadataSchema =
|
|
2287
|
-
custom:
|
|
2288
|
-
|
|
2471
|
+
var bookingMetadataSchema = z5.extend(zBookingMetadataInput, {
|
|
2472
|
+
custom: z5.nullish(
|
|
2473
|
+
z5.record(z5.string(), z5.union([z5.string(), z5.int(), z5.number(), z5.boolean(), z5.null()]))
|
|
2289
2474
|
)
|
|
2290
2475
|
});
|
|
2291
|
-
var bookingLocationSchema =
|
|
2476
|
+
var bookingLocationSchema = z5.union([
|
|
2292
2477
|
zMeetLocation,
|
|
2293
2478
|
zPhysicalLocation,
|
|
2294
2479
|
zPhoneLocation,
|
|
2295
2480
|
zCustomLocation
|
|
2296
2481
|
]);
|
|
2297
|
-
var bookingLocationNullableSchema =
|
|
2482
|
+
var bookingLocationNullableSchema = z5.union([
|
|
2298
2483
|
...bookingLocationSchema.def.options,
|
|
2299
|
-
|
|
2484
|
+
z5.null()
|
|
2300
2485
|
]);
|
|
2301
2486
|
function addIssue2(ctx, path, message) {
|
|
2302
2487
|
ctx.issues.push({ code: "custom", input: ctx.value, path, message });
|
|
@@ -2312,26 +2497,44 @@ function refineEndXor(value, ctx) {
|
|
|
2312
2497
|
addIssue2(ctx, ["end_at"], "end_at must be after start_at");
|
|
2313
2498
|
}
|
|
2314
2499
|
}
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2500
|
+
function refineStartXor(value, ctx) {
|
|
2501
|
+
const hasStart = value.start_at !== void 0 && value.start_at !== null;
|
|
2502
|
+
const hasDate = value.date !== void 0 && value.date !== null;
|
|
2503
|
+
if (hasStart === hasDate) {
|
|
2504
|
+
addIssue2(ctx, ["start_at"], "provide exactly one of start_at or date");
|
|
2505
|
+
return;
|
|
2506
|
+
}
|
|
2507
|
+
if (hasStart) {
|
|
2508
|
+
refineEndXor(value, ctx);
|
|
2509
|
+
return;
|
|
2510
|
+
}
|
|
2511
|
+
if (value.end_at != null || value.duration_minutes != null) {
|
|
2512
|
+
addIssue2(ctx, ["date"], "an all-day booking (date) takes no end_at or duration_minutes");
|
|
2513
|
+
}
|
|
2514
|
+
if (value.buffer_before_minutes || value.buffer_after_minutes) {
|
|
2515
|
+
addIssue2(ctx, ["date"], "an all-day booking (date) takes no buffers");
|
|
2516
|
+
}
|
|
2517
|
+
}
|
|
2518
|
+
var bookingRemindersSchema = z5.extend(zBookingReminders, {
|
|
2519
|
+
overrides: z5._default(
|
|
2520
|
+
z5.array(bookingReminderSchema).check(z5.maxLength(MAX_REMINDER_OVERRIDES)),
|
|
2318
2521
|
[]
|
|
2319
2522
|
)
|
|
2320
2523
|
});
|
|
2321
|
-
var bookingCreateSchema =
|
|
2524
|
+
var bookingCreateSchema = z5.extend(zBookingCreateSchema, {
|
|
2322
2525
|
time_zone: ianaTz,
|
|
2323
2526
|
// The generated field is `z.union([...variants]).nullish()`, which nests one
|
|
2324
2527
|
// `anyOf` inside another; Pydantic's `BookingLocation | None` flattens to a
|
|
2325
2528
|
// single list and the drift snapshot compares structure. Override with the
|
|
2326
2529
|
// flattened union.
|
|
2327
|
-
location:
|
|
2328
|
-
attendees:
|
|
2530
|
+
location: z5.optional(bookingLocationNullableSchema),
|
|
2531
|
+
attendees: z5._default(z5.array(bookingAttendeeSchema).check(z5.maxLength(MAX_ATTENDEES)), []),
|
|
2329
2532
|
// These reference the un-composed generated schemas; generation can't nest
|
|
2330
2533
|
// our compositions into its own output.
|
|
2331
|
-
reminders:
|
|
2332
|
-
metadata:
|
|
2333
|
-
}).check((ctx) =>
|
|
2334
|
-
var bookingRescheduleSchema =
|
|
2534
|
+
reminders: z5.nullish(bookingRemindersSchema),
|
|
2535
|
+
metadata: z5.nullish(bookingMetadataSchema)
|
|
2536
|
+
}).check((ctx) => refineStartXor(ctx.value, ctx));
|
|
2537
|
+
var bookingRescheduleSchema = z5.extend(zBookingRescheduleSchema, { time_zone: ianaTz }).check((ctx) => refineEndXor(ctx.value, ctx));
|
|
2335
2538
|
var bookingCancelSchema = zBookingCancelSchema;
|
|
2336
2539
|
|
|
2337
2540
|
// ../tracking-core/src/resources/calendar/slots.ts
|
|
@@ -2489,7 +2692,10 @@ function useBookingForm(options = {}) {
|
|
|
2489
2692
|
const response = await fetch(endpoint, {
|
|
2490
2693
|
method: "POST",
|
|
2491
2694
|
headers: { "Content-Type": "application/json" },
|
|
2492
|
-
body: JSON.stringify(
|
|
2695
|
+
body: JSON.stringify({
|
|
2696
|
+
...input,
|
|
2697
|
+
metadata: { ...getBookingAttribution(), ...input.metadata }
|
|
2698
|
+
})
|
|
2493
2699
|
});
|
|
2494
2700
|
const body = await response.json().catch(() => null);
|
|
2495
2701
|
if (!response.ok) {
|
|
@@ -2570,6 +2776,7 @@ var import_client2 = require("@aranova/tracking-next/client");
|
|
|
2570
2776
|
formatPhoneAsTyped,
|
|
2571
2777
|
formatSlotRange,
|
|
2572
2778
|
fromMinor,
|
|
2779
|
+
getBookingAttribution,
|
|
2573
2780
|
getConsentChoice,
|
|
2574
2781
|
getConsentState,
|
|
2575
2782
|
getEventSemantics,
|