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,70 +1,70 @@
|
|
|
1
|
-
import { LogSeverity } from 'const';
|
|
2
|
-
|
|
3
|
-
/** Structure of the request reporting in log entries */
|
|
4
|
-
interface LogEntryRequest {
|
|
5
|
-
/** Requested URL */
|
|
6
|
-
url: string;
|
|
7
|
-
/** HTTP method used */
|
|
8
|
-
method: string;
|
|
9
|
-
/** Referer website */
|
|
10
|
-
referrer?: string;
|
|
11
|
-
/** User-Agent of the connected client */
|
|
12
|
-
userAgent?: string;
|
|
13
|
-
/** IP address of the client */
|
|
14
|
-
remoteIp: string | undefined;
|
|
15
|
-
/** HTTP status code returned to the client */
|
|
16
|
-
responseStatusCode?: number;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/** Structure of the context entry in log entries */
|
|
20
|
-
interface LogEntryContext {
|
|
21
|
-
/** User that made a request */
|
|
22
|
-
user?: string;
|
|
23
|
-
/** Info on the processed HTTP request */
|
|
24
|
-
httpRequest?: LogEntryRequest;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/** Structure of a log entry */
|
|
28
|
-
export interface LogEntry {
|
|
29
|
-
/** Severity level at which the entry should be logged */
|
|
30
|
-
severity: LogSeverity;
|
|
31
|
-
/** Type of error */
|
|
32
|
-
errorType?: string;
|
|
33
|
-
/** Human readable error message that will be logged */
|
|
34
|
-
message: string;
|
|
35
|
-
/** Stack-trace of the error */
|
|
36
|
-
|
|
37
|
-
stack_trace?: string;
|
|
38
|
-
/** Additional data that accompanies the error in the logs */
|
|
39
|
-
data?: unknown;
|
|
40
|
-
/** Machine readable error code that is returned to the client */
|
|
41
|
-
errorCode?: string;
|
|
42
|
-
/** HTTP status code that is returned to the client */
|
|
43
|
-
statusCode?: number;
|
|
44
|
-
/** GCP error type */
|
|
45
|
-
'@type'?: string;
|
|
46
|
-
/** Error context */
|
|
47
|
-
context?: LogEntryContext;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/** Stricture of a log entry context entry */
|
|
51
|
-
interface LogEntryServiceContext {
|
|
52
|
-
/** Name of the service in which the error ocurred */
|
|
53
|
-
service?: string;
|
|
54
|
-
/** Version of the service in which the error ocurred */
|
|
55
|
-
version?: string;
|
|
56
|
-
/** Environment in which the error ocurred (dev/staging/prod) */
|
|
57
|
-
environment?: string;
|
|
58
|
-
/** ID of the instance that got the error */
|
|
59
|
-
instance?: string;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/** Complete log entry with call-stack */
|
|
63
|
-
export interface FullLogEntry extends LogEntry {
|
|
64
|
-
/** Line at which the error was thrown */
|
|
65
|
-
lineNumber: number;
|
|
66
|
-
/** Name of the file in which the error was thrown */
|
|
67
|
-
fileName: string;
|
|
68
|
-
/** Context of the error */
|
|
69
|
-
serviceContext: LogEntryServiceContext;
|
|
70
|
-
}
|
|
1
|
+
import { LogSeverity } from 'const';
|
|
2
|
+
|
|
3
|
+
/** Structure of the request reporting in log entries */
|
|
4
|
+
interface LogEntryRequest {
|
|
5
|
+
/** Requested URL */
|
|
6
|
+
url: string;
|
|
7
|
+
/** HTTP method used */
|
|
8
|
+
method: string;
|
|
9
|
+
/** Referer website */
|
|
10
|
+
referrer?: string;
|
|
11
|
+
/** User-Agent of the connected client */
|
|
12
|
+
userAgent?: string;
|
|
13
|
+
/** IP address of the client */
|
|
14
|
+
remoteIp: string | undefined;
|
|
15
|
+
/** HTTP status code returned to the client */
|
|
16
|
+
responseStatusCode?: number;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Structure of the context entry in log entries */
|
|
20
|
+
interface LogEntryContext {
|
|
21
|
+
/** User that made a request */
|
|
22
|
+
user?: string;
|
|
23
|
+
/** Info on the processed HTTP request */
|
|
24
|
+
httpRequest?: LogEntryRequest;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Structure of a log entry */
|
|
28
|
+
export interface LogEntry {
|
|
29
|
+
/** Severity level at which the entry should be logged */
|
|
30
|
+
severity: LogSeverity;
|
|
31
|
+
/** Type of error */
|
|
32
|
+
errorType?: string;
|
|
33
|
+
/** Human readable error message that will be logged */
|
|
34
|
+
message: string;
|
|
35
|
+
/** Stack-trace of the error */
|
|
36
|
+
|
|
37
|
+
stack_trace?: string;
|
|
38
|
+
/** Additional data that accompanies the error in the logs */
|
|
39
|
+
data?: unknown;
|
|
40
|
+
/** Machine readable error code that is returned to the client */
|
|
41
|
+
errorCode?: string;
|
|
42
|
+
/** HTTP status code that is returned to the client */
|
|
43
|
+
statusCode?: number;
|
|
44
|
+
/** GCP error type */
|
|
45
|
+
'@type'?: string;
|
|
46
|
+
/** Error context */
|
|
47
|
+
context?: LogEntryContext;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Stricture of a log entry context entry */
|
|
51
|
+
interface LogEntryServiceContext {
|
|
52
|
+
/** Name of the service in which the error ocurred */
|
|
53
|
+
service?: string;
|
|
54
|
+
/** Version of the service in which the error ocurred */
|
|
55
|
+
version?: string;
|
|
56
|
+
/** Environment in which the error ocurred (dev/staging/prod) */
|
|
57
|
+
environment?: string;
|
|
58
|
+
/** ID of the instance that got the error */
|
|
59
|
+
instance?: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Complete log entry with call-stack */
|
|
63
|
+
export interface FullLogEntry extends LogEntry {
|
|
64
|
+
/** Line at which the error was thrown */
|
|
65
|
+
lineNumber: number;
|
|
66
|
+
/** Name of the file in which the error was thrown */
|
|
67
|
+
fileName: string;
|
|
68
|
+
/** Context of the error */
|
|
69
|
+
serviceContext: LogEntryServiceContext;
|
|
70
|
+
}
|
|
@@ -1,133 +1,133 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { faker } from '@faker-js/faker';
|
|
3
|
-
import { describe, it, beforeEach } from 'mocha';
|
|
4
|
-
import { stub, match } from 'sinon';
|
|
5
|
-
import * as output from './output';
|
|
6
|
-
import { reportInfo, reportDebug, resetNamespaceSelector } from './report';
|
|
7
|
-
import { InfoLogEntry } from './report.types';
|
|
8
|
-
|
|
9
|
-
describe('Utils - Report', () => {
|
|
10
|
-
it('should collect filename and line number', () => {
|
|
11
|
-
let result = reportInfo('example');
|
|
12
|
-
expect(result.fileName).to.equal(
|
|
13
|
-
`${__dirname}/report.test.ts`.replace(/.*src\//, 'src/')
|
|
14
|
-
);
|
|
15
|
-
expect(result.severity).to.equal('INFO');
|
|
16
|
-
expect(result.message).to.equal('example');
|
|
17
|
-
|
|
18
|
-
const data: InfoLogEntry = { message: 'world' };
|
|
19
|
-
result = reportInfo(data);
|
|
20
|
-
expect(result.message).to.equal('world');
|
|
21
|
-
expect(result.fileName).to.equal(
|
|
22
|
-
`${__dirname}/report.test.ts`.replace(/.*src\//, 'src/')
|
|
23
|
-
);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe('Report Debug', () => {
|
|
27
|
-
let globalNamespace: string;
|
|
28
|
-
|
|
29
|
-
beforeEach(() => {
|
|
30
|
-
resetNamespaceSelector();
|
|
31
|
-
|
|
32
|
-
globalNamespace = faker.lorem.slug();
|
|
33
|
-
reportDebug.setNameSpace(globalNamespace);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
afterEach(() => {
|
|
37
|
-
reportDebug.clearNamespace();
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it('should report when the namespace is specified', () => {
|
|
41
|
-
const namespace = faker.lorem.word();
|
|
42
|
-
process.env.DEBUG = globalNamespace + ':' + namespace;
|
|
43
|
-
const outputStub = stub(output, 'output');
|
|
44
|
-
const message = faker.lorem.sentence();
|
|
45
|
-
reportDebug({ message, namespace });
|
|
46
|
-
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
47
|
-
match({
|
|
48
|
-
message: `[${namespace}] ${message}`,
|
|
49
|
-
severity: 'DEBUG',
|
|
50
|
-
namespace: namespace
|
|
51
|
-
})
|
|
52
|
-
);
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
it('should report when the namespace is specified with a wildcard', () => {
|
|
56
|
-
const namespace = faker.lorem.word();
|
|
57
|
-
process.env.DEBUG = globalNamespace + ':' + `${namespace}:*`;
|
|
58
|
-
const outputStub = stub(output, 'output');
|
|
59
|
-
const message = faker.lorem.sentence();
|
|
60
|
-
const prefix = faker.lorem.word();
|
|
61
|
-
const actualNamespace = `${namespace}:${prefix}`;
|
|
62
|
-
reportDebug({ message, namespace: actualNamespace });
|
|
63
|
-
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
64
|
-
match({
|
|
65
|
-
message: `[${prefix}] ${message}`,
|
|
66
|
-
severity: 'DEBUG',
|
|
67
|
-
namespace: actualNamespace
|
|
68
|
-
})
|
|
69
|
-
);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should report when multiple namespaces are specified', () => {
|
|
73
|
-
const namespace = faker.lorem.word();
|
|
74
|
-
process.env.DEBUG =
|
|
75
|
-
globalNamespace +
|
|
76
|
-
':' +
|
|
77
|
-
`${namespace},${faker.lorem.word()},${faker.lorem.word()}`;
|
|
78
|
-
const outputStub = stub(output, 'output');
|
|
79
|
-
const message = faker.lorem.sentence();
|
|
80
|
-
reportDebug({ message, namespace });
|
|
81
|
-
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
82
|
-
match({
|
|
83
|
-
message: `[${namespace}] ${message}`,
|
|
84
|
-
severity: 'DEBUG',
|
|
85
|
-
namespace: namespace
|
|
86
|
-
})
|
|
87
|
-
);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
it('should not report when another namespace is specified', () => {
|
|
91
|
-
process.env.DEBUG = faker.lorem.word();
|
|
92
|
-
const outputStub = stub(output, 'output');
|
|
93
|
-
reportDebug({
|
|
94
|
-
message: faker.lorem.sentence(),
|
|
95
|
-
namespace: faker.lorem.word()
|
|
96
|
-
});
|
|
97
|
-
expect(outputStub).to.not.have.been.called;
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it('should ignore the global namespace in server engine report debug', () => {
|
|
101
|
-
const namespace = 'engine';
|
|
102
|
-
process.env.DEBUG = `${namespace}:*`;
|
|
103
|
-
const prefix = faker.lorem.word();
|
|
104
|
-
const actualNamespace = `${namespace}:${prefix}`;
|
|
105
|
-
const outputStub = stub(output, 'output');
|
|
106
|
-
const message = faker.lorem.sentence();
|
|
107
|
-
reportDebug({ message, namespace: actualNamespace });
|
|
108
|
-
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
109
|
-
match({
|
|
110
|
-
message: `[${prefix}] ${message}`,
|
|
111
|
-
severity: 'DEBUG',
|
|
112
|
-
namespace: actualNamespace
|
|
113
|
-
})
|
|
114
|
-
);
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('should report with no global namespace', () => {
|
|
118
|
-
reportDebug.clearNamespace();
|
|
119
|
-
const namespace = faker.lorem.word();
|
|
120
|
-
process.env.DEBUG = namespace;
|
|
121
|
-
const outputStub = stub(output, 'output');
|
|
122
|
-
const message = faker.lorem.sentence();
|
|
123
|
-
reportDebug({ message, namespace });
|
|
124
|
-
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
125
|
-
match({
|
|
126
|
-
message: `[${namespace}] ${message}`,
|
|
127
|
-
severity: 'DEBUG',
|
|
128
|
-
namespace
|
|
129
|
-
})
|
|
130
|
-
);
|
|
131
|
-
});
|
|
132
|
-
});
|
|
133
|
-
});
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { faker } from '@faker-js/faker';
|
|
3
|
+
import { describe, it, beforeEach } from 'mocha';
|
|
4
|
+
import { stub, match } from 'sinon';
|
|
5
|
+
import * as output from './output';
|
|
6
|
+
import { reportInfo, reportDebug, resetNamespaceSelector } from './report';
|
|
7
|
+
import { InfoLogEntry } from './report.types';
|
|
8
|
+
|
|
9
|
+
describe('Utils - Report', () => {
|
|
10
|
+
it('should collect filename and line number', () => {
|
|
11
|
+
let result = reportInfo('example');
|
|
12
|
+
expect(result.fileName).to.equal(
|
|
13
|
+
`${__dirname}/report.test.ts`.replace(/.*src\//, 'src/')
|
|
14
|
+
);
|
|
15
|
+
expect(result.severity).to.equal('INFO');
|
|
16
|
+
expect(result.message).to.equal('example');
|
|
17
|
+
|
|
18
|
+
const data: InfoLogEntry = { message: 'world' };
|
|
19
|
+
result = reportInfo(data);
|
|
20
|
+
expect(result.message).to.equal('world');
|
|
21
|
+
expect(result.fileName).to.equal(
|
|
22
|
+
`${__dirname}/report.test.ts`.replace(/.*src\//, 'src/')
|
|
23
|
+
);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
describe('Report Debug', () => {
|
|
27
|
+
let globalNamespace: string;
|
|
28
|
+
|
|
29
|
+
beforeEach(() => {
|
|
30
|
+
resetNamespaceSelector();
|
|
31
|
+
|
|
32
|
+
globalNamespace = faker.lorem.slug();
|
|
33
|
+
reportDebug.setNameSpace(globalNamespace);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
afterEach(() => {
|
|
37
|
+
reportDebug.clearNamespace();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('should report when the namespace is specified', () => {
|
|
41
|
+
const namespace = faker.lorem.word();
|
|
42
|
+
process.env.DEBUG = globalNamespace + ':' + namespace;
|
|
43
|
+
const outputStub = stub(output, 'output');
|
|
44
|
+
const message = faker.lorem.sentence();
|
|
45
|
+
reportDebug({ message, namespace });
|
|
46
|
+
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
47
|
+
match({
|
|
48
|
+
message: `[${namespace}] ${message}`,
|
|
49
|
+
severity: 'DEBUG',
|
|
50
|
+
namespace: namespace
|
|
51
|
+
})
|
|
52
|
+
);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it('should report when the namespace is specified with a wildcard', () => {
|
|
56
|
+
const namespace = faker.lorem.word();
|
|
57
|
+
process.env.DEBUG = globalNamespace + ':' + `${namespace}:*`;
|
|
58
|
+
const outputStub = stub(output, 'output');
|
|
59
|
+
const message = faker.lorem.sentence();
|
|
60
|
+
const prefix = faker.lorem.word();
|
|
61
|
+
const actualNamespace = `${namespace}:${prefix}`;
|
|
62
|
+
reportDebug({ message, namespace: actualNamespace });
|
|
63
|
+
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
64
|
+
match({
|
|
65
|
+
message: `[${prefix}] ${message}`,
|
|
66
|
+
severity: 'DEBUG',
|
|
67
|
+
namespace: actualNamespace
|
|
68
|
+
})
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should report when multiple namespaces are specified', () => {
|
|
73
|
+
const namespace = faker.lorem.word();
|
|
74
|
+
process.env.DEBUG =
|
|
75
|
+
globalNamespace +
|
|
76
|
+
':' +
|
|
77
|
+
`${namespace},${faker.lorem.word()},${faker.lorem.word()}`;
|
|
78
|
+
const outputStub = stub(output, 'output');
|
|
79
|
+
const message = faker.lorem.sentence();
|
|
80
|
+
reportDebug({ message, namespace });
|
|
81
|
+
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
82
|
+
match({
|
|
83
|
+
message: `[${namespace}] ${message}`,
|
|
84
|
+
severity: 'DEBUG',
|
|
85
|
+
namespace: namespace
|
|
86
|
+
})
|
|
87
|
+
);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should not report when another namespace is specified', () => {
|
|
91
|
+
process.env.DEBUG = faker.lorem.word();
|
|
92
|
+
const outputStub = stub(output, 'output');
|
|
93
|
+
reportDebug({
|
|
94
|
+
message: faker.lorem.sentence(),
|
|
95
|
+
namespace: faker.lorem.word()
|
|
96
|
+
});
|
|
97
|
+
expect(outputStub).to.not.have.been.called;
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should ignore the global namespace in server engine report debug', () => {
|
|
101
|
+
const namespace = 'engine';
|
|
102
|
+
process.env.DEBUG = `${namespace}:*`;
|
|
103
|
+
const prefix = faker.lorem.word();
|
|
104
|
+
const actualNamespace = `${namespace}:${prefix}`;
|
|
105
|
+
const outputStub = stub(output, 'output');
|
|
106
|
+
const message = faker.lorem.sentence();
|
|
107
|
+
reportDebug({ message, namespace: actualNamespace });
|
|
108
|
+
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
109
|
+
match({
|
|
110
|
+
message: `[${prefix}] ${message}`,
|
|
111
|
+
severity: 'DEBUG',
|
|
112
|
+
namespace: actualNamespace
|
|
113
|
+
})
|
|
114
|
+
);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('should report with no global namespace', () => {
|
|
118
|
+
reportDebug.clearNamespace();
|
|
119
|
+
const namespace = faker.lorem.word();
|
|
120
|
+
process.env.DEBUG = namespace;
|
|
121
|
+
const outputStub = stub(output, 'output');
|
|
122
|
+
const message = faker.lorem.sentence();
|
|
123
|
+
reportDebug({ message, namespace });
|
|
124
|
+
expect(outputStub).to.have.been.calledOnceWithExactly(
|
|
125
|
+
match({
|
|
126
|
+
message: `[${namespace}] ${message}`,
|
|
127
|
+
severity: 'DEBUG',
|
|
128
|
+
namespace
|
|
129
|
+
})
|
|
130
|
+
);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
import { Request } from 'express';
|
|
2
|
-
import { output } from './output';
|
|
3
|
-
import { LogEntry, FullLogEntry } from './output.types';
|
|
4
|
-
import { DebugLogEntry, InfoLogEntry } from './report.types';
|
|
5
|
-
import { LogSeverity } from 'const';
|
|
6
|
-
import { EngineError } from 'entities/EngineError';
|
|
7
|
-
import { WebError } from 'entities/WebError';
|
|
8
|
-
import {} from 'middleware/authHmac/authHmac.types';
|
|
9
|
-
import {} from 'middleware/authJwt/authJwt.types';
|
|
10
|
-
import {} from 'middleware/authTls/authTls.types';
|
|
11
|
-
import {} from 'middleware/authAdmin/authAdmin.types';
|
|
12
|
-
|
|
13
|
-
/** Default generic logger */
|
|
14
|
-
export function reportInfo(data: InfoLogEntry | string): FullLogEntry {
|
|
15
|
-
return output({
|
|
16
|
-
severity: LogSeverity.INFO,
|
|
17
|
-
...(typeof data === 'string' ? { message: data } : data)
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** Error specific logger */
|
|
22
|
-
export function reportError(
|
|
23
|
-
error: unknown | Error | EngineError | WebError,
|
|
24
|
-
request?: Request
|
|
25
|
-
): FullLogEntry {
|
|
26
|
-
let logEntry: LogEntry =
|
|
27
|
-
error instanceof Error
|
|
28
|
-
? {
|
|
29
|
-
message: error.message,
|
|
30
|
-
stack_trace: error.stack,
|
|
31
|
-
severity: LogSeverity.ERROR
|
|
32
|
-
}
|
|
33
|
-
: {
|
|
34
|
-
message: 'An unknown error occurred',
|
|
35
|
-
data: error,
|
|
36
|
-
severity: LogSeverity.CRITICAL
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
if (error instanceof EngineError) {
|
|
40
|
-
logEntry = {
|
|
41
|
-
...logEntry,
|
|
42
|
-
severity: error.severity,
|
|
43
|
-
errorType: error.constructor.name,
|
|
44
|
-
data: error.data,
|
|
45
|
-
'@type':
|
|
46
|
-
!(error instanceof WebError) || error.statusCode >= 500
|
|
47
|
-
? 'type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent'
|
|
48
|
-
: undefined
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
if (error instanceof WebError) {
|
|
53
|
-
logEntry = {
|
|
54
|
-
...logEntry,
|
|
55
|
-
errorCode: error.errorCode,
|
|
56
|
-
statusCode: error.statusCode
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (request) {
|
|
61
|
-
logEntry = {
|
|
62
|
-
...logEntry,
|
|
63
|
-
context: {
|
|
64
|
-
user:
|
|
65
|
-
request.user?.id ?? request.hosts?.join(',') ?? request.admin?.email,
|
|
66
|
-
httpRequest: {
|
|
67
|
-
url: request.originalUrl,
|
|
68
|
-
method: request.method,
|
|
69
|
-
referrer: request.header('Referer'),
|
|
70
|
-
userAgent: request.header('User-Agent'),
|
|
71
|
-
remoteIp: request.ip,
|
|
72
|
-
responseStatusCode:
|
|
73
|
-
error instanceof WebError ? error.statusCode : undefined
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return output(logEntry);
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export let NAMESPACE_SELECTORS: undefined | Array<RegExp>;
|
|
83
|
-
|
|
84
|
-
/** Generate the namespace selectors based on the debug variable */
|
|
85
|
-
function initNamespaceSelector(): void {
|
|
86
|
-
if (process.env.DEBUG)
|
|
87
|
-
NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(
|
|
88
|
-
(namespace) => new RegExp('^' + namespace.replace(/\*/g, '.*?') + '$')
|
|
89
|
-
);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** Reset the namespace selectors */
|
|
93
|
-
export function resetNamespaceSelector(): void {
|
|
94
|
-
NAMESPACE_SELECTORS = undefined;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
let debugNamespace: string | undefined;
|
|
98
|
-
|
|
99
|
-
/** Log a message for debugging purpose, based on a namespace specified in an environment variable */
|
|
100
|
-
export function reportDebug(data: DebugLogEntry): FullLogEntry | undefined {
|
|
101
|
-
if (!NAMESPACE_SELECTORS) initNamespaceSelector();
|
|
102
|
-
let { namespace } = data;
|
|
103
|
-
const isEngineReport = namespace ? namespace.startsWith('engine') : false;
|
|
104
|
-
|
|
105
|
-
if (debugNamespace && !isEngineReport) {
|
|
106
|
-
namespace = debugNamespace + ':' + namespace;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const match =
|
|
110
|
-
namespace &&
|
|
111
|
-
NAMESPACE_SELECTORS &&
|
|
112
|
-
NAMESPACE_SELECTORS.some((selector) => selector.test(namespace));
|
|
113
|
-
if (!match) return;
|
|
114
|
-
|
|
115
|
-
// Generate a prefix with the right most part of the namespace
|
|
116
|
-
const spaces = namespace.split(':');
|
|
117
|
-
const prefix = spaces[spaces.length - 1];
|
|
118
|
-
|
|
119
|
-
return output({
|
|
120
|
-
severity: LogSeverity.DEBUG,
|
|
121
|
-
...data,
|
|
122
|
-
message: `[${prefix}] ${data.message}`
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
/** Specify a global debugging namespace */
|
|
127
|
-
reportDebug.setNameSpace = function (globalNamespace: string): void {
|
|
128
|
-
debugNamespace = globalNamespace;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
/** Remove any defined global namespace */
|
|
132
|
-
reportDebug.clearNamespace = function (): void {
|
|
133
|
-
debugNamespace = undefined;
|
|
134
|
-
};
|
|
1
|
+
import { Request } from 'express';
|
|
2
|
+
import { output } from './output';
|
|
3
|
+
import { LogEntry, FullLogEntry } from './output.types';
|
|
4
|
+
import { DebugLogEntry, InfoLogEntry } from './report.types';
|
|
5
|
+
import { LogSeverity } from 'const';
|
|
6
|
+
import { EngineError } from 'entities/EngineError';
|
|
7
|
+
import { WebError } from 'entities/WebError';
|
|
8
|
+
import {} from 'middleware/authHmac/authHmac.types';
|
|
9
|
+
import {} from 'middleware/authJwt/authJwt.types';
|
|
10
|
+
import {} from 'middleware/authTls/authTls.types';
|
|
11
|
+
import {} from 'middleware/authAdmin/authAdmin.types';
|
|
12
|
+
|
|
13
|
+
/** Default generic logger */
|
|
14
|
+
export function reportInfo(data: InfoLogEntry | string): FullLogEntry {
|
|
15
|
+
return output({
|
|
16
|
+
severity: LogSeverity.INFO,
|
|
17
|
+
...(typeof data === 'string' ? { message: data } : data)
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** Error specific logger */
|
|
22
|
+
export function reportError(
|
|
23
|
+
error: unknown | Error | EngineError | WebError,
|
|
24
|
+
request?: Request
|
|
25
|
+
): FullLogEntry {
|
|
26
|
+
let logEntry: LogEntry =
|
|
27
|
+
error instanceof Error
|
|
28
|
+
? {
|
|
29
|
+
message: error.message,
|
|
30
|
+
stack_trace: error.stack,
|
|
31
|
+
severity: LogSeverity.ERROR
|
|
32
|
+
}
|
|
33
|
+
: {
|
|
34
|
+
message: 'An unknown error occurred',
|
|
35
|
+
data: error,
|
|
36
|
+
severity: LogSeverity.CRITICAL
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
if (error instanceof EngineError) {
|
|
40
|
+
logEntry = {
|
|
41
|
+
...logEntry,
|
|
42
|
+
severity: error.severity,
|
|
43
|
+
errorType: error.constructor.name,
|
|
44
|
+
data: error.data,
|
|
45
|
+
'@type':
|
|
46
|
+
!(error instanceof WebError) || error.statusCode >= 500
|
|
47
|
+
? 'type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent'
|
|
48
|
+
: undefined
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (error instanceof WebError) {
|
|
53
|
+
logEntry = {
|
|
54
|
+
...logEntry,
|
|
55
|
+
errorCode: error.errorCode,
|
|
56
|
+
statusCode: error.statusCode
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (request) {
|
|
61
|
+
logEntry = {
|
|
62
|
+
...logEntry,
|
|
63
|
+
context: {
|
|
64
|
+
user:
|
|
65
|
+
request.user?.id ?? request.hosts?.join(',') ?? request.admin?.email,
|
|
66
|
+
httpRequest: {
|
|
67
|
+
url: request.originalUrl,
|
|
68
|
+
method: request.method,
|
|
69
|
+
referrer: request.header('Referer'),
|
|
70
|
+
userAgent: request.header('User-Agent'),
|
|
71
|
+
remoteIp: request.ip,
|
|
72
|
+
responseStatusCode:
|
|
73
|
+
error instanceof WebError ? error.statusCode : undefined
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return output(logEntry);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export let NAMESPACE_SELECTORS: undefined | Array<RegExp>;
|
|
83
|
+
|
|
84
|
+
/** Generate the namespace selectors based on the debug variable */
|
|
85
|
+
function initNamespaceSelector(): void {
|
|
86
|
+
if (process.env.DEBUG)
|
|
87
|
+
NAMESPACE_SELECTORS = process.env.DEBUG.split(',').map(
|
|
88
|
+
(namespace) => new RegExp('^' + namespace.replace(/\*/g, '.*?') + '$')
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Reset the namespace selectors */
|
|
93
|
+
export function resetNamespaceSelector(): void {
|
|
94
|
+
NAMESPACE_SELECTORS = undefined;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let debugNamespace: string | undefined;
|
|
98
|
+
|
|
99
|
+
/** Log a message for debugging purpose, based on a namespace specified in an environment variable */
|
|
100
|
+
export function reportDebug(data: DebugLogEntry): FullLogEntry | undefined {
|
|
101
|
+
if (!NAMESPACE_SELECTORS) initNamespaceSelector();
|
|
102
|
+
let { namespace } = data;
|
|
103
|
+
const isEngineReport = namespace ? namespace.startsWith('engine') : false;
|
|
104
|
+
|
|
105
|
+
if (debugNamespace && !isEngineReport) {
|
|
106
|
+
namespace = debugNamespace + ':' + namespace;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const match =
|
|
110
|
+
namespace &&
|
|
111
|
+
NAMESPACE_SELECTORS &&
|
|
112
|
+
NAMESPACE_SELECTORS.some((selector) => selector.test(namespace));
|
|
113
|
+
if (!match) return;
|
|
114
|
+
|
|
115
|
+
// Generate a prefix with the right most part of the namespace
|
|
116
|
+
const spaces = namespace.split(':');
|
|
117
|
+
const prefix = spaces[spaces.length - 1];
|
|
118
|
+
|
|
119
|
+
return output({
|
|
120
|
+
severity: LogSeverity.DEBUG,
|
|
121
|
+
...data,
|
|
122
|
+
message: `[${prefix}] ${data.message}`
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/** Specify a global debugging namespace */
|
|
127
|
+
reportDebug.setNameSpace = function (globalNamespace: string): void {
|
|
128
|
+
debugNamespace = globalNamespace;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/** Remove any defined global namespace */
|
|
132
|
+
reportDebug.clearNamespace = function (): void {
|
|
133
|
+
debugNamespace = undefined;
|
|
134
|
+
};
|