node-server-engine 1.1.1 → 1.1.3
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 -1025
- package/babel.config.json +35 -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.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 +8 -8
- 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 +2 -2
- 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 +3 -3
- 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 +2 -2
- 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 +42 -2
- package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.js +3 -3
- 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 +2 -2
- 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 +15 -15
- 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 +4 -4
- 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.d.ts +3 -1
- package/dist/middleware/checkPermission/checkPermission.js +2 -2
- 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.d.ts +2 -2
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +47 -15
- 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 +164 -161
- 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 -29
- 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 +33 -35
- 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 -70
- 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,23 +1,23 @@
|
|
|
1
|
-
import { WebErrorOptions } from './WebError.types';
|
|
2
|
-
import { LogSeverity } from 'const';
|
|
3
|
-
import { EngineError } from 'entities/EngineError';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Error class used when errors should be reported to the client
|
|
7
|
-
*/
|
|
8
|
-
export class WebError extends EngineError {
|
|
9
|
-
/** Machine readable error code that will be sent to the client */
|
|
10
|
-
public errorCode: string;
|
|
11
|
-
/** HTTP status code associated with this error */
|
|
12
|
-
public statusCode: number;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Create a WebError, these errors are best suited for runtime errors
|
|
16
|
-
*/
|
|
17
|
-
public constructor(config: WebErrorOptions) {
|
|
18
|
-
super({ ...config, severity: config.severity ?? LogSeverity.WARNING });
|
|
19
|
-
|
|
20
|
-
this.statusCode = config.statusCode ?? 400;
|
|
21
|
-
this.errorCode = config.errorCode;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
1
|
+
import { WebErrorOptions } from './WebError.types';
|
|
2
|
+
import { LogSeverity } from 'const';
|
|
3
|
+
import { EngineError } from 'entities/EngineError';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Error class used when errors should be reported to the client
|
|
7
|
+
*/
|
|
8
|
+
export class WebError extends EngineError {
|
|
9
|
+
/** Machine readable error code that will be sent to the client */
|
|
10
|
+
public errorCode: string;
|
|
11
|
+
/** HTTP status code associated with this error */
|
|
12
|
+
public statusCode: number;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Create a WebError, these errors are best suited for runtime errors
|
|
16
|
+
*/
|
|
17
|
+
public constructor(config: WebErrorOptions) {
|
|
18
|
+
super({ ...config, severity: config.severity ?? LogSeverity.WARNING });
|
|
19
|
+
|
|
20
|
+
this.statusCode = config.statusCode ?? 400;
|
|
21
|
+
this.errorCode = config.errorCode;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { EngineErrorOptions } from 'entities/EngineError';
|
|
2
|
-
|
|
3
|
-
/** Options to create a Web Error */
|
|
4
|
-
export interface WebErrorOptions extends EngineErrorOptions {
|
|
5
|
-
/** Machine readable error code that will be sent to the client */
|
|
6
|
-
errorCode: string;
|
|
7
|
-
/** HTTP status code associated with this error (default: 400) */
|
|
8
|
-
statusCode?: number;
|
|
9
|
-
}
|
|
1
|
+
import { EngineErrorOptions } from 'entities/EngineError';
|
|
2
|
+
|
|
3
|
+
/** Options to create a Web Error */
|
|
4
|
+
export interface WebErrorOptions extends EngineErrorOptions {
|
|
5
|
+
/** Machine readable error code that will be sent to the client */
|
|
6
|
+
errorCode: string;
|
|
7
|
+
/** HTTP status code associated with this error (default: 400) */
|
|
8
|
+
statusCode?: number;
|
|
9
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './WebError';
|
|
2
|
-
export * from './WebError.types';
|
|
1
|
+
export * from './WebError';
|
|
2
|
+
export * from './WebError.types';
|
package/src/entities/index.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
export * from './EngineError';
|
|
2
|
-
export * from './WebError';
|
|
3
|
-
export * from './ValidationError';
|
|
4
|
-
export * from './KeySet';
|
|
5
|
-
export * from './Endpoint';
|
|
6
|
-
export * from './MessageHandler';
|
|
7
|
-
export * from './SocketClient';
|
|
8
|
-
export * from './Server';
|
|
9
|
-
export * from './Redis';
|
|
10
|
-
export * from './Localizator';
|
|
11
|
-
export * from './Storage';
|
|
12
|
-
export * from './Sequelize';
|
|
13
|
-
export * from './ElasticSearch';
|
|
14
|
-
export * from './LifecycleController';
|
|
15
|
-
export * from './PubSub';
|
|
16
|
-
export * from './PushNotification';
|
|
1
|
+
export * from './EngineError';
|
|
2
|
+
export * from './WebError';
|
|
3
|
+
export * from './ValidationError';
|
|
4
|
+
export * from './KeySet';
|
|
5
|
+
export * from './Endpoint';
|
|
6
|
+
export * from './MessageHandler';
|
|
7
|
+
export * from './SocketClient';
|
|
8
|
+
export * from './Server';
|
|
9
|
+
export * from './Redis';
|
|
10
|
+
export * from './Localizator';
|
|
11
|
+
export * from './Storage';
|
|
12
|
+
export * from './Sequelize';
|
|
13
|
+
export * from './ElasticSearch';
|
|
14
|
+
export * from './LifecycleController';
|
|
15
|
+
export * from './PubSub';
|
|
16
|
+
export * from './PushNotification';
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './const';
|
|
2
|
-
export * from './entities';
|
|
3
|
-
export * from './utils';
|
|
4
|
-
export * as middleware from './middleware';
|
|
1
|
+
export * from './const';
|
|
2
|
+
export * from './entities';
|
|
3
|
+
export * from './utils';
|
|
4
|
+
export * as middleware from './middleware';
|
package/src/metrics/debug.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Gauge } from 'prom-client';
|
|
2
|
-
import { instanceRegistry } from 'const';
|
|
3
|
-
|
|
4
|
-
export const debugActivated = new Gauge({
|
|
5
|
-
name: 'debug_activated',
|
|
6
|
-
help: 'Debug is activated',
|
|
7
|
-
registers: [instanceRegistry]
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
debugActivated.set(process.env.DEBUG?.length ? 1 : 0);
|
|
1
|
+
import { Gauge } from 'prom-client';
|
|
2
|
+
import { instanceRegistry } from 'const';
|
|
3
|
+
|
|
4
|
+
export const debugActivated = new Gauge({
|
|
5
|
+
name: 'debug_activated',
|
|
6
|
+
help: 'Debug is activated',
|
|
7
|
+
registers: [instanceRegistry]
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
debugActivated.set(process.env.DEBUG?.length ? 1 : 0);
|
package/src/metrics/index.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './request';
|
|
2
|
-
export * from './debug';
|
|
1
|
+
export * from './request';
|
|
2
|
+
export * from './debug';
|
package/src/metrics/request.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Counter, Histogram } from 'prom-client';
|
|
2
|
-
import { instanceRegistry } from 'const';
|
|
3
|
-
|
|
4
|
-
export const httpRequestCount = new Counter({
|
|
5
|
-
name: 'http_requests_total',
|
|
6
|
-
help: 'Total count of request received',
|
|
7
|
-
registers: [instanceRegistry],
|
|
8
|
-
labelNames: ['service', 'path', 'method', 'status']
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
export const httpRequestDuration = new Histogram({
|
|
12
|
-
name: 'http_requests_duration',
|
|
13
|
-
help: 'Duration of the request received',
|
|
14
|
-
registers: [instanceRegistry],
|
|
15
|
-
labelNames: ['service', 'path', 'method', 'status'],
|
|
16
|
-
buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 0.5, 1, 2.5, 5, 10]
|
|
17
|
-
});
|
|
1
|
+
import { Counter, Histogram } from 'prom-client';
|
|
2
|
+
import { instanceRegistry } from 'const';
|
|
3
|
+
|
|
4
|
+
export const httpRequestCount = new Counter({
|
|
5
|
+
name: 'http_requests_total',
|
|
6
|
+
help: 'Total count of request received',
|
|
7
|
+
registers: [instanceRegistry],
|
|
8
|
+
labelNames: ['service', 'path', 'method', 'status']
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const httpRequestDuration = new Histogram({
|
|
12
|
+
name: 'http_requests_duration',
|
|
13
|
+
help: 'Duration of the request received',
|
|
14
|
+
registers: [instanceRegistry],
|
|
15
|
+
labelNames: ['service', 'path', 'method', 'status'],
|
|
16
|
+
buckets: [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 0.5, 1, 2.5, 5, 10]
|
|
17
|
+
});
|
|
@@ -1,199 +1,199 @@
|
|
|
1
|
-
import { factory, generateAccessToken, getBearer } from 'backend-test-tools';
|
|
2
|
-
import { expect } from 'chai';
|
|
3
|
-
import { Request, Response } from 'express';
|
|
4
|
-
import { faker } from '@faker-js/faker';
|
|
5
|
-
import { fake } from 'sinon';
|
|
6
|
-
import { authAdmin } from './authAdmin';
|
|
7
|
-
import {} from './authAdmin.types';
|
|
8
|
-
|
|
9
|
-
describe('Middleware - Auth Admin', () => {
|
|
10
|
-
it('should authenticate with a JWT (auth-service)', async () => {
|
|
11
|
-
const email = faker.internet.email();
|
|
12
|
-
const permission = faker.lorem.word();
|
|
13
|
-
const request = {
|
|
14
|
-
headers: {
|
|
15
|
-
authorization: `Bearer ${generateAccessToken(
|
|
16
|
-
email,
|
|
17
|
-
{
|
|
18
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
19
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
20
|
-
},
|
|
21
|
-
{ per: permission }
|
|
22
|
-
)}`
|
|
23
|
-
}
|
|
24
|
-
} as unknown as Request;
|
|
25
|
-
const next = fake();
|
|
26
|
-
|
|
27
|
-
await authAdmin({ permission })(
|
|
28
|
-
request,
|
|
29
|
-
undefined as unknown as Response,
|
|
30
|
-
next
|
|
31
|
-
);
|
|
32
|
-
|
|
33
|
-
expect(next).to.have.been.calledOnceWithExactly();
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should populate the admin object in the request (auth-service)', async () => {
|
|
37
|
-
const email = faker.internet.email();
|
|
38
|
-
const permission = faker.lorem.word();
|
|
39
|
-
const permissions = [permission, faker.lorem.word(), faker.lorem.word()];
|
|
40
|
-
const request = {
|
|
41
|
-
headers: {
|
|
42
|
-
authorization: `Bearer ${generateAccessToken(
|
|
43
|
-
email,
|
|
44
|
-
{
|
|
45
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
46
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
47
|
-
},
|
|
48
|
-
{ per: permissions }
|
|
49
|
-
)}`
|
|
50
|
-
}
|
|
51
|
-
} as unknown as Request;
|
|
52
|
-
const next = fake();
|
|
53
|
-
|
|
54
|
-
await authAdmin({ permission })(
|
|
55
|
-
request,
|
|
56
|
-
undefined as unknown as Response,
|
|
57
|
-
next
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
expect(request.admin?.email).to.equal(email);
|
|
61
|
-
expect(request.admin?.permissions).to.deep.members(permissions);
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should throw an error if there is no token', async () => {
|
|
65
|
-
const request = { headers: {} } as unknown as Request;
|
|
66
|
-
const next = fake();
|
|
67
|
-
|
|
68
|
-
await expect(
|
|
69
|
-
authAdmin({ permission: faker.lorem.word() })(
|
|
70
|
-
request,
|
|
71
|
-
undefined as unknown as Response,
|
|
72
|
-
next
|
|
73
|
-
)
|
|
74
|
-
).to.eventually.be.rejected;
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('should throw an error if the audience is not valid', async () => {
|
|
78
|
-
const user = factory.build('user');
|
|
79
|
-
const permission = faker.lorem.word();
|
|
80
|
-
const request = {
|
|
81
|
-
headers: {
|
|
82
|
-
authorization: getBearer(
|
|
83
|
-
user.id,
|
|
84
|
-
{ audience: faker.internet.url() },
|
|
85
|
-
{ per: permission }
|
|
86
|
-
)
|
|
87
|
-
}
|
|
88
|
-
} as unknown as Request;
|
|
89
|
-
const next = fake();
|
|
90
|
-
|
|
91
|
-
await expect(
|
|
92
|
-
authAdmin({ permission })(request, undefined as unknown as Response, next)
|
|
93
|
-
).to.eventually.be.rejected;
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('should check user has permission', async () => {
|
|
97
|
-
const email = faker.internet.email();
|
|
98
|
-
const permissions = [faker.lorem.word(), faker.lorem.word()];
|
|
99
|
-
const request = {
|
|
100
|
-
headers: {
|
|
101
|
-
authorization: `Bearer ${generateAccessToken(
|
|
102
|
-
email,
|
|
103
|
-
{
|
|
104
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
105
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
106
|
-
},
|
|
107
|
-
{ per: permissions }
|
|
108
|
-
)}`
|
|
109
|
-
}
|
|
110
|
-
} as unknown as Request;
|
|
111
|
-
const next = fake();
|
|
112
|
-
|
|
113
|
-
await authAdmin({ permission: permissions[0] })(
|
|
114
|
-
request,
|
|
115
|
-
undefined as unknown as Response,
|
|
116
|
-
next
|
|
117
|
-
);
|
|
118
|
-
|
|
119
|
-
expect(request.admin?.email).to.equal(email);
|
|
120
|
-
expect(request.admin?.permissions).to.deep.members(permissions);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('should all user has endpoint permission', async () => {
|
|
124
|
-
const email = faker.internet.email();
|
|
125
|
-
const permission = faker.lorem.word();
|
|
126
|
-
const request = {
|
|
127
|
-
headers: {
|
|
128
|
-
authorization: `Bearer ${generateAccessToken(
|
|
129
|
-
email,
|
|
130
|
-
{
|
|
131
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
132
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
133
|
-
},
|
|
134
|
-
{ per: permission }
|
|
135
|
-
)}`
|
|
136
|
-
}
|
|
137
|
-
} as unknown as Request;
|
|
138
|
-
const next = fake();
|
|
139
|
-
|
|
140
|
-
await authAdmin({ permission })(
|
|
141
|
-
request,
|
|
142
|
-
undefined as unknown as Response,
|
|
143
|
-
next
|
|
144
|
-
);
|
|
145
|
-
|
|
146
|
-
expect(request.admin?.email).to.equal(email);
|
|
147
|
-
expect(request.admin?.permissions).to.includes(permission);
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it('should throw error if user does not have permission', async () => {
|
|
151
|
-
const email = faker.internet.email();
|
|
152
|
-
const permissions = [faker.lorem.word(), faker.lorem.word()];
|
|
153
|
-
const request = {
|
|
154
|
-
headers: {
|
|
155
|
-
authorization: `Bearer ${generateAccessToken(
|
|
156
|
-
email,
|
|
157
|
-
{
|
|
158
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
159
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
160
|
-
},
|
|
161
|
-
{ per: permissions }
|
|
162
|
-
)}`
|
|
163
|
-
}
|
|
164
|
-
} as unknown as Request;
|
|
165
|
-
const next = fake();
|
|
166
|
-
|
|
167
|
-
await expect(
|
|
168
|
-
authAdmin({ permission: faker.lorem.word() })(
|
|
169
|
-
request,
|
|
170
|
-
undefined as unknown as Response,
|
|
171
|
-
next
|
|
172
|
-
)
|
|
173
|
-
).to.eventually.rejected;
|
|
174
|
-
});
|
|
175
|
-
|
|
176
|
-
it('should allow wildcard permissions', async () => {
|
|
177
|
-
const email = faker.internet.email();
|
|
178
|
-
const permission = faker.lorem.word();
|
|
179
|
-
const request = {
|
|
180
|
-
headers: {
|
|
181
|
-
authorization: `Bearer ${generateAccessToken(
|
|
182
|
-
email,
|
|
183
|
-
{
|
|
184
|
-
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
185
|
-
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
186
|
-
},
|
|
187
|
-
{ per: `${permission}:*` }
|
|
188
|
-
)}`
|
|
189
|
-
}
|
|
190
|
-
} as unknown as Request;
|
|
191
|
-
const next = fake();
|
|
192
|
-
|
|
193
|
-
await authAdmin({ permission: `${permission}:${faker.lorem.word()}` })(
|
|
194
|
-
request,
|
|
195
|
-
undefined as unknown as Response,
|
|
196
|
-
next
|
|
197
|
-
);
|
|
198
|
-
});
|
|
199
|
-
});
|
|
1
|
+
import { factory, generateAccessToken, getBearer } from 'backend-test-tools';
|
|
2
|
+
import { expect } from 'chai';
|
|
3
|
+
import { Request, Response } from 'express';
|
|
4
|
+
import { faker } from '@faker-js/faker';
|
|
5
|
+
import { fake } from 'sinon';
|
|
6
|
+
import { authAdmin } from './authAdmin';
|
|
7
|
+
import {} from './authAdmin.types';
|
|
8
|
+
|
|
9
|
+
describe('Middleware - Auth Admin', () => {
|
|
10
|
+
it('should authenticate with a JWT (auth-service)', async () => {
|
|
11
|
+
const email = faker.internet.email();
|
|
12
|
+
const permission = faker.lorem.word();
|
|
13
|
+
const request = {
|
|
14
|
+
headers: {
|
|
15
|
+
authorization: `Bearer ${generateAccessToken(
|
|
16
|
+
email,
|
|
17
|
+
{
|
|
18
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
19
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
20
|
+
},
|
|
21
|
+
{ per: permission }
|
|
22
|
+
)}`
|
|
23
|
+
}
|
|
24
|
+
} as unknown as Request;
|
|
25
|
+
const next = fake();
|
|
26
|
+
|
|
27
|
+
await authAdmin({ permission })(
|
|
28
|
+
request,
|
|
29
|
+
undefined as unknown as Response,
|
|
30
|
+
next
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
expect(next).to.have.been.calledOnceWithExactly();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('should populate the admin object in the request (auth-service)', async () => {
|
|
37
|
+
const email = faker.internet.email();
|
|
38
|
+
const permission = faker.lorem.word();
|
|
39
|
+
const permissions = [permission, faker.lorem.word(), faker.lorem.word()];
|
|
40
|
+
const request = {
|
|
41
|
+
headers: {
|
|
42
|
+
authorization: `Bearer ${generateAccessToken(
|
|
43
|
+
email,
|
|
44
|
+
{
|
|
45
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
46
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
47
|
+
},
|
|
48
|
+
{ per: permissions }
|
|
49
|
+
)}`
|
|
50
|
+
}
|
|
51
|
+
} as unknown as Request;
|
|
52
|
+
const next = fake();
|
|
53
|
+
|
|
54
|
+
await authAdmin({ permission })(
|
|
55
|
+
request,
|
|
56
|
+
undefined as unknown as Response,
|
|
57
|
+
next
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
expect(request.admin?.email).to.equal(email);
|
|
61
|
+
expect(request.admin?.permissions).to.deep.members(permissions);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
it('should throw an error if there is no token', async () => {
|
|
65
|
+
const request = { headers: {} } as unknown as Request;
|
|
66
|
+
const next = fake();
|
|
67
|
+
|
|
68
|
+
await expect(
|
|
69
|
+
authAdmin({ permission: faker.lorem.word() })(
|
|
70
|
+
request,
|
|
71
|
+
undefined as unknown as Response,
|
|
72
|
+
next
|
|
73
|
+
)
|
|
74
|
+
).to.eventually.be.rejected;
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('should throw an error if the audience is not valid', async () => {
|
|
78
|
+
const user = factory.build('user');
|
|
79
|
+
const permission = faker.lorem.word();
|
|
80
|
+
const request = {
|
|
81
|
+
headers: {
|
|
82
|
+
authorization: getBearer(
|
|
83
|
+
user.id,
|
|
84
|
+
{ audience: faker.internet.url() },
|
|
85
|
+
{ per: permission }
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
} as unknown as Request;
|
|
89
|
+
const next = fake();
|
|
90
|
+
|
|
91
|
+
await expect(
|
|
92
|
+
authAdmin({ permission })(request, undefined as unknown as Response, next)
|
|
93
|
+
).to.eventually.be.rejected;
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
it('should check user has permission', async () => {
|
|
97
|
+
const email = faker.internet.email();
|
|
98
|
+
const permissions = [faker.lorem.word(), faker.lorem.word()];
|
|
99
|
+
const request = {
|
|
100
|
+
headers: {
|
|
101
|
+
authorization: `Bearer ${generateAccessToken(
|
|
102
|
+
email,
|
|
103
|
+
{
|
|
104
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
105
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
106
|
+
},
|
|
107
|
+
{ per: permissions }
|
|
108
|
+
)}`
|
|
109
|
+
}
|
|
110
|
+
} as unknown as Request;
|
|
111
|
+
const next = fake();
|
|
112
|
+
|
|
113
|
+
await authAdmin({ permission: permissions[0] })(
|
|
114
|
+
request,
|
|
115
|
+
undefined as unknown as Response,
|
|
116
|
+
next
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
expect(request.admin?.email).to.equal(email);
|
|
120
|
+
expect(request.admin?.permissions).to.deep.members(permissions);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('should all user has endpoint permission', async () => {
|
|
124
|
+
const email = faker.internet.email();
|
|
125
|
+
const permission = faker.lorem.word();
|
|
126
|
+
const request = {
|
|
127
|
+
headers: {
|
|
128
|
+
authorization: `Bearer ${generateAccessToken(
|
|
129
|
+
email,
|
|
130
|
+
{
|
|
131
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
132
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
133
|
+
},
|
|
134
|
+
{ per: permission }
|
|
135
|
+
)}`
|
|
136
|
+
}
|
|
137
|
+
} as unknown as Request;
|
|
138
|
+
const next = fake();
|
|
139
|
+
|
|
140
|
+
await authAdmin({ permission })(
|
|
141
|
+
request,
|
|
142
|
+
undefined as unknown as Response,
|
|
143
|
+
next
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
expect(request.admin?.email).to.equal(email);
|
|
147
|
+
expect(request.admin?.permissions).to.includes(permission);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('should throw error if user does not have permission', async () => {
|
|
151
|
+
const email = faker.internet.email();
|
|
152
|
+
const permissions = [faker.lorem.word(), faker.lorem.word()];
|
|
153
|
+
const request = {
|
|
154
|
+
headers: {
|
|
155
|
+
authorization: `Bearer ${generateAccessToken(
|
|
156
|
+
email,
|
|
157
|
+
{
|
|
158
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
159
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
160
|
+
},
|
|
161
|
+
{ per: permissions }
|
|
162
|
+
)}`
|
|
163
|
+
}
|
|
164
|
+
} as unknown as Request;
|
|
165
|
+
const next = fake();
|
|
166
|
+
|
|
167
|
+
await expect(
|
|
168
|
+
authAdmin({ permission: faker.lorem.word() })(
|
|
169
|
+
request,
|
|
170
|
+
undefined as unknown as Response,
|
|
171
|
+
next
|
|
172
|
+
)
|
|
173
|
+
).to.eventually.rejected;
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should allow wildcard permissions', async () => {
|
|
177
|
+
const email = faker.internet.email();
|
|
178
|
+
const permission = faker.lorem.word();
|
|
179
|
+
const request = {
|
|
180
|
+
headers: {
|
|
181
|
+
authorization: `Bearer ${generateAccessToken(
|
|
182
|
+
email,
|
|
183
|
+
{
|
|
184
|
+
audience: [process.env.ADMIN_API_ACCESS_TOKEN_AUDIENCE as string],
|
|
185
|
+
issuer: process.env.ADMIN_ACCESS_TOKEN_ISSUER
|
|
186
|
+
},
|
|
187
|
+
{ per: `${permission}:*` }
|
|
188
|
+
)}`
|
|
189
|
+
}
|
|
190
|
+
} as unknown as Request;
|
|
191
|
+
const next = fake();
|
|
192
|
+
|
|
193
|
+
await authAdmin({ permission: `${permission}:${faker.lorem.word()}` })(
|
|
194
|
+
request,
|
|
195
|
+
undefined as unknown as Response,
|
|
196
|
+
next
|
|
197
|
+
);
|
|
198
|
+
});
|
|
199
|
+
});
|