@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.
- package/dist/chunk-HATJQ74R.mjs +56 -0
- package/dist/chunk-HATJQ74R.mjs.map +1 -0
- package/dist/derivedAuthState.d.mts +9 -0
- package/dist/derivedAuthState.d.ts +9 -0
- package/dist/derivedAuthState.js +75 -0
- package/dist/derivedAuthState.js.map +1 -0
- package/dist/derivedAuthState.mjs +49 -0
- package/dist/derivedAuthState.mjs.map +1 -0
- package/dist/eventBus.d.mts +8 -0
- package/dist/eventBus.d.ts +8 -0
- package/dist/eventBus.js +54 -0
- package/dist/eventBus.js.map +1 -0
- package/dist/eventBus.mjs +29 -0
- package/dist/eventBus.mjs.map +1 -0
- package/dist/loadScript.d.mts +10 -0
- package/dist/loadScript.d.ts +10 -0
- package/dist/loadScript.js +80 -0
- package/dist/loadScript.js.map +1 -0
- package/dist/loadScript.mjs +7 -0
- package/dist/loadScript.mjs.map +1 -0
- package/dist/loadTernUIScript.d.mts +24 -0
- package/dist/loadTernUIScript.d.ts +24 -0
- package/dist/loadTernUIScript.js +140 -0
- package/dist/loadTernUIScript.js.map +1 -0
- package/dist/loadTernUIScript.mjs +63 -0
- package/dist/loadTernUIScript.mjs.map +1 -0
- package/dist/react/index.d.mts +54 -0
- package/dist/react/index.d.ts +54 -0
- package/dist/react/index.js +116 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/index.mjs +68 -0
- package/dist/react/index.mjs.map +1 -0
- package/dist/retry.d.mts +46 -0
- package/dist/retry.d.ts +46 -0
- package/dist/retry.js +85 -0
- package/dist/retry.js.map +1 -0
- package/dist/retry.mjs +60 -0
- package/dist/retry.mjs.map +1 -0
- package/dist/types/derivedAuthState.d.ts +7 -0
- package/dist/types/derivedAuthState.d.ts.map +1 -0
- package/dist/types/eventBus.d.ts +7 -0
- package/dist/types/eventBus.d.ts.map +1 -0
- package/dist/types/loadScript.d.ts +10 -0
- package/dist/types/loadScript.d.ts.map +1 -0
- package/dist/types/loadTernUIScript.d.ts +22 -0
- package/dist/types/loadTernUIScript.d.ts.map +1 -0
- package/dist/types/nextjs/client/auth-actions.d.ts +1 -0
- package/dist/types/nextjs/client/auth-actions.d.ts.map +1 -0
- package/dist/types/react/hooks/index.d.ts +2 -0
- package/dist/types/react/hooks/index.d.ts.map +1 -0
- package/dist/types/react/hooks/useTernSecure.d.ts +3 -0
- package/dist/types/react/hooks/useTernSecure.d.ts.map +1 -0
- package/dist/types/react/index.d.ts +4 -0
- package/dist/types/react/index.d.ts.map +1 -0
- package/dist/types/react/ternsecureCtx.d.ts +26 -0
- package/dist/types/react/ternsecureCtx.d.ts.map +1 -0
- package/dist/types/react/ternsecureProvider.d.ts +20 -0
- package/dist/types/react/ternsecureProvider.d.ts.map +1 -0
- package/dist/types/retry.d.ts +46 -0
- package/dist/types/retry.d.ts.map +1 -0
- 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 };
|
package/dist/eventBus.js
ADDED
|
@@ -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 @@
|
|
|
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
|