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 +11 -4
- package/README.md +12 -5
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/lib/client.js +4 -2
- package/lib/index.js +14 -2
- package/lib/msedge-tts.cjs +478 -99
- package/package.json +1 -1
package/README.en.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# dsh-voice-mode
|
|
2
2
|
|
|
3
|
-
[](
|
|
3
|
+
[](./LICENSE)
|
|
4
4
|
[](https://github.com/qishuilalala/dsh-voice-mode/releases)
|
|
5
5
|
[](https://www.npmjs.com/package/dsh-voice-mode)
|
|
6
|
-
[](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`](
|
|
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](
|
|
435
|
+
[MIT](./LICENSE)
|
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](LICENSE)
|
|
4
4
|
[](https://github.com/qishuilalala/dsh-voice-mode/releases)
|
|
5
5
|
[](https://www.npmjs.com/package/dsh-voice-mode)
|
|
6
|
-
[](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](
|
|
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/`](
|
|
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`](
|
|
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](
|
|
374
|
+
[MIT](./LICENSE)
|
|
368
375
|
|
|
369
376
|
> 部分实现借鉴 [haoku123/dsh-voice](https://github.com/haoku123/dsh-voice)(派生声明见子包 LICENSE)。
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -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.
|
|
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.
|
|
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 = "
|
|
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
|
|
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";
|
package/lib/msedge-tts.cjs
CHANGED
|
@@ -11936,9 +11936,9 @@ var require_follow_redirects = __commonJS({
|
|
|
11936
11936
|
}
|
|
11937
11937
|
});
|
|
11938
11938
|
|
|
11939
|
-
// node_modules/.pnpm/axios@1.
|
|
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.
|
|
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
|
|
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 =
|
|
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
|
|
12027
|
-
//
|
|
12028
|
-
//
|
|
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
|
-
|
|
13038
|
-
|
|
13039
|
-
|
|
13040
|
-
|
|
13041
|
-
|
|
13042
|
-
|
|
13043
|
-
|
|
13044
|
-
const
|
|
13045
|
-
const
|
|
13046
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
13239
|
-
|
|
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
|
-
|
|
13264
|
-
|
|
13265
|
-
|
|
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(
|
|
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
|
|
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
|
-
|
|
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.
|
|
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 = /^([
|
|
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
|
|
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
|
|
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
|
-
|
|
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 ||
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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",
|
|
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
|
-
|
|
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(
|
|
15508
|
-
setFormDataHeaders(headers,
|
|
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
|
|
16015
|
-
|
|
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,
|
|
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(
|
|
16585
|
+
function dispatchRequest(_config) {
|
|
16586
|
+
const config = utils$1.toSafeFlatObject(_config);
|
|
16217
16587
|
throwIfCancellationRequested(config);
|
|
16218
|
-
config.headers = AxiosHeaders.from(config
|
|
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
|
|
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(
|
|
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]
|
|
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.
|
|
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.
|
|
5
|
+
"version": "0.7.23",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "lib/index.js",
|
|
8
8
|
"repository": {
|