@c9up/ream 0.1.3

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 (451) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/Application.d.ts +71 -0
  4. package/dist/Application.d.ts.map +1 -0
  5. package/dist/Application.js +151 -0
  6. package/dist/Application.js.map +1 -0
  7. package/dist/Codemods.d.ts +16 -0
  8. package/dist/Codemods.d.ts.map +1 -0
  9. package/dist/Codemods.js +277 -0
  10. package/dist/Codemods.js.map +1 -0
  11. package/dist/ConfigLoader.d.ts +29 -0
  12. package/dist/ConfigLoader.d.ts.map +1 -0
  13. package/dist/ConfigLoader.js +43 -0
  14. package/dist/ConfigLoader.js.map +1 -0
  15. package/dist/ErrorBoundary.d.ts +51 -0
  16. package/dist/ErrorBoundary.d.ts.map +1 -0
  17. package/dist/ErrorBoundary.js +122 -0
  18. package/dist/ErrorBoundary.js.map +1 -0
  19. package/dist/GracefulShutdown.d.ts +28 -0
  20. package/dist/GracefulShutdown.d.ts.map +1 -0
  21. package/dist/GracefulShutdown.js +55 -0
  22. package/dist/GracefulShutdown.js.map +1 -0
  23. package/dist/HealthCheck.d.ts +42 -0
  24. package/dist/HealthCheck.d.ts.map +1 -0
  25. package/dist/HealthCheck.js +65 -0
  26. package/dist/HealthCheck.js.map +1 -0
  27. package/dist/HotReload.d.ts +28 -0
  28. package/dist/HotReload.d.ts.map +1 -0
  29. package/dist/HotReload.js +60 -0
  30. package/dist/HotReload.js.map +1 -0
  31. package/dist/HttpKernel.d.ts +62 -0
  32. package/dist/HttpKernel.d.ts.map +1 -0
  33. package/dist/HttpKernel.js +210 -0
  34. package/dist/HttpKernel.js.map +1 -0
  35. package/dist/Ignitor.d.ts +195 -0
  36. package/dist/Ignitor.d.ts.map +1 -0
  37. package/dist/Ignitor.js +505 -0
  38. package/dist/Ignitor.js.map +1 -0
  39. package/dist/Provider.d.ts +54 -0
  40. package/dist/Provider.d.ts.map +1 -0
  41. package/dist/Provider.js +37 -0
  42. package/dist/Provider.js.map +1 -0
  43. package/dist/bodyparser/BodyParserMiddleware.d.ts +38 -0
  44. package/dist/bodyparser/BodyParserMiddleware.d.ts.map +1 -0
  45. package/dist/bodyparser/BodyParserMiddleware.js +143 -0
  46. package/dist/bodyparser/BodyParserMiddleware.js.map +1 -0
  47. package/dist/bodyparser/MultipartFile.d.ts +77 -0
  48. package/dist/bodyparser/MultipartFile.d.ts.map +1 -0
  49. package/dist/bodyparser/MultipartFile.js +138 -0
  50. package/dist/bodyparser/MultipartFile.js.map +1 -0
  51. package/dist/bodyparser/parseSize.d.ts +6 -0
  52. package/dist/bodyparser/parseSize.d.ts.map +1 -0
  53. package/dist/bodyparser/parseSize.js +21 -0
  54. package/dist/bodyparser/parseSize.js.map +1 -0
  55. package/dist/bootstrap/hyper-server.d.ts +27 -0
  56. package/dist/bootstrap/hyper-server.d.ts.map +1 -0
  57. package/dist/bootstrap/hyper-server.js +63 -0
  58. package/dist/bootstrap/hyper-server.js.map +1 -0
  59. package/dist/console/CommandRunner.d.ts +18 -0
  60. package/dist/console/CommandRunner.d.ts.map +1 -0
  61. package/dist/console/CommandRunner.js +65 -0
  62. package/dist/console/CommandRunner.js.map +1 -0
  63. package/dist/container/Container.d.ts +60 -0
  64. package/dist/container/Container.d.ts.map +1 -0
  65. package/dist/container/Container.js +329 -0
  66. package/dist/container/Container.js.map +1 -0
  67. package/dist/container/types.d.ts +25 -0
  68. package/dist/container/types.d.ts.map +1 -0
  69. package/dist/container/types.js +6 -0
  70. package/dist/container/types.js.map +1 -0
  71. package/dist/decorators/Lazy.d.ts +19 -0
  72. package/dist/decorators/Lazy.d.ts.map +1 -0
  73. package/dist/decorators/Lazy.js +53 -0
  74. package/dist/decorators/Lazy.js.map +1 -0
  75. package/dist/decorators/Service.d.ts +48 -0
  76. package/dist/decorators/Service.d.ts.map +1 -0
  77. package/dist/decorators/Service.js +70 -0
  78. package/dist/decorators/Service.js.map +1 -0
  79. package/dist/errors/FuzzyMatcher.d.ts +41 -0
  80. package/dist/errors/FuzzyMatcher.d.ts.map +1 -0
  81. package/dist/errors/FuzzyMatcher.js +81 -0
  82. package/dist/errors/FuzzyMatcher.js.map +1 -0
  83. package/dist/errors/ModuleErrors.d.ts +41 -0
  84. package/dist/errors/ModuleErrors.d.ts.map +1 -0
  85. package/dist/errors/ModuleErrors.js +65 -0
  86. package/dist/errors/ModuleErrors.js.map +1 -0
  87. package/dist/errors/PipelineStageError.d.ts +31 -0
  88. package/dist/errors/PipelineStageError.d.ts.map +1 -0
  89. package/dist/errors/PipelineStageError.js +77 -0
  90. package/dist/errors/PipelineStageError.js.map +1 -0
  91. package/dist/errors/ReamError.d.ts +50 -0
  92. package/dist/errors/ReamError.d.ts.map +1 -0
  93. package/dist/errors/ReamError.js +108 -0
  94. package/dist/errors/ReamError.js.map +1 -0
  95. package/dist/events/Emitter.d.ts +124 -0
  96. package/dist/events/Emitter.d.ts.map +1 -0
  97. package/dist/events/Emitter.js +271 -0
  98. package/dist/events/Emitter.js.map +1 -0
  99. package/dist/events/EventsProvider.d.ts +28 -0
  100. package/dist/events/EventsProvider.d.ts.map +1 -0
  101. package/dist/events/EventsProvider.js +36 -0
  102. package/dist/events/EventsProvider.js.map +1 -0
  103. package/dist/events/config.d.ts +8 -0
  104. package/dist/events/config.d.ts.map +1 -0
  105. package/dist/events/config.js +4 -0
  106. package/dist/events/config.js.map +1 -0
  107. package/dist/events/configure.d.ts +10 -0
  108. package/dist/events/configure.d.ts.map +1 -0
  109. package/dist/events/configure.js +11 -0
  110. package/dist/events/configure.js.map +1 -0
  111. package/dist/events/helix/helpers.d.ts +62 -0
  112. package/dist/events/helix/helpers.d.ts.map +1 -0
  113. package/dist/events/helix/helpers.js +187 -0
  114. package/dist/events/helix/helpers.js.map +1 -0
  115. package/dist/events/index.d.ts +17 -0
  116. package/dist/events/index.d.ts.map +1 -0
  117. package/dist/events/index.js +15 -0
  118. package/dist/events/index.js.map +1 -0
  119. package/dist/events/native.d.ts +21 -0
  120. package/dist/events/native.d.ts.map +1 -0
  121. package/dist/events/native.js +17 -0
  122. package/dist/events/native.js.map +1 -0
  123. package/dist/events/services/main.d.ts +18 -0
  124. package/dist/events/services/main.d.ts.map +1 -0
  125. package/dist/events/services/main.js +31 -0
  126. package/dist/events/services/main.js.map +1 -0
  127. package/dist/events/testing/FakeBus.d.ts +66 -0
  128. package/dist/events/testing/FakeBus.d.ts.map +1 -0
  129. package/dist/events/testing/FakeBus.js +356 -0
  130. package/dist/events/testing/FakeBus.js.map +1 -0
  131. package/dist/graphql/GraphQLEngine.d.ts +69 -0
  132. package/dist/graphql/GraphQLEngine.d.ts.map +1 -0
  133. package/dist/graphql/GraphQLEngine.js +309 -0
  134. package/dist/graphql/GraphQLEngine.js.map +1 -0
  135. package/dist/graphql/GraphQLProvider.d.ts +32 -0
  136. package/dist/graphql/GraphQLProvider.d.ts.map +1 -0
  137. package/dist/graphql/GraphQLProvider.js +49 -0
  138. package/dist/graphql/GraphQLProvider.js.map +1 -0
  139. package/dist/helpers/base64.d.ts +40 -0
  140. package/dist/helpers/base64.d.ts.map +1 -0
  141. package/dist/helpers/base64.js +70 -0
  142. package/dist/helpers/base64.js.map +1 -0
  143. package/dist/helpers/index.d.ts +7 -0
  144. package/dist/helpers/index.d.ts.map +1 -0
  145. package/dist/helpers/index.js +5 -0
  146. package/dist/helpers/index.js.map +1 -0
  147. package/dist/helpers/is.d.ts +101 -0
  148. package/dist/helpers/is.d.ts.map +1 -0
  149. package/dist/helpers/is.js +151 -0
  150. package/dist/helpers/is.js.map +1 -0
  151. package/dist/helpers/napi-loader.d.ts +46 -0
  152. package/dist/helpers/napi-loader.d.ts.map +1 -0
  153. package/dist/helpers/napi-loader.js +69 -0
  154. package/dist/helpers/napi-loader.js.map +1 -0
  155. package/dist/helpers/safeEqual.d.ts +9 -0
  156. package/dist/helpers/safeEqual.d.ts.map +1 -0
  157. package/dist/helpers/safeEqual.js +16 -0
  158. package/dist/helpers/safeEqual.js.map +1 -0
  159. package/dist/helpers/string.d.ts +161 -0
  160. package/dist/helpers/string.d.ts.map +1 -0
  161. package/dist/helpers/string.js +429 -0
  162. package/dist/helpers/string.js.map +1 -0
  163. package/dist/helpers/types.d.ts +83 -0
  164. package/dist/helpers/types.d.ts.map +1 -0
  165. package/dist/helpers/types.js +6 -0
  166. package/dist/helpers/types.js.map +1 -0
  167. package/dist/http/Exception.d.ts +103 -0
  168. package/dist/http/Exception.d.ts.map +1 -0
  169. package/dist/http/Exception.js +228 -0
  170. package/dist/http/Exception.js.map +1 -0
  171. package/dist/http/HttpContext.d.ts +69 -0
  172. package/dist/http/HttpContext.d.ts.map +1 -0
  173. package/dist/http/HttpContext.js +55 -0
  174. package/dist/http/HttpContext.js.map +1 -0
  175. package/dist/http/RedirectBuilder.d.ts +31 -0
  176. package/dist/http/RedirectBuilder.d.ts.map +1 -0
  177. package/dist/http/RedirectBuilder.js +75 -0
  178. package/dist/http/RedirectBuilder.js.map +1 -0
  179. package/dist/http/Request.d.ts +160 -0
  180. package/dist/http/Request.d.ts.map +1 -0
  181. package/dist/http/Request.js +484 -0
  182. package/dist/http/Request.js.map +1 -0
  183. package/dist/http/Response.d.ts +114 -0
  184. package/dist/http/Response.d.ts.map +1 -0
  185. package/dist/http/Response.js +303 -0
  186. package/dist/http/Response.js.map +1 -0
  187. package/dist/http/SseStream.d.ts +89 -0
  188. package/dist/http/SseStream.d.ts.map +1 -0
  189. package/dist/http/SseStream.js +228 -0
  190. package/dist/http/SseStream.js.map +1 -0
  191. package/dist/http/urlDecode.d.ts +8 -0
  192. package/dist/http/urlDecode.d.ts.map +1 -0
  193. package/dist/http/urlDecode.js +18 -0
  194. package/dist/http/urlDecode.js.map +1 -0
  195. package/dist/index.d.ts +92 -0
  196. package/dist/index.d.ts.map +1 -0
  197. package/dist/index.js +67 -0
  198. package/dist/index.js.map +1 -0
  199. package/dist/middleware/Pipeline.d.ts +36 -0
  200. package/dist/middleware/Pipeline.d.ts.map +1 -0
  201. package/dist/middleware/Pipeline.js +104 -0
  202. package/dist/middleware/Pipeline.js.map +1 -0
  203. package/dist/openapi/OpenApiGenerator.d.ts +58 -0
  204. package/dist/openapi/OpenApiGenerator.d.ts.map +1 -0
  205. package/dist/openapi/OpenApiGenerator.js +192 -0
  206. package/dist/openapi/OpenApiGenerator.js.map +1 -0
  207. package/dist/openapi/OpenApiMiddleware.d.ts +24 -0
  208. package/dist/openapi/OpenApiMiddleware.d.ts.map +1 -0
  209. package/dist/openapi/OpenApiMiddleware.js +78 -0
  210. package/dist/openapi/OpenApiMiddleware.js.map +1 -0
  211. package/dist/openapi/OpenApiProvider.d.ts +36 -0
  212. package/dist/openapi/OpenApiProvider.d.ts.map +1 -0
  213. package/dist/openapi/OpenApiProvider.js +42 -0
  214. package/dist/openapi/OpenApiProvider.js.map +1 -0
  215. package/dist/resources/ApiResource.d.ts +45 -0
  216. package/dist/resources/ApiResource.d.ts.map +1 -0
  217. package/dist/resources/ApiResource.js +58 -0
  218. package/dist/resources/ApiResource.js.map +1 -0
  219. package/dist/router/Router.d.ts +205 -0
  220. package/dist/router/Router.d.ts.map +1 -0
  221. package/dist/router/Router.js +552 -0
  222. package/dist/router/Router.js.map +1 -0
  223. package/dist/rpc/RpcProvider.d.ts +34 -0
  224. package/dist/rpc/RpcProvider.d.ts.map +1 -0
  225. package/dist/rpc/RpcProvider.js +37 -0
  226. package/dist/rpc/RpcProvider.js.map +1 -0
  227. package/dist/rpc/RpcRouter.d.ts +61 -0
  228. package/dist/rpc/RpcRouter.d.ts.map +1 -0
  229. package/dist/rpc/RpcRouter.js +187 -0
  230. package/dist/rpc/RpcRouter.js.map +1 -0
  231. package/dist/scheduler/Schedule.d.ts +53 -0
  232. package/dist/scheduler/Schedule.d.ts.map +1 -0
  233. package/dist/scheduler/Schedule.js +76 -0
  234. package/dist/scheduler/Schedule.js.map +1 -0
  235. package/dist/scheduler/ScheduleProvider.d.ts +56 -0
  236. package/dist/scheduler/ScheduleProvider.d.ts.map +1 -0
  237. package/dist/scheduler/ScheduleProvider.js +145 -0
  238. package/dist/scheduler/ScheduleProvider.js.map +1 -0
  239. package/dist/scheduler/Scheduler.d.ts +209 -0
  240. package/dist/scheduler/Scheduler.d.ts.map +1 -0
  241. package/dist/scheduler/Scheduler.js +432 -0
  242. package/dist/scheduler/Scheduler.js.map +1 -0
  243. package/dist/scheduler/index.d.ts +14 -0
  244. package/dist/scheduler/index.d.ts.map +1 -0
  245. package/dist/scheduler/index.js +6 -0
  246. package/dist/scheduler/index.js.map +1 -0
  247. package/dist/scheduler/locks/LockBackend.d.ts +37 -0
  248. package/dist/scheduler/locks/LockBackend.d.ts.map +1 -0
  249. package/dist/scheduler/locks/LockBackend.js +13 -0
  250. package/dist/scheduler/locks/LockBackend.js.map +1 -0
  251. package/dist/scheduler/locks/MemoryLockBackend.d.ts +39 -0
  252. package/dist/scheduler/locks/MemoryLockBackend.d.ts.map +1 -0
  253. package/dist/scheduler/locks/MemoryLockBackend.js +71 -0
  254. package/dist/scheduler/locks/MemoryLockBackend.js.map +1 -0
  255. package/dist/scheduler/observability/ErrorReporter.d.ts +15 -0
  256. package/dist/scheduler/observability/ErrorReporter.d.ts.map +1 -0
  257. package/dist/scheduler/observability/ErrorReporter.js +13 -0
  258. package/dist/scheduler/observability/ErrorReporter.js.map +1 -0
  259. package/dist/scheduler/observability/ScheduleEvent.d.ts +57 -0
  260. package/dist/scheduler/observability/ScheduleEvent.d.ts.map +1 -0
  261. package/dist/scheduler/observability/ScheduleEvent.js +12 -0
  262. package/dist/scheduler/observability/ScheduleEvent.js.map +1 -0
  263. package/dist/scheduler/observability/ScheduleEventSink.d.ts +20 -0
  264. package/dist/scheduler/observability/ScheduleEventSink.d.ts.map +1 -0
  265. package/dist/scheduler/observability/ScheduleEventSink.js +17 -0
  266. package/dist/scheduler/observability/ScheduleEventSink.js.map +1 -0
  267. package/dist/scheduler/observability/StatsTracker.d.ts +50 -0
  268. package/dist/scheduler/observability/StatsTracker.d.ts.map +1 -0
  269. package/dist/scheduler/observability/StatsTracker.js +96 -0
  270. package/dist/scheduler/observability/StatsTracker.js.map +1 -0
  271. package/dist/security/CookieSigner.d.ts +13 -0
  272. package/dist/security/CookieSigner.d.ts.map +1 -0
  273. package/dist/security/CookieSigner.js +51 -0
  274. package/dist/security/CookieSigner.js.map +1 -0
  275. package/dist/security/SignedUrl.d.ts +17 -0
  276. package/dist/security/SignedUrl.d.ts.map +1 -0
  277. package/dist/security/SignedUrl.js +63 -0
  278. package/dist/security/SignedUrl.js.map +1 -0
  279. package/dist/security/crypto.d.ts +25 -0
  280. package/dist/security/crypto.d.ts.map +1 -0
  281. package/dist/security/crypto.js +82 -0
  282. package/dist/security/crypto.js.map +1 -0
  283. package/dist/server/HyperServer.d.ts +64 -0
  284. package/dist/server/HyperServer.d.ts.map +1 -0
  285. package/dist/server/HyperServer.js +54 -0
  286. package/dist/server/HyperServer.js.map +1 -0
  287. package/dist/server/Server.d.ts +68 -0
  288. package/dist/server/Server.d.ts.map +1 -0
  289. package/dist/server/Server.js +113 -0
  290. package/dist/server/Server.js.map +1 -0
  291. package/dist/services/app.d.ts +14 -0
  292. package/dist/services/app.d.ts.map +1 -0
  293. package/dist/services/app.js +27 -0
  294. package/dist/services/app.js.map +1 -0
  295. package/dist/services/router.d.ts +21 -0
  296. package/dist/services/router.d.ts.map +1 -0
  297. package/dist/services/router.js +36 -0
  298. package/dist/services/router.js.map +1 -0
  299. package/dist/services/server.d.ts +16 -0
  300. package/dist/services/server.d.ts.map +1 -0
  301. package/dist/services/server.js +32 -0
  302. package/dist/services/server.js.map +1 -0
  303. package/dist/session/Session.d.ts +88 -0
  304. package/dist/session/Session.d.ts.map +1 -0
  305. package/dist/session/Session.js +186 -0
  306. package/dist/session/Session.js.map +1 -0
  307. package/dist/session/SessionMiddleware.d.ts +16 -0
  308. package/dist/session/SessionMiddleware.d.ts.map +1 -0
  309. package/dist/session/SessionMiddleware.js +132 -0
  310. package/dist/session/SessionMiddleware.js.map +1 -0
  311. package/dist/session/drivers/CookieDriver.d.ts +17 -0
  312. package/dist/session/drivers/CookieDriver.d.ts.map +1 -0
  313. package/dist/session/drivers/CookieDriver.js +42 -0
  314. package/dist/session/drivers/CookieDriver.js.map +1 -0
  315. package/dist/session/drivers/MemoryDriver.d.ts +9 -0
  316. package/dist/session/drivers/MemoryDriver.d.ts.map +1 -0
  317. package/dist/session/drivers/MemoryDriver.js +24 -0
  318. package/dist/session/drivers/MemoryDriver.js.map +1 -0
  319. package/dist/storage/S3Driver.d.ts +27 -0
  320. package/dist/storage/S3Driver.d.ts.map +1 -0
  321. package/dist/storage/S3Driver.js +135 -0
  322. package/dist/storage/S3Driver.js.map +1 -0
  323. package/dist/storage/StaticMiddleware.d.ts +27 -0
  324. package/dist/storage/StaticMiddleware.d.ts.map +1 -0
  325. package/dist/storage/StaticMiddleware.js +153 -0
  326. package/dist/storage/StaticMiddleware.js.map +1 -0
  327. package/dist/storage/StaticProvider.d.ts +26 -0
  328. package/dist/storage/StaticProvider.d.ts.map +1 -0
  329. package/dist/storage/StaticProvider.js +31 -0
  330. package/dist/storage/StaticProvider.js.map +1 -0
  331. package/dist/storage/StorageManager.d.ts +31 -0
  332. package/dist/storage/StorageManager.d.ts.map +1 -0
  333. package/dist/storage/StorageManager.js +120 -0
  334. package/dist/storage/StorageManager.js.map +1 -0
  335. package/dist/testing/RequestBuilder.d.ts +67 -0
  336. package/dist/testing/RequestBuilder.d.ts.map +1 -0
  337. package/dist/testing/RequestBuilder.js +202 -0
  338. package/dist/testing/RequestBuilder.js.map +1 -0
  339. package/dist/testing/TestClient.d.ts +96 -0
  340. package/dist/testing/TestClient.d.ts.map +1 -0
  341. package/dist/testing/TestClient.js +263 -0
  342. package/dist/testing/TestClient.js.map +1 -0
  343. package/dist/types/helpers.d.ts +47 -0
  344. package/dist/types/helpers.d.ts.map +1 -0
  345. package/dist/types/helpers.js +5 -0
  346. package/dist/types/helpers.js.map +1 -0
  347. package/events.darwin-arm64.node +0 -0
  348. package/events.darwin-x64.node +0 -0
  349. package/events.linux-arm64-gnu.node +0 -0
  350. package/events.linux-x64-gnu.node +0 -0
  351. package/events.win32-x64-msvc.node +0 -0
  352. package/index.darwin-arm64.node +0 -0
  353. package/index.darwin-x64.node +0 -0
  354. package/index.linux-arm64-gnu.node +0 -0
  355. package/index.linux-x64-gnu.node +0 -0
  356. package/index.win32-x64-msvc.node +0 -0
  357. package/package.json +106 -0
  358. package/scheduler.darwin-arm64.node +0 -0
  359. package/scheduler.darwin-x64.node +0 -0
  360. package/scheduler.linux-arm64-gnu.node +0 -0
  361. package/scheduler.linux-x64-gnu.node +0 -0
  362. package/scheduler.win32-x64-msvc.node +0 -0
  363. package/scripts/copy-napi.mjs +113 -0
  364. package/src/Application.ts +177 -0
  365. package/src/Codemods.ts +343 -0
  366. package/src/ConfigLoader.ts +49 -0
  367. package/src/ErrorBoundary.ts +157 -0
  368. package/src/GracefulShutdown.ts +80 -0
  369. package/src/HealthCheck.ts +96 -0
  370. package/src/HotReload.ts +78 -0
  371. package/src/HttpKernel.ts +305 -0
  372. package/src/Ignitor.ts +656 -0
  373. package/src/Provider.ts +74 -0
  374. package/src/bodyparser/BodyParserMiddleware.ts +183 -0
  375. package/src/bodyparser/MultipartFile.ts +181 -0
  376. package/src/bodyparser/parseSize.ts +19 -0
  377. package/src/bootstrap/hyper-server.ts +78 -0
  378. package/src/console/CommandRunner.ts +82 -0
  379. package/src/container/Container.ts +383 -0
  380. package/src/container/types.ts +30 -0
  381. package/src/decorators/Lazy.ts +57 -0
  382. package/src/decorators/Service.ts +85 -0
  383. package/src/errors/FuzzyMatcher.ts +93 -0
  384. package/src/errors/ModuleErrors.ts +73 -0
  385. package/src/errors/PipelineStageError.ts +97 -0
  386. package/src/errors/ReamError.ts +138 -0
  387. package/src/events/Emitter.ts +333 -0
  388. package/src/events/EventsProvider.ts +58 -0
  389. package/src/events/config.ts +10 -0
  390. package/src/events/configure.ts +19 -0
  391. package/src/events/helix/helpers.ts +260 -0
  392. package/src/events/index.ts +22 -0
  393. package/src/events/native.ts +37 -0
  394. package/src/events/services/main.ts +39 -0
  395. package/src/events/testing/FakeBus.ts +420 -0
  396. package/src/graphql/GraphQLEngine.ts +421 -0
  397. package/src/graphql/GraphQLProvider.ts +59 -0
  398. package/src/helpers/base64.ts +72 -0
  399. package/src/helpers/index.ts +6 -0
  400. package/src/helpers/is.ts +162 -0
  401. package/src/helpers/napi-loader.ts +106 -0
  402. package/src/helpers/safeEqual.ts +15 -0
  403. package/src/helpers/string.ts +469 -0
  404. package/src/helpers/types.ts +100 -0
  405. package/src/http/Exception.ts +272 -0
  406. package/src/http/HttpContext.ts +108 -0
  407. package/src/http/RedirectBuilder.ts +89 -0
  408. package/src/http/Request.ts +540 -0
  409. package/src/http/Response.ts +351 -0
  410. package/src/http/SseStream.ts +250 -0
  411. package/src/http/urlDecode.ts +18 -0
  412. package/src/index.ts +263 -0
  413. package/src/middleware/Pipeline.ts +136 -0
  414. package/src/openapi/OpenApiGenerator.ts +254 -0
  415. package/src/openapi/OpenApiMiddleware.ts +101 -0
  416. package/src/openapi/OpenApiProvider.ts +67 -0
  417. package/src/resources/ApiResource.ts +79 -0
  418. package/src/router/Router.ts +733 -0
  419. package/src/rpc/RpcProvider.ts +54 -0
  420. package/src/rpc/RpcRouter.ts +243 -0
  421. package/src/scheduler/Schedule.ts +96 -0
  422. package/src/scheduler/ScheduleProvider.ts +177 -0
  423. package/src/scheduler/Scheduler.ts +601 -0
  424. package/src/scheduler/index.ts +24 -0
  425. package/src/scheduler/locks/LockBackend.ts +38 -0
  426. package/src/scheduler/locks/MemoryLockBackend.ts +85 -0
  427. package/src/scheduler/observability/ErrorReporter.ts +13 -0
  428. package/src/scheduler/observability/ScheduleEvent.ts +61 -0
  429. package/src/scheduler/observability/ScheduleEventSink.ts +21 -0
  430. package/src/scheduler/observability/StatsTracker.ts +134 -0
  431. package/src/security/CookieSigner.ts +54 -0
  432. package/src/security/SignedUrl.ts +71 -0
  433. package/src/security/crypto.ts +98 -0
  434. package/src/server/HyperServer.ts +121 -0
  435. package/src/server/Server.ts +147 -0
  436. package/src/services/app.ts +34 -0
  437. package/src/services/router.ts +44 -0
  438. package/src/services/server.ts +40 -0
  439. package/src/session/Session.ts +231 -0
  440. package/src/session/SessionMiddleware.ts +153 -0
  441. package/src/session/drivers/CookieDriver.ts +48 -0
  442. package/src/session/drivers/MemoryDriver.ts +29 -0
  443. package/src/storage/S3Driver.ts +171 -0
  444. package/src/storage/StaticMiddleware.ts +182 -0
  445. package/src/storage/StaticProvider.ts +40 -0
  446. package/src/storage/StorageManager.ts +142 -0
  447. package/src/testing/RequestBuilder.ts +275 -0
  448. package/src/testing/TestClient.ts +344 -0
  449. package/src/types/helpers.ts +52 -0
  450. package/swcrc.app.json +17 -0
  451. package/tsconfig.app.json +21 -0
@@ -0,0 +1,484 @@
1
+ /**
2
+ * Request — wraps raw HTTP request data from the NAPI layer.
3
+ *
4
+ * Provides a fluent, AdonisJS-compatible API for reading request data.
5
+ * JSON body parsing is lazy — deferred until first access via input()/all()/body().
6
+ *
7
+ * @implements FR21
8
+ */
9
+ export class Request {
10
+ #raw;
11
+ #params;
12
+ #parsedBody;
13
+ #parsedQs;
14
+ #merged;
15
+ #files = new Map();
16
+ /**
17
+ * CSRF token for this request (AdonisJS idiom: `request.csrfToken`). Seeded
18
+ * by the `@c9up/blackhole` middleware when CSRF is enabled; `undefined`
19
+ * otherwise. Also published to `ctx.store` for templating helpers.
20
+ */
21
+ csrfToken;
22
+ constructor(raw, params = {}) {
23
+ this.#raw = raw;
24
+ this.#params = params;
25
+ }
26
+ // ─── HTTP accessors ───────────────────────────────────────
27
+ /** HTTP method (GET, POST, etc.). */
28
+ method() {
29
+ return this.#raw.method;
30
+ }
31
+ /** Request URL (path + query string). */
32
+ url(includeQs = true) {
33
+ if (includeQs && this.#raw.query) {
34
+ return `${this.#raw.path}?${this.#raw.query}`;
35
+ }
36
+ return this.#raw.path;
37
+ }
38
+ /** Request path (without query string). */
39
+ path() {
40
+ return this.#raw.path;
41
+ }
42
+ /**
43
+ * Resolved client IP. The HyperServer computes this once per request from
44
+ * the socket peer + `X-Forwarded-For` / `X-Real-IP` headers, gated by the
45
+ * configured trusted-proxy CIDR list, and ships the resolved value on
46
+ * `request.ip`. JS reads that field as-is.
47
+ *
48
+ * When `#raw.ip` is missing — only happens in test fixtures that
49
+ * hand-build `RawRequest` without going through the Rust pipeline — fall
50
+ * back to the socket peer (`remoteAddr`). Do NOT consult `X-Forwarded-For`
51
+ * or `X-Real-IP` here: those headers are attacker-controlled on direct
52
+ * requests and the trusted-proxy gate lives in Rust. Honouring them in
53
+ * the TS fallback would let test fixtures masking real spoofing
54
+ * regressions (two semantics for the same API). Fixtures that need to
55
+ * simulate a proxy-resolved IP must set `#raw.ip` directly to the
56
+ * desired resolved value.
57
+ */
58
+ ip() {
59
+ if (this.#raw.ip)
60
+ return this.#raw.ip;
61
+ return this.#raw.remoteAddr ?? '127.0.0.1';
62
+ }
63
+ /**
64
+ * Return all cookies sent on this request as a name → value map. The
65
+ * HyperServer parses the `Cookie:` header once via the `cookie` crate
66
+ * (RFC 6265) and ships the result on `RawRequest.cookies`. Test fixtures
67
+ * that don't pre-fill the field fall back to inline parsing of the raw
68
+ * header — same tolerant `;`-split with quoted-value passthrough.
69
+ */
70
+ cookies() {
71
+ if (this.#raw.cookies)
72
+ return { ...this.#raw.cookies };
73
+ const header = this.#raw.headers.cookie;
74
+ if (!header)
75
+ return {};
76
+ const result = {};
77
+ for (const pair of header.split(';')) {
78
+ const trimmed = pair.trim();
79
+ if (!trimmed)
80
+ continue;
81
+ const eqIdx = trimmed.indexOf('=');
82
+ if (eqIdx === -1)
83
+ continue;
84
+ const k = trimmed.slice(0, eqIdx).trim();
85
+ const v = trimmed.slice(eqIdx + 1);
86
+ // Empty value (`name=`) is valid per RFC 6265 — used in session/logout
87
+ // flows that explicitly clear cookies. Only the key being empty is
88
+ // grounds to skip. Aligns the fallback with the pre-parsed path
89
+ // (HyperServer's cookie crate also accepts empty values).
90
+ if (k)
91
+ result[k] = v;
92
+ }
93
+ return result;
94
+ }
95
+ /** Pre-parsed cookie value by name, or `null` when absent. */
96
+ cookie(name) {
97
+ const cookies = this.#raw.cookies ?? this.cookies();
98
+ return cookies[name] ?? null;
99
+ }
100
+ /** Get the raw body as a string (decoded from base64 if binary). */
101
+ raw() {
102
+ if (this.#raw.bodyEncoding === 'base64') {
103
+ return Buffer.from(this.#raw.body, 'base64').toString('utf8');
104
+ }
105
+ return this.#raw.body;
106
+ }
107
+ /** Get the raw body as a Buffer (preserves binary integrity for file uploads). */
108
+ rawBuffer() {
109
+ if (this.#raw.bodyEncoding === 'base64') {
110
+ return Buffer.from(this.#raw.body, 'base64');
111
+ }
112
+ return Buffer.from(this.#raw.body, 'utf8');
113
+ }
114
+ // ─── Headers ──────────────────────────────────────────────
115
+ /** Get a single request header (case-insensitive). */
116
+ header(key) {
117
+ return this.#raw.headers[key.toLowerCase()];
118
+ }
119
+ /** Get all request headers. */
120
+ headers() {
121
+ return this.#raw.headers;
122
+ }
123
+ // ─── Route params ─────────────────────────────────────────
124
+ /** Get a single route parameter. */
125
+ param(key, defaultValue) {
126
+ return this.#params[key] ?? defaultValue;
127
+ }
128
+ /** Get all route parameters. */
129
+ params() {
130
+ return this.#params;
131
+ }
132
+ // ─── Query string ─────────────────────────────────────────
133
+ /** Get parsed query string as an object. */
134
+ qs() {
135
+ if (!this.#parsedQs) {
136
+ this.#parsedQs = parseQueryString(this.#raw.query);
137
+ }
138
+ return { ...this.#parsedQs };
139
+ }
140
+ // ─── Body ─────────────────────────────────────────────────
141
+ /** Get the parsed request body. */
142
+ body() {
143
+ this.#ensureParsedBody();
144
+ return this.#parsedBody;
145
+ }
146
+ // ─── Merged input (body + qs) ─────────────────────────────
147
+ /** Get a single input value from body or query string. */
148
+ input(key, defaultValue) {
149
+ const merged = this.all();
150
+ if (key in merged) {
151
+ // biome-ignore lint/suspicious/noExplicitAny: generic accessor — caller brands the value type via T
152
+ return merged[key];
153
+ }
154
+ // biome-ignore lint/suspicious/noExplicitAny: generic default — caller brands the value type via T
155
+ return defaultValue;
156
+ }
157
+ /** Get all input (query string merged with body). */
158
+ all() {
159
+ if (!this.#merged) {
160
+ this.#ensureParsedBody();
161
+ this.#merged = { ...this.qs(), ...this.#parsedBody };
162
+ }
163
+ return { ...this.#merged };
164
+ }
165
+ /** Cherry-pick specific keys from input. */
166
+ only(keys) {
167
+ const merged = this.all();
168
+ const result = {};
169
+ for (const key of keys) {
170
+ if (key in merged) {
171
+ result[key] = merged[key];
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ /** Get all input except specific keys. */
177
+ except(keys) {
178
+ const merged = this.all();
179
+ const keySet = new Set(keys);
180
+ const result = {};
181
+ for (const [k, v] of Object.entries(merged)) {
182
+ if (!keySet.has(k))
183
+ result[k] = v;
184
+ }
185
+ return result;
186
+ }
187
+ // ─── Content negotiation ──────────────────────────────────
188
+ /** Check if the request content-type matches any of the given types. */
189
+ is(types) {
190
+ const ct = this.#raw.headers['content-type'] ?? '';
191
+ for (const type of types) {
192
+ if (type === 'json' && ct.includes('application/json'))
193
+ return 'json';
194
+ if (type === 'html' && ct.includes('text/html'))
195
+ return 'html';
196
+ if (type === 'xml' && ct.includes('xml'))
197
+ return 'xml';
198
+ if (type === 'multipart' && ct.includes('multipart/form-data'))
199
+ return 'multipart';
200
+ if (ct.includes(type))
201
+ return type;
202
+ }
203
+ return null;
204
+ }
205
+ /**
206
+ * Content negotiation — which of the offered types does the client accept,
207
+ * honouring RFC 7231 §5.3.2 quality values?
208
+ *
209
+ * Walks the parsed Accept header in descending q-order and returns the
210
+ * first server-offered type that matches. The server's preference order
211
+ * (`types` argument) is the tiebreaker only when multiple client entries
212
+ * share the same q. A bare `accepts(types)` therefore respects the
213
+ * client's stated priorities (`application/json;q=0.9, text/html;q=0.1`
214
+ * beats a server passing `['html', 'json']`).
215
+ *
216
+ * Aliases (`'json'` ↔ `application/json`, `'html'` ↔ `text/html`,
217
+ * `'xml'` ↔ any subtype containing `xml`) are honoured.
218
+ */
219
+ accepts(types) {
220
+ const header = this.#raw.headers.accept ?? '*/*';
221
+ const entries = parseAcceptHeader(header);
222
+ if (entries.length === 0)
223
+ return null;
224
+ // Group by q so the highest q always wins; within one q-bucket, server
225
+ // offer order is the tiebreaker (devs control that order intentionally).
226
+ const buckets = bucketByQ(entries);
227
+ for (const bucket of buckets) {
228
+ for (const type of types) {
229
+ for (const entry of bucket) {
230
+ if (acceptMatches(entry.value, type))
231
+ return type;
232
+ }
233
+ }
234
+ }
235
+ return null;
236
+ }
237
+ /**
238
+ * Language negotiation from Accept-Language honouring RFC 4647 / 7231
239
+ * quality values. Returns the first offered language whose tag (or its
240
+ * primary subtag) matches the highest-q client entry, falling back to
241
+ * `langs[0]` when nothing matches and the client header is empty/absent.
242
+ */
243
+ language(langs) {
244
+ const header = this.#raw.headers['accept-language'] ?? '';
245
+ if (!header.trim())
246
+ return langs[0] ?? null;
247
+ const entries = parseAcceptHeader(header);
248
+ if (entries.length === 0)
249
+ return null;
250
+ const buckets = bucketByQ(entries);
251
+ for (const bucket of buckets) {
252
+ for (const lang of langs) {
253
+ for (const entry of bucket) {
254
+ if (languageMatches(entry.value, lang))
255
+ return lang;
256
+ }
257
+ }
258
+ }
259
+ return null;
260
+ }
261
+ // ─── Internals ────────────────────────────────────────────
262
+ // ─── Files ─────────────────────────────────────────────────
263
+ /** Get an uploaded file by field name. */
264
+ file(fieldName, options) {
265
+ const files = this.#files.get(fieldName);
266
+ if (!files || files.length === 0)
267
+ return null;
268
+ const file = files[0];
269
+ if (options)
270
+ file.validate(options);
271
+ return file;
272
+ }
273
+ /** Get all uploaded files for a field name. */
274
+ files(fieldName, options) {
275
+ const files = this.#files.get(fieldName) ?? [];
276
+ if (options) {
277
+ for (const f of files)
278
+ f.validate(options);
279
+ }
280
+ return files;
281
+ }
282
+ /** Get all uploaded files. */
283
+ allFiles() {
284
+ return this.#files;
285
+ }
286
+ /**
287
+ * Pre-parsed `multipart/form-data` payload as the HyperServer wrote it.
288
+ * Returns `undefined` when the request wasn't multipart (or the test
289
+ * fixture didn't fill the field). BodyParser hydrates `MultipartFile`
290
+ * instances from this — application code should keep using
291
+ * `request.file()` / `request.files()`.
292
+ */
293
+ multipart() {
294
+ return this.#raw.multipart;
295
+ }
296
+ /** @internal Set files (called by BodyParser middleware). */
297
+ setFiles(files) {
298
+ this.#files.clear();
299
+ for (const file of files) {
300
+ const existing = this.#files.get(file.fieldName) ?? [];
301
+ existing.push(file);
302
+ this.#files.set(file.fieldName, existing);
303
+ }
304
+ }
305
+ // ─── Internals ────────────────────────────────────────────
306
+ /** @internal Set the parsed body (called by BodyParser middleware). */
307
+ setParsedBody(body) {
308
+ this.#parsedBody = body;
309
+ this.#merged = undefined; // reset merged cache
310
+ }
311
+ #ensureParsedBody() {
312
+ if (this.#parsedBody !== undefined)
313
+ return;
314
+ const raw = this.#raw.body;
315
+ if (!raw || raw.length === 0) {
316
+ this.#parsedBody = {};
317
+ return;
318
+ }
319
+ try {
320
+ const parsed = JSON.parse(raw);
321
+ this.#parsedBody = isPlainObject(parsed) ? parsed : { _body: parsed };
322
+ }
323
+ catch {
324
+ this.#parsedBody = {};
325
+ }
326
+ }
327
+ }
328
+ /** Parse a query string (key=value&key2=value2) into an object. */
329
+ /**
330
+ * Test whether an IPv4 address is within a CIDR range. Bare IP entries
331
+ * (`10.0.0.42`) are accepted as `/32`. IPv6 falls back to string equality
332
+ * — a full v6 implementation isn't required by the current security tests.
333
+ */
334
+ /**
335
+ * Type guard for plain JSON-decoded objects. Excludes `null` (which is
336
+ * `typeof === 'object'`) and arrays so consumers can index by string key
337
+ * without a separate runtime check.
338
+ */
339
+ function isPlainObject(value) {
340
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
341
+ }
342
+ /**
343
+ * Decode a percent-encoded segment without throwing on malformed input.
344
+ * Browsers happily send `q=%E0%A4%A` (truncated UTF-8 sequences) — refusing
345
+ * the whole request would let any client knock the route handler offline.
346
+ */
347
+ function safeDecode(value) {
348
+ try {
349
+ return decodeURIComponent(value);
350
+ }
351
+ catch {
352
+ return value;
353
+ }
354
+ }
355
+ function parseQueryString(qs) {
356
+ if (!qs)
357
+ return {};
358
+ const result = {};
359
+ for (const pair of qs.split('&')) {
360
+ const eqIdx = pair.indexOf('=');
361
+ if (eqIdx === -1) {
362
+ result[safeDecode(pair)] = '';
363
+ }
364
+ else {
365
+ const key = safeDecode(pair.slice(0, eqIdx));
366
+ const value = safeDecode(pair.slice(eqIdx + 1));
367
+ result[key] = value;
368
+ }
369
+ }
370
+ return result;
371
+ }
372
+ /**
373
+ * Parse an Accept-style header (Accept, Accept-Language, Accept-Encoding…)
374
+ * into entries sorted by descending q-value, with the client's original
375
+ * order as a stable tiebreaker. Entries with `q=0` are dropped (RFC 7231:
376
+ * "the value 0 means not acceptable"). A bare wildcard entry is preserved.
377
+ */
378
+ function parseAcceptHeader(header) {
379
+ const entries = [];
380
+ let index = 0;
381
+ for (const raw of header.split(',')) {
382
+ const part = raw.trim();
383
+ if (!part)
384
+ continue;
385
+ const [valueRaw, ...params] = part.split(';');
386
+ const value = (valueRaw ?? '').trim().toLowerCase();
387
+ if (!value)
388
+ continue;
389
+ let q = 1;
390
+ for (const param of params) {
391
+ const [k, v] = param.split('=');
392
+ if ((k ?? '').trim().toLowerCase() === 'q') {
393
+ const parsed = Number.parseFloat((v ?? '').trim());
394
+ if (Number.isFinite(parsed))
395
+ q = parsed;
396
+ }
397
+ }
398
+ if (q <= 0)
399
+ continue;
400
+ entries.push({ value, q, index });
401
+ index += 1;
402
+ }
403
+ entries.sort((a, b) => b.q - a.q || a.index - b.index);
404
+ return entries;
405
+ }
406
+ /**
407
+ * Match an Accept entry value (already lowercased) against an offered
408
+ * type. Honours short aliases (`json` ↔ `application/json`, `html` ↔
409
+ * `text/html`, `xml` ↔ any subtype containing `xml`) and the full
410
+ * wildcard (matches anything). A `type/<wildcard>` entry matches any
411
+ * subtype with the same primary type.
412
+ */
413
+ function acceptMatches(entry, offered) {
414
+ if (entry === '*/*' || entry === '*')
415
+ return true;
416
+ const o = offered.trim().toLowerCase();
417
+ if (entry === o)
418
+ return true;
419
+ // Expand short aliases to their canonical media-type so the wildcard
420
+ // and exact-match checks below see the full type.
421
+ const expanded = expandAlias(o);
422
+ if (expanded && entry === expanded)
423
+ return true;
424
+ if (o === 'xml' && entry.includes('xml'))
425
+ return true;
426
+ // type/<wildcard> entry (e.g. `text/*` matches `text/html`).
427
+ if (entry.endsWith('/*')) {
428
+ const prefix = entry.slice(0, -1); // keep trailing slash
429
+ if (expanded?.startsWith(prefix))
430
+ return true;
431
+ return o.startsWith(prefix);
432
+ }
433
+ return false;
434
+ }
435
+ function expandAlias(short) {
436
+ if (short === 'json')
437
+ return 'application/json';
438
+ if (short === 'html')
439
+ return 'text/html';
440
+ if (short === 'text')
441
+ return 'text/plain';
442
+ if (short === 'form')
443
+ return 'application/x-www-form-urlencoded';
444
+ if (short === 'multipart')
445
+ return 'multipart/form-data';
446
+ return null;
447
+ }
448
+ function bucketByQ(entries) {
449
+ const buckets = [];
450
+ let current = [];
451
+ let lastQ = Number.POSITIVE_INFINITY;
452
+ for (const entry of entries) {
453
+ if (entry.q !== lastQ) {
454
+ if (current.length > 0)
455
+ buckets.push(current);
456
+ current = [];
457
+ lastQ = entry.q;
458
+ }
459
+ current.push(entry);
460
+ }
461
+ if (current.length > 0)
462
+ buckets.push(current);
463
+ return buckets;
464
+ }
465
+ /**
466
+ * Language tag match. Returns true when the Accept-Language entry equals
467
+ * the offered tag (case-insensitive), or when the entry's primary subtag
468
+ * matches the offered tag (RFC 4647 basic filtering: `en` matches `en-US`
469
+ * but not vice versa). Wildcard `*` matches anything.
470
+ */
471
+ function languageMatches(entry, offered) {
472
+ if (entry === '*')
473
+ return true;
474
+ const o = offered.trim().toLowerCase();
475
+ if (entry === o)
476
+ return true;
477
+ if (entry.startsWith(`${o}-`))
478
+ return true;
479
+ const primary = entry.split('-')[0];
480
+ if (primary && primary === o.split('-')[0])
481
+ return true;
482
+ return false;
483
+ }
484
+ //# sourceMappingURL=Request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Request.js","sourceRoot":"","sources":["../../src/http/Request.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Response — accumulates HTTP response state with a fluent API.
3
+ *
4
+ * Wraps the same { status, headers, body } wire format expected by the NAPI layer.
5
+ * Provides AdonisJS-compatible methods: json(), send(), status(), header(), etc.
6
+ *
7
+ * @implements FR21
8
+ */
9
+ import type { RedirectBuilder } from './RedirectBuilder.js';
10
+ import { type SseStream, type SseStreamOptions, type StreamBackend } from './SseStream.js';
11
+ export declare class Response {
12
+ #private;
13
+ /**
14
+ * CSP nonce for this request (AdonisJS idiom: `response.nonce`). Seeded by
15
+ * the `@c9up/blackhole` middleware when the CSP uses `@nonce`; `undefined`
16
+ * otherwise. Also published to `ctx.store` as `cspNonce` for templating.
17
+ */
18
+ nonce?: string;
19
+ /** Set the HTTP status code. Chainable. */
20
+ status(code: number): this;
21
+ /** Set status only if not already set (still 200). */
22
+ safeStatus(code: number): this;
23
+ /** Set a response header. Chainable. */
24
+ header(key: string, value: string): this;
25
+ /** Append to a response header (for multi-value like Set-Cookie). */
26
+ append(key: string, value: string): this;
27
+ /** Remove a response header. */
28
+ removeHeader(key: string): this;
29
+ /** Set the Content-Type header. Chainable. */
30
+ type(contentType: string): this;
31
+ /** Send a JSON response. Sets content-type and stringifies. */
32
+ json(data: unknown): void;
33
+ /** Send a response body. Auto-detects content type if not set. */
34
+ send(data: unknown): void;
35
+ /**
36
+ * Send a binary body as-is. Encodes to base64 across the NAPI bridge
37
+ * with the `x-ream-body-encoding: base64` marker so the Rust HTTP
38
+ * layer decodes it before writing to the socket. The marker header is
39
+ * stripped server-side and never leaks to the client.
40
+ *
41
+ * Use this for any non-UTF-8 payload (images, PDFs, archives, etc.) —
42
+ * `send()` auto-routes Buffers here, but call directly when intent is
43
+ * unambiguous.
44
+ */
45
+ sendBuffer(buffer: Buffer): void;
46
+ /** Send 204 No Content. */
47
+ noContent(): void;
48
+ /** Get a redirect builder. */
49
+ redirect(): RedirectBuilder;
50
+ /** @internal Set the redirect builder factory (injected by HttpContext). */
51
+ setRedirectFactory(factory: () => RedirectBuilder): void;
52
+ /** @internal Wire the SSE backend (HyperServer NAPI). Injected by HttpKernel. */
53
+ setStreamBackend(backend: StreamBackend): void;
54
+ /**
55
+ * Open a Server-Sent Events stream. The returned `SseStream` lets the
56
+ * handler push named events for as long as the client stays
57
+ * connected. Headers are pre-set to the SSE wire format; the host
58
+ * router serializes the response with the reserved stream id so the
59
+ * Rust HyperServer keeps the connection open.
60
+ *
61
+ * const sse = await ctx.response.sse()
62
+ * sse.send('connected', { uid: caller.id })
63
+ * onTaskAssigned((evt) => sse.send('task.assigned', evt))
64
+ *
65
+ * Throws `STREAMING_UNSUPPORTED` if the underlying HyperServer host
66
+ * does not implement the streaming NAPI (e.g. a mock server in unit
67
+ * tests). The host capability is opt-in: implement
68
+ * `registerStream`/`writeStream`/`closeStream`/`onStreamDisconnect`
69
+ * to participate.
70
+ */
71
+ sse(options?: SseStreamOptions): Promise<SseStream>;
72
+ /** Set a response cookie. */
73
+ cookie(name: string, value: string, options?: {
74
+ maxAge?: number;
75
+ path?: string;
76
+ httpOnly?: boolean;
77
+ secure?: boolean;
78
+ sameSite?: 'lax' | 'strict' | 'none';
79
+ }): this;
80
+ /** @internal Get the accumulated status code. */
81
+ getStatus(): number;
82
+ /** @internal Get all accumulated headers (Set-Cookie as separate entries joined by newline). */
83
+ getHeaders(): Record<string, string>;
84
+ /**
85
+ * Read a single accumulated response header by name (case-insensitive).
86
+ * Returns `undefined` when not set — used by middleware that conditionally
87
+ * inspects the outgoing content-type before sanitisation.
88
+ */
89
+ getHeader(name: string): string | undefined;
90
+ /** @internal Get the accumulated body string. */
91
+ getBody(): string;
92
+ /** @internal Check if response has been finalized. */
93
+ isFinished(): boolean;
94
+ /** @internal Set body directly (used by redirect, exception handler). */
95
+ setBody(body: string): void;
96
+ /**
97
+ * @internal Streaming-response handle, set by `sse()`. The host
98
+ * router forwards this id to the Rust HyperServer so the connection
99
+ * stays open and chunks flow from the JS-side writer.
100
+ */
101
+ getStreamId(): string | undefined;
102
+ /**
103
+ * @internal Tear down a stream the handler opened via `sse()` but
104
+ * then abandoned by throwing. Closes the backend registry slot and
105
+ * clears the stream id + finished flag so the kernel's error path
106
+ * serializes a normal buffered error response instead of emitting
107
+ * `streamId` alongside an error body (which would leave the
108
+ * HyperServer feeding a dead/empty stream forever). Best-effort: a
109
+ * closeStream failure is swallowed — the slot's TTL/disconnect will
110
+ * reclaim it.
111
+ */
112
+ abortStream(): Promise<void>;
113
+ }
114
+ //# sourceMappingURL=Response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../../src/http/Response.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,gBAAgB,CAAA;AAgBvB,qBAAa,QAAQ;;IAUnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IAId,2CAA2C;IAC3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,sDAAsD;IACtD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAS9B,wCAAwC;IACxC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC,qEAAqE;IACrE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAgBxC,gCAAgC;IAChC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK/B,8CAA8C;IAC9C,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAU/B,+DAA+D;IAC/D,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzB,kEAAkE;IAClE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAwBzB;;;;;;;;;OASG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC,2BAA2B;IAC3B,SAAS,IAAI,IAAI;IAQjB,8BAA8B;IAC9B,QAAQ,IAAI,eAAe;IAS3B,4EAA4E;IAC5E,kBAAkB,CAAC,OAAO,EAAE,MAAM,eAAe,GAAG,IAAI;IAIxD,iFAAiF;IACjF,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAM9C;;;;;;;;;;;;;;;;OAgBG;IACG,GAAG,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,SAAS,CAAC;IA2BzD,6BAA6B;IAC7B,MAAM,CACJ,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,OAAO,CAAA;QAClB,MAAM,CAAC,EAAE,OAAO,CAAA;QAChB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KACrC,GACA,IAAI;IAkCP,iDAAiD;IACjD,SAAS,IAAI,MAAM;IAInB,gGAAgG;IAChG,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IASpC;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3C,iDAAiD;IACjD,OAAO,IAAI,MAAM;IAIjB,sDAAsD;IACtD,UAAU,IAAI,OAAO;IAIrB,yEAAyE;IACzE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK3B;;;;OAIG;IACH,WAAW,IAAI,MAAM,GAAG,SAAS;IAIjC;;;;;;;;;OASG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAanC"}