@hanzo/event 0.3.49 → 0.3.52

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/dist/index.d.cts CHANGED
@@ -7,10 +7,10 @@ export { scrubText, redactSecrets, scrubPII } from './scrub';
7
7
  export { EVENTS, EXCEPTION, PAGEVIEW } from './events';
8
8
  export { exceptionEntry, exceptionProperties, fingerprint, digest } from './exception';
9
9
  export type { EventName } from './events';
10
- export { CONSENT_COOKIE, CONSENT_EVENT, acceptAll, asks, gpc, read as readConsent, refused, region, rejectAll, render as renderConsent, save as saveConsent, stored as storedConsent, } from './consent';
11
- export type { Choice, Region } from './consent';
10
+ export { CONSENT_COOKIE, CONSENT_EVENT, CONSENT_VERSION_COOKIE, POLICY_EVENT, acceptAll, asks, gpc, notices, policy as consentPolicy, serve as serveConsent, read as readConsent, refused, region, rejectAll, render as renderConsent, save as saveConsent, stored as storedConsent, } from './consent';
11
+ export type { Choice, Policy as ConsentRule, Region } from './consent';
12
12
  export { CLICK_IDS, capture as captureClick, touch } from './touch';
13
- export { start as startTags, track, mirror, reach, visit, SITE_KEY } from './tags';
13
+ export { start as startTags, ready as tagsReady, track, mirror, reach, visit } from './tags';
14
14
  export type { BrowserTag, TagOptions } from './tags';
15
15
  export { commerceItem, worth } from './items';
16
16
  export type { CommerceItem, PlanLine } from './items';
@@ -24,6 +24,6 @@ export type { AnalyticsConfig, Attribution, CaptureErrorOptions, Cohort, EventKi
24
24
  * correctly while configuring nothing. `keyFor` takes an optional keyring so a
25
25
  * runtime that receives one (hanzo.id serves every brand from one image) resolves
26
26
  * through this same function rather than a second copy of it. */
27
- export { ORG_DOMAIN, ORG_KEY, orgOf, keyFor, keyForPage } from './org';
27
+ export { ORG_DOMAIN, ORG_KEY, SITE_KEY, siteKey, orgOf, keyFor, keyForPage } from './org';
28
28
  export type { Keyring } from './org';
29
29
  //# sourceMappingURL=index.d.ts.map
package/dist/index.d.ts CHANGED
@@ -7,10 +7,10 @@ export { scrubText, redactSecrets, scrubPII } from './scrub';
7
7
  export { EVENTS, EXCEPTION, PAGEVIEW } from './events';
8
8
  export { exceptionEntry, exceptionProperties, fingerprint, digest } from './exception';
9
9
  export type { EventName } from './events';
10
- export { CONSENT_COOKIE, CONSENT_EVENT, acceptAll, asks, gpc, read as readConsent, refused, region, rejectAll, render as renderConsent, save as saveConsent, stored as storedConsent, } from './consent';
11
- export type { Choice, Region } from './consent';
10
+ export { CONSENT_COOKIE, CONSENT_EVENT, CONSENT_VERSION_COOKIE, POLICY_EVENT, acceptAll, asks, gpc, notices, policy as consentPolicy, serve as serveConsent, read as readConsent, refused, region, rejectAll, render as renderConsent, save as saveConsent, stored as storedConsent, } from './consent';
11
+ export type { Choice, Policy as ConsentRule, Region } from './consent';
12
12
  export { CLICK_IDS, capture as captureClick, touch } from './touch';
13
- export { start as startTags, track, mirror, reach, visit, SITE_KEY } from './tags';
13
+ export { start as startTags, ready as tagsReady, track, mirror, reach, visit } from './tags';
14
14
  export type { BrowserTag, TagOptions } from './tags';
15
15
  export { commerceItem, worth } from './items';
16
16
  export type { CommerceItem, PlanLine } from './items';
@@ -24,6 +24,6 @@ export type { AnalyticsConfig, Attribution, CaptureErrorOptions, Cohort, EventKi
24
24
  * correctly while configuring nothing. `keyFor` takes an optional keyring so a
25
25
  * runtime that receives one (hanzo.id serves every brand from one image) resolves
26
26
  * through this same function rather than a second copy of it. */
27
- export { ORG_DOMAIN, ORG_KEY, orgOf, keyFor, keyForPage } from './org';
27
+ export { ORG_DOMAIN, ORG_KEY, SITE_KEY, siteKey, orgOf, keyFor, keyForPage } from './org';
28
28
  export type { Keyring } from './org';
29
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,OAAO,EACP,SAAS,EACT,aAAa,GACd,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAClE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACtF,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EACL,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,WAAW,EAAE,OAAO,EAAE,MAAM,EACzF,SAAS,EAAE,MAAM,IAAI,aAAa,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,IAAI,aAAa,GACjF,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAClF,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACvD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC3E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,MAAM,EACN,OAAO,GACR,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,SAAS,CAAA;AAEhB;;;kEAGkE;AAClE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACtE,YAAY,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AASA,OAAO,EACL,SAAS,EACT,eAAe,EACf,YAAY,EACZ,OAAO,EACP,SAAS,EACT,aAAa,GACd,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAClE,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACtF,YAAY,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACzC,OAAO,EACL,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,KAAK,IAAI,YAAY,EAAE,IAAI,IAAI,WAAW,EAAE,OAAO,EAAE,MAAM,EACxL,SAAS,EAAE,MAAM,IAAI,aAAa,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,IAAI,aAAa,GACjF,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AACnE,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,IAAI,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC5F,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7C,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACxC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACvD,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAC3E,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,MAAM,EACN,OAAO,GACR,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,SAAS,EACT,SAAS,EACT,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,GACV,MAAM,SAAS,CAAA;AAEhB;;;kEAGkE;AAClE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzF,YAAY,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA"}
package/dist/index.mjs CHANGED
@@ -110,10 +110,34 @@ var ORG_DOMAIN = Object.freeze({
110
110
  zoo: Object.freeze(["zoo.ngo", "zoo.network", "zoolabs.id", "zoolabs.io"])
111
111
  });
112
112
  var ORG_KEY = Object.freeze({
113
- hanzo: "pk-rM_CdaF2MQckGCrla113SrR1oH4zvqN8xh2I95Z9tY8",
113
+ hanzo: "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
114
114
  lux: "pk-gUZp6ZVfhJzSwK-rb4oLbVkpCnMBx5uSCpxf_5yEhQk",
115
115
  zoo: "pk-3TKpKnERV9AQSsBUERWkZejC1O1mUxc1jRzsP3MPbs4"
116
116
  });
117
+ var SITE_KEY = Object.freeze({
118
+ "hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
119
+ "www.hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
120
+ "hanzo.app": "pk-wlnXN2a9_vmCm60yTFtQ629Q8TyuaxBNZbY1RWT72gQ",
121
+ "hanzo.team": "pk-NCzD2FiHpZv8KUpkCX4olT1LJOJsMxBC_Z8NkiQsOFQ",
122
+ "pay.hanzo.ai": "pk-eX6kv7JZNoiYn1WkeJH3tT_8OvkVYScmCXnLMwxTKf8",
123
+ "platform.hanzo.ai": "pk-My1RpZLEUnTj8vAdPbWKYdDUuhxZJ4dVjHcwjZN4rZ8",
124
+ "docs.hanzo.ai": "pk-jukhtjMT2ymoeBDAeFjINQWlBv-v9sNn1TPztiCrrwk",
125
+ "hanzo.bot": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
126
+ "hanzo.chat": "pk-ATxWeB2jNyRSxDgqnkGoDj3CCbzrmTxSktUh9zlrO-E",
127
+ "hanzo.id": "pk-_GVF3KlaqprlPHDumBMRFeFU1lIGOaarQfgimNVDIo8",
128
+ "hanzo.industries": "pk-Vh1wvL2HqIAv9qpVvmrznTI9uMHrTD-jyIC-vnlBsgY",
129
+ "hanzo.market": "pk-DN3xQFa0H61epUVg9OkiOYLzCdteNt9hE6f-S-ednjQ",
130
+ "hanzo.network": "pk-YJ2eiA_7ckLStMPte8Ar8FsmRp_ycmeIeRbpGprZYmM",
131
+ "hanzo.agency": "pk-26a2clOaJFe24aKJZ0PkI-GWR9F4EEa8rthHzgy_Efw",
132
+ "console.hanzo.ai": "pk-oFNXoiO1wOD8PqGdHYyiSq6jaNCdrd7TpztGpwM2ZiQ",
133
+ "admin.hanzo.ai": "pk-RYZwxkomW-tlAnEu2DKo_kAzcxFbSF2YiYcsUY48QL0",
134
+ "bot.hanzo.ai": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
135
+ "cloud.hanzo.ai": "pk-RAfEGHPoNdCEU9fnA_cPd_Xo9Tci44rlYQV9xuJ1Ob0"
136
+ });
137
+ function siteKey(host) {
138
+ const h = normalize(host).replace(/^www\./, "");
139
+ return SITE_KEY[h] ?? (h.endsWith(".hanzo.app") ? SITE_KEY["hanzo.app"] : void 0);
140
+ }
117
141
  var PUBLISHABLE = "pk-";
118
142
  var normalize = (host) => host.trim().toLowerCase().replace(/\.$/, "").split(":")[0] ?? "";
119
143
  function orgOf(host) {
@@ -132,6 +156,10 @@ function orgOf(host) {
132
156
  return best;
133
157
  }
134
158
  function keyFor(host, keyring = ORG_KEY) {
159
+ if (keyring === ORG_KEY) {
160
+ const site = siteKey(host);
161
+ if (site) return site;
162
+ }
135
163
  const org = orgOf(host);
136
164
  if (!org) return void 0;
137
165
  const key = keyring[org];
@@ -632,7 +660,7 @@ function stripLink(href) {
632
660
  }
633
661
 
634
662
  // package.json
635
- var version = "0.3.49";
663
+ var version = "0.3.52";
636
664
 
637
665
  // src/version.ts
638
666
  var VERSION = version;
@@ -656,6 +684,7 @@ function normalizeError2(err) {
656
684
  const frames = framesFromStack(n.stack).slice(-50).map((f) => ({ function: f.function, file: f.filename, line: f.lineno, column: f.colno }));
657
685
  return { type: n.name, message: n.message, stack: n.stack, frames };
658
686
  }
687
+ var viewport = () => isBrowser() ? { screen: `${window.screen?.width ?? 0}x${window.screen?.height ?? 0}`, language: navigator.language || "" } : {};
659
688
  var isBrowser = () => typeof window !== "undefined" && typeof document !== "undefined";
660
689
  function serializeBatch(batch) {
661
690
  try {
@@ -690,13 +719,13 @@ var DefaultTransport = class {
690
719
  }
691
720
  }
692
721
  if (typeof fetch !== "function") return;
693
- const simple = opts.ingestKey !== void 0 && opts.contentType === void 0;
722
+ const simple = opts.ingestKey !== void 0 && opts.token === void 0 && opts.contentType === void 0;
694
723
  const headers = {
695
724
  "Content-Type": simple ? BEACON_CONTENT_TYPE : opts.contentType ?? "application/json"
696
725
  };
697
- const bearer = simple ? void 0 : opts.ingestKey ?? opts.token;
726
+ const bearer = simple ? void 0 : opts.token ?? opts.ingestKey;
698
727
  if (bearer) headers.Authorization = `Bearer ${bearer}`;
699
- void fetch(simple ? appendQuery(url, "ingest_key", opts.ingestKey) : url, {
728
+ void fetch(opts.ingestKey ? appendQuery(url, "ingest_key", opts.ingestKey) : url, {
700
729
  method: "POST",
701
730
  headers,
702
731
  body,
@@ -836,7 +865,7 @@ var Analytics = class {
836
865
  const view = (p ?? "") + "\0" + (isBrowser() ? window.location.href : "");
837
866
  if (view === this.counted) return;
838
867
  this.counted = view;
839
- this.enqueue("pageview", PAGEVIEW, { path: p, properties });
868
+ this.enqueue("pageview", PAGEVIEW, { path: p, properties: { ...viewport(), ...properties } });
840
869
  }
841
870
  /** capture records a named product event with optional properties. Commerce
842
871
  * fields (productId/quantity/revenue/currency) may be passed for order events. */
@@ -892,7 +921,7 @@ var Analytics = class {
892
921
  this.queue = [];
893
922
  this.clearTimer();
894
923
  const token = this.cfg.getToken?.() ?? void 0;
895
- const key = token ? void 0 : this.cfg.ingestKey?.trim() || void 0;
924
+ const key = this.cfg.ingestKey?.trim() || void 0;
896
925
  const useBeacon = beacon && !token;
897
926
  const body = serializeBatch(batch);
898
927
  if (body === null) {
@@ -1106,7 +1135,28 @@ function set(name, value, days) {
1106
1135
 
1107
1136
  // src/consent.ts
1108
1137
  var CONSENT_COOKIE = "hz_consent";
1138
+ var CONSENT_VERSION_COOKIE = "hz_consent_v";
1139
+ var POLICY_EVENT = "hzpolicy";
1109
1140
  var CONSENT_EVENT = "hzconsent";
1141
+ var served;
1142
+ function serve(p) {
1143
+ if (p == null) {
1144
+ served = void 0;
1145
+ return;
1146
+ }
1147
+ const d = p;
1148
+ if (d.mode !== "opt-in" && d.mode !== "opt-out" || !d.defaults) return;
1149
+ served = {
1150
+ region: String(d.region ?? ""),
1151
+ mode: d.mode,
1152
+ defaults: { analytics: !!d.defaults.analytics, marketing: !!d.defaults.marketing, ads: !!d.defaults.ads },
1153
+ gpc: d.gpc === true,
1154
+ version: Number(d.version) || 0,
1155
+ notice: typeof d.notice === "string" ? d.notice : void 0
1156
+ };
1157
+ if (typeof window !== "undefined") window.dispatchEvent(new Event(POLICY_EVENT));
1158
+ }
1159
+ var policy = () => served;
1110
1160
  var US = /^(America\/(New_York|Chicago|Denver|Los_Angeles|Phoenix|Anchorage|Adak|Boise|Detroit|Juneau|Sitka|Nome|Yakutat|Menominee|Metlakatla|Indiana\/.*|Kentucky\/.*|North_Dakota\/.*)|Pacific\/Honolulu|US\/.*)$/;
1111
1161
  function gpc() {
1112
1162
  if (typeof navigator === "undefined") return false;
@@ -1119,6 +1169,7 @@ function refused() {
1119
1169
  return gpc() || dnt === "1" || dnt === "yes";
1120
1170
  }
1121
1171
  function region() {
1172
+ if (served) return served.mode;
1122
1173
  try {
1123
1174
  const zone = Intl.DateTimeFormat().resolvedOptions().timeZone ?? "";
1124
1175
  return US.test(zone) ? "opt-out" : "opt-in";
@@ -1127,23 +1178,28 @@ function region() {
1127
1178
  }
1128
1179
  }
1129
1180
  function stored() {
1130
- return get(CONSENT_COOKIE) !== void 0;
1181
+ if (get(CONSENT_COOKIE) === void 0) return false;
1182
+ return !served || get(CONSENT_VERSION_COOKIE) === String(served.version);
1131
1183
  }
1132
1184
  function read2() {
1133
- const kept = get(CONSENT_COOKIE);
1134
- const on = kept !== void 0 ? kept.split(",") : region() === "opt-in" || refused() ? [] : ["analytics", "marketing", "ads"];
1185
+ const kept = stored() ? get(CONSENT_COOKIE) : void 0;
1186
+ const on = kept !== void 0 ? kept.split(",") : served ? ["analytics", "marketing", "ads"].filter((k) => served.defaults[k]) : region() === "opt-in" ? [] : gpc() ? ["analytics"] : ["analytics", "marketing", "ads"];
1135
1187
  const has = (k) => on.includes(k);
1136
1188
  return { analytics: has("analytics"), marketing: has("marketing") && !gpc(), ads: has("ads") && !gpc() };
1137
1189
  }
1138
1190
  function asks() {
1139
1191
  return typeof document !== "undefined" && region() === "opt-in" && !stored();
1140
1192
  }
1193
+ function notices() {
1194
+ return typeof document !== "undefined" && region() === "opt-out" && !stored();
1195
+ }
1141
1196
  function render(c) {
1142
1197
  return ["analytics", "marketing", "ads"].filter((k) => c[k]).join(",");
1143
1198
  }
1144
1199
  function save(c) {
1145
1200
  const out = { analytics: c.analytics, marketing: c.marketing && !gpc(), ads: c.ads && !gpc() };
1146
1201
  set(CONSENT_COOKIE, render(out), 395);
1202
+ set(CONSENT_VERSION_COOKIE, String(served?.version ?? 0), 395);
1147
1203
  if (typeof window !== "undefined") window.dispatchEvent(new Event(CONSENT_EVENT));
1148
1204
  }
1149
1205
  var acceptAll = () => save({ analytics: true, marketing: true, ads: true });
@@ -1191,17 +1247,6 @@ function touch(c) {
1191
1247
  }
1192
1248
  return out;
1193
1249
  }
1194
- var SITE_KEY = Object.freeze({
1195
- "hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
1196
- "www.hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
1197
- "hanzo.app": "pk-wlnXN2a9_vmCm60yTFtQ629Q8TyuaxBNZbY1RWT72gQ",
1198
- "hanzo.team": "pk-NCzD2FiHpZv8KUpkCX4olT1LJOJsMxBC_Z8NkiQsOFQ",
1199
- "pay.hanzo.ai": "pk-eX6kv7JZNoiYn1WkeJH3tT_8OvkVYScmCXnLMwxTKf8",
1200
- "platform.hanzo.ai": "pk-My1RpZLEUnTj8vAdPbWKYdDUuhxZJ4dVjHcwjZN4rZ8",
1201
- "docs.hanzo.ai": "pk-jukhtjMT2ymoeBDAeFjINQWlBv-v9sNn1TPztiCrrwk",
1202
- "hanzo.bot": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
1203
- "cloud.hanzo.ai": "pk-RAfEGHPoNdCEU9fnA_cPd_Xo9Tci44rlYQV9xuJ1Ob0"
1204
- });
1205
1250
  var page = () => window;
1206
1251
  var tags = [];
1207
1252
  var configured = false;
@@ -1217,6 +1262,21 @@ function settled() {
1217
1262
  function flush() {
1218
1263
  if (settled() || leaving) held.splice(0).forEach((send) => send());
1219
1264
  }
1265
+ function ready(limit = 3e3) {
1266
+ if (typeof window === "undefined") return Promise.resolve();
1267
+ const start2 = Date.now();
1268
+ const meta = () => {
1269
+ const fbq = page().fbq;
1270
+ return ![...loaded].some((k) => k.startsWith("meta:")) || typeof fbq?.callMethod === "function";
1271
+ };
1272
+ return new Promise((resolve) => {
1273
+ const tick = () => {
1274
+ if (configured && settled() && meta() || Date.now() - start2 >= limit) return resolve();
1275
+ setTimeout(tick, 100);
1276
+ };
1277
+ tick();
1278
+ });
1279
+ }
1220
1280
  function script(src, onload, onerror) {
1221
1281
  const s = document.createElement("script");
1222
1282
  s.async = true;
@@ -1380,7 +1440,7 @@ function start(o = {}) {
1380
1440
  const base = (o.base ?? "https://api.hanzo.ai").replace(/\/$/, "");
1381
1441
  const q = new URLSearchParams();
1382
1442
  const host = o.host ?? window.location.hostname;
1383
- const key = o.key ?? SITE_KEY[host];
1443
+ const key = o.key ?? siteKey(host);
1384
1444
  if (key) q.set("key", key);
1385
1445
  q.set("host", host);
1386
1446
  const answer = (list) => {
@@ -1391,6 +1451,7 @@ function start(o = {}) {
1391
1451
  const cap = setTimeout(() => answer([]), 3e3);
1392
1452
  fetch(`${base}/v1/project/tags?${q}`).then((r) => r.ok ? r.json() : { tags: [] }).then((j) => {
1393
1453
  clearTimeout(cap);
1454
+ serve(j.consent);
1394
1455
  answer(Array.isArray(j.tags) ? j.tags : []);
1395
1456
  }).catch(() => {
1396
1457
  clearTimeout(cap);
@@ -1594,6 +1655,6 @@ var COHORTS = {
1594
1655
  * curl -fsSL https://unpkg.com/@hanzo/event/src/anon.js -o apps/analytics/anon.js
1595
1656
  */
1596
1657
 
1597
- export { Analytics, CLICK_IDS, COHORTS, CONSENT_COOKIE, CONSENT_EVENT, GOALS, LINK_PARAMS, ORG_DOMAIN, ORG_KEY, SITE_KEY, VERSION, acceptAll, asks, capture as captureClick, commerceItem, createAnalytics, deriveChannel, digest, exceptionEntry, exceptionProperties, fingerprint, framesFromStack, getCohort, getFirstTouch, gpc, hasAttribution, hostOf, isoWeek, keyFor, keyForPage, linkUrl, mirror, orgOf, parseAttribution, reach, read2 as readConsent, readLink, redactSecrets, refused, region, rejectAll, render as renderConsent, resetClients, save as saveConsent, scrubPII, scrubText, start as startTags, stored as storedConsent, stripLink, touch, track, hzUuidv7 as uuidv7, uuidv7Time, visit, worth };
1658
+ export { Analytics, CLICK_IDS, COHORTS, CONSENT_COOKIE, CONSENT_EVENT, CONSENT_VERSION_COOKIE, GOALS, LINK_PARAMS, ORG_DOMAIN, ORG_KEY, POLICY_EVENT, SITE_KEY, VERSION, acceptAll, asks, capture as captureClick, commerceItem, policy as consentPolicy, createAnalytics, deriveChannel, digest, exceptionEntry, exceptionProperties, fingerprint, framesFromStack, getCohort, getFirstTouch, gpc, hasAttribution, hostOf, isoWeek, keyFor, keyForPage, linkUrl, mirror, notices, orgOf, parseAttribution, reach, read2 as readConsent, readLink, redactSecrets, refused, region, rejectAll, render as renderConsent, resetClients, save as saveConsent, scrubPII, scrubText, serve as serveConsent, siteKey, start as startTags, stored as storedConsent, stripLink, ready as tagsReady, touch, track, hzUuidv7 as uuidv7, uuidv7Time, visit, worth };
1598
1659
  //# sourceMappingURL=index.mjs.map
1599
1660
  //# sourceMappingURL=index.mjs.map