UNPKG

@formbricks/js

Version:

Formbricks-js allows you to connect your index to Formbricks, display surveys and trigger events.

93 lines (92 loc) 3.09 kB
let isInitializing = false; let isInitialized = false; const loadFormbricksSDK = async (apiHostParam) => { if (!window.formbricks) { const scriptTag = document.createElement("script"); scriptTag.type = "text/javascript"; scriptTag.src = `${apiHostParam}/js/formbricks.umd.cjs`; scriptTag.async = true; const getFormbricks = async () => new Promise((resolve, reject) => { const timeoutId = setTimeout(() => { reject(new Error(`Formbricks SDK loading timed out`)); }, 1e4); scriptTag.onload = () => { clearTimeout(timeoutId); resolve(); }; scriptTag.onerror = () => { clearTimeout(timeoutId); reject(new Error(`Failed to load Formbricks SDK`)); }; }); document.head.appendChild(scriptTag); try { await getFormbricks(); return { ok: true, data: void 0 }; } catch (error) { const err = error; return { ok: false, error: new Error(err.message ?? `Failed to load Formbricks SDK`) }; } } return { ok: true, data: void 0 }; }; const functionsToProcess = []; const loadFormbricksToProxy = async (prop, ...args) => { if (!isInitialized) { if (prop === "setup") { if (isInitializing) { console.warn("🧱 Formbricks - Warning: Formbricks is already initializing."); return; } isInitializing = true; const argsTyped = args[0]; const { appUrl, environmentId } = argsTyped; if (!appUrl) { console.error("🧱 Formbricks - Error: appUrl is required"); return; } if (!environmentId) { console.error("🧱 Formbricks - Error: environmentId is required"); return; } const loadSDKResult = await loadFormbricksSDK(appUrl); if (loadSDKResult.ok) { if (window.formbricks) { const formbricksInstance = window.formbricks; void formbricksInstance.setup(...args); isInitializing = false; isInitialized = true; for (const { prop: functionProp, args: functionArgs } of functionsToProcess) { if (typeof formbricksInstance[functionProp] !== "function") { console.error(`🧱 Formbricks - Error: Method ${functionProp} does not exist on formbricks`); continue; } formbricksInstance[functionProp](...functionArgs); } } } } else { console.warn( "🧱 Formbricks - Warning: Formbricks not initialized. This method will be queued and executed after initialization." ); functionsToProcess.push({ prop, args }); } } else if (window.formbricks) { const formbricksInstance = window.formbricks; const functionPropTyped = prop; await formbricksInstance[functionPropTyped](...args); } }; const formbricksProxyHandler = { get(_target, prop, _receiver) { return (...args) => loadFormbricksToProxy(prop, ...args); } }; const formbricks = new Proxy({}, formbricksProxyHandler); export { formbricks as default }; //# sourceMappingURL=index.js.map