UNPKG

userorbit-js

Version:

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

90 lines (89 loc) 2.87 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) { const initFn = window.userorbit.init; void initFn(...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; } const fn = window.userorbit[functionProp]; fn(...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; const fn = window.userorbit[functionPropTyped]; await fn(...args); } }; function createProxyMethod(prop) { return (...args) => { return loadUserorbitToProxy(prop, ...args); }; } const userorbitProxyHandler = { get(_target, prop, _receiver) { return createProxyMethod(prop); } }; const userorbitApp = new Proxy({}, userorbitProxyHandler); export { userorbitApp as default }; //# sourceMappingURL=index.js.map