@brainfish-ai/widgets-initiator 1.3.0-beta.4 → 1.3.2-alpha.0

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 $=Object.defineProperty,j=Object.defineProperties;var P=Object.getOwnPropertyDescriptors;var K=Object.getOwnPropertySymbols;var C=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable;var m=(t,n,r)=>n in t?$(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r,b=(t,n)=>{for(var r in n||(n={}))C.call(n,r)&&m(t,r,n[r]);if(K)for(var r of K(n))I.call(n,r)&&m(t,r,n[r]);return t},v=(t,n)=>j(t,P(n));var H=(t,n,r)=>m(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 y,S;(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]="aed84668-61de-491c-9347-d3dd4a41e621",t._sentryDebugIdIdentifier="sentry-dbid-aed84668-61de-491c-9347-d3dd4a41e621")}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:"4d8ab63bb50ec8ff56ea5f5478709127eba3da52"},function(t){t.Sidebar="sidebar",t.Searchbar="searchbar"}(y||(y={})),y.Sidebar,y.Searchbar;class B extends Error{constructor(r,o){super(r,o);H(this,"cause");this.name="BrainfishWidgetError",this.cause=o==null?void 0:o.cause,Error.captureStackTrace&&Error.captureStackTrace(this,B),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"})(S||(S={}));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.0-beta.4. ${a.message}`,stack:a.stack,cause:{message:u.message,stack:u.stack,cause:u.cause}})})})(t,new B(i,{cause:s}),o)},N=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)}),L=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===S.CALLBACK&&e.value?v(b({},e),{value:new Function(`return ${e.value}`)()}):e))}),v(b({},n),{settings:i,apiHost:o,widgetMode:n.widgetType,apiKey:r})},T=t=>(t==null?void 0:t.apiHost)||"https://app.brainfi.sh",A=(()=>{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})(),_=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=A?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=A?"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,w={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(w)))},A||document.head.appendChild(c)})}))(s)}}catch(i){h(n,i,i.message,r)}}),W=new Set,R=(t,n)=>g(exports,null,function*(){const r=T(t.overrides);try{if(W.has(t.widgetKey))return;const o=yield _({apiHost:r,widgetKey:t.widgetKey,version:n.version||"latest"});if(o){const{widget:i}=o,s=L({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===y.Searchbar||a.widgetType==="Search"?e.SearchWidget.initStandard(a):e.HelpWidget.initPopup(a)}(i,s),W.add(t.widgetKey),i}}catch(o){h(r,o,o.message,t.widgetKey)}});let O=!1;const F=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),!O)try{window.BrainfishAnalytics("init",{apiUrl:e,accessKey:n,trackScreenViews:!0,trackAttributes:!0,trackOutgoingLinks:!0,enableRecording:a}),O=!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 E=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 k=null;E.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(t.overrides),r=((o=t.overrides)==null?void 0:o.analyticsApiHost)||void 0;var o;const{config:i}=yield N({widgetKey:t.widgetKey,apiHost:n});k||(k=function(s,e,a,d){return g(this,null,function*(){var u,c;const l=((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,f=[R(s,e)];f.push(F(s.widgetKey,e.trackingToken||"",a,d,l));const[w]=yield Promise.allSettled(f);w.status==="fulfilled"&&w.value&&E._setRealBrainfish(w.value)})}(t,i,n,r)),yield k});exports.BrainfishAnalytics=function(){typeof window!="undefined"&&window.BrainfishAnalytics&&window.BrainfishAnalytics(...arguments)},exports.default=E;
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]="64435ca6-5a6f-4165-b84d-904ca273045b",t._sentryDebugIdIdentifier="sentry-dbid-64435ca6-5a6f-4165-b84d-904ca273045b")}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:"f1b3472b67ed59854ba4be50f86981500ee3e188"},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.0. ${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 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 // 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","cause","this","name","captureStackTrace","stack","toJSON","sendBrainfishWidgetError","apiHost","error","widgetKey","errorMessage","errorDetails","JSON","parse","String","sendErrors","navigator","userAgent","toLowerCase","includes","errorData","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","i","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","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","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","initPromises","trackingToken","widgetPromise","allSettled"],"mappings":"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"}
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
@@ -1,16 +1,16 @@
1
- var T = Object.defineProperty, j = Object.defineProperties;
2
- var C = Object.getOwnPropertyDescriptors;
3
- var B = Object.getOwnPropertySymbols;
4
- var I = Object.prototype.hasOwnProperty, N = Object.prototype.propertyIsEnumerable;
5
- var m = (t, n, r) => n in t ? T(t, n, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[n] = r, b = (t, n) => {
1
+ var j = Object.defineProperty, C = Object.defineProperties;
2
+ var I = Object.getOwnPropertyDescriptors;
3
+ var K = Object.getOwnPropertySymbols;
4
+ var N = Object.prototype.hasOwnProperty, P = Object.prototype.propertyIsEnumerable;
5
+ 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) => {
6
6
  for (var r in n || (n = {}))
7
- I.call(n, r) && m(t, r, n[r]);
8
- if (B)
9
- for (var r of B(n))
10
- N.call(n, r) && m(t, r, n[r]);
7
+ N.call(n, r) && b(t, r, n[r]);
8
+ if (K)
9
+ for (var r of K(n))
10
+ P.call(n, r) && b(t, r, n[r]);
11
11
  return t;
12
- }, v = (t, n) => j(t, C(n));
13
- var K = (t, n, r) => m(t, typeof n != "symbol" ? n + "" : n, r);
12
+ }, A = (t, n) => C(t, I(n));
13
+ var H = (t, n, r) => b(t, typeof n != "symbol" ? n + "" : n, r);
14
14
  var g = (t, n, r) => new Promise((o, i) => {
15
15
  var s = (d) => {
16
16
  try {
@@ -27,21 +27,21 @@ var g = (t, n, r) => new Promise((o, i) => {
27
27
  }, a = (d) => d.done ? o(d.value) : Promise.resolve(d.value).then(s, e);
28
28
  a((r = r.apply(t, n)).next());
29
29
  });
30
- var p, E;
30
+ 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] = "fd73ef80-f027-4c6d-8f04-a2ad365ec31e", t._sentryDebugIdIdentifier = "sentry-dbid-fd73ef80-f027-4c6d-8f04-a2ad365ec31e");
34
+ n && (t._sentryDebugIds = t._sentryDebugIds || {}, t._sentryDebugIds[n] = "06818797-d968-4339-8447-5896798c2cde", t._sentryDebugIdIdentifier = "sentry-dbid-06818797-d968-4339-8447-5896798c2cde");
35
35
  } catch (r) {
36
36
  }
37
- })(), (typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}).SENTRY_RELEASE = { id: "4d8ab63bb50ec8ff56ea5f5478709127eba3da52" }, function(t) {
37
+ })(), (typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}).SENTRY_RELEASE = { id: "f1b3472b67ed59854ba4be50f86981500ee3e188" }, function(t) {
38
38
  t.Sidebar = "sidebar", t.Searchbar = "searchbar";
39
- }(p || (p = {})), p.Sidebar, p.Searchbar;
40
- class S extends Error {
39
+ }(w || (w = {})), w.Sidebar, w.Searchbar;
40
+ class B extends Error {
41
41
  constructor(r, o) {
42
42
  super(r, o);
43
- K(this, "cause");
44
- this.name = "BrainfishWidgetError", this.cause = o == null ? void 0 : o.cause, Error.captureStackTrace && Error.captureStackTrace(this, S), this.cause instanceof Error && this.cause.stack && (this.stack = this.stack + `
43
+ H(this, "cause");
44
+ this.name = "BrainfishWidgetError", this.cause = o == null ? void 0 : o.cause, Error.captureStackTrace && Error.captureStackTrace(this, B), this.cause instanceof Error && this.cause.stack && (this.stack = this.stack + `
45
45
  Caused by: ` + this.cause.stack);
46
46
  }
47
47
  toJSON() {
@@ -50,7 +50,7 @@ Caused by: ` + this.cause.stack);
50
50
  }
51
51
  (function(t) {
52
52
  t.LINK = "link", t.CALLBACK = "callback", t.EMAIL = "email", t.PHONE = "phone";
53
- })(E || (E = {}));
53
+ })(S || (S = {}));
54
54
  const h = (t, n, r, o) => {
55
55
  let i = r, s = {};
56
56
  if (n instanceof Error) try {
@@ -62,9 +62,9 @@ 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.0-beta.4. ${a.message}`, stack: a.stack, cause: { message: u.message, stack: u.stack, cause: u.cause } }) });
66
- })(t, new S(i, { cause: s }), o);
67
- }, P = (t) => g(void 0, null, function* () {
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.0. ${a.message}`, stack: a.stack, cause: { message: u.message, stack: u.stack, cause: u.cause } }) });
66
+ })(t, new B(i, { cause: s }), o);
67
+ }, L = (t) => g(void 0, null, function* () {
68
68
  let { widgetKey: n, apiHost: r } = t;
69
69
  return function(o, i, s) {
70
70
  return g(this, null, function* () {
@@ -79,46 +79,46 @@ const h = (t, n, r, o) => {
79
79
  });
80
80
  });
81
81
  }(r, "/api/searchWidgets.getConfigByKey", n);
82
- }), L = (t) => {
82
+ }), R = (t) => {
83
83
  let { config: n, apiKey: r, apiHost: o } = t;
84
84
  const i = n.settings || {};
85
85
  return ["bodyActionButtons", "footerActionButtons", "nextBestActions"].forEach((s) => {
86
- i[s] && (i[s] = i[s].map((e) => e.type === E.CALLBACK && e.value ? v(b({}, e), { value: new Function(`return ${e.value}`)() }) : e));
87
- }), v(b({}, n), { settings: i, apiHost: o, widgetMode: n.widgetType, apiKey: r });
88
- }, $ = (t) => (t == null ? void 0 : t.apiHost) || "https://app.brainfi.sh", A = (() => {
86
+ i[s] && (i[s] = i[s].map((e) => e.type === S.CALLBACK && e.value ? A(v({}, e), { value: new Function(`return ${e.value}`)() }) : e));
87
+ }), A(v({}, n), { settings: i, apiHost: o, widgetMode: n.widgetType, apiKey: r });
88
+ }, $ = (t) => (t == null ? void 0 : t.apiHost) || "https://app.brainfi.sh", k = (() => {
89
89
  if (typeof window == "undefined") return;
90
90
  const t = window.navigator.userAgent;
91
91
  if (!(t.match(/iPad/i) || t.match(/iPhone/i))) return !1;
92
92
  const n = t.match(/OS (\d+)_/i);
93
93
  return n && parseInt(n[1], 10) <= 14;
94
- })(), R = (t) => g(void 0, null, function* () {
94
+ })(), _ = (t) => g(void 0, null, function* () {
95
95
  let { apiHost: n, widgetKey: r, version: o } = t;
96
96
  try {
97
- const i = `https://cdn.jsdelivr.net/npm/@brainfish-ai/search-widget@${o}/dist/web.js`, s = A ? i.replace("web.js", "web.umd.js") : i;
97
+ 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;
98
98
  return { widget: yield ((a) => g(void 0, null, function* () {
99
99
  return document.getElementById("brainfish-widget") ? window.Brainfish : new Promise((d, u) => {
100
100
  const c = document.createElement("script");
101
- c.id = "brainfish-widget", c.src = a, c.type = A ? "text/javascript" : "module", c.async = !0, c.crossOrigin = "anonymous", c.onload = () => {
101
+ c.id = "brainfish-widget", c.src = a, c.type = k ? "text/javascript" : "module", c.async = !0, c.crossOrigin = "anonymous", c.onload = () => {
102
102
  setTimeout(() => {
103
103
  const l = window.Brainfish;
104
104
  l ? d(l) : u(new Error("Failed to load Brainfish module"));
105
105
  }, 200);
106
106
  }, c.onerror = (l) => {
107
- const f = l, w = { 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" };
108
- u(new Error(JSON.stringify(w)));
109
- }, A || document.head.appendChild(c);
107
+ const f = l, p = { 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" };
108
+ u(new Error(JSON.stringify(p)));
109
+ }, k || document.head.appendChild(c);
110
110
  });
111
111
  }))(s) };
112
112
  } catch (i) {
113
113
  h(n, i, i.message, r);
114
114
  }
115
- }), H = /* @__PURE__ */ new Set(), _ = (t, n) => g(void 0, null, function* () {
115
+ }), W = /* @__PURE__ */ new Set(), F = (t, n) => g(void 0, null, function* () {
116
116
  const r = $(t.overrides);
117
117
  try {
118
- if (H.has(t.widgetKey)) return;
119
- const o = yield R({ apiHost: r, widgetKey: t.widgetKey, version: n.version || "latest" });
118
+ if (W.has(t.widgetKey)) return;
119
+ const o = yield _({ apiHost: r, widgetKey: t.widgetKey, version: n.version || "latest" });
120
120
  if (o) {
121
- const { widget: i } = o, s = L({ config: n, apiKey: t.widgetKey, apiHost: r });
121
+ const { widget: i } = o, s = R({ config: n, apiKey: t.widgetKey, apiHost: r });
122
122
  return t.overrides && n.settings && Object.entries(t.overrides).forEach((e) => {
123
123
  let [a, d] = e;
124
124
  n.settings && a in n.settings && (n.settings[a] = function() {
@@ -127,19 +127,19 @@ const h = (t, n, r, o) => {
127
127
  return u.forEach((l) => c.set(l.label, l)), Array.from(c.values());
128
128
  }(n.settings[a], d));
129
129
  }), function(e, a) {
130
- a.widgetType === p.Searchbar || a.widgetType === "Search" ? e.SearchWidget.initStandard(a) : e.HelpWidget.initPopup(a);
131
- }(i, s), H.add(t.widgetKey), i;
130
+ a.widgetType === w.Searchbar || a.widgetType === "Search" ? e.SearchWidget.initStandard(a) : e.HelpWidget.initPopup(a);
131
+ }(i, s), W.add(t.widgetKey), i;
132
132
  }
133
133
  } catch (o) {
134
134
  h(r, o, o.message, t.widgetKey);
135
135
  }
136
136
  });
137
- let W = !1;
138
- const F = function(o, i, s) {
137
+ let O = !1;
138
+ const J = function(o, i, s) {
139
139
  return g(this, arguments, function* (t, n, r) {
140
140
  let e = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : void 0, a = arguments.length > 4 && arguments[4] !== void 0 && arguments[4];
141
- if (n || h(r, new Error("Access key is required"), "Access key is required", t), !W) try {
142
- window.BrainfishAnalytics("init", { apiUrl: e, accessKey: n, trackScreenViews: !0, trackAttributes: !0, trackOutgoingLinks: !0, enableRecording: a }), W = !0, yield ((d, u) => g(this, null, function* () {
141
+ if (n || h(r, new Error("Access key is required"), "Access key is required", t), !O) try {
142
+ window.BrainfishAnalytics("init", { apiUrl: e, accessKey: n, trackScreenViews: !0, trackAttributes: !0, trackOutgoingLinks: !0, enableRecording: a }), O = !0, yield ((d, u) => g(this, null, function* () {
143
143
  if (document.getElementById("brainfish-analytics")) return window.BrainfishAnalytics;
144
144
  const c = document.createElement("script");
145
145
  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 = () => {
@@ -152,7 +152,7 @@ const F = function(o, i, s) {
152
152
  });
153
153
  };
154
154
  let y = null;
155
- const O = typeof window != "undefined" && window.Brainfish ? window.Brainfish : (y || (y = /* @__PURE__ */ function() {
155
+ const T = typeof window != "undefined" && window.Brainfish ? window.Brainfish : (y || (y = /* @__PURE__ */ function() {
156
156
  let t = [], n = null;
157
157
  function r(i, s) {
158
158
  if (n) {
@@ -188,30 +188,30 @@ const O = typeof window != "undefined" && window.Brainfish ? window.Brainfish :
188
188
  }
189
189
  } };
190
190
  }(), typeof window != "undefined" && (window.Brainfish = y)), y);
191
- let k = null;
192
- O.Widgets.init = (t) => g(void 0, null, function* () {
191
+ let E = null;
192
+ T.Widgets.init = (t) => g(void 0, null, function* () {
193
193
  window && (window.BrainfishAnalytics = window.BrainfishAnalytics || function() {
194
194
  for (var s = arguments.length, e = new Array(s), a = 0; a < s; a++) e[a] = arguments[a];
195
195
  (window.BrainfishAnalytics.q = window.BrainfishAnalytics.q || []).push(e);
196
196
  });
197
197
  const n = $(t.overrides), r = ((o = t.overrides) == null ? void 0 : o.analyticsApiHost) || void 0;
198
198
  var o;
199
- const { config: i } = yield P({ widgetKey: t.widgetKey, apiHost: n });
200
- k || (k = function(s, e, a, d) {
199
+ const { config: i } = yield L({ widgetKey: t.widgetKey, apiHost: n });
200
+ E || (E = function(s, e, a, d) {
201
201
  return g(this, null, function* () {
202
- var u, c;
203
- const l = ((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, f = [_(s, e)];
204
- f.push(F(s.widgetKey, e.trackingToken || "", a, d, l));
205
- const [w] = yield Promise.allSettled(f);
206
- w.status === "fulfilled" && w.value && O._setRealBrainfish(w.value);
202
+ var u, c, l;
203
+ 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, p = [F(s, e)];
204
+ e != null && (l = e.settings) !== null && l !== void 0 && l.enableTracking && p.push(J(s.widgetKey, e.trackingToken || "", a, d, f));
205
+ const [m] = yield Promise.allSettled(p);
206
+ m.status === "fulfilled" && m.value && T._setRealBrainfish(m.value);
207
207
  });
208
- }(t, i, n, r)), yield k;
208
+ }(t, i, n, r)), yield E;
209
209
  });
210
- const q = function() {
210
+ const x = function() {
211
211
  typeof window != "undefined" && window.BrainfishAnalytics && window.BrainfishAnalytics(...arguments);
212
212
  };
213
213
  export {
214
- q as BrainfishAnalytics,
215
- O as default
214
+ x as BrainfishAnalytics,
215
+ T as default
216
216
  };
217
217
  //# sourceMappingURL=web.js.map
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 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 // 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","i","getApiHost","overrides","useUMD","window","ua","match","version","parseInt","isIOS14OrBelow","init","e","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","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","initPromises","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.0-beta.4",
3
+ "version": "1.3.2-alpha.0",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/types/index.d.ts",