@tern-secure/shared 1.1.2 → 1.2.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.
Files changed (132) hide show
  1. package/dist/browser.d.mts +28 -0
  2. package/dist/browser.d.ts +28 -0
  3. package/dist/browser.js +95 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/browser.mjs +66 -0
  6. package/dist/browser.mjs.map +1 -0
  7. package/dist/chunk-2UQ43P4P.mjs +45 -0
  8. package/dist/chunk-2UQ43P4P.mjs.map +1 -0
  9. package/dist/{chunk-HATJQ74R.mjs → chunk-33U3M4YY.mjs} +2 -2
  10. package/dist/chunk-33U3M4YY.mjs.map +1 -0
  11. package/dist/chunk-CGGW4CI3.mjs +265 -0
  12. package/dist/chunk-CGGW4CI3.mjs.map +1 -0
  13. package/dist/chunk-PHCVLVZY.mjs +12 -0
  14. package/dist/chunk-PHCVLVZY.mjs.map +1 -0
  15. package/dist/cookie.d.mts +4 -1
  16. package/dist/cookie.d.ts +4 -1
  17. package/dist/cookie.js +35 -2
  18. package/dist/cookie.js.map +1 -1
  19. package/dist/cookie.mjs +33 -1
  20. package/dist/cookie.mjs.map +1 -1
  21. package/dist/derivedAuthState.d.mts +13 -7
  22. package/dist/derivedAuthState.d.ts +13 -7
  23. package/dist/derivedAuthState.js +22 -34
  24. package/dist/derivedAuthState.js.map +1 -1
  25. package/dist/derivedAuthState.mjs +22 -33
  26. package/dist/derivedAuthState.mjs.map +1 -1
  27. package/dist/errors-api.d.mts +49 -0
  28. package/dist/errors-api.d.ts +49 -0
  29. package/dist/errors-api.js +124 -0
  30. package/dist/errors-api.js.map +1 -0
  31. package/dist/errors-api.mjs +91 -0
  32. package/dist/errors-api.mjs.map +1 -0
  33. package/dist/errors.d.mts +17 -0
  34. package/dist/errors.d.ts +17 -0
  35. package/dist/errors.js +139 -0
  36. package/dist/errors.js.map +1 -0
  37. package/dist/errors.mjs +111 -0
  38. package/dist/errors.mjs.map +1 -0
  39. package/dist/eventBus.d.mts +28 -7
  40. package/dist/eventBus.d.ts +28 -7
  41. package/dist/eventBus.js +36 -21
  42. package/dist/eventBus.js.map +1 -1
  43. package/dist/eventBus.mjs +4 -26
  44. package/dist/eventBus.mjs.map +1 -1
  45. package/dist/{types/eventBus.d.ts → eventEmitter.d.mts} +4 -2
  46. package/dist/eventEmitter.d.ts +9 -0
  47. package/dist/eventEmitter.js +57 -0
  48. package/dist/eventEmitter.js.map +1 -0
  49. package/dist/eventEmitter.mjs +32 -0
  50. package/dist/eventEmitter.mjs.map +1 -0
  51. package/dist/loadScript.js +1 -1
  52. package/dist/loadScript.js.map +1 -1
  53. package/dist/loadScript.mjs +1 -1
  54. package/dist/loadTernUIScript.d.mts +4 -5
  55. package/dist/loadTernUIScript.d.ts +4 -5
  56. package/dist/loadTernUIScript.js +15 -7
  57. package/dist/loadTernUIScript.js.map +1 -1
  58. package/dist/loadTernUIScript.mjs +10 -7
  59. package/dist/loadTernUIScript.mjs.map +1 -1
  60. package/dist/pathMatcher.d.mts +14 -0
  61. package/dist/pathMatcher.d.ts +14 -0
  62. package/dist/pathMatcher.js +263 -0
  63. package/dist/pathMatcher.js.map +1 -0
  64. package/dist/pathMatcher.mjs +17 -0
  65. package/dist/pathMatcher.mjs.map +1 -0
  66. package/dist/pathToRegexp.d.mts +81 -0
  67. package/dist/pathToRegexp.d.ts +81 -0
  68. package/dist/pathToRegexp.js +292 -0
  69. package/dist/pathToRegexp.js.map +1 -0
  70. package/dist/pathToRegexp.mjs +9 -0
  71. package/dist/pathToRegexp.mjs.map +1 -0
  72. package/dist/react/index.d.mts +8 -2
  73. package/dist/react/index.d.ts +8 -2
  74. package/dist/react/index.js +28 -2
  75. package/dist/react/index.js.map +1 -1
  76. package/dist/react/index.mjs +25 -2
  77. package/dist/react/index.mjs.map +1 -1
  78. package/dist/resolveVersion.d.mts +3 -0
  79. package/dist/resolveVersion.d.ts +3 -0
  80. package/dist/resolveVersion.js +36 -0
  81. package/dist/resolveVersion.js.map +1 -0
  82. package/dist/resolveVersion.mjs +7 -0
  83. package/dist/resolveVersion.mjs.map +1 -0
  84. package/dist/serviceWorker.js +1 -1
  85. package/dist/serviceWorker.js.map +1 -1
  86. package/dist/serviceWorker.mjs +1 -1
  87. package/dist/serviceWorker.mjs.map +1 -1
  88. package/dist/ternStatusEvent.d.mts +15 -0
  89. package/dist/ternStatusEvent.d.ts +15 -0
  90. package/dist/ternStatusEvent.js +81 -0
  91. package/dist/ternStatusEvent.js.map +1 -0
  92. package/dist/ternStatusEvent.mjs +16 -0
  93. package/dist/ternStatusEvent.mjs.map +1 -0
  94. package/dist/url.d.mts +3 -0
  95. package/dist/url.d.ts +3 -0
  96. package/dist/url.js +33 -0
  97. package/dist/url.js.map +1 -0
  98. package/dist/url.mjs +8 -0
  99. package/dist/url.mjs.map +1 -0
  100. package/dist/utils/index.d.mts +5 -0
  101. package/dist/utils/index.d.ts +5 -0
  102. package/dist/utils/index.js +44 -0
  103. package/dist/utils/index.js.map +1 -0
  104. package/dist/utils/index.mjs +17 -0
  105. package/dist/utils/index.mjs.map +1 -0
  106. package/package.json +23 -6
  107. package/dist/chunk-HATJQ74R.mjs.map +0 -1
  108. package/dist/types/cookie.d.ts +0 -12
  109. package/dist/types/cookie.d.ts.map +0 -1
  110. package/dist/types/derivedAuthState.d.ts +0 -7
  111. package/dist/types/derivedAuthState.d.ts.map +0 -1
  112. package/dist/types/eventBus.d.ts.map +0 -1
  113. package/dist/types/loadScript.d.ts +0 -10
  114. package/dist/types/loadScript.d.ts.map +0 -1
  115. package/dist/types/loadTernUIScript.d.ts +0 -21
  116. package/dist/types/loadTernUIScript.d.ts.map +0 -1
  117. package/dist/types/nextjs/client/auth-actions.d.ts +0 -1
  118. package/dist/types/nextjs/client/auth-actions.d.ts.map +0 -1
  119. package/dist/types/react/hooks/index.d.ts +0 -2
  120. package/dist/types/react/hooks/index.d.ts.map +0 -1
  121. package/dist/types/react/hooks/useTernSecure.d.ts +0 -3
  122. package/dist/types/react/hooks/useTernSecure.d.ts.map +0 -1
  123. package/dist/types/react/index.d.ts +0 -4
  124. package/dist/types/react/index.d.ts.map +0 -1
  125. package/dist/types/react/ternsecureCtx.d.ts +0 -26
  126. package/dist/types/react/ternsecureCtx.d.ts.map +0 -1
  127. package/dist/types/react/ternsecureProvider.d.ts +0 -20
  128. package/dist/types/react/ternsecureProvider.d.ts.map +0 -1
  129. package/dist/types/retry.d.ts +0 -46
  130. package/dist/types/retry.d.ts.map +0 -1
  131. package/dist/types/serviceWorker.d.ts +0 -12
  132. package/dist/types/serviceWorker.d.ts.map +0 -1
@@ -1,7 +1,9 @@
1
- export declare class EventEmitter {
1
+ declare class EventEmitter {
2
2
  private listeners;
3
3
  on(eventName: string, listener: (...args: any[]) => void): () => void;
4
4
  emit(eventName: string, ...args: any[]): void;
5
5
  off(eventName: string, listener: (...args: any[]) => void): void;
6
+ getListeners(eventName: string): Array<(...args: any[]) => void>;
6
7
  }
7
- //# sourceMappingURL=eventBus.d.ts.map
8
+
9
+ export { EventEmitter };
@@ -0,0 +1,9 @@
1
+ declare class EventEmitter {
2
+ private listeners;
3
+ on(eventName: string, listener: (...args: any[]) => void): () => void;
4
+ emit(eventName: string, ...args: any[]): void;
5
+ off(eventName: string, listener: (...args: any[]) => void): void;
6
+ getListeners(eventName: string): Array<(...args: any[]) => void>;
7
+ }
8
+
9
+ export { EventEmitter };
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/eventEmitter.ts
21
+ var eventEmitter_exports = {};
22
+ __export(eventEmitter_exports, {
23
+ EventEmitter: () => EventEmitter
24
+ });
25
+ module.exports = __toCommonJS(eventEmitter_exports);
26
+ var EventEmitter = class {
27
+ constructor() {
28
+ this.listeners = {};
29
+ }
30
+ on(eventName, listener) {
31
+ if (!this.listeners[eventName]) {
32
+ this.listeners[eventName] = [];
33
+ }
34
+ this.listeners[eventName].push(listener);
35
+ return () => {
36
+ this.listeners[eventName] = this.listeners[eventName].filter((l) => l !== listener);
37
+ };
38
+ }
39
+ emit(eventName, ...args) {
40
+ if (this.listeners[eventName]) {
41
+ this.listeners[eventName].forEach((listener) => listener(...args));
42
+ }
43
+ }
44
+ off(eventName, listener) {
45
+ if (this.listeners[eventName]) {
46
+ this.listeners[eventName] = this.listeners[eventName].filter((l) => l !== listener);
47
+ }
48
+ }
49
+ getListeners(eventName) {
50
+ return this.listeners[eventName] ? [...this.listeners[eventName]] : [];
51
+ }
52
+ };
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ EventEmitter
56
+ });
57
+ //# sourceMappingURL=eventEmitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventEmitter.ts"],"sourcesContent":["export class EventEmitter {\n private listeners: { [eventName: string]: Array<(...args: any[]) => void> } = {};\n\n on(eventName: string, listener: (...args: any[]) => void): () => void {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName].push(listener);\n return () => {\n this.listeners[eventName] = this.listeners[eventName].filter(l => l !== listener);\n };\n }\n\n emit(eventName: string, ...args: any[]): void {\n if (this.listeners[eventName]) {\n this.listeners[eventName].forEach(listener => listener(...args));\n }\n }\n\n off(eventName: string, listener: (...args: any[]) => void): void {\n if (this.listeners[eventName]) {\n this.listeners[eventName] = this.listeners[eventName].filter(l => l !== listener);\n }\n }\n\n getListeners(eventName: string): Array<(...args: any[]) => void> {\n return this.listeners[eventName] ? [...this.listeners[eventName]] : [];\n }\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACH,SAAQ,YAAsE,CAAC;AAAA;AAAA,EAE/E,GAAG,WAAmB,UAAgD;AAClE,QAAI,CAAC,KAAK,UAAU,SAAS,GAAG;AAC5B,WAAK,UAAU,SAAS,IAAI,CAAC;AAAA,IACjC;AACA,SAAK,UAAU,SAAS,EAAE,KAAK,QAAQ;AACvC,WAAO,MAAM;AACT,WAAK,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,EAAE,OAAO,OAAK,MAAM,QAAQ;AAAA,IACpF;AAAA,EACJ;AAAA,EAEA,KAAK,cAAsB,MAAmB;AAC1C,QAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,WAAK,UAAU,SAAS,EAAE,QAAQ,cAAY,SAAS,GAAG,IAAI,CAAC;AAAA,IACnE;AAAA,EACJ;AAAA,EAEA,IAAI,WAAmB,UAA0C;AAC7D,QAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,WAAK,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,EAAE,OAAO,OAAK,MAAM,QAAQ;AAAA,IACpF;AAAA,EACJ;AAAA,EAEA,aAAa,WAAoD;AAC7D,WAAO,KAAK,UAAU,SAAS,IAAI,CAAC,GAAG,KAAK,UAAU,SAAS,CAAC,IAAI,CAAC;AAAA,EACzE;AACJ;","names":[]}
@@ -0,0 +1,32 @@
1
+ // src/eventEmitter.ts
2
+ var EventEmitter = class {
3
+ constructor() {
4
+ this.listeners = {};
5
+ }
6
+ on(eventName, listener) {
7
+ if (!this.listeners[eventName]) {
8
+ this.listeners[eventName] = [];
9
+ }
10
+ this.listeners[eventName].push(listener);
11
+ return () => {
12
+ this.listeners[eventName] = this.listeners[eventName].filter((l) => l !== listener);
13
+ };
14
+ }
15
+ emit(eventName, ...args) {
16
+ if (this.listeners[eventName]) {
17
+ this.listeners[eventName].forEach((listener) => listener(...args));
18
+ }
19
+ }
20
+ off(eventName, listener) {
21
+ if (this.listeners[eventName]) {
22
+ this.listeners[eventName] = this.listeners[eventName].filter((l) => l !== listener);
23
+ }
24
+ }
25
+ getListeners(eventName) {
26
+ return this.listeners[eventName] ? [...this.listeners[eventName]] : [];
27
+ }
28
+ };
29
+ export {
30
+ EventEmitter
31
+ };
32
+ //# sourceMappingURL=eventEmitter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventEmitter.ts"],"sourcesContent":["export class EventEmitter {\n private listeners: { [eventName: string]: Array<(...args: any[]) => void> } = {};\n\n on(eventName: string, listener: (...args: any[]) => void): () => void {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName].push(listener);\n return () => {\n this.listeners[eventName] = this.listeners[eventName].filter(l => l !== listener);\n };\n }\n\n emit(eventName: string, ...args: any[]): void {\n if (this.listeners[eventName]) {\n this.listeners[eventName].forEach(listener => listener(...args));\n }\n }\n\n off(eventName: string, listener: (...args: any[]) => void): void {\n if (this.listeners[eventName]) {\n this.listeners[eventName] = this.listeners[eventName].filter(l => l !== listener);\n }\n }\n\n getListeners(eventName: string): Array<(...args: any[]) => void> {\n return this.listeners[eventName] ? [...this.listeners[eventName]] : [];\n }\n}"],"mappings":";AAAO,IAAM,eAAN,MAAmB;AAAA,EAAnB;AACH,SAAQ,YAAsE,CAAC;AAAA;AAAA,EAE/E,GAAG,WAAmB,UAAgD;AAClE,QAAI,CAAC,KAAK,UAAU,SAAS,GAAG;AAC5B,WAAK,UAAU,SAAS,IAAI,CAAC;AAAA,IACjC;AACA,SAAK,UAAU,SAAS,EAAE,KAAK,QAAQ;AACvC,WAAO,MAAM;AACT,WAAK,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,EAAE,OAAO,OAAK,MAAM,QAAQ;AAAA,IACpF;AAAA,EACJ;AAAA,EAEA,KAAK,cAAsB,MAAmB;AAC1C,QAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,WAAK,UAAU,SAAS,EAAE,QAAQ,cAAY,SAAS,GAAG,IAAI,CAAC;AAAA,IACnE;AAAA,EACJ;AAAA,EAEA,IAAI,WAAmB,UAA0C;AAC7D,QAAI,KAAK,UAAU,SAAS,GAAG;AAC3B,WAAK,UAAU,SAAS,IAAI,KAAK,UAAU,SAAS,EAAE,OAAO,OAAK,MAAM,QAAQ;AAAA,IACpF;AAAA,EACJ;AAAA,EAEA,aAAa,WAAoD;AAC7D,WAAO,KAAK,UAAU,SAAS,IAAI,CAAC,GAAG,KAAK,UAAU,SAAS,CAAC,IAAI,CAAC;AAAA,EACzE;AACJ;","names":[]}
@@ -60,7 +60,7 @@ async function loadScript(src = "", options) {
60
60
  cleanup();
61
61
  script.remove();
62
62
  console.error(`[loadScript] Failed to load script: ${src}`, error);
63
- reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));
63
+ reject(new Error(`Failed to load script: ${src}, Error: ${error.message}`));
64
64
  };
65
65
  script.addEventListener("load", handleLoad);
66
66
  script.addEventListener("error", handleError);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loadScript.ts"],"sourcesContent":[" import { retry } from './retry'\n\n type LoadScriptOptions = {\n async?: boolean;\n defer?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n nonce?: string;\n beforeLoad?: (script: HTMLScriptElement) => void;\n };\n\n export async function loadScript(src ='', options: LoadScriptOptions): Promise<HTMLScriptElement> {\n const { async, defer, crossOrigin, nonce, beforeLoad } = options;\n\n const load = () => {\n return new Promise<HTMLScriptElement>((resolve, reject) => {\n if (!src) {\n reject(new Error('Script src is required'));\n }\n\n if (!document || !document.body) {\n reject(new Error('Document body is not available'));\n }\n\n const script = document.createElement('script');\n\n if (crossOrigin) script.setAttribute('crossorigin', crossOrigin);\n script.async = async || false;\n script.defer = defer || false;\n\n let resolved = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const cleanup = () => {\n script.removeEventListener('load', handleLoad);\n script.removeEventListener('error', handleError);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n \n const handleLoad = () => {\n if (resolved) return;\n console.log(`[loadScript] Script loaded successfully: ${src}`);\n\n resolved = true;\n cleanup();\n resolve(script);\n };\n \n const handleError = (error: ErrorEvent) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n script.remove();\n console.error(`[loadScript] Failed to load script: ${src}`, error);\n reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));\n };\n \n script.addEventListener('load', handleLoad);\n script.addEventListener('error', handleError);\n\n script.src = src;\n script.nonce = nonce;\n beforeLoad?.(script);\n\n console.log(`[loadScript] Appending script to document body: ${src}`);\n document.body.appendChild(script)\n });\n };\n\n return load()\n\n //return retry(load, { shouldRetry: (_, iterations) => iterations <=5 });\n }"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUE,eAAsB,WAAW,MAAK,IAAI,SAAwD;AAChG,QAAM,EAAE,OAAO,OAAO,aAAa,OAAO,WAAW,IAAI;AAEzD,QAAM,OAAO,MAAM;AACjB,WAAO,IAAI,QAA2B,CAAC,SAAS,WAAW;AACzD,UAAI,CAAC,KAAK;AACR,eAAO,IAAI,MAAM,wBAAwB,CAAC;AAAA,MAC5C;AAEA,UAAI,CAAC,YAAY,CAAC,SAAS,MAAM;AAC/B,eAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,MACpD;AAEA,YAAM,SAAS,SAAS,cAAc,QAAQ;AAE9C,UAAI,YAAa,QAAO,aAAa,eAAe,WAAW;AAC/D,aAAO,QAAQ,SAAS;AACxB,aAAO,QAAQ,SAAS;AAExB,UAAI,WAAW;AACf,UAAI,YAAmC;AAEvC,YAAM,UAAU,MAAM;AACpB,eAAO,oBAAoB,QAAQ,UAAU;AAC7C,eAAO,oBAAoB,SAAS,WAAW;AAC/C,YAAI,WAAW;AACb,uBAAa,SAAS;AACtB,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AACvB,YAAI,SAAU;AACd,gBAAQ,IAAI,4CAA4C,GAAG,EAAE;AAE7D,mBAAW;AACX,gBAAQ;AACR,gBAAQ,MAAM;AAAA,MAChB;AAEA,YAAM,cAAc,CAAC,UAAsB;AACzC,YAAI,SAAU;AACd,mBAAW;AACX,gBAAQ;AACR,eAAO,OAAO;AACd,gBAAQ,MAAM,uCAAuC,GAAG,IAAI,KAAK;AACjE,eAAO,IAAI,MAAM,0BAA0B,GAAG,YAAY,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,MACrF;AAEA,aAAO,iBAAiB,QAAQ,UAAU;AAC1C,aAAO,iBAAiB,SAAS,WAAW;AAE5C,aAAO,MAAM;AACb,aAAO,QAAQ;AACf,+CAAa;AAEb,cAAQ,IAAI,mDAAmD,GAAG,EAAE;AACpE,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,SAAO,KAAK;AAGd;","names":[]}
1
+ {"version":3,"sources":["../src/loadScript.ts"],"sourcesContent":["type LoadScriptOptions = {\n async?: boolean;\n defer?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n nonce?: string;\n beforeLoad?: (script: HTMLScriptElement) => void;\n };\n\n export async function loadScript(src ='', options: LoadScriptOptions): Promise<HTMLScriptElement> {\n const { async, defer, crossOrigin, nonce, beforeLoad } = options;\n\n const load = () => {\n return new Promise<HTMLScriptElement>((resolve, reject) => {\n if (!src) {\n reject(new Error('Script src is required'));\n }\n\n if (!document || !document.body) {\n reject(new Error('Document body is not available'));\n }\n\n const script = document.createElement('script');\n\n if (crossOrigin) script.setAttribute('crossorigin', crossOrigin);\n script.async = async || false;\n script.defer = defer || false;\n\n let resolved = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const cleanup = () => {\n script.removeEventListener('load', handleLoad);\n script.removeEventListener('error', handleError);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n \n const handleLoad = () => {\n if (resolved) return;\n console.log(`[loadScript] Script loaded successfully: ${src}`);\n\n resolved = true;\n cleanup();\n resolve(script);\n };\n \n const handleError = (error: ErrorEvent) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n script.remove();\n console.error(`[loadScript] Failed to load script: ${src}`, error);\n reject(new Error(`Failed to load script: ${src}, Error: ${error.message}`));\n };\n \n script.addEventListener('load', handleLoad);\n script.addEventListener('error', handleError);\n\n script.src = src;\n script.nonce = nonce;\n beforeLoad?.(script);\n\n console.log(`[loadScript] Appending script to document body: ${src}`);\n document.body.appendChild(script)\n });\n };\n\n return load()\n\n //return retry(load, { shouldRetry: (_, iterations) => iterations <=5 });\n }"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQE,eAAsB,WAAW,MAAK,IAAI,SAAwD;AAChG,QAAM,EAAE,OAAO,OAAO,aAAa,OAAO,WAAW,IAAI;AAEzD,QAAM,OAAO,MAAM;AACjB,WAAO,IAAI,QAA2B,CAAC,SAAS,WAAW;AACzD,UAAI,CAAC,KAAK;AACR,eAAO,IAAI,MAAM,wBAAwB,CAAC;AAAA,MAC5C;AAEA,UAAI,CAAC,YAAY,CAAC,SAAS,MAAM;AAC/B,eAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,MACpD;AAEA,YAAM,SAAS,SAAS,cAAc,QAAQ;AAE9C,UAAI,YAAa,QAAO,aAAa,eAAe,WAAW;AAC/D,aAAO,QAAQ,SAAS;AACxB,aAAO,QAAQ,SAAS;AAExB,UAAI,WAAW;AACf,UAAI,YAAmC;AAEvC,YAAM,UAAU,MAAM;AACpB,eAAO,oBAAoB,QAAQ,UAAU;AAC7C,eAAO,oBAAoB,SAAS,WAAW;AAC/C,YAAI,WAAW;AACb,uBAAa,SAAS;AACtB,sBAAY;AAAA,QACd;AAAA,MACF;AAEA,YAAM,aAAa,MAAM;AACvB,YAAI,SAAU;AACd,gBAAQ,IAAI,4CAA4C,GAAG,EAAE;AAE7D,mBAAW;AACX,gBAAQ;AACR,gBAAQ,MAAM;AAAA,MAChB;AAEA,YAAM,cAAc,CAAC,UAAsB;AACzC,YAAI,SAAU;AACd,mBAAW;AACX,gBAAQ;AACR,eAAO,OAAO;AACd,gBAAQ,MAAM,uCAAuC,GAAG,IAAI,KAAK;AACjE,eAAO,IAAI,MAAM,0BAA0B,GAAG,YAAY,MAAM,OAAO,EAAE,CAAC;AAAA,MAC5E;AAEA,aAAO,iBAAiB,QAAQ,UAAU;AAC1C,aAAO,iBAAiB,SAAS,WAAW;AAE5C,aAAO,MAAM;AACb,aAAO,QAAQ;AACf,+CAAa;AAEb,cAAQ,IAAI,mDAAmD,GAAG,EAAE;AACpE,eAAS,KAAK,YAAY,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,SAAO,KAAK;AAGd;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadScript
3
- } from "./chunk-HATJQ74R.mjs";
3
+ } from "./chunk-33U3M4YY.mjs";
4
4
  export {
5
5
  loadScript
6
6
  };
@@ -1,23 +1,22 @@
1
- import { TernSecureInstanceTreeOptions } from '@tern-secure/types';
1
+ import { TernSecureInstanceTreeOptions, TernSecureSDK } from '@tern-secure/types';
2
2
 
3
3
  type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {
4
4
  apiKey?: string;
5
5
  customDomain?: string;
6
6
  proxyUrl?: string;
7
- version?: string;
7
+ ternUIVersion?: string;
8
+ sdkMetadata?: TernSecureSDK;
8
9
  scriptHost?: string;
9
10
  localPort?: string;
10
11
  nonce?: string;
11
12
  };
12
13
  declare const loadTernUIScript: (options?: LoadTernUISCriptOptions) => Promise<unknown>;
13
- declare const ternUIgetScriptUrl: (options?: LoadTernUISCriptOptions) => string;
14
+ declare const ternUIgetScriptUrl: (options: LoadTernUISCriptOptions) => string;
14
15
  declare const constructScriptAttributes: (options?: LoadTernUISCriptOptions) => {
15
16
  nonce?: string | undefined;
16
17
  'data-domain': string;
17
18
  'data-apikey': string;
18
- 'data-environment': string;
19
19
  'data-proxyUrl': string;
20
- 'data-version': string;
21
20
  };
22
21
 
23
22
  export { type LoadTernUISCriptOptions, constructScriptAttributes, loadTernUIScript, ternUIgetScriptUrl };
@@ -1,23 +1,22 @@
1
- import { TernSecureInstanceTreeOptions } from '@tern-secure/types';
1
+ import { TernSecureInstanceTreeOptions, TernSecureSDK } from '@tern-secure/types';
2
2
 
3
3
  type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {
4
4
  apiKey?: string;
5
5
  customDomain?: string;
6
6
  proxyUrl?: string;
7
- version?: string;
7
+ ternUIVersion?: string;
8
+ sdkMetadata?: TernSecureSDK;
8
9
  scriptHost?: string;
9
10
  localPort?: string;
10
11
  nonce?: string;
11
12
  };
12
13
  declare const loadTernUIScript: (options?: LoadTernUISCriptOptions) => Promise<unknown>;
13
- declare const ternUIgetScriptUrl: (options?: LoadTernUISCriptOptions) => string;
14
+ declare const ternUIgetScriptUrl: (options: LoadTernUISCriptOptions) => string;
14
15
  declare const constructScriptAttributes: (options?: LoadTernUISCriptOptions) => {
15
16
  nonce?: string | undefined;
16
17
  'data-domain': string;
17
18
  'data-apikey': string;
18
- 'data-environment': string;
19
19
  'data-proxyUrl': string;
20
- 'data-version': string;
21
20
  };
22
21
 
23
22
  export { type LoadTernUISCriptOptions, constructScriptAttributes, loadTernUIScript, ternUIgetScriptUrl };
@@ -64,7 +64,7 @@ async function loadScript(src = "", options) {
64
64
  cleanup();
65
65
  script.remove();
66
66
  console.error(`[loadScript] Failed to load script: ${src}`, error);
67
- reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));
67
+ reject(new Error(`Failed to load script: ${src}, Error: ${error.message}`));
68
68
  };
69
69
  script.addEventListener("load", handleLoad);
70
70
  script.addEventListener("error", handleError);
@@ -78,6 +78,14 @@ async function loadScript(src = "", options) {
78
78
  return load();
79
79
  }
80
80
 
81
+ // src/resolveVersion.ts
82
+ var resolveVersion = (ternUIVersion, packageVersion = TERN_UI_VERSION) => {
83
+ if (ternUIVersion) {
84
+ return ternUIVersion;
85
+ }
86
+ return packageVersion;
87
+ };
88
+
81
89
  // src/loadTernUIScript.ts
82
90
  var loadTernUIScript = async (options) => {
83
91
  const existingScript = document.querySelector("script[data-ternui-script]");
@@ -93,7 +101,9 @@ var loadTernUIScript = async (options) => {
93
101
  });
94
102
  }
95
103
  if (!(options == null ? void 0 : options.customDomain)) {
96
- throw new Error("TernUI script requires a custom domain or proxy URL to be specified in options.");
104
+ throw new Error(
105
+ "TernUI script requires a custom domain or proxy URL to be specified in options."
106
+ );
97
107
  }
98
108
  return loadScript(ternUIgetScriptUrl(options), {
99
109
  async: true,
@@ -105,14 +115,14 @@ var loadTernUIScript = async (options) => {
105
115
  });
106
116
  };
107
117
  var ternUIgetScriptUrl = (options) => {
108
- const isTernSecureDev = options == null ? void 0 : options.isTernSecureDev;
109
- const version = (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest";
118
+ const { ternUIVersion, isTernSecureDev } = options;
119
+ const version = resolveVersion(ternUIVersion);
110
120
  if (isTernSecureDev) {
111
121
  const localHost = process.env.TERN_UI_HOST || "localhost";
112
122
  const localPort = (options == null ? void 0 : options.localPort) || process.env.TERN_UI_PORT || "4000";
113
123
  return `http://${localHost}:${localPort}/ternsecure.browser.js`;
114
124
  }
115
- return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`;
125
+ return `https://cdn.jsdelivr.net/npm/@tern-secure/ui@${version}/dist/ternsecure.browser.js`;
116
126
  };
117
127
  var beforeLoadWithOptions = (options) => (script) => {
118
128
  const attributes = constructScriptAttributes(options);
@@ -125,9 +135,7 @@ var constructScriptAttributes = (options) => {
125
135
  return {
126
136
  "data-domain": (options == null ? void 0 : options.customDomain) || "",
127
137
  "data-apikey": (options == null ? void 0 : options.apiKey) || "",
128
- "data-environment": process.env.NODE_ENV || "development",
129
138
  "data-proxyUrl": (options == null ? void 0 : options.proxyUrl) || "",
130
- "data-version": (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest",
131
139
  ...(options == null ? void 0 : options.nonce) ? { nonce: options.nonce } : {}
132
140
  };
133
141
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loadTernUIScript.ts","../src/loadScript.ts"],"sourcesContent":["import type { TernSecureInstanceTreeOptions } from \"@tern-secure/types\";\nimport { loadScript } from \"./loadScript\";\n\n\nexport type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n version?: string;\n scriptHost?: string;\n localPort?: string;\n nonce?: string;\n}\n\n\nexport const loadTernUIScript = async (options?: LoadTernUISCriptOptions) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-ternui-script]');\n console.log('[TernSecure-shared] Existing script:', existingScript);\n\n if (existingScript) {\n return new Promise((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n resolve(existingScript);\n });\n\n existingScript.addEventListener('error', (error) => {\n reject(error);\n });\n });\n }\n\n if (!options?.customDomain) {\n throw new Error('TernUI script requires a custom domain or proxy URL to be specified in options.');\n }\n \n return loadScript(ternUIgetScriptUrl(options), {\n async: true,\n //crossOrigin: undefined,\n beforeLoad: beforeLoadWithOptions(options)\n }).catch((error) => {\n console.error('[TernSecure] Failed to load TernUI script:', error);\n throw new Error('Failed to load TernUI script');\n });\n }\n\nexport const ternUIgetScriptUrl = (options?: LoadTernUISCriptOptions) => {\n const isTernSecureDev = options?.isTernSecureDev\n const version = options?.version || process.env.TERN_UI_VERSION || 'latest';\n\n if ( isTernSecureDev) {\n const localHost = process.env.TERN_UI_HOST || 'localhost';\n const localPort = options?.localPort || process.env.TERN_UI_PORT || '4000';\n return `http://${localHost}:${localPort}/ternsecure.browser.js`;\n //return `http://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n }\n return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n\n //const ternsecureCDN = options?.customDomain || \n //(options?.proxyUrl && new URL(options.proxyUrl).host) || 'cdn.tern-secure.com';\n //return `${ternsecureCDN}/ternsecure.browser.js`;\n //return `https://${ternsecureCDN}/npm/@ternsecure/tern-ui@${version}/dist/ternsecure.browser.js`;\n\n}\n\n \nconst beforeLoadWithOptions = (options?: LoadTernUISCriptOptions) => (script: HTMLScriptElement) => {\n const attributes = constructScriptAttributes(options);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value) script.setAttribute(key, String(value));\n });\n console.log('[TernSecure-shared] Script attributes set:', attributes);\n};\n\nexport const constructScriptAttributes = (options?: LoadTernUISCriptOptions) => {\n return {\n 'data-domain': options?.customDomain || '',\n 'data-apikey': options?.apiKey || '',\n 'data-environment': process.env.NODE_ENV || 'development',\n 'data-proxyUrl': options?.proxyUrl || '',\n 'data-version': options?.version || process.env.TERN_UI_VERSION || 'latest',\n ...(options?.nonce ? { nonce: options.nonce } : {})\n };\n};"," import { retry } from './retry'\n\n type LoadScriptOptions = {\n async?: boolean;\n defer?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n nonce?: string;\n beforeLoad?: (script: HTMLScriptElement) => void;\n };\n\n export async function loadScript(src ='', options: LoadScriptOptions): Promise<HTMLScriptElement> {\n const { async, defer, crossOrigin, nonce, beforeLoad } = options;\n\n const load = () => {\n return new Promise<HTMLScriptElement>((resolve, reject) => {\n if (!src) {\n reject(new Error('Script src is required'));\n }\n\n if (!document || !document.body) {\n reject(new Error('Document body is not available'));\n }\n\n const script = document.createElement('script');\n\n if (crossOrigin) script.setAttribute('crossorigin', crossOrigin);\n script.async = async || false;\n script.defer = defer || false;\n\n let resolved = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const cleanup = () => {\n script.removeEventListener('load', handleLoad);\n script.removeEventListener('error', handleError);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n \n const handleLoad = () => {\n if (resolved) return;\n console.log(`[loadScript] Script loaded successfully: ${src}`);\n\n resolved = true;\n cleanup();\n resolve(script);\n };\n \n const handleError = (error: ErrorEvent) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n script.remove();\n console.error(`[loadScript] Failed to load script: ${src}`, error);\n reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));\n };\n \n script.addEventListener('load', handleLoad);\n script.addEventListener('error', handleError);\n\n script.src = src;\n script.nonce = nonce;\n beforeLoad?.(script);\n\n console.log(`[loadScript] Appending script to document body: ${src}`);\n document.body.appendChild(script)\n });\n };\n\n return load()\n\n //return retry(load, { shouldRetry: (_, iterations) => iterations <=5 });\n }"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/loadTernUIScript.ts","../src/loadScript.ts","../src/resolveVersion.ts"],"sourcesContent":["import type { TernSecureInstanceTreeOptions, TernSecureSDK } from '@tern-secure/types';\n\nimport { loadScript } from './loadScript';\nimport { resolveVersion } from './resolveVersion';\n\nexport type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n ternUIVersion?: string;\n sdkMetadata?: TernSecureSDK;\n scriptHost?: string;\n localPort?: string;\n nonce?: string;\n};\n\nexport const loadTernUIScript = async (options?: LoadTernUISCriptOptions) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-ternui-script]');\n console.log('[TernSecure-shared] Existing script:', existingScript);\n\n if (existingScript) {\n return new Promise((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n resolve(existingScript);\n });\n\n existingScript.addEventListener('error', error => {\n reject(error);\n });\n });\n }\n\n if (!options?.customDomain) {\n throw new Error(\n 'TernUI script requires a custom domain or proxy URL to be specified in options.',\n );\n }\n\n return loadScript(ternUIgetScriptUrl(options), {\n async: true,\n //crossOrigin: undefined,\n beforeLoad: beforeLoadWithOptions(options),\n }).catch(error => {\n console.error('[TernSecure] Failed to load TernUI script:', error);\n throw new Error('Failed to load TernUI script');\n });\n};\n\nexport const ternUIgetScriptUrl = (options: LoadTernUISCriptOptions) => {\n const { ternUIVersion, isTernSecureDev } = options;\n const version = resolveVersion(ternUIVersion);\n\n if (isTernSecureDev) {\n const localHost = process.env.TERN_UI_HOST || 'localhost';\n const localPort = options?.localPort || process.env.TERN_UI_PORT || '4000';\n return `http://${localHost}:${localPort}/ternsecure.browser.js`;\n //return `http://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n }\n //return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n return `https://cdn.jsdelivr.net/npm/@tern-secure/ui@${version}/dist/ternsecure.browser.js`;\n\n //const ternsecureCDN = options?.customDomain ||\n //(options?.proxyUrl && new URL(options.proxyUrl).host) || 'cdn.tern-secure.com';\n //return `${ternsecureCDN}/ternsecure.browser.js`;\n //return `https://${ternsecureCDN}/npm/@ternsecure/tern-ui@${version}/dist/ternsecure.browser.js`;\n};\n\nconst beforeLoadWithOptions =\n (options?: LoadTernUISCriptOptions) => (script: HTMLScriptElement) => {\n const attributes = constructScriptAttributes(options);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value) script.setAttribute(key, String(value));\n });\n console.log('[TernSecure-shared] Script attributes set:', attributes);\n };\n\nexport const constructScriptAttributes = (options?: LoadTernUISCriptOptions) => {\n return {\n 'data-domain': options?.customDomain || '',\n 'data-apikey': options?.apiKey || '',\n 'data-proxyUrl': options?.proxyUrl || '',\n ...(options?.nonce ? { nonce: options.nonce } : {}),\n };\n};\n","type LoadScriptOptions = {\n async?: boolean;\n defer?: boolean;\n crossOrigin?: 'anonymous' | 'use-credentials';\n nonce?: string;\n beforeLoad?: (script: HTMLScriptElement) => void;\n };\n\n export async function loadScript(src ='', options: LoadScriptOptions): Promise<HTMLScriptElement> {\n const { async, defer, crossOrigin, nonce, beforeLoad } = options;\n\n const load = () => {\n return new Promise<HTMLScriptElement>((resolve, reject) => {\n if (!src) {\n reject(new Error('Script src is required'));\n }\n\n if (!document || !document.body) {\n reject(new Error('Document body is not available'));\n }\n\n const script = document.createElement('script');\n\n if (crossOrigin) script.setAttribute('crossorigin', crossOrigin);\n script.async = async || false;\n script.defer = defer || false;\n\n let resolved = false;\n let timeoutId: NodeJS.Timeout | null = null;\n\n const cleanup = () => {\n script.removeEventListener('load', handleLoad);\n script.removeEventListener('error', handleError);\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n };\n \n const handleLoad = () => {\n if (resolved) return;\n console.log(`[loadScript] Script loaded successfully: ${src}`);\n\n resolved = true;\n cleanup();\n resolve(script);\n };\n \n const handleError = (error: ErrorEvent) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n script.remove();\n console.error(`[loadScript] Failed to load script: ${src}`, error);\n reject(new Error(`Failed to load script: ${src}, Error: ${error.message}`));\n };\n \n script.addEventListener('load', handleLoad);\n script.addEventListener('error', handleError);\n\n script.src = src;\n script.nonce = nonce;\n beforeLoad?.(script);\n\n console.log(`[loadScript] Appending script to document body: ${src}`);\n document.body.appendChild(script)\n });\n };\n\n return load()\n\n //return retry(load, { shouldRetry: (_, iterations) => iterations <=5 });\n }","\nexport const resolveVersion = (ternUIVersion: string | undefined, packageVersion = TERN_UI_VERSION) => {\n if (ternUIVersion) {\n return ternUIVersion\n }\n\n return packageVersion;\n}"],"mappings":"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","names":[]}
@@ -1,6 +1,9 @@
1
+ import {
2
+ resolveVersion
3
+ } from "./chunk-PHCVLVZY.mjs";
1
4
  import {
2
5
  loadScript
3
- } from "./chunk-HATJQ74R.mjs";
6
+ } from "./chunk-33U3M4YY.mjs";
4
7
 
5
8
  // src/loadTernUIScript.ts
6
9
  var loadTernUIScript = async (options) => {
@@ -17,7 +20,9 @@ var loadTernUIScript = async (options) => {
17
20
  });
18
21
  }
19
22
  if (!(options == null ? void 0 : options.customDomain)) {
20
- throw new Error("TernUI script requires a custom domain or proxy URL to be specified in options.");
23
+ throw new Error(
24
+ "TernUI script requires a custom domain or proxy URL to be specified in options."
25
+ );
21
26
  }
22
27
  return loadScript(ternUIgetScriptUrl(options), {
23
28
  async: true,
@@ -29,14 +34,14 @@ var loadTernUIScript = async (options) => {
29
34
  });
30
35
  };
31
36
  var ternUIgetScriptUrl = (options) => {
32
- const isTernSecureDev = options == null ? void 0 : options.isTernSecureDev;
33
- const version = (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest";
37
+ const { ternUIVersion, isTernSecureDev } = options;
38
+ const version = resolveVersion(ternUIVersion);
34
39
  if (isTernSecureDev) {
35
40
  const localHost = process.env.TERN_UI_HOST || "localhost";
36
41
  const localPort = (options == null ? void 0 : options.localPort) || process.env.TERN_UI_PORT || "4000";
37
42
  return `http://${localHost}:${localPort}/ternsecure.browser.js`;
38
43
  }
39
- return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`;
44
+ return `https://cdn.jsdelivr.net/npm/@tern-secure/ui@${version}/dist/ternsecure.browser.js`;
40
45
  };
41
46
  var beforeLoadWithOptions = (options) => (script) => {
42
47
  const attributes = constructScriptAttributes(options);
@@ -49,9 +54,7 @@ var constructScriptAttributes = (options) => {
49
54
  return {
50
55
  "data-domain": (options == null ? void 0 : options.customDomain) || "",
51
56
  "data-apikey": (options == null ? void 0 : options.apiKey) || "",
52
- "data-environment": process.env.NODE_ENV || "development",
53
57
  "data-proxyUrl": (options == null ? void 0 : options.proxyUrl) || "",
54
- "data-version": (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest",
55
58
  ...(options == null ? void 0 : options.nonce) ? { nonce: options.nonce } : {}
56
59
  };
57
60
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/loadTernUIScript.ts"],"sourcesContent":["import type { TernSecureInstanceTreeOptions } from \"@tern-secure/types\";\nimport { loadScript } from \"./loadScript\";\n\n\nexport type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n version?: string;\n scriptHost?: string;\n localPort?: string;\n nonce?: string;\n}\n\n\nexport const loadTernUIScript = async (options?: LoadTernUISCriptOptions) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-ternui-script]');\n console.log('[TernSecure-shared] Existing script:', existingScript);\n\n if (existingScript) {\n return new Promise((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n resolve(existingScript);\n });\n\n existingScript.addEventListener('error', (error) => {\n reject(error);\n });\n });\n }\n\n if (!options?.customDomain) {\n throw new Error('TernUI script requires a custom domain or proxy URL to be specified in options.');\n }\n \n return loadScript(ternUIgetScriptUrl(options), {\n async: true,\n //crossOrigin: undefined,\n beforeLoad: beforeLoadWithOptions(options)\n }).catch((error) => {\n console.error('[TernSecure] Failed to load TernUI script:', error);\n throw new Error('Failed to load TernUI script');\n });\n }\n\nexport const ternUIgetScriptUrl = (options?: LoadTernUISCriptOptions) => {\n const isTernSecureDev = options?.isTernSecureDev\n const version = options?.version || process.env.TERN_UI_VERSION || 'latest';\n\n if ( isTernSecureDev) {\n const localHost = process.env.TERN_UI_HOST || 'localhost';\n const localPort = options?.localPort || process.env.TERN_UI_PORT || '4000';\n return `http://${localHost}:${localPort}/ternsecure.browser.js`;\n //return `http://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n }\n return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n\n //const ternsecureCDN = options?.customDomain || \n //(options?.proxyUrl && new URL(options.proxyUrl).host) || 'cdn.tern-secure.com';\n //return `${ternsecureCDN}/ternsecure.browser.js`;\n //return `https://${ternsecureCDN}/npm/@ternsecure/tern-ui@${version}/dist/ternsecure.browser.js`;\n\n}\n\n \nconst beforeLoadWithOptions = (options?: LoadTernUISCriptOptions) => (script: HTMLScriptElement) => {\n const attributes = constructScriptAttributes(options);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value) script.setAttribute(key, String(value));\n });\n console.log('[TernSecure-shared] Script attributes set:', attributes);\n};\n\nexport const constructScriptAttributes = (options?: LoadTernUISCriptOptions) => {\n return {\n 'data-domain': options?.customDomain || '',\n 'data-apikey': options?.apiKey || '',\n 'data-environment': process.env.NODE_ENV || 'development',\n 'data-proxyUrl': options?.proxyUrl || '',\n 'data-version': options?.version || process.env.TERN_UI_VERSION || 'latest',\n ...(options?.nonce ? { nonce: options.nonce } : {})\n };\n};"],"mappings":";;;;;AAeO,IAAM,mBAAmB,OAAO,YAAsC;AAC3E,QAAM,iBAAkB,SAAS,cAAiC,4BAA4B;AAC9F,UAAQ,IAAI,wCAAwC,cAAc;AAElE,MAAI,gBAAgB;AAClB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,qBAAe,iBAAiB,QAAQ,MAAM;AAC5C,gBAAQ,cAAc;AAAA,MACxB,CAAC;AAED,qBAAe,iBAAiB,SAAS,CAAC,UAAU;AAClD,eAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MAAI,EAAC,mCAAS,eAAc;AAC1B,UAAM,IAAI,MAAM,iFAAiF;AAAA,EACnG;AAEA,SAAO,WAAW,mBAAmB,OAAO,GAAG;AAAA,IAC7C,OAAO;AAAA;AAAA,IAEN,YAAY,sBAAsB,OAAO;AAAA,EAC1C,CAAC,EAAE,MAAM,CAAC,UAAU;AAClB,YAAQ,MAAM,8CAA8C,KAAK;AACjE,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD,CAAC;AACH;AAEK,IAAM,qBAAqB,CAAC,YAAsC;AACrE,QAAM,kBAAkB,mCAAS;AACjC,QAAM,WAAU,mCAAS,YAAW,QAAQ,IAAI,mBAAmB;AAEnE,MAAK,iBAAiB;AAClB,UAAM,YAAY,QAAQ,IAAI,gBAAgB;AAC9C,UAAM,aAAY,mCAAS,cAAa,QAAQ,IAAI,gBAAgB;AACpE,WAAO,UAAU,SAAS,IAAI,SAAS;AAAA,EAE3C;AACA,SAAO;AAOX;AAGA,IAAM,wBAAwB,CAAC,YAAsC,CAAC,WAA8B;AAClG,QAAM,aAAa,0BAA0B,OAAO;AACpD,SAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACnD,QAAI,MAAO,QAAO,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,EACnD,CAAC;AACD,UAAQ,IAAI,8CAA8C,UAAU;AACtE;AAEO,IAAM,4BAA4B,CAAC,YAAsC;AAC9E,SAAO;AAAA,IACL,gBAAe,mCAAS,iBAAgB;AAAA,IACxC,gBAAe,mCAAS,WAAU;AAAA,IAClC,oBAAoB,QAAQ,IAAI,YAAY;AAAA,IAC5C,kBAAiB,mCAAS,aAAY;AAAA,IACtC,iBAAgB,mCAAS,YAAW,QAAQ,IAAI,mBAAmB;AAAA,IACnE,IAAI,mCAAS,SAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,EACnD;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/loadTernUIScript.ts"],"sourcesContent":["import type { TernSecureInstanceTreeOptions, TernSecureSDK } from '@tern-secure/types';\n\nimport { loadScript } from './loadScript';\nimport { resolveVersion } from './resolveVersion';\n\nexport type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {\n apiKey?: string;\n customDomain?: string;\n proxyUrl?: string;\n ternUIVersion?: string;\n sdkMetadata?: TernSecureSDK;\n scriptHost?: string;\n localPort?: string;\n nonce?: string;\n};\n\nexport const loadTernUIScript = async (options?: LoadTernUISCriptOptions) => {\n const existingScript = document.querySelector<HTMLScriptElement>('script[data-ternui-script]');\n console.log('[TernSecure-shared] Existing script:', existingScript);\n\n if (existingScript) {\n return new Promise((resolve, reject) => {\n existingScript.addEventListener('load', () => {\n resolve(existingScript);\n });\n\n existingScript.addEventListener('error', error => {\n reject(error);\n });\n });\n }\n\n if (!options?.customDomain) {\n throw new Error(\n 'TernUI script requires a custom domain or proxy URL to be specified in options.',\n );\n }\n\n return loadScript(ternUIgetScriptUrl(options), {\n async: true,\n //crossOrigin: undefined,\n beforeLoad: beforeLoadWithOptions(options),\n }).catch(error => {\n console.error('[TernSecure] Failed to load TernUI script:', error);\n throw new Error('Failed to load TernUI script');\n });\n};\n\nexport const ternUIgetScriptUrl = (options: LoadTernUISCriptOptions) => {\n const { ternUIVersion, isTernSecureDev } = options;\n const version = resolveVersion(ternUIVersion);\n\n if (isTernSecureDev) {\n const localHost = process.env.TERN_UI_HOST || 'localhost';\n const localPort = options?.localPort || process.env.TERN_UI_PORT || '4000';\n return `http://${localHost}:${localPort}/ternsecure.browser.js`;\n //return `http://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n }\n //return `https://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`\n return `https://cdn.jsdelivr.net/npm/@tern-secure/ui@${version}/dist/ternsecure.browser.js`;\n\n //const ternsecureCDN = options?.customDomain ||\n //(options?.proxyUrl && new URL(options.proxyUrl).host) || 'cdn.tern-secure.com';\n //return `${ternsecureCDN}/ternsecure.browser.js`;\n //return `https://${ternsecureCDN}/npm/@ternsecure/tern-ui@${version}/dist/ternsecure.browser.js`;\n};\n\nconst beforeLoadWithOptions =\n (options?: LoadTernUISCriptOptions) => (script: HTMLScriptElement) => {\n const attributes = constructScriptAttributes(options);\n Object.entries(attributes).forEach(([key, value]) => {\n if (value) script.setAttribute(key, String(value));\n });\n console.log('[TernSecure-shared] Script attributes set:', attributes);\n };\n\nexport const constructScriptAttributes = (options?: LoadTernUISCriptOptions) => {\n return {\n 'data-domain': options?.customDomain || '',\n 'data-apikey': options?.apiKey || '',\n 'data-proxyUrl': options?.proxyUrl || '',\n ...(options?.nonce ? { nonce: options.nonce } : {}),\n };\n};\n"],"mappings":";;;;;;;;AAgBO,IAAM,mBAAmB,OAAO,YAAsC;AAC3E,QAAM,iBAAiB,SAAS,cAAiC,4BAA4B;AAC7F,UAAQ,IAAI,wCAAwC,cAAc;AAElE,MAAI,gBAAgB;AAClB,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,qBAAe,iBAAiB,QAAQ,MAAM;AAC5C,gBAAQ,cAAc;AAAA,MACxB,CAAC;AAED,qBAAe,iBAAiB,SAAS,WAAS;AAChD,eAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,MAAI,EAAC,mCAAS,eAAc;AAC1B,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,WAAW,mBAAmB,OAAO,GAAG;AAAA,IAC7C,OAAO;AAAA;AAAA,IAEP,YAAY,sBAAsB,OAAO;AAAA,EAC3C,CAAC,EAAE,MAAM,WAAS;AAChB,YAAQ,MAAM,8CAA8C,KAAK;AACjE,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD,CAAC;AACH;AAEO,IAAM,qBAAqB,CAAC,YAAqC;AACtE,QAAM,EAAE,eAAe,gBAAgB,IAAI;AAC3C,QAAM,UAAU,eAAe,aAAa;AAE5C,MAAI,iBAAiB;AACnB,UAAM,YAAY,QAAQ,IAAI,gBAAgB;AAC9C,UAAM,aAAY,mCAAS,cAAa,QAAQ,IAAI,gBAAgB;AACpE,WAAO,UAAU,SAAS,IAAI,SAAS;AAAA,EAEzC;AAEA,SAAO,gDAAgD,OAAO;AAMhE;AAEA,IAAM,wBACJ,CAAC,YAAsC,CAAC,WAA8B;AACpE,QAAM,aAAa,0BAA0B,OAAO;AACpD,SAAO,QAAQ,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACnD,QAAI,MAAO,QAAO,aAAa,KAAK,OAAO,KAAK,CAAC;AAAA,EACnD,CAAC;AACD,UAAQ,IAAI,8CAA8C,UAAU;AACtE;AAEK,IAAM,4BAA4B,CAAC,YAAsC;AAC9E,SAAO;AAAA,IACL,gBAAe,mCAAS,iBAAgB;AAAA,IACxC,gBAAe,mCAAS,WAAU;AAAA,IAClC,kBAAiB,mCAAS,aAAY;AAAA,IACtC,IAAI,mCAAS,SAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,EACnD;AACF;","names":[]}
@@ -0,0 +1,14 @@
1
+ import { Autocomplete } from '@tern-secure/types';
2
+
3
+ type WithPathPatternWildcard<T = string> = `${T & string}(.*)`;
4
+ type PathPattern = Autocomplete<WithPathPatternWildcard>;
5
+ type PathMatcherParam = Array<RegExp | PathPattern> | RegExp | PathPattern;
6
+ /**
7
+ * Creates a function that matches paths against a set of patterns.
8
+ *
9
+ * @param patterns - A string, RegExp, or array of patterns to match against
10
+ * @returns A function that takes a pathname and returns true if it matches any of the patterns
11
+ */
12
+ declare const createPathMatcher: (patterns: PathMatcherParam) => (pathname: string) => boolean;
13
+
14
+ export { type PathMatcherParam, type PathPattern, type WithPathPatternWildcard, createPathMatcher };
@@ -0,0 +1,14 @@
1
+ import { Autocomplete } from '@tern-secure/types';
2
+
3
+ type WithPathPatternWildcard<T = string> = `${T & string}(.*)`;
4
+ type PathPattern = Autocomplete<WithPathPatternWildcard>;
5
+ type PathMatcherParam = Array<RegExp | PathPattern> | RegExp | PathPattern;
6
+ /**
7
+ * Creates a function that matches paths against a set of patterns.
8
+ *
9
+ * @param patterns - A string, RegExp, or array of patterns to match against
10
+ * @returns A function that takes a pathname and returns true if it matches any of the patterns
11
+ */
12
+ declare const createPathMatcher: (patterns: PathMatcherParam) => (pathname: string) => boolean;
13
+
14
+ export { type PathMatcherParam, type PathPattern, type WithPathPatternWildcard, createPathMatcher };