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,102 +1,102 @@
|
|
|
1
|
-
import { Sequelize, QueryTypes } from 'sequelize';
|
|
2
|
-
import { SequelizeMeta } from 'db/models';
|
|
3
|
-
import { reportDebug } from 'utils/report';
|
|
4
|
-
|
|
5
|
-
const namespace = 'engine:utils:dbMigration';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Run migrations on the metadata table
|
|
9
|
-
* The table containing the migrations metadata cannot be handled through migrations
|
|
10
|
-
* Therefore, we use a more classic approach with this function and pure SQL queries
|
|
11
|
-
*/
|
|
12
|
-
export async function migrateMetadataTable(
|
|
13
|
-
sequelize: Sequelize
|
|
14
|
-
): Promise<void> {
|
|
15
|
-
reportDebug({ namespace, message: 'Executing metadata migration routine' });
|
|
16
|
-
|
|
17
|
-
const query = `SELECT table_name FROM information_schema.tables`;
|
|
18
|
-
|
|
19
|
-
// We check if we have a custom sequelize_meta table yet
|
|
20
|
-
const tables = await sequelize.query<Array<string>>(query, {
|
|
21
|
-
type: QueryTypes.SELECT
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
const hasCustomSequelizeMeta =
|
|
25
|
-
process.env.SQL_TYPE === 'postgres'
|
|
26
|
-
? tables.some((table) => table[0] === 'sequelize_meta')
|
|
27
|
-
: tables.some((table) => Object.values(table)[0] === 'sequelize_meta');
|
|
28
|
-
const hasLegacySequelizeMeta =
|
|
29
|
-
process.env.SQL_TYPE === 'postgres'
|
|
30
|
-
? tables.some((table) => table[0] === 'SequelizeMeta')
|
|
31
|
-
: tables.some((table) => Object.values(table)[0] === 'SequelizeMeta');
|
|
32
|
-
if (!hasCustomSequelizeMeta) {
|
|
33
|
-
reportDebug({
|
|
34
|
-
namespace,
|
|
35
|
-
message: 'No metadata table found, creating new one'
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// Define SQL for creating the table based on the database type
|
|
39
|
-
let createTableQuery = '';
|
|
40
|
-
|
|
41
|
-
switch (process.env.SQL_TYPE) {
|
|
42
|
-
case 'mysql':
|
|
43
|
-
case 'postgres':
|
|
44
|
-
createTableQuery = `
|
|
45
|
-
CREATE TABLE sequelize_meta (
|
|
46
|
-
name VARCHAR(100) PRIMARY KEY,
|
|
47
|
-
version VARCHAR(25),
|
|
48
|
-
createdAt TIMESTAMP NOT NULL,
|
|
49
|
-
updatedAt TIMESTAMP NOT NULL
|
|
50
|
-
)`;
|
|
51
|
-
break;
|
|
52
|
-
case 'mssql':
|
|
53
|
-
createTableQuery = `
|
|
54
|
-
CREATE TABLE sequelize_meta (
|
|
55
|
-
name VARCHAR(100) PRIMARY KEY,
|
|
56
|
-
version VARCHAR(25),
|
|
57
|
-
createdAt DATETIME NOT NULL,
|
|
58
|
-
updatedAt DATETIME NOT NULL
|
|
59
|
-
)`;
|
|
60
|
-
break;
|
|
61
|
-
default:
|
|
62
|
-
throw new Error('Unsupported SQL type');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// Create the new sequelize_meta table if it does not exist
|
|
66
|
-
await sequelize.query(createTableQuery, { type: QueryTypes.RAW });
|
|
67
|
-
|
|
68
|
-
// Migrate the data from the old table to the new one if needed
|
|
69
|
-
if (hasLegacySequelizeMeta) {
|
|
70
|
-
reportDebug({
|
|
71
|
-
namespace,
|
|
72
|
-
message: 'Legacy metadata table found, migrating data'
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
const migrations = await sequelize.query<SequelizeMeta>(
|
|
76
|
-
'SELECT name FROM SequelizeMeta ORDER BY name',
|
|
77
|
-
{
|
|
78
|
-
type: QueryTypes.SELECT
|
|
79
|
-
}
|
|
80
|
-
);
|
|
81
|
-
|
|
82
|
-
const insertQuery = `
|
|
83
|
-
INSERT INTO sequelize_meta (name, version, createdAt, updatedAt) VALUES
|
|
84
|
-
${migrations
|
|
85
|
-
.map((migration) => {
|
|
86
|
-
switch (process.env.SQL_TYPE) {
|
|
87
|
-
case 'mysql':
|
|
88
|
-
case 'postgres':
|
|
89
|
-
return `('${migration.name}', NULL, NOW(), NOW())`;
|
|
90
|
-
case 'mssql':
|
|
91
|
-
return `('${migration.name}', NULL, GETDATE(), GETDATE())`;
|
|
92
|
-
default:
|
|
93
|
-
throw new Error('Unsupported SQL type');
|
|
94
|
-
}
|
|
95
|
-
})
|
|
96
|
-
.join(',')}
|
|
97
|
-
`;
|
|
98
|
-
|
|
99
|
-
await sequelize.query(insertQuery, { type: QueryTypes.INSERT });
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
import { Sequelize, QueryTypes } from 'sequelize';
|
|
2
|
+
import { SequelizeMeta } from 'db/models';
|
|
3
|
+
import { reportDebug } from 'utils/report';
|
|
4
|
+
|
|
5
|
+
const namespace = 'engine:utils:dbMigration';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Run migrations on the metadata table
|
|
9
|
+
* The table containing the migrations metadata cannot be handled through migrations
|
|
10
|
+
* Therefore, we use a more classic approach with this function and pure SQL queries
|
|
11
|
+
*/
|
|
12
|
+
export async function migrateMetadataTable(
|
|
13
|
+
sequelize: Sequelize
|
|
14
|
+
): Promise<void> {
|
|
15
|
+
reportDebug({ namespace, message: 'Executing metadata migration routine' });
|
|
16
|
+
|
|
17
|
+
const query = `SELECT table_name FROM information_schema.tables`;
|
|
18
|
+
|
|
19
|
+
// We check if we have a custom sequelize_meta table yet
|
|
20
|
+
const tables = await sequelize.query<Array<string>>(query, {
|
|
21
|
+
type: QueryTypes.SELECT
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
const hasCustomSequelizeMeta =
|
|
25
|
+
process.env.SQL_TYPE === 'postgres'
|
|
26
|
+
? tables.some((table) => table[0] === 'sequelize_meta')
|
|
27
|
+
: tables.some((table) => Object.values(table)[0] === 'sequelize_meta');
|
|
28
|
+
const hasLegacySequelizeMeta =
|
|
29
|
+
process.env.SQL_TYPE === 'postgres'
|
|
30
|
+
? tables.some((table) => table[0] === 'SequelizeMeta')
|
|
31
|
+
: tables.some((table) => Object.values(table)[0] === 'SequelizeMeta');
|
|
32
|
+
if (!hasCustomSequelizeMeta) {
|
|
33
|
+
reportDebug({
|
|
34
|
+
namespace,
|
|
35
|
+
message: 'No metadata table found, creating new one'
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Define SQL for creating the table based on the database type
|
|
39
|
+
let createTableQuery = '';
|
|
40
|
+
|
|
41
|
+
switch (process.env.SQL_TYPE) {
|
|
42
|
+
case 'mysql':
|
|
43
|
+
case 'postgres':
|
|
44
|
+
createTableQuery = `
|
|
45
|
+
CREATE TABLE sequelize_meta (
|
|
46
|
+
name VARCHAR(100) PRIMARY KEY,
|
|
47
|
+
version VARCHAR(25),
|
|
48
|
+
createdAt TIMESTAMP NOT NULL,
|
|
49
|
+
updatedAt TIMESTAMP NOT NULL
|
|
50
|
+
)`;
|
|
51
|
+
break;
|
|
52
|
+
case 'mssql':
|
|
53
|
+
createTableQuery = `
|
|
54
|
+
CREATE TABLE sequelize_meta (
|
|
55
|
+
name VARCHAR(100) PRIMARY KEY,
|
|
56
|
+
version VARCHAR(25),
|
|
57
|
+
createdAt DATETIME NOT NULL,
|
|
58
|
+
updatedAt DATETIME NOT NULL
|
|
59
|
+
)`;
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
throw new Error('Unsupported SQL type');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Create the new sequelize_meta table if it does not exist
|
|
66
|
+
await sequelize.query(createTableQuery, { type: QueryTypes.RAW });
|
|
67
|
+
|
|
68
|
+
// Migrate the data from the old table to the new one if needed
|
|
69
|
+
if (hasLegacySequelizeMeta) {
|
|
70
|
+
reportDebug({
|
|
71
|
+
namespace,
|
|
72
|
+
message: 'Legacy metadata table found, migrating data'
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
const migrations = await sequelize.query<SequelizeMeta>(
|
|
76
|
+
'SELECT name FROM SequelizeMeta ORDER BY name',
|
|
77
|
+
{
|
|
78
|
+
type: QueryTypes.SELECT
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
const insertQuery = `
|
|
83
|
+
INSERT INTO sequelize_meta (name, version, createdAt, updatedAt) VALUES
|
|
84
|
+
${migrations
|
|
85
|
+
.map((migration) => {
|
|
86
|
+
switch (process.env.SQL_TYPE) {
|
|
87
|
+
case 'mysql':
|
|
88
|
+
case 'postgres':
|
|
89
|
+
return `('${migration.name}', NULL, NOW(), NOW())`;
|
|
90
|
+
case 'mssql':
|
|
91
|
+
return `('${migration.name}', NULL, GETDATE(), GETDATE())`;
|
|
92
|
+
default:
|
|
93
|
+
throw new Error('Unsupported SQL type');
|
|
94
|
+
}
|
|
95
|
+
})
|
|
96
|
+
.join(',')}
|
|
97
|
+
`;
|
|
98
|
+
|
|
99
|
+
await sequelize.query(insertQuery, { type: QueryTypes.INSERT });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
import { bool, num, host, email, port, url, json } from 'envalid';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
envIsIpList,
|
|
5
|
-
envIsPath,
|
|
6
|
-
envIsHostList,
|
|
7
|
-
envIsStringList,
|
|
8
|
-
envIsString
|
|
9
|
-
} from './validators';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* envalid validators to use with checkEnvironment made with evalid.makeValidator and validator.js
|
|
13
|
-
* is* functions. + Also Added isString, isHost, and isIPList.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* envalid docs: https://github.com/af/envalid
|
|
17
|
-
*/
|
|
18
|
-
export const envAssert = {
|
|
19
|
-
isString: envIsString,
|
|
20
|
-
isBoolean: bool,
|
|
21
|
-
isNumber: num,
|
|
22
|
-
isEmail: email,
|
|
23
|
-
isHost: host,
|
|
24
|
-
isPort: port,
|
|
25
|
-
isURL: url,
|
|
26
|
-
isJSON: json,
|
|
27
|
-
isIPList: envIsIpList,
|
|
28
|
-
isPath: envIsPath,
|
|
29
|
-
isHostList: envIsHostList,
|
|
30
|
-
isStringList: envIsStringList
|
|
31
|
-
};
|
|
1
|
+
import { bool, num, host, email, port, url, json } from 'envalid';
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
envIsIpList,
|
|
5
|
+
envIsPath,
|
|
6
|
+
envIsHostList,
|
|
7
|
+
envIsStringList,
|
|
8
|
+
envIsString
|
|
9
|
+
} from './validators';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* envalid validators to use with checkEnvironment made with evalid.makeValidator and validator.js
|
|
13
|
+
* is* functions. + Also Added isString, isHost, and isIPList.
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* envalid docs: https://github.com/af/envalid
|
|
17
|
+
*/
|
|
18
|
+
export const envAssert = {
|
|
19
|
+
isString: envIsString,
|
|
20
|
+
isBoolean: bool,
|
|
21
|
+
isNumber: num,
|
|
22
|
+
isEmail: email,
|
|
23
|
+
isHost: host,
|
|
24
|
+
isPort: port,
|
|
25
|
+
isURL: url,
|
|
26
|
+
isJSON: json,
|
|
27
|
+
isIPList: envIsIpList,
|
|
28
|
+
isPath: envIsPath,
|
|
29
|
+
isHostList: envIsHostList,
|
|
30
|
+
isStringList: envIsStringList
|
|
31
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './envAssert';
|
|
1
|
+
export * from './envAssert';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { makeValidator } from 'envalid';
|
|
2
|
-
import validator from 'validator';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Validate that a string is a list of comma separated host names
|
|
6
|
-
*/
|
|
7
|
-
export const envIsHostList = makeValidator((value): boolean => {
|
|
8
|
-
if (!value) throw new Error('expected a host name');
|
|
9
|
-
const hosts = value.split(',');
|
|
10
|
-
const valid = hosts.every(
|
|
11
|
-
(host) =>
|
|
12
|
-
validator.isIP(host.trim()) ||
|
|
13
|
-
validator.isFQDN(host.trim(), { require_tld: false })
|
|
14
|
-
);
|
|
15
|
-
if (!valid) throw new Error('expected a host name');
|
|
16
|
-
return valid;
|
|
17
|
-
});
|
|
1
|
+
import { makeValidator } from 'envalid';
|
|
2
|
+
import validator from 'validator';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Validate that a string is a list of comma separated host names
|
|
6
|
+
*/
|
|
7
|
+
export const envIsHostList = makeValidator((value): boolean => {
|
|
8
|
+
if (!value) throw new Error('expected a host name');
|
|
9
|
+
const hosts = value.split(',');
|
|
10
|
+
const valid = hosts.every(
|
|
11
|
+
(host) =>
|
|
12
|
+
validator.isIP(host.trim()) ||
|
|
13
|
+
validator.isFQDN(host.trim(), { require_tld: false })
|
|
14
|
+
);
|
|
15
|
+
if (!valid) throw new Error('expected a host name');
|
|
16
|
+
return valid;
|
|
17
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './ipList';
|
|
2
|
-
export * from './path';
|
|
3
|
-
export * from './hostList';
|
|
4
|
-
export * from './stringList';
|
|
5
|
-
export * from './string';
|
|
1
|
+
export * from './ipList';
|
|
2
|
+
export * from './path';
|
|
3
|
+
export * from './hostList';
|
|
4
|
+
export * from './stringList';
|
|
5
|
+
export * from './string';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { makeValidator } from 'envalid';
|
|
2
|
-
import validator from 'validator';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Validate that a string is a list of comma separated ip (V4/V6) addresses
|
|
6
|
-
*/
|
|
7
|
-
export const envIsIpList = makeValidator((value): boolean => {
|
|
8
|
-
if (!value) throw new Error('expected an ip address');
|
|
9
|
-
const ips = value.split(',');
|
|
10
|
-
const valid = ips.every((v) => validator.isIP(v));
|
|
11
|
-
if (!valid) throw new Error('expected an ip address');
|
|
12
|
-
return valid;
|
|
13
|
-
});
|
|
1
|
+
import { makeValidator } from 'envalid';
|
|
2
|
+
import validator from 'validator';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Validate that a string is a list of comma separated ip (V4/V6) addresses
|
|
6
|
+
*/
|
|
7
|
+
export const envIsIpList = makeValidator((value): boolean => {
|
|
8
|
+
if (!value) throw new Error('expected an ip address');
|
|
9
|
+
const ips = value.split(',');
|
|
10
|
+
const valid = ips.every((v) => validator.isIP(v));
|
|
11
|
+
if (!valid) throw new Error('expected an ip address');
|
|
12
|
+
return valid;
|
|
13
|
+
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { makeValidator } from 'envalid';
|
|
2
|
-
|
|
3
|
-
const pathRegex = /^(\.\.\/(?:\.\.\/)*)?(?!.*?\/\/)(?!(?:.*\/)?\.+(?:\/|$)).+$/;
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Validate that a string is a system path (linux only)
|
|
7
|
-
*/
|
|
8
|
-
export const envIsPath = makeValidator((value): boolean => {
|
|
9
|
-
if (!value) throw new Error('expected a path');
|
|
10
|
-
const valid = pathRegex.test(value);
|
|
11
|
-
if (!valid) throw new Error('expected a path');
|
|
12
|
-
return valid;
|
|
13
|
-
});
|
|
1
|
+
import { makeValidator } from 'envalid';
|
|
2
|
+
|
|
3
|
+
const pathRegex = /^(\.\.\/(?:\.\.\/)*)?(?!.*?\/\/)(?!(?:.*\/)?\.+(?:\/|$)).+$/;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Validate that a string is a system path (linux only)
|
|
7
|
+
*/
|
|
8
|
+
export const envIsPath = makeValidator((value): boolean => {
|
|
9
|
+
if (!value) throw new Error('expected a path');
|
|
10
|
+
const valid = pathRegex.test(value);
|
|
11
|
+
if (!valid) throw new Error('expected a path');
|
|
12
|
+
return valid;
|
|
13
|
+
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { makeValidator } from 'envalid';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Validate that aa value is a string
|
|
5
|
-
*/
|
|
6
|
-
export const envIsString = makeValidator((value): boolean => {
|
|
7
|
-
if (!value || typeof value !== 'string') throw new Error('expected a string');
|
|
8
|
-
return value.length > 0;
|
|
9
|
-
});
|
|
1
|
+
import { makeValidator } from 'envalid';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate that aa value is a string
|
|
5
|
+
*/
|
|
6
|
+
export const envIsString = makeValidator((value): boolean => {
|
|
7
|
+
if (!value || typeof value !== 'string') throw new Error('expected a string');
|
|
8
|
+
return value.length > 0;
|
|
9
|
+
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { makeValidator } from 'envalid';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Validate that a string is a list of comma separated strings
|
|
5
|
-
|
|
6
|
-
*/
|
|
7
|
-
export const envIsStringList = makeValidator((value): boolean => {
|
|
8
|
-
if (!value) throw new Error('expected a string');
|
|
9
|
-
const strings = value.split(',');
|
|
10
|
-
const valid = strings.every((v) => typeof v === 'string');
|
|
11
|
-
if (!valid) throw new Error('expected a string');
|
|
12
|
-
return valid;
|
|
13
|
-
});
|
|
1
|
+
import { makeValidator } from 'envalid';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate that a string is a list of comma separated strings
|
|
5
|
+
|
|
6
|
+
*/
|
|
7
|
+
export const envIsStringList = makeValidator((value): boolean => {
|
|
8
|
+
if (!value) throw new Error('expected a string');
|
|
9
|
+
const strings = value.split(',');
|
|
10
|
+
const valid = strings.every((v) => typeof v === 'string');
|
|
11
|
+
if (!valid) throw new Error('expected a string');
|
|
12
|
+
return valid;
|
|
13
|
+
});
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filters an object, returns a copy of that object with only the keys specified in the whitelist
|
|
3
|
-
* @param object - The object to filter
|
|
4
|
-
* @param whitelist - A list of keys to keep
|
|
5
|
-
*/
|
|
6
|
-
export function filter<T extends Record<string, unknown>>(
|
|
7
|
-
object: T,
|
|
8
|
-
whitelist: Array<string>
|
|
9
|
-
): T {
|
|
10
|
-
const copy: Record<string, unknown> = {};
|
|
11
|
-
for (const key of Object.keys(object)) {
|
|
12
|
-
if (whitelist.includes(key)) {
|
|
13
|
-
copy[key] = object[key];
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return copy as T;
|
|
17
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Filters an object, returns a copy of that object with only the keys specified in the whitelist
|
|
3
|
+
* @param object - The object to filter
|
|
4
|
+
* @param whitelist - A list of keys to keep
|
|
5
|
+
*/
|
|
6
|
+
export function filter<T extends Record<string, unknown>>(
|
|
7
|
+
object: T,
|
|
8
|
+
whitelist: Array<string>
|
|
9
|
+
): T {
|
|
10
|
+
const copy: Record<string, unknown> = {};
|
|
11
|
+
for (const key of Object.keys(object)) {
|
|
12
|
+
if (whitelist.includes(key)) {
|
|
13
|
+
copy[key] = object[key];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
return copy as T;
|
|
17
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './filter';
|
|
1
|
+
export * from './filter';
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
-
import chai, { expect } from 'chai';
|
|
3
|
-
import { faker } from '@faker-js/faker';
|
|
4
|
-
import { stub, SinonStub, match } from 'sinon';
|
|
5
|
-
import sinonChai from 'sinon-chai';
|
|
6
|
-
import { getDynamicLink } from './getDynamicLink';
|
|
7
|
-
import { DynamicLinkResponseBody } from './getDynamicLink.types';
|
|
8
|
-
import * as tlsRequest from 'utils/tlsRequest/tlsRequest';
|
|
9
|
-
|
|
10
|
-
chai.use(sinonChai);
|
|
11
|
-
|
|
12
|
-
describe('Utils - Get Dynamic Link', () => {
|
|
13
|
-
let expectedPayload: AxiosRequestConfig;
|
|
14
|
-
let path: string;
|
|
15
|
-
let requestStub: SinonStub;
|
|
16
|
-
let link: string;
|
|
17
|
-
|
|
18
|
-
beforeEach(() => {
|
|
19
|
-
link = faker.internet.url();
|
|
20
|
-
requestStub = stub(tlsRequest, 'tlsRequest').resolves({
|
|
21
|
-
data: { link }
|
|
22
|
-
} as AxiosResponse<DynamicLinkResponseBody>);
|
|
23
|
-
path = faker.system.directoryPath();
|
|
24
|
-
expectedPayload = {
|
|
25
|
-
method: 'get',
|
|
26
|
-
url: '/link',
|
|
27
|
-
baseURL: process.env.LINKS_SERVICE_URL,
|
|
28
|
-
params: {
|
|
29
|
-
path
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
it('should get a dynamic link', async () => {
|
|
35
|
-
// should return a link from the res
|
|
36
|
-
const dynamicLink = await getDynamicLink(path);
|
|
37
|
-
expect(dynamicLink).to.equal(link);
|
|
38
|
-
expect(requestStub).to.have.been.calledOnceWithExactly(
|
|
39
|
-
match(expectedPayload)
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
it('should get a dynamic link with custom settings', async () => {
|
|
44
|
-
// should return a link from the res
|
|
45
|
-
const dynamicLink = await getDynamicLink(path, { short: false });
|
|
46
|
-
expect(dynamicLink).to.equal(link);
|
|
47
|
-
expect(requestStub).to.have.been.calledOnceWithExactly(
|
|
48
|
-
match({ ...expectedPayload, params: { path, short: false } })
|
|
49
|
-
);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
1
|
+
import { AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
2
|
+
import chai, { expect } from 'chai';
|
|
3
|
+
import { faker } from '@faker-js/faker';
|
|
4
|
+
import { stub, SinonStub, match } from 'sinon';
|
|
5
|
+
import sinonChai from 'sinon-chai';
|
|
6
|
+
import { getDynamicLink } from './getDynamicLink';
|
|
7
|
+
import { DynamicLinkResponseBody } from './getDynamicLink.types';
|
|
8
|
+
import * as tlsRequest from 'utils/tlsRequest/tlsRequest';
|
|
9
|
+
|
|
10
|
+
chai.use(sinonChai);
|
|
11
|
+
|
|
12
|
+
describe('Utils - Get Dynamic Link', () => {
|
|
13
|
+
let expectedPayload: AxiosRequestConfig;
|
|
14
|
+
let path: string;
|
|
15
|
+
let requestStub: SinonStub;
|
|
16
|
+
let link: string;
|
|
17
|
+
|
|
18
|
+
beforeEach(() => {
|
|
19
|
+
link = faker.internet.url();
|
|
20
|
+
requestStub = stub(tlsRequest, 'tlsRequest').resolves({
|
|
21
|
+
data: { link }
|
|
22
|
+
} as AxiosResponse<DynamicLinkResponseBody>);
|
|
23
|
+
path = faker.system.directoryPath();
|
|
24
|
+
expectedPayload = {
|
|
25
|
+
method: 'get',
|
|
26
|
+
url: '/link',
|
|
27
|
+
baseURL: process.env.LINKS_SERVICE_URL,
|
|
28
|
+
params: {
|
|
29
|
+
path
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
it('should get a dynamic link', async () => {
|
|
35
|
+
// should return a link from the res
|
|
36
|
+
const dynamicLink = await getDynamicLink(path);
|
|
37
|
+
expect(dynamicLink).to.equal(link);
|
|
38
|
+
expect(requestStub).to.have.been.calledOnceWithExactly(
|
|
39
|
+
match(expectedPayload)
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
it('should get a dynamic link with custom settings', async () => {
|
|
44
|
+
// should return a link from the res
|
|
45
|
+
const dynamicLink = await getDynamicLink(path, { short: false });
|
|
46
|
+
expect(dynamicLink).to.equal(link);
|
|
47
|
+
expect(requestStub).to.have.been.calledOnceWithExactly(
|
|
48
|
+
match({ ...expectedPayload, params: { path, short: false } })
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { AxiosRequestConfig } from 'axios';
|
|
2
|
-
import {
|
|
3
|
-
getDynamicLinksOptions,
|
|
4
|
-
DynamicLinkResponseBody
|
|
5
|
-
} from './getDynamicLink.types';
|
|
6
|
-
import { validateDynamicLinkEnvironment } from './getDynamicLink.validate';
|
|
7
|
-
import { tlsRequest } from 'utils/tlsRequest';
|
|
8
|
-
|
|
9
|
-
/** Fetch a dynamic link from the links service */
|
|
10
|
-
export async function getDynamicLink(
|
|
11
|
-
path: string,
|
|
12
|
-
options: getDynamicLinksOptions = {}
|
|
13
|
-
): Promise<string> {
|
|
14
|
-
validateDynamicLinkEnvironment();
|
|
15
|
-
const option: AxiosRequestConfig = {
|
|
16
|
-
method: 'get',
|
|
17
|
-
url: '/link',
|
|
18
|
-
baseURL: process.env.LINKS_SERVICE_URL,
|
|
19
|
-
params: {
|
|
20
|
-
path,
|
|
21
|
-
short: options.short ?? true
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
const {
|
|
25
|
-
data: { link }
|
|
26
|
-
} = await tlsRequest<DynamicLinkResponseBody>(option);
|
|
27
|
-
return link;
|
|
28
|
-
}
|
|
1
|
+
import { AxiosRequestConfig } from 'axios';
|
|
2
|
+
import {
|
|
3
|
+
getDynamicLinksOptions,
|
|
4
|
+
DynamicLinkResponseBody
|
|
5
|
+
} from './getDynamicLink.types';
|
|
6
|
+
import { validateDynamicLinkEnvironment } from './getDynamicLink.validate';
|
|
7
|
+
import { tlsRequest } from 'utils/tlsRequest';
|
|
8
|
+
|
|
9
|
+
/** Fetch a dynamic link from the links service */
|
|
10
|
+
export async function getDynamicLink(
|
|
11
|
+
path: string,
|
|
12
|
+
options: getDynamicLinksOptions = {}
|
|
13
|
+
): Promise<string> {
|
|
14
|
+
validateDynamicLinkEnvironment();
|
|
15
|
+
const option: AxiosRequestConfig = {
|
|
16
|
+
method: 'get',
|
|
17
|
+
url: '/link',
|
|
18
|
+
baseURL: process.env.LINKS_SERVICE_URL,
|
|
19
|
+
params: {
|
|
20
|
+
path,
|
|
21
|
+
short: options.short ?? true
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const {
|
|
25
|
+
data: { link }
|
|
26
|
+
} = await tlsRequest<DynamicLinkResponseBody>(option);
|
|
27
|
+
return link;
|
|
28
|
+
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
/** Options to fetch dynamic links */
|
|
2
|
-
export interface getDynamicLinksOptions {
|
|
3
|
-
/** Make a shortened link */
|
|
4
|
-
short?: boolean;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
/** Dynamic link query server response */
|
|
8
|
-
export interface DynamicLinkResponseBody {
|
|
9
|
-
/** The generated dynamic link */
|
|
10
|
-
link: string;
|
|
11
|
-
}
|
|
1
|
+
/** Options to fetch dynamic links */
|
|
2
|
+
export interface getDynamicLinksOptions {
|
|
3
|
+
/** Make a shortened link */
|
|
4
|
+
short?: boolean;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/** Dynamic link query server response */
|
|
8
|
+
export interface DynamicLinkResponseBody {
|
|
9
|
+
/** The generated dynamic link */
|
|
10
|
+
link: string;
|
|
11
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { assertEnvironment, envAssert } from 'utils';
|
|
2
|
-
|
|
3
|
-
/** Environment variable validator for get dynamic link from LinkService */
|
|
4
|
-
export function validateDynamicLinkEnvironment(): void {
|
|
5
|
-
assertEnvironment({ LINKS_SERVICE_URL: envAssert.isURL() });
|
|
6
|
-
}
|
|
1
|
+
import { assertEnvironment, envAssert } from 'utils';
|
|
2
|
+
|
|
3
|
+
/** Environment variable validator for get dynamic link from LinkService */
|
|
4
|
+
export function validateDynamicLinkEnvironment(): void {
|
|
5
|
+
assertEnvironment({ LINKS_SERVICE_URL: envAssert.isURL() });
|
|
6
|
+
}
|