node-server-engine 1.1.2 → 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.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 +32 -32
- package/src/middleware/error/error.test.ts +60 -60
- package/src/middleware/error/error.ts +25 -25
- package/src/middleware/error/index.ts +1 -1
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
- package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
- package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
- package/src/middleware/fileUploader/fileUploader.ts +303 -303
- package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
- package/src/middleware/fileUploader/index.ts +2 -2
- package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
- package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
- package/src/middleware/fileUploader/validate/index.ts +1 -1
- package/src/middleware/fileUploader/validate/validate.ts +27 -27
- package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
- package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
- package/src/middleware/fourOhFour/index.ts +1 -1
- package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
- package/src/middleware/geminiFileUploader/index.ts +1 -1
- package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
- package/src/middleware/healthCheck/healthCheck.ts +14 -14
- package/src/middleware/healthCheck/index.ts +1 -1
- package/src/middleware/index.ts +17 -17
- package/src/middleware/metrics/index.ts +1 -1
- package/src/middleware/metrics/metrics.test.ts +46 -46
- package/src/middleware/metrics/metrics.ts +24 -24
- package/src/middleware/requestMetrics/index.ts +1 -1
- package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
- package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
- package/src/middleware/swaggerDocs/index.ts +2 -2
- package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
- package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
- package/src/middleware/userResolver/index.ts +1 -1
- package/src/middleware/userResolver/userResolver.test.ts +35 -35
- package/src/middleware/userResolver/userResolver.ts +35 -35
- package/src/middleware/validate/index.ts +1 -1
- package/src/middleware/validate/validate.test.ts +43 -43
- package/src/middleware/validate/validate.ts +25 -25
- package/src/middleware/version/index.ts +1 -1
- package/src/middleware/version/version.test.ts +23 -23
- package/src/middleware/version/version.ts +12 -12
- package/src/utils/checkEnvironment/index.ts +49 -49
- package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
- package/src/utils/createHttpServer/createHttpServer.ts +34 -34
- package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
- package/src/utils/createHttpServer/index.ts +1 -1
- package/src/utils/createSortedObject/createSortedObject.ts +20 -20
- package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
- package/src/utils/createSortedObject/index.ts +1 -1
- package/src/utils/dbMigration/dbMigration.test.ts +209 -209
- package/src/utils/dbMigration/dbMigration.ts +199 -199
- package/src/utils/dbMigration/dbMigration.types.ts +11 -11
- package/src/utils/dbMigration/index.ts +2 -2
- package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -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,102 +1,102 @@
|
|
|
1
|
-
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
-
import {
|
|
3
|
-
Subscription,
|
|
4
|
-
PubSub,
|
|
5
|
-
Attributes,
|
|
6
|
-
Message
|
|
7
|
-
} from '@google-cloud/pubsub';
|
|
8
|
-
import { expect } from 'chai';
|
|
9
|
-
import { faker } from '@faker-js/faker';
|
|
10
|
-
import { fake, SinonSpy } from 'sinon';
|
|
11
|
-
import { handleMessage } from './handleMessage';
|
|
12
|
-
|
|
13
|
-
describe('Entities - Pub/Sub - Handle Message', () => {
|
|
14
|
-
let subscription: Subscription;
|
|
15
|
-
let payload: Record<string, unknown>;
|
|
16
|
-
let attributes: Attributes;
|
|
17
|
-
let ack: SinonSpy;
|
|
18
|
-
let message: Message;
|
|
19
|
-
let publishTime: PreciseDate;
|
|
20
|
-
|
|
21
|
-
beforeEach(() => {
|
|
22
|
-
subscription = new Subscription(new PubSub(), faker.lorem.slug());
|
|
23
|
-
|
|
24
|
-
payload = { [faker.lorem.word()]: faker.lorem.word() };
|
|
25
|
-
|
|
26
|
-
attributes = { [faker.lorem.word()]: faker.lorem.word() };
|
|
27
|
-
const data = Buffer.from(JSON.stringify(payload));
|
|
28
|
-
|
|
29
|
-
publishTime = new PreciseDate(faker.date.recent());
|
|
30
|
-
|
|
31
|
-
ack = fake();
|
|
32
|
-
message = {
|
|
33
|
-
id: faker.string.uuid(),
|
|
34
|
-
ack,
|
|
35
|
-
ackId: faker.string.uuid(),
|
|
36
|
-
data,
|
|
37
|
-
attributes,
|
|
38
|
-
publishTime,
|
|
39
|
-
deliveryAttempt: 0,
|
|
40
|
-
received: 0
|
|
41
|
-
} as unknown as Message;
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it('should parse the message and forward it to all the handlers', async () => {
|
|
45
|
-
const handlers = [fake(), fake(), fake()];
|
|
46
|
-
|
|
47
|
-
await handleMessage(message, subscription, handlers);
|
|
48
|
-
|
|
49
|
-
for (const handler of handlers) {
|
|
50
|
-
expect(handler).to.have.been.calledOnceWithExactly(
|
|
51
|
-
payload,
|
|
52
|
-
attributes,
|
|
53
|
-
publishTime
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('should parse a debezium message [create]', async () => {
|
|
59
|
-
const handler = fake();
|
|
60
|
-
payload = { before: null, after: { a: 'a', b: 'b', c: 'c' } };
|
|
61
|
-
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
62
|
-
|
|
63
|
-
await handleMessage(message, subscription, [handler], true);
|
|
64
|
-
|
|
65
|
-
expect(handler).to.have.been.calledOnceWithExactly(
|
|
66
|
-
{ ...payload, diff: ['a', 'b', 'c'] },
|
|
67
|
-
attributes,
|
|
68
|
-
publishTime
|
|
69
|
-
);
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
it('should parse a debezium message [destroy]', async () => {
|
|
73
|
-
const handler = fake();
|
|
74
|
-
payload = { before: { a: 'a', b: 'b', c: 'c' }, after: null };
|
|
75
|
-
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
76
|
-
|
|
77
|
-
await handleMessage(message, subscription, [handler], true);
|
|
78
|
-
|
|
79
|
-
expect(handler).to.have.been.calledOnceWithExactly(
|
|
80
|
-
{ ...payload, diff: ['a', 'b', 'c'] },
|
|
81
|
-
attributes,
|
|
82
|
-
publishTime
|
|
83
|
-
);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should parse a debezium message [update]', async () => {
|
|
87
|
-
const handler = fake();
|
|
88
|
-
payload = {
|
|
89
|
-
before: { a: 'a', b: 'b', c: 'c' },
|
|
90
|
-
after: { a: 'a', b: 'y', c: 'c' }
|
|
91
|
-
};
|
|
92
|
-
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
93
|
-
|
|
94
|
-
await handleMessage(message, subscription, [handler], true);
|
|
95
|
-
|
|
96
|
-
expect(handler).to.have.been.calledOnceWithExactly(
|
|
97
|
-
{ ...payload, diff: ['b'] },
|
|
98
|
-
attributes,
|
|
99
|
-
publishTime
|
|
100
|
-
);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
1
|
+
import { PreciseDate } from '@google-cloud/precise-date';
|
|
2
|
+
import {
|
|
3
|
+
Subscription,
|
|
4
|
+
PubSub,
|
|
5
|
+
Attributes,
|
|
6
|
+
Message
|
|
7
|
+
} from '@google-cloud/pubsub';
|
|
8
|
+
import { expect } from 'chai';
|
|
9
|
+
import { faker } from '@faker-js/faker';
|
|
10
|
+
import { fake, SinonSpy } from 'sinon';
|
|
11
|
+
import { handleMessage } from './handleMessage';
|
|
12
|
+
|
|
13
|
+
describe('Entities - Pub/Sub - Handle Message', () => {
|
|
14
|
+
let subscription: Subscription;
|
|
15
|
+
let payload: Record<string, unknown>;
|
|
16
|
+
let attributes: Attributes;
|
|
17
|
+
let ack: SinonSpy;
|
|
18
|
+
let message: Message;
|
|
19
|
+
let publishTime: PreciseDate;
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
subscription = new Subscription(new PubSub(), faker.lorem.slug());
|
|
23
|
+
|
|
24
|
+
payload = { [faker.lorem.word()]: faker.lorem.word() };
|
|
25
|
+
|
|
26
|
+
attributes = { [faker.lorem.word()]: faker.lorem.word() };
|
|
27
|
+
const data = Buffer.from(JSON.stringify(payload));
|
|
28
|
+
|
|
29
|
+
publishTime = new PreciseDate(faker.date.recent());
|
|
30
|
+
|
|
31
|
+
ack = fake();
|
|
32
|
+
message = {
|
|
33
|
+
id: faker.string.uuid(),
|
|
34
|
+
ack,
|
|
35
|
+
ackId: faker.string.uuid(),
|
|
36
|
+
data,
|
|
37
|
+
attributes,
|
|
38
|
+
publishTime,
|
|
39
|
+
deliveryAttempt: 0,
|
|
40
|
+
received: 0
|
|
41
|
+
} as unknown as Message;
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should parse the message and forward it to all the handlers', async () => {
|
|
45
|
+
const handlers = [fake(), fake(), fake()];
|
|
46
|
+
|
|
47
|
+
await handleMessage(message, subscription, handlers);
|
|
48
|
+
|
|
49
|
+
for (const handler of handlers) {
|
|
50
|
+
expect(handler).to.have.been.calledOnceWithExactly(
|
|
51
|
+
payload,
|
|
52
|
+
attributes,
|
|
53
|
+
publishTime
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('should parse a debezium message [create]', async () => {
|
|
59
|
+
const handler = fake();
|
|
60
|
+
payload = { before: null, after: { a: 'a', b: 'b', c: 'c' } };
|
|
61
|
+
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
62
|
+
|
|
63
|
+
await handleMessage(message, subscription, [handler], true);
|
|
64
|
+
|
|
65
|
+
expect(handler).to.have.been.calledOnceWithExactly(
|
|
66
|
+
{ ...payload, diff: ['a', 'b', 'c'] },
|
|
67
|
+
attributes,
|
|
68
|
+
publishTime
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should parse a debezium message [destroy]', async () => {
|
|
73
|
+
const handler = fake();
|
|
74
|
+
payload = { before: { a: 'a', b: 'b', c: 'c' }, after: null };
|
|
75
|
+
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
76
|
+
|
|
77
|
+
await handleMessage(message, subscription, [handler], true);
|
|
78
|
+
|
|
79
|
+
expect(handler).to.have.been.calledOnceWithExactly(
|
|
80
|
+
{ ...payload, diff: ['a', 'b', 'c'] },
|
|
81
|
+
attributes,
|
|
82
|
+
publishTime
|
|
83
|
+
);
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('should parse a debezium message [update]', async () => {
|
|
87
|
+
const handler = fake();
|
|
88
|
+
payload = {
|
|
89
|
+
before: { a: 'a', b: 'b', c: 'c' },
|
|
90
|
+
after: { a: 'a', b: 'y', c: 'c' }
|
|
91
|
+
};
|
|
92
|
+
message.data = Buffer.from(JSON.stringify(payload), 'utf-8');
|
|
93
|
+
|
|
94
|
+
await handleMessage(message, subscription, [handler], true);
|
|
95
|
+
|
|
96
|
+
expect(handler).to.have.been.calledOnceWithExactly(
|
|
97
|
+
{ ...payload, diff: ['b'] },
|
|
98
|
+
attributes,
|
|
99
|
+
publishTime
|
|
100
|
+
);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
import { Subscription, Message } from '@google-cloud/pubsub';
|
|
2
|
-
import { PubSubMessageHandler, PubSubDebeziumPayload } from '../PubSub.types';
|
|
3
|
-
import { LogSeverity } from 'const';
|
|
4
|
-
import { EngineError } from 'entities/EngineError';
|
|
5
|
-
import { reportDebug, reportError } from 'utils';
|
|
6
|
-
|
|
7
|
-
const namespace = 'engine:PubSub:handleMessage';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* handle the pubSubClients on message event
|
|
11
|
-
* @param message - Message to parse and handle
|
|
12
|
-
* @param subscription - The related Pub/Sub subscription object
|
|
13
|
-
* @param handlers - Message handlers
|
|
14
|
-
* @param isDebezium - Indicates that the subscription from Debezium events
|
|
15
|
-
*/
|
|
16
|
-
export async function handleMessage(
|
|
17
|
-
message: Message,
|
|
18
|
-
subscription: Subscription,
|
|
19
|
-
handlers: Array<PubSubMessageHandler<unknown>>,
|
|
20
|
-
isDebezium = false
|
|
21
|
-
): Promise<void> {
|
|
22
|
-
reportDebug({
|
|
23
|
-
namespace,
|
|
24
|
-
message: `Received message from Pub/Sub [${subscription.name}]`
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
message.ack();
|
|
28
|
-
|
|
29
|
-
let payload;
|
|
30
|
-
try {
|
|
31
|
-
payload = JSON.parse(message.data.toString()) as unknown;
|
|
32
|
-
|
|
33
|
-
// When handling Debezium message, we calculate automatically the keys that have changed between the previous and current state
|
|
34
|
-
if (isDebezium) {
|
|
35
|
-
payload = payload as PubSubDebeziumPayload<Record<string, unknown>>;
|
|
36
|
-
const { before, after } = payload;
|
|
37
|
-
if (before && after)
|
|
38
|
-
payload.diff = Object.keys(after).filter(
|
|
39
|
-
(key) => after[key] !== before[key]
|
|
40
|
-
);
|
|
41
|
-
else if (before) payload.diff = Object.keys(before);
|
|
42
|
-
else if (after) payload.diff = Object.keys(after);
|
|
43
|
-
else
|
|
44
|
-
throw new EngineError({
|
|
45
|
-
severity: LogSeverity.WARNING,
|
|
46
|
-
message: `Debezium Pub/Sub message did not include before nor after value [${subscription.name}]`,
|
|
47
|
-
data: { subscription, message: message.data.toString() }
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
} catch {
|
|
51
|
-
throw new EngineError({
|
|
52
|
-
severity: LogSeverity.WARNING,
|
|
53
|
-
message: `Pub/Sub message is not valid JSON ${subscription.name}`,
|
|
54
|
-
data: { subscription, message: message.data.toString() }
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
for (const handler of handlers) {
|
|
59
|
-
try {
|
|
60
|
-
await handler(payload, message.attributes, message.publishTime);
|
|
61
|
-
} catch (error) {
|
|
62
|
-
reportError(error);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
1
|
+
import { Subscription, Message } from '@google-cloud/pubsub';
|
|
2
|
+
import { PubSubMessageHandler, PubSubDebeziumPayload } from '../PubSub.types';
|
|
3
|
+
import { LogSeverity } from 'const';
|
|
4
|
+
import { EngineError } from 'entities/EngineError';
|
|
5
|
+
import { reportDebug, reportError } from 'utils';
|
|
6
|
+
|
|
7
|
+
const namespace = 'engine:PubSub:handleMessage';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* handle the pubSubClients on message event
|
|
11
|
+
* @param message - Message to parse and handle
|
|
12
|
+
* @param subscription - The related Pub/Sub subscription object
|
|
13
|
+
* @param handlers - Message handlers
|
|
14
|
+
* @param isDebezium - Indicates that the subscription from Debezium events
|
|
15
|
+
*/
|
|
16
|
+
export async function handleMessage(
|
|
17
|
+
message: Message,
|
|
18
|
+
subscription: Subscription,
|
|
19
|
+
handlers: Array<PubSubMessageHandler<unknown>>,
|
|
20
|
+
isDebezium = false
|
|
21
|
+
): Promise<void> {
|
|
22
|
+
reportDebug({
|
|
23
|
+
namespace,
|
|
24
|
+
message: `Received message from Pub/Sub [${subscription.name}]`
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
message.ack();
|
|
28
|
+
|
|
29
|
+
let payload;
|
|
30
|
+
try {
|
|
31
|
+
payload = JSON.parse(message.data.toString()) as unknown;
|
|
32
|
+
|
|
33
|
+
// When handling Debezium message, we calculate automatically the keys that have changed between the previous and current state
|
|
34
|
+
if (isDebezium) {
|
|
35
|
+
payload = payload as PubSubDebeziumPayload<Record<string, unknown>>;
|
|
36
|
+
const { before, after } = payload;
|
|
37
|
+
if (before && after)
|
|
38
|
+
payload.diff = Object.keys(after).filter(
|
|
39
|
+
(key) => after[key] !== before[key]
|
|
40
|
+
);
|
|
41
|
+
else if (before) payload.diff = Object.keys(before);
|
|
42
|
+
else if (after) payload.diff = Object.keys(after);
|
|
43
|
+
else
|
|
44
|
+
throw new EngineError({
|
|
45
|
+
severity: LogSeverity.WARNING,
|
|
46
|
+
message: `Debezium Pub/Sub message did not include before nor after value [${subscription.name}]`,
|
|
47
|
+
data: { subscription, message: message.data.toString() }
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
} catch {
|
|
51
|
+
throw new EngineError({
|
|
52
|
+
severity: LogSeverity.WARNING,
|
|
53
|
+
message: `Pub/Sub message is not valid JSON ${subscription.name}`,
|
|
54
|
+
data: { subscription, message: message.data.toString() }
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
for (const handler of handlers) {
|
|
59
|
+
try {
|
|
60
|
+
await handler(payload, message.attributes, message.publishTime);
|
|
61
|
+
} catch (error) {
|
|
62
|
+
reportError(error);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './handleMessage';
|
|
1
|
+
export * from './handleMessage';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './PubSub';
|
|
2
|
-
export * from './PubSub.types';
|
|
1
|
+
export * from './PubSub';
|
|
2
|
+
export * from './PubSub.types';
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import { faker } from '@faker-js/faker';
|
|
3
|
-
import { stub, SinonStub } from 'sinon';
|
|
4
|
-
import { PushNotification } from './PushNotification';
|
|
5
|
-
import { PushNotificationNotification } from './PushNotification.types';
|
|
6
|
-
import { PubSub } from 'entities/PubSub/PubSub';
|
|
7
|
-
|
|
8
|
-
describe('Entities - PushNotification', function () {
|
|
9
|
-
let notification: PushNotificationNotification;
|
|
10
|
-
let publishStub: SinonStub;
|
|
11
|
-
let userId: string;
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
process.env.CHART = 'test';
|
|
15
|
-
process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC = 'notification_queue';
|
|
16
|
-
userId = faker.string.uuid();
|
|
17
|
-
notification = {
|
|
18
|
-
title: faker.lorem.word(),
|
|
19
|
-
body: faker.lorem.word()
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
publishStub = stub(PubSub, 'publish');
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
it('should send push notification to the user', async () => {
|
|
26
|
-
await PushNotification.sendPush(userId, notification);
|
|
27
|
-
expect(publishStub).to.have.been.calledOnceWithExactly(
|
|
28
|
-
'notification_queue',
|
|
29
|
-
{
|
|
30
|
-
...notification,
|
|
31
|
-
userId
|
|
32
|
-
}
|
|
33
|
-
);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import { faker } from '@faker-js/faker';
|
|
3
|
+
import { stub, SinonStub } from 'sinon';
|
|
4
|
+
import { PushNotification } from './PushNotification';
|
|
5
|
+
import { PushNotificationNotification } from './PushNotification.types';
|
|
6
|
+
import { PubSub } from 'entities/PubSub/PubSub';
|
|
7
|
+
|
|
8
|
+
describe('Entities - PushNotification', function () {
|
|
9
|
+
let notification: PushNotificationNotification;
|
|
10
|
+
let publishStub: SinonStub;
|
|
11
|
+
let userId: string;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
process.env.CHART = 'test';
|
|
15
|
+
process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC = 'notification_queue';
|
|
16
|
+
userId = faker.string.uuid();
|
|
17
|
+
notification = {
|
|
18
|
+
title: faker.lorem.word(),
|
|
19
|
+
body: faker.lorem.word()
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
publishStub = stub(PubSub, 'publish');
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('should send push notification to the user', async () => {
|
|
26
|
+
await PushNotification.sendPush(userId, notification);
|
|
27
|
+
expect(publishStub).to.have.been.calledOnceWithExactly(
|
|
28
|
+
'notification_queue',
|
|
29
|
+
{
|
|
30
|
+
...notification,
|
|
31
|
+
userId
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import { PushNotificationNotification } from './PushNotification.types';
|
|
2
|
-
import { EngineError } from 'entities';
|
|
3
|
-
import { PubSub } from 'entities/PubSub';
|
|
4
|
-
import { reportDebug } from 'utils';
|
|
5
|
-
|
|
6
|
-
const namespace = 'engine:PushNotification';
|
|
7
|
-
|
|
8
|
-
export const PushNotification = {
|
|
9
|
-
/** Initialize the push notification entity */
|
|
10
|
-
init(): void {
|
|
11
|
-
reportDebug({ namespace, message: 'Initializing PushNotification' });
|
|
12
|
-
if (!process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC)
|
|
13
|
-
throw new EngineError({
|
|
14
|
-
message:
|
|
15
|
-
'Environment variable PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC is not defined'
|
|
16
|
-
});
|
|
17
|
-
// Register publisher
|
|
18
|
-
PubSub.addPublisher(process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC);
|
|
19
|
-
},
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Send a push notification through the push service
|
|
23
|
-
* @param userId - ID of the user that should receive the notification
|
|
24
|
-
* @param notification - Notification that should be sent
|
|
25
|
-
*/
|
|
26
|
-
async sendPush(
|
|
27
|
-
userId: string,
|
|
28
|
-
notification: PushNotificationNotification
|
|
29
|
-
): Promise<void> {
|
|
30
|
-
reportDebug({
|
|
31
|
-
namespace,
|
|
32
|
-
message: `Received data to send notification to user with Id '${userId}'`,
|
|
33
|
-
data: { userId, notification }
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
await PubSub.publish(
|
|
37
|
-
process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC as string,
|
|
38
|
-
{
|
|
39
|
-
...notification,
|
|
40
|
-
userId
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
};
|
|
1
|
+
import { PushNotificationNotification } from './PushNotification.types';
|
|
2
|
+
import { EngineError } from 'entities';
|
|
3
|
+
import { PubSub } from 'entities/PubSub';
|
|
4
|
+
import { reportDebug } from 'utils';
|
|
5
|
+
|
|
6
|
+
const namespace = 'engine:PushNotification';
|
|
7
|
+
|
|
8
|
+
export const PushNotification = {
|
|
9
|
+
/** Initialize the push notification entity */
|
|
10
|
+
init(): void {
|
|
11
|
+
reportDebug({ namespace, message: 'Initializing PushNotification' });
|
|
12
|
+
if (!process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC)
|
|
13
|
+
throw new EngineError({
|
|
14
|
+
message:
|
|
15
|
+
'Environment variable PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC is not defined'
|
|
16
|
+
});
|
|
17
|
+
// Register publisher
|
|
18
|
+
PubSub.addPublisher(process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC);
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Send a push notification through the push service
|
|
23
|
+
* @param userId - ID of the user that should receive the notification
|
|
24
|
+
* @param notification - Notification that should be sent
|
|
25
|
+
*/
|
|
26
|
+
async sendPush(
|
|
27
|
+
userId: string,
|
|
28
|
+
notification: PushNotificationNotification
|
|
29
|
+
): Promise<void> {
|
|
30
|
+
reportDebug({
|
|
31
|
+
namespace,
|
|
32
|
+
message: `Received data to send notification to user with Id '${userId}'`,
|
|
33
|
+
data: { userId, notification }
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
await PubSub.publish(
|
|
37
|
+
process.env.PUBSUB_PUSH_NOTIFICATION_QUEUE_TOPIC as string,
|
|
38
|
+
{
|
|
39
|
+
...notification,
|
|
40
|
+
userId
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
/** Notification to send to the user's device */
|
|
2
|
-
export interface PushNotificationNotification {
|
|
3
|
-
/** Title of the notification */
|
|
4
|
-
title?: string;
|
|
5
|
-
/** Body of the notification */
|
|
6
|
-
body?: string;
|
|
7
|
-
/** Data payload of the notification */
|
|
8
|
-
payload?: unknown;
|
|
9
|
-
/** Indicates that the notification is a VOIP notification */
|
|
10
|
-
voip?: boolean;
|
|
11
|
-
/** Indicate that it is a background notification (data only, low priority) */
|
|
12
|
-
background?: boolean;
|
|
13
|
-
/** Push token can be specified here is we want to send to a given user */
|
|
14
|
-
token?: string;
|
|
15
|
-
/** Indicates that the data content can be mutated by the client (iOS) */
|
|
16
|
-
mutable?: boolean;
|
|
17
|
-
/** Indicates that the notification requires some client side processing to be displayed (iOS) */
|
|
18
|
-
contentAvailable?: boolean;
|
|
19
|
-
/** Time to live of the notification in seconds. After this the notification will not be distributed */
|
|
20
|
-
ttl?: number;
|
|
21
|
-
/** Indicate that it is a high priority notification */
|
|
22
|
-
priority?: boolean;
|
|
23
|
-
/** Notifications with the same string here will be collapsed in the system tray */
|
|
24
|
-
collapseId?: string;
|
|
25
|
-
}
|
|
1
|
+
/** Notification to send to the user's device */
|
|
2
|
+
export interface PushNotificationNotification {
|
|
3
|
+
/** Title of the notification */
|
|
4
|
+
title?: string;
|
|
5
|
+
/** Body of the notification */
|
|
6
|
+
body?: string;
|
|
7
|
+
/** Data payload of the notification */
|
|
8
|
+
payload?: unknown;
|
|
9
|
+
/** Indicates that the notification is a VOIP notification */
|
|
10
|
+
voip?: boolean;
|
|
11
|
+
/** Indicate that it is a background notification (data only, low priority) */
|
|
12
|
+
background?: boolean;
|
|
13
|
+
/** Push token can be specified here is we want to send to a given user */
|
|
14
|
+
token?: string;
|
|
15
|
+
/** Indicates that the data content can be mutated by the client (iOS) */
|
|
16
|
+
mutable?: boolean;
|
|
17
|
+
/** Indicates that the notification requires some client side processing to be displayed (iOS) */
|
|
18
|
+
contentAvailable?: boolean;
|
|
19
|
+
/** Time to live of the notification in seconds. After this the notification will not be distributed */
|
|
20
|
+
ttl?: number;
|
|
21
|
+
/** Indicate that it is a high priority notification */
|
|
22
|
+
priority?: boolean;
|
|
23
|
+
/** Notifications with the same string here will be collapsed in the system tray */
|
|
24
|
+
collapseId?: string;
|
|
25
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './PushNotification';
|
|
2
|
-
export * from './PushNotification.types';
|
|
1
|
+
export * from './PushNotification';
|
|
2
|
+
export * from './PushNotification.types';
|