@uniformdev/context 19.134.3-alpha.28 → 19.135.1-alpha.10

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.mjs CHANGED
@@ -76,6 +76,31 @@ function computeAggregateDimension(primitiveScores, aggregateDimension, allAggre
76
76
  // src/manifest/constants.ts
77
77
  var ENR_SEPARATOR = "_";
78
78
 
79
+ // src/manifest/goals/evaluators/SignalGoalEvaluator.ts
80
+ var _signal, _id;
81
+ var SignalGoalEvaluator = class {
82
+ constructor(options) {
83
+ __privateAdd(this, _signal, void 0);
84
+ __privateAdd(this, _id, void 0);
85
+ __privateSet(this, _id, options.id);
86
+ __privateSet(this, _signal, options.signal);
87
+ }
88
+ get id() {
89
+ return __privateGet(this, _id);
90
+ }
91
+ evaluate({ scores, quirks }) {
92
+ const score = scores == null ? void 0 : scores[__privateGet(this, _id)];
93
+ const key = `goal_${__privateGet(this, _id)}_triggered`;
94
+ const hasGoalTriggered = (quirks == null ? void 0 : quirks[key]) === "1";
95
+ return {
96
+ key,
97
+ triggered: typeof score === "number" && !hasGoalTriggered
98
+ };
99
+ }
100
+ };
101
+ _signal = new WeakMap();
102
+ _id = new WeakMap();
103
+
79
104
  // src/manifest/signals/SignalInstance.ts
80
105
  var _evaluator, _onLogMessage;
81
106
  var SignalInstance = class {
@@ -133,7 +158,7 @@ var rollForControlGroup = (value) => {
133
158
  };
134
159
 
135
160
  // src/manifest/ManifestInstance.ts
136
- var _mf, _signalInstances, _onLogMessage2;
161
+ var _mf, _signalInstances, _goalEvaluators, _onLogMessage2;
137
162
  var ManifestInstance = class {
138
163
  constructor({
139
164
  manifest,
@@ -145,13 +170,19 @@ var ManifestInstance = class {
145
170
  __publicField(this, "data");
146
171
  __privateAdd(this, _mf, void 0);
147
172
  __privateAdd(this, _signalInstances, void 0);
173
+ __privateAdd(this, _goalEvaluators, []);
148
174
  __privateAdd(this, _onLogMessage2, void 0);
149
- var _a, _b, _c;
175
+ var _a, _b, _c, _d, _e;
150
176
  __privateSet(this, _mf, (_a = manifest.project) != null ? _a : {});
151
177
  this.data = manifest;
152
178
  __privateSet(this, _signalInstances, Object.entries((_c = (_b = __privateGet(this, _mf).pz) == null ? void 0 : _b.sig) != null ? _c : []).map(
153
179
  ([id, signal]) => new SignalInstance({ ...signal, id }, evaluator, onLogMessage)
154
180
  ));
181
+ Object.entries((_e = (_d = __privateGet(this, _mf).pz) == null ? void 0 : _d.sig) != null ? _e : []).forEach(([id, signal]) => {
182
+ if (signal.conversion) {
183
+ __privateGet(this, _goalEvaluators).push(new SignalGoalEvaluator({ id, signal }));
184
+ }
185
+ });
155
186
  __privateSet(this, _onLogMessage2, onLogMessage);
156
187
  }
157
188
  rollForControlGroup() {
@@ -179,6 +210,28 @@ var ManifestInstance = class {
179
210
  }
180
211
  return commands;
181
212
  }
213
+ computeGoals(data) {
214
+ const commands = [];
215
+ __privateGet(this, _goalEvaluators).forEach((evaluator) => {
216
+ const { triggered, key } = evaluator.evaluate(data);
217
+ if (triggered) {
218
+ commands.push({
219
+ type: "setgoal",
220
+ data: {
221
+ goal: evaluator.id
222
+ }
223
+ });
224
+ commands.push({
225
+ type: "setquirk",
226
+ data: {
227
+ key,
228
+ value: "1"
229
+ }
230
+ });
231
+ }
232
+ });
233
+ return commands;
234
+ }
182
235
  /**
183
236
  * Computes aggregated scores based on other dimensions
184
237
  */
@@ -197,6 +250,7 @@ var ManifestInstance = class {
197
250
  };
198
251
  _mf = new WeakMap();
199
252
  _signalInstances = new WeakMap();
253
+ _goalEvaluators = new WeakMap();
200
254
  _onLogMessage2 = new WeakMap();
201
255
 
202
256
  // src/manifest/signals/criteria/evaluators/cookieEvaluator.ts
@@ -1088,6 +1142,7 @@ var emptyVisitorData = () => ({
1088
1142
  scores: {},
1089
1143
  sessionScores: {},
1090
1144
  tests: {},
1145
+ goals: {},
1091
1146
  consent: false,
1092
1147
  controlGroup: false,
1093
1148
  personalizeVariants: {}
@@ -1103,7 +1158,7 @@ var clone = rfdc();
1103
1158
  function applyCommandsToData(commands, state, inControlGroup) {
1104
1159
  const newData = state ? clone(state) : emptyVisitorData();
1105
1160
  commands.forEach((command) => {
1106
- var _a, _b;
1161
+ var _a, _b, _c;
1107
1162
  switch (command.type) {
1108
1163
  case "consent":
1109
1164
  newData.consent = command.data;
@@ -1158,6 +1213,10 @@ function applyCommandsToData(commands, state, inControlGroup) {
1158
1213
  console.warn("Overwriting existing control group definition is not allowed");
1159
1214
  }
1160
1215
  break;
1216
+ case "setgoal":
1217
+ newData.goals = (_c = newData.goals) != null ? _c : {};
1218
+ newData.goals[command.data.goal] = true;
1219
+ break;
1161
1220
  default:
1162
1221
  throw new Error(`Unknown command`);
1163
1222
  }
@@ -1323,7 +1382,7 @@ currentData_get = function() {
1323
1382
  };
1324
1383
  _replaceData = new WeakSet();
1325
1384
  replaceData_fn = function(data, quiet = false) {
1326
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
1385
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
1327
1386
  const oldData = __privateGet(this, _currentData, currentData_get);
1328
1387
  const now = Date.now();
1329
1388
  if (data.controlGroup) {
@@ -1344,6 +1403,7 @@ replaceData_fn = function(data, quiet = false) {
1344
1403
  const haveSessionScoresChanged = !dequal3(oldData == null ? void 0 : oldData.visitorData.sessionScores, data.sessionScores);
1345
1404
  const haveQuirksChanged = !dequal3(oldData == null ? void 0 : oldData.visitorData.quirks, data.quirks);
1346
1405
  const haveTestsChanged = !dequal3(oldData == null ? void 0 : oldData.visitorData.tests, data.tests);
1406
+ const haveGoalsChanged = !dequal3(oldData == null ? void 0 : oldData.visitorData.goals, data.goals);
1347
1407
  const updatedData = {
1348
1408
  updated: now,
1349
1409
  visitorData: data
@@ -1368,6 +1428,15 @@ replaceData_fn = function(data, quiet = false) {
1368
1428
  __privateGet(this, _mitt2).emit("controlGroupUpdated", data);
1369
1429
  (_i = (_h = __privateGet(this, _options)).onLogMessage) == null ? void 0 : _i.call(_h, ["debug", 104, (_g = data.controlGroup) != null ? _g : false]);
1370
1430
  }
1431
+ if (haveGoalsChanged) {
1432
+ const newGoalKeys = Object.keys((_j = data.goals) != null ? _j : {});
1433
+ for (let i = 0; i < newGoalKeys.length; i++) {
1434
+ const key = newGoalKeys[i];
1435
+ if (!((_k = oldData == null ? void 0 : oldData.visitorData.goals) == null ? void 0 : _k[key])) {
1436
+ __privateGet(this, _mitt2).emit("goalConverted", { goalId: key });
1437
+ }
1438
+ }
1439
+ }
1371
1440
  }
1372
1441
  };
1373
1442
  _setVisitTimeout = new WeakSet();
@@ -1420,10 +1489,11 @@ import { dequal as dequal4 } from "dequal/lite";
1420
1489
  import mitt3 from "mitt";
1421
1490
  var CONTEXTUAL_EDITING_TEST_NAME = "contextual_editing_test";
1422
1491
  var CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID = "contextual_editing_test_selected_variant";
1423
- var _serverTransitionState, _scores, _state, _pzCache, _mitt3, _emitTest, emitTest_fn, _updateComputedScores, updateComputedScores_fn, _calculateScores, calculateScores_fn;
1492
+ var _serverTransitionState, _scores, _state, _pzCache, _plugins, _mitt3, _emitTest, emitTest_fn, _updateGoals, updateGoals_fn, _updateComputedScores, updateComputedScores_fn, _calculateScores, calculateScores_fn;
1424
1493
  var Context = class {
1425
1494
  constructor(options) {
1426
1495
  __privateAdd(this, _emitTest);
1496
+ __privateAdd(this, _updateGoals);
1427
1497
  __privateAdd(this, _updateComputedScores);
1428
1498
  __privateAdd(this, _calculateScores);
1429
1499
  __publicField(this, "manifest");
@@ -1431,6 +1501,7 @@ var Context = class {
1431
1501
  __privateAdd(this, _scores, {});
1432
1502
  __privateAdd(this, _state, void 0);
1433
1503
  __privateAdd(this, _pzCache, {});
1504
+ __privateAdd(this, _plugins, void 0);
1434
1505
  __privateAdd(this, _mitt3, mitt3());
1435
1506
  /**
1436
1507
  * Subscribe to events
@@ -1443,7 +1514,8 @@ var Context = class {
1443
1514
  var _a, _b;
1444
1515
  const { manifest, ...storageOptions } = options;
1445
1516
  __privateSet(this, _state, {});
1446
- (_a = options.plugins) == null ? void 0 : _a.forEach((plugin) => {
1517
+ __privateSet(this, _plugins, options.plugins);
1518
+ (_a = __privateGet(this, _plugins)) == null ? void 0 : _a.forEach((plugin) => {
1447
1519
  if (!plugin.logDrain) {
1448
1520
  return;
1449
1521
  }
@@ -1486,11 +1558,15 @@ var Context = class {
1486
1558
  previousState: __privateGet(this, _state),
1487
1559
  visitor: this.storage.data
1488
1560
  });
1561
+ __privateMethod(this, _updateGoals, updateGoals_fn).call(this, {
1562
+ quirks: quirks.quirks,
1563
+ scores: void 0
1564
+ });
1489
1565
  this.storage.updateData(updates);
1490
1566
  __privateGet(this, _mitt3).emit("quirksUpdated", quirks.quirks);
1491
1567
  __privateGet(this, _mitt3).emit("log", ["info", 4, quirks.quirks]);
1492
1568
  });
1493
- (_b = options.plugins) == null ? void 0 : _b.forEach((plugin) => {
1569
+ (_b = __privateGet(this, _plugins)) == null ? void 0 : _b.forEach((plugin) => {
1494
1570
  if (!plugin.init) {
1495
1571
  return;
1496
1572
  }
@@ -1625,6 +1701,15 @@ var Context = class {
1625
1701
  __privateSet(this, _serverTransitionState, void 0);
1626
1702
  __privateGet(this, _mitt3).emit("log", ["debug", 131]);
1627
1703
  }
1704
+ if (__privateGet(this, _plugins)) {
1705
+ for (let i = 0; i < __privateGet(this, _plugins).length; i++) {
1706
+ const plugin = __privateGet(this, _plugins)[i];
1707
+ if (!plugin.update) {
1708
+ continue;
1709
+ }
1710
+ await plugin.update(newData);
1711
+ }
1712
+ }
1628
1713
  } finally {
1629
1714
  __privateGet(this, _mitt3).emit("log", ["info", 2, "ENDGROUP"]);
1630
1715
  }
@@ -1720,6 +1805,15 @@ var Context = class {
1720
1805
  */
1721
1806
  async forget(fromAllDevices) {
1722
1807
  __privateSet(this, _state, {});
1808
+ if (__privateGet(this, _plugins)) {
1809
+ for (let i = 0; i < __privateGet(this, _plugins).length; i++) {
1810
+ const plugin = __privateGet(this, _plugins)[i];
1811
+ if (!plugin.forget) {
1812
+ continue;
1813
+ }
1814
+ await plugin.forget();
1815
+ }
1816
+ }
1723
1817
  await this.storage.delete(fromAllDevices);
1724
1818
  }
1725
1819
  /**
@@ -1760,17 +1854,29 @@ _serverTransitionState = new WeakMap();
1760
1854
  _scores = new WeakMap();
1761
1855
  _state = new WeakMap();
1762
1856
  _pzCache = new WeakMap();
1857
+ _plugins = new WeakMap();
1763
1858
  _mitt3 = new WeakMap();
1764
1859
  _emitTest = new WeakSet();
1765
1860
  emitTest_fn = function(event) {
1766
1861
  __privateGet(this, _mitt3).emit("testResult", event);
1767
1862
  };
1863
+ _updateGoals = new WeakSet();
1864
+ updateGoals_fn = async function(data) {
1865
+ const goalCommands = this.manifest.computeGoals(data);
1866
+ if (goalCommands.length !== 0) {
1867
+ await this.storage.updateData(goalCommands);
1868
+ }
1869
+ };
1768
1870
  _updateComputedScores = new WeakSet();
1769
1871
  updateComputedScores_fn = function(newData) {
1770
1872
  const newScores = __privateMethod(this, _calculateScores, calculateScores_fn).call(this, newData);
1771
1873
  const newScoresHaveChanged = !dequal4(newScores, __privateGet(this, _scores));
1772
1874
  if (newScoresHaveChanged) {
1773
1875
  __privateSet(this, _scores, newScores);
1876
+ __privateMethod(this, _updateGoals, updateGoals_fn).call(this, {
1877
+ scores: __privateGet(this, _scores),
1878
+ quirks: void 0
1879
+ });
1774
1880
  __privateGet(this, _mitt3).emit("scoresUpdated", newScores);
1775
1881
  __privateGet(this, _mitt3).emit("log", ["info", 3, newScores]);
1776
1882
  }
@@ -1909,6 +2015,339 @@ var ScriptType = /* @__PURE__ */ ((ScriptType2) => {
1909
2015
  })(ScriptType || {});
1910
2016
  var EdgeNodeTagName = "nesitag";
1911
2017
 
2018
+ // src/insights/index.ts
2019
+ import { v4 } from "uuid";
2020
+ var getBasePayload = () => {
2021
+ const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
2022
+ const locale = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.userLanguage || navigator.language || navigator.browserLanguage || "en";
2023
+ return {
2024
+ "user-agent": window.navigator.userAgent,
2025
+ locale,
2026
+ location: timeZone,
2027
+ referrer: document.referrer,
2028
+ pathname: window.location.pathname,
2029
+ href: window.location.href
2030
+ };
2031
+ };
2032
+ var createInsightsClient = ({ endpoint }) => {
2033
+ const url = new URL(endpoint.host);
2034
+ url.pathname = "/v0/events";
2035
+ url.searchParams.set("name", "analytics_events");
2036
+ const endpointUrl = url.toString();
2037
+ const sendMessage = async (message) => {
2038
+ if (typeof window.__UNIFORM_CONTEXTUAL_EDITING__ !== "undefined") {
2039
+ return;
2040
+ }
2041
+ const converted = {
2042
+ ...message,
2043
+ payload: JSON.stringify(message.payload)
2044
+ };
2045
+ const response = await fetch(endpointUrl, {
2046
+ method: "POST",
2047
+ headers: {
2048
+ "Content-Type": "application/json",
2049
+ Authorization: `Bearer ${endpoint.apiKey}`
2050
+ },
2051
+ body: JSON.stringify(converted)
2052
+ });
2053
+ const json = await response.json();
2054
+ return json;
2055
+ };
2056
+ return {
2057
+ sessionStart: (options) => {
2058
+ const message = {
2059
+ action: "session_start",
2060
+ version: "1",
2061
+ session_id: options.sessionId,
2062
+ visitor_id: options.visitorId,
2063
+ page_view_id: options.pageId,
2064
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2065
+ payload: {
2066
+ ...getBasePayload(),
2067
+ previous_session_id: options.previousSessionId
2068
+ }
2069
+ };
2070
+ return sendMessage(message);
2071
+ },
2072
+ pageHit: (options) => {
2073
+ const message = {
2074
+ action: "page_hit",
2075
+ version: "1",
2076
+ session_id: options.sessionId,
2077
+ visitor_id: options.visitorId,
2078
+ page_view_id: options.pageId,
2079
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2080
+ payload: getBasePayload()
2081
+ };
2082
+ return sendMessage(message);
2083
+ },
2084
+ testResult: async (options) => {
2085
+ const message = {
2086
+ action: "test_result",
2087
+ version: "1",
2088
+ session_id: options.sessionId,
2089
+ visitor_id: options.visitorId,
2090
+ page_view_id: options.pageId,
2091
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2092
+ payload: {
2093
+ ...getBasePayload(),
2094
+ ...options
2095
+ }
2096
+ };
2097
+ return sendMessage(message);
2098
+ },
2099
+ personalizationResult: async (options) => {
2100
+ const messages = options.variantIds.map((variant) => {
2101
+ const message = {
2102
+ action: "personalization_result",
2103
+ version: "1",
2104
+ session_id: options.sessionId,
2105
+ visitor_id: options.visitorId,
2106
+ page_view_id: options.pageId,
2107
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2108
+ payload: {
2109
+ ...getBasePayload(),
2110
+ name: options.name,
2111
+ variantId: variant.id,
2112
+ control: variant.control || options.control,
2113
+ changed: options.changed
2114
+ }
2115
+ };
2116
+ return message;
2117
+ });
2118
+ await Promise.all(messages.map((message) => sendMessage(message)));
2119
+ },
2120
+ goalConvert: (options) => {
2121
+ const message = {
2122
+ action: "goal_convert",
2123
+ version: "1",
2124
+ session_id: options.sessionId,
2125
+ visitor_id: options.visitorId,
2126
+ page_view_id: options.pageId,
2127
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2128
+ payload: {
2129
+ ...getBasePayload(),
2130
+ goalId: options.goalId
2131
+ }
2132
+ };
2133
+ return sendMessage(message);
2134
+ },
2135
+ scoresChange: async (options) => {
2136
+ const message = {
2137
+ action: "scores_change",
2138
+ version: "1",
2139
+ session_id: options.sessionId,
2140
+ visitor_id: options.visitorId,
2141
+ page_view_id: options.pageId,
2142
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
2143
+ payload: {
2144
+ ...getBasePayload(),
2145
+ scores: options.scores
2146
+ }
2147
+ };
2148
+ return sendMessage(message);
2149
+ }
2150
+ };
2151
+ };
2152
+ var createInsightsStorage = () => {
2153
+ const STORAGE_KEY2 = "ufin";
2154
+ return {
2155
+ get: () => {
2156
+ const data = localStorage.getItem(STORAGE_KEY2);
2157
+ if (!data) {
2158
+ return;
2159
+ }
2160
+ return JSON.parse(data);
2161
+ },
2162
+ set: (data) => {
2163
+ const toSet = {
2164
+ ...data,
2165
+ updated: Date.now()
2166
+ };
2167
+ localStorage.setItem(STORAGE_KEY2, JSON.stringify(toSet));
2168
+ },
2169
+ clear: () => {
2170
+ localStorage.removeItem(STORAGE_KEY2);
2171
+ }
2172
+ };
2173
+ };
2174
+ var generateVisitorId = () => {
2175
+ return `visitor_${generalRandomId()}`;
2176
+ };
2177
+ var generateSessionId = () => {
2178
+ return `session_${generalRandomId()}`;
2179
+ };
2180
+ var generatePageId = () => {
2181
+ return `page_${generalRandomId()}`;
2182
+ };
2183
+ var createInsights = ({
2184
+ endpoint,
2185
+ sessionDurationSeconds = 30 * 60
2186
+ }) => {
2187
+ const client = createInsightsClient({
2188
+ endpoint
2189
+ });
2190
+ const storage = createInsightsStorage();
2191
+ let storageData = void 0;
2192
+ let pageId = generatePageId();
2193
+ let previousUrl = void 0;
2194
+ return {
2195
+ init: () => {
2196
+ storageData = storage.get();
2197
+ if (!storageData || Date.now() - storageData.updated > sessionDurationSeconds * 1e3) {
2198
+ const previousSessionId = storageData == null ? void 0 : storageData.sessionId;
2199
+ storageData = {
2200
+ visitorId: (storageData == null ? void 0 : storageData.visitorId) || generateVisitorId(),
2201
+ sessionId: generateSessionId(),
2202
+ updated: Date.now()
2203
+ };
2204
+ storage.set(storageData);
2205
+ client.sessionStart({
2206
+ visitorId: storageData.visitorId,
2207
+ sessionId: storageData.sessionId,
2208
+ previousSessionId,
2209
+ maxAgeSeconds: sessionDurationSeconds,
2210
+ pageId
2211
+ });
2212
+ } else if (storageData) {
2213
+ storage.set(storageData);
2214
+ }
2215
+ },
2216
+ pageHit: () => {
2217
+ if (!storageData) {
2218
+ console.error("Insights not initialized");
2219
+ return;
2220
+ }
2221
+ if (previousUrl === window.location.href) {
2222
+ return;
2223
+ }
2224
+ previousUrl = window.location.href;
2225
+ pageId = generatePageId();
2226
+ client.pageHit({
2227
+ visitorId: storageData.visitorId,
2228
+ sessionId: storageData.sessionId,
2229
+ pageId
2230
+ });
2231
+ },
2232
+ testResult: (result) => {
2233
+ if (!storageData) {
2234
+ console.error("Insights not initialized");
2235
+ return;
2236
+ }
2237
+ client.testResult({
2238
+ ...result,
2239
+ visitorId: storageData.visitorId,
2240
+ sessionId: storageData.sessionId,
2241
+ pageId
2242
+ });
2243
+ },
2244
+ personalizationResult: (result) => {
2245
+ if (!storageData) {
2246
+ console.error("Insights not initialized");
2247
+ return;
2248
+ }
2249
+ client.personalizationResult({
2250
+ ...result,
2251
+ visitorId: storageData.visitorId,
2252
+ sessionId: storageData.sessionId,
2253
+ pageId
2254
+ });
2255
+ },
2256
+ goalConvert: (goalId) => {
2257
+ if (!storageData) {
2258
+ console.error("Insights not initialized");
2259
+ return;
2260
+ }
2261
+ client.goalConvert({
2262
+ visitorId: storageData.visitorId,
2263
+ sessionId: storageData.sessionId,
2264
+ goalId,
2265
+ pageId
2266
+ });
2267
+ },
2268
+ scoresChange: (scores) => {
2269
+ if (!storageData) {
2270
+ console.error("Insights not initialized");
2271
+ return;
2272
+ }
2273
+ client.scoresChange({
2274
+ visitorId: storageData.visitorId,
2275
+ sessionId: storageData.sessionId,
2276
+ scores,
2277
+ pageId
2278
+ });
2279
+ },
2280
+ forget: () => {
2281
+ storage.clear();
2282
+ storageData = void 0;
2283
+ },
2284
+ get sessionId() {
2285
+ return storageData == null ? void 0 : storageData.sessionId;
2286
+ }
2287
+ };
2288
+ };
2289
+ var enableUniformInsights = (options) => {
2290
+ const insights = createInsights({
2291
+ endpoint: options.endpoint
2292
+ });
2293
+ let previousUrl = void 0;
2294
+ return {
2295
+ init: (context) => {
2296
+ if (typeof window === "undefined") {
2297
+ return () => {
2298
+ };
2299
+ }
2300
+ const consentChanged = () => {
2301
+ if (context.storage.data.consent) {
2302
+ insights.init();
2303
+ } else {
2304
+ insights.forget();
2305
+ }
2306
+ };
2307
+ const handlePersonalizationResult = (data) => {
2308
+ insights.personalizationResult(data);
2309
+ };
2310
+ const handleTestResult = (result) => {
2311
+ insights.testResult(result);
2312
+ };
2313
+ const handleGoalConvert = (result) => {
2314
+ insights.goalConvert(result.goalId);
2315
+ };
2316
+ const handleScoreChange = (scores) => {
2317
+ insights.scoresChange(scores);
2318
+ };
2319
+ context.storage.events.on("goalConverted", handleGoalConvert);
2320
+ context.storage.events.on("consentUpdated", consentChanged);
2321
+ context.events.on("personalizationResult", handlePersonalizationResult);
2322
+ context.events.on("testResult", handleTestResult);
2323
+ context.events.on("scoresUpdated", handleScoreChange);
2324
+ if (context.storage.data.consent) {
2325
+ consentChanged();
2326
+ }
2327
+ return () => {
2328
+ context.storage.events.off("consentUpdated", consentChanged);
2329
+ context.storage.events.off("goalConverted", handleGoalConvert);
2330
+ context.events.off("personalizationResult", handlePersonalizationResult);
2331
+ context.events.off("testResult", handleTestResult);
2332
+ context.events.off("scoresUpdated", handleScoreChange);
2333
+ };
2334
+ },
2335
+ update: (context) => {
2336
+ if (context.url && context.url !== previousUrl) {
2337
+ previousUrl = context.url;
2338
+ insights.pageHit();
2339
+ }
2340
+ },
2341
+ forget: () => {
2342
+ insights.forget();
2343
+ }
2344
+ };
2345
+ };
2346
+ var generalRandomId = () => {
2347
+ const id = v4();
2348
+ return id.replaceAll("-", "").toLowerCase();
2349
+ };
2350
+
1912
2351
  // src/logging/enableConsoleLogDrain.ts
1913
2352
  import rfdc2 from "rfdc";
1914
2353
 
@@ -2112,6 +2551,7 @@ export {
2112
2551
  enableConsoleLogDrain,
2113
2552
  enableContextDevTools,
2114
2553
  enableDebugConsoleLogDrain,
2554
+ enableUniformInsights,
2115
2555
  evaluateVariantMatch,
2116
2556
  eventEvaluator,
2117
2557
  explainStringMatch,