agent-relay 4.0.30 → 4.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +88 -48
  2. package/bin/agent-relay-broker-darwin-arm64 +0 -0
  3. package/bin/agent-relay-broker-darwin-x64 +0 -0
  4. package/bin/agent-relay-broker-linux-arm64 +0 -0
  5. package/bin/agent-relay-broker-linux-x64 +0 -0
  6. package/dist/index.cjs +99 -54
  7. package/dist/src/cli/bootstrap.d.ts +2 -1
  8. package/dist/src/cli/bootstrap.d.ts.map +1 -1
  9. package/dist/src/cli/bootstrap.js +223 -17
  10. package/dist/src/cli/bootstrap.js.map +1 -1
  11. package/dist/src/cli/commands/agent-management.d.ts.map +1 -1
  12. package/dist/src/cli/commands/agent-management.js +1 -3
  13. package/dist/src/cli/commands/agent-management.js.map +1 -1
  14. package/dist/src/cli/commands/auth.d.ts.map +1 -1
  15. package/dist/src/cli/commands/auth.js +32 -3
  16. package/dist/src/cli/commands/auth.js.map +1 -1
  17. package/dist/src/cli/commands/cloud.d.ts.map +1 -1
  18. package/dist/src/cli/commands/cloud.js +242 -144
  19. package/dist/src/cli/commands/cloud.js.map +1 -1
  20. package/dist/src/cli/commands/core.d.ts.map +1 -1
  21. package/dist/src/cli/commands/core.js +11 -6
  22. package/dist/src/cli/commands/core.js.map +1 -1
  23. package/dist/src/cli/commands/messaging.d.ts.map +1 -1
  24. package/dist/src/cli/commands/messaging.js +1 -3
  25. package/dist/src/cli/commands/messaging.js.map +1 -1
  26. package/dist/src/cli/commands/monitoring.d.ts.map +1 -1
  27. package/dist/src/cli/commands/monitoring.js +5 -4
  28. package/dist/src/cli/commands/monitoring.js.map +1 -1
  29. package/dist/src/cli/commands/on.d.ts.map +1 -1
  30. package/dist/src/cli/commands/on.js +1 -3
  31. package/dist/src/cli/commands/on.js.map +1 -1
  32. package/dist/src/cli/commands/setup.d.ts.map +1 -1
  33. package/dist/src/cli/commands/setup.js +62 -7
  34. package/dist/src/cli/commands/setup.js.map +1 -1
  35. package/dist/src/cli/commands/swarm.d.ts.map +1 -1
  36. package/dist/src/cli/commands/swarm.js +34 -4
  37. package/dist/src/cli/commands/swarm.js.map +1 -1
  38. package/dist/src/cli/index.js +9 -1
  39. package/dist/src/cli/index.js.map +1 -1
  40. package/dist/src/cli/lib/exit.d.ts +49 -0
  41. package/dist/src/cli/lib/exit.d.ts.map +1 -0
  42. package/dist/src/cli/lib/exit.js +73 -0
  43. package/dist/src/cli/lib/exit.js.map +1 -0
  44. package/dist/src/cli/lib/telemetry-helpers.d.ts +20 -0
  45. package/dist/src/cli/lib/telemetry-helpers.d.ts.map +1 -0
  46. package/dist/src/cli/lib/telemetry-helpers.js +31 -0
  47. package/dist/src/cli/lib/telemetry-helpers.js.map +1 -0
  48. package/node_modules/@agent-relay/cloud/package.json +2 -2
  49. package/node_modules/@agent-relay/config/package.json +1 -1
  50. package/node_modules/@agent-relay/hooks/package.json +4 -4
  51. package/node_modules/@agent-relay/sdk/dist/workflows/file-db.d.ts +62 -12
  52. package/node_modules/@agent-relay/sdk/dist/workflows/file-db.d.ts.map +1 -1
  53. package/node_modules/@agent-relay/sdk/dist/workflows/file-db.js +137 -47
  54. package/node_modules/@agent-relay/sdk/dist/workflows/file-db.js.map +1 -1
  55. package/node_modules/@agent-relay/sdk/package.json +2 -2
  56. package/node_modules/@agent-relay/telemetry/dist/client.d.ts +14 -2
  57. package/node_modules/@agent-relay/telemetry/dist/client.d.ts.map +1 -1
  58. package/node_modules/@agent-relay/telemetry/dist/client.js +22 -4
  59. package/node_modules/@agent-relay/telemetry/dist/client.js.map +1 -1
  60. package/node_modules/@agent-relay/telemetry/dist/events.d.ts +217 -10
  61. package/node_modules/@agent-relay/telemetry/dist/events.d.ts.map +1 -1
  62. package/node_modules/@agent-relay/telemetry/dist/events.js +11 -0
  63. package/node_modules/@agent-relay/telemetry/dist/events.js.map +1 -1
  64. package/node_modules/@agent-relay/telemetry/dist/index.d.ts +2 -2
  65. package/node_modules/@agent-relay/telemetry/dist/index.d.ts.map +1 -1
  66. package/node_modules/@agent-relay/telemetry/dist/index.js.map +1 -1
  67. package/node_modules/@agent-relay/telemetry/package.json +2 -2
  68. package/node_modules/@agent-relay/trajectory/package.json +2 -2
  69. package/node_modules/@agent-relay/user-directory/package.json +2 -2
  70. package/node_modules/@agent-relay/utils/package.json +2 -2
  71. package/node_modules/@relaycast/sdk/dist/version.d.ts +1 -1
  72. package/node_modules/@relaycast/sdk/dist/version.js +1 -1
  73. package/node_modules/@relaycast/sdk/node_modules/@relaycast/types/package.json +1 -1
  74. package/node_modules/@relaycast/sdk/package.json +2 -2
  75. package/node_modules/axios/CHANGELOG.md +166 -0
  76. package/node_modules/axios/README.md +210 -204
  77. package/node_modules/axios/dist/axios.js +92 -63
  78. package/node_modules/axios/dist/axios.js.map +1 -1
  79. package/node_modules/axios/dist/axios.min.js +2 -2
  80. package/node_modules/axios/dist/axios.min.js.map +1 -1
  81. package/node_modules/axios/dist/browser/axios.cjs +140 -101
  82. package/node_modules/axios/dist/browser/axios.cjs.map +1 -1
  83. package/node_modules/axios/dist/esm/axios.js +140 -101
  84. package/node_modules/axios/dist/esm/axios.js.map +1 -1
  85. package/node_modules/axios/dist/esm/axios.min.js +2 -2
  86. package/node_modules/axios/dist/esm/axios.min.js.map +1 -1
  87. package/node_modules/axios/dist/node/axios.cjs +199 -75
  88. package/node_modules/axios/dist/node/axios.cjs.map +1 -1
  89. package/node_modules/axios/index.d.cts +14 -28
  90. package/node_modules/axios/index.d.ts +132 -226
  91. package/node_modules/axios/lib/adapters/fetch.js +21 -6
  92. package/node_modules/axios/lib/adapters/http.js +88 -6
  93. package/node_modules/axios/lib/core/AxiosError.js +34 -33
  94. package/node_modules/axios/lib/core/AxiosHeaders.js +24 -25
  95. package/node_modules/axios/lib/core/buildFullPath.js +1 -1
  96. package/node_modules/axios/lib/core/mergeConfig.js +5 -3
  97. package/node_modules/axios/lib/defaults/index.js +13 -8
  98. package/node_modules/axios/lib/env/data.js +1 -1
  99. package/node_modules/axios/lib/helpers/AxiosURLSearchParams.js +1 -2
  100. package/node_modules/axios/lib/helpers/formDataToJSON.js +3 -1
  101. package/node_modules/axios/lib/helpers/formDataToStream.js +2 -1
  102. package/node_modules/axios/lib/helpers/progressEventReducer.js +5 -5
  103. package/node_modules/axios/lib/helpers/resolveConfig.js +11 -3
  104. package/node_modules/axios/lib/helpers/shouldBypassProxy.js +48 -1
  105. package/node_modules/axios/lib/helpers/toFormData.js +10 -2
  106. package/node_modules/axios/lib/utils.js +10 -10
  107. package/node_modules/axios/package.json +4 -4
  108. package/package.json +9 -9
  109. package/packages/cloud/package.json +2 -2
  110. package/packages/config/package.json +1 -1
  111. package/packages/hooks/package.json +4 -4
  112. package/packages/sdk/dist/workflows/file-db.d.ts +62 -12
  113. package/packages/sdk/dist/workflows/file-db.d.ts.map +1 -1
  114. package/packages/sdk/dist/workflows/file-db.js +137 -47
  115. package/packages/sdk/dist/workflows/file-db.js.map +1 -1
  116. package/packages/sdk/package.json +2 -2
  117. package/packages/telemetry/dist/client.d.ts +14 -2
  118. package/packages/telemetry/dist/client.d.ts.map +1 -1
  119. package/packages/telemetry/dist/client.js +22 -4
  120. package/packages/telemetry/dist/client.js.map +1 -1
  121. package/packages/telemetry/dist/events.d.ts +217 -10
  122. package/packages/telemetry/dist/events.d.ts.map +1 -1
  123. package/packages/telemetry/dist/events.js +11 -0
  124. package/packages/telemetry/dist/events.js.map +1 -1
  125. package/packages/telemetry/dist/index.d.ts +2 -2
  126. package/packages/telemetry/dist/index.d.ts.map +1 -1
  127. package/packages/telemetry/dist/index.js.map +1 -1
  128. package/packages/telemetry/package.json +2 -2
  129. package/packages/trajectory/package.json +2 -2
  130. package/packages/user-directory/package.json +2 -2
  131. package/packages/utils/package.json +2 -2
  132. package/node_modules/@clack/prompts/node_modules/is-unicode-supported/index.d.ts +0 -12
  133. package/node_modules/@clack/prompts/node_modules/is-unicode-supported/index.js +0 -17
  134. package/node_modules/@clack/prompts/node_modules/is-unicode-supported/license +0 -9
  135. package/node_modules/@clack/prompts/node_modules/is-unicode-supported/package.json +0 -43
  136. package/node_modules/@clack/prompts/node_modules/is-unicode-supported/readme.md +0 -35
  137. package/node_modules/color-convert/CHANGELOG.md +0 -54
@@ -1,4 +1,4 @@
1
- /*! Axios v1.15.0 Copyright (c) 2026 Matt Zabriskie and contributors */
1
+ /*! Axios v1.15.1 Copyright (c) 2026 Matt Zabriskie and contributors */
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -812,10 +812,16 @@
812
812
  var G = getGlobal();
813
813
  var FormDataCtor = typeof G.FormData !== 'undefined' ? G.FormData : undefined;
814
814
  var isFormData = function isFormData(thing) {
815
- var kind;
816
- return thing && (FormDataCtor && thing instanceof FormDataCtor || isFunction$1(thing.append) && ((kind = kindOf(thing)) === 'formdata' ||
815
+ if (!thing) return false;
816
+ if (FormDataCtor && thing instanceof FormDataCtor) return true;
817
+ // Reject plain objects inheriting directly from Object.prototype so prototype-pollution gadgets can't spoof FormData (GHSA-6chq-wfr3-2hj9).
818
+ var proto = getPrototypeOf(thing);
819
+ if (!proto || proto === Object.prototype) return false;
820
+ if (!isFunction$1(thing.append)) return false;
821
+ var kind = kindOf(thing);
822
+ return kind === 'formdata' ||
817
823
  // detect form-data instance
818
- kind === 'object' && isFunction$1(thing.toString) && thing.toString() === '[object FormData]'));
824
+ kind === 'object' && isFunction$1(thing.toString) && thing.toString() === '[object FormData]';
819
825
  };
820
826
 
821
827
  /**
@@ -1513,6 +1519,7 @@
1513
1519
  AxiosError.ERR_CANCELED = 'ERR_CANCELED';
1514
1520
  AxiosError.ERR_NOT_SUPPORT = 'ERR_NOT_SUPPORT';
1515
1521
  AxiosError.ERR_INVALID_URL = 'ERR_INVALID_URL';
1522
+ AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED = 'ERR_FORM_DATA_DEPTH_EXCEEDED';
1516
1523
 
1517
1524
  // eslint-disable-next-line strict
1518
1525
  var httpAdapter = null;
@@ -1617,6 +1624,7 @@
1617
1624
  var dots = options.dots;
1618
1625
  var indexes = options.indexes;
1619
1626
  var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
1627
+ var maxDepth = options.maxDepth === undefined ? 100 : options.maxDepth;
1620
1628
  var useBlob = _Blob && utils$1.isSpecCompliantForm(formData);
1621
1629
  if (!utils$1.isFunction(visitor)) {
1622
1630
  throw new TypeError('visitor must be a function');
@@ -1684,7 +1692,11 @@
1684
1692
  isVisitable: isVisitable
1685
1693
  });
1686
1694
  function build(value, path) {
1695
+ var depth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
1687
1696
  if (utils$1.isUndefined(value)) return;
1697
+ if (depth > maxDepth) {
1698
+ throw new AxiosError('Object is too deeply nested (' + depth + ' levels). Max depth: ' + maxDepth, AxiosError.ERR_FORM_DATA_DEPTH_EXCEEDED);
1699
+ }
1688
1700
  if (stack.indexOf(value) !== -1) {
1689
1701
  throw Error('Circular reference detected in ' + path.join('.'));
1690
1702
  }
@@ -1692,7 +1704,7 @@
1692
1704
  utils$1.forEach(value, function each(el, key) {
1693
1705
  var result = !(utils$1.isUndefined(el) || el === null) && visitor.call(formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers);
1694
1706
  if (result === true) {
1695
- build(el, path ? path.concat(key) : [key]);
1707
+ build(el, path ? path.concat(key) : [key], depth + 1);
1696
1708
  }
1697
1709
  });
1698
1710
  stack.pop();
@@ -1719,10 +1731,9 @@
1719
1731
  '(': '%28',
1720
1732
  ')': '%29',
1721
1733
  '~': '%7E',
1722
- '%20': '+',
1723
- '%00': '\x00'
1734
+ '%20': '+'
1724
1735
  };
1725
- return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
1736
+ return encodeURIComponent(str).replace(/[!'()~]|%20/g, function replacer(match) {
1726
1737
  return charMap[match];
1727
1738
  });
1728
1739
  }
@@ -2012,7 +2023,7 @@
2012
2023
  name = !name && utils$1.isArray(target) ? target.length : name;
2013
2024
  if (isLast) {
2014
2025
  if (utils$1.hasOwnProp(target, name)) {
2015
- target[name] = [target[name], value];
2026
+ target[name] = utils$1.isArray(target[name]) ? target[name].concat(value) : [target[name], value];
2016
2027
  } else {
2017
2028
  target[name] = value;
2018
2029
  }
@@ -2037,6 +2048,10 @@
2037
2048
  return null;
2038
2049
  }
2039
2050
 
2051
+ var own = function own(obj, key) {
2052
+ return obj != null && utils$1.hasOwnProp(obj, key) ? obj[key] : undefined;
2053
+ };
2054
+
2040
2055
  /**
2041
2056
  * It takes a string, tries to parse it, and if it fails, it returns the stringified version
2042
2057
  * of the input
@@ -2086,14 +2101,16 @@
2086
2101
  }
2087
2102
  var isFileList;
2088
2103
  if (isObjectPayload) {
2104
+ var formSerializer = own(this, 'formSerializer');
2089
2105
  if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {
2090
- return toURLEncodedForm(data, this.formSerializer).toString();
2106
+ return toURLEncodedForm(data, formSerializer).toString();
2091
2107
  }
2092
2108
  if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {
2093
- var _FormData = this.env && this.env.FormData;
2109
+ var env = own(this, 'env');
2110
+ var _FormData = env && env.FormData;
2094
2111
  return toFormData(isFileList ? {
2095
2112
  'files[]': data
2096
- } : data, _FormData && new _FormData(), this.formSerializer);
2113
+ } : data, _FormData && new _FormData(), formSerializer);
2097
2114
  }
2098
2115
  }
2099
2116
  if (isObjectPayload || hasJSONContentType) {
@@ -2103,21 +2120,22 @@
2103
2120
  return data;
2104
2121
  }],
2105
2122
  transformResponse: [function transformResponse(data) {
2106
- var transitional = this.transitional || defaults.transitional;
2123
+ var transitional = own(this, 'transitional') || defaults.transitional;
2107
2124
  var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
2108
- var JSONRequested = this.responseType === 'json';
2125
+ var responseType = own(this, 'responseType');
2126
+ var JSONRequested = responseType === 'json';
2109
2127
  if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) {
2110
2128
  return data;
2111
2129
  }
2112
- if (data && utils$1.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) {
2130
+ if (data && utils$1.isString(data) && (forcedJSONParsing && !responseType || JSONRequested)) {
2113
2131
  var silentJSONParsing = transitional && transitional.silentJSONParsing;
2114
2132
  var strictJSONParsing = !silentJSONParsing && JSONRequested;
2115
2133
  try {
2116
- return JSON.parse(data, this.parseReviver);
2134
+ return JSON.parse(data, own(this, 'parseReviver'));
2117
2135
  } catch (e) {
2118
2136
  if (strictJSONParsing) {
2119
2137
  if (e.name === 'SyntaxError') {
2120
- throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
2138
+ throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, own(this, 'response'));
2121
2139
  }
2122
2140
  throw e;
2123
2141
  }
@@ -2196,42 +2214,37 @@
2196
2214
  });
2197
2215
 
2198
2216
  var $internals = Symbol('internals');
2199
- var isValidHeaderValue = function isValidHeaderValue(value) {
2200
- return !/[\r\n]/.test(value);
2201
- };
2202
- function assertValidHeaderValue(value, header) {
2203
- if (value === false || value == null) {
2204
- return;
2205
- }
2206
- if (utils$1.isArray(value)) {
2207
- value.forEach(function (v) {
2208
- return assertValidHeaderValue(v, header);
2209
- });
2210
- return;
2217
+ var INVALID_HEADER_VALUE_CHARS_RE = /[^\x09\x20-\x7E\x80-\xFF]/g;
2218
+ function trimSPorHTAB(str) {
2219
+ var start = 0;
2220
+ var end = str.length;
2221
+ while (start < end) {
2222
+ var code = str.charCodeAt(start);
2223
+ if (code !== 0x09 && code !== 0x20) {
2224
+ break;
2225
+ }
2226
+ start += 1;
2211
2227
  }
2212
- if (!isValidHeaderValue(String(value))) {
2213
- throw new Error("Invalid character in header content [\"".concat(header, "\"]"));
2228
+ while (end > start) {
2229
+ var _code = str.charCodeAt(end - 1);
2230
+ if (_code !== 0x09 && _code !== 0x20) {
2231
+ break;
2232
+ }
2233
+ end -= 1;
2214
2234
  }
2235
+ return start === 0 && end === str.length ? str : str.slice(start, end);
2215
2236
  }
2216
2237
  function normalizeHeader(header) {
2217
2238
  return header && String(header).trim().toLowerCase();
2218
2239
  }
2219
- function stripTrailingCRLF(str) {
2220
- var end = str.length;
2221
- while (end > 0) {
2222
- var charCode = str.charCodeAt(end - 1);
2223
- if (charCode !== 10 && charCode !== 13) {
2224
- break;
2225
- }
2226
- end -= 1;
2227
- }
2228
- return end === str.length ? str : str.slice(0, end);
2240
+ function sanitizeHeaderValue(str) {
2241
+ return trimSPorHTAB(str.replace(INVALID_HEADER_VALUE_CHARS_RE, ''));
2229
2242
  }
2230
2243
  function normalizeValue(value) {
2231
2244
  if (value === false || value == null) {
2232
2245
  return value;
2233
2246
  }
2234
- return utils$1.isArray(value) ? value.map(normalizeValue) : stripTrailingCRLF(String(value));
2247
+ return utils$1.isArray(value) ? value.map(normalizeValue) : sanitizeHeaderValue(String(value));
2235
2248
  }
2236
2249
  function parseTokens(str) {
2237
2250
  var tokens = Object.create(null);
@@ -2292,7 +2305,6 @@
2292
2305
  }
2293
2306
  var key = utils$1.findKey(self, lHeader);
2294
2307
  if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) {
2295
- assertValidHeaderValue(_value, _header);
2296
2308
  self[key || _header] = normalizeValue(_value);
2297
2309
  }
2298
2310
  }
@@ -2678,19 +2690,19 @@
2678
2690
  var bytesNotified = 0;
2679
2691
  var _speedometer = speedometer(50, 250);
2680
2692
  return throttle(function (e) {
2681
- var loaded = e.loaded;
2693
+ var rawLoaded = e.loaded;
2682
2694
  var total = e.lengthComputable ? e.total : undefined;
2683
- var progressBytes = loaded - bytesNotified;
2695
+ var loaded = total != null ? Math.min(rawLoaded, total) : rawLoaded;
2696
+ var progressBytes = Math.max(0, loaded - bytesNotified);
2684
2697
  var rate = _speedometer(progressBytes);
2685
- var inRange = loaded <= total;
2686
- bytesNotified = loaded;
2698
+ bytesNotified = Math.max(bytesNotified, loaded);
2687
2699
  var data = _defineProperty({
2688
2700
  loaded: loaded,
2689
2701
  total: total,
2690
2702
  progress: total ? loaded / total : undefined,
2691
2703
  bytes: progressBytes,
2692
2704
  rate: rate ? rate : undefined,
2693
- estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
2705
+ estimated: rate && total ? (total - loaded) / rate : undefined,
2694
2706
  event: e,
2695
2707
  lengthComputable: total != null
2696
2708
  }, isDownloadStream ? 'download' : 'upload', true);
@@ -2809,7 +2821,7 @@
2809
2821
  */
2810
2822
  function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {
2811
2823
  var isRelativeUrl = !isAbsoluteURL(requestedURL);
2812
- if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {
2824
+ if (baseURL && (isRelativeUrl || allowAbsoluteUrls === false)) {
2813
2825
  return combineURLs(baseURL, requestedURL);
2814
2826
  }
2815
2827
  return requestedURL;
@@ -2870,9 +2882,9 @@
2870
2882
 
2871
2883
  // eslint-disable-next-line consistent-return
2872
2884
  function mergeDirectKeys(a, b, prop) {
2873
- if (prop in config2) {
2885
+ if (utils$1.hasOwnProp(config2, prop)) {
2874
2886
  return getMergedValue(a, b);
2875
- } else if (prop in config1) {
2887
+ } else if (utils$1.hasOwnProp(config1, prop)) {
2876
2888
  return getMergedValue(undefined, a);
2877
2889
  }
2878
2890
  }
@@ -2912,7 +2924,9 @@
2912
2924
  utils$1.forEach(Object.keys(_objectSpread2(_objectSpread2({}, config1), config2)), function computeConfigValue(prop) {
2913
2925
  if (prop === '__proto__' || prop === 'constructor' || prop === 'prototype') return;
2914
2926
  var merge = utils$1.hasOwnProp(mergeMap, prop) ? mergeMap[prop] : mergeDeepProperties;
2915
- var configValue = merge(config1[prop], config2[prop], prop);
2927
+ var a = utils$1.hasOwnProp(config1, prop) ? config1[prop] : undefined;
2928
+ var b = utils$1.hasOwnProp(config2, prop) ? config2[prop] : undefined;
2929
+ var configValue = merge(a, b, prop);
2916
2930
  utils$1.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue);
2917
2931
  });
2918
2932
  return config;
@@ -2957,9 +2971,15 @@
2957
2971
  // Specifically not if we're in a web worker, or react-native.
2958
2972
 
2959
2973
  if (platform.hasStandardBrowserEnv) {
2960
- withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
2961
- if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(newConfig.url)) {
2962
- // Add xsrf header
2974
+ if (utils$1.isFunction(withXSRFToken)) {
2975
+ withXSRFToken = withXSRFToken(newConfig);
2976
+ }
2977
+
2978
+ // Strict boolean check — prevents proto-pollution gadgets (e.g. Object.prototype.withXSRFToken = 1)
2979
+ // and misconfigurations (e.g. "false") from short-circuiting the same-origin check and leaking
2980
+ // the XSRF token cross-origin. See GHSA-xx6v-rp6x-q39c.
2981
+ var shouldSendXSRF = withXSRFToken === true || withXSRFToken == null && isURLSameOrigin(newConfig.url);
2982
+ if (shouldSendXSRF) {
2963
2983
  var xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);
2964
2984
  if (xsrfValue) {
2965
2985
  headers.set(xsrfHeaderName, xsrfValue);
@@ -3449,16 +3469,18 @@
3449
3469
  }()));
3450
3470
  var supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(function () {
3451
3471
  var duplexAccessed = false;
3452
- var body = new ReadableStream$1();
3453
- var hasContentType = new Request(platform.origin, {
3454
- body: body,
3472
+ var request = new Request(platform.origin, {
3473
+ body: new ReadableStream$1(),
3455
3474
  method: 'POST',
3456
3475
  get duplex() {
3457
3476
  duplexAccessed = true;
3458
3477
  return 'half';
3459
3478
  }
3460
- }).headers.has('Content-Type');
3461
- body.cancel();
3479
+ });
3480
+ var hasContentType = request.headers.has('Content-Type');
3481
+ if (request.body != null) {
3482
+ request.body.cancel();
3483
+ }
3462
3484
  return duplexAccessed && !hasContentType;
3463
3485
  });
3464
3486
  var supportsResponseStream = isResponseSupported && isReadableStreamSupported && test(function () {
@@ -3554,7 +3576,7 @@
3554
3576
  }();
3555
3577
  return /*#__PURE__*/function () {
3556
3578
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(config) {
3557
- var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, _fetch, composedSignal, request, unsubscribe, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, resolvedOptions, response, isStreamResponse, options, responseContentLength, _ref6, _ref7, _onProgress, _flush, responseData, _t3, _t4, _t5;
3579
+ var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, _fetch, composedSignal, request, unsubscribe, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, contentType, resolvedOptions, response, isStreamResponse, options, responseContentLength, _ref6, _ref7, _onProgress, _flush, responseData, _t3, _t4, _t5;
3558
3580
  return _regenerator().w(function (_context4) {
3559
3581
  while (1) switch (_context4.p = _context4.n) {
3560
3582
  case 0:
@@ -3601,7 +3623,14 @@
3601
3623
 
3602
3624
  // Cloudflare Workers throws when credentials are defined
3603
3625
  // see https://github.com/cloudflare/workerd/issues/902
3604
- isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype;
3626
+ isCredentialsSupported = isRequestSupported && 'credentials' in Request.prototype; // If data is FormData and Content-Type is multipart/form-data without boundary,
3627
+ // delete it so fetch can set it correctly with the boundary
3628
+ if (utils$1.isFormData(data)) {
3629
+ contentType = headers.getContentType();
3630
+ if (contentType && /^multipart\/form-data/i.test(contentType) && !/boundary=/i.test(contentType)) {
3631
+ headers["delete"]('content-type');
3632
+ }
3633
+ }
3605
3634
  resolvedOptions = _objectSpread2(_objectSpread2({}, fetchOptions), {}, {
3606
3635
  signal: composedSignal,
3607
3636
  method: method.toUpperCase(),
@@ -3860,7 +3889,7 @@
3860
3889
  });
3861
3890
  }
3862
3891
 
3863
- var VERSION = "1.15.0";
3892
+ var VERSION = "1.15.1";
3864
3893
 
3865
3894
  var validators$1 = {};
3866
3895