@rapidrest/service-core 1.0.0-rc.7 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/LICENSE +382 -23
  2. package/README.md +79 -5
  3. package/dist/lib/ApiErrors.js +10 -0
  4. package/dist/lib/ApiErrors.js.map +1 -1
  5. package/dist/lib/BackgroundService.js +1 -4
  6. package/dist/lib/BackgroundService.js.map +1 -1
  7. package/dist/lib/BackgroundServiceManager.js +47 -6
  8. package/dist/lib/BackgroundServiceManager.js.map +1 -1
  9. package/dist/lib/BulkError.js +4 -0
  10. package/dist/lib/BulkError.js.map +1 -1
  11. package/dist/lib/EventListenerManager.js +53 -18
  12. package/dist/lib/EventListenerManager.js.map +1 -1
  13. package/dist/lib/NetUtils.js +1 -0
  14. package/dist/lib/NetUtils.js.map +1 -1
  15. package/dist/lib/NotificationUtils.js +27 -8
  16. package/dist/lib/NotificationUtils.js.map +1 -1
  17. package/dist/lib/ObjectFactory.js +25 -44
  18. package/dist/lib/ObjectFactory.js.map +1 -1
  19. package/dist/lib/OpenApiSpec.js +31 -11
  20. package/dist/lib/OpenApiSpec.js.map +1 -1
  21. package/dist/lib/Server.js +74 -110
  22. package/dist/lib/Server.js.map +1 -1
  23. package/dist/lib/auth/AuthMiddleware.js +11 -16
  24. package/dist/lib/auth/AuthMiddleware.js.map +1 -1
  25. package/dist/lib/auth/JWTStrategy.js +68 -17
  26. package/dist/lib/auth/JWTStrategy.js.map +1 -1
  27. package/dist/lib/auth/index.js +0 -1
  28. package/dist/lib/auth/index.js.map +1 -1
  29. package/dist/lib/database/ConnectionKinds.js +15 -0
  30. package/dist/lib/database/ConnectionKinds.js.map +1 -1
  31. package/dist/lib/database/ConnectionManager.js +140 -61
  32. package/dist/lib/database/ConnectionManager.js.map +1 -1
  33. package/dist/lib/database/MongoConnection.js +13 -3
  34. package/dist/lib/database/MongoConnection.js.map +1 -1
  35. package/dist/lib/database/MongoRepository.js +61 -15
  36. package/dist/lib/database/MongoRepository.js.map +1 -1
  37. package/dist/lib/database/MongoSchemaSync.js +3 -3
  38. package/dist/lib/database/MongoSchemaSync.js.map +1 -1
  39. package/dist/lib/database/NamingUtils.js +3 -2
  40. package/dist/lib/database/NamingUtils.js.map +1 -1
  41. package/dist/lib/database/RedisCache.js +64 -0
  42. package/dist/lib/database/RedisCache.js.map +1 -0
  43. package/dist/lib/database/TypeOrmSupport.js +53 -13
  44. package/dist/lib/database/TypeOrmSupport.js.map +1 -1
  45. package/dist/lib/database/index.js +1 -0
  46. package/dist/lib/database/index.js.map +1 -1
  47. package/dist/lib/decorators/DatabaseDecorators.js +264 -20
  48. package/dist/lib/decorators/DatabaseDecorators.js.map +1 -1
  49. package/dist/lib/decorators/DocDecorators.js +30 -9
  50. package/dist/lib/decorators/DocDecorators.js.map +1 -1
  51. package/dist/lib/decorators/EventDecorators.js +1 -0
  52. package/dist/lib/decorators/EventDecorators.js.map +1 -1
  53. package/dist/lib/decorators/ModelDecorators.js +39 -23
  54. package/dist/lib/decorators/ModelDecorators.js.map +1 -1
  55. package/dist/lib/decorators/PersistenceDecorators.js +4 -3
  56. package/dist/lib/decorators/PersistenceDecorators.js.map +1 -1
  57. package/dist/lib/decorators/RouteDecorators.js +139 -36
  58. package/dist/lib/decorators/RouteDecorators.js.map +1 -1
  59. package/dist/lib/http/IWebSocketShim.js +2 -0
  60. package/dist/lib/http/IWebSocketShim.js.map +1 -0
  61. package/dist/lib/http/MiddlewareChain.js +167 -0
  62. package/dist/lib/http/MiddlewareChain.js.map +1 -0
  63. package/dist/lib/http/RuntimeDetect.js +9 -0
  64. package/dist/lib/http/RuntimeDetect.js.map +1 -0
  65. package/dist/lib/http/bun/BunAdapters.js +326 -0
  66. package/dist/lib/http/bun/BunAdapters.js.map +1 -0
  67. package/dist/lib/http/bun/BunRouter.js +391 -0
  68. package/dist/lib/http/bun/BunRouter.js.map +1 -0
  69. package/dist/lib/http/bun/BunWebSocket.js +49 -0
  70. package/dist/lib/http/bun/BunWebSocket.js.map +1 -0
  71. package/dist/lib/http/index.js +16 -3
  72. package/dist/lib/http/index.js.map +1 -1
  73. package/dist/lib/http/session/RedisSessionStore.js +30 -0
  74. package/dist/lib/http/session/RedisSessionStore.js.map +1 -0
  75. package/dist/lib/http/session/SessionManager.js +113 -0
  76. package/dist/lib/http/session/SessionManager.js.map +1 -0
  77. package/dist/lib/http/session/SessionStore.js +6 -0
  78. package/dist/lib/http/session/SessionStore.js.map +1 -0
  79. package/dist/lib/http/session/sessionMiddleware.js +42 -0
  80. package/dist/lib/http/session/sessionMiddleware.js.map +1 -0
  81. package/dist/lib/http/types.js +0 -3
  82. package/dist/lib/http/types.js.map +1 -1
  83. package/dist/lib/http/uWS/Adapters.js +421 -0
  84. package/dist/lib/http/uWS/Adapters.js.map +1 -0
  85. package/dist/lib/http/{Router.js → uWS/Router.js} +73 -173
  86. package/dist/lib/http/uWS/Router.js.map +1 -0
  87. package/dist/lib/http/{WebSocket.js → uWS/WebSocket.js} +4 -1
  88. package/dist/lib/http/uWS/WebSocket.js.map +1 -0
  89. package/dist/lib/models/BaseEntity.js +2 -1
  90. package/dist/lib/models/BaseEntity.js.map +1 -1
  91. package/dist/lib/models/BaseMongoEntity.js +2 -2
  92. package/dist/lib/models/BaseMongoEntity.js.map +1 -1
  93. package/dist/lib/models/ModelUtils.js +248 -101
  94. package/dist/lib/models/ModelUtils.js.map +1 -1
  95. package/dist/lib/models/RecoverableBaseEntity.js +6 -1
  96. package/dist/lib/models/RecoverableBaseEntity.js.map +1 -1
  97. package/dist/lib/models/RecoverableBaseMongoEntity.js +1 -0
  98. package/dist/lib/models/RecoverableBaseMongoEntity.js.map +1 -1
  99. package/dist/lib/models/RepoUtils.js +641 -203
  100. package/dist/lib/models/RepoUtils.js.map +1 -1
  101. package/dist/lib/models/SimpleEntity.js +1 -0
  102. package/dist/lib/models/SimpleEntity.js.map +1 -1
  103. package/dist/lib/models/SimpleMongoEntity.js +2 -1
  104. package/dist/lib/models/SimpleMongoEntity.js.map +1 -1
  105. package/dist/lib/models/StatusExtraData.js +4 -0
  106. package/dist/lib/models/StatusExtraData.js.map +1 -1
  107. package/dist/lib/routes/{AdminRoute.js → BaseAdminRoute.js} +98 -80
  108. package/dist/lib/routes/BaseAdminRoute.js.map +1 -0
  109. package/dist/lib/routes/{MetricsRoute.js → BaseMetricsRoute.js} +29 -15
  110. package/dist/lib/routes/BaseMetricsRoute.js.map +1 -0
  111. package/dist/lib/routes/{OpenAPIRoute.js → BaseOpenAPIRoute.js} +32 -32
  112. package/dist/lib/routes/BaseOpenAPIRoute.js.map +1 -0
  113. package/dist/lib/routes/BasePushRoute.js +305 -0
  114. package/dist/lib/routes/BasePushRoute.js.map +1 -0
  115. package/dist/lib/routes/BaseStaticRoute.js +153 -0
  116. package/dist/lib/routes/BaseStaticRoute.js.map +1 -0
  117. package/dist/lib/routes/BaseStatusRoute.js +80 -0
  118. package/dist/lib/routes/BaseStatusRoute.js.map +1 -0
  119. package/dist/lib/routes/CRUDRoute.js +284 -0
  120. package/dist/lib/routes/CRUDRoute.js.map +1 -0
  121. package/dist/lib/routes/ModelRoute.js +84 -57
  122. package/dist/lib/routes/ModelRoute.js.map +1 -1
  123. package/dist/lib/routes/RouteUtils.js +108 -20
  124. package/dist/lib/routes/RouteUtils.js.map +1 -1
  125. package/dist/lib/routes/index.js +7 -4
  126. package/dist/lib/routes/index.js.map +1 -1
  127. package/dist/lib/security/ACLUtils.js +297 -170
  128. package/dist/lib/security/ACLUtils.js.map +1 -1
  129. package/dist/lib/security/AccessControlList.js +18 -10
  130. package/dist/lib/security/AccessControlList.js.map +1 -1
  131. package/dist/lib/security/AccessControlListMongo.js +19 -68
  132. package/dist/lib/security/AccessControlListMongo.js.map +1 -1
  133. package/dist/lib/security/AccessControlListSQL.js +21 -70
  134. package/dist/lib/security/AccessControlListSQL.js.map +1 -1
  135. package/dist/lib/security/BaseACLRoute.js +239 -0
  136. package/dist/lib/security/BaseACLRoute.js.map +1 -0
  137. package/dist/lib/security/index.js +3 -0
  138. package/dist/lib/security/index.js.map +1 -1
  139. package/dist/lib/test/request.js +62 -5
  140. package/dist/lib/test/request.js.map +1 -1
  141. package/dist/lib/test/requestws.js +34 -10
  142. package/dist/lib/test/requestws.js.map +1 -1
  143. package/dist/types/ApiErrors.d.ts +8 -2
  144. package/dist/types/BackgroundService.d.ts +0 -5
  145. package/dist/types/BackgroundServiceManager.d.ts +2 -1
  146. package/dist/types/EventListenerManager.d.ts +7 -6
  147. package/dist/types/NotificationUtils.d.ts +5 -3
  148. package/dist/types/OpenApiSpec.d.ts +2 -2
  149. package/dist/types/Server.d.ts +28 -10
  150. package/dist/types/auth/AuthMiddleware.d.ts +3 -3
  151. package/dist/types/auth/AuthStrategy.d.ts +10 -7
  152. package/dist/types/auth/JWTStrategy.d.ts +6 -4
  153. package/dist/types/auth/index.d.ts +0 -1
  154. package/dist/types/database/ConnectionKinds.d.ts +7 -0
  155. package/dist/types/database/ConnectionManager.d.ts +29 -4
  156. package/dist/types/database/MongoConnection.d.ts +16 -4
  157. package/dist/types/database/MongoRepository.d.ts +32 -11
  158. package/dist/types/database/RedisCache.d.ts +23 -0
  159. package/dist/types/database/TypeOrmSupport.d.ts +4 -4
  160. package/dist/types/database/index.d.ts +1 -0
  161. package/dist/types/decorators/DatabaseDecorators.d.ts +139 -8
  162. package/dist/types/decorators/DocDecorators.d.ts +11 -2
  163. package/dist/types/decorators/ModelDecorators.d.ts +12 -5
  164. package/dist/types/decorators/PersistenceDecorators.d.ts +11 -4
  165. package/dist/types/decorators/RouteDecorators.d.ts +36 -6
  166. package/dist/types/http/IWebSocketShim.d.ts +11 -0
  167. package/dist/types/http/MiddlewareChain.d.ts +47 -0
  168. package/dist/types/http/RuntimeDetect.d.ts +2 -0
  169. package/dist/types/http/bun/BunAdapters.d.ts +139 -0
  170. package/dist/types/http/bun/BunRouter.d.ts +79 -0
  171. package/dist/types/http/bun/BunWebSocket.d.ts +35 -0
  172. package/dist/types/http/index.d.ts +16 -6
  173. package/dist/types/http/session/RedisSessionStore.d.ts +15 -0
  174. package/dist/types/http/session/SessionManager.d.ts +35 -0
  175. package/dist/types/http/session/SessionStore.d.ts +12 -0
  176. package/dist/types/http/session/sessionMiddleware.d.ts +10 -0
  177. package/dist/types/http/types.d.ts +42 -3
  178. package/dist/types/http/uWS/Adapters.d.ts +129 -0
  179. package/dist/types/http/{Router.d.ts → uWS/Router.d.ts} +14 -38
  180. package/dist/types/http/{WebSocket.d.ts → uWS/WebSocket.d.ts} +6 -5
  181. package/dist/types/models/BaseEntity.d.ts +1 -1
  182. package/dist/types/models/ModelUtils.d.ts +47 -14
  183. package/dist/types/models/RecoverableBaseEntity.d.ts +3 -1
  184. package/dist/types/models/RepoUtils.d.ts +84 -14
  185. package/dist/types/routes/BaseAdminRoute.d.ts +65 -0
  186. package/dist/types/routes/BaseMetricsRoute.d.ts +37 -0
  187. package/dist/types/routes/BaseOpenAPIRoute.d.ts +33 -0
  188. package/dist/types/routes/BasePushRoute.d.ts +53 -0
  189. package/dist/types/routes/BaseStaticRoute.d.ts +44 -0
  190. package/dist/types/routes/BaseStatusRoute.d.ts +37 -0
  191. package/dist/types/routes/CRUDRoute.d.ts +57 -0
  192. package/dist/types/routes/ModelRoute.d.ts +39 -36
  193. package/dist/types/routes/RouteUtils.d.ts +19 -0
  194. package/dist/types/routes/index.d.ts +7 -4
  195. package/dist/types/security/ACLUtils.d.ts +94 -18
  196. package/dist/types/security/AccessControlList.d.ts +37 -59
  197. package/dist/types/security/AccessControlListMongo.d.ts +3 -8
  198. package/dist/types/security/AccessControlListSQL.d.ts +3 -8
  199. package/dist/types/security/BaseACLRoute.d.ts +73 -0
  200. package/dist/types/security/index.d.ts +3 -0
  201. package/dist/types/test/request.d.ts +18 -1
  202. package/package.json +135 -129
  203. package/tsconfig.export.json +17 -0
  204. package/dist/lib/auth/BasicStrategy.js +0 -113
  205. package/dist/lib/auth/BasicStrategy.js.map +0 -1
  206. package/dist/lib/http/Adapters.js +0 -241
  207. package/dist/lib/http/Adapters.js.map +0 -1
  208. package/dist/lib/http/Router.js.map +0 -1
  209. package/dist/lib/http/WebSocket.js.map +0 -1
  210. package/dist/lib/routes/AdminRoute.js.map +0 -1
  211. package/dist/lib/routes/MetricsRoute.js.map +0 -1
  212. package/dist/lib/routes/OpenAPIRoute.js.map +0 -1
  213. package/dist/lib/routes/StatusRoute.js +0 -55
  214. package/dist/lib/routes/StatusRoute.js.map +0 -1
  215. package/dist/lib/security/ACLRouteMongo.js +0 -194
  216. package/dist/lib/security/ACLRouteMongo.js.map +0 -1
  217. package/dist/lib/security/ACLRouteSQL.js +0 -193
  218. package/dist/lib/security/ACLRouteSQL.js.map +0 -1
  219. package/dist/types/auth/BasicStrategy.d.ts +0 -37
  220. package/dist/types/http/Adapters.d.ts +0 -68
  221. package/dist/types/routes/AdminRoute.d.ts +0 -47
  222. package/dist/types/routes/MetricsRoute.d.ts +0 -15
  223. package/dist/types/routes/OpenAPIRoute.d.ts +0 -17
  224. package/dist/types/routes/StatusRoute.d.ts +0 -11
  225. package/dist/types/security/ACLRouteMongo.d.ts +0 -19
  226. package/dist/types/security/ACLRouteSQL.d.ts +0 -19
  227. package/docs/Makefile +0 -20
  228. package/docs/conf.py +0 -58
  229. package/docs/index.rst +0 -17
  230. package/docs/make.bat +0 -35
  231. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/README.md +0 -13
  232. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/MongoRepository.md +0 -25
  233. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/RedisConnection.md +0 -25
  234. package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/Repository.md +0 -25
  235. package/docs/reference/@rapidrest/namespaces/DocDecorators/README.md +0 -23
  236. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Default.md +0 -25
  237. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Description.md +0 -25
  238. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Document.md +0 -25
  239. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Example.md +0 -25
  240. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Format.md +0 -25
  241. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Returns.md +0 -28
  242. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Summary.md +0 -25
  243. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Tags.md +0 -25
  244. package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/TypeInfo.md +0 -28
  245. package/docs/reference/@rapidrest/namespaces/DocDecorators/interfaces/DocumentsData.md +0 -57
  246. package/docs/reference/@rapidrest/namespaces/EventDecorators/README.md +0 -12
  247. package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/EventListener.md +0 -17
  248. package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/OnEvent.md +0 -26
  249. package/docs/reference/@rapidrest/namespaces/ModelDecorators/README.md +0 -26
  250. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Cache.md +0 -25
  251. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/ChildEntity.md +0 -18
  252. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/DataStore.md +0 -25
  253. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Identifier.md +0 -27
  254. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Protect.md +0 -35
  255. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Reference.md +0 -25
  256. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Shard.md +0 -27
  257. package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/TrackChanges.md +0 -26
  258. package/docs/reference/@rapidrest/namespaces/ModelDecorators/interfaces/PendingTypeOrmColumn.md +0 -45
  259. package/docs/reference/@rapidrest/namespaces/ModelDecorators/variables/pendingTypeOrmColumns.md +0 -14
  260. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/README.md +0 -27
  261. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Column.md +0 -25
  262. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Entity.md +0 -25
  263. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Index.md +0 -119
  264. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/PrimaryColumn.md +0 -25
  265. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Unique.md +0 -68
  266. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getColumnMetadata.md +0 -26
  267. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getEntityName.md +0 -26
  268. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getIndexMetadata.md +0 -27
  269. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/CollationOptions.md +0 -79
  270. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnInfo.md +0 -41
  271. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnOptions.md +0 -51
  272. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/EntityOptions.md +0 -32
  273. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexInfo.md +0 -41
  274. package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexOptions.md +0 -61
  275. package/docs/reference/@rapidrest/namespaces/RouteDecorators/README.md +0 -36
  276. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/After.md +0 -26
  277. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Auth.md +0 -33
  278. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/AuthResult.md +0 -31
  279. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Before.md +0 -25
  280. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/ContentType.md +0 -25
  281. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Delete.md +0 -25
  282. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Get.md +0 -25
  283. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Head.md +0 -25
  284. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Header.md +0 -25
  285. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Method.md +0 -31
  286. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Model.md +0 -25
  287. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Options.md +0 -25
  288. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Param.md +0 -26
  289. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Patch.md +0 -25
  290. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Post.md +0 -25
  291. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Protect.md +0 -31
  292. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Put.md +0 -25
  293. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Query.md +0 -26
  294. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Request.md +0 -31
  295. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/RequiresRole.md +0 -26
  296. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Response.md +0 -31
  297. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Route.md +0 -25
  298. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Socket.md +0 -33
  299. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/User.md +0 -31
  300. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Validate.md +0 -25
  301. package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/WebSocket.md +0 -25
  302. package/docs/reference/README.md +0 -20
  303. package/docs/reference/classes/ACLUtils.md +0 -263
  304. package/docs/reference/classes/AdminRoute.md +0 -51
  305. package/docs/reference/classes/AuthMiddleware.md +0 -173
  306. package/docs/reference/classes/BackgroundService.md +0 -117
  307. package/docs/reference/classes/BackgroundServiceManager.md +0 -172
  308. package/docs/reference/classes/BaseEntity.md +0 -82
  309. package/docs/reference/classes/BaseMongoEntity.md +0 -107
  310. package/docs/reference/classes/BasicStrategy.md +0 -131
  311. package/docs/reference/classes/BasicStrategyOptions.md +0 -115
  312. package/docs/reference/classes/BulkError.md +0 -271
  313. package/docs/reference/classes/ConnectionManager.md +0 -75
  314. package/docs/reference/classes/EventListenerManager.md +0 -88
  315. package/docs/reference/classes/HttpRouter.md +0 -343
  316. package/docs/reference/classes/JWTStrategy.md +0 -100
  317. package/docs/reference/classes/JWTStrategyOptions.md +0 -97
  318. package/docs/reference/classes/MetricsRoute.md +0 -27
  319. package/docs/reference/classes/ModelRoute.md +0 -527
  320. package/docs/reference/classes/ModelUtils.md +0 -446
  321. package/docs/reference/classes/MongoConnection.md +0 -218
  322. package/docs/reference/classes/MongoRepository.md +0 -390
  323. package/docs/reference/classes/MongoSchemaSync.md +0 -97
  324. package/docs/reference/classes/NetUtils.md +0 -90
  325. package/docs/reference/classes/NotificationUtils.md +0 -77
  326. package/docs/reference/classes/ObjectFactory.md +0 -336
  327. package/docs/reference/classes/OpenAPIRoute.md +0 -77
  328. package/docs/reference/classes/OpenApiSpec.md +0 -892
  329. package/docs/reference/classes/RecoverableBaseEntity.md +0 -114
  330. package/docs/reference/classes/RecoverableBaseMongoEntity.md +0 -124
  331. package/docs/reference/classes/RedisTransport.md +0 -2202
  332. package/docs/reference/classes/RepoUtils.md +0 -482
  333. package/docs/reference/classes/RouteUtils.md +0 -191
  334. package/docs/reference/classes/Server.md +0 -408
  335. package/docs/reference/classes/SimpleEntity.md +0 -48
  336. package/docs/reference/classes/SimpleMongoEntity.md +0 -66
  337. package/docs/reference/classes/StatusExtraData.md +0 -57
  338. package/docs/reference/classes/StatusRoute.md +0 -26
  339. package/docs/reference/classes/UWSRequest.md +0 -226
  340. package/docs/reference/classes/UWSResponse.md +0 -257
  341. package/docs/reference/classes/UWSWebSocketShim.md +0 -958
  342. package/docs/reference/enumerations/ACLAction.md +0 -63
  343. package/docs/reference/enumerations/ApiErrorMessages.md +0 -123
  344. package/docs/reference/enumerations/ApiErrors.md +0 -123
  345. package/docs/reference/functions/createWebSocketStream.md +0 -27
  346. package/docs/reference/functions/isSqlDataSource.md +0 -26
  347. package/docs/reference/functions/readBody.md +0 -29
  348. package/docs/reference/functions/resolveCollectionName.md +0 -33
  349. package/docs/reference/functions/runChain.md +0 -40
  350. package/docs/reference/functions/snakeCase.md +0 -28
  351. package/docs/reference/globals.md +0 -106
  352. package/docs/reference/interfaces/ACLRecord.md +0 -96
  353. package/docs/reference/interfaces/AccessControlList.md +0 -76
  354. package/docs/reference/interfaces/AuthResult.md +0 -55
  355. package/docs/reference/interfaces/AuthStrategy.md +0 -95
  356. package/docs/reference/interfaces/CreateRequestOptions.md +0 -121
  357. package/docs/reference/interfaces/DeleteRequestOptions.md +0 -137
  358. package/docs/reference/interfaces/FindRequestOptions.md +0 -133
  359. package/docs/reference/interfaces/HttpRequest.md +0 -147
  360. package/docs/reference/interfaces/HttpResponse.md +0 -164
  361. package/docs/reference/interfaces/JWTAuthResult.md +0 -84
  362. package/docs/reference/interfaces/RepoCreateOptions.md +0 -95
  363. package/docs/reference/interfaces/RepoDeleteOptions.md +0 -105
  364. package/docs/reference/interfaces/RepoFindOptions.md +0 -125
  365. package/docs/reference/interfaces/RepoOperationOptions.md +0 -69
  366. package/docs/reference/interfaces/RepoUpdateOptions.md +0 -101
  367. package/docs/reference/interfaces/RequestOptions.md +0 -112
  368. package/docs/reference/interfaces/RequestWS.md +0 -225
  369. package/docs/reference/interfaces/TruncateRequestOptions.md +0 -161
  370. package/docs/reference/interfaces/UpdateRequestOptions.md +0 -139
  371. package/docs/reference/type-aliases/ErrorHandler.md +0 -35
  372. package/docs/reference/type-aliases/NextFunction.md +0 -23
  373. package/docs/reference/type-aliases/OneOrMany.md +0 -19
  374. package/docs/reference/type-aliases/OneOrNull.md +0 -19
  375. package/docs/reference/type-aliases/PartialBaseEntity.md +0 -17
  376. package/docs/reference/type-aliases/PartialSimpleEntity.md +0 -17
  377. package/docs/reference/type-aliases/RequestHandler.md +0 -31
  378. package/docs/reference/type-aliases/UpdateObject.md +0 -19
  379. package/docs/reference/type-aliases/WsUpgradeAuth.md +0 -27
  380. package/docs/reference/type-aliases/WsUpgradeAuthResult.md +0 -47
@@ -0,0 +1,391 @@
1
+ import { DEFAULT_MAX_BODY_SIZE } from "../uWS/Adapters.js";
2
+ import { BunRequest, BunResponse, readBunBody } from "./BunAdapters.js";
3
+ import { BunWebSocketShim } from "./BunWebSocket.js";
4
+ import { makeWsStubResponse, runChain } from "../MiddlewareChain.js";
5
+ import { ApiError } from "@rapidrest/core";
6
+ import { ApiErrorMessages, ApiErrors } from "../../ApiErrors.js";
7
+ /** Strips a single trailing slash from a pathname, except for the root `"/"` itself. */
8
+ function normalizePath(pathname) {
9
+ if (pathname.length > 1 && pathname.endsWith("/")) {
10
+ return pathname.slice(0, -1);
11
+ }
12
+ return pathname;
13
+ }
14
+ /** Splits a normalized pathname into non-empty segments (e.g. `/users/:uid` -> `["users", ":uid"]`). */
15
+ function splitPath(pathname) {
16
+ return pathname.split("/").filter((s) => s.length > 0);
17
+ }
18
+ /**
19
+ * Scores how well a route's segments match a request's segments: 2 points per exact static
20
+ * segment match, 1 point per `:param` segment match, or `null` if the segment counts differ or a
21
+ * static segment doesn't match. Higher scores are more specific (static beats `:param`).
22
+ */
23
+ function matchSegments(routeSegments, reqSegments) {
24
+ if (routeSegments.length !== reqSegments.length)
25
+ return null;
26
+ let score = 0;
27
+ for (let i = 0; i < routeSegments.length; i++) {
28
+ const seg = routeSegments[i];
29
+ if (seg.startsWith(":")) {
30
+ score += 1;
31
+ }
32
+ else if (seg === reqSegments[i]) {
33
+ score += 2;
34
+ }
35
+ else {
36
+ return null;
37
+ }
38
+ }
39
+ return score;
40
+ }
41
+ /**
42
+ * Extracts `:param` values from a matched request path given the route's segment pattern.
43
+ * Deliberately does NOT percent-decode — matches uWS's `getParameter()`, which returns the raw
44
+ * segment as-is, so `:param` values are identical across both adapters for the same request.
45
+ */
46
+ function extractParams(routeSegments, reqSegments) {
47
+ const params = {};
48
+ for (let i = 0; i < routeSegments.length; i++) {
49
+ const seg = routeSegments[i];
50
+ if (seg.startsWith(":")) {
51
+ params[seg.slice(1)] = reqSegments[i] ?? "";
52
+ }
53
+ }
54
+ return params;
55
+ }
56
+ /** Maps the framework's `ssl` config block (file paths) to Bun's `tls` option (file contents). */
57
+ function mapSslConfigToBunTls(sslConfig) {
58
+ return {
59
+ key: Bun.file(sslConfig.key),
60
+ cert: Bun.file(sslConfig.cert),
61
+ ca: sslConfig.ca ? Bun.file(sslConfig.ca) : undefined,
62
+ passphrase: sslConfig.passphrase,
63
+ };
64
+ }
65
+ /**
66
+ * Bun-native HTTP/WebSocket router built on `Bun.serve()`. Exposes the same public surface as the
67
+ * uWS-backed `HttpRouter` (`use/get/post/put/delete/patch/head/options/ws/listen/close/isListening/
68
+ * listenPort`) so `RouteUtils.registerRoute()` and `Server.ts` work against either implementation
69
+ * unchanged.
70
+ *
71
+ * Unlike uWS, `Bun.serve()` has no built-in dynamic router, so this class maintains its own route
72
+ * table matched inside a single `fetch()` callback, with static-segment > `:param` > `/*` wildcard
73
+ * precedence — replicating uWS's specificity-based matching.
74
+ */
75
+ export class BunRouter {
76
+ constructor(maxBodySize = DEFAULT_MAX_BODY_SIZE, sslConfig) {
77
+ this.routesByMethod = new Map();
78
+ this.wsRoutes = [];
79
+ this.globalMiddleware = [];
80
+ this.preRouteCount = -1;
81
+ this.rootWildcardVerbs = new Set();
82
+ /** The port the server is currently listening on (set after a successful `listen()` call). */
83
+ this.listenPort = 0;
84
+ // -------------------------------------------------------------------------
85
+ // Request dispatch
86
+ // -------------------------------------------------------------------------
87
+ this.fetchHandler = async (rawReq, server) => {
88
+ const url = new URL(rawReq.url);
89
+ // Deliberately no `length > 1` guard here (unlike normalizePath's trailing-slash strip): the bare root
90
+ // path "/" IS a trailing slash relative to an empty wildcard prefix (a `/*` route registered at the
91
+ // app root), so it must count as one or that route's wildcard boundary check would never match "/".
92
+ const reqHasTrailingSlash = url.pathname.endsWith("/");
93
+ const normalizedPath = normalizePath(url.pathname);
94
+ const reqSegments = splitPath(normalizedPath);
95
+ if (rawReq.headers.get("upgrade")?.toLowerCase() === "websocket") {
96
+ const wsMatch = this.matchWsRoute(reqSegments);
97
+ if (wsMatch) {
98
+ const req = new BunRequest(rawReq, server);
99
+ req.params = extractParams(wsMatch.segments, reqSegments);
100
+ if (wsMatch.upgradeAuth) {
101
+ const authResult = wsMatch.upgradeAuth(req);
102
+ if (authResult.reject) {
103
+ return new Response(JSON.stringify({ status: 401, message: "Unauthorized" }), {
104
+ status: 401,
105
+ headers: { "content-type": "application/json" },
106
+ });
107
+ }
108
+ if (authResult.user) {
109
+ req.user = authResult.user;
110
+ req.auth = authResult;
111
+ req.authPayload = authResult.authPayload;
112
+ req.authToken = authResult.authToken;
113
+ }
114
+ }
115
+ const socketData = { req, handlers: wsMatch.handlers };
116
+ const upgraded = server.upgrade(rawReq, { data: socketData });
117
+ if (upgraded)
118
+ return undefined;
119
+ return new Response("WebSocket upgrade failed", { status: 400 });
120
+ }
121
+ // No matching ws route — fall through to normal HTTP handling (ends in 404 below).
122
+ }
123
+ const method = rawReq.method.toUpperCase();
124
+ const route = this.matchRoute(method, reqSegments, reqHasTrailingSlash);
125
+ if (!route) {
126
+ return new Response(JSON.stringify({ code: ApiErrors.NOT_FOUND, status: 404, message: ApiErrorMessages.NOT_FOUND }), { status: 404, headers: { "content-type": "application/json" } });
127
+ }
128
+ const req = new BunRequest(rawReq, server);
129
+ // For wildcard-suffixed routes, `route.segments` is only the prefix — slice reqSegments to
130
+ // match so extractParams doesn't walk past it. For exact-length routes this is a no-op
131
+ // (route.segments.length === reqSegments.length is guaranteed by matchSegments).
132
+ req.params = extractParams(route.segments, reqSegments.slice(0, route.segments.length));
133
+ const res = new BunResponse(rawReq);
134
+ res.isHead = route.isHead;
135
+ const bodyResult = await readBunBody(req, rawReq, this.maxBodySize);
136
+ if (!bodyResult.ok)
137
+ return bodyResult.response;
138
+ const allHandlers = [
139
+ ...this.globalMiddleware.slice(0, route.preLength),
140
+ ...route.handlers,
141
+ ...this.globalMiddleware.slice(route.preLength),
142
+ ];
143
+ runChain(allHandlers, req, res)
144
+ .then(() => {
145
+ if (!res.writableEnded)
146
+ res.status(204).end();
147
+ })
148
+ .catch((err) => {
149
+ res.abortStream(err);
150
+ });
151
+ return res.responseReady;
152
+ };
153
+ this.websocketConfig = {
154
+ open: async (ws) => {
155
+ const data = ws.data;
156
+ const shim = new BunWebSocketShim(ws);
157
+ data.shim = shim;
158
+ const req = data.req;
159
+ req.websocket = shim;
160
+ req.wsHandled = false;
161
+ // A middleware that rejects (e.g. checkRequiredRoles/checkElevation/checkRequiredPerms) with
162
+ // no downstream handler to translate that into a close has nowhere else to signal it — mirror
163
+ // the convention route handlers use themselves: close with 1002 and the error's short code.
164
+ const stubRes = makeWsStubResponse((status, payload) => {
165
+ req.wsHandled = true;
166
+ shim.close(1002, payload?.code || payload?.message || "Internal Server Error");
167
+ });
168
+ await runChain(data.handlers, req, stubRes);
169
+ // Guard against the client disconnecting while runChain was awaiting (e.g. authWebSocket
170
+ // waiting for a LOGIN frame) — mirrors the uWS router's readyState !== 3 / try-catch guard.
171
+ if (!req.wsHandled && shim.readyState !== 3) {
172
+ try {
173
+ ws.close();
174
+ }
175
+ catch {
176
+ // Client already disconnected — nothing to do
177
+ }
178
+ }
179
+ },
180
+ message: (ws, message) => {
181
+ const data = ws.data;
182
+ const isBinary = typeof message !== "string";
183
+ data.shim?.emit("message", isBinary ? Buffer.from(message) : message, isBinary);
184
+ },
185
+ close: (ws, code, reason) => {
186
+ const data = ws.data;
187
+ if (data.shim)
188
+ data.shim.readyState = 3; // CLOSED
189
+ data.shim?.emit("close", code, reason);
190
+ },
191
+ };
192
+ this.maxBodySize = maxBodySize;
193
+ this.sslConfig = sslConfig;
194
+ }
195
+ /** Returns `true` if the server is currently listening. */
196
+ get isListening() {
197
+ return this._bunServer !== undefined;
198
+ }
199
+ /** Register global middleware that runs before every route handler. */
200
+ use(...handlers) {
201
+ this.globalMiddleware.push(...handlers);
202
+ return this;
203
+ }
204
+ /**
205
+ * Freezes the pre-route middleware count the first time a route is registered.
206
+ * All global middleware registered BEFORE this call is "pre-route" middleware;
207
+ * everything added after is "post-route" (error handlers, metrics, etc.).
208
+ */
209
+ capturePreRouteCount() {
210
+ if (this.preRouteCount === -1) {
211
+ this.preRouteCount = this.globalMiddleware.length;
212
+ }
213
+ return this.preRouteCount;
214
+ }
215
+ pushRoute(method, route) {
216
+ const list = this.routesByMethod.get(method) ?? [];
217
+ list.push(route);
218
+ this.routesByMethod.set(method, list);
219
+ }
220
+ register(method, routePath, handlers, isHead = false) {
221
+ const pre = this.capturePreRouteCount();
222
+ const normalized = normalizePath(routePath);
223
+ const isRootWildcard = normalized === "/*";
224
+ if (isRootWildcard)
225
+ this.rootWildcardVerbs.add(method.toLowerCase());
226
+ const hasWildcardSuffix = isRootWildcard || normalized.endsWith("/*");
227
+ // Strip the trailing "/*" (2 chars) to get the prefix; "/*" itself strips to "" -> segments [].
228
+ const segments = hasWildcardSuffix ? splitPath(normalized.slice(0, -2)) : splitPath(normalized);
229
+ this.pushRoute(method, { segments, hasWildcardSuffix, isRootWildcard, handlers, preLength: pre, isHead });
230
+ return this;
231
+ }
232
+ // -------------------------------------------------------------------------
233
+ // HTTP verb methods
234
+ // -------------------------------------------------------------------------
235
+ get(routePath, ...handlers) {
236
+ return this.register("GET", routePath, handlers);
237
+ }
238
+ post(routePath, ...handlers) {
239
+ return this.register("POST", routePath, handlers);
240
+ }
241
+ put(routePath, ...handlers) {
242
+ return this.register("PUT", routePath, handlers);
243
+ }
244
+ delete(routePath, ...handlers) {
245
+ return this.register("DELETE", routePath, handlers);
246
+ }
247
+ patch(routePath, ...handlers) {
248
+ return this.register("PATCH", routePath, handlers);
249
+ }
250
+ head(routePath, ...handlers) {
251
+ return this.register("HEAD", routePath, handlers, true);
252
+ }
253
+ options(routePath, ...handlers) {
254
+ return this.register("OPTIONS", routePath, handlers);
255
+ }
256
+ /**
257
+ * Registers a WebSocket route. Handlers follow the same `(req, res, next)` pattern as HTTP
258
+ * routes; they receive `req.websocket` containing the Bun WebSocket shim.
259
+ *
260
+ * `upgradeAuth` is an optional pre-upgrade auth function, run synchronously inside `fetch()`
261
+ * before the handshake. If it returns `{ reject: true }`, an HTTP 401 is sent and the upgrade
262
+ * is aborted. If it returns `{ user, ... }`, those credentials are attached to the request so
263
+ * downstream middleware sees an authenticated user. If it returns `{}`, auth falls through to
264
+ * the post-upgrade message-based LOGIN flow.
265
+ */
266
+ ws(routePath, handlers, _wsOptions, upgradeAuth) {
267
+ const normalized = normalizePath(routePath);
268
+ this.wsRoutes.push({ segments: splitPath(normalized), handlers, upgradeAuth });
269
+ return this;
270
+ }
271
+ // -------------------------------------------------------------------------
272
+ // Route matching
273
+ // -------------------------------------------------------------------------
274
+ /**
275
+ * Matches a request against the route table. Exact-length static/param routes always outrank
276
+ * wildcard-suffixed routes, matching uWS's `best ?? wildcard` fallback behavior. Among wildcard
277
+ * candidates, the one with the longest (most specific) matching prefix wins — e.g. `/static/*`
278
+ * beats a bare `/*` for requests under `/static`.
279
+ *
280
+ * `reqHasTrailingSlash` is required to replicate uWS's own wildcard boundary rule, verified
281
+ * empirically against real uWS: a `<prefix>/*` route matches `<prefix>/` and anything nested
282
+ * under it, but NOT the bare `<prefix>` with no trailing slash — a distinction that's lost if
283
+ * matching were done on segment arrays alone, since `/static` and `/static/` produce the same
284
+ * segment list once empty segments are filtered out.
285
+ */
286
+ matchRoute(method, reqSegments, reqHasTrailingSlash) {
287
+ const candidates = this.routesByMethod.get(method);
288
+ if (!candidates)
289
+ return null;
290
+ let best = null;
291
+ let bestScore = -1;
292
+ let bestWildcard = null;
293
+ let bestWildcardSpecificity = -1;
294
+ for (const route of candidates) {
295
+ if (route.hasWildcardSuffix) {
296
+ const prefixLen = route.segments.length;
297
+ const hasContentAfterPrefix = reqSegments.length > prefixLen || (reqSegments.length === prefixLen && reqHasTrailingSlash);
298
+ if (!hasContentAfterPrefix)
299
+ continue;
300
+ const score = matchSegments(route.segments, reqSegments.slice(0, prefixLen));
301
+ if (score === null)
302
+ continue;
303
+ if (prefixLen > bestWildcardSpecificity) {
304
+ bestWildcardSpecificity = prefixLen;
305
+ bestWildcard = route;
306
+ }
307
+ continue;
308
+ }
309
+ const score = matchSegments(route.segments, reqSegments);
310
+ if (score !== null && score > bestScore) {
311
+ bestScore = score;
312
+ best = route;
313
+ }
314
+ }
315
+ return best ?? bestWildcard;
316
+ }
317
+ matchWsRoute(reqSegments) {
318
+ let best = null;
319
+ let bestScore = -1;
320
+ for (const route of this.wsRoutes) {
321
+ const score = matchSegments(route.segments, reqSegments);
322
+ if (score !== null && score > bestScore) {
323
+ bestScore = score;
324
+ best = route;
325
+ }
326
+ }
327
+ return best;
328
+ }
329
+ /**
330
+ * Starts listening on the given host and port.
331
+ * Resolves when the server is ready; rejects if the port cannot be bound.
332
+ */
333
+ listen(host, port) {
334
+ // Register a catch-all OPTIONS handler so CORS global middleware runs for all preflight
335
+ // requests. preLength=0 places all globalMiddleware as "post-route" so it all executes
336
+ // sequentially; the CORS middleware terminates the chain early for OPTIONS (sends 204
337
+ // without calling next). Mirrors Router.ts::listen()'s uWS behavior exactly.
338
+ this.pushRoute("OPTIONS", {
339
+ segments: [],
340
+ hasWildcardSuffix: true,
341
+ isRootWildcard: true,
342
+ handlers: [],
343
+ preLength: 0,
344
+ isHead: false,
345
+ });
346
+ // Register a JSON 404 fallback for any request that doesn't match a registered route,
347
+ // respecting an app-defined literal `/*` route (e.g. a `BaseStaticRoute` mounted at the site
348
+ // root) via `rootWildcardVerbs`, exactly as the uWS router does.
349
+ const notFoundHandler = (_req, _res, next) => {
350
+ next(new ApiError(ApiErrors.NOT_FOUND, 404, ApiErrorMessages.NOT_FOUND));
351
+ };
352
+ const verbs = [
353
+ "get",
354
+ "post",
355
+ "put",
356
+ "delete",
357
+ "patch",
358
+ "head",
359
+ ];
360
+ for (const verb of verbs) {
361
+ if (!this.rootWildcardVerbs.has(verb)) {
362
+ this[verb]("/*", notFoundHandler);
363
+ }
364
+ }
365
+ const tls = this.sslConfig ? mapSslConfigToBunTls(this.sslConfig) : undefined;
366
+ return new Promise((resolve, reject) => {
367
+ try {
368
+ this._bunServer = Bun.serve({
369
+ hostname: host,
370
+ port,
371
+ fetch: this.fetchHandler,
372
+ websocket: this.websocketConfig,
373
+ tls,
374
+ });
375
+ this.listenPort = this._bunServer.port ?? port;
376
+ resolve();
377
+ }
378
+ catch (err) {
379
+ reject(err instanceof Error ? err : new Error(`Failed to listen on ${host}:${port}`));
380
+ }
381
+ });
382
+ }
383
+ /** Stops the server, closing the listen socket. */
384
+ close() {
385
+ if (this._bunServer) {
386
+ void this._bunServer.stop();
387
+ this._bunServer = undefined;
388
+ }
389
+ }
390
+ }
391
+ //# sourceMappingURL=BunRouter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunRouter.js","sourceRoot":"","sources":["../../../../src/http/bun/BunRouter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ ///////////////////////////////////////////////////////////////////////////////
2
+ // Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ ///////////////////////////////////////////////////////////////////////////////
5
+ import { EventEmitter } from "events";
6
+ /**
7
+ * Wraps a Bun `ServerWebSocket` handle and exposes an EventEmitter-based API compatible with
8
+ * `IWebSocketShim`, mirroring `UWSWebSocketShim`'s behavior for the uWS-backed router so that
9
+ * route handlers (e.g. `BaseAdminRoute`) and `AuthMiddleware.authWebSocket()` work unchanged
10
+ * regardless of which runtime is active.
11
+ */
12
+ export class BunWebSocketShim extends EventEmitter {
13
+ constructor(ws) {
14
+ super();
15
+ this.readyState = 1; // OPEN
16
+ this._ws = ws;
17
+ }
18
+ /**
19
+ * Sends data over the WebSocket connection.
20
+ * @param data The data to send.
21
+ * @param cb Optional callback invoked on completion or error.
22
+ */
23
+ send(data, cb) {
24
+ try {
25
+ const result = this._ws.send(typeof data === "string" ? data : Buffer.from(data));
26
+ // Bun's ws.send returns bytes sent on success, 0 when the message was dropped due to
27
+ // backpressure, or a negative number when it was queued to be sent once backpressure
28
+ // clears (not itself a failure) — only treat 0 as an actual send failure.
29
+ if (cb)
30
+ cb(result === 0 ? new Error("Bun backpressure: send dropped") : undefined);
31
+ }
32
+ catch (err) {
33
+ if (cb)
34
+ cb(err);
35
+ }
36
+ }
37
+ /**
38
+ * Closes the WebSocket connection with an optional code and reason.
39
+ */
40
+ close(code, reason) {
41
+ try {
42
+ this._ws.close(code, reason);
43
+ }
44
+ catch {
45
+ // Socket may already be closed
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=BunWebSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunWebSocket.js","sourceRoot":"","sources":["../../../../src/http/bun/BunWebSocket.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAgBtC;;;;;GAKG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAI9C,YAAY,EAAuB;QAC/B,KAAK,EAAE,CAAC;QAHL,eAAU,GAAW,CAAC,CAAC,CAAC,OAAO;QAIlC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,IAAI,CAAC,IAAS,EAAE,EAA0B;QAC7C,IAAI,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClF,qFAAqF;YACrF,qFAAqF;YACrF,0EAA0E;YAC1E,IAAI,EAAE;gBAAE,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvF,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,IAAI,EAAE;gBAAE,EAAE,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAa,EAAE,MAAe;QACvC,IAAI,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACL,+BAA+B;QACnC,CAAC;IACL,CAAC;CACJ"}
@@ -1,4 +1,17 @@
1
- export { UWSRequest, UWSResponse, readBody } from "./Adapters.js";
2
- export { HttpRouter, runChain } from "./Router.js";
3
- export { UWSWebSocketShim, createWebSocketStream } from "./WebSocket.js";
1
+ export { isBunRuntime } from "./RuntimeDetect.js";
2
+ export { extractParamNames, makeWsStubResponse, runChain } from "./MiddlewareChain.js";
3
+ export { RedisSessionStore } from "./session/RedisSessionStore.js";
4
+ export { SessionManager } from "./session/SessionManager.js";
5
+ export { createSessionMiddleware } from "./session/sessionMiddleware.js";
6
+ // uWS-backed adapter. `HttpRouter` is exported as a type only — the class itself value-imports
7
+ // `uWebSockets.js` at module load, which does not work under Bun. Consumers that only annotate with
8
+ // the type stay safe on every runtime; constructing one is done internally by Server.ts via a
9
+ // dynamic import gated on `isBunRuntime()`.
10
+ export { UWSRequest, UWSResponse, readBody } from "./uWS/Adapters.js";
11
+ export { UWSWebSocketShim, createWebSocketStream } from "./uWS/WebSocket.js";
12
+ // Bun-backed adapter. Safe to value-export unconditionally on every runtime — these modules never
13
+ // touch the `Bun` global outside of method bodies invoked at runtime.
14
+ export { BunRequest, BunResponse, readBunBody } from "./bun/BunAdapters.js";
15
+ export { BunRouter } from "./bun/BunRouter.js";
16
+ export { BunWebSocketShim } from "./bun/BunWebSocket.js";
4
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEzE,+FAA+F;AAC/F,oGAAoG;AACpG,8FAA8F;AAC9F,4CAA4C;AAC5C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,kGAAkG;AAClG,sEAAsE;AACtE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,30 @@
1
+ const KEY_PREFIX = "session:";
2
+ /**
3
+ * Redis-backed session store for multi-instance/production deployments, where an in-process
4
+ * `MemorySessionStore` would not be shared across horizontally-scaled instances.
5
+ */
6
+ export class RedisSessionStore {
7
+ constructor(client) {
8
+ /** The default record TTL (in seconds). */
9
+ this.defaultTTL = 60;
10
+ this.client = client;
11
+ }
12
+ async load(sessionId) {
13
+ const raw = await this.client.get(KEY_PREFIX + sessionId);
14
+ if (!raw)
15
+ return undefined;
16
+ try {
17
+ return JSON.parse(raw);
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ async save(sessionId, data, ttlSeconds = this.defaultTTL) {
24
+ await this.client.setEx(KEY_PREFIX + sessionId, ttlSeconds, JSON.stringify(data));
25
+ }
26
+ async delete(sessionId) {
27
+ await this.client.del(KEY_PREFIX + sessionId);
28
+ }
29
+ }
30
+ //# sourceMappingURL=RedisSessionStore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RedisSessionStore.js","sourceRoot":"","sources":["../../../../src/http/session/RedisSessionStore.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,GAAG,UAAU,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAM1B,YAAY,MAAuB;QAHnC,2CAA2C;QACpC,eAAU,GAAW,EAAE,CAAC;QAG3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;QAC1D,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,IAAI,CACb,SAAiB,EACjB,IAAyB,EACzB,aAAqB,IAAI,CAAC,UAAU;QAEpC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACtF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAiB;QACjC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAClD,CAAC;CACJ"}
@@ -0,0 +1,113 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ ///////////////////////////////////////////////////////////////////////////////
11
+ // Copyright (C) 2026 Jean-Philippe Steinmetz. All rights reserved.
12
+ // SPDX-License-Identifier: MPL-2.0
13
+ ///////////////////////////////////////////////////////////////////////////////
14
+ import * as crypto from "crypto";
15
+ import { MemoryStore, ObjectDecorators } from "@rapidrest/core";
16
+ import { DatabaseDecorators } from "../../decorators/index.js";
17
+ import { RedisSessionStore } from "./RedisSessionStore.js";
18
+ const { Config, Init, Logger } = ObjectDecorators;
19
+ const { Redis } = DatabaseDecorators;
20
+ /**
21
+ * Owns session-ID generation/signing and store selection (in-memory by default, Redis-backed when
22
+ * a `cache` datasource connection is available and `session.store` isn't forced to `"memory"`).
23
+ * Registered by `Server.ts` only when a `session` config block is present.
24
+ *
25
+ * @author Jean-Philippe Steinmetz
26
+ */
27
+ export class SessionManager {
28
+ async init() {
29
+ if (!this._objectFactory) {
30
+ throw new Error("objectFactory is not set.");
31
+ }
32
+ this.secret = this.options.secret ?? this.globalCookieSecret;
33
+ if (!this.secret) {
34
+ throw new Error("SessionManager requires `session.secret` (or `cookie_secret`) to be configured for signing session cookies.");
35
+ }
36
+ this.cookieName = this.options.cookieName ?? "rrst.sid";
37
+ this.ttlSeconds = this.options.ttl ?? 3600;
38
+ this.cookieSecure = this.options.cookieSecure ?? false;
39
+ this.cookieSameSite = this.options.cookieSameSite ?? "Lax";
40
+ this.cookiePath = this.options.cookiePath ?? "/";
41
+ if (this.options.store === "redis" && !this.cacheClient) {
42
+ throw new Error("session.store is set to 'redis' but no `cache` datasource connection was found.");
43
+ }
44
+ if (this.cacheClient && this.options.store !== "memory") {
45
+ this.store = await this._objectFactory.newInstance(RedisSessionStore, { args: [this.cacheClient] });
46
+ this.logger?.info("Session support enabled (store: redis).");
47
+ }
48
+ else {
49
+ this.store = await this._objectFactory.newInstance(MemoryStore);
50
+ this.logger?.info("Session support enabled (store: memory).");
51
+ }
52
+ }
53
+ /** Generates a new, cryptographically random session ID. */
54
+ generateId() {
55
+ return crypto.randomBytes(24).toString("base64url");
56
+ }
57
+ /** Signs a session ID for safe storage in a cookie value. */
58
+ signId(id) {
59
+ const signature = crypto.createHmac("sha256", this.secret).update(id).digest("base64url");
60
+ return `${id}.${signature}`;
61
+ }
62
+ /**
63
+ * Verifies a signed session ID cookie value, returning the original session ID if the
64
+ * signature is valid, or `undefined` if it's missing, malformed, or tampered with.
65
+ */
66
+ verifyId(signed) {
67
+ const idx = signed.lastIndexOf(".");
68
+ if (idx < 0)
69
+ return undefined;
70
+ const id = signed.slice(0, idx);
71
+ const signature = signed.slice(idx + 1);
72
+ const expected = crypto.createHmac("sha256", this.secret).update(id).digest("base64url");
73
+ const expectedBuf = Buffer.from(expected);
74
+ const actualBuf = Buffer.from(signature);
75
+ if (expectedBuf.length !== actualBuf.length)
76
+ return undefined;
77
+ if (!crypto.timingSafeEqual(expectedBuf, actualBuf))
78
+ return undefined;
79
+ return id;
80
+ }
81
+ async load(sessionId) {
82
+ return this.store.load(sessionId);
83
+ }
84
+ async save(sessionId, data) {
85
+ return this.store.save(sessionId, data, this.ttlSeconds);
86
+ }
87
+ async delete(sessionId) {
88
+ return this.store.delete(sessionId);
89
+ }
90
+ }
91
+ __decorate([
92
+ Config("session", {}),
93
+ __metadata("design:type", Object)
94
+ ], SessionManager.prototype, "options", void 0);
95
+ __decorate([
96
+ Config("cookie_secret", null),
97
+ __metadata("design:type", String)
98
+ ], SessionManager.prototype, "globalCookieSecret", void 0);
99
+ __decorate([
100
+ Redis("cache", false),
101
+ __metadata("design:type", Object)
102
+ ], SessionManager.prototype, "cacheClient", void 0);
103
+ __decorate([
104
+ Logger,
105
+ __metadata("design:type", Object)
106
+ ], SessionManager.prototype, "logger", void 0);
107
+ __decorate([
108
+ Init,
109
+ __metadata("design:type", Function),
110
+ __metadata("design:paramtypes", []),
111
+ __metadata("design:returntype", Promise)
112
+ ], SessionManager.prototype, "init", null);
113
+ //# sourceMappingURL=SessionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../../../src/http/session/SessionManager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,+EAA+E;AAC/E,mEAAmE;AACnE,mCAAmC;AACnC,+EAA+E;AAC/E,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAG3D,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAClD,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,CAAC;AAErC;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IA2BT,AAAN,KAAK,CAAC,IAAI;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACX,6GAA6G,CAChH,CAAC;QACN,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC;QACxD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QACvD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,KAAK,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,GAAG,CAAC;QAEjD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;QACvG,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtD,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACpG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAChE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,0CAA0C,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,4DAA4D;IACrD,UAAU;QACb,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,6DAA6D;IACtD,MAAM,CAAC,EAAU;QACpB,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC1F,OAAO,GAAG,EAAE,IAAI,SAAS,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,MAAc;QAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,WAAW,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9D,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QACtE,OAAO,EAAE,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,IAAyB;QAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;CACJ;AA5FW;IADP,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;;+CACD;AAGb;IADP,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC;;0DACM;AAI5B;IADP,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC;;mDACgB;AAG9B;IADP,MAAM;;8CACc;AAYP;IADb,IAAI;;;;0CA8BJ"}