groove-dev 0.27.143 → 0.27.145
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/CLAUDE.md +0 -7
- package/node_modules/@groove-dev/cli/package.json +1 -1
- package/node_modules/@groove-dev/daemon/package.json +1 -1
- package/node_modules/@groove-dev/daemon/src/api.js +1086 -6532
- package/node_modules/@groove-dev/daemon/src/conversations.js +18 -48
- package/node_modules/@groove-dev/daemon/src/gateways/manager.js +35 -1
- package/node_modules/@groove-dev/daemon/src/index.js +3 -0
- package/node_modules/@groove-dev/daemon/src/journalist.js +23 -13
- package/node_modules/@groove-dev/daemon/src/mlx-server.js +365 -0
- package/node_modules/@groove-dev/daemon/src/model-lab.js +308 -12
- package/node_modules/@groove-dev/daemon/src/pm.js +1 -1
- package/node_modules/@groove-dev/daemon/src/process.js +2 -2
- package/node_modules/@groove-dev/daemon/src/providers/local.js +36 -8
- package/node_modules/@groove-dev/daemon/src/registry.js +21 -5
- package/node_modules/@groove-dev/daemon/src/routes/agents.js +812 -0
- package/node_modules/@groove-dev/daemon/src/routes/coordination.js +318 -0
- package/node_modules/@groove-dev/daemon/src/routes/files.js +751 -0
- package/node_modules/@groove-dev/daemon/src/routes/integrations.js +485 -0
- package/node_modules/@groove-dev/daemon/src/routes/network.js +1784 -0
- package/node_modules/@groove-dev/daemon/src/routes/providers.js +755 -0
- package/node_modules/@groove-dev/daemon/src/routes/schedules.js +110 -0
- package/node_modules/@groove-dev/daemon/src/routes/teams.js +650 -0
- package/node_modules/@groove-dev/daemon/src/scheduler.js +456 -24
- package/node_modules/@groove-dev/daemon/src/teams.js +1 -1
- package/node_modules/@groove-dev/daemon/src/validate.js +38 -1
- package/node_modules/@groove-dev/daemon/templates/mlx-setup.json +12 -0
- package/node_modules/@groove-dev/daemon/templates/tgi-setup.json +1 -1
- package/node_modules/@groove-dev/daemon/templates/vllm-setup.json +1 -1
- package/node_modules/@groove-dev/daemon/test/introducer.test.js +3 -3
- package/node_modules/@groove-dev/daemon/test/journalist.test.js +7 -10
- package/node_modules/@groove-dev/daemon/test/registry.test.js +38 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-Bxc0gU06.js +1006 -0
- package/node_modules/@groove-dev/gui/dist/assets/index-C0pztKBn.css +1 -0
- package/node_modules/@groove-dev/gui/dist/index.html +2 -2
- package/node_modules/@groove-dev/gui/package.json +1 -1
- package/node_modules/@groove-dev/gui/src/{app.jsx → App.jsx} +0 -2
- package/node_modules/@groove-dev/gui/src/app.css +35 -0
- package/node_modules/@groove-dev/gui/src/components/agents/agent-config.jsx +1 -128
- package/node_modules/@groove-dev/gui/src/components/agents/agent-feed.jsx +210 -112
- package/node_modules/@groove-dev/gui/src/components/agents/agent-node.jsx +8 -13
- package/node_modules/@groove-dev/gui/src/components/agents/agent-panel.jsx +2 -70
- package/node_modules/@groove-dev/gui/src/components/agents/code-review.jsx +159 -122
- package/node_modules/@groove-dev/gui/src/components/agents/diff-viewer.jsx +23 -23
- package/node_modules/@groove-dev/gui/src/components/agents/journalist-panel.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/components/agents/spawn-wizard.jsx +2 -135
- package/node_modules/@groove-dev/gui/src/components/automations/automation-card.jsx +274 -0
- package/node_modules/@groove-dev/gui/src/components/automations/automation-wizard.jsx +1136 -0
- package/node_modules/@groove-dev/gui/src/components/chat/chat-header.jsx +2 -0
- package/node_modules/@groove-dev/gui/src/components/chat/chat-input.jsx +68 -66
- package/node_modules/@groove-dev/gui/src/components/chat/chat-view.jsx +4 -8
- package/node_modules/@groove-dev/gui/src/components/dashboard/activity-feed.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/dashboard/cache-ring.jsx +5 -5
- package/node_modules/@groove-dev/gui/src/components/dashboard/context-gauges.jsx +6 -8
- package/node_modules/@groove-dev/gui/src/components/dashboard/fleet-panel.jsx +8 -14
- package/node_modules/@groove-dev/gui/src/components/dashboard/intel-panel.jsx +238 -656
- package/node_modules/@groove-dev/gui/src/components/dashboard/kpi-card.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/dashboard/routing-chart.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/components/dashboard/team-burn-panel.jsx +1 -1
- package/node_modules/@groove-dev/gui/src/components/dashboard/token-chart.jsx +4 -4
- package/node_modules/@groove-dev/gui/src/components/lab/chat-playground.jsx +39 -31
- package/node_modules/@groove-dev/gui/src/components/lab/lab-assistant.jsx +316 -82
- package/node_modules/@groove-dev/gui/src/components/lab/metrics-panel.jsx +187 -32
- package/node_modules/@groove-dev/gui/src/components/lab/parameter-panel.jsx +200 -18
- package/node_modules/@groove-dev/gui/src/components/lab/preset-manager.jsx +17 -14
- package/node_modules/@groove-dev/gui/src/components/lab/runtime-config.jsx +335 -152
- package/node_modules/@groove-dev/gui/src/components/lab/system-prompt-editor.jsx +10 -8
- package/node_modules/@groove-dev/gui/src/components/layout/activity-bar.jsx +2 -4
- package/node_modules/@groove-dev/gui/src/components/layout/terminal-panel.jsx +4 -2
- package/node_modules/@groove-dev/gui/src/components/layout/welcome-splash.jsx +137 -108
- package/node_modules/@groove-dev/gui/src/components/network/network-health.jsx +2 -2
- package/node_modules/@groove-dev/gui/src/components/network/performance-dashboard.jsx +4 -4
- package/node_modules/@groove-dev/gui/src/components/settings/ssh-wizard.jsx +81 -99
- package/node_modules/@groove-dev/gui/src/components/ui/sheet.jsx +5 -2
- package/node_modules/@groove-dev/gui/src/components/ui/slider.jsx +8 -8
- package/node_modules/@groove-dev/gui/src/lib/cron.js +64 -0
- package/node_modules/@groove-dev/gui/src/lib/status.js +25 -24
- package/node_modules/@groove-dev/gui/src/lib/theme-hex.js +1 -0
- package/node_modules/@groove-dev/gui/src/stores/groove.js +51 -3144
- package/node_modules/@groove-dev/gui/src/stores/helpers.js +10 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/agents-slice.js +459 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/automations-slice.js +96 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/chat-slice.js +226 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/editor-slice.js +285 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/marketplace-slice.js +461 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/network-slice.js +361 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/preview-slice.js +109 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/providers-slice.js +897 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/teams-slice.js +413 -0
- package/node_modules/@groove-dev/gui/src/stores/slices/ui-slice.js +98 -0
- package/node_modules/@groove-dev/gui/src/views/agents.jsx +5 -5
- package/node_modules/@groove-dev/gui/src/views/dashboard.jsx +12 -13
- package/node_modules/@groove-dev/gui/src/views/marketplace.jsx +191 -3
- package/node_modules/@groove-dev/gui/src/views/model-lab.jsx +54 -12
- package/node_modules/@groove-dev/gui/src/views/models.jsx +419 -496
- package/node_modules/@groove-dev/gui/src/views/network.jsx +3 -3
- package/node_modules/@groove-dev/gui/src/views/settings.jsx +81 -94
- package/node_modules/@groove-dev/gui/src/views/teams.jsx +40 -483
- package/node_modules/axios/CHANGELOG.md +260 -0
- package/node_modules/axios/README.md +595 -223
- package/node_modules/axios/dist/axios.js +1460 -1090
- package/node_modules/axios/dist/axios.js.map +1 -1
- package/node_modules/axios/dist/axios.min.js +3 -3
- package/node_modules/axios/dist/axios.min.js.map +1 -1
- package/node_modules/axios/dist/browser/axios.cjs +1560 -1132
- package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
- package/node_modules/axios/dist/esm/axios.js +1557 -1128
- package/node_modules/axios/dist/esm/axios.js.map +1 -1
- package/node_modules/axios/dist/esm/axios.min.js +2 -2
- package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
- package/node_modules/axios/dist/node/axios.cjs +1594 -1057
- package/node_modules/axios/dist/node/axios.cjs.map +1 -1
- package/node_modules/axios/index.d.cts +40 -41
- package/node_modules/axios/index.d.ts +151 -227
- package/node_modules/axios/index.js +2 -0
- package/node_modules/axios/lib/adapters/adapters.js +4 -2
- package/node_modules/axios/lib/adapters/fetch.js +147 -16
- package/node_modules/axios/lib/adapters/http.js +306 -58
- package/node_modules/axios/lib/adapters/xhr.js +6 -2
- package/node_modules/axios/lib/core/Axios.js +7 -3
- package/node_modules/axios/lib/core/AxiosError.js +120 -34
- package/node_modules/axios/lib/core/AxiosHeaders.js +27 -25
- package/node_modules/axios/lib/core/buildFullPath.js +1 -1
- package/node_modules/axios/lib/core/dispatchRequest.js +19 -7
- package/node_modules/axios/lib/core/mergeConfig.js +21 -4
- package/node_modules/axios/lib/core/settle.js +7 -11
- package/node_modules/axios/lib/defaults/index.js +14 -9
- package/node_modules/axios/lib/env/data.js +1 -1
- package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -2
- package/node_modules/axios/lib/helpers/buildURL.js +1 -1
- package/node_modules/axios/lib/helpers/cookies.js +14 -2
- package/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +28 -1
- package/node_modules/axios/lib/helpers/formDataToJSON.js +3 -1
- package/node_modules/axios/lib/helpers/formDataToStream.js +3 -2
- package/node_modules/axios/lib/helpers/parseProtocol.js +1 -1
- package/node_modules/axios/lib/helpers/progressEventReducer.js +5 -5
- package/node_modules/axios/lib/helpers/resolveConfig.js +54 -18
- package/node_modules/axios/lib/helpers/shouldBypassProxy.js +74 -2
- package/node_modules/axios/lib/helpers/toFormData.js +10 -2
- package/node_modules/axios/lib/helpers/validator.js +3 -1
- package/node_modules/axios/lib/utils.js +33 -21
- package/node_modules/axios/package.json +17 -24
- package/node_modules/follow-redirects/README.md +7 -5
- package/node_modules/follow-redirects/index.js +24 -1
- package/node_modules/follow-redirects/package.json +1 -1
- package/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/daemon/package.json +1 -1
- package/packages/daemon/src/api.js +1086 -6532
- package/packages/daemon/src/conversations.js +18 -48
- package/packages/daemon/src/gateways/manager.js +35 -1
- package/packages/daemon/src/index.js +3 -0
- package/packages/daemon/src/journalist.js +23 -13
- package/packages/daemon/src/mlx-server.js +365 -0
- package/packages/daemon/src/model-lab.js +308 -12
- package/packages/daemon/src/pm.js +1 -1
- package/packages/daemon/src/process.js +2 -2
- package/packages/daemon/src/providers/local.js +36 -8
- package/packages/daemon/src/registry.js +21 -5
- package/packages/daemon/src/routes/agents.js +812 -0
- package/packages/daemon/src/routes/coordination.js +318 -0
- package/packages/daemon/src/routes/files.js +751 -0
- package/packages/daemon/src/routes/integrations.js +485 -0
- package/packages/daemon/src/routes/network.js +1784 -0
- package/packages/daemon/src/routes/providers.js +755 -0
- package/packages/daemon/src/routes/schedules.js +110 -0
- package/packages/daemon/src/routes/teams.js +650 -0
- package/packages/daemon/src/scheduler.js +456 -24
- package/packages/daemon/src/teams.js +1 -1
- package/packages/daemon/src/validate.js +38 -1
- package/packages/daemon/templates/mlx-setup.json +12 -0
- package/packages/daemon/templates/tgi-setup.json +1 -1
- package/packages/daemon/templates/vllm-setup.json +1 -1
- package/packages/gui/dist/assets/index-Bxc0gU06.js +1006 -0
- package/packages/gui/dist/assets/index-C0pztKBn.css +1 -0
- package/packages/gui/dist/index.html +2 -2
- package/packages/gui/package.json +1 -1
- package/packages/gui/src/{app.jsx → App.jsx} +0 -2
- package/packages/gui/src/app.css +35 -0
- package/packages/gui/src/components/agents/agent-config.jsx +1 -128
- package/packages/gui/src/components/agents/agent-feed.jsx +210 -112
- package/packages/gui/src/components/agents/agent-node.jsx +8 -13
- package/packages/gui/src/components/agents/agent-panel.jsx +2 -70
- package/packages/gui/src/components/agents/code-review.jsx +159 -122
- package/packages/gui/src/components/agents/diff-viewer.jsx +23 -23
- package/packages/gui/src/components/agents/journalist-panel.jsx +1 -1
- package/packages/gui/src/components/agents/spawn-wizard.jsx +2 -135
- package/packages/gui/src/components/automations/automation-card.jsx +274 -0
- package/packages/gui/src/components/automations/automation-wizard.jsx +1136 -0
- package/packages/gui/src/components/chat/chat-header.jsx +2 -0
- package/packages/gui/src/components/chat/chat-input.jsx +68 -66
- package/packages/gui/src/components/chat/chat-view.jsx +4 -8
- package/packages/gui/src/components/dashboard/activity-feed.jsx +3 -3
- package/packages/gui/src/components/dashboard/cache-ring.jsx +5 -5
- package/packages/gui/src/components/dashboard/context-gauges.jsx +6 -8
- package/packages/gui/src/components/dashboard/fleet-panel.jsx +8 -14
- package/packages/gui/src/components/dashboard/intel-panel.jsx +238 -656
- package/packages/gui/src/components/dashboard/kpi-card.jsx +3 -3
- package/packages/gui/src/components/dashboard/routing-chart.jsx +3 -3
- package/packages/gui/src/components/dashboard/team-burn-panel.jsx +1 -1
- package/packages/gui/src/components/dashboard/token-chart.jsx +4 -4
- package/packages/gui/src/components/lab/chat-playground.jsx +39 -31
- package/packages/gui/src/components/lab/lab-assistant.jsx +316 -82
- package/packages/gui/src/components/lab/metrics-panel.jsx +187 -32
- package/packages/gui/src/components/lab/parameter-panel.jsx +200 -18
- package/packages/gui/src/components/lab/preset-manager.jsx +17 -14
- package/packages/gui/src/components/lab/runtime-config.jsx +335 -152
- package/packages/gui/src/components/lab/system-prompt-editor.jsx +10 -8
- package/packages/gui/src/components/layout/activity-bar.jsx +2 -4
- package/packages/gui/src/components/layout/terminal-panel.jsx +4 -2
- package/packages/gui/src/components/layout/welcome-splash.jsx +137 -108
- package/packages/gui/src/components/network/network-health.jsx +2 -2
- package/packages/gui/src/components/network/performance-dashboard.jsx +4 -4
- package/packages/gui/src/components/settings/ssh-wizard.jsx +81 -99
- package/packages/gui/src/components/ui/sheet.jsx +5 -2
- package/packages/gui/src/components/ui/slider.jsx +8 -8
- package/packages/gui/src/lib/cron.js +64 -0
- package/packages/gui/src/lib/status.js +25 -24
- package/packages/gui/src/lib/theme-hex.js +1 -0
- package/packages/gui/src/stores/groove.js +51 -3144
- package/packages/gui/src/stores/helpers.js +10 -0
- package/packages/gui/src/stores/slices/agents-slice.js +459 -0
- package/packages/gui/src/stores/slices/automations-slice.js +96 -0
- package/packages/gui/src/stores/slices/chat-slice.js +226 -0
- package/packages/gui/src/stores/slices/editor-slice.js +285 -0
- package/packages/gui/src/stores/slices/marketplace-slice.js +461 -0
- package/packages/gui/src/stores/slices/network-slice.js +361 -0
- package/packages/gui/src/stores/slices/preview-slice.js +109 -0
- package/packages/gui/src/stores/slices/providers-slice.js +897 -0
- package/packages/gui/src/stores/slices/teams-slice.js +413 -0
- package/packages/gui/src/stores/slices/ui-slice.js +98 -0
- package/packages/gui/src/views/agents.jsx +5 -5
- package/packages/gui/src/views/dashboard.jsx +12 -13
- package/packages/gui/src/views/marketplace.jsx +191 -3
- package/packages/gui/src/views/model-lab.jsx +54 -12
- package/packages/gui/src/views/models.jsx +419 -496
- package/packages/gui/src/views/network.jsx +3 -3
- package/packages/gui/src/views/settings.jsx +81 -94
- package/packages/gui/src/views/teams.jsx +40 -483
- package/SECURITY_SWEEP.md +0 -228
- package/TRAINING_DATA_v4.md +0 -6
- package/node_modules/@groove-dev/gui/dist/assets/index-CCVvAoQn.css +0 -1
- package/node_modules/@groove-dev/gui/dist/assets/index-DGIv_TRm.js +0 -984
- package/node_modules/@groove-dev/gui/src/components/agents/agent-chat.jsx +0 -379
- package/node_modules/@groove-dev/gui/src/views/preview.jsx +0 -6
- package/node_modules/@groove-dev/gui/src/views/subscription-panel.jsx +0 -327
- package/packages/gui/dist/assets/index-CCVvAoQn.css +0 -1
- package/packages/gui/dist/assets/index-DGIv_TRm.js +0 -984
- package/packages/gui/src/components/agents/agent-chat.jsx +0 -379
- package/packages/gui/src/views/preview.jsx +0 -6
- package/packages/gui/src/views/subscription-panel.jsx +0 -327
- package/test.py +0 -571
|
@@ -11,18 +11,13 @@ import {
|
|
|
11
11
|
} from '../helpers/progressEventReducer.js';
|
|
12
12
|
import resolveConfig from '../helpers/resolveConfig.js';
|
|
13
13
|
import settle from '../core/settle.js';
|
|
14
|
+
import estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';
|
|
15
|
+
import { VERSION } from '../env/data.js';
|
|
14
16
|
|
|
15
17
|
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
|
16
18
|
|
|
17
19
|
const { isFunction } = utils;
|
|
18
20
|
|
|
19
|
-
const globalFetchAPI = (({ Request, Response }) => ({
|
|
20
|
-
Request,
|
|
21
|
-
Response,
|
|
22
|
-
}))(utils.global);
|
|
23
|
-
|
|
24
|
-
const { ReadableStream, TextEncoder } = utils.global;
|
|
25
|
-
|
|
26
21
|
const test = (fn, ...args) => {
|
|
27
22
|
try {
|
|
28
23
|
return !!fn(...args);
|
|
@@ -32,11 +27,17 @@ const test = (fn, ...args) => {
|
|
|
32
27
|
};
|
|
33
28
|
|
|
34
29
|
const factory = (env) => {
|
|
30
|
+
const globalObject = utils.global ?? globalThis;
|
|
31
|
+
const { ReadableStream, TextEncoder } = globalObject;
|
|
32
|
+
|
|
35
33
|
env = utils.merge.call(
|
|
36
34
|
{
|
|
37
35
|
skipUndefined: true,
|
|
38
36
|
},
|
|
39
|
-
|
|
37
|
+
{
|
|
38
|
+
Request: globalObject.Request,
|
|
39
|
+
Response: globalObject.Response,
|
|
40
|
+
},
|
|
40
41
|
env
|
|
41
42
|
);
|
|
42
43
|
|
|
@@ -66,18 +67,20 @@ const factory = (env) => {
|
|
|
66
67
|
test(() => {
|
|
67
68
|
let duplexAccessed = false;
|
|
68
69
|
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
const hasContentType = new Request(platform.origin, {
|
|
72
|
-
body,
|
|
70
|
+
const request = new Request(platform.origin, {
|
|
71
|
+
body: new ReadableStream(),
|
|
73
72
|
method: 'POST',
|
|
74
73
|
get duplex() {
|
|
75
74
|
duplexAccessed = true;
|
|
76
75
|
return 'half';
|
|
77
76
|
},
|
|
78
|
-
})
|
|
77
|
+
});
|
|
79
78
|
|
|
80
|
-
|
|
79
|
+
const hasContentType = request.headers.has('Content-Type');
|
|
80
|
+
|
|
81
|
+
if (request.body != null) {
|
|
82
|
+
request.body.cancel();
|
|
83
|
+
}
|
|
81
84
|
|
|
82
85
|
return duplexAccessed && !hasContentType;
|
|
83
86
|
});
|
|
@@ -161,8 +164,13 @@ const factory = (env) => {
|
|
|
161
164
|
headers,
|
|
162
165
|
withCredentials = 'same-origin',
|
|
163
166
|
fetchOptions,
|
|
167
|
+
maxContentLength,
|
|
168
|
+
maxBodyLength,
|
|
164
169
|
} = resolveConfig(config);
|
|
165
170
|
|
|
171
|
+
const hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;
|
|
172
|
+
const hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;
|
|
173
|
+
|
|
166
174
|
let _fetch = envFetch || fetch;
|
|
167
175
|
|
|
168
176
|
responseType = responseType ? (responseType + '').toLowerCase() : 'text';
|
|
@@ -184,6 +192,41 @@ const factory = (env) => {
|
|
|
184
192
|
let requestContentLength;
|
|
185
193
|
|
|
186
194
|
try {
|
|
195
|
+
// Enforce maxContentLength for data: URLs up-front so we never materialize
|
|
196
|
+
// an oversized payload. The HTTP adapter applies the same check (see http.js
|
|
197
|
+
// "if (protocol === 'data:')" branch).
|
|
198
|
+
if (hasMaxContentLength && typeof url === 'string' && url.startsWith('data:')) {
|
|
199
|
+
const estimated = estimateDataURLDecodedBytes(url);
|
|
200
|
+
if (estimated > maxContentLength) {
|
|
201
|
+
throw new AxiosError(
|
|
202
|
+
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
203
|
+
AxiosError.ERR_BAD_RESPONSE,
|
|
204
|
+
config,
|
|
205
|
+
request
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// Enforce maxBodyLength against the outbound request body before dispatch.
|
|
211
|
+
// Mirrors http.js behavior (ERR_BAD_REQUEST / 'Request body larger than
|
|
212
|
+
// maxBodyLength limit'). Skip when the body length cannot be determined
|
|
213
|
+
// (e.g. a live ReadableStream supplied by the caller).
|
|
214
|
+
if (hasMaxBodyLength && method !== 'get' && method !== 'head') {
|
|
215
|
+
const outboundLength = await resolveBodyLength(headers, data);
|
|
216
|
+
if (
|
|
217
|
+
typeof outboundLength === 'number' &&
|
|
218
|
+
isFinite(outboundLength) &&
|
|
219
|
+
outboundLength > maxBodyLength
|
|
220
|
+
) {
|
|
221
|
+
throw new AxiosError(
|
|
222
|
+
'Request body larger than maxBodyLength limit',
|
|
223
|
+
AxiosError.ERR_BAD_REQUEST,
|
|
224
|
+
config,
|
|
225
|
+
request
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
187
230
|
if (
|
|
188
231
|
onUploadProgress &&
|
|
189
232
|
supportsRequestStream &&
|
|
@@ -221,6 +264,22 @@ const factory = (env) => {
|
|
|
221
264
|
// see https://github.com/cloudflare/workerd/issues/902
|
|
222
265
|
const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;
|
|
223
266
|
|
|
267
|
+
// If data is FormData and Content-Type is multipart/form-data without boundary,
|
|
268
|
+
// delete it so fetch can set it correctly with the boundary
|
|
269
|
+
if (utils.isFormData(data)) {
|
|
270
|
+
const contentType = headers.getContentType();
|
|
271
|
+
if (
|
|
272
|
+
contentType &&
|
|
273
|
+
/^multipart\/form-data/i.test(contentType) &&
|
|
274
|
+
!/boundary=/i.test(contentType)
|
|
275
|
+
) {
|
|
276
|
+
headers.delete('content-type');
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)
|
|
281
|
+
headers.set('User-Agent', 'axios/' + VERSION, false);
|
|
282
|
+
|
|
224
283
|
const resolvedOptions = {
|
|
225
284
|
...fetchOptions,
|
|
226
285
|
signal: composedSignal,
|
|
@@ -237,10 +296,28 @@ const factory = (env) => {
|
|
|
237
296
|
? _fetch(request, fetchOptions)
|
|
238
297
|
: _fetch(url, resolvedOptions));
|
|
239
298
|
|
|
299
|
+
// Cheap pre-check: if the server honestly declares a content-length that
|
|
300
|
+
// already exceeds the cap, reject before we start streaming.
|
|
301
|
+
if (hasMaxContentLength) {
|
|
302
|
+
const declaredLength = utils.toFiniteNumber(response.headers.get('content-length'));
|
|
303
|
+
if (declaredLength != null && declaredLength > maxContentLength) {
|
|
304
|
+
throw new AxiosError(
|
|
305
|
+
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
306
|
+
AxiosError.ERR_BAD_RESPONSE,
|
|
307
|
+
config,
|
|
308
|
+
request
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
240
313
|
const isStreamResponse =
|
|
241
314
|
supportsResponseStream && (responseType === 'stream' || responseType === 'response');
|
|
242
315
|
|
|
243
|
-
if (
|
|
316
|
+
if (
|
|
317
|
+
supportsResponseStream &&
|
|
318
|
+
response.body &&
|
|
319
|
+
(onDownloadProgress || hasMaxContentLength || (isStreamResponse && unsubscribe))
|
|
320
|
+
) {
|
|
244
321
|
const options = {};
|
|
245
322
|
|
|
246
323
|
['status', 'statusText', 'headers'].forEach((prop) => {
|
|
@@ -257,8 +334,24 @@ const factory = (env) => {
|
|
|
257
334
|
)) ||
|
|
258
335
|
[];
|
|
259
336
|
|
|
337
|
+
let bytesRead = 0;
|
|
338
|
+
const onChunkProgress = (loadedBytes) => {
|
|
339
|
+
if (hasMaxContentLength) {
|
|
340
|
+
bytesRead = loadedBytes;
|
|
341
|
+
if (bytesRead > maxContentLength) {
|
|
342
|
+
throw new AxiosError(
|
|
343
|
+
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
344
|
+
AxiosError.ERR_BAD_RESPONSE,
|
|
345
|
+
config,
|
|
346
|
+
request
|
|
347
|
+
);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
onProgress && onProgress(loadedBytes);
|
|
351
|
+
};
|
|
352
|
+
|
|
260
353
|
response = new Response(
|
|
261
|
-
trackStream(response.body, DEFAULT_CHUNK_SIZE,
|
|
354
|
+
trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => {
|
|
262
355
|
flush && flush();
|
|
263
356
|
unsubscribe && unsubscribe();
|
|
264
357
|
}),
|
|
@@ -273,6 +366,33 @@ const factory = (env) => {
|
|
|
273
366
|
config
|
|
274
367
|
);
|
|
275
368
|
|
|
369
|
+
// Fallback enforcement for environments without ReadableStream support
|
|
370
|
+
// (legacy runtimes). Detect materialized size from typed output; skip
|
|
371
|
+
// streams/Response passthrough since the user will read those themselves.
|
|
372
|
+
if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) {
|
|
373
|
+
let materializedSize;
|
|
374
|
+
if (responseData != null) {
|
|
375
|
+
if (typeof responseData.byteLength === 'number') {
|
|
376
|
+
materializedSize = responseData.byteLength;
|
|
377
|
+
} else if (typeof responseData.size === 'number') {
|
|
378
|
+
materializedSize = responseData.size;
|
|
379
|
+
} else if (typeof responseData === 'string') {
|
|
380
|
+
materializedSize =
|
|
381
|
+
typeof TextEncoder === 'function'
|
|
382
|
+
? new TextEncoder().encode(responseData).byteLength
|
|
383
|
+
: responseData.length;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
if (typeof materializedSize === 'number' && materializedSize > maxContentLength) {
|
|
387
|
+
throw new AxiosError(
|
|
388
|
+
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
389
|
+
AxiosError.ERR_BAD_RESPONSE,
|
|
390
|
+
config,
|
|
391
|
+
request
|
|
392
|
+
);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
276
396
|
!isStreamResponse && unsubscribe && unsubscribe();
|
|
277
397
|
|
|
278
398
|
return await new Promise((resolve, reject) => {
|
|
@@ -288,6 +408,17 @@ const factory = (env) => {
|
|
|
288
408
|
} catch (err) {
|
|
289
409
|
unsubscribe && unsubscribe();
|
|
290
410
|
|
|
411
|
+
// Safari can surface fetch aborts as a DOMException-like object whose
|
|
412
|
+
// branded getters throw. Prefer our composed signal reason before reading
|
|
413
|
+
// the caught error, preserving timeout vs cancellation semantics.
|
|
414
|
+
if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError) {
|
|
415
|
+
const canceledError = composedSignal.reason;
|
|
416
|
+
canceledError.config = config;
|
|
417
|
+
request && (canceledError.request = request);
|
|
418
|
+
err !== canceledError && (canceledError.cause = err);
|
|
419
|
+
throw canceledError;
|
|
420
|
+
}
|
|
421
|
+
|
|
291
422
|
if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {
|
|
292
423
|
throw Object.assign(
|
|
293
424
|
new AxiosError(
|