@roarkanalytics/sdk 2.21.1 → 2.22.0

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 (348) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +78 -46
  3. package/api-promise.d.mts +1 -46
  4. package/api-promise.d.mts.map +1 -1
  5. package/api-promise.d.ts +1 -46
  6. package/api-promise.d.ts.map +1 -1
  7. package/api-promise.js +3 -81
  8. package/api-promise.js.map +1 -1
  9. package/api-promise.mjs +1 -79
  10. package/api-promise.mjs.map +1 -1
  11. package/client.d.mts +25 -30
  12. package/client.d.mts.map +1 -1
  13. package/client.d.ts +25 -30
  14. package/client.d.ts.map +1 -1
  15. package/client.js +150 -132
  16. package/client.js.map +1 -1
  17. package/client.mjs +145 -104
  18. package/client.mjs.map +1 -1
  19. package/core/api-promise.d.mts +46 -0
  20. package/core/api-promise.d.mts.map +1 -0
  21. package/core/api-promise.d.ts +46 -0
  22. package/core/api-promise.d.ts.map +1 -0
  23. package/core/api-promise.js +74 -0
  24. package/core/api-promise.js.map +1 -0
  25. package/core/api-promise.mjs +70 -0
  26. package/core/api-promise.mjs.map +1 -0
  27. package/core/error.d.mts +46 -0
  28. package/core/error.d.mts.map +1 -0
  29. package/core/error.d.ts +46 -0
  30. package/core/error.d.ts.map +1 -0
  31. package/core/error.js +113 -0
  32. package/core/error.js.map +1 -0
  33. package/core/error.mjs +97 -0
  34. package/core/error.mjs.map +1 -0
  35. package/core/resource.d.mts +6 -0
  36. package/core/resource.d.mts.map +1 -0
  37. package/core/resource.d.ts +6 -0
  38. package/core/resource.d.ts.map +1 -0
  39. package/core/resource.js +11 -0
  40. package/core/resource.js.map +1 -0
  41. package/core/resource.mjs +7 -0
  42. package/core/resource.mjs.map +1 -0
  43. package/core/uploads.d.mts +3 -0
  44. package/core/uploads.d.mts.map +1 -0
  45. package/core/uploads.d.ts +3 -0
  46. package/core/uploads.d.ts.map +1 -0
  47. package/core/uploads.js +6 -0
  48. package/core/uploads.js.map +1 -0
  49. package/core/uploads.mjs +2 -0
  50. package/core/uploads.mjs.map +1 -0
  51. package/error.d.mts +1 -46
  52. package/error.d.mts.map +1 -1
  53. package/error.d.ts +1 -46
  54. package/error.d.ts.map +1 -1
  55. package/error.js +3 -110
  56. package/error.js.map +1 -1
  57. package/error.mjs +1 -96
  58. package/error.mjs.map +1 -1
  59. package/index.d.mts +6 -6
  60. package/index.d.ts +3 -3
  61. package/index.js +3 -3
  62. package/index.js.map +1 -1
  63. package/index.mjs +3 -3
  64. package/internal/builtin-types.d.mts +11 -3
  65. package/internal/builtin-types.d.mts.map +1 -1
  66. package/internal/builtin-types.d.ts +11 -3
  67. package/internal/builtin-types.d.ts.map +1 -1
  68. package/internal/detect-platform.js +3 -3
  69. package/internal/detect-platform.js.map +1 -1
  70. package/internal/detect-platform.mjs +3 -3
  71. package/internal/detect-platform.mjs.map +1 -1
  72. package/internal/errors.d.mts.map +1 -1
  73. package/internal/errors.d.ts.map +1 -1
  74. package/internal/errors.js +17 -2
  75. package/internal/errors.js.map +1 -1
  76. package/internal/errors.mjs +15 -0
  77. package/internal/errors.mjs.map +1 -1
  78. package/internal/headers.d.mts +1 -2
  79. package/internal/headers.d.mts.map +1 -1
  80. package/internal/headers.d.ts +1 -2
  81. package/internal/headers.d.ts.map +1 -1
  82. package/internal/headers.js +7 -5
  83. package/internal/headers.js.map +1 -1
  84. package/internal/headers.mjs +7 -5
  85. package/internal/headers.mjs.map +1 -1
  86. package/internal/parse.d.mts +3 -1
  87. package/internal/parse.d.mts.map +1 -1
  88. package/internal/parse.d.ts +3 -1
  89. package/internal/parse.d.ts.map +1 -1
  90. package/internal/parse.js +33 -21
  91. package/internal/parse.js.map +1 -1
  92. package/internal/parse.mjs +33 -20
  93. package/internal/parse.mjs.map +1 -1
  94. package/internal/qs/formats.d.mts +1 -0
  95. package/internal/qs/formats.d.mts.map +1 -1
  96. package/internal/qs/formats.d.ts +1 -0
  97. package/internal/qs/formats.d.ts.map +1 -1
  98. package/internal/qs/formats.js +4 -2
  99. package/internal/qs/formats.js.map +1 -1
  100. package/internal/qs/formats.mjs +2 -1
  101. package/internal/qs/formats.mjs.map +1 -1
  102. package/internal/qs/stringify.d.mts.map +1 -1
  103. package/internal/qs/stringify.d.ts.map +1 -1
  104. package/internal/qs/stringify.js +16 -19
  105. package/internal/qs/stringify.js.map +1 -1
  106. package/internal/qs/stringify.mjs +17 -19
  107. package/internal/qs/stringify.mjs.map +1 -1
  108. package/internal/qs/utils.d.mts +1 -0
  109. package/internal/qs/utils.d.mts.map +1 -1
  110. package/internal/qs/utils.d.ts +1 -0
  111. package/internal/qs/utils.d.ts.map +1 -1
  112. package/internal/qs/utils.js +22 -21
  113. package/internal/qs/utils.js.map +1 -1
  114. package/internal/qs/utils.mjs +12 -12
  115. package/internal/qs/utils.mjs.map +1 -1
  116. package/internal/request-options.d.mts +43 -2
  117. package/internal/request-options.d.mts.map +1 -1
  118. package/internal/request-options.d.ts +43 -2
  119. package/internal/request-options.d.ts.map +1 -1
  120. package/internal/request-options.js +1 -26
  121. package/internal/request-options.js.map +1 -1
  122. package/internal/request-options.mjs +0 -24
  123. package/internal/request-options.mjs.map +1 -1
  124. package/internal/shim-types.d.mts +11 -22
  125. package/internal/shim-types.d.mts.map +1 -0
  126. package/internal/shim-types.d.ts +11 -22
  127. package/internal/shim-types.d.ts.map +1 -0
  128. package/internal/shim-types.js +4 -0
  129. package/internal/shim-types.js.map +1 -0
  130. package/internal/shim-types.mjs +3 -0
  131. package/internal/shim-types.mjs.map +1 -0
  132. package/internal/shims.d.mts +7 -48
  133. package/internal/shims.d.mts.map +1 -1
  134. package/internal/shims.d.ts +7 -48
  135. package/internal/shims.d.ts.map +1 -1
  136. package/internal/shims.js +21 -30
  137. package/internal/shims.js.map +1 -1
  138. package/internal/shims.mjs +16 -23
  139. package/internal/shims.mjs.map +1 -1
  140. package/internal/to-file.d.mts +45 -0
  141. package/internal/to-file.d.mts.map +1 -0
  142. package/internal/to-file.d.ts +45 -0
  143. package/internal/to-file.d.ts.map +1 -0
  144. package/internal/to-file.js +91 -0
  145. package/internal/to-file.js.map +1 -0
  146. package/internal/to-file.mjs +88 -0
  147. package/internal/to-file.mjs.map +1 -0
  148. package/internal/tslib.js +81 -0
  149. package/internal/tslib.mjs +17 -0
  150. package/internal/types.d.mts +14 -13
  151. package/internal/types.d.mts.map +1 -1
  152. package/internal/types.d.ts +14 -13
  153. package/internal/types.d.ts.map +1 -1
  154. package/internal/uploads.d.mts +16 -47
  155. package/internal/uploads.d.mts.map +1 -1
  156. package/internal/uploads.d.ts +16 -47
  157. package/internal/uploads.d.ts.map +1 -1
  158. package/internal/uploads.js +41 -108
  159. package/internal/uploads.js.map +1 -1
  160. package/internal/uploads.mjs +39 -108
  161. package/internal/uploads.mjs.map +1 -1
  162. package/internal/utils/base64.d.mts.map +1 -1
  163. package/internal/utils/base64.d.ts.map +1 -1
  164. package/internal/utils/base64.js +13 -8
  165. package/internal/utils/base64.js.map +1 -1
  166. package/internal/utils/base64.mjs +13 -8
  167. package/internal/utils/base64.mjs.map +1 -1
  168. package/internal/utils/bytes.d.mts +4 -0
  169. package/internal/utils/bytes.d.mts.map +1 -0
  170. package/internal/utils/bytes.d.ts +4 -0
  171. package/internal/utils/bytes.d.ts.map +1 -0
  172. package/internal/utils/bytes.js +31 -0
  173. package/internal/utils/bytes.js.map +1 -0
  174. package/internal/utils/bytes.mjs +26 -0
  175. package/internal/utils/bytes.mjs.map +1 -0
  176. package/internal/utils/env.d.mts.map +1 -1
  177. package/internal/utils/env.d.ts.map +1 -1
  178. package/internal/utils/env.js.map +1 -1
  179. package/internal/utils/env.mjs.map +1 -1
  180. package/internal/utils/log.d.mts +35 -2
  181. package/internal/utils/log.d.mts.map +1 -1
  182. package/internal/utils/log.d.ts +35 -2
  183. package/internal/utils/log.d.ts.map +1 -1
  184. package/internal/utils/log.js +62 -24
  185. package/internal/utils/log.js.map +1 -1
  186. package/internal/utils/log.mjs +58 -22
  187. package/internal/utils/log.mjs.map +1 -1
  188. package/internal/utils/path.d.mts +15 -0
  189. package/internal/utils/path.d.mts.map +1 -0
  190. package/internal/utils/path.d.ts +15 -0
  191. package/internal/utils/path.d.ts.map +1 -0
  192. package/internal/utils/path.js +79 -0
  193. package/internal/utils/path.js.map +1 -0
  194. package/internal/utils/path.mjs +74 -0
  195. package/internal/utils/path.mjs.map +1 -0
  196. package/internal/utils/sleep.d.mts.map +1 -1
  197. package/internal/utils/sleep.d.ts.map +1 -1
  198. package/internal/utils/uuid.d.mts +1 -1
  199. package/internal/utils/uuid.d.mts.map +1 -1
  200. package/internal/utils/uuid.d.ts +1 -1
  201. package/internal/utils/uuid.d.ts.map +1 -1
  202. package/internal/utils/uuid.js +10 -6
  203. package/internal/utils/uuid.js.map +1 -1
  204. package/internal/utils/uuid.mjs +9 -5
  205. package/internal/utils/uuid.mjs.map +1 -1
  206. package/internal/utils/values.d.mts +4 -1
  207. package/internal/utils/values.d.mts.map +1 -1
  208. package/internal/utils/values.d.ts +4 -1
  209. package/internal/utils/values.d.ts.map +1 -1
  210. package/internal/utils/values.js +21 -9
  211. package/internal/utils/values.js.map +1 -1
  212. package/internal/utils/values.mjs +14 -4
  213. package/internal/utils/values.mjs.map +1 -1
  214. package/internal/utils.js +7 -20
  215. package/internal/utils.js.map +1 -1
  216. package/package.json +31 -13
  217. package/resource.d.mts +1 -5
  218. package/resource.d.mts.map +1 -1
  219. package/resource.d.ts +1 -5
  220. package/resource.d.ts.map +1 -1
  221. package/resource.js +3 -8
  222. package/resource.js.map +1 -1
  223. package/resource.mjs +1 -6
  224. package/resource.mjs.map +1 -1
  225. package/resources/call.d.mts +17 -7
  226. package/resources/call.d.mts.map +1 -1
  227. package/resources/call.d.ts +17 -7
  228. package/resources/call.d.ts.map +1 -1
  229. package/resources/call.js +6 -5
  230. package/resources/call.js.map +1 -1
  231. package/resources/call.mjs +6 -5
  232. package/resources/call.mjs.map +1 -1
  233. package/resources/evaluation.d.mts +20 -8
  234. package/resources/evaluation.d.mts.map +1 -1
  235. package/resources/evaluation.d.ts +20 -8
  236. package/resources/evaluation.d.ts.map +1 -1
  237. package/resources/evaluation.js +5 -4
  238. package/resources/evaluation.js.map +1 -1
  239. package/resources/evaluation.mjs +5 -4
  240. package/resources/evaluation.mjs.map +1 -1
  241. package/resources/health.d.mts +2 -2
  242. package/resources/health.d.ts +2 -2
  243. package/resources/health.js +1 -1
  244. package/resources/health.js.map +1 -1
  245. package/resources/health.mjs +1 -1
  246. package/resources/integrations.d.mts +39 -6
  247. package/resources/integrations.d.mts.map +1 -1
  248. package/resources/integrations.d.ts +39 -6
  249. package/resources/integrations.d.ts.map +1 -1
  250. package/resources/integrations.js +26 -1
  251. package/resources/integrations.js.map +1 -1
  252. package/resources/integrations.mjs +26 -1
  253. package/resources/integrations.mjs.map +1 -1
  254. package/resources/metric.d.mts +2 -2
  255. package/resources/metric.d.ts +2 -2
  256. package/resources/metric.js +1 -1
  257. package/resources/metric.js.map +1 -1
  258. package/resources/metric.mjs +1 -1
  259. package/resources/persona.d.mts +45 -8
  260. package/resources/persona.d.mts.map +1 -1
  261. package/resources/persona.d.ts +45 -8
  262. package/resources/persona.d.ts.map +1 -1
  263. package/resources/persona.js +29 -3
  264. package/resources/persona.js.map +1 -1
  265. package/resources/persona.mjs +29 -3
  266. package/resources/persona.mjs.map +1 -1
  267. package/resources/simulation.d.mts +51 -5
  268. package/resources/simulation.d.mts.map +1 -1
  269. package/resources/simulation.d.ts +51 -5
  270. package/resources/simulation.d.ts.map +1 -1
  271. package/resources/simulation.js +45 -4
  272. package/resources/simulation.js.map +1 -1
  273. package/resources/simulation.mjs +45 -4
  274. package/resources/simulation.mjs.map +1 -1
  275. package/resources.d.mts +2 -0
  276. package/resources.d.mts.map +1 -0
  277. package/resources.d.ts +2 -0
  278. package/resources.d.ts.map +1 -0
  279. package/resources.js +5 -0
  280. package/resources.js.map +1 -0
  281. package/resources.mjs +2 -0
  282. package/resources.mjs.map +1 -0
  283. package/src/api-promise.ts +2 -92
  284. package/src/client.ts +207 -116
  285. package/src/core/README.md +3 -0
  286. package/src/core/api-promise.ts +92 -0
  287. package/src/core/error.ts +130 -0
  288. package/src/core/resource.ts +11 -0
  289. package/src/core/uploads.ts +2 -0
  290. package/src/error.ts +2 -130
  291. package/src/index.ts +3 -3
  292. package/src/internal/README.md +3 -0
  293. package/src/internal/builtin-types.ts +14 -0
  294. package/src/internal/detect-platform.ts +3 -3
  295. package/src/internal/errors.ts +11 -0
  296. package/src/internal/headers.ts +9 -8
  297. package/src/internal/parse.ts +43 -28
  298. package/src/internal/qs/formats.ts +2 -1
  299. package/src/internal/qs/stringify.ts +17 -20
  300. package/src/internal/qs/utils.ts +14 -14
  301. package/src/internal/request-options.ts +55 -31
  302. package/src/internal/shim-types.ts +26 -0
  303. package/src/internal/shims.ts +20 -58
  304. package/src/internal/to-file.ts +154 -0
  305. package/src/internal/types.ts +14 -17
  306. package/src/internal/uploads.ts +60 -180
  307. package/src/internal/utils/base64.ts +14 -11
  308. package/src/internal/utils/bytes.ts +32 -0
  309. package/src/internal/utils/log.ts +100 -23
  310. package/src/internal/utils/path.ts +88 -0
  311. package/src/internal/utils/uuid.ts +10 -6
  312. package/src/internal/utils/values.ts +16 -5
  313. package/src/resource.ts +2 -11
  314. package/src/resources/call.ts +12 -11
  315. package/src/resources/evaluation.ts +12 -11
  316. package/src/resources/health.ts +2 -2
  317. package/src/resources/integrations.ts +31 -6
  318. package/src/resources/metric.ts +2 -2
  319. package/src/resources/persona.ts +36 -10
  320. package/src/resources/simulation.ts +49 -8
  321. package/src/resources.ts +1 -0
  322. package/src/uploads.ts +2 -1
  323. package/src/version.ts +1 -1
  324. package/uploads.d.mts +1 -1
  325. package/uploads.d.mts.map +1 -1
  326. package/uploads.d.ts +1 -1
  327. package/uploads.d.ts.map +1 -1
  328. package/uploads.js +3 -3
  329. package/uploads.js.map +1 -1
  330. package/uploads.mjs +1 -1
  331. package/uploads.mjs.map +1 -1
  332. package/version.d.mts +1 -1
  333. package/version.d.ts +1 -1
  334. package/version.js +1 -1
  335. package/version.mjs +1 -1
  336. package/internal/polyfill/crypto.node.d.ts +0 -10
  337. package/internal/polyfill/crypto.node.js +0 -11
  338. package/internal/polyfill/crypto.node.mjs +0 -2
  339. package/internal/polyfill/file.node.d.ts +0 -9
  340. package/internal/polyfill/file.node.js +0 -17
  341. package/internal/polyfill/file.node.mjs +0 -9
  342. package/src/internal/polyfill/crypto.node.d.ts +0 -10
  343. package/src/internal/polyfill/crypto.node.js +0 -11
  344. package/src/internal/polyfill/crypto.node.mjs +0 -2
  345. package/src/internal/polyfill/file.node.d.ts +0 -9
  346. package/src/internal/polyfill/file.node.js +0 -17
  347. package/src/internal/polyfill/file.node.mjs +0 -9
  348. package/src/internal/shim-types.d.ts +0 -28
@@ -1,10 +1,13 @@
1
1
  import { RFC1738 } from './formats';
2
2
  import type { DefaultEncoder, Format } from './types';
3
+ import { isArray } from '../utils/values';
3
4
 
4
- const has = Object.prototype.hasOwnProperty;
5
- const is_array = Array.isArray;
5
+ export let has = (obj: object, key: PropertyKey): boolean => (
6
+ (has = (Object as any).hasOwn ?? Function.prototype.call.bind(Object.prototype.hasOwnProperty)),
7
+ has(obj, key)
8
+ );
6
9
 
7
- const hex_table = (() => {
10
+ const hex_table = /* @__PURE__ */ (() => {
8
11
  const array = [];
9
12
  for (let i = 0; i < 256; ++i) {
10
13
  array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase());
@@ -20,7 +23,7 @@ function compact_queue<T extends Record<string, any>>(queue: Array<{ obj: T; pro
20
23
 
21
24
  const obj = item.obj[item.prop];
22
25
 
23
- if (is_array(obj)) {
26
+ if (isArray(obj)) {
24
27
  const compacted: unknown[] = [];
25
28
 
26
29
  for (let j = 0; j < obj.length; ++j) {
@@ -56,13 +59,10 @@ export function merge(
56
59
  }
57
60
 
58
61
  if (typeof source !== 'object') {
59
- if (is_array(target)) {
62
+ if (isArray(target)) {
60
63
  target.push(source);
61
64
  } else if (target && typeof target === 'object') {
62
- if (
63
- (options && (options.plainObjects || options.allowPrototypes)) ||
64
- !has.call(Object.prototype, source)
65
- ) {
65
+ if ((options && (options.plainObjects || options.allowPrototypes)) || !has(Object.prototype, source)) {
66
66
  target[source] = true;
67
67
  }
68
68
  } else {
@@ -77,14 +77,14 @@ export function merge(
77
77
  }
78
78
 
79
79
  let mergeTarget = target;
80
- if (is_array(target) && !is_array(source)) {
80
+ if (isArray(target) && !isArray(source)) {
81
81
  // @ts-ignore
82
82
  mergeTarget = array_to_object(target, options);
83
83
  }
84
84
 
85
- if (is_array(target) && is_array(source)) {
85
+ if (isArray(target) && isArray(source)) {
86
86
  source.forEach(function (item, i) {
87
- if (has.call(target, i)) {
87
+ if (has(target, i)) {
88
88
  const targetItem = target[i];
89
89
  if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') {
90
90
  target[i] = merge(targetItem, item, options);
@@ -101,7 +101,7 @@ export function merge(
101
101
  return Object.keys(source).reduce(function (acc, key) {
102
102
  const value = source[key];
103
103
 
104
- if (has.call(acc, key)) {
104
+ if (has(acc, key)) {
105
105
  acc[key] = merge(acc[key], value, options);
106
106
  } else {
107
107
  acc[key] = value;
@@ -254,7 +254,7 @@ export function combine(a: any, b: any) {
254
254
  }
255
255
 
256
256
  export function maybe_map<T>(val: T[], fn: (v: T) => T) {
257
- if (is_array(val)) {
257
+ if (isArray(val)) {
258
258
  const mapped = [];
259
259
  for (let i = 0; i < val.length; i += 1) {
260
260
  mapped.push(fn(val[i]!));
@@ -3,55 +3,79 @@
3
3
  import { NullableHeaders } from './headers';
4
4
 
5
5
  import type { BodyInit } from './builtin-types';
6
- import { isEmptyObj, hasOwn } from './utils/values';
7
- import type { HTTPMethod, KeysEnum, MergedRequestInit } from './types';
6
+ import type { HTTPMethod, MergedRequestInit } from './types';
8
7
  import { type HeadersLike } from './headers';
9
8
 
10
9
  export type FinalRequestOptions = RequestOptions & { method: HTTPMethod; path: string };
11
10
 
12
11
  export type RequestOptions = {
12
+ /**
13
+ * The HTTP method for the request (e.g., 'get', 'post', 'put', 'delete').
14
+ */
13
15
  method?: HTTPMethod;
16
+
17
+ /**
18
+ * The URL path for the request.
19
+ *
20
+ * @example "/v1/foo"
21
+ */
14
22
  path?: string;
23
+
24
+ /**
25
+ * Query parameters to include in the request URL.
26
+ */
15
27
  query?: object | undefined | null;
28
+
29
+ /**
30
+ * The request body. Can be a string, JSON object, FormData, or other supported types.
31
+ */
16
32
  body?: unknown;
33
+
34
+ /**
35
+ * HTTP headers to include with the request. Can be a Headers object, plain object, or array of tuples.
36
+ */
17
37
  headers?: HeadersLike;
38
+
39
+ /**
40
+ * The maximum number of times that the client will retry a request in case of a
41
+ * temporary failure, like a network error or a 5XX error from the server.
42
+ *
43
+ * @default 2
44
+ */
18
45
  maxRetries?: number;
46
+
19
47
  stream?: boolean | undefined;
48
+
49
+ /**
50
+ * The maximum amount of time (in milliseconds) that the client should wait for a response
51
+ * from the server before timing out a single request.
52
+ *
53
+ * @unit milliseconds
54
+ */
20
55
  timeout?: number;
56
+
57
+ /**
58
+ * Additional `RequestInit` options to be passed to the underlying `fetch` call.
59
+ * These options will be merged with the client's default fetch options.
60
+ */
21
61
  fetchOptions?: MergedRequestInit;
62
+
63
+ /**
64
+ * An AbortSignal that can be used to cancel the request.
65
+ */
22
66
  signal?: AbortSignal | undefined | null;
23
- idempotencyKey?: string;
24
67
 
25
- __binaryResponse?: boolean | undefined;
26
- };
68
+ /**
69
+ * A unique key for this request to enable idempotency.
70
+ */
71
+ idempotencyKey?: string;
27
72
 
28
- // This is required so that we can determine if a given object matches the RequestOptions
29
- // type at runtime. While this requires duplication, it is enforced by the TypeScript
30
- // compiler such that any missing / extraneous keys will cause an error.
31
- const requestOptionsKeys: KeysEnum<RequestOptions> = {
32
- method: true,
33
- path: true,
34
- query: true,
35
- body: true,
36
- headers: true,
37
-
38
- maxRetries: true,
39
- stream: true,
40
- timeout: true,
41
- fetchOptions: true,
42
- signal: true,
43
- idempotencyKey: true,
44
-
45
- __binaryResponse: true,
46
- };
73
+ /**
74
+ * Override the default base URL for this specific request.
75
+ */
76
+ defaultBaseURL?: string | undefined;
47
77
 
48
- export const isRequestOptions = (obj: unknown): obj is RequestOptions => {
49
- return (
50
- typeof obj === 'object' &&
51
- obj !== null &&
52
- !isEmptyObj(obj) &&
53
- Object.keys(obj).every((k) => hasOwn(requestOptionsKeys, k))
54
- );
78
+ __binaryResponse?: boolean | undefined;
55
79
  };
56
80
 
57
81
  export type EncodedContent = { bodyHeaders: HeadersLike; body: BodyInit };
@@ -0,0 +1,26 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ /**
4
+ * Shims for types that we can't always rely on being available globally.
5
+ *
6
+ * Note: these only exist at the type-level, there is no corresponding runtime
7
+ * version for any of these symbols.
8
+ */
9
+
10
+ type NeverToAny<T> = T extends never ? any : T;
11
+
12
+ /** @ts-ignore */
13
+ type _DOMReadableStream<R = any> = globalThis.ReadableStream<R>;
14
+
15
+ /** @ts-ignore */
16
+ type _NodeReadableStream<R = any> = import('stream/web').ReadableStream<R>;
17
+
18
+ type _ConditionalNodeReadableStream<R = any> =
19
+ typeof globalThis extends { ReadableStream: any } ? never : _NodeReadableStream<R>;
20
+
21
+ type _ReadableStream<R = any> = NeverToAny<
22
+ | ([0] extends [1 & _DOMReadableStream<R>] ? never : _DOMReadableStream<R>)
23
+ | ([0] extends [1 & _ConditionalNodeReadableStream<R>] ? never : _ConditionalNodeReadableStream<R>)
24
+ >;
25
+
26
+ export type { _ReadableStream as ReadableStream };
@@ -7,8 +7,8 @@
7
7
  * messages in cases where an environment isn't fully supported.
8
8
  */
9
9
 
10
- import { type Fetch } from './builtin-types';
11
- import { type ReadableStream } from './shim-types';
10
+ import type { Fetch } from './builtin-types';
11
+ import type { ReadableStream } from './shim-types';
12
12
 
13
13
  export function getDefaultFetch(): Fetch {
14
14
  if (typeof fetch !== 'undefined') {
@@ -20,62 +20,6 @@ export function getDefaultFetch(): Fetch {
20
20
  );
21
21
  }
22
22
 
23
- /**
24
- * A minimal copy of the NodeJS `stream.Readable` class so that we can
25
- * accept the NodeJS types in certain places, e.g. file uploads
26
- *
27
- * https://nodejs.org/api/stream.html#class-streamreadable
28
- */
29
- export interface ReadableLike {
30
- readable: boolean;
31
- readonly readableEnded: boolean;
32
- readonly readableFlowing: boolean | null;
33
- readonly readableHighWaterMark: number;
34
- readonly readableLength: number;
35
- readonly readableObjectMode: boolean;
36
- destroyed: boolean;
37
- read(size?: number): any;
38
- pause(): this;
39
- resume(): this;
40
- isPaused(): boolean;
41
- destroy(error?: Error): this;
42
- [Symbol.asyncIterator](): AsyncIterableIterator<any>;
43
- }
44
-
45
- /**
46
- * Determines if the given value looks like a NodeJS `stream.Readable`
47
- * object and that it is readable, i.e. has not been consumed.
48
- *
49
- * https://nodejs.org/api/stream.html#class-streamreadable
50
- */
51
- export function isReadableLike(value: any) {
52
- // We declare our own class of Readable here, so it's not feasible to
53
- // do an 'instanceof' check. Instead, check for Readable-like properties.
54
- return !!value && value.readable === true && typeof value.read === 'function';
55
- }
56
-
57
- /**
58
- * A minimal copy of the NodeJS `fs.ReadStream` class for usage within file uploads.
59
- *
60
- * https://nodejs.org/api/fs.html#class-fsreadstream
61
- */
62
- export interface FsReadStreamLike extends ReadableLike {
63
- path: {}; // real type is string | Buffer but we can't reference `Buffer` here
64
- }
65
-
66
- /**
67
- * Determines if the given value looks like a NodeJS `fs.ReadStream`
68
- * object.
69
- *
70
- * This just checks if the object matches our `Readable` interface
71
- * and defines a `path` property, there may be false positives.
72
- *
73
- * https://nodejs.org/api/fs.html#class-fsreadstream
74
- */
75
- export function isFsReadStreamLike(value: any): value is FsReadStreamLike {
76
- return isReadableLike(value) && 'path' in value;
77
- }
78
-
79
23
  type ReadableStreamArgs = ConstructorParameters<typeof ReadableStream>;
80
24
 
81
25
  export function makeReadableStream(...args: ReadableStreamArgs): ReadableStream {
@@ -143,3 +87,21 @@ export function ReadableStreamToAsyncIterable<T>(stream: any): AsyncIterableIter
143
87
  },
144
88
  };
145
89
  }
90
+
91
+ /**
92
+ * Cancels a ReadableStream we don't need to consume.
93
+ * See https://undici.nodejs.org/#/?id=garbage-collection
94
+ */
95
+ export async function CancelReadableStream(stream: any): Promise<void> {
96
+ if (stream === null || typeof stream !== 'object') return;
97
+
98
+ if (stream[Symbol.asyncIterator]) {
99
+ await stream[Symbol.asyncIterator]().return?.();
100
+ return;
101
+ }
102
+
103
+ const reader = stream.getReader();
104
+ const cancelPromise = reader.cancel();
105
+ reader.releaseLock();
106
+ await cancelPromise;
107
+ }
@@ -0,0 +1,154 @@
1
+ import { BlobPart, getName, makeFile, isAsyncIterable } from './uploads';
2
+ import type { FilePropertyBag } from './builtin-types';
3
+ import { checkFileSupport } from './uploads';
4
+
5
+ type BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | DataView;
6
+
7
+ /**
8
+ * Intended to match DOM Blob, node-fetch Blob, node:buffer Blob, etc.
9
+ * Don't add arrayBuffer here, node-fetch doesn't have it
10
+ */
11
+ interface BlobLike {
12
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */
13
+ readonly size: number;
14
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */
15
+ readonly type: string;
16
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */
17
+ text(): Promise<string>;
18
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */
19
+ slice(start?: number, end?: number): BlobLike;
20
+ }
21
+
22
+ /**
23
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
24
+ */
25
+ const isBlobLike = (value: any): value is BlobLike & { arrayBuffer(): Promise<ArrayBuffer> } =>
26
+ value != null &&
27
+ typeof value === 'object' &&
28
+ typeof value.size === 'number' &&
29
+ typeof value.type === 'string' &&
30
+ typeof value.text === 'function' &&
31
+ typeof value.slice === 'function' &&
32
+ typeof value.arrayBuffer === 'function';
33
+
34
+ /**
35
+ * Intended to match DOM File, node:buffer File, undici File, etc.
36
+ */
37
+ interface FileLike extends BlobLike {
38
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */
39
+ readonly lastModified: number;
40
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */
41
+ readonly name?: string | undefined;
42
+ }
43
+
44
+ /**
45
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
46
+ */
47
+ const isFileLike = (value: any): value is FileLike & { arrayBuffer(): Promise<ArrayBuffer> } =>
48
+ value != null &&
49
+ typeof value === 'object' &&
50
+ typeof value.name === 'string' &&
51
+ typeof value.lastModified === 'number' &&
52
+ isBlobLike(value);
53
+
54
+ /**
55
+ * Intended to match DOM Response, node-fetch Response, undici Response, etc.
56
+ */
57
+ export interface ResponseLike {
58
+ url: string;
59
+ blob(): Promise<BlobLike>;
60
+ }
61
+
62
+ const isResponseLike = (value: any): value is ResponseLike =>
63
+ value != null &&
64
+ typeof value === 'object' &&
65
+ typeof value.url === 'string' &&
66
+ typeof value.blob === 'function';
67
+
68
+ export type ToFileInput =
69
+ | FileLike
70
+ | ResponseLike
71
+ | Exclude<BlobLikePart, string>
72
+ | AsyncIterable<BlobLikePart>;
73
+
74
+ /**
75
+ * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats
76
+ * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts
77
+ * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible
78
+ * @param {Object=} options additional properties
79
+ * @param {string=} options.type the MIME type of the content
80
+ * @param {number=} options.lastModified the last modified timestamp
81
+ * @returns a {@link File} with the given properties
82
+ */
83
+ export async function toFile(
84
+ value: ToFileInput | PromiseLike<ToFileInput>,
85
+ name?: string | null | undefined,
86
+ options?: FilePropertyBag | undefined,
87
+ ): Promise<File> {
88
+ checkFileSupport();
89
+
90
+ // If it's a promise, resolve it.
91
+ value = await value;
92
+
93
+ // If we've been given a `File` we don't need to do anything
94
+ if (isFileLike(value)) {
95
+ if (value instanceof File) {
96
+ return value;
97
+ }
98
+ return makeFile([await value.arrayBuffer()], value.name);
99
+ }
100
+
101
+ if (isResponseLike(value)) {
102
+ const blob = await value.blob();
103
+ name ||= new URL(value.url).pathname.split(/[\\/]/).pop();
104
+
105
+ return makeFile(await getBytes(blob), name, options);
106
+ }
107
+
108
+ const parts = await getBytes(value);
109
+
110
+ name ||= getName(value);
111
+
112
+ if (!options?.type) {
113
+ const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);
114
+ if (typeof type === 'string') {
115
+ options = { ...options, type };
116
+ }
117
+ }
118
+
119
+ return makeFile(parts, name, options);
120
+ }
121
+
122
+ async function getBytes(value: BlobLikePart | AsyncIterable<BlobLikePart>): Promise<Array<BlobPart>> {
123
+ let parts: Array<BlobPart> = [];
124
+ if (
125
+ typeof value === 'string' ||
126
+ ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.
127
+ value instanceof ArrayBuffer
128
+ ) {
129
+ parts.push(value);
130
+ } else if (isBlobLike(value)) {
131
+ parts.push(value instanceof Blob ? value : await value.arrayBuffer());
132
+ } else if (
133
+ isAsyncIterable(value) // includes Readable, ReadableStream, etc.
134
+ ) {
135
+ for await (const chunk of value) {
136
+ parts.push(...(await getBytes(chunk as BlobLikePart))); // TODO, consider validating?
137
+ }
138
+ } else {
139
+ const constructor = value?.constructor?.name;
140
+ throw new Error(
141
+ `Unexpected data type: ${typeof value}${
142
+ constructor ? `; constructor: ${constructor}` : ''
143
+ }${propsForError(value)}`,
144
+ );
145
+ }
146
+
147
+ return parts;
148
+ }
149
+
150
+ function propsForError(value: unknown): string {
151
+ if (typeof value !== 'object' || value === null) return '';
152
+ const props = Object.getOwnPropertyNames(value);
153
+ return `; props: [${props.map((p) => `"${p}"`).join(', ')}]`;
154
+ }
@@ -5,15 +5,9 @@ export type HTTPMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
5
5
 
6
6
  export type KeysEnum<T> = { [P in keyof Required<T>]: true };
7
7
 
8
- type NotAny<T> = [unknown] extends [T] ? never : T;
9
- type Literal<T> = PropertyKey extends T ? never : T;
10
- type MappedLiteralKeys<T> = T extends any ? Literal<keyof T> : never;
11
- type MappedIndex<T, K> =
12
- T extends any ?
13
- K extends keyof T ?
14
- T[K]
15
- : never
16
- : never;
8
+ export type FinalizedRequestInit = RequestInit & { headers: Headers };
9
+
10
+ type NotAny<T> = [0] extends [1 & T] ? never : T;
17
11
 
18
12
  /**
19
13
  * Some environments overload the global fetch function, and Parameters<T> only gets the last signature.
@@ -70,13 +64,15 @@ type OverloadedParameters<T> =
70
64
  * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition
71
65
  */
72
66
  /** @ts-ignore For users with \@types/node */
73
- type UndiciTypesRequestInit = NotAny<import('../node_modules/undici-types').RequestInit> | NotAny<import('../../node_modules/undici-types').RequestInit> | NotAny<import('../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../../../../../node_modules/undici-types').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/undici-types').RequestInit>;
67
+ type UndiciTypesRequestInit = NotAny<import('../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../node_modules/undici-types/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/undici-types/index.d.ts').RequestInit>;
74
68
  /** @ts-ignore For users with undici */
75
- type UndiciRequestInit = NotAny<import('../node_modules/undici').RequestInit> | NotAny<import('../../node_modules/undici').RequestInit> | NotAny<import('../../../node_modules/undici').RequestInit> | NotAny<import('../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../../../../../node_modules/undici').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/undici').RequestInit>;
69
+ type UndiciRequestInit = NotAny<import('../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../node_modules/undici/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/undici/index.d.ts').RequestInit>;
76
70
  /** @ts-ignore For users with \@types/bun */
77
71
  type BunRequestInit = globalThis.FetchRequestInit;
78
- /** @ts-ignore For users with node-fetch */
79
- type NodeFetchRequestInit = NotAny<import('../node_modules/node-fetch').RequestInit> | NotAny<import('../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/node-fetch').RequestInit>;
72
+ /** @ts-ignore For users with node-fetch@2 */
73
+ type NodeFetch2RequestInit = NotAny<import('../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/@types/node-fetch/index.d.ts').RequestInit>;
74
+ /** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */
75
+ type NodeFetch3RequestInit = NotAny<import('../node_modules/node-fetch').RequestInit> | NotAny<import('../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../../node_modules/node-fetch').RequestInit> | NotAny<import('../../../../../../../../../../node_modules/node-fetch').RequestInit>;
80
76
  /** @ts-ignore For users who use Deno */
81
77
  type FetchRequestInit = NonNullable<OverloadedParameters<typeof fetch>[1]>;
82
78
  /* eslint-enable */
@@ -85,7 +81,8 @@ type RequestInits =
85
81
  | NotAny<UndiciTypesRequestInit>
86
82
  | NotAny<UndiciRequestInit>
87
83
  | NotAny<BunRequestInit>
88
- | NotAny<NodeFetchRequestInit>
84
+ | NotAny<NodeFetch2RequestInit>
85
+ | NotAny<NodeFetch3RequestInit>
89
86
  | NotAny<RequestInit>
90
87
  | NotAny<FetchRequestInit>;
91
88
 
@@ -93,6 +90,6 @@ type RequestInits =
93
90
  * This type contains `RequestInit` options that may be available on the current runtime,
94
91
  * including per-platform extensions like `dispatcher`, `agent`, `client`, etc.
95
92
  */
96
- export type MergedRequestInit = {
97
- [K in MappedLiteralKeys<RequestInits>]?: MappedIndex<RequestInits, K> | undefined;
98
- };
93
+ export type MergedRequestInit = RequestInits &
94
+ /** We don't include these in the types as they'll be overridden for every request. */
95
+ Partial<Record<'body' | 'headers' | 'method' | 'signal', never>>;