@1interface/chat-shell 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/ExportResult-eb4TcH7k.cjs +1 -0
  2. package/dist/ExportResult-vKWGlZZX.js +1 -0
  3. package/dist/NoopLogger-B-ce52_l.cjs +1 -0
  4. package/dist/NoopLogger-aeNt0r6v.js +1 -0
  5. package/dist/PaymentProviderHost-BeHcCUZx.js +1 -0
  6. package/dist/PaymentProviderHost-Dph4wPYb.cjs +1 -0
  7. package/dist/ResourceImpl-DPkc_ob9.js +1 -0
  8. package/dist/ResourceImpl-yQJWLZDn.cjs +1 -0
  9. package/dist/assets/Orb_logo.webp +0 -0
  10. package/dist/assets/hamburger-icon.png +0 -0
  11. package/dist/chat-shell.css +1 -0
  12. package/dist/diag-api-BepQpXrk.js +1 -0
  13. package/dist/diag-api-DsVI4ljU.cjs +1 -0
  14. package/dist/index-32QtQw41.cjs +1 -0
  15. package/dist/index-65-Yxkqs.cjs +1 -0
  16. package/dist/index-AAKj44J6.cjs +1 -0
  17. package/dist/index-AVWXcG-i.js +1 -0
  18. package/dist/index-BQf9Yax1.js +1 -0
  19. package/dist/index-Bs9yNhX-.js +1 -0
  20. package/dist/index-CS2Ktaql.cjs +1 -0
  21. package/dist/index-CwetZEW6.js +1 -0
  22. package/dist/index-_NPuwCXg.js +1 -0
  23. package/dist/index-iR-pnjyZ.cjs +1 -0
  24. package/dist/index.d.ts +413 -0
  25. package/dist/index.js +1 -0
  26. package/dist/index.mjs +1 -0
  27. package/native/assets/Orb_logo.webp +0 -0
  28. package/native/assets/hamburger-icon.png +0 -0
  29. package/native/hooks/useOAuthBrowser.native.js +1 -0
  30. package/native/index.js +1 -0
  31. package/native/index.native.js +1 -0
  32. package/native/payment/PaymentProvider.js +1 -0
  33. package/native/payment/PaymentProviderHost.js +1 -0
  34. package/native/payment/PaymentProviderHostLazy.js +1 -0
  35. package/native/payment/PaymentResultChannel.js +1 -0
  36. package/native/payment/adapters/ChargebeePaymentAdapter.js +83 -0
  37. package/native/payment/adapters/MoyasarPaymentAdapter.js +1 -0
  38. package/native/payment/adapters/StripePaymentAdapter.js +1 -0
  39. package/native/payment/adapters/chargebeeModalSize.js +1 -0
  40. package/native/payment/adapters/index.js +1 -0
  41. package/native/payment/adapters/moyasar/ApplePayButton.js +12 -0
  42. package/native/payment/adapters/moyasar/CardBrandIcon.js +1 -0
  43. package/native/payment/adapters/moyasar/CustomCardForm.js +1 -0
  44. package/native/payment/adapters/moyasar/Moyasar3DSIframe.js +1 -0
  45. package/native/payment/adapters/moyasar/api.js +1 -0
  46. package/native/payment/adapters/moyasar/applePayApi.js +1 -0
  47. package/native/payment/adapters/moyasar/cardValidation.js +1 -0
  48. package/native/payment/adapters/moyasar/constants.js +1 -0
  49. package/native/payment/adapters/moyasar/index.js +1 -0
  50. package/native/payment/adapters/moyasar/metadata.js +1 -0
  51. package/native/payment/adapters/moyasar/useApplePaySupported.js +1 -0
  52. package/native/payment/adapters/stripe/appearance.js +1 -0
  53. package/native/payment/adapters/stripe/index.js +1 -0
  54. package/native/payment/adapters/stripe/providerWrapper.js +1 -0
  55. package/native/payment/createPaymentAdapter.js +1 -0
  56. package/native/payment/index.js +1 -0
  57. package/native/protocol/ProtocolProvider.js +1 -0
  58. package/native/providers/BrandingProvider.js +1 -0
  59. package/native/providers/BrandingProvider.native.js +1 -0
  60. package/native/providers/ChatCallbacksProvider.js +1 -0
  61. package/native/providers/ChatClientProvider.js +1 -0
  62. package/native/providers/ConfigurationProvider.js +1 -0
  63. package/native/providers/MessageContextProvider.js +1 -0
  64. package/native/providers/SessionInitializer.js +1 -0
  65. package/native/providers/SettingsProvider.js +1 -0
  66. package/native/providers/StorageProvider.js +1 -0
  67. package/native/store/index.js +1 -0
  68. package/package.json +98 -0
@@ -0,0 +1 @@
1
+ import{MoyasarApiError as r}from"./api";import{MOYASAR_API_TIMEOUT_MS as p}from"./constants";const m="https://api.moyasar.com/v1/applepay/initiate";async function g(e){const t={validation_url:e.validationUrl,display_name:e.displayName,domain_name:e.domainName??window.location.hostname,publishable_api_key:e.publishableApiKey},o=new AbortController,s=setTimeout(()=>o.abort(new DOMException("Request timed out","TimeoutError")),p);let n;try{n=await fetch(m,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),signal:o.signal})}catch(i){const l=i instanceof DOMException&&i.name==="TimeoutError"?"Apple Pay merchant validation timed out \u2014 please try again.":i instanceof Error?i.message:"Network request failed";throw new r(l)}finally{clearTimeout(s)}let a=null;try{a=await n.json()}catch{a=null}if(!n.ok)throw new r(c(a)??`Apple Pay merchant validation failed (${n.status})`,n.status,a);return a}function c(e){if(!e||typeof e!="object")return null;const t=e;return typeof t.message=="string"&&t.message.length>0?t.message:null}export{g as validateApplePayMerchant};
@@ -0,0 +1 @@
1
+ import d from"card-validator";import p from"credit-card-type";const C=[440647,440795,446404,446672,419593,428331,428671,432328,440533,446393,457865,458456,462220,484783,484800,493428,504300,521076,529415,535825,536023,537767,543357,557606,558848,588845,589206];let g=!1;function b(){g||(g=!0,p.addCard({niceType:"Mada",type:"mada",patterns:C,gaps:[4,8,12],lengths:[16,18,19],code:{name:"CVV",size:3}}))}b();function V(e,n=new Date){const r=[],i=d.number(e.number),t=e.number.replace(/\D/g,"");t?i.isValid||r.push({field:"number",message:"Invalid card number"}):r.push({field:"number",message:"Card number is required"});const s=d.expirationDate(e.expiry);let a=null,c=null;const o=e.expiry.trim();if(!o)r.push({field:"expiry",message:"Expiry is required"});else if(s.isValid){a=Number.parseInt(s.month??"",10);const l=Number.parseInt(s.year??"",10);c=(s.year??"").length===2?l+2e3:l}else{const l=x(o);l&&v(l.month,l.year,n)?r.push({field:"expiry",message:"Card expired"}):r.push({field:"expiry",message:"Invalid expiry"})}const f=i.card?.code.size??[3,4],h=d.cvv(e.cvc,f),m=e.cvc.replace(/\D/g,"");m?h.isValid||r.push({field:"cvc",message:"Invalid CVC"}):r.push({field:"cvc",message:"CVC is required"});const y=d.cardholderName(e.name),u=e.name.trim();return u?y.isValid||r.push({field:"name",message:"Invalid cardholder name"}):r.push({field:"name",message:"Cardholder name is required"}),r.length>0||a==null||c==null?{ok:!1,errors:r}:{ok:!0,card:{number:t,month:String(a).padStart(2,"0"),year:String(c),cvc:m,name:u}}}function x(e){let n="",r="";if(e.includes("/")){const[a,c]=e.split("/");n=(a??"").replace(/\D/g,""),r=(c??"").replace(/\D/g,"")}else{const a=e.replace(/\D/g,"");n=a.slice(0,2),r=a.slice(2)}const i=Number.parseInt(n,10),t=Number.parseInt(r,10);if(Number.isNaN(i)||Number.isNaN(t))return null;const s=r.length===2?t+2e3:t;return{month:i,year:s}}function v(e,n,r){const i=r.getFullYear(),t=r.getMonth()+1;return n<i||n===i&&e<t}function E(e){return e.replace(/\D/g,"").slice(0,19).replace(/(\d{4})(?=\d)/g,"$1 ")}function k(e){const n=e.replace(/\D/g,"").slice(0,4);return n.length<=2?n:`${n.slice(0,2)}/${n.slice(2)}`}function I(e){return e.replace(/\D/g,"").slice(0,4)}function S(e){const n=e.replace(/\D/g,"");return n.length<2?null:p(n)[0]?.niceType??null}export{S as detectCardBrand,E as formatCardNumber,I as formatCvc,k as formatExpiry,V as validateCard};
@@ -0,0 +1 @@
1
+ const _=3e4;export{_ as MOYASAR_API_TIMEOUT_MS};
@@ -0,0 +1 @@
1
+ import{buildMetadata as a}from"./metadata";import{CustomCardForm as o}from"./CustomCardForm";import{ApplePayButton as y}from"./ApplePayButton";import{createPayment as m,MoyasarApiError as i,tokenizeCard as n}from"./api";import{validateApplePayMerchant as l}from"./applePayApi";import{formatCardNumber as u,formatCvc as f,formatExpiry as P,validateCard as c}from"./cardValidation";export{y as ApplePayButton,o as CustomCardForm,i as MoyasarApiError,a as buildMetadata,m as createPayment,u as formatCardNumber,f as formatCvc,P as formatExpiry,n as tokenizeCard,l as validateApplePayMerchant,c as validateCard};
@@ -0,0 +1 @@
1
+ function c(t){const e={};if(t.config.metadata)for(const[o,r]of Object.entries(t.config.metadata))r!=null&&(e[o]=String(r));if(t.config.customer){const{name:o,email:r,phone:n,reference_id:a}=t.config.customer;o&&(e.customer_name=o),r&&(e.customer_email=r),n&&(e.customer_phone=n),a&&(e.customer_reference_id=a)}return e}export{c as buildMetadata};
@@ -0,0 +1 @@
1
+ import{useEffect as o,useState as a}from"react";function p(){const[t,n]=a(!1);return o(()=>{if(typeof window>"u")return;const e=window.ApplePaySession;if(!(!e||typeof e.canMakePayments!="function"))try{n(e.canMakePayments()===!0)}catch{n(!1)}},[]),t}export{p as useApplePaySupported};
@@ -0,0 +1 @@
1
+ const t={spacingUnit:"3px",fontSizeBase:"16px",colorDanger:"#df1b41"};function a(o,r,e){return{theme:r==="dark"?"night":"stripe",variables:{colorPrimary:o.statusDiscovery.solid,colorBackground:e.cardBg,colorText:e.text,colorDanger:t.colorDanger,fontFamily:e.fontFamily,borderRadius:`${e.radius}px`,spacingUnit:t.spacingUnit,fontSizeBase:t.fontSizeBase}}}export{a as buildStripeAppearance};
@@ -0,0 +1 @@
1
+ import{buildStripeAppearance as p}from"./appearance";import{StripeProviderWrapper as o,useStripeContext as i}from"./providerWrapper";export{o as StripeProviderWrapper,p as buildStripeAppearance,i as useStripeContext};
@@ -0,0 +1 @@
1
+ import{jsx as d}from"react/jsx-runtime";import{createContext as s,useContext as l,useEffect as u,useMemo as a,useState as c}from"react";import{loadStripe as S}from"@stripe/stripe-js";import{usePaymentAdapter as m}from"../../PaymentProvider";const i=s(null),v=()=>{const e=l(i);if(!e)throw new Error("Stripe adapter components must be used inside StripeProviderWrapper");return e},y=({children:e})=>{const{paymentInit:r}=m(),[o,n]=c(null),t=r?.provider==="stripe"?r.config.publishable_key:null;u(()=>{t&&t.startsWith("pk_")&&n(S(t))},[t]);const p=a(()=>({stripePromise:o}),[o]);return d(i.Provider,{value:p,children:e})};export{y as StripeProviderWrapper,v as useStripeContext};
@@ -0,0 +1 @@
1
+ import{chargebeePaymentAdapter as r,moyasarPaymentAdapter as t,stripePaymentAdapter as a}from"./adapters";function p(e){switch(e){case"stripe":return a;case"moyasar":return t;case"chargebee":return r;default:throw new Error(`Unknown payment provider: "${e}". Supported providers: stripe, moyasar, chargebee`)}}export{p as createPaymentAdapter};
@@ -0,0 +1 @@
1
+ import{PaymentProvider as t,usePaymentAdapter as m}from"./PaymentProvider";import{createPaymentAdapter as a}from"./createPaymentAdapter";import{PaymentResultChannelProvider as u,useResultEmitter as s,useConfirmRegistration as i,useConfirmHandle as p,useSummaryReporter as d,useReportedSummary as y}from"./PaymentResultChannel";export{t as PaymentProvider,u as PaymentResultChannelProvider,a as createPaymentAdapter,p as useConfirmHandle,i as useConfirmRegistration,m as usePaymentAdapter,y as useReportedSummary,s as useResultEmitter,d as useSummaryReporter};
@@ -0,0 +1 @@
1
+ import{jsx as s}from"react/jsx-runtime";import{useMemo as r}from"react";import{ProtocolContext as l,createAdapter as P,createDefaultAdapterConfig as a,DEFAULT_PROTOCOL as d}from"@1interface/chat-core";import{clearSession as i}from"@1interface/shared-core";import{store as n}from"../store";const f=({children:t,protocolType:p})=>{const o=p||d,e=r(()=>P(o,a({onAuthExpired:()=>n.dispatch(i())})),[o]),c=r(()=>({adapter:e,protocolType:o}),[e,o]);return s(l.Provider,{value:c,children:t})};export{f as ProtocolProvider};
@@ -0,0 +1 @@
1
+ import{jsx as k}from"react/jsx-runtime";import{useState as f,useEffect as v,useCallback as O,useMemo as Y}from"react";import{useGetBrandingQuery as G,useAuth as N}from"@1interface/chat-core";import{brandingToThemeStyles as _,APPEARANCE_MODES as e,ORB_POSITIONS as b,STORAGE_KEYS as M,getAppearanceModeStorageKey as R,useStorage as w,BrandingContext as x}from"@1interface/shared-core";function E(){return typeof window<"u"&&window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches?e.DARK:e.LIGHT:e.DARK}const H=(n,u)=>n===e.LIGHT||n===e.DARK||n===e.SYSTEM?n:u,z=({children:n,orgId:u,fallbackThemeStyles:l,initialAppearanceMode:d=e.SYSTEM})=>{const{user:T}=N(),o=T?.id,s=w(),[m,S]=f(d),[i,c]=f(()=>d===e.SYSTEM?E():d);v(()=>{let t=!1;const a=R(o),h=M.APPEARANCE_MODE_KEY;return(async()=>{const L=await s.getItem(a);if(o&&await s.removeItem(h),t)return;const g=H(L,d);S(g),c(g===e.SYSTEM?E():g)})(),()=>{t=!0}},[o,s,d]),v(()=>{if(m!==e.SYSTEM)return;const t=window.matchMedia("(prefers-color-scheme: dark)"),a=h=>{c(h.matches?e.DARK:e.LIGHT)};return c(t.matches?e.DARK:e.LIGHT),t.addEventListener("change",a),()=>t.removeEventListener("change",a)},[m]);const y=u||void 0,{data:A,isLoading:P,error:I}=G(y),r=A?.success?A.data??null:null,p=r?.themes?(i===e.LIGHT?r.themes.light:r.themes.dark)??null:null,C=Y(()=>!r&&l?l:_(r,p,i),[r,p,i,l]),K=r?.orbPosition??b.FOREGROUND,B=O(t=>{S(t);const a=R(o);s.setItem(a,t),o&&s.removeItem(M.APPEARANCE_MODE_KEY),t===e.SYSTEM?c(E()):c(t)},[s,o]),D={theme:i,setTheme:B,appearanceMode:m,isLoading:P,error:I?new Error("Failed to fetch branding"):null,currentThemeColors:p,themeStyles:C,orbPosition:K};return k(x.Provider,{value:D,children:n})};export{z as BrandingProvider};
@@ -0,0 +1 @@
1
+ import{jsx as F}from"react/jsx-runtime";import{useState as A,useEffect as T,useCallback as G,useMemo as L}from"react";import{Appearance as v}from"react-native";import{useGetBrandingQuery as _,useAuth as b}from"@1interface/chat-core";import{brandingToThemeStyles as x,APPEARANCE_MODES as e,STORAGE_KEYS as f,getAppearanceModeStorageKey as y,useStorage as N,BrandingContext as H}from"@1interface/shared-core";function u(){return v.getColorScheme()==="light"?e.LIGHT:e.DARK}const O=(r,i)=>r===e.LIGHT||r===e.DARK||r===e.SYSTEM?r:i,z=({children:r,orgId:i,fallbackThemeStyles:p,initialAppearanceMode:a=e.SYSTEM})=>{const{user:M}=b(),n=M?.id,o=N(),[m,S]=A(a),[l,d]=A(()=>a===e.SYSTEM?u():a);T(()=>{let t=!1;const c=y(n),B=f.APPEARANCE_MODE_KEY;return(async()=>{const D=await o.getItem(c);if(n&&await o.removeItem(B),t)return;const h=O(D,a);S(h),d(h===e.SYSTEM?u():h)})(),()=>{t=!0}},[n,o,a]),T(()=>{if(m!==e.SYSTEM)return;d(u());const t=v.addChangeListener(({colorScheme:c})=>{d(c==="light"?e.LIGHT:e.DARK)});return()=>t.remove()},[m]);const R=i||void 0,{data:E,isLoading:C,error:P}=_(R),s=E?.success?E.data??null:null,g=s?.themes?(l===e.LIGHT?s.themes.light:s.themes.dark)??null:null,I=L(()=>!s&&p?p:x(s,g,l),[s,g,l,p]),K=G(t=>{S(t);const c=y(n);o.setItem(c,t),n&&o.removeItem(f.APPEARANCE_MODE_KEY),t===e.SYSTEM?d(u()):d(t)},[o,n]),Y={theme:l,setTheme:K,appearanceMode:m,isLoading:C,error:P?new Error("Failed to fetch branding"):null,currentThemeColors:g,themeStyles:I};return F(H.Provider,{value:Y,children:r})};export{z as BrandingProvider};
@@ -0,0 +1 @@
1
+ import{jsx as l}from"react/jsx-runtime";import{ChatCallbacksContext as e}from"@1interface/chat-core";const b=({children:a,callbacks:t})=>l(e.Provider,{value:t,children:a});export{b as ChatCallbacksProvider};
@@ -0,0 +1 @@
1
+ import{jsx as o}from"react/jsx-runtime";import{Provider as x}from"react-redux";import{DEFAULT_PROTOCOL as S}from"@1interface/chat-core";import{initializeChatConfig as R,setTokenRefreshHandler as A}from"@1interface/shared-core";import{NetworkContext as T}from"@1interface/shared-core";import{AudioPlatformProvider as b}from"@1interface/voice-shell";import{store as M}from"../store";import{ProtocolProvider as N}from"../protocol/ProtocolProvider";import{StorageProvider as H}from"./StorageProvider";import{SessionInitializer as w}from"./SessionInitializer";import{ConfigurationProvider as E}from"./ConfigurationProvider";import{ChatCallbacksProvider as I}from"./ChatCallbacksProvider";import{BrandingProvider as z}from"./BrandingProvider";const X=({baseUrl:i,customHeaders:a,token:n,user:d,protocol:l=S,paymentProvider:p,onConversationChange:m,onConversationTitleChange:s,onMessagesChange:P,onLogoutRequested:c,onSessionExpired:f,storage:e,storageFallback:v,extraHydrations:C,orgId:h,initialThemeStyles:u,initialAppearanceMode:g,audioPlatform:y,networkMonitor:t,children:k})=>{R({baseUrl:i,customHeaders:a,paymentProvider:p}),A(f??null);let r=o(w,{token:n,user:d,children:o(N,{protocolType:l,children:o(E,{children:o(I,{callbacks:{onConversationChange:m,onConversationTitleChange:s,onMessagesChange:P,onLogoutRequested:c},children:o(z,{orgId:h,fallbackThemeStyles:u,initialAppearanceMode:g,children:o(b,{value:y,children:k})})})})})});return t&&(r=o(T.Provider,{value:t,children:r})),o(x,{store:M,children:e?o(H,{value:e,fallback:v,extraHydrations:C,children:r}):r})};export{X as ChatClientProvider};
@@ -0,0 +1 @@
1
+ import{jsx as t}from"react/jsx-runtime";import{ConfigurationContext as r,useConfigurationValue as e}from"@1interface/chat-core";const C=({children:o})=>t(r.Provider,{value:e(),children:o});export{C as ConfigurationProvider};
@@ -0,0 +1 @@
1
+ import{jsx as d}from"react/jsx-runtime";import{createContext as r,useContext as s,useState as M}from"react";const a=r(void 0),t=r({}),p=({children:e,messageId:n,isDisabled:i=!1})=>{const[g,o]=M({}),x=(c,u)=>{o(C=>({...C,[c]:u}))};return d(a.Provider,{value:{messageContext:g,setMessageContext:o,updateMessageContext:x,messageId:n},children:d(t.Provider,{value:{messageId:n,isDisabled:i},children:e})})},P=()=>{const e=s(a);if(!e)throw new Error("useMessageContext must be used within MessageContextProvider");return e},f=()=>s(t)?.messageId,w=()=>s(t)?.isDisabled??!1;export{p as MessageContextProvider,t as MessageIdContext,P as useMessageContext,w as useMessageDisabled,f as useMessageId};
@@ -0,0 +1 @@
1
+ import{Fragment as o,jsx as s}from"react/jsx-runtime";import{useRef as i}from"react";import{setSession as a}from"@1interface/shared-core";import{store as l}from"../store";const f=({token:e,user:n,children:t})=>{const r=i(null);return e&&e!==r.current&&(r.current=e,l.dispatch(a({accessToken:e,expiresIn:Math.floor(Date.now()/1e3)+3600,...n&&{user:{id:"",email:n.email||"",name:n.name}}}))),s(o,{children:t})};export{f as SessionInitializer};
@@ -0,0 +1 @@
1
+ import{jsx as H}from"react/jsx-runtime";import{useState as i,useEffect as x}from"react";import{useAuth as k,ChatSettingsContext as y,useChatSettings as K}from"@1interface/chat-core";import{STORAGE_KEYS as o,STT_IMPLEMENTATIONS as a,useStorage as Y,setNetworkLoggingEnabled as m}from"@1interface/shared-core";const N=!1,d=!0,D=!0,q=a.ONLINE,g=!0,S=(n,s)=>n===null?s:n==="true",z=(n,s)=>n===a.ONLINE||n===a.DEVICE?n:s,$=({children:n,defaultSttImplementation:s=q})=>{const{user:A}=k(),_=A?.id,e=Y(),[u,O]=i(!1),[L,E]=i(N),[b,r]=i(d),[p,I]=i(D),[C,c]=i(s),[M,l]=i(g);x(()=>{let t=!1;return Promise.all([e.getItem(o.DEBUG_MODE),e.getItem(o.LOCATION_ENABLED),e.getItem(o.STT_AUTO_SEND),e.getItem(o.STT_IMPLEMENTATION),e.getItem(o.SEND_DIAGNOSTICS)]).then(([h,F,V,R,v])=>{if(t)return;E(S(h,N)),r(S(F,d)),I(S(V,D)),c(z(R,s));const T=S(v,g);l(T),m(T)}),()=>{t=!0}},[s,_,e]);const U=t=>{E(t),e.setItem(o.DEBUG_MODE,String(t))},f=t=>{r(t),e.setItem(o.LOCATION_ENABLED,String(t))},P=t=>{I(t),e.setItem(o.STT_AUTO_SEND,String(t))},B=t=>{c(t),e.setItem(o.STT_IMPLEMENTATION,t)},G=t=>{l(t),m(t),e.setItem(o.SEND_DIAGNOSTICS,String(t))};return H(y.Provider,{value:{enableTts:u,setEnableTts:O,debugMode:L,setDebugMode:U,locationEnabled:b,setLocationEnabled:f,autoSendVoice:p,setAutoSendVoice:P,sttImplementation:C,setSttImplementation:B,sendDiagnostics:M,setSendDiagnostics:G},children:n})},j=K;export{$ as SettingsProvider,j as useSettings};
@@ -0,0 +1 @@
1
+ import{Fragment as v,jsx as d}from"react/jsx-runtime";import{useEffect as y,useState as m}from"react";import{useDispatch as u}from"react-redux";import{StorageContext as P,setModuleStorage as S,hydrateSession as l,logger as h}from"@1interface/shared-core";const E=({value:e,children:c,fallback:o,extraHydrations:a})=>{S(e);const n=u(),r=o!==void 0,[g,f]=m(!r);return y(()=>{let s=!1;const i=[n(l(e))];if(a)for(const p of a)i.push(Promise.resolve(p(e,n)).catch(t=>{h.error({message:"StorageProvider hydration step failed",component:"StorageProvider",error_message:t instanceof Error?t.message:String(t)})}));return Promise.all(i).finally(()=>{s||r&&f(!0)}),()=>{s=!0}},[]),d(P.Provider,{value:e,children:r&&!g?d(v,{children:o}):c})};export{E as StorageProvider};
@@ -0,0 +1 @@
1
+ import{configureStore as r,combineReducers as o}from"@reduxjs/toolkit";import{setupListeners as i}from"@reduxjs/toolkit/query";import{apiReducers as s,apiMiddleware as a,serializableCheck as c,chatReducer as d,conversationsReducer as p,bindChatLogger as n}from"@1interface/chat-core";import{sessionListenerMiddleware as u,sessionReducer as m,setAccessTokenReader as R,setTokenExpiresAtReader as h,indicatorReducer as f}from"@1interface/shared-core";import{voiceReducer as l,voiceListenerMiddleware as g}from"@1interface/voice-core";const w=o({...s,auth:m,chat:d,conversations:p,voice:l,indicator:f}),e=r({reducer:w,middleware:t=>t({serializableCheck:c}).prepend(u.middleware,g.middleware).concat(a)});i(e.dispatch),R(()=>e.getState().auth.accessToken),h(()=>e.getState().auth.tokenExpiresAt),n(()=>e.getState());export{w as rootReducer,e as store};
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "@1interface/chat-shell",
3
+ "version": "0.1.0",
4
+ "license": "UNLICENSED",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.mjs",
8
+ "react-native": "./native/index.native.js",
9
+ "types": "./dist/index.d.ts",
10
+ "sideEffects": [
11
+ "**/*.css",
12
+ "./src/index.css",
13
+ "./dist/chat-shell.css"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "react-native": "./native/index.native.js",
18
+ "types": "./dist/index.d.ts",
19
+ "import": "./dist/index.mjs",
20
+ "require": "./dist/index.js"
21
+ },
22
+ "./style.css": "./dist/chat-shell.css"
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "native"
27
+ ],
28
+ "repository": {
29
+ "type": "git",
30
+ "url": "https://github.com/aiatcore/1interface-chat.git",
31
+ "directory": "packages/chat-shell"
32
+ },
33
+ "publishConfig": {
34
+ "access": "public"
35
+ },
36
+ "dependencies": {
37
+ "@microsoft/fetch-event-source": "^2.0.1",
38
+ "@radix-ui/react-dialog": "^1.1.15",
39
+ "@radix-ui/react-dropdown-menu": "^2.1.16",
40
+ "@radix-ui/react-scroll-area": "^1.2.10",
41
+ "@radix-ui/react-slot": "^1.2.4",
42
+ "@radix-ui/react-switch": "^1.2.6",
43
+ "@radix-ui/react-toast": "^1.2.15",
44
+ "@radix-ui/react-tooltip": "^1.2.8",
45
+ "@stripe/react-stripe-js": "^3.10.0",
46
+ "@stripe/stripe-js": "^4.10.0",
47
+ "card-validator": "^10.0.4",
48
+ "class-variance-authority": "^0.7.1",
49
+ "clsx": "^2.1.1",
50
+ "credit-card-type": "^10.1.2",
51
+ "lucide-react": "^0.562.0",
52
+ "streamdown": "^1.6.11",
53
+ "tailwind-merge": "^3.6.0",
54
+ "@1interface/chat-core": "^0.1.0",
55
+ "@1interface/widgets": "^0.1.0",
56
+ "@1interface/voice-core": "^0.1.0",
57
+ "@1interface/voice-shell": "^0.1.0"
58
+ },
59
+ "peerDependencies": {
60
+ "@reduxjs/toolkit": "^2.0.0",
61
+ "react": "^18.0.0 || ^19.0.0",
62
+ "react-dom": "^18.0.0 || ^19.0.0",
63
+ "react-redux": "^9.0.0"
64
+ },
65
+ "devDependencies": {
66
+ "@rollup/plugin-terser": "^1.0.0",
67
+ "@testing-library/jest-dom": "^6.9.1",
68
+ "@testing-library/react": "^16.3.2",
69
+ "@testing-library/user-event": "^14.6.1",
70
+ "@types/node": "^24.12.4",
71
+ "@types/react": "^19.2.15",
72
+ "@types/react-dom": "^19.2.3",
73
+ "@vitejs/plugin-react": "5.1.1",
74
+ "@vitest/ui": "4.1.0",
75
+ "esbuild": "0.27.2",
76
+ "autoprefixer": "^10.5.0",
77
+ "glob": "^13.0.6",
78
+ "jsdom": "^27.4.0",
79
+ "postcss": "^8.5.15",
80
+ "tailwindcss": "^3.4.19",
81
+ "terser": "5.46.1",
82
+ "tsc-alias": "^1.8.17",
83
+ "typescript": "~5.9.3",
84
+ "vite": "7.3.2",
85
+ "vite-plugin-dts": "^4.5.4",
86
+ "vite-plugin-static-copy": "^3.4.0",
87
+ "vitest": "4.1.0"
88
+ },
89
+ "scripts": {
90
+ "build": "vite build && node scripts/build-native.mjs",
91
+ "dev": "vite build --watch",
92
+ "test": "vitest",
93
+ "test:ui": "vitest --ui",
94
+ "test:coverage": "vitest --coverage",
95
+ "postinstall": "rm -rf node_modules/react node_modules/react-dom 2>/dev/null || true",
96
+ "link:setup": "bash scripts/setup-npm-link.sh"
97
+ }
98
+ }