@contember/engine-actions 2.1.0-alpha.3 → 2.1.0-alpha.35

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 (506) hide show
  1. package/graphql.codegen.yml +2 -2
  2. package/package.json +27 -22
  3. package/src/ActionsExecutionContainerHookFactory.ts +23 -11
  4. package/src/authorization/ActionsAuthorizationActions.ts +2 -0
  5. package/src/dispatch/DispatchWorkerSupervisor.ts +17 -16
  6. package/src/dispatch/EventDispatcher.ts +0 -2
  7. package/src/dispatch/EventsRepository.ts +63 -43
  8. package/src/dispatch/ProjectDispatcher.ts +6 -11
  9. package/src/dispatch/WebhookTargetHandler.ts +18 -9
  10. package/src/dispatch/types.ts +1 -2
  11. package/src/graphql/http/ActionsApiMiddlewareFactory.ts +7 -5
  12. package/src/graphql/http/ActionsContextResolver.ts +1 -2
  13. package/src/graphql/http/ActionsGraphQLHandlerFactory.ts +0 -1
  14. package/src/graphql/http/ActionsWebsocketControllerFactory.ts +7 -5
  15. package/src/graphql/resolvers/ActionsContext.ts +1 -0
  16. package/src/graphql/resolvers/ResolversFactory.ts +9 -2
  17. package/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts +22 -0
  18. package/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts +0 -1
  19. package/src/graphql/resolvers/mutation/StopEventMutationResolver.ts +19 -0
  20. package/src/graphql/resolvers/mutation/index.ts +2 -0
  21. package/src/graphql/resolvers/query/EventsQueryResolver.ts +15 -8
  22. package/src/graphql/resolvers/query/VariablesQueryResolver.ts +0 -1
  23. package/src/graphql/schema/actions.graphql.ts +18 -4
  24. package/src/graphql/schema/index.ts +84 -30
  25. package/src/index.ts +55 -30
  26. package/src/migrations/2023-03-10-145000-actions-variables.ts +1 -1
  27. package/src/migrations/2025-05-28-160000-action-event-user.ts +16 -0
  28. package/src/migrations/index.ts +2 -0
  29. package/src/migrations/snapshot.ts +6 -3
  30. package/src/model/EventByIdQuery.ts +21 -0
  31. package/src/model/EventsToProcessSpecification.ts +9 -8
  32. package/src/model/SetVariableCommand.ts +0 -1
  33. package/src/model/types.ts +3 -0
  34. package/src/triggers/TriggerHandler.ts +16 -15
  35. package/src/triggers/TriggerIndirectChangesFetcher.ts +62 -3
  36. package/src/triggers/TriggerListeners.ts +1 -8
  37. package/src/triggers/TriggerListenersBuilder.ts +3 -6
  38. package/src/triggers/TriggerListenersStore.ts +2 -2
  39. package/src/triggers/TriggerPayloadBuilder.ts +43 -13
  40. package/src/triggers/TriggerPayloadManager.ts +2 -4
  41. package/src/triggers/TriggerPayloadPersister.ts +8 -3
  42. package/src/utils/notifyChannel.ts +6 -0
  43. package/tests/cases/unit/generator.test.ts +133 -136
  44. package/tests/cases/unit/webhookHandler.test.ts +47 -35
  45. package/dist/development/index.cjs +0 -94
  46. package/dist/development/index.cjs.map +0 -1
  47. package/dist/development/index.js +0 -94
  48. package/dist/development/index.js.map +0 -1
  49. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs +0 -30
  50. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +0 -1
  51. package/dist/development/src/ActionsExecutionContainerHookFactory.js +0 -30
  52. package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +0 -1
  53. package/dist/development/src/ImplementationException.cjs +0 -6
  54. package/dist/development/src/ImplementationException.cjs.map +0 -1
  55. package/dist/development/src/ImplementationException.js +0 -6
  56. package/dist/development/src/ImplementationException.js.map +0 -1
  57. package/dist/development/src/ListenerStoreProvider.cjs +0 -25
  58. package/dist/development/src/ListenerStoreProvider.cjs.map +0 -1
  59. package/dist/development/src/ListenerStoreProvider.js +0 -25
  60. package/dist/development/src/ListenerStoreProvider.js.map +0 -1
  61. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs +0 -15
  62. package/dist/development/src/authorization/ActionsAuthorizationActions.cjs.map +0 -1
  63. package/dist/development/src/authorization/ActionsAuthorizationActions.js +0 -16
  64. package/dist/development/src/authorization/ActionsAuthorizationActions.js.map +0 -1
  65. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs +0 -16
  66. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs.map +0 -1
  67. package/dist/development/src/authorization/ActionsPermissionsFactory.js +0 -16
  68. package/dist/development/src/authorization/ActionsPermissionsFactory.js.map +0 -1
  69. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs +0 -125
  70. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs.map +0 -1
  71. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js +0 -125
  72. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js.map +0 -1
  73. package/dist/development/src/dispatch/EventDispatcher.cjs +0 -43
  74. package/dist/development/src/dispatch/EventDispatcher.cjs.map +0 -1
  75. package/dist/development/src/dispatch/EventDispatcher.js +0 -43
  76. package/dist/development/src/dispatch/EventDispatcher.js.map +0 -1
  77. package/dist/development/src/dispatch/EventsRepository.cjs +0 -104
  78. package/dist/development/src/dispatch/EventsRepository.cjs.map +0 -1
  79. package/dist/development/src/dispatch/EventsRepository.js +0 -104
  80. package/dist/development/src/dispatch/EventsRepository.js.map +0 -1
  81. package/dist/development/src/dispatch/ProjectDispatcher.cjs +0 -99
  82. package/dist/development/src/dispatch/ProjectDispatcher.cjs.map +0 -1
  83. package/dist/development/src/dispatch/ProjectDispatcher.js +0 -99
  84. package/dist/development/src/dispatch/ProjectDispatcher.js.map +0 -1
  85. package/dist/development/src/dispatch/TargetHandlerResolver.cjs +0 -16
  86. package/dist/development/src/dispatch/TargetHandlerResolver.cjs.map +0 -1
  87. package/dist/development/src/dispatch/TargetHandlerResolver.js +0 -16
  88. package/dist/development/src/dispatch/TargetHandlerResolver.js.map +0 -1
  89. package/dist/development/src/dispatch/WebhookFetcher.cjs +0 -16
  90. package/dist/development/src/dispatch/WebhookFetcher.cjs.map +0 -1
  91. package/dist/development/src/dispatch/WebhookFetcher.js +0 -16
  92. package/dist/development/src/dispatch/WebhookFetcher.js.map +0 -1
  93. package/dist/development/src/dispatch/WebhookTargetHandler.cjs +0 -193
  94. package/dist/development/src/dispatch/WebhookTargetHandler.cjs.map +0 -1
  95. package/dist/development/src/dispatch/WebhookTargetHandler.js +0 -176
  96. package/dist/development/src/dispatch/WebhookTargetHandler.js.map +0 -1
  97. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs +0 -38
  98. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +0 -1
  99. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js +0 -38
  100. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js.map +0 -1
  101. package/dist/development/src/graphql/http/ActionsContextResolver.cjs +0 -39
  102. package/dist/development/src/graphql/http/ActionsContextResolver.cjs.map +0 -1
  103. package/dist/development/src/graphql/http/ActionsContextResolver.js +0 -39
  104. package/dist/development/src/graphql/http/ActionsContextResolver.js.map +0 -1
  105. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs +0 -20
  106. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +0 -1
  107. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js +0 -20
  108. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +0 -1
  109. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs +0 -149
  110. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +0 -1
  111. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js +0 -132
  112. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js.map +0 -1
  113. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs +0 -31
  114. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs.map +0 -1
  115. package/dist/development/src/graphql/resolvers/ResolversFactory.js +0 -31
  116. package/dist/development/src/graphql/resolvers/ResolversFactory.js.map +0 -1
  117. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs +0 -19
  118. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +0 -1
  119. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js +0 -19
  120. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +0 -1
  121. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs +0 -19
  122. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +0 -1
  123. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js +0 -19
  124. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +0 -1
  125. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs +0 -48
  126. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +0 -1
  127. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js +0 -48
  128. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js.map +0 -1
  129. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs +0 -19
  130. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +0 -1
  131. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js +0 -19
  132. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js.map +0 -1
  133. package/dist/development/src/graphql/schema/actions.graphql.cjs +0 -93
  134. package/dist/development/src/graphql/schema/actions.graphql.cjs.map +0 -1
  135. package/dist/development/src/graphql/schema/actions.graphql.js +0 -93
  136. package/dist/development/src/graphql/schema/actions.graphql.js.map +0 -1
  137. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.cjs +0 -16
  138. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.cjs.map +0 -1
  139. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.js +0 -17
  140. package/dist/development/src/migrations/2023-03-10-145000-actions-variables.js.map +0 -1
  141. package/dist/development/src/migrations/index.cjs +0 -10
  142. package/dist/development/src/migrations/index.cjs.map +0 -1
  143. package/dist/development/src/migrations/index.js +0 -10
  144. package/dist/development/src/migrations/index.js.map +0 -1
  145. package/dist/development/src/migrations/snapshot.cjs +0 -48
  146. package/dist/development/src/migrations/snapshot.cjs.map +0 -1
  147. package/dist/development/src/migrations/snapshot.js +0 -49
  148. package/dist/development/src/migrations/snapshot.js.map +0 -1
  149. package/dist/development/src/model/EventsInProcessingQuery.cjs +0 -14
  150. package/dist/development/src/model/EventsInProcessingQuery.cjs.map +0 -1
  151. package/dist/development/src/model/EventsInProcessingQuery.js +0 -14
  152. package/dist/development/src/model/EventsInProcessingQuery.js.map +0 -1
  153. package/dist/development/src/model/EventsToProcessQuery.cjs +0 -15
  154. package/dist/development/src/model/EventsToProcessQuery.cjs.map +0 -1
  155. package/dist/development/src/model/EventsToProcessQuery.js +0 -15
  156. package/dist/development/src/model/EventsToProcessQuery.js.map +0 -1
  157. package/dist/development/src/model/EventsToProcessSpecification.cjs +0 -8
  158. package/dist/development/src/model/EventsToProcessSpecification.cjs.map +0 -1
  159. package/dist/development/src/model/EventsToProcessSpecification.js +0 -8
  160. package/dist/development/src/model/EventsToProcessSpecification.js.map +0 -1
  161. package/dist/development/src/model/FailedEventsQuery.cjs +0 -14
  162. package/dist/development/src/model/FailedEventsQuery.cjs.map +0 -1
  163. package/dist/development/src/model/FailedEventsQuery.js +0 -14
  164. package/dist/development/src/model/FailedEventsQuery.js.map +0 -1
  165. package/dist/development/src/model/SetVariableCommand.cjs +0 -21
  166. package/dist/development/src/model/SetVariableCommand.cjs.map +0 -1
  167. package/dist/development/src/model/SetVariableCommand.js +0 -21
  168. package/dist/development/src/model/SetVariableCommand.js.map +0 -1
  169. package/dist/development/src/model/VariablesManager.cjs +0 -41
  170. package/dist/development/src/model/VariablesManager.cjs.map +0 -1
  171. package/dist/development/src/model/VariablesManager.js +0 -41
  172. package/dist/development/src/model/VariablesManager.js.map +0 -1
  173. package/dist/development/src/model/VariablesQuery.cjs +0 -10
  174. package/dist/development/src/model/VariablesQuery.cjs.map +0 -1
  175. package/dist/development/src/model/VariablesQuery.js +0 -10
  176. package/dist/development/src/model/VariablesQuery.js.map +0 -1
  177. package/dist/development/src/triggers/TriggerHandler.cjs +0 -126
  178. package/dist/development/src/triggers/TriggerHandler.cjs.map +0 -1
  179. package/dist/development/src/triggers/TriggerHandler.js +0 -126
  180. package/dist/development/src/triggers/TriggerHandler.js.map +0 -1
  181. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs +0 -21
  182. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs.map +0 -1
  183. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js +0 -21
  184. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js.map +0 -1
  185. package/dist/development/src/triggers/TriggerListenersBuilder.cjs +0 -169
  186. package/dist/development/src/triggers/TriggerListenersBuilder.cjs.map +0 -1
  187. package/dist/development/src/triggers/TriggerListenersBuilder.js +0 -169
  188. package/dist/development/src/triggers/TriggerListenersBuilder.js.map +0 -1
  189. package/dist/development/src/triggers/TriggerListenersFactory.cjs +0 -17
  190. package/dist/development/src/triggers/TriggerListenersFactory.cjs.map +0 -1
  191. package/dist/development/src/triggers/TriggerListenersFactory.js +0 -17
  192. package/dist/development/src/triggers/TriggerListenersFactory.js.map +0 -1
  193. package/dist/development/src/triggers/TriggerListenersStore.cjs +0 -24
  194. package/dist/development/src/triggers/TriggerListenersStore.cjs.map +0 -1
  195. package/dist/development/src/triggers/TriggerListenersStore.js +0 -24
  196. package/dist/development/src/triggers/TriggerListenersStore.js.map +0 -1
  197. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs +0 -134
  198. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs.map +0 -1
  199. package/dist/development/src/triggers/TriggerPayloadBuilder.js +0 -134
  200. package/dist/development/src/triggers/TriggerPayloadBuilder.js.map +0 -1
  201. package/dist/development/src/triggers/TriggerPayloadManager.cjs +0 -27
  202. package/dist/development/src/triggers/TriggerPayloadManager.cjs.map +0 -1
  203. package/dist/development/src/triggers/TriggerPayloadManager.js +0 -27
  204. package/dist/development/src/triggers/TriggerPayloadManager.js.map +0 -1
  205. package/dist/development/src/triggers/TriggerPayloadPersister.cjs +0 -43
  206. package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +0 -1
  207. package/dist/development/src/triggers/TriggerPayloadPersister.js +0 -43
  208. package/dist/development/src/triggers/TriggerPayloadPersister.js.map +0 -1
  209. package/dist/development/src/utils/assertNever.cjs +0 -7
  210. package/dist/development/src/utils/assertNever.cjs.map +0 -1
  211. package/dist/development/src/utils/assertNever.js +0 -7
  212. package/dist/development/src/utils/assertNever.js.map +0 -1
  213. package/dist/development/src/utils/map.cjs +0 -13
  214. package/dist/development/src/utils/map.cjs.map +0 -1
  215. package/dist/development/src/utils/map.js +0 -13
  216. package/dist/development/src/utils/map.js.map +0 -1
  217. package/dist/production/index.cjs +0 -94
  218. package/dist/production/index.cjs.map +0 -1
  219. package/dist/production/index.js +0 -94
  220. package/dist/production/index.js.map +0 -1
  221. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs +0 -30
  222. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +0 -1
  223. package/dist/production/src/ActionsExecutionContainerHookFactory.js +0 -30
  224. package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +0 -1
  225. package/dist/production/src/ImplementationException.cjs +0 -6
  226. package/dist/production/src/ImplementationException.cjs.map +0 -1
  227. package/dist/production/src/ImplementationException.js +0 -6
  228. package/dist/production/src/ImplementationException.js.map +0 -1
  229. package/dist/production/src/ListenerStoreProvider.cjs +0 -25
  230. package/dist/production/src/ListenerStoreProvider.cjs.map +0 -1
  231. package/dist/production/src/ListenerStoreProvider.js +0 -25
  232. package/dist/production/src/ListenerStoreProvider.js.map +0 -1
  233. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs +0 -15
  234. package/dist/production/src/authorization/ActionsAuthorizationActions.cjs.map +0 -1
  235. package/dist/production/src/authorization/ActionsAuthorizationActions.js +0 -16
  236. package/dist/production/src/authorization/ActionsAuthorizationActions.js.map +0 -1
  237. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs +0 -16
  238. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs.map +0 -1
  239. package/dist/production/src/authorization/ActionsPermissionsFactory.js +0 -16
  240. package/dist/production/src/authorization/ActionsPermissionsFactory.js.map +0 -1
  241. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs +0 -125
  242. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs.map +0 -1
  243. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js +0 -125
  244. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js.map +0 -1
  245. package/dist/production/src/dispatch/EventDispatcher.cjs +0 -43
  246. package/dist/production/src/dispatch/EventDispatcher.cjs.map +0 -1
  247. package/dist/production/src/dispatch/EventDispatcher.js +0 -43
  248. package/dist/production/src/dispatch/EventDispatcher.js.map +0 -1
  249. package/dist/production/src/dispatch/EventsRepository.cjs +0 -104
  250. package/dist/production/src/dispatch/EventsRepository.cjs.map +0 -1
  251. package/dist/production/src/dispatch/EventsRepository.js +0 -104
  252. package/dist/production/src/dispatch/EventsRepository.js.map +0 -1
  253. package/dist/production/src/dispatch/ProjectDispatcher.cjs +0 -99
  254. package/dist/production/src/dispatch/ProjectDispatcher.cjs.map +0 -1
  255. package/dist/production/src/dispatch/ProjectDispatcher.js +0 -99
  256. package/dist/production/src/dispatch/ProjectDispatcher.js.map +0 -1
  257. package/dist/production/src/dispatch/TargetHandlerResolver.cjs +0 -16
  258. package/dist/production/src/dispatch/TargetHandlerResolver.cjs.map +0 -1
  259. package/dist/production/src/dispatch/TargetHandlerResolver.js +0 -16
  260. package/dist/production/src/dispatch/TargetHandlerResolver.js.map +0 -1
  261. package/dist/production/src/dispatch/WebhookFetcher.cjs +0 -16
  262. package/dist/production/src/dispatch/WebhookFetcher.cjs.map +0 -1
  263. package/dist/production/src/dispatch/WebhookFetcher.js +0 -16
  264. package/dist/production/src/dispatch/WebhookFetcher.js.map +0 -1
  265. package/dist/production/src/dispatch/WebhookTargetHandler.cjs +0 -193
  266. package/dist/production/src/dispatch/WebhookTargetHandler.cjs.map +0 -1
  267. package/dist/production/src/dispatch/WebhookTargetHandler.js +0 -176
  268. package/dist/production/src/dispatch/WebhookTargetHandler.js.map +0 -1
  269. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs +0 -38
  270. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +0 -1
  271. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js +0 -38
  272. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js.map +0 -1
  273. package/dist/production/src/graphql/http/ActionsContextResolver.cjs +0 -39
  274. package/dist/production/src/graphql/http/ActionsContextResolver.cjs.map +0 -1
  275. package/dist/production/src/graphql/http/ActionsContextResolver.js +0 -39
  276. package/dist/production/src/graphql/http/ActionsContextResolver.js.map +0 -1
  277. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs +0 -20
  278. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +0 -1
  279. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js +0 -20
  280. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +0 -1
  281. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs +0 -149
  282. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +0 -1
  283. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js +0 -132
  284. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js.map +0 -1
  285. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs +0 -31
  286. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs.map +0 -1
  287. package/dist/production/src/graphql/resolvers/ResolversFactory.js +0 -31
  288. package/dist/production/src/graphql/resolvers/ResolversFactory.js.map +0 -1
  289. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs +0 -19
  290. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +0 -1
  291. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js +0 -19
  292. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +0 -1
  293. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs +0 -19
  294. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +0 -1
  295. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js +0 -19
  296. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +0 -1
  297. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs +0 -48
  298. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +0 -1
  299. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js +0 -48
  300. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js.map +0 -1
  301. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs +0 -19
  302. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +0 -1
  303. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js +0 -19
  304. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js.map +0 -1
  305. package/dist/production/src/graphql/schema/actions.graphql.cjs +0 -93
  306. package/dist/production/src/graphql/schema/actions.graphql.cjs.map +0 -1
  307. package/dist/production/src/graphql/schema/actions.graphql.js +0 -93
  308. package/dist/production/src/graphql/schema/actions.graphql.js.map +0 -1
  309. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.cjs +0 -16
  310. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.cjs.map +0 -1
  311. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.js +0 -17
  312. package/dist/production/src/migrations/2023-03-10-145000-actions-variables.js.map +0 -1
  313. package/dist/production/src/migrations/index.cjs +0 -10
  314. package/dist/production/src/migrations/index.cjs.map +0 -1
  315. package/dist/production/src/migrations/index.js +0 -10
  316. package/dist/production/src/migrations/index.js.map +0 -1
  317. package/dist/production/src/migrations/snapshot.cjs +0 -48
  318. package/dist/production/src/migrations/snapshot.cjs.map +0 -1
  319. package/dist/production/src/migrations/snapshot.js +0 -49
  320. package/dist/production/src/migrations/snapshot.js.map +0 -1
  321. package/dist/production/src/model/EventsInProcessingQuery.cjs +0 -14
  322. package/dist/production/src/model/EventsInProcessingQuery.cjs.map +0 -1
  323. package/dist/production/src/model/EventsInProcessingQuery.js +0 -14
  324. package/dist/production/src/model/EventsInProcessingQuery.js.map +0 -1
  325. package/dist/production/src/model/EventsToProcessQuery.cjs +0 -15
  326. package/dist/production/src/model/EventsToProcessQuery.cjs.map +0 -1
  327. package/dist/production/src/model/EventsToProcessQuery.js +0 -15
  328. package/dist/production/src/model/EventsToProcessQuery.js.map +0 -1
  329. package/dist/production/src/model/EventsToProcessSpecification.cjs +0 -8
  330. package/dist/production/src/model/EventsToProcessSpecification.cjs.map +0 -1
  331. package/dist/production/src/model/EventsToProcessSpecification.js +0 -8
  332. package/dist/production/src/model/EventsToProcessSpecification.js.map +0 -1
  333. package/dist/production/src/model/FailedEventsQuery.cjs +0 -14
  334. package/dist/production/src/model/FailedEventsQuery.cjs.map +0 -1
  335. package/dist/production/src/model/FailedEventsQuery.js +0 -14
  336. package/dist/production/src/model/FailedEventsQuery.js.map +0 -1
  337. package/dist/production/src/model/SetVariableCommand.cjs +0 -21
  338. package/dist/production/src/model/SetVariableCommand.cjs.map +0 -1
  339. package/dist/production/src/model/SetVariableCommand.js +0 -21
  340. package/dist/production/src/model/SetVariableCommand.js.map +0 -1
  341. package/dist/production/src/model/VariablesManager.cjs +0 -41
  342. package/dist/production/src/model/VariablesManager.cjs.map +0 -1
  343. package/dist/production/src/model/VariablesManager.js +0 -41
  344. package/dist/production/src/model/VariablesManager.js.map +0 -1
  345. package/dist/production/src/model/VariablesQuery.cjs +0 -10
  346. package/dist/production/src/model/VariablesQuery.cjs.map +0 -1
  347. package/dist/production/src/model/VariablesQuery.js +0 -10
  348. package/dist/production/src/model/VariablesQuery.js.map +0 -1
  349. package/dist/production/src/triggers/TriggerHandler.cjs +0 -126
  350. package/dist/production/src/triggers/TriggerHandler.cjs.map +0 -1
  351. package/dist/production/src/triggers/TriggerHandler.js +0 -126
  352. package/dist/production/src/triggers/TriggerHandler.js.map +0 -1
  353. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs +0 -21
  354. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs.map +0 -1
  355. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js +0 -21
  356. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js.map +0 -1
  357. package/dist/production/src/triggers/TriggerListenersBuilder.cjs +0 -169
  358. package/dist/production/src/triggers/TriggerListenersBuilder.cjs.map +0 -1
  359. package/dist/production/src/triggers/TriggerListenersBuilder.js +0 -169
  360. package/dist/production/src/triggers/TriggerListenersBuilder.js.map +0 -1
  361. package/dist/production/src/triggers/TriggerListenersFactory.cjs +0 -17
  362. package/dist/production/src/triggers/TriggerListenersFactory.cjs.map +0 -1
  363. package/dist/production/src/triggers/TriggerListenersFactory.js +0 -17
  364. package/dist/production/src/triggers/TriggerListenersFactory.js.map +0 -1
  365. package/dist/production/src/triggers/TriggerListenersStore.cjs +0 -24
  366. package/dist/production/src/triggers/TriggerListenersStore.cjs.map +0 -1
  367. package/dist/production/src/triggers/TriggerListenersStore.js +0 -24
  368. package/dist/production/src/triggers/TriggerListenersStore.js.map +0 -1
  369. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs +0 -134
  370. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs.map +0 -1
  371. package/dist/production/src/triggers/TriggerPayloadBuilder.js +0 -134
  372. package/dist/production/src/triggers/TriggerPayloadBuilder.js.map +0 -1
  373. package/dist/production/src/triggers/TriggerPayloadManager.cjs +0 -27
  374. package/dist/production/src/triggers/TriggerPayloadManager.cjs.map +0 -1
  375. package/dist/production/src/triggers/TriggerPayloadManager.js +0 -27
  376. package/dist/production/src/triggers/TriggerPayloadManager.js.map +0 -1
  377. package/dist/production/src/triggers/TriggerPayloadPersister.cjs +0 -43
  378. package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +0 -1
  379. package/dist/production/src/triggers/TriggerPayloadPersister.js +0 -43
  380. package/dist/production/src/triggers/TriggerPayloadPersister.js.map +0 -1
  381. package/dist/production/src/utils/assertNever.cjs +0 -7
  382. package/dist/production/src/utils/assertNever.cjs.map +0 -1
  383. package/dist/production/src/utils/assertNever.js +0 -7
  384. package/dist/production/src/utils/assertNever.js.map +0 -1
  385. package/dist/production/src/utils/map.cjs +0 -13
  386. package/dist/production/src/utils/map.cjs.map +0 -1
  387. package/dist/production/src/utils/map.js +0 -13
  388. package/dist/production/src/utils/map.js.map +0 -1
  389. package/dist/tests/cases/unit/generator.test.d.ts +0 -2
  390. package/dist/tests/cases/unit/generator.test.d.ts.map +0 -1
  391. package/dist/tests/cases/unit/webhookHandler.test.d.ts +0 -2
  392. package/dist/tests/cases/unit/webhookHandler.test.d.ts.map +0 -1
  393. package/dist/tests/src/gql.d.ts +0 -2
  394. package/dist/tests/src/gql.d.ts.map +0 -1
  395. package/dist/tests/src/uuid.d.ts +0 -3
  396. package/dist/tests/src/uuid.d.ts.map +0 -1
  397. package/dist/tests/tsconfig.tsbuildinfo +0 -1
  398. package/dist/types/ActionsExecutionContainerHookFactory.d.ts +0 -8
  399. package/dist/types/ActionsExecutionContainerHookFactory.d.ts.map +0 -1
  400. package/dist/types/ImplementationException.d.ts +0 -3
  401. package/dist/types/ImplementationException.d.ts.map +0 -1
  402. package/dist/types/ListenerStoreProvider.d.ts +0 -7
  403. package/dist/types/ListenerStoreProvider.d.ts.map +0 -1
  404. package/dist/types/authorization/ActionsAuthorizationActions.d.ts +0 -28
  405. package/dist/types/authorization/ActionsAuthorizationActions.d.ts.map +0 -1
  406. package/dist/types/authorization/ActionsPermissionsFactory.d.ts +0 -5
  407. package/dist/types/authorization/ActionsPermissionsFactory.d.ts.map +0 -1
  408. package/dist/types/authorization/Identity.d.ts +0 -5
  409. package/dist/types/authorization/Identity.d.ts.map +0 -1
  410. package/dist/types/authorization/index.d.ts +0 -4
  411. package/dist/types/authorization/index.d.ts.map +0 -1
  412. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts +0 -17
  413. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts.map +0 -1
  414. package/dist/types/dispatch/EventDispatcher.d.ts +0 -25
  415. package/dist/types/dispatch/EventDispatcher.d.ts.map +0 -1
  416. package/dist/types/dispatch/EventsRepository.d.ts +0 -22
  417. package/dist/types/dispatch/EventsRepository.d.ts.map +0 -1
  418. package/dist/types/dispatch/ProjectDispatcher.d.ts +0 -22
  419. package/dist/types/dispatch/ProjectDispatcher.d.ts.map +0 -1
  420. package/dist/types/dispatch/TargetHandlerResolver.d.ts +0 -9
  421. package/dist/types/dispatch/TargetHandlerResolver.d.ts.map +0 -1
  422. package/dist/types/dispatch/WebhookFetcher.d.ts +0 -14
  423. package/dist/types/dispatch/WebhookFetcher.d.ts.map +0 -1
  424. package/dist/types/dispatch/WebhookTargetHandler.d.ts +0 -16
  425. package/dist/types/dispatch/WebhookTargetHandler.d.ts.map +0 -1
  426. package/dist/types/dispatch/types.d.ts +0 -27
  427. package/dist/types/dispatch/types.d.ts.map +0 -1
  428. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts +0 -13
  429. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +0 -1
  430. package/dist/types/graphql/http/ActionsContextResolver.d.ts +0 -14
  431. package/dist/types/graphql/http/ActionsContextResolver.d.ts.map +0 -1
  432. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts +0 -8
  433. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts.map +0 -1
  434. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts +0 -11
  435. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts.map +0 -1
  436. package/dist/types/graphql/resolvers/ActionsContext.d.ts +0 -11
  437. package/dist/types/graphql/resolvers/ActionsContext.d.ts.map +0 -1
  438. package/dist/types/graphql/resolvers/ResolversFactory.d.ts +0 -13
  439. package/dist/types/graphql/resolvers/ResolversFactory.d.ts.map +0 -1
  440. package/dist/types/graphql/resolvers/index.d.ts +0 -3
  441. package/dist/types/graphql/resolvers/index.d.ts.map +0 -1
  442. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts +0 -11
  443. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts.map +0 -1
  444. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts +0 -11
  445. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts.map +0 -1
  446. package/dist/types/graphql/resolvers/mutation/index.d.ts +0 -3
  447. package/dist/types/graphql/resolvers/mutation/index.d.ts.map +0 -1
  448. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts +0 -11
  449. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts.map +0 -1
  450. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts +0 -12
  451. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts.map +0 -1
  452. package/dist/types/graphql/resolvers/query/index.d.ts +0 -2
  453. package/dist/types/graphql/resolvers/query/index.d.ts.map +0 -1
  454. package/dist/types/graphql/schema/actions.graphql.d.ts +0 -3
  455. package/dist/types/graphql/schema/actions.graphql.d.ts.map +0 -1
  456. package/dist/types/graphql/schema/index.d.ts +0 -256
  457. package/dist/types/graphql/schema/index.d.ts.map +0 -1
  458. package/dist/types/index.d.ts +0 -13
  459. package/dist/types/index.d.ts.map +0 -1
  460. package/dist/types/migrations/2023-03-10-145000-actions-variables.d.ts +0 -3
  461. package/dist/types/migrations/2023-03-10-145000-actions-variables.d.ts.map +0 -1
  462. package/dist/types/migrations/index.d.ts +0 -3
  463. package/dist/types/migrations/index.d.ts.map +0 -1
  464. package/dist/types/migrations/snapshot.d.ts +0 -3
  465. package/dist/types/migrations/snapshot.d.ts.map +0 -1
  466. package/dist/types/model/EventsInProcessingQuery.d.ts +0 -9
  467. package/dist/types/model/EventsInProcessingQuery.d.ts.map +0 -1
  468. package/dist/types/model/EventsToProcessQuery.d.ts +0 -9
  469. package/dist/types/model/EventsToProcessQuery.d.ts.map +0 -1
  470. package/dist/types/model/EventsToProcessSpecification.d.ts +0 -4
  471. package/dist/types/model/EventsToProcessSpecification.d.ts.map +0 -1
  472. package/dist/types/model/FailedEventsQuery.d.ts +0 -9
  473. package/dist/types/model/FailedEventsQuery.d.ts.map +0 -1
  474. package/dist/types/model/SetVariableCommand.d.ts +0 -8
  475. package/dist/types/model/SetVariableCommand.d.ts.map +0 -1
  476. package/dist/types/model/VariablesManager.d.ts +0 -8
  477. package/dist/types/model/VariablesManager.d.ts.map +0 -1
  478. package/dist/types/model/VariablesQuery.d.ts +0 -12
  479. package/dist/types/model/VariablesQuery.d.ts.map +0 -1
  480. package/dist/types/model/types.d.ts +0 -19
  481. package/dist/types/model/types.d.ts.map +0 -1
  482. package/dist/types/triggers/TriggerHandler.d.ts +0 -26
  483. package/dist/types/triggers/TriggerHandler.d.ts.map +0 -1
  484. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts +0 -11
  485. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts.map +0 -1
  486. package/dist/types/triggers/TriggerListeners.d.ts +0 -9
  487. package/dist/types/triggers/TriggerListeners.d.ts.map +0 -1
  488. package/dist/types/triggers/TriggerListenersBuilder.d.ts +0 -15
  489. package/dist/types/triggers/TriggerListenersBuilder.d.ts.map +0 -1
  490. package/dist/types/triggers/TriggerListenersFactory.d.ts +0 -8
  491. package/dist/types/triggers/TriggerListenersFactory.d.ts.map +0 -1
  492. package/dist/types/triggers/TriggerListenersStore.d.ts +0 -48
  493. package/dist/types/triggers/TriggerListenersStore.d.ts.map +0 -1
  494. package/dist/types/triggers/TriggerPayloadBuilder.d.ts +0 -14
  495. package/dist/types/triggers/TriggerPayloadBuilder.d.ts.map +0 -1
  496. package/dist/types/triggers/TriggerPayloadManager.d.ts +0 -21
  497. package/dist/types/triggers/TriggerPayloadManager.d.ts.map +0 -1
  498. package/dist/types/triggers/TriggerPayloadPersister.d.ts +0 -17
  499. package/dist/types/triggers/TriggerPayloadPersister.d.ts.map +0 -1
  500. package/dist/types/triggers/index.d.ts +0 -8
  501. package/dist/types/triggers/index.d.ts.map +0 -1
  502. package/dist/types/tsconfig.tsbuildinfo +0 -1
  503. package/dist/types/utils/assertNever.d.ts +0 -2
  504. package/dist/types/utils/assertNever.d.ts.map +0 -1
  505. package/dist/types/utils/map.d.ts +0 -2
  506. package/dist/types/utils/map.d.ts.map +0 -1
@@ -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
+ }