...**/!(*.map|*.min.js)Size
Gzip
Dependencies
Publish
Install
Publish
Install
@@ -1,4 +1,4 @@ | |||
| 1 | /*! Axios v1.10.0 Copyright (c) 2025 Matt Zabriskie and contributors */ | 1 | /*! Axios v1.11.0 Copyright (c) 2025 Matt Zabriskie and contributors */ |
| 2 | 'use strict'; | 2 | 'use strict'; |
| 3 | 3 | ||
| 4 | function bind(fn, thisArg) { | 4 | function bind(fn, thisArg) { |
@@ -142,6 +142,27 @@ | |||
| 142 | }; | 142 | }; |
| 143 | 143 | ||
| 144 | /** | 144 | /** |
| 145 | * Determine if a value is an empty object (safely handles Buffers) | ||
| 146 | * | ||
| 147 | * @param {*} val The value to test | ||
| 148 | * | ||
| 149 | * @returns {boolean} True if value is an empty object, otherwise false | ||
| 150 | */ | ||
| 151 | const isEmptyObject = (val) => { | ||
| 152 | // Early return for non-objects or Buffers to prevent RangeError | ||
| 153 | if (!isObject(val) || isBuffer(val)) { | ||
| 154 | return false; | ||
| 155 | } | ||
| 156 | |||
| 157 | try { | ||
| 158 | return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; | ||
| 159 | } catch (e) { | ||
| 160 | // Fallback for any other objects that might cause RangeError with Object.keys() | ||
| 161 | return false; | ||
| 162 | } | ||
| 163 | }; | ||
| 164 | |||
| 165 | /** | ||
| 145 | * Determine if a value is a Date | 166 | * Determine if a value is a Date |
| 146 | * | 167 | * |
| 147 | * @param {*} val The value to test | 168 | * @param {*} val The value to test |
@@ -263,6 +284,11 @@ | |||
| 263 | fn.call(null, obj[i], i, obj); | 284 | fn.call(null, obj[i], i, obj); |
| 264 | } | 285 | } |
| 265 | } else { | 286 | } else { |
| 287 | // Buffer check | ||
| 288 | if (isBuffer(obj)) { | ||
| 289 | return; | ||
| 290 | } | ||
| 291 | |||
| 266 | // Iterate over object keys | 292 | // Iterate over object keys |
| 267 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | 293 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); |
| 268 | const len = keys.length; | 294 | const len = keys.length; |
@@ -276,6 +302,10 @@ | |||
| 276 | } | 302 | } |
| 277 | 303 | ||
| 278 | function findKey(obj, key) { | 304 | function findKey(obj, key) { |
| 305 | if (isBuffer(obj)){ | ||
| 306 | return null; | ||
| 307 | } | ||
| 308 | |||
| 279 | key = key.toLowerCase(); | 309 | key = key.toLowerCase(); |
| 280 | const keys = Object.keys(obj); | 310 | const keys = Object.keys(obj); |
| 281 | let i = keys.length; | 311 | let i = keys.length; |
@@ -629,6 +659,11 @@ | |||
| 629 | return; | 659 | return; |
| 630 | } | 660 | } |
| 631 | 661 | ||
| 662 | //Buffer check | ||
| 663 | if (isBuffer(source)) { | ||
| 664 | return source; | ||
| 665 | } | ||
| 666 | |||
| 632 | if(!('toJSON' in source)) { | 667 | if(!('toJSON' in source)) { |
| 633 | stack[i] = source; | 668 | stack[i] = source; |
| 634 | const target = isArray(source) ? [] : {}; | 669 | const target = isArray(source) ? [] : {}; |
@@ -700,6 +735,7 @@ | |||
| 700 | isBoolean, | 735 | isBoolean, |
| 701 | isObject, | 736 | isObject, |
| 702 | isPlainObject, | 737 | isPlainObject, |
| 738 | isEmptyObject, | ||
| 703 | isReadableStream, | 739 | isReadableStream, |
| 704 | isRequest, | 740 | isRequest, |
| 705 | isResponse, | 741 | isResponse, |
@@ -1331,7 +1367,7 @@ | |||
| 1331 | }; | 1367 | }; |
| 1332 | 1368 | ||
| 1333 | function toURLEncodedForm(data, options) { | 1369 | function toURLEncodedForm(data, options) { |
| 1334 | return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ | 1370 | return toFormData(data, new platform.classes.URLSearchParams(), { |
| 1335 | visitor: function(value, key, path, helpers) { | 1371 | visitor: function(value, key, path, helpers) { |
| 1336 | if (platform.isNode && utils$1.isBuffer(value)) { | 1372 | if (platform.isNode && utils$1.isBuffer(value)) { |
| 1337 | this.append(key, value.toString('base64')); | 1373 | this.append(key, value.toString('base64')); |
@@ -1339,8 +1375,9 @@ | |||
| 1339 | } | 1375 | } |
| 1340 | 1376 | ||
| 1341 | return helpers.defaultVisitor.apply(this, arguments); | 1377 | return helpers.defaultVisitor.apply(this, arguments); |
| 1342 | } | ||
| 1343 | }, options)); | 1378 | }, |
| 1379 | ...options | ||
| 1380 | }); | ||
| 1344 | } | 1381 | } |
| 1345 | 1382 | ||
| 1346 | /** | 1383 | /** |
@@ -2093,7 +2130,7 @@ | |||
| 2093 | clearTimeout(timer); | 2130 | clearTimeout(timer); |
| 2094 | timer = null; | 2131 | timer = null; |
| 2095 | } | 2132 | } |
| 2096 | fn.apply(null, args); | 2133 | fn(...args); |
| 2097 | }; | 2134 | }; |
| 2098 | 2135 | ||
| 2099 | const throttled = (...args) => { | 2136 | const throttled = (...args) => { |
@@ -2349,7 +2386,7 @@ | |||
| 2349 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) | 2386 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) |
| 2350 | }; | 2387 | }; |
| 2351 | 2388 | ||
| 2352 | utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | 2389 | utils$1.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) { |
| 2353 | const merge = mergeMap[prop] || mergeDeepProperties; | 2390 | const merge = mergeMap[prop] || mergeDeepProperties; |
| 2354 | const configValue = merge(config1[prop], config2[prop], prop); | 2391 | const configValue = merge(config1[prop], config2[prop], prop); |
| 2355 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); | 2392 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); |
@@ -3090,7 +3127,7 @@ | |||
| 3090 | }); | 3127 | }); |
| 3091 | } | 3128 | } |
| 3092 | 3129 | ||
| 3093 | const VERSION = "1.10.0"; | 3130 | const VERSION = "1.11.0"; |
| 3094 | 3131 | ||
| 3095 | const validators$1 = {}; | 3132 | const validators$1 = {}; |
| 3096 | 3133 | ||
@@ -3329,8 +3366,8 @@ | |||
| 3329 | 3366 | ||
| 3330 | if (!synchronousRequestInterceptors) { | 3367 | if (!synchronousRequestInterceptors) { |
| 3331 | const chain = [dispatchRequest.bind(this), undefined]; | 3368 | const chain = [dispatchRequest.bind(this), undefined]; |
| 3332 | chain.unshift.apply(chain, requestInterceptorChain); | ||
| 3333 | chain.push.apply(chain, responseInterceptorChain); | 3369 | chain.unshift(...requestInterceptorChain); |
| 3370 | chain.push(...responseInterceptorChain); | ||
| 3334 | len = chain.length; | 3371 | len = chain.length; |
| 3335 | 3372 | ||
| 3336 | promise = Promise.resolve(config); | 3373 | promise = Promise.resolve(config); |
@@ -1,4 +1,4 @@ | |||
| 1 | /*! Axios v1.10.0 Copyright (c) 2025 Matt Zabriskie and contributors */ | 1 | /*! Axios v1.11.0 Copyright (c) 2025 Matt Zabriskie and contributors */ |
| 2 | 'use strict'; | 2 | 'use strict'; |
| 3 | 3 | ||
| 4 | const FormData$1 = require('form-data'); | 4 | const FormData$1 = require('form-data'); |
@@ -167,6 +167,27 @@ | |||
| 167 | }; | 167 | }; |
| 168 | 168 | ||
| 169 | /** | 169 | /** |
| 170 | * Determine if a value is an empty object (safely handles Buffers) | ||
| 171 | * | ||
| 172 | * @param {*} val The value to test | ||
| 173 | * | ||
| 174 | * @returns {boolean} True if value is an empty object, otherwise false | ||
| 175 | */ | ||
| 176 | const isEmptyObject = (val) => { | ||
| 177 | // Early return for non-objects or Buffers to prevent RangeError | ||
| 178 | if (!isObject(val) || isBuffer(val)) { | ||
| 179 | return false; | ||
| 180 | } | ||
| 181 | |||
| 182 | try { | ||
| 183 | return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; | ||
| 184 | } catch (e) { | ||
| 185 | // Fallback for any other objects that might cause RangeError with Object.keys() | ||
| 186 | return false; | ||
| 187 | } | ||
| 188 | }; | ||
| 189 | |||
| 190 | /** | ||
| 170 | * Determine if a value is a Date | 191 | * Determine if a value is a Date |
| 171 | * | 192 | * |
| 172 | * @param {*} val The value to test | 193 | * @param {*} val The value to test |
@@ -288,6 +309,11 @@ | |||
| 288 | fn.call(null, obj[i], i, obj); | 309 | fn.call(null, obj[i], i, obj); |
| 289 | } | 310 | } |
| 290 | } else { | 311 | } else { |
| 312 | // Buffer check | ||
| 313 | if (isBuffer(obj)) { | ||
| 314 | return; | ||
| 315 | } | ||
| 316 | |||
| 291 | // Iterate over object keys | 317 | // Iterate over object keys |
| 292 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | 318 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); |
| 293 | const len = keys.length; | 319 | const len = keys.length; |
@@ -301,6 +327,10 @@ | |||
| 301 | } | 327 | } |
| 302 | 328 | ||
| 303 | function findKey(obj, key) { | 329 | function findKey(obj, key) { |
| 330 | if (isBuffer(obj)){ | ||
| 331 | return null; | ||
| 332 | } | ||
| 333 | |||
| 304 | key = key.toLowerCase(); | 334 | key = key.toLowerCase(); |
| 305 | const keys = Object.keys(obj); | 335 | const keys = Object.keys(obj); |
| 306 | let i = keys.length; | 336 | let i = keys.length; |
@@ -654,6 +684,11 @@ | |||
| 654 | return; | 684 | return; |
| 655 | } | 685 | } |
| 656 | 686 | ||
| 687 | //Buffer check | ||
| 688 | if (isBuffer(source)) { | ||
| 689 | return source; | ||
| 690 | } | ||
| 691 | |||
| 657 | if(!('toJSON' in source)) { | 692 | if(!('toJSON' in source)) { |
| 658 | stack[i] = source; | 693 | stack[i] = source; |
| 659 | const target = isArray(source) ? [] : {}; | 694 | const target = isArray(source) ? [] : {}; |
@@ -725,6 +760,7 @@ | |||
| 725 | isBoolean, | 760 | isBoolean, |
| 726 | isObject, | 761 | isObject, |
| 727 | isPlainObject, | 762 | isPlainObject, |
| 763 | isEmptyObject, | ||
| 728 | isReadableStream, | 764 | isReadableStream, |
| 729 | isRequest, | 765 | isRequest, |
| 730 | isResponse, | 766 | isResponse, |
@@ -1374,7 +1410,7 @@ | |||
| 1374 | }; | 1410 | }; |
| 1375 | 1411 | ||
| 1376 | function toURLEncodedForm(data, options) { | 1412 | function toURLEncodedForm(data, options) { |
| 1377 | return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ | 1413 | return toFormData(data, new platform.classes.URLSearchParams(), { |
| 1378 | visitor: function(value, key, path, helpers) { | 1414 | visitor: function(value, key, path, helpers) { |
| 1379 | if (platform.isNode && utils$1.isBuffer(value)) { | 1415 | if (platform.isNode && utils$1.isBuffer(value)) { |
| 1380 | this.append(key, value.toString('base64')); | 1416 | this.append(key, value.toString('base64')); |
@@ -1382,8 +1418,9 @@ | |||
| 1382 | } | 1418 | } |
| 1383 | 1419 | ||
| 1384 | return helpers.defaultVisitor.apply(this, arguments); | 1420 | return helpers.defaultVisitor.apply(this, arguments); |
| 1385 | } | ||
| 1386 | }, options)); | 1421 | }, |
| 1422 | ...options | ||
| 1423 | }); | ||
| 1387 | } | 1424 | } |
| 1388 | 1425 | ||
| 1389 | /** | 1426 | /** |
@@ -2106,7 +2143,7 @@ | |||
| 2106 | return requestedURL; | 2143 | return requestedURL; |
| 2107 | } | 2144 | } |
| 2108 | 2145 | ||
| 2109 | const VERSION = "1.10.0"; | 2146 | const VERSION = "1.11.0"; |
| 2110 | 2147 | ||
| 2111 | function parseProtocol(url) { | 2148 | function parseProtocol(url) { |
| 2112 | const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); | 2149 | const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); |
@@ -2534,7 +2571,7 @@ | |||
| 2534 | clearTimeout(timer); | 2571 | clearTimeout(timer); |
| 2535 | timer = null; | 2572 | timer = null; |
| 2536 | } | 2573 | } |
| 2537 | fn.apply(null, args); | 2574 | fn(...args); |
| 2538 | }; | 2575 | }; |
| 2539 | 2576 | ||
| 2540 | const throttled = (...args) => { | 2577 | const throttled = (...args) => { |
@@ -3408,7 +3445,7 @@ | |||
| 3408 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) | 3445 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) |
| 3409 | }; | 3446 | }; |
| 3410 | 3447 | ||
| 3411 | utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | 3448 | utils$1.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) { |
| 3412 | const merge = mergeMap[prop] || mergeDeepProperties; | 3449 | const merge = mergeMap[prop] || mergeDeepProperties; |
| 3413 | const configValue = merge(config1[prop], config2[prop], prop); | 3450 | const configValue = merge(config1[prop], config2[prop], prop); |
| 3414 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); | 3451 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); |
@@ -4386,8 +4423,8 @@ | |||
| 4386 | 4423 | ||
| 4387 | if (!synchronousRequestInterceptors) { | 4424 | if (!synchronousRequestInterceptors) { |
| 4388 | const chain = [dispatchRequest.bind(this), undefined]; | 4425 | const chain = [dispatchRequest.bind(this), undefined]; |
| 4389 | chain.unshift.apply(chain, requestInterceptorChain); | ||
| 4390 | chain.push.apply(chain, responseInterceptorChain); | 4426 | chain.unshift(...requestInterceptorChain); |
| 4427 | chain.push(...responseInterceptorChain); | ||
| 4391 | len = chain.length; | 4428 | len = chain.length; |
| 4392 | 4429 | ||
| 4393 | promise = Promise.resolve(config); | 4430 | promise = Promise.resolve(config); |
@@ -6,7 +6,7 @@ | |||
| 6 | [Key in axios.Method as Lowercase<Key>]: AxiosHeaders; | 6 | [Key in axios.Method as Lowercase<Key>]: AxiosHeaders; |
| 7 | } & {common: AxiosHeaders}>; | 7 | } & {common: AxiosHeaders}>; |
| 8 | 8 | ||
| 9 | type AxiosHeaderMatcher = (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean; | 9 | type AxiosHeaderMatcher = string | RegExp | ((this: AxiosHeaders, value: string, name: string) => boolean); |
| 10 | 10 | ||
| 11 | type AxiosHeaderParser = (this: AxiosHeaders, value: axios.AxiosHeaderValue, header: string) => any; | 11 | type AxiosHeaderParser = (this: AxiosHeaders, value: axios.AxiosHeaderValue, header: string) => any; |
| 12 | 12 | ||
@@ -77,6 +77,8 @@ | |||
| 77 | getAuthorization(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; | 77 | getAuthorization(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; |
| 78 | hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; | 78 | hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; |
| 79 | 79 | ||
| 80 | getSetCookie(): string[]; | ||
| 81 | |||
| 80 | [Symbol.iterator](): IterableIterator<[string, axios.AxiosHeaderValue]>; | 82 | [Symbol.iterator](): IterableIterator<[string, axios.AxiosHeaderValue]>; |
| 81 | } | 83 | } |
| 82 | 84 | ||
@@ -97,6 +99,14 @@ | |||
| 97 | status?: number; | 99 | status?: number; |
| 98 | toJSON: () => object; | 100 | toJSON: () => object; |
| 99 | cause?: Error; | 101 | cause?: Error; |
| 102 | static from<T = unknown, D = any>( | ||
| 103 | error: Error | unknown, | ||
| 104 | code?: string, | ||
| 105 | config?: axios.InternalAxiosRequestConfig<D>, | ||
| 106 | request?: any, | ||
| 107 | response?: axios.AxiosResponse<T, D>, | ||
| 108 | customProps?: object, | ||
| 109 | ): AxiosError<T, D>; | ||
| 100 | static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; | 110 | static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; |
| 101 | static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; | 111 | static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; |
| 102 | static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; | 112 | static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; |
@@ -424,7 +434,7 @@ | |||
| 424 | // Alias | 434 | // Alias |
| 425 | type RawAxiosRequestConfig<D = any> = AxiosRequestConfig<D>; | 435 | type RawAxiosRequestConfig<D = any> = AxiosRequestConfig<D>; |
| 426 | 436 | ||
| 427 | interface InternalAxiosRequestConfig<D = any> extends AxiosRequestConfig { | 437 | interface InternalAxiosRequestConfig<D = any> extends AxiosRequestConfig<D> { |
| 428 | headers: AxiosRequestHeaders; | 438 | headers: AxiosRequestHeaders; |
| 429 | } | 439 | } |
| 430 | 440 | ||
@@ -542,6 +552,7 @@ | |||
| 542 | formToJSON(form: GenericFormData|GenericHTMLFormElement): object; | 552 | formToJSON(form: GenericFormData|GenericHTMLFormElement): object; |
| 543 | getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; | 553 | getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; |
| 544 | AxiosHeaders: typeof AxiosHeaders; | 554 | AxiosHeaders: typeof AxiosHeaders; |
| 555 | mergeConfig<D = any>(config1: AxiosRequestConfig<D>, config2: AxiosRequestConfig<D>): AxiosRequestConfig<D>; | ||
| 545 | } | 556 | } |
| 546 | } | 557 | } |
| 547 | 558 | ||
@@ -1,4 +1,4 @@ | |||
| 1 | /*! Axios v1.10.0 Copyright (c) 2025 Matt Zabriskie and contributors */ | 1 | /*! Axios v1.11.0 Copyright (c) 2025 Matt Zabriskie and contributors */ |
| 2 | (function (global, factory) { | 2 | (function (global, factory) { |
| 3 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : | 3 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : |
| 4 | typeof define === 'function' && define.amd ? define(factory) : | 4 | typeof define === 'function' && define.amd ? define(factory) : |
@@ -819,6 +819,26 @@ | |||
| 819 | }; | 819 | }; |
| 820 | 820 | ||
| 821 | /** | 821 | /** |
| 822 | * Determine if a value is an empty object (safely handles Buffers) | ||
| 823 | * | ||
| 824 | * @param {*} val The value to test | ||
| 825 | * | ||
| 826 | * @returns {boolean} True if value is an empty object, otherwise false | ||
| 827 | */ | ||
| 828 | var isEmptyObject = function isEmptyObject(val) { | ||
| 829 | // Early return for non-objects or Buffers to prevent RangeError | ||
| 830 | if (!isObject(val) || isBuffer(val)) { | ||
| 831 | return false; | ||
| 832 | } | ||
| 833 | try { | ||
| 834 | return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; | ||
| 835 | } catch (e) { | ||
| 836 | // Fallback for any other objects that might cause RangeError with Object.keys() | ||
| 837 | return false; | ||
| 838 | } | ||
| 839 | }; | ||
| 840 | |||
| 841 | /** | ||
| 822 | * Determine if a value is a Date | 842 | * Determine if a value is a Date |
| 823 | * | 843 | * |
| 824 | * @param {*} val The value to test | 844 | * @param {*} val The value to test |
@@ -942,6 +962,11 @@ | |||
| 942 | fn.call(null, obj[i], i, obj); | 962 | fn.call(null, obj[i], i, obj); |
| 943 | } | 963 | } |
| 944 | } else { | 964 | } else { |
| 965 | // Buffer check | ||
| 966 | if (isBuffer(obj)) { | ||
| 967 | return; | ||
| 968 | } | ||
| 969 | |||
| 945 | // Iterate over object keys | 970 | // Iterate over object keys |
| 946 | var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | 971 | var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); |
| 947 | var len = keys.length; | 972 | var len = keys.length; |
@@ -953,6 +978,9 @@ | |||
| 953 | } | 978 | } |
| 954 | } | 979 | } |
| 955 | function findKey(obj, key) { | 980 | function findKey(obj, key) { |
| 981 | if (isBuffer(obj)) { | ||
| 982 | return null; | ||
| 983 | } | ||
| 956 | key = key.toLowerCase(); | 984 | key = key.toLowerCase(); |
| 957 | var keys = Object.keys(obj); | 985 | var keys = Object.keys(obj); |
| 958 | var i = keys.length; | 986 | var i = keys.length; |
@@ -1286,6 +1314,11 @@ | |||
| 1286 | if (stack.indexOf(source) >= 0) { | 1314 | if (stack.indexOf(source) >= 0) { |
| 1287 | return; | 1315 | return; |
| 1288 | } | 1316 | } |
| 1317 | |||
| 1318 | //Buffer check | ||
| 1319 | if (isBuffer(source)) { | ||
| 1320 | return source; | ||
| 1321 | } | ||
| 1289 | if (!('toJSON' in source)) { | 1322 | if (!('toJSON' in source)) { |
| 1290 | stack[i] = source; | 1323 | stack[i] = source; |
| 1291 | var target = isArray(source) ? [] : {}; | 1324 | var target = isArray(source) ? [] : {}; |
@@ -1347,6 +1380,7 @@ | |||
| 1347 | isBoolean: isBoolean, | 1380 | isBoolean: isBoolean, |
| 1348 | isObject: isObject, | 1381 | isObject: isObject, |
| 1349 | isPlainObject: isPlainObject, | 1382 | isPlainObject: isPlainObject, |
| 1383 | isEmptyObject: isEmptyObject, | ||
| 1350 | isReadableStream: isReadableStream, | 1384 | isReadableStream: isReadableStream, |
| 1351 | isRequest: isRequest, | 1385 | isRequest: isRequest, |
| 1352 | isResponse: isResponse, | 1386 | isResponse: isResponse, |
@@ -1907,7 +1941,7 @@ | |||
| 1907 | var platform = _objectSpread2(_objectSpread2({}, utils), platform$1); | 1941 | var platform = _objectSpread2(_objectSpread2({}, utils), platform$1); |
| 1908 | 1942 | ||
| 1909 | function toURLEncodedForm(data, options) { | 1943 | function toURLEncodedForm(data, options) { |
| 1910 | return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ | 1944 | return toFormData(data, new platform.classes.URLSearchParams(), _objectSpread2({ |
| 1911 | visitor: function visitor(value, key, path, helpers) { | 1945 | visitor: function visitor(value, key, path, helpers) { |
| 1912 | if (platform.isNode && utils$1.isBuffer(value)) { | 1946 | if (platform.isNode && utils$1.isBuffer(value)) { |
| 1913 | this.append(key, value.toString('base64')); | 1947 | this.append(key, value.toString('base64')); |
@@ -2576,7 +2610,7 @@ | |||
| 2576 | clearTimeout(timer); | 2610 | clearTimeout(timer); |
| 2577 | timer = null; | 2611 | timer = null; |
| 2578 | } | 2612 | } |
| 2579 | fn.apply(null, args); | 2613 | fn.apply(void 0, _toConsumableArray(args)); |
| 2580 | }; | 2614 | }; |
| 2581 | var throttled = function throttled() { | 2615 | var throttled = function throttled() { |
| 2582 | var now = Date.now(); | 2616 | var now = Date.now(); |
@@ -2824,7 +2858,7 @@ | |||
| 2824 | return mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true); | 2858 | return mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true); |
| 2825 | } | 2859 | } |
| 2826 | }; | 2860 | }; |
| 2827 | utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | 2861 | utils$1.forEach(Object.keys(_objectSpread2(_objectSpread2({}, config1), config2)), function computeConfigValue(prop) { |
| 2828 | var merge = mergeMap[prop] || mergeDeepProperties; | 2862 | var merge = mergeMap[prop] || mergeDeepProperties; |
| 2829 | var configValue = merge(config1[prop], config2[prop], prop); | 2863 | var configValue = merge(config1[prop], config2[prop], prop); |
| 2830 | utils$1.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); | 2864 | utils$1.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); |
@@ -3677,7 +3711,7 @@ | |||
| 3677 | }); | 3711 | }); |
| 3678 | } | 3712 | } |
| 3679 | 3713 | ||
| 3680 | var VERSION = "1.10.0"; | 3714 | var VERSION = "1.11.0"; |
| 3681 | 3715 | ||
| 3682 | var validators$1 = {}; | 3716 | var validators$1 = {}; |
| 3683 | 3717 | ||
@@ -1,4 +1,4 @@ | |||
| 1 | /*! Axios v1.10.0 Copyright (c) 2025 Matt Zabriskie and contributors */ | 1 | /*! Axios v1.11.0 Copyright (c) 2025 Matt Zabriskie and contributors */ |
| 2 | function bind(fn, thisArg) { | 2 | function bind(fn, thisArg) { |
| 3 | return function wrap() { | 3 | return function wrap() { |
| 4 | return fn.apply(thisArg, arguments); | 4 | return fn.apply(thisArg, arguments); |
@@ -140,6 +140,27 @@ | |||
| 140 | }; | 140 | }; |
| 141 | 141 | ||
| 142 | /** | 142 | /** |
| 143 | * Determine if a value is an empty object (safely handles Buffers) | ||
| 144 | * | ||
| 145 | * @param {*} val The value to test | ||
| 146 | * | ||
| 147 | * @returns {boolean} True if value is an empty object, otherwise false | ||
| 148 | */ | ||
| 149 | const isEmptyObject = (val) => { | ||
| 150 | // Early return for non-objects or Buffers to prevent RangeError | ||
| 151 | if (!isObject(val) || isBuffer(val)) { | ||
| 152 | return false; | ||
| 153 | } | ||
| 154 | |||
| 155 | try { | ||
| 156 | return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; | ||
| 157 | } catch (e) { | ||
| 158 | // Fallback for any other objects that might cause RangeError with Object.keys() | ||
| 159 | return false; | ||
| 160 | } | ||
| 161 | }; | ||
| 162 | |||
| 163 | /** | ||
| 143 | * Determine if a value is a Date | 164 | * Determine if a value is a Date |
| 144 | * | 165 | * |
| 145 | * @param {*} val The value to test | 166 | * @param {*} val The value to test |
@@ -261,6 +282,11 @@ | |||
| 261 | fn.call(null, obj[i], i, obj); | 282 | fn.call(null, obj[i], i, obj); |
| 262 | } | 283 | } |
| 263 | } else { | 284 | } else { |
| 285 | // Buffer check | ||
| 286 | if (isBuffer(obj)) { | ||
| 287 | return; | ||
| 288 | } | ||
| 289 | |||
| 264 | // Iterate over object keys | 290 | // Iterate over object keys |
| 265 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | 291 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); |
| 266 | const len = keys.length; | 292 | const len = keys.length; |
@@ -274,6 +300,10 @@ | |||
| 274 | } | 300 | } |
| 275 | 301 | ||
| 276 | function findKey(obj, key) { | 302 | function findKey(obj, key) { |
| 303 | if (isBuffer(obj)){ | ||
| 304 | return null; | ||
| 305 | } | ||
| 306 | |||
| 277 | key = key.toLowerCase(); | 307 | key = key.toLowerCase(); |
| 278 | const keys = Object.keys(obj); | 308 | const keys = Object.keys(obj); |
| 279 | let i = keys.length; | 309 | let i = keys.length; |
@@ -627,6 +657,11 @@ | |||
| 627 | return; | 657 | return; |
| 628 | } | 658 | } |
| 629 | 659 | ||
| 660 | //Buffer check | ||
| 661 | if (isBuffer(source)) { | ||
| 662 | return source; | ||
| 663 | } | ||
| 664 | |||
| 630 | if(!('toJSON' in source)) { | 665 | if(!('toJSON' in source)) { |
| 631 | stack[i] = source; | 666 | stack[i] = source; |
| 632 | const target = isArray(source) ? [] : {}; | 667 | const target = isArray(source) ? [] : {}; |
@@ -698,6 +733,7 @@ | |||
| 698 | isBoolean, | 733 | isBoolean, |
| 699 | isObject, | 734 | isObject, |
| 700 | isPlainObject, | 735 | isPlainObject, |
| 736 | isEmptyObject, | ||
| 701 | isReadableStream, | 737 | isReadableStream, |
| 702 | isRequest, | 738 | isRequest, |
| 703 | isResponse, | 739 | isResponse, |
@@ -1329,7 +1365,7 @@ | |||
| 1329 | }; | 1365 | }; |
| 1330 | 1366 | ||
| 1331 | function toURLEncodedForm(data, options) { | 1367 | function toURLEncodedForm(data, options) { |
| 1332 | return toFormData$1(data, new platform.classes.URLSearchParams(), Object.assign({ | 1368 | return toFormData$1(data, new platform.classes.URLSearchParams(), { |
| 1333 | visitor: function(value, key, path, helpers) { | 1369 | visitor: function(value, key, path, helpers) { |
| 1334 | if (platform.isNode && utils$1.isBuffer(value)) { | 1370 | if (platform.isNode && utils$1.isBuffer(value)) { |
| 1335 | this.append(key, value.toString('base64')); | 1371 | this.append(key, value.toString('base64')); |
@@ -1337,8 +1373,9 @@ | |||
| 1337 | } | 1373 | } |
| 1338 | 1374 | ||
| 1339 | return helpers.defaultVisitor.apply(this, arguments); | 1375 | return helpers.defaultVisitor.apply(this, arguments); |
| 1340 | } | ||
| 1341 | }, options)); | 1376 | }, |
| 1377 | ...options | ||
| 1378 | }); | ||
| 1342 | } | 1379 | } |
| 1343 | 1380 | ||
| 1344 | /** | 1381 | /** |
@@ -2091,7 +2128,7 @@ | |||
| 2091 | clearTimeout(timer); | 2128 | clearTimeout(timer); |
| 2092 | timer = null; | 2129 | timer = null; |
| 2093 | } | 2130 | } |
| 2094 | fn.apply(null, args); | 2131 | fn(...args); |
| 2095 | }; | 2132 | }; |
| 2096 | 2133 | ||
| 2097 | const throttled = (...args) => { | 2134 | const throttled = (...args) => { |
@@ -2347,7 +2384,7 @@ | |||
| 2347 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) | 2384 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) |
| 2348 | }; | 2385 | }; |
| 2349 | 2386 | ||
| 2350 | utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | 2387 | utils$1.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) { |
| 2351 | const merge = mergeMap[prop] || mergeDeepProperties; | 2388 | const merge = mergeMap[prop] || mergeDeepProperties; |
| 2352 | const configValue = merge(config1[prop], config2[prop], prop); | 2389 | const configValue = merge(config1[prop], config2[prop], prop); |
| 2353 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); | 2390 | (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); |
@@ -3088,7 +3125,7 @@ | |||
| 3088 | }); | 3125 | }); |
| 3089 | } | 3126 | } |
| 3090 | 3127 | ||
| 3091 | const VERSION$1 = "1.10.0"; | 3128 | const VERSION$1 = "1.11.0"; |
| 3092 | 3129 | ||
| 3093 | const validators$1 = {}; | 3130 | const validators$1 = {}; |
| 3094 | 3131 | ||
@@ -3327,8 +3364,8 @@ | |||
| 3327 | 3364 | ||
| 3328 | if (!synchronousRequestInterceptors) { | 3365 | if (!synchronousRequestInterceptors) { |
| 3329 | const chain = [dispatchRequest.bind(this), undefined]; | 3366 | const chain = [dispatchRequest.bind(this), undefined]; |
| 3330 | chain.unshift.apply(chain, requestInterceptorChain); | ||
| 3331 | chain.push.apply(chain, responseInterceptorChain); | 3367 | chain.unshift(...requestInterceptorChain); |
| 3368 | chain.push(...responseInterceptorChain); | ||
| 3332 | len = chain.length; | 3369 | len = chain.length; |
| 3333 | 3370 | ||
| 3334 | promise = Promise.resolve(config); | 3371 | promise = Promise.resolve(config); |
@@ -153,8 +153,8 @@ | |||
| 153 | 153 | ||
| 154 | if (!synchronousRequestInterceptors) { | 154 | if (!synchronousRequestInterceptors) { |
| 155 | const chain = [dispatchRequest.bind(this), undefined]; | 155 | const chain = [dispatchRequest.bind(this), undefined]; |
| 156 | chain.unshift.apply(chain, requestInterceptorChain); | ||
| 157 | chain.push.apply(chain, responseInterceptorChain); | 156 | chain.unshift(...requestInterceptorChain); |
| 157 | chain.push(...responseInterceptorChain); | ||
| 158 | len = chain.length; | 158 | len = chain.length; |
| 159 | 159 | ||
| 160 | promise = Promise.resolve(config); | 160 | promise = Promise.resolve(config); |
@@ -96,7 +96,7 @@ | |||
| 96 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) | 96 | headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) |
| 97 | }; | 97 | }; |
| 98 | 98 | ||
| 99 | utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { | 99 | utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) { |
| 100 | const merge = mergeMap[prop] || mergeDeepProperties; | 100 | const merge = mergeMap[prop] || mergeDeepProperties; |
| 101 | const configValue = merge(config1[prop], config2[prop], prop); | 101 | const configValue = merge(config1[prop], config2[prop], prop); |
| 102 | (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); | 102 | (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); |
@@ -5,7 +5,7 @@ | |||
| 5 | import platform from '../platform/index.js'; | 5 | import platform from '../platform/index.js'; |
| 6 | 6 | ||
| 7 | export default function toURLEncodedForm(data, options) { | 7 | export default function toURLEncodedForm(data, options) { |
| 8 | return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ | 8 | return toFormData(data, new platform.classes.URLSearchParams(), { |
| 9 | visitor: function(value, key, path, helpers) { | 9 | visitor: function(value, key, path, helpers) { |
| 10 | if (platform.isNode && utils.isBuffer(value)) { | 10 | if (platform.isNode && utils.isBuffer(value)) { |
| 11 | this.append(key, value.toString('base64')); | 11 | this.append(key, value.toString('base64')); |
@@ -13,6 +13,7 @@ | |||
| 13 | } | 13 | } |
| 14 | 14 | ||
| 15 | return helpers.defaultVisitor.apply(this, arguments); | 15 | return helpers.defaultVisitor.apply(this, arguments); |
| 16 | } | ||
| 17 | }, options)); | 16 | }, |
| 17 | ...options | ||
| 18 | }); | ||
| 18 | } | 19 | } |
@@ -137,6 +137,27 @@ | |||
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | /** | 139 | /** |
| 140 | * Determine if a value is an empty object (safely handles Buffers) | ||
| 141 | * | ||
| 142 | * @param {*} val The value to test | ||
| 143 | * | ||
| 144 | * @returns {boolean} True if value is an empty object, otherwise false | ||
| 145 | */ | ||
| 146 | const isEmptyObject = (val) => { | ||
| 147 | // Early return for non-objects or Buffers to prevent RangeError | ||
| 148 | if (!isObject(val) || isBuffer(val)) { | ||
| 149 | return false; | ||
| 150 | } | ||
| 151 | |||
| 152 | try { | ||
| 153 | return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype; | ||
| 154 | } catch (e) { | ||
| 155 | // Fallback for any other objects that might cause RangeError with Object.keys() | ||
| 156 | return false; | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | /** | ||
| 140 | * Determine if a value is a Date | 161 | * Determine if a value is a Date |
| 141 | * | 162 | * |
| 142 | * @param {*} val The value to test | 163 | * @param {*} val The value to test |
@@ -258,6 +279,11 @@ | |||
| 258 | fn.call(null, obj[i], i, obj); | 279 | fn.call(null, obj[i], i, obj); |
| 259 | } | 280 | } |
| 260 | } else { | 281 | } else { |
| 282 | // Buffer check | ||
| 283 | if (isBuffer(obj)) { | ||
| 284 | return; | ||
| 285 | } | ||
| 286 | |||
| 261 | // Iterate over object keys | 287 | // Iterate over object keys |
| 262 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); | 288 | const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); |
| 263 | const len = keys.length; | 289 | const len = keys.length; |
@@ -271,6 +297,10 @@ | |||
| 271 | } | 297 | } |
| 272 | 298 | ||
| 273 | function findKey(obj, key) { | 299 | function findKey(obj, key) { |
| 300 | if (isBuffer(obj)){ | ||
| 301 | return null; | ||
| 302 | } | ||
| 303 | |||
| 274 | key = key.toLowerCase(); | 304 | key = key.toLowerCase(); |
| 275 | const keys = Object.keys(obj); | 305 | const keys = Object.keys(obj); |
| 276 | let i = keys.length; | 306 | let i = keys.length; |
@@ -624,6 +654,11 @@ | |||
| 624 | return; | 654 | return; |
| 625 | } | 655 | } |
| 626 | 656 | ||
| 657 | //Buffer check | ||
| 658 | if (isBuffer(source)) { | ||
| 659 | return source; | ||
| 660 | } | ||
| 661 | |||
| 627 | if(!('toJSON' in source)) { | 662 | if(!('toJSON' in source)) { |
| 628 | stack[i] = source; | 663 | stack[i] = source; |
| 629 | const target = isArray(source) ? [] : {}; | 664 | const target = isArray(source) ? [] : {}; |
@@ -695,6 +730,7 @@ | |||
| 695 | isBoolean, | 730 | isBoolean, |
| 696 | isObject, | 731 | isObject, |
| 697 | isPlainObject, | 732 | isPlainObject, |
| 733 | isEmptyObject, | ||
| 698 | isReadableStream, | 734 | isReadableStream, |
| 699 | isRequest, | 735 | isRequest, |
| 700 | isResponse, | 736 | isResponse, |
@@ -1,6 +1,6 @@ | |||
| 1 | { | 1 | { |
| 2 | "name": "axios", | 2 | "name": "axios", |
| 3 | "version": "1.10.0", | 3 | "version": "1.11.0", |
| 4 | "description": "Promise based HTTP client for the browser and node.js", | 4 | "description": "Promise based HTTP client for the browser and node.js", |
| 5 | "main": "index.js", | 5 | "main": "index.js", |
| 6 | "exports": { | 6 | "exports": { |
@@ -157,7 +157,7 @@ | |||
| 157 | "typings": "./index.d.ts", | 157 | "typings": "./index.d.ts", |
| 158 | "dependencies": { | 158 | "dependencies": { |
| 159 | "follow-redirects": "^1.15.6", | 159 | "follow-redirects": "^1.15.6", |
| 160 | "form-data": "^4.0.0", | 160 | "form-data": "^4.0.4", |
| 161 | "proxy-from-env": "^1.1.0" | 161 | "proxy-from-env": "^1.1.0" |
| 162 | }, | 162 | }, |
| 163 | "bundlesize": [ | 163 | "bundlesize": [ |
@@ -176,10 +176,10 @@ | |||
| 176 | "Justin Beckwith (https://github.com/JustinBeckwith)", | 176 | "Justin Beckwith (https://github.com/JustinBeckwith)", |
| 177 | "Martti Laine (https://github.com/codeclown)", | 177 | "Martti Laine (https://github.com/codeclown)", |
| 178 | "Xianming Zhong (https://github.com/chinesedfan)", | 178 | "Xianming Zhong (https://github.com/chinesedfan)", |
| 179 | "Remco Haszing (https://github.com/remcohaszing)", | ||
| 179 | "Rikki Gibson (https://github.com/RikkiGibson)", | 180 | "Rikki Gibson (https://github.com/RikkiGibson)", |
| 180 | "Remco Haszing (https://github.com/remcohaszing)", | ||
| 181 | "Yasu Flores (https://github.com/yasuf)", | ||
| 182 | "Ben Carp (https://github.com/carpben)" | 181 | "Ben Carp (https://github.com/carpben)", |
| 182 | "Yasu Flores (https://github.com/yasuf)" | ||
| 183 | ], | 183 | ], |
| 184 | "sideEffects": false, | 184 | "sideEffects": false, |
| 185 | "release-it": { | 185 | "release-it": { |
@@ -1,5 +1,22 @@ | |||
| 1 | # Changelog | 1 | # Changelog |
| 2 | 2 | ||
| 3 | # [1.11.0](https://github.com/axios/axios/compare/v1.10.0...v1.11.0) (2025-07-22) | ||
| 4 | |||
| 5 | |||
| 6 | ### Bug Fixes | ||
| 7 | |||
| 8 | * form-data npm pakcage ([#6970](https://github.com/axios/axios/issues/6970)) ([e72c193](https://github.com/axios/axios/commit/e72c193722530db538b19e5ddaaa4544d226b253)) | ||
| 9 | * prevent RangeError when using large Buffers ([#6961](https://github.com/axios/axios/issues/6961)) ([a2214ca](https://github.com/axios/axios/commit/a2214ca1bc60540baf2c80573cea3a0ff91ba9d1)) | ||
| 10 | * **types:** resolve type discrepancies between ESM and CJS TypeScript declaration files ([#6956](https://github.com/axios/axios/issues/6956)) ([8517aa1](https://github.com/axios/axios/commit/8517aa16f8d082fc1d5309c642220fa736159110)) | ||
| 11 | |||
| 12 | ### Contributors to this release | ||
| 13 | |||
| 14 | - <img src="https://avatars.githubusercontent.com/u/12534341?v=4&s=18" alt="avatar" width="18"/> [izzy goldman](https://github.com/izzygld "+186/-93 (#6970 )") | ||
| 15 | - <img src="https://avatars.githubusercontent.com/u/142807367?v=4&s=18" alt="avatar" width="18"/> [Manish Sahani](https://github.com/manishsahanidev "+70/-0 (#6961 )") | ||
| 16 | - <img src="https://avatars.githubusercontent.com/u/189505037?v=4&s=18" alt="avatar" width="18"/> [Noritaka Kobayashi](https://github.com/noritaka1166 "+12/-10 (#6938 #6939 )") | ||
| 17 | - <img src="https://avatars.githubusercontent.com/u/392612?v=4&s=18" alt="avatar" width="18"/> [James Nail](https://github.com/jrnail23 "+13/-2 (#6956 )") | ||
| 18 | - <img src="https://avatars.githubusercontent.com/u/163745239?v=4&s=18" alt="avatar" width="18"/> [Tejaswi1305](https://github.com/Tejaswi1305 "+1/-1 (#6894 )") | ||
| 19 | |||
| 3 | # [1.10.0](https://github.com/axios/axios/compare/v1.9.0...v1.10.0) (2025-06-14) | 20 | # [1.10.0](https://github.com/axios/axios/compare/v1.9.0...v1.10.0) (2025-06-14) |
| 4 | 21 | ||
| 5 | 22 | ||
@@ -4,13 +4,10 @@ | |||
| 4 | </td><td align="center" width="33.333333333333336%"> <a href="https://twicsy.com/buy-instagram-followers?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="85px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/buy-instagram-followers-twicsy.png" alt="Buy Instagram Followers Twicsy"/> </a> <p align="center" title="Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine.">Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site...</p> <p align="center"> <a href="https://twicsy.com/buy-instagram-followers?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>twicsy.com</b></a> </p> | 4 | </td><td align="center" width="33.333333333333336%"> <a href="https://twicsy.com/buy-instagram-followers?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="85px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/buy-instagram-followers-twicsy.png" alt="Buy Instagram Followers Twicsy"/> </a> <p align="center" title="Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site to buy followers from the likes of US Magazine.">Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site...</p> <p align="center"> <a href="https://twicsy.com/buy-instagram-followers?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>twicsy.com</b></a> </p> |
| 5 | </td></tr><tr width="33.333333333333336%"><td align="center" width="33.333333333333336%"> <a href="https://www.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship" style="padding: 10px; display: inline-block"> <picture> <source width="200px" height="52px" media="(prefers-color-scheme: dark)" srcset="https://axios-http.com/assets/sponsors/descope_white.png"> <img width="200px" height="52px" src="https://axios-http.com/assets/sponsors/descope.png" alt="Descope"/> </picture> </a> <p align="center" title="Hi, we're Descope! We are building something in the authentication space for app developers and canโt wait to place it in your hands.">Hi, we're Descope! We are building something in the authentication space for app developers and...</p> <p align="center"> <a href="https://www.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Website</b></a> | <a href="https://docs.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Docs</b></a> | <a href="https://www.descope.com/community?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Community</b></a> </p> | 5 | </td></tr><tr width="33.333333333333336%"><td align="center" width="33.333333333333336%"> <a href="https://www.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship" style="padding: 10px; display: inline-block"> <picture> <source width="200px" height="52px" media="(prefers-color-scheme: dark)" srcset="https://axios-http.com/assets/sponsors/descope_white.png"> <img width="200px" height="52px" src="https://axios-http.com/assets/sponsors/descope.png" alt="Descope"/> </picture> </a> <p align="center" title="Hi, we're Descope! We are building something in the authentication space for app developers and canโt wait to place it in your hands.">Hi, we're Descope! We are building something in the authentication space for app developers and...</p> <p align="center"> <a href="https://www.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Website</b></a> | <a href="https://docs.descope.com/?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Docs</b></a> | <a href="https://www.descope.com/community?utm_source=axios&utm_medium=referral&utm_campaign=axios-oss-sponsorship"><b>Community</b></a> </p> |
| 6 | </td><td align="center" width="33.333333333333336%"> <a href="https://buzzoid.com/buy-instagram-followers/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="62px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/buzzoid-buy-instagram-followers.png" alt="Buzzoid - Buy Instagram Followers"/> </a> <p align="center" title="At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rated world's #1 IG service since 2012.">At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rate...</p> <p align="center"> <a href="https://buzzoid.com/buy-instagram-followers/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>buzzoid.com</b></a> </p> | 6 | </td><td align="center" width="33.333333333333336%"> <a href="https://buzzoid.com/buy-instagram-followers/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="62px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/buzzoid-buy-instagram-followers.png" alt="Buzzoid - Buy Instagram Followers"/> </a> <p align="center" title="At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rated world's #1 IG service since 2012.">At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rate...</p> <p align="center"> <a href="https://buzzoid.com/buy-instagram-followers/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>buzzoid.com</b></a> </p> |
| 7 | </td><td align="center" width="33.333333333333336%"> <a href="https://www.famety.com/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/famety-buy-instagram-followers.png" alt="Famety - Buy Instagram Followers"/> </a> <p align="center" title="At Famety, you can grow your social media following quickly, safely, and easily with just a few clicks. Rated the worldโs #1 social media service since 2013.">At Famety, you can grow your social media following quickly, safely, and easily with just a few clic...</p> <p align="center"> <a href="https://www.famety.com/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>www.famety.com</b></a> </p> | 7 | </td><td align="center" width="33.333333333333336%"> <a href="https://www.famety.net/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/famety-buy-instagram-followers.png" alt="Famety - Buy Instagram Followers"/> </a> <p align="center" title="At Famety, you can grow your social media following quickly, safely, and easily with just a few clicks. Rated the worldโs #1 social media service since 2013.">At Famety, you can grow your social media following quickly, safely, and easily with just a few clic...</p> <p align="center"> <a href="https://www.famety.net/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>www.famety.net</b></a> </p> |
| 8 | </td></tr><tr width="33.333333333333336%"><td align="center" width="33.333333333333336%"> <a href="https://poprey.com/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/instagram-likes.png" alt="Poprey - Buy Instagram Likes"/> </a> <p align="center" title="Buy Instagram Likes">Buy Instagram Likes</p> <p align="center"> <a href="https://poprey.com/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>poprey.com</b></a> </p> | 8 | </td></tr><tr width="33.333333333333336%"><td align="center" width="33.333333333333336%"> <a href="https://poprey.com/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/instagram-likes.png" alt="Poprey - Buy Instagram Likes"/> </a> <p align="center" title="Buy Instagram Likes">Buy Instagram Likes</p> <p align="center"> <a href="https://poprey.com/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>poprey.com</b></a> </p> |
| 9 | </td><td align="center" width="33.333333333333336%"> <a href="https://ssmarket.net/buy-youtube-subscribers?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/youtube-subscribers-ssmarket.png" alt="Buy Youtube Subscribers"/> </a> <p align="center" title="SS Market offers professional social media services that rapidly increase your YouTube subscriber count, elevating your channel to a powerful position.">SS Market offers professional social media services that rapidly increase your YouTube subscriber co...</p> <p align="center"> <a href="https://ssmarket.net/buy-youtube-subscribers?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>ssmarket.net</b></a> </p> | 9 | </td><td align="center" width="33.333333333333336%"> <a href="https://ssmarket.net/buy-youtube-subscribers?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/youtube-subscribers-ssmarket.png" alt="Buy Youtube Subscribers"/> </a> <p align="center" title="SS Market offers professional social media services that rapidly increase your YouTube subscriber count, elevating your channel to a powerful position.">SS Market offers professional social media services that rapidly increase your YouTube subscriber co...</p> <p align="center"> <a href="https://ssmarket.net/buy-youtube-subscribers?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>ssmarket.net</b></a> </p> |
| 10 | </td><td align="center" width="33.333333333333336%"> <a href="https://www.reddit.com/r/TikTokExpert/comments/1kamfi7/where_can_i_buy_youtube_views_likes_subscribers/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="70px" height="70px" src="https://axios-http.com/assets/sponsors/opencollective/buy-youtube-views-likes-reddit.png" alt="Buy YouTube Views & Subscribers"/> </a> <p align="center" title="Recommend trusted and best sites to buy YouTube subscribers, likes and views">Recommend trusted and best sites to buy YouTube subscribers, likes and views</p> <p align="center"> <a href="https://www.reddit.com/r/TikTokExpert/comments/1kamfi7/where_can_i_buy_youtube_views_likes_subscribers/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>www.reddit.com</b></a> </p> | ||
| 11 | </td></tr><tr width="33.333333333333336%"><td align="center" width="33.333333333333336%"> <a href="https://smmpanelserver.com/?utm_source=axios&utm_medium=sponsorlist&utm_campaign=sponsorship" style="padding: 10px; display: inline-block"> <img width="200px" height="56px" src="https://axios-http.com/assets/sponsors/opencollective/smmpanelserver123.png" alt="smmpanelserver"/> </a> <p align="center" title="smmpanelserver - Best and Cheapest Smm Panel">smmpanelserver - Best and Cheapest Smm Panel</p> <p align="center"> <a href="https://smmpanelserver.com/?utm_source=axios&utm_medium=readme_sponsorlist&utm_campaign=sponsorship"><b>smmpanelserver.com</b></a> </p> | ||
| 12 | </td><td align="center" width="33.333333333333336%"> <a href="https://opencollective.com/axios/contribute">๐ Become a sponsor</a> | 10 | </td><td align="center" width="33.333333333333336%"> <a href="https://opencollective.com/axios/contribute">๐ Become a sponsor</a> |
| 13 | </td><td align="center" width="33.333333333333336%"> <a href="https://opencollective.com/axios/contribute">๐ Become a sponsor</a> | ||
| 14 | </td></tr></table> | 11 | </td></tr></table> |
| 15 | 12 | ||
| 16 | <!--<div>marker</div>--> | 13 | <!--<div>marker</div>--> |