@hanzo/event 0.3.50 → 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/consent.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  export declare const CONSENT_COOKIE = "hz_consent";
2
+ /** The policy version the stored choice was made under. */
3
+ export declare const CONSENT_VERSION_COOKIE = "hz_consent_v";
4
+ /** Fired on `window` when cloud's rule for this visitor arrives. */
5
+ export declare const POLICY_EVENT = "hzpolicy";
2
6
  /** Fired on `window` whenever a choice is stored. */
3
7
  export declare const CONSENT_EVENT = "hzconsent";
4
8
  export interface Choice {
@@ -7,6 +11,19 @@ export interface Choice {
7
11
  ads: boolean;
8
12
  }
9
13
  export type Region = 'opt-in' | 'opt-out';
14
+ /** The rule cloud resolved for this visitor. */
15
+ export interface Policy {
16
+ region: string;
17
+ mode: Region;
18
+ defaults: Choice;
19
+ gpc: boolean;
20
+ version: number;
21
+ notice?: string;
22
+ }
23
+ /** Takes cloud's rule for this visitor and tells the page, so a banner drawn early redraws. */
24
+ export declare function serve(p: unknown): void;
25
+ /** The rule cloud resolved, once it has answered. */
26
+ export declare const policy: () => Policy | undefined;
10
27
  /** Whether the browser sends Global Privacy Control. */
11
28
  export declare function gpc(): boolean;
12
29
  /** Whether the browser sends Global Privacy Control or Do Not Track. */
@@ -19,6 +36,8 @@ export declare function stored(): boolean;
19
36
  export declare function read(): Choice;
20
37
  /** Whether the consent banner must be shown: an opt-in visitor who has not chosen. */
21
38
  export declare function asks(): boolean;
39
+ /** Whether a small notice must be shown: an opt-out visitor who has not yet seen it. */
40
+ export declare function notices(): boolean;
22
41
  /** The choice as the `consent` property and the cookie spell it. */
23
42
  export declare function render(c: Choice): string;
24
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../src/consent.ts"],"names":[],"mappings":"AA4BA,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C,qDAAqD;AACrD,eAAO,MAAM,aAAa,cAAc,CAAA;AAExC,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAOzC,wDAAwD;AACxD,wBAAgB,GAAG,IAAI,OAAO,CAG7B;AAED,wEAAwE;AACxE,wBAAgB,OAAO,IAAI,OAAO,CAKjC;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,IAAI,MAAM,CAO/B;AAED,+CAA+C;AAC/C,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED,yFAAyF;AACzF,wBAAgB,IAAI,IAAI,MAAM,CAU7B;AAED,sFAAsF;AACtF,wBAAgB,IAAI,IAAI,OAAO,CAE9B;AAED,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAIpC;AAED,6BAA6B;AAC7B,eAAO,MAAM,SAAS,QAAO,IAA6D,CAAA;AAE1F,sCAAsC;AACtC,eAAO,MAAM,SAAS,QAAO,IAAgE,CAAA"}
1
+ {"version":3,"file":"consent.d.ts","sourceRoot":"","sources":["../src/consent.ts"],"names":[],"mappings":"AAkCA,eAAO,MAAM,cAAc,eAAe,CAAA;AAE1C,2DAA2D;AAC3D,eAAO,MAAM,sBAAsB,iBAAiB,CAAA;AAEpD,oEAAoE;AACpE,eAAO,MAAM,YAAY,aAAa,CAAA;AAEtC,qDAAqD;AACrD,eAAO,MAAM,aAAa,cAAc,CAAA;AAExC,MAAM,WAAW,MAAM;IACrB,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,GAAG,EAAE,OAAO,CAAA;CACb;AAED,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEzC,gDAAgD;AAChD,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,OAAO,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAID,+FAA+F;AAC/F,wBAAgB,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAgBtC;AAED,qDAAqD;AACrD,eAAO,MAAM,MAAM,QAAO,MAAM,GAAG,SAAmB,CAAA;AAOtD,wDAAwD;AACxD,wBAAgB,GAAG,IAAI,OAAO,CAG7B;AAED,wEAAwE;AACxE,wBAAgB,OAAO,IAAI,OAAO,CAKjC;AAED,0CAA0C;AAC1C,wBAAgB,MAAM,IAAI,MAAM,CAQ/B;AAED,+CAA+C;AAC/C,wBAAgB,MAAM,IAAI,OAAO,CAGhC;AAED,yFAAyF;AACzF,wBAAgB,IAAI,IAAI,MAAM,CAc7B;AAED,sFAAsF;AACtF,wBAAgB,IAAI,IAAI,OAAO,CAE9B;AAED,wFAAwF;AACxF,wBAAgB,OAAO,IAAI,OAAO,CAEjC;AAED,oEAAoE;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAKpC;AAED,6BAA6B;AAC7B,eAAO,MAAM,SAAS,QAAO,IAA6D,CAAA;AAE1F,sCAAsC;AACtC,eAAO,MAAM,SAAS,QAAO,IAAgE,CAAA"}
package/dist/index.cjs CHANGED
@@ -115,6 +115,30 @@ var ORG_KEY = Object.freeze({
115
115
  lux: "pk-gUZp6ZVfhJzSwK-rb4oLbVkpCnMBx5uSCpxf_5yEhQk",
116
116
  zoo: "pk-3TKpKnERV9AQSsBUERWkZejC1O1mUxc1jRzsP3MPbs4"
117
117
  });
118
+ var SITE_KEY = Object.freeze({
119
+ "hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
120
+ "www.hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
121
+ "hanzo.app": "pk-wlnXN2a9_vmCm60yTFtQ629Q8TyuaxBNZbY1RWT72gQ",
122
+ "hanzo.team": "pk-NCzD2FiHpZv8KUpkCX4olT1LJOJsMxBC_Z8NkiQsOFQ",
123
+ "pay.hanzo.ai": "pk-eX6kv7JZNoiYn1WkeJH3tT_8OvkVYScmCXnLMwxTKf8",
124
+ "platform.hanzo.ai": "pk-My1RpZLEUnTj8vAdPbWKYdDUuhxZJ4dVjHcwjZN4rZ8",
125
+ "docs.hanzo.ai": "pk-jukhtjMT2ymoeBDAeFjINQWlBv-v9sNn1TPztiCrrwk",
126
+ "hanzo.bot": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
127
+ "hanzo.chat": "pk-ATxWeB2jNyRSxDgqnkGoDj3CCbzrmTxSktUh9zlrO-E",
128
+ "hanzo.id": "pk-_GVF3KlaqprlPHDumBMRFeFU1lIGOaarQfgimNVDIo8",
129
+ "hanzo.industries": "pk-Vh1wvL2HqIAv9qpVvmrznTI9uMHrTD-jyIC-vnlBsgY",
130
+ "hanzo.market": "pk-DN3xQFa0H61epUVg9OkiOYLzCdteNt9hE6f-S-ednjQ",
131
+ "hanzo.network": "pk-YJ2eiA_7ckLStMPte8Ar8FsmRp_ycmeIeRbpGprZYmM",
132
+ "hanzo.agency": "pk-26a2clOaJFe24aKJZ0PkI-GWR9F4EEa8rthHzgy_Efw",
133
+ "console.hanzo.ai": "pk-oFNXoiO1wOD8PqGdHYyiSq6jaNCdrd7TpztGpwM2ZiQ",
134
+ "admin.hanzo.ai": "pk-RYZwxkomW-tlAnEu2DKo_kAzcxFbSF2YiYcsUY48QL0",
135
+ "bot.hanzo.ai": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
136
+ "cloud.hanzo.ai": "pk-RAfEGHPoNdCEU9fnA_cPd_Xo9Tci44rlYQV9xuJ1Ob0"
137
+ });
138
+ function siteKey(host) {
139
+ const h = normalize(host).replace(/^www\./, "");
140
+ return SITE_KEY[h] ?? (h.endsWith(".hanzo.app") ? SITE_KEY["hanzo.app"] : void 0);
141
+ }
118
142
  var PUBLISHABLE = "pk-";
119
143
  var normalize = (host) => host.trim().toLowerCase().replace(/\.$/, "").split(":")[0] ?? "";
120
144
  function orgOf(host) {
@@ -133,6 +157,10 @@ function orgOf(host) {
133
157
  return best;
134
158
  }
135
159
  function keyFor(host, keyring = ORG_KEY) {
160
+ if (keyring === ORG_KEY) {
161
+ const site = siteKey(host);
162
+ if (site) return site;
163
+ }
136
164
  const org = orgOf(host);
137
165
  if (!org) return void 0;
138
166
  const key = keyring[org];
@@ -633,7 +661,7 @@ function stripLink(href) {
633
661
  }
634
662
 
635
663
  // package.json
636
- var version = "0.3.50";
664
+ var version = "0.3.52";
637
665
 
638
666
  // src/version.ts
639
667
  var VERSION = version;
@@ -1108,7 +1136,28 @@ function set(name, value, days) {
1108
1136
 
1109
1137
  // src/consent.ts
1110
1138
  var CONSENT_COOKIE = "hz_consent";
1139
+ var CONSENT_VERSION_COOKIE = "hz_consent_v";
1140
+ var POLICY_EVENT = "hzpolicy";
1111
1141
  var CONSENT_EVENT = "hzconsent";
1142
+ var served;
1143
+ function serve(p) {
1144
+ if (p == null) {
1145
+ served = void 0;
1146
+ return;
1147
+ }
1148
+ const d = p;
1149
+ if (d.mode !== "opt-in" && d.mode !== "opt-out" || !d.defaults) return;
1150
+ served = {
1151
+ region: String(d.region ?? ""),
1152
+ mode: d.mode,
1153
+ defaults: { analytics: !!d.defaults.analytics, marketing: !!d.defaults.marketing, ads: !!d.defaults.ads },
1154
+ gpc: d.gpc === true,
1155
+ version: Number(d.version) || 0,
1156
+ notice: typeof d.notice === "string" ? d.notice : void 0
1157
+ };
1158
+ if (typeof window !== "undefined") window.dispatchEvent(new Event(POLICY_EVENT));
1159
+ }
1160
+ var policy = () => served;
1112
1161
  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\/.*)$/;
1113
1162
  function gpc() {
1114
1163
  if (typeof navigator === "undefined") return false;
@@ -1121,6 +1170,7 @@ function refused() {
1121
1170
  return gpc() || dnt === "1" || dnt === "yes";
1122
1171
  }
1123
1172
  function region() {
1173
+ if (served) return served.mode;
1124
1174
  try {
1125
1175
  const zone = Intl.DateTimeFormat().resolvedOptions().timeZone ?? "";
1126
1176
  return US.test(zone) ? "opt-out" : "opt-in";
@@ -1129,23 +1179,28 @@ function region() {
1129
1179
  }
1130
1180
  }
1131
1181
  function stored() {
1132
- return get(CONSENT_COOKIE) !== void 0;
1182
+ if (get(CONSENT_COOKIE) === void 0) return false;
1183
+ return !served || get(CONSENT_VERSION_COOKIE) === String(served.version);
1133
1184
  }
1134
1185
  function read2() {
1135
- const kept = get(CONSENT_COOKIE);
1136
- const on = kept !== void 0 ? kept.split(",") : region() === "opt-in" || refused() ? [] : ["analytics", "marketing", "ads"];
1186
+ const kept = stored() ? get(CONSENT_COOKIE) : void 0;
1187
+ const on = kept !== void 0 ? kept.split(",") : served ? ["analytics", "marketing", "ads"].filter((k) => served.defaults[k]) : region() === "opt-in" ? [] : gpc() ? ["analytics"] : ["analytics", "marketing", "ads"];
1137
1188
  const has = (k) => on.includes(k);
1138
1189
  return { analytics: has("analytics"), marketing: has("marketing") && !gpc(), ads: has("ads") && !gpc() };
1139
1190
  }
1140
1191
  function asks() {
1141
1192
  return typeof document !== "undefined" && region() === "opt-in" && !stored();
1142
1193
  }
1194
+ function notices() {
1195
+ return typeof document !== "undefined" && region() === "opt-out" && !stored();
1196
+ }
1143
1197
  function render(c) {
1144
1198
  return ["analytics", "marketing", "ads"].filter((k) => c[k]).join(",");
1145
1199
  }
1146
1200
  function save(c) {
1147
1201
  const out = { analytics: c.analytics, marketing: c.marketing && !gpc(), ads: c.ads && !gpc() };
1148
1202
  set(CONSENT_COOKIE, render(out), 395);
1203
+ set(CONSENT_VERSION_COOKIE, String(served?.version ?? 0), 395);
1149
1204
  if (typeof window !== "undefined") window.dispatchEvent(new Event(CONSENT_EVENT));
1150
1205
  }
1151
1206
  var acceptAll = () => save({ analytics: true, marketing: true, ads: true });
@@ -1193,22 +1248,6 @@ function touch(c) {
1193
1248
  }
1194
1249
  return out;
1195
1250
  }
1196
- var SITE_KEY = Object.freeze({
1197
- "hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
1198
- "www.hanzo.ai": "pk-CmfLA2K6kvsPflrS9DSkt06H_kSoQB_21sjedt6VJdc",
1199
- "hanzo.app": "pk-wlnXN2a9_vmCm60yTFtQ629Q8TyuaxBNZbY1RWT72gQ",
1200
- "hanzo.team": "pk-NCzD2FiHpZv8KUpkCX4olT1LJOJsMxBC_Z8NkiQsOFQ",
1201
- "pay.hanzo.ai": "pk-eX6kv7JZNoiYn1WkeJH3tT_8OvkVYScmCXnLMwxTKf8",
1202
- "platform.hanzo.ai": "pk-My1RpZLEUnTj8vAdPbWKYdDUuhxZJ4dVjHcwjZN4rZ8",
1203
- "docs.hanzo.ai": "pk-jukhtjMT2ymoeBDAeFjINQWlBv-v9sNn1TPztiCrrwk",
1204
- "hanzo.bot": "pk-W5d7Mn7ZukT7igyscIy6Pqe8JpA0Ge604Yn4xNR4JCU",
1205
- "hanzo.chat": "pk-ATxWeB2jNyRSxDgqnkGoDj3CCbzrmTxSktUh9zlrO-E",
1206
- "hanzo.id": "pk-_GVF3KlaqprlPHDumBMRFeFU1lIGOaarQfgimNVDIo8",
1207
- "hanzo.industries": "pk-Vh1wvL2HqIAv9qpVvmrznTI9uMHrTD-jyIC-vnlBsgY",
1208
- "hanzo.market": "pk-DN3xQFa0H61epUVg9OkiOYLzCdteNt9hE6f-S-ednjQ",
1209
- "hanzo.network": "pk-YJ2eiA_7ckLStMPte8Ar8FsmRp_ycmeIeRbpGprZYmM",
1210
- "cloud.hanzo.ai": "pk-RAfEGHPoNdCEU9fnA_cPd_Xo9Tci44rlYQV9xuJ1Ob0"
1211
- });
1212
1251
  var page = () => window;
1213
1252
  var tags = [];
1214
1253
  var configured = false;
@@ -1402,7 +1441,7 @@ function start(o = {}) {
1402
1441
  const base = (o.base ?? "https://api.hanzo.ai").replace(/\/$/, "");
1403
1442
  const q = new URLSearchParams();
1404
1443
  const host = o.host ?? window.location.hostname;
1405
- const key = o.key ?? SITE_KEY[host];
1444
+ const key = o.key ?? siteKey(host);
1406
1445
  if (key) q.set("key", key);
1407
1446
  q.set("host", host);
1408
1447
  const answer = (list) => {
@@ -1413,6 +1452,7 @@ function start(o = {}) {
1413
1452
  const cap = setTimeout(() => answer([]), 3e3);
1414
1453
  fetch(`${base}/v1/project/tags?${q}`).then((r) => r.ok ? r.json() : { tags: [] }).then((j) => {
1415
1454
  clearTimeout(cap);
1455
+ serve(j.consent);
1416
1456
  answer(Array.isArray(j.tags) ? j.tags : []);
1417
1457
  }).catch(() => {
1418
1458
  clearTimeout(cap);
@@ -1645,16 +1685,19 @@ exports.CLICK_IDS = CLICK_IDS;
1645
1685
  exports.COHORTS = COHORTS;
1646
1686
  exports.CONSENT_COOKIE = CONSENT_COOKIE;
1647
1687
  exports.CONSENT_EVENT = CONSENT_EVENT;
1688
+ exports.CONSENT_VERSION_COOKIE = CONSENT_VERSION_COOKIE;
1648
1689
  exports.GOALS = GOALS;
1649
1690
  exports.LINK_PARAMS = LINK_PARAMS;
1650
1691
  exports.ORG_DOMAIN = ORG_DOMAIN;
1651
1692
  exports.ORG_KEY = ORG_KEY;
1693
+ exports.POLICY_EVENT = POLICY_EVENT;
1652
1694
  exports.SITE_KEY = SITE_KEY;
1653
1695
  exports.VERSION = VERSION;
1654
1696
  exports.acceptAll = acceptAll;
1655
1697
  exports.asks = asks;
1656
1698
  exports.captureClick = capture;
1657
1699
  exports.commerceItem = commerceItem;
1700
+ exports.consentPolicy = policy;
1658
1701
  exports.createAnalytics = createAnalytics;
1659
1702
  exports.deriveChannel = deriveChannel;
1660
1703
  exports.digest = digest;
@@ -1672,6 +1715,7 @@ exports.keyFor = keyFor;
1672
1715
  exports.keyForPage = keyForPage;
1673
1716
  exports.linkUrl = linkUrl;
1674
1717
  exports.mirror = mirror;
1718
+ exports.notices = notices;
1675
1719
  exports.orgOf = orgOf;
1676
1720
  exports.parseAttribution = parseAttribution;
1677
1721
  exports.reach = reach;
@@ -1686,6 +1730,8 @@ exports.resetClients = resetClients;
1686
1730
  exports.saveConsent = save;
1687
1731
  exports.scrubPII = scrubPII;
1688
1732
  exports.scrubText = scrubText;
1733
+ exports.serveConsent = serve;
1734
+ exports.siteKey = siteKey;
1689
1735
  exports.startTags = start;
1690
1736
  exports.storedConsent = stored;
1691
1737
  exports.stripLink = stripLink;