@1interface/shared-core 0.2.0-pipecat.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -233,6 +233,8 @@ export declare const defaultLightThemeStyles: ChatThemeStyles;
233
233
 
234
234
  export declare function detectOrgSwitch(activeOrgId: string, storage: SyncKeyValueStorage): OrgSwitchReason;
235
235
 
236
+ export declare const DEVICE_TOKEN_HEADER = "x-device-token";
237
+
236
238
  export declare const ensureFreshToken: () => Promise<TokenRefreshResult | null>;
237
239
 
238
240
  export declare class EventEmitter {
@@ -532,6 +534,8 @@ export declare const PROFILE_LIMITS: {
532
534
 
533
535
  export declare const readAccessToken: () => string | null;
534
536
 
537
+ export declare const readDeviceToken: () => string | null;
538
+
535
539
  export declare const readTokenExpiresAt: () => number | null;
536
540
 
537
541
  export declare interface RefreshApiResult {
@@ -598,6 +602,8 @@ export declare const setAccessTokenReader: (fn: () => string | null) => void;
598
602
 
599
603
  export declare const setCredentials: ActionCreatorWithNonInferrablePayload<"auth/setSession">;
600
604
 
605
+ export declare const setDeviceTokenReader: (fn: () => string | null) => void;
606
+
601
607
  export declare const setIsDev: (value: boolean) => void;
602
608
 
603
609
  export declare const setLastResponseTime: ActionCreatorWithOptionalPayload<number, "indicator/setLastResponseTime">;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@reduxjs/toolkit"),t=require("react"),r=e=>{const t=e.match(/^(\d{2})\/(\d{2})$/);if(!t)return!1;const r=Number(t[1]),s=Number(t[2]);if(r<1||r>12)return!1;const o=new Date,n=o.getFullYear()%100,a=o.getMonth()+1;return!(s<n||s===n&&r<a||r>12)},s=e=>{if(!e)return"";if(!r(e)){const t=e.match(/^(\d{2})\/(\d{2})$/);if(t){const e=Number(t[1]),r=Number(t[2]),s=new Date,o=s.getFullYear()%100,n=s.getMonth()+1;if(r<o||r===o&&e<n||e>12)return""}}return e},o={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"};let n=null,a=null;const i=[];function u(e){if(n=e,i.length>0){const t=i.splice(0,i.length);for(const r of t)e.emit(r)}}function c(e){a=e}function l(e,t){const r=a?function(e){try{return e()??{}}catch{return{}}}(a):{},{message:s,...o}=t,u={...r,...o,level:e,message:s,timestamp:(new Date).toISOString()};n?n.emit(u):(i.length>=200&&i.shift(),i.push(u))}const d={debug(e){l(o.DEBUG,e)},info(e){l(o.INFO,e)},warn(e){l(o.WARN,e)},error(e){l(o.ERROR,e)},flush:()=>n?.flush?.()},p={[o.DEBUG]:0,[o.INFO]:1,[o.WARN]:2,[o.ERROR]:3};function g(e={}){const t=p[e.minLevel??o.DEBUG];return{emit(e){p[e.level]<t||(e.level===o.ERROR?console.error:e.level===o.WARN?console.warn:e.level===o.DEBUG?console.debug:console.info)(e)}}}const E={[o.DEBUG]:5,[o.INFO]:9,[o.WARN]:13,[o.ERROR]:17};function m(e){if(null===e)return"null";const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Error)return JSON.stringify({name:e.name,message:e.message,stack:e.stack});try{return JSON.stringify(e)}catch{return String(e)}}function F(e){const t={};for(const[r,s]of Object.entries(e))void 0!==s&&(t[r]=m(s));return t}let f=!1,x=null,S=!0;function h(e){S=e}function T(e){f||(f=!0,c(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),u(function(e){const t=[g({minLevel:e.consoleMinLevel??(e.isDev?o.DEBUG:o.WARN)})];if(e.otlpEndpoint&&!e.isDev){const r="otel"===(e.logTransport??"otel")?function(e){let t=!1,r=null,s=null;const o=[];function n(){s||(s=async function(){const[t,s,n,a]=await Promise.all([import("@opentelemetry/api-logs"),import("@opentelemetry/sdk-logs"),import("@opentelemetry/exporter-logs-otlp-http"),import("@opentelemetry/resources")]),i=a.resourceFromAttributes(e.resourceAttrs),u=new n.OTLPLogExporter({url:e.endpoint}),c=new s.LoggerProvider({resource:i,processors:[new s.BatchLogRecordProcessor(u)]});t.logs.setGlobalLoggerProvider(c);const l=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:s,...o}=e;l.emit({severityNumber:E[t],severityText:t,body:JSON.stringify(e),attributes:F(o),timestamp:new Date(s)})},async flush(){await c.forceFlush()}},o.length>0){const e=o.splice(0,o.length);for(const t of e)r.emit(t)}}().catch(()=>{o.length=0,r=null,t=!0}))}return{emit(e){t||(r?r.emit(e):(n(),o.length>=200&&o.shift(),o.push(e)))},async flush(){(s||r)&&(n(),await s,r&&await r.flush())}}}({endpoint:e.otlpEndpoint,resourceAttrs:{"service.name":e.appName,"service.version":e.appVersion,"deployment.environment":e.environment}}):function(e){const t=e.maxBatchSize??50,r=e.scheduledDelayMs??5e3,s=e.maxQueueSize??2048,o=e.wrapBatch??(e=>e),n=[];let a=null;function i(){return null!==a&&(clearTimeout(a),a=null),0===n.length||0===(t=n.splice(0,n.length)).length?Promise.resolve():fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o(t)),keepalive:!0}).then(()=>{}).catch(()=>{});var t}return{emit(e){n.length>=s&&n.shift(),n.push(e),n.length>=t?i():null===a&&(a=setTimeout(()=>{a=null,i()},r))},async flush(){await i()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){S&&r.emit(e)},flush:r.flush.bind(r)})}return e.extraSinks?.length&&t.push(...e.extraSinks),1===t.length?t[0]:function(e){return{emit(t){for(const r of e)try{r.emit(t)}catch{}},async flush(){await Promise.all(e.map(e=>e.flush?Promise.resolve(e.flush()).catch(()=>{}):Promise.resolve()))}}}(t)}(e)),!1!==e.flushOnAppHide&&x?.())}const y=Object.freeze(Object.defineProperty({__proto__:null,initLogger:T,registerPlatformFlushAttacher:function(e){x=e},resetInitLoggerStateForTests:function(){f=!1,x=null,S=!0},setNetworkLoggingEnabled:h},Symbol.toStringTag,{value:"Module"}));let O,A="",_={},I=null,R=()=>null,C=()=>null,N=!1;const M=()=>I,D=()=>C(),B=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${A}/api${t}`},v="chat",k={CONVERSATIONS:()=>B("/conversations"),CONVERSATION_STREAM:e=>B(`/conversations/${e}`),CONVERSATION_START:e=>B(`/conversations/${e}/start`),WEBRTC_OFFER:e=>B(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>B(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return B("/transcribe")},get BRANDING(){return B("/branding")},get CONFIG(){return B("/config")},get PROFILE(){return B("/profile")},get AUTH_ME(){return B("/auth/me")},get ORGANIZATIONS_EXISTS(){return B("/organizations/exists")},get DEBUG(){return B("/debug")},get TOOL_SERVERS(){return B("/tool-servers")},TOOL_SERVER_AUTH_START:e=>B(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>B(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return B("/tool-servers/auth/exchange")},get LOG(){return B("/log")}},b={TOKEN_REFRESH_THRESHOLD_MS:6e5,TOKEN_CLOCK_SKEW_MS:3e4,TOKEN_DEFAULT_EXPIRY_MS:36e5,THINKING_STATE_TIMEOUT_MS:600,MESSAGE_WARNING_TIMEOUT_MS:1e4,TOAST_DURATION_MS:5e3,TOAST_ERROR_DURATION_MS:7e3,INPUT_DEBOUNCE_MS:300,SEARCH_DEBOUNCE_MS:500,CONFIG_TIMEOUT_MS:5e3},w={ACCESS_TOKEN:"accessToken",REFRESH_TOKEN:"refreshToken",TOKEN_EXPIRES_AT:"tokenExpiresAt",USER:"user",SELECTED_ORG_ID:"selectedOrgId",SELECTED_ORG_NAME:"selectedOrgName",APPEARANCE_MODE_KEY:"1interface_appearance_mode",LOCATION_ENABLED:"1interface_location_enabled",LOCATION_CACHE:"1interface_cached_location",DEBUG_MODE:"1interface_debug_mode",STT_AUTO_SEND:"1interface_stt_auto_send",STT_IMPLEMENTATION:"1interface_stt_implementation",SEND_DIAGNOSTICS:"1interface_send_diagnostics",ACTIVE_CONVERSATION_ID:"1interface_active_conversation_id"},P={ACCESS_TOKEN:"x-access-token",REFRESH_TOKEN:"x-refresh-token"};let L=!0;const U=3,G=500,H=e=>{const t=e?.status;return"FETCH_ERROR"===t||"TIMEOUT_ERROR"===t||("number"==typeof t?t>=500:(d.warn({message:"unknown error shape; treating as transient",api_name:"auth-refresh",error_message:e instanceof Error?e.message:String(e)}),!0))},K="bridge-toast";function $(e){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(K,{detail:e}))}const W=K,V=e=>!!e&&Date.now()>=e-b.TOKEN_CLOCK_SKEW_MS,j=e=>!e||Date.now()>=e-b.TOKEN_REFRESH_THRESHOLD_MS;function z(e){if(!e)return null;const t=e.split(".");if(3!==t.length)return null;try{const e=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),s=atob(r),o=JSON.parse(s);return o&&"object"==typeof o&&!Array.isArray(o)?o:null}catch{return null}}function X(e){const t=z(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}class Y{static instance;events={};constructor(){}static getInstance(){return Y.instance||(Y.instance=new Y),Y.instance}on(e,t,r){const s="function"==typeof t?t:r;return this.events[e]||(this.events[e]=[]),this.events[e].push(s),()=>{this.off(e,s)}}off(e,t){this.events[e]&&(this.events[e]=this.events[e].filter(e=>e!==t))}emit(e,t){this.events[e]&&this.events[e].forEach(r=>{try{r(t)}catch(t){d.error({message:`Error in event handler for "${e}"`,api_name:"event-emitter",event:e,error_message:t instanceof Error?t.message:String(t)})}})}clear(e){e?delete this.events[e]:this.events={}}}const J=Y.getInstance(),q={LIGHT:"light",DARK:"dark",SYSTEM:"system"},Z=[q.LIGHT,q.DARK,q.SYSTEM],Q={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},ee={bgColor:"linear-gradient(281.8deg, #061522 6.7%, #101F2F 59.64%, #3C3B4F 76.85%, #5D4C63 88.46%, #755770 99.24%)",inputBgColor:"#222D34",sidebarBg:"#0F1419",sidebarBorderColor:"#8F8F8F",widgetBg:"#222D34",settingsGroupBg:"#272626",inputBorderStyle:"solid",inputBorderColor:"#FFFFFF80",inputBorderWidth:"1px",inputBorderOpacity:50,widgetBorderStyle:"solid",widgetBorderColor:"#FFFFFF1A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#8F8F8F",primaryText:"#FFFFFF",secondaryText:"#AFAFAF",tertiaryText:"#8F8F8F",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#FFFFFFFF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#FFFFFF",sideMenuText:"#AFAFAF",sideMenuIcon:"#8F8F8F",sideMenuProfile:"#FFFFFF",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#222D34",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:Q.PILL,chatInputPlaceholder:"Type anything..."},te={bgColor:"linear-gradient(281.8deg, #EEF2FF 6.7%, #E2E8FD 59.64%, #E8DFF4 76.85%, #F4DBE6 88.46%, #FFE1D0 99.24%)",inputBgColor:"#F4F4F5",sidebarBg:"#FFFFFF",sidebarBorderColor:"#9B9B9B",widgetBg:"#FFFFFF",settingsGroupBg:"#1A1A1A10",inputBorderStyle:"solid",inputBorderColor:"#0000001A",inputBorderWidth:"1px",inputBorderOpacity:10,widgetBorderStyle:"solid",widgetBorderColor:"#0000001A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#9B9B9B",primaryText:"#1A1A1A",secondaryText:"#6B6B6B",tertiaryText:"#9B9B9B",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#000000FF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#1A1A1A",sideMenuText:"#6B6B6B",sideMenuIcon:"#9B9B9B",sideMenuProfile:"#1A1A1A",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#F4F4F5",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:Q.PILL,chatInputPlaceholder:"Type anything..."};function re(e){return e===q.LIGHT?te:ee}const se=ee;function oe(e,t){const r=e.replace("#","");let s;s=3===r.length?r.split("").map(e=>e+e).join(""):6===r.length?r:"000000";const o=Math.max(0,Math.min(100,t));return`#${s}${Math.round(o/100*255).toString(16).padStart(2,"0")}`.toUpperCase()}function ne(e,t){if(!e)return t.fontFamily;switch(e){case"Inter":return"'Inter', sans-serif";case"System":return"system-ui, -apple-system, sans-serif";default:return"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif"}}function ae(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function ie(e,t){if(!e)return t.borderRadius;switch(e){case"none":return 0;case"sm":return 8;case"md":return 12;case"pill":return 16;default:const r=parseInt(e,10);return isNaN(r)?t.borderRadius:r}}function ue(e){switch(e){case"pill":return Q.PILL;case"none":return Q.SHARP;default:return 0===parseInt(e??"",10)?Q.SHARP:Q.ROUNDED}}const ce=t.createContext(void 0),le=t.createContext(null);let de=null;const pe=()=>de,ge=t.createContext(null),Ee={isConnected:!0,isInternetReachable:!0},me=e.createSlice({name:"auth",initialState:{user:null,accessToken:null,refreshToken:null,tokenExpiresAt:null,selectedOrgId:null,isAuthenticated:!1,isLoading:!1},reducers:{setSession:(e,t)=>{const{user:r,accessToken:s,refreshToken:o,expiresIn:n}=t.payload;void 0!==r&&(e.user=r),void 0!==s&&(e.accessToken=s),void 0!==o&&(e.refreshToken=o),void 0!==n?e.tokenExpiresAt=null===n?null:1e3*n:s&&(e.tokenExpiresAt=Date.now()+b.TOKEN_DEFAULT_EXPIRY_MS),e.isAuthenticated=Boolean(e.accessToken),e.isLoading=!1},updateUser:(e,t)=>{e.user={...e.user||{},...t.payload}},clearSession:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},sessionExpired:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},setSelectedOrgId:(e,t)=>{e.selectedOrgId=t.payload??null}}}),{setSession:Fe,updateUser:fe,clearSession:xe,sessionExpired:Se,setSelectedOrgId:he}=me.actions,Te=Fe,ye=xe,Oe=e.createListenerMiddleware();Oe.startListening({matcher:e.isAnyOf(Fe,fe,xe,Se),effect:async(e,t)=>{const r=pe();if(!r)return;const{auth:s}=t.getState(),o=[];o.push(s.accessToken?r.setItem(w.ACCESS_TOKEN,s.accessToken):r.removeItem(w.ACCESS_TOKEN)),o.push(s.refreshToken?r.setItem(w.REFRESH_TOKEN,s.refreshToken):r.removeItem(w.REFRESH_TOKEN)),o.push(null!=s.tokenExpiresAt?r.setItem(w.TOKEN_EXPIRES_AT,String(s.tokenExpiresAt)):r.removeItem(w.TOKEN_EXPIRES_AT)),o.push(s.user?r.setItem(w.USER,JSON.stringify(s.user)):r.removeItem(w.USER)),(xe.match(e)||Se.match(e))&&o.push(r.removeItem(w.LOCATION_CACHE),r.removeItem(w.DEBUG_MODE),r.removeItem(w.APPEARANCE_MODE_KEY),r.removeItem(w.LOCATION_ENABLED),r.removeItem(w.STT_AUTO_SEND),r.removeItem(w.STT_IMPLEMENTATION),r.removeItem(w.SEND_DIAGNOSTICS),r.removeItem(w.ACTIVE_CONVERSATION_ID)),await Promise.all(o)}});const Ae=me.reducer,_e={lastResponseTime:null},Ie=e.createSlice({name:"indicator",initialState:_e,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:t=>{t.addMatcher(e.isAnyOf(xe,Se),()=>_e)}}),{setLastResponseTime:Re,clearLastResponseTime:Ce}=Ie.actions,Ne=Ie.reducer;exports.API_ENDPOINTS=k,exports.APPEARANCE_MODES=q,exports.APPEARANCE_MODE_VALUES=Z,exports.AUTH_HEADERS=P,exports.AUTH_PATHS={LOGIN:"/auth/login",SIGNUP:"/auth/signup",LOGOUT:"/auth/logout",REFRESH:"/auth/refresh",FORGOT_PASSWORD:"/auth/forgot-password",RESET_PASSWORD:"/auth/reset-password",SSO_START:"/auth/sso/start",SSO_EXCHANGE:"/auth/sso/exchange",ORGANIZATIONS:"/organizations"},exports.BRIDGE_TOAST_EVENT_NAME=W,exports.BrandingContext=ce,exports.CORNER_RADIUS_MODES=Q,exports.EventEmitter=Y,exports.FEATURE_FLAGS={SSO:"sso"},exports.IDP_HINTS={GOOGLE:"google",APPLE:"apple",MICROSOFT:"microsoft"},exports.INDICATOR_TIMER_ACTIONS={KEEP:"keep",FINALIZE:"finalize",CANCEL:"cancel"},exports.LOG_LEVELS=o,exports.NetworkContext=ge,exports.ORB_POSITIONS={FOREGROUND:"foreground",BACKGROUND:"background"},exports.ORG_MOUNT_SUFFIX=v,exports.PATTERNS={EMAIL:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,NON_DIGIT:/\D/g,PHONE_E164:/^\+[1-9]\d{1,14}$/},exports.PROFILE_LIMITS={NAME_MAX_LENGTH:64,PHONE_MIN_LENGTH:8,PHONE_MAX_LENGTH:16},exports.STORAGE_KEYS=w,exports.STT_IMPLEMENTATIONS={ONLINE:"online",DEVICE:"device"},exports.StorageContext=le,exports.TIMING=b,exports.brandingToThemeStyles=function(e,t,r=q.DARK){const s=re(r);if(!e||!t)return s;const o=t.surface?.chatInput?.border||t.surface?.input?.border,n=t.surface?.userMessage?.border,a=t.surface?.widget?.border;return{bgColor:t.surface?.chat?.background||s.bgColor,inputBgColor:t.surface?.chatInput?.background||t.surface?.input?.background||s.inputBgColor,sidebarBg:t.surface?.sideMenu?.background||s.sidebarBg,sidebarBorderColor:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sidebarBorderColor,widgetBg:t.surface?.widget?.background||s.widgetBg,settingsGroupBg:t.surface?.settings?.groupBackground||s.settingsGroupBg,inputBorderStyle:o?.style||s.inputBorderStyle,inputBorderColor:o?.color?oe(o.color,o.opacity||100):s.inputBorderColor,inputBorderWidth:o?.width||s.inputBorderWidth,inputBorderOpacity:o?.opacity||100,widgetBorderStyle:a?.style||s.widgetBorderStyle,widgetBorderColor:a?.color?oe(a.color,a.opacity||100):s.widgetBorderColor,widgetBorderWidth:a?.width||s.widgetBorderWidth,widgetBorderOpacity:a?.opacity??s.widgetBorderOpacity,placeholderColor:t.surface?.chatInput?.placeholderColor||t.surface?.input?.placeholderColor||s.placeholderColor,primaryText:t.text?.primary||s.primaryText,secondaryText:t.text?.secondary||s.secondaryText,tertiaryText:t.text?.tertiary||s.tertiaryText,userMsgBg:t.surface?.userMessage?.background||s.userMsgBg,userMsgText:t.surface?.userMessage?.textColor||s.userMsgText,userMsgBorderStyle:n?.style||s.userMsgBorderStyle,userMsgBorderColor:n?.color?oe(n.color,n.opacity||100):s.userMsgBorderColor,userMsgBorderWidth:n?.width||s.userMsgBorderWidth,userMsgBorderOpacity:n?.opacity||0,sideMenuHeadings:t.surface?.sideMenu?.headingsColor||t.surface?.sideMenu?.headings||s.sideMenuHeadings,sideMenuText:t.surface?.sideMenu?.textContentColor||t.surface?.sideMenu?.textContent||s.sideMenuText,sideMenuIcon:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sideMenuIcon,sideMenuProfile:t.surface?.sideMenu?.profileTextColor||t.surface?.sideMenu?.textProfile||s.sideMenuProfile,statusPrimary:{solid:t.status?.primary?.solid||s.statusPrimary.solid,background:t.status?.primary?.background||s.statusPrimary.background,text:t.status?.primary?.text||s.statusPrimary.text},statusSecondary:{solid:t.status?.secondary?.solid||s.statusSecondary.solid,background:t.status?.secondary?.background||s.statusSecondary.background,text:t.status?.secondary?.text||s.statusSecondary.text},statusSuccess:{solid:t.status?.success?.solid||s.statusSuccess.solid,background:t.status?.success?.background||s.statusSuccess.background,text:t.status?.success?.text||s.statusSuccess.text},statusDanger:{solid:t.status?.danger?.solid||s.statusDanger.solid,background:t.status?.danger?.background||s.statusDanger.background,text:t.status?.danger?.text||s.statusDanger.text},statusWarning:{solid:t.status?.warning?.solid||s.statusWarning.solid,background:t.status?.warning?.background||s.statusWarning.background,text:t.status?.warning?.text||s.statusWarning.text},statusInfo:{solid:t.status?.info?.solid||s.statusInfo.solid,background:t.status?.info?.background||s.statusInfo.background,text:t.status?.info?.text||s.statusInfo.text},statusDiscovery:{solid:t.status?.discovery?.solid||s.statusDiscovery.solid,background:t.status?.discovery?.background||s.statusDiscovery.background,text:t.status?.discovery?.text||s.statusDiscovery.text},switchCheckedColor:t.status?.primary?.solid||s.switchCheckedColor,switchUncheckedColor:t.surface?.chatInput?.background||s.switchUncheckedColor,fontFamily:ne(e.typography?.fontFamily,s),fontFamilyMono:ae(e.typography?.fontFamilyMono,s),fontSize:14,borderRadius:ie(e.cornerRadius,s),cornerRadiusMode:ue(e.cornerRadius),chatInputPlaceholder:e.startScreen.inputPlaceholder}},exports.capitalizeFirst=e=>e?e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",exports.clearAuthTokens=function(e){try{e.removeItem(w.ACCESS_TOKEN),e.removeItem(w.REFRESH_TOKEN),e.removeItem(w.TOKEN_EXPIRES_AT),e.removeItem(w.USER)}catch{}},exports.clearLastResponseTime=Ce,exports.clearSession=xe,exports.createTokenRefresher=function(e){const{performRefresh:t,isTransient:r=H,maxAttempts:s=U,backoffBaseMs:o=G}=e;let n=null;return function(){return n||(n=(async()=>{for(let e=0;e<s;e++)try{return await t()}catch(t){if(!r(t))return null;if(e===s-1)break;const n=o*2**e+250*Math.random();await new Promise(e=>setTimeout(e,n))}return null})().finally(()=>{n=null}),n)}},exports.defaultChatThemeStyles=se,exports.defaultDarkThemeStyles=ee,exports.defaultIsTransient=H,exports.defaultLightThemeStyles=te,exports.detectOrgSwitch=function(e,t){try{const r=t.getItem(w.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const s=X(t.getItem(w.ACCESS_TOKEN));return s&&s!==e?"jwt":null}catch{return null}},exports.ensureFreshToken=async()=>j(D())?await(M()?.())??null:null,exports.eventEmitter=J,exports.extractTokens=function(e){const t=e.headers.get(P.ACCESS_TOKEN),r=e.headers.get(P.REFRESH_TOKEN);if(!t)throw new Error(`Missing ${P.ACCESS_TOKEN} header in response`);if(!r)throw new Error(`Missing ${P.REFRESH_TOKEN} header in response`);return{accessToken:t,refreshToken:r}},exports.formatCVC=e=>e.replace(/\D/g,"").slice(0,4),exports.formatCamelCaseToTitle=e=>e?e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^(.)/,e=>e.toUpperCase()).split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim():"",exports.formatCardNumber=e=>e.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),exports.formatExpiryDate=e=>{const t=e.replace(/\D/g,"").slice(0,4);if(4===t.length){const e=t.slice(0,2)+"/"+t.slice(2);return s(e)}return t.length>=3?`${t.slice(0,2)}/${t.slice(2)}`:t.length>=1?t:""},exports.formatTimeRemaining=e=>{const t=Math.floor(e/6e4),r=Math.floor(e%6e4/1e3);return t>0?`${t}m ${r}s`:`${r}s`},exports.formatTimestamp=(e,t=new Date)=>{if(!e)return"";const r=new Date(e);if(isNaN(r.getTime()))return"";const s=t.getTime()-r.getTime(),o=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return o<1?"Just now":o<60?`${o}m ago`:n<24?`${n}h ago`:a<7?`${a}d ago`:new Intl.DateTimeFormat("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)},exports.generateUniqueId=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),exports.getApiUrl=B,exports.getAppearanceModeStorageKey=e=>e?`${w.APPEARANCE_MODE_KEY}:${e}`:w.APPEARANCE_MODE_KEY,exports.getArrayOfObjects=function(e){return Array.isArray(e)&&Array.isArray(e[0])?e.flat():e},exports.getBaseUrl=()=>A,exports.getCustomHeaders=()=>_,exports.getDefaultThemeStyles=re,exports.getErrorMessage=function(e,t="An unexpected error occurred."){if(e&&"object"==typeof e){if("message"in e&&"string"==typeof e.message)return e.message;if("data"in e){const t=e.data;if(t&&"object"==typeof t&&"message"in t&&"string"==typeof t.message)return t.message}}return t},exports.getInitials=(e,t)=>{if(e&&e.trim()){const t=e.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():e.trim().slice(0,2).toUpperCase()}return t&&t.trim()?t.trim().slice(0,2).toUpperCase():"U"},exports.getPaymentId=function(e){if(e)return"moyasar"===e.provider?e.config?.given_id:e.payment_id},exports.getPaymentProviderHint=()=>O,exports.getSendDiagnostics=()=>L,exports.getStorageRef=pe,exports.getTimeUntilExpiry=e=>e?Math.max(0,e-Date.now()):0,exports.getTimeUntilRefresh=e=>e?Math.max(0,e-b.TOKEN_REFRESH_THRESHOLD_MS-Date.now()):0,exports.getTokenRefreshHandler=M,exports.handleSharedEvent=function(e,t){switch(e.kind){case"status_update":return t.setStatusText(e.statusText),t.setIsAgentWorking(!0),void t.onStatusActive?.(e.statusText);case"widget":return void t.pushWidget(e.widget,e.messageId);case"payment":return void t.onPayment(e.payment);case"sign_in":return void t.onSignIn?.(e.signIn);case"error":return void t.onError(e.error);case"text":return void t.appendStreamText(e.text,e.messageId);case"conversation_title":return void t.onConversationTitle?.(e.title);default:return}},exports.hasWidgets=e=>Array.isArray(e.widget)&&e.widget.length>0,exports.hexToRgba=function(e,t){let r=e.trim().replace(/^#/,"");if(3!==r.length&&4!==r.length||(r=r.split("").map(e=>e+e).join("")),!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(r))return e;const s=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),n=parseInt(r.slice(4,6),16),a=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${s}, ${o}, ${n}, ${Math.round(a*t*1e3)/1e3})`},exports.hydrateAppBoot=async e=>{const t=await e.getItem(w.SEND_DIAGNOSTICS);L=null===t||"true"===t},exports.hydrateSession=e=>async t=>{const[r,s,o,n]=await Promise.all([e.getItem(w.ACCESS_TOKEN),e.getItem(w.REFRESH_TOKEN),e.getItem(w.TOKEN_EXPIRES_AT),e.getItem(w.USER)]),a=o?parseInt(o,10):null;if((!r||!a||V(a))&&!s)return void(r&&await Promise.all([e.removeItem(w.ACCESS_TOKEN),e.removeItem(w.REFRESH_TOKEN),e.removeItem(w.TOKEN_EXPIRES_AT),e.removeItem(w.USER)]));let i=null;if(n)try{i=JSON.parse(n)}catch(e){d.error({message:"Failed to parse stored user during session hydration",component:"sessionSlice",error_message:e instanceof Error?e.message:String(e)})}t(Fe({user:i,accessToken:r,refreshToken:s,expiresIn:null!=a?a/1e3:null}))},exports.indicatorReducer=Ne,exports.initLogger=T,exports.initializeChatConfig=e=>{A=e.baseUrl,_=e.customHeaders||{},O=e.paymentProvider},exports.isDevMode=()=>N,exports.isTokenAboutToExpire=j,exports.isTokenExpired=V,exports.joinOrgMountBase=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${v}`:`${e}/${v}`,exports.logger=d,exports.logout=ye,exports.parseJwtPayload=z,exports.parseOrgFromJwt=X,exports.readAccessToken=()=>R(),exports.readTokenExpiresAt=D,exports.registerEventListener=function(e,t){return J.on(e,t)},exports.registerLoggerContextProvider=c,exports.registerLoggerSink=u,exports.removeSpecialCharsAndSpaces=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",exports.resetLoggerForTests=async function(){n=null,a=null,i.length=0,(await Promise.resolve().then(()=>y)).resetInitLoggerStateForTests()},exports.sanitizeExpiryDate=s,exports.sessionExpired=Se,exports.sessionListenerMiddleware=Oe,exports.sessionReducer=Ae,exports.setAccessTokenReader=e=>{R=e},exports.setCredentials=Te,exports.setIsDev=e=>{N=e},exports.setLastResponseTime=Re,exports.setModuleStorage=function(e){de=e},exports.setNetworkLoggingEnabled=h,exports.setSelectedOrgId=he,exports.setSession=Fe,exports.setTokenExpiresAtReader=e=>{C=e},exports.setTokenRefreshHandler=e=>{I=e},exports.showErrorToast=(e="Please try again")=>$({title:"Error",description:e,variant:"destructive"}),exports.showSuccessToast=(e="Successfully")=>$({title:"Success",description:e,variant:"default"}),exports.showToast=e=>$(e),exports.truncateWordLimit=(e,t)=>{if(!e)return"";const r=e.split(" ");return r.length>t?r.slice(0,t).join(" "):e},exports.updateUser=fe,exports.useBranding=function(){const e=t.useContext(ce);if(!e)throw new Error("useBranding must be used within a BrandingProvider");return e},exports.useNetworkState=()=>{const e=t.useContext(ge),r=t.useCallback(t=>e?e.subscribe(t):()=>{},[e]),s=t.useCallback(()=>e?e.getState():Ee,[e]);return t.useSyncExternalStore(r,s,s)},exports.useStorage=()=>{const e=t.useContext(le);if(!e)throw new Error("useStorage must be called inside a <StorageProvider>. Wrap your app's root with <StorageProvider value={browserLocalStorageAdapter}> (or an RN equivalent).");return e},exports.validateExpiryDate=r,exports.writeOrgToStorage=function(e,t){try{t.setItem(w.SELECTED_ORG_ID,e),t.setItem(w.SELECTED_ORG_NAME,e)}catch{}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("@reduxjs/toolkit"),t=require("react"),r=e=>{const t=e.match(/^(\d{2})\/(\d{2})$/);if(!t)return!1;const r=Number(t[1]),s=Number(t[2]);if(r<1||r>12)return!1;const o=new Date,n=o.getFullYear()%100,a=o.getMonth()+1;return!(s<n||s===n&&r<a||r>12)},s=e=>{if(!e)return"";if(!r(e)){const t=e.match(/^(\d{2})\/(\d{2})$/);if(t){const e=Number(t[1]),r=Number(t[2]),s=new Date,o=s.getFullYear()%100,n=s.getMonth()+1;if(r<o||r===o&&e<n||e>12)return""}}return e},o={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"};let n=null,a=null;const i=[];function u(e){if(n=e,i.length>0){const t=i.splice(0,i.length);for(const r of t)e.emit(r)}}function c(e){a=e}function l(e,t){const r=a?function(e){try{return e()??{}}catch{return{}}}(a):{},{message:s,...o}=t,u={...r,...o,level:e,message:s,timestamp:(new Date).toISOString()};n?n.emit(u):(i.length>=200&&i.shift(),i.push(u))}const d={debug(e){l(o.DEBUG,e)},info(e){l(o.INFO,e)},warn(e){l(o.WARN,e)},error(e){l(o.ERROR,e)},flush:()=>n?.flush?.()},p={[o.DEBUG]:0,[o.INFO]:1,[o.WARN]:2,[o.ERROR]:3};function g(e={}){const t=p[e.minLevel??o.DEBUG];return{emit(e){p[e.level]<t||(e.level===o.ERROR?console.error:e.level===o.WARN?console.warn:e.level===o.DEBUG?console.debug:console.info)(e)}}}const E={[o.DEBUG]:5,[o.INFO]:9,[o.WARN]:13,[o.ERROR]:17};function m(e){if(null===e)return"null";const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Error)return JSON.stringify({name:e.name,message:e.message,stack:e.stack});try{return JSON.stringify(e)}catch{return String(e)}}function F(e){const t={};for(const[r,s]of Object.entries(e))void 0!==s&&(t[r]=m(s));return t}let f=!1,x=null,S=!0;function h(e){S=e}function T(e){f||(f=!0,c(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),u(function(e){const t=[g({minLevel:e.consoleMinLevel??(e.isDev?o.DEBUG:o.WARN)})];if(e.otlpEndpoint&&!e.isDev){const r="otel"===(e.logTransport??"otel")?function(e){let t=!1,r=null,s=null;const o=[];function n(){s||(s=async function(){const[t,s,n,a]=await Promise.all([import("@opentelemetry/api-logs"),import("@opentelemetry/sdk-logs"),import("@opentelemetry/exporter-logs-otlp-http"),import("@opentelemetry/resources")]),i=a.resourceFromAttributes(e.resourceAttrs),u=new n.OTLPLogExporter({url:e.endpoint}),c=new s.LoggerProvider({resource:i,processors:[new s.BatchLogRecordProcessor(u)]});t.logs.setGlobalLoggerProvider(c);const l=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:s,...o}=e;l.emit({severityNumber:E[t],severityText:t,body:JSON.stringify(e),attributes:F(o),timestamp:new Date(s)})},async flush(){await c.forceFlush()}},o.length>0){const e=o.splice(0,o.length);for(const t of e)r.emit(t)}}().catch(()=>{o.length=0,r=null,t=!0}))}return{emit(e){t||(r?r.emit(e):(n(),o.length>=200&&o.shift(),o.push(e)))},async flush(){(s||r)&&(n(),await s,r&&await r.flush())}}}({endpoint:e.otlpEndpoint,resourceAttrs:{"service.name":e.appName,"service.version":e.appVersion,"deployment.environment":e.environment}}):function(e){const t=e.maxBatchSize??50,r=e.scheduledDelayMs??5e3,s=e.maxQueueSize??2048,o=e.wrapBatch??(e=>e),n=[];let a=null;function i(){return null!==a&&(clearTimeout(a),a=null),0===n.length||0===(t=n.splice(0,n.length)).length?Promise.resolve():fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o(t)),keepalive:!0}).then(()=>{}).catch(()=>{});var t}return{emit(e){n.length>=s&&n.shift(),n.push(e),n.length>=t?i():null===a&&(a=setTimeout(()=>{a=null,i()},r))},async flush(){await i()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){S&&r.emit(e)},flush:r.flush.bind(r)})}return e.extraSinks?.length&&t.push(...e.extraSinks),1===t.length?t[0]:function(e){return{emit(t){for(const r of e)try{r.emit(t)}catch{}},async flush(){await Promise.all(e.map(e=>e.flush?Promise.resolve(e.flush()).catch(()=>{}):Promise.resolve()))}}}(t)}(e)),!1!==e.flushOnAppHide&&x?.())}const y=Object.freeze(Object.defineProperty({__proto__:null,initLogger:T,registerPlatformFlushAttacher:function(e){x=e},resetInitLoggerStateForTests:function(){f=!1,x=null,S=!0},setNetworkLoggingEnabled:h},Symbol.toStringTag,{value:"Module"}));let O,A="",_={},I=null,R=()=>null,C=()=>null,N=()=>null,M=!1;const D=()=>I,v=()=>N(),B=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${A}/api${t}`},k="chat",b={CONVERSATIONS:()=>B("/conversations"),CONVERSATION_STREAM:e=>B(`/conversations/${e}`),CONVERSATION_START:e=>B(`/conversations/${e}/start`),WEBRTC_OFFER:e=>B(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>B(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return B("/transcribe")},get BRANDING(){return B("/branding")},get CONFIG(){return B("/config")},get PROFILE(){return B("/profile")},get AUTH_ME(){return B("/auth/me")},get ORGANIZATIONS_EXISTS(){return B("/organizations/exists")},get DEBUG(){return B("/debug")},get TOOL_SERVERS(){return B("/tool-servers")},TOOL_SERVER_AUTH_START:e=>B(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>B(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return B("/tool-servers/auth/exchange")},get LOG(){return B("/log")}},w={TOKEN_REFRESH_THRESHOLD_MS:6e5,TOKEN_CLOCK_SKEW_MS:3e4,TOKEN_DEFAULT_EXPIRY_MS:36e5,THINKING_STATE_TIMEOUT_MS:600,MESSAGE_WARNING_TIMEOUT_MS:1e4,TOAST_DURATION_MS:5e3,TOAST_ERROR_DURATION_MS:7e3,INPUT_DEBOUNCE_MS:300,SEARCH_DEBOUNCE_MS:500,CONFIG_TIMEOUT_MS:5e3},P={ACCESS_TOKEN:"accessToken",REFRESH_TOKEN:"refreshToken",TOKEN_EXPIRES_AT:"tokenExpiresAt",USER:"user",SELECTED_ORG_ID:"selectedOrgId",SELECTED_ORG_NAME:"selectedOrgName",APPEARANCE_MODE_KEY:"1interface_appearance_mode",LOCATION_ENABLED:"1interface_location_enabled",LOCATION_CACHE:"1interface_cached_location",DEBUG_MODE:"1interface_debug_mode",STT_AUTO_SEND:"1interface_stt_auto_send",STT_IMPLEMENTATION:"1interface_stt_implementation",SEND_DIAGNOSTICS:"1interface_send_diagnostics",ACTIVE_CONVERSATION_ID:"1interface_active_conversation_id"},L={ACCESS_TOKEN:"x-access-token",REFRESH_TOKEN:"x-refresh-token"};let U=!0;const G=3,H=500,K=e=>{const t=e?.status;return"FETCH_ERROR"===t||"TIMEOUT_ERROR"===t||("number"==typeof t?t>=500:(d.warn({message:"unknown error shape; treating as transient",api_name:"auth-refresh",error_message:e instanceof Error?e.message:String(e)}),!0))},$="bridge-toast";function W(e){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent($,{detail:e}))}const V=$,j=e=>!!e&&Date.now()>=e-w.TOKEN_CLOCK_SKEW_MS,z=e=>!e||Date.now()>=e-w.TOKEN_REFRESH_THRESHOLD_MS;function X(e){if(!e)return null;const t=e.split(".");if(3!==t.length)return null;try{const e=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),s=atob(r),o=JSON.parse(s);return o&&"object"==typeof o&&!Array.isArray(o)?o:null}catch{return null}}function Y(e){const t=X(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}class J{static instance;events={};constructor(){}static getInstance(){return J.instance||(J.instance=new J),J.instance}on(e,t,r){const s="function"==typeof t?t:r;return this.events[e]||(this.events[e]=[]),this.events[e].push(s),()=>{this.off(e,s)}}off(e,t){this.events[e]&&(this.events[e]=this.events[e].filter(e=>e!==t))}emit(e,t){this.events[e]&&this.events[e].forEach(r=>{try{r(t)}catch(t){d.error({message:`Error in event handler for "${e}"`,api_name:"event-emitter",event:e,error_message:t instanceof Error?t.message:String(t)})}})}clear(e){e?delete this.events[e]:this.events={}}}const q=J.getInstance(),Z={LIGHT:"light",DARK:"dark",SYSTEM:"system"},Q=[Z.LIGHT,Z.DARK,Z.SYSTEM],ee={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},te={bgColor:"linear-gradient(281.8deg, #061522 6.7%, #101F2F 59.64%, #3C3B4F 76.85%, #5D4C63 88.46%, #755770 99.24%)",inputBgColor:"#222D34",sidebarBg:"#0F1419",sidebarBorderColor:"#8F8F8F",widgetBg:"#222D34",settingsGroupBg:"#272626",inputBorderStyle:"solid",inputBorderColor:"#FFFFFF80",inputBorderWidth:"1px",inputBorderOpacity:50,widgetBorderStyle:"solid",widgetBorderColor:"#FFFFFF1A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#8F8F8F",primaryText:"#FFFFFF",secondaryText:"#AFAFAF",tertiaryText:"#8F8F8F",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#FFFFFFFF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#FFFFFF",sideMenuText:"#AFAFAF",sideMenuIcon:"#8F8F8F",sideMenuProfile:"#FFFFFF",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#222D34",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:ee.PILL,chatInputPlaceholder:"Type anything..."},re={bgColor:"linear-gradient(281.8deg, #EEF2FF 6.7%, #E2E8FD 59.64%, #E8DFF4 76.85%, #F4DBE6 88.46%, #FFE1D0 99.24%)",inputBgColor:"#F4F4F5",sidebarBg:"#FFFFFF",sidebarBorderColor:"#9B9B9B",widgetBg:"#FFFFFF",settingsGroupBg:"#1A1A1A10",inputBorderStyle:"solid",inputBorderColor:"#0000001A",inputBorderWidth:"1px",inputBorderOpacity:10,widgetBorderStyle:"solid",widgetBorderColor:"#0000001A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#9B9B9B",primaryText:"#1A1A1A",secondaryText:"#6B6B6B",tertiaryText:"#9B9B9B",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#000000FF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#1A1A1A",sideMenuText:"#6B6B6B",sideMenuIcon:"#9B9B9B",sideMenuProfile:"#1A1A1A",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#F4F4F5",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:ee.PILL,chatInputPlaceholder:"Type anything..."};function se(e){return e===Z.LIGHT?re:te}const oe=te;function ne(e,t){const r=e.replace("#","");let s;s=3===r.length?r.split("").map(e=>e+e).join(""):6===r.length?r:"000000";const o=Math.max(0,Math.min(100,t));return`#${s}${Math.round(o/100*255).toString(16).padStart(2,"0")}`.toUpperCase()}function ae(e,t){if(!e)return t.fontFamily;switch(e){case"Inter":return"'Inter', sans-serif";case"System":return"system-ui, -apple-system, sans-serif";default:return"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif"}}function ie(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function ue(e,t){if(!e)return t.borderRadius;switch(e){case"none":return 0;case"sm":return 8;case"md":return 12;case"pill":return 16;default:const r=parseInt(e,10);return isNaN(r)?t.borderRadius:r}}function ce(e){switch(e){case"pill":return ee.PILL;case"none":return ee.SHARP;default:return 0===parseInt(e??"",10)?ee.SHARP:ee.ROUNDED}}const le=t.createContext(void 0),de=t.createContext(null);let pe=null;const ge=()=>pe,Ee=t.createContext(null),me={isConnected:!0,isInternetReachable:!0},Fe=e.createSlice({name:"auth",initialState:{user:null,accessToken:null,refreshToken:null,tokenExpiresAt:null,selectedOrgId:null,isAuthenticated:!1,isLoading:!1},reducers:{setSession:(e,t)=>{const{user:r,accessToken:s,refreshToken:o,expiresIn:n}=t.payload;void 0!==r&&(e.user=r),void 0!==s&&(e.accessToken=s),void 0!==o&&(e.refreshToken=o),void 0!==n?e.tokenExpiresAt=null===n?null:1e3*n:s&&(e.tokenExpiresAt=Date.now()+w.TOKEN_DEFAULT_EXPIRY_MS),e.isAuthenticated=Boolean(e.accessToken),e.isLoading=!1},updateUser:(e,t)=>{e.user={...e.user||{},...t.payload}},clearSession:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},sessionExpired:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},setSelectedOrgId:(e,t)=>{e.selectedOrgId=t.payload??null}}}),{setSession:fe,updateUser:xe,clearSession:Se,sessionExpired:he,setSelectedOrgId:Te}=Fe.actions,ye=fe,Oe=Se,Ae=e.createListenerMiddleware();Ae.startListening({matcher:e.isAnyOf(fe,xe,Se,he),effect:async(e,t)=>{const r=ge();if(!r)return;const{auth:s}=t.getState(),o=[];o.push(s.accessToken?r.setItem(P.ACCESS_TOKEN,s.accessToken):r.removeItem(P.ACCESS_TOKEN)),o.push(s.refreshToken?r.setItem(P.REFRESH_TOKEN,s.refreshToken):r.removeItem(P.REFRESH_TOKEN)),o.push(null!=s.tokenExpiresAt?r.setItem(P.TOKEN_EXPIRES_AT,String(s.tokenExpiresAt)):r.removeItem(P.TOKEN_EXPIRES_AT)),o.push(s.user?r.setItem(P.USER,JSON.stringify(s.user)):r.removeItem(P.USER)),(Se.match(e)||he.match(e))&&o.push(r.removeItem(P.LOCATION_CACHE),r.removeItem(P.DEBUG_MODE),r.removeItem(P.APPEARANCE_MODE_KEY),r.removeItem(P.LOCATION_ENABLED),r.removeItem(P.STT_AUTO_SEND),r.removeItem(P.STT_IMPLEMENTATION),r.removeItem(P.SEND_DIAGNOSTICS),r.removeItem(P.ACTIVE_CONVERSATION_ID)),await Promise.all(o)}});const _e=Fe.reducer,Ie={lastResponseTime:null},Re=e.createSlice({name:"indicator",initialState:Ie,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:t=>{t.addMatcher(e.isAnyOf(Se,he),()=>Ie)}}),{setLastResponseTime:Ce,clearLastResponseTime:Ne}=Re.actions,Me=Re.reducer;exports.API_ENDPOINTS=b,exports.APPEARANCE_MODES=Z,exports.APPEARANCE_MODE_VALUES=Q,exports.AUTH_HEADERS=L,exports.AUTH_PATHS={LOGIN:"/auth/login",SIGNUP:"/auth/signup",LOGOUT:"/auth/logout",REFRESH:"/auth/refresh",FORGOT_PASSWORD:"/auth/forgot-password",RESET_PASSWORD:"/auth/reset-password",SSO_START:"/auth/sso/start",SSO_EXCHANGE:"/auth/sso/exchange",ORGANIZATIONS:"/organizations"},exports.BRIDGE_TOAST_EVENT_NAME=V,exports.BrandingContext=le,exports.CORNER_RADIUS_MODES=ee,exports.DEVICE_TOKEN_HEADER="x-device-token",exports.EventEmitter=J,exports.FEATURE_FLAGS={SSO:"sso"},exports.IDP_HINTS={GOOGLE:"google",APPLE:"apple",MICROSOFT:"microsoft"},exports.INDICATOR_TIMER_ACTIONS={KEEP:"keep",FINALIZE:"finalize",CANCEL:"cancel"},exports.LOG_LEVELS=o,exports.NetworkContext=Ee,exports.ORB_POSITIONS={FOREGROUND:"foreground",BACKGROUND:"background"},exports.ORG_MOUNT_SUFFIX=k,exports.PATTERNS={EMAIL:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,NON_DIGIT:/\D/g,PHONE_E164:/^\+[1-9]\d{1,14}$/},exports.PROFILE_LIMITS={NAME_MAX_LENGTH:64,PHONE_MIN_LENGTH:8,PHONE_MAX_LENGTH:16},exports.STORAGE_KEYS=P,exports.STT_IMPLEMENTATIONS={ONLINE:"online",DEVICE:"device"},exports.StorageContext=de,exports.TIMING=w,exports.brandingToThemeStyles=function(e,t,r=Z.DARK){const s=se(r);if(!e||!t)return s;const o=t.surface?.chatInput?.border||t.surface?.input?.border,n=t.surface?.userMessage?.border,a=t.surface?.widget?.border;return{bgColor:t.surface?.chat?.background||s.bgColor,inputBgColor:t.surface?.chatInput?.background||t.surface?.input?.background||s.inputBgColor,sidebarBg:t.surface?.sideMenu?.background||s.sidebarBg,sidebarBorderColor:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sidebarBorderColor,widgetBg:t.surface?.widget?.background||s.widgetBg,settingsGroupBg:t.surface?.settings?.groupBackground||s.settingsGroupBg,inputBorderStyle:o?.style||s.inputBorderStyle,inputBorderColor:o?.color?ne(o.color,o.opacity||100):s.inputBorderColor,inputBorderWidth:o?.width||s.inputBorderWidth,inputBorderOpacity:o?.opacity||100,widgetBorderStyle:a?.style||s.widgetBorderStyle,widgetBorderColor:a?.color?ne(a.color,a.opacity||100):s.widgetBorderColor,widgetBorderWidth:a?.width||s.widgetBorderWidth,widgetBorderOpacity:a?.opacity??s.widgetBorderOpacity,placeholderColor:t.surface?.chatInput?.placeholderColor||t.surface?.input?.placeholderColor||s.placeholderColor,primaryText:t.text?.primary||s.primaryText,secondaryText:t.text?.secondary||s.secondaryText,tertiaryText:t.text?.tertiary||s.tertiaryText,userMsgBg:t.surface?.userMessage?.background||s.userMsgBg,userMsgText:t.surface?.userMessage?.textColor||s.userMsgText,userMsgBorderStyle:n?.style||s.userMsgBorderStyle,userMsgBorderColor:n?.color?ne(n.color,n.opacity||100):s.userMsgBorderColor,userMsgBorderWidth:n?.width||s.userMsgBorderWidth,userMsgBorderOpacity:n?.opacity||0,sideMenuHeadings:t.surface?.sideMenu?.headingsColor||t.surface?.sideMenu?.headings||s.sideMenuHeadings,sideMenuText:t.surface?.sideMenu?.textContentColor||t.surface?.sideMenu?.textContent||s.sideMenuText,sideMenuIcon:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sideMenuIcon,sideMenuProfile:t.surface?.sideMenu?.profileTextColor||t.surface?.sideMenu?.textProfile||s.sideMenuProfile,statusPrimary:{solid:t.status?.primary?.solid||s.statusPrimary.solid,background:t.status?.primary?.background||s.statusPrimary.background,text:t.status?.primary?.text||s.statusPrimary.text},statusSecondary:{solid:t.status?.secondary?.solid||s.statusSecondary.solid,background:t.status?.secondary?.background||s.statusSecondary.background,text:t.status?.secondary?.text||s.statusSecondary.text},statusSuccess:{solid:t.status?.success?.solid||s.statusSuccess.solid,background:t.status?.success?.background||s.statusSuccess.background,text:t.status?.success?.text||s.statusSuccess.text},statusDanger:{solid:t.status?.danger?.solid||s.statusDanger.solid,background:t.status?.danger?.background||s.statusDanger.background,text:t.status?.danger?.text||s.statusDanger.text},statusWarning:{solid:t.status?.warning?.solid||s.statusWarning.solid,background:t.status?.warning?.background||s.statusWarning.background,text:t.status?.warning?.text||s.statusWarning.text},statusInfo:{solid:t.status?.info?.solid||s.statusInfo.solid,background:t.status?.info?.background||s.statusInfo.background,text:t.status?.info?.text||s.statusInfo.text},statusDiscovery:{solid:t.status?.discovery?.solid||s.statusDiscovery.solid,background:t.status?.discovery?.background||s.statusDiscovery.background,text:t.status?.discovery?.text||s.statusDiscovery.text},switchCheckedColor:t.status?.primary?.solid||s.switchCheckedColor,switchUncheckedColor:t.surface?.chatInput?.background||s.switchUncheckedColor,fontFamily:ae(e.typography?.fontFamily,s),fontFamilyMono:ie(e.typography?.fontFamilyMono,s),fontSize:14,borderRadius:ue(e.cornerRadius,s),cornerRadiusMode:ce(e.cornerRadius),chatInputPlaceholder:e.startScreen.inputPlaceholder}},exports.capitalizeFirst=e=>e?e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",exports.clearAuthTokens=function(e){try{e.removeItem(P.ACCESS_TOKEN),e.removeItem(P.REFRESH_TOKEN),e.removeItem(P.TOKEN_EXPIRES_AT),e.removeItem(P.USER)}catch{}},exports.clearLastResponseTime=Ne,exports.clearSession=Se,exports.createTokenRefresher=function(e){const{performRefresh:t,isTransient:r=K,maxAttempts:s=G,backoffBaseMs:o=H}=e;let n=null;return function(){return n||(n=(async()=>{for(let e=0;e<s;e++)try{return await t()}catch(t){if(!r(t))return null;if(e===s-1)break;const n=o*2**e+250*Math.random();await new Promise(e=>setTimeout(e,n))}return null})().finally(()=>{n=null}),n)}},exports.defaultChatThemeStyles=oe,exports.defaultDarkThemeStyles=te,exports.defaultIsTransient=K,exports.defaultLightThemeStyles=re,exports.detectOrgSwitch=function(e,t){try{const r=t.getItem(P.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const s=Y(t.getItem(P.ACCESS_TOKEN));return s&&s!==e?"jwt":null}catch{return null}},exports.ensureFreshToken=async()=>z(v())?await(D()?.())??null:null,exports.eventEmitter=q,exports.extractTokens=function(e){const t=e.headers.get(L.ACCESS_TOKEN),r=e.headers.get(L.REFRESH_TOKEN);if(!t)throw new Error(`Missing ${L.ACCESS_TOKEN} header in response`);if(!r)throw new Error(`Missing ${L.REFRESH_TOKEN} header in response`);return{accessToken:t,refreshToken:r}},exports.formatCVC=e=>e.replace(/\D/g,"").slice(0,4),exports.formatCamelCaseToTitle=e=>e?e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^(.)/,e=>e.toUpperCase()).split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim():"",exports.formatCardNumber=e=>e.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),exports.formatExpiryDate=e=>{const t=e.replace(/\D/g,"").slice(0,4);if(4===t.length){const e=t.slice(0,2)+"/"+t.slice(2);return s(e)}return t.length>=3?`${t.slice(0,2)}/${t.slice(2)}`:t.length>=1?t:""},exports.formatTimeRemaining=e=>{const t=Math.floor(e/6e4),r=Math.floor(e%6e4/1e3);return t>0?`${t}m ${r}s`:`${r}s`},exports.formatTimestamp=(e,t=new Date)=>{if(!e)return"";const r=new Date(e);if(isNaN(r.getTime()))return"";const s=t.getTime()-r.getTime(),o=Math.floor(s/6e4),n=Math.floor(s/36e5),a=Math.floor(s/864e5);return o<1?"Just now":o<60?`${o}m ago`:n<24?`${n}h ago`:a<7?`${a}d ago`:new Intl.DateTimeFormat("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)},exports.generateUniqueId=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),exports.getApiUrl=B,exports.getAppearanceModeStorageKey=e=>e?`${P.APPEARANCE_MODE_KEY}:${e}`:P.APPEARANCE_MODE_KEY,exports.getArrayOfObjects=function(e){return Array.isArray(e)&&Array.isArray(e[0])?e.flat():e},exports.getBaseUrl=()=>A,exports.getCustomHeaders=()=>_,exports.getDefaultThemeStyles=se,exports.getErrorMessage=function(e,t="An unexpected error occurred."){if(e&&"object"==typeof e){if("message"in e&&"string"==typeof e.message)return e.message;if("data"in e){const t=e.data;if(t&&"object"==typeof t&&"message"in t&&"string"==typeof t.message)return t.message}}return t},exports.getInitials=(e,t)=>{if(e&&e.trim()){const t=e.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():e.trim().slice(0,2).toUpperCase()}return t&&t.trim()?t.trim().slice(0,2).toUpperCase():"U"},exports.getPaymentId=function(e){if(e)return"moyasar"===e.provider?e.config?.given_id:e.payment_id},exports.getPaymentProviderHint=()=>O,exports.getSendDiagnostics=()=>U,exports.getStorageRef=ge,exports.getTimeUntilExpiry=e=>e?Math.max(0,e-Date.now()):0,exports.getTimeUntilRefresh=e=>e?Math.max(0,e-w.TOKEN_REFRESH_THRESHOLD_MS-Date.now()):0,exports.getTokenRefreshHandler=D,exports.handleSharedEvent=function(e,t){switch(e.kind){case"status_update":return t.setStatusText(e.statusText),t.setIsAgentWorking(!0),void t.onStatusActive?.(e.statusText);case"widget":return void t.pushWidget(e.widget,e.messageId);case"payment":return void t.onPayment(e.payment);case"sign_in":return void t.onSignIn?.(e.signIn);case"error":return void t.onError(e.error);case"text":return void t.appendStreamText(e.text,e.messageId);case"conversation_title":return void t.onConversationTitle?.(e.title);default:return}},exports.hasWidgets=e=>Array.isArray(e.widget)&&e.widget.length>0,exports.hexToRgba=function(e,t){let r=e.trim().replace(/^#/,"");if(3!==r.length&&4!==r.length||(r=r.split("").map(e=>e+e).join("")),!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(r))return e;const s=parseInt(r.slice(0,2),16),o=parseInt(r.slice(2,4),16),n=parseInt(r.slice(4,6),16),a=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${s}, ${o}, ${n}, ${Math.round(a*t*1e3)/1e3})`},exports.hydrateAppBoot=async e=>{const t=await e.getItem(P.SEND_DIAGNOSTICS);U=null===t||"true"===t},exports.hydrateSession=e=>async t=>{const[r,s,o,n]=await Promise.all([e.getItem(P.ACCESS_TOKEN),e.getItem(P.REFRESH_TOKEN),e.getItem(P.TOKEN_EXPIRES_AT),e.getItem(P.USER)]),a=o?parseInt(o,10):null;if((!r||!a||j(a))&&!s)return void(r&&await Promise.all([e.removeItem(P.ACCESS_TOKEN),e.removeItem(P.REFRESH_TOKEN),e.removeItem(P.TOKEN_EXPIRES_AT),e.removeItem(P.USER)]));let i=null;if(n)try{i=JSON.parse(n)}catch(e){d.error({message:"Failed to parse stored user during session hydration",component:"sessionSlice",error_message:e instanceof Error?e.message:String(e)})}t(fe({user:i,accessToken:r,refreshToken:s,expiresIn:null!=a?a/1e3:null}))},exports.indicatorReducer=Me,exports.initLogger=T,exports.initializeChatConfig=e=>{A=e.baseUrl,_=e.customHeaders||{},O=e.paymentProvider},exports.isDevMode=()=>M,exports.isTokenAboutToExpire=z,exports.isTokenExpired=j,exports.joinOrgMountBase=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${k}`:`${e}/${k}`,exports.logger=d,exports.logout=Oe,exports.parseJwtPayload=X,exports.parseOrgFromJwt=Y,exports.readAccessToken=()=>R(),exports.readDeviceToken=()=>C(),exports.readTokenExpiresAt=v,exports.registerEventListener=function(e,t){return q.on(e,t)},exports.registerLoggerContextProvider=c,exports.registerLoggerSink=u,exports.removeSpecialCharsAndSpaces=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",exports.resetLoggerForTests=async function(){n=null,a=null,i.length=0,(await Promise.resolve().then(()=>y)).resetInitLoggerStateForTests()},exports.sanitizeExpiryDate=s,exports.sessionExpired=he,exports.sessionListenerMiddleware=Ae,exports.sessionReducer=_e,exports.setAccessTokenReader=e=>{R=e},exports.setCredentials=ye,exports.setDeviceTokenReader=e=>{C=e},exports.setIsDev=e=>{M=e},exports.setLastResponseTime=Ce,exports.setModuleStorage=function(e){pe=e},exports.setNetworkLoggingEnabled=h,exports.setSelectedOrgId=Te,exports.setSession=fe,exports.setTokenExpiresAtReader=e=>{N=e},exports.setTokenRefreshHandler=e=>{I=e},exports.showErrorToast=(e="Please try again")=>W({title:"Error",description:e,variant:"destructive"}),exports.showSuccessToast=(e="Successfully")=>W({title:"Success",description:e,variant:"default"}),exports.showToast=e=>W(e),exports.truncateWordLimit=(e,t)=>{if(!e)return"";const r=e.split(" ");return r.length>t?r.slice(0,t).join(" "):e},exports.updateUser=xe,exports.useBranding=function(){const e=t.useContext(le);if(!e)throw new Error("useBranding must be used within a BrandingProvider");return e},exports.useNetworkState=()=>{const e=t.useContext(Ee),r=t.useCallback(t=>e?e.subscribe(t):()=>{},[e]),s=t.useCallback(()=>e?e.getState():me,[e]);return t.useSyncExternalStore(r,s,s)},exports.useStorage=()=>{const e=t.useContext(de);if(!e)throw new Error("useStorage must be called inside a <StorageProvider>. Wrap your app's root with <StorageProvider value={browserLocalStorageAdapter}> (or an RN equivalent).");return e},exports.validateExpiryDate=r,exports.writeOrgToStorage=function(e,t){try{t.setItem(P.SELECTED_ORG_ID,e),t.setItem(P.SELECTED_ORG_NAME,e)}catch{}};
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{createSlice as e,createListenerMiddleware as t,isAnyOf as r}from"@reduxjs/toolkit";import{createContext as s,useContext as n,useCallback as o,useSyncExternalStore as i}from"react";const a=(e,t)=>{if(!e)return"";const r=e.split(" ");return r.length>t?r.slice(0,t).join(" "):e},u=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),c=(e,t=new Date)=>{if(!e)return"";const r=new Date(e);if(isNaN(r.getTime()))return"";const s=t.getTime()-r.getTime(),n=Math.floor(s/6e4),o=Math.floor(s/36e5),i=Math.floor(s/864e5);return n<1?"Just now":n<60?`${n}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:new Intl.DateTimeFormat("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)},l=e=>e?e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",d=e=>e?e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^(.)/,e=>e.toUpperCase()).split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim():"",g=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",p=e=>e.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),E=e=>{const t=e.match(/^(\d{2})\/(\d{2})$/);if(!t)return!1;const r=Number(t[1]),s=Number(t[2]);if(r<1||r>12)return!1;const n=new Date,o=n.getFullYear()%100,i=n.getMonth()+1;return!(s<o||s===o&&r<i||r>12)},F=e=>{if(!e)return"";if(!E(e)){const t=e.match(/^(\d{2})\/(\d{2})$/);if(t){const e=Number(t[1]),r=Number(t[2]),s=new Date,n=s.getFullYear()%100,o=s.getMonth()+1;if(r<n||r===n&&e<o||e>12)return""}}return e},m=e=>{const t=e.replace(/\D/g,"").slice(0,4);if(4===t.length){const e=t.slice(0,2)+"/"+t.slice(2);return F(e)}return t.length>=3?`${t.slice(0,2)}/${t.slice(2)}`:t.length>=1?t:""},f=e=>e.replace(/\D/g,"").slice(0,4);function h(e){return Array.isArray(e)&&Array.isArray(e[0])?e.flat():e}const S=(e,t)=>{if(e&&e.trim()){const t=e.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():e.trim().slice(0,2).toUpperCase()}return t&&t.trim()?t.trim().slice(0,2).toUpperCase():"U"},T=e=>Array.isArray(e.widget)&&e.widget.length>0;function y(e,t="An unexpected error occurred."){if(e&&"object"==typeof e){if("message"in e&&"string"==typeof e.message)return e.message;if("data"in e){const t=e.data;if(t&&"object"==typeof t&&"message"in t&&"string"==typeof t.message)return t.message}}return t}const _={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"};let O=null,A=null;const I=[];function R(e){if(O=e,I.length>0){const t=I.splice(0,I.length);for(const r of t)e.emit(r)}}function N(e){A=e}async function x(){O=null,A=null,I.length=0,(await Promise.resolve().then(()=>H)).resetInitLoggerStateForTests()}function C(e,t){const r=A?function(e){try{return e()??{}}catch{return{}}}(A):{},{message:s,...n}=t,o={...r,...n,level:e,message:s,timestamp:(new Date).toISOString()};O?O.emit(o):(I.length>=200&&I.shift(),I.push(o))}const M={debug(e){C(_.DEBUG,e)},info(e){C(_.INFO,e)},warn(e){C(_.WARN,e)},error(e){C(_.ERROR,e)},flush:()=>O?.flush?.()},B={[_.DEBUG]:0,[_.INFO]:1,[_.WARN]:2,[_.ERROR]:3};function D(e={}){const t=B[e.minLevel??_.DEBUG];return{emit(e){B[e.level]<t||(e.level===_.ERROR?console.error:e.level===_.WARN?console.warn:e.level===_.DEBUG?console.debug:console.info)(e)}}}const v={[_.DEBUG]:5,[_.INFO]:9,[_.WARN]:13,[_.ERROR]:17};function b(e){if(null===e)return"null";const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Error)return JSON.stringify({name:e.name,message:e.message,stack:e.stack});try{return JSON.stringify(e)}catch{return String(e)}}function w(e){const t={};for(const[r,s]of Object.entries(e))void 0!==s&&(t[r]=b(s));return t}let k=!1,P=null,L=!0;function U(e){L=e}function G(e){k||(k=!0,N(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),R(function(e){const t=[D({minLevel:e.consoleMinLevel??(e.isDev?_.DEBUG:_.WARN)})];if(e.otlpEndpoint&&!e.isDev){const r="otel"===(e.logTransport??"otel")?function(e){let t=!1,r=null,s=null;const n=[];function o(){s||(s=async function(){const[t,s,o,i]=await Promise.all([import("@opentelemetry/api-logs"),import("@opentelemetry/sdk-logs"),import("@opentelemetry/exporter-logs-otlp-http"),import("@opentelemetry/resources")]),a=i.resourceFromAttributes(e.resourceAttrs),u=new o.OTLPLogExporter({url:e.endpoint}),c=new s.LoggerProvider({resource:a,processors:[new s.BatchLogRecordProcessor(u)]});t.logs.setGlobalLoggerProvider(c);const l=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:s,...n}=e;l.emit({severityNumber:v[t],severityText:t,body:JSON.stringify(e),attributes:w(n),timestamp:new Date(s)})},async flush(){await c.forceFlush()}},n.length>0){const e=n.splice(0,n.length);for(const t of e)r.emit(t)}}().catch(()=>{n.length=0,r=null,t=!0}))}return{emit(e){t||(r?r.emit(e):(o(),n.length>=200&&n.shift(),n.push(e)))},async flush(){(s||r)&&(o(),await s,r&&await r.flush())}}}({endpoint:e.otlpEndpoint,resourceAttrs:{"service.name":e.appName,"service.version":e.appVersion,"deployment.environment":e.environment}}):function(e){const t=e.maxBatchSize??50,r=e.scheduledDelayMs??5e3,s=e.maxQueueSize??2048,n=e.wrapBatch??(e=>e),o=[];let i=null;function a(){return null!==i&&(clearTimeout(i),i=null),0===o.length||0===(t=o.splice(0,o.length)).length?Promise.resolve():fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n(t)),keepalive:!0}).then(()=>{}).catch(()=>{});var t}return{emit(e){o.length>=s&&o.shift(),o.push(e),o.length>=t?a():null===i&&(i=setTimeout(()=>{i=null,a()},r))},async flush(){await a()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){L&&r.emit(e)},flush:r.flush.bind(r)})}return e.extraSinks?.length&&t.push(...e.extraSinks),1===t.length?t[0]:function(e){return{emit(t){for(const r of e)try{r.emit(t)}catch{}},async flush(){await Promise.all(e.map(e=>e.flush?Promise.resolve(e.flush()).catch(()=>{}):Promise.resolve()))}}}(t)}(e)),!1!==e.flushOnAppHide&&P?.())}const H=Object.freeze(Object.defineProperty({__proto__:null,initLogger:G,registerPlatformFlushAttacher:function(e){P=e},resetInitLoggerStateForTests:function(){k=!1,P=null,L=!0},setNetworkLoggingEnabled:U},Symbol.toStringTag,{value:"Module"}));let K,$="",W={},j=null,V=()=>null,X=()=>null,z=!1;const Y=e=>{$=e.baseUrl,W=e.customHeaders||{},K=e.paymentProvider},J=()=>$,Z=()=>K,q=()=>W,Q=e=>{j=e},ee=()=>j,te=e=>{V=e},re=()=>V(),se=e=>{X=e},ne=()=>X(),oe=e=>{z=e},ie=()=>z,ae=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${$}/api${t}`},ue="chat",ce=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${ue}`:`${e}/${ue}`,le={CONVERSATIONS:()=>ae("/conversations"),CONVERSATION_STREAM:e=>ae(`/conversations/${e}`),CONVERSATION_START:e=>ae(`/conversations/${e}/start`),WEBRTC_OFFER:e=>ae(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>ae(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return ae("/transcribe")},get BRANDING(){return ae("/branding")},get CONFIG(){return ae("/config")},get PROFILE(){return ae("/profile")},get AUTH_ME(){return ae("/auth/me")},get ORGANIZATIONS_EXISTS(){return ae("/organizations/exists")},get DEBUG(){return ae("/debug")},get TOOL_SERVERS(){return ae("/tool-servers")},TOOL_SERVER_AUTH_START:e=>ae(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>ae(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return ae("/tool-servers/auth/exchange")},get LOG(){return ae("/log")}},de={SSO:"sso"},ge={TOKEN_REFRESH_THRESHOLD_MS:6e5,TOKEN_CLOCK_SKEW_MS:3e4,TOKEN_DEFAULT_EXPIRY_MS:36e5,THINKING_STATE_TIMEOUT_MS:600,MESSAGE_WARNING_TIMEOUT_MS:1e4,TOAST_DURATION_MS:5e3,TOAST_ERROR_DURATION_MS:7e3,INPUT_DEBOUNCE_MS:300,SEARCH_DEBOUNCE_MS:500,CONFIG_TIMEOUT_MS:5e3},pe={ACCESS_TOKEN:"accessToken",REFRESH_TOKEN:"refreshToken",TOKEN_EXPIRES_AT:"tokenExpiresAt",USER:"user",SELECTED_ORG_ID:"selectedOrgId",SELECTED_ORG_NAME:"selectedOrgName",APPEARANCE_MODE_KEY:"1interface_appearance_mode",LOCATION_ENABLED:"1interface_location_enabled",LOCATION_CACHE:"1interface_cached_location",DEBUG_MODE:"1interface_debug_mode",STT_AUTO_SEND:"1interface_stt_auto_send",STT_IMPLEMENTATION:"1interface_stt_implementation",SEND_DIAGNOSTICS:"1interface_send_diagnostics",ACTIVE_CONVERSATION_ID:"1interface_active_conversation_id"},Ee={ONLINE:"online",DEVICE:"device"},Fe=e=>e?`${pe.APPEARANCE_MODE_KEY}:${e}`:pe.APPEARANCE_MODE_KEY,me={ACCESS_TOKEN:"x-access-token",REFRESH_TOKEN:"x-refresh-token"},fe={LOGIN:"/auth/login",SIGNUP:"/auth/signup",LOGOUT:"/auth/logout",REFRESH:"/auth/refresh",FORGOT_PASSWORD:"/auth/forgot-password",RESET_PASSWORD:"/auth/reset-password",SSO_START:"/auth/sso/start",SSO_EXCHANGE:"/auth/sso/exchange",ORGANIZATIONS:"/organizations"},he={EMAIL:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,NON_DIGIT:/\D/g,PHONE_E164:/^\+[1-9]\d{1,14}$/},Se={NAME_MAX_LENGTH:64,PHONE_MIN_LENGTH:8,PHONE_MAX_LENGTH:16};let Te=!0;const ye=async e=>{const t=await e.getItem(pe.SEND_DIAGNOSTICS);Te=null===t||"true"===t},_e=()=>Te,Oe=3,Ae=500,Ie=e=>{const t=e?.status;return"FETCH_ERROR"===t||"TIMEOUT_ERROR"===t||("number"==typeof t?t>=500:(M.warn({message:"unknown error shape; treating as transient",api_name:"auth-refresh",error_message:e instanceof Error?e.message:String(e)}),!0))};function Re(e){const{performRefresh:t,isTransient:r=Ie,maxAttempts:s=Oe,backoffBaseMs:n=Ae}=e;let o=null;return function(){return o||(o=(async()=>{for(let e=0;e<s;e++)try{return await t()}catch(t){if(!r(t))return null;if(e===s-1)break;const o=n*2**e+250*Math.random();await new Promise(e=>setTimeout(e,o))}return null})().finally(()=>{o=null}),o)}}const Ne="bridge-toast";function xe(e){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(Ne,{detail:e}))}const Ce=e=>xe(e),Me=(e="Please try again")=>xe({title:"Error",description:e,variant:"destructive"}),Be=(e="Successfully")=>xe({title:"Success",description:e,variant:"default"}),De=Ne,ve=e=>!!e&&Date.now()>=e-ge.TOKEN_CLOCK_SKEW_MS,be=e=>!e||Date.now()>=e-ge.TOKEN_REFRESH_THRESHOLD_MS,we=async()=>be(ne())?await(ee()?.())??null:null,ke=e=>e?Math.max(0,e-Date.now()):0,Pe=e=>e?Math.max(0,e-ge.TOKEN_REFRESH_THRESHOLD_MS-Date.now()):0,Le=e=>{const t=Math.floor(e/6e4),r=Math.floor(e%6e4/1e3);return t>0?`${t}m ${r}s`:`${r}s`};function Ue(e){const t=e.headers.get(me.ACCESS_TOKEN),r=e.headers.get(me.REFRESH_TOKEN);if(!t)throw new Error(`Missing ${me.ACCESS_TOKEN} header in response`);if(!r)throw new Error(`Missing ${me.REFRESH_TOKEN} header in response`);return{accessToken:t,refreshToken:r}}function Ge(e){if(!e)return null;const t=e.split(".");if(3!==t.length)return null;try{const e=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),s=atob(r),n=JSON.parse(s);return n&&"object"==typeof n&&!Array.isArray(n)?n:null}catch{return null}}function He(e){const t=Ge(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}function Ke(e,t){try{const r=t.getItem(pe.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const s=He(t.getItem(pe.ACCESS_TOKEN));return s&&s!==e?"jwt":null}catch{return null}}function $e(e){try{e.removeItem(pe.ACCESS_TOKEN),e.removeItem(pe.REFRESH_TOKEN),e.removeItem(pe.TOKEN_EXPIRES_AT),e.removeItem(pe.USER)}catch{}}function We(e,t){try{t.setItem(pe.SELECTED_ORG_ID,e),t.setItem(pe.SELECTED_ORG_NAME,e)}catch{}}class je{static instance;events={};constructor(){}static getInstance(){return je.instance||(je.instance=new je),je.instance}on(e,t,r){const s="function"==typeof t?t:r;return this.events[e]||(this.events[e]=[]),this.events[e].push(s),()=>{this.off(e,s)}}off(e,t){this.events[e]&&(this.events[e]=this.events[e].filter(e=>e!==t))}emit(e,t){this.events[e]&&this.events[e].forEach(r=>{try{r(t)}catch(t){M.error({message:`Error in event handler for "${e}"`,api_name:"event-emitter",event:e,error_message:t instanceof Error?t.message:String(t)})}})}clear(e){e?delete this.events[e]:this.events={}}}const Ve=je.getInstance();function Xe(e,t){return Ve.on(e,t)}const ze={LIGHT:"light",DARK:"dark",SYSTEM:"system"},Ye=[ze.LIGHT,ze.DARK,ze.SYSTEM],Je={FOREGROUND:"foreground",BACKGROUND:"background"},Ze={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},qe={bgColor:"linear-gradient(281.8deg, #061522 6.7%, #101F2F 59.64%, #3C3B4F 76.85%, #5D4C63 88.46%, #755770 99.24%)",inputBgColor:"#222D34",sidebarBg:"#0F1419",sidebarBorderColor:"#8F8F8F",widgetBg:"#222D34",settingsGroupBg:"#272626",inputBorderStyle:"solid",inputBorderColor:"#FFFFFF80",inputBorderWidth:"1px",inputBorderOpacity:50,widgetBorderStyle:"solid",widgetBorderColor:"#FFFFFF1A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#8F8F8F",primaryText:"#FFFFFF",secondaryText:"#AFAFAF",tertiaryText:"#8F8F8F",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#FFFFFFFF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#FFFFFF",sideMenuText:"#AFAFAF",sideMenuIcon:"#8F8F8F",sideMenuProfile:"#FFFFFF",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#222D34",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:Ze.PILL,chatInputPlaceholder:"Type anything..."},Qe={bgColor:"linear-gradient(281.8deg, #EEF2FF 6.7%, #E2E8FD 59.64%, #E8DFF4 76.85%, #F4DBE6 88.46%, #FFE1D0 99.24%)",inputBgColor:"#F4F4F5",sidebarBg:"#FFFFFF",sidebarBorderColor:"#9B9B9B",widgetBg:"#FFFFFF",settingsGroupBg:"#1A1A1A10",inputBorderStyle:"solid",inputBorderColor:"#0000001A",inputBorderWidth:"1px",inputBorderOpacity:10,widgetBorderStyle:"solid",widgetBorderColor:"#0000001A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#9B9B9B",primaryText:"#1A1A1A",secondaryText:"#6B6B6B",tertiaryText:"#9B9B9B",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#000000FF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#1A1A1A",sideMenuText:"#6B6B6B",sideMenuIcon:"#9B9B9B",sideMenuProfile:"#1A1A1A",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#F4F4F5",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:Ze.PILL,chatInputPlaceholder:"Type anything..."};function et(e){return e===ze.LIGHT?Qe:qe}const tt=qe;function rt(e,t){const r=e.replace("#","");let s;s=3===r.length?r.split("").map(e=>e+e).join(""):6===r.length?r:"000000";const n=Math.max(0,Math.min(100,t));return`#${s}${Math.round(n/100*255).toString(16).padStart(2,"0")}`.toUpperCase()}function st(e,t){if(!e)return t.fontFamily;switch(e){case"Inter":return"'Inter', sans-serif";case"System":return"system-ui, -apple-system, sans-serif";default:return"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif"}}function nt(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function ot(e,t){if(!e)return t.borderRadius;switch(e){case"none":return 0;case"sm":return 8;case"md":return 12;case"pill":return 16;default:const r=parseInt(e,10);return isNaN(r)?t.borderRadius:r}}function it(e){switch(e){case"pill":return Ze.PILL;case"none":return Ze.SHARP;default:return 0===parseInt(e??"",10)?Ze.SHARP:Ze.ROUNDED}}function at(e,t,r=ze.DARK){const s=et(r);if(!e||!t)return s;const n=t.surface?.chatInput?.border||t.surface?.input?.border,o=t.surface?.userMessage?.border,i=t.surface?.widget?.border;return{bgColor:t.surface?.chat?.background||s.bgColor,inputBgColor:t.surface?.chatInput?.background||t.surface?.input?.background||s.inputBgColor,sidebarBg:t.surface?.sideMenu?.background||s.sidebarBg,sidebarBorderColor:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sidebarBorderColor,widgetBg:t.surface?.widget?.background||s.widgetBg,settingsGroupBg:t.surface?.settings?.groupBackground||s.settingsGroupBg,inputBorderStyle:n?.style||s.inputBorderStyle,inputBorderColor:n?.color?rt(n.color,n.opacity||100):s.inputBorderColor,inputBorderWidth:n?.width||s.inputBorderWidth,inputBorderOpacity:n?.opacity||100,widgetBorderStyle:i?.style||s.widgetBorderStyle,widgetBorderColor:i?.color?rt(i.color,i.opacity||100):s.widgetBorderColor,widgetBorderWidth:i?.width||s.widgetBorderWidth,widgetBorderOpacity:i?.opacity??s.widgetBorderOpacity,placeholderColor:t.surface?.chatInput?.placeholderColor||t.surface?.input?.placeholderColor||s.placeholderColor,primaryText:t.text?.primary||s.primaryText,secondaryText:t.text?.secondary||s.secondaryText,tertiaryText:t.text?.tertiary||s.tertiaryText,userMsgBg:t.surface?.userMessage?.background||s.userMsgBg,userMsgText:t.surface?.userMessage?.textColor||s.userMsgText,userMsgBorderStyle:o?.style||s.userMsgBorderStyle,userMsgBorderColor:o?.color?rt(o.color,o.opacity||100):s.userMsgBorderColor,userMsgBorderWidth:o?.width||s.userMsgBorderWidth,userMsgBorderOpacity:o?.opacity||0,sideMenuHeadings:t.surface?.sideMenu?.headingsColor||t.surface?.sideMenu?.headings||s.sideMenuHeadings,sideMenuText:t.surface?.sideMenu?.textContentColor||t.surface?.sideMenu?.textContent||s.sideMenuText,sideMenuIcon:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sideMenuIcon,sideMenuProfile:t.surface?.sideMenu?.profileTextColor||t.surface?.sideMenu?.textProfile||s.sideMenuProfile,statusPrimary:{solid:t.status?.primary?.solid||s.statusPrimary.solid,background:t.status?.primary?.background||s.statusPrimary.background,text:t.status?.primary?.text||s.statusPrimary.text},statusSecondary:{solid:t.status?.secondary?.solid||s.statusSecondary.solid,background:t.status?.secondary?.background||s.statusSecondary.background,text:t.status?.secondary?.text||s.statusSecondary.text},statusSuccess:{solid:t.status?.success?.solid||s.statusSuccess.solid,background:t.status?.success?.background||s.statusSuccess.background,text:t.status?.success?.text||s.statusSuccess.text},statusDanger:{solid:t.status?.danger?.solid||s.statusDanger.solid,background:t.status?.danger?.background||s.statusDanger.background,text:t.status?.danger?.text||s.statusDanger.text},statusWarning:{solid:t.status?.warning?.solid||s.statusWarning.solid,background:t.status?.warning?.background||s.statusWarning.background,text:t.status?.warning?.text||s.statusWarning.text},statusInfo:{solid:t.status?.info?.solid||s.statusInfo.solid,background:t.status?.info?.background||s.statusInfo.background,text:t.status?.info?.text||s.statusInfo.text},statusDiscovery:{solid:t.status?.discovery?.solid||s.statusDiscovery.solid,background:t.status?.discovery?.background||s.statusDiscovery.background,text:t.status?.discovery?.text||s.statusDiscovery.text},switchCheckedColor:t.status?.primary?.solid||s.switchCheckedColor,switchUncheckedColor:t.surface?.chatInput?.background||s.switchUncheckedColor,fontFamily:st(e.typography?.fontFamily,s),fontFamilyMono:nt(e.typography?.fontFamilyMono,s),fontSize:14,borderRadius:ot(e.cornerRadius,s),cornerRadiusMode:it(e.cornerRadius),chatInputPlaceholder:e.startScreen.inputPlaceholder}}function ut(e,t){let r=e.trim().replace(/^#/,"");if(3!==r.length&&4!==r.length||(r=r.split("").map(e=>e+e).join("")),!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(r))return e;const s=parseInt(r.slice(0,2),16),n=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16),i=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${s}, ${n}, ${o}, ${Math.round(i*t*1e3)/1e3})`}const ct=s(void 0);function lt(){const e=n(ct);if(!e)throw new Error("useBranding must be used within a BrandingProvider");return e}const dt=s(null),gt=()=>{const e=n(dt);if(!e)throw new Error("useStorage must be called inside a <StorageProvider>. Wrap your app's root with <StorageProvider value={browserLocalStorageAdapter}> (or an RN equivalent).");return e};let pt=null;function Et(e){pt=e}const Ft=()=>pt,mt=s(null),ft={isConnected:!0,isInternetReachable:!0},ht=()=>{const e=n(mt),t=o(t=>e?e.subscribe(t):()=>{},[e]),r=o(()=>e?e.getState():ft,[e]);return i(t,r,r)},St=e({name:"auth",initialState:{user:null,accessToken:null,refreshToken:null,tokenExpiresAt:null,selectedOrgId:null,isAuthenticated:!1,isLoading:!1},reducers:{setSession:(e,t)=>{const{user:r,accessToken:s,refreshToken:n,expiresIn:o}=t.payload;void 0!==r&&(e.user=r),void 0!==s&&(e.accessToken=s),void 0!==n&&(e.refreshToken=n),void 0!==o?e.tokenExpiresAt=null===o?null:1e3*o:s&&(e.tokenExpiresAt=Date.now()+ge.TOKEN_DEFAULT_EXPIRY_MS),e.isAuthenticated=Boolean(e.accessToken),e.isLoading=!1},updateUser:(e,t)=>{e.user={...e.user||{},...t.payload}},clearSession:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},sessionExpired:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},setSelectedOrgId:(e,t)=>{e.selectedOrgId=t.payload??null}}}),{setSession:Tt,updateUser:yt,clearSession:_t,sessionExpired:Ot,setSelectedOrgId:At}=St.actions,It=Tt,Rt=_t,Nt=e=>async t=>{const[r,s,n,o]=await Promise.all([e.getItem(pe.ACCESS_TOKEN),e.getItem(pe.REFRESH_TOKEN),e.getItem(pe.TOKEN_EXPIRES_AT),e.getItem(pe.USER)]),i=n?parseInt(n,10):null;if((!r||!i||ve(i))&&!s)return void(r&&await Promise.all([e.removeItem(pe.ACCESS_TOKEN),e.removeItem(pe.REFRESH_TOKEN),e.removeItem(pe.TOKEN_EXPIRES_AT),e.removeItem(pe.USER)]));let a=null;if(o)try{a=JSON.parse(o)}catch(e){M.error({message:"Failed to parse stored user during session hydration",component:"sessionSlice",error_message:e instanceof Error?e.message:String(e)})}t(Tt({user:a,accessToken:r,refreshToken:s,expiresIn:null!=i?i/1e3:null}))},xt=t();xt.startListening({matcher:r(Tt,yt,_t,Ot),effect:async(e,t)=>{const r=Ft();if(!r)return;const{auth:s}=t.getState(),n=[];n.push(s.accessToken?r.setItem(pe.ACCESS_TOKEN,s.accessToken):r.removeItem(pe.ACCESS_TOKEN)),n.push(s.refreshToken?r.setItem(pe.REFRESH_TOKEN,s.refreshToken):r.removeItem(pe.REFRESH_TOKEN)),n.push(null!=s.tokenExpiresAt?r.setItem(pe.TOKEN_EXPIRES_AT,String(s.tokenExpiresAt)):r.removeItem(pe.TOKEN_EXPIRES_AT)),n.push(s.user?r.setItem(pe.USER,JSON.stringify(s.user)):r.removeItem(pe.USER)),(_t.match(e)||Ot.match(e))&&n.push(r.removeItem(pe.LOCATION_CACHE),r.removeItem(pe.DEBUG_MODE),r.removeItem(pe.APPEARANCE_MODE_KEY),r.removeItem(pe.LOCATION_ENABLED),r.removeItem(pe.STT_AUTO_SEND),r.removeItem(pe.STT_IMPLEMENTATION),r.removeItem(pe.SEND_DIAGNOSTICS),r.removeItem(pe.ACTIVE_CONVERSATION_ID)),await Promise.all(n)}});const Ct=St.reducer,Mt={lastResponseTime:null},Bt=e({name:"indicator",initialState:Mt,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:e=>{e.addMatcher(r(_t,Ot),()=>Mt)}}),{setLastResponseTime:Dt,clearLastResponseTime:vt}=Bt.actions,bt=Bt.reducer;function wt(e,t){switch(e.kind){case"status_update":return t.setStatusText(e.statusText),t.setIsAgentWorking(!0),void t.onStatusActive?.(e.statusText);case"widget":return void t.pushWidget(e.widget,e.messageId);case"payment":return void t.onPayment(e.payment);case"sign_in":return void t.onSignIn?.(e.signIn);case"error":return void t.onError(e.error);case"text":return void t.appendStreamText(e.text,e.messageId);case"conversation_title":return void t.onConversationTitle?.(e.title);default:return}}const kt={GOOGLE:"google",APPLE:"apple",MICROSOFT:"microsoft"},Pt={KEEP:"keep",FINALIZE:"finalize",CANCEL:"cancel"};function Lt(e){if(e)return"moyasar"===e.provider?e.config?.given_id:e.payment_id}export{le as API_ENDPOINTS,ze as APPEARANCE_MODES,Ye as APPEARANCE_MODE_VALUES,me as AUTH_HEADERS,fe as AUTH_PATHS,De as BRIDGE_TOAST_EVENT_NAME,ct as BrandingContext,Ze as CORNER_RADIUS_MODES,je as EventEmitter,de as FEATURE_FLAGS,kt as IDP_HINTS,Pt as INDICATOR_TIMER_ACTIONS,_ as LOG_LEVELS,mt as NetworkContext,Je as ORB_POSITIONS,ue as ORG_MOUNT_SUFFIX,he as PATTERNS,Se as PROFILE_LIMITS,pe as STORAGE_KEYS,Ee as STT_IMPLEMENTATIONS,dt as StorageContext,ge as TIMING,at as brandingToThemeStyles,l as capitalizeFirst,$e as clearAuthTokens,vt as clearLastResponseTime,_t as clearSession,Re as createTokenRefresher,tt as defaultChatThemeStyles,qe as defaultDarkThemeStyles,Ie as defaultIsTransient,Qe as defaultLightThemeStyles,Ke as detectOrgSwitch,we as ensureFreshToken,Ve as eventEmitter,Ue as extractTokens,f as formatCVC,d as formatCamelCaseToTitle,p as formatCardNumber,m as formatExpiryDate,Le as formatTimeRemaining,c as formatTimestamp,u as generateUniqueId,ae as getApiUrl,Fe as getAppearanceModeStorageKey,h as getArrayOfObjects,J as getBaseUrl,q as getCustomHeaders,et as getDefaultThemeStyles,y as getErrorMessage,S as getInitials,Lt as getPaymentId,Z as getPaymentProviderHint,_e as getSendDiagnostics,Ft as getStorageRef,ke as getTimeUntilExpiry,Pe as getTimeUntilRefresh,ee as getTokenRefreshHandler,wt as handleSharedEvent,T as hasWidgets,ut as hexToRgba,ye as hydrateAppBoot,Nt as hydrateSession,bt as indicatorReducer,G as initLogger,Y as initializeChatConfig,ie as isDevMode,be as isTokenAboutToExpire,ve as isTokenExpired,ce as joinOrgMountBase,M as logger,Rt as logout,Ge as parseJwtPayload,He as parseOrgFromJwt,re as readAccessToken,ne as readTokenExpiresAt,Xe as registerEventListener,N as registerLoggerContextProvider,R as registerLoggerSink,g as removeSpecialCharsAndSpaces,x as resetLoggerForTests,F as sanitizeExpiryDate,Ot as sessionExpired,xt as sessionListenerMiddleware,Ct as sessionReducer,te as setAccessTokenReader,It as setCredentials,oe as setIsDev,Dt as setLastResponseTime,Et as setModuleStorage,U as setNetworkLoggingEnabled,At as setSelectedOrgId,Tt as setSession,se as setTokenExpiresAtReader,Q as setTokenRefreshHandler,Me as showErrorToast,Be as showSuccessToast,Ce as showToast,a as truncateWordLimit,yt as updateUser,lt as useBranding,ht as useNetworkState,gt as useStorage,E as validateExpiryDate,We as writeOrgToStorage};
1
+ import{createSlice as e,createListenerMiddleware as t,isAnyOf as r}from"@reduxjs/toolkit";import{createContext as s,useContext as n,useCallback as o,useSyncExternalStore as i}from"react";const a=(e,t)=>{if(!e)return"";const r=e.split(" ");return r.length>t?r.slice(0,t).join(" "):e},u=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),c=(e,t=new Date)=>{if(!e)return"";const r=new Date(e);if(isNaN(r.getTime()))return"";const s=t.getTime()-r.getTime(),n=Math.floor(s/6e4),o=Math.floor(s/36e5),i=Math.floor(s/864e5);return n<1?"Just now":n<60?`${n}m ago`:o<24?`${o}h ago`:i<7?`${i}d ago`:new Intl.DateTimeFormat("en-GB",{day:"2-digit",month:"short",year:"numeric",hour:"2-digit",minute:"2-digit",hour12:!1}).format(r)},l=e=>e?e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",d=e=>e?e.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/^(.)/,e=>e.toUpperCase()).split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ").trim():"",g=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",p=e=>e.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),E=e=>{const t=e.match(/^(\d{2})\/(\d{2})$/);if(!t)return!1;const r=Number(t[1]),s=Number(t[2]);if(r<1||r>12)return!1;const n=new Date,o=n.getFullYear()%100,i=n.getMonth()+1;return!(s<o||s===o&&r<i||r>12)},F=e=>{if(!e)return"";if(!E(e)){const t=e.match(/^(\d{2})\/(\d{2})$/);if(t){const e=Number(t[1]),r=Number(t[2]),s=new Date,n=s.getFullYear()%100,o=s.getMonth()+1;if(r<n||r===n&&e<o||e>12)return""}}return e},m=e=>{const t=e.replace(/\D/g,"").slice(0,4);if(4===t.length){const e=t.slice(0,2)+"/"+t.slice(2);return F(e)}return t.length>=3?`${t.slice(0,2)}/${t.slice(2)}`:t.length>=1?t:""},f=e=>e.replace(/\D/g,"").slice(0,4);function h(e){return Array.isArray(e)&&Array.isArray(e[0])?e.flat():e}const S=(e,t)=>{if(e&&e.trim()){const t=e.trim().split(/\s+/);return t.length>=2?(t[0][0]+t[t.length-1][0]).toUpperCase():e.trim().slice(0,2).toUpperCase()}return t&&t.trim()?t.trim().slice(0,2).toUpperCase():"U"},T=e=>Array.isArray(e.widget)&&e.widget.length>0;function y(e,t="An unexpected error occurred."){if(e&&"object"==typeof e){if("message"in e&&"string"==typeof e.message)return e.message;if("data"in e){const t=e.data;if(t&&"object"==typeof t&&"message"in t&&"string"==typeof t.message)return t.message}}return t}const _={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"};let O=null,A=null;const I=[];function R(e){if(O=e,I.length>0){const t=I.splice(0,I.length);for(const r of t)e.emit(r)}}function N(e){A=e}async function x(){O=null,A=null,I.length=0,(await Promise.resolve().then(()=>H)).resetInitLoggerStateForTests()}function C(e,t){const r=A?function(e){try{return e()??{}}catch{return{}}}(A):{},{message:s,...n}=t,o={...r,...n,level:e,message:s,timestamp:(new Date).toISOString()};O?O.emit(o):(I.length>=200&&I.shift(),I.push(o))}const M={debug(e){C(_.DEBUG,e)},info(e){C(_.INFO,e)},warn(e){C(_.WARN,e)},error(e){C(_.ERROR,e)},flush:()=>O?.flush?.()},B={[_.DEBUG]:0,[_.INFO]:1,[_.WARN]:2,[_.ERROR]:3};function D(e={}){const t=B[e.minLevel??_.DEBUG];return{emit(e){B[e.level]<t||(e.level===_.ERROR?console.error:e.level===_.WARN?console.warn:e.level===_.DEBUG?console.debug:console.info)(e)}}}const v={[_.DEBUG]:5,[_.INFO]:9,[_.WARN]:13,[_.ERROR]:17};function b(e){if(null===e)return"null";const t=typeof e;if("string"===t||"number"===t||"boolean"===t)return e;if(e instanceof Error)return JSON.stringify({name:e.name,message:e.message,stack:e.stack});try{return JSON.stringify(e)}catch{return String(e)}}function w(e){const t={};for(const[r,s]of Object.entries(e))void 0!==s&&(t[r]=b(s));return t}let k=!1,P=null,L=!0;function U(e){L=e}function G(e){k||(k=!0,N(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),R(function(e){const t=[D({minLevel:e.consoleMinLevel??(e.isDev?_.DEBUG:_.WARN)})];if(e.otlpEndpoint&&!e.isDev){const r="otel"===(e.logTransport??"otel")?function(e){let t=!1,r=null,s=null;const n=[];function o(){s||(s=async function(){const[t,s,o,i]=await Promise.all([import("@opentelemetry/api-logs"),import("@opentelemetry/sdk-logs"),import("@opentelemetry/exporter-logs-otlp-http"),import("@opentelemetry/resources")]),a=i.resourceFromAttributes(e.resourceAttrs),u=new o.OTLPLogExporter({url:e.endpoint}),c=new s.LoggerProvider({resource:a,processors:[new s.BatchLogRecordProcessor(u)]});t.logs.setGlobalLoggerProvider(c);const l=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:s,...n}=e;l.emit({severityNumber:v[t],severityText:t,body:JSON.stringify(e),attributes:w(n),timestamp:new Date(s)})},async flush(){await c.forceFlush()}},n.length>0){const e=n.splice(0,n.length);for(const t of e)r.emit(t)}}().catch(()=>{n.length=0,r=null,t=!0}))}return{emit(e){t||(r?r.emit(e):(o(),n.length>=200&&n.shift(),n.push(e)))},async flush(){(s||r)&&(o(),await s,r&&await r.flush())}}}({endpoint:e.otlpEndpoint,resourceAttrs:{"service.name":e.appName,"service.version":e.appVersion,"deployment.environment":e.environment}}):function(e){const t=e.maxBatchSize??50,r=e.scheduledDelayMs??5e3,s=e.maxQueueSize??2048,n=e.wrapBatch??(e=>e),o=[];let i=null;function a(){return null!==i&&(clearTimeout(i),i=null),0===o.length||0===(t=o.splice(0,o.length)).length?Promise.resolve():fetch(e.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n(t)),keepalive:!0}).then(()=>{}).catch(()=>{});var t}return{emit(e){o.length>=s&&o.shift(),o.push(e),o.length>=t?a():null===i&&(i=setTimeout(()=>{i=null,a()},r))},async flush(){await a()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){L&&r.emit(e)},flush:r.flush.bind(r)})}return e.extraSinks?.length&&t.push(...e.extraSinks),1===t.length?t[0]:function(e){return{emit(t){for(const r of e)try{r.emit(t)}catch{}},async flush(){await Promise.all(e.map(e=>e.flush?Promise.resolve(e.flush()).catch(()=>{}):Promise.resolve()))}}}(t)}(e)),!1!==e.flushOnAppHide&&P?.())}const H=Object.freeze(Object.defineProperty({__proto__:null,initLogger:G,registerPlatformFlushAttacher:function(e){P=e},resetInitLoggerStateForTests:function(){k=!1,P=null,L=!0},setNetworkLoggingEnabled:U},Symbol.toStringTag,{value:"Module"}));let K,$="",W={},j=null,V=()=>null,X=()=>null,z=()=>null,Y=!1;const J=e=>{$=e.baseUrl,W=e.customHeaders||{},K=e.paymentProvider},Z=()=>$,q=()=>K,Q=()=>W,ee=e=>{j=e},te=()=>j,re=e=>{V=e},se=()=>V(),ne=e=>{X=e},oe=()=>X(),ie=e=>{z=e},ae=()=>z(),ue=e=>{Y=e},ce=()=>Y,le=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${$}/api${t}`},de="chat",ge=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${de}`:`${e}/${de}`,pe={CONVERSATIONS:()=>le("/conversations"),CONVERSATION_STREAM:e=>le(`/conversations/${e}`),CONVERSATION_START:e=>le(`/conversations/${e}/start`),WEBRTC_OFFER:e=>le(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>le(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return le("/transcribe")},get BRANDING(){return le("/branding")},get CONFIG(){return le("/config")},get PROFILE(){return le("/profile")},get AUTH_ME(){return le("/auth/me")},get ORGANIZATIONS_EXISTS(){return le("/organizations/exists")},get DEBUG(){return le("/debug")},get TOOL_SERVERS(){return le("/tool-servers")},TOOL_SERVER_AUTH_START:e=>le(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>le(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return le("/tool-servers/auth/exchange")},get LOG(){return le("/log")}},Ee={SSO:"sso"},Fe={TOKEN_REFRESH_THRESHOLD_MS:6e5,TOKEN_CLOCK_SKEW_MS:3e4,TOKEN_DEFAULT_EXPIRY_MS:36e5,THINKING_STATE_TIMEOUT_MS:600,MESSAGE_WARNING_TIMEOUT_MS:1e4,TOAST_DURATION_MS:5e3,TOAST_ERROR_DURATION_MS:7e3,INPUT_DEBOUNCE_MS:300,SEARCH_DEBOUNCE_MS:500,CONFIG_TIMEOUT_MS:5e3},me={ACCESS_TOKEN:"accessToken",REFRESH_TOKEN:"refreshToken",TOKEN_EXPIRES_AT:"tokenExpiresAt",USER:"user",SELECTED_ORG_ID:"selectedOrgId",SELECTED_ORG_NAME:"selectedOrgName",APPEARANCE_MODE_KEY:"1interface_appearance_mode",LOCATION_ENABLED:"1interface_location_enabled",LOCATION_CACHE:"1interface_cached_location",DEBUG_MODE:"1interface_debug_mode",STT_AUTO_SEND:"1interface_stt_auto_send",STT_IMPLEMENTATION:"1interface_stt_implementation",SEND_DIAGNOSTICS:"1interface_send_diagnostics",ACTIVE_CONVERSATION_ID:"1interface_active_conversation_id"},fe={ONLINE:"online",DEVICE:"device"},he=e=>e?`${me.APPEARANCE_MODE_KEY}:${e}`:me.APPEARANCE_MODE_KEY,Se={ACCESS_TOKEN:"x-access-token",REFRESH_TOKEN:"x-refresh-token"},Te="x-device-token",ye={LOGIN:"/auth/login",SIGNUP:"/auth/signup",LOGOUT:"/auth/logout",REFRESH:"/auth/refresh",FORGOT_PASSWORD:"/auth/forgot-password",RESET_PASSWORD:"/auth/reset-password",SSO_START:"/auth/sso/start",SSO_EXCHANGE:"/auth/sso/exchange",ORGANIZATIONS:"/organizations"},_e={EMAIL:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,NON_DIGIT:/\D/g,PHONE_E164:/^\+[1-9]\d{1,14}$/},Oe={NAME_MAX_LENGTH:64,PHONE_MIN_LENGTH:8,PHONE_MAX_LENGTH:16};let Ae=!0;const Ie=async e=>{const t=await e.getItem(me.SEND_DIAGNOSTICS);Ae=null===t||"true"===t},Re=()=>Ae,Ne=3,xe=500,Ce=e=>{const t=e?.status;return"FETCH_ERROR"===t||"TIMEOUT_ERROR"===t||("number"==typeof t?t>=500:(M.warn({message:"unknown error shape; treating as transient",api_name:"auth-refresh",error_message:e instanceof Error?e.message:String(e)}),!0))};function Me(e){const{performRefresh:t,isTransient:r=Ce,maxAttempts:s=Ne,backoffBaseMs:n=xe}=e;let o=null;return function(){return o||(o=(async()=>{for(let e=0;e<s;e++)try{return await t()}catch(t){if(!r(t))return null;if(e===s-1)break;const o=n*2**e+250*Math.random();await new Promise(e=>setTimeout(e,o))}return null})().finally(()=>{o=null}),o)}}const Be="bridge-toast";function De(e){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(Be,{detail:e}))}const ve=e=>De(e),be=(e="Please try again")=>De({title:"Error",description:e,variant:"destructive"}),we=(e="Successfully")=>De({title:"Success",description:e,variant:"default"}),ke=Be,Pe=e=>!!e&&Date.now()>=e-Fe.TOKEN_CLOCK_SKEW_MS,Le=e=>!e||Date.now()>=e-Fe.TOKEN_REFRESH_THRESHOLD_MS,Ue=async()=>Le(ae())?await(te()?.())??null:null,Ge=e=>e?Math.max(0,e-Date.now()):0,He=e=>e?Math.max(0,e-Fe.TOKEN_REFRESH_THRESHOLD_MS-Date.now()):0,Ke=e=>{const t=Math.floor(e/6e4),r=Math.floor(e%6e4/1e3);return t>0?`${t}m ${r}s`:`${r}s`};function $e(e){const t=e.headers.get(Se.ACCESS_TOKEN),r=e.headers.get(Se.REFRESH_TOKEN);if(!t)throw new Error(`Missing ${Se.ACCESS_TOKEN} header in response`);if(!r)throw new Error(`Missing ${Se.REFRESH_TOKEN} header in response`);return{accessToken:t,refreshToken:r}}function We(e){if(!e)return null;const t=e.split(".");if(3!==t.length)return null;try{const e=t[1].replace(/-/g,"+").replace(/_/g,"/"),r=e+"=".repeat((4-e.length%4)%4),s=atob(r),n=JSON.parse(s);return n&&"object"==typeof n&&!Array.isArray(n)?n:null}catch{return null}}function je(e){const t=We(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}function Ve(e,t){try{const r=t.getItem(me.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const s=je(t.getItem(me.ACCESS_TOKEN));return s&&s!==e?"jwt":null}catch{return null}}function Xe(e){try{e.removeItem(me.ACCESS_TOKEN),e.removeItem(me.REFRESH_TOKEN),e.removeItem(me.TOKEN_EXPIRES_AT),e.removeItem(me.USER)}catch{}}function ze(e,t){try{t.setItem(me.SELECTED_ORG_ID,e),t.setItem(me.SELECTED_ORG_NAME,e)}catch{}}class Ye{static instance;events={};constructor(){}static getInstance(){return Ye.instance||(Ye.instance=new Ye),Ye.instance}on(e,t,r){const s="function"==typeof t?t:r;return this.events[e]||(this.events[e]=[]),this.events[e].push(s),()=>{this.off(e,s)}}off(e,t){this.events[e]&&(this.events[e]=this.events[e].filter(e=>e!==t))}emit(e,t){this.events[e]&&this.events[e].forEach(r=>{try{r(t)}catch(t){M.error({message:`Error in event handler for "${e}"`,api_name:"event-emitter",event:e,error_message:t instanceof Error?t.message:String(t)})}})}clear(e){e?delete this.events[e]:this.events={}}}const Je=Ye.getInstance();function Ze(e,t){return Je.on(e,t)}const qe={LIGHT:"light",DARK:"dark",SYSTEM:"system"},Qe=[qe.LIGHT,qe.DARK,qe.SYSTEM],et={FOREGROUND:"foreground",BACKGROUND:"background"},tt={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},rt={bgColor:"linear-gradient(281.8deg, #061522 6.7%, #101F2F 59.64%, #3C3B4F 76.85%, #5D4C63 88.46%, #755770 99.24%)",inputBgColor:"#222D34",sidebarBg:"#0F1419",sidebarBorderColor:"#8F8F8F",widgetBg:"#222D34",settingsGroupBg:"#272626",inputBorderStyle:"solid",inputBorderColor:"#FFFFFF80",inputBorderWidth:"1px",inputBorderOpacity:50,widgetBorderStyle:"solid",widgetBorderColor:"#FFFFFF1A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#8F8F8F",primaryText:"#FFFFFF",secondaryText:"#AFAFAF",tertiaryText:"#8F8F8F",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#FFFFFFFF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#FFFFFF",sideMenuText:"#AFAFAF",sideMenuIcon:"#8F8F8F",sideMenuProfile:"#FFFFFF",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#222D34",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:tt.PILL,chatInputPlaceholder:"Type anything..."},st={bgColor:"linear-gradient(281.8deg, #EEF2FF 6.7%, #E2E8FD 59.64%, #E8DFF4 76.85%, #F4DBE6 88.46%, #FFE1D0 99.24%)",inputBgColor:"#F4F4F5",sidebarBg:"#FFFFFF",sidebarBorderColor:"#9B9B9B",widgetBg:"#FFFFFF",settingsGroupBg:"#1A1A1A10",inputBorderStyle:"solid",inputBorderColor:"#0000001A",inputBorderWidth:"1px",inputBorderOpacity:10,widgetBorderStyle:"solid",widgetBorderColor:"#0000001A",widgetBorderWidth:"1px",widgetBorderOpacity:10,placeholderColor:"#9B9B9B",primaryText:"#1A1A1A",secondaryText:"#6B6B6B",tertiaryText:"#9B9B9B",userMsgBg:"#90629F",userMsgText:"#FFFFFF",userMsgBorderStyle:"none",userMsgBorderColor:"#000000FF",userMsgBorderWidth:"1px",userMsgBorderOpacity:100,sideMenuHeadings:"#1A1A1A",sideMenuText:"#6B6B6B",sideMenuIcon:"#9B9B9B",sideMenuProfile:"#1A1A1A",statusPrimary:{solid:"#90629F",background:"#90629F",text:"#FFFFFF"},statusSecondary:{solid:"#5D5D5D",background:"#F3F3F3",text:"#0D0D0D"},statusSuccess:{solid:"#00A240",background:"#D9F4E4",text:"#FFFFFF"},statusDanger:{solid:"#E02E2A",background:"#FFD9D9",text:"#FFFFFF"},statusWarning:{solid:"#E25507",background:"#FFE7D9",text:"#FFFFFF"},statusInfo:{solid:"#0285FF",background:"#E5F3FF",text:"#FFFFFF"},statusDiscovery:{solid:"#924FF7",background:"#EFE5FE",text:"#FFFFFF"},switchCheckedColor:"#90629F",switchUncheckedColor:"#F4F4F5",fontFamily:"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif",fontFamilyMono:'"SF Mono", ui-monospace, monospace',fontSize:14,borderRadius:16,cornerRadiusMode:tt.PILL,chatInputPlaceholder:"Type anything..."};function nt(e){return e===qe.LIGHT?st:rt}const ot=rt;function it(e,t){const r=e.replace("#","");let s;s=3===r.length?r.split("").map(e=>e+e).join(""):6===r.length?r:"000000";const n=Math.max(0,Math.min(100,t));return`#${s}${Math.round(n/100*255).toString(16).padStart(2,"0")}`.toUpperCase()}function at(e,t){if(!e)return t.fontFamily;switch(e){case"Inter":return"'Inter', sans-serif";case"System":return"system-ui, -apple-system, sans-serif";default:return"'SF Pro Display', -apple-system, BlinkMacSystemFont, sans-serif"}}function ut(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function ct(e,t){if(!e)return t.borderRadius;switch(e){case"none":return 0;case"sm":return 8;case"md":return 12;case"pill":return 16;default:const r=parseInt(e,10);return isNaN(r)?t.borderRadius:r}}function lt(e){switch(e){case"pill":return tt.PILL;case"none":return tt.SHARP;default:return 0===parseInt(e??"",10)?tt.SHARP:tt.ROUNDED}}function dt(e,t,r=qe.DARK){const s=nt(r);if(!e||!t)return s;const n=t.surface?.chatInput?.border||t.surface?.input?.border,o=t.surface?.userMessage?.border,i=t.surface?.widget?.border;return{bgColor:t.surface?.chat?.background||s.bgColor,inputBgColor:t.surface?.chatInput?.background||t.surface?.input?.background||s.inputBgColor,sidebarBg:t.surface?.sideMenu?.background||s.sidebarBg,sidebarBorderColor:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sidebarBorderColor,widgetBg:t.surface?.widget?.background||s.widgetBg,settingsGroupBg:t.surface?.settings?.groupBackground||s.settingsGroupBg,inputBorderStyle:n?.style||s.inputBorderStyle,inputBorderColor:n?.color?it(n.color,n.opacity||100):s.inputBorderColor,inputBorderWidth:n?.width||s.inputBorderWidth,inputBorderOpacity:n?.opacity||100,widgetBorderStyle:i?.style||s.widgetBorderStyle,widgetBorderColor:i?.color?it(i.color,i.opacity||100):s.widgetBorderColor,widgetBorderWidth:i?.width||s.widgetBorderWidth,widgetBorderOpacity:i?.opacity??s.widgetBorderOpacity,placeholderColor:t.surface?.chatInput?.placeholderColor||t.surface?.input?.placeholderColor||s.placeholderColor,primaryText:t.text?.primary||s.primaryText,secondaryText:t.text?.secondary||s.secondaryText,tertiaryText:t.text?.tertiary||s.tertiaryText,userMsgBg:t.surface?.userMessage?.background||s.userMsgBg,userMsgText:t.surface?.userMessage?.textColor||s.userMsgText,userMsgBorderStyle:o?.style||s.userMsgBorderStyle,userMsgBorderColor:o?.color?it(o.color,o.opacity||100):s.userMsgBorderColor,userMsgBorderWidth:o?.width||s.userMsgBorderWidth,userMsgBorderOpacity:o?.opacity||0,sideMenuHeadings:t.surface?.sideMenu?.headingsColor||t.surface?.sideMenu?.headings||s.sideMenuHeadings,sideMenuText:t.surface?.sideMenu?.textContentColor||t.surface?.sideMenu?.textContent||s.sideMenuText,sideMenuIcon:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||s.sideMenuIcon,sideMenuProfile:t.surface?.sideMenu?.profileTextColor||t.surface?.sideMenu?.textProfile||s.sideMenuProfile,statusPrimary:{solid:t.status?.primary?.solid||s.statusPrimary.solid,background:t.status?.primary?.background||s.statusPrimary.background,text:t.status?.primary?.text||s.statusPrimary.text},statusSecondary:{solid:t.status?.secondary?.solid||s.statusSecondary.solid,background:t.status?.secondary?.background||s.statusSecondary.background,text:t.status?.secondary?.text||s.statusSecondary.text},statusSuccess:{solid:t.status?.success?.solid||s.statusSuccess.solid,background:t.status?.success?.background||s.statusSuccess.background,text:t.status?.success?.text||s.statusSuccess.text},statusDanger:{solid:t.status?.danger?.solid||s.statusDanger.solid,background:t.status?.danger?.background||s.statusDanger.background,text:t.status?.danger?.text||s.statusDanger.text},statusWarning:{solid:t.status?.warning?.solid||s.statusWarning.solid,background:t.status?.warning?.background||s.statusWarning.background,text:t.status?.warning?.text||s.statusWarning.text},statusInfo:{solid:t.status?.info?.solid||s.statusInfo.solid,background:t.status?.info?.background||s.statusInfo.background,text:t.status?.info?.text||s.statusInfo.text},statusDiscovery:{solid:t.status?.discovery?.solid||s.statusDiscovery.solid,background:t.status?.discovery?.background||s.statusDiscovery.background,text:t.status?.discovery?.text||s.statusDiscovery.text},switchCheckedColor:t.status?.primary?.solid||s.switchCheckedColor,switchUncheckedColor:t.surface?.chatInput?.background||s.switchUncheckedColor,fontFamily:at(e.typography?.fontFamily,s),fontFamilyMono:ut(e.typography?.fontFamilyMono,s),fontSize:14,borderRadius:ct(e.cornerRadius,s),cornerRadiusMode:lt(e.cornerRadius),chatInputPlaceholder:e.startScreen.inputPlaceholder}}function gt(e,t){let r=e.trim().replace(/^#/,"");if(3!==r.length&&4!==r.length||(r=r.split("").map(e=>e+e).join("")),!/^[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$/.test(r))return e;const s=parseInt(r.slice(0,2),16),n=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16),i=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${s}, ${n}, ${o}, ${Math.round(i*t*1e3)/1e3})`}const pt=s(void 0);function Et(){const e=n(pt);if(!e)throw new Error("useBranding must be used within a BrandingProvider");return e}const Ft=s(null),mt=()=>{const e=n(Ft);if(!e)throw new Error("useStorage must be called inside a <StorageProvider>. Wrap your app's root with <StorageProvider value={browserLocalStorageAdapter}> (or an RN equivalent).");return e};let ft=null;function ht(e){ft=e}const St=()=>ft,Tt=s(null),yt={isConnected:!0,isInternetReachable:!0},_t=()=>{const e=n(Tt),t=o(t=>e?e.subscribe(t):()=>{},[e]),r=o(()=>e?e.getState():yt,[e]);return i(t,r,r)},Ot=e({name:"auth",initialState:{user:null,accessToken:null,refreshToken:null,tokenExpiresAt:null,selectedOrgId:null,isAuthenticated:!1,isLoading:!1},reducers:{setSession:(e,t)=>{const{user:r,accessToken:s,refreshToken:n,expiresIn:o}=t.payload;void 0!==r&&(e.user=r),void 0!==s&&(e.accessToken=s),void 0!==n&&(e.refreshToken=n),void 0!==o?e.tokenExpiresAt=null===o?null:1e3*o:s&&(e.tokenExpiresAt=Date.now()+Fe.TOKEN_DEFAULT_EXPIRY_MS),e.isAuthenticated=Boolean(e.accessToken),e.isLoading=!1},updateUser:(e,t)=>{e.user={...e.user||{},...t.payload}},clearSession:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},sessionExpired:e=>{e.user=null,e.accessToken=null,e.refreshToken=null,e.tokenExpiresAt=null,e.isAuthenticated=!1,e.isLoading=!1},setSelectedOrgId:(e,t)=>{e.selectedOrgId=t.payload??null}}}),{setSession:At,updateUser:It,clearSession:Rt,sessionExpired:Nt,setSelectedOrgId:xt}=Ot.actions,Ct=At,Mt=Rt,Bt=e=>async t=>{const[r,s,n,o]=await Promise.all([e.getItem(me.ACCESS_TOKEN),e.getItem(me.REFRESH_TOKEN),e.getItem(me.TOKEN_EXPIRES_AT),e.getItem(me.USER)]),i=n?parseInt(n,10):null;if((!r||!i||Pe(i))&&!s)return void(r&&await Promise.all([e.removeItem(me.ACCESS_TOKEN),e.removeItem(me.REFRESH_TOKEN),e.removeItem(me.TOKEN_EXPIRES_AT),e.removeItem(me.USER)]));let a=null;if(o)try{a=JSON.parse(o)}catch(e){M.error({message:"Failed to parse stored user during session hydration",component:"sessionSlice",error_message:e instanceof Error?e.message:String(e)})}t(At({user:a,accessToken:r,refreshToken:s,expiresIn:null!=i?i/1e3:null}))},Dt=t();Dt.startListening({matcher:r(At,It,Rt,Nt),effect:async(e,t)=>{const r=St();if(!r)return;const{auth:s}=t.getState(),n=[];n.push(s.accessToken?r.setItem(me.ACCESS_TOKEN,s.accessToken):r.removeItem(me.ACCESS_TOKEN)),n.push(s.refreshToken?r.setItem(me.REFRESH_TOKEN,s.refreshToken):r.removeItem(me.REFRESH_TOKEN)),n.push(null!=s.tokenExpiresAt?r.setItem(me.TOKEN_EXPIRES_AT,String(s.tokenExpiresAt)):r.removeItem(me.TOKEN_EXPIRES_AT)),n.push(s.user?r.setItem(me.USER,JSON.stringify(s.user)):r.removeItem(me.USER)),(Rt.match(e)||Nt.match(e))&&n.push(r.removeItem(me.LOCATION_CACHE),r.removeItem(me.DEBUG_MODE),r.removeItem(me.APPEARANCE_MODE_KEY),r.removeItem(me.LOCATION_ENABLED),r.removeItem(me.STT_AUTO_SEND),r.removeItem(me.STT_IMPLEMENTATION),r.removeItem(me.SEND_DIAGNOSTICS),r.removeItem(me.ACTIVE_CONVERSATION_ID)),await Promise.all(n)}});const vt=Ot.reducer,bt={lastResponseTime:null},wt=e({name:"indicator",initialState:bt,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:e=>{e.addMatcher(r(Rt,Nt),()=>bt)}}),{setLastResponseTime:kt,clearLastResponseTime:Pt}=wt.actions,Lt=wt.reducer;function Ut(e,t){switch(e.kind){case"status_update":return t.setStatusText(e.statusText),t.setIsAgentWorking(!0),void t.onStatusActive?.(e.statusText);case"widget":return void t.pushWidget(e.widget,e.messageId);case"payment":return void t.onPayment(e.payment);case"sign_in":return void t.onSignIn?.(e.signIn);case"error":return void t.onError(e.error);case"text":return void t.appendStreamText(e.text,e.messageId);case"conversation_title":return void t.onConversationTitle?.(e.title);default:return}}const Gt={GOOGLE:"google",APPLE:"apple",MICROSOFT:"microsoft"},Ht={KEEP:"keep",FINALIZE:"finalize",CANCEL:"cancel"};function Kt(e){if(e)return"moyasar"===e.provider?e.config?.given_id:e.payment_id}export{pe as API_ENDPOINTS,qe as APPEARANCE_MODES,Qe as APPEARANCE_MODE_VALUES,Se as AUTH_HEADERS,ye as AUTH_PATHS,ke as BRIDGE_TOAST_EVENT_NAME,pt as BrandingContext,tt as CORNER_RADIUS_MODES,Te as DEVICE_TOKEN_HEADER,Ye as EventEmitter,Ee as FEATURE_FLAGS,Gt as IDP_HINTS,Ht as INDICATOR_TIMER_ACTIONS,_ as LOG_LEVELS,Tt as NetworkContext,et as ORB_POSITIONS,de as ORG_MOUNT_SUFFIX,_e as PATTERNS,Oe as PROFILE_LIMITS,me as STORAGE_KEYS,fe as STT_IMPLEMENTATIONS,Ft as StorageContext,Fe as TIMING,dt as brandingToThemeStyles,l as capitalizeFirst,Xe as clearAuthTokens,Pt as clearLastResponseTime,Rt as clearSession,Me as createTokenRefresher,ot as defaultChatThemeStyles,rt as defaultDarkThemeStyles,Ce as defaultIsTransient,st as defaultLightThemeStyles,Ve as detectOrgSwitch,Ue as ensureFreshToken,Je as eventEmitter,$e as extractTokens,f as formatCVC,d as formatCamelCaseToTitle,p as formatCardNumber,m as formatExpiryDate,Ke as formatTimeRemaining,c as formatTimestamp,u as generateUniqueId,le as getApiUrl,he as getAppearanceModeStorageKey,h as getArrayOfObjects,Z as getBaseUrl,Q as getCustomHeaders,nt as getDefaultThemeStyles,y as getErrorMessage,S as getInitials,Kt as getPaymentId,q as getPaymentProviderHint,Re as getSendDiagnostics,St as getStorageRef,Ge as getTimeUntilExpiry,He as getTimeUntilRefresh,te as getTokenRefreshHandler,Ut as handleSharedEvent,T as hasWidgets,gt as hexToRgba,Ie as hydrateAppBoot,Bt as hydrateSession,Lt as indicatorReducer,G as initLogger,J as initializeChatConfig,ce as isDevMode,Le as isTokenAboutToExpire,Pe as isTokenExpired,ge as joinOrgMountBase,M as logger,Mt as logout,We as parseJwtPayload,je as parseOrgFromJwt,se as readAccessToken,oe as readDeviceToken,ae as readTokenExpiresAt,Ze as registerEventListener,N as registerLoggerContextProvider,R as registerLoggerSink,g as removeSpecialCharsAndSpaces,x as resetLoggerForTests,F as sanitizeExpiryDate,Nt as sessionExpired,Dt as sessionListenerMiddleware,vt as sessionReducer,re as setAccessTokenReader,Ct as setCredentials,ne as setDeviceTokenReader,ue as setIsDev,kt as setLastResponseTime,ht as setModuleStorage,U as setNetworkLoggingEnabled,xt as setSelectedOrgId,At as setSession,ie as setTokenExpiresAtReader,ee as setTokenRefreshHandler,be as showErrorToast,we as showSuccessToast,ve as showToast,a as truncateWordLimit,It as updateUser,Et as useBranding,_t as useNetworkState,mt as useStorage,E as validateExpiryDate,ze as writeOrgToStorage};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1interface/shared-core",
3
- "version": "0.2.0-pipecat.1",
3
+ "version": "0.2.1",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "sideEffects": false,