@brainfish-ai/widgets-initiator 1.3.1 → 1.3.2-alpha.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/web.cjs.js CHANGED
@@ -1,3 +1,3 @@
1
- "use strict";var j=Object.defineProperty,P=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var H=Object.getOwnPropertySymbols;var I=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var b=(t,n,r)=>n in t?j(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,v=(t,n)=>{for(var r in n||(n={}))I.call(n,r)&&b(t,r,n[r]);if(H)for(var r of H(n))N.call(n,r)&&b(t,r,n[r]);return t},A=(t,n)=>P(t,C(n));var W=(t,n,r)=>b(t,typeof n!="symbol"?n+"":n,r);var g=(t,n,r)=>new Promise((o,i)=>{var s=d=>{try{a(r.next(d))}catch(u){i(u)}},e=d=>{try{a(r.throw(d))}catch(u){i(u)}},a=d=>d.done?o(d.value):Promise.resolve(d.value).then(s,e);a((r=r.apply(t,n)).next())});var w,E;(function(){try{var t=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="053bf5f5-5be3-4ad4-989d-8ee484c5eca8",t._sentryDebugIdIdentifier="sentry-dbid-053bf5f5-5be3-4ad4-989d-8ee484c5eca8")}catch(r){}})(),Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),(typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{}).SENTRY_RELEASE={id:"ac9cf9209e95255630df49da6d6d074c4194baba"},function(t){t.Sidebar="sidebar",t.Searchbar="searchbar"}(w||(w={})),w.Sidebar,w.Searchbar;class K extends Error{constructor(r,o){super(r,o);W(this,"cause");this.name="BrainfishWidgetError",this.cause=o==null?void 0:o.cause,Error.captureStackTrace&&Error.captureStackTrace(this,K),this.cause instanceof Error&&this.cause.stack&&(this.stack=this.stack+`
2
- Caused by: `+this.cause.stack)}toJSON(){return{name:this.name,message:this.message,stack:this.stack,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message,stack:this.cause.stack}:this.cause}}}(function(t){t.LINK="link",t.CALLBACK="callback",t.EMAIL="email",t.PHONE="phone"})(E||(E={}));const h=(t,n,r,o)=>{let i=r,s={};if(n instanceof Error)try{s=JSON.parse(n.message),i+=` - ${s.message||n.message}`}catch(e){i+=` - ${n.message}`}else i+=` - ${String(n)}`;((e,a,d)=>{if(!navigator||navigator.userAgent.toLowerCase().includes("headless"))return;const u=a.toJSON();fetch(`${e||"https://app.brainfi.sh"}/api/trackError.widget.create`,{method:"POST",headers:{"Content-Type":"application/json","api-key":d},body:JSON.stringify({error:`WebWidgetVersion: 1.3.1. ${a.message}`,stack:a.stack,cause:{message:u.message,stack:u.stack,cause:u.cause}})})})(t,new K(i,{cause:s}),o)},L=t=>g(exports,null,function*(){let{widgetKey:n,apiHost:r}=t;return function(o,i,s){return g(this,null,function*(){return fetch(`${o}${i}`,{method:"POST",headers:{"Content-Type":"application/json","api-key":s}}).then(e=>{if(!e.ok)throw new Error(`API call failed with status: ${e.status}`);return e.json()}).then(e=>{if(!e)throw new Error("Error loading config: empty response");return e}).catch(e=>{h(o,e,"Error fetching config",s)})})}(r,"/api/searchWidgets.getConfigByKey",n)}),_=t=>{let{config:n,apiKey:r,apiHost:o}=t;const i=n.settings||{};return["bodyActionButtons","footerActionButtons","nextBestActions"].forEach(s=>{i[s]&&(i[s]=i[s].map(e=>e.type===E.CALLBACK&&e.value?A(v({},e),{value:new Function(`return ${e.value}`)()}):e))}),A(v({},n),{settings:i,apiHost:o,widgetMode:n.widgetType,apiKey:r})},$=t=>(t==null?void 0:t.apiHost)||"https://app.brainfi.sh",k=(()=>{if(typeof window=="undefined")return;const t=window.navigator.userAgent;if(!(t.match(/iPad/i)||t.match(/iPhone/i)))return!1;const n=t.match(/OS (\d+)_/i);return n&&parseInt(n[1],10)<=14})(),R=t=>g(exports,null,function*(){let{apiHost:n,widgetKey:r,version:o}=t;try{const i=`https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${o}/dist/web.js`,s=k?i.replace("web.js","web.umd.js"):i;return{widget:yield(a=>g(exports,null,function*(){return document.getElementById("brainfish-widget")?window.Brainfish:new Promise((d,u)=>{const c=document.createElement("script");c.id="brainfish-widget",c.src=a,c.type=k?"text/javascript":"module",c.async=!0,c.crossOrigin="anonymous",c.onload=()=>{setTimeout(()=>{const l=window.Brainfish;l?d(l):u(new Error("Failed to load Brainfish module"))},200)},c.onerror=l=>{const f=l,y={message:`Failed to load script: ${a}`,type:f.type,fileName:f.filename,lineNumber:f.lineno,columnNumber:f.colno,error:f.error?f.error.toString():"Unknown error"};u(new Error(JSON.stringify(y)))},k||document.head.appendChild(c)})}))(s)}}catch(i){h(n,i,i.message,r)}}),O=new Set,F=(t,n)=>g(exports,null,function*(){const r=$(t.overrides);try{if(O.has(t.widgetKey))return;const o=yield R({apiHost:r,widgetKey:t.widgetKey,version:n.version||"latest"});if(o){const{widget:i}=o,s=_({config:n,apiKey:t.widgetKey,apiHost:r});return t.overrides&&n.settings&&Object.entries(t.overrides).forEach(e=>{let[a,d]=e;n.settings&&a in n.settings&&(n.settings[a]=function(){let u=arguments.length>1?arguments[1]:void 0;const c=new Map((arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).map(l=>[l.label,l]));return u.forEach(l=>c.set(l.label,l)),Array.from(c.values())}(n.settings[a],d))}),function(e,a){a.widgetType===w.Searchbar||a.widgetType==="Search"?e.SearchWidget.initStandard(a):e.HelpWidget.initPopup(a)}(i,s),O.add(t.widgetKey),i}}catch(o){h(r,o,o.message,t.widgetKey)}});let T=!1;const J=function(o,i,s){return g(this,arguments,function*(t,n,r){let e=arguments.length>3&&arguments[3]!==void 0?arguments[3]:void 0,a=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(n||h(r,new Error("Access key is required"),"Access key is required",t),!T)try{window.BrainfishAnalytics("init",{apiUrl:e,accessKey:n,trackScreenViews:!0,trackAttributes:!0,trackOutgoingLinks:!0,enableRecording:a}),T=!0,yield((d,u)=>g(this,null,function*(){if(document.getElementById("brainfish-analytics"))return window.BrainfishAnalytics;const c=document.createElement("script");c.id="brainfish-analytics",c.src="https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js",c.type="module",c.async=!0,c.crossOrigin="anonymous",c.onerror=()=>{h(d,new Error(`Failed to load script: ${c.src}`),`Failed to load script: ${c.src}`,u)},document.head.appendChild(c)}))(r,t)}catch(d){h(r,d,"Failed to initialize BrainfishAnalytics",t)}})};let p=null;const B=typeof window!="undefined"&&window.Brainfish?window.Brainfish:(p||(p=function(){let t=[],n=null;function r(i,s){if(n){const e=i.split(".");let a=n;for(let u=0;u<e.length-1;u++)a=a[e[u]];const d=a[e[e.length-1]];if(typeof d=="function")return d.apply(a,s)}else t.push([i,s])}return{Widgets:{init:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("Widgets.init",s)}},SearchWidget:{initStandard:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("SearchWidget.initStandard",s)}},HelpWidget:{initPopup:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.initPopup",s)},close:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.close",s)},open:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.open",s)},toggle:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.toggle",s)}},_setRealBrainfish:function(i){for(n=i;t.length>0;){const[s,e]=t.shift();r(s,e)}}}}(),typeof window!="undefined"&&(window.Brainfish=p)),p);let S=null;B.Widgets.init=t=>g(exports,null,function*(){window&&(window.BrainfishAnalytics=window.BrainfishAnalytics||function(){for(var s=arguments.length,e=new Array(s),a=0;a<s;a++)e[a]=arguments[a];(window.BrainfishAnalytics.q=window.BrainfishAnalytics.q||[]).push(e)});const n=$(t.overrides),r=((o=t.overrides)==null?void 0:o.analyticsApiHost)||void 0;var o;const{config:i}=yield L({widgetKey:t.widgetKey,apiHost:n});S||(S=function(s,e,a,d){return g(this,null,function*(){var u,c,l;const f=((u=s.overrides)===null||u===void 0?void 0:u.enableRecording)||(e==null||(c=e.settings)===null||c===void 0?void 0:c.enableRecording)||!1,y=[F(s,e)];e!=null&&(l=e.settings)!==null&&l!==void 0&&l.enableTracking&&y.push(J(s.widgetKey,e.trackingToken||"",a,d,f));const[m]=yield Promise.allSettled(y);m.status==="fulfilled"&&m.value&&B._setRealBrainfish(m.value)})}(t,i,n,r)),yield S});exports.BrainfishAnalytics=function(){typeof window!="undefined"&&window.BrainfishAnalytics&&window.BrainfishAnalytics(...arguments)},exports.default=B;
1
+ "use strict";var j=Object.defineProperty,P=Object.defineProperties;var C=Object.getOwnPropertyDescriptors;var H=Object.getOwnPropertySymbols;var I=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var b=(t,n,r)=>n in t?j(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,v=(t,n)=>{for(var r in n||(n={}))I.call(n,r)&&b(t,r,n[r]);if(H)for(var r of H(n))N.call(n,r)&&b(t,r,n[r]);return t},A=(t,n)=>P(t,C(n));var W=(t,n,r)=>b(t,typeof n!="symbol"?n+"":n,r);var g=(t,n,r)=>new Promise((o,i)=>{var s=d=>{try{a(r.next(d))}catch(u){i(u)}},e=d=>{try{a(r.throw(d))}catch(u){i(u)}},a=d=>d.done?o(d.value):Promise.resolve(d.value).then(s,e);a((r=r.apply(t,n)).next())});var w,E;(function(){try{var t=typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{},n=new t.Error().stack;n&&(t._sentryDebugIds=t._sentryDebugIds||{},t._sentryDebugIds[n]="54d1b191-a573-4438-b58c-30bc1594b683",t._sentryDebugIdIdentifier="sentry-dbid-54d1b191-a573-4438-b58c-30bc1594b683")}catch(r){}})(),Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),(typeof window!="undefined"?window:typeof global!="undefined"?global:typeof self!="undefined"?self:{}).SENTRY_RELEASE={id:"fb7115d17b3e82c5c628924377c3bdac5688acb7"},function(t){t.Sidebar="sidebar",t.Searchbar="searchbar"}(w||(w={})),w.Sidebar,w.Searchbar;class K extends Error{constructor(r,o){super(r,o);W(this,"cause");this.name="BrainfishWidgetError",this.cause=o==null?void 0:o.cause,Error.captureStackTrace&&Error.captureStackTrace(this,K),this.cause instanceof Error&&this.cause.stack&&(this.stack=this.stack+`
2
+ Caused by: `+this.cause.stack)}toJSON(){return{name:this.name,message:this.message,stack:this.stack,cause:this.cause instanceof Error?{name:this.cause.name,message:this.cause.message,stack:this.cause.stack}:this.cause}}}(function(t){t.LINK="link",t.CALLBACK="callback",t.EMAIL="email",t.PHONE="phone"})(E||(E={}));const h=(t,n,r,o)=>{let i=r,s={};if(n instanceof Error)try{s=JSON.parse(n.message),i+=` - ${s.message||n.message}`}catch(e){i+=` - ${n.message}`}else i+=` - ${String(n)}`;((e,a,d)=>{if(!navigator||navigator.userAgent.toLowerCase().includes("headless"))return;const u=a.toJSON();fetch(`${e||"https://app.brainfi.sh"}/api/trackError.widget.create`,{method:"POST",headers:{"Content-Type":"application/json","api-key":d},body:JSON.stringify({error:`WebWidgetVersion: 1.3.2-alpha.1. ${a.message}`,stack:a.stack,cause:{message:u.message,stack:u.stack,cause:u.cause}})})})(t,new K(i,{cause:s}),o)},L=t=>g(exports,null,function*(){let{widgetKey:n,apiHost:r}=t;return function(o,i,s){return g(this,null,function*(){return fetch(`${o}${i}`,{method:"POST",headers:{"Content-Type":"application/json","api-key":s}}).then(e=>{if(!e.ok)throw new Error(`API call failed with status: ${e.status}`);return e.json()}).then(e=>{if(!e)throw new Error("Error loading config: empty response");return e}).catch(e=>{h(o,e,"Error fetching config",s)})})}(r,"/api/searchWidgets.getConfigByKey",n)}),_=t=>{let{config:n,apiKey:r,apiHost:o}=t;const i=n.settings||{};return["bodyActionButtons","footerActionButtons","nextBestActions"].forEach(s=>{i[s]&&(i[s]=i[s].map(e=>e.type===E.CALLBACK&&e.value?A(v({},e),{value:new Function(`return ${e.value}`)()}):e))}),A(v({},n),{settings:i,apiHost:o,widgetMode:n.widgetType,apiKey:r})},$=t=>(t==null?void 0:t.apiHost)||"https://app.brainfi.sh",k=(()=>{if(typeof window=="undefined")return;const t=window.navigator.userAgent;if(!(t.match(/iPad/i)||t.match(/iPhone/i)))return!1;const n=t.match(/OS (\d+)_/i);return n&&parseInt(n[1],10)<=14})(),R=t=>g(exports,null,function*(){let{apiHost:n,widgetKey:r,version:o}=t;try{const i=`https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${o}/dist/web.js`,s=k?i.replace("web.js","web.umd.js"):i;return{widget:yield(a=>g(exports,null,function*(){return document.getElementById("brainfish-widget")?window.Brainfish:new Promise((d,u)=>{const c=document.createElement("script");c.id="brainfish-widget",c.src=a,c.type=k?"text/javascript":"module",c.async=!0,c.crossOrigin="anonymous",c.onload=()=>{setTimeout(()=>{const l=window.Brainfish;l?d(l):u(new Error("Failed to load Brainfish module"))},200)},c.onerror=l=>{const f=l,y={message:`Failed to load script: ${a}`,type:f.type,fileName:f.filename,lineNumber:f.lineno,columnNumber:f.colno,error:f.error?f.error.toString():"Unknown error"};u(new Error(JSON.stringify(y)))},k||document.head.appendChild(c)})}))(s)}}catch(i){h(n,i,i.message,r)}}),O=new Set,F=(t,n)=>g(exports,null,function*(){const r=$(t.overrides);try{if(O.has(t.widgetKey))return;const o=yield R({apiHost:r,widgetKey:t.widgetKey,version:n.version||"latest"});if(o){const{widget:i}=o,s=_({config:n,apiKey:t.widgetKey,apiHost:r});return t.overrides&&n.settings&&Object.entries(t.overrides).forEach(e=>{let[a,d]=e;n.settings&&a in n.settings&&(n.settings[a]=function(){let u=arguments.length>1?arguments[1]:void 0;const c=new Map((arguments.length>0&&arguments[0]!==void 0?arguments[0]:[]).map(l=>[l.label,l]));return u.forEach(l=>c.set(l.label,l)),Array.from(c.values())}(n.settings[a],d))}),function(e,a){a.widgetType===w.Searchbar||a.widgetType==="Search"?e.SearchWidget.initStandard(a):e.HelpWidget.initPopup(a)}(i,s),O.add(t.widgetKey),i}}catch(o){h(r,o,o.message,t.widgetKey)}});let T=!1;const J=function(o,i,s){return g(this,arguments,function*(t,n,r){let e=arguments.length>3&&arguments[3]!==void 0?arguments[3]:void 0,a=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(n||h(r,new Error("Access key is required"),"Access key is required",t),!T)try{window.BrainfishAnalytics("init",{apiUrl:e,accessKey:n,trackScreenViews:!0,trackAttributes:!0,trackOutgoingLinks:!0,enableRecording:a}),T=!0,yield((d,u)=>g(this,null,function*(){if(document.getElementById("brainfish-analytics"))return window.BrainfishAnalytics;const c=document.createElement("script");c.id="brainfish-analytics",c.src="https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js",c.type="module",c.async=!0,c.crossOrigin="anonymous",c.onerror=()=>{h(d,new Error(`Failed to load script: ${c.src}`),`Failed to load script: ${c.src}`,u)},document.head.appendChild(c)}))(r,t)}catch(d){h(r,d,"Failed to initialize BrainfishAnalytics",t)}})};let p=null;const B=typeof window!="undefined"&&window.Brainfish?window.Brainfish:(p||(p=function(){let t=[],n=null;function r(i,s){if(n){const e=i.split(".");let a=n;for(let u=0;u<e.length-1;u++)a=a[e[u]];const d=a[e[e.length-1]];if(typeof d=="function")return d.apply(a,s)}else t.push([i,s])}return{Widgets:{init:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("Widgets.init",s)}},SearchWidget:{initStandard:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("SearchWidget.initStandard",s)}},HelpWidget:{initPopup:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.initPopup",s)},close:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.close",s)},open:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.open",s)},toggle:function(){for(var i=arguments.length,s=new Array(i),e=0;e<i;e++)s[e]=arguments[e];return r("HelpWidget.toggle",s)}},_setRealBrainfish:function(i){for(n=i;t.length>0;){const[s,e]=t.shift();r(s,e)}}}}(),typeof window!="undefined"&&(window.Brainfish=p)),p);let S=null;B.Widgets.init=t=>g(exports,null,function*(){window&&(window.BrainfishAnalytics=window.BrainfishAnalytics||function(){for(var s=arguments.length,e=new Array(s),a=0;a<s;a++)e[a]=arguments[a];(window.BrainfishAnalytics.q=window.BrainfishAnalytics.q||[]).push(e)});const n=$(t.overrides),r=((o=t.overrides)==null?void 0:o.analyticsApiHost)||void 0;var o;const{config:i}=yield L({widgetKey:t.widgetKey,apiHost:n});S||(S=function(s,e,a,d){return g(this,null,function*(){var u,c,l;const f=((u=s.overrides)===null||u===void 0?void 0:u.enableRecording)||(e==null||(c=e.settings)===null||c===void 0?void 0:c.enableRecording)||!1,y=[F(s,e)];e!=null&&(l=e.settings)!==null&&l!==void 0&&l.enableTracking&&y.push(J(s.widgetKey,e.trackingToken||"",a,d,f));const[m]=yield Promise.allSettled(y);m.status==="fulfilled"&&m.value&&B._setRealBrainfish(m.value)})}(t,i,n,r)),yield S});exports.BrainfishAnalytics=function(){typeof window!="undefined"&&window.BrainfishAnalytics&&window.BrainfishAnalytics(...arguments)},exports.default=B;
3
3
  //# sourceMappingURL=web.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.cjs.js","sources":["../../common/dist/types/brainfish.js","../../common/dist/types/config.js","../../common/dist/types/BrainfishWidgetError.js","../src/utils/sendErrors.ts","../src/utils/sendBrainfishError.ts","../src/api/getConfigByKey.ts","../src/utils/fetchWithErrorHandling.ts","../src/utils/configTransformer.ts","../src/utils/getApiHost.ts","../src/initSearchWidget.ts","../src/utils/isIOS14OrBelow.ts","../src/initBrainfishAnalytics.ts","../src/web.ts","../src/utils/brainfishQueue.ts","../src/utils/createQueues.ts"],"sourcesContent":["export var WidgetType;\n(function (WidgetType) {\n WidgetType[\"Sidebar\"] = \"sidebar\";\n WidgetType[\"Searchbar\"] = \"searchbar\";\n})(WidgetType || (WidgetType = {}));\n;\nexport const WIDGET_NAMES = {\n [WidgetType.Sidebar]: 'brainfish-sidebar-widget',\n [WidgetType.Searchbar]: 'brainfish-searchbar-widget',\n};\n","const isUrlString = (value) => {\n const urlRegExp = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i;\n return urlRegExp.test(value);\n};\nexport const validateUrlString = (value) => {\n if (!isUrlString(value)) {\n throw new Error(`Invalid URL: ${value}`);\n }\n return value;\n};\nexport var ActionType;\n(function (ActionType) {\n ActionType[\"LINK\"] = \"link\";\n ActionType[\"CALLBACK\"] = \"callback\";\n ActionType[\"EMAIL\"] = \"email\";\n ActionType[\"PHONE\"] = \"phone\";\n})(ActionType || (ActionType = {}));\n","export class BrainfishWidgetError extends Error {\n cause;\n constructor(message, options) {\n super(message, options);\n this.name = 'BrainfishWidgetError';\n this.cause = options?.cause;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrainfishWidgetError);\n }\n // Append cause stack to this error's stack if cause is an Error\n if (this.cause instanceof Error && this.cause.stack) {\n this.stack = this.stack + '\\nCaused by: ' + this.cause.stack;\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause instanceof Error\n ? {\n name: this.cause.name,\n message: this.cause.message,\n stack: this.cause.stack,\n }\n : this.cause,\n };\n }\n}\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\n\ndeclare const __APP_VERSION__: string;\n\nexport const sendErrors = (\n apiHost: string,\n error: BrainfishWidgetError,\n widgetKey: string\n) => {\n // only send errors if browser is not a headless browser\n if (!navigator || navigator.userAgent.toLowerCase().includes('headless')) {\n return;\n }\n\n const errorData = error.toJSON();\n const API_HOST = apiHost || import.meta.env.VITE_API_HOST;\n\n fetch(`${API_HOST}/api/trackError.widget.create`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n body: JSON.stringify({\n error: `WebWidgetVersion: ${__APP_VERSION__}. ${error.message}`,\n stack: error.stack,\n cause: {\n message: errorData.message,\n stack: errorData.stack,\n cause: errorData.cause,\n },\n }),\n });\n};\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\nimport { sendErrors } from './sendErrors';\n\nexport const sendBrainfishWidgetError = (\n apiHost: string,\n error: unknown,\n message: string,\n widgetKey: string\n) => {\n let errorMessage = message;\n let errorDetails: Record<string, any> = {};\n\n if (error instanceof Error) {\n try {\n errorDetails = JSON.parse(error.message);\n errorMessage += ` - ${errorDetails.message || error.message}`;\n } catch {\n // If parsing fails, use the error message as is\n errorMessage += ` - ${error.message}`;\n }\n } else {\n errorMessage += ` - ${String(error)}`;\n }\n\n const err = new BrainfishWidgetError(errorMessage, {\n cause: errorDetails,\n });\n\n sendErrors(apiHost, err, widgetKey);\n};\n","import type { Config } from '@brainfish-ai/widgets-common';\nimport { fetchWithErrorHandling } from '../utils/fetchWithErrorHandling';\n\nexport interface ConfigResponse {\n config: Config;\n}\n\nexport const getConfigByKey = async ({\n widgetKey,\n apiHost,\n}: {\n widgetKey: string;\n apiHost: string;\n}): Promise<ConfigResponse> => {\n const endpoint = `/api/searchWidgets.getConfigByKey`;\n return fetchWithErrorHandling(apiHost, endpoint, widgetKey);\n};\n","import { sendBrainfishWidgetError } from './sendBrainfishError';\n\nexport async function fetchWithErrorHandling(\n apiHost: string,\n endpoint: string,\n widgetKey: string\n): Promise<any> {\n return fetch(`${apiHost}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`API call failed with status: ${response.status}`);\n }\n return response.json();\n })\n .then((data) => {\n if (!data) {\n throw new Error('Error loading config: empty response');\n }\n return data;\n })\n .catch((error) => {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Error fetching config',\n widgetKey\n );\n });\n}\n","import type {\n Config,\n CallbackAction,\n Action,\n} from '@brainfish-ai/widgets-common';\nimport { ActionType } from '@brainfish-ai/widgets-common';\n\nconst mapActionButtons = (actionButtons: (CallbackAction | Action)[]) =>\n actionButtons.map((action) =>\n action.type === ActionType.CALLBACK && action.value\n ? { ...action, value: new Function(`return ${action.value}`)() }\n : action\n );\n\nexport const updateActions = (\n configActions: (Action | CallbackAction)[] = [],\n overrideActions: (Action | CallbackAction)[]\n) => {\n const actionMap = new Map(\n configActions.map((action) => [action.label, action])\n );\n overrideActions.forEach((action) => actionMap.set(action.label, action));\n return Array.from(actionMap.values());\n};\n\nexport const transformConfig = ({\n config,\n apiKey,\n apiHost,\n}: {\n config: Config;\n apiKey: string;\n apiHost: string;\n}) => {\n const settings = config.settings || {};\n (\n ['bodyActionButtons', 'footerActionButtons', 'nextBestActions'] as const\n ).forEach((key) => {\n if (settings[key]) {\n settings[key] = mapActionButtons(\n settings[key] as (CallbackAction | Action)[]\n );\n }\n });\n\n return {\n ...config,\n settings,\n apiHost,\n widgetMode: config.widgetType,\n apiKey,\n };\n};\n","export const getApiHost = (overrides?: { apiHost?: string }): string => {\n return overrides?.apiHost || import.meta.env.VITE_API_HOST;\n};\n\nexport const getAnalyticsApiHost = (overrides?: {\n analyticsApiHost?: string;\n}): string => {\n return overrides?.analyticsApiHost || import.meta.env.VITE_ANALYTICS_API_HOST;\n};\n","import type {\n Config,\n CallbackAction,\n Action,\n Settings,\n} from '@brainfish-ai/widgets-common';\nimport { WidgetType } from '@brainfish-ai/widgets-common';\nimport { isIOS14OrBelow } from './utils/isIOS14OrBelow';\nimport { sendBrainfishWidgetError } from './utils/sendBrainfishError';\nimport type { Brainfish } from './types/brainfish';\nimport { transformConfig, updateActions } from './utils/configTransformer';\nimport { getApiHost } from './utils/getApiHost';\n\nconst useUMD = isIOS14OrBelow();\n\nconst loadSearchWidgetScript = async (url: string): Promise<any> => {\n if (document.getElementById('brainfish-widget')) {\n return (window as any).Brainfish;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.id = 'brainfish-widget';\n script.src = url;\n script.type = useUMD ? 'text/javascript' : 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onload = () => {\n setTimeout(() => {\n const module = (window as any).Brainfish;\n module\n ? resolve(module)\n : reject(new Error('Failed to load Brainfish module'));\n }, 200);\n };\n\n script.onerror = (event) => {\n const errorEvent = event as ErrorEvent;\n const errorDetails = {\n message: `Failed to load script: ${url}`,\n type: errorEvent.type,\n fileName: errorEvent.filename,\n lineNumber: errorEvent.lineno,\n columnNumber: errorEvent.colno,\n error: errorEvent.error ? errorEvent.error.toString() : 'Unknown error',\n };\n reject(new Error(JSON.stringify(errorDetails)));\n };\n\n if (!useUMD) {\n document.head.appendChild(script);\n }\n });\n};\n\nexport const init = async ({\n apiHost,\n widgetKey,\n version,\n}: {\n apiHost: string;\n widgetKey: string;\n version: string;\n}) => {\n try {\n const url = `https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${version}/dist/web.js`;\n const scriptUrl = useUMD ? url.replace('web.js', 'web.umd.js') : url;\n\n const widget = await loadSearchWidgetScript(scriptUrl);\n\n return { widget };\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n widgetKey\n );\n }\n};\n\nfunction initializeWidget(widget: Brainfish, config: Config) {\n if (\n config.widgetType === WidgetType.Searchbar ||\n config.widgetType === 'Search'\n ) {\n widget.SearchWidget.initStandard(config);\n } else {\n widget.HelpWidget.initPopup(config);\n }\n}\n\nconst initializedWidgets = new Set<string>();\n\nexport const initSearchWidget = async (\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config\n): Promise<Brainfish | undefined> => {\n const apiHost = getApiHost(options.overrides);\n\n try {\n // Check if this widget has already been initialized\n if (initializedWidgets.has(options.widgetKey)) {\n // do nothing if already initialized\n return undefined;\n }\n\n const result = await init({\n apiHost,\n widgetKey: options.widgetKey,\n version: config.version || 'latest',\n });\n if (result) {\n const { widget } = result;\n\n const transformedConfig = transformConfig({\n config,\n apiKey: options.widgetKey,\n apiHost,\n });\n\n if (options.overrides && config.settings) {\n (\n Object.entries(options.overrides) as [\n keyof Settings,\n (Action | CallbackAction)[]\n ][]\n ).forEach(([key, value]) => {\n if (config.settings && key in config.settings) {\n (config.settings[key] as (Action | CallbackAction)[]) =\n updateActions(\n config.settings[key] as (Action | CallbackAction)[],\n value\n );\n }\n });\n }\n\n initializeWidget(widget, transformedConfig);\n initializedWidgets.add(options.widgetKey);\n return widget;\n }\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n options.widgetKey\n );\n }\n return undefined;\n};\n","export const isIOS14OrBelow = () => {\n if (typeof window === 'undefined') return;\n const ua = window.navigator.userAgent;\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n if (!iOS) return false;\n const version = ua.match(/OS (\\d+)_/i);\n return version && parseInt(version[1], 10) <= 14;\n};\n","import { sendBrainfishWidgetError } from './utils/sendBrainfishError';\n\nconst ANALYTICS_API_HOST = import.meta.env.VITE_ANALYTICS_API_HOST;\n\nlet isTrackerInitialized: boolean = false;\n\nconst loadTrackerScript = async (apiHost: string, widgetKey: string) => {\n if (document.getElementById('brainfish-analytics')) {\n return window.BrainfishAnalytics;\n }\n\n const script = document.createElement('script');\n script.id = 'brainfish-analytics';\n // TODO: should we make this configurable for local testing?\n script.src = `https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js`;\n script.type = 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onerror = () => {\n sendBrainfishWidgetError(\n apiHost,\n new Error(`Failed to load script: ${script.src}`),\n `Failed to load script: ${script.src}`,\n widgetKey\n );\n };\n\n document.head.appendChild(script);\n};\n\nexport const initBrainfishAnalytics = async (\n widgetKey: string,\n accessKey: string,\n apiHost: string,\n analyticsApiHost: string = ANALYTICS_API_HOST,\n enableRecording: boolean = false\n): Promise<void> => {\n if (!accessKey) {\n sendBrainfishWidgetError(\n apiHost,\n new Error('Access key is required'),\n 'Access key is required',\n widgetKey\n );\n }\n\n // Only reinitialize if the access key is different\n if (isTrackerInitialized) {\n return;\n }\n\n try {\n window.BrainfishAnalytics('init', {\n apiUrl: analyticsApiHost,\n accessKey,\n trackScreenViews: true,\n trackAttributes: true,\n trackOutgoingLinks: true,\n enableRecording,\n });\n\n isTrackerInitialized = true;\n\n await loadTrackerScript(apiHost, widgetKey);\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Failed to initialize BrainfishAnalytics',\n widgetKey\n );\n }\n};\n","// web.ts\n// entry point for web component\nimport { Config } from '@brainfish-ai/widgets-common';\nimport { getConfigByKey } from './api/getConfigByKey';\nimport { initSearchWidget } from './initSearchWidget';\nimport { initBrainfishAnalytics } from './initBrainfishAnalytics';\nimport type { Brainfish } from './types/brainfish';\nimport { BrainfishQueue, createBrainfishQueue } from './utils/brainfishQueue';\nimport { createQueues } from './utils/createQueues';\nimport { getApiHost, getAnalyticsApiHost } from './utils/getApiHost';\n\nlet globalBrainfish: BrainfishQueue | null = null;\n\nfunction getBrainfishInstance(): BrainfishQueue {\n if (typeof window !== 'undefined' && (window as any).Brainfish) {\n return (window as any).Brainfish;\n }\n if (!globalBrainfish) {\n globalBrainfish = createBrainfishQueue();\n if (typeof window !== 'undefined') {\n (window as any).Brainfish = globalBrainfish;\n }\n }\n return globalBrainfish;\n}\n\nconst Brainfish = getBrainfishInstance();\n\nlet initializationPromise: Promise<void> | null = null;\n\nasync function initializeBrainfish(\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config,\n apiHost: string,\n analyticsApiHost: string\n): Promise<void> {\n const enableRecording =\n options.overrides?.enableRecording ||\n config?.settings?.enableRecording ||\n false;\n\n const initPromises: Promise<Brainfish | undefined | void>[] = [\n initSearchWidget(options, config),\n ];\n\n if (config?.settings?.enableTracking) {\n initPromises.push(\n initBrainfishAnalytics(\n options.widgetKey,\n config.trackingToken || '',\n apiHost,\n analyticsApiHost,\n enableRecording\n ) // Even if this fails, it won't block the widget\n );\n }\n\n // Start both initializations in parallel\n const [widgetPromise] = await Promise.allSettled(initPromises);\n\n // Only set the real Brainfish if widget initialization succeeded\n if (widgetPromise.status === 'fulfilled' && widgetPromise.value) {\n Brainfish._setRealBrainfish(widgetPromise.value);\n }\n}\n\nBrainfish.Widgets.init = async (options: {\n widgetKey: string;\n overrides?: any;\n}): Promise<void> => {\n createQueues();\n\n const apiHost = getApiHost(options.overrides);\n const analyticsApiHost = getAnalyticsApiHost(options.overrides);\n\n const { config } = await getConfigByKey({\n widgetKey: options.widgetKey,\n apiHost,\n });\n\n if (!initializationPromise) {\n // First initialization\n initializationPromise = initializeBrainfish(\n options,\n config,\n apiHost,\n analyticsApiHost\n );\n }\n\n // Wait for Brainfish to be initialized\n await initializationPromise;\n};\n\nexport default Brainfish;\n\nexport const BrainfishAnalytics = (\n ...args: Parameters<typeof window.BrainfishAnalytics>\n) => {\n if (typeof window !== 'undefined' && window.BrainfishAnalytics) {\n window.BrainfishAnalytics(...args);\n }\n};\n","import type { Brainfish } from '../types/brainfish';\n\nexport interface BrainfishQueue extends Brainfish {\n _setRealBrainfish: (bf: Brainfish) => void;\n Widgets: {\n init: (options: { widgetKey: string; overrides?: any }) => Promise<void>;\n };\n}\n\nexport function createBrainfishQueue(): BrainfishQueue {\n let queue: [string, any[]][] = [];\n let realBrainfish: Brainfish | null = null;\n\n function queueOrExecute(method: string, args: any[]) {\n if (realBrainfish) {\n const parts = method.split('.');\n let obj: any = realBrainfish;\n for (let i = 0; i < parts.length - 1; i++) {\n obj = obj[parts[i]];\n }\n const fn = obj[parts[parts.length - 1]];\n if (typeof fn === 'function') {\n return fn.apply(obj, args);\n }\n } else {\n queue.push([method, args]);\n }\n }\n\n const brainfishQueue: BrainfishQueue = {\n Widgets: {\n init: (...args: any[]) => queueOrExecute('Widgets.init', args),\n },\n SearchWidget: {\n initStandard: (...args: any[]) =>\n queueOrExecute('SearchWidget.initStandard', args),\n },\n HelpWidget: {\n initPopup: (...args: any[]) =>\n queueOrExecute('HelpWidget.initPopup', args),\n close: (...args: any[]) => queueOrExecute('HelpWidget.close', args),\n open: (...args: any[]) => queueOrExecute('HelpWidget.open', args),\n toggle: (...args: any[]) => queueOrExecute('HelpWidget.toggle', args),\n },\n _setRealBrainfish: function (bf: Brainfish) {\n realBrainfish = bf;\n while (queue.length > 0) {\n const [method, args] = queue.shift()!;\n queueOrExecute(method, args);\n }\n },\n };\n\n return brainfishQueue;\n}\n","export const createQueues = () => {\n if (window) {\n window.BrainfishAnalytics =\n window.BrainfishAnalytics ||\n function (...args: [string, ...any[]]) {\n (window.BrainfishAnalytics.q = window.BrainfishAnalytics.q || []).push(\n args\n );\n };\n }\n};\n"],"names":["WidgetType","ActionType","Sidebar","Searchbar","BrainfishWidgetError","Error","cause","message","options","super","this","name","captureStackTrace","stack","sendBrainfishWidgetError","apiHost","error","widgetKey","errorMessage","errorDetails","JSON","parse","String","sendErrors","navigator","userAgent","toLowerCase","includes","errorData","toJSON","fetch","method","headers","body","stringify","getConfigByKey","e","__async","_ref","async","endpoint","then","response","ok","status","json","data","catch","transformConfig","config","apiKey","settings","forEach","key","map","action","type","CALLBACK","value","__spreadProps","__spreadValues","Function","widgetMode","widgetType","getApiHost","overrides","useUMD","isIOS14OrBelow","window","ua","match","version","parseInt","init","url","scriptUrl","replace","widget","document","getElementById","Brainfish","Promise","resolve","reject","script","createElement","id","src","crossOrigin","onload","setTimeout","module","onerror","event","errorEvent","fileName","filename","lineNumber","lineno","columnNumber","colno","toString","head","appendChild","initializedWidgets","Set","initSearchWidget","has","result","transformedConfig","Object","entries","_ref2","overrideActions","arguments","length","undefined","actionMap","Map","label","set","Array","from","values","SearchWidget","initStandard","HelpWidget","initPopup","add","isTrackerInitialized","initBrainfishAnalytics","accessKey","analyticsApiHost","enableRecording","BrainfishAnalytics","apiUrl","trackScreenViews","trackAttributes","trackOutgoingLinks","globalBrainfish","queue","realBrainfish","queueOrExecute","args","parts","split","obj","i","fn","apply","push","Widgets","_len","_key","_len2","_key2","_len3","_key3","close","_len4","_key4","open","_len5","_key5","toggle","_len6","_key6","_setRealBrainfish","bf","shift","createBrainfishQueue","initializationPromise","q","_options$overrides","_config$settings","_config$settings2","initPromises","enableTracking","trackingToken","widgetPromise","allSettled"],"mappings":"2rBAAWA,ECUAC,8lBDTX,SAAWD,EAAAA,CACPA,EAAoB,QAAI,UACxBA,EAAsB,UAAI,WAC7B,EAAEA,IAAeA,EAAa,CAAE,EAG5BA,EAAAA,EAAWE,QACXF,EAAWG,UERT,MAAMC,UAA6BC,KACtCC,CACA,YAAYC,EAASC,EACjBC,CAAAA,MAAMF,EAASC,CACfE,EAHJJ,EAAAA,cAGII,KAAKC,KAAO,uBACZD,KAAKJ,MAAQE,GAAAA,YAAAA,EAASF,MAClBD,MAAMO,mBACNP,MAAMO,kBAAkBF,KAAMN,CAAAA,EAG9BM,KAAKJ,iBAAiBD,OAASK,KAAKJ,MAAMO,QAC1CH,KAAKG,MAAQH,KAAKG,MAAQ;AAAA,aAAkBH,KAAKJ,MAAMO,MAE9D,CACD,QACI,CAAA,MAAO,CACHF,KAAMD,KAAKC,KACXJ,QAASG,KAAKH,QACdM,MAAOH,KAAKG,MACZP,MAAOI,KAAKJ,iBAAiBD,MACvB,CACEM,KAAMD,KAAKJ,MAAMK,KACjBJ,QAASG,KAAKJ,MAAMC,QACpBM,MAAOH,KAAKJ,MAAMO,KAAAA,EAEpBH,KAAKJ,KAElB,CAAA,CAAA,EDhBL,SAAWL,EAAAA,CACPA,EAAiB,KAAI,OACrBA,EAAqB,SAAI,WACzBA,EAAkB,MAAI,QACtBA,EAAkB,MAAI,OACzB,GAAEA,IAAeA,EAAa,CAAA,EAAA,EEZxB,MCDMa,EAA2BA,CACtCC,EACAC,EACAT,EACAU,IAAAA,CAEA,IAAIC,EAAeX,EACfY,EAAoC,CAAA,EAExC,GAAIH,aAAiBX,MACf,GAAA,CACac,EAAAC,KAAKC,MAAML,EAAMT,OAAAA,EAChCW,GAAgB,MAAMC,EAAaZ,SAAWS,EAAMT,SACtD,OAAQ,GAEUW,GAAA,MAAMF,EAAMT,OAC9B,EAAA,MAEgBW,GAAA,MAAMI,OAAON,CDjBPO,CAAAA,IAAAA,CACxBR,EACAC,EACAC,KAGI,GAACO,CAAAA,WAAaA,UAAUC,UAAUC,cAAcC,SAAS,UAAA,EAC3D,OAGI,MAAAC,EAAYZ,EAAMa,OAAAA,EAGlBC,MAAA,GAFWf,GAAW,wBAEsB,gCAAA,CAChDgB,OAAQ,OACRC,QAAS,CACP,eAAgB,mBAChB,UAAWf,GAEbgB,KAAMb,KAAKc,UAAU,CACnBlB,MAAO,4BAAyCA,EAAMT,OACtDM,GAAAA,MAAOG,EAAMH,MACbP,MAAO,CACLC,QAASqB,EAAUrB,QACnBM,MAAOe,EAAUf,MACjBP,MAAOsB,EAAUtB,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAGtB,GCJUS,EAJC,IAAIX,EAAqBc,EAAc,CACjDZ,MAAOa,CAGgBF,CAAAA,EAAAA,CAAAA,CAAS,ECrBvBkB,EAMkBC,GAAAC,EAAA,yBAAA,GAAA,CANMpB,UACnCA,EAAAF,QACAA,CAI6BuB,EAAAA,EAEtB,OCbaC,SACpBxB,EACAyB,EACAvB,EAAAA,QAAAA,EAAAA,sBAEA,OAAOa,MAAM,GAAGf,CAAUyB,GAAAA,CAAAA,GAAY,CACpCT,OAAQ,OACRC,QAAS,CACP,eAAgB,mBAChB,UAAWf,CAGZwB,CAAAA,CAAAA,EAAAA,KAAMC,GACD,CAAA,GAAA,CAACA,EAASC,GACZ,MAAM,IAAItC,MAAM,gCAAgCqC,EAASE,MAAAA,EAAAA,EAE3D,OAAOF,EAASG,MAAK,CAEtBJ,EAAAA,KAAMK,GACL,CAAA,GAAA,CAAKA,EACG,MAAA,IAAIzC,MAAM,sCAAA,EAEX,OAAAyC,CAAA,CAAA,EAERC,MAAO/B,GAAAA,CACNF,EACEC,EACAC,EACA,wBACAC,CAAAA,CACF,EAEN,IDnBgCF,EADb,oCACgCE,EAAS,GEU/C+B,EAAkBV,GAQzB,CAAA,GAAA,CAR0BW,OAC9BA,EAAAC,OACAA,EAAAnC,QACAA,GAKIuB,EACE,MAAAa,EAAWF,EAAOE,UAAY,GAW7B,MATL,CAAC,oBAAqB,sBAAuB,iBAAA,EAC7CC,QAASC,GAAAA,CACLF,EAASE,CACXF,IAAAA,EAASE,CACPF,EAAAA,EAASE,GAhCDC,IAAKC,GACjBA,EAAOC,OAASvD,EAAWwD,UAAYF,EAAOG,MAC1CC,EAAAC,EAAA,GAAKL,GAAL,CAAaG,MAAO,IAAIG,SAAS,UAAUN,EAAOG,KAA9B,EAAA,EAAA,CAAA,GACpBH,CA+BJ,EAAA,CAAA,EAGKI,EAAAC,EAAA,GACFX,GADE,CAELE,SAAAA,EACApC,QACA+C,EAAAA,WAAYb,EAAOc,WACnBb,OAAAA,CAAAA,EACF,ECnDWc,EAAcC,OAClBA,YAAAA,EAAWlD,UAAW,yBCYzBmD,GCbwBC,IAAAA,CACxB,GAAkB,OAAXC,QAAW,YAAa,OAC7B,MAAAC,EAAKD,OAAO5C,UAAUC,UAExB,GAAA,EADU4C,EAAGC,MAAM,UAAcD,EAAGC,MAAM,SAC7B,GAAA,MAAA,GACX,MAAAC,EAAUF,EAAGC,MAAM,cACzB,OAAOC,GAAWC,SAASD,EAAQ,GAAI,EAAO,GAAA,EAAA,GDOjCJ,EA2CFM,EAQPrC,GAAAC,EAAA,yBAAA,GAAA,CARqBtB,QACzBA,EAAAE,UACAA,EAAAsD,QACAA,CAKIjC,EAAAA,EACA,IACI,MAAAoC,EAAM,4DAA4DH,CAAAA,eAClEI,EAAYT,EAASQ,EAAIE,QAAQ,SAAU,cAAgBF,EAIjE,MAAO,CAAEG,OAFHA,MArDJC,GAAAA,EAAAA,yBAAAA,gBAASC,eAAe,kBAClBX,EAAAA,OAAeY,UAGlB,IAAIC,QAAQ,CAACC,EAASC,IACrB,CAAA,MAAAC,EAASN,SAASO,cAAc,QACtCD,EAAAA,EAAOE,GAAK,mBACZF,EAAOG,IAAMb,EACNU,EAAA5B,KAAOU,EAAS,kBAAoB,SAC3CkB,EAAO7C,MAAQ,GACf6C,EAAOI,YAAc,YAErBJ,EAAOK,OAAS,IACdC,CAAAA,WAAW,KACT,MAAMC,EAAUvB,OAAeY,UAC/BW,EACIT,EAAQS,CAAAA,EACRR,EAAO,IAAI9E,MAAM,iCAAkC,CAAA,CAAA,EACtD,GAAG,CAAA,EAGD+E,EAAAQ,QAAWC,GAAAA,CAChB,MAAMC,EAAaD,EACb1E,EAAe,CACnBZ,QAAS,0BAA0BmE,IACnClB,KAAMsC,EAAWtC,KACjBuC,SAAUD,EAAWE,SACrBC,WAAYH,EAAWI,OACvBC,aAAcL,EAAWM,MACzBpF,MAAO8E,EAAW9E,MAAQ8E,EAAW9E,MAAMqF,SAAa,EAAA,eAAA,EAE1DlB,EAAO,IAAI9E,MAAMe,KAAKc,UAAUf,IAAc,EAG3C+C,GACMY,SAAAwB,KAAKC,YAAYnB,CAC5B,CAAA,CAAA,KAiB4CT,CAAAA,CAEnCE,QACF7D,GACPF,EACEC,EACAC,EACCA,EAAgBT,QACjBU,CAEJ,CAAA,CAAA,GAcIuF,MAAyBC,IAElBC,EAAmBnE,CAC9B/B,EAIAyC,+BAEM,MAAAlC,EAAUiD,EAAWxD,EAAQyD,WAE/B,GAEF,CAAA,GAAIuC,EAAmBG,IAAInG,EAAQS,SAE1B,EAAA,OAGH,MAAA2F,EAAAA,MAAenC,EAAK,CACxB1D,QAAAA,EACAE,UAAWT,EAAQS,UACnBsD,QAAStB,EAAOsB,SAAW,QAAA,CAAA,EAE7B,GAAIqC,EAAQ,CACJ,KAAA/B,CAAAA,OAAEA,GAAW+B,EAEbC,EAAoB7D,EAAgB,CACxCC,SACAC,OAAQ1C,EAAQS,UAChBF,QAAAA,CAAAA,CAAAA,EAsBK,OAnBHP,EAAQyD,WAAahB,EAAOE,UAE5B2D,OAAOC,QAAQvG,EAAQyD,SAIvBb,EAAAA,QAAQ4D,GAAkB,CAAA,GAAA,CAAhB3D,EAAKK,CAAAA,EAAWsD,EACtB/D,EAAOE,UAAYE,KAAOJ,EAAOE,WAClCF,EAAOE,SAASE,CFvHA,EAAA,UAAA,CAGxB,IADH4D,EACGC,UAAAC,OAAAD,EAAAA,WAAAE,EAAAA,OACH,MAAMC,EAAY,IAAIC,KAHuBJ,UAAAC,OAAA,GAAAD,UAAA,CAAA,IAAA,OAAAA,UAAA,CAAA,EAAA,IAI7B5D,IAAKC,GAAW,CAACA,EAAOgE,MAAOhE,CAG/C,CAAA,CAAA,EAAA,OADgB0D,EAAA7D,QAASG,GAAW8D,EAAUG,IAAIjE,EAAOgE,MAAOhE,IACzDkE,MAAMC,KAAKL,EAAUM,OAAAA,CAAAA,CAC9B,EEgHgB1E,EAAOE,SAASE,CAAAA,EAChBK,GAEN,CAxDV,EAAA,SAA0BmB,EAAmB5B,EAAAA,CAEzCA,EAAOc,aAAe/D,EAAWG,WACjC8C,EAAOc,aAAe,SAEfc,EAAA+C,aAAaC,aAAa5E,GAE1B4B,EAAAiD,WAAWC,UAAU9E,CAAAA,CAEhC,EAmDuB4B,EAAQgC,CACNL,EAAAA,EAAAwB,IAAIxH,EAAQS,SAAAA,EACxB4D,CACT,QACO7D,EAAAA,CACPF,EACEC,EACAC,EACCA,EAAgBT,QACjBC,EAAQS,SAAAA,CAEZ,CACO,GEtJT,IAAIgH,EAAgC,GAEpC,MAyBaC,EAAyB3F,SACpCtB,EACAkH,EACApH,qCAFAE,EACAkH,EACApH,GAGkB,IAFlBqH,EAA2BlB,UAAAC,OAAA,GAAAD,UAAA,CAAAA,WAAAA,UAAA,GAjCFE,OAkCzBiB,0DAYA,GAVKF,GACHrH,EACEC,EACA,IAAIV,MAAM,wBAAA,EACV,yBACAY,CAAAA,EAAAA,CAKAgH,EAIA,GACF7D,CAAAA,OAAOkE,mBAAmB,OAAQ,CAChCC,OAAQH,EACRD,UACAK,EAAAA,iBAAAA,GACAC,gBAAiB,GACjBC,mBAAoB,GACpBL,oBAGqBJ,EAAA,GAAA,MAxDMlH,CAAAA,EAAiBE,4BAC5C,GAAA6D,SAASC,eAAe,qBAAA,EAC1B,OAAOX,OAAOkE,mBAGV,MAAAlD,EAASN,SAASO,cAAc,QAAA,EACtCD,EAAOE,GAAK,sBAEZF,EAAOG,IAAM,gFACbH,EAAO5B,KAAO,SACd4B,EAAO7C,MAAQ,GACf6C,EAAOI,YAAc,YAErBJ,EAAOQ,QAAU,KACf9E,EACEC,EACA,IAAIV,MAAM,0BAA0B+E,EAAOG,GAAAA,EAAAA,EAC3C,0BAA0BH,EAAOG,MACjCtE,CACF,CAAA,EAGO6D,SAAAwB,KAAKC,YAAYnB,CAAM,CAAA,IAoCNrE,EAASE,SAC1BD,EACPF,CAAAA,EACEC,EACAC,EACA,0CACAC,CAEJ,CAAA,CACF,IC9DA,IAAI0H,EAAyC,KAe7C,MAAM3D,EAZOZ,OAAAA,QAAW,aAAgBA,OAAeY,UAC3CZ,OAAeY,WAEpB2D,IACHA,ECTG,UAAA,CACL,IAAIC,EAA2B,CAAA,EAC3BC,EAAkC,KAE7B,SAAAC,EAAe/G,EAAgBgH,EACtC,CAAA,GAAIF,EAAe,CACX,MAAAG,EAAQjH,EAAOkH,MAAM,GAC3B,EAAA,IAAIC,EAAWL,EACf,QAASM,EAAI,EAAGA,EAAIH,EAAM7B,OAAS,EAAGgC,IAC9BD,EAAAA,EAAIF,EAAMG,CAAAA,CAAAA,EAElB,MAAMC,EAAKF,EAAIF,EAAMA,EAAM7B,OAAS,CAAA,CAAA,EAChC,GAAOiC,OAAAA,GAAO,WACT,OAAAA,EAAGC,MAAMH,EAAKH,CAAAA,CAEzB,MACEH,EAAMU,KAAK,CAACvH,EAAQgH,CAExB,CAAA,CAAA,CA0BO,MAxBgC,CACrCQ,QAAS,CACP9E,KAAM,UAAA,CAAA,QAAA+E,EAAAtC,UAAAC,OAAI4B,EAAgBtB,IAAAA,MAAA+B,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAhBV,EAAgBU,CAAAA,EAAAvC,UAAAuC,CAAAA,EAAA,OAAAX,EAAe,eAAgBC,CAAI,CAAA,CAAA,EAE/DnB,aAAc,CACZC,aAAc,UAAA,CAAA,QAAA6B,EAAAxC,UAAAC,OAAI4B,EAChBtB,IAAAA,MAAAiC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IADgBZ,EAChBY,CAAAA,EAAAzC,UAAAyC,CAAA,EAAA,OAAAb,EAAe,4BAA6BC,EAAI,CAEpDjB,EAAAA,WAAY,CACVC,UAAW,WAAA,QAAA6B,EAAA1C,UAAAC,OAAI4B,EACbtB,IAAAA,MAAAmC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IADad,EACbc,CAAA3C,EAAAA,UAAA2C,CAAA,EAAA,OAAAf,EAAe,uBAAwBC,CAAAA,CAAI,EAC7Ce,MAAO,WAAA,QAAAC,EAAA7C,UAAAC,OAAI4B,EAAgBtB,IAAAA,MAAAsC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAhBjB,EAAgBiB,CAAA9C,EAAAA,UAAA8C,CAAA,EAAA,OAAAlB,EAAe,mBAAoBC,CAAAA,CAAI,EAClEkB,KAAM,WAAA,QAAAC,EAAAhD,UAAAC,OAAI4B,EAAgBtB,IAAAA,MAAAyC,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAhBpB,EAAgBoB,CAAAjD,EAAAA,UAAAiD,CAAA,EAAA,OAAArB,EAAe,kBAAmBC,CAAAA,CAAI,EAChEqB,OAAQ,WAAA,QAAAC,EAAAnD,UAAAC,OAAI4B,EAAgBtB,IAAAA,MAAA4C,CAAAA,EAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAhBvB,EAAgBuB,CAAApD,EAAAA,UAAAoD,CAAA,EAAA,OAAAxB,EAAe,oBAAqBC,CAAAA,CAAI,CAEtEwB,EAAAA,kBAAmB,SAAUC,EAEpB,CAAA,IADS3B,EAAA2B,EACT5B,EAAMzB,OAAS,GAAG,CACvB,KAAA,CAAOpF,EAAQgH,CAAQH,EAAAA,EAAM6B,MAC7B3B,EAAAA,EAAe/G,EAAQgH,CACzB,CAAA,CACF,CAGK,CACT,EDpCsB2B,EACPtG,OAAAA,QAAW,cACnBA,OAAeY,UAAY2D,IAGzBA,GAKT,IAAIgC,EAA8C,KAyClD3F,EAAUuE,QAAQ9E,mCEpEZL,SACFA,OAAOkE,mBACLlE,OAAOkE,oBACP,UAAuC,CAAA,QAAAkB,EAAAtC,UAAAC,OAA1B4B,EAA0BtB,IAAAA,MAAA+B,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAA1BV,EAA0BU,CAAAA,EAAAvC,UAAAuC,CAAAA,GACpCrF,OAAOkE,mBAAmBsC,EAAIxG,OAAOkE,mBAAmBsC,GAAK,CAAItB,GAAAA,KAChEP,KFqEF,MAAAhI,EAAUiD,EAAWxD,EAAQyD,SAAAA,EAC7BmE,IJxE4BnE,EIwEWzD,EAAQyD,YJrE9CA,KIqE8CA,OJrE9CA,EAAWmE,mBAAAA,OAHgBnE,IAAAA,EI0ElC,MAAMhB,OAAEA,CAAAA,EAAAA,MAAiBd,EAAe,CACtClB,UAAWT,EAAQS,UACnBF,QAGG4J,CAAAA,CAAAA,EAAAA,IAEqBA,EAvD5BpI,SACE/B,EAIAyC,EACAlC,EACAqH,kCACe,IAAAyC,EAAAC,EAAAC,EACf,MAAM1C,IACJwC,EAAArK,EAAQyD,aAAA4G,MAAAA,WAAAA,OAARA,EAAmBxC,sBACnBpF,OAAA6H,EAAA7H,EAAQE,oCAAR2H,EAAkBzC,qBAGd2C,EAAwD,CAC5DtE,EAAiBlG,EAASyC,CAGxBA,CAAAA,EAAAA,GAAAA,OAAA8H,EAAA9H,EAAQE,8BAAR4H,EAAkBE,gBACPD,EAAA1B,KACXpB,EACE1H,EAAQS,UACRgC,EAAOiI,eAAiB,GACxBnK,EACAqH,EACAC,CAMN,CAAA,EAAA,KAAA,CAAO8C,CAAuBlG,EAAAA,MAAAA,QAAQmG,WAAWJ,CAGpB,EAAzBG,EAAcvI,SAAW,aAAeuI,EAAczH,OAC9CsB,EAAAuF,kBAAkBY,EAAczH,MAE9C,IAmBMlD,EACAyC,EACAlC,EACAqH,CAKEuC,GAAAA,MAAAA,CAAA,8BAK0B,UAGV,CAAA,OAAXvG,QAAW,aAAeA,OAAOkE,oBACnClE,OAAAkE,mBAAAA,GAAmBpB,SAE9B,CAAA"}
1
+ {"version":3,"file":"web.cjs.js","sources":["../../common/dist/types/brainfish.js","../../common/dist/types/config.js","../../common/dist/types/BrainfishWidgetError.js","../src/utils/sendErrors.ts","../src/utils/sendBrainfishError.ts","../src/api/getConfigByKey.ts","../src/utils/fetchWithErrorHandling.ts","../src/utils/configTransformer.ts","../src/utils/getApiHost.ts","../src/initSearchWidget.ts","../src/utils/isIOS14OrBelow.ts","../src/initBrainfishAnalytics.ts","../src/web.ts","../src/utils/brainfishQueue.ts","../src/utils/createQueues.ts"],"sourcesContent":["export var WidgetType;\n(function (WidgetType) {\n WidgetType[\"Sidebar\"] = \"sidebar\";\n WidgetType[\"Searchbar\"] = \"searchbar\";\n})(WidgetType || (WidgetType = {}));\n;\nexport const WIDGET_NAMES = {\n [WidgetType.Sidebar]: 'brainfish-sidebar-widget',\n [WidgetType.Searchbar]: 'brainfish-searchbar-widget',\n};\n","const isUrlString = (value) => {\n const urlRegExp = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i;\n return urlRegExp.test(value);\n};\nexport const validateUrlString = (value) => {\n if (!isUrlString(value)) {\n throw new Error(`Invalid URL: ${value}`);\n }\n return value;\n};\nexport var ActionType;\n(function (ActionType) {\n ActionType[\"LINK\"] = \"link\";\n ActionType[\"CALLBACK\"] = \"callback\";\n ActionType[\"EMAIL\"] = \"email\";\n ActionType[\"PHONE\"] = \"phone\";\n})(ActionType || (ActionType = {}));\n","export class BrainfishWidgetError extends Error {\n cause;\n constructor(message, options) {\n super(message, options);\n this.name = 'BrainfishWidgetError';\n this.cause = options?.cause;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrainfishWidgetError);\n }\n // Append cause stack to this error's stack if cause is an Error\n if (this.cause instanceof Error && this.cause.stack) {\n this.stack = this.stack + '\\nCaused by: ' + this.cause.stack;\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause instanceof Error\n ? {\n name: this.cause.name,\n message: this.cause.message,\n stack: this.cause.stack,\n }\n : this.cause,\n };\n }\n}\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\n\ndeclare const __APP_VERSION__: string;\n\nexport const sendErrors = (\n apiHost: string,\n error: BrainfishWidgetError,\n widgetKey: string\n) => {\n // only send errors if browser is not a headless browser\n if (!navigator || navigator.userAgent.toLowerCase().includes('headless')) {\n return;\n }\n\n const errorData = error.toJSON();\n const API_HOST = apiHost || import.meta.env.VITE_API_HOST;\n\n fetch(`${API_HOST}/api/trackError.widget.create`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n body: JSON.stringify({\n error: `WebWidgetVersion: ${__APP_VERSION__}. ${error.message}`,\n stack: error.stack,\n cause: {\n message: errorData.message,\n stack: errorData.stack,\n cause: errorData.cause,\n },\n }),\n });\n};\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\nimport { sendErrors } from './sendErrors';\n\nexport const sendBrainfishWidgetError = (\n apiHost: string,\n error: unknown,\n message: string,\n widgetKey: string\n) => {\n let errorMessage = message;\n let errorDetails: Record<string, any> = {};\n\n if (error instanceof Error) {\n try {\n errorDetails = JSON.parse(error.message);\n errorMessage += ` - ${errorDetails.message || error.message}`;\n } catch {\n // If parsing fails, use the error message as is\n errorMessage += ` - ${error.message}`;\n }\n } else {\n errorMessage += ` - ${String(error)}`;\n }\n\n const err = new BrainfishWidgetError(errorMessage, {\n cause: errorDetails,\n });\n\n sendErrors(apiHost, err, widgetKey);\n};\n","import type { Config } from '@brainfish-ai/widgets-common';\nimport { fetchWithErrorHandling } from '../utils/fetchWithErrorHandling';\n\nexport interface ConfigResponse {\n config: Config;\n}\n\nexport const getConfigByKey = async ({\n widgetKey,\n apiHost,\n}: {\n widgetKey: string;\n apiHost: string;\n}): Promise<ConfigResponse> => {\n const endpoint = `/api/searchWidgets.getConfigByKey`;\n return fetchWithErrorHandling(apiHost, endpoint, widgetKey);\n};\n","import { sendBrainfishWidgetError } from './sendBrainfishError';\n\nexport async function fetchWithErrorHandling(\n apiHost: string,\n endpoint: string,\n widgetKey: string\n): Promise<any> {\n return fetch(`${apiHost}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`API call failed with status: ${response.status}`);\n }\n return response.json();\n })\n .then((data) => {\n if (!data) {\n throw new Error('Error loading config: empty response');\n }\n return data;\n })\n .catch((error) => {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Error fetching config',\n widgetKey\n );\n });\n}\n","import type {\n Config,\n CallbackAction,\n Action,\n} from '@brainfish-ai/widgets-common';\nimport { ActionType } from '@brainfish-ai/widgets-common';\n\nconst mapActionButtons = (actionButtons: (CallbackAction | Action)[]) =>\n actionButtons.map((action) =>\n action.type === ActionType.CALLBACK && action.value\n ? { ...action, value: new Function(`return ${action.value}`)() }\n : action\n );\n\nexport const updateActions = (\n configActions: (Action | CallbackAction)[] = [],\n overrideActions: (Action | CallbackAction)[]\n) => {\n const actionMap = new Map(\n configActions.map((action) => [action.label, action])\n );\n overrideActions.forEach((action) => actionMap.set(action.label, action));\n return Array.from(actionMap.values());\n};\n\nexport const transformConfig = ({\n config,\n apiKey,\n apiHost,\n}: {\n config: Config;\n apiKey: string;\n apiHost: string;\n}) => {\n const settings = config.settings || {};\n (\n ['bodyActionButtons', 'footerActionButtons', 'nextBestActions'] as const\n ).forEach((key) => {\n if (settings[key]) {\n settings[key] = mapActionButtons(\n settings[key] as (CallbackAction | Action)[]\n );\n }\n });\n\n return {\n ...config,\n settings,\n apiHost,\n widgetMode: config.widgetType,\n apiKey,\n };\n};\n","export const getApiHost = (overrides?: { apiHost?: string }): string => {\n return overrides?.apiHost || import.meta.env.VITE_API_HOST;\n};\n\nexport const getAnalyticsApiHost = (overrides?: {\n analyticsApiHost?: string;\n}): string => {\n return overrides?.analyticsApiHost || import.meta.env.VITE_ANALYTICS_API_HOST;\n};\n","import type {\n Config,\n CallbackAction,\n Action,\n Settings,\n} from '@brainfish-ai/widgets-common';\nimport { WidgetType } from '@brainfish-ai/widgets-common';\nimport { isIOS14OrBelow } from './utils/isIOS14OrBelow';\nimport { sendBrainfishWidgetError } from './utils/sendBrainfishError';\nimport type { Brainfish } from './types/brainfish';\nimport { transformConfig, updateActions } from './utils/configTransformer';\nimport { getApiHost } from './utils/getApiHost';\n\nconst useUMD = isIOS14OrBelow();\n\nconst loadSearchWidgetScript = async (url: string): Promise<any> => {\n if (document.getElementById('brainfish-widget')) {\n return (window as any).Brainfish;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.id = 'brainfish-widget';\n script.src = url;\n script.type = useUMD ? 'text/javascript' : 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onload = () => {\n setTimeout(() => {\n const module = (window as any).Brainfish;\n module\n ? resolve(module)\n : reject(new Error('Failed to load Brainfish module'));\n }, 200);\n };\n\n script.onerror = (event) => {\n const errorEvent = event as ErrorEvent;\n const errorDetails = {\n message: `Failed to load script: ${url}`,\n type: errorEvent.type,\n fileName: errorEvent.filename,\n lineNumber: errorEvent.lineno,\n columnNumber: errorEvent.colno,\n error: errorEvent.error ? errorEvent.error.toString() : 'Unknown error',\n };\n reject(new Error(JSON.stringify(errorDetails)));\n };\n\n if (!useUMD) {\n document.head.appendChild(script);\n }\n });\n};\n\nexport const init = async ({\n apiHost,\n widgetKey,\n version,\n}: {\n apiHost: string;\n widgetKey: string;\n version: string;\n}) => {\n try {\n const url = `https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${version}/dist/web.js`;\n const scriptUrl = useUMD ? url.replace('web.js', 'web.umd.js') : url;\n\n const widget = await loadSearchWidgetScript(scriptUrl);\n\n return { widget };\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n widgetKey\n );\n }\n};\n\nfunction initializeWidget(widget: Brainfish, config: Config) {\n if (\n config.widgetType === WidgetType.Searchbar ||\n config.widgetType === 'Search'\n ) {\n widget.SearchWidget.initStandard(config);\n } else {\n widget.HelpWidget.initPopup(config);\n }\n}\n\nconst initializedWidgets = new Set<string>();\n\nexport const initSearchWidget = async (\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config\n): Promise<Brainfish | undefined> => {\n const apiHost = getApiHost(options.overrides);\n\n try {\n // Check if this widget has already been initialized\n if (initializedWidgets.has(options.widgetKey)) {\n // do nothing if already initialized\n return undefined;\n }\n\n const result = await init({\n apiHost,\n widgetKey: options.widgetKey,\n version: config.version || 'latest',\n });\n if (result) {\n const { widget } = result;\n\n const transformedConfig = transformConfig({\n config,\n apiKey: options.widgetKey,\n apiHost,\n });\n\n if (options.overrides && config.settings) {\n (\n Object.entries(options.overrides) as [\n keyof Settings,\n (Action | CallbackAction)[]\n ][]\n ).forEach(([key, value]) => {\n if (config.settings && key in config.settings) {\n (config.settings[key] as (Action | CallbackAction)[]) =\n updateActions(\n config.settings[key] as (Action | CallbackAction)[],\n value\n );\n }\n });\n }\n\n initializeWidget(widget, transformedConfig);\n initializedWidgets.add(options.widgetKey);\n return widget;\n }\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n options.widgetKey\n );\n }\n return undefined;\n};\n","export const isIOS14OrBelow = () => {\n if (typeof window === 'undefined') return;\n const ua = window.navigator.userAgent;\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n if (!iOS) return false;\n const version = ua.match(/OS (\\d+)_/i);\n return version && parseInt(version[1], 10) <= 14;\n};\n","import { sendBrainfishWidgetError } from './utils/sendBrainfishError';\n\nconst ANALYTICS_API_HOST = import.meta.env.VITE_ANALYTICS_API_HOST;\n\nlet isTrackerInitialized: boolean = false;\n\nconst loadTrackerScript = async (apiHost: string, widgetKey: string) => {\n if (document.getElementById('brainfish-analytics')) {\n return window.BrainfishAnalytics;\n }\n\n const script = document.createElement('script');\n script.id = 'brainfish-analytics';\n // TODO: should we make this configurable for local testing?\n script.src = `https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js`;\n script.type = 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onerror = () => {\n sendBrainfishWidgetError(\n apiHost,\n new Error(`Failed to load script: ${script.src}`),\n `Failed to load script: ${script.src}`,\n widgetKey\n );\n };\n\n document.head.appendChild(script);\n};\n\nexport const initBrainfishAnalytics = async (\n widgetKey: string,\n accessKey: string,\n apiHost: string,\n analyticsApiHost: string = ANALYTICS_API_HOST,\n enableRecording: boolean = false\n): Promise<void> => {\n if (!accessKey) {\n sendBrainfishWidgetError(\n apiHost,\n new Error('Access key is required'),\n 'Access key is required',\n widgetKey\n );\n }\n\n // Only reinitialize if the access key is different\n if (isTrackerInitialized) {\n return;\n }\n\n try {\n window.BrainfishAnalytics('init', {\n apiUrl: analyticsApiHost,\n accessKey,\n trackScreenViews: true,\n trackAttributes: true,\n trackOutgoingLinks: true,\n enableRecording,\n });\n\n isTrackerInitialized = true;\n\n await loadTrackerScript(apiHost, widgetKey);\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Failed to initialize BrainfishAnalytics',\n widgetKey\n );\n }\n};\n","// web.ts\n// entry point for web component\nimport { Config } from '@brainfish-ai/widgets-common';\nimport { getConfigByKey } from './api/getConfigByKey';\nimport { initSearchWidget } from './initSearchWidget';\nimport { initBrainfishAnalytics } from './initBrainfishAnalytics';\nimport type { Brainfish } from './types/brainfish';\nimport { BrainfishQueue, createBrainfishQueue } from './utils/brainfishQueue';\nimport { createQueues } from './utils/createQueues';\nimport { getApiHost, getAnalyticsApiHost } from './utils/getApiHost';\n\nlet globalBrainfish: BrainfishQueue | null = null;\n\nfunction getBrainfishInstance(): BrainfishQueue {\n if (typeof window !== 'undefined' && (window as any).Brainfish) {\n return (window as any).Brainfish;\n }\n if (!globalBrainfish) {\n globalBrainfish = createBrainfishQueue();\n if (typeof window !== 'undefined') {\n (window as any).Brainfish = globalBrainfish;\n }\n }\n return globalBrainfish;\n}\n\nconst Brainfish = getBrainfishInstance();\n\nlet initializationPromise: Promise<void> | null = null;\n\nasync function initializeBrainfish(\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config,\n apiHost: string,\n analyticsApiHost: string\n): Promise<void> {\n const enableRecording =\n options.overrides?.enableRecording ||\n config?.settings?.enableRecording ||\n false;\n\n const initPromises: Promise<Brainfish | undefined | void>[] = [\n initSearchWidget(options, config),\n ];\n\n if (config?.settings?.enableTracking) {\n initPromises.push(\n initBrainfishAnalytics(\n options.widgetKey,\n config.trackingToken || '',\n apiHost,\n analyticsApiHost,\n enableRecording\n ) // Even if this fails, it won't block the widget\n );\n }\n\n // Start both initializations in parallel\n const [widgetPromise] = await Promise.allSettled(initPromises);\n\n // Only set the real Brainfish if widget initialization succeeded\n if (widgetPromise.status === 'fulfilled' && widgetPromise.value) {\n Brainfish._setRealBrainfish(widgetPromise.value);\n }\n}\n\nBrainfish.Widgets.init = async (options: {\n widgetKey: string;\n overrides?: any;\n}): Promise<void> => {\n createQueues();\n\n const apiHost = getApiHost(options.overrides);\n const analyticsApiHost = getAnalyticsApiHost(options.overrides);\n\n const { config } = await getConfigByKey({\n widgetKey: options.widgetKey,\n apiHost,\n });\n\n if (!initializationPromise) {\n // First initialization\n initializationPromise = initializeBrainfish(\n options,\n config,\n apiHost,\n analyticsApiHost\n );\n }\n\n // Wait for Brainfish to be initialized\n await initializationPromise;\n};\n\nexport default Brainfish;\n\nexport const BrainfishAnalytics = (\n ...args: Parameters<typeof window.BrainfishAnalytics>\n) => {\n if (typeof window !== 'undefined' && window.BrainfishAnalytics) {\n window.BrainfishAnalytics(...args);\n }\n};\n","import type { Brainfish } from '../types/brainfish';\n\nexport interface BrainfishQueue extends Brainfish {\n _setRealBrainfish: (bf: Brainfish) => void;\n Widgets: {\n init: (options: { widgetKey: string; overrides?: any }) => Promise<void>;\n };\n}\n\nexport function createBrainfishQueue(): BrainfishQueue {\n let queue: [string, any[]][] = [];\n let realBrainfish: Brainfish | null = null;\n\n function queueOrExecute(method: string, args: any[]) {\n if (realBrainfish) {\n const parts = method.split('.');\n let obj: any = realBrainfish;\n for (let i = 0; i < parts.length - 1; i++) {\n obj = obj[parts[i]];\n }\n const fn = obj[parts[parts.length - 1]];\n if (typeof fn === 'function') {\n return fn.apply(obj, args);\n }\n } else {\n queue.push([method, args]);\n }\n }\n\n const brainfishQueue: BrainfishQueue = {\n Widgets: {\n init: (...args: any[]) => queueOrExecute('Widgets.init', args),\n },\n SearchWidget: {\n initStandard: (...args: any[]) =>\n queueOrExecute('SearchWidget.initStandard', args),\n },\n HelpWidget: {\n initPopup: (...args: any[]) =>\n queueOrExecute('HelpWidget.initPopup', args),\n close: (...args: any[]) => queueOrExecute('HelpWidget.close', args),\n open: (...args: any[]) => queueOrExecute('HelpWidget.open', args),\n toggle: (...args: any[]) => queueOrExecute('HelpWidget.toggle', args),\n },\n _setRealBrainfish: function (bf: Brainfish) {\n realBrainfish = bf;\n while (queue.length > 0) {\n const [method, args] = queue.shift()!;\n queueOrExecute(method, args);\n }\n },\n };\n\n return brainfishQueue;\n}\n","export const createQueues = () => {\n if (window) {\n window.BrainfishAnalytics =\n window.BrainfishAnalytics ||\n function (...args: [string, ...any[]]) {\n (window.BrainfishAnalytics.q = window.BrainfishAnalytics.q || []).push(\n args\n );\n };\n }\n};\n"],"names":["WidgetType","ActionType","Sidebar","Searchbar","BrainfishWidgetError","Error","cause","message","options","super","this","name","captureStackTrace","stack","sendBrainfishWidgetError","apiHost","error","widgetKey","errorMessage","errorDetails","JSON","parse","String","sendErrors","navigator","userAgent","toLowerCase","includes","errorData","toJSON","fetch","method","headers","body","stringify","getConfigByKey","e","__async","_ref","async","endpoint","then","response","ok","status","json","data","catch","transformConfig","config","apiKey","settings","forEach","key","map","action","type","CALLBACK","value","__spreadProps","__spreadValues","Function","widgetMode","widgetType","getApiHost","overrides","useUMD","isIOS14OrBelow","window","ua","match","version","parseInt","init","url","scriptUrl","replace","widget","document","getElementById","Brainfish","Promise","resolve","reject","script","createElement","id","src","crossOrigin","onload","setTimeout","module","onerror","event","errorEvent","fileName","filename","lineNumber","lineno","columnNumber","colno","toString","head","appendChild","initializedWidgets","Set","initSearchWidget","has","result","transformedConfig","Object","entries","_ref2","overrideActions","arguments","length","undefined","actionMap","Map","label","set","Array","from","values","SearchWidget","initStandard","HelpWidget","initPopup","add","isTrackerInitialized","initBrainfishAnalytics","accessKey","analyticsApiHost","enableRecording","BrainfishAnalytics","apiUrl","trackScreenViews","trackAttributes","trackOutgoingLinks","globalBrainfish","queue","realBrainfish","queueOrExecute","args","parts","split","obj","i","fn","apply","push","Widgets","_len","_key","_len2","_key2","_len3","_key3","close","_len4","_key4","open","_len5","_key5","toggle","_len6","_key6","_setRealBrainfish","bf","shift","createBrainfishQueue","initializationPromise","q","_options$overrides","_config$settings","_config$settings2","initPromises","enableTracking","trackingToken","widgetPromise","allSettled"],"mappings":"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"}
package/dist/web.js CHANGED
@@ -31,10 +31,10 @@ var w, S;
31
31
  (function() {
32
32
  try {
33
33
  var t = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}, n = new t.Error().stack;
34
- n && (t._sentryDebugIds = t._sentryDebugIds || {}, t._sentryDebugIds[n] = "fe6f8df6-897e-40ff-926a-d1174f8d92a8", t._sentryDebugIdIdentifier = "sentry-dbid-fe6f8df6-897e-40ff-926a-d1174f8d92a8");
34
+ n && (t._sentryDebugIds = t._sentryDebugIds || {}, t._sentryDebugIds[n] = "a07eb5b1-eb7e-4d40-ace4-8a75290914e6", t._sentryDebugIdIdentifier = "sentry-dbid-a07eb5b1-eb7e-4d40-ace4-8a75290914e6");
35
35
  } catch (r) {
36
36
  }
37
- })(), (typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}).SENTRY_RELEASE = { id: "ac9cf9209e95255630df49da6d6d074c4194baba" }, function(t) {
37
+ })(), (typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}).SENTRY_RELEASE = { id: "fb7115d17b3e82c5c628924377c3bdac5688acb7" }, function(t) {
38
38
  t.Sidebar = "sidebar", t.Searchbar = "searchbar";
39
39
  }(w || (w = {})), w.Sidebar, w.Searchbar;
40
40
  class B extends Error {
@@ -62,7 +62,7 @@ const h = (t, n, r, o) => {
62
62
  ((e, a, d) => {
63
63
  if (!navigator || navigator.userAgent.toLowerCase().includes("headless")) return;
64
64
  const u = a.toJSON();
65
- fetch(`${e || "https://app.brainfi.sh"}/api/trackError.widget.create`, { method: "POST", headers: { "Content-Type": "application/json", "api-key": d }, body: JSON.stringify({ error: `WebWidgetVersion: 1.3.1. ${a.message}`, stack: a.stack, cause: { message: u.message, stack: u.stack, cause: u.cause } }) });
65
+ fetch(`${e || "https://app.brainfi.sh"}/api/trackError.widget.create`, { method: "POST", headers: { "Content-Type": "application/json", "api-key": d }, body: JSON.stringify({ error: `WebWidgetVersion: 1.3.2-alpha.1. ${a.message}`, stack: a.stack, cause: { message: u.message, stack: u.stack, cause: u.cause } }) });
66
66
  })(t, new B(i, { cause: s }), o);
67
67
  }, L = (t) => g(void 0, null, function* () {
68
68
  let { widgetKey: n, apiHost: r } = t;
package/dist/web.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sources":["../../common/dist/types/brainfish.js","../../common/dist/types/config.js","../../common/dist/types/BrainfishWidgetError.js","../src/utils/sendErrors.ts","../src/utils/sendBrainfishError.ts","../src/api/getConfigByKey.ts","../src/utils/fetchWithErrorHandling.ts","../src/utils/configTransformer.ts","../src/utils/getApiHost.ts","../src/initSearchWidget.ts","../src/utils/isIOS14OrBelow.ts","../src/initBrainfishAnalytics.ts","../src/web.ts","../src/utils/brainfishQueue.ts","../src/utils/createQueues.ts"],"sourcesContent":["export var WidgetType;\n(function (WidgetType) {\n WidgetType[\"Sidebar\"] = \"sidebar\";\n WidgetType[\"Searchbar\"] = \"searchbar\";\n})(WidgetType || (WidgetType = {}));\n;\nexport const WIDGET_NAMES = {\n [WidgetType.Sidebar]: 'brainfish-sidebar-widget',\n [WidgetType.Searchbar]: 'brainfish-searchbar-widget',\n};\n","const isUrlString = (value) => {\n const urlRegExp = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i;\n return urlRegExp.test(value);\n};\nexport const validateUrlString = (value) => {\n if (!isUrlString(value)) {\n throw new Error(`Invalid URL: ${value}`);\n }\n return value;\n};\nexport var ActionType;\n(function (ActionType) {\n ActionType[\"LINK\"] = \"link\";\n ActionType[\"CALLBACK\"] = \"callback\";\n ActionType[\"EMAIL\"] = \"email\";\n ActionType[\"PHONE\"] = \"phone\";\n})(ActionType || (ActionType = {}));\n","export class BrainfishWidgetError extends Error {\n cause;\n constructor(message, options) {\n super(message, options);\n this.name = 'BrainfishWidgetError';\n this.cause = options?.cause;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrainfishWidgetError);\n }\n // Append cause stack to this error's stack if cause is an Error\n if (this.cause instanceof Error && this.cause.stack) {\n this.stack = this.stack + '\\nCaused by: ' + this.cause.stack;\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause instanceof Error\n ? {\n name: this.cause.name,\n message: this.cause.message,\n stack: this.cause.stack,\n }\n : this.cause,\n };\n }\n}\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\n\ndeclare const __APP_VERSION__: string;\n\nexport const sendErrors = (\n apiHost: string,\n error: BrainfishWidgetError,\n widgetKey: string\n) => {\n // only send errors if browser is not a headless browser\n if (!navigator || navigator.userAgent.toLowerCase().includes('headless')) {\n return;\n }\n\n const errorData = error.toJSON();\n const API_HOST = apiHost || import.meta.env.VITE_API_HOST;\n\n fetch(`${API_HOST}/api/trackError.widget.create`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n body: JSON.stringify({\n error: `WebWidgetVersion: ${__APP_VERSION__}. ${error.message}`,\n stack: error.stack,\n cause: {\n message: errorData.message,\n stack: errorData.stack,\n cause: errorData.cause,\n },\n }),\n });\n};\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\nimport { sendErrors } from './sendErrors';\n\nexport const sendBrainfishWidgetError = (\n apiHost: string,\n error: unknown,\n message: string,\n widgetKey: string\n) => {\n let errorMessage = message;\n let errorDetails: Record<string, any> = {};\n\n if (error instanceof Error) {\n try {\n errorDetails = JSON.parse(error.message);\n errorMessage += ` - ${errorDetails.message || error.message}`;\n } catch {\n // If parsing fails, use the error message as is\n errorMessage += ` - ${error.message}`;\n }\n } else {\n errorMessage += ` - ${String(error)}`;\n }\n\n const err = new BrainfishWidgetError(errorMessage, {\n cause: errorDetails,\n });\n\n sendErrors(apiHost, err, widgetKey);\n};\n","import type { Config } from '@brainfish-ai/widgets-common';\nimport { fetchWithErrorHandling } from '../utils/fetchWithErrorHandling';\n\nexport interface ConfigResponse {\n config: Config;\n}\n\nexport const getConfigByKey = async ({\n widgetKey,\n apiHost,\n}: {\n widgetKey: string;\n apiHost: string;\n}): Promise<ConfigResponse> => {\n const endpoint = `/api/searchWidgets.getConfigByKey`;\n return fetchWithErrorHandling(apiHost, endpoint, widgetKey);\n};\n","import { sendBrainfishWidgetError } from './sendBrainfishError';\n\nexport async function fetchWithErrorHandling(\n apiHost: string,\n endpoint: string,\n widgetKey: string\n): Promise<any> {\n return fetch(`${apiHost}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`API call failed with status: ${response.status}`);\n }\n return response.json();\n })\n .then((data) => {\n if (!data) {\n throw new Error('Error loading config: empty response');\n }\n return data;\n })\n .catch((error) => {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Error fetching config',\n widgetKey\n );\n });\n}\n","import type {\n Config,\n CallbackAction,\n Action,\n} from '@brainfish-ai/widgets-common';\nimport { ActionType } from '@brainfish-ai/widgets-common';\n\nconst mapActionButtons = (actionButtons: (CallbackAction | Action)[]) =>\n actionButtons.map((action) =>\n action.type === ActionType.CALLBACK && action.value\n ? { ...action, value: new Function(`return ${action.value}`)() }\n : action\n );\n\nexport const updateActions = (\n configActions: (Action | CallbackAction)[] = [],\n overrideActions: (Action | CallbackAction)[]\n) => {\n const actionMap = new Map(\n configActions.map((action) => [action.label, action])\n );\n overrideActions.forEach((action) => actionMap.set(action.label, action));\n return Array.from(actionMap.values());\n};\n\nexport const transformConfig = ({\n config,\n apiKey,\n apiHost,\n}: {\n config: Config;\n apiKey: string;\n apiHost: string;\n}) => {\n const settings = config.settings || {};\n (\n ['bodyActionButtons', 'footerActionButtons', 'nextBestActions'] as const\n ).forEach((key) => {\n if (settings[key]) {\n settings[key] = mapActionButtons(\n settings[key] as (CallbackAction | Action)[]\n );\n }\n });\n\n return {\n ...config,\n settings,\n apiHost,\n widgetMode: config.widgetType,\n apiKey,\n };\n};\n","export const getApiHost = (overrides?: { apiHost?: string }): string => {\n return overrides?.apiHost || import.meta.env.VITE_API_HOST;\n};\n\nexport const getAnalyticsApiHost = (overrides?: {\n analyticsApiHost?: string;\n}): string => {\n return overrides?.analyticsApiHost || import.meta.env.VITE_ANALYTICS_API_HOST;\n};\n","import type {\n Config,\n CallbackAction,\n Action,\n Settings,\n} from '@brainfish-ai/widgets-common';\nimport { WidgetType } from '@brainfish-ai/widgets-common';\nimport { isIOS14OrBelow } from './utils/isIOS14OrBelow';\nimport { sendBrainfishWidgetError } from './utils/sendBrainfishError';\nimport type { Brainfish } from './types/brainfish';\nimport { transformConfig, updateActions } from './utils/configTransformer';\nimport { getApiHost } from './utils/getApiHost';\n\nconst useUMD = isIOS14OrBelow();\n\nconst loadSearchWidgetScript = async (url: string): Promise<any> => {\n if (document.getElementById('brainfish-widget')) {\n return (window as any).Brainfish;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.id = 'brainfish-widget';\n script.src = url;\n script.type = useUMD ? 'text/javascript' : 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onload = () => {\n setTimeout(() => {\n const module = (window as any).Brainfish;\n module\n ? resolve(module)\n : reject(new Error('Failed to load Brainfish module'));\n }, 200);\n };\n\n script.onerror = (event) => {\n const errorEvent = event as ErrorEvent;\n const errorDetails = {\n message: `Failed to load script: ${url}`,\n type: errorEvent.type,\n fileName: errorEvent.filename,\n lineNumber: errorEvent.lineno,\n columnNumber: errorEvent.colno,\n error: errorEvent.error ? errorEvent.error.toString() : 'Unknown error',\n };\n reject(new Error(JSON.stringify(errorDetails)));\n };\n\n if (!useUMD) {\n document.head.appendChild(script);\n }\n });\n};\n\nexport const init = async ({\n apiHost,\n widgetKey,\n version,\n}: {\n apiHost: string;\n widgetKey: string;\n version: string;\n}) => {\n try {\n const url = `https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${version}/dist/web.js`;\n const scriptUrl = useUMD ? url.replace('web.js', 'web.umd.js') : url;\n\n const widget = await loadSearchWidgetScript(scriptUrl);\n\n return { widget };\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n widgetKey\n );\n }\n};\n\nfunction initializeWidget(widget: Brainfish, config: Config) {\n if (\n config.widgetType === WidgetType.Searchbar ||\n config.widgetType === 'Search'\n ) {\n widget.SearchWidget.initStandard(config);\n } else {\n widget.HelpWidget.initPopup(config);\n }\n}\n\nconst initializedWidgets = new Set<string>();\n\nexport const initSearchWidget = async (\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config\n): Promise<Brainfish | undefined> => {\n const apiHost = getApiHost(options.overrides);\n\n try {\n // Check if this widget has already been initialized\n if (initializedWidgets.has(options.widgetKey)) {\n // do nothing if already initialized\n return undefined;\n }\n\n const result = await init({\n apiHost,\n widgetKey: options.widgetKey,\n version: config.version || 'latest',\n });\n if (result) {\n const { widget } = result;\n\n const transformedConfig = transformConfig({\n config,\n apiKey: options.widgetKey,\n apiHost,\n });\n\n if (options.overrides && config.settings) {\n (\n Object.entries(options.overrides) as [\n keyof Settings,\n (Action | CallbackAction)[]\n ][]\n ).forEach(([key, value]) => {\n if (config.settings && key in config.settings) {\n (config.settings[key] as (Action | CallbackAction)[]) =\n updateActions(\n config.settings[key] as (Action | CallbackAction)[],\n value\n );\n }\n });\n }\n\n initializeWidget(widget, transformedConfig);\n initializedWidgets.add(options.widgetKey);\n return widget;\n }\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n options.widgetKey\n );\n }\n return undefined;\n};\n","export const isIOS14OrBelow = () => {\n if (typeof window === 'undefined') return;\n const ua = window.navigator.userAgent;\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n if (!iOS) return false;\n const version = ua.match(/OS (\\d+)_/i);\n return version && parseInt(version[1], 10) <= 14;\n};\n","import { sendBrainfishWidgetError } from './utils/sendBrainfishError';\n\nconst ANALYTICS_API_HOST = import.meta.env.VITE_ANALYTICS_API_HOST;\n\nlet isTrackerInitialized: boolean = false;\n\nconst loadTrackerScript = async (apiHost: string, widgetKey: string) => {\n if (document.getElementById('brainfish-analytics')) {\n return window.BrainfishAnalytics;\n }\n\n const script = document.createElement('script');\n script.id = 'brainfish-analytics';\n // TODO: should we make this configurable for local testing?\n script.src = `https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js`;\n script.type = 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onerror = () => {\n sendBrainfishWidgetError(\n apiHost,\n new Error(`Failed to load script: ${script.src}`),\n `Failed to load script: ${script.src}`,\n widgetKey\n );\n };\n\n document.head.appendChild(script);\n};\n\nexport const initBrainfishAnalytics = async (\n widgetKey: string,\n accessKey: string,\n apiHost: string,\n analyticsApiHost: string = ANALYTICS_API_HOST,\n enableRecording: boolean = false\n): Promise<void> => {\n if (!accessKey) {\n sendBrainfishWidgetError(\n apiHost,\n new Error('Access key is required'),\n 'Access key is required',\n widgetKey\n );\n }\n\n // Only reinitialize if the access key is different\n if (isTrackerInitialized) {\n return;\n }\n\n try {\n window.BrainfishAnalytics('init', {\n apiUrl: analyticsApiHost,\n accessKey,\n trackScreenViews: true,\n trackAttributes: true,\n trackOutgoingLinks: true,\n enableRecording,\n });\n\n isTrackerInitialized = true;\n\n await loadTrackerScript(apiHost, widgetKey);\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Failed to initialize BrainfishAnalytics',\n widgetKey\n );\n }\n};\n","// web.ts\n// entry point for web component\nimport { Config } from '@brainfish-ai/widgets-common';\nimport { getConfigByKey } from './api/getConfigByKey';\nimport { initSearchWidget } from './initSearchWidget';\nimport { initBrainfishAnalytics } from './initBrainfishAnalytics';\nimport type { Brainfish } from './types/brainfish';\nimport { BrainfishQueue, createBrainfishQueue } from './utils/brainfishQueue';\nimport { createQueues } from './utils/createQueues';\nimport { getApiHost, getAnalyticsApiHost } from './utils/getApiHost';\n\nlet globalBrainfish: BrainfishQueue | null = null;\n\nfunction getBrainfishInstance(): BrainfishQueue {\n if (typeof window !== 'undefined' && (window as any).Brainfish) {\n return (window as any).Brainfish;\n }\n if (!globalBrainfish) {\n globalBrainfish = createBrainfishQueue();\n if (typeof window !== 'undefined') {\n (window as any).Brainfish = globalBrainfish;\n }\n }\n return globalBrainfish;\n}\n\nconst Brainfish = getBrainfishInstance();\n\nlet initializationPromise: Promise<void> | null = null;\n\nasync function initializeBrainfish(\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config,\n apiHost: string,\n analyticsApiHost: string\n): Promise<void> {\n const enableRecording =\n options.overrides?.enableRecording ||\n config?.settings?.enableRecording ||\n false;\n\n const initPromises: Promise<Brainfish | undefined | void>[] = [\n initSearchWidget(options, config),\n ];\n\n if (config?.settings?.enableTracking) {\n initPromises.push(\n initBrainfishAnalytics(\n options.widgetKey,\n config.trackingToken || '',\n apiHost,\n analyticsApiHost,\n enableRecording\n ) // Even if this fails, it won't block the widget\n );\n }\n\n // Start both initializations in parallel\n const [widgetPromise] = await Promise.allSettled(initPromises);\n\n // Only set the real Brainfish if widget initialization succeeded\n if (widgetPromise.status === 'fulfilled' && widgetPromise.value) {\n Brainfish._setRealBrainfish(widgetPromise.value);\n }\n}\n\nBrainfish.Widgets.init = async (options: {\n widgetKey: string;\n overrides?: any;\n}): Promise<void> => {\n createQueues();\n\n const apiHost = getApiHost(options.overrides);\n const analyticsApiHost = getAnalyticsApiHost(options.overrides);\n\n const { config } = await getConfigByKey({\n widgetKey: options.widgetKey,\n apiHost,\n });\n\n if (!initializationPromise) {\n // First initialization\n initializationPromise = initializeBrainfish(\n options,\n config,\n apiHost,\n analyticsApiHost\n );\n }\n\n // Wait for Brainfish to be initialized\n await initializationPromise;\n};\n\nexport default Brainfish;\n\nexport const BrainfishAnalytics = (\n ...args: Parameters<typeof window.BrainfishAnalytics>\n) => {\n if (typeof window !== 'undefined' && window.BrainfishAnalytics) {\n window.BrainfishAnalytics(...args);\n }\n};\n","import type { Brainfish } from '../types/brainfish';\n\nexport interface BrainfishQueue extends Brainfish {\n _setRealBrainfish: (bf: Brainfish) => void;\n Widgets: {\n init: (options: { widgetKey: string; overrides?: any }) => Promise<void>;\n };\n}\n\nexport function createBrainfishQueue(): BrainfishQueue {\n let queue: [string, any[]][] = [];\n let realBrainfish: Brainfish | null = null;\n\n function queueOrExecute(method: string, args: any[]) {\n if (realBrainfish) {\n const parts = method.split('.');\n let obj: any = realBrainfish;\n for (let i = 0; i < parts.length - 1; i++) {\n obj = obj[parts[i]];\n }\n const fn = obj[parts[parts.length - 1]];\n if (typeof fn === 'function') {\n return fn.apply(obj, args);\n }\n } else {\n queue.push([method, args]);\n }\n }\n\n const brainfishQueue: BrainfishQueue = {\n Widgets: {\n init: (...args: any[]) => queueOrExecute('Widgets.init', args),\n },\n SearchWidget: {\n initStandard: (...args: any[]) =>\n queueOrExecute('SearchWidget.initStandard', args),\n },\n HelpWidget: {\n initPopup: (...args: any[]) =>\n queueOrExecute('HelpWidget.initPopup', args),\n close: (...args: any[]) => queueOrExecute('HelpWidget.close', args),\n open: (...args: any[]) => queueOrExecute('HelpWidget.open', args),\n toggle: (...args: any[]) => queueOrExecute('HelpWidget.toggle', args),\n },\n _setRealBrainfish: function (bf: Brainfish) {\n realBrainfish = bf;\n while (queue.length > 0) {\n const [method, args] = queue.shift()!;\n queueOrExecute(method, args);\n }\n },\n };\n\n return brainfishQueue;\n}\n","export const createQueues = () => {\n if (window) {\n window.BrainfishAnalytics =\n window.BrainfishAnalytics ||\n function (...args: [string, ...any[]]) {\n (window.BrainfishAnalytics.q = window.BrainfishAnalytics.q || []).push(\n args\n );\n };\n }\n};\n"],"names":["WidgetType","ActionType","Sidebar","Searchbar","BrainfishWidgetError","Error","message","options","super","this","cause","name","captureStackTrace","stack","sendBrainfishWidgetError","apiHost","error","widgetKey","errorMessage","errorDetails","JSON","parse","String","sendErrors","navigator","userAgent","toLowerCase","includes","errorData","toJSON","fetch","method","headers","body","stringify","getConfigByKey","async","_ref","endpoint","__async","then","response","ok","status","json","data","catch","transformConfig","config","apiKey","settings","forEach","key","map","action","type","CALLBACK","value","__spreadProps","__spreadValues","Function","widgetMode","widgetType","getApiHost","overrides","useUMD","window","ua","match","version","parseInt","init","url","scriptUrl","replace","widget","document","getElementById","Brainfish","Promise","resolve","reject","script","createElement","id","src","crossOrigin","onload","setTimeout","module","onerror","event","errorEvent","fileName","filename","lineNumber","lineno","columnNumber","colno","toString","head","appendChild","initializedWidgets","Set","initSearchWidget","has","result","transformedConfig","Object","entries","_ref2","overrideActions","arguments","length","actionMap","Map","label","set","Array","from","values","SearchWidget","initStandard","HelpWidget","initPopup","add","isTrackerInitialized","initBrainfishAnalytics","accessKey","analyticsApiHost","undefined","enableRecording","BrainfishAnalytics","apiUrl","trackScreenViews","trackAttributes","trackOutgoingLinks","globalBrainfish","queue","realBrainfish","queueOrExecute","args","parts","split","obj","i","fn","apply","push","Widgets","_len","_key","_len2","_key2","_len3","_key3","close","_len4","_key4","open","_len5","_key5","toggle","_len6","_key6","_setRealBrainfish","bf","shift","initializationPromise","q","_options$overrides","_config$settings","_config$settings2","initPromises","enableTracking","trackingToken","widgetPromise","allSettled"],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sources":["../../common/dist/types/brainfish.js","../../common/dist/types/config.js","../../common/dist/types/BrainfishWidgetError.js","../src/utils/sendErrors.ts","../src/utils/sendBrainfishError.ts","../src/api/getConfigByKey.ts","../src/utils/fetchWithErrorHandling.ts","../src/utils/configTransformer.ts","../src/utils/getApiHost.ts","../src/initSearchWidget.ts","../src/utils/isIOS14OrBelow.ts","../src/initBrainfishAnalytics.ts","../src/web.ts","../src/utils/brainfishQueue.ts","../src/utils/createQueues.ts"],"sourcesContent":["export var WidgetType;\n(function (WidgetType) {\n WidgetType[\"Sidebar\"] = \"sidebar\";\n WidgetType[\"Searchbar\"] = \"searchbar\";\n})(WidgetType || (WidgetType = {}));\n;\nexport const WIDGET_NAMES = {\n [WidgetType.Sidebar]: 'brainfish-sidebar-widget',\n [WidgetType.Searchbar]: 'brainfish-searchbar-widget',\n};\n","const isUrlString = (value) => {\n const urlRegExp = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i;\n return urlRegExp.test(value);\n};\nexport const validateUrlString = (value) => {\n if (!isUrlString(value)) {\n throw new Error(`Invalid URL: ${value}`);\n }\n return value;\n};\nexport var ActionType;\n(function (ActionType) {\n ActionType[\"LINK\"] = \"link\";\n ActionType[\"CALLBACK\"] = \"callback\";\n ActionType[\"EMAIL\"] = \"email\";\n ActionType[\"PHONE\"] = \"phone\";\n})(ActionType || (ActionType = {}));\n","export class BrainfishWidgetError extends Error {\n cause;\n constructor(message, options) {\n super(message, options);\n this.name = 'BrainfishWidgetError';\n this.cause = options?.cause;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BrainfishWidgetError);\n }\n // Append cause stack to this error's stack if cause is an Error\n if (this.cause instanceof Error && this.cause.stack) {\n this.stack = this.stack + '\\nCaused by: ' + this.cause.stack;\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause instanceof Error\n ? {\n name: this.cause.name,\n message: this.cause.message,\n stack: this.cause.stack,\n }\n : this.cause,\n };\n }\n}\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\n\ndeclare const __APP_VERSION__: string;\n\nexport const sendErrors = (\n apiHost: string,\n error: BrainfishWidgetError,\n widgetKey: string\n) => {\n // only send errors if browser is not a headless browser\n if (!navigator || navigator.userAgent.toLowerCase().includes('headless')) {\n return;\n }\n\n const errorData = error.toJSON();\n const API_HOST = apiHost || import.meta.env.VITE_API_HOST;\n\n fetch(`${API_HOST}/api/trackError.widget.create`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n body: JSON.stringify({\n error: `WebWidgetVersion: ${__APP_VERSION__}. ${error.message}`,\n stack: error.stack,\n cause: {\n message: errorData.message,\n stack: errorData.stack,\n cause: errorData.cause,\n },\n }),\n });\n};\n","import { BrainfishWidgetError } from '@brainfish-ai/widgets-common';\nimport { sendErrors } from './sendErrors';\n\nexport const sendBrainfishWidgetError = (\n apiHost: string,\n error: unknown,\n message: string,\n widgetKey: string\n) => {\n let errorMessage = message;\n let errorDetails: Record<string, any> = {};\n\n if (error instanceof Error) {\n try {\n errorDetails = JSON.parse(error.message);\n errorMessage += ` - ${errorDetails.message || error.message}`;\n } catch {\n // If parsing fails, use the error message as is\n errorMessage += ` - ${error.message}`;\n }\n } else {\n errorMessage += ` - ${String(error)}`;\n }\n\n const err = new BrainfishWidgetError(errorMessage, {\n cause: errorDetails,\n });\n\n sendErrors(apiHost, err, widgetKey);\n};\n","import type { Config } from '@brainfish-ai/widgets-common';\nimport { fetchWithErrorHandling } from '../utils/fetchWithErrorHandling';\n\nexport interface ConfigResponse {\n config: Config;\n}\n\nexport const getConfigByKey = async ({\n widgetKey,\n apiHost,\n}: {\n widgetKey: string;\n apiHost: string;\n}): Promise<ConfigResponse> => {\n const endpoint = `/api/searchWidgets.getConfigByKey`;\n return fetchWithErrorHandling(apiHost, endpoint, widgetKey);\n};\n","import { sendBrainfishWidgetError } from './sendBrainfishError';\n\nexport async function fetchWithErrorHandling(\n apiHost: string,\n endpoint: string,\n widgetKey: string\n): Promise<any> {\n return fetch(`${apiHost}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'api-key': widgetKey,\n },\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(`API call failed with status: ${response.status}`);\n }\n return response.json();\n })\n .then((data) => {\n if (!data) {\n throw new Error('Error loading config: empty response');\n }\n return data;\n })\n .catch((error) => {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Error fetching config',\n widgetKey\n );\n });\n}\n","import type {\n Config,\n CallbackAction,\n Action,\n} from '@brainfish-ai/widgets-common';\nimport { ActionType } from '@brainfish-ai/widgets-common';\n\nconst mapActionButtons = (actionButtons: (CallbackAction | Action)[]) =>\n actionButtons.map((action) =>\n action.type === ActionType.CALLBACK && action.value\n ? { ...action, value: new Function(`return ${action.value}`)() }\n : action\n );\n\nexport const updateActions = (\n configActions: (Action | CallbackAction)[] = [],\n overrideActions: (Action | CallbackAction)[]\n) => {\n const actionMap = new Map(\n configActions.map((action) => [action.label, action])\n );\n overrideActions.forEach((action) => actionMap.set(action.label, action));\n return Array.from(actionMap.values());\n};\n\nexport const transformConfig = ({\n config,\n apiKey,\n apiHost,\n}: {\n config: Config;\n apiKey: string;\n apiHost: string;\n}) => {\n const settings = config.settings || {};\n (\n ['bodyActionButtons', 'footerActionButtons', 'nextBestActions'] as const\n ).forEach((key) => {\n if (settings[key]) {\n settings[key] = mapActionButtons(\n settings[key] as (CallbackAction | Action)[]\n );\n }\n });\n\n return {\n ...config,\n settings,\n apiHost,\n widgetMode: config.widgetType,\n apiKey,\n };\n};\n","export const getApiHost = (overrides?: { apiHost?: string }): string => {\n return overrides?.apiHost || import.meta.env.VITE_API_HOST;\n};\n\nexport const getAnalyticsApiHost = (overrides?: {\n analyticsApiHost?: string;\n}): string => {\n return overrides?.analyticsApiHost || import.meta.env.VITE_ANALYTICS_API_HOST;\n};\n","import type {\n Config,\n CallbackAction,\n Action,\n Settings,\n} from '@brainfish-ai/widgets-common';\nimport { WidgetType } from '@brainfish-ai/widgets-common';\nimport { isIOS14OrBelow } from './utils/isIOS14OrBelow';\nimport { sendBrainfishWidgetError } from './utils/sendBrainfishError';\nimport type { Brainfish } from './types/brainfish';\nimport { transformConfig, updateActions } from './utils/configTransformer';\nimport { getApiHost } from './utils/getApiHost';\n\nconst useUMD = isIOS14OrBelow();\n\nconst loadSearchWidgetScript = async (url: string): Promise<any> => {\n if (document.getElementById('brainfish-widget')) {\n return (window as any).Brainfish;\n }\n\n return new Promise((resolve, reject) => {\n const script = document.createElement('script');\n script.id = 'brainfish-widget';\n script.src = url;\n script.type = useUMD ? 'text/javascript' : 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onload = () => {\n setTimeout(() => {\n const module = (window as any).Brainfish;\n module\n ? resolve(module)\n : reject(new Error('Failed to load Brainfish module'));\n }, 200);\n };\n\n script.onerror = (event) => {\n const errorEvent = event as ErrorEvent;\n const errorDetails = {\n message: `Failed to load script: ${url}`,\n type: errorEvent.type,\n fileName: errorEvent.filename,\n lineNumber: errorEvent.lineno,\n columnNumber: errorEvent.colno,\n error: errorEvent.error ? errorEvent.error.toString() : 'Unknown error',\n };\n reject(new Error(JSON.stringify(errorDetails)));\n };\n\n if (!useUMD) {\n document.head.appendChild(script);\n }\n });\n};\n\nexport const init = async ({\n apiHost,\n widgetKey,\n version,\n}: {\n apiHost: string;\n widgetKey: string;\n version: string;\n}) => {\n try {\n const url = `https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${version}/dist/web.js`;\n const scriptUrl = useUMD ? url.replace('web.js', 'web.umd.js') : url;\n\n const widget = await loadSearchWidgetScript(scriptUrl);\n\n return { widget };\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n widgetKey\n );\n }\n};\n\nfunction initializeWidget(widget: Brainfish, config: Config) {\n if (\n config.widgetType === WidgetType.Searchbar ||\n config.widgetType === 'Search'\n ) {\n widget.SearchWidget.initStandard(config);\n } else {\n widget.HelpWidget.initPopup(config);\n }\n}\n\nconst initializedWidgets = new Set<string>();\n\nexport const initSearchWidget = async (\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config\n): Promise<Brainfish | undefined> => {\n const apiHost = getApiHost(options.overrides);\n\n try {\n // Check if this widget has already been initialized\n if (initializedWidgets.has(options.widgetKey)) {\n // do nothing if already initialized\n return undefined;\n }\n\n const result = await init({\n apiHost,\n widgetKey: options.widgetKey,\n version: config.version || 'latest',\n });\n if (result) {\n const { widget } = result;\n\n const transformedConfig = transformConfig({\n config,\n apiKey: options.widgetKey,\n apiHost,\n });\n\n if (options.overrides && config.settings) {\n (\n Object.entries(options.overrides) as [\n keyof Settings,\n (Action | CallbackAction)[]\n ][]\n ).forEach(([key, value]) => {\n if (config.settings && key in config.settings) {\n (config.settings[key] as (Action | CallbackAction)[]) =\n updateActions(\n config.settings[key] as (Action | CallbackAction)[],\n value\n );\n }\n });\n }\n\n initializeWidget(widget, transformedConfig);\n initializedWidgets.add(options.widgetKey);\n return widget;\n }\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n (error as Error).message,\n options.widgetKey\n );\n }\n return undefined;\n};\n","export const isIOS14OrBelow = () => {\n if (typeof window === 'undefined') return;\n const ua = window.navigator.userAgent;\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\n if (!iOS) return false;\n const version = ua.match(/OS (\\d+)_/i);\n return version && parseInt(version[1], 10) <= 14;\n};\n","import { sendBrainfishWidgetError } from './utils/sendBrainfishError';\n\nconst ANALYTICS_API_HOST = import.meta.env.VITE_ANALYTICS_API_HOST;\n\nlet isTrackerInitialized: boolean = false;\n\nconst loadTrackerScript = async (apiHost: string, widgetKey: string) => {\n if (document.getElementById('brainfish-analytics')) {\n return window.BrainfishAnalytics;\n }\n\n const script = document.createElement('script');\n script.id = 'brainfish-analytics';\n // TODO: should we make this configurable for local testing?\n script.src = `https://cdn.jsdelivr.net/npm/@brainfish-ai/web-tracker@latest/dist/tracker.js`;\n script.type = 'module';\n script.async = true;\n script.crossOrigin = 'anonymous';\n\n script.onerror = () => {\n sendBrainfishWidgetError(\n apiHost,\n new Error(`Failed to load script: ${script.src}`),\n `Failed to load script: ${script.src}`,\n widgetKey\n );\n };\n\n document.head.appendChild(script);\n};\n\nexport const initBrainfishAnalytics = async (\n widgetKey: string,\n accessKey: string,\n apiHost: string,\n analyticsApiHost: string = ANALYTICS_API_HOST,\n enableRecording: boolean = false\n): Promise<void> => {\n if (!accessKey) {\n sendBrainfishWidgetError(\n apiHost,\n new Error('Access key is required'),\n 'Access key is required',\n widgetKey\n );\n }\n\n // Only reinitialize if the access key is different\n if (isTrackerInitialized) {\n return;\n }\n\n try {\n window.BrainfishAnalytics('init', {\n apiUrl: analyticsApiHost,\n accessKey,\n trackScreenViews: true,\n trackAttributes: true,\n trackOutgoingLinks: true,\n enableRecording,\n });\n\n isTrackerInitialized = true;\n\n await loadTrackerScript(apiHost, widgetKey);\n } catch (error) {\n sendBrainfishWidgetError(\n apiHost,\n error,\n 'Failed to initialize BrainfishAnalytics',\n widgetKey\n );\n }\n};\n","// web.ts\n// entry point for web component\nimport { Config } from '@brainfish-ai/widgets-common';\nimport { getConfigByKey } from './api/getConfigByKey';\nimport { initSearchWidget } from './initSearchWidget';\nimport { initBrainfishAnalytics } from './initBrainfishAnalytics';\nimport type { Brainfish } from './types/brainfish';\nimport { BrainfishQueue, createBrainfishQueue } from './utils/brainfishQueue';\nimport { createQueues } from './utils/createQueues';\nimport { getApiHost, getAnalyticsApiHost } from './utils/getApiHost';\n\nlet globalBrainfish: BrainfishQueue | null = null;\n\nfunction getBrainfishInstance(): BrainfishQueue {\n if (typeof window !== 'undefined' && (window as any).Brainfish) {\n return (window as any).Brainfish;\n }\n if (!globalBrainfish) {\n globalBrainfish = createBrainfishQueue();\n if (typeof window !== 'undefined') {\n (window as any).Brainfish = globalBrainfish;\n }\n }\n return globalBrainfish;\n}\n\nconst Brainfish = getBrainfishInstance();\n\nlet initializationPromise: Promise<void> | null = null;\n\nasync function initializeBrainfish(\n options: {\n widgetKey: string;\n overrides?: any;\n },\n config: Config,\n apiHost: string,\n analyticsApiHost: string\n): Promise<void> {\n const enableRecording =\n options.overrides?.enableRecording ||\n config?.settings?.enableRecording ||\n false;\n\n const initPromises: Promise<Brainfish | undefined | void>[] = [\n initSearchWidget(options, config),\n ];\n\n if (config?.settings?.enableTracking) {\n initPromises.push(\n initBrainfishAnalytics(\n options.widgetKey,\n config.trackingToken || '',\n apiHost,\n analyticsApiHost,\n enableRecording\n ) // Even if this fails, it won't block the widget\n );\n }\n\n // Start both initializations in parallel\n const [widgetPromise] = await Promise.allSettled(initPromises);\n\n // Only set the real Brainfish if widget initialization succeeded\n if (widgetPromise.status === 'fulfilled' && widgetPromise.value) {\n Brainfish._setRealBrainfish(widgetPromise.value);\n }\n}\n\nBrainfish.Widgets.init = async (options: {\n widgetKey: string;\n overrides?: any;\n}): Promise<void> => {\n createQueues();\n\n const apiHost = getApiHost(options.overrides);\n const analyticsApiHost = getAnalyticsApiHost(options.overrides);\n\n const { config } = await getConfigByKey({\n widgetKey: options.widgetKey,\n apiHost,\n });\n\n if (!initializationPromise) {\n // First initialization\n initializationPromise = initializeBrainfish(\n options,\n config,\n apiHost,\n analyticsApiHost\n );\n }\n\n // Wait for Brainfish to be initialized\n await initializationPromise;\n};\n\nexport default Brainfish;\n\nexport const BrainfishAnalytics = (\n ...args: Parameters<typeof window.BrainfishAnalytics>\n) => {\n if (typeof window !== 'undefined' && window.BrainfishAnalytics) {\n window.BrainfishAnalytics(...args);\n }\n};\n","import type { Brainfish } from '../types/brainfish';\n\nexport interface BrainfishQueue extends Brainfish {\n _setRealBrainfish: (bf: Brainfish) => void;\n Widgets: {\n init: (options: { widgetKey: string; overrides?: any }) => Promise<void>;\n };\n}\n\nexport function createBrainfishQueue(): BrainfishQueue {\n let queue: [string, any[]][] = [];\n let realBrainfish: Brainfish | null = null;\n\n function queueOrExecute(method: string, args: any[]) {\n if (realBrainfish) {\n const parts = method.split('.');\n let obj: any = realBrainfish;\n for (let i = 0; i < parts.length - 1; i++) {\n obj = obj[parts[i]];\n }\n const fn = obj[parts[parts.length - 1]];\n if (typeof fn === 'function') {\n return fn.apply(obj, args);\n }\n } else {\n queue.push([method, args]);\n }\n }\n\n const brainfishQueue: BrainfishQueue = {\n Widgets: {\n init: (...args: any[]) => queueOrExecute('Widgets.init', args),\n },\n SearchWidget: {\n initStandard: (...args: any[]) =>\n queueOrExecute('SearchWidget.initStandard', args),\n },\n HelpWidget: {\n initPopup: (...args: any[]) =>\n queueOrExecute('HelpWidget.initPopup', args),\n close: (...args: any[]) => queueOrExecute('HelpWidget.close', args),\n open: (...args: any[]) => queueOrExecute('HelpWidget.open', args),\n toggle: (...args: any[]) => queueOrExecute('HelpWidget.toggle', args),\n },\n _setRealBrainfish: function (bf: Brainfish) {\n realBrainfish = bf;\n while (queue.length > 0) {\n const [method, args] = queue.shift()!;\n queueOrExecute(method, args);\n }\n },\n };\n\n return brainfishQueue;\n}\n","export const createQueues = () => {\n if (window) {\n window.BrainfishAnalytics =\n window.BrainfishAnalytics ||\n function (...args: [string, ...any[]]) {\n (window.BrainfishAnalytics.q = window.BrainfishAnalytics.q || []).push(\n args\n );\n };\n }\n};\n"],"names":["WidgetType","ActionType","Sidebar","Searchbar","BrainfishWidgetError","Error","message","options","super","this","cause","name","captureStackTrace","stack","sendBrainfishWidgetError","apiHost","error","widgetKey","errorMessage","errorDetails","JSON","parse","String","sendErrors","navigator","userAgent","toLowerCase","includes","errorData","toJSON","fetch","method","headers","body","stringify","getConfigByKey","async","_ref","endpoint","__async","then","response","ok","status","json","data","catch","transformConfig","config","apiKey","settings","forEach","key","map","action","type","CALLBACK","value","__spreadProps","__spreadValues","Function","widgetMode","widgetType","getApiHost","overrides","useUMD","window","ua","match","version","parseInt","init","url","scriptUrl","replace","widget","document","getElementById","Brainfish","Promise","resolve","reject","script","createElement","id","src","crossOrigin","onload","setTimeout","module","onerror","event","errorEvent","fileName","filename","lineNumber","lineno","columnNumber","colno","toString","head","appendChild","initializedWidgets","Set","initSearchWidget","has","result","transformedConfig","Object","entries","_ref2","overrideActions","arguments","length","actionMap","Map","label","set","Array","from","values","SearchWidget","initStandard","HelpWidget","initPopup","add","isTrackerInitialized","initBrainfishAnalytics","accessKey","analyticsApiHost","undefined","enableRecording","BrainfishAnalytics","apiUrl","trackScreenViews","trackAttributes","trackOutgoingLinks","globalBrainfish","queue","realBrainfish","queueOrExecute","args","parts","split","obj","i","fn","apply","push","Widgets","_len","_key","_len2","_key2","_len3","_key3","close","_len4","_key4","open","_len5","_key5","toggle","_len6","_key6","_setRealBrainfish","bf","shift","initializationPromise","q","_options$overrides","_config$settings","_config$settings2","initPromises","enableTracking","trackingToken","widgetPromise","allSettled"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brainfish-ai/widgets-initiator",
3
- "version": "1.3.1",
3
+ "version": "1.3.2-alpha.1",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/types/index.d.ts",