@tern-secure/shared 1.0.0

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 (61) hide show
  1. package/dist/chunk-HATJQ74R.mjs +56 -0
  2. package/dist/chunk-HATJQ74R.mjs.map +1 -0
  3. package/dist/derivedAuthState.d.mts +9 -0
  4. package/dist/derivedAuthState.d.ts +9 -0
  5. package/dist/derivedAuthState.js +75 -0
  6. package/dist/derivedAuthState.js.map +1 -0
  7. package/dist/derivedAuthState.mjs +49 -0
  8. package/dist/derivedAuthState.mjs.map +1 -0
  9. package/dist/eventBus.d.mts +8 -0
  10. package/dist/eventBus.d.ts +8 -0
  11. package/dist/eventBus.js +54 -0
  12. package/dist/eventBus.js.map +1 -0
  13. package/dist/eventBus.mjs +29 -0
  14. package/dist/eventBus.mjs.map +1 -0
  15. package/dist/loadScript.d.mts +10 -0
  16. package/dist/loadScript.d.ts +10 -0
  17. package/dist/loadScript.js +80 -0
  18. package/dist/loadScript.js.map +1 -0
  19. package/dist/loadScript.mjs +7 -0
  20. package/dist/loadScript.mjs.map +1 -0
  21. package/dist/loadTernUIScript.d.mts +24 -0
  22. package/dist/loadTernUIScript.d.ts +24 -0
  23. package/dist/loadTernUIScript.js +140 -0
  24. package/dist/loadTernUIScript.js.map +1 -0
  25. package/dist/loadTernUIScript.mjs +63 -0
  26. package/dist/loadTernUIScript.mjs.map +1 -0
  27. package/dist/react/index.d.mts +54 -0
  28. package/dist/react/index.d.ts +54 -0
  29. package/dist/react/index.js +116 -0
  30. package/dist/react/index.js.map +1 -0
  31. package/dist/react/index.mjs +68 -0
  32. package/dist/react/index.mjs.map +1 -0
  33. package/dist/retry.d.mts +46 -0
  34. package/dist/retry.d.ts +46 -0
  35. package/dist/retry.js +85 -0
  36. package/dist/retry.js.map +1 -0
  37. package/dist/retry.mjs +60 -0
  38. package/dist/retry.mjs.map +1 -0
  39. package/dist/types/derivedAuthState.d.ts +7 -0
  40. package/dist/types/derivedAuthState.d.ts.map +1 -0
  41. package/dist/types/eventBus.d.ts +7 -0
  42. package/dist/types/eventBus.d.ts.map +1 -0
  43. package/dist/types/loadScript.d.ts +10 -0
  44. package/dist/types/loadScript.d.ts.map +1 -0
  45. package/dist/types/loadTernUIScript.d.ts +22 -0
  46. package/dist/types/loadTernUIScript.d.ts.map +1 -0
  47. package/dist/types/nextjs/client/auth-actions.d.ts +1 -0
  48. package/dist/types/nextjs/client/auth-actions.d.ts.map +1 -0
  49. package/dist/types/react/hooks/index.d.ts +2 -0
  50. package/dist/types/react/hooks/index.d.ts.map +1 -0
  51. package/dist/types/react/hooks/useTernSecure.d.ts +3 -0
  52. package/dist/types/react/hooks/useTernSecure.d.ts.map +1 -0
  53. package/dist/types/react/index.d.ts +4 -0
  54. package/dist/types/react/index.d.ts.map +1 -0
  55. package/dist/types/react/ternsecureCtx.d.ts +26 -0
  56. package/dist/types/react/ternsecureCtx.d.ts.map +1 -0
  57. package/dist/types/react/ternsecureProvider.d.ts +20 -0
  58. package/dist/types/react/ternsecureProvider.d.ts.map +1 -0
  59. package/dist/types/retry.d.ts +46 -0
  60. package/dist/types/retry.d.ts.map +1 -0
  61. package/package.json +88 -0
@@ -0,0 +1,56 @@
1
+ // src/loadScript.ts
2
+ async function loadScript(src = "", options) {
3
+ const { async, defer, crossOrigin, nonce, beforeLoad } = options;
4
+ const load = () => {
5
+ return new Promise((resolve, reject) => {
6
+ if (!src) {
7
+ reject(new Error("Script src is required"));
8
+ }
9
+ if (!document || !document.body) {
10
+ reject(new Error("Document body is not available"));
11
+ }
12
+ const script = document.createElement("script");
13
+ if (crossOrigin) script.setAttribute("crossorigin", crossOrigin);
14
+ script.async = async || false;
15
+ script.defer = defer || false;
16
+ let resolved = false;
17
+ let timeoutId = null;
18
+ const cleanup = () => {
19
+ script.removeEventListener("load", handleLoad);
20
+ script.removeEventListener("error", handleError);
21
+ if (timeoutId) {
22
+ clearTimeout(timeoutId);
23
+ timeoutId = null;
24
+ }
25
+ };
26
+ const handleLoad = () => {
27
+ if (resolved) return;
28
+ console.log(`[loadScript] Script loaded successfully: ${src}`);
29
+ resolved = true;
30
+ cleanup();
31
+ resolve(script);
32
+ };
33
+ const handleError = (error) => {
34
+ if (resolved) return;
35
+ resolved = true;
36
+ cleanup();
37
+ script.remove();
38
+ console.error(`[loadScript] Failed to load script: ${src}`, error);
39
+ reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));
40
+ };
41
+ script.addEventListener("load", handleLoad);
42
+ script.addEventListener("error", handleError);
43
+ script.src = src;
44
+ script.nonce = nonce;
45
+ beforeLoad == null ? void 0 : beforeLoad(script);
46
+ console.log(`[loadScript] Appending script to document body: ${src}`);
47
+ document.body.appendChild(script);
48
+ });
49
+ };
50
+ return load();
51
+ }
52
+
53
+ export {
54
+ loadScript
55
+ };
56
+ //# sourceMappingURL=chunk-HATJQ74R.mjs.map
@@ -0,0 +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":";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":[]}
@@ -0,0 +1,9 @@
1
+ import { TernSecureState } from '@tern-secure/types';
2
+
3
+ /**
4
+ * Default state for derived auth state
5
+ */
6
+ declare const DEFAULT_TERN_SECURE_STATE: TernSecureState;
7
+ declare const deriveAuthState: (internalState: TernSecureState | undefined) => TernSecureState;
8
+
9
+ export { DEFAULT_TERN_SECURE_STATE, deriveAuthState };
@@ -0,0 +1,9 @@
1
+ import { TernSecureState } from '@tern-secure/types';
2
+
3
+ /**
4
+ * Default state for derived auth state
5
+ */
6
+ declare const DEFAULT_TERN_SECURE_STATE: TernSecureState;
7
+ declare const deriveAuthState: (internalState: TernSecureState | undefined) => TernSecureState;
8
+
9
+ export { DEFAULT_TERN_SECURE_STATE, deriveAuthState };
@@ -0,0 +1,75 @@
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/derivedAuthState.ts
21
+ var derivedAuthState_exports = {};
22
+ __export(derivedAuthState_exports, {
23
+ DEFAULT_TERN_SECURE_STATE: () => DEFAULT_TERN_SECURE_STATE,
24
+ deriveAuthState: () => deriveAuthState
25
+ });
26
+ module.exports = __toCommonJS(derivedAuthState_exports);
27
+ var DEFAULT_TERN_SECURE_STATE = {
28
+ userId: null,
29
+ isLoaded: false,
30
+ error: null,
31
+ isValid: false,
32
+ isVerified: false,
33
+ isAuthenticated: false,
34
+ token: null,
35
+ email: null,
36
+ status: "loading",
37
+ requiresVerification: false,
38
+ user: null
39
+ };
40
+ var deriveAuthState = (internalState) => {
41
+ if (!internalState) {
42
+ console.warn("[deriveAuthState] internalState is undefined or null. Returning default state.");
43
+ return DEFAULT_TERN_SECURE_STATE;
44
+ }
45
+ const userId = internalState.userId || null;
46
+ const isLoaded = internalState.isLoaded || false;
47
+ const isValid = internalState.isValid || false;
48
+ const isVerified = internalState.isVerified || false;
49
+ const isAuthenticated = internalState.isAuthenticated || false;
50
+ const token = internalState.token || null;
51
+ const email = internalState.email || null;
52
+ const error = internalState.error || null;
53
+ const status = internalState.status || "loading";
54
+ const requiresVerification = internalState.requiresVerification || false;
55
+ const user = internalState.user || null;
56
+ return {
57
+ userId,
58
+ isLoaded,
59
+ isValid,
60
+ isVerified,
61
+ isAuthenticated,
62
+ token,
63
+ email,
64
+ error,
65
+ status,
66
+ requiresVerification,
67
+ user
68
+ };
69
+ };
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ DEFAULT_TERN_SECURE_STATE,
73
+ deriveAuthState
74
+ });
75
+ //# sourceMappingURL=derivedAuthState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/derivedAuthState.ts"],"sourcesContent":["import { \n TernSecureState,\n TernSecureUser\n //DEFAULT_TERN_SECURE_STATE\n} from \"@tern-secure/types\";\n\n\n/**\n * Default state for derived auth state\n */\n//export const DEFAULT_DERIVED_AUTH_STATE = DEFAULT_TERN_SECURE_STATE\n\nexport const DEFAULT_TERN_SECURE_STATE: TernSecureState = {\n userId: null,\n isLoaded: false,\n error: null,\n isValid: false,\n isVerified: false,\n isAuthenticated: false,\n token: null,\n email: null,\n status: \"loading\",\n requiresVerification: false,\n user: null\n};\n\n\nexport const deriveAuthState = (internalState: TernSecureState | undefined ): TernSecureState => {\n \n if (!internalState) {\n console.warn('[deriveAuthState] internalState is undefined or null. Returning default state.');\n return DEFAULT_TERN_SECURE_STATE\n }\n\n const userId = internalState.userId || null;\n const isLoaded = internalState.isLoaded || false;\n const isValid = internalState.isValid || false;\n const isVerified = internalState.isVerified || false;\n const isAuthenticated = internalState.isAuthenticated || false;\n const token = internalState.token || null;\n const email = internalState.email || null;\n const error = internalState.error || null;\n const status = internalState.status || \"loading\";\n const requiresVerification = internalState.requiresVerification || false;\n const user = internalState.user || null;\n\n return {\n userId,\n isLoaded,\n isValid,\n isVerified,\n isAuthenticated,\n token,\n email,\n error,\n status,\n requiresVerification,\n user\n }\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYO,IAAM,4BAA6C;AAAA,EACxD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,sBAAsB;AAAA,EACtB,MAAM;AACR;AAGO,IAAM,kBAAkB,CAAC,kBAAiE;AAE/F,MAAI,CAAC,eAAe;AAClB,YAAQ,KAAK,gFAAgF;AAC7F,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,WAAW,cAAc,YAAY;AAC3C,QAAM,UAAU,cAAc,WAAW;AACzC,QAAM,aAAa,cAAc,cAAc;AAC/C,QAAM,kBAAkB,cAAc,mBAAmB;AACzD,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,uBAAuB,cAAc,wBAAwB;AACnE,QAAM,OAAO,cAAc,QAAQ;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,49 @@
1
+ // src/derivedAuthState.ts
2
+ var DEFAULT_TERN_SECURE_STATE = {
3
+ userId: null,
4
+ isLoaded: false,
5
+ error: null,
6
+ isValid: false,
7
+ isVerified: false,
8
+ isAuthenticated: false,
9
+ token: null,
10
+ email: null,
11
+ status: "loading",
12
+ requiresVerification: false,
13
+ user: null
14
+ };
15
+ var deriveAuthState = (internalState) => {
16
+ if (!internalState) {
17
+ console.warn("[deriveAuthState] internalState is undefined or null. Returning default state.");
18
+ return DEFAULT_TERN_SECURE_STATE;
19
+ }
20
+ const userId = internalState.userId || null;
21
+ const isLoaded = internalState.isLoaded || false;
22
+ const isValid = internalState.isValid || false;
23
+ const isVerified = internalState.isVerified || false;
24
+ const isAuthenticated = internalState.isAuthenticated || false;
25
+ const token = internalState.token || null;
26
+ const email = internalState.email || null;
27
+ const error = internalState.error || null;
28
+ const status = internalState.status || "loading";
29
+ const requiresVerification = internalState.requiresVerification || false;
30
+ const user = internalState.user || null;
31
+ return {
32
+ userId,
33
+ isLoaded,
34
+ isValid,
35
+ isVerified,
36
+ isAuthenticated,
37
+ token,
38
+ email,
39
+ error,
40
+ status,
41
+ requiresVerification,
42
+ user
43
+ };
44
+ };
45
+ export {
46
+ DEFAULT_TERN_SECURE_STATE,
47
+ deriveAuthState
48
+ };
49
+ //# sourceMappingURL=derivedAuthState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/derivedAuthState.ts"],"sourcesContent":["import { \n TernSecureState,\n TernSecureUser\n //DEFAULT_TERN_SECURE_STATE\n} from \"@tern-secure/types\";\n\n\n/**\n * Default state for derived auth state\n */\n//export const DEFAULT_DERIVED_AUTH_STATE = DEFAULT_TERN_SECURE_STATE\n\nexport const DEFAULT_TERN_SECURE_STATE: TernSecureState = {\n userId: null,\n isLoaded: false,\n error: null,\n isValid: false,\n isVerified: false,\n isAuthenticated: false,\n token: null,\n email: null,\n status: \"loading\",\n requiresVerification: false,\n user: null\n};\n\n\nexport const deriveAuthState = (internalState: TernSecureState | undefined ): TernSecureState => {\n \n if (!internalState) {\n console.warn('[deriveAuthState] internalState is undefined or null. Returning default state.');\n return DEFAULT_TERN_SECURE_STATE\n }\n\n const userId = internalState.userId || null;\n const isLoaded = internalState.isLoaded || false;\n const isValid = internalState.isValid || false;\n const isVerified = internalState.isVerified || false;\n const isAuthenticated = internalState.isAuthenticated || false;\n const token = internalState.token || null;\n const email = internalState.email || null;\n const error = internalState.error || null;\n const status = internalState.status || \"loading\";\n const requiresVerification = internalState.requiresVerification || false;\n const user = internalState.user || null;\n\n return {\n userId,\n isLoaded,\n isValid,\n isVerified,\n isAuthenticated,\n token,\n email,\n error,\n status,\n requiresVerification,\n user\n }\n};"],"mappings":";AAYO,IAAM,4BAA6C;AAAA,EACxD,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,sBAAsB;AAAA,EACtB,MAAM;AACR;AAGO,IAAM,kBAAkB,CAAC,kBAAiE;AAE/F,MAAI,CAAC,eAAe;AAClB,YAAQ,KAAK,gFAAgF;AAC7F,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,WAAW,cAAc,YAAY;AAC3C,QAAM,UAAU,cAAc,WAAW;AACzC,QAAM,aAAa,cAAc,cAAc;AAC/C,QAAM,kBAAkB,cAAc,mBAAmB;AACzD,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,QAAQ,cAAc,SAAS;AACrC,QAAM,SAAS,cAAc,UAAU;AACvC,QAAM,uBAAuB,cAAc,wBAAwB;AACnE,QAAM,OAAO,cAAc,QAAQ;AAEnC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,8 @@
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
+ }
7
+
8
+ export { EventEmitter };
@@ -0,0 +1,8 @@
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
+ }
7
+
8
+ export { EventEmitter };
@@ -0,0 +1,54 @@
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/eventBus.ts
21
+ var eventBus_exports = {};
22
+ __export(eventBus_exports, {
23
+ EventEmitter: () => EventEmitter
24
+ });
25
+ module.exports = __toCommonJS(eventBus_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
+ };
50
+ // Annotate the CommonJS export names for ESM import in node:
51
+ 0 && (module.exports = {
52
+ EventEmitter
53
+ });
54
+ //# sourceMappingURL=eventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventBus.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}"],"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;AACJ;","names":[]}
@@ -0,0 +1,29 @@
1
+ // src/eventBus.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
+ };
26
+ export {
27
+ EventEmitter
28
+ };
29
+ //# sourceMappingURL=eventBus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/eventBus.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}"],"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;AACJ;","names":[]}
@@ -0,0 +1,10 @@
1
+ type LoadScriptOptions = {
2
+ async?: boolean;
3
+ defer?: boolean;
4
+ crossOrigin?: 'anonymous' | 'use-credentials';
5
+ nonce?: string;
6
+ beforeLoad?: (script: HTMLScriptElement) => void;
7
+ };
8
+ declare function loadScript(src: string | undefined, options: LoadScriptOptions): Promise<HTMLScriptElement>;
9
+
10
+ export { loadScript };
@@ -0,0 +1,10 @@
1
+ type LoadScriptOptions = {
2
+ async?: boolean;
3
+ defer?: boolean;
4
+ crossOrigin?: 'anonymous' | 'use-credentials';
5
+ nonce?: string;
6
+ beforeLoad?: (script: HTMLScriptElement) => void;
7
+ };
8
+ declare function loadScript(src: string | undefined, options: LoadScriptOptions): Promise<HTMLScriptElement>;
9
+
10
+ export { loadScript };
@@ -0,0 +1,80 @@
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/loadScript.ts
21
+ var loadScript_exports = {};
22
+ __export(loadScript_exports, {
23
+ loadScript: () => loadScript
24
+ });
25
+ module.exports = __toCommonJS(loadScript_exports);
26
+ async function loadScript(src = "", options) {
27
+ const { async, defer, crossOrigin, nonce, beforeLoad } = options;
28
+ const load = () => {
29
+ return new Promise((resolve, reject) => {
30
+ if (!src) {
31
+ reject(new Error("Script src is required"));
32
+ }
33
+ if (!document || !document.body) {
34
+ reject(new Error("Document body is not available"));
35
+ }
36
+ const script = document.createElement("script");
37
+ if (crossOrigin) script.setAttribute("crossorigin", crossOrigin);
38
+ script.async = async || false;
39
+ script.defer = defer || false;
40
+ let resolved = false;
41
+ let timeoutId = null;
42
+ const cleanup = () => {
43
+ script.removeEventListener("load", handleLoad);
44
+ script.removeEventListener("error", handleError);
45
+ if (timeoutId) {
46
+ clearTimeout(timeoutId);
47
+ timeoutId = null;
48
+ }
49
+ };
50
+ const handleLoad = () => {
51
+ if (resolved) return;
52
+ console.log(`[loadScript] Script loaded successfully: ${src}`);
53
+ resolved = true;
54
+ cleanup();
55
+ resolve(script);
56
+ };
57
+ const handleError = (error) => {
58
+ if (resolved) return;
59
+ resolved = true;
60
+ cleanup();
61
+ script.remove();
62
+ console.error(`[loadScript] Failed to load script: ${src}`, error);
63
+ reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));
64
+ };
65
+ script.addEventListener("load", handleLoad);
66
+ script.addEventListener("error", handleError);
67
+ script.src = src;
68
+ script.nonce = nonce;
69
+ beforeLoad == null ? void 0 : beforeLoad(script);
70
+ console.log(`[loadScript] Appending script to document body: ${src}`);
71
+ document.body.appendChild(script);
72
+ });
73
+ };
74
+ return load();
75
+ }
76
+ // Annotate the CommonJS export names for ESM import in node:
77
+ 0 && (module.exports = {
78
+ loadScript
79
+ });
80
+ //# sourceMappingURL=loadScript.js.map
@@ -0,0 +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":[]}
@@ -0,0 +1,7 @@
1
+ import {
2
+ loadScript
3
+ } from "./chunk-HATJQ74R.mjs";
4
+ export {
5
+ loadScript
6
+ };
7
+ //# sourceMappingURL=loadScript.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,24 @@
1
+ import { TernSecureInstanceTreeOptions } from '@tern-secure/types';
2
+
3
+ type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {
4
+ apiKey?: string;
5
+ customDomain?: string;
6
+ proxyUrl?: string;
7
+ version?: string;
8
+ isLocalDev?: boolean;
9
+ scriptHost?: string;
10
+ localPort?: string;
11
+ nonce?: string;
12
+ };
13
+ declare const loadTernUIScript: (options?: LoadTernUISCriptOptions) => Promise<unknown>;
14
+ declare const ternUIgetScriptUrl: (options?: LoadTernUISCriptOptions) => string;
15
+ declare const constructScriptAttributes: (options?: LoadTernUISCriptOptions) => {
16
+ nonce?: string | undefined;
17
+ 'data-domain': string;
18
+ 'data-apikey': string;
19
+ 'data-environment': string;
20
+ 'data-proxyUrl': string;
21
+ 'data-version': string;
22
+ };
23
+
24
+ export { type LoadTernUISCriptOptions, constructScriptAttributes, loadTernUIScript, ternUIgetScriptUrl };
@@ -0,0 +1,24 @@
1
+ import { TernSecureInstanceTreeOptions } from '@tern-secure/types';
2
+
3
+ type LoadTernUISCriptOptions = TernSecureInstanceTreeOptions & {
4
+ apiKey?: string;
5
+ customDomain?: string;
6
+ proxyUrl?: string;
7
+ version?: string;
8
+ isLocalDev?: boolean;
9
+ scriptHost?: string;
10
+ localPort?: string;
11
+ nonce?: string;
12
+ };
13
+ declare const loadTernUIScript: (options?: LoadTernUISCriptOptions) => Promise<unknown>;
14
+ declare const ternUIgetScriptUrl: (options?: LoadTernUISCriptOptions) => string;
15
+ declare const constructScriptAttributes: (options?: LoadTernUISCriptOptions) => {
16
+ nonce?: string | undefined;
17
+ 'data-domain': string;
18
+ 'data-apikey': string;
19
+ 'data-environment': string;
20
+ 'data-proxyUrl': string;
21
+ 'data-version': string;
22
+ };
23
+
24
+ export { type LoadTernUISCriptOptions, constructScriptAttributes, loadTernUIScript, ternUIgetScriptUrl };
@@ -0,0 +1,140 @@
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/loadTernUIScript.ts
21
+ var loadTernUIScript_exports = {};
22
+ __export(loadTernUIScript_exports, {
23
+ constructScriptAttributes: () => constructScriptAttributes,
24
+ loadTernUIScript: () => loadTernUIScript,
25
+ ternUIgetScriptUrl: () => ternUIgetScriptUrl
26
+ });
27
+ module.exports = __toCommonJS(loadTernUIScript_exports);
28
+
29
+ // src/loadScript.ts
30
+ async function loadScript(src = "", options) {
31
+ const { async, defer, crossOrigin, nonce, beforeLoad } = options;
32
+ const load = () => {
33
+ return new Promise((resolve, reject) => {
34
+ if (!src) {
35
+ reject(new Error("Script src is required"));
36
+ }
37
+ if (!document || !document.body) {
38
+ reject(new Error("Document body is not available"));
39
+ }
40
+ const script = document.createElement("script");
41
+ if (crossOrigin) script.setAttribute("crossorigin", crossOrigin);
42
+ script.async = async || false;
43
+ script.defer = defer || false;
44
+ let resolved = false;
45
+ let timeoutId = null;
46
+ const cleanup = () => {
47
+ script.removeEventListener("load", handleLoad);
48
+ script.removeEventListener("error", handleError);
49
+ if (timeoutId) {
50
+ clearTimeout(timeoutId);
51
+ timeoutId = null;
52
+ }
53
+ };
54
+ const handleLoad = () => {
55
+ if (resolved) return;
56
+ console.log(`[loadScript] Script loaded successfully: ${src}`);
57
+ resolved = true;
58
+ cleanup();
59
+ resolve(script);
60
+ };
61
+ const handleError = (error) => {
62
+ if (resolved) return;
63
+ resolved = true;
64
+ cleanup();
65
+ script.remove();
66
+ console.error(`[loadScript] Failed to load script: ${src}`, error);
67
+ reject(new Error(`Failed to load script: ${src}, Error: ${error.message || error}`));
68
+ };
69
+ script.addEventListener("load", handleLoad);
70
+ script.addEventListener("error", handleError);
71
+ script.src = src;
72
+ script.nonce = nonce;
73
+ beforeLoad == null ? void 0 : beforeLoad(script);
74
+ console.log(`[loadScript] Appending script to document body: ${src}`);
75
+ document.body.appendChild(script);
76
+ });
77
+ };
78
+ return load();
79
+ }
80
+
81
+ // src/loadTernUIScript.ts
82
+ var loadTernUIScript = async (options) => {
83
+ const existingScript = document.querySelector("script[data-ternui-script]");
84
+ console.log("[TernSecure-shared] Existing script:", existingScript);
85
+ if (existingScript) {
86
+ return new Promise((resolve, reject) => {
87
+ existingScript.addEventListener("load", () => {
88
+ resolve(existingScript);
89
+ });
90
+ existingScript.addEventListener("error", (error) => {
91
+ reject(error);
92
+ });
93
+ });
94
+ }
95
+ 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.");
97
+ }
98
+ return loadScript(ternUIgetScriptUrl(options), {
99
+ async: true,
100
+ //crossOrigin: undefined,
101
+ beforeLoad: beforeLoadWithOptions(options)
102
+ }).catch((error) => {
103
+ console.error("[TernSecure] Failed to load TernUI script:", error);
104
+ throw new Error("Failed to load TernUI script");
105
+ });
106
+ };
107
+ var ternUIgetScriptUrl = (options) => {
108
+ const isDevelopment = process.env.NODE_ENV === "development";
109
+ const version = (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest";
110
+ if (isDevelopment) {
111
+ const localHost = process.env.TERN_UI_HOST || "localhost";
112
+ const localPort = (options == null ? void 0 : options.localPort) || process.env.TERN_UI_PORT || "4000";
113
+ return `http://${localHost}:${localPort}/ternsecure.browser.js`;
114
+ }
115
+ return `http://cdn.lifesprintcare.ca/dist/ternsecure.browser.js`;
116
+ };
117
+ var beforeLoadWithOptions = (options) => (script) => {
118
+ const attributes = constructScriptAttributes(options);
119
+ Object.entries(attributes).forEach(([key, value]) => {
120
+ if (value) script.setAttribute(key, String(value));
121
+ });
122
+ console.log("[TernSecure-shared] Script attributes set:", attributes);
123
+ };
124
+ var constructScriptAttributes = (options) => {
125
+ return {
126
+ "data-domain": (options == null ? void 0 : options.customDomain) || "",
127
+ "data-apikey": (options == null ? void 0 : options.apiKey) || "",
128
+ "data-environment": process.env.NODE_ENV || "development",
129
+ "data-proxyUrl": (options == null ? void 0 : options.proxyUrl) || "",
130
+ "data-version": (options == null ? void 0 : options.version) || process.env.TERN_UI_VERSION || "latest",
131
+ ...(options == null ? void 0 : options.nonce) ? { nonce: options.nonce } : {}
132
+ };
133
+ };
134
+ // Annotate the CommonJS export names for ESM import in node:
135
+ 0 && (module.exports = {
136
+ constructScriptAttributes,
137
+ loadTernUIScript,
138
+ ternUIgetScriptUrl
139
+ });
140
+ //# sourceMappingURL=loadTernUIScript.js.map