@n8n/db 1.10.3 → 1.11.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/dist/build.tsbuildinfo +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/common/1770220686000-CreateWorkflowBuilderSessionTable.js +1 -1
- package/dist/migrations/common/1770220686000-CreateWorkflowBuilderSessionTable.js.map +1 -1
- package/dist/migrations/common/1771500000001-AddUnshareScopeToCustomRoles.d.ts +5 -0
- package/dist/migrations/common/1771500000001-AddUnshareScopeToCustomRoles.js +62 -0
- package/dist/migrations/common/1771500000001-AddUnshareScopeToCustomRoles.js.map +1 -0
- package/dist/migrations/dsl/column.d.ts +0 -1
- package/dist/migrations/dsl/column.js +2 -13
- package/dist/migrations/dsl/column.js.map +1 -1
- package/dist/migrations/postgresdb/index.js +2 -0
- package/dist/migrations/postgresdb/index.js.map +1 -1
- package/dist/migrations/sqlite/index.js +2 -0
- package/dist/migrations/sqlite/index.js.map +1 -1
- package/dist/repositories/execution.repository.d.ts +1 -0
- package/dist/repositories/execution.repository.js +10 -0
- package/dist/repositories/execution.repository.js.map +1 -1
- package/dist/repositories/role.repository.d.ts +18 -0
- package/dist/repositories/role.repository.js +58 -0
- package/dist/repositories/role.repository.js.map +1 -1
- package/dist/repositories/secrets-provider-connection.repository.ee.d.ts +1 -0
- package/dist/repositories/secrets-provider-connection.repository.ee.js +12 -0
- package/dist/repositories/secrets-provider-connection.repository.ee.js.map +1 -1
- package/dist/services/auth.roles.service.d.ts +3 -5
- package/dist/services/auth.roles.service.js +28 -26
- package/dist/services/auth.roles.service.js.map +1 -1
- package/dist/services/db-lock.service.d.ts +16 -0
- package/dist/services/db-lock.service.js +64 -0
- package/dist/services/db-lock.service.js.map +1 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +4 -1
- package/dist/services/index.js.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secrets-provider-connection.repository.ee.js","sourceRoot":"","sources":["../../src/repositories/secrets-provider-connection.repository.ee.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAgE;AAEhE,0CAAwD;AAGjD,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,oBAAqC;IAC7F,YAAY,UAAsB;QACjC,KAAK,CAAC,oCAAyB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO;aAC9B,kBAAkB,CAAC,oCAAyB,EAAE,YAAY,CAAC;aAC3D,QAAQ,CAAC,0BAA0B,EAAE,QAAQ,CAAC;aAC9C,KAAK,CAAC,4CAA4C,CAAC;aACnD,QAAQ,CAAC,uCAAuC,EAAE,EAAE,WAAW,EAAE,CAAC;aAClE,QAAQ,EAAE,CAAC;QAEb,OAAO,KAAK,GAAG,CAAC,CAAC;IAClB,CAAC;IAUD,KAAK,CAAC,qBAAqB,CAC1B,UAA8E,EAAE;QAEhF,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QACjC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;aAC3D,QAAQ,CAAC,0BAA0B,EAAE,QAAQ,CAAC;aAC9C,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAEtD,IAAI,YAAY,EAAE,CAAC;YAClB,eAAe,CAAC,QAAQ,CAAC,8CAA8C,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAcD,KAAK,CAAC,eAAe,CACpB,SAAiB,EACjB,UAA8E,EAAE;QAEhF,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;QACjC,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACX,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;aAC3D,kBAAkB,CAAC,0BAA0B,EAAE,eAAe,CAAC;aAC/D,iBAAiB,CAAC,uBAAuB,EAAE,SAAS,CAAC;aACrD,KAAK,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAE/D,IAAI,YAAY,EAAE,CAAC;YAClB,eAAe,CAAC,QAAQ,CAAC,8CAA8C,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5F,CAAC;QAED,OAAO,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAQD,KAAK,CAAC,4BAA4B,CAAC,WAAmB,EAAE,SAAiB;QACxE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO;aAC9B,kBAAkB,CAAC,oCAAyB,EAAE,YAAY,CAAC;aAC3D,QAAQ,CAAC,0BAA0B,EAAE,QAAQ,CAAC;aAC9C,KAAK,CAAC,uCAAuC,EAAE,EAAE,WAAW,EAAE,CAAC;aAC/D,QAAQ,CACR,IAAI,kBAAQ,CAAC,CAAC,EAAE,EAAE,EAAE;YACnB,EAAE,CAAC,KAAK,CAAC,4CAA4C,CAAC;iBACpD,OAAO,CAAC,+BAA+B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CACF;aACA,QAAQ,EAAE,CAAC;QAEb,OAAO,KAAK,GAAG,CAAC,CAAC;IAClB,CAAC;IAOD,KAAK,CAAC,2CAA2C,CAChD,SAAiB;QAEjB,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;aACpE,iBAAiB,CAAC,0BAA0B,EAAE,eAAe,CAAC;aAC9D,iBAAiB,CAAC,uBAAuB,EAAE,SAAS,CAAC;aACrD,KAAK,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,CAAC;aAC5D,OAAO,EAAE,CAAC;QAEZ,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;aACnE,iBAAiB,CAAC,0BAA0B,EAAE,QAAQ,CAAC;aACvD,KAAK,CAAC,4CAA4C,CAAC;aACnD,OAAO,EAAE,CAAC;QAEZ,OAAO,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACrD,CAAC;IAMD,KAAK,CAAC,6BAA6B,CAClC,WAAmB,EACnB,SAAiB;QAEjB,OAAO,MAAM,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;aAChD,kBAAkB,CAAC,0BAA0B,EAAE,eAAe,CAAC;aAC/D,iBAAiB,CAAC,uBAAuB,EAAE,SAAS,CAAC;aACrD,KAAK,CAAC,uCAAuC,EAAE,EAAE,WAAW,EAAE,CAAC;aAC/D,QAAQ,CAAC,sCAAsC,EAAE,EAAE,SAAS,EAAE,CAAC;aAC/D,MAAM,EAAE,CAAC;IACZ,CAAC;IAMD,KAAK,CAAC,+BAA+B,CACpC,WAAmB,EACnB,SAAiB;QAEjB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAEpF,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;CACD,CAAA;
|
|
1
|
+
{"version":3,"file":"secrets-provider-connection.repository.ee.js","sourceRoot":"","sources":["../../src/repositories/secrets-provider-connection.repository.ee.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { Logger } from '@n8n/backend-common';
|
|
2
|
-
import {
|
|
2
|
+
import { DbLockService } from './db-lock.service';
|
|
3
3
|
export declare class AuthRolesService {
|
|
4
4
|
private readonly logger;
|
|
5
|
-
private readonly
|
|
6
|
-
|
|
7
|
-
private readonly settingsRepository;
|
|
8
|
-
constructor(logger: Logger, scopeRepository: ScopeRepository, roleRepository: RoleRepository, settingsRepository: SettingsRepository);
|
|
5
|
+
private readonly dbLockService;
|
|
6
|
+
constructor(logger: Logger, dbLockService: DbLockService);
|
|
9
7
|
private syncScopes;
|
|
10
8
|
private getPersonalOwnerSettingsScopes;
|
|
11
9
|
private updateScopesBasedOnSettings;
|
|
@@ -15,16 +15,16 @@ const di_1 = require("@n8n/di");
|
|
|
15
15
|
const permissions_1 = require("@n8n/permissions");
|
|
16
16
|
const typeorm_1 = require("@n8n/typeorm");
|
|
17
17
|
const entities_1 = require("../entities");
|
|
18
|
-
const
|
|
18
|
+
const db_lock_service_1 = require("./db-lock.service");
|
|
19
19
|
let AuthRolesService = class AuthRolesService {
|
|
20
|
-
constructor(logger,
|
|
20
|
+
constructor(logger, dbLockService) {
|
|
21
21
|
this.logger = logger;
|
|
22
|
-
this.
|
|
23
|
-
this.roleRepository = roleRepository;
|
|
24
|
-
this.settingsRepository = settingsRepository;
|
|
22
|
+
this.dbLockService = dbLockService;
|
|
25
23
|
}
|
|
26
|
-
async syncScopes() {
|
|
27
|
-
const
|
|
24
|
+
async syncScopes(tx) {
|
|
25
|
+
const scopeRepo = tx.getRepository(entities_1.Scope);
|
|
26
|
+
const roleRepo = tx.getRepository(entities_1.Role);
|
|
27
|
+
const availableScopes = await scopeRepo.find({
|
|
28
28
|
select: {
|
|
29
29
|
slug: true,
|
|
30
30
|
displayName: true,
|
|
@@ -56,7 +56,7 @@ let AuthRolesService = class AuthRolesService {
|
|
|
56
56
|
}).filter((scope) => scope !== null);
|
|
57
57
|
if (scopesToUpdate.length > 0) {
|
|
58
58
|
this.logger.debug(`Updating ${scopesToUpdate.length} scopes...`);
|
|
59
|
-
await
|
|
59
|
+
await scopeRepo.save(scopesToUpdate);
|
|
60
60
|
this.logger.debug('Scopes updated successfully.');
|
|
61
61
|
}
|
|
62
62
|
else {
|
|
@@ -66,7 +66,7 @@ let AuthRolesService = class AuthRolesService {
|
|
|
66
66
|
if (scopesToDelete.length > 0) {
|
|
67
67
|
this.logger.debug(`Deleting ${scopesToDelete.length} obsolete scopes: ${scopesToDelete.map((s) => s.slug).join(', ')}`);
|
|
68
68
|
const obsoleteScopeSlugs = scopesToDelete.map((s) => s.slug);
|
|
69
|
-
const rolesWithObsoleteScopes = await
|
|
69
|
+
const rolesWithObsoleteScopes = await roleRepo.find({
|
|
70
70
|
relations: ['scopes'],
|
|
71
71
|
where: { scopes: { slug: (0, typeorm_1.In)(obsoleteScopeSlugs) } },
|
|
72
72
|
});
|
|
@@ -76,18 +76,18 @@ let AuthRolesService = class AuthRolesService {
|
|
|
76
76
|
});
|
|
77
77
|
if (rolesToUpdate.length > 0) {
|
|
78
78
|
this.logger.debug(`Removing obsolete scopes from ${rolesToUpdate.length} roles...`);
|
|
79
|
-
await
|
|
79
|
+
await roleRepo.save(rolesToUpdate);
|
|
80
80
|
}
|
|
81
|
-
await
|
|
81
|
+
await scopeRepo.remove(scopesToDelete);
|
|
82
82
|
this.logger.debug('Obsolete scopes deleted successfully.');
|
|
83
83
|
}
|
|
84
84
|
else {
|
|
85
85
|
this.logger.debug('No obsolete scopes to delete.');
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
async getPersonalOwnerSettingsScopes() {
|
|
88
|
+
async getPersonalOwnerSettingsScopes(tx) {
|
|
89
89
|
const settingKeys = [permissions_1.PERSONAL_SPACE_PUBLISHING_SETTING.key, permissions_1.PERSONAL_SPACE_SHARING_SETTING.key];
|
|
90
|
-
const rows =
|
|
90
|
+
const rows = await tx.findBy(entities_1.Settings, { key: (0, typeorm_1.In)(settingKeys) });
|
|
91
91
|
const personalSpacePublishingValue = rows.find((r) => r.key === permissions_1.PERSONAL_SPACE_PUBLISHING_SETTING.key)?.value;
|
|
92
92
|
const personalSpaceSharingValue = rows.find((r) => r.key === permissions_1.PERSONAL_SPACE_SHARING_SETTING.key)?.value;
|
|
93
93
|
const scopes = [];
|
|
@@ -101,15 +101,17 @@ let AuthRolesService = class AuthRolesService {
|
|
|
101
101
|
}
|
|
102
102
|
return scopes;
|
|
103
103
|
}
|
|
104
|
-
async updateScopesBasedOnSettings(roleSlug, defaultScopes) {
|
|
104
|
+
async updateScopesBasedOnSettings(roleSlug, defaultScopes, tx) {
|
|
105
105
|
const scopes = [...defaultScopes];
|
|
106
106
|
if (roleSlug === permissions_1.PROJECT_OWNER_ROLE_SLUG) {
|
|
107
|
-
scopes.push(...(await this.getPersonalOwnerSettingsScopes()));
|
|
107
|
+
scopes.push(...(await this.getPersonalOwnerSettingsScopes(tx)));
|
|
108
108
|
}
|
|
109
109
|
return scopes;
|
|
110
110
|
}
|
|
111
|
-
async syncRoles() {
|
|
112
|
-
const
|
|
111
|
+
async syncRoles(tx) {
|
|
112
|
+
const roleRepo = tx.getRepository(entities_1.Role);
|
|
113
|
+
const scopeRepo = tx.getRepository(entities_1.Scope);
|
|
114
|
+
const existingRoles = await roleRepo.find({
|
|
113
115
|
select: {
|
|
114
116
|
slug: true,
|
|
115
117
|
displayName: true,
|
|
@@ -121,7 +123,7 @@ let AuthRolesService = class AuthRolesService {
|
|
|
121
123
|
systemRole: true,
|
|
122
124
|
},
|
|
123
125
|
});
|
|
124
|
-
const allScopes = await
|
|
126
|
+
const allScopes = await scopeRepo.find({
|
|
125
127
|
select: {
|
|
126
128
|
slug: true,
|
|
127
129
|
},
|
|
@@ -130,9 +132,9 @@ let AuthRolesService = class AuthRolesService {
|
|
|
130
132
|
for (const roleNamespace of Object.keys(permissions_1.ALL_ROLES)) {
|
|
131
133
|
const rolesToUpdate = await Promise.all(permissions_1.ALL_ROLES[roleNamespace].map(async (role) => {
|
|
132
134
|
const existingRole = existingRolesMap.get(role.slug);
|
|
133
|
-
const expectedScopes = await this.updateScopesBasedOnSettings(role.slug, role.scopes);
|
|
135
|
+
const expectedScopes = await this.updateScopesBasedOnSettings(role.slug, role.scopes, tx);
|
|
134
136
|
if (!existingRole) {
|
|
135
|
-
const newRole =
|
|
137
|
+
const newRole = roleRepo.create({
|
|
136
138
|
slug: role.slug,
|
|
137
139
|
displayName: role.displayName,
|
|
138
140
|
description: role.description ?? null,
|
|
@@ -159,7 +161,7 @@ let AuthRolesService = class AuthRolesService {
|
|
|
159
161
|
const filteredRolesToUpdate = rolesToUpdate.filter((role) => role !== null);
|
|
160
162
|
if (filteredRolesToUpdate.length > 0) {
|
|
161
163
|
this.logger.debug(`Updating ${filteredRolesToUpdate.length} ${roleNamespace} roles...`);
|
|
162
|
-
await
|
|
164
|
+
await roleRepo.save(filteredRolesToUpdate);
|
|
163
165
|
this.logger.debug(`${roleNamespace} roles updated successfully.`);
|
|
164
166
|
}
|
|
165
167
|
else {
|
|
@@ -169,8 +171,10 @@ let AuthRolesService = class AuthRolesService {
|
|
|
169
171
|
}
|
|
170
172
|
async init() {
|
|
171
173
|
this.logger.debug('Initializing AuthRolesService...');
|
|
172
|
-
await this.
|
|
173
|
-
|
|
174
|
+
await this.dbLockService.withLock(1001, async (tx) => {
|
|
175
|
+
await this.syncScopes(tx);
|
|
176
|
+
await this.syncRoles(tx);
|
|
177
|
+
});
|
|
174
178
|
this.logger.debug('AuthRolesService initialized successfully.');
|
|
175
179
|
}
|
|
176
180
|
};
|
|
@@ -178,8 +182,6 @@ exports.AuthRolesService = AuthRolesService;
|
|
|
178
182
|
exports.AuthRolesService = AuthRolesService = __decorate([
|
|
179
183
|
(0, di_1.Service)(),
|
|
180
184
|
__metadata("design:paramtypes", [backend_common_1.Logger,
|
|
181
|
-
|
|
182
|
-
repositories_1.RoleRepository,
|
|
183
|
-
repositories_1.SettingsRepository])
|
|
185
|
+
db_lock_service_1.DbLockService])
|
|
184
186
|
], AuthRolesService);
|
|
185
187
|
//# sourceMappingURL=auth.roles.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.roles.service.js","sourceRoot":"","sources":["../../src/services/auth.roles.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wDAA6C;AAC7C,gCAAkC;AAElC,kDAO0B;AAG1B,0CAAkC;
|
|
1
|
+
{"version":3,"file":"auth.roles.service.js","sourceRoot":"","sources":["../../src/services/auth.roles.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { DatabaseConfig } from '@n8n/config';
|
|
2
|
+
import { DataSource } from '@n8n/typeorm';
|
|
3
|
+
import type { EntityManager } from '@n8n/typeorm';
|
|
4
|
+
export declare const enum DbLock {
|
|
5
|
+
AUTH_ROLES_SYNC = 1001,
|
|
6
|
+
TEST = 9999
|
|
7
|
+
}
|
|
8
|
+
export declare class DbLockService {
|
|
9
|
+
private readonly dataSource;
|
|
10
|
+
private readonly databaseConfig;
|
|
11
|
+
constructor(dataSource: DataSource, databaseConfig: DatabaseConfig);
|
|
12
|
+
withLock<T>(lockId: DbLock, fn: (tx: EntityManager) => Promise<T>, options?: {
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
}): Promise<T>;
|
|
15
|
+
tryWithLock<T>(lockId: DbLock, fn: (tx: EntityManager) => Promise<T>): Promise<T>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DbLockService = exports.DbLock = void 0;
|
|
13
|
+
const config_1 = require("@n8n/config");
|
|
14
|
+
const di_1 = require("@n8n/di");
|
|
15
|
+
const typeorm_1 = require("@n8n/typeorm");
|
|
16
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
17
|
+
var DbLock;
|
|
18
|
+
(function (DbLock) {
|
|
19
|
+
DbLock[DbLock["AUTH_ROLES_SYNC"] = 1001] = "AUTH_ROLES_SYNC";
|
|
20
|
+
DbLock[DbLock["TEST"] = 9999] = "TEST";
|
|
21
|
+
})(DbLock || (exports.DbLock = DbLock = {}));
|
|
22
|
+
let DbLockService = class DbLockService {
|
|
23
|
+
constructor(dataSource, databaseConfig) {
|
|
24
|
+
this.dataSource = dataSource;
|
|
25
|
+
this.databaseConfig = databaseConfig;
|
|
26
|
+
}
|
|
27
|
+
async withLock(lockId, fn, options) {
|
|
28
|
+
return await this.dataSource.manager.transaction(async (tx) => {
|
|
29
|
+
if (this.databaseConfig.type === 'postgresdb') {
|
|
30
|
+
if (options?.timeoutMs !== undefined) {
|
|
31
|
+
await tx.query(`SET LOCAL lock_timeout = '${Number(options.timeoutMs)}'`);
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
await tx.query('SELECT pg_advisory_xact_lock($1)', [lockId]);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if (error instanceof typeorm_1.QueryFailedError && error.message.includes('lock timeout')) {
|
|
38
|
+
throw new n8n_workflow_1.OperationalError(`Timed out waiting for DbLock ${lockId} after ${options?.timeoutMs}ms`, { cause: error });
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return await fn(tx);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async tryWithLock(lockId, fn) {
|
|
47
|
+
return await this.dataSource.manager.transaction(async (tx) => {
|
|
48
|
+
if (this.databaseConfig.type === 'postgresdb') {
|
|
49
|
+
const result = await tx.query('SELECT pg_try_advisory_xact_lock($1)', [lockId]);
|
|
50
|
+
if (!result[0].pg_try_advisory_xact_lock) {
|
|
51
|
+
throw new n8n_workflow_1.OperationalError(`DbLock ${lockId} is already held by another process`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return await fn(tx);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.DbLockService = DbLockService;
|
|
59
|
+
exports.DbLockService = DbLockService = __decorate([
|
|
60
|
+
(0, di_1.Service)(),
|
|
61
|
+
__metadata("design:paramtypes", [typeorm_1.DataSource,
|
|
62
|
+
config_1.DatabaseConfig])
|
|
63
|
+
], DbLockService);
|
|
64
|
+
//# sourceMappingURL=db-lock.service.js.map
|
|
@@ -0,0 +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,MAIjB;AAJD,WAAkB,MAAM;IACvB,4DAAsB,CAAA;IAEtB,sCAAW,CAAA;AACZ,CAAC,EAJiB,MAAM,sBAAN,MAAM,QAIvB;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAa;IACzB,YACkB,UAAsB,EACtB,cAA8B;QAD9B,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;IAC7C,CAAC;IAaJ,KAAK,CAAC,QAAQ,CACb,MAAc,EACd,EAAqC,EACrC,OAAgC;QAEhC,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC7D,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC/C,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;oBAGtC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC3E,CAAC;gBACD,IAAI,CAAC;oBACJ,MAAM,EAAE,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC9D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAChB,IAAI,KAAK,YAAY,0BAAgB,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;wBACjF,MAAM,IAAI,+BAAgB,CACzB,gCAAgC,MAAM,UAAU,OAAO,EAAE,SAAS,IAAI,EACtE,EAAE,KAAK,EAAE,KAAK,EAAE,CAChB,CAAC;oBACH,CAAC;oBACD,MAAM,KAAK,CAAC;gBACb,CAAC;YACF,CAAC;YACD,OAAO,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACJ,CAAC;IASD,KAAK,CAAC,WAAW,CAAI,MAAc,EAAE,EAAqC;QACzE,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC7D,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAkD,MAAM,EAAE,CAAC,KAAK,CAC3E,sCAAsC,EACtC,CAAC,MAAM,CAAC,CACR,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC;oBAC1C,MAAM,IAAI,+BAAgB,CAAC,UAAU,MAAM,qCAAqC,CAAC,CAAC;gBACnF,CAAC;YACF,CAAC;YACD,OAAO,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;IACJ,CAAC;CACD,CAAA;AAlEY,sCAAa;wBAAb,aAAa;IADzB,IAAA,YAAO,GAAE;qCAGqB,oBAAU;QACN,uBAAc;GAHpC,aAAa,CAkEzB"}
|
package/dist/services/index.d.ts
CHANGED
package/dist/services/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AuthRolesService = void 0;
|
|
3
|
+
exports.DbLockService = exports.DbLock = exports.AuthRolesService = void 0;
|
|
4
4
|
var auth_roles_service_1 = require("./auth.roles.service");
|
|
5
5
|
Object.defineProperty(exports, "AuthRolesService", { enumerable: true, get: function () { return auth_roles_service_1.AuthRolesService; } });
|
|
6
|
+
var db_lock_service_1 = require("./db-lock.service");
|
|
7
|
+
Object.defineProperty(exports, "DbLock", { enumerable: true, get: function () { return db_lock_service_1.DbLock; } });
|
|
8
|
+
Object.defineProperty(exports, "DbLockService", { enumerable: true, get: function () { return db_lock_service_1.DbLockService; } });
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,2DAAwD;AAA/C,sHAAA,gBAAgB,OAAA;AACzB,qDAA0D;AAAjD,yGAAA,MAAM,OAAA;AAAE,gHAAA,aAAa,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@n8n/db",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
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
|
"@n8n/typeorm": "0.3.20-16",
|
|
@@ -20,16 +20,16 @@
|
|
|
20
20
|
"uuid": "10.0.0",
|
|
21
21
|
"xss": "1.0.15",
|
|
22
22
|
"zod": "3.25.67",
|
|
23
|
-
"@n8n/backend-common": "1.
|
|
23
|
+
"@n8n/backend-common": "1.11.0",
|
|
24
|
+
"@n8n/config": "2.10.0",
|
|
24
25
|
"@n8n/constants": "0.19.0",
|
|
25
|
-
"@n8n/
|
|
26
|
-
"@n8n/
|
|
26
|
+
"@n8n/api-types": "1.11.0",
|
|
27
|
+
"@n8n/decorators": "1.11.0",
|
|
27
28
|
"@n8n/di": "0.10.0",
|
|
28
|
-
"@n8n/
|
|
29
|
-
"@n8n/permissions": "0.51.0",
|
|
29
|
+
"@n8n/permissions": "0.52.0",
|
|
30
30
|
"@n8n/utils": "1.25.0",
|
|
31
|
-
"n8n-core": "2.
|
|
32
|
-
"n8n-workflow": "2.
|
|
31
|
+
"n8n-core": "2.11.0",
|
|
32
|
+
"n8n-workflow": "2.11.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/lodash": "4.17.17",
|