@webiny/background-tasks 0.0.0-unstable.7be00a75a9 → 6.4.0-beta.4

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 (384) hide show
  1. package/admin/BackgroundTaskRoutes.js +20 -13
  2. package/admin/BackgroundTaskRoutes.js.map +1 -1
  3. package/admin/BackgroundTasks.js +9 -0
  4. package/admin/BackgroundTasks.js.map +1 -1
  5. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.d.ts +12 -0
  6. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.js +40 -0
  7. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsGateway.js.map +1 -0
  8. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.d.ts +11 -0
  9. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.js +18 -0
  10. package/admin/features/getBackgroundTaskSettings/GetBackgroundTaskSettingsUseCase.js.map +1 -0
  11. package/admin/features/getBackgroundTaskSettings/abstractions.d.ts +15 -0
  12. package/admin/features/getBackgroundTaskSettings/abstractions.js +6 -0
  13. package/admin/features/getBackgroundTaskSettings/abstractions.js.map +1 -0
  14. package/admin/features/getBackgroundTaskSettings/feature.d.ts +3 -0
  15. package/admin/features/getBackgroundTaskSettings/feature.js +19 -0
  16. package/admin/features/getBackgroundTaskSettings/feature.js.map +1 -0
  17. package/admin/features/getBackgroundTaskSettings/index.d.ts +3 -0
  18. package/admin/features/getBackgroundTaskSettings/index.js +2 -0
  19. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.d.ts +12 -0
  20. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.js +43 -0
  21. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsGateway.js.map +1 -0
  22. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.d.ts +11 -0
  23. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js +18 -0
  24. package/admin/features/updateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js.map +1 -0
  25. package/admin/features/updateBackgroundTaskSettings/abstractions.d.ts +18 -0
  26. package/admin/features/updateBackgroundTaskSettings/abstractions.js +6 -0
  27. package/admin/features/updateBackgroundTaskSettings/abstractions.js.map +1 -0
  28. package/admin/features/updateBackgroundTaskSettings/feature.d.ts +3 -0
  29. package/admin/features/updateBackgroundTaskSettings/feature.js +19 -0
  30. package/admin/features/updateBackgroundTaskSettings/feature.js.map +1 -0
  31. package/admin/features/updateBackgroundTaskSettings/index.d.ts +3 -0
  32. package/admin/features/updateBackgroundTaskSettings/index.js +2 -0
  33. package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.d.ts +21 -0
  34. package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.js +86 -0
  35. package/admin/presentation/BackgroundTaskSettings/BackgroundTaskSettingsPresenter.js.map +1 -0
  36. package/admin/presentation/BackgroundTaskSettings/abstractions.d.ts +16 -0
  37. package/admin/presentation/BackgroundTaskSettings/abstractions.js +5 -0
  38. package/admin/presentation/BackgroundTaskSettings/abstractions.js.map +1 -0
  39. package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.d.ts +2 -0
  40. package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.js +56 -0
  41. package/admin/presentation/BackgroundTaskSettings/components/BackgroundTaskSettingsView.js.map +1 -0
  42. package/admin/presentation/BackgroundTaskSettings/feature.d.ts +3 -0
  43. package/admin/presentation/BackgroundTaskSettings/feature.js +17 -0
  44. package/admin/presentation/BackgroundTaskSettings/feature.js.map +1 -0
  45. package/admin/presentation/BackgroundTaskSettings/index.d.ts +2 -0
  46. package/admin/presentation/BackgroundTaskSettings/index.js +2 -0
  47. package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js +2 -1
  48. package/admin/presentation/TaskDefinitions/components/TaskDefinitionsView.js.map +1 -1
  49. package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.d.ts +2 -0
  50. package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.js +16 -0
  51. package/admin/presentation/TaskDefinitions/components/TaskExecutionsButton.js.map +1 -0
  52. package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.d.ts +2 -0
  53. package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.js +16 -0
  54. package/admin/presentation/TaskExecutions/components/TaskDefinitionsButton.js.map +1 -0
  55. package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js +53 -35
  56. package/admin/presentation/TaskExecutions/components/TaskExecutionsView.js.map +1 -1
  57. package/admin/routes.d.ts +1 -0
  58. package/admin/routes.js +4 -0
  59. package/admin/routes.js.map +1 -1
  60. package/admin/shared/types.d.ts +3 -0
  61. package/api/context.d.ts +2 -0
  62. package/api/context.js +66 -0
  63. package/api/context.js.map +1 -0
  64. package/api/crud/TaskLogPrivateModel.d.ts +9 -0
  65. package/api/crud/TaskLogPrivateModel.js +40 -0
  66. package/api/crud/TaskLogPrivateModel.js.map +1 -0
  67. package/api/crud/TaskPrivateModel.d.ts +9 -0
  68. package/api/crud/TaskPrivateModel.js +55 -0
  69. package/api/crud/TaskPrivateModel.js.map +1 -0
  70. package/api/crud/cleanupTaskSubtree.d.ts +8 -0
  71. package/api/crud/cleanupTaskSubtree.js +62 -0
  72. package/api/crud/cleanupTaskSubtree.js.map +1 -0
  73. package/api/crud/crud.tasks.d.ts +2 -0
  74. package/api/crud/crud.tasks.js +318 -0
  75. package/api/crud/crud.tasks.js.map +1 -0
  76. package/api/crud/definition.tasks.d.ts +2 -0
  77. package/api/crud/definition.tasks.js +17 -0
  78. package/api/crud/definition.tasks.js.map +1 -0
  79. package/api/crud/service.tasks.d.ts +2 -0
  80. package/api/crud/service.tasks.js +130 -0
  81. package/api/crud/service.tasks.js.map +1 -0
  82. package/api/decorators/RunnableTaskDecorator.d.ts +32 -0
  83. package/api/decorators/RunnableTaskDecorator.js +69 -0
  84. package/api/decorators/RunnableTaskDecorator.js.map +1 -0
  85. package/api/decorators/SelfCleaningTaskDecorator.d.ts +30 -0
  86. package/api/decorators/SelfCleaningTaskDecorator.js +84 -0
  87. package/api/decorators/SelfCleaningTaskDecorator.js.map +1 -0
  88. package/api/domain/BackgroundTaskSettings.d.ts +3 -0
  89. package/api/domain/BackgroundTaskSettings.js +0 -0
  90. package/api/domain/constants.d.ts +3 -0
  91. package/api/domain/constants.js +6 -0
  92. package/api/domain/constants.js.map +1 -0
  93. package/api/domain/errors.d.ts +57 -0
  94. package/api/domain/errors.js +101 -0
  95. package/api/domain/errors.js.map +1 -0
  96. package/api/events/TaskAfterCreateEvent.d.ts +6 -0
  97. package/api/events/TaskAfterCreateEvent.js +13 -0
  98. package/api/events/TaskAfterCreateEvent.js.map +1 -0
  99. package/api/events/TaskAfterDeleteEvent.d.ts +6 -0
  100. package/api/events/TaskAfterDeleteEvent.js +13 -0
  101. package/api/events/TaskAfterDeleteEvent.js.map +1 -0
  102. package/api/events/TaskAfterUpdateEvent.d.ts +6 -0
  103. package/api/events/TaskAfterUpdateEvent.js +13 -0
  104. package/api/events/TaskAfterUpdateEvent.js.map +1 -0
  105. package/api/events/TaskBeforeCreateEvent.d.ts +6 -0
  106. package/api/events/TaskBeforeCreateEvent.js +13 -0
  107. package/api/events/TaskBeforeCreateEvent.js.map +1 -0
  108. package/api/events/TaskBeforeDeleteEvent.d.ts +6 -0
  109. package/api/events/TaskBeforeDeleteEvent.js +13 -0
  110. package/api/events/TaskBeforeDeleteEvent.js.map +1 -0
  111. package/api/events/TaskBeforeUpdateEvent.d.ts +6 -0
  112. package/api/events/TaskBeforeUpdateEvent.js +13 -0
  113. package/api/events/TaskBeforeUpdateEvent.js.map +1 -0
  114. package/api/events/abstractions.d.ts +53 -0
  115. package/api/events/abstractions.js +10 -0
  116. package/api/events/abstractions.js.map +1 -0
  117. package/api/events/index.d.ts +7 -0
  118. package/api/events/index.js +7 -0
  119. package/api/features/AbortTask/AbortTaskUseCase.d.ts +10 -0
  120. package/api/features/AbortTask/AbortTaskUseCase.js +12 -0
  121. package/api/features/AbortTask/AbortTaskUseCase.js.map +1 -0
  122. package/api/features/AbortTask/abstractions.d.ts +25 -0
  123. package/api/features/AbortTask/abstractions.js +5 -0
  124. package/api/features/AbortTask/abstractions.js.map +1 -0
  125. package/api/features/AbortTask/feature.d.ts +5 -0
  126. package/api/features/AbortTask/feature.js +12 -0
  127. package/api/features/AbortTask/feature.js.map +1 -0
  128. package/api/features/AbortTask/index.d.ts +2 -0
  129. package/api/features/AbortTask/index.js +2 -0
  130. package/api/features/BackgroundTaskPermissions/abstractions.d.ts +17 -0
  131. package/api/features/BackgroundTaskPermissions/abstractions.js +6 -0
  132. package/api/features/BackgroundTaskPermissions/abstractions.js.map +1 -0
  133. package/api/features/BackgroundTaskPermissions/feature.d.ts +4 -0
  134. package/api/features/BackgroundTaskPermissions/feature.js +7 -0
  135. package/api/features/BackgroundTaskPermissions/feature.js.map +1 -0
  136. package/api/features/BackgroundTaskPermissions/index.d.ts +2 -0
  137. package/api/features/BackgroundTaskPermissions/index.js +2 -0
  138. package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.d.ts +7 -0
  139. package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +11 -0
  140. package/api/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -0
  141. package/api/features/CleanupTaskSubtree/abstractions.d.ts +7 -0
  142. package/api/features/CleanupTaskSubtree/abstractions.js +5 -0
  143. package/api/features/CleanupTaskSubtree/abstractions.js.map +1 -0
  144. package/api/features/CleanupTaskSubtree/index.d.ts +2 -0
  145. package/api/features/CleanupTaskSubtree/index.js +2 -0
  146. package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.d.ts +21 -0
  147. package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.js +60 -0
  148. package/api/features/GetBackgroundTaskSettings/GetBackgroundTaskSettingsRepository.js.map +1 -0
  149. package/api/features/GetBackgroundTaskSettings/abstractions.d.ts +13 -0
  150. package/api/features/GetBackgroundTaskSettings/abstractions.js +5 -0
  151. package/api/features/GetBackgroundTaskSettings/abstractions.js.map +1 -0
  152. package/api/features/GetBackgroundTaskSettings/feature.d.ts +4 -0
  153. package/api/features/GetBackgroundTaskSettings/feature.js +11 -0
  154. package/api/features/GetBackgroundTaskSettings/feature.js.map +1 -0
  155. package/api/features/GetBackgroundTaskSettings/index.d.ts +2 -0
  156. package/api/features/GetBackgroundTaskSettings/index.js +2 -0
  157. package/api/features/GetTask/GetTaskUseCase.d.ts +9 -0
  158. package/api/features/GetTask/GetTaskUseCase.js +11 -0
  159. package/api/features/GetTask/GetTaskUseCase.js.map +1 -0
  160. package/api/features/GetTask/abstractions.d.ts +10 -0
  161. package/api/features/GetTask/abstractions.js +5 -0
  162. package/api/features/GetTask/abstractions.js.map +1 -0
  163. package/api/features/GetTask/feature.d.ts +5 -0
  164. package/api/features/GetTask/feature.js +12 -0
  165. package/api/features/GetTask/feature.js.map +1 -0
  166. package/api/features/GetTask/index.d.ts +2 -0
  167. package/api/features/GetTask/index.js +2 -0
  168. package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.d.ts +12 -0
  169. package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +27 -0
  170. package/api/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -0
  171. package/api/features/GetTaskDefinition/abstractions.d.ts +17 -0
  172. package/api/features/GetTaskDefinition/abstractions.js +5 -0
  173. package/api/features/GetTaskDefinition/abstractions.js.map +1 -0
  174. package/api/features/GetTaskDefinition/feature.d.ts +4 -0
  175. package/api/features/GetTaskDefinition/feature.js +11 -0
  176. package/api/features/GetTaskDefinition/feature.js.map +1 -0
  177. package/api/features/GetTaskDefinition/index.d.ts +2 -0
  178. package/api/features/GetTaskDefinition/index.js +2 -0
  179. package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.d.ts +11 -0
  180. package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +24 -0
  181. package/api/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -0
  182. package/api/features/ListTaskDefinitions/abstractions.d.ts +9 -0
  183. package/api/features/ListTaskDefinitions/abstractions.js +5 -0
  184. package/api/features/ListTaskDefinitions/abstractions.js.map +1 -0
  185. package/api/features/ListTaskDefinitions/feature.d.ts +4 -0
  186. package/api/features/ListTaskDefinitions/feature.js +11 -0
  187. package/api/features/ListTaskDefinitions/feature.js.map +1 -0
  188. package/api/features/ListTaskDefinitions/index.d.ts +2 -0
  189. package/api/features/ListTaskDefinitions/index.js +2 -0
  190. package/api/features/ListTasks/ListTasksUseCase.d.ts +9 -0
  191. package/api/features/ListTasks/ListTasksUseCase.js +11 -0
  192. package/api/features/ListTasks/ListTasksUseCase.js.map +1 -0
  193. package/api/features/ListTasks/abstractions.d.ts +13 -0
  194. package/api/features/ListTasks/abstractions.js +5 -0
  195. package/api/features/ListTasks/abstractions.js.map +1 -0
  196. package/api/features/ListTasks/feature.d.ts +5 -0
  197. package/api/features/ListTasks/feature.js +12 -0
  198. package/api/features/ListTasks/feature.js.map +1 -0
  199. package/api/features/ListTasks/index.d.ts +2 -0
  200. package/api/features/ListTasks/index.js +2 -0
  201. package/api/features/TaskController/TaskController.d.ts +49 -0
  202. package/api/features/TaskController/TaskController.js +71 -0
  203. package/api/features/TaskController/TaskController.js.map +1 -0
  204. package/api/features/TaskController/augmentation.d.ts +60 -0
  205. package/api/features/TaskController/augmentation.js +0 -0
  206. package/api/features/TaskController/index.d.ts +2 -0
  207. package/api/features/TaskController/index.js +2 -0
  208. package/api/features/TaskExecutionContext/TaskExecutionContext.d.ts +24 -0
  209. package/api/features/TaskExecutionContext/TaskExecutionContext.js +43 -0
  210. package/api/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -0
  211. package/api/features/TaskExecutionContext/abstractions.d.ts +26 -0
  212. package/api/features/TaskExecutionContext/abstractions.js +5 -0
  213. package/api/features/TaskExecutionContext/abstractions.js.map +1 -0
  214. package/api/features/TaskExecutionContext/feature.d.ts +4 -0
  215. package/api/features/TaskExecutionContext/feature.js +11 -0
  216. package/api/features/TaskExecutionContext/feature.js.map +1 -0
  217. package/api/features/TaskExecutionContext/index.d.ts +1 -0
  218. package/api/features/TaskExecutionContext/index.js +1 -0
  219. package/api/features/TriggerTask/TriggerTaskUseCase.d.ts +10 -0
  220. package/api/features/TriggerTask/TriggerTaskUseCase.js +12 -0
  221. package/api/features/TriggerTask/TriggerTaskUseCase.js.map +1 -0
  222. package/api/features/TriggerTask/abstractions.d.ts +28 -0
  223. package/api/features/TriggerTask/abstractions.js +5 -0
  224. package/api/features/TriggerTask/abstractions.js.map +1 -0
  225. package/api/features/TriggerTask/feature.d.ts +5 -0
  226. package/api/features/TriggerTask/feature.js +12 -0
  227. package/api/features/TriggerTask/feature.js.map +1 -0
  228. package/api/features/TriggerTask/index.d.ts +2 -0
  229. package/api/features/TriggerTask/index.js +2 -0
  230. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.d.ts +23 -0
  231. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.js +64 -0
  232. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsRepository.js.map +1 -0
  233. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.d.ts +14 -0
  234. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js +27 -0
  235. package/api/features/UpdateBackgroundTaskSettings/UpdateBackgroundTaskSettingsUseCase.js.map +1 -0
  236. package/api/features/UpdateBackgroundTaskSettings/abstractions.d.ts +26 -0
  237. package/api/features/UpdateBackgroundTaskSettings/abstractions.js +6 -0
  238. package/api/features/UpdateBackgroundTaskSettings/abstractions.js.map +1 -0
  239. package/api/features/UpdateBackgroundTaskSettings/feature.d.ts +4 -0
  240. package/api/features/UpdateBackgroundTaskSettings/feature.js +13 -0
  241. package/api/features/UpdateBackgroundTaskSettings/feature.js.map +1 -0
  242. package/api/features/UpdateBackgroundTaskSettings/index.d.ts +2 -0
  243. package/api/features/UpdateBackgroundTaskSettings/index.js +2 -0
  244. package/api/features/UpdateBackgroundTaskSettings/schema.d.ts +4 -0
  245. package/api/features/UpdateBackgroundTaskSettings/schema.js +8 -0
  246. package/api/features/UpdateBackgroundTaskSettings/schema.js.map +1 -0
  247. package/api/global.d.ts +1 -0
  248. package/api/global.js +1 -0
  249. package/api/graphql/BackgroundTaskSettingsSchema.d.ts +2 -0
  250. package/api/graphql/BackgroundTaskSettingsSchema.js +84 -0
  251. package/api/graphql/BackgroundTaskSettingsSchema.js.map +1 -0
  252. package/api/graphql/checkPermissions.d.ts +7 -0
  253. package/api/graphql/checkPermissions.js +21 -0
  254. package/api/graphql/checkPermissions.js.map +1 -0
  255. package/api/graphql/index.d.ts +2 -0
  256. package/api/graphql/index.js +302 -0
  257. package/api/graphql/index.js.map +1 -0
  258. package/api/graphql/utils.d.ts +9 -0
  259. package/api/graphql/utils.js +20 -0
  260. package/api/graphql/utils.js.map +1 -0
  261. package/api/handler/index.d.ts +6 -0
  262. package/api/handler/index.js +55 -0
  263. package/api/handler/index.js.map +1 -0
  264. package/api/handler/register.d.ts +1 -0
  265. package/api/handler/register.js +15 -0
  266. package/api/handler/register.js.map +1 -0
  267. package/api/handler/types.d.ts +23 -0
  268. package/api/handler/types.js +0 -0
  269. package/api/index.d.ts +5 -0
  270. package/api/index.js +5 -0
  271. package/api/models/BackgroundTaskSettingsModel.d.ts +8 -0
  272. package/api/models/BackgroundTaskSettingsModel.js +27 -0
  273. package/api/models/BackgroundTaskSettingsModel.js.map +1 -0
  274. package/api/permissions.d.ts +12 -0
  275. package/api/permissions.js +22 -0
  276. package/api/permissions.js.map +1 -0
  277. package/api/plugins/TaskServicePlugin.d.ts +19 -0
  278. package/api/plugins/TaskServicePlugin.js +13 -0
  279. package/api/plugins/TaskServicePlugin.js.map +1 -0
  280. package/api/plugins/index.d.ts +1 -0
  281. package/api/plugins/index.js +1 -0
  282. package/api/response/DatabaseResponse.d.ts +12 -0
  283. package/api/response/DatabaseResponse.js +127 -0
  284. package/api/response/DatabaseResponse.js.map +1 -0
  285. package/api/response/Response.d.ts +14 -0
  286. package/api/response/Response.js +91 -0
  287. package/api/response/Response.js.map +1 -0
  288. package/api/response/ResponseAbortedResult.d.ts +9 -0
  289. package/api/response/ResponseAbortedResult.js +12 -0
  290. package/api/response/ResponseAbortedResult.js.map +1 -0
  291. package/api/response/ResponseContinueResult.d.ts +17 -0
  292. package/api/response/ResponseContinueResult.js +16 -0
  293. package/api/response/ResponseContinueResult.js.map +1 -0
  294. package/api/response/ResponseDoneResult.d.ts +11 -0
  295. package/api/response/ResponseDoneResult.js +14 -0
  296. package/api/response/ResponseDoneResult.js.map +1 -0
  297. package/api/response/ResponseErrorResult.d.ts +10 -0
  298. package/api/response/ResponseErrorResult.js +13 -0
  299. package/api/response/ResponseErrorResult.js.map +1 -0
  300. package/api/response/TaskResponse.d.ts +12 -0
  301. package/api/response/TaskResponse.js +53 -0
  302. package/api/response/TaskResponse.js.map +1 -0
  303. package/api/response/abstractions/Response.d.ts +25 -0
  304. package/api/response/abstractions/Response.js +0 -0
  305. package/api/response/abstractions/ResponseAbortedResult.d.ts +5 -0
  306. package/api/response/abstractions/ResponseAbortedResult.js +0 -0
  307. package/api/response/abstractions/ResponseBaseResult.d.ts +7 -0
  308. package/api/response/abstractions/ResponseBaseResult.js +0 -0
  309. package/api/response/abstractions/ResponseContinueResult.d.ts +21 -0
  310. package/api/response/abstractions/ResponseContinueResult.js +0 -0
  311. package/api/response/abstractions/ResponseDoneResult.d.ts +13 -0
  312. package/api/response/abstractions/ResponseDoneResult.js +0 -0
  313. package/api/response/abstractions/ResponseErrorResult.d.ts +18 -0
  314. package/api/response/abstractions/ResponseErrorResult.js +0 -0
  315. package/api/response/abstractions/TaskResponse.d.ts +16 -0
  316. package/api/response/abstractions/TaskResponse.js +0 -0
  317. package/api/response/abstractions/index.d.ts +7 -0
  318. package/api/response/abstractions/index.js +7 -0
  319. package/api/response/index.d.ts +7 -0
  320. package/api/response/index.js +7 -0
  321. package/api/runner/TaskControl.d.ts +14 -0
  322. package/api/runner/TaskControl.js +173 -0
  323. package/api/runner/TaskControl.js.map +1 -0
  324. package/api/runner/TaskEventValidation.d.ts +5 -0
  325. package/api/runner/TaskEventValidation.js +20 -0
  326. package/api/runner/TaskEventValidation.js.map +1 -0
  327. package/api/runner/TaskManager.d.ts +11 -0
  328. package/api/runner/TaskManager.js +81 -0
  329. package/api/runner/TaskManager.js.map +1 -0
  330. package/api/runner/TaskManagerStore.d.ts +40 -0
  331. package/api/runner/TaskManagerStore.js +109 -0
  332. package/api/runner/TaskManagerStore.js.map +1 -0
  333. package/api/runner/TaskRunner.d.ts +25 -0
  334. package/api/runner/TaskRunner.js +55 -0
  335. package/api/runner/TaskRunner.js.map +1 -0
  336. package/api/runner/abstractions/TaskControl.d.ts +10 -0
  337. package/api/runner/abstractions/TaskControl.js +0 -0
  338. package/api/runner/abstractions/TaskEventValidation.d.ts +5 -0
  339. package/api/runner/abstractions/TaskEventValidation.js +0 -0
  340. package/api/runner/abstractions/TaskManager.d.ts +5 -0
  341. package/api/runner/abstractions/TaskManager.js +0 -0
  342. package/api/runner/abstractions/TaskManagerStore.d.ts +92 -0
  343. package/api/runner/abstractions/TaskManagerStore.js +0 -0
  344. package/api/runner/abstractions/TaskRunner.d.ts +13 -0
  345. package/api/runner/abstractions/TaskRunner.js +0 -0
  346. package/api/runner/abstractions/index.d.ts +5 -0
  347. package/api/runner/abstractions/index.js +5 -0
  348. package/api/runner/index.d.ts +1 -0
  349. package/api/runner/index.js +1 -0
  350. package/api/service/EventBridgeEventTransportPlugin.d.ts +16 -0
  351. package/api/service/EventBridgeEventTransportPlugin.js +52 -0
  352. package/api/service/EventBridgeEventTransportPlugin.js.map +1 -0
  353. package/api/service/StepFunctionServicePlugin.d.ts +25 -0
  354. package/api/service/StepFunctionServicePlugin.js +77 -0
  355. package/api/service/StepFunctionServicePlugin.js.map +1 -0
  356. package/api/service/createService.d.ts +6 -0
  357. package/api/service/createService.js +16 -0
  358. package/api/service/createService.js.map +1 -0
  359. package/api/service/index.d.ts +4 -0
  360. package/api/service/index.js +12 -0
  361. package/api/service/index.js.map +1 -0
  362. package/api/tasks/testingRunTask.d.ts +11 -0
  363. package/api/tasks/testingRunTask.js +18 -0
  364. package/api/tasks/testingRunTask.js.map +1 -0
  365. package/api/types.d.ts +167 -0
  366. package/api/types.js +20 -0
  367. package/api/types.js.map +1 -0
  368. package/api/utils/ObjectUpdater.d.ts +8 -0
  369. package/api/utils/ObjectUpdater.js +33 -0
  370. package/api/utils/ObjectUpdater.js.map +1 -0
  371. package/api/utils/getErrorProperties.d.ts +2 -0
  372. package/api/utils/getErrorProperties.js +9 -0
  373. package/api/utils/getErrorProperties.js.map +1 -0
  374. package/api/utils/getObjectProperties.d.ts +8 -0
  375. package/api/utils/getObjectProperties.js +11 -0
  376. package/api/utils/getObjectProperties.js.map +1 -0
  377. package/api/utils/index.d.ts +3 -0
  378. package/api/utils/index.js +3 -0
  379. package/api/utils/normalizeSelfCleanup.d.ts +2 -0
  380. package/api/utils/normalizeSelfCleanup.js +16 -0
  381. package/api/utils/normalizeSelfCleanup.js.map +1 -0
  382. package/index.d.ts +1 -0
  383. package/index.js +1 -0
  384. package/package.json +28 -11
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/crud/crud.tasks.js","sources":["../../../src/api/crud/crud.tasks.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type {\n Context,\n IListTaskLogParams,\n IListTaskParams,\n ITaskCreateData,\n ITaskLog,\n ITaskLogCreateInput,\n ITaskLogUpdateInput,\n ITasksContextCrudObject,\n ITaskUpdateData\n} from \"~/api/types.js\";\nimport { TaskDataStatus } from \"~/api/types.js\";\nimport { WEBINY_TASK_MODEL_ID } from \"./TaskPrivateModel.js\";\nimport { WEBINY_TASK_LOG_MODEL_ID } from \"./TaskLogPrivateModel.js\";\nimport type { CmsEntry, CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createZodError, parseIdentifier } from \"@webiny/utils\";\nimport zod from \"zod\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { ListLatestEntriesUseCase } from \"@webiny/api-headless-cms/features/contentEntry/ListEntries\";\nimport { CreateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/CreateEntry\";\nimport { UpdateEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UpdateEntry\";\nimport { DeleteEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport {\n TaskDefinitionNotFoundError,\n TaskLogNotFoundError,\n TaskNotFoundError\n} from \"~/api/domain/errors.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { EventPublisher } from \"@webiny/api-core/features/eventPublisher/index.js\";\nimport {\n TaskAfterCreateEvent,\n TaskAfterDeleteEvent,\n TaskAfterUpdateEvent,\n TaskBeforeCreateEvent,\n TaskBeforeDeleteEvent,\n TaskBeforeUpdateEvent\n} from \"~/api/events/index.js\";\nimport { CmsWhereMapper } from \"@webiny/api-headless-cms\";\nimport { createCleanupTaskSubtree } from \"./cleanupTaskSubtree.js\";\n\nconst createRevisionId = (id: string) => {\n const { id: entryId } = parseIdentifier(id);\n return `${entryId}#0001`;\n};\n\nconst convertToTask = <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n>(\n entry: CmsEntry<TaskService.Task<T, O>>\n): TaskService.Task<T, O> => {\n return {\n id: entry.entryId,\n createdOn: entry.createdOn,\n savedOn: entry.savedOn,\n createdBy: entry.createdBy,\n name: entry.values.name,\n definitionId: entry.values.definitionId,\n input: entry.values.input,\n output: entry.values.output,\n taskStatus: entry.values.taskStatus,\n executionName: entry.values.executionName || \"\",\n eventResponse: entry.values.eventResponse,\n startedOn: entry.values.startedOn,\n finishedOn: entry.values.finishedOn,\n iterations: entry.values.iterations,\n parentId: entry.values.parentId\n };\n};\n\nconst convertToLog = (entry: CmsEntry<ITaskLog>): ITaskLog => {\n return {\n id: entry.entryId,\n createdOn: entry.createdOn,\n createdBy: entry.createdBy,\n executionName: entry.values.executionName,\n task: entry.values.task,\n iteration: entry.values.iteration,\n items: entry.values.items || []\n };\n};\n\ninterface IValidateParams {\n definition: Pick<TaskDefinition.Interface, \"createInputValidation\">;\n data: Pick<ITaskCreateData, \"input\">;\n context: Context;\n}\n\nconst getZodSchema = (schema: GenericRecord<string, zod.ZodTypeAny> | zod.ZodTypeAny) => {\n if (!schema) {\n return zod.looseObject({});\n } else if (schema instanceof zod.ZodObject) {\n return schema.loose();\n } else if (schema instanceof zod.ZodType) {\n return schema;\n }\n return zod.looseObject(schema);\n};\n\nconst validateTaskInput = async (params: IValidateParams) => {\n const { definition, data } = params;\n if (!definition.createInputValidation) {\n return;\n }\n const schema = definition.createInputValidation({\n validator: zod\n });\n /**\n * If the schema is not an object, we need to wrap it with the `object` function.\n */\n const validate = getZodSchema(schema);\n\n const result = await validate.safeParseAsync(data.input);\n if (result.success) {\n return;\n }\n throw createZodError(result.error);\n};\n\nexport const createTaskCrud = (context: Context): ITasksContextCrudObject => {\n const cmsWhereMapper = context.container.resolve(CmsWhereMapper);\n\n const getTaskModel = async (): Promise<CmsModel> => {\n const identityContext = context.container.resolve(IdentityContext);\n return await identityContext.withoutAuthorization(async () => {\n const getModel = context.container.resolve(GetModelUseCase);\n const result = await getModel.execute(WEBINY_TASK_MODEL_ID);\n if (result.isFail()) {\n throw new WebinyError(`There is no model \"${WEBINY_TASK_MODEL_ID}\".`);\n }\n return result.value;\n });\n };\n\n const getLogModel = async (): Promise<CmsModel> => {\n const identityContext = context.container.resolve(IdentityContext);\n return await identityContext.withoutAuthorization(async () => {\n const getModel = context.container.resolve(GetModelUseCase);\n const result = await getModel.execute(WEBINY_TASK_LOG_MODEL_ID);\n if (result.isFail()) {\n throw new WebinyError(`There is no model \"${WEBINY_TASK_LOG_MODEL_ID}\".`);\n }\n return result.value;\n });\n };\n\n const getTask = async <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n >(\n id: string\n ) => {\n const identityContext = context.container.resolve(IdentityContext);\n\n const entry = await identityContext.withoutAuthorization(async () => {\n const model = await getTaskModel();\n const getEntryById = context.container.resolve(GetEntryByIdUseCase);\n const result = await getEntryById.execute(model, createRevisionId(id));\n if (result.isFail()) {\n return null;\n }\n return result.value;\n });\n\n if (!entry) {\n return null;\n }\n\n return convertToTask(entry as unknown as CmsEntry<TaskService.Task<T, O>>);\n };\n\n const listTasks = async <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n >(\n params?: IListTaskParams\n ) => {\n const identityContext = context.container.resolve(IdentityContext);\n const { entries, meta } = await identityContext.withoutAuthorization(async () => {\n const model = await getTaskModel();\n const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);\n const result = await listLatestEntries.execute<TaskService.Task<T, O>>(model, {\n ...params,\n where: cmsWhereMapper.map({\n input: params?.where,\n fields: model.fields\n })\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n\n return {\n items: entries.map(item => convertToTask<T, O>(item)),\n meta\n };\n };\n\n const createTask = async (data: ITaskCreateData) => {\n const definition = context.tasks.getDefinition(data.definitionId);\n if (!definition) {\n throw new TaskDefinitionNotFoundError(data.definitionId);\n }\n\n await validateTaskInput({\n context,\n definition,\n data\n });\n\n const identityContext = context.container.resolve(IdentityContext);\n const eventPublisher = context.container.resolve(EventPublisher);\n\n const beforeCreateEvent = new TaskBeforeCreateEvent({\n input: data\n });\n await eventPublisher.publish(beforeCreateEvent);\n\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getTaskModel();\n const createEntry = context.container.resolve(CreateEntryUseCase);\n return createEntry.execute(model, {\n values: {\n ...data,\n iterations: 0,\n taskStatus: TaskDataStatus.PENDING\n }\n });\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n const task = convertToTask(result.value as unknown as CmsEntry<TaskService.Task>);\n\n const afterCreateEvent = new TaskAfterCreateEvent({\n input: data,\n task\n });\n await eventPublisher.publish(afterCreateEvent);\n\n return task;\n };\n\n const updateTask = async <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n >(\n id: string,\n data: ITaskUpdateData<T, O>\n ) => {\n const original = await getTask<T, O>(id);\n if (!original) {\n throw new TaskNotFoundError();\n }\n\n const identityContext = context.container.resolve(IdentityContext);\n const eventPublisher = context.container.resolve(EventPublisher);\n\n const beforeUpdateEvent = new TaskBeforeUpdateEvent({\n input: data,\n original\n });\n await eventPublisher.publish(beforeUpdateEvent);\n\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getTaskModel();\n const updateEntry = context.container.resolve(UpdateEntryUseCase);\n return updateEntry.execute(model, createRevisionId(id), {\n values: {\n ...data\n }\n });\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n const task = convertToTask<T, O>(\n result.value as unknown as CmsEntry<TaskService.Task<T, O>>\n );\n\n const afterUpdateEvent = new TaskAfterUpdateEvent({\n input: data,\n task\n });\n await eventPublisher.publish(afterUpdateEvent);\n\n return task;\n };\n\n const deleteTask = async (id: string) => {\n const task = await getTask(id);\n if (!task) {\n throw new TaskNotFoundError();\n }\n\n const identityContext = context.container.resolve(IdentityContext);\n const eventPublisher = context.container.resolve(EventPublisher);\n\n const beforeDeleteEvent = new TaskBeforeDeleteEvent({\n task\n });\n await eventPublisher.publish(beforeDeleteEvent);\n\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getTaskModel();\n const deleteEntry = context.container.resolve(DeleteEntryUseCase);\n return deleteEntry.execute(model, createRevisionId(id));\n });\n\n if (result.isFail()) {\n throw new TaskNotFoundError();\n }\n\n const afterDeleteEvent = new TaskAfterDeleteEvent({ task });\n await eventPublisher.publish(afterDeleteEvent);\n\n return true;\n };\n\n const createLog = async (task: Pick<TaskService.Task, \"id\">, data: ITaskLogCreateInput) => {\n const identityContext = context.container.resolve(IdentityContext);\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const createEntry = context.container.resolve(CreateEntryUseCase);\n return createEntry.execute(model, {\n values: {\n ...data,\n task: task.id\n }\n });\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return convertToLog(result.value as unknown as CmsEntry<ITaskLog>);\n };\n\n const updateLog = async (id: string, data: ITaskLogUpdateInput) => {\n const identityContext = context.container.resolve(IdentityContext);\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const updateEntry = context.container.resolve(UpdateEntryUseCase);\n return updateEntry.execute(model, createRevisionId(id), {\n values: data\n });\n });\n\n if (result.isFail()) {\n throw new TaskLogNotFoundError();\n }\n\n return convertToLog(result.value as unknown as CmsEntry<ITaskLog>);\n };\n\n const deleteLog = async (id: string) => {\n const identityContext = context.container.resolve(IdentityContext);\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const deleteEntry = context.container.resolve(DeleteEntryUseCase);\n return deleteEntry.execute(model, id);\n });\n\n if (result.isFail()) {\n throw new TaskLogNotFoundError();\n }\n\n return true;\n };\n\n const getLog = async (id: string): Promise<ITaskLog | null> => {\n const identityContext = context.container.resolve(IdentityContext);\n try {\n const result = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const getEntryById = context.container.resolve(GetEntryByIdUseCase);\n return getEntryById.execute(model, id);\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return convertToLog(result.value as unknown as CmsEntry<ITaskLog>);\n } catch (ex) {\n if (ex instanceof NotFoundError) {\n return null;\n }\n throw ex;\n }\n };\n\n const getLatestLog = async (taskId: string): Promise<ITaskLog> => {\n const identityContext = context.container.resolve(IdentityContext);\n const entry = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);\n const result = await listLatestEntries.execute<ITaskLog>(model, {\n where: {\n values: {\n task: taskId\n }\n },\n sort: [\"createdOn_DESC\"],\n limit: 1\n });\n if (result.isFail()) {\n throw result.error;\n }\n const { entries } = result.value;\n const [item] = entries;\n if (!item) {\n throw new NotFoundError(`No existing latest log found for task \"${taskId}\".`);\n }\n return item;\n });\n\n return convertToLog(entry as unknown as CmsEntry<ITaskLog>);\n };\n\n const cleanupTaskSubtree = createCleanupTaskSubtree(context);\n\n const listLogs = async (params: IListTaskLogParams) => {\n const identityContext = context.container.resolve(IdentityContext);\n const { entries, meta } = await identityContext.withoutAuthorization(async () => {\n const model = await getLogModel();\n const listLatestEntries = context.container.resolve(ListLatestEntriesUseCase);\n const result = await listLatestEntries.execute<ITaskLog>(model, {\n ...params,\n where: cmsWhereMapper.map({\n input: params.where,\n fields: model.fields\n })\n });\n if (result.isFail()) {\n throw result.error;\n }\n return result.value;\n });\n\n return {\n items: entries.map(item => convertToLog(item)),\n meta\n };\n };\n\n return {\n getTask,\n listTasks,\n createTask,\n updateTask,\n deleteTask,\n cleanupTaskSubtree,\n createLog,\n updateLog,\n deleteLog,\n getLog,\n listLogs,\n getLatestLog,\n getTaskModel,\n getLogModel\n };\n};\n"],"names":["createRevisionId","id","entryId","parseIdentifier","convertToTask","entry","convertToLog","getZodSchema","schema","zod","validateTaskInput","params","definition","data","validate","result","createZodError","createTaskCrud","context","cmsWhereMapper","CmsWhereMapper","getTaskModel","identityContext","IdentityContext","getModel","GetModelUseCase","WEBINY_TASK_MODEL_ID","WebinyError","getLogModel","WEBINY_TASK_LOG_MODEL_ID","getTask","model","getEntryById","GetEntryByIdUseCase","listTasks","entries","meta","listLatestEntries","ListLatestEntriesUseCase","item","createTask","TaskDefinitionNotFoundError","eventPublisher","EventPublisher","beforeCreateEvent","TaskBeforeCreateEvent","createEntry","CreateEntryUseCase","TaskDataStatus","task","afterCreateEvent","TaskAfterCreateEvent","updateTask","original","TaskNotFoundError","beforeUpdateEvent","TaskBeforeUpdateEvent","updateEntry","UpdateEntryUseCase","afterUpdateEvent","TaskAfterUpdateEvent","deleteTask","beforeDeleteEvent","TaskBeforeDeleteEvent","deleteEntry","DeleteEntryUseCase","afterDeleteEvent","TaskAfterDeleteEvent","createLog","updateLog","TaskLogNotFoundError","deleteLog","getLog","ex","NotFoundError","getLatestLog","taskId","cleanupTaskSubtree","createCleanupTaskSubtree","listLogs"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Context, ITasksContextDefinitionObject } from "../../api/types.js";
2
+ export declare const createDefinitionCrud: (context: Context) => ITasksContextDefinitionObject;
@@ -0,0 +1,17 @@
1
+ import { GetTaskDefinitionUseCase } from "../features/GetTaskDefinition/index.js";
2
+ import { ListTaskDefinitionsUseCase } from "../features/ListTaskDefinitions/index.js";
3
+ const createDefinitionCrud = (context)=>({
4
+ getDefinition: (id)=>{
5
+ const useCase = context.container.resolve(GetTaskDefinitionUseCase);
6
+ const result = useCase.execute(id);
7
+ if (result.isOk()) return result.value;
8
+ return null;
9
+ },
10
+ listDefinitions: ()=>{
11
+ const useCase = context.container.resolve(ListTaskDefinitionsUseCase);
12
+ return useCase.execute();
13
+ }
14
+ });
15
+ export { createDefinitionCrud };
16
+
17
+ //# sourceMappingURL=definition.tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/crud/definition.tasks.js","sources":["../../../src/api/crud/definition.tasks.ts"],"sourcesContent":["import type { Context, ITasksContextDefinitionObject } from \"~/api/types.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { GetTaskDefinitionUseCase } from \"~/api/features/GetTaskDefinition/index.js\";\nimport { ListTaskDefinitionsUseCase } from \"~/api/features/ListTaskDefinitions/index.js\";\n\nexport const createDefinitionCrud = (context: Context): ITasksContextDefinitionObject => {\n return {\n getDefinition: <\n I extends TaskDefinition.TaskInput = TaskDefinition.TaskInput,\n O extends TaskDefinition.TaskOutput = TaskDefinition.TaskOutput\n >(\n id: string\n ) => {\n const useCase = context.container.resolve(GetTaskDefinitionUseCase);\n const result = useCase.execute<I, O>(id);\n\n if (result.isOk()) {\n return result.value;\n }\n\n return null;\n },\n listDefinitions: () => {\n const useCase = context.container.resolve(ListTaskDefinitionsUseCase);\n return useCase.execute();\n }\n };\n};\n"],"names":["createDefinitionCrud","context","id","useCase","GetTaskDefinitionUseCase","result","ListTaskDefinitionsUseCase"],"mappings":";;AAKO,MAAMA,uBAAuB,CAACC,UAC1B;QACH,eAAe,CAIXC;YAEA,MAAMC,UAAUF,QAAQ,SAAS,CAAC,OAAO,CAACG;YAC1C,MAAMC,SAASF,QAAQ,OAAO,CAAOD;YAErC,IAAIG,OAAO,IAAI,IACX,OAAOA,OAAO,KAAK;YAGvB,OAAO;QACX;QACA,iBAAiB;YACb,MAAMF,UAAUF,QAAQ,SAAS,CAAC,OAAO,CAACK;YAC1C,OAAOH,QAAQ,OAAO;QAC1B;IACJ"}
@@ -0,0 +1,2 @@
1
+ import type { Context, ITasksContextServiceObject } from "../../api/types.js";
2
+ export declare const createServiceCrud: (context: Context) => ITasksContextServiceObject;
@@ -0,0 +1,130 @@
1
+ import error from "@webiny/error";
2
+ import { TaskDataStatus, TaskLogItemType } from "../types.js";
3
+ import { NotFoundError } from "@webiny/handler-graphql";
4
+ import { createService } from "../service/index.js";
5
+ import { Result } from "@webiny/feature/api";
6
+ import { TaskAbortError, TaskDefinitionNotFoundError, TaskNotFoundError, TaskServiceInfoError } from "../domain/errors.js";
7
+ const MAX_DELAY_DAYS = 355;
8
+ const MAX_DELAY_SECONDS = 24 * MAX_DELAY_DAYS * 3600;
9
+ const validateDelay = ({ input, delay })=>{
10
+ if (!delay || delay < 0 || "number" != typeof delay || false === Number.isInteger(delay)) return;
11
+ if (delay < MAX_DELAY_SECONDS) return;
12
+ throw new error(`The maximum delay for a task is ${MAX_DELAY_DAYS} days.`, "MAX_DELAY_ERROR", {
13
+ ...input,
14
+ delay
15
+ });
16
+ };
17
+ const createServiceCrud = (context)=>{
18
+ const service = createService({
19
+ context
20
+ });
21
+ return {
22
+ trigger: async (params)=>{
23
+ const { definition: id, input: inputValues, name, parent, delay = 0 } = params;
24
+ const definition = context.tasks.getDefinition(id);
25
+ if (!definition) throw new error("Task definition was not found!", "TASK_DEFINITION_ERROR", {
26
+ id
27
+ });
28
+ const input = {
29
+ name: name || definition.title,
30
+ definitionId: id,
31
+ input: inputValues || {},
32
+ parentId: parent?.id
33
+ };
34
+ if (definition.onBeforeTrigger) await definition.onBeforeTrigger({
35
+ data: input
36
+ });
37
+ validateDelay({
38
+ input,
39
+ delay
40
+ });
41
+ let task;
42
+ try {
43
+ task = await context.tasks.createTask(input);
44
+ } catch (ex) {
45
+ console.log("Could not create the task.", ex);
46
+ throw ex;
47
+ }
48
+ let result = null;
49
+ try {
50
+ result = await service.send(task, delay);
51
+ if (!result) throw new error("Could not trigger the step function!", "TRIGGER_STEP_FUNCTION_ERROR", {
52
+ task
53
+ });
54
+ } catch (ex) {
55
+ console.log("Could not trigger the step function.");
56
+ console.error(ex);
57
+ await context.tasks.deleteTask(task.id);
58
+ throw ex;
59
+ }
60
+ const updatedTask = await context.tasks.updateTask(task.id, {
61
+ eventResponse: result
62
+ });
63
+ return Result.ok(updatedTask);
64
+ },
65
+ fetchServiceInfo: async (input)=>{
66
+ const task = "object" == typeof input ? input : await context.tasks.getTask(input);
67
+ if (task || "string" != typeof input) {
68
+ if (!task) throw new error("Task was not found!", "TASK_FETCH_ERROR", {
69
+ input
70
+ });
71
+ } else throw new NotFoundError(`Task "${input}" was not found!`);
72
+ try {
73
+ const info = await service.fetch(task);
74
+ if (info) return Result.ok(info);
75
+ return Result.fail(new TaskServiceInfoError());
76
+ } catch (ex) {
77
+ console.log("Service fetch error.");
78
+ console.error(ex);
79
+ return Result.fail(new TaskServiceInfoError());
80
+ }
81
+ },
82
+ abort: async (params)=>{
83
+ const task = await context.tasks.getTask(params.id);
84
+ if (!task) return Result.fail(new TaskNotFoundError());
85
+ const definition = context.tasks.getDefinition(task.definitionId);
86
+ if (!definition) return Result.fail(new TaskDefinitionNotFoundError(task.definitionId));
87
+ if (false === [
88
+ TaskDataStatus.PENDING,
89
+ TaskDataStatus.RUNNING
90
+ ].includes(task.taskStatus)) return Result.fail(new TaskAbortError({
91
+ id: params.id,
92
+ status: task.taskStatus
93
+ }));
94
+ let taskLog = null;
95
+ try {
96
+ taskLog = await context.tasks.getLatestLog(task.id);
97
+ } catch {}
98
+ if (!taskLog) taskLog = await context.tasks.createLog(task, {
99
+ iteration: 1,
100
+ executionName: task.executionName
101
+ });
102
+ try {
103
+ const updatedTask = await context.tasks.updateTask(task.id, {
104
+ taskStatus: TaskDataStatus.ABORTED
105
+ });
106
+ await context.tasks.updateLog(taskLog.id, {
107
+ items: taskLog.items.concat([
108
+ {
109
+ message: params.message || "Task aborted.",
110
+ type: TaskLogItemType.INFO,
111
+ createdOn: new Date().toISOString()
112
+ }
113
+ ])
114
+ });
115
+ if (definition.onAbort) await definition.onAbort({
116
+ task: updatedTask
117
+ });
118
+ return Result.ok(updatedTask);
119
+ } catch (ex) {
120
+ throw new error("Could not abort the task!", "TASK_ABORT_ERROR", {
121
+ id: params.id,
122
+ message: ex.message
123
+ });
124
+ }
125
+ }
126
+ };
127
+ };
128
+ export { createServiceCrud };
129
+
130
+ //# sourceMappingURL=service.tasks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/crud/service.tasks.js","sources":["../../../src/api/crud/service.tasks.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport type {\n Context,\n ITaskAbortParams,\n ITaskCreateData,\n ITaskLog,\n ITasksContextServiceObject,\n ITaskTriggerParams\n} from \"~/api/types.js\";\nimport { TaskDataStatus, TaskLogItemType } from \"~/api/types.js\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { createService } from \"~/api/service/index.js\";\nimport type { IStepFunctionServiceFetchResult } from \"~/api/service/StepFunctionServicePlugin.js\";\nimport { TaskService } from \"@webiny/api-core/features/task/TaskService/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { BaseError, Result } from \"@webiny/feature/api\";\nimport {\n TaskAbortError,\n TaskDefinitionNotFoundError,\n TaskNotFoundError,\n TaskServiceInfoError\n} from \"~/api/domain/errors.js\";\n\nconst MAX_DELAY_DAYS = 355;\nconst MAX_DELAY_SECONDS = MAX_DELAY_DAYS * 24 * 60 * 60;\n\ninterface ValidateDelayParams<T extends TaskService.TaskInput> {\n input: ITaskCreateData<T>;\n delay?: number;\n}\n\nconst validateDelay = <T extends TaskService.TaskInput = TaskService.TaskInput>({\n input,\n delay\n}: ValidateDelayParams<T>): void => {\n if (!delay || delay < 0 || typeof delay !== \"number\" || Number.isInteger(delay) === false) {\n return;\n } else if (delay < MAX_DELAY_SECONDS) {\n return;\n }\n throw new WebinyError(\n `The maximum delay for a task is ${MAX_DELAY_DAYS} days.`,\n \"MAX_DELAY_ERROR\",\n {\n ...input,\n delay\n }\n );\n};\n\nexport const createServiceCrud = (context: Context): ITasksContextServiceObject => {\n const service = createService({\n context\n });\n\n return {\n trigger: async <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n >(\n params: ITaskTriggerParams<T>\n ): Promise<Result<TaskService.Task<T, O>, BaseError>> => {\n const { definition: id, input: inputValues, name, parent, delay = 0 } = params;\n const definition = context.tasks.getDefinition(id);\n if (!definition) {\n throw new WebinyError(`Task definition was not found!`, \"TASK_DEFINITION_ERROR\", {\n id\n });\n }\n const input: TaskDefinition.TaskCreateData<T> = {\n name: name || definition.title,\n definitionId: id,\n input: inputValues || ({} as T),\n parentId: parent?.id\n };\n\n if (definition.onBeforeTrigger) {\n await definition.onBeforeTrigger({ data: input });\n }\n validateDelay<T>({\n input,\n delay\n });\n\n let task: TaskService.Task<T>;\n try {\n task = await context.tasks.createTask<T>(input);\n } catch (ex) {\n console.log(\"Could not create the task.\", ex);\n throw ex;\n }\n\n let result: Awaited<ReturnType<typeof service.send>> | null = null;\n try {\n result = await service.send(task, delay);\n\n if (!result) {\n throw new WebinyError(\n `Could not trigger the step function!`,\n \"TRIGGER_STEP_FUNCTION_ERROR\",\n {\n task\n }\n );\n }\n } catch (ex) {\n console.log(\"Could not trigger the step function.\");\n console.error(ex);\n /**\n * In case of failure to create the Event Bridge Event, we need to delete the task that was meant to be created.\n * TODO maybe we can leave the task and update it as failed - with event bridge error?\n */\n await context.tasks.deleteTask(task.id);\n throw ex;\n }\n\n const updatedTask = await context.tasks.updateTask<T, O>(task.id, {\n eventResponse: result\n });\n\n return Result.ok(updatedTask);\n },\n fetchServiceInfo: async (\n input: TaskService.Task | string\n ): Promise<Result<IStepFunctionServiceFetchResult, BaseError<any>>> => {\n const task = typeof input === \"object\" ? input : await context.tasks.getTask(input);\n if (!task && typeof input === \"string\") {\n throw new NotFoundError(`Task \"${input}\" was not found!`);\n } else if (!task) {\n throw new WebinyError(`Task was not found!`, \"TASK_FETCH_ERROR\", {\n input\n });\n }\n\n try {\n const info = (await service.fetch(task)) as IStepFunctionServiceFetchResult | null;\n if (info) {\n return Result.ok(info);\n }\n\n return Result.fail(new TaskServiceInfoError());\n } catch (ex) {\n console.log(\"Service fetch error.\");\n console.error(ex);\n return Result.fail(new TaskServiceInfoError());\n }\n },\n abort: async <\n T extends TaskService.TaskInput = TaskService.TaskInput,\n O extends TaskService.GenericOutput = TaskService.GenericOutput\n >(\n params: ITaskAbortParams\n ): Promise<Result<TaskService.Task<T, O>, BaseError<any>>> => {\n const task = await context.tasks.getTask<T, O>(params.id);\n if (!task) {\n return Result.fail(new TaskNotFoundError());\n }\n\n const definition = context.tasks.getDefinition<T, O>(task.definitionId);\n if (!definition) {\n return Result.fail(new TaskDefinitionNotFoundError(task.definitionId));\n }\n /**\n * We should only be able to abort a task which is pending or running\n */\n if (\n [TaskDataStatus.PENDING, TaskDataStatus.RUNNING].includes(task.taskStatus) === false\n ) {\n return Result.fail(\n new TaskAbortError({\n id: params.id,\n status: task.taskStatus\n })\n );\n }\n let taskLog: ITaskLog | null = null;\n try {\n taskLog = await context.tasks.getLatestLog(task.id);\n } catch {}\n if (!taskLog) {\n taskLog = await context.tasks.createLog(task, {\n iteration: 1,\n executionName: task.executionName\n });\n }\n try {\n const updatedTask = await context.tasks.updateTask<T, O>(task.id, {\n taskStatus: TaskDataStatus.ABORTED\n });\n await context.tasks.updateLog(taskLog.id, {\n items: taskLog.items.concat([\n {\n message: params.message || \"Task aborted.\",\n type: TaskLogItemType.INFO,\n createdOn: new Date().toISOString()\n }\n ])\n });\n /**\n * TODO: determine when to kick off the onAbort hook\n */\n if (definition.onAbort) {\n await definition.onAbort({\n task: updatedTask\n });\n }\n\n return Result.ok(updatedTask);\n } catch (ex) {\n throw new WebinyError(`Could not abort the task!`, \"TASK_ABORT_ERROR\", {\n id: params.id,\n message: ex.message\n });\n }\n }\n };\n};\n"],"names":["MAX_DELAY_DAYS","MAX_DELAY_SECONDS","validateDelay","input","delay","Number","WebinyError","createServiceCrud","context","service","createService","params","id","inputValues","name","parent","definition","task","ex","console","result","updatedTask","Result","NotFoundError","info","TaskServiceInfoError","TaskNotFoundError","TaskDefinitionNotFoundError","TaskDataStatus","TaskAbortError","taskLog","TaskLogItemType","Date"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import type { ITaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
3
+ /**
4
+ * RunnableTaskDecorator adds runtime behavior to TaskDefinition:
5
+ * - Applies default values (maxIterations, isPrivate, databaseLogs, fields)
6
+ * - Validates task ID (must be camelCase)
7
+ * - Provides field management methods
8
+ */
9
+ declare class RunnableTaskDecoratorImpl implements TaskDefinition.Interface {
10
+ private decoratee;
11
+ constructor(decoratee: TaskDefinition.Interface);
12
+ get id(): string;
13
+ get title(): string;
14
+ get description(): string | undefined;
15
+ get isPrivate(): boolean;
16
+ get databaseLogs(): boolean;
17
+ get maxIterations(): number;
18
+ get selfCleanup(): import("@webiny/api-core/features/task/TaskDefinition/abstractions").ISelfCleanup | undefined;
19
+ get createInputValidation(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskCreateInputValidationParams) => import("zod").ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>> | import("@webiny/api/types").GenericRecord<PropertyKey, import("zod").ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>) | undefined;
20
+ get run(): (params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskRunParams<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResult<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
21
+ get onBeforeTrigger(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskBeforeTriggerParams<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput>) => Promise<void>) | undefined;
22
+ get onDone(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskLifecycleHook<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<void>) | undefined;
23
+ get onError(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskLifecycleHook<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<void>) | undefined;
24
+ get onAbort(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskLifecycleHook<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<void>) | undefined;
25
+ get onMaxIterations(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskLifecycleHook<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<void>) | undefined;
26
+ private validate;
27
+ getTask(): ITaskDefinition;
28
+ }
29
+ export declare const RunnableTaskDecorator: typeof RunnableTaskDecoratorImpl & {
30
+ __abstraction: import("@webiny/di").Abstraction<ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
31
+ };
32
+ export {};
@@ -0,0 +1,69 @@
1
+ import camelCase from "lodash/camelCase.js";
2
+ import error from "@webiny/error";
3
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
4
+ const DEFAULT_MAX_ITERATIONS = 50;
5
+ class RunnableTaskDecoratorImpl {
6
+ constructor(decoratee){
7
+ this.decoratee = decoratee;
8
+ this.validate();
9
+ }
10
+ get id() {
11
+ return this.decoratee.id;
12
+ }
13
+ get title() {
14
+ return this.decoratee.title;
15
+ }
16
+ get description() {
17
+ return this.decoratee.description;
18
+ }
19
+ get isPrivate() {
20
+ return this.decoratee.isPrivate ?? false;
21
+ }
22
+ get databaseLogs() {
23
+ return this.decoratee.databaseLogs ?? false;
24
+ }
25
+ get maxIterations() {
26
+ return this.decoratee.maxIterations || DEFAULT_MAX_ITERATIONS;
27
+ }
28
+ get selfCleanup() {
29
+ return this.decoratee.selfCleanup;
30
+ }
31
+ get createInputValidation() {
32
+ return this.decoratee.createInputValidation;
33
+ }
34
+ get run() {
35
+ return this.decoratee.run.bind(this.decoratee);
36
+ }
37
+ get onBeforeTrigger() {
38
+ return this.decoratee.onBeforeTrigger?.bind(this.decoratee);
39
+ }
40
+ get onDone() {
41
+ return this.decoratee.onDone?.bind(this.decoratee);
42
+ }
43
+ get onError() {
44
+ return this.decoratee.onError?.bind(this.decoratee);
45
+ }
46
+ get onAbort() {
47
+ return this.decoratee.onAbort?.bind(this.decoratee);
48
+ }
49
+ get onMaxIterations() {
50
+ return this.decoratee.onMaxIterations?.bind(this.decoratee);
51
+ }
52
+ validate() {
53
+ if (camelCase(this.decoratee.id) !== this.decoratee.id) {
54
+ const message = `Task ID "${this.decoratee.id}" is invalid. It must be in camelCase format, for example: "myCustomTask".`;
55
+ console.log(message);
56
+ throw new error(message);
57
+ }
58
+ }
59
+ getTask() {
60
+ return this;
61
+ }
62
+ }
63
+ const RunnableTaskDecorator = TaskDefinition.createDecorator({
64
+ decorator: RunnableTaskDecoratorImpl,
65
+ dependencies: []
66
+ });
67
+ export { RunnableTaskDecorator };
68
+
69
+ //# sourceMappingURL=RunnableTaskDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/decorators/RunnableTaskDecorator.js","sources":["../../../src/api/decorators/RunnableTaskDecorator.ts"],"sourcesContent":["import camelCase from \"lodash/camelCase.js\";\nimport WebinyError from \"@webiny/error\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { ITaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\nconst DEFAULT_MAX_ITERATIONS = 50;\n\n/**\n * RunnableTaskDecorator adds runtime behavior to TaskDefinition:\n * - Applies default values (maxIterations, isPrivate, databaseLogs, fields)\n * - Validates task ID (must be camelCase)\n * - Provides field management methods\n */\nclass RunnableTaskDecoratorImpl implements TaskDefinition.Interface {\n constructor(private decoratee: TaskDefinition.Interface) {\n this.validate();\n }\n\n // Delegate simple properties\n get id() {\n return this.decoratee.id;\n }\n\n get title() {\n return this.decoratee.title;\n }\n\n get description() {\n return this.decoratee.description;\n }\n\n // Apply default values\n get isPrivate() {\n return this.decoratee.isPrivate ?? false;\n }\n\n get databaseLogs() {\n return this.decoratee.databaseLogs ?? false;\n }\n\n get maxIterations() {\n return this.decoratee.maxIterations || DEFAULT_MAX_ITERATIONS;\n }\n\n get selfCleanup() {\n return this.decoratee.selfCleanup;\n }\n\n get createInputValidation() {\n return this.decoratee.createInputValidation;\n }\n\n // Delegate lifecycle methods (bind to preserve context)\n get run() {\n return this.decoratee.run.bind(this.decoratee);\n }\n\n get onBeforeTrigger() {\n return this.decoratee.onBeforeTrigger?.bind(this.decoratee);\n }\n\n get onDone() {\n return this.decoratee.onDone?.bind(this.decoratee);\n }\n\n get onError() {\n return this.decoratee.onError?.bind(this.decoratee);\n }\n\n get onAbort() {\n return this.decoratee.onAbort?.bind(this.decoratee);\n }\n\n get onMaxIterations() {\n return this.decoratee.onMaxIterations?.bind(this.decoratee);\n }\n\n // Validation logic\n private validate(): void {\n if (camelCase(this.decoratee.id) !== this.decoratee.id) {\n const message = `Task ID \"${this.decoratee.id}\" is invalid. It must be in camelCase format, for example: \"myCustomTask\".`;\n console.log(message);\n throw new WebinyError(message);\n }\n }\n\n // Method to get the underlying task (for compatibility with existing code)\n public getTask(): ITaskDefinition {\n return this;\n }\n}\n\nexport const RunnableTaskDecorator = TaskDefinition.createDecorator({\n decorator: RunnableTaskDecoratorImpl,\n dependencies: []\n});\n"],"names":["DEFAULT_MAX_ITERATIONS","RunnableTaskDecoratorImpl","decoratee","camelCase","message","console","WebinyError","RunnableTaskDecorator","TaskDefinition"],"mappings":";;;AAKA,MAAMA,yBAAyB;AAQ/B,MAAMC;IACF,YAAoBC,SAAmC,CAAE;aAArCA,SAAS,GAATA;QAChB,IAAI,CAAC,QAAQ;IACjB;IAGA,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAC5B;IAEA,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC/B;IAEA,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW;IACrC;IAGA,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI;IACvC;IAEA,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI;IAC1C;IAEA,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,IAAIF;IAC3C;IAEA,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW;IACrC;IAEA,IAAI,wBAAwB;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB;IAC/C;IAGA,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;IACjD;IAEA,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IAEA,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,SAAS;IACrD;IAEA,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS;IACtD;IAEA,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,SAAS;IACtD;IAEA,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IAGQ,WAAiB;QACrB,IAAIG,UAAU,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;YACpD,MAAMC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,0EAA0E,CAAC;YACzHC,QAAQ,GAAG,CAACD;YACZ,MAAM,IAAIE,MAAYF;QAC1B;IACJ;IAGO,UAA2B;QAC9B,OAAO,IAAI;IACf;AACJ;AAEO,MAAMG,wBAAwBC,eAAe,eAAe,CAAC;IAChE,WAAWP;IACX,cAAc,EAAE;AACpB"}
@@ -0,0 +1,30 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { CleanupTaskSubtreeUseCase } from "../../api/features/CleanupTaskSubtree/index.js";
3
+ type LifecycleHook = TaskDefinition.Interface["onDone"];
4
+ type HookParams = Parameters<NonNullable<LifecycleHook>>[0];
5
+ export declare class SelfCleaningTaskDecoratorImpl implements TaskDefinition.Interface {
6
+ private readonly cleanupTaskSubtree;
7
+ private decoratee;
8
+ private readonly events;
9
+ constructor(cleanupTaskSubtree: CleanupTaskSubtreeUseCase.Interface, decoratee: TaskDefinition.Interface);
10
+ get id(): string;
11
+ get title(): string;
12
+ get description(): string | undefined;
13
+ get isPrivate(): boolean | undefined;
14
+ get maxIterations(): number | undefined;
15
+ get selfCleanup(): import("@webiny/api-core/features/task/TaskDefinition/abstractions").ISelfCleanup | undefined;
16
+ get createInputValidation(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskCreateInputValidationParams) => import("zod").ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>> | import("@webiny/api/types").GenericRecord<PropertyKey, import("zod").ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>>) | undefined;
17
+ get run(): (params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskRunParams<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskResult<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
18
+ get onBeforeTrigger(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskBeforeTriggerParams<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput>) => Promise<void>) | undefined;
19
+ get onMaxIterations(): ((params: import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskLifecycleHook<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>) => Promise<void>) | undefined;
20
+ get databaseLogs(): boolean | undefined;
21
+ get onDone(): (params: HookParams) => Promise<void>;
22
+ get onError(): (params: HookParams) => Promise<void>;
23
+ get onAbort(): (params: HookParams) => Promise<void>;
24
+ private runCleanup;
25
+ private safeCall;
26
+ }
27
+ export declare const SelfCleaningTaskDecorator: typeof SelfCleaningTaskDecoratorImpl & {
28
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskDefinition<import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskInput, import("@webiny/api-core/features/task/TaskDefinition/abstractions").ITaskOutput>>;
29
+ };
30
+ export {};
@@ -0,0 +1,84 @@
1
+ import { TaskDefinition } from "@webiny/api-core/features/task/TaskDefinition/index.js";
2
+ import { normalizeSelfCleanup } from "../utils/normalizeSelfCleanup.js";
3
+ import { CleanupTaskSubtreeUseCase } from "../features/CleanupTaskSubtree/index.js";
4
+ import { getErrorProperties } from "../utils/getErrorProperties.js";
5
+ class SelfCleaningTaskDecoratorImpl {
6
+ constructor(cleanupTaskSubtree, decoratee){
7
+ this.cleanupTaskSubtree = cleanupTaskSubtree;
8
+ this.decoratee = decoratee;
9
+ this.events = normalizeSelfCleanup(decoratee.selfCleanup);
10
+ }
11
+ get id() {
12
+ return this.decoratee.id;
13
+ }
14
+ get title() {
15
+ return this.decoratee.title;
16
+ }
17
+ get description() {
18
+ return this.decoratee.description;
19
+ }
20
+ get isPrivate() {
21
+ return this.decoratee.isPrivate;
22
+ }
23
+ get maxIterations() {
24
+ return this.decoratee.maxIterations;
25
+ }
26
+ get selfCleanup() {
27
+ return this.decoratee.selfCleanup;
28
+ }
29
+ get createInputValidation() {
30
+ return this.decoratee.createInputValidation;
31
+ }
32
+ get run() {
33
+ return this.decoratee.run.bind(this.decoratee);
34
+ }
35
+ get onBeforeTrigger() {
36
+ return this.decoratee.onBeforeTrigger?.bind(this.decoratee);
37
+ }
38
+ get onMaxIterations() {
39
+ return this.decoratee.onMaxIterations?.bind(this.decoratee);
40
+ }
41
+ get databaseLogs() {
42
+ if (this.events.size > 0) return false;
43
+ return this.decoratee.databaseLogs;
44
+ }
45
+ get onDone() {
46
+ return async (params)=>{
47
+ await this.safeCall(this.decoratee.onDone, params, "onDone");
48
+ if (this.events.has("onSuccess")) await this.runCleanup(params);
49
+ };
50
+ }
51
+ get onError() {
52
+ return async (params)=>{
53
+ await this.safeCall(this.decoratee.onError, params, "onError");
54
+ if (this.events.has("onError")) await this.runCleanup(params);
55
+ };
56
+ }
57
+ get onAbort() {
58
+ return async (params)=>{
59
+ await this.safeCall(this.decoratee.onAbort, params, "onAbort");
60
+ if (this.events.has("onAbort")) await this.runCleanup(params);
61
+ };
62
+ }
63
+ async runCleanup(params) {
64
+ await this.cleanupTaskSubtree.execute(params.task.id);
65
+ }
66
+ async safeCall(hook, params, name) {
67
+ if (!hook) return;
68
+ try {
69
+ await hook.call(this.decoratee, params);
70
+ } catch (ex) {
71
+ console.error(`Error executing ${name} hook for task "${params.task.id}".`);
72
+ console.log(getErrorProperties(ex));
73
+ }
74
+ }
75
+ }
76
+ const SelfCleaningTaskDecorator = TaskDefinition.createDecorator({
77
+ decorator: SelfCleaningTaskDecoratorImpl,
78
+ dependencies: [
79
+ CleanupTaskSubtreeUseCase
80
+ ]
81
+ });
82
+ export { SelfCleaningTaskDecorator, SelfCleaningTaskDecoratorImpl };
83
+
84
+ //# sourceMappingURL=SelfCleaningTaskDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/decorators/SelfCleaningTaskDecorator.js","sources":["../../../src/api/decorators/SelfCleaningTaskDecorator.ts"],"sourcesContent":["import { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport type { ISelfCleanupEvent } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\nimport { normalizeSelfCleanup } from \"~/api/utils/normalizeSelfCleanup.js\";\nimport { CleanupTaskSubtreeUseCase } from \"~/api/features/CleanupTaskSubtree/index.js\";\nimport { getErrorProperties } from \"~/api/utils/getErrorProperties.js\";\n\ntype LifecycleHook = TaskDefinition.Interface[\"onDone\"];\ntype HookParams = Parameters<NonNullable<LifecycleHook>>[0];\n\nexport class SelfCleaningTaskDecoratorImpl implements TaskDefinition.Interface {\n private readonly events: ReadonlySet<ISelfCleanupEvent>;\n\n public constructor(\n private readonly cleanupTaskSubtree: CleanupTaskSubtreeUseCase.Interface,\n private decoratee: TaskDefinition.Interface\n ) {\n this.events = normalizeSelfCleanup(decoratee.selfCleanup);\n }\n\n // Pass-through properties.\n get id() {\n return this.decoratee.id;\n }\n get title() {\n return this.decoratee.title;\n }\n get description() {\n return this.decoratee.description;\n }\n get isPrivate() {\n return this.decoratee.isPrivate;\n }\n get maxIterations() {\n return this.decoratee.maxIterations;\n }\n get selfCleanup() {\n return this.decoratee.selfCleanup;\n }\n get createInputValidation() {\n return this.decoratee.createInputValidation;\n }\n get run() {\n return this.decoratee.run.bind(this.decoratee);\n }\n get onBeforeTrigger() {\n return this.decoratee.onBeforeTrigger?.bind(this.decoratee);\n }\n get onMaxIterations() {\n return this.decoratee.onMaxIterations?.bind(this.decoratee);\n }\n\n // databaseLogs override — any non-empty event set forces false.\n get databaseLogs() {\n if (this.events.size > 0) {\n return false;\n }\n return this.decoratee.databaseLogs;\n }\n\n // Always-defined lifecycle hooks. Each runs the user's hook first, then\n // triggers cleanup if the matching event is in the set.\n get onDone() {\n return async (params: HookParams) => {\n await this.safeCall(this.decoratee.onDone, params, \"onDone\");\n if (this.events.has(\"onSuccess\")) {\n await this.runCleanup(params);\n }\n };\n }\n\n get onError() {\n return async (params: HookParams) => {\n await this.safeCall(this.decoratee.onError, params, \"onError\");\n if (this.events.has(\"onError\")) {\n await this.runCleanup(params);\n }\n };\n }\n\n get onAbort() {\n return async (params: HookParams) => {\n await this.safeCall(this.decoratee.onAbort, params, \"onAbort\");\n if (this.events.has(\"onAbort\")) {\n await this.runCleanup(params);\n }\n };\n }\n\n private async runCleanup(params: HookParams): Promise<void> {\n await this.cleanupTaskSubtree.execute(params.task.id);\n }\n\n private async safeCall(\n hook: LifecycleHook | undefined,\n params: HookParams,\n name: string\n ): Promise<void> {\n if (!hook) {\n return;\n }\n try {\n await hook.call(this.decoratee, params);\n } catch (ex) {\n console.error(`Error executing ${name} hook for task \"${params.task.id}\".`);\n console.log(getErrorProperties(ex));\n }\n }\n}\n\nexport const SelfCleaningTaskDecorator = TaskDefinition.createDecorator({\n decorator: SelfCleaningTaskDecoratorImpl,\n dependencies: [CleanupTaskSubtreeUseCase]\n});\n"],"names":["SelfCleaningTaskDecoratorImpl","cleanupTaskSubtree","decoratee","normalizeSelfCleanup","params","hook","name","ex","console","getErrorProperties","SelfCleaningTaskDecorator","TaskDefinition","CleanupTaskSubtreeUseCase"],"mappings":";;;;AASO,MAAMA;IAGT,YACqBC,kBAAuD,EAChEC,SAAmC,CAC7C;aAFmBD,kBAAkB,GAAlBA;aACTC,SAAS,GAATA;QAER,IAAI,CAAC,MAAM,GAAGC,qBAAqBD,UAAU,WAAW;IAC5D;IAGA,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE;IAC5B;IACA,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK;IAC/B;IACA,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW;IACrC;IACA,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS;IACnC;IACA,IAAI,gBAAgB;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa;IACvC;IACA,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW;IACrC;IACA,IAAI,wBAAwB;QACxB,OAAO,IAAI,CAAC,SAAS,CAAC,qBAAqB;IAC/C;IACA,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;IACjD;IACA,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IACA,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,KAAK,IAAI,CAAC,SAAS;IAC9D;IAGA,IAAI,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,GACnB,OAAO;QAEX,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY;IACtC;IAIA,IAAI,SAAS;QACT,OAAO,OAAOE;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAEA,QAAQ;YACnD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAChB,MAAM,IAAI,CAAC,UAAU,CAACA;QAE9B;IACJ;IAEA,IAAI,UAAU;QACV,OAAO,OAAOA;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAEA,QAAQ;YACpD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAChB,MAAM,IAAI,CAAC,UAAU,CAACA;QAE9B;IACJ;IAEA,IAAI,UAAU;QACV,OAAO,OAAOA;YACV,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAEA,QAAQ;YACpD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,YAChB,MAAM,IAAI,CAAC,UAAU,CAACA;QAE9B;IACJ;IAEA,MAAc,WAAWA,MAAkB,EAAiB;QACxD,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAACA,OAAO,IAAI,CAAC,EAAE;IACxD;IAEA,MAAc,SACVC,IAA+B,EAC/BD,MAAkB,EAClBE,IAAY,EACC;QACb,IAAI,CAACD,MACD;QAEJ,IAAI;YACA,MAAMA,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,EAAED;QACpC,EAAE,OAAOG,IAAI;YACTC,QAAQ,KAAK,CAAC,CAAC,gBAAgB,EAAEF,KAAK,gBAAgB,EAAEF,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1EI,QAAQ,GAAG,CAACC,mBAAmBF;QACnC;IACJ;AACJ;AAEO,MAAMG,4BAA4BC,eAAe,eAAe,CAAC;IACpE,WAAWX;IACX,cAAc;QAACY;KAA0B;AAC7C"}
@@ -0,0 +1,3 @@
1
+ export interface IBackgroundTaskSettings {
2
+ retentionDays: number | undefined;
3
+ }
File without changes
@@ -0,0 +1,3 @@
1
+ export declare const BACKGROUND_TASK_SETTINGS_MODEL_ID = "backgroundTaskSettings";
2
+ export declare const BACKGROUND_TASK_MAX_RETENTION_DAYS = 3650;
3
+ export declare const BACKGROUND_TASK_DEFAULT_RETENTION_DAYS = 90;
@@ -0,0 +1,6 @@
1
+ const BACKGROUND_TASK_SETTINGS_MODEL_ID = "backgroundTaskSettings";
2
+ const BACKGROUND_TASK_MAX_RETENTION_DAYS = 3650;
3
+ const BACKGROUND_TASK_DEFAULT_RETENTION_DAYS = 90;
4
+ export { BACKGROUND_TASK_DEFAULT_RETENTION_DAYS, BACKGROUND_TASK_MAX_RETENTION_DAYS, BACKGROUND_TASK_SETTINGS_MODEL_ID };
5
+
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/domain/constants.js","sources":["../../../src/api/domain/constants.ts"],"sourcesContent":["export const BACKGROUND_TASK_SETTINGS_MODEL_ID = \"backgroundTaskSettings\";\nexport const BACKGROUND_TASK_MAX_RETENTION_DAYS = 3650;\nexport const BACKGROUND_TASK_DEFAULT_RETENTION_DAYS = 90;\n"],"names":["BACKGROUND_TASK_SETTINGS_MODEL_ID","BACKGROUND_TASK_MAX_RETENTION_DAYS","BACKGROUND_TASK_DEFAULT_RETENTION_DAYS"],"mappings":"AAAO,MAAMA,oCAAoC;AAC1C,MAAMC,qCAAqC;AAC3C,MAAMC,yCAAyC"}
@@ -0,0 +1,57 @@
1
+ import { BaseError } from "@webiny/feature/api";
2
+ import type { ZodError } from "zod";
3
+ import type { ValidationIssue } from "@webiny/utils";
4
+ export declare class TaskDefinitionNotFoundError extends BaseError<{
5
+ id: string;
6
+ }> {
7
+ readonly code: "BackgroundTasks/TaskDefinition/NotFoundError";
8
+ constructor(id: string);
9
+ }
10
+ export declare class TaskNotFoundError extends BaseError {
11
+ readonly code: "BackgroundTasks/Task/NotFoundError";
12
+ constructor();
13
+ }
14
+ export declare class TaskAbortError extends BaseError<{
15
+ id: string;
16
+ status: string;
17
+ }> {
18
+ readonly code: "BackgroundTasks/Task/Abort";
19
+ constructor(data: {
20
+ id: string;
21
+ status: string;
22
+ });
23
+ }
24
+ export declare class TaskLogNotFoundError extends BaseError {
25
+ readonly code: "BackgroundTasks/Log/NotFoundError";
26
+ constructor();
27
+ }
28
+ export declare class TaskServiceInfoError extends BaseError {
29
+ readonly code: "BackgroundTasks/Service/InfoUnavailable";
30
+ constructor();
31
+ }
32
+ interface BackgroundTaskValidationErrorData {
33
+ issues: ValidationIssue[];
34
+ }
35
+ export declare class BackgroundTaskValidationError extends BaseError<BackgroundTaskValidationErrorData> {
36
+ readonly code: "BackgroundTasks/ValidationError";
37
+ constructor(error: string | ZodError);
38
+ }
39
+ interface BackgroundTaskPersistenceErrorData {
40
+ originalMessage: string;
41
+ originalCode?: string;
42
+ originalData?: unknown;
43
+ }
44
+ export declare class BackgroundTaskPersistenceError extends BaseError<BackgroundTaskPersistenceErrorData> {
45
+ readonly code: "BackgroundTasks/PersistenceError";
46
+ constructor(error: Error);
47
+ static from(error: unknown): BackgroundTaskPersistenceError;
48
+ }
49
+ export declare class BackgroundTaskModelNotFoundError extends BaseError {
50
+ readonly code: "BackgroundTasks/ModelNotFound";
51
+ constructor(modelId: string);
52
+ }
53
+ export declare class BackgroundTaskNotAuthorizedError extends BaseError {
54
+ readonly code: "BackgroundTasks/NotAuthorized";
55
+ constructor();
56
+ }
57
+ export {};