@remkoj/optimizely-one-nextjs 6.0.0-pre9 → 6.0.0-rc.1
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 +5 -1
- package/dist/api/index.js +5 -3
- package/dist/api/index.js.map +1 -1
- package/dist/client-types.d.ts +74 -3
- package/dist/client-types.js +5 -1
- package/dist/client-types.js.map +1 -1
- package/dist/components/context.d.ts +218 -64
- package/dist/components/context.js +159 -67
- package/dist/components/context.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/optimizely-one-gadget/_notice.js +1 -0
- package/dist/components/optimizely-one-gadget/_notice.js.map +1 -1
- package/dist/components/optimizely-one-gadget/audiences-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/audiences-panel.js.map +1 -1
- package/dist/components/optimizely-one-gadget/exp-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/exp-panel.js.map +1 -1
- package/dist/components/optimizely-one-gadget/gadget.js +24 -16
- package/dist/components/optimizely-one-gadget/gadget.js.map +1 -1
- package/dist/components/optimizely-one-gadget/goals-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/goals-panel.js.map +1 -1
- package/dist/components/optimizely-one-gadget/graph-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/graph-panel.js.map +1 -1
- package/dist/components/optimizely-one-gadget/interests-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/interests-panel.js.map +1 -1
- package/dist/components/optimizely-one-gadget/logo.js +1 -0
- package/dist/components/optimizely-one-gadget/logo.js.map +1 -1
- package/dist/components/optimizely-one-gadget/profile-panel.js +1 -0
- package/dist/components/optimizely-one-gadget/profile-panel.js.map +1 -1
- package/dist/components/page-activator.js +12 -31
- package/dist/components/page-activator.js.map +1 -1
- package/dist/components/service-filters.d.ts +46 -0
- package/dist/components/service-filters.js +56 -0
- package/dist/components/service-filters.js.map +1 -0
- package/dist/components/types.d.ts +2 -0
- package/dist/components/types.js +2 -0
- package/dist/components/types.js.map +1 -0
- package/dist/components/use-local-state.d.ts +24 -0
- package/dist/components/use-local-state.js +55 -0
- package/dist/components/use-local-state.js.map +1 -0
- package/dist/config.d.ts +119 -0
- package/dist/config.js +101 -2
- package/dist/config.js.map +1 -1
- package/dist/env-vars.d.ts +3 -0
- package/dist/env-vars.js +3 -0
- package/dist/env-vars.js.map +1 -1
- package/dist/products/content-recs/client.d.ts +10 -3
- package/dist/products/content-recs/client.js +38 -2
- package/dist/products/content-recs/client.js.map +1 -1
- package/dist/{api/content-goals.d.ts → products/content-recs/webservice-goals.d.ts} +1 -1
- package/dist/{api/content-goals.js → products/content-recs/webservice-goals.js} +4 -4
- package/dist/products/content-recs/webservice-goals.js.map +1 -0
- package/dist/{api/content-recs.d.ts → products/content-recs/webservice.d.ts} +1 -1
- package/dist/{api/content-recs.js → products/content-recs/webservice.js} +13 -12
- package/dist/products/content-recs/webservice.js.map +1 -0
- package/dist/products/data-platform/client.d.ts +11 -2
- package/dist/products/data-platform/client.js +52 -9
- package/dist/products/data-platform/client.js.map +1 -1
- package/dist/products/data-platform/snippet.js +3 -3
- package/dist/products/data-platform/snippet.js.map +1 -1
- package/dist/products/feature-experimentation/provider.d.ts +7 -0
- package/dist/products/feature-experimentation/provider.js +32 -0
- package/dist/products/feature-experimentation/provider.js.map +1 -0
- package/dist/products/web-experimentation/client.d.ts +5 -2
- package/dist/products/web-experimentation/client.js +21 -7
- package/dist/products/web-experimentation/client.js.map +1 -1
- package/dist/products/web-experimentation/snippet.js +2 -2
- package/dist/products/web-experimentation/snippet.js.map +1 -1
- package/dist/{api/experimentation-api.d.ts → products/web-experimentation/webservice.d.ts} +1 -1
- package/dist/{api/experimentation-api.js → products/web-experimentation/webservice.js} +2 -2
- package/dist/products/web-experimentation/webservice.js.map +1 -0
- package/dist/server-components/index.d.ts +3 -0
- package/dist/server-components/index.js +3 -0
- package/dist/server-components/index.js.map +1 -1
- package/dist/{components/optimizely-one-gadget/index.d.ts → server-components/optimizely-one-gadget.d.ts} +1 -1
- package/dist/{components/optimizely-one-gadget/index.js → server-components/optimizely-one-gadget.js} +4 -5
- package/dist/server-components/optimizely-one-gadget.js.map +1 -0
- package/dist/server-components/optimizely-one.d.ts +219 -0
- package/dist/server-components/optimizely-one.js +112 -0
- package/dist/server-components/optimizely-one.js.map +1 -0
- package/dist/server.d.ts +1 -2
- package/dist/server.js +1 -6
- package/dist/server.js.map +1 -1
- package/dist/styles.css +2 -2
- package/dist/utils/products.d.ts +92 -0
- package/dist/utils/products.js +84 -0
- package/dist/utils/products.js.map +1 -0
- package/package.json +20 -25
- package/dist/api/content-goals.js.map +0 -1
- package/dist/api/content-recs.js.map +0 -1
- package/dist/api/experimentation-api.js.map +0 -1
- package/dist/components/optimizely-one-gadget/index.js.map +0 -1
- package/dist/components/rsc.d.ts +0 -2
- package/dist/components/rsc.js +0 -3
- package/dist/components/rsc.js.map +0 -1
|
@@ -1,13 +1,33 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export class ContentRecsService {
|
|
3
|
+
_apiEnabled = true;
|
|
4
|
+
_clientEnabled = true;
|
|
5
|
+
constructor(enabledServices) {
|
|
6
|
+
if (enabledServices) {
|
|
7
|
+
this._apiEnabled = enabledServices.includes("contentRecsApi");
|
|
8
|
+
this._clientEnabled = enabledServices.includes("contentRecsClient");
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
this._apiEnabled = false;
|
|
12
|
+
this._clientEnabled = false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
get isApiEnabled() {
|
|
16
|
+
return this._apiEnabled;
|
|
17
|
+
}
|
|
18
|
+
get isClientEnabled() {
|
|
19
|
+
return this._clientEnabled;
|
|
20
|
+
}
|
|
3
21
|
order = 300;
|
|
4
|
-
code =
|
|
22
|
+
code = 'crecs';
|
|
5
23
|
debug = false;
|
|
6
24
|
endpoint = "/api/me/cgoals";
|
|
7
25
|
get isActive() {
|
|
8
|
-
return this.
|
|
26
|
+
return this._apiEnabled || this._clientEnabled;
|
|
9
27
|
}
|
|
10
28
|
trackPage() {
|
|
29
|
+
if (!this._clientEnabled)
|
|
30
|
+
return;
|
|
11
31
|
const idio = this.getBrowserApi();
|
|
12
32
|
if (!idio)
|
|
13
33
|
return;
|
|
@@ -15,8 +35,22 @@ export class ContentRecsService {
|
|
|
15
35
|
console.log("Content Recommendations / Analytics - Tracking page view");
|
|
16
36
|
idio.push(['track', 'consume']);
|
|
17
37
|
}
|
|
38
|
+
trackEvent(event) {
|
|
39
|
+
const idio = this.getBrowserApi();
|
|
40
|
+
if (!idio)
|
|
41
|
+
return; // We're disabled so, stop here
|
|
42
|
+
const goalName = [event.event, event.action].filter(x => x).join('-');
|
|
43
|
+
if (!goalName || goalName.length == 0)
|
|
44
|
+
return; // Only track if we've a goal
|
|
45
|
+
if (this.debug)
|
|
46
|
+
console.log("Content Recommendations / Analytics - Tracking goal: " + goalName);
|
|
47
|
+
idio.push(['goal', goalName]);
|
|
48
|
+
idio.push(['track', 'convert']);
|
|
49
|
+
}
|
|
18
50
|
getBrowserApi() {
|
|
19
51
|
try {
|
|
52
|
+
if (!this._clientEnabled)
|
|
53
|
+
return undefined;
|
|
20
54
|
if (!window._iaq)
|
|
21
55
|
window._iaq = [];
|
|
22
56
|
return window._iaq;
|
|
@@ -26,6 +60,8 @@ export class ContentRecsService {
|
|
|
26
60
|
}
|
|
27
61
|
}
|
|
28
62
|
async discoverProfileData(signal) {
|
|
63
|
+
if (!this._apiEnabled)
|
|
64
|
+
return {};
|
|
29
65
|
const nbg = await fetch(this.endpoint, { cache: 'no-store', signal }).then(r => r.ok ? r.json() : undefined);
|
|
30
66
|
return {
|
|
31
67
|
custom: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/content-recs/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/content-recs/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import getConfig, { checkProductStatus } from '
|
|
3
|
-
import * as Responses from '
|
|
1
|
+
import * as ContentRecs from './';
|
|
2
|
+
import getConfig, { checkProductStatus } from '../../config';
|
|
3
|
+
import * as Responses from '../../api/responses';
|
|
4
4
|
export const ContentRecsGoalsService = {
|
|
5
5
|
for: { path: '/cgoals', verb: 'get' },
|
|
6
6
|
handler: async (query, cookies) => {
|
|
@@ -19,4 +19,4 @@ export const ContentRecsGoalsService = {
|
|
|
19
19
|
}
|
|
20
20
|
};
|
|
21
21
|
export default ContentRecsGoalsService;
|
|
22
|
-
//# sourceMappingURL=
|
|
22
|
+
//# sourceMappingURL=webservice-goals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webservice-goals.js","sourceRoot":"","sources":["../../../src/products/content-recs/webservice-goals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,IAAI,CAAA;AACjC,OAAO,SAAS,EAAE,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAA;AAgBhD,MAAM,CAAC,MAAM,uBAAuB,GAA6B;IAC/D,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;IACrC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;QAC1B,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO,SAAS,CAAC,QAAQ,CAAA;QAEpD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ,CAAC,cAAc;YAAE,OAAO,SAAS,CAAC,QAAQ,CAAA;QAEvD,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI;YACP,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAC7B,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,aAAa,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9E,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,GAAG,CAAC,CAAA;IACxC,CAAC;CACF,CAAA;AAED,eAAe,uBAAuB,CAAA"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { ContentRecs } from '../
|
|
2
|
-
import { readConfigFromEnv } from '
|
|
3
|
-
import * as Responses from '
|
|
1
|
+
import { ContentRecs } from '../index.js';
|
|
2
|
+
import { readConfigFromEnv } from '../../config.js';
|
|
3
|
+
import * as Responses from '../../api/responses.js';
|
|
4
4
|
export const ContentRecsApiService = {
|
|
5
5
|
for: { path: '/crecs', verb: 'get' },
|
|
6
6
|
handler: async (query, cookies) => {
|
|
7
|
+
// Read configuration
|
|
7
8
|
const optiOneConfig = readConfigFromEnv();
|
|
8
9
|
if (!optiOneConfig.ContentRecsHost)
|
|
9
10
|
return Responses.NotFound;
|
|
11
|
+
// Identify visitor
|
|
10
12
|
const crId = ContentRecs.Tools.getVisitorID(await cookies);
|
|
11
13
|
if (!crId)
|
|
12
14
|
return [{ total_hits: 0, content: [] }, 200];
|
|
15
|
+
// Send request to Content Recommendations, and strip JSONP function call
|
|
13
16
|
const recsService = new URL(`https://api.${optiOneConfig.ContentRecsHost}/1.0/users/idio_visitor_id:${crId}/content?callback=fn`);
|
|
14
17
|
query.forEach((value, name) => {
|
|
15
18
|
if (name.toLowerCase() != 'callback')
|
|
@@ -20,20 +23,18 @@ export const ContentRecsApiService = {
|
|
|
20
23
|
return [{ error: { status: snippetResponse.status, message: snippetResponse.statusText } }, snippetResponse.status];
|
|
21
24
|
const body = await snippetResponse.text();
|
|
22
25
|
const jsonData = body.substring(body.indexOf('{'), body.lastIndexOf('}') + 1);
|
|
26
|
+
// Convert and return data
|
|
23
27
|
try {
|
|
24
28
|
const recsData = JSON.parse(jsonData);
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
next_page: (new URL(recsData.next_page)).search
|
|
29
|
-
},
|
|
30
|
-
200
|
|
31
|
-
];
|
|
29
|
+
if (recsData.next_page)
|
|
30
|
+
recsData.next_page = (new URL(recsData.next_page)).search;
|
|
31
|
+
return [recsData, 200];
|
|
32
32
|
}
|
|
33
|
-
catch {
|
|
33
|
+
catch (e) {
|
|
34
|
+
console.error("Error in processing Content Recommendations", e);
|
|
34
35
|
return [{ error: { status: 500, message: "Unable to parse Content Recommendations data" } }, 500];
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
};
|
|
38
39
|
export default ContentRecsApiService;
|
|
39
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=webservice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webservice.js","sourceRoot":"","sources":["../../../src/products/content-recs/webservice.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAA;AAEnD,MAAM,CAAC,MAAM,qBAAqB,GAAoB;IACpD,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;IACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChC,qBAAqB;QACrB,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,eAAe;YAChC,OAAO,SAAS,CAAC,QAAQ,CAAA;QAE3B,mBAAmB;QACnB,MAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI;YACP,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QAE9C,yEAAyE;QACzE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,eAAe,aAAa,CAAC,eAAe,8BAA8B,IAAI,sBAAsB,CAAC,CAAA;QACjI,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAC5B,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,UAAU;gBAClC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;QACF,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;QACvE,IAAI,CAAC,eAAe,CAAC,EAAE;YACrB,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,EAAE,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;QACrH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAE7E,0BAA0B;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACrC,IAAI,QAAQ,CAAC,SAAS;gBACpB,QAAQ,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;YAC3D,OAAO,CAAE,QAAQ,EAAE,GAAG,CAAE,CAAA;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,CAAC,CAAA;YAC/D,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,8CAA8C,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;QACnG,CAAC;IACH,CAAC;CACF,CAAA;AAED,eAAe,qBAAqB,CAAA"}
|
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
import * as ClientApi from '../../client-types';
|
|
2
|
-
|
|
2
|
+
import * as GlobalClientTypes from '../../components/types';
|
|
3
|
+
export declare class DataPlatformService implements ClientApi.OptimizelyOneService<ClientApi.OptimizelyDataPlatformApi, 'odp'> {
|
|
4
|
+
private _odpEnabled;
|
|
5
|
+
constructor(enabledServices?: Array<GlobalClientTypes.SupportedProductNames>);
|
|
3
6
|
order: Readonly<number>;
|
|
4
|
-
code: Readonly<
|
|
7
|
+
code: Readonly<'odp'>;
|
|
5
8
|
debug: boolean;
|
|
6
9
|
get isActive(): boolean;
|
|
7
10
|
trackPage(): void;
|
|
8
11
|
trackEvent(event: ClientApi.OptimizelyOneEvent): void;
|
|
9
12
|
getBrowserApi(): ClientApi.OptimizelyDataPlatformApi | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* Discover the visitorId cookie and make it available to the systems as identifier
|
|
15
|
+
*
|
|
16
|
+
* @returns The partial profile data
|
|
17
|
+
*/
|
|
18
|
+
discoverProfileData(): Promise<Partial<ClientApi.OptimizelyOneProfileData>>;
|
|
10
19
|
updateProfile(profileData: ClientApi.OptimizelyOneProfileData): void;
|
|
11
20
|
private lastTrackedContentIntelligenceId;
|
|
12
21
|
private get contentIntelligenceId();
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export class DataPlatformService {
|
|
3
|
+
_odpEnabled = true;
|
|
4
|
+
constructor(enabledServices) {
|
|
5
|
+
if (enabledServices)
|
|
6
|
+
this._odpEnabled = enabledServices.includes("dataPlatform");
|
|
7
|
+
}
|
|
3
8
|
order = 200;
|
|
4
|
-
code =
|
|
9
|
+
code = 'odp';
|
|
5
10
|
debug = false;
|
|
6
11
|
get isActive() {
|
|
7
|
-
return this.
|
|
12
|
+
return this._odpEnabled;
|
|
8
13
|
}
|
|
9
14
|
trackPage() {
|
|
15
|
+
if (!this._odpEnabled)
|
|
16
|
+
return;
|
|
10
17
|
const zaius = this.getBrowserApi();
|
|
11
18
|
if (!zaius)
|
|
12
19
|
return;
|
|
@@ -21,37 +28,73 @@ export class DataPlatformService {
|
|
|
21
28
|
}
|
|
22
29
|
}
|
|
23
30
|
trackEvent(event) {
|
|
31
|
+
if (!this._odpEnabled)
|
|
32
|
+
return;
|
|
24
33
|
const zaius = this.getBrowserApi();
|
|
25
34
|
if (!zaius)
|
|
26
35
|
return;
|
|
27
36
|
const event_name = event.event;
|
|
28
|
-
const event_data = {
|
|
29
|
-
for (const prop_name of Object.getOwnPropertyNames(event)) {
|
|
37
|
+
const event_data = Object.entries(event).reduce((data, [prop_name, prop_value]) => {
|
|
30
38
|
if (prop_name != 'event')
|
|
31
|
-
|
|
32
|
-
|
|
39
|
+
data[prop_name] = prop_value;
|
|
40
|
+
return data;
|
|
41
|
+
}, {});
|
|
33
42
|
if (this.debug)
|
|
34
43
|
console.log("🏬 Data platform - Tracking event:", event_name, event_data);
|
|
35
44
|
zaius.event(event_name, event_data);
|
|
36
45
|
}
|
|
37
46
|
getBrowserApi() {
|
|
38
47
|
try {
|
|
48
|
+
if (!this._odpEnabled)
|
|
49
|
+
return undefined;
|
|
39
50
|
return window.zaius;
|
|
40
51
|
}
|
|
41
52
|
catch {
|
|
42
53
|
return undefined;
|
|
43
54
|
}
|
|
44
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Discover the visitorId cookie and make it available to the systems as identifier
|
|
58
|
+
*
|
|
59
|
+
* @returns The partial profile data
|
|
60
|
+
*/
|
|
61
|
+
discoverProfileData() {
|
|
62
|
+
return new Promise((resolve) => {
|
|
63
|
+
try {
|
|
64
|
+
const cookies = document.cookie.split(';').map(x => x.trim().split('=', 2)).reduce((obj, cData) => { obj[cData[0]] = cData[1]; return obj; }, {});
|
|
65
|
+
const visitorId = cookies['visitorId'];
|
|
66
|
+
if (visitorId)
|
|
67
|
+
return resolve({ feature_experimentation_id: visitorId });
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
//Ignore errors on purpose
|
|
71
|
+
}
|
|
72
|
+
return resolve({});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
45
75
|
updateProfile(profileData) {
|
|
46
76
|
const zaius = this.getBrowserApi();
|
|
47
77
|
if (!zaius)
|
|
48
78
|
return;
|
|
49
|
-
|
|
79
|
+
// Build IDs
|
|
80
|
+
const ids = { ...profileData.ids };
|
|
50
81
|
if (profileData.content_intelligence_id)
|
|
51
82
|
ids.content_intelligence_id = profileData.content_intelligence_id;
|
|
83
|
+
if (profileData.feature_experimentation_id)
|
|
84
|
+
ids.fs_user_id = profileData.feature_experimentation_id;
|
|
85
|
+
// Build fields
|
|
86
|
+
const fields = Object.entries({
|
|
87
|
+
...ids,
|
|
88
|
+
...profileData.custom,
|
|
89
|
+
...profileData.customPII
|
|
90
|
+
}).reduce((acc, [key, value]) => {
|
|
91
|
+
if (value)
|
|
92
|
+
acc[key] = value;
|
|
93
|
+
return acc;
|
|
94
|
+
}, {});
|
|
52
95
|
if (this.debug)
|
|
53
|
-
console.log("🏬 Data platform - Updating profile (ids, attributes):", ids,
|
|
54
|
-
zaius.customer(ids,
|
|
96
|
+
console.log("🏬 Data platform - Updating profile (ids, attributes):", ids, fields);
|
|
97
|
+
zaius.customer(ids, fields);
|
|
55
98
|
}
|
|
56
99
|
lastTrackedContentIntelligenceId = undefined;
|
|
57
100
|
get contentIntelligenceId() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/data-platform/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/data-platform/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAKZ,MAAM,OAAO,mBAAmB;IAEpB,WAAW,GAAa,IAAI,CAAA;IACpC,YAAY,eAAgE;QACxE,IAAI,eAAe;YACf,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IACnE,CAAC;IAEM,KAAK,GAAsB,GAAG,CAAA;IAC9B,IAAI,GAAqB,KAAK,CAAA;IAC9B,KAAK,GAAY,KAAK,CAAA;IAC7B,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,WAAW,CAAA;IAC3B,CAAC;IAEM,SAAS;QAEZ,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACpE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QACvB,IAAI,IAAI,CAAC,gCAAgC,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,IAAI,EAAE,EAC3G,CAAC;YACG,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,0DAA2D,IAAI,CAAC,qBAAsB,EAAE,CAAC,CAAA;YACrH,KAAK,CAAC,QAAQ,CAAC,EAAE,uBAAuB,EAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,qBAAqB,CAAA;QACtE,CAAC;IACL,CAAC;IAEM,UAAU,CAAC,KAAmC;QAEjD,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAM;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAA;QAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAE,SAAS,EAAE,UAAU,CAAE,EAAE,EAAE;YAClF,IAAI,SAAS,IAAI,OAAO;gBACtB,IAAI,CAAC,SAAS,CAAC,GAAG,UAAU,CAAA;YAC9B,OAAO,IAAI,CAAA;QACb,CAAC,EAAE,EAA4B,CAAC,CAAA;QAEhC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QACzF,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACvC,CAAC;IAEM,aAAa;QAEhB,IAAI,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW;gBAAE,OAAO,SAAS,CAAA;YACvC,OAAO,MAAM,CAAC,KAAK,CAAA;QACvB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACI,mBAAmB;QAEtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,CAAC;gBACC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAC,KAAK,EAAE,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAA2B,CAAC,CAAA;gBACtK,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;gBACtC,IAAI,SAAS;oBAAE,OAAO,OAAO,CAAC,EAAE,0BAA0B,EAAE,SAAS,EAAE,CAAC,CAAA;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACL,0BAA0B;YAC9B,CAAC;YACD,OAAO,OAAO,CAAC,EAAE,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACN,CAAC;IAEM,aAAa,CAAC,WAA+C;QAEhE,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAElB,YAAY;QACZ,MAAM,GAAG,GAA2B,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAC1D,IAAI,WAAW,CAAC,uBAAuB;YACnC,GAAG,CAAC,uBAAuB,GAAG,WAAW,CAAC,uBAAuB,CAAA;QACrE,IAAI,WAAW,CAAC,0BAA0B;YACtC,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,0BAA0B,CAAA;QAE3D,eAAe;QACf,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,GAAG,GAAG;YACN,GAAG,WAAW,CAAC,MAAM;YACrB,GAAG,WAAW,CAAC,SAAS;SACC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACxD,IAAI,KAAK;gBACP,GAAG,CAAC,GAAG,CAAC,GAAC,KAAK,CAAA;YAChB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAA4B,CAAC,CAAA;QAChC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,wDAAwD,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QAClG,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC;IAEO,gCAAgC,GAAwB,SAAS,CAAA;IACzE,IAAY,qBAAqB;QAE7B,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,IAAI,EAAE,EAAE,CAAC;YACpE,IAAI,CAAC;gBACD,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;YACnG,CAAC;YAAC,MAAM,CAAC;gBACL,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAA;YACpC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,sBAAsB,CAAA;IACtC,CAAC;IACO,sBAAsB,GAAwB,SAAS,CAAA;CAClE;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
/* eslint @next/next/no-before-interactive-script-outside-document: 0 */
|
|
3
3
|
import Script from 'next/script';
|
|
4
4
|
export const OptimizelyDataPlatformScript = (props) => {
|
|
5
5
|
const odp_id = props.trackerId.split('.').shift() ?? '';
|
|
6
6
|
if (odp_id == '')
|
|
7
7
|
return null;
|
|
8
|
-
return _jsx(Script, { id: 'data-platform-script', strategy: 'beforeInteractive', children: `
|
|
8
|
+
return _jsxs(_Fragment, { children: [_jsx(Script, { id: 'data-platform-script', strategy: 'beforeInteractive', children: `
|
|
9
9
|
var zaius = window['zaius'] || (window['zaius'] = []);
|
|
10
10
|
zaius.methods = ['initialize', 'onload', 'customer', 'entity', 'event', 'subscribe', 'unsubscribe', 'consent', 'identify', 'anonymize', 'dispatch'];
|
|
11
11
|
|
|
@@ -33,7 +33,7 @@ export const OptimizelyDataPlatformScript = (props) => {
|
|
|
33
33
|
var firstScript = document.getElementsByTagName('script')[0];
|
|
34
34
|
firstScript.parentNode.insertBefore(script, firstScript);
|
|
35
35
|
})();
|
|
36
|
-
` });
|
|
36
|
+
` }), _jsx("link", { rel: "preconnect", href: "https://api.zaius.com" })] });
|
|
37
37
|
};
|
|
38
38
|
export default OptimizelyDataPlatformScript;
|
|
39
39
|
//# sourceMappingURL=snippet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/products/data-platform/snippet.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;AAMhC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACvD,IAAI,MAAM,IAAI,EAAE;QACZ,OAAO,IAAI,CAAA;IACf,OAAO,KAAC,MAAM,IAAC,EAAE,EAAC,sBAAsB,EAAC,QAAQ,EAAC,mBAAmB,YAAE;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/products/data-platform/snippet.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;AAMhC,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAA;IACvD,IAAI,MAAM,IAAI,EAAE;QACZ,OAAO,IAAI,CAAA;IACf,OAAO,8BACP,KAAC,MAAM,IAAC,EAAE,EAAC,sBAAsB,EAAC,QAAQ,EAAC,mBAAmB,YAAE;;;;;;;;;;;;;;;;;;;;;;;;gIAwB6D,MAAO;;;;CAIvI,GACQ,EACL,eAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,uBAAuB,GAAG,IACrD,CAAA;AACL,CAAC,CAAA;AAED,eAAe,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type PropsWithChildren } from 'react';
|
|
2
|
+
export type FeatureExperimentationProviderProps = PropsWithChildren<{
|
|
3
|
+
sdkKey: string;
|
|
4
|
+
frontendCookie: string;
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
export default function FeatureExperimentationProvider({ sdkKey, frontendCookie, debug, children }: FeatureExperimentationProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import { createInstance, OptimizelyProvider } from '@optimizely/react-sdk';
|
|
4
|
+
import { useMemo, useEffect } from 'react';
|
|
5
|
+
import { useCookie } from '../../components/use-cookie.js';
|
|
6
|
+
export default function FeatureExperimentationProvider({ sdkKey, frontendCookie, debug = false, children }) {
|
|
7
|
+
const optimizelyClient = useMemo(() => createInstance({
|
|
8
|
+
sdkKey,
|
|
9
|
+
datafileOptions: {
|
|
10
|
+
autoUpdate: true,
|
|
11
|
+
updateInterval: 1000 * 60, // Update every minute
|
|
12
|
+
},
|
|
13
|
+
eventBatchSize: 10,
|
|
14
|
+
eventFlushInterval: 1000 * 30, // Flush every 30 seconds
|
|
15
|
+
logLevel: debug ? 'debug' : 'error',
|
|
16
|
+
odpOptions: {
|
|
17
|
+
disabled: false
|
|
18
|
+
}
|
|
19
|
+
}), [sdkKey, debug]);
|
|
20
|
+
const [userId] = useCookie(frontendCookie, `optimizely-one-user-${Math.random().toString(36).substring(2, 15)}`);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (debug || process.env.NODE_ENV === 'development') {
|
|
23
|
+
console.groupCollapsed('🔧 [FeatureExperimentationProvider] Debug mode enabled');
|
|
24
|
+
console.log('🔑 SDK Key:', sdkKey);
|
|
25
|
+
console.log('🍪 Frontend Cookie:', frontendCookie);
|
|
26
|
+
console.log('👤 User ID:', userId);
|
|
27
|
+
console.groupEnd();
|
|
28
|
+
}
|
|
29
|
+
}, [sdkKey, frontendCookie, userId, debug]);
|
|
30
|
+
return (_jsx(OptimizelyProvider, { optimizely: optimizelyClient, user: { id: userId }, children: children }));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/products/feature-experimentation/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,SAAS,EAA0B,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAQ3D,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,GAAG,KAAK,EAAE,QAAQ,EAAuC;IAC7I,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC;QACpD,MAAM;QACN,eAAe,EAAE;YACf,UAAU,EAAE,IAAI;YAChB,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,sBAAsB;SAClD;QACD,cAAc,EAAE,EAAE;QAClB,kBAAkB,EAAE,IAAI,GAAG,EAAE,EAAE,yBAAyB;QACxD,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;QACnC,UAAU,EAAE;YACV,QAAQ,EAAE,KAAK;SAChB;KACF,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,cAAc,EAAE,uBAAuB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IAEjH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YACpD,OAAO,CAAC,cAAc,CAAC,wDAAwD,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YACnC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IAE5C,OAAO,CACL,KAAC,kBAAkB,IAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,YACnE,QAAQ,GACU,CACtB,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import * as ClientApi from '../../client-types';
|
|
2
|
-
|
|
2
|
+
import * as GlobalClientTypes from '../../components/types';
|
|
3
|
+
export declare class WebExperimenationService implements ClientApi.OptimizelyOneService<ClientApi.OptimizelyWebExperimentationApi, 'webex'> {
|
|
4
|
+
private _wxEnabled;
|
|
5
|
+
constructor(enabledServices?: Array<GlobalClientTypes.SupportedProductNames>);
|
|
3
6
|
order: Readonly<number>;
|
|
4
|
-
code: Readonly<
|
|
7
|
+
code: Readonly<'webex'>;
|
|
5
8
|
debug: boolean;
|
|
6
9
|
get isActive(): boolean;
|
|
7
10
|
activatePage(): void;
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export class WebExperimenationService {
|
|
3
|
+
_wxEnabled = true;
|
|
4
|
+
constructor(enabledServices) {
|
|
5
|
+
if (enabledServices)
|
|
6
|
+
this._wxEnabled = enabledServices.includes("dataPlatform");
|
|
7
|
+
}
|
|
3
8
|
order = 100;
|
|
4
|
-
code =
|
|
9
|
+
code = 'webex';
|
|
5
10
|
debug = false;
|
|
6
11
|
get isActive() {
|
|
7
|
-
return this.
|
|
12
|
+
return this._wxEnabled;
|
|
8
13
|
}
|
|
9
14
|
activatePage() {
|
|
15
|
+
if (!this._wxEnabled)
|
|
16
|
+
return;
|
|
10
17
|
const webex = this.getBrowserApi();
|
|
11
18
|
if (!webex)
|
|
12
19
|
return;
|
|
@@ -15,21 +22,26 @@ export class WebExperimenationService {
|
|
|
15
22
|
console.log("🚀 Web Experimentation - Activating pages");
|
|
16
23
|
}
|
|
17
24
|
trackEvent(event) {
|
|
25
|
+
if (!this._wxEnabled)
|
|
26
|
+
return;
|
|
18
27
|
const webex = this.getBrowserApi();
|
|
19
28
|
if (!webex)
|
|
20
29
|
return;
|
|
21
30
|
const eventName = `${event.event}_${event.action}`;
|
|
22
|
-
const eventTags = {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
const eventTags = Object.entries(event).reduce((tags, [prop_name, prop_value]) => {
|
|
32
|
+
if (prop_name.startsWith('tag_')) {
|
|
33
|
+
tags[prop_name.substring(4)] = prop_value;
|
|
34
|
+
}
|
|
35
|
+
return tags;
|
|
36
|
+
}, {});
|
|
27
37
|
if (this.debug)
|
|
28
38
|
console.log("🚀 Web Experimentation - Tracking event:", { type: 'event', eventName, tags: eventTags });
|
|
29
39
|
webex.push({ type: 'event', eventName, tags: eventTags });
|
|
30
40
|
}
|
|
31
41
|
getBrowserApi() {
|
|
32
42
|
try {
|
|
43
|
+
if (!this._wxEnabled)
|
|
44
|
+
return undefined;
|
|
33
45
|
if (!window.optimizely)
|
|
34
46
|
window.optimizely = [];
|
|
35
47
|
return window.optimizely;
|
|
@@ -39,6 +51,8 @@ export class WebExperimenationService {
|
|
|
39
51
|
}
|
|
40
52
|
}
|
|
41
53
|
updateProfile(profileData) {
|
|
54
|
+
if (!this._wxEnabled)
|
|
55
|
+
return;
|
|
42
56
|
const webex = this.getBrowserApi();
|
|
43
57
|
if (!webex)
|
|
44
58
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/web-experimentation/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/web-experimentation/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAKZ,MAAM,OAAO,wBAAwB;IAEzB,UAAU,GAAa,IAAI,CAAA;IACnC,YAAY,eAAgE;QACxE,IAAI,eAAe;YACf,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAClE,CAAC;IAEM,KAAK,GAAsB,GAAG,CAAA;IAC9B,IAAI,GAAuB,OAAO,CAAA;IAClC,KAAK,GAAY,KAAK,CAAA;IAC7B,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,UAAU,CAAA;IAC1B,CAAC;IAEM,YAAY;QAEf,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QAChC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;IAC5E,CAAC;IAEM,UAAU,CAAC,KAAmC;QAEjD,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,MAAM,SAAS,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA;QAClD,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;YAC/E,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;YAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,EAAE,EAA6B,CAAC,CAAA;QACjC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0CAA0C,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;QACtH,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;IAC7D,CAAC;IAEM,aAAa;QAEhB,IAAI,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,SAAS,CAAA;YACtC,IAAI,CAAC,MAAM,CAAC,UAAU;gBAClB,MAAM,CAAC,UAAU,GAAG,EAA0D,CAAA;YAClF,OAAO,MAAM,CAAC,UAAU,CAAA;QAC5B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;IAEM,aAAa,CAAC,WAA+C;QAEhE,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;QAC9H,KAAK,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,WAAW,CAAC,MAAM;SACjC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,eAAe,wBAAwB,CAAA"}
|
|
@@ -4,7 +4,7 @@ import Script from 'next/script';
|
|
|
4
4
|
export const OptimizelyWebExperimentationScript = ({ projectId, allowProjectOverride = false, useProxy = false, apiPrefix = '/api/me' }) => {
|
|
5
5
|
function buildUrl(pid) {
|
|
6
6
|
return useProxy ?
|
|
7
|
-
`${apiPrefix}/exp?pid
|
|
7
|
+
`${apiPrefix}/exp${allowProjectOverride ? '?pid=' + pid : ''}` :
|
|
8
8
|
`https://cdn.optimizely.com/js/${pid}.js`;
|
|
9
9
|
}
|
|
10
10
|
return _jsxs(_Fragment, { children: [_jsx(Script, { id: 'web-experimentation-startup', strategy: 'beforeInteractive', children: `window["optimizely"] = window["optimizely"] || [];` }), allowProjectOverride ?
|
|
@@ -24,7 +24,7 @@ export const OptimizelyWebExperimentationScript = ({ projectId, allowProjectOver
|
|
|
24
24
|
s.parentNode.insertBefore(wx,s);
|
|
25
25
|
})(window,document,localStorage)
|
|
26
26
|
` }) :
|
|
27
|
-
_jsx(Script, { id: 'web-experimentation-project', strategy: 'beforeInteractive', src: buildUrl(projectId) })] });
|
|
27
|
+
_jsx(Script, { id: 'web-experimentation-project', strategy: 'beforeInteractive', src: buildUrl(projectId) }), _jsx("link", { rel: "preconnect", href: "https://logx.optimizely.com/v1/events" })] });
|
|
28
28
|
};
|
|
29
29
|
export default OptimizelyWebExperimentationScript;
|
|
30
30
|
//# sourceMappingURL=snippet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/products/web-experimentation/snippet.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;AAShC,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,SAAS,EAAqC,EAAE,EAAE;IAE1K,SAAS,QAAQ,CAAC,GAAkB;QAEhC,OAAO,QAAQ,CAAC,CAAC;YACb,GAAI,SAAU,
|
|
1
|
+
{"version":3,"file":"snippet.js","sourceRoot":"","sources":["../../../src/products/web-experimentation/snippet.tsx"],"names":[],"mappings":";AAAA,wEAAwE;AACxE,OAAO,MAAM,MAAM,aAAa,CAAA;AAShC,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,SAAS,EAAqC,EAAE,EAAE;IAE1K,SAAS,QAAQ,CAAC,GAAkB;QAEhC,OAAO,QAAQ,CAAC,CAAC;YACb,GAAI,SAAU,OAAQ,oBAAoB,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC,CAAC;YACpE,iCAAkC,GAAI,KAAK,CAAA;IACnD,CAAC;IAED,OAAO,8BACH,KAAC,MAAM,IAAC,EAAE,EAAC,6BAA6B,EAAC,QAAQ,EAAC,mBAAmB,YAAG,oDAAoD,GAAU,EACpI,oBAAoB,CAAC,CAAC;gBACpB,KAAC,MAAM,IAAC,EAAE,EAAC,6BAA6B,EAAC,QAAQ,EAAC,mBAAmB,YAAE;;;;8DAIpB,SAAU;;;;;;cAM1D,QAAQ,CAAC,wBAAwB,CAAE;;;;;aAKrC,GAAU,CAAC,CAAC;gBACb,KAAC,MAAM,IAAC,EAAE,EAAC,6BAA6B,EAAC,QAAQ,EAAC,mBAAmB,EAAC,GAAG,EAAG,QAAQ,CAAC,SAAS,CAAC,GAAK,EAExG,eAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAC,uCAAuC,GAAG,IACvE,CAAA;AACP,CAAC,CAAA;AAED,eAAe,kCAAkC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import getConfig from '
|
|
1
|
+
import getConfig from '../../config.js';
|
|
2
2
|
export const ExperimentationApiService = {
|
|
3
3
|
for: { path: '/exp', verb: 'get' },
|
|
4
4
|
handler: async (query) => {
|
|
@@ -27,4 +27,4 @@ export const ExperimentationApiService = {
|
|
|
27
27
|
},
|
|
28
28
|
};
|
|
29
29
|
export default ExperimentationApiService;
|
|
30
|
-
//# sourceMappingURL=
|
|
30
|
+
//# sourceMappingURL=webservice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webservice.js","sourceRoot":"","sources":["../../../src/products/web-experimentation/webservice.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,iBAAiB,CAAA;AAEvC,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACvD,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE;IAClC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,SAAS,EAAE,CAAA;QAC5H,MAAM,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,SAAS,CAAA;QACpD,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,cAAc,IAAI,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAA;QAE7F,iCAAiC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAA;YAC7E,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,EAAE,EAAC,EAAE,GAAG,CAAC,CAAA;QACzE,CAAC;QAGD,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,iCAAkC,SAAU,KAAK,EAAE;YACnF,0CAA0C;YAC1C,IAAI,EAAE;gBACF,UAAU,EAAE,GAAG,CAAC,kCAAkC;aACrD;SACJ,CAAC,CAAA;QACF,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;YACtB,IAAI,KAAK;gBACL,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;YACjF,OAAO,CAAC,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,EAAC,EAAC,EAAE,eAAe,CAAC,MAAM,CAAE,CAAA;QACrH,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAA;QAEzC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAA;IAC3E,CAAC;CACJ,CAAA;AAED,eAAe,yBAAyB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server-components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server-components/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { OptimizelyOneGadgetProps } from '
|
|
1
|
+
import type { OptimizelyOneGadgetProps } from '../components/optimizely-one-gadget/_types.js';
|
|
2
2
|
import 'server-only';
|
|
3
3
|
export declare const OptimizelyOneGadget: ({ refreshInterval, servicePrefix, show, }: OptimizelyOneGadgetProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
4
4
|
export default OptimizelyOneGadget;
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import getConfig, { checkProductStatus } from '
|
|
2
|
+
import getConfig, { checkProductStatus } from '../config.js';
|
|
3
3
|
import dynamic from 'next/dynamic';
|
|
4
|
-
import { Suspense } from 'react';
|
|
5
4
|
import 'server-only';
|
|
6
|
-
const OptimizelyOneClientGadget = dynamic(() => import('
|
|
5
|
+
const OptimizelyOneClientGadget = dynamic(() => import('../components/optimizely-one-gadget/gadget.js'), { ssr: false, loading: () => null });
|
|
7
6
|
export const OptimizelyOneGadget = ({ refreshInterval = 0, servicePrefix = '/api/me', show, }) => {
|
|
8
7
|
const optiOneConfig = getConfig();
|
|
9
8
|
const { HelperEnabled, OptimizelyDebug } = optiOneConfig;
|
|
10
9
|
const productStatus = checkProductStatus(optiOneConfig);
|
|
11
10
|
if (show || (show === undefined && HelperEnabled)) {
|
|
12
|
-
return (_jsx(
|
|
11
|
+
return (_jsx(OptimizelyOneClientGadget, { refreshInterval: refreshInterval, servicePrefix: servicePrefix, show: show, showContentRecs: productStatus.contentRecsApi, showDataPlatform: productStatus.dataPlatform, showWebEx: productStatus.webExperimentation }));
|
|
13
12
|
}
|
|
14
13
|
if (OptimizelyDebug)
|
|
15
14
|
console.log(`🚀 [OptimizelyOne Gadget] Gadget disabled by ${show === undefined ? 'configuration' : 'parameter'}`);
|
|
16
15
|
return null;
|
|
17
16
|
};
|
|
18
17
|
export default OptimizelyOneGadget;
|
|
19
|
-
//# sourceMappingURL=
|
|
18
|
+
//# sourceMappingURL=optimizely-one-gadget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optimizely-one-gadget.js","sourceRoot":"","sources":["../../src/server-components/optimizely-one-gadget.tsx"],"names":[],"mappings":";AACA,OAAO,SAAS,EAAE,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5D,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,OAAO,aAAa,CAAA;AAEpB,MAAM,yBAAyB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,+CAA+C,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;AAE7I,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAClC,eAAe,GAAG,CAAC,EACnB,aAAa,GAAG,SAAS,EACzB,IAAI,GACqB,EAAE,EAAE;IAC7B,MAAM,aAAa,GAAG,SAAS,EAAE,CAAA;IACjC,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,aAAa,CAAA;IACxD,MAAM,aAAa,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAA;IAEvD,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,aAAa,CAAC,EAAE,CAAC;QAClD,OAAO,CACL,KAAC,yBAAyB,IACxB,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,aAAa,CAAC,cAAc,EAC7C,gBAAgB,EAAE,aAAa,CAAC,YAAY,EAC5C,SAAS,EAAE,aAAa,CAAC,kBAAkB,GAC3C,CACH,CAAA;IACH,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,CAAC,GAAG,CACT,gDAAgD,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,CACrG,CAAA;IACH,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED,eAAe,mBAAmB,CAAA"}
|