@contember/engine-actions 2.1.0-alpha.9 → 2.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/CLAUDE.md +47 -0
  2. package/dist/development/index.cjs +45 -21
  3. package/dist/development/index.cjs.map +1 -1
  4. package/dist/development/index.js +45 -21
  5. package/dist/development/index.js.map +1 -1
  6. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs +23 -11
  7. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
  8. package/dist/development/src/ActionsExecutionContainerHookFactory.js +23 -11
  9. package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +1 -1
  10. package/dist/development/src/ListenerStoreProvider.cjs.map +1 -1
  11. package/dist/development/src/ListenerStoreProvider.js.map +1 -1
  12. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs +2 -0
  13. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs.map +1 -1
  14. package/dist/development/src/authorization/ActionsAuthorizationActions.js +2 -0
  15. package/dist/development/src/authorization/ActionsAuthorizationActions.js.map +1 -1
  16. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs.map +1 -1
  17. package/dist/development/src/authorization/ActionsPermissionsFactory.js.map +1 -1
  18. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs +16 -14
  19. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -1
  20. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js +16 -14
  21. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js.map +1 -1
  22. package/dist/development/src/dispatch/EventDispatcher.cjs.map +1 -1
  23. package/dist/development/src/dispatch/EventDispatcher.js.map +1 -1
  24. package/dist/development/src/dispatch/EventsRepository.cjs +33 -15
  25. package/dist/development/src/dispatch/EventsRepository.cjs.map +1 -1
  26. package/dist/development/src/dispatch/EventsRepository.js +33 -15
  27. package/dist/development/src/dispatch/EventsRepository.js.map +1 -1
  28. package/dist/development/src/dispatch/ProjectDispatcher.cjs +3 -3
  29. package/dist/development/src/dispatch/ProjectDispatcher.cjs.map +1 -1
  30. package/dist/development/src/dispatch/ProjectDispatcher.js +2 -2
  31. package/dist/development/src/dispatch/ProjectDispatcher.js.map +1 -1
  32. package/dist/development/src/dispatch/TargetHandlerResolver.cjs.map +1 -1
  33. package/dist/development/src/dispatch/TargetHandlerResolver.js.map +1 -1
  34. package/dist/development/src/dispatch/WebhookFetcher.cjs.map +1 -1
  35. package/dist/development/src/dispatch/WebhookFetcher.js.map +1 -1
  36. package/dist/development/src/dispatch/WebhookTargetHandler.cjs +6 -1
  37. package/dist/development/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
  38. package/dist/development/src/dispatch/WebhookTargetHandler.js +6 -1
  39. package/dist/development/src/dispatch/WebhookTargetHandler.js.map +1 -1
  40. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs +1 -0
  41. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
  42. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js +1 -0
  43. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
  44. package/dist/development/src/graphql/http/ActionsContextResolver.cjs +8 -11
  45. package/dist/development/src/graphql/http/ActionsContextResolver.cjs.map +1 -1
  46. package/dist/development/src/graphql/http/ActionsContextResolver.js +8 -11
  47. package/dist/development/src/graphql/http/ActionsContextResolver.js.map +1 -1
  48. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -1
  49. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -1
  50. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs +6 -3
  51. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -1
  52. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js +6 -3
  53. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -1
  54. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs +7 -2
  55. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
  56. package/dist/development/src/graphql/resolvers/ResolversFactory.js +8 -3
  57. package/dist/development/src/graphql/resolvers/ResolversFactory.js.map +1 -1
  58. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -1
  59. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -1
  60. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
  61. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
  62. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
  63. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
  64. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -1
  65. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -1
  66. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
  67. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
  68. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
  69. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
  70. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs +14 -1
  71. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  72. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js +14 -1
  73. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
  74. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -1
  75. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -1
  76. package/dist/development/src/graphql/schema/actions.graphql.cjs +18 -4
  77. package/dist/development/src/graphql/schema/actions.graphql.cjs.map +1 -1
  78. package/dist/development/src/graphql/schema/actions.graphql.js +18 -4
  79. package/dist/development/src/graphql/schema/actions.graphql.js.map +1 -1
  80. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.cjs.map +1 -1
  81. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.js.map +1 -1
  82. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
  83. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
  84. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
  85. package/dist/development/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
  86. package/dist/development/src/migrations/index.cjs +3 -1
  87. package/dist/development/src/migrations/index.cjs.map +1 -1
  88. package/dist/development/src/migrations/index.js +3 -1
  89. package/dist/development/src/migrations/index.js.map +1 -1
  90. package/dist/development/src/migrations/snapshot.cjs +5 -2
  91. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  92. package/dist/development/src/migrations/snapshot.js +5 -2
  93. package/dist/development/src/migrations/snapshot.js.map +1 -1
  94. package/dist/development/src/model/EventByIdQuery.cjs +17 -0
  95. package/dist/development/src/model/EventByIdQuery.cjs.map +1 -0
  96. package/dist/development/src/model/EventByIdQuery.js +17 -0
  97. package/dist/development/src/model/EventByIdQuery.js.map +1 -0
  98. package/dist/development/src/model/EventsInProcessingQuery.cjs.map +1 -1
  99. package/dist/development/src/model/EventsInProcessingQuery.js.map +1 -1
  100. package/dist/development/src/model/EventsToProcessQuery.cjs.map +1 -1
  101. package/dist/development/src/model/EventsToProcessQuery.js.map +1 -1
  102. package/dist/development/src/model/EventsToProcessSpecification.cjs.map +1 -1
  103. package/dist/development/src/model/EventsToProcessSpecification.js.map +1 -1
  104. package/dist/development/src/model/FailedEventsQuery.cjs.map +1 -1
  105. package/dist/development/src/model/FailedEventsQuery.js.map +1 -1
  106. package/dist/development/src/model/SetVariableCommand.cjs.map +1 -1
  107. package/dist/development/src/model/SetVariableCommand.js.map +1 -1
  108. package/dist/development/src/model/VariablesManager.cjs.map +1 -1
  109. package/dist/development/src/model/VariablesManager.js.map +1 -1
  110. package/dist/development/src/model/VariablesQuery.cjs.map +1 -1
  111. package/dist/development/src/model/VariablesQuery.js.map +1 -1
  112. package/dist/development/src/triggers/TriggerHandler.cjs +17 -14
  113. package/dist/development/src/triggers/TriggerHandler.cjs.map +1 -1
  114. package/dist/development/src/triggers/TriggerHandler.js +17 -14
  115. package/dist/development/src/triggers/TriggerHandler.js.map +1 -1
  116. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs +44 -2
  117. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
  118. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js +44 -2
  119. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
  120. package/dist/development/src/triggers/TriggerListenersBuilder.cjs.map +1 -1
  121. package/dist/development/src/triggers/TriggerListenersBuilder.js.map +1 -1
  122. package/dist/development/src/triggers/TriggerListenersFactory.cjs.map +1 -1
  123. package/dist/development/src/triggers/TriggerListenersFactory.js.map +1 -1
  124. package/dist/development/src/triggers/TriggerListenersStore.cjs.map +1 -1
  125. package/dist/development/src/triggers/TriggerListenersStore.js.map +1 -1
  126. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs +45 -16
  127. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
  128. package/dist/development/src/triggers/TriggerPayloadBuilder.js +45 -16
  129. package/dist/development/src/triggers/TriggerPayloadBuilder.js.map +1 -1
  130. package/dist/development/src/triggers/TriggerPayloadManager.cjs.map +1 -1
  131. package/dist/development/src/triggers/TriggerPayloadManager.js.map +1 -1
  132. package/dist/development/src/triggers/TriggerPayloadPersister.cjs +9 -5
  133. package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
  134. package/dist/development/src/triggers/TriggerPayloadPersister.js +9 -5
  135. package/dist/development/src/triggers/TriggerPayloadPersister.js.map +1 -1
  136. package/dist/development/src/utils/assertNever.cjs.map +1 -1
  137. package/dist/development/src/utils/assertNever.js.map +1 -1
  138. package/dist/development/src/utils/map.cjs.map +1 -1
  139. package/dist/development/src/utils/map.js.map +1 -1
  140. package/dist/development/src/utils/notifyChannel.cjs +9 -0
  141. package/dist/development/src/utils/notifyChannel.cjs.map +1 -0
  142. package/dist/development/src/utils/notifyChannel.js +9 -0
  143. package/dist/development/src/utils/notifyChannel.js.map +1 -0
  144. package/dist/production/index.cjs +45 -21
  145. package/dist/production/index.cjs.map +1 -1
  146. package/dist/production/index.js +45 -21
  147. package/dist/production/index.js.map +1 -1
  148. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs +23 -11
  149. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
  150. package/dist/production/src/ActionsExecutionContainerHookFactory.js +23 -11
  151. package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +1 -1
  152. package/dist/production/src/ListenerStoreProvider.cjs.map +1 -1
  153. package/dist/production/src/ListenerStoreProvider.js.map +1 -1
  154. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs +2 -0
  155. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs.map +1 -1
  156. package/dist/production/src/authorization/ActionsAuthorizationActions.js +2 -0
  157. package/dist/production/src/authorization/ActionsAuthorizationActions.js.map +1 -1
  158. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs.map +1 -1
  159. package/dist/production/src/authorization/ActionsPermissionsFactory.js.map +1 -1
  160. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs +16 -14
  161. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -1
  162. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js +16 -14
  163. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js.map +1 -1
  164. package/dist/production/src/dispatch/EventDispatcher.cjs.map +1 -1
  165. package/dist/production/src/dispatch/EventDispatcher.js.map +1 -1
  166. package/dist/production/src/dispatch/EventsRepository.cjs +33 -15
  167. package/dist/production/src/dispatch/EventsRepository.cjs.map +1 -1
  168. package/dist/production/src/dispatch/EventsRepository.js +33 -15
  169. package/dist/production/src/dispatch/EventsRepository.js.map +1 -1
  170. package/dist/production/src/dispatch/ProjectDispatcher.cjs +3 -3
  171. package/dist/production/src/dispatch/ProjectDispatcher.cjs.map +1 -1
  172. package/dist/production/src/dispatch/ProjectDispatcher.js +2 -2
  173. package/dist/production/src/dispatch/ProjectDispatcher.js.map +1 -1
  174. package/dist/production/src/dispatch/TargetHandlerResolver.cjs.map +1 -1
  175. package/dist/production/src/dispatch/TargetHandlerResolver.js.map +1 -1
  176. package/dist/production/src/dispatch/WebhookFetcher.cjs.map +1 -1
  177. package/dist/production/src/dispatch/WebhookFetcher.js.map +1 -1
  178. package/dist/production/src/dispatch/WebhookTargetHandler.cjs +6 -1
  179. package/dist/production/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
  180. package/dist/production/src/dispatch/WebhookTargetHandler.js +6 -1
  181. package/dist/production/src/dispatch/WebhookTargetHandler.js.map +1 -1
  182. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs +1 -0
  183. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
  184. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js +1 -0
  185. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
  186. package/dist/production/src/graphql/http/ActionsContextResolver.cjs +8 -11
  187. package/dist/production/src/graphql/http/ActionsContextResolver.cjs.map +1 -1
  188. package/dist/production/src/graphql/http/ActionsContextResolver.js +8 -11
  189. package/dist/production/src/graphql/http/ActionsContextResolver.js.map +1 -1
  190. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -1
  191. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -1
  192. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs +6 -3
  193. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -1
  194. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js +6 -3
  195. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -1
  196. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs +7 -2
  197. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
  198. package/dist/production/src/graphql/resolvers/ResolversFactory.js +8 -3
  199. package/dist/production/src/graphql/resolvers/ResolversFactory.js.map +1 -1
  200. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -1
  201. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -1
  202. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs +21 -0
  203. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -0
  204. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js +21 -0
  205. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -0
  206. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -1
  207. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -1
  208. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs +19 -0
  209. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -0
  210. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js +19 -0
  211. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -0
  212. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs +14 -1
  213. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  214. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js +14 -1
  215. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
  216. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -1
  217. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -1
  218. package/dist/production/src/graphql/schema/actions.graphql.cjs +18 -4
  219. package/dist/production/src/graphql/schema/actions.graphql.cjs.map +1 -1
  220. package/dist/production/src/graphql/schema/actions.graphql.js +18 -4
  221. package/dist/production/src/graphql/schema/actions.graphql.js.map +1 -1
  222. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.cjs.map +1 -1
  223. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.js.map +1 -1
  224. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs +16 -0
  225. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.cjs.map +1 -0
  226. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js +17 -0
  227. package/dist/production/src/migrations/2025-05-28-160000-action-event-user.js.map +1 -0
  228. package/dist/production/src/migrations/index.cjs +3 -1
  229. package/dist/production/src/migrations/index.cjs.map +1 -1
  230. package/dist/production/src/migrations/index.js +3 -1
  231. package/dist/production/src/migrations/index.js.map +1 -1
  232. package/dist/production/src/migrations/snapshot.cjs +5 -2
  233. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  234. package/dist/production/src/migrations/snapshot.js +5 -2
  235. package/dist/production/src/migrations/snapshot.js.map +1 -1
  236. package/dist/production/src/model/EventByIdQuery.cjs +17 -0
  237. package/dist/production/src/model/EventByIdQuery.cjs.map +1 -0
  238. package/dist/production/src/model/EventByIdQuery.js +17 -0
  239. package/dist/production/src/model/EventByIdQuery.js.map +1 -0
  240. package/dist/production/src/model/EventsInProcessingQuery.cjs.map +1 -1
  241. package/dist/production/src/model/EventsInProcessingQuery.js.map +1 -1
  242. package/dist/production/src/model/EventsToProcessQuery.cjs.map +1 -1
  243. package/dist/production/src/model/EventsToProcessQuery.js.map +1 -1
  244. package/dist/production/src/model/EventsToProcessSpecification.cjs.map +1 -1
  245. package/dist/production/src/model/EventsToProcessSpecification.js.map +1 -1
  246. package/dist/production/src/model/FailedEventsQuery.cjs.map +1 -1
  247. package/dist/production/src/model/FailedEventsQuery.js.map +1 -1
  248. package/dist/production/src/model/SetVariableCommand.cjs.map +1 -1
  249. package/dist/production/src/model/SetVariableCommand.js.map +1 -1
  250. package/dist/production/src/model/VariablesManager.cjs.map +1 -1
  251. package/dist/production/src/model/VariablesManager.js.map +1 -1
  252. package/dist/production/src/model/VariablesQuery.cjs.map +1 -1
  253. package/dist/production/src/model/VariablesQuery.js.map +1 -1
  254. package/dist/production/src/triggers/TriggerHandler.cjs +17 -14
  255. package/dist/production/src/triggers/TriggerHandler.cjs.map +1 -1
  256. package/dist/production/src/triggers/TriggerHandler.js +17 -14
  257. package/dist/production/src/triggers/TriggerHandler.js.map +1 -1
  258. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs +44 -2
  259. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
  260. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js +44 -2
  261. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
  262. package/dist/production/src/triggers/TriggerListenersBuilder.cjs.map +1 -1
  263. package/dist/production/src/triggers/TriggerListenersBuilder.js.map +1 -1
  264. package/dist/production/src/triggers/TriggerListenersFactory.cjs.map +1 -1
  265. package/dist/production/src/triggers/TriggerListenersFactory.js.map +1 -1
  266. package/dist/production/src/triggers/TriggerListenersStore.cjs.map +1 -1
  267. package/dist/production/src/triggers/TriggerListenersStore.js.map +1 -1
  268. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs +45 -16
  269. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
  270. package/dist/production/src/triggers/TriggerPayloadBuilder.js +45 -16
  271. package/dist/production/src/triggers/TriggerPayloadBuilder.js.map +1 -1
  272. package/dist/production/src/triggers/TriggerPayloadManager.cjs.map +1 -1
  273. package/dist/production/src/triggers/TriggerPayloadManager.js.map +1 -1
  274. package/dist/production/src/triggers/TriggerPayloadPersister.cjs +9 -5
  275. package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
  276. package/dist/production/src/triggers/TriggerPayloadPersister.js +9 -5
  277. package/dist/production/src/triggers/TriggerPayloadPersister.js.map +1 -1
  278. package/dist/production/src/utils/assertNever.cjs.map +1 -1
  279. package/dist/production/src/utils/assertNever.js.map +1 -1
  280. package/dist/production/src/utils/map.cjs.map +1 -1
  281. package/dist/production/src/utils/map.js.map +1 -1
  282. package/dist/production/src/utils/notifyChannel.cjs +9 -0
  283. package/dist/production/src/utils/notifyChannel.cjs.map +1 -0
  284. package/dist/production/src/utils/notifyChannel.js +9 -0
  285. package/dist/production/src/utils/notifyChannel.js.map +1 -0
  286. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  287. package/dist/types/ActionsExecutionContainerHookFactory.d.ts.map +1 -1
  288. package/dist/types/authorization/ActionsAuthorizationActions.d.ts +10 -0
  289. package/dist/types/authorization/ActionsAuthorizationActions.d.ts.map +1 -1
  290. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts.map +1 -1
  291. package/dist/types/dispatch/EventDispatcher.d.ts.map +1 -1
  292. package/dist/types/dispatch/EventsRepository.d.ts +2 -1
  293. package/dist/types/dispatch/EventsRepository.d.ts.map +1 -1
  294. package/dist/types/dispatch/ProjectDispatcher.d.ts.map +1 -1
  295. package/dist/types/dispatch/WebhookTargetHandler.d.ts.map +1 -1
  296. package/dist/types/dispatch/types.d.ts +1 -1
  297. package/dist/types/dispatch/types.d.ts.map +1 -1
  298. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +1 -1
  299. package/dist/types/graphql/http/ActionsContextResolver.d.ts.map +1 -1
  300. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts.map +1 -1
  301. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts.map +1 -1
  302. package/dist/types/graphql/resolvers/ActionsContext.d.ts +3 -0
  303. package/dist/types/graphql/resolvers/ActionsContext.d.ts.map +1 -1
  304. package/dist/types/graphql/resolvers/ResolversFactory.d.ts +4 -2
  305. package/dist/types/graphql/resolvers/ResolversFactory.d.ts.map +1 -1
  306. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts +11 -0
  307. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts.map +1 -0
  308. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts.map +1 -1
  309. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts +11 -0
  310. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts.map +1 -0
  311. package/dist/types/graphql/resolvers/mutation/index.d.ts +2 -0
  312. package/dist/types/graphql/resolvers/mutation/index.d.ts.map +1 -1
  313. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts +3 -0
  314. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts.map +1 -1
  315. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts.map +1 -1
  316. package/dist/types/graphql/schema/actions.graphql.d.ts.map +1 -1
  317. package/dist/types/graphql/schema/index.d.ts +45 -2
  318. package/dist/types/graphql/schema/index.d.ts.map +1 -1
  319. package/dist/types/index.d.ts +1 -1
  320. package/dist/types/index.d.ts.map +1 -1
  321. package/dist/types/migrations/2023-03-10-145000-actions-variables.d.ts.map +1 -1
  322. package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts +3 -0
  323. package/dist/types/migrations/2025-05-28-160000-action-event-user.d.ts.map +1 -0
  324. package/dist/types/migrations/index.d.ts.map +1 -1
  325. package/dist/types/migrations/snapshot.d.ts.map +1 -1
  326. package/dist/types/model/EventByIdQuery.d.ts +8 -0
  327. package/dist/types/model/EventByIdQuery.d.ts.map +1 -0
  328. package/dist/types/model/EventsToProcessSpecification.d.ts.map +1 -1
  329. package/dist/types/model/SetVariableCommand.d.ts.map +1 -1
  330. package/dist/types/model/types.d.ts +3 -0
  331. package/dist/types/model/types.d.ts.map +1 -1
  332. package/dist/types/triggers/TriggerHandler.d.ts.map +1 -1
  333. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts +11 -3
  334. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts.map +1 -1
  335. package/dist/types/triggers/TriggerListeners.d.ts.map +1 -1
  336. package/dist/types/triggers/TriggerListenersBuilder.d.ts.map +1 -1
  337. package/dist/types/triggers/TriggerListenersStore.d.ts +2 -2
  338. package/dist/types/triggers/TriggerListenersStore.d.ts.map +1 -1
  339. package/dist/types/triggers/TriggerPayloadBuilder.d.ts.map +1 -1
  340. package/dist/types/triggers/TriggerPayloadManager.d.ts +2 -1
  341. package/dist/types/triggers/TriggerPayloadManager.d.ts.map +1 -1
  342. package/dist/types/triggers/TriggerPayloadPersister.d.ts +7 -3
  343. package/dist/types/triggers/TriggerPayloadPersister.d.ts.map +1 -1
  344. package/dist/types/tsconfig.tsbuildinfo +1 -1
  345. package/dist/types/utils/notifyChannel.d.ts +4 -0
  346. package/dist/types/utils/notifyChannel.d.ts.map +1 -0
  347. package/graphql.codegen.yml +2 -2
  348. package/package.json +26 -21
  349. package/src/ActionsExecutionContainerHookFactory.ts +23 -11
  350. package/src/authorization/ActionsAuthorizationActions.ts +2 -0
  351. package/src/dispatch/DispatchWorkerSupervisor.ts +17 -16
  352. package/src/dispatch/EventDispatcher.ts +0 -2
  353. package/src/dispatch/EventsRepository.ts +63 -43
  354. package/src/dispatch/ProjectDispatcher.ts +6 -11
  355. package/src/dispatch/WebhookTargetHandler.ts +18 -9
  356. package/src/dispatch/types.ts +1 -2
  357. package/src/graphql/http/ActionsApiMiddlewareFactory.ts +7 -5
  358. package/src/graphql/http/ActionsContextResolver.ts +1 -2
  359. package/src/graphql/http/ActionsGraphQLHandlerFactory.ts +0 -1
  360. package/src/graphql/http/ActionsWebsocketControllerFactory.ts +7 -5
  361. package/src/graphql/resolvers/ActionsContext.ts +1 -0
  362. package/src/graphql/resolvers/ResolversFactory.ts +9 -2
  363. package/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts +22 -0
  364. package/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts +0 -1
  365. package/src/graphql/resolvers/mutation/StopEventMutationResolver.ts +19 -0
  366. package/src/graphql/resolvers/mutation/index.ts +2 -0
  367. package/src/graphql/resolvers/query/EventsQueryResolver.ts +15 -8
  368. package/src/graphql/resolvers/query/VariablesQueryResolver.ts +0 -1
  369. package/src/graphql/schema/actions.graphql.ts +18 -4
  370. package/src/graphql/schema/index.ts +84 -30
  371. package/src/index.ts +55 -30
  372. package/src/migrations/2023-03-10-145000-actions-variables.ts +1 -1
  373. package/src/migrations/2025-05-28-160000-action-event-user.ts +16 -0
  374. package/src/migrations/index.ts +2 -0
  375. package/src/migrations/snapshot.ts +6 -3
  376. package/src/model/EventByIdQuery.ts +21 -0
  377. package/src/model/EventsToProcessSpecification.ts +9 -8
  378. package/src/model/SetVariableCommand.ts +0 -1
  379. package/src/model/types.ts +3 -0
  380. package/src/triggers/TriggerHandler.ts +16 -15
  381. package/src/triggers/TriggerIndirectChangesFetcher.ts +62 -3
  382. package/src/triggers/TriggerListeners.ts +1 -8
  383. package/src/triggers/TriggerListenersBuilder.ts +3 -6
  384. package/src/triggers/TriggerListenersStore.ts +2 -2
  385. package/src/triggers/TriggerPayloadBuilder.ts +43 -13
  386. package/src/triggers/TriggerPayloadManager.ts +2 -4
  387. package/src/triggers/TriggerPayloadPersister.ts +8 -3
  388. package/src/utils/notifyChannel.ts +6 -0
  389. package/tests/cases/unit/generator.test.ts +133 -136
  390. package/tests/cases/unit/webhookHandler.test.ts +47 -35
@@ -0,0 +1,21 @@
1
+ import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'
2
+ import { EventRow } from './types'
3
+
4
+ export class EventByIdQuery extends DatabaseQuery<EventRow | null> {
5
+ constructor(
6
+ private readonly id: string,
7
+ ) {
8
+ super()
9
+ }
10
+
11
+ async fetch(queryable: DatabaseQueryable): Promise<EventRow | null> {
12
+ const result = await SelectBuilder.create<EventRow>()
13
+ .from('actions_event')
14
+ .select('*')
15
+ .where({
16
+ id: this.id,
17
+ })
18
+ .getResult(queryable.db)
19
+ return this.fetchOneOrNull(result)
20
+ }
21
+ }
@@ -1,11 +1,12 @@
1
1
  import { Operator, SelectBuilderSpecification } from '@contember/database'
2
2
 
3
+ export const eventsToProcessStateSpecification: SelectBuilderSpecification = qb =>
4
+ qb
5
+ .where(it => it.in('state', ['retrying', 'created', 'processing']))
3
6
 
4
- export const eventsToProcessStateSpecification: SelectBuilderSpecification = qb => qb
5
- .where(it => it.in('state', ['retrying', 'created', 'processing']))
6
-
7
- export const eventsToProcessSpecification: SelectBuilderSpecification = qb => qb
8
- .match(eventsToProcessStateSpecification)
9
- .where(it => it.compare('visible_at', Operator.lte, 'now'))
10
- .orderBy('priority', 'desc')
11
- .orderBy('visible_at')
7
+ export const eventsToProcessSpecification: SelectBuilderSpecification = qb =>
8
+ qb
9
+ .match(eventsToProcessStateSpecification)
10
+ .where(it => it.compare('visible_at', Operator.lte, 'now'))
11
+ .orderBy('priority', 'desc')
12
+ .orderBy('visible_at')
@@ -2,7 +2,6 @@ import { Command } from '@contember/engine-system-api'
2
2
  import { ConflictActionType, InsertBuilder, Literal } from '@contember/database'
3
3
 
4
4
  export class SetVariableCommand implements Command<void> {
5
-
6
5
  constructor(
7
6
  private readonly name: string,
8
7
  private readonly value: string,
@@ -14,6 +14,9 @@ export type EventRow = {
14
14
  target: string
15
15
  priority: number
16
16
  trigger: string
17
+ identity_id: string | null
18
+ ip_address: string | null
19
+ user_agent: string | null
17
20
  payload: ActionsPayload.AnyEventPayload
18
21
  log: any[]
19
22
  }
@@ -71,31 +71,30 @@ export class TriggerHandler {
71
71
 
72
72
  private async directUpdateHandler(event: AfterUpdateEvent) {
73
73
  const updateListeners = this.listenersStore.getUpdateListeners(event.entity.name)
74
- updateListeners.map(listener => {
74
+ await Promise.all(updateListeners.map(listener => {
75
75
  if (event.data.some(it => listener.fields.has(it.fieldName) && it.value !== it.old)) {
76
- this.payloadManager.add({
76
+ return this.payloadManager.add({
77
77
  listener,
78
78
  entity: event.entity,
79
79
  primary: event.id,
80
80
  cause: event,
81
81
  })
82
82
  }
83
- })
83
+ }))
84
84
  }
85
85
 
86
86
  private async directCreateHandler(event: AfterInsertEvent) {
87
87
  const createListeners = this.listenersStore.getCreateListener(event.entity.name)
88
- createListeners.map(listener => {
89
- this.payloadManager.add({
88
+ await Promise.all(createListeners.map(listener => {
89
+ return this.payloadManager.add({
90
90
  listener,
91
91
  entity: event.entity,
92
92
  primary: event.id,
93
93
  cause: event,
94
94
  })
95
- })
95
+ }))
96
96
  }
97
97
 
98
-
99
98
  /**
100
99
  * Collect affected triggers after entity was created or before it was deleted.
101
100
  * todo: after insert, it should probably check only owning relations, because other relations are connected later, so it would be always empty
@@ -103,9 +102,11 @@ export class TriggerHandler {
103
102
  private async indirectChangesEntityHandler(event: BeforeDeleteEvent | AfterInsertEvent) {
104
103
  //
105
104
  const indirectEntityListeners = this.listenersStore.getIndirectListeners(event.entity.name)
106
- const promises = indirectEntityListeners.map(listener => this.collectDeepChanges(event, listener, {
107
- [event.entity.primary]: { eq: event.id },
108
- }))
105
+ const promises = indirectEntityListeners.map(listener =>
106
+ this.collectDeepChanges(event, listener, {
107
+ [event.entity.primary]: { eq: event.id },
108
+ })
109
+ )
109
110
  await Promise.all(promises)
110
111
  }
111
112
 
@@ -142,20 +143,20 @@ export class TriggerHandler {
142
143
  await Promise.all(promises)
143
144
  }
144
145
 
145
-
146
146
  private async collectDeepChanges(
147
147
  cause: EventCause,
148
148
  listener: IndirectListener | JunctionListener,
149
149
  where: Input.Where,
150
150
  ) {
151
151
  const result = await this.changesFetcher.fetch(listener, where)
152
- for (const row of result) {
153
- this.payloadManager.add({
152
+ await Promise.all(result.map(row => {
153
+ return this.payloadManager.add({
154
154
  listener,
155
155
  entity: listener.rootEntity,
156
- primary: row,
156
+ primary: row.id,
157
157
  cause,
158
+ nodes: row.nodes,
158
159
  })
159
- }
160
+ }))
160
161
  }
161
162
  }
@@ -1,12 +1,21 @@
1
1
  import { Mapper, PathFactory, WhereBuilder } from '@contember/engine-content-api'
2
2
  import { IndirectListener, JunctionListener } from './TriggerListenersStore'
3
3
  import { SelectBuilder } from '@contember/database'
4
- import { Input } from '@contember/schema'
4
+ import { ActionsPayload, Input, Model, Schema } from '@contember/schema'
5
+ import { JoinBuilder } from '@contember/engine-content-api'
6
+ import { getTargetEntity } from '@contember/schema-utils'
7
+
8
+ export type TriggerIndirectChangesFetcherResult = {
9
+ id: Input.PrimaryValue
10
+ nodes?: ActionsPayload.EntityEventPathNode[]
11
+ }[]
5
12
 
6
13
  export class TriggerIndirectChangesFetcher {
7
14
  constructor(
15
+ private readonly model: Model.Schema,
8
16
  private readonly mapper: Mapper,
9
17
  private readonly whereBuilder: WhereBuilder,
18
+ private readonly joinBuilder: JoinBuilder,
10
19
  private readonly pathFactory: PathFactory,
11
20
  ) {
12
21
  }
@@ -14,7 +23,11 @@ export class TriggerIndirectChangesFetcher {
14
23
  public async fetch(
15
24
  listener: IndirectListener | JunctionListener,
16
25
  where: Input.Where,
17
- ): Promise<Input.PrimaryValue[]> {
26
+ ): Promise<TriggerIndirectChangesFetcherResult> {
27
+ if (listener.trigger.withNodes) {
28
+ return this.fetchWithNodes(listener, where)
29
+ }
30
+
18
31
  for (let i = listener.path.length - 1; i >= 0; i--) {
19
32
  where = { [listener.path[i]]: where }
20
33
  }
@@ -24,7 +37,53 @@ export class TriggerIndirectChangesFetcher {
24
37
  const path = this.pathFactory.create([])
25
38
  const qbWithWhere = this.whereBuilder.build(qb, listener.rootEntity, path, where)
26
39
 
27
- return (await qbWithWhere.getResult(this.mapper.db)).map(it => it.id)
40
+ return (await qbWithWhere.getResult(this.mapper.db))
28
41
  }
29
42
 
43
+ private async fetchWithNodes(
44
+ listener: IndirectListener | JunctionListener,
45
+ where: Input.Where,
46
+ ): Promise<TriggerIndirectChangesFetcherResult> {
47
+ const basePath = this.pathFactory.create([])
48
+ let path = basePath
49
+ let entity = listener.rootEntity
50
+ let qb = SelectBuilder.create()
51
+ .from(entity.tableName, path.alias)
52
+ .select([path.alias, entity.primaryColumn], path.for(entity.primary).alias)
53
+
54
+ for (let i = 0; i < listener.path.length; i++) {
55
+ const relationName = listener.path[i]
56
+ path = path.for(relationName)
57
+ const targetEntity = getTargetEntity(this.model, entity, relationName)
58
+ if (!targetEntity) {
59
+ throw new Error(`Target entity for relation ${entity.name}::${relationName} not found`)
60
+ }
61
+ qb = this.joinBuilder.join(qb, path, entity, relationName)
62
+
63
+ entity = targetEntity
64
+ qb = qb.select([path.alias, targetEntity.primaryColumn], path.for(targetEntity.primary).alias)
65
+ }
66
+
67
+ const qbWithWhere = this.whereBuilder.build(qb, entity, path, where)
68
+
69
+ const result = await qbWithWhere.getResult(this.mapper.db)
70
+
71
+ return result.map(row => {
72
+ const nodes: ActionsPayload.EntityEventPathNode[] = []
73
+ let entity = listener.rootEntity
74
+ let path = basePath
75
+ const id = row[path.for(entity.primary).alias]
76
+ for (let i = 0; i < listener.path.length; i++) {
77
+ const relationName = listener.path[i]
78
+ const targetEntity = getTargetEntity(this.model, entity, relationName)
79
+ if (!targetEntity) {
80
+ throw new Error(`Target entity for relation ${entity.name}::${relationName} not found`)
81
+ }
82
+ path = path.for(relationName)
83
+ nodes.push({ relation: relationName, entity: targetEntity.name, id: row[path.for(targetEntity.primary).alias] })
84
+ entity = targetEntity
85
+ }
86
+ return { id, nodes }
87
+ })
88
+ }
30
89
  }
@@ -1,10 +1,4 @@
1
- import {
2
- CreateListener,
3
- DeleteListener,
4
- IndirectListener,
5
- JunctionListener,
6
- UpdateListener,
7
- } from './TriggerListenersStore'
1
+ import { CreateListener, DeleteListener, IndirectListener, JunctionListener, UpdateListener } from './TriggerListenersStore'
8
2
 
9
3
  export interface TriggerListeners {
10
4
  readonly deleteListeners: Map<string, DeleteListener[]>
@@ -13,4 +7,3 @@ export interface TriggerListeners {
13
7
  readonly indirectListeners: Map<string, IndirectListener[]>
14
8
  readonly junctionListeners: Map<string, Map<string, JunctionListener[]>>
15
9
  }
16
-
@@ -6,7 +6,6 @@ import { mapGetOrPut } from '../utils/map'
6
6
  import { ImplementationException } from '../ImplementationException'
7
7
 
8
8
  export class TriggerListenerBuilder {
9
-
10
9
  private readonly data: TriggerListeners = {
11
10
  createListeners: new Map(),
12
11
  updateListeners: new Map(),
@@ -26,7 +25,7 @@ export class TriggerListenerBuilder {
26
25
  } else if (trigger.type === 'watch') {
27
26
  this.processIndirectListeners(trigger)
28
27
  } else {
29
- ((_: never) => {
28
+ ;((_: never) => {
30
29
  throw new ImplementationException(`Unhandled trigger ${(trigger as any).type}`)
31
30
  })(trigger)
32
31
  }
@@ -169,12 +168,10 @@ export class TriggerListenerBuilder {
169
168
  return new TriggerListenersStore(this.data)
170
169
  }
171
170
 
172
-
173
171
  private addListener<
174
172
  K extends Exclude<keyof TriggerListeners, 'junctionListeners'>,
175
- V extends TriggerListeners[K] extends Map<string, infer V extends any[]> ? V[number] : never
176
- >
177
- (
173
+ V extends TriggerListeners[K] extends Map<string, infer V extends any[]> ? V[number] : never,
174
+ >(
178
175
  type: K,
179
176
  entityName: string,
180
177
  value: V,
@@ -3,7 +3,7 @@ import { TriggerListeners } from './TriggerListeners'
3
3
 
4
4
  export interface IndirectListener {
5
5
  type: 'indirect'
6
- trigger: Actions.AnyTrigger
6
+ trigger: Actions.WatchTrigger
7
7
  rootEntity: Model.Entity
8
8
  fields: Set<string>
9
9
  relations: Set<string>
@@ -12,7 +12,7 @@ export interface IndirectListener {
12
12
 
13
13
  export interface JunctionListener {
14
14
  type: 'junction'
15
- trigger: Actions.AnyTrigger
15
+ trigger: Actions.WatchTrigger
16
16
  rootEntity: Model.Entity
17
17
  path: string[]
18
18
  context: {
@@ -23,7 +23,10 @@ export class TriggerPayloadBuilder {
23
23
  const selections = await this.fetchSelection(filteredEvents)
24
24
  const triggerType = filteredEvents[0].listener.trigger.type
25
25
  if (triggerType === 'basic') {
26
- return filteredEvents.map(it => ({ trigger: it.listener.trigger.name, ...this.buildBaseEventPayloads(it, it.selection ?? selections[it.primary]) }))
26
+ return filteredEvents.map(it => ({
27
+ trigger: it.listener.trigger.name,
28
+ ...this.buildBaseEventPayloads(it, it.selection ?? selections[it.primary]),
29
+ }))
27
30
  }
28
31
  if (triggerType === 'watch') {
29
32
  return this.buildWatchEventPayloads(filteredEvents, selections)
@@ -35,9 +38,13 @@ export class TriggerPayloadBuilder {
35
38
  if (event.listener.type === 'delete' && event.listener.trigger.selection) {
36
39
  const input = this.convertSelectionNode(event.listener.trigger.selection)
37
40
 
38
- const selection = await this.mapper.selectUnique(event.entity, input.withArg('by', {
39
- [event.entity.primary]: event.primary,
40
- }), [])
41
+ const selection = await this.mapper.selectUnique(
42
+ event.entity,
43
+ input.withArg('by', {
44
+ [event.entity.primary]: event.primary,
45
+ }),
46
+ [],
47
+ )
41
48
  return { ...event, selection }
42
49
  }
43
50
  return event
@@ -51,6 +58,19 @@ export class TriggerPayloadBuilder {
51
58
  }
52
59
  const payloads: ActionsPayload.WatchEventPayload[] = []
53
60
  for (const eventsByPrimary of Object.values(byPrimary)) {
61
+ const baseEvents: ActionsPayload.BaseEventPayload[] = []
62
+
63
+ const existingEvents = new Set<string>()
64
+ for (const event of eventsByPrimary.events) {
65
+ const baseEvent = this.buildBaseEventPayloads(event)
66
+ const stringRepresentation = JSON.stringify(baseEvent)
67
+ if (existingEvents.has(stringRepresentation)) {
68
+ continue
69
+ }
70
+ existingEvents.add(stringRepresentation)
71
+ baseEvents.push(baseEvent)
72
+ }
73
+
54
74
  payloads.push({
55
75
  operation: 'watch',
56
76
  trigger: events[0].listener.trigger.name,
@@ -58,7 +78,7 @@ export class TriggerPayloadBuilder {
58
78
  id: eventsByPrimary.primary,
59
79
  selection: eventsByPrimary.events.find(it => it.selection)?.selection
60
80
  ?? selections[eventsByPrimary.primary],
61
- events: eventsByPrimary.events.map(it => this.buildBaseEventPayloads(it)),
81
+ events: baseEvents,
62
82
  })
63
83
  }
64
84
  return payloads
@@ -74,6 +94,7 @@ export class TriggerPayloadBuilder {
74
94
  selection,
75
95
  values: Object.fromEntries(event.cause.data.map(it => [it.fieldName, it.value])),
76
96
  path: 'path' in event.listener ? event.listener.path : undefined,
97
+ nodes: event.nodes,
77
98
  }
78
99
  case 'AfterUpdateEvent':
79
100
  case 'BeforeUpdateEvent':
@@ -89,6 +110,7 @@ export class TriggerPayloadBuilder {
89
110
  values: Object.fromEntries(event.cause.data.map(it => [it.fieldName, it.value])),
90
111
  path: 'path' in event.listener ? event.listener.path : undefined,
91
112
  old: Object.fromEntries(afterEvent.data.map(it => [it.fieldName, it.old])),
113
+ nodes: event.nodes,
92
114
  }
93
115
  case 'BeforeDeleteEvent':
94
116
  return {
@@ -97,6 +119,7 @@ export class TriggerPayloadBuilder {
97
119
  id: event.cause.id,
98
120
  selection,
99
121
  path: 'path' in event.listener ? event.listener.path : undefined,
122
+ nodes: event.nodes,
100
123
  }
101
124
  case 'AfterJunctionUpdateEvent':
102
125
  if (event.listener.type !== 'junction') {
@@ -112,6 +135,7 @@ export class TriggerPayloadBuilder {
112
135
  id,
113
136
  inverseId,
114
137
  path: 'path' in event.listener ? event.listener.path : undefined,
138
+ nodes: event.nodes,
115
139
  }
116
140
  default:
117
141
  assertNever(event.cause, it => it.type)
@@ -135,14 +159,20 @@ export class TriggerPayloadBuilder {
135
159
  return await this.mapper.selectAssoc(entity, input, [], entity.primary)
136
160
  }
137
161
 
138
-
139
162
  private convertSelectionNode(node: Actions.SelectionNode, nodeName = 'root', path: string[] = []): ObjectNode<Input.ListQueryInput> {
140
- return new ObjectNode(nodeName, nodeName, node.map(it => {
141
- const [field, args, selection] = Array.isArray(it) ? it : [it, undefined, undefined]
142
- if (selection === undefined || selection.length === 0) {
143
- return new FieldNode(field, field, {})
144
- }
145
- return this.convertSelectionNode(selection, field, [...path, nodeName]).withArgs(args)
146
- }), {}, {}, path)
163
+ return new ObjectNode(
164
+ nodeName,
165
+ nodeName,
166
+ node.map(it => {
167
+ const [field, args, selection] = Array.isArray(it) ? it : [it, undefined, undefined]
168
+ if (selection === undefined || selection.length === 0) {
169
+ return new FieldNode(field, field, {})
170
+ }
171
+ return this.convertSelectionNode(selection, field, [...path, nodeName]).withArgs(args)
172
+ }),
173
+ {},
174
+ {},
175
+ path,
176
+ )
147
177
  }
148
178
  }
@@ -1,16 +1,16 @@
1
- import { Actions, Input, Model } from '@contember/schema'
1
+ import { Actions, ActionsPayload, Input, Model } from '@contember/schema'
2
2
  import { AnyListener } from './TriggerListenersStore'
3
3
  import { EventCause } from './TriggerHandler'
4
4
  import { TriggerPayloadBuilder } from './TriggerPayloadBuilder'
5
5
  import { TriggerPayloadPersister } from './TriggerPayloadPersister'
6
6
 
7
-
8
7
  export interface FiredEvent {
9
8
  listener: AnyListener
10
9
  cause: EventCause
11
10
  entity: Model.Entity
12
11
  primary: Input.PrimaryValue
13
12
  selection?: any
13
+ nodes?: ActionsPayload.EntityEventPathNode[]
14
14
  }
15
15
 
16
16
  export class TriggerPayloadManager {
@@ -28,7 +28,6 @@ export class TriggerPayloadManager {
28
28
  this.eventsByTrigger[firedEvent.listener.trigger.name].push(event)
29
29
  }
30
30
 
31
-
32
31
  public async persist(): Promise<void> {
33
32
  for (const events of Object.values(this.eventsByTrigger)) {
34
33
  const payloads = await this.triggerPayloadBuilder.build(events)
@@ -37,4 +36,3 @@ export class TriggerPayloadManager {
37
36
  }
38
37
  }
39
38
  }
40
-
@@ -2,8 +2,8 @@ import { Client, InsertBuilder } from '@contember/database'
2
2
  import { Mapper } from '@contember/engine-content-api'
3
3
  import { Actions, ActionsPayload } from '@contember/schema'
4
4
  import { EventRow } from '../model/types'
5
+ import { notify } from '../utils/notifyChannel'
5
6
 
6
- export const NOTIFY_CHANNEL_NAME = 'actions_event'
7
7
  type EventRowToInsert = Omit<EventRow, 'created_at' | 'visible_at' | 'last_state_change' | 'log'> & {
8
8
  created_at: string | Date
9
9
  visible_at: string | Date
@@ -17,7 +17,9 @@ export class TriggerPayloadPersister {
17
17
  private readonly providers: { uuid: () => string },
18
18
  private readonly projectSlug: string,
19
19
  private readonly stageId: string,
20
- private readonly schemaId?: number,
20
+ private readonly schemaId: number | undefined,
21
+ private readonly identityId: string,
22
+ private readonly userInfo: { ipAddress: string | null; userAgent: string | null },
21
23
  ) {
22
24
  }
23
25
 
@@ -45,10 +47,13 @@ export class TriggerPayloadPersister {
45
47
  payload: it,
46
48
  resolved_at: null,
47
49
  last_state_change: 'now',
50
+ identity_id: this.identityId,
51
+ ip_address: this.userInfo.ipAddress,
52
+ user_agent: this.userInfo.userAgent,
48
53
  })))
49
54
  .execute(this.client)
50
55
  }
51
56
 
52
- await this.client.query('SELECT pg_notify(?, ?)', [NOTIFY_CHANNEL_NAME, this.projectSlug])
57
+ await notify(this.client, this.projectSlug)
53
58
  }
54
59
  }
@@ -0,0 +1,6 @@
1
+ import { Client } from '@contember/database'
2
+
3
+ export const NOTIFY_CHANNEL_NAME = 'actions_event'
4
+ export const notify = async (db: Client, projectSlug: string) => {
5
+ await db.query('SELECT pg_notify(?, ?)', [NOTIFY_CHANNEL_NAME, projectSlug])
6
+ }