node-server-engine 1.1.3 → 1.1.5
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/.env.example +193 -193
- package/.mocharc.js +13 -13
- package/.nycrc +18 -18
- package/.prettierrc +7 -7
- package/Dockerfile +30 -30
- package/README.md +991 -991
- package/babel.config.json +34 -35
- package/dist/const/DebeziumEvent.js.map +1 -1
- package/dist/const/LogSeverity.js.map +1 -1
- package/dist/const/index.js.map +1 -1
- package/dist/const/metrics.js.map +1 -1
- package/dist/const/mime.js.map +1 -1
- package/dist/const/tokenIssuer.js.map +1 -1
- package/dist/db/migrations/20241030121500-create-sequelize-meta-table.js.map +1 -1
- package/dist/db/models/SequelizeMeta.js +1 -0
- package/dist/db/models/SequelizeMeta.js.map +1 -1
- package/dist/db/models/index.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
- package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
- package/dist/entities/ElasticSearch/index.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.js +18 -17
- package/dist/entities/Endpoint/Endpoint.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
- package/dist/entities/Endpoint/index.js.map +1 -1
- package/dist/entities/EngineError/EngineError.js +7 -6
- package/dist/entities/EngineError/EngineError.js.map +1 -1
- package/dist/entities/EngineError/EngineError.types.js.map +1 -1
- package/dist/entities/EngineError/index.js.map +1 -1
- package/dist/entities/KeySet/KeySet.js +10 -9
- package/dist/entities/KeySet/KeySet.js.map +1 -1
- package/dist/entities/KeySet/KeySet.types.js.map +1 -1
- package/dist/entities/KeySet/index.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
- package/dist/entities/LifecycleController/index.js.map +1 -1
- package/dist/entities/Localizator/Localizator.js +7 -7
- package/dist/entities/Localizator/Localizator.js.map +1 -1
- package/dist/entities/Localizator/Localizator.types.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
- package/dist/entities/Localizator/index.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.js +7 -6
- package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
- package/dist/entities/MessageHandler/index.js.map +1 -1
- package/dist/entities/PubSub/PubSub.js +25 -25
- package/dist/entities/PubSub/PubSub.js.map +1 -1
- package/dist/entities/PubSub/PubSub.types.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
- package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
- package/dist/entities/PubSub/index.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.js +4 -4
- package/dist/entities/PushNotification/PushNotification.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
- package/dist/entities/PushNotification/index.js.map +1 -1
- package/dist/entities/Redis/Redis.js +8 -8
- package/dist/entities/Redis/Redis.js.map +1 -1
- package/dist/entities/Redis/Redis.types.js.map +1 -1
- package/dist/entities/Redis/Redis.validate.js +2 -2
- package/dist/entities/Redis/Redis.validate.js.map +1 -1
- package/dist/entities/Redis/index.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.js +2 -2
- package/dist/entities/Sequelize/Sequelize.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.types.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.validate.js +2 -2
- package/dist/entities/Sequelize/Sequelize.validate.js.map +1 -1
- package/dist/entities/Sequelize/index.js.map +1 -1
- package/dist/entities/Server/Server.const.js.map +1 -1
- package/dist/entities/Server/Server.js +18 -17
- package/dist/entities/Server/Server.js.map +1 -1
- package/dist/entities/Server/Server.types.js.map +1 -1
- package/dist/entities/Server/index.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.js +33 -32
- package/dist/entities/SocketClient/SocketClient.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.types.js.map +1 -1
- package/dist/entities/SocketClient/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/parseMessage.js +2 -2
- package/dist/entities/SocketClient/parseMessage/parseMessage.js.map +1 -1
- package/dist/entities/Storage/Storage.js +20 -20
- package/dist/entities/Storage/Storage.js.map +1 -1
- package/dist/entities/Storage/Storage.types.js.map +1 -1
- package/dist/entities/Storage/index.js.map +1 -1
- package/dist/entities/ValidationError/ValidationError.js.map +1 -1
- package/dist/entities/ValidationError/index.js.map +1 -1
- package/dist/entities/WebError/WebError.js +7 -6
- package/dist/entities/WebError/WebError.js.map +1 -1
- package/dist/entities/WebError/WebError.types.js.map +1 -1
- package/dist/entities/WebError/index.js.map +1 -1
- package/dist/entities/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/debug.js.map +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/request.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.types.js.map +1 -1
- package/dist/middleware/authAdmin/index.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.types.js.map +1 -1
- package/dist/middleware/authHmac/index.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.types.js.map +1 -1
- package/dist/middleware/authJwt/index.js.map +1 -1
- package/dist/middleware/authStatic/authStatic.js +3 -3
- package/dist/middleware/authStatic/authStatic.js.map +1 -1
- package/dist/middleware/authStatic/index.js.map +1 -1
- package/dist/middleware/authTls/authTls.js +8 -8
- package/dist/middleware/authTls/authTls.js.map +1 -1
- package/dist/middleware/authTls/authTls.types.js.map +1 -1
- package/dist/middleware/authTls/index.js.map +1 -1
- package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
- package/dist/middleware/error/error.js.map +1 -1
- package/dist/middleware/error/index.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.js +12 -12
- package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
- package/dist/middleware/fileUploader/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
- package/dist/middleware/fileUploader/validate/index.js.map +1 -1
- package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
- package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
- package/dist/middleware/fourOhFour/index.js.map +1 -1
- package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
- package/dist/middleware/geminiFileUploader/index.js.map +1 -1
- package/dist/middleware/healthCheck/healthCheck.js +2 -2
- package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
- package/dist/middleware/healthCheck/index.js.map +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/metrics/index.js.map +1 -1
- package/dist/middleware/metrics/metrics.js.map +1 -1
- package/dist/middleware/requestMetrics/index.js.map +1 -1
- package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
- package/dist/middleware/swaggerDocs/index.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
- package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
- package/dist/middleware/userResolver/index.js.map +1 -1
- package/dist/middleware/userResolver/userResolver.js.map +1 -1
- package/dist/middleware/validate/index.js.map +1 -1
- package/dist/middleware/validate/validate.js.map +1 -1
- package/dist/middleware/version/index.js.map +1 -1
- package/dist/middleware/version/version.js +3 -3
- package/dist/middleware/version/version.js.map +1 -1
- package/dist/utils/checkEnvironment/index.js +13 -13
- package/dist/utils/checkEnvironment/index.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
- package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
- package/dist/utils/createHttpServer/index.js.map +1 -1
- package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
- package/dist/utils/createSortedObject/index.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.js +8 -8
- package/dist/utils/dbMigration/dbMigration.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
- package/dist/utils/dbMigration/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +5 -5
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
- package/dist/utils/envAssert/envAssert.js +6 -6
- package/dist/utils/envAssert/envAssert.js.map +1 -1
- package/dist/utils/envAssert/index.js.map +1 -1
- package/dist/utils/envAssert/validators/hostList.js +2 -2
- package/dist/utils/envAssert/validators/hostList.js.map +1 -1
- package/dist/utils/envAssert/validators/index.js.map +1 -1
- package/dist/utils/envAssert/validators/ipList.js +2 -2
- package/dist/utils/envAssert/validators/ipList.js.map +1 -1
- package/dist/utils/envAssert/validators/path.js +2 -2
- package/dist/utils/envAssert/validators/path.js.map +1 -1
- package/dist/utils/envAssert/validators/string.js +2 -2
- package/dist/utils/envAssert/validators/string.js.map +1 -1
- package/dist/utils/envAssert/validators/stringList.js +3 -3
- package/dist/utils/envAssert/validators/stringList.js.map +1 -1
- package/dist/utils/filter/filter.js +4 -4
- package/dist/utils/filter/filter.js.map +1 -1
- package/dist/utils/filter/index.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
- package/dist/utils/getDynamicLink/index.js.map +1 -1
- package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
- package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
- package/dist/utils/hmac/checkEnv/index.js.map +1 -1
- package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
- package/dist/utils/hmac/createHmac/index.js.map +1 -1
- package/dist/utils/hmac/index.js.map +1 -1
- package/dist/utils/hmac/index.types.js.map +1 -1
- package/dist/utils/hmac/signPayload/index.js.map +1 -1
- package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
- package/dist/utils/hmac/verifySignature/index.js.map +1 -1
- package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jwt/index.js.map +1 -1
- package/dist/utils/jwt/jwt.js.map +1 -1
- package/dist/utils/jwt/jwt.types.js.map +1 -1
- package/dist/utils/report/index.js.map +1 -1
- package/dist/utils/report/output.js.map +1 -1
- package/dist/utils/report/output.types.js.map +1 -1
- package/dist/utils/report/report.js.map +1 -1
- package/dist/utils/report/report.types.js.map +1 -1
- package/dist/utils/request/index.js.map +1 -1
- package/dist/utils/request/request.js.map +1 -1
- package/dist/utils/semverCompare/index.js.map +1 -1
- package/dist/utils/semverCompare/semverCompare.js +5 -5
- package/dist/utils/semverCompare/semverCompare.js.map +1 -1
- package/dist/utils/sendEmail/index.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.js +8 -8
- package/dist/utils/sendEmail/sendEmail.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
- package/dist/utils/sendPush/index.js.map +1 -1
- package/dist/utils/sendPush/sendPush.js +5 -5
- package/dist/utils/sendPush/sendPush.js.map +1 -1
- package/dist/utils/sendPush/sendPush.types.js.map +1 -1
- package/dist/utils/tlsConfig/index.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
- package/dist/utils/tlsRequest/index.js.map +1 -1
- package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
- package/dist/utils/trimPathSlash/index.js.map +1 -1
- package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
- package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
- package/eslint.config.mjs +11 -11
- package/package.json +159 -164
- package/src/const/DebeziumEvent.ts +6 -6
- package/src/const/LogSeverity.ts +7 -7
- package/src/const/index.ts +5 -5
- package/src/const/metrics.ts +6 -6
- package/src/const/mime.ts +37 -37
- package/src/const/tokenIssuer.ts +9 -9
- package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
- package/src/db/models/SequelizeMeta.ts +16 -16
- package/src/db/models/index.ts +2 -2
- package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
- package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
- package/src/entities/ElasticSearch/index.ts +2 -2
- package/src/entities/Endpoint/Endpoint.test.ts +337 -337
- package/src/entities/Endpoint/Endpoint.ts +202 -202
- package/src/entities/Endpoint/Endpoint.types.ts +205 -205
- package/src/entities/Endpoint/index.ts +2 -2
- package/src/entities/EngineError/EngineError.ts +28 -28
- package/src/entities/EngineError/EngineError.types.ts +15 -15
- package/src/entities/EngineError/index.ts +2 -2
- package/src/entities/KeySet/KeySet.test.ts +126 -126
- package/src/entities/KeySet/KeySet.ts +172 -172
- package/src/entities/KeySet/KeySet.types.ts +28 -28
- package/src/entities/KeySet/index.ts +2 -2
- package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
- package/src/entities/LifecycleController/LifecycleController.ts +24 -24
- package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
- package/src/entities/LifecycleController/index.ts +2 -2
- package/src/entities/Localizator/Localizator.ts +139 -139
- package/src/entities/Localizator/Localizator.types.ts +52 -52
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
- package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
- package/src/entities/Localizator/index.ts +2 -2
- package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
- package/src/entities/MessageHandler/MessageHandler.ts +72 -72
- package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
- package/src/entities/MessageHandler/index.ts +2 -2
- package/src/entities/PubSub/PubSub.test.ts +297 -297
- package/src/entities/PubSub/PubSub.ts +202 -202
- package/src/entities/PubSub/PubSub.types.ts +76 -76
- package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
- package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
- package/src/entities/PubSub/handleMessage/index.ts +1 -1
- package/src/entities/PubSub/index.ts +2 -2
- package/src/entities/PushNotification/PushNotification.test.ts +35 -35
- package/src/entities/PushNotification/PushNotification.ts +44 -44
- package/src/entities/PushNotification/PushNotification.types.ts +25 -25
- package/src/entities/PushNotification/index.ts +2 -2
- package/src/entities/Redis/Redis.ts +71 -71
- package/src/entities/Redis/Redis.types.ts +19 -19
- package/src/entities/Redis/Redis.validate.ts +17 -17
- package/src/entities/Redis/index.ts +2 -2
- package/src/entities/Sequelize/Sequelize.config.ts +59 -59
- package/src/entities/Sequelize/Sequelize.test.ts +21 -21
- package/src/entities/Sequelize/Sequelize.ts +75 -75
- package/src/entities/Sequelize/Sequelize.types.ts +10 -10
- package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
- package/src/entities/Sequelize/index.ts +2 -2
- package/src/entities/Server/Server.const.ts +56 -56
- package/src/entities/Server/Server.test.ts +272 -272
- package/src/entities/Server/Server.ts +445 -445
- package/src/entities/Server/Server.types.ts +88 -88
- package/src/entities/Server/index.ts +2 -2
- package/src/entities/SocketClient/SocketClient.test.ts +392 -392
- package/src/entities/SocketClient/SocketClient.ts +401 -401
- package/src/entities/SocketClient/SocketClient.types.ts +62 -62
- package/src/entities/SocketClient/index.ts +2 -2
- package/src/entities/SocketClient/parseMessage/index.ts +1 -1
- package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
- package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
- package/src/entities/Storage/Storage.test.ts +58 -58
- package/src/entities/Storage/Storage.ts +219 -219
- package/src/entities/Storage/Storage.types.ts +57 -57
- package/src/entities/Storage/index.ts +2 -2
- package/src/entities/ValidationError/ValidationError.ts +34 -34
- package/src/entities/ValidationError/index.ts +1 -1
- package/src/entities/WebError/WebError.test.ts +18 -18
- package/src/entities/WebError/WebError.ts +23 -23
- package/src/entities/WebError/WebError.types.ts +9 -9
- package/src/entities/WebError/index.ts +2 -2
- package/src/entities/index.ts +16 -16
- package/src/index.ts +4 -4
- package/src/metrics/debug.ts +10 -10
- package/src/metrics/index.ts +2 -2
- package/src/metrics/request.ts +17 -17
- package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
- package/src/middleware/authAdmin/authAdmin.ts +114 -114
- package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
- package/src/middleware/authAdmin/index.ts +2 -2
- package/src/middleware/authHmac/authHmac.test.ts +86 -86
- package/src/middleware/authHmac/authHmac.ts +56 -56
- package/src/middleware/authHmac/authHmac.types.ts +7 -7
- package/src/middleware/authHmac/index.ts +2 -2
- package/src/middleware/authJwt/authJwt.test.ts +54 -54
- package/src/middleware/authJwt/authJwt.ts +55 -55
- package/src/middleware/authJwt/authJwt.types.ts +14 -14
- package/src/middleware/authJwt/index.ts +2 -2
- package/src/middleware/authStatic/authStatic.test.ts +36 -36
- package/src/middleware/authStatic/authStatic.ts +45 -45
- package/src/middleware/authStatic/index.ts +1 -1
- package/src/middleware/authTls/authTls.test.ts +138 -138
- package/src/middleware/authTls/authTls.ts +106 -106
- package/src/middleware/authTls/authTls.types.ts +13 -13
- package/src/middleware/authTls/index.ts +2 -2
- package/src/middleware/checkPermission/checkPermission.ts +32 -32
- package/src/middleware/error/error.test.ts +60 -60
- package/src/middleware/error/error.ts +25 -25
- package/src/middleware/error/index.ts +1 -1
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
- package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
- package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
- package/src/middleware/fileUploader/fileUploader.ts +303 -303
- package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
- package/src/middleware/fileUploader/index.ts +2 -2
- package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
- package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
- package/src/middleware/fileUploader/validate/index.ts +1 -1
- package/src/middleware/fileUploader/validate/validate.ts +27 -27
- package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
- package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
- package/src/middleware/fourOhFour/index.ts +1 -1
- package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
- package/src/middleware/geminiFileUploader/index.ts +1 -1
- package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
- package/src/middleware/healthCheck/healthCheck.ts +14 -14
- package/src/middleware/healthCheck/index.ts +1 -1
- package/src/middleware/index.ts +17 -17
- package/src/middleware/metrics/index.ts +1 -1
- package/src/middleware/metrics/metrics.test.ts +46 -46
- package/src/middleware/metrics/metrics.ts +24 -24
- package/src/middleware/requestMetrics/index.ts +1 -1
- package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
- package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
- package/src/middleware/swaggerDocs/index.ts +2 -2
- package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
- package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
- package/src/middleware/userResolver/index.ts +1 -1
- package/src/middleware/userResolver/userResolver.test.ts +35 -35
- package/src/middleware/userResolver/userResolver.ts +35 -35
- package/src/middleware/validate/index.ts +1 -1
- package/src/middleware/validate/validate.test.ts +43 -43
- package/src/middleware/validate/validate.ts +25 -25
- package/src/middleware/version/index.ts +1 -1
- package/src/middleware/version/version.test.ts +23 -23
- package/src/middleware/version/version.ts +12 -12
- package/src/utils/checkEnvironment/index.ts +49 -49
- package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
- package/src/utils/createHttpServer/createHttpServer.ts +34 -34
- package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
- package/src/utils/createHttpServer/index.ts +1 -1
- package/src/utils/createSortedObject/createSortedObject.ts +20 -20
- package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
- package/src/utils/createSortedObject/index.ts +1 -1
- package/src/utils/dbMigration/dbMigration.test.ts +209 -209
- package/src/utils/dbMigration/dbMigration.ts +199 -199
- package/src/utils/dbMigration/dbMigration.types.ts +11 -11
- package/src/utils/dbMigration/index.ts +2 -2
- package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -102
- package/src/utils/envAssert/envAssert.ts +31 -31
- package/src/utils/envAssert/index.ts +1 -1
- package/src/utils/envAssert/validators/hostList.ts +17 -17
- package/src/utils/envAssert/validators/index.ts +5 -5
- package/src/utils/envAssert/validators/ipList.ts +13 -13
- package/src/utils/envAssert/validators/path.ts +13 -13
- package/src/utils/envAssert/validators/string.ts +9 -9
- package/src/utils/envAssert/validators/stringList.ts +13 -13
- package/src/utils/filter/filter.ts +17 -17
- package/src/utils/filter/index.ts +1 -1
- package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
- package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
- package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
- package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
- package/src/utils/getDynamicLink/index.ts +2 -2
- package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
- package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
- package/src/utils/hmac/checkEnv/index.ts +1 -1
- package/src/utils/hmac/createHmac/createHmac.ts +33 -33
- package/src/utils/hmac/createHmac/index.ts +1 -1
- package/src/utils/hmac/index.ts +4 -4
- package/src/utils/hmac/index.types.ts +13 -13
- package/src/utils/hmac/signPayload/index.ts +1 -1
- package/src/utils/hmac/signPayload/signPayload.ts +16 -16
- package/src/utils/hmac/verifySignature/index.ts +1 -1
- package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
- package/src/utils/index.ts +26 -26
- package/src/utils/jwt/index.ts +2 -2
- package/src/utils/jwt/jwt.test.ts +41 -41
- package/src/utils/jwt/jwt.ts +204 -204
- package/src/utils/jwt/jwt.types.ts +21 -21
- package/src/utils/report/index.ts +3 -3
- package/src/utils/report/output.ts +45 -45
- package/src/utils/report/output.types.ts +70 -70
- package/src/utils/report/report.test.ts +133 -133
- package/src/utils/report/report.ts +134 -134
- package/src/utils/report/report.types.ts +13 -13
- package/src/utils/request/index.ts +1 -1
- package/src/utils/request/request.test.ts +26 -26
- package/src/utils/request/request.ts +48 -48
- package/src/utils/semverCompare/index.ts +1 -1
- package/src/utils/semverCompare/semverCompare.test.ts +49 -49
- package/src/utils/semverCompare/semverCompare.ts +60 -60
- package/src/utils/sendEmail/index.ts +1 -1
- package/src/utils/sendEmail/sendEmail.ts +27 -27
- package/src/utils/sendEmail/sendEmail.types.ts +7 -7
- package/src/utils/sendPush/index.ts +2 -2
- package/src/utils/sendPush/sendPush.ts +20 -20
- package/src/utils/sendPush/sendPush.types.ts +25 -25
- package/src/utils/tlsConfig/index.ts +2 -2
- package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
- package/src/utils/tlsConfig/tlsConfig.ts +47 -47
- package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
- package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
- package/src/utils/tlsRequest/index.ts +1 -1
- package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
- package/src/utils/tlsRequest/tlsRequest.ts +12 -12
- package/src/utils/trimPathSlash/index.ts +1 -1
- package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
- package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
- package/test/env.ts +56 -56
- package/test/factory/index.ts +8 -8
- package/test/factory/sequelizeMeta.ts +12 -12
- package/test/hooks.ts +37 -37
- package/test/index.ts +3 -3
- package/test/stub/index.ts +3 -3
- package/test/stub/stubLocales.ts +68 -68
- package/test/stub/stubPubSub.ts +7 -7
- package/test/stub/stubStorage.ts +77 -77
- package/test/stub/stubStorage.types.ts +11 -11
- package/test/utils/app.ts +31 -31
- package/test/utils/index.ts +1 -1
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +32 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUploader.js","names":["_busboy","_interopRequireDefault","require","_compressAvatar","_isMultiPart","_validate","_Storage","_WebError","_report","namespace","fileUploader","options","validator","request","response","next","fileUploaderMiddleware","filesOptions","reportDebug","message","data","isMultipart","WebError","statusCode","errorCode","contentType","get","length","busboy","Busboy","headers","hasError","triggerError","error","pendingWrites","unpipe","on","read","bind","removeAllListeners","files","Object","values","forEach","file","Storage","delete","bucket","name","catch","reportError","readFinished","fieldsValidated","done","uploadedFiles","keys","some","required","includes","key","connection","writableEnded","Error","validateFields","validate","field","fileName","encoding","mimeType","destroy","find","fileOption","hint","mimeTypes","expected","fileToUpload","image","compressAvatar","uploadedFile","upload","directory","path","mime","noExtension","metadata","maxSize","push","originalFileName","fieldName","value","body","pipe"],"sources":["../../../src/middleware/fileUploader/fileUploader.ts"],"sourcesContent":["import Busboy from 'busboy';\r\nimport { Request, Response, NextFunction } from 'express';\r\nimport { Schema } from 'express-validator';\r\nimport { compressAvatar } from './compressAvatar';\r\nimport { FileUploaderConfig } from './fileUploader.types';\r\nimport { isMultipart } from './isMultiPart';\r\nimport { validate } from './validate';\r\nimport { Storage } from 'entities/Storage';\r\nimport { WebError } from 'entities/WebError';\r\nimport { reportError, reportDebug } from 'utils/report';\r\nimport { Readable } from 'stream';\r\n\r\nconst namespace = 'engine:middleware:fileUploader';\r\n\r\n/**\r\n * Generate a custom fileUploader middleware\r\n */\r\nexport function fileUploader(\r\n options: Array<FileUploaderConfig>,\r\n validator: Schema\r\n) {\r\n return (\r\n request: Request,\r\n response: Response,\r\n next: NextFunction\r\n ): Busboy.Busboy =>\r\n fileUploaderMiddleware(request, response, next, options, validator);\r\n}\r\n\r\n/** Handle file upload and generic multi-part parsing */\r\nexport function fileUploaderMiddleware(\r\n request: Request,\r\n response: Response,\r\n next: NextFunction,\r\n filesOptions: Array<FileUploaderConfig>,\r\n validator: Schema\r\n): Busboy.Busboy {\r\n reportDebug({\r\n namespace,\r\n message: 'Received request to upload file',\r\n data: { filesOptions, validator }\r\n });\r\n // Check that the request is a proper multipart request\r\n if (!isMultipart(request))\r\n throw new WebError({\r\n statusCode: 415,\r\n errorCode: 'invalid-content-type',\r\n message: 'Request is not of type multipart/form-data',\r\n data: { contentType: request.get('Content-Type') }\r\n });\r\n // If no files to handle ignore\r\n if (!filesOptions.length) next();\r\n // Parse multipart data with Busboy\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const busboy = new (Busboy as any)({\r\n headers: {\r\n ...request.headers,\r\n 'content-type': request.headers['content-type'] ?? ''\r\n }\r\n });\r\n\r\n let hasError = false;\r\n\r\n /**\r\n * Function called when an error happened in the process\r\n * It immediately stops and drains all connection and deletes all files that have already been uploaded\r\n */\r\n function triggerError(error: unknown): void {\r\n pendingWrites--;\r\n if (hasError) return;\r\n hasError = true;\r\n request.unpipe(busboy);\r\n request.on('readable', request.read.bind(request));\r\n busboy.removeAllListeners();\r\n next(error);\r\n if (request.files) {\r\n Object.values(request.files).forEach((files) => {\r\n files.forEach((file) => {\r\n Storage.delete(file.bucket, file.name).catch((error) => {\r\n reportError(error);\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n let readFinished = false;\r\n let fieldsValidated = false;\r\n let pendingWrites = 0;\r\n\r\n /** Function called when all the body has been parsed */\r\n function done(): void {\r\n if (readFinished && pendingWrites === 0 && fieldsValidated && !hasError) {\r\n const uploadedFiles = Object.keys(request.files ?? {});\r\n if (\r\n filesOptions.some(\r\n (options) => options.required && !uploadedFiles.includes(options.key)\r\n )\r\n ) {\r\n triggerError(\r\n new WebError({\r\n statusCode: 400,\r\n errorCode: 'missing-field',\r\n message: 'Some required files have not been uploaded',\r\n data: { filesOptions, validator, uploadedFiles }\r\n })\r\n );\r\n return;\r\n }\r\n next();\r\n }\r\n }\r\n\r\n /*\r\n * On cancel request, while processing\r\n */\r\n request.connection.on('close', function () {\r\n if (!response.writableEnded) triggerError(new Error('Request cancelled'));\r\n });\r\n\r\n /**\r\n * Once all the fields have been read they are checked against the validation schema\r\n */\r\n async function validateFields(): Promise<void> {\r\n try {\r\n await validate(request, validator);\r\n } catch (error) {\r\n triggerError(error);\r\n }\r\n reportDebug({\r\n namespace,\r\n message: 'Validation processed',\r\n data: { hasError, filesOptions, validator }\r\n });\r\n fieldsValidated = true;\r\n done();\r\n }\r\n\r\n busboy.on(\r\n 'file',\r\n (\r\n field: string,\r\n file: Readable,\r\n fileName: string,\r\n encoding: unknown,\r\n mimeType: string\r\n ) => {\r\n (async (): Promise<void> => {\r\n reportDebug({\r\n namespace,\r\n message: 'Found file in request',\r\n data: { hasError, field, fileName, encoding, mimeType, pendingWrites }\r\n });\r\n // Do not handle the stream if there has been an error previously\r\n if (hasError) file.destroy();\r\n pendingWrites++;\r\n // Find related file options based on the field name\r\n const options = filesOptions.find(\r\n (fileOption) => fileOption.key === field\r\n );\r\n // Make sure that the field is in the config\r\n if (!options) {\r\n triggerError(\r\n new WebError({\r\n statusCode: 400,\r\n errorCode: 'invalid-file-field',\r\n message: 'Request contains a file at an invalid field',\r\n hint: { field },\r\n data: { field }\r\n })\r\n );\r\n return;\r\n }\r\n reportDebug({\r\n namespace,\r\n message: 'Found options for file',\r\n data: {\r\n hasError,\r\n field,\r\n fileName,\r\n encoding,\r\n mimeType,\r\n pendingWrites,\r\n options\r\n }\r\n });\r\n // If a specific MIME type is required check it\r\n if (options.mimeTypes && !options.mimeTypes.includes(mimeType)) {\r\n triggerError(\r\n new WebError({\r\n statusCode: 415,\r\n errorCode: 'invalid-mime-type',\r\n message: 'Request contains a file with an invalid MIME type',\r\n hint: { field },\r\n data: { field, mimeType, expected: options.mimeTypes }\r\n })\r\n );\r\n return;\r\n }\r\n // Generate the destination path of the file and upload\r\n reportDebug({\r\n namespace,\r\n message: 'Starting file upload',\r\n data: {\r\n hasError,\r\n field,\r\n fileName,\r\n encoding,\r\n mimeType,\r\n pendingWrites,\r\n options\r\n }\r\n });\r\n try {\r\n const fileToUpload = options.image\r\n ? compressAvatar(file, options.image)\r\n : file;\r\n\r\n const uploadedFile = await Storage.upload(\r\n fileToUpload,\r\n options.bucket,\r\n {\r\n directory: options.path,\r\n mime: mimeType,\r\n noExtension: options.noExtension\r\n },\r\n {\r\n metadata: { contentType: mimeType }\r\n },\r\n { maxSize: options.maxSize }\r\n );\r\n\r\n reportDebug({\r\n namespace,\r\n message: 'File uploaded',\r\n data: {\r\n hasError,\r\n field,\r\n fileName,\r\n encoding,\r\n mimeType,\r\n pendingWrites,\r\n options,\r\n uploadedFile\r\n }\r\n });\r\n if (hasError) {\r\n // If some other failed before this one terminated\r\n // Delete file\r\n await Storage.delete(uploadedFile.bucket, uploadedFile.name);\r\n } else {\r\n // Handle successful upload\r\n // Add the file's data to the request\r\n pendingWrites--;\r\n if (!request.files) request.files = {};\r\n if (!request.files[field]) request.files[field] = [];\r\n request.files[field].push({\r\n ...uploadedFile,\r\n originalFileName: fileName\r\n });\r\n done();\r\n }\r\n } catch (error) {\r\n triggerError(error);\r\n }\r\n })().catch((error) => {\r\n triggerError(error);\r\n });\r\n }\r\n );\r\n\r\n /**\r\n * Handle non file fields\r\n * These fields will be pushed to the body as array of strings\r\n */\r\n busboy.on('field', (fieldName: string, value: unknown) => {\r\n if (!request.body) request.body = {};\r\n\r\n if (request.body[fieldName]) {\r\n request.body[fieldName].push(value);\r\n } else {\r\n request.body[fieldName] = [value];\r\n }\r\n });\r\n busboy.on('error', function (error: unknown) {\r\n triggerError(error);\r\n });\r\n busboy.on('finish', () => {\r\n (async (): Promise<void> => {\r\n reportDebug({\r\n namespace,\r\n message: 'Busboy finished reading',\r\n data: { hasError, filesOptions, validator, pendingWrites }\r\n });\r\n readFinished = true;\r\n await validateFields();\r\n done();\r\n })().catch((error) => {\r\n triggerError(error);\r\n });\r\n });\r\n return request.pipe(busboy);\r\n}\r\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"fileUploader.js","names":["_busboy","_interopRequireDefault","require","_compressAvatar","_isMultiPart","_validate","_Storage","_WebError","_report","namespace","fileUploader","options","validator","request","response","next","fileUploaderMiddleware","filesOptions","reportDebug","message","data","isMultipart","WebError","statusCode","errorCode","contentType","get","length","busboy","Busboy","headers","hasError","triggerError","error","pendingWrites","unpipe","on","read","bind","removeAllListeners","files","Object","values","forEach","file","Storage","delete","bucket","name","catch","reportError","readFinished","fieldsValidated","done","uploadedFiles","keys","some","required","includes","key","connection","writableEnded","Error","validateFields","validate","field","fileName","encoding","mimeType","destroy","find","fileOption","hint","mimeTypes","expected","fileToUpload","image","compressAvatar","uploadedFile","upload","directory","path","mime","noExtension","metadata","maxSize","push","originalFileName","fieldName","value","body","pipe"],"sources":["../../../src/middleware/fileUploader/fileUploader.ts"],"sourcesContent":["import Busboy from 'busboy';\nimport { Request, Response, NextFunction } from 'express';\nimport { Schema } from 'express-validator';\nimport { compressAvatar } from './compressAvatar';\nimport { FileUploaderConfig } from './fileUploader.types';\nimport { isMultipart } from './isMultiPart';\nimport { validate } from './validate';\nimport { Storage } from 'entities/Storage';\nimport { WebError } from 'entities/WebError';\nimport { reportError, reportDebug } from 'utils/report';\nimport { Readable } from 'stream';\n\nconst namespace = 'engine:middleware:fileUploader';\n\n/**\n * Generate a custom fileUploader middleware\n */\nexport function fileUploader(\n options: Array<FileUploaderConfig>,\n validator: Schema\n) {\n return (\n request: Request,\n response: Response,\n next: NextFunction\n ): Busboy.Busboy =>\n fileUploaderMiddleware(request, response, next, options, validator);\n}\n\n/** Handle file upload and generic multi-part parsing */\nexport function fileUploaderMiddleware(\n request: Request,\n response: Response,\n next: NextFunction,\n filesOptions: Array<FileUploaderConfig>,\n validator: Schema\n): Busboy.Busboy {\n reportDebug({\n namespace,\n message: 'Received request to upload file',\n data: { filesOptions, validator }\n });\n // Check that the request is a proper multipart request\n if (!isMultipart(request))\n throw new WebError({\n statusCode: 415,\n errorCode: 'invalid-content-type',\n message: 'Request is not of type multipart/form-data',\n data: { contentType: request.get('Content-Type') }\n });\n // If no files to handle ignore\n if (!filesOptions.length) next();\n // Parse multipart data with Busboy\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const busboy = new (Busboy as any)({\n headers: {\n ...request.headers,\n 'content-type': request.headers['content-type'] ?? ''\n }\n });\n\n let hasError = false;\n\n /**\n * Function called when an error happened in the process\n * It immediately stops and drains all connection and deletes all files that have already been uploaded\n */\n function triggerError(error: unknown): void {\n pendingWrites--;\n if (hasError) return;\n hasError = true;\n request.unpipe(busboy);\n request.on('readable', request.read.bind(request));\n busboy.removeAllListeners();\n next(error);\n if (request.files) {\n Object.values(request.files).forEach((files) => {\n files.forEach((file) => {\n Storage.delete(file.bucket, file.name).catch((error) => {\n reportError(error);\n });\n });\n });\n }\n }\n\n let readFinished = false;\n let fieldsValidated = false;\n let pendingWrites = 0;\n\n /** Function called when all the body has been parsed */\n function done(): void {\n if (readFinished && pendingWrites === 0 && fieldsValidated && !hasError) {\n const uploadedFiles = Object.keys(request.files ?? {});\n if (\n filesOptions.some(\n (options) => options.required && !uploadedFiles.includes(options.key)\n )\n ) {\n triggerError(\n new WebError({\n statusCode: 400,\n errorCode: 'missing-field',\n message: 'Some required files have not been uploaded',\n data: { filesOptions, validator, uploadedFiles }\n })\n );\n return;\n }\n next();\n }\n }\n\n /*\n * On cancel request, while processing\n */\n request.connection.on('close', function () {\n if (!response.writableEnded) triggerError(new Error('Request cancelled'));\n });\n\n /**\n * Once all the fields have been read they are checked against the validation schema\n */\n async function validateFields(): Promise<void> {\n try {\n await validate(request, validator);\n } catch (error) {\n triggerError(error);\n }\n reportDebug({\n namespace,\n message: 'Validation processed',\n data: { hasError, filesOptions, validator }\n });\n fieldsValidated = true;\n done();\n }\n\n busboy.on(\n 'file',\n (\n field: string,\n file: Readable,\n fileName: string,\n encoding: unknown,\n mimeType: string\n ) => {\n (async (): Promise<void> => {\n reportDebug({\n namespace,\n message: 'Found file in request',\n data: { hasError, field, fileName, encoding, mimeType, pendingWrites }\n });\n // Do not handle the stream if there has been an error previously\n if (hasError) file.destroy();\n pendingWrites++;\n // Find related file options based on the field name\n const options = filesOptions.find(\n (fileOption) => fileOption.key === field\n );\n // Make sure that the field is in the config\n if (!options) {\n triggerError(\n new WebError({\n statusCode: 400,\n errorCode: 'invalid-file-field',\n message: 'Request contains a file at an invalid field',\n hint: { field },\n data: { field }\n })\n );\n return;\n }\n reportDebug({\n namespace,\n message: 'Found options for file',\n data: {\n hasError,\n field,\n fileName,\n encoding,\n mimeType,\n pendingWrites,\n options\n }\n });\n // If a specific MIME type is required check it\n if (options.mimeTypes && !options.mimeTypes.includes(mimeType)) {\n triggerError(\n new WebError({\n statusCode: 415,\n errorCode: 'invalid-mime-type',\n message: 'Request contains a file with an invalid MIME type',\n hint: { field },\n data: { field, mimeType, expected: options.mimeTypes }\n })\n );\n return;\n }\n // Generate the destination path of the file and upload\n reportDebug({\n namespace,\n message: 'Starting file upload',\n data: {\n hasError,\n field,\n fileName,\n encoding,\n mimeType,\n pendingWrites,\n options\n }\n });\n try {\n const fileToUpload = options.image\n ? compressAvatar(file, options.image)\n : file;\n\n const uploadedFile = await Storage.upload(\n fileToUpload,\n options.bucket,\n {\n directory: options.path,\n mime: mimeType,\n noExtension: options.noExtension\n },\n {\n metadata: { contentType: mimeType }\n },\n { maxSize: options.maxSize }\n );\n\n reportDebug({\n namespace,\n message: 'File uploaded',\n data: {\n hasError,\n field,\n fileName,\n encoding,\n mimeType,\n pendingWrites,\n options,\n uploadedFile\n }\n });\n if (hasError) {\n // If some other failed before this one terminated\n // Delete file\n await Storage.delete(uploadedFile.bucket, uploadedFile.name);\n } else {\n // Handle successful upload\n // Add the file's data to the request\n pendingWrites--;\n if (!request.files) request.files = {};\n if (!request.files[field]) request.files[field] = [];\n request.files[field].push({\n ...uploadedFile,\n originalFileName: fileName\n });\n done();\n }\n } catch (error) {\n triggerError(error);\n }\n })().catch((error) => {\n triggerError(error);\n });\n }\n );\n\n /**\n * Handle non file fields\n * These fields will be pushed to the body as array of strings\n */\n busboy.on('field', (fieldName: string, value: unknown) => {\n if (!request.body) request.body = {};\n\n if (request.body[fieldName]) {\n request.body[fieldName].push(value);\n } else {\n request.body[fieldName] = [value];\n }\n });\n busboy.on('error', function (error: unknown) {\n triggerError(error);\n });\n busboy.on('finish', () => {\n (async (): Promise<void> => {\n reportDebug({\n namespace,\n message: 'Busboy finished reading',\n data: { hasError, filesOptions, validator, pendingWrites }\n });\n readFinished = true;\n await validateFields();\n done();\n })().catch((error) => {\n triggerError(error);\n });\n });\n return request.pipe(busboy);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileUploader.types.js","names":[],"sources":["../../../src/middleware/fileUploader/fileUploader.types.ts"],"sourcesContent":["import { CompressionOptions } from './compressAvatar';\
|
|
1
|
+
{"version":3,"file":"fileUploader.types.js","names":[],"sources":["../../../src/middleware/fileUploader/fileUploader.types.ts"],"sourcesContent":["import { CompressionOptions } from './compressAvatar';\nimport { StorageUploadedFile } from 'entities/Storage';\n\n// Override the Express request object to add the files\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace Express {\n /** Express request object */\n interface Request {\n /** Configuration for files that are uploaded with the request */\n files?: { [key: string]: Array<UploadedFile> };\n }\n }\n}\n\n/** Custom uploaded file metadata */\nexport interface UploadedFile extends StorageUploadedFile {\n /** File name that was given to the file by the client */\n originalFileName: string;\n}\n\n/** Outputs setting for the file upload. Defines where a file should be stored and how it should be processed. */\ninterface FileUploaderOutputs {\n /** Name of the output */\n name: string;\n /** Path to which this specific output is stored (defaults to default path if not set) */\n path?: string;\n /** Bucket to which this specific output is stored (defaults to default bucket if not set) */\n bucket?: string;\n}\n\n/** Configuration for a file upload */\nexport interface FileUploaderConfig {\n /** Field key for which this configuration applies */\n key: string;\n /** A list of supported MIME Types for the file */\n mimeTypes?: Array<string>;\n /** Base path where the file should be stored (default used when no output config is set, will be used as temporary storage when outputs are set) */\n path?: string;\n /** Bucket in which the file should be stored (will be used as temporary storage when outputs are set) */\n bucket: string;\n /** Maximum size of the file (ex: 2MB) */\n maxSize?: string;\n /** Indicates that the file must be present */\n required?: boolean;\n /** Do not store with an extension (will simply be a uuid) */\n noExtension?: boolean;\n /** Specify multiple outputs with processing */\n outputs?: Array<FileUploaderOutputs>;\n /** @deprecated compression of images */\n image?: CompressionOptions;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_fileUploader","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_fileUploader2"],"sources":["../../../src/middleware/fileUploader/index.ts"],"sourcesContent":["export * from './fileUploader';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_fileUploader","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_fileUploader2"],"sources":["../../../src/middleware/fileUploader/index.ts"],"sourcesContent":["export * from './fileUploader';\nexport * from './fileUploader.types';\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,cAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,cAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,cAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,cAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_isMultipart","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/middleware/fileUploader/isMultiPart/index.ts"],"sourcesContent":["export * from './isMultipart';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_isMultipart","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/middleware/fileUploader/isMultiPart/index.ts"],"sourcesContent":["export * from './isMultipart';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isMultipart.js","names":["multipartRegex","isMultipart","request","type","get","test","toLowerCase"],"sources":["../../../../src/middleware/fileUploader/isMultiPart/isMultipart.ts"],"sourcesContent":["import { Request } from 'express';\
|
|
1
|
+
{"version":3,"file":"isMultipart.js","names":["multipartRegex","isMultipart","request","type","get","test","toLowerCase"],"sources":["../../../../src/middleware/fileUploader/isMultiPart/isMultipart.ts"],"sourcesContent":["import { Request } from 'express';\n\nconst multipartRegex = /^multipart\\/form-data.+$/;\n\n/** Determines if the content type of a request is multipart/form-data */\nexport function isMultipart(request: Request): boolean {\n const type = request.get('Content-Type');\n return !!type && multipartRegex.test(type.toLowerCase());\n}\n"],"mappings":";;;;;;AAEA,MAAMA,cAAc,GAAG,0BAA0B;;AAEjD;AACO,SAASC,WAAWA,CAACC,OAAgB,EAAW;EACrD,MAAMC,IAAI,GAAGD,OAAO,CAACE,GAAG,CAAC,cAAc,CAAC;EACxC,OAAO,CAAC,CAACD,IAAI,IAAIH,cAAc,CAACK,IAAI,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC,CAAC;AAC1D","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_validate","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/middleware/fileUploader/validate/index.ts"],"sourcesContent":["export * from './validate';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_validate","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../../src/middleware/fileUploader/validate/index.ts"],"sourcesContent":["export * from './validate';\n"],"mappings":";;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","names":["_validate","require","validate","request","schema","Promise","resolve","reject","validationChain","validateMiddleware","flat","length","position","next","error","undefined"],"sources":["../../../../src/middleware/fileUploader/validate/validate.ts"],"sourcesContent":["import { Request } from 'express';\
|
|
1
|
+
{"version":3,"file":"validate.js","names":["_validate","require","validate","request","schema","Promise","resolve","reject","validationChain","validateMiddleware","flat","length","position","next","error","undefined"],"sources":["../../../../src/middleware/fileUploader/validate/validate.ts"],"sourcesContent":["import { Request } from 'express';\nimport { Schema } from 'express-validator';\nimport { validate as validateMiddleware } from 'middleware/validate';\n\n/** Validate a schema against a request using our validation middleware */\nexport async function validate(\n request: Request,\n schema: Schema\n): Promise<void> {\n return new Promise((resolve, reject) => {\n // Generate a validation chain using our middleware\n const validationChain = validateMiddleware(schema).flat();\n if (!validationChain.length) resolve();\n // Recursively go through each middleware by imitating the next function from express\n let position = -1;\n const next = (error?: unknown): void => {\n if (error) reject(error);\n position++;\n if (position === validationChain.length) {\n resolve();\n return;\n }\n validationChain[position](request, undefined, next);\n };\n next();\n });\n}\n"],"mappings":";;;;;;AAEA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACO,eAAeC,QAAQA,CAC5BC,OAAgB,EAChBC,MAAc,EACC;EACf,OAAO,IAAIC,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC;IACA,MAAMC,eAAe,GAAG,IAAAC,kBAAkB,EAACL,MAAM,CAAC,CAACM,IAAI,CAAC,CAAC;IACzD,IAAI,CAACF,eAAe,CAACG,MAAM,EAAEL,OAAO,CAAC,CAAC;IACtC;IACA,IAAIM,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAMC,IAAI,GAAIC,KAAe,IAAW;MACtC,IAAIA,KAAK,EAAEP,MAAM,CAACO,KAAK,CAAC;MACxBF,QAAQ,EAAE;MACV,IAAIA,QAAQ,KAAKJ,eAAe,CAACG,MAAM,EAAE;QACvCL,OAAO,CAAC,CAAC;QACT;MACF;MACAE,eAAe,CAACI,QAAQ,CAAC,CAACT,OAAO,EAAEY,SAAS,EAAEF,IAAI,CAAC;IACrD,CAAC;IACDA,IAAI,CAAC,CAAC;EACR,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fourOhFour.js","names":["_utils","require","namespace","fourOhFour","request","response","reportDebug","message","method","path","sendStatus"],"sources":["../../../src/middleware/fourOhFour/fourOhFour.ts"],"sourcesContent":["import { Request, Response } from 'express';\
|
|
1
|
+
{"version":3,"file":"fourOhFour.js","names":["_utils","require","namespace","fourOhFour","request","response","reportDebug","message","method","path","sendStatus"],"sources":["../../../src/middleware/fourOhFour/fourOhFour.ts"],"sourcesContent":["import { Request, Response } from 'express';\nimport { reportDebug } from 'utils';\n\nconst namespace = 'engine:middleware:fourOhFour';\n\n/** Unhandled path middleware */\nexport function fourOhFour(request: Request, response: Response): void {\n reportDebug({\n namespace,\n message: `No route found [${request.method} - ${request.path}]`\n });\n response.sendStatus(404);\n}\n"],"mappings":";;;;;;AACA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,SAAS,GAAG,8BAA8B;;AAEhD;AACO,SAASC,UAAUA,CAACC,OAAgB,EAAEC,QAAkB,EAAQ;EACrE,IAAAC,kBAAW,EAAC;IACVJ,SAAS;IACTK,OAAO,EAAE,mBAAmBH,OAAO,CAACI,MAAM,MAAMJ,OAAO,CAACK,IAAI;EAC9D,CAAC,CAAC;EACFJ,QAAQ,CAACK,UAAU,CAAC,GAAG,CAAC;AAC1B","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_fourOhFour","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/fourOhFour/index.ts"],"sourcesContent":["export * from './fourOhFour';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_fourOhFour","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/fourOhFour/index.ts"],"sourcesContent":["export * from './fourOhFour';\n"],"mappings":";;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,WAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,WAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,WAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"geminiFileUploader.js","names":["_multer","_interopRequireDefault","require","_server","_fs","_path","_tmp","_report","_checkEnvironment","_envAssert","namespace","apiKey","process","env","GOOGLE_AI_KEY","fileManager","GoogleAIFileManager","storage","multer","memoryStorage","uploadToGemini","buffer","mimeType","originalName","tempFile","tmp","fileSync","postfix","path","extname","fs","writeFileSync","name","uploadResult","uploadFile","displayName","removeCallback","file","reportDebug","message","data","uri","waitForFilesActive","files","getFile","state","stdout","write","Promise","resolve","setTimeout","reportError","geminiFileUploader","req","res","next","checkEnvironment","envAssert","isString","uploadSingle","single","err","mimetype","uploadedFile","originalname","body","fileUri","error","console"],"sources":["../../../src/middleware/geminiFileUploader/geminiFileUploader.ts"],"sourcesContent":["import express from 'express';\
|
|
1
|
+
{"version":3,"file":"geminiFileUploader.js","names":["_multer","_interopRequireDefault","require","_server","_fs","_path","_tmp","_report","_checkEnvironment","_envAssert","namespace","apiKey","process","env","GOOGLE_AI_KEY","fileManager","GoogleAIFileManager","storage","multer","memoryStorage","uploadToGemini","buffer","mimeType","originalName","tempFile","tmp","fileSync","postfix","path","extname","fs","writeFileSync","name","uploadResult","uploadFile","displayName","removeCallback","file","reportDebug","message","data","uri","waitForFilesActive","files","getFile","state","stdout","write","Promise","resolve","setTimeout","reportError","geminiFileUploader","req","res","next","checkEnvironment","envAssert","isString","uploadSingle","single","err","mimetype","uploadedFile","originalname","body","fileUri","error","console"],"sources":["../../../src/middleware/geminiFileUploader/geminiFileUploader.ts"],"sourcesContent":["import express from 'express';\nimport multer from 'multer';\nimport { GoogleAIFileManager } from '@google/generative-ai/server';\nimport fs from 'fs';\nimport path from 'path';\nimport tmp from 'tmp';\nimport { reportError, reportDebug } from 'utils/report';\nimport { checkEnvironment } from 'utils/checkEnvironment';\nimport { envAssert } from 'utils/envAssert';\n\nconst namespace = 'engine:middleware:geminiFileUploader';\n\nconst apiKey = process.env.GOOGLE_AI_KEY ?? '';\nconst fileManager = new GoogleAIFileManager(apiKey);\n\nconst storage = multer.memoryStorage();\n\nasync function uploadToGemini(\n buffer: Buffer,\n mimeType: string,\n originalName: string\n): Promise<{ name: string; uri: string; mimeType: string }> {\n // Add 'name' to the return type\n const tempFile = tmp.fileSync({ postfix: path.extname(originalName) });\n\n fs.writeFileSync(tempFile.name, buffer);\n\n const uploadResult = await fileManager.uploadFile(tempFile.name, {\n mimeType,\n displayName: originalName\n });\n\n tempFile.removeCallback();\n\n const file = uploadResult.file;\n reportDebug({\n namespace,\n message: 'Uploaded file',\n data: { displayName: file.displayName, name: file.name }\n });\n return { name: file.name, uri: file.uri, mimeType: file.mimeType }; // Include 'name' in the return object\n}\n\nasync function waitForFilesActive(\n files: { name: string; uri: string; mimeType: string }[]\n): Promise<void> {\n reportDebug({\n namespace,\n message: 'Waiting for file processing...'\n });\n for (const { name } of files) {\n let file = await fileManager.getFile(name);\n while (file.state === 'PROCESSING') {\n process.stdout.write('.');\n await new Promise((resolve) => setTimeout(resolve, 10_000));\n file = await fileManager.getFile(name);\n }\n if (file.state !== 'ACTIVE') {\n reportError(`File ${file.name} failed to process`);\n }\n }\n reportDebug({\n namespace,\n message: 'all files ready...\\n'\n });\n}\n\nexport async function geminiFileUploader(\n req: express.Request,\n res: express.Response,\n next: express.NextFunction\n): Promise<void> {\n try {\n checkEnvironment({\n GOOGLE_AI_KEY: envAssert.isString()\n });\n // Use multer.single() inside the middleware\n const uploadSingle = multer({ storage }).single('file');\n\n uploadSingle(req, res, async (err) => {\n if (err) {\n reportError(`Error uploading file`);\n next(err);\n return;\n }\n\n const file = req.file;\n if (!file) {\n reportError(`No file uploaded`);\n next(`No file uploaded`);\n return;\n }\n const mimeType = file.mimetype;\n\n const uploadedFile = await uploadToGemini(\n file.buffer,\n mimeType,\n file.originalname\n );\n\n await waitForFilesActive([uploadedFile]);\n\n // Set the fileUri and mimeType in the request object for the next middleware/route handler\n req.body.file = {\n fileUri: uploadedFile.uri,\n mimeType: uploadedFile.mimeType,\n originalname: file.originalname\n };\n\n next(); // Proceed to the next middleware or route handler\n });\n } catch (error) {\n console.error(error);\n reportError(`Failed to upload or process file`);\n next(error);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_geminiFileUploader","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/geminiFileUploader/index.ts"],"sourcesContent":["export * from './geminiFileUploader';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_geminiFileUploader","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/geminiFileUploader/index.ts"],"sourcesContent":["export * from './geminiFileUploader';\n"],"mappings":";;;;;AAAA,IAAAA,mBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,mBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,mBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,mBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.healthCheck = healthCheck;
|
|
7
7
|
var _express = require("express");
|
|
8
|
-
/**
|
|
9
|
-
* respond to Kubernetes health-checks with 200
|
|
8
|
+
/**
|
|
9
|
+
* respond to Kubernetes health-checks with 200
|
|
10
10
|
*/
|
|
11
11
|
function healthCheck(path = '/heartbeat') {
|
|
12
12
|
return (0, _express.Router)().get('/', (req, res) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"healthCheck.js","names":["_express","require","healthCheck","path","Router","get","req","res","sendStatus"],"sources":["../../../src/middleware/healthCheck/healthCheck.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\
|
|
1
|
+
{"version":3,"file":"healthCheck.js","names":["_express","require","healthCheck","path","Router","get","req","res","sendStatus"],"sources":["../../../src/middleware/healthCheck/healthCheck.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\n\n/**\n * respond to Kubernetes health-checks with 200\n */\nexport function healthCheck(path = '/heartbeat'): Router {\n return Router()\n .get('/', (req: Request, res: Response) => {\n res.sendStatus(200);\n })\n .get(path, (req: Request, res: Response) => {\n res.sendStatus(200);\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACO,SAASC,WAAWA,CAACC,IAAI,GAAG,YAAY,EAAU;EACvD,OAAO,IAAAC,eAAM,EAAC,CAAC,CACZC,GAAG,CAAC,GAAG,EAAE,CAACC,GAAY,EAAEC,GAAa,KAAK;IACzCA,GAAG,CAACC,UAAU,CAAC,GAAG,CAAC;EACrB,CAAC,CAAC,CACDH,GAAG,CAACF,IAAI,EAAE,CAACG,GAAY,EAAEC,GAAa,KAAK;IAC1CA,GAAG,CAACC,UAAU,CAAC,GAAG,CAAC;EACrB,CAAC,CAAC;AACN","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_healthCheck","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/healthCheck/index.ts"],"sourcesContent":["export * from './healthCheck';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_healthCheck","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/healthCheck/index.ts"],"sourcesContent":["export * from './healthCheck';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_error","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_healthCheck","_validate","_fourOhFour","_authJwt","_authHmac","_authStatic","_swaggerDocs","_authTls","_userResolver","_fileUploader","_metrics","_requestMetrics","_version","_authAdmin","_geminiFileUploader","_checkPermission"],"sources":["../../src/middleware/index.ts"],"sourcesContent":["export * from './error';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_error","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_healthCheck","_validate","_fourOhFour","_authJwt","_authHmac","_authStatic","_swaggerDocs","_authTls","_userResolver","_fileUploader","_metrics","_requestMetrics","_version","_authAdmin","_geminiFileUploader","_checkPermission"],"sources":["../../src/middleware/index.ts"],"sourcesContent":["export * from './error';\nexport * from './healthCheck';\nexport * from './validate';\nexport * from './fourOhFour';\nexport * from './authJwt';\nexport * from './authHmac';\nexport * from './authStatic';\nexport * from './swaggerDocs';\nexport * from './authTls';\nexport * from './userResolver';\nexport * from './fileUploader';\nexport * from './metrics';\nexport * from './requestMetrics';\nexport * from './version';\nexport * from './authAdmin';\nexport * from './geminiFileUploader';\nexport * from './checkPermission';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_metrics","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/metrics/index.ts"],"sourcesContent":["export * from './metrics';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_metrics","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/metrics/index.ts"],"sourcesContent":["export * from './metrics';\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","names":["_express","require","_metrics","_report","metrics","Router","use","req","res","set","instanceRegistry","contentType","end","catch","error","reportError","serviceRegistry"],"sources":["../../../src/middleware/metrics/metrics.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\
|
|
1
|
+
{"version":3,"file":"metrics.js","names":["_express","require","_metrics","_report","metrics","Router","use","req","res","set","instanceRegistry","contentType","end","catch","error","reportError","serviceRegistry"],"sources":["../../../src/middleware/metrics/metrics.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\nimport { instanceRegistry, serviceRegistry } from 'const/metrics';\nimport { reportError } from 'utils/report';\n\n/** Middleware that calculates request time, and exposes metrics related to requests processed by this service */\nexport function metrics(): Router {\n return Router()\n .use('/metrics/instance', (req: Request, res: Response) => {\n (async (): Promise<void> => {\n res.set('Content-Type', instanceRegistry.contentType);\n res.end(await instanceRegistry.metrics());\n })().catch((error: Error) => {\n reportError(error);\n });\n })\n .use('/metrics/service', (req: Request, res: Response) => {\n (async (): Promise<void> => {\n res.set('Content-Type', serviceRegistry.contentType);\n res.end(await serviceRegistry.metrics());\n })().catch((error: Error) => {\n reportError(error);\n });\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA;AACO,SAASG,OAAOA,CAAA,EAAW;EAChC,OAAO,IAAAC,eAAM,EAAC,CAAC,CACZC,GAAG,CAAC,mBAAmB,EAAE,CAACC,GAAY,EAAEC,GAAa,KAAK;IACzD,CAAC,YAA2B;MAC1BA,GAAG,CAACC,GAAG,CAAC,cAAc,EAAEC,yBAAgB,CAACC,WAAW,CAAC;MACrDH,GAAG,CAACI,GAAG,CAAC,MAAMF,yBAAgB,CAACN,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,CAACS,KAAK,CAAEC,KAAY,IAAK;MAC3B,IAAAC,mBAAW,EAACD,KAAK,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC,CACDR,GAAG,CAAC,kBAAkB,EAAE,CAACC,GAAY,EAAEC,GAAa,KAAK;IACxD,CAAC,YAA2B;MAC1BA,GAAG,CAACC,GAAG,CAAC,cAAc,EAAEO,wBAAe,CAACL,WAAW,CAAC;MACpDH,GAAG,CAACI,GAAG,CAAC,MAAMI,wBAAe,CAACZ,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC,EAAE,CAAC,CAACS,KAAK,CAAEC,KAAY,IAAK;MAC3B,IAAAC,mBAAW,EAACD,KAAK,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC,CAAC;AACN","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_requestMetrics","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/requestMetrics/index.ts"],"sourcesContent":["export * from './requestMetrics';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_requestMetrics","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/requestMetrics/index.ts"],"sourcesContent":["export * from './requestMetrics';\n"],"mappings":";;;;;AAAA,IAAAA,eAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,eAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,eAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,eAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestMetrics.js","names":["_responseTime","_interopRequireDefault","require","_metrics","requestMetrics","exports","responseTime","request","response","time","labels","path","route","method","status","statusCode","toString","substring","service","process","env","CHART","httpRequestCount","inc","httpRequestDuration","observe"],"sources":["../../../src/middleware/requestMetrics/requestMetrics.ts"],"sourcesContent":["import { Request, Response } from 'express';\
|
|
1
|
+
{"version":3,"file":"requestMetrics.js","names":["_responseTime","_interopRequireDefault","require","_metrics","requestMetrics","exports","responseTime","request","response","time","labels","path","route","method","status","statusCode","toString","substring","service","process","env","CHART","httpRequestCount","inc","httpRequestDuration","observe"],"sources":["../../../src/middleware/requestMetrics/requestMetrics.ts"],"sourcesContent":["import { Request, Response } from 'express';\nimport responseTime from 'response-time';\nimport { httpRequestCount, httpRequestDuration } from 'metrics';\n\n/** Middleware that gets metrics on each request */\nexport const requestMetrics = responseTime(\n (request: Request, response: Response, time: number) => {\n const labels = {\n path: (request.route?.path ?? request.path) as string,\n method: request.method,\n status: response.statusCode\n ? `${response.statusCode.toString().substring(0, 1)}XX`\n : '',\n service: process.env.CHART\n };\n\n httpRequestCount.inc(labels);\n httpRequestDuration.observe(labels, time / 1000);\n }\n);\n"],"mappings":";;;;;;;AACA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA;AACO,MAAME,cAAc,GAAAC,OAAA,CAAAD,cAAA,GAAG,IAAAE,qBAAY,EACxC,CAACC,OAAgB,EAAEC,QAAkB,EAAEC,IAAY,KAAK;EACtD,MAAMC,MAAM,GAAG;IACbC,IAAI,EAAGJ,OAAO,CAACK,KAAK,EAAED,IAAI,IAAIJ,OAAO,CAACI,IAAe;IACrDE,MAAM,EAAEN,OAAO,CAACM,MAAM;IACtBC,MAAM,EAAEN,QAAQ,CAACO,UAAU,GACvB,GAAGP,QAAQ,CAACO,UAAU,CAACC,QAAQ,CAAC,CAAC,CAACC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GACrD,EAAE;IACNC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAACC;EACvB,CAAC;EAEDC,yBAAgB,CAACC,GAAG,CAACb,MAAM,CAAC;EAC5Bc,4BAAmB,CAACC,OAAO,CAACf,MAAM,EAAED,IAAI,GAAG,IAAI,CAAC;AAClD,CACF,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_swaggerDocs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_swaggerDocs2"],"sources":["../../../src/middleware/swaggerDocs/index.ts"],"sourcesContent":["export * from './swaggerDocs';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_swaggerDocs","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_swaggerDocs2"],"sources":["../../../src/middleware/swaggerDocs/index.ts"],"sourcesContent":["export * from './swaggerDocs';\nexport * from './swaggerDocs.types';\n"],"mappings":";;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,YAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,aAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,aAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,aAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,aAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -25,10 +25,10 @@ function getResponsePaths() {
|
|
|
25
25
|
return [..._glob.glob.sync(`${process.cwd()}/src/docs/responses/*.yaml`), ..._glob.glob.sync(`${process.cwd()}/dist/docs/responses/*.yaml`)];
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
/**
|
|
29
|
-
* Load all data files and merge them in a single object
|
|
30
|
-
* @param files
|
|
31
|
-
* @return {Object}
|
|
28
|
+
/**
|
|
29
|
+
* Load all data files and merge them in a single object
|
|
30
|
+
* @param files
|
|
31
|
+
* @return {Object}
|
|
32
32
|
*/
|
|
33
33
|
function loadAndMergeData(files) {
|
|
34
34
|
return files.map(file => _yamljs.default.load(file)).reduce((result, endpoint) => {
|
|
@@ -88,9 +88,9 @@ function loadConfig() {
|
|
|
88
88
|
};
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
/**
|
|
92
|
-
* Get a middleware that serves the documentation
|
|
93
|
-
* @return {Router}
|
|
91
|
+
/**
|
|
92
|
+
* Get a middleware that serves the documentation
|
|
93
|
+
* @return {Router}
|
|
94
94
|
*/
|
|
95
95
|
function swaggerDocs() {
|
|
96
96
|
// Stringify the result and replace any environment variable, then turn it again to an object
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swaggerDocs.js","names":["_fs","_interopRequireDefault","require","_express","_glob","_yamljs","_swaggerUiExpress","getEndpointDocPaths","glob","sync","process","cwd","getSchemaPaths","getResponsePaths","loadAndMergeData","files","map","file","YAML","load","reduce","result","endpoint","path","Object","keys","loadEndpoints","paths","endpoints","loadSchemas","schemas","loadResponses","responses","loadConfig","indexPath","config","fs","existsSync","schemaConfig","responseConfig","endpointConfig","components","swaggerDocs","stringifiedDocumentation","JSON","stringify","placeholderRegex","overwrittenDocumentation","replace","match","p1","env","parse","Router","use","swaggerUi","serve","setup"],"sources":["../../../src/middleware/swaggerDocs/swaggerDocs.ts"],"sourcesContent":["import fs from 'fs';\
|
|
1
|
+
{"version":3,"file":"swaggerDocs.js","names":["_fs","_interopRequireDefault","require","_express","_glob","_yamljs","_swaggerUiExpress","getEndpointDocPaths","glob","sync","process","cwd","getSchemaPaths","getResponsePaths","loadAndMergeData","files","map","file","YAML","load","reduce","result","endpoint","path","Object","keys","loadEndpoints","paths","endpoints","loadSchemas","schemas","loadResponses","responses","loadConfig","indexPath","config","fs","existsSync","schemaConfig","responseConfig","endpointConfig","components","swaggerDocs","stringifiedDocumentation","JSON","stringify","placeholderRegex","overwrittenDocumentation","replace","match","p1","env","parse","Router","use","swaggerUi","serve","setup"],"sources":["../../../src/middleware/swaggerDocs/swaggerDocs.ts"],"sourcesContent":["import fs from 'fs';\nimport { Router } from 'express';\nimport { glob } from 'glob';\nimport YAML from 'yamljs';\nimport swaggerUi from 'swagger-ui-express';\nimport {\n EndpointDocumentation,\n IndexDocumentation,\n ResponsesConfig,\n EndpointConfig,\n SchemasConfig,\n SwaggerConfig\n} from './swaggerDocs.types';\n\n/** Get the paths of all the endpoint documentation files */\nfunction getEndpointDocPaths(): Array<string> {\n return [\n ...glob.sync(`${process.cwd()}/src/**/*.docs.yaml`),\n ...glob.sync(`${process.cwd()}/dist/**/*.docs.yaml`)\n ];\n}\n\n/** Get the paths of all the schema files */\nfunction getSchemaPaths(): Array<string> {\n return [\n ...glob.sync(`${process.cwd()}/src/docs/schemas/*.yaml`),\n ...glob.sync(`${process.cwd()}/dist/docs/schemas/*.yaml`)\n ];\n}\n\n/** Get the paths of all the response files */\nfunction getResponsePaths(): Array<string> {\n return [\n ...glob.sync(`${process.cwd()}/src/docs/responses/*.yaml`),\n ...glob.sync(`${process.cwd()}/dist/docs/responses/*.yaml`)\n ];\n}\n\n/**\n * Load all data files and merge them in a single object\n * @param files\n * @return {Object}\n */\nfunction loadAndMergeData(files: Array<string>): EndpointDocumentation {\n return files\n .map((file) => YAML.load(file) as EndpointDocumentation)\n .reduce((result, endpoint) => {\n for (const path of Object.keys(endpoint)) {\n if (!(path in result)) result[path] = {};\n result[path] = { ...result[path], ...endpoint[path] };\n }\n return result;\n }, {});\n}\n\n/** Load documentation files of all the endpoints */\nfunction loadEndpoints(): EndpointConfig {\n const paths = getEndpointDocPaths();\n const endpoints = loadAndMergeData(paths);\n return {\n paths: endpoints\n };\n}\n\n/** Load documentation files of all the schemas */\nfunction loadSchemas(): SchemasConfig {\n const paths = getSchemaPaths();\n const schemas = loadAndMergeData(paths);\n return { schemas };\n}\n\n/** Load documentation files of all the responses */\nfunction loadResponses(): ResponsesConfig {\n const paths = getResponsePaths();\n const responses = loadAndMergeData(paths);\n return { responses };\n}\n\n/** Load the whole Swagger config */\nfunction loadConfig(): SwaggerConfig {\n const indexPath = `${process.cwd()}/src/docs/index.yaml`;\n const config = (\n fs.existsSync(indexPath) ? YAML.load(indexPath) : {}\n ) as IndexDocumentation;\n const schemaConfig = loadSchemas();\n const responseConfig = loadResponses();\n const endpointConfig = loadEndpoints();\n return {\n ...config,\n ...endpointConfig,\n components: {\n ...config.components,\n ...schemaConfig,\n ...responseConfig\n }\n };\n}\n\n/**\n * Get a middleware that serves the documentation\n * @return {Router}\n */\nexport function swaggerDocs(): Router {\n // Stringify the result and replace any environment variable, then turn it again to an object\n const stringifiedDocumentation = JSON.stringify(loadConfig());\n const placeholderRegex = /##(.+?)##/g;\n const overwrittenDocumentation = stringifiedDocumentation.replace(\n placeholderRegex,\n (match: string, p1: string): string => process.env[p1] ?? ''\n );\n const config = JSON.parse(overwrittenDocumentation) as EndpointDocumentation;\n \n return Router().use('/docs', swaggerUi.serve, swaggerUi.setup(config));\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swaggerDocs.types.js","names":[],"sources":["../../../src/middleware/swaggerDocs/swaggerDocs.types.ts"],"sourcesContent":["/** Documentation content */\
|
|
1
|
+
{"version":3,"file":"swaggerDocs.types.js","names":[],"sources":["../../../src/middleware/swaggerDocs/swaggerDocs.types.ts"],"sourcesContent":["/** Documentation content */\nexport interface EndpointDocumentation {\n [path: string]: { [key: string]: unknown };\n}\n\n/** Documentation content */\ninterface ComponentDocumentation {\n [name: string]: { [key: string]: unknown };\n}\n\n/** root documentation config */\nexport interface IndexDocumentation extends EndpointDocumentation {\n /** Global components to be documented */\n components: ComponentDocumentation;\n}\n\n/** Documentation config for endpoints */\nexport interface EndpointConfig {\n /** Documentation content */\n paths: EndpointDocumentation;\n}\n\n/** Documentation config for responses */\nexport interface ResponsesConfig {\n /** Documentation content */\n responses: ComponentDocumentation;\n}\n\n/** Documentation config for schemas */\nexport interface SchemasConfig {\n /** Documentation content */\n schemas: ComponentDocumentation;\n}\n\nexport type SwaggerConfig = IndexDocumentation &\n EndpointConfig & {\n /** Shared components documentation */\n components: IndexDocumentation['components'] &\n ResponsesConfig &\n SchemasConfig;\n };\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_userResolver","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/userResolver/index.ts"],"sourcesContent":["export * from './userResolver';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_userResolver","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/userResolver/index.ts"],"sourcesContent":["export * from './userResolver';\n"],"mappings":";;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,aAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,aAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,aAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userResolver.js","names":["_EngineError","require","_utils","namespace","userResolver","request","response","next","id","user","EngineError","message","data","reportDebug"],"sources":["../../../src/middleware/userResolver/userResolver.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\
|
|
1
|
+
{"version":3,"file":"userResolver.js","names":["_EngineError","require","_utils","namespace","userResolver","request","response","next","id","user","EngineError","message","data","reportDebug"],"sources":["../../../src/middleware/userResolver/userResolver.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\nimport { EngineError } from 'entities/EngineError';\nimport { reportDebug } from 'utils';\n\nconst namespace = 'engine:middleware:userResolver';\n\n/** Fetch the user previously identified by a JWT and adds his data to the request.user object */\nexport async function userResolver(\n request: Request,\n response: Response,\n next: NextFunction\n): Promise<void> {\n const id = request.user?.id;\n if (!id)\n throw new EngineError({\n message: 'Could not resolve user as the request is missing his ID'\n });\n const user = { user: 'ram', id };\n if (!user)\n throw new EngineError({\n message: 'Could not resolve user as it could not be fetched',\n data: { id }\n });\n reportDebug({\n namespace,\n message: 'Resolved user based on his token',\n data: { user, request: request.user }\n });\n request.user = {\n ...request?.user,\n ...user\n };\n\n next();\n}\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,SAAS,GAAG,gCAAgC;;AAElD;AACO,eAAeC,YAAYA,CAChCC,OAAgB,EAChBC,QAAkB,EAClBC,IAAkB,EACH;EACf,MAAMC,EAAE,GAAGH,OAAO,CAACI,IAAI,EAAED,EAAE;EAC3B,IAAI,CAACA,EAAE,EACL,MAAM,IAAIE,wBAAW,CAAC;IACpBC,OAAO,EAAE;EACX,CAAC,CAAC;EACJ,MAAMF,IAAI,GAAG;IAAEA,IAAI,EAAE,KAAK;IAAED;EAAG,CAAC;EAChC,IAAI,CAACC,IAAI,EACP,MAAM,IAAIC,wBAAW,CAAC;IACpBC,OAAO,EAAE,mDAAmD;IAC5DC,IAAI,EAAE;MAAEJ;IAAG;EACb,CAAC,CAAC;EACJ,IAAAK,kBAAW,EAAC;IACVV,SAAS;IACTQ,OAAO,EAAE,kCAAkC;IAC3CC,IAAI,EAAE;MAAEH,IAAI;MAAEJ,OAAO,EAAEA,OAAO,CAACI;IAAK;EACtC,CAAC,CAAC;EACFJ,OAAO,CAACI,IAAI,GAAG;IACb,GAAGJ,OAAO,EAAEI,IAAI;IAChB,GAAGA;EACL,CAAC;EAEDF,IAAI,CAAC,CAAC;AACR","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_validate","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/validate/index.ts"],"sourcesContent":["export * from './validate';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_validate","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/validate/index.ts"],"sourcesContent":["export * from './validate';\n"],"mappings":";;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,SAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,SAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,SAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","names":["_expressValidator","require","_ValidationError","validate","config","checkSchema","req","res","next","result","validationResult","isEmpty","ValidationError","exports"],"sources":["../../../src/middleware/validate/validate.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\
|
|
1
|
+
{"version":3,"file":"validate.js","names":["_expressValidator","require","_ValidationError","validate","config","checkSchema","req","res","next","result","validationResult","isEmpty","ValidationError","exports"],"sources":["../../../src/middleware/validate/validate.ts"],"sourcesContent":["import { Request, Response, NextFunction } from 'express';\nimport {\n checkSchema,\n validationResult,\n Schema,\n ValidationChain\n} from 'express-validator';\nimport { ValidationError } from 'entities/ValidationError';\n\n/** Validate the express-validator results */\nexport const validate = (\n config: Schema\n): Array<\n ValidationChain | ((req: Request, res: Response, next: NextFunction) => void)\n> => [\n ...checkSchema(config),\n (req: Request, res: Response, next: NextFunction): void => {\n const result = validationResult(req);\n if (result.isEmpty()) {\n next();\n return;\n }\n next(new ValidationError(result));\n }\n];\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAMA,IAAAC,gBAAA,GAAAD,OAAA;AAEA;AACO,MAAME,QAAQ,GACnBC,MAAc,IAGX,CACH,GAAG,IAAAC,6BAAW,EAACD,MAAM,CAAC,EACtB,CAACE,GAAY,EAAEC,GAAa,EAAEC,IAAkB,KAAW;EACzD,MAAMC,MAAM,GAAG,IAAAC,kCAAgB,EAACJ,GAAG,CAAC;EACpC,IAAIG,MAAM,CAACE,OAAO,CAAC,CAAC,EAAE;IACpBH,IAAI,CAAC,CAAC;IACN;EACF;EACAA,IAAI,CAAC,IAAII,gCAAe,CAACH,MAAM,CAAC,CAAC;AACnC,CAAC,CACF;AAACI,OAAA,CAAAV,QAAA,GAAAA,QAAA","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_version","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/version/index.ts"],"sourcesContent":["export * from './version';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_version","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get"],"sources":["../../../src/middleware/version/index.ts"],"sourcesContent":["export * from './version';\n"],"mappings":";;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,QAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,QAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,QAAA,CAAAK,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
|
|
@@ -6,9 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.version = version;
|
|
7
7
|
var _express = require("express");
|
|
8
8
|
var _package = require("../../../package.json");
|
|
9
|
-
/**
|
|
10
|
-
* Path returning the version of the service
|
|
11
|
-
* @return {Router}
|
|
9
|
+
/**
|
|
10
|
+
* Path returning the version of the service
|
|
11
|
+
* @return {Router}
|
|
12
12
|
*/
|
|
13
13
|
function version() {
|
|
14
14
|
return (0, _express.Router)().use('/version', (req, res) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","names":["_express","require","_package","version","Router","use","req","res","json","process","env","BUILD_ID","engineVersion"],"sources":["../../../src/middleware/version/version.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\
|
|
1
|
+
{"version":3,"file":"version.js","names":["_express","require","_package","version","Router","use","req","res","json","process","env","BUILD_ID","engineVersion"],"sources":["../../../src/middleware/version/version.ts"],"sourcesContent":["import { Router, Request, Response } from 'express';\nimport { version as engineVersion } from '../../../package.json';\n\n/**\n * Path returning the version of the service\n * @return {Router}\n */\nexport function version(): Router {\n return Router().use('/version', (req: Request, res: Response) => {\n res.json({ version: process.env.BUILD_ID, engineVersion });\n });\n}\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AAEA;AACA;AACA;AACA;AACO,SAASE,OAAOA,CAAA,EAAW;EAChC,OAAO,IAAAC,eAAM,EAAC,CAAC,CAACC,GAAG,CAAC,UAAU,EAAE,CAACC,GAAY,EAAEC,GAAa,KAAK;IAC/DA,GAAG,CAACC,IAAI,CAAC;MAAEL,OAAO,EAAEM,OAAO,CAACC,GAAG,CAACC,QAAQ;MAAEC,aAAa,EAAbA;IAAc,CAAC,CAAC;EAC5D,CAAC,CAAC;AACJ","ignoreList":[]}
|
|
@@ -8,10 +8,10 @@ exports.checkEnvironment = checkEnvironment;
|
|
|
8
8
|
var _envalid = require("envalid");
|
|
9
9
|
var _EngineError = require("../../entities/EngineError");
|
|
10
10
|
var _report = require("../report");
|
|
11
|
-
/**
|
|
12
|
-
* Create an Envalid reporter
|
|
13
|
-
* @param shouldExit - should the reporter exit the process on fail
|
|
14
|
-
* @return Envalid reporter function
|
|
11
|
+
/**
|
|
12
|
+
* Create an Envalid reporter
|
|
13
|
+
* @param shouldExit - should the reporter exit the process on fail
|
|
14
|
+
* @return Envalid reporter function
|
|
15
15
|
*/
|
|
16
16
|
function createReporter(shouldExit) {
|
|
17
17
|
return reporter => {
|
|
@@ -35,11 +35,11 @@ function createReporter(shouldExit) {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
/**
|
|
39
|
-
* Ensure the process.env is valid using Envalid.
|
|
40
|
-
* if the validation fails it will log a helpful EngineError.emergency()
|
|
41
|
-
* and exit the process with status-code 1.
|
|
42
|
-
* @param validators - Envalid validators
|
|
38
|
+
/**
|
|
39
|
+
* Ensure the process.env is valid using Envalid.
|
|
40
|
+
* if the validation fails it will log a helpful EngineError.emergency()
|
|
41
|
+
* and exit the process with status-code 1.
|
|
42
|
+
* @param validators - Envalid validators
|
|
43
43
|
*/
|
|
44
44
|
function checkEnvironment(validators = {}) {
|
|
45
45
|
(0, _envalid.cleanEnv)(process.env, validators, {
|
|
@@ -47,10 +47,10 @@ function checkEnvironment(validators = {}) {
|
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
/**
|
|
51
|
-
* Ensure the process.env is valid using Envalid.
|
|
52
|
-
* if the validation fails it will throw a EngineError.emergency()
|
|
53
|
-
* @param validators - Envalid validators
|
|
50
|
+
/**
|
|
51
|
+
* Ensure the process.env is valid using Envalid.
|
|
52
|
+
* if the validation fails it will throw a EngineError.emergency()
|
|
53
|
+
* @param validators - Envalid validators
|
|
54
54
|
*/
|
|
55
55
|
function assertEnvironment(validators = {}) {
|
|
56
56
|
(0, _envalid.cleanEnv)({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_envalid","require","_EngineError","_report","createReporter","shouldExit","reporter","errors","failedChecks","Object","keys","message","join","length","reportError","EngineError","data","process","exit","checkEnvironment","validators","cleanEnv","env","assertEnvironment"],"sources":["../../../src/utils/checkEnvironment/index.ts"],"sourcesContent":["import { cleanEnv, ReporterOptions } from 'envalid';\
|
|
1
|
+
{"version":3,"file":"index.js","names":["_envalid","require","_EngineError","_report","createReporter","shouldExit","reporter","errors","failedChecks","Object","keys","message","join","length","reportError","EngineError","data","process","exit","checkEnvironment","validators","cleanEnv","env","assertEnvironment"],"sources":["../../../src/utils/checkEnvironment/index.ts"],"sourcesContent":["import { cleanEnv, ReporterOptions } from 'envalid';\nimport { EngineError } from 'entities/EngineError';\nimport { reportError } from 'utils/report';\n\n/**\n * Create an Envalid reporter\n * @param shouldExit - should the reporter exit the process on fail\n * @return Envalid reporter function\n */\nfunction createReporter(shouldExit: boolean) {\n return (reporter: ReporterOptions<unknown>): void => {\n const { errors } = reporter;\n const failedChecks = Object.keys(errors);\n const message = failedChecks.join(', ');\n if (failedChecks.length == 0) return;\n if (shouldExit) {\n reportError(\n new EngineError({\n message: `Check Environment Failed: ${message}`,\n data: failedChecks\n })\n );\n process.exit(1);\n }\n throw new EngineError({\n message: `Check Environment Failed: ${message}`,\n data: failedChecks\n });\n };\n}\n\n/**\n * Ensure the process.env is valid using Envalid.\n * if the validation fails it will log a helpful EngineError.emergency()\n * and exit the process with status-code 1.\n * @param validators - Envalid validators\n */\nexport function checkEnvironment(validators = {}): void {\n cleanEnv(process.env, validators, { reporter: createReporter(true) });\n}\n\n/**\n * Ensure the process.env is valid using Envalid.\n * if the validation fails it will throw a EngineError.emergency()\n * @param validators - Envalid validators\n */\nexport function assertEnvironment(validators = {}): void {\n cleanEnv({ ...process.env }, validators, { reporter: createReporter(false) });\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA,SAASG,cAAcA,CAACC,UAAmB,EAAE;EAC3C,OAAQC,QAAkC,IAAW;IACnD,MAAM;MAAEC;IAAO,CAAC,GAAGD,QAAQ;IAC3B,MAAME,YAAY,GAAGC,MAAM,CAACC,IAAI,CAACH,MAAM,CAAC;IACxC,MAAMI,OAAO,GAAGH,YAAY,CAACI,IAAI,CAAC,IAAI,CAAC;IACvC,IAAIJ,YAAY,CAACK,MAAM,IAAI,CAAC,EAAE;IAC9B,IAAIR,UAAU,EAAE;MACd,IAAAS,mBAAW,EACT,IAAIC,wBAAW,CAAC;QACdJ,OAAO,EAAE,8BAA8BA,OAAO,EAAE;QAChDK,IAAI,EAAER;MACR,CAAC,CACH,CAAC;MACDS,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;IACjB;IACA,MAAM,IAAIH,wBAAW,CAAC;MACpBJ,OAAO,EAAE,8BAA8BA,OAAO,EAAE;MAChDK,IAAI,EAAER;IACR,CAAC,CAAC;EACJ,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASW,gBAAgBA,CAACC,UAAU,GAAG,CAAC,CAAC,EAAQ;EACtD,IAAAC,iBAAQ,EAACJ,OAAO,CAACK,GAAG,EAAEF,UAAU,EAAE;IAAEd,QAAQ,EAAEF,cAAc,CAAC,IAAI;EAAE,CAAC,CAAC;AACvE;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASmB,iBAAiBA,CAACH,UAAU,GAAG,CAAC,CAAC,EAAQ;EACvD,IAAAC,iBAAQ,EAAC;IAAE,GAAGJ,OAAO,CAACK;EAAI,CAAC,EAAEF,UAAU,EAAE;IAAEd,QAAQ,EAAEF,cAAc,CAAC,KAAK;EAAE,CAAC,CAAC;AAC/E","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHttpServer.js","names":["_fs","_interopRequireDefault","require","_http","_https","_createHttpServer","createHttpServer","handler","validateHttpEnvironment","process","env","TLS_SERVER_KEY","TLS_SERVER_CERT","createSecureServer","key","fs","readFileSync","passphrase","TLS_SERVER_KEY_PASSPHRASE","cert","ca","TLS_CA","undefined","requestCert","rejectUnauthorized","createServer"],"sources":["../../../src/utils/createHttpServer/createHttpServer.ts"],"sourcesContent":["import fs from 'fs';\
|
|
1
|
+
{"version":3,"file":"createHttpServer.js","names":["_fs","_interopRequireDefault","require","_http","_https","_createHttpServer","createHttpServer","handler","validateHttpEnvironment","process","env","TLS_SERVER_KEY","TLS_SERVER_CERT","createSecureServer","key","fs","readFileSync","passphrase","TLS_SERVER_KEY_PASSPHRASE","cert","ca","TLS_CA","undefined","requestCert","rejectUnauthorized","createServer"],"sources":["../../../src/utils/createHttpServer/createHttpServer.ts"],"sourcesContent":["import fs from 'fs';\nimport { createServer, RequestListener, Server } from 'http';\nimport {\n createServer as createSecureServer,\n Server as SecureServer\n} from 'https';\nimport { Application } from 'express';\nimport { validateHttpEnvironment } from './createHttpServer.validate';\n\n/** Create and configure an http/https server */\nexport function createHttpServer(\n handler?: Application | RequestListener\n): Server | SecureServer {\n // Validate the environment variables\n validateHttpEnvironment();\n // Create a https server if env var are specified\n if (process.env.TLS_SERVER_KEY && process.env.TLS_SERVER_CERT) {\n return createSecureServer(\n {\n key: fs.readFileSync(process.env.TLS_SERVER_KEY),\n passphrase: process.env.TLS_SERVER_KEY_PASSPHRASE,\n cert: fs.readFileSync(process.env.TLS_SERVER_CERT),\n ca: process.env.TLS_CA\n ? fs.readFileSync(process.env.TLS_CA)\n : undefined,\n requestCert: true,\n rejectUnauthorized: false\n },\n handler\n );\n } else {\n return createServer(handler);\n }\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAKA,IAAAG,iBAAA,GAAAH,OAAA;AAEA;AACO,SAASI,gBAAgBA,CAC9BC,OAAuC,EAChB;EACvB;EACA,IAAAC,yCAAuB,EAAC,CAAC;EACzB;EACA,IAAIC,OAAO,CAACC,GAAG,CAACC,cAAc,IAAIF,OAAO,CAACC,GAAG,CAACE,eAAe,EAAE;IAC7D,OAAO,IAAAC,mBAAkB,EACvB;MACEC,GAAG,EAAEC,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACC,cAAc,CAAC;MAChDM,UAAU,EAAER,OAAO,CAACC,GAAG,CAACQ,yBAAyB;MACjDC,IAAI,EAAEJ,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACE,eAAe,CAAC;MAClDQ,EAAE,EAAEX,OAAO,CAACC,GAAG,CAACW,MAAM,GAClBN,WAAE,CAACC,YAAY,CAACP,OAAO,CAACC,GAAG,CAACW,MAAM,CAAC,GACnCC,SAAS;MACbC,WAAW,EAAE,IAAI;MACjBC,kBAAkB,EAAE;IACtB,CAAC,EACDjB,OACF,CAAC;EACH,CAAC,MAAM;IACL,OAAO,IAAAkB,kBAAY,EAAClB,OAAO,CAAC;EAC9B;AACF","ignoreList":[]}
|