@beignet/core 0.0.2 → 0.0.4

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 (360) hide show
  1. package/CHANGELOG.md +173 -0
  2. package/README.md +821 -30
  3. package/dist/application/index.d.ts +28 -2
  4. package/dist/application/index.d.ts.map +1 -1
  5. package/dist/application/index.js +140 -12
  6. package/dist/application/index.js.map +1 -1
  7. package/dist/client/client.d.ts +2 -2
  8. package/dist/client/client.d.ts.map +1 -1
  9. package/dist/client/client.js +136 -48
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/error-messages.d.ts +14 -0
  12. package/dist/client/error-messages.d.ts.map +1 -0
  13. package/dist/client/error-messages.js +23 -0
  14. package/dist/client/error-messages.js.map +1 -0
  15. package/dist/client/index.d.ts +8 -4
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/index.js +6 -2
  18. package/dist/client/index.js.map +1 -1
  19. package/dist/client/types.d.ts +35 -5
  20. package/dist/client/types.d.ts.map +1 -1
  21. package/dist/client-only.d.ts +8 -0
  22. package/dist/client-only.d.ts.map +1 -0
  23. package/dist/client-only.js +8 -0
  24. package/dist/client-only.js.map +1 -0
  25. package/dist/config/index.d.ts +5 -5
  26. package/dist/config/index.d.ts.map +1 -1
  27. package/dist/config/index.js +2 -2
  28. package/dist/config/index.js.map +1 -1
  29. package/dist/contracts/catalog-errors.d.ts +27 -0
  30. package/dist/contracts/catalog-errors.d.ts.map +1 -0
  31. package/dist/contracts/catalog-errors.js +69 -0
  32. package/dist/contracts/catalog-errors.js.map +1 -0
  33. package/dist/contracts/contract-builder.d.ts +15 -12
  34. package/dist/contracts/contract-builder.d.ts.map +1 -1
  35. package/dist/contracts/contract-builder.js +15 -41
  36. package/dist/contracts/contract-builder.js.map +1 -1
  37. package/dist/contracts/contract-group.d.ts +11 -8
  38. package/dist/contracts/contract-group.d.ts.map +1 -1
  39. package/dist/contracts/contract-group.js +13 -40
  40. package/dist/contracts/contract-group.js.map +1 -1
  41. package/dist/contracts/contract-like.d.ts +1 -1
  42. package/dist/contracts/contract-like.d.ts.map +1 -1
  43. package/dist/contracts/index.d.ts +13 -9
  44. package/dist/contracts/index.d.ts.map +1 -1
  45. package/dist/contracts/index.js +9 -5
  46. package/dist/contracts/index.js.map +1 -1
  47. package/dist/contracts/openapi-meta.d.ts +48 -0
  48. package/dist/contracts/openapi-meta.d.ts.map +1 -1
  49. package/dist/contracts/openapi-meta.js +3 -0
  50. package/dist/contracts/openapi-meta.js.map +1 -1
  51. package/dist/contracts/path-template.d.ts +1 -1
  52. package/dist/contracts/path-template.js +2 -2
  53. package/dist/contracts/path-template.js.map +1 -1
  54. package/dist/contracts/schema-shape.d.ts +37 -0
  55. package/dist/contracts/schema-shape.d.ts.map +1 -0
  56. package/dist/contracts/schema-shape.js +61 -0
  57. package/dist/contracts/schema-shape.js.map +1 -0
  58. package/dist/contracts/success-status.d.ts +32 -0
  59. package/dist/contracts/success-status.d.ts.map +1 -0
  60. package/dist/contracts/success-status.js +18 -0
  61. package/dist/contracts/success-status.js.map +1 -0
  62. package/dist/contracts/types.d.ts +25 -5
  63. package/dist/contracts/types.d.ts.map +1 -1
  64. package/dist/contracts/types.js.map +1 -1
  65. package/dist/contracts/utils.d.ts +1 -1
  66. package/dist/contracts/utils.d.ts.map +1 -1
  67. package/dist/contracts/utils.js +1 -1
  68. package/dist/contracts/utils.js.map +1 -1
  69. package/dist/domain/events.d.ts +1 -1
  70. package/dist/domain/events.d.ts.map +1 -1
  71. package/dist/domain/events.js +1 -1
  72. package/dist/domain/events.js.map +1 -1
  73. package/dist/domain/index.d.ts +3 -3
  74. package/dist/domain/index.d.ts.map +1 -1
  75. package/dist/domain/index.js +3 -3
  76. package/dist/domain/index.js.map +1 -1
  77. package/dist/errors/catalog.d.ts +9 -1
  78. package/dist/errors/catalog.d.ts.map +1 -1
  79. package/dist/errors/catalog.js +7 -1
  80. package/dist/errors/catalog.js.map +1 -1
  81. package/dist/errors/http.d.ts +10 -0
  82. package/dist/errors/http.d.ts.map +1 -1
  83. package/dist/errors/http.js +11 -1
  84. package/dist/errors/http.js.map +1 -1
  85. package/dist/errors/index.d.ts +4 -4
  86. package/dist/errors/index.d.ts.map +1 -1
  87. package/dist/errors/index.js +4 -4
  88. package/dist/errors/index.js.map +1 -1
  89. package/dist/errors/response.d.ts +4 -1
  90. package/dist/errors/response.d.ts.map +1 -1
  91. package/dist/errors/response.js.map +1 -1
  92. package/dist/events/index.d.ts +10 -12
  93. package/dist/events/index.d.ts.map +1 -1
  94. package/dist/events/index.js +10 -10
  95. package/dist/events/index.js.map +1 -1
  96. package/dist/idempotency/index.d.ts +5 -3
  97. package/dist/idempotency/index.d.ts.map +1 -1
  98. package/dist/idempotency/index.js.map +1 -1
  99. package/dist/jobs/index.d.ts +148 -16
  100. package/dist/jobs/index.d.ts.map +1 -1
  101. package/dist/jobs/index.js +174 -14
  102. package/dist/jobs/index.js.map +1 -1
  103. package/dist/notifications/index.d.ts +14 -16
  104. package/dist/notifications/index.d.ts.map +1 -1
  105. package/dist/notifications/index.js +14 -14
  106. package/dist/notifications/index.js.map +1 -1
  107. package/dist/openapi/index.d.ts +8 -3
  108. package/dist/openapi/index.d.ts.map +1 -1
  109. package/dist/openapi/index.js +41 -29
  110. package/dist/openapi/index.js.map +1 -1
  111. package/dist/openapi/schema-introspector.d.ts +37 -0
  112. package/dist/openapi/schema-introspector.d.ts.map +1 -1
  113. package/dist/openapi/schema-introspector.js +23 -17
  114. package/dist/openapi/schema-introspector.js.map +1 -1
  115. package/dist/outbox/index.d.ts +18 -4
  116. package/dist/outbox/index.d.ts.map +1 -1
  117. package/dist/outbox/index.js +104 -4
  118. package/dist/outbox/index.js.map +1 -1
  119. package/dist/ports/audit.d.ts +56 -10
  120. package/dist/ports/audit.d.ts.map +1 -1
  121. package/dist/ports/audit.js +71 -3
  122. package/dist/ports/audit.js.map +1 -1
  123. package/dist/ports/auth.d.ts +92 -0
  124. package/dist/ports/auth.d.ts.map +1 -1
  125. package/dist/ports/auth.js +92 -0
  126. package/dist/ports/auth.js.map +1 -1
  127. package/dist/ports/events.d.ts +2 -2
  128. package/dist/ports/events.d.ts.map +1 -1
  129. package/dist/ports/index.d.ts +62 -33
  130. package/dist/ports/index.d.ts.map +1 -1
  131. package/dist/ports/index.js +28 -34
  132. package/dist/ports/index.js.map +1 -1
  133. package/dist/ports/policy.d.ts +32 -3
  134. package/dist/ports/policy.d.ts.map +1 -1
  135. package/dist/ports/policy.js +13 -2
  136. package/dist/ports/policy.js.map +1 -1
  137. package/dist/ports/testing.d.ts +1030 -2
  138. package/dist/ports/testing.d.ts.map +1 -1
  139. package/dist/ports/testing.js +1031 -1
  140. package/dist/ports/testing.js.map +1 -1
  141. package/dist/ports/unbound.d.ts +21 -0
  142. package/dist/ports/unbound.d.ts.map +1 -0
  143. package/dist/ports/unbound.js +57 -0
  144. package/dist/ports/unbound.js.map +1 -0
  145. package/dist/ports/unit-of-work.d.ts +1 -1
  146. package/dist/ports/unit-of-work.d.ts.map +1 -1
  147. package/dist/ports/unit-of-work.js +1 -1
  148. package/dist/ports/unit-of-work.js.map +1 -1
  149. package/dist/providers/index.d.ts +3 -2
  150. package/dist/providers/index.d.ts.map +1 -1
  151. package/dist/providers/index.js +3 -2
  152. package/dist/providers/index.js.map +1 -1
  153. package/dist/providers/instrumentation.d.ts +46 -5
  154. package/dist/providers/instrumentation.d.ts.map +1 -1
  155. package/dist/providers/instrumentation.js +25 -6
  156. package/dist/providers/instrumentation.js.map +1 -1
  157. package/dist/providers/metadata.d.ts +39 -0
  158. package/dist/providers/metadata.d.ts.map +1 -0
  159. package/dist/providers/metadata.js +169 -0
  160. package/dist/providers/metadata.js.map +1 -0
  161. package/dist/providers/provider.d.ts +114 -9
  162. package/dist/providers/provider.d.ts.map +1 -1
  163. package/dist/providers/provider.js +3 -20
  164. package/dist/providers/provider.js.map +1 -1
  165. package/dist/schedules/index.d.ts +94 -13
  166. package/dist/schedules/index.d.ts.map +1 -1
  167. package/dist/schedules/index.js +66 -12
  168. package/dist/schedules/index.js.map +1 -1
  169. package/dist/server/audit-context.d.ts +29 -0
  170. package/dist/server/audit-context.d.ts.map +1 -0
  171. package/dist/server/audit-context.js +44 -0
  172. package/dist/server/audit-context.js.map +1 -0
  173. package/dist/server/context.d.ts +141 -0
  174. package/dist/server/context.d.ts.map +1 -0
  175. package/dist/server/context.js +39 -0
  176. package/dist/server/context.js.map +1 -0
  177. package/dist/server/contract-like.d.ts +1 -1
  178. package/dist/server/contract-like.d.ts.map +1 -1
  179. package/dist/server/contract-like.js +1 -1
  180. package/dist/server/contract-like.js.map +1 -1
  181. package/dist/server/health.d.ts +2 -2
  182. package/dist/server/health.d.ts.map +1 -1
  183. package/dist/server/hooks/auth.d.ts +89 -65
  184. package/dist/server/hooks/auth.d.ts.map +1 -1
  185. package/dist/server/hooks/auth.js +84 -55
  186. package/dist/server/hooks/auth.js.map +1 -1
  187. package/dist/server/hooks/cors.d.ts +1 -1
  188. package/dist/server/hooks/cors.d.ts.map +1 -1
  189. package/dist/server/hooks/errors.d.ts +2 -2
  190. package/dist/server/hooks/errors.d.ts.map +1 -1
  191. package/dist/server/hooks/errors.js +2 -2
  192. package/dist/server/hooks/errors.js.map +1 -1
  193. package/dist/server/hooks/idempotency.d.ts +78 -0
  194. package/dist/server/hooks/idempotency.d.ts.map +1 -0
  195. package/dist/server/hooks/idempotency.js +154 -0
  196. package/dist/server/hooks/idempotency.js.map +1 -0
  197. package/dist/server/hooks/index.d.ts +8 -7
  198. package/dist/server/hooks/index.d.ts.map +1 -1
  199. package/dist/server/hooks/index.js +6 -5
  200. package/dist/server/hooks/index.js.map +1 -1
  201. package/dist/server/hooks/logging.d.ts +2 -2
  202. package/dist/server/hooks/logging.d.ts.map +1 -1
  203. package/dist/server/hooks/logging.js +1 -1
  204. package/dist/server/hooks/logging.js.map +1 -1
  205. package/dist/server/hooks/rate-limit.d.ts +25 -7
  206. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  207. package/dist/server/hooks/rate-limit.js +47 -12
  208. package/dist/server/hooks/rate-limit.js.map +1 -1
  209. package/dist/server/hooks.d.ts +1 -1
  210. package/dist/server/hooks.d.ts.map +1 -1
  211. package/dist/server/hooks.js +1 -1
  212. package/dist/server/hooks.js.map +1 -1
  213. package/dist/server/http.d.ts +84 -6
  214. package/dist/server/http.d.ts.map +1 -1
  215. package/dist/server/index.d.ts +36 -12
  216. package/dist/server/index.d.ts.map +1 -1
  217. package/dist/server/index.js +24 -8
  218. package/dist/server/index.js.map +1 -1
  219. package/dist/server/instrumentation.d.ts +108 -0
  220. package/dist/server/instrumentation.d.ts.map +1 -0
  221. package/dist/server/instrumentation.js +297 -0
  222. package/dist/server/instrumentation.js.map +1 -0
  223. package/dist/server/openapi.d.ts +3 -3
  224. package/dist/server/openapi.d.ts.map +1 -1
  225. package/dist/server/openapi.js +1 -1
  226. package/dist/server/openapi.js.map +1 -1
  227. package/dist/server/providers/index.d.ts +3 -3
  228. package/dist/server/providers/index.d.ts.map +1 -1
  229. package/dist/server/providers/index.js +3 -3
  230. package/dist/server/providers/index.js.map +1 -1
  231. package/dist/server/providers/loadProviderConfig.d.ts +2 -2
  232. package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
  233. package/dist/server/providers/loadProviderConfig.js +2 -2
  234. package/dist/server/providers/loadProviderConfig.js.map +1 -1
  235. package/dist/server/request-context.d.ts +67 -0
  236. package/dist/server/request-context.d.ts.map +1 -0
  237. package/dist/server/request-context.js +79 -0
  238. package/dist/server/request-context.js.map +1 -0
  239. package/dist/server/server-context.d.ts +38 -0
  240. package/dist/server/server-context.d.ts.map +1 -0
  241. package/dist/server/server-context.js +38 -0
  242. package/dist/server/server-context.js.map +1 -0
  243. package/dist/server/server.d.ts +148 -35
  244. package/dist/server/server.d.ts.map +1 -1
  245. package/dist/server/server.js +482 -145
  246. package/dist/server/server.js.map +1 -1
  247. package/dist/server/types.d.ts +2 -2
  248. package/dist/server/types.d.ts.map +1 -1
  249. package/dist/server/types.js +2 -2
  250. package/dist/server/types.js.map +1 -1
  251. package/dist/server/use-case-route.d.ts +263 -0
  252. package/dist/server/use-case-route.d.ts.map +1 -0
  253. package/dist/server/use-case-route.js +77 -0
  254. package/dist/server/use-case-route.js.map +1 -0
  255. package/dist/server-only.d.ts +8 -0
  256. package/dist/server-only.d.ts.map +1 -0
  257. package/dist/server-only.js +8 -0
  258. package/dist/server-only.js.map +1 -0
  259. package/dist/tasks/index.d.ts +139 -0
  260. package/dist/tasks/index.d.ts.map +1 -0
  261. package/dist/tasks/index.js +98 -0
  262. package/dist/tasks/index.js.map +1 -0
  263. package/dist/testing/index.d.ts +611 -5
  264. package/dist/testing/index.d.ts.map +1 -1
  265. package/dist/testing/index.js +434 -4
  266. package/dist/testing/index.js.map +1 -1
  267. package/dist/tracing/index.d.ts +89 -0
  268. package/dist/tracing/index.d.ts.map +1 -0
  269. package/dist/tracing/index.js +101 -0
  270. package/dist/tracing/index.js.map +1 -0
  271. package/dist/uploads/client.d.ts +278 -0
  272. package/dist/uploads/client.d.ts.map +1 -0
  273. package/dist/uploads/client.js +428 -0
  274. package/dist/uploads/client.js.map +1 -0
  275. package/dist/uploads/index.d.ts +361 -0
  276. package/dist/uploads/index.d.ts.map +1 -0
  277. package/dist/uploads/index.js +543 -0
  278. package/dist/uploads/index.js.map +1 -0
  279. package/package.json +34 -3
  280. package/src/application/index.ts +193 -10
  281. package/src/client/client.ts +148 -150
  282. package/src/client/error-messages.ts +35 -0
  283. package/src/client/index.ts +12 -4
  284. package/src/client/types.ts +44 -5
  285. package/src/client-only.ts +7 -0
  286. package/src/config/index.ts +6 -6
  287. package/src/contracts/catalog-errors.ts +115 -0
  288. package/src/contracts/contract-builder.ts +39 -76
  289. package/src/contracts/contract-group.ts +33 -68
  290. package/src/contracts/contract-like.ts +1 -1
  291. package/src/contracts/index.ts +24 -11
  292. package/src/contracts/openapi-meta.ts +55 -0
  293. package/src/contracts/path-template.ts +2 -2
  294. package/src/contracts/schema-shape.ts +75 -0
  295. package/src/contracts/success-status.ts +68 -0
  296. package/src/contracts/types.ts +32 -5
  297. package/src/contracts/utils.ts +5 -2
  298. package/src/domain/events.ts +6 -2
  299. package/src/domain/index.ts +3 -3
  300. package/src/errors/catalog.ts +9 -1
  301. package/src/errors/http.ts +11 -1
  302. package/src/errors/index.ts +4 -4
  303. package/src/errors/response.ts +4 -1
  304. package/src/events/index.ts +12 -26
  305. package/src/idempotency/index.ts +5 -3
  306. package/src/jobs/index.ts +340 -29
  307. package/src/notifications/index.ts +17 -27
  308. package/src/openapi/index.ts +73 -38
  309. package/src/openapi/schema-introspector.ts +68 -17
  310. package/src/outbox/index.ts +151 -6
  311. package/src/ports/audit.ts +120 -11
  312. package/src/ports/auth.ts +132 -0
  313. package/src/ports/events.ts +2 -2
  314. package/src/ports/index.ts +104 -35
  315. package/src/ports/policy.ts +50 -3
  316. package/src/ports/testing.ts +2220 -33
  317. package/src/ports/unbound.ts +64 -0
  318. package/src/ports/unit-of-work.ts +6 -2
  319. package/src/providers/index.ts +16 -3
  320. package/src/providers/instrumentation.ts +93 -8
  321. package/src/providers/metadata.ts +234 -0
  322. package/src/providers/provider.ts +168 -9
  323. package/src/schedules/index.ts +173 -23
  324. package/src/server/audit-context.ts +45 -0
  325. package/src/server/context.ts +224 -0
  326. package/src/server/contract-like.ts +1 -1
  327. package/src/server/health.ts +2 -2
  328. package/src/server/hooks/auth.ts +175 -158
  329. package/src/server/hooks/cors.ts +1 -1
  330. package/src/server/hooks/errors.ts +7 -4
  331. package/src/server/hooks/idempotency.ts +263 -0
  332. package/src/server/hooks/index.ts +15 -12
  333. package/src/server/hooks/logging.ts +3 -3
  334. package/src/server/hooks/rate-limit.ts +85 -17
  335. package/src/server/hooks.ts +1 -1
  336. package/src/server/http.ts +112 -6
  337. package/src/server/index.ts +63 -12
  338. package/src/server/instrumentation.ts +470 -0
  339. package/src/server/openapi.ts +4 -4
  340. package/src/server/providers/index.ts +6 -3
  341. package/src/server/providers/loadProviderConfig.ts +4 -4
  342. package/src/server/request-context.ts +116 -0
  343. package/src/server/server-context.ts +44 -0
  344. package/src/server/server.ts +1045 -229
  345. package/src/server/types.ts +2 -2
  346. package/src/server/use-case-route.ts +430 -0
  347. package/src/server-only.ts +7 -0
  348. package/src/tasks/index.ts +275 -0
  349. package/src/testing/index.ts +1153 -6
  350. package/src/tracing/index.ts +176 -0
  351. package/src/uploads/client.ts +861 -0
  352. package/src/uploads/index.ts +1071 -0
  353. package/dist/ports/mailer.d.ts +0 -6
  354. package/dist/ports/mailer.d.ts.map +0 -1
  355. package/dist/ports/mailer.js +0 -2
  356. package/dist/ports/mailer.js.map +0 -1
  357. package/dist/ports/schedules.d.ts +0 -9
  358. package/dist/ports/schedules.d.ts.map +0 -1
  359. package/dist/ports/schedules.js +0 -2
  360. package/dist/ports/schedules.js.map +0 -1
@@ -0,0 +1,428 @@
1
+ /**
2
+ * Error thrown by upload client route requests or direct provider uploads.
3
+ */
4
+ export class UploadClientError extends Error {
5
+ /**
6
+ * Client operation that failed.
7
+ */
8
+ operation;
9
+ /**
10
+ * Upload route name involved in the failure.
11
+ */
12
+ uploadName;
13
+ /**
14
+ * HTTP status when a route or provider response was received.
15
+ */
16
+ status;
17
+ /**
18
+ * Machine-readable error code.
19
+ */
20
+ code;
21
+ /**
22
+ * Structured error details from the upload route, when available.
23
+ */
24
+ details;
25
+ /**
26
+ * Create an upload client error.
27
+ */
28
+ constructor(options) {
29
+ super(options.message, { cause: options.cause });
30
+ this.name = "UploadClientError";
31
+ this.operation = options.operation;
32
+ this.uploadName = options.uploadName;
33
+ this.status = options.status;
34
+ this.code = options.code;
35
+ this.details = options.details;
36
+ }
37
+ }
38
+ /**
39
+ * Create a typed browser upload client for a Beignet upload route.
40
+ */
41
+ export function createUploadClient(options = {}) {
42
+ const baseUrl = normalizeBaseUrl(options.baseUrl ?? "/api/uploads");
43
+ const fetchImpl = options.fetch ?? globalThis.fetch?.bind(globalThis);
44
+ if (!fetchImpl) {
45
+ throw new Error("createUploadClient requires a fetch implementation.");
46
+ }
47
+ async function routeHeaders(routeOptions, contentType) {
48
+ const headers = new Headers();
49
+ if (contentType)
50
+ headers.set("content-type", contentType);
51
+ const shared = await resolveHeaders(options.headers);
52
+ const local = await resolveHeaders(routeOptions?.headers);
53
+ mergeHeaders(headers, shared);
54
+ mergeHeaders(headers, local);
55
+ return headers;
56
+ }
57
+ function routeRequest(routeOptions) {
58
+ return {
59
+ ...options.request,
60
+ ...routeOptions?.request,
61
+ };
62
+ }
63
+ async function prepare(uploadName, prepareOptions) {
64
+ return requestJson({
65
+ fetchImpl,
66
+ url: actionUrl(baseUrl, uploadName, "prepare"),
67
+ operation: "prepare upload",
68
+ uploadName,
69
+ init: {
70
+ ...routeRequest(prepareOptions),
71
+ method: "POST",
72
+ headers: await routeHeaders(prepareOptions, "application/json"),
73
+ signal: prepareOptions.signal,
74
+ body: JSON.stringify({
75
+ metadata: prepareOptions.metadata,
76
+ files: prepareOptions.files.map(fileIntentFromFile),
77
+ }),
78
+ },
79
+ });
80
+ }
81
+ async function complete(uploadName, completeOptions) {
82
+ return requestJson({
83
+ fetchImpl,
84
+ url: actionUrl(baseUrl, uploadName, "complete"),
85
+ operation: "complete upload",
86
+ uploadName,
87
+ init: {
88
+ ...routeRequest(completeOptions),
89
+ method: "POST",
90
+ headers: await routeHeaders(completeOptions, "application/json"),
91
+ signal: completeOptions.signal,
92
+ body: JSON.stringify({
93
+ metadata: completeOptions.metadata,
94
+ files: completeOptions.files.map(completeFileInput),
95
+ }),
96
+ },
97
+ });
98
+ }
99
+ async function server(uploadName, uploadOptions) {
100
+ const formData = new FormData();
101
+ formData.set("metadata", JSON.stringify(uploadOptions.metadata));
102
+ uploadOptions.files.forEach((file) => {
103
+ formData.append("file", file);
104
+ });
105
+ uploadOptions.files.forEach((file, index) => {
106
+ uploadOptions.onFileBegin?.({
107
+ file,
108
+ fileName: file.name,
109
+ index,
110
+ });
111
+ });
112
+ const result = await requestJson({
113
+ fetchImpl,
114
+ url: actionUrl(baseUrl, uploadName, "upload"),
115
+ operation: "server upload",
116
+ uploadName,
117
+ init: {
118
+ ...routeRequest(uploadOptions),
119
+ method: "POST",
120
+ headers: await routeHeaders(uploadOptions),
121
+ signal: uploadOptions.signal,
122
+ body: formData,
123
+ },
124
+ });
125
+ uploadOptions.files.forEach((file, index) => {
126
+ uploadOptions.onProgress?.({
127
+ file,
128
+ fileName: file.name,
129
+ index,
130
+ loaded: file.size,
131
+ total: file.size,
132
+ progress: 1,
133
+ });
134
+ });
135
+ return result;
136
+ }
137
+ async function direct(uploadName, uploadOptions) {
138
+ const prepared = await prepare(uploadName, uploadOptions);
139
+ return directFromPrepared(uploadName, uploadOptions, prepared);
140
+ }
141
+ async function directFromPrepared(uploadName, uploadOptions, prepared) {
142
+ if (prepared.mode !== "direct") {
143
+ throw new UploadClientError({
144
+ operation: "direct upload",
145
+ uploadName,
146
+ code: "DIRECT_UPLOAD_UNAVAILABLE",
147
+ message: `Upload "${uploadName}" did not return direct upload instructions.`,
148
+ });
149
+ }
150
+ await Promise.all(prepared.files.map((preparedFile, index) => uploadDirectFile({
151
+ fetchImpl,
152
+ uploadName,
153
+ preparedFile,
154
+ file: uploadOptions.files[index],
155
+ index,
156
+ signal: uploadOptions.signal,
157
+ onFileBegin: uploadOptions.onFileBegin,
158
+ onProgress: uploadOptions.onProgress,
159
+ })));
160
+ return complete(uploadName, {
161
+ metadata: uploadOptions.metadata,
162
+ files: prepared.files,
163
+ headers: uploadOptions.headers,
164
+ request: uploadOptions.request,
165
+ signal: uploadOptions.signal,
166
+ });
167
+ }
168
+ async function upload(uploadName, uploadOptions) {
169
+ const strategy = uploadOptions.strategy ?? "auto";
170
+ if (strategy === "server")
171
+ return server(uploadName, uploadOptions);
172
+ if (strategy === "direct")
173
+ return direct(uploadName, uploadOptions);
174
+ const prepared = await prepare(uploadName, uploadOptions);
175
+ if (prepared.mode === "direct") {
176
+ return directFromPrepared(uploadName, uploadOptions, prepared);
177
+ }
178
+ return server(uploadName, uploadOptions);
179
+ }
180
+ function constraints(uploadName) {
181
+ return options.manifest?.find((entry) => entry.name === uploadName)?.file;
182
+ }
183
+ function accept(uploadName) {
184
+ return constraints(uploadName)?.contentTypes?.join(",");
185
+ }
186
+ return {
187
+ prepare,
188
+ complete,
189
+ server,
190
+ direct,
191
+ upload,
192
+ constraints,
193
+ accept,
194
+ };
195
+ }
196
+ function fileIntentFromFile(file) {
197
+ return {
198
+ name: file.name,
199
+ contentType: file.type || "application/octet-stream",
200
+ size: file.size,
201
+ };
202
+ }
203
+ function completeFileInput(file) {
204
+ return {
205
+ name: file.name,
206
+ contentType: file.contentType,
207
+ size: file.size,
208
+ uploadId: file.uploadId,
209
+ key: file.key,
210
+ };
211
+ }
212
+ function normalizeBaseUrl(baseUrl) {
213
+ return baseUrl.replace(/\/+$/, "");
214
+ }
215
+ function actionUrl(baseUrl, uploadName, action) {
216
+ return `${baseUrl}/${encodeURIComponent(uploadName)}/${action}`;
217
+ }
218
+ async function resolveHeaders(headers) {
219
+ return typeof headers === "function" ? headers() : headers;
220
+ }
221
+ function mergeHeaders(target, source) {
222
+ if (!source)
223
+ return;
224
+ new Headers(source).forEach((value, key) => {
225
+ target.set(key, value);
226
+ });
227
+ }
228
+ async function requestJson(args) {
229
+ let response;
230
+ try {
231
+ response = await args.fetchImpl(args.url, args.init);
232
+ }
233
+ catch (error) {
234
+ throw new UploadClientError({
235
+ operation: args.operation,
236
+ uploadName: args.uploadName,
237
+ code: "UPLOAD_REQUEST_FAILED",
238
+ message: `Failed to ${args.operation} "${args.uploadName}".`,
239
+ cause: error,
240
+ });
241
+ }
242
+ const body = await parseJsonBody(response, args);
243
+ if (!response.ok) {
244
+ const envelope = uploadErrorEnvelope(body);
245
+ throw new UploadClientError({
246
+ operation: args.operation,
247
+ uploadName: args.uploadName,
248
+ status: response.status,
249
+ code: envelope?.code ?? "UPLOAD_REQUEST_FAILED",
250
+ message: envelope?.message ??
251
+ `Failed to ${args.operation} "${args.uploadName}" (${response.status}).`,
252
+ details: envelope?.details,
253
+ });
254
+ }
255
+ return body;
256
+ }
257
+ async function parseJsonBody(response, args) {
258
+ const text = await response.text();
259
+ if (!text)
260
+ return undefined;
261
+ try {
262
+ return JSON.parse(text);
263
+ }
264
+ catch (error) {
265
+ throw new UploadClientError({
266
+ operation: args.operation,
267
+ uploadName: args.uploadName,
268
+ status: response.status,
269
+ code: "INVALID_UPLOAD_RESPONSE",
270
+ message: `Failed to parse upload response for "${args.uploadName}".`,
271
+ cause: error,
272
+ });
273
+ }
274
+ }
275
+ function uploadErrorEnvelope(body) {
276
+ if (typeof body !== "object" || body === null || !("error" in body)) {
277
+ return undefined;
278
+ }
279
+ const error = body.error;
280
+ if (typeof error !== "object" || error === null)
281
+ return undefined;
282
+ const errorRecord = error;
283
+ return {
284
+ code: typeof errorRecord.code === "string" ? errorRecord.code : undefined,
285
+ message: typeof errorRecord.message === "string" ? errorRecord.message : undefined,
286
+ ...("details" in errorRecord ? { details: errorRecord.details } : {}),
287
+ };
288
+ }
289
+ async function uploadDirectFile(args) {
290
+ const file = args.file;
291
+ if (!file) {
292
+ throw new UploadClientError({
293
+ operation: "direct upload",
294
+ uploadName: args.uploadName,
295
+ code: "INVALID_UPLOAD_FILE",
296
+ message: `Missing browser file for prepared upload "${args.preparedFile.key}".`,
297
+ });
298
+ }
299
+ if (!args.preparedFile.direct) {
300
+ throw new UploadClientError({
301
+ operation: "direct upload",
302
+ uploadName: args.uploadName,
303
+ code: "DIRECT_UPLOAD_UNAVAILABLE",
304
+ message: `Upload "${args.uploadName}" did not include direct instructions for "${args.preparedFile.name}".`,
305
+ });
306
+ }
307
+ args.onFileBegin?.({
308
+ file,
309
+ fileName: file.name,
310
+ index: args.index,
311
+ uploadId: args.preparedFile.uploadId,
312
+ key: args.preparedFile.key,
313
+ });
314
+ if (args.onProgress && typeof XMLHttpRequest !== "undefined") {
315
+ await uploadWithXhr({
316
+ uploadName: args.uploadName,
317
+ preparedFile: args.preparedFile,
318
+ file,
319
+ index: args.index,
320
+ signal: args.signal,
321
+ onProgress: args.onProgress,
322
+ });
323
+ return;
324
+ }
325
+ const response = await args.fetchImpl(args.preparedFile.direct.url, {
326
+ method: args.preparedFile.direct.method,
327
+ headers: args.preparedFile.direct.headers,
328
+ signal: args.signal,
329
+ body: file,
330
+ });
331
+ if (!response.ok) {
332
+ throw new UploadClientError({
333
+ operation: "direct upload",
334
+ uploadName: args.uploadName,
335
+ status: response.status,
336
+ code: "DIRECT_UPLOAD_FAILED",
337
+ message: `Direct upload failed for "${args.preparedFile.name}" (${response.status}).`,
338
+ });
339
+ }
340
+ args.onProgress?.({
341
+ file,
342
+ fileName: file.name,
343
+ index: args.index,
344
+ uploadId: args.preparedFile.uploadId,
345
+ key: args.preparedFile.key,
346
+ loaded: file.size,
347
+ total: file.size,
348
+ progress: 1,
349
+ });
350
+ }
351
+ function uploadWithXhr(args) {
352
+ return new Promise((resolve, reject) => {
353
+ const xhr = new XMLHttpRequest();
354
+ const direct = args.preparedFile.direct;
355
+ if (!direct) {
356
+ reject(new UploadClientError({
357
+ operation: "direct upload",
358
+ uploadName: args.uploadName,
359
+ code: "DIRECT_UPLOAD_UNAVAILABLE",
360
+ message: `Upload "${args.uploadName}" did not include direct instructions for "${args.preparedFile.name}".`,
361
+ }));
362
+ return;
363
+ }
364
+ const abort = () => xhr.abort();
365
+ args.signal?.addEventListener("abort", abort, { once: true });
366
+ xhr.upload.onprogress = (event) => {
367
+ const total = event.lengthComputable ? event.total : args.file.size;
368
+ args.onProgress?.({
369
+ file: args.file,
370
+ fileName: args.file.name,
371
+ index: args.index,
372
+ uploadId: args.preparedFile.uploadId,
373
+ key: args.preparedFile.key,
374
+ loaded: event.loaded,
375
+ total,
376
+ progress: total > 0 ? event.loaded / total : 0,
377
+ });
378
+ };
379
+ xhr.onload = () => {
380
+ args.signal?.removeEventListener("abort", abort);
381
+ if (xhr.status >= 200 && xhr.status < 300) {
382
+ args.onProgress?.({
383
+ file: args.file,
384
+ fileName: args.file.name,
385
+ index: args.index,
386
+ uploadId: args.preparedFile.uploadId,
387
+ key: args.preparedFile.key,
388
+ loaded: args.file.size,
389
+ total: args.file.size,
390
+ progress: 1,
391
+ });
392
+ resolve();
393
+ return;
394
+ }
395
+ reject(new UploadClientError({
396
+ operation: "direct upload",
397
+ uploadName: args.uploadName,
398
+ status: xhr.status,
399
+ code: "DIRECT_UPLOAD_FAILED",
400
+ message: `Direct upload failed for "${args.preparedFile.name}" (${xhr.status}).`,
401
+ }));
402
+ };
403
+ xhr.onerror = () => {
404
+ args.signal?.removeEventListener("abort", abort);
405
+ reject(new UploadClientError({
406
+ operation: "direct upload",
407
+ uploadName: args.uploadName,
408
+ code: "DIRECT_UPLOAD_FAILED",
409
+ message: `Direct upload failed for "${args.preparedFile.name}".`,
410
+ }));
411
+ };
412
+ xhr.onabort = () => {
413
+ args.signal?.removeEventListener("abort", abort);
414
+ reject(new UploadClientError({
415
+ operation: "direct upload",
416
+ uploadName: args.uploadName,
417
+ code: "DIRECT_UPLOAD_ABORTED",
418
+ message: `Direct upload was aborted for "${args.preparedFile.name}".`,
419
+ }));
420
+ };
421
+ xhr.open(direct.method, direct.url);
422
+ for (const [key, value] of Object.entries(direct.headers ?? {})) {
423
+ xhr.setRequestHeader(key, value);
424
+ }
425
+ xhr.send(args.file);
426
+ });
427
+ }
428
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/uploads/client.ts"],"names":[],"mappings":"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"}