@1interface/shared-core 0.2.1 → 0.2.3

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,8 +233,23 @@ export declare const defaultLightThemeStyles: ChatThemeStyles;
233
233
 
234
234
  export declare function detectOrgSwitch(activeOrgId: string, storage: SyncKeyValueStorage): OrgSwitchReason;
235
235
 
236
+ export declare function detectTextDirection(text: string | null | undefined, fallback?: TextDirection): DirectionResult;
237
+
236
238
  export declare const DEVICE_TOKEN_HEADER = "x-device-token";
237
239
 
240
+ export declare const DIRECTION_VECTORS: DirectionVector[];
241
+
242
+ export declare interface DirectionResult {
243
+ dir: TextDirection;
244
+ confident: boolean;
245
+ }
246
+
247
+ export declare interface DirectionVector {
248
+ text: string;
249
+ lang?: string;
250
+ expected: TextDirection;
251
+ }
252
+
238
253
  export declare const ensureFreshToken: () => Promise<TokenRefreshResult | null>;
239
254
 
240
255
  export declare class EventEmitter {
@@ -564,6 +579,8 @@ export declare interface ResetPasswordRequest {
564
579
  new_password: string;
565
580
  }
566
581
 
582
+ export declare function resolveDirectionFromLang(tag?: string): TextDirection | null;
583
+
567
584
  export declare type ResolvedTheme = Exclude<AppearanceMode, typeof APPEARANCE_MODES.SYSTEM>;
568
585
 
569
586
  export declare const sanitizeExpiryDate: (value: string) => string;
@@ -784,12 +801,19 @@ export declare interface SyncKeyValueStorage {
784
801
  removeItem(key: string): void;
785
802
  }
786
803
 
804
+ export declare const TEXT_DIRECTION: {
805
+ readonly LTR: "ltr";
806
+ readonly RTL: "rtl";
807
+ };
808
+
787
809
  export declare interface TextColors {
788
810
  primary?: string;
789
811
  secondary?: string;
790
812
  tertiary?: string;
791
813
  }
792
814
 
815
+ export declare type TextDirection = (typeof TEXT_DIRECTION)[keyof typeof TEXT_DIRECTION];
816
+
793
817
  export declare const TIMING: {
794
818
  readonly TOKEN_REFRESH_THRESHOLD_MS: number;
795
819
  readonly TOKEN_CLOCK_SKEW_MS: number;
@@ -840,6 +864,8 @@ export declare const updateUser: ActionCreatorWithNonInferrablePayload<"auth/upd
840
864
 
841
865
  export declare function useBranding(): BrandingContextValue;
842
866
 
867
+ export declare function useMessageDirection(msgId: string, text: string | null | undefined, lang?: string): TextDirection;
868
+
843
869
  export declare const useNetworkState: () => NetworkState;
844
870
 
845
871
  export declare interface UserMessageColors {
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=()=>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{}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),t=require("@reduxjs/toolkit"),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 n=new Date,o=n.getFullYear()%100,a=n.getMonth()+1;return!(s<o||s===o&&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,n=s.getFullYear()%100,o=s.getMonth()+1;if(r<n||r===n&&e<o||e>12)return""}}return e},n={DEBUG:"DEBUG",INFO:"INFO",WARN:"WARN",ERROR:"ERROR"};let o=null,a=null;const i=[];function c(e){if(o=e,i.length>0){const t=i.splice(0,i.length);for(const r of t)e.emit(r)}}function l(e){a=e}function u(e,t){const r=a?function(e){try{return e()??{}}catch{return{}}}(a):{},{message:s,...n}=t,c={...r,...n,level:e,message:s,timestamp:(new Date).toISOString()};o?o.emit(c):(i.length>=200&&i.shift(),i.push(c))}const d={debug(e){u(n.DEBUG,e)},info(e){u(n.INFO,e)},warn(e){u(n.WARN,e)},error(e){u(n.ERROR,e)},flush:()=>o?.flush?.()},p={[n.DEBUG]:0,[n.INFO]:1,[n.WARN]:2,[n.ERROR]:3};function g(e={}){const t=p[e.minLevel??n.DEBUG];return{emit(e){p[e.level]<t||(e.level===n.ERROR?console.error:e.level===n.WARN?console.warn:e.level===n.DEBUG?console.debug:console.info)(e)}}}const x={[n.DEBUG]:5,[n.INFO]:9,[n.WARN]:13,[n.ERROR]:17};function E(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 m(e){const t={};for(const[r,s]of Object.entries(e))void 0!==s&&(t[r]=E(s));return t}let f=!1,F=null,T=!0;function h(e){T=e}function S(e){f||(f=!0,l(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),c(function(e){const t=[g({minLevel:e.consoleMinLevel??(e.isDev?n.DEBUG:n.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,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),c=new o.OTLPLogExporter({url:e.endpoint}),l=new s.LoggerProvider({resource:i,processors:[new s.BatchLogRecordProcessor(c)]});t.logs.setGlobalLoggerProvider(l);const u=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:s,...n}=e;u.emit({severityNumber:x[t],severityText:t,body:JSON.stringify(e),attributes:m(n),timestamp:new Date(s)})},async flush(){await l.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 a=null;function i(){return null!==a&&(clearTimeout(a),a=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?i():null===a&&(a=setTimeout(()=>{a=null,i()},r))},async flush(){await i()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){T&&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&&F?.())}const y=Object.freeze(Object.defineProperty({__proto__:null,initLogger:S,registerPlatformFlushAttacher:function(e){F=e},resetInitLoggerStateForTests:function(){f=!1,F=null,T=!0},setNetworkLoggingEnabled:h},Symbol.toStringTag,{value:"Module"}));let A,O="",_={},R=null,I=()=>null,C=()=>null,N=()=>null,D=!1;const M=()=>R,v=()=>N(),k=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${O}/api${t}`},b="chat",w={CONVERSATIONS:()=>k("/conversations"),CONVERSATION_STREAM:e=>k(`/conversations/${e}`),CONVERSATION_START:e=>k(`/conversations/${e}/start`),WEBRTC_OFFER:e=>k(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>k(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return k("/transcribe")},get BRANDING(){return k("/branding")},get CONFIG(){return k("/config")},get PROFILE(){return k("/profile")},get AUTH_ME(){return k("/auth/me")},get ORGANIZATIONS_EXISTS(){return k("/organizations/exists")},get DEBUG(){return k("/debug")},get TOOL_SERVERS(){return k("/tool-servers")},TOOL_SERVER_AUTH_START:e=>k(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>k(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return k("/tool-servers/auth/exchange")},get LOG(){return k("/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},L={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 U=!0;const H=3,G=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 j=$,V=e=>!!e&&Date.now()>=e-B.TOKEN_CLOCK_SKEW_MS,z=e=>!e||Date.now()>=e-B.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),n=JSON.parse(s);return n&&"object"==typeof n&&!Array.isArray(n)?n:null}catch{return null}}function Y(e){const t=X(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}const J={LTR:"ltr",RTL:"rtl"},q=[[1488,1514],[1519,1522],[1568,1610],[1646,1747],[1749,1749],[1765,1766],[1774,1775],[1786,1791],[1808,1839],[1869,1919],[1920,1957],[1969,1969],[1994,2026],[2048,2069],[2112,2136],[2160,2190],[2208,2239],[64285,64335],[64336,64975],[65008,65019],[65136,65276],[125184,125251]],Z=[[2308,2361],[2392,2401],[2437,2489],[2565,2617],[2693,2745],[2821,2873],[2949,3001],[3077,3129],[3205,3257],[3333,3386],[3461,3526],[3585,3630],[3713,3758],[3904,3948],[4096,4138],[4256,4346],[4608,4680],[6016,6067],[12352,12543],[19968,40959],[44032,55215]],Q=/```[\s\S]*?```|`[^`]*`|(?:https?:\/\/|www\.)\S+|\S+@[\w.-]+\.\w+|[@#][\w-]+/g,ee=["arab","hebr","thaa","syrc","adlm","nkoo"],te=["ar","he","fa","ur","ps","sd","ug","yi","dv","ku","ckb","syr","prs"],re=["und","zxx","mul"];function se(e,t){for(const[r,s]of t)if(e>=r&&e<=s)return!0;return!1}function ne(e,t=J.LTR){const r=(e??"").replace(Q," ");let s=0,n=0;for(const e of r){const t=e.codePointAt(0)??0;se(t,q)?s+=1:(e.toLowerCase()!==e.toUpperCase()||se(t,Z))&&(n+=1)}const o=s+n;return 0===o?{dir:t,confident:!1}:{dir:s/o>=.2?J.RTL:J.LTR,confident:o>=12}}function oe(e){if(!e)return null;const t=e.toLowerCase().split(/[-_]/);for(const e of t.slice(1))if(4===e.length)return ee.indexOf(e)>=0?J.RTL:J.LTR;const r=t[0];return!r||re.indexOf(r)>=0?null:te.indexOf(r)>=0?J.RTL:J.LTR}class ae{static instance;events={};constructor(){}static getInstance(){return ae.instance||(ae.instance=new ae),ae.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 ie=ae.getInstance(),ce={LIGHT:"light",DARK:"dark",SYSTEM:"system"},le=[ce.LIGHT,ce.DARK,ce.SYSTEM],ue={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},de={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:ue.PILL,chatInputPlaceholder:"Type anything..."},pe={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:ue.PILL,chatInputPlaceholder:"Type anything..."};function ge(e){return e===ce.LIGHT?pe:de}const xe=de;function Ee(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 me(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 fe(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function Fe(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 Te(e){switch(e){case"pill":return ue.PILL;case"none":return ue.SHARP;default:return 0===parseInt(e??"",10)?ue.SHARP:ue.ROUNDED}}const he=e.createContext(void 0),Se=e.createContext(null);let ye=null;const Ae=()=>ye,Oe=e.createContext(null),_e={isConnected:!0,isInternetReachable:!0},Re=t.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: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()+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:Ie,updateUser:Ce,clearSession:Ne,sessionExpired:De,setSelectedOrgId:Me}=Re.actions,ve=Ie,ke=Ne,be=t.createListenerMiddleware();be.startListening({matcher:t.isAnyOf(Ie,Ce,Ne,De),effect:async(e,t)=>{const r=Ae();if(!r)return;const{auth:s}=t.getState(),n=[];n.push(s.accessToken?r.setItem(L.ACCESS_TOKEN,s.accessToken):r.removeItem(L.ACCESS_TOKEN)),n.push(s.refreshToken?r.setItem(L.REFRESH_TOKEN,s.refreshToken):r.removeItem(L.REFRESH_TOKEN)),n.push(null!=s.tokenExpiresAt?r.setItem(L.TOKEN_EXPIRES_AT,String(s.tokenExpiresAt)):r.removeItem(L.TOKEN_EXPIRES_AT)),n.push(s.user?r.setItem(L.USER,JSON.stringify(s.user)):r.removeItem(L.USER)),(Ne.match(e)||De.match(e))&&n.push(r.removeItem(L.LOCATION_CACHE),r.removeItem(L.DEBUG_MODE),r.removeItem(L.APPEARANCE_MODE_KEY),r.removeItem(L.LOCATION_ENABLED),r.removeItem(L.STT_AUTO_SEND),r.removeItem(L.STT_IMPLEMENTATION),r.removeItem(L.SEND_DIAGNOSTICS),r.removeItem(L.ACTIVE_CONVERSATION_ID)),await Promise.all(n)}});const we=Re.reducer,Be={lastResponseTime:null},Le=t.createSlice({name:"indicator",initialState:Be,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:e=>{e.addMatcher(t.isAnyOf(Ne,De),()=>Be)}}),{setLastResponseTime:Pe,clearLastResponseTime:Ue}=Le.actions,He=Le.reducer;exports.API_ENDPOINTS=w,exports.APPEARANCE_MODES=ce,exports.APPEARANCE_MODE_VALUES=le,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=j,exports.BrandingContext=he,exports.CORNER_RADIUS_MODES=ue,exports.DEVICE_TOKEN_HEADER="x-device-token",exports.DIRECTION_VECTORS=[{text:"مرحبا كيف حالك اليوم يا صديقي",expected:"rtl"},{text:"שלום מה קורה איתך היום חבר",expected:"rtl"},{text:"Hello, how are you doing today?",expected:"ltr"},{text:"Dune: Part Two كان فيلمًا رائعًا",expected:"rtl"},{text:"The word شكرا means thanks in Arabic",expected:"ltr"},{text:"https://example.com/very/long/path/to/a/page انظر",expected:"rtl"},{text:"شرح الكود\n```js\nconst answer = compute(value);\n```",expected:"rtl"},{text:"السعر ١٢٣٤٥ ريال فقط",expected:"rtl"},{text:"🎉🎉🎉",expected:"ltr"},{text:"12345",expected:"ltr"},{text:"",expected:"ltr"},{text:"Hello مرحبا",expected:"rtl"},{text:"यह एक बहुत अच्छी किताब है जो मुझे बहुत पसंद आई مرحبا",expected:"ltr"},{text:"สวัสดีครับ วันนี้อากาศดีมากและผมสบายดี مرحبا",expected:"ltr"},{text:"ދިވެހި ބަސް ވަރަށް ރީތި",expected:"rtl"},{text:"ܟܬܒܐ ܛܒܐ ܘܪܒܐ",expected:"rtl"},{text:"ߒߞߏ ߞߊ߲ ߘߌ߫",expected:"rtl"},{text:"ࠀࠁࠂࠃࠄࠅ",expected:"rtl"},{text:"ࡀࡁࡂࡃࡄࡅ",expected:"rtl"},{text:"𞤀𞤁𞤂𞤃𞤄𞤅",expected:"rtl"},{text:"ﻣﺮﺣﺒﺎ ﺑﻜﻢ ﻛﻴﻒ ﺣﺎﻟﻜﻢ ﺍﻟﻴﻮﻡ",expected:"rtl"},{text:"ﬡﬢﬣﬤﬥﬦ",expected:"rtl"},{text:"ݐݑݒݓݔݕ",expected:"rtl"},{text:"ࢠࢡࢢࢣࢤࢥ",expected:"rtl"},{text:"ࡰࡱࡲࡳࡴࡵ",expected:"rtl"},{text:"यह एक बहुत अच्छी किताब है",expected:"ltr"},{text:"এটি একটি খুব ভালো বই",expected:"ltr"},{text:"ਇਹ ਇੱਕ ਬਹੁਤ ਵਧੀਆ ਕਿਤਾਬ ਹੈ",expected:"ltr"},{text:"આ એક બહુ સારું પુસ્તક છે",expected:"ltr"},{text:"ଏହା ଏକ ଭଲ ବହି",expected:"ltr"},{text:"இது ஒரு நல்ல புத்தகம்",expected:"ltr"},{text:"ఇది ఒక మంచి పుస్తకం",expected:"ltr"},{text:"ಇದು ಒಂದು ಒಳ್ಳೆಯ ಪುಸ್ತಕ",expected:"ltr"},{text:"ഇതു നല്ല പുസ്തകമാണ്",expected:"ltr"},{text:"මෙය හොඳ පොතක්",expected:"ltr"},{text:"สวัสดีครับ วันนี้อากาศดีมาก",expected:"ltr"},{text:"ສະບາຍດີ ວັນນີ້ອາກາດດີ",expected:"ltr"},{text:"འདི་དཔེ་ཆ་ཡག་པོ་ཞིག་རེད",expected:"ltr"},{text:"ဒါက ကောင်းသော စာအုပ်ဖြစ်သည်",expected:"ltr"},{text:"ეს არის კარგი წიგნი",expected:"ltr"},{text:"ይህ ጥሩ መጽሐፍ ነው",expected:"ltr"},{text:"នេះជាសៀវភៅល្អ",expected:"ltr"},{text:"今日はいい天気ですね",expected:"ltr"},{text:"안녕하세요 오늘 날씨가 좋네요",expected:"ltr"},{text:"Kurdî nivîsîn",lang:"ku-Latn",expected:"ltr"},{text:"Punjabi in Arabic script",lang:"pa-Arab",expected:"rtl"},{text:"Azerbaijani in Arabic script",lang:"az-Arab",expected:"rtl"},{text:"Fulah in Adlam script",lang:"ff-Adlm",expected:"rtl"},{text:"Bambara in N'Ko script",lang:"bm-Nkoo",expected:"rtl"},{text:"Ladino in Hebrew script",lang:"lad-Hebr",expected:"rtl"},{text:"Assyrian Neo-Aramaic in Syriac script",lang:"aii-Syrc",expected:"rtl"},{text:"Dhivehi in Thaana script",lang:"dv-Thaa",expected:"rtl"},{text:"Latin transliteration only",lang:"ar",expected:"rtl"},{text:"Latin transliteration only",lang:"he",expected:"rtl"},{text:"Latin transliteration only",lang:"fa",expected:"rtl"},{text:"Latin transliteration only",lang:"ur",expected:"rtl"},{text:"Latin transliteration only",lang:"ps",expected:"rtl"},{text:"Latin transliteration only",lang:"sd",expected:"rtl"},{text:"Latin transliteration only",lang:"ug",expected:"rtl"},{text:"Latin transliteration only",lang:"yi",expected:"rtl"},{text:"Latin transliteration only",lang:"dv",expected:"rtl"},{text:"Latin transliteration only",lang:"ku",expected:"rtl"},{text:"Latin transliteration only",lang:"ckb",expected:"rtl"},{text:"Latin transliteration only",lang:"syr",expected:"rtl"},{text:"Latin transliteration only",lang:"prs",expected:"rtl"},{text:"مرحبا",lang:"en",expected:"ltr"}],exports.EventEmitter=ae,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=n,exports.NetworkContext=Oe,exports.ORB_POSITIONS={FOREGROUND:"foreground",BACKGROUND:"background"},exports.ORG_MOUNT_SUFFIX=b,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=L,exports.STT_IMPLEMENTATIONS={ONLINE:"online",DEVICE:"device"},exports.StorageContext=Se,exports.TEXT_DIRECTION=J,exports.TIMING=B,exports.brandingToThemeStyles=function(e,t,r=ce.DARK){const s=ge(r);if(!e||!t)return s;const n=t.surface?.chatInput?.border||t.surface?.input?.border,o=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:n?.style||s.inputBorderStyle,inputBorderColor:n?.color?Ee(n.color,n.opacity||100):s.inputBorderColor,inputBorderWidth:n?.width||s.inputBorderWidth,inputBorderOpacity:n?.opacity||100,widgetBorderStyle:a?.style||s.widgetBorderStyle,widgetBorderColor:a?.color?Ee(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:o?.style||s.userMsgBorderStyle,userMsgBorderColor:o?.color?Ee(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:me(e.typography?.fontFamily,s),fontFamilyMono:fe(e.typography?.fontFamilyMono,s),fontSize:14,borderRadius:Fe(e.cornerRadius,s),cornerRadiusMode:Te(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(L.ACCESS_TOKEN),e.removeItem(L.REFRESH_TOKEN),e.removeItem(L.TOKEN_EXPIRES_AT),e.removeItem(L.USER)}catch{}},exports.clearLastResponseTime=Ue,exports.clearSession=Ne,exports.createTokenRefresher=function(e){const{performRefresh:t,isTransient:r=K,maxAttempts:s=H,backoffBaseMs:n=G}=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)}},exports.defaultChatThemeStyles=xe,exports.defaultDarkThemeStyles=de,exports.defaultIsTransient=K,exports.defaultLightThemeStyles=pe,exports.detectOrgSwitch=function(e,t){try{const r=t.getItem(L.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const s=Y(t.getItem(L.ACCESS_TOKEN));return s&&s!==e?"jwt":null}catch{return null}},exports.detectTextDirection=ne,exports.ensureFreshToken=async()=>z(v())?await(M()?.())??null:null,exports.eventEmitter=ie,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(),n=Math.floor(s/6e4),o=Math.floor(s/36e5),a=Math.floor(s/864e5);return n<1?"Just now":n<60?`${n}m ago`:o<24?`${o}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=k,exports.getAppearanceModeStorageKey=e=>e?`${L.APPEARANCE_MODE_KEY}:${e}`:L.APPEARANCE_MODE_KEY,exports.getArrayOfObjects=function(e){return Array.isArray(e)&&Array.isArray(e[0])?e.flat():e},exports.getBaseUrl=()=>O,exports.getCustomHeaders=()=>_,exports.getDefaultThemeStyles=ge,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=()=>A,exports.getSendDiagnostics=()=>U,exports.getStorageRef=Ae,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),n=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16),a=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${s}, ${n}, ${o}, ${Math.round(a*t*1e3)/1e3})`},exports.hydrateAppBoot=async e=>{const t=await e.getItem(L.SEND_DIAGNOSTICS);U=null===t||"true"===t},exports.hydrateSession=e=>async t=>{const[r,s,n,o]=await Promise.all([e.getItem(L.ACCESS_TOKEN),e.getItem(L.REFRESH_TOKEN),e.getItem(L.TOKEN_EXPIRES_AT),e.getItem(L.USER)]),a=n?parseInt(n,10):null;if((!r||!a||V(a))&&!s)return void(r&&await Promise.all([e.removeItem(L.ACCESS_TOKEN),e.removeItem(L.REFRESH_TOKEN),e.removeItem(L.TOKEN_EXPIRES_AT),e.removeItem(L.USER)]));let i=null;if(o)try{i=JSON.parse(o)}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(Ie({user:i,accessToken:r,refreshToken:s,expiresIn:null!=a?a/1e3:null}))},exports.indicatorReducer=He,exports.initLogger=S,exports.initializeChatConfig=e=>{O=e.baseUrl,_=e.customHeaders||{},A=e.paymentProvider},exports.isDevMode=()=>D,exports.isTokenAboutToExpire=z,exports.isTokenExpired=V,exports.joinOrgMountBase=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${b}`:`${e}/${b}`,exports.logger=d,exports.logout=ke,exports.parseJwtPayload=X,exports.parseOrgFromJwt=Y,exports.readAccessToken=()=>I(),exports.readDeviceToken=()=>C(),exports.readTokenExpiresAt=v,exports.registerEventListener=function(e,t){return ie.on(e,t)},exports.registerLoggerContextProvider=l,exports.registerLoggerSink=c,exports.removeSpecialCharsAndSpaces=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",exports.resetLoggerForTests=async function(){o=null,a=null,i.length=0,(await Promise.resolve().then(()=>y)).resetInitLoggerStateForTests()},exports.resolveDirectionFromLang=oe,exports.sanitizeExpiryDate=s,exports.sessionExpired=De,exports.sessionListenerMiddleware=be,exports.sessionReducer=we,exports.setAccessTokenReader=e=>{I=e},exports.setCredentials=ve,exports.setDeviceTokenReader=e=>{C=e},exports.setIsDev=e=>{D=e},exports.setLastResponseTime=Pe,exports.setModuleStorage=function(e){ye=e},exports.setNetworkLoggingEnabled=h,exports.setSelectedOrgId=Me,exports.setSession=Ie,exports.setTokenExpiresAtReader=e=>{N=e},exports.setTokenRefreshHandler=e=>{R=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=Ce,exports.useBranding=function(){const t=e.useContext(he);if(!t)throw new Error("useBranding must be used within a BrandingProvider");return t},exports.useMessageDirection=function(t,r,s){const n=e.useRef(null),o=r??"";n.current&&n.current.msgId===t&&o.startsWith(n.current.text)||(n.current={msgId:t,text:o,dir:J.LTR,locked:!1});const a=n.current;a.text=o;const i=oe(s);if(i)a.dir=i,a.locked=!0;else if(!a.locked){const{dir:e,confident:t}=ne(o);a.dir=e,a.locked=t}return a.dir},exports.useNetworkState=()=>{const t=e.useContext(Oe),r=e.useCallback(e=>t?t.subscribe(e):()=>{},[t]),s=e.useCallback(()=>t?t.getState():_e,[t]);return e.useSyncExternalStore(r,s,s)},exports.useStorage=()=>{const t=e.useContext(Se);if(!t)throw new Error("useStorage must be called inside a <StorageProvider>. Wrap your app's root with <StorageProvider value={browserLocalStorageAdapter}> (or an RN equivalent).");return t},exports.validateExpiryDate=r,exports.writeOrgToStorage=function(e,t){try{t.setItem(L.SELECTED_ORG_ID,e),t.setItem(L.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=()=>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};
1
+ import{useRef as e,createContext as t,useContext as r,useCallback as n,useSyncExternalStore as s}from"react";import{createSlice as o,createListenerMiddleware as a,isAnyOf as i}from"@reduxjs/toolkit";const c=(e,t)=>{if(!e)return"";const r=e.split(" ");return r.length>t?r.slice(0,t).join(" "):e},l=()=>"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}),u=(e,t=new Date)=>{if(!e)return"";const r=new Date(e);if(isNaN(r.getTime()))return"";const n=t.getTime()-r.getTime(),s=Math.floor(n/6e4),o=Math.floor(n/36e5),a=Math.floor(n/864e5);return s<1?"Just now":s<60?`${s}m ago`:o<24?`${o}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)},d=e=>e?e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"",g=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():"",p=e=>e?e.toLowerCase().replace(/[^a-z0-9\s]/g,"").replace(/\s+/g,"").trim():"",E=e=>e.replace(/\D/g,"").slice(0,16).replace(/(.{4})/g,"$1 ").trim(),x=e=>{const t=e.match(/^(\d{2})\/(\d{2})$/);if(!t)return!1;const r=Number(t[1]),n=Number(t[2]);if(r<1||r>12)return!1;const s=new Date,o=s.getFullYear()%100,a=s.getMonth()+1;return!(n<o||n===o&&r<a||r>12)},f=e=>{if(!e)return"";if(!x(e)){const t=e.match(/^(\d{2})\/(\d{2})$/);if(t){const e=Number(t[1]),r=Number(t[2]),n=new Date,s=n.getFullYear()%100,o=n.getMonth()+1;if(r<s||r===s&&e<o||e>12)return""}}return e},F=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:""},m=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 R=[];function I(e){if(O=e,R.length>0){const t=R.splice(0,R.length);for(const r of t)e.emit(r)}}function N(e){A=e}async function C(){O=null,A=null,R.length=0,(await Promise.resolve().then(()=>K)).resetInitLoggerStateForTests()}function M(e,t){const r=A?function(e){try{return e()??{}}catch{return{}}}(A):{},{message:n,...s}=t,o={...r,...s,level:e,message:n,timestamp:(new Date).toISOString()};O?O.emit(o):(R.length>=200&&R.shift(),R.push(o))}const v={debug(e){M(_.DEBUG,e)},info(e){M(_.INFO,e)},warn(e){M(_.WARN,e)},error(e){M(_.ERROR,e)},flush:()=>O?.flush?.()},D={[_.DEBUG]:0,[_.INFO]:1,[_.WARN]:2,[_.ERROR]:3};function B(e={}){const t=D[e.minLevel??_.DEBUG];return{emit(e){D[e.level]<t||(e.level===_.ERROR?console.error:e.level===_.WARN?console.warn:e.level===_.DEBUG?console.debug:console.info)(e)}}}const b={[_.DEBUG]:5,[_.INFO]:9,[_.WARN]:13,[_.ERROR]:17};function w(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 k(e){const t={};for(const[r,n]of Object.entries(e))void 0!==n&&(t[r]=w(n));return t}let L=!1,P=null,U=!0;function G(e){U=e}function H(e){L||(L=!0,N(function(e){const t={app_name:e.appName,app_version:e.appVersion,environment:e.environment};return()=>({...t,...e.getContext()})}(e)),I(function(e){const t=[B({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,n=null;const s=[];function o(){n||(n=async function(){const[t,n,o,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),c=new o.OTLPLogExporter({url:e.endpoint}),l=new n.LoggerProvider({resource:i,processors:[new n.BatchLogRecordProcessor(c)]});t.logs.setGlobalLoggerProvider(l);const u=t.logs.getLogger(e.resourceAttrs["service.name"]??"app");if(r={emit(e){const{level:t,message:r,timestamp:n,...s}=e;u.emit({severityNumber:b[t],severityText:t,body:JSON.stringify(e),attributes:k(s),timestamp:new Date(n)})},async flush(){await l.forceFlush()}},s.length>0){const e=s.splice(0,s.length);for(const t of e)r.emit(t)}}().catch(()=>{s.length=0,r=null,t=!0}))}return{emit(e){t||(r?r.emit(e):(o(),s.length>=200&&s.shift(),s.push(e)))},async flush(){(n||r)&&(o(),await n,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,n=e.maxQueueSize??2048,s=e.wrapBatch??(e=>e),o=[];let a=null;function i(){return null!==a&&(clearTimeout(a),a=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(s(t)),keepalive:!0}).then(()=>{}).catch(()=>{});var t}return{emit(e){o.length>=n&&o.shift(),o.push(e),o.length>=t?i():null===a&&(a=setTimeout(()=>{a=null,i()},r))},async flush(){await i()}}}({endpoint:e.otlpEndpoint});t.push({emit(e){U&&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 K=Object.freeze(Object.defineProperty({__proto__:null,initLogger:H,registerPlatformFlushAttacher:function(e){P=e},resetInitLoggerStateForTests:function(){L=!1,P=null,U=!0},setNetworkLoggingEnabled:G},Symbol.toStringTag,{value:"Module"}));let $,W="",j={},z=null,V=()=>null,X=()=>null,Y=()=>null,J=!1;const Z=e=>{W=e.baseUrl,j=e.customHeaders||{},$=e.paymentProvider},q=()=>W,Q=()=>$,ee=()=>j,te=e=>{z=e},re=()=>z,ne=e=>{V=e},se=()=>V(),oe=e=>{X=e},ae=()=>X(),ie=e=>{Y=e},ce=()=>Y(),le=e=>{J=e},ue=()=>J,de=e=>{const t=e.startsWith("/")?e:`/${e}`;return`${W}/api${t}`},ge="chat",pe=(e,t)=>t?`${e}/${encodeURIComponent(t)}/${ge}`:`${e}/${ge}`,Ee={CONVERSATIONS:()=>de("/conversations"),CONVERSATION_STREAM:e=>de(`/conversations/${e}`),CONVERSATION_START:e=>de(`/conversations/${e}/start`),WEBRTC_OFFER:e=>de(`/conversations/${e}/webrtc/offer`),WEBRTC_ICE:e=>de(`/conversations/${e}/webrtc/ice`),get TRANSCRIBE(){return de("/transcribe")},get BRANDING(){return de("/branding")},get CONFIG(){return de("/config")},get PROFILE(){return de("/profile")},get AUTH_ME(){return de("/auth/me")},get ORGANIZATIONS_EXISTS(){return de("/organizations/exists")},get DEBUG(){return de("/debug")},get TOOL_SERVERS(){return de("/tool-servers")},TOOL_SERVER_AUTH_START:e=>de(`/tool-servers/${e}/auth/start`),TOOL_SERVER_AUTH_CONNECTION:e=>de(`/tool-servers/${e}/auth/connection`),get TOOL_SERVERS_SIGN_IN_EXCHANGE(){return de("/tool-servers/auth/exchange")},get LOG(){return de("/log")}},xe={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},Fe={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"},me={ONLINE:"online",DEVICE:"device"},he=e=>e?`${Fe.APPEARANCE_MODE_KEY}:${e}`:Fe.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 Re=async e=>{const t=await e.getItem(Fe.SEND_DIAGNOSTICS);Ae=null===t||"true"===t},Ie=()=>Ae,Ne=3,Ce=500,Me=e=>{const t=e?.status;return"FETCH_ERROR"===t||"TIMEOUT_ERROR"===t||("number"==typeof t?t>=500:(v.warn({message:"unknown error shape; treating as transient",api_name:"auth-refresh",error_message:e instanceof Error?e.message:String(e)}),!0))};function ve(e){const{performRefresh:t,isTransient:r=Me,maxAttempts:n=Ne,backoffBaseMs:s=Ce}=e;let o=null;return function(){return o||(o=(async()=>{for(let e=0;e<n;e++)try{return await t()}catch(t){if(!r(t))return null;if(e===n-1)break;const o=s*2**e+250*Math.random();await new Promise(e=>setTimeout(e,o))}return null})().finally(()=>{o=null}),o)}}const De="bridge-toast";function Be(e){"undefined"!=typeof window&&window.dispatchEvent(new CustomEvent(De,{detail:e}))}const be=e=>Be(e),we=(e="Please try again")=>Be({title:"Error",description:e,variant:"destructive"}),ke=(e="Successfully")=>Be({title:"Success",description:e,variant:"default"}),Le=De,Pe=e=>!!e&&Date.now()>=e-fe.TOKEN_CLOCK_SKEW_MS,Ue=e=>!e||Date.now()>=e-fe.TOKEN_REFRESH_THRESHOLD_MS,Ge=async()=>Ue(ce())?await(re()?.())??null:null,He=e=>e?Math.max(0,e-Date.now()):0,Ke=e=>e?Math.max(0,e-fe.TOKEN_REFRESH_THRESHOLD_MS-Date.now()):0,$e=e=>{const t=Math.floor(e/6e4),r=Math.floor(e%6e4/1e3);return t>0?`${t}m ${r}s`:`${r}s`};function We(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 je(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),n=atob(r),s=JSON.parse(n);return s&&"object"==typeof s&&!Array.isArray(s)?s:null}catch{return null}}function ze(e){const t=je(e),r=t?.org_id;return"string"==typeof r&&r.length>0?r:null}function Ve(e,t){try{const r=t.getItem(Fe.SELECTED_ORG_ID);if(r&&r!==e)return"storage";const n=ze(t.getItem(Fe.ACCESS_TOKEN));return n&&n!==e?"jwt":null}catch{return null}}function Xe(e){try{e.removeItem(Fe.ACCESS_TOKEN),e.removeItem(Fe.REFRESH_TOKEN),e.removeItem(Fe.TOKEN_EXPIRES_AT),e.removeItem(Fe.USER)}catch{}}function Ye(e,t){try{t.setItem(Fe.SELECTED_ORG_ID,e),t.setItem(Fe.SELECTED_ORG_NAME,e)}catch{}}const Je={LTR:"ltr",RTL:"rtl"},Ze=[[1488,1514],[1519,1522],[1568,1610],[1646,1747],[1749,1749],[1765,1766],[1774,1775],[1786,1791],[1808,1839],[1869,1919],[1920,1957],[1969,1969],[1994,2026],[2048,2069],[2112,2136],[2160,2190],[2208,2239],[64285,64335],[64336,64975],[65008,65019],[65136,65276],[125184,125251]],qe=[[2308,2361],[2392,2401],[2437,2489],[2565,2617],[2693,2745],[2821,2873],[2949,3001],[3077,3129],[3205,3257],[3333,3386],[3461,3526],[3585,3630],[3713,3758],[3904,3948],[4096,4138],[4256,4346],[4608,4680],[6016,6067],[12352,12543],[19968,40959],[44032,55215]],Qe=/```[\s\S]*?```|`[^`]*`|(?:https?:\/\/|www\.)\S+|\S+@[\w.-]+\.\w+|[@#][\w-]+/g,et=["arab","hebr","thaa","syrc","adlm","nkoo"],tt=["ar","he","fa","ur","ps","sd","ug","yi","dv","ku","ckb","syr","prs"],rt=["und","zxx","mul"];function nt(e,t){for(const[r,n]of t)if(e>=r&&e<=n)return!0;return!1}function st(e,t=Je.LTR){const r=(e??"").replace(Qe," ");let n=0,s=0;for(const e of r){const t=e.codePointAt(0)??0;nt(t,Ze)?n+=1:(e.toLowerCase()!==e.toUpperCase()||nt(t,qe))&&(s+=1)}const o=n+s;return 0===o?{dir:t,confident:!1}:{dir:n/o>=.2?Je.RTL:Je.LTR,confident:o>=12}}function ot(e){if(!e)return null;const t=e.toLowerCase().split(/[-_]/);for(const e of t.slice(1))if(4===e.length)return et.indexOf(e)>=0?Je.RTL:Je.LTR;const r=t[0];return!r||rt.indexOf(r)>=0?null:tt.indexOf(r)>=0?Je.RTL:Je.LTR}function at(t,r,n){const s=e(null),o=r??"";s.current&&s.current.msgId===t&&o.startsWith(s.current.text)||(s.current={msgId:t,text:o,dir:Je.LTR,locked:!1});const a=s.current;a.text=o;const i=ot(n);if(i)a.dir=i,a.locked=!0;else if(!a.locked){const{dir:e,confident:t}=st(o);a.dir=e,a.locked=t}return a.dir}const it=[{text:"مرحبا كيف حالك اليوم يا صديقي",expected:"rtl"},{text:"שלום מה קורה איתך היום חבר",expected:"rtl"},{text:"Hello, how are you doing today?",expected:"ltr"},{text:"Dune: Part Two كان فيلمًا رائعًا",expected:"rtl"},{text:"The word شكرا means thanks in Arabic",expected:"ltr"},{text:"https://example.com/very/long/path/to/a/page انظر",expected:"rtl"},{text:"شرح الكود\n```js\nconst answer = compute(value);\n```",expected:"rtl"},{text:"السعر ١٢٣٤٥ ريال فقط",expected:"rtl"},{text:"🎉🎉🎉",expected:"ltr"},{text:"12345",expected:"ltr"},{text:"",expected:"ltr"},{text:"Hello مرحبا",expected:"rtl"},{text:"यह एक बहुत अच्छी किताब है जो मुझे बहुत पसंद आई مرحبا",expected:"ltr"},{text:"สวัสดีครับ วันนี้อากาศดีมากและผมสบายดี مرحبا",expected:"ltr"},{text:"ދިވެހި ބަސް ވަރަށް ރީތި",expected:"rtl"},{text:"ܟܬܒܐ ܛܒܐ ܘܪܒܐ",expected:"rtl"},{text:"ߒߞߏ ߞߊ߲ ߘߌ߫",expected:"rtl"},{text:"ࠀࠁࠂࠃࠄࠅ",expected:"rtl"},{text:"ࡀࡁࡂࡃࡄࡅ",expected:"rtl"},{text:"𞤀𞤁𞤂𞤃𞤄𞤅",expected:"rtl"},{text:"ﻣﺮﺣﺒﺎ ﺑﻜﻢ ﻛﻴﻒ ﺣﺎﻟﻜﻢ ﺍﻟﻴﻮﻡ",expected:"rtl"},{text:"ﬡﬢﬣﬤﬥﬦ",expected:"rtl"},{text:"ݐݑݒݓݔݕ",expected:"rtl"},{text:"ࢠࢡࢢࢣࢤࢥ",expected:"rtl"},{text:"ࡰࡱࡲࡳࡴࡵ",expected:"rtl"},{text:"यह एक बहुत अच्छी किताब है",expected:"ltr"},{text:"এটি একটি খুব ভালো বই",expected:"ltr"},{text:"ਇਹ ਇੱਕ ਬਹੁਤ ਵਧੀਆ ਕਿਤਾਬ ਹੈ",expected:"ltr"},{text:"આ એક બહુ સારું પુસ્તક છે",expected:"ltr"},{text:"ଏହା ଏକ ଭଲ ବହି",expected:"ltr"},{text:"இது ஒரு நல்ல புத்தகம்",expected:"ltr"},{text:"ఇది ఒక మంచి పుస్తకం",expected:"ltr"},{text:"ಇದು ಒಂದು ಒಳ್ಳೆಯ ಪುಸ್ತಕ",expected:"ltr"},{text:"ഇതു നല്ല പുസ്തകമാണ്",expected:"ltr"},{text:"මෙය හොඳ පොතක්",expected:"ltr"},{text:"สวัสดีครับ วันนี้อากาศดีมาก",expected:"ltr"},{text:"ສະບາຍດີ ວັນນີ້ອາກາດດີ",expected:"ltr"},{text:"འདི་དཔེ་ཆ་ཡག་པོ་ཞིག་རེད",expected:"ltr"},{text:"ဒါက ကောင်းသော စာအုပ်ဖြစ်သည်",expected:"ltr"},{text:"ეს არის კარგი წიგნი",expected:"ltr"},{text:"ይህ ጥሩ መጽሐፍ ነው",expected:"ltr"},{text:"នេះជាសៀវភៅល្អ",expected:"ltr"},{text:"今日はいい天気ですね",expected:"ltr"},{text:"안녕하세요 오늘 날씨가 좋네요",expected:"ltr"},{text:"Kurdî nivîsîn",lang:"ku-Latn",expected:"ltr"},{text:"Punjabi in Arabic script",lang:"pa-Arab",expected:"rtl"},{text:"Azerbaijani in Arabic script",lang:"az-Arab",expected:"rtl"},{text:"Fulah in Adlam script",lang:"ff-Adlm",expected:"rtl"},{text:"Bambara in N'Ko script",lang:"bm-Nkoo",expected:"rtl"},{text:"Ladino in Hebrew script",lang:"lad-Hebr",expected:"rtl"},{text:"Assyrian Neo-Aramaic in Syriac script",lang:"aii-Syrc",expected:"rtl"},{text:"Dhivehi in Thaana script",lang:"dv-Thaa",expected:"rtl"},{text:"Latin transliteration only",lang:"ar",expected:"rtl"},{text:"Latin transliteration only",lang:"he",expected:"rtl"},{text:"Latin transliteration only",lang:"fa",expected:"rtl"},{text:"Latin transliteration only",lang:"ur",expected:"rtl"},{text:"Latin transliteration only",lang:"ps",expected:"rtl"},{text:"Latin transliteration only",lang:"sd",expected:"rtl"},{text:"Latin transliteration only",lang:"ug",expected:"rtl"},{text:"Latin transliteration only",lang:"yi",expected:"rtl"},{text:"Latin transliteration only",lang:"dv",expected:"rtl"},{text:"Latin transliteration only",lang:"ku",expected:"rtl"},{text:"Latin transliteration only",lang:"ckb",expected:"rtl"},{text:"Latin transliteration only",lang:"syr",expected:"rtl"},{text:"Latin transliteration only",lang:"prs",expected:"rtl"},{text:"مرحبا",lang:"en",expected:"ltr"}];class ct{static instance;events={};constructor(){}static getInstance(){return ct.instance||(ct.instance=new ct),ct.instance}on(e,t,r){const n="function"==typeof t?t:r;return this.events[e]||(this.events[e]=[]),this.events[e].push(n),()=>{this.off(e,n)}}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){v.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 lt=ct.getInstance();function ut(e,t){return lt.on(e,t)}const dt={LIGHT:"light",DARK:"dark",SYSTEM:"system"},gt=[dt.LIGHT,dt.DARK,dt.SYSTEM],pt={FOREGROUND:"foreground",BACKGROUND:"background"},Et={PILL:"pill",ROUNDED:"rounded",SHARP:"sharp"},xt={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:Et.PILL,chatInputPlaceholder:"Type anything..."},ft={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:Et.PILL,chatInputPlaceholder:"Type anything..."};function Ft(e){return e===dt.LIGHT?ft:xt}const mt=xt;function ht(e,t){const r=e.replace("#","");let n;n=3===r.length?r.split("").map(e=>e+e).join(""):6===r.length?r:"000000";const s=Math.max(0,Math.min(100,t));return`#${n}${Math.round(s/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 Tt(e,t){return e?`"${e}", ui-monospace, monospace`:t.fontFamilyMono}function yt(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 _t(e){switch(e){case"pill":return Et.PILL;case"none":return Et.SHARP;default:return 0===parseInt(e??"",10)?Et.SHARP:Et.ROUNDED}}function Ot(e,t,r=dt.DARK){const n=Ft(r);if(!e||!t)return n;const s=t.surface?.chatInput?.border||t.surface?.input?.border,o=t.surface?.userMessage?.border,a=t.surface?.widget?.border;return{bgColor:t.surface?.chat?.background||n.bgColor,inputBgColor:t.surface?.chatInput?.background||t.surface?.input?.background||n.inputBgColor,sidebarBg:t.surface?.sideMenu?.background||n.sidebarBg,sidebarBorderColor:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||n.sidebarBorderColor,widgetBg:t.surface?.widget?.background||n.widgetBg,settingsGroupBg:t.surface?.settings?.groupBackground||n.settingsGroupBg,inputBorderStyle:s?.style||n.inputBorderStyle,inputBorderColor:s?.color?ht(s.color,s.opacity||100):n.inputBorderColor,inputBorderWidth:s?.width||n.inputBorderWidth,inputBorderOpacity:s?.opacity||100,widgetBorderStyle:a?.style||n.widgetBorderStyle,widgetBorderColor:a?.color?ht(a.color,a.opacity||100):n.widgetBorderColor,widgetBorderWidth:a?.width||n.widgetBorderWidth,widgetBorderOpacity:a?.opacity??n.widgetBorderOpacity,placeholderColor:t.surface?.chatInput?.placeholderColor||t.surface?.input?.placeholderColor||n.placeholderColor,primaryText:t.text?.primary||n.primaryText,secondaryText:t.text?.secondary||n.secondaryText,tertiaryText:t.text?.tertiary||n.tertiaryText,userMsgBg:t.surface?.userMessage?.background||n.userMsgBg,userMsgText:t.surface?.userMessage?.textColor||n.userMsgText,userMsgBorderStyle:o?.style||n.userMsgBorderStyle,userMsgBorderColor:o?.color?ht(o.color,o.opacity||100):n.userMsgBorderColor,userMsgBorderWidth:o?.width||n.userMsgBorderWidth,userMsgBorderOpacity:o?.opacity||0,sideMenuHeadings:t.surface?.sideMenu?.headingsColor||t.surface?.sideMenu?.headings||n.sideMenuHeadings,sideMenuText:t.surface?.sideMenu?.textContentColor||t.surface?.sideMenu?.textContent||n.sideMenuText,sideMenuIcon:t.surface?.sideMenu?.iconColor||t.surface?.sideMenu?.icons||n.sideMenuIcon,sideMenuProfile:t.surface?.sideMenu?.profileTextColor||t.surface?.sideMenu?.textProfile||n.sideMenuProfile,statusPrimary:{solid:t.status?.primary?.solid||n.statusPrimary.solid,background:t.status?.primary?.background||n.statusPrimary.background,text:t.status?.primary?.text||n.statusPrimary.text},statusSecondary:{solid:t.status?.secondary?.solid||n.statusSecondary.solid,background:t.status?.secondary?.background||n.statusSecondary.background,text:t.status?.secondary?.text||n.statusSecondary.text},statusSuccess:{solid:t.status?.success?.solid||n.statusSuccess.solid,background:t.status?.success?.background||n.statusSuccess.background,text:t.status?.success?.text||n.statusSuccess.text},statusDanger:{solid:t.status?.danger?.solid||n.statusDanger.solid,background:t.status?.danger?.background||n.statusDanger.background,text:t.status?.danger?.text||n.statusDanger.text},statusWarning:{solid:t.status?.warning?.solid||n.statusWarning.solid,background:t.status?.warning?.background||n.statusWarning.background,text:t.status?.warning?.text||n.statusWarning.text},statusInfo:{solid:t.status?.info?.solid||n.statusInfo.solid,background:t.status?.info?.background||n.statusInfo.background,text:t.status?.info?.text||n.statusInfo.text},statusDiscovery:{solid:t.status?.discovery?.solid||n.statusDiscovery.solid,background:t.status?.discovery?.background||n.statusDiscovery.background,text:t.status?.discovery?.text||n.statusDiscovery.text},switchCheckedColor:t.status?.primary?.solid||n.switchCheckedColor,switchUncheckedColor:t.surface?.chatInput?.background||n.switchUncheckedColor,fontFamily:St(e.typography?.fontFamily,n),fontFamilyMono:Tt(e.typography?.fontFamilyMono,n),fontSize:14,borderRadius:yt(e.cornerRadius,n),cornerRadiusMode:_t(e.cornerRadius),chatInputPlaceholder:e.startScreen.inputPlaceholder}}function At(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 n=parseInt(r.slice(0,2),16),s=parseInt(r.slice(2,4),16),o=parseInt(r.slice(4,6),16),a=8===r.length?parseInt(r.slice(6,8),16)/255:1;return`rgba(${n}, ${s}, ${o}, ${Math.round(a*t*1e3)/1e3})`}const Rt=t(void 0);function It(){const e=r(Rt);if(!e)throw new Error("useBranding must be used within a BrandingProvider");return e}const Nt=t(null),Ct=()=>{const e=r(Nt);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 Mt=null;function vt(e){Mt=e}const Dt=()=>Mt,Bt=t(null),bt={isConnected:!0,isInternetReachable:!0},wt=()=>{const e=r(Bt),t=n(t=>e?e.subscribe(t):()=>{},[e]),o=n(()=>e?e.getState():bt,[e]);return s(t,o,o)},kt=o({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:n,refreshToken:s,expiresIn:o}=t.payload;void 0!==r&&(e.user=r),void 0!==n&&(e.accessToken=n),void 0!==s&&(e.refreshToken=s),void 0!==o?e.tokenExpiresAt=null===o?null:1e3*o:n&&(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:Lt,updateUser:Pt,clearSession:Ut,sessionExpired:Gt,setSelectedOrgId:Ht}=kt.actions,Kt=Lt,$t=Ut,Wt=e=>async t=>{const[r,n,s,o]=await Promise.all([e.getItem(Fe.ACCESS_TOKEN),e.getItem(Fe.REFRESH_TOKEN),e.getItem(Fe.TOKEN_EXPIRES_AT),e.getItem(Fe.USER)]),a=s?parseInt(s,10):null;if((!r||!a||Pe(a))&&!n)return void(r&&await Promise.all([e.removeItem(Fe.ACCESS_TOKEN),e.removeItem(Fe.REFRESH_TOKEN),e.removeItem(Fe.TOKEN_EXPIRES_AT),e.removeItem(Fe.USER)]));let i=null;if(o)try{i=JSON.parse(o)}catch(e){v.error({message:"Failed to parse stored user during session hydration",component:"sessionSlice",error_message:e instanceof Error?e.message:String(e)})}t(Lt({user:i,accessToken:r,refreshToken:n,expiresIn:null!=a?a/1e3:null}))},jt=a();jt.startListening({matcher:i(Lt,Pt,Ut,Gt),effect:async(e,t)=>{const r=Dt();if(!r)return;const{auth:n}=t.getState(),s=[];s.push(n.accessToken?r.setItem(Fe.ACCESS_TOKEN,n.accessToken):r.removeItem(Fe.ACCESS_TOKEN)),s.push(n.refreshToken?r.setItem(Fe.REFRESH_TOKEN,n.refreshToken):r.removeItem(Fe.REFRESH_TOKEN)),s.push(null!=n.tokenExpiresAt?r.setItem(Fe.TOKEN_EXPIRES_AT,String(n.tokenExpiresAt)):r.removeItem(Fe.TOKEN_EXPIRES_AT)),s.push(n.user?r.setItem(Fe.USER,JSON.stringify(n.user)):r.removeItem(Fe.USER)),(Ut.match(e)||Gt.match(e))&&s.push(r.removeItem(Fe.LOCATION_CACHE),r.removeItem(Fe.DEBUG_MODE),r.removeItem(Fe.APPEARANCE_MODE_KEY),r.removeItem(Fe.LOCATION_ENABLED),r.removeItem(Fe.STT_AUTO_SEND),r.removeItem(Fe.STT_IMPLEMENTATION),r.removeItem(Fe.SEND_DIAGNOSTICS),r.removeItem(Fe.ACTIVE_CONVERSATION_ID)),await Promise.all(s)}});const zt=kt.reducer,Vt={lastResponseTime:null},Xt=o({name:"indicator",initialState:Vt,reducers:{setLastResponseTime(e,t){e.lastResponseTime=t.payload},clearLastResponseTime(e){e.lastResponseTime=null}},extraReducers:e=>{e.addMatcher(i(Ut,Gt),()=>Vt)}}),{setLastResponseTime:Yt,clearLastResponseTime:Jt}=Xt.actions,Zt=Xt.reducer;function qt(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 Qt={GOOGLE:"google",APPLE:"apple",MICROSOFT:"microsoft"},er={KEEP:"keep",FINALIZE:"finalize",CANCEL:"cancel"};function tr(e){if(e)return"moyasar"===e.provider?e.config?.given_id:e.payment_id}export{Ee as API_ENDPOINTS,dt as APPEARANCE_MODES,gt as APPEARANCE_MODE_VALUES,Se as AUTH_HEADERS,ye as AUTH_PATHS,Le as BRIDGE_TOAST_EVENT_NAME,Rt as BrandingContext,Et as CORNER_RADIUS_MODES,Te as DEVICE_TOKEN_HEADER,it as DIRECTION_VECTORS,ct as EventEmitter,xe as FEATURE_FLAGS,Qt as IDP_HINTS,er as INDICATOR_TIMER_ACTIONS,_ as LOG_LEVELS,Bt as NetworkContext,pt as ORB_POSITIONS,ge as ORG_MOUNT_SUFFIX,_e as PATTERNS,Oe as PROFILE_LIMITS,Fe as STORAGE_KEYS,me as STT_IMPLEMENTATIONS,Nt as StorageContext,Je as TEXT_DIRECTION,fe as TIMING,Ot as brandingToThemeStyles,d as capitalizeFirst,Xe as clearAuthTokens,Jt as clearLastResponseTime,Ut as clearSession,ve as createTokenRefresher,mt as defaultChatThemeStyles,xt as defaultDarkThemeStyles,Me as defaultIsTransient,ft as defaultLightThemeStyles,Ve as detectOrgSwitch,st as detectTextDirection,Ge as ensureFreshToken,lt as eventEmitter,We as extractTokens,m as formatCVC,g as formatCamelCaseToTitle,E as formatCardNumber,F as formatExpiryDate,$e as formatTimeRemaining,u as formatTimestamp,l as generateUniqueId,de as getApiUrl,he as getAppearanceModeStorageKey,h as getArrayOfObjects,q as getBaseUrl,ee as getCustomHeaders,Ft as getDefaultThemeStyles,y as getErrorMessage,S as getInitials,tr as getPaymentId,Q as getPaymentProviderHint,Ie as getSendDiagnostics,Dt as getStorageRef,He as getTimeUntilExpiry,Ke as getTimeUntilRefresh,re as getTokenRefreshHandler,qt as handleSharedEvent,T as hasWidgets,At as hexToRgba,Re as hydrateAppBoot,Wt as hydrateSession,Zt as indicatorReducer,H as initLogger,Z as initializeChatConfig,ue as isDevMode,Ue as isTokenAboutToExpire,Pe as isTokenExpired,pe as joinOrgMountBase,v as logger,$t as logout,je as parseJwtPayload,ze as parseOrgFromJwt,se as readAccessToken,ae as readDeviceToken,ce as readTokenExpiresAt,ut as registerEventListener,N as registerLoggerContextProvider,I as registerLoggerSink,p as removeSpecialCharsAndSpaces,C as resetLoggerForTests,ot as resolveDirectionFromLang,f as sanitizeExpiryDate,Gt as sessionExpired,jt as sessionListenerMiddleware,zt as sessionReducer,ne as setAccessTokenReader,Kt as setCredentials,oe as setDeviceTokenReader,le as setIsDev,Yt as setLastResponseTime,vt as setModuleStorage,G as setNetworkLoggingEnabled,Ht as setSelectedOrgId,Lt as setSession,ie as setTokenExpiresAtReader,te as setTokenRefreshHandler,we as showErrorToast,ke as showSuccessToast,be as showToast,c as truncateWordLimit,Pt as updateUser,It as useBranding,at as useMessageDirection,wt as useNetworkState,Ct as useStorage,x as validateExpiryDate,Ye as writeOrgToStorage};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1interface/shared-core",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "sideEffects": false,