UNPKG

userorbit-js

Version:

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

1 lines 5.93 kB
{"version":3,"file":"index.cjs","sources":["../src/lib/load-userorbit.ts","../src/index.ts"],"sourcesContent":["/*\n eslint-disable no-console --\n * Required for logging errors\n*/\nimport { type Result } from \"@userorbit/types/error-handlers\";\n\nlet isInitializing = false;\nlet isInitialized = false;\n\n// Load the SDK, return the result\nconst loadUserorbitSDK = async (cdnHostParam: string): Promise<Result<void>> => {\n if (!window.userorbit) {\n const scriptTag = document.createElement(\"script\");\n scriptTag.type = \"text/javascript\";\n scriptTag.src = `${cdnHostParam}/userorbit.umd.cjs`;\n scriptTag.async = true;\n\n\n const getUserorbit = async (): Promise<void> =>\n new Promise<void>((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(`Userorbit SDK loading timed out`));\n }, 10000);\n scriptTag.onload = () => {\n clearTimeout(timeoutId);\n resolve();\n };\n scriptTag.onerror = () => {\n clearTimeout(timeoutId);\n reject(new Error(`Failed to load Userorbit SDK`));\n };\n });\n\n document.head.appendChild(scriptTag);\n\n try {\n await getUserorbit();\n return { ok: true, data: undefined };\n } catch (error) {\n const err = error as { message?: string };\n\n return {\n ok: false,\n error: new Error(err.message ?? `Failed to load Userorbit SDK`),\n };\n }\n }\n\n return { ok: true, data: undefined };\n};\n\nconst functionsToProcess: { prop: string; args: unknown[] }[] = [];\n\nexport const loadUserorbitToProxy = async (prop: string, ...args: unknown[]): Promise<void> => {\n // all of this should happen when not initialized:\n if (!isInitialized) {\n if (prop === \"init\") {\n if (isInitializing) {\n console.warn(\"🧱 Userorbit - Warning: Userorbit is already initializing.\");\n return;\n }\n\n // reset the initialization state\n isInitializing = true;\n\n \n const cdnHost = (args[0] as { cdnHost: string }).cdnHost || \"https://cdn.userorbit.com\";\n const loadSDKResult = await loadUserorbitSDK(cdnHost);\n\n if (loadSDKResult.ok) {\n if (window.userorbit) {\n // @ts-expect-error -- Required for dynamic function calls\n void window.userorbit.init(...args);\n\n isInitializing = false;\n isInitialized = true;\n\n // process the queued functions\n for (const { prop: functionProp, args: functionArgs } of functionsToProcess) {\n type UserorbitProp = keyof typeof window.userorbit;\n\n if (typeof window.userorbit[functionProp as UserorbitProp] !== \"function\") {\n console.error(`🧱 Userorbit - Error: Method ${functionProp} does not exist on userorbit`);\n continue;\n }\n\n // @ts-expect-error -- Required for dynamic function calls\n (window.userorbit[functionProp] as unknown)(...functionArgs);\n }\n }\n }\n } else {\n console.warn(\n \"🧱 Userorbit - Warning: Userorbit not initialized. This method will be queued and executed after initialization.\"\n );\n\n functionsToProcess.push({ prop, args });\n }\n } else if (window.userorbit) {\n type Userorbit = typeof window.userorbit;\n type FunctionProp = keyof Userorbit;\n const functionPropTyped = prop as FunctionProp;\n\n // @ts-expect-error -- Required for dynamic function calls\n await window.userorbit[functionPropTyped](...args);\n }\n};\n","import { type TUserorbitApp } from \"userorbit-js-core\";\nimport { loadUserorbitToProxy } from \"./lib/load-userorbit\";\n\ndeclare global {\n interface Window {\n userorbit: TUserorbitApp | undefined;\n }\n}\n\nconst userorbitProxyHandler: ProxyHandler<TUserorbitApp> = {\n get(_target, prop, _receiver) {\n return (...args: unknown[]) => loadUserorbitToProxy(prop as string, ...args);\n },\n};\n\nconst userorbitApp: TUserorbitApp = new Proxy({} as TUserorbitApp, userorbitProxyHandler);\n\n// eslint-disable-next-line import/no-default-export -- Required for UMD\nexport default userorbitApp;\n"],"names":["isInitializing","isInitialized","functionsToProcess","loadUserorbitToProxy","async","prop","args","window","userorbit","functionPropTyped","console","warn","cdnHost","cdnHostParam","scriptTag","document","createElement","type","src","getUserorbit","Promise","resolve","reject","timeoutId","setTimeout","Error","onload","clearTimeout","onerror","head","appendChild","ok","data","error","message","loadUserorbitSDK","init","functionProp","functionArgs","push","userorbitApp","Proxy","get","_target","_receiver"],"mappings":"aAMA,IAAIA,GAAiB,EACjBC,GAAgB,EAGpB,MAyCMC,EAA0D,GAEnDC,EAAuBC,MAAOC,KAAiBC,KAE1D,GAAKL,GA0CH,GACSM,OAAOC,UAAW,CAG3B,MAAMC,EAAoBJ,QAGpBE,OAAOC,UAAUC,MAAsBH,EAC/C,OAjDE,GAAa,SAATD,EAAiB,CACnB,GAAIL,EAEF,YADAU,QAAQC,KAAK,8DAKEX,GAAA,EAGjB,MAAMY,EAAWN,EAAK,GAA2BM,SAAW,4BAG5D,SA3DmBR,OAAOS,IAC1B,IAACN,OAAOC,UAAW,CACf,MAAAM,EAAYC,SAASC,cAAc,UACzCF,EAAUG,KAAO,kBACPH,EAAAI,IAAM,GAAGL,sBACnBC,EAAUV,OAAQ,EAGlB,MAAMe,EAAef,SACnB,IAAIgB,SAAc,CAACC,EAASC,KACpB,MAAAC,EAAYC,YAAW,KACpBF,EAAA,IAAIG,MAAM,mCAAkC,GAClD,KACHX,EAAUY,OAAS,KACjBC,aAAaJ,QAGfT,EAAUc,QAAU,KAClBD,aAAaJ,GACND,EAAA,IAAIG,MAAM,gCAA+B,CAAA,IAI7CV,SAAAc,KAAKC,YAAYhB,GAEtB,IAEF,aADMK,IACC,CAAEY,IAAI,EAAMC,UAAM,SAClBC,GAGA,MAAA,CACLF,IAAI,EACJE,MAAO,IAAIR,MAJDQ,EAIWC,SAAW,gCAEpC,CACF,CAEA,MAAO,CAAEH,IAAI,EAAMC,UAAM,EAAU,EAmBHG,CAAiBvB,IAE3BmB,IACZxB,OAAOC,UAAW,CAEfD,OAAOC,UAAU4B,QAAQ9B,GAEbN,GAAA,EACDC,GAAA,EAGhB,IAAA,MAAaI,KAAMgC,EAAc/B,KAAMgC,KAAkBpC,EAGQ,mBAApDK,OAAOC,UAAU6B,GAM3B9B,OAAOC,UAAU6B,MAA6BC,GALrC5B,QAAAuB,MAAM,gCAAgCI,gCAOpD,CACF,MAEQ3B,QAAAC,KACN,oHAGFT,EAAmBqC,KAAK,CAAElC,OAAMC,QASpC,EC1FIkC,EAA8B,IAAIC,MAAM,CAAA,EANa,CACzDC,IAAA,CAAIC,EAAStC,EAAMuC,IACV,IAAItC,IAAoBH,EAAqBE,KAAmBC"}