From 4db9a5279ff9e57aaaa2c546eb502f1ada91502a Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Tue, 21 Nov 2023 17:32:22 +0700 Subject: [PATCH 1/7] Comment out ST V3 section --- .../components/ServiceTokenTab/ServiceTokenTab.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/Project/MembersPage/components/ServiceTokenTab/ServiceTokenTab.tsx b/frontend/src/views/Project/MembersPage/components/ServiceTokenTab/ServiceTokenTab.tsx index 1a3c6e95c..86ae8bfe5 100644 --- a/frontend/src/views/Project/MembersPage/components/ServiceTokenTab/ServiceTokenTab.tsx +++ b/frontend/src/views/Project/MembersPage/components/ServiceTokenTab/ServiceTokenTab.tsx @@ -2,7 +2,7 @@ import { motion } from "framer-motion"; import { ServiceTokenSection, - ServiceTokenV3Section + // ServiceTokenV3Section } from "./components"; export const ServiceTokenTab = () => { @@ -14,7 +14,7 @@ export const ServiceTokenTab = () => { animate={{ opacity: 1, translateX: 0 }} exit={{ opacity: 0, translateX: 30 }} > - + {/* */} ); From e4a04bdf0a93c7f752dddb5d53e1202d50d10eeb Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 21 Nov 2023 15:11:19 -0500 Subject: [PATCH 2/7] set log level to info and output to file --- backend/src/utils/logging/logger.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/src/utils/logging/logger.ts b/backend/src/utils/logging/logger.ts index 17a8357d3..1fb6ebc4c 100644 --- a/backend/src/utils/logging/logger.ts +++ b/backend/src/utils/logging/logger.ts @@ -9,14 +9,14 @@ export const initLogger = async () => { const isProduction = nodeEnv === "production"; const targets: pino.TransportMultiOptions["targets"][number][] = [ isProduction - ? { level: "trace", target: "pino/file", options: {} } + ? { level: "info", target: "pino/file", options: { destination: 'logs/infisical-backend/logs.txt', mkdir: true } } : { - level: "info", - target: "pino-pretty", // must be installed separately - options: { - colorize: true - } + level: "info", + target: "pino-pretty", // must be installed separately + options: { + colorize: true } + } ]; if (awsCloudWatchLogCfg) { @@ -40,7 +40,7 @@ export const initLogger = async () => { logger = pino( { - level: process.env.PINO_LOG_LEVEL || "trace", + level: process.env.PINO_LOG_LEVEL || "info", formatters: { bindings: (bindings) => { return { From c55a36b29134d47ddd7cf95835e0f4f89a181e69 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 21 Nov 2023 16:02:03 -0500 Subject: [PATCH 3/7] add logs for v3 secrets --- .../src/controllers/v3/secretsController.ts | 49 ++++++++++++++----- 1 file changed, 38 insertions(+), 11 deletions(-) diff --git a/backend/src/controllers/v3/secretsController.ts b/backend/src/controllers/v3/secretsController.ts index e1e54d4d0..1c691088a 100644 --- a/backend/src/controllers/v3/secretsController.ts +++ b/backend/src/controllers/v3/secretsController.ts @@ -6,12 +6,12 @@ import { BotService } from "../../services"; import { containsGlobPatterns, repackageSecretToRaw } from "../../helpers/secrets"; import { encryptSymmetric128BitHexKeyUTF8 } from "../../utils/crypto"; import { getAllImportedSecrets } from "../../services/SecretImportService"; -import { - Folder, - IServiceTokenData, +import { + Folder, + IServiceTokenData, Membership, - ServiceTokenData, - User + ServiceTokenData, + User } from "../../models"; import { getFolderByPath } from "../../services/FolderService"; import { BadRequestError } from "../../utils/errors"; @@ -33,6 +33,7 @@ import { getSecretPolicyOfBoard } from "../../ee/services/SecretApprovalService"; import { CommitType } from "../../ee/models/secretApprovalRequest"; +import { logger } from "../../utils/logging"; const checkSecretsPermission = async ({ authData, @@ -103,7 +104,7 @@ const checkSecretsPermission = async ({ authData, workspaceId: new Types.ObjectId(workspaceId) }); - + ForbiddenError.from(permission).throwUnlessCan( secretAction, subject(ProjectPermissionSub.Secrets, { environment, secretPath }) @@ -196,6 +197,8 @@ export const getSecretsRaw = async (req: Request, res: Response) => { query: { include_imports: includeImports } } = validatedData; + logger.info(`getSecretsRaw: fetch raw secrets [environment=${environment}] [workspaceId=${workspaceId}] [secretPath=${secretPath}] [includeImports=${includeImports}]`) + if (req.authData.authPayload instanceof ServiceTokenData) { // if the service token has single scope, it will get all secrets for that scope by default @@ -353,6 +356,8 @@ export const getSecretByNameRaw = async (req: Request, res: Response) => { params: { secretName } } = await validateRequest(reqValidator.GetSecretByNameRawV3, req); + logger.info(`getSecretByNameRaw: fetch raw secret by name [environment=${environment}] [workspaceId=${workspaceId}] [secretPath=${secretPath}] [type=${type}] [include_imports=${include_imports}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -476,6 +481,8 @@ export const createSecretRaw = async (req: Request, res: Response) => { } } = await validateRequest(reqValidator.CreateSecretRawV3, req); + logger.info(`createSecretRaw: create a secret raw by name and value [environment=${environment}] [workspaceId=${workspaceId}] [secretPath=${secretPath}] [type=${type}] [skipMultilineEncoding=${skipMultilineEncoding}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -621,6 +628,8 @@ export const updateSecretByNameRaw = async (req: Request, res: Response) => { body: { workspaceId, environment, secretValue, secretPath, type, skipMultilineEncoding } } = await validateRequest(reqValidator.UpdateSecretByNameRawV3, req); + logger.info(`updateSecretByNameRaw: update raw secret by name [environment=${environment}] [workspaceId=${workspaceId}] [secretPath=${secretPath}] [type=${type}] [skipMultilineEncoding=${skipMultilineEncoding}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -743,6 +752,8 @@ export const deleteSecretByNameRaw = async (req: Request, res: Response) => { body: { environment, secretPath, type, workspaceId } } = await validateRequest(reqValidator.DeleteSecretByNameRawV3, req); + logger.info(`deleteSecretByNameRaw: delete a secret by name [environment=${environment}] [workspaceId=${workspaceId}] [secretPath=${secretPath}] [type=${type}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -796,6 +807,8 @@ export const getSecrets = async (req: Request, res: Response) => { query: { secretPath } } = validatedData; + logger.info(`getSecrets: fetch encrypted secrets [environment=${environment}] [workspaceId=${workspaceId}] [includeImports=${includeImports}]`) + const { authVerifier: permissionCheckFn } = await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -850,6 +863,8 @@ export const getSecretByName = async (req: Request, res: Response) => { params: { secretName } } = await validateRequest(reqValidator.GetSecretByNameV3, req); + logger.info(`getSecretByName: get a single secret by name [environment=${environment}] [workspaceId=${workspaceId}] [include_imports=${include_imports}] [type=${type}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -900,6 +915,8 @@ export const createSecret = async (req: Request, res: Response) => { params: { secretName } } = await validateRequest(reqValidator.CreateSecretV3, req); + logger.info(`createSecret: create an encrypted secret [environment=${environment}] [workspaceId=${workspaceId}] [skipMultilineEncoding=${skipMultilineEncoding}] [type=${type}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -913,7 +930,7 @@ export const createSecret = async (req: Request, res: Response) => { user: req.authData.authPayload._id, workspace: new Types.ObjectId(workspaceId) }); - + if (membership && type !== "personal") { const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath); if (secretApprovalPolicy) { @@ -1012,6 +1029,8 @@ export const updateSecretByName = async (req: Request, res: Response) => { params: { secretName } } = await validateRequest(reqValidator.UpdateSecretByNameV3, req); + logger.info(`updateSecretByName: update a encrypted secret by name [environment=${environment}] [workspaceId=${workspaceId}] [skipMultilineEncoding=${skipMultilineEncoding}] [type=${type}]`) + if (newSecretName && (!secretKeyIV || !secretKeyTag || !secretKeyCiphertext)) { throw BadRequestError({ message: "Missing encrypted key" }); } @@ -1111,6 +1130,8 @@ export const deleteSecretByName = async (req: Request, res: Response) => { params: { secretName } } = await validateRequest(reqValidator.DeleteSecretByNameV3, req); + logger.info(`deleteSecretByName: delete a encrypted secret by name [environment=${environment}] [workspaceId=${workspaceId}] [type=${type}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -1124,7 +1145,7 @@ export const deleteSecretByName = async (req: Request, res: Response) => { user: req.authData.authPayload._id, workspace: new Types.ObjectId(workspaceId) }); - + if (membership && type !== "personal") { const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath); if (secretApprovalPolicy) { @@ -1176,6 +1197,8 @@ export const createSecretByNameBatch = async (req: Request, res: Response) => { body: { secrets, secretPath, environment, workspaceId } } = await validateRequest(reqValidator.CreateSecretByNameBatchV3, req); + logger.info(`createSecretByNameBatch: create a list of secrets by their names [environment=${environment}] [workspaceId=${workspaceId}] [secretsLength=${secrets?.length}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -1189,7 +1212,7 @@ export const createSecretByNameBatch = async (req: Request, res: Response) => { user: req.authData.authPayload._id, workspace: new Types.ObjectId(workspaceId) }); - + if (membership) { const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath); if (secretApprovalPolicy) { @@ -1235,6 +1258,8 @@ export const updateSecretByNameBatch = async (req: Request, res: Response) => { body: { secrets, secretPath, environment, workspaceId } } = await validateRequest(reqValidator.UpdateSecretByNameBatchV3, req); + logger.info(`updateSecretByNameBatch: update a list of secrets by their names [environment=${environment}] [workspaceId=${workspaceId}] [secretsLength=${secrets?.length}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, @@ -1248,7 +1273,7 @@ export const updateSecretByNameBatch = async (req: Request, res: Response) => { user: req.authData.authPayload._id, workspace: new Types.ObjectId(workspaceId) }); - + if (membership) { const secretApprovalPolicy = await getSecretPolicyOfBoard(workspaceId, environment, secretPath); if (secretApprovalPolicy) { @@ -1293,7 +1318,9 @@ export const deleteSecretByNameBatch = async (req: Request, res: Response) => { const { body: { secrets, secretPath, environment, workspaceId } } = await validateRequest(reqValidator.DeleteSecretByNameBatchV3, req); - + + logger.info(`deleteSecretByNameBatch: delete a list of secrets by their names [environment=${environment}] [workspaceId=${workspaceId}] [secretsLength=${secrets?.length}]`) + await checkSecretsPermission({ authData: req.authData, workspaceId, From 6f8373c9779bac958bd51e8c4e124ab3e0574737 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 21 Nov 2023 16:02:43 -0500 Subject: [PATCH 4/7] add severity level as string for pino --- backend/src/utils/logging/logger.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/backend/src/utils/logging/logger.ts b/backend/src/utils/logging/logger.ts index 1fb6ebc4c..3e9d82240 100644 --- a/backend/src/utils/logging/logger.ts +++ b/backend/src/utils/logging/logger.ts @@ -3,6 +3,16 @@ import { getAwsCloudWatchLog, getNodeEnv } from "../../config"; export let logger: Logger; +// https://github.com/pinojs/pino/blob/master/lib/levels.js#L13-L20 +const logLevelToSeverityLookup: Record = { + '10': 'TRACE', + '20': 'DEBUG', + '30': 'INFO', + '40': 'WARNING', + '50': 'ERROR', + '60': 'CRITICAL' +} + export const initLogger = async () => { const awsCloudWatchLogCfg = await getAwsCloudWatchLog(); const nodeEnv = await getNodeEnv(); @@ -40,6 +50,9 @@ export const initLogger = async () => { logger = pino( { + mixin(_context, level) { + return { 'severity': logLevelToSeverityLookup[level] || logLevelToSeverityLookup['30'] } + }, level: process.env.PINO_LOG_LEVEL || "info", formatters: { bindings: (bindings) => { From 1f5e458b64a456c0718392d51b65cdac005f96c7 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 21 Nov 2023 16:25:48 -0500 Subject: [PATCH 5/7] add log details under msg property --- backend/src/middleware/requestErrorHandler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/middleware/requestErrorHandler.ts b/backend/src/middleware/requestErrorHandler.ts index 3bcea0d98..725fc4955 100644 --- a/backend/src/middleware/requestErrorHandler.ts +++ b/backend/src/middleware/requestErrorHandler.ts @@ -15,7 +15,7 @@ export const requestErrorHandler: ErrorRequestHandler = async ( if (res.headersSent) return next(); let error: RequestError; - + switch (true) { case err instanceof TokenExpiredError: error = UnauthorizedRequestError({ stack: err.stack, message: "Token expired" }); @@ -31,7 +31,7 @@ export const requestErrorHandler: ErrorRequestHandler = async ( break; } - logger[mapToPinoLogLevel(error.level)](error); + logger[mapToPinoLogLevel(error.level)]({ msg: error }); if (req.user) { Sentry.setUser({ email: (req.user as any).email }); From 3478d71e99a21a566ef79451b5f88bb824597435 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Tue, 21 Nov 2023 17:45:01 -0500 Subject: [PATCH 6/7] unblock gamma pipeline --- backend/src/index.ts | 5 ++++- backend/src/services/RedisService.ts | 13 ++++++++----- backend/src/utils/logging/logger.ts | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/backend/src/index.ts b/backend/src/index.ts index cb37e197f..d1379c04f 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -97,14 +97,17 @@ import { githubPushEventSecretScan } from "./queues/secret-scanning/githubScanPu const SmeeClient = require("smee-client"); // eslint-disable-line import path from "path"; import { serverConfigInit } from "./config/serverConfig"; +import { initRedis } from "./services/RedisService"; let handler: null | any = null; const main = async () => { await initLogger(); + const port = await getPort(); - // initializing the database connection + // initializing the database connection + redis + await initRedis() await DatabaseService.initDatabase(await getMongoURL()); const serverCfg = await serverConfigInit(); await setup(); diff --git a/backend/src/services/RedisService.ts b/backend/src/services/RedisService.ts index 218234a1a..e439ffb40 100644 --- a/backend/src/services/RedisService.ts +++ b/backend/src/services/RedisService.ts @@ -3,11 +3,14 @@ import { logger } from "../utils/logging"; let redisClient: TRedis | null; -if (process.env.REDIS_URL) { - redisClient = new Redis(process.env.REDIS_URL as string); -} else { - logger.warn("Redis URL not set, skipping Redis initialization."); - redisClient = null; +export const initRedis = async () => { + if (process.env.REDIS_URL) { + redisClient = new Redis(process.env.REDIS_URL as string); + } else { + logger.warn("Redis URL not set, skipping Redis initialization."); + redisClient = null; + } } + export { redisClient }; diff --git a/backend/src/utils/logging/logger.ts b/backend/src/utils/logging/logger.ts index 3e9d82240..7562a8b5b 100644 --- a/backend/src/utils/logging/logger.ts +++ b/backend/src/utils/logging/logger.ts @@ -19,7 +19,7 @@ export const initLogger = async () => { const isProduction = nodeEnv === "production"; const targets: pino.TransportMultiOptions["targets"][number][] = [ isProduction - ? { level: "info", target: "pino/file", options: { destination: 'logs/infisical-backend/logs.txt', mkdir: true } } + ? { level: "info", target: "pino/file", options: {} } : { level: "info", target: "pino-pretty", // must be installed separately From f3895b70ee8b91e97d56f7b74a85b0ae4bf91a03 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Wed, 22 Nov 2023 13:01:27 +0530 Subject: [PATCH 7/7] feat: added swc compiler for ts-node for speed boost --- backend/package-lock.json | 334 +++++++++++++++++++++++++++++++++++++- backend/package.json | 3 + backend/tsconfig.json | 3 + 3 files changed, 334 insertions(+), 6 deletions(-) diff --git a/backend/package-lock.json b/backend/package-lock.json index 60ded7bf2..0bbbed613 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -74,6 +74,8 @@ "devDependencies": { "@jest/globals": "^29.3.1", "@posthog/plugin-scaffold": "^1.3.4", + "@swc/core": "^1.3.99", + "@swc/helpers": "^0.5.3", "@types/bcrypt": "^5.0.0", "@types/bcryptjs": "^2.4.2", "@types/bull": "^4.10.0", @@ -104,6 +106,7 @@ "nodemon": "^2.0.19", "npm": "^8.19.3", "pino-pretty": "^10.2.3", + "regenerator-runtime": "^0.14.0", "smee-client": "^1.2.3", "supertest": "^6.3.3", "swagger-autogen": "^2.23.5", @@ -4576,6 +4579,11 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, "node_modules/@babel/template": { "version": "7.22.15", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", @@ -6945,6 +6953,208 @@ "node": ">=14.0.0" } }, + "node_modules/@swc/core": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.99.tgz", + "integrity": "sha512-8O996RfuPC4ieb4zbYMfbyCU9k4gSOpyCNnr7qBQ+o7IEmh8JCV6B8wwu+fT/Om/6Lp34KJe1IpJ/24axKS6TQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.99", + "@swc/core-darwin-x64": "1.3.99", + "@swc/core-linux-arm64-gnu": "1.3.99", + "@swc/core-linux-arm64-musl": "1.3.99", + "@swc/core-linux-x64-gnu": "1.3.99", + "@swc/core-linux-x64-musl": "1.3.99", + "@swc/core-win32-arm64-msvc": "1.3.99", + "@swc/core-win32-ia32-msvc": "1.3.99", + "@swc/core-win32-x64-msvc": "1.3.99" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.99.tgz", + "integrity": "sha512-Qj7Jct68q3ZKeuJrjPx7k8SxzWN6PqLh+VFxzA+KwLDpQDPzOlKRZwkIMzuFjLhITO4RHgSnXoDk/Syz0ZeN+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.99.tgz", + "integrity": "sha512-wR7m9QVJjgiBu1PSOHy7s66uJPa45Kf9bZExXUL+JAa9OQxt5y+XVzr+n+F045VXQOwdGWplgPnWjgbUUHEVyw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.99.tgz", + "integrity": "sha512-gcGv1l5t0DScEONmw5OhdVmEI/o49HCe9Ik38zzH0NtDkc+PDYaCcXU5rvfZP2qJFaAAr8cua8iJcOunOSLmnA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.99.tgz", + "integrity": "sha512-XL1/eUsTO8BiKsWq9i3iWh7H99iPO61+9HYiWVKhSavknfj4Plbn+XyajDpxsauln5o8t+BRGitymtnAWJM4UQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.99.tgz", + "integrity": "sha512-fGrXYE6DbTfGNIGQmBefYxSk3rp/1lgbD0nVg4rl4mfFRQPi7CgGhrrqSuqZ/ezXInUIgoCyvYGWFSwjLXt/Qg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.99.tgz", + "integrity": "sha512-kvgZp/mqf3IJ806gUOL6gN6VU15+DfzM1Zv4Udn8GqgXiUAvbQehrtruid4Snn5pZTLj4PEpSCBbxgxK1jbssA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.99.tgz", + "integrity": "sha512-yt8RtZ4W/QgFF+JUemOUQAkVW58cCST7mbfKFZ1v16w3pl3NcWd9OrtppFIXpbjU1rrUX2zp2R7HZZzZ2Zk/aQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.99.tgz", + "integrity": "sha512-62p5fWnOJR/rlbmbUIpQEVRconICy5KDScWVuJg1v3GPLBrmacjphyHiJC1mp6dYvvoEWCk/77c/jcQwlXrDXw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.99.tgz", + "integrity": "sha512-PdppWhkoS45VGdMBxvClVgF1hVjqamtvYd82Gab1i4IV45OSym2KinoDCKE1b6j3LwBLOn2J9fvChGSgGfDCHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -16810,9 +17020,10 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "node_modules/require-directory": { "version": "2.1.1", @@ -22127,6 +22338,13 @@ "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "requires": { "regenerator-runtime": "^0.13.11" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + } } }, "@babel/template": { @@ -23963,6 +24181,109 @@ "tslib": "^2.5.0" } }, + "@swc/core": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.99.tgz", + "integrity": "sha512-8O996RfuPC4ieb4zbYMfbyCU9k4gSOpyCNnr7qBQ+o7IEmh8JCV6B8wwu+fT/Om/6Lp34KJe1IpJ/24axKS6TQ==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.99", + "@swc/core-darwin-x64": "1.3.99", + "@swc/core-linux-arm64-gnu": "1.3.99", + "@swc/core-linux-arm64-musl": "1.3.99", + "@swc/core-linux-x64-gnu": "1.3.99", + "@swc/core-linux-x64-musl": "1.3.99", + "@swc/core-win32-arm64-msvc": "1.3.99", + "@swc/core-win32-ia32-msvc": "1.3.99", + "@swc/core-win32-x64-msvc": "1.3.99", + "@swc/counter": "^0.1.1", + "@swc/types": "^0.1.5" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.99.tgz", + "integrity": "sha512-Qj7Jct68q3ZKeuJrjPx7k8SxzWN6PqLh+VFxzA+KwLDpQDPzOlKRZwkIMzuFjLhITO4RHgSnXoDk/Syz0ZeN+Q==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.99.tgz", + "integrity": "sha512-wR7m9QVJjgiBu1PSOHy7s66uJPa45Kf9bZExXUL+JAa9OQxt5y+XVzr+n+F045VXQOwdGWplgPnWjgbUUHEVyw==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.99.tgz", + "integrity": "sha512-gcGv1l5t0DScEONmw5OhdVmEI/o49HCe9Ik38zzH0NtDkc+PDYaCcXU5rvfZP2qJFaAAr8cua8iJcOunOSLmnA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.99.tgz", + "integrity": "sha512-XL1/eUsTO8BiKsWq9i3iWh7H99iPO61+9HYiWVKhSavknfj4Plbn+XyajDpxsauln5o8t+BRGitymtnAWJM4UQ==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.99.tgz", + "integrity": "sha512-fGrXYE6DbTfGNIGQmBefYxSk3rp/1lgbD0nVg4rl4mfFRQPi7CgGhrrqSuqZ/ezXInUIgoCyvYGWFSwjLXt/Qg==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.99.tgz", + "integrity": "sha512-kvgZp/mqf3IJ806gUOL6gN6VU15+DfzM1Zv4Udn8GqgXiUAvbQehrtruid4Snn5pZTLj4PEpSCBbxgxK1jbssA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.99.tgz", + "integrity": "sha512-yt8RtZ4W/QgFF+JUemOUQAkVW58cCST7mbfKFZ1v16w3pl3NcWd9OrtppFIXpbjU1rrUX2zp2R7HZZzZ2Zk/aQ==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.99.tgz", + "integrity": "sha512-62p5fWnOJR/rlbmbUIpQEVRconICy5KDScWVuJg1v3GPLBrmacjphyHiJC1mp6dYvvoEWCk/77c/jcQwlXrDXw==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.3.99", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.99.tgz", + "integrity": "sha512-PdppWhkoS45VGdMBxvClVgF1hVjqamtvYd82Gab1i4IV45OSym2KinoDCKE1b6j3LwBLOn2J9fvChGSgGfDCHQ==", + "dev": true, + "optional": true + }, + "@swc/counter": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz", + "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==", + "dev": true + }, + "@swc/helpers": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz", + "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@swc/types": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz", + "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==", + "dev": true + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", @@ -31319,9 +31640,10 @@ } }, "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true }, "require-directory": { "version": "2.1.1", diff --git a/backend/package.json b/backend/package.json index 441398d59..933094768 100644 --- a/backend/package.json +++ b/backend/package.json @@ -97,6 +97,8 @@ "devDependencies": { "@jest/globals": "^29.3.1", "@posthog/plugin-scaffold": "^1.3.4", + "@swc/core": "^1.3.99", + "@swc/helpers": "^0.5.3", "@types/bcrypt": "^5.0.0", "@types/bcryptjs": "^2.4.2", "@types/bull": "^4.10.0", @@ -127,6 +129,7 @@ "nodemon": "^2.0.19", "npm": "^8.19.3", "pino-pretty": "^10.2.3", + "regenerator-runtime": "^0.14.0", "smee-client": "^1.2.3", "supertest": "^6.3.3", "swagger-autogen": "^2.23.5", diff --git a/backend/tsconfig.json b/backend/tsconfig.json index d2f7a1b89..a908b72e9 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -15,6 +15,9 @@ "skipLibCheck": true, "typeRoots": ["./src/types", "./node_modules/@types"] }, + "ts-node": { + "swc": true + }, "include": ["src/**/*"], "exclude": ["node_modules"] }