@contember/engine-actions 2.1.0-beta.2 → 2.2.0-alpha.2

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 (273) hide show
  1. package/dist/development/index.cjs.map +1 -1
  2. package/dist/development/index.js.map +1 -1
  3. package/dist/development/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
  4. package/dist/development/src/ActionsExecutionContainerHookFactory.js.map +1 -1
  5. package/dist/development/src/ListenerStoreProvider.cjs.map +1 -1
  6. package/dist/development/src/ListenerStoreProvider.js.map +1 -1
  7. package/dist/development/src/authorization/ActionsPermissionsFactory.cjs.map +1 -1
  8. package/dist/development/src/authorization/ActionsPermissionsFactory.js.map +1 -1
  9. package/dist/development/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -1
  10. package/dist/development/src/dispatch/DispatchWorkerSupervisor.js.map +1 -1
  11. package/dist/development/src/dispatch/EventDispatcher.cjs.map +1 -1
  12. package/dist/development/src/dispatch/EventDispatcher.js.map +1 -1
  13. package/dist/development/src/dispatch/EventsRepository.cjs.map +1 -1
  14. package/dist/development/src/dispatch/EventsRepository.js.map +1 -1
  15. package/dist/development/src/dispatch/LazyDispatchWorker.cjs.map +1 -1
  16. package/dist/development/src/dispatch/LazyDispatchWorker.js.map +1 -1
  17. package/dist/development/src/dispatch/ProjectDispatcher.cjs.map +1 -1
  18. package/dist/development/src/dispatch/ProjectDispatcher.js.map +1 -1
  19. package/dist/development/src/dispatch/TargetHandlerResolver.cjs.map +1 -1
  20. package/dist/development/src/dispatch/TargetHandlerResolver.js.map +1 -1
  21. package/dist/development/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
  22. package/dist/development/src/dispatch/WebhookTargetHandler.js.map +1 -1
  23. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
  24. package/dist/development/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
  25. package/dist/development/src/graphql/http/ActionsContextResolver.cjs.map +1 -1
  26. package/dist/development/src/graphql/http/ActionsContextResolver.js.map +1 -1
  27. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -1
  28. package/dist/development/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -1
  29. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -1
  30. package/dist/development/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -1
  31. package/dist/development/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
  32. package/dist/development/src/graphql/resolvers/ResolversFactory.js.map +1 -1
  33. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -1
  34. package/dist/development/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -1
  35. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -1
  36. package/dist/development/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -1
  37. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -1
  38. package/dist/development/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -1
  39. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -1
  40. package/dist/development/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -1
  41. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  42. package/dist/development/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
  43. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -1
  44. package/dist/development/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -1
  45. package/dist/development/src/migrations/index.cjs.map +1 -1
  46. package/dist/development/src/migrations/index.js.map +1 -1
  47. package/dist/development/src/model/EventByIdQuery.cjs.map +1 -1
  48. package/dist/development/src/model/EventByIdQuery.js.map +1 -1
  49. package/dist/development/src/model/EventsInProcessingQuery.cjs.map +1 -1
  50. package/dist/development/src/model/EventsInProcessingQuery.js.map +1 -1
  51. package/dist/development/src/model/EventsToProcessQuery.cjs.map +1 -1
  52. package/dist/development/src/model/EventsToProcessQuery.js.map +1 -1
  53. package/dist/development/src/model/FailedEventsQuery.cjs.map +1 -1
  54. package/dist/development/src/model/FailedEventsQuery.js.map +1 -1
  55. package/dist/development/src/model/VariablesManager.cjs.map +1 -1
  56. package/dist/development/src/model/VariablesManager.js.map +1 -1
  57. package/dist/development/src/triggers/TriggerHandler.cjs.map +1 -1
  58. package/dist/development/src/triggers/TriggerHandler.js.map +1 -1
  59. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
  60. package/dist/development/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
  61. package/dist/development/src/triggers/TriggerListenersBuilder.cjs.map +1 -1
  62. package/dist/development/src/triggers/TriggerListenersBuilder.js.map +1 -1
  63. package/dist/development/src/triggers/TriggerListenersFactory.cjs.map +1 -1
  64. package/dist/development/src/triggers/TriggerListenersFactory.js.map +1 -1
  65. package/dist/development/src/triggers/TriggerListenersStore.cjs.map +1 -1
  66. package/dist/development/src/triggers/TriggerListenersStore.js.map +1 -1
  67. package/dist/development/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
  68. package/dist/development/src/triggers/TriggerPayloadBuilder.js.map +1 -1
  69. package/dist/development/src/triggers/TriggerPayloadManager.cjs.map +1 -1
  70. package/dist/development/src/triggers/TriggerPayloadManager.js.map +1 -1
  71. package/dist/development/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
  72. package/dist/development/src/triggers/TriggerPayloadPersister.js.map +1 -1
  73. package/dist/production/index.cjs.map +1 -1
  74. package/dist/production/index.js.map +1 -1
  75. package/dist/production/src/ActionsExecutionContainerHookFactory.cjs.map +1 -1
  76. package/dist/production/src/ActionsExecutionContainerHookFactory.js.map +1 -1
  77. package/dist/production/src/ListenerStoreProvider.cjs.map +1 -1
  78. package/dist/production/src/ListenerStoreProvider.js.map +1 -1
  79. package/dist/production/src/authorization/ActionsPermissionsFactory.cjs.map +1 -1
  80. package/dist/production/src/authorization/ActionsPermissionsFactory.js.map +1 -1
  81. package/dist/production/src/dispatch/DispatchWorkerSupervisor.cjs.map +1 -1
  82. package/dist/production/src/dispatch/DispatchWorkerSupervisor.js.map +1 -1
  83. package/dist/production/src/dispatch/EventDispatcher.cjs.map +1 -1
  84. package/dist/production/src/dispatch/EventDispatcher.js.map +1 -1
  85. package/dist/production/src/dispatch/EventsRepository.cjs.map +1 -1
  86. package/dist/production/src/dispatch/EventsRepository.js.map +1 -1
  87. package/dist/production/src/dispatch/LazyDispatchWorker.cjs.map +1 -1
  88. package/dist/production/src/dispatch/LazyDispatchWorker.js.map +1 -1
  89. package/dist/production/src/dispatch/ProjectDispatcher.cjs.map +1 -1
  90. package/dist/production/src/dispatch/ProjectDispatcher.js.map +1 -1
  91. package/dist/production/src/dispatch/TargetHandlerResolver.cjs.map +1 -1
  92. package/dist/production/src/dispatch/TargetHandlerResolver.js.map +1 -1
  93. package/dist/production/src/dispatch/WebhookTargetHandler.cjs.map +1 -1
  94. package/dist/production/src/dispatch/WebhookTargetHandler.js.map +1 -1
  95. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.cjs.map +1 -1
  96. package/dist/production/src/graphql/http/ActionsApiMiddlewareFactory.js.map +1 -1
  97. package/dist/production/src/graphql/http/ActionsContextResolver.cjs.map +1 -1
  98. package/dist/production/src/graphql/http/ActionsContextResolver.js.map +1 -1
  99. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.cjs.map +1 -1
  100. package/dist/production/src/graphql/http/ActionsGraphQLHandlerFactory.js.map +1 -1
  101. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.cjs.map +1 -1
  102. package/dist/production/src/graphql/http/ActionsWebsocketControllerFactory.js.map +1 -1
  103. package/dist/production/src/graphql/resolvers/ResolversFactory.cjs.map +1 -1
  104. package/dist/production/src/graphql/resolvers/ResolversFactory.js.map +1 -1
  105. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.cjs.map +1 -1
  106. package/dist/production/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.js.map +1 -1
  107. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.cjs.map +1 -1
  108. package/dist/production/src/graphql/resolvers/mutation/RetryEventMutationResolver.js.map +1 -1
  109. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.cjs.map +1 -1
  110. package/dist/production/src/graphql/resolvers/mutation/SetVariablesMutationResolver.js.map +1 -1
  111. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.cjs.map +1 -1
  112. package/dist/production/src/graphql/resolvers/mutation/StopEventMutationResolver.js.map +1 -1
  113. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  114. package/dist/production/src/graphql/resolvers/query/EventsQueryResolver.js.map +1 -1
  115. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.cjs.map +1 -1
  116. package/dist/production/src/graphql/resolvers/query/VariablesQueryResolver.js.map +1 -1
  117. package/dist/production/src/migrations/index.cjs.map +1 -1
  118. package/dist/production/src/migrations/index.js.map +1 -1
  119. package/dist/production/src/model/EventByIdQuery.cjs.map +1 -1
  120. package/dist/production/src/model/EventByIdQuery.js.map +1 -1
  121. package/dist/production/src/model/EventsInProcessingQuery.cjs.map +1 -1
  122. package/dist/production/src/model/EventsInProcessingQuery.js.map +1 -1
  123. package/dist/production/src/model/EventsToProcessQuery.cjs.map +1 -1
  124. package/dist/production/src/model/EventsToProcessQuery.js.map +1 -1
  125. package/dist/production/src/model/FailedEventsQuery.cjs.map +1 -1
  126. package/dist/production/src/model/FailedEventsQuery.js.map +1 -1
  127. package/dist/production/src/model/VariablesManager.cjs.map +1 -1
  128. package/dist/production/src/model/VariablesManager.js.map +1 -1
  129. package/dist/production/src/triggers/TriggerHandler.cjs.map +1 -1
  130. package/dist/production/src/triggers/TriggerHandler.js.map +1 -1
  131. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.cjs.map +1 -1
  132. package/dist/production/src/triggers/TriggerIndirectChangesFetcher.js.map +1 -1
  133. package/dist/production/src/triggers/TriggerListenersBuilder.cjs.map +1 -1
  134. package/dist/production/src/triggers/TriggerListenersBuilder.js.map +1 -1
  135. package/dist/production/src/triggers/TriggerListenersFactory.cjs.map +1 -1
  136. package/dist/production/src/triggers/TriggerListenersFactory.js.map +1 -1
  137. package/dist/production/src/triggers/TriggerListenersStore.cjs.map +1 -1
  138. package/dist/production/src/triggers/TriggerListenersStore.js.map +1 -1
  139. package/dist/production/src/triggers/TriggerPayloadBuilder.cjs.map +1 -1
  140. package/dist/production/src/triggers/TriggerPayloadBuilder.js.map +1 -1
  141. package/dist/production/src/triggers/TriggerPayloadManager.cjs.map +1 -1
  142. package/dist/production/src/triggers/TriggerPayloadManager.js.map +1 -1
  143. package/dist/production/src/triggers/TriggerPayloadPersister.cjs.map +1 -1
  144. package/dist/production/src/triggers/TriggerPayloadPersister.js.map +1 -1
  145. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  146. package/dist/types/ActionsExecutionContainerHookFactory.d.ts +1 -1
  147. package/dist/types/ActionsExecutionContainerHookFactory.d.ts.map +1 -1
  148. package/dist/types/ListenerStoreProvider.d.ts +1 -1
  149. package/dist/types/ListenerStoreProvider.d.ts.map +1 -1
  150. package/dist/types/authorization/index.d.ts +3 -3
  151. package/dist/types/authorization/index.d.ts.map +1 -1
  152. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts +1 -1
  153. package/dist/types/dispatch/DispatchWorkerSupervisor.d.ts.map +1 -1
  154. package/dist/types/dispatch/EventDispatcher.d.ts +3 -3
  155. package/dist/types/dispatch/EventDispatcher.d.ts.map +1 -1
  156. package/dist/types/dispatch/EventsRepository.d.ts +1 -1
  157. package/dist/types/dispatch/EventsRepository.d.ts.map +1 -1
  158. package/dist/types/dispatch/LazyDispatchWorker.d.ts +1 -1
  159. package/dist/types/dispatch/LazyDispatchWorker.d.ts.map +1 -1
  160. package/dist/types/dispatch/ProjectDispatcher.d.ts +1 -1
  161. package/dist/types/dispatch/ProjectDispatcher.d.ts.map +1 -1
  162. package/dist/types/dispatch/TargetHandlerResolver.d.ts +2 -2
  163. package/dist/types/dispatch/TargetHandlerResolver.d.ts.map +1 -1
  164. package/dist/types/dispatch/WebhookTargetHandler.d.ts +2 -2
  165. package/dist/types/dispatch/WebhookTargetHandler.d.ts.map +1 -1
  166. package/dist/types/dispatch/types.d.ts +2 -2
  167. package/dist/types/dispatch/types.d.ts.map +1 -1
  168. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts +3 -3
  169. package/dist/types/graphql/http/ActionsApiMiddlewareFactory.d.ts.map +1 -1
  170. package/dist/types/graphql/http/ActionsContextResolver.d.ts +1 -1
  171. package/dist/types/graphql/http/ActionsContextResolver.d.ts.map +1 -1
  172. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts +2 -2
  173. package/dist/types/graphql/http/ActionsGraphQLHandlerFactory.d.ts.map +1 -1
  174. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts +2 -2
  175. package/dist/types/graphql/http/ActionsWebsocketControllerFactory.d.ts.map +1 -1
  176. package/dist/types/graphql/resolvers/ResolversFactory.d.ts +4 -4
  177. package/dist/types/graphql/resolvers/ResolversFactory.d.ts.map +1 -1
  178. package/dist/types/graphql/resolvers/index.d.ts +2 -2
  179. package/dist/types/graphql/resolvers/index.d.ts.map +1 -1
  180. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts +3 -3
  181. package/dist/types/graphql/resolvers/mutation/ProcessBatchMutationResolver.d.ts.map +1 -1
  182. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts +3 -3
  183. package/dist/types/graphql/resolvers/mutation/RetryEventMutationResolver.d.ts.map +1 -1
  184. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts +3 -3
  185. package/dist/types/graphql/resolvers/mutation/SetVariablesMutationResolver.d.ts.map +1 -1
  186. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts +3 -3
  187. package/dist/types/graphql/resolvers/mutation/StopEventMutationResolver.d.ts.map +1 -1
  188. package/dist/types/graphql/resolvers/mutation/index.d.ts +4 -4
  189. package/dist/types/graphql/resolvers/mutation/index.d.ts.map +1 -1
  190. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts +2 -2
  191. package/dist/types/graphql/resolvers/query/EventsQueryResolver.d.ts.map +1 -1
  192. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts +3 -3
  193. package/dist/types/graphql/resolvers/query/VariablesQueryResolver.d.ts.map +1 -1
  194. package/dist/types/graphql/resolvers/query/index.d.ts +1 -1
  195. package/dist/types/graphql/resolvers/query/index.d.ts.map +1 -1
  196. package/dist/types/index.d.ts +3 -3
  197. package/dist/types/index.d.ts.map +1 -1
  198. package/dist/types/model/EventByIdQuery.d.ts +1 -1
  199. package/dist/types/model/EventByIdQuery.d.ts.map +1 -1
  200. package/dist/types/model/EventsInProcessingQuery.d.ts +2 -2
  201. package/dist/types/model/EventsInProcessingQuery.d.ts.map +1 -1
  202. package/dist/types/model/EventsToProcessQuery.d.ts +2 -2
  203. package/dist/types/model/EventsToProcessQuery.d.ts.map +1 -1
  204. package/dist/types/model/FailedEventsQuery.d.ts +2 -2
  205. package/dist/types/model/FailedEventsQuery.d.ts.map +1 -1
  206. package/dist/types/model/VariablesManager.d.ts +1 -1
  207. package/dist/types/model/VariablesManager.d.ts.map +1 -1
  208. package/dist/types/triggers/TriggerHandler.d.ts +3 -3
  209. package/dist/types/triggers/TriggerHandler.d.ts.map +1 -1
  210. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts +1 -1
  211. package/dist/types/triggers/TriggerIndirectChangesFetcher.d.ts.map +1 -1
  212. package/dist/types/triggers/TriggerListeners.d.ts +1 -1
  213. package/dist/types/triggers/TriggerListeners.d.ts.map +1 -1
  214. package/dist/types/triggers/TriggerListenersBuilder.d.ts +1 -1
  215. package/dist/types/triggers/TriggerListenersBuilder.d.ts.map +1 -1
  216. package/dist/types/triggers/TriggerListenersFactory.d.ts +1 -1
  217. package/dist/types/triggers/TriggerListenersFactory.d.ts.map +1 -1
  218. package/dist/types/triggers/TriggerListenersStore.d.ts +1 -1
  219. package/dist/types/triggers/TriggerListenersStore.d.ts.map +1 -1
  220. package/dist/types/triggers/TriggerPayloadBuilder.d.ts +1 -1
  221. package/dist/types/triggers/TriggerPayloadBuilder.d.ts.map +1 -1
  222. package/dist/types/triggers/TriggerPayloadManager.d.ts +4 -4
  223. package/dist/types/triggers/TriggerPayloadManager.d.ts.map +1 -1
  224. package/dist/types/triggers/index.d.ts +7 -7
  225. package/dist/types/triggers/index.d.ts.map +1 -1
  226. package/dist/types/tsconfig.tsbuildinfo +1 -1
  227. package/package.json +15 -15
  228. package/src/ActionsExecutionContainerHookFactory.ts +4 -4
  229. package/src/ListenerStoreProvider.ts +1 -1
  230. package/src/authorization/ActionsPermissionsFactory.ts +1 -1
  231. package/src/authorization/index.ts +3 -3
  232. package/src/dispatch/DispatchWorkerSupervisor.ts +2 -2
  233. package/src/dispatch/EventDispatcher.ts +4 -4
  234. package/src/dispatch/EventsRepository.ts +3 -3
  235. package/src/dispatch/LazyDispatchWorker.ts +1 -1
  236. package/src/dispatch/ProjectDispatcher.ts +2 -2
  237. package/src/dispatch/TargetHandlerResolver.ts +3 -3
  238. package/src/dispatch/WebhookTargetHandler.ts +3 -3
  239. package/src/dispatch/types.ts +2 -2
  240. package/src/graphql/http/ActionsApiMiddlewareFactory.ts +4 -4
  241. package/src/graphql/http/ActionsContextResolver.ts +1 -1
  242. package/src/graphql/http/ActionsGraphQLHandlerFactory.ts +3 -2
  243. package/src/graphql/http/ActionsWebsocketControllerFactory.ts +2 -2
  244. package/src/graphql/resolvers/ResolversFactory.ts +10 -5
  245. package/src/graphql/resolvers/index.ts +2 -2
  246. package/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts +4 -4
  247. package/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts +5 -5
  248. package/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts +4 -4
  249. package/src/graphql/resolvers/mutation/StopEventMutationResolver.ts +4 -4
  250. package/src/graphql/resolvers/mutation/index.ts +4 -4
  251. package/src/graphql/resolvers/query/EventsQueryResolver.ts +8 -8
  252. package/src/graphql/resolvers/query/VariablesQueryResolver.ts +4 -4
  253. package/src/graphql/resolvers/query/index.ts +1 -1
  254. package/src/index.ts +29 -23
  255. package/src/migrations/index.ts +3 -3
  256. package/src/model/EventByIdQuery.ts +1 -1
  257. package/src/model/EventsInProcessingQuery.ts +2 -2
  258. package/src/model/EventsToProcessQuery.ts +3 -3
  259. package/src/model/FailedEventsQuery.ts +2 -2
  260. package/src/model/VariablesManager.ts +3 -3
  261. package/src/triggers/TriggerHandler.ts +3 -3
  262. package/src/triggers/TriggerIndirectChangesFetcher.ts +1 -1
  263. package/src/triggers/TriggerListeners.ts +1 -1
  264. package/src/triggers/TriggerListenersBuilder.ts +4 -4
  265. package/src/triggers/TriggerListenersFactory.ts +2 -2
  266. package/src/triggers/TriggerListenersStore.ts +1 -1
  267. package/src/triggers/TriggerPayloadBuilder.ts +3 -3
  268. package/src/triggers/TriggerPayloadManager.ts +4 -4
  269. package/src/triggers/TriggerPayloadPersister.ts +2 -2
  270. package/src/triggers/index.ts +7 -7
  271. package/tests/cases/unit/generator.test.ts +1 -1
  272. package/tests/cases/unit/lazyDispatchWorker.test.ts +2 -2
  273. package/tests/cases/unit/webhookHandler.test.ts +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookTargetHandler.cjs","sources":["../../../../../packages/engine-actions/src/dispatch/WebhookTargetHandler.ts"],"sourcesContent":["import { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow, HandledEvent, InvokeHandler, InvokeHandlerArgs } from './types'\nimport { VariablesMap } from '../model/VariablesManager'\nimport * as Typesafe from '@contember/typesafe'\nimport { FetcherResponse, WebhookFetcher } from './WebhookFetcher'\n\nconst DEFAULT_TIMEOUT_MS = 30_000 // 30 seconds\n\nconst ResponseType = Typesafe.noExtraProps(Typesafe.object({\n\tfailures: Typesafe.array(\n\t\tTypesafe.intersection(\n\t\t\tTypesafe.object({\n\t\t\t\teventId: Typesafe.string,\n\t\t\t}),\n\t\t\tTypesafe.partial({\n\t\t\t\terror: Typesafe.string,\n\t\t\t}),\n\t\t),\n\t),\n}))\n\ntype EventResponseFactory = (eventRow: EventRow) => { ok: boolean; code?: number; response?: string; errorMessage?: string; durationMs?: number }\n\nexport class WebhookTargetHandler implements InvokeHandler<Actions.WebhookTarget> {\n\tconstructor(\n\t\tprivate readonly fetcher: WebhookFetcher,\n\t) {\n\t}\n\n\tpublic async handle({ target, events, logger, variables }: InvokeHandlerArgs<Actions.WebhookTarget>): Promise<HandledEvent[]> {\n\t\tconst timeoutMs = target.timeoutMs\n\n\t\tconst start = process.hrtime.bigint()\n\t\tconst getDuration = () => Math.floor(Number((process.hrtime.bigint() - start) / BigInt(1_000_000)))\n\n\t\tlet eventResponseFactory: EventResponseFactory\n\t\ttry {\n\t\t\tconst response = await this.fetch(timeoutMs ?? DEFAULT_TIMEOUT_MS, target, variables, events)\n\n\t\t\teventResponseFactory = this.createResponseFactory({\n\t\t\t\tresponse: response,\n\t\t\t\tevents,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tlogger.warn(e)\n\t\t\tconst errorMessages = this.extractErrorMessages(e)\n\t\t\tconst result = {\n\t\t\t\tok: false,\n\t\t\t\terrorMessage: errorMessages.length ? errorMessages.join('; ') : undefined,\n\t\t\t\tdurationMs: getDuration(),\n\t\t\t}\n\t\t\teventResponseFactory = () => ({ ok: false, errorMessage: errorMessages.length ? errorMessages.join('; ') : undefined })\n\n\t\t\treturn events.map(it => ({ target, row: it, result }))\n\t\t}\n\t\tconst durationMs = getDuration()\n\n\t\treturn events.map(it => ({ target, row: it, result: { durationMs, ...eventResponseFactory(it) } }))\n\t}\n\n\tprivate createResponseFactory({ response, events }: {\n\t\tresponse: FetcherResponse\n\t\tevents: EventRow[]\n\t}): EventResponseFactory {\n\t\tif (!response.ok) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: response.statusText,\n\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tresponse.responseText.trim() === ''\n\t\t\t|| !response.headers.get('content-type')?.toLowerCase().includes('json')\n\t\t) {\n\t\t\treturn () => ({\n\t\t\t\tok: true,\n\t\t\t\tcode: response.status,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsedJson = JSON.parse(response.responseText)\n\t\t\tif (parsedJson === null || typeof parsedJson !== 'object' || !('failures' in parsedJson)) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: true,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst responseData = ResponseType(parsedJson)\n\t\t\tconst eventsInBatch = new Set(events.map(it => it.id))\n\t\t\tconst failedEvents = Object.fromEntries(responseData.failures?.map(it => [it.eventId, it]) ?? [])\n\t\t\tconst missingEvents = Object.keys(failedEvents).filter(it => !eventsInBatch.has(it))\n\n\t\t\tif (missingEvents.length) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\tresponse: response.responseText,\n\t\t\t\t\terrorMessage: 'Invalid response: undefined events IDs: ' + missingEvents.join('; '),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn it => {\n\t\t\t\tif (!failedEvents[it.id]) {\n\t\t\t\t\treturn { ok: true, code: response.status }\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\terrorMessage: failedEvents[it.id].error,\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: 'Invalid response: ' + e.message,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate extractErrorMessages(e: unknown): string[] {\n\t\tconst errorMessages = []\n\t\tlet err = e\n\t\twhile (typeof err === 'object' && err !== null && 'message' in err && typeof (err as any).message === 'string') {\n\t\t\terrorMessages.push((err as any).message)\n\t\t\terr = (err as any).cause\n\t\t}\n\t\treturn errorMessages\n\t}\n\n\tprivate async fetch(timeoutMs: number, target: Actions.WebhookTarget, variables: VariablesMap, events: EventRow[]): Promise<FetcherResponse> {\n\t\treturn await withTimeout(timeoutMs, async abortController => {\n\t\t\treturn await this.doFetch(target, variables, abortController, events)\n\t\t})\n\t}\n\n\tprivate async doFetch(\n\t\ttarget: Actions.WebhookTarget,\n\t\tvariables: VariablesMap,\n\t\tabortController: AbortController,\n\t\tevents: EventRow[],\n\t): Promise<FetcherResponse> {\n\t\tconst resolvedUrl = this.resolveVariables(target.url, variables)\n\t\tconst resolvedHeaders = Object.fromEntries(\n\t\t\tObject.entries(target.headers ?? {})\n\t\t\t\t.map(([key, value]) => [key, this.resolveVariables(value, variables)]),\n\t\t)\n\n\t\treturn await this.fetcher.fetch(resolvedUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t['User-Agent']: 'Contember Actions',\n\t\t\t\t...resolvedHeaders,\n\t\t\t\t['Content-type']: 'application/json',\n\t\t\t},\n\t\t\tsignal: abortController.signal,\n\t\t\tbody: this.formatBody(events, target),\n\t\t})\n\t}\n\n\tprivate formatBody(events: EventRow[], target: Actions.WebhookTarget): string {\n\t\tconst body = target.body ?? {}\n\t\tconst path = target.payloadPath ?? []\n\t\tlet current: any = body\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tcurrent[path[i]] ??= {}\n\t\t\tcurrent = current[path[i]]\n\t\t}\n\t\tcurrent['events'] = events.map(this.formatEventPayload)\n\t\treturn JSON.stringify(body)\n\t}\n\n\tprivate formatEventPayload(it: EventRow): ActionsPayload.WebhookEvent {\n\t\treturn {\n\t\t\tmeta: {\n\t\t\t\teventId: it.id,\n\t\t\t\ttransactionId: it.transaction_id,\n\t\t\t\tidentityId: it.identity_id ?? null,\n\t\t\t\tipAddress: it.ip_address ?? null,\n\t\t\t\tuserAgent: it.user_agent ?? null,\n\t\t\t\tcreatedAt: it.created_at.toISOString(),\n\t\t\t\tlastStateChange: it.last_state_change.toISOString(),\n\t\t\t\tnumRetries: it.num_retries,\n\t\t\t\ttrigger: it.trigger,\n\t\t\t\ttarget: it.target,\n\t\t\t\t// todo: add stage and schema version\n\t\t\t},\n\t\t\t...it.payload,\n\t\t}\n\t}\n\n\tprivate resolveVariables(subject: string, variables: VariablesMap) {\n\t\treturn subject.replace(/\\{\\{([\\w_]+)}}/gm, (_, name) => {\n\t\t\tif (!variables[name]) {\n\t\t\t\tthrow new Error(`Undefined variable ${name}`)\n\t\t\t}\n\t\t\treturn variables[name]\n\t\t})\n\t}\n}\n\nconst withTimeout = async <T>(timeoutMs: number, cb: (abortController: AbortController) => Promise<T>): Promise<T> => {\n\tconst abortController = new AbortController()\n\tconst timeoutId = setTimeout(() => {\n\t\tabortController.abort()\n\t}, timeoutMs)\n\ttry {\n\t\treturn await cb(abortController)\n\t} finally {\n\t\tclearTimeout(timeoutId)\n\t}\n}\n"],"names":["Typesafe"],"mappings":"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"}
1
+ {"version":3,"file":"WebhookTargetHandler.cjs","sources":["../../../../../packages/engine-actions/src/dispatch/WebhookTargetHandler.ts"],"sourcesContent":["import { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow, HandledEvent, InvokeHandler, InvokeHandlerArgs } from './types.js'\nimport { VariablesMap } from '../model/VariablesManager.js'\nimport * as Typesafe from '@contember/typesafe'\nimport { FetcherResponse, WebhookFetcher } from './WebhookFetcher.js'\n\nconst DEFAULT_TIMEOUT_MS = 30_000 // 30 seconds\n\nconst ResponseType = Typesafe.noExtraProps(Typesafe.object({\n\tfailures: Typesafe.array(\n\t\tTypesafe.intersection(\n\t\t\tTypesafe.object({\n\t\t\t\teventId: Typesafe.string,\n\t\t\t}),\n\t\t\tTypesafe.partial({\n\t\t\t\terror: Typesafe.string,\n\t\t\t}),\n\t\t),\n\t),\n}))\n\ntype EventResponseFactory = (eventRow: EventRow) => { ok: boolean; code?: number; response?: string; errorMessage?: string; durationMs?: number }\n\nexport class WebhookTargetHandler implements InvokeHandler<Actions.WebhookTarget> {\n\tconstructor(\n\t\tprivate readonly fetcher: WebhookFetcher,\n\t) {\n\t}\n\n\tpublic async handle({ target, events, logger, variables }: InvokeHandlerArgs<Actions.WebhookTarget>): Promise<HandledEvent[]> {\n\t\tconst timeoutMs = target.timeoutMs\n\n\t\tconst start = process.hrtime.bigint()\n\t\tconst getDuration = () => Math.floor(Number((process.hrtime.bigint() - start) / BigInt(1_000_000)))\n\n\t\tlet eventResponseFactory: EventResponseFactory\n\t\ttry {\n\t\t\tconst response = await this.fetch(timeoutMs ?? DEFAULT_TIMEOUT_MS, target, variables, events)\n\n\t\t\teventResponseFactory = this.createResponseFactory({\n\t\t\t\tresponse: response,\n\t\t\t\tevents,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tlogger.warn(e)\n\t\t\tconst errorMessages = this.extractErrorMessages(e)\n\t\t\tconst result = {\n\t\t\t\tok: false,\n\t\t\t\terrorMessage: errorMessages.length ? errorMessages.join('; ') : undefined,\n\t\t\t\tdurationMs: getDuration(),\n\t\t\t}\n\t\t\teventResponseFactory = () => ({ ok: false, errorMessage: errorMessages.length ? errorMessages.join('; ') : undefined })\n\n\t\t\treturn events.map(it => ({ target, row: it, result }))\n\t\t}\n\t\tconst durationMs = getDuration()\n\n\t\treturn events.map(it => ({ target, row: it, result: { durationMs, ...eventResponseFactory(it) } }))\n\t}\n\n\tprivate createResponseFactory({ response, events }: {\n\t\tresponse: FetcherResponse\n\t\tevents: EventRow[]\n\t}): EventResponseFactory {\n\t\tif (!response.ok) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: response.statusText,\n\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tresponse.responseText.trim() === ''\n\t\t\t|| !response.headers.get('content-type')?.toLowerCase().includes('json')\n\t\t) {\n\t\t\treturn () => ({\n\t\t\t\tok: true,\n\t\t\t\tcode: response.status,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsedJson = JSON.parse(response.responseText)\n\t\t\tif (parsedJson === null || typeof parsedJson !== 'object' || !('failures' in parsedJson)) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: true,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst responseData = ResponseType(parsedJson)\n\t\t\tconst eventsInBatch = new Set(events.map(it => it.id))\n\t\t\tconst failedEvents = Object.fromEntries(responseData.failures?.map(it => [it.eventId, it]) ?? [])\n\t\t\tconst missingEvents = Object.keys(failedEvents).filter(it => !eventsInBatch.has(it))\n\n\t\t\tif (missingEvents.length) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\tresponse: response.responseText,\n\t\t\t\t\terrorMessage: 'Invalid response: undefined events IDs: ' + missingEvents.join('; '),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn it => {\n\t\t\t\tif (!failedEvents[it.id]) {\n\t\t\t\t\treturn { ok: true, code: response.status }\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\terrorMessage: failedEvents[it.id].error,\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: 'Invalid response: ' + e.message,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate extractErrorMessages(e: unknown): string[] {\n\t\tconst errorMessages = []\n\t\tlet err = e\n\t\twhile (typeof err === 'object' && err !== null && 'message' in err && typeof (err as any).message === 'string') {\n\t\t\terrorMessages.push((err as any).message)\n\t\t\terr = (err as any).cause\n\t\t}\n\t\treturn errorMessages\n\t}\n\n\tprivate async fetch(timeoutMs: number, target: Actions.WebhookTarget, variables: VariablesMap, events: EventRow[]): Promise<FetcherResponse> {\n\t\treturn await withTimeout(timeoutMs, async abortController => {\n\t\t\treturn await this.doFetch(target, variables, abortController, events)\n\t\t})\n\t}\n\n\tprivate async doFetch(\n\t\ttarget: Actions.WebhookTarget,\n\t\tvariables: VariablesMap,\n\t\tabortController: AbortController,\n\t\tevents: EventRow[],\n\t): Promise<FetcherResponse> {\n\t\tconst resolvedUrl = this.resolveVariables(target.url, variables)\n\t\tconst resolvedHeaders = Object.fromEntries(\n\t\t\tObject.entries(target.headers ?? {})\n\t\t\t\t.map(([key, value]) => [key, this.resolveVariables(value, variables)]),\n\t\t)\n\n\t\treturn await this.fetcher.fetch(resolvedUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t['User-Agent']: 'Contember Actions',\n\t\t\t\t...resolvedHeaders,\n\t\t\t\t['Content-type']: 'application/json',\n\t\t\t},\n\t\t\tsignal: abortController.signal,\n\t\t\tbody: this.formatBody(events, target),\n\t\t})\n\t}\n\n\tprivate formatBody(events: EventRow[], target: Actions.WebhookTarget): string {\n\t\tconst body = target.body ?? {}\n\t\tconst path = target.payloadPath ?? []\n\t\tlet current: any = body\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tcurrent[path[i]] ??= {}\n\t\t\tcurrent = current[path[i]]\n\t\t}\n\t\tcurrent['events'] = events.map(this.formatEventPayload)\n\t\treturn JSON.stringify(body)\n\t}\n\n\tprivate formatEventPayload(it: EventRow): ActionsPayload.WebhookEvent {\n\t\treturn {\n\t\t\tmeta: {\n\t\t\t\teventId: it.id,\n\t\t\t\ttransactionId: it.transaction_id,\n\t\t\t\tidentityId: it.identity_id ?? null,\n\t\t\t\tipAddress: it.ip_address ?? null,\n\t\t\t\tuserAgent: it.user_agent ?? null,\n\t\t\t\tcreatedAt: it.created_at.toISOString(),\n\t\t\t\tlastStateChange: it.last_state_change.toISOString(),\n\t\t\t\tnumRetries: it.num_retries,\n\t\t\t\ttrigger: it.trigger,\n\t\t\t\ttarget: it.target,\n\t\t\t\t// todo: add stage and schema version\n\t\t\t},\n\t\t\t...it.payload,\n\t\t}\n\t}\n\n\tprivate resolveVariables(subject: string, variables: VariablesMap) {\n\t\treturn subject.replace(/\\{\\{([\\w_]+)}}/gm, (_, name) => {\n\t\t\tif (!variables[name]) {\n\t\t\t\tthrow new Error(`Undefined variable ${name}`)\n\t\t\t}\n\t\t\treturn variables[name]\n\t\t})\n\t}\n}\n\nconst withTimeout = async <T>(timeoutMs: number, cb: (abortController: AbortController) => Promise<T>): Promise<T> => {\n\tconst abortController = new AbortController()\n\tconst timeoutId = setTimeout(() => {\n\t\tabortController.abort()\n\t}, timeoutMs)\n\ttry {\n\t\treturn await cb(abortController)\n\t} finally {\n\t\tclearTimeout(timeoutId)\n\t}\n}\n"],"names":["Typesafe"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"WebhookTargetHandler.js","sources":["../../../../../packages/engine-actions/src/dispatch/WebhookTargetHandler.ts"],"sourcesContent":["import { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow, HandledEvent, InvokeHandler, InvokeHandlerArgs } from './types'\nimport { VariablesMap } from '../model/VariablesManager'\nimport * as Typesafe from '@contember/typesafe'\nimport { FetcherResponse, WebhookFetcher } from './WebhookFetcher'\n\nconst DEFAULT_TIMEOUT_MS = 30_000 // 30 seconds\n\nconst ResponseType = Typesafe.noExtraProps(Typesafe.object({\n\tfailures: Typesafe.array(\n\t\tTypesafe.intersection(\n\t\t\tTypesafe.object({\n\t\t\t\teventId: Typesafe.string,\n\t\t\t}),\n\t\t\tTypesafe.partial({\n\t\t\t\terror: Typesafe.string,\n\t\t\t}),\n\t\t),\n\t),\n}))\n\ntype EventResponseFactory = (eventRow: EventRow) => { ok: boolean; code?: number; response?: string; errorMessage?: string; durationMs?: number }\n\nexport class WebhookTargetHandler implements InvokeHandler<Actions.WebhookTarget> {\n\tconstructor(\n\t\tprivate readonly fetcher: WebhookFetcher,\n\t) {\n\t}\n\n\tpublic async handle({ target, events, logger, variables }: InvokeHandlerArgs<Actions.WebhookTarget>): Promise<HandledEvent[]> {\n\t\tconst timeoutMs = target.timeoutMs\n\n\t\tconst start = process.hrtime.bigint()\n\t\tconst getDuration = () => Math.floor(Number((process.hrtime.bigint() - start) / BigInt(1_000_000)))\n\n\t\tlet eventResponseFactory: EventResponseFactory\n\t\ttry {\n\t\t\tconst response = await this.fetch(timeoutMs ?? DEFAULT_TIMEOUT_MS, target, variables, events)\n\n\t\t\teventResponseFactory = this.createResponseFactory({\n\t\t\t\tresponse: response,\n\t\t\t\tevents,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tlogger.warn(e)\n\t\t\tconst errorMessages = this.extractErrorMessages(e)\n\t\t\tconst result = {\n\t\t\t\tok: false,\n\t\t\t\terrorMessage: errorMessages.length ? errorMessages.join('; ') : undefined,\n\t\t\t\tdurationMs: getDuration(),\n\t\t\t}\n\t\t\teventResponseFactory = () => ({ ok: false, errorMessage: errorMessages.length ? errorMessages.join('; ') : undefined })\n\n\t\t\treturn events.map(it => ({ target, row: it, result }))\n\t\t}\n\t\tconst durationMs = getDuration()\n\n\t\treturn events.map(it => ({ target, row: it, result: { durationMs, ...eventResponseFactory(it) } }))\n\t}\n\n\tprivate createResponseFactory({ response, events }: {\n\t\tresponse: FetcherResponse\n\t\tevents: EventRow[]\n\t}): EventResponseFactory {\n\t\tif (!response.ok) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: response.statusText,\n\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tresponse.responseText.trim() === ''\n\t\t\t|| !response.headers.get('content-type')?.toLowerCase().includes('json')\n\t\t) {\n\t\t\treturn () => ({\n\t\t\t\tok: true,\n\t\t\t\tcode: response.status,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsedJson = JSON.parse(response.responseText)\n\t\t\tif (parsedJson === null || typeof parsedJson !== 'object' || !('failures' in parsedJson)) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: true,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst responseData = ResponseType(parsedJson)\n\t\t\tconst eventsInBatch = new Set(events.map(it => it.id))\n\t\t\tconst failedEvents = Object.fromEntries(responseData.failures?.map(it => [it.eventId, it]) ?? [])\n\t\t\tconst missingEvents = Object.keys(failedEvents).filter(it => !eventsInBatch.has(it))\n\n\t\t\tif (missingEvents.length) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\tresponse: response.responseText,\n\t\t\t\t\terrorMessage: 'Invalid response: undefined events IDs: ' + missingEvents.join('; '),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn it => {\n\t\t\t\tif (!failedEvents[it.id]) {\n\t\t\t\t\treturn { ok: true, code: response.status }\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\terrorMessage: failedEvents[it.id].error,\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: 'Invalid response: ' + e.message,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate extractErrorMessages(e: unknown): string[] {\n\t\tconst errorMessages = []\n\t\tlet err = e\n\t\twhile (typeof err === 'object' && err !== null && 'message' in err && typeof (err as any).message === 'string') {\n\t\t\terrorMessages.push((err as any).message)\n\t\t\terr = (err as any).cause\n\t\t}\n\t\treturn errorMessages\n\t}\n\n\tprivate async fetch(timeoutMs: number, target: Actions.WebhookTarget, variables: VariablesMap, events: EventRow[]): Promise<FetcherResponse> {\n\t\treturn await withTimeout(timeoutMs, async abortController => {\n\t\t\treturn await this.doFetch(target, variables, abortController, events)\n\t\t})\n\t}\n\n\tprivate async doFetch(\n\t\ttarget: Actions.WebhookTarget,\n\t\tvariables: VariablesMap,\n\t\tabortController: AbortController,\n\t\tevents: EventRow[],\n\t): Promise<FetcherResponse> {\n\t\tconst resolvedUrl = this.resolveVariables(target.url, variables)\n\t\tconst resolvedHeaders = Object.fromEntries(\n\t\t\tObject.entries(target.headers ?? {})\n\t\t\t\t.map(([key, value]) => [key, this.resolveVariables(value, variables)]),\n\t\t)\n\n\t\treturn await this.fetcher.fetch(resolvedUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t['User-Agent']: 'Contember Actions',\n\t\t\t\t...resolvedHeaders,\n\t\t\t\t['Content-type']: 'application/json',\n\t\t\t},\n\t\t\tsignal: abortController.signal,\n\t\t\tbody: this.formatBody(events, target),\n\t\t})\n\t}\n\n\tprivate formatBody(events: EventRow[], target: Actions.WebhookTarget): string {\n\t\tconst body = target.body ?? {}\n\t\tconst path = target.payloadPath ?? []\n\t\tlet current: any = body\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tcurrent[path[i]] ??= {}\n\t\t\tcurrent = current[path[i]]\n\t\t}\n\t\tcurrent['events'] = events.map(this.formatEventPayload)\n\t\treturn JSON.stringify(body)\n\t}\n\n\tprivate formatEventPayload(it: EventRow): ActionsPayload.WebhookEvent {\n\t\treturn {\n\t\t\tmeta: {\n\t\t\t\teventId: it.id,\n\t\t\t\ttransactionId: it.transaction_id,\n\t\t\t\tidentityId: it.identity_id ?? null,\n\t\t\t\tipAddress: it.ip_address ?? null,\n\t\t\t\tuserAgent: it.user_agent ?? null,\n\t\t\t\tcreatedAt: it.created_at.toISOString(),\n\t\t\t\tlastStateChange: it.last_state_change.toISOString(),\n\t\t\t\tnumRetries: it.num_retries,\n\t\t\t\ttrigger: it.trigger,\n\t\t\t\ttarget: it.target,\n\t\t\t\t// todo: add stage and schema version\n\t\t\t},\n\t\t\t...it.payload,\n\t\t}\n\t}\n\n\tprivate resolveVariables(subject: string, variables: VariablesMap) {\n\t\treturn subject.replace(/\\{\\{([\\w_]+)}}/gm, (_, name) => {\n\t\t\tif (!variables[name]) {\n\t\t\t\tthrow new Error(`Undefined variable ${name}`)\n\t\t\t}\n\t\t\treturn variables[name]\n\t\t})\n\t}\n}\n\nconst withTimeout = async <T>(timeoutMs: number, cb: (abortController: AbortController) => Promise<T>): Promise<T> => {\n\tconst abortController = new AbortController()\n\tconst timeoutId = setTimeout(() => {\n\t\tabortController.abort()\n\t}, timeoutMs)\n\ttry {\n\t\treturn await cb(abortController)\n\t} finally {\n\t\tclearTimeout(timeoutId)\n\t}\n}\n"],"names":[],"mappings":";AAMA,MAAM,qBAAqB;AAE3B,MAAM,eAAe,SAAS,aAAa,SAAS,OAAO;AAAA,EAC1D,UAAU,SAAS;AAAA,IAClB,SAAS;AAAA,MACR,SAAS,OAAO;AAAA,QACf,SAAS,SAAS;AAAA,MAAA,CAClB;AAAA,MACD,SAAS,QAAQ;AAAA,QAChB,OAAO,SAAS;AAAA,MAAA,CAChB;AAAA,IAAA;AAAA,EACF;AAEF,CAAC,CAAC;AAIK,MAAM,qBAAqE;AAAA,EACjF,YACkB,SAChB;AADgB,SAAA,UAAA;AAAA,EAElB;AAAA,EAEA,MAAa,OAAO,EAAE,QAAQ,QAAQ,QAAQ,aAAgF;AAC7H,UAAM,YAAY,OAAO;AAEzB,UAAM,QAAQ,QAAQ,OAAO,OAAA;AAC7B,UAAM,cAAc,MAAM,KAAK,MAAM,QAAQ,QAAQ,OAAO,OAAA,IAAW,SAAS,OAAO,GAAS,CAAC,CAAC;AAElG,QAAI;AACJ,QAAI;AACH,YAAM,WAAW,MAAM,KAAK,MAAM,aAAa,oBAAoB,QAAQ,WAAW,MAAM;AAE5F,6BAAuB,KAAK,sBAAsB;AAAA,QACjD;AAAA,QACA;AAAA,MAAA,CACA;AAAA,IACF,SAAS,GAAG;AACX,aAAO,KAAK,CAAC;AACb,YAAM,gBAAgB,KAAK,qBAAqB,CAAC;AACjD,YAAM,SAAS;AAAA,QACd,IAAI;AAAA,QACJ,cAAc,cAAc,SAAS,cAAc,KAAK,IAAI,IAAI;AAAA,QAChE,YAAY,YAAA;AAAA,MAAY;AAEzB,6BAAuB,OAAO,EAAE,IAAI,OAAO,cAAc,cAAc,SAAS,cAAc,KAAK,IAAI,IAAI,OAAA;AAE3G,aAAO,OAAO,IAAI,CAAA,QAAO,EAAE,QAAQ,KAAK,IAAI,SAAS;AAAA,IACtD;AACA,UAAM,aAAa,YAAA;AAEnB,WAAO,OAAO,IAAI,CAAA,QAAO,EAAE,QAAQ,KAAK,IAAI,QAAQ,EAAE,YAAY,GAAG,qBAAqB,EAAE,EAAA,IAAM;AAAA,EACnG;AAAA,EAEQ,sBAAsB,EAAE,UAAU,UAGjB;AACxB,QAAI,CAAC,SAAS,IAAI;AACjB,aAAO,OAAO;AAAA,QACb,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,QACf,UAAU,SAAS;AAAA,QACnB,cAAc,SAAS;AAAA,MAAA;AAAA,IAEzB;AAEA,QACC,SAAS,aAAa,KAAA,MAAW,MAC9B,CAAC,SAAS,QAAQ,IAAI,cAAc,GAAG,YAAA,EAAc,SAAS,MAAM,GACtE;AACD,aAAO,OAAO;AAAA,QACb,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,MAAA;AAAA,IAEjB;AAEA,QAAI;AACH,YAAM,aAAa,KAAK,MAAM,SAAS,YAAY;AACnD,UAAI,eAAe,QAAQ,OAAO,eAAe,YAAY,EAAE,cAAc,aAAa;AACzF,eAAO,OAAO;AAAA,UACb,IAAI;AAAA,UACJ,MAAM,SAAS;AAAA,QAAA;AAAA,MAEjB;AACA,YAAM,eAAe,aAAa,UAAU;AAC5C,YAAM,gBAAgB,IAAI,IAAI,OAAO,IAAI,CAAA,OAAM,GAAG,EAAE,CAAC;AACrD,YAAM,eAAe,OAAO,YAAY,aAAa,UAAU,IAAI,CAAA,OAAM,CAAC,GAAG,SAAS,EAAE,CAAC,KAAK,CAAA,CAAE;AAChG,YAAM,gBAAgB,OAAO,KAAK,YAAY,EAAE,OAAO,CAAA,OAAM,CAAC,cAAc,IAAI,EAAE,CAAC;AAEnF,UAAI,cAAc,QAAQ;AACzB,eAAO,OAAO;AAAA,UACb,IAAI;AAAA,UACJ,MAAM,SAAS;AAAA,UACf,UAAU,SAAS;AAAA,UACnB,cAAc,6CAA6C,cAAc,KAAK,IAAI;AAAA,QAAA;AAAA,MAEpF;AAEA,aAAO,CAAA,OAAM;AACZ,YAAI,CAAC,aAAa,GAAG,EAAE,GAAG;AACzB,iBAAO,EAAE,IAAI,MAAM,MAAM,SAAS,OAAA;AAAA,QACnC;AACA,eAAO;AAAA,UACN,IAAI;AAAA,UACJ,MAAM,SAAS;AAAA,UACf,cAAc,aAAa,GAAG,EAAE,EAAE;AAAA,QAAA;AAAA,MAEpC;AAAA,IACD,SAAS,GAAQ;AAChB,aAAO,OAAO;AAAA,QACb,IAAI;AAAA,QACJ,MAAM,SAAS;AAAA,QACf,UAAU,SAAS;AAAA,QACnB,cAAc,uBAAuB,EAAE;AAAA,MAAA;AAAA,IAEzC;AAAA,EACD;AAAA,EAEQ,qBAAqB,GAAsB;AAClD,UAAM,gBAAgB,CAAA;AACtB,QAAI,MAAM;AACV,WAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,aAAa,OAAO,OAAQ,IAAY,YAAY,UAAU;AAC/G,oBAAc,KAAM,IAAY,OAAO;AACvC,YAAO,IAAY;AAAA,IACpB;AACA,WAAO;AAAA,EACR;AAAA,EAEA,MAAc,MAAM,WAAmB,QAA+B,WAAyB,QAA8C;AAC5I,WAAO,MAAM,YAAY,WAAW,OAAM,oBAAmB;AAC5D,aAAO,MAAM,KAAK,QAAQ,QAAQ,WAAW,iBAAiB,MAAM;AAAA,IACrE,CAAC;AAAA,EACF;AAAA,EAEA,MAAc,QACb,QACA,WACA,iBACA,QAC2B;AAC3B,UAAM,cAAc,KAAK,iBAAiB,OAAO,KAAK,SAAS;AAC/D,UAAM,kBAAkB,OAAO;AAAA,MAC9B,OAAO,QAAQ,OAAO,WAAW,CAAA,CAAE,EACjC,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,iBAAiB,OAAO,SAAS,CAAC,CAAC;AAAA,IAAA;AAGvE,WAAO,MAAM,KAAK,QAAQ,MAAM,aAAa;AAAA,MAC5C,QAAQ;AAAA,MACR,SAAS;AAAA,QACR,CAAC,YAAY,GAAG;AAAA,QAChB,GAAG;AAAA,QACH,CAAC,cAAc,GAAG;AAAA,MAAA;AAAA,MAEnB,QAAQ,gBAAgB;AAAA,MACxB,MAAM,KAAK,WAAW,QAAQ,MAAM;AAAA,IAAA,CACpC;AAAA,EACF;AAAA,EAEQ,WAAW,QAAoB,QAAuC;AArK/E,QAAA;AAsKE,UAAM,OAAO,OAAO,QAAQ,CAAA;AAC5B,UAAM,OAAO,OAAO,eAAe,CAAA;AACnC,QAAI,UAAe;AACnB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,cAAA,KAAQ,KAAK,CAAC,CAAA,MAAd,QAAA,EAAA,IAAqB;AACrB,gBAAU,QAAQ,KAAK,CAAC,CAAC;AAAA,IAC1B;AACA,YAAQ,QAAQ,IAAI,OAAO,IAAI,KAAK,kBAAkB;AACtD,WAAO,KAAK,UAAU,IAAI;AAAA,EAC3B;AAAA,EAEQ,mBAAmB,IAA2C;AACrE,WAAO;AAAA,MACN,MAAM;AAAA,QACL,SAAS,GAAG;AAAA,QACZ,eAAe,GAAG;AAAA,QAClB,YAAY,GAAG,eAAe;AAAA,QAC9B,WAAW,GAAG,cAAc;AAAA,QAC5B,WAAW,GAAG,cAAc;AAAA,QAC5B,WAAW,GAAG,WAAW,YAAA;AAAA,QACzB,iBAAiB,GAAG,kBAAkB,YAAA;AAAA,QACtC,YAAY,GAAG;AAAA,QACf,SAAS,GAAG;AAAA,QACZ,QAAQ,GAAG;AAAA;AAAA,MAAA;AAAA,MAGZ,GAAG,GAAG;AAAA,IAAA;AAAA,EAER;AAAA,EAEQ,iBAAiB,SAAiB,WAAyB;AAClE,WAAO,QAAQ,QAAQ,oBAAoB,CAAC,GAAG,SAAS;AACvD,UAAI,CAAC,UAAU,IAAI,GAAG;AACrB,cAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAAA,MAC7C;AACA,aAAO,UAAU,IAAI;AAAA,IACtB,CAAC;AAAA,EACF;AACD;AAEA,MAAM,cAAc,OAAU,WAAmB,OAAqE;AACrH,QAAM,kBAAkB,IAAI,gBAAA;AAC5B,QAAM,YAAY,WAAW,MAAM;AAClC,oBAAgB,MAAA;AAAA,EACjB,GAAG,SAAS;AACZ,MAAI;AACH,WAAO,MAAM,GAAG,eAAe;AAAA,EAChC,UAAA;AACC,iBAAa,SAAS;AAAA,EACvB;AACD;"}
1
+ {"version":3,"file":"WebhookTargetHandler.js","sources":["../../../../../packages/engine-actions/src/dispatch/WebhookTargetHandler.ts"],"sourcesContent":["import { Actions, ActionsPayload } from '@contember/schema'\nimport { EventRow, HandledEvent, InvokeHandler, InvokeHandlerArgs } from './types.js'\nimport { VariablesMap } from '../model/VariablesManager.js'\nimport * as Typesafe from '@contember/typesafe'\nimport { FetcherResponse, WebhookFetcher } from './WebhookFetcher.js'\n\nconst DEFAULT_TIMEOUT_MS = 30_000 // 30 seconds\n\nconst ResponseType = Typesafe.noExtraProps(Typesafe.object({\n\tfailures: Typesafe.array(\n\t\tTypesafe.intersection(\n\t\t\tTypesafe.object({\n\t\t\t\teventId: Typesafe.string,\n\t\t\t}),\n\t\t\tTypesafe.partial({\n\t\t\t\terror: Typesafe.string,\n\t\t\t}),\n\t\t),\n\t),\n}))\n\ntype EventResponseFactory = (eventRow: EventRow) => { ok: boolean; code?: number; response?: string; errorMessage?: string; durationMs?: number }\n\nexport class WebhookTargetHandler implements InvokeHandler<Actions.WebhookTarget> {\n\tconstructor(\n\t\tprivate readonly fetcher: WebhookFetcher,\n\t) {\n\t}\n\n\tpublic async handle({ target, events, logger, variables }: InvokeHandlerArgs<Actions.WebhookTarget>): Promise<HandledEvent[]> {\n\t\tconst timeoutMs = target.timeoutMs\n\n\t\tconst start = process.hrtime.bigint()\n\t\tconst getDuration = () => Math.floor(Number((process.hrtime.bigint() - start) / BigInt(1_000_000)))\n\n\t\tlet eventResponseFactory: EventResponseFactory\n\t\ttry {\n\t\t\tconst response = await this.fetch(timeoutMs ?? DEFAULT_TIMEOUT_MS, target, variables, events)\n\n\t\t\teventResponseFactory = this.createResponseFactory({\n\t\t\t\tresponse: response,\n\t\t\t\tevents,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tlogger.warn(e)\n\t\t\tconst errorMessages = this.extractErrorMessages(e)\n\t\t\tconst result = {\n\t\t\t\tok: false,\n\t\t\t\terrorMessage: errorMessages.length ? errorMessages.join('; ') : undefined,\n\t\t\t\tdurationMs: getDuration(),\n\t\t\t}\n\t\t\teventResponseFactory = () => ({ ok: false, errorMessage: errorMessages.length ? errorMessages.join('; ') : undefined })\n\n\t\t\treturn events.map(it => ({ target, row: it, result }))\n\t\t}\n\t\tconst durationMs = getDuration()\n\n\t\treturn events.map(it => ({ target, row: it, result: { durationMs, ...eventResponseFactory(it) } }))\n\t}\n\n\tprivate createResponseFactory({ response, events }: {\n\t\tresponse: FetcherResponse\n\t\tevents: EventRow[]\n\t}): EventResponseFactory {\n\t\tif (!response.ok) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: response.statusText,\n\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tresponse.responseText.trim() === ''\n\t\t\t|| !response.headers.get('content-type')?.toLowerCase().includes('json')\n\t\t) {\n\t\t\treturn () => ({\n\t\t\t\tok: true,\n\t\t\t\tcode: response.status,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst parsedJson = JSON.parse(response.responseText)\n\t\t\tif (parsedJson === null || typeof parsedJson !== 'object' || !('failures' in parsedJson)) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: true,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst responseData = ResponseType(parsedJson)\n\t\t\tconst eventsInBatch = new Set(events.map(it => it.id))\n\t\t\tconst failedEvents = Object.fromEntries(responseData.failures?.map(it => [it.eventId, it]) ?? [])\n\t\t\tconst missingEvents = Object.keys(failedEvents).filter(it => !eventsInBatch.has(it))\n\n\t\t\tif (missingEvents.length) {\n\t\t\t\treturn () => ({\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\tresponse: response.responseText,\n\t\t\t\t\terrorMessage: 'Invalid response: undefined events IDs: ' + missingEvents.join('; '),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn it => {\n\t\t\t\tif (!failedEvents[it.id]) {\n\t\t\t\t\treturn { ok: true, code: response.status }\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tok: false,\n\t\t\t\t\tcode: response.status,\n\t\t\t\t\terrorMessage: failedEvents[it.id].error,\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\treturn () => ({\n\t\t\t\tok: false,\n\t\t\t\tcode: response.status,\n\t\t\t\tresponse: response.responseText,\n\t\t\t\terrorMessage: 'Invalid response: ' + e.message,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate extractErrorMessages(e: unknown): string[] {\n\t\tconst errorMessages = []\n\t\tlet err = e\n\t\twhile (typeof err === 'object' && err !== null && 'message' in err && typeof (err as any).message === 'string') {\n\t\t\terrorMessages.push((err as any).message)\n\t\t\terr = (err as any).cause\n\t\t}\n\t\treturn errorMessages\n\t}\n\n\tprivate async fetch(timeoutMs: number, target: Actions.WebhookTarget, variables: VariablesMap, events: EventRow[]): Promise<FetcherResponse> {\n\t\treturn await withTimeout(timeoutMs, async abortController => {\n\t\t\treturn await this.doFetch(target, variables, abortController, events)\n\t\t})\n\t}\n\n\tprivate async doFetch(\n\t\ttarget: Actions.WebhookTarget,\n\t\tvariables: VariablesMap,\n\t\tabortController: AbortController,\n\t\tevents: EventRow[],\n\t): Promise<FetcherResponse> {\n\t\tconst resolvedUrl = this.resolveVariables(target.url, variables)\n\t\tconst resolvedHeaders = Object.fromEntries(\n\t\t\tObject.entries(target.headers ?? {})\n\t\t\t\t.map(([key, value]) => [key, this.resolveVariables(value, variables)]),\n\t\t)\n\n\t\treturn await this.fetcher.fetch(resolvedUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: {\n\t\t\t\t['User-Agent']: 'Contember Actions',\n\t\t\t\t...resolvedHeaders,\n\t\t\t\t['Content-type']: 'application/json',\n\t\t\t},\n\t\t\tsignal: abortController.signal,\n\t\t\tbody: this.formatBody(events, target),\n\t\t})\n\t}\n\n\tprivate formatBody(events: EventRow[], target: Actions.WebhookTarget): string {\n\t\tconst body = target.body ?? {}\n\t\tconst path = target.payloadPath ?? []\n\t\tlet current: any = body\n\t\tfor (let i = 0; i < path.length; i++) {\n\t\t\tcurrent[path[i]] ??= {}\n\t\t\tcurrent = current[path[i]]\n\t\t}\n\t\tcurrent['events'] = events.map(this.formatEventPayload)\n\t\treturn JSON.stringify(body)\n\t}\n\n\tprivate formatEventPayload(it: EventRow): ActionsPayload.WebhookEvent {\n\t\treturn {\n\t\t\tmeta: {\n\t\t\t\teventId: it.id,\n\t\t\t\ttransactionId: it.transaction_id,\n\t\t\t\tidentityId: it.identity_id ?? null,\n\t\t\t\tipAddress: it.ip_address ?? null,\n\t\t\t\tuserAgent: it.user_agent ?? null,\n\t\t\t\tcreatedAt: it.created_at.toISOString(),\n\t\t\t\tlastStateChange: it.last_state_change.toISOString(),\n\t\t\t\tnumRetries: it.num_retries,\n\t\t\t\ttrigger: it.trigger,\n\t\t\t\ttarget: it.target,\n\t\t\t\t// todo: add stage and schema version\n\t\t\t},\n\t\t\t...it.payload,\n\t\t}\n\t}\n\n\tprivate resolveVariables(subject: string, variables: VariablesMap) {\n\t\treturn subject.replace(/\\{\\{([\\w_]+)}}/gm, (_, name) => {\n\t\t\tif (!variables[name]) {\n\t\t\t\tthrow new Error(`Undefined variable ${name}`)\n\t\t\t}\n\t\t\treturn variables[name]\n\t\t})\n\t}\n}\n\nconst withTimeout = async <T>(timeoutMs: number, cb: (abortController: AbortController) => Promise<T>): Promise<T> => {\n\tconst abortController = new AbortController()\n\tconst timeoutId = setTimeout(() => {\n\t\tabortController.abort()\n\t}, timeoutMs)\n\ttry {\n\t\treturn await cb(abortController)\n\t} finally {\n\t\tclearTimeout(timeoutId)\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsApiMiddlewareFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsApiMiddlewareFactory.ts"],"sourcesContent":["import { HttpController } from '@contember/engine-http'\nimport { ActionsGraphQLHandler } from './ActionsGraphQLHandlerFactory'\nimport { ActionsContext } from '../resolvers/ActionsContext'\nimport { ActionsContextResolver } from './ActionsContextResolver'\nimport { AuthorizationScope, Authorizator } from '@contember/authorization'\nimport { Identity } from '../../authorization'\nimport { ForbiddenError } from '@contember/graphql-utils'\n\nexport class ActionsApiMiddlewareFactory {\n\tconstructor(\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly actionsGraphQLHandler: ActionsGraphQLHandler,\n\t\tprivate readonly authorizator: Authorizator<Identity>,\n\t) {\n\t}\n\n\tcreate(): HttpController {\n\t\treturn async ctx => {\n\t\t\tconst { timer, logger, koa } = ctx\n\t\t\tconst { projectContainer, identity } = await this.actionsContextResolver.resolve(ctx)\n\n\t\t\tconst systemDatabase = projectContainer.systemDatabaseContext\n\n\t\t\tlogger.debug('Actions query processing started')\n\t\t\tconst graphqlContext: ActionsContext = {\n\t\t\t\tdb: systemDatabase,\n\t\t\t\tlogger,\n\t\t\t\tproject: projectContainer.project,\n\t\t\t\tcontentSchemaResolver: projectContainer.contentSchemaResolver,\n\t\t\t\trequireAccess: async (action, message) => {\n\t\t\t\t\tif (!(await this.authorizator.isAllowed(identity, new AuthorizationScope.Global(), action))) {\n\t\t\t\t\t\tthrow new ForbiddenError(message || 'Forbidden')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst handler = this.actionsGraphQLHandler\n\n\t\t\tawait timer('GraphQL', () =>\n\t\t\t\thandler({\n\t\t\t\t\trequest: koa.request,\n\t\t\t\t\tresponse: koa.response,\n\t\t\t\t\tcreateContext: () => graphqlContext,\n\t\t\t\t}))\n\t\t\tlogger.debug('Actions query finished')\n\t\t}\n\t}\n}\n"],"names":["AuthorizationScope","ForbiddenError"],"mappings":";;;;AAQO,MAAM,4BAA4B;AAAA,EACxC,YACkB,wBACA,uBACA,cAChB;AAHgB,SAAA,yBAAA;AACA,SAAA,wBAAA;AACA,SAAA,eAAA;AAAA,EAElB;AAAA,EAEA,SAAyB;AACxB,WAAO,OAAM,QAAO;AACnB,YAAM,EAAE,OAAO,QAAQ,IAAA,IAAQ;AAC/B,YAAM,EAAE,kBAAkB,SAAA,IAAa,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAEpF,YAAM,iBAAiB,iBAAiB;AAExC,aAAO,MAAM,kCAAkC;AAC/C,YAAM,iBAAiC;AAAA,QACtC,IAAI;AAAA,QACJ;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,uBAAuB,iBAAiB;AAAA,QACxC,eAAe,OAAO,QAAQ,YAAY;AACzC,cAAI,CAAE,MAAM,KAAK,aAAa,UAAU,UAAU,IAAIA,iCAAmB,UAAU,MAAM,GAAI;AAC5F,kBAAM,IAAIC,aAAAA,eAAe,WAAW,WAAW;AAAA,UAChD;AAAA,QACD;AAAA,MAAA;AAED,YAAM,UAAU,KAAK;AAErB,YAAM,MAAM,WAAW,MACtB,QAAQ;AAAA,QACP,SAAS,IAAI;AAAA,QACb,UAAU,IAAI;AAAA,QACd,eAAe,MAAM;AAAA,MAAA,CACrB,CAAC;AACH,aAAO,MAAM,wBAAwB;AAAA,IACtC;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"ActionsApiMiddlewareFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsApiMiddlewareFactory.ts"],"sourcesContent":["import { HttpController } from '@contember/engine-http'\nimport { ActionsGraphQLHandler } from './ActionsGraphQLHandlerFactory.js'\nimport { ActionsContext } from '../resolvers/ActionsContext.js'\nimport { ActionsContextResolver } from './ActionsContextResolver.js'\nimport { AuthorizationScope, Authorizator } from '@contember/authorization'\nimport { Identity } from '../../authorization/index.js'\nimport { ForbiddenError } from '@contember/graphql-utils'\n\nexport class ActionsApiMiddlewareFactory {\n\tconstructor(\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly actionsGraphQLHandler: ActionsGraphQLHandler,\n\t\tprivate readonly authorizator: Authorizator<Identity>,\n\t) {\n\t}\n\n\tcreate(): HttpController {\n\t\treturn async ctx => {\n\t\t\tconst { timer, logger, koa } = ctx\n\t\t\tconst { projectContainer, identity } = await this.actionsContextResolver.resolve(ctx)\n\n\t\t\tconst systemDatabase = projectContainer.systemDatabaseContext\n\n\t\t\tlogger.debug('Actions query processing started')\n\t\t\tconst graphqlContext: ActionsContext = {\n\t\t\t\tdb: systemDatabase,\n\t\t\t\tlogger,\n\t\t\t\tproject: projectContainer.project,\n\t\t\t\tcontentSchemaResolver: projectContainer.contentSchemaResolver,\n\t\t\t\trequireAccess: async (action, message) => {\n\t\t\t\t\tif (!(await this.authorizator.isAllowed(identity, new AuthorizationScope.Global(), action))) {\n\t\t\t\t\t\tthrow new ForbiddenError(message || 'Forbidden')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst handler = this.actionsGraphQLHandler\n\n\t\t\tawait timer('GraphQL', () =>\n\t\t\t\thandler({\n\t\t\t\t\trequest: koa.request,\n\t\t\t\t\tresponse: koa.response,\n\t\t\t\t\tcreateContext: () => graphqlContext,\n\t\t\t\t}))\n\t\t\tlogger.debug('Actions query finished')\n\t\t}\n\t}\n}\n"],"names":["AuthorizationScope","ForbiddenError"],"mappings":";;;;AAQO,MAAM,4BAA4B;AAAA,EACxC,YACkB,wBACA,uBACA,cAChB;AAHgB,SAAA,yBAAA;AACA,SAAA,wBAAA;AACA,SAAA,eAAA;AAAA,EAElB;AAAA,EAEA,SAAyB;AACxB,WAAO,OAAM,QAAO;AACnB,YAAM,EAAE,OAAO,QAAQ,IAAA,IAAQ;AAC/B,YAAM,EAAE,kBAAkB,SAAA,IAAa,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAEpF,YAAM,iBAAiB,iBAAiB;AAExC,aAAO,MAAM,kCAAkC;AAC/C,YAAM,iBAAiC;AAAA,QACtC,IAAI;AAAA,QACJ;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,uBAAuB,iBAAiB;AAAA,QACxC,eAAe,OAAO,QAAQ,YAAY;AACzC,cAAI,CAAE,MAAM,KAAK,aAAa,UAAU,UAAU,IAAIA,iCAAmB,UAAU,MAAM,GAAI;AAC5F,kBAAM,IAAIC,aAAAA,eAAe,WAAW,WAAW;AAAA,UAChD;AAAA,QACD;AAAA,MAAA;AAED,YAAM,UAAU,KAAK;AAErB,YAAM,MAAM,WAAW,MACtB,QAAQ;AAAA,QACP,SAAS,IAAI;AAAA,QACb,UAAU,IAAI;AAAA,QACd,eAAe,MAAM;AAAA,MAAA,CACrB,CAAC;AACH,aAAO,MAAM,wBAAwB;AAAA,IACtC;AAAA,EACD;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsApiMiddlewareFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsApiMiddlewareFactory.ts"],"sourcesContent":["import { HttpController } from '@contember/engine-http'\nimport { ActionsGraphQLHandler } from './ActionsGraphQLHandlerFactory'\nimport { ActionsContext } from '../resolvers/ActionsContext'\nimport { ActionsContextResolver } from './ActionsContextResolver'\nimport { AuthorizationScope, Authorizator } from '@contember/authorization'\nimport { Identity } from '../../authorization'\nimport { ForbiddenError } from '@contember/graphql-utils'\n\nexport class ActionsApiMiddlewareFactory {\n\tconstructor(\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly actionsGraphQLHandler: ActionsGraphQLHandler,\n\t\tprivate readonly authorizator: Authorizator<Identity>,\n\t) {\n\t}\n\n\tcreate(): HttpController {\n\t\treturn async ctx => {\n\t\t\tconst { timer, logger, koa } = ctx\n\t\t\tconst { projectContainer, identity } = await this.actionsContextResolver.resolve(ctx)\n\n\t\t\tconst systemDatabase = projectContainer.systemDatabaseContext\n\n\t\t\tlogger.debug('Actions query processing started')\n\t\t\tconst graphqlContext: ActionsContext = {\n\t\t\t\tdb: systemDatabase,\n\t\t\t\tlogger,\n\t\t\t\tproject: projectContainer.project,\n\t\t\t\tcontentSchemaResolver: projectContainer.contentSchemaResolver,\n\t\t\t\trequireAccess: async (action, message) => {\n\t\t\t\t\tif (!(await this.authorizator.isAllowed(identity, new AuthorizationScope.Global(), action))) {\n\t\t\t\t\t\tthrow new ForbiddenError(message || 'Forbidden')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst handler = this.actionsGraphQLHandler\n\n\t\t\tawait timer('GraphQL', () =>\n\t\t\t\thandler({\n\t\t\t\t\trequest: koa.request,\n\t\t\t\t\tresponse: koa.response,\n\t\t\t\t\tcreateContext: () => graphqlContext,\n\t\t\t\t}))\n\t\t\tlogger.debug('Actions query finished')\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;AAQO,MAAM,4BAA4B;AAAA,EACxC,YACkB,wBACA,uBACA,cAChB;AAHgB,SAAA,yBAAA;AACA,SAAA,wBAAA;AACA,SAAA,eAAA;AAAA,EAElB;AAAA,EAEA,SAAyB;AACxB,WAAO,OAAM,QAAO;AACnB,YAAM,EAAE,OAAO,QAAQ,IAAA,IAAQ;AAC/B,YAAM,EAAE,kBAAkB,SAAA,IAAa,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAEpF,YAAM,iBAAiB,iBAAiB;AAExC,aAAO,MAAM,kCAAkC;AAC/C,YAAM,iBAAiC;AAAA,QACtC,IAAI;AAAA,QACJ;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,uBAAuB,iBAAiB;AAAA,QACxC,eAAe,OAAO,QAAQ,YAAY;AACzC,cAAI,CAAE,MAAM,KAAK,aAAa,UAAU,UAAU,IAAI,mBAAmB,UAAU,MAAM,GAAI;AAC5F,kBAAM,IAAI,eAAe,WAAW,WAAW;AAAA,UAChD;AAAA,QACD;AAAA,MAAA;AAED,YAAM,UAAU,KAAK;AAErB,YAAM,MAAM,WAAW,MACtB,QAAQ;AAAA,QACP,SAAS,IAAI;AAAA,QACb,UAAU,IAAI;AAAA,QACd,eAAe,MAAM;AAAA,MAAA,CACrB,CAAC;AACH,aAAO,MAAM,wBAAwB;AAAA,IACtC;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"ActionsApiMiddlewareFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsApiMiddlewareFactory.ts"],"sourcesContent":["import { HttpController } from '@contember/engine-http'\nimport { ActionsGraphQLHandler } from './ActionsGraphQLHandlerFactory.js'\nimport { ActionsContext } from '../resolvers/ActionsContext.js'\nimport { ActionsContextResolver } from './ActionsContextResolver.js'\nimport { AuthorizationScope, Authorizator } from '@contember/authorization'\nimport { Identity } from '../../authorization/index.js'\nimport { ForbiddenError } from '@contember/graphql-utils'\n\nexport class ActionsApiMiddlewareFactory {\n\tconstructor(\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly actionsGraphQLHandler: ActionsGraphQLHandler,\n\t\tprivate readonly authorizator: Authorizator<Identity>,\n\t) {\n\t}\n\n\tcreate(): HttpController {\n\t\treturn async ctx => {\n\t\t\tconst { timer, logger, koa } = ctx\n\t\t\tconst { projectContainer, identity } = await this.actionsContextResolver.resolve(ctx)\n\n\t\t\tconst systemDatabase = projectContainer.systemDatabaseContext\n\n\t\t\tlogger.debug('Actions query processing started')\n\t\t\tconst graphqlContext: ActionsContext = {\n\t\t\t\tdb: systemDatabase,\n\t\t\t\tlogger,\n\t\t\t\tproject: projectContainer.project,\n\t\t\t\tcontentSchemaResolver: projectContainer.contentSchemaResolver,\n\t\t\t\trequireAccess: async (action, message) => {\n\t\t\t\t\tif (!(await this.authorizator.isAllowed(identity, new AuthorizationScope.Global(), action))) {\n\t\t\t\t\t\tthrow new ForbiddenError(message || 'Forbidden')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t\tconst handler = this.actionsGraphQLHandler\n\n\t\t\tawait timer('GraphQL', () =>\n\t\t\t\thandler({\n\t\t\t\t\trequest: koa.request,\n\t\t\t\t\tresponse: koa.response,\n\t\t\t\t\tcreateContext: () => graphqlContext,\n\t\t\t\t}))\n\t\t\tlogger.debug('Actions query finished')\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;AAQO,MAAM,4BAA4B;AAAA,EACxC,YACkB,wBACA,uBACA,cAChB;AAHgB,SAAA,yBAAA;AACA,SAAA,wBAAA;AACA,SAAA,eAAA;AAAA,EAElB;AAAA,EAEA,SAAyB;AACxB,WAAO,OAAM,QAAO;AACnB,YAAM,EAAE,OAAO,QAAQ,IAAA,IAAQ;AAC/B,YAAM,EAAE,kBAAkB,SAAA,IAAa,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AAEpF,YAAM,iBAAiB,iBAAiB;AAExC,aAAO,MAAM,kCAAkC;AAC/C,YAAM,iBAAiC;AAAA,QACtC,IAAI;AAAA,QACJ;AAAA,QACA,SAAS,iBAAiB;AAAA,QAC1B,uBAAuB,iBAAiB;AAAA,QACxC,eAAe,OAAO,QAAQ,YAAY;AACzC,cAAI,CAAE,MAAM,KAAK,aAAa,UAAU,UAAU,IAAI,mBAAmB,UAAU,MAAM,GAAI;AAC5F,kBAAM,IAAI,eAAe,WAAW,WAAW;AAAA,UAChD;AAAA,QACD;AAAA,MAAA;AAED,YAAM,UAAU,KAAK;AAErB,YAAM,MAAM,WAAW,MACtB,QAAQ;AAAA,QACP,SAAS,IAAI;AAAA,QACb,UAAU,IAAI;AAAA,QACd,eAAe,MAAM;AAAA,MAAA,CACrB,CAAC;AACH,aAAO,MAAM,wBAAwB;AAAA,IACtC;AAAA,EACD;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsContextResolver.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsContextResolver.ts"],"sourcesContent":["import { ApplicationContext, HttpErrorResponse, ProjectConfig, ProjectContainer, ProjectContextResolver } from '@contember/engine-http'\nimport { Identity } from '../../authorization'\n\nexport interface ActionsContext {\n\tprojectContainer: ProjectContainer\n\tproject: ProjectConfig\n\tidentity: Identity\n}\n\nexport class ActionsContextResolver {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly projectContextResolver: ProjectContextResolver,\n\t) {\n\t}\n\n\tasync resolve(ctx: ApplicationContext): Promise<ActionsContext> {\n\t\tconst { timer, projectGroup: { tenantContainer }, logger, authResult } = ctx\n\t\tconst projectContext = await this.projectContextResolver.resolve(ctx)\n\t\tconst { project } = projectContext\n\t\tif (!authResult) {\n\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t}\n\t\tconst memberships = await timer('MembershipFetch', () =>\n\t\t\ttenantContainer.projectMemberManager.getEffectiveProjectMemberships(\n\t\t\t\ttenantContainer.databaseContext,\n\t\t\t\t{ slug: project.slug },\n\t\t\t\t{\n\t\t\t\t\tid: authResult.identityId,\n\t\t\t\t\troles: authResult.roles,\n\t\t\t\t},\n\t\t\t))\n\t\tlogger.debug('Memberships fetched', { memberships })\n\n\t\tif (memberships.length === 0) {\n\t\t\tthrow this.debug\n\t\t\t\t? new HttpErrorResponse(404, `You are not allowed to access project ${project.slug}`)\n\t\t\t\t: new HttpErrorResponse(404, `Project ${project.slug} NOT found`)\n\t\t}\n\t\tconst roles = memberships.map(it => it.role)\n\t\treturn {\n\t\t\t...projectContext,\n\t\t\tidentity: { id: authResult.identityId, roles },\n\t\t}\n\t}\n}\n"],"names":["HttpErrorResponse"],"mappings":";;;AASO,MAAM,uBAAuB;AAAA,EACnC,YACkB,OACA,wBAChB;AAFgB,SAAA,QAAA;AACA,SAAA,yBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,QAAQ,KAAkD;AAC/D,UAAM,EAAE,OAAO,cAAc,EAAE,mBAAmB,QAAQ,eAAe;AACzE,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AACpE,UAAM,EAAE,YAAY;AACpB,QAAI,CAAC,YAAY;AAChB,YAAM,IAAIA,WAAAA,kBAAkB,KAAK,yBAAyB;AAAA,IAC3D;AACA,UAAM,cAAc,MAAM,MAAM,mBAAmB,MAClD,gBAAgB,qBAAqB;AAAA,MACpC,gBAAgB;AAAA,MAChB,EAAE,MAAM,QAAQ,KAAA;AAAA,MAChB;AAAA,QACC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,MAAA;AAAA,IACnB,CACA;AACF,WAAO,MAAM,uBAAuB,EAAE,YAAA,CAAa;AAEnD,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,KAAK,QACR,IAAIA,WAAAA,kBAAkB,KAAK,yCAAyC,QAAQ,IAAI,EAAE,IAClF,IAAIA,WAAAA,kBAAkB,KAAK,WAAW,QAAQ,IAAI,YAAY;AAAA,IAClE;AACA,UAAM,QAAQ,YAAY,IAAI,CAAA,OAAM,GAAG,IAAI;AAC3C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,UAAU,EAAE,IAAI,WAAW,YAAY,MAAA;AAAA,IAAM;AAAA,EAE/C;AACD;;"}
1
+ {"version":3,"file":"ActionsContextResolver.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsContextResolver.ts"],"sourcesContent":["import { ApplicationContext, HttpErrorResponse, ProjectConfig, ProjectContainer, ProjectContextResolver } from '@contember/engine-http'\nimport { Identity } from '../../authorization/index.js'\n\nexport interface ActionsContext {\n\tprojectContainer: ProjectContainer\n\tproject: ProjectConfig\n\tidentity: Identity\n}\n\nexport class ActionsContextResolver {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly projectContextResolver: ProjectContextResolver,\n\t) {\n\t}\n\n\tasync resolve(ctx: ApplicationContext): Promise<ActionsContext> {\n\t\tconst { timer, projectGroup: { tenantContainer }, logger, authResult } = ctx\n\t\tconst projectContext = await this.projectContextResolver.resolve(ctx)\n\t\tconst { project } = projectContext\n\t\tif (!authResult) {\n\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t}\n\t\tconst memberships = await timer('MembershipFetch', () =>\n\t\t\ttenantContainer.projectMemberManager.getEffectiveProjectMemberships(\n\t\t\t\ttenantContainer.databaseContext,\n\t\t\t\t{ slug: project.slug },\n\t\t\t\t{\n\t\t\t\t\tid: authResult.identityId,\n\t\t\t\t\troles: authResult.roles,\n\t\t\t\t},\n\t\t\t))\n\t\tlogger.debug('Memberships fetched', { memberships })\n\n\t\tif (memberships.length === 0) {\n\t\t\tthrow this.debug\n\t\t\t\t? new HttpErrorResponse(404, `You are not allowed to access project ${project.slug}`)\n\t\t\t\t: new HttpErrorResponse(404, `Project ${project.slug} NOT found`)\n\t\t}\n\t\tconst roles = memberships.map(it => it.role)\n\t\treturn {\n\t\t\t...projectContext,\n\t\t\tidentity: { id: authResult.identityId, roles },\n\t\t}\n\t}\n}\n"],"names":["HttpErrorResponse"],"mappings":";;;AASO,MAAM,uBAAuB;AAAA,EACnC,YACkB,OACA,wBAChB;AAFgB,SAAA,QAAA;AACA,SAAA,yBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,QAAQ,KAAkD;AAC/D,UAAM,EAAE,OAAO,cAAc,EAAE,mBAAmB,QAAQ,eAAe;AACzE,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AACpE,UAAM,EAAE,YAAY;AACpB,QAAI,CAAC,YAAY;AAChB,YAAM,IAAIA,WAAAA,kBAAkB,KAAK,yBAAyB;AAAA,IAC3D;AACA,UAAM,cAAc,MAAM,MAAM,mBAAmB,MAClD,gBAAgB,qBAAqB;AAAA,MACpC,gBAAgB;AAAA,MAChB,EAAE,MAAM,QAAQ,KAAA;AAAA,MAChB;AAAA,QACC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,MAAA;AAAA,IACnB,CACA;AACF,WAAO,MAAM,uBAAuB,EAAE,YAAA,CAAa;AAEnD,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,KAAK,QACR,IAAIA,WAAAA,kBAAkB,KAAK,yCAAyC,QAAQ,IAAI,EAAE,IAClF,IAAIA,WAAAA,kBAAkB,KAAK,WAAW,QAAQ,IAAI,YAAY;AAAA,IAClE;AACA,UAAM,QAAQ,YAAY,IAAI,CAAA,OAAM,GAAG,IAAI;AAC3C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,UAAU,EAAE,IAAI,WAAW,YAAY,MAAA;AAAA,IAAM;AAAA,EAE/C;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsContextResolver.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsContextResolver.ts"],"sourcesContent":["import { ApplicationContext, HttpErrorResponse, ProjectConfig, ProjectContainer, ProjectContextResolver } from '@contember/engine-http'\nimport { Identity } from '../../authorization'\n\nexport interface ActionsContext {\n\tprojectContainer: ProjectContainer\n\tproject: ProjectConfig\n\tidentity: Identity\n}\n\nexport class ActionsContextResolver {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly projectContextResolver: ProjectContextResolver,\n\t) {\n\t}\n\n\tasync resolve(ctx: ApplicationContext): Promise<ActionsContext> {\n\t\tconst { timer, projectGroup: { tenantContainer }, logger, authResult } = ctx\n\t\tconst projectContext = await this.projectContextResolver.resolve(ctx)\n\t\tconst { project } = projectContext\n\t\tif (!authResult) {\n\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t}\n\t\tconst memberships = await timer('MembershipFetch', () =>\n\t\t\ttenantContainer.projectMemberManager.getEffectiveProjectMemberships(\n\t\t\t\ttenantContainer.databaseContext,\n\t\t\t\t{ slug: project.slug },\n\t\t\t\t{\n\t\t\t\t\tid: authResult.identityId,\n\t\t\t\t\troles: authResult.roles,\n\t\t\t\t},\n\t\t\t))\n\t\tlogger.debug('Memberships fetched', { memberships })\n\n\t\tif (memberships.length === 0) {\n\t\t\tthrow this.debug\n\t\t\t\t? new HttpErrorResponse(404, `You are not allowed to access project ${project.slug}`)\n\t\t\t\t: new HttpErrorResponse(404, `Project ${project.slug} NOT found`)\n\t\t}\n\t\tconst roles = memberships.map(it => it.role)\n\t\treturn {\n\t\t\t...projectContext,\n\t\t\tidentity: { id: authResult.identityId, roles },\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AASO,MAAM,uBAAuB;AAAA,EACnC,YACkB,OACA,wBAChB;AAFgB,SAAA,QAAA;AACA,SAAA,yBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,QAAQ,KAAkD;AAC/D,UAAM,EAAE,OAAO,cAAc,EAAE,mBAAmB,QAAQ,eAAe;AACzE,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AACpE,UAAM,EAAE,YAAY;AACpB,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,kBAAkB,KAAK,yBAAyB;AAAA,IAC3D;AACA,UAAM,cAAc,MAAM,MAAM,mBAAmB,MAClD,gBAAgB,qBAAqB;AAAA,MACpC,gBAAgB;AAAA,MAChB,EAAE,MAAM,QAAQ,KAAA;AAAA,MAChB;AAAA,QACC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,MAAA;AAAA,IACnB,CACA;AACF,WAAO,MAAM,uBAAuB,EAAE,YAAA,CAAa;AAEnD,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,KAAK,QACR,IAAI,kBAAkB,KAAK,yCAAyC,QAAQ,IAAI,EAAE,IAClF,IAAI,kBAAkB,KAAK,WAAW,QAAQ,IAAI,YAAY;AAAA,IAClE;AACA,UAAM,QAAQ,YAAY,IAAI,CAAA,OAAM,GAAG,IAAI;AAC3C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,UAAU,EAAE,IAAI,WAAW,YAAY,MAAA;AAAA,IAAM;AAAA,EAE/C;AACD;"}
1
+ {"version":3,"file":"ActionsContextResolver.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsContextResolver.ts"],"sourcesContent":["import { ApplicationContext, HttpErrorResponse, ProjectConfig, ProjectContainer, ProjectContextResolver } from '@contember/engine-http'\nimport { Identity } from '../../authorization/index.js'\n\nexport interface ActionsContext {\n\tprojectContainer: ProjectContainer\n\tproject: ProjectConfig\n\tidentity: Identity\n}\n\nexport class ActionsContextResolver {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly projectContextResolver: ProjectContextResolver,\n\t) {\n\t}\n\n\tasync resolve(ctx: ApplicationContext): Promise<ActionsContext> {\n\t\tconst { timer, projectGroup: { tenantContainer }, logger, authResult } = ctx\n\t\tconst projectContext = await this.projectContextResolver.resolve(ctx)\n\t\tconst { project } = projectContext\n\t\tif (!authResult) {\n\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t}\n\t\tconst memberships = await timer('MembershipFetch', () =>\n\t\t\ttenantContainer.projectMemberManager.getEffectiveProjectMemberships(\n\t\t\t\ttenantContainer.databaseContext,\n\t\t\t\t{ slug: project.slug },\n\t\t\t\t{\n\t\t\t\t\tid: authResult.identityId,\n\t\t\t\t\troles: authResult.roles,\n\t\t\t\t},\n\t\t\t))\n\t\tlogger.debug('Memberships fetched', { memberships })\n\n\t\tif (memberships.length === 0) {\n\t\t\tthrow this.debug\n\t\t\t\t? new HttpErrorResponse(404, `You are not allowed to access project ${project.slug}`)\n\t\t\t\t: new HttpErrorResponse(404, `Project ${project.slug} NOT found`)\n\t\t}\n\t\tconst roles = memberships.map(it => it.role)\n\t\treturn {\n\t\t\t...projectContext,\n\t\t\tidentity: { id: authResult.identityId, roles },\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AASO,MAAM,uBAAuB;AAAA,EACnC,YACkB,OACA,wBAChB;AAFgB,SAAA,QAAA;AACA,SAAA,yBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,QAAQ,KAAkD;AAC/D,UAAM,EAAE,OAAO,cAAc,EAAE,mBAAmB,QAAQ,eAAe;AACzE,UAAM,iBAAiB,MAAM,KAAK,uBAAuB,QAAQ,GAAG;AACpE,UAAM,EAAE,YAAY;AACpB,QAAI,CAAC,YAAY;AAChB,YAAM,IAAI,kBAAkB,KAAK,yBAAyB;AAAA,IAC3D;AACA,UAAM,cAAc,MAAM,MAAM,mBAAmB,MAClD,gBAAgB,qBAAqB;AAAA,MACpC,gBAAgB;AAAA,MAChB,EAAE,MAAM,QAAQ,KAAA;AAAA,MAChB;AAAA,QACC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,MAAA;AAAA,IACnB,CACA;AACF,WAAO,MAAM,uBAAuB,EAAE,YAAA,CAAa;AAEnD,QAAI,YAAY,WAAW,GAAG;AAC7B,YAAM,KAAK,QACR,IAAI,kBAAkB,KAAK,yCAAyC,QAAQ,IAAI,EAAE,IAClF,IAAI,kBAAkB,KAAK,WAAW,QAAQ,IAAI,YAAY;AAAA,IAClE;AACA,UAAM,QAAQ,YAAY,IAAI,CAAA,OAAM,GAAG,IAAI;AAC3C,WAAO;AAAA,MACN,GAAG;AAAA,MACH,UAAU,EAAE,IAAI,WAAW,YAAY,MAAA;AAAA,IAAM;AAAA,EAE/C;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsGraphQLHandlerFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsGraphQLHandlerFactory.ts"],"sourcesContent":["import { makeExecutableSchema } from '@graphql-tools/schema'\nimport { createGraphQLQueryHandler, GraphQLQueryHandler } from '@contember/engine-http'\nimport { ResolversFactory } from '../resolvers/ResolversFactory'\nimport { schema as graphqlDocument } from '../schema/actions.graphql'\nimport { ActionsContext } from '../resolvers/ActionsContext'\n\nexport type ActionsGraphQLHandler = GraphQLQueryHandler<ActionsContext>\n\nexport class ActionsGraphQLHandlerFactory {\n\tcreate(resolversFactory: ResolversFactory): ActionsGraphQLHandler {\n\t\tconst resolvers = resolversFactory.create()\n\t\tconst schema = makeExecutableSchema({\n\t\t\ttypeDefs: graphqlDocument,\n\t\t\tresolvers,\n\t\t})\n\n\t\treturn createGraphQLQueryHandler<ActionsContext>({\n\t\t\tschema,\n\t\t\tlisteners: [],\n\t\t})\n\t}\n}\n"],"names":["schema","makeExecutableSchema","graphqlDocument","createGraphQLQueryHandler"],"mappings":";;;;;AAQO,MAAM,6BAA6B;AAAA,EACzC,OAAO,kBAA2D;AACjE,UAAM,YAAY,iBAAiB,OAAA;AACnC,UAAMA,WAASC,OAAAA,qBAAqB;AAAA,MACnC,UAAUC,gBAAAA;AAAAA,MACV;AAAA,IAAA,CACA;AAED,WAAOC,qCAA0C;AAAA,MAAA,QAChDH;AAAAA,MACA,WAAW,CAAA;AAAA,IAAC,CACZ;AAAA,EACF;AACD;;"}
1
+ {"version":3,"file":"ActionsGraphQLHandlerFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsGraphQLHandlerFactory.ts"],"sourcesContent":["import { makeExecutableSchema } from '@graphql-tools/schema'\nimport { createGraphQLQueryHandler, GraphQLQueryHandler } from '@contember/engine-http'\nimport { ResolversFactory } from '../resolvers/ResolversFactory.js'\n// biome-ignore lint/correctness/useImportExtensions: .graphql files are resolved by the bundler loader, not as JS modules\nimport { schema as graphqlDocument } from '../schema/actions.graphql'\nimport { ActionsContext } from '../resolvers/ActionsContext.js'\n\nexport type ActionsGraphQLHandler = GraphQLQueryHandler<ActionsContext>\n\nexport class ActionsGraphQLHandlerFactory {\n\tcreate(resolversFactory: ResolversFactory): ActionsGraphQLHandler {\n\t\tconst resolvers = resolversFactory.create()\n\t\tconst schema = makeExecutableSchema({\n\t\t\ttypeDefs: graphqlDocument,\n\t\t\tresolvers,\n\t\t})\n\n\t\treturn createGraphQLQueryHandler<ActionsContext>({\n\t\t\tschema,\n\t\t\tlisteners: [],\n\t\t})\n\t}\n}\n"],"names":["schema","makeExecutableSchema","graphqlDocument","createGraphQLQueryHandler"],"mappings":";;;;;AASO,MAAM,6BAA6B;AAAA,EACzC,OAAO,kBAA2D;AACjE,UAAM,YAAY,iBAAiB,OAAA;AACnC,UAAMA,WAASC,OAAAA,qBAAqB;AAAA,MACnC,UAAUC,gBAAAA;AAAAA,MACV;AAAA,IAAA,CACA;AAED,WAAOC,qCAA0C;AAAA,MAAA,QAChDH;AAAAA,MACA,WAAW,CAAA;AAAA,IAAC,CACZ;AAAA,EACF;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsGraphQLHandlerFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsGraphQLHandlerFactory.ts"],"sourcesContent":["import { makeExecutableSchema } from '@graphql-tools/schema'\nimport { createGraphQLQueryHandler, GraphQLQueryHandler } from '@contember/engine-http'\nimport { ResolversFactory } from '../resolvers/ResolversFactory'\nimport { schema as graphqlDocument } from '../schema/actions.graphql'\nimport { ActionsContext } from '../resolvers/ActionsContext'\n\nexport type ActionsGraphQLHandler = GraphQLQueryHandler<ActionsContext>\n\nexport class ActionsGraphQLHandlerFactory {\n\tcreate(resolversFactory: ResolversFactory): ActionsGraphQLHandler {\n\t\tconst resolvers = resolversFactory.create()\n\t\tconst schema = makeExecutableSchema({\n\t\t\ttypeDefs: graphqlDocument,\n\t\t\tresolvers,\n\t\t})\n\n\t\treturn createGraphQLQueryHandler<ActionsContext>({\n\t\t\tschema,\n\t\t\tlisteners: [],\n\t\t})\n\t}\n}\n"],"names":["schema","graphqlDocument"],"mappings":";;;AAQO,MAAM,6BAA6B;AAAA,EACzC,OAAO,kBAA2D;AACjE,UAAM,YAAY,iBAAiB,OAAA;AACnC,UAAMA,WAAS,qBAAqB;AAAA,MACnC,UAAUC;AAAAA,MACV;AAAA,IAAA,CACA;AAED,WAAO,0BAA0C;AAAA,MAAA,QAChDD;AAAAA,MACA,WAAW,CAAA;AAAA,IAAC,CACZ;AAAA,EACF;AACD;"}
1
+ {"version":3,"file":"ActionsGraphQLHandlerFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsGraphQLHandlerFactory.ts"],"sourcesContent":["import { makeExecutableSchema } from '@graphql-tools/schema'\nimport { createGraphQLQueryHandler, GraphQLQueryHandler } from '@contember/engine-http'\nimport { ResolversFactory } from '../resolvers/ResolversFactory.js'\n// biome-ignore lint/correctness/useImportExtensions: .graphql files are resolved by the bundler loader, not as JS modules\nimport { schema as graphqlDocument } from '../schema/actions.graphql'\nimport { ActionsContext } from '../resolvers/ActionsContext.js'\n\nexport type ActionsGraphQLHandler = GraphQLQueryHandler<ActionsContext>\n\nexport class ActionsGraphQLHandlerFactory {\n\tcreate(resolversFactory: ResolversFactory): ActionsGraphQLHandler {\n\t\tconst resolvers = resolversFactory.create()\n\t\tconst schema = makeExecutableSchema({\n\t\t\ttypeDefs: graphqlDocument,\n\t\t\tresolvers,\n\t\t})\n\n\t\treturn createGraphQLQueryHandler<ActionsContext>({\n\t\t\tschema,\n\t\t\tlisteners: [],\n\t\t})\n\t}\n}\n"],"names":["schema","graphqlDocument"],"mappings":";;;AASO,MAAM,6BAA6B;AAAA,EACzC,OAAO,kBAA2D;AACjE,UAAM,YAAY,iBAAiB,OAAA;AACnC,UAAMA,WAAS,qBAAqB;AAAA,MACnC,UAAUC;AAAAA,MACV;AAAA,IAAA,CACA;AAED,WAAO,0BAA0C;AAAA,MAAA,QAChDD;AAAAA,MACA,WAAW,CAAA;AAAA,IAAC,CACZ;AAAA,EACF;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsWebsocketControllerFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsWebsocketControllerFactory.ts"],"sourcesContent":["import { HttpErrorResponse, WebSocketController } from '@contember/engine-http'\nimport { ActionsContextResolver } from './ActionsContextResolver'\nimport { DispatchWorkerSupervisorFactory } from '../../dispatch/DispatchWorkerSupervisor'\nimport * as Typesafe from '@contember/typesafe'\nimport { TenantRole } from '@contember/engine-tenant-api'\nimport { Running } from '@contember/engine-common'\n\nconst IncomingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\tstartWorker: Typesafe.object({}),\n\t\tstopAllWorkers: Typesafe.object({}),\n\t},\n)\ntype IncomingMessage = ReturnType<typeof IncomingMessage>\nconst OutgoingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\terror: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tmessage: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tready: Typesafe.object({}),\n\n\t\tworkerStarted: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkedStopped: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerFailedToStart: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerCrashed: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t},\n)\n\ntype OutgoingMessage = ReturnType<typeof OutgoingMessage>\n\nexport class ActionsWebsocketControllerFactory {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly dispatchWorkerSupervisorFactory: DispatchWorkerSupervisorFactory,\n\t) {\n\t}\n\n\tcreate(): WebSocketController {\n\t\treturn async ctx => {\n\t\t\tconst { ws, logger, authResult, projectGroup } = ctx\n\t\t\tif (!authResult) {\n\t\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t\t}\n\t\t\tif (!authResult.roles.some(it => it === TenantRole.SUPER_ADMIN || it === TenantRole.PROJECT_ADMIN)) {\n\t\t\t\tthrow new HttpErrorResponse(403, 'Not allowed to run actions worker')\n\t\t\t}\n\n\t\t\tconst send = (message: OutgoingMessage) => {\n\t\t\t\tif (this.debug) {\n\t\t\t\t\tOutgoingMessage(message)\n\t\t\t\t}\n\t\t\t\tws.send(JSON.stringify(message))\n\t\t\t}\n\n\t\t\tlet workers: { id: string; running: Promise<Running> }[] = []\n\t\t\tconst abortListener = async () => {\n\t\t\t\tsend({ type: 'message', message: 'shutting down' })\n\t\t\t\tawait stopAll()\n\t\t\t\tsend({ type: 'message', message: 'closing connection' })\n\t\t\t\tws.close(1012) // Service Restart\n\t\t\t}\n\t\t\tctx.abortSignal.addEventListener('abort', abortListener)\n\n\t\t\tconst stopAll = async () => {\n\t\t\t\tconst currentWorkers = workers.map(async it => {\n\t\t\t\t\tawait (await it.running).end()\n\t\t\t\t\tsend({\n\t\t\t\t\t\ttype: 'workedStopped',\n\t\t\t\t\t\tworkerId: it.id,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tworkers = []\n\t\t\t\tawait Promise.all(currentWorkers)\n\t\t\t}\n\t\t\tsend({ type: 'ready' })\n\n\t\t\tws.addEventListener('message', async message => {\n\t\t\t\tlet json\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(message.data.toString())\n\t\t\t\t} catch {\n\t\t\t\t\tsend({ type: 'error', message: 'Invalid JSON' })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet data: IncomingMessage\n\t\t\t\ttry {\n\t\t\t\t\tdata = IncomingMessage(json)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof Typesafe.ParseError) {\n\t\t\t\t\t\tsend({ type: 'error', message: e.message })\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (data.type) {\n\t\t\t\t\tcase 'startWorker':\n\t\t\t\t\t\tconst workerId = Math.random().toString().substring(2)\n\t\t\t\t\t\tconst dispatchSupervisor = this.dispatchWorkerSupervisorFactory.create(projectGroup)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst running = dispatchSupervisor.run({\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tonError: () => {\n\t\t\t\t\t\t\t\t\tsend({ type: 'workerCrashed', workerId })\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tworkers.push({ id: workerId, running })\n\t\t\t\t\t\t\tawait running\n\t\t\t\t\t\t\tsend({ type: 'workerStarted', workerId })\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.error(e, { message: 'Worker failed to start' })\n\t\t\t\t\t\t\tsend({ type: 'workerFailedToStart', workerId })\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'stopAllWorkers':\n\t\t\t\t\t\tsend({ type: 'message', message: 'stopping' })\n\t\t\t\t\t\tawait stopAll()\n\t\t\t\t\t\tsend({ type: 'message', message: 'all stopped' })\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst pingHandle = setInterval(() => {\n\t\t\t\tws.ping()\n\t\t\t}, 5000)\n\n\t\t\tws.addEventListener('close', async () => {\n\t\t\t\tctx.abortSignal.removeEventListener('abort', abortListener)\n\t\t\t\tclearInterval(pingHandle)\n\t\t\t\tawait stopAll()\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":["Typesafe","HttpErrorResponse","TenantRole"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,kBAAkBA,oBAAS;AAAA,EAChC;AAAA,EACA;AAAA,IACC,aAAaA,oBAAS,OAAO,EAAE;AAAA,IAC/B,gBAAgBA,oBAAS,OAAO,CAAA,CAAE;AAAA,EAAA;AAEpC;AAEA,MAAM,kBAAkBA,oBAAS;AAAA,EAChC;AAAA,EACA;AAAA,IACC,OAAOA,oBAAS,OAAO;AAAA,MACtB,SAASA,oBAAS;AAAA,IAAA,CAClB;AAAA,IACD,SAASA,oBAAS,OAAO;AAAA,MACxB,SAASA,oBAAS;AAAA,IAAA,CAClB;AAAA,IACD,OAAOA,oBAAS,OAAO,EAAE;AAAA,IAEzB,eAAeA,oBAAS,OAAO;AAAA,MAC9B,UAAUA,oBAAS;AAAA,IAAA,CACnB;AAAA,IACD,eAAeA,oBAAS,OAAO;AAAA,MAC9B,UAAUA,oBAAS;AAAA,IAAA,CACnB;AAAA,IACD,qBAAqBA,oBAAS,OAAO;AAAA,MACpC,UAAUA,oBAAS;AAAA,IAAA,CACnB;AAAA,IACD,eAAeA,oBAAS,OAAO;AAAA,MAC9B,UAAUA,oBAAS;AAAA,IAAA,CACnB;AAAA,EAAA;AAEH;AAIO,MAAM,kCAAkC;AAAA,EAC9C,YACkB,OACA,wBACA,iCAChB;AAHgB,SAAA,QAAA;AACA,SAAA,yBAAA;AACA,SAAA,kCAAA;AAAA,EAElB;AAAA,EAEA,SAA8B;AAC7B,WAAO,OAAM,QAAO;AACnB,YAAM,EAAE,IAAI,QAAQ,YAAY,iBAAiB;AACjD,UAAI,CAAC,YAAY;AAChB,cAAM,IAAIC,WAAAA,kBAAkB,KAAK,yBAAyB;AAAA,MAC3D;AACA,UAAI,CAAC,WAAW,MAAM,KAAK,CAAA,OAAM,OAAOC,gBAAAA,WAAW,eAAe,OAAOA,gBAAAA,WAAW,aAAa,GAAG;AACnG,cAAM,IAAID,WAAAA,kBAAkB,KAAK,mCAAmC;AAAA,MACrE;AAEA,YAAM,OAAO,CAAC,YAA6B;AAC1C,YAAI,KAAK,OAAO;AACf,0BAAgB,OAAO;AAAA,QACxB;AACA,WAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAAA,MAChC;AAEA,UAAI,UAAuD,CAAA;AAC3D,YAAM,gBAAgB,YAAY;AACjC,aAAK,EAAE,MAAM,WAAW,SAAS,iBAAiB;AAClD,cAAM,QAAA;AACN,aAAK,EAAE,MAAM,WAAW,SAAS,sBAAsB;AACvD,WAAG,MAAM,IAAI;AAAA,MACd;AACA,UAAI,YAAY,iBAAiB,SAAS,aAAa;AAEvD,YAAM,UAAU,YAAY;AAC3B,cAAM,iBAAiB,QAAQ,IAAI,OAAM,OAAM;AAC9C,iBAAO,MAAM,GAAG,SAAS,IAAA;AACzB,eAAK;AAAA,YACJ,MAAM;AAAA,YACN,UAAU,GAAG;AAAA,UAAA,CACb;AAAA,QACF,CAAC;AACD,kBAAU,CAAA;AACV,cAAM,QAAQ,IAAI,cAAc;AAAA,MACjC;AACA,WAAK,EAAE,MAAM,SAAS;AAEtB,SAAG,iBAAiB,WAAW,OAAM,YAAW;AAC/C,YAAI;AACJ,YAAI;AACH,iBAAO,KAAK,MAAM,QAAQ,KAAK,UAAU;AAAA,QAC1C,QAAQ;AACP,eAAK,EAAE,MAAM,SAAS,SAAS,gBAAgB;AAC/C;AAAA,QACD;AACA,YAAI;AACJ,YAAI;AACH,iBAAO,gBAAgB,IAAI;AAAA,QAC5B,SAAS,GAAG;AACX,cAAI,aAAaD,oBAAS,YAAY;AACrC,iBAAK,EAAE,MAAM,SAAS,SAAS,EAAE,SAAS;AAC1C;AAAA,UACD,OAAO;AACN,kBAAM;AAAA,UACP;AAAA,QACD;AAEA,gBAAQ,KAAK,MAAA;AAAA,UACZ,KAAK;AACJ,kBAAM,WAAW,KAAK,OAAA,EAAS,SAAA,EAAW,UAAU,CAAC;AACrD,kBAAM,qBAAqB,KAAK,gCAAgC,OAAO,YAAY;AACnF,gBAAI;AACH,oBAAM,UAAU,mBAAmB,IAAI;AAAA,gBACtC;AAAA,gBACA,SAAS,MAAM;AACd,uBAAK,EAAE,MAAM,iBAAiB,SAAA,CAAU;AAAA,gBACzC;AAAA,cAAA,CACA;AACD,sBAAQ,KAAK,EAAE,IAAI,UAAU,SAAS;AACtC,oBAAM;AACN,mBAAK,EAAE,MAAM,iBAAiB,SAAA,CAAU;AAAA,YACzC,SAAS,GAAG;AACX,qBAAO,MAAM,GAAG,EAAE,SAAS,0BAA0B;AACrD,mBAAK,EAAE,MAAM,uBAAuB,SAAA,CAAU;AAAA,YAC/C;AACA;AAAA,UACD,KAAK;AACJ,iBAAK,EAAE,MAAM,WAAW,SAAS,YAAY;AAC7C,kBAAM,QAAA;AACN,iBAAK,EAAE,MAAM,WAAW,SAAS,eAAe;AAChD;AAAA,QAAA;AAAA,MAEH,CAAC;AAED,YAAM,aAAa,YAAY,MAAM;AACpC,WAAG,KAAA;AAAA,MACJ,GAAG,GAAI;AAEP,SAAG,iBAAiB,SAAS,YAAY;AACxC,YAAI,YAAY,oBAAoB,SAAS,aAAa;AAC1D,sBAAc,UAAU;AACxB,cAAM,QAAA;AAAA,MACP,CAAC;AAAA,IACF;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"ActionsWebsocketControllerFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsWebsocketControllerFactory.ts"],"sourcesContent":["import { HttpErrorResponse, WebSocketController } from '@contember/engine-http'\nimport { ActionsContextResolver } from './ActionsContextResolver.js'\nimport { DispatchWorkerSupervisorFactory } from '../../dispatch/DispatchWorkerSupervisor.js'\nimport * as Typesafe from '@contember/typesafe'\nimport { TenantRole } from '@contember/engine-tenant-api'\nimport { Running } from '@contember/engine-common'\n\nconst IncomingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\tstartWorker: Typesafe.object({}),\n\t\tstopAllWorkers: Typesafe.object({}),\n\t},\n)\ntype IncomingMessage = ReturnType<typeof IncomingMessage>\nconst OutgoingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\terror: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tmessage: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tready: Typesafe.object({}),\n\n\t\tworkerStarted: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkedStopped: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerFailedToStart: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerCrashed: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t},\n)\n\ntype OutgoingMessage = ReturnType<typeof OutgoingMessage>\n\nexport class ActionsWebsocketControllerFactory {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly dispatchWorkerSupervisorFactory: DispatchWorkerSupervisorFactory,\n\t) {\n\t}\n\n\tcreate(): WebSocketController {\n\t\treturn async ctx => {\n\t\t\tconst { ws, logger, authResult, projectGroup } = ctx\n\t\t\tif (!authResult) {\n\t\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t\t}\n\t\t\tif (!authResult.roles.some(it => it === TenantRole.SUPER_ADMIN || it === TenantRole.PROJECT_ADMIN)) {\n\t\t\t\tthrow new HttpErrorResponse(403, 'Not allowed to run actions worker')\n\t\t\t}\n\n\t\t\tconst send = (message: OutgoingMessage) => {\n\t\t\t\tif (this.debug) {\n\t\t\t\t\tOutgoingMessage(message)\n\t\t\t\t}\n\t\t\t\tws.send(JSON.stringify(message))\n\t\t\t}\n\n\t\t\tlet workers: { id: string; running: Promise<Running> }[] = []\n\t\t\tconst abortListener = async () => {\n\t\t\t\tsend({ type: 'message', message: 'shutting down' })\n\t\t\t\tawait stopAll()\n\t\t\t\tsend({ type: 'message', message: 'closing connection' })\n\t\t\t\tws.close(1012) // Service Restart\n\t\t\t}\n\t\t\tctx.abortSignal.addEventListener('abort', abortListener)\n\n\t\t\tconst stopAll = async () => {\n\t\t\t\tconst currentWorkers = workers.map(async it => {\n\t\t\t\t\tawait (await it.running).end()\n\t\t\t\t\tsend({\n\t\t\t\t\t\ttype: 'workedStopped',\n\t\t\t\t\t\tworkerId: it.id,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tworkers = []\n\t\t\t\tawait Promise.all(currentWorkers)\n\t\t\t}\n\t\t\tsend({ type: 'ready' })\n\n\t\t\tws.addEventListener('message', async message => {\n\t\t\t\tlet json\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(message.data.toString())\n\t\t\t\t} catch {\n\t\t\t\t\tsend({ type: 'error', message: 'Invalid JSON' })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet data: IncomingMessage\n\t\t\t\ttry {\n\t\t\t\t\tdata = IncomingMessage(json)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof Typesafe.ParseError) {\n\t\t\t\t\t\tsend({ type: 'error', message: e.message })\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (data.type) {\n\t\t\t\t\tcase 'startWorker':\n\t\t\t\t\t\tconst workerId = Math.random().toString().substring(2)\n\t\t\t\t\t\tconst dispatchSupervisor = this.dispatchWorkerSupervisorFactory.create(projectGroup)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst running = dispatchSupervisor.run({\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tonError: () => {\n\t\t\t\t\t\t\t\t\tsend({ type: 'workerCrashed', workerId })\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tworkers.push({ id: workerId, running })\n\t\t\t\t\t\t\tawait running\n\t\t\t\t\t\t\tsend({ type: 'workerStarted', workerId })\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.error(e, { message: 'Worker failed to start' })\n\t\t\t\t\t\t\tsend({ type: 'workerFailedToStart', workerId })\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'stopAllWorkers':\n\t\t\t\t\t\tsend({ type: 'message', message: 'stopping' })\n\t\t\t\t\t\tawait stopAll()\n\t\t\t\t\t\tsend({ type: 'message', message: 'all stopped' })\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst pingHandle = setInterval(() => {\n\t\t\t\tws.ping()\n\t\t\t}, 5000)\n\n\t\t\tws.addEventListener('close', async () => {\n\t\t\t\tctx.abortSignal.removeEventListener('abort', abortListener)\n\t\t\t\tclearInterval(pingHandle)\n\t\t\t\tawait stopAll()\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":["Typesafe","HttpErrorResponse","TenantRole"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionsWebsocketControllerFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsWebsocketControllerFactory.ts"],"sourcesContent":["import { HttpErrorResponse, WebSocketController } from '@contember/engine-http'\nimport { ActionsContextResolver } from './ActionsContextResolver'\nimport { DispatchWorkerSupervisorFactory } from '../../dispatch/DispatchWorkerSupervisor'\nimport * as Typesafe from '@contember/typesafe'\nimport { TenantRole } from '@contember/engine-tenant-api'\nimport { Running } from '@contember/engine-common'\n\nconst IncomingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\tstartWorker: Typesafe.object({}),\n\t\tstopAllWorkers: Typesafe.object({}),\n\t},\n)\ntype IncomingMessage = ReturnType<typeof IncomingMessage>\nconst OutgoingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\terror: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tmessage: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tready: Typesafe.object({}),\n\n\t\tworkerStarted: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkedStopped: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerFailedToStart: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerCrashed: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t},\n)\n\ntype OutgoingMessage = ReturnType<typeof OutgoingMessage>\n\nexport class ActionsWebsocketControllerFactory {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly dispatchWorkerSupervisorFactory: DispatchWorkerSupervisorFactory,\n\t) {\n\t}\n\n\tcreate(): WebSocketController {\n\t\treturn async ctx => {\n\t\t\tconst { ws, logger, authResult, projectGroup } = ctx\n\t\t\tif (!authResult) {\n\t\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t\t}\n\t\t\tif (!authResult.roles.some(it => it === TenantRole.SUPER_ADMIN || it === TenantRole.PROJECT_ADMIN)) {\n\t\t\t\tthrow new HttpErrorResponse(403, 'Not allowed to run actions worker')\n\t\t\t}\n\n\t\t\tconst send = (message: OutgoingMessage) => {\n\t\t\t\tif (this.debug) {\n\t\t\t\t\tOutgoingMessage(message)\n\t\t\t\t}\n\t\t\t\tws.send(JSON.stringify(message))\n\t\t\t}\n\n\t\t\tlet workers: { id: string; running: Promise<Running> }[] = []\n\t\t\tconst abortListener = async () => {\n\t\t\t\tsend({ type: 'message', message: 'shutting down' })\n\t\t\t\tawait stopAll()\n\t\t\t\tsend({ type: 'message', message: 'closing connection' })\n\t\t\t\tws.close(1012) // Service Restart\n\t\t\t}\n\t\t\tctx.abortSignal.addEventListener('abort', abortListener)\n\n\t\t\tconst stopAll = async () => {\n\t\t\t\tconst currentWorkers = workers.map(async it => {\n\t\t\t\t\tawait (await it.running).end()\n\t\t\t\t\tsend({\n\t\t\t\t\t\ttype: 'workedStopped',\n\t\t\t\t\t\tworkerId: it.id,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tworkers = []\n\t\t\t\tawait Promise.all(currentWorkers)\n\t\t\t}\n\t\t\tsend({ type: 'ready' })\n\n\t\t\tws.addEventListener('message', async message => {\n\t\t\t\tlet json\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(message.data.toString())\n\t\t\t\t} catch {\n\t\t\t\t\tsend({ type: 'error', message: 'Invalid JSON' })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet data: IncomingMessage\n\t\t\t\ttry {\n\t\t\t\t\tdata = IncomingMessage(json)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof Typesafe.ParseError) {\n\t\t\t\t\t\tsend({ type: 'error', message: e.message })\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (data.type) {\n\t\t\t\t\tcase 'startWorker':\n\t\t\t\t\t\tconst workerId = Math.random().toString().substring(2)\n\t\t\t\t\t\tconst dispatchSupervisor = this.dispatchWorkerSupervisorFactory.create(projectGroup)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst running = dispatchSupervisor.run({\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tonError: () => {\n\t\t\t\t\t\t\t\t\tsend({ type: 'workerCrashed', workerId })\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tworkers.push({ id: workerId, running })\n\t\t\t\t\t\t\tawait running\n\t\t\t\t\t\t\tsend({ type: 'workerStarted', workerId })\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.error(e, { message: 'Worker failed to start' })\n\t\t\t\t\t\t\tsend({ type: 'workerFailedToStart', workerId })\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'stopAllWorkers':\n\t\t\t\t\t\tsend({ type: 'message', message: 'stopping' })\n\t\t\t\t\t\tawait stopAll()\n\t\t\t\t\t\tsend({ type: 'message', message: 'all stopped' })\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst pingHandle = setInterval(() => {\n\t\t\t\tws.ping()\n\t\t\t}, 5000)\n\n\t\t\tws.addEventListener('close', async () => {\n\t\t\t\tctx.abortSignal.removeEventListener('abort', abortListener)\n\t\t\t\tclearInterval(pingHandle)\n\t\t\t\tawait stopAll()\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ActionsWebsocketControllerFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/http/ActionsWebsocketControllerFactory.ts"],"sourcesContent":["import { HttpErrorResponse, WebSocketController } from '@contember/engine-http'\nimport { ActionsContextResolver } from './ActionsContextResolver.js'\nimport { DispatchWorkerSupervisorFactory } from '../../dispatch/DispatchWorkerSupervisor.js'\nimport * as Typesafe from '@contember/typesafe'\nimport { TenantRole } from '@contember/engine-tenant-api'\nimport { Running } from '@contember/engine-common'\n\nconst IncomingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\tstartWorker: Typesafe.object({}),\n\t\tstopAllWorkers: Typesafe.object({}),\n\t},\n)\ntype IncomingMessage = ReturnType<typeof IncomingMessage>\nconst OutgoingMessage = Typesafe.discriminatedUnion(\n\t'type',\n\t{\n\t\terror: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tmessage: Typesafe.object({\n\t\t\tmessage: Typesafe.string,\n\t\t}),\n\t\tready: Typesafe.object({}),\n\n\t\tworkerStarted: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkedStopped: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerFailedToStart: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t\tworkerCrashed: Typesafe.object({\n\t\t\tworkerId: Typesafe.string,\n\t\t}),\n\t},\n)\n\ntype OutgoingMessage = ReturnType<typeof OutgoingMessage>\n\nexport class ActionsWebsocketControllerFactory {\n\tconstructor(\n\t\tprivate readonly debug: boolean,\n\t\tprivate readonly actionsContextResolver: ActionsContextResolver,\n\t\tprivate readonly dispatchWorkerSupervisorFactory: DispatchWorkerSupervisorFactory,\n\t) {\n\t}\n\n\tcreate(): WebSocketController {\n\t\treturn async ctx => {\n\t\t\tconst { ws, logger, authResult, projectGroup } = ctx\n\t\t\tif (!authResult) {\n\t\t\t\tthrow new HttpErrorResponse(401, 'Authentication required')\n\t\t\t}\n\t\t\tif (!authResult.roles.some(it => it === TenantRole.SUPER_ADMIN || it === TenantRole.PROJECT_ADMIN)) {\n\t\t\t\tthrow new HttpErrorResponse(403, 'Not allowed to run actions worker')\n\t\t\t}\n\n\t\t\tconst send = (message: OutgoingMessage) => {\n\t\t\t\tif (this.debug) {\n\t\t\t\t\tOutgoingMessage(message)\n\t\t\t\t}\n\t\t\t\tws.send(JSON.stringify(message))\n\t\t\t}\n\n\t\t\tlet workers: { id: string; running: Promise<Running> }[] = []\n\t\t\tconst abortListener = async () => {\n\t\t\t\tsend({ type: 'message', message: 'shutting down' })\n\t\t\t\tawait stopAll()\n\t\t\t\tsend({ type: 'message', message: 'closing connection' })\n\t\t\t\tws.close(1012) // Service Restart\n\t\t\t}\n\t\t\tctx.abortSignal.addEventListener('abort', abortListener)\n\n\t\t\tconst stopAll = async () => {\n\t\t\t\tconst currentWorkers = workers.map(async it => {\n\t\t\t\t\tawait (await it.running).end()\n\t\t\t\t\tsend({\n\t\t\t\t\t\ttype: 'workedStopped',\n\t\t\t\t\t\tworkerId: it.id,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tworkers = []\n\t\t\t\tawait Promise.all(currentWorkers)\n\t\t\t}\n\t\t\tsend({ type: 'ready' })\n\n\t\t\tws.addEventListener('message', async message => {\n\t\t\t\tlet json\n\t\t\t\ttry {\n\t\t\t\t\tjson = JSON.parse(message.data.toString())\n\t\t\t\t} catch {\n\t\t\t\t\tsend({ type: 'error', message: 'Invalid JSON' })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tlet data: IncomingMessage\n\t\t\t\ttry {\n\t\t\t\t\tdata = IncomingMessage(json)\n\t\t\t\t} catch (e) {\n\t\t\t\t\tif (e instanceof Typesafe.ParseError) {\n\t\t\t\t\t\tsend({ type: 'error', message: e.message })\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow e\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tswitch (data.type) {\n\t\t\t\t\tcase 'startWorker':\n\t\t\t\t\t\tconst workerId = Math.random().toString().substring(2)\n\t\t\t\t\t\tconst dispatchSupervisor = this.dispatchWorkerSupervisorFactory.create(projectGroup)\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst running = dispatchSupervisor.run({\n\t\t\t\t\t\t\t\tlogger,\n\t\t\t\t\t\t\t\tonError: () => {\n\t\t\t\t\t\t\t\t\tsend({ type: 'workerCrashed', workerId })\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tworkers.push({ id: workerId, running })\n\t\t\t\t\t\t\tawait running\n\t\t\t\t\t\t\tsend({ type: 'workerStarted', workerId })\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\tlogger.error(e, { message: 'Worker failed to start' })\n\t\t\t\t\t\t\tsend({ type: 'workerFailedToStart', workerId })\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase 'stopAllWorkers':\n\t\t\t\t\t\tsend({ type: 'message', message: 'stopping' })\n\t\t\t\t\t\tawait stopAll()\n\t\t\t\t\t\tsend({ type: 'message', message: 'all stopped' })\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst pingHandle = setInterval(() => {\n\t\t\t\tws.ping()\n\t\t\t}, 5000)\n\n\t\t\tws.addEventListener('close', async () => {\n\t\t\t\tctx.abortSignal.removeEventListener('abort', abortListener)\n\t\t\t\tclearInterval(pingHandle)\n\t\t\t\tawait stopAll()\n\t\t\t})\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResolversFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/resolvers/ResolversFactory.ts"],"sourcesContent":["import { DateTimeType, JSONType, UuidType } from '@contember/graphql-utils'\nimport { Resolvers } from '../schema'\nimport { EventsQueryResolver } from './query'\nimport { ProcessBatchMutationResolver, RetryEventMutationResolver, SetVariablesMutationResolver, StopEventMutationResolver } from './mutation'\nimport { ActionsContext } from './ActionsContext'\nimport { VariablesQueryResolver } from './query/VariablesQueryResolver'\n\nexport class ResolversFactory {\n\tconstructor(\n\t\tprivate readonly eventsQueryResolver: EventsQueryResolver,\n\t\tprivate readonly processBatchMutationResolver: ProcessBatchMutationResolver,\n\t\tprivate readonly variablesQueryResolver: VariablesQueryResolver,\n\t\tprivate readonly setVariablesMutationResolver: SetVariablesMutationResolver,\n\t\tprivate readonly retryEventMutationResolver: RetryEventMutationResolver,\n\t\tprivate readonly stopEventMutationResolver: StopEventMutationResolver,\n\t) {\n\t}\n\n\tcreate(): Resolvers {\n\t\tconst resolvers: Resolvers<ActionsContext> & { Mutation: Required<Resolvers<ActionsContext>['Mutation']> } & {\n\t\t\tQuery: Required<Resolvers<ActionsContext>['Query']>\n\t\t} = {\n\t\t\tJson: JSONType,\n\t\t\tDateTime: DateTimeType,\n\t\t\tUuid: UuidType,\n\t\t\tMutation: {\n\t\t\t\tprocessBatch: this.processBatchMutationResolver.processBatch.bind(this.processBatchMutationResolver),\n\t\t\t\tsetVariables: this.setVariablesMutationResolver.setVariables.bind(this.setVariablesMutationResolver),\n\t\t\t\tretryEvent: this.retryEventMutationResolver.retryEvent.bind(this.retryEventMutationResolver),\n\t\t\t\tstopEvent: this.stopEventMutationResolver.stopEvent.bind(this.stopEventMutationResolver),\n\t\t\t},\n\t\t\tQuery: {\n\t\t\t\teventsInProcessing: this.eventsQueryResolver.eventsInProcessing.bind(this.eventsQueryResolver),\n\t\t\t\teventsToProcess: this.eventsQueryResolver.eventsToProcess.bind(this.eventsQueryResolver),\n\t\t\t\tfailedEvents: this.eventsQueryResolver.failedEvents.bind(this.eventsQueryResolver),\n\t\t\t\tevent: this.eventsQueryResolver.event.bind(this.eventsQueryResolver),\n\t\t\t\tvariables: this.variablesQueryResolver.variables.bind(this.variablesQueryResolver),\n\t\t\t},\n\t\t}\n\t\treturn resolvers\n\t}\n}\n"],"names":["JSONType","DateTimeType","UuidType"],"mappings":";;;AAOO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,qBACA,8BACA,wBACA,8BACA,4BACA,2BAChB;AANgB,SAAA,sBAAA;AACA,SAAA,+BAAA;AACA,SAAA,yBAAA;AACA,SAAA,+BAAA;AACA,SAAA,6BAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,SAAoB;AACnB,UAAM,YAEF;AAAA,MACH,MAAMA,aAAAA;AAAAA,MACN,UAAUC,aAAAA;AAAAA,MACV,MAAMC,aAAAA;AAAAA,MACN,UAAU;AAAA,QACT,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,YAAY,KAAK,2BAA2B,WAAW,KAAK,KAAK,0BAA0B;AAAA,QAC3F,WAAW,KAAK,0BAA0B,UAAU,KAAK,KAAK,yBAAyB;AAAA,MAAA;AAAA,MAExF,OAAO;AAAA,QACN,oBAAoB,KAAK,oBAAoB,mBAAmB,KAAK,KAAK,mBAAmB;AAAA,QAC7F,iBAAiB,KAAK,oBAAoB,gBAAgB,KAAK,KAAK,mBAAmB;AAAA,QACvF,cAAc,KAAK,oBAAoB,aAAa,KAAK,KAAK,mBAAmB;AAAA,QACjF,OAAO,KAAK,oBAAoB,MAAM,KAAK,KAAK,mBAAmB;AAAA,QACnE,WAAW,KAAK,uBAAuB,UAAU,KAAK,KAAK,sBAAsB;AAAA,MAAA;AAAA,IAClF;AAED,WAAO;AAAA,EACR;AACD;;"}
1
+ {"version":3,"file":"ResolversFactory.cjs","sources":["../../../../../../packages/engine-actions/src/graphql/resolvers/ResolversFactory.ts"],"sourcesContent":["import { DateTimeType, JSONType, UuidType } from '@contember/graphql-utils'\nimport { Resolvers } from '../schema/index.js'\nimport { EventsQueryResolver } from './query/index.js'\nimport {\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './mutation/index.js'\nimport { ActionsContext } from './ActionsContext.js'\nimport { VariablesQueryResolver } from './query/VariablesQueryResolver.js'\n\nexport class ResolversFactory {\n\tconstructor(\n\t\tprivate readonly eventsQueryResolver: EventsQueryResolver,\n\t\tprivate readonly processBatchMutationResolver: ProcessBatchMutationResolver,\n\t\tprivate readonly variablesQueryResolver: VariablesQueryResolver,\n\t\tprivate readonly setVariablesMutationResolver: SetVariablesMutationResolver,\n\t\tprivate readonly retryEventMutationResolver: RetryEventMutationResolver,\n\t\tprivate readonly stopEventMutationResolver: StopEventMutationResolver,\n\t) {\n\t}\n\n\tcreate(): Resolvers {\n\t\tconst resolvers: Resolvers<ActionsContext> & { Mutation: Required<Resolvers<ActionsContext>['Mutation']> } & {\n\t\t\tQuery: Required<Resolvers<ActionsContext>['Query']>\n\t\t} = {\n\t\t\tJson: JSONType,\n\t\t\tDateTime: DateTimeType,\n\t\t\tUuid: UuidType,\n\t\t\tMutation: {\n\t\t\t\tprocessBatch: this.processBatchMutationResolver.processBatch.bind(this.processBatchMutationResolver),\n\t\t\t\tsetVariables: this.setVariablesMutationResolver.setVariables.bind(this.setVariablesMutationResolver),\n\t\t\t\tretryEvent: this.retryEventMutationResolver.retryEvent.bind(this.retryEventMutationResolver),\n\t\t\t\tstopEvent: this.stopEventMutationResolver.stopEvent.bind(this.stopEventMutationResolver),\n\t\t\t},\n\t\t\tQuery: {\n\t\t\t\teventsInProcessing: this.eventsQueryResolver.eventsInProcessing.bind(this.eventsQueryResolver),\n\t\t\t\teventsToProcess: this.eventsQueryResolver.eventsToProcess.bind(this.eventsQueryResolver),\n\t\t\t\tfailedEvents: this.eventsQueryResolver.failedEvents.bind(this.eventsQueryResolver),\n\t\t\t\tevent: this.eventsQueryResolver.event.bind(this.eventsQueryResolver),\n\t\t\t\tvariables: this.variablesQueryResolver.variables.bind(this.variablesQueryResolver),\n\t\t\t},\n\t\t}\n\t\treturn resolvers\n\t}\n}\n"],"names":["JSONType","DateTimeType","UuidType"],"mappings":";;;AAYO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,qBACA,8BACA,wBACA,8BACA,4BACA,2BAChB;AANgB,SAAA,sBAAA;AACA,SAAA,+BAAA;AACA,SAAA,yBAAA;AACA,SAAA,+BAAA;AACA,SAAA,6BAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,SAAoB;AACnB,UAAM,YAEF;AAAA,MACH,MAAMA,aAAAA;AAAAA,MACN,UAAUC,aAAAA;AAAAA,MACV,MAAMC,aAAAA;AAAAA,MACN,UAAU;AAAA,QACT,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,YAAY,KAAK,2BAA2B,WAAW,KAAK,KAAK,0BAA0B;AAAA,QAC3F,WAAW,KAAK,0BAA0B,UAAU,KAAK,KAAK,yBAAyB;AAAA,MAAA;AAAA,MAExF,OAAO;AAAA,QACN,oBAAoB,KAAK,oBAAoB,mBAAmB,KAAK,KAAK,mBAAmB;AAAA,QAC7F,iBAAiB,KAAK,oBAAoB,gBAAgB,KAAK,KAAK,mBAAmB;AAAA,QACvF,cAAc,KAAK,oBAAoB,aAAa,KAAK,KAAK,mBAAmB;AAAA,QACjF,OAAO,KAAK,oBAAoB,MAAM,KAAK,KAAK,mBAAmB;AAAA,QACnE,WAAW,KAAK,uBAAuB,UAAU,KAAK,KAAK,sBAAsB;AAAA,MAAA;AAAA,IAClF;AAED,WAAO;AAAA,EACR;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ResolversFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/resolvers/ResolversFactory.ts"],"sourcesContent":["import { DateTimeType, JSONType, UuidType } from '@contember/graphql-utils'\nimport { Resolvers } from '../schema'\nimport { EventsQueryResolver } from './query'\nimport { ProcessBatchMutationResolver, RetryEventMutationResolver, SetVariablesMutationResolver, StopEventMutationResolver } from './mutation'\nimport { ActionsContext } from './ActionsContext'\nimport { VariablesQueryResolver } from './query/VariablesQueryResolver'\n\nexport class ResolversFactory {\n\tconstructor(\n\t\tprivate readonly eventsQueryResolver: EventsQueryResolver,\n\t\tprivate readonly processBatchMutationResolver: ProcessBatchMutationResolver,\n\t\tprivate readonly variablesQueryResolver: VariablesQueryResolver,\n\t\tprivate readonly setVariablesMutationResolver: SetVariablesMutationResolver,\n\t\tprivate readonly retryEventMutationResolver: RetryEventMutationResolver,\n\t\tprivate readonly stopEventMutationResolver: StopEventMutationResolver,\n\t) {\n\t}\n\n\tcreate(): Resolvers {\n\t\tconst resolvers: Resolvers<ActionsContext> & { Mutation: Required<Resolvers<ActionsContext>['Mutation']> } & {\n\t\t\tQuery: Required<Resolvers<ActionsContext>['Query']>\n\t\t} = {\n\t\t\tJson: JSONType,\n\t\t\tDateTime: DateTimeType,\n\t\t\tUuid: UuidType,\n\t\t\tMutation: {\n\t\t\t\tprocessBatch: this.processBatchMutationResolver.processBatch.bind(this.processBatchMutationResolver),\n\t\t\t\tsetVariables: this.setVariablesMutationResolver.setVariables.bind(this.setVariablesMutationResolver),\n\t\t\t\tretryEvent: this.retryEventMutationResolver.retryEvent.bind(this.retryEventMutationResolver),\n\t\t\t\tstopEvent: this.stopEventMutationResolver.stopEvent.bind(this.stopEventMutationResolver),\n\t\t\t},\n\t\t\tQuery: {\n\t\t\t\teventsInProcessing: this.eventsQueryResolver.eventsInProcessing.bind(this.eventsQueryResolver),\n\t\t\t\teventsToProcess: this.eventsQueryResolver.eventsToProcess.bind(this.eventsQueryResolver),\n\t\t\t\tfailedEvents: this.eventsQueryResolver.failedEvents.bind(this.eventsQueryResolver),\n\t\t\t\tevent: this.eventsQueryResolver.event.bind(this.eventsQueryResolver),\n\t\t\t\tvariables: this.variablesQueryResolver.variables.bind(this.variablesQueryResolver),\n\t\t\t},\n\t\t}\n\t\treturn resolvers\n\t}\n}\n"],"names":[],"mappings":";AAOO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,qBACA,8BACA,wBACA,8BACA,4BACA,2BAChB;AANgB,SAAA,sBAAA;AACA,SAAA,+BAAA;AACA,SAAA,yBAAA;AACA,SAAA,+BAAA;AACA,SAAA,6BAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,SAAoB;AACnB,UAAM,YAEF;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,QACT,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,YAAY,KAAK,2BAA2B,WAAW,KAAK,KAAK,0BAA0B;AAAA,QAC3F,WAAW,KAAK,0BAA0B,UAAU,KAAK,KAAK,yBAAyB;AAAA,MAAA;AAAA,MAExF,OAAO;AAAA,QACN,oBAAoB,KAAK,oBAAoB,mBAAmB,KAAK,KAAK,mBAAmB;AAAA,QAC7F,iBAAiB,KAAK,oBAAoB,gBAAgB,KAAK,KAAK,mBAAmB;AAAA,QACvF,cAAc,KAAK,oBAAoB,aAAa,KAAK,KAAK,mBAAmB;AAAA,QACjF,OAAO,KAAK,oBAAoB,MAAM,KAAK,KAAK,mBAAmB;AAAA,QACnE,WAAW,KAAK,uBAAuB,UAAU,KAAK,KAAK,sBAAsB;AAAA,MAAA;AAAA,IAClF;AAED,WAAO;AAAA,EACR;AACD;"}
1
+ {"version":3,"file":"ResolversFactory.js","sources":["../../../../../../packages/engine-actions/src/graphql/resolvers/ResolversFactory.ts"],"sourcesContent":["import { DateTimeType, JSONType, UuidType } from '@contember/graphql-utils'\nimport { Resolvers } from '../schema/index.js'\nimport { EventsQueryResolver } from './query/index.js'\nimport {\n\tProcessBatchMutationResolver,\n\tRetryEventMutationResolver,\n\tSetVariablesMutationResolver,\n\tStopEventMutationResolver,\n} from './mutation/index.js'\nimport { ActionsContext } from './ActionsContext.js'\nimport { VariablesQueryResolver } from './query/VariablesQueryResolver.js'\n\nexport class ResolversFactory {\n\tconstructor(\n\t\tprivate readonly eventsQueryResolver: EventsQueryResolver,\n\t\tprivate readonly processBatchMutationResolver: ProcessBatchMutationResolver,\n\t\tprivate readonly variablesQueryResolver: VariablesQueryResolver,\n\t\tprivate readonly setVariablesMutationResolver: SetVariablesMutationResolver,\n\t\tprivate readonly retryEventMutationResolver: RetryEventMutationResolver,\n\t\tprivate readonly stopEventMutationResolver: StopEventMutationResolver,\n\t) {\n\t}\n\n\tcreate(): Resolvers {\n\t\tconst resolvers: Resolvers<ActionsContext> & { Mutation: Required<Resolvers<ActionsContext>['Mutation']> } & {\n\t\t\tQuery: Required<Resolvers<ActionsContext>['Query']>\n\t\t} = {\n\t\t\tJson: JSONType,\n\t\t\tDateTime: DateTimeType,\n\t\t\tUuid: UuidType,\n\t\t\tMutation: {\n\t\t\t\tprocessBatch: this.processBatchMutationResolver.processBatch.bind(this.processBatchMutationResolver),\n\t\t\t\tsetVariables: this.setVariablesMutationResolver.setVariables.bind(this.setVariablesMutationResolver),\n\t\t\t\tretryEvent: this.retryEventMutationResolver.retryEvent.bind(this.retryEventMutationResolver),\n\t\t\t\tstopEvent: this.stopEventMutationResolver.stopEvent.bind(this.stopEventMutationResolver),\n\t\t\t},\n\t\t\tQuery: {\n\t\t\t\teventsInProcessing: this.eventsQueryResolver.eventsInProcessing.bind(this.eventsQueryResolver),\n\t\t\t\teventsToProcess: this.eventsQueryResolver.eventsToProcess.bind(this.eventsQueryResolver),\n\t\t\t\tfailedEvents: this.eventsQueryResolver.failedEvents.bind(this.eventsQueryResolver),\n\t\t\t\tevent: this.eventsQueryResolver.event.bind(this.eventsQueryResolver),\n\t\t\t\tvariables: this.variablesQueryResolver.variables.bind(this.variablesQueryResolver),\n\t\t\t},\n\t\t}\n\t\treturn resolvers\n\t}\n}\n"],"names":[],"mappings":";AAYO,MAAM,iBAAiB;AAAA,EAC7B,YACkB,qBACA,8BACA,wBACA,8BACA,4BACA,2BAChB;AANgB,SAAA,sBAAA;AACA,SAAA,+BAAA;AACA,SAAA,yBAAA;AACA,SAAA,+BAAA;AACA,SAAA,6BAAA;AACA,SAAA,4BAAA;AAAA,EAElB;AAAA,EAEA,SAAoB;AACnB,UAAM,YAEF;AAAA,MACH,MAAM;AAAA,MACN,UAAU;AAAA,MACV,MAAM;AAAA,MACN,UAAU;AAAA,QACT,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,cAAc,KAAK,6BAA6B,aAAa,KAAK,KAAK,4BAA4B;AAAA,QACnG,YAAY,KAAK,2BAA2B,WAAW,KAAK,KAAK,0BAA0B;AAAA,QAC3F,WAAW,KAAK,0BAA0B,UAAU,KAAK,KAAK,yBAAyB;AAAA,MAAA;AAAA,MAExF,OAAO;AAAA,QACN,oBAAoB,KAAK,oBAAoB,mBAAmB,KAAK,KAAK,mBAAmB;AAAA,QAC7F,iBAAiB,KAAK,oBAAoB,gBAAgB,KAAK,KAAK,mBAAmB;AAAA,QACvF,cAAc,KAAK,oBAAoB,aAAa,KAAK,KAAK,mBAAmB;AAAA,QACjF,OAAO,KAAK,oBAAoB,MAAM,KAAK,KAAK,mBAAmB;AAAA,QACnE,WAAW,KAAK,uBAAuB,UAAU,KAAK,KAAK,sBAAsB;AAAA,MAAA;AAAA,IAClF;AAED,WAAO;AAAA,EACR;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessBatchMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts"],"sourcesContent":["import { MutationResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { EventDispatcher } from '../../../dispatch/EventDispatcher'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class ProcessBatchMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate eventDispatcher: EventDispatcher,\n\t) {\n\t}\n\tasync processBatch(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_PROCESS)\n\n\t\tawait this.eventDispatcher.processBatch(ctx)\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACS,iBACP;AADO,SAAA,kBAAA;AAAA,EAET;AAAA,EACA,MAAM,aAAa,QAAiB,MAAe,KAAqB;AACvE,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,cAAc;AAElE,UAAM,KAAK,gBAAgB,aAAa,GAAG;AAC3C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
1
+ {"version":3,"file":"ProcessBatchMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts"],"sourcesContent":["import { MutationResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { EventDispatcher } from '../../../dispatch/EventDispatcher.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class ProcessBatchMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate eventDispatcher: EventDispatcher,\n\t) {\n\t}\n\tasync processBatch(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_PROCESS)\n\n\t\tawait this.eventDispatcher.processBatch(ctx)\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACS,iBACP;AADO,SAAA,kBAAA;AAAA,EAET;AAAA,EACA,MAAM,aAAa,QAAiB,MAAe,KAAqB;AACvE,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,cAAc;AAElE,UAAM,KAAK,gBAAgB,aAAa,GAAG;AAC3C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessBatchMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts"],"sourcesContent":["import { MutationResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { EventDispatcher } from '../../../dispatch/EventDispatcher'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class ProcessBatchMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate eventDispatcher: EventDispatcher,\n\t) {\n\t}\n\tasync processBatch(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_PROCESS)\n\n\t\tawait this.eventDispatcher.processBatch(ctx)\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACS,iBACP;AADO,SAAA,kBAAA;AAAA,EAET;AAAA,EACA,MAAM,aAAa,QAAiB,MAAe,KAAqB;AACvE,UAAM,IAAI,cAAc,4BAA4B,cAAc;AAElE,UAAM,KAAK,gBAAgB,aAAa,GAAG;AAC3C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
1
+ {"version":3,"file":"ProcessBatchMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/ProcessBatchMutationResolver.ts"],"sourcesContent":["import { MutationResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { EventDispatcher } from '../../../dispatch/EventDispatcher.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class ProcessBatchMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate eventDispatcher: EventDispatcher,\n\t) {\n\t}\n\tasync processBatch(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_PROCESS)\n\n\t\tawait this.eventDispatcher.processBatch(ctx)\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACS,iBACP;AADO,SAAA,kBAAA;AAAA,EAET;AAAA,EACA,MAAM,aAAa,QAAiB,MAAe,KAAqB;AACvE,UAAM,IAAI,cAAc,4BAA4B,cAAc;AAElE,UAAM,KAAK,gBAAgB,aAAa,GAAG;AAC3C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RetryEventMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventsRepository } from '../../../dispatch/EventsRepository'\nimport { notify } from '../../../utils/notifyChannel'\n\nexport class RetryEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync retryEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_RETRY)\n\n\t\tawait this.eventsRepository.requeue(ctx.db.client, [args.id])\n\t\tawait notify(ctx.db.client, ctx.project.slug)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions","notify"],"mappings":";;;;;;AAMO,MAAM,2BAAwE;AAAA,EACpF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,WAAW,QAAiB,MAA8B,KAAqB;AACpF,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,YAAY;AAEhE,UAAM,KAAK,iBAAiB,QAAQ,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5D,UAAMC,cAAAA,OAAO,IAAI,GAAG,QAAQ,IAAI,QAAQ,IAAI;AAE5C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
1
+ {"version":3,"file":"RetryEventMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventsRepository } from '../../../dispatch/EventsRepository.js'\nimport { notify } from '../../../utils/notifyChannel.js'\n\nexport class RetryEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync retryEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_RETRY)\n\n\t\tawait this.eventsRepository.requeue(ctx.db.client, [args.id])\n\t\tawait notify(ctx.db.client, ctx.project.slug)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions","notify"],"mappings":";;;;;;AAMO,MAAM,2BAAwE;AAAA,EACpF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,WAAW,QAAiB,MAA8B,KAAqB;AACpF,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,YAAY;AAEhE,UAAM,KAAK,iBAAiB,QAAQ,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5D,UAAMC,cAAAA,OAAO,IAAI,GAAG,QAAQ,IAAI,QAAQ,IAAI;AAE5C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RetryEventMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventsRepository } from '../../../dispatch/EventsRepository'\nimport { notify } from '../../../utils/notifyChannel'\n\nexport class RetryEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync retryEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_RETRY)\n\n\t\tawait this.eventsRepository.requeue(ctx.db.client, [args.id])\n\t\tawait notify(ctx.db.client, ctx.project.slug)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;AAMO,MAAM,2BAAwE;AAAA,EACpF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,WAAW,QAAiB,MAA8B,KAAqB;AACpF,UAAM,IAAI,cAAc,4BAA4B,YAAY;AAEhE,UAAM,KAAK,iBAAiB,QAAQ,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5D,UAAM,OAAO,IAAI,GAAG,QAAQ,IAAI,QAAQ,IAAI;AAE5C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
1
+ {"version":3,"file":"RetryEventMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/RetryEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventsRepository } from '../../../dispatch/EventsRepository.js'\nimport { notify } from '../../../utils/notifyChannel.js'\n\nexport class RetryEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync retryEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_RETRY)\n\n\t\tawait this.eventsRepository.requeue(ctx.db.client, [args.id])\n\t\tawait notify(ctx.db.client, ctx.project.slug)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;;AAMO,MAAM,2BAAwE;AAAA,EACpF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,WAAW,QAAiB,MAA8B,KAAqB;AACpF,UAAM,IAAI,cAAc,4BAA4B,YAAY;AAEhE,UAAM,KAAK,iBAAiB,QAAQ,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC5D,UAAM,OAAO,IAAI,GAAG,QAAQ,IAAI,QAAQ,IAAI;AAE5C,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SetVariablesMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationSetVariablesArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { VariablesManager } from '../../../model/VariablesManager'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class SetVariablesMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync setVariables(parent: unknown, { args }: MutationSetVariablesArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_SET)\n\n\t\tawait this.variablesManager.setVariables(ctx.db, args)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC5F,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,aAAa;AAEjE,UAAM,KAAK,iBAAiB,aAAa,IAAI,IAAI,IAAI;AAErD,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
1
+ {"version":3,"file":"SetVariablesMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationSetVariablesArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { VariablesManager } from '../../../model/VariablesManager.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class SetVariablesMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync setVariables(parent: unknown, { args }: MutationSetVariablesArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_SET)\n\n\t\tawait this.variablesManager.setVariables(ctx.db, args)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC5F,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,aAAa;AAEjE,UAAM,KAAK,iBAAiB,aAAa,IAAI,IAAI,IAAI;AAErD,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SetVariablesMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationSetVariablesArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { VariablesManager } from '../../../model/VariablesManager'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class SetVariablesMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync setVariables(parent: unknown, { args }: MutationSetVariablesArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_SET)\n\n\t\tawait this.variablesManager.setVariables(ctx.db, args)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC5F,UAAM,IAAI,cAAc,4BAA4B,aAAa;AAEjE,UAAM,KAAK,iBAAiB,aAAa,IAAI,IAAI,IAAI;AAErD,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
1
+ {"version":3,"file":"SetVariablesMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/SetVariablesMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationSetVariablesArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { VariablesManager } from '../../../model/VariablesManager.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class SetVariablesMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync setVariables(parent: unknown, { args }: MutationSetVariablesArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_SET)\n\n\t\tawait this.variablesManager.setVariables(ctx.db, args)\n\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,6BAA0E;AAAA,EACtF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC5F,UAAM,IAAI,cAAc,4BAA4B,aAAa;AAEjE,UAAM,KAAK,iBAAiB,aAAa,IAAI,IAAI,IAAI;AAErD,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StopEventMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/StopEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventsRepository } from '../../../dispatch/EventsRepository'\n\nexport class StopEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync stopEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_STOP)\n\n\t\tawait this.eventsRepository.markStopped(ctx.db.client, [args.id])\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,0BAAuE;AAAA,EACnF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,UAAU,QAAiB,MAA8B,KAAqB;AACnF,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,WAAW;AAE/D,UAAM,KAAK,iBAAiB,YAAY,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAChE,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
1
+ {"version":3,"file":"StopEventMutationResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/StopEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventsRepository } from '../../../dispatch/EventsRepository.js'\n\nexport class StopEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync stopEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_STOP)\n\n\t\tawait this.eventsRepository.markStopped(ctx.db.client, [args.id])\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,0BAAuE;AAAA,EACnF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,UAAU,QAAiB,MAA8B,KAAqB;AACnF,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,WAAW;AAE/D,UAAM,KAAK,iBAAiB,YAAY,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAChE,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"StopEventMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/StopEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventsRepository } from '../../../dispatch/EventsRepository'\n\nexport class StopEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync stopEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_STOP)\n\n\t\tawait this.eventsRepository.markStopped(ctx.db.client, [args.id])\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,0BAAuE;AAAA,EACnF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,UAAU,QAAiB,MAA8B,KAAqB;AACnF,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,UAAM,KAAK,iBAAiB,YAAY,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAChE,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
1
+ {"version":3,"file":"StopEventMutationResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/mutation/StopEventMutationResolver.ts"],"sourcesContent":["import { MutationResolvers, MutationRetryEventArgs } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventsRepository } from '../../../dispatch/EventsRepository.js'\n\nexport class StopEventMutationResolver implements MutationResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly eventsRepository: EventsRepository,\n\t) {\n\t}\n\tasync stopEvent(parent: unknown, args: MutationRetryEventArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_STOP)\n\n\t\tawait this.eventsRepository.markStopped(ctx.db.client, [args.id])\n\t\treturn {\n\t\t\tok: true,\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,0BAAuE;AAAA,EACnF,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EACA,MAAM,UAAU,QAAiB,MAA8B,KAAqB;AACnF,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,UAAM,KAAK,iBAAiB,YAAY,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAChE,WAAO;AAAA,MACN,IAAI;AAAA,IAAA;AAAA,EAEN;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsQueryResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/EventsQueryResolver.ts"],"sourcesContent":["import { Event, QueryEventsInProcessingArgs, QueryEventsToProcessArgs, QueryFailedEventsArgs, QueryResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { EventsToProcessQuery } from '../../../model/EventsToProcessQuery'\nimport { EventRow } from '../../../model/types'\nimport { DatabaseContext, StagesQuery } from '@contember/engine-system-api'\nimport { Client, DatabaseQuery } from '@contember/database'\nimport { EventsInProcessingQuery } from '../../../model/EventsInProcessingQuery'\nimport { FailedEventsQuery } from '../../../model/FailedEventsQuery'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventByIdQuery } from '../../../model/EventByIdQuery'\n\nexport class EventsQueryResolver implements QueryResolvers<ActionsContext> {\n\tasync eventsInProcessing(parent: unknown, { args }: QueryEventsInProcessingArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsInProcessingQuery(args ?? {}))\n\t}\n\n\tasync eventsToProcess(parent: unknown, { args }: QueryEventsToProcessArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsToProcessQuery(args ?? {}))\n\t}\n\n\tasync failedEvents(parent: unknown, { args }: QueryFailedEventsArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new FailedEventsQuery(args ?? {}))\n\t}\n\n\tasync event(parent: unknown, { id }: { id: string }, ctx: ActionsContext): Promise<Event | null> {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\t\tconst stages = await this.fetchStagesMap(ctx.db)\n\t\tconst result = await ctx.db.queryHandler.fetch(new EventByIdQuery(id))\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\t\treturn this.mapEventRows([result], stages)[0]\n\t}\n\n\tprivate async fetchEvents(db: DatabaseContext, query: DatabaseQuery<EventRow[]>) {\n\t\tconst stages = await this.fetchStagesMap(db)\n\t\treturn this.mapEventRows(await db.queryHandler.fetch(query), stages)\n\t}\n\n\tprivate async fetchStagesMap(db: DatabaseContext): Promise<Record<string, string>> {\n\t\treturn Object.fromEntries((await db.queryHandler.fetch(new StagesQuery())).map(it => [it.id, it.slug]))\n\t}\n\n\tprivate mapEventRows(rows: EventRow[], stagesMap: Record<string, string>): Event[] {\n\t\treturn rows.map(row => ({\n\t\t\tid: row.id,\n\t\t\tcreatedAt: row.created_at,\n\t\t\tresolvedAt: row.created_at,\n\t\t\tlastStateChange: row.last_state_change,\n\t\t\tvisibleAt: row.visible_at,\n\t\t\tlog: row.log,\n\t\t\tnumRetries: row.num_retries,\n\t\t\tpayload: row.payload,\n\t\t\tstage: stagesMap[row.stage_id],\n\t\t\tstate: row.state,\n\t\t\ttarget: row.target,\n\t\t\ttransactionId: row.transaction_id,\n\t\t\tidentityId: row.identity_id ?? undefined,\n\t\t\tipAddress: row.ip_address ?? undefined,\n\t\t\tuserAgent: row.user_agent ?? undefined,\n\t\t}))\n\t}\n}\n"],"names":["ActionsAuthorizationActions","EventsInProcessingQuery","EventsToProcessQuery","FailedEventsQuery","EventByIdQuery","StagesQuery"],"mappings":";;;;;;;;;;AAWO,MAAM,oBAA8D;AAAA,EAC1E,MAAM,mBAAmB,QAAiB,EAAE,KAAA,GAAqC,KAAqB;AACrG,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIC,wBAAAA,wBAAwB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,gBAAgB,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC/F,UAAM,IAAI,cAAcD,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIE,qBAAAA,qBAAqB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAA+B,KAAqB;AACzF,UAAM,IAAI,cAAcF,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIG,kBAAAA,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,MAAM,QAAiB,EAAE,GAAA,GAAsB,KAA4C;AAChG,UAAM,IAAI,cAAcH,4BAAAA,4BAA4B,WAAW;AAC/D,UAAM,SAAS,MAAM,KAAK,eAAe,IAAI,EAAE;AAC/C,UAAM,SAAS,MAAM,IAAI,GAAG,aAAa,MAAM,IAAII,8BAAe,EAAE,CAAC;AACrE,QAAI,CAAC,QAAQ;AACZ,aAAO;AAAA,IACR;AACA,WAAO,KAAK,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,IAAqB,OAAkC;AAChF,UAAM,SAAS,MAAM,KAAK,eAAe,EAAE;AAC3C,WAAO,KAAK,aAAa,MAAM,GAAG,aAAa,MAAM,KAAK,GAAG,MAAM;AAAA,EACpE;AAAA,EAEA,MAAc,eAAe,IAAsD;AAClF,WAAO,OAAO,aAAa,MAAM,GAAG,aAAa,MAAM,IAAIC,gBAAAA,YAAA,CAAa,GAAG,IAAI,QAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,EACvG;AAAA,EAEQ,aAAa,MAAkB,WAA4C;AAClF,WAAO,KAAK,IAAI,CAAA,SAAQ;AAAA,MACvB,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI;AAAA,MACrB,WAAW,IAAI;AAAA,MACf,KAAK,IAAI;AAAA,MACT,YAAY,IAAI;AAAA,MAChB,SAAS,IAAI;AAAA,MACb,OAAO,UAAU,IAAI,QAAQ;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,YAAY,IAAI,eAAe;AAAA,MAC/B,WAAW,IAAI,cAAc;AAAA,MAC7B,WAAW,IAAI,cAAc;AAAA,IAAA,EAC5B;AAAA,EACH;AACD;;"}
1
+ {"version":3,"file":"EventsQueryResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/EventsQueryResolver.ts"],"sourcesContent":["import { Event, QueryEventsInProcessingArgs, QueryEventsToProcessArgs, QueryFailedEventsArgs, QueryResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { EventsToProcessQuery } from '../../../model/EventsToProcessQuery.js'\nimport { EventRow } from '../../../model/types.js'\nimport { DatabaseContext, StagesQuery } from '@contember/engine-system-api'\nimport { Client, DatabaseQuery } from '@contember/database'\nimport { EventsInProcessingQuery } from '../../../model/EventsInProcessingQuery.js'\nimport { FailedEventsQuery } from '../../../model/FailedEventsQuery.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventByIdQuery } from '../../../model/EventByIdQuery.js'\n\nexport class EventsQueryResolver implements QueryResolvers<ActionsContext> {\n\tasync eventsInProcessing(parent: unknown, { args }: QueryEventsInProcessingArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsInProcessingQuery(args ?? {}))\n\t}\n\n\tasync eventsToProcess(parent: unknown, { args }: QueryEventsToProcessArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsToProcessQuery(args ?? {}))\n\t}\n\n\tasync failedEvents(parent: unknown, { args }: QueryFailedEventsArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new FailedEventsQuery(args ?? {}))\n\t}\n\n\tasync event(parent: unknown, { id }: { id: string }, ctx: ActionsContext): Promise<Event | null> {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\t\tconst stages = await this.fetchStagesMap(ctx.db)\n\t\tconst result = await ctx.db.queryHandler.fetch(new EventByIdQuery(id))\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\t\treturn this.mapEventRows([result], stages)[0]\n\t}\n\n\tprivate async fetchEvents(db: DatabaseContext, query: DatabaseQuery<EventRow[]>) {\n\t\tconst stages = await this.fetchStagesMap(db)\n\t\treturn this.mapEventRows(await db.queryHandler.fetch(query), stages)\n\t}\n\n\tprivate async fetchStagesMap(db: DatabaseContext): Promise<Record<string, string>> {\n\t\treturn Object.fromEntries((await db.queryHandler.fetch(new StagesQuery())).map(it => [it.id, it.slug]))\n\t}\n\n\tprivate mapEventRows(rows: EventRow[], stagesMap: Record<string, string>): Event[] {\n\t\treturn rows.map(row => ({\n\t\t\tid: row.id,\n\t\t\tcreatedAt: row.created_at,\n\t\t\tresolvedAt: row.created_at,\n\t\t\tlastStateChange: row.last_state_change,\n\t\t\tvisibleAt: row.visible_at,\n\t\t\tlog: row.log,\n\t\t\tnumRetries: row.num_retries,\n\t\t\tpayload: row.payload,\n\t\t\tstage: stagesMap[row.stage_id],\n\t\t\tstate: row.state,\n\t\t\ttarget: row.target,\n\t\t\ttransactionId: row.transaction_id,\n\t\t\tidentityId: row.identity_id ?? undefined,\n\t\t\tipAddress: row.ip_address ?? undefined,\n\t\t\tuserAgent: row.user_agent ?? undefined,\n\t\t}))\n\t}\n}\n"],"names":["ActionsAuthorizationActions","EventsInProcessingQuery","EventsToProcessQuery","FailedEventsQuery","EventByIdQuery","StagesQuery"],"mappings":";;;;;;;;;;AAWO,MAAM,oBAA8D;AAAA,EAC1E,MAAM,mBAAmB,QAAiB,EAAE,KAAA,GAAqC,KAAqB;AACrG,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIC,wBAAAA,wBAAwB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,gBAAgB,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC/F,UAAM,IAAI,cAAcD,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIE,qBAAAA,qBAAqB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAA+B,KAAqB;AACzF,UAAM,IAAI,cAAcF,4BAAAA,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAIG,kBAAAA,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,MAAM,QAAiB,EAAE,GAAA,GAAsB,KAA4C;AAChG,UAAM,IAAI,cAAcH,4BAAAA,4BAA4B,WAAW;AAC/D,UAAM,SAAS,MAAM,KAAK,eAAe,IAAI,EAAE;AAC/C,UAAM,SAAS,MAAM,IAAI,GAAG,aAAa,MAAM,IAAII,8BAAe,EAAE,CAAC;AACrE,QAAI,CAAC,QAAQ;AACZ,aAAO;AAAA,IACR;AACA,WAAO,KAAK,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,IAAqB,OAAkC;AAChF,UAAM,SAAS,MAAM,KAAK,eAAe,EAAE;AAC3C,WAAO,KAAK,aAAa,MAAM,GAAG,aAAa,MAAM,KAAK,GAAG,MAAM;AAAA,EACpE;AAAA,EAEA,MAAc,eAAe,IAAsD;AAClF,WAAO,OAAO,aAAa,MAAM,GAAG,aAAa,MAAM,IAAIC,gBAAAA,YAAA,CAAa,GAAG,IAAI,QAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,EACvG;AAAA,EAEQ,aAAa,MAAkB,WAA4C;AAClF,WAAO,KAAK,IAAI,CAAA,SAAQ;AAAA,MACvB,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI;AAAA,MACrB,WAAW,IAAI;AAAA,MACf,KAAK,IAAI;AAAA,MACT,YAAY,IAAI;AAAA,MAChB,SAAS,IAAI;AAAA,MACb,OAAO,UAAU,IAAI,QAAQ;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,YAAY,IAAI,eAAe;AAAA,MAC/B,WAAW,IAAI,cAAc;AAAA,MAC7B,WAAW,IAAI,cAAc;AAAA,IAAA,EAC5B;AAAA,EACH;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsQueryResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/EventsQueryResolver.ts"],"sourcesContent":["import { Event, QueryEventsInProcessingArgs, QueryEventsToProcessArgs, QueryFailedEventsArgs, QueryResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { EventsToProcessQuery } from '../../../model/EventsToProcessQuery'\nimport { EventRow } from '../../../model/types'\nimport { DatabaseContext, StagesQuery } from '@contember/engine-system-api'\nimport { Client, DatabaseQuery } from '@contember/database'\nimport { EventsInProcessingQuery } from '../../../model/EventsInProcessingQuery'\nimport { FailedEventsQuery } from '../../../model/FailedEventsQuery'\nimport { ActionsAuthorizationActions } from '../../../authorization'\nimport { EventByIdQuery } from '../../../model/EventByIdQuery'\n\nexport class EventsQueryResolver implements QueryResolvers<ActionsContext> {\n\tasync eventsInProcessing(parent: unknown, { args }: QueryEventsInProcessingArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsInProcessingQuery(args ?? {}))\n\t}\n\n\tasync eventsToProcess(parent: unknown, { args }: QueryEventsToProcessArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsToProcessQuery(args ?? {}))\n\t}\n\n\tasync failedEvents(parent: unknown, { args }: QueryFailedEventsArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new FailedEventsQuery(args ?? {}))\n\t}\n\n\tasync event(parent: unknown, { id }: { id: string }, ctx: ActionsContext): Promise<Event | null> {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\t\tconst stages = await this.fetchStagesMap(ctx.db)\n\t\tconst result = await ctx.db.queryHandler.fetch(new EventByIdQuery(id))\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\t\treturn this.mapEventRows([result], stages)[0]\n\t}\n\n\tprivate async fetchEvents(db: DatabaseContext, query: DatabaseQuery<EventRow[]>) {\n\t\tconst stages = await this.fetchStagesMap(db)\n\t\treturn this.mapEventRows(await db.queryHandler.fetch(query), stages)\n\t}\n\n\tprivate async fetchStagesMap(db: DatabaseContext): Promise<Record<string, string>> {\n\t\treturn Object.fromEntries((await db.queryHandler.fetch(new StagesQuery())).map(it => [it.id, it.slug]))\n\t}\n\n\tprivate mapEventRows(rows: EventRow[], stagesMap: Record<string, string>): Event[] {\n\t\treturn rows.map(row => ({\n\t\t\tid: row.id,\n\t\t\tcreatedAt: row.created_at,\n\t\t\tresolvedAt: row.created_at,\n\t\t\tlastStateChange: row.last_state_change,\n\t\t\tvisibleAt: row.visible_at,\n\t\t\tlog: row.log,\n\t\t\tnumRetries: row.num_retries,\n\t\t\tpayload: row.payload,\n\t\t\tstage: stagesMap[row.stage_id],\n\t\t\tstate: row.state,\n\t\t\ttarget: row.target,\n\t\t\ttransactionId: row.transaction_id,\n\t\t\tidentityId: row.identity_id ?? undefined,\n\t\t\tipAddress: row.ip_address ?? undefined,\n\t\t\tuserAgent: row.user_agent ?? undefined,\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;AAWO,MAAM,oBAA8D;AAAA,EAC1E,MAAM,mBAAmB,QAAiB,EAAE,KAAA,GAAqC,KAAqB;AACrG,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,wBAAwB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,gBAAgB,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC/F,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,qBAAqB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAA+B,KAAqB;AACzF,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,MAAM,QAAiB,EAAE,GAAA,GAAsB,KAA4C;AAChG,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAC/D,UAAM,SAAS,MAAM,KAAK,eAAe,IAAI,EAAE;AAC/C,UAAM,SAAS,MAAM,IAAI,GAAG,aAAa,MAAM,IAAI,eAAe,EAAE,CAAC;AACrE,QAAI,CAAC,QAAQ;AACZ,aAAO;AAAA,IACR;AACA,WAAO,KAAK,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,IAAqB,OAAkC;AAChF,UAAM,SAAS,MAAM,KAAK,eAAe,EAAE;AAC3C,WAAO,KAAK,aAAa,MAAM,GAAG,aAAa,MAAM,KAAK,GAAG,MAAM;AAAA,EACpE;AAAA,EAEA,MAAc,eAAe,IAAsD;AAClF,WAAO,OAAO,aAAa,MAAM,GAAG,aAAa,MAAM,IAAI,YAAA,CAAa,GAAG,IAAI,QAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,EACvG;AAAA,EAEQ,aAAa,MAAkB,WAA4C;AAClF,WAAO,KAAK,IAAI,CAAA,SAAQ;AAAA,MACvB,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI;AAAA,MACrB,WAAW,IAAI;AAAA,MACf,KAAK,IAAI;AAAA,MACT,YAAY,IAAI;AAAA,MAChB,SAAS,IAAI;AAAA,MACb,OAAO,UAAU,IAAI,QAAQ;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,YAAY,IAAI,eAAe;AAAA,MAC/B,WAAW,IAAI,cAAc;AAAA,MAC7B,WAAW,IAAI,cAAc;AAAA,IAAA,EAC5B;AAAA,EACH;AACD;"}
1
+ {"version":3,"file":"EventsQueryResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/EventsQueryResolver.ts"],"sourcesContent":["import { Event, QueryEventsInProcessingArgs, QueryEventsToProcessArgs, QueryFailedEventsArgs, QueryResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { EventsToProcessQuery } from '../../../model/EventsToProcessQuery.js'\nimport { EventRow } from '../../../model/types.js'\nimport { DatabaseContext, StagesQuery } from '@contember/engine-system-api'\nimport { Client, DatabaseQuery } from '@contember/database'\nimport { EventsInProcessingQuery } from '../../../model/EventsInProcessingQuery.js'\nimport { FailedEventsQuery } from '../../../model/FailedEventsQuery.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\nimport { EventByIdQuery } from '../../../model/EventByIdQuery.js'\n\nexport class EventsQueryResolver implements QueryResolvers<ActionsContext> {\n\tasync eventsInProcessing(parent: unknown, { args }: QueryEventsInProcessingArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsInProcessingQuery(args ?? {}))\n\t}\n\n\tasync eventsToProcess(parent: unknown, { args }: QueryEventsToProcessArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new EventsToProcessQuery(args ?? {}))\n\t}\n\n\tasync failedEvents(parent: unknown, { args }: QueryFailedEventsArgs, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\n\t\treturn await this.fetchEvents(ctx.db, new FailedEventsQuery(args ?? {}))\n\t}\n\n\tasync event(parent: unknown, { id }: { id: string }, ctx: ActionsContext): Promise<Event | null> {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.EVENTS_VIEW)\n\t\tconst stages = await this.fetchStagesMap(ctx.db)\n\t\tconst result = await ctx.db.queryHandler.fetch(new EventByIdQuery(id))\n\t\tif (!result) {\n\t\t\treturn null\n\t\t}\n\t\treturn this.mapEventRows([result], stages)[0]\n\t}\n\n\tprivate async fetchEvents(db: DatabaseContext, query: DatabaseQuery<EventRow[]>) {\n\t\tconst stages = await this.fetchStagesMap(db)\n\t\treturn this.mapEventRows(await db.queryHandler.fetch(query), stages)\n\t}\n\n\tprivate async fetchStagesMap(db: DatabaseContext): Promise<Record<string, string>> {\n\t\treturn Object.fromEntries((await db.queryHandler.fetch(new StagesQuery())).map(it => [it.id, it.slug]))\n\t}\n\n\tprivate mapEventRows(rows: EventRow[], stagesMap: Record<string, string>): Event[] {\n\t\treturn rows.map(row => ({\n\t\t\tid: row.id,\n\t\t\tcreatedAt: row.created_at,\n\t\t\tresolvedAt: row.created_at,\n\t\t\tlastStateChange: row.last_state_change,\n\t\t\tvisibleAt: row.visible_at,\n\t\t\tlog: row.log,\n\t\t\tnumRetries: row.num_retries,\n\t\t\tpayload: row.payload,\n\t\t\tstage: stagesMap[row.stage_id],\n\t\t\tstate: row.state,\n\t\t\ttarget: row.target,\n\t\t\ttransactionId: row.transaction_id,\n\t\t\tidentityId: row.identity_id ?? undefined,\n\t\t\tipAddress: row.ip_address ?? undefined,\n\t\t\tuserAgent: row.user_agent ?? undefined,\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":";;;;;;;;AAWO,MAAM,oBAA8D;AAAA,EAC1E,MAAM,mBAAmB,QAAiB,EAAE,KAAA,GAAqC,KAAqB;AACrG,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,wBAAwB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC9E;AAAA,EAEA,MAAM,gBAAgB,QAAiB,EAAE,KAAA,GAAkC,KAAqB;AAC/F,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,qBAAqB,QAAQ,CAAA,CAAE,CAAC;AAAA,EAC3E;AAAA,EAEA,MAAM,aAAa,QAAiB,EAAE,KAAA,GAA+B,KAAqB;AACzF,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAE/D,WAAO,MAAM,KAAK,YAAY,IAAI,IAAI,IAAI,kBAAkB,QAAQ,CAAA,CAAE,CAAC;AAAA,EACxE;AAAA,EAEA,MAAM,MAAM,QAAiB,EAAE,GAAA,GAAsB,KAA4C;AAChG,UAAM,IAAI,cAAc,4BAA4B,WAAW;AAC/D,UAAM,SAAS,MAAM,KAAK,eAAe,IAAI,EAAE;AAC/C,UAAM,SAAS,MAAM,IAAI,GAAG,aAAa,MAAM,IAAI,eAAe,EAAE,CAAC;AACrE,QAAI,CAAC,QAAQ;AACZ,aAAO;AAAA,IACR;AACA,WAAO,KAAK,aAAa,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,YAAY,IAAqB,OAAkC;AAChF,UAAM,SAAS,MAAM,KAAK,eAAe,EAAE;AAC3C,WAAO,KAAK,aAAa,MAAM,GAAG,aAAa,MAAM,KAAK,GAAG,MAAM;AAAA,EACpE;AAAA,EAEA,MAAc,eAAe,IAAsD;AAClF,WAAO,OAAO,aAAa,MAAM,GAAG,aAAa,MAAM,IAAI,YAAA,CAAa,GAAG,IAAI,QAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,EACvG;AAAA,EAEQ,aAAa,MAAkB,WAA4C;AAClF,WAAO,KAAK,IAAI,CAAA,SAAQ;AAAA,MACvB,IAAI,IAAI;AAAA,MACR,WAAW,IAAI;AAAA,MACf,YAAY,IAAI;AAAA,MAChB,iBAAiB,IAAI;AAAA,MACrB,WAAW,IAAI;AAAA,MACf,KAAK,IAAI;AAAA,MACT,YAAY,IAAI;AAAA,MAChB,SAAS,IAAI;AAAA,MACb,OAAO,UAAU,IAAI,QAAQ;AAAA,MAC7B,OAAO,IAAI;AAAA,MACX,QAAQ,IAAI;AAAA,MACZ,eAAe,IAAI;AAAA,MACnB,YAAY,IAAI,eAAe;AAAA,MAC/B,WAAW,IAAI,cAAc;AAAA,MAC7B,WAAW,IAAI,cAAc;AAAA,IAAA,EAC5B;AAAA,EACH;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesQueryResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/VariablesQueryResolver.ts"],"sourcesContent":["import { QueryResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { VariablesManager } from '../../../model/VariablesManager'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class VariablesQueryResolver implements QueryResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync variables(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_VIEW)\n\n\t\treturn Object.entries(await this.variablesManager.fetchVariables(ctx.db)).map(([name, value]) => ({\n\t\t\tname,\n\t\t\tvalue,\n\t\t}))\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,uBAAiE;AAAA,EAC7E,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,UAAU,QAAiB,MAAe,KAAqB;AACpE,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,cAAc;AAElE,WAAO,OAAO,QAAQ,MAAM,KAAK,iBAAiB,eAAe,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,MACjG;AAAA,MACA;AAAA,IAAA,EACC;AAAA,EACH;AACD;;"}
1
+ {"version":3,"file":"VariablesQueryResolver.cjs","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/VariablesQueryResolver.ts"],"sourcesContent":["import { QueryResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { VariablesManager } from '../../../model/VariablesManager.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class VariablesQueryResolver implements QueryResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync variables(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_VIEW)\n\n\t\treturn Object.entries(await this.variablesManager.fetchVariables(ctx.db)).map(([name, value]) => ({\n\t\t\tname,\n\t\t\tvalue,\n\t\t}))\n\t}\n}\n"],"names":["ActionsAuthorizationActions"],"mappings":";;;;;AAKO,MAAM,uBAAiE;AAAA,EAC7E,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,UAAU,QAAiB,MAAe,KAAqB;AACpE,UAAM,IAAI,cAAcA,4BAAAA,4BAA4B,cAAc;AAElE,WAAO,OAAO,QAAQ,MAAM,KAAK,iBAAiB,eAAe,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,MACjG;AAAA,MACA;AAAA,IAAA,EACC;AAAA,EACH;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VariablesQueryResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/VariablesQueryResolver.ts"],"sourcesContent":["import { QueryResolvers } from '../../schema'\nimport { ActionsContext } from '../ActionsContext'\nimport { VariablesManager } from '../../../model/VariablesManager'\nimport { ActionsAuthorizationActions } from '../../../authorization'\n\nexport class VariablesQueryResolver implements QueryResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync variables(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_VIEW)\n\n\t\treturn Object.entries(await this.variablesManager.fetchVariables(ctx.db)).map(([name, value]) => ({\n\t\t\tname,\n\t\t\tvalue,\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,uBAAiE;AAAA,EAC7E,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,UAAU,QAAiB,MAAe,KAAqB;AACpE,UAAM,IAAI,cAAc,4BAA4B,cAAc;AAElE,WAAO,OAAO,QAAQ,MAAM,KAAK,iBAAiB,eAAe,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,MACjG;AAAA,MACA;AAAA,IAAA,EACC;AAAA,EACH;AACD;"}
1
+ {"version":3,"file":"VariablesQueryResolver.js","sources":["../../../../../../../packages/engine-actions/src/graphql/resolvers/query/VariablesQueryResolver.ts"],"sourcesContent":["import { QueryResolvers } from '../../schema/index.js'\nimport { ActionsContext } from '../ActionsContext.js'\nimport { VariablesManager } from '../../../model/VariablesManager.js'\nimport { ActionsAuthorizationActions } from '../../../authorization/index.js'\n\nexport class VariablesQueryResolver implements QueryResolvers<ActionsContext> {\n\tconstructor(\n\t\tprivate readonly variablesManager: VariablesManager,\n\t) {\n\t}\n\n\tasync variables(parent: unknown, args: unknown, ctx: ActionsContext) {\n\t\tawait ctx.requireAccess(ActionsAuthorizationActions.VARIABLES_VIEW)\n\n\t\treturn Object.entries(await this.variablesManager.fetchVariables(ctx.db)).map(([name, value]) => ({\n\t\t\tname,\n\t\t\tvalue,\n\t\t}))\n\t}\n}\n"],"names":[],"mappings":";;;AAKO,MAAM,uBAAiE;AAAA,EAC7E,YACkB,kBAChB;AADgB,SAAA,mBAAA;AAAA,EAElB;AAAA,EAEA,MAAM,UAAU,QAAiB,MAAe,KAAqB;AACpE,UAAM,IAAI,cAAc,4BAA4B,cAAc;AAElE,WAAO,OAAO,QAAQ,MAAM,KAAK,iBAAiB,eAAe,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,MACjG;AAAA,MACA;AAAA,IAAA,EACC;AAAA,EACH;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../packages/engine-actions/src/migrations/index.ts"],"sourcesContent":["import snapshot from './snapshot'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport _20230310145000actionsvariables from './2023-03-10-145000-actions-variables'\nimport _20250528160000actioneventuser from './2025-05-28-160000-action-event-user'\n\nexport const migrationsGroup = new MigrationGroup(snapshot, {\n\t'2023-03-10-145000-actions-variables': _20230310145000actionsvariables,\n\t'2025-05-28-160000-action-event-user': _20250528160000actioneventuser,\n})\n"],"names":["MigrationGroup","_20230310145000actionsvariables","_20250528160000actioneventuser"],"mappings":";;;;;;AAKO,MAAM,kBAAkB,IAAIA,mBAAAA,eAAe,UAAU;AAAA,EAC3D,uCAAuCC;AAAAA,EACvC,uCAAuCC;AACxC,CAAC;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../packages/engine-actions/src/migrations/index.ts"],"sourcesContent":["import snapshot from './snapshot.js'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport _20230310145000actionsvariables from './2023-03-10-145000-actions-variables.js'\nimport _20250528160000actioneventuser from './2025-05-28-160000-action-event-user.js'\n\nexport const migrationsGroup = new MigrationGroup(snapshot, {\n\t'2023-03-10-145000-actions-variables': _20230310145000actionsvariables,\n\t'2025-05-28-160000-action-event-user': _20250528160000actioneventuser,\n})\n"],"names":["MigrationGroup","_20230310145000actionsvariables","_20250528160000actioneventuser"],"mappings":";;;;;;AAKO,MAAM,kBAAkB,IAAIA,mBAAAA,eAAe,UAAU;AAAA,EAC3D,uCAAuCC;AAAAA,EACvC,uCAAuCC;AACxC,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../packages/engine-actions/src/migrations/index.ts"],"sourcesContent":["import snapshot from './snapshot'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport _20230310145000actionsvariables from './2023-03-10-145000-actions-variables'\nimport _20250528160000actioneventuser from './2025-05-28-160000-action-event-user'\n\nexport const migrationsGroup = new MigrationGroup(snapshot, {\n\t'2023-03-10-145000-actions-variables': _20230310145000actionsvariables,\n\t'2025-05-28-160000-action-event-user': _20250528160000actioneventuser,\n})\n"],"names":[],"mappings":";;;;AAKO,MAAM,kBAAkB,IAAI,eAAe,UAAU;AAAA,EAC3D,uCAAuC;AAAA,EACvC,uCAAuC;AACxC,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../packages/engine-actions/src/migrations/index.ts"],"sourcesContent":["import snapshot from './snapshot.js'\nimport { MigrationGroup } from '@contember/database-migrations'\nimport _20230310145000actionsvariables from './2023-03-10-145000-actions-variables.js'\nimport _20250528160000actioneventuser from './2025-05-28-160000-action-event-user.js'\n\nexport const migrationsGroup = new MigrationGroup(snapshot, {\n\t'2023-03-10-145000-actions-variables': _20230310145000actionsvariables,\n\t'2025-05-28-160000-action-event-user': _20250528160000actioneventuser,\n})\n"],"names":[],"mappings":";;;;AAKO,MAAM,kBAAkB,IAAI,eAAe,UAAU;AAAA,EAC3D,uCAAuC;AAAA,EACvC,uCAAuC;AACxC,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventByIdQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventByIdQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types'\n\nexport class EventByIdQuery extends DatabaseQuery<EventRow | null> {\n\tconstructor(\n\t\tprivate readonly id: string,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow | null> {\n\t\tconst result = await SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where({\n\t\t\t\tid: this.id,\n\t\t\t})\n\t\t\t.getResult(queryable.db)\n\t\treturn this.fetchOneOrNull(result)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder"],"mappings":";;;AAGO,MAAM,uBAAuBA,SAAAA,cAA+B;AAAA,EAClE,YACkB,IAChB;AACD,UAAA;AAFiB,SAAA,KAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAwD;AACnE,UAAM,SAAS,MAAMC,uBAAc,SACjC,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,IAAA,CACT,EACA,UAAU,UAAU,EAAE;AACxB,WAAO,KAAK,eAAe,MAAM;AAAA,EAClC;AACD;;"}
1
+ {"version":3,"file":"EventByIdQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventByIdQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types.js'\n\nexport class EventByIdQuery extends DatabaseQuery<EventRow | null> {\n\tconstructor(\n\t\tprivate readonly id: string,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow | null> {\n\t\tconst result = await SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where({\n\t\t\t\tid: this.id,\n\t\t\t})\n\t\t\t.getResult(queryable.db)\n\t\treturn this.fetchOneOrNull(result)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder"],"mappings":";;;AAGO,MAAM,uBAAuBA,SAAAA,cAA+B;AAAA,EAClE,YACkB,IAChB;AACD,UAAA;AAFiB,SAAA,KAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAwD;AACnE,UAAM,SAAS,MAAMC,uBAAc,SACjC,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,IAAA,CACT,EACA,UAAU,UAAU,EAAE;AACxB,WAAO,KAAK,eAAe,MAAM;AAAA,EAClC;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventByIdQuery.js","sources":["../../../../../packages/engine-actions/src/model/EventByIdQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types'\n\nexport class EventByIdQuery extends DatabaseQuery<EventRow | null> {\n\tconstructor(\n\t\tprivate readonly id: string,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow | null> {\n\t\tconst result = await SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where({\n\t\t\t\tid: this.id,\n\t\t\t})\n\t\t\t.getResult(queryable.db)\n\t\treturn this.fetchOneOrNull(result)\n\t}\n}\n"],"names":[],"mappings":";AAGO,MAAM,uBAAuB,cAA+B;AAAA,EAClE,YACkB,IAChB;AACD,UAAA;AAFiB,SAAA,KAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAwD;AACnE,UAAM,SAAS,MAAM,cAAc,SACjC,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,IAAA,CACT,EACA,UAAU,UAAU,EAAE;AACxB,WAAO,KAAK,eAAe,MAAM;AAAA,EAClC;AACD;"}
1
+ {"version":3,"file":"EventByIdQuery.js","sources":["../../../../../packages/engine-actions/src/model/EventByIdQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types.js'\n\nexport class EventByIdQuery extends DatabaseQuery<EventRow | null> {\n\tconstructor(\n\t\tprivate readonly id: string,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow | null> {\n\t\tconst result = await SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where({\n\t\t\t\tid: this.id,\n\t\t\t})\n\t\t\t.getResult(queryable.db)\n\t\treturn this.fetchOneOrNull(result)\n\t}\n}\n"],"names":[],"mappings":";AAGO,MAAM,uBAAuB,cAA+B;AAAA,EAClE,YACkB,IAChB;AACD,UAAA;AAFiB,SAAA,KAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAwD;AACnE,UAAM,SAAS,MAAM,cAAc,SACjC,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,IAAA,CACT,EACA,UAAU,UAAU,EAAE;AACxB,WAAO,KAAK,eAAe,MAAM;AAAA,EAClC;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsInProcessingQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventsInProcessingQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types'\nimport { EventArgs } from '../graphql/schema'\n\nexport class EventsInProcessingQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where(it => it.in('state', ['processing']))\n\t\t\t.orderBy('last_state_change', 'asc')\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder"],"mappings":";;;AAIO,MAAM,gCAAgCA,SAAAA,cAA0B;AAAA,EACtE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAOC,SAAAA,cAAc,OAAA,EACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM,CAAA,OAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAC1C,QAAQ,qBAAqB,KAAK,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;;"}
1
+ {"version":3,"file":"EventsInProcessingQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventsInProcessingQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types.js'\nimport { EventArgs } from '../graphql/schema/index.js'\n\nexport class EventsInProcessingQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where(it => it.in('state', ['processing']))\n\t\t\t.orderBy('last_state_change', 'asc')\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder"],"mappings":";;;AAIO,MAAM,gCAAgCA,SAAAA,cAA0B;AAAA,EACtE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAOC,SAAAA,cAAc,OAAA,EACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM,CAAA,OAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAC1C,QAAQ,qBAAqB,KAAK,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsInProcessingQuery.js","sources":["../../../../../packages/engine-actions/src/model/EventsInProcessingQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types'\nimport { EventArgs } from '../graphql/schema'\n\nexport class EventsInProcessingQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where(it => it.in('state', ['processing']))\n\t\t\t.orderBy('last_state_change', 'asc')\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":[],"mappings":";AAIO,MAAM,gCAAgC,cAA0B;AAAA,EACtE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAO,cAAc,OAAA,EACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM,CAAA,OAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAC1C,QAAQ,qBAAqB,KAAK,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;"}
1
+ {"version":3,"file":"EventsInProcessingQuery.js","sources":["../../../../../packages/engine-actions/src/model/EventsInProcessingQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types.js'\nimport { EventArgs } from '../graphql/schema/index.js'\n\nexport class EventsInProcessingQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.where(it => it.in('state', ['processing']))\n\t\t\t.orderBy('last_state_change', 'asc')\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":[],"mappings":";AAIO,MAAM,gCAAgC,cAA0B;AAAA,EACtE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAO,cAAc,OAAA,EACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAM,CAAA,OAAM,GAAG,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAC1C,QAAQ,qBAAqB,KAAK,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EventsToProcessQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventsToProcessQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types'\nimport { EventArgs } from '../graphql/schema'\nimport { eventsToProcessSpecification } from './EventsToProcessSpecification'\n\nexport class EventsToProcessQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.match(eventsToProcessSpecification)\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder","eventsToProcessSpecification"],"mappings":";;;;AAKO,MAAM,6BAA6BA,SAAAA,cAA0B;AAAA,EACnE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAOC,uBAAc,SACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAMC,6BAAAA,4BAA4B,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;;"}
1
+ {"version":3,"file":"EventsToProcessQuery.cjs","sources":["../../../../../packages/engine-actions/src/model/EventsToProcessQuery.ts"],"sourcesContent":["import { DatabaseQuery, DatabaseQueryable, SelectBuilder } from '@contember/database'\nimport { EventRow } from './types.js'\nimport { EventArgs } from '../graphql/schema/index.js'\nimport { eventsToProcessSpecification } from './EventsToProcessSpecification.js'\n\nexport class EventsToProcessQuery extends DatabaseQuery<EventRow[]> {\n\tconstructor(\n\t\tprivate readonly args: EventArgs,\n\t) {\n\t\tsuper()\n\t}\n\n\tasync fetch(queryable: DatabaseQueryable): Promise<EventRow[]> {\n\t\treturn SelectBuilder.create<EventRow>()\n\t\t\t.from('actions_event')\n\t\t\t.select('*')\n\t\t\t.match(eventsToProcessSpecification)\n\t\t\t.limit(this.args.limit ?? 100, this.args.offset ?? 0)\n\t\t\t.getResult(queryable.db)\n\t}\n}\n"],"names":["DatabaseQuery","SelectBuilder","eventsToProcessSpecification"],"mappings":";;;;AAKO,MAAM,6BAA6BA,SAAAA,cAA0B;AAAA,EACnE,YACkB,MAChB;AACD,UAAA;AAFiB,SAAA,OAAA;AAAA,EAGlB;AAAA,EAEA,MAAM,MAAM,WAAmD;AAC9D,WAAOC,uBAAc,SACnB,KAAK,eAAe,EACpB,OAAO,GAAG,EACV,MAAMC,6BAAAA,4BAA4B,EAClC,MAAM,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,UAAU,CAAC,EACnD,UAAU,UAAU,EAAE;AAAA,EACzB;AACD;;"}