diff --git a/dist/index.cjs b/dist/index.cjs index 491e1b9..4938e0d 100644 --- a/dist/index.cjs +++ b/dist/index.cjs @@ -11104,6 +11104,11 @@ var require_follow_redirects = __commonJS({ } catch (error2) { useNativeURL = error2.code === "ERR_INVALID_URL"; } + var sensitiveHeaders = [ + "Authorization", + "Proxy-Authorization", + "Cookie" + ]; var preservedUrlFields = [ "auth", "host", @@ -11168,6 +11173,7 @@ var require_follow_redirects = __commonJS({ self2.emit("error", cause instanceof RedirectionError ? cause : new RedirectionError({ cause })); } }; + this._headerFilter = new RegExp("^(?:" + sensitiveHeaders.concat(options.sensitiveHeaders).map(escapeRegex).join("|") + ")$", "i"); this._performRequest(); } RedirectableRequest.prototype = Object.create(Writable.prototype); @@ -11305,6 +11311,9 @@ var require_follow_redirects = __commonJS({ if (!options.headers) { options.headers = {}; } + if (!isArray2(options.sensitiveHeaders)) { + options.sensitiveHeaders = []; + } if (options.host) { if (!options.hostname) { options.hostname = options.host; @@ -11410,7 +11419,7 @@ var require_follow_redirects = __commonJS({ this._isRedirect = true; spreadUrlObject(redirectUrl, this._options); if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== "https:" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) { - removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); + removeMatchingHeaders(this._headerFilter, this._options.headers); } if (isFunction3(beforeRedirect)) { var responseDetails = { @@ -11559,6 +11568,9 @@ var require_follow_redirects = __commonJS({ var dot = subdomain.length - domain.length - 1; return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); } + function isArray2(value) { + return value instanceof Array; + } function isString2(value) { return typeof value === "string" || value instanceof String; } @@ -11571,6 +11583,9 @@ var require_follow_redirects = __commonJS({ function isURL(value) { return URL2 && value instanceof URL2; } + function escapeRegex(regex) { + return regex.replace(/[\]\\/()*+?.$]/g, "\\$&"); + } module2.exports = wrap({ http: http3, https: https3 }); module2.exports.wrap = wrap; } @@ -20250,7 +20265,7 @@ var require_env_http_proxy_agent = __commonJS({ var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols(); var ProxyAgent2 = require_proxy_agent(); var Agent = require_agent(); - var DEFAULT_PORTS2 = { + var DEFAULT_PORTS3 = { "http:": 80, "https:": 443 }; @@ -20310,7 +20325,7 @@ var require_env_http_proxy_agent = __commonJS({ #getProxyAgentForUrl(url2) { let { protocol, host: hostname, port } = url2; hostname = hostname.replace(/:\d*$/, "").toLowerCase(); - port = Number.parseInt(port, 10) || DEFAULT_PORTS2[protocol] || 0; + port = Number.parseInt(port, 10) || DEFAULT_PORTS3[protocol] || 0; if (!this.#shouldProxy(hostname, port)) { return this[kNoProxyAgent]; } @@ -30255,9 +30270,14 @@ function getGlobal() { var G = getGlobal(); var FormDataCtor = typeof G.FormData !== "undefined" ? G.FormData : void 0; var isFormData = (thing) => { - let kind; - return thing && (FormDataCtor && thing instanceof FormDataCtor || isFunction(thing.append) && ((kind = kindOf(thing)) === "formdata" || // detect form-data instance - kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]")); + if (!thing) return false; + if (FormDataCtor && thing instanceof FormDataCtor) return true; + const proto = getPrototypeOf(thing); + if (!proto || proto === Object.prototype) return false; + if (!isFunction(thing.append)) return false; + const kind = kindOf(thing); + return kind === "formdata" || // detect form-data instance + kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]"; }; var isURLSearchParams = kindOfTest("URLSearchParams"); var [isReadableStream, isRequest, isResponse, isHeaders] = [ @@ -30316,7 +30336,7 @@ var _global = (() => { return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global; })(); var isContextDefined = (context) => !isUndefined(context) && context !== _global; -function merge() { +function merge(...objs) { const { caseless, skipUndefined } = isContextDefined(this) && this || {}; const result = {}; const assignValue = (val, key) => { @@ -30324,8 +30344,9 @@ function merge() { return; } const targetKey = caseless && findKey(result, key) || key; - if (isPlainObject(result[targetKey]) && isPlainObject(val)) { - result[targetKey] = merge(result[targetKey], val); + const existing = hasOwnProperty(result, targetKey) ? result[targetKey] : void 0; + if (isPlainObject(existing) && isPlainObject(val)) { + result[targetKey] = merge(existing, val); } else if (isPlainObject(val)) { result[targetKey] = merge({}, val); } else if (isArray(val)) { @@ -30334,8 +30355,8 @@ function merge() { result[targetKey] = val; } }; - for (let i = 0, l = arguments.length; i < l; i++) { - arguments[i] && forEach(arguments[i], assignValue); + for (let i = 0, l = objs.length; i < l; i++) { + objs[i] && forEach(objs[i], assignValue); } return result; } @@ -30345,6 +30366,9 @@ var extend = (a, b, thisArg, { allOwnKeys } = {}) => { (val, key) => { if (thisArg && isFunction(val)) { Object.defineProperty(a, key, { + // Null-proto descriptor so a polluted Object.prototype.get cannot + // hijack defineProperty's accessor-vs-data resolution. + __proto__: null, value: bind(val, thisArg), writable: true, enumerable: true, @@ -30352,6 +30376,7 @@ var extend = (a, b, thisArg, { allOwnKeys } = {}) => { }); } else { Object.defineProperty(a, key, { + __proto__: null, value: val, writable: true, enumerable: true, @@ -30372,12 +30397,14 @@ var stripBOM = (content) => { var inherits = (constructor, superConstructor, props, descriptors) => { constructor.prototype = Object.create(superConstructor.prototype, descriptors); Object.defineProperty(constructor.prototype, "constructor", { + __proto__: null, value: constructor, writable: true, enumerable: false, configurable: true }); Object.defineProperty(constructor, "super", { + __proto__: null, value: superConstructor.prototype }); props && Object.assign(constructor.prototype, props); @@ -30466,7 +30493,7 @@ var reduceDescriptors = (obj, reducer) => { }; var freezeMethods = (obj) => { reduceDescriptors(obj, (descriptor, name) => { - if (isFunction(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) { + if (isFunction(obj) && ["arguments", "caller", "callee"].includes(name)) { return false; } const value = obj[name]; @@ -30613,859 +30640,955 @@ var utils_default = { isIterable }; -// node_modules/axios/lib/core/AxiosError.js -var AxiosError = class _AxiosError extends Error { - static from(error2, code, config, request, response, customProps) { - const axiosError = new _AxiosError(error2.message, code || error2.code, config, request, response); - axiosError.cause = error2; - axiosError.name = error2.name; - if (error2.status != null && axiosError.status == null) { - axiosError.status = error2.status; +// node_modules/axios/lib/helpers/parseHeaders.js +var ignoreDuplicateOf = utils_default.toObjectSet([ + "age", + "authorization", + "content-length", + "content-type", + "etag", + "expires", + "from", + "host", + "if-modified-since", + "if-unmodified-since", + "last-modified", + "location", + "max-forwards", + "proxy-authorization", + "referer", + "retry-after", + "user-agent" +]); +var parseHeaders_default = (rawHeaders) => { + const parsed = {}; + let key; + let val; + let i; + rawHeaders && rawHeaders.split("\n").forEach(function parser(line) { + i = line.indexOf(":"); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + if (!key || parsed[key] && ignoreDuplicateOf[key]) { + return; } - customProps && Object.assign(axiosError, customProps); - return axiosError; - } - /** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [config] The config. - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * - * @returns {Error} The created error. - */ - constructor(message, code, config, request, response) { - super(message); - Object.defineProperty(this, "message", { - value: message, - enumerable: true, - writable: true, - configurable: true - }); - this.name = "AxiosError"; - this.isAxiosError = true; - code && (this.code = code); - config && (this.config = config); - request && (this.request = request); - if (response) { - this.response = response; - this.status = response.status; + if (key === "set-cookie") { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ", " + val : val; } - } - toJSON() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: utils_default.toJSONObject(this.config), - code: this.code, - status: this.status - }; - } + }); + return parsed; }; -AxiosError.ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; -AxiosError.ERR_BAD_OPTION = "ERR_BAD_OPTION"; -AxiosError.ECONNABORTED = "ECONNABORTED"; -AxiosError.ETIMEDOUT = "ETIMEDOUT"; -AxiosError.ERR_NETWORK = "ERR_NETWORK"; -AxiosError.ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; -AxiosError.ERR_DEPRECATED = "ERR_DEPRECATED"; -AxiosError.ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; -AxiosError.ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; -AxiosError.ERR_CANCELED = "ERR_CANCELED"; -AxiosError.ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; -AxiosError.ERR_INVALID_URL = "ERR_INVALID_URL"; -var AxiosError_default = AxiosError; - -// node_modules/axios/lib/platform/node/classes/FormData.js -var import_form_data = __toESM(require_form_data(), 1); -var FormData_default = import_form_data.default; -// node_modules/axios/lib/helpers/toFormData.js -function isVisitable(thing) { - return utils_default.isPlainObject(thing) || utils_default.isArray(thing); -} -function removeBrackets(key) { - return utils_default.endsWith(key, "[]") ? key.slice(0, -2) : key; +// node_modules/axios/lib/core/AxiosHeaders.js +var $internals = /* @__PURE__ */ Symbol("internals"); +var INVALID_HEADER_VALUE_CHARS_RE = /[^\x09\x20-\x7E\x80-\xFF]/g; +function trimSPorHTAB(str) { + let start = 0; + let end = str.length; + while (start < end) { + const code = str.charCodeAt(start); + if (code !== 9 && code !== 32) { + break; + } + start += 1; + } + while (end > start) { + const code = str.charCodeAt(end - 1); + if (code !== 9 && code !== 32) { + break; + } + end -= 1; + } + return start === 0 && end === str.length ? str : str.slice(start, end); } -function renderKey(path2, key, dots) { - if (!path2) return key; - return path2.concat(key).map(function each(token, i) { - token = removeBrackets(token); - return !dots && i ? "[" + token + "]" : token; - }).join(dots ? "." : ""); +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); } -function isFlatArray(arr) { - return utils_default.isArray(arr) && !arr.some(isVisitable); +function sanitizeHeaderValue(str) { + return trimSPorHTAB(str.replace(INVALID_HEADER_VALUE_CHARS_RE, "")); } -var predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop) { - return /^is[A-Z]/.test(prop); -}); -function toFormData(obj, formData, options) { - if (!utils_default.isObject(obj)) { - throw new TypeError("target must be an object"); +function normalizeValue(value) { + if (value === false || value == null) { + return value; } - formData = formData || new (FormData_default || FormData)(); - options = utils_default.toFlatObject( - options, - { - metaTokens: true, - dots: false, - indexes: false - }, - false, - function defined(option, source) { - return !utils_default.isUndefined(source[option]); - } - ); - const metaTokens = options.metaTokens; - const visitor = options.visitor || defaultVisitor; - const dots = options.dots; - const indexes = options.indexes; - const _Blob = options.Blob || typeof Blob !== "undefined" && Blob; - const useBlob = _Blob && utils_default.isSpecCompliantForm(formData); - if (!utils_default.isFunction(visitor)) { - throw new TypeError("visitor must be a function"); + return utils_default.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value)); +} +function parseTokens(str) { + const tokens = /* @__PURE__ */ Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + while (match = tokensRE.exec(str)) { + tokens[match[1]] = match[2]; } - function convertValue(value) { - if (value === null) return ""; - if (utils_default.isDate(value)) { - return value.toISOString(); - } - if (utils_default.isBoolean(value)) { - return value.toString(); - } - if (!useBlob && utils_default.isBlob(value)) { - throw new AxiosError_default("Blob is not supported. Use a Buffer instead."); - } - if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) { - return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value); - } - return value; + return tokens; +} +var isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); +function matchHeaderValue(context, value, header, filter2, isHeaderNameFilter) { + if (utils_default.isFunction(filter2)) { + return filter2.call(this, value, header); } - function defaultVisitor(value, key, path2) { - let arr = value; - if (utils_default.isReactNative(formData) && utils_default.isReactNativeBlob(value)) { - formData.append(renderKey(path2, key, dots), convertValue(value)); - return false; - } - if (value && !path2 && typeof value === "object") { - if (utils_default.endsWith(key, "{}")) { - key = metaTokens ? key : key.slice(0, -2); - value = JSON.stringify(value); - } else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, "[]")) && (arr = utils_default.toArray(value))) { - key = removeBrackets(key); - arr.forEach(function each(el, index) { - !(utils_default.isUndefined(el) || el === null) && formData.append( - // eslint-disable-next-line no-nested-ternary - indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + "[]", - convertValue(el) - ); - }); - return false; - } - } - if (isVisitable(value)) { - return true; - } - formData.append(renderKey(path2, key, dots), convertValue(value)); - return false; + if (isHeaderNameFilter) { + value = header; } - const stack = []; - const exposedHelpers = Object.assign(predicates, { - defaultVisitor, - convertValue, - isVisitable - }); - function build(value, path2) { - if (utils_default.isUndefined(value)) return; - if (stack.indexOf(value) !== -1) { - throw Error("Circular reference detected in " + path2.join(".")); - } - stack.push(value); - utils_default.forEach(value, function each(el, key) { - const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(formData, el, utils_default.isString(key) ? key.trim() : key, path2, exposedHelpers); - if (result === true) { - build(el, path2 ? path2.concat(key) : [key]); - } - }); - stack.pop(); + if (!utils_default.isString(value)) return; + if (utils_default.isString(filter2)) { + return value.indexOf(filter2) !== -1; } - if (!utils_default.isObject(obj)) { - throw new TypeError("data must be an object"); + if (utils_default.isRegExp(filter2)) { + return filter2.test(value); } - build(obj); - return formData; } -var toFormData_default = toFormData; - -// node_modules/axios/lib/helpers/AxiosURLSearchParams.js -function encode(str) { - const charMap = { - "!": "%21", - "'": "%27", - "(": "%28", - ")": "%29", - "~": "%7E", - "%20": "+", - "%00": "\0" - }; - return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { - return charMap[match]; +function formatHeader(header) { + return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; }); } -function AxiosURLSearchParams(params, options) { - this._pairs = []; - params && toFormData_default(params, this, options); -} -var prototype = AxiosURLSearchParams.prototype; -prototype.append = function append(name, value) { - this._pairs.push([name, value]); -}; -prototype.toString = function toString2(encoder) { - const _encode = encoder ? function(value) { - return encoder.call(this, value, encode); - } : encode; - return this._pairs.map(function each(pair) { - return _encode(pair[0]) + "=" + _encode(pair[1]); - }, "").join("&"); -}; -var AxiosURLSearchParams_default = AxiosURLSearchParams; - -// node_modules/axios/lib/helpers/buildURL.js -function encode2(val) { - return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+"); +function buildAccessors(obj, header) { + const accessorName = utils_default.toCamelCase(" " + header); + ["get", "set", "has"].forEach((methodName) => { + Object.defineProperty(obj, methodName + accessorName, { + // Null-proto descriptor so a polluted Object.prototype.get cannot turn + // this data descriptor into an accessor descriptor on the way in. + __proto__: null, + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); } -function buildURL(url2, params, options) { - if (!params) { - return url2; - } - const _encode = options && options.encode || encode2; - const _options = utils_default.isFunction(options) ? { - serialize: options - } : options; - const serializeFn = _options && _options.serialize; - let serializedParams; - if (serializeFn) { - serializedParams = serializeFn(params, _options); - } else { - serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, _options).toString(_encode); +var AxiosHeaders = class { + constructor(headers) { + headers && this.set(headers); } - if (serializedParams) { - const hashmarkIndex = url2.indexOf("#"); - if (hashmarkIndex !== -1) { - url2 = url2.slice(0, hashmarkIndex); + set(header, valueOrRewrite, rewrite) { + const self2 = this; + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + if (!lHeader) { + throw new Error("header name must be a non-empty string"); + } + const key = utils_default.findKey(self2, lHeader); + if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) { + self2[key || _header] = normalizeValue(_value); + } } - url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams; + const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + if (utils_default.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders_default(header), valueOrRewrite); + } else if (utils_default.isObject(header) && utils_default.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils_default.isArray(entry)) { + throw TypeError("Object iterator must return a key-value pair"); + } + obj[key = entry[0]] = (dest = obj[key]) ? utils_default.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]] : entry[1]; + } + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + return this; } - return url2; -} - -// node_modules/axios/lib/core/InterceptorManager.js -var InterceptorManager = class { - constructor() { - this.handlers = []; + get(header, parser) { + header = normalizeHeader(header); + if (header) { + const key = utils_default.findKey(this, header); + if (key) { + const value = this[key]; + if (!parser) { + return value; + } + if (parser === true) { + return parseTokens(value); + } + if (utils_default.isFunction(parser)) { + return parser.call(this, value, key); + } + if (utils_default.isRegExp(parser)) { + return parser.exec(value); + } + throw new TypeError("parser must be boolean|regexp|function"); + } + } } - /** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * @param {Object} options The options for the interceptor, synchronous and runWhen - * - * @return {Number} An ID used to remove interceptor later - */ - use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled, - rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; + has(header, matcher) { + header = normalizeHeader(header); + if (header) { + const key = utils_default.findKey(this, header); + return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + return false; } - /** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - * - * @returns {void} - */ - eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; + delete(header, matcher) { + const self2 = this; + let deleted = false; + function deleteHeader(_header) { + _header = normalizeHeader(_header); + if (_header) { + const key = utils_default.findKey(self2, _header); + if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) { + delete self2[key]; + deleted = true; + } + } + } + if (utils_default.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); } + return deleted; } - /** - * Clear all interceptors from the stack - * - * @returns {void} - */ - clear() { - if (this.handlers) { - this.handlers = []; + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + while (i--) { + const key = keys[i]; + if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } } + return deleted; } - /** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - * - * @returns {void} - */ - forEach(fn) { - utils_default.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); + normalize(format) { + const self2 = this; + const headers = {}; + utils_default.forEach(this, (value, header) => { + const key = utils_default.findKey(headers, header); + if (key) { + self2[key] = normalizeValue(value); + delete self2[header]; + return; + } + const normalized = format ? formatHeader(header) : String(header).trim(); + if (normalized !== header) { + delete self2[header]; } + self2[normalized] = normalizeValue(value); + headers[normalized] = true; }); + return this; } -}; -var InterceptorManager_default = InterceptorManager; - -// node_modules/axios/lib/defaults/transitional.js -var transitional_default = { - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false, - legacyInterceptorReqResOrdering: true -}; - -// node_modules/axios/lib/platform/node/index.js -var import_crypto = __toESM(require("crypto"), 1); - -// node_modules/axios/lib/platform/node/classes/URLSearchParams.js -var import_url = __toESM(require("url"), 1); -var URLSearchParams_default = import_url.default.URLSearchParams; - -// node_modules/axios/lib/platform/node/index.js -var ALPHA = "abcdefghijklmnopqrstuvwxyz"; -var DIGIT = "0123456789"; -var ALPHABET = { - DIGIT, - ALPHA, - ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT -}; -var generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { - let str = ""; - const { length } = alphabet; - const randomValues = new Uint32Array(size); - import_crypto.default.randomFillSync(randomValues); - for (let i = 0; i < size; i++) { - str += alphabet[randomValues[i] % length]; + concat(...targets) { + return this.constructor.concat(this, ...targets); } - return str; -}; -var node_default = { - isNode: true, - classes: { - URLSearchParams: URLSearchParams_default, - FormData: FormData_default, - Blob: typeof Blob !== "undefined" && Blob || null - }, - ALPHABET, - generateString, - protocols: ["http", "https", "file", "data"] -}; - -// node_modules/axios/lib/platform/common/utils.js -var utils_exports = {}; -__export(utils_exports, { - hasBrowserEnv: () => hasBrowserEnv, - hasStandardBrowserEnv: () => hasStandardBrowserEnv, - hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv, - navigator: () => _navigator, - origin: () => origin -}); -var hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined"; -var _navigator = typeof navigator === "object" && navigator || void 0; -var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ["ReactNative", "NativeScript", "NS"].indexOf(_navigator.product) < 0); -var hasStandardBrowserWebWorkerEnv = (() => { - return typeof WorkerGlobalScope !== "undefined" && // eslint-disable-next-line no-undef - self instanceof WorkerGlobalScope && typeof self.importScripts === "function"; -})(); -var origin = hasBrowserEnv && window.location.href || "http://localhost"; - -// node_modules/axios/lib/platform/index.js -var platform_default = { - ...utils_exports, - ...node_default -}; - -// node_modules/axios/lib/helpers/toURLEncodedForm.js -function toURLEncodedForm(data, options) { - return toFormData_default(data, new platform_default.classes.URLSearchParams(), { - visitor: function(value, key, path2, helpers) { - if (platform_default.isNode && utils_default.isBuffer(value)) { - this.append(key, value.toString("base64")); - return false; - } - return helpers.defaultVisitor.apply(this, arguments); - }, - ...options - }); -} - -// node_modules/axios/lib/helpers/formDataToJSON.js -function parsePropPath(name) { - return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match) => { - return match[0] === "[]" ? "" : match[1] || match[0]; - }); -} -function arrayToObject(arr) { - const obj = {}; - const keys = Object.keys(arr); - let i; - const len = keys.length; - let key; - for (i = 0; i < len; i++) { - key = keys[i]; - obj[key] = arr[key]; + toJSON(asStrings) { + const obj = /* @__PURE__ */ Object.create(null); + utils_default.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(", ") : value); + }); + return obj; } - return obj; -} -function formDataToJSON(formData) { - function buildPath(path2, value, target, index) { - let name = path2[index++]; - if (name === "__proto__") return true; - const isNumericKey = Number.isFinite(+name); - const isLast = index >= path2.length; - name = !name && utils_default.isArray(target) ? target.length : name; - if (isLast) { - if (utils_default.hasOwnProp(target, name)) { - target[name] = [target[name], value]; - } else { - target[name] = value; + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n"); + } + getSetCookie() { + return this.get("set-cookie") || []; + } + get [Symbol.toStringTag]() { + return "AxiosHeaders"; + } + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + static concat(first, ...targets) { + const computed = new this(first); + targets.forEach((target) => computed.set(target)); + return computed; + } + static accessor(header) { + const internals = this[$internals] = this[$internals] = { + accessors: {} + }; + const accessors = internals.accessors; + const prototype2 = this.prototype; + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + if (!accessors[lHeader]) { + buildAccessors(prototype2, _header); + accessors[lHeader] = true; } - return !isNumericKey; - } - if (!target[name] || !utils_default.isObject(target[name])) { - target[name] = []; - } - const result = buildPath(path2, value, target[name], index); - if (result && utils_default.isArray(target[name])) { - target[name] = arrayToObject(target[name]); } - return !isNumericKey; - } - if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) { - const obj = {}; - utils_default.forEachEntry(formData, (name, value) => { - buildPath(parsePropPath(name), value, obj, 0); - }); - return obj; + utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + return this; } - return null; -} -var formDataToJSON_default = formDataToJSON; +}; +AxiosHeaders.accessor([ + "Content-Type", + "Content-Length", + "Accept", + "Accept-Encoding", + "User-Agent", + "Authorization" +]); +utils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + }; +}); +utils_default.freezeMethods(AxiosHeaders); +var AxiosHeaders_default = AxiosHeaders; -// node_modules/axios/lib/defaults/index.js -function stringifySafely(rawValue, parser, encoder) { - if (utils_default.isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return utils_default.trim(rawValue); - } catch (e) { - if (e.name !== "SyntaxError") { - throw e; - } +// node_modules/axios/lib/core/AxiosError.js +var REDACTED = "[REDACTED ****]"; +function hasOwnOrPrototypeToJSON(source) { + if (utils_default.hasOwnProp(source, "toJSON")) { + return true; + } + let prototype2 = Object.getPrototypeOf(source); + while (prototype2 && prototype2 !== Object.prototype) { + if (utils_default.hasOwnProp(prototype2, "toJSON")) { + return true; } + prototype2 = Object.getPrototypeOf(prototype2); } - return (encoder || JSON.stringify)(rawValue); + return false; } -var defaults = { - transitional: transitional_default, - adapter: ["xhr", "http", "fetch"], - transformRequest: [ - function transformRequest(data, headers) { - const contentType = headers.getContentType() || ""; - const hasJSONContentType = contentType.indexOf("application/json") > -1; - const isObjectPayload = utils_default.isObject(data); - if (isObjectPayload && utils_default.isHTMLForm(data)) { - data = new FormData(data); - } - const isFormData2 = utils_default.isFormData(data); - if (isFormData2) { - return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data)) : data; - } - if (utils_default.isArrayBuffer(data) || utils_default.isBuffer(data) || utils_default.isStream(data) || utils_default.isFile(data) || utils_default.isBlob(data) || utils_default.isReadableStream(data)) { - return data; - } - if (utils_default.isArrayBufferView(data)) { - return data.buffer; - } - if (utils_default.isURLSearchParams(data)) { - headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false); - return data.toString(); - } - let isFileList2; - if (isObjectPayload) { - if (contentType.indexOf("application/x-www-form-urlencoded") > -1) { - return toURLEncodedForm(data, this.formSerializer).toString(); - } - if ((isFileList2 = utils_default.isFileList(data)) || contentType.indexOf("multipart/form-data") > -1) { - const _FormData = this.env && this.env.FormData; - return toFormData_default( - isFileList2 ? { "files[]": data } : data, - _FormData && new _FormData(), - this.formSerializer - ); +function redactConfig(config, redactKeys) { + const lowerKeys = new Set(redactKeys.map((k) => String(k).toLowerCase())); + const seen = []; + const visit = (source) => { + if (source === null || typeof source !== "object") return source; + if (utils_default.isBuffer(source)) return source; + if (seen.indexOf(source) !== -1) return void 0; + if (source instanceof AxiosHeaders_default) { + source = source.toJSON(); + } + seen.push(source); + let result; + if (utils_default.isArray(source)) { + result = []; + source.forEach((v, i) => { + const reducedValue = visit(v); + if (!utils_default.isUndefined(reducedValue)) { + result[i] = reducedValue; } + }); + } else { + if (!utils_default.isPlainObject(source) && hasOwnOrPrototypeToJSON(source)) { + seen.pop(); + return source; } - if (isObjectPayload || hasJSONContentType) { - headers.setContentType("application/json", false); - return stringifySafely(data); - } - return data; - } - ], - transformResponse: [ - function transformResponse(data) { - const transitional2 = this.transitional || defaults.transitional; - const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing; - const JSONRequested = this.responseType === "json"; - if (utils_default.isResponse(data) || utils_default.isReadableStream(data)) { - return data; - } - if (data && utils_default.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) { - const silentJSONParsing = transitional2 && transitional2.silentJSONParsing; - const strictJSONParsing = !silentJSONParsing && JSONRequested; - try { - return JSON.parse(data, this.parseReviver); - } catch (e) { - if (strictJSONParsing) { - if (e.name === "SyntaxError") { - throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, this.response); - } - throw e; - } + result = /* @__PURE__ */ Object.create(null); + for (const [key, value] of Object.entries(source)) { + const reducedValue = lowerKeys.has(key.toLowerCase()) ? REDACTED : visit(value); + if (!utils_default.isUndefined(reducedValue)) { + result[key] = reducedValue; } } - return data; } - ], + seen.pop(); + return result; + }; + return visit(config); +} +var AxiosError = class _AxiosError extends Error { + static from(error2, code, config, request, response, customProps) { + const axiosError = new _AxiosError(error2.message, code || error2.code, config, request, response); + axiosError.cause = error2; + axiosError.name = error2.name; + if (error2.status != null && axiosError.status == null) { + axiosError.status = error2.status; + } + customProps && Object.assign(axiosError, customProps); + return axiosError; + } /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. */ - timeout: 0, - xsrfCookieName: "XSRF-TOKEN", - xsrfHeaderName: "X-XSRF-TOKEN", - maxContentLength: -1, - maxBodyLength: -1, - env: { - FormData: platform_default.classes.FormData, - Blob: platform_default.classes.Blob - }, - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - }, - headers: { - common: { - Accept: "application/json, text/plain, */*", - "Content-Type": void 0 + constructor(message, code, config, request, response) { + super(message); + Object.defineProperty(this, "message", { + // Null-proto descriptor so a polluted Object.prototype.get cannot turn + // this data descriptor into an accessor descriptor on the way in. + __proto__: null, + value: message, + enumerable: true, + writable: true, + configurable: true + }); + this.name = "AxiosError"; + this.isAxiosError = true; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status; } } + toJSON() { + const config = this.config; + const redactKeys = config && utils_default.hasOwnProp(config, "redact") ? config.redact : void 0; + const serializedConfig = utils_default.isArray(redactKeys) && redactKeys.length > 0 ? redactConfig(config, redactKeys) : utils_default.toJSONObject(config); + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: serializedConfig, + code: this.code, + status: this.status + }; + } }; -utils_default.forEach(["delete", "get", "head", "post", "put", "patch"], (method) => { - defaults.headers[method] = {}; -}); -var defaults_default = defaults; +AxiosError.ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; +AxiosError.ERR_BAD_OPTION = "ERR_BAD_OPTION"; +AxiosError.ECONNABORTED = "ECONNABORTED"; +AxiosError.ETIMEDOUT = "ETIMEDOUT"; +AxiosError.ECONNREFUSED = "ECONNREFUSED"; +AxiosError.ERR_NETWORK = "ERR_NETWORK"; +AxiosError.ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; +AxiosError.ERR_DEPRECATED = "ERR_DEPRECATED"; +AxiosError.ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; +AxiosError.ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; +AxiosError.ERR_CANCELED = "ERR_CANCELED"; +AxiosError.ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; +AxiosError.ERR_INVALID_URL = "ERR_INVALID_URL"; +AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = "ERR_FORM_DATA_DEPTH_EXCEEDED"; +var AxiosError_default = AxiosError; -// node_modules/axios/lib/helpers/parseHeaders.js -var ignoreDuplicateOf = utils_default.toObjectSet([ - "age", - "authorization", - "content-length", - "content-type", - "etag", - "expires", - "from", - "host", - "if-modified-since", - "if-unmodified-since", - "last-modified", - "location", - "max-forwards", - "proxy-authorization", - "referer", - "retry-after", - "user-agent" -]); -var parseHeaders_default = (rawHeaders) => { - const parsed = {}; - let key; - let val; - let i; - rawHeaders && rawHeaders.split("\n").forEach(function parser(line) { - i = line.indexOf(":"); - key = line.substring(0, i).trim().toLowerCase(); - val = line.substring(i + 1).trim(); - if (!key || parsed[key] && ignoreDuplicateOf[key]) { - return; +// node_modules/axios/lib/platform/node/classes/FormData.js +var import_form_data = __toESM(require_form_data(), 1); +var FormData_default = import_form_data.default; + +// node_modules/axios/lib/helpers/toFormData.js +function isVisitable(thing) { + return utils_default.isPlainObject(thing) || utils_default.isArray(thing); +} +function removeBrackets(key) { + return utils_default.endsWith(key, "[]") ? key.slice(0, -2) : key; +} +function renderKey(path2, key, dots) { + if (!path2) return key; + return path2.concat(key).map(function each(token, i) { + token = removeBrackets(token); + return !dots && i ? "[" + token + "]" : token; + }).join(dots ? "." : ""); +} +function isFlatArray(arr) { + return utils_default.isArray(arr) && !arr.some(isVisitable); +} +var predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); +function toFormData(obj, formData, options) { + if (!utils_default.isObject(obj)) { + throw new TypeError("target must be an object"); + } + formData = formData || new (FormData_default || FormData)(); + options = utils_default.toFlatObject( + options, + { + metaTokens: true, + dots: false, + indexes: false + }, + false, + function defined(option, source) { + return !utils_default.isUndefined(source[option]); } - if (key === "set-cookie") { - if (parsed[key]) { - parsed[key].push(val); - } else { - parsed[key] = [val]; + ); + const metaTokens = options.metaTokens; + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== "undefined" && Blob; + const maxDepth = options.maxDepth === void 0 ? 100 : options.maxDepth; + const useBlob = _Blob && utils_default.isSpecCompliantForm(formData); + if (!utils_default.isFunction(visitor)) { + throw new TypeError("visitor must be a function"); + } + function convertValue(value) { + if (value === null) return ""; + if (utils_default.isDate(value)) { + return value.toISOString(); + } + if (utils_default.isBoolean(value)) { + return value.toString(); + } + if (!useBlob && utils_default.isBlob(value)) { + throw new AxiosError_default("Blob is not supported. Use a Buffer instead."); + } + if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) { + return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value); + } + return value; + } + function defaultVisitor(value, key, path2) { + let arr = value; + if (utils_default.isReactNative(formData) && utils_default.isReactNativeBlob(value)) { + formData.append(renderKey(path2, key, dots), convertValue(value)); + return false; + } + if (value && !path2 && typeof value === "object") { + if (utils_default.endsWith(key, "{}")) { + key = metaTokens ? key : key.slice(0, -2); + value = JSON.stringify(value); + } else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, "[]")) && (arr = utils_default.toArray(value))) { + key = removeBrackets(key); + arr.forEach(function each(el, index) { + !(utils_default.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + "[]", + convertValue(el) + ); + }); + return false; } - } else { - parsed[key] = parsed[key] ? parsed[key] + ", " + val : val; } + if (isVisitable(value)) { + return true; + } + formData.append(renderKey(path2, key, dots), convertValue(value)); + return false; + } + const stack = []; + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable }); - return parsed; + function build(value, path2, depth = 0) { + if (utils_default.isUndefined(value)) return; + if (depth > maxDepth) { + throw new AxiosError_default( + "Object is too deeply nested (" + depth + " levels). Max depth: " + maxDepth, + AxiosError_default.ERR_FORM_DATA_DEPTH_EXCEEDED + ); + } + if (stack.indexOf(value) !== -1) { + throw Error("Circular reference detected in " + path2.join(".")); + } + stack.push(value); + utils_default.forEach(value, function each(el, key) { + const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(formData, el, utils_default.isString(key) ? key.trim() : key, path2, exposedHelpers); + if (result === true) { + build(el, path2 ? path2.concat(key) : [key], depth + 1); + } + }); + stack.pop(); + } + if (!utils_default.isObject(obj)) { + throw new TypeError("data must be an object"); + } + build(obj); + return formData; +} +var toFormData_default = toFormData; + +// node_modules/axios/lib/helpers/AxiosURLSearchParams.js +function encode(str) { + const charMap = { + "!": "%21", + "'": "%27", + "(": "%28", + ")": "%29", + "~": "%7E", + "%20": "+" + }; + return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) { + return charMap[match]; + }); +} +function AxiosURLSearchParams(params, options) { + this._pairs = []; + params && toFormData_default(params, this, options); +} +var prototype = AxiosURLSearchParams.prototype; +prototype.append = function append(name, value) { + this._pairs.push([name, value]); }; +prototype.toString = function toString2(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode); + } : encode; + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + "=" + _encode(pair[1]); + }, "").join("&"); +}; +var AxiosURLSearchParams_default = AxiosURLSearchParams; -// node_modules/axios/lib/core/AxiosHeaders.js -var $internals = /* @__PURE__ */ Symbol("internals"); -function normalizeHeader(header) { - return header && String(header).trim().toLowerCase(); +// node_modules/axios/lib/helpers/buildURL.js +function encode2(val) { + return encodeURIComponent(val).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+"); } -function normalizeValue(value) { - if (value === false || value == null) { - return value; +function buildURL(url2, params, options) { + if (!params) { + return url2; } - return utils_default.isArray(value) ? value.map(normalizeValue) : String(value).replace(/[\r\n]+$/, ""); -} -function parseTokens(str) { - const tokens = /* @__PURE__ */ Object.create(null); - const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; - let match; - while (match = tokensRE.exec(str)) { - tokens[match[1]] = match[2]; + const _encode = options && options.encode || encode2; + const _options = utils_default.isFunction(options) ? { + serialize: options + } : options; + const serializeFn = _options && _options.serialize; + let serializedParams; + if (serializeFn) { + serializedParams = serializeFn(params, _options); + } else { + serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, _options).toString(_encode); } - return tokens; + if (serializedParams) { + const hashmarkIndex = url2.indexOf("#"); + if (hashmarkIndex !== -1) { + url2 = url2.slice(0, hashmarkIndex); + } + url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams; + } + return url2; } -var isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); -function matchHeaderValue(context, value, header, filter2, isHeaderNameFilter) { - if (utils_default.isFunction(filter2)) { - return filter2.call(this, value, header); + +// node_modules/axios/lib/core/InterceptorManager.js +var InterceptorManager = class { + constructor() { + this.handlers = []; } - if (isHeaderNameFilter) { - value = header; + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * @param {Object} options The options for the interceptor, synchronous and runWhen + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; } - if (!utils_default.isString(value)) return; - if (utils_default.isString(filter2)) { - return value.indexOf(filter2) !== -1; + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {void} + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } } - if (utils_default.isRegExp(filter2)) { - return filter2.test(value); + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } } -} -function formatHeader(header) { - return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { - return char.toUpperCase() + str; + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils_default.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +}; +var InterceptorManager_default = InterceptorManager; + +// node_modules/axios/lib/defaults/transitional.js +var transitional_default = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false, + legacyInterceptorReqResOrdering: true +}; + +// node_modules/axios/lib/platform/node/index.js +var import_crypto = __toESM(require("crypto"), 1); + +// node_modules/axios/lib/platform/node/classes/URLSearchParams.js +var import_url = __toESM(require("url"), 1); +var URLSearchParams_default = import_url.default.URLSearchParams; + +// node_modules/axios/lib/platform/node/index.js +var ALPHA = "abcdefghijklmnopqrstuvwxyz"; +var DIGIT = "0123456789"; +var ALPHABET = { + DIGIT, + ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT +}; +var generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { + let str = ""; + const { length } = alphabet; + const randomValues = new Uint32Array(size); + import_crypto.default.randomFillSync(randomValues); + for (let i = 0; i < size; i++) { + str += alphabet[randomValues[i] % length]; + } + return str; +}; +var node_default = { + isNode: true, + classes: { + URLSearchParams: URLSearchParams_default, + FormData: FormData_default, + Blob: typeof Blob !== "undefined" && Blob || null + }, + ALPHABET, + generateString, + protocols: ["http", "https", "file", "data"] +}; + +// node_modules/axios/lib/platform/common/utils.js +var utils_exports = {}; +__export(utils_exports, { + hasBrowserEnv: () => hasBrowserEnv, + hasStandardBrowserEnv: () => hasStandardBrowserEnv, + hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv, + navigator: () => _navigator, + origin: () => origin +}); +var hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined"; +var _navigator = typeof navigator === "object" && navigator || void 0; +var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ["ReactNative", "NativeScript", "NS"].indexOf(_navigator.product) < 0); +var hasStandardBrowserWebWorkerEnv = (() => { + return typeof WorkerGlobalScope !== "undefined" && // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && typeof self.importScripts === "function"; +})(); +var origin = hasBrowserEnv && window.location.href || "http://localhost"; + +// node_modules/axios/lib/platform/index.js +var platform_default = { + ...utils_exports, + ...node_default +}; + +// node_modules/axios/lib/helpers/toURLEncodedForm.js +function toURLEncodedForm(data, options) { + return toFormData_default(data, new platform_default.classes.URLSearchParams(), { + visitor: function(value, key, path2, helpers) { + if (platform_default.isNode && utils_default.isBuffer(value)) { + this.append(key, value.toString("base64")); + return false; + } + return helpers.defaultVisitor.apply(this, arguments); + }, + ...options }); } -function buildAccessors(obj, header) { - const accessorName = utils_default.toCamelCase(" " + header); - ["get", "set", "has"].forEach((methodName) => { - Object.defineProperty(obj, methodName + accessorName, { - value: function(arg1, arg2, arg3) { - return this[methodName].call(this, header, arg1, arg2, arg3); - }, - configurable: true - }); + +// node_modules/axios/lib/helpers/formDataToJSON.js +function parsePropPath(name) { + return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match) => { + return match[0] === "[]" ? "" : match[1] || match[0]; }); } -var AxiosHeaders = class { - constructor(headers) { - headers && this.set(headers); +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; } - set(header, valueOrRewrite, rewrite) { - const self2 = this; - function setHeader(_value, _header, _rewrite) { - const lHeader = normalizeHeader(_header); - if (!lHeader) { - throw new Error("header name must be a non-empty string"); - } - const key = utils_default.findKey(self2, lHeader); - if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) { - self2[key || _header] = normalizeValue(_value); + return obj; +} +function formDataToJSON(formData) { + function buildPath(path2, value, target, index) { + let name = path2[index++]; + if (name === "__proto__") return true; + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path2.length; + name = !name && utils_default.isArray(target) ? target.length : name; + if (isLast) { + if (utils_default.hasOwnProp(target, name)) { + target[name] = utils_default.isArray(target[name]) ? target[name].concat(value) : [target[name], value]; + } else { + target[name] = value; } + return !isNumericKey; } - const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); - if (utils_default.isPlainObject(header) || header instanceof this.constructor) { - setHeaders(header, valueOrRewrite); - } else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { - setHeaders(parseHeaders_default(header), valueOrRewrite); - } else if (utils_default.isObject(header) && utils_default.isIterable(header)) { - let obj = {}, dest, key; - for (const entry of header) { - if (!utils_default.isArray(entry)) { - throw TypeError("Object iterator must return a key-value pair"); - } - obj[key = entry[0]] = (dest = obj[key]) ? utils_default.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]] : entry[1]; - } - setHeaders(obj, valueOrRewrite); - } else { - header != null && setHeader(valueOrRewrite, header, rewrite); + if (!target[name] || !utils_default.isObject(target[name])) { + target[name] = []; } - return this; - } - get(header, parser) { - header = normalizeHeader(header); - if (header) { - const key = utils_default.findKey(this, header); - if (key) { - const value = this[key]; - if (!parser) { - return value; - } - if (parser === true) { - return parseTokens(value); - } - if (utils_default.isFunction(parser)) { - return parser.call(this, value, key); - } - if (utils_default.isRegExp(parser)) { - return parser.exec(value); - } - throw new TypeError("parser must be boolean|regexp|function"); - } + const result = buildPath(path2, value, target[name], index); + if (result && utils_default.isArray(target[name])) { + target[name] = arrayToObject(target[name]); } + return !isNumericKey; } - has(header, matcher) { - header = normalizeHeader(header); - if (header) { - const key = utils_default.findKey(this, header); - return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher))); - } - return false; + if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) { + const obj = {}; + utils_default.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + return obj; } - delete(header, matcher) { - const self2 = this; - let deleted = false; - function deleteHeader(_header) { - _header = normalizeHeader(_header); - if (_header) { - const key = utils_default.findKey(self2, _header); - if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) { - delete self2[key]; - deleted = true; - } + return null; +} +var formDataToJSON_default = formDataToJSON; + +// node_modules/axios/lib/defaults/index.js +var own = (obj, key) => obj != null && utils_default.hasOwnProp(obj, key) ? obj[key] : void 0; +function stringifySafely(rawValue, parser, encoder) { + if (utils_default.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils_default.trim(rawValue); + } catch (e) { + if (e.name !== "SyntaxError") { + throw e; } } - if (utils_default.isArray(header)) { - header.forEach(deleteHeader); - } else { - deleteHeader(header); - } - return deleted; } - clear(matcher) { - const keys = Object.keys(this); - let i = keys.length; - let deleted = false; - while (i--) { - const key = keys[i]; - if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { - delete this[key]; - deleted = true; + return (encoder || JSON.stringify)(rawValue); +} +var defaults = { + transitional: transitional_default, + adapter: ["xhr", "http", "fetch"], + transformRequest: [ + function transformRequest(data, headers) { + const contentType = headers.getContentType() || ""; + const hasJSONContentType = contentType.indexOf("application/json") > -1; + const isObjectPayload = utils_default.isObject(data); + if (isObjectPayload && utils_default.isHTMLForm(data)) { + data = new FormData(data); } - } - return deleted; - } - normalize(format) { - const self2 = this; - const headers = {}; - utils_default.forEach(this, (value, header) => { - const key = utils_default.findKey(headers, header); - if (key) { - self2[key] = normalizeValue(value); - delete self2[header]; - return; + const isFormData2 = utils_default.isFormData(data); + if (isFormData2) { + return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data)) : data; } - const normalized = format ? formatHeader(header) : String(header).trim(); - if (normalized !== header) { - delete self2[header]; + if (utils_default.isArrayBuffer(data) || utils_default.isBuffer(data) || utils_default.isStream(data) || utils_default.isFile(data) || utils_default.isBlob(data) || utils_default.isReadableStream(data)) { + return data; } - self2[normalized] = normalizeValue(value); - headers[normalized] = true; - }); - return this; - } - concat(...targets) { - return this.constructor.concat(this, ...targets); - } - toJSON(asStrings) { - const obj = /* @__PURE__ */ Object.create(null); - utils_default.forEach(this, (value, header) => { - value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(", ") : value); - }); - return obj; - } - [Symbol.iterator]() { - return Object.entries(this.toJSON())[Symbol.iterator](); - } - toString() { - return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n"); - } - getSetCookie() { - return this.get("set-cookie") || []; - } - get [Symbol.toStringTag]() { - return "AxiosHeaders"; - } - static from(thing) { - return thing instanceof this ? thing : new this(thing); - } - static concat(first, ...targets) { - const computed = new this(first); - targets.forEach((target) => computed.set(target)); - return computed; - } - static accessor(header) { - const internals = this[$internals] = this[$internals] = { - accessors: {} - }; - const accessors = internals.accessors; - const prototype2 = this.prototype; - function defineAccessor(_header) { - const lHeader = normalizeHeader(_header); - if (!accessors[lHeader]) { - buildAccessors(prototype2, _header); - accessors[lHeader] = true; + if (utils_default.isArrayBufferView(data)) { + return data.buffer; + } + if (utils_default.isURLSearchParams(data)) { + headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false); + return data.toString(); + } + let isFileList2; + if (isObjectPayload) { + const formSerializer = own(this, "formSerializer"); + if (contentType.indexOf("application/x-www-form-urlencoded") > -1) { + return toURLEncodedForm(data, formSerializer).toString(); + } + if ((isFileList2 = utils_default.isFileList(data)) || contentType.indexOf("multipart/form-data") > -1) { + const env = own(this, "env"); + const _FormData = env && env.FormData; + return toFormData_default( + isFileList2 ? { "files[]": data } : data, + _FormData && new _FormData(), + formSerializer + ); + } + } + if (isObjectPayload || hasJSONContentType) { + headers.setContentType("application/json", false); + return stringifySafely(data); } + return data; + } + ], + transformResponse: [ + function transformResponse(data) { + const transitional2 = own(this, "transitional") || defaults.transitional; + const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing; + const responseType = own(this, "responseType"); + const JSONRequested = responseType === "json"; + if (utils_default.isResponse(data) || utils_default.isReadableStream(data)) { + return data; + } + if (data && utils_default.isString(data) && (forcedJSONParsing && !responseType || JSONRequested)) { + const silentJSONParsing = transitional2 && transitional2.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + try { + return JSON.parse(data, own(this, "parseReviver")); + } catch (e) { + if (strictJSONParsing) { + if (e.name === "SyntaxError") { + throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, own(this, "response")); + } + throw e; + } + } + } + return data; + } + ], + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + xsrfCookieName: "XSRF-TOKEN", + xsrfHeaderName: "X-XSRF-TOKEN", + maxContentLength: -1, + maxBodyLength: -1, + env: { + FormData: platform_default.classes.FormData, + Blob: platform_default.classes.Blob + }, + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + headers: { + common: { + Accept: "application/json, text/plain, */*", + "Content-Type": void 0 } - utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); - return this; } }; -AxiosHeaders.accessor([ - "Content-Type", - "Content-Length", - "Accept", - "Accept-Encoding", - "User-Agent", - "Authorization" -]); -utils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => { - let mapped = key[0].toUpperCase() + key.slice(1); - return { - get: () => value, - set(headerValue) { - this[mapped] = headerValue; - } - }; +utils_default.forEach(["delete", "get", "head", "post", "put", "patch", "query"], (method) => { + defaults.headers[method] = {}; }); -utils_default.freezeMethods(AxiosHeaders); -var AxiosHeaders_default = AxiosHeaders; +var defaults_default = defaults; // node_modules/axios/lib/core/transformData.js function transformData(fns, response) { @@ -31510,15 +31633,13 @@ function settle(resolve, reject, response) { if (!response.status || !validateStatus2 || validateStatus2(response.status)) { resolve(response); } else { - reject( - new AxiosError_default( - "Request failed with status code " + response.status, - [AxiosError_default.ERR_BAD_REQUEST, AxiosError_default.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], - response.config, - response.request, - response - ) - ); + reject(new AxiosError_default( + "Request failed with status code " + response.status, + response.status >= 400 && response.status < 500 ? AxiosError_default.ERR_BAD_REQUEST : AxiosError_default.ERR_BAD_RESPONSE, + response.config, + response.request, + response + )); } } @@ -31538,7 +31659,7 @@ function combineURLs(baseURL, relativeURL) { // node_modules/axios/lib/core/buildFullPath.js function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { let isRelativeUrl = !isAbsoluteURL(requestedURL); - if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) { return combineURLs(baseURL, requestedURL); } return requestedURL; @@ -31616,15 +31737,16 @@ var import_http = __toESM(require("http"), 1); var import_https = __toESM(require("https"), 1); var import_http2 = __toESM(require("http2"), 1); var import_util2 = __toESM(require("util"), 1); +var import_path = require("path"); var import_follow_redirects = __toESM(require_follow_redirects(), 1); var import_zlib = __toESM(require("zlib"), 1); // node_modules/axios/lib/env/data.js -var VERSION = "1.14.0"; +var VERSION = "1.16.0"; // node_modules/axios/lib/helpers/parseProtocol.js function parseProtocol(url2) { - const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url2); + const match = /^([-+\w]{1,25}):(?:\/\/)?/.exec(url2); return match && match[1] || ""; } @@ -31819,7 +31941,8 @@ var FormDataPart = class { if (isStringValue) { value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF)); } else { - headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`; + const safeType = String(value.type || "application/octet-stream").replace(/[\r\n]/g, ""); + headers += `Content-Type: ${safeType}${CRLF}`; } this.headers = textEncoder.encode(headers + CRLF); this.contentLength = isStringValue ? value.byteLength : value.size; @@ -31858,7 +31981,7 @@ var formDataToStream = (form, headersHandler, options) => { throw TypeError("FormData instance required"); } if (boundary.length < 1 || boundary.length > 70) { - throw Error("boundary must be 10-70 characters long"); + throw Error("boundary must be 1-70 characters long"); } const boundaryBytes = textEncoder.encode("--" + boundary + CRLF); const footerBytes = textEncoder.encode("--" + boundary + "--" + CRLF); @@ -31926,6 +32049,128 @@ var callbackify = (fn, reducer) => { }; var callbackify_default = callbackify; +// node_modules/axios/lib/helpers/shouldBypassProxy.js +var LOOPBACK_HOSTNAMES = /* @__PURE__ */ new Set(["localhost"]); +var isIPv4Loopback = (host) => { + const parts = host.split("."); + if (parts.length !== 4) return false; + if (parts[0] !== "127") return false; + return parts.every((p) => /^\d+$/.test(p) && Number(p) >= 0 && Number(p) <= 255); +}; +var isIPv6Loopback = (host) => { + if (host === "::1") return true; + const v4MappedDotted = host.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i); + if (v4MappedDotted) return isIPv4Loopback(v4MappedDotted[1]); + const v4MappedHex = host.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i); + if (v4MappedHex) { + const high = parseInt(v4MappedHex[1], 16); + return high >= 32512 && high <= 32767; + } + const groups = host.split(":"); + if (groups.length === 8) { + for (let i = 0; i < 7; i++) { + if (!/^0+$/.test(groups[i])) return false; + } + return /^0*1$/.test(groups[7]); + } + return false; +}; +var isLoopback = (host) => { + if (!host) return false; + if (LOOPBACK_HOSTNAMES.has(host)) return true; + if (isIPv4Loopback(host)) return true; + return isIPv6Loopback(host); +}; +var DEFAULT_PORTS2 = { + http: 80, + https: 443, + ws: 80, + wss: 443, + ftp: 21 +}; +var parseNoProxyEntry = (entry) => { + let entryHost = entry; + let entryPort = 0; + if (entryHost.charAt(0) === "[") { + const bracketIndex = entryHost.indexOf("]"); + if (bracketIndex !== -1) { + const host = entryHost.slice(1, bracketIndex); + const rest = entryHost.slice(bracketIndex + 1); + if (rest.charAt(0) === ":" && /^\d+$/.test(rest.slice(1))) { + entryPort = Number.parseInt(rest.slice(1), 10); + } + return [host, entryPort]; + } + } + const firstColon = entryHost.indexOf(":"); + const lastColon = entryHost.lastIndexOf(":"); + if (firstColon !== -1 && firstColon === lastColon && /^\d+$/.test(entryHost.slice(lastColon + 1))) { + entryPort = Number.parseInt(entryHost.slice(lastColon + 1), 10); + entryHost = entryHost.slice(0, lastColon); + } + return [entryHost, entryPort]; +}; +var IPV4_MAPPED_DOTTED_RE = /^(?:::|(?:0{1,4}:){1,4}:|(?:0{1,4}:){5})ffff:(\d+\.\d+\.\d+\.\d+)$/i; +var IPV4_MAPPED_HEX_RE = /^(?:::|(?:0{1,4}:){1,4}:|(?:0{1,4}:){5})ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i; +var unmapIPv4MappedIPv6 = (host) => { + if (typeof host !== "string" || host.indexOf(":") === -1) return host; + const dotted = host.match(IPV4_MAPPED_DOTTED_RE); + if (dotted) return dotted[1]; + const hex = host.match(IPV4_MAPPED_HEX_RE); + if (hex) { + const high = parseInt(hex[1], 16); + const low = parseInt(hex[2], 16); + return `${high >> 8}.${high & 255}.${low >> 8}.${low & 255}`; + } + return host; +}; +var normalizeNoProxyHost = (hostname) => { + if (!hostname) { + return hostname; + } + if (hostname.charAt(0) === "[" && hostname.charAt(hostname.length - 1) === "]") { + hostname = hostname.slice(1, -1); + } + return unmapIPv4MappedIPv6(hostname.replace(/\.+$/, "")); +}; +function shouldBypassProxy(location) { + let parsed; + try { + parsed = new URL(location); + } catch (_err) { + return false; + } + const noProxy = (process.env.no_proxy || process.env.NO_PROXY || "").toLowerCase(); + if (!noProxy) { + return false; + } + if (noProxy === "*") { + return true; + } + const port = Number.parseInt(parsed.port, 10) || DEFAULT_PORTS2[parsed.protocol.split(":", 1)[0]] || 0; + const hostname = normalizeNoProxyHost(parsed.hostname.toLowerCase()); + return noProxy.split(/[\s,]+/).some((entry) => { + if (!entry) { + return false; + } + let [entryHost, entryPort] = parseNoProxyEntry(entry); + entryHost = normalizeNoProxyHost(entryHost); + if (!entryHost) { + return false; + } + if (entryPort && entryPort !== port) { + return false; + } + if (entryHost.charAt(0) === "*") { + entryHost = entryHost.slice(1); + } + if (entryHost.charAt(0) === ".") { + return hostname.endsWith(entryHost); + } + return hostname === entryHost || isLoopback(hostname) && isLoopback(entryHost); + }); +} + // node_modules/axios/lib/helpers/speedometer.js function speedometer(samplesCount, min) { samplesCount = samplesCount || 10; @@ -32002,19 +32247,19 @@ var progressEventReducer = (listener, isDownloadStream, freq = 3) => { let bytesNotified = 0; const _speedometer = speedometer_default(50, 250); return throttle_default((e) => { - const loaded = e.loaded; + const rawLoaded = e.loaded; const total = e.lengthComputable ? e.total : void 0; - const progressBytes = loaded - bytesNotified; + const loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded; + const progressBytes = Math.max(0, loaded - bytesNotified); const rate = _speedometer(progressBytes); - const inRange = loaded <= total; - bytesNotified = loaded; + bytesNotified = Math.max(bytesNotified, loaded); const data = { loaded, total, progress: total ? loaded / total : void 0, bytes: progressBytes, rate: rate ? rate : void 0, - estimated: rate && total && inRange ? (total - loaded) / rate : void 0, + estimated: rate && total ? (total - loaded) / rate : void 0, event: e, lengthComputable: total != null, [isDownloadStream ? "download" : "upload"]: true @@ -32080,10 +32325,32 @@ function estimateDataURLDecodedBytes(url2) { } } const groups = Math.floor(effectiveLen / 4); - const bytes = groups * 3 - (pad || 0); - return bytes > 0 ? bytes : 0; + const bytes2 = groups * 3 - (pad || 0); + return bytes2 > 0 ? bytes2 : 0; + } + if (typeof Buffer !== "undefined" && typeof Buffer.byteLength === "function") { + return Buffer.byteLength(body, "utf8"); + } + let bytes = 0; + for (let i = 0, len = body.length; i < len; i++) { + const c = body.charCodeAt(i); + if (c < 128) { + bytes += 1; + } else if (c < 2048) { + bytes += 2; + } else if (c >= 55296 && c <= 56319 && i + 1 < len) { + const next = body.charCodeAt(i + 1); + if (next >= 56320 && next <= 57343) { + bytes += 4; + i++; + } else { + bytes += 3; + } + } else { + bytes += 3; + } } - return Buffer.byteLength(body, "utf8"); + return bytes; } // node_modules/axios/lib/adapters/http.js @@ -32098,9 +32365,33 @@ var brotliOptions = { var isBrotliSupported = utils_default.isFunction(import_zlib.default.createBrotliDecompress); var { http: httpFollow, https: httpsFollow } = import_follow_redirects.default; var isHttps = /https:?/; +var FORM_DATA_CONTENT_HEADERS = ["content-type", "content-length"]; +function setFormDataHeaders(headers, formHeaders, policy) { + if (policy !== "content-only") { + headers.set(formHeaders); + return; + } + Object.entries(formHeaders).forEach(([key, val]) => { + if (FORM_DATA_CONTENT_HEADERS.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); +} +var kAxiosSocketListener = /* @__PURE__ */ Symbol("axios.http.socketListener"); +var kAxiosCurrentReq = /* @__PURE__ */ Symbol("axios.http.currentReq"); var supportedProtocols = platform_default.protocols.map((protocol) => { return protocol + ":"; }); +var decodeURIComponentSafe = (value) => { + if (!utils_default.isString(value)) { + return value; + } + try { + return decodeURIComponent(value); + } catch (error2) { + return value; + } +}; var flushOnFinish = (stream4, [throttled, flush]) => { stream4.on("end", flush).on("error", flush); return throttled; @@ -32178,48 +32469,75 @@ var Http2Sessions = class { } }; var http2Sessions = new Http2Sessions(); -function dispatchBeforeRedirect(options, responseDetails) { +function dispatchBeforeRedirect(options, responseDetails, requestDetails) { if (options.beforeRedirects.proxy) { options.beforeRedirects.proxy(options); } if (options.beforeRedirects.config) { - options.beforeRedirects.config(options, responseDetails); + options.beforeRedirects.config(options, responseDetails, requestDetails); } } -function setProxy(options, configProxy, location) { +function setProxy(options, configProxy, location, isRedirect) { let proxy = configProxy; if (!proxy && proxy !== false) { const proxyUrl = getProxyForUrl(location); if (proxyUrl) { - proxy = new URL(proxyUrl); + if (!shouldBypassProxy(location)) { + proxy = new URL(proxyUrl); + } } } - if (proxy) { - if (proxy.username) { - proxy.auth = (proxy.username || "") + ":" + (proxy.password || ""); + if (isRedirect && options.headers) { + for (const name of Object.keys(options.headers)) { + if (name.toLowerCase() === "proxy-authorization") { + delete options.headers[name]; + } } - if (proxy.auth) { - const validProxyAuth = Boolean(proxy.auth.username || proxy.auth.password); + } + if (proxy) { + const isProxyURL = proxy instanceof URL; + const readProxyField = (key) => isProxyURL || utils_default.hasOwnProp(proxy, key) ? proxy[key] : void 0; + const proxyUsername = readProxyField("username"); + const proxyPassword = readProxyField("password"); + let proxyAuth = utils_default.hasOwnProp(proxy, "auth") ? proxy.auth : void 0; + if (proxyUsername) { + proxyAuth = (proxyUsername || "") + ":" + (proxyPassword || ""); + } + if (proxyAuth) { + const authIsObject = typeof proxyAuth === "object"; + const authUsername = authIsObject && utils_default.hasOwnProp(proxyAuth, "username") ? proxyAuth.username : void 0; + const authPassword = authIsObject && utils_default.hasOwnProp(proxyAuth, "password") ? proxyAuth.password : void 0; + const validProxyAuth = Boolean(authUsername || authPassword); if (validProxyAuth) { - proxy.auth = (proxy.auth.username || "") + ":" + (proxy.auth.password || ""); - } else if (typeof proxy.auth === "object") { + proxyAuth = (authUsername || "") + ":" + (authPassword || ""); + } else if (authIsObject) { throw new AxiosError_default("Invalid proxy authorization", AxiosError_default.ERR_BAD_OPTION, { proxy }); } - const base64 = Buffer.from(proxy.auth, "utf8").toString("base64"); + const base64 = Buffer.from(proxyAuth, "utf8").toString("base64"); options.headers["Proxy-Authorization"] = "Basic " + base64; } - options.headers.host = options.hostname + (options.port ? ":" + options.port : ""); - const proxyHost = proxy.hostname || proxy.host; + let hasUserHostHeader = false; + for (const name of Object.keys(options.headers)) { + if (name.toLowerCase() === "host") { + hasUserHostHeader = true; + break; + } + } + if (!hasUserHostHeader) { + options.headers.host = options.hostname + (options.port ? ":" + options.port : ""); + } + const proxyHost = readProxyField("hostname") || readProxyField("host"); options.hostname = proxyHost; options.host = proxyHost; - options.port = proxy.port; + options.port = readProxyField("port"); options.path = location; - if (proxy.protocol) { - options.protocol = proxy.protocol.includes(":") ? proxy.protocol : `${proxy.protocol}:`; + const proxyProtocol = readProxyField("protocol"); + if (proxyProtocol) { + options.protocol = proxyProtocol.includes(":") ? proxyProtocol : `${proxyProtocol}:`; } } options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { - setProxy(redirectOptions, configProxy, redirectOptions.href); + setProxy(redirectOptions, configProxy, redirectOptions.href, true); }; } var isHttpAdapterSupported = typeof process !== "undefined" && utils_default.kindOf(process) === "process"; @@ -32282,12 +32600,20 @@ var http2Transport = { }; var http_default = isHttpAdapterSupported && function httpAdapter(config) { return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { - let { data, lookup, family, httpVersion = 1, http2Options } = config; - const { responseType, responseEncoding } = config; + const own2 = (key) => utils_default.hasOwnProp(config, key) ? config[key] : void 0; + let data = own2("data"); + let lookup = own2("lookup"); + let family = own2("family"); + let httpVersion = own2("httpVersion"); + if (httpVersion === void 0) httpVersion = 1; + let http2Options = own2("http2Options"); + const responseType = own2("responseType"); + const responseEncoding = own2("responseEncoding"); const method = config.method.toUpperCase(); let isDone; let rejected = false; let req; + let connectPhaseTimer; httpVersion = +httpVersion; if (Number.isNaN(httpVersion)) { throw TypeError(`Invalid protocol version: '${config.httpVersion}' is not a number`); @@ -32319,8 +32645,28 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { console.warn("emit error", err); } } + function clearConnectPhaseTimer() { + if (connectPhaseTimer) { + clearTimeout(connectPhaseTimer); + connectPhaseTimer = null; + } + } + function createTimeoutError() { + let timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded"; + const transitional2 = config.transitional || transitional_default; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + return new AxiosError_default( + timeoutErrorMessage, + transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED, + config, + req + ); + } abortEmitter.once("abort", reject); const onFinished = () => { + clearConnectPhaseTimer(); if (config.cancelToken) { config.cancelToken.unsubscribe(abort); } @@ -32337,6 +32683,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { } onDone((response, isRejected) => { isDone = true; + clearConnectPhaseTimer(); if (isRejected) { rejected = true; onFinished(); @@ -32424,8 +32771,8 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { boundary: userBoundary && userBoundary[1] || void 0 } ); - } else if (utils_default.isFormData(data) && utils_default.isFunction(data.getHeaders)) { - headers.set(data.getHeaders()); + } else if (utils_default.isFormData(data) && utils_default.isFunction(data.getHeaders) && data.getHeaders !== Object.prototype.getHeaders) { + setFormDataHeaders(headers, data.getHeaders(), own2("formDataHeaderPolicy")); if (!headers.hasContentLength()) { try { const knownLength = await import_util2.default.promisify(data.getLength).call(data); @@ -32495,14 +32842,15 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { ); } let auth = void 0; - if (config.auth) { - const username = config.auth.username || ""; - const password = config.auth.password || ""; + const configAuth = own2("auth"); + if (configAuth) { + const username = configAuth.username || ""; + const password = configAuth.password || ""; auth = username + ":" + password; } if (!auth && parsed.username) { - const urlUsername = parsed.username; - const urlPassword = parsed.password; + const urlUsername = decodeURIComponentSafe(parsed.username); + const urlPassword = decodeURIComponentSafe(parsed.password); auth = urlUsername + ":" + urlPassword; } auth && headers.delete("authorization"); @@ -32525,7 +32873,7 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { "gzip, compress, deflate" + (isBrotliSupported ? ", br" : ""), false ); - const options = { + const options = Object.assign(/* @__PURE__ */ Object.create(null), { path: path2, method, headers: headers.toJSON(), @@ -32534,11 +32882,32 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { protocol, family, beforeRedirect: dispatchBeforeRedirect, - beforeRedirects: {}, + beforeRedirects: /* @__PURE__ */ Object.create(null), http2Options - }; + }); !utils_default.isUndefined(lookup) && (options.lookup = lookup); if (config.socketPath) { + if (typeof config.socketPath !== "string") { + return reject( + new AxiosError_default("socketPath must be a string", AxiosError_default.ERR_BAD_OPTION_VALUE, config) + ); + } + if (config.allowedSocketPaths != null) { + const allowed = Array.isArray(config.allowedSocketPaths) ? config.allowedSocketPaths : [config.allowedSocketPaths]; + const resolvedSocket = (0, import_path.resolve)(config.socketPath); + const isAllowed = allowed.some( + (entry) => typeof entry === "string" && (0, import_path.resolve)(entry) === resolvedSocket + ); + if (!isAllowed) { + return reject( + new AxiosError_default( + `socketPath "${config.socketPath}" is not permitted by allowedSocketPaths`, + AxiosError_default.ERR_BAD_OPTION_VALUE, + config + ) + ); + } + } options.socketPath = config.socketPath; } else { options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname; @@ -32550,21 +32919,25 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { ); } let transport; + let isNativeTransport = false; const isHttpsRequest = isHttps.test(options.protocol); options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; if (isHttp2) { transport = http2Transport; } else { - if (config.transport) { - transport = config.transport; + const configTransport = own2("transport"); + if (configTransport) { + transport = configTransport; } else if (config.maxRedirects === 0) { transport = isHttpsRequest ? import_https.default : import_http.default; + isNativeTransport = true; } else { if (config.maxRedirects) { options.maxRedirects = config.maxRedirects; } - if (config.beforeRedirect) { - options.beforeRedirects.config = config.beforeRedirect; + const configBeforeRedirect = own2("beforeRedirect"); + if (configBeforeRedirect) { + options.beforeRedirects.config = configBeforeRedirect; } transport = isHttpsRequest ? httpsFollow : httpFollow; } @@ -32574,10 +32947,9 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { } else { options.maxBodyLength = Infinity; } - if (config.insecureHTTPParser) { - options.insecureHTTPParser = config.insecureHTTPParser; - } + options.insecureHTTPParser = Boolean(own2("insecureHTTPParser")); req = transport.request(options, function handleResponse(res) { + clearConnectPhaseTimer(); if (req.destroyed) return; const streams = [res]; const responseLength = utils_default.toFiniteNumber(res.headers["content-length"]); @@ -32633,6 +33005,28 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { request: lastRequest }; if (responseType === "stream") { + if (config.maxContentLength > -1) { + const limit = config.maxContentLength; + const source = responseStream; + async function* enforceMaxContentLength() { + let totalResponseBytes = 0; + for await (const chunk of source) { + totalResponseBytes += chunk.length; + if (totalResponseBytes > limit) { + throw new AxiosError_default( + "maxContentLength size of " + limit + " exceeded", + AxiosError_default.ERR_BAD_RESPONSE, + config, + lastRequest + ); + } + yield chunk; + } + } + responseStream = import_stream4.default.Readable.from(enforceMaxContentLength(), { + objectMode: false + }); + } response.data = responseStream; settle(resolve, reject, response); } else { @@ -32662,14 +33056,15 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { "stream has been aborted", AxiosError_default.ERR_BAD_RESPONSE, config, - lastRequest + lastRequest, + response ); responseStream.destroy(err); reject(err); }); responseStream.on("error", function handleStreamError(err) { - if (req.destroyed) return; - reject(AxiosError_default.from(err, null, config, lastRequest)); + if (rejected) return; + reject(AxiosError_default.from(err, null, config, lastRequest, response)); }); responseStream.on("end", function handleStreamEnd() { try { @@ -32704,8 +33099,29 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { req.on("error", function handleRequestError(err) { reject(AxiosError_default.from(err, null, config, req)); }); + const boundSockets = /* @__PURE__ */ new Set(); req.on("socket", function handleRequestSocket(socket) { socket.setKeepAlive(true, 1e3 * 60); + if (!socket[kAxiosSocketListener]) { + socket.on("error", function handleSocketError(err) { + const current = socket[kAxiosCurrentReq]; + if (current && !current.destroyed) { + current.destroy(err); + } + }); + socket[kAxiosSocketListener] = true; + } + socket[kAxiosCurrentReq] = req; + boundSockets.add(socket); + }); + req.once("close", function clearCurrentReq() { + clearConnectPhaseTimer(); + for (const socket of boundSockets) { + if (socket[kAxiosCurrentReq] === req) { + socket[kAxiosCurrentReq] = null; + } + } + boundSockets.clear(); }); if (config.timeout) { const timeout = parseInt(config.timeout, 10); @@ -32720,22 +33136,14 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { ); return; } - req.setTimeout(timeout, function handleRequestTimeout() { + const handleTimeout = function handleTimeout2() { if (isDone) return; - let timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded"; - const transitional2 = config.transitional || transitional_default; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - abort( - new AxiosError_default( - timeoutErrorMessage, - transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED, - config, - req - ) - ); - }); + abort(createTimeoutError()); + }; + if (isNativeTransport && timeout > 0) { + connectPhaseTimer = setTimeout(handleTimeout, timeout); + } + req.setTimeout(timeout, handleTimeout); } else { req.setTimeout(0); } @@ -32754,7 +33162,37 @@ var http_default = isHttpAdapterSupported && function httpAdapter(config) { abort(new CanceledError_default("Request stream has been aborted", config, req)); } }); - data.pipe(req); + let uploadStream = data; + if (config.maxBodyLength > -1 && config.maxRedirects === 0) { + const limit = config.maxBodyLength; + let bytesSent = 0; + uploadStream = import_stream4.default.pipeline( + [ + data, + new import_stream4.default.Transform({ + transform(chunk, _enc, cb) { + bytesSent += chunk.length; + if (bytesSent > limit) { + return cb( + new AxiosError_default( + "Request body larger than maxBodyLength limit", + AxiosError_default.ERR_BAD_REQUEST, + config, + req + ) + ); + } + cb(null, chunk); + } + }) + ], + utils_default.noop + ); + uploadStream.on("error", (err) => { + if (!req.destroyed) req.destroy(err); + }); + } + uploadStream.pipe(req); } else { data && req.write(data); req.end(); @@ -32797,8 +33235,15 @@ var cookies_default = platform_default.hasStandardBrowserEnv ? ( }, read(name) { if (typeof document === "undefined") return null; - const match = document.cookie.match(new RegExp("(?:^|; )" + name + "=([^;]*)")); - return match ? decodeURIComponent(match[1]) : null; + const cookies = document.cookie.split(";"); + for (let i = 0; i < cookies.length; i++) { + const cookie = cookies[i].replace(/^\s+/, ""); + const eq = cookie.indexOf("="); + if (eq !== -1 && cookie.slice(0, eq) === name) { + return decodeURIComponent(cookie.slice(eq + 1)); + } + } + return null; }, remove(name) { this.write(name, "", Date.now() - 864e5, "/"); @@ -32821,7 +33266,16 @@ var cookies_default = platform_default.hasStandardBrowserEnv ? ( var headersToObject = (thing) => thing instanceof AxiosHeaders_default ? { ...thing } : thing; function mergeConfig(config1, config2) { config2 = config2 || {}; - const config = {}; + const config = /* @__PURE__ */ Object.create(null); + Object.defineProperty(config, "hasOwnProperty", { + // Null-proto descriptor so a polluted Object.prototype.get cannot turn + // this data descriptor into an accessor descriptor on the way in. + __proto__: null, + value: Object.prototype.hasOwnProperty, + enumerable: false, + writable: true, + configurable: true + }); function getMergedValue(target, source, prop, caseless) { if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) { return utils_default.merge.call({ caseless }, target, source); @@ -32852,9 +33306,9 @@ function mergeConfig(config1, config2) { } } function mergeDirectKeys(a, b, prop) { - if (prop in config2) { + if (utils_default.hasOwnProp(config2, prop)) { return getMergedValue(a, b); - } else if (prop in config1) { + } else if (utils_default.hasOwnProp(config1, prop)) { return getMergedValue(void 0, a); } } @@ -32885,6 +33339,7 @@ function mergeConfig(config1, config2) { httpsAgent: defaultToConfig2, cancelToken: defaultToConfig2, socketPath: defaultToConfig2, + allowedSocketPaths: defaultToConfig2, responseEncoding: defaultToConfig2, validateStatus: mergeDirectKeys, headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true) @@ -32892,46 +33347,68 @@ function mergeConfig(config1, config2) { utils_default.forEach(Object.keys({ ...config1, ...config2 }), function computeConfigValue(prop) { if (prop === "__proto__" || prop === "constructor" || prop === "prototype") return; const merge2 = utils_default.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties; - const configValue = merge2(config1[prop], config2[prop], prop); + const a = utils_default.hasOwnProp(config1, prop) ? config1[prop] : void 0; + const b = utils_default.hasOwnProp(config2, prop) ? config2[prop] : void 0; + const configValue = merge2(a, b, prop); utils_default.isUndefined(configValue) && merge2 !== mergeDirectKeys || (config[prop] = configValue); }); return config; } // node_modules/axios/lib/helpers/resolveConfig.js +var FORM_DATA_CONTENT_HEADERS2 = ["content-type", "content-length"]; +function setFormDataHeaders2(headers, formHeaders, policy) { + if (policy !== "content-only") { + headers.set(formHeaders); + return; + } + Object.entries(formHeaders).forEach(([key, val]) => { + if (FORM_DATA_CONTENT_HEADERS2.includes(key.toLowerCase())) { + headers.set(key, val); + } + }); +} +var encodeUTF8 = (str) => encodeURIComponent(str).replace( + /%([0-9A-F]{2})/gi, + (_, hex) => String.fromCharCode(parseInt(hex, 16)) +); var resolveConfig_default = (config) => { const newConfig = mergeConfig({}, config); - let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig; + const own2 = (key) => utils_default.hasOwnProp(newConfig, key) ? newConfig[key] : void 0; + const data = own2("data"); + let withXSRFToken = own2("withXSRFToken"); + const xsrfHeaderName = own2("xsrfHeaderName"); + const xsrfCookieName = own2("xsrfCookieName"); + let headers = own2("headers"); + const auth = own2("auth"); + const baseURL = own2("baseURL"); + const allowAbsoluteUrls = own2("allowAbsoluteUrls"); + const url2 = own2("url"); newConfig.headers = headers = AxiosHeaders_default.from(headers); newConfig.url = buildURL( - buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), + buildFullPath(baseURL, url2, allowAbsoluteUrls), config.params, config.paramsSerializer ); if (auth) { headers.set( "Authorization", - "Basic " + btoa( - (auth.username || "") + ":" + (auth.password ? unescape(encodeURIComponent(auth.password)) : "") - ) + "Basic " + btoa((auth.username || "") + ":" + (auth.password ? encodeUTF8(auth.password) : "")) ); } if (utils_default.isFormData(data)) { if (platform_default.hasStandardBrowserEnv || platform_default.hasStandardBrowserWebWorkerEnv) { headers.setContentType(void 0); } else if (utils_default.isFunction(data.getHeaders)) { - const formHeaders = data.getHeaders(); - const allowedHeaders = ["content-type", "content-length"]; - Object.entries(formHeaders).forEach(([key, val]) => { - if (allowedHeaders.includes(key.toLowerCase())) { - headers.set(key, val); - } - }); + setFormDataHeaders2(headers, data.getHeaders(), own2("formDataHeaderPolicy")); } } if (platform_default.hasStandardBrowserEnv) { - withXSRFToken && utils_default.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); - if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin_default(newConfig.url)) { + if (utils_default.isFunction(withXSRFToken)) { + withXSRFToken = withXSRFToken(newConfig); + } + const shouldSendXSRF = withXSRFToken === true || withXSRFToken == null && isURLSameOrigin_default(newConfig.url); + if (shouldSendXSRF) { const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies_default.read(xsrfCookieName); if (xsrfValue) { headers.set(xsrfHeaderName, xsrfValue); @@ -32997,7 +33474,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { if (!request || request.readyState !== 4) { return; } - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) { + if (request.status === 0 && !(request.responseURL && request.responseURL.startsWith("file:"))) { return; } setTimeout(onloadend); @@ -33008,6 +33485,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { return; } reject(new AxiosError_default("Request aborted", AxiosError_default.ECONNABORTED, config, request)); + done(); request = null; }; request.onerror = function handleError(event) { @@ -33015,6 +33493,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { const err = new AxiosError_default(msg, AxiosError_default.ERR_NETWORK, config, request); err.event = event || null; reject(err); + done(); request = null; }; request.ontimeout = function handleTimeout() { @@ -33031,6 +33510,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { request ) ); + done(); request = null; }; requestData === void 0 && requestHeaders.setContentType(null); @@ -33061,6 +33541,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { } reject(!cancel || cancel.type ? new CanceledError_default(null, config, request) : cancel); request.abort(); + done(); request = null; }; _config.cancelToken && _config.cancelToken.subscribe(onCanceled); @@ -33069,7 +33550,7 @@ var xhr_default = isXHRAdapterSupported && function(config) { } } const protocol = parseProtocol(_config.url); - if (protocol && platform_default.protocols.indexOf(protocol) === -1) { + if (protocol && !platform_default.protocols.includes(protocol)) { reject( new AxiosError_default( "Unsupported protocol " + protocol + ":", @@ -33204,11 +33685,6 @@ var trackStream = (stream4, chunkSize, onProgress, onFinish) => { // node_modules/axios/lib/adapters/fetch.js var DEFAULT_CHUNK_SIZE = 64 * 1024; var { isFunction: isFunction2 } = utils_default; -var globalFetchAPI = (({ Request, Response }) => ({ - Request, - Response -}))(utils_default.global); -var { ReadableStream: ReadableStream2, TextEncoder: TextEncoder2 } = utils_default.global; var test = (fn, ...args) => { try { return !!fn(...args); @@ -33217,11 +33693,16 @@ var test = (fn, ...args) => { } }; var factory = (env) => { + const globalObject = utils_default.global ?? globalThis; + const { ReadableStream: ReadableStream2, TextEncoder: TextEncoder2 } = globalObject; env = utils_default.merge.call( { skipUndefined: true }, - globalFetchAPI, + { + Request: globalObject.Request, + Response: globalObject.Response + }, env ); const { fetch: envFetch, Request, Response } = env; @@ -33235,16 +33716,18 @@ var factory = (env) => { const encodeText = isFetchSupported && (typeof TextEncoder2 === "function" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder2()) : async (str) => new Uint8Array(await new Request(str).arrayBuffer())); const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => { let duplexAccessed = false; - const body = new ReadableStream2(); - const hasContentType = new Request(platform_default.origin, { - body, + const request = new Request(platform_default.origin, { + body: new ReadableStream2(), method: "POST", get duplex() { duplexAccessed = true; return "half"; } - }).headers.has("Content-Type"); - body.cancel(); + }); + const hasContentType = request.headers.has("Content-Type"); + if (request.body != null) { + request.body.cancel(); + } return duplexAccessed && !hasContentType; }); const supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(() => utils_default.isReadableStream(new Response("").body)); @@ -33307,8 +33790,12 @@ var factory = (env) => { responseType, headers, withCredentials = "same-origin", - fetchOptions + fetchOptions, + maxContentLength, + maxBodyLength } = resolveConfig_default(config); + const hasMaxContentLength = utils_default.isNumber(maxContentLength) && maxContentLength > -1; + const hasMaxBodyLength = utils_default.isNumber(maxBodyLength) && maxBodyLength > -1; let _fetch = envFetch || fetch; responseType = responseType ? (responseType + "").toLowerCase() : "text"; let composedSignal = composeSignals_default( @@ -33321,6 +33808,28 @@ var factory = (env) => { }); let requestContentLength; try { + if (hasMaxContentLength && typeof url2 === "string" && url2.startsWith("data:")) { + const estimated = estimateDataURLDecodedBytes(url2); + if (estimated > maxContentLength) { + throw new AxiosError_default( + "maxContentLength size of " + maxContentLength + " exceeded", + AxiosError_default.ERR_BAD_RESPONSE, + config, + request + ); + } + } + if (hasMaxBodyLength && method !== "get" && method !== "head") { + const outboundLength = await resolveBodyLength(headers, data); + if (typeof outboundLength === "number" && isFinite(outboundLength) && outboundLength > maxBodyLength) { + throw new AxiosError_default( + "Request body larger than maxBodyLength limit", + AxiosError_default.ERR_BAD_REQUEST, + config, + request + ); + } + } if (onUploadProgress && supportsRequestStream && method !== "get" && method !== "head" && (requestContentLength = await resolveBodyLength(headers, data)) !== 0) { let _request = new Request(url2, { method: "POST", @@ -33343,6 +33852,13 @@ var factory = (env) => { withCredentials = withCredentials ? "include" : "omit"; } const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype; + if (utils_default.isFormData(data)) { + const contentType = headers.getContentType(); + if (contentType && /^multipart\/form-data/i.test(contentType) && !/boundary=/i.test(contentType)) { + headers.delete("content-type"); + } + } + headers.set("User-Agent", "axios/" + VERSION, false); const resolvedOptions = { ...fetchOptions, signal: composedSignal, @@ -33354,8 +33870,19 @@ var factory = (env) => { }; request = isRequestSupported && new Request(url2, resolvedOptions); let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url2, resolvedOptions)); + if (hasMaxContentLength) { + const declaredLength = utils_default.toFiniteNumber(response.headers.get("content-length")); + if (declaredLength != null && declaredLength > maxContentLength) { + throw new AxiosError_default( + "maxContentLength size of " + maxContentLength + " exceeded", + AxiosError_default.ERR_BAD_RESPONSE, + config, + request + ); + } + } const isStreamResponse = supportsResponseStream && (responseType === "stream" || responseType === "response"); - if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) { + if (supportsResponseStream && response.body && (onDownloadProgress || hasMaxContentLength || isStreamResponse && unsubscribe)) { const options = {}; ["status", "statusText", "headers"].forEach((prop) => { options[prop] = response[prop]; @@ -33365,8 +33892,23 @@ var factory = (env) => { responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true) ) || []; + let bytesRead = 0; + const onChunkProgress = (loadedBytes) => { + if (hasMaxContentLength) { + bytesRead = loadedBytes; + if (bytesRead > maxContentLength) { + throw new AxiosError_default( + "maxContentLength size of " + maxContentLength + " exceeded", + AxiosError_default.ERR_BAD_RESPONSE, + config, + request + ); + } + } + onProgress && onProgress(loadedBytes); + }; response = new Response( - trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + trackStream(response.body, DEFAULT_CHUNK_SIZE, onChunkProgress, () => { flush && flush(); unsubscribe && unsubscribe(); }), @@ -33378,6 +33920,26 @@ var factory = (env) => { response, config ); + if (hasMaxContentLength && !supportsResponseStream && !isStreamResponse) { + let materializedSize; + if (responseData != null) { + if (typeof responseData.byteLength === "number") { + materializedSize = responseData.byteLength; + } else if (typeof responseData.size === "number") { + materializedSize = responseData.size; + } else if (typeof responseData === "string") { + materializedSize = typeof TextEncoder2 === "function" ? new TextEncoder2().encode(responseData).byteLength : responseData.length; + } + } + if (typeof materializedSize === "number" && materializedSize > maxContentLength) { + throw new AxiosError_default( + "maxContentLength size of " + maxContentLength + " exceeded", + AxiosError_default.ERR_BAD_RESPONSE, + config, + request + ); + } + } !isStreamResponse && unsubscribe && unsubscribe(); return await new Promise((resolve, reject) => { settle(resolve, reject, { @@ -33391,6 +33953,13 @@ var factory = (env) => { }); } catch (err) { unsubscribe && unsubscribe(); + if (composedSignal && composedSignal.aborted && composedSignal.reason instanceof AxiosError_default) { + const canceledError = composedSignal.reason; + canceledError.config = config; + request && (canceledError.request = request); + err !== canceledError && (canceledError.cause = err); + throw canceledError; + } if (err && err.name === "TypeError" && /Load failed|fetch/i.test(err.message)) { throw Object.assign( new AxiosError_default( @@ -33436,10 +34005,10 @@ var knownAdapters = { utils_default.forEach(knownAdapters, (fn, value) => { if (fn) { try { - Object.defineProperty(fn, "name", { value }); + Object.defineProperty(fn, "name", { __proto__: null, value }); } catch (e) { } - Object.defineProperty(fn, "adapterName", { value }); + Object.defineProperty(fn, "adapterName", { __proto__: null, value }); } }); var renderReason = (reason) => `- ${reason}`; @@ -33510,7 +34079,12 @@ function dispatchRequest(config) { return adapter2(config).then( function onAdapterResolution(response) { throwIfCancellationRequested(config); - response.data = transformData.call(config, config.transformResponse, response); + config.response = response; + try { + response.data = transformData.call(config, config.transformResponse, response); + } finally { + delete config.response; + } response.headers = AxiosHeaders_default.from(response.headers); return response; }, @@ -33518,11 +34092,16 @@ function dispatchRequest(config) { if (!isCancel(reason)) { throwIfCancellationRequested(config); if (reason && reason.response) { - reason.response.data = transformData.call( - config, - config.transformResponse, - reason.response - ); + config.response = reason.response; + try { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + } finally { + delete config.response; + } reason.response.headers = AxiosHeaders_default.from(reason.response.headers); } } @@ -33576,7 +34155,7 @@ function assertOptions(options, schema, allowUnknown) { let i = keys.length; while (i-- > 0) { const opt = keys[i]; - const validator = schema[opt]; + const validator = Object.prototype.hasOwnProperty.call(schema, opt) ? schema[opt] : void 0; if (validator) { const value = options[opt]; const result = value === void 0 || validator(value, opt, options); @@ -33623,12 +34202,23 @@ var Axios = class { if (err instanceof Error) { let dummy = {}; Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error(); - const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : ""; + const stack = (() => { + if (!dummy.stack) { + return ""; + } + const firstNewlineIndex = dummy.stack.indexOf("\n"); + return firstNewlineIndex === -1 ? "" : dummy.stack.slice(firstNewlineIndex + 1); + })(); try { if (!err.stack) { err.stack = stack; - } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ""))) { - err.stack += "\n" + stack; + } else if (stack) { + const firstNewlineIndex = stack.indexOf("\n"); + const secondNewlineIndex = firstNewlineIndex === -1 ? -1 : stack.indexOf("\n", firstNewlineIndex + 1); + const stackWithoutTwoTopLines = secondNewlineIndex === -1 ? "" : stack.slice(secondNewlineIndex + 1); + if (!String(err.stack).endsWith(stackWithoutTwoTopLines)) { + err.stack += "\n" + stack; + } } } catch (e) { } @@ -33689,7 +34279,7 @@ var Axios = class { ); config.method = (config.method || this.defaults.method || "get").toLowerCase(); let contextHeaders = headers && utils_default.merge(headers.common, headers[config.method]); - headers && utils_default.forEach(["delete", "get", "head", "post", "put", "patch", "common"], (method) => { + headers && utils_default.forEach(["delete", "get", "head", "post", "put", "patch", "query", "common"], (method) => { delete headers[method]; }); config.headers = AxiosHeaders_default.concat(contextHeaders, headers); @@ -33767,7 +34357,7 @@ utils_default.forEach(["delete", "get", "head", "options"], function forEachMeth ); }; }); -utils_default.forEach(["post", "put", "patch"], function forEachMethodWithData(method) { +utils_default.forEach(["post", "put", "patch", "query"], function forEachMethodWithData(method) { function generateHTTPMethod(isForm) { return function httpMethod(url2, data, config) { return this.request( @@ -33783,7 +34373,9 @@ utils_default.forEach(["post", "put", "patch"], function forEachMethodWithData(m }; } Axios.prototype[method] = generateHTTPMethod(); - Axios.prototype[method + "Form"] = generateHTTPMethod(true); + if (method !== "query") { + Axios.prototype[method + "Form"] = generateHTTPMethod(true); + } }); var Axios_default = Axios; @@ -33980,7 +34572,7 @@ function createInstance(defaultConfig) { const instance = bind(Axios_default.prototype.request, context); utils_default.extend(instance, Axios_default.prototype, context, { allOwnKeys: true }); utils_default.extend(instance, context, null, { allOwnKeys: true }); - instance.create = function create(instanceConfig) { + instance.create = function create2(instanceConfig) { return createInstance(mergeConfig(defaultConfig, instanceConfig)); }; return instance; @@ -34024,7 +34616,8 @@ var { HttpStatusCode: HttpStatusCode2, formToJSON, getAdapter: getAdapter2, - mergeConfig: mergeConfig2 + mergeConfig: mergeConfig2, + create } = axios_default; // src/invoke.js @@ -34540,7 +35133,7 @@ var debugExtra = (name, json) => { // src/integration/slack-api.js var import_fs2 = __toESM(require("fs"), 1); -var import_path = __toESM(require("path"), 1); +var import_path2 = __toESM(require("path"), 1); // src/integration/slack-api-post.js var import_https2 = __toESM(require("https"), 1); @@ -34708,7 +35301,7 @@ var buildErrorMessage = (res) => { return `Error! ${JSON.stringify(res)} (response)`; }; var validateUploadFile = (filePath) => { - const extension = import_path.default.extname(filePath).toLowerCase(); + const extension = import_path2.default.extname(filePath).toLowerCase(); if (!ALLOWED_EXTENSIONS.has(extension)) { throw new Error(`File type not allowed: ${extension || ""}`); } @@ -34747,7 +35340,7 @@ var apiUpdateMessage = async (token, message) => { var apiUploadFile = async (token, payload) => { validateUploadFile(payload.filePath); const fileContent = import_fs2.default.readFileSync(payload.filePath); - const filename = payload.filename || import_path.default.basename(payload.filePath); + const filename = payload.filename || import_path2.default.basename(payload.filePath); const urlRes = await postForm(token, "/api/files.getUploadURLExternal", { filename, length: fileContent.length diff --git a/package-lock.json b/package-lock.json index cb1f45d..0ba25f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2368,11 +2368,13 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.14.0", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.0.tgz", + "integrity": "sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==", "dev": true, "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "proxy-from-env": "^2.1.0" } @@ -3486,7 +3488,9 @@ "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.11", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ {