@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,239 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import { ACLAction } from "./AccessControlList.js";
14
+ import { ApiError, UserUtils } from "@rapidrest/core";
15
+ import { ApiErrorMessages, ApiErrors } from "../ApiErrors.js";
16
+ import { Before, Param, Query, Request, Response, User } from "../decorators/RouteDecorators.js";
17
+ import { CRUDRoute } from "../routes/CRUDRoute.js";
18
+ /**
19
+ * The `BaseACLRoute` class provides a base set of endpoints for managing Access Control List records.
20
+ *
21
+ * Exposed endpoints:
22
+ *
23
+ * | Name | HTTP Method | What it does |
24
+ * | --- | --- | --- |
25
+ * | `count` | `HEAD /` | Counts the number of ACLs matching the provided set of criteria in the request's query parameters. Returns the count as the value of the `Content-Length` header. |
26
+ * | `create` | `POST /` | Adds one or more new ACLs to the datasource. |
27
+ * | `delete` | `DELETE /:id` | Removes an existing ACL from the datasource. |
28
+ * | `exists` | `HEAD /:id` | Checks if the ACL with the given ID exists in the datasource. Sets `Content-Length` header to `1` if the ACL exists, otherwise `0`. |
29
+ * | `find` | `GET /` | Returns all ACLs matching the provided set of criteria in the request's query parameters. |
30
+ * | `findById` | `GET /:id` | Returns a single ACL with a specified unique identifier. |
31
+ * | `truncate` | `DELETE /` | Removes all ACLs from the datasource. |
32
+ * | `update` | `PUT /:id` | Modifies an existing ACL in the datasource. |
33
+ * | `updateBulk` | `PUT /` | Modifies multiple existing ACLs in the datasource. |
34
+ * | `updateProperty` | `PUT /:id/:property` | Modifies an single property of the given name of an existing ACL in the datasource. |
35
+ *
36
+ * !!Note!! that the `BaseACLRoute` is not automatically registered with a server by default. You must create
37
+ * your own class that extends `BaseACLRoute` and apply the desired base path with `@Route()`.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * import { AccessControlListMongo, BaseACLRoute, RouteDecorators } from "@rapidrest/service-core";
42
+ * const { Model, Route } = RouteDecorators;
43
+ *
44
+ * @Model(AccessControlListMongo)
45
+ * @Route("/acls")
46
+ * export class ACLRoute extends BaseACLRoute<AccessControlListMongo> {}
47
+ * ```
48
+ * @example
49
+ * ```ts
50
+ * import { AccessControlListSQL, BaseACLRoute, RouteDecorators } from "@rapidrest/service-core";
51
+ * const { Model, Route } = RouteDecorators;
52
+ *
53
+ * @Model(AccessControlListSQL)
54
+ * @Route("/acls")
55
+ * export class ACLRoute extends BaseACLRoute<AccessControlListSQL> {}
56
+ * ```
57
+ *
58
+ * @author Jean-Philippe Steinmetz
59
+ */
60
+ export class BaseACLRoute extends CRUDRoute {
61
+ async checkPerms(params, user) {
62
+ if (!user) {
63
+ throw new ApiError(ApiErrors.AUTH_REQUIRED, 401, ApiErrorMessages.AUTH_REQUIRED);
64
+ }
65
+ if (!UserUtils.hasRoles(user, this.config.get("trusted_roles")) &&
66
+ !(params.id && (await this.aclUtils?.hasPermission(user, params.id, ACLAction.FULL)))) {
67
+ throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
68
+ }
69
+ }
70
+ /**
71
+ * The `default_<uid>` records are regenerated from code on every server startup (see
72
+ * `ACLUtils.saveDefaultACL`) and exist solely to seed the user-editable override record. They must never be
73
+ * deleted or modified directly, even by an administrator, since doing so would have no lasting effect and would
74
+ * only cause confusion.
75
+ */
76
+ checkNotDefault(id) {
77
+ if (id && id.startsWith("default_")) {
78
+ throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
79
+ }
80
+ }
81
+ /**
82
+ * Bulk updates have no `:id` URI parameter to check a per-record permission against, so unlike `checkPerms`
83
+ * we can't fall back to a per-record `FULL` permission check here. Require a trusted role for every bulk
84
+ * update instead, and disallow touching any `default_<uid>` record (see `checkNotDefault`).
85
+ */
86
+ checkPermsBulk(objs, user) {
87
+ if (!user) {
88
+ throw new ApiError(ApiErrors.AUTH_REQUIRED, 401, ApiErrorMessages.AUTH_REQUIRED);
89
+ }
90
+ if (!UserUtils.hasRoles(user, this.config.get("trusted_roles"))) {
91
+ throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
92
+ }
93
+ if (objs?.some((obj) => obj.uid && obj.uid.startsWith("default_"))) {
94
+ throw new ApiError(ApiErrors.AUTH_PERMISSION_FAILURE, 403, ApiErrorMessages.AUTH_PERMISSION_FAILURE);
95
+ }
96
+ }
97
+ count(params, query, res, user) {
98
+ return super.count(params, query, res, user);
99
+ }
100
+ create(obj, req, user) {
101
+ return super.create(obj, req, user);
102
+ }
103
+ delete(id, version, purge, req, user) {
104
+ return super.delete(id, version, purge, req, user);
105
+ }
106
+ exists(id, query, res, user) {
107
+ return super.exists(id, query, res, user);
108
+ }
109
+ find(params, query, user) {
110
+ return super.find(params, query, user);
111
+ }
112
+ async findById(id, query, user) {
113
+ return super.findById(id, query, user);
114
+ }
115
+ truncate(params, query, user) {
116
+ return super.truncate(params, query, user);
117
+ }
118
+ update(id, obj, req, user) {
119
+ return super.update(id, obj, req, user);
120
+ }
121
+ updateProperty(id, propertyName, obj, user) {
122
+ return super.updateProperty(id, propertyName, obj, user);
123
+ }
124
+ updateBulk(obj, req, user) {
125
+ return super.updateBulk(obj, req, user);
126
+ }
127
+ }
128
+ __decorate([
129
+ __param(0, Param()),
130
+ __param(1, User),
131
+ __metadata("design:type", Function),
132
+ __metadata("design:paramtypes", [Object, Object]),
133
+ __metadata("design:returntype", Promise)
134
+ ], BaseACLRoute.prototype, "checkPerms", null);
135
+ __decorate([
136
+ __param(0, Param("id")),
137
+ __metadata("design:type", Function),
138
+ __metadata("design:paramtypes", [String]),
139
+ __metadata("design:returntype", void 0)
140
+ ], BaseACLRoute.prototype, "checkNotDefault", null);
141
+ __decorate([
142
+ __param(1, User),
143
+ __metadata("design:type", Function),
144
+ __metadata("design:paramtypes", [Array, Object]),
145
+ __metadata("design:returntype", void 0)
146
+ ], BaseACLRoute.prototype, "checkPermsBulk", null);
147
+ __decorate([
148
+ Before("checkPerms"),
149
+ __param(0, Param()),
150
+ __param(1, Query()),
151
+ __param(2, Response),
152
+ __param(3, User),
153
+ __metadata("design:type", Function),
154
+ __metadata("design:paramtypes", [Object, Object, Object, Object]),
155
+ __metadata("design:returntype", Promise)
156
+ ], BaseACLRoute.prototype, "count", null);
157
+ __decorate([
158
+ Before("checkPerms"),
159
+ __param(1, Request),
160
+ __param(2, User),
161
+ __metadata("design:type", Function),
162
+ __metadata("design:paramtypes", [Object, Object, Object]),
163
+ __metadata("design:returntype", Promise)
164
+ ], BaseACLRoute.prototype, "create", null);
165
+ __decorate([
166
+ Before(["checkPerms", "checkNotDefault"]),
167
+ __param(0, Param("id")),
168
+ __param(1, Query("version")),
169
+ __param(2, Query("purge")),
170
+ __param(3, Request),
171
+ __param(4, User),
172
+ __metadata("design:type", Function),
173
+ __metadata("design:paramtypes", [String, Object, Object, Object, Object]),
174
+ __metadata("design:returntype", Promise)
175
+ ], BaseACLRoute.prototype, "delete", null);
176
+ __decorate([
177
+ Before("checkPerms"),
178
+ __param(0, Param("id")),
179
+ __param(1, Query()),
180
+ __param(2, Response),
181
+ __param(3, User),
182
+ __metadata("design:type", Function),
183
+ __metadata("design:paramtypes", [String, Object, Object, Object]),
184
+ __metadata("design:returntype", Promise)
185
+ ], BaseACLRoute.prototype, "exists", null);
186
+ __decorate([
187
+ Before("checkPerms"),
188
+ __param(0, Param()),
189
+ __param(1, Query()),
190
+ __param(2, User),
191
+ __metadata("design:type", Function),
192
+ __metadata("design:paramtypes", [Object, Object, Object]),
193
+ __metadata("design:returntype", Promise)
194
+ ], BaseACLRoute.prototype, "find", null);
195
+ __decorate([
196
+ Before("checkPerms"),
197
+ __param(0, Param("id")),
198
+ __param(1, Query()),
199
+ __param(2, User),
200
+ __metadata("design:type", Function),
201
+ __metadata("design:paramtypes", [String, Object, Object]),
202
+ __metadata("design:returntype", Promise)
203
+ ], BaseACLRoute.prototype, "findById", null);
204
+ __decorate([
205
+ Before("checkPerms"),
206
+ __param(0, Param()),
207
+ __param(1, Query()),
208
+ __param(2, User),
209
+ __metadata("design:type", Function),
210
+ __metadata("design:paramtypes", [Object, Object, Object]),
211
+ __metadata("design:returntype", Promise)
212
+ ], BaseACLRoute.prototype, "truncate", null);
213
+ __decorate([
214
+ Before(["checkPerms", "checkNotDefault"]),
215
+ __param(0, Param("id")),
216
+ __param(2, Request),
217
+ __param(3, User),
218
+ __metadata("design:type", Function),
219
+ __metadata("design:paramtypes", [String, Object, Object, Object]),
220
+ __metadata("design:returntype", Promise)
221
+ ], BaseACLRoute.prototype, "update", null);
222
+ __decorate([
223
+ Before(["checkPerms", "checkNotDefault"]),
224
+ __param(0, Param("id")),
225
+ __param(1, Param("property")),
226
+ __param(3, User),
227
+ __metadata("design:type", Function),
228
+ __metadata("design:paramtypes", [String, String, Object, Object]),
229
+ __metadata("design:returntype", Promise)
230
+ ], BaseACLRoute.prototype, "updateProperty", null);
231
+ __decorate([
232
+ Before("checkPermsBulk"),
233
+ __param(1, Request),
234
+ __param(2, User),
235
+ __metadata("design:type", Function),
236
+ __metadata("design:paramtypes", [Array, Object, Object]),
237
+ __metadata("design:returntype", Promise)
238
+ ], BaseACLRoute.prototype, "updateBulk", null);
239
+ //# sourceMappingURL=BaseACLRoute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseACLRoute.js","sourceRoot":"","sources":["../../../src/security/BaseACLRoute.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,6 @@
1
1
  export * from "./AccessControlList.js";
2
+ export * from "./AccessControlListMongo.js";
3
+ export * from "./AccessControlListSQL.js";
2
4
  export * from "./ACLUtils.js";
5
+ export * from "./BaseACLRoute.js";
3
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/security/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  ///////////////////////////////////////////////////////////////////////////////
2
2
  // Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
3
4
  ///////////////////////////////////////////////////////////////////////////////
4
5
  /**
5
6
  * Supertest-compatible HTTP test helper built on axios.
@@ -22,11 +23,36 @@ function extractMimeType(contentType) {
22
23
  return "";
23
24
  return contentType.split(";")[0].trim();
24
25
  }
26
+ /** Parses one or more `Set-Cookie` header values, merging `name=value` pairs into the given jar. */
27
+ function absorbSetCookie(jar, setCookie) {
28
+ if (!setCookie)
29
+ return;
30
+ const values = Array.isArray(setCookie) ? setCookie : [setCookie];
31
+ for (const value of values) {
32
+ const pair = value.split(";")[0];
33
+ const idx = pair.indexOf("=");
34
+ if (idx < 0)
35
+ continue;
36
+ const name = pair.slice(0, idx).trim();
37
+ const val = pair.slice(idx + 1).trim();
38
+ jar.set(name, val);
39
+ }
40
+ }
41
+ /** Serializes the jar's contents into a `Cookie` request header value, or `undefined` if empty. */
42
+ function buildCookieHeader(jar) {
43
+ if (jar.size === 0)
44
+ return undefined;
45
+ return Array.from(jar.entries())
46
+ .map(([name, value]) => `${name}=${value}`)
47
+ .join("; ");
48
+ }
25
49
  /**
26
- * Creates a supertest-style request builder that sends requests via axios to
27
- * `http://localhost:<port>`.
50
+ * Builds a supertest-style request builder that sends requests via axios to `http://localhost:<port>`.
51
+ * When `jar` is provided, every request sends the jar's accumulated cookies and every response's
52
+ * `Set-Cookie` header(s) are merged back into it — this is what powers `agent()`'s cross-request
53
+ * cookie persistence. `request()` passes no jar, so it stays stateless between calls.
28
54
  */
29
- export function request(app) {
55
+ function createRequester(app, jar) {
30
56
  const port = extractPort(app);
31
57
  const baseUrl = `http://localhost:${port}`;
32
58
  function makeChain(method, url) {
@@ -42,10 +68,19 @@ export function request(app) {
42
68
  return chain;
43
69
  },
44
70
  then(onFulfilled, onRejected) {
45
- // Auto-set Content-Type for JSON object bodies
46
- if (body !== undefined && typeof body === "object" && !Buffer.isBuffer(body)) {
71
+ // Auto-set Content-Type for JSON bodies. Buffers are sent verbatim. Everything else (objects,
72
+ // numbers, booleans, and strings — which callers pre-encode as JSON, e.g. `.send('"foo"')`) is
73
+ // treated as JSON: axios's default transform only auto-serializes plain objects, leaves strings
74
+ // untouched but defaults their Content-Type to form-urlencoded, and hands numbers/booleans straight
75
+ // to the HTTP adapter, which rejects anything that isn't a string/Buffer/Stream.
76
+ if (body !== undefined && !Buffer.isBuffer(body)) {
47
77
  hdrs["content-type"] = hdrs["content-type"] || "application/json";
48
78
  }
79
+ if (jar && !hdrs["Cookie"] && !hdrs["cookie"]) {
80
+ const cookieHeader = buildCookieHeader(jar);
81
+ if (cookieHeader)
82
+ hdrs["Cookie"] = cookieHeader;
83
+ }
49
84
  return axios
50
85
  .request({
51
86
  method,
@@ -55,8 +90,13 @@ export function request(app) {
55
90
  validateStatus: () => true,
56
91
  responseType: "text",
57
92
  transformResponse: (data) => data,
93
+ // supertest/superagent does not auto-follow redirects; callers inspect
94
+ // res.headers.location themselves. Match that so 3xx responses come back as-is.
95
+ maxRedirects: 0,
58
96
  })
59
97
  .then((res) => {
98
+ if (jar)
99
+ absorbSetCookie(jar, res.headers["set-cookie"]);
60
100
  const raw = res.data;
61
101
  const ct = res.headers["content-type"];
62
102
  const mime = extractMimeType(ct);
@@ -75,6 +115,7 @@ export function request(app) {
75
115
  type: mime,
76
116
  headers: res.headers,
77
117
  ok: res.status >= 200 && res.status < 300,
118
+ redirect: [301, 302, 303, 305, 307, 308].includes(res.status),
78
119
  };
79
120
  return onFulfilled ? onFulfilled(result) : result;
80
121
  })
@@ -96,4 +137,20 @@ export function request(app) {
96
137
  options: (url) => makeChain("OPTIONS", url),
97
138
  };
98
139
  }
140
+ /**
141
+ * Creates a supertest-style request builder that sends requests via axios to
142
+ * `http://localhost:<port>`. No cookie persistence between calls — each call is independent.
143
+ */
144
+ export function request(app) {
145
+ return createRequester(app);
146
+ }
147
+ /**
148
+ * Creates a supertest `.agent()`-style request builder that persists cookies across every call
149
+ * made through it, matching real browser behavior. Use this for multi-request flows where a
150
+ * server-set cookie (e.g. a session cookie) must be sent back on a later request — a plain
151
+ * `request(app)` call issues a stateless request each time and never resends cookies.
152
+ */
153
+ export function agent(app) {
154
+ return createRequester(app, new Map());
155
+ }
99
156
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/test/request.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wEAAwE;AACxE,+EAA+E;AAC/E;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,SAAS,WAAW,CAAC,GAAQ;IACzB,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,kBAAkB;IAClB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,CAAC;IACzD,sBAAsB;IACtB,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC;IACrE,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,eAAe,CAAC,WAAoB;IACzC,IAAI,CAAC,WAAW;QAAE,OAAO,EAAE,CAAC;IAC5B,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC5B,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAE3C,SAAS,SAAS,CAAC,MAAc,EAAE,GAAW;QAC1C,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,IAAI,IAAI,GAAQ,SAAS,CAAC;QAE1B,MAAM,KAAK,GAAQ;YACf,GAAG,CAAC,GAAW,EAAE,KAAa;gBAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAClB,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,IAAS;gBACV,IAAI,GAAG,IAAI,CAAC;gBACZ,OAAO,KAAK,CAAC;YACjB,CAAC;YACD,IAAI,CAAC,WAAgB,EAAE,UAAgB;gBACnC,+CAA+C;gBAC/C,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3E,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,kBAAkB,CAAC;gBACtE,CAAC;gBACD,OAAO,KAAK;qBACP,OAAO,CAAC;oBACL,MAAM;oBACN,GAAG,EAAE,OAAO,GAAG,GAAG;oBAClB,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,IAAI;oBACb,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;oBAC1B,YAAY,EAAE,MAAM;oBACpB,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI;iBACpC,CAAC;qBACD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACV,MAAM,GAAG,GAAG,GAAG,CAAC,IAAc,CAAC;oBAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAuB,CAAC;oBAC7D,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;oBACjC,IAAI,MAAW,CAAC;oBAChB,IAAI,CAAC;wBACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7B,CAAC;oBAAC,MAAM,CAAC;wBACL,MAAM,GAAG,GAAG,CAAC;oBACjB,CAAC;oBACD,MAAM,MAAM,GAAiB;wBACzB,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,UAAU,EAAE,GAAG,CAAC,MAAM;wBACtB,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,GAAG;wBACT,IAAI,EAAE,IAAI;wBACV,OAAO,EAAE,GAAG,CAAC,OAAiC;wBAC9C,EAAE,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;qBAC5C,CAAC;oBACF,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtD,CAAC,CAAC;qBACD,KAAK,CAAC,UAAU,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,CAAC,UAAe;gBACjB,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC;SACJ,CAAC;QAEF,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO;QACH,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3C,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;QAC7C,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC;QAC3C,MAAM,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC;QACjD,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC;QAC/C,IAAI,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;QAC7C,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,CAAC;KACtD,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/test/request.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  ///////////////////////////////////////////////////////////////////////////////
2
2
  // Copyright (C) 2020-2026 Jean-Philippe Steinmetz. All rights reserved.
3
+ // SPDX-License-Identifier: MPL-2.0
3
4
  ///////////////////////////////////////////////////////////////////////////////
4
5
  /**
5
6
  * Superwstest-compatible WebSocket test helper built on the `ws` package.
@@ -64,6 +65,32 @@ export class WsChain {
64
65
  ws.terminate();
65
66
  resolve();
66
67
  };
68
+ // Messages can arrive before the action that expects them is reached — e.g. a fast
69
+ // server response racing the client's send() callback, which can resolve after the
70
+ // response has already been delivered. Buffer every message as it arrives via a
71
+ // persistent listener rather than reactively registering a `once("message")` handler
72
+ // per action, so a message that arrives early is never silently dropped.
73
+ const messageQueue = [];
74
+ let pendingMessageHandler = null;
75
+ ws.on("message", (raw) => {
76
+ const text = raw.toString();
77
+ if (pendingMessageHandler) {
78
+ const handler = pendingMessageHandler;
79
+ pendingMessageHandler = null;
80
+ handler(text);
81
+ }
82
+ else {
83
+ messageQueue.push(text);
84
+ }
85
+ });
86
+ const nextMessage = (handler) => {
87
+ if (messageQueue.length > 0) {
88
+ handler(messageQueue.shift());
89
+ }
90
+ else {
91
+ pendingMessageHandler = handler;
92
+ }
93
+ };
67
94
  /** Execute the next action, or resolve if all done. */
68
95
  const next = () => {
69
96
  if (actionIndex >= actions.length) {
@@ -117,10 +144,9 @@ export class WsChain {
117
144
  }
118
145
  }
119
146
  else {
120
- // expectText / expectJson — wait for next message
121
- ws.once("message", (raw) => {
147
+ // expectText / expectJson — consume the next buffered/incoming message
148
+ nextMessage((text) => {
122
149
  try {
123
- const text = raw.toString();
124
150
  if (action.kind === "expectText") {
125
151
  if (text !== action.value) {
126
152
  fail(new Error(`Expected text "${action.value}" but got "${text}"`));
@@ -146,7 +172,9 @@ export class WsChain {
146
172
  }
147
173
  };
148
174
  ws.on("error", fail);
149
- ws.on("close", () => { closed = true; });
175
+ ws.on("close", () => {
176
+ closed = true;
177
+ });
150
178
  ws.on("open", () => {
151
179
  next();
152
180
  });
@@ -155,17 +183,13 @@ export class WsChain {
155
183
  }
156
184
  /** Creates a superwstest-style chain connected to `ws://localhost:<port>`. */
157
185
  export function requestws(appOrPort) {
158
- const port = typeof appOrPort === "number"
159
- ? appOrPort
160
- : appOrPort?.port ?? appOrPort?.listenPort;
186
+ const port = typeof appOrPort === "number" ? appOrPort : (appOrPort?.port ?? appOrPort?.listenPort);
161
187
  if (!port) {
162
188
  throw new Error("requestws(): cannot determine port from argument");
163
189
  }
164
190
  return {
165
191
  ws(path, options) {
166
- const wsOptions = options
167
- ? { headers: options.headers }
168
- : undefined;
192
+ const wsOptions = options ? { headers: options.headers } : undefined;
169
193
  return new WsChain(`ws://localhost:${port}${path}`, wsOptions);
170
194
  },
171
195
  };
@@ -1 +1 @@
1
- {"version":3,"file":"requestws.js","sourceRoot":"","sources":["../../../src/test/requestws.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"requestws.js","sourceRoot":"","sources":["../../../src/test/requestws.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export declare enum ApiErrors {
5
5
  UNKNOWN = "api-001",
6
6
  INTERNAL_ERROR = "api-002",
7
7
  INVALID_REQUEST = "api-003",
8
+ PAYLOAD_TOO_LARGE = "api-004",
8
9
  NOT_FOUND = "api-010",
9
10
  IDENTIFIER_EXISTS = "api-011",
10
11
  INVALID_OBJECT_VERSION = "api-012",
@@ -15,7 +16,9 @@ export declare enum ApiErrors {
15
16
  BULK_UPDATE_FAILURE = "api-022",
16
17
  AUTH_REQUIRED = "api-100",
17
18
  AUTH_FAILED = "api-101",
18
- AUTH_PERMISSION_FAILURE = "api-102"
19
+ AUTH_PERMISSION_FAILURE = "api-102",
20
+ AUTH_REQUIRES_TRUSTED_ROLE = "api-103",
21
+ AUTH_REQUIRES_ELEVATION = "api-104"
19
22
  }
20
23
  /**
21
24
  * Defines the default message of all common API errors.
@@ -24,6 +27,7 @@ export declare enum ApiErrorMessages {
24
27
  UNKNOWN = "An unknown error has occurred. Please try again.",
25
28
  INTERNAL_ERROR = "An internal error has occurred. Please contact the adminstrator.",
26
29
  INVALID_REQUEST = "Invalid message or request.",
30
+ PAYLOAD_TOO_LARGE = "The request body exceeds the maximum allowed size.",
27
31
  NOT_FOUND = "No resource could be found with the specified identifier.",
28
32
  IDENTIFIER_EXISTS = "A resource with that identifier already exists.",
29
33
  INVALID_OBJECT_VERSION = "Invalid object version. Do you have the latest version?",
@@ -34,5 +38,7 @@ export declare enum ApiErrorMessages {
34
38
  BULK_UPDATE_FAILURE = "Failed to update one or more objects.",
35
39
  AUTH_REQUIRED = "Authorization is required to access this resource.",
36
40
  AUTH_FAILED = "Invalid or missing authentication token.",
37
- AUTH_PERMISSION_FAILURE = "User does not have permission to perform this action."
41
+ AUTH_PERMISSION_FAILURE = "User does not have permission to perform this action.",
42
+ AUTH_REQUIRES_TRUSTED_ROLE = "User does not have permission to perform this action.",
43
+ AUTH_REQUIRES_ELEVATION = "This operation requires elevation."
38
44
  }
@@ -5,11 +5,6 @@
5
5
  * @author Jean-Philippe Steinmetz <rapidrests@gmail.com>
6
6
  */
7
7
  export declare abstract class BackgroundService {
8
- /** The global application configuration that the service can reference. */
9
- protected config: any;
10
- /** The logging utility to use. */
11
- protected logger: any;
12
- constructor(config: any, logger: any);
13
8
  /**
14
9
  * Returns the desired execution interval that this service should be scheduled with. If `undefined` is returned
15
10
  * the service is executed only once.
@@ -33,8 +33,9 @@ export declare class BackgroundServiceManager {
33
33
  private jobs;
34
34
  private readonly logger;
35
35
  private objectFactory;
36
+ private runningJobs;
36
37
  private services;
37
- constructor(objectFactory: ObjectFactory, classes: {}, config: any, logger: any);
38
+ constructor(objectFactory: ObjectFactory, classes: {});
38
39
  /**
39
40
  * Returns the service instance with the given name.
40
41
  *
@@ -1,4 +1,4 @@
1
- import { Redis } from "ioredis";
1
+ import type { RedisClientType } from "redis";
2
2
  import { ObjectFactory } from "./ObjectFactory.js";
3
3
  /**
4
4
  * The `EventListenerManager` is responsible for managing event handlers and processing of incoming
@@ -10,12 +10,13 @@ import { ObjectFactory } from "./ObjectFactory.js";
10
10
  * @author Jean-Philippe Steinmetz <rapidrests@gmail.com>
11
11
  */
12
12
  export declare class EventListenerManager {
13
- private channels;
14
- private logger;
15
- private objectFactory;
13
+ private readonly channels;
14
+ private readonly logger;
15
+ private readonly objectFactory;
16
16
  private handlers;
17
- private redis;
18
- constructor(objectFactory: ObjectFactory, redis: Redis);
17
+ private readonly typePatterns;
18
+ private readonly redis;
19
+ constructor(objectFactory: ObjectFactory, redis: RedisClientType);
19
20
  init(): Promise<void>;
20
21
  destroy(): Promise<void>;
21
22
  /**
@@ -1,4 +1,4 @@
1
- import { Redis } from "ioredis";
1
+ import type { RedisClientType } from "redis";
2
2
  /**
3
3
  * Utility functions for sending push notifications to registered clients.
4
4
  *
@@ -7,14 +7,16 @@ import { Redis } from "ioredis";
7
7
  export declare class NotificationUtils {
8
8
  /** The redis client to use for broadcasting messages. */
9
9
  private redis;
10
+ private logger?;
10
11
  /**
11
12
  * Initializes the utility using the given redis connection.
12
13
  *
13
14
  * @param {any} redis The redis connection to publish to.
14
15
  */
15
- constructor(redis: Redis);
16
+ constructor(redis: RedisClientType);
16
17
  /**
17
- * Sends a given message to the room or user with the specified uid(s).
18
+ * Sends a given message to the room or user with the specified uid(s). Publishing is fire-and-forget: a
19
+ * broadcast failure will never propagate back into whatever write triggered the notification.
18
20
  *
19
21
  * @param {string} uids The universally unique identifier of the room or user to send the message to.
20
22
  * @param {string} type The type of message being sent.
@@ -1,5 +1,5 @@
1
1
  import { oas31 as oa } from "openapi3-ts";
2
- import { DocumentsData } from "./decorators/DocDecorators.js";
2
+ import { type DocumentsData } from "./decorators/DocDecorators.js";
3
3
  /**
4
4
  * `OpenApiSpec` is a container for an OpenAPI specification.
5
5
  *
@@ -66,7 +66,7 @@ export declare class OpenApiSpec {
66
66
  * @param docs The object containing all documentation information about the route handler.
67
67
  * @param routeClass The parent route class that the route handler belongs to.
68
68
  */
69
- addRoute(name: string, path: string, method: string, metadata: any, docs: DocumentsData, routeClass: any): OpenApiSpec;
69
+ addRoute(name: string, path: string, method: string, metadata: any, docs: DocumentsData, routeClass: any, isWebSocket?: boolean): OpenApiSpec;
70
70
  /**
71
71
  * Determines if the given type is a primitive or built-in class type.
72
72
  * @param value