@nocobase/plugin-ai-gigachat 2.3.0-beta.13 → 2.3.0-beta.15
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/dist/externalVersion.js +5 -5
- package/dist/node_modules/gigachat/package.json +1 -1
- package/dist/node_modules/langchain-gigachat/package.json +1 -1
- package/package.json +2 -2
- package/dist/node_modules/gigachat/node_modules/axios/dist/axios.js +0 -5249
- package/dist/node_modules/gigachat/node_modules/axios/dist/axios.min.js +0 -5
- package/dist/node_modules/gigachat/node_modules/axios/dist/browser/axios.cjs +0 -5146
- package/dist/node_modules/gigachat/node_modules/axios/dist/esm/axios.js +0 -5167
- package/dist/node_modules/gigachat/node_modules/axios/dist/esm/axios.min.js +0 -3
- package/dist/node_modules/gigachat/node_modules/axios/dist/node/axios.cjs +0 -5996
- package/dist/node_modules/gigachat/node_modules/axios/index.d.cts +0 -738
- package/dist/node_modules/gigachat/node_modules/axios/index.d.ts +0 -755
- package/dist/node_modules/gigachat/node_modules/axios/index.js +0 -45
- package/dist/node_modules/gigachat/node_modules/axios/lib/adapters/adapters.js +0 -132
- package/dist/node_modules/gigachat/node_modules/axios/lib/adapters/fetch.js +0 -643
- package/dist/node_modules/gigachat/node_modules/axios/lib/adapters/http.js +0 -1417
- package/dist/node_modules/gigachat/node_modules/axios/lib/adapters/xhr.js +0 -228
- package/dist/node_modules/gigachat/node_modules/axios/lib/axios.js +0 -89
- package/dist/node_modules/gigachat/node_modules/axios/lib/cancel/CancelToken.js +0 -135
- package/dist/node_modules/gigachat/node_modules/axios/lib/cancel/CanceledError.js +0 -22
- package/dist/node_modules/gigachat/node_modules/axios/lib/cancel/isCancel.js +0 -5
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/Axios.js +0 -283
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/AxiosError.js +0 -188
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/AxiosHeaders.js +0 -351
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/InterceptorManager.js +0 -72
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/buildFullPath.js +0 -50
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/dispatchRequest.js +0 -89
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/mergeConfig.js +0 -159
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/settle.js +0 -27
- package/dist/node_modules/gigachat/node_modules/axios/lib/core/transformData.js +0 -28
- package/dist/node_modules/gigachat/node_modules/axios/lib/defaults/index.js +0 -177
- package/dist/node_modules/gigachat/node_modules/axios/lib/defaults/transitional.js +0 -10
- package/dist/node_modules/gigachat/node_modules/axios/lib/env/classes/FormData.js +0 -2
- package/dist/node_modules/gigachat/node_modules/axios/lib/env/data.js +0 -1
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/AxiosTransformStream.js +0 -156
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +0 -59
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/Http2Sessions.js +0 -119
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/HttpStatusCode.js +0 -77
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js +0 -29
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/bind.js +0 -14
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/buildURL.js +0 -69
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/callbackify.js +0 -18
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/combineURLs.js +0 -15
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/composeSignals.js +0 -57
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/cookies.js +0 -64
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/deprecatedMethod.js +0 -31
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/estimateDataURLDecodedBytes.js +0 -105
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/formDataToJSON.js +0 -119
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/formDataToStream.js +0 -119
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/fromDataURI.js +0 -68
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/isAbsoluteURL.js +0 -19
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/isAxiosError.js +0 -14
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/isURLSameOrigin.js +0 -16
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/null.js +0 -2
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/parseHeaders.js +0 -69
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/parseProtocol.js +0 -6
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/progressEventReducer.js +0 -54
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/readBlob.js +0 -15
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/resolveConfig.js +0 -119
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/sanitizeHeaderValue.js +0 -60
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/shouldBypassProxy.js +0 -210
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/speedometer.js +0 -55
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/spread.js +0 -28
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/throttle.js +0 -44
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/toFormData.js +0 -285
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/toURLEncodedForm.js +0 -19
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/trackStream.js +0 -89
- package/dist/node_modules/gigachat/node_modules/axios/lib/helpers/validator.js +0 -112
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/browser/classes/Blob.js +0 -3
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/browser/classes/FormData.js +0 -3
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js +0 -4
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/browser/index.js +0 -13
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/common/utils.js +0 -52
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/index.js +0 -7
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/node/classes/FormData.js +0 -3
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/node/classes/URLSearchParams.js +0 -4
- package/dist/node_modules/gigachat/node_modules/axios/lib/platform/node/index.js +0 -37
- package/dist/node_modules/gigachat/node_modules/axios/lib/utils.js +0 -1017
- package/dist/node_modules/gigachat/node_modules/axios/package.json +0 -201
- package/dist/node_modules/gigachat/node_modules/follow-redirects/debug.js +0 -15
- package/dist/node_modules/gigachat/node_modules/follow-redirects/http.js +0 -1
- package/dist/node_modules/gigachat/node_modules/follow-redirects/https.js +0 -1
- package/dist/node_modules/gigachat/node_modules/follow-redirects/index.js +0 -709
- package/dist/node_modules/gigachat/node_modules/follow-redirects/package.json +0 -58
- package/dist/node_modules/gigachat/node_modules/proxy-from-env/index.cjs +0 -105
- package/dist/node_modules/gigachat/node_modules/proxy-from-env/index.js +0 -103
- package/dist/node_modules/gigachat/node_modules/proxy-from-env/package.json +0 -43
|
@@ -1,643 +0,0 @@
|
|
|
1
|
-
import platform from '../platform/index.js';
|
|
2
|
-
import utils from '../utils.js';
|
|
3
|
-
import AxiosError from '../core/AxiosError.js';
|
|
4
|
-
import composeSignals from '../helpers/composeSignals.js';
|
|
5
|
-
import { trackStream } from '../helpers/trackStream.js';
|
|
6
|
-
import AxiosHeaders from '../core/AxiosHeaders.js';
|
|
7
|
-
import {
|
|
8
|
-
progressEventReducer,
|
|
9
|
-
progressEventDecorator,
|
|
10
|
-
asyncDecorator,
|
|
11
|
-
} from '../helpers/progressEventReducer.js';
|
|
12
|
-
import resolveConfig from '../helpers/resolveConfig.js';
|
|
13
|
-
import settle from '../core/settle.js';
|
|
14
|
-
import estimateDataURLDecodedBytes from '../helpers/estimateDataURLDecodedBytes.js';
|
|
15
|
-
import { VERSION } from '../env/data.js';
|
|
16
|
-
import { toByteStringHeaderObject } from '../helpers/sanitizeHeaderValue.js';
|
|
17
|
-
|
|
18
|
-
const DEFAULT_CHUNK_SIZE = 64 * 1024;
|
|
19
|
-
|
|
20
|
-
const { isFunction } = utils;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Encode a UTF-8 string to a Latin-1 byte string for use with btoa().
|
|
24
|
-
* This is a modern replacement for the deprecated unescape(encodeURIComponent(str)) pattern.
|
|
25
|
-
*
|
|
26
|
-
* @param {string} str The string to encode
|
|
27
|
-
*
|
|
28
|
-
* @returns {string} UTF-8 bytes as a Latin-1 string
|
|
29
|
-
*/
|
|
30
|
-
const encodeUTF8 = (str) =>
|
|
31
|
-
encodeURIComponent(str).replace(/%([0-9A-F]{2})/gi, (_, hex) =>
|
|
32
|
-
String.fromCharCode(parseInt(hex, 16))
|
|
33
|
-
);
|
|
34
|
-
|
|
35
|
-
// Node's WHATWG URL parser returns `username` and `password` percent-encoded.
|
|
36
|
-
// Decode before composing the `auth` option so credentials such as
|
|
37
|
-
// `my%40email.com:pass` are sent as `my@email.com:pass`. Falls back to the
|
|
38
|
-
// original value for malformed input so a bad encoding never throws.
|
|
39
|
-
const decodeURIComponentSafe = (value) => {
|
|
40
|
-
if (!utils.isString(value)) {
|
|
41
|
-
return value;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
try {
|
|
45
|
-
return decodeURIComponent(value);
|
|
46
|
-
} catch (error) {
|
|
47
|
-
return value;
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const test = (fn, ...args) => {
|
|
52
|
-
try {
|
|
53
|
-
return !!fn(...args);
|
|
54
|
-
} catch (e) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const maybeWithAuthCredentials = (url) => {
|
|
60
|
-
const protocolIndex = url.indexOf('://');
|
|
61
|
-
let urlToCheck = url;
|
|
62
|
-
if (protocolIndex !== -1) {
|
|
63
|
-
urlToCheck = urlToCheck.slice(protocolIndex + 3);
|
|
64
|
-
}
|
|
65
|
-
return urlToCheck.includes('@') || urlToCheck.includes(':');
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const factory = (env) => {
|
|
69
|
-
const globalObject =
|
|
70
|
-
utils.global !== undefined && utils.global !== null
|
|
71
|
-
? utils.global
|
|
72
|
-
: globalThis;
|
|
73
|
-
const { ReadableStream, TextEncoder } = globalObject;
|
|
74
|
-
|
|
75
|
-
env = utils.merge.call(
|
|
76
|
-
{
|
|
77
|
-
skipUndefined: true,
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
Request: globalObject.Request,
|
|
81
|
-
Response: globalObject.Response,
|
|
82
|
-
},
|
|
83
|
-
env
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
const { fetch: envFetch, Request, Response } = env;
|
|
87
|
-
const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';
|
|
88
|
-
const isRequestSupported = isFunction(Request);
|
|
89
|
-
const isResponseSupported = isFunction(Response);
|
|
90
|
-
|
|
91
|
-
if (!isFetchSupported) {
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);
|
|
96
|
-
|
|
97
|
-
const encodeText =
|
|
98
|
-
isFetchSupported &&
|
|
99
|
-
(typeof TextEncoder === 'function'
|
|
100
|
-
? (
|
|
101
|
-
(encoder) => (str) =>
|
|
102
|
-
encoder.encode(str)
|
|
103
|
-
)(new TextEncoder())
|
|
104
|
-
: async (str) => new Uint8Array(await new Request(str).arrayBuffer()));
|
|
105
|
-
|
|
106
|
-
const supportsRequestStream =
|
|
107
|
-
isRequestSupported &&
|
|
108
|
-
isReadableStreamSupported &&
|
|
109
|
-
test(() => {
|
|
110
|
-
let duplexAccessed = false;
|
|
111
|
-
|
|
112
|
-
const request = new Request(platform.origin, {
|
|
113
|
-
body: new ReadableStream(),
|
|
114
|
-
method: 'POST',
|
|
115
|
-
get duplex() {
|
|
116
|
-
duplexAccessed = true;
|
|
117
|
-
return 'half';
|
|
118
|
-
},
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
const hasContentType = request.headers.has('Content-Type');
|
|
122
|
-
|
|
123
|
-
if (request.body != null) {
|
|
124
|
-
request.body.cancel();
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return duplexAccessed && !hasContentType;
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
const supportsResponseStream =
|
|
131
|
-
isResponseSupported &&
|
|
132
|
-
isReadableStreamSupported &&
|
|
133
|
-
test(() => utils.isReadableStream(new Response('').body));
|
|
134
|
-
|
|
135
|
-
const resolvers = {
|
|
136
|
-
stream: supportsResponseStream && ((res) => res.body),
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
isFetchSupported &&
|
|
140
|
-
(() => {
|
|
141
|
-
['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach((type) => {
|
|
142
|
-
!resolvers[type] &&
|
|
143
|
-
(resolvers[type] = (res, config) => {
|
|
144
|
-
let method = res && res[type];
|
|
145
|
-
|
|
146
|
-
if (method) {
|
|
147
|
-
return method.call(res);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
throw new AxiosError(
|
|
151
|
-
`Response type '${type}' is not supported`,
|
|
152
|
-
AxiosError.ERR_NOT_SUPPORT,
|
|
153
|
-
config
|
|
154
|
-
);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
})();
|
|
158
|
-
|
|
159
|
-
const getBodyLength = async (body) => {
|
|
160
|
-
if (body == null) {
|
|
161
|
-
return 0;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
if (utils.isBlob(body)) {
|
|
165
|
-
return body.size;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
if (utils.isSpecCompliantForm(body)) {
|
|
169
|
-
const _request = new Request(platform.origin, {
|
|
170
|
-
method: 'POST',
|
|
171
|
-
body,
|
|
172
|
-
});
|
|
173
|
-
return (await _request.arrayBuffer()).byteLength;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {
|
|
177
|
-
return body.byteLength;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
if (utils.isURLSearchParams(body)) {
|
|
181
|
-
body = body + '';
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (utils.isString(body)) {
|
|
185
|
-
return (await encodeText(body)).byteLength;
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const resolveBodyLength = async (headers, body) => {
|
|
190
|
-
const length = utils.toFiniteNumber(headers.getContentLength());
|
|
191
|
-
|
|
192
|
-
return length == null ? getBodyLength(body) : length;
|
|
193
|
-
};
|
|
194
|
-
|
|
195
|
-
return async (config) => {
|
|
196
|
-
let {
|
|
197
|
-
url,
|
|
198
|
-
method,
|
|
199
|
-
data,
|
|
200
|
-
signal,
|
|
201
|
-
cancelToken,
|
|
202
|
-
timeout,
|
|
203
|
-
onDownloadProgress,
|
|
204
|
-
onUploadProgress,
|
|
205
|
-
responseType,
|
|
206
|
-
headers,
|
|
207
|
-
withCredentials = 'same-origin',
|
|
208
|
-
fetchOptions,
|
|
209
|
-
maxContentLength,
|
|
210
|
-
maxBodyLength,
|
|
211
|
-
} = resolveConfig(config);
|
|
212
|
-
|
|
213
|
-
const hasMaxContentLength = utils.isNumber(maxContentLength) && maxContentLength > -1;
|
|
214
|
-
const hasMaxBodyLength = utils.isNumber(maxBodyLength) && maxBodyLength > -1;
|
|
215
|
-
const own = (key) => (utils.hasOwnProp(config, key) ? config[key] : undefined);
|
|
216
|
-
|
|
217
|
-
let _fetch = envFetch || fetch;
|
|
218
|
-
|
|
219
|
-
responseType = responseType ? (responseType + '').toLowerCase() : 'text';
|
|
220
|
-
|
|
221
|
-
let composedSignal = composeSignals(
|
|
222
|
-
[signal, cancelToken && cancelToken.toAbortSignal()],
|
|
223
|
-
timeout
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
let request = null;
|
|
227
|
-
|
|
228
|
-
const unsubscribe =
|
|
229
|
-
composedSignal &&
|
|
230
|
-
composedSignal.unsubscribe &&
|
|
231
|
-
(() => {
|
|
232
|
-
composedSignal.unsubscribe();
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
let requestContentLength;
|
|
236
|
-
|
|
237
|
-
// AxiosError we raise while the request body is being streamed. Captured
|
|
238
|
-
// by identity so the catch block can surface it directly, regardless of
|
|
239
|
-
// how the runtime wraps the resulting fetch rejection (undici exposes it
|
|
240
|
-
// as `err.cause`; some browsers drop the original error entirely).
|
|
241
|
-
let pendingBodyError = null;
|
|
242
|
-
|
|
243
|
-
const maxBodyLengthError = () =>
|
|
244
|
-
new AxiosError(
|
|
245
|
-
'Request body larger than maxBodyLength limit',
|
|
246
|
-
AxiosError.ERR_BAD_REQUEST,
|
|
247
|
-
config,
|
|
248
|
-
request
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
try {
|
|
252
|
-
// HTTP basic authentication
|
|
253
|
-
let auth = undefined;
|
|
254
|
-
const configAuth = own('auth');
|
|
255
|
-
|
|
256
|
-
if (configAuth) {
|
|
257
|
-
const username = utils.getSafeProp(configAuth, 'username') || '';
|
|
258
|
-
const password = utils.getSafeProp(configAuth, 'password') || '';
|
|
259
|
-
auth = {
|
|
260
|
-
username,
|
|
261
|
-
password
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
if (maybeWithAuthCredentials(url)) {
|
|
266
|
-
const parsedURL = new URL(url, platform.origin);
|
|
267
|
-
|
|
268
|
-
if (!auth && (parsedURL.username || parsedURL.password)) {
|
|
269
|
-
const urlUsername = decodeURIComponentSafe(parsedURL.username);
|
|
270
|
-
const urlPassword = decodeURIComponentSafe(parsedURL.password);
|
|
271
|
-
auth = {
|
|
272
|
-
username: urlUsername,
|
|
273
|
-
password: urlPassword
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
if (parsedURL.username || parsedURL.password) {
|
|
278
|
-
parsedURL.username = '';
|
|
279
|
-
parsedURL.password = '';
|
|
280
|
-
url = parsedURL.href;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
if (auth) {
|
|
285
|
-
headers.delete('authorization');
|
|
286
|
-
headers.set(
|
|
287
|
-
'Authorization',
|
|
288
|
-
'Basic ' + btoa(encodeUTF8((auth.username || '') + ':' + (auth.password || '')))
|
|
289
|
-
);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// Enforce maxContentLength for data: URLs up-front so we never materialize
|
|
293
|
-
// an oversized payload. The HTTP adapter applies the same check (see http.js
|
|
294
|
-
// "if (protocol === 'data:')" branch).
|
|
295
|
-
if (hasMaxContentLength && typeof url === 'string' && url.startsWith('data:')) {
|
|
296
|
-
const estimated = estimateDataURLDecodedBytes(url);
|
|
297
|
-
if (estimated > maxContentLength) {
|
|
298
|
-
throw new AxiosError(
|
|
299
|
-
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
300
|
-
AxiosError.ERR_BAD_RESPONSE,
|
|
301
|
-
config,
|
|
302
|
-
request
|
|
303
|
-
);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Enforce maxBodyLength against known-size bodies before dispatch using
|
|
308
|
-
// the body's *actual* size — never a caller-declared Content-Length,
|
|
309
|
-
// which could under-report to slip an oversized body past the check.
|
|
310
|
-
// Unknown-size streams return undefined here and are counted per-chunk
|
|
311
|
-
// below as fetch consumes them.
|
|
312
|
-
if (hasMaxBodyLength && method !== 'get' && method !== 'head') {
|
|
313
|
-
const outboundLength = await getBodyLength(data);
|
|
314
|
-
if (typeof outboundLength === 'number' && isFinite(outboundLength)) {
|
|
315
|
-
requestContentLength = outboundLength;
|
|
316
|
-
if (outboundLength > maxBodyLength) {
|
|
317
|
-
throw maxBodyLengthError();
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
// A streamed body under maxBodyLength must be counted as fetch consumes
|
|
323
|
-
// it; its size is never trusted from a caller-declared Content-Length.
|
|
324
|
-
const mustEnforceStreamBody =
|
|
325
|
-
hasMaxBodyLength && (utils.isReadableStream(data) || utils.isStream(data));
|
|
326
|
-
|
|
327
|
-
const trackRequestStream = (stream, onProgress, flush) =>
|
|
328
|
-
trackStream(
|
|
329
|
-
stream,
|
|
330
|
-
DEFAULT_CHUNK_SIZE,
|
|
331
|
-
(loadedBytes) => {
|
|
332
|
-
if (hasMaxBodyLength && loadedBytes > maxBodyLength) {
|
|
333
|
-
throw (pendingBodyError = maxBodyLengthError());
|
|
334
|
-
}
|
|
335
|
-
onProgress && onProgress(loadedBytes);
|
|
336
|
-
},
|
|
337
|
-
flush
|
|
338
|
-
);
|
|
339
|
-
|
|
340
|
-
if (
|
|
341
|
-
supportsRequestStream &&
|
|
342
|
-
method !== 'get' &&
|
|
343
|
-
method !== 'head' &&
|
|
344
|
-
(onUploadProgress || mustEnforceStreamBody)
|
|
345
|
-
) {
|
|
346
|
-
requestContentLength =
|
|
347
|
-
requestContentLength == null ? await resolveBodyLength(headers, data) : requestContentLength;
|
|
348
|
-
|
|
349
|
-
// A declared length of 0 is only trusted to skip the wrap when we are
|
|
350
|
-
// not enforcing a stream limit (which must not rely on that header).
|
|
351
|
-
if (requestContentLength !== 0 || mustEnforceStreamBody) {
|
|
352
|
-
let _request = new Request(url, {
|
|
353
|
-
method: 'POST',
|
|
354
|
-
body: data,
|
|
355
|
-
duplex: 'half',
|
|
356
|
-
});
|
|
357
|
-
|
|
358
|
-
let contentTypeHeader;
|
|
359
|
-
|
|
360
|
-
if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {
|
|
361
|
-
headers.setContentType(contentTypeHeader);
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
if (_request.body) {
|
|
365
|
-
const [onProgress, flush] =
|
|
366
|
-
(onUploadProgress &&
|
|
367
|
-
progressEventDecorator(
|
|
368
|
-
requestContentLength,
|
|
369
|
-
progressEventReducer(asyncDecorator(onUploadProgress))
|
|
370
|
-
)) ||
|
|
371
|
-
[];
|
|
372
|
-
|
|
373
|
-
data = trackRequestStream(_request.body, onProgress, flush);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
} else if (
|
|
377
|
-
mustEnforceStreamBody &&
|
|
378
|
-
!isRequestSupported &&
|
|
379
|
-
isReadableStreamSupported &&
|
|
380
|
-
method !== 'get' &&
|
|
381
|
-
method !== 'head'
|
|
382
|
-
) {
|
|
383
|
-
data = trackRequestStream(data);
|
|
384
|
-
} else if (
|
|
385
|
-
mustEnforceStreamBody &&
|
|
386
|
-
isRequestSupported &&
|
|
387
|
-
!supportsRequestStream &&
|
|
388
|
-
method !== 'get' &&
|
|
389
|
-
method !== 'head'
|
|
390
|
-
) {
|
|
391
|
-
throw new AxiosError(
|
|
392
|
-
'Stream request bodies are not supported by the current fetch implementation',
|
|
393
|
-
AxiosError.ERR_NOT_SUPPORT,
|
|
394
|
-
config,
|
|
395
|
-
request
|
|
396
|
-
);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
if (!utils.isString(withCredentials)) {
|
|
400
|
-
withCredentials = withCredentials ? 'include' : 'omit';
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
// Cloudflare Workers throws when credentials are defined
|
|
404
|
-
// see https://github.com/cloudflare/workerd/issues/902
|
|
405
|
-
const isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;
|
|
406
|
-
|
|
407
|
-
// If data is FormData and Content-Type is multipart/form-data without boundary,
|
|
408
|
-
// delete it so fetch can set it correctly with the boundary
|
|
409
|
-
if (utils.isFormData(data)) {
|
|
410
|
-
const contentType = headers.getContentType();
|
|
411
|
-
if (
|
|
412
|
-
contentType &&
|
|
413
|
-
/^multipart\/form-data/i.test(contentType) &&
|
|
414
|
-
!/boundary=/i.test(contentType)
|
|
415
|
-
) {
|
|
416
|
-
headers.delete('content-type');
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// Set User-Agent header if not already set (fetch defaults to 'node' in Node.js)
|
|
421
|
-
headers.set('User-Agent', 'axios/' + VERSION, false);
|
|
422
|
-
|
|
423
|
-
const resolvedOptions = {
|
|
424
|
-
...fetchOptions,
|
|
425
|
-
signal: composedSignal,
|
|
426
|
-
method: method.toUpperCase(),
|
|
427
|
-
headers: toByteStringHeaderObject(headers.normalize()),
|
|
428
|
-
body: data,
|
|
429
|
-
duplex: 'half',
|
|
430
|
-
credentials: isCredentialsSupported ? withCredentials : undefined,
|
|
431
|
-
};
|
|
432
|
-
|
|
433
|
-
request = isRequestSupported && new Request(url, resolvedOptions);
|
|
434
|
-
|
|
435
|
-
let response = await (isRequestSupported
|
|
436
|
-
? _fetch(request, fetchOptions)
|
|
437
|
-
: _fetch(url, resolvedOptions));
|
|
438
|
-
|
|
439
|
-
const responseHeaders = AxiosHeaders.from(response.headers);
|
|
440
|
-
|
|
441
|
-
// Cheap pre-check: if the server honestly declares a content-length that
|
|
442
|
-
// already exceeds the cap, reject before we start streaming.
|
|
443
|
-
if (hasMaxContentLength) {
|
|
444
|
-
const declaredLength = utils.toFiniteNumber(responseHeaders.getContentLength());
|
|
445
|
-
if (declaredLength != null && declaredLength > maxContentLength) {
|
|
446
|
-
throw new AxiosError(
|
|
447
|
-
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
448
|
-
AxiosError.ERR_BAD_RESPONSE,
|
|
449
|
-
config,
|
|
450
|
-
request
|
|
451
|
-
);
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
const isStreamResponse =
|
|
456
|
-
supportsResponseStream && (responseType === 'stream' || responseType === 'response');
|
|
457
|
-
|
|
458
|
-
if (
|
|
459
|
-
supportsResponseStream &&
|
|
460
|
-
response.body &&
|
|
461
|
-
(onDownloadProgress || hasMaxContentLength || (isStreamResponse && unsubscribe))
|
|
462
|
-
) {
|
|
463
|
-
const options = {};
|
|
464
|
-
|
|
465
|
-
['status', 'statusText', 'headers'].forEach((prop) => {
|
|
466
|
-
options[prop] = response[prop];
|
|
467
|
-
});
|
|
468
|
-
|
|
469
|
-
const responseContentLength = utils.toFiniteNumber(responseHeaders.getContentLength());
|
|
470
|
-
|
|
471
|
-
const [onProgress, flush] =
|
|
472
|
-
(onDownloadProgress &&
|
|
473
|
-
progressEventDecorator(
|
|
474
|
-
responseContentLength,
|
|
475
|
-
progressEventReducer(asyncDecorator(onDownloadProgress), true)
|
|
476
|
-
)) ||
|
|
477
|
-
[];
|
|
478
|
-
|
|
479
|
-
let bytesRead = 0;
|
|
480
|
-
const onChunkProgress = (loadedBytes) => {
|
|
481
|
-
if (hasMaxContentLength) {
|
|
482
|
-
bytesRead = loadedBytes;
|
|
483
|
-
if (bytesRead > maxContentLength) {
|
|
484
|
-
throw new AxiosError(
|
|
485
|
-
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
486
|
-
AxiosError.ERR_BAD_RESPONSE,
|
|
487
|
-
config,
|
|
488
|
-
request
|
|
489
|
-
);
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
onProgress && onProgress(loadedBytes);
|
|
493
|
-
};
|
|
494
|
-
|
|
495
|
-
response = new Response(
|
|
496
|
-
trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => {
|
|
497
|
-
flush && flush();
|
|
498
|
-
unsubscribe && unsubscribe();
|
|
499
|
-
}),
|
|
500
|
-
options
|
|
501
|
-
);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
responseType = responseType || 'text';
|
|
505
|
-
|
|
506
|
-
let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](
|
|
507
|
-
response,
|
|
508
|
-
config
|
|
509
|
-
);
|
|
510
|
-
|
|
511
|
-
// Fallback enforcement for environments without ReadableStream support
|
|
512
|
-
// (legacy runtimes). Detect materialized size from typed output; skip
|
|
513
|
-
// streams/Response passthrough since the user will read those themselves.
|
|
514
|
-
if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) {
|
|
515
|
-
let materializedSize;
|
|
516
|
-
if (responseData != null) {
|
|
517
|
-
if (typeof responseData.byteLength === 'number') {
|
|
518
|
-
materializedSize = responseData.byteLength;
|
|
519
|
-
} else if (typeof responseData.size === 'number') {
|
|
520
|
-
materializedSize = responseData.size;
|
|
521
|
-
} else if (typeof responseData === 'string') {
|
|
522
|
-
materializedSize =
|
|
523
|
-
typeof TextEncoder === 'function'
|
|
524
|
-
? new TextEncoder().encode(responseData).byteLength
|
|
525
|
-
: responseData.length;
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
if (typeof materializedSize === 'number' && materializedSize > maxContentLength) {
|
|
529
|
-
throw new AxiosError(
|
|
530
|
-
'maxContentLength size of ' + maxContentLength + ' exceeded',
|
|
531
|
-
AxiosError.ERR_BAD_RESPONSE,
|
|
532
|
-
config,
|
|
533
|
-
request
|
|
534
|
-
);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
|
|
538
|
-
!isStreamResponse && unsubscribe && unsubscribe();
|
|
539
|
-
|
|
540
|
-
return await new Promise((resolve, reject) => {
|
|
541
|
-
settle(resolve, reject, {
|
|
542
|
-
data: responseData,
|
|
543
|
-
headers: AxiosHeaders.from(response.headers),
|
|
544
|
-
status: response.status,
|
|
545
|
-
statusText: response.statusText,
|
|
546
|
-
config,
|
|
547
|
-
request,
|
|
548
|
-
});
|
|
549
|
-
});
|
|
550
|
-
} catch (err) {
|
|
551
|
-
unsubscribe && unsubscribe();
|
|
552
|
-
|
|
553
|
-
// Safari can surface fetch aborts as a DOMException-like object whose
|
|
554
|
-
// branded getters throw. Prefer our composed signal reason before reading
|
|
555
|
-
// the caught error, preserving timeout vs cancellation semantics.
|
|
556
|
-
if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError) {
|
|
557
|
-
const canceledError = composedSignal.reason;
|
|
558
|
-
canceledError.config = config;
|
|
559
|
-
request && (canceledError.request = request);
|
|
560
|
-
if (err !== canceledError) {
|
|
561
|
-
// Non-enumerable to match native Error `cause` semantics so loggers
|
|
562
|
-
// don't recurse into circular fetch internals (see #7205).
|
|
563
|
-
Object.defineProperty(canceledError, 'cause', {
|
|
564
|
-
__proto__: null,
|
|
565
|
-
value: err,
|
|
566
|
-
writable: true,
|
|
567
|
-
enumerable: false,
|
|
568
|
-
configurable: true,
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
throw canceledError;
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
// Surface a maxBodyLength violation we raised while the request body was
|
|
575
|
-
// being streamed. Matching by identity (rather than reading
|
|
576
|
-
// `err.cause.isAxiosError`) keeps the error deterministic across runtimes
|
|
577
|
-
// and avoids both prototype-pollution reads and mis-attributing a foreign
|
|
578
|
-
// AxiosError that merely happened to land in `err.cause`.
|
|
579
|
-
if (pendingBodyError) {
|
|
580
|
-
request && !pendingBodyError.request && (pendingBodyError.request = request);
|
|
581
|
-
throw pendingBodyError;
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
// Re-throw AxiosErrors we raised synchronously (data: URL / content-length
|
|
585
|
-
// pre-checks, response size enforcement) without re-wrapping them.
|
|
586
|
-
if (err instanceof AxiosError) {
|
|
587
|
-
request && !err.request && (err.request = request);
|
|
588
|
-
throw err;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {
|
|
592
|
-
const networkError = new AxiosError(
|
|
593
|
-
'Network Error',
|
|
594
|
-
AxiosError.ERR_NETWORK,
|
|
595
|
-
config,
|
|
596
|
-
request,
|
|
597
|
-
err && err.response
|
|
598
|
-
);
|
|
599
|
-
// Non-enumerable to match native Error `cause` semantics so loggers
|
|
600
|
-
// don't recurse into circular fetch internals (see #7205).
|
|
601
|
-
Object.defineProperty(networkError, 'cause', {
|
|
602
|
-
__proto__: null,
|
|
603
|
-
value: err.cause || err,
|
|
604
|
-
writable: true,
|
|
605
|
-
enumerable: false,
|
|
606
|
-
configurable: true,
|
|
607
|
-
});
|
|
608
|
-
throw networkError;
|
|
609
|
-
}
|
|
610
|
-
|
|
611
|
-
throw AxiosError.from(err, err && err.code, config, request, err && err.response);
|
|
612
|
-
}
|
|
613
|
-
};
|
|
614
|
-
};
|
|
615
|
-
|
|
616
|
-
const seedCache = new Map();
|
|
617
|
-
|
|
618
|
-
export const getFetch = (config) => {
|
|
619
|
-
let env = (config && config.env) || {};
|
|
620
|
-
const { fetch, Request, Response } = env;
|
|
621
|
-
const seeds = [Request, Response, fetch];
|
|
622
|
-
|
|
623
|
-
let len = seeds.length,
|
|
624
|
-
i = len,
|
|
625
|
-
seed,
|
|
626
|
-
target,
|
|
627
|
-
map = seedCache;
|
|
628
|
-
|
|
629
|
-
while (i--) {
|
|
630
|
-
seed = seeds[i];
|
|
631
|
-
target = map.get(seed);
|
|
632
|
-
|
|
633
|
-
target === undefined && map.set(seed, (target = i ? new Map() : factory(env)));
|
|
634
|
-
|
|
635
|
-
map = target;
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
return target;
|
|
639
|
-
};
|
|
640
|
-
|
|
641
|
-
const adapter = getFetch();
|
|
642
|
-
|
|
643
|
-
export default adapter;
|