node-server-engine 1.4.8 → 1.5.0
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/.commitlintrc.js +27 -0
- package/.releaserc.js +56 -0
- package/README.md +154 -2
- package/dist/const/tokenIssuer.js +1 -0
- package/dist/const/tokenIssuer.js.map +1 -1
- package/dist/db/models/SequelizeMeta.js +3 -1
- package/dist/db/models/SequelizeMeta.js.map +1 -1
- package/dist/entities/ElasticSearch/ElasticSearch.js +1 -2
- package/dist/entities/ElasticSearch/ElasticSearch.js.map +1 -1
- package/dist/entities/SocketClient/SocketClient.js +1 -0
- package/dist/entities/SocketClient/SocketClient.js.map +1 -1
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/middleware/checkPermission/checkPermission.d.ts +1 -1
- package/dist/middleware/checkPermission/checkPermission.js +4 -2
- package/dist/middleware/checkPermission/checkPermission.js.map +1 -1
- package/dist/utils/createHttpServer/createHttpServer.js +1 -1
- package/dist/utils/createHttpServer/createHttpServer.js.map +1 -1
- package/dist/utils/jwt/jwt.js +1 -1
- package/dist/utils/jwt/jwt.js.map +1 -1
- package/dist/utils/semverCompare/semverCompare.js +1 -5
- package/dist/utils/semverCompare/semverCompare.js.map +1 -1
- package/package.json +30 -19
- package/.env.example +0 -186
- package/.github/workflows/publish.yml +0 -41
- package/.prettierrc +0 -7
- package/Dockerfile +0 -31
- package/babel.config.json +0 -34
- package/eslint.config.mjs +0 -11
- package/src/const/DebeziumEvent.ts +0 -6
- package/src/const/LogSeverity.ts +0 -7
- package/src/const/index.ts +0 -5
- package/src/const/metrics.ts +0 -6
- package/src/const/mime.ts +0 -37
- package/src/const/tokenIssuer.ts +0 -7
- package/src/db/migrations/20241030121500-create-sequelize-meta-table.ts +0 -29
- package/src/db/models/SequelizeMeta.ts +0 -16
- package/src/db/models/index.ts +0 -2
- package/src/entities/ElasticSearch/ElasticSearch.ts +0 -103
- package/src/entities/ElasticSearch/ElasticSearch.types.ts +0 -7
- package/src/entities/ElasticSearch/index.ts +0 -2
- package/src/entities/Endpoint/Endpoint.test.ts +0 -248
- package/src/entities/Endpoint/Endpoint.ts +0 -221
- package/src/entities/Endpoint/Endpoint.types.ts +0 -181
- package/src/entities/Endpoint/index.ts +0 -2
- package/src/entities/EngineError/EngineError.ts +0 -28
- package/src/entities/EngineError/EngineError.types.ts +0 -15
- package/src/entities/EngineError/index.ts +0 -2
- package/src/entities/KeySet/KeySet.test.ts +0 -126
- package/src/entities/KeySet/KeySet.ts +0 -172
- package/src/entities/KeySet/KeySet.types.ts +0 -28
- package/src/entities/KeySet/index.ts +0 -2
- package/src/entities/LifecycleController/LifecycleController.test.ts +0 -48
- package/src/entities/LifecycleController/LifecycleController.ts +0 -24
- package/src/entities/LifecycleController/LifecycleController.types.ts +0 -5
- package/src/entities/LifecycleController/index.ts +0 -2
- package/src/entities/Localizator/Localizator.ts +0 -139
- package/src/entities/Localizator/Localizator.types.ts +0 -52
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.test.ts +0 -165
- package/src/entities/Localizator/guessNamingConvention/guessNamingConvention.ts +0 -58
- package/src/entities/Localizator/guessNamingConvention/index.ts +0 -1
- package/src/entities/Localizator/index.ts +0 -2
- package/src/entities/MessageHandler/MessageHandler.test.ts +0 -130
- package/src/entities/MessageHandler/MessageHandler.ts +0 -72
- package/src/entities/MessageHandler/MessageHandler.types.ts +0 -15
- package/src/entities/MessageHandler/index.ts +0 -2
- package/src/entities/PubSub/PubSub.test.ts +0 -297
- package/src/entities/PubSub/PubSub.ts +0 -202
- package/src/entities/PubSub/PubSub.types.ts +0 -76
- package/src/entities/PubSub/handleMessage/handleMessage.test.ts +0 -102
- package/src/entities/PubSub/handleMessage/handleMessage.ts +0 -65
- package/src/entities/PubSub/handleMessage/index.ts +0 -1
- package/src/entities/PubSub/index.ts +0 -2
- package/src/entities/PushNotification/PushNotification.test.ts +0 -35
- package/src/entities/PushNotification/PushNotification.ts +0 -44
- package/src/entities/PushNotification/PushNotification.types.ts +0 -25
- package/src/entities/PushNotification/index.ts +0 -2
- package/src/entities/Redis/Redis.ts +0 -71
- package/src/entities/Redis/Redis.types.ts +0 -19
- package/src/entities/Redis/Redis.validate.ts +0 -17
- package/src/entities/Redis/index.ts +0 -2
- package/src/entities/Sequelize/Sequelize.config.ts +0 -59
- package/src/entities/Sequelize/Sequelize.test.ts +0 -21
- package/src/entities/Sequelize/Sequelize.ts +0 -75
- package/src/entities/Sequelize/Sequelize.types.ts +0 -10
- package/src/entities/Sequelize/Sequelize.validate.ts +0 -15
- package/src/entities/Sequelize/index.ts +0 -2
- package/src/entities/Server/Server.const.ts +0 -56
- package/src/entities/Server/Server.test.ts +0 -272
- package/src/entities/Server/Server.ts +0 -471
- package/src/entities/Server/Server.types.ts +0 -88
- package/src/entities/Server/index.ts +0 -2
- package/src/entities/SocketClient/SocketClient.test.ts +0 -392
- package/src/entities/SocketClient/SocketClient.ts +0 -401
- package/src/entities/SocketClient/SocketClient.types.ts +0 -62
- package/src/entities/SocketClient/index.ts +0 -2
- package/src/entities/SocketClient/parseMessage/index.ts +0 -1
- package/src/entities/SocketClient/parseMessage/parseMessage.test.ts +0 -20
- package/src/entities/SocketClient/parseMessage/parseMessage.ts +0 -26
- package/src/entities/Storage/Storage.test.ts +0 -58
- package/src/entities/Storage/Storage.ts +0 -219
- package/src/entities/Storage/Storage.types.ts +0 -57
- package/src/entities/Storage/index.ts +0 -2
- package/src/entities/ValidationError/ValidationError.ts +0 -34
- package/src/entities/ValidationError/index.ts +0 -1
- package/src/entities/WebError/WebError.test.ts +0 -18
- package/src/entities/WebError/WebError.ts +0 -23
- package/src/entities/WebError/WebError.types.ts +0 -9
- package/src/entities/WebError/index.ts +0 -2
- package/src/entities/index.ts +0 -16
- package/src/index.ts +0 -6
- package/src/metrics/debug.ts +0 -10
- package/src/metrics/index.ts +0 -2
- package/src/metrics/request.ts +0 -17
- package/src/middleware/authHmac/authHmac.test.ts +0 -86
- package/src/middleware/authHmac/authHmac.ts +0 -56
- package/src/middleware/authHmac/authHmac.types.ts +0 -7
- package/src/middleware/authHmac/index.ts +0 -2
- package/src/middleware/authJwt/authJwt.test.ts +0 -54
- package/src/middleware/authJwt/authJwt.ts +0 -55
- package/src/middleware/authJwt/authJwt.types.ts +0 -14
- package/src/middleware/authJwt/index.ts +0 -2
- package/src/middleware/authStatic/authStatic.test.ts +0 -36
- package/src/middleware/authStatic/authStatic.ts +0 -45
- package/src/middleware/authStatic/index.ts +0 -1
- package/src/middleware/authTls/authTls.test.ts +0 -138
- package/src/middleware/authTls/authTls.ts +0 -119
- package/src/middleware/authTls/authTls.types.ts +0 -13
- package/src/middleware/authTls/index.ts +0 -2
- package/src/middleware/checkPermission/checkPermission.ts +0 -33
- package/src/middleware/checkPermission/index.ts +0 -1
- package/src/middleware/error/error.test.ts +0 -60
- package/src/middleware/error/error.ts +0 -25
- package/src/middleware/error/index.ts +0 -1
- package/src/middleware/fileUploader/fileUploader.ts +0 -154
- package/src/middleware/fileUploader/fileUploader.types.ts +0 -35
- package/src/middleware/fileUploader/index.ts +0 -2
- package/src/middleware/fileUploader/isMultiPart/index.ts +0 -1
- package/src/middleware/fileUploader/isMultiPart/isMultipart.ts +0 -9
- package/src/middleware/fileUploader/validate/index.ts +0 -1
- package/src/middleware/fileUploader/validate/validate.ts +0 -27
- package/src/middleware/fourOhFour/fourOhFour.test.ts +0 -14
- package/src/middleware/fourOhFour/fourOhFour.ts +0 -13
- package/src/middleware/fourOhFour/index.ts +0 -1
- package/src/middleware/geminiFileUploader/geminiFileUploader.ts +0 -68
- package/src/middleware/geminiFileUploader/index.ts +0 -1
- package/src/middleware/healthCheck/healthCheck.test.ts +0 -12
- package/src/middleware/healthCheck/healthCheck.ts +0 -14
- package/src/middleware/healthCheck/index.ts +0 -1
- package/src/middleware/index.ts +0 -17
- package/src/middleware/metrics/index.ts +0 -1
- package/src/middleware/metrics/metrics.test.ts +0 -46
- package/src/middleware/metrics/metrics.ts +0 -24
- package/src/middleware/multiPartFileUploader/index.ts +0 -2
- package/src/middleware/multiPartFileUploader/multiPartFileUploader.ts +0 -249
- package/src/middleware/multiPartFileUploader/multiPartFileUploader.types.ts +0 -23
- package/src/middleware/multiPartFileUploader/validate/index.ts +0 -1
- package/src/middleware/multiPartFileUploader/validate/validate.ts +0 -27
- package/src/middleware/requestMetrics/index.ts +0 -1
- package/src/middleware/requestMetrics/requestMetrics.test.ts +0 -77
- package/src/middleware/requestMetrics/requestMetrics.ts +0 -20
- package/src/middleware/swaggerDocs/index.ts +0 -2
- package/src/middleware/swaggerDocs/swaggerDocs.ts +0 -114
- package/src/middleware/swaggerDocs/swaggerDocs.types.ts +0 -41
- package/src/middleware/userResolver/index.ts +0 -1
- package/src/middleware/userResolver/userResolver.ts +0 -53
- package/src/middleware/validate/index.ts +0 -1
- package/src/middleware/validate/validate.test.ts +0 -43
- package/src/middleware/validate/validate.ts +0 -25
- package/src/middleware/version/index.ts +0 -1
- package/src/middleware/version/version.test.ts +0 -23
- package/src/middleware/version/version.ts +0 -12
- package/src/utils/checkEnvironment/index.ts +0 -49
- package/src/utils/createHttpServer/createHttpServer.test.ts +0 -24
- package/src/utils/createHttpServer/createHttpServer.ts +0 -34
- package/src/utils/createHttpServer/createHttpServer.validate.ts +0 -17
- package/src/utils/createHttpServer/index.ts +0 -1
- package/src/utils/createSortedObject/createSortedObject.ts +0 -20
- package/src/utils/createSortedObject/createSortedObjet.test.ts +0 -47
- package/src/utils/createSortedObject/index.ts +0 -1
- package/src/utils/dbMigration/dbMigration.test.ts +0 -209
- package/src/utils/dbMigration/dbMigration.ts +0 -199
- package/src/utils/dbMigration/dbMigration.types.ts +0 -11
- package/src/utils/dbMigration/index.ts +0 -2
- package/src/utils/dbMigration/migrateMetadataTable/index.ts +0 -1
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.test.ts +0 -59
- package/src/utils/dbMigration/migrateMetadataTable/migrateMetadataTable.ts +0 -102
- package/src/utils/envAssert/envAssert.ts +0 -31
- package/src/utils/envAssert/index.ts +0 -1
- package/src/utils/envAssert/validators/hostList.ts +0 -17
- package/src/utils/envAssert/validators/index.ts +0 -5
- package/src/utils/envAssert/validators/ipList.ts +0 -13
- package/src/utils/envAssert/validators/path.ts +0 -13
- package/src/utils/envAssert/validators/string.ts +0 -9
- package/src/utils/envAssert/validators/stringList.ts +0 -13
- package/src/utils/filter/filter.ts +0 -17
- package/src/utils/filter/index.ts +0 -1
- package/src/utils/geminiFileUpload/geminiFileUpload.ts +0 -93
- package/src/utils/geminiFileUpload/index.ts +0 -1
- package/src/utils/hmac/checkEnv/checkEnv.test.ts +0 -18
- package/src/utils/hmac/checkEnv/checkEnv.ts +0 -9
- package/src/utils/hmac/checkEnv/index.ts +0 -1
- package/src/utils/hmac/createHmac/createHmac.ts +0 -33
- package/src/utils/hmac/createHmac/index.ts +0 -1
- package/src/utils/hmac/index.ts +0 -4
- package/src/utils/hmac/index.types.ts +0 -13
- package/src/utils/hmac/signPayload/index.ts +0 -1
- package/src/utils/hmac/signPayload/signPayload.ts +0 -16
- package/src/utils/hmac/verifySignature/index.ts +0 -1
- package/src/utils/hmac/verifySignature/verifySignature.ts +0 -24
- package/src/utils/index.ts +0 -29
- package/src/utils/jwt/index.ts +0 -2
- package/src/utils/jwt/jwt.test.ts +0 -28
- package/src/utils/jwt/jwt.ts +0 -182
- package/src/utils/jwt/jwt.types.ts +0 -21
- package/src/utils/report/index.ts +0 -3
- package/src/utils/report/output.ts +0 -45
- package/src/utils/report/output.types.ts +0 -70
- package/src/utils/report/report.test.ts +0 -133
- package/src/utils/report/report.ts +0 -133
- package/src/utils/report/report.types.ts +0 -13
- package/src/utils/request/index.ts +0 -1
- package/src/utils/request/request.test.ts +0 -26
- package/src/utils/request/request.ts +0 -48
- package/src/utils/secretManager/index.ts +0 -2
- package/src/utils/secretManager/secretLoader.ts +0 -62
- package/src/utils/secretManager/secretResolver.ts +0 -35
- package/src/utils/semverCompare/index.ts +0 -1
- package/src/utils/semverCompare/semverCompare.test.ts +0 -49
- package/src/utils/semverCompare/semverCompare.ts +0 -60
- package/src/utils/sendEmail/index.ts +0 -2
- package/src/utils/sendEmail/sendEmail.ts +0 -61
- package/src/utils/sendEmail/sendEmail.types.ts +0 -61
- package/src/utils/sendPush/index.ts +0 -2
- package/src/utils/sendPush/sendPush.ts +0 -20
- package/src/utils/sendPush/sendPush.types.ts +0 -25
- package/src/utils/tlsConfig/index.ts +0 -2
- package/src/utils/tlsConfig/tlsConfig.test.ts +0 -32
- package/src/utils/tlsConfig/tlsConfig.ts +0 -47
- package/src/utils/tlsConfig/tlsConfig.types.ts +0 -11
- package/src/utils/tlsConfig/tlsConfig.validate.ts +0 -25
- package/src/utils/tlsRequest/index.ts +0 -1
- package/src/utils/tlsRequest/tlsRequest.test.ts +0 -63
- package/src/utils/tlsRequest/tlsRequest.ts +0 -12
- package/src/utils/trimPathSlash/index.ts +0 -1
- package/src/utils/trimPathSlash/trimPathSlash.test.ts +0 -26
- package/src/utils/trimPathSlash/trimPathSlash.ts +0 -8
- package/test/env.ts +0 -53
- package/test/factory/index.ts +0 -8
- package/test/factory/sequelizeMeta.ts +0 -12
- package/test/hooks.ts +0 -35
- package/test/index.ts +0 -3
- package/test/stub/index.ts +0 -3
- package/test/stub/stubLocales.ts +0 -68
- package/test/stub/stubPubSub.ts +0 -7
- package/test/stub/stubStorage.ts +0 -77
- package/test/stub/stubStorage.types.ts +0 -11
- package/test/utils/app.ts +0 -31
- package/test/utils/index.ts +0 -1
- package/tsconfig.build.json +0 -5
- package/tsconfig.json +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","names":["_jsonwebtoken","require","_const","_EngineError","_KeySet","_WebError","_checkEnvironment","_envAssert","_report","_","keySet","exports","namespace","initKeySets","process","env","CHART","ECDSA_PUBLIC_KEY","EngineError","message","KeySet","file","AUTH_SERVICE_URL","internal","promise","init","bind","Promise","all","shutdownKeySets","shutdown","jwtGetKey","header","callback","NODE_ENV","JWT_SECRET","kid","data","reportDebug","key","getKey","error","Error","WebError","statusCode","errorCode","jwtVerify","token","issuer","TokenIssuer","AUTH_SERVICE","algorithms","assertEnvironment","envAssert","isString","ACCESS_TOKEN_AUDIENCE","ACCESS_TOKEN_ISSUER","ACCESS_TOKEN_EXPIRATION_TIME","options","audience","resolve","reject","verify","result","undefined","generateJwtToken","user","signOptions","algorithm","expiresIn","parseInt","keyid","Object","keys","getKeys","privateKey","getSecretOrFile","sign"],"sources":["../../../src/utils/jwt/jwt.ts"],"sourcesContent":["import {\n verify,\n JwtHeader,\n SigningKeyCallback,\n Algorithm,\n VerifyOptions,\n sign\n} from 'jsonwebtoken';\nimport { UserTokenPayload } from './jwt.types';\nimport { TokenIssuer } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { KeySet } from 'entities/KeySet';\nimport { WebError } from 'entities/WebError';\nimport { assertEnvironment } from 'utils/checkEnvironment';\nimport { envAssert } from 'utils/envAssert';\nimport { reportDebug } from 'utils/report';\nimport { getSecretOrFile } from 'utils';\n\nexport let keySet: KeySet | undefined;\n\nconst namespace = 'engine:utils:jwt';\n\n/** Initiate key fetching mechanism */\nexport async function initKeySets(): Promise<void> {\n // Create the KeySet instance\n // The auth-service fetches its key from its disk and not from a network request\n // This prevents fetch failures the first time the auth-service is started\n if (process.env.CHART === 'auth-service') {\n if (!process.env.ECDSA_PUBLIC_KEY)\n throw new EngineError({\n message: 'Environment variable \"ECDSA_PUBLIC_KEY\" is not defined'\n });\n keySet = new KeySet(process.env.ECDSA_PUBLIC_KEY, { file: true });\n } else {\n if (process.env.AUTH_SERVICE_URL)\n keySet = new KeySet(\n `${process.env.AUTH_SERVICE_URL}/.well-known/jwks.json`,\n { internal: true }\n );\n else\n keySet = new KeySet(`./keys/jwks.json`, { internal: true, file: true });\n\n if (!keySet)\n throw new EngineError({\n message:\n 'Environment variable \"AUTH_SERVICE_URL\" is not defined or JWKS not found'\n });\n }\n const promise = [keySet.init.bind(keySet)()];\n\n await Promise.all(promise);\n}\n\n/** Stop fetching keys regularly */\nexport function shutdownKeySets(): void {\n if (keySet) keySet.shutdown.bind(keySet)();\n}\n\n/** Get the JWT public key */\nfunction jwtGetKey(header: JwtHeader, callback: SigningKeyCallback): void {\n // In test environment we return the symmetric signature secret\n if (process.env.NODE_ENV === 'test') {\n callback(null, process.env.JWT_SECRET);\n return;\n }\n // Check that KeySet has been initialized\n if (!keySet) {\n callback(new EngineError({ message: 'KeySet has not been initialized' }));\n return;\n }\n // Check that the token has a key ID\n if (!header.kid) {\n callback(\n new EngineError({\n message:\n 'Token has not key ID in header, impossible to match with known key',\n data: header\n })\n );\n return;\n }\n\n // In test environment we use a symmetrical secret bases signature\n if (process.env.NODE_ENV === 'test') {\n callback(null, process.env.JWT_SECRET);\n return;\n }\n reportDebug({\n namespace,\n message: `Looking for key with ID \"${header.kid}\"`\n });\n // Go through each key set to check if the token's key is in one of them\n let key;\n try {\n key = keySet.getKey(header.kid);\n } catch (error: Error | null | unknown) {\n callback(error instanceof Error ? error : null);\n return;\n }\n\n if (key) {\n reportDebug({ namespace, message: `Found key with ID \"${header.kid}\"` });\n callback(null, key);\n return;\n }\n callback(\n new WebError({\n statusCode: 401,\n errorCode: 'unauthorized',\n message: 'Could not find the tokens key in any key set',\n data: { kid: header.kid }\n })\n );\n}\n\n/** Verify an user Json Web Token */\nexport async function jwtVerify(\n token: string,\n issuer: TokenIssuer = TokenIssuer.AUTH_SERVICE\n): Promise<UserTokenPayload> {\n let algorithms = ['ES256' as Algorithm];\n if (process.env.NODE_ENV === 'test') {\n assertEnvironment({ JWT_SECRET: envAssert.isString() });\n algorithms = ['HS256' as Algorithm];\n }\n assertEnvironment({\n ACCESS_TOKEN_AUDIENCE: envAssert.isString(),\n ACCESS_TOKEN_ISSUER: envAssert.isString(),\n ACCESS_TOKEN_EXPIRATION_TIME: envAssert.isString()\n });\n let options: VerifyOptions | undefined;\n\n switch (issuer) {\n case TokenIssuer.AUTH_SERVICE:\n options = {\n audience: [process.env.ACCESS_TOKEN_AUDIENCE as string],\n issuer: [process.env.ACCESS_TOKEN_ISSUER as string],\n algorithms\n };\n break;\n default:\n throw new EngineError({\n message: `Invalid token issuer specified \"${issuer as string}\"`\n });\n }\n\n return new Promise<UserTokenPayload>((resolve, reject) => {\n verify(token, jwtGetKey, options, (error, result) => {\n if (error) {\n reject(\n new WebError({\n errorCode: 'unauthorized',\n statusCode: 401,\n message: 'Invalid token supplied',\n data: { token },\n error: error instanceof Error ? error : undefined\n })\n );\n return;\n }\n resolve(result as UserTokenPayload);\n });\n });\n}\n\nexport function generateJwtToken(user: unknown) {\n const signOptions = {\n algorithm: 'ES256' as const, // or 'ES256' as Algorithm\n expiresIn: process.env.ACCESS_TOKEN_EXPIRATION_TIME\n ? parseInt(process.env.ACCESS_TOKEN_EXPIRATION_TIME, 10)\n : undefined,\n issuer: process.env.ACCESS_TOKEN_ISSUER,\n audience: process.env.ACCESS_TOKEN_AUDIENCE,\n keyid: Object.keys(keySet?.getKeys() ?? {})[0]\n };\n\n const privateKey = getSecretOrFile('PRIVATE_KEY_PATH');\n\n const token = sign({ user }, privateKey, signOptions);\n\n return token;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"jwt.js","names":["_jsonwebtoken","require","_const","_EngineError","_KeySet","_WebError","_checkEnvironment","_envAssert","_report","_","keySet","exports","namespace","initKeySets","process","env","CHART","ECDSA_PUBLIC_KEY","EngineError","message","KeySet","file","AUTH_SERVICE_URL","internal","promise","init","bind","Promise","all","shutdownKeySets","shutdown","jwtGetKey","header","callback","NODE_ENV","JWT_SECRET","kid","data","reportDebug","key","getKey","error","Error","WebError","statusCode","errorCode","jwtVerify","token","issuer","TokenIssuer","AUTH_SERVICE","algorithms","assertEnvironment","envAssert","isString","ACCESS_TOKEN_AUDIENCE","ACCESS_TOKEN_ISSUER","ACCESS_TOKEN_EXPIRATION_TIME","options","audience","resolve","reject","verify","result","undefined","generateJwtToken","user","signOptions","algorithm","expiresIn","parseInt","keyid","Object","keys","getKeys","privateKey","getSecretOrFile","sign"],"sources":["../../../src/utils/jwt/jwt.ts"],"sourcesContent":["import {\n verify,\n JwtHeader,\n SigningKeyCallback,\n Algorithm,\n VerifyOptions,\n sign\n} from 'jsonwebtoken';\nimport { UserTokenPayload } from './jwt.types';\nimport { TokenIssuer } from 'const';\nimport { EngineError } from 'entities/EngineError';\nimport { KeySet } from 'entities/KeySet';\nimport { WebError } from 'entities/WebError';\nimport { assertEnvironment } from 'utils/checkEnvironment';\nimport { envAssert } from 'utils/envAssert';\nimport { reportDebug } from 'utils/report';\nimport { getSecretOrFile } from 'utils';\n\nexport let keySet: KeySet | undefined;\n\nconst namespace = 'engine:utils:jwt';\n\n/** Initiate key fetching mechanism */\nexport async function initKeySets(): Promise<void> {\n // Create the KeySet instance\n // The auth-service fetches its key from its disk and not from a network request\n // This prevents fetch failures the first time the auth-service is started\n if (process.env.CHART === 'auth-service') {\n if (!process.env.ECDSA_PUBLIC_KEY)\n throw new EngineError({\n message: 'Environment variable \"ECDSA_PUBLIC_KEY\" is not defined'\n });\n keySet = new KeySet(process.env.ECDSA_PUBLIC_KEY, { file: true });\n } else {\n if (process.env.AUTH_SERVICE_URL)\n keySet = new KeySet(\n `${process.env.AUTH_SERVICE_URL}/.well-known/jwks.json`,\n { internal: true }\n );\n else\n keySet = new KeySet(`./keys/jwks.json`, { internal: true, file: true });\n\n if (!keySet)\n throw new EngineError({\n message:\n 'Environment variable \"AUTH_SERVICE_URL\" is not defined or JWKS not found'\n });\n }\n const promise = [keySet.init.bind(keySet)()];\n\n await Promise.all(promise);\n}\n\n/** Stop fetching keys regularly */\nexport function shutdownKeySets(): void {\n if (keySet) keySet.shutdown.bind(keySet)();\n}\n\n/** Get the JWT public key */\nfunction jwtGetKey(header: JwtHeader, callback: SigningKeyCallback): void {\n // In test environment we return the symmetric signature secret\n if (process.env.NODE_ENV === 'test') {\n callback(null, process.env.JWT_SECRET);\n return;\n }\n // Check that KeySet has been initialized\n if (!keySet) {\n callback(new EngineError({ message: 'KeySet has not been initialized' }));\n return;\n }\n // Check that the token has a key ID\n if (!header.kid) {\n callback(\n new EngineError({\n message:\n 'Token has not key ID in header, impossible to match with known key',\n data: header\n })\n );\n return;\n }\n\n // In test environment we use a symmetrical secret bases signature\n if (process.env.NODE_ENV === 'test') {\n callback(null, process.env.JWT_SECRET);\n return;\n }\n reportDebug({\n namespace,\n message: `Looking for key with ID \"${header.kid}\"`\n });\n // Go through each key set to check if the token's key is in one of them\n let key;\n try {\n key = keySet.getKey(header.kid);\n } catch (error: Error | null | unknown) {\n callback(error instanceof Error ? error : null);\n return;\n }\n\n if (key) {\n reportDebug({ namespace, message: `Found key with ID \"${header.kid}\"` });\n callback(null, key);\n return;\n }\n callback(\n new WebError({\n statusCode: 401,\n errorCode: 'unauthorized',\n message: 'Could not find the tokens key in any key set',\n data: { kid: header.kid }\n })\n );\n}\n\n/** Verify an user Json Web Token */\nexport async function jwtVerify(\n token: string,\n issuer: TokenIssuer = TokenIssuer.AUTH_SERVICE\n): Promise<UserTokenPayload> {\n let algorithms = ['ES256' as Algorithm];\n if (process.env.NODE_ENV === 'test') {\n assertEnvironment({ JWT_SECRET: envAssert.isString() });\n algorithms = ['HS256' as Algorithm];\n }\n assertEnvironment({\n ACCESS_TOKEN_AUDIENCE: envAssert.isString(),\n ACCESS_TOKEN_ISSUER: envAssert.isString(),\n ACCESS_TOKEN_EXPIRATION_TIME: envAssert.isString()\n });\n let options: VerifyOptions | undefined;\n\n switch (issuer) {\n case TokenIssuer.AUTH_SERVICE:\n options = {\n audience: [process.env.ACCESS_TOKEN_AUDIENCE as string],\n issuer: [process.env.ACCESS_TOKEN_ISSUER as string],\n algorithms\n };\n break;\n default:\n throw new EngineError({\n message: `Invalid token issuer specified \"${issuer as string}\"`\n });\n }\n\n return new Promise<UserTokenPayload>((resolve, reject) => {\n verify(token, jwtGetKey, options, (error, result) => {\n if (error) {\n reject(\n new WebError({\n errorCode: 'unauthorized',\n statusCode: 401,\n message: 'Invalid token supplied',\n data: { token },\n error: error instanceof Error ? error : undefined\n })\n );\n return;\n }\n resolve(result as UserTokenPayload);\n });\n });\n}\n\nexport function generateJwtToken(user: unknown) {\n const signOptions = {\n algorithm: 'ES256' as const, // or 'ES256' as Algorithm\n expiresIn: process.env.ACCESS_TOKEN_EXPIRATION_TIME\n ? parseInt(process.env.ACCESS_TOKEN_EXPIRATION_TIME, 10)\n : 3600,\n issuer: process.env.ACCESS_TOKEN_ISSUER,\n audience: process.env.ACCESS_TOKEN_AUDIENCE,\n keyid: Object.keys(keySet?.getKeys() ?? {})[0]\n };\n\n const privateKey = getSecretOrFile('PRIVATE_KEY_PATH');\n\n const token = sign({ user }, privateKey, signOptions);\n\n return token;\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -25,11 +25,7 @@ function semverCompare(v1, v2) {
|
|
|
25
25
|
v2
|
|
26
26
|
}
|
|
27
27
|
});
|
|
28
|
-
const [
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
30
|
-
[_1, major1, minor1, patch1, preType1, preVersion1],
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
-
[_2, major2, minor2, patch2, preType2, preVersion2]] = [match1, match2].map(group =>
|
|
28
|
+
const [[_1, major1, minor1, patch1, preType1, preVersion1], [_2, major2, minor2, patch2, preType2, preVersion2]] = [match1, match2].map(group =>
|
|
33
29
|
// We parse to int the parts that can be
|
|
34
30
|
group.map(item => item && _validator.default.isInt(item) ? parseInt(item) : item));
|
|
35
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semverCompare.js","names":["_validator","_interopRequireDefault","require","_EngineError","SEMVER_REGEX","semverCompare","v1","v2","match1","match2","map","v","match","EngineError","message","data","_1","major1","minor1","patch1","preType1","preVersion1","_2","major2","minor2","patch2","preType2","preVersion2","group","item","validator","isInt","parseInt"],"sources":["../../../src/utils/semverCompare/semverCompare.ts"],"sourcesContent":["import validator from 'validator';\nimport { EngineError } from 'entities/EngineError';\n\n// Regex to validate our SemVer style and capture the different parts\nconst SEMVER_REGEX =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:(alpha|beta|rc)(?:\\.(0|[1-9]\\d*))))?$/;\n\n/**\n * Comparison function for our SemVer strings, includes support ofr pre-releases\n * @param {string} v1\n * @param {string} v2\n * @return {number} - -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2\n */\nexport function semverCompare(v1: string, v2: string): 1 | -1 | 0 {\n const [match1, match2] = [v1, v2].map((v) => v.match(SEMVER_REGEX));\n if (!match1 || !match2)\n throw new EngineError({\n message: 'Provided invalid SemVer string, can not compare',\n data: { v1, v2 }\n });\n const [\n
|
|
1
|
+
{"version":3,"file":"semverCompare.js","names":["_validator","_interopRequireDefault","require","_EngineError","SEMVER_REGEX","semverCompare","v1","v2","match1","match2","map","v","match","EngineError","message","data","_1","major1","minor1","patch1","preType1","preVersion1","_2","major2","minor2","patch2","preType2","preVersion2","group","item","validator","isInt","parseInt"],"sources":["../../../src/utils/semverCompare/semverCompare.ts"],"sourcesContent":["import validator from 'validator';\nimport { EngineError } from 'entities/EngineError';\n\n// Regex to validate our SemVer style and capture the different parts\nconst SEMVER_REGEX =\n /^v?(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-(?:(alpha|beta|rc)(?:\\.(0|[1-9]\\d*))))?$/;\n\n/**\n * Comparison function for our SemVer strings, includes support ofr pre-releases\n * @param {string} v1\n * @param {string} v2\n * @return {number} - -1 if v1 < v2, 0 if v1 = v2, +1 if v1 > v2\n */\nexport function semverCompare(v1: string, v2: string): 1 | -1 | 0 {\n const [match1, match2] = [v1, v2].map((v) => v.match(SEMVER_REGEX));\n if (!match1 || !match2)\n throw new EngineError({\n message: 'Provided invalid SemVer string, can not compare',\n data: { v1, v2 }\n });\n const [\n \n [_1, major1, minor1, patch1, preType1, preVersion1],\n \n [_2, major2, minor2, patch2, preType2, preVersion2]\n ] = [match1, match2].map((group) =>\n // We parse to int the parts that can be\n group.map((item) => (item && validator.isInt(item) ? parseInt(item) : item))\n );\n\n // Compare majors first\n if (major1 < major2) return -1;\n if (major1 > major2) return 1;\n\n // Compare minors second\n if (minor1 < minor2) return -1;\n if (minor1 > minor2) return 1;\n\n // Compare patch third\n if (patch1 < patch2) return -1;\n if (patch1 > patch2) return 1;\n\n // Compare pre-release type\n // Release > pre-release\n if (!preType1 && !preType2) return 0;\n if (preType1 && !preType2) return -1;\n if (!preType1 && preType2) return 1;\n\n // RC > Beta > Alpha\n if (preType1 !== 'rc' && preType2 === 'rc') return -1;\n if (preType1 === 'rc' && preType2 !== 'rc') return 1;\n if (preType1 !== 'beta' && preType2 === 'beta') return -1;\n if (preType1 === 'beta' && preType2 !== 'beta') return 1;\n\n // Finally compare the pre-release versions\n if (preVersion1 < preVersion2) return -1;\n if (preVersion1 > preVersion2) return 1;\n\n return 0;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA;AACA,MAAME,YAAY,GAChB,yFAAyF;;AAE3F;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,EAAU,EAAEC,EAAU,EAAc;EAChE,MAAM,CAACC,MAAM,EAAEC,MAAM,CAAC,GAAG,CAACH,EAAE,EAAEC,EAAE,CAAC,CAACG,GAAG,CAAEC,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACR,YAAY,CAAC,CAAC;EACnE,IAAI,CAACI,MAAM,IAAI,CAACC,MAAM,EACpB,MAAM,IAAII,wBAAW,CAAC;IACpBC,OAAO,EAAE,iDAAiD;IAC1DC,IAAI,EAAE;MAAET,EAAE;MAAEC;IAAG;EACjB,CAAC,CAAC;EACJ,MAAM,CAEJ,CAACS,EAAE,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC,EAEnD,CAACC,EAAE,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,WAAW,CAAC,CACpD,GAAG,CAACnB,MAAM,EAAEC,MAAM,CAAC,CAACC,GAAG,CAAEkB,KAAK;EAC7B;EACAA,KAAK,CAAClB,GAAG,CAAEmB,IAAI,IAAMA,IAAI,IAAIC,kBAAS,CAACC,KAAK,CAACF,IAAI,CAAC,GAAGG,QAAQ,CAACH,IAAI,CAAC,GAAGA,IAAK,CAC7E,CAAC;;EAED;EACA,IAAIZ,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIL,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA,IAAIL,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC,CAAC;EAC9B,IAAIN,MAAM,GAAGM,MAAM,EAAE,OAAO,CAAC;;EAE7B;EACA;EACA,IAAI,CAACL,QAAQ,IAAI,CAACM,QAAQ,EAAE,OAAO,CAAC;EACpC,IAAIN,QAAQ,IAAI,CAACM,QAAQ,EAAE,OAAO,CAAC,CAAC;EACpC,IAAI,CAACN,QAAQ,IAAIM,QAAQ,EAAE,OAAO,CAAC;;EAEnC;EACA,IAAIN,QAAQ,KAAK,IAAI,IAAIM,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;EACrD,IAAIN,QAAQ,KAAK,IAAI,IAAIM,QAAQ,KAAK,IAAI,EAAE,OAAO,CAAC;EACpD,IAAIN,QAAQ,KAAK,MAAM,IAAIM,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC;EACzD,IAAIN,QAAQ,KAAK,MAAM,IAAIM,QAAQ,KAAK,MAAM,EAAE,OAAO,CAAC;;EAExD;EACA,IAAIL,WAAW,GAAGM,WAAW,EAAE,OAAO,CAAC,CAAC;EACxC,IAAIN,WAAW,GAAGM,WAAW,EAAE,OAAO,CAAC;EAEvC,OAAO,CAAC;AACV","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-server-engine",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Framework used to develop backend services. This package ships with a lot of features to standardize the creation of services, letting you focus on the business logic.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "rimraf dist && tsc -p tsconfig.build.json && shx mv dist/src/* dist && rimraf dist/src && tsc-alias -p tsconfig.build.json && npx babel src --out-dir dist --source-maps --extensions \".ts\" --ignore \"**/*.test.ts\" --copy-files --no-copy-ignored",
|
|
8
8
|
"format": "prettier --write .",
|
|
9
|
+
"format:check": "prettier --check .",
|
|
9
10
|
"lint": "eslint ./src",
|
|
10
11
|
"lint:fix": "eslint ./src --fix",
|
|
11
12
|
"prepublish": "npm run build",
|
|
@@ -15,18 +16,22 @@
|
|
|
15
16
|
"coverage": "nyc report --report-dir=./.test-coverage --reporter=html --reporter=text",
|
|
16
17
|
"coverage:ci": "nyc report --reporter=text-summary",
|
|
17
18
|
"test:ci": "npm run test -- --reporter spec",
|
|
18
|
-
"test:compose": "docker-compose up --abort-on-container-exit --build"
|
|
19
|
+
"test:compose": "docker-compose up --abort-on-container-exit --build",
|
|
20
|
+
"prepare": "husky"
|
|
19
21
|
},
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
"keywords": [
|
|
23
|
+
"node",
|
|
24
|
+
"express",
|
|
25
|
+
"server",
|
|
26
|
+
"backend",
|
|
27
|
+
"framework",
|
|
28
|
+
"rest-api",
|
|
29
|
+
"typescript",
|
|
30
|
+
"microservices",
|
|
31
|
+
"jwt",
|
|
32
|
+
"websocket",
|
|
33
|
+
"sequelize"
|
|
34
|
+
],
|
|
30
35
|
"author": "Ram",
|
|
31
36
|
"license": "ISC",
|
|
32
37
|
"repository": {
|
|
@@ -46,7 +51,7 @@
|
|
|
46
51
|
"@google/generative-ai": "^0.21.0",
|
|
47
52
|
"ajv": "^8.17.1",
|
|
48
53
|
"axios": "^1.7.9",
|
|
49
|
-
"backend-test-tools": "^1.
|
|
54
|
+
"backend-test-tools": "^1.1.2",
|
|
50
55
|
"body-parser": "^1.20.3",
|
|
51
56
|
"busboy": "^1.6.0",
|
|
52
57
|
"bytes": "^3.1.2",
|
|
@@ -71,18 +76,18 @@
|
|
|
71
76
|
"mime-types": "^2.1.35",
|
|
72
77
|
"morgan": "^1.10.0",
|
|
73
78
|
"ms": "^2.1.3",
|
|
74
|
-
"multer": "^
|
|
79
|
+
"multer": "^2.0.1",
|
|
75
80
|
"mysql2": "^3.11.5",
|
|
76
81
|
"nock": "^13.5.6",
|
|
77
|
-
"nodemailer": "^
|
|
82
|
+
"nodemailer": "^7.0.11",
|
|
78
83
|
"nodemon": "^3.1.9",
|
|
79
84
|
"pg": "^8.13.1",
|
|
80
85
|
"prom-client": "^15.1.3",
|
|
81
86
|
"request-ip": "^3.3.0",
|
|
82
87
|
"response-time": "^2.3.3",
|
|
83
88
|
"semver-compare": "^1.0.0",
|
|
84
|
-
"sequelize": "^6.37.
|
|
85
|
-
"sequelize-cli": "^6.6.
|
|
89
|
+
"sequelize": "^6.37.7",
|
|
90
|
+
"sequelize-cli": "^6.6.3",
|
|
86
91
|
"sequelize-typescript": "^2.1.6",
|
|
87
92
|
"sharp": "^0.33.5",
|
|
88
93
|
"swagger-ui-express": "^5.0.1",
|
|
@@ -103,8 +108,12 @@
|
|
|
103
108
|
"@babel/preset-env": "^7.26.0",
|
|
104
109
|
"@babel/preset-typescript": "^7.26.0",
|
|
105
110
|
"@babel/register": "^7.25.9",
|
|
111
|
+
"@commitlint/cli": "^19.8.1",
|
|
112
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
106
113
|
"@faker-js/faker": "^9.3.0",
|
|
107
114
|
"@google-cloud/precise-date": "^4.0.0",
|
|
115
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
116
|
+
"@semantic-release/git": "^10.0.1",
|
|
108
117
|
"@types/busboy": "^1.5.4",
|
|
109
118
|
"@types/bytes": "^3.1.5",
|
|
110
119
|
"@types/callsite": "^1.0.34",
|
|
@@ -127,7 +136,7 @@
|
|
|
127
136
|
"@types/node": "^22.10.2",
|
|
128
137
|
"@types/nodemailer": "^6.4.17",
|
|
129
138
|
"@types/response-time": "^2.3.8",
|
|
130
|
-
"@types/sequelize": "^
|
|
139
|
+
"@types/sequelize": "^6.12.0",
|
|
131
140
|
"@types/sinon-chai": "^4.0.0",
|
|
132
141
|
"@types/supertest": "^6.0.2",
|
|
133
142
|
"@types/swagger-ui-express": "^4.1.7",
|
|
@@ -141,6 +150,7 @@
|
|
|
141
150
|
"babel-plugin-module-resolver": "^5.0.2",
|
|
142
151
|
"chai": "^4.5.0",
|
|
143
152
|
"chai-as-promised": "^7.1.2",
|
|
153
|
+
"conventional-changelog-conventionalcommits": "^8.0.0",
|
|
144
154
|
"cross-env": "^7.0.3",
|
|
145
155
|
"eslint": "^9.17.0",
|
|
146
156
|
"factory-waifu": "^1.0.1",
|
|
@@ -154,11 +164,12 @@
|
|
|
154
164
|
"nyc": "^17.1.0",
|
|
155
165
|
"prettier": "^3.4.2",
|
|
156
166
|
"rimraf": "^6.0.1",
|
|
167
|
+
"semantic-release": "^25.0.2",
|
|
157
168
|
"shx": "^0.3.4",
|
|
158
169
|
"sinon": "^19.0.2",
|
|
159
170
|
"sinon-chai": "^3.5.0",
|
|
160
171
|
"supertest": "^7.0.0",
|
|
161
|
-
"tmp": "^0.2.
|
|
172
|
+
"tmp": "^0.2.4",
|
|
162
173
|
"ts-node": "^10.9.2",
|
|
163
174
|
"tsc-alias": "^1.8.10",
|
|
164
175
|
"tsconfig-paths": "^4.2.0",
|
package/.env.example
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
## DEV ENV
|
|
2
|
-
NODE_ENV=
|
|
3
|
-
|
|
4
|
-
# Port on which the business logic endpoints are served
|
|
5
|
-
PORT=
|
|
6
|
-
|
|
7
|
-
# Port on which metrics and analytics data is served. It is used to allow different firewall rules for accessing the service
|
|
8
|
-
SECONDARY_PORT=
|
|
9
|
-
|
|
10
|
-
# Server host name
|
|
11
|
-
HOST_NAME=
|
|
12
|
-
|
|
13
|
-
# Timeout (in ms) for the websocket connections to close gracefully on server shutdown. After that, the connection is destroyed unilateraly
|
|
14
|
-
WEBSOCKET_CLOSE_TIMEOUT=
|
|
15
|
-
|
|
16
|
-
# Google Gemini AI key
|
|
17
|
-
GOOGLE_AI_KEY=
|
|
18
|
-
|
|
19
|
-
#######
|
|
20
|
-
# TLS #
|
|
21
|
-
#######
|
|
22
|
-
|
|
23
|
-
# Private key of the server
|
|
24
|
-
TLS_SERVER_KEY=
|
|
25
|
-
|
|
26
|
-
# Passphrase to decrypt the private key
|
|
27
|
-
TLS_SERVER_KEY_PASSPHRASE=
|
|
28
|
-
|
|
29
|
-
# Certificate of the server
|
|
30
|
-
TLS_SERVER_CERT=
|
|
31
|
-
|
|
32
|
-
# Certificate of the certifying authority
|
|
33
|
-
TLS_CA=
|
|
34
|
-
|
|
35
|
-
# Private key used to make a TLS request
|
|
36
|
-
# Defaults to the server key if not specified
|
|
37
|
-
TLS_REQUEST_KEY=
|
|
38
|
-
|
|
39
|
-
# Passphrase to decrypt the private key used to make a TLS request
|
|
40
|
-
# Defaults to the server passphrase if not specified
|
|
41
|
-
TLS_REQUEST_KEY_PASSPHRASE=
|
|
42
|
-
|
|
43
|
-
# Certificate used to make a TLS request
|
|
44
|
-
# Defaults to the server certificate if not specified
|
|
45
|
-
TLS_REQUEST_CERT=
|
|
46
|
-
|
|
47
|
-
# Certificate of the certifying authority used to make a TLS request
|
|
48
|
-
# Defaults to the server certificate of the certifying authority if not specified
|
|
49
|
-
TLS_REQUEST_CA=
|
|
50
|
-
|
|
51
|
-
# List of clients hosts allowed to make a request
|
|
52
|
-
# Comma separated string
|
|
53
|
-
ALLOWED_CLIENT_HOSTS=
|
|
54
|
-
|
|
55
|
-
########################
|
|
56
|
-
# Token Authentication #
|
|
57
|
-
########################
|
|
58
|
-
|
|
59
|
-
# Audience requirement of the current service
|
|
60
|
-
ACCESS_TOKEN_AUDIENCE=
|
|
61
|
-
|
|
62
|
-
# URL of the authorization service, serves as an issuer requirement
|
|
63
|
-
AUTH_SERVICE_URL=
|
|
64
|
-
|
|
65
|
-
PRIVATE_KEY_PATH=
|
|
66
|
-
|
|
67
|
-
#########
|
|
68
|
-
# Redis #
|
|
69
|
-
#########
|
|
70
|
-
|
|
71
|
-
# Host for redis
|
|
72
|
-
REDIS_HOST=
|
|
73
|
-
|
|
74
|
-
# Port for redis connection
|
|
75
|
-
REDIS_PORT=
|
|
76
|
-
|
|
77
|
-
# Password to connect to redis
|
|
78
|
-
REDIS_PASSWORD=
|
|
79
|
-
|
|
80
|
-
# Is redis setup as a cluster ('true'/'false')
|
|
81
|
-
REDIS_CLUSTER=
|
|
82
|
-
|
|
83
|
-
# CORS
|
|
84
|
-
CORS_ORIGIN=localhost
|
|
85
|
-
|
|
86
|
-
# IP FILTER
|
|
87
|
-
VALID_IPS='::ffff:127.0.0.1,127.0.0.1,::1'
|
|
88
|
-
|
|
89
|
-
# testing secret
|
|
90
|
-
JWT_SECRET='bad example secret'
|
|
91
|
-
|
|
92
|
-
# hmac testing secret
|
|
93
|
-
PAYLOAD_SIGNATURE_SECRET='bad signature secret'
|
|
94
|
-
|
|
95
|
-
###########
|
|
96
|
-
# Pub/Sub #
|
|
97
|
-
###########
|
|
98
|
-
|
|
99
|
-
# Google Cloud project
|
|
100
|
-
GC_PROJECT=
|
|
101
|
-
|
|
102
|
-
# Key file to connecto to Google Cloud
|
|
103
|
-
GC_KEYFILE=
|
|
104
|
-
|
|
105
|
-
# Default Pub/Sub topic
|
|
106
|
-
PUBSUB_EVENT_TOPIC=
|
|
107
|
-
|
|
108
|
-
# Pub/Sub topic for analytics
|
|
109
|
-
PUBSUB_ANALYTICS_TOPIC=
|
|
110
|
-
|
|
111
|
-
# Pub/Sub topic for cache invalidation
|
|
112
|
-
PUBSUB_CACHE_TOPIC=
|
|
113
|
-
|
|
114
|
-
# Subscriptions for the legacy topic on which model updates are propagated
|
|
115
|
-
PUBSUB_UPDATE_SUBSCRIPTION=
|
|
116
|
-
|
|
117
|
-
# secret Hash params
|
|
118
|
-
HASH_SECRET=
|
|
119
|
-
HASH_SALT=
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
##########
|
|
123
|
-
# Elastic Search #
|
|
124
|
-
##########
|
|
125
|
-
|
|
126
|
-
# The path link to Elastic Search migration data
|
|
127
|
-
ELASTIC_SEARCH_MIGRATION_PATH=
|
|
128
|
-
|
|
129
|
-
# The elastic search host url
|
|
130
|
-
ELASTIC_SEARCH_HOST=
|
|
131
|
-
|
|
132
|
-
# The elastic search user name
|
|
133
|
-
ELASTIC_SEARCH_USERNAME=''
|
|
134
|
-
|
|
135
|
-
# The elastic search password
|
|
136
|
-
ELASTIC_SEARCH_PASSWORD=''
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
###########
|
|
140
|
-
# Database #
|
|
141
|
-
###########
|
|
142
|
-
|
|
143
|
-
# Indicates whether trigger the run migrations automatically or not
|
|
144
|
-
RUN_MIGRATION=
|
|
145
|
-
|
|
146
|
-
# Indicates whether trigger the run un migrations automatically or not
|
|
147
|
-
UNDO_MIGRATION=
|
|
148
|
-
|
|
149
|
-
# Indicate the path of the directory where the datbase migrations are
|
|
150
|
-
DB_MIGRATIONS_DIR=
|
|
151
|
-
|
|
152
|
-
# Default message Audience
|
|
153
|
-
DEFAULT_MESSAGE_AUDIENCE=
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
###########
|
|
157
|
-
# SMTP Configuration #
|
|
158
|
-
###########
|
|
159
|
-
|
|
160
|
-
# The SMTP server host (e.g., smtp.gmail.com, smtp.mailtrap.io)
|
|
161
|
-
SMTP_HOST=smtp.example.com
|
|
162
|
-
|
|
163
|
-
# The SMTP port (e.g., 587 for TLS, 465 for SSL, 25 for insecure)
|
|
164
|
-
SMTP_PORT=587
|
|
165
|
-
|
|
166
|
-
# SMTP authentication username (your email address or username)
|
|
167
|
-
SMTP_USER=your-email@example.com
|
|
168
|
-
|
|
169
|
-
# SMTP authentication password (your email password or app password)
|
|
170
|
-
SMTP_PASS=your-email-password
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
FILE_STORAGE_FOLDER=./uploads
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
################
|
|
177
|
-
# User Service #
|
|
178
|
-
################
|
|
179
|
-
|
|
180
|
-
# URL where the user service is located
|
|
181
|
-
USER_SERVICE_URL=
|
|
182
|
-
|
|
183
|
-
# Attributes of the users to fetch
|
|
184
|
-
# Comma separated list of attributes to fetch from the user Service
|
|
185
|
-
# (ex: name,permissions,..) all -> for retrun everything
|
|
186
|
-
USER_FETCHED_ATTRIBUTES=
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
name: Publish to npm
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
publish:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
|
|
12
|
-
permissions:
|
|
13
|
-
contents: write
|
|
14
|
-
id-token: write
|
|
15
|
-
|
|
16
|
-
steps:
|
|
17
|
-
- name: Checkout code
|
|
18
|
-
uses: actions/checkout@v4
|
|
19
|
-
|
|
20
|
-
- name: Setup Node.js
|
|
21
|
-
uses: actions/setup-node@v4
|
|
22
|
-
with:
|
|
23
|
-
node-version: 20
|
|
24
|
-
registry-url: 'https://registry.npmjs.org/'
|
|
25
|
-
|
|
26
|
-
- name: Install dependencies
|
|
27
|
-
run: npm ci
|
|
28
|
-
|
|
29
|
-
- name: Lint
|
|
30
|
-
run: npm run lint
|
|
31
|
-
|
|
32
|
-
# - name: Test
|
|
33
|
-
# run: npm run test
|
|
34
|
-
|
|
35
|
-
- name: Build package
|
|
36
|
-
run: npm run build --if-present
|
|
37
|
-
|
|
38
|
-
- name: Publish to npm
|
|
39
|
-
run: npm publish
|
|
40
|
-
env:
|
|
41
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/.prettierrc
DELETED
package/Dockerfile
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Instal package dependencies
|
|
2
|
-
FROM node:20 AS dependency
|
|
3
|
-
|
|
4
|
-
ARG GITHUB_TOKEN
|
|
5
|
-
ENV GITHUB_TOKEN=$GITHUB_TOKEN
|
|
6
|
-
|
|
7
|
-
WORKDIR /node
|
|
8
|
-
|
|
9
|
-
COPY package*.json ./
|
|
10
|
-
COPY .npmrc .
|
|
11
|
-
RUN npm ci
|
|
12
|
-
|
|
13
|
-
# Build source
|
|
14
|
-
FROM dependency AS base
|
|
15
|
-
COPY . .
|
|
16
|
-
|
|
17
|
-
# Build source
|
|
18
|
-
FROM base AS build
|
|
19
|
-
RUN npm run build
|
|
20
|
-
|
|
21
|
-
# Ship compiled sources
|
|
22
|
-
FROM dependency
|
|
23
|
-
|
|
24
|
-
ARG BUILD_ID
|
|
25
|
-
ENV BUILD_ID=$BUILD_ID
|
|
26
|
-
|
|
27
|
-
COPY --from=build /node/dist ./dist
|
|
28
|
-
|
|
29
|
-
RUN npm prune --production
|
|
30
|
-
|
|
31
|
-
CMD ["node", "--enable-source-maps", "-r" , "./dist/index.js"]
|
package/babel.config.json
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"presets": [
|
|
3
|
-
"@babel/preset-typescript",
|
|
4
|
-
[
|
|
5
|
-
"@babel/preset-env",
|
|
6
|
-
{
|
|
7
|
-
"targets": { "node": 20 },
|
|
8
|
-
"useBuiltIns": "entry",
|
|
9
|
-
"corejs": 3
|
|
10
|
-
}
|
|
11
|
-
]
|
|
12
|
-
],
|
|
13
|
-
"plugins": [
|
|
14
|
-
[
|
|
15
|
-
"module-resolver",
|
|
16
|
-
{
|
|
17
|
-
"root": "src",
|
|
18
|
-
"alias": {
|
|
19
|
-
"test": "test"
|
|
20
|
-
},
|
|
21
|
-
"extensions": [".js", ".ts"]
|
|
22
|
-
}
|
|
23
|
-
],
|
|
24
|
-
["@babel/plugin-proposal-decorators", { "legacy": true }],
|
|
25
|
-
"@babel/plugin-transform-class-properties",
|
|
26
|
-
"@babel/plugin-transform-classes",
|
|
27
|
-
"@babel/plugin-transform-runtime"
|
|
28
|
-
],
|
|
29
|
-
"env": {
|
|
30
|
-
"test": {
|
|
31
|
-
"plugins": ["istanbul"]
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
package/eslint.config.mjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import globals from 'globals';
|
|
2
|
-
import pluginJs from '@eslint/js';
|
|
3
|
-
import tseslint from 'typescript-eslint';
|
|
4
|
-
|
|
5
|
-
export default [
|
|
6
|
-
{ files: ['.src/', '**/*.{js,mjs,cjs,ts}'] },
|
|
7
|
-
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
|
|
8
|
-
pluginJs.configs.recommended,
|
|
9
|
-
{ ignores: ['**/*.test.ts', '**/*.d.ts'] },
|
|
10
|
-
...tseslint.configs.recommended
|
|
11
|
-
];
|
package/src/const/LogSeverity.ts
DELETED
package/src/const/index.ts
DELETED
package/src/const/metrics.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { Registry } from 'prom-client';
|
|
2
|
-
|
|
3
|
-
// Registry for metrics that apply to this specific instance of the service
|
|
4
|
-
export const instanceRegistry = new Registry();
|
|
5
|
-
// Registry for metrics that apply to the service as a whole
|
|
6
|
-
export const serviceRegistry = new Registry();
|
package/src/const/mime.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export const IMAGE_BASIC_MIME = ['image/jpeg', 'image/png'];
|
|
2
|
-
|
|
3
|
-
export const IMAGE_MIME = [...IMAGE_BASIC_MIME, 'image/gif', 'image/bmp'];
|
|
4
|
-
|
|
5
|
-
export const AUDIO_MIME = [
|
|
6
|
-
'audio/aac',
|
|
7
|
-
'audio/mpeg',
|
|
8
|
-
'audio/wave',
|
|
9
|
-
'audio/wav'
|
|
10
|
-
];
|
|
11
|
-
|
|
12
|
-
export const VIDEO_MIME = [
|
|
13
|
-
'video/mpeg',
|
|
14
|
-
'video/mp4',
|
|
15
|
-
'video/3gpp',
|
|
16
|
-
'video/3gp2'
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
export const PDF_MIME = ['application/pdf'];
|
|
20
|
-
|
|
21
|
-
export const WORD_MIME = [
|
|
22
|
-
'application/msword',
|
|
23
|
-
'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
export const EXCEL_MIME = [
|
|
27
|
-
'application/vnd.ms-excel',
|
|
28
|
-
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
|
|
29
|
-
];
|
|
30
|
-
|
|
31
|
-
export const POWERPOINT_MIME = [
|
|
32
|
-
'application/vnd.ms-powerpoint',
|
|
33
|
-
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
34
|
-
'application/vnd.openxmlformats-officedocument.presentationml.slideshow'
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
export const OFFICE_MIME = [...WORD_MIME, ...EXCEL_MIME, ...POWERPOINT_MIME];
|
package/src/const/tokenIssuer.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { QueryInterface, DataTypes } from 'sequelize';
|
|
2
|
-
|
|
3
|
-
export async function up(queryInterface: QueryInterface): Promise<void> {
|
|
4
|
-
await queryInterface.createTable(
|
|
5
|
-
'SequelizeMeta',
|
|
6
|
-
{
|
|
7
|
-
id: {
|
|
8
|
-
type: DataTypes.INTEGER,
|
|
9
|
-
autoIncrement: true,
|
|
10
|
-
primaryKey: true
|
|
11
|
-
},
|
|
12
|
-
name: {
|
|
13
|
-
type: DataTypes.STRING,
|
|
14
|
-
allowNull: false
|
|
15
|
-
},
|
|
16
|
-
version: {
|
|
17
|
-
type: DataTypes.STRING,
|
|
18
|
-
allowNull: false
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
charset: 'utf8mb4',
|
|
23
|
-
collate: 'utf8mb4_unicode_ci' // Change this to a valid collation
|
|
24
|
-
}
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
export async function down(queryInterface: QueryInterface): Promise<void> {
|
|
28
|
-
await queryInterface.dropTable('SequelizeMeta');
|
|
29
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Table, Column, Model, DataType } from 'sequelize-typescript';
|
|
2
|
-
|
|
3
|
-
@Table
|
|
4
|
-
export class SequelizeMeta extends Model {
|
|
5
|
-
@Column({
|
|
6
|
-
type: DataType.STRING,
|
|
7
|
-
allowNull: false
|
|
8
|
-
})
|
|
9
|
-
name!: string;
|
|
10
|
-
|
|
11
|
-
@Column({
|
|
12
|
-
type: DataType.STRING,
|
|
13
|
-
allowNull: false
|
|
14
|
-
})
|
|
15
|
-
version!: string;
|
|
16
|
-
}
|
package/src/db/models/index.ts
DELETED