node-server-engine 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +193 -193
- package/.mocharc.js +13 -13
- package/.nycrc +18 -18
- package/.prettierrc +7 -7
- package/Dockerfile +30 -30
- package/README.md +991 -991
- package/babel.config.json +34 -35
- package/dist/const/DebeziumEvent.js.map +1 -1
- package/dist/const/LogSeverity.js.map +1 -1
- package/dist/const/index.js.map +1 -1
- package/dist/const/metrics.js.map +1 -1
- package/dist/const/mime.js.map +1 -1
- package/dist/const/tokenIssuer.js.map +1 -1
- package/dist/db/migrations/20241030121500-create-sequelize-meta-table.js.map +1 -1
- package/dist/db/models/SequelizeMeta.js +1 -0
- package/dist/db/models/SequelizeMeta.js.map +1 -1
- package/dist/db/models/index.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.js +7 -7
- package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.types.js.map +1 -1
- package/dist/entities/ElasticSearch/index.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.js +18 -17
- package/dist/entities/Endpoint/Endpoint.js.map +1 -1
- package/dist/entities/Endpoint/Endpoint.types.js.map +1 -1
- package/dist/entities/Endpoint/index.js.map +1 -1
- package/dist/entities/EngineError/EngineError.js +7 -6
- package/dist/entities/EngineError/EngineError.js.map +1 -1
- package/dist/entities/EngineError/EngineError.types.js.map +1 -1
- package/dist/entities/EngineError/index.js.map +1 -1
- package/dist/entities/KeySet/KeySet.js +10 -9
- package/dist/entities/KeySet/KeySet.js.map +1 -1
- package/dist/entities/KeySet/KeySet.types.js.map +1 -1
- package/dist/entities/KeySet/index.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.js.map +1 -1
- package/dist/entities/LifecycleController/LifecycleController.types.js.map +1 -1
- package/dist/entities/LifecycleController/index.js.map +1 -1
- package/dist/entities/Localizator/Localizator.js +7 -7
- package/dist/entities/Localizator/Localizator.js.map +1 -1
- package/dist/entities/Localizator/Localizator.types.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/guessNamingConvention.js.map +1 -1
- package/dist/entities/Localizator/guessNamingConvention/index.js.map +1 -1
- package/dist/entities/Localizator/index.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.js +7 -6
- package/dist/entities/MessageHandler/MessageHandler.js.map +1 -1
- package/dist/entities/MessageHandler/MessageHandler.types.js.map +1 -1
- package/dist/entities/MessageHandler/index.js.map +1 -1
- package/dist/entities/PubSub/PubSub.js +25 -25
- package/dist/entities/PubSub/PubSub.js.map +1 -1
- package/dist/entities/PubSub/PubSub.types.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/handleMessage.js +6 -6
- package/dist/entities/PubSub/handleMessage/handleMessage.js.map +1 -1
- package/dist/entities/PubSub/handleMessage/index.js.map +1 -1
- package/dist/entities/PubSub/index.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.js +4 -4
- package/dist/entities/PushNotification/PushNotification.js.map +1 -1
- package/dist/entities/PushNotification/PushNotification.types.js.map +1 -1
- package/dist/entities/PushNotification/index.js.map +1 -1
- package/dist/entities/Redis/Redis.js +8 -8
- package/dist/entities/Redis/Redis.js.map +1 -1
- package/dist/entities/Redis/Redis.types.js.map +1 -1
- package/dist/entities/Redis/Redis.validate.js +2 -2
- package/dist/entities/Redis/Redis.validate.js.map +1 -1
- package/dist/entities/Redis/index.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.config.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.js +2 -2
- package/dist/entities/Sequelize/Sequelize.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.types.js.map +1 -1
- package/dist/entities/Sequelize/Sequelize.validate.js +2 -2
- package/dist/entities/Sequelize/Sequelize.validate.js.map +1 -1
- package/dist/entities/Sequelize/index.js.map +1 -1
- package/dist/entities/Server/Server.const.js.map +1 -1
- package/dist/entities/Server/Server.js +18 -17
- package/dist/entities/Server/Server.js.map +1 -1
- package/dist/entities/Server/Server.types.js.map +1 -1
- package/dist/entities/Server/index.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.js +33 -32
- package/dist/entities/SocketClient/SocketClient.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.types.js.map +1 -1
- package/dist/entities/SocketClient/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/index.js.map +1 -1
- package/dist/entities/SocketClient/parseMessage/parseMessage.js +2 -2
- package/dist/entities/SocketClient/parseMessage/parseMessage.js.map +1 -1
- package/dist/entities/Storage/Storage.js +20 -20
- package/dist/entities/Storage/Storage.js.map +1 -1
- package/dist/entities/Storage/Storage.types.js.map +1 -1
- package/dist/entities/Storage/index.js.map +1 -1
- package/dist/entities/ValidationError/ValidationError.js.map +1 -1
- package/dist/entities/ValidationError/index.js.map +1 -1
- package/dist/entities/WebError/WebError.js +7 -6
- package/dist/entities/WebError/WebError.js.map +1 -1
- package/dist/entities/WebError/WebError.types.js.map +1 -1
- package/dist/entities/WebError/index.js.map +1 -1
- package/dist/entities/index.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metrics/debug.js.map +1 -1
- package/dist/metrics/index.js.map +1 -1
- package/dist/metrics/request.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.js.map +1 -1
- package/dist/middleware/authAdmin/authAdmin.types.js.map +1 -1
- package/dist/middleware/authAdmin/index.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.js.map +1 -1
- package/dist/middleware/authHmac/authHmac.types.js.map +1 -1
- package/dist/middleware/authHmac/index.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.js.map +1 -1
- package/dist/middleware/authJwt/authJwt.types.js.map +1 -1
- package/dist/middleware/authJwt/index.js.map +1 -1
- package/dist/middleware/authStatic/authStatic.js +3 -3
- package/dist/middleware/authStatic/authStatic.js.map +1 -1
- package/dist/middleware/authStatic/index.js.map +1 -1
- package/dist/middleware/authTls/authTls.js +8 -8
- package/dist/middleware/authTls/authTls.js.map +1 -1
- package/dist/middleware/authTls/authTls.types.js.map +1 -1
- package/dist/middleware/authTls/index.js.map +1 -1
- package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
- package/dist/middleware/error/error.js.map +1 -1
- package/dist/middleware/error/index.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js +2 -2
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/compressAvatar.types.js.map +1 -1
- package/dist/middleware/fileUploader/compressAvatar/index.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.js +12 -12
- package/dist/middleware/fileUploader/fileUploader.js.map +1 -1
- package/dist/middleware/fileUploader/fileUploader.types.js.map +1 -1
- package/dist/middleware/fileUploader/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/index.js.map +1 -1
- package/dist/middleware/fileUploader/isMultiPart/isMultipart.js.map +1 -1
- package/dist/middleware/fileUploader/validate/index.js.map +1 -1
- package/dist/middleware/fileUploader/validate/validate.js.map +1 -1
- package/dist/middleware/fourOhFour/fourOhFour.js.map +1 -1
- package/dist/middleware/fourOhFour/index.js.map +1 -1
- package/dist/middleware/geminiFileUploader/geminiFileUploader.js.map +1 -1
- package/dist/middleware/geminiFileUploader/index.js.map +1 -1
- package/dist/middleware/healthCheck/healthCheck.js +2 -2
- package/dist/middleware/healthCheck/healthCheck.js.map +1 -1
- package/dist/middleware/healthCheck/index.js.map +1 -1
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/metrics/index.js.map +1 -1
- package/dist/middleware/metrics/metrics.js.map +1 -1
- package/dist/middleware/requestMetrics/index.js.map +1 -1
- package/dist/middleware/requestMetrics/requestMetrics.js.map +1 -1
- package/dist/middleware/swaggerDocs/index.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.js +7 -7
- package/dist/middleware/swaggerDocs/swaggerDocs.js.map +1 -1
- package/dist/middleware/swaggerDocs/swaggerDocs.types.js.map +1 -1
- package/dist/middleware/userResolver/index.js.map +1 -1
- package/dist/middleware/userResolver/userResolver.js.map +1 -1
- package/dist/middleware/validate/index.js.map +1 -1
- package/dist/middleware/validate/validate.js.map +1 -1
- package/dist/middleware/version/index.js.map +1 -1
- package/dist/middleware/version/version.js +3 -3
- package/dist/middleware/version/version.js.map +1 -1
- package/dist/utils/checkEnvironment/index.js +13 -13
- package/dist/utils/checkEnvironment/index.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.validate.js +2 -2
- package/dist/utils/createHttpServer/createHttpServer.validate.js.map +1 -1
- package/dist/utils/createHttpServer/index.js.map +1 -1
- package/dist/utils/createSortedObject/createSortedObject.js.map +1 -1
- package/dist/utils/createSortedObject/index.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.js +8 -8
- package/dist/utils/dbMigration/dbMigration.js.map +1 -1
- package/dist/utils/dbMigration/dbMigration.types.js.map +1 -1
- package/dist/utils/dbMigration/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/index.js.map +1 -1
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js +4 -4
- package/dist/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.js.map +1 -1
- package/dist/utils/envAssert/envAssert.js +6 -6
- package/dist/utils/envAssert/envAssert.js.map +1 -1
- package/dist/utils/envAssert/index.js.map +1 -1
- package/dist/utils/envAssert/validators/hostList.js +2 -2
- package/dist/utils/envAssert/validators/hostList.js.map +1 -1
- package/dist/utils/envAssert/validators/index.js.map +1 -1
- package/dist/utils/envAssert/validators/ipList.js +2 -2
- package/dist/utils/envAssert/validators/ipList.js.map +1 -1
- package/dist/utils/envAssert/validators/path.js +2 -2
- package/dist/utils/envAssert/validators/path.js.map +1 -1
- package/dist/utils/envAssert/validators/string.js +2 -2
- package/dist/utils/envAssert/validators/string.js.map +1 -1
- package/dist/utils/envAssert/validators/stringList.js +3 -3
- package/dist/utils/envAssert/validators/stringList.js.map +1 -1
- package/dist/utils/filter/filter.js +4 -4
- package/dist/utils/filter/filter.js.map +1 -1
- package/dist/utils/filter/index.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.types.js.map +1 -1
- package/dist/utils/getDynamicLink/getDynamicLink.validate.js.map +1 -1
- package/dist/utils/getDynamicLink/index.js.map +1 -1
- package/dist/utils/hmac/checkEnv/checkEnv.js +2 -2
- package/dist/utils/hmac/checkEnv/checkEnv.js.map +1 -1
- package/dist/utils/hmac/checkEnv/index.js.map +1 -1
- package/dist/utils/hmac/createHmac/createHmac.js.map +1 -1
- package/dist/utils/hmac/createHmac/index.js.map +1 -1
- package/dist/utils/hmac/index.js.map +1 -1
- package/dist/utils/hmac/index.types.js.map +1 -1
- package/dist/utils/hmac/signPayload/index.js.map +1 -1
- package/dist/utils/hmac/signPayload/signPayload.js.map +1 -1
- package/dist/utils/hmac/verifySignature/index.js.map +1 -1
- package/dist/utils/hmac/verifySignature/verifySignature.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jwt/index.js.map +1 -1
- package/dist/utils/jwt/jwt.js.map +1 -1
- package/dist/utils/jwt/jwt.types.js.map +1 -1
- package/dist/utils/report/index.js.map +1 -1
- package/dist/utils/report/output.js.map +1 -1
- package/dist/utils/report/output.types.js.map +1 -1
- package/dist/utils/report/report.js.map +1 -1
- package/dist/utils/report/report.types.js.map +1 -1
- package/dist/utils/request/index.js.map +1 -1
- package/dist/utils/request/request.js.map +1 -1
- package/dist/utils/semverCompare/index.js.map +1 -1
- package/dist/utils/semverCompare/semverCompare.js +5 -5
- package/dist/utils/semverCompare/semverCompare.js.map +1 -1
- package/dist/utils/sendEmail/index.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.js +8 -8
- package/dist/utils/sendEmail/sendEmail.js.map +1 -1
- package/dist/utils/sendEmail/sendEmail.types.js.map +1 -1
- package/dist/utils/sendPush/index.js.map +1 -1
- package/dist/utils/sendPush/sendPush.js +5 -5
- package/dist/utils/sendPush/sendPush.js.map +1 -1
- package/dist/utils/sendPush/sendPush.types.js.map +1 -1
- package/dist/utils/tlsConfig/index.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.types.js.map +1 -1
- package/dist/utils/tlsConfig/tlsConfig.validate.js +2 -2
- package/dist/utils/tlsConfig/tlsConfig.validate.js.map +1 -1
- package/dist/utils/tlsRequest/index.js.map +1 -1
- package/dist/utils/tlsRequest/tlsRequest.js.map +1 -1
- package/dist/utils/trimPathSlash/index.js.map +1 -1
- package/dist/utils/trimPathSlash/trimPathSlash.js +4 -4
- package/dist/utils/trimPathSlash/trimPathSlash.js.map +1 -1
- package/eslint.config.mjs +11 -11
- package/package.json +159 -164
- package/src/const/DebeziumEvent.ts +6 -6
- package/src/const/LogSeverity.ts +7 -7
- package/src/const/index.ts +5 -5
- package/src/const/metrics.ts +6 -6
- package/src/const/mime.ts +37 -37
- package/src/const/tokenIssuer.ts +9 -9
- package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +29 -29
- package/src/db/models/SequelizeMeta.ts +16 -16
- package/src/db/models/index.ts +2 -2
- package/src/entities/ElasticSearch/ElasticSearch.ts +103 -103
- package/src/entities/ElasticSearch/ElasticSearch.types.ts +7 -7
- package/src/entities/ElasticSearch/index.ts +2 -2
- package/src/entities/Endpoint/Endpoint.test.ts +337 -337
- package/src/entities/Endpoint/Endpoint.ts +202 -202
- package/src/entities/Endpoint/Endpoint.types.ts +205 -205
- package/src/entities/Endpoint/index.ts +2 -2
- package/src/entities/EngineError/EngineError.ts +28 -28
- package/src/entities/EngineError/EngineError.types.ts +15 -15
- package/src/entities/EngineError/index.ts +2 -2
- package/src/entities/KeySet/KeySet.test.ts +126 -126
- package/src/entities/KeySet/KeySet.ts +172 -172
- package/src/entities/KeySet/KeySet.types.ts +28 -28
- package/src/entities/KeySet/index.ts +2 -2
- package/src/entities/LifecycleController/LifecycleController.test.ts +48 -48
- package/src/entities/LifecycleController/LifecycleController.ts +24 -24
- package/src/entities/LifecycleController/LifecycleController.types.ts +5 -5
- package/src/entities/LifecycleController/index.ts +2 -2
- package/src/entities/Localizator/Localizator.ts +139 -139
- package/src/entities/Localizator/Localizator.types.ts +52 -52
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +165 -165
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +58 -58
- package/src/entities/Localizator/guessNamingConvention/index.ts +1 -1
- package/src/entities/Localizator/index.ts +2 -2
- package/src/entities/MessageHandler/MessageHandler.test.ts +130 -130
- package/src/entities/MessageHandler/MessageHandler.ts +72 -72
- package/src/entities/MessageHandler/MessageHandler.types.ts +15 -15
- package/src/entities/MessageHandler/index.ts +2 -2
- package/src/entities/PubSub/PubSub.test.ts +297 -297
- package/src/entities/PubSub/PubSub.ts +202 -202
- package/src/entities/PubSub/PubSub.types.ts +76 -76
- package/src/entities/PubSub/handleMessage/handleMessage.test.ts +102 -102
- package/src/entities/PubSub/handleMessage/handleMessage.ts +65 -65
- package/src/entities/PubSub/handleMessage/index.ts +1 -1
- package/src/entities/PubSub/index.ts +2 -2
- package/src/entities/PushNotification/PushNotification.test.ts +35 -35
- package/src/entities/PushNotification/PushNotification.ts +44 -44
- package/src/entities/PushNotification/PushNotification.types.ts +25 -25
- package/src/entities/PushNotification/index.ts +2 -2
- package/src/entities/Redis/Redis.ts +71 -71
- package/src/entities/Redis/Redis.types.ts +19 -19
- package/src/entities/Redis/Redis.validate.ts +17 -17
- package/src/entities/Redis/index.ts +2 -2
- package/src/entities/Sequelize/Sequelize.config.ts +59 -59
- package/src/entities/Sequelize/Sequelize.test.ts +21 -21
- package/src/entities/Sequelize/Sequelize.ts +75 -75
- package/src/entities/Sequelize/Sequelize.types.ts +10 -10
- package/src/entities/Sequelize/Sequelize.validate.ts +15 -15
- package/src/entities/Sequelize/index.ts +2 -2
- package/src/entities/Server/Server.const.ts +56 -56
- package/src/entities/Server/Server.test.ts +272 -272
- package/src/entities/Server/Server.ts +445 -445
- package/src/entities/Server/Server.types.ts +88 -88
- package/src/entities/Server/index.ts +2 -2
- package/src/entities/SocketClient/SocketClient.test.ts +392 -392
- package/src/entities/SocketClient/SocketClient.ts +401 -401
- package/src/entities/SocketClient/SocketClient.types.ts +62 -62
- package/src/entities/SocketClient/index.ts +2 -2
- package/src/entities/SocketClient/parseMessage/index.ts +1 -1
- package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +20 -20
- package/src/entities/SocketClient/parseMessage/parseMessage.ts +26 -26
- package/src/entities/Storage/Storage.test.ts +58 -58
- package/src/entities/Storage/Storage.ts +219 -219
- package/src/entities/Storage/Storage.types.ts +57 -57
- package/src/entities/Storage/index.ts +2 -2
- package/src/entities/ValidationError/ValidationError.ts +34 -34
- package/src/entities/ValidationError/index.ts +1 -1
- package/src/entities/WebError/WebError.test.ts +18 -18
- package/src/entities/WebError/WebError.ts +23 -23
- package/src/entities/WebError/WebError.types.ts +9 -9
- package/src/entities/WebError/index.ts +2 -2
- package/src/entities/index.ts +16 -16
- package/src/index.ts +4 -4
- package/src/metrics/debug.ts +10 -10
- package/src/metrics/index.ts +2 -2
- package/src/metrics/request.ts +17 -17
- package/src/middleware/authAdmin/authAdmin.test.ts +199 -199
- package/src/middleware/authAdmin/authAdmin.ts +114 -114
- package/src/middleware/authAdmin/authAdmin.types.ts +19 -19
- package/src/middleware/authAdmin/index.ts +2 -2
- package/src/middleware/authHmac/authHmac.test.ts +86 -86
- package/src/middleware/authHmac/authHmac.ts +56 -56
- package/src/middleware/authHmac/authHmac.types.ts +7 -7
- package/src/middleware/authHmac/index.ts +2 -2
- package/src/middleware/authJwt/authJwt.test.ts +54 -54
- package/src/middleware/authJwt/authJwt.ts +55 -55
- package/src/middleware/authJwt/authJwt.types.ts +14 -14
- package/src/middleware/authJwt/index.ts +2 -2
- package/src/middleware/authStatic/authStatic.test.ts +36 -36
- package/src/middleware/authStatic/authStatic.ts +45 -45
- package/src/middleware/authStatic/index.ts +1 -1
- package/src/middleware/authTls/authTls.test.ts +138 -138
- package/src/middleware/authTls/authTls.ts +106 -106
- package/src/middleware/authTls/authTls.types.ts +13 -13
- package/src/middleware/authTls/index.ts +2 -2
- package/src/middleware/checkPermission/checkPermission.ts +32 -32
- package/src/middleware/error/error.test.ts +60 -60
- package/src/middleware/error/error.ts +25 -25
- package/src/middleware/error/index.ts +1 -1
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.ts +25 -25
- package/src/middleware/fileUploader/compressAvatar/compressAvatar.types.ts +12 -12
- package/src/middleware/fileUploader/compressAvatar/index.ts +2 -2
- package/src/middleware/fileUploader/fileUploader.test.ts +310 -310
- package/src/middleware/fileUploader/fileUploader.ts +303 -303
- package/src/middleware/fileUploader/fileUploader.types.ts +52 -52
- package/src/middleware/fileUploader/index.ts +2 -2
- package/src/middleware/fileUploader/isMultiPart/index.ts +1 -1
- package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +9 -9
- package/src/middleware/fileUploader/validate/index.ts +1 -1
- package/src/middleware/fileUploader/validate/validate.ts +27 -27
- package/src/middleware/fourOhFour/fourOhFour.test.ts +14 -14
- package/src/middleware/fourOhFour/fourOhFour.ts +13 -13
- package/src/middleware/fourOhFour/index.ts +1 -1
- package/src/middleware/geminiFileUploader/geminiFileUploader.ts +117 -117
- package/src/middleware/geminiFileUploader/index.ts +1 -1
- package/src/middleware/healthCheck/healthCheck.test.ts +12 -12
- package/src/middleware/healthCheck/healthCheck.ts +14 -14
- package/src/middleware/healthCheck/index.ts +1 -1
- package/src/middleware/index.ts +17 -17
- package/src/middleware/metrics/index.ts +1 -1
- package/src/middleware/metrics/metrics.test.ts +46 -46
- package/src/middleware/metrics/metrics.ts +24 -24
- package/src/middleware/requestMetrics/index.ts +1 -1
- package/src/middleware/requestMetrics/requestMetrics.test.ts +77 -77
- package/src/middleware/requestMetrics/requestMetrics.ts +20 -20
- package/src/middleware/swaggerDocs/index.ts +2 -2
- package/src/middleware/swaggerDocs/swaggerDocs.ts +114 -114
- package/src/middleware/swaggerDocs/swaggerDocs.types.ts +41 -41
- package/src/middleware/userResolver/index.ts +1 -1
- package/src/middleware/userResolver/userResolver.test.ts +35 -35
- package/src/middleware/userResolver/userResolver.ts +35 -35
- package/src/middleware/validate/index.ts +1 -1
- package/src/middleware/validate/validate.test.ts +43 -43
- package/src/middleware/validate/validate.ts +25 -25
- package/src/middleware/version/index.ts +1 -1
- package/src/middleware/version/version.test.ts +23 -23
- package/src/middleware/version/version.ts +12 -12
- package/src/utils/checkEnvironment/index.ts +49 -49
- package/src/utils/createHttpServer/createHttpServer.test.ts +24 -24
- package/src/utils/createHttpServer/createHttpServer.ts +34 -34
- package/src/utils/createHttpServer/createHttpServer.validate.ts +17 -17
- package/src/utils/createHttpServer/index.ts +1 -1
- package/src/utils/createSortedObject/createSortedObject.ts +20 -20
- package/src/utils/createSortedObject/createSortedObjet.test.ts +47 -47
- package/src/utils/createSortedObject/index.ts +1 -1
- package/src/utils/dbMigration/dbMigration.test.ts +209 -209
- package/src/utils/dbMigration/dbMigration.ts +199 -199
- package/src/utils/dbMigration/dbMigration.types.ts +11 -11
- package/src/utils/dbMigration/index.ts +2 -2
- package/src/utils/dbMigration/migrateMetadataTable/index.ts +1 -1
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +59 -59
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +102 -102
- package/src/utils/envAssert/envAssert.ts +31 -31
- package/src/utils/envAssert/index.ts +1 -1
- package/src/utils/envAssert/validators/hostList.ts +17 -17
- package/src/utils/envAssert/validators/index.ts +5 -5
- package/src/utils/envAssert/validators/ipList.ts +13 -13
- package/src/utils/envAssert/validators/path.ts +13 -13
- package/src/utils/envAssert/validators/string.ts +9 -9
- package/src/utils/envAssert/validators/stringList.ts +13 -13
- package/src/utils/filter/filter.ts +17 -17
- package/src/utils/filter/index.ts +1 -1
- package/src/utils/getDynamicLink/getDynamicLink.test.ts +51 -51
- package/src/utils/getDynamicLink/getDynamicLink.ts +28 -28
- package/src/utils/getDynamicLink/getDynamicLink.types.ts +11 -11
- package/src/utils/getDynamicLink/getDynamicLink.validate.ts +6 -6
- package/src/utils/getDynamicLink/index.ts +2 -2
- package/src/utils/hmac/checkEnv/checkEnv.test.ts +18 -18
- package/src/utils/hmac/checkEnv/checkEnv.ts +9 -9
- package/src/utils/hmac/checkEnv/index.ts +1 -1
- package/src/utils/hmac/createHmac/createHmac.ts +33 -33
- package/src/utils/hmac/createHmac/index.ts +1 -1
- package/src/utils/hmac/index.ts +4 -4
- package/src/utils/hmac/index.types.ts +13 -13
- package/src/utils/hmac/signPayload/index.ts +1 -1
- package/src/utils/hmac/signPayload/signPayload.ts +16 -16
- package/src/utils/hmac/verifySignature/index.ts +1 -1
- package/src/utils/hmac/verifySignature/verifySignature.ts +24 -24
- package/src/utils/index.ts +26 -26
- package/src/utils/jwt/index.ts +2 -2
- package/src/utils/jwt/jwt.test.ts +41 -41
- package/src/utils/jwt/jwt.ts +204 -204
- package/src/utils/jwt/jwt.types.ts +21 -21
- package/src/utils/report/index.ts +3 -3
- package/src/utils/report/output.ts +45 -45
- package/src/utils/report/output.types.ts +70 -70
- package/src/utils/report/report.test.ts +133 -133
- package/src/utils/report/report.ts +134 -134
- package/src/utils/report/report.types.ts +13 -13
- package/src/utils/request/index.ts +1 -1
- package/src/utils/request/request.test.ts +26 -26
- package/src/utils/request/request.ts +48 -48
- package/src/utils/semverCompare/index.ts +1 -1
- package/src/utils/semverCompare/semverCompare.test.ts +49 -49
- package/src/utils/semverCompare/semverCompare.ts +60 -60
- package/src/utils/sendEmail/index.ts +1 -1
- package/src/utils/sendEmail/sendEmail.ts +27 -27
- package/src/utils/sendEmail/sendEmail.types.ts +7 -7
- package/src/utils/sendPush/index.ts +2 -2
- package/src/utils/sendPush/sendPush.ts +20 -20
- package/src/utils/sendPush/sendPush.types.ts +25 -25
- package/src/utils/tlsConfig/index.ts +2 -2
- package/src/utils/tlsConfig/tlsConfig.test.ts +32 -32
- package/src/utils/tlsConfig/tlsConfig.ts +47 -47
- package/src/utils/tlsConfig/tlsConfig.types.ts +11 -11
- package/src/utils/tlsConfig/tlsConfig.validate.ts +25 -25
- package/src/utils/tlsRequest/index.ts +1 -1
- package/src/utils/tlsRequest/tlsRequest.test.ts +63 -63
- package/src/utils/tlsRequest/tlsRequest.ts +12 -12
- package/src/utils/trimPathSlash/index.ts +1 -1
- package/src/utils/trimPathSlash/trimPathSlash.test.ts +26 -26
- package/src/utils/trimPathSlash/trimPathSlash.ts +8 -8
- package/test/env.ts +56 -56
- package/test/factory/index.ts +8 -8
- package/test/factory/sequelizeMeta.ts +12 -12
- package/test/hooks.ts +37 -37
- package/test/index.ts +3 -3
- package/test/stub/index.ts +3 -3
- package/test/stub/stubLocales.ts +68 -68
- package/test/stub/stubPubSub.ts +7 -7
- package/test/stub/stubStorage.ts +77 -77
- package/test/stub/stubStorage.types.ts +11 -11
- package/test/utils/app.ts +31 -31
- package/test/utils/index.ts +1 -1
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +32 -32
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Attributes,
|
|
3
|
-
PubSub as PubsubClient,
|
|
4
|
-
Message
|
|
5
|
-
} from '@google-cloud/pubsub';
|
|
6
|
-
import { handleMessage } from './handleMessage';
|
|
7
|
-
import {
|
|
8
|
-
PubSubTopicsMap,
|
|
9
|
-
PubSubSubscriptionsMap,
|
|
10
|
-
PubSubAddSubscriberOptions,
|
|
11
|
-
PubSubMessageHandler
|
|
12
|
-
} from './PubSub.types';
|
|
13
|
-
import { EngineError } from 'entities/EngineError';
|
|
14
|
-
import { LifecycleController } from 'entities/LifecycleController';
|
|
15
|
-
import { reportDebug, reportError } from 'utils';
|
|
16
|
-
|
|
17
|
-
const namespace = 'engine:PubSub';
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Associative containing all the subscriptions sorted by topic registered for publishing
|
|
21
|
-
*/
|
|
22
|
-
const subscriptions: PubSubSubscriptionsMap = {};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Associative containing all the topics registered for publishing
|
|
26
|
-
*/
|
|
27
|
-
const topics: PubSubTopicsMap = {};
|
|
28
|
-
|
|
29
|
-
const pubSubClient = new PubsubClient();
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* This is a singleton service who's role is to manage pub/sub connections
|
|
33
|
-
* It is the preferred way to interact with Pub/Sub as it manages the underlying subscription and handler objects
|
|
34
|
-
* It avoids potential subscription splitting on an instance
|
|
35
|
-
*/
|
|
36
|
-
export const PubSub = {
|
|
37
|
-
/**
|
|
38
|
-
* Initialize the registered publishers and subscribers
|
|
39
|
-
*/
|
|
40
|
-
async init(): Promise<void> {
|
|
41
|
-
reportDebug({ namespace, message: `Initializing Pub/Sub` });
|
|
42
|
-
// Check that all topics/permissions exist, and that we have permission on them
|
|
43
|
-
await Promise.all([
|
|
44
|
-
// Test that all topics actually exist and that we have permissions
|
|
45
|
-
...Object.values(topics).map(async (topic) => {
|
|
46
|
-
const [exists] = await topic.exists();
|
|
47
|
-
if (!exists)
|
|
48
|
-
throw new EngineError(`Topic ${topic.name} does not exist`);
|
|
49
|
-
// Test permission ton publish to topic
|
|
50
|
-
const [permissions] = await topic.iam.testPermissions([
|
|
51
|
-
'pubsub.topics.publish'
|
|
52
|
-
]);
|
|
53
|
-
const hasPermissions = Object.values(permissions).every(
|
|
54
|
-
(success) => success
|
|
55
|
-
);
|
|
56
|
-
if (!hasPermissions)
|
|
57
|
-
throw new EngineError(
|
|
58
|
-
`Instance does not have appropriate permissions to publish to topic ${topic.name}`
|
|
59
|
-
);
|
|
60
|
-
}),
|
|
61
|
-
// Test that all subscriptions actually exist and that we have permissions
|
|
62
|
-
...Object.values(subscriptions).map(async ({ subscription }) => {
|
|
63
|
-
const [exists] = await subscription.exists();
|
|
64
|
-
if (!exists)
|
|
65
|
-
throw new EngineError(
|
|
66
|
-
`Subscription ${subscription.name} does not exist`
|
|
67
|
-
);
|
|
68
|
-
// Test permission ton consume subscription
|
|
69
|
-
const [permissions] = await subscription.iam.testPermissions([
|
|
70
|
-
'pubsub.subscriptions.consume'
|
|
71
|
-
]);
|
|
72
|
-
const hasPermissions = Object.values(permissions).every(
|
|
73
|
-
(success) => success
|
|
74
|
-
);
|
|
75
|
-
if (!hasPermissions)
|
|
76
|
-
throw new EngineError(
|
|
77
|
-
`Instance does not have appropriate permissions to subscribe to subscription ${subscription.name}`
|
|
78
|
-
);
|
|
79
|
-
})
|
|
80
|
-
]);
|
|
81
|
-
|
|
82
|
-
// Register handlers on the subscriptions to activate them
|
|
83
|
-
for (const { subscription, handlers, isDebezium } of Object.values(
|
|
84
|
-
subscriptions
|
|
85
|
-
)) {
|
|
86
|
-
subscription.on('message', (message) => {
|
|
87
|
-
handleMessage(
|
|
88
|
-
message as Message,
|
|
89
|
-
subscription,
|
|
90
|
-
handlers,
|
|
91
|
-
isDebezium
|
|
92
|
-
).catch((error) => {
|
|
93
|
-
reportError(error);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
LifecycleController.register(PubSub);
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Shutdown the registered publishers and subscribers
|
|
103
|
-
*/
|
|
104
|
-
async shutdown(): Promise<void> {
|
|
105
|
-
reportDebug({ namespace, message: `Shutting down Pub/Sub` });
|
|
106
|
-
// Flush all pending messages and shut down connections
|
|
107
|
-
await Promise.all([
|
|
108
|
-
...Object.values(topics).map(async (topic) => topic.flush()),
|
|
109
|
-
...Object.values(subscriptions).map(async ({ subscription }) =>
|
|
110
|
-
subscription.close()
|
|
111
|
-
)
|
|
112
|
-
]);
|
|
113
|
-
// Delete the stored topics/subscriptions
|
|
114
|
-
Object.keys(topics).forEach((topic) => delete topics[topic]);
|
|
115
|
-
Object.keys(subscriptions).forEach(
|
|
116
|
-
(subscription) => delete subscriptions[subscription]
|
|
117
|
-
);
|
|
118
|
-
// Close the client
|
|
119
|
-
await pubSubClient.close();
|
|
120
|
-
},
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Creates a publisher if it does not exist yet
|
|
124
|
-
*/
|
|
125
|
-
addPublisher(topic: string | Array<string>): void {
|
|
126
|
-
const topicArray = topic instanceof Array ? topic : [topic];
|
|
127
|
-
reportDebug({
|
|
128
|
-
namespace,
|
|
129
|
-
message: `Registering publisher for topics '${topicArray.join("', '")}'`
|
|
130
|
-
});
|
|
131
|
-
// Register a new topic if it does not exist yet
|
|
132
|
-
for (const topic of topicArray) {
|
|
133
|
-
if (!Object.keys(topics).includes(topic)) {
|
|
134
|
-
topics[topic] = pubSubClient.topic(topic, {
|
|
135
|
-
enableOpenTelemetryTracing: true
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Add message handlers to a subscription
|
|
143
|
-
* @param subscription - Name of the Pub/Sub subscription
|
|
144
|
-
* @param handler - Function or list of functions to set as message handlers
|
|
145
|
-
* @param options - Indicates that the additional options need to handle on Subscriber
|
|
146
|
-
*/
|
|
147
|
-
addSubscriber<T>(
|
|
148
|
-
subscription: string,
|
|
149
|
-
handler: PubSubMessageHandler<T> | Array<PubSubMessageHandler<T>>,
|
|
150
|
-
options: PubSubAddSubscriberOptions = {}
|
|
151
|
-
): void {
|
|
152
|
-
const handlers = handler instanceof Array ? handler : [handler];
|
|
153
|
-
const isDebezium = options?.isDebezium ?? false;
|
|
154
|
-
const first = options?.first ?? false;
|
|
155
|
-
|
|
156
|
-
reportDebug({
|
|
157
|
-
namespace,
|
|
158
|
-
message: `Registering subscriber for subscription '${subscription}'`,
|
|
159
|
-
data: { first, handlersCount: handlers.length, isDebezium }
|
|
160
|
-
});
|
|
161
|
-
if (!Object.keys(subscriptions).includes(subscription)) {
|
|
162
|
-
subscriptions[subscription] = {
|
|
163
|
-
subscription: pubSubClient.subscription(subscription, {
|
|
164
|
-
enableOpenTelemetryTracing: true
|
|
165
|
-
}),
|
|
166
|
-
handlers: []
|
|
167
|
-
};
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
if (isDebezium) subscriptions[subscription].isDebezium = true;
|
|
171
|
-
|
|
172
|
-
if (first) subscriptions[subscription].handlers.push(...handlers);
|
|
173
|
-
else subscriptions[subscription].handlers.unshift(...handlers);
|
|
174
|
-
},
|
|
175
|
-
|
|
176
|
-
/**
|
|
177
|
-
* Send a message to a Pub/Sub topic
|
|
178
|
-
* @param topic - Name of the topic
|
|
179
|
-
* @param message - Content of the message, must be an object that can be JSON stringified
|
|
180
|
-
* @param attributes - Attributes for this message, can be used to filter messages on the subscription
|
|
181
|
-
* @param orderingKey - Enforce order guarantee of messages sent with the same key
|
|
182
|
-
*/
|
|
183
|
-
async publish(
|
|
184
|
-
topic: string,
|
|
185
|
-
message: unknown,
|
|
186
|
-
attributes?: Attributes,
|
|
187
|
-
orderingKey?: string
|
|
188
|
-
): Promise<void> {
|
|
189
|
-
if (!topics[topic])
|
|
190
|
-
throw new EngineError(`No publisher was registered for topic '${topic}'`);
|
|
191
|
-
reportDebug({
|
|
192
|
-
namespace,
|
|
193
|
-
message: `Sending message to topic '${topic}'`,
|
|
194
|
-
data: { message, attributes, orderingKey }
|
|
195
|
-
});
|
|
196
|
-
await topics[topic].publishMessage({
|
|
197
|
-
json: message,
|
|
198
|
-
attributes,
|
|
199
|
-
orderingKey
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
Attributes,
|
|
3
|
+
PubSub as PubsubClient,
|
|
4
|
+
Message
|
|
5
|
+
} from '@google-cloud/pubsub';
|
|
6
|
+
import { handleMessage } from './handleMessage';
|
|
7
|
+
import {
|
|
8
|
+
PubSubTopicsMap,
|
|
9
|
+
PubSubSubscriptionsMap,
|
|
10
|
+
PubSubAddSubscriberOptions,
|
|
11
|
+
PubSubMessageHandler
|
|
12
|
+
} from './PubSub.types';
|
|
13
|
+
import { EngineError } from 'entities/EngineError';
|
|
14
|
+
import { LifecycleController } from 'entities/LifecycleController';
|
|
15
|
+
import { reportDebug, reportError } from 'utils';
|
|
16
|
+
|
|
17
|
+
const namespace = 'engine:PubSub';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Associative containing all the subscriptions sorted by topic registered for publishing
|
|
21
|
+
*/
|
|
22
|
+
const subscriptions: PubSubSubscriptionsMap = {};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Associative containing all the topics registered for publishing
|
|
26
|
+
*/
|
|
27
|
+
const topics: PubSubTopicsMap = {};
|
|
28
|
+
|
|
29
|
+
const pubSubClient = new PubsubClient();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* This is a singleton service who's role is to manage pub/sub connections
|
|
33
|
+
* It is the preferred way to interact with Pub/Sub as it manages the underlying subscription and handler objects
|
|
34
|
+
* It avoids potential subscription splitting on an instance
|
|
35
|
+
*/
|
|
36
|
+
export const PubSub = {
|
|
37
|
+
/**
|
|
38
|
+
* Initialize the registered publishers and subscribers
|
|
39
|
+
*/
|
|
40
|
+
async init(): Promise<void> {
|
|
41
|
+
reportDebug({ namespace, message: `Initializing Pub/Sub` });
|
|
42
|
+
// Check that all topics/permissions exist, and that we have permission on them
|
|
43
|
+
await Promise.all([
|
|
44
|
+
// Test that all topics actually exist and that we have permissions
|
|
45
|
+
...Object.values(topics).map(async (topic) => {
|
|
46
|
+
const [exists] = await topic.exists();
|
|
47
|
+
if (!exists)
|
|
48
|
+
throw new EngineError(`Topic ${topic.name} does not exist`);
|
|
49
|
+
// Test permission ton publish to topic
|
|
50
|
+
const [permissions] = await topic.iam.testPermissions([
|
|
51
|
+
'pubsub.topics.publish'
|
|
52
|
+
]);
|
|
53
|
+
const hasPermissions = Object.values(permissions).every(
|
|
54
|
+
(success) => success
|
|
55
|
+
);
|
|
56
|
+
if (!hasPermissions)
|
|
57
|
+
throw new EngineError(
|
|
58
|
+
`Instance does not have appropriate permissions to publish to topic ${topic.name}`
|
|
59
|
+
);
|
|
60
|
+
}),
|
|
61
|
+
// Test that all subscriptions actually exist and that we have permissions
|
|
62
|
+
...Object.values(subscriptions).map(async ({ subscription }) => {
|
|
63
|
+
const [exists] = await subscription.exists();
|
|
64
|
+
if (!exists)
|
|
65
|
+
throw new EngineError(
|
|
66
|
+
`Subscription ${subscription.name} does not exist`
|
|
67
|
+
);
|
|
68
|
+
// Test permission ton consume subscription
|
|
69
|
+
const [permissions] = await subscription.iam.testPermissions([
|
|
70
|
+
'pubsub.subscriptions.consume'
|
|
71
|
+
]);
|
|
72
|
+
const hasPermissions = Object.values(permissions).every(
|
|
73
|
+
(success) => success
|
|
74
|
+
);
|
|
75
|
+
if (!hasPermissions)
|
|
76
|
+
throw new EngineError(
|
|
77
|
+
`Instance does not have appropriate permissions to subscribe to subscription ${subscription.name}`
|
|
78
|
+
);
|
|
79
|
+
})
|
|
80
|
+
]);
|
|
81
|
+
|
|
82
|
+
// Register handlers on the subscriptions to activate them
|
|
83
|
+
for (const { subscription, handlers, isDebezium } of Object.values(
|
|
84
|
+
subscriptions
|
|
85
|
+
)) {
|
|
86
|
+
subscription.on('message', (message) => {
|
|
87
|
+
handleMessage(
|
|
88
|
+
message as Message,
|
|
89
|
+
subscription,
|
|
90
|
+
handlers,
|
|
91
|
+
isDebezium
|
|
92
|
+
).catch((error) => {
|
|
93
|
+
reportError(error);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
LifecycleController.register(PubSub);
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Shutdown the registered publishers and subscribers
|
|
103
|
+
*/
|
|
104
|
+
async shutdown(): Promise<void> {
|
|
105
|
+
reportDebug({ namespace, message: `Shutting down Pub/Sub` });
|
|
106
|
+
// Flush all pending messages and shut down connections
|
|
107
|
+
await Promise.all([
|
|
108
|
+
...Object.values(topics).map(async (topic) => topic.flush()),
|
|
109
|
+
...Object.values(subscriptions).map(async ({ subscription }) =>
|
|
110
|
+
subscription.close()
|
|
111
|
+
)
|
|
112
|
+
]);
|
|
113
|
+
// Delete the stored topics/subscriptions
|
|
114
|
+
Object.keys(topics).forEach((topic) => delete topics[topic]);
|
|
115
|
+
Object.keys(subscriptions).forEach(
|
|
116
|
+
(subscription) => delete subscriptions[subscription]
|
|
117
|
+
);
|
|
118
|
+
// Close the client
|
|
119
|
+
await pubSubClient.close();
|
|
120
|
+
},
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Creates a publisher if it does not exist yet
|
|
124
|
+
*/
|
|
125
|
+
addPublisher(topic: string | Array<string>): void {
|
|
126
|
+
const topicArray = topic instanceof Array ? topic : [topic];
|
|
127
|
+
reportDebug({
|
|
128
|
+
namespace,
|
|
129
|
+
message: `Registering publisher for topics '${topicArray.join("', '")}'`
|
|
130
|
+
});
|
|
131
|
+
// Register a new topic if it does not exist yet
|
|
132
|
+
for (const topic of topicArray) {
|
|
133
|
+
if (!Object.keys(topics).includes(topic)) {
|
|
134
|
+
topics[topic] = pubSubClient.topic(topic, {
|
|
135
|
+
enableOpenTelemetryTracing: true
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Add message handlers to a subscription
|
|
143
|
+
* @param subscription - Name of the Pub/Sub subscription
|
|
144
|
+
* @param handler - Function or list of functions to set as message handlers
|
|
145
|
+
* @param options - Indicates that the additional options need to handle on Subscriber
|
|
146
|
+
*/
|
|
147
|
+
addSubscriber<T>(
|
|
148
|
+
subscription: string,
|
|
149
|
+
handler: PubSubMessageHandler<T> | Array<PubSubMessageHandler<T>>,
|
|
150
|
+
options: PubSubAddSubscriberOptions = {}
|
|
151
|
+
): void {
|
|
152
|
+
const handlers = handler instanceof Array ? handler : [handler];
|
|
153
|
+
const isDebezium = options?.isDebezium ?? false;
|
|
154
|
+
const first = options?.first ?? false;
|
|
155
|
+
|
|
156
|
+
reportDebug({
|
|
157
|
+
namespace,
|
|
158
|
+
message: `Registering subscriber for subscription '${subscription}'`,
|
|
159
|
+
data: { first, handlersCount: handlers.length, isDebezium }
|
|
160
|
+
});
|
|
161
|
+
if (!Object.keys(subscriptions).includes(subscription)) {
|
|
162
|
+
subscriptions[subscription] = {
|
|
163
|
+
subscription: pubSubClient.subscription(subscription, {
|
|
164
|
+
enableOpenTelemetryTracing: true
|
|
165
|
+
}),
|
|
166
|
+
handlers: []
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (isDebezium) subscriptions[subscription].isDebezium = true;
|
|
171
|
+
|
|
172
|
+
if (first) subscriptions[subscription].handlers.push(...handlers);
|
|
173
|
+
else subscriptions[subscription].handlers.unshift(...handlers);
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Send a message to a Pub/Sub topic
|
|
178
|
+
* @param topic - Name of the topic
|
|
179
|
+
* @param message - Content of the message, must be an object that can be JSON stringified
|
|
180
|
+
* @param attributes - Attributes for this message, can be used to filter messages on the subscription
|
|
181
|
+
* @param orderingKey - Enforce order guarantee of messages sent with the same key
|
|
182
|
+
*/
|
|
183
|
+
async publish(
|
|
184
|
+
topic: string,
|
|
185
|
+
message: unknown,
|
|
186
|
+
attributes?: Attributes,
|
|
187
|
+
orderingKey?: string
|
|
188
|
+
): Promise<void> {
|
|
189
|
+
if (!topics[topic])
|
|
190
|
+
throw new EngineError(`No publisher was registered for topic '${topic}'`);
|
|
191
|
+
reportDebug({
|
|
192
|
+
namespace,
|
|
193
|
+
message: `Sending message to topic '${topic}'`,
|
|
194
|
+
data: { message, attributes, orderingKey }
|
|
195
|
+
});
|
|
196
|
+
await topics[topic].publishMessage({
|
|
197
|
+
json: message,
|
|
198
|
+
attributes,
|
|
199
|
+
orderingKey
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
};
|
|
@@ -1,76 +1,76 @@
|
|
|
1
|
-
import { Topic, Subscription, Attributes } from '@google-cloud/pubsub';
|
|
2
|
-
import { DebeziumEvent } from 'const/DebeziumEvent';
|
|
3
|
-
|
|
4
|
-
/** List of all active topics */
|
|
5
|
-
export interface PubSubTopicsMap {
|
|
6
|
-
[topic: string]: Topic;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/** List of subscriptions handled for each topic */
|
|
10
|
-
export interface PubSubSubscriptionsMap {
|
|
11
|
-
[topic: string]: {
|
|
12
|
-
/** The Pub/Sub subscription object */
|
|
13
|
-
subscription: Subscription;
|
|
14
|
-
/** The message handling functions */
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
-
handlers: Array<PubSubMessageHandler<any>>;
|
|
17
|
-
/** Indicates that the subscription from Debezium events */
|
|
18
|
-
isDebezium?: boolean;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/** Options to setup a subscription */
|
|
23
|
-
export interface PubSubAddSubscriberOptions {
|
|
24
|
-
/** Should the handlers declared here be added to the top of the queue, and called first when an new message arrives */
|
|
25
|
-
first?: boolean;
|
|
26
|
-
/** Indicates that the topic is a Debezium CDC topic, additional processing is done on the message */
|
|
27
|
-
isDebezium?: boolean;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export type PubSubMessageHandler<T> = (
|
|
31
|
-
message: T,
|
|
32
|
-
attributes: Attributes,
|
|
33
|
-
publishedAt: Date
|
|
34
|
-
) => void | Promise<void>;
|
|
35
|
-
|
|
36
|
-
/** Debezium create event payload */
|
|
37
|
-
interface PubSubDebeziumCreatePayload<T> {
|
|
38
|
-
/** The instance properties before the operation */
|
|
39
|
-
before: null;
|
|
40
|
-
/** The instance properties after the operation */
|
|
41
|
-
after: T;
|
|
42
|
-
/** The operation that was executed */
|
|
43
|
-
op: DebeziumEvent.Create;
|
|
44
|
-
/** List of fields that have changed */
|
|
45
|
-
diff: Array<string>;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/** Debezium update event payload */
|
|
49
|
-
interface PubSubDebeziumUpdatePayload<T> {
|
|
50
|
-
/** The instance properties before the operation */
|
|
51
|
-
before: T;
|
|
52
|
-
/** The instance properties after the operation */
|
|
53
|
-
after: T;
|
|
54
|
-
/** The operation that was executed */
|
|
55
|
-
op: DebeziumEvent.Update;
|
|
56
|
-
/** List of fields that have changed */
|
|
57
|
-
diff: Array<string>;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/** Debezium delete event payload */
|
|
61
|
-
interface PubSubDebeziumDeletePayload<T> {
|
|
62
|
-
/** The instance properties before the operation */
|
|
63
|
-
before: T;
|
|
64
|
-
/** The instance properties after the operation */
|
|
65
|
-
after: null;
|
|
66
|
-
/** The operation that was executed */
|
|
67
|
-
op: DebeziumEvent.Delete;
|
|
68
|
-
/** List of fields that have changed */
|
|
69
|
-
diff: Array<string>;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Payload of Debezium messages */
|
|
73
|
-
export type PubSubDebeziumPayload<T> =
|
|
74
|
-
| PubSubDebeziumCreatePayload<T>
|
|
75
|
-
| PubSubDebeziumUpdatePayload<T>
|
|
76
|
-
| PubSubDebeziumDeletePayload<T>;
|
|
1
|
+
import { Topic, Subscription, Attributes } from '@google-cloud/pubsub';
|
|
2
|
+
import { DebeziumEvent } from 'const/DebeziumEvent';
|
|
3
|
+
|
|
4
|
+
/** List of all active topics */
|
|
5
|
+
export interface PubSubTopicsMap {
|
|
6
|
+
[topic: string]: Topic;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/** List of subscriptions handled for each topic */
|
|
10
|
+
export interface PubSubSubscriptionsMap {
|
|
11
|
+
[topic: string]: {
|
|
12
|
+
/** The Pub/Sub subscription object */
|
|
13
|
+
subscription: Subscription;
|
|
14
|
+
/** The message handling functions */
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
+
handlers: Array<PubSubMessageHandler<any>>;
|
|
17
|
+
/** Indicates that the subscription from Debezium events */
|
|
18
|
+
isDebezium?: boolean;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Options to setup a subscription */
|
|
23
|
+
export interface PubSubAddSubscriberOptions {
|
|
24
|
+
/** Should the handlers declared here be added to the top of the queue, and called first when an new message arrives */
|
|
25
|
+
first?: boolean;
|
|
26
|
+
/** Indicates that the topic is a Debezium CDC topic, additional processing is done on the message */
|
|
27
|
+
isDebezium?: boolean;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export type PubSubMessageHandler<T> = (
|
|
31
|
+
message: T,
|
|
32
|
+
attributes: Attributes,
|
|
33
|
+
publishedAt: Date
|
|
34
|
+
) => void | Promise<void>;
|
|
35
|
+
|
|
36
|
+
/** Debezium create event payload */
|
|
37
|
+
interface PubSubDebeziumCreatePayload<T> {
|
|
38
|
+
/** The instance properties before the operation */
|
|
39
|
+
before: null;
|
|
40
|
+
/** The instance properties after the operation */
|
|
41
|
+
after: T;
|
|
42
|
+
/** The operation that was executed */
|
|
43
|
+
op: DebeziumEvent.Create;
|
|
44
|
+
/** List of fields that have changed */
|
|
45
|
+
diff: Array<string>;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** Debezium update event payload */
|
|
49
|
+
interface PubSubDebeziumUpdatePayload<T> {
|
|
50
|
+
/** The instance properties before the operation */
|
|
51
|
+
before: T;
|
|
52
|
+
/** The instance properties after the operation */
|
|
53
|
+
after: T;
|
|
54
|
+
/** The operation that was executed */
|
|
55
|
+
op: DebeziumEvent.Update;
|
|
56
|
+
/** List of fields that have changed */
|
|
57
|
+
diff: Array<string>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Debezium delete event payload */
|
|
61
|
+
interface PubSubDebeziumDeletePayload<T> {
|
|
62
|
+
/** The instance properties before the operation */
|
|
63
|
+
before: T;
|
|
64
|
+
/** The instance properties after the operation */
|
|
65
|
+
after: null;
|
|
66
|
+
/** The operation that was executed */
|
|
67
|
+
op: DebeziumEvent.Delete;
|
|
68
|
+
/** List of fields that have changed */
|
|
69
|
+
diff: Array<string>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Payload of Debezium messages */
|
|
73
|
+
export type PubSubDebeziumPayload<T> =
|
|
74
|
+
| PubSubDebeziumCreatePayload<T>
|
|
75
|
+
| PubSubDebeziumUpdatePayload<T>
|
|
76
|
+
| PubSubDebeziumDeletePayload<T>;
|