@eka-care/medassist-widget-embed 0.2.45 → 0.2.46
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/eka-agents.html +11 -10
- package/dist/iframe.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -2
- package/package.json +1 -1
package/dist/eka-agents.html
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<link
|
|
15
15
|
rel="preload"
|
|
16
16
|
as="script"
|
|
17
|
-
href="https://unpkg.com/@eka-care/medassist-widget@0.1.
|
|
17
|
+
href="https://unpkg.com/@eka-care/medassist-widget@0.1.65/dist/medassist-widget.js"
|
|
18
18
|
fetchpriority="high"
|
|
19
19
|
crossorigin
|
|
20
20
|
/>
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
<link
|
|
24
24
|
rel="preload"
|
|
25
25
|
as="style"
|
|
26
|
-
href="https://unpkg.com/@eka-care/medassist-widget@0.1.
|
|
26
|
+
href="https://unpkg.com/@eka-care/medassist-widget@0.1.65/dist/medassist-widget.css"
|
|
27
27
|
onload="this.rel='stylesheet'"
|
|
28
28
|
crossorigin
|
|
29
29
|
/>
|
|
30
30
|
<noscript>
|
|
31
31
|
<link
|
|
32
32
|
rel="stylesheet"
|
|
33
|
-
href="https://unpkg.com/@eka-care/medassist-widget@0.1.
|
|
33
|
+
href="https://unpkg.com/@eka-care/medassist-widget@0.1.65/dist/medassist-widget.css"
|
|
34
34
|
/>
|
|
35
35
|
</noscript>
|
|
36
36
|
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
<script>
|
|
47
47
|
(function(){
|
|
48
48
|
var p=new URLSearchParams(location.search);
|
|
49
|
-
var id=p.get("
|
|
49
|
+
var id=p.get("agent-id");
|
|
50
50
|
if(!id)return;
|
|
51
|
-
var base=(p.get("
|
|
51
|
+
var base=(p.get("base-url")||"https://matrix.eka.care/reloaded").replace(/\/$/,"");
|
|
52
52
|
window.__agentConfigPromise=fetch(base+"/med-assist/agent-config/"+id,{
|
|
53
53
|
headers:{"ngrok-skip-browser-warning":"69420"}
|
|
54
54
|
}).then(function(r){return r.ok?r.json():null})
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
|
|
63
63
|
<!-- Production: served from unpkg. For local dev swap with: <script src="./src/medassist-widget.js" onload="init()" async></script> -->
|
|
64
64
|
<script
|
|
65
|
-
src="https://unpkg.com/@eka-care/medassist-widget@0.1.
|
|
65
|
+
src="https://unpkg.com/@eka-care/medassist-widget@0.1.65/dist/medassist-widget.js"
|
|
66
66
|
onload="init()"
|
|
67
67
|
fetchpriority="high"
|
|
68
68
|
crossorigin
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
|
|
102
102
|
async function init(){
|
|
103
103
|
var p=new URLSearchParams(location.search);
|
|
104
|
-
var agentId=p.get("
|
|
104
|
+
var agentId=p.get("agent-id");
|
|
105
105
|
if(!agentId||!window.renderMedAssist)return;
|
|
106
106
|
|
|
107
107
|
var urlTheme;
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
var apiTheme=mapAgentConfigTheme(cfg&&cfg.theme);
|
|
114
114
|
var mergedTheme=Object.assign({},apiTheme||{},urlTheme||{});
|
|
115
115
|
|
|
116
|
-
var redirectUrl=p.get("
|
|
116
|
+
var redirectUrl=p.get("redirect-url");
|
|
117
117
|
|
|
118
118
|
var container=document.getElementById("root");
|
|
119
119
|
container.textContent="";
|
|
@@ -122,15 +122,16 @@
|
|
|
122
122
|
displayMode:"full",
|
|
123
123
|
showCloseButton:true,
|
|
124
124
|
environment:getEnvironment(p.get("environment")),
|
|
125
|
-
baseUrl:p.get("
|
|
125
|
+
baseUrl:p.get("base-url")||undefined,
|
|
126
126
|
title:p.get("title")||(cfg&&cfg.name)||undefined,
|
|
127
|
-
iconUrl:p.get("
|
|
127
|
+
iconUrl:p.get("icon-url")||(cfg&&cfg.theme&&cfg.theme.icon_img)||undefined,
|
|
128
128
|
resize:p.get("resize")==="true"||!!(cfg&&cfg.resize),
|
|
129
129
|
connectionType:p.get("connectivity")||(cfg&&cfg.connectivity)||"socket",
|
|
130
130
|
allowed:cfg&&cfg.allowed,
|
|
131
131
|
initialMessage:cfg&&cfg.initial_message,
|
|
132
132
|
hideWatermark:!!(cfg&&cfg.theme&&cfg.theme.hide_watermark),
|
|
133
133
|
context:decodeContext(p.get("context")),
|
|
134
|
+
authToken:p.get("auth-token")||undefined,
|
|
134
135
|
theme:Object.keys(mergedTheme).length?mergedTheme:undefined,
|
|
135
136
|
onClose:function(){
|
|
136
137
|
if(redirectUrl){window.location.href=redirectUrl;return}
|
package/dist/iframe.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(function(){const
|
|
1
|
+
"use strict";(function(){const W=()=>{if(typeof document=="undefined")return null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},F=e=>{if(e==="production"||e==="development"||e==="staging")return e};function R(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background&&{background:e.background},...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.title_img&&{titleImg:e.title_img}}}function E(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}async function B(e,t){const r=`${e.replace(/\/$/,"")}/med-assist/agent-config/${t}`,n=new AbortController,i=setTimeout(()=>n.abort(),1e4);try{const s=await fetch(r,{signal:n.signal,headers:{"ngrok-skip-browser-warning":"69420"}});if(!s.ok)return;const c=await s.json();return c!=null&&c.success&&(c!=null&&c.data)?c.data:void 0}catch{return}finally{clearTimeout(i)}}const _="https://unpkg.com/@eka-care/medassist-widget@latest/dist/",a=W(),C=(()=>{if(!a)return"";try{return new URL(".",a.src||window.location.href).href}catch{return""}})(),m=(()=>{if(!a)return _;const e=a.dataset.widgetAssets;if(e==="local")return`${C}src/`;if(e&&e.length>0)try{return new URL(e,C).href}catch{return e.endsWith("/")?e:`${e}/`}return _})(),l=`${m}medassist-widget.js`,g=`${m}medassist-widget.css`;let f=null,w=null;const d=new URLSearchParams(typeof window!="undefined"?window.location.search:""),S=d.get("agentId"),p=d.get("baseUrl")||"https://matrix.eka.care/reloaded";if(typeof document!="undefined"&&document.head){try{const e=new URL(m).origin,t=new URL(p).origin,r=document.createElement("link");if(r.rel="preconnect",r.href=e,r.crossOrigin="anonymous",document.head.appendChild(r),e!==t){const s=document.createElement("link");s.rel="preconnect",s.href=t,s.crossOrigin="anonymous",document.head.appendChild(s)}const n=document.createElement("link");n.rel="preload",n.as="script",n.href=l,document.head.appendChild(n);const i=document.createElement("link");i.rel="preload",i.as="style",i.href=g,document.head.appendChild(i)}catch{}I(),U()}const b=S&&p?B(p,S):Promise.resolve(void 0);if(typeof document!="undefined"&&document.head){const e=d.get("theme");if(e)try{const t=JSON.parse(e);t.backgroundImage&&E(t.backgroundImage)}catch{}b.then(t=>{var r;const n=(r=t==null?void 0:t.theme)===null||r===void 0?void 0:r.background_img;n&&E(n)})}const A=async()=>{var e,t,r,n,i,s,c;const L=d.get("agentId");if(!L){console.error("Agent ID is required in URL parameters");return}let h=d.get("title")||"Medi Clinic",v=d.get("iconUrl")||void 0;const T=d.get("context"),D=d.get("baseUrl")||"https://matrix.eka.care/reloaded",M=d.get("auth-token")||void 0,z=d.get("resize")==="true"?!0:void 0,G=(e=F(d.get("environment")))!==null&&e!==void 0?e:"production",y=d.get("connectivity"),J=y==="sse"||y==="socket"?y:void 0,k=d.get("theme")?(()=>{try{return JSON.parse(d.get("theme")||"{}")}catch{return}})():void 0,N=document.getElementById("root")||document.body;try{const[,,o]=await Promise.all([I(),U(),b]);if(!(window!=null&&window.renderMedAssist)||typeof(window==null?void 0:window.renderMedAssist)!="function")throw new Error("renderMedAssist is not available on window");let u,P,O,x,$=!1;o&&(h=(t=o==null?void 0:o.name)!==null&&t!==void 0?t:h,v=(n=(r=o==null?void 0:o.theme)===null||r===void 0?void 0:r.icon_img)!==null&&n!==void 0?n:v,u=R((i=o==null?void 0:o.theme)!==null&&i!==void 0?i:void 0),P=o==null?void 0:o.allowed,O=o==null?void 0:o.connectivity,x=o==null?void 0:o.initial_message,$=(c=(s=o==null?void 0:o.theme)===null||s===void 0?void 0:s.hide_watermark)!==null&&c!==void 0?c:!1);const q={title:h,iconUrl:v,environment:G,connectionType:O||J||"socket",onClose:()=>{window.parent!==window&&window.parent.postMessage({type:"WIDGET_CLOSE"},"*")},context:T?JSON.parse(T):void 0,baseUrl:D,displayMode:"full",allowed:P,showCloseButton:!1,resize:z,initialMessage:x,hideWatermark:$,...M&&{authToken:M},theme:{...u!=null?u:{},...k!=null?k:{}}};window.renderMedAssist(N,L,q)}catch(o){throw console.error("Failed to initialize MedAssist widget",o),o}};async function I(){document.querySelector("link[data-medassist-style='true']")||(w||(w=new Promise((t,r)=>{const n=document.createElement("link");n.rel="stylesheet",n.href=g,n.setAttribute("data-medassist-style","true"),n.onload=()=>{t("")},n.onerror=()=>{r(new Error(`Failed to load ${g}`))},document.head.appendChild(n)})),await w)}function U(){return f||(f=new Promise((e,t)=>{const r=document.querySelector(`script[src="${l}"]`);if(r){if(r.dataset.loaded==="true"){e();return}r.addEventListener("load",()=>e()),r.addEventListener("error",i=>t(i.error||new Error("Unknown script loading error")));return}const n=document.createElement("script");n.src=l,n.async=!0,n.dataset.widget="medassist",n.onload=()=>{n.dataset.loaded="true",e()},n.onerror=i=>{if(i instanceof ErrorEvent&&i.error){t(i.error);return}t(new Error(`Failed to load ${l}`))},document.head.appendChild(n)})),f}if(typeof document!="undefined")if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",A);else try{A()}catch(e){console.error("Failed to initialize MedAssist widget",e)}})();
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";const getCurrentScript=()=>{if(typeof document=="undefined")return console.error("document is not defined"),null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},getEnvironment=e=>{if(e==="production"||e==="development"||e==="staging")return e},scriptEl=getCurrentScript(),DEFAULT_WIDGET_ASSET_BASE=(()=>{var e;return!((e=scriptEl==null?void 0:scriptEl.src)===null||e===void 0)&&e.includes("@dev")?"https://unpkg.com/@eka-care/medassist-widget@dev/dist/":"https://unpkg.com/@eka-care/medassist-widget@latest/dist/"})();function mapAgentConfigThemeToWidgetTheme(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.mode&&{mode:e.mode},...e.header_tinted!==void 0&&{headerTinted:e.header_tinted},...e.title_img&&{titleImg:e.title_img},...e.tagline&&{tagline:e.tagline}}}function preloadImage(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}async function fetchAgentConfig(e,t){const o=`${e.replace(/\/$/,"")}/med-assist/agent-config/${t}`,i=await fetch(o,{headers:{"ngrok-skip-browser-warning":"69420"}});if(!i.ok)return;const n=await i.json();if(n!=null&&n.success&&(n!=null&&n.data))return n.data}const NUDGE_STORAGE_KEY="eka-medassist-nudges";function getNudgeStore(){try{const e=localStorage.getItem(NUDGE_STORAGE_KEY);return e?JSON.parse(e):{}}catch{return{}}}function setNudgeStore(e){try{localStorage.setItem(NUDGE_STORAGE_KEY,JSON.stringify(e))}catch{}}function normalizePath(e){let t=e.replace(/\/+$/,"");return t.startsWith("/")||(t="/"+t),t||"/"}function findCachedNudge(e,t){const i=getNudgeStore()[e];if(!i)return null;let n;try{n=new URL(t)}catch{return null}const s=n.host,r=i[s];if(!r)return null;const d=n.pathname.split("/").filter(Boolean),l=[];for(let u=d.length;u>=0;u--)l.push(u===0?"/":"/"+d.slice(0,u).join("/"));for(const u of l){if(r[u]!==void 0)return{domain:s,path:u,data:r[u]};const c=u==="/"?"/*":u+"/*";if(r[c]!==void 0)return{domain:s,path:c,data:r[c]}}return null}function clearNudgeForPath(e,t,o){const i=getNudgeStore(),n=i[e];!n||!n[t]||(delete n[t][o],setNudgeStore(i))}function storeNudgeResponse(e,t){var o,i,n,s;const r=(o=t==null?void 0:t.url_pattern)===null||o===void 0?void 0:o.domain,d=(i=t==null?void 0:t.url_pattern)===null||i===void 0?void 0:i.path;if(!(!((n=t.nudges)===null||n===void 0)&&n.length)||!t.expiry||!r||!d)return;const l=getNudgeStore();l[e]||(l[e]={}),l[e][r]||(l[e][r]={}),l[e][r][d]={nudges:t.nudges,expiry:t.expiry,delay:(s=t.delay)!==null&&s!==void 0?s:5},setNudgeStore(l)}const NUDGE_COOKIE_PREFIX="eka-nudge";function setNudgeCookie(e,t){const o=new Date(Date.now()+864e5).toUTCString();document.cookie=`${NUDGE_COOKIE_PREFIX}-${e}=${t}; expires=${o}; path=/; SameSite=Lax`}function getNudgeCookie(e){const t=document.cookie.split(";").map(i=>i.trim()).find(i=>i.startsWith(`${NUDGE_COOKIE_PREFIX}-${e}=`));if(!t)return null;const o=t.split("=")[1];return o==="open"||o==="closed"?o:null}async function fetchNudgeData(e,t){const o=`${t}/med-assist/user-nudge`,i=[];typeof document!="undefined"&&document.querySelectorAll("meta").forEach(n=>{var s,r,d;const l=(s=n.getAttribute("name"))!==null&&s!==void 0?s:void 0,u=(r=n.getAttribute("property"))!==null&&r!==void 0?r:void 0,c=(d=n.getAttribute("content"))!==null&&d!==void 0?d:void 0;(l||u)&&i.push({name:l,property:u,content:c})});try{const n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-agent-id":e,referer:typeof window!="undefined"?window.location.href:""},body:JSON.stringify({meta_tags:i,url:typeof window!="undefined"?window.location.href:""})});return n.ok?await n.json():void 0}catch{return}}const globalMedAssistConfig={},getWidgetElement=()=>typeof document=="undefined"?null:document.querySelector("eka-medassist-widget");if(typeof window!="undefined"){const e=window;e.__ekaMedAssistConfig__=globalMedAssistConfig,e.EkaMedAssist={init(t){var o,i,n;Object.assign(globalMedAssistConfig,t);const s=getWidgetElement();if(s){if(t.agentId&&s.setAttribute("agent-id",t.agentId),t.title&&s.setAttribute("title",t.title),t.iconUrl&&s.setAttribute("icon-url",t.iconUrl),t.baseUrl&&s.setAttribute("base-url",t.baseUrl),t.resize!==void 0&&s.setAttribute("resize",String(t.resize)),(t.displayMode==="full"||t.displayMode==="widget")&&s.setAttribute("display-mode",t.displayMode),t.context)try{s.setAttribute("context",JSON.stringify(t.context))}catch{console.warn("Failed to stringify context passed to init")}typeof t.customLauncherStyles=="string"&&s.setAttribute("custom-launcher-styles",t.customLauncherStyles),t.redirectUrl&&s.setAttribute("redirect-url",t.redirectUrl),!((o=t.theme)===null||o===void 0)&&o.backgroundImage&&preloadImage(t.theme.backgroundImage),(n=(i=s).openFromBridge)===null||n===void 0||n.call(i)}}}}const scriptBaseUrl=(()=>{if(!scriptEl)return"";try{return new URL(".",scriptEl.src||window.location.href).href}catch{return""}})(),widgetAssetBaseUrl=(()=>{if(!scriptEl)return DEFAULT_WIDGET_ASSET_BASE;const e=scriptEl.dataset.widgetAssets;if(e==="local")return`${scriptBaseUrl}src/`;if(e&&e.length>0)try{return new URL(e,scriptBaseUrl).href}catch{return e.endsWith("/")?e:`${e}/`}return DEFAULT_WIDGET_ASSET_BASE})(),WIDGET_JS_URL=`${widgetAssetBaseUrl}medassist-widget.js`,WIDGET_CSS_URL=`${widgetAssetBaseUrl}medassist-widget.css`;let widgetScriptPromise=null,widgetCssTextPromise=null;function getWidgetCssTextPromise(){return widgetCssTextPromise||(widgetCssTextPromise=fetch(WIDGET_CSS_URL).then(e=>{if(!e.ok)throw new Error(`Unable to fetch widget styles from ${WIDGET_CSS_URL}`);return e.text()})),widgetCssTextPromise}class MedAssistWidgetLoader extends HTMLElement{getAgentConfig(){if(!this.agentConfigPromise){const t=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},o=t.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",i=t.agentId||this.getAttribute("agent-id")||"";if(!i)return Promise.resolve(void 0);this.agentConfigPromise=fetchAgentConfig(o,i).catch(()=>{})}return this.agentConfigPromise}constructor(){super(),this.reactRoot=null,this.agentConfigPromise=null,this.attachShadow({mode:"open"}),this.defaultIconUrl="https://cdn.eka.care/bot-icon.svg",this.widgetLoaded=!1,this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.setupAuthExpirationListener()}static get observedAttributes(){return["icon-url","display-mode","custom-launcher-styles","redirect-url"]}connectedCallback(){this.displayMode==="full"?(this.initializeFullMode(),this.loadWidgetCss().then(()=>this.loadWidgetScript()).then(()=>this.loadAndRender()).catch(t=>{console.error("Failed to load MedAssist widget in full mode",t)})):(this.renderButton(),this.preloadWidgetAssets(),this.initNudge())}attributeChangedCallback(t){if(t==="icon-url"&&this.displayMode==="widget"&&this.renderButton(),t==="display-mode"){const o=this.getAttribute("display-mode")==="full"?"full":"widget";o!==this.displayMode&&(this.displayMode=o,o==="full"?this.initializeFullMode():this.renderButton())}t==="custom-launcher-styles"&&this.applyCustomLauncherStyles()}preloadWidgetAssets(){getWidgetCssTextPromise(),this.loadWidgetScript(),this.preloadBackgroundImage()}preloadBackgroundImage(){var t;const o=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,i=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,n=(t=o==null?void 0:o.theme)===null||t===void 0?void 0:t.backgroundImage,s=i==null?void 0:i.backgroundImage;n&&preloadImage(n),s&&s!==n&&preloadImage(s),this.getAgentConfig().then(r=>{var d;const l=(d=r==null?void 0:r.theme)===null||d===void 0?void 0:d.background_img;l&&preloadImage(l)}).catch(()=>{})}setupAuthExpirationListener(){if(typeof window=="undefined")return;const t=o=>{var i;((i=o.data)===null||i===void 0?void 0:i.type)==="AUTH_EXPIRED"&&window.parent!==window&&window.parent.postMessage({type:"AUTH_EXPIRED",message:"Authentication expired"},"*")};window.addEventListener("message",t)}openFromBridge(){this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.displayMode==="full"?this.initializeFullMode():this.renderButton(),this.loadWidgetCss().then(()=>this.loadWidgetScript()).then(()=>this.loadAndRender()).catch(t=>{console.error("Failed to open MedAssist widget from bridge",t)})}async initNudge(){var t,o,i,n;const s=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,r=(s==null?void 0:s.agentId)||this.getAttribute("agent-id")||"";if(!r)return;const d=await this.getAgentConfig();if(!(d!=null&&d.nudge))return;const l=(o=(t=d==null?void 0:d.theme)===null||t===void 0?void 0:t.nudge_color)!==null&&o!==void 0?o:"#ffffff",u=typeof window!="undefined"?window.location.href:"";let c=findCachedNudge(r,u);if(c){const f=Math.floor(Date.now()/1e3);c.data.expiry<=f&&(clearNudgeForPath(r,c.domain,c.path),c=null)}if(!c){const f=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,m=(f==null?void 0:f.baseUrl)||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",h=await fetchNudgeData(r,m).catch(()=>{});if(!(!((i=h==null?void 0:h.nudges)===null||i===void 0)&&i.length)||(storeNudgeResponse(r,h),c=findCachedNudge(r,u),!c))return}const w=c.data.nudges[Math.floor(Math.random()*c.data.nudges.length)],p=(n=c.data.delay)!==null&&n!==void 0?n:5;setTimeout(()=>{this.showNudgePopup(w,l)},p*1e3)}showNudgePopup(t,o){var i,n;const s=this.shadowRoot;if(!s||!(!((i=s.getElementById("medassist-widget-root"))===null||i===void 0)&&i.classList.contains("hidden")))return;const d=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";if(d&&getNudgeCookie(d)!==null||s.getElementById("medassist-nudge-popup"))return;const u=document.createElement("div");u.id="medassist-nudge-popup",u.innerHTML=`
|
|
1
|
+
"use strict";const getCurrentScript=()=>{if(typeof document=="undefined")return console.error("document is not defined"),null;const{currentScript:e}=document;if(e instanceof HTMLScriptElement)return e;const t=document.getElementsByTagName("script");return t.length?t[t.length-1]:null},getEnvironment=e=>{if(e==="production"||e==="development"||e==="staging")return e},scriptEl=getCurrentScript(),DEFAULT_WIDGET_ASSET_BASE=(()=>{var e;return!((e=scriptEl==null?void 0:scriptEl.src)===null||e===void 0)&&e.includes("@dev")?"https://unpkg.com/@eka-care/medassist-widget@dev/dist/":"https://unpkg.com/@eka-care/medassist-widget@latest/dist/"})();function mapAgentConfigThemeToWidgetTheme(e){if(!e)return;const t=e.mode==="dark"?"white":e.mode==="light"?"black":void 0;return{...e.background_img&&{backgroundImage:e.background_img},...e.accent&&{primary:e.accent},...t&&{textColor:t},...e.mode&&{mode:e.mode},...e.header_tinted!==void 0&&{headerTinted:e.header_tinted},...e.title_img&&{titleImg:e.title_img},...e.tagline&&{tagline:e.tagline}}}function preloadImage(e){if(!(!e||typeof document=="undefined"))try{const t=document.createElement("link");t.rel="preload",t.as="image",t.href=e,document.head.appendChild(t)}catch{const t=new Image;t.src=e}}async function fetchAgentConfig(e,t){const o=`${e.replace(/\/$/,"")}/med-assist/agent-config/${t}`,i=await fetch(o,{headers:{"ngrok-skip-browser-warning":"69420"}});if(!i.ok)return;const n=await i.json();if(n!=null&&n.success&&(n!=null&&n.data))return n.data}const NUDGE_STORAGE_KEY="eka-medassist-nudges";function getNudgeStore(){try{const e=localStorage.getItem(NUDGE_STORAGE_KEY);return e?JSON.parse(e):{}}catch{return{}}}function setNudgeStore(e){try{localStorage.setItem(NUDGE_STORAGE_KEY,JSON.stringify(e))}catch{}}function normalizePath(e){let t=e.replace(/\/+$/,"");return t.startsWith("/")||(t="/"+t),t||"/"}function findCachedNudge(e,t){const i=getNudgeStore()[e];if(!i)return null;let n;try{n=new URL(t)}catch{return null}const s=n.host,r=i[s];if(!r)return null;const d=n.pathname.split("/").filter(Boolean),l=[];for(let u=d.length;u>=0;u--)l.push(u===0?"/":"/"+d.slice(0,u).join("/"));for(const u of l){if(r[u]!==void 0)return{domain:s,path:u,data:r[u]};const c=u==="/"?"/*":u+"/*";if(r[c]!==void 0)return{domain:s,path:c,data:r[c]}}return null}function clearNudgeForPath(e,t,o){const i=getNudgeStore(),n=i[e];!n||!n[t]||(delete n[t][o],setNudgeStore(i))}function storeNudgeResponse(e,t){var o,i,n,s;const r=(o=t==null?void 0:t.url_pattern)===null||o===void 0?void 0:o.domain,d=(i=t==null?void 0:t.url_pattern)===null||i===void 0?void 0:i.path;if(!(!((n=t.nudges)===null||n===void 0)&&n.length)||!t.expiry||!r||!d)return;const l=getNudgeStore();l[e]||(l[e]={}),l[e][r]||(l[e][r]={}),l[e][r][d]={nudges:t.nudges,expiry:t.expiry,delay:(s=t.delay)!==null&&s!==void 0?s:5},setNudgeStore(l)}const NUDGE_COOKIE_PREFIX="eka-nudge";function setNudgeCookie(e,t){const o=new Date(Date.now()+864e5).toUTCString();document.cookie=`${NUDGE_COOKIE_PREFIX}-${e}=${t}; expires=${o}; path=/; SameSite=Lax`}function getNudgeCookie(e){const t=document.cookie.split(";").map(i=>i.trim()).find(i=>i.startsWith(`${NUDGE_COOKIE_PREFIX}-${e}=`));if(!t)return null;const o=t.split("=")[1];return o==="open"||o==="closed"?o:null}async function fetchNudgeData(e,t){const o=`${t}/med-assist/user-nudge`,i=[];typeof document!="undefined"&&document.querySelectorAll("meta").forEach(n=>{var s,r,d;const l=(s=n.getAttribute("name"))!==null&&s!==void 0?s:void 0,u=(r=n.getAttribute("property"))!==null&&r!==void 0?r:void 0,c=(d=n.getAttribute("content"))!==null&&d!==void 0?d:void 0;(l||u)&&i.push({name:l,property:u,content:c})});try{const n=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json","x-agent-id":e,referer:typeof window!="undefined"?window.location.href:""},body:JSON.stringify({meta_tags:i,url:typeof window!="undefined"?window.location.href:""})});return n.ok?await n.json():void 0}catch{return}}const globalMedAssistConfig={},getWidgetElement=()=>typeof document=="undefined"?null:document.querySelector("eka-medassist-widget");if(typeof window!="undefined"){const e=window;e.__ekaMedAssistConfig__=globalMedAssistConfig,e.EkaMedAssist={init(t){var o,i,n;Object.assign(globalMedAssistConfig,t);const s=getWidgetElement();if(s){if(t.agentId&&s.setAttribute("agent-id",t.agentId),t.authToken&&s.setAttribute("auth-token",t.authToken),t.title&&s.setAttribute("title",t.title),t.iconUrl&&s.setAttribute("icon-url",t.iconUrl),t.baseUrl&&s.setAttribute("base-url",t.baseUrl),t.resize!==void 0&&s.setAttribute("resize",String(t.resize)),(t.displayMode==="full"||t.displayMode==="widget")&&s.setAttribute("display-mode",t.displayMode),t.context)try{s.setAttribute("context",JSON.stringify(t.context))}catch{console.warn("Failed to stringify context passed to init")}typeof t.customLauncherStyles=="string"&&s.setAttribute("custom-launcher-styles",t.customLauncherStyles),t.redirectUrl&&s.setAttribute("redirect-url",t.redirectUrl),!((o=t.theme)===null||o===void 0)&&o.backgroundImage&&preloadImage(t.theme.backgroundImage),(n=(i=s).openFromBridge)===null||n===void 0||n.call(i)}}}}const scriptBaseUrl=(()=>{if(!scriptEl)return"";try{return new URL(".",scriptEl.src||window.location.href).href}catch{return""}})(),widgetAssetBaseUrl=(()=>{if(!scriptEl)return DEFAULT_WIDGET_ASSET_BASE;const e=scriptEl.dataset.widgetAssets;if(e==="local")return`${scriptBaseUrl}src/`;if(e&&e.length>0)try{return new URL(e,scriptBaseUrl).href}catch{return e.endsWith("/")?e:`${e}/`}return DEFAULT_WIDGET_ASSET_BASE})(),WIDGET_JS_URL=`${widgetAssetBaseUrl}medassist-widget.js`,WIDGET_CSS_URL=`${widgetAssetBaseUrl}medassist-widget.css`;let widgetScriptPromise=null,widgetCssTextPromise=null;function getWidgetCssTextPromise(){return widgetCssTextPromise||(widgetCssTextPromise=fetch(WIDGET_CSS_URL).then(e=>{if(!e.ok)throw new Error(`Unable to fetch widget styles from ${WIDGET_CSS_URL}`);return e.text()})),widgetCssTextPromise}class MedAssistWidgetLoader extends HTMLElement{getAgentConfig(){if(!this.agentConfigPromise){const t=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},o=t.baseUrl||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",i=t.agentId||this.getAttribute("agent-id")||"";if(!i)return Promise.resolve(void 0);this.agentConfigPromise=fetchAgentConfig(o,i).catch(()=>{})}return this.agentConfigPromise}constructor(){super(),this.reactRoot=null,this.agentConfigPromise=null,this.attachShadow({mode:"open"}),this.defaultIconUrl="https://cdn.eka.care/bot-icon.svg",this.widgetLoaded=!1,this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.setupAuthExpirationListener()}static get observedAttributes(){return["icon-url","display-mode","custom-launcher-styles","redirect-url"]}connectedCallback(){this.displayMode==="full"?(this.initializeFullMode(),this.loadWidgetCss().then(()=>this.loadWidgetScript()).then(()=>this.loadAndRender()).catch(t=>{console.error("Failed to load MedAssist widget in full mode",t)})):(this.renderButton(),this.preloadWidgetAssets(),this.initNudge())}attributeChangedCallback(t){if(t==="icon-url"&&this.displayMode==="widget"&&this.renderButton(),t==="display-mode"){const o=this.getAttribute("display-mode")==="full"?"full":"widget";o!==this.displayMode&&(this.displayMode=o,o==="full"?this.initializeFullMode():this.renderButton())}t==="custom-launcher-styles"&&this.applyCustomLauncherStyles()}preloadWidgetAssets(){getWidgetCssTextPromise(),this.loadWidgetScript(),this.preloadBackgroundImage()}preloadBackgroundImage(){var t;const o=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,i=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,n=(t=o==null?void 0:o.theme)===null||t===void 0?void 0:t.backgroundImage,s=i==null?void 0:i.backgroundImage;n&&preloadImage(n),s&&s!==n&&preloadImage(s),this.getAgentConfig().then(r=>{var d;const l=(d=r==null?void 0:r.theme)===null||d===void 0?void 0:d.background_img;l&&preloadImage(l)}).catch(()=>{})}setupAuthExpirationListener(){if(typeof window=="undefined")return;const t=o=>{var i;((i=o.data)===null||i===void 0?void 0:i.type)==="AUTH_EXPIRED"&&window.parent!==window&&window.parent.postMessage({type:"AUTH_EXPIRED",message:"Authentication expired"},"*")};window.addEventListener("message",t)}openFromBridge(){this.displayMode=this.getAttribute("display-mode")==="full"?"full":"widget",this.displayMode==="full"?this.initializeFullMode():this.renderButton(),this.loadWidgetCss().then(()=>this.loadWidgetScript()).then(()=>this.loadAndRender()).catch(t=>{console.error("Failed to open MedAssist widget from bridge",t)})}async initNudge(){var t,o,i,n;const s=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,r=(s==null?void 0:s.agentId)||this.getAttribute("agent-id")||"";if(!r)return;const d=await this.getAgentConfig();if(!(d!=null&&d.nudge))return;const l=(o=(t=d==null?void 0:d.theme)===null||t===void 0?void 0:t.nudge_color)!==null&&o!==void 0?o:"#ffffff",u=typeof window!="undefined"?window.location.href:"";let c=findCachedNudge(r,u);if(c){const f=Math.floor(Date.now()/1e3);c.data.expiry<=f&&(clearNudgeForPath(r,c.domain,c.path),c=null)}if(!c){const f=typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0,m=(f==null?void 0:f.baseUrl)||this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",h=await fetchNudgeData(r,m).catch(()=>{});if(!(!((i=h==null?void 0:h.nudges)===null||i===void 0)&&i.length)||(storeNudgeResponse(r,h),c=findCachedNudge(r,u),!c))return}const w=c.data.nudges[Math.floor(Math.random()*c.data.nudges.length)],p=(n=c.data.delay)!==null&&n!==void 0?n:5;setTimeout(()=>{this.showNudgePopup(w,l)},p*1e3)}showNudgePopup(t,o){var i,n;const s=this.shadowRoot;if(!s||!(!((i=s.getElementById("medassist-widget-root"))===null||i===void 0)&&i.classList.contains("hidden")))return;const d=((typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{}).agentId||this.getAttribute("agent-id")||"";if(d&&getNudgeCookie(d)!==null||s.getElementById("medassist-nudge-popup"))return;const u=document.createElement("div");u.id="medassist-nudge-popup",u.innerHTML=`
|
|
2
2
|
<style>
|
|
3
3
|
@keyframes nudge-slide-up {
|
|
4
4
|
from { opacity: 0; transform: translateY(12px) scale(0.97); }
|
|
@@ -138,4 +138,4 @@
|
|
|
138
138
|
}
|
|
139
139
|
</style>
|
|
140
140
|
<div id="medassist-widget-root"></div>
|
|
141
|
-
`)}async loadAndRender(){var t,o,i,n,s;const r=this.shadowRoot;if(!r){console.error("Shadow root is not available");return}this.style.display="";const d=r.getElementById("medassist-open-btn"),l=r.getElementById("medassist-widget-root"),u=this.getAttribute("agent-id");let c=this.getAttribute("icon-url")||this.defaultIconUrl;const w=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production",p=this.getAttribute("connectivity"),f=p==="sse"||p==="socket"?p:void 0;let m=this.getAttribute("title")||"Medi Clinic";const h=this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",
|
|
141
|
+
`)}async loadAndRender(){var t,o,i,n,s;const r=this.shadowRoot;if(!r){console.error("Shadow root is not available");return}this.style.display="";const d=r.getElementById("medassist-open-btn"),l=r.getElementById("medassist-widget-root"),u=this.getAttribute("agent-id");let c=this.getAttribute("icon-url")||this.defaultIconUrl;const w=(t=getEnvironment(this.getAttribute("environment")))!==null&&t!==void 0?t:"production",p=this.getAttribute("connectivity"),f=p==="sse"||p==="socket"?p:void 0;let m=this.getAttribute("title")||"Medi Clinic";const h=this.getAttribute("base-url")||"https://matrix.eka.care/reloaded",x=this.getAttribute("display-mode")==="full"?"full":"widget",U=this.getAttribute("context")?JSON.parse(this.getAttribute("context")||"{}"):void 0,L=this.getAttribute("theme")?(()=>{try{return JSON.parse(this.getAttribute("theme")||"{}")}catch{return}})():void 0,g=(typeof window!="undefined"?window.__ekaMedAssistConfig__:void 0)||{},R={...U||{},...g.context||{}},N=g.auth||void 0,B=g.authToken||this.getAttribute("auth-token")||void 0,b=g.agentId||u,T=g.baseUrl||h,y=typeof window!="undefined"?(o=window.EkaMedAssist)===null||o===void 0?void 0:o.onClose:void 0,P=this.getAttribute("redirect-url")||void 0,v=g.redirectUrl||P,W=!!v||g.showCloseButton===!0;if(!b){console.error("Agent ID is required");return}if(!l){console.error("Widget root element is missing");return}d&&d.classList.add("hidden"),l.classList.remove("hidden");let _,k,C,E=!1,S,M=!1;try{const a=await this.getAgentConfig();m=(a==null?void 0:a.name)||m,c=((i=a==null?void 0:a.theme)===null||i===void 0?void 0:i.icon_img)||c,_=mapAgentConfigThemeToWidgetTheme((a==null?void 0:a.theme)||void 0),k=a==null?void 0:a.allowed,C=a==null?void 0:a.connectivity,E=(a==null?void 0:a.resize)||(g==null?void 0:g.resize)||!1,S=a==null?void 0:a.initial_message,M=(s=(n=a==null?void 0:a.theme)===null||n===void 0?void 0:n.hide_watermark)!==null&&s!==void 0?s:!1}catch{}const $=C||f||"socket",I={title:g.title||m,iconUrl:c||g.iconUrl,showCloseButton:W,allowed:k,environment:w,connectionType:$,onClose:()=>{var a;if((a=this.reactRoot)===null||a===void 0||a.unmount(),this.reactRoot=null,y&&typeof y=="function"&&y(),v){window.location.href=v;return}x==="full"?this.style.display="none":(d&&d.classList.remove("hidden"),l.classList.add("hidden"))},baseUrl:T,context:R,displayMode:x,resize:E||this.getAttribute("resize")==="true",auth:N,authToken:B,initialMessage:S,hideWatermark:M,theme:{..._||{},...L||{},...g.theme||{}}},A=window;if(this.widgetLoaded){this.reactRoot=A.renderMedAssist(l,b,I);return}try{if(await Promise.all([this.loadWidgetCss(),this.loadWidgetScript()]),typeof A.renderMedAssist!="function")throw new Error("renderMedAssist is not available on window");this.reactRoot=A.renderMedAssist(l,b,I),this.widgetLoaded=!0}catch(a){console.error("Failed to load MedAssist widget",a),d&&d.classList.remove("hidden"),l.classList.add("hidden")}}async loadWidgetCss(){const t=this.shadowRoot;if(!t)throw new Error("Shadow root is not available");if(t.querySelector("[data-medassist-style='true']"))return;const o=await getWidgetCssTextPromise(),i=document.createElement("style");i.setAttribute("data-medassist-style","true"),i.textContent=o,t.appendChild(i)}loadWidgetScript(){return widgetScriptPromise||(widgetScriptPromise=new Promise((t,o)=>{const i=document.querySelector(`script[src="${WIDGET_JS_URL}"]`);if(i){if(i.dataset.loaded==="true"){t();return}i.addEventListener("load",()=>t()),i.addEventListener("error",s=>o(s.error||new Error("Unknown script loading error")));return}const n=document.createElement("script");n.src=WIDGET_JS_URL,n.async=!0,n.dataset.widget="medassist",n.onload=()=>{n.dataset.loaded="true",t()},n.onerror=s=>{if(s instanceof ErrorEvent&&s.error){o(s.error);return}o(new Error(`Failed to load ${WIDGET_JS_URL}`))},document.head.appendChild(n)})),widgetScriptPromise}}customElements.define("eka-medassist-widget",MedAssistWidgetLoader);
|