@aranova/tracking-react 1.12.0 → 1.13.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 +5 -3
- package/dist/{bookings-v_ucn93l.d.ts → bookings-C1HMPjQl.d.ts} +2 -0
- package/dist/{bookings-Lmi0o_PA.d.mts → bookings-CHpplXU7.d.mts} +2 -0
- package/dist/client.d.mts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +5 -1
- package/dist/client.js.map +1 -1
- package/dist/client.mjs +5 -1
- package/dist/client.mjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +305 -283
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +305 -283
- package/dist/index.mjs.map +1 -1
- package/dist/{ingest-typed-PKFEuJ8E.d.mts → ingest-typed-Ckt4R731.d.mts} +1 -1
- package/dist/{ingest-typed-B9I1c7jr.d.ts → ingest-typed-sCDoPInT.d.ts} +1 -1
- package/dist/{sales-DXLGjJQ6.d.ts → sales-CNvzyF5T.d.ts} +1 -1
- package/dist/{sales-6vMEcopj.d.mts → sales-YUH3bQl9.d.mts} +1 -1
- package/dist/sales.d.mts +2 -2
- package/dist/sales.d.ts +2 -2
- package/dist/sales.js +193 -171
- package/dist/sales.js.map +1 -1
- package/dist/sales.mjs +193 -171
- package/dist/sales.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1324,6 +1324,10 @@ var TrackingConfigRuntime = class {
|
|
|
1324
1324
|
integrations() {
|
|
1325
1325
|
return this.current?.integrations ?? null;
|
|
1326
1326
|
}
|
|
1327
|
+
/** The lead-form contracts, from the cached object like `integrations()`. */
|
|
1328
|
+
leadForms() {
|
|
1329
|
+
return this.current?.lead_forms ?? null;
|
|
1330
|
+
}
|
|
1327
1331
|
async revalidateNow() {
|
|
1328
1332
|
try {
|
|
1329
1333
|
const headers = {};
|
|
@@ -1706,6 +1710,118 @@ var SDK_PACKAGE_HEADER = "X-Aranova-Sdk-Package";
|
|
|
1706
1710
|
var SDK_SURFACE_HEADER = "X-Aranova-Sdk-Surface";
|
|
1707
1711
|
var SDK_ENVIRONMENT_HEADER = "X-Aranova-Sdk-Environment";
|
|
1708
1712
|
|
|
1713
|
+
// ../tracking-core/src/lead-forms/lead-forms.gen.ts
|
|
1714
|
+
import * as z2 from "zod/mini";
|
|
1715
|
+
var LEAD_FORM_REGISTRY_VERSION = 2;
|
|
1716
|
+
var LEAD_FORM_KINDS = ["booking", "quote", "contact", "consult", "callback"];
|
|
1717
|
+
var LEAD_FORM_ROLES = [
|
|
1718
|
+
"given_name",
|
|
1719
|
+
"family_name",
|
|
1720
|
+
"phone",
|
|
1721
|
+
"email",
|
|
1722
|
+
"service",
|
|
1723
|
+
"preferred_date",
|
|
1724
|
+
"preferred_time",
|
|
1725
|
+
"note",
|
|
1726
|
+
"visit",
|
|
1727
|
+
"intent",
|
|
1728
|
+
"vehicle",
|
|
1729
|
+
"drop_off",
|
|
1730
|
+
"address",
|
|
1731
|
+
"patient_type",
|
|
1732
|
+
"matter",
|
|
1733
|
+
"language",
|
|
1734
|
+
"products",
|
|
1735
|
+
"goal",
|
|
1736
|
+
"business_type",
|
|
1737
|
+
"lead_volume",
|
|
1738
|
+
"attribution"
|
|
1739
|
+
];
|
|
1740
|
+
var LEAD_FORM_PRIMITIVES = [
|
|
1741
|
+
"string",
|
|
1742
|
+
"text",
|
|
1743
|
+
"enum",
|
|
1744
|
+
"multi_enum",
|
|
1745
|
+
"bool",
|
|
1746
|
+
"date",
|
|
1747
|
+
"time_window",
|
|
1748
|
+
"phone",
|
|
1749
|
+
"email",
|
|
1750
|
+
"address",
|
|
1751
|
+
"number"
|
|
1752
|
+
];
|
|
1753
|
+
var leadFormPrimitiveSchemas = /* @__PURE__ */ (() => ({
|
|
1754
|
+
string: z2.string().check(z2.maxLength(120)),
|
|
1755
|
+
text: z2.string().check(z2.maxLength(2e3)),
|
|
1756
|
+
enum: z2.string().check(z2.regex(/^[a-z0-9-]{1,48}$/)),
|
|
1757
|
+
multi_enum: z2.array(z2.string().check(z2.regex(/^[a-z0-9-]{1,48}$/))).check(z2.maxLength(10)),
|
|
1758
|
+
bool: z2.boolean(),
|
|
1759
|
+
date: z2.string().check(z2.regex(/^\d{4}-\d{2}-\d{2}$/)),
|
|
1760
|
+
time_window: z2.strictObject({
|
|
1761
|
+
start: z2.string().check(z2.regex(/^([01]\d|2[0-3]):[0-5]\d$/)),
|
|
1762
|
+
end: z2.nullable(z2.string().check(z2.regex(/^([01]\d|2[0-3]):[0-5]\d$/))),
|
|
1763
|
+
label: z2.optional(z2.string().check(z2.maxLength(60)))
|
|
1764
|
+
}),
|
|
1765
|
+
phone: z2.string().check(z2.regex(/^\+[1-9]\d{6,14}$/)),
|
|
1766
|
+
email: z2.string().check(z2.maxLength(320), z2.regex(/^[^\s@]+@[^\s@]+$/)),
|
|
1767
|
+
address: z2.strictObject({
|
|
1768
|
+
line1: z2.string().check(z2.maxLength(120)),
|
|
1769
|
+
line2: z2.optional(z2.string().check(z2.maxLength(120))),
|
|
1770
|
+
city: z2.optional(z2.string().check(z2.maxLength(120))),
|
|
1771
|
+
region: z2.optional(z2.string().check(z2.maxLength(120))),
|
|
1772
|
+
postal_code: z2.optional(z2.string().check(z2.maxLength(120))),
|
|
1773
|
+
country: z2.optional(z2.string().check(z2.maxLength(120)))
|
|
1774
|
+
}),
|
|
1775
|
+
number: z2.number()
|
|
1776
|
+
}))();
|
|
1777
|
+
var LEAD_FORM_ROLE_SPECS = {
|
|
1778
|
+
given_name: { primitive: "string", smsLabel: "", contactIdentity: true },
|
|
1779
|
+
family_name: { primitive: "string", smsLabel: "", contactIdentity: true },
|
|
1780
|
+
phone: { primitive: "phone", smsLabel: "", contactIdentity: true },
|
|
1781
|
+
email: { primitive: "email", smsLabel: "", contactIdentity: true },
|
|
1782
|
+
service: { primitive: "multi_enum", smsLabel: "Service" },
|
|
1783
|
+
preferred_date: { primitive: "date", smsLabel: "Date" },
|
|
1784
|
+
preferred_time: { primitive: "time_window", smsLabel: "Time" },
|
|
1785
|
+
note: { primitive: "text", smsLabel: "Note" },
|
|
1786
|
+
visit: {
|
|
1787
|
+
primitive: "enum",
|
|
1788
|
+
smsLabel: "Visit",
|
|
1789
|
+
options: [
|
|
1790
|
+
{ key: "in-shop", label: "In shop" },
|
|
1791
|
+
{ key: "in-home", label: "In home" },
|
|
1792
|
+
{ key: "remote", label: "Remote" },
|
|
1793
|
+
{ key: "on-site", label: "On site" }
|
|
1794
|
+
]
|
|
1795
|
+
},
|
|
1796
|
+
intent: {
|
|
1797
|
+
primitive: "enum",
|
|
1798
|
+
smsLabel: "Wants",
|
|
1799
|
+
options: [
|
|
1800
|
+
{ key: "book", label: "Book" },
|
|
1801
|
+
{ key: "quote", label: "Quote" }
|
|
1802
|
+
]
|
|
1803
|
+
},
|
|
1804
|
+
vehicle: { primitive: "string", smsLabel: "Vehicle" },
|
|
1805
|
+
drop_off: {
|
|
1806
|
+
primitive: "enum",
|
|
1807
|
+
smsLabel: "Drop-off",
|
|
1808
|
+
options: [
|
|
1809
|
+
{ key: "wait-for-it", label: "Waiting" },
|
|
1810
|
+
{ key: "drop-off", label: "Dropping off" }
|
|
1811
|
+
]
|
|
1812
|
+
},
|
|
1813
|
+
address: { primitive: "address", smsLabel: "Address" },
|
|
1814
|
+
patient_type: { primitive: "enum", smsLabel: "Patient" },
|
|
1815
|
+
matter: { primitive: "enum", smsLabel: "Matter" },
|
|
1816
|
+
language: { primitive: "enum", smsLabel: "Language" },
|
|
1817
|
+
products: { primitive: "multi_enum", smsLabel: "Products" },
|
|
1818
|
+
goal: { primitive: "enum", smsLabel: "Goal" },
|
|
1819
|
+
business_type: { primitive: "enum", smsLabel: "Business" },
|
|
1820
|
+
lead_volume: { primitive: "enum", smsLabel: "Lead volume" },
|
|
1821
|
+
add_on: { primitive: "bool", smsLabel: "" },
|
|
1822
|
+
attribution: { primitive: "enum", smsLabel: "", uninteresting: true }
|
|
1823
|
+
};
|
|
1824
|
+
|
|
1709
1825
|
// ../tracking-core/src/resources/http/errors.ts
|
|
1710
1826
|
var AranovaApiError = class extends Error {
|
|
1711
1827
|
constructor(message, options) {
|
|
@@ -1799,39 +1915,54 @@ function outcomeOf(body) {
|
|
|
1799
1915
|
if (body.status === "pending") return { status: "pending", id: body.id, mode };
|
|
1800
1916
|
return { status: "failed", id: body.id, fallbackUrl: body.fallback_url, mode };
|
|
1801
1917
|
}
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
}
|
|
1810
|
-
const
|
|
1811
|
-
field("first_name", "text", "First name", input.firstName),
|
|
1812
|
-
field("last_name", "text", "Last name", input.lastName),
|
|
1918
|
+
var DROP_OFF_KEYS = {
|
|
1919
|
+
waitForIt: "wait-for-it",
|
|
1920
|
+
dropOff: "drop-off"
|
|
1921
|
+
};
|
|
1922
|
+
function formSubmitPayload(input, formSubmit, contractHash) {
|
|
1923
|
+
const field = (role, name, type, label, value) => ({ name, type, label, value, role });
|
|
1924
|
+
const text = (value) => value?.trim() || void 0;
|
|
1925
|
+
const { vehicle, dropOff } = input;
|
|
1926
|
+
const entries = [
|
|
1927
|
+
field("given_name", "first_name", "text", "First name", text(input.firstName)),
|
|
1928
|
+
field("family_name", "last_name", "text", "Last name", text(input.lastName)),
|
|
1813
1929
|
// E.164 on the wire: it keys the customer and enhanced-conversion matching.
|
|
1814
|
-
field("phone", "tel", "Phone", toE164(input.phone) ?? input.phone),
|
|
1815
|
-
field("email", "email", "Email", input.email
|
|
1930
|
+
field("phone", "phone", "tel", "Phone", toE164(input.phone) ?? input.phone),
|
|
1931
|
+
field("email", "email", "email", "Email", text(input.email)),
|
|
1932
|
+
field("service", "service", "select", "Service", input.services),
|
|
1816
1933
|
field(
|
|
1817
|
-
"
|
|
1818
|
-
"
|
|
1819
|
-
"
|
|
1820
|
-
|
|
1934
|
+
"vehicle",
|
|
1935
|
+
"vehicle",
|
|
1936
|
+
"text",
|
|
1937
|
+
"Vehicle",
|
|
1938
|
+
vehicle ? `${vehicle.year} ${vehicle.make} ${vehicle.model}` : void 0
|
|
1821
1939
|
),
|
|
1822
|
-
field("vehicle", "text", "Vehicle", vehicle),
|
|
1823
1940
|
field(
|
|
1824
|
-
"
|
|
1825
|
-
"
|
|
1826
|
-
"
|
|
1827
|
-
|
|
1941
|
+
"drop_off",
|
|
1942
|
+
"drop_off",
|
|
1943
|
+
"select",
|
|
1944
|
+
"Drop-off",
|
|
1945
|
+
dropOff ? DROP_OFF_KEYS[dropOff] : void 0
|
|
1828
1946
|
),
|
|
1829
|
-
field("
|
|
1947
|
+
field("preferred_date", "preferred_date", "date", "Date", input.startDate),
|
|
1948
|
+
field("preferred_time", "preferred_time", "time", "Time", {
|
|
1949
|
+
start: `${String(input.startHour).padStart(2, "0")}:00`,
|
|
1950
|
+
end: null
|
|
1951
|
+
}),
|
|
1952
|
+
field("note", "note", "textarea", "Notes", text(input.notes))
|
|
1830
1953
|
];
|
|
1831
|
-
const reported = new Set(
|
|
1954
|
+
const reported = new Set(entries.map((item) => item.name));
|
|
1955
|
+
const fields = entries.filter((item) => item.value !== void 0);
|
|
1832
1956
|
const extra = (formSubmit.extraFields ?? []).filter((item) => !reported.has(item.name));
|
|
1833
1957
|
return {
|
|
1834
|
-
form: {
|
|
1958
|
+
form: {
|
|
1959
|
+
id: formSubmit.formId,
|
|
1960
|
+
action: "/tracking/bookings",
|
|
1961
|
+
fields: [...fields, ...extra],
|
|
1962
|
+
kind: "booking",
|
|
1963
|
+
contract_version: LEAD_FORM_REGISTRY_VERSION,
|
|
1964
|
+
...contractHash ? { contract_hash: contractHash } : {}
|
|
1965
|
+
},
|
|
1835
1966
|
page: { path: typeof window === "undefined" ? "/" : window.location.pathname }
|
|
1836
1967
|
};
|
|
1837
1968
|
}
|
|
@@ -1929,8 +2060,11 @@ function createSalesBookingsClient(config, firing) {
|
|
|
1929
2060
|
}
|
|
1930
2061
|
if (formSubmit && !submittedForms.has(attemptKey)) {
|
|
1931
2062
|
submittedForms.add(attemptKey);
|
|
1932
|
-
const
|
|
1933
|
-
formSubmit.tracking.trackEvent(
|
|
2063
|
+
const contract = runtime?.leadForms()?.contracts.find((c) => c.form_kind === "booking");
|
|
2064
|
+
formSubmit.tracking.trackEvent(
|
|
2065
|
+
"form_submit",
|
|
2066
|
+
formSubmitPayload(input, formSubmit, contract?.contract_hash ?? null)
|
|
2067
|
+
);
|
|
1934
2068
|
}
|
|
1935
2069
|
const body = {
|
|
1936
2070
|
idempotency_key: attemptKey,
|
|
@@ -2180,17 +2314,17 @@ function createSalesClient(config) {
|
|
|
2180
2314
|
}
|
|
2181
2315
|
|
|
2182
2316
|
// ../tracking-core/src/resources/sales/schema.ts
|
|
2183
|
-
import * as
|
|
2317
|
+
import * as z4 from "zod/mini";
|
|
2184
2318
|
|
|
2185
2319
|
// ../tracking-core/src/resources/sales/generated/zod.gen.ts
|
|
2186
|
-
import * as
|
|
2187
|
-
var zAutoLeapSaleFacts =
|
|
2188
|
-
first_order:
|
|
2189
|
-
fleet_customer:
|
|
2190
|
-
invoice_code:
|
|
2191
|
-
invoice_id:
|
|
2320
|
+
import * as z3 from "zod/mini";
|
|
2321
|
+
var zAutoLeapSaleFacts = z3.object({
|
|
2322
|
+
first_order: z3.boolean(),
|
|
2323
|
+
fleet_customer: z3.boolean(),
|
|
2324
|
+
invoice_code: z3.string(),
|
|
2325
|
+
invoice_id: z3.string()
|
|
2192
2326
|
});
|
|
2193
|
-
var zErrorCode =
|
|
2327
|
+
var zErrorCode = z3.enum([
|
|
2194
2328
|
"missing_credentials",
|
|
2195
2329
|
"invalid_api_key",
|
|
2196
2330
|
"not_authenticated",
|
|
@@ -2234,37 +2368,37 @@ var zErrorCode = z2.enum([
|
|
|
2234
2368
|
"rate_limited",
|
|
2235
2369
|
"internal_error"
|
|
2236
2370
|
]);
|
|
2237
|
-
var zSaleItemEntitySchema =
|
|
2238
|
-
category:
|
|
2239
|
-
external_item_id:
|
|
2240
|
-
id:
|
|
2241
|
-
name:
|
|
2242
|
-
quantity:
|
|
2243
|
-
unit_cost_cents:
|
|
2244
|
-
unit_price_cents:
|
|
2371
|
+
var zSaleItemEntitySchema = z3.object({
|
|
2372
|
+
category: z3.nullable(z3.string()),
|
|
2373
|
+
external_item_id: z3.nullable(z3.string()),
|
|
2374
|
+
id: z3.uuid(),
|
|
2375
|
+
name: z3.nullable(z3.string()),
|
|
2376
|
+
quantity: z3.string().check(z3.regex(/^(?!^[-+.]*$)[+-]?0*\d*\.?\d*$/)),
|
|
2377
|
+
unit_cost_cents: z3.nullable(z3.int()),
|
|
2378
|
+
unit_price_cents: z3.int()
|
|
2245
2379
|
});
|
|
2246
|
-
var zSaleItemInputSchema =
|
|
2247
|
-
category:
|
|
2248
|
-
external_item_id:
|
|
2249
|
-
name:
|
|
2250
|
-
quantity:
|
|
2251
|
-
unit_cost_cents:
|
|
2252
|
-
unit_price_cents:
|
|
2380
|
+
var zSaleItemInputSchema = z3.strictObject({
|
|
2381
|
+
category: z3.nullish(z3.string()),
|
|
2382
|
+
external_item_id: z3.nullish(z3.string()),
|
|
2383
|
+
name: z3.nullish(z3.string()),
|
|
2384
|
+
quantity: z3.string().check(z3.regex(/^\d+(\.\d{1,3})?$/)),
|
|
2385
|
+
unit_cost_cents: z3.nullish(z3.int().check(z3.gte(0))),
|
|
2386
|
+
unit_price_cents: z3.int().check(z3.gte(0))
|
|
2253
2387
|
});
|
|
2254
|
-
var zSaleServiceEntitySchema =
|
|
2255
|
-
amount_cents:
|
|
2256
|
-
id:
|
|
2257
|
-
mapped:
|
|
2258
|
-
service_id:
|
|
2259
|
-
service_key:
|
|
2260
|
-
service_label:
|
|
2388
|
+
var zSaleServiceEntitySchema = z3.object({
|
|
2389
|
+
amount_cents: z3.int(),
|
|
2390
|
+
id: z3.uuid(),
|
|
2391
|
+
mapped: z3.nullable(z3.boolean()),
|
|
2392
|
+
service_id: z3.uuid(),
|
|
2393
|
+
service_key: z3.string(),
|
|
2394
|
+
service_label: z3.string()
|
|
2261
2395
|
});
|
|
2262
|
-
var zSaleServiceInputSchema =
|
|
2263
|
-
amount_cents:
|
|
2264
|
-
service:
|
|
2396
|
+
var zSaleServiceInputSchema = z3.strictObject({
|
|
2397
|
+
amount_cents: z3.int().check(z3.gte(0)),
|
|
2398
|
+
service: z3.string()
|
|
2265
2399
|
});
|
|
2266
|
-
var zSaleSource =
|
|
2267
|
-
var zSmsAutomationState =
|
|
2400
|
+
var zSaleSource = z3.enum(["api", "admin", "autoleap"]);
|
|
2401
|
+
var zSmsAutomationState = z3.enum([
|
|
2268
2402
|
"needs_check",
|
|
2269
2403
|
"failed",
|
|
2270
2404
|
"undelivered",
|
|
@@ -2276,7 +2410,7 @@ var zSmsAutomationState = z2.enum([
|
|
|
2276
2410
|
"eligible",
|
|
2277
2411
|
"not_applicable"
|
|
2278
2412
|
]);
|
|
2279
|
-
var zSmsWithheldReason =
|
|
2413
|
+
var zSmsWithheldReason = z3.enum([
|
|
2280
2414
|
"automation_disabled",
|
|
2281
2415
|
"sms_disabled",
|
|
2282
2416
|
"no_phone",
|
|
@@ -2304,75 +2438,75 @@ var zSmsWithheldReason = z2.enum([
|
|
|
2304
2438
|
"invalid_phone",
|
|
2305
2439
|
"recently_texted"
|
|
2306
2440
|
]);
|
|
2307
|
-
var zSaleSmsStatusSchema =
|
|
2308
|
-
can_send_now:
|
|
2309
|
-
last_message_at:
|
|
2310
|
-
reason_detail:
|
|
2441
|
+
var zSaleSmsStatusSchema = z3.object({
|
|
2442
|
+
can_send_now: z3._default(z3.boolean(), false),
|
|
2443
|
+
last_message_at: z3.nullable(z3.iso.datetime({ offset: true })),
|
|
2444
|
+
reason_detail: z3.nullable(z3.string()),
|
|
2311
2445
|
state: zSmsAutomationState,
|
|
2312
|
-
suppressed_by_other_sale:
|
|
2313
|
-
withheld_reason:
|
|
2446
|
+
suppressed_by_other_sale: z3._default(z3.boolean(), false),
|
|
2447
|
+
withheld_reason: z3.nullable(zSmsWithheldReason)
|
|
2314
2448
|
});
|
|
2315
|
-
var zSupportedCurrency =
|
|
2316
|
-
var zTrackingEnvironment =
|
|
2317
|
-
var zSaleCreateSchema =
|
|
2318
|
-
amount_total_cents:
|
|
2449
|
+
var zSupportedCurrency = z3.enum(["USD", "CAD"]);
|
|
2450
|
+
var zTrackingEnvironment = z3.enum(["production", "development"]);
|
|
2451
|
+
var zSaleCreateSchema = z3.strictObject({
|
|
2452
|
+
amount_total_cents: z3.nullish(z3.int().check(z3.gte(0))),
|
|
2319
2453
|
currency: zSupportedCurrency,
|
|
2320
|
-
customer_email:
|
|
2321
|
-
customer_name:
|
|
2322
|
-
customer_phone:
|
|
2323
|
-
description:
|
|
2324
|
-
environment:
|
|
2325
|
-
external_id:
|
|
2326
|
-
items:
|
|
2327
|
-
metadata:
|
|
2328
|
-
occurred_at:
|
|
2329
|
-
service:
|
|
2330
|
-
services:
|
|
2331
|
-
sms_consent:
|
|
2454
|
+
customer_email: z3.nullish(z3.email().check(z3.maxLength(320))),
|
|
2455
|
+
customer_name: z3.nullish(z3.string().check(z3.maxLength(200))),
|
|
2456
|
+
customer_phone: z3.nullish(z3.string().check(z3.maxLength(64))),
|
|
2457
|
+
description: z3.nullish(z3.string()),
|
|
2458
|
+
environment: z3._default(z3.optional(zTrackingEnvironment), "production"),
|
|
2459
|
+
external_id: z3.nullish(z3.string()),
|
|
2460
|
+
items: z3.optional(z3.array(zSaleItemInputSchema)),
|
|
2461
|
+
metadata: z3.nullish(z3.record(z3.string(), z3.unknown())),
|
|
2462
|
+
occurred_at: z3.iso.datetime({ offset: true }),
|
|
2463
|
+
service: z3.nullish(z3.string()),
|
|
2464
|
+
services: z3.nullish(z3.array(zSaleServiceInputSchema)),
|
|
2465
|
+
sms_consent: z3.nullish(z3.boolean())
|
|
2332
2466
|
});
|
|
2333
|
-
var zValidationError =
|
|
2334
|
-
ctx:
|
|
2335
|
-
input:
|
|
2336
|
-
loc:
|
|
2337
|
-
msg:
|
|
2338
|
-
type:
|
|
2467
|
+
var zValidationError = z3.object({
|
|
2468
|
+
ctx: z3.optional(z3.record(z3.string(), z3.unknown())),
|
|
2469
|
+
input: z3.optional(z3.unknown()),
|
|
2470
|
+
loc: z3.array(z3.union([z3.string(), z3.int()])),
|
|
2471
|
+
msg: z3.string(),
|
|
2472
|
+
type: z3.string()
|
|
2339
2473
|
});
|
|
2340
|
-
var zHttpValidationError =
|
|
2341
|
-
detail:
|
|
2474
|
+
var zHttpValidationError = z3.object({
|
|
2475
|
+
detail: z3.optional(z3.array(zValidationError))
|
|
2342
2476
|
});
|
|
2343
|
-
var zValidationErrorItem =
|
|
2344
|
-
loc:
|
|
2345
|
-
msg:
|
|
2346
|
-
type:
|
|
2477
|
+
var zValidationErrorItem = z3.object({
|
|
2478
|
+
loc: z3.array(z3.union([z3.string(), z3.int()])),
|
|
2479
|
+
msg: z3.string(),
|
|
2480
|
+
type: z3.string()
|
|
2347
2481
|
});
|
|
2348
|
-
var zApiErrorSchema =
|
|
2482
|
+
var zApiErrorSchema = z3.object({
|
|
2349
2483
|
code: zErrorCode,
|
|
2350
|
-
context:
|
|
2351
|
-
detail:
|
|
2352
|
-
errors:
|
|
2353
|
-
request_id:
|
|
2484
|
+
context: z3._default(z3.nullish(z3.record(z3.string(), z3.unknown())), null),
|
|
2485
|
+
detail: z3.string(),
|
|
2486
|
+
errors: z3._default(z3.nullish(z3.array(zValidationErrorItem)), null),
|
|
2487
|
+
request_id: z3._default(z3.nullish(z3.string()), null)
|
|
2354
2488
|
});
|
|
2355
|
-
var zWritebackEmailSource =
|
|
2356
|
-
var zWritebackEnrichmentStatus =
|
|
2357
|
-
var zWritebackSaleUploadCounts =
|
|
2358
|
-
failed:
|
|
2359
|
-
pending:
|
|
2360
|
-
skipped:
|
|
2361
|
-
submitted:
|
|
2362
|
-
total:
|
|
2363
|
-
uploaded:
|
|
2489
|
+
var zWritebackEmailSource = z3.enum(["NONE", "SALE", "CUSTOMER", "HARVESTED"]);
|
|
2490
|
+
var zWritebackEnrichmentStatus = z3.enum(["NONE", "MATCHED", "AMBIGUOUS"]);
|
|
2491
|
+
var zWritebackSaleUploadCounts = z3.object({
|
|
2492
|
+
failed: z3._default(z3.int(), 0),
|
|
2493
|
+
pending: z3._default(z3.int(), 0),
|
|
2494
|
+
skipped: z3._default(z3.int(), 0),
|
|
2495
|
+
submitted: z3._default(z3.int(), 0),
|
|
2496
|
+
total: z3._default(z3.int(), 0),
|
|
2497
|
+
uploaded: z3._default(z3.int(), 0)
|
|
2364
2498
|
});
|
|
2365
|
-
var zSaleWritebackStatusSchema =
|
|
2366
|
-
blocked_reason:
|
|
2367
|
-
can_dispatch:
|
|
2368
|
-
email_source:
|
|
2369
|
-
enrichment_status:
|
|
2370
|
-
gclid_attached:
|
|
2371
|
-
identifiers_sent:
|
|
2372
|
-
mapped_service_ids:
|
|
2373
|
-
matched_submit_count:
|
|
2374
|
-
needs_force:
|
|
2375
|
-
rollup:
|
|
2499
|
+
var zSaleWritebackStatusSchema = z3.object({
|
|
2500
|
+
blocked_reason: z3.nullable(z3.string()),
|
|
2501
|
+
can_dispatch: z3._default(z3.boolean(), false),
|
|
2502
|
+
email_source: z3.nullable(zWritebackEmailSource),
|
|
2503
|
+
enrichment_status: z3.nullable(zWritebackEnrichmentStatus),
|
|
2504
|
+
gclid_attached: z3._default(z3.boolean(), false),
|
|
2505
|
+
identifiers_sent: z3.nullable(z3.string()),
|
|
2506
|
+
mapped_service_ids: z3.array(z3.uuid()),
|
|
2507
|
+
matched_submit_count: z3.nullable(z3.int()),
|
|
2508
|
+
needs_force: z3._default(z3.boolean(), false),
|
|
2509
|
+
rollup: z3.enum([
|
|
2376
2510
|
"failed",
|
|
2377
2511
|
"skipped",
|
|
2378
2512
|
"pending",
|
|
@@ -2382,39 +2516,39 @@ var zSaleWritebackStatusSchema = z2.object({
|
|
|
2382
2516
|
"out_of_window",
|
|
2383
2517
|
"blocked"
|
|
2384
2518
|
]),
|
|
2385
|
-
stale:
|
|
2386
|
-
uncovered_service_ids:
|
|
2519
|
+
stale: z3._default(z3.boolean(), false),
|
|
2520
|
+
uncovered_service_ids: z3.array(z3.uuid()),
|
|
2387
2521
|
uploads: zWritebackSaleUploadCounts
|
|
2388
2522
|
});
|
|
2389
|
-
var zSaleEntitySchema =
|
|
2390
|
-
amount_total_cents:
|
|
2391
|
-
business_id:
|
|
2392
|
-
business_name:
|
|
2393
|
-
created_at:
|
|
2394
|
-
currency:
|
|
2395
|
-
customer_email:
|
|
2396
|
-
customer_name:
|
|
2397
|
-
customer_name_placeholder_confirmed:
|
|
2398
|
-
customer_name_placeholder_confirmed_at:
|
|
2399
|
-
customer_phone:
|
|
2400
|
-
description:
|
|
2523
|
+
var zSaleEntitySchema = z3.object({
|
|
2524
|
+
amount_total_cents: z3.int(),
|
|
2525
|
+
business_id: z3.uuid(),
|
|
2526
|
+
business_name: z3.nullable(z3.string()),
|
|
2527
|
+
created_at: z3.iso.datetime({ offset: true }),
|
|
2528
|
+
currency: z3.string(),
|
|
2529
|
+
customer_email: z3.nullable(z3.string()),
|
|
2530
|
+
customer_name: z3.nullable(z3.string()),
|
|
2531
|
+
customer_name_placeholder_confirmed: z3._default(z3.boolean(), false),
|
|
2532
|
+
customer_name_placeholder_confirmed_at: z3.nullable(z3.iso.datetime({ offset: true })),
|
|
2533
|
+
customer_phone: z3.nullable(z3.string()),
|
|
2534
|
+
description: z3.nullable(z3.string()),
|
|
2401
2535
|
environment: zTrackingEnvironment,
|
|
2402
|
-
external_id:
|
|
2403
|
-
id:
|
|
2404
|
-
items:
|
|
2405
|
-
metadata:
|
|
2406
|
-
occurred_at:
|
|
2407
|
-
service_id:
|
|
2408
|
-
service_key:
|
|
2409
|
-
service_label:
|
|
2410
|
-
services:
|
|
2411
|
-
sms_automation:
|
|
2412
|
-
sms_consent:
|
|
2413
|
-
sms_consent_granted_at:
|
|
2536
|
+
external_id: z3.nullable(z3.string()),
|
|
2537
|
+
id: z3.uuid(),
|
|
2538
|
+
items: z3.array(zSaleItemEntitySchema),
|
|
2539
|
+
metadata: z3.nullable(z3.record(z3.string(), z3.unknown())),
|
|
2540
|
+
occurred_at: z3.iso.datetime({ offset: true }),
|
|
2541
|
+
service_id: z3.nullable(z3.uuid()),
|
|
2542
|
+
service_key: z3.nullable(z3.string()),
|
|
2543
|
+
service_label: z3.nullable(z3.string()),
|
|
2544
|
+
services: z3.array(zSaleServiceEntitySchema),
|
|
2545
|
+
sms_automation: z3.nullable(zSaleSmsStatusSchema),
|
|
2546
|
+
sms_consent: z3._default(z3.boolean(), false),
|
|
2547
|
+
sms_consent_granted_at: z3.nullable(z3.iso.datetime({ offset: true })),
|
|
2414
2548
|
source: zSaleSource,
|
|
2415
|
-
source_facts:
|
|
2416
|
-
updated_at:
|
|
2417
|
-
writeback:
|
|
2549
|
+
source_facts: z3.nullable(zAutoLeapSaleFacts),
|
|
2550
|
+
updated_at: z3.iso.datetime({ offset: true }),
|
|
2551
|
+
writeback: z3.nullable(zSaleWritebackStatusSchema)
|
|
2418
2552
|
});
|
|
2419
2553
|
|
|
2420
2554
|
// ../tracking-core/src/resources/sales/schema.ts
|
|
@@ -2423,11 +2557,11 @@ var saleServiceSchema = zSaleServiceInputSchema;
|
|
|
2423
2557
|
var currencySchema = zSupportedCurrency;
|
|
2424
2558
|
var SUPPORTED_CURRENCIES = currencySchema.options;
|
|
2425
2559
|
var SALE_SOURCES = zSaleSource.options;
|
|
2426
|
-
var centsSchema =
|
|
2427
|
-
var metadataSchema =
|
|
2428
|
-
var customerNameSchema =
|
|
2429
|
-
var customerPhoneSchema =
|
|
2430
|
-
var customerEmailSchema =
|
|
2560
|
+
var centsSchema = z4.int().check(z4.gte(0));
|
|
2561
|
+
var metadataSchema = z4.record(z4.string(), z4.unknown());
|
|
2562
|
+
var customerNameSchema = z4.string().check(z4.maxLength(200));
|
|
2563
|
+
var customerPhoneSchema = z4.string().check(z4.maxLength(64));
|
|
2564
|
+
var customerEmailSchema = z4.email().check(z4.maxLength(320));
|
|
2431
2565
|
function addIssue(ctx, path, message) {
|
|
2432
2566
|
ctx.issues.push({ code: "custom", input: ctx.value, path, message });
|
|
2433
2567
|
}
|
|
@@ -2461,24 +2595,24 @@ function refineServiceXor(val, ctx, { requireAmount }) {
|
|
|
2461
2595
|
);
|
|
2462
2596
|
}
|
|
2463
2597
|
}
|
|
2464
|
-
var saleCreateSchema =
|
|
2465
|
-
var saleUpdateSchema =
|
|
2466
|
-
description:
|
|
2467
|
-
service:
|
|
2468
|
-
services:
|
|
2469
|
-
currency:
|
|
2470
|
-
amount_total_cents:
|
|
2471
|
-
occurred_at:
|
|
2472
|
-
items:
|
|
2473
|
-
metadata:
|
|
2474
|
-
customer_name:
|
|
2598
|
+
var saleCreateSchema = z4.extend(zSaleCreateSchema, { items: z4._default(z4.array(saleItemSchema), []) }).check((ctx) => refineServiceXor(ctx.value, ctx, { requireAmount: true }));
|
|
2599
|
+
var saleUpdateSchema = z4.strictObject({
|
|
2600
|
+
description: z4.nullish(z4.string()),
|
|
2601
|
+
service: z4.nullish(z4.string()),
|
|
2602
|
+
services: z4.nullish(z4.array(saleServiceSchema)),
|
|
2603
|
+
currency: z4.optional(currencySchema),
|
|
2604
|
+
amount_total_cents: z4.optional(centsSchema),
|
|
2605
|
+
occurred_at: z4.optional(z4.iso.datetime()),
|
|
2606
|
+
items: z4.optional(z4.array(saleItemSchema)),
|
|
2607
|
+
metadata: z4.nullish(metadataSchema),
|
|
2608
|
+
customer_name: z4.nullish(customerNameSchema),
|
|
2475
2609
|
// Re-attest when changing a filler-looking name; the server clears the
|
|
2476
2610
|
// prior attestation whenever `customer_name` changes.
|
|
2477
|
-
customer_name_placeholder_confirmed:
|
|
2478
|
-
customer_phone:
|
|
2479
|
-
customer_email:
|
|
2611
|
+
customer_name_placeholder_confirmed: z4.optional(z4.boolean()),
|
|
2612
|
+
customer_phone: z4.nullish(customerPhoneSchema),
|
|
2613
|
+
customer_email: z4.nullish(customerEmailSchema),
|
|
2480
2614
|
// NOT NULL server-side: omit to leave unchanged (explicit null is rejected).
|
|
2481
|
-
sms_consent:
|
|
2615
|
+
sms_consent: z4.optional(z4.boolean())
|
|
2482
2616
|
}).check((ctx) => refineServiceXor(ctx.value, ctx, { requireAmount: false }));
|
|
2483
2617
|
var TRACKING_RANGES = ["24h", "7d", "30d"];
|
|
2484
2618
|
var NAMED_RANGES = [
|
|
@@ -2505,118 +2639,6 @@ function phoneField(name, raw, country) {
|
|
|
2505
2639
|
return { name, type: "phone", value: toE164(raw, country) };
|
|
2506
2640
|
}
|
|
2507
2641
|
|
|
2508
|
-
// ../tracking-core/src/lead-forms/lead-forms.gen.ts
|
|
2509
|
-
import * as z4 from "zod/mini";
|
|
2510
|
-
var LEAD_FORM_REGISTRY_VERSION = 1;
|
|
2511
|
-
var LEAD_FORM_KINDS = ["booking", "quote", "contact", "consult", "callback"];
|
|
2512
|
-
var LEAD_FORM_ROLES = [
|
|
2513
|
-
"given_name",
|
|
2514
|
-
"family_name",
|
|
2515
|
-
"phone",
|
|
2516
|
-
"email",
|
|
2517
|
-
"service",
|
|
2518
|
-
"preferred_date",
|
|
2519
|
-
"preferred_time",
|
|
2520
|
-
"note",
|
|
2521
|
-
"visit",
|
|
2522
|
-
"intent",
|
|
2523
|
-
"vehicle",
|
|
2524
|
-
"drop_off",
|
|
2525
|
-
"address",
|
|
2526
|
-
"patient_type",
|
|
2527
|
-
"matter",
|
|
2528
|
-
"language",
|
|
2529
|
-
"products",
|
|
2530
|
-
"goal",
|
|
2531
|
-
"business_type",
|
|
2532
|
-
"lead_volume",
|
|
2533
|
-
"attribution"
|
|
2534
|
-
];
|
|
2535
|
-
var LEAD_FORM_PRIMITIVES = [
|
|
2536
|
-
"string",
|
|
2537
|
-
"text",
|
|
2538
|
-
"enum",
|
|
2539
|
-
"multi_enum",
|
|
2540
|
-
"bool",
|
|
2541
|
-
"date",
|
|
2542
|
-
"time_window",
|
|
2543
|
-
"phone",
|
|
2544
|
-
"email",
|
|
2545
|
-
"address",
|
|
2546
|
-
"number"
|
|
2547
|
-
];
|
|
2548
|
-
var leadFormPrimitiveSchemas = {
|
|
2549
|
-
string: z4.string().check(z4.maxLength(120)),
|
|
2550
|
-
text: z4.string().check(z4.maxLength(2e3)),
|
|
2551
|
-
enum: z4.string().check(z4.regex(/^[a-z0-9-]{1,48}$/)),
|
|
2552
|
-
multi_enum: z4.array(z4.string().check(z4.regex(/^[a-z0-9-]{1,48}$/))).check(z4.maxLength(10)),
|
|
2553
|
-
bool: z4.boolean(),
|
|
2554
|
-
date: z4.string().check(z4.regex(/^\d{4}-\d{2}-\d{2}$/)),
|
|
2555
|
-
time_window: z4.strictObject({
|
|
2556
|
-
start: z4.string().check(z4.regex(/^([01]\d|2[0-3]):[0-5]\d$/)),
|
|
2557
|
-
end: z4.nullable(z4.string().check(z4.regex(/^([01]\d|2[0-3]):[0-5]\d$/))),
|
|
2558
|
-
label: z4.optional(z4.string().check(z4.maxLength(60)))
|
|
2559
|
-
}),
|
|
2560
|
-
phone: z4.string().check(z4.regex(/^\+[1-9]\d{6,14}$/)),
|
|
2561
|
-
email: z4.string().check(z4.maxLength(320), z4.regex(/^[^\s@]+@[^\s@]+$/)),
|
|
2562
|
-
address: z4.strictObject({
|
|
2563
|
-
line1: z4.string().check(z4.maxLength(120)),
|
|
2564
|
-
line2: z4.optional(z4.string().check(z4.maxLength(120))),
|
|
2565
|
-
city: z4.optional(z4.string().check(z4.maxLength(120))),
|
|
2566
|
-
region: z4.optional(z4.string().check(z4.maxLength(120))),
|
|
2567
|
-
postal_code: z4.optional(z4.string().check(z4.maxLength(120))),
|
|
2568
|
-
country: z4.optional(z4.string().check(z4.maxLength(120)))
|
|
2569
|
-
}),
|
|
2570
|
-
number: z4.number()
|
|
2571
|
-
};
|
|
2572
|
-
var LEAD_FORM_ROLE_SPECS = {
|
|
2573
|
-
given_name: { primitive: "string", smsLabel: "", contactIdentity: true },
|
|
2574
|
-
family_name: { primitive: "string", smsLabel: "", contactIdentity: true },
|
|
2575
|
-
phone: { primitive: "phone", smsLabel: "", contactIdentity: true },
|
|
2576
|
-
email: { primitive: "email", smsLabel: "", contactIdentity: true },
|
|
2577
|
-
service: { primitive: "enum", smsLabel: "Service" },
|
|
2578
|
-
preferred_date: { primitive: "date", smsLabel: "Date" },
|
|
2579
|
-
preferred_time: { primitive: "time_window", smsLabel: "Time" },
|
|
2580
|
-
note: { primitive: "text", smsLabel: "Note" },
|
|
2581
|
-
visit: {
|
|
2582
|
-
primitive: "enum",
|
|
2583
|
-
smsLabel: "Visit",
|
|
2584
|
-
options: [
|
|
2585
|
-
{ key: "in-shop", label: "In shop" },
|
|
2586
|
-
{ key: "in-home", label: "In home" },
|
|
2587
|
-
{ key: "remote", label: "Remote" },
|
|
2588
|
-
{ key: "on-site", label: "On site" }
|
|
2589
|
-
]
|
|
2590
|
-
},
|
|
2591
|
-
intent: {
|
|
2592
|
-
primitive: "enum",
|
|
2593
|
-
smsLabel: "Wants",
|
|
2594
|
-
options: [
|
|
2595
|
-
{ key: "book", label: "Book" },
|
|
2596
|
-
{ key: "quote", label: "Quote" }
|
|
2597
|
-
]
|
|
2598
|
-
},
|
|
2599
|
-
vehicle: { primitive: "string", smsLabel: "Vehicle" },
|
|
2600
|
-
drop_off: {
|
|
2601
|
-
primitive: "enum",
|
|
2602
|
-
smsLabel: "Drop-off",
|
|
2603
|
-
options: [
|
|
2604
|
-
{ key: "wait-for-it", label: "Waiting" },
|
|
2605
|
-
{ key: "drop-off", label: "Dropping off" }
|
|
2606
|
-
]
|
|
2607
|
-
},
|
|
2608
|
-
address: { primitive: "address", smsLabel: "Address" },
|
|
2609
|
-
patient_type: { primitive: "enum", smsLabel: "Patient" },
|
|
2610
|
-
matter: { primitive: "enum", smsLabel: "Matter" },
|
|
2611
|
-
language: { primitive: "enum", smsLabel: "Language" },
|
|
2612
|
-
products: { primitive: "multi_enum", smsLabel: "Products" },
|
|
2613
|
-
goal: { primitive: "enum", smsLabel: "Goal" },
|
|
2614
|
-
business_type: { primitive: "enum", smsLabel: "Business" },
|
|
2615
|
-
lead_volume: { primitive: "enum", smsLabel: "Lead volume" },
|
|
2616
|
-
add_on: { primitive: "bool", smsLabel: "" },
|
|
2617
|
-
attribution: { primitive: "enum", smsLabel: "", uninteresting: true }
|
|
2618
|
-
};
|
|
2619
|
-
|
|
2620
2642
|
// src/index.ts
|
|
2621
2643
|
import {
|
|
2622
2644
|
PhoneField,
|