codicent-app-sdk 0.3.97 → 0.3.99

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 (143) hide show
  1. package/README.md +7 -0
  2. package/dist/cjs/components/AiInput.js +1 -1
  3. package/dist/cjs/components/AudioIcon.js +1 -1
  4. package/dist/cjs/components/ChatInput.js +1 -1
  5. package/dist/cjs/components/ChatMessage.js +1 -1
  6. package/dist/cjs/components/CombinedPlaceholderDialog.js +1 -1
  7. package/dist/cjs/components/Footer.js +1 -1
  8. package/dist/cjs/components/Header.js +1 -1
  9. package/dist/cjs/components/HtmlView.js +1 -1
  10. package/dist/cjs/components/MessageInput.js +1 -1
  11. package/dist/cjs/components/MessageItem.js +1 -1
  12. package/dist/cjs/components/Profile.js +1 -1
  13. package/dist/cjs/components/Prompt.js +1 -1
  14. package/dist/cjs/components/SnapFooter.js +1 -1
  15. package/dist/cjs/components/TextHeader.js +1 -1
  16. package/dist/cjs/components/TypingIndicator.js +1 -1
  17. package/dist/cjs/components/UploadFile.js +1 -1
  18. package/dist/cjs/components/UrlProcessor.js +1 -1
  19. package/dist/cjs/components/VoiceIcon.js +1 -1
  20. package/dist/cjs/config/index.d.ts +9 -0
  21. package/dist/cjs/config/index.d.ts.map +1 -1
  22. package/dist/cjs/config/index.js +1 -1
  23. package/dist/cjs/hooks/index.d.ts +1 -0
  24. package/dist/cjs/hooks/index.d.ts.map +1 -1
  25. package/dist/cjs/hooks/useAuthState.d.ts +1 -0
  26. package/dist/cjs/hooks/useAuthState.d.ts.map +1 -1
  27. package/dist/cjs/hooks/useAuthState.js +1 -1
  28. package/dist/cjs/hooks/useChat.js +1 -1
  29. package/dist/cjs/hooks/useCodicentApp.d.ts +5 -2
  30. package/dist/cjs/hooks/useCodicentApp.d.ts.map +1 -1
  31. package/dist/cjs/hooks/useCodicentApp.js +1 -1
  32. package/dist/cjs/hooks/useCodicentState.js +1 -1
  33. package/dist/cjs/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
  34. package/dist/cjs/hooks/useRealtimeVoiceAI.js +1 -1
  35. package/dist/cjs/hooks/useTools.d.ts +20 -2
  36. package/dist/cjs/hooks/useTools.d.ts.map +1 -1
  37. package/dist/cjs/hooks/useTools.js +1 -1
  38. package/dist/cjs/index.js +1 -1
  39. package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/api.js +1 -0
  40. package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/client.js +1 -0
  41. package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/conversation.js +1 -0
  42. package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/event_handler.js +1 -0
  43. package/dist/cjs/node_modules/@openai/realtime-api-beta/lib/utils.js +1 -0
  44. package/dist/cjs/pages/AppFrame.js +1 -1
  45. package/dist/cjs/pages/Chat.js +1 -1
  46. package/dist/cjs/pages/Compose.js +1 -1
  47. package/dist/cjs/pages/CrmPage.js +1 -1
  48. package/dist/cjs/pages/CrmPagePersistent.d.ts +8 -0
  49. package/dist/cjs/pages/CrmPagePersistent.d.ts.map +1 -0
  50. package/dist/cjs/pages/CrmPagePersistent.js +1 -0
  51. package/dist/cjs/pages/FormAccept.js +1 -1
  52. package/dist/cjs/pages/FormInvite.js +1 -1
  53. package/dist/cjs/pages/HtmlViewer.js +1 -1
  54. package/dist/cjs/pages/ImageView.js +1 -1
  55. package/dist/cjs/pages/Login.d.ts.map +1 -1
  56. package/dist/cjs/pages/Login.js +1 -1
  57. package/dist/cjs/pages/Purchase.js +1 -1
  58. package/dist/cjs/pages/Sales.js +1 -1
  59. package/dist/cjs/pages/Search.js +1 -1
  60. package/dist/cjs/pages/Snap.js +1 -1
  61. package/dist/cjs/pages/index.d.ts +1 -0
  62. package/dist/cjs/pages/index.d.ts.map +1 -1
  63. package/dist/cjs/services/codicent.js +1 -1
  64. package/dist/cjs/utils/appState.d.ts +45 -0
  65. package/dist/cjs/utils/appState.d.ts.map +1 -1
  66. package/dist/cjs/utils/appState.js +1 -1
  67. package/dist/cjs/utils/cacheManager.d.ts +85 -0
  68. package/dist/cjs/utils/cacheManager.d.ts.map +1 -0
  69. package/dist/cjs/utils/cacheManager.js +1 -0
  70. package/dist/cjs/utils/index.d.ts +2 -0
  71. package/dist/cjs/utils/index.d.ts.map +1 -1
  72. package/dist/esm/components/AiInput.js +1 -1
  73. package/dist/esm/components/AudioIcon.js +1 -1
  74. package/dist/esm/components/ChatInput.js +1 -1
  75. package/dist/esm/components/ChatMessage.js +1 -1
  76. package/dist/esm/components/CombinedPlaceholderDialog.js +1 -1
  77. package/dist/esm/components/Footer.js +1 -1
  78. package/dist/esm/components/Header.js +1 -1
  79. package/dist/esm/components/HtmlView.js +1 -1
  80. package/dist/esm/components/MessageInput.js +1 -1
  81. package/dist/esm/components/MessageItem.js +1 -1
  82. package/dist/esm/components/Profile.js +1 -1
  83. package/dist/esm/components/Prompt.js +1 -1
  84. package/dist/esm/components/SnapFooter.js +1 -1
  85. package/dist/esm/components/TextHeader.js +1 -1
  86. package/dist/esm/components/TypingIndicator.js +1 -1
  87. package/dist/esm/components/UploadFile.js +1 -1
  88. package/dist/esm/components/UrlProcessor.js +1 -1
  89. package/dist/esm/components/VoiceIcon.js +1 -1
  90. package/dist/esm/config/index.d.ts +9 -0
  91. package/dist/esm/config/index.d.ts.map +1 -1
  92. package/dist/esm/config/index.js +1 -1
  93. package/dist/esm/hooks/index.d.ts +1 -0
  94. package/dist/esm/hooks/index.d.ts.map +1 -1
  95. package/dist/esm/hooks/useAuthState.d.ts +1 -0
  96. package/dist/esm/hooks/useAuthState.d.ts.map +1 -1
  97. package/dist/esm/hooks/useAuthState.js +1 -1
  98. package/dist/esm/hooks/useChat.js +1 -1
  99. package/dist/esm/hooks/useCodicentApp.d.ts +5 -2
  100. package/dist/esm/hooks/useCodicentApp.d.ts.map +1 -1
  101. package/dist/esm/hooks/useCodicentApp.js +1 -1
  102. package/dist/esm/hooks/useCodicentState.js +1 -1
  103. package/dist/esm/hooks/useRealtimeVoiceAI.d.ts.map +1 -1
  104. package/dist/esm/hooks/useRealtimeVoiceAI.js +1 -1
  105. package/dist/esm/hooks/useTools.d.ts +20 -2
  106. package/dist/esm/hooks/useTools.d.ts.map +1 -1
  107. package/dist/esm/hooks/useTools.js +1 -1
  108. package/dist/esm/index.js +1 -1
  109. package/dist/esm/node_modules/@openai/realtime-api-beta/lib/api.js +1 -0
  110. package/dist/esm/node_modules/@openai/realtime-api-beta/lib/client.js +1 -0
  111. package/dist/esm/node_modules/@openai/realtime-api-beta/lib/conversation.js +1 -0
  112. package/dist/esm/node_modules/@openai/realtime-api-beta/lib/event_handler.js +1 -0
  113. package/dist/esm/node_modules/@openai/realtime-api-beta/lib/utils.js +1 -0
  114. package/dist/esm/pages/AppFrame.js +1 -1
  115. package/dist/esm/pages/Chat.js +1 -1
  116. package/dist/esm/pages/Compose.js +1 -1
  117. package/dist/esm/pages/CrmPage.js +1 -1
  118. package/dist/esm/pages/CrmPagePersistent.d.ts +8 -0
  119. package/dist/esm/pages/CrmPagePersistent.d.ts.map +1 -0
  120. package/dist/esm/pages/CrmPagePersistent.js +1 -0
  121. package/dist/esm/pages/FormAccept.js +1 -1
  122. package/dist/esm/pages/FormInvite.js +1 -1
  123. package/dist/esm/pages/HtmlViewer.js +1 -1
  124. package/dist/esm/pages/ImageView.js +1 -1
  125. package/dist/esm/pages/Login.d.ts.map +1 -1
  126. package/dist/esm/pages/Login.js +1 -1
  127. package/dist/esm/pages/Purchase.js +1 -1
  128. package/dist/esm/pages/Sales.js +1 -1
  129. package/dist/esm/pages/Search.js +1 -1
  130. package/dist/esm/pages/Snap.js +1 -1
  131. package/dist/esm/pages/index.d.ts +1 -0
  132. package/dist/esm/pages/index.d.ts.map +1 -1
  133. package/dist/esm/services/codicent.js +1 -1
  134. package/dist/esm/utils/appState.d.ts +45 -0
  135. package/dist/esm/utils/appState.d.ts.map +1 -1
  136. package/dist/esm/utils/appState.js +1 -1
  137. package/dist/esm/utils/cacheManager.d.ts +85 -0
  138. package/dist/esm/utils/cacheManager.d.ts.map +1 -0
  139. package/dist/esm/utils/cacheManager.js +1 -0
  140. package/dist/esm/utils/index.d.ts +2 -0
  141. package/dist/esm/utils/index.d.ts.map +1 -1
  142. package/dist/index.d.ts +170 -5
  143. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- "use strict";var _=require("../node_modules/mermaid/dist/mermaid.core.js");class T{constructor(){this.CHAT_INSTRUCTIONS="",this.REALTIME_VOICE_INSTRUCTIONS="",this.apps={}}}const O={LOGIN_REDIRECT:!1,ABOUT_TEXT:"Codicent APP SDK",ANONYMOUS_CODICENT:void 0,ANONYMOUS_TOKEN:void 0,API_BASE_URL:"https://codicent.com/",APP_BUTTONS:void 0,APP_CHAT_TEXT_PLACEHOLDER:void 0,APP_CHAT_TITLE:void 0,APP_CONFIG:new T,APP_FOOTER_COLOR:void 0,APP_FOOTER_SELECTED_COLOR:void 0,APP_FOOTER_TEXT_COLOR:void 0,APP_HEADER_COLOR:void 0,APP_HEADER_ICON_URL:void 0,APP_HEADER_TEXT_COLOR:void 0,APP_ICON_URL:void 0,APP_LOG_CODICENT:"",APP_LOG_TOKEN:"",APP_LOGBOOK_TITLE:void 0,APP_MENU_TITLE:void 0,APP_NAME:void 0,APP_PREFIX:void 0,APP_SAVE_TITLE:void 0,APP_SEARCH_TITLE:void 0,APP_SLOGAN:void 0,APP_SPLASH_TEXT:void 0,APP_SPLASH_URL:void 0,APP_TEMPLATE:"",APP_TITLE:void 0,AUTH_REDIRECT_URL:void 0,AUTH0_AUDIENCE:"https://codicent.com/api",AUTH0_CLIENT_ID:"80STzWmmzN3Tgf76HgFRyv54keYmvnaw",AUTH0_DOMAIN:"auth.codicent.com",AUTH0_PROVIDER_SCOPE:"read:current_user update:current_user_metadata openid profile email",AUTH0_SCOPE:"read:current_user",AUTH0_USER_DOMAIN:void 0,BUTTON_ACTIVE_COLOR:void 0,BUTTON_BACKGROUND_COLOR:void 0,BUTTON_BORDER_RADIUS:void 0,BUTTON_HOVER_COLOR:void 0,BUTTON_TAG:"app-button",BUTTON_TEXT_COLOR:void 0,CHAT_BACKGROUND_IMAGE_URL:void 0,CHAT_BOT_BACKGROUND_COLOR:void 0,CHAT_BOT_TEXT_COLOR:void 0,CHAT_INSTRUCTIONS:void 0,CHAT_USER_BACKGROUND_COLOR:void 0,CHAT_USER_TEXT_COLOR:void 0,CHAT_WELCOME:"Welcome",COMPOSE_BACKGROUND_IMAGE_URL:void 0,COMPOSE_HIDE_LOCATION:void 0,COMPOSE_SIMPLE_ATTACH_FILE:void 0,DEFAULT_LANGUAGE:"en",HIDE_CHAT_BUTTON:!1,HIDE_MENU_BUTTON:!1,HIDE_REGISTER_BUTTON:!1,HIDE_SAVE_BUTTON:!1,HOME_BACKGROUND_IMAGE_URL:void 0,INDEX_TITLE:void 0,LOGBOOK_TAG_DEFINITIONS:{},LOGBOOK_TAGS:"[]",MENU_BACKGROUND_IMAGE_URL:void 0,MESSAGE_HIDE_BAR:!1,MODULE_VOICE:!1,PUBLIC_FLOW_CODICENT:void 0,REALTIME_VOICE_API_KEY:"",REALTIME_VOICE_MODEL:"alloy",USE_REALTIME_SESSION_ENDPOINT:!0,REALTIME_SESSION_ENDPOINT:"/realtime/session",REALTIME_CONFIG_ENDPOINT:"/realtime/config",SEND_BUTTON_ROUND_BACKGROUND:!1,SHOW_CANVAS_BUTTON:!1,SHOW_CHAT_PROMPTS:!1,SHOW_HELP_BUTTON:!1,SHOW_LOGBOOK_BUTTON:!1,SHOW_MICROPHONE_BUTTON:!1,SHOW_SETTINGS_BUTTON:!1,SHOW_SNAP_BUTTON:!1,SHOW_VOICE_BUTTON:!1,STRIP_CUSTOMER_PORTAL:"",STRIPE_PRICE_ID:"",STRIPE_PUBLIC_KEY:"",SUBSCRIPTION_NEEDED:!1,THEME_WELCOME:void 0,USER_PREFIX:void 0,WELCOME_STATUS_PROMPT:"",SHOW_SEND_BUTTON_TEXT:!1,SHOW_SAVE_BUTTON_TEXT:!1,FORM_BACKGROUND_IMAGE_URL:void 0,AUTO_TRANSLATE:!0,FORCE_LANGUAGE:void 0,TRANSLATIONS:void 0,LOGIN_WELCOME_TEXT:void 0,LOGIN_HIDE_WELCOME:!1,LOGIN_LOGO_URL:void 0,HIDE_CHAT_ADD_FILE_BUTTON:!1,FORM_ACCEPT_MARKDOWN:void 0,RESTART_AUDIO_ON_TAKE_PHOTO:!1};const E=function(_){return new Proxy(_,{get:(_,T,O)=>Reflect.get(_,T,O)})}(O);exports.AppConfig=T,exports.getConfigValue=function(_){return E[_]},exports.initCodicentApp=function(T={}){for(const[_,E]of Object.entries(T))void 0!==E&&(O[_]=E);void 0!==T.TRANSLATIONS&&(globalThis.__CODICENT_REINIT_I18N__=!0),_.default.initialize({startOnLoad:!1})};
1
+ "use strict";var _=require("../node_modules/mermaid/dist/mermaid.core.js");class T{constructor(){this.CHAT_INSTRUCTIONS="",this.REALTIME_VOICE_INSTRUCTIONS="",this.apps={}}}const O={LOGIN_REDIRECT:!1,ABOUT_TEXT:"Codicent APP SDK",ANONYMOUS_CODICENT:void 0,ANONYMOUS_TOKEN:void 0,API_BASE_URL:"https://codicent.com/",APP_BUTTONS:void 0,APP_CHAT_TEXT_PLACEHOLDER:void 0,APP_CHAT_TITLE:void 0,APP_CONFIG:new T,APP_FOOTER_COLOR:void 0,APP_FOOTER_SELECTED_COLOR:void 0,APP_FOOTER_TEXT_COLOR:void 0,APP_HEADER_COLOR:void 0,APP_HEADER_ICON_URL:void 0,APP_HEADER_TEXT_COLOR:void 0,APP_ICON_URL:void 0,APP_LOG_CODICENT:"",APP_LOG_TOKEN:"",APP_LOGBOOK_TITLE:void 0,APP_MENU_TITLE:void 0,APP_NAME:void 0,APP_PREFIX:void 0,APP_SAVE_TITLE:void 0,APP_SEARCH_TITLE:void 0,APP_SLOGAN:void 0,APP_SPLASH_TEXT:void 0,APP_SPLASH_URL:void 0,APP_TEMPLATE:"",APP_TITLE:void 0,AUTH_REDIRECT_URL:void 0,AUTH0_AUDIENCE:"https://codicent.com/api",AUTH0_CLIENT_ID:"80STzWmmzN3Tgf76HgFRyv54keYmvnaw",AUTH0_DOMAIN:"auth.codicent.com",AUTH0_PASSWORDLESS_ENABLED:!1,AUTH0_PROVIDER_SCOPE:"read:current_user update:current_user_metadata openid profile email",AUTH0_SCOPE:"read:current_user",AUTH0_USER_DOMAIN:void 0,BUTTON_ACTIVE_COLOR:void 0,BUTTON_BACKGROUND_COLOR:void 0,BUTTON_BORDER_RADIUS:void 0,BUTTON_HOVER_COLOR:void 0,BUTTON_TAG:"app-button",BUTTON_TEXT_COLOR:void 0,CHAT_BACKGROUND_IMAGE_URL:void 0,CHAT_BOT_BACKGROUND_COLOR:void 0,CHAT_BOT_TEXT_COLOR:void 0,CHAT_INSTRUCTIONS:void 0,CHAT_USER_BACKGROUND_COLOR:void 0,CHAT_USER_TEXT_COLOR:void 0,CHAT_WELCOME:"Welcome",COMPOSE_BACKGROUND_IMAGE_URL:void 0,COMPOSE_HIDE_LOCATION:void 0,COMPOSE_SIMPLE_ATTACH_FILE:void 0,DEFAULT_LANGUAGE:"en",HIDE_CHAT_BUTTON:!1,HIDE_MENU_BUTTON:!1,HIDE_REGISTER_BUTTON:!1,HIDE_SAVE_BUTTON:!1,HOME_BACKGROUND_IMAGE_URL:void 0,INDEX_TITLE:void 0,LOGBOOK_TAG_DEFINITIONS:{},LOGBOOK_TAGS:"[]",MENU_BACKGROUND_IMAGE_URL:void 0,MESSAGE_HIDE_BAR:!1,MODULE_VOICE:!1,PUBLIC_FLOW_CODICENT:void 0,REALTIME_VOICE_API_KEY:"",REALTIME_VOICE_MODEL:"alloy",USE_REALTIME_SESSION_ENDPOINT:!0,REALTIME_SESSION_ENDPOINT:"/realtime/session",REALTIME_CONFIG_ENDPOINT:"/realtime/config",SEND_BUTTON_ROUND_BACKGROUND:!1,SHOW_CANVAS_BUTTON:!1,SHOW_CHAT_PROMPTS:!1,SHOW_HELP_BUTTON:!1,SHOW_LOGBOOK_BUTTON:!1,SHOW_MICROPHONE_BUTTON:!1,SHOW_SETTINGS_BUTTON:!1,SHOW_SNAP_BUTTON:!1,SHOW_VOICE_BUTTON:!1,STRIP_CUSTOMER_PORTAL:"",STRIPE_PRICE_ID:"",STRIPE_PUBLIC_KEY:"",SUBSCRIPTION_NEEDED:!1,THEME_WELCOME:void 0,USER_PREFIX:void 0,WELCOME_STATUS_PROMPT:"",SHOW_SEND_BUTTON_TEXT:!1,SHOW_SAVE_BUTTON_TEXT:!1,FORM_BACKGROUND_IMAGE_URL:void 0,AUTO_TRANSLATE:!0,FORCE_LANGUAGE:void 0,TRANSLATIONS:void 0,LOGIN_WELCOME_TEXT:void 0,LOGIN_HIDE_WELCOME:!1,LOGIN_LOGO_URL:void 0,HIDE_CHAT_ADD_FILE_BUTTON:!1,FORM_ACCEPT_MARKDOWN:void 0,RESTART_AUDIO_ON_TAKE_PHOTO:!1,ENABLE_STATE_CACHE:!1,SESSION_CACHE_TTL:864e5,USER_INFO_CACHE_TTL:36e5,APPS_CACHE_TTL:3e5,OPTIMISTIC_CACHE_LOAD:!0,VALIDATE_CACHE_IN_BACKGROUND:!0,SHOW_VALIDATION_INDICATOR:!1,CACHE_FAILURE_MODE:"lenient"};const E=function(_){return new Proxy(_,{get:(_,T,O)=>Reflect.get(_,T,O)})}(O);exports.AppConfig=T,exports.getConfigValue=function(_){return E[_]},exports.initCodicentApp=function(T={}){for(const[_,E]of Object.entries(T))void 0!==E&&(O[_]=E);void 0!==T.TRANSLATIONS&&(globalThis.__CODICENT_REINIT_I18N__=!0),_.default.initialize({startOnLoad:!1})};
@@ -4,6 +4,7 @@ export * from "./useChat";
4
4
  export { default as useCodicentState } from "./useCodicentState";
5
5
  export * from "./useAudioRecorder";
6
6
  export { default as useTools } from "./useTools";
7
+ export type { Tool, ToolMergeStrategy, ToolsConfig } from "./useTools";
7
8
  export { default as useRealtimeVoiceAI } from "./useRealtimeVoiceAI";
8
9
  export * from "./useRealtimeVoiceAI";
9
10
  export { default as useLocalization } from "./useLocalization";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,cAAc,oBAAoB,CAAC;AAEnC,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACrE,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -12,6 +12,7 @@ export interface UseAuthState {
12
12
  registerUser: (nickname: string) => Promise<string>;
13
13
  codicentService: CodicentService;
14
14
  loginWithRedirect: (options?: RedirectLoginOptions<AppState>) => Promise<void>;
15
+ loginPasswordless: (email: string) => Promise<void>;
15
16
  }
16
17
  declare const useAuthState: (auth0: Auth0ContextInterface) => UseAuthState;
17
18
  export default useAuthState;
@@ -1 +1 @@
1
- {"version":3,"file":"useAuthState.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuthState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAUrC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IAInB,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF;AAED,QAAA,MAAM,YAAY,UAAW,qBAAqB,KAAG,YA+PpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"useAuthState.d.ts","sourceRoot":"","sources":["../../../src/hooks/useAuthState.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,QAAQ,EAAqB,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAUrC,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,GAAG,SAAS,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IAInB,IAAI,EAAE,GAAG,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,eAAe,EAAE,eAAe,CAAC;IACjC,iBAAiB,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAED,QAAA,MAAM,YAAY,UAAW,qBAAqB,KAAG,YAmRpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var o=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=s=>{const{isAuthenticated:t,getAccessTokenSilently:n,user:i,isLoading:u,logout:a,getAccessTokenWithPopup:c,loginWithRedirect:l}=s,[g,p]=e.useState(null),[q,j]=e.useState(void 0),[C,E]=e.useState(null),[m,_]=e.useState(""),d=e.useMemo((()=>new r.CodicentService({API_BASE_URL:o.getConfigValue("API_BASE_URL"),APP_LOG_CODICENT:o.getConfigValue("APP_LOG_CODICENT"),APP_LOG_TOKEN:o.getConfigValue("APP_LOG_TOKEN"),APP_NAME:o.getConfigValue("APP_NAME"),APP_PREFIX:o.getConfigValue("APP_PREFIX"),APP_TEMPLATE:o.getConfigValue("APP_TEMPLATE"),BUTTON_TAG:o.getConfigValue("BUTTON_TAG"),STRIPE_PUBLIC_KEY:o.getConfigValue("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:o.getConfigValue("SUBSCRIPTION_NEEDED"),USER_PREFIX:o.getConfigValue("USER_PREFIX"),ANONYMOUS_TOKEN:o.getConfigValue("ANONYMOUS_TOKEN")})),[]);e.useEffect((()=>{!u&&t&&(async()=>{try{const e=await n({});console.debug("CODICENT: ACCESS TOKEN",e),p(e)}catch(e){console.debug("CODICENT: Failed to get access token",e);const r=e;if(r&&"object"==typeof r&&"error"in r&&"login_required"===r.error)console.warn("CODICENT: Login required"),P();else if(r&&"object"==typeof r&&"error"in r&&"consent_required"===r.error)try{const e=await c();if(!e)return void E("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),p(e)}catch(e){console.warn("CODICENT: Failed to get access token with popup",e),P()}else E("Failed to get access token: "+(r.message?.toString()||r.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",r)}})().then((()=>{}))}),[t,c,n,l,u]),e.useEffect((()=>{if(i&&i.sub&&g&&void 0===q){let e=!0;return d.loginUser(i.sub,g).then((r=>{e&&(null===r?j(!1):""===r?E("Kontrollera internetanslutningen och försök igen."):(d.setToken(g),d.getNickname().then(_),j(!0)))})).catch((()=>{e&&(E("Ett fel uppstod. Försök igen senare."),j(!1))})),()=>{e=!1}}}),[i,g,q,d]);const P=e.useCallback((()=>{d.logout(),p(null),E(null),j(void 0),_(""),a({logoutParams:{returnTo:o.getConfigValue("AUTH_REDIRECT_URL")}})}),[d,a]),T=e.useCallback((async e=>{const r=await d.registerUser(e,i.email,i.sub,g);return r&&(d.setToken(g),j(!0)),r}),[d,i,g]);return e.useEffect((()=>{d.onUnauthorized=P}),[d]),e.useMemo((()=>({isAuthenticated:t,isRegistered:q,accessToken:g,authError:C,isLoading:u,user:i,nickname:m,logout:P,registerUser:T,codicentService:d,loginWithRedirect:l})),[t,q,g,C,u,i,m,P,T,d,l])};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../services/codicent.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=o=>{const{isAuthenticated:t,getAccessTokenSilently:n,user:i,isLoading:a,logout:u,getAccessTokenWithPopup:c,loginWithRedirect:l,loginWithPopup:g}=o,[p,q]=e.useState(null),[j,C]=e.useState(void 0),[m,E]=e.useState(null),[P,d]=e.useState(""),_=e.useMemo((()=>new r.CodicentService({API_BASE_URL:s.getConfigValue("API_BASE_URL"),APP_LOG_CODICENT:s.getConfigValue("APP_LOG_CODICENT"),APP_LOG_TOKEN:s.getConfigValue("APP_LOG_TOKEN"),APP_NAME:s.getConfigValue("APP_NAME"),APP_PREFIX:s.getConfigValue("APP_PREFIX"),APP_TEMPLATE:s.getConfigValue("APP_TEMPLATE"),BUTTON_TAG:s.getConfigValue("BUTTON_TAG"),STRIPE_PUBLIC_KEY:s.getConfigValue("STRIPE_PUBLIC_KEY"),SUBSCRIPTION_NEEDED:s.getConfigValue("SUBSCRIPTION_NEEDED"),USER_PREFIX:s.getConfigValue("USER_PREFIX"),ANONYMOUS_TOKEN:s.getConfigValue("ANONYMOUS_TOKEN")})),[]);e.useEffect((()=>{!a&&t&&(async()=>{try{const e=await n({});console.debug("CODICENT: ACCESS TOKEN",e),q(e)}catch(e){console.debug("CODICENT: Failed to get access token",e);const r=e;if(r&&"object"==typeof r&&"error"in r&&"login_required"===r.error)console.warn("CODICENT: Login required"),T();else if(r&&"object"==typeof r&&"error"in r&&"consent_required"===r.error)try{const e=await c();if(!e)return void E("Failed to get access token: no token from auth0 with popup");console.log("CODICENT: GOT ACCESS TOKEN"),q(e)}catch(e){console.warn("CODICENT: Failed to get access token with popup",e),T()}else E("Failed to get access token: "+(r.message?.toString()||r.toString())),console.log("CODICENT: ACCESS TOKEN ERROR",r)}})().then((()=>{}))}),[t,c,n,l,a]),e.useEffect((()=>{if(i&&i.sub&&p&&void 0===j){let e=!0;return _.loginUser(i.sub,p).then((r=>{e&&(null===r?C(!1):""===r?E("Kontrollera internetanslutningen och försök igen."):(_.setToken(p),_.getNickname().then(d),C(!0)))})).catch((()=>{e&&(E("Ett fel uppstod. Försök igen senare."),C(!1))})),()=>{e=!1}}}),[i,p,j,_]);const T=e.useCallback((()=>{_.logout(),q(null),E(null),C(void 0),d(""),u({logoutParams:{returnTo:s.getConfigValue("AUTH_REDIRECT_URL")}})}),[_,u]),S=e.useCallback((async e=>{const r=await _.registerUser(e,i.email,i.sub,p);return r&&(_.setToken(p),C(!0)),r}),[_,i,p]);e.useEffect((()=>{_.onUnauthorized=T}),[_]);const A=e.useCallback((async e=>{try{await g({authorizationParams:{connection:"email",login_hint:e}})}catch(e){console.error("Passwordless login failed:",e),E(`Passwordless login failed: ${e}`)}}),[g]);return e.useMemo((()=>({isAuthenticated:t,isRegistered:j,accessToken:p,authError:m,isLoading:a,user:i,nickname:P,logout:T,registerUser:S,codicentService:_,loginWithRedirect:l,loginPasswordless:A})),[t,j,p,m,a,i,P,T,S,_,l,A])};
@@ -1 +1 @@
1
- "use strict";var e=require("react"),t=require("../stores/chatStore.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var s=require("../utils/logging.js");require("react/jsx-runtime"),require("../_virtual/index.js"),require("../config/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),exports.useChat=function(r){const[o,a]=e.useState(t.chatStore.getState()),{service:n}=r;e.useEffect((()=>t.chatStore.subscribe(a)),[n]);const i=e.useCallback((async()=>{const e=t.chatStore.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const r=await n.getChatHistory(e),o=t.chatStore.getMessages();return r.length>o.length?(console.log(`Found ${r.length-o.length} missed messages, updating chat...`),t.chatStore.reset(),r.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)})),t.chatStore.setConversationId(e),s.default("chat-history-reloaded"),!0):(console.log("No missed messages found"),!1)}catch(e){return console.error("Failed to reload chat history:",e),!1}}return!1}),[n]),c=e.useCallback(((e,r=0)=>{if(""===e.trim())return;const a=`$user-msg-${Date.now()}`,l={id:a,sender:"user",content:e},d=o.messages.length>0?o.messages[o.messages.length-1].id:void 0;t.chatStore.addMessage(l),t.chatStore.setBotTyping(!0),s.default("chat-send");const u=Promise.race([n.chat(e,d),new Promise(((e,t)=>{setTimeout((()=>t(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:r,content:o}=e,a={id:r,sender:"bot",content:o,isNew:!0};t.chatStore.setConversationId(r),t.chatStore.addMessage(a),t.chatStore.setBotTyping(!1),s.default("chat-receive"),o.startsWith("Error code: ")&&s.default("chat-error: "+o)})).catch((async o=>{console.error("Chat error details:",{error:o,message:o?.message,name:o?.name,stack:o?.stack,tempId:a,lastMessageId:d,retryCount:r,timestamp:(new Date).toISOString()});if(0===r&&("AbortError"===o?.name||o?.message?.includes("timeout")||o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),void setTimeout((()=>c(e,r+1)),2e3);function l(){let e="An error occurred while sending the message. Please try again.";if(n.onUnauthorized&&o?.toString().includes("401"))return alert("Session expired. Please log in again."),void n.onUnauthorized();"AbortError"===o?.name||o?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",s.default("chat-timeout")):o?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",s.default("chat-server-error")):(o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",s.default("chat-network-error")),console.warn(e),t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),s.default("chat-error")}"AbortError"===o?.name||o?.message?.includes("timeout")||o?.message?.includes("Failed to fetch")||o?.message?.includes("NetworkError")||o?.message?.includes("WebSocket")||o?.message?.includes("SignalR")||o?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await i())return t.chatStore.removeMessage(a),t.chatStore.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void s.default("chat-recovered");l()}),2e3)):l()}));t.chatStore.addPendingRequest(a,u)}),[n,o.messages,i]),l=e.useCallback((()=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("new-chat")}),[]),d=e.useCallback((e=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("open-chat"),n.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)}))}))}),[n]);return{messages:o.messages,isBotTyping:o.isBotTyping,handleSend:c,newChat:l,openChat:d,reloadChatHistory:i}};
1
+ "use strict";var e=require("react"),t=require("../stores/chatStore.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js");var s=require("../utils/logging.js");require("react/jsx-runtime"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),exports.useChat=function(r){const[a,o]=e.useState(t.chatStore.getState()),{service:n}=r;e.useEffect((()=>t.chatStore.subscribe(o)),[n]);const i=e.useCallback((async()=>{const e=t.chatStore.getConversationId();if(e){console.log("Reloading chat history to check for missed messages...");try{const r=await n.getChatHistory(e),a=t.chatStore.getMessages();return r.length>a.length?(console.log(`Found ${r.length-a.length} missed messages, updating chat...`),t.chatStore.reset(),r.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)})),t.chatStore.setConversationId(e),s.default("chat-history-reloaded"),!0):(console.log("No missed messages found"),!1)}catch(e){return console.error("Failed to reload chat history:",e),!1}}return!1}),[n]),c=e.useCallback(((e,r=0)=>{if(""===e.trim())return;const o=`$user-msg-${Date.now()}`,l={id:o,sender:"user",content:e},d=a.messages.length>0?a.messages[a.messages.length-1].id:void 0;t.chatStore.addMessage(l),t.chatStore.setBotTyping(!0),s.default("chat-send");const u=Promise.race([n.chat(e,d),new Promise(((e,t)=>{setTimeout((()=>t(new Error("Request timeout - please try again"))),36e4)}))]).then((e=>{const{id:r,content:a}=e,o={id:r,sender:"bot",content:a,isNew:!0};t.chatStore.setConversationId(r),t.chatStore.addMessage(o),t.chatStore.setBotTyping(!1),s.default("chat-receive"),a.startsWith("Error code: ")&&s.default("chat-error: "+a)})).catch((async a=>{console.error("Chat error details:",{error:a,message:a?.message,name:a?.name,stack:a?.stack,tempId:o,lastMessageId:d,retryCount:r,timestamp:(new Date).toISOString()});if(0===r&&("AbortError"===a?.name||a?.message?.includes("timeout")||a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError")))return console.log("Auto-retrying chat request..."),t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),void setTimeout((()=>c(e,r+1)),2e3);function l(){let e="An error occurred while sending the message. Please try again.";if(n.onUnauthorized&&a?.toString().includes("401"))return alert("Session expired. Please log in again."),void n.onUnauthorized();"AbortError"===a?.name||a?.message?.includes("timeout")?(e="Request timed out. Please check your connection and try again.",s.default("chat-timeout")):a?.message?.includes("HTTP error: 500")?(e="Server error. Please try again in a moment.",s.default("chat-server-error")):(a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError"))&&(e="Network error. Please check your connection and try again.",s.default("chat-network-error")),console.warn(e),t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),s.default("chat-error")}"AbortError"===a?.name||a?.message?.includes("timeout")||a?.message?.includes("Failed to fetch")||a?.message?.includes("NetworkError")||a?.message?.includes("WebSocket")||a?.message?.includes("SignalR")||a?.message?.includes("Connection")?(console.log("Potential SignalR/connection issue detected, checking for missed messages..."),setTimeout((async()=>{if(await i())return t.chatStore.removeMessage(o),t.chatStore.setBotTyping(!1),console.log("Recovered missed message(s) from server"),void s.default("chat-recovered");l()}),2e3)):l()}));t.chatStore.addPendingRequest(o,u)}),[n,a.messages,i]),l=e.useCallback((()=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("new-chat")}),[]),d=e.useCallback((e=>{t.chatStore.reset(),t.chatStore.clearMessages(),s.default("open-chat"),n.getChatHistory(e).then((e=>{e.forEach(((e,s)=>{const r={id:e.id,sender:s%2==0?"user":"bot",content:e.content};t.chatStore.addMessage(r)}))}))}),[n]);return{messages:a.messages,isBotTyping:a.isBotTyping,handleSend:c,newChat:l,openChat:d,reloadChatHistory:i}};
@@ -4,6 +4,7 @@ import { AppStateMachine, StateContext, AppStateDefinition } from "../utils";
4
4
  import { AudioRecorderState } from "./useAudioRecorder";
5
5
  import { UseAuthState } from "./useAuthState";
6
6
  import { RealtimeVoice } from "./useRealtimeVoiceAI";
7
+ import { ToolsConfig } from "./useTools";
7
8
  export interface CodicentAppState {
8
9
  audio: AudioRecorderState;
9
10
  auth: UseAuthState;
@@ -25,7 +26,9 @@ export interface CodicentAppState {
25
26
  script: string;
26
27
  currentStateName: string;
27
28
  }
28
- export declare const useCodicentApp: ({ auth0 }: {
29
+ export interface UseCodicentAppOptions {
29
30
  auth0: Auth0ContextInterface;
30
- }) => CodicentAppState;
31
+ toolsConfig?: ToolsConfig;
32
+ }
33
+ export declare const useCodicentApp: ({ auth0, toolsConfig }: UseCodicentAppOptions) => CodicentAppState;
31
34
  //# sourceMappingURL=useCodicentApp.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCodicentApp.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCodicentApp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAyB,MAAM,UAAU,CAAC;AACpG,OAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAA2B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIzE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,eAAe,CAAC;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,cAAe;IAAE,KAAK,EAAE,qBAAqB,CAAA;CAAE,KAmKnE,gBACN,CAAC"}
1
+ {"version":3,"file":"useCodicentApp.d.ts","sourceRoot":"","sources":["../../../src/hooks/useCodicentApp.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAyB,MAAM,UAAU,CAAC;AACpG,OAAyB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAA2B,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,YAAY,CAAC;IACnB,YAAY,EAAE,eAAe,CAAC;IAC9B,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,kBAAkB,CAAC;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC;IACtB,KAAK,EAAE,aAAa,GAAG,SAAS,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,2BAA4B,qBAAqB,KAmKrE,gBACN,CAAC"}
@@ -1 +1 @@
1
- "use strict";var e=require("react");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime");var t=require("../utils/appState.js");require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var r=require("./useAudioRecorder.js"),s=require("./useAuthState.js"),n=require("./useRealtimeVoiceAI.js"),a=require("./useTools.js"),c=require("../config/index.js");exports.useCodicentApp=({auth0:u})=>{const i=s.default(u),o=e.useRef(t.createAppStateMachine(i.codicentService,(()=>{}))),[l,d]=e.useState(),{service:m,context:p}=o.current,{nickname:f,name:k,error:v,errorType:g,selectedApp:h}=p,A=e.useCallback(((e,t)=>{const r=e.get("file").name;m.uploadFile(r,e).then((e=>{m.sendMessage(`#transcribe ${""!==t?(t.startsWith("#")?"":"#")+t+" ":""}#file:${e}`).then((()=>{})).catch(console.warn)}))}),[m]),C=r.useAudioRecorder(A),[b,S]=e.useState(),[q,w]=e.useState(),[j,y]=e.useState(!1),x=e.useMemo((()=>new Audio("./notification.mp3")),[]),T=e.useCallback((()=>y(!0)),[]),_=a.default(m,S,w,x,b,T),I=e.useMemo((()=>c.getConfigValue("REALTIME_VOICE_API_KEY")||""),[]),E=n.default(m,I,_);e.useEffect((()=>{j&&(E?.disconnectConversation(),y(!1))}),[j,E]),e.useEffect((()=>{i.isAuthenticated&&i.user&&i.accessToken&&o.current.updateContext({isAuthenticated:i.isAuthenticated,user:{sub:i.user.sub,email:i.user.email},accessToken:i.accessToken})}),[i.isAuthenticated,i.user,i.accessToken]),e.useEffect((()=>o.current.updateContext({nickname:i.nickname})),[i.nickname]),e.useEffect((()=>{o.current.update();let e,t=o.current.getCurrentStateName();d(o.current.getCurrentStateName()),JSON.stringify(o.current.context);let r=!1;const s=n=>setInterval((()=>{const n=o.current.getCurrentStateName();if("hasAccess"===n&&!r)return console.log("🎯 Reached stable state - switching to slower polling (1000ms)"),r=!0,clearInterval(e),void(e=s(1e3));if("hasAccess"!==n&&r)return console.log("🚨 Left stable state - switching to fast polling (200ms)"),r=!1,clearInterval(e),void(e=s(200));const a=JSON.stringify(o.current.context);o.current.update();const c=JSON.stringify(o.current.context),u=o.current.getCurrentStateName();u===t&&a===c||(d(u),t=u)}),n);return e=s(200),()=>clearInterval(e)}),[]);const M=e.useCallback((e=>e.replace("{nickname}",f||"unknown").replace("{token}",encodeURIComponent(i.accessToken||"unknown")).replace("{app}",h||"unknown")),[f,i.accessToken,h]),N=e.useCallback((e=>{o.current.updateContext({isAnonymous:e})}),[]),R=e.useCallback((()=>o.current.isBusy()),[]);return e.useMemo((()=>({audio:C,auth:i,currentStateName:l,stateMachine:o.current,service:m,context:p,state:l,nickname:f,name:k,error:v,errorType:g,fixAppUrl:M,setAnonymous:N,allStates:o.current.allStates,isBusy:R,voice:E,html:b,setHtml:S,script:q})),[l,f,k,v,g,b,q,i.isAuthenticated,i.isLoading,C.isRecording,E?.isConnected,M,N,R])};
1
+ "use strict";var e=require("react");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("react/jsx-runtime");var t=require("../utils/appState.js");require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("../utils/cacheManager.js");var r=require("./useAudioRecorder.js"),s=require("./useAuthState.js"),n=require("./useRealtimeVoiceAI.js"),a=require("./useTools.js"),c=require("../config/index.js");exports.useCodicentApp=({auth0:i,toolsConfig:u})=>{const o=s.default(i),l=e.useRef(t.createAppStateMachine(o.codicentService,(()=>{}))),[d,m]=e.useState(),{service:p,context:f}=l.current,{nickname:g,name:k,error:v,errorType:h,selectedApp:A}=f,C=e.useCallback(((e,t)=>{const r=e.get("file").name;p.uploadFile(r,e).then((e=>{p.sendMessage(`#transcribe ${""!==t?(t.startsWith("#")?"":"#")+t+" ":""}#file:${e}`).then((()=>{})).catch(console.warn)}))}),[p]),b=r.useAudioRecorder(C),[S,q]=e.useState(),[j,w]=e.useState(),[y,x]=e.useState(!1),T=e.useMemo((()=>new Audio("./notification.mp3")),[]),_=e.useCallback((()=>x(!0)),[]),I=a.default(p,q,w,T,S,_,u),M=e.useMemo((()=>c.getConfigValue("REALTIME_VOICE_API_KEY")||""),[]),E=n.default(p,M,I);e.useEffect((()=>{y&&(E?.disconnectConversation(),x(!1))}),[y,E]),e.useEffect((()=>{o.isAuthenticated&&o.user&&o.accessToken&&l.current.updateContext({isAuthenticated:o.isAuthenticated,user:{sub:o.user.sub,email:o.user.email},accessToken:o.accessToken})}),[o.isAuthenticated,o.user,o.accessToken]),e.useEffect((()=>l.current.updateContext({nickname:o.nickname})),[o.nickname]),e.useEffect((()=>{l.current.update();let e,t=l.current.getCurrentStateName();m(l.current.getCurrentStateName()),JSON.stringify(l.current.context);let r=!1;const s=n=>setInterval((()=>{const n=l.current.getCurrentStateName();if("hasAccess"===n&&!r)return console.log("🎯 Reached stable state - switching to slower polling (1000ms)"),r=!0,clearInterval(e),void(e=s(1e3));if("hasAccess"!==n&&r)return console.log("🚨 Left stable state - switching to fast polling (200ms)"),r=!1,clearInterval(e),void(e=s(200));const a=JSON.stringify(l.current.context);l.current.update();const c=JSON.stringify(l.current.context),i=l.current.getCurrentStateName();i===t&&a===c||(m(i),t=i)}),n);return e=s(200),()=>clearInterval(e)}),[]);const N=e.useCallback((e=>e.replace("{nickname}",g||"unknown").replace("{token}",encodeURIComponent(o.accessToken||"unknown")).replace("{app}",A||"unknown")),[g,o.accessToken,A]),R=e.useCallback((e=>{l.current.updateContext({isAnonymous:e})}),[]),O=e.useCallback((()=>l.current.isBusy()),[]);return e.useMemo((()=>({audio:b,auth:o,currentStateName:d,stateMachine:l.current,service:p,context:f,state:d,nickname:g,name:k,error:v,errorType:h,fixAppUrl:N,setAnonymous:R,allStates:l.current.allStates,isBusy:O,voice:E,html:S,setHtml:q,script:j})),[d,g,k,v,h,S,j,o.isAuthenticated,o.isLoading,b.isRecording,E?.isConnected,N,R,O])};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useStateWithLocalStorage.js");require("../services/codicent.js"),require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=t=>{const[o,i]=r.default("APP_WELCOME_STATE_TEXT_"+t.context.selectedApp,""),[n,a]=r.default("CODICENT_STATE_LAST_TIMESTAMP_"+t.context.selectedApp,0),{service:u,current:c}=t,[p,l]=e.useState(!1),j=e.useRef(!1),q=e.useCallback((async()=>{if(!j.current){j.current=!0;try{const e=await u.getMessagesFast(s.getConfigValue("LOGBOOK_TAGS").split(",").filter((e=>"chat"!==e))),r=e.length>0?e[0].createdAt.getTime():n;if(r>n){a(r),l(!0);const e=await u.chat(s.getConfigValue("WELCOME_STATUS_PROMPT"));i(e.content)}}finally{l(!1),j.current=!1}}}),[u,n,a,i]),m=e.useCallback((()=>{u&&s.getConfigValue("CHAT_INSTRUCTIONS")}),[u]);return e.useEffect((()=>{c===t.allStates.hasAccess&&s.getConfigValue("WELCOME_STATUS_PROMPT")?(q(),m()):s.getConfigValue("WELCOME_STATUS_PROMPT")||i("")}),[c,t,q,m,i]),{welcomeStatusText:o,updating:p}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("./useStateWithLocalStorage.js");require("../services/codicent.js"),require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("react/jsx-runtime"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var s=require("../config/index.js");require("../stores/chatStore.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./useLocalization.js"),require("./useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js"),require("../components/Page.js"),require("../pages/AppFrame.js"),require("../pages/Chat.js"),require("../pages/Compose.js"),require("../pages/Snap.js"),require("../pages/Search.js"),require("../pages/Login.js"),require("../pages/CrmPage.js"),require("../pages/CrmPagePersistent.js"),require("../pages/ImageView.js"),require("../pages/FormInvite.js"),require("../pages/FormAccept.js"),require("../pages/Sales.js"),require("../pages/Purchase.js");exports.default=t=>{const[o,i]=r.default("APP_WELCOME_STATE_TEXT_"+t.context.selectedApp,""),[n,a]=r.default("CODICENT_STATE_LAST_TIMESTAMP_"+t.context.selectedApp,0),{service:u,current:c}=t,[p,l]=e.useState(!1),j=e.useRef(!1),q=e.useCallback((async()=>{if(!j.current){j.current=!0;try{const e=await u.getMessagesFast(s.getConfigValue("LOGBOOK_TAGS").split(",").filter((e=>"chat"!==e))),r=e.length>0?e[0].createdAt.getTime():n;if(r>n){a(r),l(!0);const e=await u.chat(s.getConfigValue("WELCOME_STATUS_PROMPT"));i(e.content)}}finally{l(!1),j.current=!1}}}),[u,n,a,i]),g=e.useCallback((()=>{u&&s.getConfigValue("CHAT_INSTRUCTIONS")}),[u]);return e.useEffect((()=>{c===t.allStates.hasAccess&&s.getConfigValue("WELCOME_STATUS_PROMPT")?(q(),g()):s.getConfigValue("WELCOME_STATUS_PROMPT")||i("")}),[c,t,q,g,i]),{welcomeStatusText:o,updating:p}};
@@ -1 +1 @@
1
- {"version":3,"file":"useRealtimeVoiceAI.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRealtimeVoiceAI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAK/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,kBAAkB,oBACL,eAAe,UACxB,MAAM,SACP;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,UACtD,MAAM,KACb,aAAa,GAAG,SA2iBlB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"useRealtimeVoiceAI.d.ts","sourceRoot":"","sources":["../../../src/hooks/useRealtimeVoiceAI.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAK/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH;AAED;;GAEG;AACH,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,mBAAmB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,sBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,kBAAkB,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,WAAW,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,QAAA,MAAM,kBAAkB,oBACL,eAAe,UACxB,MAAM,SACP;IAAE,UAAU,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,EAAE,UACtD,MAAM,KACb,aAAa,GAAG,SA0pBlB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/wav_renderer.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js");var n=require("../lib/wavtools/lib/wav_stream_player.js"),r=require("../lib/wavtools/lib/wav_recorder.js"),a=require("../config/index.js");exports.default=(s,o,i,c)=>{const u=!!a.getConfigValue("APP_CONFIG"),l=!!a.getConfigValue("APP_BUTTONS");u||console.warn("APP_CONFIG is not set. Voice AI will not be available."),l||console.warn("APP_BUTTONS is not set. Voice AI will not be available.");const d=a.getConfigValue("APP_CONFIG"),p=a.getConfigValue("APP_BUTTONS");a.getConfigValue("API_BASE_URL").replace(/\/$/,""),a.getConfigValue("USE_REALTIME_SESSION_ENDPOINT"),a.getConfigValue("REALTIME_SESSION_ENDPOINT");const f=c||a.getConfigValue("REALTIME_VOICE_MODEL")||"alloy",g=["alloy","shimmer","echo"],m=g.includes(f)?f:"alloy";f!==m&&console.warn(`[codicent-app-sdk] Voice "${f}" is not supported in the current SDK version. Supported voices: ${g.join(", ")}. Falling back to "${m}".`);const w=e.useRef(new r.WavRecorder({sampleRate:24e3})),S=e.useRef(new n.WavStreamPlayer({sampleRate:24e3})),v=e.useRef(null),y=e.useRef(null),h=e.useRef(null),_=e.useRef(null),C=e.useRef(!1),R=e.useRef(null),O=e.useRef(null),I=e.useRef(null),T=e.useRef((new Date).toISOString()),[E,b]=e.useState([]),[N,P]=e.useState([]),[k,A]=e.useState(!1),[D,M]=e.useState(!1),[V,x]=e.useState(!1),F=e.useRef(0),L=e.useRef(0),[$,j]=e.useState(""),[q,U]=e.useState("en-US"),[J,B]=e.useState((()=>u&&l&&p&&d&&d.apps&&d.apps[p]?d.apps[p].voiceInstructions||d.REALTIME_VOICE_INSTRUCTIONS||"":d&&d.REALTIME_VOICE_INSTRUCTIONS||"")),W=e.useCallback((e=>{const t=T.current,n=new Date(t).valueOf(),r=new Date(e).valueOf()-n,a=Math.floor(r/10)%100,s=Math.floor(r/1e3)%60,o=e=>{let t=e+"";for(;t.length<2;)t="0"+t;return t};return`${o(Math.floor(r/6e4)%60)}:${o(s)}.${o(a)}`}),[]),G=e.useCallback((async()=>{try{T.current=(new Date).toISOString(),A(!0),P([]),b([]);const e=await s.getRealtimeSessionToken(m);if(!e)throw new Error("No ephemeral key returned from session endpoint");const t=new RTCPeerConnection;v.current=t,h.current||(h.current=new Audio,h.current.autoplay=!0),t.ontrack=e=>{h.current&&e.streams[0]&&(h.current.srcObject=e.streams[0])};const n=await navigator.mediaDevices.getUserMedia({audio:!0});_.current=n;const r=n.getTracks()[0];t.addTrack(r,n);const o=t.createDataChannel("oai-events");y.current=o,o.addEventListener("message",(e=>{try{const t=JSON.parse(e.data);"session.created"===t.type||("conversation.item.created"===t.type?b((e=>[...e,t.item])):"conversation.item.input_audio_transcription.completed"===t.type?b((e=>{const n=[...e],r=n.findIndex((e=>e.id===t.item_id));return-1!==r&&n[r].formatted&&(n[r].formatted.transcript=t.transcript),n})):"response.audio_transcript.delta"===t.type||"response.audio_transcript.done"===t.type||"error"===t.type&&console.error("Server error:",t.error))}catch(t){console.warn("Invalid message:",e.data)}})),o.onopen=()=>{console.log("Data channel opened, configuring session"),o.send(JSON.stringify({type:"session.update",session:{instructions:J.replace("{{name}}",$).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString()),modalities:["text","audio"],input_audio_transcription:{model:"whisper-1"},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:500},voice:m,temperature:.8,max_response_output_tokens:4096,input_audio_format:"pcm16",output_audio_format:"pcm16",tools:i.map((e=>({type:"function",...e.definition})))}}))},o.onclose=()=>{console.log("Data channel closed")};const c=await t.createOffer();await t.setLocalDescription(c);let u="gpt-4o-realtime-preview";try{if(a.getConfigValue("REALTIME_CONFIG_ENDPOINT")){const e=await s.getRealtimeConfig();e&&e.model&&(u=e.model)}}catch(e){console.warn("Failed to fetch realtime config, using default model:",e)}const l="https://api.openai.com/v1/realtime",d=await fetch(`${l}?model=${u}`,{method:"POST",body:c.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}});if(!d.ok)throw new Error(`Failed to get SDP answer: ${d.statusText}`);const p={type:"answer",sdp:await d.text()};await t.setRemoteDescription(p),M(!1);const f=w.current,g=S.current;await f.begin(),await g.connect()}catch(e){throw console.error("[codicent-app-sdk] Failed to establish WebRTC connection:",e),A(!1),e}}),[s,m,J,$,q,i]),H=e.useCallback((async()=>{A(!1),P([]),b([]),y.current&&(y.current.close(),y.current=null),v.current&&(v.current.close(),v.current=null),_.current&&(_.current.getTracks().forEach((e=>e.stop())),_.current=null),h.current&&(h.current.pause(),h.current.srcObject=null);const e=w.current;await e.end();const t=S.current;await t.interrupt()}),[]),z=e.useCallback((async e=>{const t=y.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"conversation.item.delete",item_id:e}))}),[]),K=e.useCallback((async()=>{x(!0);const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"input_audio_buffer.commit"}))}),[]),Q=e.useCallback((async()=>{x(!1);const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"response.create"}))}),[]),X=e.useCallback((async e=>{const t=y.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"session.update",session:{turn_detection:"none"===e?null:{type:"server_vad"}}})),M("none"===e)}),[]);e.useEffect((()=>{if($&&k){const e=y.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"session.update",session:{instructions:J.replace("{{name}}",$).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString())}}))}}),[J,$,q,k]),e.useEffect((()=>{let e=!0;const n=w.current,r=R.current;let a=null;const s=S.current,o=O.current;let i=null;const c=()=>{if(e){if(r&&(r.width&&r.height||(r.width=r.offsetWidth,r.height=r.offsetHeight),a=a||r.getContext("2d"),a)){a.clearRect(0,0,r.width,r.height);const e=n.recording?n.getFrequencies("voice"):{values:new Float32Array([0])},s=1-Math.max(...e.values);F.current=s,t.WavRenderer.drawCircularBars(r,a,e.values,"#0099ff",20,0,8)}if(o&&(o.width&&o.height||(o.width=o.offsetWidth,o.height=o.offsetHeight),i=i||o.getContext("2d"),i)){i.clearRect(0,0,o.width,o.height);const e=s.analyser?s.getFrequencies("voice"):{values:new Float32Array([0])},n=1-Math.max(...e.values);L.current=n,t.WavRenderer.drawCircularBars(o,i,e.values,"#009900",20,0,8)}window.requestAnimationFrame(c)}};return c(),()=>{e=!1}}),[]),e.useEffect((()=>{!C.current&&i&&J&&(C.current=!0)}),[i,J]);const Y=e.useCallback((e=>{const t=e.replace("{{name}}",$).replace("{{language}}",q).replace("{{time}}",(new Date).toISOString()),n=y.current;n&&"open"===n.readyState&&n.send(JSON.stringify({type:"session.update",session:{instructions:t}})),B(e)}),[$,q]);return e.useMemo((()=>{if(u&&l)return{items:E,realtimeEvents:N,isConnected:k,canPushToTalk:D,isRecording:V,clientCanvasRef:R,serverCanvasRef:O,eventsScrollRef:I,formatTime:W,connectConversation:G,disconnectConversation:H,deleteConversationItem:z,startRecording:K,stopRecording:Q,changeTurnEndType:X,getRecorderLevel:()=>F.current,getStreamLevel:()=>L.current,setUsername:j,updateInstructions:Y,setLanguage:U}}),[u,l,E,N,k,D,V,R,O,I])};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/wav_renderer.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js");var n=require("../lib/wavtools/lib/wav_stream_player.js"),r=require("../lib/wavtools/lib/wav_recorder.js"),a=require("../config/index.js");exports.default=(o,s,i,c)=>{const l=!!a.getConfigValue("APP_CONFIG"),u=!!a.getConfigValue("APP_BUTTONS");l||console.warn("APP_CONFIG is not set. Voice AI will not be available."),u||console.warn("APP_BUTTONS is not set. Voice AI will not be available.");const d=a.getConfigValue("APP_CONFIG"),p=a.getConfigValue("APP_BUTTONS");a.getConfigValue("API_BASE_URL").replace(/\/$/,""),a.getConfigValue("USE_REALTIME_SESSION_ENDPOINT"),a.getConfigValue("REALTIME_SESSION_ENDPOINT");const f=c||a.getConfigValue("REALTIME_VOICE_MODEL")||"alloy",g=["alloy","shimmer","echo"],m=g.includes(f)?f:"alloy";f!==m&&console.warn(`[codicent-app-sdk] Voice "${f}" is not supported in the current SDK version. Supported voices: ${g.join(", ")}. Falling back to "${m}".`);const y=e.useRef(new r.WavRecorder({sampleRate:24e3})),_=e.useRef(new n.WavStreamPlayer({sampleRate:24e3})),S=e.useRef(null),w=e.useRef(null),v=e.useRef(null),h=e.useRef(null),O=e.useRef(!1),C=e.useRef(null),R=e.useRef(null),I=e.useRef(null),T=e.useRef((new Date).toISOString()),[N,E]=e.useState([]),[b,A]=e.useState([]),[P,k]=e.useState(!1),[V,D]=e.useState(!1),[M,x]=e.useState(!1),F=e.useRef(0),J=e.useRef(0),[$,L]=e.useState(""),[j,q]=e.useState("en-US"),U=e.useRef(new Map),[B,W]=e.useState((()=>l&&u&&p&&d&&d.apps&&d.apps[p]?d.apps[p].voiceInstructions||d.REALTIME_VOICE_INSTRUCTIONS||"":d&&d.REALTIME_VOICE_INSTRUCTIONS||"")),G=e.useCallback((e=>{const t=T.current,n=new Date(t).valueOf(),r=new Date(e).valueOf()-n,a=Math.floor(r/10)%100,o=Math.floor(r/1e3)%60,s=e=>{let t=e+"";for(;t.length<2;)t="0"+t;return t};return`${s(Math.floor(r/6e4)%60)}:${s(o)}.${s(a)}`}),[]),H=e.useCallback((async()=>{try{T.current=(new Date).toISOString(),k(!0),A([]),E([]),U.current.clear();const e=await o.getRealtimeSessionToken(m);if(!e)throw new Error("No ephemeral key returned from session endpoint");const t=new RTCPeerConnection;S.current=t,v.current||(v.current=new Audio,v.current.autoplay=!0),t.ontrack=e=>{v.current&&e.streams[0]&&(v.current.srcObject=e.streams[0])};const n=await navigator.mediaDevices.getUserMedia({audio:!0});h.current=n;const r=n.getTracks()[0];t.addTrack(r,n);const s=t.createDataChannel("oai-events");w.current=s,s.addEventListener("message",(e=>{try{const t=JSON.parse(e.data);if("session.created"===t.type);else if("conversation.item.created"===t.type)E((e=>[...e,t.item]));else if("conversation.item.input_audio_transcription.completed"===t.type)E((e=>{const n=[...e],r=n.findIndex((e=>e.id===t.item_id));return-1!==r&&n[r].formatted&&(n[r].formatted.transcript=t.transcript),n}));else if("response.audio_transcript.delta"===t.type);else if("response.audio_transcript.done"===t.type);else if("response.output_item.added"===t.type){const e=t.item;"function_call"===e?.type&&(console.log("[Voice AI] Function call initiated:",e.name),U.current.set(e.id,{name:e.name||"",arguments:"",call_id:e.call_id||e.id}))}else if("response.function_call_arguments.delta"===t.type){const e=t.item_id,n=t.delta,r=U.current.get(e);r&&n&&(r.arguments+=n,U.current.set(e,r))}else if("response.function_call_arguments.done"===t.type){const e=t.item_id,n=U.current.get(e);if(n){console.log(`[Voice AI] Executing tool: ${n.name}`);const t=i.find((e=>e.definition.name===n.name));if(t){let e={};try{e=n.arguments?JSON.parse(n.arguments):{}}catch(t){console.error("[Voice AI] Failed to parse tool arguments:",t),e={}}Promise.resolve(t.handler(e)).then((e=>{console.log(`[Voice AI] Tool ${n.name} completed:`,e),s&&"open"===s.readyState&&(s.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n.call_id,output:JSON.stringify(e)}})),s.send(JSON.stringify({type:"response.create"})))})).catch((e=>{console.error(`[Voice AI] Tool ${n.name} failed:`,e),s&&"open"===s.readyState&&(s.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n.call_id,output:JSON.stringify({error:e.message||"Tool execution failed"})}})),s.send(JSON.stringify({type:"response.create"})))}))}else console.error(`[Voice AI] Tool not found: ${n.name}`);U.current.delete(e)}}else"error"===t.type&&console.error("Server error:",t.error)}catch(t){console.warn("Invalid message:",e.data)}})),s.onopen=()=>{console.log("Data channel opened, configuring session"),s.send(JSON.stringify({type:"session.update",session:{instructions:B.replace("{{name}}",$).replace("{{language}}",j).replace("{{time}}",(new Date).toISOString()),modalities:["text","audio"],input_audio_transcription:{model:"whisper-1"},turn_detection:{type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:500},voice:m,temperature:.8,max_response_output_tokens:4096,input_audio_format:"pcm16",output_audio_format:"pcm16",tools:i.map((e=>({type:"function",...e.definition})))}}))},s.onclose=()=>{console.log("Data channel closed")};const c=await t.createOffer();await t.setLocalDescription(c);let l="gpt-4o-realtime-preview";try{if(a.getConfigValue("REALTIME_CONFIG_ENDPOINT")){const e=await o.getRealtimeConfig();e&&e.model&&(l=e.model)}}catch(e){console.warn("Failed to fetch realtime config, using default model:",e)}const u="https://api.openai.com/v1/realtime",d=await fetch(`${u}?model=${l}`,{method:"POST",body:c.sdp,headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/sdp"}});if(!d.ok)throw new Error(`Failed to get SDP answer: ${d.statusText}`);const p={type:"answer",sdp:await d.text()};await t.setRemoteDescription(p),D(!1);const f=y.current,g=_.current;await f.begin(),await g.connect()}catch(e){throw console.error("[codicent-app-sdk] Failed to establish WebRTC connection:",e),k(!1),e}}),[o,m,B,$,j,i]),z=e.useCallback((async()=>{k(!1),A([]),E([]),U.current.clear(),w.current&&(w.current.close(),w.current=null),S.current&&(S.current.close(),S.current=null),h.current&&(h.current.getTracks().forEach((e=>e.stop())),h.current=null),v.current&&(v.current.pause(),v.current.srcObject=null);const e=y.current;await e.end();const t=_.current;await t.interrupt()}),[]),K=e.useCallback((async e=>{const t=w.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"conversation.item.delete",item_id:e}))}),[]),Q=e.useCallback((async()=>{x(!0);const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"input_audio_buffer.commit"}))}),[]),X=e.useCallback((async()=>{x(!1);const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"response.create"}))}),[]),Y=e.useCallback((async e=>{const t=w.current;t&&"open"===t.readyState&&t.send(JSON.stringify({type:"session.update",session:{turn_detection:"none"===e?null:{type:"server_vad"}}})),D("none"===e)}),[]);e.useEffect((()=>{if($&&P){const e=w.current;e&&"open"===e.readyState&&e.send(JSON.stringify({type:"session.update",session:{instructions:B.replace("{{name}}",$).replace("{{language}}",j).replace("{{time}}",(new Date).toISOString())}}))}}),[B,$,j,P]),e.useEffect((()=>{let e=!0;const n=y.current,r=C.current;let a=null;const o=_.current,s=R.current;let i=null;const c=()=>{if(e){if(r&&(r.width&&r.height||(r.width=r.offsetWidth,r.height=r.offsetHeight),a=a||r.getContext("2d"),a)){a.clearRect(0,0,r.width,r.height);const e=n.recording?n.getFrequencies("voice"):{values:new Float32Array([0])},o=1-Math.max(...e.values);F.current=o,t.WavRenderer.drawCircularBars(r,a,e.values,"#0099ff",20,0,8)}if(s&&(s.width&&s.height||(s.width=s.offsetWidth,s.height=s.offsetHeight),i=i||s.getContext("2d"),i)){i.clearRect(0,0,s.width,s.height);const e=o.analyser?o.getFrequencies("voice"):{values:new Float32Array([0])},n=1-Math.max(...e.values);J.current=n,t.WavRenderer.drawCircularBars(s,i,e.values,"#009900",20,0,8)}window.requestAnimationFrame(c)}};return c(),()=>{e=!1}}),[]),e.useEffect((()=>{!O.current&&i&&B&&(O.current=!0)}),[i,B]);const Z=e.useCallback((e=>{const t=e.replace("{{name}}",$).replace("{{language}}",j).replace("{{time}}",(new Date).toISOString()),n=w.current;n&&"open"===n.readyState&&n.send(JSON.stringify({type:"session.update",session:{instructions:t}})),W(e)}),[$,j]);return e.useMemo((()=>{if(l&&u)return{items:N,realtimeEvents:b,isConnected:P,canPushToTalk:V,isRecording:M,clientCanvasRef:C,serverCanvasRef:R,eventsScrollRef:I,formatTime:G,connectConversation:H,disconnectConversation:z,deleteConversationItem:K,startRecording:Q,stopRecording:X,changeTurnEndType:Y,getRecorderLevel:()=>F.current,getStreamLevel:()=>J.current,setUsername:L,updateInstructions:Z,setLanguage:q}}),[l,u,N,b,P,V,M,C,R,I])};
@@ -1,7 +1,25 @@
1
1
  import { CodicentService } from "../services/codicent";
2
- declare const useTools: (api: CodicentService, setHtml: ((html: string | undefined) => void) | undefined, injectScript: ((script: string) => void) | undefined, beep: HTMLAudioElement, html?: string, stopVoiceSession?: () => void) => {
2
+ /**
3
+ * Represents a single tool with its definition and handler function
4
+ */
5
+ export interface Tool {
3
6
  definition: any;
4
7
  handler: any;
5
- }[];
8
+ }
9
+ /**
10
+ * Strategy for merging custom tools with built-in tools
11
+ * - 'merge': Combine custom tools with built-in tools
12
+ * - 'replace': Use only custom tools, ignore built-in tools
13
+ * - 'builtin-only': Use only built-in tools, ignore custom tools
14
+ */
15
+ export type ToolMergeStrategy = "merge" | "replace" | "builtin-only";
16
+ /**
17
+ * Configuration options for tools
18
+ */
19
+ export interface ToolsConfig {
20
+ additionalTools?: Tool[];
21
+ mergeStrategy?: ToolMergeStrategy;
22
+ }
23
+ declare const useTools: (api: CodicentService, setHtml: ((html: string | undefined) => void) | undefined, injectScript: ((script: string) => void) | undefined, beep: HTMLAudioElement, html?: string, stopVoiceSession?: () => void, toolsConfig?: ToolsConfig) => Tool[];
6
24
  export default useTools;
7
25
  //# sourceMappingURL=useTools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTools.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD,QAAA,MAAM,QAAQ,QACP,eAAe,YACX,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,8BAG7B,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,qBAGhC,gBAAgB,SACf,MAAM,qBACK,MAAM,IAAI;gBAKC,GAAG;aAAW,GAAG;GA+jB/C,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"useTools.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTools.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAIvD;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,EAAE,GAAG,CAAC;CACd;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,QAAA,MAAM,QAAQ,QACP,eAAe,YACX,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,8BAG7B,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,qBAGhC,gBAAgB,SACf,MAAM,qBACK,MAAM,IAAI,gBAGd,WAAW,WA8kB1B,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../config/index.js");exports.default=(s,a=e=>{console.log(e)},n=e=>{console.log(e)},r,i,o=()=>{console.log("stopVoiceSession")})=>e.useMemo((()=>{const e=[],p=(t,s)=>{e.push({definition:t,handler:s})},c=async()=>{const e=t.getConfigValue("APP_CONFIG"),a=t.getConfigValue("APP_BUTTONS");return[...a&&e.apps[a]?e.apps[a].tasks:[],...await s.getAppTasks()]};return p({name:"stop_voice_session",description:"Stops the voice session.",parameters:{type:"object",properties:{}}},(async()=>(console.log("TOOL: stop_voice_session"),a(void 0),o(),{ok:!0}))),p({name:"inject_script",description:"Injects a script into the html/canvas view.",parameters:{type:"object",properties:{script:{type:"string",description:"The script to inject"}},required:["script"]}},(async({script:e})=>(console.log("TOOL: inject_script",e),n(e),{ok:!0}))),p({name:"post_codicent_message",description:"Posts a message to Codicent, only when requested by the user.",parameters:{type:"object",properties:{content:{type:"string",description:'The codicent message text, e.g. "remember to call Linda"'},parent_id:{type:"string",description:'The parent message id of a previous message that you will add a new revision to, by setting parent_id to the origin message being "edited"'}},required:["content"]}},(async({content:e,parent_id:t})=>await s.sendMessage(e,t))),p({name:"update_codicent_message",description:"Posts an edited message, which replaces the old message.",parameters:{type:"object",properties:{content:{type:"string",description:'The updated codicent message text, e.g. "remember to call Johan", usually including the tags from the original message.'},parent_id:{type:"string",description:"The message id of a previous/old message to be updated."}},required:["content","parent_id"]}},(async({content:e,parent_id:t})=>await s.sendMessage(e,t))),p({name:"get_messages_list",description:"Gets messages tagged with given tag name, optionally limited by num_messages. The messages are listed in chronological order, latest first.",parameters:{type:"object",properties:{num_messages:{type:"integer",description:"The number of matching messages to return"},search_text:{type:"string",description:"Search text to filter messages by"},tag_name:{type:"string",description:"Name of tag to find messages by"},after_timestamp:{type:"string",description:"Only return messages after this timestamp"},before_timestamp:{type:"string",description:"Only return messages before this timestamp"}},required:["num_messages"]}},(async({num_messages:e,search_text:t,tag_name:a,after_timestamp:n,before_timestamp:r})=>{let i=await s.getMessages(a?[a]:[]);return t&&(i=i.filter((e=>e.content.includes(t)))),n&&(i=i.filter((e=>e.createdAt>n))),r&&(i=i.filter((e=>e.createdAt<r))),i.slice(0,e)})),p({name:"chat_with_codicent_ai",description:"Sends a message to Codicent AI and gets a response message back. Remember that you can always ask codicent via this tool to find out more about what you can achieve from chatting with the codicent AI.",parameters:{type:"object",properties:{message:{type:"string",description:"Text of message to the codicent"}},required:["message"]}},(async({message:e})=>await s.chat(e))),p({name:"create_todo",description:"Saves a todo message in Codicent.",parameters:{type:"object",properties:{text:{type:"string",description:"Text of todo"}},required:["text"]}},(async({text:e})=>await s.sendMessage("#todo "+e))),p({name:"place_order",description:"Places and order with the Codicent AI.",parameters:{type:"object",properties:{message:{type:"string",description:"The text message of the order as spoken by the user."}},required:["message"]}},(async({message:e})=>await s.sendMessage(`#do Jag kommer ge dig en text (nedan) på vad jag ska beställa. Använd bara den text du får av mig, inga tools.\n Du ska skapa en tabell med detaljerad information inklusive lagerstatus \n för varje artikel i beställningen. Svara först när du har all info på plats. Ställ inga frågor på vägen utan använd det du får av mig.\n \n ----\n EXEMPEL PÅ SVAR:\n ----\n Här är en tabell med detaljerad information inklusive lagerstatus för varje artikel i beställningen:\n \n Artikel\tHyresobjekt\tNamn\tLagertyp\tGrupp\tNamn.1\tSRA/SBEF\tLeverantör\tLevnr\tDepå\tLager\tReserverat\tUthyrt nu\tTillgängligt nu\tMärke/typ\tTillverkarnr\tTillv.år\tInköpsdato\tInköpspris\tVikt\n Elverk\t12345\tElverk 1\tHyresobjekt\tMaskiner\tElverk\tSRA\tLeverantör A\t001\tDepå 1\t5\t0\t1\t4\tHonda EU22i\t123456\t2020\t2020-01-01\t10000 SEK\t21 kg\n Elverk\t12345\tElverk 2\tHyresobjekt\tMaskiner\tElverk\tSRA\tLeverantör B\t002\tDepå 2\t3\t0\t1\t2\tYamaha EF2000iS\t654321\t2019\t2019-05-01\t9000 SEK\t20 kg\n Observera att denna tabell är baserad på den information som finns tillgänglig i lagerstatusen. Om du behöver ytterligare detaljer eller om något specifikt saknas, vänligen meddela mig.\n ----\n \n --- här följer texten på vad jag vill beställa ---\n \n \n ${e}`))),p({name:"remember_info",description:"Saves info in your internal memory for future use. Use this tool to save insights on how to perform our conversations and tasks related to them.",parameters:{type:"object",properties:{message:{type:"string",description:"Your insights to improve our future conversations."}},required:["message"]}},(async({message:e})=>await s.sendMessage(`#index #insights\n\n${e}`))),p({name:"save_to_crm",description:"Saves CRM related info to your memory (logbook).",parameters:{type:"object",properties:{message:{type:"string",description:"CRM log entry description/contents."},company:{type:"string",description:"Company name for CRM log entry."},contact:{type:"string",description:"Contact name for CRM log entry."}},required:["message","company"]}},(async({message:e,company:t,contact:a})=>await s.sendMessage(`#crm\n\nFöretag: ${t}\n\nInfo: ${e}${a?"\n\nKontakt: "+a:""}`))),p({name:"set_page_html",description:"Sets the innerHtml of the div covering the full app page. You can display any html/javascript/style/mermaid content here for the user to see ;-). This view is usually referred to as the canvas, or tavlan in Swedish.",parameters:{type:"object",properties:{html:{type:"string",description:"The inner html to set the page to."}},required:["html"]}},(async({html:e})=>(a(e),r.play(),{ok:!0}))),p({name:"hide_page_html",description:"Hides the inner html of the page.",parameters:{type:"object",properties:{}}},(async()=>(a(void 0),{ok:!0}))),p({name:"get_page_html",description:"Gets the inner html of the page.",parameters:{type:"object",properties:{}}},(async()=>({html:i}))),p({name:"get_tasks",description:"Gets the list of possible tasks that can be performed. This lists task names and their id:s. Use get_task to get the task instructions given a task id.",parameters:{type:"object",properties:{},required:[]}},(async e=>(await c()).map((e=>({id:e.id,name:e.title}))))),p({name:"get_task",description:"Gets the task instructions for a given task id. Use get_tasks to get a list of possible tasks (with their id:s).",parameters:{type:"object",properties:{task_id:{type:"string",description:"The task id to get instructions for."}},required:["task_id"]}},(async({task_id:e})=>{const t=(await c()).find((t=>t.id===e));return t?t.content:"Task not found"})),e}),[s,a,n,i,r]);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../config/index.js");exports.default=(s,a=e=>{console.log(e)},n=e=>{console.log(e)},r,i,o=()=>{console.log("stopVoiceSession")},p)=>e.useMemo((()=>{const e=[],c=(t,s)=>{e.push({definition:t,handler:s})},d=async()=>{const e=t.getConfigValue("APP_CONFIG"),a=t.getConfigValue("APP_BUTTONS");return[...a&&e.apps[a]?e.apps[a].tasks:[],...await s.getAppTasks()]};c({name:"stop_voice_session",description:"Stops the voice session.",parameters:{type:"object",properties:{}}},(async()=>(console.log("TOOL: stop_voice_session"),a(void 0),o(),{ok:!0}))),c({name:"inject_script",description:"Injects a script into the html/canvas view.",parameters:{type:"object",properties:{script:{type:"string",description:"The script to inject"}},required:["script"]}},(async({script:e})=>(console.log("TOOL: inject_script",e),n(e),{ok:!0}))),c({name:"post_codicent_message",description:"Posts a message to Codicent, only when requested by the user.",parameters:{type:"object",properties:{content:{type:"string",description:'The codicent message text, e.g. "remember to call Linda"'},parent_id:{type:"string",description:'The parent message id of a previous message that you will add a new revision to, by setting parent_id to the origin message being "edited"'}},required:["content"]}},(async({content:e,parent_id:t})=>await s.sendMessage(e,t))),c({name:"update_codicent_message",description:"Posts an edited message, which replaces the old message.",parameters:{type:"object",properties:{content:{type:"string",description:'The updated codicent message text, e.g. "remember to call Johan", usually including the tags from the original message.'},parent_id:{type:"string",description:"The message id of a previous/old message to be updated."}},required:["content","parent_id"]}},(async({content:e,parent_id:t})=>await s.sendMessage(e,t))),c({name:"get_messages_list",description:"Gets messages tagged with given tag name, optionally limited by num_messages. The messages are listed in chronological order, latest first.",parameters:{type:"object",properties:{num_messages:{type:"integer",description:"The number of matching messages to return"},search_text:{type:"string",description:"Search text to filter messages by"},tag_name:{type:"string",description:"Name of tag to find messages by"},after_timestamp:{type:"string",description:"Only return messages after this timestamp"},before_timestamp:{type:"string",description:"Only return messages before this timestamp"}},required:["num_messages"]}},(async({num_messages:e,search_text:t,tag_name:a,after_timestamp:n,before_timestamp:r})=>{let i=await s.getMessages(a?[a]:[]);return t&&(i=i.filter((e=>e.content.includes(t)))),n&&(i=i.filter((e=>e.createdAt>n))),r&&(i=i.filter((e=>e.createdAt<r))),i.slice(0,e)})),c({name:"chat_with_codicent_ai",description:"Sends a message to Codicent AI and gets a response message back. Remember that you can always ask codicent via this tool to find out more about what you can achieve from chatting with the codicent AI.",parameters:{type:"object",properties:{message:{type:"string",description:"Text of message to the codicent"}},required:["message"]}},(async({message:e})=>await s.chat(e))),c({name:"create_todo",description:"Saves a todo message in Codicent.",parameters:{type:"object",properties:{text:{type:"string",description:"Text of todo"}},required:["text"]}},(async({text:e})=>await s.sendMessage("#todo "+e))),c({name:"place_order",description:"Places and order with the Codicent AI.",parameters:{type:"object",properties:{message:{type:"string",description:"The text message of the order as spoken by the user."}},required:["message"]}},(async({message:e})=>await s.sendMessage(`#do Jag kommer ge dig en text (nedan) på vad jag ska beställa. Använd bara den text du får av mig, inga tools.\n Du ska skapa en tabell med detaljerad information inklusive lagerstatus \n för varje artikel i beställningen. Svara först när du har all info på plats. Ställ inga frågor på vägen utan använd det du får av mig.\n \n ----\n EXEMPEL PÅ SVAR:\n ----\n Här är en tabell med detaljerad information inklusive lagerstatus för varje artikel i beställningen:\n \n Artikel\tHyresobjekt\tNamn\tLagertyp\tGrupp\tNamn.1\tSRA/SBEF\tLeverantör\tLevnr\tDepå\tLager\tReserverat\tUthyrt nu\tTillgängligt nu\tMärke/typ\tTillverkarnr\tTillv.år\tInköpsdato\tInköpspris\tVikt\n Elverk\t12345\tElverk 1\tHyresobjekt\tMaskiner\tElverk\tSRA\tLeverantör A\t001\tDepå 1\t5\t0\t1\t4\tHonda EU22i\t123456\t2020\t2020-01-01\t10000 SEK\t21 kg\n Elverk\t12345\tElverk 2\tHyresobjekt\tMaskiner\tElverk\tSRA\tLeverantör B\t002\tDepå 2\t3\t0\t1\t2\tYamaha EF2000iS\t654321\t2019\t2019-05-01\t9000 SEK\t20 kg\n Observera att denna tabell är baserad på den information som finns tillgänglig i lagerstatusen. Om du behöver ytterligare detaljer eller om något specifikt saknas, vänligen meddela mig.\n ----\n \n --- här följer texten på vad jag vill beställa ---\n \n \n ${e}`))),c({name:"remember_info",description:"Saves info in your internal memory for future use. Use this tool to save insights on how to perform our conversations and tasks related to them.",parameters:{type:"object",properties:{message:{type:"string",description:"Your insights to improve our future conversations."}},required:["message"]}},(async({message:e})=>await s.sendMessage(`#index #insights\n\n${e}`))),c({name:"save_to_crm",description:"Saves CRM related info to your memory (logbook).",parameters:{type:"object",properties:{message:{type:"string",description:"CRM log entry description/contents."},company:{type:"string",description:"Company name for CRM log entry."},contact:{type:"string",description:"Contact name for CRM log entry."}},required:["message","company"]}},(async({message:e,company:t,contact:a})=>await s.sendMessage(`#crm\n\nFöretag: ${t}\n\nInfo: ${e}${a?"\n\nKontakt: "+a:""}`))),c({name:"set_page_html",description:"Sets the innerHtml of the div covering the full app page. You can display any html/javascript/style/mermaid content here for the user to see ;-). This view is usually referred to as the canvas, or tavlan in Swedish.",parameters:{type:"object",properties:{html:{type:"string",description:"The inner html to set the page to."}},required:["html"]}},(async({html:e})=>(a(e),r.play(),{ok:!0}))),c({name:"hide_page_html",description:"Hides the inner html of the page.",parameters:{type:"object",properties:{}}},(async()=>(a(void 0),{ok:!0}))),c({name:"get_page_html",description:"Gets the inner html of the page.",parameters:{type:"object",properties:{}}},(async()=>({html:i}))),c({name:"get_tasks",description:"Gets the list of possible tasks that can be performed. This lists task names and their id:s. Use get_task to get the task instructions given a task id.",parameters:{type:"object",properties:{},required:[]}},(async e=>(await d()).map((e=>({id:e.id,name:e.title}))))),c({name:"get_task",description:"Gets the task instructions for a given task id. Use get_tasks to get a list of possible tasks (with their id:s).",parameters:{type:"object",properties:{task_id:{type:"string",description:"The task id to get instructions for."}},required:["task_id"]}},(async({task_id:e})=>{const t=(await d()).find((t=>t.id===e));return t?t.content:"Task not found"}));const{additionalTools:m=[],mergeStrategy:g="merge"}=p||{};return"replace"===g?m:"builtin-only"===g?e:[...e,...m]}),[s,a,n,i,r,p]);
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),o=require("./components/Textarea.js"),t=require("./components/Button.js"),s=require("./components/CompoundButton.js"),i=require("./components/Title.js"),a=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),f=require("./components/FileThumbnail.js"),C=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),I=require("./components/AiInput.js"),b=require("./components/SearchBox.js"),v=require("./components/HtmlView.js"),M=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),y=require("./components/TimePicker.js"),B=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),D=require("./hooks/useChat.js"),W=require("./hooks/useCodicentState.js"),R=require("./hooks/useAudioRecorder.js"),_=require("./hooks/useTools.js"),U=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),Q=require("./utils/logging.js"),X=require("./utils/withWakeLock.js"),Y=require("./utils/appState.js"),Z=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var $=require("./lib/wavtools/lib/wav_stream_player.js"),ee=require("./lib/wavtools/lib/wav_recorder.js"),re=require("./utils/device.js"),oe=require("./utils/helpers.js"),te=require("./config/index.js"),se=require("./pages/AppFrame.js"),ie=require("./pages/Chat.js"),ae=require("./pages/Compose.js"),pe=require("./pages/Snap.js"),ue=require("./pages/Search.js"),ne=require("./pages/Login.js"),le=require("./pages/Logout.js"),ce=require("./pages/CrmPage.js"),xe=require("./pages/ImageView.js"),de=require("./pages/FormInvite.js"),me=require("./pages/FormAccept.js"),je=require("./pages/Sales.js"),qe=require("./pages/HtmlViewer.js"),ge=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.Markdown=r.default,exports.Textarea=o.Textarea,exports.Button=t.Button,exports.CompoundButton=s.CompoundButton,exports.Title=i.Title,exports.Text=a.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=f.FileThumbnail,exports.MessageInput=C.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=I.default,exports.SearchBox=b.default,exports.HtmlView=v.default,exports.Footer=M.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=y.TimePicker,exports.useStateWithLocalStorage=B.default,exports.useAuthState=H.default,exports.useChat=D.useChat,exports.useCodicentState=W.default,exports.useAudioRecorder=R.useAudioRecorder,exports.useTools=_.default,exports.useRealtimeVoiceAI=U.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=Q.default,exports.withWakeLock=X.default,exports.AppStateMachine=Y.AppStateMachine,exports.createAppStateMachine=Y.createAppStateMachine,exports.WavStreamPlayer=$.WavStreamPlayer,exports.WavRecorder=ee.WavRecorder,exports.getGpsLocation=re.getGpsLocation,exports.isMobileDevice=re.isMobileDevice,exports.getTimeString=oe.getTimeString,exports.AppConfig=te.AppConfig,exports.getConfigValue=te.getConfigValue,exports.initCodicentApp=te.initCodicentApp,exports.AppFrame=se.default,exports.Chat=ie.default,exports.Compose=ae.Compose,exports.Snap=pe.default,exports.Search=ue.default,exports.Login=ne.default,exports.Logout=le.Logout,exports.CrmPage=ce.CrmPage,exports.ImageView=xe.default,exports.FormInvite=de.default,exports.FormAccept=me.default,exports.Sales=je.Sales,exports.HtmlViewer=qe.default,exports.Purchase=ge.Purchase,exports.StateMachine=Z.distExports.StateMachine;
1
+ "use strict";var e=require("./services/codicent.js"),r=require("./components/Markdown.js"),t=require("./components/Textarea.js"),s=require("./components/Button.js"),o=require("./components/CompoundButton.js"),a=require("./components/Title.js"),i=require("./components/Text.js"),p=require("./components/Spinner.js"),u=require("./components/Label.js"),n=require("./components/Input.js"),l=require("./components/TextHeader.js"),c=require("./components/TypingIndicator.js"),x=require("./components/Prompt.js"),d=require("./components/ChatInput.js"),m=require("./components/CombinedPlaceholderDialog.js"),j=require("./components/ChatMessage.js"),q=require("./components/Header.js"),g=require("./components/VoiceIcon.js"),h=require("./components/AudioIcon.js"),C=require("./components/FileThumbnail.js"),f=require("./components/MessageInput.js"),S=require("./components/UploadFile.js"),P=require("./components/SnapFooter.js"),k=require("./components/Profile.js"),A=require("./components/MessageItem.js"),T=require("./components/Content.js"),M=require("./components/AiInput.js"),I=require("./components/SearchBox.js"),b=require("./components/HtmlView.js"),v=require("./components/Footer.js"),w=require("./components/Page.js"),F=require("./components/UrlProcessor.js"),L=require("./components/DatePicker.js"),V=require("./components/ColorPicker.js"),y=require("./components/TimePicker.js"),B=require("./hooks/useStateWithLocalStorage.js"),H=require("./hooks/useAuthState.js"),D=require("./hooks/useChat.js"),W=require("./hooks/useCodicentState.js"),R=require("./hooks/useAudioRecorder.js"),_=require("./hooks/useTools.js"),U=require("./hooks/useRealtimeVoiceAI.js"),z=require("./hooks/useLocalization.js"),G=require("./hooks/useTemplateVariables.js"),E=require("./hooks/useCodicentApp.js"),J=require("./hooks/useAppStyles.js"),K=require("./hooks/useToaster.js"),N=require("./utils/MessageContent.js"),O=require("./utils/theme.js"),Q=require("./utils/logging.js"),X=require("./utils/withWakeLock.js"),Y=require("./utils/appState.js"),Z=require("./_virtual/index.js");require("./lib/wavtools/lib/wav_packer.js"),require("./lib/wavtools/lib/analysis/audio_analysis.js");var $=require("./lib/wavtools/lib/wav_stream_player.js"),ee=require("./lib/wavtools/lib/wav_recorder.js"),re=require("./utils/device.js"),te=require("./utils/helpers.js"),se=require("./utils/cacheManager.js"),oe=require("./config/index.js"),ae=require("./pages/AppFrame.js"),ie=require("./pages/Chat.js"),pe=require("./pages/Compose.js"),ue=require("./pages/Snap.js"),ne=require("./pages/Search.js"),le=require("./pages/Login.js"),ce=require("./pages/Logout.js"),xe=require("./pages/CrmPage.js"),de=require("./pages/CrmPagePersistent.js"),me=require("./pages/ImageView.js"),je=require("./pages/FormInvite.js"),qe=require("./pages/FormAccept.js"),ge=require("./pages/Sales.js"),he=require("./pages/HtmlViewer.js"),Ce=require("./pages/Purchase.js");exports.CodicentService=e.CodicentService,exports.Markdown=r.default,exports.Textarea=t.Textarea,exports.Button=s.Button,exports.CompoundButton=o.CompoundButton,exports.Title=a.Title,exports.Text=i.Text,exports.Spinner=p.Spinner,exports.Label=u.Label,exports.Input=n.Input,exports.TextHeader=l.default,exports.TypingIndicator=c.default,exports.Prompt=x.default,exports.ChatInput=d.default,exports.CombinedPlaceholderDialog=m.CombinedPlaceholderDialog,exports.ChatMessage=j.default,exports.Header=q.Header,exports.VoiceIcon=g.default,exports.AudioIcon=h.default,exports.FileThumbnail=C.FileThumbnail,exports.MessageInput=f.default,exports.UploadFile=S.default,exports.SnapFooter=P.default,exports.Profile=k.default,exports.MessageItem=A.default,exports.Content=T.default,exports.AiInput=M.default,exports.SearchBox=I.default,exports.HtmlView=b.default,exports.Footer=v.Footer,exports.Page=w.Page,exports.UrlProcessor=F.UrlProcessor,exports.DatePicker=L.DatePicker,exports.ColorPicker=V.ColorPicker,exports.TimePicker=y.TimePicker,exports.useStateWithLocalStorage=B.default,exports.useAuthState=H.default,exports.useChat=D.useChat,exports.useCodicentState=W.default,exports.useAudioRecorder=R.useAudioRecorder,exports.useTools=_.default,exports.useRealtimeVoiceAI=U.default,exports.useLocalization=z.default,exports.useTemplateVariables=G.useTemplateVariables,exports.useCodicentApp=E.useCodicentApp,exports.useAppStyles=J.default,exports.useToaster=K.default,exports.MessageContent=N.default,exports.generateBrandVariants=O.default,exports.log=Q.default,exports.withWakeLock=X.default,exports.AppStateMachine=Y.AppStateMachine,exports.createAppStateMachine=Y.createAppStateMachine,exports.WavStreamPlayer=$.WavStreamPlayer,exports.WavRecorder=ee.WavRecorder,exports.getGpsLocation=re.getGpsLocation,exports.isMobileDevice=re.isMobileDevice,exports.getTimeString=te.getTimeString,exports.CacheManager=se.CacheManager,exports.stateMachineCacheManager=se.stateMachineCacheManager,exports.AppConfig=oe.AppConfig,exports.getConfigValue=oe.getConfigValue,exports.initCodicentApp=oe.initCodicentApp,exports.AppFrame=ae.default,exports.Chat=ie.default,exports.Compose=pe.Compose,exports.Snap=ue.default,exports.Search=ne.default,exports.Login=le.default,exports.Logout=ce.Logout,exports.CrmPage=xe.CrmPage,exports.CrmPagePersistent=de.CrmPagePersistent,exports.ImageView=me.default,exports.FormInvite=je.default,exports.FormAccept=qe.default,exports.Sales=ge.Sales,exports.HtmlViewer=he.default,exports.Purchase=Ce.Purchase,exports.StateMachine=Z.distExports.StateMachine;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./event_handler.js"),t=require("./utils.js");class s extends e.RealtimeEventHandler{constructor({url:e,apiKey:t,dangerouslyAllowAPIKeyInBrowser:s,debug:r}={}){if(super(),this.defaultUrl="wss://api.openai.com/v1/realtime",this.url=e||this.defaultUrl,this.apiKey=t||null,this.debug=!!r,this.ws=null,globalThis.document&&this.apiKey&&!s)throw new Error('Can not provide API key in the browser without "dangerouslyAllowAPIKeyInBrowser" set to true')}isConnected(){return!!this.ws}log(...e){const t=[`[Websocket/${(new Date).toISOString()}]`].concat(e).map((e=>"object"==typeof e&&null!==e?JSON.stringify(e,null,2):e));return this.debug&&console.log(...t),!0}async connect({model:e}={model:"gpt-4o-realtime-preview-2024-10-01"}){if(this.apiKey||this.url!==this.defaultUrl||console.warn(`No apiKey provided for connection to "${this.url}"`),this.isConnected())throw new Error("Already connected");if(globalThis.WebSocket){globalThis.document&&this.apiKey&&console.warn("Warning: Connecting using API key in the browser, this is not recommended");const e=new(0,globalThis.WebSocket)(`${this.url}`,["realtime",`websocket.api_key.${this.apiKey}`]);return e.addEventListener("message",(e=>{const t=JSON.parse(e.data);this.receive(t.type,t)})),new Promise(((t,s)=>{const r=()=>{this.disconnect(e),s(new Error(`Could not connect to "${this.url}"`))};e.addEventListener("error",r),e.addEventListener("open",(()=>{this.log(`Connected to "${this.url}"`),e.removeEventListener("error",r),e.addEventListener("error",(()=>{this.disconnect(e),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})})),e.addEventListener("close",(()=>{this.disconnect(e),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})})),this.ws=e,t(!0)}))}))}{const t="ws",s=new(0,(await import(t)).default)(`${this.url||"wss://api.openai.com/v1/realtime"}${e?`?model=${e}`:""}`,[],{finishRequest:e=>{e.setHeader("Authorization",`Bearer ${this.apiKey}`),e.setHeader("OpenAI-Beta","realtime=v1"),e.setHeader("api-key",this.apiKey),e.end()}});return s.on("message",(e=>{const t=JSON.parse(e.toString());this.receive(t.type,t)})),new Promise(((e,t)=>{const r=()=>{this.disconnect(s),t(new Error(`Could not connect to "${this.url}"`))};s.on("error",r),s.on("open",(()=>{this.log(`Connected to "${this.url}"`),s.removeListener("error",r),s.on("error",(()=>{this.disconnect(s),this.log(`Error, disconnected from "${this.url}"`),this.dispatch("close",{error:!0})})),s.on("close",(()=>{this.disconnect(s),this.log(`Disconnected from "${this.url}"`),this.dispatch("close",{error:!1})})),this.ws=s,e(!0)}))}))}}disconnect(e){if(!e||this.ws===e)return this.ws&&this.ws.close(),this.ws=null,!0}receive(e,t){return this.log("received:",e,t),this.dispatch(`server.${e}`,t),this.dispatch("server.*",t),!0}send(e,s){if(!this.isConnected())throw new Error("RealtimeAPI is not connected");if("object"!=typeof(s=s||{}))throw new Error("data must be an object");const r={event_id:t.RealtimeUtils.generateId("evt_"),type:e,...s};return this.dispatch(`client.${e}`,r),this.dispatch("client.*",r),this.log("sent:",e,r),this.ws.send(JSON.stringify(r)),!0}}exports.RealtimeAPI=s;
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./event_handler.js"),t=require("./api.js"),i=require("./conversation.js"),s=require("./utils.js");class n extends e.RealtimeEventHandler{constructor({url:e,apiKey:s,dangerouslyAllowAPIKeyInBrowser:n,debug:o}={}){super(),this.defaultSessionConfig={modalities:["text","audio"],instructions:"",voice:"alloy",input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:null,turn_detection:null,tools:[],tool_choice:"auto",temperature:.8,max_response_output_tokens:4096},this.sessionConfig={},this.transcriptionModels=[{model:"whisper-1"}],this.defaultServerVadConfig={type:"server_vad",threshold:.5,prefix_padding_ms:300,silence_duration_ms:200},this.realtime=new t.RealtimeAPI({url:e,apiKey:s,dangerouslyAllowAPIKeyInBrowser:n,debug:o}),this.conversation=new i.RealtimeConversation,this._resetConfig(),this._addAPIEventHandlers()}_resetConfig(){return this.sessionCreated=!1,this.tools={},this.sessionConfig=JSON.parse(JSON.stringify(this.defaultSessionConfig)),this.inputAudioBuffer=new Int16Array(0),!0}_addAPIEventHandlers(){this.realtime.on("client.*",(e=>{const t={time:(new Date).toISOString(),source:"client",event:e};this.dispatch("realtime.event",t)})),this.realtime.on("server.*",(e=>{const t={time:(new Date).toISOString(),source:"server",event:e};this.dispatch("realtime.event",t)})),this.realtime.on("server.session.created",(()=>this.sessionCreated=!0));const e=(e,...t)=>{const{item:i,delta:s}=this.conversation.processEvent(e,...t);return{item:i,delta:s}},t=(t,...i)=>{const{item:s,delta:n}=e(t,...i);return s&&this.dispatch("conversation.updated",{item:s,delta:n}),{item:s,delta:n}},i=async e=>{try{const t=JSON.parse(e.arguments),i=this.tools[e.name];if(!i)throw new Error(`Tool "${e.name}" has not been added`);const s=await i.handler(t);this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify(s)}})}catch(t){this.realtime.send("conversation.item.create",{item:{type:"function_call_output",call_id:e.call_id,output:JSON.stringify({error:t.message})}})}this.createResponse()};return this.realtime.on("server.response.created",e),this.realtime.on("server.response.output_item.added",e),this.realtime.on("server.response.content_part.added",e),this.realtime.on("server.input_audio_buffer.speech_started",(t=>{e(t),this.dispatch("conversation.interrupted")})),this.realtime.on("server.input_audio_buffer.speech_stopped",(t=>e(t,this.inputAudioBuffer))),this.realtime.on("server.conversation.item.created",(e=>{const{item:i}=t(e);this.dispatch("conversation.item.appended",{item:i}),"completed"===i.status&&this.dispatch("conversation.item.completed",{item:i})})),this.realtime.on("server.conversation.item.truncated",t),this.realtime.on("server.conversation.item.deleted",t),this.realtime.on("server.conversation.item.input_audio_transcription.completed",t),this.realtime.on("server.response.audio_transcript.delta",t),this.realtime.on("server.response.audio.delta",t),this.realtime.on("server.response.text.delta",t),this.realtime.on("server.response.function_call_arguments.delta",t),this.realtime.on("server.response.output_item.done",(async e=>{const{item:s}=t(e);"completed"===s.status&&this.dispatch("conversation.item.completed",{item:s}),s.formatted.tool&&i(s.formatted.tool)})),!0}isConnected(){return this.realtime.isConnected()}reset(){return this.disconnect(),this.clearEventHandlers(),this.realtime.clearEventHandlers(),this._resetConfig(),this._addAPIEventHandlers(),!0}async connect(){if(this.isConnected())throw new Error("Already connected, use .disconnect() first");return await this.realtime.connect(),this.updateSession(),!0}async waitForSessionCreated(){if(!this.isConnected())throw new Error("Not connected, use .connect() first");for(;!this.sessionCreated;)await new Promise((e=>setTimeout((()=>e()),1)));return!0}disconnect(){this.sessionCreated=!1,this.realtime.isConnected()&&this.realtime.disconnect(),this.conversation.clear()}getTurnDetectionType(){return this.sessionConfig.turn_detection?.type||null}addTool(e,t){if(!e?.name)throw new Error("Missing tool name in definition");const i=e?.name;if(this.tools[i])throw new Error(`Tool "${i}" already added. Please use .removeTool("${i}") before trying to add again.`);if("function"!=typeof t)throw new Error(`Tool "${i}" handler must be a function`);return this.tools[i]={definition:e,handler:t},this.updateSession(),this.tools[i]}removeTool(e){if(!this.tools[e])throw new Error(`Tool "${e}" does not exist, can not be removed.`);return delete this.tools[e],!0}deleteItem(e){return this.realtime.send("conversation.item.delete",{item_id:e}),!0}updateSession({modalities:e,instructions:t,voice:i,input_audio_format:s,output_audio_format:n,input_audio_transcription:o,turn_detection:r,tools:a,tool_choice:d,temperature:u,max_response_output_tokens:l}={}){void 0!==e&&(this.sessionConfig.modalities=e),void 0!==t&&(this.sessionConfig.instructions=t),void 0!==i&&(this.sessionConfig.voice=i),void 0!==s&&(this.sessionConfig.input_audio_format=s),void 0!==n&&(this.sessionConfig.output_audio_format=n),void 0!==o&&(this.sessionConfig.input_audio_transcription=o),void 0!==r&&(this.sessionConfig.turn_detection=r),void 0!==a&&(this.sessionConfig.tools=a),void 0!==d&&(this.sessionConfig.tool_choice=d),void 0!==u&&(this.sessionConfig.temperature=u),void 0!==l&&(this.sessionConfig.max_response_output_tokens=l);const c=[].concat((a||[]).map((e=>{const t={type:"function",...e};if(this.tools[t?.name])throw new Error(`Tool "${t?.name}" has already been defined`);return t})),Object.keys(this.tools).map((e=>({type:"function",...this.tools[e].definition})))),m={...this.sessionConfig};return m.tools=c,this.realtime.isConnected()&&this.realtime.send("session.update",{session:m}),!0}sendUserMessageContent(e=[]){if(e.length){for(const t of e)"input_audio"===t.type&&(t.audio instanceof ArrayBuffer||t.audio instanceof Int16Array)&&(t.audio=s.RealtimeUtils.arrayBufferToBase64(t.audio));this.realtime.send("conversation.item.create",{item:{type:"message",role:"user",content:e}})}return this.createResponse(),!0}appendInputAudio(e){return e.byteLength>0&&(this.realtime.send("input_audio_buffer.append",{audio:s.RealtimeUtils.arrayBufferToBase64(e)}),this.inputAudioBuffer=s.RealtimeUtils.mergeInt16Arrays(this.inputAudioBuffer,e)),!0}createResponse(){return null===this.getTurnDetectionType()&&this.inputAudioBuffer.byteLength>0&&(this.realtime.send("input_audio_buffer.commit"),this.conversation.queueInputAudio(this.inputAudioBuffer),this.inputAudioBuffer=new Int16Array(0)),this.realtime.send("response.create"),!0}cancelResponse(e,t=0){if(!e)return this.realtime.send("response.cancel"),{item:null};if(e){const i=this.conversation.getItem(e);if(!i)throw new Error(`Could not find item "${e}"`);if("message"!==i.type)throw new Error('Can only cancelResponse messages with type "message"');if("assistant"!==i.role)throw new Error('Can only cancelResponse messages with role "assistant"');this.realtime.send("response.cancel");const s=i.content.findIndex((e=>"audio"===e.type));if(-1===s)throw new Error("Could not find audio on item to cancel");return this.realtime.send("conversation.item.truncate",{item_id:e,content_index:s,audio_end_ms:Math.floor(t/this.conversation.defaultFrequency*1e3)}),{item:i}}}async waitForNextItem(){const e=await this.waitForNext("conversation.item.appended"),{item:t}=e;return{item:t}}async waitForNextCompletedItem(){const e=await this.waitForNext("conversation.item.completed"),{item:t}=e;return{item:t}}}exports.RealtimeClient=n;
@@ -0,0 +1 @@
1
+ "use strict";var t=require("./utils.js");exports.RealtimeConversation=class{defaultFrequency=24e3;EventProcessors={"conversation.item.created":t=>{const{item:e}=t,o=JSON.parse(JSON.stringify(e));if(this.itemLookup[o.id]||(this.itemLookup[o.id]=o,this.items.push(o)),o.formatted={},o.formatted.audio=new Int16Array(0),o.formatted.text="",o.formatted.transcript="",this.queuedSpeechItems[o.id]&&(o.formatted.audio=this.queuedSpeechItems[o.id].audio,delete this.queuedSpeechItems[o.id]),o.content){const t=o.content.filter((t=>["text","input_text"].includes(t.type)));for(const e of t)o.formatted.text+=e.text}return this.queuedTranscriptItems[o.id]&&(o.formatted.transcript=this.queuedTranscriptItems.transcript,delete this.queuedTranscriptItems[o.id]),"message"===o.type?"user"===o.role?(o.status="completed",this.queuedInputAudio&&(o.formatted.audio=this.queuedInputAudio,this.queuedInputAudio=null)):o.status="in_progress":"function_call"===o.type?(o.formatted.tool={type:"function",name:o.name,call_id:o.call_id,arguments:""},o.status="in_progress"):"function_call_output"===o.type&&(o.status="completed",o.formatted.output=o.output),{item:o,delta:null}},"conversation.item.truncated":t=>{const{item_id:e,audio_end_ms:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`item.truncated: Item "${e}" not found`);const i=Math.floor(o*this.defaultFrequency/1e3);return s.formatted.transcript="",s.formatted.audio=s.formatted.audio.slice(0,i),{item:s,delta:null}},"conversation.item.deleted":t=>{const{item_id:e}=t,o=this.itemLookup[e];if(!o)throw new Error(`item.deleted: Item "${e}" not found`);delete this.itemLookup[o.id];const s=this.items.indexOf(o);return s>-1&&this.items.splice(s,1),{item:o,delta:null}},"conversation.item.input_audio_transcription.completed":t=>{const{item_id:e,content_index:o,transcript:s}=t,i=this.itemLookup[e],r=s||" ";return i?(i.content[o].transcript=s,i.formatted.transcript=r,{item:i,delta:{transcript:s}}):(this.queuedTranscriptItems[e]={transcript:r},{item:null,delta:null})},"input_audio_buffer.speech_started":t=>{const{item_id:e,audio_start_ms:o}=t;return this.queuedSpeechItems[e]={audio_start_ms:o},{item:null,delta:null}},"input_audio_buffer.speech_stopped":(t,e)=>{const{item_id:o,audio_end_ms:s}=t;this.queuedSpeechItems[o]||(this.queuedSpeechItems[o]={audio_start_ms:s});const i=this.queuedSpeechItems[o];if(i.audio_end_ms=s,e){const t=Math.floor(i.audio_start_ms*this.defaultFrequency/1e3),o=Math.floor(i.audio_end_ms*this.defaultFrequency/1e3);i.audio=e.slice(t,o)}return{item:null,delta:null}},"response.created":t=>{const{response:e}=t;return this.responseLookup[e.id]||(this.responseLookup[e.id]=e,this.responses.push(e)),{item:null,delta:null}},"response.output_item.added":t=>{const{response_id:e,item:o}=t,s=this.responseLookup[e];if(!s)throw new Error(`response.output_item.added: Response "${e}" not found`);return s.output.push(o.id),{item:null,delta:null}},"response.output_item.done":t=>{const{item:e}=t;if(!e)throw new Error('response.output_item.done: Missing "item"');const o=this.itemLookup[e.id];if(!o)throw new Error(`response.output_item.done: Item "${e.id}" not found`);return o.status=e.status,{item:o,delta:null}},"response.content_part.added":t=>{const{item_id:e,part:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.content_part.added: Item "${e}" not found`);return s.content.push(o),{item:s,delta:null}},"response.audio_transcript.delta":t=>{const{item_id:e,content_index:o,delta:s}=t,i=this.itemLookup[e];if(!i)throw new Error(`response.audio_transcript.delta: Item "${e}" not found`);return i.content[o].transcript+=s,i.formatted.transcript+=s,{item:i,delta:{transcript:s}}},"response.audio.delta":e=>{const{item_id:o,content_index:s,delta:i}=e,r=this.itemLookup[o];if(!r)throw new Error(`response.audio.delta: Item "${o}" not found`);const n=t.RealtimeUtils.base64ToArrayBuffer(i),u=new Int16Array(n);return r.formatted.audio=t.RealtimeUtils.mergeInt16Arrays(r.formatted.audio,u),{item:r,delta:{audio:u}}},"response.text.delta":t=>{const{item_id:e,content_index:o,delta:s}=t,i=this.itemLookup[e];if(!i)throw new Error(`response.text.delta: Item "${e}" not found`);return i.content[o].text+=s,i.formatted.text+=s,{item:i,delta:{text:s}}},"response.function_call_arguments.delta":t=>{const{item_id:e,delta:o}=t,s=this.itemLookup[e];if(!s)throw new Error(`response.function_call_arguments.delta: Item "${e}" not found`);return s.arguments+=o,s.formatted.tool.arguments+=o,{item:s,delta:{arguments:o}}}};constructor(){this.clear()}clear(){return this.itemLookup={},this.items=[],this.responseLookup={},this.responses=[],this.queuedSpeechItems={},this.queuedTranscriptItems={},this.queuedInputAudio=null,!0}queueInputAudio(t){return this.queuedInputAudio=t,t}processEvent(t,...e){if(!t.event_id)throw console.error(t),new Error('Missing "event_id" on event');if(!t.type)throw console.error(t),new Error('Missing "type" on event');const o=this.EventProcessors[t.type];if(!o)throw new Error(`Missing conversation event processor for "${t.type}"`);return o.call(this,t,...e)}getItem(t){return this.itemLookup[t]||null}getItems(){return this.items.slice()}};
@@ -0,0 +1 @@
1
+ "use strict";const e=e=>new Promise((t=>setTimeout((()=>t()),e)));exports.RealtimeEventHandler=class{constructor(){this.eventHandlers={},this.nextEventHandlers={}}clearEventHandlers(){return this.eventHandlers={},this.nextEventHandlers={},!0}on(e,t){return this.eventHandlers[e]=this.eventHandlers[e]||[],this.eventHandlers[e].push(t),t}onNext(e,t){return this.nextEventHandlers[e]=this.nextEventHandlers[e]||[],this.nextEventHandlers[e].push(t),t}off(e,t){const n=this.eventHandlers[e]||[];if(t){const s=n.indexOf(t);if(-1===s)throw new Error(`Could not turn off specified event listener for "${e}": not found as a listener`);n.splice(s,1)}else delete this.eventHandlers[e];return!0}offNext(e,t){const n=this.nextEventHandlers[e]||[];if(t){const s=n.indexOf(t);if(-1===s)throw new Error(`Could not turn off specified next event listener for "${e}": not found as a listener`);n.splice(s,1)}else delete this.nextEventHandlers[e];return!0}async waitForNext(t,n=null){const s=Date.now();let r;for(this.onNext(t,(e=>r=e));!r;){if(n){if(Date.now()-s>n)return null}await e(1)}return r}dispatch(e,t){const n=[].concat(this.eventHandlers[e]||[]);for(const e of n)e(t);const s=[].concat(this.nextEventHandlers[e]||[]);for(const e of s)e(t);return delete this.nextEventHandlers[e],!0}};
@@ -0,0 +1 @@
1
+ "use strict";const t=globalThis.atob,r=globalThis.btoa;exports.RealtimeUtils=class{static floatTo16BitPCM(t){const r=new ArrayBuffer(2*t.length),e=new DataView(r);let n=0;for(let r=0;r<t.length;r++,n+=2){let a=Math.max(-1,Math.min(1,t[r]));e.setInt16(n,a<0?32768*a:32767*a,!0)}return r}static base64ToArrayBuffer(r){const e=t(r),n=e.length,a=new Uint8Array(n);for(let t=0;t<n;t++)a[t]=e.charCodeAt(t);return a.buffer}static arrayBufferToBase64(t){t instanceof Float32Array?t=this.floatTo16BitPCM(t):t instanceof Int16Array&&(t=t.buffer);let e="",n=new Uint8Array(t);for(let t=0;t<n.length;t+=32768){let r=n.subarray(t,t+32768);e+=String.fromCharCode.apply(null,r)}return r(e)}static mergeInt16Arrays(t,r){if(t instanceof ArrayBuffer&&(t=new Int16Array(t)),r instanceof ArrayBuffer&&(r=new Int16Array(r)),!(t instanceof Int16Array&&r instanceof Int16Array))throw new Error("Both items must be Int16Array");const e=new Int16Array(t.length+r.length);for(let r=0;r<t.length;r++)e[r]=t[r];for(let n=0;n<r.length;n++)e[t.length+n]=r[n];return e}static generateId(t,r=21){const e="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";return`${t}${Array(r-t.length).fill(0).map((t=>e[Math.floor(58*Math.random())])).join("")}`}};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("react"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var r=require("../components/Page.js");const s=require("../node_modules/@griffel/react/makeStyles.esm.js").makeStyles({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}});exports.default=({src:o,showFooter:i,title:t})=>{const n=s();return i?e.jsx(r.Page,{hideFooter:!i,hideHeader:!0,children:e.jsx("iframe",{title:t,src:o,className:`${n.iframe} ${i?n.fixFrameHeight:""}`})}):e.jsx("iframe",{title:t,src:o,className:n.iframe})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js"),require("../components/TextHeader.js"),require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js"),require("react"),require("../services/codicent.js"),require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../config/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./Chat.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js"),require("../hooks/useLocalization.js"),require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var r=require("../components/Page.js");const s=require("../node_modules/@griffel/react/makeStyles.esm.js").makeStyles({iframe:{width:"100%",height:"100%",border:"none"},scrollable:{overflow:"auto"},nonScrollable:{overflow:"hidden"},fixFrameHeight:{height:"calc(100% - 5px)"}});exports.default=({src:o,showFooter:i,title:t})=>{const n=s();return i?e.jsx(r.Page,{hideFooter:!i,hideHeader:!0,children:e.jsx("iframe",{title:t,src:o,className:`${n.iframe} ${i?n.fixFrameHeight:""}`})}):e.jsx("iframe",{title:t,src:o,className:n.iframe})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var s=require("../components/TextHeader.js"),n=require("../components/TypingIndicator.js"),o=require("../components/Prompt.js"),a=require("../components/ChatInput.js"),i=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var u=require("../hooks/useStateWithLocalStorage.js"),c=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var d=require("../config/index.js");require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var p=require("../hooks/useChat.js"),m=require("../hooks/useLocalization.js"),g=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var h=require("../components/Page.js"),j=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-3.js");const q=j.makeStyles({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}});exports.default=({state:j})=>{const x=q(),{t:C,tAsync:b,getLanguageInfo:S}=m.default(),v=r.useNavigate(),{messages:y,isBotTyping:w,handleSend:k,newChat:P,openChat:_}=p.useChat(j.stateMachine),T=t.useRef(null),[F,I]=r.useSearchParams(),[A,V]=t.useState(null),[M,E]=t.useState(!1),[H,R]=t.useState(!1),{service:N,currentStateName:B}=j,[L,O]=t.useState([]),[W,D]=t.useState([]),[U,z]=t.useState(!1),[G,Y]=t.useState(),[$,K]=u.default(j.context.selectedApp+"_prompts",[]),[J,Q]=t.useState(!1),{extractTemplateVariables:X,replaceTemplateVariables:Z,extractFilePlaceholders:ee,replaceFilePlaceholders:te,handleSelectFiles:re}=g.useTemplateVariables(N.uploadFile),se=t.useRef(!1),ne=t.useRef(null);t.useEffect((()=>{const e=window.history.length>1,t=Boolean(document.referrer&&document.referrer!==window.location.href);R(e||t)}),[]);t.useEffect((()=>{d.getConfigValue("SHOW_CHAT_PROMPTS")&&0===y.length&&j.service.getAppPrompts().then(K).catch((e=>{console.error("Failed to get prompts",e)}))}),[j.service,K,y.length]),t.useEffect((()=>{setTimeout((()=>{T.current?.scrollIntoView({behavior:"smooth"})}),10)}),[y]),t.useEffect((()=>{if(se.current)return;se.current=!0;const e=F.get("text"),t=F.get("id"),r=F.get("fid");if(e){(async()=>{const t=ee(e),r=X(e);P(),t.length>0||r.length>0?(D(t),O(r),z(!0),V(C(e))):V(C(e))})()}else t?_(t):r&&Y(r)}),[]),t.useEffect((()=>{G&&"anonymous"===B&&ne.current!==G&&(ne.current=G,N.getFormById(G).then((async e=>{P();const t=S().language,r=e.prompt.replace("{{fid}}",G).replace("{{fname}}",e.name).replace("{{language}}",t);Q(!0);const s=await b(r);Q(!1),V(s),R(!1)})))}),[G,P,N,V,B,b,S,Q]),t.useEffect((()=>{if(A&&!U){let e=A;W.length>0&&(e=te(e,W)),L.length>0&&(e=Z(e,L)),k(e),I({},{replace:!0}),V(null),O([]),D([])}}),[A,U,k,I,te,Z,W,L]);const oe=e=>{const t=F.get("append");t&&(e+="\n---\n"+t),k(e)};return e.jsxs(h.Page,{hideHeader:!0,hideFooter:!!G,children:[e.jsxs("div",{id:"chat-container",className:x.chatContainer,style:{backgroundImage:`url(${d.getConfigValue("CHAT_BACKGROUND_IMAGE_URL")})`},children:[H&&e.jsx("button",{onClick:()=>{H&&v(-1)},"aria-label":C("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsx(f.CalendarWeekStart24Regular,{style:{transform:"rotate(180deg)"}})}),e.jsx("div",{style:{marginLeft:H?40:0},children:e.jsx(s.default,{title:C(d.getConfigValue("APP_CHAT_TITLE")||"Chatt"),onNewChat:G?void 0:()=>E(!0)})}),e.jsxs("div",{className:x.chatMessages,children:[d.getConfigValue("SHOW_CHAT_PROMPTS")&&$.length>0&&0===y.length&&e.jsx(l.default,{sender:"bot",content:C(d.getConfigValue("CHAT_WELCOME")||"Välkommen!"),children:$.map(((t,r)=>e.jsxs("div",{children:["> ",e.jsx("a",{href:"./#/chat",onClick:()=>{oe(t.title+"\n---\n"+t.prompt)},children:C(t.title)}),e.jsx("br",{})]},`prompt-${r}`)))}),y.map(((t,r)=>e.jsxs("div",{children:[(w&&r===y.length-1||!w&&r===y.length-2)&&e.jsx("div",{ref:T}),e.jsx(l.default,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:r===y.length-1,onSuggestionClicked:k},t.id)]},t.id))),J&&e.jsx(l.default,{sender:"user",content:C("Översätter...")}),w&&e.jsx(n.default,{})]}),e.jsx(a.default,{codicent:j.context.selectedApp,disableSend:w,onSend:oe,onSelectFiles:re,getImageUrl:c.CodicentService.getImageUrl,getFileInfo:e=>N.getFileInfo(e)})]}),e.jsx(o.default,{open:M,title:C("Vill du rensa chatten?"),content:C("En ny startas, men chatten kommer först sparas."),onYes:()=>{E(!1),P()},onNo:()=>E(!1)}),e.jsx(i.CombinedPlaceholderDialog,{open:U,templateVariables:L,filePlaceholders:W,onTemplateVariablesChange:O,onFilePlaceholdersChange:D,onConfirm:()=>z(!1),onCancel:()=>{z(!1),V(null),O([]),D([])},uploadFile:N.uploadFile})]})};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("react"),r=require("react-router-dom");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var s=require("../components/TextHeader.js"),n=require("../components/TypingIndicator.js"),o=require("../components/Prompt.js"),a=require("../components/ChatInput.js"),i=require("../components/CombinedPlaceholderDialog.js"),l=require("../components/ChatMessage.js");require("../components/Header.js");var u=require("../hooks/useStateWithLocalStorage.js"),c=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js");var d=require("../config/index.js");require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js"),require("./AppFrame.js"),require("./Compose.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js");var p=require("../hooks/useChat.js"),m=require("../hooks/useLocalization.js"),g=require("../hooks/useTemplateVariables.js");require("../hooks/useAppStyles.js"),require("../components/FileThumbnail.js"),require("../components/MessageInput.js"),require("../components/UploadFile.js"),require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var h=require("../components/Page.js"),j=require("../node_modules/@griffel/react/makeStyles.esm.js"),f=require("../node_modules/@fluentui/react-icons/lib/sizedIcons/chunk-3.js");const q=j.makeStyles({chatContainer:{width:"100%",flex:1,maxWidth:"800px",height:"100%",display:"flex",flexDirection:"column",margin:"0 auto",overflow:"hidden","@media (max-width: 768px)":{maxWidth:"100%",borderRadius:"0"},"@media (max-width: 480px)":{},backgroundPosition:"calc(50%) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",touchAction:"pan-y"},chatMessages:{display:"flex",flexDirection:"column",flex:1,padding:"16px",overflowY:"auto",touchAction:"pan-y"}});exports.default=({state:j})=>{const x=q(),{t:C,tAsync:b,getLanguageInfo:S}=m.default(),v=r.useNavigate(),{messages:y,isBotTyping:w,handleSend:P,newChat:k,openChat:_}=p.useChat(j.stateMachine),T=t.useRef(null),[F,I]=r.useSearchParams(),[A,V]=t.useState(null),[M,E]=t.useState(!1),[H,R]=t.useState(!1),{service:N,currentStateName:B}=j,[L,O]=t.useState([]),[W,D]=t.useState([]),[U,z]=t.useState(!1),[G,Y]=t.useState(),[$,K]=u.default(j.context.selectedApp+"_prompts",[]),[J,Q]=t.useState(!1),{extractTemplateVariables:X,replaceTemplateVariables:Z,extractFilePlaceholders:ee,replaceFilePlaceholders:te,handleSelectFiles:re}=g.useTemplateVariables(N.uploadFile),se=t.useRef(!1),ne=t.useRef(null);t.useEffect((()=>{const e=window.history.length>1,t=Boolean(document.referrer&&document.referrer!==window.location.href);R(e||t)}),[]);t.useEffect((()=>{d.getConfigValue("SHOW_CHAT_PROMPTS")&&0===y.length&&j.service.getAppPrompts().then(K).catch((e=>{console.error("Failed to get prompts",e)}))}),[j.service,K,y.length]),t.useEffect((()=>{setTimeout((()=>{T.current?.scrollIntoView({behavior:"smooth"})}),10)}),[y]),t.useEffect((()=>{if(se.current)return;se.current=!0;const e=F.get("text"),t=F.get("id"),r=F.get("fid");if(e){(async()=>{const t=ee(e),r=X(e);k(),t.length>0||r.length>0?(D(t),O(r),z(!0),V(C(e))):V(C(e))})()}else t?_(t):r&&Y(r)}),[]),t.useEffect((()=>{G&&"anonymous"===B&&ne.current!==G&&(ne.current=G,N.getFormById(G).then((async e=>{k();const t=S().language,r=e.prompt.replace("{{fid}}",G).replace("{{fname}}",e.name).replace("{{language}}",t);Q(!0);const s=await b(r);Q(!1),V(s),R(!1)})))}),[G,k,N,V,B,b,S,Q]),t.useEffect((()=>{if(A&&!U){let e=A;W.length>0&&(e=te(e,W)),L.length>0&&(e=Z(e,L)),P(e),I({},{replace:!0}),V(null),O([]),D([])}}),[A,U,P,I,te,Z,W,L]);const oe=e=>{const t=F.get("append");t&&(e+="\n---\n"+t),P(e)};return e.jsxs(h.Page,{hideHeader:!0,hideFooter:!!G,children:[e.jsxs("div",{id:"chat-container",className:x.chatContainer,style:{backgroundImage:`url(${d.getConfigValue("CHAT_BACKGROUND_IMAGE_URL")})`},children:[H&&e.jsx("button",{onClick:()=>{H&&v(-1)},"aria-label":C("Tillbaka"),style:{position:"absolute",top:12,left:12,zIndex:100,background:"var(--colorNeutralBackground1)",border:"none",cursor:"pointer",padding:8,borderRadius:8,boxShadow:"0 2px 8px rgba(0,0,0,0.08)",display:"flex",alignItems:"center",justifyContent:"center"},children:e.jsx(f.CalendarWeekStart24Regular,{style:{transform:"rotate(180deg)"}})}),e.jsx("div",{style:{marginLeft:H?40:0},children:e.jsx(s.default,{title:C(d.getConfigValue("APP_CHAT_TITLE")||"Chatt"),onNewChat:G?void 0:()=>E(!0)})}),e.jsxs("div",{className:x.chatMessages,children:[d.getConfigValue("SHOW_CHAT_PROMPTS")&&$.length>0&&0===y.length&&e.jsx(l.default,{sender:"bot",content:C(d.getConfigValue("CHAT_WELCOME")||"Välkommen!"),children:$.map(((t,r)=>e.jsxs("div",{children:["> ",e.jsx("a",{href:"./#/chat",onClick:()=>{oe(t.title+"\n---\n"+t.prompt)},children:C(t.title)}),e.jsx("br",{})]},`prompt-${r}`)))}),y.map(((t,r)=>e.jsxs("div",{children:[(w&&r===y.length-1||!w&&r===y.length-2)&&e.jsx("div",{ref:T}),e.jsx(l.default,{sender:t.sender,content:t.content,isNew:t.isNew,showSuggestions:r===y.length-1,onSuggestionClicked:P},t.id)]},t.id))),J&&e.jsx(l.default,{sender:"user",content:C("Översätter...")}),w&&e.jsx(n.default,{})]}),e.jsx(a.default,{codicent:j.context.selectedApp,disableSend:w,onSend:oe,onSelectFiles:re,getImageUrl:c.CodicentService.getImageUrl,getFileInfo:e=>N.getFileInfo(e)})]}),e.jsx(o.default,{open:M,title:C("Vill du rensa chatten?"),content:C("En ny startas, men chatten kommer först sparas."),onYes:()=>{E(!1),k()},onNo:()=>E(!1)}),e.jsx(i.CombinedPlaceholderDialog,{open:U,templateVariables:L,filePlaceholders:W,onTemplateVariablesChange:O,onFilePlaceholdersChange:D,onConfirm:()=>z(!1),onCancel:()=>{z(!1),V(null),O([]),D([])},uploadFile:N.uploadFile})]})};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react"),r=require("react-router-dom"),t=require("../config/index.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var i=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var a=require("../utils/device.js");require("./AppFrame.js"),require("./Chat.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var s=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var l=require("../hooks/useToaster.js");require("../components/FileThumbnail.js");var u=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),p=require("../node_modules/@griffel/react/makeStyles.esm.js"),g=require("../node_modules/@griffel/core/index.esm.js"),m=require("../node_modules/@fluentui/tokens/lib/tokens.js");const j=p.makeStyles({main:{flexGrow:1,...g.shorthands.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:m.tokens.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),q=({state:p})=>{const g=j(),{t:m}=s.default(),[q,f]=o.useState(!1),h=o.useRef(null),v=o.useRef(null),S=o.useRef(null),[x,C]=o.useState(null),[_,b]=o.useState([]),{service:P}=p,[I,F]=r.useSearchParams(),[w,U]=o.useState(void 0),[k,y]=o.useState(),E=l.default(),A=r.useNavigate(),M=o.useCallback((e=>{for(const o of e)P.getFileInfo(o).then((e=>{b((o=>[...o,e]))}))}),[P,b]),T=o.useCallback((e=>{const o=new FormData;o.append("file",e),P.uploadFile(e.name,o).then((e=>{M([e])})).catch((()=>{E.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[P,M,E,m]),L=e=>{f(e)};o.useEffect((()=>{const e=I.get("text"),o=I.get("url"),r=I.get("parentId");e&&(U(e),I.delete("text")),r&&(y(r),I.delete("parentId")),o&&(I.delete("url"),U(((e||"")+" "+o).trim())),F(I,{replace:!0})}),[I,F,U,P,M]);return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:g.container,style:{backgroundImage:`url(${t.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[e.jsx(i.default,{title:t.getConfigValue("APP_SAVE_TITLE")?m(t.getConfigValue("APP_SAVE_TITLE")):m("Spara")}),e.jsx(u.default,{disableSend:!0,defaultText:w,onSend:e=>{e=`${e}${x?" "+x:""}${_.length>0?"\n":""}${_.map((e=>`#file:${e.id}`)).join(" ")}`,P.sendMessage(e,k).then((()=>{E.notify(m("Meddelande"),m("Meddelandet är sparat."),""),k&&(y(void 0),A(-1))}))},files:_,onFilesChange:b,isUploading:q,onHandleDefaultFiles:M,onUploadFile:()=>{h.current?.triggerUpload(),console.log("attach-file")},onUploadImage:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{v.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{S.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:n.CodicentService.getImageUrl,onLocationChange:t.getConfigValue("COMPOSE_HIDE_LOCATION")?void 0:e=>{e?(async()=>{console.log("attach-location");const e=await a.getGpsLocation();e?(E.notify(m("Position"),m("Position tillagd."),""),C(`#gps(${e.coords.latitude},${e.coords.longitude})`)):console.log("Failed to get GPS location")})():(C(null),E.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!x,onImagePasted:T}),e.jsx(c.default,{ref:h,onFileUploaded:M,onUploading:L,multiple:!0,codicentService:P}),e.jsx(c.default,{codicentService:P,ref:v,onFileUploaded:M,onUploading:L,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:P,ref:S,onFileUploaded:M,onUploading:L,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.Compose=q,exports.default=q;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),o=require("react"),r=require("react-router-dom"),t=require("../config/index.js");require("../components/Markdown.js"),require("../components/Textarea.js"),require("../components/Button.js"),require("../components/CompoundButton.js"),require("../components/Spinner.js");var i=require("../components/TextHeader.js");require("../components/TypingIndicator.js"),require("../components/Dialog.js"),require("../components/ChatInput.js"),require("../components/CombinedPlaceholderDialog.js"),require("../components/ChatMessage.js"),require("../components/Header.js");var n=require("../services/codicent.js");require("../utils/MessageContent.js"),require("../node_modules/tinycolor2/esm/tinycolor.js"),require("../_virtual/index.js"),require("../utils/cacheManager.js"),require("../lib/wavtools/lib/wav_packer.js"),require("../lib/wavtools/lib/analysis/audio_analysis.js"),require("../lib/wavtools/lib/wav_stream_player.js"),require("../lib/wavtools/lib/wav_recorder.js");var a=require("../utils/device.js");require("./AppFrame.js"),require("./Chat.js"),require("./Snap.js"),require("./Search.js"),require("./Login.js"),require("./CrmPage.js"),require("./CrmPagePersistent.js"),require("./ImageView.js"),require("./FormInvite.js"),require("./FormAccept.js"),require("./Sales.js"),require("./Purchase.js"),require("../stores/chatStore.js");var s=require("../hooks/useLocalization.js");require("../hooks/useAppStyles.js");var l=require("../hooks/useToaster.js");require("../components/FileThumbnail.js");var u=require("../components/MessageInput.js"),c=require("../components/UploadFile.js");require("../components/SnapFooter.js"),require("../components/Profile.js"),require("../components/MessageItem.js"),require("../components/Content.js"),require("../components/AiInput.js"),require("../components/SearchBox.js"),require("../components/HtmlView.js"),require("../components/Footer.js");var d=require("../components/Page.js"),g=require("../node_modules/@griffel/react/makeStyles.esm.js"),p=require("../node_modules/@griffel/core/index.esm.js"),m=require("../node_modules/@fluentui/tokens/lib/tokens.js");const j=g.makeStyles({main:{flexGrow:1,...p.shorthands.padding("10px"),overflowY:"auto"},container:{maxWidth:"640px",margin:"0 auto",backgroundPosition:"calc(50% + 100px) center",backgroundRepeat:"no-repeat",backgroundSize:"contain",height:"100%"},root:{height:"100%"},item:{height:"auto",width:"auto",flexShrink:1,marginBottom:"1rem"},chat:{flexGrow:1,boxSizing:"border-box",overflow:"hidden",border:"none"},attachmentBar:{display:"none"},iconButton:{width:"24px",height:"24px"},imageCard:{alignContent:"center",borderRadius:m.tokens.borderRadiusLarge,height:"240px",textAlign:"left",position:"relative"}}),q=({state:g})=>{const p=j(),{t:m}=s.default(),[q,f]=o.useState(!1),h=o.useRef(null),v=o.useRef(null),S=o.useRef(null),[x,C]=o.useState(null),[P,_]=o.useState([]),{service:b}=g,[I,F]=r.useSearchParams(),[w,U]=o.useState(void 0),[k,y]=o.useState(),E=l.default(),M=r.useNavigate(),A=o.useCallback((e=>{for(const o of e)b.getFileInfo(o).then((e=>{_((o=>[...o,e]))}))}),[b,_]),T=o.useCallback((e=>{const o=new FormData;o.append("file",e),b.uploadFile(e.name,o).then((e=>{A([e])})).catch((()=>{E.notify(m("Error"),m("Error uploading pasted image"),"")}))}),[b,A,E,m]),L=e=>{f(e)};o.useEffect((()=>{const e=I.get("text"),o=I.get("url"),r=I.get("parentId");e&&(U(e),I.delete("text")),r&&(y(r),I.delete("parentId")),o&&(I.delete("url"),U(((e||"")+" "+o).trim())),F(I,{replace:!0})}),[I,F,U,b,A]);return e.jsx(d.Page,{hideHeader:!0,children:e.jsxs("div",{className:p.container,style:{backgroundImage:`url(${t.getConfigValue("COMPOSE_BACKGROUND_IMAGE_URL")})`},children:[e.jsx(i.default,{title:t.getConfigValue("APP_SAVE_TITLE")?m(t.getConfigValue("APP_SAVE_TITLE")):m("Spara")}),e.jsx(u.default,{disableSend:!0,defaultText:w,onSend:e=>{e=`${e}${x?" "+x:""}${P.length>0?"\n":""}${P.map((e=>`#file:${e.id}`)).join(" ")}`,b.sendMessage(e,k).then((()=>{E.notify(m("Meddelande"),m("Meddelandet är sparat."),""),k&&(y(void 0),M(-1))}))},files:P,onFilesChange:_,isUploading:q,onHandleDefaultFiles:A,onUploadFile:()=>{h.current?.triggerUpload(),console.log("attach-file")},onUploadImage:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{v.current?.triggerUpload(),console.log("attach-image")},onUploadCamera:t.getConfigValue("COMPOSE_SIMPLE_ATTACH_FILE")?void 0:()=>{S.current?.triggerUpload(),console.log("attach-camera")},getImageUrl:n.CodicentService.getImageUrl,onLocationChange:t.getConfigValue("COMPOSE_HIDE_LOCATION")?void 0:e=>{e?(async()=>{console.log("attach-location");const e=await a.getGpsLocation();e?(E.notify(m("Position"),m("Position tillagd."),""),C(`#gps(${e.coords.latitude},${e.coords.longitude})`)):console.log("Failed to get GPS location")})():(C(null),E.notify(m("Position"),m("Position borttagen."),""),console.log("clear-location"))},hasLocation:!!x,onImagePasted:T}),e.jsx(c.default,{ref:h,onFileUploaded:A,onUploading:L,multiple:!0,codicentService:b}),e.jsx(c.default,{codicentService:b,ref:v,onFileUploaded:A,onUploading:L,multiple:!0,accept:"image/*"}),e.jsx(c.default,{codicentService:b,ref:S,onFileUploaded:A,onUploading:L,multiple:!0,accept:"image/*",capture:"environment"})]})})};exports.Compose=q,exports.default=q;