diff --git a/codecov.yml b/codecov.yml index 4d10d879bd..c5d31649d6 100644 --- a/codecov.yml +++ b/codecov.yml @@ -39,6 +39,7 @@ component_management: - packages/@n8n/client-oauth2/** - packages/@n8n/decorators/** - packages/@n8n/constants/** + - packages/@n8n/backend-common/** - packages/@n8n/db/** - packages/@n8n/di/** - packages/@n8n/imap/** diff --git a/packages/@n8n/backend-common/.eslintrc.js b/packages/@n8n/backend-common/.eslintrc.js new file mode 100644 index 0000000000..8c5b78c5da --- /dev/null +++ b/packages/@n8n/backend-common/.eslintrc.js @@ -0,0 +1,7 @@ +const sharedOptions = require('@n8n/eslint-config/shared'); + +/** @type {import('@types/eslint').ESLint.ConfigData} */ +module.exports = { + extends: ['@n8n/eslint-config/base'], + ...sharedOptions(__dirname), +}; diff --git a/packages/@n8n/backend-common/jest.config.js b/packages/@n8n/backend-common/jest.config.js new file mode 100644 index 0000000000..d14f2d60c6 --- /dev/null +++ b/packages/@n8n/backend-common/jest.config.js @@ -0,0 +1,7 @@ +/** @type {import('jest').Config} */ +module.exports = { + ...require('../../../jest.config'), + transform: { + '^.+\\.ts$': ['ts-jest', { isolatedModules: false }], + }, +}; diff --git a/packages/@n8n/backend-common/package.json b/packages/@n8n/backend-common/package.json new file mode 100644 index 0000000000..183cf8cebe --- /dev/null +++ b/packages/@n8n/backend-common/package.json @@ -0,0 +1,29 @@ +{ + "name": "@n8n/backend-common", + "version": "0.1.0", + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc --noEmit", + "build": "tsc -p tsconfig.build.json", + "format": "biome format --write .", + "format:check": "biome ci .", + "lint": "eslint .", + "lintfix": "eslint . --fix", + "watch": "tsc -p tsconfig.build.json --watch", + "test": "jest", + "test:dev": "jest --watch" + }, + "main": "dist/index.js", + "module": "src/index.ts", + "types": "dist/index.d.ts", + "files": [ + "dist/**/*" + ], + "dependencies": { + "reflect-metadata": "catalog:" + }, + "devDependencies": { + "@n8n/typescript-config": "workspace:*" + } +} diff --git a/packages/@n8n/backend-common/src/index.ts b/packages/@n8n/backend-common/src/index.ts new file mode 100644 index 0000000000..cb0ff5c3b5 --- /dev/null +++ b/packages/@n8n/backend-common/src/index.ts @@ -0,0 +1 @@ +export {}; diff --git a/packages/@n8n/backend-common/tsconfig.build.json b/packages/@n8n/backend-common/tsconfig.build.json new file mode 100644 index 0000000000..ee0e3e20fd --- /dev/null +++ b/packages/@n8n/backend-common/tsconfig.build.json @@ -0,0 +1,11 @@ +{ + "extends": ["./tsconfig.json", "@n8n/typescript-config/tsconfig.build.json"], + "compilerOptions": { + "composite": true, + "rootDir": "src", + "outDir": "dist", + "tsBuildInfoFile": "dist/build.tsbuildinfo" + }, + "include": ["src/**/*.ts"], + "exclude": ["src/**/__tests__/**"] +} diff --git a/packages/@n8n/backend-common/tsconfig.json b/packages/@n8n/backend-common/tsconfig.json new file mode 100644 index 0000000000..eca44d32aa --- /dev/null +++ b/packages/@n8n/backend-common/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.common.json", + "compilerOptions": { + "rootDir": ".", + "types": ["node", "jest"], + "baseUrl": "src", + "tsBuildInfoFile": "dist/typecheck.tsbuildinfo", + "experimentalDecorators": true, + "emitDecoratorMetadata": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/cli/package.json b/packages/cli/package.json index 0110c3a30e..ae4fbd17fd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -94,6 +94,7 @@ "@n8n/client-oauth2": "workspace:*", "@n8n/config": "workspace:*", "@n8n/constants": "workspace:^", + "@n8n/backend-common": "workspace:^", "@n8n/db": "workspace:^", "@n8n/decorators": "workspace:*", "@n8n/di": "workspace:*", diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index d0a7ea00be..5406a5e228 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -29,6 +29,7 @@ { "path": "../@n8n/constants/tsconfig.build.json" }, { "path": "../@n8n/decorators/tsconfig.build.json" }, { "path": "../@n8n/db/tsconfig.build.json" }, + { "path": "../@n8n/backend-common/tsconfig.build.json" }, { "path": "../@n8n/di/tsconfig.build.json" }, { "path": "../@n8n/nodes-langchain/tsconfig.build.json" }, { "path": "../@n8n/permissions/tsconfig.build.json" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 767e5b85ca..e8b824f3e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -385,6 +385,16 @@ importers: specifier: workspace:* version: link:../typescript-config + packages/@n8n/backend-common: + dependencies: + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + packages/@n8n/benchmark: dependencies: '@oclif/core': @@ -671,7 +681,7 @@ importers: version: 4.3.0 '@getzep/zep-cloud': specifier: 1.0.12 - version: 1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(e320b1d8e94e7308fefdef3743329630)) + version: 1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6)) '@getzep/zep-js': specifier: 0.9.0 version: 0.9.0 @@ -698,7 +708,7 @@ importers: version: 0.3.2(@aws-sdk/client-sso-oidc@3.666.0(@aws-sdk/client-sts@3.666.0))(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13) '@langchain/community': specifier: 'catalog:' - version: 0.3.24(a23560be5fb93c23c5c4ed2a6b67082b) + version: 0.3.24(d72b3dbd91eb98a3175f929d13e7c0a7) '@langchain/core': specifier: 'catalog:' version: 0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)) @@ -800,7 +810,7 @@ importers: version: 23.0.1 langchain: specifier: 0.3.11 - version: 0.3.11(e320b1d8e94e7308fefdef3743329630) + version: 0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6) lodash: specifier: 'catalog:' version: 4.17.21 @@ -1036,6 +1046,9 @@ importers: '@n8n/api-types': specifier: workspace:* version: link:../@n8n/api-types + '@n8n/backend-common': + specifier: workspace:^ + version: link:../@n8n/backend-common '@n8n/client-oauth2': specifier: workspace:* version: link:../@n8n/client-oauth2 @@ -16341,7 +16354,7 @@ snapshots: '@gar/promisify@1.1.3': optional: true - '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(e320b1d8e94e7308fefdef3743329630))': + '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6))': dependencies: form-data: 4.0.0 node-fetch: 2.7.0(encoding@0.1.13) @@ -16350,7 +16363,7 @@ snapshots: zod: 3.24.1 optionalDependencies: '@langchain/core': 0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)) - langchain: 0.3.11(e320b1d8e94e7308fefdef3743329630) + langchain: 0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6) transitivePeerDependencies: - encoding @@ -16865,7 +16878,7 @@ snapshots: - aws-crt - encoding - '@langchain/community@0.3.24(a23560be5fb93c23c5c4ed2a6b67082b)': + '@langchain/community@0.3.24(d72b3dbd91eb98a3175f929d13e7c0a7)': dependencies: '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.49.1)(deepmerge@4.3.1)(dotenv@16.4.5)(encoding@0.1.13)(openai@4.78.1(encoding@0.1.13)(zod@3.24.1))(zod@3.24.1) '@ibm-cloud/watsonx-ai': 1.1.2 @@ -16876,7 +16889,7 @@ snapshots: flat: 5.0.2 ibm-cloud-sdk-core: 5.3.2 js-yaml: 4.1.0 - langchain: 0.3.11(e320b1d8e94e7308fefdef3743329630) + langchain: 0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6) langsmith: 0.2.15(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)) openai: 4.78.1(encoding@0.1.13)(zod@3.24.1) uuid: 10.0.0 @@ -16891,7 +16904,7 @@ snapshots: '@aws-sdk/credential-provider-node': 3.666.0(@aws-sdk/client-sso-oidc@3.666.0(@aws-sdk/client-sts@3.666.0))(@aws-sdk/client-sts@3.666.0) '@azure/storage-blob': 12.18.0(encoding@0.1.13) '@browserbasehq/sdk': 2.0.0(encoding@0.1.13) - '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(e320b1d8e94e7308fefdef3743329630)) + '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13)(langchain@0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6)) '@getzep/zep-js': 0.9.0 '@google-ai/generativelanguage': 2.6.0(encoding@0.1.13) '@google-cloud/storage': 7.12.1(encoding@0.1.13) @@ -23085,7 +23098,7 @@ snapshots: '@types/debug': 4.1.12 '@types/node': 18.16.16 '@types/tough-cookie': 4.0.2 - axios: 1.8.3 + axios: 1.8.3(debug@4.4.0) camelcase: 6.3.0 debug: 4.4.0(supports-color@8.1.1) dotenv: 16.4.5 @@ -23095,7 +23108,7 @@ snapshots: isstream: 0.1.2 jsonwebtoken: 9.0.2 mime-types: 2.1.35 - retry-axios: 2.6.0(axios@1.8.3(debug@4.4.0)) + retry-axios: 2.6.0(axios@1.8.3) tough-cookie: 4.1.3 transitivePeerDependencies: - supports-color @@ -24089,7 +24102,7 @@ snapshots: kuler@2.0.0: {} - langchain@0.3.11(e320b1d8e94e7308fefdef3743329630): + langchain@0.3.11(73c39badb3fd5b3eb4d1084b1fb22de6): dependencies: '@langchain/core': 0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)) '@langchain/openai': 0.3.17(@langchain/core@0.3.30(openai@4.78.1(encoding@0.1.13)(zod@3.24.1)))(encoding@0.1.13) @@ -26462,7 +26475,7 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 - retry-axios@2.6.0(axios@1.8.3(debug@4.4.0)): + retry-axios@2.6.0(axios@1.8.3): dependencies: axios: 1.8.3 diff --git a/turbo.json b/turbo.json index 71fc63f5ca..04e313ff39 100644 --- a/turbo.json +++ b/turbo.json @@ -30,6 +30,7 @@ "@n8n/config#lint", "@n8n/decorators#lint", "@n8n/constants#lint", + "@n8n/backend-common#lint", "@n8n/db#lint", "@n8n/di#lint", "@n8n/client-oauth2#lint",