@n8n/db 1.29.7 → 1.30.1
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/dist/build.tsbuildinfo +1 -1
- package/dist/connection/backoff.d.ts +1 -0
- package/dist/connection/backoff.js +8 -0
- package/dist/connection/backoff.js.map +1 -0
- package/dist/connection/db-connection-monitor.d.ts +0 -2
- package/dist/connection/db-connection-monitor.js +13 -22
- package/dist/connection/db-connection-monitor.js.map +1 -1
- package/dist/connection/db-connection.d.ts +1 -0
- package/dist/connection/db-connection.js +31 -15
- package/dist/connection/db-connection.js.map +1 -1
- package/dist/entities/abstract-entity.js +2 -2
- package/dist/entities/abstract-entity.js.map +1 -1
- package/dist/entities/credentials-entity.d.ts +1 -1
- package/dist/entities/execution-entity.d.ts +1 -0
- package/dist/entities/execution-entity.js +4 -0
- package/dist/entities/execution-entity.js.map +1 -1
- package/dist/entities/index.d.ts +5 -1
- package/dist/entities/index.js +13 -1
- package/dist/entities/index.js.map +1 -1
- package/dist/entities/scheduled-job.d.ts +25 -0
- package/dist/entities/scheduled-job.js +92 -0
- package/dist/entities/scheduled-job.js.map +1 -0
- package/dist/entities/scheduled-task.d.ts +30 -0
- package/dist/entities/scheduled-task.js +105 -0
- package/dist/entities/scheduled-task.js.map +1 -0
- package/dist/entities/types-db.d.ts +1 -0
- package/dist/entities/types-db.js.map +1 -1
- package/dist/entities/user.d.ts +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/migrations/common/1714133768519-CreateProject.js +2 -2
- package/dist/migrations/common/1714133768519-CreateProject.js.map +1 -1
- package/dist/migrations/common/1724951148974-AddApiKeysTable.js +2 -2
- package/dist/migrations/common/1724951148974-AddApiKeysTable.js.map +1 -1
- package/dist/migrations/common/1784000000039-DropAgentExecutionFallbackColumns.d.ts +5 -0
- package/dist/migrations/common/1784000000039-DropAgentExecutionFallbackColumns.js +19 -0
- package/dist/migrations/common/1784000000039-DropAgentExecutionFallbackColumns.js.map +1 -0
- package/dist/migrations/common/1784000000041-AddUsedPrivateCredentialsToExecutionEntity.d.ts +5 -0
- package/dist/migrations/common/1784000000041-AddUsedPrivateCredentialsToExecutionEntity.js +20 -0
- package/dist/migrations/common/1784000000041-AddUsedPrivateCredentialsToExecutionEntity.js.map +1 -0
- package/dist/migrations/common/1784000000042-CreateSchedulerTables.d.ts +7 -0
- package/dist/migrations/common/1784000000042-CreateSchedulerTables.js +103 -0
- package/dist/migrations/common/1784000000042-CreateSchedulerTables.js.map +1 -0
- package/dist/migrations/postgresdb/1784000000043-CreateWorkflowStatisticsDeltaTable.d.ts +5 -0
- package/dist/migrations/postgresdb/1784000000043-CreateWorkflowStatisticsDeltaTable.js +51 -0
- package/dist/migrations/postgresdb/1784000000043-CreateWorkflowStatisticsDeltaTable.js.map +1 -0
- package/dist/migrations/postgresdb/index.js +8 -0
- package/dist/migrations/postgresdb/index.js.map +1 -1
- package/dist/migrations/sqlite/1724951148974-AddApiKeysTable.js +2 -2
- package/dist/migrations/sqlite/1724951148974-AddApiKeysTable.js.map +1 -1
- package/dist/migrations/sqlite/index.js +6 -0
- package/dist/migrations/sqlite/index.js.map +1 -1
- package/dist/repositories/execution.repository.js +6 -14
- package/dist/repositories/execution.repository.js.map +1 -1
- package/dist/repositories/folder.repository.d.ts +1 -0
- package/dist/repositories/folder.repository.js +17 -0
- package/dist/repositories/folder.repository.js.map +1 -1
- package/dist/repositories/index.d.ts +3 -0
- package/dist/repositories/index.js +5 -1
- package/dist/repositories/index.js.map +1 -1
- package/dist/repositories/scheduled-job.repository.d.ts +19 -0
- package/dist/repositories/scheduled-job.repository.js +80 -0
- package/dist/repositories/scheduled-job.repository.js.map +1 -0
- package/dist/repositories/scheduled-task.repository.d.ts +53 -0
- package/dist/repositories/scheduled-task.repository.js +229 -0
- package/dist/repositories/scheduled-task.repository.js.map +1 -0
- package/dist/repositories/test-case-execution.repository.ee.d.ts +5 -0
- package/dist/repositories/test-case-execution.repository.ee.js +11 -0
- package/dist/repositories/test-case-execution.repository.ee.js.map +1 -1
- package/dist/repositories/test-run.repository.ee.d.ts +8 -2
- package/dist/repositories/test-run.repository.ee.js +30 -10
- package/dist/repositories/test-run.repository.ee.js.map +1 -1
- package/dist/repositories/workflow-publication-outbox.repository.d.ts +7 -1
- package/dist/repositories/workflow-publication-outbox.repository.js +24 -0
- package/dist/repositories/workflow-publication-outbox.repository.js.map +1 -1
- package/dist/repositories/workflow-statistics.repository.d.ts +13 -1
- package/dist/repositories/workflow-statistics.repository.js +69 -34
- package/dist/repositories/workflow-statistics.repository.js.map +1 -1
- package/dist/repositories/workflow.repository.d.ts +3 -3
- package/dist/services/db-lock.service.d.ts +1 -0
- package/dist/services/db-lock.service.js +1 -0
- package/dist/services/db-lock.service.js.map +1 -1
- package/dist/utils/dialect-time.d.ts +3 -0
- package/dist/utils/dialect-time.js +20 -0
- package/dist/utils/dialect-time.js.map +1 -0
- package/dist/utils/generators.js +2 -2
- package/dist/utils/generators.js.map +1 -1
- package/package.json +15 -14
|
@@ -8,16 +8,13 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.WorkflowStatisticsRepository = void 0;
|
|
16
13
|
const config_1 = require("@n8n/config");
|
|
17
14
|
const di_1 = require("@n8n/di");
|
|
18
15
|
const permissions_1 = require("@n8n/permissions");
|
|
19
16
|
const typeorm_1 = require("@n8n/typeorm");
|
|
20
|
-
const
|
|
17
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
21
18
|
const entities_1 = require("../entities");
|
|
22
19
|
let WorkflowStatisticsRepository = class WorkflowStatisticsRepository extends typeorm_1.Repository {
|
|
23
20
|
constructor(dataSource, globalConfig) {
|
|
@@ -52,46 +49,84 @@ let WorkflowStatisticsRepository = class WorkflowStatisticsRepository extends ty
|
|
|
52
49
|
}
|
|
53
50
|
}
|
|
54
51
|
async upsertWorkflowStatistics(eventName, workflowId, isRootExecution, workflowName) {
|
|
55
|
-
|
|
52
|
+
if (this.globalConfig.database.type !== 'sqlite') {
|
|
53
|
+
throw new n8n_workflow_1.UnexpectedError('upsertWorkflowStatistics is SQLite-only; use appendIncrement + rollup on Postgres');
|
|
54
|
+
}
|
|
56
55
|
const escapedTableName = this.manager.connection.driver.escape(this.metadata.tableName);
|
|
57
56
|
try {
|
|
58
57
|
const rootCountIncrement = isRootExecution ? 1 : 0;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return (counter?.count ?? 0) > 1 ? 'update' : counter?.count === 1 ? 'insert' : 'failed';
|
|
73
|
-
}
|
|
74
|
-
else if (dbType === 'postgresdb') {
|
|
75
|
-
const queryResult = (await this.query(`INSERT INTO ${escapedTableName} ("count", "rootCount", "name", "workflowId", "workflowName", "latestEvent")
|
|
76
|
-
VALUES (1, $1, $2, $3, $4, CURRENT_TIMESTAMP)
|
|
77
|
-
ON CONFLICT ("name", "workflowId")
|
|
78
|
-
DO UPDATE SET
|
|
79
|
-
"count" = ${escapedTableName}."count" + 1,
|
|
80
|
-
"rootCount" = ${escapedTableName}."rootCount" + $5,
|
|
81
|
-
"workflowName" = $4,
|
|
82
|
-
"latestEvent" = CURRENT_TIMESTAMP
|
|
83
|
-
RETURNING *;`, [rootCountIncrement, eventName, workflowId, workflowName ?? null, rootCountIncrement]));
|
|
84
|
-
return Number(queryResult[0].count) === 1 ? 'insert' : 'update';
|
|
85
|
-
}
|
|
86
|
-
node_assert_1.default.fail('Unknown database type');
|
|
58
|
+
await this.query(`INSERT INTO ${escapedTableName} ("count", "rootCount", "name", "workflowId", "workflowName", "latestEvent")
|
|
59
|
+
VALUES (1, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
60
|
+
ON CONFLICT (workflowId, name)
|
|
61
|
+
DO UPDATE SET
|
|
62
|
+
count = count + 1,
|
|
63
|
+
rootCount = rootCount + ?,
|
|
64
|
+
workflowName = excluded.workflowName,
|
|
65
|
+
latestEvent = CURRENT_TIMESTAMP`, [rootCountIncrement, eventName, workflowId, workflowName ?? null, rootCountIncrement]);
|
|
66
|
+
const counter = await this.findOne({
|
|
67
|
+
select: ['count'],
|
|
68
|
+
where: { name: eventName, workflowId },
|
|
69
|
+
});
|
|
70
|
+
return (counter?.count ?? 0) > 1 ? 'update' : counter?.count === 1 ? 'insert' : 'failed';
|
|
87
71
|
}
|
|
88
72
|
catch (error) {
|
|
89
|
-
console.log('error', error);
|
|
90
73
|
if (error instanceof typeorm_1.QueryFailedError)
|
|
91
74
|
return 'failed';
|
|
92
75
|
throw error;
|
|
93
76
|
}
|
|
94
77
|
}
|
|
78
|
+
deltaTableName() {
|
|
79
|
+
const { tablePrefix } = this.globalConfig.database;
|
|
80
|
+
return this.manager.connection.driver.escape(`${tablePrefix}workflow_statistics_delta`);
|
|
81
|
+
}
|
|
82
|
+
async appendIncrement(eventName, workflowId, isRootExecution, workflowName) {
|
|
83
|
+
const table = this.deltaTableName();
|
|
84
|
+
await this.query(`INSERT INTO ${table} ("workflowId", "name", "rootCountDelta", "workflowName") VALUES ($1, $2, $3, $4)`, [workflowId, eventName, isRootExecution ? 1 : 0, workflowName ?? null]);
|
|
85
|
+
}
|
|
86
|
+
async rollupIncrements(manager, batchSize) {
|
|
87
|
+
const stats = this.manager.connection.driver.escape(this.metadata.tableName);
|
|
88
|
+
const delta = this.deltaTableName();
|
|
89
|
+
const rows = await manager.query(`WITH batch AS (
|
|
90
|
+
DELETE FROM ${delta}
|
|
91
|
+
WHERE id IN (SELECT id FROM ${delta} ORDER BY id LIMIT $1)
|
|
92
|
+
RETURNING "workflowId", "name", "rootCountDelta", "createdAt", "workflowName"
|
|
93
|
+
),
|
|
94
|
+
agg AS (
|
|
95
|
+
SELECT "workflowId", "name",
|
|
96
|
+
COUNT(*) AS "countIncrement",
|
|
97
|
+
SUM("rootCountDelta") AS "rootCountIncrement",
|
|
98
|
+
MAX("createdAt") AS "latestEvent",
|
|
99
|
+
MIN("createdAt") AS "firstEvent",
|
|
100
|
+
(ARRAY_AGG("workflowName" ORDER BY "createdAt" DESC NULLS LAST))[1] AS "workflowName"
|
|
101
|
+
FROM batch GROUP BY "workflowId", "name"
|
|
102
|
+
),
|
|
103
|
+
upsert AS (
|
|
104
|
+
INSERT INTO ${stats} ("workflowId", "name", "count", "rootCount", "latestEvent", "workflowName")
|
|
105
|
+
SELECT "workflowId", "name", "countIncrement", "rootCountIncrement", "latestEvent", "workflowName" FROM agg
|
|
106
|
+
ON CONFLICT ("name", "workflowId") DO UPDATE SET
|
|
107
|
+
"count" = ${stats}."count" + EXCLUDED."count",
|
|
108
|
+
"rootCount" = ${stats}."rootCount" + EXCLUDED."rootCount",
|
|
109
|
+
"latestEvent" = GREATEST(${stats}."latestEvent", EXCLUDED."latestEvent"),
|
|
110
|
+
"workflowName" = EXCLUDED."workflowName"
|
|
111
|
+
RETURNING "workflowId", "name", ("xmax" = 0) AS inserted
|
|
112
|
+
)
|
|
113
|
+
SELECT (SELECT COUNT(*) FROM batch)::int AS delta_rows,
|
|
114
|
+
u."workflowId", u."name", u.inserted, a."workflowName", a."firstEvent"
|
|
115
|
+
FROM upsert u JOIN agg a ON a."workflowId" = u."workflowId" AND a."name" = u."name"`, [batchSize]);
|
|
116
|
+
if (rows.length === 0)
|
|
117
|
+
return { increments: 0, firstOccurrences: [] };
|
|
118
|
+
const firstOccurrences = rows
|
|
119
|
+
.filter((r) => r.inserted &&
|
|
120
|
+
(r.name === "production_success" ||
|
|
121
|
+
r.name === "production_error"))
|
|
122
|
+
.map((r) => ({
|
|
123
|
+
name: r.name,
|
|
124
|
+
workflowId: r.workflowId,
|
|
125
|
+
workflowName: r.workflowName,
|
|
126
|
+
firstEventMs: r.firstEvent.getTime(),
|
|
127
|
+
}));
|
|
128
|
+
return { increments: rows[0].delta_rows, firstOccurrences };
|
|
129
|
+
}
|
|
95
130
|
async queryNumWorkflowsUserHasWithFiveOrMoreProdExecs(userId) {
|
|
96
131
|
const result = await this.createQueryBuilder('ws')
|
|
97
132
|
.select('COUNT(DISTINCT ws.workflowId)', 'count')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-statistics.repository.js","sourceRoot":"","sources":["../../src/repositories/workflow-statistics.repository.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow-statistics.repository.js","sourceRoot":"","sources":["../../src/repositories/workflow-statistics.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,9 +70,9 @@ export declare class WorkflowRepository extends Repository<WorkflowEntity> {
|
|
|
70
70
|
private getWorkflowsIds;
|
|
71
71
|
private fetchExtraData;
|
|
72
72
|
private enrichDataWithExtras;
|
|
73
|
-
getMany(workflowIds: string[], options?: ListQuery.Options): Promise<(Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "
|
|
73
|
+
getMany(workflowIds: string[], options?: ListQuery.Options): Promise<(Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[]>;
|
|
74
74
|
getManyAndCount(sharedWorkflowIds: string[], options?: ListQuery.Options): Promise<{
|
|
75
|
-
workflows:
|
|
75
|
+
workflows: (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[] | ListQueryDb.Workflow.WithSharing[];
|
|
76
76
|
count: number;
|
|
77
77
|
}>;
|
|
78
78
|
getManyAndCountWithSharingSubquery(user: User, sharingOptions: {
|
|
@@ -83,7 +83,7 @@ export declare class WorkflowRepository extends Repository<WorkflowEntity> {
|
|
|
83
83
|
personalProjectOwnerId?: string;
|
|
84
84
|
onlySharedWithMe?: boolean;
|
|
85
85
|
}, options?: ListQuery.Options, callableForParentWorkflowId?: string): Promise<{
|
|
86
|
-
workflows:
|
|
86
|
+
workflows: (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[] | ListQueryDb.Workflow.WithSharing[];
|
|
87
87
|
count: number;
|
|
88
88
|
}>;
|
|
89
89
|
private getManyQueryWithSharingSubquery;
|
|
@@ -18,6 +18,7 @@ var DbLock;
|
|
|
18
18
|
(function (DbLock) {
|
|
19
19
|
DbLock[DbLock["AUTH_ROLES_SYNC"] = 1001] = "AUTH_ROLES_SYNC";
|
|
20
20
|
DbLock[DbLock["TRUSTED_KEY_REFRESH"] = 1002] = "TRUSTED_KEY_REFRESH";
|
|
21
|
+
DbLock[DbLock["WORKFLOW_STATISTICS_ROLLUP"] = 1003] = "WORKFLOW_STATISTICS_ROLLUP";
|
|
21
22
|
DbLock[DbLock["TEST"] = 9999] = "TEST";
|
|
22
23
|
})(DbLock || (exports.DbLock = DbLock = {}));
|
|
23
24
|
let DbLockService = class DbLockService {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db-lock.service.js","sourceRoot":"","sources":["../../src/services/db-lock.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA6C;AAC7C,gCAAkC;AAElC,0CAA4D;AAE5D,+CAAgD;AAMhD,IAAkB,
|
|
1
|
+
{"version":3,"file":"db-lock.service.js","sourceRoot":"","sources":["../../src/services/db-lock.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dbNowLiteral = dbNowLiteral;
|
|
4
|
+
exports.dbNowPlusMsLiteral = dbNowPlusMsLiteral;
|
|
5
|
+
exports.parseDbTime = parseDbTime;
|
|
6
|
+
function dbNowLiteral(isPostgres) {
|
|
7
|
+
return isPostgres ? 'CURRENT_TIMESTAMP(3)' : "STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')";
|
|
8
|
+
}
|
|
9
|
+
function dbNowPlusMsLiteral(isPostgres, ms) {
|
|
10
|
+
const rounded = Math.round(ms);
|
|
11
|
+
if (isPostgres) {
|
|
12
|
+
return `CURRENT_TIMESTAMP(3) + (${rounded} || ' milliseconds')::interval`;
|
|
13
|
+
}
|
|
14
|
+
const seconds = rounded / 1000;
|
|
15
|
+
return `STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW', '${seconds < 0 ? '' : '+'}${seconds} seconds')`;
|
|
16
|
+
}
|
|
17
|
+
function parseDbTime(value) {
|
|
18
|
+
return typeof value === 'string' ? new Date(`${value.replace(' ', 'T')}Z`) : value;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=dialect-time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialect-time.js","sourceRoot":"","sources":["../../src/utils/dialect-time.ts"],"names":[],"mappings":";;AAYA,oCAEC;AAOD,gDAOC;AAOD,kCAEC;AAzBD,SAAgB,YAAY,CAAC,UAAmB;IAC/C,OAAO,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,sCAAsC,CAAC;AACrF,CAAC;AAOD,SAAgB,kBAAkB,CAAC,UAAmB,EAAE,EAAU;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/B,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,2BAA2B,OAAO,gCAAgC,CAAC;IAC3E,CAAC;IACD,MAAM,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;IAC/B,OAAO,yCAAyC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,YAAY,CAAC;AAC9F,CAAC;AAOD,SAAgB,WAAW,CAAC,KAAoB;IAC/C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpF,CAAC"}
|
package/dist/utils/generators.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateHostInstanceId = generateHostInstanceId;
|
|
4
|
-
const
|
|
4
|
+
const generate_nano_id_1 = require("@n8n/utils/generate-nano-id");
|
|
5
5
|
function generateHostInstanceId(instanceType) {
|
|
6
|
-
return `${instanceType}-${(0,
|
|
6
|
+
return `${instanceType}-${(0, generate_nano_id_1.generateNanoId)()}`;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=generators.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/utils/generators.ts"],"names":[],"mappings":";;AAGA,wDAEC;AAJD,
|
|
1
|
+
{"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/utils/generators.ts"],"names":[],"mappings":";;AAGA,wDAEC;AAJD,kEAA6D;AAE7D,SAAgB,sBAAsB,CAAC,YAA0B;IAChE,OAAO,GAAG,YAAY,IAAI,IAAA,iCAAc,GAAE,EAAE,CAAC;AAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/db",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "src/index.ts",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
8
|
"dist/**/*",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
9
|
+
"LICENSE_EE.md",
|
|
10
|
+
"LICENSE.md"
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"class-validator": "0.14.0",
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
"uuid": "11.1.1",
|
|
20
20
|
"xss": "1.0.15",
|
|
21
21
|
"zod": "3.25.67",
|
|
22
|
-
"@n8n/
|
|
22
|
+
"@n8n/api-types": "1.30.1",
|
|
23
|
+
"@n8n/backend-common": "1.30.1",
|
|
24
|
+
"@n8n/config": "2.28.0",
|
|
25
|
+
"@n8n/decorators": "1.30.1",
|
|
26
|
+
"@n8n/constants": "0.30.0",
|
|
23
27
|
"@n8n/di": "0.14.0",
|
|
24
|
-
"@n8n/
|
|
25
|
-
"@n8n/api-types": "1.29.5",
|
|
26
|
-
"@n8n/decorators": "1.29.5",
|
|
27
|
-
"@n8n/permissions": "0.66.0",
|
|
28
|
+
"@n8n/permissions": "0.67.0",
|
|
28
29
|
"@n8n/typeorm": "0.4.0",
|
|
29
|
-
"
|
|
30
|
-
"@n8n/
|
|
31
|
-
"n8n-
|
|
32
|
-
"n8n-workflow": "2.29.3"
|
|
30
|
+
"n8n-core": "2.30.1",
|
|
31
|
+
"@n8n/utils": "1.38.1",
|
|
32
|
+
"n8n-workflow": "2.30.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/express": "^5.0.1",
|
|
@@ -39,10 +39,11 @@
|
|
|
39
39
|
"express": "5.1.0",
|
|
40
40
|
"testcontainers": "^11.13.0",
|
|
41
41
|
"typescript": "6.0.2",
|
|
42
|
+
"vite": "^8.0.2",
|
|
42
43
|
"vitest": "^4.1.9",
|
|
43
44
|
"vitest-mock-extended": "^3.1.0",
|
|
44
|
-
"@n8n/typescript-config": "1.
|
|
45
|
-
"@n8n/vitest-config": "1.
|
|
45
|
+
"@n8n/typescript-config": "1.8.0",
|
|
46
|
+
"@n8n/vitest-config": "1.17.0"
|
|
46
47
|
},
|
|
47
48
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
48
49
|
"homepage": "https://n8n.io",
|