UNPKG

userorbit-js

Version:

Userorbit js allows you to connect your application to Userorbit, display announcements, roadmap, collect feedback, show product tours, and more.

82 lines (81 loc) 2.7 kB
let isInitializing = false; let isInitialized = false; const loadUserorbitSDK = async (cdnHostParam) => { if (!window.userorbit) { const scriptTag = document.createElement("script"); scriptTag.type = "text/javascript"; scriptTag.src = `${cdnHostParam}/userorbit.umd.cjs`; scriptTag.async = true; const getUserorbit = async () => new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new Error(`Userorbit SDK loading timed out`)); }, 1e4); scriptTag.onload = () => { clearTimeout(timeoutId); resolve(); }; scriptTag.onerror = () => { clearTimeout(timeoutId); reject(new Error(`Failed to load Userorbit SDK`)); }; }); document.head.appendChild(scriptTag); try { await getUserorbit(); return { ok: true, data: void 0 }; } catch (error) { const err = error; return { ok: false, error: new Error(err.message ?? `Failed to load Userorbit SDK`) }; } } return { ok: true, data: void 0 }; }; const functionsToProcess = []; const loadUserorbitToProxy = async (prop, ...args) => { if (!isInitialized) { if (prop === "init") { if (isInitializing) { console.warn("🧱 Userorbit - Warning: Userorbit is already initializing."); return; } isInitializing = true; const cdnHost = args[0].cdnHost || "https://cdn.userorbit.com"; const loadSDKResult = await loadUserorbitSDK(cdnHost); if (loadSDKResult.ok) { if (window.userorbit) { void window.userorbit.init(...args); isInitializing = false; isInitialized = true; for (const { prop: functionProp, args: functionArgs } of functionsToProcess) { if (typeof window.userorbit[functionProp] !== "function") { console.error(`🧱 Userorbit - Error: Method ${functionProp} does not exist on userorbit`); continue; } window.userorbit[functionProp](...functionArgs); } } } } else { console.warn( "🧱 Userorbit - Warning: Userorbit not initialized. This method will be queued and executed after initialization." ); functionsToProcess.push({ prop, args }); } } else if (window.userorbit) { const functionPropTyped = prop; await window.userorbit[functionPropTyped](...args); } }; const userorbitProxyHandler = { get(_target, prop, _receiver) { return (...args) => loadUserorbitToProxy(prop, ...args); } }; const userorbitApp = new Proxy({}, userorbitProxyHandler); export { userorbitApp as default }; //# sourceMappingURL=index.js.map