@xenia-martech/sdk-js 1.2.0-dev.1 → 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.
- package/README.md +6 -1
- package/dist/{actions-D9_aAvCv.d.cts → actions-Bhji05Pe.d.cts} +19 -4
- package/dist/{actions-D9_aAvCv.d.ts → actions-Bhji05Pe.d.ts} +19 -4
- package/dist/{api-CktVQ6Gl.d.ts → api-BqSvWgBZ.d.cts} +4 -2
- package/dist/{api-BEPW0Uan.d.cts → api-ByoECRhR.d.ts} +4 -2
- package/dist/{chunk-DWFVDNU5.js → chunk-INM2SPH4.js} +4 -4
- package/dist/chunk-INM2SPH4.js.map +1 -0
- package/dist/{chunk-7NGJC7CF.js → chunk-TGG5Y4QD.js} +17 -6
- package/dist/chunk-TGG5Y4QD.js.map +1 -0
- package/dist/{chunk-3PYPPIUM.cjs → chunk-TRRMMPBH.cjs} +13 -13
- package/dist/chunk-TRRMMPBH.cjs.map +1 -0
- package/dist/{chunk-IBNIRT7J.cjs → chunk-YZG6JR4E.cjs} +17 -6
- package/dist/chunk-YZG6JR4E.cjs.map +1 -0
- package/dist/client/index.cjs +43 -8
- package/dist/client/index.cjs.map +1 -1
- package/dist/client/index.d.cts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +43 -8
- package/dist/client/index.js.map +1 -1
- package/dist/client/react/index.cjs +46 -11
- package/dist/client/react/index.cjs.map +1 -1
- package/dist/client/react/index.d.cts +2 -2
- package/dist/client/react/index.d.ts +2 -2
- package/dist/client/react/index.js +46 -11
- package/dist/client/react/index.js.map +1 -1
- package/dist/cms/contentful.cjs +2 -1
- package/dist/cms/contentful.cjs.map +1 -1
- package/dist/cms/contentful.d.cts +1 -1
- package/dist/cms/contentful.d.ts +1 -1
- package/dist/cms/contentful.js +2 -1
- package/dist/cms/contentful.js.map +1 -1
- package/dist/{cookie-names-CLqtmGBM.d.ts → cookie-names-Bxd-VNyJ.d.ts} +1 -1
- package/dist/{cookie-names-BACctagz.d.cts → cookie-names-RXVfGYPE.d.cts} +1 -1
- package/dist/index.cjs +21 -21
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/next/index.cjs +9 -9
- package/dist/next/index.d.cts +3 -3
- package/dist/next/index.d.ts +3 -3
- package/dist/next/index.js +2 -2
- package/dist/{personalize-content-Clc1oMYY.d.cts → personalize-content-Bf6YZdkZ.d.cts} +12 -1
- package/dist/{personalize-content-Clc1oMYY.d.ts → personalize-content-Bf6YZdkZ.d.ts} +12 -1
- package/dist/server/index.cjs +19 -19
- package/dist/server/index.d.cts +5 -5
- package/dist/server/index.d.ts +5 -5
- package/dist/server/index.js +3 -3
- package/dist/xenia-sdk.iife.js +3 -3
- package/dist/xenia-sdk.iife.js.map +1 -1
- package/dist/{xenia-server-BWhWD0La.d.ts → xenia-server-CcjQenru.d.ts} +2 -2
- package/dist/{xenia-server-o_wDOcei.d.cts → xenia-server-MlI3Khya.d.cts} +2 -2
- package/package.json +1 -1
- package/dist/chunk-3PYPPIUM.cjs.map +0 -1
- package/dist/chunk-7NGJC7CF.js.map +0 -1
- package/dist/chunk-DWFVDNU5.js.map +0 -1
- package/dist/chunk-IBNIRT7J.cjs.map +0 -1
package/dist/client/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as InteractionType, X as XeniaConfig, a as XeniaEvent, M as MessageCta, b as MessageTemplateFn, c as MessageComponentRenderer, W as WidgetFormSubmit, d as WidgetSubmitResponse, e as XeniaAction, f as MessagePlacement, C as ConsentState } from '../actions-
|
|
2
|
-
export { A as AnalyticsContext, g as AnalyticsEventName, h as AnalyticsIdentity, i as AnalyticsIngestResponse, j as AppliedSwap, k as ClientEvent, l as CmsAdapter, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, p as Identity, J as JsonValue, q as MessageMountContext, r as MessageRenderContext, P as PagePersonalizeOptions, s as PageRef, t as PersonalizationSwap, R as ResolveBatchItem, u as ResolveBatchResult, v as ResolveOptions, w as ResolveResult, T as TrackOptions, x as WebhookResponse, y as WidgetPrize, z as WidgetSegment, B as WidgetType, D as XeniaClient, E as XeniaClientOptions, 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-
|
|
1
|
+
import { I as InteractionType, X as XeniaConfig, a as XeniaEvent, M as MessageCta, b as MessageTemplateFn, c as MessageComponentRenderer, W as WidgetFormSubmit, d as WidgetSubmitResponse, e as XeniaAction, f as MessagePlacement, C as ConsentState } from '../actions-Bhji05Pe.cjs';
|
|
2
|
+
export { A as AnalyticsContext, g as AnalyticsEventName, h as AnalyticsIdentity, i as AnalyticsIngestResponse, j as AppliedSwap, k as ClientEvent, l as CmsAdapter, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, p as Identity, J as JsonValue, q as MessageMountContext, r as MessageRenderContext, P as PagePersonalizeOptions, s as PageRef, t as PersonalizationSwap, R as ResolveBatchItem, u as ResolveBatchResult, v as ResolveOptions, w as ResolveResult, T as TrackOptions, x as WebhookResponse, y as WidgetPrize, z as WidgetSegment, B as WidgetType, D as XeniaClient, E as XeniaClientOptions, 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';
|
|
3
3
|
|
|
4
4
|
interface Parsed {
|
|
5
5
|
eventId: string;
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { I as InteractionType, X as XeniaConfig, a as XeniaEvent, M as MessageCta, b as MessageTemplateFn, c as MessageComponentRenderer, W as WidgetFormSubmit, d as WidgetSubmitResponse, e as XeniaAction, f as MessagePlacement, C as ConsentState } from '../actions-
|
|
2
|
-
export { A as AnalyticsContext, g as AnalyticsEventName, h as AnalyticsIdentity, i as AnalyticsIngestResponse, j as AppliedSwap, k as ClientEvent, l as CmsAdapter, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, p as Identity, J as JsonValue, q as MessageMountContext, r as MessageRenderContext, P as PagePersonalizeOptions, s as PageRef, t as PersonalizationSwap, R as ResolveBatchItem, u as ResolveBatchResult, v as ResolveOptions, w as ResolveResult, T as TrackOptions, x as WebhookResponse, y as WidgetPrize, z as WidgetSegment, B as WidgetType, D as XeniaClient, E as XeniaClientOptions, 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-
|
|
1
|
+
import { I as InteractionType, X as XeniaConfig, a as XeniaEvent, M as MessageCta, b as MessageTemplateFn, c as MessageComponentRenderer, W as WidgetFormSubmit, d as WidgetSubmitResponse, e as XeniaAction, f as MessagePlacement, C as ConsentState } from '../actions-Bhji05Pe.js';
|
|
2
|
+
export { A as AnalyticsContext, g as AnalyticsEventName, h as AnalyticsIdentity, i as AnalyticsIngestResponse, j as AppliedSwap, k as ClientEvent, l as CmsAdapter, m as ContentSwap, n as IdentifyRequest, o as IdentifyResponse, p as Identity, J as JsonValue, q as MessageMountContext, r as MessageRenderContext, P as PagePersonalizeOptions, s as PageRef, t as PersonalizationSwap, R as ResolveBatchItem, u as ResolveBatchResult, v as ResolveOptions, w as ResolveResult, T as TrackOptions, x as WebhookResponse, y as WidgetPrize, z as WidgetSegment, B as WidgetType, D as XeniaClient, E as XeniaClientOptions, 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';
|
|
3
3
|
|
|
4
4
|
interface Parsed {
|
|
5
5
|
eventId: string;
|
package/dist/client/index.js
CHANGED
|
@@ -546,7 +546,7 @@ var XeniaApi = class {
|
|
|
546
546
|
* ({@link personalizeContent}) calls this once per round with the runtime
|
|
547
547
|
* targets it found; callers rarely need it directly.
|
|
548
548
|
*/
|
|
549
|
-
async resolveEntries(entryIds, opts
|
|
549
|
+
async resolveEntries(entryIds, opts) {
|
|
550
550
|
const { data } = await this.http.request({
|
|
551
551
|
method: "POST",
|
|
552
552
|
path: "/api/personalization/resolve-entries",
|
|
@@ -554,7 +554,8 @@ var XeniaApi = class {
|
|
|
554
554
|
body: compact({
|
|
555
555
|
entryIds,
|
|
556
556
|
data: opts.data,
|
|
557
|
-
locale: opts.locale
|
|
557
|
+
locale: opts.locale,
|
|
558
|
+
contentKey: opts.contentKey
|
|
558
559
|
})
|
|
559
560
|
});
|
|
560
561
|
return data;
|
|
@@ -678,7 +679,7 @@ var DEFAULT_TIMEOUT_MS = 300;
|
|
|
678
679
|
var DEFAULT_MAX_ROUNDS = 3;
|
|
679
680
|
var copyOf = (v) => v && typeof v === "object" && typeof structuredClone === "function" ? structuredClone(v) : v;
|
|
680
681
|
async function personalizeContent(payload, options) {
|
|
681
|
-
const
|
|
682
|
+
const cms = scopedAdapter(options.cms, options.contentKey);
|
|
682
683
|
const maxRounds = options.maxRounds ?? DEFAULT_MAX_ROUNDS;
|
|
683
684
|
const deadline = Date.now() + (options.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
684
685
|
const applied = [];
|
|
@@ -877,7 +878,8 @@ function withDeadline(promise, deadline) {
|
|
|
877
878
|
})
|
|
878
879
|
]).finally(() => clearTimeout(timer));
|
|
879
880
|
}
|
|
880
|
-
function pendingTargets(payload,
|
|
881
|
+
function pendingTargets(payload, adapter, contentKey) {
|
|
882
|
+
const cms = scopedAdapter(adapter, contentKey);
|
|
881
883
|
try {
|
|
882
884
|
let content = typeof structuredClone === "function" ? structuredClone(payload) : payload;
|
|
883
885
|
content = cms.prepare ? cms.prepare(content) : content;
|
|
@@ -888,6 +890,15 @@ function pendingTargets(payload, cms) {
|
|
|
888
890
|
return [];
|
|
889
891
|
}
|
|
890
892
|
}
|
|
893
|
+
function scopedAdapter(cms, contentKey) {
|
|
894
|
+
return {
|
|
895
|
+
...cms,
|
|
896
|
+
marker(entry) {
|
|
897
|
+
const m = cms.marker(entry);
|
|
898
|
+
return m && contentKey && m.keys?.includes(contentKey) ? m : null;
|
|
899
|
+
}
|
|
900
|
+
};
|
|
901
|
+
}
|
|
891
902
|
async function personalizePage(ref, options) {
|
|
892
903
|
let page;
|
|
893
904
|
try {
|
|
@@ -1229,6 +1240,20 @@ var AutoTracker = class {
|
|
|
1229
1240
|
}
|
|
1230
1241
|
};
|
|
1231
1242
|
|
|
1243
|
+
// src/server/cookies.ts
|
|
1244
|
+
function parseCookies(header) {
|
|
1245
|
+
const out = {};
|
|
1246
|
+
if (!header) return out;
|
|
1247
|
+
for (const part of header.split(";")) {
|
|
1248
|
+
const idx = part.indexOf("=");
|
|
1249
|
+
if (idx === -1) continue;
|
|
1250
|
+
const key = part.slice(0, idx).trim();
|
|
1251
|
+
const value = part.slice(idx + 1).trim();
|
|
1252
|
+
if (key) out[key] = decodeURIComponent(value);
|
|
1253
|
+
}
|
|
1254
|
+
return out;
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1232
1257
|
// src/client/identity.ts
|
|
1233
1258
|
var SESSION_TIMEOUT_MS = 30 * 60 * 1e3;
|
|
1234
1259
|
var Identity = class {
|
|
@@ -1276,10 +1301,19 @@ var Identity = class {
|
|
|
1276
1301
|
} catch {
|
|
1277
1302
|
}
|
|
1278
1303
|
}
|
|
1304
|
+
/** The visitor id already in the cookie — e.g. minted by `xeniaProxy()` on the first request. */
|
|
1305
|
+
readVisitorCookie() {
|
|
1306
|
+
if (!this.cookie || typeof document === "undefined") return null;
|
|
1307
|
+
try {
|
|
1308
|
+
return parseCookies(document.cookie)[this.cookieName()] || null;
|
|
1309
|
+
} catch {
|
|
1310
|
+
return null;
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1279
1313
|
// ── Device id ────────────────────────────────────────────────────────────
|
|
1280
1314
|
/**
|
|
1281
|
-
* Resolve a stable device id: localStorage cache →
|
|
1282
|
-
* browser fingerprint. Cached for the session and across reloads.
|
|
1315
|
+
* Resolve a stable device id: localStorage cache → the visitor cookie a server already set →
|
|
1316
|
+
* MediaDevices → SHA-256 browser fingerprint. Cached for the session and across reloads.
|
|
1283
1317
|
*/
|
|
1284
1318
|
async resolveDeviceId() {
|
|
1285
1319
|
if (this.deviceId) {
|
|
@@ -1296,7 +1330,8 @@ var Identity = class {
|
|
|
1296
1330
|
}
|
|
1297
1331
|
} catch {
|
|
1298
1332
|
}
|
|
1299
|
-
let id =
|
|
1333
|
+
let id = this.readVisitorCookie();
|
|
1334
|
+
if (!id) id = await this.mediaDeviceId();
|
|
1300
1335
|
if (!id) id = await this.fingerprint();
|
|
1301
1336
|
this.deviceId = id;
|
|
1302
1337
|
try {
|
|
@@ -2375,7 +2410,7 @@ var XeniaClient = class {
|
|
|
2375
2410
|
return personalizePage(ref, { ...opts, resolve: this.entryResolver(opts) });
|
|
2376
2411
|
}
|
|
2377
2412
|
entryResolver(opts) {
|
|
2378
|
-
const resolveOpts = this.withVisitor({ data: opts.data, locale: opts.locale });
|
|
2413
|
+
const resolveOpts = { ...this.withVisitor({ data: opts.data, locale: opts.locale }), contentKey: opts.contentKey };
|
|
2379
2414
|
return async (ids) => (await this.api.resolveEntries(ids, resolveOpts)).decisions ?? [];
|
|
2380
2415
|
}
|
|
2381
2416
|
/** The SDK-owned visitor anchor: the `identify()`/`config.visitorId` id, else the device id. */
|