@forklaunch/core 0.2.3 → 0.2.6
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 +21 -0
- package/lib/dist/cache/index.d.ts +4 -0
- package/lib/dist/cache/index.d.ts.map +1 -0
- package/lib/dist/cache/interfaces/ttlCache.interface.d.ts +2 -0
- package/lib/dist/cache/interfaces/ttlCache.interface.d.ts.map +1 -0
- package/lib/dist/cache/redisTtlCache.d.ts +353 -0
- package/lib/dist/cache/redisTtlCache.d.ts.map +1 -0
- package/{dist → lib/dist}/cache/redisTtlCache.js +1 -4
- package/lib/dist/cache/types/ttlCacheRecord.types.d.ts +2 -0
- package/lib/dist/cache/types/ttlCacheRecord.types.d.ts.map +1 -0
- package/lib/dist/controllers/index.d.ts +2 -0
- package/lib/dist/controllers/index.d.ts.map +1 -0
- package/lib/dist/controllers/interfaces/controller.interface.d.ts +2 -0
- package/lib/dist/controllers/interfaces/controller.interface.d.ts.map +1 -0
- package/lib/dist/database/index.d.ts +2 -0
- package/lib/dist/database/index.d.ts.map +1 -0
- package/lib/dist/database/mikro/models/entities/base.entity.d.ts +26 -0
- package/lib/dist/database/mikro/models/entities/base.entity.d.ts.map +1 -0
- package/lib/dist/database/mikro/models/entities/base.entity.js +46 -0
- package/lib/dist/entityMapper/index.d.ts +3 -0
- package/lib/dist/entityMapper/index.d.ts.map +1 -0
- package/lib/dist/entityMapper/interfaces/entityMapper.interface.d.ts +2 -0
- package/lib/dist/entityMapper/interfaces/entityMapper.interface.d.ts.map +1 -0
- package/lib/dist/entityMapper/models/baseEntityMapper.model.d.ts +63 -0
- package/lib/dist/entityMapper/models/baseEntityMapper.model.d.ts.map +1 -0
- package/lib/dist/entityMapper/models/requestEntityMapper.model.d.ts +58 -0
- package/lib/dist/entityMapper/models/requestEntityMapper.model.d.ts.map +1 -0
- package/lib/dist/entityMapper/models/responseEntityMapper.model.d.ts +56 -0
- package/lib/dist/entityMapper/models/responseEntityMapper.model.d.ts.map +1 -0
- package/lib/dist/entityMapper/types/entityMapper.types.d.ts +2 -0
- package/lib/dist/entityMapper/types/entityMapper.types.d.ts.map +1 -0
- package/lib/dist/http/guards/isHttpContractDetails.d.ts +5 -0
- package/lib/dist/http/guards/isHttpContractDetails.d.ts.map +1 -0
- package/lib/dist/http/guards/isHttpContractDetails.js +6 -0
- package/lib/dist/http/guards/isResponseShape.d.ts +2 -0
- package/lib/dist/http/guards/isResponseShape.d.ts.map +1 -0
- package/lib/dist/http/guards/isResponseShape.js +7 -0
- package/lib/dist/http/index.d.ts +6 -0
- package/lib/dist/http/index.d.ts.map +1 -0
- package/{dist → lib/dist}/http/index.js +1 -2
- package/lib/dist/http/interfaces/expressLikeApplication.interface.d.ts +12 -0
- package/lib/dist/http/interfaces/expressLikeApplication.interface.d.ts.map +1 -0
- package/lib/dist/http/interfaces/expressLikeRouter.interface.d.ts +103 -0
- package/lib/dist/http/interfaces/expressLikeRouter.interface.d.ts.map +1 -0
- package/lib/dist/http/interfaces/expressLikeRouter.interface.js +336 -0
- package/lib/dist/http/interfaces/index.d.ts +3 -0
- package/lib/dist/http/interfaces/index.d.ts.map +1 -0
- package/lib/dist/http/interfaces/index.js +2 -0
- package/lib/dist/http/middleware/index.d.ts +3 -0
- package/lib/dist/http/middleware/index.d.ts.map +1 -0
- package/lib/dist/http/middleware/request.middleware.d.ts +69 -0
- package/lib/dist/http/middleware/request.middleware.d.ts.map +1 -0
- package/{dist → lib/dist}/http/middleware/request.middleware.js +55 -117
- package/lib/dist/http/middleware/response.middleware.d.ts +27 -0
- package/lib/dist/http/middleware/response.middleware.d.ts.map +1 -0
- package/lib/dist/http/middleware/response.middleware.js +52 -0
- package/lib/dist/http/openApiV3Generator/index.d.ts +2 -0
- package/lib/dist/http/openApiV3Generator/index.d.ts.map +1 -0
- package/lib/dist/http/openApiV3Generator/index.js +1 -0
- package/lib/dist/http/openApiV3Generator/openApiV3Generator.d.ts +11 -0
- package/lib/dist/http/openApiV3Generator/openApiV3Generator.d.ts.map +1 -0
- package/{dist/http → lib/dist/http/openApiV3Generator}/openApiV3Generator.js +2 -24
- package/lib/dist/http/types/apiDefinition.types.d.ts +2 -0
- package/lib/dist/http/types/apiDefinition.types.d.ts.map +1 -0
- package/lib/dist/http/types/contractDetails.types.d.ts +2 -0
- package/lib/dist/http/types/contractDetails.types.d.ts.map +1 -0
- package/lib/dist/http/types/index.d.ts +4 -0
- package/lib/dist/http/types/index.d.ts.map +1 -0
- package/lib/dist/http/types/index.js +3 -0
- package/lib/dist/http/types/router.types.d.ts +2 -0
- package/lib/dist/http/types/router.types.d.ts.map +1 -0
- package/lib/dist/http/utils/enrichExpressLikeSend.d.ts +28 -0
- package/lib/dist/http/utils/enrichExpressLikeSend.d.ts.map +1 -0
- package/lib/dist/http/utils/enrichExpressLikeSend.js +50 -0
- package/lib/dist/http/utils/httpStatusCodes.d.ts +986 -0
- package/lib/dist/http/utils/httpStatusCodes.d.ts.map +1 -0
- package/lib/dist/http/utils/index.d.ts +3 -0
- package/lib/dist/http/utils/index.d.ts.map +1 -0
- package/lib/dist/http/utils/index.js +2 -0
- package/lib/dist/index.d.ts +7 -0
- package/lib/dist/index.d.ts.map +1 -0
- package/lib/dist/jest.config.d.ts +15 -0
- package/lib/dist/jest.config.d.ts.map +1 -0
- package/lib/dist/jest.config.js +21 -0
- package/lib/dist/lib/index.d.ts +7 -0
- package/lib/dist/lib/index.d.ts.map +1 -0
- package/lib/dist/lib/index.js +6 -0
- package/lib/dist/lib/jest.config.d.ts +15 -0
- package/lib/dist/lib/jest.config.d.ts.map +1 -0
- package/lib/dist/lib/jest.config.js +21 -0
- package/lib/dist/lib/src/cache/index.d.ts +4 -0
- package/lib/dist/lib/src/cache/index.d.ts.map +1 -0
- package/lib/dist/lib/src/cache/index.js +3 -0
- package/lib/dist/lib/src/cache/interfaces/ttlCache.interface.d.ts +2 -0
- package/lib/dist/lib/src/cache/interfaces/ttlCache.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/cache/redisTtlCache.d.ts +353 -0
- package/lib/dist/lib/src/cache/redisTtlCache.d.ts.map +1 -0
- package/lib/dist/lib/src/cache/redisTtlCache.js +98 -0
- package/lib/dist/lib/src/cache/types/ttlCacheRecord.types.d.ts +2 -0
- package/lib/dist/lib/src/cache/types/ttlCacheRecord.types.d.ts.map +1 -0
- package/lib/dist/lib/src/cache/types/ttlCacheRecord.types.js +1 -0
- package/lib/dist/lib/src/controllers/index.d.ts +2 -0
- package/lib/dist/lib/src/controllers/index.d.ts.map +1 -0
- package/lib/dist/lib/src/controllers/index.js +1 -0
- package/lib/dist/lib/src/controllers/interfaces/controller.interface.d.ts +2 -0
- package/lib/dist/lib/src/controllers/interfaces/controller.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/controllers/interfaces/controller.interface.js +1 -0
- package/lib/dist/lib/src/database/index.d.ts +2 -0
- package/lib/dist/lib/src/database/index.d.ts.map +1 -0
- package/lib/dist/lib/src/database/index.js +1 -0
- package/lib/dist/lib/src/database/mikro/models/entities/base.entity.d.ts +26 -0
- package/lib/dist/lib/src/database/mikro/models/entities/base.entity.d.ts.map +1 -0
- package/lib/dist/lib/src/database/mikro/models/entities/base.entity.js +46 -0
- package/lib/dist/lib/src/domainMapper/index.d.ts +3 -0
- package/lib/dist/lib/src/domainMapper/index.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/index.js +2 -0
- package/lib/dist/lib/src/domainMapper/interfaces/dtoMapper.interface.d.ts +2 -0
- package/lib/dist/lib/src/domainMapper/interfaces/dtoMapper.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/interfaces/dtoMapper.interface.js +1 -0
- package/lib/dist/lib/src/domainMapper/models/baseDtoMapper.model.d.ts +63 -0
- package/lib/dist/lib/src/domainMapper/models/baseDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/models/baseDtoMapper.model.js +75 -0
- package/lib/dist/lib/src/domainMapper/models/requestDtoMapper.model.d.ts +58 -0
- package/lib/dist/lib/src/domainMapper/models/requestDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/models/requestDtoMapper.model.js +70 -0
- package/lib/dist/lib/src/domainMapper/models/responseDtoMapper.model.d.ts +56 -0
- package/lib/dist/lib/src/domainMapper/models/responseDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/models/responseDtoMapper.model.js +65 -0
- package/lib/dist/lib/src/domainMapper/types/dtoMapper.types.d.ts +2 -0
- package/lib/dist/lib/src/domainMapper/types/dtoMapper.types.d.ts.map +1 -0
- package/lib/dist/lib/src/domainMapper/types/dtoMapper.types.js +1 -0
- package/lib/dist/lib/src/dtoMapper/index.d.ts +3 -0
- package/lib/dist/lib/src/dtoMapper/index.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/index.js +2 -0
- package/lib/dist/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts +2 -0
- package/lib/dist/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/interfaces/dtoMapper.interface.js +1 -0
- package/lib/dist/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts +63 -0
- package/lib/dist/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/models/baseDtoMapper.model.js +75 -0
- package/lib/dist/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts +58 -0
- package/lib/dist/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/models/requestDtoMapper.model.js +70 -0
- package/lib/dist/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts +56 -0
- package/lib/dist/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/models/responseDtoMapper.model.js +65 -0
- package/lib/dist/lib/src/dtoMapper/types/dtoMapper.types.d.ts +2 -0
- package/lib/dist/lib/src/dtoMapper/types/dtoMapper.types.d.ts.map +1 -0
- package/lib/dist/lib/src/dtoMapper/types/dtoMapper.types.js +1 -0
- package/lib/dist/lib/src/http/application/expressLikeApplication.d.ts +18 -0
- package/lib/dist/lib/src/http/application/expressLikeApplication.d.ts.map +1 -0
- package/lib/dist/lib/src/http/application/expressLikeApplication.js +20 -0
- package/lib/dist/lib/src/http/guards/isHttpContractDetails.d.ts +5 -0
- package/lib/dist/lib/src/http/guards/isHttpContractDetails.d.ts.map +1 -0
- package/lib/dist/lib/src/http/guards/isHttpContractDetails.js +6 -0
- package/lib/dist/lib/src/http/guards/isResponseShape.d.ts +2 -0
- package/lib/dist/lib/src/http/guards/isResponseShape.d.ts.map +1 -0
- package/lib/dist/lib/src/http/guards/isResponseShape.js +7 -0
- package/lib/dist/lib/src/http/handler/typedHandler.d.ts +21 -0
- package/lib/dist/lib/src/http/handler/typedHandler.d.ts.map +1 -0
- package/lib/dist/lib/src/http/handler/typedHandler.js +25 -0
- package/lib/dist/lib/src/http/index.d.ts +11 -0
- package/lib/dist/lib/src/http/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/index.js +10 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeApplication.interface.d.ts +12 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeApplication.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeApplication.interface.js +14 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeRouter.interface.d.ts +2 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeRouter.interface.d.ts.map +1 -0
- package/lib/dist/lib/src/http/interfaces/expressLikeRouter.interface.js +1 -0
- package/lib/dist/lib/src/http/interfaces/index.d.ts +3 -0
- package/lib/dist/lib/src/http/interfaces/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/interfaces/index.js +2 -0
- package/lib/dist/lib/src/http/middleware/index.d.ts +3 -0
- package/lib/dist/lib/src/http/middleware/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/index.js +2 -0
- package/lib/dist/lib/src/http/middleware/request/auth.middleware.d.ts +27 -0
- package/lib/dist/lib/src/http/middleware/request/auth.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request/auth.middleware.js +107 -0
- package/lib/dist/lib/src/http/middleware/request/cors.middleware.d.ts +9 -0
- package/lib/dist/lib/src/http/middleware/request/cors.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request/cors.middleware.js +15 -0
- package/lib/dist/lib/src/http/middleware/request/createContext.middleware.d.ts +12 -0
- package/lib/dist/lib/src/http/middleware/request/createContext.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request/createContext.middleware.js +26 -0
- package/lib/dist/lib/src/http/middleware/request/enrichDetails.middleware.d.ts +12 -0
- package/lib/dist/lib/src/http/middleware/request/enrichDetails.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request/enrichDetails.middleware.js +19 -0
- package/lib/dist/lib/src/http/middleware/request/parse.middleware.d.ts +13 -0
- package/lib/dist/lib/src/http/middleware/request/parse.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request/parse.middleware.js +43 -0
- package/lib/dist/lib/src/http/middleware/request.middleware.d.ts +69 -0
- package/lib/dist/lib/src/http/middleware/request.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/request.middleware.js +210 -0
- package/lib/dist/lib/src/http/middleware/response/parse.middleware.d.ts +27 -0
- package/lib/dist/lib/src/http/middleware/response/parse.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/response/parse.middleware.js +52 -0
- package/lib/dist/lib/src/http/middleware/response.middleware.d.ts +27 -0
- package/lib/dist/lib/src/http/middleware/response.middleware.d.ts.map +1 -0
- package/lib/dist/lib/src/http/middleware/response.middleware.js +52 -0
- package/lib/dist/lib/src/http/openApiV3Generator/index.d.ts +2 -0
- package/lib/dist/lib/src/http/openApiV3Generator/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/openApiV3Generator/index.js +1 -0
- package/lib/dist/lib/src/http/openApiV3Generator/openApiV3Generator.d.ts +11 -0
- package/lib/dist/lib/src/http/openApiV3Generator/openApiV3Generator.d.ts.map +1 -0
- package/lib/dist/lib/src/http/openApiV3Generator/openApiV3Generator.js +167 -0
- package/lib/dist/lib/src/http/router/expressLikeRouter.d.ts +89 -0
- package/lib/dist/lib/src/http/router/expressLikeRouter.d.ts.map +1 -0
- package/{dist/http/interfaces/forklaunchExpress.router.interface.js → lib/dist/lib/src/http/router/expressLikeRouter.js} +85 -91
- package/lib/dist/lib/src/http/types/apiDefinition.types.d.ts +2 -0
- package/lib/dist/lib/src/http/types/apiDefinition.types.d.ts.map +1 -0
- package/lib/dist/lib/src/http/types/apiDefinition.types.js +1 -0
- package/lib/dist/lib/src/http/types/contractDetails.types.d.ts +2 -0
- package/lib/dist/lib/src/http/types/contractDetails.types.d.ts.map +1 -0
- package/lib/dist/lib/src/http/types/contractDetails.types.js +1 -0
- package/lib/dist/lib/src/http/types/index.d.ts +4 -0
- package/lib/dist/lib/src/http/types/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/types/index.js +3 -0
- package/lib/dist/lib/src/http/types/router.types.d.ts +2 -0
- package/lib/dist/lib/src/http/types/router.types.d.ts.map +1 -0
- package/lib/dist/lib/src/http/types/router.types.js +1 -0
- package/lib/dist/lib/src/http/utils/enrichExpressLikeSend.d.ts +28 -0
- package/lib/dist/lib/src/http/utils/enrichExpressLikeSend.d.ts.map +1 -0
- package/lib/dist/lib/src/http/utils/enrichExpressLikeSend.js +50 -0
- package/lib/dist/lib/src/http/utils/httpStatusCodes.d.ts +986 -0
- package/lib/dist/lib/src/http/utils/httpStatusCodes.d.ts.map +1 -0
- package/lib/dist/lib/src/http/utils/httpStatusCodes.js +1039 -0
- package/lib/dist/lib/src/http/utils/index.d.ts +3 -0
- package/lib/dist/lib/src/http/utils/index.d.ts.map +1 -0
- package/lib/dist/lib/src/http/utils/index.js +2 -0
- package/lib/dist/lib/src/services/index.d.ts +2 -0
- package/lib/dist/lib/src/services/index.d.ts.map +1 -0
- package/lib/dist/lib/src/services/interfaces/baseService.d.ts +2 -0
- package/lib/dist/lib/src/services/interfaces/baseService.d.ts.map +1 -0
- package/lib/dist/lib/src/services/interfaces/baseService.js +1 -0
- package/lib/dist/lib/tests/dtoMapper.test.d.ts +2 -0
- package/lib/dist/lib/tests/dtoMapper.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/dtoMapper.test.js +172 -0
- package/lib/dist/lib/tests/entityMapper.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/entityMapper.test.js +172 -0
- package/lib/dist/lib/tests/expressLikeRouter.test.d.ts +2 -0
- package/lib/dist/lib/tests/expressLikeRouter.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/expressLikeRouter.test.js +3 -0
- package/lib/dist/lib/tests/http.middleware.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/http.middleware.test.js +95 -0
- package/lib/dist/lib/tests/openApiV3Generator.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/openApiV3Generator.test.js +66 -0
- package/lib/dist/lib/tests/redisTtlCache.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/redisTtlCache.test.js +49 -0
- package/lib/dist/lib/tests/typedHandler.test.d.ts +2 -0
- package/lib/dist/lib/tests/typedHandler.test.d.ts.map +1 -0
- package/lib/dist/lib/tests/typedHandler.test.js +3 -0
- package/lib/dist/lib/vitest.config.d.ts +3 -0
- package/lib/dist/lib/vitest.config.d.ts.map +1 -0
- package/lib/dist/lib/vitest.config.js +7 -0
- package/lib/dist/services/index.d.ts +2 -0
- package/lib/dist/services/index.d.ts.map +1 -0
- package/lib/dist/services/index.js +1 -0
- package/lib/dist/services/interfaces/baseService.d.ts +2 -0
- package/lib/dist/services/interfaces/baseService.d.ts.map +1 -0
- package/lib/dist/services/interfaces/baseService.js +1 -0
- package/lib/dist/tests/entityMapper.test.d.ts +2 -0
- package/lib/dist/tests/entityMapper.test.d.ts.map +1 -0
- package/{dist → lib/dist}/tests/entityMapper.test.js +6 -2
- package/lib/dist/tests/http.middleware.test.d.ts +2 -0
- package/lib/dist/tests/http.middleware.test.d.ts.map +1 -0
- package/{dist → lib/dist}/tests/http.middleware.test.js +39 -21
- package/lib/dist/tests/openApiV3Generator.test.d.ts +2 -0
- package/lib/dist/tests/openApiV3Generator.test.d.ts.map +1 -0
- package/{dist → lib/dist}/tests/openApiV3Generator.test.js +1 -1
- package/lib/dist/tests/redisTtlCache.test.d.ts +2 -0
- package/lib/dist/tests/redisTtlCache.test.d.ts.map +1 -0
- package/lib/eslint.config.mjs +10 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +7 -0
- package/lib/jest.config.d.ts +4 -0
- package/lib/jest.config.d.ts.map +1 -0
- package/lib/jest.config.js +21 -0
- package/lib/src/cache/index.d.ts.map +1 -0
- package/lib/src/cache/index.js +3 -0
- package/lib/src/cache/interfaces/ttlCache.interface.d.ts.map +1 -0
- package/lib/src/cache/interfaces/ttlCache.interface.js +1 -0
- package/lib/src/cache/redisTtlCache.d.ts.map +1 -0
- package/lib/src/cache/redisTtlCache.js +98 -0
- package/lib/src/cache/types/ttlCacheRecord.types.d.ts.map +1 -0
- package/lib/src/cache/types/ttlCacheRecord.types.js +1 -0
- package/lib/src/controllers/index.d.ts.map +1 -0
- package/lib/src/controllers/index.js +1 -0
- package/lib/src/controllers/interfaces/controller.interface.d.ts.map +1 -0
- package/lib/src/controllers/interfaces/controller.interface.js +1 -0
- package/lib/src/database/index.d.ts.map +1 -0
- package/lib/src/database/index.js +1 -0
- package/lib/src/database/mikro/models/entities/base.entity.d.ts.map +1 -0
- package/lib/src/domainMapper/index.d.ts +3 -0
- package/lib/src/domainMapper/index.d.ts.map +1 -0
- package/lib/src/domainMapper/index.js +2 -0
- package/{dist/entityMapper/interfaces/entityMapper.interface.d.ts → lib/src/domainMapper/interfaces/dtoMapper.interface.d.ts} +3 -3
- package/lib/src/domainMapper/interfaces/dtoMapper.interface.d.ts.map +1 -0
- package/lib/src/domainMapper/interfaces/dtoMapper.interface.js +1 -0
- package/{dist/entityMapper/models/baseEntityMapper.model.d.ts → lib/src/domainMapper/models/baseDtoMapper.model.d.ts} +13 -13
- package/lib/src/domainMapper/models/baseDtoMapper.model.d.ts.map +1 -0
- package/lib/src/domainMapper/models/baseDtoMapper.model.js +75 -0
- package/{dist/entityMapper/models/requestEntityMapper.model.d.ts → lib/src/domainMapper/models/requestDtoMapper.model.d.ts} +13 -13
- package/lib/src/domainMapper/models/requestDtoMapper.model.d.ts.map +1 -0
- package/lib/src/domainMapper/models/requestDtoMapper.model.js +70 -0
- package/{dist/entityMapper/models/responseEntityMapper.model.d.ts → lib/src/domainMapper/models/responseDtoMapper.model.d.ts} +12 -12
- package/lib/src/domainMapper/models/responseDtoMapper.model.d.ts.map +1 -0
- package/lib/src/domainMapper/models/responseDtoMapper.model.js +65 -0
- package/lib/src/domainMapper/types/dtoMapper.types.d.ts +9 -0
- package/lib/src/domainMapper/types/dtoMapper.types.d.ts.map +1 -0
- package/lib/src/domainMapper/types/dtoMapper.types.js +1 -0
- package/lib/src/dtoMapper/index.d.ts +3 -0
- package/lib/src/dtoMapper/index.d.ts.map +1 -0
- package/lib/src/dtoMapper/index.js +2 -0
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts +18 -0
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.d.ts.map +1 -0
- package/lib/src/dtoMapper/interfaces/dtoMapper.interface.js +1 -0
- package/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts +72 -0
- package/lib/src/dtoMapper/models/baseDtoMapper.model.d.ts.map +1 -0
- package/lib/src/dtoMapper/models/baseDtoMapper.model.js +75 -0
- package/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts +68 -0
- package/lib/src/dtoMapper/models/requestDtoMapper.model.d.ts.map +1 -0
- package/lib/src/dtoMapper/models/requestDtoMapper.model.js +70 -0
- package/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts +67 -0
- package/lib/src/dtoMapper/models/responseDtoMapper.model.d.ts.map +1 -0
- package/lib/src/dtoMapper/models/responseDtoMapper.model.js +65 -0
- package/lib/src/dtoMapper/types/dtoMapper.types.d.ts +9 -0
- package/lib/src/dtoMapper/types/dtoMapper.types.d.ts.map +1 -0
- package/lib/src/dtoMapper/types/dtoMapper.types.js +1 -0
- package/lib/src/http/application/expressLikeApplication.d.ts +22 -0
- package/lib/src/http/application/expressLikeApplication.d.ts.map +1 -0
- package/lib/src/http/application/expressLikeApplication.js +20 -0
- package/lib/src/http/guards/isExpressLikeSchemaHandler.d.ts +5 -0
- package/lib/src/http/guards/isExpressLikeSchemaHandler.d.ts.map +1 -0
- package/lib/src/http/guards/isExpressLikeSchemaHandler.js +9 -0
- package/lib/src/http/guards/isHttpContractDetails.d.ts +7 -0
- package/lib/src/http/guards/isHttpContractDetails.d.ts.map +1 -0
- package/lib/src/http/guards/isHttpContractDetails.js +9 -0
- package/lib/src/http/guards/isPathParamContractDetails.d.ts +4 -0
- package/lib/src/http/guards/isPathParamContractDetails.d.ts.map +1 -0
- package/lib/src/http/guards/isPathParamContractDetails.js +10 -0
- package/lib/src/http/guards/isResponseShape.d.ts +3 -0
- package/lib/src/http/guards/isResponseShape.d.ts.map +1 -0
- package/lib/src/http/guards/isResponseShape.js +7 -0
- package/lib/src/http/guards/isTypedHandler.d.ts +5 -0
- package/lib/src/http/guards/isTypedHandler.d.ts.map +1 -0
- package/lib/src/http/guards/isTypedHandler.js +6 -0
- package/lib/src/http/handler/typedHandler.d.ts +24 -0
- package/lib/src/http/handler/typedHandler.d.ts.map +1 -0
- package/lib/src/http/handler/typedHandler.js +25 -0
- package/lib/src/http/handlers/typedHandler.d.ts +27 -0
- package/lib/src/http/handlers/typedHandler.d.ts.map +1 -0
- package/lib/src/http/handlers/typedHandler.js +30 -0
- package/lib/src/http/index.d.ts +12 -0
- package/lib/src/http/index.d.ts.map +1 -0
- package/lib/src/http/index.js +11 -0
- package/{dist/http/interfaces/forklaunchExpress.application.interface.d.ts → lib/src/http/interfaces/expressLikeApplication.interface.d.ts} +1 -1
- package/lib/src/http/interfaces/expressLikeApplication.interface.d.ts.map +1 -0
- package/lib/src/http/interfaces/expressLikeApplication.interface.js +14 -0
- package/lib/src/http/interfaces/expressLikeRouter.interface.d.ts +24 -0
- package/lib/src/http/interfaces/expressLikeRouter.interface.d.ts.map +1 -0
- package/lib/src/http/interfaces/expressLikeRouter.interface.js +1 -0
- package/lib/src/http/interfaces/index.d.ts +3 -0
- package/lib/src/http/interfaces/index.d.ts.map +1 -0
- package/lib/src/http/interfaces/index.js +2 -0
- package/lib/src/http/middleware/index.d.ts.map +1 -0
- package/lib/src/http/middleware/index.js +2 -0
- package/lib/src/http/middleware/request/auth.middleware.d.ts +31 -0
- package/lib/src/http/middleware/request/auth.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request/auth.middleware.js +107 -0
- package/lib/src/http/middleware/request/cors.middleware.d.ts +13 -0
- package/lib/src/http/middleware/request/cors.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request/cors.middleware.js +15 -0
- package/lib/src/http/middleware/request/createContext.middleware.d.ts +15 -0
- package/lib/src/http/middleware/request/createContext.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request/createContext.middleware.js +26 -0
- package/lib/src/http/middleware/request/enrichDetails.middleware.d.ts +15 -0
- package/lib/src/http/middleware/request/enrichDetails.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request/enrichDetails.middleware.js +19 -0
- package/lib/src/http/middleware/request/parse.middleware.d.ts +17 -0
- package/lib/src/http/middleware/request/parse.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request/parse.middleware.js +43 -0
- package/lib/src/http/middleware/request.middleware.d.ts +73 -0
- package/lib/src/http/middleware/request.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/request.middleware.js +210 -0
- package/lib/src/http/middleware/response/parse.middleware.d.ts +31 -0
- package/lib/src/http/middleware/response/parse.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/response/parse.middleware.js +52 -0
- package/lib/src/http/middleware/response.middleware.d.ts +31 -0
- package/lib/src/http/middleware/response.middleware.d.ts.map +1 -0
- package/lib/src/http/middleware/response.middleware.js +52 -0
- package/lib/src/http/openApiV3Generator/index.d.ts +2 -0
- package/lib/src/http/openApiV3Generator/index.d.ts.map +1 -0
- package/lib/src/http/openApiV3Generator/index.js +1 -0
- package/{dist/http → lib/src/http/openApiV3Generator}/openApiV3Generator.d.ts +1 -1
- package/lib/src/http/openApiV3Generator/openApiV3Generator.d.ts.map +1 -0
- package/lib/src/http/openApiV3Generator/openApiV3Generator.js +169 -0
- package/lib/src/http/router/expressLikeRouter.d.ts +135 -0
- package/lib/src/http/router/expressLikeRouter.d.ts.map +1 -0
- package/lib/src/http/router/expressLikeRouter.js +438 -0
- package/{dist/http/types/api.types.d.ts → lib/src/http/types/apiDefinition.types.d.ts} +49 -24
- package/lib/src/http/types/apiDefinition.types.d.ts.map +1 -0
- package/lib/src/http/types/apiDefinition.types.js +1 -0
- package/lib/src/http/types/contractDetails.types.d.ts +169 -0
- package/lib/src/http/types/contractDetails.types.d.ts.map +1 -0
- package/lib/src/http/types/contractDetails.types.js +1 -0
- package/lib/src/http/types/expressLikeRouter.types.d.ts +35 -0
- package/lib/src/http/types/expressLikeRouter.types.d.ts.map +1 -0
- package/lib/src/http/types/expressLikeRouter.types.js +1 -0
- package/lib/src/http/types/index.d.ts +4 -0
- package/lib/src/http/types/index.d.ts.map +1 -0
- package/lib/src/http/types/index.js +3 -0
- package/{dist/http/types/forklaunch.types.d.ts → lib/src/http/types/router.types.d.ts} +3 -3
- package/lib/src/http/types/router.types.d.ts.map +1 -0
- package/lib/src/http/types/router.types.js +1 -0
- package/lib/src/http/utils/enrichExpressLikeSend.d.ts +32 -0
- package/lib/src/http/utils/enrichExpressLikeSend.d.ts.map +1 -0
- package/lib/src/http/utils/enrichExpressLikeSend.js +50 -0
- package/lib/src/http/utils/httpStatusCodes.d.ts.map +1 -0
- package/lib/src/http/utils/httpStatusCodes.js +1039 -0
- package/lib/src/http/utils/index.d.ts +3 -0
- package/lib/src/http/utils/index.d.ts.map +1 -0
- package/lib/src/http/utils/index.js +2 -0
- package/lib/src/services/index.d.ts.map +1 -0
- package/lib/src/services/index.js +1 -0
- package/lib/src/services/interfaces/baseService.d.ts.map +1 -0
- package/lib/src/services/interfaces/baseService.js +1 -0
- package/lib/tests/dtoMapper.test.d.ts +2 -0
- package/lib/tests/dtoMapper.test.d.ts.map +1 -0
- package/lib/tests/dtoMapper.test.js +168 -0
- package/lib/tests/entityMapper.test.d.ts +2 -0
- package/lib/tests/entityMapper.test.js +168 -0
- package/lib/tests/expressLikeRouter.test.d.ts +2 -0
- package/lib/tests/expressLikeRouter.test.d.ts.map +1 -0
- package/lib/tests/expressLikeRouter.test.js +3 -0
- package/lib/tests/expressLikeRouterInstantiation.test.d.ts +2 -0
- package/lib/tests/expressLikeRouterInstantiation.test.d.ts.map +1 -0
- package/lib/tests/expressLikeRouterInstantiation.test.js +60 -0
- package/lib/tests/http.middleware.test.d.ts +2 -0
- package/lib/tests/http.middleware.test.js +102 -0
- package/lib/tests/openApiV3Generator.test.d.ts +2 -0
- package/lib/tests/openApiV3Generator.test.js +66 -0
- package/lib/tests/redisTtlCache.test.d.ts +2 -0
- package/lib/tests/redisTtlCache.test.js +49 -0
- package/lib/tests/typedHandler.test.d.ts +2 -0
- package/lib/tests/typedHandler.test.d.ts.map +1 -0
- package/lib/tests/typedHandler.test.js +3 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/vitest.config.d.ts +3 -0
- package/lib/vitest.config.d.ts.map +1 -0
- package/lib/vitest.config.js +7 -0
- package/package.json +52 -30
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/interfaces/ttlCache.interface.d.ts.map +0 -1
- package/dist/cache/redisTtlCache.d.ts.map +0 -1
- package/dist/cache/types/ttlCacheRecord.types.d.ts.map +0 -1
- package/dist/controllers/index.d.ts.map +0 -1
- package/dist/controllers/interfaces/controller.interface.d.ts.map +0 -1
- package/dist/database/index.d.ts.map +0 -1
- package/dist/database/mikro/models/entities/base.entity.d.ts.map +0 -1
- package/dist/entityMapper/index.d.ts +0 -3
- package/dist/entityMapper/index.d.ts.map +0 -1
- package/dist/entityMapper/interfaces/entityMapper.interface.d.ts.map +0 -1
- package/dist/entityMapper/models/baseEntityMapper.model.d.ts.map +0 -1
- package/dist/entityMapper/models/requestEntityMapper.model.d.ts.map +0 -1
- package/dist/entityMapper/models/responseEntityMapper.model.d.ts.map +0 -1
- package/dist/entityMapper/types/entityMapper.types.d.ts +0 -10
- package/dist/entityMapper/types/entityMapper.types.d.ts.map +0 -1
- package/dist/eslint.config.mjs +0 -10
- package/dist/http/httpStatusCodes.d.ts.map +0 -1
- package/dist/http/index.d.ts +0 -7
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/interfaces/forklaunchExpress.application.interface.d.ts.map +0 -1
- package/dist/http/interfaces/forklaunchExpress.router.interface.d.ts +0 -118
- package/dist/http/interfaces/forklaunchExpress.router.interface.d.ts.map +0 -1
- package/dist/http/interfaces/index.d.ts +0 -3
- package/dist/http/interfaces/index.d.ts.map +0 -1
- package/dist/http/interfaces/index.js +0 -2
- package/dist/http/middleware/index.d.ts.map +0 -1
- package/dist/http/middleware/request.middleware.d.ts +0 -111
- package/dist/http/middleware/request.middleware.d.ts.map +0 -1
- package/dist/http/middleware/response.middleware.d.ts +0 -17
- package/dist/http/middleware/response.middleware.d.ts.map +0 -1
- package/dist/http/middleware/response.middleware.js +0 -49
- package/dist/http/openApiV3Generator.d.ts.map +0 -1
- package/dist/http/regex.d.ts +0 -9
- package/dist/http/regex.d.ts.map +0 -1
- package/dist/http/regex.js +0 -111
- package/dist/http/types/api.types.d.ts.map +0 -1
- package/dist/http/types/forklaunch.types.d.ts.map +0 -1
- package/dist/http/types/index.d.ts +0 -4
- package/dist/http/types/index.d.ts.map +0 -1
- package/dist/http/types/index.js +0 -3
- package/dist/http/types/primitive.types.d.ts +0 -110
- package/dist/http/types/primitive.types.d.ts.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/jest.config.d.ts +0 -4
- package/dist/jest.config.d.ts.map +0 -1
- package/dist/jest.config.js +0 -7
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/interfaces/baseService.d.ts.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/{dist → lib/dist}/cache/index.js +0 -0
- /package/{dist → lib/dist}/cache/interfaces/ttlCache.interface.js +0 -0
- /package/{dist → lib/dist}/cache/types/ttlCacheRecord.types.js +0 -0
- /package/{dist → lib/dist}/controllers/index.js +0 -0
- /package/{dist → lib/dist}/controllers/interfaces/controller.interface.js +0 -0
- /package/{dist → lib/dist}/database/index.js +0 -0
- /package/{dist → lib/dist}/entityMapper/index.js +0 -0
- /package/{dist → lib/dist}/entityMapper/interfaces/entityMapper.interface.js +0 -0
- /package/{dist → lib/dist}/entityMapper/models/baseEntityMapper.model.js +0 -0
- /package/{dist → lib/dist}/entityMapper/models/requestEntityMapper.model.js +0 -0
- /package/{dist → lib/dist}/entityMapper/models/responseEntityMapper.model.js +0 -0
- /package/{dist → lib/dist}/entityMapper/types/entityMapper.types.js +0 -0
- /package/{dist/http/interfaces/forklaunchExpress.application.interface.js → lib/dist/http/interfaces/expressLikeApplication.interface.js} +0 -0
- /package/{dist → lib/dist}/http/middleware/index.js +0 -0
- /package/{dist/http/types/api.types.js → lib/dist/http/types/apiDefinition.types.js} +0 -0
- /package/{dist/http/types/forklaunch.types.js → lib/dist/http/types/contractDetails.types.js} +0 -0
- /package/{dist/http/types/primitive.types.js → lib/dist/http/types/router.types.js} +0 -0
- /package/{dist/http → lib/dist/http/utils}/httpStatusCodes.js +0 -0
- /package/{dist → lib/dist}/index.js +0 -0
- /package/{dist/services/interfaces/baseService.js → lib/dist/lib/src/cache/interfaces/ttlCache.interface.js} +0 -0
- /package/{dist → lib/dist/lib/src}/services/index.js +0 -0
- /package/{dist → lib/dist/lib}/tests/entityMapper.test.d.ts +0 -0
- /package/{dist → lib/dist/lib}/tests/http.middleware.test.d.ts +0 -0
- /package/{dist → lib/dist/lib}/tests/openApiV3Generator.test.d.ts +0 -0
- /package/{dist → lib/dist/lib}/tests/redisTtlCache.test.d.ts +0 -0
- /package/{dist → lib/dist}/tests/redisTtlCache.test.js +0 -0
- /package/{dist → lib}/eslint.config.d.mts +0 -0
- /package/{dist → lib}/eslint.config.d.mts.map +0 -0
- /package/{dist → lib/src}/cache/index.d.ts +0 -0
- /package/{dist → lib/src}/cache/interfaces/ttlCache.interface.d.ts +0 -0
- /package/{dist → lib/src}/cache/redisTtlCache.d.ts +0 -0
- /package/{dist → lib/src}/cache/types/ttlCacheRecord.types.d.ts +0 -0
- /package/{dist → lib/src}/controllers/index.d.ts +0 -0
- /package/{dist → lib/src}/controllers/interfaces/controller.interface.d.ts +0 -0
- /package/{dist → lib/src}/database/index.d.ts +0 -0
- /package/{dist → lib/src}/database/mikro/models/entities/base.entity.d.ts +0 -0
- /package/{dist → lib/src}/database/mikro/models/entities/base.entity.js +0 -0
- /package/{dist → lib/src}/http/middleware/index.d.ts +0 -0
- /package/{dist/http → lib/src/http/utils}/httpStatusCodes.d.ts +0 -0
- /package/{dist → lib/src}/services/index.d.ts +0 -0
- /package/{dist → lib/src}/services/interfaces/baseService.d.ts +0 -0
- /package/{dist → lib}/tests/entityMapper.test.d.ts.map +0 -0
- /package/{dist → lib}/tests/http.middleware.test.d.ts.map +0 -0
- /package/{dist → lib}/tests/openApiV3Generator.test.d.ts.map +0 -0
- /package/{dist → lib}/tests/redisTtlCache.test.d.ts.map +0 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
import * as jose from 'jose';
|
2
|
+
/**
|
3
|
+
* Checks the authorization token for validity.
|
4
|
+
*
|
5
|
+
* @param {AuthMethod} [authorizationMethod] - The method of authorization.
|
6
|
+
* @param {string} [authorizationString] - The authorization string.
|
7
|
+
* @returns {Promise<[401 | 403, string] | string | undefined>} - The result of the authorization check.
|
8
|
+
*/
|
9
|
+
async function checkAuthorizationToken(authorizationMethod, authorizationString) {
|
10
|
+
if (!authorizationString) {
|
11
|
+
return [401, 'No Authorization token provided.'];
|
12
|
+
}
|
13
|
+
switch (authorizationMethod) {
|
14
|
+
case 'jwt': {
|
15
|
+
if (!authorizationString.startsWith('Bearer ')) {
|
16
|
+
return [401, 'Invalid Authorization token format.'];
|
17
|
+
}
|
18
|
+
try {
|
19
|
+
const decodedJwt = await jose.jwtVerify(authorizationString.split(' ')[1], new TextEncoder().encode(process.env.JWT_SECRET || 'your-256-bit-secret'));
|
20
|
+
return decodedJwt.payload.iss;
|
21
|
+
}
|
22
|
+
catch (error) {
|
23
|
+
console.error(error);
|
24
|
+
return [403, 'Invalid Authorization token.'];
|
25
|
+
}
|
26
|
+
}
|
27
|
+
default:
|
28
|
+
return [401, 'Invalid Authorization method.'];
|
29
|
+
}
|
30
|
+
}
|
31
|
+
/**
|
32
|
+
* Maps roles from authorization.
|
33
|
+
*
|
34
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
35
|
+
* @param {string} [authorizationToken] - The authorization token.
|
36
|
+
* @returns {string[]} - The mapped roles.
|
37
|
+
*/
|
38
|
+
// function mapRoles(
|
39
|
+
// authorizationType?: AuthMethod,
|
40
|
+
// authorizationToken?: string
|
41
|
+
// ): string[] {
|
42
|
+
// return [];
|
43
|
+
// }
|
44
|
+
/**
|
45
|
+
* Maps permissions from authorization.
|
46
|
+
*
|
47
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
48
|
+
* @param {string} [authorizationToken] - The authorization token.
|
49
|
+
* @returns {string[]} - The mapped permissions.
|
50
|
+
*/
|
51
|
+
// function mapPermissions(
|
52
|
+
// authorizationType?: AuthMethod,
|
53
|
+
// authorizationToken?: string
|
54
|
+
// ): string[] {
|
55
|
+
// return [];
|
56
|
+
// }
|
57
|
+
/**
|
58
|
+
* Middleware to parse request authorization.
|
59
|
+
*
|
60
|
+
* @template SV - A type that extends AnySchemaValidator.
|
61
|
+
* @template Request - A type that extends ForklaunchRequest.
|
62
|
+
* @template Response - A type that extends ForklaunchResponse.
|
63
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
64
|
+
* @param {Request} req - The request object.
|
65
|
+
* @param {Response} res - The response object.
|
66
|
+
* @param {NextFunction} [next] - The next middleware function.
|
67
|
+
*/
|
68
|
+
export async function parseRequestAuth(req, res, next) {
|
69
|
+
const auth = req.contractDetails.auth;
|
70
|
+
if (auth) {
|
71
|
+
const errorAndMessage = await checkAuthorizationToken(auth.method, req.headers.authorization);
|
72
|
+
if (Array.isArray(errorAndMessage)) {
|
73
|
+
res.status(errorAndMessage[0]).send(errorAndMessage[1]);
|
74
|
+
next?.(new Error(errorAndMessage[1]));
|
75
|
+
}
|
76
|
+
// TODO: Implement role and permission checking
|
77
|
+
// const permissionSlugs = mapPermissions(
|
78
|
+
// auth.method,
|
79
|
+
// req.headers.authorization
|
80
|
+
// );
|
81
|
+
// const roles = mapRoles(auth.method, req.headers.authorization);
|
82
|
+
// const permissionErrorMessage =
|
83
|
+
// 'User does not have sufficient permissions to perform action.';
|
84
|
+
// const roleErrorMessage =
|
85
|
+
// 'User does not have correct role to perform action.';
|
86
|
+
// permissionSlugs.forEach((permissionSlug) => {
|
87
|
+
// if (
|
88
|
+
// !req.contractDetails.auth?.allowedSlugs?.has(permissionSlug) ||
|
89
|
+
// req.contractDetails.auth?.forbiddenSlugs?.has(permissionSlug)
|
90
|
+
// ) {
|
91
|
+
// res.status(403).send(permissionErrorMessage);
|
92
|
+
// next?.(new Error(permissionErrorMessage));
|
93
|
+
// }
|
94
|
+
// }
|
95
|
+
// });
|
96
|
+
// roles.forEach((role) => {
|
97
|
+
// if (
|
98
|
+
// !req.contractDetails.auth?.allowedRoles?.has(role) ||
|
99
|
+
// req.contractDetails.auth?.forbiddenRoles?.has(role)
|
100
|
+
// ) {
|
101
|
+
// res.status(403).send(roleErrorMessage);
|
102
|
+
// next?.(new Error(roleErrorMessage));
|
103
|
+
// }
|
104
|
+
// });
|
105
|
+
}
|
106
|
+
// next?.();
|
107
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ParsedQs } from 'qs';
|
3
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResHeaders, ForklaunchResponse } from '../../types/apiDefinition.types';
|
4
|
+
import { ParamsDictionary } from '../../types/contractDetails.types';
|
5
|
+
/**
|
6
|
+
* Cors middleware handler
|
7
|
+
*
|
8
|
+
* @param req - Express-like request object
|
9
|
+
* @param res - Express-like response object
|
10
|
+
* @param next - Express-like next function
|
11
|
+
*/
|
12
|
+
export declare function cors<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
|
13
|
+
//# sourceMappingURL=cors.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"cors.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/http/middleware/request/cors.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,IAAI,CAClB,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CACrB,UAAU,EACV,oBAAoB,GAAG,UAAU,EACjC,SAAS,CACV,EACD,IAAI,CAAC,EAAE,sBAAsB,QAO9B"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import corsMiddleware from 'cors';
|
2
|
+
/**
|
3
|
+
* Cors middleware handler
|
4
|
+
*
|
5
|
+
* @param req - Express-like request object
|
6
|
+
* @param res - Express-like response object
|
7
|
+
* @param next - Express-like next function
|
8
|
+
*/
|
9
|
+
export function cors(req, res, next) {
|
10
|
+
console.debug('[MIDDLEWARE] cors started');
|
11
|
+
if (req.method === 'OPTIONS') {
|
12
|
+
res.cors = true;
|
13
|
+
}
|
14
|
+
corsMiddleware()(req, res, next ?? (() => { }));
|
15
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ExpressLikeSchemaHandler } from '../../types/apiDefinition.types';
|
3
|
+
import { Body, HeadersObject, ParamsObject, QueryObject, ResponsesObject } from '../../types/contractDetails.types';
|
4
|
+
/**
|
5
|
+
* Middleware to create and add a request context.
|
6
|
+
*
|
7
|
+
* @template SV - A type that extends AnySchemaValidator.
|
8
|
+
* @template Request - A type that extends ForklaunchRequest.
|
9
|
+
* @template Response - A type that extends ForklaunchResponse.
|
10
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
11
|
+
* @param {SV} schemaValidator - The schema validator.
|
12
|
+
* @returns {Function} - Middleware function to create request context.
|
13
|
+
*/
|
14
|
+
export declare function createContext<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>>(schemaValidator: SV): ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
15
|
+
//# sourceMappingURL=createContext.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"createContext.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/http/middleware/request/createContext.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,uBAAuB,CAAC;AAE5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,WAAW,EACX,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EAAE,EAAE,GAClB,wBAAwB,CACzB,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAmBA"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import { v4 } from 'uuid';
|
2
|
+
/**
|
3
|
+
* Middleware to create and add a request context.
|
4
|
+
*
|
5
|
+
* @template SV - A type that extends AnySchemaValidator.
|
6
|
+
* @template Request - A type that extends ForklaunchRequest.
|
7
|
+
* @template Response - A type that extends ForklaunchResponse.
|
8
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
9
|
+
* @param {SV} schemaValidator - The schema validator.
|
10
|
+
* @returns {Function} - Middleware function to create request context.
|
11
|
+
*/
|
12
|
+
export function createContext(schemaValidator) {
|
13
|
+
return (req, res, next) => {
|
14
|
+
console.debug('[MIDDLEWARE] createRequestContext started');
|
15
|
+
req.schemaValidator = schemaValidator;
|
16
|
+
let correlationId = v4();
|
17
|
+
if (req.headers['x-correlation-id']) {
|
18
|
+
correlationId = req.headers['x-correlation-id'];
|
19
|
+
}
|
20
|
+
res.setHeader('x-correlation-id', correlationId);
|
21
|
+
req.context = {
|
22
|
+
correlationId: correlationId
|
23
|
+
};
|
24
|
+
next?.();
|
25
|
+
};
|
26
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ExpressLikeSchemaHandler } from '../../types/apiDefinition.types';
|
3
|
+
import { Body, HeadersObject, HttpContractDetails, ParamsObject, PathParamHttpContractDetails, QueryObject, ResponseCompiledSchema, ResponsesObject } from '../../types/contractDetails.types';
|
4
|
+
/**
|
5
|
+
* Middleware to enrich the request details with contract details.
|
6
|
+
*
|
7
|
+
* @template SV - A type that extends AnySchemaValidator.
|
8
|
+
* @template Request - A type that extends ForklaunchRequest.
|
9
|
+
* @template Response - A type that extends ForklaunchResponse.
|
10
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
11
|
+
* @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
|
12
|
+
* @returns {Function} - Middleware function to enrich request details.
|
13
|
+
*/
|
14
|
+
export declare function enrichDetails<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>>(contractDetails: HttpContractDetails<SV> | PathParamHttpContractDetails<SV>, requestSchema: unknown, responseSchemas: ResponseCompiledSchema): ExpressLikeSchemaHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
15
|
+
//# sourceMappingURL=enrichDetails.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"enrichDetails.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/http/middleware/request/enrichDetails.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EACL,IAAI,EACJ,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,4BAA4B,EAC5B,WAAW,EACX,sBAAsB,EACtB,eAAe,EAChB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EAAE,mBAAmB,CAAC,EAAE,CAAC,GAAG,4BAA4B,CAAC,EAAE,CAAC,EAC3E,aAAa,EAAE,OAAO,EACtB,eAAe,EAAE,sBAAsB,GACtC,wBAAwB,CACzB,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAQA"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* Middleware to enrich the request details with contract details.
|
3
|
+
*
|
4
|
+
* @template SV - A type that extends AnySchemaValidator.
|
5
|
+
* @template Request - A type that extends ForklaunchRequest.
|
6
|
+
* @template Response - A type that extends ForklaunchResponse.
|
7
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
8
|
+
* @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
|
9
|
+
* @returns {Function} - Middleware function to enrich request details.
|
10
|
+
*/
|
11
|
+
export function enrichDetails(contractDetails, requestSchema, responseSchemas) {
|
12
|
+
return (req, res, next) => {
|
13
|
+
console.debug('[MIDDLEWARE] enrichRequestDetails started');
|
14
|
+
req.contractDetails = contractDetails;
|
15
|
+
req.requestSchema = requestSchema;
|
16
|
+
res.responseSchemas = responseSchemas;
|
17
|
+
next?.();
|
18
|
+
};
|
19
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ParsedQs } from 'qs';
|
3
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResponse } from '../../types/apiDefinition.types';
|
4
|
+
import { ParamsDictionary } from '../../types/contractDetails.types';
|
5
|
+
/**
|
6
|
+
* Pre-handler function to parse and validate input.
|
7
|
+
*
|
8
|
+
* @template SV - A type that extends AnySchemaValidator.
|
9
|
+
* @template Request - A type that extends ForklaunchRequest.
|
10
|
+
* @template Response - A type that extends ForklaunchResponse.
|
11
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
12
|
+
* @param {Request} req - The request object.
|
13
|
+
* @param {Response} res - The response object.
|
14
|
+
* @param {NextFunction} [next] - The next middleware function.
|
15
|
+
*/
|
16
|
+
export declare function parse<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, _res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
|
17
|
+
//# sourceMappingURL=parse.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parse.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/http/middleware/request/parse.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CACnB,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,IAAI,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC3D,IAAI,CAAC,EAAE,sBAAsB,QAoC9B"}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import { isResponseShape } from '../../guards/isResponseShape';
|
2
|
+
/**
|
3
|
+
* Pre-handler function to parse and validate input.
|
4
|
+
*
|
5
|
+
* @template SV - A type that extends AnySchemaValidator.
|
6
|
+
* @template Request - A type that extends ForklaunchRequest.
|
7
|
+
* @template Response - A type that extends ForklaunchResponse.
|
8
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
9
|
+
* @param {Request} req - The request object.
|
10
|
+
* @param {Response} res - The response object.
|
11
|
+
* @param {NextFunction} [next] - The next middleware function.
|
12
|
+
*/
|
13
|
+
export function parse(req, _res, next) {
|
14
|
+
console.debug('[MIDDLEWARE] parseRequest started');
|
15
|
+
const request = {
|
16
|
+
params: req.params,
|
17
|
+
query: req.query,
|
18
|
+
headers: req.headers,
|
19
|
+
body: req.body
|
20
|
+
};
|
21
|
+
const parsedRequest = req.schemaValidator.parse(req.requestSchema, request);
|
22
|
+
if (parsedRequest.ok &&
|
23
|
+
isResponseShape(parsedRequest.value)) {
|
24
|
+
req.body = parsedRequest.value.body;
|
25
|
+
req.params = parsedRequest.value.params;
|
26
|
+
req.query = parsedRequest.value.query;
|
27
|
+
req.headers = parsedRequest.value.headers;
|
28
|
+
}
|
29
|
+
if (!parsedRequest.ok) {
|
30
|
+
switch (req.contractDetails.options?.requestValidation) {
|
31
|
+
default:
|
32
|
+
case 'error':
|
33
|
+
next?.(new Error(`Invalid request: ${parsedRequest.error}`));
|
34
|
+
break;
|
35
|
+
case 'warning':
|
36
|
+
console.warn(`Invalid request: ${parsedRequest.error}`);
|
37
|
+
break;
|
38
|
+
case 'none':
|
39
|
+
break;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
next?.();
|
43
|
+
}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ParsedQs } from 'qs';
|
3
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResHeaders, ForklaunchResponse, ForklaunchSchemaMiddlewareHandler } from '../types/apiDefinition.types';
|
4
|
+
import { Body, ContractDetails, HeadersObject, Method, ParamsDictionary, ParamsObject, QueryObject, ResponseCompiledSchema, ResponsesObject } from '../types/contractDetails.types';
|
5
|
+
/**
|
6
|
+
* Cors middleware handler
|
7
|
+
*
|
8
|
+
* @param req - Express-like request object
|
9
|
+
* @param res - Express-like response object
|
10
|
+
* @param next - Express-like next function
|
11
|
+
*/
|
12
|
+
export declare function corsMiddleware<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
|
13
|
+
/**
|
14
|
+
* Middleware to create and add a request context.
|
15
|
+
*
|
16
|
+
* @template SV - A type that extends AnySchemaValidator.
|
17
|
+
* @template Request - A type that extends ForklaunchRequest.
|
18
|
+
* @template Response - A type that extends ForklaunchResponse.
|
19
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
20
|
+
* @param {SV} schemaValidator - The schema validator.
|
21
|
+
* @returns {Function} - Middleware function to create request context.
|
22
|
+
*/
|
23
|
+
export declare function createRequestContext<SV extends AnySchemaValidator, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>>(schemaValidator: SV): ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
24
|
+
/**
|
25
|
+
* Middleware to enrich the request details with contract details.
|
26
|
+
*
|
27
|
+
* @template SV - A type that extends AnySchemaValidator.
|
28
|
+
* @template Request - A type that extends ForklaunchRequest.
|
29
|
+
* @template Response - A type that extends ForklaunchResponse.
|
30
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
31
|
+
* @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
|
32
|
+
* @returns {Function} - Middleware function to enrich request details.
|
33
|
+
*/
|
34
|
+
export declare function enrichRequestDetails<SV extends AnySchemaValidator, ContractMethod extends Method, Path extends `/${string}`, P extends ParamsObject<SV>, ResBodyMap extends ResponsesObject<SV>, ReqBody extends Body<SV>, ReqQuery extends QueryObject<SV>, ReqHeaders extends HeadersObject<SV>, ResHeaders extends HeadersObject<SV>, LocalsObj extends Record<string, unknown>>(contractDetails: ContractDetails<SV, ContractMethod, Path, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders>, requestSchema: unknown, responseSchemas: ResponseCompiledSchema): ForklaunchSchemaMiddlewareHandler<SV, P, ResBodyMap, ReqBody, ReqQuery, ReqHeaders, ResHeaders, LocalsObj>;
|
35
|
+
/**
|
36
|
+
* Pre-handler function to parse and validate input.
|
37
|
+
*
|
38
|
+
* @template SV - A type that extends AnySchemaValidator.
|
39
|
+
* @template Request - A type that extends ForklaunchRequest.
|
40
|
+
* @template Response - A type that extends ForklaunchResponse.
|
41
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
42
|
+
* @param {Request} req - The request object.
|
43
|
+
* @param {Response} res - The response object.
|
44
|
+
* @param {NextFunction} [next] - The next middleware function.
|
45
|
+
*/
|
46
|
+
export declare function parseRequest<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, _res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
|
47
|
+
/**
|
48
|
+
* Maps roles from authorization.
|
49
|
+
*
|
50
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
51
|
+
* @param {string} [authorizationToken] - The authorization token.
|
52
|
+
* @returns {string[]} - The mapped roles.
|
53
|
+
*/
|
54
|
+
/**
|
55
|
+
* Maps permissions from authorization.
|
56
|
+
*
|
57
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
58
|
+
* @param {string} [authorizationToken] - The authorization token.
|
59
|
+
* @returns {string[]} - The mapped permissions.
|
60
|
+
*/
|
61
|
+
/**
|
62
|
+
* Middleware to parse request authorization.
|
63
|
+
*
|
64
|
+
* @template SV - A type that extends AnySchemaValidator.
|
65
|
+
* @template Request - A type that extends ForklaunchRequest.
|
66
|
+
* @template Response - A type that extends ForklaunchResponse.
|
67
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
68
|
+
* @param {Request} req - The request object.
|
69
|
+
* @param {Response} res - The response object.
|
70
|
+
* @param {NextFunction} [next] - The next middleware function.
|
71
|
+
*/
|
72
|
+
export declare function parseRequestAuth<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): Promise<void>;
|
73
|
+
//# sourceMappingURL=request.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"request.middleware.d.ts","sourceRoot":"","sources":["../../../../src/http/middleware/request.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,uBAAuB,CAAC;AAG5E,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAG9B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,iCAAiC,EAClC,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAEL,IAAI,EACJ,eAAe,EACf,aAAa,EACb,MAAM,EACN,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,eAAe,EAChB,MAAM,gCAAgC,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CACrB,UAAU,EACV,oBAAoB,GAAG,UAAU,EACjC,SAAS,CACV,EACD,IAAI,CAAC,EAAE,sBAAsB,QAO9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EAAE,EAAE,GAClB,iCAAiC,CAClC,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAmBA;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,SAAS,kBAAkB,EAC7B,cAAc,SAAS,MAAM,EAC7B,IAAI,SAAS,IAAI,MAAM,EAAE,EACzB,CAAC,SAAS,YAAY,CAAC,EAAE,CAAC,EAC1B,UAAU,SAAS,eAAe,CAAC,EAAE,CAAC,EACtC,OAAO,SAAS,IAAI,CAAC,EAAE,CAAC,EACxB,QAAQ,SAAS,WAAW,CAAC,EAAE,CAAC,EAChC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,UAAU,SAAS,aAAa,CAAC,EAAE,CAAC,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,eAAe,EAAE,eAAe,CAC9B,EAAE,EACF,cAAc,EACd,IAAI,EACJ,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,CACX,EACD,aAAa,EAAE,OAAO,EACtB,eAAe,EAAE,sBAAsB,GACtC,iCAAiC,CAClC,EAAE,EACF,CAAC,EACD,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,CACV,CAQA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,IAAI,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC3D,IAAI,CAAC,EAAE,sBAAsB,QAoC9B;AAuCD;;;;;;GAMG;AAQH;;;;;;GAMG;AAQH;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,EAAE,sBAAsB,iBA+C9B"}
|
@@ -0,0 +1,210 @@
|
|
1
|
+
import cors from 'cors';
|
2
|
+
import * as jose from 'jose';
|
3
|
+
import { v4 } from 'uuid';
|
4
|
+
import { isResponseShape } from '../guards/isResponseShape';
|
5
|
+
/**
|
6
|
+
* Cors middleware handler
|
7
|
+
*
|
8
|
+
* @param req - Express-like request object
|
9
|
+
* @param res - Express-like response object
|
10
|
+
* @param next - Express-like next function
|
11
|
+
*/
|
12
|
+
export function corsMiddleware(req, res, next) {
|
13
|
+
console.debug('[MIDDLEWARE] cors started');
|
14
|
+
if (req.method === 'OPTIONS') {
|
15
|
+
res.cors = true;
|
16
|
+
}
|
17
|
+
cors()(req, res, next ?? (() => { }));
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Middleware to create and add a request context.
|
21
|
+
*
|
22
|
+
* @template SV - A type that extends AnySchemaValidator.
|
23
|
+
* @template Request - A type that extends ForklaunchRequest.
|
24
|
+
* @template Response - A type that extends ForklaunchResponse.
|
25
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
26
|
+
* @param {SV} schemaValidator - The schema validator.
|
27
|
+
* @returns {Function} - Middleware function to create request context.
|
28
|
+
*/
|
29
|
+
export function createRequestContext(schemaValidator) {
|
30
|
+
return (req, res, next) => {
|
31
|
+
console.debug('[MIDDLEWARE] createRequestContext started');
|
32
|
+
req.schemaValidator = schemaValidator;
|
33
|
+
let correlationId = v4();
|
34
|
+
if (req.headers['x-correlation-id']) {
|
35
|
+
correlationId = req.headers['x-correlation-id'];
|
36
|
+
}
|
37
|
+
res.setHeader('x-correlation-id', correlationId);
|
38
|
+
req.context = {
|
39
|
+
correlationId: correlationId
|
40
|
+
};
|
41
|
+
next?.();
|
42
|
+
};
|
43
|
+
}
|
44
|
+
/**
|
45
|
+
* Middleware to enrich the request details with contract details.
|
46
|
+
*
|
47
|
+
* @template SV - A type that extends AnySchemaValidator.
|
48
|
+
* @template Request - A type that extends ForklaunchRequest.
|
49
|
+
* @template Response - A type that extends ForklaunchResponse.
|
50
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
51
|
+
* @param {PathParamHttpContractDetails<SV> | HttpContractDetails<SV>} contractDetails - The contract details.
|
52
|
+
* @returns {Function} - Middleware function to enrich request details.
|
53
|
+
*/
|
54
|
+
export function enrichRequestDetails(contractDetails, requestSchema, responseSchemas) {
|
55
|
+
return (req, res, next) => {
|
56
|
+
console.debug('[MIDDLEWARE] enrichRequestDetails started');
|
57
|
+
req.contractDetails = contractDetails;
|
58
|
+
req.requestSchema = requestSchema;
|
59
|
+
res.responseSchemas = responseSchemas;
|
60
|
+
next?.();
|
61
|
+
};
|
62
|
+
}
|
63
|
+
/**
|
64
|
+
* Pre-handler function to parse and validate input.
|
65
|
+
*
|
66
|
+
* @template SV - A type that extends AnySchemaValidator.
|
67
|
+
* @template Request - A type that extends ForklaunchRequest.
|
68
|
+
* @template Response - A type that extends ForklaunchResponse.
|
69
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
70
|
+
* @param {Request} req - The request object.
|
71
|
+
* @param {Response} res - The response object.
|
72
|
+
* @param {NextFunction} [next] - The next middleware function.
|
73
|
+
*/
|
74
|
+
export function parseRequest(req, _res, next) {
|
75
|
+
console.debug('[MIDDLEWARE] parseRequest started');
|
76
|
+
const request = {
|
77
|
+
params: req.params,
|
78
|
+
query: req.query,
|
79
|
+
headers: req.headers,
|
80
|
+
body: req.body
|
81
|
+
};
|
82
|
+
const parsedRequest = req.schemaValidator.parse(req.requestSchema, request);
|
83
|
+
if (parsedRequest.ok &&
|
84
|
+
isResponseShape(parsedRequest.value)) {
|
85
|
+
req.body = parsedRequest.value.body;
|
86
|
+
req.params = parsedRequest.value.params;
|
87
|
+
req.query = parsedRequest.value.query;
|
88
|
+
req.headers = parsedRequest.value.headers;
|
89
|
+
}
|
90
|
+
if (!parsedRequest.ok) {
|
91
|
+
switch (req.contractDetails.options?.requestValidation) {
|
92
|
+
default:
|
93
|
+
case 'error':
|
94
|
+
next?.(new Error(`Invalid request: ${parsedRequest.error}`));
|
95
|
+
break;
|
96
|
+
case 'warning':
|
97
|
+
console.warn(`Invalid request: ${parsedRequest.error}`);
|
98
|
+
break;
|
99
|
+
case 'none':
|
100
|
+
break;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
next?.();
|
104
|
+
}
|
105
|
+
/**
|
106
|
+
* Checks the authorization token for validity.
|
107
|
+
*
|
108
|
+
* @param {AuthMethod} [authorizationMethod] - The method of authorization.
|
109
|
+
* @param {string} [authorizationString] - The authorization string.
|
110
|
+
* @returns {Promise<[401 | 403, string] | string | undefined>} - The result of the authorization check.
|
111
|
+
*/
|
112
|
+
async function checkAuthorizationToken(authorizationMethod, authorizationString) {
|
113
|
+
if (!authorizationString) {
|
114
|
+
return [401, 'No Authorization token provided.'];
|
115
|
+
}
|
116
|
+
switch (authorizationMethod) {
|
117
|
+
case 'jwt': {
|
118
|
+
if (!authorizationString.startsWith('Bearer ')) {
|
119
|
+
return [401, 'Invalid Authorization token format.'];
|
120
|
+
}
|
121
|
+
try {
|
122
|
+
const decodedJwt = await jose.jwtVerify(authorizationString.split(' ')[1], new TextEncoder().encode(process.env.JWT_SECRET || 'your-256-bit-secret'));
|
123
|
+
return decodedJwt.payload.iss;
|
124
|
+
}
|
125
|
+
catch (error) {
|
126
|
+
console.error(error);
|
127
|
+
return [403, 'Invalid Authorization token.'];
|
128
|
+
}
|
129
|
+
}
|
130
|
+
default:
|
131
|
+
return [401, 'Invalid Authorization method.'];
|
132
|
+
}
|
133
|
+
}
|
134
|
+
/**
|
135
|
+
* Maps roles from authorization.
|
136
|
+
*
|
137
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
138
|
+
* @param {string} [authorizationToken] - The authorization token.
|
139
|
+
* @returns {string[]} - The mapped roles.
|
140
|
+
*/
|
141
|
+
// function mapRoles(
|
142
|
+
// authorizationType?: AuthMethod,
|
143
|
+
// authorizationToken?: string
|
144
|
+
// ): string[] {
|
145
|
+
// return [];
|
146
|
+
// }
|
147
|
+
/**
|
148
|
+
* Maps permissions from authorization.
|
149
|
+
*
|
150
|
+
* @param {AuthMethod} [authorizationType] - The method of authorization.
|
151
|
+
* @param {string} [authorizationToken] - The authorization token.
|
152
|
+
* @returns {string[]} - The mapped permissions.
|
153
|
+
*/
|
154
|
+
// function mapPermissions(
|
155
|
+
// authorizationType?: AuthMethod,
|
156
|
+
// authorizationToken?: string
|
157
|
+
// ): string[] {
|
158
|
+
// return [];
|
159
|
+
// }
|
160
|
+
/**
|
161
|
+
* Middleware to parse request authorization.
|
162
|
+
*
|
163
|
+
* @template SV - A type that extends AnySchemaValidator.
|
164
|
+
* @template Request - A type that extends ForklaunchRequest.
|
165
|
+
* @template Response - A type that extends ForklaunchResponse.
|
166
|
+
* @template NextFunction - A type that extends ForklaunchNextFunction.
|
167
|
+
* @param {Request} req - The request object.
|
168
|
+
* @param {Response} res - The response object.
|
169
|
+
* @param {NextFunction} [next] - The next middleware function.
|
170
|
+
*/
|
171
|
+
export async function parseRequestAuth(req, res, next) {
|
172
|
+
const auth = req.contractDetails.auth;
|
173
|
+
if (auth) {
|
174
|
+
const errorAndMessage = await checkAuthorizationToken(auth.method, req.headers.authorization);
|
175
|
+
if (Array.isArray(errorAndMessage)) {
|
176
|
+
res.status(errorAndMessage[0]).send(errorAndMessage[1]);
|
177
|
+
next?.(new Error(errorAndMessage[1]));
|
178
|
+
}
|
179
|
+
// TODO: Implement role and permission checking
|
180
|
+
// const permissionSlugs = mapPermissions(
|
181
|
+
// auth.method,
|
182
|
+
// req.headers.authorization
|
183
|
+
// );
|
184
|
+
// const roles = mapRoles(auth.method, req.headers.authorization);
|
185
|
+
// const permissionErrorMessage =
|
186
|
+
// 'User does not have sufficient permissions to perform action.';
|
187
|
+
// const roleErrorMessage =
|
188
|
+
// 'User does not have correct role to perform action.';
|
189
|
+
// permissionSlugs.forEach((permissionSlug) => {
|
190
|
+
// if (
|
191
|
+
// !req.contractDetails.auth?.allowedSlugs?.has(permissionSlug) ||
|
192
|
+
// req.contractDetails.auth?.forbiddenSlugs?.has(permissionSlug)
|
193
|
+
// ) {
|
194
|
+
// res.status(403).send(permissionErrorMessage);
|
195
|
+
// next?.(new Error(permissionErrorMessage));
|
196
|
+
// }
|
197
|
+
// }
|
198
|
+
// });
|
199
|
+
// roles.forEach((role) => {
|
200
|
+
// if (
|
201
|
+
// !req.contractDetails.auth?.allowedRoles?.has(role) ||
|
202
|
+
// req.contractDetails.auth?.forbiddenRoles?.has(role)
|
203
|
+
// ) {
|
204
|
+
// res.status(403).send(roleErrorMessage);
|
205
|
+
// next?.(new Error(roleErrorMessage));
|
206
|
+
// }
|
207
|
+
// });
|
208
|
+
}
|
209
|
+
// next?.();
|
210
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import { AnySchemaValidator } from '@forklaunch/validator';
|
2
|
+
import { ParsedQs } from 'qs';
|
3
|
+
import { ForklaunchNextFunction, ForklaunchRequest, ForklaunchResHeaders, ForklaunchResponse } from '../../types/apiDefinition.types';
|
4
|
+
import { ParamsDictionary } from '../../types/contractDetails.types';
|
5
|
+
/**
|
6
|
+
* Middleware to parse and validate the response according to the provided schema.
|
7
|
+
*
|
8
|
+
* This function validates the response against a schema provided by the request's schema validator.
|
9
|
+
* If the response does not conform to the schema, the behavior is determined by the `responseValidation`
|
10
|
+
* option in `req.contractDetails.options`:
|
11
|
+
* - `'error'` (default): Calls `next` with an error.
|
12
|
+
* - `'warning'`: Logs a warning to the console.
|
13
|
+
* - `'none'`: Silently continues without action.
|
14
|
+
*
|
15
|
+
* @template SV - The type of the schema validator used in the request.
|
16
|
+
* @template P - The type of the parameters dictionary used in the request.
|
17
|
+
* @template ResBodyMap - A record type mapping status codes to response body types.
|
18
|
+
* @template ReqBody - The type of the request body.
|
19
|
+
* @template ReqQuery - The type of the parsed query string.
|
20
|
+
* @template ReqHeaders - The type of the request headers.
|
21
|
+
* @template ResHeaders - The type of the response headers, extended from `ForklaunchResHeaders`.
|
22
|
+
* @template LocalsObj - The type of the locals object in the response.
|
23
|
+
*
|
24
|
+
* @param {ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>} req - The request object, containing the schema validator and other request data.
|
25
|
+
* @param {ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>} res - The response object, including headers and body data.
|
26
|
+
* @param {ForklaunchNextFunction} [next] - The next middleware function to be called. If not provided, the function will return after processing.
|
27
|
+
*
|
28
|
+
* @returns {void} This function does not return a value.
|
29
|
+
*/
|
30
|
+
export declare function parse<SV extends AnySchemaValidator, P extends ParamsDictionary, ResBodyMap extends Record<number, unknown>, ReqBody extends Record<string, unknown>, ReqQuery extends ParsedQs, ReqHeaders extends Record<string, string>, ResHeaders extends Record<string, string>, LocalsObj extends Record<string, unknown>>(req: ForklaunchRequest<SV, P, ReqBody, ReqQuery, ReqHeaders>, res: ForklaunchResponse<ResBodyMap, ForklaunchResHeaders & ResHeaders, LocalsObj>, next?: ForklaunchNextFunction): void;
|
31
|
+
//# sourceMappingURL=parse.middleware.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parse.middleware.d.ts","sourceRoot":"","sources":["../../../../../src/http/middleware/response/parse.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC9B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAErE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,KAAK,CACnB,EAAE,SAAS,kBAAkB,EAC7B,CAAC,SAAS,gBAAgB,EAC1B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1C,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,SAAS,QAAQ,EACzB,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACzC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEzC,GAAG,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,EAC5D,GAAG,EAAE,kBAAkB,CACrB,UAAU,EACV,oBAAoB,GAAG,UAAU,EACjC,SAAS,CACV,EACD,IAAI,CAAC,EAAE,sBAAsB,QAyC9B"}
|