@n8n/db 1.25.0 → 1.26.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.
Files changed (210) hide show
  1. package/dist/build.tsbuildinfo +1 -1
  2. package/dist/connection/db-connection-monitor.d.ts +25 -0
  3. package/dist/connection/db-connection-monitor.js +166 -0
  4. package/dist/connection/db-connection-monitor.js.map +1 -0
  5. package/dist/connection/db-connection-options.js +7 -0
  6. package/dist/connection/db-connection-options.js.map +1 -1
  7. package/dist/connection/db-connection.d.ts +1 -4
  8. package/dist/connection/db-connection.js +8 -45
  9. package/dist/connection/db-connection.js.map +1 -1
  10. package/dist/entities/credentials-entity.d.ts +1 -1
  11. package/dist/entities/index.d.ts +2 -3
  12. package/dist/entities/index.js +2 -1
  13. package/dist/entities/index.js.map +1 -1
  14. package/dist/entities/types-db.d.ts +23 -2
  15. package/dist/entities/types-db.js +22 -1
  16. package/dist/entities/types-db.js.map +1 -1
  17. package/dist/entities/user.d.ts +1 -1
  18. package/dist/entities/workflow-entity.js.map +1 -1
  19. package/dist/entities/workflow-publication-outbox.d.ts +8 -1
  20. package/dist/entities/workflow-publication-outbox.js +10 -3
  21. package/dist/entities/workflow-publication-outbox.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.js +2 -1
  24. package/dist/index.js.map +1 -1
  25. package/dist/migrations/common/1690000000030-RemoveResetPasswordColumns.js +4 -5
  26. package/dist/migrations/common/1690000000030-RemoveResetPasswordColumns.js.map +1 -1
  27. package/dist/migrations/common/1690000000040-AddMfaColumns.js +4 -2
  28. package/dist/migrations/common/1690000000040-AddMfaColumns.js.map +1 -1
  29. package/dist/migrations/common/1693491613982-ExecutionSoftDelete.js +4 -2
  30. package/dist/migrations/common/1693491613982-ExecutionSoftDelete.js.map +1 -1
  31. package/dist/migrations/common/1693554410387-DisallowOrphanExecutions.js +2 -2
  32. package/dist/migrations/common/1693554410387-DisallowOrphanExecutions.js.map +1 -1
  33. package/dist/migrations/common/1695128658538-AddWorkflowMetadata.js +2 -2
  34. package/dist/migrations/common/1695128658538-AddWorkflowMetadata.js.map +1 -1
  35. package/dist/migrations/common/1695829275184-ModifyWorkflowHistoryNodesAndConnections.js +4 -4
  36. package/dist/migrations/common/1695829275184-ModifyWorkflowHistoryNodesAndConnections.js.map +1 -1
  37. package/dist/migrations/common/1705429061930-DropRoleMapping.js +6 -6
  38. package/dist/migrations/common/1705429061930-DropRoleMapping.js.map +1 -1
  39. package/dist/migrations/common/1712044305787-RemoveNodesAccess.js +1 -1
  40. package/dist/migrations/common/1712044305787-RemoveNodesAccess.js.map +1 -1
  41. package/dist/migrations/common/1714133768519-CreateProject.js +2 -2
  42. package/dist/migrations/common/1714133768519-CreateProject.js.map +1 -1
  43. package/dist/migrations/common/1714133768521-MakeExecutionStatusNonNullable.js +3 -1
  44. package/dist/migrations/common/1714133768521-MakeExecutionStatusNonNullable.js.map +1 -1
  45. package/dist/migrations/common/1724951148974-AddApiKeysTable.js +1 -1
  46. package/dist/migrations/common/1724951148974-AddApiKeysTable.js.map +1 -1
  47. package/dist/migrations/common/1727427440136-SeparateExecutionCreationFromStart.js +4 -6
  48. package/dist/migrations/common/1727427440136-SeparateExecutionCreationFromStart.js.map +1 -1
  49. package/dist/migrations/common/1729607673464-UpdateProcessedDataValueColumnToText.js +2 -2
  50. package/dist/migrations/common/1729607673464-UpdateProcessedDataValueColumnToText.js.map +1 -1
  51. package/dist/migrations/common/1729607673469-AddProjectIcons.js +2 -2
  52. package/dist/migrations/common/1729607673469-AddProjectIcons.js.map +1 -1
  53. package/dist/migrations/common/1731404028106-AddDescriptionToTestDefinition.js +4 -2
  54. package/dist/migrations/common/1731404028106-AddDescriptionToTestDefinition.js.map +1 -1
  55. package/dist/migrations/common/1742918400000-AddScopesColumnToApiKeys.js +2 -2
  56. package/dist/migrations/common/1742918400000-AddScopesColumnToApiKeys.js.map +1 -1
  57. package/dist/migrations/common/1750252139168-LinkRoleToUserTable.js +4 -2
  58. package/dist/migrations/common/1750252139168-LinkRoleToUserTable.js.map +1 -1
  59. package/dist/migrations/common/1750252139170-RemoveOldRoleColumn.js +4 -2
  60. package/dist/migrations/common/1750252139170-RemoveOldRoleColumn.js.map +1 -1
  61. package/dist/migrations/common/1752669793000-AddInputsOutputsToTestCaseExecution.js +6 -2
  62. package/dist/migrations/common/1752669793000-AddInputsOutputsToTestCaseExecution.js.map +1 -1
  63. package/dist/migrations/common/1756906557570-AddTimestampsToRoleAndRoleIndexes.js +1 -1
  64. package/dist/migrations/common/1756906557570-AddTimestampsToRoleAndRoleIndexes.js.map +1 -1
  65. package/dist/migrations/common/1758731786132-AddAudienceColumnToApiKey.js +2 -4
  66. package/dist/migrations/common/1758731786132-AddAudienceColumnToApiKey.js.map +1 -1
  67. package/dist/migrations/common/1760020000000-CreateChatHubAgentTable.js +4 -4
  68. package/dist/migrations/common/1760020000000-CreateChatHubAgentTable.js.map +1 -1
  69. package/dist/migrations/common/1760965142113-DropUnusedChatHubColumns.js +6 -4
  70. package/dist/migrations/common/1760965142113-DropUnusedChatHubColumns.js.map +1 -1
  71. package/dist/migrations/common/1761773155024-AddAttachmentsToChatHubMessages.js +2 -2
  72. package/dist/migrations/common/1761773155024-AddAttachmentsToChatHubMessages.js.map +1 -1
  73. package/dist/migrations/common/1761830340990-AddToolsColumnToChatHubTables.js +4 -4
  74. package/dist/migrations/common/1761830340990-AddToolsColumnToChatHubTables.js.map +1 -1
  75. package/dist/migrations/common/1762177736257-AddWorkflowDescriptionColumn.js +4 -2
  76. package/dist/migrations/common/1762177736257-AddWorkflowDescriptionColumn.js.map +1 -1
  77. package/dist/migrations/common/1762763704614-BackfillMissingWorkflowHistoryRecords.js +3 -1
  78. package/dist/migrations/common/1762763704614-BackfillMissingWorkflowHistoryRecords.js.map +1 -1
  79. package/dist/migrations/common/1762847206508-AddWorkflowHistoryAutoSaveFields.js +4 -2
  80. package/dist/migrations/common/1762847206508-AddWorkflowHistoryAutoSaveFields.js.map +1 -1
  81. package/dist/migrations/common/1763047800000-AddActiveVersionIdColumn.js +6 -2
  82. package/dist/migrations/common/1763047800000-AddActiveVersionIdColumn.js.map +1 -1
  83. package/dist/migrations/common/1764276827837-AddCreatorIdToProjectTable.js +2 -4
  84. package/dist/migrations/common/1764276827837-AddCreatorIdToProjectTable.js.map +1 -1
  85. package/dist/migrations/common/1765459448000-AddResolvableFieldsToCredentials.js +2 -6
  86. package/dist/migrations/common/1765459448000-AddResolvableFieldsToCredentials.js.map +1 -1
  87. package/dist/migrations/common/1765788427674-AddIconToAgentTable.js +2 -2
  88. package/dist/migrations/common/1765788427674-AddIconToAgentTable.js.map +1 -1
  89. package/dist/migrations/common/1766068346315-AddChatMessageIndices.js +2 -2
  90. package/dist/migrations/common/1766068346315-AddChatMessageIndices.js.map +1 -1
  91. package/dist/migrations/common/1769000000000-AddPublishedVersionIdToWorkflowDependency.js +6 -2
  92. package/dist/migrations/common/1769000000000-AddPublishedVersionIdToWorkflowDependency.js.map +1 -1
  93. package/dist/migrations/common/1770000000000-CreateChatHubToolsTable.js +8 -4
  94. package/dist/migrations/common/1770000000000-CreateChatHubToolsTable.js.map +1 -1
  95. package/dist/migrations/common/1771500000002-AddFilesColumnToChatHubAgents.js +4 -2
  96. package/dist/migrations/common/1771500000002-AddFilesColumnToChatHubAgents.js.map +1 -1
  97. package/dist/migrations/common/1772000000000-AddSuggestedPromptsToAgentTable.js +4 -2
  98. package/dist/migrations/common/1772000000000-AddSuggestedPromptsToAgentTable.js.map +1 -1
  99. package/dist/migrations/common/1772619247761-AddRoleColumnToProjectSecretsProviderAccess.js +2 -2
  100. package/dist/migrations/common/1772619247761-AddRoleColumnToProjectSecretsProviderAccess.js.map +1 -1
  101. package/dist/migrations/common/1772700000000-AddTypeToChatHubSessions.js +2 -2
  102. package/dist/migrations/common/1772700000000-AddTypeToChatHubSessions.js.map +1 -1
  103. package/dist/migrations/common/1774280963551-AddRestoreFieldsToWorkflowBuilderSession.js +2 -5
  104. package/dist/migrations/common/1774280963551-AddRestoreFieldsToWorkflowBuilderSession.js.map +1 -1
  105. package/dist/migrations/common/1775740765000-ChangeWorkflowPublishHistoryVersionIdToSetNull.js +2 -2
  106. package/dist/migrations/common/1775740765000-ChangeWorkflowPublishHistoryVersionIdToSetNull.js.map +1 -1
  107. package/dist/migrations/common/1777045000000-AddTracingContextToExecution.js +4 -2
  108. package/dist/migrations/common/1777045000000-AddTracingContextToExecution.js.map +1 -1
  109. package/dist/migrations/common/1777100000000-AddLangsmithIdsToInstanceAiRunSnapshots.js +4 -2
  110. package/dist/migrations/common/1777100000000-AddLangsmithIdsToInstanceAiRunSnapshots.js.map +1 -1
  111. package/dist/migrations/common/1778000000000-AddExecutionDeduplicationKey.js +4 -2
  112. package/dist/migrations/common/1778000000000-AddExecutionDeduplicationKey.js.map +1 -1
  113. package/dist/migrations/common/1778100002000-AddEvaluationConfigColumnsToTestRun.js +7 -3
  114. package/dist/migrations/common/1778100002000-AddEvaluationConfigColumnsToTestRun.js.map +1 -1
  115. package/dist/migrations/common/1778496086558-CreateEvaluationCollection.js +4 -2
  116. package/dist/migrations/common/1778496086558-CreateEvaluationCollection.js.map +1 -1
  117. package/dist/migrations/common/1784000000002-DropAgentExecutionWorkingMemory.js +4 -2
  118. package/dist/migrations/common/1784000000002-DropAgentExecutionWorkingMemory.js.map +1 -1
  119. package/dist/migrations/common/1784000000006-AddNodeGroupsColumnToWorkflowAndHistory.js +8 -4
  120. package/dist/migrations/common/1784000000006-AddNodeGroupsColumnToWorkflowAndHistory.js.map +1 -1
  121. package/dist/migrations/common/1784000000007-CreateInstanceAiCheckpointTable.js +5 -3
  122. package/dist/migrations/common/1784000000007-CreateInstanceAiCheckpointTable.js.map +1 -1
  123. package/dist/migrations/common/1784000000011-CreateAgentHistoryTable.js +8 -4
  124. package/dist/migrations/common/1784000000011-CreateAgentHistoryTable.js.map +1 -1
  125. package/dist/migrations/common/1784000000014-PersistInstanceAiPendingConfirmations.js +6 -4
  126. package/dist/migrations/common/1784000000014-PersistInstanceAiPendingConfirmations.js.map +1 -1
  127. package/dist/migrations/common/1784000000015-AddSourceWorkflowIdToWorkflow.js +6 -2
  128. package/dist/migrations/common/1784000000015-AddSourceWorkflowIdToWorkflow.js.map +1 -1
  129. package/dist/migrations/common/1784000000017-AddLastUsedAtToApiKey.js +4 -2
  130. package/dist/migrations/common/1784000000017-AddLastUsedAtToApiKey.js.map +1 -1
  131. package/dist/migrations/common/1784000000018-CreateAgentFilesTable.js +4 -2
  132. package/dist/migrations/common/1784000000018-CreateAgentFilesTable.js.map +1 -1
  133. package/dist/migrations/common/1784000000019-AddCustomTelemetryTagsToProject.js +4 -2
  134. package/dist/migrations/common/1784000000019-AddCustomTelemetryTagsToProject.js.map +1 -1
  135. package/dist/migrations/common/1784000000021-CreateAgentTaskDefinitionTable.js +4 -2
  136. package/dist/migrations/common/1784000000021-CreateAgentTaskDefinitionTable.js.map +1 -1
  137. package/dist/migrations/common/1784000000022-AddSubAgentLinkageToAgentExecutionThreads.d.ts +5 -0
  138. package/dist/migrations/common/1784000000022-AddSubAgentLinkageToAgentExecutionThreads.js +54 -0
  139. package/dist/migrations/common/1784000000022-AddSubAgentLinkageToAgentExecutionThreads.js.map +1 -0
  140. package/dist/migrations/common/1784000000023-CreateInstanceAiMcpRegistryConnectionTable.d.ts +5 -0
  141. package/dist/migrations/common/1784000000023-CreateInstanceAiMcpRegistryConnectionTable.js +31 -0
  142. package/dist/migrations/common/1784000000023-CreateInstanceAiMcpRegistryConnectionTable.js.map +1 -0
  143. package/dist/migrations/common/1784000000024-AddResourceToOAuthAuthorizationCodes.d.ts +5 -0
  144. package/dist/migrations/common/1784000000024-AddResourceToOAuthAuthorizationCodes.js +20 -0
  145. package/dist/migrations/common/1784000000024-AddResourceToOAuthAuthorizationCodes.js.map +1 -0
  146. package/dist/migrations/common/1784000000025-MigrateRedactionEnforcementToFloor.d.ts +6 -0
  147. package/dist/migrations/common/1784000000025-MigrateRedactionEnforcementToFloor.js +54 -0
  148. package/dist/migrations/common/1784000000025-MigrateRedactionEnforcementToFloor.js.map +1 -0
  149. package/dist/migrations/common/1784000000026-AddScopeColumnToOAuthTables.d.ts +5 -0
  150. package/dist/migrations/common/1784000000026-AddScopeColumnToOAuthTables.js +25 -0
  151. package/dist/migrations/common/1784000000026-AddScopeColumnToOAuthTables.js.map +1 -0
  152. package/dist/migrations/common/{1784000000020-CreateWorkflowPublicationOutboxTable.d.ts → 1784000000027-CreateWorkflowPublicationOutboxTable.d.ts} +1 -1
  153. package/dist/migrations/common/{1784000000020-CreateWorkflowPublicationOutboxTable.js → 1784000000027-CreateWorkflowPublicationOutboxTable.js} +5 -5
  154. package/dist/migrations/common/{1784000000020-CreateWorkflowPublicationOutboxTable.js.map → 1784000000027-CreateWorkflowPublicationOutboxTable.js.map} +1 -1
  155. package/dist/migrations/common/AddProjectIdToInstanceAiThreadBase.d.ts +11 -0
  156. package/dist/migrations/common/AddProjectIdToInstanceAiThreadBase.js +77 -0
  157. package/dist/migrations/common/AddProjectIdToInstanceAiThreadBase.js.map +1 -0
  158. package/dist/migrations/dsl/index.d.ts +10 -6
  159. package/dist/migrations/dsl/index.js +6 -6
  160. package/dist/migrations/dsl/index.js.map +1 -1
  161. package/dist/migrations/dsl/table.js.map +1 -1
  162. package/dist/migrations/postgresdb/1758794506893-AddProjectIdToVariableTable.js +4 -2
  163. package/dist/migrations/postgresdb/1758794506893-AddProjectIdToVariableTable.js.map +1 -1
  164. package/dist/migrations/postgresdb/1784000000028-AddProjectIdToInstanceAiThread.d.ts +6 -0
  165. package/dist/migrations/postgresdb/1784000000028-AddProjectIdToInstanceAiThread.js +25 -0
  166. package/dist/migrations/postgresdb/1784000000028-AddProjectIdToInstanceAiThread.js.map +1 -0
  167. package/dist/migrations/postgresdb/index.js +14 -2
  168. package/dist/migrations/postgresdb/index.js.map +1 -1
  169. package/dist/migrations/sqlite/1764276827837-AddCreatorIdToProjectTable.js +2 -4
  170. package/dist/migrations/sqlite/1764276827837-AddCreatorIdToProjectTable.js.map +1 -1
  171. package/dist/migrations/sqlite/1764689448000-AddResolvableFieldsToCredentials.js +2 -6
  172. package/dist/migrations/sqlite/1764689448000-AddResolvableFieldsToCredentials.js.map +1 -1
  173. package/dist/migrations/sqlite/1784000000026-AddScopeColumnToOAuthTables.d.ts +4 -0
  174. package/dist/migrations/sqlite/1784000000026-AddScopeColumnToOAuthTables.js +12 -0
  175. package/dist/migrations/sqlite/1784000000026-AddScopeColumnToOAuthTables.js.map +1 -0
  176. package/dist/migrations/sqlite/1784000000028-AddProjectIdToInstanceAiThread.d.ts +8 -0
  177. package/dist/migrations/sqlite/1784000000028-AddProjectIdToInstanceAiThread.js +47 -0
  178. package/dist/migrations/sqlite/1784000000028-AddProjectIdToInstanceAiThread.js.map +1 -0
  179. package/dist/migrations/sqlite/index.js +14 -2
  180. package/dist/migrations/sqlite/index.js.map +1 -1
  181. package/dist/repositories/execution-data.repository.d.ts +0 -3
  182. package/dist/repositories/execution-data.repository.js +0 -11
  183. package/dist/repositories/execution-data.repository.js.map +1 -1
  184. package/dist/repositories/execution.repository.d.ts +0 -4
  185. package/dist/repositories/execution.repository.js +0 -43
  186. package/dist/repositories/execution.repository.js.map +1 -1
  187. package/dist/repositories/shared-credentials.repository.d.ts +7 -0
  188. package/dist/repositories/shared-credentials.repository.js +21 -0
  189. package/dist/repositories/shared-credentials.repository.js.map +1 -1
  190. package/dist/repositories/test-run.repository.ee.d.ts +2 -1
  191. package/dist/repositories/test-run.repository.ee.js +2 -1
  192. package/dist/repositories/test-run.repository.ee.js.map +1 -1
  193. package/dist/repositories/workflow-publication-outbox.repository.d.ts +13 -1
  194. package/dist/repositories/workflow-publication-outbox.repository.js +93 -2
  195. package/dist/repositories/workflow-publication-outbox.repository.js.map +1 -1
  196. package/dist/repositories/workflow.repository.d.ts +3 -3
  197. package/dist/utils/test-utils/mock-entity-manager.d.ts +85 -44
  198. package/dist/utils/test-utils/mock-entity-manager.js +2 -2
  199. package/dist/utils/test-utils/mock-entity-manager.js.map +1 -1
  200. package/dist/utils/test-utils/mock-instance.d.ts +2 -2
  201. package/dist/utils/test-utils/mock-instance.js +2 -2
  202. package/dist/utils/test-utils/mock-instance.js.map +1 -1
  203. package/dist/utils/validators/no-url.validator.js +1 -1
  204. package/dist/utils/validators/no-url.validator.js.map +1 -1
  205. package/dist/utils/validators/no-xss.validator.js +1 -1
  206. package/dist/utils/validators/no-xss.validator.js.map +1 -1
  207. package/package.json +24 -18
  208. package/dist/migrations/migration-helpers.test.d.ts +0 -1
  209. package/dist/migrations/migration-helpers.test.js +0 -64
  210. package/dist/migrations/migration-helpers.test.js.map +0 -1
@@ -1,5 +1,17 @@
1
+ import { GlobalConfig } from '@n8n/config';
1
2
  import { DataSource, Repository } from '@n8n/typeorm';
2
3
  import { WorkflowPublicationOutbox } from '../entities/workflow-publication-outbox';
3
4
  export declare class WorkflowPublicationOutboxRepository extends Repository<WorkflowPublicationOutbox> {
4
- constructor(dataSource: DataSource);
5
+ private readonly globalConfig;
6
+ constructor(dataSource: DataSource, globalConfig: GlobalConfig);
7
+ enqueue(workflowId: string, publishedVersionId: string): Promise<void>;
8
+ private enqueueWithPostgresUpsert;
9
+ private enqueueWithSqliteUpsert;
10
+ claimNextPendingRecord(): Promise<WorkflowPublicationOutbox | null>;
11
+ private claimWithPostgresLocking;
12
+ private claimWithSqliteTransaction;
13
+ markCompleted(id: number): Promise<void>;
14
+ markFailed(id: number, errorMessage: string): Promise<void>;
15
+ private assertSingleRowAffected;
16
+ private getTableName;
5
17
  }
@@ -10,17 +10,108 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.WorkflowPublicationOutboxRepository = void 0;
13
+ const config_1 = require("@n8n/config");
13
14
  const di_1 = require("@n8n/di");
14
15
  const typeorm_1 = require("@n8n/typeorm");
16
+ const n8n_workflow_1 = require("n8n-workflow");
15
17
  const workflow_publication_outbox_1 = require("../entities/workflow-publication-outbox");
16
18
  let WorkflowPublicationOutboxRepository = class WorkflowPublicationOutboxRepository extends typeorm_1.Repository {
17
- constructor(dataSource) {
19
+ constructor(dataSource, globalConfig) {
18
20
  super(workflow_publication_outbox_1.WorkflowPublicationOutbox, dataSource.manager);
21
+ this.globalConfig = globalConfig;
22
+ }
23
+ async enqueue(workflowId, publishedVersionId) {
24
+ if (this.globalConfig.database.type === 'postgresdb') {
25
+ await this.enqueueWithPostgresUpsert(workflowId, publishedVersionId);
26
+ return;
27
+ }
28
+ await this.enqueueWithSqliteUpsert(workflowId, publishedVersionId);
29
+ }
30
+ async enqueueWithPostgresUpsert(workflowId, publishedVersionId) {
31
+ const tableName = this.getTableName('workflow_publication_outbox');
32
+ await this.query(`INSERT INTO ${tableName} ("workflowId", "publishedVersionId", "status")
33
+ VALUES ($1, $2, '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending}')
34
+ ON CONFLICT ("workflowId", "status") WHERE "status" IN ('${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending}', '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress}')
35
+ DO UPDATE SET "publishedVersionId" = EXCLUDED."publishedVersionId", "updatedAt" = CURRENT_TIMESTAMP(3)`, [workflowId, publishedVersionId]);
36
+ }
37
+ async enqueueWithSqliteUpsert(workflowId, publishedVersionId) {
38
+ const tableName = this.getTableName('workflow_publication_outbox');
39
+ await this.query(`INSERT INTO ${tableName} ("workflowId", "publishedVersionId", "status")
40
+ VALUES (?, ?, '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending}')
41
+ ON CONFLICT ("workflowId", "status") WHERE "status" IN ('${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending}', '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress}')
42
+ DO UPDATE SET "publishedVersionId" = excluded."publishedVersionId", "updatedAt" = STRFTIME('%Y-%m-%d %H:%M:%f', 'NOW')`, [workflowId, publishedVersionId]);
43
+ }
44
+ async claimNextPendingRecord() {
45
+ if (this.globalConfig.database.type === 'postgresdb') {
46
+ return await this.claimWithPostgresLocking();
47
+ }
48
+ return await this.claimWithSqliteTransaction();
49
+ }
50
+ async claimWithPostgresLocking() {
51
+ const tableName = this.getTableName('workflow_publication_outbox');
52
+ const [rows] = await this.query(`UPDATE ${tableName}
53
+ SET "status" = '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress}', "updatedAt" = CURRENT_TIMESTAMP(3)
54
+ WHERE "id" = (
55
+ SELECT o."id" FROM ${tableName} o
56
+ WHERE o."status" = '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending}'
57
+ AND NOT EXISTS (
58
+ SELECT 1 FROM ${tableName} ip
59
+ WHERE ip."workflowId" = o."workflowId" AND ip."status" = '${workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress}'
60
+ )
61
+ ORDER BY o."id" ASC
62
+ LIMIT 1
63
+ FOR UPDATE SKIP LOCKED
64
+ )
65
+ RETURNING *`);
66
+ return rows[0] ?? null;
67
+ }
68
+ async claimWithSqliteTransaction() {
69
+ return await this.manager.transaction(async (tx) => {
70
+ const record = await tx
71
+ .createQueryBuilder(workflow_publication_outbox_1.WorkflowPublicationOutbox, 'o')
72
+ .where('o.status = :pending', { pending: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending })
73
+ .andWhere((qb) => {
74
+ const sub = qb
75
+ .subQuery()
76
+ .select('1')
77
+ .from(workflow_publication_outbox_1.WorkflowPublicationOutbox, 'ip')
78
+ .where('ip.workflowId = o.workflowId')
79
+ .andWhere('ip.status = :inProgress')
80
+ .getQuery();
81
+ return `NOT EXISTS ${sub}`;
82
+ })
83
+ .setParameter('inProgress', workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress)
84
+ .orderBy('o.id', 'ASC')
85
+ .getOne();
86
+ if (!record)
87
+ return null;
88
+ await tx.update(workflow_publication_outbox_1.WorkflowPublicationOutbox, { id: record.id, status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Pending }, { status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress });
89
+ record.status = workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress;
90
+ return record;
91
+ });
92
+ }
93
+ async markCompleted(id) {
94
+ const result = await this.update({ id, status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress }, { status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Completed, errorMessage: null });
95
+ this.assertSingleRowAffected(result.affected, id, workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Completed);
96
+ }
97
+ async markFailed(id, errorMessage) {
98
+ const result = await this.update({ id, status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.InProgress }, { status: workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Failed, errorMessage });
99
+ this.assertSingleRowAffected(result.affected, id, workflow_publication_outbox_1.WorkflowPublicationOutboxStatus.Failed);
100
+ }
101
+ assertSingleRowAffected(affected, id, target) {
102
+ if (affected !== 1) {
103
+ throw new n8n_workflow_1.UnexpectedError(`Expected to transition outbox record ${id} to '${target}', but ${affected ?? 0} rows were affected. The record may not be in progress.`);
104
+ }
105
+ }
106
+ getTableName(name) {
107
+ const { tablePrefix } = this.globalConfig.database;
108
+ return this.manager.connection.driver.escape(`${tablePrefix}${name}`);
19
109
  }
20
110
  };
21
111
  exports.WorkflowPublicationOutboxRepository = WorkflowPublicationOutboxRepository;
22
112
  exports.WorkflowPublicationOutboxRepository = WorkflowPublicationOutboxRepository = __decorate([
23
113
  (0, di_1.Service)(),
24
- __metadata("design:paramtypes", [typeorm_1.DataSource])
114
+ __metadata("design:paramtypes", [typeorm_1.DataSource,
115
+ config_1.GlobalConfig])
25
116
  ], WorkflowPublicationOutboxRepository);
26
117
  //# sourceMappingURL=workflow-publication-outbox.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-publication-outbox.repository.js","sourceRoot":"","sources":["../../src/repositories/workflow-publication-outbox.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,gCAAkC;AAClC,0CAAsD;AAEtD,yFAAoF;AAG7E,IAAM,mCAAmC,GAAzC,MAAM,mCAAoC,SAAQ,oBAAqC;IAC7F,YAAY,UAAsB;QACjC,KAAK,CAAC,uDAAyB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;CACD,CAAA;AAJY,kFAAmC;8CAAnC,mCAAmC;IAD/C,IAAA,YAAO,GAAE;qCAEe,oBAAU;GADtB,mCAAmC,CAI/C"}
1
+ {"version":3,"file":"workflow-publication-outbox.repository.js","sourceRoot":"","sources":["../../src/repositories/workflow-publication-outbox.repository.ts"],"names":[],"mappings":"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"}
@@ -68,9 +68,9 @@ export declare class WorkflowRepository extends Repository<WorkflowEntity> {
68
68
  private getWorkflowsIds;
69
69
  private fetchExtraData;
70
70
  private enrichDataWithExtras;
71
- getMany(workflowIds: string[], options?: ListQuery.Options): Promise<(Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[]>;
71
+ getMany(workflowIds: string[], options?: ListQuery.Options): Promise<(Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "createdAt" | "updatedAt" | "tags" | "description" | "active" | "versionId" | "activeVersionId">>)[]>;
72
72
  getManyAndCount(sharedWorkflowIds: string[], options?: ListQuery.Options): Promise<{
73
- workflows: (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[] | ListQueryDb.Workflow.WithSharing[];
73
+ workflows: ListQueryDb.Workflow.WithSharing[] | (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "createdAt" | "updatedAt" | "tags" | "description" | "active" | "versionId" | "activeVersionId">>)[];
74
74
  count: number;
75
75
  }>;
76
76
  getManyAndCountWithSharingSubquery(user: User, sharingOptions: {
@@ -81,7 +81,7 @@ export declare class WorkflowRepository extends Repository<WorkflowEntity> {
81
81
  personalProjectOwnerId?: string;
82
82
  onlySharedWithMe?: boolean;
83
83
  }, options?: ListQuery.Options): Promise<{
84
- workflows: (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "updatedAt" | "createdAt" | "description" | "tags" | "active" | "versionId" | "activeVersionId">>)[] | ListQueryDb.Workflow.WithSharing[];
84
+ workflows: ListQueryDb.Workflow.WithSharing[] | (Pick<WorkflowEntity, "id"> & Partial<Pick<WorkflowEntity, "name" | "createdAt" | "updatedAt" | "tags" | "description" | "active" | "versionId" | "activeVersionId">>)[];
85
85
  count: number;
86
86
  }>;
87
87
  private getManyQueryWithSharingSubquery;
@@ -4,48 +4,89 @@ export declare const mockEntityManager: (entityClass: Class) => {
4
4
  readonly "@instanceof": symbol;
5
5
  readonly connection: DataSource;
6
6
  readonly queryRunner?: import("@n8n/typeorm").QueryRunner | undefined;
7
- transaction: import("jest-mock-extended").CalledWithMock<Promise<unknown>, [isolationLevel: import("@n8n/typeorm/driver/types/IsolationLevel").IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<unknown>]>;
8
- query: import("jest-mock-extended").CalledWithMock<Promise<unknown>, [query: string, parameters?: any[] | undefined]>;
9
- createQueryBuilder: import("jest-mock-extended").CalledWithMock<import("@n8n/typeorm").SelectQueryBuilder<any>, [queryRunner?: import("@n8n/typeorm").QueryRunner | undefined]>;
10
- hasId: import("jest-mock-extended").CalledWithMock<boolean, [target: string | Function, entity: any]>;
11
- getId: import("jest-mock-extended").CalledWithMock<any, [target: import("@n8n/typeorm").EntityTarget<any>, entity: any]>;
12
- create: import("jest-mock-extended").CalledWithMock<unknown[], [entityClass: import("@n8n/typeorm").EntityTarget<unknown>, plainObjects?: unknown[] | undefined]>;
13
- merge: import("jest-mock-extended").CalledWithMock<import("@n8n/typeorm").ObjectLiteral, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, mergeIntoEntity: import("@n8n/typeorm").ObjectLiteral, ...entityLikes: import("@n8n/typeorm").DeepPartial<import("@n8n/typeorm").ObjectLiteral>[]]>;
14
- preload: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | undefined>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entityLike: import("@n8n/typeorm").DeepPartial<import("@n8n/typeorm").ObjectLiteral>]>;
15
- save: import("jest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
16
- remove: import("jest-mock-extended").CalledWithMock<Promise<unknown[]>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown[], options?: import("@n8n/typeorm").RemoveOptions | undefined]>;
17
- softRemove: import("jest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
18
- recover: import("jest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
19
- insert: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").InsertResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entity: {} | {}[]]>;
20
- upsert: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").InsertResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entityOrEntities: {} | {}[], conflictPathsOrOptions: string[] | import("@n8n/typeorm/repository/UpsertOptions").UpsertOptions<import("@n8n/typeorm").ObjectLiteral>]>;
21
- update: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any, partialEntity: {}]>;
22
- delete: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").DeleteResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
23
- softDelete: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
24
- restore: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
25
- exists: import("jest-mock-extended").CalledWithMock<Promise<boolean>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
26
- existsBy: import("jest-mock-extended").CalledWithMock<Promise<boolean>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
27
- count: import("jest-mock-extended").CalledWithMock<Promise<number>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
28
- countBy: import("jest-mock-extended").CalledWithMock<Promise<number>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
29
- sum: import("jest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
30
- average: import("jest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
31
- minimum: import("jest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
32
- maximum: import("jest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
33
- find: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
34
- findBy: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
35
- findAndCount: import("jest-mock-extended").CalledWithMock<Promise<[import("@n8n/typeorm").ObjectLiteral[], number]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
36
- findAndCountBy: import("jest-mock-extended").CalledWithMock<Promise<[import("@n8n/typeorm").ObjectLiteral[], number]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
37
- findByIds: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, ids: any[]]>;
38
- findOne: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options: import("@n8n/typeorm").FindOneOptions<import("@n8n/typeorm").ObjectLiteral>]>;
39
- findOneBy: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
40
- findOneById: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, id: string | number | Date]>;
41
- findOneOrFail: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options: import("@n8n/typeorm").FindOneOptions<import("@n8n/typeorm").ObjectLiteral>]>;
42
- findOneByOrFail: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
43
- clear: import("jest-mock-extended").CalledWithMock<Promise<void>, [entityClass: import("@n8n/typeorm").EntityTarget<unknown>]>;
44
- increment: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, conditions: any, propertyPath: string, value: string | number]>;
45
- decrement: import("jest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, conditions: any, propertyPath: string, value: string | number]>;
46
- getRepository: import("jest-mock-extended").CalledWithMock<import("@n8n/typeorm").Repository<import("@n8n/typeorm").ObjectLiteral>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>]>;
47
- getTreeRepository: import("jest-mock-extended").CalledWithMock<import("@n8n/typeorm").TreeRepository<import("@n8n/typeorm").ObjectLiteral>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>]>;
48
- withRepository: import("jest-mock-extended").CalledWithMock<import("@n8n/typeorm").Repository<any>, [repository: import("@n8n/typeorm").Repository<any> & import("@n8n/typeorm").Repository<import("@n8n/typeorm").ObjectLiteral>]>;
49
- getCustomRepository: import("jest-mock-extended").CalledWithMock<unknown, [customRepository: import("@n8n/typeorm").ObjectType<unknown>]>;
50
- release: import("jest-mock-extended").CalledWithMock<Promise<void>, []>;
7
+ transaction: {
8
+ <T>(runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;
9
+ <T>(isolationLevel: import("@n8n/typeorm/driver/types/IsolationLevel").IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<T>): Promise<T>;
10
+ } & import("vitest-mock-extended").CalledWithMock<Promise<unknown>, [isolationLevel: import("@n8n/typeorm/driver/types/IsolationLevel").IsolationLevel, runInTransaction: (entityManager: EntityManager) => Promise<unknown>]>;
11
+ query: (<T = any>(query: string, parameters?: any[]) => Promise<T>) & import("vitest-mock-extended").CalledWithMock<Promise<unknown>, [query: string, parameters?: any[] | undefined]>;
12
+ createQueryBuilder: {
13
+ <Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, alias: string, queryRunner?: import("@n8n/typeorm").QueryRunner): import("@n8n/typeorm").SelectQueryBuilder<Entity>;
14
+ (queryRunner?: import("@n8n/typeorm").QueryRunner): import("@n8n/typeorm").SelectQueryBuilder<any>;
15
+ } & import("vitest-mock-extended").CalledWithMock<import("@n8n/typeorm").SelectQueryBuilder<any>, [queryRunner?: import("@n8n/typeorm").QueryRunner | undefined]>;
16
+ hasId: {
17
+ (entity: any): boolean;
18
+ (target: Function | string, entity: any): boolean;
19
+ } & import("vitest-mock-extended").CalledWithMock<boolean, [target: string | Function, entity: any]>;
20
+ getId: {
21
+ (entity: any): any;
22
+ (target: import("@n8n/typeorm").EntityTarget<any>, entity: any): any;
23
+ } & import("vitest-mock-extended").CalledWithMock<any, [target: import("@n8n/typeorm").EntityTarget<any>, entity: any]>;
24
+ create: {
25
+ <Entity, EntityLike extends import("@n8n/typeorm").DeepPartial<Entity>>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, plainObject?: EntityLike): Entity;
26
+ <Entity, EntityLike extends import("@n8n/typeorm").DeepPartial<Entity>>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, plainObjects?: EntityLike[]): Entity[];
27
+ } & import("vitest-mock-extended").CalledWithMock<unknown[], [entityClass: import("@n8n/typeorm").EntityTarget<unknown>, plainObjects?: unknown[] | undefined]>;
28
+ merge: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, mergeIntoEntity: Entity, ...entityLikes: import("@n8n/typeorm").DeepPartial<Entity>[]) => Entity) & import("vitest-mock-extended").CalledWithMock<import("@n8n/typeorm").ObjectLiteral, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, mergeIntoEntity: import("@n8n/typeorm").ObjectLiteral, ...entityLikes: import("@n8n/typeorm").DeepPartial<import("@n8n/typeorm").ObjectLiteral>[]]>;
29
+ preload: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, entityLike: import("@n8n/typeorm").DeepPartial<Entity>) => Promise<Entity | undefined>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | undefined>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entityLike: import("@n8n/typeorm").DeepPartial<import("@n8n/typeorm").ObjectLiteral>]>;
30
+ save: {
31
+ <Entity>(entities: Entity[], options?: import("@n8n/typeorm").SaveOptions): Promise<Entity[]>;
32
+ <Entity>(entity: Entity, options?: import("@n8n/typeorm").SaveOptions): Promise<Entity>;
33
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entities: T[], options: import("@n8n/typeorm").SaveOptions & {
34
+ reload: false;
35
+ }): Promise<T[]>;
36
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entities: T[], options?: import("@n8n/typeorm").SaveOptions): Promise<(T & Entity)[]>;
37
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: T, options: import("@n8n/typeorm").SaveOptions & {
38
+ reload: false;
39
+ }): Promise<T>;
40
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: T, options?: import("@n8n/typeorm").SaveOptions): Promise<T & Entity>;
41
+ } & import("vitest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
42
+ remove: {
43
+ <Entity>(entity: Entity, options?: import("@n8n/typeorm").RemoveOptions): Promise<Entity>;
44
+ <Entity>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: Entity, options?: import("@n8n/typeorm").RemoveOptions): Promise<Entity>;
45
+ <Entity>(entity: Entity[], options?: import("@n8n/typeorm").RemoveOptions): Promise<Entity>;
46
+ <Entity>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: Entity[], options?: import("@n8n/typeorm").RemoveOptions): Promise<Entity[]>;
47
+ } & import("vitest-mock-extended").CalledWithMock<Promise<unknown[]>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown[], options?: import("@n8n/typeorm").RemoveOptions | undefined]>;
48
+ softRemove: {
49
+ <Entity>(entities: Entity[], options?: import("@n8n/typeorm").SaveOptions): Promise<Entity[]>;
50
+ <Entity>(entity: Entity, options?: import("@n8n/typeorm").SaveOptions): Promise<Entity>;
51
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entities: T[], options?: import("@n8n/typeorm").SaveOptions): Promise<T[]>;
52
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: T, options?: import("@n8n/typeorm").SaveOptions): Promise<T>;
53
+ } & import("vitest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
54
+ recover: {
55
+ <Entity>(entities: Entity[], options?: import("@n8n/typeorm").SaveOptions): Promise<Entity[]>;
56
+ <Entity>(entity: Entity, options?: import("@n8n/typeorm").SaveOptions): Promise<Entity>;
57
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entities: T[], options?: import("@n8n/typeorm").SaveOptions): Promise<T[]>;
58
+ <Entity, T extends import("@n8n/typeorm").DeepPartial<Entity>>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, entity: T, options?: import("@n8n/typeorm").SaveOptions): Promise<T>;
59
+ } & import("vitest-mock-extended").CalledWithMock<Promise<unknown>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<unknown>, entity: unknown, options?: import("@n8n/typeorm").SaveOptions | undefined]>;
60
+ insert: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(target: import("@n8n/typeorm").EntityTarget<Entity>, entity: import("@n8n/typeorm/query-builder/QueryPartialEntity").QueryDeepPartialEntity<Entity> | import("@n8n/typeorm/query-builder/QueryPartialEntity").QueryDeepPartialEntity<Entity>[]) => Promise<import("@n8n/typeorm").InsertResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").InsertResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entity: {} | {}[]]>;
61
+ upsert: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(target: import("@n8n/typeorm").EntityTarget<Entity>, entityOrEntities: import("@n8n/typeorm/query-builder/QueryPartialEntity").QueryDeepPartialEntity<Entity> | import("@n8n/typeorm/query-builder/QueryPartialEntity").QueryDeepPartialEntity<Entity>[], conflictPathsOrOptions: string[] | import("@n8n/typeorm/repository/UpsertOptions").UpsertOptions<Entity>) => Promise<import("@n8n/typeorm").InsertResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").InsertResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, entityOrEntities: {} | {}[], conflictPathsOrOptions: string[] | import("@n8n/typeorm/repository/UpsertOptions").UpsertOptions<import("@n8n/typeorm").ObjectLiteral>]>;
62
+ update: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(target: import("@n8n/typeorm").EntityTarget<Entity>, criteria: string | string[] | number | number[] | Date | Date[] | any, partialEntity: import("@n8n/typeorm/query-builder/QueryPartialEntity").QueryDeepPartialEntity<Entity>) => Promise<import("@n8n/typeorm").UpdateResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any, partialEntity: {}]>;
63
+ delete: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, criteria: string | string[] | number | number[] | Date | Date[] | any) => Promise<import("@n8n/typeorm").DeleteResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").DeleteResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
64
+ softDelete: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, criteria: string | string[] | number | number[] | Date | Date[] | any) => Promise<import("@n8n/typeorm").UpdateResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
65
+ restore: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(targetOrEntity: import("@n8n/typeorm").EntityTarget<Entity>, criteria: string | string[] | number | number[] | Date | Date[] | any) => Promise<import("@n8n/typeorm").UpdateResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [targetOrEntity: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, criteria: any]>;
66
+ exists: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options?: import("@n8n/typeorm").FindManyOptions<Entity>) => Promise<boolean>) & import("vitest-mock-extended").CalledWithMock<Promise<boolean>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
67
+ existsBy: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<boolean>) & import("vitest-mock-extended").CalledWithMock<Promise<boolean>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
68
+ count: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options?: import("@n8n/typeorm").FindManyOptions<Entity>) => Promise<number>) & import("vitest-mock-extended").CalledWithMock<Promise<number>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
69
+ countBy: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<number>) & import("vitest-mock-extended").CalledWithMock<Promise<number>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
70
+ sum: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, columnName: import("@n8n/typeorm/common/PickKeysByType").PickKeysByType<Entity, number>, where?: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<number | null>) & import("vitest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
71
+ average: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, columnName: import("@n8n/typeorm/common/PickKeysByType").PickKeysByType<Entity, number>, where?: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<number | null>) & import("vitest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
72
+ minimum: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, columnName: import("@n8n/typeorm/common/PickKeysByType").PickKeysByType<Entity, number>, where?: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<number | null>) & import("vitest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
73
+ maximum: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, columnName: import("@n8n/typeorm/common/PickKeysByType").PickKeysByType<Entity, number>, where?: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<number | null>) & import("vitest-mock-extended").CalledWithMock<Promise<number | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, columnName: string, where?: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[] | undefined]>;
74
+ find: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options?: import("@n8n/typeorm").FindManyOptions<Entity>) => Promise<Entity[]>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
75
+ findBy: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<Entity[]>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
76
+ findAndCount: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options?: import("@n8n/typeorm").FindManyOptions<Entity>) => Promise<[Entity[], number]>) & import("vitest-mock-extended").CalledWithMock<Promise<[import("@n8n/typeorm").ObjectLiteral[], number]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options?: import("@n8n/typeorm").FindManyOptions<import("@n8n/typeorm").ObjectLiteral> | undefined]>;
77
+ findAndCountBy: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<[Entity[], number]>) & import("vitest-mock-extended").CalledWithMock<Promise<[import("@n8n/typeorm").ObjectLiteral[], number]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
78
+ findByIds: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, ids: any[]) => Promise<Entity[]>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral[]>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, ids: any[]]>;
79
+ findOne: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options: import("@n8n/typeorm").FindOneOptions<Entity>) => Promise<Entity | null>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options: import("@n8n/typeorm").FindOneOptions<import("@n8n/typeorm").ObjectLiteral>]>;
80
+ findOneBy: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<Entity | null>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
81
+ findOneById: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, id: number | string | Date) => Promise<Entity | null>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral | null>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, id: string | number | Date]>;
82
+ findOneOrFail: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, options: import("@n8n/typeorm").FindOneOptions<Entity>) => Promise<Entity>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, options: import("@n8n/typeorm").FindOneOptions<import("@n8n/typeorm").ObjectLiteral>]>;
83
+ findOneByOrFail: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, where: import("@n8n/typeorm").FindOptionsWhere<Entity> | import("@n8n/typeorm").FindOptionsWhere<Entity>[]) => Promise<Entity>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").ObjectLiteral>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, where: import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral> | import("@n8n/typeorm").FindOptionsWhere<import("@n8n/typeorm").ObjectLiteral>[]]>;
84
+ clear: (<Entity>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>) => Promise<void>) & import("vitest-mock-extended").CalledWithMock<Promise<void>, [entityClass: import("@n8n/typeorm").EntityTarget<unknown>]>;
85
+ increment: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, conditions: any, propertyPath: string, value: number | string) => Promise<import("@n8n/typeorm").UpdateResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, conditions: any, propertyPath: string, value: string | number]>;
86
+ decrement: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(entityClass: import("@n8n/typeorm").EntityTarget<Entity>, conditions: any, propertyPath: string, value: number | string) => Promise<import("@n8n/typeorm").UpdateResult>) & import("vitest-mock-extended").CalledWithMock<Promise<import("@n8n/typeorm").UpdateResult>, [entityClass: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>, conditions: any, propertyPath: string, value: string | number]>;
87
+ getRepository: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(target: import("@n8n/typeorm").EntityTarget<Entity>) => import("@n8n/typeorm").Repository<Entity>) & import("vitest-mock-extended").CalledWithMock<import("@n8n/typeorm").Repository<import("@n8n/typeorm").ObjectLiteral>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>]>;
88
+ getTreeRepository: (<Entity extends import("@n8n/typeorm").ObjectLiteral>(target: import("@n8n/typeorm").EntityTarget<Entity>) => import("@n8n/typeorm").TreeRepository<Entity>) & import("vitest-mock-extended").CalledWithMock<import("@n8n/typeorm").TreeRepository<import("@n8n/typeorm").ObjectLiteral>, [target: import("@n8n/typeorm").EntityTarget<import("@n8n/typeorm").ObjectLiteral>]>;
89
+ withRepository: (<Entity extends import("@n8n/typeorm").ObjectLiteral, R extends import("@n8n/typeorm").Repository<any>>(repository: R & import("@n8n/typeorm").Repository<Entity>) => R) & import("vitest-mock-extended").CalledWithMock<import("@n8n/typeorm").Repository<any>, [repository: import("@n8n/typeorm").Repository<any> & import("@n8n/typeorm").Repository<import("@n8n/typeorm").ObjectLiteral>]>;
90
+ getCustomRepository: (<T>(customRepository: import("@n8n/typeorm").ObjectType<T>) => T) & import("vitest-mock-extended").CalledWithMock<unknown, [customRepository: import("@n8n/typeorm").ObjectType<unknown>]>;
91
+ release: (() => Promise<void>) & import("vitest-mock-extended").CalledWithMock<Promise<void>, []>;
51
92
  } & EntityManager;
@@ -2,13 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mockEntityManager = void 0;
4
4
  const typeorm_1 = require("@n8n/typeorm");
5
- const jest_mock_extended_1 = require("jest-mock-extended");
5
+ const vitest_mock_extended_1 = require("vitest-mock-extended");
6
6
  const mock_instance_1 = require("./mock-instance");
7
7
  const mockEntityManager = (entityClass) => {
8
8
  const entityManager = (0, mock_instance_1.mockInstance)(typeorm_1.EntityManager);
9
9
  const dataSource = (0, mock_instance_1.mockInstance)(typeorm_1.DataSource, {
10
10
  manager: entityManager,
11
- getMetadata: () => (0, jest_mock_extended_1.mock)({ target: entityClass }),
11
+ getMetadata: () => (0, vitest_mock_extended_1.mock)({ target: entityClass }),
12
12
  });
13
13
  Object.assign(entityManager, { connection: dataSource });
14
14
  return entityManager;
@@ -1 +1 @@
1
- {"version":3,"file":"mock-entity-manager.js","sourceRoot":"","sources":["../../../src/utils/test-utils/mock-entity-manager.ts"],"names":[],"mappings":";;;AAAA,0CAA8E;AAC9E,2DAA0C;AAG1C,mDAA+C;AAExC,MAAM,iBAAiB,GAAG,CAAC,WAAkB,EAAE,EAAE;IACvD,MAAM,aAAa,GAAG,IAAA,4BAAY,EAAC,uBAAa,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAA,4BAAY,EAAC,oBAAU,EAAE;QAC3C,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,yBAAI,EAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KAChE,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACzD,OAAO,aAAa,CAAC;AACtB,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B"}
1
+ {"version":3,"file":"mock-entity-manager.js","sourceRoot":"","sources":["../../../src/utils/test-utils/mock-entity-manager.ts"],"names":[],"mappings":";;;AAAA,0CAA8E;AAE9E,+DAA4C;AAE5C,mDAA+C;AAExC,MAAM,iBAAiB,GAAG,CAAC,WAAkB,EAAE,EAAE;IACvD,MAAM,aAAa,GAAG,IAAA,4BAAY,EAAC,uBAAa,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,IAAA,4BAAY,EAAC,oBAAU,EAAE;QAC3C,OAAO,EAAE,aAAa;QACtB,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,2BAAI,EAAiB,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KAChE,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACzD,OAAO,aAAa,CAAC;AACtB,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B"}
@@ -1,3 +1,3 @@
1
1
  import { type Constructable } from '@n8n/di';
2
- import { mock } from 'jest-mock-extended';
3
- export declare const mockInstance: <T>(serviceClass: Constructable<T>, data?: Parameters<typeof mock<T>>[0]) => { [K in keyof T]: T[K] extends (...args: infer A) => infer B ? import("jest-mock-extended").CalledWithMock<B, A> : T[K]; } & T;
2
+ import { mock } from 'vitest-mock-extended';
3
+ export declare const mockInstance: <T>(serviceClass: Constructable<T>, data?: Parameters<typeof mock<T>>[0]) => { [K in keyof T]: T[K] extends (...args: infer A) => infer B ? T[K] & import("vitest-mock-extended").CalledWithMock<B, A> : T[K]; } & T;
@@ -2,9 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.mockInstance = void 0;
4
4
  const di_1 = require("@n8n/di");
5
- const jest_mock_extended_1 = require("jest-mock-extended");
5
+ const vitest_mock_extended_1 = require("vitest-mock-extended");
6
6
  const mockInstance = (serviceClass, data) => {
7
- const instance = (0, jest_mock_extended_1.mock)(data);
7
+ const instance = (0, vitest_mock_extended_1.mock)(data);
8
8
  di_1.Container.set(serviceClass, instance);
9
9
  return instance;
10
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"mock-instance.js","sourceRoot":"","sources":["../../../src/utils/test-utils/mock-instance.ts"],"names":[],"mappings":";;;AAAA,gCAAwD;AACxD,2DAA0C;AAEnC,MAAM,YAAY,GAAG,CAC3B,YAA8B,EAC9B,IAAoC,EACnC,EAAE;IACH,MAAM,QAAQ,GAAG,IAAA,yBAAI,EAAI,IAAI,CAAC,CAAC;IAC/B,cAAS,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB"}
1
+ {"version":3,"file":"mock-instance.js","sourceRoot":"","sources":["../../../src/utils/test-utils/mock-instance.ts"],"names":[],"mappings":";;;AAAA,gCAAwD;AACxD,+DAA4C;AAErC,MAAM,YAAY,GAAG,CAC3B,YAA8B,EAC9B,IAAoC,EACnC,EAAE;IACH,MAAM,QAAQ,GAAG,IAAA,2BAAI,EAAI,IAAI,CAAC,CAAC;IAC/B,cAAS,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACtC,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC;AAPW,QAAA,YAAY,gBAOvB"}
@@ -14,7 +14,7 @@ let NoUrlConstraint = class NoUrlConstraint {
14
14
  return !URL_REGEX.test(value);
15
15
  }
16
16
  defaultMessage() {
17
- return 'Potentially malicious string';
17
+ return 'URLs are not allowed';
18
18
  }
19
19
  };
20
20
  NoUrlConstraint = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"no-url.validator.js","sourceRoot":"","sources":["../../../src/utils/validators/no-url.validator.ts"],"names":[],"mappings":";;;;;;;;AAgBA,sBAUC;AAzBD,qDAAyE;AAEzE,MAAM,SAAS,GAAG,wCAAwC,CAAC;AAG3D,IAAM,eAAe,GAArB,MAAM,eAAe;IACpB,QAAQ,CAAC,KAAa;QACrB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACb,OAAO,8BAA8B,CAAC;IACvC,CAAC;CACD,CAAA;AARK,eAAe;IADpB,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GAC/C,eAAe,CAQpB;AAED,SAAgB,KAAK,CAAC,OAA2B;IAChD,OAAO,UAAU,MAAc,EAAE,YAAoB;QACpD,IAAA,mCAAiB,EAAC;YACjB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO;YACP,SAAS,EAAE,eAAe;SAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"no-url.validator.js","sourceRoot":"","sources":["../../../src/utils/validators/no-url.validator.ts"],"names":[],"mappings":";;;;;;;;AAgBA,sBAUC;AAzBD,qDAAyE;AAEzE,MAAM,SAAS,GAAG,wCAAwC,CAAC;AAG3D,IAAM,eAAe,GAArB,MAAM,eAAe;IACpB,QAAQ,CAAC,KAAa;QACrB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACb,OAAO,sBAAsB,CAAC;IAC/B,CAAC;CACD,CAAA;AARK,eAAe;IADpB,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GAC/C,eAAe,CAQpB;AAED,SAAgB,KAAK,CAAC,OAA2B;IAChD,OAAO,UAAU,MAAc,EAAE,YAAoB;QACpD,IAAA,mCAAiB,EAAC;YACjB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO;YACP,SAAS,EAAE,eAAe;SAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
@@ -22,7 +22,7 @@ let NoXssConstraint = class NoXssConstraint {
22
22
  }));
23
23
  }
24
24
  defaultMessage() {
25
- return 'Potentially malicious string';
25
+ return 'Only letters, numbers, spaces and punctuation are allowed';
26
26
  }
27
27
  };
28
28
  NoXssConstraint = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"no-xss.validator.js","sourceRoot":"","sources":["../../../src/utils/validators/no-xss.validator.ts"],"names":[],"mappings":";;;;;;;;;;;AAsBA,sBAUC;AA/BD,qDAAyE;AACzE,8CAAsB;AAGtB,IAAM,eAAe,GAArB,MAAM,eAAe;IACpB,QAAQ,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5C,OAAO,CACN,KAAK;YACL,IAAA,aAAG,EAAC,KAAK,EAAE;gBACV,SAAS,EAAE,EAAE;aACb,CAAC,CACF,CAAC;IACH,CAAC;IAED,cAAc;QACb,OAAO,8BAA8B,CAAC;IACvC,CAAC;CACD,CAAA;AAfK,eAAe;IADpB,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GAC/C,eAAe,CAepB;AAED,SAAgB,KAAK,CAAC,OAA2B;IAChD,OAAO,UAAU,MAAc,EAAE,YAAoB;QACpD,IAAA,mCAAiB,EAAC;YACjB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO;YACP,SAAS,EAAE,eAAe;SAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"no-xss.validator.js","sourceRoot":"","sources":["../../../src/utils/validators/no-xss.validator.ts"],"names":[],"mappings":";;;;;;;;;;;AAsBA,sBAUC;AA/BD,qDAAyE;AACzE,8CAAsB;AAGtB,IAAM,eAAe,GAArB,MAAM,eAAe;IACpB,QAAQ,CAAC,KAAc;QACtB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAE5C,OAAO,CACN,KAAK;YACL,IAAA,aAAG,EAAC,KAAK,EAAE;gBACV,SAAS,EAAE,EAAE;aACb,CAAC,CACF,CAAC;IACH,CAAC;IAED,cAAc;QACb,OAAO,2DAA2D,CAAC;IACpE,CAAC;CACD,CAAA;AAfK,eAAe;IADpB,IAAA,qCAAmB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;GAC/C,eAAe,CAepB;AAED,SAAgB,KAAK,CAAC,OAA2B;IAChD,OAAO,UAAU,MAAc,EAAE,YAAoB;QACpD,IAAA,mCAAiB,EAAC;YACjB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO;YACP,SAAS,EAAE,eAAe;SAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@n8n/db",
3
- "version": "1.25.0",
3
+ "version": "1.26.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
- "LICENSE_EE.md",
10
- "LICENSE.md"
9
+ "LICENSE.md",
10
+ "LICENSE_EE.md"
11
11
  ],
12
12
  "dependencies": {
13
13
  "@n8n/typeorm": "0.3.20-17",
@@ -17,24 +17,29 @@
17
17
  "nanoid": "3.3.8",
18
18
  "p-lazy": "3.1.0",
19
19
  "reflect-metadata": "0.2.2",
20
- "uuid": "10.0.0",
20
+ "uuid": "11.1.1",
21
21
  "xss": "1.0.15",
22
22
  "zod": "3.25.67",
23
- "@n8n/backend-common": "1.25.0",
24
- "@n8n/api-types": "1.25.0",
25
- "@n8n/config": "2.23.0",
26
- "@n8n/decorators": "1.25.0",
27
- "@n8n/constants": "0.25.0",
28
- "@n8n/di": "0.12.0",
29
- "@n8n/permissions": "0.62.0",
30
- "@n8n/utils": "1.33.0",
31
- "n8n-workflow": "2.25.0",
32
- "n8n-core": "2.25.0"
23
+ "@n8n/backend-common": "1.26.0",
24
+ "@n8n/api-types": "1.26.0",
25
+ "@n8n/config": "2.24.0",
26
+ "@n8n/di": "0.13.0",
27
+ "@n8n/constants": "0.26.0",
28
+ "@n8n/decorators": "1.26.0",
29
+ "@n8n/utils": "1.34.0",
30
+ "@n8n/permissions": "0.63.0",
31
+ "n8n-core": "2.26.0",
32
+ "n8n-workflow": "2.26.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/lodash": "4.17.17",
36
+ "@vitest/coverage-v8": "4.1.1",
36
37
  "express": "5.1.0",
37
- "@n8n/typescript-config": "1.4.0"
38
+ "typescript": "6.0.2",
39
+ "vitest": "^4.1.1",
40
+ "vitest-mock-extended": "^3.1.0",
41
+ "@n8n/vitest-config": "1.14.0",
42
+ "@n8n/typescript-config": "1.5.0"
38
43
  },
39
44
  "license": "SEE LICENSE IN LICENSE.md",
40
45
  "homepage": "https://n8n.io",
@@ -51,14 +56,15 @@
51
56
  "dev": "pnpm watch",
52
57
  "typecheck": "tsc --noEmit",
53
58
  "build": "tsc -p tsconfig.build.json",
59
+ "build:unchecked": "tsc -p tsconfig.build.json --noCheck",
54
60
  "format": "biome format --write .",
55
61
  "format:check": "biome ci .",
56
62
  "lint": "eslint . --quiet",
57
63
  "lint:fix": "eslint . --fix",
58
64
  "watch": "tsc -p tsconfig.build.json --watch",
59
- "test": "jest",
60
- "test:unit": "jest",
61
- "test:dev": "jest --watch",
65
+ "test": "vitest run",
66
+ "test:unit": "vitest run",
67
+ "test:dev": "vitest --silent=false",
62
68
  "migration:new": "node scripts/new-migration.mjs"
63
69
  }
64
70
  }
@@ -1 +0,0 @@
1
- export {};