@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,63 @@
1
+ /**
2
+ * Signed URLs — HMAC-SHA256 with expiration.
3
+ * Uses Rust NAPI via crypto facade when available.
4
+ */
5
+ import { constantTimeEq, hmacSign } from './crypto.js';
6
+ export class SignedUrl {
7
+ #secret;
8
+ constructor(config) {
9
+ this.#secret = config.secret;
10
+ }
11
+ make(path, options) {
12
+ const url = new URL(path, 'http://localhost');
13
+ // Audit 2026-05-22: `expiresIn !== undefined` instead of truthy check.
14
+ // `expiresIn: 0` previously fell through the falsy branch and produced
15
+ // an URL with no `expires` param — a never-expiring signed URL when the
16
+ // caller explicitly asked for "expires immediately". The new check
17
+ // honours 0 (and any other numeric input) by stamping the expires param;
18
+ // verify() then rejects it as soon as the wall clock advances.
19
+ if (options?.expiresIn !== undefined) {
20
+ url.searchParams.set('expires', String(Math.floor(Date.now() / 1000) + parseExpiry(options.expiresIn)));
21
+ }
22
+ if (options?.purpose) {
23
+ url.searchParams.set('purpose', options.purpose);
24
+ }
25
+ url.searchParams.set('signature', hmacSign(url.pathname + url.search, this.#secret));
26
+ return url.pathname + url.search;
27
+ }
28
+ verify(urlString, purpose) {
29
+ const url = new URL(urlString, 'http://localhost');
30
+ const providedSig = url.searchParams.get('signature');
31
+ if (!providedSig)
32
+ return false;
33
+ const expires = url.searchParams.get('expires');
34
+ if (expires && Math.floor(Date.now() / 1000) > parseInt(expires, 10))
35
+ return false;
36
+ if (purpose && url.searchParams.get('purpose') !== purpose)
37
+ return false;
38
+ url.searchParams.delete('signature');
39
+ const expectedSig = hmacSign(url.pathname + url.search, this.#secret);
40
+ return constantTimeEq(providedSig, expectedSig);
41
+ }
42
+ }
43
+ function parseExpiry(value) {
44
+ if (typeof value === 'number')
45
+ return value;
46
+ const match = value.match(/^(\d+)(s|m|h|d)$/);
47
+ if (!match)
48
+ return 3600;
49
+ const num = parseInt(match[1], 10);
50
+ switch (match[2]) {
51
+ case 's':
52
+ return num;
53
+ case 'm':
54
+ return num * 60;
55
+ case 'h':
56
+ return num * 3600;
57
+ case 'd':
58
+ return num * 86400;
59
+ default:
60
+ return 3600;
61
+ }
62
+ }
63
+ //# sourceMappingURL=SignedUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SignedUrl.js","sourceRoot":"","sources":["../../src/security/SignedUrl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Crypto facade — resolves Rust NAPI bindings at load time.
3
+ * If the binary isn't available, falls back to Node.js crypto.
4
+ *
5
+ * Usage:
6
+ * import { hmacSign, hmacVerify, randomHex, constantTimeEq } from './crypto.js'
7
+ */
8
+ interface NapiCrypto {
9
+ hmacSign(data: string, secret: string): string;
10
+ hmacVerify(data: string, signature: string, secret: string): boolean;
11
+ randomBytesBase64(len: number): string;
12
+ randomHex(len: number): string;
13
+ constantTimeEq(a: string, b: string): boolean;
14
+ }
15
+ /** @internal Set the NAPI bindings (called once by the NAPI loader). */
16
+ export declare function setNapi(bindings: NapiCrypto): void;
17
+ /** Check if Rust NAPI crypto is available. */
18
+ export declare function hasNativeCrypto(): boolean;
19
+ export declare function hmacSign(data: string, secret: string): string;
20
+ export declare function hmacVerify(data: string, signature: string, secret: string): boolean;
21
+ export declare function randomBytesBase64(len: number): string;
22
+ export declare function randomHex(len: number): string;
23
+ export declare function constantTimeEq(a: string, b: string): boolean;
24
+ export {};
25
+ //# sourceMappingURL=crypto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/security/crypto.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,UAAU,UAAU;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;IACpE,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IACtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAC9C;AAcD,wEAAwE;AACxE,wBAAgB,OAAO,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,CAElD;AAED,8CAA8C;AAC9C,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAID,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOnF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAM5D"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Crypto facade — resolves Rust NAPI bindings at load time.
3
+ * If the binary isn't available, falls back to Node.js crypto.
4
+ *
5
+ * Usage:
6
+ * import { hmacSign, hmacVerify, randomHex, constantTimeEq } from './crypto.js'
7
+ */
8
+ import { createHmac, randomBytes as nodeRandomBytes, timingSafeEqual } from 'node:crypto';
9
+ let napi = null;
10
+ try {
11
+ // Optional pre-install path: a NAPI loader may set `globalThis.__reamNapi`
12
+ // before this module loads. We validate the shape rather than declare a
13
+ // global `var`, so the loader contract stays runtime-only.
14
+ const preinstalled = readPreinstalledNapi();
15
+ if (preinstalled)
16
+ napi = preinstalled;
17
+ }
18
+ catch {
19
+ /* binary not available */
20
+ }
21
+ /** @internal Set the NAPI bindings (called once by the NAPI loader). */
22
+ export function setNapi(bindings) {
23
+ napi = bindings;
24
+ }
25
+ /** Check if Rust NAPI crypto is available. */
26
+ export function hasNativeCrypto() {
27
+ return napi !== null;
28
+ }
29
+ // ─── Exports ────────────────────────────────────────────────
30
+ export function hmacSign(data, secret) {
31
+ if (napi)
32
+ return napi.hmacSign(data, secret);
33
+ return createHmac('sha256', secret).update(data).digest('base64url');
34
+ }
35
+ export function hmacVerify(data, signature, secret) {
36
+ if (napi)
37
+ return napi.hmacVerify(data, signature, secret);
38
+ const expected = createHmac('sha256', secret).update(data).digest('base64url');
39
+ const a = Buffer.from(signature);
40
+ const b = Buffer.from(expected);
41
+ if (a.length !== b.length)
42
+ return false;
43
+ return timingSafeEqual(a, b);
44
+ }
45
+ export function randomBytesBase64(len) {
46
+ if (napi)
47
+ return napi.randomBytesBase64(len);
48
+ return nodeRandomBytes(len).toString('base64url');
49
+ }
50
+ export function randomHex(len) {
51
+ if (napi)
52
+ return napi.randomHex(len);
53
+ return nodeRandomBytes(len).toString('hex');
54
+ }
55
+ export function constantTimeEq(a, b) {
56
+ if (napi)
57
+ return napi.constantTimeEq(a, b);
58
+ const bufA = Buffer.from(a);
59
+ const bufB = Buffer.from(b);
60
+ if (bufA.length !== bufB.length)
61
+ return false;
62
+ return timingSafeEqual(bufA, bufB);
63
+ }
64
+ function readPreinstalledNapi() {
65
+ // `globalThis` is typed without an index signature, so we go through Reflect
66
+ // and validate the shape downstream — no global `var` declaration needed.
67
+ const candidate = Reflect.get(globalThis, '__reamNapi');
68
+ return isNapiCrypto(candidate) ? candidate : null;
69
+ }
70
+ function isNapiCrypto(value) {
71
+ if (typeof value !== 'object' || value === null)
72
+ return false;
73
+ return (hasFn(value, 'hmacSign') &&
74
+ hasFn(value, 'hmacVerify') &&
75
+ hasFn(value, 'randomBytesBase64') &&
76
+ hasFn(value, 'randomHex') &&
77
+ hasFn(value, 'constantTimeEq'));
78
+ }
79
+ function hasFn(value, key) {
80
+ return key in value && typeof Reflect.get(value, key) === 'function';
81
+ }
82
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/security/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import type { HttpKernelRequest, HttpKernelResponse } from '../HttpKernel.js';
2
+ /**
3
+ * Wire-level shield configuration handed off to the Rust filter at boot.
4
+ * Each flag toggles one rule on/off; they all default to true on the Rust
5
+ * side, so omitting `configureShield()` entirely leaves the server with no
6
+ * filter installed.
7
+ */
8
+ export interface RustShieldConfig {
9
+ pathTraversal: boolean;
10
+ paramPollution: boolean;
11
+ }
12
+ export interface RustRateLimitConfig {
13
+ max: number;
14
+ windowSecs: number;
15
+ }
16
+ export interface HyperServerLike {
17
+ onRequest(callback: (request: HttpKernelRequest) => Promise<HttpKernelResponse>): void;
18
+ configureShield(config: RustShieldConfig): void;
19
+ configureTrustedProxies(cidrs: string[]): void;
20
+ configureRateLimit(config: RustRateLimitConfig | null): void;
21
+ listen(): Promise<void>;
22
+ port(): Promise<number>;
23
+ close(): Promise<void>;
24
+ /**
25
+ * Reserve a streaming-response slot. The handler must call this and
26
+ * pass the returned id back inside `HttpKernelResponse.streamId`
27
+ * BEFORE returning, so the hyper-side response builder can feed the
28
+ * body from the matching registry entry.
29
+ */
30
+ registerStream(streamId: string): Promise<boolean>;
31
+ /**
32
+ * Push a UTF-8 chunk onto a registered stream. Returns `false` once
33
+ * the client has disconnected — callers stop pushing.
34
+ */
35
+ writeStream(streamId: string, chunk: string): Promise<boolean>;
36
+ /**
37
+ * End a stream from the server side. Idempotent.
38
+ */
39
+ closeStream(streamId: string): Promise<boolean>;
40
+ /**
41
+ * Install a one-shot callback fired the moment the matching stream
42
+ * receiver is dropped — i.e. the client disconnected OR
43
+ * `closeStream` was called. Used by the JS SDK to drop bookkeeping
44
+ * for subscriptions and SSE viewers.
45
+ */
46
+ onStreamDisconnect(streamId: string, callback: () => void): void;
47
+ }
48
+ /** HyperServer — Rust-powered HTTP server. */
49
+ export declare class HyperServer implements HyperServerLike {
50
+ #private;
51
+ constructor(port: number);
52
+ onRequest(callback: (request: HttpKernelRequest) => Promise<HttpKernelResponse>): void;
53
+ configureShield(config: RustShieldConfig): void;
54
+ configureTrustedProxies(cidrs: string[]): void;
55
+ configureRateLimit(config: RustRateLimitConfig | null): void;
56
+ listen(): Promise<void>;
57
+ port(): Promise<number>;
58
+ close(): Promise<void>;
59
+ registerStream(streamId: string): Promise<boolean>;
60
+ writeStream(streamId: string, chunk: string): Promise<boolean>;
61
+ closeStream(streamId: string): Promise<boolean>;
62
+ onStreamDisconnect(streamId: string, callback: () => void): void;
63
+ }
64
+ //# sourceMappingURL=HyperServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperServer.d.ts","sourceRoot":"","sources":["../../src/server/HyperServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAG7E;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAA;IACtB,cAAc,EAAE,OAAO,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAA;IACtF,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAA;IAC/C,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IAC9C,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI,CAAA;IAC5D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACvB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/C;;;;;OAKG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;CACjE;AAkBD,8CAA8C;AAC9C,qBAAa,WAAY,YAAW,eAAe;;gBAGrC,IAAI,EAAE,MAAM;IAKxB,SAAS,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI;IAItF,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAI/C,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9C,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,GAAG,IAAI;IAI5D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI9D,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI/C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAGjE"}
@@ -0,0 +1,54 @@
1
+ import { loadNapi } from '../helpers/napi-loader.js';
2
+ let native;
3
+ function loadNative() {
4
+ if (native)
5
+ return native;
6
+ native = loadNapi({
7
+ binaryName: 'index',
8
+ callerMetaUrl: import.meta.url,
9
+ errorCodePrefix: 'HYPER_SERVER',
10
+ });
11
+ return native;
12
+ }
13
+ /** HyperServer — Rust-powered HTTP server. */
14
+ export class HyperServer {
15
+ #inner;
16
+ constructor(port) {
17
+ const mod = loadNative();
18
+ this.#inner = new mod.HyperServer(port);
19
+ }
20
+ onRequest(callback) {
21
+ this.#inner.onRequest(callback);
22
+ }
23
+ configureShield(config) {
24
+ this.#inner.configureShield(config);
25
+ }
26
+ configureTrustedProxies(cidrs) {
27
+ this.#inner.configureTrustedProxies(cidrs);
28
+ }
29
+ configureRateLimit(config) {
30
+ this.#inner.configureRateLimit(config);
31
+ }
32
+ listen() {
33
+ return this.#inner.listen();
34
+ }
35
+ port() {
36
+ return this.#inner.port();
37
+ }
38
+ close() {
39
+ return this.#inner.close();
40
+ }
41
+ registerStream(streamId) {
42
+ return this.#inner.registerStream(streamId);
43
+ }
44
+ writeStream(streamId, chunk) {
45
+ return this.#inner.writeStream(streamId, chunk);
46
+ }
47
+ closeStream(streamId) {
48
+ return this.#inner.closeStream(streamId);
49
+ }
50
+ onStreamDisconnect(streamId, callback) {
51
+ this.#inner.onStreamDisconnect(streamId, callback);
52
+ }
53
+ }
54
+ //# sourceMappingURL=HyperServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HyperServer.js","sourceRoot":"","sources":["../../src/server/HyperServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AAuDpD,IAAI,MAAgC,CAAA;AAEpC,SAAS,UAAU;IACjB,IAAI,MAAM;QAAE,OAAO,MAAM,CAAA;IACzB,MAAM,GAAG,QAAQ,CAAe;QAC9B,UAAU,EAAE,OAAO;QACnB,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG;QAC9B,eAAe,EAAE,cAAc;KAChC,CAAC,CAAA;IACF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,8CAA8C;AAC9C,MAAM,OAAO,WAAW;IACtB,MAAM,CAAiB;IAEvB,YAAY,IAAY;QACtB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,CAAC,QAAqE;QAC7E,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED,eAAe,CAAC,MAAwB;QACtC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,uBAAuB,CAAC,KAAe;QACrC,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAA;IAC5C,CAAC;IAED,kBAAkB,CAAC,MAAkC;QACnD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAC5B,CAAC;IAED,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC7C,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,KAAa;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IACjD,CAAC;IAED,WAAW,CAAC,QAAgB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAA;IAC1C,CAAC;IAED,kBAAkB,CAAC,QAAgB,EAAE,QAAoB;QACvD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACpD,CAAC;CACF"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Server — manages HTTP server middleware, error handler, and router.
3
+ *
4
+ * Like AdonisJS Server class:
5
+ * - server.use([() => import('#middleware/...')]) — lazy class middleware
6
+ * - server.errorHandler(() => import('#exceptions/handler')) — custom exception handler
7
+ */
8
+ import type { ExceptionHandler } from '../http/Exception.js';
9
+ import type { HttpContext } from '../http/HttpContext.js';
10
+ import type { MiddlewareFunction } from '../middleware/Pipeline.js';
11
+ import type { Router } from '../router/Router.js';
12
+ /**
13
+ * A middleware class with a handle method.
14
+ * This is the pattern used by AdonisJS middleware.
15
+ */
16
+ export interface MiddlewareClass {
17
+ handle(ctx: HttpContext, next: () => Promise<void>): Promise<void> | void;
18
+ }
19
+ /** Lazy import returning a module with a default export. */
20
+ export type LazyImport<T> = () => Promise<{
21
+ default: T;
22
+ }>;
23
+ export type ErrorHandlerClass = new (...args: any[]) => ExceptionHandler;
24
+ type MiddlewareClassConstructor = new (...args: any[]) => MiddlewareClass;
25
+ /** What server.use() and router.use() accept: lazy imports or direct functions. */
26
+ export type MiddlewareEntry = LazyImport<MiddlewareClassConstructor> | MiddlewareFunction;
27
+ export declare class Server {
28
+ #private;
29
+ constructor(router: Router);
30
+ /**
31
+ * Configure the trusted-proxy CIDR list. The Rust HyperServer uses it to
32
+ * pre-resolve `request.ip` once per request — JS reads the field, no CIDR
33
+ * matching in TS.
34
+ *
35
+ * Empty list (default, 2026-05+) is **strict fail-closed**: `X-Forwarded-For`
36
+ * and `X-Real-IP` are ignored entirely; only the socket peer is used.
37
+ * Apps deployed behind a reverse proxy must list the proxy's CIDR
38
+ * (`'10.0.0.0/8'`, `'192.0.2.0/24'`, etc.) or pass the `'*'` sentinel
39
+ * for permissive mode (accepts spoofing as the explicit trade-off when
40
+ * proxy CIDRs can't be enumerated).
41
+ */
42
+ trustedProxies(cidrs: string[]): this;
43
+ /** Read the current trusted-proxy list (consumed by Ignitor at boot). */
44
+ getTrustedProxies(): readonly string[];
45
+ /**
46
+ * Register global server middleware.
47
+ * Accepts lazy imports of middleware classes (AdonisJS pattern):
48
+ * server.use([() => import('#middleware/log_request_middleware')])
49
+ */
50
+ use(middleware: MiddlewareEntry[]): this;
51
+ /**
52
+ * Register a custom error handler.
53
+ * server.errorHandler(() => import('#exceptions/handler'))
54
+ */
55
+ errorHandler(handler: LazyImport<ErrorHandlerClass>): this;
56
+ /** Boot — resolve the error handler. Called by Ignitor during ready phase. */
57
+ boot(): Promise<void>;
58
+ getServerMiddleware(): MiddlewareFunction[];
59
+ getErrorHandler(): ExceptionHandler | undefined;
60
+ getRouter(): Router;
61
+ }
62
+ /**
63
+ * Convert a MiddlewareEntry (lazy import or function) into a MiddlewareFunction.
64
+ * Lazy imports are resolved on first call and cached.
65
+ */
66
+ export declare function resolveMiddlewareEntry(entry: MiddlewareEntry): MiddlewareFunction;
67
+ export {};
68
+ //# sourceMappingURL=Server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.d.ts","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAEjD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAC1E;AAED,4DAA4D;AAC5D,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,OAAO,CAAC;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAAC,CAAA;AAGzD,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,gBAAgB,CAAA;AAGxE,KAAK,0BAA0B,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,eAAe,CAAA;AAEzE,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,0BAA0B,CAAC,GAAG,kBAAkB,CAAA;AAEzF,qBAAa,MAAM;;gBAOL,MAAM,EAAE,MAAM;IAI1B;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAKrC,yEAAyE;IACzE,iBAAiB,IAAI,SAAS,MAAM,EAAE;IAItC;;;;OAIG;IACH,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI;IAOxC;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAK1D,8EAA8E;IACxE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,mBAAmB,IAAI,kBAAkB,EAAE;IAI3C,eAAe,IAAI,gBAAgB,GAAG,SAAS;IAI/C,SAAS,IAAI,MAAM;CAGpB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,CAiBjF"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Server — manages HTTP server middleware, error handler, and router.
3
+ *
4
+ * Like AdonisJS Server class:
5
+ * - server.use([() => import('#middleware/...')]) — lazy class middleware
6
+ * - server.errorHandler(() => import('#exceptions/handler')) — custom exception handler
7
+ */
8
+ export class Server {
9
+ #router;
10
+ #serverMiddleware = [];
11
+ #errorHandlerImporter;
12
+ #resolvedErrorHandler;
13
+ #trustedProxies = [];
14
+ constructor(router) {
15
+ this.#router = router;
16
+ }
17
+ /**
18
+ * Configure the trusted-proxy CIDR list. The Rust HyperServer uses it to
19
+ * pre-resolve `request.ip` once per request — JS reads the field, no CIDR
20
+ * matching in TS.
21
+ *
22
+ * Empty list (default, 2026-05+) is **strict fail-closed**: `X-Forwarded-For`
23
+ * and `X-Real-IP` are ignored entirely; only the socket peer is used.
24
+ * Apps deployed behind a reverse proxy must list the proxy's CIDR
25
+ * (`'10.0.0.0/8'`, `'192.0.2.0/24'`, etc.) or pass the `'*'` sentinel
26
+ * for permissive mode (accepts spoofing as the explicit trade-off when
27
+ * proxy CIDRs can't be enumerated).
28
+ */
29
+ trustedProxies(cidrs) {
30
+ this.#trustedProxies = [...cidrs];
31
+ return this;
32
+ }
33
+ /** Read the current trusted-proxy list (consumed by Ignitor at boot). */
34
+ getTrustedProxies() {
35
+ return this.#trustedProxies;
36
+ }
37
+ /**
38
+ * Register global server middleware.
39
+ * Accepts lazy imports of middleware classes (AdonisJS pattern):
40
+ * server.use([() => import('#middleware/log_request_middleware')])
41
+ */
42
+ use(middleware) {
43
+ for (const mw of middleware) {
44
+ this.#serverMiddleware.push(resolveMiddlewareEntry(mw));
45
+ }
46
+ return this;
47
+ }
48
+ /**
49
+ * Register a custom error handler.
50
+ * server.errorHandler(() => import('#exceptions/handler'))
51
+ */
52
+ errorHandler(handler) {
53
+ this.#errorHandlerImporter = handler;
54
+ return this;
55
+ }
56
+ /** Boot — resolve the error handler. Called by Ignitor during ready phase. */
57
+ async boot() {
58
+ if (this.#errorHandlerImporter) {
59
+ const mod = await this.#errorHandlerImporter();
60
+ const HandlerClass = mod.default;
61
+ this.#resolvedErrorHandler = new HandlerClass();
62
+ }
63
+ }
64
+ getServerMiddleware() {
65
+ return [...this.#serverMiddleware];
66
+ }
67
+ getErrorHandler() {
68
+ return this.#resolvedErrorHandler;
69
+ }
70
+ getRouter() {
71
+ return this.#router;
72
+ }
73
+ }
74
+ /**
75
+ * Convert a MiddlewareEntry (lazy import or function) into a MiddlewareFunction.
76
+ * Lazy imports are resolved on first call and cached.
77
+ */
78
+ export function resolveMiddlewareEntry(entry) {
79
+ // Direct middleware function (2 params: ctx, next)
80
+ if (isMiddlewareFunction(entry)) {
81
+ return entry;
82
+ }
83
+ // Lazy import of a middleware class — resolve + cache on first invocation
84
+ // After isMiddlewareFunction returns false, entry is narrowed to LazyImport<MiddlewareClassConstructor>
85
+ const lazyImport = entry;
86
+ let cached;
87
+ return async (ctx, next) => {
88
+ if (!cached) {
89
+ const mod = await lazyImport();
90
+ cached = new mod.default();
91
+ }
92
+ await cached.handle(ctx, next);
93
+ };
94
+ }
95
+ /** Check if an entry is a direct middleware function (not a lazy import). */
96
+ function isMiddlewareFunction(entry) {
97
+ // A lazy import factory returns a promise (dynamic import). Middleware functions don't.
98
+ // We check: if calling it with no args returns a thenable, it's a lazy import.
99
+ // Better heuristic: lazy imports are () => import(...) which have .length === 0
100
+ // and middleware functions have .length >= 2 (ctx, next).
101
+ // Edge case: arrow with defaults has length 1. But lazy import() always has length 0.
102
+ if (typeof entry !== 'function')
103
+ return false;
104
+ // Functions with 2+ params are definitely middleware
105
+ if (entry.length >= 2)
106
+ return true;
107
+ // Functions with 0 params are likely lazy imports
108
+ if (entry.length === 0)
109
+ return false;
110
+ // 1 param is ambiguous — treat as middleware (ctx only, no next)
111
+ return true;
112
+ }
113
+ //# sourceMappingURL=Server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2BH,MAAM,OAAO,MAAM;IACjB,OAAO,CAAQ;IACf,iBAAiB,GAAyB,EAAE,CAAA;IAC5C,qBAAqB,CAAgC;IACrD,qBAAqB,CAAmB;IACxC,eAAe,GAAa,EAAE,CAAA;IAE9B,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAe;QAC5B,IAAI,CAAC,eAAe,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,yEAAyE;IACzE,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,UAA6B;QAC/B,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAA;QACzD,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAsC;QACjD,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAA;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAA;YAC9C,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,CAAA;YAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,YAAY,EAAE,CAAA;QACjD,CAAC;IACH,CAAC;IAED,mBAAmB;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACpC,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,qBAAqB,CAAA;IACnC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAsB;IAC3D,mDAAmD;IACnD,IAAI,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,0EAA0E;IAC1E,wGAAwG;IACxG,MAAM,UAAU,GAAG,KAAK,CAAA;IACxB,IAAI,MAAmC,CAAA;IACvC,OAAO,KAAK,EAAE,GAAgB,EAAE,IAAyB,EAAE,EAAE;QAC3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,UAAU,EAAE,CAAA;YAC9B,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAA;QAC5B,CAAC;QACD,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAChC,CAAC,CAAA;AACH,CAAC;AAED,6EAA6E;AAC7E,SAAS,oBAAoB,CAAC,KAAsB;IAClD,wFAAwF;IACxF,+EAA+E;IAC/E,gFAAgF;IAChF,0DAA0D;IAC1D,sFAAsF;IACtF,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAA;IAC7C,qDAAqD;IACrD,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,kDAAkD;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACpC,iEAAiE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Application singleton service.
3
+ *
4
+ * Usage:
5
+ * import app from '@c9up/ream/services/app'
6
+ * const logger = app.container.make('logger')
7
+ * if (app.inProduction) { ... }
8
+ */
9
+ import type { Application } from '../Application.js';
10
+ /** @internal Set the app instance (called by Ignitor). */
11
+ export declare function setApp(app: Application): void;
12
+ declare const app: Application;
13
+ export default app;
14
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAIpD,0DAA0D;AAC1D,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAE7C;AAED,QAAA,MAAM,GAAG,EAAE,WAaT,CAAA;AAEF,eAAe,GAAG,CAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Application singleton service.
3
+ *
4
+ * Usage:
5
+ * import app from '@c9up/ream/services/app'
6
+ * const logger = app.container.make('logger')
7
+ * if (app.inProduction) { ... }
8
+ */
9
+ let instance;
10
+ /** @internal Set the app instance (called by Ignitor). */
11
+ export function setApp(app) {
12
+ instance = app;
13
+ }
14
+ const app = new Proxy({}, {
15
+ get(_target, prop) {
16
+ if (!instance) {
17
+ throw new Error('Application accessed before initialization. ' +
18
+ 'Ensure this code runs during or after the boot phase.');
19
+ }
20
+ // Bind methods so private-field writes inside the class resolve
21
+ // against the real instance brand instead of the Proxy.
22
+ const value = Reflect.get(instance, prop, instance);
23
+ return typeof value === 'function' ? value.bind(instance) : value;
24
+ },
25
+ });
26
+ export default app;
27
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/services/app.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,IAAI,QAAiC,CAAA;AAErC,0DAA0D;AAC1D,MAAM,UAAU,MAAM,CAAC,GAAgB;IACrC,QAAQ,GAAG,GAAG,CAAA;AAChB,CAAC;AAED,MAAM,GAAG,GAAgB,IAAI,KAAK,CAAC,EAAiB,EAAE;IACpD,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,8CAA8C;gBAC5C,uDAAuD,CAC1D,CAAA;QACH,CAAC;QACD,gEAAgE;QAChE,wDAAwD;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QACnD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACnE,CAAC;CACF,CAAC,CAAA;AAEF,eAAe,GAAG,CAAA"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Router singleton service — proxy to the Ignitor's router instance.
3
+ *
4
+ * Usage in module route files:
5
+ * import router from '@c9up/ream/services/router'
6
+ * router.get('/tasks', [TasksController, 'index'])
7
+ *
8
+ * The proxy is initialized by Ignitor before preload files are imported.
9
+ */
10
+ import type { Router } from '../router/Router.js';
11
+ /** @internal Set the router instance (called by Ignitor). */
12
+ export declare function setRouter(router: Router): void;
13
+ /** @internal Get the router instance directly. */
14
+ export declare function getRouter(): Router | undefined;
15
+ /**
16
+ * Router proxy — defers all property access to the underlying instance.
17
+ * Throws if accessed before Ignitor initializes it.
18
+ */
19
+ declare const router: Router;
20
+ export default router;
21
+ //# sourceMappingURL=router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/services/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAIjD,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED;;;GAGG;AACH,QAAA,MAAM,MAAM,EAAE,MAaZ,CAAA;AAEF,eAAe,MAAM,CAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Router singleton service — proxy to the Ignitor's router instance.
3
+ *
4
+ * Usage in module route files:
5
+ * import router from '@c9up/ream/services/router'
6
+ * router.get('/tasks', [TasksController, 'index'])
7
+ *
8
+ * The proxy is initialized by Ignitor before preload files are imported.
9
+ */
10
+ let instance;
11
+ /** @internal Set the router instance (called by Ignitor). */
12
+ export function setRouter(router) {
13
+ instance = router;
14
+ }
15
+ /** @internal Get the router instance directly. */
16
+ export function getRouter() {
17
+ return instance;
18
+ }
19
+ /**
20
+ * Router proxy — defers all property access to the underlying instance.
21
+ * Throws if accessed before Ignitor initializes it.
22
+ */
23
+ const router = new Proxy({}, {
24
+ get(_target, prop) {
25
+ if (!instance) {
26
+ throw new Error('Router accessed before initialization. ' +
27
+ 'Ensure your route files are loaded as preloads in reamrc.ts, not at import time.');
28
+ }
29
+ // Bind methods so private-field writes inside the class resolve
30
+ // against the real instance brand instead of the Proxy.
31
+ const value = Reflect.get(instance, prop, instance);
32
+ return typeof value === 'function' ? value.bind(instance) : value;
33
+ },
34
+ });
35
+ export default router;
36
+ //# sourceMappingURL=router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/services/router.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,IAAI,QAA4B,CAAA;AAEhC,6DAA6D;AAC7D,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,QAAQ,GAAG,MAAM,CAAA;AACnB,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,MAAM,GAAW,IAAI,KAAK,CAAC,EAAY,EAAE;IAC7C,GAAG,CAAC,OAAO,EAAE,IAAI;QACf,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,yCAAyC;gBACvC,kFAAkF,CACrF,CAAA;QACH,CAAC;QACD,gEAAgE;QAChE,wDAAwD;QACxD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QACnD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACnE,CAAC;CACF,CAAC,CAAA;AAEF,eAAe,MAAM,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Server singleton service — proxy to the Ignitor's Server instance.
3
+ *
4
+ * Usage in start/kernel.ts:
5
+ * import server from '@c9up/ream/services/server'
6
+ * server.errorHandler(() => import('#exceptions/handler'))
7
+ * server.use([() => import('#middleware/logging')])
8
+ */
9
+ import type { Server } from '../server/Server.js';
10
+ /** @internal Set the server instance (called by Ignitor). */
11
+ export declare function setServer(server: Server): void;
12
+ /** @internal Get the server instance directly. */
13
+ export declare function getServer(): Server | undefined;
14
+ declare const server: Server;
15
+ export default server;
16
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/services/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAIjD,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,kDAAkD;AAClD,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAE9C;AAED,QAAA,MAAM,MAAM,EAAE,MAcZ,CAAA;AAEF,eAAe,MAAM,CAAA"}