@uniformdev/insights 20.31.1-alpha.184 → 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.
package/dist/index.d.mts CHANGED
@@ -84,6 +84,8 @@ type UniformInsights = {
84
84
  testResult: (result: TestEvent, compositionData?: UniformMetadata) => void;
85
85
  personalizationResult: (result: PersonalizationEvent, compositionData?: UniformMetadata) => void;
86
86
  goalConvert: (goalId: string, compositionData?: UniformMetadata) => void;
87
+ segmentUpdated: (segmentId: string, value: number, compositionData?: UniformMetadata) => void;
88
+ enrichmentUpdated: (enrichmentId: string, key: string, strength: number, compositionData?: UniformMetadata) => void;
87
89
  get sessionId(): string | undefined;
88
90
  };
89
91
 
package/dist/index.d.ts CHANGED
@@ -84,6 +84,8 @@ type UniformInsights = {
84
84
  testResult: (result: TestEvent, compositionData?: UniformMetadata) => void;
85
85
  personalizationResult: (result: PersonalizationEvent, compositionData?: UniformMetadata) => void;
86
86
  goalConvert: (goalId: string, compositionData?: UniformMetadata) => void;
87
+ segmentUpdated: (segmentId: string, value: number, compositionData?: UniformMetadata) => void;
88
+ enrichmentUpdated: (enrichmentId: string, key: string, strength: number, compositionData?: UniformMetadata) => void;
87
89
  get sessionId(): string | undefined;
88
90
  };
89
91
 
package/dist/index.esm.js CHANGED
@@ -209,6 +209,40 @@ var generalRandomId = () => {
209
209
  }
210
210
  return Math.random().toString(32).substring(2);
211
211
  };
212
+ var convertUniformMetadataToInsightsMetadata = (uniformMetadata) => {
213
+ return uniformMetadata ? {
214
+ composition_id: uniformMetadata.compositionId,
215
+ pm_node_path: uniformMetadata.matchedRoute,
216
+ dynamic_inputs: uniformMetadata.dynamicInputs
217
+ } : void 0;
218
+ };
219
+
220
+ // src/events/enrichment.ts
221
+ var buildEnrichmentUpdatedMessage = ({
222
+ sessionId,
223
+ visitorId,
224
+ pageId,
225
+ projectId,
226
+ enrichmentId,
227
+ key,
228
+ strength,
229
+ compositionData
230
+ }) => ({
231
+ action: "enrichment_updated",
232
+ version: "2",
233
+ session_id: sessionId,
234
+ visitor_id: visitorId,
235
+ page_view_id: pageId,
236
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
237
+ project_id: projectId,
238
+ payload: {
239
+ id: enrichmentId,
240
+ key,
241
+ strength
242
+ },
243
+ web_metadata: getWebMetadata(),
244
+ uniform: compositionData || {}
245
+ });
212
246
 
213
247
  // src/events/goal.ts
214
248
  var buildGoalConvertMessage = (sessionId, visitorId, pageId, projectId, goalId, compositionData) => ({
@@ -259,6 +293,31 @@ var buildPersonalizationResultMessage = (sessionId, visitorId, pageId, projectId
259
293
  uniform: compositionData || {}
260
294
  });
261
295
 
296
+ // src/events/segment.ts
297
+ var buildSegmentUpdatedMessage = ({
298
+ sessionId,
299
+ visitorId,
300
+ pageId,
301
+ projectId,
302
+ segmentId,
303
+ value,
304
+ compositionData
305
+ }) => ({
306
+ action: "segment_updated",
307
+ version: "2",
308
+ session_id: sessionId,
309
+ visitor_id: visitorId,
310
+ page_view_id: pageId,
311
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
312
+ project_id: projectId,
313
+ payload: {
314
+ id: segmentId,
315
+ value
316
+ },
317
+ web_metadata: getWebMetadata(),
318
+ uniform: compositionData || {}
319
+ });
320
+
262
321
  // src/events/session.ts
263
322
  var buildSessionStartMessage = (sessionId, visitorId, pageId, projectId, previousSessionId, compositionData) => ({
264
323
  action: "session_start",
@@ -357,10 +416,19 @@ var createMemoryStorage = () => {
357
416
 
358
417
  // src/plugin.ts
359
418
  var createInsightsCore = (options) => {
419
+ if (options.endpoint.type === "api" && !options.endpoint.host) {
420
+ throw new Error("Insights context plugin requires API host");
421
+ }
422
+ if (options.endpoint.type === "api" && !options.endpoint.apiKey) {
423
+ throw new Error("Insights context plugin requires API key");
424
+ }
425
+ if (!options.endpoint.projectId) {
426
+ throw new Error("Insights context plugin requires project ID");
427
+ }
360
428
  const {
361
429
  endpoint,
362
430
  storage: customStorage,
363
- batchConfig = DEFAULT_BATCH_CONFIG,
431
+ batchConfig,
364
432
  sessionDurationSeconds = 30 * 60,
365
433
  getVisitorId = generateVisitorId,
366
434
  getSessionId = generateSessionId
@@ -504,6 +572,37 @@ var createInsightsCore = (options) => {
504
572
  );
505
573
  addEvent(message);
506
574
  },
575
+ segmentUpdated: (segmentId, value, compositionData) => {
576
+ if (!storageData) {
577
+ return;
578
+ }
579
+ const message = buildSegmentUpdatedMessage({
580
+ sessionId: storageData.sessionId,
581
+ visitorId: storageData.visitorId,
582
+ pageId,
583
+ projectId: endpoint.projectId,
584
+ segmentId,
585
+ value,
586
+ compositionData
587
+ });
588
+ addEvent(message);
589
+ },
590
+ enrichmentUpdated: (enrichmentId, key, strength, compositionData) => {
591
+ if (!storageData) {
592
+ return;
593
+ }
594
+ const message = buildEnrichmentUpdatedMessage({
595
+ sessionId: storageData.sessionId,
596
+ visitorId: storageData.visitorId,
597
+ pageId,
598
+ projectId: endpoint.projectId,
599
+ enrichmentId,
600
+ key,
601
+ strength,
602
+ compositionData
603
+ });
604
+ addEvent(message);
605
+ },
507
606
  forget: () => {
508
607
  storage.clear();
509
608
  storageData = void 0;
@@ -520,6 +619,7 @@ var createInsightsPlugin = (options) => {
520
619
  let previousUrl = void 0;
521
620
  let isInitialized = false;
522
621
  let eventQueue = [];
622
+ let contextInstance = void 0;
523
623
  const processQueuedEvents = () => {
524
624
  if (isInitialized && eventQueue.length > 0) {
525
625
  eventQueue.forEach((event) => event());
@@ -533,12 +633,31 @@ var createInsightsPlugin = (options) => {
533
633
  eventQueue.push(eventFn);
534
634
  }
535
635
  };
636
+ const previousScores = {};
637
+ const handleScoreUpdates = (updatedScores, compositionData) => {
638
+ if (!contextInstance) {
639
+ return;
640
+ }
641
+ Object.entries(updatedScores).forEach(([scoreKey, value]) => {
642
+ var _a, _b;
643
+ if (previousScores[scoreKey] === value) {
644
+ return;
645
+ }
646
+ const aggregateDimension = contextInstance.manifest.getAggregateDimensionByKey(scoreKey);
647
+ const signalDimension = (_b = (_a = contextInstance.manifest.data.project.pz) == null ? void 0 : _a.sig) == null ? void 0 : _b[scoreKey];
648
+ if (aggregateDimension || signalDimension) {
649
+ insights.segmentUpdated(scoreKey, value, compositionData);
650
+ previousScores[scoreKey] = value;
651
+ }
652
+ });
653
+ };
536
654
  return {
537
655
  init: (context) => {
538
656
  if (typeof window === "undefined") {
539
657
  return () => {
540
658
  };
541
659
  }
660
+ contextInstance = context;
542
661
  const consentChanged = () => {
543
662
  if (context.storage.data.consent) {
544
663
  insights.init(context).then(() => {
@@ -552,44 +671,27 @@ var createInsightsPlugin = (options) => {
552
671
  };
553
672
  const handlePersonalizationResult = (data) => {
554
673
  queueEvent(() => {
555
- var _a, _b, _c;
556
- insights.personalizationResult(data, {
557
- composition_id: (_a = data.compositionMetadata) == null ? void 0 : _a.compositionId,
558
- pm_node_path: (_b = data.compositionMetadata) == null ? void 0 : _b.matchedRoute,
559
- dynamic_inputs: (_c = data.compositionMetadata) == null ? void 0 : _c.dynamicInputs
560
- });
674
+ insights.personalizationResult(
675
+ data,
676
+ convertUniformMetadataToInsightsMetadata(data.compositionMetadata)
677
+ );
561
678
  });
562
679
  };
563
680
  const handleTestResult = (result) => {
564
681
  queueEvent(() => {
565
- insights.testResult(
566
- result,
567
- result.compositionMetadata ? {
568
- composition_id: result.compositionMetadata.compositionId,
569
- pm_node_path: result.compositionMetadata.matchedRoute,
570
- dynamic_inputs: result.compositionMetadata.dynamicInputs
571
- } : void 0
572
- );
682
+ insights.testResult(result, convertUniformMetadataToInsightsMetadata(result.compositionMetadata));
573
683
  });
574
684
  };
575
685
  const handleGoalConvert = (result) => {
576
686
  const compositionMetadata = context.getCompositionMetadata();
577
687
  queueEvent(() => {
578
- insights.goalConvert(result.goalId, {
579
- composition_id: compositionMetadata == null ? void 0 : compositionMetadata.compositionId,
580
- pm_node_path: compositionMetadata == null ? void 0 : compositionMetadata.matchedRoute,
581
- dynamic_inputs: compositionMetadata == null ? void 0 : compositionMetadata.dynamicInputs
582
- });
688
+ insights.goalConvert(result.goalId, convertUniformMetadataToInsightsMetadata(compositionMetadata));
583
689
  });
584
690
  };
585
691
  const handleCanvasDataUpdated = (data) => {
586
692
  if (data) {
587
693
  queueEvent(() => {
588
- insights.pageHit({
589
- composition_id: data.compositionId,
590
- pm_node_path: data.matchedRoute,
591
- dynamic_inputs: data.dynamicInputs
592
- });
694
+ insights.pageHit(convertUniformMetadataToInsightsMetadata(data));
593
695
  });
594
696
  }
595
697
  };
@@ -609,11 +711,32 @@ var createInsightsPlugin = (options) => {
609
711
  context.events.off("canvasDataUpdated", handleCanvasDataUpdated);
610
712
  };
611
713
  },
612
- update: (context) => {
613
- if (context.url && context.url.toString() !== previousUrl) {
614
- previousUrl = context.url.toString();
714
+ update: (updatedData, recalculatedScores) => {
715
+ var _a;
716
+ const compositionMetadata = convertUniformMetadataToInsightsMetadata(
717
+ (_a = updatedData.compositionMetadata) != null ? _a : contextInstance == null ? void 0 : contextInstance.getCompositionMetadata()
718
+ );
719
+ if (updatedData.url && updatedData.url.toString() !== previousUrl) {
720
+ previousUrl = updatedData.url.toString();
721
+ queueEvent(() => {
722
+ insights.pageHit(compositionMetadata);
723
+ });
724
+ }
725
+ if (updatedData.enrichments && updatedData.enrichments.length > 0) {
726
+ queueEvent(() => {
727
+ updatedData.enrichments.forEach((enrichmentData) => {
728
+ insights.enrichmentUpdated(
729
+ enrichmentData.cat,
730
+ enrichmentData.key,
731
+ enrichmentData.str,
732
+ compositionMetadata
733
+ );
734
+ });
735
+ });
736
+ }
737
+ if (recalculatedScores) {
615
738
  queueEvent(() => {
616
- insights.pageHit();
739
+ handleScoreUpdates(recalculatedScores, compositionMetadata);
617
740
  });
618
741
  }
619
742
  },
package/dist/index.js CHANGED
@@ -245,6 +245,40 @@ var generalRandomId = () => {
245
245
  }
246
246
  return Math.random().toString(32).substring(2);
247
247
  };
248
+ var convertUniformMetadataToInsightsMetadata = (uniformMetadata) => {
249
+ return uniformMetadata ? {
250
+ composition_id: uniformMetadata.compositionId,
251
+ pm_node_path: uniformMetadata.matchedRoute,
252
+ dynamic_inputs: uniformMetadata.dynamicInputs
253
+ } : void 0;
254
+ };
255
+
256
+ // src/events/enrichment.ts
257
+ var buildEnrichmentUpdatedMessage = ({
258
+ sessionId,
259
+ visitorId,
260
+ pageId,
261
+ projectId,
262
+ enrichmentId,
263
+ key,
264
+ strength,
265
+ compositionData
266
+ }) => ({
267
+ action: "enrichment_updated",
268
+ version: "2",
269
+ session_id: sessionId,
270
+ visitor_id: visitorId,
271
+ page_view_id: pageId,
272
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
273
+ project_id: projectId,
274
+ payload: {
275
+ id: enrichmentId,
276
+ key,
277
+ strength
278
+ },
279
+ web_metadata: getWebMetadata(),
280
+ uniform: compositionData || {}
281
+ });
248
282
 
249
283
  // src/events/goal.ts
250
284
  var buildGoalConvertMessage = (sessionId, visitorId, pageId, projectId, goalId, compositionData) => ({
@@ -295,6 +329,31 @@ var buildPersonalizationResultMessage = (sessionId, visitorId, pageId, projectId
295
329
  uniform: compositionData || {}
296
330
  });
297
331
 
332
+ // src/events/segment.ts
333
+ var buildSegmentUpdatedMessage = ({
334
+ sessionId,
335
+ visitorId,
336
+ pageId,
337
+ projectId,
338
+ segmentId,
339
+ value,
340
+ compositionData
341
+ }) => ({
342
+ action: "segment_updated",
343
+ version: "2",
344
+ session_id: sessionId,
345
+ visitor_id: visitorId,
346
+ page_view_id: pageId,
347
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
348
+ project_id: projectId,
349
+ payload: {
350
+ id: segmentId,
351
+ value
352
+ },
353
+ web_metadata: getWebMetadata(),
354
+ uniform: compositionData || {}
355
+ });
356
+
298
357
  // src/events/session.ts
299
358
  var buildSessionStartMessage = (sessionId, visitorId, pageId, projectId, previousSessionId, compositionData) => ({
300
359
  action: "session_start",
@@ -393,10 +452,19 @@ var createMemoryStorage = () => {
393
452
 
394
453
  // src/plugin.ts
395
454
  var createInsightsCore = (options) => {
455
+ if (options.endpoint.type === "api" && !options.endpoint.host) {
456
+ throw new Error("Insights context plugin requires API host");
457
+ }
458
+ if (options.endpoint.type === "api" && !options.endpoint.apiKey) {
459
+ throw new Error("Insights context plugin requires API key");
460
+ }
461
+ if (!options.endpoint.projectId) {
462
+ throw new Error("Insights context plugin requires project ID");
463
+ }
396
464
  const {
397
465
  endpoint,
398
466
  storage: customStorage,
399
- batchConfig = DEFAULT_BATCH_CONFIG,
467
+ batchConfig,
400
468
  sessionDurationSeconds = 30 * 60,
401
469
  getVisitorId = generateVisitorId,
402
470
  getSessionId = generateSessionId
@@ -540,6 +608,37 @@ var createInsightsCore = (options) => {
540
608
  );
541
609
  addEvent(message);
542
610
  },
611
+ segmentUpdated: (segmentId, value, compositionData) => {
612
+ if (!storageData) {
613
+ return;
614
+ }
615
+ const message = buildSegmentUpdatedMessage({
616
+ sessionId: storageData.sessionId,
617
+ visitorId: storageData.visitorId,
618
+ pageId,
619
+ projectId: endpoint.projectId,
620
+ segmentId,
621
+ value,
622
+ compositionData
623
+ });
624
+ addEvent(message);
625
+ },
626
+ enrichmentUpdated: (enrichmentId, key, strength, compositionData) => {
627
+ if (!storageData) {
628
+ return;
629
+ }
630
+ const message = buildEnrichmentUpdatedMessage({
631
+ sessionId: storageData.sessionId,
632
+ visitorId: storageData.visitorId,
633
+ pageId,
634
+ projectId: endpoint.projectId,
635
+ enrichmentId,
636
+ key,
637
+ strength,
638
+ compositionData
639
+ });
640
+ addEvent(message);
641
+ },
543
642
  forget: () => {
544
643
  storage.clear();
545
644
  storageData = void 0;
@@ -556,6 +655,7 @@ var createInsightsPlugin = (options) => {
556
655
  let previousUrl = void 0;
557
656
  let isInitialized = false;
558
657
  let eventQueue = [];
658
+ let contextInstance = void 0;
559
659
  const processQueuedEvents = () => {
560
660
  if (isInitialized && eventQueue.length > 0) {
561
661
  eventQueue.forEach((event) => event());
@@ -569,12 +669,31 @@ var createInsightsPlugin = (options) => {
569
669
  eventQueue.push(eventFn);
570
670
  }
571
671
  };
672
+ const previousScores = {};
673
+ const handleScoreUpdates = (updatedScores, compositionData) => {
674
+ if (!contextInstance) {
675
+ return;
676
+ }
677
+ Object.entries(updatedScores).forEach(([scoreKey, value]) => {
678
+ var _a, _b;
679
+ if (previousScores[scoreKey] === value) {
680
+ return;
681
+ }
682
+ const aggregateDimension = contextInstance.manifest.getAggregateDimensionByKey(scoreKey);
683
+ const signalDimension = (_b = (_a = contextInstance.manifest.data.project.pz) == null ? void 0 : _a.sig) == null ? void 0 : _b[scoreKey];
684
+ if (aggregateDimension || signalDimension) {
685
+ insights.segmentUpdated(scoreKey, value, compositionData);
686
+ previousScores[scoreKey] = value;
687
+ }
688
+ });
689
+ };
572
690
  return {
573
691
  init: (context) => {
574
692
  if (typeof window === "undefined") {
575
693
  return () => {
576
694
  };
577
695
  }
696
+ contextInstance = context;
578
697
  const consentChanged = () => {
579
698
  if (context.storage.data.consent) {
580
699
  insights.init(context).then(() => {
@@ -588,44 +707,27 @@ var createInsightsPlugin = (options) => {
588
707
  };
589
708
  const handlePersonalizationResult = (data) => {
590
709
  queueEvent(() => {
591
- var _a, _b, _c;
592
- insights.personalizationResult(data, {
593
- composition_id: (_a = data.compositionMetadata) == null ? void 0 : _a.compositionId,
594
- pm_node_path: (_b = data.compositionMetadata) == null ? void 0 : _b.matchedRoute,
595
- dynamic_inputs: (_c = data.compositionMetadata) == null ? void 0 : _c.dynamicInputs
596
- });
710
+ insights.personalizationResult(
711
+ data,
712
+ convertUniformMetadataToInsightsMetadata(data.compositionMetadata)
713
+ );
597
714
  });
598
715
  };
599
716
  const handleTestResult = (result) => {
600
717
  queueEvent(() => {
601
- insights.testResult(
602
- result,
603
- result.compositionMetadata ? {
604
- composition_id: result.compositionMetadata.compositionId,
605
- pm_node_path: result.compositionMetadata.matchedRoute,
606
- dynamic_inputs: result.compositionMetadata.dynamicInputs
607
- } : void 0
608
- );
718
+ insights.testResult(result, convertUniformMetadataToInsightsMetadata(result.compositionMetadata));
609
719
  });
610
720
  };
611
721
  const handleGoalConvert = (result) => {
612
722
  const compositionMetadata = context.getCompositionMetadata();
613
723
  queueEvent(() => {
614
- insights.goalConvert(result.goalId, {
615
- composition_id: compositionMetadata == null ? void 0 : compositionMetadata.compositionId,
616
- pm_node_path: compositionMetadata == null ? void 0 : compositionMetadata.matchedRoute,
617
- dynamic_inputs: compositionMetadata == null ? void 0 : compositionMetadata.dynamicInputs
618
- });
724
+ insights.goalConvert(result.goalId, convertUniformMetadataToInsightsMetadata(compositionMetadata));
619
725
  });
620
726
  };
621
727
  const handleCanvasDataUpdated = (data) => {
622
728
  if (data) {
623
729
  queueEvent(() => {
624
- insights.pageHit({
625
- composition_id: data.compositionId,
626
- pm_node_path: data.matchedRoute,
627
- dynamic_inputs: data.dynamicInputs
628
- });
730
+ insights.pageHit(convertUniformMetadataToInsightsMetadata(data));
629
731
  });
630
732
  }
631
733
  };
@@ -645,11 +747,32 @@ var createInsightsPlugin = (options) => {
645
747
  context.events.off("canvasDataUpdated", handleCanvasDataUpdated);
646
748
  };
647
749
  },
648
- update: (context) => {
649
- if (context.url && context.url.toString() !== previousUrl) {
650
- previousUrl = context.url.toString();
750
+ update: (updatedData, recalculatedScores) => {
751
+ var _a;
752
+ const compositionMetadata = convertUniformMetadataToInsightsMetadata(
753
+ (_a = updatedData.compositionMetadata) != null ? _a : contextInstance == null ? void 0 : contextInstance.getCompositionMetadata()
754
+ );
755
+ if (updatedData.url && updatedData.url.toString() !== previousUrl) {
756
+ previousUrl = updatedData.url.toString();
757
+ queueEvent(() => {
758
+ insights.pageHit(compositionMetadata);
759
+ });
760
+ }
761
+ if (updatedData.enrichments && updatedData.enrichments.length > 0) {
762
+ queueEvent(() => {
763
+ updatedData.enrichments.forEach((enrichmentData) => {
764
+ insights.enrichmentUpdated(
765
+ enrichmentData.cat,
766
+ enrichmentData.key,
767
+ enrichmentData.str,
768
+ compositionMetadata
769
+ );
770
+ });
771
+ });
772
+ }
773
+ if (recalculatedScores) {
651
774
  queueEvent(() => {
652
- insights.pageHit();
775
+ handleScoreUpdates(recalculatedScores, compositionMetadata);
653
776
  });
654
777
  }
655
778
  },
package/dist/index.mjs CHANGED
@@ -209,6 +209,40 @@ var generalRandomId = () => {
209
209
  }
210
210
  return Math.random().toString(32).substring(2);
211
211
  };
212
+ var convertUniformMetadataToInsightsMetadata = (uniformMetadata) => {
213
+ return uniformMetadata ? {
214
+ composition_id: uniformMetadata.compositionId,
215
+ pm_node_path: uniformMetadata.matchedRoute,
216
+ dynamic_inputs: uniformMetadata.dynamicInputs
217
+ } : void 0;
218
+ };
219
+
220
+ // src/events/enrichment.ts
221
+ var buildEnrichmentUpdatedMessage = ({
222
+ sessionId,
223
+ visitorId,
224
+ pageId,
225
+ projectId,
226
+ enrichmentId,
227
+ key,
228
+ strength,
229
+ compositionData
230
+ }) => ({
231
+ action: "enrichment_updated",
232
+ version: "2",
233
+ session_id: sessionId,
234
+ visitor_id: visitorId,
235
+ page_view_id: pageId,
236
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
237
+ project_id: projectId,
238
+ payload: {
239
+ id: enrichmentId,
240
+ key,
241
+ strength
242
+ },
243
+ web_metadata: getWebMetadata(),
244
+ uniform: compositionData || {}
245
+ });
212
246
 
213
247
  // src/events/goal.ts
214
248
  var buildGoalConvertMessage = (sessionId, visitorId, pageId, projectId, goalId, compositionData) => ({
@@ -259,6 +293,31 @@ var buildPersonalizationResultMessage = (sessionId, visitorId, pageId, projectId
259
293
  uniform: compositionData || {}
260
294
  });
261
295
 
296
+ // src/events/segment.ts
297
+ var buildSegmentUpdatedMessage = ({
298
+ sessionId,
299
+ visitorId,
300
+ pageId,
301
+ projectId,
302
+ segmentId,
303
+ value,
304
+ compositionData
305
+ }) => ({
306
+ action: "segment_updated",
307
+ version: "2",
308
+ session_id: sessionId,
309
+ visitor_id: visitorId,
310
+ page_view_id: pageId,
311
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
312
+ project_id: projectId,
313
+ payload: {
314
+ id: segmentId,
315
+ value
316
+ },
317
+ web_metadata: getWebMetadata(),
318
+ uniform: compositionData || {}
319
+ });
320
+
262
321
  // src/events/session.ts
263
322
  var buildSessionStartMessage = (sessionId, visitorId, pageId, projectId, previousSessionId, compositionData) => ({
264
323
  action: "session_start",
@@ -357,10 +416,19 @@ var createMemoryStorage = () => {
357
416
 
358
417
  // src/plugin.ts
359
418
  var createInsightsCore = (options) => {
419
+ if (options.endpoint.type === "api" && !options.endpoint.host) {
420
+ throw new Error("Insights context plugin requires API host");
421
+ }
422
+ if (options.endpoint.type === "api" && !options.endpoint.apiKey) {
423
+ throw new Error("Insights context plugin requires API key");
424
+ }
425
+ if (!options.endpoint.projectId) {
426
+ throw new Error("Insights context plugin requires project ID");
427
+ }
360
428
  const {
361
429
  endpoint,
362
430
  storage: customStorage,
363
- batchConfig = DEFAULT_BATCH_CONFIG,
431
+ batchConfig,
364
432
  sessionDurationSeconds = 30 * 60,
365
433
  getVisitorId = generateVisitorId,
366
434
  getSessionId = generateSessionId
@@ -504,6 +572,37 @@ var createInsightsCore = (options) => {
504
572
  );
505
573
  addEvent(message);
506
574
  },
575
+ segmentUpdated: (segmentId, value, compositionData) => {
576
+ if (!storageData) {
577
+ return;
578
+ }
579
+ const message = buildSegmentUpdatedMessage({
580
+ sessionId: storageData.sessionId,
581
+ visitorId: storageData.visitorId,
582
+ pageId,
583
+ projectId: endpoint.projectId,
584
+ segmentId,
585
+ value,
586
+ compositionData
587
+ });
588
+ addEvent(message);
589
+ },
590
+ enrichmentUpdated: (enrichmentId, key, strength, compositionData) => {
591
+ if (!storageData) {
592
+ return;
593
+ }
594
+ const message = buildEnrichmentUpdatedMessage({
595
+ sessionId: storageData.sessionId,
596
+ visitorId: storageData.visitorId,
597
+ pageId,
598
+ projectId: endpoint.projectId,
599
+ enrichmentId,
600
+ key,
601
+ strength,
602
+ compositionData
603
+ });
604
+ addEvent(message);
605
+ },
507
606
  forget: () => {
508
607
  storage.clear();
509
608
  storageData = void 0;
@@ -520,6 +619,7 @@ var createInsightsPlugin = (options) => {
520
619
  let previousUrl = void 0;
521
620
  let isInitialized = false;
522
621
  let eventQueue = [];
622
+ let contextInstance = void 0;
523
623
  const processQueuedEvents = () => {
524
624
  if (isInitialized && eventQueue.length > 0) {
525
625
  eventQueue.forEach((event) => event());
@@ -533,12 +633,31 @@ var createInsightsPlugin = (options) => {
533
633
  eventQueue.push(eventFn);
534
634
  }
535
635
  };
636
+ const previousScores = {};
637
+ const handleScoreUpdates = (updatedScores, compositionData) => {
638
+ if (!contextInstance) {
639
+ return;
640
+ }
641
+ Object.entries(updatedScores).forEach(([scoreKey, value]) => {
642
+ var _a, _b;
643
+ if (previousScores[scoreKey] === value) {
644
+ return;
645
+ }
646
+ const aggregateDimension = contextInstance.manifest.getAggregateDimensionByKey(scoreKey);
647
+ const signalDimension = (_b = (_a = contextInstance.manifest.data.project.pz) == null ? void 0 : _a.sig) == null ? void 0 : _b[scoreKey];
648
+ if (aggregateDimension || signalDimension) {
649
+ insights.segmentUpdated(scoreKey, value, compositionData);
650
+ previousScores[scoreKey] = value;
651
+ }
652
+ });
653
+ };
536
654
  return {
537
655
  init: (context) => {
538
656
  if (typeof window === "undefined") {
539
657
  return () => {
540
658
  };
541
659
  }
660
+ contextInstance = context;
542
661
  const consentChanged = () => {
543
662
  if (context.storage.data.consent) {
544
663
  insights.init(context).then(() => {
@@ -552,44 +671,27 @@ var createInsightsPlugin = (options) => {
552
671
  };
553
672
  const handlePersonalizationResult = (data) => {
554
673
  queueEvent(() => {
555
- var _a, _b, _c;
556
- insights.personalizationResult(data, {
557
- composition_id: (_a = data.compositionMetadata) == null ? void 0 : _a.compositionId,
558
- pm_node_path: (_b = data.compositionMetadata) == null ? void 0 : _b.matchedRoute,
559
- dynamic_inputs: (_c = data.compositionMetadata) == null ? void 0 : _c.dynamicInputs
560
- });
674
+ insights.personalizationResult(
675
+ data,
676
+ convertUniformMetadataToInsightsMetadata(data.compositionMetadata)
677
+ );
561
678
  });
562
679
  };
563
680
  const handleTestResult = (result) => {
564
681
  queueEvent(() => {
565
- insights.testResult(
566
- result,
567
- result.compositionMetadata ? {
568
- composition_id: result.compositionMetadata.compositionId,
569
- pm_node_path: result.compositionMetadata.matchedRoute,
570
- dynamic_inputs: result.compositionMetadata.dynamicInputs
571
- } : void 0
572
- );
682
+ insights.testResult(result, convertUniformMetadataToInsightsMetadata(result.compositionMetadata));
573
683
  });
574
684
  };
575
685
  const handleGoalConvert = (result) => {
576
686
  const compositionMetadata = context.getCompositionMetadata();
577
687
  queueEvent(() => {
578
- insights.goalConvert(result.goalId, {
579
- composition_id: compositionMetadata == null ? void 0 : compositionMetadata.compositionId,
580
- pm_node_path: compositionMetadata == null ? void 0 : compositionMetadata.matchedRoute,
581
- dynamic_inputs: compositionMetadata == null ? void 0 : compositionMetadata.dynamicInputs
582
- });
688
+ insights.goalConvert(result.goalId, convertUniformMetadataToInsightsMetadata(compositionMetadata));
583
689
  });
584
690
  };
585
691
  const handleCanvasDataUpdated = (data) => {
586
692
  if (data) {
587
693
  queueEvent(() => {
588
- insights.pageHit({
589
- composition_id: data.compositionId,
590
- pm_node_path: data.matchedRoute,
591
- dynamic_inputs: data.dynamicInputs
592
- });
694
+ insights.pageHit(convertUniformMetadataToInsightsMetadata(data));
593
695
  });
594
696
  }
595
697
  };
@@ -609,11 +711,32 @@ var createInsightsPlugin = (options) => {
609
711
  context.events.off("canvasDataUpdated", handleCanvasDataUpdated);
610
712
  };
611
713
  },
612
- update: (context) => {
613
- if (context.url && context.url.toString() !== previousUrl) {
614
- previousUrl = context.url.toString();
714
+ update: (updatedData, recalculatedScores) => {
715
+ var _a;
716
+ const compositionMetadata = convertUniformMetadataToInsightsMetadata(
717
+ (_a = updatedData.compositionMetadata) != null ? _a : contextInstance == null ? void 0 : contextInstance.getCompositionMetadata()
718
+ );
719
+ if (updatedData.url && updatedData.url.toString() !== previousUrl) {
720
+ previousUrl = updatedData.url.toString();
721
+ queueEvent(() => {
722
+ insights.pageHit(compositionMetadata);
723
+ });
724
+ }
725
+ if (updatedData.enrichments && updatedData.enrichments.length > 0) {
726
+ queueEvent(() => {
727
+ updatedData.enrichments.forEach((enrichmentData) => {
728
+ insights.enrichmentUpdated(
729
+ enrichmentData.cat,
730
+ enrichmentData.key,
731
+ enrichmentData.str,
732
+ compositionMetadata
733
+ );
734
+ });
735
+ });
736
+ }
737
+ if (recalculatedScores) {
615
738
  queueEvent(() => {
616
- insights.pageHit();
739
+ handleScoreUpdates(recalculatedScores, compositionMetadata);
617
740
  });
618
741
  }
619
742
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uniformdev/insights",
3
- "version": "20.31.1-alpha.184+835e8acbd8",
3
+ "version": "20.35.1-alpha.188+c2a5b9c45f",
4
4
  "description": "Uniform Context Insights package",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "main": "./dist/index.js",
@@ -43,14 +43,12 @@
43
43
  "@types/js-cookie": "3.0.6",
44
44
  "@types/node": "^20.0.0",
45
45
  "@types/uuid": "9.0.4",
46
- "@vitest/coverage-v8": "3.2.4",
47
46
  "benny": "3.7.1",
48
47
  "vite": "^7.0.6",
49
- "vite-tsconfig-paths": "^5.1.4",
50
- "vitest": "3.2.4"
48
+ "vite-tsconfig-paths": "^5.1.4"
51
49
  },
52
50
  "dependencies": {
53
- "@uniformdev/context": "20.31.1-alpha.184+835e8acbd8",
51
+ "@uniformdev/context": "20.35.1-alpha.188+c2a5b9c45f",
54
52
  "p-limit": "3.1.0"
55
53
  },
56
54
  "files": [
@@ -59,5 +57,5 @@
59
57
  "publishConfig": {
60
58
  "access": "public"
61
59
  },
62
- "gitHead": "835e8acbd8a6c86466d265ed931634e9838f023f"
60
+ "gitHead": "c2a5b9c45fdbcd3199fba23e38beaf7ca0388c35"
63
61
  }