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
JavaScript
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