n8n 1.115.2 → 1.116.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 (221) hide show
  1. package/dist/active-workflow-manager.js +5 -3
  2. package/dist/active-workflow-manager.js.map +1 -1
  3. package/dist/build.tsbuildinfo +1 -1
  4. package/dist/chat/chat-execution-manager.js +1 -1
  5. package/dist/chat/chat-execution-manager.js.map +1 -1
  6. package/dist/commands/import/credentials.js.map +1 -1
  7. package/dist/constants.d.ts +1 -1
  8. package/dist/constants.js +2 -2
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controllers/ai.controller.js +3 -3
  11. package/dist/controllers/ai.controller.js.map +1 -1
  12. package/dist/controllers/dynamic-node-parameters.controller.js +29 -7
  13. package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
  14. package/dist/controllers/posthog.controller.d.ts +17 -0
  15. package/dist/controllers/posthog.controller.js +131 -0
  16. package/dist/controllers/posthog.controller.js.map +1 -0
  17. package/dist/controllers/users.controller.d.ts +2 -2
  18. package/dist/credentials/credentials.service.js.map +1 -1
  19. package/dist/credentials-helper.js.map +1 -1
  20. package/dist/environments.ee/source-control/source-control-import.service.ee.d.ts +10 -4
  21. package/dist/environments.ee/source-control/source-control-import.service.ee.js +69 -9
  22. package/dist/environments.ee/source-control/source-control-import.service.ee.js.map +1 -1
  23. package/dist/environments.ee/source-control/source-control-status.service.ee.d.ts +10 -1
  24. package/dist/environments.ee/source-control/source-control-status.service.ee.js +112 -2
  25. package/dist/environments.ee/source-control/source-control-status.service.ee.js.map +1 -1
  26. package/dist/environments.ee/source-control/source-control.controller.ee.d.ts +10 -0
  27. package/dist/environments.ee/source-control/source-control.service.ee.d.ts +5 -0
  28. package/dist/environments.ee/source-control/types/exportable-project.d.ts +5 -2
  29. package/dist/environments.ee/source-control/types/resource-owner.d.ts +4 -2
  30. package/dist/environments.ee/variables/variables.service.ee.js +3 -1
  31. package/dist/environments.ee/variables/variables.service.ee.js.map +1 -1
  32. package/dist/events/relays/telemetry.event-relay.d.ts +1 -1
  33. package/dist/events/relays/telemetry.event-relay.js +2 -1
  34. package/dist/events/relays/telemetry.event-relay.js.map +1 -1
  35. package/dist/interfaces.d.ts +1 -0
  36. package/dist/modules/chat-hub/chat-hub.controller.d.ts +17 -0
  37. package/dist/modules/chat-hub/chat-hub.controller.js +106 -0
  38. package/dist/modules/chat-hub/chat-hub.controller.js.map +1 -0
  39. package/dist/modules/chat-hub/chat-hub.module.d.ts +8 -0
  40. package/dist/modules/chat-hub/chat-hub.module.js +78 -0
  41. package/dist/modules/chat-hub/chat-hub.module.js.map +1 -0
  42. package/dist/modules/chat-hub/chat-hub.service.d.ts +34 -0
  43. package/dist/modules/chat-hub/chat-hub.service.js +549 -0
  44. package/dist/modules/chat-hub/chat-hub.service.js.map +1 -0
  45. package/dist/modules/chat-hub/chat-hub.settings.controller.d.ts +16 -0
  46. package/dist/modules/chat-hub/chat-hub.settings.controller.js +66 -0
  47. package/dist/modules/chat-hub/chat-hub.settings.controller.js.map +1 -0
  48. package/dist/modules/chat-hub/chat-hub.settings.service.d.ts +7 -0
  49. package/dist/modules/chat-hub/chat-hub.settings.service.js +36 -0
  50. package/dist/modules/chat-hub/chat-hub.settings.service.js.map +1 -0
  51. package/dist/modules/chat-hub/chat-hub.types.d.ts +17 -0
  52. package/dist/modules/chat-hub/chat-hub.types.js +3 -0
  53. package/dist/modules/chat-hub/chat-hub.types.js.map +1 -0
  54. package/dist/modules/chat-hub/dto/chat-message-request.dto.d.ts +9 -0
  55. package/dist/modules/chat-hub/dto/chat-message-request.dto.js +12 -0
  56. package/dist/modules/chat-hub/dto/chat-message-request.dto.js.map +1 -0
  57. package/dist/modules/chat-hub/dto/chat-models-request.dto.d.ts +7 -0
  58. package/dist/modules/chat-hub/dto/chat-models-request.dto.js +9 -0
  59. package/dist/modules/chat-hub/dto/chat-models-request.dto.js.map +1 -0
  60. package/dist/modules/chat-hub/dto/update-chat-settings.dto.d.ts +8 -0
  61. package/dist/modules/chat-hub/dto/update-chat-settings.dto.js +11 -0
  62. package/dist/modules/chat-hub/dto/update-chat-settings.dto.js.map +1 -0
  63. package/dist/modules/data-table/data-table-aggregate.controller.d.ts +14 -0
  64. package/dist/modules/data-table/{data-store-aggregate.controller.js → data-table-aggregate.controller.js} +21 -21
  65. package/dist/modules/data-table/{data-store-aggregate.controller.js.map → data-table-aggregate.controller.js.map} +1 -1
  66. package/dist/modules/data-table/{data-store-aggregate.service.d.ts → data-table-aggregate.service.d.ts} +6 -6
  67. package/dist/modules/data-table/{data-store-aggregate.service.js → data-table-aggregate.service.js} +11 -11
  68. package/dist/modules/data-table/{data-store-aggregate.service.js.map → data-table-aggregate.service.js.map} +1 -1
  69. package/dist/modules/data-table/{data-store-column.repository.d.ts → data-table-column.repository.d.ts} +7 -7
  70. package/dist/modules/data-table/{data-store-column.repository.js → data-table-column.repository.js} +23 -23
  71. package/dist/modules/data-table/data-table-column.repository.js.map +1 -0
  72. package/dist/modules/data-table/data-table-ddl.service.d.ts +10 -0
  73. package/dist/modules/data-table/data-table-ddl.service.js +56 -0
  74. package/dist/modules/data-table/data-table-ddl.service.js.map +1 -0
  75. package/dist/modules/data-table/data-table-proxy.service.d.ts +20 -0
  76. package/dist/modules/data-table/{data-store-proxy.service.js → data-table-proxy.service.js} +34 -34
  77. package/dist/modules/data-table/{data-store-proxy.service.js.map → data-table-proxy.service.js.map} +1 -1
  78. package/dist/modules/data-table/data-table-rows.repository.d.ts +31 -0
  79. package/dist/modules/data-table/{data-store-rows.repository.js → data-table-rows.repository.js} +39 -68
  80. package/dist/modules/data-table/data-table-rows.repository.js.map +1 -0
  81. package/dist/modules/data-table/{data-store-size-validator.service.d.ts → data-table-size-validator.service.d.ts} +4 -2
  82. package/dist/modules/data-table/{data-store-size-validator.service.js → data-table-size-validator.service.js} +20 -11
  83. package/dist/modules/data-table/data-table-size-validator.service.js.map +1 -0
  84. package/dist/modules/data-table/data-table.controller.d.ts +55 -0
  85. package/dist/modules/data-table/{data-store.controller.js → data-table.controller.js} +119 -119
  86. package/dist/modules/data-table/{data-store.controller.js.map → data-table.controller.js.map} +1 -1
  87. package/dist/modules/data-table/data-table.module.d.ts +2 -2
  88. package/dist/modules/data-table/data-table.module.js +18 -18
  89. package/dist/modules/data-table/data-table.module.js.map +1 -1
  90. package/dist/modules/data-table/data-table.repository.d.ts +34 -0
  91. package/dist/modules/data-table/{data-store.repository.js → data-table.repository.js} +44 -44
  92. package/dist/modules/data-table/data-table.repository.js.map +1 -0
  93. package/dist/modules/data-table/data-table.service.d.ts +62 -0
  94. package/dist/modules/data-table/data-table.service.js +331 -0
  95. package/dist/modules/data-table/data-table.service.js.map +1 -0
  96. package/dist/modules/data-table/{data-store.types.d.ts → data-table.types.d.ts} +1 -1
  97. package/dist/modules/data-table/{data-store.types.js → data-table.types.js} +1 -1
  98. package/dist/modules/data-table/data-table.types.js.map +1 -0
  99. package/dist/modules/data-table/errors/data-table-column-name-conflict.error.d.ts +4 -0
  100. package/dist/modules/data-table/errors/data-table-column-name-conflict.error.js +13 -0
  101. package/dist/modules/data-table/errors/{data-store-column-name-conflict.error.js.map → data-table-column-name-conflict.error.js.map} +1 -1
  102. package/dist/modules/data-table/errors/data-table-column-not-found.error.d.ts +4 -0
  103. package/dist/modules/data-table/errors/data-table-column-not-found.error.js +13 -0
  104. package/dist/modules/data-table/errors/{data-store-column-not-found.error.js.map → data-table-column-not-found.error.js.map} +1 -1
  105. package/dist/modules/data-table/errors/{data-store-name-conflict.error.d.ts → data-table-name-conflict.error.d.ts} +1 -1
  106. package/dist/modules/data-table/errors/data-table-name-conflict.error.js +13 -0
  107. package/dist/modules/data-table/errors/{data-store-name-conflict.error.js.map → data-table-name-conflict.error.js.map} +1 -1
  108. package/dist/modules/data-table/errors/data-table-not-found.error.d.ts +4 -0
  109. package/dist/modules/data-table/errors/data-table-not-found.error.js +13 -0
  110. package/dist/modules/data-table/errors/data-table-not-found.error.js.map +1 -0
  111. package/dist/modules/data-table/errors/{data-store-system-column-name-conflict.error.d.ts → data-table-system-column-name-conflict.error.d.ts} +1 -1
  112. package/dist/modules/data-table/errors/{data-store-system-column-name-conflict.error.js → data-table-system-column-name-conflict.error.js} +4 -4
  113. package/dist/modules/data-table/errors/{data-store-system-column-name-conflict.error.js.map → data-table-system-column-name-conflict.error.js.map} +1 -1
  114. package/dist/modules/data-table/errors/{data-store-validation.error.d.ts → data-table-validation.error.d.ts} +1 -1
  115. package/dist/modules/data-table/errors/data-table-validation.error.js +13 -0
  116. package/dist/modules/data-table/errors/{data-store-validation.error.js.map → data-table-validation.error.js.map} +1 -1
  117. package/dist/modules/data-table/utils/sql-utils.d.ts +11 -16
  118. package/dist/modules/data-table/utils/sql-utils.js +53 -45
  119. package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
  120. package/dist/modules/insights/database/entities/insights-by-period.js.map +1 -1
  121. package/dist/modules/insights/database/entities/insights-raw.js.map +1 -1
  122. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.d.ts +6 -0
  123. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js +76 -0
  124. package/dist/modules/insights/database/repositories/insights-by-period-query.helper.js.map +1 -0
  125. package/dist/modules/insights/database/repositories/insights-by-period.repository.d.ts +1 -3
  126. package/dist/modules/insights/database/repositories/insights-by-period.repository.js +8 -58
  127. package/dist/modules/insights/database/repositories/insights-by-period.repository.js.map +1 -1
  128. package/dist/modules/insights/insights.controller.js +3 -1
  129. package/dist/modules/insights/insights.controller.js.map +1 -1
  130. package/dist/modules/insights/insights.service.js +1 -1
  131. package/dist/modules/insights/insights.service.js.map +1 -1
  132. package/dist/modules/mcp/dto/update-workflow-availability.dto.d.ts +8 -0
  133. package/dist/modules/mcp/dto/update-workflow-availability.dto.js +11 -0
  134. package/dist/modules/mcp/dto/update-workflow-availability.dto.js.map +1 -0
  135. package/dist/modules/mcp/mcp.controller.js +1 -1
  136. package/dist/modules/mcp/mcp.settings.controller.d.ts +12 -1
  137. package/dist/modules/mcp/mcp.settings.controller.js +55 -4
  138. package/dist/modules/mcp/mcp.settings.controller.js.map +1 -1
  139. package/dist/modules/mcp/tools/get-workflow-details.tool.js +1 -1
  140. package/dist/modules/mcp/tools/get-workflow-details.tool.js.map +1 -1
  141. package/dist/public-api/v1/handlers/variables/variables.handler.d.ts +1 -2
  142. package/dist/public-api/v1/handlers/variables/variables.handler.js +7 -1
  143. package/dist/public-api/v1/handlers/variables/variables.handler.js.map +1 -1
  144. package/dist/public-api/v1/handlers/workflows/workflows.service.js.map +1 -1
  145. package/dist/public-api/v1/openapi.yml +44 -5
  146. package/dist/requests.d.ts +8 -1
  147. package/dist/scaling/job-processor.d.ts +1 -1
  148. package/dist/scaling/job-processor.js +4 -1
  149. package/dist/scaling/job-processor.js.map +1 -1
  150. package/dist/server.js +1 -0
  151. package/dist/server.js.map +1 -1
  152. package/dist/services/credentials-tester.service.d.ts +1 -1
  153. package/dist/services/credentials-tester.service.js +11 -4
  154. package/dist/services/credentials-tester.service.js.map +1 -1
  155. package/dist/services/dynamic-node-parameters.service.js +1 -1
  156. package/dist/services/frontend.service.js +1 -0
  157. package/dist/services/frontend.service.js.map +1 -1
  158. package/dist/services/import.service.d.ts +3 -1
  159. package/dist/services/import.service.js +8 -2
  160. package/dist/services/import.service.js.map +1 -1
  161. package/dist/services/project.service.ee.js +4 -4
  162. package/dist/services/project.service.ee.js.map +1 -1
  163. package/dist/services/public-api-key.service.js.map +1 -1
  164. package/dist/task-runners/task-broker/task-broker-ws-server.js +1 -1
  165. package/dist/task-runners/task-broker/task-broker-ws-server.js.map +1 -1
  166. package/dist/telemetry/index.d.ts +2 -0
  167. package/dist/telemetry/index.js +11 -2
  168. package/dist/telemetry/index.js.map +1 -1
  169. package/dist/utils/compression.util.js +2 -1
  170. package/dist/utils/compression.util.js.map +1 -1
  171. package/dist/wait-tracker.js +2 -1
  172. package/dist/wait-tracker.js.map +1 -1
  173. package/dist/webhooks/live-webhooks.d.ts +1 -1
  174. package/dist/webhooks/live-webhooks.js +7 -3
  175. package/dist/webhooks/live-webhooks.js.map +1 -1
  176. package/dist/webhooks/test-webhooks.d.ts +2 -2
  177. package/dist/webhooks/test-webhooks.js +8 -5
  178. package/dist/webhooks/test-webhooks.js.map +1 -1
  179. package/dist/webhooks/waiting-webhooks.d.ts +1 -1
  180. package/dist/webhooks/waiting-webhooks.js +5 -3
  181. package/dist/webhooks/waiting-webhooks.js.map +1 -1
  182. package/dist/webhooks/webhook-helpers.js +4 -2
  183. package/dist/webhooks/webhook-helpers.js.map +1 -1
  184. package/dist/workflow-execute-additional-data.d.ts +7 -1
  185. package/dist/workflow-execute-additional-data.js +2 -2
  186. package/dist/workflow-execute-additional-data.js.map +1 -1
  187. package/dist/workflow-helpers.d.ts +3 -2
  188. package/dist/workflow-helpers.js +27 -5
  189. package/dist/workflow-helpers.js.map +1 -1
  190. package/dist/workflow-runner.js +5 -1
  191. package/dist/workflow-runner.js.map +1 -1
  192. package/dist/workflows/workflow-execution.service.d.ts +2 -1
  193. package/dist/workflows/workflow-execution.service.js +7 -2
  194. package/dist/workflows/workflow-execution.service.js.map +1 -1
  195. package/dist/workflows/workflow-finder.service.d.ts +1 -1
  196. package/dist/workflows/workflow.service.ee.js.map +1 -1
  197. package/dist/workflows/workflows.controller.d.ts +4 -4
  198. package/dist/workflows/workflows.controller.js.map +1 -1
  199. package/package.json +17 -17
  200. package/dist/modules/data-table/data-store-aggregate.controller.d.ts +0 -14
  201. package/dist/modules/data-table/data-store-column.repository.js.map +0 -1
  202. package/dist/modules/data-table/data-store-proxy.service.d.ts +0 -20
  203. package/dist/modules/data-table/data-store-rows.repository.d.ts +0 -40
  204. package/dist/modules/data-table/data-store-rows.repository.js.map +0 -1
  205. package/dist/modules/data-table/data-store-size-validator.service.js.map +0 -1
  206. package/dist/modules/data-table/data-store.controller.d.ts +0 -60
  207. package/dist/modules/data-table/data-store.repository.d.ts +0 -34
  208. package/dist/modules/data-table/data-store.repository.js.map +0 -1
  209. package/dist/modules/data-table/data-store.service.d.ts +0 -64
  210. package/dist/modules/data-table/data-store.service.js +0 -323
  211. package/dist/modules/data-table/data-store.service.js.map +0 -1
  212. package/dist/modules/data-table/data-store.types.js.map +0 -1
  213. package/dist/modules/data-table/errors/data-store-column-name-conflict.error.d.ts +0 -4
  214. package/dist/modules/data-table/errors/data-store-column-name-conflict.error.js +0 -13
  215. package/dist/modules/data-table/errors/data-store-column-not-found.error.d.ts +0 -4
  216. package/dist/modules/data-table/errors/data-store-column-not-found.error.js +0 -13
  217. package/dist/modules/data-table/errors/data-store-name-conflict.error.js +0 -13
  218. package/dist/modules/data-table/errors/data-store-not-found.error.d.ts +0 -4
  219. package/dist/modules/data-table/errors/data-store-not-found.error.js +0 -13
  220. package/dist/modules/data-table/errors/data-store-not-found.error.js.map +0 -1
  221. package/dist/modules/data-table/errors/data-store-validation.error.js +0 -13
@@ -0,0 +1,549 @@
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.ChatHubService = void 0;
13
+ const api_types_1 = require("@n8n/api-types");
14
+ const backend_common_1 = require("@n8n/backend-common");
15
+ const db_1 = require("@n8n/db");
16
+ const di_1 = require("@n8n/di");
17
+ const n8n_workflow_1 = require("n8n-workflow");
18
+ const uuid_1 = require("uuid");
19
+ const credentials_helper_1 = require("../../credentials-helper");
20
+ const not_found_error_1 = require("../../errors/response-errors/not-found.error");
21
+ const workflow_execute_additional_data_1 = require("../../workflow-execute-additional-data");
22
+ const workflow_execution_service_1 = require("../../workflows/workflow-execution.service");
23
+ const credentials_service_1 = require("../../credentials/credentials.service");
24
+ const active_executions_1 = require("../../active-executions");
25
+ let ChatHubService = class ChatHubService {
26
+ constructor(logger, credentialsService, credentialsHelper, executionRepository, workflowExecutionService, workflowRepository, projectRepository, sharedWorkflowRepository, activeExecutions) {
27
+ this.logger = logger;
28
+ this.credentialsService = credentialsService;
29
+ this.credentialsHelper = credentialsHelper;
30
+ this.executionRepository = executionRepository;
31
+ this.workflowExecutionService = workflowExecutionService;
32
+ this.workflowRepository = workflowRepository;
33
+ this.projectRepository = projectRepository;
34
+ this.sharedWorkflowRepository = sharedWorkflowRepository;
35
+ this.activeExecutions = activeExecutions;
36
+ this.sesssions = new Map();
37
+ }
38
+ async getModels(user, credentialIds) {
39
+ const additionalData = await (0, workflow_execute_additional_data_1.getBase)({ userId: user.id });
40
+ const responses = await Promise.all(api_types_1.chatHubProviderSchema.options.map(async (provider) => {
41
+ const credentialId = credentialIds[provider];
42
+ if (!credentialId) {
43
+ return [provider, { models: [] }];
44
+ }
45
+ await this.credentialsService.getOne(user, credentialId, false);
46
+ const credentials = await this.credentialsHelper.getDecrypted(additionalData, {
47
+ id: credentialId,
48
+ name: api_types_1.PROVIDER_CREDENTIAL_TYPE_MAP[provider],
49
+ }, api_types_1.PROVIDER_CREDENTIAL_TYPE_MAP[provider], 'internal', undefined, true);
50
+ const apiKey = this.extractApiKey(provider, credentials);
51
+ if (!apiKey) {
52
+ return [provider, { models: [] }];
53
+ }
54
+ try {
55
+ return [provider, await this.fetchModelsForProvider(provider, apiKey)];
56
+ }
57
+ catch {
58
+ return [
59
+ provider,
60
+ { models: [], error: 'Could not retrieve models. Verify credentials.' },
61
+ ];
62
+ }
63
+ }));
64
+ return responses.reduce((acc, [provider, res]) => {
65
+ acc[provider] = res;
66
+ return acc;
67
+ }, {
68
+ openai: { models: [] },
69
+ anthropic: { models: [] },
70
+ google: { models: [] },
71
+ });
72
+ }
73
+ async fetchModelsForProvider(provider, apiKey) {
74
+ switch (provider) {
75
+ case 'openai':
76
+ return await this.fetchOpenAiModels(apiKey);
77
+ case 'anthropic':
78
+ return await this.fetchAnthropicModels(apiKey);
79
+ case 'google':
80
+ return await this.fetchGoogleModels(apiKey);
81
+ }
82
+ }
83
+ async fetchOpenAiModels(apiKey) {
84
+ const response = await fetch('https://api.openai.com/v1/models', {
85
+ method: 'GET',
86
+ headers: {
87
+ Authorization: `Bearer ${apiKey}`,
88
+ },
89
+ });
90
+ if (!response.ok) {
91
+ throw new Error(`Failed to fetch OpenAI models: ${response.statusText}`);
92
+ }
93
+ const data = await response.json();
94
+ return {
95
+ models: data.data
96
+ .filter((model) => model.id.includes('gpt') &&
97
+ !model.id.includes('instruct') &&
98
+ !model.id.includes('audio'))
99
+ .map((model) => ({ name: model.id })),
100
+ };
101
+ }
102
+ async fetchAnthropicModels(apiKey) {
103
+ const response = await fetch('https://api.anthropic.com/v1/models', {
104
+ method: 'GET',
105
+ headers: {
106
+ 'x-api-key': apiKey,
107
+ 'anthropic-version': '2023-06-01',
108
+ },
109
+ });
110
+ if (!response.ok) {
111
+ throw new Error(`Failed to fetch Anthropic models: ${response.statusText}`);
112
+ }
113
+ const data = (await response.json());
114
+ return {
115
+ models: (data.data || [])
116
+ .sort((a, b) => {
117
+ const dateA = new Date(a.created_at);
118
+ const dateB = new Date(b.created_at);
119
+ return dateB.getTime() - dateA.getTime();
120
+ })
121
+ .map((model) => ({ name: model.id })),
122
+ };
123
+ }
124
+ async fetchGoogleModels(apiKey) {
125
+ const response = await fetch(`https://generativelanguage.googleapis.com/v1/models?key=${apiKey}`, {
126
+ method: 'GET',
127
+ });
128
+ if (!response.ok) {
129
+ throw new Error(`Failed to fetch Google models: ${response.statusText}`);
130
+ }
131
+ const data = await response.json();
132
+ return {
133
+ models: data.models
134
+ ?.filter((model) => model.name.includes('gemini') &&
135
+ model.supportedGenerationMethods?.includes('generateContent'))
136
+ .map((model) => {
137
+ const modelId = model.name.split('/').pop();
138
+ return { name: modelId };
139
+ }),
140
+ };
141
+ }
142
+ extractApiKey(provider, credentials) {
143
+ if (typeof credentials !== 'object' || credentials === null) {
144
+ return undefined;
145
+ }
146
+ const creds = credentials;
147
+ switch (provider) {
148
+ case 'openai':
149
+ case 'anthropic':
150
+ case 'google':
151
+ return typeof creds.apiKey === 'string' ? creds.apiKey : undefined;
152
+ }
153
+ }
154
+ async createChatWorkflow(user, sessionId, nodes, connections) {
155
+ const { manager } = this.projectRepository;
156
+ const existing = await this.workflowRepository.findOneBy({ id: sessionId });
157
+ if (existing) {
158
+ return existing;
159
+ }
160
+ return await manager.transaction(async (trx) => {
161
+ const project = await this.projectRepository.getPersonalProjectForUser(user.id, trx);
162
+ if (!project) {
163
+ throw new not_found_error_1.NotFoundError('Could not find a personal project for this user');
164
+ }
165
+ const newWorkflow = new db_1.WorkflowEntity();
166
+ newWorkflow.versionId = (0, uuid_1.v4)();
167
+ newWorkflow.id = sessionId;
168
+ newWorkflow.name = `Chat ${sessionId}`;
169
+ newWorkflow.active = false;
170
+ newWorkflow.nodes = nodes;
171
+ newWorkflow.connections = connections;
172
+ const workflow = await trx.save(newWorkflow);
173
+ await trx.save(this.sharedWorkflowRepository.create({
174
+ role: 'workflow:owner',
175
+ projectId: project.id,
176
+ workflow,
177
+ }));
178
+ return workflow;
179
+ });
180
+ }
181
+ getMessage(execution) {
182
+ const lastNodeExecuted = execution.data.resultData.lastNodeExecuted;
183
+ if (typeof lastNodeExecuted !== 'string')
184
+ return undefined;
185
+ const runIndex = execution.data.resultData.runData[lastNodeExecuted].length - 1;
186
+ const mainOutputs = execution.data.resultData.runData[lastNodeExecuted][runIndex]?.data?.main;
187
+ if (mainOutputs && Array.isArray(mainOutputs)) {
188
+ for (const branch of mainOutputs) {
189
+ if (branch && Array.isArray(branch) && branch.length > 0 && branch[0].json?.output) {
190
+ return branch[0].json.output;
191
+ }
192
+ }
193
+ }
194
+ return undefined;
195
+ }
196
+ async askN8n(res, user, payload) {
197
+ let session = this.sesssions.get(payload.sessionId);
198
+ if (!session) {
199
+ session = [];
200
+ this.sesssions.set(payload.sessionId, session);
201
+ }
202
+ const chatHistory = session.map((msg) => ({
203
+ type: msg.type,
204
+ message: msg.message,
205
+ }));
206
+ session.push({
207
+ id: payload.messageId,
208
+ message: payload.message,
209
+ type: 'user',
210
+ createdAt: new Date(),
211
+ });
212
+ const nodes = [
213
+ {
214
+ parameters: {
215
+ public: true,
216
+ mode: 'webhook',
217
+ options: { responseMode: 'streaming' },
218
+ },
219
+ type: n8n_workflow_1.CHAT_TRIGGER_NODE_TYPE,
220
+ typeVersion: 1.3,
221
+ position: [0, 0],
222
+ id: (0, uuid_1.v4)(),
223
+ name: 'When chat message received',
224
+ webhookId: (0, uuid_1.v4)(),
225
+ },
226
+ {
227
+ parameters: {
228
+ promptType: 'define',
229
+ text: "={{ $('When chat message received').item.json.chatInput }}",
230
+ options: {
231
+ enableStreaming: true,
232
+ },
233
+ },
234
+ type: n8n_workflow_1.AGENT_LANGCHAIN_NODE_TYPE,
235
+ typeVersion: 3,
236
+ position: [600, 0],
237
+ id: (0, uuid_1.v4)(),
238
+ name: 'AI Agent',
239
+ },
240
+ this.createModelNode(payload),
241
+ {
242
+ parameters: {
243
+ sessionIdType: 'customKey',
244
+ sessionKey: "={{ $('When chat message received').item.json.sessionId }}",
245
+ },
246
+ type: '@n8n/n8n-nodes-langchain.memoryBufferWindow',
247
+ typeVersion: 1.3,
248
+ position: [500, 200],
249
+ id: (0, uuid_1.v4)(),
250
+ name: 'Memory',
251
+ },
252
+ {
253
+ parameters: {
254
+ mode: 'insert',
255
+ messages: {
256
+ messageValues: chatHistory,
257
+ },
258
+ },
259
+ type: '@n8n/n8n-nodes-langchain.memoryManager',
260
+ typeVersion: 1.1,
261
+ position: [200, 0],
262
+ id: (0, uuid_1.v4)(),
263
+ name: 'Restore Chat Memory',
264
+ },
265
+ ];
266
+ const connections = {
267
+ 'When chat message received': {
268
+ main: [[{ node: 'Restore Chat Memory', type: 'main', index: 0 }]],
269
+ },
270
+ 'Restore Chat Memory': {
271
+ main: [[{ node: 'AI Agent', type: 'main', index: 0 }]],
272
+ },
273
+ 'Chat Model': {
274
+ ai_languageModel: [[{ node: 'AI Agent', type: 'ai_languageModel', index: 0 }]],
275
+ },
276
+ Memory: {
277
+ ai_memory: [
278
+ [
279
+ { node: 'AI Agent', type: 'ai_memory', index: 0 },
280
+ { node: 'Restore Chat Memory', type: 'ai_memory', index: 0 },
281
+ ],
282
+ ],
283
+ },
284
+ };
285
+ const workflow = await this.createChatWorkflow(user, payload.sessionId, nodes, connections);
286
+ const workflowData = {
287
+ ...workflow,
288
+ nodes,
289
+ connections,
290
+ versionId: (0, uuid_1.v4)(),
291
+ };
292
+ const startNodes = [{ name: 'Restore Chat Memory', sourceData: null }];
293
+ const triggerToStartFrom = {
294
+ name: 'When chat message received',
295
+ data: {
296
+ startTime: Date.now(),
297
+ executionTime: 0,
298
+ executionIndex: 0,
299
+ executionStatus: 'success',
300
+ data: {
301
+ main: [
302
+ [
303
+ {
304
+ json: {
305
+ sessionId: `${payload.sessionId}-${payload.messageId}`,
306
+ action: 'sendMessage',
307
+ chatInput: payload.message,
308
+ },
309
+ },
310
+ ],
311
+ ],
312
+ },
313
+ source: [null],
314
+ },
315
+ };
316
+ this.logger.debug(`Starting execution of workflow "${workflow.name}" with ID ${workflow.id}`);
317
+ const { executionId } = await this.workflowExecutionService.executeManually({
318
+ workflowData,
319
+ startNodes,
320
+ triggerToStartFrom,
321
+ }, user, undefined, true, res);
322
+ if (!executionId) {
323
+ throw new n8n_workflow_1.OperationalError('There was a problem starting the chat execution.');
324
+ }
325
+ const result = await this.activeExecutions.getPostExecutePromise(executionId);
326
+ if (!result) {
327
+ throw new n8n_workflow_1.OperationalError('There was a problem executing the chat workflow.');
328
+ }
329
+ const execution = await this.executionRepository.findWithUnflattenedData(executionId, [
330
+ workflow.id,
331
+ ]);
332
+ if (!execution) {
333
+ throw new not_found_error_1.NotFoundError(`Could not find execution with ID ${executionId}`);
334
+ }
335
+ const message = this.getMessage(execution);
336
+ if (message) {
337
+ this.logger.debug(`Assistant: ${message} (${payload.replyId})`);
338
+ session.push({
339
+ id: payload.replyId,
340
+ message,
341
+ type: 'ai',
342
+ createdAt: new Date(),
343
+ });
344
+ }
345
+ }
346
+ createModelNode(payload) {
347
+ const common = {
348
+ position: [600, 200],
349
+ id: (0, uuid_1.v4)(),
350
+ name: 'Chat Model',
351
+ credentials: payload.credentials,
352
+ };
353
+ switch (payload.model.provider) {
354
+ case 'openai':
355
+ return {
356
+ ...common,
357
+ parameters: {
358
+ model: { __rl: true, mode: 'list', value: payload.model.model },
359
+ options: {},
360
+ },
361
+ type: '@n8n/n8n-nodes-langchain.lmChatOpenAi',
362
+ typeVersion: 1.2,
363
+ };
364
+ case 'anthropic':
365
+ return {
366
+ ...common,
367
+ parameters: {
368
+ model: {
369
+ __rl: true,
370
+ mode: 'list',
371
+ value: payload.model.model,
372
+ cachedResultName: payload.model.model,
373
+ },
374
+ options: {},
375
+ },
376
+ type: '@n8n/n8n-nodes-langchain.lmChatAnthropic',
377
+ typeVersion: 1.3,
378
+ };
379
+ case 'google':
380
+ return {
381
+ ...common,
382
+ parameters: {
383
+ model: { __rl: true, mode: 'list', value: payload.model.model },
384
+ options: {},
385
+ },
386
+ type: '@n8n/n8n-nodes-langchain.lmChatGoogleGemini',
387
+ typeVersion: 1.2,
388
+ };
389
+ }
390
+ }
391
+ async getConversations() {
392
+ const now = new Date();
393
+ const today = new Date(now);
394
+ const yesterday = new Date(now);
395
+ yesterday.setDate(yesterday.getDate() - 1);
396
+ const threeDaysAgo = new Date(now);
397
+ threeDaysAgo.setDate(threeDaysAgo.getDate() - 3);
398
+ const twoWeeksAgo = new Date(now);
399
+ twoWeeksAgo.setDate(twoWeeksAgo.getDate() - 14);
400
+ const twoMonthsAgo = new Date(now);
401
+ twoMonthsAgo.setMonth(twoMonthsAgo.getMonth() - 2);
402
+ return [
403
+ {
404
+ id: '7f3e2a91-8c4d-4b5a-9e1f-2d6c8a4b5e7f',
405
+ title: 'Getting Started with n8n',
406
+ createdAt: today.toISOString(),
407
+ updatedAt: today.toISOString(),
408
+ },
409
+ {
410
+ id: '3a8f5c2d-1e9b-4d7a-8c3e-6f2a9b4d8e1c',
411
+ title: 'Workflow Automation Ideas',
412
+ createdAt: yesterday.toISOString(),
413
+ updatedAt: yesterday.toISOString(),
414
+ },
415
+ {
416
+ id: '9b2e4f6a-7d1c-4a8b-9e3f-5c7d2a8b4e6f',
417
+ title: 'API Integration Help',
418
+ createdAt: threeDaysAgo.toISOString(),
419
+ updatedAt: threeDaysAgo.toISOString(),
420
+ },
421
+ {
422
+ id: '5c8a1d3e-4b9f-4e2a-8d6c-7f3a9b2e4c8d',
423
+ title: 'Database Schema Design',
424
+ createdAt: twoWeeksAgo.toISOString(),
425
+ updatedAt: twoWeeksAgo.toISOString(),
426
+ },
427
+ {
428
+ id: '2f6d9a4c-8e1b-4d7a-9c3e-6a8f2b5d4e9c',
429
+ title: 'Docker Deployment Questions',
430
+ createdAt: twoMonthsAgo.toISOString(),
431
+ updatedAt: twoMonthsAgo.toISOString(),
432
+ },
433
+ ];
434
+ }
435
+ async getConversationMessages(conversationId) {
436
+ this.logger.debug(`Fetching messages for conversation ${conversationId}`);
437
+ const mockConversations = {
438
+ '7f3e2a91-8c4d-4b5a-9e1f-2d6c8a4b5e7f': [
439
+ {
440
+ id: '650e8400-e29b-41d4-a716-446655440001',
441
+ conversationId,
442
+ role: 'user',
443
+ content: 'How do I create my first workflow in n8n?',
444
+ createdAt: new Date('2025-01-08T10:00:00Z').toISOString(),
445
+ },
446
+ {
447
+ id: '650e8400-e29b-41d4-a716-446655440002',
448
+ conversationId,
449
+ role: 'assistant',
450
+ content: "To create your first workflow in n8n:\n\n1. Click the '+' button in the top left\n2. Select 'Create New Workflow'\n3. Add nodes by clicking the '+' on the canvas\n4. Configure each node\n5. Connect nodes by dragging from one to another\n6. Test and activate your workflow\n\nWould you like help with a specific type of workflow?",
451
+ createdAt: new Date('2025-01-08T10:00:30Z').toISOString(),
452
+ },
453
+ {
454
+ id: '650e8400-e29b-41d4-a716-446655440003',
455
+ conversationId,
456
+ role: 'user',
457
+ content: 'Yes, I want to automate sending emails when a new row is added to a Google Sheet.',
458
+ createdAt: new Date('2025-01-08T10:05:00Z').toISOString(),
459
+ },
460
+ {
461
+ id: '650e8400-e29b-41d4-a716-446655440004',
462
+ conversationId,
463
+ role: 'assistant',
464
+ content: "Perfect! Here's how to set that up:\n\n1. Add a **Google Sheets Trigger** node\n - Select 'On Row Added'\n - Connect your Google account\n - Choose your spreadsheet\n\n2. Add a **Gmail** node\n - Connect your Gmail account\n - Set the recipient email\n - Use expressions to include data from the sheet\n\n3. Activate the workflow\n\nWould you like more details on any of these steps?",
465
+ createdAt: new Date('2025-01-08T10:05:45Z').toISOString(),
466
+ },
467
+ ],
468
+ '3a8f5c2d-1e9b-4d7a-8c3e-6f2a9b4d8e1c': [
469
+ {
470
+ id: '650e8400-e29b-41d4-a716-446655440011',
471
+ conversationId,
472
+ role: 'user',
473
+ content: 'What are some creative workflow automation ideas?',
474
+ createdAt: new Date('2025-01-07T14:30:00Z').toISOString(),
475
+ },
476
+ {
477
+ id: '650e8400-e29b-41d4-a716-446655440012',
478
+ conversationId,
479
+ role: 'assistant',
480
+ content: 'Here are some creative workflow automation ideas:\n\n**Social Media Automation:**\n- Auto-post blog content to multiple platforms\n- Monitor mentions and send notifications\n- Generate reports on engagement metrics\n\n**Business Operations:**\n- Sync data between CRM and accounting software\n- Auto-generate invoices from project completion\n- Send weekly team reports\n\n**Personal Productivity:**\n- Save email attachments to cloud storage\n- Create calendar events from emails\n- Track expenses from receipts\n\nWhich area interests you most?',
481
+ createdAt: new Date('2025-01-07T14:32:00Z').toISOString(),
482
+ },
483
+ {
484
+ id: '650e8400-e29b-41d4-a716-446655440013',
485
+ conversationId,
486
+ role: 'user',
487
+ content: 'The social media automation sounds great! How complex is it to set up?',
488
+ createdAt: new Date('2025-01-07T14:45:00Z').toISOString(),
489
+ },
490
+ {
491
+ id: '650e8400-e29b-41d4-a716-446655440014',
492
+ conversationId,
493
+ role: 'assistant',
494
+ content: "It's actually quite straightforward! For auto-posting to multiple platforms:\n\n**Difficulty: Beginner-friendly**\n\n1. Use an **RSS** trigger to monitor your blog\n2. Add **Twitter**, **LinkedIn**, and **Facebook** nodes\n3. Format your message with expressions\n4. Add conditions to customize per platform\n\nMost of the work is just connecting your accounts. The actual workflow can be set up in under 30 minutes!\n\nWant me to walk you through the specific nodes you'll need?",
495
+ createdAt: new Date('2025-01-07T14:47:00Z').toISOString(),
496
+ },
497
+ ],
498
+ '9b2e4f6a-7d1c-4a8b-9e3f-5c7d2a8b4e6f': [
499
+ {
500
+ id: '650e8400-e29b-41d4-a716-446655440021',
501
+ conversationId,
502
+ role: 'user',
503
+ content: "I'm having trouble integrating with the Stripe API. Any tips?",
504
+ createdAt: new Date('2025-01-06T09:00:00Z').toISOString(),
505
+ },
506
+ {
507
+ id: '650e8400-e29b-41d4-a716-446655440022',
508
+ conversationId,
509
+ role: 'assistant',
510
+ content: "I'd be happy to help with Stripe integration! What specific issue are you encountering?\n\n**Common Stripe integration patterns in n8n:**\n\n1. **Webhook-based** (Recommended)\n - Stripe sends events to n8n\n - Great for payment notifications\n - Real-time updates\n\n2. **Polling-based**\n - Check for new data periodically\n - Good for reports and syncing\n\n3. **Manual trigger**\n - Run on-demand operations\n - Create customers, charges, etc.\n\nWhat's your use case?",
511
+ createdAt: new Date('2025-01-06T09:02:00Z').toISOString(),
512
+ },
513
+ {
514
+ id: '650e8400-e29b-41d4-a716-446655440023',
515
+ conversationId,
516
+ role: 'user',
517
+ content: 'I want to receive notifications when a payment succeeds and create an invoice in my accounting software.',
518
+ createdAt: new Date('2025-01-06T09:15:00Z').toISOString(),
519
+ },
520
+ {
521
+ id: '650e8400-e29b-41d4-a716-446655440024',
522
+ conversationId,
523
+ role: 'assistant',
524
+ content: "Perfect use case for webhooks! Here's the setup:\n\n**Step 1: n8n Webhook**\n- Add a Webhook node\n- Set method to POST\n- Copy the webhook URL\n\n**Step 2: Stripe Dashboard**\n- Go to Developers → Webhooks\n- Add endpoint with your n8n URL\n- Select `payment_intent.succeeded` event\n\n**Step 3: Process Payment Data**\n- Add a **Function** node to extract payment details\n- Parse customer, amount, currency\n\n**Step 4: Create Invoice**\n- Add your accounting software node (QuickBooks, Xero, etc.)\n- Map payment data to invoice fields\n\n**Step 5: Send Notification**\n- Add Email/Slack node for confirmation\n\nWant the specific code for the Function node?",
525
+ createdAt: new Date('2025-01-06T09:18:00Z').toISOString(),
526
+ },
527
+ ],
528
+ };
529
+ const messages = mockConversations[conversationId];
530
+ if (messages) {
531
+ return messages;
532
+ }
533
+ throw new not_found_error_1.NotFoundError(`Conversation not found. ID: ${conversationId}`);
534
+ }
535
+ };
536
+ exports.ChatHubService = ChatHubService;
537
+ exports.ChatHubService = ChatHubService = __decorate([
538
+ (0, di_1.Service)(),
539
+ __metadata("design:paramtypes", [backend_common_1.Logger,
540
+ credentials_service_1.CredentialsService,
541
+ credentials_helper_1.CredentialsHelper,
542
+ db_1.ExecutionRepository,
543
+ workflow_execution_service_1.WorkflowExecutionService,
544
+ db_1.WorkflowRepository,
545
+ db_1.ProjectRepository,
546
+ db_1.SharedWorkflowRepository,
547
+ active_executions_1.ActiveExecutions])
548
+ ], ChatHubService);
549
+ //# sourceMappingURL=chat-hub.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-hub.service.js","sourceRoot":"","sources":["../../../src/modules/chat-hub/chat-hub.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ModuleRegistry, Logger } from '@n8n/backend-common';
2
+ import { type AuthenticatedRequest } from '@n8n/db';
3
+ import { ChatHubSettingsService } from './chat-hub.settings.service';
4
+ import { UpdateChatSettingsDto } from './dto/update-chat-settings.dto';
5
+ export declare class ChatHubSettingsController {
6
+ private readonly settings;
7
+ private readonly logger;
8
+ private readonly moduleRegistry;
9
+ constructor(settings: ChatHubSettingsService, logger: Logger, moduleRegistry: ModuleRegistry);
10
+ getSettings(): Promise<{
11
+ chatAccessEnabled: boolean;
12
+ }>;
13
+ updateSettings(_req: AuthenticatedRequest, _res: Response, dto: UpdateChatSettingsDto): Promise<{
14
+ chatAccessEnabled: boolean;
15
+ }>;
16
+ }
@@ -0,0 +1,66 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ChatHubSettingsController = void 0;
16
+ const backend_common_1 = require("@n8n/backend-common");
17
+ const decorators_1 = require("@n8n/decorators");
18
+ const chat_hub_settings_service_1 = require("./chat-hub.settings.service");
19
+ const update_chat_settings_dto_1 = require("./dto/update-chat-settings.dto");
20
+ let ChatHubSettingsController = class ChatHubSettingsController {
21
+ constructor(settings, logger, moduleRegistry) {
22
+ this.settings = settings;
23
+ this.logger = logger;
24
+ this.moduleRegistry = moduleRegistry;
25
+ }
26
+ async getSettings() {
27
+ const chatAccessEnabled = await this.settings.getEnabled();
28
+ return { chatAccessEnabled };
29
+ }
30
+ async updateSettings(_req, _res, dto) {
31
+ const enabled = dto.chatAccessEnabled;
32
+ await this.settings.setEnabled(enabled);
33
+ try {
34
+ await this.moduleRegistry.refreshModuleSettings('chat-hub');
35
+ }
36
+ catch (error) {
37
+ this.logger.warn('Failed to sync chat settings to module registry', {
38
+ cause: error instanceof Error ? error.message : String(error),
39
+ });
40
+ }
41
+ return { chatAccessEnabled: enabled };
42
+ }
43
+ };
44
+ exports.ChatHubSettingsController = ChatHubSettingsController;
45
+ __decorate([
46
+ (0, decorators_1.Get)('/settings'),
47
+ __metadata("design:type", Function),
48
+ __metadata("design:paramtypes", []),
49
+ __metadata("design:returntype", Promise)
50
+ ], ChatHubSettingsController.prototype, "getSettings", null);
51
+ __decorate([
52
+ (0, decorators_1.Patch)('/settings'),
53
+ (0, decorators_1.GlobalScope)('chatHub:manage'),
54
+ __param(2, decorators_1.Body),
55
+ __metadata("design:type", Function),
56
+ __metadata("design:paramtypes", [Object, Response,
57
+ update_chat_settings_dto_1.UpdateChatSettingsDto]),
58
+ __metadata("design:returntype", Promise)
59
+ ], ChatHubSettingsController.prototype, "updateSettings", null);
60
+ exports.ChatHubSettingsController = ChatHubSettingsController = __decorate([
61
+ (0, decorators_1.RestController)('/chat'),
62
+ __metadata("design:paramtypes", [chat_hub_settings_service_1.ChatHubSettingsService,
63
+ backend_common_1.Logger,
64
+ backend_common_1.ModuleRegistry])
65
+ ], ChatHubSettingsController);
66
+ //# sourceMappingURL=chat-hub.settings.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-hub.settings.controller.js","sourceRoot":"","sources":["../../../src/modules/chat-hub/chat-hub.settings.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAA6D;AAE7D,gDAAgF;AAEhF,2EAAqE;AACrE,6EAAuE;AAGhE,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACrC,YACkB,QAAgC,EAChC,MAAc,EACd,cAA8B;QAF9B,aAAQ,GAAR,QAAQ,CAAwB;QAChC,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAgB;IAC7C,CAAC;IAGE,AAAN,KAAK,CAAC,WAAW;QAChB,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC3D,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC9B,CAAC;IAIK,AAAN,KAAK,CAAC,cAAc,CACnB,IAA0B,EAC1B,IAAc,EACR,GAA0B;QAEhC,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC;QACtC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE;gBACnE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;CACD,CAAA;AA/BY,8DAAyB;AAQ/B;IADL,IAAA,gBAAG,EAAC,WAAW,CAAC;;;;4DAIhB;AAIK;IAFL,IAAA,kBAAK,EAAC,WAAW,CAAC;IAClB,IAAA,wBAAW,EAAC,gBAAgB,CAAC;IAI5B,WAAA,iBAAI,CAAA;;6CADC,QAAQ;QACH,gDAAqB;;+DAYhC;oCA9BW,yBAAyB;IADrC,IAAA,2BAAc,EAAC,OAAO,CAAC;qCAGK,kDAAsB;QACxB,uBAAM;QACE,+BAAc;GAJpC,yBAAyB,CA+BrC"}