@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,543 @@
1
+ import { createProviderInstrumentation } from "../providers/index.js";
2
+ /**
3
+ * Error thrown for expected upload failures.
4
+ */
5
+ export class UploadError extends Error {
6
+ code;
7
+ status;
8
+ details;
9
+ constructor(args) {
10
+ super(args.message);
11
+ this.name = "UploadError";
12
+ this.code = args.code;
13
+ this.status = args.status ?? 400;
14
+ this.details = args.details;
15
+ }
16
+ }
17
+ /**
18
+ * Define a typed upload workflow.
19
+ */
20
+ export function defineUpload(name, options) {
21
+ return {
22
+ kind: "upload",
23
+ name,
24
+ metadata: options.metadata,
25
+ file: {
26
+ ...options.file,
27
+ maxFiles: options.file.maxFiles ?? 1,
28
+ visibility: options.file.visibility ?? "private",
29
+ },
30
+ ...(options.description !== undefined
31
+ ? { description: options.description }
32
+ : {}),
33
+ ...(options.authorize ? { authorize: options.authorize } : {}),
34
+ key: options.key,
35
+ ...(options.storageMetadata
36
+ ? { storageMetadata: options.storageMetadata }
37
+ : {}),
38
+ ...(options.onComplete ? { onComplete: options.onComplete } : {}),
39
+ };
40
+ }
41
+ /**
42
+ * Define a nested upload registry while preserving upload names and metadata
43
+ * types for client code.
44
+ */
45
+ export function defineUploads(uploads) {
46
+ return uploads;
47
+ }
48
+ /**
49
+ * Flatten a nested upload registry into the list expected by
50
+ * `createUploadRouter(...)`.
51
+ */
52
+ export function uploadsFromRegistry(uploads) {
53
+ if (Array.isArray(uploads))
54
+ return [...uploads];
55
+ const result = [];
56
+ for (const value of Object.values(uploads)) {
57
+ if (isUploadDef(value)) {
58
+ result.push(value);
59
+ }
60
+ else {
61
+ result.push(...uploadsFromRegistry(value));
62
+ }
63
+ }
64
+ return result;
65
+ }
66
+ /**
67
+ * Create client-safe upload metadata for browser helpers.
68
+ */
69
+ export function createUploadManifest(uploads) {
70
+ return uploadsFromRegistry(uploads).map((upload) => ({
71
+ name: upload.name,
72
+ ...(upload.description !== undefined
73
+ ? { description: upload.description }
74
+ : {}),
75
+ file: upload.file,
76
+ }));
77
+ }
78
+ /**
79
+ * Create deterministic direct upload instructions for tests.
80
+ */
81
+ export function createMemoryUploadSigner(options = {}) {
82
+ const baseUrl = options.baseUrl ?? "https://uploads.beignet.test";
83
+ const expiresAt = options.expiresAt ?? "2100-01-01T00:00:00.000Z";
84
+ return {
85
+ sign(args) {
86
+ return {
87
+ method: "PUT",
88
+ url: `${baseUrl}/${encodeURIComponent(args.key)}`,
89
+ headers: {
90
+ "content-type": args.file.contentType,
91
+ },
92
+ expiresAt,
93
+ };
94
+ },
95
+ };
96
+ }
97
+ /**
98
+ * Create a framework-neutral upload router.
99
+ */
100
+ export function createUploadRouter(options) {
101
+ const uploads = new Map(options.uploads.map((upload) => [upload.name, upload]));
102
+ const id = options.id ?? randomUploadId;
103
+ const instrumentation = createProviderInstrumentation(options.instrumentation, {
104
+ providerName: "uploads",
105
+ watcher: "uploads",
106
+ });
107
+ async function resolveCtx() {
108
+ return typeof options.ctx === "function"
109
+ ? options.ctx()
110
+ : options.ctx;
111
+ }
112
+ function findUpload(name) {
113
+ const upload = uploads.get(name);
114
+ if (!upload) {
115
+ throw new UploadError({
116
+ code: "UPLOAD_NOT_FOUND",
117
+ status: 404,
118
+ message: `Upload "${name}" is not registered.`,
119
+ });
120
+ }
121
+ return upload;
122
+ }
123
+ async function prepare(uploadName, input) {
124
+ const startedAt = Date.now();
125
+ instrumentation.custom({
126
+ name: "upload.prepare.started",
127
+ label: "Upload prepare started",
128
+ summary: uploadName,
129
+ });
130
+ try {
131
+ const upload = findUpload(uploadName);
132
+ const ctx = await resolveCtx();
133
+ const metadata = await parseMetadata(upload, input.metadata);
134
+ assertFiles(upload, input.files);
135
+ const files = [];
136
+ for (const file of input.files) {
137
+ const uploadId = id();
138
+ await assertAuthorized(upload, { ctx, metadata, file, uploadId });
139
+ const key = await upload.key({ ctx, metadata, file, uploadId });
140
+ const storageMetadata = (await upload.storageMetadata?.({ ctx, metadata, file, uploadId })) ??
141
+ {};
142
+ const prepared = {
143
+ ...file,
144
+ uploadId,
145
+ key,
146
+ };
147
+ if (options.signer) {
148
+ prepared.direct = await options.signer.sign({
149
+ uploadName,
150
+ uploadId,
151
+ key,
152
+ file,
153
+ metadata,
154
+ storage: {
155
+ visibility: upload.file.visibility ?? "private",
156
+ ...(upload.file.cacheControl !== undefined
157
+ ? { cacheControl: upload.file.cacheControl }
158
+ : {}),
159
+ metadata: storageMetadata,
160
+ },
161
+ });
162
+ }
163
+ files.push(prepared);
164
+ }
165
+ instrumentation.custom({
166
+ name: "upload.prepare.completed",
167
+ label: "Upload prepare completed",
168
+ summary: `${uploadName} (${files.length} file${files.length === 1 ? "" : "s"})`,
169
+ details: {
170
+ uploadName,
171
+ mode: options.signer ? "direct" : "server",
172
+ fileCount: files.length,
173
+ durationMs: Date.now() - startedAt,
174
+ },
175
+ });
176
+ return {
177
+ uploadName,
178
+ mode: options.signer ? "direct" : "server",
179
+ files,
180
+ };
181
+ }
182
+ catch (error) {
183
+ recordFailure("upload.prepare.failed", uploadName, startedAt, error);
184
+ throw error;
185
+ }
186
+ }
187
+ async function complete(uploadName, input) {
188
+ const startedAt = Date.now();
189
+ instrumentation.custom({
190
+ name: "upload.complete.started",
191
+ label: "Upload complete started",
192
+ summary: uploadName,
193
+ });
194
+ try {
195
+ const upload = findUpload(uploadName);
196
+ const ctx = await resolveCtx();
197
+ const metadata = await parseMetadata(upload, input.metadata);
198
+ assertFiles(upload, input.files);
199
+ const files = [];
200
+ for (const file of input.files) {
201
+ await assertAuthorized(upload, {
202
+ ctx,
203
+ metadata,
204
+ file,
205
+ uploadId: file.uploadId,
206
+ });
207
+ const expectedKey = await upload.key({
208
+ ctx,
209
+ metadata,
210
+ file,
211
+ uploadId: file.uploadId,
212
+ });
213
+ if (file.key !== expectedKey) {
214
+ throw new UploadError({
215
+ code: "INVALID_UPLOAD_FILE",
216
+ status: 422,
217
+ message: `Uploaded object key does not match upload "${upload.name}".`,
218
+ details: {
219
+ expectedKey,
220
+ actualKey: file.key,
221
+ },
222
+ });
223
+ }
224
+ const object = await options.storage.stat(file.key);
225
+ if (!object) {
226
+ throw new UploadError({
227
+ code: "UPLOAD_OBJECT_NOT_FOUND",
228
+ status: 404,
229
+ message: `Uploaded object "${file.key}" was not found.`,
230
+ });
231
+ }
232
+ assertStoredObject(upload, file, object);
233
+ files.push({ ...file, object });
234
+ }
235
+ const result = await upload.onComplete?.({ ctx, metadata, files });
236
+ instrumentation.custom({
237
+ name: "upload.complete.completed",
238
+ label: "Upload complete completed",
239
+ summary: `${uploadName} (${files.length} file${files.length === 1 ? "" : "s"})`,
240
+ details: {
241
+ uploadName,
242
+ fileCount: files.length,
243
+ durationMs: Date.now() - startedAt,
244
+ },
245
+ });
246
+ return {
247
+ uploadName,
248
+ files,
249
+ result,
250
+ };
251
+ }
252
+ catch (error) {
253
+ recordFailure("upload.complete.failed", uploadName, startedAt, error);
254
+ throw error;
255
+ }
256
+ }
257
+ async function upload(uploadName, input) {
258
+ const startedAt = Date.now();
259
+ instrumentation.custom({
260
+ name: "upload.server.started",
261
+ label: "Server upload started",
262
+ summary: uploadName,
263
+ });
264
+ try {
265
+ const definition = findUpload(uploadName);
266
+ const ctx = await resolveCtx();
267
+ const metadata = await parseMetadata(definition, metadataFromFormData(input.formData));
268
+ const webFiles = filesFromFormData(input.formData);
269
+ const intents = webFiles.map(fileIntentFromFile);
270
+ assertFiles(definition, intents);
271
+ const completed = [];
272
+ for (const [index, file] of webFiles.entries()) {
273
+ const intent = intents[index];
274
+ if (!intent)
275
+ continue;
276
+ const uploadId = id();
277
+ await assertAuthorized(definition, {
278
+ ctx,
279
+ metadata,
280
+ file: intent,
281
+ uploadId,
282
+ });
283
+ const key = await definition.key({
284
+ ctx,
285
+ metadata,
286
+ file: intent,
287
+ uploadId,
288
+ });
289
+ const storageMetadata = (await definition.storageMetadata?.({
290
+ ctx,
291
+ metadata,
292
+ file: intent,
293
+ uploadId,
294
+ })) ?? {};
295
+ const object = await options.storage.put(key, file, {
296
+ contentType: intent.contentType,
297
+ ...(definition.file.cacheControl !== undefined
298
+ ? { cacheControl: definition.file.cacheControl }
299
+ : {}),
300
+ metadata: storageMetadata,
301
+ visibility: definition.file.visibility ?? "private",
302
+ });
303
+ completed.push({
304
+ ...intent,
305
+ uploadId,
306
+ key,
307
+ object,
308
+ });
309
+ }
310
+ const result = await definition.onComplete?.({
311
+ ctx,
312
+ metadata,
313
+ files: completed,
314
+ });
315
+ instrumentation.custom({
316
+ name: "upload.server.completed",
317
+ label: "Server upload completed",
318
+ summary: `${uploadName} (${completed.length} file${completed.length === 1 ? "" : "s"})`,
319
+ details: {
320
+ uploadName,
321
+ fileCount: completed.length,
322
+ durationMs: Date.now() - startedAt,
323
+ },
324
+ });
325
+ return {
326
+ uploadName,
327
+ files: completed,
328
+ result,
329
+ };
330
+ }
331
+ catch (error) {
332
+ recordFailure("upload.server.failed", uploadName, startedAt, error);
333
+ throw error;
334
+ }
335
+ }
336
+ function recordFailure(name, uploadName, startedAt, error) {
337
+ instrumentation.custom({
338
+ name,
339
+ label: "Upload failed",
340
+ summary: uploadName,
341
+ details: {
342
+ uploadName,
343
+ durationMs: Date.now() - startedAt,
344
+ error: error instanceof Error ? error.message : String(error),
345
+ },
346
+ });
347
+ }
348
+ return {
349
+ prepare,
350
+ complete,
351
+ upload,
352
+ async handleRequest(request, requestOptions) {
353
+ try {
354
+ if (requestOptions.action === "prepare") {
355
+ const input = (await request.json());
356
+ return jsonResponse(await prepare(requestOptions.uploadName, input));
357
+ }
358
+ if (requestOptions.action === "complete") {
359
+ const input = (await request.json());
360
+ return jsonResponse(await complete(requestOptions.uploadName, input));
361
+ }
362
+ const formData = await request.formData();
363
+ return jsonResponse(await upload(requestOptions.uploadName, {
364
+ formData,
365
+ }));
366
+ }
367
+ catch (error) {
368
+ return uploadErrorResponse(error);
369
+ }
370
+ },
371
+ };
372
+ }
373
+ async function parseMetadata(upload, input) {
374
+ const result = await upload.metadata["~standard"].validate(input);
375
+ if (result.issues?.length) {
376
+ throw new UploadError({
377
+ code: "INVALID_UPLOAD_METADATA",
378
+ status: 422,
379
+ message: `Invalid metadata for upload "${upload.name}".`,
380
+ details: { issues: result.issues },
381
+ });
382
+ }
383
+ if ("value" in result) {
384
+ return result.value;
385
+ }
386
+ throw new Error("Invalid Standard Schema result: missing value");
387
+ }
388
+ function assertFiles(upload, files) {
389
+ const maxFiles = upload.file.maxFiles ?? 1;
390
+ if (files.length === 0 || files.length > maxFiles) {
391
+ throw new UploadError({
392
+ code: "INVALID_UPLOAD_FILE",
393
+ status: 422,
394
+ message: `Upload "${upload.name}" requires between 1 and ${maxFiles} file${maxFiles === 1 ? "" : "s"}.`,
395
+ details: { fileCount: files.length, maxFiles },
396
+ });
397
+ }
398
+ for (const file of files) {
399
+ if (!file.name || !file.contentType || !Number.isFinite(file.size)) {
400
+ throw new UploadError({
401
+ code: "INVALID_UPLOAD_FILE",
402
+ status: 422,
403
+ message: `Upload "${upload.name}" received invalid file metadata.`,
404
+ details: { file },
405
+ });
406
+ }
407
+ if (upload.file.contentTypes?.length &&
408
+ !upload.file.contentTypes.includes(file.contentType)) {
409
+ throw new UploadError({
410
+ code: "INVALID_UPLOAD_FILE",
411
+ status: 415,
412
+ message: `Upload "${upload.name}" does not accept "${file.contentType}".`,
413
+ details: {
414
+ contentType: file.contentType,
415
+ acceptedContentTypes: upload.file.contentTypes,
416
+ },
417
+ });
418
+ }
419
+ if (upload.file.maxSizeBytes !== undefined &&
420
+ file.size > upload.file.maxSizeBytes) {
421
+ throw new UploadError({
422
+ code: "INVALID_UPLOAD_FILE",
423
+ status: 413,
424
+ message: `Upload "${upload.name}" exceeds the maximum file size.`,
425
+ details: {
426
+ size: file.size,
427
+ maxSizeBytes: upload.file.maxSizeBytes,
428
+ },
429
+ });
430
+ }
431
+ }
432
+ }
433
+ async function assertAuthorized(upload, args) {
434
+ const result = await upload.authorize?.(args);
435
+ const denied = result === false ||
436
+ (typeof result === "object" &&
437
+ result !== null &&
438
+ "allowed" in result &&
439
+ result.allowed === false);
440
+ if (!denied)
441
+ return;
442
+ throw new UploadError({
443
+ code: "UNAUTHORIZED_UPLOAD",
444
+ status: 403,
445
+ message: typeof result === "object" && result?.reason
446
+ ? result.reason
447
+ : `Upload "${upload.name}" is not authorized.`,
448
+ });
449
+ }
450
+ function assertStoredObject(upload, file, object) {
451
+ assertFiles(upload, [file]);
452
+ if (object.contentType &&
453
+ file.contentType &&
454
+ object.contentType !== file.contentType) {
455
+ throw new UploadError({
456
+ code: "INVALID_UPLOAD_FILE",
457
+ status: 422,
458
+ message: `Uploaded object "${object.key}" content type does not match the prepared file.`,
459
+ details: {
460
+ expected: file.contentType,
461
+ actual: object.contentType,
462
+ },
463
+ });
464
+ }
465
+ }
466
+ function metadataFromFormData(formData) {
467
+ const metadata = formData.get("metadata");
468
+ if (typeof metadata !== "string")
469
+ return {};
470
+ try {
471
+ return JSON.parse(metadata);
472
+ }
473
+ catch {
474
+ throw new UploadError({
475
+ code: "INVALID_UPLOAD_BODY",
476
+ status: 400,
477
+ message: "Upload metadata must be valid JSON.",
478
+ });
479
+ }
480
+ }
481
+ function filesFromFormData(formData) {
482
+ const values = [...formData.getAll("file"), ...formData.getAll("files")];
483
+ const files = values.filter((value) => value instanceof File);
484
+ if (files.length === 0) {
485
+ throw new UploadError({
486
+ code: "INVALID_UPLOAD_BODY",
487
+ status: 400,
488
+ message: 'Multipart upload must include at least one "file" field.',
489
+ });
490
+ }
491
+ return files;
492
+ }
493
+ function fileIntentFromFile(file) {
494
+ return {
495
+ name: file.name,
496
+ contentType: file.type || "application/octet-stream",
497
+ size: file.size,
498
+ };
499
+ }
500
+ function jsonResponse(body, init) {
501
+ const headers = {
502
+ "content-type": "application/json",
503
+ };
504
+ if (init?.headers) {
505
+ new Headers(init.headers).forEach((value, key) => {
506
+ headers[key] = value;
507
+ });
508
+ }
509
+ return new Response(JSON.stringify(body), {
510
+ status: init?.status ?? 200,
511
+ headers,
512
+ });
513
+ }
514
+ function uploadErrorResponse(error) {
515
+ if (error instanceof UploadError) {
516
+ return jsonResponse({
517
+ error: {
518
+ code: error.code,
519
+ message: error.message,
520
+ ...(error.details !== undefined ? { details: error.details } : {}),
521
+ },
522
+ }, { status: error.status });
523
+ }
524
+ return jsonResponse({
525
+ error: {
526
+ code: "INTERNAL_SERVER_ERROR",
527
+ message: "Internal server error",
528
+ },
529
+ }, { status: 500 });
530
+ }
531
+ function randomUploadId() {
532
+ if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
533
+ return crypto.randomUUID();
534
+ }
535
+ return `upload_${Math.random().toString(36).slice(2)}`;
536
+ }
537
+ function isUploadDef(value) {
538
+ return (typeof value === "object" &&
539
+ value !== null &&
540
+ "kind" in value &&
541
+ value.kind === "upload");
542
+ }
543
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/uploads/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/core",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "type": "module",
5
5
  "description": "Core framework primitives for Beignet",
6
6
  "exports": {
@@ -12,6 +12,11 @@
12
12
  "types": "./dist/client/index.d.ts",
13
13
  "default": "./dist/client/index.js"
14
14
  },
15
+ "./client-only": {
16
+ "types": "./dist/client-only.d.ts",
17
+ "bun": "./src/client-only.ts",
18
+ "default": "./dist/client-only.js"
19
+ },
15
20
  "./config": {
16
21
  "types": "./dist/config/index.d.ts",
17
22
  "default": "./dist/config/index.js"
@@ -74,19 +79,41 @@
74
79
  },
75
80
  "./providers": {
76
81
  "types": "./dist/providers/index.d.ts",
82
+ "bun": "./src/providers/index.ts",
77
83
  "default": "./dist/providers/index.js"
78
84
  },
79
85
  "./schedules": {
80
86
  "types": "./dist/schedules/index.d.ts",
81
87
  "default": "./dist/schedules/index.js"
82
88
  },
89
+ "./tasks": {
90
+ "types": "./dist/tasks/index.d.ts",
91
+ "default": "./dist/tasks/index.js"
92
+ },
83
93
  "./testing": {
84
94
  "types": "./dist/testing/index.d.ts",
85
95
  "default": "./dist/testing/index.js"
86
96
  },
97
+ "./tracing": {
98
+ "types": "./dist/tracing/index.d.ts",
99
+ "default": "./dist/tracing/index.js"
100
+ },
101
+ "./uploads": {
102
+ "types": "./dist/uploads/index.d.ts",
103
+ "default": "./dist/uploads/index.js"
104
+ },
105
+ "./uploads/client": {
106
+ "types": "./dist/uploads/client.d.ts",
107
+ "default": "./dist/uploads/client.js"
108
+ },
87
109
  "./server": {
88
110
  "types": "./dist/server/index.d.ts",
89
111
  "default": "./dist/server/index.js"
112
+ },
113
+ "./server-only": {
114
+ "types": "./dist/server-only.d.ts",
115
+ "bun": "./src/server-only.ts",
116
+ "default": "./dist/server-only.js"
90
117
  }
91
118
  },
92
119
  "files": [
@@ -102,7 +129,8 @@
102
129
  "build": "tsc",
103
130
  "dev": "tsc --watch",
104
131
  "clean": "rm -rf dist coverage .turbo",
105
- "test": "bun test",
132
+ "test": "bun test && bun run typecheck:types",
133
+ "typecheck:types": "tsc -p tsconfig.type-tests.json",
106
134
  "test:coverage": "bun test --coverage",
107
135
  "lint": "biome check ."
108
136
  },
@@ -122,7 +150,10 @@
122
150
  "author": "Taylor Bryant",
123
151
  "homepage": "https://github.com/taylorbryant/beignet#readme",
124
152
  "bugs": "https://github.com/taylorbryant/beignet/issues",
125
- "sideEffects": false,
153
+ "sideEffects": [
154
+ "./dist/client-only.js",
155
+ "./dist/server-only.js"
156
+ ],
126
157
  "publishConfig": {
127
158
  "access": "public"
128
159
  },