orbitchat 2.5.7 → 2.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +13 -1
  2. package/bin/orbitchat.js +57 -20
  3. package/dist/assets/{_baseUniq-BPMphbq5-CZhrKBLy.js → _baseUniq-BPMphbq5-Bc3mfrWu.js} +1 -1
  4. package/dist/assets/api-BYQtjDFb.js +2 -0
  5. package/dist/assets/{arc-D9rhTKV0-Bsi_wamx.js → arc-D9rhTKV0-DqltxDCK.js} +1 -1
  6. package/dist/assets/{architectureDiagram-VXUJARFQ-BiqZtsDe-Jpfv1W_X.js → architectureDiagram-VXUJARFQ-BiqZtsDe-DssPmlMz.js} +1 -1
  7. package/dist/assets/{blockDiagram-VD42YOAC-zcRIdFTD-DdOocKH0.js → blockDiagram-VD42YOAC-zcRIdFTD-VGN02_C2.js} +1 -1
  8. package/dist/assets/{c4Diagram-YG6GDRKO-DYXNcDX4-C_rWZ12E.js → c4Diagram-YG6GDRKO-DYXNcDX4-B3MMT-QA.js} +1 -1
  9. package/dist/assets/channel-CUIutAfm-DKqX6_5M.js +1 -0
  10. package/dist/assets/{chunk-4BX2VUAB-DAh9ktmY-DwmCg4fP.js → chunk-4BX2VUAB-DAh9ktmY-CSlRfDiD.js} +1 -1
  11. package/dist/assets/{chunk-55IACEB6-Cza7pcpr-D6lZ77ip.js → chunk-55IACEB6-Cza7pcpr-Dk0Y3FWi.js} +1 -1
  12. package/dist/assets/{chunk-B4BG7PRW-BTUSpeKy-Dwb0PZ6c.js → chunk-B4BG7PRW-BTUSpeKy-GQz22Pxu.js} +1 -1
  13. package/dist/assets/{chunk-DI55MBZ5-DKt4WII7-DyuYTOz_.js → chunk-DI55MBZ5-DKt4WII7-eoubkYKX.js} +1 -1
  14. package/dist/assets/{chunk-FMBD7UC4-DdcCR8w3-D6UQKU-u.js → chunk-FMBD7UC4-DdcCR8w3-DD7VLulG.js} +1 -1
  15. package/dist/assets/{chunk-QN33PNHL-v6AkzOl1-E2ouvjbZ.js → chunk-QN33PNHL-v6AkzOl1-63Ww-l7h.js} +1 -1
  16. package/dist/assets/{chunk-QZHKN3VN-DVJOrqBZ-CPxXI2w7.js → chunk-QZHKN3VN-DVJOrqBZ-Vi2nR9Fj.js} +1 -1
  17. package/dist/assets/{chunk-TZMSLE5B-G2jJHqli-M-fSdf7w.js → chunk-TZMSLE5B-G2jJHqli-CQcB4RBh.js} +1 -1
  18. package/dist/assets/{classDiagram-2ON5EDUG-CxmgTanh-DN9tD7ak.js → classDiagram-2ON5EDUG-CxmgTanh-wtMdojNI.js} +1 -1
  19. package/dist/assets/{classDiagram-v2-WZHVMYZB-CxmgTanh-DN9tD7ak.js → classDiagram-v2-WZHVMYZB-CxmgTanh-wtMdojNI.js} +1 -1
  20. package/dist/assets/clone-CsNB4mMi-Dkw770wp.js +1 -0
  21. package/dist/assets/{cose-bilkent-S5V4N54A-BRr2Y6dg-CX-51kOi.js → cose-bilkent-S5V4N54A-BRr2Y6dg-BMbgPATB.js} +1 -1
  22. package/dist/assets/{dagre-6UL2VRFP-DX8gNHmJ-HxbaZqWx.js → dagre-6UL2VRFP-DX8gNHmJ-BjcfHAjB.js} +1 -1
  23. package/dist/assets/{diagram-PSM6KHXK-DNX818To-CpGZBeZf.js → diagram-PSM6KHXK-DNX818To-Dqs4xXI7.js} +1 -1
  24. package/dist/assets/{diagram-QEK2KX5R-BDO6hKtm-DxCnmV4I.js → diagram-QEK2KX5R-BDO6hKtm-DEMoX6J4.js} +1 -1
  25. package/dist/assets/{diagram-S2PKOQOG-IEqaDwzi-slJNL7fk.js → diagram-S2PKOQOG-IEqaDwzi-B_wvJB6W.js} +1 -1
  26. package/dist/assets/{erDiagram-Q2GNP2WA-DbLpN8Jp-Vs7VosVk.js → erDiagram-Q2GNP2WA-DbLpN8Jp-Bkgo1EkO.js} +1 -1
  27. package/dist/assets/{flowDiagram-NV44I4VS-pJlHae8Y-l0L7ugsK.js → flowDiagram-NV44I4VS-pJlHae8Y-BqYiH4aw.js} +1 -1
  28. package/dist/assets/{ganttDiagram-JELNMOA3-J0Tkq5TR-Du-yBzGF.js → ganttDiagram-JELNMOA3-J0Tkq5TR-BXZ-NHAu.js} +1 -1
  29. package/dist/assets/{gitGraphDiagram-NY62KEGX-DgYonpsZ-WJBegwIU.js → gitGraphDiagram-NY62KEGX-DgYonpsZ-DDGeDkgp.js} +1 -1
  30. package/dist/assets/{graph-BpcfrHXY-BhD1VXAB.js → graph-BpcfrHXY-BxLMpmgE.js} +1 -1
  31. package/dist/assets/{index-BDZZVQv5.js → index-Cat4tDb5.js} +234 -227
  32. package/dist/assets/{index-DvNpGWs7-Bh-N4Nuw.js → index-DvNpGWs7-CkhNmeVZ.js} +1 -1
  33. package/dist/assets/{infoDiagram-WHAUD3N6-C3JLOAnb-C-f2_ui4.js → infoDiagram-WHAUD3N6-C3JLOAnb-DUp3F_EX.js} +1 -1
  34. package/dist/assets/{journeyDiagram-XKPGCS4Q-CfjB2Qdf-CfNoTFT-.js → journeyDiagram-XKPGCS4Q-CfjB2Qdf-NCO4ZbSS.js} +1 -1
  35. package/dist/assets/{kanban-definition-3W4ZIXB7-CrW8yVmd-CK014Llm.js → kanban-definition-3W4ZIXB7-CrW8yVmd-C4KZAM4N.js} +1 -1
  36. package/dist/assets/{layout-bsfAhWjc-Dr7_a7-q.js → layout-bsfAhWjc-I5CzbVSc.js} +1 -1
  37. package/dist/assets/{min-C2aDz5ZK-B6tIfUwH.js → min-C2aDz5ZK-LEKv4vLP.js} +1 -1
  38. package/dist/assets/{mindmap-definition-VGOIOE7T-Dj37RkY_-DMFe-DKb.js → mindmap-definition-VGOIOE7T-Dj37RkY_-D_8NN8IJ.js} +1 -1
  39. package/dist/assets/{pieDiagram-ADFJNKIX-BiQvDx8I-BkD07pGE.js → pieDiagram-ADFJNKIX-BiQvDx8I-DmOOdQdq.js} +1 -1
  40. package/dist/assets/{quadrantDiagram-AYHSOK5B-D4b-YFzI-BGUC5hvZ.js → quadrantDiagram-AYHSOK5B-D4b-YFzI-DLjmAXSU.js} +1 -1
  41. package/dist/assets/{requirementDiagram-UZGBJVZJ-km07nlVd-Cz301ApB.js → requirementDiagram-UZGBJVZJ-km07nlVd-VQM3DztJ.js} +1 -1
  42. package/dist/assets/{sankeyDiagram-TZEHDZUN-LfuSRRbf-BXc_DzEh.js → sankeyDiagram-TZEHDZUN-LfuSRRbf-C1RPrj1E.js} +1 -1
  43. package/dist/assets/{sequenceDiagram-WL72ISMW-CQ4J-0_7-iZttPACZ.js → sequenceDiagram-WL72ISMW-CQ4J-0_7-Cyd5FAqA.js} +1 -1
  44. package/dist/assets/{stateDiagram-FKZM4ZOC-JtogJwt6-D3TcDyDR.js → stateDiagram-FKZM4ZOC-JtogJwt6-BpzYUxJb.js} +1 -1
  45. package/dist/assets/{stateDiagram-v2-4FDKWEC3-DuQ7UaeU-DhWZK0a7.js → stateDiagram-v2-4FDKWEC3-DuQ7UaeU-KzCrTqY2.js} +1 -1
  46. package/dist/assets/{timeline-definition-IT6M3QCI-Cs3NnF2M-C66x09c-.js → timeline-definition-IT6M3QCI-Cs3NnF2M-BB4l57DU.js} +1 -1
  47. package/dist/assets/{treemap-KMMF4GRG-CkW25-tn-B7CPhRdo.js → treemap-KMMF4GRG-CkW25-tn-OIkc-foi.js} +1 -1
  48. package/dist/assets/{xychartDiagram-PRI3JC2R-JzAaXa5z-Cr20s6YV.js → xychartDiagram-PRI3JC2R-JzAaXa5z-CQhLeS5W.js} +1 -1
  49. package/dist/index.html +1 -1
  50. package/package.json +2 -2
  51. package/dist/assets/api-C_5Adjyl.js +0 -2
  52. package/dist/assets/channel-CUIutAfm-BfQeMLgP.js +0 -1
  53. package/dist/assets/clone-CsNB4mMi-jtUx7Djs.js +0 -1
package/README.md CHANGED
@@ -34,6 +34,7 @@ orbitchat [options]
34
34
 
35
35
  Options:
36
36
  --api-url URL API URL (default: http://localhost:3000)
37
+ --default-adapter NAME Default adapter to preselect when middleware is enabled
37
38
  --api-key KEY Default API key (default: default-key)
38
39
  --use-local-api BOOLEAN Use local API build (default: false)
39
40
  --local-api-path PATH Path to local API
@@ -130,6 +131,10 @@ VITE_DEFAULT_KEY=default-key
130
131
  VITE_ENABLE_UPLOAD=false
131
132
  VITE_CONSOLE_DEBUG=false
132
133
  # ... etc
134
+
135
+ `VITE_DEFAULT_KEY` is dual-purpose:
136
+ - When **middleware is disabled**, it should contain the literal API key that the frontend will send to the backend (same as before).
137
+ - When **middleware is enabled**, set it to the adapter name you want preselected (or pass `--default-adapter`). If you leave it as `default-key` or empty, the app automatically falls back to the first adapter defined in `VITE_ADAPTERS`/`ORBIT_ADAPTERS`.
133
138
  ```
134
139
 
135
140
  ## Development
@@ -152,7 +157,7 @@ Create a `.env.local` file in the root directory:
152
157
 
153
158
  ```bash
154
159
  VITE_API_URL=https://your-api-endpoint.com
155
- VITE_DEFAULT_KEY=default-key # Default API key used when no key is configured
160
+ VITE_DEFAULT_KEY=default-key # API key in direct mode, or adapter name in middleware mode
156
161
  VITE_USE_LOCAL_API=true # Set to 'true' to use local API build
157
162
  VITE_LOCAL_API_PATH=/api.mjs # Path to local API (defaults to /api.mjs from public directory)
158
163
  VITE_CONSOLE_DEBUG=false # Enable debug logging
@@ -216,6 +221,13 @@ The local API files will be copied to `src/api/local/` directory. When `VITE_USE
216
221
  - **Conversation Persistence**: Chat history is saved to localStorage
217
222
  - **API Configuration**: Flexible API configuration options
218
223
 
224
+ ## Security
225
+
226
+ - When **API middleware** is enabled, the browser never sees your real API keys. The CLI proxy serves `/api/adapters` with adapter names only and injects the real `X-API-Key` on the server before calling the backend. Keep `ORBIT_ADAPTERS` / `VITE_ADAPTERS` on the server (out of git) and run the proxy behind HTTPS so users cannot intercept traffic.
227
+ - Even though the app falls back to the first adapter in `VITE_ADAPTERS`, the adapters list itself is still server-side; clients only learn the names you expose. Someone would need filesystem or shell access to the machine running `bin/orbitchat.js` to read the adapters config and extract the real keys.
228
+ - In direct mode (middleware disabled), the browser stores API keys locally to send them with requests—treat that mode as developer-only unless you’re comfortable distributing the key to end users.
229
+ - Regardless of mode, secure the host running the CLI and restrict who can reach it; a compromised host or misconfigured reverse proxy can leak the adapters file or intercept proxied traffic.
230
+
219
231
  ## Usage
220
232
 
221
233
  ### Basic Chat
package/bin/orbitchat.js CHANGED
@@ -45,46 +45,65 @@ const DEFAULT_CONFIG = {
45
45
  maxMessageLength: 1000,
46
46
  };
47
47
 
48
- /**
49
- * Load adapter mappings from environment variable
50
- * Format: JSON array of adapter objects
51
- * Example: ORBIT_ADAPTERS='[{"name":"Simple Chat","apiKey":"key1","apiUrl":"https://api.example.com"}]'
52
- * @returns {object|null} - Adapters object or null if not found/invalid
53
- */
54
- function loadAdaptersConfig() {
48
+ function parseAdaptersListFromEnv() {
55
49
  const envValue = process.env.ORBIT_ADAPTERS || process.env.VITE_ADAPTERS;
56
50
  if (!envValue) {
57
- return null;
51
+ return [];
58
52
  }
59
53
 
60
54
  try {
61
55
  const parsed = JSON.parse(envValue);
62
56
  if (!Array.isArray(parsed)) {
63
57
  console.warn('Warning: ORBIT_ADAPTERS/VITE_ADAPTERS must be a JSON array');
64
- return null;
58
+ return [];
65
59
  }
66
60
 
67
- // Convert array to object format expected by the rest of the code
68
- const adapters = {};
61
+ const adapters = [];
69
62
  for (const adapter of parsed) {
70
63
  if (!adapter.name) {
71
64
  console.warn('Warning: Each adapter must have a "name" property');
72
65
  continue;
73
66
  }
74
- adapters[adapter.name] = {
75
- apiKey: adapter.apiKey || 'default-key',
76
- apiUrl: adapter.apiUrl || 'http://localhost:3000',
77
- };
67
+ adapters.push({
68
+ name: adapter.name,
69
+ apiKey: adapter.apiKey || DEFAULT_CONFIG.defaultKey,
70
+ apiUrl: adapter.apiUrl || DEFAULT_CONFIG.apiUrl,
71
+ });
78
72
  }
79
73
 
80
- if (Object.keys(adapters).length > 0) {
81
- return adapters;
82
- }
83
- return null;
74
+ return adapters;
84
75
  } catch (error) {
85
76
  console.warn('Warning: Could not parse ORBIT_ADAPTERS/VITE_ADAPTERS:', error.message);
77
+ return [];
78
+ }
79
+ }
80
+
81
+ /**
82
+ * Load adapter mappings from environment variable
83
+ * Format: JSON array of adapter objects
84
+ * Example: ORBIT_ADAPTERS='[{"name":"Simple Chat","apiKey":"key1","apiUrl":"https://api.example.com"}]'
85
+ * @returns {object|null} - Adapters object or null if not found/invalid
86
+ */
87
+ function loadAdaptersConfig() {
88
+ const adapterList = parseAdaptersListFromEnv();
89
+ if (adapterList.length === 0) {
86
90
  return null;
87
91
  }
92
+
93
+ const adapters = {};
94
+ for (const adapter of adapterList) {
95
+ adapters[adapter.name] = {
96
+ apiKey: adapter.apiKey || DEFAULT_CONFIG.defaultKey,
97
+ apiUrl: adapter.apiUrl || DEFAULT_CONFIG.apiUrl,
98
+ };
99
+ }
100
+
101
+ return Object.keys(adapters).length > 0 ? adapters : null;
102
+ }
103
+
104
+ function getDefaultAdapterFromEnv() {
105
+ const adapterList = parseAdaptersListFromEnv();
106
+ return adapterList.length > 0 ? adapterList[0].name : null;
88
107
  }
89
108
 
90
109
  /**
@@ -108,7 +127,13 @@ function parseArgs() {
108
127
  config.apiUrl = args[++i];
109
128
  break;
110
129
  case '--api-key':
130
+ config.defaultKey = args[++i];
131
+ break;
132
+ case '--default-adapter':
133
+ config.defaultKey = args[++i];
134
+ break;
111
135
  case '--default-key':
136
+ console.warn('Warning: --default-key is deprecated. Use --default-adapter instead.');
112
137
  config.defaultKey = args[++i];
113
138
  break;
114
139
  case '--application-name':
@@ -576,6 +601,7 @@ Usage: orbitchat [options]
576
601
 
577
602
  Options:
578
603
  --api-url URL API URL (default: http://localhost:3000)
604
+ --default-adapter NAME Default adapter to preselect (middleware mode)
579
605
  --api-key KEY Default API key (default: default-key)
580
606
  --application-name NAME Application name shown in browser tab (default: ORBIT Chat)
581
607
  --use-local-api Use local API build (default: false)
@@ -640,6 +666,17 @@ function main() {
640
666
  const { config: cliConfig, serverConfig } = parseArgs();
641
667
  const config = mergeConfig(cliConfig, serverConfig);
642
668
 
669
+ if (config.enableApiMiddleware) {
670
+ const trimmedDefaultKey = (config.defaultKey || '').trim();
671
+ if (!trimmedDefaultKey || trimmedDefaultKey === DEFAULT_CONFIG.defaultKey) {
672
+ const fallbackAdapter = getDefaultAdapterFromEnv();
673
+ if (fallbackAdapter) {
674
+ config.defaultKey = fallbackAdapter;
675
+ console.debug(`ℹ️ Using '${fallbackAdapter}' as the default adapter (first entry from VITE_ADAPTERS).`);
676
+ }
677
+ }
678
+ }
679
+
643
680
  // Find dist directory
644
681
  // Use __dirname which we defined at the top of the file
645
682
  const distPath = path.join(__dirname, '..', 'dist');
@@ -657,7 +694,7 @@ function main() {
657
694
  console.debug(`\n🚀 ORBIT Chat App is running at ${url}\n`);
658
695
  console.debug('Configuration:');
659
696
  console.debug(` API URL: ${config.apiUrl}`);
660
- console.debug(` Default Key: ${config.defaultKey}`);
697
+ console.debug(` Default Key/Adapter: ${config.defaultKey || '(not set)'}`);
661
698
  console.debug(` Port: ${serverConfig.port}`);
662
699
  console.debug(` Host: ${serverConfig.host}`);
663
700
  if (config.enableApiMiddleware) {
@@ -1 +1 @@
1
- import{bI as cr,bJ as ir,aT as Z,aL as h,aM as U,bK as A,bL as lr,aQ as sr,bx as k,bs as P,bM as vr,bN as br,aR as hr,bO as X,bo as K,bp as N,bP as gr,bz as _,aH as pr,bQ as R,bR as yr,aU as dr}from"./index-BDZZVQv5.js";var jr="[object Symbol]";function z(r){return typeof r=="symbol"||k(r)&&vr(r)==jr}function _r(r,t){for(var e=-1,n=r==null?0:r.length,a=Array(n);++e<n;)a[e]=t(r[e],e,r);return a}var D=_?_.prototype:void 0,E=D?D.toString:void 0;function V(r){if(typeof r=="string")return r;if(h(r))return _r(r,V)+"";if(z(r))return E?E.call(r):"";var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function mr(){}function wr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n&&t(r[e],e,r)!==!1;);return r}function Or(r,t,e,n){for(var a=r.length,u=e+-1;++u<a;)if(t(r[u],u,r))return u;return-1}function Lr(r){return r!==r}function Pr(r,t,e){for(var n=e-1,a=r.length;++n<a;)if(r[n]===t)return n;return-1}function Sr(r,t,e){return t===t?Pr(r,t,e):Or(r,Lr,e)}function Ar(r,t){var e=r==null?0:r.length;return!!e&&Sr(r,t,0)>-1}function M(r){return Z(r)?cr(r):ir(r)}var Br=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kr=/^\w*$/;function $(r,t){if(h(r))return!1;var e=typeof r;return e=="number"||e=="symbol"||e=="boolean"||r==null||z(r)?!0:kr.test(r)||!Br.test(r)||t!=null&&r in Object(t)}var zr=500;function Mr(r){var t=yr(r,function(n){return e.size===zr&&e.clear(),n}),e=t.cache;return t}var $r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xr=/\\(\\)?/g,Cr=Mr(function(r){var t=[];return r.charCodeAt(0)===46&&t.push(""),r.replace($r,function(e,n,a,u){t.push(a?u.replace(xr,"$1"):n||e)}),t});function Fr(r){return r==null?"":V(r)}function W(r,t){return h(r)?r:$(r,t)?[r]:Cr(Fr(r))}function S(r){if(typeof r=="string"||z(r))return r;var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function rr(r,t){t=W(t,r);for(var e=0,n=t.length;r!=null&&e<n;)r=r[S(t[e++])];return e&&e==n?r:void 0}function Jr(r,t,e){var n=r==null?void 0:rr(r,t);return n===void 0?e:n}function tr(r,t){for(var e=-1,n=t.length,a=r.length;++e<n;)r[a+e]=t[e];return r}var H=_?_.isConcatSpreadable:void 0;function Kr(r){return h(r)||X(r)||!!(H&&r&&r[H])}function Et(r,t,e,n,a){var u=-1,o=r.length;for(e||(e=Kr),a||(a=[]);++u<o;){var f=r[u];e(f)?tr(a,f):n||(a[a.length]=f)}return a}function Nr(r,t,e,n){var a=-1,u=r==null?0:r.length;for(n&&u&&(e=r[++a]);++a<u;)e=t(e,r[a],a,r);return e}function er(r,t){for(var e=-1,n=r==null?0:r.length,a=0,u=[];++e<n;){var o=r[e];t(o,e,r)&&(u[a++]=o)}return u}function Rr(){return[]}var Dr=Object.prototype,Er=Dr.propertyIsEnumerable,I=Object.getOwnPropertySymbols,Hr=I?function(r){return r==null?[]:(r=Object(r),er(I(r),function(t){return Er.call(r,t)}))}:Rr;function Ir(r,t,e){var n=t(r);return h(r)?n:tr(n,e(r))}function T(r){return Ir(r,M,Hr)}var Tr="__lodash_hash_undefined__";function Yr(r){return this.__data__.set(r,Tr),this}function qr(r){return this.__data__.has(r)}function m(r){var t=-1,e=r==null?0:r.length;for(this.__data__=new lr;++t<e;)this.add(r[t])}m.prototype.add=m.prototype.push=Yr;m.prototype.has=qr;function Gr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n;)if(t(r[e],e,r))return!0;return!1}function nr(r,t){return r.has(t)}var Qr=1,Zr=2;function ur(r,t,e,n,a,u){var o=e&Qr,f=r.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var v=u.get(r),l=u.get(t);if(v&&l)return v==t&&l==r;var i=-1,s=!0,p=e&Zr?new m:void 0;for(u.set(r,t),u.set(t,r);++i<f;){var b=r[i],g=t[i];if(n)var y=o?n(g,b,i,t,r,u):n(b,g,i,r,t,u);if(y!==void 0){if(y)continue;s=!1;break}if(p){if(!Gr(t,function(d,j){if(!nr(p,j)&&(b===d||a(b,d,e,n,u)))return p.push(j)})){s=!1;break}}else if(!(b===g||a(b,g,e,n,u))){s=!1;break}}return u.delete(r),u.delete(t),s}function Ur(r){var t=-1,e=Array(r.size);return r.forEach(function(n,a){e[++t]=[a,n]}),e}function x(r){var t=-1,e=Array(r.size);return r.forEach(function(n){e[++t]=n}),e}var Xr=1,Vr=2,Wr="[object Boolean]",rt="[object Date]",tt="[object Error]",et="[object Map]",nt="[object Number]",ut="[object RegExp]",at="[object Set]",ot="[object String]",ft="[object Symbol]",ct="[object ArrayBuffer]",it="[object DataView]",Y=_?_.prototype:void 0,B=Y?Y.valueOf:void 0;function lt(r,t,e,n,a,u,o){switch(e){case it:if(r.byteLength!=t.byteLength||r.byteOffset!=t.byteOffset)return!1;r=r.buffer,t=t.buffer;case ct:return!(r.byteLength!=t.byteLength||!u(new R(r),new R(t)));case Wr:case rt:case nt:return pr(+r,+t);case tt:return r.name==t.name&&r.message==t.message;case ut:case ot:return r==t+"";case et:var f=Ur;case at:var c=n&Xr;if(f||(f=x),r.size!=t.size&&!c)return!1;var v=o.get(r);if(v)return v==t;n|=Vr,o.set(r,t);var l=ur(f(r),f(t),n,a,u,o);return o.delete(r),l;case ft:if(B)return B.call(r)==B.call(t)}return!1}var st=1,vt=Object.prototype,bt=vt.hasOwnProperty;function ht(r,t,e,n,a,u){var o=e&st,f=T(r),c=f.length,v=T(t),l=v.length;if(c!=l&&!o)return!1;for(var i=c;i--;){var s=f[i];if(!(o?s in t:bt.call(t,s)))return!1}var p=u.get(r),b=u.get(t);if(p&&b)return p==t&&b==r;var g=!0;u.set(r,t),u.set(t,r);for(var y=o;++i<c;){s=f[i];var d=r[s],j=t[s];if(n)var J=o?n(j,d,s,t,r,u):n(d,j,s,r,t,u);if(!(J===void 0?d===j||a(d,j,e,n,u):J)){g=!1;break}y||(y=s=="constructor")}if(g&&!y){var w=r.constructor,O=t.constructor;w!=O&&"constructor"in r&&"constructor"in t&&!(typeof w=="function"&&w instanceof w&&typeof O=="function"&&O instanceof O)&&(g=!1)}return u.delete(r),u.delete(t),g}var gt=1,q="[object Arguments]",G="[object Array]",L="[object Object]",pt=Object.prototype,Q=pt.hasOwnProperty;function yt(r,t,e,n,a,u){var o=h(r),f=h(t),c=o?G:K(r),v=f?G:K(t);c=c==q?L:c,v=v==q?L:v;var l=c==L,i=v==L,s=c==v;if(s&&N(r)){if(!N(t))return!1;o=!0,l=!1}if(s&&!l)return u||(u=new P),o||gr(r)?ur(r,t,e,n,a,u):lt(r,t,c,e,n,a,u);if(!(e&gt)){var p=l&&Q.call(r,"__wrapped__"),b=i&&Q.call(t,"__wrapped__");if(p||b){var g=p?r.value():r,y=b?t.value():t;return u||(u=new P),a(g,y,e,n,u)}}return s?(u||(u=new P),ht(r,t,e,n,a,u)):!1}function C(r,t,e,n,a){return r===t?!0:r==null||t==null||!k(r)&&!k(t)?r!==r&&t!==t:yt(r,t,e,n,C,a)}var dt=1,jt=2;function _t(r,t,e,n){var a=e.length,u=a;if(r==null)return!u;for(r=Object(r);a--;){var o=e[a];if(o[2]?o[1]!==r[o[0]]:!(o[0]in r))return!1}for(;++a<u;){o=e[a];var f=o[0],c=r[f],v=o[1];if(o[2]){if(c===void 0&&!(f in r))return!1}else{var l=new P,i;if(!(i===void 0?C(v,c,dt|jt,n,l):i))return!1}}return!0}function ar(r){return r===r&&!sr(r)}function mt(r){for(var t=M(r),e=t.length;e--;){var n=t[e],a=r[n];t[e]=[n,a,ar(a)]}return t}function or(r,t){return function(e){return e==null?!1:e[r]===t&&(t!==void 0||r in Object(e))}}function wt(r){var t=mt(r);return t.length==1&&t[0][2]?or(t[0][0],t[0][1]):function(e){return e===r||_t(e,r,t)}}function Ot(r,t){return r!=null&&t in Object(r)}function Lt(r,t,e){t=W(t,r);for(var n=-1,a=t.length,u=!1;++n<a;){var o=S(t[n]);if(!(u=r!=null&&e(r,o)))break;r=r[o]}return u||++n!=a?u:(a=r==null?0:r.length,!!a&&br(a)&&hr(o,a)&&(h(r)||X(r)))}function Pt(r,t){return r!=null&&Lt(r,t,Ot)}var St=1,At=2;function Bt(r,t){return $(r)&&ar(t)?or(S(r),t):function(e){var n=Jr(e,r);return n===void 0&&n===t?Pt(e,r):C(t,n,St|At)}}function kt(r){return function(t){return t==null?void 0:t[r]}}function zt(r){return function(t){return rr(t,r)}}function Mt(r){return $(r)?kt(S(r)):zt(r)}function fr(r){return typeof r=="function"?r:r==null?U:typeof r=="object"?h(r)?Bt(r[0],r[1]):wt(r):Mt(r)}function $t(r,t){return r&&dr(r,t,M)}function xt(r,t){return function(e,n){if(e==null)return e;if(!Z(e))return r(e,n);for(var a=e.length,u=-1,o=Object(e);++u<a&&n(o[u],u,o)!==!1;);return e}}var F=xt($t);function Ct(r){return typeof r=="function"?r:U}function Ht(r,t){var e=h(r)?wr:F;return e(r,Ct(t))}function Ft(r,t){var e=[];return F(r,function(n,a,u){t(n,a,u)&&e.push(n)}),e}function It(r,t){var e=h(r)?er:Ft;return e(r,fr(t))}function Jt(r,t,e,n,a){return a(r,function(u,o,f){e=n?(n=!1,u):t(e,u,o,f)}),e}function Tt(r,t,e){var n=h(r)?Nr:Jt,a=arguments.length<3;return n(r,fr(t),e,a,F)}var Kt=1/0,Nt=A&&1/x(new A([,-0]))[1]==Kt?function(r){return new A(r)}:mr,Rt=200;function Yt(r,t,e){var n=-1,a=Ar,u=r.length,o=!0,f=[],c=f;if(u>=Rt){var v=t?null:Nt(r);if(v)return x(v);o=!1,a=nr,c=new m}else c=t?[]:f;r:for(;++n<u;){var l=r[n],i=t?t(l):l;if(l=l!==0?l:0,o&&i===i){for(var s=c.length;s--;)if(c[s]===i)continue r;t&&c.push(i),f.push(l)}else a(c,i,e)||(c!==f&&c.push(i),f.push(l))}return f}export{$t as $,Et as B,wr as E,Ct as F,Fr as G,S as I,Yt as J,Rr as K,M,Lt as T,Tt as Y,It as Z,fr as a,Pt as b,Or as c,T as d,Hr as e,Ir as f,F as g,W as j,rr as n,Ht as q,tr as r,_r as v,z as x};
1
+ import{bI as cr,bJ as ir,aT as Z,aL as h,aM as U,bK as A,bL as lr,aQ as sr,bx as k,bs as P,bM as vr,bN as br,aR as hr,bO as X,bo as K,bp as N,bP as gr,bz as _,aH as pr,bQ as R,bR as yr,aU as dr}from"./index-Cat4tDb5.js";var jr="[object Symbol]";function z(r){return typeof r=="symbol"||k(r)&&vr(r)==jr}function _r(r,t){for(var e=-1,n=r==null?0:r.length,a=Array(n);++e<n;)a[e]=t(r[e],e,r);return a}var D=_?_.prototype:void 0,E=D?D.toString:void 0;function V(r){if(typeof r=="string")return r;if(h(r))return _r(r,V)+"";if(z(r))return E?E.call(r):"";var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function mr(){}function wr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n&&t(r[e],e,r)!==!1;);return r}function Or(r,t,e,n){for(var a=r.length,u=e+-1;++u<a;)if(t(r[u],u,r))return u;return-1}function Lr(r){return r!==r}function Pr(r,t,e){for(var n=e-1,a=r.length;++n<a;)if(r[n]===t)return n;return-1}function Sr(r,t,e){return t===t?Pr(r,t,e):Or(r,Lr,e)}function Ar(r,t){var e=r==null?0:r.length;return!!e&&Sr(r,t,0)>-1}function M(r){return Z(r)?cr(r):ir(r)}var Br=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,kr=/^\w*$/;function $(r,t){if(h(r))return!1;var e=typeof r;return e=="number"||e=="symbol"||e=="boolean"||r==null||z(r)?!0:kr.test(r)||!Br.test(r)||t!=null&&r in Object(t)}var zr=500;function Mr(r){var t=yr(r,function(n){return e.size===zr&&e.clear(),n}),e=t.cache;return t}var $r=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,xr=/\\(\\)?/g,Cr=Mr(function(r){var t=[];return r.charCodeAt(0)===46&&t.push(""),r.replace($r,function(e,n,a,u){t.push(a?u.replace(xr,"$1"):n||e)}),t});function Fr(r){return r==null?"":V(r)}function W(r,t){return h(r)?r:$(r,t)?[r]:Cr(Fr(r))}function S(r){if(typeof r=="string"||z(r))return r;var t=r+"";return t=="0"&&1/r==-1/0?"-0":t}function rr(r,t){t=W(t,r);for(var e=0,n=t.length;r!=null&&e<n;)r=r[S(t[e++])];return e&&e==n?r:void 0}function Jr(r,t,e){var n=r==null?void 0:rr(r,t);return n===void 0?e:n}function tr(r,t){for(var e=-1,n=t.length,a=r.length;++e<n;)r[a+e]=t[e];return r}var H=_?_.isConcatSpreadable:void 0;function Kr(r){return h(r)||X(r)||!!(H&&r&&r[H])}function Et(r,t,e,n,a){var u=-1,o=r.length;for(e||(e=Kr),a||(a=[]);++u<o;){var f=r[u];e(f)?tr(a,f):n||(a[a.length]=f)}return a}function Nr(r,t,e,n){var a=-1,u=r==null?0:r.length;for(n&&u&&(e=r[++a]);++a<u;)e=t(e,r[a],a,r);return e}function er(r,t){for(var e=-1,n=r==null?0:r.length,a=0,u=[];++e<n;){var o=r[e];t(o,e,r)&&(u[a++]=o)}return u}function Rr(){return[]}var Dr=Object.prototype,Er=Dr.propertyIsEnumerable,I=Object.getOwnPropertySymbols,Hr=I?function(r){return r==null?[]:(r=Object(r),er(I(r),function(t){return Er.call(r,t)}))}:Rr;function Ir(r,t,e){var n=t(r);return h(r)?n:tr(n,e(r))}function T(r){return Ir(r,M,Hr)}var Tr="__lodash_hash_undefined__";function Yr(r){return this.__data__.set(r,Tr),this}function qr(r){return this.__data__.has(r)}function m(r){var t=-1,e=r==null?0:r.length;for(this.__data__=new lr;++t<e;)this.add(r[t])}m.prototype.add=m.prototype.push=Yr;m.prototype.has=qr;function Gr(r,t){for(var e=-1,n=r==null?0:r.length;++e<n;)if(t(r[e],e,r))return!0;return!1}function nr(r,t){return r.has(t)}var Qr=1,Zr=2;function ur(r,t,e,n,a,u){var o=e&Qr,f=r.length,c=t.length;if(f!=c&&!(o&&c>f))return!1;var v=u.get(r),l=u.get(t);if(v&&l)return v==t&&l==r;var i=-1,s=!0,p=e&Zr?new m:void 0;for(u.set(r,t),u.set(t,r);++i<f;){var b=r[i],g=t[i];if(n)var y=o?n(g,b,i,t,r,u):n(b,g,i,r,t,u);if(y!==void 0){if(y)continue;s=!1;break}if(p){if(!Gr(t,function(d,j){if(!nr(p,j)&&(b===d||a(b,d,e,n,u)))return p.push(j)})){s=!1;break}}else if(!(b===g||a(b,g,e,n,u))){s=!1;break}}return u.delete(r),u.delete(t),s}function Ur(r){var t=-1,e=Array(r.size);return r.forEach(function(n,a){e[++t]=[a,n]}),e}function x(r){var t=-1,e=Array(r.size);return r.forEach(function(n){e[++t]=n}),e}var Xr=1,Vr=2,Wr="[object Boolean]",rt="[object Date]",tt="[object Error]",et="[object Map]",nt="[object Number]",ut="[object RegExp]",at="[object Set]",ot="[object String]",ft="[object Symbol]",ct="[object ArrayBuffer]",it="[object DataView]",Y=_?_.prototype:void 0,B=Y?Y.valueOf:void 0;function lt(r,t,e,n,a,u,o){switch(e){case it:if(r.byteLength!=t.byteLength||r.byteOffset!=t.byteOffset)return!1;r=r.buffer,t=t.buffer;case ct:return!(r.byteLength!=t.byteLength||!u(new R(r),new R(t)));case Wr:case rt:case nt:return pr(+r,+t);case tt:return r.name==t.name&&r.message==t.message;case ut:case ot:return r==t+"";case et:var f=Ur;case at:var c=n&Xr;if(f||(f=x),r.size!=t.size&&!c)return!1;var v=o.get(r);if(v)return v==t;n|=Vr,o.set(r,t);var l=ur(f(r),f(t),n,a,u,o);return o.delete(r),l;case ft:if(B)return B.call(r)==B.call(t)}return!1}var st=1,vt=Object.prototype,bt=vt.hasOwnProperty;function ht(r,t,e,n,a,u){var o=e&st,f=T(r),c=f.length,v=T(t),l=v.length;if(c!=l&&!o)return!1;for(var i=c;i--;){var s=f[i];if(!(o?s in t:bt.call(t,s)))return!1}var p=u.get(r),b=u.get(t);if(p&&b)return p==t&&b==r;var g=!0;u.set(r,t),u.set(t,r);for(var y=o;++i<c;){s=f[i];var d=r[s],j=t[s];if(n)var J=o?n(j,d,s,t,r,u):n(d,j,s,r,t,u);if(!(J===void 0?d===j||a(d,j,e,n,u):J)){g=!1;break}y||(y=s=="constructor")}if(g&&!y){var w=r.constructor,O=t.constructor;w!=O&&"constructor"in r&&"constructor"in t&&!(typeof w=="function"&&w instanceof w&&typeof O=="function"&&O instanceof O)&&(g=!1)}return u.delete(r),u.delete(t),g}var gt=1,q="[object Arguments]",G="[object Array]",L="[object Object]",pt=Object.prototype,Q=pt.hasOwnProperty;function yt(r,t,e,n,a,u){var o=h(r),f=h(t),c=o?G:K(r),v=f?G:K(t);c=c==q?L:c,v=v==q?L:v;var l=c==L,i=v==L,s=c==v;if(s&&N(r)){if(!N(t))return!1;o=!0,l=!1}if(s&&!l)return u||(u=new P),o||gr(r)?ur(r,t,e,n,a,u):lt(r,t,c,e,n,a,u);if(!(e&gt)){var p=l&&Q.call(r,"__wrapped__"),b=i&&Q.call(t,"__wrapped__");if(p||b){var g=p?r.value():r,y=b?t.value():t;return u||(u=new P),a(g,y,e,n,u)}}return s?(u||(u=new P),ht(r,t,e,n,a,u)):!1}function C(r,t,e,n,a){return r===t?!0:r==null||t==null||!k(r)&&!k(t)?r!==r&&t!==t:yt(r,t,e,n,C,a)}var dt=1,jt=2;function _t(r,t,e,n){var a=e.length,u=a;if(r==null)return!u;for(r=Object(r);a--;){var o=e[a];if(o[2]?o[1]!==r[o[0]]:!(o[0]in r))return!1}for(;++a<u;){o=e[a];var f=o[0],c=r[f],v=o[1];if(o[2]){if(c===void 0&&!(f in r))return!1}else{var l=new P,i;if(!(i===void 0?C(v,c,dt|jt,n,l):i))return!1}}return!0}function ar(r){return r===r&&!sr(r)}function mt(r){for(var t=M(r),e=t.length;e--;){var n=t[e],a=r[n];t[e]=[n,a,ar(a)]}return t}function or(r,t){return function(e){return e==null?!1:e[r]===t&&(t!==void 0||r in Object(e))}}function wt(r){var t=mt(r);return t.length==1&&t[0][2]?or(t[0][0],t[0][1]):function(e){return e===r||_t(e,r,t)}}function Ot(r,t){return r!=null&&t in Object(r)}function Lt(r,t,e){t=W(t,r);for(var n=-1,a=t.length,u=!1;++n<a;){var o=S(t[n]);if(!(u=r!=null&&e(r,o)))break;r=r[o]}return u||++n!=a?u:(a=r==null?0:r.length,!!a&&br(a)&&hr(o,a)&&(h(r)||X(r)))}function Pt(r,t){return r!=null&&Lt(r,t,Ot)}var St=1,At=2;function Bt(r,t){return $(r)&&ar(t)?or(S(r),t):function(e){var n=Jr(e,r);return n===void 0&&n===t?Pt(e,r):C(t,n,St|At)}}function kt(r){return function(t){return t==null?void 0:t[r]}}function zt(r){return function(t){return rr(t,r)}}function Mt(r){return $(r)?kt(S(r)):zt(r)}function fr(r){return typeof r=="function"?r:r==null?U:typeof r=="object"?h(r)?Bt(r[0],r[1]):wt(r):Mt(r)}function $t(r,t){return r&&dr(r,t,M)}function xt(r,t){return function(e,n){if(e==null)return e;if(!Z(e))return r(e,n);for(var a=e.length,u=-1,o=Object(e);++u<a&&n(o[u],u,o)!==!1;);return e}}var F=xt($t);function Ct(r){return typeof r=="function"?r:U}function Ht(r,t){var e=h(r)?wr:F;return e(r,Ct(t))}function Ft(r,t){var e=[];return F(r,function(n,a,u){t(n,a,u)&&e.push(n)}),e}function It(r,t){var e=h(r)?er:Ft;return e(r,fr(t))}function Jt(r,t,e,n,a){return a(r,function(u,o,f){e=n?(n=!1,u):t(e,u,o,f)}),e}function Tt(r,t,e){var n=h(r)?Nr:Jt,a=arguments.length<3;return n(r,fr(t),e,a,F)}var Kt=1/0,Nt=A&&1/x(new A([,-0]))[1]==Kt?function(r){return new A(r)}:mr,Rt=200;function Yt(r,t,e){var n=-1,a=Ar,u=r.length,o=!0,f=[],c=f;if(u>=Rt){var v=t?null:Nt(r);if(v)return x(v);o=!1,a=nr,c=new m}else c=t?[]:f;r:for(;++n<u;){var l=r[n],i=t?t(l):l;if(l=l!==0?l:0,o&&i===i){for(var s=c.length;s--;)if(c[s]===i)continue r;t&&c.push(i),f.push(l)}else a(c,i,e)||(c!==f&&c.push(i),f.push(l))}return f}export{$t as $,Et as B,wr as E,Ct as F,Fr as G,S as I,Yt as J,Rr as K,M,Lt as T,Tt as Y,It as Z,fr as a,Pt as b,Or as c,T as d,Hr as e,Ir as f,F as g,W as j,rr as n,Ht as q,tr as r,_r as v,z as x};
@@ -0,0 +1,2 @@
1
+ import{_ as O}from"./index-Cat4tDb5.js";var q=Object.defineProperty,D=(c,i,e)=>i in c?q(c,i,{enumerable:!0,configurable:!0,writable:!0,value:e}):c[i]=e,I=(c,i,e)=>D(c,typeof i!="symbol"?i+"":i,e);let F=null,$=null;typeof window>"u"&&Promise.all([O(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null),O(()=>import("./__vite-browser-external-BIHI7g3E.js"),[]).catch(()=>null)]).then(([c,i])=>{var e,t;(e=c==null?void 0:c.default)!=null&&e.Agent?F=new c.default.Agent({keepAlive:!0}):c!=null&&c.Agent&&(F=new c.Agent({keepAlive:!0})),(t=i==null?void 0:i.default)!=null&&t.Agent?$=new i.default.Agent({keepAlive:!0}):i!=null&&i.Agent&&($=new i.Agent({keepAlive:!0}))}).catch(c=>{console.warn("Failed to initialize HTTP agents:",c.message)});class N{constructor(i){if(I(this,"apiUrl"),I(this,"apiKey"),I(this,"sessionId"),!i.apiUrl||typeof i.apiUrl!="string")throw new Error("API URL must be a valid string");if(i.apiKey!==void 0&&i.apiKey!==null&&typeof i.apiKey!="string")throw new Error("API key must be a valid string or null");if(i.sessionId!==void 0&&i.sessionId!==null&&typeof i.sessionId!="string")throw new Error("Session ID must be a valid string or null");this.apiUrl=i.apiUrl,this.apiKey=i.apiKey??null,this.sessionId=i.sessionId??null}setSessionId(i){if(i!==null&&typeof i!="string")throw new Error("Session ID must be a valid string or null");this.sessionId=i}getSessionId(){return this.sessionId}async validateApiKey(){var i;if(!this.apiKey)throw new Error("API key is required for validation");try{const e=await fetch(`${this.apiUrl}/admin/api-keys/${this.apiKey}/status`,{...this.getFetchOptions({method:"GET"})}).catch(r=>{throw r.name==="TypeError"&&r.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):r});if(!e.ok){let r="";try{r=await e.text()}catch{r=`HTTP ${e.status}`}let s,n;try{const o=JSON.parse(r);s=o.detail||o.message||r}catch{s=r||`HTTP ${e.status}`}switch(e.status){case 401:n="API key is invalid or expired";break;case 403:n="Access denied: API key does not have required permissions";break;case 404:n="API key not found";break;case 503:n="API key management is not available in inference-only mode";break;default:n=`Failed to validate API key: ${s}`;break}throw new Error(n)}const t=await e.json();if(!t.exists){const r="API key does not exist";throw new Error(r)}if(!t.active){const r="API key is inactive";throw new Error(r)}return t}catch(e){let t;throw e instanceof Error&&e.message?e.message.includes("API key")||e.message.includes("Access denied")||e.message.includes("invalid")||e.message.includes("expired")||e.message.includes("inactive")||e.message.includes("not found")||e.message.includes("Could not connect")?t=e.message:t=`API key validation failed: ${e.message}`:e.name==="TypeError"&&(i=e.message)!=null&&i.includes("Failed to fetch")?t="Could not connect to the server. Please check if the server is running.":t="API key validation failed. Please check your API key and try again.",console.warn(`[ApiClient] ${t}`),new Error(t)}}async getAdapterInfo(){var i;if(!this.apiKey)throw new Error("API key is required to get adapter information");try{const e=await fetch(`${this.apiUrl}/admin/adapters/info`,{...this.getFetchOptions({method:"GET"})}).catch(t=>{throw t.name==="TypeError"&&t.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):t});if(!e.ok){let t="";try{t=await e.text()}catch{t=`HTTP ${e.status}`}let r,s;try{const n=JSON.parse(t);r=n.detail||n.message||t}catch{r=t||`HTTP ${e.status}`}switch(e.status){case 401:s="API key is invalid, disabled, or has no associated adapter";break;case 404:s="Adapter configuration not found";break;case 503:s="Service is not available";break;default:s=`Failed to get adapter info: ${r}`;break}throw new Error(s)}return await e.json()}catch(e){let t;throw e instanceof Error&&e.message?e.message.includes("API key")||e.message.includes("Adapter")||e.message.includes("invalid")||e.message.includes("disabled")||e.message.includes("not found")||e.message.includes("Could not connect")?t=e.message:t=`Failed to get adapter info: ${e.message}`:e.name==="TypeError"&&(i=e.message)!=null&&i.includes("Failed to fetch")?t="Could not connect to the server. Please check if the server is running.":t="Failed to get adapter information. Please try again.",console.warn(`[ApiClient] ${t}`),new Error(t)}}getFetchOptions(i={}){const e={};if(typeof window>"u"){const r=this.apiUrl.startsWith("https:")?$:F;r&&(e.agent=r)}else e.headers={Connection:"keep-alive"};const t={"X-Request-ID":Date.now().toString(36)+Math.random().toString(36).substring(2)};if(e.headers&&Object.assign(t,e.headers),i.headers){const r=i.headers;for(const[s,n]of Object.entries(r))(s.toLowerCase()!=="x-api-key"||!this.apiKey)&&(t[s]=n)}return this.apiKey&&(t["X-API-Key"]=this.apiKey),this.sessionId&&(t["X-Session-ID"]=this.sessionId),{...i,...e,headers:t}}createChatRequest(i,e=!0,t,r,s,n,o,d,u,f,v){const l={messages:[{role:"user",content:i}],stream:e};return t&&t.length>0&&(l.file_ids=t),r&&(l.thread_id=r),s&&(l.audio_input=s),n&&(l.audio_format=n),o&&(l.language=o),d!==void 0&&(l.return_audio=d),u&&(l.tts_voice=u),f&&(l.source_language=f),v&&(l.target_language=v),l}async*streamChat(i,e=!0,t,r,s,n,o,d,u,f,v){var l,C,b;try{const y=new AbortController,_=setTimeout(()=>y.abort(),6e4),g=await fetch(`${this.apiUrl}/v1/chat`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json",Accept:e?"text/event-stream":"application/json"},body:JSON.stringify(this.createChatRequest(i,e,t,r,s,n,o,d,u,f,v))}),signal:y.signal});if(clearTimeout(_),!g.ok){const p=await g.text();throw new Error(`Network response was not ok: ${g.status} ${p}`)}if(!e){const p=await g.json();p.response&&(yield{text:p.response,done:!0,audio:p.audio,audioFormat:p.audio_format});return}const A=(l=g.body)==null?void 0:l.getReader();if(!A)throw new Error("No reader available");const S=new TextDecoder;let w="",E=!1;try{for(;;){const{done:p,value:U}=await A.read();if(p)break;const j=S.decode(U,{stream:!0});w+=j;let k=0,P;for(;(P=w.indexOf(`
2
+ `,k))!==-1;){const m=w.slice(k,P).trim();if(k=P+1,m&&m.startsWith("data: ")){const h=m.slice(6).trim();if(!h||h==="[DONE]"){yield{text:"",done:!0};return}try{const a=JSON.parse(h);if(a.error){const x=`Server error: ${((C=a.error)==null?void 0:C.message)||a.error||"Unknown server error"}`;throw console.warn(`[ApiClient] ${x}`),new Error(x)}if(a.done===!0){E=!0,yield{text:"",done:!0,audio:a.audio,audioFormat:a.audio_format||a.audioFormat,threading:a.threading};return}const K=a.response||"";a.audio_chunk!==void 0&&(yield{text:"",done:!1,audio_chunk:a.audio_chunk,audioFormat:a.audioFormat||a.audio_format||"opus",chunk_index:a.chunk_index??0}),(K||a.audio)&&(E=!0,yield{text:K,done:a.done||!1,audio:a.audio,audioFormat:a.audio_format||a.audioFormat,threading:a.threading})}catch(a){if((b=a==null?void 0:a.message)!=null&&b.startsWith("Server error:"))throw a;console.warn("[ApiClient] Unable to parse server response. This may be a temporary issue."),console.warn("[ApiClient] Parse error details:",a==null?void 0:a.message),console.warn("[ApiClient] JSON text length:",h==null?void 0:h.length),console.warn("[ApiClient] JSON text preview (first 200 chars):",h==null?void 0:h.substring(0,200)),console.warn("[ApiClient] JSON text preview (last 200 chars):",h==null?void 0:h.substring(h.length-200))}}else m&&(E=!0,yield{text:m,done:!1})}w=w.slice(k),w.length>1e6&&(console.warn("[ApiClient] Buffer too large, truncating..."),w=w.slice(-5e5))}E&&(yield{text:"",done:!0})}finally{A.releaseLock()}}catch(y){throw y.name==="AbortError"?new Error("Connection timed out. Please check if the server is running."):y.name==="TypeError"&&y.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):y}}async getConversationHistory(i,e){const t=i||this.sessionId;if(!t)throw new Error("No session ID provided and no current session available");const r={};this.apiKey&&(r["X-API-Key"]=this.apiKey);try{const s=new URL(`${this.apiUrl}/admin/chat-history/${t}`);typeof e=="number"&&Number.isFinite(e)&&e>0&&s.searchParams.set("limit",String(Math.floor(e)));const n=await fetch(s.toString(),{...this.getFetchOptions({method:"GET",headers:r})});if(!n.ok){const f=await n.text();throw new Error(`Failed to fetch conversation history: ${n.status} ${f}`)}const o=await n.json(),d=Array.isArray(o==null?void 0:o.messages)?o.messages:[],u=typeof(o==null?void 0:o.count)=="number"?o.count:d.length;return{session_id:(o==null?void 0:o.session_id)||t,messages:d,count:u}}catch(s){throw s.name==="TypeError"&&s.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):s}}async clearConversationHistory(i){const e=i||this.sessionId;if(!e)throw new Error("No session ID provided and no current session available");if(!this.apiKey)throw new Error("API key is required for clearing conversation history");const t={"Content-Type":"application/json","X-Session-ID":e,"X-API-Key":this.apiKey};try{const r=await fetch(`${this.apiUrl}/admin/chat-history/${e}`,{...this.getFetchOptions({method:"DELETE",headers:t})});if(!r.ok){const s=await r.text();throw new Error(`Failed to clear conversation history: ${r.status} ${s}`)}return await r.json()}catch(r){throw r.name==="TypeError"&&r.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):r}}async deleteConversationWithFiles(i,e){const t=i||this.sessionId;if(!t)throw new Error("No session ID provided and no current session available");if(!this.apiKey)throw new Error("API key is required for deleting conversation");const r={"Content-Type":"application/json","X-Session-ID":t,"X-API-Key":this.apiKey},s=e&&e.length>0?`?file_ids=${e.join(",")}`:"",n=`${this.apiUrl}/admin/conversations/${t}${s}`;try{const o=await fetch(n,{...this.getFetchOptions({method:"DELETE",headers:r})});if(!o.ok){const d=await o.text();throw new Error(`Failed to delete conversation: ${o.status} ${d}`)}return await o.json()}catch(o){throw o.name==="TypeError"&&o.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):o}}async createThread(i,e){if(!this.apiKey)throw new Error("API key is required for creating threads");const t={"Content-Type":"application/json","X-API-Key":this.apiKey};try{const r=await fetch(`${this.apiUrl}/api/threads`,{...this.getFetchOptions({method:"POST",headers:t,body:JSON.stringify({message_id:i,session_id:e})})});if(!r.ok){const s=await r.text();throw new Error(`Failed to create thread: ${r.status} ${s}`)}return await r.json()}catch(r){throw r.name==="TypeError"&&r.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):r}}async getThreadInfo(i){if(!this.apiKey)throw new Error("API key is required for getting thread info");const e={"X-API-Key":this.apiKey};try{const t=await fetch(`${this.apiUrl}/api/threads/${i}`,{...this.getFetchOptions({method:"GET",headers:e})});if(!t.ok){const r=await t.text();throw new Error(`Failed to get thread info: ${t.status} ${r}`)}return await t.json()}catch(t){throw t.name==="TypeError"&&t.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):t}}async deleteThread(i){if(!this.apiKey)throw new Error("API key is required for deleting threads");const e={"X-API-Key":this.apiKey};try{const t=await fetch(`${this.apiUrl}/api/threads/${i}`,{...this.getFetchOptions({method:"DELETE",headers:e})});if(!t.ok){const r=await t.text();throw new Error(`Failed to delete thread: ${t.status} ${r}`)}return await t.json()}catch(t){throw t.name==="TypeError"&&t.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):t}}async uploadFile(i){if(!this.apiKey)throw new Error("API key is required for file upload");const e=new FormData;e.append("file",i);try{const t=await fetch(`${this.apiUrl}/api/files/upload`,{...this.getFetchOptions({method:"POST",body:e})});if(!t.ok){const r=await t.text();throw new Error(`Failed to upload file: ${t.status} ${r}`)}return await t.json()}catch(t){throw t.name==="TypeError"&&t.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):t}}async listFiles(){if(!this.apiKey)throw new Error("API key is required for listing files");try{const i=await fetch(`${this.apiUrl}/api/files`,{...this.getFetchOptions({method:"GET"})});if(!i.ok){const e=await i.text();throw new Error(`Failed to list files: ${i.status} ${e}`)}return await i.json()}catch(i){throw i.name==="TypeError"&&i.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):i}}async getFileInfo(i){if(!this.apiKey)throw new Error("API key is required for getting file info");try{const e=await fetch(`${this.apiUrl}/api/files/${i}`,{...this.getFetchOptions({method:"GET"})});if(!e.ok){const t=await e.text();throw new Error(`Failed to get file info: ${e.status} ${t}`)}return await e.json()}catch(e){throw e.name==="TypeError"&&e.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):e}}async queryFile(i,e,t=10){if(!this.apiKey)throw new Error("API key is required for querying files");try{const r=await fetch(`${this.apiUrl}/api/files/${i}/query`,{...this.getFetchOptions({method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({query:e,max_results:t})})});if(!r.ok){const s=await r.text();throw new Error(`Failed to query file: ${r.status} ${s}`)}return await r.json()}catch(r){throw r.name==="TypeError"&&r.message.includes("Failed to fetch")?new Error("Could not connect to the server. Please check if the server is running."):r}}async deleteFile(i){if(!this.apiKey)throw new Error("API key is required for deleting files");const e=`${this.apiUrl}/api/files/${i}`,t=this.getFetchOptions({method:"DELETE"});try{const r=await fetch(e,t);if(!r.ok){const s=await r.text();let n;try{const o=JSON.parse(s);n=o.detail||o.message||`Failed to delete file (HTTP ${r.status})`}catch{n=`Failed to delete file (HTTP ${r.status})`}throw console.warn(`[ApiClient] ${n}`),new Error(n)}return await r.json()}catch(r){let s;throw r.name==="TypeError"&&r.message.includes("Failed to fetch")?s="Could not connect to the server. Please check if the server is running.":r.message&&!r.message.includes("Failed to delete file")?s=r.message:s="Failed to delete file. Please try again.",console.warn(`[ApiClient] ${s}`),new Error(s)}}}let T=null;const X=(c,i=null,e=null)=>{T=new N({apiUrl:c,apiKey:i,sessionId:e})};async function*H(c,i=!0,e,t,r,s,n,o,d,u,f){if(!T)throw new Error("API not configured. Please call configureApi() with your server URL before using any API functions.");yield*T.streamChat(c,i,e,t,r,s,n,o,d,u,f)}export{N as ApiClient,X as configureApi,H as streamChat};
@@ -1 +1 @@
1
- import{b0 as sn,b1 as an,b2 as l,as as on,b3 as L,b4 as q,b5 as E,b6 as un,aq as D,b7 as cn,b8 as z,b9 as e,ba as rn,bb as en,bc as yn}from"./index-BDZZVQv5.js";function fn(i){return i.innerRadius}function ln(i){return i.outerRadius}function gn(i){return i.startAngle}function pn(i){return i.endAngle}function xn(i){return i&&i.padAngle}function mn(i,d,W,B,v,b,G,a){var C=W-i,r=B-d,n=G-v,p=a-b,u=p*C-n*r;if(!(u*u<l))return u=(n*(d-b)-p*(i-v))/u,[i+u*C,d+u*r]}function U(i,d,W,B,v,b,G){var a=i-W,C=d-B,r=(G?b:-b)/z(a*a+C*C),n=r*C,p=-r*a,u=i+n,s=d+p,y=W+n,f=B+p,H=(u+y)/2,o=(s+f)/2,x=y-u,g=f-s,T=x*x+g*g,A=v-b,O=u*f-y*s,J=(g<0?-1:1)*z(en(0,A*A*T-O*O)),P=(O*g-x*J)/T,_=(-O*x-g*J)/T,R=(O*g+x*J)/T,m=(-O*x+g*J)/T,h=P-H,t=_-o,c=R-H,I=m-o;return h*h+t*t>c*c+I*I&&(P=R,_=m),{cx:P,cy:_,x01:-n,y01:-p,x11:P*(v/A-1),y11:_*(v/A-1)}}function dn(){var i=fn,d=ln,W=D(0),B=null,v=gn,b=pn,G=xn,a=null,C=sn(r);function r(){var n,p,u=+i.apply(this,arguments),s=+d.apply(this,arguments),y=v.apply(this,arguments)-an,f=b.apply(this,arguments)-an,H=un(f-y),o=f>y;if(a||(a=n=C()),s<u&&(p=s,s=u,u=p),!(s>l))a.moveTo(0,0);else if(H>on-l)a.moveTo(s*L(y),s*q(y)),a.arc(0,0,s,y,f,!o),u>l&&(a.moveTo(u*L(f),u*q(f)),a.arc(0,0,u,f,y,o));else{var x=y,g=f,T=y,A=f,O=H,J=H,P=G.apply(this,arguments)/2,_=P>l&&(B?+B.apply(this,arguments):z(u*u+s*s)),R=E(un(s-u)/2,+W.apply(this,arguments)),m=R,h=R,t,c;if(_>l){var I=rn(_/u*q(P)),S=rn(_/s*q(P));(O-=I*2)>l?(I*=o?1:-1,T+=I,A-=I):(O=0,T=A=(y+f)/2),(J-=S*2)>l?(S*=o?1:-1,x+=S,g-=S):(J=0,x=g=(y+f)/2)}var $=s*L(x),j=s*q(x),X=u*L(A),Z=u*q(A);if(R>l){var k=s*L(g),N=s*q(g),V=u*L(T),Y=u*q(T),F;if(H<cn)if(F=mn($,j,V,Y,k,N,X,Z)){var K=$-F[0],M=j-F[1],Q=k-F[0],w=N-F[1],nn=1/q(yn((K*Q+M*w)/(z(K*K+M*M)*z(Q*Q+w*w)))/2),tn=z(F[0]*F[0]+F[1]*F[1]);m=E(R,(u-tn)/(nn-1)),h=E(R,(s-tn)/(nn+1))}else m=h=0}J>l?h>l?(t=U(V,Y,$,j,s,h,o),c=U(k,N,X,Z,s,h,o),a.moveTo(t.cx+t.x01,t.cy+t.y01),h<R?a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,s,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),!o),a.arc(c.cx,c.cy,h,e(c.y11,c.x11),e(c.y01,c.x01),!o))):(a.moveTo($,j),a.arc(0,0,s,x,g,!o)):a.moveTo($,j),!(u>l)||!(O>l)?a.lineTo(X,Z):m>l?(t=U(X,Z,k,N,u,-m,o),c=U($,j,V,Y,u,-m,o),a.lineTo(t.cx+t.x01,t.cy+t.y01),m<R?a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,u,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),o),a.arc(c.cx,c.cy,m,e(c.y11,c.x11),e(c.y01,c.x01),!o))):a.arc(0,0,u,A,T,o)}if(a.closePath(),n)return a=null,n+""||null}return r.centroid=function(){var n=(+i.apply(this,arguments)+ +d.apply(this,arguments))/2,p=(+v.apply(this,arguments)+ +b.apply(this,arguments))/2-cn/2;return[L(p)*n,q(p)*n]},r.innerRadius=function(n){return arguments.length?(i=typeof n=="function"?n:D(+n),r):i},r.outerRadius=function(n){return arguments.length?(d=typeof n=="function"?n:D(+n),r):d},r.cornerRadius=function(n){return arguments.length?(W=typeof n=="function"?n:D(+n),r):W},r.padRadius=function(n){return arguments.length?(B=n==null?null:typeof n=="function"?n:D(+n),r):B},r.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:D(+n),r):v},r.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:D(+n),r):b},r.padAngle=function(n){return arguments.length?(G=typeof n=="function"?n:D(+n),r):G},r.context=function(n){return arguments.length?(a=n??null,r):a},r}export{dn as h};
1
+ import{b0 as sn,b1 as an,b2 as l,as as on,b3 as L,b4 as q,b5 as E,b6 as un,aq as D,b7 as cn,b8 as z,b9 as e,ba as rn,bb as en,bc as yn}from"./index-Cat4tDb5.js";function fn(i){return i.innerRadius}function ln(i){return i.outerRadius}function gn(i){return i.startAngle}function pn(i){return i.endAngle}function xn(i){return i&&i.padAngle}function mn(i,d,W,B,v,b,G,a){var C=W-i,r=B-d,n=G-v,p=a-b,u=p*C-n*r;if(!(u*u<l))return u=(n*(d-b)-p*(i-v))/u,[i+u*C,d+u*r]}function U(i,d,W,B,v,b,G){var a=i-W,C=d-B,r=(G?b:-b)/z(a*a+C*C),n=r*C,p=-r*a,u=i+n,s=d+p,y=W+n,f=B+p,H=(u+y)/2,o=(s+f)/2,x=y-u,g=f-s,T=x*x+g*g,A=v-b,O=u*f-y*s,J=(g<0?-1:1)*z(en(0,A*A*T-O*O)),P=(O*g-x*J)/T,_=(-O*x-g*J)/T,R=(O*g+x*J)/T,m=(-O*x+g*J)/T,h=P-H,t=_-o,c=R-H,I=m-o;return h*h+t*t>c*c+I*I&&(P=R,_=m),{cx:P,cy:_,x01:-n,y01:-p,x11:P*(v/A-1),y11:_*(v/A-1)}}function dn(){var i=fn,d=ln,W=D(0),B=null,v=gn,b=pn,G=xn,a=null,C=sn(r);function r(){var n,p,u=+i.apply(this,arguments),s=+d.apply(this,arguments),y=v.apply(this,arguments)-an,f=b.apply(this,arguments)-an,H=un(f-y),o=f>y;if(a||(a=n=C()),s<u&&(p=s,s=u,u=p),!(s>l))a.moveTo(0,0);else if(H>on-l)a.moveTo(s*L(y),s*q(y)),a.arc(0,0,s,y,f,!o),u>l&&(a.moveTo(u*L(f),u*q(f)),a.arc(0,0,u,f,y,o));else{var x=y,g=f,T=y,A=f,O=H,J=H,P=G.apply(this,arguments)/2,_=P>l&&(B?+B.apply(this,arguments):z(u*u+s*s)),R=E(un(s-u)/2,+W.apply(this,arguments)),m=R,h=R,t,c;if(_>l){var I=rn(_/u*q(P)),S=rn(_/s*q(P));(O-=I*2)>l?(I*=o?1:-1,T+=I,A-=I):(O=0,T=A=(y+f)/2),(J-=S*2)>l?(S*=o?1:-1,x+=S,g-=S):(J=0,x=g=(y+f)/2)}var $=s*L(x),j=s*q(x),X=u*L(A),Z=u*q(A);if(R>l){var k=s*L(g),N=s*q(g),V=u*L(T),Y=u*q(T),F;if(H<cn)if(F=mn($,j,V,Y,k,N,X,Z)){var K=$-F[0],M=j-F[1],Q=k-F[0],w=N-F[1],nn=1/q(yn((K*Q+M*w)/(z(K*K+M*M)*z(Q*Q+w*w)))/2),tn=z(F[0]*F[0]+F[1]*F[1]);m=E(R,(u-tn)/(nn-1)),h=E(R,(s-tn)/(nn+1))}else m=h=0}J>l?h>l?(t=U(V,Y,$,j,s,h,o),c=U(k,N,X,Z,s,h,o),a.moveTo(t.cx+t.x01,t.cy+t.y01),h<R?a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,h,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,s,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),!o),a.arc(c.cx,c.cy,h,e(c.y11,c.x11),e(c.y01,c.x01),!o))):(a.moveTo($,j),a.arc(0,0,s,x,g,!o)):a.moveTo($,j),!(u>l)||!(O>l)?a.lineTo(X,Z):m>l?(t=U(X,Z,k,N,u,-m,o),c=U($,j,V,Y,u,-m,o),a.lineTo(t.cx+t.x01,t.cy+t.y01),m<R?a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(c.y01,c.x01),!o):(a.arc(t.cx,t.cy,m,e(t.y01,t.x01),e(t.y11,t.x11),!o),a.arc(0,0,u,e(t.cy+t.y11,t.cx+t.x11),e(c.cy+c.y11,c.cx+c.x11),o),a.arc(c.cx,c.cy,m,e(c.y11,c.x11),e(c.y01,c.x01),!o))):a.arc(0,0,u,A,T,o)}if(a.closePath(),n)return a=null,n+""||null}return r.centroid=function(){var n=(+i.apply(this,arguments)+ +d.apply(this,arguments))/2,p=(+v.apply(this,arguments)+ +b.apply(this,arguments))/2-cn/2;return[L(p)*n,q(p)*n]},r.innerRadius=function(n){return arguments.length?(i=typeof n=="function"?n:D(+n),r):i},r.outerRadius=function(n){return arguments.length?(d=typeof n=="function"?n:D(+n),r):d},r.cornerRadius=function(n){return arguments.length?(W=typeof n=="function"?n:D(+n),r):W},r.padRadius=function(n){return arguments.length?(B=n==null?null:typeof n=="function"?n:D(+n),r):B},r.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:D(+n),r):v},r.endAngle=function(n){return arguments.length?(b=typeof n=="function"?n:D(+n),r):b},r.padAngle=function(n){return arguments.length?(G=typeof n=="function"?n:D(+n),r):G},r.context=function(n){return arguments.length?(a=n??null,r):a},r}export{dn as h};