dsh-voice-mode 0.7.21 → 0.7.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # dsh-voice-mode
2
2
 
3
- [![License: MIT](https://img.shields.io/github/license/qishuilalala/dsh-voice-mode?style=flat-square&color=blue)](../../LICENSE)
3
+ [![License: MIT](https://img.shields.io/github/license/qishuilalala/dsh-voice-mode?style=flat-square&color=blue)](./LICENSE)
4
4
  [![Latest Release](https://img.shields.io/github/v/release/qishuilalala/dsh-voice-mode?style=flat-square&color=brightgreen&include_prereleases)](https://github.com/qishuilalala/dsh-voice-mode/releases)
5
5
  [![npm version](https://img.shields.io/npm/v/dsh-voice-mode?style=flat-square&color=orange)](https://www.npmjs.com/package/dsh-voice-mode)
6
- [![Tests: 431 passing](https://img.shields.io/badge/tests-431%20%E2%9C%93-2ea043?style=flat-square)](../../docs/rules/STATE.md)
6
+ [![Tests: 433 passing](https://img.shields.io/badge/tests-433%20%E2%9C%93-2ea043?style=flat-square)](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/rules/STATE.md)
7
7
 
8
8
  Full-duplex voice conversation mode for DeepSeek Harness (dsh): speak, get a
9
9
  spoken answer. Streamed zipformer2 ASR → editable draft → auto send → the
@@ -316,6 +316,12 @@ An honest disclosure of what the plugin does (mapped to the awesome-dsh-plugin c
316
316
 
317
317
  Also: the on-device recording fixture used for debugging is **off by default**; the plugin sends no telemetry. See [`SECURITY.md`](https://github.com/qishuilalala/dsh-voice-mode/blob/main/SECURITY.md) for the threat model and how to report vulnerabilities.
318
318
 
319
+ ### Third-party models and services
320
+
321
+ - **Local models are not shipped in the package**: the ASR (streaming zipformer, SenseVoice re-transcription), VAD and local TTS (VITS / Kokoro) models are **downloaded on first use from Hugging Face (or your configured mirror)** into a local cache; they come from export repositories in the [sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx) ecosystem (`csukuangfj/*`). Each model is licensed by its **original authors** — this plugin's MIT license does **not** cover them; verify the upstream licenses before commercial use (the model list is under "Model & cache"; the constants are in `src/asr-host.ts` / `src/tts-local.ts`).
322
+ - **The Edge cloud read-aloud is a third-party online service**: the default engine uses the Microsoft Edge browser "Read Aloud" endpoint via [`msedge-tts`](https://github.com/Migushthe2nd/MsEdgeTTS). It is not an officially supported Microsoft API — **availability, rate limits and terms are Microsoft's** and may change at any time. For stability/compliance-sensitive use, switch to local VITS / Kokoro (offline).
323
+ - Licenses of the third-party code inlined into the published package (`msedge-tts` and its dependencies) are in [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md); `pnpm audit` is clean at release time (CI `audit` job keeps watching).
324
+
319
325
  ### Compatibility declaration (what the plugin market's version filter reads)
320
326
 
321
327
  `package.json` declares `engines.dsh = ">=0.1.1-rc.2"` (the market uses it for "filter by host version"). Verified range: **0.1.1-rc.2 → 0.2.1-alpha.1** (including an Electron host equivalent to the official desktop app). The upper bound is open; a weekly CI check watches upstream releases and opens an issue for any uncovered version. `peerDependencies` only lists `@deepseek-ai/cordis` and `react` (provided by the host).
@@ -340,6 +346,7 @@ Also: the on-device recording fixture used for debugging is **off by default**;
340
346
  | Mic click does nothing, red hint in the status bar | The browser denied mic permission: allow it in the address bar and retry |
341
347
  | Status bar stuck on `Loading model… x%` | Check the network; the model is large (160 MB) — `npm run prefetch` first; on mainland networks set `modelHost` to `https://hf-mirror.com` |
342
348
  | Status bar shows `Model download failed (<file>)` | Both mirrors are unreachable: check network/proxy and re-enter voice mode (resumable) |
349
+ | Local Kokoro on the official desktop app shows "failed" and asks for Node.js | The desktop host is Electron, where Kokoro's native add-on cannot run: install Node.js >= 18 on PATH (or set `DSHVM_NODE` to its path) and retry, or use the default Edge / local VITS (unaffected on desktop) |
343
350
  | Caption appears (overlay) but no sound | Check system volume/output; if autoplay is blocked, click anywhere on the page and retry |
344
351
  | Status bar shows `朗读连接失败:正在重试…` | Edge TTS unreachable (overseas service), auto-retries; if it persists, check network/proxy |
345
352
  | Poor recognition | Get closer to the mic, reduce ambient noise; if echo remains, raise the interrupt sensitivity by one step |
@@ -354,7 +361,7 @@ Also: the on-device recording fixture used for debugging is **off by default**;
354
361
 
355
362
  ## 🛣️ Roadmap
356
363
 
357
- Full backlog (43 P0-P3 items) at [`docs/competitive/backlog.md`](../../docs/competitive/backlog.md).
364
+ Full backlog (43 P0-P3 items) at [`docs/competitive/backlog.md`](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/competitive/backlog.md).
358
365
 
359
366
  - ✅ **Done (v0.7.7)**: 11 batches of comprehensive fixes (caption tiers / yield semantics / model prewarm / defaults micro-adjust / dead-code cleanup / etc.)
360
367
  - 🚧 **P0 (near-term)**: ADR-0003 client-side VAD / ADR-0006 first-level probe wired to manual / F1 emotion DSL full roll-out
@@ -425,4 +432,4 @@ Integration probes (`hold-e2e.js`, `spoken-prompt-rpc.sh`, `spoken-toggle-ui-che
425
432
 
426
433
  ## 📄 License
427
434
 
428
- [MIT](../../LICENSE)
435
+ [MIT](./LICENSE)
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![License: MIT](https://img.shields.io/github/license/qishuilalala/dsh-voice-mode?style=flat-square&color=blue)](LICENSE)
4
4
  [![Latest Release](https://img.shields.io/github/v/release/qishuilalala/dsh-voice-mode?style=flat-square&color=brightgreen&include_prereleases)](https://github.com/qishuilalala/dsh-voice-mode/releases)
5
5
  [![npm version](https://img.shields.io/npm/v/dsh-voice-mode?style=flat-square&color=orange)](https://www.npmjs.com/package/dsh-voice-mode)
6
- [![Tests: 431 passing](https://img.shields.io/badge/tests-431%20%E2%9C%93-2ea043?style=flat-square)](../../docs/rules/STATE.md)
6
+ [![Tests: 433 passing](https://img.shields.io/badge/tests-433%20%E2%9C%93-2ea043?style=flat-square)](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/rules/STATE.md)
7
7
 
8
8
  DeepSeek Harness 语音双工对话模式:会话内一键进入 → 边说边出字的流式识别 → 停顿自动发送 → 最终答复按句流式朗读 + 实时字幕,开口即可打断(真 barge-in)。无需 API Key,识别模型在本地宿主端推理。
9
9
 
@@ -23,7 +23,7 @@ DeepSeek Harness 语音双工对话模式:会话内一键进入 → 边说边
23
23
 
24
24
  ## 🤝 Fork 增强(本仓库新增)
25
25
 
26
- 本仓库在上游 [haoku123/dsh-voice](https://github.com/haoku123/dsh-voice) 基础上加入了大量增强,核心如下(完整清单见 git 历史与 [docs/rules/STATE.md](../../docs/rules/STATE.md)):
26
+ 本仓库在上游 [haoku123/dsh-voice](https://github.com/haoku123/dsh-voice) 基础上加入了大量增强,核心如下(完整清单见 git 历史与 [docs/rules/STATE.md](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/rules/STATE.md)):
27
27
 
28
28
  - **朗读默认 Edge 云端;本地 TTS 可选(隐私优先)**:选本地则回复文本不出本机——
29
29
  - 本地 VITS(`sherpa-onnx-vits-zh-ll`,纯中文,5 说话人);
@@ -243,7 +243,7 @@ flowchart LR
243
243
  - 朗读默认 **Edge 云端**;本地 VITS 纯中文 / Kokoro 原生中英(跑在独立子进程、崩溃自愈)可选(隐私优先);
244
244
  - 同一时间仅一个会话处于语音模式(全局单活);LLM 流被无损观察(不阻塞)。
245
245
 
246
- 详细架构决策:见 [`docs/adr/`](../../docs/adr/README.md) 8 个 ADR。
246
+ 详细架构决策:见 [`docs/adr/`](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/adr/README.md) 8 个 ADR。
247
247
 
248
248
  ---
249
249
 
@@ -275,6 +275,12 @@ flowchart LR
275
275
 
276
276
  补充:调试用的真机录制(fixture)默认**关闭**;插件不上传遥测。完整威胁模型与漏洞报告方式见仓库根目录 [`SECURITY.md`](https://github.com/qishuilalala/dsh-voice-mode/blob/main/SECURITY.md)。
277
277
 
278
+ ### 第三方模型与服务说明
279
+
280
+ - **本地模型不随包分发**:ASR(zipformer 流式、SenseVoice 重译)、VAD、本地 TTS(VITS / Kokoro)的模型由插件**首次使用时从 Hugging Face(或你配置的镜像)下载**到本机缓存,来源为 [sherpa-onnx](https://github.com/k2-fsa/sherpa-onnx) 生态的导出仓库(`csukuangfj/*`)。各模型的许可由其**原作者**决定,本插件的 MIT 许可**不覆盖**这些模型;用于商业场景前请自行核对上游许可(模型清单见下文「模型与缓存」,对应常量在 `src/asr-host.ts` / `src/tts-local.ts`)。
281
+ - **Edge 云端朗读是第三方在线服务**:默认引擎经 [`msedge-tts`](https://github.com/Migushthe2nd/MsEdgeTTS) 使用微软 Edge 浏览器「大声朗读」的在线接口——这不是微软官方提供的稳定 API,**可用性、速率与条款均由微软决定**,可能随时变化。对稳定性/合规有要求的场景请改用本地 VITS / Kokoro(离线)。
282
+ - 被内联进发布包的第三方代码(`msedge-tts` 及其依赖)的许可见 [`THIRD_PARTY_NOTICES.md`](./THIRD_PARTY_NOTICES.md);已用 `pnpm audit` 保证发布时无已知高危漏洞(CI `audit` job 持续监测)。
283
+
278
284
  ### 兼容声明(插件市场的版本筛选依据)
279
285
 
280
286
  `package.json` 声明 `engines.dsh = ">=0.1.1-rc.2"`(插件市场据此在「按宿主版本筛选」时判定兼容)。已实测范围 **0.1.1-rc.2 → 0.2.1-alpha.1**(含官方桌面端等价的 Electron 宿主);上限开放,由每周 CI 巡检上游新版本并复验,出现未覆盖版本会自动开 issue。`peerDependencies` 仅声明 `@deepseek-ai/cordis` 与 `react`(宿主提供)。
@@ -313,6 +319,7 @@ flowchart LR
313
319
  | 唤醒词完全没反应 | ① 确认交互模式是 `toggle`(`hold` 与手动打断下唤醒词不生效);② 确认 `bargeInMode`:`manual`(或 `detect` 在本机无原生回声消除时自动落 manual)会关闭常驻聆听 → 唤醒词失效,改回 `auto` 或按住麦克风/Ctrl;③ 朗读期说唤醒词不触发(先等 AI 说完);④ 看待机态实时转写,确认它听到了什么(同音字 1 字内已容错,建议 3-4 字词) |
314
320
  | 按住说话松手后没反应 | 确认交互模式为「按住说」且按住期间按钮高亮;松手后识别定稿约 1 秒内进入草稿 |
315
321
  | 打不断(朗读中开口无反应) | 调高 `interruptLevel`(更敏感档 = 0 或 1)或检查麦克风权限;若 VAD 持续不触发可临时切到「手动打断」(`mode: hold` / 唤醒词定时延后);**不要**调 `echoGateDb`——真机 3.1 分钟朗读期里 Silero 0/777 帧把回声判成语音,原生 AEC 生效时此阈值从未被执行(详见 ADR-0006) |
322
+ | 官方桌面端上选本地 Kokoro,设置里显示「加载失败」并提示需要 Node.js | 桌面端宿主是 Electron,Kokoro 的原生 addon 在其中不可用:在系统 PATH 上安装 Node.js ≥18(或设环境变量 `DSHVM_NODE` 指向它)后重试;或改用默认的 Edge / 本地 VITS(桌面端不受影响) |
316
323
  | 字幕被输入框挡住 | 默认 `captionMaxWidth=1`(70vw)+ `captionFontSize=0`(12px)在窄屏可能与底部输入框重叠;调高档位或点字幕浮层「×」收起 |
317
324
  | 让位行为异常(朗读期说「嗯」不停 / 真话被打断) | 「嗯/对」类短词触发让位 1.5s 后继续朗读;继续说真话会走硬打断;不要时关 `backchannelYield` 即可恢复改造前行为(ADR-0008) |
318
325
  | 朗读期说「嗯」没让位 | 确认 `backchannelYield=true`(默认开);hold 模式松手后让位 1.5s 内继续说话会变硬打断 |
@@ -322,7 +329,7 @@ flowchart LR
322
329
 
323
330
  ## 🛣️ 路线图(Roadmap)
324
331
 
325
- 完整 backlog(43 项 P0-P3)见 [`docs/competitive/backlog.md`](../../docs/competitive/backlog.md)。
332
+ 完整 backlog(43 项 P0-P3)见 [`docs/competitive/backlog.md`](https://github.com/qishuilalala/dsh-voice-mode/blob/main/docs/competitive/backlog.md)。
326
333
 
327
334
  - ✅ **已完成(v0.7.7)**:11 批次周全修复(字幕档位 / 让位语义 / 模型预热 / 默认值微调 / 死代码清理等)
328
335
  - 🚧 **P0(近期)**:ADR-0003 VAD 下沉 / ADR-0006 第一级探测接通 manual / F1 emotion DSL 全量上线
@@ -364,6 +371,6 @@ src/prompts.ts host:LLM 口语化提示词(中/英)与试听例句
364
371
 
365
372
  ## 📄 License
366
373
 
367
- [MIT](../../LICENSE)
374
+ [MIT](./LICENSE)
368
375
 
369
376
  > 部分实现借鉴 [haoku123/dsh-voice](https://github.com/haoku123/dsh-voice)(派生声明见子包 LICENSE)。
@@ -7,7 +7,7 @@ comment in `build.mjs` for why). Their licenses are reproduced below. Generated
7
7
  | --- | --- | --- |
8
8
  | agent-base | 6.0.0 | MIT |
9
9
  | asynckit | 0.4.0 | MIT |
10
- | axios | 1.19.0 | MIT |
10
+ | axios | 1.20.0 | MIT |
11
11
  | base64-js | 1.5.1 | MIT |
12
12
  | buffer | 6.0.3 | MIT |
13
13
  | call-bind-apply-helpers | 1.0.2 | MIT |
@@ -76,7 +76,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
76
76
  SOFTWARE.
77
77
  ```
78
78
 
79
- ## axios 1.19.0
79
+ ## axios 1.20.0
80
80
 
81
81
  - License: MIT
82
82
  - Source: https://github.com/axios/axios.git
package/lib/client.js CHANGED
@@ -1534,6 +1534,7 @@ var zh = {
1534
1534
  engineLoading: "\u52A0\u8F7D\u4E2D\u2026",
1535
1535
  engineReady: "\u5C31\u7EEA",
1536
1536
  engineError: "\u52A0\u8F7D\u5931\u8D25",
1537
+ errKokoroNeedsNode: "\u672C\u5730 Kokoro \u65E0\u6CD5\u5728\u5B98\u65B9\u684C\u9762\u7AEF\uFF08Electron\uFF09\u5185\u76F4\u63A5\u8FD0\u884C\uFF1A\u8BF7\u5728\u7CFB\u7EDF PATH \u4E0A\u5B89\u88C5 Node.js \u226518\uFF08\u6216\u8BBE\u73AF\u5883\u53D8\u91CF DSHVM_NODE \u6307\u5411\u5B83\uFF09\uFF0C\u6216\u628A\u6717\u8BFB\u5F15\u64CE\u5207\u6362\u4E3A Edge / \u672C\u5730 VITS\u3002",
1537
1538
  ttsModelsMissing: "\u672C\u5730\u6A21\u578B\u672A\u5C31\u7EEA",
1538
1539
  ttsDownload: "\u4E0B\u8F7D",
1539
1540
  ttsDelete: "\u5220\u9664",
@@ -1763,6 +1764,7 @@ var en = {
1763
1764
  engineLoading: "loading\u2026",
1764
1765
  engineReady: "ready",
1765
1766
  engineError: "failed",
1767
+ errKokoroNeedsNode: "Local Kokoro cannot run directly inside the official desktop app (Electron): install Node.js >= 18 on PATH (or set DSHVM_NODE to its path), or switch the read-aloud engine to Edge / local VITS.",
1766
1768
  ttsModelsMissing: "local models missing",
1767
1769
  ttsDownload: "Download",
1768
1770
  ttsDelete: "Delete",
@@ -2749,7 +2751,7 @@ function EngineStatusInline() {
2749
2751
  children: acting ? acting === "clean" ? t("ttsDeleting") : t("ttsDownloading") : action === "clean" ? t("ttsDelete") : t("ttsDownload")
2750
2752
  }
2751
2753
  ),
2752
- tts.error && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { fontSize: 11, color: "var(--dsw-alias-state-error-primary)", flexBasis: "100%" }, children: tts.error })
2754
+ tts.error && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { fontSize: 11, color: "var(--dsw-alias-state-error-primary)", flexBasis: "100%" }, children: tts.errorCode === "kokoro_needs_node" ? t("errKokoroNeedsNode") : tts.error })
2753
2755
  ] });
2754
2756
  }
2755
2757
  function ModelStatusView() {
@@ -3099,7 +3101,7 @@ var TELEMETRY_VIEW = [
3099
3101
  { stage: "first-tts-chunk", key: "telFirstChunk" },
3100
3102
  { stage: "first-audio-played", key: "telFirstPlayed" }
3101
3103
  ];
3102
- var BUILD_TAG = "b51f379";
3104
+ var BUILD_TAG = "2b278a6";
3103
3105
  var TELEMETRY_FLAG = "dsh-voice-mode.telemetry";
3104
3106
  var telemetryEnabled = typeof localStorage !== "undefined" && localStorage.getItem(TELEMETRY_FLAG) === "1";
3105
3107
  console.log("[dsh-voice] build=" + BUILD_TAG);
package/lib/index.js CHANGED
@@ -1313,6 +1313,13 @@ var probeNode = (command, env) => {
1313
1313
  }
1314
1314
  };
1315
1315
  var NATIVE_RUNTIME_UNAVAILABLE = 'Local Kokoro cannot run inside the Electron-based desktop host (native add-on blocked: "External buffers are not allowed"). Install Node.js >= 18 on PATH (or set DSHVM_NODE to its path), or switch the read-aloud engine to Edge or VITS.';
1316
+ var NativeRuntimeUnavailableError = class extends Error {
1317
+ code = "kokoro_needs_node";
1318
+ constructor() {
1319
+ super(NATIVE_RUNTIME_UNAVAILABLE);
1320
+ this.name = "NativeRuntimeUnavailableError";
1321
+ }
1322
+ };
1316
1323
  var cached;
1317
1324
  function resolveNativeRuntime(opts = {}) {
1318
1325
  const env = opts.env ?? process.env;
@@ -1660,6 +1667,7 @@ function createSherpaLocalEngine(options) {
1660
1667
  let ready = null;
1661
1668
  let engineLoading = false;
1662
1669
  let engineError;
1670
+ let engineErrorCode;
1663
1671
  let nextId = 1;
1664
1672
  const pending = /* @__PURE__ */ new Map();
1665
1673
  const call = (msg) => new Promise((resolve, reject) => {
@@ -1681,6 +1689,7 @@ function createSherpaLocalEngine(options) {
1681
1689
  ready = (async () => {
1682
1690
  engineLoading = true;
1683
1691
  engineError = void 0;
1692
+ engineErrorCode = void 0;
1684
1693
  downloadProgress = null;
1685
1694
  try {
1686
1695
  if (!child || !childInit) {
@@ -1708,7 +1717,7 @@ function createSherpaLocalEngine(options) {
1708
1717
  }
1709
1718
  if (!child) {
1710
1719
  const runtime = options.kind === "kokoro" ? resolveNativeRuntime() : { env: process.env };
1711
- if (!runtime) throw new Error(NATIVE_RUNTIME_UNAVAILABLE);
1720
+ if (!runtime) throw new NativeRuntimeUnavailableError();
1712
1721
  child = fork(workerPath, [], {
1713
1722
  stdio: ["ignore", "ignore", "pipe", "ipc"],
1714
1723
  ...runtime.execPath ? { execPath: runtime.execPath, env: runtime.env } : {}
@@ -1754,6 +1763,7 @@ function createSherpaLocalEngine(options) {
1754
1763
  broadcast("tts-ready", { engine: options.kind, worker: true });
1755
1764
  } catch (e) {
1756
1765
  engineError = e instanceof Error ? e.message : String(e);
1766
+ engineErrorCode = e instanceof NativeRuntimeUnavailableError ? e.code : void 0;
1757
1767
  throw e;
1758
1768
  } finally {
1759
1769
  engineLoading = false;
@@ -1790,6 +1800,7 @@ function createSherpaLocalEngine(options) {
1790
1800
  ready: childInit === true,
1791
1801
  loading: engineLoading,
1792
1802
  error: engineError,
1803
+ errorCode: engineErrorCode,
1793
1804
  progress: downloadProgress ?? void 0,
1794
1805
  local: {
1795
1806
  repo: repoName,
@@ -2064,6 +2075,7 @@ var en = {
2064
2075
  engineLoading: "loading\u2026",
2065
2076
  engineReady: "ready",
2066
2077
  engineError: "failed",
2078
+ errKokoroNeedsNode: "Local Kokoro cannot run directly inside the official desktop app (Electron): install Node.js >= 18 on PATH (or set DSHVM_NODE to its path), or switch the read-aloud engine to Edge / local VITS.",
2067
2079
  ttsModelsMissing: "local models missing",
2068
2080
  ttsDownload: "Download",
2069
2081
  ttsDelete: "Delete",
@@ -2284,7 +2296,7 @@ var name = "voice-mode";
2284
2296
  var NS_VOICE_MODE = "voice-mode";
2285
2297
  var BASE_PATH = "/voice-mode";
2286
2298
  var PREVIEW_NETWORK_PATTERN = /fetch failed|ECONN|ENOTFOUND|getaddrinfo|ETIMEDOUT|EAI_AGAIN|network|unreachable|socket hang up|aborted/i;
2287
- var PREVIEW_ENGINE_PATTERN = /model download|model verify|init failed|child exited|tts child|local TTS|prepare|sherpa/i;
2299
+ var PREVIEW_ENGINE_PATTERN = /model download|model verify|init failed|child exited|tts child|local TTS|prepare|sherpa|local Kokoro/i;
2288
2300
  var PREVIEW_TEXT_PATTERN = /empty or invalid audio|invalid audio|invalid text|too long|truncat/i;
2289
2301
  function classifyPreviewError(msg) {
2290
2302
  if (PREVIEW_TEXT_PATTERN.test(msg)) return "text";
@@ -11936,9 +11936,9 @@ var require_follow_redirects = __commonJS({
11936
11936
  }
11937
11937
  });
11938
11938
 
11939
- // node_modules/.pnpm/axios@1.19.0_debug@4.4.3/node_modules/axios/dist/node/axios.cjs
11939
+ // node_modules/.pnpm/axios@1.20.0_debug@4.4.3/node_modules/axios/dist/node/axios.cjs
11940
11940
  var require_axios = __commonJS({
11941
- "node_modules/.pnpm/axios@1.19.0_debug@4.4.3/node_modules/axios/dist/node/axios.cjs"(exports2, module2) {
11941
+ "node_modules/.pnpm/axios@1.20.0_debug@4.4.3/node_modules/axios/dist/node/axios.cjs"(exports2, module2) {
11942
11942
  "use strict";
11943
11943
  var FormData$1 = require_form_data();
11944
11944
  var crypto2 = require("node:crypto");
@@ -11971,22 +11971,82 @@ var require_axios = __commonJS({
11971
11971
  var hasOwnProperty = (({
11972
11972
  hasOwnProperty: hasOwnProperty2
11973
11973
  }) => (obj, prop) => hasOwnProperty2.call(obj, prop))(Object.prototype);
11974
+ var isUnsafeObjectKey = (prop) => typeof prop === "string" && (prop === "__proto__" || prop === "constructor" || prop === "prototype");
11975
+ var isPrototypeBoundary = (obj, prototype2, source) => obj === Object.prototype || !source && prototype2 === null;
11976
+ var isSafeAndFullyMutable = (obj) => {
11977
+ if (!Object.isExtensible(obj)) {
11978
+ return false;
11979
+ }
11980
+ const props = Object.getOwnPropertyNames(obj);
11981
+ if (Object.getOwnPropertySymbols) {
11982
+ props.push(...Object.getOwnPropertySymbols(obj));
11983
+ }
11984
+ return props.every((prop) => {
11985
+ if (isUnsafeObjectKey(prop)) {
11986
+ return false;
11987
+ }
11988
+ const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
11989
+ return !!descriptor && descriptor.configurable && descriptor.writable === true;
11990
+ });
11991
+ };
11974
11992
  var hasOwnInPrototypeChain = (thing, prop) => {
11975
11993
  let obj = thing;
11976
11994
  const seen = [];
11977
- while (obj != null && obj !== Object.prototype) {
11995
+ while (obj != null) {
11978
11996
  if (seen.indexOf(obj) !== -1) {
11979
11997
  return false;
11980
11998
  }
11981
11999
  seen.push(obj);
12000
+ const prototype2 = getPrototypeOf(obj);
12001
+ if (isPrototypeBoundary(obj, prototype2, obj === thing)) {
12002
+ return false;
12003
+ }
11982
12004
  if (hasOwnProperty(obj, prop)) {
11983
12005
  return true;
11984
12006
  }
11985
- obj = getPrototypeOf(obj);
12007
+ obj = prototype2;
11986
12008
  }
11987
12009
  return false;
11988
12010
  };
11989
12011
  var getSafeProp = (obj, prop) => obj != null && hasOwnInPrototypeChain(obj, prop) ? obj[prop] : void 0;
12012
+ var toSafeFlatObject = (thing) => {
12013
+ if (thing == null || typeof thing !== "object" && typeof thing !== "function") {
12014
+ return thing;
12015
+ }
12016
+ const sourcePrototype = getPrototypeOf(thing);
12017
+ if (sourcePrototype === null && isSafeAndFullyMutable(thing)) {
12018
+ return thing;
12019
+ }
12020
+ const result = /* @__PURE__ */ Object.create(null);
12021
+ const merged = /* @__PURE__ */ Object.create(null);
12022
+ const seen = [];
12023
+ let current = thing;
12024
+ while (current != null) {
12025
+ if (seen.indexOf(current) !== -1) {
12026
+ break;
12027
+ }
12028
+ seen.push(current);
12029
+ const prototype2 = current === thing ? sourcePrototype : getPrototypeOf(current);
12030
+ if (isPrototypeBoundary(current, prototype2, current === thing)) {
12031
+ break;
12032
+ }
12033
+ const props = Object.getOwnPropertyNames(current);
12034
+ if (Object.getOwnPropertySymbols) {
12035
+ props.push(...Object.getOwnPropertySymbols(current));
12036
+ }
12037
+ for (const prop of props) {
12038
+ if (isUnsafeObjectKey(prop)) {
12039
+ continue;
12040
+ }
12041
+ if (!hasOwnProperty(merged, prop)) {
12042
+ result[prop] = thing[prop];
12043
+ merged[prop] = true;
12044
+ }
12045
+ }
12046
+ current = prototype2;
12047
+ }
12048
+ return result;
12049
+ };
11990
12050
  var kindOf = /* @__PURE__ */ ((cache) => (thing) => {
11991
12051
  const str = toString.call(thing);
11992
12052
  return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
@@ -12023,9 +12083,9 @@ var require_axios = __commonJS({
12023
12083
  return false;
12024
12084
  }
12025
12085
  const prototype2 = getPrototypeOf(val);
12026
- return (prototype2 === null || prototype2 === Object.prototype || getPrototypeOf(prototype2) === null) && // Treat any genuine (non-Object.prototype-polluted) Symbol.toStringTag or
12027
- // Symbol.iterator as evidence the value is a tagged/iterable type rather
12028
- // than a plain object, while ignoring keys injected onto Object.prototype.
12086
+ return (prototype2 === null || prototype2 === Object.prototype || getPrototypeOf(prototype2) === null) && // Treat safe own/inherited Symbol.toStringTag or Symbol.iterator members as
12087
+ // evidence the value is tagged/iterable, while ignoring members reachable
12088
+ // only through shared or terminal prototype boundaries.
12029
12089
  !hasOwnInPrototypeChain(val, toStringTag) && !hasOwnInPrototypeChain(val, iterator);
12030
12090
  };
12031
12091
  var isEmptyObject = (val) => {
@@ -12437,6 +12497,7 @@ var require_axios = __commonJS({
12437
12497
  // an alias to avoid ESLint no-prototype-builtins detection
12438
12498
  hasOwnInPrototypeChain,
12439
12499
  getSafeProp,
12500
+ toSafeFlatObject,
12440
12501
  reduceDescriptors,
12441
12502
  freezeMethods,
12442
12503
  toObjectSet,
@@ -12517,7 +12578,7 @@ var require_axios = __commonJS({
12517
12578
  });
12518
12579
  return byteStringHeaders;
12519
12580
  }
12520
- var $internals = Symbol("internals");
12581
+ var $internals$1 = Symbol("internals");
12521
12582
  function normalizeHeader(header) {
12522
12583
  return header && String(header).trim().toLowerCase();
12523
12584
  }
@@ -12813,7 +12874,7 @@ var require_axios = __commonJS({
12813
12874
  return computed;
12814
12875
  }
12815
12876
  static accessor(header) {
12816
- const internals = this[$internals] = this[$internals] = {
12877
+ const internals = this[$internals$1] = this[$internals$1] = {
12817
12878
  accessors: {}
12818
12879
  };
12819
12880
  const accessors = internals.accessors;
@@ -13034,19 +13095,16 @@ var require_axios = __commonJS({
13034
13095
  throw new TypeError("target must be an object");
13035
13096
  }
13036
13097
  formData = formData || new (FormData$1 || FormData)();
13037
- options = utils$1.toFlatObject(options, {
13038
- metaTokens: true,
13039
- dots: false,
13040
- indexes: false
13041
- }, false, function defined(option, source) {
13042
- return !utils$1.isUndefined(source[option]);
13043
- });
13044
- const metaTokens = options.metaTokens;
13045
- const visitor = options.visitor || defaultVisitor;
13046
- const dots = options.dots;
13047
- const indexes = options.indexes;
13048
- const _Blob = options.Blob || typeof Blob !== "undefined" && Blob;
13049
- const maxDepth = options.maxDepth === void 0 ? DEFAULT_FORM_DATA_MAX_DEPTH : options.maxDepth;
13098
+ const option = (name, fallback) => {
13099
+ const value = utils$1.getSafeProp(options, name);
13100
+ return utils$1.isUndefined(value) ? fallback : value;
13101
+ };
13102
+ const metaTokens = option("metaTokens", true);
13103
+ const visitor = option("visitor") || defaultVisitor;
13104
+ const dots = option("dots", false);
13105
+ const indexes = option("indexes", false);
13106
+ const _Blob = option("Blob") || typeof Blob !== "undefined" && Blob;
13107
+ const maxDepth = option("maxDepth", DEFAULT_FORM_DATA_MAX_DEPTH);
13050
13108
  const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);
13051
13109
  const stack = [];
13052
13110
  if (!utils$1.isFunction(visitor)) {
@@ -13205,9 +13263,47 @@ var require_axios = __commonJS({
13205
13263
  }
13206
13264
  return url2;
13207
13265
  }
13266
+ var $internals = Symbol("internals");
13267
+ function countHandlers(handlers) {
13268
+ return handlers ? handlers.length : 0;
13269
+ }
13270
+ function trimHandlers(handlers) {
13271
+ if (!handlers) {
13272
+ return;
13273
+ }
13274
+ while (handlers.length && handlers[handlers.length - 1] === null) {
13275
+ handlers.pop();
13276
+ }
13277
+ }
13278
+ function syncHandlerEntries(manager, internals) {
13279
+ const handlers = manager.handlers;
13280
+ const length = countHandlers(handlers);
13281
+ if (handlers !== internals.handlersRef) {
13282
+ internals.handlersRef = handlers;
13283
+ internals.handlerEntries.clear();
13284
+ } else if (length !== internals.handlersLength) {
13285
+ if (!length) {
13286
+ internals.handlerEntries.clear();
13287
+ } else {
13288
+ internals.handlerEntries.forEach(function removeStaleEntry(entry, id) {
13289
+ if (handlers[entry.index] !== entry.handler) {
13290
+ internals.handlerEntries.delete(id);
13291
+ }
13292
+ });
13293
+ }
13294
+ }
13295
+ internals.handlersLength = length;
13296
+ }
13208
13297
  var InterceptorManager = class {
13209
13298
  constructor() {
13210
13299
  this.handlers = [];
13300
+ this[$internals] = {
13301
+ handlersRef: this.handlers,
13302
+ handlersLength: this.handlers.length,
13303
+ handlerEntries: /* @__PURE__ */ new Map(),
13304
+ iterationDepth: 0,
13305
+ nextId: 0
13306
+ };
13211
13307
  }
13212
13308
  /**
13213
13309
  * Add a new interceptor to the stack
@@ -13219,13 +13315,25 @@ var require_axios = __commonJS({
13219
13315
  * @return {Number} An ID used to remove interceptor later
13220
13316
  */
13221
13317
  use(fulfilled, rejected, options) {
13222
- this.handlers.push({
13318
+ const handler = {
13223
13319
  fulfilled,
13224
13320
  rejected,
13225
13321
  synchronous: options ? options.synchronous : false,
13226
13322
  runWhen: options ? options.runWhen : null
13323
+ };
13324
+ const internals = this[$internals];
13325
+ if (this.handlers == null) {
13326
+ this.handlers = [];
13327
+ }
13328
+ syncHandlerEntries(this, internals);
13329
+ const id = internals.nextId++;
13330
+ this.handlers.push(handler);
13331
+ internals.handlerEntries.set(id, {
13332
+ handler,
13333
+ index: this.handlers.length - 1
13227
13334
  });
13228
- return this.handlers.length - 1;
13335
+ internals.handlersLength = this.handlers.length;
13336
+ return id;
13229
13337
  }
13230
13338
  /**
13231
13339
  * Remove an interceptor from the stack
@@ -13235,8 +13343,19 @@ var require_axios = __commonJS({
13235
13343
  * @returns {void}
13236
13344
  */
13237
13345
  eject(id) {
13238
- if (this.handlers[id]) {
13239
- this.handlers[id] = null;
13346
+ const internals = this[$internals];
13347
+ syncHandlerEntries(this, internals);
13348
+ const entry = internals.handlerEntries.get(id);
13349
+ if (entry) {
13350
+ internals.handlerEntries.delete(id);
13351
+ if (this.handlers[entry.index] !== entry.handler) {
13352
+ return;
13353
+ }
13354
+ this.handlers[entry.index] = null;
13355
+ if (!internals.iterationDepth) {
13356
+ trimHandlers(this.handlers);
13357
+ internals.handlersLength = this.handlers.length;
13358
+ }
13240
13359
  }
13241
13360
  }
13242
13361
  /**
@@ -13247,6 +13366,7 @@ var require_axios = __commonJS({
13247
13366
  clear() {
13248
13367
  if (this.handlers) {
13249
13368
  this.handlers = [];
13369
+ syncHandlerEntries(this, this[$internals]);
13250
13370
  }
13251
13371
  }
13252
13372
  /**
@@ -13260,11 +13380,22 @@ var require_axios = __commonJS({
13260
13380
  * @returns {void}
13261
13381
  */
13262
13382
  forEach(fn) {
13263
- utils$1.forEach(this.handlers, function forEachHandler(h) {
13264
- if (h !== null) {
13265
- fn(h);
13383
+ const internals = this[$internals];
13384
+ syncHandlerEntries(this, internals);
13385
+ internals.iterationDepth++;
13386
+ try {
13387
+ utils$1.forEach(this.handlers, function forEachHandler(h) {
13388
+ if (h !== null) {
13389
+ fn(h);
13390
+ }
13391
+ });
13392
+ } finally {
13393
+ if (!--internals.iterationDepth) {
13394
+ syncHandlerEntries(this, internals);
13395
+ trimHandlers(this.handlers);
13396
+ internals.handlersLength = countHandlers(this.handlers);
13266
13397
  }
13267
- });
13398
+ }
13268
13399
  }
13269
13400
  };
13270
13401
  var transitionalDefaults = {
@@ -13400,6 +13531,7 @@ var require_axios = __commonJS({
13400
13531
  }
13401
13532
  return null;
13402
13533
  }
13534
+ var methodList = Object.freeze(["get", "delete", "head", "options", "post", "put", "patch", "purge", "link", "unlink", "query"]);
13403
13535
  var own = (obj, key) => obj != null && utils$1.hasOwnProp(obj, key) ? obj[key] : void 0;
13404
13536
  function stringifySafely(rawValue, parser, encoder) {
13405
13537
  if (utils$1.isString(rawValue)) {
@@ -13505,7 +13637,7 @@ var require_axios = __commonJS({
13505
13637
  }
13506
13638
  }
13507
13639
  };
13508
- utils$1.forEach(["delete", "get", "head", "post", "put", "patch", "query"], (method) => {
13640
+ utils$1.forEach(methodList, (method) => {
13509
13641
  defaults.headers[method] = {};
13510
13642
  });
13511
13643
  function transformData(fns, response) {
@@ -13562,18 +13694,18 @@ var require_axios = __commonJS({
13562
13694
  }
13563
13695
  return baseURL.slice(0, end) + "/" + relativeURL.replace(/^\/+/, "");
13564
13696
  }
13565
- var malformedHttpProtocol = /^https?:(?!\/\/)/i;
13566
- var httpProtocolControlCharacters = /[\t\n\r]/g;
13567
- function stripLeadingC0ControlOrSpace(url2) {
13568
- let i = 0;
13569
- while (i < url2.length && url2.charCodeAt(i) <= 32) {
13570
- i++;
13571
- }
13572
- return url2.slice(i);
13573
- }
13697
+ var urlParserControlCharacters = /[\t\n\r]/g;
13574
13698
  function normalizeURLForProtocolCheck(url2) {
13575
- return stripLeadingC0ControlOrSpace(url2).replace(httpProtocolControlCharacters, "");
13699
+ if (typeof url2 !== "string") {
13700
+ return url2;
13701
+ }
13702
+ let start = 0;
13703
+ while (start < url2.length && url2.charCodeAt(start) <= 32) {
13704
+ start++;
13705
+ }
13706
+ return url2.slice(start).replace(urlParserControlCharacters, "");
13576
13707
  }
13708
+ var malformedHttpProtocol = /^https?:(?!\/\/)/i;
13577
13709
  function redactFragment(fragment) {
13578
13710
  if (!fragment) {
13579
13711
  return fragment;
@@ -13674,12 +13806,12 @@ var require_axios = __commonJS({
13674
13806
  function getEnv(key) {
13675
13807
  return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || "";
13676
13808
  }
13677
- var VERSION = "1.19.0";
13809
+ var VERSION = "1.20.0";
13678
13810
  function parseProtocol(url2) {
13679
13811
  const match = /^([-+\w]{1,25}):(?:\/\/)?/.exec(url2);
13680
13812
  return match && match[1] || "";
13681
13813
  }
13682
- var DATA_URL_PATTERN = /^([^,;]+\/[^,;]+)?((?:;[^,;=]+=[^,;]+)*)(;base64)?,([\s\S]*)$/;
13814
+ var DATA_URL_PATTERN = /^([^,;/]+\/[^,;/]+)?((?:;[^,;=]+=[^,;]+)*)(;base64)?,([\s\S]*)$/;
13683
13815
  function fromDataURI(uri, asBlob, options) {
13684
13816
  const _Blob = options && options.Blob || platform.classes.Blob;
13685
13817
  const protocol = parseProtocol(uri);
@@ -13956,7 +14088,7 @@ var require_axios = __commonJS({
13956
14088
  this.sessions = /* @__PURE__ */ Object.create(null);
13957
14089
  }
13958
14090
  getSession(authority, options) {
13959
- options = Object.assign({
14091
+ options = Object.assign(/* @__PURE__ */ Object.create(null), {
13960
14092
  sessionTimeout: 1e3
13961
14093
  }, options);
13962
14094
  let authoritySessions = this.sessions[authority];
@@ -14021,6 +14153,7 @@ var require_axios = __commonJS({
14021
14153
  };
14022
14154
  }
14023
14155
  session.once("close", removeSession);
14156
+ session.once("error", removeSession);
14024
14157
  let entry = [session, options];
14025
14158
  authoritySessions ? authoritySessions.push(entry) : authoritySessions = this.sessions[authority] = [entry];
14026
14159
  return session;
@@ -14039,6 +14172,13 @@ var require_axios = __commonJS({
14039
14172
  } : fn;
14040
14173
  };
14041
14174
  var LOOPBACK_HOSTNAMES = /* @__PURE__ */ new Set(["localhost", "0.0.0.0"]);
14175
+ var trimTrailingDots = (value) => {
14176
+ let end = value.length;
14177
+ while (end && value.charCodeAt(end - 1) === 46) {
14178
+ end--;
14179
+ }
14180
+ return end === value.length ? value : value.slice(0, end);
14181
+ };
14042
14182
  var isIPv4Loopback = (host) => {
14043
14183
  const parts = host.split(".");
14044
14184
  if (parts.length !== 4) return false;
@@ -14071,7 +14211,7 @@ var require_axios = __commonJS({
14071
14211
  if (h.charAt(0) === "[" && h.charAt(h.length - 1) === "]") {
14072
14212
  h = h.slice(1, -1);
14073
14213
  }
14074
- h = h.replace(/\.+$/, "");
14214
+ h = trimTrailingDots(h);
14075
14215
  if (!/^[0-9.xXa-fA-F]+$/.test(h)) return host;
14076
14216
  const parts = h.split(".");
14077
14217
  if (parts.some((p) => p === "")) return host;
@@ -14183,6 +14323,40 @@ var require_axios = __commonJS({
14183
14323
  }
14184
14324
  return host;
14185
14325
  };
14326
+ var IPV4_OCTET_RE = /^(?:0|[1-9]\d{0,2})$/;
14327
+ var ipv4ToBytes = (host) => {
14328
+ const parts = host.split(".");
14329
+ return parts.length === 4 && parts.every((part) => IPV4_OCTET_RE.test(part) && Number(part) <= 255) ? parts.map(Number) : null;
14330
+ };
14331
+ var IPV6_GROUP_RE = /^[0-9a-f]{1,4}$/i;
14332
+ var ipv6ToBytes = (host) => {
14333
+ const halves = host.split("::");
14334
+ if (halves.length > 2) {
14335
+ return null;
14336
+ }
14337
+ const groups = halves[0] ? halves[0].split(":") : [];
14338
+ if (halves.length === 2) {
14339
+ const rear = halves[1] ? halves[1].split(":") : [];
14340
+ const missing = 8 - groups.length - rear.length;
14341
+ if (missing < 1) {
14342
+ return null;
14343
+ }
14344
+ groups.push(...new Array(missing).fill("0"), ...rear);
14345
+ }
14346
+ if (groups.length !== 8 || groups.some((group) => !IPV6_GROUP_RE.test(group))) {
14347
+ return null;
14348
+ }
14349
+ return groups.flatMap((group) => {
14350
+ const value = Number.parseInt(group, 16);
14351
+ return [value >> 8 & 255, value & 255];
14352
+ });
14353
+ };
14354
+ var ipToBytes = (host) => {
14355
+ if (typeof host !== "string" || !host) {
14356
+ return null;
14357
+ }
14358
+ return host.indexOf(":") !== -1 ? ipv6ToBytes(host) : ipv4ToBytes(host);
14359
+ };
14186
14360
  var normalizeNoProxyHost = (hostname) => {
14187
14361
  if (!hostname) {
14188
14362
  return hostname;
@@ -14190,13 +14364,99 @@ var require_axios = __commonJS({
14190
14364
  if (hostname.charAt(0) === "[" && hostname.charAt(hostname.length - 1) === "]") {
14191
14365
  hostname = hostname.slice(1, -1);
14192
14366
  }
14193
- const trimmed = hostname.replace(/\.+$/, "");
14367
+ const trimmed = trimTrailingDots(hostname);
14194
14368
  const ipv4 = normalizeIPAddress(trimmed);
14195
14369
  if (ipv4 !== trimmed) {
14196
14370
  return ipv4;
14197
14371
  }
14198
14372
  return unmapIPv4MappedIPv6(trimmed);
14199
14373
  };
14374
+ var normalizeCidrBase = (input) => {
14375
+ let base = input;
14376
+ const startsBracket = base.charAt(0) === "[";
14377
+ const endsBracket = base.charAt(base.length - 1) === "]";
14378
+ const hasBracket = base.includes("[") || base.includes("]");
14379
+ if (startsBracket || endsBracket) {
14380
+ if (!startsBracket || !endsBracket) {
14381
+ return null;
14382
+ }
14383
+ base = base.slice(1, -1);
14384
+ if (base.indexOf(":") === -1 || base.includes("[") || base.includes("]")) {
14385
+ return null;
14386
+ }
14387
+ } else if (hasBracket) {
14388
+ return null;
14389
+ }
14390
+ if (!base || base.charAt(base.length - 1) === ".") {
14391
+ return null;
14392
+ }
14393
+ const wasIPv6 = base.indexOf(":") !== -1;
14394
+ if (wasIPv6) {
14395
+ try {
14396
+ base = new URL(`http://[${base}]/`).hostname.slice(1, -1);
14397
+ } catch (_err) {
14398
+ return null;
14399
+ }
14400
+ } else {
14401
+ base = normalizeIPAddress(base);
14402
+ if (!ipv4ToBytes(base)) {
14403
+ return null;
14404
+ }
14405
+ }
14406
+ return {
14407
+ normalized: unmapIPv4MappedIPv6(base),
14408
+ wasIPv6
14409
+ };
14410
+ };
14411
+ var CIDR_ENTRY_RE = /^(.+)\/(0|[1-9]\d{0,2})$/;
14412
+ var parseCidrEntry = (entry) => {
14413
+ if (entry.indexOf("/") === -1) {
14414
+ return void 0;
14415
+ }
14416
+ const match = CIDR_ENTRY_RE.exec(entry);
14417
+ if (!match) {
14418
+ return null;
14419
+ }
14420
+ let prefix = Number(match[2]);
14421
+ const parsedBase = normalizeCidrBase(match[1]);
14422
+ if (!parsedBase) {
14423
+ return null;
14424
+ }
14425
+ const {
14426
+ normalized,
14427
+ wasIPv6
14428
+ } = parsedBase;
14429
+ if (wasIPv6 && normalized.indexOf(":") === -1) {
14430
+ if (prefix < 96) {
14431
+ return null;
14432
+ }
14433
+ prefix -= 96;
14434
+ }
14435
+ const bytes = ipToBytes(normalized);
14436
+ if (!bytes || prefix > bytes.length * 8) {
14437
+ return null;
14438
+ }
14439
+ return {
14440
+ bytes,
14441
+ prefix
14442
+ };
14443
+ };
14444
+ var isInSubnet = (addressBytes, networkBytes, prefix) => {
14445
+ const fullBytes = prefix >> 3;
14446
+ for (let i = 0; i < fullBytes; i++) {
14447
+ if (addressBytes[i] !== networkBytes[i]) {
14448
+ return false;
14449
+ }
14450
+ }
14451
+ const remainingBits = prefix & 7;
14452
+ if (remainingBits) {
14453
+ const mask = 255 << 8 - remainingBits & 255;
14454
+ if ((addressBytes[fullBytes] & mask) !== (networkBytes[fullBytes] & mask)) {
14455
+ return false;
14456
+ }
14457
+ }
14458
+ return true;
14459
+ };
14200
14460
  function shouldBypassProxy(location) {
14201
14461
  let parsed;
14202
14462
  try {
@@ -14213,6 +14473,7 @@ var require_axios = __commonJS({
14213
14473
  }
14214
14474
  const port = Number.parseInt(parsed.port, 10) || DEFAULT_PORTS[parsed.protocol.split(":", 1)[0]] || 0;
14215
14475
  const hostname = normalizeNoProxyHost(parsed.hostname.toLowerCase());
14476
+ const hostnameBytes = ipToBytes(hostname);
14216
14477
  return noProxy.split(/[\s,]+/).some((entry) => {
14217
14478
  if (!entry) {
14218
14479
  return false;
@@ -14220,6 +14481,10 @@ var require_axios = __commonJS({
14220
14481
  if (entry === "*") {
14221
14482
  return true;
14222
14483
  }
14484
+ const cidr = parseCidrEntry(entry);
14485
+ if (cidr !== void 0) {
14486
+ return cidr !== null && !!hostnameBytes && hostnameBytes.length === cidr.bytes.length && isInSubnet(hostnameBytes, cidr.bytes, cidr.prefix);
14487
+ }
14223
14488
  let [entryHost, entryPort] = parseNoProxyEntry(entry);
14224
14489
  entryHost = normalizeNoProxyHost(entryHost);
14225
14490
  if (!entryHost) {
@@ -14300,13 +14565,14 @@ var require_axios = __commonJS({
14300
14565
  }
14301
14566
  };
14302
14567
  const flush = () => lastArgs && invoke(lastArgs);
14303
- return [throttled, flush];
14568
+ const flushWith = (...args) => invoke(args);
14569
+ return [throttled, flush, flushWith];
14304
14570
  }
14305
14571
  var progressEventReducer = (listener, isDownloadStream, freq = 3) => {
14306
14572
  let bytesNotified = 0;
14307
14573
  const _speedometer = speedometer(50, 250);
14308
14574
  return throttle((e) => {
14309
- if (!e || typeof e.loaded !== "number") {
14575
+ if (!e || !utils$1.isNumber(e.loaded)) {
14310
14576
  return;
14311
14577
  }
14312
14578
  const rawLoaded = e.loaded;
@@ -14460,6 +14726,12 @@ var require_axios = __commonJS({
14460
14726
  var isHttps = /https:?/;
14461
14727
  var kAxiosSocketListener = Symbol("axios.http.socketListener");
14462
14728
  var kAxiosCurrentReq = Symbol("axios.http.currentReq");
14729
+ function handleSocketError(err) {
14730
+ const current = this[kAxiosCurrentReq];
14731
+ if (current && !current.destroyed) {
14732
+ current.destroy(err);
14733
+ }
14734
+ }
14463
14735
  var kAxiosInstalledTunnel = Symbol("axios.http.installedTunnel");
14464
14736
  var tunnelingAgentCache = /* @__PURE__ */ new Map();
14465
14737
  var tunnelingAgentCacheUser = /* @__PURE__ */ new WeakMap();
@@ -14568,10 +14840,10 @@ var require_axios = __commonJS({
14568
14840
  return false;
14569
14841
  }
14570
14842
  }
14571
- function setProxy(options, configProxy, location, isRedirect, configHttpsAgent, configHttpAgent) {
14843
+ function setProxy(options, configProxy, location, isRedirect, configHttpsAgent, configHttpAgent, allowEnvProxy = true) {
14572
14844
  let proxy = configProxy;
14573
14845
  const proxyEnvAgent = getProxyEnvAgent(options, configHttpAgent, configHttpsAgent);
14574
- if (!proxy && proxy !== false && !isNodeEnvProxyEnabled(proxyEnvAgent)) {
14846
+ if (!proxy && proxy !== false && allowEnvProxy && !isNodeEnvProxyEnabled(proxyEnvAgent)) {
14575
14847
  const proxyUrl = getProxyForUrl(location);
14576
14848
  if (proxyUrl) {
14577
14849
  if (!shouldBypassProxy(location)) {
@@ -14662,8 +14934,9 @@ var require_axios = __commonJS({
14662
14934
  }
14663
14935
  }
14664
14936
  options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {
14665
- setProxy(redirectOptions, configProxy, redirectOptions.href, true, configHttpsAgent, configHttpAgent);
14937
+ setProxy(redirectOptions, configProxy, redirectOptions.href, true, configHttpsAgent, configHttpAgent, allowEnvProxy);
14666
14938
  };
14939
+ return Boolean(proxy || configProxy !== false && allowEnvProxy && isNodeEnvProxyEnabled(proxyEnvAgent));
14667
14940
  }
14668
14941
  var isHttpAdapterSupported = typeof process !== "undefined" && utils$1.kindOf(process) === "process";
14669
14942
  var wrapAsync = (asyncExecutor) => {
@@ -14691,7 +14964,7 @@ var require_axios = __commonJS({
14691
14964
  family
14692
14965
  }) => {
14693
14966
  if (!utils$1.isString(address)) {
14694
- throw TypeError("address must be a string");
14967
+ throw new AxiosError("address must be a string", AxiosError.ERR_BAD_OPTION_VALUE);
14695
14968
  }
14696
14969
  return {
14697
14970
  address,
@@ -14702,6 +14975,30 @@ var require_axios = __commonJS({
14702
14975
  address,
14703
14976
  family
14704
14977
  });
14978
+ var normalizedLookupCache = /* @__PURE__ */ new WeakMap();
14979
+ var normalizeLookup = (lookup) => {
14980
+ let normalized = normalizedLookupCache.get(lookup);
14981
+ if (normalized) {
14982
+ return normalized;
14983
+ }
14984
+ const callbackLookup = callbackify(lookup, (value) => utils$1.isArray(value) ? value : [value]);
14985
+ normalized = (hostname, opt, cb) => {
14986
+ callbackLookup(hostname, opt, (err, arg0, arg1) => {
14987
+ if (err) {
14988
+ return cb(err);
14989
+ }
14990
+ let addresses;
14991
+ try {
14992
+ addresses = utils$1.isArray(arg0) ? arg0.map((addr) => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];
14993
+ } catch (error) {
14994
+ return cb(error);
14995
+ }
14996
+ opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);
14997
+ });
14998
+ };
14999
+ normalizedLookupCache.set(lookup, normalized);
15000
+ return normalized;
15001
+ };
14705
15002
  var http2Transport = {
14706
15003
  request(options, cb) {
14707
15004
  const authority = options.protocol + "//" + options.hostname + ":" + (options.port || (options.protocol === "https:" ? 443 : 80));
@@ -14746,6 +15043,7 @@ var require_axios = __commonJS({
14746
15043
  let family = own2("family");
14747
15044
  let httpVersion = own2("httpVersion");
14748
15045
  if (httpVersion === void 0) httpVersion = 1;
15046
+ const rawHttpVersion = httpVersion;
14749
15047
  let http2Options = own2("http2Options");
14750
15048
  const httpAgent = own2("httpAgent");
14751
15049
  const httpsAgent = own2("httpsAgent");
@@ -14762,25 +15060,20 @@ var require_axios = __commonJS({
14762
15060
  let rejected = false;
14763
15061
  let req;
14764
15062
  let connectPhaseTimer;
14765
- httpVersion = +httpVersion;
15063
+ try {
15064
+ httpVersion = +httpVersion;
15065
+ } catch (err) {
15066
+ throw new AxiosError("Invalid protocol version: value is not a number", AxiosError.ERR_BAD_OPTION_VALUE, config);
15067
+ }
14766
15068
  if (Number.isNaN(httpVersion)) {
14767
- throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`);
15069
+ throw new AxiosError(`Invalid protocol version: '${rawHttpVersion}' is not a number`, AxiosError.ERR_BAD_OPTION_VALUE, config);
14768
15070
  }
14769
15071
  if (httpVersion !== 1 && httpVersion !== 2) {
14770
- throw TypeError(`Unsupported protocol version '${httpVersion}'`);
15072
+ throw new AxiosError(`Unsupported protocol version '${httpVersion}'`, AxiosError.ERR_BAD_OPTION_VALUE, config);
14771
15073
  }
14772
15074
  const isHttp2 = httpVersion === 2;
14773
15075
  if (lookup) {
14774
- const _lookup = callbackify(lookup, (value) => utils$1.isArray(value) ? value : [value]);
14775
- lookup = (hostname, opt, cb) => {
14776
- _lookup(hostname, opt, (err, arg0, arg1) => {
14777
- if (err) {
14778
- return cb(err);
14779
- }
14780
- const addresses = utils$1.isArray(arg0) ? arg0.map((addr) => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];
14781
- opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);
14782
- });
14783
- };
15076
+ lookup = normalizeLookup(lookup);
14784
15077
  }
14785
15078
  const abortEmitter = new events.EventEmitter();
14786
15079
  function abort(reason) {
@@ -14973,6 +15266,11 @@ var require_axios = __commonJS({
14973
15266
  }));
14974
15267
  }
14975
15268
  headers.set("Accept-Encoding", utils$1.hasOwnProp(transitional, "advertiseZstdAcceptEncoding") && transitional.advertiseZstdAcceptEncoding === true ? ACCEPT_ENCODING_WITH_ZSTD : ACCEPT_ENCODING, false);
15269
+ if (isHttp2 && lookup) {
15270
+ http2Options = Object.assign(/* @__PURE__ */ Object.create(null), http2Options, {
15271
+ lookup
15272
+ });
15273
+ }
14976
15274
  const options = Object.assign(/* @__PURE__ */ Object.create(null), {
14977
15275
  path: path$1,
14978
15276
  method,
@@ -14986,9 +15284,11 @@ var require_axios = __commonJS({
14986
15284
  family,
14987
15285
  beforeRedirect: dispatchBeforeRedirect,
14988
15286
  beforeRedirects: /* @__PURE__ */ Object.create(null),
14989
- http2Options
15287
+ http2Options,
15288
+ createConnection: void 0
14990
15289
  });
14991
15290
  !utils$1.isUndefined(lookup) && (options.lookup = lookup);
15291
+ let proxyApplied = false;
14992
15292
  if (socketPath) {
14993
15293
  if (typeof socketPath !== "string") {
14994
15294
  return reject(new AxiosError("socketPath must be a string", AxiosError.ERR_BAD_OPTION_VALUE, config));
@@ -15006,7 +15306,18 @@ var require_axios = __commonJS({
15006
15306
  } else {
15007
15307
  options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname;
15008
15308
  options.port = parsed.port;
15009
- setProxy(options, configProxy, protocol + "//" + parsed.hostname + (parsed.port ? ":" + parsed.port : "") + options.path, false, httpsAgent, httpAgent);
15309
+ proxyApplied = setProxy(
15310
+ options,
15311
+ configProxy,
15312
+ protocol + "//" + parsed.hostname + (parsed.port ? ":" + parsed.port : "") + options.path,
15313
+ false,
15314
+ httpsAgent,
15315
+ httpAgent,
15316
+ // The HTTP/2 transport connects independently of HTTP/1 agents, so it
15317
+ // cannot apply either axios-resolved or agent-local environment proxies.
15318
+ // Explicit proxy config is still processed and rejected below.
15319
+ !isHttp2
15320
+ );
15010
15321
  }
15011
15322
  let transport;
15012
15323
  let isNativeTransport = false;
@@ -15016,6 +15327,9 @@ var require_axios = __commonJS({
15016
15327
  options.agent = isHttpsRequest ? httpsAgent : httpAgent;
15017
15328
  }
15018
15329
  if (isHttp2) {
15330
+ if (proxyApplied) {
15331
+ return reject(new AxiosError("HTTP/2 requests with a proxy are not supported", AxiosError.ERR_NOT_SUPPORT, config));
15332
+ }
15019
15333
  transport = http2Transport;
15020
15334
  } else {
15021
15335
  const configTransport = own2("transport");
@@ -15213,12 +15527,7 @@ var require_axios = __commonJS({
15213
15527
  socket.setKeepAlive(true, 1e3 * 60);
15214
15528
  }
15215
15529
  if (!socket[kAxiosSocketListener]) {
15216
- socket.on("error", function handleSocketError(err) {
15217
- const current = socket[kAxiosCurrentReq];
15218
- if (current && !current.destroyed) {
15219
- current.destroy(err);
15220
- }
15221
- });
15530
+ socket.on("error", handleSocketError);
15222
15531
  socket[kAxiosSocketListener] = true;
15223
15532
  }
15224
15533
  socket[kAxiosCurrentReq] = req;
@@ -15434,7 +15743,7 @@ var require_axios = __commonJS({
15434
15743
  transformResponse: defaultToConfig2,
15435
15744
  paramsSerializer: defaultToConfig2,
15436
15745
  timeout: defaultToConfig2,
15437
- timeoutMessage: defaultToConfig2,
15746
+ timeoutErrorMessage: defaultToConfig2,
15438
15747
  withCredentials: defaultToConfig2,
15439
15748
  withXSRFToken: defaultToConfig2,
15440
15749
  adapter: defaultToConfig2,
@@ -15502,10 +15811,11 @@ var require_axios = __commonJS({
15502
15811
  }
15503
15812
  }
15504
15813
  if (utils$1.isFormData(data)) {
15814
+ const getHeaders = utils$1.getSafeProp(data, "getHeaders");
15505
15815
  if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv || utils$1.isReactNative(data)) {
15506
15816
  headers.setContentType(void 0);
15507
- } else if (utils$1.isFunction(data.getHeaders)) {
15508
- setFormDataHeaders(headers, data.getHeaders(), own2("formDataHeaderPolicy"));
15817
+ } else if (utils$1.isFunction(getHeaders)) {
15818
+ setFormDataHeaders(headers, getHeaders.call(data), own2("formDataHeaderPolicy"));
15509
15819
  }
15510
15820
  }
15511
15821
  if (platform.hasStandardBrowserEnv) {
@@ -15535,7 +15845,7 @@ var require_axios = __commonJS({
15535
15845
  } = _config;
15536
15846
  let onCanceled;
15537
15847
  let uploadThrottled, downloadThrottled;
15538
- let flushUpload, flushDownload;
15848
+ let flushUpload, flushDownload, flushDownloadWithEvent;
15539
15849
  function done() {
15540
15850
  flushUpload && flushUpload();
15541
15851
  flushDownload && flushDownload();
@@ -15545,7 +15855,27 @@ var require_axios = __commonJS({
15545
15855
  let request = new XMLHttpRequest();
15546
15856
  request.open(_config.method.toUpperCase(), _config.url, true);
15547
15857
  request.timeout = _config.timeout;
15548
- function onloadend() {
15858
+ function onloadend(event) {
15859
+ if (!request) {
15860
+ return;
15861
+ }
15862
+ if (request.status === 0 && (parseProtocol(normalizeURLForProtocolCheck(_config.url)) || parseProtocol(platform.origin)) !== "file" && !(request.responseURL && request.responseURL.startsWith("file:"))) {
15863
+ reject(new AxiosError("Request aborted", AxiosError.ECONNABORTED, config, request));
15864
+ done();
15865
+ request = null;
15866
+ return;
15867
+ }
15868
+ try {
15869
+ if (event) {
15870
+ flushDownloadWithEvent && flushDownloadWithEvent(event);
15871
+ } else {
15872
+ flushDownload && flushDownload();
15873
+ }
15874
+ } catch (err) {
15875
+ setTimeout(() => {
15876
+ throw err;
15877
+ });
15878
+ }
15549
15879
  if (!request) {
15550
15880
  return;
15551
15881
  }
@@ -15620,7 +15950,7 @@ var require_axios = __commonJS({
15620
15950
  request.responseType = _config.responseType;
15621
15951
  }
15622
15952
  if (onDownloadProgress) {
15623
- [downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);
15953
+ [downloadThrottled, flushDownload, flushDownloadWithEvent] = progressEventReducer(onDownloadProgress, true);
15624
15954
  request.addEventListener("progress", downloadThrottled);
15625
15955
  }
15626
15956
  if (onUploadProgress && request.upload) {
@@ -15782,6 +16112,17 @@ var require_axios = __commonJS({
15782
16112
  });
15783
16113
  };
15784
16114
  var DEFAULT_CHUNK_SIZE = 64 * 1024;
16115
+ var DEFAULT_REQUEST_OPTIONS = {
16116
+ cache: "default",
16117
+ redirect: "follow",
16118
+ referrer: "about:client",
16119
+ referrerPolicy: "",
16120
+ mode: "cors",
16121
+ integrity: "",
16122
+ keepalive: false,
16123
+ priority: "auto",
16124
+ window: null
16125
+ };
15785
16126
  var {
15786
16127
  isFunction
15787
16128
  } = utils$1;
@@ -15910,7 +16251,8 @@ var require_axios = __commonJS({
15910
16251
  withCredentials = "same-origin",
15911
16252
  fetchOptions,
15912
16253
  maxContentLength,
15913
- maxBodyLength
16254
+ maxBodyLength,
16255
+ maxRedirects
15914
16256
  } = resolveConfig(config);
15915
16257
  const hasMaxContentLength = utils$1.isNumber(maxContentLength) && maxContentLength > -1;
15916
16258
  const hasMaxBodyLength = utils$1.isNumber(maxBodyLength) && maxBodyLength > -1;
@@ -16011,17 +16353,44 @@ var require_axios = __commonJS({
16011
16353
  }
16012
16354
  }
16013
16355
  headers.set("User-Agent", "axios/" + VERSION, false);
16014
- const resolvedOptions = {
16015
- ...fetchOptions,
16356
+ const safeFetchOptions = fetchOptions == null ? fetchOptions : Object.assign(/* @__PURE__ */ Object.create(null), fetchOptions);
16357
+ if (safeFetchOptions) {
16358
+ delete safeFetchOptions.body;
16359
+ delete safeFetchOptions.headers;
16360
+ delete safeFetchOptions.method;
16361
+ delete safeFetchOptions.signal;
16362
+ delete safeFetchOptions.duplex;
16363
+ delete safeFetchOptions.credentials;
16364
+ }
16365
+ const resolvedOptions = Object.assign(/* @__PURE__ */ Object.create(null), safeFetchOptions, {
16016
16366
  signal: composedSignal,
16017
16367
  method: method.toUpperCase(),
16018
16368
  headers: toByteStringHeaderObject(headers.normalize()),
16019
16369
  body: data,
16020
16370
  duplex: "half",
16021
16371
  credentials: isCredentialsSupported ? withCredentials : void 0
16022
- };
16372
+ });
16373
+ if (isRequestSupported) {
16374
+ utils$1.forEach(DEFAULT_REQUEST_OPTIONS, (value, key) => {
16375
+ if (resolvedOptions[key] === void 0) {
16376
+ resolvedOptions[key] = value;
16377
+ }
16378
+ });
16379
+ if (resolvedOptions.signal === void 0) {
16380
+ resolvedOptions.signal = null;
16381
+ }
16382
+ if (resolvedOptions.body === void 0) {
16383
+ resolvedOptions.body = null;
16384
+ }
16385
+ }
16386
+ if (maxRedirects === 0) {
16387
+ resolvedOptions.redirect = "manual";
16388
+ if (safeFetchOptions) {
16389
+ safeFetchOptions.redirect = "manual";
16390
+ }
16391
+ }
16023
16392
  request = isRequestSupported && new Request(url2, resolvedOptions);
16024
- let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url2, resolvedOptions));
16393
+ let response = await (isRequestSupported ? _fetch(request, safeFetchOptions) : _fetch(url2, resolvedOptions));
16025
16394
  const responseHeaders = AxiosHeaders.from(response.headers);
16026
16395
  if (hasMaxContentLength) {
16027
16396
  const declaredLength = utils$1.toFiniteNumber(responseHeaders.getContentLength());
@@ -16213,9 +16582,10 @@ var require_axios = __commonJS({
16213
16582
  throw new CanceledError(null, config);
16214
16583
  }
16215
16584
  }
16216
- function dispatchRequest(config) {
16585
+ function dispatchRequest(_config) {
16586
+ const config = utils$1.toSafeFlatObject(_config);
16217
16587
  throwIfCancellationRequested(config);
16218
- config.headers = AxiosHeaders.from(config.headers);
16588
+ config.headers = AxiosHeaders.from(utils$1.getSafeProp(config, "headers"));
16219
16589
  config.data = transformData.call(config, config.transformRequest);
16220
16590
  if (["post", "put", "patch"].indexOf(config.method) !== -1) {
16221
16591
  config.headers.setContentType("application/x-www-form-urlencoded", false);
@@ -16323,16 +16693,15 @@ var require_axios = __commonJS({
16323
16693
  return await this._request(configOrUrl, config);
16324
16694
  } catch (err) {
16325
16695
  if (err instanceof Error) {
16326
- let dummy = {};
16327
- Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();
16328
- const stack = (() => {
16329
- if (!dummy.stack) {
16330
- return "";
16331
- }
16332
- const firstNewlineIndex = dummy.stack.indexOf("\n");
16333
- return firstNewlineIndex === -1 ? "" : dummy.stack.slice(firstNewlineIndex + 1);
16334
- })();
16335
16696
  try {
16697
+ let dummy = {};
16698
+ Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();
16699
+ const dummyStack = dummy.stack;
16700
+ let stack = "";
16701
+ if (typeof dummyStack === "string") {
16702
+ const firstNewlineIndex = dummyStack.indexOf("\n");
16703
+ stack = firstNewlineIndex === -1 ? "" : dummyStack.slice(firstNewlineIndex + 1);
16704
+ }
16336
16705
  if (!err.stack) {
16337
16706
  err.stack = stack;
16338
16707
  } else if (stack) {
@@ -16394,9 +16763,9 @@ var require_axios = __commonJS({
16394
16763
  baseUrl: validators.spelling("baseURL"),
16395
16764
  withXsrfToken: validators.spelling("withXSRFToken")
16396
16765
  }, true);
16397
- config.method = (config.method || this.defaults.method || "get").toLowerCase();
16766
+ config.method = (utils$1.getSafeProp(config, "method") || utils$1.getSafeProp(this.defaults, "method") || "get").toLowerCase();
16398
16767
  let contextHeaders = headers && utils$1.merge(headers.common, headers[config.method]);
16399
- headers && utils$1.forEach(["delete", "get", "head", "post", "put", "patch", "query", "common"], (method) => {
16768
+ headers && utils$1.forEach(methodList.concat("common"), (method) => {
16400
16769
  delete headers[method];
16401
16770
  });
16402
16771
  config.headers = AxiosHeaders.concat(contextHeaders, headers);
@@ -16643,14 +17012,22 @@ var require_axios = __commonJS({
16643
17012
  Gone: 410,
16644
17013
  LengthRequired: 411,
16645
17014
  PreconditionFailed: 412,
17015
+ /**
17016
+ * @deprecated Use `ContentTooLarge` instead.
17017
+ */
16646
17018
  PayloadTooLarge: 413,
17019
+ ContentTooLarge: 413,
16647
17020
  UriTooLong: 414,
16648
17021
  UnsupportedMediaType: 415,
16649
17022
  RangeNotSatisfiable: 416,
16650
17023
  ExpectationFailed: 417,
16651
17024
  ImATeapot: 418,
16652
17025
  MisdirectedRequest: 421,
17026
+ /**
17027
+ * @deprecated Use `UnprocessableContent` instead.
17028
+ */
16653
17029
  UnprocessableEntity: 422,
17030
+ UnprocessableContent: 422,
16654
17031
  Locked: 423,
16655
17032
  FailedDependency: 424,
16656
17033
  TooEarly: 425,
@@ -16679,7 +17056,9 @@ var require_axios = __commonJS({
16679
17056
  InvalidSslCertificate: 526
16680
17057
  };
16681
17058
  Object.entries(HttpStatusCode).forEach(([key, value]) => {
16682
- HttpStatusCode[value] = key;
17059
+ if (HttpStatusCode[value] === void 0) {
17060
+ HttpStatusCode[value] = key;
17061
+ }
16683
17062
  });
16684
17063
  function createInstance(defaultConfig) {
16685
17064
  const context = new Axios(defaultConfig);
@@ -22755,7 +23134,7 @@ mime-types/index.js:
22755
23134
  *)
22756
23135
 
22757
23136
  axios/dist/node/axios.cjs:
22758
- (*! Axios v1.19.0 Copyright (c) 2026 Matt Zabriskie and contributors *)
23137
+ (*! Axios v1.20.0 Copyright (c) 2026 Matt Zabriskie and contributors *)
22759
23138
 
22760
23139
  ieee754/index.js:
22761
23140
  (*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> *)
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "dsh-voice-mode",
3
3
  "description": "Full-duplex voice plugin for DeepSeek Harness: local zipformer2 streaming ASR (no API key) → editable draft; Edge TTS or local VITS / Kokoro read-aloud with live captions; true barge-in; hardened HTTP surface + model SHA256 pinning; compatible with all dsh releases since 0.1.1-rc.2 (verified 0.1.1-rc.2 → 0.2.0-rc.2).",
4
4
  "icon": "./icon.svg",
5
- "version": "0.7.21",
5
+ "version": "0.7.23",
6
6
  "type": "module",
7
7
  "main": "lib/index.js",
8
8
  "repository": {