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 • 6.43 kB
Source Map (JSON)
{"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 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 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 const initFn = window.userorbit.init as (...args: unknown[]) => unknown;\n void initFn(...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 const fn = window.userorbit[functionProp as UserorbitProp] as (...args: unknown[]) => unknown;\n fn(...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 const fn = window.userorbit[functionPropTyped] as (...args: unknown[]) => unknown;\n\n await fn(...args);\n }\n};\n","import { type TUserorbitApp, type OpenWidgetOptions } from \"userorbit-js-core\";\nimport { loadUserorbitToProxy } from \"./lib/load-userorbit\";\n\ndeclare global {\n interface Window {\n userorbit: TUserorbitApp | undefined;\n }\n}\n\nfunction createProxyMethod<K extends keyof TUserorbitApp>(prop: K): TUserorbitApp[K] {\n return ((...args: Parameters<TUserorbitApp[K]>) => {\n return loadUserorbitToProxy(prop as string, ...args);\n }) as TUserorbitApp[K];\n}\n\nconst userorbitProxyHandler: ProxyHandler<TUserorbitApp> = {\n get<T extends keyof TUserorbitApp>(_target: TUserorbitApp, prop: T, _receiver: TUserorbitApp): TUserorbitApp[T] {\n return createProxyMethod(prop);\n },\n};\n\nconst userorbitApp: TUserorbitApp = new Proxy({} as TUserorbitApp, userorbitProxyHandler);\n\nexport type { OpenWidgetOptions };\nexport type { TUserorbitApp };\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","fn","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","initFn","init","functionProp","functionArgs","push","userorbitApp","Proxy","get","_target","_receiver","createProxyMethod"],"mappings":"aAMA,IAAIA,GAAiB,EACjBC,GAAgB,EAGpB,MAwCMC,EAA0D,GAEnDC,EAAuBC,MAAOC,KAAiBC,KAE1D,GAAKL,GAyCL,GAAWM,OAAOC,UAAW,CAG3B,MAAMC,EAAoBJ,EACpBK,EAAKH,OAAOC,UAAUC,SAEtBC,KAAMJ,EACd,OA/CE,GAAa,SAATD,EAAiB,CACnB,GAAIL,EAEF,YADAW,QAAQC,KAAK,8DAKfZ,GAAiB,EAEjB,MAAMa,EAAWP,EAAK,GAA2BO,SAAW,4BAG5D,SAzDmBT,OAAOU,IAC9B,IAAKP,OAAOC,UAAW,CACrB,MAAMO,EAAYC,SAASC,cAAc,UACzCF,EAAUG,KAAO,kBACjBH,EAAUI,IAAM,GAAGL,sBACnBC,EAAUX,OAAQ,EAElB,MAAMgB,EAAehB,SACnB,IAAIiB,SAAc,CAACC,EAASC,KAC1B,MAAMC,EAAYC,YAAW,KAC3BF,EAAO,IAAIG,MAAM,mCAAkC,GAClD,KACHX,EAAUY,OAAS,KACjBC,aAAaJ,GACbF,GAAA,EAEFP,EAAUc,QAAU,KAClBD,aAAaJ,GACbD,EAAO,IAAIG,MAAM,gCAA+B,CAClD,IAGJV,SAASc,KAAKC,YAAYhB,GAE1B,IAEE,aADMK,IACC,CAAEY,IAAI,EAAMC,UAAM,EAC3B,OAASC,GAGP,MAAO,CACLF,IAAI,EACJE,MAAO,IAAIR,MAJDQ,EAIWC,SAAW,gCAEpC,CACF,CAEA,MAAO,CAAEH,IAAI,EAAMC,UAAM,EAAA,EAkBOG,CAAiBvB,IAE3BmB,IACZzB,OAAOC,UAAW,EAEf6B,EADU9B,OAAOC,UAAU8B,SACjBhC,GAEfN,GAAiB,EACjBC,GAAgB,EAGhB,IAAA,MAAaI,KAAMkC,EAAcjC,KAAMkC,KAAkBtC,EAAoB,CAG3E,GAA+D,mBAApDK,OAAOC,UAAU+B,GAA+C,CACzE5B,QAAQuB,MAAM,gCAAgCK,iCAC9C,QACF,EAEA7B,EADWH,OAAOC,UAAU+B,OACtBC,EACR,CACF,CAEJ,MACE7B,QAAQC,KACN,oHAGFV,EAAmBuC,KAAK,CAAEpC,OAAMC,QASpC,ECvFF,MAMMoC,EAA8B,IAAIC,MAAM,CAAA,EANa,CACzDC,IAAA,CAAmCC,EAAwBxC,EAASyC,IAPtE,SAA0DzC,GACxD,MAAQ,IAAIC,IACHH,EAAqBE,KAAmBC,EAEnD,CAIWyC,CAAkB1C"}