n8n 1.107.4 → 1.108.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.
Files changed (90) hide show
  1. package/dist/auth/auth.service.js +2 -2
  2. package/dist/auth/auth.service.js.map +1 -1
  3. package/dist/build.tsbuildinfo +1 -1
  4. package/dist/commands/start.js +1 -0
  5. package/dist/commands/start.js.map +1 -1
  6. package/dist/commands/ttwf/generate.d.ts +2 -2
  7. package/dist/commands/worker.js +1 -1
  8. package/dist/commands/worker.js.map +1 -1
  9. package/dist/concurrency/concurrency-control.service.js +3 -2
  10. package/dist/concurrency/concurrency-control.service.js.map +1 -1
  11. package/dist/config/index.d.ts +0 -11
  12. package/dist/config/index.js +0 -9
  13. package/dist/config/index.js.map +1 -1
  14. package/dist/config/schema.d.ts +0 -46
  15. package/dist/config/schema.js +0 -46
  16. package/dist/config/schema.js.map +1 -1
  17. package/dist/controllers/telemetry.controller.d.ts +1 -1
  18. package/dist/controllers/telemetry.controller.js +8 -4
  19. package/dist/controllers/telemetry.controller.js.map +1 -1
  20. package/dist/load-nodes-and-credentials.d.ts +3 -2
  21. package/dist/load-nodes-and-credentials.js +7 -2
  22. package/dist/load-nodes-and-credentials.js.map +1 -1
  23. package/dist/modules/data-store/data-store-aggregate.controller.d.ts +11 -0
  24. package/dist/modules/data-store/data-store-aggregate.controller.js +41 -0
  25. package/dist/modules/data-store/data-store-aggregate.controller.js.map +1 -0
  26. package/dist/modules/data-store/data-store-aggregate.service.d.ts +17 -0
  27. package/dist/modules/data-store/data-store-aggregate.service.js +52 -0
  28. package/dist/modules/data-store/data-store-aggregate.service.js.map +1 -0
  29. package/dist/modules/data-store/data-store-column.entity.d.ts +9 -0
  30. package/dist/modules/data-store/data-store-column.entity.js +43 -0
  31. package/dist/modules/data-store/data-store-column.entity.js.map +1 -0
  32. package/dist/modules/data-store/data-store-column.repository.d.ts +13 -0
  33. package/dist/modules/data-store/data-store-column.repository.js +105 -0
  34. package/dist/modules/data-store/data-store-column.repository.js.map +1 -0
  35. package/dist/modules/data-store/data-store-rows.repository.d.ts +24 -0
  36. package/dist/modules/data-store/data-store-rows.repository.js +164 -0
  37. package/dist/modules/data-store/data-store-rows.repository.js.map +1 -0
  38. package/dist/modules/data-store/data-store.controller.d.ts +51 -0
  39. package/dist/modules/data-store/data-store.controller.js +344 -0
  40. package/dist/modules/data-store/data-store.controller.js.map +1 -0
  41. package/dist/modules/data-store/data-store.entity.d.ts +10 -0
  42. package/dist/modules/data-store/data-store.entity.js +50 -0
  43. package/dist/modules/data-store/data-store.entity.js.map +1 -0
  44. package/dist/modules/data-store/data-store.module.d.ts +7 -0
  45. package/dist/modules/data-store/data-store.module.js +79 -0
  46. package/dist/modules/data-store/data-store.module.js.map +1 -0
  47. package/dist/modules/data-store/data-store.repository.d.ts +27 -0
  48. package/dist/modules/data-store/data-store.repository.js +196 -0
  49. package/dist/modules/data-store/data-store.repository.js.map +1 -0
  50. package/dist/modules/data-store/data-store.service.d.ts +40 -0
  51. package/dist/modules/data-store/data-store.service.js +195 -0
  52. package/dist/modules/data-store/data-store.service.js.map +1 -0
  53. package/dist/modules/data-store/data-store.types.d.ts +1 -0
  54. package/dist/modules/data-store/data-store.types.js +3 -0
  55. package/dist/modules/data-store/data-store.types.js.map +1 -0
  56. package/dist/modules/data-store/errors/data-store-column-name-conflict.error.d.ts +4 -0
  57. package/dist/modules/data-store/errors/data-store-column-name-conflict.error.js +13 -0
  58. package/dist/modules/data-store/errors/data-store-column-name-conflict.error.js.map +1 -0
  59. package/dist/modules/data-store/errors/data-store-column-not-found.error.d.ts +4 -0
  60. package/dist/modules/data-store/errors/data-store-column-not-found.error.js +13 -0
  61. package/dist/modules/data-store/errors/data-store-column-not-found.error.js.map +1 -0
  62. package/dist/modules/data-store/errors/data-store-name-conflict.error.d.ts +4 -0
  63. package/dist/modules/data-store/errors/data-store-name-conflict.error.js +13 -0
  64. package/dist/modules/data-store/errors/data-store-name-conflict.error.js.map +1 -0
  65. package/dist/modules/data-store/errors/data-store-not-found.error.d.ts +4 -0
  66. package/dist/modules/data-store/errors/data-store-not-found.error.js +13 -0
  67. package/dist/modules/data-store/errors/data-store-not-found.error.js.map +1 -0
  68. package/dist/modules/data-store/errors/data-store-validation.error.d.ts +4 -0
  69. package/dist/modules/data-store/errors/data-store-validation.error.js +13 -0
  70. package/dist/modules/data-store/errors/data-store-validation.error.js.map +1 -0
  71. package/dist/modules/data-store/utils/sql-utils.d.ts +25 -0
  72. package/dist/modules/data-store/utils/sql-utils.js +208 -0
  73. package/dist/modules/data-store/utils/sql-utils.js.map +1 -0
  74. package/dist/scaling/scaling.service.js +2 -6
  75. package/dist/scaling/scaling.service.js.map +1 -1
  76. package/dist/services/frontend.service.js +1 -1
  77. package/dist/services/frontend.service.js.map +1 -1
  78. package/dist/services/jwt.service.d.ts +3 -2
  79. package/dist/services/jwt.service.js +6 -6
  80. package/dist/services/jwt.service.js.map +1 -1
  81. package/dist/services/public-api-key.service.d.ts +1 -2
  82. package/dist/services/public-api-key.service.js.map +1 -1
  83. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js +1 -1
  84. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js.map +1 -1
  85. package/dist/sso.ee/saml/routes/saml.controller.ee.js +1 -1
  86. package/dist/sso.ee/saml/routes/saml.controller.ee.js.map +1 -1
  87. package/dist/user-management/email/templates/project-shared.handlebars +1 -1
  88. package/dist/webhooks/webhook-helpers.js.map +1 -1
  89. package/package.json +15 -15
  90. package/templates/form-trigger.handlebars +127 -18
@@ -0,0 +1,196 @@
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.DataStoreRepository = void 0;
13
+ const api_types_1 = require("@n8n/api-types");
14
+ const di_1 = require("@n8n/di");
15
+ const typeorm_1 = require("@n8n/typeorm");
16
+ const n8n_workflow_1 = require("n8n-workflow");
17
+ const data_store_column_entity_1 = require("./data-store-column.entity");
18
+ const data_store_rows_repository_1 = require("./data-store-rows.repository");
19
+ const data_store_entity_1 = require("./data-store.entity");
20
+ const sql_utils_1 = require("./utils/sql-utils");
21
+ let DataStoreRepository = class DataStoreRepository extends typeorm_1.Repository {
22
+ constructor(dataSource, dataStoreRowsRepository) {
23
+ super(data_store_entity_1.DataStore, dataSource.manager);
24
+ this.dataStoreRowsRepository = dataStoreRowsRepository;
25
+ }
26
+ async createDataStore(projectId, name, columns) {
27
+ if (columns.some((c) => !api_types_1.DATA_STORE_COLUMN_REGEX.test(c.name))) {
28
+ throw new n8n_workflow_1.UnexpectedError('bad column name');
29
+ }
30
+ let dataStoreId;
31
+ await this.manager.transaction(async (em) => {
32
+ const dataStore = em.create(data_store_entity_1.DataStore, { name, columns, projectId });
33
+ await em.insert(data_store_entity_1.DataStore, dataStore);
34
+ dataStoreId = dataStore.id;
35
+ const tableName = (0, sql_utils_1.toTableName)(dataStore.id);
36
+ const queryRunner = em.queryRunner;
37
+ if (!queryRunner) {
38
+ throw new n8n_workflow_1.UnexpectedError('QueryRunner is not available');
39
+ }
40
+ if (columns.length === 0) {
41
+ return;
42
+ }
43
+ const columnEntities = columns.map((col, index) => em.create(data_store_column_entity_1.DataStoreColumn, {
44
+ name: col.name,
45
+ type: col.type,
46
+ dataStoreId: dataStore.id,
47
+ index: col.index ?? index,
48
+ }));
49
+ await em.insert(data_store_column_entity_1.DataStoreColumn, columnEntities);
50
+ await this.dataStoreRowsRepository.createTableWithColumns(tableName, columnEntities, queryRunner);
51
+ });
52
+ if (!dataStoreId) {
53
+ throw new n8n_workflow_1.UnexpectedError('Data store creation failed');
54
+ }
55
+ const createdDataStore = await this.findOneOrFail({
56
+ where: { id: dataStoreId },
57
+ relations: ['project', 'columns'],
58
+ });
59
+ return createdDataStore;
60
+ }
61
+ async deleteDataStore(dataStoreId, entityManager) {
62
+ const executor = entityManager ?? this.manager;
63
+ return await executor.transaction(async (em) => {
64
+ const queryRunner = em.queryRunner;
65
+ if (!queryRunner) {
66
+ throw new n8n_workflow_1.UnexpectedError('QueryRunner is not available');
67
+ }
68
+ await em.delete(data_store_entity_1.DataStore, { id: dataStoreId });
69
+ await queryRunner.dropTable((0, sql_utils_1.toTableName)(dataStoreId), true);
70
+ return true;
71
+ });
72
+ }
73
+ async deleteDataStoreByProjectId(projectId) {
74
+ return await this.manager.transaction(async (em) => {
75
+ const existingTables = await em.findBy(data_store_entity_1.DataStore, { projectId });
76
+ let changed = false;
77
+ for (const match of existingTables) {
78
+ const result = await this.deleteDataStore(match.id, em);
79
+ changed = changed || result;
80
+ }
81
+ return changed;
82
+ });
83
+ }
84
+ async deleteDataStoreAll() {
85
+ return await this.manager.transaction(async (em) => {
86
+ const queryRunner = em.queryRunner;
87
+ if (!queryRunner) {
88
+ throw new n8n_workflow_1.UnexpectedError('QueryRunner is not available');
89
+ }
90
+ const existingTables = await em.findBy(data_store_entity_1.DataStore, {});
91
+ let changed = false;
92
+ for (const match of existingTables) {
93
+ const result = await em.delete(data_store_entity_1.DataStore, { id: match.id });
94
+ await queryRunner.dropTable((0, sql_utils_1.toTableName)(match.id), true);
95
+ changed = changed || (result.affected ?? 0) > 0;
96
+ }
97
+ return changed;
98
+ });
99
+ }
100
+ async getManyAndCount(options) {
101
+ const query = this.getManyQuery(options);
102
+ const [data, count] = await query.getManyAndCount();
103
+ return { count, data };
104
+ }
105
+ async getMany(options) {
106
+ const query = this.getManyQuery(options);
107
+ return await query.getMany();
108
+ }
109
+ getManyQuery(options) {
110
+ const query = this.createQueryBuilder('dataStore');
111
+ this.applySelections(query);
112
+ this.applyFilters(query, options.filter);
113
+ this.applySorting(query, options.sortBy);
114
+ this.applyPagination(query, options);
115
+ return query;
116
+ }
117
+ applySelections(query) {
118
+ this.applyDefaultSelect(query);
119
+ }
120
+ applyFilters(query, filter) {
121
+ for (const x of ['id', 'projectId']) {
122
+ const content = [filter?.[x]].flat().filter((x) => x !== undefined);
123
+ if (content.length === 0)
124
+ continue;
125
+ query.andWhere(`dataStore.${x} IN (:...${x}s)`, {
126
+ [x + 's']: content.length > 0 ? content : [''],
127
+ });
128
+ }
129
+ if (filter?.name) {
130
+ const nameFilters = typeof filter.name === 'string' ? [filter.name] : filter.name;
131
+ for (const name of nameFilters) {
132
+ query.andWhere('LOWER(dataStore.name) LIKE LOWER(:name)', {
133
+ name: `%${name}%`,
134
+ });
135
+ }
136
+ }
137
+ }
138
+ applySorting(query, sortBy) {
139
+ if (!sortBy) {
140
+ query.orderBy('dataStore.updatedAt', 'DESC');
141
+ return;
142
+ }
143
+ const [field, order] = this.parseSortingParams(sortBy);
144
+ this.applySortingByField(query, field, order);
145
+ }
146
+ parseSortingParams(sortBy) {
147
+ const [field, order] = sortBy.split(':');
148
+ return [field, order?.toLowerCase() === 'desc' ? 'DESC' : 'ASC'];
149
+ }
150
+ applySortingByField(query, field, direction) {
151
+ if (field === 'name') {
152
+ query
153
+ .addSelect('LOWER(dataStore.name)', 'datastore_name_lower')
154
+ .orderBy('datastore_name_lower', direction);
155
+ }
156
+ else if (['createdAt', 'updatedAt'].includes(field)) {
157
+ query.orderBy(`dataStore.${field}`, direction);
158
+ }
159
+ }
160
+ applyPagination(query, options) {
161
+ query.skip(options.skip ?? 0);
162
+ if (options?.take) {
163
+ query.skip(options.skip ?? 0).take(options.take);
164
+ }
165
+ }
166
+ applyDefaultSelect(query) {
167
+ query
168
+ .leftJoinAndSelect('dataStore.project', 'project')
169
+ .leftJoinAndSelect('dataStore.columns', 'data_store_column')
170
+ .select([
171
+ 'dataStore',
172
+ ...this.getDataStoreColumnFields('data_store_column'),
173
+ ...this.getProjectFields('project'),
174
+ ])
175
+ .addOrderBy('data_store_column.index', 'ASC');
176
+ }
177
+ getDataStoreColumnFields(alias) {
178
+ return [
179
+ `${alias}.id`,
180
+ `${alias}.name`,
181
+ `${alias}.type`,
182
+ `${alias}.createdAt`,
183
+ `${alias}.updatedAt`,
184
+ ];
185
+ }
186
+ getProjectFields(alias) {
187
+ return [`${alias}.id`, `${alias}.name`, `${alias}.type`, `${alias}.icon`];
188
+ }
189
+ };
190
+ exports.DataStoreRepository = DataStoreRepository;
191
+ exports.DataStoreRepository = DataStoreRepository = __decorate([
192
+ (0, di_1.Service)(),
193
+ __metadata("design:paramtypes", [typeorm_1.DataSource,
194
+ data_store_rows_repository_1.DataStoreRowsRepository])
195
+ ], DataStoreRepository);
196
+ //# sourceMappingURL=data-store.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store.repository.js","sourceRoot":"","sources":["../../../src/modules/data-store/data-store.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import type { AddDataStoreColumnDto, CreateDataStoreDto, ListDataStoreContentQueryDto, MoveDataStoreColumnDto, DataStoreListOptions, DataStoreRows, UpsertDataStoreRowsDto, UpdateDataStoreDto } from '@n8n/api-types';
2
+ import { Logger } from '@n8n/backend-common';
3
+ import { DataStoreColumnRepository } from './data-store-column.repository';
4
+ import { DataStoreRowsRepository } from './data-store-rows.repository';
5
+ import { DataStoreRepository } from './data-store.repository';
6
+ export declare class DataStoreService {
7
+ private readonly dataStoreRepository;
8
+ private readonly dataStoreColumnRepository;
9
+ private readonly dataStoreRowsRepository;
10
+ private readonly logger;
11
+ constructor(dataStoreRepository: DataStoreRepository, dataStoreColumnRepository: DataStoreColumnRepository, dataStoreRowsRepository: DataStoreRowsRepository, logger: Logger);
12
+ start(): Promise<void>;
13
+ shutdown(): Promise<void>;
14
+ createDataStore(projectId: string, dto: CreateDataStoreDto): Promise<import("./data-store.entity").DataStore>;
15
+ updateDataStore(dataStoreId: string, projectId: string, dto: UpdateDataStoreDto): Promise<boolean>;
16
+ deleteDataStoreByProjectId(projectId: string): Promise<boolean>;
17
+ deleteDataStoreAll(): Promise<boolean>;
18
+ deleteDataStore(dataStoreId: string, projectId: string): Promise<boolean>;
19
+ addColumn(dataStoreId: string, projectId: string, dto: AddDataStoreColumnDto): Promise<import("./data-store-column.entity").DataStoreColumn>;
20
+ moveColumn(dataStoreId: string, projectId: string, columnId: string, dto: MoveDataStoreColumnDto): Promise<boolean>;
21
+ deleteColumn(dataStoreId: string, projectId: string, columnId: string): Promise<boolean>;
22
+ getManyAndCount(options: DataStoreListOptions): Promise<{
23
+ count: number;
24
+ data: import("./data-store.entity").DataStore[];
25
+ }>;
26
+ getManyRowsAndCount(dataStoreId: string, projectId: string, dto: ListDataStoreContentQueryDto): Promise<{
27
+ count: number;
28
+ data: {
29
+ [x: string]: import("@n8n/api-types").DataStoreColumnJsType | null;
30
+ }[];
31
+ }>;
32
+ getColumns(dataStoreId: string, projectId: string): Promise<import("./data-store-column.entity").DataStoreColumn[]>;
33
+ insertRows(dataStoreId: string, projectId: string, rows: DataStoreRows): Promise<boolean>;
34
+ upsertRows(dataStoreId: string, projectId: string, dto: UpsertDataStoreRowsDto): Promise<boolean>;
35
+ deleteRows(dataStoreId: string, projectId: string, ids: number[]): Promise<boolean>;
36
+ private validateRows;
37
+ private validateDataStoreExists;
38
+ private validateColumnExists;
39
+ private validateUniqueName;
40
+ }
@@ -0,0 +1,195 @@
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.DataStoreService = void 0;
13
+ const api_types_1 = require("@n8n/api-types");
14
+ const backend_common_1 = require("@n8n/backend-common");
15
+ const di_1 = require("@n8n/di");
16
+ const data_store_column_repository_1 = require("./data-store-column.repository");
17
+ const data_store_rows_repository_1 = require("./data-store-rows.repository");
18
+ const data_store_repository_1 = require("./data-store.repository");
19
+ const data_store_column_not_found_error_1 = require("./errors/data-store-column-not-found.error");
20
+ const data_store_name_conflict_error_1 = require("./errors/data-store-name-conflict.error");
21
+ const data_store_not_found_error_1 = require("./errors/data-store-not-found.error");
22
+ const data_store_validation_error_1 = require("./errors/data-store-validation.error");
23
+ const sql_utils_1 = require("./utils/sql-utils");
24
+ let DataStoreService = class DataStoreService {
25
+ constructor(dataStoreRepository, dataStoreColumnRepository, dataStoreRowsRepository, logger) {
26
+ this.dataStoreRepository = dataStoreRepository;
27
+ this.dataStoreColumnRepository = dataStoreColumnRepository;
28
+ this.dataStoreRowsRepository = dataStoreRowsRepository;
29
+ this.logger = logger;
30
+ this.logger = this.logger.scoped('data-store');
31
+ }
32
+ async start() { }
33
+ async shutdown() { }
34
+ async createDataStore(projectId, dto) {
35
+ await this.validateUniqueName(dto.name, projectId);
36
+ return await this.dataStoreRepository.createDataStore(projectId, dto.name, dto.columns);
37
+ }
38
+ async updateDataStore(dataStoreId, projectId, dto) {
39
+ await this.validateDataStoreExists(dataStoreId, projectId);
40
+ await this.validateUniqueName(dto.name, projectId);
41
+ await this.dataStoreRepository.update({ id: dataStoreId }, { name: dto.name });
42
+ return true;
43
+ }
44
+ async deleteDataStoreByProjectId(projectId) {
45
+ return await this.dataStoreRepository.deleteDataStoreByProjectId(projectId);
46
+ }
47
+ async deleteDataStoreAll() {
48
+ return await this.dataStoreRepository.deleteDataStoreAll();
49
+ }
50
+ async deleteDataStore(dataStoreId, projectId) {
51
+ await this.validateDataStoreExists(dataStoreId, projectId);
52
+ await this.dataStoreRepository.deleteDataStore(dataStoreId);
53
+ return true;
54
+ }
55
+ async addColumn(dataStoreId, projectId, dto) {
56
+ await this.validateDataStoreExists(dataStoreId, projectId);
57
+ return await this.dataStoreColumnRepository.addColumn(dataStoreId, dto);
58
+ }
59
+ async moveColumn(dataStoreId, projectId, columnId, dto) {
60
+ await this.validateDataStoreExists(dataStoreId, projectId);
61
+ const existingColumn = await this.validateColumnExists(dataStoreId, columnId);
62
+ await this.dataStoreColumnRepository.moveColumn(dataStoreId, existingColumn, dto.targetIndex);
63
+ return true;
64
+ }
65
+ async deleteColumn(dataStoreId, projectId, columnId) {
66
+ await this.validateDataStoreExists(dataStoreId, projectId);
67
+ const existingColumn = await this.validateColumnExists(dataStoreId, columnId);
68
+ await this.dataStoreColumnRepository.deleteColumn(dataStoreId, existingColumn);
69
+ return true;
70
+ }
71
+ async getManyAndCount(options) {
72
+ return await this.dataStoreRepository.getManyAndCount(options);
73
+ }
74
+ async getManyRowsAndCount(dataStoreId, projectId, dto) {
75
+ await this.validateDataStoreExists(dataStoreId, projectId);
76
+ const columns = await this.dataStoreColumnRepository.getColumns(dataStoreId);
77
+ const result = await this.dataStoreRowsRepository.getManyAndCount((0, sql_utils_1.toTableName)(dataStoreId), dto);
78
+ return {
79
+ count: result.count,
80
+ data: (0, sql_utils_1.normalizeRows)(result.data, columns),
81
+ };
82
+ }
83
+ async getColumns(dataStoreId, projectId) {
84
+ await this.validateDataStoreExists(dataStoreId, projectId);
85
+ return await this.dataStoreColumnRepository.getColumns(dataStoreId);
86
+ }
87
+ async insertRows(dataStoreId, projectId, rows) {
88
+ await this.validateDataStoreExists(dataStoreId, projectId);
89
+ await this.validateRows(dataStoreId, rows);
90
+ const columns = await this.dataStoreColumnRepository.getColumns(dataStoreId);
91
+ return await this.dataStoreRowsRepository.insertRows((0, sql_utils_1.toTableName)(dataStoreId), rows, columns);
92
+ }
93
+ async upsertRows(dataStoreId, projectId, dto) {
94
+ await this.validateDataStoreExists(dataStoreId, projectId);
95
+ await this.validateRows(dataStoreId, dto.rows);
96
+ const columns = await this.dataStoreColumnRepository.getColumns(dataStoreId);
97
+ return await this.dataStoreRowsRepository.upsertRows((0, sql_utils_1.toTableName)(dataStoreId), dto, columns);
98
+ }
99
+ async deleteRows(dataStoreId, projectId, ids) {
100
+ await this.validateDataStoreExists(dataStoreId, projectId);
101
+ return await this.dataStoreRowsRepository.deleteRows((0, sql_utils_1.toTableName)(dataStoreId), ids);
102
+ }
103
+ async validateRows(dataStoreId, rows) {
104
+ const columns = await this.dataStoreColumnRepository.getColumns(dataStoreId);
105
+ if (columns.length === 0) {
106
+ throw new data_store_validation_error_1.DataStoreValidationError('No columns found for this data store or data store not found');
107
+ }
108
+ const columnNames = new Set(columns.map((x) => x.name));
109
+ const columnTypeMap = new Map(columns.map((x) => [x.name, x.type]));
110
+ for (const row of rows) {
111
+ const keys = Object.keys(row);
112
+ if (columns.length !== keys.length) {
113
+ throw new data_store_validation_error_1.DataStoreValidationError('mismatched key count');
114
+ }
115
+ for (const key of keys) {
116
+ if (!columnNames.has(key)) {
117
+ throw new data_store_validation_error_1.DataStoreValidationError('unknown column name');
118
+ }
119
+ const cell = row[key];
120
+ if (cell === null)
121
+ continue;
122
+ switch (columnTypeMap.get(key)) {
123
+ case 'boolean':
124
+ if (typeof cell !== 'boolean') {
125
+ throw new data_store_validation_error_1.DataStoreValidationError(`value '${cell.toString()}' does not match column type 'boolean'`);
126
+ }
127
+ break;
128
+ case 'date':
129
+ if (typeof cell === 'string') {
130
+ const validated = api_types_1.dateTimeSchema.safeParse(cell);
131
+ if (validated.success) {
132
+ row[key] = validated.data.toISOString();
133
+ break;
134
+ }
135
+ }
136
+ else if (cell instanceof Date) {
137
+ row[key] = cell.toISOString();
138
+ break;
139
+ }
140
+ throw new data_store_validation_error_1.DataStoreValidationError(`value '${cell}' does not match column type 'date'`);
141
+ case 'string':
142
+ if (typeof cell !== 'string') {
143
+ throw new data_store_validation_error_1.DataStoreValidationError(`value '${cell.toString()}' does not match column type 'string'`);
144
+ }
145
+ break;
146
+ case 'number':
147
+ if (typeof cell !== 'number') {
148
+ throw new data_store_validation_error_1.DataStoreValidationError(`value '${cell.toString()}' does not match column type 'number'`);
149
+ }
150
+ break;
151
+ }
152
+ }
153
+ }
154
+ }
155
+ async validateDataStoreExists(dataStoreId, projectId) {
156
+ const existingTable = await this.dataStoreRepository.findOneBy({
157
+ id: dataStoreId,
158
+ project: {
159
+ id: projectId,
160
+ },
161
+ });
162
+ if (!existingTable) {
163
+ throw new data_store_not_found_error_1.DataStoreNotFoundError(dataStoreId);
164
+ }
165
+ return existingTable;
166
+ }
167
+ async validateColumnExists(dataStoreId, columnId) {
168
+ const existingColumn = await this.dataStoreColumnRepository.findOneBy({
169
+ id: columnId,
170
+ dataStoreId,
171
+ });
172
+ if (existingColumn === null) {
173
+ throw new data_store_column_not_found_error_1.DataStoreColumnNotFoundError(dataStoreId, columnId);
174
+ }
175
+ return existingColumn;
176
+ }
177
+ async validateUniqueName(name, projectId) {
178
+ const hasNameClash = await this.dataStoreRepository.existsBy({
179
+ name,
180
+ projectId,
181
+ });
182
+ if (hasNameClash) {
183
+ throw new data_store_name_conflict_error_1.DataStoreNameConflictError(name);
184
+ }
185
+ }
186
+ };
187
+ exports.DataStoreService = DataStoreService;
188
+ exports.DataStoreService = DataStoreService = __decorate([
189
+ (0, di_1.Service)(),
190
+ __metadata("design:paramtypes", [data_store_repository_1.DataStoreRepository,
191
+ data_store_column_repository_1.DataStoreColumnRepository,
192
+ data_store_rows_repository_1.DataStoreRowsRepository,
193
+ backend_common_1.Logger])
194
+ ], DataStoreService);
195
+ //# sourceMappingURL=data-store.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store.service.js","sourceRoot":"","sources":["../../../src/modules/data-store/data-store.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export type DataStoreUserTableName = `data_store_user_${string}`;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data-store.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store.types.js","sourceRoot":"","sources":["../../../src/modules/data-store/data-store.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { UserError } from 'n8n-workflow';
2
+ export declare class DataStoreColumnNameConflictError extends UserError {
3
+ constructor(columnName: string, dataStoreId: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataStoreColumnNameConflictError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class DataStoreColumnNameConflictError extends n8n_workflow_1.UserError {
6
+ constructor(columnName, dataStoreId) {
7
+ super(`Data store column with name '${columnName}' already exists in data store '${dataStoreId}'`, {
8
+ level: 'warning',
9
+ });
10
+ }
11
+ }
12
+ exports.DataStoreColumnNameConflictError = DataStoreColumnNameConflictError;
13
+ //# sourceMappingURL=data-store-column-name-conflict.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-column-name-conflict.error.js","sourceRoot":"","sources":["../../../../src/modules/data-store/errors/data-store-column-name-conflict.error.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,MAAa,gCAAiC,SAAQ,wBAAS;IAC9D,YAAY,UAAkB,EAAE,WAAmB;QAClD,KAAK,CACJ,gCAAgC,UAAU,mCAAmC,WAAW,GAAG,EAC3F;YACC,KAAK,EAAE,SAAS;SAChB,CACD,CAAC;IACH,CAAC;CACD;AATD,4EASC"}
@@ -0,0 +1,4 @@
1
+ import { UserError } from 'n8n-workflow';
2
+ export declare class DataStoreColumnNotFoundError extends UserError {
3
+ constructor(dataStoreId: string, columnId: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataStoreColumnNotFoundError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class DataStoreColumnNotFoundError extends n8n_workflow_1.UserError {
6
+ constructor(dataStoreId, columnId) {
7
+ super(`Could not find the column '${columnId}' in the data store: ${dataStoreId}`, {
8
+ level: 'warning',
9
+ });
10
+ }
11
+ }
12
+ exports.DataStoreColumnNotFoundError = DataStoreColumnNotFoundError;
13
+ //# sourceMappingURL=data-store-column-not-found.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-column-not-found.error.js","sourceRoot":"","sources":["../../../../src/modules/data-store/errors/data-store-column-not-found.error.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,MAAa,4BAA6B,SAAQ,wBAAS;IAC1D,YAAY,WAAmB,EAAE,QAAgB;QAChD,KAAK,CAAC,8BAA8B,QAAQ,wBAAwB,WAAW,EAAE,EAAE;YAClF,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;IACJ,CAAC;CACD;AAND,oEAMC"}
@@ -0,0 +1,4 @@
1
+ import { UserError } from 'n8n-workflow';
2
+ export declare class DataStoreNameConflictError extends UserError {
3
+ constructor(name: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataStoreNameConflictError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class DataStoreNameConflictError extends n8n_workflow_1.UserError {
6
+ constructor(name) {
7
+ super(`Data store with name '${name}' already exists in this project`, {
8
+ level: 'warning',
9
+ });
10
+ }
11
+ }
12
+ exports.DataStoreNameConflictError = DataStoreNameConflictError;
13
+ //# sourceMappingURL=data-store-name-conflict.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-name-conflict.error.js","sourceRoot":"","sources":["../../../../src/modules/data-store/errors/data-store-name-conflict.error.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,MAAa,0BAA2B,SAAQ,wBAAS;IACxD,YAAY,IAAY;QACvB,KAAK,CAAC,yBAAyB,IAAI,kCAAkC,EAAE;YACtE,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;IACJ,CAAC;CACD;AAND,gEAMC"}
@@ -0,0 +1,4 @@
1
+ import { UserError } from 'n8n-workflow';
2
+ export declare class DataStoreNotFoundError extends UserError {
3
+ constructor(dataStoreId: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataStoreNotFoundError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class DataStoreNotFoundError extends n8n_workflow_1.UserError {
6
+ constructor(dataStoreId) {
7
+ super(`Could not find the data store: '${dataStoreId}'`, {
8
+ level: 'warning',
9
+ });
10
+ }
11
+ }
12
+ exports.DataStoreNotFoundError = DataStoreNotFoundError;
13
+ //# sourceMappingURL=data-store-not-found.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-not-found.error.js","sourceRoot":"","sources":["../../../../src/modules/data-store/errors/data-store-not-found.error.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,MAAa,sBAAuB,SAAQ,wBAAS;IACpD,YAAY,WAAmB;QAC9B,KAAK,CAAC,mCAAmC,WAAW,GAAG,EAAE;YACxD,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;IACJ,CAAC;CACD;AAND,wDAMC"}
@@ -0,0 +1,4 @@
1
+ import { UserError } from 'n8n-workflow';
2
+ export declare class DataStoreValidationError extends UserError {
3
+ constructor(msg: string);
4
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataStoreValidationError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class DataStoreValidationError extends n8n_workflow_1.UserError {
6
+ constructor(msg) {
7
+ super(`Validation error with data store request: ${msg}`, {
8
+ level: 'warning',
9
+ });
10
+ }
11
+ }
12
+ exports.DataStoreValidationError = DataStoreValidationError;
13
+ //# sourceMappingURL=data-store-validation.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-store-validation.error.js","sourceRoot":"","sources":["../../../../src/modules/data-store/errors/data-store-validation.error.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAEzC,MAAa,wBAAyB,SAAQ,wBAAS;IACtD,YAAY,GAAW;QACtB,KAAK,CAAC,6CAA6C,GAAG,EAAE,EAAE;YACzD,KAAK,EAAE,SAAS;SAChB,CAAC,CAAC;IACJ,CAAC;CACD;AAND,4DAMC"}
@@ -0,0 +1,25 @@
1
+ import { type DataStoreRows, type DataStoreCreateColumnSchema, type DataStoreColumn } from '@n8n/api-types';
2
+ import { DslColumn } from '@n8n/db';
3
+ import type { DataSourceOptions } from '@n8n/typeorm';
4
+ import type { DataStoreUserTableName } from '../data-store.types';
5
+ export declare function toDslColumns(columns: DataStoreCreateColumnSchema[]): DslColumn[];
6
+ export declare function addColumnQuery(tableName: DataStoreUserTableName, column: DataStoreCreateColumnSchema, dbType: DataSourceOptions['type']): string;
7
+ export declare function deleteColumnQuery(tableName: DataStoreUserTableName, column: string, dbType: DataSourceOptions['type']): string;
8
+ export declare function buildInsertQuery(tableName: DataStoreUserTableName, rows: DataStoreRows, columns: Array<{
9
+ name: string;
10
+ type: string;
11
+ }>, dbType?: DataSourceOptions['type']): [string, unknown[]];
12
+ export declare function buildUpdateQuery(tableName: DataStoreUserTableName, row: Record<string, unknown>, columns: Array<{
13
+ name: string;
14
+ type: string;
15
+ }>, matchFields: string[], dbType?: DataSourceOptions['type']): [string, unknown[]];
16
+ export declare function splitRowsByExistence(existing: Array<Record<string, unknown>>, matchFields: string[], rows: DataStoreRows): {
17
+ rowsToInsert: DataStoreRows;
18
+ rowsToUpdate: DataStoreRows;
19
+ };
20
+ export declare function quoteIdentifier(name: string, dbType: DataSourceOptions['type']): string;
21
+ export declare function toTableName(dataStoreId: string): DataStoreUserTableName;
22
+ export declare function normalizeRows(rows: DataStoreRows, columns: DataStoreColumn[]): {
23
+ [x: string]: import("@n8n/api-types").DataStoreColumnJsType | null;
24
+ }[];
25
+ export declare function getPlaceholder(index: number, dbType: DataSourceOptions['type']): string;