@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.
- package/LICENSE +382 -23
- package/README.md +79 -5
- package/dist/lib/ApiErrors.js +10 -0
- package/dist/lib/ApiErrors.js.map +1 -1
- package/dist/lib/BackgroundService.js +1 -4
- package/dist/lib/BackgroundService.js.map +1 -1
- package/dist/lib/BackgroundServiceManager.js +47 -6
- package/dist/lib/BackgroundServiceManager.js.map +1 -1
- package/dist/lib/BulkError.js +4 -0
- package/dist/lib/BulkError.js.map +1 -1
- package/dist/lib/EventListenerManager.js +53 -18
- package/dist/lib/EventListenerManager.js.map +1 -1
- package/dist/lib/NetUtils.js +1 -0
- package/dist/lib/NetUtils.js.map +1 -1
- package/dist/lib/NotificationUtils.js +27 -8
- package/dist/lib/NotificationUtils.js.map +1 -1
- package/dist/lib/ObjectFactory.js +25 -44
- package/dist/lib/ObjectFactory.js.map +1 -1
- package/dist/lib/OpenApiSpec.js +31 -11
- package/dist/lib/OpenApiSpec.js.map +1 -1
- package/dist/lib/Server.js +74 -110
- package/dist/lib/Server.js.map +1 -1
- package/dist/lib/auth/AuthMiddleware.js +11 -16
- package/dist/lib/auth/AuthMiddleware.js.map +1 -1
- package/dist/lib/auth/JWTStrategy.js +68 -17
- package/dist/lib/auth/JWTStrategy.js.map +1 -1
- package/dist/lib/auth/index.js +0 -1
- package/dist/lib/auth/index.js.map +1 -1
- package/dist/lib/database/ConnectionKinds.js +15 -0
- package/dist/lib/database/ConnectionKinds.js.map +1 -1
- package/dist/lib/database/ConnectionManager.js +140 -61
- package/dist/lib/database/ConnectionManager.js.map +1 -1
- package/dist/lib/database/MongoConnection.js +13 -3
- package/dist/lib/database/MongoConnection.js.map +1 -1
- package/dist/lib/database/MongoRepository.js +61 -15
- package/dist/lib/database/MongoRepository.js.map +1 -1
- package/dist/lib/database/MongoSchemaSync.js +3 -3
- package/dist/lib/database/MongoSchemaSync.js.map +1 -1
- package/dist/lib/database/NamingUtils.js +3 -2
- package/dist/lib/database/NamingUtils.js.map +1 -1
- package/dist/lib/database/RedisCache.js +64 -0
- package/dist/lib/database/RedisCache.js.map +1 -0
- package/dist/lib/database/TypeOrmSupport.js +53 -13
- package/dist/lib/database/TypeOrmSupport.js.map +1 -1
- package/dist/lib/database/index.js +1 -0
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/decorators/DatabaseDecorators.js +264 -20
- package/dist/lib/decorators/DatabaseDecorators.js.map +1 -1
- package/dist/lib/decorators/DocDecorators.js +30 -9
- package/dist/lib/decorators/DocDecorators.js.map +1 -1
- package/dist/lib/decorators/EventDecorators.js +1 -0
- package/dist/lib/decorators/EventDecorators.js.map +1 -1
- package/dist/lib/decorators/ModelDecorators.js +39 -23
- package/dist/lib/decorators/ModelDecorators.js.map +1 -1
- package/dist/lib/decorators/PersistenceDecorators.js +4 -3
- package/dist/lib/decorators/PersistenceDecorators.js.map +1 -1
- package/dist/lib/decorators/RouteDecorators.js +139 -36
- package/dist/lib/decorators/RouteDecorators.js.map +1 -1
- package/dist/lib/http/IWebSocketShim.js +2 -0
- package/dist/lib/http/IWebSocketShim.js.map +1 -0
- package/dist/lib/http/MiddlewareChain.js +167 -0
- package/dist/lib/http/MiddlewareChain.js.map +1 -0
- package/dist/lib/http/RuntimeDetect.js +9 -0
- package/dist/lib/http/RuntimeDetect.js.map +1 -0
- package/dist/lib/http/bun/BunAdapters.js +326 -0
- package/dist/lib/http/bun/BunAdapters.js.map +1 -0
- package/dist/lib/http/bun/BunRouter.js +391 -0
- package/dist/lib/http/bun/BunRouter.js.map +1 -0
- package/dist/lib/http/bun/BunWebSocket.js +49 -0
- package/dist/lib/http/bun/BunWebSocket.js.map +1 -0
- package/dist/lib/http/index.js +16 -3
- package/dist/lib/http/index.js.map +1 -1
- package/dist/lib/http/session/RedisSessionStore.js +30 -0
- package/dist/lib/http/session/RedisSessionStore.js.map +1 -0
- package/dist/lib/http/session/SessionManager.js +113 -0
- package/dist/lib/http/session/SessionManager.js.map +1 -0
- package/dist/lib/http/session/SessionStore.js +6 -0
- package/dist/lib/http/session/SessionStore.js.map +1 -0
- package/dist/lib/http/session/sessionMiddleware.js +42 -0
- package/dist/lib/http/session/sessionMiddleware.js.map +1 -0
- package/dist/lib/http/types.js +0 -3
- package/dist/lib/http/types.js.map +1 -1
- package/dist/lib/http/uWS/Adapters.js +421 -0
- package/dist/lib/http/uWS/Adapters.js.map +1 -0
- package/dist/lib/http/{Router.js → uWS/Router.js} +73 -173
- package/dist/lib/http/uWS/Router.js.map +1 -0
- package/dist/lib/http/{WebSocket.js → uWS/WebSocket.js} +4 -1
- package/dist/lib/http/uWS/WebSocket.js.map +1 -0
- package/dist/lib/models/BaseEntity.js +2 -1
- package/dist/lib/models/BaseEntity.js.map +1 -1
- package/dist/lib/models/BaseMongoEntity.js +2 -2
- package/dist/lib/models/BaseMongoEntity.js.map +1 -1
- package/dist/lib/models/ModelUtils.js +248 -101
- package/dist/lib/models/ModelUtils.js.map +1 -1
- package/dist/lib/models/RecoverableBaseEntity.js +6 -1
- package/dist/lib/models/RecoverableBaseEntity.js.map +1 -1
- package/dist/lib/models/RecoverableBaseMongoEntity.js +1 -0
- package/dist/lib/models/RecoverableBaseMongoEntity.js.map +1 -1
- package/dist/lib/models/RepoUtils.js +641 -203
- package/dist/lib/models/RepoUtils.js.map +1 -1
- package/dist/lib/models/SimpleEntity.js +1 -0
- package/dist/lib/models/SimpleEntity.js.map +1 -1
- package/dist/lib/models/SimpleMongoEntity.js +2 -1
- package/dist/lib/models/SimpleMongoEntity.js.map +1 -1
- package/dist/lib/models/StatusExtraData.js +4 -0
- package/dist/lib/models/StatusExtraData.js.map +1 -1
- package/dist/lib/routes/{AdminRoute.js → BaseAdminRoute.js} +98 -80
- package/dist/lib/routes/BaseAdminRoute.js.map +1 -0
- package/dist/lib/routes/{MetricsRoute.js → BaseMetricsRoute.js} +29 -15
- package/dist/lib/routes/BaseMetricsRoute.js.map +1 -0
- package/dist/lib/routes/{OpenAPIRoute.js → BaseOpenAPIRoute.js} +32 -32
- package/dist/lib/routes/BaseOpenAPIRoute.js.map +1 -0
- package/dist/lib/routes/BasePushRoute.js +305 -0
- package/dist/lib/routes/BasePushRoute.js.map +1 -0
- package/dist/lib/routes/BaseStaticRoute.js +153 -0
- package/dist/lib/routes/BaseStaticRoute.js.map +1 -0
- package/dist/lib/routes/BaseStatusRoute.js +80 -0
- package/dist/lib/routes/BaseStatusRoute.js.map +1 -0
- package/dist/lib/routes/CRUDRoute.js +284 -0
- package/dist/lib/routes/CRUDRoute.js.map +1 -0
- package/dist/lib/routes/ModelRoute.js +84 -57
- package/dist/lib/routes/ModelRoute.js.map +1 -1
- package/dist/lib/routes/RouteUtils.js +108 -20
- package/dist/lib/routes/RouteUtils.js.map +1 -1
- package/dist/lib/routes/index.js +7 -4
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/security/ACLUtils.js +297 -170
- package/dist/lib/security/ACLUtils.js.map +1 -1
- package/dist/lib/security/AccessControlList.js +18 -10
- package/dist/lib/security/AccessControlList.js.map +1 -1
- package/dist/lib/security/AccessControlListMongo.js +19 -68
- package/dist/lib/security/AccessControlListMongo.js.map +1 -1
- package/dist/lib/security/AccessControlListSQL.js +21 -70
- package/dist/lib/security/AccessControlListSQL.js.map +1 -1
- package/dist/lib/security/BaseACLRoute.js +239 -0
- package/dist/lib/security/BaseACLRoute.js.map +1 -0
- package/dist/lib/security/index.js +3 -0
- package/dist/lib/security/index.js.map +1 -1
- package/dist/lib/test/request.js +62 -5
- package/dist/lib/test/request.js.map +1 -1
- package/dist/lib/test/requestws.js +34 -10
- package/dist/lib/test/requestws.js.map +1 -1
- package/dist/types/ApiErrors.d.ts +8 -2
- package/dist/types/BackgroundService.d.ts +0 -5
- package/dist/types/BackgroundServiceManager.d.ts +2 -1
- package/dist/types/EventListenerManager.d.ts +7 -6
- package/dist/types/NotificationUtils.d.ts +5 -3
- package/dist/types/OpenApiSpec.d.ts +2 -2
- package/dist/types/Server.d.ts +28 -10
- package/dist/types/auth/AuthMiddleware.d.ts +3 -3
- package/dist/types/auth/AuthStrategy.d.ts +10 -7
- package/dist/types/auth/JWTStrategy.d.ts +6 -4
- package/dist/types/auth/index.d.ts +0 -1
- package/dist/types/database/ConnectionKinds.d.ts +7 -0
- package/dist/types/database/ConnectionManager.d.ts +29 -4
- package/dist/types/database/MongoConnection.d.ts +16 -4
- package/dist/types/database/MongoRepository.d.ts +32 -11
- package/dist/types/database/RedisCache.d.ts +23 -0
- package/dist/types/database/TypeOrmSupport.d.ts +4 -4
- package/dist/types/database/index.d.ts +1 -0
- package/dist/types/decorators/DatabaseDecorators.d.ts +139 -8
- package/dist/types/decorators/DocDecorators.d.ts +11 -2
- package/dist/types/decorators/ModelDecorators.d.ts +12 -5
- package/dist/types/decorators/PersistenceDecorators.d.ts +11 -4
- package/dist/types/decorators/RouteDecorators.d.ts +36 -6
- package/dist/types/http/IWebSocketShim.d.ts +11 -0
- package/dist/types/http/MiddlewareChain.d.ts +47 -0
- package/dist/types/http/RuntimeDetect.d.ts +2 -0
- package/dist/types/http/bun/BunAdapters.d.ts +139 -0
- package/dist/types/http/bun/BunRouter.d.ts +79 -0
- package/dist/types/http/bun/BunWebSocket.d.ts +35 -0
- package/dist/types/http/index.d.ts +16 -6
- package/dist/types/http/session/RedisSessionStore.d.ts +15 -0
- package/dist/types/http/session/SessionManager.d.ts +35 -0
- package/dist/types/http/session/SessionStore.d.ts +12 -0
- package/dist/types/http/session/sessionMiddleware.d.ts +10 -0
- package/dist/types/http/types.d.ts +42 -3
- package/dist/types/http/uWS/Adapters.d.ts +129 -0
- package/dist/types/http/{Router.d.ts → uWS/Router.d.ts} +14 -38
- package/dist/types/http/{WebSocket.d.ts → uWS/WebSocket.d.ts} +6 -5
- package/dist/types/models/BaseEntity.d.ts +1 -1
- package/dist/types/models/ModelUtils.d.ts +47 -14
- package/dist/types/models/RecoverableBaseEntity.d.ts +3 -1
- package/dist/types/models/RepoUtils.d.ts +84 -14
- package/dist/types/routes/BaseAdminRoute.d.ts +65 -0
- package/dist/types/routes/BaseMetricsRoute.d.ts +37 -0
- package/dist/types/routes/BaseOpenAPIRoute.d.ts +33 -0
- package/dist/types/routes/BasePushRoute.d.ts +53 -0
- package/dist/types/routes/BaseStaticRoute.d.ts +44 -0
- package/dist/types/routes/BaseStatusRoute.d.ts +37 -0
- package/dist/types/routes/CRUDRoute.d.ts +57 -0
- package/dist/types/routes/ModelRoute.d.ts +39 -36
- package/dist/types/routes/RouteUtils.d.ts +19 -0
- package/dist/types/routes/index.d.ts +7 -4
- package/dist/types/security/ACLUtils.d.ts +94 -18
- package/dist/types/security/AccessControlList.d.ts +37 -59
- package/dist/types/security/AccessControlListMongo.d.ts +3 -8
- package/dist/types/security/AccessControlListSQL.d.ts +3 -8
- package/dist/types/security/BaseACLRoute.d.ts +73 -0
- package/dist/types/security/index.d.ts +3 -0
- package/dist/types/test/request.d.ts +18 -1
- package/package.json +135 -129
- package/tsconfig.export.json +17 -0
- package/dist/lib/auth/BasicStrategy.js +0 -113
- package/dist/lib/auth/BasicStrategy.js.map +0 -1
- package/dist/lib/http/Adapters.js +0 -241
- package/dist/lib/http/Adapters.js.map +0 -1
- package/dist/lib/http/Router.js.map +0 -1
- package/dist/lib/http/WebSocket.js.map +0 -1
- package/dist/lib/routes/AdminRoute.js.map +0 -1
- package/dist/lib/routes/MetricsRoute.js.map +0 -1
- package/dist/lib/routes/OpenAPIRoute.js.map +0 -1
- package/dist/lib/routes/StatusRoute.js +0 -55
- package/dist/lib/routes/StatusRoute.js.map +0 -1
- package/dist/lib/security/ACLRouteMongo.js +0 -194
- package/dist/lib/security/ACLRouteMongo.js.map +0 -1
- package/dist/lib/security/ACLRouteSQL.js +0 -193
- package/dist/lib/security/ACLRouteSQL.js.map +0 -1
- package/dist/types/auth/BasicStrategy.d.ts +0 -37
- package/dist/types/http/Adapters.d.ts +0 -68
- package/dist/types/routes/AdminRoute.d.ts +0 -47
- package/dist/types/routes/MetricsRoute.d.ts +0 -15
- package/dist/types/routes/OpenAPIRoute.d.ts +0 -17
- package/dist/types/routes/StatusRoute.d.ts +0 -11
- package/dist/types/security/ACLRouteMongo.d.ts +0 -19
- package/dist/types/security/ACLRouteSQL.d.ts +0 -19
- package/docs/Makefile +0 -20
- package/docs/conf.py +0 -58
- package/docs/index.rst +0 -17
- package/docs/make.bat +0 -35
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/README.md +0 -13
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/MongoRepository.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/RedisConnection.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DatabaseDecorators/functions/Repository.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/README.md +0 -23
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Default.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Description.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Document.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Example.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Format.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Returns.md +0 -28
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Summary.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/Tags.md +0 -25
- package/docs/reference/@rapidrest/namespaces/DocDecorators/functions/TypeInfo.md +0 -28
- package/docs/reference/@rapidrest/namespaces/DocDecorators/interfaces/DocumentsData.md +0 -57
- package/docs/reference/@rapidrest/namespaces/EventDecorators/README.md +0 -12
- package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/EventListener.md +0 -17
- package/docs/reference/@rapidrest/namespaces/EventDecorators/functions/OnEvent.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/README.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Cache.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/ChildEntity.md +0 -18
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/DataStore.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Identifier.md +0 -27
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Protect.md +0 -35
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Reference.md +0 -25
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/Shard.md +0 -27
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/functions/TrackChanges.md +0 -26
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/interfaces/PendingTypeOrmColumn.md +0 -45
- package/docs/reference/@rapidrest/namespaces/ModelDecorators/variables/pendingTypeOrmColumns.md +0 -14
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/README.md +0 -27
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Column.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Entity.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Index.md +0 -119
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/PrimaryColumn.md +0 -25
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/Unique.md +0 -68
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getColumnMetadata.md +0 -26
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getEntityName.md +0 -26
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/functions/getIndexMetadata.md +0 -27
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/CollationOptions.md +0 -79
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnInfo.md +0 -41
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/ColumnOptions.md +0 -51
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/EntityOptions.md +0 -32
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexInfo.md +0 -41
- package/docs/reference/@rapidrest/namespaces/PersistenceDecorators/interfaces/IndexOptions.md +0 -61
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/README.md +0 -36
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/After.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Auth.md +0 -33
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/AuthResult.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Before.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/ContentType.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Delete.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Get.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Head.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Header.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Method.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Model.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Options.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Param.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Patch.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Post.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Protect.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Put.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Query.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Request.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/RequiresRole.md +0 -26
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Response.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Route.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Socket.md +0 -33
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/User.md +0 -31
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/Validate.md +0 -25
- package/docs/reference/@rapidrest/namespaces/RouteDecorators/functions/WebSocket.md +0 -25
- package/docs/reference/README.md +0 -20
- package/docs/reference/classes/ACLUtils.md +0 -263
- package/docs/reference/classes/AdminRoute.md +0 -51
- package/docs/reference/classes/AuthMiddleware.md +0 -173
- package/docs/reference/classes/BackgroundService.md +0 -117
- package/docs/reference/classes/BackgroundServiceManager.md +0 -172
- package/docs/reference/classes/BaseEntity.md +0 -82
- package/docs/reference/classes/BaseMongoEntity.md +0 -107
- package/docs/reference/classes/BasicStrategy.md +0 -131
- package/docs/reference/classes/BasicStrategyOptions.md +0 -115
- package/docs/reference/classes/BulkError.md +0 -271
- package/docs/reference/classes/ConnectionManager.md +0 -75
- package/docs/reference/classes/EventListenerManager.md +0 -88
- package/docs/reference/classes/HttpRouter.md +0 -343
- package/docs/reference/classes/JWTStrategy.md +0 -100
- package/docs/reference/classes/JWTStrategyOptions.md +0 -97
- package/docs/reference/classes/MetricsRoute.md +0 -27
- package/docs/reference/classes/ModelRoute.md +0 -527
- package/docs/reference/classes/ModelUtils.md +0 -446
- package/docs/reference/classes/MongoConnection.md +0 -218
- package/docs/reference/classes/MongoRepository.md +0 -390
- package/docs/reference/classes/MongoSchemaSync.md +0 -97
- package/docs/reference/classes/NetUtils.md +0 -90
- package/docs/reference/classes/NotificationUtils.md +0 -77
- package/docs/reference/classes/ObjectFactory.md +0 -336
- package/docs/reference/classes/OpenAPIRoute.md +0 -77
- package/docs/reference/classes/OpenApiSpec.md +0 -892
- package/docs/reference/classes/RecoverableBaseEntity.md +0 -114
- package/docs/reference/classes/RecoverableBaseMongoEntity.md +0 -124
- package/docs/reference/classes/RedisTransport.md +0 -2202
- package/docs/reference/classes/RepoUtils.md +0 -482
- package/docs/reference/classes/RouteUtils.md +0 -191
- package/docs/reference/classes/Server.md +0 -408
- package/docs/reference/classes/SimpleEntity.md +0 -48
- package/docs/reference/classes/SimpleMongoEntity.md +0 -66
- package/docs/reference/classes/StatusExtraData.md +0 -57
- package/docs/reference/classes/StatusRoute.md +0 -26
- package/docs/reference/classes/UWSRequest.md +0 -226
- package/docs/reference/classes/UWSResponse.md +0 -257
- package/docs/reference/classes/UWSWebSocketShim.md +0 -958
- package/docs/reference/enumerations/ACLAction.md +0 -63
- package/docs/reference/enumerations/ApiErrorMessages.md +0 -123
- package/docs/reference/enumerations/ApiErrors.md +0 -123
- package/docs/reference/functions/createWebSocketStream.md +0 -27
- package/docs/reference/functions/isSqlDataSource.md +0 -26
- package/docs/reference/functions/readBody.md +0 -29
- package/docs/reference/functions/resolveCollectionName.md +0 -33
- package/docs/reference/functions/runChain.md +0 -40
- package/docs/reference/functions/snakeCase.md +0 -28
- package/docs/reference/globals.md +0 -106
- package/docs/reference/interfaces/ACLRecord.md +0 -96
- package/docs/reference/interfaces/AccessControlList.md +0 -76
- package/docs/reference/interfaces/AuthResult.md +0 -55
- package/docs/reference/interfaces/AuthStrategy.md +0 -95
- package/docs/reference/interfaces/CreateRequestOptions.md +0 -121
- package/docs/reference/interfaces/DeleteRequestOptions.md +0 -137
- package/docs/reference/interfaces/FindRequestOptions.md +0 -133
- package/docs/reference/interfaces/HttpRequest.md +0 -147
- package/docs/reference/interfaces/HttpResponse.md +0 -164
- package/docs/reference/interfaces/JWTAuthResult.md +0 -84
- package/docs/reference/interfaces/RepoCreateOptions.md +0 -95
- package/docs/reference/interfaces/RepoDeleteOptions.md +0 -105
- package/docs/reference/interfaces/RepoFindOptions.md +0 -125
- package/docs/reference/interfaces/RepoOperationOptions.md +0 -69
- package/docs/reference/interfaces/RepoUpdateOptions.md +0 -101
- package/docs/reference/interfaces/RequestOptions.md +0 -112
- package/docs/reference/interfaces/RequestWS.md +0 -225
- package/docs/reference/interfaces/TruncateRequestOptions.md +0 -161
- package/docs/reference/interfaces/UpdateRequestOptions.md +0 -139
- package/docs/reference/type-aliases/ErrorHandler.md +0 -35
- package/docs/reference/type-aliases/NextFunction.md +0 -23
- package/docs/reference/type-aliases/OneOrMany.md +0 -19
- package/docs/reference/type-aliases/OneOrNull.md +0 -19
- package/docs/reference/type-aliases/PartialBaseEntity.md +0 -17
- package/docs/reference/type-aliases/PartialSimpleEntity.md +0 -17
- package/docs/reference/type-aliases/RequestHandler.md +0 -31
- package/docs/reference/type-aliases/UpdateObject.md +0 -19
- package/docs/reference/type-aliases/WsUpgradeAuth.md +0 -27
- 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"}
|
package/dist/lib/http/index.js
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export {
|
|
3
|
-
export {
|
|
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":"
|
|
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":"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"}
|