@uniformdev/context 20.34.3-alpha.70 → 20.35.1-alpha.188

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.
@@ -1,4 +1,4 @@
1
- import { aJ as paths$7, $ as ManifestV2 } from '../types-BxuNEj-w.mjs';
1
+ import { aJ as paths$7, $ as ManifestV2 } from '../types-HcKr1VVF.mjs';
2
2
  import 'mitt';
3
3
 
4
4
  type LimitPolicy = <ReturnValue>(func: () => Promise<ReturnValue>) => Promise<ReturnValue>;
package/dist/api/api.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { aJ as paths$7, $ as ManifestV2 } from '../types-BxuNEj-w.js';
1
+ import { aJ as paths$7, $ as ManifestV2 } from '../types-HcKr1VVF.js';
2
2
  import 'mitt';
3
3
 
4
4
  type LimitPolicy = <ReturnValue>(func: () => Promise<ReturnValue>) => Promise<ReturnValue>;
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as OutputSeverity, L as LogDrain, C as ContextPlugin, S as ScoreVector, A as AggregateDimension, T as TransitionDataStore, a as StorageCommands, V as VisitorData, Q as Quirks, b as TransitionDataStoreOptions, D as DecayFunction, c as CriteriaEvaluator, d as StringMatch, e as VariantMatchCriteria, f as LogMessage, P as PersonalizedVariant, g as PersonalizeOptions, h as Context, i as PersonalizedResult, j as VariationMatchDimensionCriteria, k as PersonalizationSelectionAlgorithmOptions, l as DevToolsEvents } from './types-BxuNEj-w.mjs';
2
- export { a7 as AggregateDimensionInput, ad as BehaviorTag, m as CONTEXTUAL_EDITING_TEST_NAME, n as CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID, aF as CompositionMetadata, u as ContextEvents, v as ContextInstance, q as ContextOptions, aG as ContextState, aH as ContextStateUpdate, Z as CriteriaEvaluatorParameters, Y as CriteriaEvaluatorResult, au as DecayOptions, y as DevToolsActions, E as DevToolsDataEvent, z as DevToolsEvent, I as DevToolsForgetEvent, F as DevToolsHelloEvent, B as DevToolsLogEvent, H as DevToolsRawCommandsEvent, x as DevToolsState, w as DevToolsUiVersion, G as DevToolsUpdateEvent, ab as DimensionMatch, a4 as EnrichmentCategory, aA as EnrichmentData, aD as EventData, aI as GoalStateUpdate, az as Goals, X as GroupCriteriaEvaluator, an as IdentifyCommand, U as LogMessageGroup, R as LogMessageSingle, J as LogMessages, W as ManifestInstance, $ as ManifestV2, M as MessageCategory, N as MessageFunc, ai as ModifyScoreCommand, aj as ModifySessionScoreCommand, a5 as NumberMatch, s as PersonalizationEvent, r as PersonalizationEventVariantId, a0 as PersonalizationManifest, o as PersonalizationSelectionAlgorithm, p as PersonalizationSelectionAlgorithms, aB as PersonalizeControlVariant, aC as PersonalizeVariants, ac as QuirkMatch, as as SERVER_STATE_ID, ar as ServerToClientTransitionState, ak as SetConsentCommand, ao as SetControlGroupCommand, ah as SetGoalCommand, ap as SetPersonalizeVariantControlCommand, al as SetQuirkCommand, am as SetTestCommand, K as Severity, a1 as Signal, a3 as SignalCriteria, a2 as SignalCriteriaGroup, _ as SignalData, ag as StorageCommand, a6 as TestDefinition, t as TestEvent, a8 as TestOptions, af as TestResult, ae as TestVariant, ay as Tests, at as TransitionDataStoreEvents, aa as VariationMatchMetadata, ax as VisitorDataStore, aw as VisitorDataStoreEvents, av as VisitorDataStoreOptions, aq as areCommandsEqual, aE as emptyVisitorData, a9 as testVariations } from './types-BxuNEj-w.mjs';
1
+ import { O as OutputSeverity, L as LogDrain, C as ContextPlugin, S as ScoreVector, A as AggregateDimension, T as TransitionDataStore, a as StorageCommands, V as VisitorData, Q as Quirks, b as TransitionDataStoreOptions, D as DecayFunction, c as CriteriaEvaluator, d as StringMatch, e as VariantMatchCriteria, f as LogMessage, P as PersonalizedVariant, g as PersonalizeOptions, h as Context, i as PersonalizedResult, j as VariationMatchDimensionCriteria, k as PersonalizationSelectionAlgorithmOptions, l as DevToolsEvents } from './types-HcKr1VVF.mjs';
2
+ export { a7 as AggregateDimensionInput, ad as BehaviorTag, m as CONTEXTUAL_EDITING_TEST_NAME, n as CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID, aF as CompositionMetadata, u as ContextEvents, v as ContextInstance, q as ContextOptions, aG as ContextState, aH as ContextStateUpdate, Z as CriteriaEvaluatorParameters, Y as CriteriaEvaluatorResult, au as DecayOptions, y as DevToolsActions, E as DevToolsDataEvent, z as DevToolsEvent, I as DevToolsForgetEvent, F as DevToolsHelloEvent, B as DevToolsLogEvent, H as DevToolsRawCommandsEvent, x as DevToolsState, w as DevToolsUiVersion, G as DevToolsUpdateEvent, ab as DimensionMatch, a4 as EnrichmentCategory, aA as EnrichmentData, aD as EventData, aI as GoalStateUpdate, az as Goals, X as GroupCriteriaEvaluator, an as IdentifyCommand, U as LogMessageGroup, R as LogMessageSingle, J as LogMessages, W as ManifestInstance, $ as ManifestV2, M as MessageCategory, N as MessageFunc, ai as ModifyScoreCommand, aj as ModifySessionScoreCommand, a5 as NumberMatch, s as PersonalizationEvent, r as PersonalizationEventVariantId, a0 as PersonalizationManifest, o as PersonalizationSelectionAlgorithm, p as PersonalizationSelectionAlgorithms, aB as PersonalizeControlVariant, aC as PersonalizeVariants, ac as QuirkMatch, as as SERVER_STATE_ID, ar as ServerToClientTransitionState, ak as SetConsentCommand, ao as SetControlGroupCommand, ah as SetGoalCommand, ap as SetPersonalizeVariantControlCommand, al as SetQuirkCommand, am as SetTestCommand, K as Severity, a1 as Signal, a3 as SignalCriteria, a2 as SignalCriteriaGroup, _ as SignalData, ag as StorageCommand, a6 as TestDefinition, t as TestEvent, a8 as TestOptions, af as TestResult, ae as TestVariant, ay as Tests, at as TransitionDataStoreEvents, aa as VariationMatchMetadata, ax as VisitorDataStore, aw as VisitorDataStoreEvents, av as VisitorDataStoreOptions, aq as areCommandsEqual, aE as emptyVisitorData, a9 as testVariations } from './types-HcKr1VVF.mjs';
3
3
  import Cookies from 'js-cookie';
4
4
  import 'mitt';
5
5
 
@@ -234,7 +234,7 @@ type EnableUniformInsightsOptions = {
234
234
  endpoint: InsightsEndpoint;
235
235
  };
236
236
  /**
237
- * @deprecated Use `import { enableUniformInsights } from '@uniformdev/context-insights'` instead
237
+ * @deprecated Use `import { enableUniformInsights } from '@uniformdev/insights'` instead
238
238
  */
239
239
  declare const enableUniformInsights: (options: EnableUniformInsightsOptions) => ContextPlugin;
240
240
 
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { O as OutputSeverity, L as LogDrain, C as ContextPlugin, S as ScoreVector, A as AggregateDimension, T as TransitionDataStore, a as StorageCommands, V as VisitorData, Q as Quirks, b as TransitionDataStoreOptions, D as DecayFunction, c as CriteriaEvaluator, d as StringMatch, e as VariantMatchCriteria, f as LogMessage, P as PersonalizedVariant, g as PersonalizeOptions, h as Context, i as PersonalizedResult, j as VariationMatchDimensionCriteria, k as PersonalizationSelectionAlgorithmOptions, l as DevToolsEvents } from './types-BxuNEj-w.js';
2
- export { a7 as AggregateDimensionInput, ad as BehaviorTag, m as CONTEXTUAL_EDITING_TEST_NAME, n as CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID, aF as CompositionMetadata, u as ContextEvents, v as ContextInstance, q as ContextOptions, aG as ContextState, aH as ContextStateUpdate, Z as CriteriaEvaluatorParameters, Y as CriteriaEvaluatorResult, au as DecayOptions, y as DevToolsActions, E as DevToolsDataEvent, z as DevToolsEvent, I as DevToolsForgetEvent, F as DevToolsHelloEvent, B as DevToolsLogEvent, H as DevToolsRawCommandsEvent, x as DevToolsState, w as DevToolsUiVersion, G as DevToolsUpdateEvent, ab as DimensionMatch, a4 as EnrichmentCategory, aA as EnrichmentData, aD as EventData, aI as GoalStateUpdate, az as Goals, X as GroupCriteriaEvaluator, an as IdentifyCommand, U as LogMessageGroup, R as LogMessageSingle, J as LogMessages, W as ManifestInstance, $ as ManifestV2, M as MessageCategory, N as MessageFunc, ai as ModifyScoreCommand, aj as ModifySessionScoreCommand, a5 as NumberMatch, s as PersonalizationEvent, r as PersonalizationEventVariantId, a0 as PersonalizationManifest, o as PersonalizationSelectionAlgorithm, p as PersonalizationSelectionAlgorithms, aB as PersonalizeControlVariant, aC as PersonalizeVariants, ac as QuirkMatch, as as SERVER_STATE_ID, ar as ServerToClientTransitionState, ak as SetConsentCommand, ao as SetControlGroupCommand, ah as SetGoalCommand, ap as SetPersonalizeVariantControlCommand, al as SetQuirkCommand, am as SetTestCommand, K as Severity, a1 as Signal, a3 as SignalCriteria, a2 as SignalCriteriaGroup, _ as SignalData, ag as StorageCommand, a6 as TestDefinition, t as TestEvent, a8 as TestOptions, af as TestResult, ae as TestVariant, ay as Tests, at as TransitionDataStoreEvents, aa as VariationMatchMetadata, ax as VisitorDataStore, aw as VisitorDataStoreEvents, av as VisitorDataStoreOptions, aq as areCommandsEqual, aE as emptyVisitorData, a9 as testVariations } from './types-BxuNEj-w.js';
1
+ import { O as OutputSeverity, L as LogDrain, C as ContextPlugin, S as ScoreVector, A as AggregateDimension, T as TransitionDataStore, a as StorageCommands, V as VisitorData, Q as Quirks, b as TransitionDataStoreOptions, D as DecayFunction, c as CriteriaEvaluator, d as StringMatch, e as VariantMatchCriteria, f as LogMessage, P as PersonalizedVariant, g as PersonalizeOptions, h as Context, i as PersonalizedResult, j as VariationMatchDimensionCriteria, k as PersonalizationSelectionAlgorithmOptions, l as DevToolsEvents } from './types-HcKr1VVF.js';
2
+ export { a7 as AggregateDimensionInput, ad as BehaviorTag, m as CONTEXTUAL_EDITING_TEST_NAME, n as CONTEXTUAL_EDITING_TEST_SELECTED_VARIANT_ID, aF as CompositionMetadata, u as ContextEvents, v as ContextInstance, q as ContextOptions, aG as ContextState, aH as ContextStateUpdate, Z as CriteriaEvaluatorParameters, Y as CriteriaEvaluatorResult, au as DecayOptions, y as DevToolsActions, E as DevToolsDataEvent, z as DevToolsEvent, I as DevToolsForgetEvent, F as DevToolsHelloEvent, B as DevToolsLogEvent, H as DevToolsRawCommandsEvent, x as DevToolsState, w as DevToolsUiVersion, G as DevToolsUpdateEvent, ab as DimensionMatch, a4 as EnrichmentCategory, aA as EnrichmentData, aD as EventData, aI as GoalStateUpdate, az as Goals, X as GroupCriteriaEvaluator, an as IdentifyCommand, U as LogMessageGroup, R as LogMessageSingle, J as LogMessages, W as ManifestInstance, $ as ManifestV2, M as MessageCategory, N as MessageFunc, ai as ModifyScoreCommand, aj as ModifySessionScoreCommand, a5 as NumberMatch, s as PersonalizationEvent, r as PersonalizationEventVariantId, a0 as PersonalizationManifest, o as PersonalizationSelectionAlgorithm, p as PersonalizationSelectionAlgorithms, aB as PersonalizeControlVariant, aC as PersonalizeVariants, ac as QuirkMatch, as as SERVER_STATE_ID, ar as ServerToClientTransitionState, ak as SetConsentCommand, ao as SetControlGroupCommand, ah as SetGoalCommand, ap as SetPersonalizeVariantControlCommand, al as SetQuirkCommand, am as SetTestCommand, K as Severity, a1 as Signal, a3 as SignalCriteria, a2 as SignalCriteriaGroup, _ as SignalData, ag as StorageCommand, a6 as TestDefinition, t as TestEvent, a8 as TestOptions, af as TestResult, ae as TestVariant, ay as Tests, at as TransitionDataStoreEvents, aa as VariationMatchMetadata, ax as VisitorDataStore, aw as VisitorDataStoreEvents, av as VisitorDataStoreOptions, aq as areCommandsEqual, aE as emptyVisitorData, a9 as testVariations } from './types-HcKr1VVF.js';
3
3
  import Cookies from 'js-cookie';
4
4
  import 'mitt';
5
5
 
@@ -234,7 +234,7 @@ type EnableUniformInsightsOptions = {
234
234
  endpoint: InsightsEndpoint;
235
235
  };
236
236
  /**
237
- * @deprecated Use `import { enableUniformInsights } from '@uniformdev/context-insights'` instead
237
+ * @deprecated Use `import { enableUniformInsights } from '@uniformdev/insights'` instead
238
238
  */
239
239
  declare const enableUniformInsights: (options: EnableUniformInsightsOptions) => ContextPlugin;
240
240
 
package/dist/index.esm.js CHANGED
@@ -227,6 +227,10 @@ var ManifestInstance = class {
227
227
  }
228
228
  return (_d = (_c = __privateGet(this, _mf).pz) == null ? void 0 : _c.enr) == null ? void 0 : _d[scoreKey.substring(0, enrichmentIndex)];
229
229
  }
230
+ getAggregateDimensionByKey(scoreKey) {
231
+ var _a, _b;
232
+ return (_b = (_a = __privateGet(this, _mf).pz) == null ? void 0 : _a.agg) == null ? void 0 : _b[scoreKey];
233
+ }
230
234
  };
231
235
  _mf = new WeakMap();
232
236
  _signalInstances = new WeakMap();
@@ -1740,6 +1744,9 @@ var Context = class {
1740
1744
  __privateSet(this, _scores, state.ssv);
1741
1745
  __privateGet(this, _mitt3).emit("log", ["debug", 130, state]);
1742
1746
  }
1747
+ if (state.compositionMetadata) {
1748
+ __privateGet(this, _state).compositionMetadata = state.compositionMetadata;
1749
+ }
1743
1750
  },
1744
1751
  onLogMessage: (message) => __privateGet(this, _mitt3).emit("log", message)
1745
1752
  });
@@ -1798,7 +1805,7 @@ var Context = class {
1798
1805
  * i.e. pushing the same URL or cookies as before,
1799
1806
  * will NOT result in a recomputation of signal state.
1800
1807
  */
1801
- async update({ compositionMetadata, ...newData }) {
1808
+ async update(newData) {
1802
1809
  var _a, _b, _c, _d, _e;
1803
1810
  const commands = [];
1804
1811
  const newServerSideTests = {};
@@ -1892,10 +1899,16 @@ var Context = class {
1892
1899
  scores: __privateGet(this, _serverTransitionState) ? __privateMethod(this, _Context_instances, calculateScores_fn).call(this, this.storage.data) : __privateGet(this, _scores)
1893
1900
  })
1894
1901
  );
1902
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
1895
1903
  __privateSet(this, _state, {
1896
1904
  ...__privateGet(this, _state),
1897
1905
  ...newData
1898
1906
  });
1907
+ if (newData.compositionMetadata && // deep equal is not too bad, as we only have 1 level of depth in dynamic inputs
1908
+ !dequal5(previousCompositionMetadata, __privateGet(this, _state).compositionMetadata)) {
1909
+ __privateGet(this, _mitt3).emit("canvasDataUpdated", __privateGet(this, _state).compositionMetadata);
1910
+ __privateGet(this, _state).compositionMetadata = newData.compositionMetadata;
1911
+ }
1899
1912
  await this.storage.updateData(commands);
1900
1913
  if (__privateGet(this, _serverTransitionState)) {
1901
1914
  await this.processServerCommands({
@@ -1908,7 +1921,6 @@ var Context = class {
1908
1921
  name: testName,
1909
1922
  variantId: testVariantId,
1910
1923
  variantAssigned: true,
1911
- // @todo this needs to be fixed, we should provide correct is control as well as canvas data
1912
1924
  control: false,
1913
1925
  compositionMetadata: void 0
1914
1926
  });
@@ -1926,7 +1938,7 @@ var Context = class {
1926
1938
  if (!plugin.update) {
1927
1939
  continue;
1928
1940
  }
1929
- await plugin.update(newData);
1941
+ await plugin.update(newData, __privateGet(this, _scores));
1930
1942
  }
1931
1943
  }
1932
1944
  (_e = __privateGet(this, _commands)) == null ? void 0 : _e.push(...commands);
@@ -2055,7 +2067,10 @@ var Context = class {
2055
2067
  * @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
2056
2068
  */
2057
2069
  async forget(fromAllDevices) {
2058
- __privateSet(this, _state, {});
2070
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
2071
+ __privateSet(this, _state, {
2072
+ compositionMetadata: previousCompositionMetadata
2073
+ });
2059
2074
  if (__privateGet(this, _plugins)) {
2060
2075
  for (let i = 0; i < __privateGet(this, _plugins).length; i++) {
2061
2076
  const plugin = __privateGet(this, _plugins)[i];
@@ -2078,7 +2093,8 @@ var Context = class {
2078
2093
  ssv: __privateGet(this, _scores),
2079
2094
  tests: {},
2080
2095
  personalizeVariants: this.storage.data.personalizeVariants,
2081
- commands: __privateGet(this, _commands)
2096
+ commands: __privateGet(this, _commands),
2097
+ compositionMetadata: __privateGet(this, _state).compositionMetadata
2082
2098
  };
2083
2099
  const allTests = this.storage.data.tests;
2084
2100
  Object.entries(allTests).map(([testName, testValue]) => {
@@ -2323,10 +2339,10 @@ var getBasePayload = () => {
2323
2339
  href: window.location.href
2324
2340
  };
2325
2341
  };
2326
- var generateVisitorId = async () => {
2342
+ var generateVisitorId = () => {
2327
2343
  return `visitor_${generalRandomId()}`;
2328
2344
  };
2329
- var generateSessionId = async () => {
2345
+ var generateSessionId = () => {
2330
2346
  return `session_${generalRandomId()}`;
2331
2347
  };
2332
2348
  var generatePageId = () => {
package/dist/index.js CHANGED
@@ -320,6 +320,10 @@ var ManifestInstance = class {
320
320
  }
321
321
  return (_d = (_c = __privateGet(this, _mf).pz) == null ? void 0 : _c.enr) == null ? void 0 : _d[scoreKey.substring(0, enrichmentIndex)];
322
322
  }
323
+ getAggregateDimensionByKey(scoreKey) {
324
+ var _a, _b;
325
+ return (_b = (_a = __privateGet(this, _mf).pz) == null ? void 0 : _a.agg) == null ? void 0 : _b[scoreKey];
326
+ }
323
327
  };
324
328
  _mf = new WeakMap();
325
329
  _signalInstances = new WeakMap();
@@ -1833,6 +1837,9 @@ var Context = class {
1833
1837
  __privateSet(this, _scores, state.ssv);
1834
1838
  __privateGet(this, _mitt3).emit("log", ["debug", 130, state]);
1835
1839
  }
1840
+ if (state.compositionMetadata) {
1841
+ __privateGet(this, _state).compositionMetadata = state.compositionMetadata;
1842
+ }
1836
1843
  },
1837
1844
  onLogMessage: (message) => __privateGet(this, _mitt3).emit("log", message)
1838
1845
  });
@@ -1891,7 +1898,7 @@ var Context = class {
1891
1898
  * i.e. pushing the same URL or cookies as before,
1892
1899
  * will NOT result in a recomputation of signal state.
1893
1900
  */
1894
- async update({ compositionMetadata, ...newData }) {
1901
+ async update(newData) {
1895
1902
  var _a, _b, _c, _d, _e;
1896
1903
  const commands = [];
1897
1904
  const newServerSideTests = {};
@@ -1985,10 +1992,16 @@ var Context = class {
1985
1992
  scores: __privateGet(this, _serverTransitionState) ? __privateMethod(this, _Context_instances, calculateScores_fn).call(this, this.storage.data) : __privateGet(this, _scores)
1986
1993
  })
1987
1994
  );
1995
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
1988
1996
  __privateSet(this, _state, {
1989
1997
  ...__privateGet(this, _state),
1990
1998
  ...newData
1991
1999
  });
2000
+ if (newData.compositionMetadata && // deep equal is not too bad, as we only have 1 level of depth in dynamic inputs
2001
+ !(0, import_lite5.dequal)(previousCompositionMetadata, __privateGet(this, _state).compositionMetadata)) {
2002
+ __privateGet(this, _mitt3).emit("canvasDataUpdated", __privateGet(this, _state).compositionMetadata);
2003
+ __privateGet(this, _state).compositionMetadata = newData.compositionMetadata;
2004
+ }
1992
2005
  await this.storage.updateData(commands);
1993
2006
  if (__privateGet(this, _serverTransitionState)) {
1994
2007
  await this.processServerCommands({
@@ -2001,7 +2014,6 @@ var Context = class {
2001
2014
  name: testName,
2002
2015
  variantId: testVariantId,
2003
2016
  variantAssigned: true,
2004
- // @todo this needs to be fixed, we should provide correct is control as well as canvas data
2005
2017
  control: false,
2006
2018
  compositionMetadata: void 0
2007
2019
  });
@@ -2019,7 +2031,7 @@ var Context = class {
2019
2031
  if (!plugin.update) {
2020
2032
  continue;
2021
2033
  }
2022
- await plugin.update(newData);
2034
+ await plugin.update(newData, __privateGet(this, _scores));
2023
2035
  }
2024
2036
  }
2025
2037
  (_e = __privateGet(this, _commands)) == null ? void 0 : _e.push(...commands);
@@ -2148,7 +2160,10 @@ var Context = class {
2148
2160
  * @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
2149
2161
  */
2150
2162
  async forget(fromAllDevices) {
2151
- __privateSet(this, _state, {});
2163
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
2164
+ __privateSet(this, _state, {
2165
+ compositionMetadata: previousCompositionMetadata
2166
+ });
2152
2167
  if (__privateGet(this, _plugins)) {
2153
2168
  for (let i = 0; i < __privateGet(this, _plugins).length; i++) {
2154
2169
  const plugin = __privateGet(this, _plugins)[i];
@@ -2171,7 +2186,8 @@ var Context = class {
2171
2186
  ssv: __privateGet(this, _scores),
2172
2187
  tests: {},
2173
2188
  personalizeVariants: this.storage.data.personalizeVariants,
2174
- commands: __privateGet(this, _commands)
2189
+ commands: __privateGet(this, _commands),
2190
+ compositionMetadata: __privateGet(this, _state).compositionMetadata
2175
2191
  };
2176
2192
  const allTests = this.storage.data.tests;
2177
2193
  Object.entries(allTests).map(([testName, testValue]) => {
@@ -2416,10 +2432,10 @@ var getBasePayload = () => {
2416
2432
  href: window.location.href
2417
2433
  };
2418
2434
  };
2419
- var generateVisitorId = async () => {
2435
+ var generateVisitorId = () => {
2420
2436
  return `visitor_${generalRandomId()}`;
2421
2437
  };
2422
- var generateSessionId = async () => {
2438
+ var generateSessionId = () => {
2423
2439
  return `session_${generalRandomId()}`;
2424
2440
  };
2425
2441
  var generatePageId = () => {
package/dist/index.mjs CHANGED
@@ -227,6 +227,10 @@ var ManifestInstance = class {
227
227
  }
228
228
  return (_d = (_c = __privateGet(this, _mf).pz) == null ? void 0 : _c.enr) == null ? void 0 : _d[scoreKey.substring(0, enrichmentIndex)];
229
229
  }
230
+ getAggregateDimensionByKey(scoreKey) {
231
+ var _a, _b;
232
+ return (_b = (_a = __privateGet(this, _mf).pz) == null ? void 0 : _a.agg) == null ? void 0 : _b[scoreKey];
233
+ }
230
234
  };
231
235
  _mf = new WeakMap();
232
236
  _signalInstances = new WeakMap();
@@ -1740,6 +1744,9 @@ var Context = class {
1740
1744
  __privateSet(this, _scores, state.ssv);
1741
1745
  __privateGet(this, _mitt3).emit("log", ["debug", 130, state]);
1742
1746
  }
1747
+ if (state.compositionMetadata) {
1748
+ __privateGet(this, _state).compositionMetadata = state.compositionMetadata;
1749
+ }
1743
1750
  },
1744
1751
  onLogMessage: (message) => __privateGet(this, _mitt3).emit("log", message)
1745
1752
  });
@@ -1798,7 +1805,7 @@ var Context = class {
1798
1805
  * i.e. pushing the same URL or cookies as before,
1799
1806
  * will NOT result in a recomputation of signal state.
1800
1807
  */
1801
- async update({ compositionMetadata, ...newData }) {
1808
+ async update(newData) {
1802
1809
  var _a, _b, _c, _d, _e;
1803
1810
  const commands = [];
1804
1811
  const newServerSideTests = {};
@@ -1892,10 +1899,16 @@ var Context = class {
1892
1899
  scores: __privateGet(this, _serverTransitionState) ? __privateMethod(this, _Context_instances, calculateScores_fn).call(this, this.storage.data) : __privateGet(this, _scores)
1893
1900
  })
1894
1901
  );
1902
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
1895
1903
  __privateSet(this, _state, {
1896
1904
  ...__privateGet(this, _state),
1897
1905
  ...newData
1898
1906
  });
1907
+ if (newData.compositionMetadata && // deep equal is not too bad, as we only have 1 level of depth in dynamic inputs
1908
+ !dequal5(previousCompositionMetadata, __privateGet(this, _state).compositionMetadata)) {
1909
+ __privateGet(this, _mitt3).emit("canvasDataUpdated", __privateGet(this, _state).compositionMetadata);
1910
+ __privateGet(this, _state).compositionMetadata = newData.compositionMetadata;
1911
+ }
1899
1912
  await this.storage.updateData(commands);
1900
1913
  if (__privateGet(this, _serverTransitionState)) {
1901
1914
  await this.processServerCommands({
@@ -1908,7 +1921,6 @@ var Context = class {
1908
1921
  name: testName,
1909
1922
  variantId: testVariantId,
1910
1923
  variantAssigned: true,
1911
- // @todo this needs to be fixed, we should provide correct is control as well as canvas data
1912
1924
  control: false,
1913
1925
  compositionMetadata: void 0
1914
1926
  });
@@ -1926,7 +1938,7 @@ var Context = class {
1926
1938
  if (!plugin.update) {
1927
1939
  continue;
1928
1940
  }
1929
- await plugin.update(newData);
1941
+ await plugin.update(newData, __privateGet(this, _scores));
1930
1942
  }
1931
1943
  }
1932
1944
  (_e = __privateGet(this, _commands)) == null ? void 0 : _e.push(...commands);
@@ -2055,7 +2067,10 @@ var Context = class {
2055
2067
  * @param fromAllDevices for an identified user, whether to delete all their data (for the entire account) - true, or data for this device (sign out) - false
2056
2068
  */
2057
2069
  async forget(fromAllDevices) {
2058
- __privateSet(this, _state, {});
2070
+ const previousCompositionMetadata = __privateGet(this, _state).compositionMetadata;
2071
+ __privateSet(this, _state, {
2072
+ compositionMetadata: previousCompositionMetadata
2073
+ });
2059
2074
  if (__privateGet(this, _plugins)) {
2060
2075
  for (let i = 0; i < __privateGet(this, _plugins).length; i++) {
2061
2076
  const plugin = __privateGet(this, _plugins)[i];
@@ -2078,7 +2093,8 @@ var Context = class {
2078
2093
  ssv: __privateGet(this, _scores),
2079
2094
  tests: {},
2080
2095
  personalizeVariants: this.storage.data.personalizeVariants,
2081
- commands: __privateGet(this, _commands)
2096
+ commands: __privateGet(this, _commands),
2097
+ compositionMetadata: __privateGet(this, _state).compositionMetadata
2082
2098
  };
2083
2099
  const allTests = this.storage.data.tests;
2084
2100
  Object.entries(allTests).map(([testName, testValue]) => {
@@ -2323,10 +2339,10 @@ var getBasePayload = () => {
2323
2339
  href: window.location.href
2324
2340
  };
2325
2341
  };
2326
- var generateVisitorId = async () => {
2342
+ var generateVisitorId = () => {
2327
2343
  return `visitor_${generalRandomId()}`;
2328
2344
  };
2329
- var generateSessionId = async () => {
2345
+ var generateSessionId = () => {
2330
2346
  return `session_${generalRandomId()}`;
2331
2347
  };
2332
2348
  var generatePageId = () => {
@@ -390,6 +390,7 @@ declare class ManifestInstance {
390
390
  */
391
391
  computeAggregateDimensions(primitiveScores: ScoreVector): ScoreVector;
392
392
  getDimensionByKey(scoreKey: string): EnrichmentCategory | Signal | undefined;
393
+ getAggregateDimensionByKey(scoreKey: string): AggregateDimension | undefined;
393
394
  }
394
395
 
395
396
  interface paths {
@@ -1116,8 +1117,8 @@ type ContextPlugin = {
1116
1117
  init?: (context: Context) => () => void;
1117
1118
  /** Plugin-specific actions to perform when a user is forgotten */
1118
1119
  forget?: () => Promise<void> | void;
1119
- /** Plugin-specific actions to perform when the visitor context is updated */
1120
- update?: (newData: Partial<ContextState>) => Promise<void> | void;
1120
+ /** Plugin-specific actions to perform when the visitor context is updated, second parameter is the recalculated scores after the update */
1121
+ update?: (newData: Partial<ContextState>, recalculatedScores: ScoreVector) => Promise<void> | void;
1121
1122
  /**
1122
1123
  * Allows the plugin to register named personalization selection algorithms
1123
1124
  *
@@ -1246,7 +1247,7 @@ interface ContextInstance {
1246
1247
  /**
1247
1248
  * Updates the canvas data and emits a canvasDataUpdated event
1248
1249
  */
1249
- updateCompositionMetadata(newData: Partial<CompositionMetadata>): Promise<void>;
1250
+ updateCompositionMetadata(newData: CompositionMetadata): Promise<void>;
1250
1251
  }
1251
1252
  declare class Context implements ContextInstance {
1252
1253
  #private;
@@ -1282,7 +1283,7 @@ declare class Context implements ContextInstance {
1282
1283
  * i.e. pushing the same URL or cookies as before,
1283
1284
  * will NOT result in a recomputation of signal state.
1284
1285
  */
1285
- update({ compositionMetadata, ...newData }: Partial<ContextState>): Promise<void>;
1286
+ update(newData: Partial<ContextState>): Promise<void>;
1286
1287
  processServerCommands({ serverCommands, commands, }: {
1287
1288
  serverCommands: StorageCommands[] | undefined;
1288
1289
  commands: StorageCommands[];
@@ -390,6 +390,7 @@ declare class ManifestInstance {
390
390
  */
391
391
  computeAggregateDimensions(primitiveScores: ScoreVector): ScoreVector;
392
392
  getDimensionByKey(scoreKey: string): EnrichmentCategory | Signal | undefined;
393
+ getAggregateDimensionByKey(scoreKey: string): AggregateDimension | undefined;
393
394
  }
394
395
 
395
396
  interface paths {
@@ -1116,8 +1117,8 @@ type ContextPlugin = {
1116
1117
  init?: (context: Context) => () => void;
1117
1118
  /** Plugin-specific actions to perform when a user is forgotten */
1118
1119
  forget?: () => Promise<void> | void;
1119
- /** Plugin-specific actions to perform when the visitor context is updated */
1120
- update?: (newData: Partial<ContextState>) => Promise<void> | void;
1120
+ /** Plugin-specific actions to perform when the visitor context is updated, second parameter is the recalculated scores after the update */
1121
+ update?: (newData: Partial<ContextState>, recalculatedScores: ScoreVector) => Promise<void> | void;
1121
1122
  /**
1122
1123
  * Allows the plugin to register named personalization selection algorithms
1123
1124
  *
@@ -1246,7 +1247,7 @@ interface ContextInstance {
1246
1247
  /**
1247
1248
  * Updates the canvas data and emits a canvasDataUpdated event
1248
1249
  */
1249
- updateCompositionMetadata(newData: Partial<CompositionMetadata>): Promise<void>;
1250
+ updateCompositionMetadata(newData: CompositionMetadata): Promise<void>;
1250
1251
  }
1251
1252
  declare class Context implements ContextInstance {
1252
1253
  #private;
@@ -1282,7 +1283,7 @@ declare class Context implements ContextInstance {
1282
1283
  * i.e. pushing the same URL or cookies as before,
1283
1284
  * will NOT result in a recomputation of signal state.
1284
1285
  */
1285
- update({ compositionMetadata, ...newData }: Partial<ContextState>): Promise<void>;
1286
+ update(newData: Partial<ContextState>): Promise<void>;
1286
1287
  processServerCommands({ serverCommands, commands, }: {
1287
1288
  serverCommands: StorageCommands[] | undefined;
1288
1289
  commands: StorageCommands[];