@encatch/web-sdk 1.2.2-beta.0 → 1.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/encatch.es.js +1 -1
- package/dist/encatch.es.js.map +1 -1
- package/dist/encatch.iife.js +1 -1
- package/dist/encatch.iife.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/queue.d.ts +1 -1
- package/dist/src/queue.d.ts.map +1 -1
- package/dist/src/types.d.ts +33 -2
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/encatch.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e="encatch-sdk-script";var t=!1,n=!1,i=null;function r(r){return n?Promise.resolve():i?Promise.reject(i):t?new Promise((e,t)=>{const r=setInterval(()=>{n?(clearInterval(r),e()):i&&(clearInterval(r),t(i))},50)}):(t=!0,new Promise((o,
|
|
1
|
+
var e="encatch-sdk-script";var t=!1,n=!1,i=null;function r(r){return n?Promise.resolve():i?Promise.reject(i):t?new Promise((e,t)=>{const r=setInterval(()=>{n?(clearInterval(r),e()):i&&(clearInterval(r),t(i))},50)}):(t=!0,new Promise((o,s)=>{if(document.getElementById(e))return t=!1,n=!0,void o();const a=(r.webHost||"https://app.encatch.com")+"/s/sdk/v1/encatch.js?dt="+function(){const e=/* @__PURE__ */new Date,t=String(e.getUTCFullYear()).slice(-2),n=String(e.getUTCMonth()+1).padStart(2,"0"),i=String(e.getUTCDate()).padStart(2,"0"),r=String(e.getUTCHours()).padStart(2,"0"),o=30*Math.floor(e.getUTCMinutes()/30);return`${t}${n}${i}${r}${String(o).padStart(2,"0")}`}(),c=document.createElement("script");c.id=e,c.src=a,c.type="module",c.async=!0,c.onload=()=>{t=!1,n=!0,o()},c.onerror=e=>{t=!1,i=/* @__PURE__ */new Error(`[Encatch] Failed to load SDK from ${a}. Please check your network connection and web host configuration.`),console.error(i.message,e),s(i)};const l=document.getElementsByTagName("script")[0];l&&l.parentNode?l.parentNode.insertBefore(c,l):document.head.appendChild(c)}))}function o(e,t){return function(...n){e.push([t,...n])}}var s=["init","identifyUser","setLocale","setCountry","setTheme","trackEvent","trackScreen","startSession","pauseSession","resumeSession","stopSession","resetUser","showForm","dismissForm","addToResponse","submitForm","emitEvent","clearAll","addSourceTracking"];function a(){const e=[],t=[],n={_q:e,_eventCallbacks:t,_initialized:!1,_apiKey:null,_config:{},init(t,i){n._initialized?console.warn("[Encatch] SDK already initialized. Ignoring init call."):(n._apiKey=t,n._config=i||{},n._initialized=!0,e.push(["init",t,i]),"undefined"!=typeof window&&"undefined"!=typeof document&&r(n._config).catch(e=>{console.error("[Encatch] Failed to initialize SDK:",e)}))},on:e=>(t.push(e),()=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)}),identifyUser:()=>{},setLocale:()=>{},setCountry:()=>{},setTheme:()=>{},trackEvent:()=>{},trackScreen:()=>{},startSession:()=>{},pauseSession:()=>{},resumeSession:()=>{},stopSession:()=>{},resetUser:()=>{},showForm:()=>{},dismissForm:()=>{},addToResponse:()=>{},submitForm:()=>{},emitEvent:()=>{},refineText:()=>Promise.resolve({}),qnaWithAi:()=>Promise.resolve({answer:""}),streamQnaWithAi:()=>Promise.resolve(),uploadFile:()=>Promise.reject(/* @__PURE__ */new Error("[Encatch] uploadFile is not available before SDK initialization")),clearAll:()=>{},addSourceTracking:()=>{}},i=s.filter(e=>"init"!==e);for(const r of i)n[r]=o(e,r);return n}var c=function(){if("undefined"!=typeof window){const e=window._encatch;if(e&&Array.isArray(e._q)){const t=a();return t._q.push(...e._q),Array.isArray(e._eventCallbacks)&&t._eventCallbacks.push(...e._eventCallbacks),e._initialized&&(t._initialized=e._initialized,t._apiKey=e._apiKey,t._config=e._config||{}),window._encatch=t,t}const t=a();return window._encatch=t,t}return a()}();export{c as _encatch,c as default};
|
|
2
2
|
//# sourceMappingURL=encatch.es.js.map
|
package/dist/encatch.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encatch.es.js","names":[],"sources":["../src/loader.ts","../src/queue.ts","../src/index.ts"],"sourcesContent":["/**\n * Script Loader Utility\n * \n * Handles the dynamic loading of the remote SDK implementation script.\n * Provides error handling and prevents duplicate script injection.\n */\n\nimport type { EncatchConfig } from './types';\n\n/** Default web host for the remote implementation script */\nconst DEFAULT_WEB_HOST = 'https://app.encatch.com';\n\n/** Fixed path for the SDK script */\nconst SDK_SCRIPT_PATH = '/s/sdk/v1/encatch.js';\n\n/** Script element ID to prevent duplicate injections */\nconst SCRIPT_ID = 'encatch-sdk-script';\n\n/**\n * Returns a cache-bust string that changes at most every 30 minutes (YYMMDDHHmm, mm is 00 or 30).\n * Allows the script to be cached for up to 30 minutes before a new URL triggers a fresh fetch.\n */\nfunction getCacheBustParam(): string {\n const d = new Date();\n const yy = String(d.getUTCFullYear()).slice(-2);\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(d.getUTCDate()).padStart(2, '0');\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const min30 = Math.floor(d.getUTCMinutes() / 30) * 30;\n const minStr = String(min30).padStart(2, '0');\n return `${yy}${mm}${dd}${hh}${minStr}`;\n}\n\n/** Track loading state */\nlet isLoading = false;\nlet isLoaded = false;\nlet loadError: Error | null = null;\n\n/**\n * Load the remote SDK implementation script\n * \n * @param config - Configuration containing optional custom web host\n * @returns Promise that resolves when script loads, rejects on error\n */\nexport function loadRemoteScript(config: EncatchConfig): Promise<void> {\n // Return early if already loaded\n if (isLoaded) {\n return Promise.resolve();\n }\n\n // Return error if previous load failed\n if (loadError) {\n return Promise.reject(loadError);\n }\n\n // Return existing promise if already loading\n if (isLoading) {\n return new Promise((resolve, reject) => {\n const checkInterval = setInterval(() => {\n if (isLoaded) {\n clearInterval(checkInterval);\n resolve();\n } else if (loadError) {\n clearInterval(checkInterval);\n reject(loadError);\n }\n }, 50);\n });\n }\n\n isLoading = true;\n\n return new Promise((resolve, reject) => {\n // Check if script already exists in DOM\n const existingScript = document.getElementById(SCRIPT_ID);\n if (existingScript) {\n isLoading = false;\n isLoaded = true;\n resolve();\n return;\n }\n\n // Determine script URL from webHost (with 30-min cache-bust so script is cached at most 30 min)\n const webHost = config.webHost || DEFAULT_WEB_HOST;\n const scriptUrl = webHost + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n\n // Create and configure script element\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = scriptUrl;\n script.type = 'module';\n script.async = true;\n\n // Handle successful load\n script.onload = () => {\n isLoading = false;\n isLoaded = true;\n resolve();\n };\n\n // Handle load error\n script.onerror = (event) => {\n isLoading = false;\n loadError = new Error(\n `[Encatch] Failed to load SDK from ${scriptUrl}. ` +\n `Please check your network connection and web host configuration.`\n );\n console.error(loadError.message, event);\n reject(loadError);\n };\n\n // Inject script into document head\n const firstScript = document.getElementsByTagName('script')[0];\n if (firstScript && firstScript.parentNode) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n });\n}\n\n/**\n * Check if the remote script has been loaded\n */\nexport function isScriptLoaded(): boolean {\n return isLoaded;\n}\n\n/**\n * Reset loader state (useful for testing)\n */\nexport function resetLoaderState(): void {\n isLoading = false;\n isLoaded = false;\n loadError = null;\n}\n\n/**\n * Get the default script URL (includes current 30-min cache-bust param)\n */\nexport function getDefaultScriptUrl(): string {\n return DEFAULT_WEB_HOST + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n}\n","/**\n * Command Queue Implementation\n * \n * Manages the queue of SDK method calls that occur before the remote\n * implementation script has loaded. Commands are stored as tuples\n * and processed FIFO when the remote script becomes available.\n */\n\nimport type { Command, EncatchSDK } from './types';\n\n/**\n * Process all queued commands by calling the corresponding methods\n * on the SDK instance. This is called by the remote script once loaded.\n * \n * @param sdk - The SDK instance with real implementations\n * @param queue - Array of queued commands to process\n */\nexport function processQueue(sdk: EncatchSDK, queue: Command[]): void {\n while (queue.length > 0) {\n const command = queue.shift();\n if (!command) continue;\n\n const [method, ...args] = command;\n \n // Skip internal properties\n if (method.startsWith('_')) continue;\n\n // Get the method from the SDK\n const fn = sdk[method as keyof EncatchSDK];\n \n if (typeof fn === 'function') {\n try {\n (fn as (...args: unknown[]) => void).apply(sdk, args);\n } catch (error) {\n console.error(`[Encatch] Error processing queued command \"${method}\":`, error);\n }\n } else {\n console.warn(`[Encatch] Unknown method in queue: \"${method}\"`);\n }\n }\n}\n\n/**\n * Creates a stub method that queues calls for later processing\n * \n * @param queue - The command queue array\n * @param methodName - Name of the method being stubbed\n * @returns A function that pushes calls to the queue\n */\nexport function createQueuedMethod(\n queue: Command[],\n methodName: string\n): (...args: unknown[]) => void {\n return function (...args: unknown[]): void {\n queue.push([methodName, ...args]);\n };\n}\n\n/**\n * List of SDK methods that should be queued before initialization\n */\nexport const QUEUED_METHODS = [\n 'init',\n 'identifyUser',\n 'setLocale',\n 'setCountry',\n 'setTheme',\n 'trackEvent',\n 'trackScreen',\n 'startSession',\n 'resetUser',\n 'showForm',\n 'dismissForm',\n 'addToResponse',\n 'submitForm',\n 'emitEvent',\n 'clearAll',\n 'addSourceTracking',\n] as const;\n\nexport type QueuedMethodName = typeof QUEUED_METHODS[number];\n","/**\n * Encatch Web SDK\n * \n * A lightweight, type-safe SDK for integrating Encatch forms and surveys.\n * This module creates the _encatch global object that queues commands\n * until the remote implementation script loads.\n */\n\nimport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n EventCallback,\n Command,\n} from './types';\nimport { loadRemoteScript } from './loader';\nimport { createQueuedMethod, QUEUED_METHODS } from './queue';\n\n// Re-export types for consumers\nexport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n StartSessionOptions,\n EventType,\n EventCallback,\n EventPayload,\n Theme,\n ResetMode,\n ShowFormOptions,\n ShowFormInterceptorPayload,\n SubmitFormRequest,\n FormDetails,\n QuestionResponse,\n QuestionAnswer,\n RefineTextRequest,\n RefineTextResponse,\n QnaWithAiConversationTurn,\n QnaWithAiRequest,\n QnaWithAiResponse,\n UploadFileRequest,\n UploadFileResponse,\n} from './types';\n\n/**\n * Creates the Encatch SDK stub instance\n * All method calls are queued until setProject() is called and the\n * remote implementation script loads.\n */\nfunction createEncatchStub(): EncatchSDK {\n // Command queue for calls made before remote script loads\n const queue: Command[] = [];\n \n // Event callbacks - all callbacks receive all form events\n const eventCallbacks: EventCallback[] = [];\n\n // Create the SDK object\n const sdk: EncatchSDK = {\n // Internal state\n _q: queue,\n _eventCallbacks: eventCallbacks,\n _initialized: false,\n _apiKey: null,\n _config: {},\n\n // init is special - it triggers script loading\n init(apiKey: string, config?: EncatchConfig): void {\n if (sdk._initialized) {\n console.warn('[Encatch] SDK already initialized. Ignoring init call.');\n return;\n }\n\n sdk._apiKey = apiKey;\n sdk._config = config || {};\n sdk._initialized = true;\n\n // Queue this call for the remote implementation\n queue.push(['init', apiKey, config]);\n\n // Load the remote script\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n loadRemoteScript(sdk._config).catch((error) => {\n console.error('[Encatch] Failed to initialize SDK:', error);\n });\n }\n },\n\n // Event subscription - receives all form events\n on(callback: EventCallback): () => void {\n eventCallbacks.push(callback);\n\n // Return unsubscribe function\n return () => {\n const index = eventCallbacks.indexOf(callback);\n if (index > -1) {\n eventCallbacks.splice(index, 1);\n }\n };\n },\n\n // Stub implementations - will be replaced by remote script\n identifyUser: () => {},\n setLocale: () => {},\n setCountry: () => {},\n setTheme: () => {},\n trackEvent: () => {},\n trackScreen: () => {},\n startSession: () => {},\n resetUser: () => {},\n showForm: () => {},\n dismissForm: () => {},\n addToResponse: () => {},\n submitForm: () => {},\n emitEvent: () => {},\n refineText: () => Promise.resolve({}),\n qnaWithAi: () => Promise.resolve({ answer: '' }),\n streamQnaWithAi: () => Promise.resolve(),\n uploadFile: () => Promise.reject(new Error('[Encatch] uploadFile is not available before SDK initialization')),\n clearAll: () => {},\n addSourceTracking: () => {},\n };\n\n // Replace stub methods with queue-based versions\n // Skip init (handled specially above) and on (handled locally)\n const methodsToQueue = QUEUED_METHODS.filter(m => m !== 'init');\n \n for (const method of methodsToQueue) {\n // Use type assertion to assign queued methods\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sdk as any)[method] = createQueuedMethod(queue, method);\n }\n\n return sdk;\n}\n\n/**\n * Initialize the global _encatch object\n * This runs immediately when the script loads\n */\nfunction initGlobal(): EncatchSDK {\n // Check for existing instance (may have been created by snippet)\n if (typeof window !== 'undefined') {\n // If _encatch already exists with a queue, preserve it\n const existing = window._encatch;\n if (existing && Array.isArray(existing._q)) {\n // Merge existing queue into new instance\n const sdk = createEncatchStub();\n sdk._q.push(...existing._q);\n \n // Copy over any existing callbacks\n if (Array.isArray(existing._eventCallbacks)) {\n sdk._eventCallbacks.push(...existing._eventCallbacks);\n }\n \n // Copy initialization state\n if (existing._initialized) {\n sdk._initialized = existing._initialized;\n sdk._apiKey = existing._apiKey;\n sdk._config = existing._config || {};\n }\n \n window._encatch = sdk;\n return sdk;\n }\n\n // Create fresh instance\n const sdk = createEncatchStub();\n window._encatch = sdk;\n return sdk;\n }\n\n // Non-browser environment\n return createEncatchStub();\n}\n\n// Initialize and export\nexport const _encatch = initGlobal();\n\n// Default export for convenience\nexport default _encatch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encatch.es.js","names":[],"sources":["../src/loader.ts","../src/queue.ts","../src/index.ts"],"sourcesContent":["/**\n * Script Loader Utility\n * \n * Handles the dynamic loading of the remote SDK implementation script.\n * Provides error handling and prevents duplicate script injection.\n */\n\nimport type { EncatchConfig } from './types';\n\n/** Default web host for the remote implementation script */\nconst DEFAULT_WEB_HOST = 'https://app.encatch.com';\n\n/** Fixed path for the SDK script */\nconst SDK_SCRIPT_PATH = '/s/sdk/v1/encatch.js';\n\n/** Script element ID to prevent duplicate injections */\nconst SCRIPT_ID = 'encatch-sdk-script';\n\n/**\n * Returns a cache-bust string that changes at most every 30 minutes (YYMMDDHHmm, mm is 00 or 30).\n * Allows the script to be cached for up to 30 minutes before a new URL triggers a fresh fetch.\n */\nfunction getCacheBustParam(): string {\n const d = new Date();\n const yy = String(d.getUTCFullYear()).slice(-2);\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(d.getUTCDate()).padStart(2, '0');\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const min30 = Math.floor(d.getUTCMinutes() / 30) * 30;\n const minStr = String(min30).padStart(2, '0');\n return `${yy}${mm}${dd}${hh}${minStr}`;\n}\n\n/** Track loading state */\nlet isLoading = false;\nlet isLoaded = false;\nlet loadError: Error | null = null;\n\n/**\n * Load the remote SDK implementation script\n * \n * @param config - Configuration containing optional custom web host\n * @returns Promise that resolves when script loads, rejects on error\n */\nexport function loadRemoteScript(config: EncatchConfig): Promise<void> {\n // Return early if already loaded\n if (isLoaded) {\n return Promise.resolve();\n }\n\n // Return error if previous load failed\n if (loadError) {\n return Promise.reject(loadError);\n }\n\n // Return existing promise if already loading\n if (isLoading) {\n return new Promise((resolve, reject) => {\n const checkInterval = setInterval(() => {\n if (isLoaded) {\n clearInterval(checkInterval);\n resolve();\n } else if (loadError) {\n clearInterval(checkInterval);\n reject(loadError);\n }\n }, 50);\n });\n }\n\n isLoading = true;\n\n return new Promise((resolve, reject) => {\n // Check if script already exists in DOM\n const existingScript = document.getElementById(SCRIPT_ID);\n if (existingScript) {\n isLoading = false;\n isLoaded = true;\n resolve();\n return;\n }\n\n // Determine script URL from webHost (with 30-min cache-bust so script is cached at most 30 min)\n const webHost = config.webHost || DEFAULT_WEB_HOST;\n const scriptUrl = webHost + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n\n // Create and configure script element\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = scriptUrl;\n script.type = 'module';\n script.async = true;\n\n // Handle successful load\n script.onload = () => {\n isLoading = false;\n isLoaded = true;\n resolve();\n };\n\n // Handle load error\n script.onerror = (event) => {\n isLoading = false;\n loadError = new Error(\n `[Encatch] Failed to load SDK from ${scriptUrl}. ` +\n `Please check your network connection and web host configuration.`\n );\n console.error(loadError.message, event);\n reject(loadError);\n };\n\n // Inject script into document head\n const firstScript = document.getElementsByTagName('script')[0];\n if (firstScript && firstScript.parentNode) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n });\n}\n\n/**\n * Check if the remote script has been loaded\n */\nexport function isScriptLoaded(): boolean {\n return isLoaded;\n}\n\n/**\n * Reset loader state (useful for testing)\n */\nexport function resetLoaderState(): void {\n isLoading = false;\n isLoaded = false;\n loadError = null;\n}\n\n/**\n * Get the default script URL (includes current 30-min cache-bust param)\n */\nexport function getDefaultScriptUrl(): string {\n return DEFAULT_WEB_HOST + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n}\n","/**\n * Command Queue Implementation\n * \n * Manages the queue of SDK method calls that occur before the remote\n * implementation script has loaded. Commands are stored as tuples\n * and processed FIFO when the remote script becomes available.\n */\n\nimport type { Command, EncatchSDK } from './types';\n\n/**\n * Process all queued commands by calling the corresponding methods\n * on the SDK instance. This is called by the remote script once loaded.\n * \n * @param sdk - The SDK instance with real implementations\n * @param queue - Array of queued commands to process\n */\nexport function processQueue(sdk: EncatchSDK, queue: Command[]): void {\n while (queue.length > 0) {\n const command = queue.shift();\n if (!command) continue;\n\n const [method, ...args] = command;\n \n // Skip internal properties\n if (method.startsWith('_')) continue;\n\n // Get the method from the SDK\n const fn = sdk[method as keyof EncatchSDK];\n \n if (typeof fn === 'function') {\n try {\n (fn as (...args: unknown[]) => void).apply(sdk, args);\n } catch (error) {\n console.error(`[Encatch] Error processing queued command \"${method}\":`, error);\n }\n } else {\n console.warn(`[Encatch] Unknown method in queue: \"${method}\"`);\n }\n }\n}\n\n/**\n * Creates a stub method that queues calls for later processing\n * \n * @param queue - The command queue array\n * @param methodName - Name of the method being stubbed\n * @returns A function that pushes calls to the queue\n */\nexport function createQueuedMethod(\n queue: Command[],\n methodName: string\n): (...args: unknown[]) => void {\n return function (...args: unknown[]): void {\n queue.push([methodName, ...args]);\n };\n}\n\n/**\n * List of SDK methods that should be queued before initialization\n */\nexport const QUEUED_METHODS = [\n 'init',\n 'identifyUser',\n 'setLocale',\n 'setCountry',\n 'setTheme',\n 'trackEvent',\n 'trackScreen',\n 'startSession',\n 'pauseSession',\n 'resumeSession',\n 'stopSession',\n 'resetUser',\n 'showForm',\n 'dismissForm',\n 'addToResponse',\n 'submitForm',\n 'emitEvent',\n 'clearAll',\n 'addSourceTracking',\n] as const;\n\nexport type QueuedMethodName = typeof QUEUED_METHODS[number];\n","/**\n * Encatch Web SDK\n * \n * A lightweight, type-safe SDK for integrating Encatch forms and surveys.\n * This module creates the _encatch global object that queues commands\n * until the remote implementation script loads.\n */\n\nimport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n EventCallback,\n Command,\n} from './types';\nimport { loadRemoteScript } from './loader';\nimport { createQueuedMethod, QUEUED_METHODS } from './queue';\n\n// Re-export types for consumers\nexport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n StartSessionOptions,\n EventType,\n EventCallback,\n EventPayload,\n Theme,\n ResetMode,\n ShowFormOptions,\n ShowFormInterceptorPayload,\n SubmitFormRequest,\n FormDetails,\n QuestionResponse,\n QuestionAnswer,\n RefineTextRequest,\n RefineTextResponse,\n QnaWithAiConversationTurn,\n QnaWithAiRequest,\n QnaWithAiResponse,\n UploadFileRequest,\n UploadFileResponse,\n} from './types';\n\n/**\n * Creates the Encatch SDK stub instance\n * All method calls are queued until setProject() is called and the\n * remote implementation script loads.\n */\nfunction createEncatchStub(): EncatchSDK {\n // Command queue for calls made before remote script loads\n const queue: Command[] = [];\n \n // Event callbacks - all callbacks receive all form events\n const eventCallbacks: EventCallback[] = [];\n\n // Create the SDK object\n const sdk: EncatchSDK = {\n // Internal state\n _q: queue,\n _eventCallbacks: eventCallbacks,\n _initialized: false,\n _apiKey: null,\n _config: {},\n\n // init is special - it triggers script loading\n init(apiKey: string, config?: EncatchConfig): void {\n if (sdk._initialized) {\n console.warn('[Encatch] SDK already initialized. Ignoring init call.');\n return;\n }\n\n sdk._apiKey = apiKey;\n sdk._config = config || {};\n sdk._initialized = true;\n\n // Queue this call for the remote implementation\n queue.push(['init', apiKey, config]);\n\n // Load the remote script\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n loadRemoteScript(sdk._config).catch((error) => {\n console.error('[Encatch] Failed to initialize SDK:', error);\n });\n }\n },\n\n // Event subscription - receives all form events\n on(callback: EventCallback): () => void {\n eventCallbacks.push(callback);\n\n // Return unsubscribe function\n return () => {\n const index = eventCallbacks.indexOf(callback);\n if (index > -1) {\n eventCallbacks.splice(index, 1);\n }\n };\n },\n\n // Stub implementations - will be replaced by remote script\n identifyUser: () => {},\n setLocale: () => {},\n setCountry: () => {},\n setTheme: () => {},\n trackEvent: () => {},\n trackScreen: () => {},\n startSession: () => {},\n pauseSession: () => {},\n resumeSession: () => {},\n stopSession: () => {},\n resetUser: () => {},\n showForm: () => {},\n dismissForm: () => {},\n addToResponse: () => {},\n submitForm: () => {},\n emitEvent: () => {},\n refineText: () => Promise.resolve({}),\n qnaWithAi: () => Promise.resolve({ answer: '' }),\n streamQnaWithAi: () => Promise.resolve(),\n uploadFile: () => Promise.reject(new Error('[Encatch] uploadFile is not available before SDK initialization')),\n clearAll: () => {},\n addSourceTracking: () => {},\n };\n\n // Replace stub methods with queue-based versions\n // Skip init (handled specially above) and on (handled locally)\n const methodsToQueue = QUEUED_METHODS.filter(m => m !== 'init');\n \n for (const method of methodsToQueue) {\n // Use type assertion to assign queued methods\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sdk as any)[method] = createQueuedMethod(queue, method);\n }\n\n return sdk;\n}\n\n/**\n * Initialize the global _encatch object\n * This runs immediately when the script loads\n */\nfunction initGlobal(): EncatchSDK {\n // Check for existing instance (may have been created by snippet)\n if (typeof window !== 'undefined') {\n // If _encatch already exists with a queue, preserve it\n const existing = window._encatch;\n if (existing && Array.isArray(existing._q)) {\n // Merge existing queue into new instance\n const sdk = createEncatchStub();\n sdk._q.push(...existing._q);\n \n // Copy over any existing callbacks\n if (Array.isArray(existing._eventCallbacks)) {\n sdk._eventCallbacks.push(...existing._eventCallbacks);\n }\n \n // Copy initialization state\n if (existing._initialized) {\n sdk._initialized = existing._initialized;\n sdk._apiKey = existing._apiKey;\n sdk._config = existing._config || {};\n }\n \n window._encatch = sdk;\n return sdk;\n }\n\n // Create fresh instance\n const sdk = createEncatchStub();\n window._encatch = sdk;\n return sdk;\n }\n\n // Non-browser environment\n return createEncatchStub();\n}\n\n// Initialize and export\nexport const _encatch = initGlobal();\n\n// Default export for convenience\nexport default _encatch;\n"],"mappings":"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"}
|
package/dist/encatch.iife.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var t="encatch-sdk-script";var n=!1,i=!1,r=null;function o(e){return i?Promise.resolve():r?Promise.reject(r):n?new Promise((e,t)=>{const n=setInterval(()=>{i?(clearInterval(n),e()):r&&(clearInterval(n),t(r))},50)}):(n=!0,new Promise((o,
|
|
1
|
+
!function(e){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var t="encatch-sdk-script";var n=!1,i=!1,r=null;function o(e){return i?Promise.resolve():r?Promise.reject(r):n?new Promise((e,t)=>{const n=setInterval(()=>{i?(clearInterval(n),e()):r&&(clearInterval(n),t(r))},50)}):(n=!0,new Promise((o,s)=>{if(document.getElementById(t))return n=!1,i=!0,void o();const a=(e.webHost||"https://app.encatch.com")+"/s/sdk/v1/encatch.js?dt="+function(){const e=new Date,t=String(e.getUTCFullYear()).slice(-2),n=String(e.getUTCMonth()+1).padStart(2,"0"),i=String(e.getUTCDate()).padStart(2,"0"),r=String(e.getUTCHours()).padStart(2,"0"),o=30*Math.floor(e.getUTCMinutes()/30);return`${t}${n}${i}${r}${String(o).padStart(2,"0")}`}(),c=document.createElement("script");c.id=t,c.src=a,c.type="module",c.async=!0,c.onload=()=>{n=!1,i=!0,o()},c.onerror=e=>{n=!1,r=new Error(`[Encatch] Failed to load SDK from ${a}. Please check your network connection and web host configuration.`),console.error(r.message,e),s(r)};const l=document.getElementsByTagName("script")[0];l&&l.parentNode?l.parentNode.insertBefore(c,l):document.head.appendChild(c)}))}function s(e,t){return function(...n){e.push([t,...n])}}var a=["init","identifyUser","setLocale","setCountry","setTheme","trackEvent","trackScreen","startSession","pauseSession","resumeSession","stopSession","resetUser","showForm","dismissForm","addToResponse","submitForm","emitEvent","clearAll","addSourceTracking"];function c(){const e=[],t=[],n={_q:e,_eventCallbacks:t,_initialized:!1,_apiKey:null,_config:{},init(t,i){n._initialized?console.warn("[Encatch] SDK already initialized. Ignoring init call."):(n._apiKey=t,n._config=i||{},n._initialized=!0,e.push(["init",t,i]),"undefined"!=typeof window&&"undefined"!=typeof document&&o(n._config).catch(e=>{console.error("[Encatch] Failed to initialize SDK:",e)}))},on:e=>(t.push(e),()=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)}),identifyUser:()=>{},setLocale:()=>{},setCountry:()=>{},setTheme:()=>{},trackEvent:()=>{},trackScreen:()=>{},startSession:()=>{},pauseSession:()=>{},resumeSession:()=>{},stopSession:()=>{},resetUser:()=>{},showForm:()=>{},dismissForm:()=>{},addToResponse:()=>{},submitForm:()=>{},emitEvent:()=>{},refineText:()=>Promise.resolve({}),qnaWithAi:()=>Promise.resolve({answer:""}),streamQnaWithAi:()=>Promise.resolve(),uploadFile:()=>Promise.reject(new Error("[Encatch] uploadFile is not available before SDK initialization")),clearAll:()=>{},addSourceTracking:()=>{}},i=a.filter(e=>"init"!==e);for(const r of i)n[r]=s(e,r);return n}var l=function(){if("undefined"!=typeof window){const e=window._encatch;if(e&&Array.isArray(e._q)){const t=c();return t._q.push(...e._q),Array.isArray(e._eventCallbacks)&&t._eventCallbacks.push(...e._eventCallbacks),e._initialized&&(t._initialized=e._initialized,t._apiKey=e._apiKey,t._config=e._config||{}),window._encatch=t,t}const t=c();return window._encatch=t,t}return c()}();e._encatch=l,e.default=l}(this._encatch=this._encatch||{});
|
|
2
2
|
//# sourceMappingURL=encatch.iife.js.map
|
package/dist/encatch.iife.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encatch.iife.js","names":[],"sources":["../src/loader.ts","../src/queue.ts","../src/index.ts"],"sourcesContent":["/**\n * Script Loader Utility\n * \n * Handles the dynamic loading of the remote SDK implementation script.\n * Provides error handling and prevents duplicate script injection.\n */\n\nimport type { EncatchConfig } from './types';\n\n/** Default web host for the remote implementation script */\nconst DEFAULT_WEB_HOST = 'https://app.encatch.com';\n\n/** Fixed path for the SDK script */\nconst SDK_SCRIPT_PATH = '/s/sdk/v1/encatch.js';\n\n/** Script element ID to prevent duplicate injections */\nconst SCRIPT_ID = 'encatch-sdk-script';\n\n/**\n * Returns a cache-bust string that changes at most every 30 minutes (YYMMDDHHmm, mm is 00 or 30).\n * Allows the script to be cached for up to 30 minutes before a new URL triggers a fresh fetch.\n */\nfunction getCacheBustParam(): string {\n const d = new Date();\n const yy = String(d.getUTCFullYear()).slice(-2);\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(d.getUTCDate()).padStart(2, '0');\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const min30 = Math.floor(d.getUTCMinutes() / 30) * 30;\n const minStr = String(min30).padStart(2, '0');\n return `${yy}${mm}${dd}${hh}${minStr}`;\n}\n\n/** Track loading state */\nlet isLoading = false;\nlet isLoaded = false;\nlet loadError: Error | null = null;\n\n/**\n * Load the remote SDK implementation script\n * \n * @param config - Configuration containing optional custom web host\n * @returns Promise that resolves when script loads, rejects on error\n */\nexport function loadRemoteScript(config: EncatchConfig): Promise<void> {\n // Return early if already loaded\n if (isLoaded) {\n return Promise.resolve();\n }\n\n // Return error if previous load failed\n if (loadError) {\n return Promise.reject(loadError);\n }\n\n // Return existing promise if already loading\n if (isLoading) {\n return new Promise((resolve, reject) => {\n const checkInterval = setInterval(() => {\n if (isLoaded) {\n clearInterval(checkInterval);\n resolve();\n } else if (loadError) {\n clearInterval(checkInterval);\n reject(loadError);\n }\n }, 50);\n });\n }\n\n isLoading = true;\n\n return new Promise((resolve, reject) => {\n // Check if script already exists in DOM\n const existingScript = document.getElementById(SCRIPT_ID);\n if (existingScript) {\n isLoading = false;\n isLoaded = true;\n resolve();\n return;\n }\n\n // Determine script URL from webHost (with 30-min cache-bust so script is cached at most 30 min)\n const webHost = config.webHost || DEFAULT_WEB_HOST;\n const scriptUrl = webHost + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n\n // Create and configure script element\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = scriptUrl;\n script.type = 'module';\n script.async = true;\n\n // Handle successful load\n script.onload = () => {\n isLoading = false;\n isLoaded = true;\n resolve();\n };\n\n // Handle load error\n script.onerror = (event) => {\n isLoading = false;\n loadError = new Error(\n `[Encatch] Failed to load SDK from ${scriptUrl}. ` +\n `Please check your network connection and web host configuration.`\n );\n console.error(loadError.message, event);\n reject(loadError);\n };\n\n // Inject script into document head\n const firstScript = document.getElementsByTagName('script')[0];\n if (firstScript && firstScript.parentNode) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n });\n}\n\n/**\n * Check if the remote script has been loaded\n */\nexport function isScriptLoaded(): boolean {\n return isLoaded;\n}\n\n/**\n * Reset loader state (useful for testing)\n */\nexport function resetLoaderState(): void {\n isLoading = false;\n isLoaded = false;\n loadError = null;\n}\n\n/**\n * Get the default script URL (includes current 30-min cache-bust param)\n */\nexport function getDefaultScriptUrl(): string {\n return DEFAULT_WEB_HOST + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n}\n","/**\n * Command Queue Implementation\n * \n * Manages the queue of SDK method calls that occur before the remote\n * implementation script has loaded. Commands are stored as tuples\n * and processed FIFO when the remote script becomes available.\n */\n\nimport type { Command, EncatchSDK } from './types';\n\n/**\n * Process all queued commands by calling the corresponding methods\n * on the SDK instance. This is called by the remote script once loaded.\n * \n * @param sdk - The SDK instance with real implementations\n * @param queue - Array of queued commands to process\n */\nexport function processQueue(sdk: EncatchSDK, queue: Command[]): void {\n while (queue.length > 0) {\n const command = queue.shift();\n if (!command) continue;\n\n const [method, ...args] = command;\n \n // Skip internal properties\n if (method.startsWith('_')) continue;\n\n // Get the method from the SDK\n const fn = sdk[method as keyof EncatchSDK];\n \n if (typeof fn === 'function') {\n try {\n (fn as (...args: unknown[]) => void).apply(sdk, args);\n } catch (error) {\n console.error(`[Encatch] Error processing queued command \"${method}\":`, error);\n }\n } else {\n console.warn(`[Encatch] Unknown method in queue: \"${method}\"`);\n }\n }\n}\n\n/**\n * Creates a stub method that queues calls for later processing\n * \n * @param queue - The command queue array\n * @param methodName - Name of the method being stubbed\n * @returns A function that pushes calls to the queue\n */\nexport function createQueuedMethod(\n queue: Command[],\n methodName: string\n): (...args: unknown[]) => void {\n return function (...args: unknown[]): void {\n queue.push([methodName, ...args]);\n };\n}\n\n/**\n * List of SDK methods that should be queued before initialization\n */\nexport const QUEUED_METHODS = [\n 'init',\n 'identifyUser',\n 'setLocale',\n 'setCountry',\n 'setTheme',\n 'trackEvent',\n 'trackScreen',\n 'startSession',\n 'resetUser',\n 'showForm',\n 'dismissForm',\n 'addToResponse',\n 'submitForm',\n 'emitEvent',\n 'clearAll',\n 'addSourceTracking',\n] as const;\n\nexport type QueuedMethodName = typeof QUEUED_METHODS[number];\n","/**\n * Encatch Web SDK\n * \n * A lightweight, type-safe SDK for integrating Encatch forms and surveys.\n * This module creates the _encatch global object that queues commands\n * until the remote implementation script loads.\n */\n\nimport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n EventCallback,\n Command,\n} from './types';\nimport { loadRemoteScript } from './loader';\nimport { createQueuedMethod, QUEUED_METHODS } from './queue';\n\n// Re-export types for consumers\nexport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n StartSessionOptions,\n EventType,\n EventCallback,\n EventPayload,\n Theme,\n ResetMode,\n ShowFormOptions,\n ShowFormInterceptorPayload,\n SubmitFormRequest,\n FormDetails,\n QuestionResponse,\n QuestionAnswer,\n RefineTextRequest,\n RefineTextResponse,\n QnaWithAiConversationTurn,\n QnaWithAiRequest,\n QnaWithAiResponse,\n UploadFileRequest,\n UploadFileResponse,\n} from './types';\n\n/**\n * Creates the Encatch SDK stub instance\n * All method calls are queued until setProject() is called and the\n * remote implementation script loads.\n */\nfunction createEncatchStub(): EncatchSDK {\n // Command queue for calls made before remote script loads\n const queue: Command[] = [];\n \n // Event callbacks - all callbacks receive all form events\n const eventCallbacks: EventCallback[] = [];\n\n // Create the SDK object\n const sdk: EncatchSDK = {\n // Internal state\n _q: queue,\n _eventCallbacks: eventCallbacks,\n _initialized: false,\n _apiKey: null,\n _config: {},\n\n // init is special - it triggers script loading\n init(apiKey: string, config?: EncatchConfig): void {\n if (sdk._initialized) {\n console.warn('[Encatch] SDK already initialized. Ignoring init call.');\n return;\n }\n\n sdk._apiKey = apiKey;\n sdk._config = config || {};\n sdk._initialized = true;\n\n // Queue this call for the remote implementation\n queue.push(['init', apiKey, config]);\n\n // Load the remote script\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n loadRemoteScript(sdk._config).catch((error) => {\n console.error('[Encatch] Failed to initialize SDK:', error);\n });\n }\n },\n\n // Event subscription - receives all form events\n on(callback: EventCallback): () => void {\n eventCallbacks.push(callback);\n\n // Return unsubscribe function\n return () => {\n const index = eventCallbacks.indexOf(callback);\n if (index > -1) {\n eventCallbacks.splice(index, 1);\n }\n };\n },\n\n // Stub implementations - will be replaced by remote script\n identifyUser: () => {},\n setLocale: () => {},\n setCountry: () => {},\n setTheme: () => {},\n trackEvent: () => {},\n trackScreen: () => {},\n startSession: () => {},\n resetUser: () => {},\n showForm: () => {},\n dismissForm: () => {},\n addToResponse: () => {},\n submitForm: () => {},\n emitEvent: () => {},\n refineText: () => Promise.resolve({}),\n qnaWithAi: () => Promise.resolve({ answer: '' }),\n streamQnaWithAi: () => Promise.resolve(),\n uploadFile: () => Promise.reject(new Error('[Encatch] uploadFile is not available before SDK initialization')),\n clearAll: () => {},\n addSourceTracking: () => {},\n };\n\n // Replace stub methods with queue-based versions\n // Skip init (handled specially above) and on (handled locally)\n const methodsToQueue = QUEUED_METHODS.filter(m => m !== 'init');\n \n for (const method of methodsToQueue) {\n // Use type assertion to assign queued methods\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sdk as any)[method] = createQueuedMethod(queue, method);\n }\n\n return sdk;\n}\n\n/**\n * Initialize the global _encatch object\n * This runs immediately when the script loads\n */\nfunction initGlobal(): EncatchSDK {\n // Check for existing instance (may have been created by snippet)\n if (typeof window !== 'undefined') {\n // If _encatch already exists with a queue, preserve it\n const existing = window._encatch;\n if (existing && Array.isArray(existing._q)) {\n // Merge existing queue into new instance\n const sdk = createEncatchStub();\n sdk._q.push(...existing._q);\n \n // Copy over any existing callbacks\n if (Array.isArray(existing._eventCallbacks)) {\n sdk._eventCallbacks.push(...existing._eventCallbacks);\n }\n \n // Copy initialization state\n if (existing._initialized) {\n sdk._initialized = existing._initialized;\n sdk._apiKey = existing._apiKey;\n sdk._config = existing._config || {};\n }\n \n window._encatch = sdk;\n return sdk;\n }\n\n // Create fresh instance\n const sdk = createEncatchStub();\n window._encatch = sdk;\n return sdk;\n }\n\n // Non-browser environment\n return createEncatchStub();\n}\n\n// Initialize and export\nexport const _encatch = initGlobal();\n\n// Default export for convenience\nexport default _encatch;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"encatch.iife.js","names":[],"sources":["../src/loader.ts","../src/queue.ts","../src/index.ts"],"sourcesContent":["/**\n * Script Loader Utility\n * \n * Handles the dynamic loading of the remote SDK implementation script.\n * Provides error handling and prevents duplicate script injection.\n */\n\nimport type { EncatchConfig } from './types';\n\n/** Default web host for the remote implementation script */\nconst DEFAULT_WEB_HOST = 'https://app.encatch.com';\n\n/** Fixed path for the SDK script */\nconst SDK_SCRIPT_PATH = '/s/sdk/v1/encatch.js';\n\n/** Script element ID to prevent duplicate injections */\nconst SCRIPT_ID = 'encatch-sdk-script';\n\n/**\n * Returns a cache-bust string that changes at most every 30 minutes (YYMMDDHHmm, mm is 00 or 30).\n * Allows the script to be cached for up to 30 minutes before a new URL triggers a fresh fetch.\n */\nfunction getCacheBustParam(): string {\n const d = new Date();\n const yy = String(d.getUTCFullYear()).slice(-2);\n const mm = String(d.getUTCMonth() + 1).padStart(2, '0');\n const dd = String(d.getUTCDate()).padStart(2, '0');\n const hh = String(d.getUTCHours()).padStart(2, '0');\n const min30 = Math.floor(d.getUTCMinutes() / 30) * 30;\n const minStr = String(min30).padStart(2, '0');\n return `${yy}${mm}${dd}${hh}${minStr}`;\n}\n\n/** Track loading state */\nlet isLoading = false;\nlet isLoaded = false;\nlet loadError: Error | null = null;\n\n/**\n * Load the remote SDK implementation script\n * \n * @param config - Configuration containing optional custom web host\n * @returns Promise that resolves when script loads, rejects on error\n */\nexport function loadRemoteScript(config: EncatchConfig): Promise<void> {\n // Return early if already loaded\n if (isLoaded) {\n return Promise.resolve();\n }\n\n // Return error if previous load failed\n if (loadError) {\n return Promise.reject(loadError);\n }\n\n // Return existing promise if already loading\n if (isLoading) {\n return new Promise((resolve, reject) => {\n const checkInterval = setInterval(() => {\n if (isLoaded) {\n clearInterval(checkInterval);\n resolve();\n } else if (loadError) {\n clearInterval(checkInterval);\n reject(loadError);\n }\n }, 50);\n });\n }\n\n isLoading = true;\n\n return new Promise((resolve, reject) => {\n // Check if script already exists in DOM\n const existingScript = document.getElementById(SCRIPT_ID);\n if (existingScript) {\n isLoading = false;\n isLoaded = true;\n resolve();\n return;\n }\n\n // Determine script URL from webHost (with 30-min cache-bust so script is cached at most 30 min)\n const webHost = config.webHost || DEFAULT_WEB_HOST;\n const scriptUrl = webHost + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n\n // Create and configure script element\n const script = document.createElement('script');\n script.id = SCRIPT_ID;\n script.src = scriptUrl;\n script.type = 'module';\n script.async = true;\n\n // Handle successful load\n script.onload = () => {\n isLoading = false;\n isLoaded = true;\n resolve();\n };\n\n // Handle load error\n script.onerror = (event) => {\n isLoading = false;\n loadError = new Error(\n `[Encatch] Failed to load SDK from ${scriptUrl}. ` +\n `Please check your network connection and web host configuration.`\n );\n console.error(loadError.message, event);\n reject(loadError);\n };\n\n // Inject script into document head\n const firstScript = document.getElementsByTagName('script')[0];\n if (firstScript && firstScript.parentNode) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n });\n}\n\n/**\n * Check if the remote script has been loaded\n */\nexport function isScriptLoaded(): boolean {\n return isLoaded;\n}\n\n/**\n * Reset loader state (useful for testing)\n */\nexport function resetLoaderState(): void {\n isLoading = false;\n isLoaded = false;\n loadError = null;\n}\n\n/**\n * Get the default script URL (includes current 30-min cache-bust param)\n */\nexport function getDefaultScriptUrl(): string {\n return DEFAULT_WEB_HOST + SDK_SCRIPT_PATH + '?dt=' + getCacheBustParam();\n}\n","/**\n * Command Queue Implementation\n * \n * Manages the queue of SDK method calls that occur before the remote\n * implementation script has loaded. Commands are stored as tuples\n * and processed FIFO when the remote script becomes available.\n */\n\nimport type { Command, EncatchSDK } from './types';\n\n/**\n * Process all queued commands by calling the corresponding methods\n * on the SDK instance. This is called by the remote script once loaded.\n * \n * @param sdk - The SDK instance with real implementations\n * @param queue - Array of queued commands to process\n */\nexport function processQueue(sdk: EncatchSDK, queue: Command[]): void {\n while (queue.length > 0) {\n const command = queue.shift();\n if (!command) continue;\n\n const [method, ...args] = command;\n \n // Skip internal properties\n if (method.startsWith('_')) continue;\n\n // Get the method from the SDK\n const fn = sdk[method as keyof EncatchSDK];\n \n if (typeof fn === 'function') {\n try {\n (fn as (...args: unknown[]) => void).apply(sdk, args);\n } catch (error) {\n console.error(`[Encatch] Error processing queued command \"${method}\":`, error);\n }\n } else {\n console.warn(`[Encatch] Unknown method in queue: \"${method}\"`);\n }\n }\n}\n\n/**\n * Creates a stub method that queues calls for later processing\n * \n * @param queue - The command queue array\n * @param methodName - Name of the method being stubbed\n * @returns A function that pushes calls to the queue\n */\nexport function createQueuedMethod(\n queue: Command[],\n methodName: string\n): (...args: unknown[]) => void {\n return function (...args: unknown[]): void {\n queue.push([methodName, ...args]);\n };\n}\n\n/**\n * List of SDK methods that should be queued before initialization\n */\nexport const QUEUED_METHODS = [\n 'init',\n 'identifyUser',\n 'setLocale',\n 'setCountry',\n 'setTheme',\n 'trackEvent',\n 'trackScreen',\n 'startSession',\n 'pauseSession',\n 'resumeSession',\n 'stopSession',\n 'resetUser',\n 'showForm',\n 'dismissForm',\n 'addToResponse',\n 'submitForm',\n 'emitEvent',\n 'clearAll',\n 'addSourceTracking',\n] as const;\n\nexport type QueuedMethodName = typeof QUEUED_METHODS[number];\n","/**\n * Encatch Web SDK\n * \n * A lightweight, type-safe SDK for integrating Encatch forms and surveys.\n * This module creates the _encatch global object that queues commands\n * until the remote implementation script loads.\n */\n\nimport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n EventCallback,\n Command,\n} from './types';\nimport { loadRemoteScript } from './loader';\nimport { createQueuedMethod, QUEUED_METHODS } from './queue';\n\n// Re-export types for consumers\nexport type {\n EncatchSDK,\n EncatchConfig,\n UserTraits,\n IdentifyOptions,\n StartSessionOptions,\n EventType,\n EventCallback,\n EventPayload,\n Theme,\n ResetMode,\n ShowFormOptions,\n ShowFormInterceptorPayload,\n SubmitFormRequest,\n FormDetails,\n QuestionResponse,\n QuestionAnswer,\n RefineTextRequest,\n RefineTextResponse,\n QnaWithAiConversationTurn,\n QnaWithAiRequest,\n QnaWithAiResponse,\n UploadFileRequest,\n UploadFileResponse,\n} from './types';\n\n/**\n * Creates the Encatch SDK stub instance\n * All method calls are queued until setProject() is called and the\n * remote implementation script loads.\n */\nfunction createEncatchStub(): EncatchSDK {\n // Command queue for calls made before remote script loads\n const queue: Command[] = [];\n \n // Event callbacks - all callbacks receive all form events\n const eventCallbacks: EventCallback[] = [];\n\n // Create the SDK object\n const sdk: EncatchSDK = {\n // Internal state\n _q: queue,\n _eventCallbacks: eventCallbacks,\n _initialized: false,\n _apiKey: null,\n _config: {},\n\n // init is special - it triggers script loading\n init(apiKey: string, config?: EncatchConfig): void {\n if (sdk._initialized) {\n console.warn('[Encatch] SDK already initialized. Ignoring init call.');\n return;\n }\n\n sdk._apiKey = apiKey;\n sdk._config = config || {};\n sdk._initialized = true;\n\n // Queue this call for the remote implementation\n queue.push(['init', apiKey, config]);\n\n // Load the remote script\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n loadRemoteScript(sdk._config).catch((error) => {\n console.error('[Encatch] Failed to initialize SDK:', error);\n });\n }\n },\n\n // Event subscription - receives all form events\n on(callback: EventCallback): () => void {\n eventCallbacks.push(callback);\n\n // Return unsubscribe function\n return () => {\n const index = eventCallbacks.indexOf(callback);\n if (index > -1) {\n eventCallbacks.splice(index, 1);\n }\n };\n },\n\n // Stub implementations - will be replaced by remote script\n identifyUser: () => {},\n setLocale: () => {},\n setCountry: () => {},\n setTheme: () => {},\n trackEvent: () => {},\n trackScreen: () => {},\n startSession: () => {},\n pauseSession: () => {},\n resumeSession: () => {},\n stopSession: () => {},\n resetUser: () => {},\n showForm: () => {},\n dismissForm: () => {},\n addToResponse: () => {},\n submitForm: () => {},\n emitEvent: () => {},\n refineText: () => Promise.resolve({}),\n qnaWithAi: () => Promise.resolve({ answer: '' }),\n streamQnaWithAi: () => Promise.resolve(),\n uploadFile: () => Promise.reject(new Error('[Encatch] uploadFile is not available before SDK initialization')),\n clearAll: () => {},\n addSourceTracking: () => {},\n };\n\n // Replace stub methods with queue-based versions\n // Skip init (handled specially above) and on (handled locally)\n const methodsToQueue = QUEUED_METHODS.filter(m => m !== 'init');\n \n for (const method of methodsToQueue) {\n // Use type assertion to assign queued methods\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (sdk as any)[method] = createQueuedMethod(queue, method);\n }\n\n return sdk;\n}\n\n/**\n * Initialize the global _encatch object\n * This runs immediately when the script loads\n */\nfunction initGlobal(): EncatchSDK {\n // Check for existing instance (may have been created by snippet)\n if (typeof window !== 'undefined') {\n // If _encatch already exists with a queue, preserve it\n const existing = window._encatch;\n if (existing && Array.isArray(existing._q)) {\n // Merge existing queue into new instance\n const sdk = createEncatchStub();\n sdk._q.push(...existing._q);\n \n // Copy over any existing callbacks\n if (Array.isArray(existing._eventCallbacks)) {\n sdk._eventCallbacks.push(...existing._eventCallbacks);\n }\n \n // Copy initialization state\n if (existing._initialized) {\n sdk._initialized = existing._initialized;\n sdk._apiKey = existing._apiKey;\n sdk._config = existing._config || {};\n }\n \n window._encatch = sdk;\n return sdk;\n }\n\n // Create fresh instance\n const sdk = createEncatchStub();\n window._encatch = sdk;\n return sdk;\n }\n\n // Non-browser environment\n return createEncatchStub();\n}\n\n// Initialize and export\nexport const _encatch = initGlobal();\n\n// Default export for convenience\nexport default _encatch;\n"],"mappings":"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"}
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,SAAS,CAAC;AAKjB,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,EACL,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EAMX,MAAM,SAAS,CAAC;AAKjB,YAAY,EACV,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,KAAK,EACL,SAAS,EACT,eAAe,EACf,0BAA0B,EAC1B,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,SAAS,CAAC;AAyIjB,eAAO,MAAM,QAAQ,YAAe,CAAC;AAGrC,eAAe,QAAQ,CAAC"}
|
package/dist/src/queue.d.ts
CHANGED
|
@@ -18,6 +18,6 @@ export declare function createQueuedMethod(queue: Command[], methodName: string)
|
|
|
18
18
|
/**
|
|
19
19
|
* List of SDK methods that should be queued before initialization
|
|
20
20
|
*/
|
|
21
|
-
export declare const QUEUED_METHODS: readonly ["init", "identifyUser", "setLocale", "setCountry", "setTheme", "trackEvent", "trackScreen", "startSession", "resetUser", "showForm", "dismissForm", "addToResponse", "submitForm", "emitEvent", "clearAll", "addSourceTracking"];
|
|
21
|
+
export declare const QUEUED_METHODS: readonly ["init", "identifyUser", "setLocale", "setCountry", "setTheme", "trackEvent", "trackScreen", "startSession", "pauseSession", "resumeSession", "stopSession", "resetUser", "showForm", "dismissForm", "addToResponse", "submitForm", "emitEvent", "clearAll", "addSourceTracking"];
|
|
22
22
|
export type QueuedMethodName = typeof QUEUED_METHODS[number];
|
|
23
23
|
//# sourceMappingURL=queue.d.ts.map
|
package/dist/src/queue.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAuBpE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EAAE,EAChB,UAAU,EAAE,MAAM,GACjB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAI9B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEnD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,CAuBpE;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EAAE,EAChB,UAAU,EAAE,MAAM,GACjB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAI9B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,4RAoBjB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC"}
|
package/dist/src/types.d.ts
CHANGED
|
@@ -43,7 +43,10 @@ export interface IdentifyOptions {
|
|
|
43
43
|
export interface StartSessionOptions {
|
|
44
44
|
/** When true, do not call the immediate ping (30s ping interval still runs) */
|
|
45
45
|
skipImmediatePing?: boolean;
|
|
46
|
-
/**
|
|
46
|
+
/**
|
|
47
|
+
* When true, do not send the initial trackScreen for the current URL
|
|
48
|
+
* (URL change listeners still run). Defaults to true.
|
|
49
|
+
*/
|
|
47
50
|
skipImmediateTrackScreen?: boolean;
|
|
48
51
|
}
|
|
49
52
|
/**
|
|
@@ -248,7 +251,18 @@ export interface ShowFormOptions {
|
|
|
248
251
|
/**
|
|
249
252
|
* Event types that can be subscribed to
|
|
250
253
|
*/
|
|
251
|
-
export type EventType = 'form:show' | 'form:started' | 'form:submit' | 'form:complete' | 'form:close' | 'form:dismissed' | 'form:error' | 'form:section:change' | 'form:answered'
|
|
254
|
+
export type EventType = 'form:show' | 'form:started' | 'form:submit' | 'form:complete' | 'form:close' | 'form:dismissed' | 'form:error' | 'form:section:change' | 'form:answered' | 'form:remindmelater'
|
|
255
|
+
/**
|
|
256
|
+
* Fired when a completionCta action fires on a thank_you or exit_form screen.
|
|
257
|
+
* payload.data: { action, route?, url?, surface, trigger }
|
|
258
|
+
*
|
|
259
|
+
* - action "app_navigate": form stays open; host navigates to data.route then calls
|
|
260
|
+
* `_encatch.dismissForm(payload.formId)`.
|
|
261
|
+
* - action "redirect_internal": the SDK navigates the parent page to data.url (same tab);
|
|
262
|
+
* the form is already closing.
|
|
263
|
+
* - action "redirect_external": the SDK opens data.url in a new tab; the form is already closing.
|
|
264
|
+
*/
|
|
265
|
+
| 'form:ctaTriggered';
|
|
252
266
|
/**
|
|
253
267
|
* Event callback function type
|
|
254
268
|
* Receives all form events with the event type and payload
|
|
@@ -318,6 +332,23 @@ export interface EncatchSDK {
|
|
|
318
332
|
* @param options - Optional flags to skip immediate ping and/or immediate trackScreen
|
|
319
333
|
*/
|
|
320
334
|
startSession(options?: StartSessionOptions): void;
|
|
335
|
+
/**
|
|
336
|
+
* Temporarily stops the automatic background ping without affecting open forms,
|
|
337
|
+
* URL change listeners, or user identity. Reversed by resumeSession().
|
|
338
|
+
* Not persisted — clears automatically on page reload.
|
|
339
|
+
*/
|
|
340
|
+
pauseSession(): void;
|
|
341
|
+
/**
|
|
342
|
+
* Restarts the background ping interval after a pauseSession() call.
|
|
343
|
+
* No-op if the session was not paused.
|
|
344
|
+
*/
|
|
345
|
+
resumeSession(): void;
|
|
346
|
+
/**
|
|
347
|
+
* Fully suspends all SDK activity — stops the ping interval, URL change
|
|
348
|
+
* tracking, and closes any open forms. User identity is preserved.
|
|
349
|
+
* Persists across page reloads via localStorage. Re-enable with startSession().
|
|
350
|
+
*/
|
|
351
|
+
stopSession(): void;
|
|
321
352
|
/**
|
|
322
353
|
* Reset the current user (logout)
|
|
323
354
|
* Reverts the SDK to anonymous mode
|
package/dist/src/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED