@remkoj/optimizely-one-nextjs 1.0.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 (139) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +82 -0
  3. package/dist/api/graph-info-service.d.ts +14 -0
  4. package/dist/api/graph-info-service.js +37 -0
  5. package/dist/api/graph-info-service.js.map +1 -0
  6. package/dist/api/index.d.ts +20 -0
  7. package/dist/api/index.js +42 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/api/profile-api-service.d.ts +21 -0
  10. package/dist/api/profile-api-service.js +80 -0
  11. package/dist/api/profile-api-service.js.map +1 -0
  12. package/dist/api/responses.d.ts +2 -0
  13. package/dist/api/responses.js +2 -0
  14. package/dist/api/responses.js.map +1 -0
  15. package/dist/api/types.d.ts +18 -0
  16. package/dist/api/types.js +2 -0
  17. package/dist/api/types.js.map +1 -0
  18. package/dist/api.d.ts +5 -0
  19. package/dist/api.js +4 -0
  20. package/dist/api.js.map +1 -0
  21. package/dist/client-types.d.ts +133 -0
  22. package/dist/client-types.js +2 -0
  23. package/dist/client-types.js.map +1 -0
  24. package/dist/client.d.ts +3 -0
  25. package/dist/client.js +3 -0
  26. package/dist/client.js.map +1 -0
  27. package/dist/components/context.d.ts +88 -0
  28. package/dist/components/context.js +71 -0
  29. package/dist/components/context.js.map +1 -0
  30. package/dist/components/index.d.ts +4 -0
  31. package/dist/components/index.js +5 -0
  32. package/dist/components/index.js.map +1 -0
  33. package/dist/components/optimizely-one-gadget/audiences-panel.d.ts +7 -0
  34. package/dist/components/optimizely-one-gadget/audiences-panel.js +53 -0
  35. package/dist/components/optimizely-one-gadget/audiences-panel.js.map +1 -0
  36. package/dist/components/optimizely-one-gadget/exp-panel.d.ts +3 -0
  37. package/dist/components/optimizely-one-gadget/exp-panel.js +42 -0
  38. package/dist/components/optimizely-one-gadget/exp-panel.js.map +1 -0
  39. package/dist/components/optimizely-one-gadget/graph-panel.d.ts +7 -0
  40. package/dist/components/optimizely-one-gadget/graph-panel.js +27 -0
  41. package/dist/components/optimizely-one-gadget/graph-panel.js.map +1 -0
  42. package/dist/components/optimizely-one-gadget/ids-panel.d.ts +7 -0
  43. package/dist/components/optimizely-one-gadget/ids-panel.js +23 -0
  44. package/dist/components/optimizely-one-gadget/ids-panel.js.map +1 -0
  45. package/dist/components/optimizely-one-gadget/index.d.ts +33 -0
  46. package/dist/components/optimizely-one-gadget/index.js +39 -0
  47. package/dist/components/optimizely-one-gadget/index.js.map +1 -0
  48. package/dist/components/optimizely-one-gadget/interests-panel.d.ts +7 -0
  49. package/dist/components/optimizely-one-gadget/interests-panel.js +23 -0
  50. package/dist/components/optimizely-one-gadget/interests-panel.js.map +1 -0
  51. package/dist/components/optimizely-one-gadget/logo.d.ts +6 -0
  52. package/dist/components/optimizely-one-gadget/logo.js +19 -0
  53. package/dist/components/optimizely-one-gadget/logo.js.map +1 -0
  54. package/dist/components/page-activator.d.ts +4 -0
  55. package/dist/components/page-activator.js +32 -0
  56. package/dist/components/page-activator.js.map +1 -0
  57. package/dist/components/use-test-mode.d.ts +11 -0
  58. package/dist/components/use-test-mode.js +81 -0
  59. package/dist/components/use-test-mode.js.map +1 -0
  60. package/dist/env-vars.d.ts +13 -0
  61. package/dist/env-vars.js +15 -0
  62. package/dist/env-vars.js.map +1 -0
  63. package/dist/products/client-types.d.ts +3 -0
  64. package/dist/products/client-types.js +2 -0
  65. package/dist/products/client-types.js.map +1 -0
  66. package/dist/products/content-recs/api.d.ts +19 -0
  67. package/dist/products/content-recs/api.js +42 -0
  68. package/dist/products/content-recs/api.js.map +1 -0
  69. package/dist/products/content-recs/client.d.ts +10 -0
  70. package/dist/products/content-recs/client.js +29 -0
  71. package/dist/products/content-recs/client.js.map +1 -0
  72. package/dist/products/content-recs/helpers.d.ts +20 -0
  73. package/dist/products/content-recs/helpers.js +27 -0
  74. package/dist/products/content-recs/helpers.js.map +1 -0
  75. package/dist/products/content-recs/index.d.ts +2 -0
  76. package/dist/products/content-recs/index.js +3 -0
  77. package/dist/products/content-recs/index.js.map +1 -0
  78. package/dist/products/data-platform/api.d.ts +41 -0
  79. package/dist/products/data-platform/api.js +116 -0
  80. package/dist/products/data-platform/api.js.map +1 -0
  81. package/dist/products/data-platform/client.d.ts +14 -0
  82. package/dist/products/data-platform/client.js +59 -0
  83. package/dist/products/data-platform/client.js.map +1 -0
  84. package/dist/products/data-platform/helpers.d.ts +22 -0
  85. package/dist/products/data-platform/helpers.js +31 -0
  86. package/dist/products/data-platform/helpers.js.map +1 -0
  87. package/dist/products/data-platform/index.d.ts +10 -0
  88. package/dist/products/data-platform/index.js +10 -0
  89. package/dist/products/data-platform/index.js.map +1 -0
  90. package/dist/products/index.d.ts +3 -0
  91. package/dist/products/index.js +4 -0
  92. package/dist/products/index.js.map +1 -0
  93. package/dist/products/types.d.ts +2 -0
  94. package/dist/products/types.js +2 -0
  95. package/dist/products/types.js.map +1 -0
  96. package/dist/products/web-experimentation/client.d.ts +11 -0
  97. package/dist/products/web-experimentation/client.js +42 -0
  98. package/dist/products/web-experimentation/client.js.map +1 -0
  99. package/dist/products/web-experimentation/helpers.d.ts +13 -0
  100. package/dist/products/web-experimentation/helpers.js +14 -0
  101. package/dist/products/web-experimentation/helpers.js.map +1 -0
  102. package/dist/products/web-experimentation/index.d.ts +1 -0
  103. package/dist/products/web-experimentation/index.js +2 -0
  104. package/dist/products/web-experimentation/index.js.map +1 -0
  105. package/dist/server-components/index.d.ts +1 -0
  106. package/dist/server-components/index.js +2 -0
  107. package/dist/server-components/index.js.map +1 -0
  108. package/dist/server-components/scripts/footer.d.ts +6 -0
  109. package/dist/server-components/scripts/footer.js +11 -0
  110. package/dist/server-components/scripts/footer.js.map +1 -0
  111. package/dist/server-components/scripts/header.d.ts +6 -0
  112. package/dist/server-components/scripts/header.js +12 -0
  113. package/dist/server-components/scripts/header.js.map +1 -0
  114. package/dist/server-components/scripts/index.d.ts +18 -0
  115. package/dist/server-components/scripts/index.js +19 -0
  116. package/dist/server-components/scripts/index.js.map +1 -0
  117. package/dist/server-components/scripts/snippets/optimizely-content-recs.d.ts +6 -0
  118. package/dist/server-components/scripts/snippets/optimizely-content-recs.js +19 -0
  119. package/dist/server-components/scripts/snippets/optimizely-content-recs.js.map +1 -0
  120. package/dist/server-components/scripts/snippets/optimizely-data-patform.d.ts +5 -0
  121. package/dist/server-components/scripts/snippets/optimizely-data-patform.js +37 -0
  122. package/dist/server-components/scripts/snippets/optimizely-data-patform.js.map +1 -0
  123. package/dist/server-components/scripts/snippets/optimizely-web-experimentation.d.ts +5 -0
  124. package/dist/server-components/scripts/snippets/optimizely-web-experimentation.js +9 -0
  125. package/dist/server-components/scripts/snippets/optimizely-web-experimentation.js.map +1 -0
  126. package/dist/server.d.ts +6 -0
  127. package/dist/server.js +11 -0
  128. package/dist/server.js.map +1 -0
  129. package/dist/styles.css +1 -0
  130. package/dist/types.d.ts +2 -0
  131. package/dist/types.js +2 -0
  132. package/dist/types.js.map +1 -0
  133. package/dist/utils/env.d.ts +11 -0
  134. package/dist/utils/env.js +49 -0
  135. package/dist/utils/env.js.map +1 -0
  136. package/dist/utils/session.d.ts +11 -0
  137. package/dist/utils/session.js +28 -0
  138. package/dist/utils/session.js.map +1 -0
  139. package/package.json +78 -0
@@ -0,0 +1,81 @@
1
+ 'use client';
2
+ import { useState, useEffect, useMemo } from "react";
3
+ /**
4
+ * React hook to determine if the Optimizely Web "test cookie" from the
5
+ * Optimizely Web Google Chrome add-on has been set. This can be used to
6
+ * trigger features based upon the adding/removing of this cookie.
7
+ *
8
+ * @param pollingInterval The frequency with which to check for
9
+ * changes.
10
+ * @returns true if the cookie exists; false otherwise
11
+ */
12
+ export function useIsInTestMode(pollingInterval = 500) {
13
+ // Keep track of state
14
+ const [hasTestCookie, setHasTestCookie] = useState(false);
15
+ // Get the current host and calculate the derived values, using memoized
16
+ // values so they only recalculate when needed
17
+ const host = tryInvoke(() => window.location.hostname);
18
+ const isDevHost = useMemo(() => (host && host.startsWith('localhost') && process.env.NODE_ENV == 'development') ? true : false, [host]);
19
+ const cookieName = useMemo(() => getCookieName(host), [host]);
20
+ // Start the polling process to discover the cookie
21
+ useEffect(() => {
22
+ function updateCookieStatus() {
23
+ if (isDevHost) {
24
+ setHasTestCookie(true);
25
+ return;
26
+ }
27
+ const cookie = tryInvoke(() => document.cookie);
28
+ if (cookie) {
29
+ const cookieValue = cookie.match(`(?:^|;)\\s*${cookieName}=\\s*([^;]+)\\s*(?:;|$)`)?.pop();
30
+ const testModeStatus = cookieValue == 'true';
31
+ setHasTestCookie(testModeStatus);
32
+ }
33
+ else {
34
+ setHasTestCookie(false);
35
+ }
36
+ }
37
+ updateCookieStatus();
38
+ const intervalId = setInterval(() => updateCookieStatus(), pollingInterval);
39
+ return () => {
40
+ clearInterval(intervalId);
41
+ };
42
+ }, [cookieName, pollingInterval, isDevHost]);
43
+ return hasTestCookie;
44
+ }
45
+ function getCookieName(host) {
46
+ if (!host)
47
+ return 'optly_test';
48
+ const reservedDomains = ['vercel'];
49
+ try {
50
+ var hostParts = host.split('.');
51
+ if (hostParts.length > 1) {
52
+ hostParts = hostParts.slice(0, -1);
53
+ if (hostParts.length > 1) {
54
+ var domain = hostParts.pop();
55
+ if (!reservedDomains.includes(domain)) {
56
+ hostParts = [domain];
57
+ }
58
+ }
59
+ }
60
+ return `optly_${hostParts.join('.')}_test`;
61
+ }
62
+ catch {
63
+ return undefined;
64
+ }
65
+ }
66
+ /**
67
+ * Invoke a function and return it's value, return undefined if an error did occur within the function
68
+ *
69
+ * @param fn The function to execute
70
+ * @returns The return value of the function, or undefined in an error occurred
71
+ */
72
+ function tryInvoke(fn) {
73
+ try {
74
+ return fn();
75
+ }
76
+ catch {
77
+ return undefined;
78
+ }
79
+ }
80
+ export default useIsInTestMode;
81
+ //# sourceMappingURL=use-test-mode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-test-mode.js","sourceRoot":"","sources":["../../src/components/use-test-mode.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare const enum EnvVars {
2
+ OdpApiKey = "OPTIMIZELY_DATAPLATFORM_ID",
3
+ OdpService = "OPTIMIZLEY_DATAPLATFORM_ENDPOINT",
4
+ OdpAudienceBatchSize = "OPTIMIZELY_DATAPLATFORM_BATCH_SIZE",
5
+ HelperEnabled = "OPTIMIZELY_ONE_HELPER",
6
+ ContentRecsClient = "OPTIMIZELY_CONTENTRECS_CLIENT",
7
+ ContentRecsDelivery = "OPTIMIZELY_CONTENTRECS_DELIVERY",
8
+ ContentRecsDeliveryKey = "OPTIMIZELY_CONTENTRECS_DELIVERY_KEY",
9
+ ContentRecsHost = "OPTIMIZELY_CONTENTRECS_API",
10
+ FrontendCookie = "OPTIMIZELY_FRONTEND_COOKIE",
11
+ WebExperimentationProject = "OPTIMIZELY_WEB_EXPERIMENTATION_PROJECT"
12
+ }
13
+ export default EnvVars;
@@ -0,0 +1,15 @@
1
+ export var EnvVars;
2
+ (function (EnvVars) {
3
+ EnvVars["OdpApiKey"] = "OPTIMIZELY_DATAPLATFORM_ID";
4
+ EnvVars["OdpService"] = "OPTIMIZLEY_DATAPLATFORM_ENDPOINT";
5
+ EnvVars["OdpAudienceBatchSize"] = "OPTIMIZELY_DATAPLATFORM_BATCH_SIZE";
6
+ EnvVars["HelperEnabled"] = "OPTIMIZELY_ONE_HELPER";
7
+ EnvVars["ContentRecsClient"] = "OPTIMIZELY_CONTENTRECS_CLIENT";
8
+ EnvVars["ContentRecsDelivery"] = "OPTIMIZELY_CONTENTRECS_DELIVERY";
9
+ EnvVars["ContentRecsDeliveryKey"] = "OPTIMIZELY_CONTENTRECS_DELIVERY_KEY";
10
+ EnvVars["ContentRecsHost"] = "OPTIMIZELY_CONTENTRECS_API";
11
+ EnvVars["FrontendCookie"] = "OPTIMIZELY_FRONTEND_COOKIE";
12
+ EnvVars["WebExperimentationProject"] = "OPTIMIZELY_WEB_EXPERIMENTATION_PROJECT";
13
+ })(EnvVars || (EnvVars = {}));
14
+ export default EnvVars;
15
+ //# sourceMappingURL=env-vars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-vars.js","sourceRoot":"","sources":["../src/env-vars.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAkB,OAWjB;AAXD,WAAkB,OAAO;IACrB,mDAAwC,CAAA;IACxC,0DAA+C,CAAA;IAC/C,sEAA2D,CAAA;IAC3D,kDAAuC,CAAA;IACvC,8DAAmD,CAAA;IACnD,kEAAuD,CAAA;IACvD,yEAA8D,CAAA;IAC9D,yDAA8C,CAAA;IAC9C,wDAA6C,CAAA;IAC7C,+EAAoE,CAAA;AACxE,CAAC,EAXiB,OAAO,KAAP,OAAO,QAWxB;AACD,eAAe,OAAO,CAAA"}
@@ -0,0 +1,3 @@
1
+ export type { ContentRecsService } from './content-recs/client';
2
+ export type { DataPlatformService } from './data-platform/client';
3
+ export type { WebExperimenationService } from './web-experimentation/client';
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-types.js","sourceRoot":"","sources":["../../src/products/client-types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ export type ContentRecsOptions = {
2
+ clientId: string;
3
+ deliveryId: number;
4
+ deliveryKey: string;
5
+ host: string;
6
+ };
7
+ export declare class ContentRecsClient {
8
+ private readonly _config;
9
+ protected get defaultConfig(): ContentRecsOptions;
10
+ get client(): string;
11
+ get delivery(): number;
12
+ constructor(options?: Partial<ContentRecsOptions>);
13
+ getContentTopics(visitorId: string): Promise<string[]>;
14
+ }
15
+ export declare class ContentRecsError extends Error {
16
+ readonly deliveryId: number | undefined;
17
+ readonly clientId: string | undefined;
18
+ constructor(message?: string, clientId?: string, deliveryId?: number, options?: ErrorOptions);
19
+ }
@@ -0,0 +1,42 @@
1
+ import * as EnvTools from '../../utils/env';
2
+ import EnvVars from '../../env-vars';
3
+ export class ContentRecsClient {
4
+ _config;
5
+ get defaultConfig() {
6
+ return {
7
+ clientId: EnvTools.readValue(EnvVars.ContentRecsClient, ''),
8
+ deliveryId: EnvTools.readValueAsInt(EnvVars.ContentRecsDelivery, 0),
9
+ deliveryKey: EnvTools.readValue(EnvVars.ContentRecsDeliveryKey, ''),
10
+ host: EnvTools.readValue(EnvVars.ContentRecsHost, 'https://api.idio.co')
11
+ };
12
+ }
13
+ get client() {
14
+ return this._config.clientId;
15
+ }
16
+ get delivery() {
17
+ return this._config.deliveryId;
18
+ }
19
+ constructor(options) {
20
+ this._config = { ...this.defaultConfig, ...options };
21
+ if (this._config.clientId == '' || this._config.deliveryId == 0 || this._config.deliveryKey == '')
22
+ throw new ContentRecsError("Invalid ContentRecs configuration", this._config.clientId, this._config.deliveryId);
23
+ }
24
+ async getContentTopics(visitorId) {
25
+ if (!visitorId || visitorId == "")
26
+ return [];
27
+ const profileUrl = new URL(`/1.0/users/idio_visitor_id:${visitorId}/topics`, this._config.host);
28
+ profileUrl.searchParams.set('key', this._config.deliveryKey);
29
+ const topics = await fetch(profileUrl).then(r => r.json()).catch(() => undefined);
30
+ return (topics?.topic ?? []).map(x => x.title);
31
+ }
32
+ }
33
+ export class ContentRecsError extends Error {
34
+ deliveryId;
35
+ clientId;
36
+ constructor(message, clientId, deliveryId, options) {
37
+ super(message, options);
38
+ this.deliveryId = deliveryId;
39
+ this.clientId = clientId;
40
+ }
41
+ }
42
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/products/content-recs/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,OAAO,MAAM,gBAAgB,CAAA;AASpC,MAAM,OAAO,iBAAiB;IAET,OAAO,CAA+B;IAEvD,IAAc,aAAa;QAEvB,OAAO;YACH,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;YAC3D,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;YACnE,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;YACnE,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC3E,CAAA;IACL,CAAC;IAED,IAAW,MAAM;QAEb,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;IAChC,CAAC;IAED,IAAW,QAAQ;QAEf,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;IAClC,CAAC;IAED,YAAmB,OAAqC;QAEpD,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,OAAO,EAAE,CAAA;QACpD,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE;YAC7F,MAAM,IAAI,gBAAgB,CAAC,mCAAmC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACvH,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAE3C,IAAI,CAAC,SAAS,IAAI,SAAS,IAAI,EAAE;YAC7B,OAAO,EAAE,CAAA;QAEb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,8BAA+B,SAAU,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACjG,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;QAC5D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QACjF,OAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC3E,CAAC;CACJ;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAEvB,UAAU,CAAoB;IAC9B,QAAQ,CAAoB;IAE5C,YAAoB,OAAgB,EAAE,QAAiB,EAAE,UAAmB,EAAE,OAAsB;QAEhG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC5B,CAAC;CACJ"}
@@ -0,0 +1,10 @@
1
+ import * as ClientApi from '../../client-types';
2
+ export declare class ContentRecsService implements ClientApi.OptimizelyOneService<ClientApi.OptimizelyContentRecsApi> {
3
+ order: Readonly<number>;
4
+ code: Readonly<string>;
5
+ debug: boolean;
6
+ get isActive(): boolean;
7
+ trackPage(): void;
8
+ getBrowserApi(): ClientApi.OptimizelyContentRecsApi | undefined;
9
+ }
10
+ export default ContentRecsService;
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+ export class ContentRecsService {
3
+ order = 300;
4
+ code = "crecs";
5
+ debug = false;
6
+ get isActive() {
7
+ return this.getBrowserApi() != undefined;
8
+ }
9
+ trackPage() {
10
+ const idio = this.getBrowserApi();
11
+ if (!idio)
12
+ return;
13
+ if (this.debug)
14
+ console.log("Content Recommendations / Analytics - Tracking page view");
15
+ idio.push(['track', 'consume']);
16
+ }
17
+ getBrowserApi() {
18
+ try {
19
+ if (!window._iaq)
20
+ window._iaq = [];
21
+ return window._iaq;
22
+ }
23
+ catch {
24
+ return undefined;
25
+ }
26
+ }
27
+ }
28
+ export default ContentRecsService;
29
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/content-recs/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAIZ,MAAM,OAAO,kBAAkB;IAEpB,KAAK,GAAsB,GAAG,CAAA;IAC9B,IAAI,GAAsB,OAAO,CAAA;IACjC,KAAK,GAAY,KAAK,CAAA;IAC7B,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS,CAAA;IAC5C,CAAC;IAEM,SAAS;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QACjC,IAAI,CAAC,IAAI;YAAE,OAAM;QACjB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAA;QACvF,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;IACnC,CAAC;IAEM,aAAa;QAEhB,IAAI,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI;gBACZ,MAAM,CAAC,IAAI,GAAG,EAAqB,CAAA;YACvC,OAAO,MAAM,CAAC,IAAI,CAAA;QACtB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,CAAC;CACJ;AAED,eAAe,kBAAkB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { ReadonlyRequestCookies } from '../types';
2
+ /**
3
+ * Parse the request cookies to understand the visitor identifier
4
+ * from the Optimizely Data Platform.
5
+ *
6
+ * @param cookies The request cookies
7
+ * @returns The identifier, or undefined if not known
8
+ */
9
+ export declare function getVisitorID(cookies: ReadonlyRequestCookies): string | undefined;
10
+ /**
11
+ * Server side check if the Content Recs integration has been configured
12
+ *
13
+ * @returns True if the integration has been configured, false otherwise
14
+ */
15
+ export declare function isEnabled(): boolean;
16
+ declare const _default: {
17
+ getVisitorID: typeof getVisitorID;
18
+ isEnabled: typeof isEnabled;
19
+ };
20
+ export default _default;
@@ -0,0 +1,27 @@
1
+ import * as EnvTools from '../../utils/env';
2
+ import EnvVars from '../../env-vars';
3
+ /**
4
+ * Parse the request cookies to understand the visitor identifier
5
+ * from the Optimizely Data Platform.
6
+ *
7
+ * @param cookies The request cookies
8
+ * @returns The identifier, or undefined if not known
9
+ */
10
+ export function getVisitorID(cookies) {
11
+ return cookies.get('iv')?.value;
12
+ }
13
+ /**
14
+ * Server side check if the Content Recs integration has been configured
15
+ *
16
+ * @returns True if the integration has been configured, false otherwise
17
+ */
18
+ export function isEnabled() {
19
+ const clientId = EnvTools.readValue(EnvVars.ContentRecsClient, "");
20
+ const deliveryId = EnvTools.readValue(EnvVars.ContentRecsDelivery, "");
21
+ return clientId != "" && deliveryId != "";
22
+ }
23
+ export default {
24
+ getVisitorID,
25
+ isEnabled
26
+ };
27
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/products/content-recs/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,OAAO,MAAM,gBAAgB,CAAA;AAEpC;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAA+B;IAExD,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAA;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS;IAErB,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAA;IAClE,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAA;IACtE,OAAO,QAAQ,IAAI,EAAE,IAAI,UAAU,IAAI,EAAE,CAAA;AAC7C,CAAC;AAED,eAAe;IACX,YAAY;IACZ,SAAS;CACZ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { ContentRecsClient as Client, type ContentRecsError } from './api';
2
+ export * as Tools from './helpers';
@@ -0,0 +1,3 @@
1
+ export { ContentRecsClient as Client } from './api';
2
+ export * as Tools from './helpers';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/products/content-recs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,MAAM,EAAyB,MAAM,OAAO,CAAA;AAC1E,OAAO,KAAK,KAAK,MAAM,WAAW,CAAA"}
@@ -0,0 +1,41 @@
1
+ export type DataPlatformClientOptions = {
2
+ privateApiKey: string;
3
+ endpoint: string;
4
+ membershipTestChunkSize: number;
5
+ };
6
+ export type DataPlatformAudienceList = {
7
+ id: string;
8
+ name: string;
9
+ }[];
10
+ /**
11
+ * A high level client for the Optimizely Data Platform, providing direct
12
+ * access to some of it's functionality. For advanced capabilities please
13
+ * connect directly to the GraphQL endpoint.
14
+ */
15
+ export declare class DataPlatformClient {
16
+ protected readonly config: Readonly<DataPlatformClientOptions>;
17
+ private readonly _privateKey;
18
+ private readonly _publicKey;
19
+ protected get privateKey(): string;
20
+ get trackerId(): string;
21
+ constructor(options?: Partial<DataPlatformClientOptions>);
22
+ /**
23
+ * Retrieve a list of all audiences available within the ODP Instance
24
+ *
25
+ * @param throwOnError Set to true when an error needs to be
26
+ * thrown on an network error (instead of
27
+ * returning an empty list)
28
+ * @returns The list of all audiences
29
+ */
30
+ getAllAudiences(throwOnError?: boolean): Promise<DataPlatformAudienceList>;
31
+ filterAudiences(vuid: string, audiences: string[]): Promise<string[]>;
32
+ getLastSearchTerms(vuid: string): Promise<string[]>;
33
+ protected privateQuery(graphQuery: string, variables?: Record<string, any>): Promise<Response>;
34
+ query(graphQuery: string, variables?: Record<string, any>): Promise<Response>;
35
+ }
36
+ export declare class DataPlatformError extends Error {
37
+ private _trackerId?;
38
+ get trackerId(): string;
39
+ constructor(message?: string, trackerId?: string, options?: ErrorOptions);
40
+ }
41
+ export default DataPlatformClient;
@@ -0,0 +1,116 @@
1
+ import * as EnvTools from '../../utils/env';
2
+ import * as Helpers from './helpers';
3
+ import EnvVars from '../../env-vars';
4
+ /**
5
+ * A high level client for the Optimizely Data Platform, providing direct
6
+ * access to some of it's functionality. For advanced capabilities please
7
+ * connect directly to the GraphQL endpoint.
8
+ */
9
+ export class DataPlatformClient {
10
+ config;
11
+ _privateKey;
12
+ _publicKey;
13
+ get privateKey() {
14
+ return this._privateKey || "";
15
+ }
16
+ get trackerId() {
17
+ return this._publicKey;
18
+ }
19
+ constructor(options) {
20
+ const defaults = {
21
+ endpoint: EnvTools.readValue(EnvVars.OdpService, "https://api.zaius.com/"),
22
+ privateApiKey: EnvTools.readValue(EnvVars.OdpApiKey, ""),
23
+ membershipTestChunkSize: 25
24
+ };
25
+ this.config = { ...defaults, ...options };
26
+ [this._publicKey, this._privateKey] = Helpers.parseApiKey(this.config.privateApiKey);
27
+ if (!this._publicKey)
28
+ throw new DataPlatformError("The Optimizely Data Platform configuration doesn't contain a tracker id", this.trackerId);
29
+ if (!this._privateKey)
30
+ throw new DataPlatformError("The Optimizely Data Platform configuration doesn't contain private key information", this.trackerId);
31
+ }
32
+ /**
33
+ * Retrieve a list of all audiences available within the ODP Instance
34
+ *
35
+ * @param throwOnError Set to true when an error needs to be
36
+ * thrown on an network error (instead of
37
+ * returning an empty list)
38
+ * @returns The list of all audiences
39
+ */
40
+ async getAllAudiences(throwOnError = false) {
41
+ const listAudiencesQuery = 'query GetAllAudiences { audiences { edges { node { name, description } } } }';
42
+ const listResponse = await this.privateQuery(listAudiencesQuery);
43
+ if (!listResponse.ok) {
44
+ if (throwOnError)
45
+ throw new DataPlatformError("Error listing all audiences within ODP", this.trackerId);
46
+ console.error("Error listing all audiences within ODP");
47
+ return [];
48
+ }
49
+ const listData = (await listResponse.json());
50
+ return (listData?.data?.audiences?.edges?.map(e => { return { id: e.node.name, name: e.node.description }; }) ?? []);
51
+ }
52
+ async filterAudiences(vuid, audiences) {
53
+ const query = 'query GetMyAudiences($vuid: String!, $audiences: [String!]!) { customer(vuid: $vuid) { audiences(subset: $audiences) { edges { node { name } } } } }';
54
+ const variables = {
55
+ vuid,
56
+ audiences
57
+ };
58
+ const response = await this.privateQuery(query, variables);
59
+ if (response.ok)
60
+ return response.json()
61
+ .then(ds => (ds?.data?.customer?.audiences?.edges ?? []).map(e => e.node.name));
62
+ throw new DataPlatformError(`Error response from Optimizely Data Platform: ${response.status}: ${response.statusText}`, this.trackerId);
63
+ }
64
+ async getLastSearchTerms(vuid) {
65
+ const query = `query LastSearchTerms ($vuid:String!) {
66
+ events(vuid: $vuid, filter: "event_type='navigation'", order: {field: ts, direction: DESC}) {
67
+ edges {
68
+ node {
69
+ search_term
70
+ }
71
+ }
72
+ }
73
+ }`;
74
+ const variables = { vuid };
75
+ const responseData = await (await this.privateQuery(query, variables)).json();
76
+ if (responseData.errors) {
77
+ console.error("Error while fetching latest search terms, please check your keys");
78
+ console.error(responseData.errors.map((e) => e.message).join('; '));
79
+ return [];
80
+ }
81
+ const terms = (responseData.data?.events?.edges?.map((e) => e.node.search_term) ?? []);
82
+ return terms;
83
+ }
84
+ async privateQuery(graphQuery, variables) {
85
+ return fetch(new URL('/v3/graphql', this.config.endpoint), {
86
+ method: "POST",
87
+ body: JSON.stringify({ query: graphQuery, variables }),
88
+ headers: {
89
+ "content-type": "application/json",
90
+ "x-api-key": this.privateKey
91
+ }
92
+ });
93
+ }
94
+ async query(graphQuery, variables) {
95
+ return fetch(new URL('/v3/graphql', this.config.endpoint), {
96
+ method: "POST",
97
+ body: JSON.stringify({ query: graphQuery, variables }),
98
+ headers: {
99
+ "content-type": "application/json",
100
+ "x-api-key": this.trackerId
101
+ }
102
+ });
103
+ }
104
+ }
105
+ export class DataPlatformError extends Error {
106
+ _trackerId;
107
+ get trackerId() {
108
+ return this._trackerId ?? '';
109
+ }
110
+ constructor(message, trackerId, options) {
111
+ super(message, options);
112
+ this._trackerId = trackerId;
113
+ }
114
+ }
115
+ export default DataPlatformClient;
116
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/products/data-platform/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import * as ClientApi from '../../client-types';
2
+ export declare class DataPlatformService implements ClientApi.OptimizelyOneService<ClientApi.OptimizelyDataPlatformApi> {
3
+ order: Readonly<number>;
4
+ code: Readonly<string>;
5
+ debug: boolean;
6
+ get isActive(): boolean;
7
+ trackPage(): void;
8
+ trackEvent(event: ClientApi.OptimizelyOneEvent): void;
9
+ getBrowserApi(): ClientApi.OptimizelyDataPlatformApi | undefined;
10
+ private lastTrackedContentIntelligenceId;
11
+ private get contentIntelligenceId();
12
+ private _contentIntelligenceId;
13
+ }
14
+ export default DataPlatformService;
@@ -0,0 +1,59 @@
1
+ 'use client';
2
+ export class DataPlatformService {
3
+ order = 200;
4
+ code = "odp";
5
+ debug = false;
6
+ get isActive() {
7
+ return this.getBrowserApi() != undefined;
8
+ }
9
+ trackPage() {
10
+ const zaius = this.getBrowserApi();
11
+ if (!zaius)
12
+ return;
13
+ if (this.debug)
14
+ console.log("Data platform - Tracking page view");
15
+ zaius.event('pageview');
16
+ if (this.lastTrackedContentIntelligenceId != this.contentIntelligenceId && this.contentIntelligenceId != '') {
17
+ if (this.debug)
18
+ console.log(`Data platform - Updating Content Intelligence ID to ${this.contentIntelligenceId}`);
19
+ zaius.customer({ content_intelligence_id: this.contentIntelligenceId });
20
+ this.lastTrackedContentIntelligenceId = this.contentIntelligenceId;
21
+ }
22
+ }
23
+ trackEvent(event) {
24
+ const zaius = this.getBrowserApi();
25
+ if (!zaius)
26
+ return;
27
+ const event_name = event.event;
28
+ const event_data = {};
29
+ for (const prop_name of Object.getOwnPropertyNames(event)) {
30
+ if (prop_name != 'event')
31
+ event_data[prop_name] = event[prop_name];
32
+ }
33
+ console.log("Data platform - Tracking event:", event_name, event_data);
34
+ zaius.event(event_name, event_data);
35
+ }
36
+ getBrowserApi() {
37
+ try {
38
+ return window.zaius;
39
+ }
40
+ catch {
41
+ return undefined;
42
+ }
43
+ }
44
+ lastTrackedContentIntelligenceId = undefined;
45
+ get contentIntelligenceId() {
46
+ if (!this._contentIntelligenceId || this._contentIntelligenceId == '') {
47
+ try {
48
+ this._contentIntelligenceId = document.cookie.match('(^|;)\\s*iv\\s*=\\s*([^;]+)')?.pop() || '';
49
+ }
50
+ catch {
51
+ this._contentIntelligenceId = '';
52
+ }
53
+ }
54
+ return this._contentIntelligenceId;
55
+ }
56
+ _contentIntelligenceId = undefined;
57
+ }
58
+ export default DataPlatformService;
59
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/products/data-platform/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAIZ,MAAM,OAAO,mBAAmB;IAErB,KAAK,GAAsB,GAAG,CAAA;IAC9B,IAAI,GAAsB,KAAK,CAAA;IAC/B,KAAK,GAAY,KAAK,CAAA;IAC7B,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,aAAa,EAAE,IAAI,SAAS,CAAA;IAC5C,CAAC;IAEM,SAAS;QAEZ,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAClC,IAAI,CAAC,KAAK;YAAE,OAAM;QAClB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAA;QACjE,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,uDAAwD,IAAI,CAAC,qBAAsB,EAAE,CAAC,CAAA;YAClH,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,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,GAAyB,EAAE,CAAA;QAC3C,KAAK,MAAM,SAAS,IAAK,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAA4C,EAAE,CAAC;YACpG,IAAI,SAAS,IAAI,OAAO;gBAAE,UAAU,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;QACtE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QACtE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;IACvC,CAAC;IAEM,aAAa;QAEhB,IAAI,CAAC;YACD,OAAO,MAAM,CAAC,KAAK,CAAA;QACvB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAA;QACpB,CAAC;IACL,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"}
@@ -0,0 +1,22 @@
1
+ import type { ReadonlyRequestCookies } from '../types';
2
+ /**
3
+ * Process the provided API key
4
+ *
5
+ * @param configuredKey The currently configured key
6
+ * @returns Analyze the provided key and return the public key and private key from it
7
+ */
8
+ export declare function parseApiKey(configuredKey: string): [string, string | null];
9
+ /**
10
+ * Parse the request cookies to understand the visitor identifier
11
+ * from the Optimizely Data Platform.
12
+ *
13
+ * @param cookies The request cookies
14
+ * @returns The identifier, or undefined if not known
15
+ */
16
+ export declare function getVisitorID(cookies: ReadonlyRequestCookies): string | undefined;
17
+ export declare function isEnabled(): boolean;
18
+ declare const _default: {
19
+ getVisitorID: typeof getVisitorID;
20
+ parseApiKey: typeof parseApiKey;
21
+ };
22
+ export default _default;
@@ -0,0 +1,31 @@
1
+ import EnvTools from '../../utils/env';
2
+ import EnvVars from '../../env-vars';
3
+ /**
4
+ * Process the provided API key
5
+ *
6
+ * @param configuredKey The currently configured key
7
+ * @returns Analyze the provided key and return the public key and private key from it
8
+ */
9
+ export function parseApiKey(configuredKey) {
10
+ const [publicKey, privateKey] = configuredKey.split(".", 2);
11
+ return [publicKey, privateKey ? configuredKey : null];
12
+ }
13
+ /**
14
+ * Parse the request cookies to understand the visitor identifier
15
+ * from the Optimizely Data Platform.
16
+ *
17
+ * @param cookies The request cookies
18
+ * @returns The identifier, or undefined if not known
19
+ */
20
+ export function getVisitorID(cookies) {
21
+ return cookies.get('vuid')?.value?.split("|")?.shift()?.replaceAll('-', '');
22
+ }
23
+ export function isEnabled() {
24
+ const apiKey = EnvTools.readValue(EnvVars.OdpApiKey, "");
25
+ return apiKey.length > 8;
26
+ }
27
+ export default {
28
+ getVisitorID,
29
+ parseApiKey
30
+ };
31
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/products/data-platform/helpers.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,iBAAiB,CAAA;AACtC,OAAO,OAAO,MAAM,gBAAgB,CAAA;AAEpC;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,aAAqB;IAE7C,MAAM,CAAE,SAAS,EAAE,UAAU,CAAE,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAE,CAAA;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,OAA+B;IAExD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,CAAC,GAAG,EAAC,EAAE,CAAC,CAAA;AAC9E,CAAC;AAED,MAAM,UAAU,SAAS;IAErB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAA;IACxD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,eAAe;IACX,YAAY;IACZ,WAAW;CACd,CAAA"}
@@ -0,0 +1,10 @@
1
+ export { DataPlatformClient as Client, type DataPlatformError } from './api';
2
+ export * as Tools from './helpers';
3
+ import { DataPlatformClient as Client, DataPlatformError } from './api';
4
+ import * as Tools from './helpers';
5
+ declare const _default: {
6
+ Client: typeof Client;
7
+ Tools: typeof Tools;
8
+ DataPlatformError: typeof DataPlatformError;
9
+ };
10
+ export default _default;