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,46 +1,46 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import express from 'express';
|
|
3
|
-
import { Counter } from 'prom-client';
|
|
4
|
-
import request from 'supertest';
|
|
5
|
-
import { metrics } from './metrics';
|
|
6
|
-
import { serviceRegistry, instanceRegistry } from 'const/metrics';
|
|
7
|
-
|
|
8
|
-
describe('Middleware - metrics', () => {
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
instanceRegistry.clear();
|
|
11
|
-
serviceRegistry.clear();
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('should export instance metrics', async () => {
|
|
15
|
-
new Counter({
|
|
16
|
-
name: 'instance_test',
|
|
17
|
-
help: 'instance_test',
|
|
18
|
-
registers: [instanceRegistry]
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const app = express();
|
|
22
|
-
app.use(metrics());
|
|
23
|
-
|
|
24
|
-
const { text } = await request(app).get('/metrics/instance').expect(200);
|
|
25
|
-
expect(text).to.equal(
|
|
26
|
-
'# HELP instance_test instance_test\n# TYPE instance_test counter\ninstance_test 0\n'
|
|
27
|
-
);
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
it('should export service metrics', async () => {
|
|
31
|
-
new Counter({
|
|
32
|
-
name: 'service_test',
|
|
33
|
-
help: 'service_test',
|
|
34
|
-
registers: [serviceRegistry]
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const app = express();
|
|
38
|
-
app.use(metrics());
|
|
39
|
-
|
|
40
|
-
const { text } = await request(app).get('/metrics/service').expect(200);
|
|
41
|
-
|
|
42
|
-
expect(text).to.equal(
|
|
43
|
-
'# HELP service_test service_test\n# TYPE service_test counter\nservice_test 0\n'
|
|
44
|
-
);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import { Counter } from 'prom-client';
|
|
4
|
+
import request from 'supertest';
|
|
5
|
+
import { metrics } from './metrics';
|
|
6
|
+
import { serviceRegistry, instanceRegistry } from 'const/metrics';
|
|
7
|
+
|
|
8
|
+
describe('Middleware - metrics', () => {
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
instanceRegistry.clear();
|
|
11
|
+
serviceRegistry.clear();
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('should export instance metrics', async () => {
|
|
15
|
+
new Counter({
|
|
16
|
+
name: 'instance_test',
|
|
17
|
+
help: 'instance_test',
|
|
18
|
+
registers: [instanceRegistry]
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const app = express();
|
|
22
|
+
app.use(metrics());
|
|
23
|
+
|
|
24
|
+
const { text } = await request(app).get('/metrics/instance').expect(200);
|
|
25
|
+
expect(text).to.equal(
|
|
26
|
+
'# HELP instance_test instance_test\n# TYPE instance_test counter\ninstance_test 0\n'
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('should export service metrics', async () => {
|
|
31
|
+
new Counter({
|
|
32
|
+
name: 'service_test',
|
|
33
|
+
help: 'service_test',
|
|
34
|
+
registers: [serviceRegistry]
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const app = express();
|
|
38
|
+
app.use(metrics());
|
|
39
|
+
|
|
40
|
+
const { text } = await request(app).get('/metrics/service').expect(200);
|
|
41
|
+
|
|
42
|
+
expect(text).to.equal(
|
|
43
|
+
'# HELP service_test service_test\n# TYPE service_test counter\nservice_test 0\n'
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { Router, Request, Response } from 'express';
|
|
2
|
-
import { instanceRegistry, serviceRegistry } from 'const/metrics';
|
|
3
|
-
import { reportError } from 'utils/report';
|
|
4
|
-
|
|
5
|
-
/** Middleware that calculates request time, and exposes metrics related to requests processed by this service */
|
|
6
|
-
export function metrics(): Router {
|
|
7
|
-
return Router()
|
|
8
|
-
.use('/metrics/instance', (req: Request, res: Response) => {
|
|
9
|
-
(async (): Promise<void> => {
|
|
10
|
-
res.set('Content-Type', instanceRegistry.contentType);
|
|
11
|
-
res.end(await instanceRegistry.metrics());
|
|
12
|
-
})().catch((error: Error) => {
|
|
13
|
-
reportError(error);
|
|
14
|
-
});
|
|
15
|
-
})
|
|
16
|
-
.use('/metrics/service', (req: Request, res: Response) => {
|
|
17
|
-
(async (): Promise<void> => {
|
|
18
|
-
res.set('Content-Type', serviceRegistry.contentType);
|
|
19
|
-
res.end(await serviceRegistry.metrics());
|
|
20
|
-
})().catch((error: Error) => {
|
|
21
|
-
reportError(error);
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
}
|
|
1
|
+
import { Router, Request, Response } from 'express';
|
|
2
|
+
import { instanceRegistry, serviceRegistry } from 'const/metrics';
|
|
3
|
+
import { reportError } from 'utils/report';
|
|
4
|
+
|
|
5
|
+
/** Middleware that calculates request time, and exposes metrics related to requests processed by this service */
|
|
6
|
+
export function metrics(): Router {
|
|
7
|
+
return Router()
|
|
8
|
+
.use('/metrics/instance', (req: Request, res: Response) => {
|
|
9
|
+
(async (): Promise<void> => {
|
|
10
|
+
res.set('Content-Type', instanceRegistry.contentType);
|
|
11
|
+
res.end(await instanceRegistry.metrics());
|
|
12
|
+
})().catch((error: Error) => {
|
|
13
|
+
reportError(error);
|
|
14
|
+
});
|
|
15
|
+
})
|
|
16
|
+
.use('/metrics/service', (req: Request, res: Response) => {
|
|
17
|
+
(async (): Promise<void> => {
|
|
18
|
+
res.set('Content-Type', serviceRegistry.contentType);
|
|
19
|
+
res.end(await serviceRegistry.metrics());
|
|
20
|
+
})().catch((error: Error) => {
|
|
21
|
+
reportError(error);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './requestMetrics';
|
|
1
|
+
export * from './requestMetrics';
|
|
@@ -1,77 +1,77 @@
|
|
|
1
|
-
import { expect } from 'chai';
|
|
2
|
-
import express from 'express';
|
|
3
|
-
import { faker } from '@faker-js/faker';
|
|
4
|
-
import { stub, match, SinonStub } from 'sinon';
|
|
5
|
-
import request from 'supertest';
|
|
6
|
-
import { requestMetrics } from './requestMetrics';
|
|
7
|
-
import { httpRequestCount, httpRequestDuration } from 'metrics/request';
|
|
8
|
-
|
|
9
|
-
describe('Middleware - requestMetrics', function () {
|
|
10
|
-
let requestCountStub: SinonStub;
|
|
11
|
-
let requestDurationStub: SinonStub;
|
|
12
|
-
|
|
13
|
-
beforeEach(() => {
|
|
14
|
-
requestCountStub = stub(httpRequestCount, 'inc').returns();
|
|
15
|
-
requestDurationStub = stub(httpRequestDuration, 'observe').returns();
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
it('should handle metrics for the requests', async () => {
|
|
19
|
-
const service = faker.lorem.word();
|
|
20
|
-
process.env.CHART = service;
|
|
21
|
-
|
|
22
|
-
const app = express();
|
|
23
|
-
app.use(requestMetrics);
|
|
24
|
-
app.get('/test', function (req, res) {
|
|
25
|
-
res.sendStatus(200);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
await request(app).get('/test').expect(200);
|
|
29
|
-
|
|
30
|
-
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
31
|
-
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
32
|
-
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
33
|
-
labels,
|
|
34
|
-
match.number
|
|
35
|
-
);
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('should not keep query parameters in path', async () => {
|
|
39
|
-
const service = faker.lorem.word();
|
|
40
|
-
process.env.CHART = service;
|
|
41
|
-
|
|
42
|
-
const app = express();
|
|
43
|
-
app.use(requestMetrics);
|
|
44
|
-
app.get('/test', function (req, res) {
|
|
45
|
-
res.sendStatus(200);
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
await request(app).get('/test?param=value').expect(200);
|
|
49
|
-
|
|
50
|
-
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
51
|
-
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
52
|
-
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
53
|
-
labels,
|
|
54
|
-
match.number
|
|
55
|
-
);
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
it('should not keep anchor in path', async () => {
|
|
59
|
-
const service = faker.lorem.word();
|
|
60
|
-
process.env.CHART = service;
|
|
61
|
-
|
|
62
|
-
const app = express();
|
|
63
|
-
app.use(requestMetrics);
|
|
64
|
-
app.get('/test', function (req, res) {
|
|
65
|
-
res.sendStatus(200);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
await request(app).get('/test#place').expect(200);
|
|
69
|
-
|
|
70
|
-
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
71
|
-
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
72
|
-
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
73
|
-
labels,
|
|
74
|
-
match.number
|
|
75
|
-
);
|
|
76
|
-
});
|
|
77
|
-
});
|
|
1
|
+
import { expect } from 'chai';
|
|
2
|
+
import express from 'express';
|
|
3
|
+
import { faker } from '@faker-js/faker';
|
|
4
|
+
import { stub, match, SinonStub } from 'sinon';
|
|
5
|
+
import request from 'supertest';
|
|
6
|
+
import { requestMetrics } from './requestMetrics';
|
|
7
|
+
import { httpRequestCount, httpRequestDuration } from 'metrics/request';
|
|
8
|
+
|
|
9
|
+
describe('Middleware - requestMetrics', function () {
|
|
10
|
+
let requestCountStub: SinonStub;
|
|
11
|
+
let requestDurationStub: SinonStub;
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
requestCountStub = stub(httpRequestCount, 'inc').returns();
|
|
15
|
+
requestDurationStub = stub(httpRequestDuration, 'observe').returns();
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should handle metrics for the requests', async () => {
|
|
19
|
+
const service = faker.lorem.word();
|
|
20
|
+
process.env.CHART = service;
|
|
21
|
+
|
|
22
|
+
const app = express();
|
|
23
|
+
app.use(requestMetrics);
|
|
24
|
+
app.get('/test', function (req, res) {
|
|
25
|
+
res.sendStatus(200);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
await request(app).get('/test').expect(200);
|
|
29
|
+
|
|
30
|
+
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
31
|
+
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
32
|
+
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
33
|
+
labels,
|
|
34
|
+
match.number
|
|
35
|
+
);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should not keep query parameters in path', async () => {
|
|
39
|
+
const service = faker.lorem.word();
|
|
40
|
+
process.env.CHART = service;
|
|
41
|
+
|
|
42
|
+
const app = express();
|
|
43
|
+
app.use(requestMetrics);
|
|
44
|
+
app.get('/test', function (req, res) {
|
|
45
|
+
res.sendStatus(200);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
await request(app).get('/test?param=value').expect(200);
|
|
49
|
+
|
|
50
|
+
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
51
|
+
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
52
|
+
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
53
|
+
labels,
|
|
54
|
+
match.number
|
|
55
|
+
);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it('should not keep anchor in path', async () => {
|
|
59
|
+
const service = faker.lorem.word();
|
|
60
|
+
process.env.CHART = service;
|
|
61
|
+
|
|
62
|
+
const app = express();
|
|
63
|
+
app.use(requestMetrics);
|
|
64
|
+
app.get('/test', function (req, res) {
|
|
65
|
+
res.sendStatus(200);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
await request(app).get('/test#place').expect(200);
|
|
69
|
+
|
|
70
|
+
const labels = { service, path: '/test', method: 'GET', status: '2XX' };
|
|
71
|
+
expect(requestCountStub).to.have.been.calledOnceWithExactly(labels);
|
|
72
|
+
expect(requestDurationStub).to.have.been.calledOnceWithExactly(
|
|
73
|
+
labels,
|
|
74
|
+
match.number
|
|
75
|
+
);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import responseTime from 'response-time';
|
|
3
|
-
import { httpRequestCount, httpRequestDuration } from 'metrics';
|
|
4
|
-
|
|
5
|
-
/** Middleware that gets metrics on each request */
|
|
6
|
-
export const requestMetrics = responseTime(
|
|
7
|
-
(request: Request, response: Response, time: number) => {
|
|
8
|
-
const labels = {
|
|
9
|
-
path: (request.route?.path ?? request.path) as string,
|
|
10
|
-
method: request.method,
|
|
11
|
-
status: response.statusCode
|
|
12
|
-
? `${response.statusCode.toString().substring(0, 1)}XX`
|
|
13
|
-
: '',
|
|
14
|
-
service: process.env.CHART
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
httpRequestCount.inc(labels);
|
|
18
|
-
httpRequestDuration.observe(labels, time / 1000);
|
|
19
|
-
}
|
|
20
|
-
);
|
|
1
|
+
import { Request, Response } from 'express';
|
|
2
|
+
import responseTime from 'response-time';
|
|
3
|
+
import { httpRequestCount, httpRequestDuration } from 'metrics';
|
|
4
|
+
|
|
5
|
+
/** Middleware that gets metrics on each request */
|
|
6
|
+
export const requestMetrics = responseTime(
|
|
7
|
+
(request: Request, response: Response, time: number) => {
|
|
8
|
+
const labels = {
|
|
9
|
+
path: (request.route?.path ?? request.path) as string,
|
|
10
|
+
method: request.method,
|
|
11
|
+
status: response.statusCode
|
|
12
|
+
? `${response.statusCode.toString().substring(0, 1)}XX`
|
|
13
|
+
: '',
|
|
14
|
+
service: process.env.CHART
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
httpRequestCount.inc(labels);
|
|
18
|
+
httpRequestDuration.observe(labels, time / 1000);
|
|
19
|
+
}
|
|
20
|
+
);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './swaggerDocs';
|
|
2
|
-
export * from './swaggerDocs.types';
|
|
1
|
+
export * from './swaggerDocs';
|
|
2
|
+
export * from './swaggerDocs.types';
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
import { Router } from 'express';
|
|
3
|
-
import { glob } from 'glob';
|
|
4
|
-
import YAML from 'yamljs';
|
|
5
|
-
import swaggerUi from 'swagger-ui-express';
|
|
6
|
-
import {
|
|
7
|
-
EndpointDocumentation,
|
|
8
|
-
IndexDocumentation,
|
|
9
|
-
ResponsesConfig,
|
|
10
|
-
EndpointConfig,
|
|
11
|
-
SchemasConfig,
|
|
12
|
-
SwaggerConfig
|
|
13
|
-
} from './swaggerDocs.types';
|
|
14
|
-
|
|
15
|
-
/** Get the paths of all the endpoint documentation files */
|
|
16
|
-
function getEndpointDocPaths(): Array<string> {
|
|
17
|
-
return [
|
|
18
|
-
...glob.sync(`${process.cwd()}/src/**/*.docs.yaml`),
|
|
19
|
-
...glob.sync(`${process.cwd()}/dist/**/*.docs.yaml`)
|
|
20
|
-
];
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Get the paths of all the schema files */
|
|
24
|
-
function getSchemaPaths(): Array<string> {
|
|
25
|
-
return [
|
|
26
|
-
...glob.sync(`${process.cwd()}/src/docs/schemas/*.yaml`),
|
|
27
|
-
...glob.sync(`${process.cwd()}/dist/docs/schemas/*.yaml`)
|
|
28
|
-
];
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/** Get the paths of all the response files */
|
|
32
|
-
function getResponsePaths(): Array<string> {
|
|
33
|
-
return [
|
|
34
|
-
...glob.sync(`${process.cwd()}/src/docs/responses/*.yaml`),
|
|
35
|
-
...glob.sync(`${process.cwd()}/dist/docs/responses/*.yaml`)
|
|
36
|
-
];
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Load all data files and merge them in a single object
|
|
41
|
-
* @param files
|
|
42
|
-
* @return {Object}
|
|
43
|
-
*/
|
|
44
|
-
function loadAndMergeData(files: Array<string>): EndpointDocumentation {
|
|
45
|
-
return files
|
|
46
|
-
.map((file) => YAML.load(file) as EndpointDocumentation)
|
|
47
|
-
.reduce((result, endpoint) => {
|
|
48
|
-
for (const path of Object.keys(endpoint)) {
|
|
49
|
-
if (!(path in result)) result[path] = {};
|
|
50
|
-
result[path] = { ...result[path], ...endpoint[path] };
|
|
51
|
-
}
|
|
52
|
-
return result;
|
|
53
|
-
}, {});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/** Load documentation files of all the endpoints */
|
|
57
|
-
function loadEndpoints(): EndpointConfig {
|
|
58
|
-
const paths = getEndpointDocPaths();
|
|
59
|
-
const endpoints = loadAndMergeData(paths);
|
|
60
|
-
return {
|
|
61
|
-
paths: endpoints
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** Load documentation files of all the schemas */
|
|
66
|
-
function loadSchemas(): SchemasConfig {
|
|
67
|
-
const paths = getSchemaPaths();
|
|
68
|
-
const schemas = loadAndMergeData(paths);
|
|
69
|
-
return { schemas };
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/** Load documentation files of all the responses */
|
|
73
|
-
function loadResponses(): ResponsesConfig {
|
|
74
|
-
const paths = getResponsePaths();
|
|
75
|
-
const responses = loadAndMergeData(paths);
|
|
76
|
-
return { responses };
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** Load the whole Swagger config */
|
|
80
|
-
function loadConfig(): SwaggerConfig {
|
|
81
|
-
const indexPath = `${process.cwd()}/src/docs/index.yaml`;
|
|
82
|
-
const config = (
|
|
83
|
-
fs.existsSync(indexPath) ? YAML.load(indexPath) : {}
|
|
84
|
-
) as IndexDocumentation;
|
|
85
|
-
const schemaConfig = loadSchemas();
|
|
86
|
-
const responseConfig = loadResponses();
|
|
87
|
-
const endpointConfig = loadEndpoints();
|
|
88
|
-
return {
|
|
89
|
-
...config,
|
|
90
|
-
...endpointConfig,
|
|
91
|
-
components: {
|
|
92
|
-
...config.components,
|
|
93
|
-
...schemaConfig,
|
|
94
|
-
...responseConfig
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Get a middleware that serves the documentation
|
|
101
|
-
* @return {Router}
|
|
102
|
-
*/
|
|
103
|
-
export function swaggerDocs(): Router {
|
|
104
|
-
// Stringify the result and replace any environment variable, then turn it again to an object
|
|
105
|
-
const stringifiedDocumentation = JSON.stringify(loadConfig());
|
|
106
|
-
const placeholderRegex = /##(.+?)##/g;
|
|
107
|
-
const overwrittenDocumentation = stringifiedDocumentation.replace(
|
|
108
|
-
placeholderRegex,
|
|
109
|
-
(match: string, p1: string): string => process.env[p1] ?? ''
|
|
110
|
-
);
|
|
111
|
-
const config = JSON.parse(overwrittenDocumentation) as EndpointDocumentation;
|
|
112
|
-
|
|
113
|
-
return Router().use('/docs', swaggerUi.serve, swaggerUi.setup(config));
|
|
114
|
-
}
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import { Router } from 'express';
|
|
3
|
+
import { glob } from 'glob';
|
|
4
|
+
import YAML from 'yamljs';
|
|
5
|
+
import swaggerUi from 'swagger-ui-express';
|
|
6
|
+
import {
|
|
7
|
+
EndpointDocumentation,
|
|
8
|
+
IndexDocumentation,
|
|
9
|
+
ResponsesConfig,
|
|
10
|
+
EndpointConfig,
|
|
11
|
+
SchemasConfig,
|
|
12
|
+
SwaggerConfig
|
|
13
|
+
} from './swaggerDocs.types';
|
|
14
|
+
|
|
15
|
+
/** Get the paths of all the endpoint documentation files */
|
|
16
|
+
function getEndpointDocPaths(): Array<string> {
|
|
17
|
+
return [
|
|
18
|
+
...glob.sync(`${process.cwd()}/src/**/*.docs.yaml`),
|
|
19
|
+
...glob.sync(`${process.cwd()}/dist/**/*.docs.yaml`)
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Get the paths of all the schema files */
|
|
24
|
+
function getSchemaPaths(): Array<string> {
|
|
25
|
+
return [
|
|
26
|
+
...glob.sync(`${process.cwd()}/src/docs/schemas/*.yaml`),
|
|
27
|
+
...glob.sync(`${process.cwd()}/dist/docs/schemas/*.yaml`)
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** Get the paths of all the response files */
|
|
32
|
+
function getResponsePaths(): Array<string> {
|
|
33
|
+
return [
|
|
34
|
+
...glob.sync(`${process.cwd()}/src/docs/responses/*.yaml`),
|
|
35
|
+
...glob.sync(`${process.cwd()}/dist/docs/responses/*.yaml`)
|
|
36
|
+
];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Load all data files and merge them in a single object
|
|
41
|
+
* @param files
|
|
42
|
+
* @return {Object}
|
|
43
|
+
*/
|
|
44
|
+
function loadAndMergeData(files: Array<string>): EndpointDocumentation {
|
|
45
|
+
return files
|
|
46
|
+
.map((file) => YAML.load(file) as EndpointDocumentation)
|
|
47
|
+
.reduce((result, endpoint) => {
|
|
48
|
+
for (const path of Object.keys(endpoint)) {
|
|
49
|
+
if (!(path in result)) result[path] = {};
|
|
50
|
+
result[path] = { ...result[path], ...endpoint[path] };
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}, {});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Load documentation files of all the endpoints */
|
|
57
|
+
function loadEndpoints(): EndpointConfig {
|
|
58
|
+
const paths = getEndpointDocPaths();
|
|
59
|
+
const endpoints = loadAndMergeData(paths);
|
|
60
|
+
return {
|
|
61
|
+
paths: endpoints
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Load documentation files of all the schemas */
|
|
66
|
+
function loadSchemas(): SchemasConfig {
|
|
67
|
+
const paths = getSchemaPaths();
|
|
68
|
+
const schemas = loadAndMergeData(paths);
|
|
69
|
+
return { schemas };
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Load documentation files of all the responses */
|
|
73
|
+
function loadResponses(): ResponsesConfig {
|
|
74
|
+
const paths = getResponsePaths();
|
|
75
|
+
const responses = loadAndMergeData(paths);
|
|
76
|
+
return { responses };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Load the whole Swagger config */
|
|
80
|
+
function loadConfig(): SwaggerConfig {
|
|
81
|
+
const indexPath = `${process.cwd()}/src/docs/index.yaml`;
|
|
82
|
+
const config = (
|
|
83
|
+
fs.existsSync(indexPath) ? YAML.load(indexPath) : {}
|
|
84
|
+
) as IndexDocumentation;
|
|
85
|
+
const schemaConfig = loadSchemas();
|
|
86
|
+
const responseConfig = loadResponses();
|
|
87
|
+
const endpointConfig = loadEndpoints();
|
|
88
|
+
return {
|
|
89
|
+
...config,
|
|
90
|
+
...endpointConfig,
|
|
91
|
+
components: {
|
|
92
|
+
...config.components,
|
|
93
|
+
...schemaConfig,
|
|
94
|
+
...responseConfig
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Get a middleware that serves the documentation
|
|
101
|
+
* @return {Router}
|
|
102
|
+
*/
|
|
103
|
+
export function swaggerDocs(): Router {
|
|
104
|
+
// Stringify the result and replace any environment variable, then turn it again to an object
|
|
105
|
+
const stringifiedDocumentation = JSON.stringify(loadConfig());
|
|
106
|
+
const placeholderRegex = /##(.+?)##/g;
|
|
107
|
+
const overwrittenDocumentation = stringifiedDocumentation.replace(
|
|
108
|
+
placeholderRegex,
|
|
109
|
+
(match: string, p1: string): string => process.env[p1] ?? ''
|
|
110
|
+
);
|
|
111
|
+
const config = JSON.parse(overwrittenDocumentation) as EndpointDocumentation;
|
|
112
|
+
|
|
113
|
+
return Router().use('/docs', swaggerUi.serve, swaggerUi.setup(config));
|
|
114
|
+
}
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
/** Documentation content */
|
|
2
|
-
export interface EndpointDocumentation {
|
|
3
|
-
[path: string]: { [key: string]: unknown };
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
/** Documentation content */
|
|
7
|
-
interface ComponentDocumentation {
|
|
8
|
-
[name: string]: { [key: string]: unknown };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
/** root documentation config */
|
|
12
|
-
export interface IndexDocumentation extends EndpointDocumentation {
|
|
13
|
-
/** Global components to be documented */
|
|
14
|
-
components: ComponentDocumentation;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** Documentation config for endpoints */
|
|
18
|
-
export interface EndpointConfig {
|
|
19
|
-
/** Documentation content */
|
|
20
|
-
paths: EndpointDocumentation;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/** Documentation config for responses */
|
|
24
|
-
export interface ResponsesConfig {
|
|
25
|
-
/** Documentation content */
|
|
26
|
-
responses: ComponentDocumentation;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/** Documentation config for schemas */
|
|
30
|
-
export interface SchemasConfig {
|
|
31
|
-
/** Documentation content */
|
|
32
|
-
schemas: ComponentDocumentation;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export type SwaggerConfig = IndexDocumentation &
|
|
36
|
-
EndpointConfig & {
|
|
37
|
-
/** Shared components documentation */
|
|
38
|
-
components: IndexDocumentation['components'] &
|
|
39
|
-
ResponsesConfig &
|
|
40
|
-
SchemasConfig;
|
|
41
|
-
};
|
|
1
|
+
/** Documentation content */
|
|
2
|
+
export interface EndpointDocumentation {
|
|
3
|
+
[path: string]: { [key: string]: unknown };
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/** Documentation content */
|
|
7
|
+
interface ComponentDocumentation {
|
|
8
|
+
[name: string]: { [key: string]: unknown };
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** root documentation config */
|
|
12
|
+
export interface IndexDocumentation extends EndpointDocumentation {
|
|
13
|
+
/** Global components to be documented */
|
|
14
|
+
components: ComponentDocumentation;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Documentation config for endpoints */
|
|
18
|
+
export interface EndpointConfig {
|
|
19
|
+
/** Documentation content */
|
|
20
|
+
paths: EndpointDocumentation;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Documentation config for responses */
|
|
24
|
+
export interface ResponsesConfig {
|
|
25
|
+
/** Documentation content */
|
|
26
|
+
responses: ComponentDocumentation;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Documentation config for schemas */
|
|
30
|
+
export interface SchemasConfig {
|
|
31
|
+
/** Documentation content */
|
|
32
|
+
schemas: ComponentDocumentation;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export type SwaggerConfig = IndexDocumentation &
|
|
36
|
+
EndpointConfig & {
|
|
37
|
+
/** Shared components documentation */
|
|
38
|
+
components: IndexDocumentation['components'] &
|
|
39
|
+
ResponsesConfig &
|
|
40
|
+
SchemasConfig;
|
|
41
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './userResolver';
|
|
1
|
+
export * from './userResolver';
|