@awt_ai/aws-sdk 0.3.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 (261) hide show
  1. package/.github/logo.svg +3 -0
  2. package/CHANGELOG.md +67 -0
  3. package/LICENSE +8 -0
  4. package/README.md +0 -0
  5. package/client.d.ts +124 -0
  6. package/client.d.ts.map +1 -0
  7. package/client.js +198 -0
  8. package/client.js.map +1 -0
  9. package/client.mjs +160 -0
  10. package/client.mjs.map +1 -0
  11. package/core/auth.d.ts +15 -0
  12. package/core/auth.d.ts.map +1 -0
  13. package/core/auth.js +113 -0
  14. package/core/auth.js.map +1 -0
  15. package/core/auth.mjs +73 -0
  16. package/core/auth.mjs.map +1 -0
  17. package/core/error.d.ts +2 -0
  18. package/core/error.d.ts.map +1 -0
  19. package/core/error.js +18 -0
  20. package/core/error.js.map +1 -0
  21. package/core/error.mjs +2 -0
  22. package/core/error.mjs.map +1 -0
  23. package/core/pagination.d.ts +2 -0
  24. package/core/pagination.d.ts.map +1 -0
  25. package/core/pagination.js +18 -0
  26. package/core/pagination.js.map +1 -0
  27. package/core/pagination.mjs +2 -0
  28. package/core/pagination.mjs.map +1 -0
  29. package/core/streaming.d.ts +2 -0
  30. package/core/streaming.d.ts.map +1 -0
  31. package/core/streaming.js +18 -0
  32. package/core/streaming.js.map +1 -0
  33. package/core/streaming.mjs +2 -0
  34. package/core/streaming.mjs.map +1 -0
  35. package/index.d.ts +4 -0
  36. package/index.d.ts.map +1 -0
  37. package/index.js +22 -0
  38. package/index.js.map +1 -0
  39. package/index.mjs +3 -0
  40. package/index.mjs.map +1 -0
  41. package/internal/builtin-types.d.ts +73 -0
  42. package/internal/builtin-types.d.ts.map +1 -0
  43. package/internal/builtin-types.js +4 -0
  44. package/internal/builtin-types.js.map +1 -0
  45. package/internal/builtin-types.mjs +3 -0
  46. package/internal/builtin-types.mjs.map +1 -0
  47. package/internal/constants.d.ts +5 -0
  48. package/internal/constants.d.ts.map +1 -0
  49. package/internal/constants.js +18 -0
  50. package/internal/constants.js.map +1 -0
  51. package/internal/constants.mjs +15 -0
  52. package/internal/constants.mjs.map +1 -0
  53. package/internal/decoders/jsonl.d.ts +10 -0
  54. package/internal/decoders/jsonl.d.ts.map +1 -0
  55. package/internal/decoders/jsonl.js +39 -0
  56. package/internal/decoders/jsonl.js.map +1 -0
  57. package/internal/decoders/jsonl.mjs +35 -0
  58. package/internal/decoders/jsonl.mjs.map +1 -0
  59. package/internal/decoders/line.d.ts +17 -0
  60. package/internal/decoders/line.d.ts.map +1 -0
  61. package/internal/decoders/line.js +123 -0
  62. package/internal/decoders/line.js.map +1 -0
  63. package/internal/decoders/line.mjs +118 -0
  64. package/internal/decoders/line.mjs.map +1 -0
  65. package/internal/errors.d.ts +3 -0
  66. package/internal/errors.d.ts.map +1 -0
  67. package/internal/errors.js +41 -0
  68. package/internal/errors.js.map +1 -0
  69. package/internal/errors.mjs +36 -0
  70. package/internal/errors.mjs.map +1 -0
  71. package/internal/headers.d.ts +22 -0
  72. package/internal/headers.d.ts.map +1 -0
  73. package/internal/headers.js +79 -0
  74. package/internal/headers.js.map +1 -0
  75. package/internal/headers.mjs +74 -0
  76. package/internal/headers.mjs.map +1 -0
  77. package/internal/parse.d.ts +17 -0
  78. package/internal/parse.d.ts.map +1 -0
  79. package/internal/parse.js +60 -0
  80. package/internal/parse.js.map +1 -0
  81. package/internal/parse.mjs +56 -0
  82. package/internal/parse.mjs.map +1 -0
  83. package/internal/qs/formats.d.ts +7 -0
  84. package/internal/qs/formats.d.ts.map +1 -0
  85. package/internal/qs/formats.js +13 -0
  86. package/internal/qs/formats.js.map +1 -0
  87. package/internal/qs/formats.mjs +9 -0
  88. package/internal/qs/formats.mjs.map +1 -0
  89. package/internal/qs/index.d.ts +10 -0
  90. package/internal/qs/index.d.ts.map +1 -0
  91. package/internal/qs/index.js +14 -0
  92. package/internal/qs/index.js.map +1 -0
  93. package/internal/qs/index.mjs +10 -0
  94. package/internal/qs/index.mjs.map +1 -0
  95. package/internal/qs/stringify.d.ts +3 -0
  96. package/internal/qs/stringify.d.ts.map +1 -0
  97. package/internal/qs/stringify.js +277 -0
  98. package/internal/qs/stringify.js.map +1 -0
  99. package/internal/qs/stringify.mjs +274 -0
  100. package/internal/qs/stringify.mjs.map +1 -0
  101. package/internal/qs/types.d.ts +57 -0
  102. package/internal/qs/types.d.ts.map +1 -0
  103. package/internal/qs/types.js +3 -0
  104. package/internal/qs/types.js.map +1 -0
  105. package/internal/qs/types.mjs +2 -0
  106. package/internal/qs/types.mjs.map +1 -0
  107. package/internal/qs/utils.d.ts +15 -0
  108. package/internal/qs/utils.d.ts.map +1 -0
  109. package/internal/qs/utils.js +230 -0
  110. package/internal/qs/utils.js.map +1 -0
  111. package/internal/qs/utils.mjs +217 -0
  112. package/internal/qs/utils.mjs.map +1 -0
  113. package/internal/request-options.d.ts +77 -0
  114. package/internal/request-options.d.ts.map +1 -0
  115. package/internal/request-options.js +14 -0
  116. package/internal/request-options.js.map +1 -0
  117. package/internal/request-options.mjs +10 -0
  118. package/internal/request-options.mjs.map +1 -0
  119. package/internal/shim-types.d.ts +17 -0
  120. package/internal/shim-types.d.ts.map +1 -0
  121. package/internal/shim-types.js +4 -0
  122. package/internal/shim-types.js.map +1 -0
  123. package/internal/shim-types.mjs +3 -0
  124. package/internal/shim-types.mjs.map +1 -0
  125. package/internal/shims.d.ts +26 -0
  126. package/internal/shims.d.ts.map +1 -0
  127. package/internal/shims.js +92 -0
  128. package/internal/shims.js.map +1 -0
  129. package/internal/shims.mjs +85 -0
  130. package/internal/shims.mjs.map +1 -0
  131. package/internal/stream-utils.d.ts +8 -0
  132. package/internal/stream-utils.d.ts.map +1 -0
  133. package/internal/stream-utils.js +38 -0
  134. package/internal/stream-utils.js.map +1 -0
  135. package/internal/stream-utils.mjs +35 -0
  136. package/internal/stream-utils.mjs.map +1 -0
  137. package/internal/to-file.d.ts +45 -0
  138. package/internal/to-file.d.ts.map +1 -0
  139. package/internal/to-file.js +96 -0
  140. package/internal/to-file.js.map +1 -0
  141. package/internal/to-file.mjs +93 -0
  142. package/internal/to-file.mjs.map +1 -0
  143. package/internal/types.d.ts +63 -0
  144. package/internal/types.d.ts.map +1 -0
  145. package/internal/types.js +4 -0
  146. package/internal/types.js.map +1 -0
  147. package/internal/types.mjs +3 -0
  148. package/internal/types.mjs.map +1 -0
  149. package/internal/uploads.d.ts +42 -0
  150. package/internal/uploads.d.ts.map +1 -0
  151. package/internal/uploads.js +145 -0
  152. package/internal/uploads.js.map +1 -0
  153. package/internal/uploads.mjs +135 -0
  154. package/internal/uploads.mjs.map +1 -0
  155. package/internal/utils/base64.d.ts +3 -0
  156. package/internal/utils/base64.d.ts.map +1 -0
  157. package/internal/utils/base64.js +38 -0
  158. package/internal/utils/base64.js.map +1 -0
  159. package/internal/utils/base64.mjs +33 -0
  160. package/internal/utils/base64.mjs.map +1 -0
  161. package/internal/utils/bytes.d.ts +4 -0
  162. package/internal/utils/bytes.d.ts.map +1 -0
  163. package/internal/utils/bytes.js +31 -0
  164. package/internal/utils/bytes.js.map +1 -0
  165. package/internal/utils/bytes.mjs +26 -0
  166. package/internal/utils/bytes.mjs.map +1 -0
  167. package/internal/utils/env.d.ts +9 -0
  168. package/internal/utils/env.d.ts.map +1 -0
  169. package/internal/utils/env.js +22 -0
  170. package/internal/utils/env.js.map +1 -0
  171. package/internal/utils/env.mjs +18 -0
  172. package/internal/utils/env.mjs.map +1 -0
  173. package/internal/utils/log.d.ts +37 -0
  174. package/internal/utils/log.d.ts.map +1 -0
  175. package/internal/utils/log.js +87 -0
  176. package/internal/utils/log.js.map +1 -0
  177. package/internal/utils/log.mjs +81 -0
  178. package/internal/utils/log.mjs.map +1 -0
  179. package/internal/utils/path.d.ts +15 -0
  180. package/internal/utils/path.d.ts.map +1 -0
  181. package/internal/utils/path.js +79 -0
  182. package/internal/utils/path.js.map +1 -0
  183. package/internal/utils/path.mjs +74 -0
  184. package/internal/utils/path.mjs.map +1 -0
  185. package/internal/utils/query.d.ts +2 -0
  186. package/internal/utils/query.d.ts.map +1 -0
  187. package/internal/utils/query.js +42 -0
  188. package/internal/utils/query.js.map +1 -0
  189. package/internal/utils/query.mjs +6 -0
  190. package/internal/utils/query.mjs.map +1 -0
  191. package/internal/utils/sleep.d.ts +2 -0
  192. package/internal/utils/sleep.d.ts.map +1 -0
  193. package/internal/utils/sleep.js +7 -0
  194. package/internal/utils/sleep.js.map +1 -0
  195. package/internal/utils/sleep.mjs +3 -0
  196. package/internal/utils/sleep.mjs.map +1 -0
  197. package/internal/utils/time.d.ts +3 -0
  198. package/internal/utils/time.d.ts.map +1 -0
  199. package/internal/utils/time.js +8 -0
  200. package/internal/utils/time.js.map +1 -0
  201. package/internal/utils/time.mjs +5 -0
  202. package/internal/utils/time.mjs.map +1 -0
  203. package/internal/utils/uuid.d.ts +5 -0
  204. package/internal/utils/uuid.d.ts.map +1 -0
  205. package/internal/utils/uuid.js +19 -0
  206. package/internal/utils/uuid.js.map +1 -0
  207. package/internal/utils/uuid.mjs +15 -0
  208. package/internal/utils/uuid.mjs.map +1 -0
  209. package/internal/utils/values.d.ts +19 -0
  210. package/internal/utils/values.d.ts.map +1 -0
  211. package/internal/utils/values.js +119 -0
  212. package/internal/utils/values.js.map +1 -0
  213. package/internal/utils/values.mjs +100 -0
  214. package/internal/utils/values.mjs.map +1 -0
  215. package/internal/utils.d.ts +8 -0
  216. package/internal/utils.d.ts.map +1 -0
  217. package/internal/utils.js +25 -0
  218. package/internal/utils.js.map +1 -0
  219. package/internal/utils.mjs +9 -0
  220. package/internal/utils.mjs.map +1 -0
  221. package/package.json +62 -0
  222. package/src/client.ts +294 -0
  223. package/src/core/auth.ts +101 -0
  224. package/src/core/error.ts +1 -0
  225. package/src/core/pagination.ts +1 -0
  226. package/src/core/streaming.ts +1 -0
  227. package/src/index.ts +4 -0
  228. package/src/internal/README.md +3 -0
  229. package/src/internal/builtin-types.ts +93 -0
  230. package/src/internal/constants.ts +15 -0
  231. package/src/internal/decoders/jsonl.ts +48 -0
  232. package/src/internal/decoders/line.ts +135 -0
  233. package/src/internal/detect-platform.ts +196 -0
  234. package/src/internal/errors.ts +33 -0
  235. package/src/internal/headers.ts +99 -0
  236. package/src/internal/parse.ts +90 -0
  237. package/src/internal/qs/LICENSE.md +13 -0
  238. package/src/internal/qs/README.md +3 -0
  239. package/src/internal/qs/formats.ts +10 -0
  240. package/src/internal/qs/index.ts +13 -0
  241. package/src/internal/qs/stringify.ts +385 -0
  242. package/src/internal/qs/types.ts +71 -0
  243. package/src/internal/qs/utils.ts +265 -0
  244. package/src/internal/request-options.ts +93 -0
  245. package/src/internal/shim-types.ts +26 -0
  246. package/src/internal/shims.ts +107 -0
  247. package/src/internal/stream-utils.ts +32 -0
  248. package/src/internal/to-file.ts +159 -0
  249. package/src/internal/types.ts +93 -0
  250. package/src/internal/uploads.ts +204 -0
  251. package/src/internal/utils/base64.ts +40 -0
  252. package/src/internal/utils/bytes.ts +32 -0
  253. package/src/internal/utils/env.ts +18 -0
  254. package/src/internal/utils/log.ts +128 -0
  255. package/src/internal/utils/path.ts +88 -0
  256. package/src/internal/utils/query.ts +7 -0
  257. package/src/internal/utils/sleep.ts +3 -0
  258. package/src/internal/utils/time.ts +4 -0
  259. package/src/internal/utils/uuid.ts +17 -0
  260. package/src/internal/utils/values.ts +112 -0
  261. package/src/internal/utils.ts +9 -0
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadableStreamToAsyncIterable = ReadableStreamToAsyncIterable;
4
+ /**
5
+ * Most browsers don't yet have async iterable support for ReadableStream,
6
+ * and Node has a very different way of reading bytes from its "ReadableStream".
7
+ *
8
+ * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
9
+ */
10
+ function ReadableStreamToAsyncIterable(stream) {
11
+ if (stream[Symbol.asyncIterator])
12
+ return stream;
13
+ const reader = stream.getReader();
14
+ return {
15
+ async next() {
16
+ try {
17
+ const result = await reader.read();
18
+ if (result?.done)
19
+ reader.releaseLock(); // release lock when stream becomes closed
20
+ return result;
21
+ }
22
+ catch (e) {
23
+ reader.releaseLock(); // release lock when stream becomes errored
24
+ throw e;
25
+ }
26
+ },
27
+ async return() {
28
+ const cancelPromise = reader.cancel();
29
+ reader.releaseLock();
30
+ await cancelPromise;
31
+ return { done: true, value: undefined };
32
+ },
33
+ [Symbol.asyncIterator]() {
34
+ return this;
35
+ },
36
+ };
37
+ }
38
+ //# sourceMappingURL=stream-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../src/internal/stream-utils.ts"],"names":[],"mappings":";;AAMA,sEAyBC;AA/BD;;;;;GAKG;AACH,SAAgB,6BAA6B,CAAI,MAAW;IAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,IAAI;oBAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,0CAA0C;gBAClF,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,2CAA2C;gBACjE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,aAAa,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Most browsers don't yet have async iterable support for ReadableStream,
3
+ * and Node has a very different way of reading bytes from its "ReadableStream".
4
+ *
5
+ * This polyfill was pulled from https://github.com/MattiasBuelens/web-streams-polyfill/pull/122#issuecomment-1627354490
6
+ */
7
+ export function ReadableStreamToAsyncIterable(stream) {
8
+ if (stream[Symbol.asyncIterator])
9
+ return stream;
10
+ const reader = stream.getReader();
11
+ return {
12
+ async next() {
13
+ try {
14
+ const result = await reader.read();
15
+ if (result?.done)
16
+ reader.releaseLock(); // release lock when stream becomes closed
17
+ return result;
18
+ }
19
+ catch (e) {
20
+ reader.releaseLock(); // release lock when stream becomes errored
21
+ throw e;
22
+ }
23
+ },
24
+ async return() {
25
+ const cancelPromise = reader.cancel();
26
+ reader.releaseLock();
27
+ await cancelPromise;
28
+ return { done: true, value: undefined };
29
+ },
30
+ [Symbol.asyncIterator]() {
31
+ return this;
32
+ },
33
+ };
34
+ }
35
+ //# sourceMappingURL=stream-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-utils.mjs","sourceRoot":"","sources":["../src/internal/stream-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAAI,MAAW;IAC1D,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QAAE,OAAO,MAAM,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,OAAO;QACL,KAAK,CAAC,IAAI;YACR,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnC,IAAI,MAAM,EAAE,IAAI;oBAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,0CAA0C;gBAClF,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,2CAA2C;gBACjE,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;QACD,KAAK,CAAC,MAAM;YACV,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;YACtC,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,aAAa,CAAC;YACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,CAAC;QACD,CAAC,MAAM,CAAC,aAAa,CAAC;YACpB,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { FilePropertyBag } from './builtin-types';
2
+ type BlobLikePart = string | ArrayBuffer | ArrayBufferView | BlobLike | DataView;
3
+ /**
4
+ * Intended to match DOM Blob, node-fetch Blob, node:buffer Blob, etc.
5
+ * Don't add arrayBuffer here, node-fetch doesn't have it
6
+ */
7
+ interface BlobLike {
8
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/size) */
9
+ readonly size: number;
10
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/type) */
11
+ readonly type: string;
12
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/text) */
13
+ text(): Promise<string>;
14
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Blob/slice) */
15
+ slice(start?: number, end?: number): BlobLike;
16
+ }
17
+ /**
18
+ * Intended to match DOM File, node:buffer File, undici File, etc.
19
+ */
20
+ interface FileLike extends BlobLike {
21
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/lastModified) */
22
+ readonly lastModified: number;
23
+ /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/File/name) */
24
+ readonly name?: string | undefined;
25
+ }
26
+ /**
27
+ * Intended to match DOM Response, node-fetch Response, undici Response, etc.
28
+ */
29
+ export interface ResponseLike {
30
+ url: string;
31
+ blob(): Promise<BlobLike>;
32
+ }
33
+ export type ToFileInput = FileLike | ResponseLike | Exclude<BlobLikePart, string> | AsyncIterable<BlobLikePart>;
34
+ /**
35
+ * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats
36
+ * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts
37
+ * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible
38
+ * @param {Object=} options additional properties
39
+ * @param {string=} options.type the MIME type of the content
40
+ * @param {number=} options.lastModified the last modified timestamp
41
+ * @returns a {@link File} with the given properties
42
+ */
43
+ export declare function toFile(value: ToFileInput | PromiseLike<ToFileInput>, name?: string | null | undefined, options?: FilePropertyBag | undefined): Promise<File>;
44
+ export {};
45
+ //# sourceMappingURL=to-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-file.d.ts","sourceRoot":"","sources":["../src/internal/to-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvD,KAAK,YAAY,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjF;;;GAGG;AACH,UAAU,QAAQ;IAChB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxB,6EAA6E;IAC7E,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC/C;AAcD;;GAEG;AACH,UAAU,QAAS,SAAQ,QAAQ;IACjC,oFAAoF;IACpF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAYD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC3B;AAQD,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,YAAY,GACZ,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,GAC7B,aAAa,CAAC,YAAY,CAAC,CAAC;AAEhC;;;;;;;;GAQG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,EAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,CAAC,EAAE,eAAe,GAAG,SAAS,GACpC,OAAO,CAAC,IAAI,CAAC,CAsCf"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toFile = toFile;
4
+ const uploads_1 = require("./uploads.js");
5
+ const uploads_2 = require("./uploads.js");
6
+ /**
7
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
8
+ */
9
+ const isBlobLike = (value) => value != null &&
10
+ typeof value === 'object' &&
11
+ typeof value.size === 'number' &&
12
+ typeof value.type === 'string' &&
13
+ typeof value.text === 'function' &&
14
+ typeof value.slice === 'function' &&
15
+ typeof value.arrayBuffer === 'function';
16
+ /**
17
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
18
+ */
19
+ const isFileLike = (value) => value != null &&
20
+ typeof value === 'object' &&
21
+ typeof value.name === 'string' &&
22
+ typeof value.lastModified === 'number' &&
23
+ isBlobLike(value);
24
+ const isResponseLike = (value) => value != null &&
25
+ typeof value === 'object' &&
26
+ typeof value.url === 'string' &&
27
+ typeof value.blob === 'function';
28
+ /**
29
+ * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats
30
+ * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts
31
+ * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible
32
+ * @param {Object=} options additional properties
33
+ * @param {string=} options.type the MIME type of the content
34
+ * @param {number=} options.lastModified the last modified timestamp
35
+ * @returns a {@link File} with the given properties
36
+ */
37
+ async function toFile(value, name, options) {
38
+ (0, uploads_2.checkFileSupport)();
39
+ // If it's a promise, resolve it.
40
+ value = await value;
41
+ name || (name = (0, uploads_1.getName)(value, true));
42
+ // If we've been given a `File` we don't need to do anything if the name / options
43
+ // have not been customised.
44
+ if (isFileLike(value)) {
45
+ if (value instanceof File && name == null && options == null) {
46
+ return value;
47
+ }
48
+ return (0, uploads_1.makeFile)([await value.arrayBuffer()], name ?? value.name, {
49
+ type: value.type,
50
+ lastModified: value.lastModified,
51
+ ...options,
52
+ });
53
+ }
54
+ if (isResponseLike(value)) {
55
+ const blob = await value.blob();
56
+ name || (name = new URL(value.url).pathname.split(/[\\/]/).pop());
57
+ return (0, uploads_1.makeFile)(await getBytes(blob), name, options);
58
+ }
59
+ const parts = await getBytes(value);
60
+ if (!options?.type) {
61
+ const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);
62
+ if (typeof type === 'string') {
63
+ options = { ...options, type };
64
+ }
65
+ }
66
+ return (0, uploads_1.makeFile)(parts, name, options);
67
+ }
68
+ async function getBytes(value) {
69
+ let parts = [];
70
+ if (typeof value === 'string' ||
71
+ ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.
72
+ value instanceof ArrayBuffer) {
73
+ parts.push(value);
74
+ }
75
+ else if (isBlobLike(value)) {
76
+ parts.push(value instanceof Blob ? value : await value.arrayBuffer());
77
+ }
78
+ else if ((0, uploads_1.isAsyncIterable)(value) // includes Readable, ReadableStream, etc.
79
+ ) {
80
+ for await (const chunk of value) {
81
+ parts.push(...(await getBytes(chunk))); // TODO, consider validating?
82
+ }
83
+ }
84
+ else {
85
+ const constructor = value?.constructor?.name;
86
+ throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);
87
+ }
88
+ return parts;
89
+ }
90
+ function propsForError(value) {
91
+ if (typeof value !== 'object' || value === null)
92
+ return '';
93
+ const props = Object.getOwnPropertyNames(value);
94
+ return `; props: [${props.map((p) => `"${p}"`).join(', ')}]`;
95
+ }
96
+ //# sourceMappingURL=to-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-file.js","sourceRoot":"","sources":["../src/internal/to-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { getName, makeFile, isAsyncIterable } from "./uploads.mjs";
2
+ import { checkFileSupport } from "./uploads.mjs";
3
+ /**
4
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
5
+ */
6
+ const isBlobLike = (value) => value != null &&
7
+ typeof value === 'object' &&
8
+ typeof value.size === 'number' &&
9
+ typeof value.type === 'string' &&
10
+ typeof value.text === 'function' &&
11
+ typeof value.slice === 'function' &&
12
+ typeof value.arrayBuffer === 'function';
13
+ /**
14
+ * This check adds the arrayBuffer() method type because it is available and used at runtime
15
+ */
16
+ const isFileLike = (value) => value != null &&
17
+ typeof value === 'object' &&
18
+ typeof value.name === 'string' &&
19
+ typeof value.lastModified === 'number' &&
20
+ isBlobLike(value);
21
+ const isResponseLike = (value) => value != null &&
22
+ typeof value === 'object' &&
23
+ typeof value.url === 'string' &&
24
+ typeof value.blob === 'function';
25
+ /**
26
+ * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats
27
+ * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts
28
+ * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible
29
+ * @param {Object=} options additional properties
30
+ * @param {string=} options.type the MIME type of the content
31
+ * @param {number=} options.lastModified the last modified timestamp
32
+ * @returns a {@link File} with the given properties
33
+ */
34
+ export async function toFile(value, name, options) {
35
+ checkFileSupport();
36
+ // If it's a promise, resolve it.
37
+ value = await value;
38
+ name || (name = getName(value, true));
39
+ // If we've been given a `File` we don't need to do anything if the name / options
40
+ // have not been customised.
41
+ if (isFileLike(value)) {
42
+ if (value instanceof File && name == null && options == null) {
43
+ return value;
44
+ }
45
+ return makeFile([await value.arrayBuffer()], name ?? value.name, {
46
+ type: value.type,
47
+ lastModified: value.lastModified,
48
+ ...options,
49
+ });
50
+ }
51
+ if (isResponseLike(value)) {
52
+ const blob = await value.blob();
53
+ name || (name = new URL(value.url).pathname.split(/[\\/]/).pop());
54
+ return makeFile(await getBytes(blob), name, options);
55
+ }
56
+ const parts = await getBytes(value);
57
+ if (!options?.type) {
58
+ const type = parts.find((part) => typeof part === 'object' && 'type' in part && part.type);
59
+ if (typeof type === 'string') {
60
+ options = { ...options, type };
61
+ }
62
+ }
63
+ return makeFile(parts, name, options);
64
+ }
65
+ async function getBytes(value) {
66
+ let parts = [];
67
+ if (typeof value === 'string' ||
68
+ ArrayBuffer.isView(value) || // includes Uint8Array, Buffer, etc.
69
+ value instanceof ArrayBuffer) {
70
+ parts.push(value);
71
+ }
72
+ else if (isBlobLike(value)) {
73
+ parts.push(value instanceof Blob ? value : await value.arrayBuffer());
74
+ }
75
+ else if (isAsyncIterable(value) // includes Readable, ReadableStream, etc.
76
+ ) {
77
+ for await (const chunk of value) {
78
+ parts.push(...(await getBytes(chunk))); // TODO, consider validating?
79
+ }
80
+ }
81
+ else {
82
+ const constructor = value?.constructor?.name;
83
+ throw new Error(`Unexpected data type: ${typeof value}${constructor ? `; constructor: ${constructor}` : ''}${propsForError(value)}`);
84
+ }
85
+ return parts;
86
+ }
87
+ function propsForError(value) {
88
+ if (typeof value !== 'object' || value === null)
89
+ return '';
90
+ const props = Object.getOwnPropertyNames(value);
91
+ return `; props: [${props.map((p) => `"${p}"`).join(', ')}]`;
92
+ }
93
+ //# sourceMappingURL=to-file.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-file.mjs","sourceRoot":"","sources":["../src/internal/to-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ export type PromiseOrValue<T> = T | Promise<T>;
2
+ export type HTTPMethod = 'get' | 'post' | 'put' | 'patch' | 'delete';
3
+ export type KeysEnum<T> = {
4
+ [P in keyof Required<T>]: true;
5
+ };
6
+ export type FinalizedRequestInit = RequestInit & {
7
+ headers: Headers;
8
+ };
9
+ type NotAny<T> = [0] extends [1 & T] ? never : T;
10
+ /**
11
+ * Some environments overload the global fetch function, and Parameters<T> only gets the last signature.
12
+ */
13
+ type OverloadedParameters<T> = T extends ({
14
+ (...args: infer A): unknown;
15
+ (...args: infer B): unknown;
16
+ (...args: infer C): unknown;
17
+ (...args: infer D): unknown;
18
+ }) ? A | B | C | D : T extends ({
19
+ (...args: infer A): unknown;
20
+ (...args: infer B): unknown;
21
+ (...args: infer C): unknown;
22
+ }) ? A | B | C : T extends ({
23
+ (...args: infer A): unknown;
24
+ (...args: infer B): unknown;
25
+ }) ? A | B : T extends (...args: infer A) => unknown ? A : never;
26
+ /**
27
+ * These imports attempt to get types from a parent package's dependencies.
28
+ * Unresolved bare specifiers can trigger [automatic type acquisition][1] in some projects, which
29
+ * would cause typescript to show types not present at runtime. To avoid this, we import
30
+ * directly from parent node_modules folders.
31
+ *
32
+ * We need to check multiple levels because we don't know what directory structure we'll be in.
33
+ * For example, pnpm generates directories like this:
34
+ * ```
35
+ * node_modules
36
+ * ├── .pnpm
37
+ * │ └── pkg@1.0.0
38
+ * │ └── node_modules
39
+ * │ └── pkg
40
+ * │ └── internal
41
+ * │ └── types.d.ts
42
+ * ├── pkg -> .pnpm/pkg@1.0.0/node_modules/pkg
43
+ * └── undici
44
+ * ```
45
+ *
46
+ * [1]: https://www.typescriptlang.org/tsconfig/#typeAcquisition
47
+ */
48
+ /** @ts-ignore For users with \@types/node */ type UndiciTypesRequestInit = NotAny<import('undici-types').RequestInit> | NotAny<import('undici-types').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>;
49
+ /** @ts-ignore For users with undici */ type UndiciRequestInit = NotAny<import('undici').RequestInit> | NotAny<import('undici').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>;
50
+ /** @ts-ignore For users with \@types/bun */ type BunRequestInit = globalThis.FetchRequestInit;
51
+ /** @ts-ignore For users with node-fetch@2 */ type NodeFetch2RequestInit = NotAny<import('node-fetch').RequestInit> | NotAny<import('node-fetch').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>;
52
+ /** @ts-ignore For users with node-fetch@3, doesn't need file extension because types are at ./@types/index.d.ts */ type NodeFetch3RequestInit = NotAny<import('node-fetch.js').RequestInit> | NotAny<import('node-fetch.js').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>;
53
+ /** @ts-ignore For users who use Deno */ type FetchRequestInit = NonNullable<OverloadedParameters<typeof fetch>[1]>;
54
+ type RequestInits = NotAny<UndiciTypesRequestInit> | NotAny<UndiciRequestInit> | NotAny<BunRequestInit> | NotAny<NodeFetch2RequestInit> | NotAny<NodeFetch3RequestInit> | NotAny<RequestInit> | NotAny<FetchRequestInit>;
55
+ /**
56
+ * This type contains `RequestInit` options that may be available on the current runtime,
57
+ * including per-platform extensions like `dispatcher`, `agent`, `client`, etc.
58
+ */
59
+ export type MergedRequestInit = RequestInits &
60
+ /** We don't include these in the types as they'll be overridden for every request. */
61
+ Partial<Record<'body' | 'headers' | 'method' | 'signal', never>>;
62
+ export {};
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/internal/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/internal/types.ts"],"names":[],"mappings":";AAAA,sFAAsF"}
@@ -0,0 +1,3 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+ export {};
3
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/internal/types.ts"],"names":[],"mappings":"AAAA,sFAAsF"}
@@ -0,0 +1,42 @@
1
+ import { type RequestOptions } from './request-options';
2
+ import type { FilePropertyBag, Fetch } from './builtin-types';
3
+ import type { BaseAwt } from '../client';
4
+ export type BlobPart = string | ArrayBuffer | ArrayBufferView | Blob | DataView;
5
+ type FsReadStream = AsyncIterable<Uint8Array> & {
6
+ path: string | {
7
+ toString(): string;
8
+ };
9
+ };
10
+ interface BunFile extends Blob {
11
+ readonly name?: string | undefined;
12
+ }
13
+ export declare const checkFileSupport: () => void;
14
+ /**
15
+ * Typically, this is a native "File" class.
16
+ *
17
+ * We provide the {@link toFile} utility to convert a variety of objects
18
+ * into the File class.
19
+ *
20
+ * For convenience, you can also pass a fetch Response, or in Node,
21
+ * the result of fs.createReadStream().
22
+ */
23
+ export type Uploadable = File | Response | FsReadStream | BunFile;
24
+ /**
25
+ * Construct a `File` instance. This is used to ensure a helpful error is thrown
26
+ * for environments that don't define a global `File` yet.
27
+ */
28
+ export declare function makeFile(fileBits: BlobPart[], fileName: string | undefined, options?: FilePropertyBag): File;
29
+ export declare function getName(value: any, stripPath: boolean): string | undefined;
30
+ export declare const isAsyncIterable: (value: any) => value is AsyncIterable<any>;
31
+ /**
32
+ * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.
33
+ * Otherwise returns the request as is.
34
+ */
35
+ export declare const maybeMultipartFormRequestOptions: (opts: RequestOptions, fetch: BaseAwt | Fetch) => Promise<RequestOptions>;
36
+ type MultipartFormRequestOptions = Omit<RequestOptions, 'body'> & {
37
+ body: unknown;
38
+ };
39
+ export declare const multipartFormRequestOptions: (opts: MultipartFormRequestOptions, fetch: BaseAwt | Fetch, stripFilenames?: boolean) => Promise<RequestOptions>;
40
+ export declare const createForm: <T = Record<string, unknown>>(body: T | undefined, fetch: BaseAwt | Fetch, stripFilenames?: boolean) => Promise<FormData>;
41
+ export {};
42
+ //# sourceMappingURL=uploads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../src/internal/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,IAAI,GAAG,QAAQ,CAAC;AAChF,KAAK,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAG1F,UAAU,OAAQ,SAAQ,IAAI;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,eAAO,MAAM,gBAAgB,YAY5B,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;AAElE;;;GAGG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,QAAQ,EAAE,EACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,CAAC,EAAE,eAAe,GACxB,IAAI,CAGN;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAW1E;AAED,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,KAAG,KAAK,IAAI,aAAa,CAAC,GAAG,CAC0B,CAAC;AAElG;;;GAGG;AACH,eAAO,MAAM,gCAAgC,GAC3C,MAAM,cAAc,EACpB,OAAO,OAAO,GAAG,KAAK,KACrB,OAAO,CAAC,cAAc,CAIxB,CAAC;AAEF,KAAK,2BAA2B,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEpF,eAAO,MAAM,2BAA2B,GACtC,MAAM,2BAA2B,EACjC,OAAO,OAAO,GAAG,KAAK,EACtB,iBAAgB,OAAc,KAC7B,OAAO,CAAC,cAAc,CAExB,CAAC;AAkCF,eAAO,MAAM,UAAU,GAAU,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,MAAM,CAAC,GAAG,SAAS,EACnB,OAAO,OAAO,GAAG,KAAK,EACtB,iBAAgB,OAAc,KAC7B,OAAO,CAAC,QAAQ,CAWlB,CAAC"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createForm = exports.multipartFormRequestOptions = exports.maybeMultipartFormRequestOptions = exports.isAsyncIterable = exports.checkFileSupport = void 0;
4
+ exports.makeFile = makeFile;
5
+ exports.getName = getName;
6
+ const shims_1 = require("./shims.js");
7
+ const checkFileSupport = () => {
8
+ if (typeof File === 'undefined') {
9
+ const { process } = globalThis;
10
+ const isOldNode = typeof process?.versions?.node === 'string' && parseInt(process.versions.node.split('.')) < 20;
11
+ throw new Error('`File` is not defined as a global, which is required for file uploads.' +
12
+ (isOldNode ?
13
+ " Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`."
14
+ : ''));
15
+ }
16
+ };
17
+ exports.checkFileSupport = checkFileSupport;
18
+ /**
19
+ * Construct a `File` instance. This is used to ensure a helpful error is thrown
20
+ * for environments that don't define a global `File` yet.
21
+ */
22
+ function makeFile(fileBits, fileName, options) {
23
+ (0, exports.checkFileSupport)();
24
+ return new File(fileBits, fileName ?? 'unknown_file', options);
25
+ }
26
+ function getName(value, stripPath) {
27
+ const val = (typeof value === 'object' &&
28
+ value !== null &&
29
+ (('name' in value && value.name && String(value.name)) ||
30
+ ('url' in value && value.url && String(value.url)) ||
31
+ ('filename' in value && value.filename && String(value.filename)) ||
32
+ ('path' in value && value.path && String(value.path)))) ||
33
+ '';
34
+ return stripPath ? val.split(/[\\/]/).pop() || undefined : val;
35
+ }
36
+ const isAsyncIterable = (value) => value != null && typeof value === 'object' && typeof value[Symbol.asyncIterator] === 'function';
37
+ exports.isAsyncIterable = isAsyncIterable;
38
+ /**
39
+ * Returns a multipart/form-data request if any part of the given request body contains a File / Blob value.
40
+ * Otherwise returns the request as is.
41
+ */
42
+ const maybeMultipartFormRequestOptions = async (opts, fetch) => {
43
+ if (!hasUploadableValue(opts.body))
44
+ return opts;
45
+ return { ...opts, body: await (0, exports.createForm)(opts.body, fetch) };
46
+ };
47
+ exports.maybeMultipartFormRequestOptions = maybeMultipartFormRequestOptions;
48
+ const multipartFormRequestOptions = async (opts, fetch, stripFilenames = true) => {
49
+ return { ...opts, body: await (0, exports.createForm)(opts.body, fetch, stripFilenames) };
50
+ };
51
+ exports.multipartFormRequestOptions = multipartFormRequestOptions;
52
+ const supportsFormDataMap = /* @__PURE__ */ new WeakMap();
53
+ /**
54
+ * node-fetch doesn't support the global FormData object in recent node versions. Instead of sending
55
+ * properly-encoded form data, it just stringifies the object, resulting in a request body of "[object FormData]".
56
+ * This function detects if the fetch function provided supports the global FormData object to avoid
57
+ * confusing error messages later on.
58
+ */
59
+ function supportsFormData(fetchObject) {
60
+ const fetch = typeof fetchObject === 'function' ? fetchObject : fetchObject.fetch;
61
+ const cached = supportsFormDataMap.get(fetch);
62
+ if (cached)
63
+ return cached;
64
+ const promise = (async () => {
65
+ try {
66
+ const FetchResponse = ('Response' in fetch ?
67
+ fetch.Response
68
+ : (await fetch('data:,')).constructor);
69
+ const data = new FormData();
70
+ if (data.toString() === (await new FetchResponse(data).text())) {
71
+ return false;
72
+ }
73
+ return true;
74
+ }
75
+ catch {
76
+ // avoid false negatives
77
+ return true;
78
+ }
79
+ })();
80
+ supportsFormDataMap.set(fetch, promise);
81
+ return promise;
82
+ }
83
+ const createForm = async (body, fetch, stripFilenames = true) => {
84
+ if (!(await supportsFormData(fetch))) {
85
+ throw new TypeError('The provided fetch function does not support file uploads with the current global FormData class.');
86
+ }
87
+ const form = new FormData();
88
+ await Promise.all(Object.entries(body || {}).map(([key, value]) => addFormValue(form, key, value, stripFilenames)));
89
+ return form;
90
+ };
91
+ exports.createForm = createForm;
92
+ // We check for Blob not File because Bun.File doesn't inherit from File,
93
+ // but they both inherit from Blob and have a `name` property at runtime.
94
+ const isNamedBlob = (value) => value instanceof Blob && 'name' in value;
95
+ const isUploadable = (value) => typeof value === 'object' &&
96
+ value !== null &&
97
+ (value instanceof Response || (0, exports.isAsyncIterable)(value) || isNamedBlob(value));
98
+ const hasUploadableValue = (value) => {
99
+ if (isUploadable(value))
100
+ return true;
101
+ if (Array.isArray(value))
102
+ return value.some(hasUploadableValue);
103
+ if (value && typeof value === 'object') {
104
+ for (const k in value) {
105
+ if (hasUploadableValue(value[k]))
106
+ return true;
107
+ }
108
+ }
109
+ return false;
110
+ };
111
+ const addFormValue = async (form, key, value, stripFilenames) => {
112
+ if (value === undefined)
113
+ return;
114
+ if (value == null) {
115
+ throw new TypeError(`Received null for "${key}"; to pass null in FormData, you must use the string 'null'`);
116
+ }
117
+ // TODO: make nested formats configurable
118
+ if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
119
+ form.append(key, String(value));
120
+ }
121
+ else if (value instanceof Response) {
122
+ let options = {};
123
+ const contentType = value.headers.get('Content-Type');
124
+ if (contentType) {
125
+ options = { type: contentType };
126
+ }
127
+ form.append(key, makeFile([await value.blob()], getName(value, stripFilenames), options));
128
+ }
129
+ else if ((0, exports.isAsyncIterable)(value)) {
130
+ form.append(key, makeFile([await new Response((0, shims_1.ReadableStreamFrom)(value)).blob()], getName(value, stripFilenames)));
131
+ }
132
+ else if (isNamedBlob(value)) {
133
+ form.append(key, makeFile([value], getName(value, stripFilenames), { type: value.type }));
134
+ }
135
+ else if (Array.isArray(value)) {
136
+ await Promise.all(value.map((entry) => addFormValue(form, key + '[]', entry, stripFilenames)));
137
+ }
138
+ else if (typeof value === 'object') {
139
+ await Promise.all(Object.entries(value).map(([name, prop]) => addFormValue(form, `${key}[${name}]`, prop, stripFilenames)));
140
+ }
141
+ else {
142
+ throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${value} instead`);
143
+ }
144
+ };
145
+ //# sourceMappingURL=uploads.js.map