@pexip-engage-public/plugin 1.0.0-canary-20231031112431

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 (173) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/configuration/PluginConfiguration.current.d.ts +52 -0
  3. package/dist/configuration/PluginConfiguration.current.d.ts.map +1 -0
  4. package/dist/configuration/PluginConfiguration.current.js +1 -0
  5. package/dist/configuration/PluginConfiguration.schema.d.ts +489 -0
  6. package/dist/configuration/PluginConfiguration.schema.d.ts.map +1 -0
  7. package/dist/configuration/PluginConfiguration.schema.js +121 -0
  8. package/dist/configuration/PluginConfiguration.v0.d.ts +51 -0
  9. package/dist/configuration/PluginConfiguration.v0.d.ts.map +1 -0
  10. package/dist/configuration/PluginConfiguration.v0.js +1 -0
  11. package/dist/configuration/PluginConfiguration.v1.d.ts +51 -0
  12. package/dist/configuration/PluginConfiguration.v1.d.ts.map +1 -0
  13. package/dist/configuration/PluginConfiguration.v1.js +1 -0
  14. package/dist/configuration/index.d.ts +2 -0
  15. package/dist/configuration/index.d.ts.map +1 -0
  16. package/dist/configuration/index.js +1 -0
  17. package/dist/configuration/migration.d.ts +6 -0
  18. package/dist/configuration/migration.d.ts.map +1 -0
  19. package/dist/configuration/migration.js +84 -0
  20. package/dist/configuration-parser/LegacyParser.d.ts +196 -0
  21. package/dist/configuration-parser/LegacyParser.d.ts.map +1 -0
  22. package/dist/configuration-parser/LegacyParser.js +165 -0
  23. package/dist/configuration-parser/LegacyParser.utils.d.ts +88 -0
  24. package/dist/configuration-parser/LegacyParser.utils.d.ts.map +1 -0
  25. package/dist/configuration-parser/LegacyParser.utils.js +255 -0
  26. package/dist/configuration-parser/ModernParser.d.ts +99 -0
  27. package/dist/configuration-parser/ModernParser.d.ts.map +1 -0
  28. package/dist/configuration-parser/ModernParser.js +48 -0
  29. package/dist/configuration-parser/ModernParser.utils.d.ts +6 -0
  30. package/dist/configuration-parser/ModernParser.utils.d.ts.map +1 -0
  31. package/dist/configuration-parser/ModernParser.utils.js +28 -0
  32. package/dist/configuration-parser/Parser.d.ts +28 -0
  33. package/dist/configuration-parser/Parser.d.ts.map +1 -0
  34. package/dist/configuration-parser/Parser.js +33 -0
  35. package/dist/configuration-parser/hash-parser.d.ts +7 -0
  36. package/dist/configuration-parser/hash-parser.d.ts.map +1 -0
  37. package/dist/configuration-parser/hash-parser.js +13 -0
  38. package/dist/configuration-parser/html-parser.d.ts +13 -0
  39. package/dist/configuration-parser/html-parser.d.ts.map +1 -0
  40. package/dist/configuration-parser/html-parser.js +23 -0
  41. package/dist/configuration-parser/index.d.ts +48 -0
  42. package/dist/configuration-parser/index.d.ts.map +1 -0
  43. package/dist/configuration-parser/index.js +86 -0
  44. package/dist/configuration-parser/js-parser.d.ts +84 -0
  45. package/dist/configuration-parser/js-parser.d.ts.map +1 -0
  46. package/dist/configuration-parser/js-parser.js +56 -0
  47. package/dist/configuration-parser/tests/LegacyDomParser.test.d.ts +2 -0
  48. package/dist/configuration-parser/tests/LegacyDomParser.test.d.ts.map +1 -0
  49. package/dist/configuration-parser/tests/LegacyDomParser.test.js +151 -0
  50. package/dist/configuration-parser/tests/LegacyLocationHashParser.test.d.ts +2 -0
  51. package/dist/configuration-parser/tests/LegacyLocationHashParser.test.d.ts.map +1 -0
  52. package/dist/configuration-parser/tests/LegacyLocationHashParser.test.js +86 -0
  53. package/dist/configuration-parser/tests/LegacyParser.test.d.ts +2 -0
  54. package/dist/configuration-parser/tests/LegacyParser.test.d.ts.map +1 -0
  55. package/dist/configuration-parser/tests/LegacyParser.test.js +104 -0
  56. package/dist/configuration-parser/tests/test-utils.d.ts +4 -0
  57. package/dist/configuration-parser/tests/test-utils.d.ts.map +1 -0
  58. package/dist/configuration-parser/tests/test-utils.js +10 -0
  59. package/dist/configuration-parser/utils.d.ts +18 -0
  60. package/dist/configuration-parser/utils.d.ts.map +1 -0
  61. package/dist/configuration-parser/utils.js +44 -0
  62. package/dist/configuration-parser-legacy/LegacyParser.d.ts +196 -0
  63. package/dist/configuration-parser-legacy/LegacyParser.d.ts.map +1 -0
  64. package/dist/configuration-parser-legacy/LegacyParser.js +162 -0
  65. package/dist/configuration-parser-legacy/LegacyParser.utils.d.ts +8 -0
  66. package/dist/configuration-parser-legacy/LegacyParser.utils.d.ts.map +1 -0
  67. package/dist/configuration-parser-legacy/LegacyParser.utils.js +88 -0
  68. package/dist/configuration-parser-legacy/ModernParser.d.ts +97 -0
  69. package/dist/configuration-parser-legacy/ModernParser.d.ts.map +1 -0
  70. package/dist/configuration-parser-legacy/ModernParser.js +96 -0
  71. package/dist/configuration-parser-legacy/Parser.d.ts +20 -0
  72. package/dist/configuration-parser-legacy/Parser.d.ts.map +1 -0
  73. package/dist/configuration-parser-legacy/Parser.js +20 -0
  74. package/dist/configuration-parser-legacy/tests/LegacyDomParser.test.d.ts +2 -0
  75. package/dist/configuration-parser-legacy/tests/LegacyDomParser.test.d.ts.map +1 -0
  76. package/dist/configuration-parser-legacy/tests/LegacyDomParser.test.js +151 -0
  77. package/dist/configuration-parser-legacy/tests/LegacyLocationHashParser.test.d.ts +2 -0
  78. package/dist/configuration-parser-legacy/tests/LegacyLocationHashParser.test.d.ts.map +1 -0
  79. package/dist/configuration-parser-legacy/tests/LegacyLocationHashParser.test.js +86 -0
  80. package/dist/configuration-parser-legacy/tests/LegacyParser.test.d.ts +2 -0
  81. package/dist/configuration-parser-legacy/tests/LegacyParser.test.d.ts.map +1 -0
  82. package/dist/configuration-parser-legacy/tests/LegacyParser.test.js +104 -0
  83. package/dist/configuration-parser-legacy/tests/test-utils.d.ts +4 -0
  84. package/dist/configuration-parser-legacy/tests/test-utils.d.ts.map +1 -0
  85. package/dist/configuration-parser-legacy/tests/test-utils.js +10 -0
  86. package/dist/configuration-parser-legacy/utils.d.ts +14 -0
  87. package/dist/configuration-parser-legacy/utils.d.ts.map +1 -0
  88. package/dist/configuration-parser-legacy/utils.js +24 -0
  89. package/dist/constants.d.ts +22 -0
  90. package/dist/constants.d.ts.map +1 -0
  91. package/dist/constants.js +50 -0
  92. package/dist/encoding.d.ts +8 -0
  93. package/dist/encoding.d.ts.map +1 -0
  94. package/dist/encoding.js +33 -0
  95. package/dist/events/conversion-analytics.d.ts +120 -0
  96. package/dist/events/conversion-analytics.d.ts.map +1 -0
  97. package/dist/events/conversion-analytics.js +10 -0
  98. package/dist/events/event-types.d.ts +152 -0
  99. package/dist/events/event-types.d.ts.map +1 -0
  100. package/dist/events/event-types.js +1 -0
  101. package/dist/events/index.d.ts +2 -0
  102. package/dist/events/index.d.ts.map +1 -0
  103. package/dist/events/index.js +1 -0
  104. package/dist/events/utils.d.ts +2 -0
  105. package/dist/events/utils.d.ts.map +1 -0
  106. package/dist/events/utils.js +1 -0
  107. package/dist/index.d.ts +8 -0
  108. package/dist/index.d.ts.map +1 -0
  109. package/dist/index.js +7 -0
  110. package/dist/instance/PexipEngagePluginFrame.d.ts +8 -0
  111. package/dist/instance/PexipEngagePluginFrame.d.ts.map +1 -0
  112. package/dist/instance/PexipEngagePluginFrame.js +39 -0
  113. package/dist/instance/PluginInstance.d.ts +138 -0
  114. package/dist/instance/PluginInstance.d.ts.map +1 -0
  115. package/dist/instance/PluginInstance.js +328 -0
  116. package/dist/instance/dispatchEvent.d.ts +24 -0
  117. package/dist/instance/dispatchEvent.d.ts.map +1 -0
  118. package/dist/instance/dispatchEvent.js +5 -0
  119. package/dist/instance/hooks.d.ts +17 -0
  120. package/dist/instance/hooks.d.ts.map +1 -0
  121. package/dist/instance/hooks.js +1 -0
  122. package/dist/instance/index.d.ts +19 -0
  123. package/dist/instance/index.d.ts.map +1 -0
  124. package/dist/instance/index.js +30 -0
  125. package/dist/logger.d.ts +10 -0
  126. package/dist/logger.d.ts.map +1 -0
  127. package/dist/logger.js +24 -0
  128. package/dist/state/PluginState.schema.d.ts +943 -0
  129. package/dist/state/PluginState.schema.d.ts.map +1 -0
  130. package/dist/state/PluginState.schema.js +52 -0
  131. package/dist/state/index.d.ts +4 -0
  132. package/dist/state/index.d.ts.map +1 -0
  133. package/dist/state/index.js +2 -0
  134. package/dist/state/schemas.d.ts +169 -0
  135. package/dist/state/schemas.d.ts.map +1 -0
  136. package/dist/state/schemas.js +85 -0
  137. package/dist/state/utils.d.ts +7 -0
  138. package/dist/state/utils.d.ts.map +1 -0
  139. package/dist/state/utils.js +22 -0
  140. package/package.json +66 -0
  141. package/src/@types/iframe-resizer.iframeResizer.d.ts +211 -0
  142. package/src/@types/reset.d.ts +1 -0
  143. package/src/configuration/PluginConfiguration.current.ts +51 -0
  144. package/src/configuration/PluginConfiguration.schema.ts +133 -0
  145. package/src/configuration/PluginConfiguration.v0.ts +50 -0
  146. package/src/configuration/index.ts +1 -0
  147. package/src/configuration/migration.ts +95 -0
  148. package/src/configuration-parser/hash-parser.ts +18 -0
  149. package/src/configuration-parser/html-parser.ts +35 -0
  150. package/src/configuration-parser/index.ts +134 -0
  151. package/src/configuration-parser/js-parser.ts +153 -0
  152. package/src/configuration-parser-legacy/LegacyParser.ts +376 -0
  153. package/src/configuration-parser-legacy/LegacyParser.utils.ts +104 -0
  154. package/src/configuration-parser-legacy/ModernParser.ts +213 -0
  155. package/src/configuration-parser-legacy/Parser.ts +44 -0
  156. package/src/configuration-parser-legacy/tests/LegacyDomParser.test.ts +168 -0
  157. package/src/configuration-parser-legacy/tests/LegacyLocationHashParser.test.ts +96 -0
  158. package/src/configuration-parser-legacy/tests/LegacyParser.test.ts +117 -0
  159. package/src/configuration-parser-legacy/tests/test-utils.ts +16 -0
  160. package/src/configuration-parser-legacy/utils.ts +30 -0
  161. package/src/constants.ts +61 -0
  162. package/src/encoding.ts +42 -0
  163. package/src/events/event-types.ts +126 -0
  164. package/src/events/index.ts +1 -0
  165. package/src/instance/PexipEngagePluginFrame.ts +48 -0
  166. package/src/instance/PluginInstance.ts +429 -0
  167. package/src/instance/dispatchEvent.ts +34 -0
  168. package/src/instance/hooks.ts +17 -0
  169. package/src/instance/index.ts +54 -0
  170. package/src/logger.ts +25 -0
  171. package/src/state/PluginState.schema.ts +67 -0
  172. package/src/state/index.ts +11 -0
  173. package/src/state/schemas.ts +97 -0
@@ -0,0 +1,28 @@
1
+ import { ATTR_PREFIX } from "./ModernParser.js";
2
+ export function configToHash(config) {
3
+ return config;
4
+ }
5
+ export function configToHtml(config) {
6
+ return Object.entries(config).map(([key, value]) => `${ATTR_PREFIX}${key}="${value}"`);
7
+ }
8
+ export function configToJS(config) {
9
+ const result = {};
10
+ for (let key in config) {
11
+ const value = config[key];
12
+ const keys = key.split("-");
13
+ setValue(result, keys, value);
14
+ }
15
+ return { config: result };
16
+ }
17
+ function setValue(target, keys, value) {
18
+ let targetObj = target;
19
+ const [lastKey] = keys.splice(-1, 1);
20
+ for (const key of keys) {
21
+ if (!targetObj[key]) {
22
+ targetObj[key] = {};
23
+ }
24
+ targetObj = targetObj[key];
25
+ }
26
+ //@ts-expect-error
27
+ targetObj[lastKey] = value;
28
+ }
@@ -0,0 +1,28 @@
1
+ import type { PluginConfiguration } from "../../src/configuration/index.ts";
2
+ export { encodeConfigAsHash } from "./ModernParser.ts";
3
+ export { decodeURIParameters, encodeURIParameters } from "./utils.ts";
4
+ export declare function parsePluginConfiguration({
5
+ browserTimeZone,
6
+ element,
7
+ hash,
8
+ href,
9
+ options,
10
+ }: {
11
+ element?: HTMLElement;
12
+ hash?: string;
13
+ options?: unknown;
14
+ href?: string;
15
+ browserTimeZone?: string;
16
+ }): {
17
+ config: PluginConfiguration;
18
+ domConfig: PluginConfiguration;
19
+ hashConfig: PluginConfiguration;
20
+ jsConfig: PluginConfiguration;
21
+ };
22
+ export declare function createSearchParamConfig({
23
+ config,
24
+ }: {
25
+ config: PluginConfiguration;
26
+ }): URLSearchParams;
27
+ export declare function parseFromSearchParamConfig(searchParams: URLSearchParams): unknown;
28
+ //# sourceMappingURL=Parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/configuration-parser/Parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAMrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAgB,wBAAwB,CAAC,EACvC,eAAe,EACf,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAY,GACb,EAAE;IACD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG;IACF,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,EAAE,mBAAmB,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC;IAChC,QAAQ,EAAE,mBAAmB,CAAC;CAC/B,CAoBA;AAID,wBAAgB,uBAAuB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,mBAKlF;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAMjF"}
@@ -0,0 +1,33 @@
1
+ import { parse as legacyParser } from "./LegacyParser.js";
2
+ import { parse as modernParser } from "./ModernParser.js";
3
+ import { decodeURIParameters, encodeURIParameters, isValidConfiguration } from "./utils.js";
4
+ export { encodeConfigAsHash } from "./ModernParser.js";
5
+ export { decodeURIParameters, encodeURIParameters } from "./utils.js";
6
+ export function parsePluginConfiguration({ browserTimeZone, element, hash, href, options = {} }) {
7
+ if (!isValidConfiguration(options))
8
+ throw new Error("Invalid configuration passed, expected an object.");
9
+ const legacy = legacyParser({ element, hash, options });
10
+ const modern = modernParser({ element, hash, options });
11
+ const domConfig = { ...legacy.domConfig, ...modern.domConfig };
12
+ const hashConfig = { ...legacy.hashConfig, ...modern.hashConfig };
13
+ const jsConfig = { ...legacy.jsConfig, ...modern.jsConfig };
14
+ const config = {
15
+ ...domConfig,
16
+ ...hashConfig,
17
+ ...jsConfig,
18
+ source_href: href,
19
+ "browser-timezone": browserTimeZone,
20
+ };
21
+ return { config, domConfig, hashConfig, jsConfig };
22
+ }
23
+ const CONFIGURATION_SEARCH_PARAM_KEY = "configuration.pexip";
24
+ export function createSearchParamConfig({ config }) {
25
+ const searchParams = new URLSearchParams();
26
+ searchParams.set(CONFIGURATION_SEARCH_PARAM_KEY, encodeURIParameters(config));
27
+ return searchParams;
28
+ }
29
+ export function parseFromSearchParamConfig(searchParams) {
30
+ const config = searchParams.get(CONFIGURATION_SEARCH_PARAM_KEY);
31
+ if (!config) return null;
32
+ return decodeURIParameters(config);
33
+ }
@@ -0,0 +1,7 @@
1
+ import type { PluginConfiguration } from "../configuration/PluginConfiguration.current.js";
2
+ export declare const HASH_PREFIX = "#pexip-";
3
+ export declare const hashParser: {
4
+ encode(value: PluginConfiguration): string;
5
+ decode(hash?: string | null): PluginConfiguration;
6
+ };
7
+ //# sourceMappingURL=hash-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-parser.d.ts","sourceRoot":"","sources":["../../src/configuration-parser/hash-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAG3F,eAAO,MAAM,WAAW,YAAY,CAAC;AACrC,eAAO,MAAM,UAAU;kBACP,mBAAmB,GAAG,MAAM;kBAG5B,MAAM,GAAG,IAAI,GAAG,mBAAmB;CASlD,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { decodeURIParameters, encodeURIParameters } from "../encoding.js";
2
+ export const HASH_PREFIX = "#pexip-";
3
+ export const hashParser = {
4
+ encode(value) {
5
+ return HASH_PREFIX + encodeURIParameters(value);
6
+ },
7
+ decode(hash) {
8
+ if (!hash || !hash.startsWith(HASH_PREFIX)) return {};
9
+ const value = hash.slice(HASH_PREFIX.length);
10
+ const configuration = decodeURIParameters(value);
11
+ return configuration;
12
+ },
13
+ };
@@ -0,0 +1,13 @@
1
+ import type { PluginConfiguration } from "../configuration/PluginConfiguration.current.js";
2
+ export declare const ATTR_PREFIX = "data-pexip-";
3
+ export type HTMLConfig = {
4
+ [key in keyof PluginConfiguration as `${typeof ATTR_PREFIX}${key}`]: Exclude<
5
+ PluginConfiguration[key],
6
+ string[] | null | boolean
7
+ >;
8
+ };
9
+ export declare const htmlParser: {
10
+ encode(config: PluginConfiguration): string[];
11
+ decode(element?: HTMLElement | null): PluginConfiguration;
12
+ };
13
+ //# sourceMappingURL=html-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-parser.d.ts","sourceRoot":"","sources":["../../src/configuration-parser/html-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAG3F,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,MAAM,MAAM,UAAU,GAAG;KACtB,GAAG,IAAI,MAAM,mBAAmB,IAAI,GAAG,OAAO,WAAW,GAAG,GAAG,EAAE,GAAG,OAAO,CAC1E,mBAAmB,CAAC,GAAG,CAAC,EACxB,MAAM,EAAE,GAAG,IAAI,GAAG,OAAO,CAC1B;CACF,CAAC;AAEF,eAAO,MAAM,UAAU;mBACN,mBAAmB,GAAG,MAAM,EAAE;qBAG5B,WAAW,GAAG,IAAI,GAAG,mBAAmB;CAmB1D,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { logger } from "../logger.js";
2
+ export const ATTR_PREFIX = "data-pexip-";
3
+ export const htmlParser = {
4
+ encode(config) {
5
+ return Object.entries(config).map(([key, value]) => `${ATTR_PREFIX}${key}="${value}"`);
6
+ },
7
+ decode(element) {
8
+ try {
9
+ if (!element) return {};
10
+ const attributes = element.getAttributeNames().filter((name) => name.startsWith(ATTR_PREFIX));
11
+ const object = {};
12
+ for (const attribute of attributes) {
13
+ const key = attribute.replace(ATTR_PREFIX, "");
14
+ //@ts-expect-error will be validated later on.
15
+ object[key] = element.getAttribute(attribute)?.trim() || undefined;
16
+ }
17
+ return object;
18
+ } catch (err) {
19
+ logger.error("Failed to parse HTML attributes", err);
20
+ return {};
21
+ }
22
+ },
23
+ };
@@ -0,0 +1,48 @@
1
+ import type { PluginConfiguration } from "../configuration/PluginConfiguration.current.js";
2
+ import { type JSConfig } from "./js-parser.js";
3
+ export declare const CONFIG_VERSION: Exclude<PluginConfiguration["version"], undefined>;
4
+ export declare const parser: {
5
+ js: {
6
+ encode(config: PluginConfiguration): JSConfig;
7
+ decode(jsConfig?: unknown): PluginConfiguration;
8
+ };
9
+ hash: {
10
+ encode(value: PluginConfiguration): string;
11
+ decode(hash?: string | null | undefined): PluginConfiguration;
12
+ };
13
+ html: {
14
+ encode(config: PluginConfiguration): string[];
15
+ decode(element?: HTMLElement | null | undefined): PluginConfiguration;
16
+ };
17
+ };
18
+ export { HASH_PREFIX } from "./hash-parser.js";
19
+ export { ATTR_PREFIX } from "./html-parser.js";
20
+ export type { JSConfig } from "./js-parser.js";
21
+ interface ConfigurationProps {
22
+ element?: HTMLElement;
23
+ hash?: string;
24
+ options?: unknown;
25
+ browser: {
26
+ href?: string;
27
+ timeZone?: string;
28
+ };
29
+ }
30
+ export declare function parsePluginConfiguration(args: ConfigurationProps):
31
+ | {
32
+ config: PluginConfiguration;
33
+ domConfig: PluginConfiguration;
34
+ hashConfig: PluginConfiguration;
35
+ jsConfig: PluginConfiguration;
36
+ }
37
+ | {
38
+ migrationInstructions: {
39
+ dom: string | null;
40
+ hash: string | null;
41
+ js: JSConfig | null;
42
+ };
43
+ config: PluginConfiguration;
44
+ domConfig: PluginConfiguration | null;
45
+ hashConfig: PluginConfiguration | null;
46
+ jsConfig: PluginConfiguration | null;
47
+ };
48
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/configuration-parser/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAK3F,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAW,CAAC;AAC1F,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAAuD,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;;;;EAqBhE"}
@@ -0,0 +1,86 @@
1
+ import { parsePluginConfigurationV1 } from "../configuration-parser-legacy/Parser.js";
2
+ import { migrateConfiguration } from "../configuration/migration.js";
3
+ import { logger } from "../logger.js";
4
+ import { hashParser } from "./hash-parser.js";
5
+ import { htmlParser } from "./html-parser.js";
6
+ import { jsParser } from "./js-parser.js";
7
+ export const CONFIG_VERSION = "1.0.0";
8
+ export const parser = { js: jsParser, hash: hashParser, html: htmlParser };
9
+ export { HASH_PREFIX } from "./hash-parser.js";
10
+ export { ATTR_PREFIX } from "./html-parser.js";
11
+ export function parsePluginConfiguration(args) {
12
+ const result = parse(args);
13
+ const version = result.config.version;
14
+ // only one version for now, can just return it.
15
+ if (version === CONFIG_VERSION) {
16
+ return result;
17
+ }
18
+ const v1Config = parsePluginConfigurationV1({
19
+ element: args.element,
20
+ hash: args.hash,
21
+ href: args.browser.href,
22
+ browserTimeZone: args.browser.timeZone,
23
+ options: args.options,
24
+ });
25
+ const migrated = createMigration(v1Config);
26
+ // migrated.
27
+ return migrated;
28
+ }
29
+ function parse({ element, hash, options, browser }) {
30
+ const domConfig = parser.html.decode(element);
31
+ const hashConfig = parser.hash.decode(hash);
32
+ const jsConfig = parser.js.decode(options);
33
+ const config = {
34
+ ...domConfig,
35
+ ...hashConfig,
36
+ ...jsConfig,
37
+ "browser-href": browser.href,
38
+ "browser-time_zone": browser.timeZone,
39
+ };
40
+ return { config, domConfig, hashConfig, jsConfig };
41
+ }
42
+ function createMigration(result) {
43
+ const data = {
44
+ config: migrateConfiguration(result.config) ?? { version: "1.0.0" },
45
+ domConfig: migrateConfiguration(result.domConfig),
46
+ hashConfig: migrateConfiguration(result.hashConfig),
47
+ jsConfig: migrateConfiguration(result.jsConfig),
48
+ };
49
+ const migrationInstructions = {
50
+ dom: data.domConfig
51
+ ? `<div class="pexip-engage-plugin"\n ${parser.html
52
+ .encode(data.domConfig)
53
+ .join("\n ")}\n></div>`
54
+ : null,
55
+ hash: data.hashConfig ? parser.hash.encode(data.hashConfig) : null,
56
+ js: data.jsConfig ? parser.js.encode(data.jsConfig) : null,
57
+ };
58
+ logDeprecationWarning(migrationInstructions);
59
+ return {
60
+ ...data,
61
+ migrationInstructions,
62
+ };
63
+ }
64
+ function logDeprecationWarning({ dom, js, hash }) {
65
+ if (dom || hash || js) {
66
+ logger.group("DEPRECATED CONFIGURATION");
67
+ if (dom) {
68
+ try {
69
+ logger.warn(
70
+ "Detected unsupported DOM config. Please update your DOM element to:\n",
71
+ dom.replaceAll("\n ", ""),
72
+ );
73
+ } catch (err) {}
74
+ }
75
+ if (hash) {
76
+ logger.warn("Detected deprecated hash config. Please update your hash to:\n%o", hash);
77
+ }
78
+ if (js) {
79
+ logger.warn(
80
+ "Detected deprecated JS config. Please update your JS to:\n%o",
81
+ `PexipEngage.Plugin(element, ${JSON.stringify(js)})`,
82
+ );
83
+ }
84
+ logger.groupEnd();
85
+ }
86
+ }
@@ -0,0 +1,84 @@
1
+ import type { PluginConfiguration } from "../configuration/PluginConfiguration.current.js";
2
+ export declare const jsParser: {
3
+ encode(config: PluginConfiguration): JSConfig;
4
+ decode(jsConfig?: unknown): PluginConfiguration;
5
+ };
6
+ type StringConfig = string | null;
7
+ type StringArrayConfig = StringConfig | string[];
8
+ type BooleanConfig = StringConfig | boolean;
9
+ export interface JSConfig {
10
+ config?: {
11
+ version: "1.0.0";
12
+ flow?: StringConfig;
13
+ intent?: StringConfig;
14
+ language?: StringConfig;
15
+ employee?: {
16
+ ids?: StringArrayConfig;
17
+ type?: StringConfig;
18
+ };
19
+ application?: {
20
+ scroll?: "disabled" | number | null;
21
+ timezoneSelection?: StringConfig;
22
+ theme?: string | null;
23
+ };
24
+ customer?: {
25
+ company?: StringConfig;
26
+ customer_number?: StringConfig;
27
+ date_of_birth?: StringConfig;
28
+ email?: StringConfig;
29
+ external_id?: StringConfig;
30
+ first_name?: StringConfig;
31
+ gender?: StringConfig;
32
+ id?: StringConfig;
33
+ is_existing?: BooleanConfig;
34
+ language?: StringConfig;
35
+ last_name?: StringConfig;
36
+ location?: {
37
+ city?: StringConfig;
38
+ country?: StringConfig;
39
+ geolocation?: StringConfig;
40
+ postal_code?: StringConfig;
41
+ state?: StringConfig;
42
+ street_1?: StringConfig;
43
+ };
44
+ phone_number?: StringConfig;
45
+ preferred_contact_id?: StringConfig;
46
+ preferred_office_id?: StringConfig;
47
+ timezone?: StringConfig;
48
+ };
49
+ leadSegment?: {
50
+ id?: StringConfig;
51
+ type?: StringConfig;
52
+ };
53
+ listing?: {
54
+ id?: StringConfig;
55
+ type?: StringConfig;
56
+ };
57
+ location?: {
58
+ initialSearch?: StringConfig;
59
+ };
60
+ meetingTypes?: StringArrayConfig;
61
+ oauth?: {
62
+ resourceCode?: StringConfig;
63
+ };
64
+ office?: {
65
+ ids?: StringArrayConfig;
66
+ type?: StringConfig;
67
+ };
68
+ searchCountries?: StringArrayConfig;
69
+ session?: {
70
+ id?: StringConfig;
71
+ sourceTags?: StringArrayConfig;
72
+ status?: StringConfig;
73
+ };
74
+ subject?: {
75
+ ids?: StringArrayConfig;
76
+ type?: StringConfig;
77
+ };
78
+ timetable?: {
79
+ startDate?: StringConfig;
80
+ };
81
+ };
82
+ }
83
+ export {};
84
+ //# sourceMappingURL=js-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js-parser.d.ts","sourceRoot":"","sources":["../../src/configuration-parser/js-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { isValidConfiguration } from "../configuration-parser-legacy/utils.js";
2
+ import { logger } from "../logger.js";
3
+ export const jsParser = {
4
+ encode(config) {
5
+ //@ts-ignore
6
+ const result = {};
7
+ for (let key in config) {
8
+ const value = config[key];
9
+ const keys = key.split("-");
10
+ //@ts-ignore
11
+ setValue(result, keys, value);
12
+ }
13
+ return { config: result };
14
+ },
15
+ decode(jsConfig) {
16
+ try {
17
+ if (!isValidConfiguration(jsConfig))
18
+ throw new Error("Invalid configuration passed, expected an object.");
19
+ if (jsConfig && "config" in jsConfig && isValidConfiguration(jsConfig.config)) {
20
+ return objectToDashConfig(jsConfig.config);
21
+ } else {
22
+ return {};
23
+ }
24
+ } catch (err) {
25
+ logger.error("Failed to parse JS config:", jsConfig);
26
+ logger.error("JS ERROR:", err);
27
+ return {};
28
+ }
29
+ },
30
+ };
31
+ function objectToDashConfig(inputObject, current, result = {}) {
32
+ for (let key in inputObject) {
33
+ let value = inputObject[key];
34
+ let newKey = current ? `${current}-${key}` : key;
35
+ if (Array.isArray(value)) {
36
+ result[newKey] = value;
37
+ } else if (value && typeof value === "object") {
38
+ objectToDashConfig(value, newKey, result);
39
+ } else {
40
+ result[newKey] = value;
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ function setValue(target, keys, value) {
46
+ let targetObj = target;
47
+ const [lastKey] = keys.splice(-1, 1);
48
+ for (const key of keys) {
49
+ if (!targetObj[key]) {
50
+ targetObj[key] = {};
51
+ }
52
+ targetObj = targetObj[key];
53
+ }
54
+ //@ts-expect-error
55
+ targetObj[lastKey] = value;
56
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LegacyDomParser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegacyDomParser.test.d.ts","sourceRoot":"","sources":["../../../src/configuration-parser/tests/LegacyDomParser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,151 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { parse as legacyParse } from "../LegacyParser.js";
3
+ import { createFakeElement } from "./test-utils.js";
4
+ describe("parseDOMParams", () => {
5
+ it("should work", () => {
6
+ const element = createFakeElement({
7
+ "skedify:appointment.subject_id": "<subject-id here>",
8
+ "skedify:appointment.office_id": "<office-id here>",
9
+ "skedify:language": "nl-BE",
10
+ "skedify:meeting_types": "video,office",
11
+ "skedify:flow": "S'TQC",
12
+ "skedify:location.formatted_address": "Zuiderlaan 1, 9000 Ghent, Belgium",
13
+ "skedify:location.geolocation": "123;456",
14
+ "skedify:location.city": "Ghent",
15
+ "skedify:location.country": "Belgium",
16
+ "skedify:location.postal_code": "9000",
17
+ "skedify:location.state": "Oost-Vlaanderen",
18
+ "skedify:location.street_1": "Zuiderlaan 1",
19
+ "skedify:customer.location.formatted_address": "Zuiderlaan 1, 9000 Ghent, Belgium",
20
+ "skedify:customer.location.geolocation": "123;456",
21
+ "skedify:customer.location.city": "Ghent",
22
+ "skedify:customer.location.country": "Belgium",
23
+ "skedify:customer.location.postal_code": "9000",
24
+ "skedify:customer.location.state": "Oost-Vlaanderen",
25
+ "skedify:customer.location.street_1": "Zuiderlaan 1",
26
+ "skedify:application.scroll": "disable_initial_scroll_on_schedule",
27
+ "skedify:listing_id": "<listing-id here>",
28
+ "skedify:external_listing_id": "<external-listing-id here>",
29
+ "skedify:application.timezone_selection": "enable_timezone_selection",
30
+ "skedify:session.id": "269828b4-df32-42fe-80c7-4fb72b692f7e",
31
+ "skedify:session.source_tags": "A;B;C",
32
+ "skedify:session.status": "disabled",
33
+ "skedify:search.country": "BE",
34
+ });
35
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
36
+ {
37
+ "domConfig": {
38
+ "application-scroll": "disabled",
39
+ "application-timezone_selection": "enable_timezone_selection",
40
+ "customer-location-city": "Ghent",
41
+ "customer-location-country": "Belgium",
42
+ "customer-location-geolocation": "123;456",
43
+ "customer-location-postal_code": "9000",
44
+ "customer-location-state": "Oost-Vlaanderen",
45
+ "customer-location-street_1": "Zuiderlaan 1",
46
+ "flow": "MSTQC",
47
+ "language": "nl-BE",
48
+ "listing-id": "<external-listing-id here>",
49
+ "listing-type": "externalId",
50
+ "location-initial_search": "Zuiderlaan 1, 9000 Ghent, Belgium",
51
+ "meeting_types": "video,office",
52
+ "office-ids": "<office-id here>",
53
+ "office-type": "id",
54
+ "search_countries": "BE",
55
+ "session-id": "269828b4-df32-42fe-80c7-4fb72b692f7e",
56
+ "session-source_tags": "A;B;C",
57
+ "session-status": "disabled",
58
+ "subject-ids": "<subject-id here>",
59
+ "subject-type": "id",
60
+ },
61
+ "hashConfig": {},
62
+ "jsConfig": {},
63
+ }
64
+ `);
65
+ });
66
+ it("should have special treatment for hints.contacts", () => {
67
+ const element = createFakeElement({
68
+ "skedify:hints.contacts": "1 2 3 4 5",
69
+ });
70
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
71
+ {
72
+ "domConfig": {
73
+ "employee-ids": "1 2 3 4 5",
74
+ "employee-type": "id",
75
+ },
76
+ "hashConfig": {},
77
+ "jsConfig": {},
78
+ }
79
+ `);
80
+ });
81
+ it("should ignore empty hints.contacts", () => {
82
+ const element = createFakeElement({
83
+ "skedify:hints.contacts": "",
84
+ });
85
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
86
+ {
87
+ "domConfig": {},
88
+ "hashConfig": {},
89
+ "jsConfig": {},
90
+ }
91
+ `);
92
+ });
93
+ it("should have special treatment for hints.intent", () => {
94
+ const element = createFakeElement({
95
+ "skedify:hints.intent": "invite",
96
+ });
97
+ const result = legacyParse({ element });
98
+ expect(result.domConfig["intent"]).toBe("invite");
99
+ });
100
+ it("should work with prefilled customer values", () => {
101
+ const element = createFakeElement({
102
+ "skedify:customer.timezone": "Europe/Brussels",
103
+ "skedify:customer.first_name": "Ken",
104
+ "skedify:customer.last_name": "Depelchin",
105
+ "skedify:customer.email": "ken@skedify.co",
106
+ "skedify:customer.phone_number": "0478123123",
107
+ "skedify:customer.customer_number": "123",
108
+ });
109
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
110
+ {
111
+ "domConfig": {
112
+ "customer-customer_number": "123",
113
+ "customer-email": "ken@skedify.co",
114
+ "customer-first_name": "Ken",
115
+ "customer-last_name": "Depelchin",
116
+ "customer-phone_number": "0478123123",
117
+ "customer-timezone": "Europe/Brussels",
118
+ },
119
+ "hashConfig": {},
120
+ "jsConfig": {},
121
+ }
122
+ `);
123
+ });
124
+ it("should have special treatment for hints.external_employee_ids", () => {
125
+ const element = createFakeElement({
126
+ "skedify:hints.external_employee_ids": "1 2 3 4 5",
127
+ });
128
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
129
+ {
130
+ "domConfig": {
131
+ "employee-ids": "1 2 3 4 5",
132
+ "employee-type": "externalId",
133
+ },
134
+ "hashConfig": {},
135
+ "jsConfig": {},
136
+ }
137
+ `);
138
+ });
139
+ it("should ignore empty hints.external_employee_ids", () => {
140
+ const element = createFakeElement({
141
+ "skedify:hints.external_employee_ids": "",
142
+ });
143
+ expect(legacyParse({ element })).toMatchInlineSnapshot(`
144
+ {
145
+ "domConfig": {},
146
+ "hashConfig": {},
147
+ "jsConfig": {},
148
+ }
149
+ `);
150
+ });
151
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=LegacyLocationHashParser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegacyLocationHashParser.test.d.ts","sourceRoot":"","sources":["../../../src/configuration-parser/tests/LegacyLocationHashParser.test.ts"],"names":[],"mappings":""}