@xenia-martech/sdk-js 1.2.0-dev.2 → 1.2.0-dev.3

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.
Files changed (56) hide show
  1. package/README.md +6 -1
  2. package/dist/{actions-BcdlokGO.d.cts → actions-Bhji05Pe.d.cts} +15 -2
  3. package/dist/{actions-BcdlokGO.d.ts → actions-Bhji05Pe.d.ts} +15 -2
  4. package/dist/{api-CktVQ6Gl.d.ts → api-BqSvWgBZ.d.cts} +4 -2
  5. package/dist/{api-BEPW0Uan.d.cts → api-ByoECRhR.d.ts} +4 -2
  6. package/dist/{chunk-DWFVDNU5.js → chunk-INM2SPH4.js} +4 -4
  7. package/dist/chunk-INM2SPH4.js.map +1 -0
  8. package/dist/{chunk-7NGJC7CF.js → chunk-TGG5Y4QD.js} +17 -6
  9. package/dist/chunk-TGG5Y4QD.js.map +1 -0
  10. package/dist/{chunk-3PYPPIUM.cjs → chunk-TRRMMPBH.cjs} +13 -13
  11. package/dist/chunk-TRRMMPBH.cjs.map +1 -0
  12. package/dist/{chunk-IBNIRT7J.cjs → chunk-YZG6JR4E.cjs} +17 -6
  13. package/dist/chunk-YZG6JR4E.cjs.map +1 -0
  14. package/dist/client/index.cjs +16 -5
  15. package/dist/client/index.cjs.map +1 -1
  16. package/dist/client/index.d.cts +2 -2
  17. package/dist/client/index.d.ts +2 -2
  18. package/dist/client/index.js +16 -5
  19. package/dist/client/index.js.map +1 -1
  20. package/dist/client/react/index.cjs +19 -8
  21. package/dist/client/react/index.cjs.map +1 -1
  22. package/dist/client/react/index.d.cts +2 -2
  23. package/dist/client/react/index.d.ts +2 -2
  24. package/dist/client/react/index.js +19 -8
  25. package/dist/client/react/index.js.map +1 -1
  26. package/dist/cms/contentful.cjs +2 -1
  27. package/dist/cms/contentful.cjs.map +1 -1
  28. package/dist/cms/contentful.d.cts +1 -1
  29. package/dist/cms/contentful.d.ts +1 -1
  30. package/dist/cms/contentful.js +2 -1
  31. package/dist/cms/contentful.js.map +1 -1
  32. package/dist/{cookie-names-CLqtmGBM.d.ts → cookie-names-Bxd-VNyJ.d.ts} +1 -1
  33. package/dist/{cookie-names-BACctagz.d.cts → cookie-names-RXVfGYPE.d.cts} +1 -1
  34. package/dist/index.cjs +21 -21
  35. package/dist/index.d.cts +4 -4
  36. package/dist/index.d.ts +4 -4
  37. package/dist/index.js +1 -1
  38. package/dist/next/index.cjs +9 -9
  39. package/dist/next/index.d.cts +3 -3
  40. package/dist/next/index.d.ts +3 -3
  41. package/dist/next/index.js +2 -2
  42. package/dist/{personalize-content-Clc1oMYY.d.cts → personalize-content-Bf6YZdkZ.d.cts} +12 -1
  43. package/dist/{personalize-content-Clc1oMYY.d.ts → personalize-content-Bf6YZdkZ.d.ts} +12 -1
  44. package/dist/server/index.cjs +19 -19
  45. package/dist/server/index.d.cts +5 -5
  46. package/dist/server/index.d.ts +5 -5
  47. package/dist/server/index.js +3 -3
  48. package/dist/xenia-sdk.iife.js +3 -3
  49. package/dist/xenia-sdk.iife.js.map +1 -1
  50. package/dist/{xenia-server-BWhWD0La.d.ts → xenia-server-CcjQenru.d.ts} +2 -2
  51. package/dist/{xenia-server-o_wDOcei.d.cts → xenia-server-MlI3Khya.d.cts} +2 -2
  52. package/package.json +1 -1
  53. package/dist/chunk-3PYPPIUM.cjs.map +0 -1
  54. package/dist/chunk-7NGJC7CF.js.map +0 -1
  55. package/dist/chunk-DWFVDNU5.js.map +0 -1
  56. package/dist/chunk-IBNIRT7J.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ElementType, ComponentType } from 'react';
3
- import { E as XeniaClientOptions, D as XeniaClient, w as ResolveResult, u as ResolveBatchResult, J as JsonValue, x as WebhookResponse, R as ResolveBatchItem, g as AnalyticsEventName, T as TrackOptions, P as PagePersonalizeOptions, j as AppliedSwap, s as PageRef, e as XeniaAction, I as InteractionType, q as MessageMountContext, c as MessageComponentRenderer } from '../../actions-BcdlokGO.cjs';
4
- export { A as AnalyticsContext, h as AnalyticsIdentity, i as AnalyticsIngestResponse, k as ClientEvent, l as CmsAdapter, C as ConsentState, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, M as MessageCta, f as MessagePlacement, r as MessageRenderContext, b as MessageTemplateFn, t as PersonalizationSwap, v as ResolveOptions, X as XeniaConfig, a as XeniaEvent, F as XeniaMarker, G as createXeniaClient, H as extractContentSwaps, K as parseActions, L as pendingTargets, N as personalizeContent, O as personalizePage, Q as spliceSlots } from '../../actions-BcdlokGO.cjs';
3
+ import { E as XeniaClientOptions, D as XeniaClient, w as ResolveResult, u as ResolveBatchResult, J as JsonValue, x as WebhookResponse, R as ResolveBatchItem, g as AnalyticsEventName, T as TrackOptions, P as PagePersonalizeOptions, j as AppliedSwap, s as PageRef, e as XeniaAction, I as InteractionType, q as MessageMountContext, c as MessageComponentRenderer } from '../../actions-Bhji05Pe.cjs';
4
+ export { A as AnalyticsContext, h as AnalyticsIdentity, i as AnalyticsIngestResponse, k as ClientEvent, l as CmsAdapter, C as ConsentState, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, M as MessageCta, f as MessagePlacement, r as MessageRenderContext, b as MessageTemplateFn, t as PersonalizationSwap, v as ResolveOptions, X as XeniaConfig, a as XeniaEvent, F as XeniaMarker, G as createXeniaClient, H as extractContentSwaps, K as parseActions, L as pendingTargets, N as personalizeContent, O as personalizePage, Q as spliceSlots } from '../../actions-Bhji05Pe.cjs';
5
5
 
6
6
  interface XeniaProviderProps extends XeniaClientOptions {
7
7
  children: ReactNode;
@@ -1,7 +1,7 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, ElementType, ComponentType } from 'react';
3
- import { E as XeniaClientOptions, D as XeniaClient, w as ResolveResult, u as ResolveBatchResult, J as JsonValue, x as WebhookResponse, R as ResolveBatchItem, g as AnalyticsEventName, T as TrackOptions, P as PagePersonalizeOptions, j as AppliedSwap, s as PageRef, e as XeniaAction, I as InteractionType, q as MessageMountContext, c as MessageComponentRenderer } from '../../actions-BcdlokGO.js';
4
- export { A as AnalyticsContext, h as AnalyticsIdentity, i as AnalyticsIngestResponse, k as ClientEvent, l as CmsAdapter, C as ConsentState, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, M as MessageCta, f as MessagePlacement, r as MessageRenderContext, b as MessageTemplateFn, t as PersonalizationSwap, v as ResolveOptions, X as XeniaConfig, a as XeniaEvent, F as XeniaMarker, G as createXeniaClient, H as extractContentSwaps, K as parseActions, L as pendingTargets, N as personalizeContent, O as personalizePage, Q as spliceSlots } from '../../actions-BcdlokGO.js';
3
+ import { E as XeniaClientOptions, D as XeniaClient, w as ResolveResult, u as ResolveBatchResult, J as JsonValue, x as WebhookResponse, R as ResolveBatchItem, g as AnalyticsEventName, T as TrackOptions, P as PagePersonalizeOptions, j as AppliedSwap, s as PageRef, e as XeniaAction, I as InteractionType, q as MessageMountContext, c as MessageComponentRenderer } from '../../actions-Bhji05Pe.js';
4
+ export { A as AnalyticsContext, h as AnalyticsIdentity, i as AnalyticsIngestResponse, k as ClientEvent, l as CmsAdapter, C as ConsentState, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, M as MessageCta, f as MessagePlacement, r as MessageRenderContext, b as MessageTemplateFn, t as PersonalizationSwap, v as ResolveOptions, X as XeniaConfig, a as XeniaEvent, F as XeniaMarker, G as createXeniaClient, H as extractContentSwaps, K as parseActions, L as pendingTargets, N as personalizeContent, O as personalizePage, Q as spliceSlots } from '../../actions-Bhji05Pe.js';
5
5
 
6
6
  interface XeniaProviderProps extends XeniaClientOptions {
7
7
  children: ReactNode;
@@ -553,7 +553,7 @@ var XeniaApi = class {
553
553
  * ({@link personalizeContent}) calls this once per round with the runtime
554
554
  * targets it found; callers rarely need it directly.
555
555
  */
556
- async resolveEntries(entryIds, opts = {}) {
556
+ async resolveEntries(entryIds, opts) {
557
557
  const { data } = await this.http.request({
558
558
  method: "POST",
559
559
  path: "/api/personalization/resolve-entries",
@@ -561,7 +561,8 @@ var XeniaApi = class {
561
561
  body: compact({
562
562
  entryIds,
563
563
  data: opts.data,
564
- locale: opts.locale
564
+ locale: opts.locale,
565
+ contentKey: opts.contentKey
565
566
  })
566
567
  });
567
568
  return data;
@@ -685,7 +686,7 @@ var DEFAULT_TIMEOUT_MS = 300;
685
686
  var DEFAULT_MAX_ROUNDS = 3;
686
687
  var copyOf = (v) => v && typeof v === "object" && typeof structuredClone === "function" ? structuredClone(v) : v;
687
688
  async function personalizeContent(payload, options) {
688
- const { cms } = options;
689
+ const cms = scopedAdapter(options.cms, options.contentKey);
689
690
  const maxRounds = options.maxRounds ?? DEFAULT_MAX_ROUNDS;
690
691
  const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
691
692
  const applied = [];
@@ -884,7 +885,8 @@ function withDeadline(promise, deadline) {
884
885
  })
885
886
  ]).finally(() => clearTimeout(timer));
886
887
  }
887
- function pendingTargets(payload, cms) {
888
+ function pendingTargets(payload, adapter, contentKey) {
889
+ const cms = scopedAdapter(adapter, contentKey);
888
890
  try {
889
891
  let content = typeof structuredClone === "function" ? structuredClone(payload) : payload;
890
892
  content = cms.prepare ? cms.prepare(content) : content;
@@ -895,6 +897,15 @@ function pendingTargets(payload, cms) {
895
897
  return [];
896
898
  }
897
899
  }
900
+ function scopedAdapter(cms, contentKey) {
901
+ return {
902
+ ...cms,
903
+ marker(entry) {
904
+ const m = cms.marker(entry);
905
+ return m && contentKey && m.keys?.includes(contentKey) ? m : null;
906
+ }
907
+ };
908
+ }
898
909
  async function personalizePage(ref, options) {
899
910
  let page;
900
911
  try {
@@ -2406,7 +2417,7 @@ var XeniaClient = class {
2406
2417
  return personalizePage(ref, { ...opts, resolve: this.entryResolver(opts) });
2407
2418
  }
2408
2419
  entryResolver(opts) {
2409
- const resolveOpts = this.withVisitor({ data: opts.data, locale: opts.locale });
2420
+ const resolveOpts = { ...this.withVisitor({ data: opts.data, locale: opts.locale }), contentKey: opts.contentKey };
2410
2421
  return async (ids) => (await this.api.resolveEntries(ids, resolveOpts)).decisions ?? [];
2411
2422
  }
2412
2423
  /** The SDK-owned visitor anchor: the `identify()`/`config.visitorId` id, else the device id. */
@@ -2823,8 +2834,8 @@ function usePersonalizedContent(page, opts) {
2823
2834
  const xenia = useXenia();
2824
2835
  const hide = opts.render === "hide-until-resolved";
2825
2836
  const initialPending = useMemo(
2826
- () => new Set(page == null ? [] : pendingTargets(page, opts.cms)),
2827
- [page]
2837
+ () => new Set(page == null ? [] : pendingTargets(page, opts.cms, opts.contentKey)),
2838
+ [page, opts.contentKey]
2828
2839
  // markers live in `page`; a new adapter object for the same page changes nothing
2829
2840
  );
2830
2841
  const [state, setState] = useState(
@@ -2832,7 +2843,7 @@ function usePersonalizedContent(page, opts) {
2832
2843
  );
2833
2844
  const optsRef = useRef(opts);
2834
2845
  optsRef.current = opts;
2835
- const optsKey = JSON.stringify({ data: opts.data ?? {}, locale: opts.locale });
2846
+ const optsKey = JSON.stringify({ data: opts.data ?? {}, locale: opts.locale, contentKey: opts.contentKey });
2836
2847
  useEffect(() => {
2837
2848
  if (page == null) return;
2838
2849
  let active = true;