n8n 1.110.1 → 1.112.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 (148) hide show
  1. package/dist/auth/auth.service.js +2 -0
  2. package/dist/auth/auth.service.js.map +1 -1
  3. package/dist/build.tsbuildinfo +1 -1
  4. package/dist/commands/start.d.ts +1 -0
  5. package/dist/commands/start.js +17 -0
  6. package/dist/commands/start.js.map +1 -1
  7. package/dist/constants.d.ts +2 -0
  8. package/dist/constants.js +3 -1
  9. package/dist/constants.js.map +1 -1
  10. package/dist/controllers/dynamic-node-parameters.controller.js +6 -16
  11. package/dist/controllers/dynamic-node-parameters.controller.js.map +1 -1
  12. package/dist/controllers/e2e.controller.js +1 -0
  13. package/dist/controllers/e2e.controller.js.map +1 -1
  14. package/dist/controllers/folder.controller.d.ts +7 -2
  15. package/dist/controllers/folder.controller.js +24 -3
  16. package/dist/controllers/folder.controller.js.map +1 -1
  17. package/dist/controllers/role.controller.d.ts +5 -4
  18. package/dist/controllers/role.controller.js +21 -15
  19. package/dist/controllers/role.controller.js.map +1 -1
  20. package/dist/environments.ee/source-control/source-control.service.ee.js +2 -5
  21. package/dist/environments.ee/source-control/source-control.service.ee.js.map +1 -1
  22. package/dist/events/maps/relay.event-map.d.ts +4 -0
  23. package/dist/execution-lifecycle/execution-lifecycle-hooks.js +8 -1
  24. package/dist/execution-lifecycle/execution-lifecycle-hooks.js.map +1 -1
  25. package/dist/executions/execution-recovery.service.js +2 -1
  26. package/dist/executions/execution-recovery.service.js.map +1 -1
  27. package/dist/executions/execution.service.d.ts +2 -2
  28. package/dist/executions/execution.service.js +14 -1
  29. package/dist/executions/execution.service.js.map +1 -1
  30. package/dist/executions/execution.types.d.ts +2 -5
  31. package/dist/executions/executions.controller.d.ts +2 -2
  32. package/dist/middlewares/list-query/dtos/workflow.filter.dto.d.ts +1 -0
  33. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js +6 -0
  34. package/dist/middlewares/list-query/dtos/workflow.filter.dto.js.map +1 -1
  35. package/dist/modules/community-packages/npm-utils.js +10 -0
  36. package/dist/modules/community-packages/npm-utils.js.map +1 -1
  37. package/dist/modules/data-table/data-store-aggregate.controller.d.ts +7 -1
  38. package/dist/modules/data-table/data-store-aggregate.controller.js +15 -2
  39. package/dist/modules/data-table/data-store-aggregate.controller.js.map +1 -1
  40. package/dist/modules/data-table/data-store-column.repository.js +1 -1
  41. package/dist/modules/data-table/data-store-column.repository.js.map +1 -1
  42. package/dist/modules/data-table/data-store-proxy.service.d.ts +3 -3
  43. package/dist/modules/data-table/data-store-proxy.service.js +13 -13
  44. package/dist/modules/data-table/data-store-proxy.service.js.map +1 -1
  45. package/dist/modules/data-table/data-store-rows.repository.d.ts +13 -20
  46. package/dist/modules/data-table/data-store-rows.repository.js +144 -125
  47. package/dist/modules/data-table/data-store-rows.repository.js.map +1 -1
  48. package/dist/modules/data-table/data-store-size-validator.service.d.ts +16 -0
  49. package/dist/modules/data-table/data-store-size-validator.service.js +79 -0
  50. package/dist/modules/data-table/data-store-size-validator.service.js.map +1 -0
  51. package/dist/modules/data-table/data-store.controller.d.ts +9 -9
  52. package/dist/modules/data-table/data-store.controller.js +16 -14
  53. package/dist/modules/data-table/data-store.controller.js.map +1 -1
  54. package/dist/modules/data-table/data-store.repository.d.ts +4 -1
  55. package/dist/modules/data-table/data-store.repository.js +47 -5
  56. package/dist/modules/data-table/data-store.repository.js.map +1 -1
  57. package/dist/modules/data-table/data-store.service.d.ts +19 -11
  58. package/dist/modules/data-table/data-store.service.js +102 -73
  59. package/dist/modules/data-table/data-store.service.js.map +1 -1
  60. package/dist/modules/data-table/data-store.types.d.ts +2 -0
  61. package/dist/modules/data-table/data-store.types.js +7 -0
  62. package/dist/modules/data-table/data-store.types.js.map +1 -1
  63. package/dist/modules/data-table/data-table.module.js +1 -1
  64. package/dist/modules/data-table/utils/sql-utils.d.ts +2 -5
  65. package/dist/modules/data-table/utils/sql-utils.js +7 -17
  66. package/dist/modules/data-table/utils/sql-utils.js.map +1 -1
  67. package/dist/public-api/types.d.ts +5 -0
  68. package/dist/public-api/v1/handlers/executions/executions.handler.d.ts +1 -0
  69. package/dist/public-api/v1/handlers/executions/executions.handler.js +34 -1
  70. package/dist/public-api/v1/handlers/executions/executions.handler.js.map +1 -1
  71. package/dist/public-api/v1/openapi.yml +60 -7
  72. package/dist/push/abstract.push.d.ts +2 -2
  73. package/dist/push/abstract.push.js +4 -4
  74. package/dist/push/abstract.push.js.map +1 -1
  75. package/dist/push/index.d.ts +3 -2
  76. package/dist/push/index.js +30 -26
  77. package/dist/push/index.js.map +1 -1
  78. package/dist/push/origin-validator.d.ts +13 -0
  79. package/dist/push/origin-validator.js +145 -0
  80. package/dist/push/origin-validator.js.map +1 -0
  81. package/dist/push/websocket.push.d.ts +1 -1
  82. package/dist/push/websocket.push.js +2 -2
  83. package/dist/push/websocket.push.js.map +1 -1
  84. package/dist/scaling/constants.d.ts +2 -2
  85. package/dist/scaling/pubsub/pubsub.event-map.d.ts +2 -0
  86. package/dist/scaling/pubsub/pubsub.registry.d.ts +1 -0
  87. package/dist/scaling/pubsub/pubsub.registry.js +9 -2
  88. package/dist/scaling/pubsub/pubsub.registry.js.map +1 -1
  89. package/dist/scaling/pubsub/pubsub.types.d.ts +2 -1
  90. package/dist/scaling/scaling.service.d.ts +1 -1
  91. package/dist/scaling/scaling.service.js +0 -4
  92. package/dist/scaling/scaling.service.js.map +1 -1
  93. package/dist/server.js +22 -23
  94. package/dist/server.js.map +1 -1
  95. package/dist/services/dynamic-node-parameters.service.d.ts +7 -1
  96. package/dist/services/dynamic-node-parameters.service.js +15 -2
  97. package/dist/services/dynamic-node-parameters.service.js.map +1 -1
  98. package/dist/services/frontend.service.js +5 -0
  99. package/dist/services/frontend.service.js.map +1 -1
  100. package/dist/services/ownership.service.d.ts +1 -0
  101. package/dist/services/ownership.service.js +6 -0
  102. package/dist/services/ownership.service.js.map +1 -1
  103. package/dist/services/public-api-key.service.js +2 -0
  104. package/dist/services/public-api-key.service.js.map +1 -1
  105. package/dist/services/role.service.d.ts +2 -2
  106. package/dist/services/role.service.js +3 -3
  107. package/dist/services/role.service.js.map +1 -1
  108. package/dist/sso.ee/oidc/oidc.service.ee.d.ts +25 -4
  109. package/dist/sso.ee/oidc/oidc.service.ee.js +167 -22
  110. package/dist/sso.ee/oidc/oidc.service.ee.js.map +1 -1
  111. package/dist/sso.ee/oidc/routes/oidc.controller.ee.d.ts +6 -2
  112. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js +41 -7
  113. package/dist/sso.ee/oidc/routes/oidc.controller.ee.js.map +1 -1
  114. package/dist/sso.ee/sso-helpers.d.ts +1 -0
  115. package/dist/sso.ee/sso-helpers.js +19 -0
  116. package/dist/sso.ee/sso-helpers.js.map +1 -1
  117. package/dist/task-runners/errors/missing-requirements.error.d.ts +6 -0
  118. package/dist/task-runners/errors/missing-requirements.error.js +17 -0
  119. package/dist/task-runners/errors/missing-requirements.error.js.map +1 -0
  120. package/dist/task-runners/internal-task-runner-disconnect-analyzer.d.ts +2 -2
  121. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js +2 -2
  122. package/dist/task-runners/internal-task-runner-disconnect-analyzer.js.map +1 -1
  123. package/dist/task-runners/task-runner-module.d.ts +5 -3
  124. package/dist/task-runners/task-runner-module.js +25 -13
  125. package/dist/task-runners/task-runner-module.js.map +1 -1
  126. package/dist/task-runners/task-runner-process-base.d.ts +39 -0
  127. package/dist/task-runners/task-runner-process-base.js +111 -0
  128. package/dist/task-runners/task-runner-process-base.js.map +1 -0
  129. package/dist/task-runners/task-runner-process-js.d.ts +21 -0
  130. package/dist/task-runners/{task-runner-process.js → task-runner-process-js.js} +35 -108
  131. package/dist/task-runners/task-runner-process-js.js.map +1 -0
  132. package/dist/task-runners/task-runner-process-py.d.ts +15 -0
  133. package/dist/task-runners/task-runner-process-py.js +76 -0
  134. package/dist/task-runners/task-runner-process-py.js.map +1 -0
  135. package/dist/task-runners/task-runner-process-restart-loop-detector.d.ts +2 -2
  136. package/dist/task-runners/task-runner-process-restart-loop-detector.js.map +1 -1
  137. package/dist/user-management/email/templates/credentials-shared.handlebars +48 -40
  138. package/dist/user-management/email/templates/n8n-logo.png +0 -0
  139. package/dist/user-management/email/templates/password-reset-requested.handlebars +68 -60
  140. package/dist/user-management/email/templates/project-shared.handlebars +43 -35
  141. package/dist/user-management/email/templates/user-invited.handlebars +48 -40
  142. package/dist/user-management/email/templates/workflow-shared.handlebars +48 -40
  143. package/dist/workflows/workflow.request.d.ts +1 -0
  144. package/dist/workflows/workflow.service.ee.js +1 -0
  145. package/dist/workflows/workflow.service.ee.js.map +1 -1
  146. package/package.json +24 -18
  147. package/dist/task-runners/task-runner-process.d.ts +0 -36
  148. package/dist/task-runners/task-runner-process.js.map +0 -1
@@ -198,7 +198,9 @@ paths:
198
198
  schema:
199
199
  type: string
200
200
  enum:
201
+ - canceled
201
202
  - error
203
+ - running
202
204
  - success
203
205
  - waiting
204
206
  - name: workflowId
@@ -271,6 +273,39 @@ paths:
271
273
  $ref: '#/components/responses/unauthorized'
272
274
  '404':
273
275
  $ref: '#/components/responses/notFound'
276
+ /executions/{id}/retry:
277
+ post:
278
+ x-eov-operation-id: retryExecution
279
+ x-eov-operation-handler: v1/handlers/executions/executions.handler
280
+ tags:
281
+ - Execution
282
+ summary: Retry an execution
283
+ description: Retry an execution from your instance.
284
+ parameters:
285
+ - $ref: '#/components/parameters/executionId'
286
+ requestBody:
287
+ required: false
288
+ content:
289
+ application/json:
290
+ schema:
291
+ type: object
292
+ properties:
293
+ loadWorkflow:
294
+ type: boolean
295
+ description: Whether to load the currently saved workflow to execute instead of the one saved at the time of the execution. If set to true, it will retry with the latest version of the workflow.
296
+ responses:
297
+ '200':
298
+ description: Operation successful.
299
+ content:
300
+ application/json:
301
+ schema:
302
+ $ref: '#/components/schemas/execution'
303
+ '401':
304
+ $ref: '#/components/responses/unauthorized'
305
+ '404':
306
+ $ref: '#/components/responses/notFound'
307
+ '409':
308
+ $ref: '#/components/responses/conflict'
274
309
  /tags:
275
310
  post:
276
311
  x-eov-operation-id: createTag
@@ -948,6 +983,8 @@ paths:
948
983
  - Variables
949
984
  summary: Update a variable
950
985
  description: Update a variable from your instance.
986
+ parameters:
987
+ - $ref: '#/components/parameters/variableId'
951
988
  requestBody:
952
989
  description: Payload for variable to update.
953
990
  content:
@@ -1356,6 +1393,8 @@ components:
1356
1393
  stoppedAt:
1357
1394
  type: string
1358
1395
  format: date-time
1396
+ nullable: true
1397
+ description: The time at which the execution stopped. Will only be null for executions that still have the status 'running'.
1359
1398
  workflowId:
1360
1399
  type: number
1361
1400
  example: '1000'
@@ -1365,6 +1404,17 @@ components:
1365
1404
  format: date-time
1366
1405
  customData:
1367
1406
  type: object
1407
+ status:
1408
+ type: string
1409
+ enum:
1410
+ - canceled
1411
+ - crashed
1412
+ - error
1413
+ - new
1414
+ - running
1415
+ - success
1416
+ - unknown
1417
+ - waiting
1368
1418
  executionList:
1369
1419
  type: object
1370
1420
  properties:
@@ -1430,7 +1480,7 @@ components:
1430
1480
  type: string
1431
1481
  type:
1432
1482
  type: string
1433
- example: n8n-nodes-base.Jira
1483
+ example: n8n-nodes-base.jira
1434
1484
  typeVersion:
1435
1485
  type: number
1436
1486
  example: 1
@@ -1578,10 +1628,11 @@ components:
1578
1628
  connections:
1579
1629
  type: object
1580
1630
  example:
1581
- main:
1582
- - node: Jira
1583
- type: main
1584
- index: 0
1631
+ Jira:
1632
+ main:
1633
+ - - node: Jira
1634
+ type: main
1635
+ index: 0
1585
1636
  settings:
1586
1637
  $ref: '#/components/schemas/workflowSettings'
1587
1638
  staticData:
@@ -1899,10 +1950,10 @@ components:
1899
1950
  description: Unauthorized
1900
1951
  notFound:
1901
1952
  description: The specified resource was not found.
1902
- badRequest:
1903
- description: The request is invalid or provides malformed data.
1904
1953
  conflict:
1905
1954
  description: Conflict
1955
+ badRequest:
1956
+ description: The request is invalid or provides malformed data.
1906
1957
  forbidden:
1907
1958
  description: Forbidden
1908
1959
  NotFound:
@@ -2009,6 +2060,8 @@ components:
2009
2060
  $ref: '#/components/parameters/userIdentifier'
2010
2061
  IncludeRole:
2011
2062
  $ref: '#/components/parameters/includeRole'
2063
+ VariableId:
2064
+ $ref: '#/components/parameters/variableId'
2012
2065
  securitySchemes:
2013
2066
  ApiKeyAuth:
2014
2067
  type: apiKey
@@ -13,7 +13,7 @@ export declare abstract class AbstractPush<Connection> extends TypedEmitter<Abst
13
13
  protected connections: Record<string, Connection>;
14
14
  protected userIdByPushRef: Record<string, string>;
15
15
  protected abstract close(connection: Connection): void;
16
- protected abstract sendToOneConnection(connection: Connection, data: string): void;
16
+ protected abstract sendToOneConnection(connection: Connection, data: string, isBinary: boolean): void;
17
17
  protected abstract ping(connection: Connection): void;
18
18
  constructor(logger: Logger, errorReporter: ErrorReporter);
19
19
  protected add(pushRef: string, userId: User['id'], connection: Connection): void;
@@ -22,7 +22,7 @@ export declare abstract class AbstractPush<Connection> extends TypedEmitter<Abst
22
22
  private sendTo;
23
23
  private pingAll;
24
24
  sendToAll(pushMsg: PushMessage): void;
25
- sendToOne(pushMsg: PushMessage, pushRef: string): void;
25
+ sendToOne(pushMsg: PushMessage, pushRef: string, asBinary?: boolean): void;
26
26
  sendToUsers(pushMsg: PushMessage, userIds: Array<User['id']>): void;
27
27
  closeAllConnections(): void;
28
28
  hasPushRef(pushRef: string): boolean;
@@ -46,7 +46,7 @@ let AbstractPush = class AbstractPush extends typed_emitter_1.TypedEmitter {
46
46
  delete this.connections[pushRef];
47
47
  delete this.userIdByPushRef[pushRef];
48
48
  }
49
- sendTo({ type, data }, pushRefs) {
49
+ sendTo({ type, data }, pushRefs, asBinary = false) {
50
50
  this.logger.debug(`Pushed to frontend: ${type}`, {
51
51
  dataType: type,
52
52
  pushRefs: pushRefs.join(', '),
@@ -55,7 +55,7 @@ let AbstractPush = class AbstractPush extends typed_emitter_1.TypedEmitter {
55
55
  for (const pushRef of pushRefs) {
56
56
  const connection = this.connections[pushRef];
57
57
  (0, n8n_workflow_1.assert)(connection);
58
- this.sendToOneConnection(connection, stringifiedPayload);
58
+ this.sendToOneConnection(connection, stringifiedPayload, asBinary);
59
59
  }
60
60
  }
61
61
  pingAll() {
@@ -66,12 +66,12 @@ let AbstractPush = class AbstractPush extends typed_emitter_1.TypedEmitter {
66
66
  sendToAll(pushMsg) {
67
67
  this.sendTo(pushMsg, Object.keys(this.connections));
68
68
  }
69
- sendToOne(pushMsg, pushRef) {
69
+ sendToOne(pushMsg, pushRef, asBinary = false) {
70
70
  if (this.connections[pushRef] === undefined) {
71
71
  this.logger.debug(`The session "${pushRef}" is not registered.`, { pushRef });
72
72
  return;
73
73
  }
74
- this.sendTo(pushMsg, [pushRef]);
74
+ this.sendTo(pushMsg, [pushRef], asBinary);
75
75
  }
76
76
  sendToUsers(pushMsg, userIds) {
77
77
  const { connections } = this;
@@ -1 +1 @@
1
- {"version":3,"file":"abstract.push.js","sourceRoot":"","sources":["../../src/push/abstract.push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"abstract.push.js","sourceRoot":"","sources":["../../src/push/abstract.push.ts"],"names":[],"mappings":"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"}
@@ -31,11 +31,12 @@ export declare class Push extends TypedEmitter<PushEvents> {
31
31
  handleRequest(req: SSEPushRequest | WebSocketPushRequest, res: PushResponse): void;
32
32
  broadcast(pushMsg: PushMessage): void;
33
33
  hasPushRef(pushRef: string): boolean;
34
- send(pushMsg: PushMessage, pushRef: string): void;
34
+ send(pushMsg: PushMessage, pushRef: string, asBinary?: boolean): void;
35
35
  sendToUsers(pushMsg: PushMessage, userIds: Array<User['id']>): void;
36
36
  onShutdown(): void;
37
37
  private shouldRelayViaPubSub;
38
- handleRelayExecutionLifecycleEvent({ pushRef, ...pushMsg }: PushMessage & {
38
+ handleRelayExecutionLifecycleEvent({ pushRef, asBinary, ...pushMsg }: PushMessage & {
39
+ asBinary: boolean;
39
40
  pushRef: string;
40
41
  }): void;
41
42
  private relayViaPubSub;
@@ -23,10 +23,10 @@ const n8n_workflow_1 = require("n8n-workflow");
23
23
  const url_1 = require("url");
24
24
  const ws_1 = require("ws");
25
25
  const auth_service_1 = require("../auth/auth.service");
26
- const constants_1 = require("../constants");
27
26
  const bad_request_error_1 = require("../errors/response-errors/bad-request.error");
28
27
  const publisher_service_1 = require("../scaling/pubsub/publisher.service");
29
28
  const typed_emitter_1 = require("../typed-emitter");
29
+ const origin_validator_1 = require("./origin-validator");
30
30
  const push_config_1 = require("./push.config");
31
31
  const sse_push_1 = require("./sse.push");
32
32
  const websocket_push_1 = require("./websocket.push");
@@ -74,20 +74,24 @@ let Push = class Push extends typed_emitter_1.TypedEmitter {
74
74
  handleRequest(req, res) {
75
75
  const { ws, query: { pushRef }, user, headers, } = req;
76
76
  let connectionError = '';
77
- const originHost = headers.origin?.replace(/^https?:\/\//, '');
78
77
  if (!pushRef) {
79
78
  connectionError = 'The query parameter "pushRef" is missing!';
80
79
  }
81
- else if (!originHost) {
82
- this.logger.warn('Origin header is missing');
83
- connectionError = 'Invalid origin!';
84
- }
85
80
  else if (backend_common_1.inProduction) {
86
- const expectedHost = typeof headers['x-forwarded-host'] === 'string'
87
- ? headers['x-forwarded-host']
88
- : headers.host;
89
- if (expectedHost !== originHost) {
90
- this.logger.warn(`Origin header does NOT match the expected origin. (Origin: "${originHost}", Expected: "${expectedHost}")`, { headers: (0, pick_1.default)(headers, ['host', 'origin', 'x-forwarded-proto', 'x-forwarded-host']) });
81
+ const validation = (0, origin_validator_1.validateOriginHeaders)(headers);
82
+ if (!validation.isValid) {
83
+ this.logger.warn('Origin header does NOT match the expected origin. ' +
84
+ `(Origin: "${headers.origin}" -> "${validation.originInfo?.host || 'N/A'}", ` +
85
+ `Expected: "${validation.rawExpectedHost}" -> "${validation.expectedHost}", ` +
86
+ `Protocol: "${validation.expectedProtocol}")`, {
87
+ headers: (0, pick_1.default)(headers, [
88
+ 'host',
89
+ 'origin',
90
+ 'x-forwarded-proto',
91
+ 'x-forwarded-host',
92
+ 'forwarded',
93
+ ]),
94
+ });
91
95
  connectionError = 'Invalid origin!';
92
96
  }
93
97
  }
@@ -117,12 +121,12 @@ let Push = class Push extends typed_emitter_1.TypedEmitter {
117
121
  hasPushRef(pushRef) {
118
122
  return this.backend.hasPushRef(pushRef);
119
123
  }
120
- send(pushMsg, pushRef) {
124
+ send(pushMsg, pushRef, asBinary = false) {
121
125
  if (this.shouldRelayViaPubSub(pushRef)) {
122
- this.relayViaPubSub(pushMsg, pushRef);
126
+ this.relayViaPubSub(pushMsg, pushRef, asBinary);
123
127
  return;
124
128
  }
125
- this.backend.sendToOne(pushMsg, pushRef);
129
+ this.backend.sendToOne(pushMsg, pushRef, asBinary);
126
130
  }
127
131
  sendToUsers(pushMsg, userIds) {
128
132
  this.backend.sendToUsers(pushMsg, userIds);
@@ -134,36 +138,36 @@ let Push = class Push extends typed_emitter_1.TypedEmitter {
134
138
  const { isWorker, isMultiMain } = this.instanceSettings;
135
139
  return isWorker || (isMultiMain && !this.hasPushRef(pushRef));
136
140
  }
137
- handleRelayExecutionLifecycleEvent({ pushRef, ...pushMsg }) {
141
+ handleRelayExecutionLifecycleEvent({ pushRef, asBinary, ...pushMsg }) {
138
142
  if (!this.hasPushRef(pushRef))
139
143
  return;
140
- this.send(pushMsg, pushRef);
144
+ this.send(pushMsg, pushRef, asBinary);
141
145
  }
142
- relayViaPubSub(pushMsg, pushRef) {
146
+ relayViaPubSub(pushMsg, pushRef, asBinary = false) {
143
147
  const eventSizeBytes = new TextEncoder().encode(JSON.stringify(pushMsg.data)).length;
144
148
  if (eventSizeBytes <= MAX_PAYLOAD_SIZE_BYTES) {
145
149
  void this.publisher.publishCommand({
146
150
  command: 'relay-execution-lifecycle-event',
147
- payload: { ...pushMsg, pushRef },
151
+ payload: { ...pushMsg, pushRef, asBinary },
148
152
  });
149
153
  return;
150
154
  }
151
- const pushMsgCopy = (0, n8n_workflow_1.deepCopy)(pushMsg);
155
+ const { type } = pushMsg;
152
156
  const toMb = (bytes) => (bytes / (1024 * 1024)).toFixed(0);
153
157
  const eventMb = toMb(eventSizeBytes);
154
158
  const maxMb = toMb(MAX_PAYLOAD_SIZE_BYTES);
155
- const { type } = pushMsgCopy;
156
- this.logger.warn(`Size of "${type}" (${eventMb} MB) exceeds max size ${maxMb} MB. Trimming...`);
157
- if (type === 'nodeExecuteAfter') {
158
- pushMsgCopy.data.itemCount = pushMsgCopy.data.data.data?.main[0]?.length ?? 1;
159
- pushMsgCopy.data.data.data = constants_1.TRIMMED_TASK_DATA_CONNECTIONS;
159
+ if (type === 'nodeExecuteAfterData') {
160
+ this.logger.warn(`Size of "${type}" (${eventMb} MB) exceeds max size ${maxMb} MB. Skipping...`);
161
+ return;
160
162
  }
161
- else if (type === 'executionFinished') {
163
+ this.logger.warn(`Size of "${type}" (${eventMb} MB) exceeds max size ${maxMb} MB. Trimming...`);
164
+ const pushMsgCopy = (0, n8n_workflow_1.deepCopy)(pushMsg);
165
+ if (pushMsgCopy.type === 'executionFinished') {
162
166
  pushMsgCopy.data.rawData = '';
163
167
  }
164
168
  void this.publisher.publishCommand({
165
169
  command: 'relay-execution-lifecycle-event',
166
- payload: { ...pushMsgCopy, pushRef },
170
+ payload: { ...pushMsgCopy, pushRef, asBinary },
167
171
  });
168
172
  }
169
173
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/push/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/push/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Request } from 'express';
2
+ export interface OriginValidationResult {
3
+ isValid: boolean;
4
+ originInfo?: {
5
+ protocol: 'http' | 'https';
6
+ host: string;
7
+ };
8
+ expectedHost?: string;
9
+ expectedProtocol?: 'http' | 'https';
10
+ rawExpectedHost?: string;
11
+ error?: string;
12
+ }
13
+ export declare function validateOriginHeaders(headers: Request['headers']): OriginValidationResult;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateOriginHeaders = validateOriginHeaders;
4
+ function validateOriginHeaders(headers) {
5
+ const originInfo = parseOrigin(headers.origin ?? '');
6
+ if (!originInfo) {
7
+ return {
8
+ isValid: false,
9
+ error: 'Origin header is missing or malformed',
10
+ };
11
+ }
12
+ let rawExpectedHost;
13
+ let expectedProtocol = originInfo.protocol;
14
+ const forwarded = parseForwardedHeader(headers.forwarded ?? '');
15
+ if (forwarded?.host) {
16
+ rawExpectedHost = forwarded.host;
17
+ if (forwarded.proto) {
18
+ const validatedProto = validateProtocol(forwarded.proto);
19
+ if (validatedProto) {
20
+ expectedProtocol = validatedProto;
21
+ }
22
+ }
23
+ }
24
+ else {
25
+ const xForwardedHost = getFirstHeaderValue(headers['x-forwarded-host']);
26
+ if (xForwardedHost) {
27
+ rawExpectedHost = xForwardedHost;
28
+ const xForwardedProto = getFirstHeaderValue(headers['x-forwarded-proto']);
29
+ if (xForwardedProto) {
30
+ const validatedProto = validateProtocol(xForwardedProto.split(',')[0]?.trim());
31
+ if (validatedProto) {
32
+ expectedProtocol = validatedProto;
33
+ }
34
+ }
35
+ }
36
+ else {
37
+ rawExpectedHost = headers.host;
38
+ }
39
+ }
40
+ const normalizedExpectedHost = normalizeHost(rawExpectedHost ?? '', expectedProtocol);
41
+ const isValid = normalizedExpectedHost === originInfo.host;
42
+ return {
43
+ isValid,
44
+ originInfo,
45
+ expectedHost: normalizedExpectedHost,
46
+ expectedProtocol,
47
+ rawExpectedHost,
48
+ error: isValid ? undefined : 'Origin header does not match expected host',
49
+ };
50
+ }
51
+ function normalizeHost(host, protocol) {
52
+ if (!host)
53
+ return host;
54
+ try {
55
+ const url = new URL(`${protocol}://${host}`);
56
+ const defaultPort = protocol === 'https' ? '443' : '80';
57
+ const actualPort = url.port || defaultPort;
58
+ if (actualPort === defaultPort) {
59
+ return stripIPv6Brackets(url.hostname);
60
+ }
61
+ return stripIPv6Brackets(url.host);
62
+ }
63
+ catch {
64
+ return host;
65
+ }
66
+ }
67
+ function stripIPv6Brackets(hostname) {
68
+ if (hostname.startsWith('[') && hostname.includes(']:')) {
69
+ const closingBracket = hostname.indexOf(']:');
70
+ const ipv6 = hostname.slice(1, closingBracket);
71
+ const port = hostname.slice(closingBracket + 2);
72
+ return `${ipv6}:${port}`;
73
+ }
74
+ if (hostname.startsWith('[') && hostname.endsWith(']')) {
75
+ return hostname.slice(1, -1);
76
+ }
77
+ return hostname;
78
+ }
79
+ function getFirstHeaderValue(header) {
80
+ if (!header)
81
+ return undefined;
82
+ if (typeof header === 'string')
83
+ return header;
84
+ return header[0];
85
+ }
86
+ function validateProtocol(proto) {
87
+ if (!proto)
88
+ return undefined;
89
+ const normalized = proto.toLowerCase().trim();
90
+ return normalized === 'http' || normalized === 'https' ? normalized : undefined;
91
+ }
92
+ function parseForwardedHeader(forwardedHeader) {
93
+ if (!forwardedHeader || typeof forwardedHeader !== 'string') {
94
+ return null;
95
+ }
96
+ try {
97
+ const firstEntry = forwardedHeader.split(',')[0]?.trim();
98
+ if (!firstEntry)
99
+ return null;
100
+ const result = {};
101
+ const pairs = firstEntry.split(';');
102
+ for (const pair of pairs) {
103
+ const [key, value] = pair.split('=', 2);
104
+ if (!key || !value)
105
+ continue;
106
+ const cleanKey = key.trim().toLowerCase();
107
+ const cleanValue = value.trim().replace(/^["']|["']$/g, '');
108
+ if (cleanKey === 'host') {
109
+ result.host = cleanValue;
110
+ }
111
+ else if (cleanKey === 'proto') {
112
+ result.proto = cleanValue;
113
+ }
114
+ }
115
+ return result;
116
+ }
117
+ catch {
118
+ return null;
119
+ }
120
+ }
121
+ function parseOrigin(origin) {
122
+ if (!origin || typeof origin !== 'string') {
123
+ return null;
124
+ }
125
+ try {
126
+ const url = new URL(origin);
127
+ const protocol = url.protocol.toLowerCase();
128
+ if (protocol !== 'http:' && protocol !== 'https:') {
129
+ return null;
130
+ }
131
+ const protocolName = protocol === 'https:' ? 'https' : 'http';
132
+ const defaultPort = protocolName === 'https' ? '443' : '80';
133
+ const actualPort = url.port || defaultPort;
134
+ const rawHost = actualPort === defaultPort ? url.hostname : url.host;
135
+ const normalizedHost = stripIPv6Brackets(rawHost);
136
+ return {
137
+ protocol: protocolName,
138
+ host: normalizedHost,
139
+ };
140
+ }
141
+ catch {
142
+ return null;
143
+ }
144
+ }
145
+ //# sourceMappingURL=origin-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"origin-validator.js","sourceRoot":"","sources":["../../src/push/origin-validator.ts"],"names":[],"mappings":";;AAkBA,sDA0DC;AA1DD,SAAgB,qBAAqB,CAAC,OAA2B;IAEhE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,uCAAuC;SAC9C,CAAC;IACH,CAAC;IAGD,IAAI,eAAmC,CAAC;IACxC,IAAI,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC;IAG3C,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChE,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC;QACrB,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC;QACjC,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACrB,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,cAAc,EAAE,CAAC;gBACpB,gBAAgB,GAAG,cAAc,CAAC;YACnC,CAAC;QACF,CAAC;IACF,CAAC;SAEI,CAAC;QACL,MAAM,cAAc,GAAG,mBAAmB,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACxE,IAAI,cAAc,EAAE,CAAC;YACpB,eAAe,GAAG,cAAc,CAAC;YACjC,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC1E,IAAI,eAAe,EAAE,CAAC;gBACrB,MAAM,cAAc,GAAG,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC/E,IAAI,cAAc,EAAE,CAAC;oBACpB,gBAAgB,GAAG,cAAc,CAAC;gBACnC,CAAC;YACF,CAAC;QACF,CAAC;aAEI,CAAC;YACL,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;QAChC,CAAC;IACF,CAAC;IAGD,MAAM,sBAAsB,GAAG,aAAa,CAAC,eAAe,IAAI,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAEtF,MAAM,OAAO,GAAG,sBAAsB,KAAK,UAAU,CAAC,IAAI,CAAC;IAE3D,OAAO;QACN,OAAO;QACP,UAAU;QACV,YAAY,EAAE,sBAAsB;QACpC,gBAAgB;QAChB,eAAe;QACf,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,4CAA4C;KACzE,CAAC;AACH,CAAC;AAUD,SAAS,aAAa,CAAC,IAAY,EAAE,QAA0B;IAC9D,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,IAAI,CAAC;QAGJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC,CAAC;QAK7C,MAAM,WAAW,GAAG,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;QAG3C,IAAI,UAAU,KAAK,WAAW,EAAE,CAAC;YAChC,OAAO,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAGD,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QAER,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AASD,SAAS,iBAAiB,CAAC,QAAgB;IAE1C,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAQD,SAAS,mBAAmB,CAAC,MAAqC;IACjE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAQD,SAAS,gBAAgB,CAAC,KAAyB;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC;AAQD,SAAS,oBAAoB,CAAC,eAAuB;IACpD,IAAI,CAAC,eAAe,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QAEJ,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACzD,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,MAAM,GAAsC,EAAE,CAAC;QAGrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;gBAAE,SAAS;YAE7B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAE5D,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;YAC1B,CAAC;iBAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC;YAC3B,CAAC;QACF,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAQD,SAAS,WAAW,CAAC,MAAc;IAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5C,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,YAAY,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;QAG9D,MAAM,WAAW,GAAG,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC;QAE3C,MAAM,OAAO,GAAG,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;QACrE,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAElD,OAAO;YACN,QAAQ,EAAE,YAAY;YACtB,IAAI,EAAE,cAAc;SACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QAER,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}
@@ -4,7 +4,7 @@ import { AbstractPush } from './abstract.push';
4
4
  export declare class WebSocketPush extends AbstractPush<WebSocket> {
5
5
  add(pushRef: string, userId: User['id'], connection: WebSocket): void;
6
6
  protected close(connection: WebSocket): void;
7
- protected sendToOneConnection(connection: WebSocket, data: string): void;
7
+ protected sendToOneConnection(connection: WebSocket, data: string, asBinary: boolean): void;
8
8
  protected ping(connection: WebSocket): void;
9
9
  private isClientHeartbeat;
10
10
  }
@@ -57,8 +57,8 @@ let WebSocketPush = class WebSocketPush extends abstract_push_1.AbstractPush {
57
57
  close(connection) {
58
58
  connection.close();
59
59
  }
60
- sendToOneConnection(connection, data) {
61
- connection.send(data);
60
+ sendToOneConnection(connection, data, asBinary) {
61
+ connection.send(data, { binary: asBinary });
62
62
  }
63
63
  ping(connection) {
64
64
  if (!connection.isAlive) {
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.push.js","sourceRoot":"","sources":["../../src/push/websocket.push.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAAwD;AAExD,gCAAkC;AAClC,+CAA+C;AAG/C,mDAA+C;AAE/C,SAAS,SAAS;IACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,CAAC;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,4BAAuB;IACzD,GAAG,CAAC,OAAe,EAAE,MAAkB,EAAE,UAAqB;QAC7D,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEjC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAuB,EAAE,EAAE;YACnD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACjC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACrB,CAAC,CAAC,IAAI,YAAY,WAAW;wBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnB,CAAC,CAAC,IAAI,CAAC;gBAET,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAKzD,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,KAAK,CACvB,IAAI,8BAAe,CAAC,4BAA4B,EAAE;oBACjD,KAAK,EAAE;wBACN,MAAM;wBACN,IAAI;qBACJ;oBACD,KAAK,EAAE,KAAK;iBACZ,CAAC,CACF,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;oBAC1D,KAAK,EAAE,KAAgB;oBACvB,OAAO;oBACP,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;QAGF,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,UAAqB;QACpC,UAAU,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAES,mBAAmB,CAAC,UAAqB,EAAE,IAAY;QAChE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAES,IAAI,CAAC,UAAqB;QAEnC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC;QAC/B,CAAC;QACD,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAY;QAC3C,MAAM,MAAM,GAAG,MAAM,kCAAsB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC;CACD,CAAA;AA3EY,sCAAa;wBAAb,aAAa;IADzB,IAAA,YAAO,GAAE;GACG,aAAa,CA2EzB"}
1
+ {"version":3,"file":"websocket.push.js","sourceRoot":"","sources":["../../src/push/websocket.push.ts"],"names":[],"mappings":";;;;;;;;;AAAA,8CAAwD;AAExD,gCAAkC;AAClC,+CAA+C;AAG/C,mDAA+C;AAE/C,SAAS,SAAS;IACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACrB,CAAC;AAGM,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,4BAAuB;IACzD,GAAG,CAAC,OAAe,EAAE,MAAkB,EAAE,UAAqB;QAC7D,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAEjC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;QAEvC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAuB,EAAE,EAAE;YACnD,IAAI,CAAC;gBACJ,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;oBACjC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;oBACrB,CAAC,CAAC,IAAI,YAAY,WAAW;wBAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;wBACnB,CAAC,CAAC,IAAI,CAAC;gBAET,MAAM,GAAG,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;gBAKzD,IAAI,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvC,OAAO;gBACR,CAAC;gBAED,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACtC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,CAAC,aAAa,CAAC,KAAK,CACvB,IAAI,8BAAe,CAAC,4BAA4B,EAAE;oBACjD,KAAK,EAAE;wBACN,MAAM;wBACN,IAAI;qBACJ;oBACD,KAAK,EAAE,KAAK;iBACZ,CAAC,CACF,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE;oBAC1D,KAAK,EAAE,KAAgB;oBACvB,OAAO;oBACP,IAAI;iBACJ,CAAC,CAAC;YACJ,CAAC;QACF,CAAC,CAAC;QAGF,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YAClC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,UAAqB;QACpC,UAAU,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAES,mBAAmB,CAAC,UAAqB,EAAE,IAAY,EAAE,QAAiB;QACnF,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC;IAES,IAAI,CAAC,UAAqB;QAEnC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,SAAS,EAAE,CAAC;QAC/B,CAAC;QACD,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;QAC3B,UAAU,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,GAAY;QAC3C,MAAM,MAAM,GAAG,MAAM,kCAAsB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAEhE,OAAO,MAAM,CAAC,OAAO,CAAC;IACvB,CAAC;CACD,CAAA;AA3EY,sCAAa;wBAAb,aAAa;IADzB,IAAA,YAAO,GAAE;GACG,aAAa,CA2EzB"}
@@ -2,5 +2,5 @@ export declare const QUEUE_NAME = "jobs";
2
2
  export declare const JOB_TYPE_NAME = "job";
3
3
  export declare const COMMAND_PUBSUB_CHANNEL = "n8n.commands";
4
4
  export declare const WORKER_RESPONSE_PUBSUB_CHANNEL = "n8n.worker-response";
5
- export declare const SELF_SEND_COMMANDS: Set<"reload-license" | "restart-event-bus" | "reload-external-secrets-providers" | "community-package-install" | "community-package-update" | "community-package-uninstall" | "get-worker-id" | "get-worker-status" | "add-webhooks-triggers-and-pollers" | "remove-triggers-and-pollers" | "display-workflow-activation" | "display-workflow-deactivation" | "display-workflow-activation-error" | "relay-execution-lifecycle-event" | "clear-test-webhooks">;
6
- export declare const IMMEDIATE_COMMANDS: Set<"reload-license" | "restart-event-bus" | "reload-external-secrets-providers" | "community-package-install" | "community-package-update" | "community-package-uninstall" | "get-worker-id" | "get-worker-status" | "add-webhooks-triggers-and-pollers" | "remove-triggers-and-pollers" | "display-workflow-activation" | "display-workflow-deactivation" | "display-workflow-activation-error" | "relay-execution-lifecycle-event" | "clear-test-webhooks">;
5
+ export declare const SELF_SEND_COMMANDS: Set<"reload-license" | "restart-event-bus" | "reload-external-secrets-providers" | "community-package-install" | "community-package-update" | "community-package-uninstall" | "get-worker-id" | "get-worker-status" | "add-webhooks-triggers-and-pollers" | "remove-triggers-and-pollers" | "display-workflow-activation" | "display-workflow-deactivation" | "display-workflow-activation-error" | "relay-execution-lifecycle-event" | "clear-test-webhooks" | "reload-oidc-config">;
6
+ export declare const IMMEDIATE_COMMANDS: Set<"reload-license" | "restart-event-bus" | "reload-external-secrets-providers" | "community-package-install" | "community-package-update" | "community-package-uninstall" | "get-worker-id" | "get-worker-status" | "add-webhooks-triggers-and-pollers" | "remove-triggers-and-pollers" | "display-workflow-activation" | "display-workflow-deactivation" | "display-workflow-activation-error" | "relay-execution-lifecycle-event" | "clear-test-webhooks" | "reload-oidc-config">;
@@ -4,6 +4,7 @@ export type PubSubCommandMap = {
4
4
  'reload-license': never;
5
5
  'restart-event-bus': never;
6
6
  'reload-external-secrets-providers': never;
7
+ 'reload-oidc-config': never;
7
8
  'community-package-install': {
8
9
  packageName: string;
9
10
  packageVersion: string;
@@ -35,6 +36,7 @@ export type PubSubCommandMap = {
35
36
  };
36
37
  'relay-execution-lifecycle-event': PushMessage & {
37
38
  pushRef: string;
39
+ asBinary: boolean;
38
40
  };
39
41
  'clear-test-webhooks': {
40
42
  webhookKey: string;
@@ -8,5 +8,6 @@ export declare class PubSubRegistry {
8
8
  private readonly pubSubMetadata;
9
9
  private readonly pubsubEventBus;
10
10
  constructor(logger: Logger, instanceSettings: InstanceSettings, pubSubMetadata: PubSubMetadata, pubsubEventBus: PubSubEventBus);
11
+ private eventHandlers;
11
12
  init(): void;
12
13
  }
@@ -21,22 +21,29 @@ let PubSubRegistry = class PubSubRegistry {
21
21
  this.instanceSettings = instanceSettings;
22
22
  this.pubSubMetadata = pubSubMetadata;
23
23
  this.pubsubEventBus = pubsubEventBus;
24
+ this.eventHandlers = [];
24
25
  this.logger = this.logger.scoped('pubsub');
25
26
  }
26
27
  init() {
27
28
  const { instanceSettings, pubSubMetadata } = this;
29
+ for (const { eventName, handler } of this.eventHandlers) {
30
+ this.pubsubEventBus.off(eventName, handler);
31
+ }
32
+ this.eventHandlers = [];
28
33
  const handlers = pubSubMetadata.getHandlers();
29
34
  for (const { eventHandlerClass, methodName, eventName, filter } of handlers) {
30
35
  const handlerClass = di_1.Container.get(eventHandlerClass);
31
36
  if (!filter?.instanceType || filter.instanceType === instanceSettings.instanceType) {
32
37
  this.logger.debug(`Registered a "${eventName}" event handler on ${eventHandlerClass.name}#${methodName}`);
33
- this.pubsubEventBus.on(eventName, async (...args) => {
38
+ const eventHandler = async (...args) => {
34
39
  const shouldTrigger = filter?.instanceType !== 'main' ||
35
40
  !filter.instanceRole ||
36
41
  filter.instanceRole === instanceSettings.instanceRole;
37
42
  if (shouldTrigger)
38
43
  await handlerClass[methodName].call(handlerClass, ...args);
39
- });
44
+ };
45
+ this.pubsubEventBus.on(eventName, eventHandler);
46
+ this.eventHandlers.push({ eventName, handler: eventHandler });
40
47
  }
41
48
  }
42
49
  }