@webiny/tasks 0.0.0-unstable.6f45466a1d → 0.0.0-unstable.7be00a75a9

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 (225) hide show
  1. package/context.js +38 -37
  2. package/context.js.map +1 -1
  3. package/crud/TaskLogPrivateModel.js +33 -24
  4. package/crud/TaskLogPrivateModel.js.map +1 -1
  5. package/crud/TaskPrivateModel.js +48 -36
  6. package/crud/TaskPrivateModel.js.map +1 -1
  7. package/crud/cleanupTaskSubtree.d.ts +8 -0
  8. package/crud/cleanupTaskSubtree.js +62 -0
  9. package/crud/cleanupTaskSubtree.js.map +1 -0
  10. package/crud/crud.tasks.js +292 -352
  11. package/crud/crud.tasks.js.map +1 -1
  12. package/crud/definition.tasks.js +13 -16
  13. package/crud/definition.tasks.js.map +1 -1
  14. package/crud/service.tasks.js +119 -155
  15. package/crud/service.tasks.js.map +1 -1
  16. package/decorators/RunnableTaskDecorator.d.ts +4 -3
  17. package/decorators/RunnableTaskDecorator.js +61 -74
  18. package/decorators/RunnableTaskDecorator.js.map +1 -1
  19. package/decorators/SelfCleaningTaskDecorator.d.ts +30 -0
  20. package/decorators/SelfCleaningTaskDecorator.js +84 -0
  21. package/decorators/SelfCleaningTaskDecorator.js.map +1 -0
  22. package/domain/errors.js +35 -39
  23. package/domain/errors.js.map +1 -1
  24. package/events/TaskAfterCreateEvent.d.ts +2 -2
  25. package/events/TaskAfterCreateEvent.js +10 -7
  26. package/events/TaskAfterCreateEvent.js.map +1 -1
  27. package/events/TaskAfterDeleteEvent.d.ts +2 -2
  28. package/events/TaskAfterDeleteEvent.js +10 -7
  29. package/events/TaskAfterDeleteEvent.js.map +1 -1
  30. package/events/TaskAfterUpdateEvent.d.ts +2 -2
  31. package/events/TaskAfterUpdateEvent.js +10 -7
  32. package/events/TaskAfterUpdateEvent.js.map +1 -1
  33. package/events/TaskBeforeCreateEvent.d.ts +2 -2
  34. package/events/TaskBeforeCreateEvent.js +10 -7
  35. package/events/TaskBeforeCreateEvent.js.map +1 -1
  36. package/events/TaskBeforeDeleteEvent.d.ts +2 -2
  37. package/events/TaskBeforeDeleteEvent.js +10 -7
  38. package/events/TaskBeforeDeleteEvent.js.map +1 -1
  39. package/events/TaskBeforeUpdateEvent.d.ts +2 -2
  40. package/events/TaskBeforeUpdateEvent.js +10 -7
  41. package/events/TaskBeforeUpdateEvent.js.map +1 -1
  42. package/events/abstractions.d.ts +13 -13
  43. package/events/abstractions.js +7 -36
  44. package/events/abstractions.js.map +1 -1
  45. package/events/index.js +0 -2
  46. package/features/AbortTask/AbortTaskUseCase.js +9 -8
  47. package/features/AbortTask/AbortTaskUseCase.js.map +1 -1
  48. package/features/AbortTask/abstractions.js +2 -1
  49. package/features/AbortTask/abstractions.js.map +1 -1
  50. package/features/AbortTask/feature.d.ts +4 -1
  51. package/features/AbortTask/feature.js +6 -5
  52. package/features/AbortTask/feature.js.map +1 -1
  53. package/features/AbortTask/index.js +0 -2
  54. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.d.ts +7 -0
  55. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js +11 -0
  56. package/features/CleanupTaskSubtree/CleanupTaskSubtreeUseCase.js.map +1 -0
  57. package/features/CleanupTaskSubtree/abstractions.d.ts +7 -0
  58. package/features/CleanupTaskSubtree/abstractions.js +5 -0
  59. package/features/CleanupTaskSubtree/abstractions.js.map +1 -0
  60. package/features/CleanupTaskSubtree/index.d.ts +2 -0
  61. package/features/CleanupTaskSubtree/index.js +2 -0
  62. package/features/GetTask/GetTaskUseCase.js +8 -7
  63. package/features/GetTask/GetTaskUseCase.js.map +1 -1
  64. package/features/GetTask/abstractions.js +2 -1
  65. package/features/GetTask/abstractions.js.map +1 -1
  66. package/features/GetTask/feature.d.ts +4 -1
  67. package/features/GetTask/feature.js +6 -5
  68. package/features/GetTask/feature.js.map +1 -1
  69. package/features/GetTask/index.js +0 -2
  70. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js +18 -16
  71. package/features/GetTaskDefinition/GetTaskDefinitionUseCase.js.map +1 -1
  72. package/features/GetTaskDefinition/abstractions.js +2 -1
  73. package/features/GetTaskDefinition/abstractions.js.map +1 -1
  74. package/features/GetTaskDefinition/feature.d.ts +4 -1
  75. package/features/GetTaskDefinition/feature.js +6 -5
  76. package/features/GetTaskDefinition/feature.js.map +1 -1
  77. package/features/GetTaskDefinition/index.js +0 -2
  78. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js +18 -12
  79. package/features/ListTaskDefinitions/ListTaskDefinitionsUseCase.js.map +1 -1
  80. package/features/ListTaskDefinitions/abstractions.js +2 -1
  81. package/features/ListTaskDefinitions/abstractions.js.map +1 -1
  82. package/features/ListTaskDefinitions/feature.d.ts +4 -1
  83. package/features/ListTaskDefinitions/feature.js +6 -5
  84. package/features/ListTaskDefinitions/feature.js.map +1 -1
  85. package/features/ListTaskDefinitions/index.js +0 -2
  86. package/features/ListTasks/ListTasksUseCase.js +8 -7
  87. package/features/ListTasks/ListTasksUseCase.js.map +1 -1
  88. package/features/ListTasks/abstractions.js +2 -1
  89. package/features/ListTasks/abstractions.js.map +1 -1
  90. package/features/ListTasks/feature.d.ts +4 -1
  91. package/features/ListTasks/feature.js +6 -5
  92. package/features/ListTasks/feature.js.map +1 -1
  93. package/features/ListTasks/index.js +0 -2
  94. package/features/TaskController/TaskController.js +60 -60
  95. package/features/TaskController/TaskController.js.map +1 -1
  96. package/features/TaskController/augmentation.js +0 -3
  97. package/features/TaskController/index.js +0 -5
  98. package/features/TaskExecutionContext/TaskExecutionContext.js +38 -45
  99. package/features/TaskExecutionContext/TaskExecutionContext.js.map +1 -1
  100. package/features/TaskExecutionContext/abstractions.js +2 -10
  101. package/features/TaskExecutionContext/abstractions.js.map +1 -1
  102. package/features/TaskExecutionContext/feature.d.ts +4 -1
  103. package/features/TaskExecutionContext/feature.js +6 -5
  104. package/features/TaskExecutionContext/feature.js.map +1 -1
  105. package/features/TaskExecutionContext/index.js +0 -2
  106. package/features/TriggerTask/TriggerTaskUseCase.js +9 -8
  107. package/features/TriggerTask/TriggerTaskUseCase.js.map +1 -1
  108. package/features/TriggerTask/abstractions.js +2 -1
  109. package/features/TriggerTask/abstractions.js.map +1 -1
  110. package/features/TriggerTask/feature.d.ts +4 -1
  111. package/features/TriggerTask/feature.js +6 -5
  112. package/features/TriggerTask/feature.js.map +1 -1
  113. package/features/TriggerTask/index.js +0 -2
  114. package/global.js +0 -2
  115. package/graphql/checkPermissions.js +16 -35
  116. package/graphql/checkPermissions.js.map +1 -1
  117. package/graphql/index.js +156 -202
  118. package/graphql/index.js.map +1 -1
  119. package/graphql/utils.js +15 -14
  120. package/graphql/utils.js.map +1 -1
  121. package/handler/index.js +46 -53
  122. package/handler/index.js.map +1 -1
  123. package/handler/register.js +7 -15
  124. package/handler/register.js.map +1 -1
  125. package/handler/types.js +0 -3
  126. package/index.js +2 -4
  127. package/package.json +30 -25
  128. package/plugins/TaskServicePlugin.js +9 -6
  129. package/plugins/TaskServicePlugin.js.map +1 -1
  130. package/plugins/index.js +0 -2
  131. package/response/DatabaseResponse.js +113 -132
  132. package/response/DatabaseResponse.js.map +1 -1
  133. package/response/Response.js +78 -96
  134. package/response/Response.js.map +1 -1
  135. package/response/ResponseAbortedResult.js +8 -7
  136. package/response/ResponseAbortedResult.js.map +1 -1
  137. package/response/ResponseContinueResult.js +12 -14
  138. package/response/ResponseContinueResult.js.map +1 -1
  139. package/response/ResponseDoneResult.js +10 -9
  140. package/response/ResponseDoneResult.js.map +1 -1
  141. package/response/ResponseErrorResult.js +9 -8
  142. package/response/ResponseErrorResult.js.map +1 -1
  143. package/response/TaskResponse.js +44 -64
  144. package/response/TaskResponse.js.map +1 -1
  145. package/response/abstractions/Response.js +0 -3
  146. package/response/abstractions/ResponseAbortedResult.js +0 -3
  147. package/response/abstractions/ResponseBaseResult.js +0 -3
  148. package/response/abstractions/ResponseContinueResult.js +0 -3
  149. package/response/abstractions/ResponseDoneResult.js +0 -3
  150. package/response/abstractions/ResponseErrorResult.js +0 -3
  151. package/response/abstractions/TaskResponse.js +0 -3
  152. package/response/abstractions/index.js +0 -2
  153. package/response/index.js +0 -2
  154. package/runner/TaskControl.js +151 -212
  155. package/runner/TaskControl.js.map +1 -1
  156. package/runner/TaskEventValidation.js +12 -13
  157. package/runner/TaskEventValidation.js.map +1 -1
  158. package/runner/TaskManager.js +68 -106
  159. package/runner/TaskManager.js.map +1 -1
  160. package/runner/TaskManagerStore.d.ts +2 -2
  161. package/runner/TaskManagerStore.js +90 -139
  162. package/runner/TaskManagerStore.js.map +1 -1
  163. package/runner/TaskRunner.js +45 -65
  164. package/runner/TaskRunner.js.map +1 -1
  165. package/runner/abstractions/TaskControl.js +0 -3
  166. package/runner/abstractions/TaskEventValidation.js +0 -3
  167. package/runner/abstractions/TaskManager.js +0 -3
  168. package/runner/abstractions/TaskManagerStore.js +0 -3
  169. package/runner/abstractions/TaskRunner.js +0 -3
  170. package/runner/abstractions/index.js +0 -2
  171. package/runner/index.js +0 -2
  172. package/service/EventBridgeEventTransportPlugin.js +43 -42
  173. package/service/EventBridgeEventTransportPlugin.js.map +1 -1
  174. package/service/StepFunctionServicePlugin.js +65 -66
  175. package/service/StepFunctionServicePlugin.js.map +1 -1
  176. package/service/createService.js +10 -13
  177. package/service/createService.js.map +1 -1
  178. package/service/index.js +7 -5
  179. package/service/index.js.map +1 -1
  180. package/tasks/testingRunTask.js +11 -10
  181. package/tasks/testingRunTask.js.map +1 -1
  182. package/types.d.ts +10 -1
  183. package/types.js +13 -11
  184. package/types.js.map +1 -1
  185. package/utils/ObjectUpdater.js +25 -31
  186. package/utils/ObjectUpdater.js.map +1 -1
  187. package/utils/getErrorProperties.js +5 -4
  188. package/utils/getErrorProperties.js.map +1 -1
  189. package/utils/getObjectProperties.js +8 -15
  190. package/utils/getObjectProperties.js.map +1 -1
  191. package/utils/index.js +0 -2
  192. package/utils/normalizeSelfCleanup.d.ts +2 -0
  193. package/utils/normalizeSelfCleanup.js +16 -0
  194. package/utils/normalizeSelfCleanup.js.map +1 -0
  195. package/events/index.js.map +0 -1
  196. package/features/AbortTask/index.js.map +0 -1
  197. package/features/GetTask/index.js.map +0 -1
  198. package/features/GetTaskDefinition/index.js.map +0 -1
  199. package/features/ListTaskDefinitions/index.js.map +0 -1
  200. package/features/ListTasks/index.js.map +0 -1
  201. package/features/TaskController/augmentation.js.map +0 -1
  202. package/features/TaskController/index.js.map +0 -1
  203. package/features/TaskExecutionContext/index.js.map +0 -1
  204. package/features/TriggerTask/index.js.map +0 -1
  205. package/global.js.map +0 -1
  206. package/handler/types.js.map +0 -1
  207. package/index.js.map +0 -1
  208. package/plugins/index.js.map +0 -1
  209. package/response/abstractions/Response.js.map +0 -1
  210. package/response/abstractions/ResponseAbortedResult.js.map +0 -1
  211. package/response/abstractions/ResponseBaseResult.js.map +0 -1
  212. package/response/abstractions/ResponseContinueResult.js.map +0 -1
  213. package/response/abstractions/ResponseDoneResult.js.map +0 -1
  214. package/response/abstractions/ResponseErrorResult.js.map +0 -1
  215. package/response/abstractions/TaskResponse.js.map +0 -1
  216. package/response/abstractions/index.js.map +0 -1
  217. package/response/index.js.map +0 -1
  218. package/runner/abstractions/TaskControl.js.map +0 -1
  219. package/runner/abstractions/TaskEventValidation.js.map +0 -1
  220. package/runner/abstractions/TaskManager.js.map +0 -1
  221. package/runner/abstractions/TaskManagerStore.js.map +0 -1
  222. package/runner/abstractions/TaskRunner.js.map +0 -1
  223. package/runner/abstractions/index.js.map +0 -1
  224. package/runner/index.js.map +0 -1
  225. package/utils/index.js.map +0 -1
@@ -1,11 +1,12 @@
1
1
  import { createFeature } from "@webiny/feature/api";
2
2
  import { TriggerTaskUseCase } from "./abstractions.js";
3
3
  import { TriggerTaskUseCaseImpl } from "./TriggerTaskUseCase.js";
4
- export const TriggerTaskFeature = createFeature({
5
- name: "TriggerTask",
6
- register(container, context) {
7
- container.registerInstance(TriggerTaskUseCase, new TriggerTaskUseCaseImpl(context));
8
- }
4
+ const TriggerTaskFeature = createFeature({
5
+ name: "TriggerTask",
6
+ register (container, context) {
7
+ container.registerInstance(TriggerTaskUseCase, new TriggerTaskUseCaseImpl(context));
8
+ }
9
9
  });
10
+ export { TriggerTaskFeature };
10
11
 
11
12
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createFeature","TriggerTaskUseCase","TriggerTaskUseCaseImpl","TriggerTaskFeature","name","register","container","context","registerInstance"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TriggerTaskUseCase } from \"./abstractions.js\";\nimport { TriggerTaskUseCaseImpl } from \"~/features/TriggerTask/TriggerTaskUseCase.js\";\nimport type { Context } from \"~/types.js\";\n\nexport const TriggerTaskFeature = createFeature<Context>({\n name: \"TriggerTask\",\n register(container, context) {\n container.registerInstance(TriggerTaskUseCase, new TriggerTaskUseCaseImpl(context!));\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,kBAAkB;AAC3B,SAASC,sBAAsB;AAG/B,OAAO,MAAMC,kBAAkB,GAAGH,aAAa,CAAU;EACrDI,IAAI,EAAE,aAAa;EACnBC,QAAQA,CAACC,SAAS,EAAEC,OAAO,EAAE;IACzBD,SAAS,CAACE,gBAAgB,CAACP,kBAAkB,EAAE,IAAIC,sBAAsB,CAACK,OAAQ,CAAC,CAAC;EACxF;AACJ,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"features/TriggerTask/feature.js","sources":["../../../src/features/TriggerTask/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { TriggerTaskUseCase } from \"./abstractions.js\";\nimport { TriggerTaskUseCaseImpl } from \"~/features/TriggerTask/TriggerTaskUseCase.js\";\nimport type { Context } from \"~/types.js\";\n\nexport const TriggerTaskFeature = createFeature<Context>({\n name: \"TriggerTask\",\n register(container, context) {\n container.registerInstance(TriggerTaskUseCase, new TriggerTaskUseCaseImpl(context!));\n }\n});\n"],"names":["TriggerTaskFeature","createFeature","container","context","TriggerTaskUseCase","TriggerTaskUseCaseImpl"],"mappings":";;;AAKO,MAAMA,qBAAqBC,cAAuB;IACrD,MAAM;IACN,UAASC,SAAS,EAAEC,OAAO;QACvBD,UAAU,gBAAgB,CAACE,oBAAoB,IAAIC,uBAAuBF;IAC9E;AACJ"}
@@ -1,4 +1,2 @@
1
1
  export { TriggerTaskUseCase } from "./abstractions.js";
2
2
  export { TriggerTaskFeature } from "./feature.js";
3
-
4
- //# sourceMappingURL=index.js.map
package/global.js CHANGED
@@ -1,3 +1 @@
1
1
  import "./features/TaskController/augmentation.js";
2
-
3
- //# sourceMappingURL=global.js.map
@@ -1,40 +1,21 @@
1
1
  import { NotAuthorizedError } from "@webiny/api-core/features/security/shared/index.js";
2
-
3
- /**
4
- * @throws
5
- */
6
- export const checkPermissions = async (context, check = {}) => {
7
- const taskPermissions = await context.security.getPermissions("tasks");
8
- const relevant = taskPermissions.filter(current => {
9
- if (check.rwd && !hasRwd(current, check.rwd)) {
10
- return false;
11
- }
12
- return true;
13
- });
14
- if (relevant.length === 0) {
15
- throw new NotAuthorizedError();
16
- }
2
+ const checkPermissions = async (context, check = {})=>{
3
+ const taskPermissions = await context.security.getPermissions("tasks");
4
+ const relevant = taskPermissions.filter((current)=>{
5
+ if (check.rwd && !hasRwd(current, check.rwd)) return false;
6
+ return true;
7
+ });
8
+ if (0 === relevant.length) throw new NotAuthorizedError();
17
9
  };
18
- const hasRwd = (permissions, rwd) => {
19
- if (!Array.isArray(permissions)) {
20
- permissions = [permissions];
21
- }
22
- if (!rwd) {
23
- return true;
24
- }
25
-
26
- // Is there a permission that doesn't restrict RWD permissions, that means all RWD permissions are allowed.
27
- const permissionWithoutRwdRestrictions = permissions.some(permission => {
28
- return typeof permission.rwd !== "string";
29
- });
30
- if (permissionWithoutRwdRestrictions) {
31
- return true;
32
- }
33
-
34
- // If there is no permission that doesn't restrict RWD permissions, that means we need to check if the RWD.
35
- return permissions.some(permission => {
36
- return permission.rwd && permission.rwd.includes(rwd);
37
- });
10
+ const hasRwd = (permissions, rwd)=>{
11
+ if (!Array.isArray(permissions)) permissions = [
12
+ permissions
13
+ ];
14
+ if (!rwd) return true;
15
+ const permissionWithoutRwdRestrictions = permissions.some((permission)=>"string" != typeof permission.rwd);
16
+ if (permissionWithoutRwdRestrictions) return true;
17
+ return permissions.some((permission)=>permission.rwd && permission.rwd.includes(rwd));
38
18
  };
19
+ export { checkPermissions };
39
20
 
40
21
  //# sourceMappingURL=checkPermissions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NotAuthorizedError","checkPermissions","context","check","taskPermissions","security","getPermissions","relevant","filter","current","rwd","hasRwd","length","permissions","Array","isArray","permissionWithoutRwdRestrictions","some","permission","includes"],"sources":["checkPermissions.ts"],"sourcesContent":["import type { Context, TaskPermission } from \"~/types.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\n\n/**\n * @throws\n */\nexport const checkPermissions = async (\n context: Context,\n check: { rwd?: string } = {}\n): Promise<void> => {\n const taskPermissions = await context.security.getPermissions<TaskPermission>(\"tasks\");\n\n const relevant = taskPermissions.filter(current => {\n if (check.rwd && !hasRwd(current, check.rwd)) {\n return false;\n }\n\n return true;\n });\n\n if (relevant.length === 0) {\n throw new NotAuthorizedError();\n }\n};\n\nconst hasRwd = (permissions: TaskPermission | TaskPermission[], rwd: string): boolean => {\n if (!Array.isArray(permissions)) {\n permissions = [permissions];\n }\n\n if (!rwd) {\n return true;\n }\n\n // Is there a permission that doesn't restrict RWD permissions, that means all RWD permissions are allowed.\n const permissionWithoutRwdRestrictions = permissions.some(permission => {\n return typeof permission.rwd !== \"string\";\n });\n\n if (permissionWithoutRwdRestrictions) {\n return true;\n }\n\n // If there is no permission that doesn't restrict RWD permissions, that means we need to check if the RWD.\n return permissions.some(permission => {\n return permission.rwd && permission.rwd.includes(rwd);\n });\n};\n"],"mappings":"AACA,SAASA,kBAAkB,QAAQ,oDAAoD;;AAEvF;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAG,MAAAA,CAC5BC,OAAgB,EAChBC,KAAuB,GAAG,CAAC,CAAC,KACZ;EAChB,MAAMC,eAAe,GAAG,MAAMF,OAAO,CAACG,QAAQ,CAACC,cAAc,CAAiB,OAAO,CAAC;EAEtF,MAAMC,QAAQ,GAAGH,eAAe,CAACI,MAAM,CAACC,OAAO,IAAI;IAC/C,IAAIN,KAAK,CAACO,GAAG,IAAI,CAACC,MAAM,CAACF,OAAO,EAAEN,KAAK,CAACO,GAAG,CAAC,EAAE;MAC1C,OAAO,KAAK;IAChB;IAEA,OAAO,IAAI;EACf,CAAC,CAAC;EAEF,IAAIH,QAAQ,CAACK,MAAM,KAAK,CAAC,EAAE;IACvB,MAAM,IAAIZ,kBAAkB,CAAC,CAAC;EAClC;AACJ,CAAC;AAED,MAAMW,MAAM,GAAGA,CAACE,WAA8C,EAAEH,GAAW,KAAc;EACrF,IAAI,CAACI,KAAK,CAACC,OAAO,CAACF,WAAW,CAAC,EAAE;IAC7BA,WAAW,GAAG,CAACA,WAAW,CAAC;EAC/B;EAEA,IAAI,CAACH,GAAG,EAAE;IACN,OAAO,IAAI;EACf;;EAEA;EACA,MAAMM,gCAAgC,GAAGH,WAAW,CAACI,IAAI,CAACC,UAAU,IAAI;IACpE,OAAO,OAAOA,UAAU,CAACR,GAAG,KAAK,QAAQ;EAC7C,CAAC,CAAC;EAEF,IAAIM,gCAAgC,EAAE;IAClC,OAAO,IAAI;EACf;;EAEA;EACA,OAAOH,WAAW,CAACI,IAAI,CAACC,UAAU,IAAI;IAClC,OAAOA,UAAU,CAACR,GAAG,IAAIQ,UAAU,CAACR,GAAG,CAACS,QAAQ,CAACT,GAAG,CAAC;EACzD,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"graphql/checkPermissions.js","sources":["../../src/graphql/checkPermissions.ts"],"sourcesContent":["import type { Context, TaskPermission } from \"~/types.js\";\nimport { NotAuthorizedError } from \"@webiny/api-core/features/security/shared/index.js\";\n\n/**\n * @throws\n */\nexport const checkPermissions = async (\n context: Context,\n check: { rwd?: string } = {}\n): Promise<void> => {\n const taskPermissions = await context.security.getPermissions<TaskPermission>(\"tasks\");\n\n const relevant = taskPermissions.filter(current => {\n if (check.rwd && !hasRwd(current, check.rwd)) {\n return false;\n }\n\n return true;\n });\n\n if (relevant.length === 0) {\n throw new NotAuthorizedError();\n }\n};\n\nconst hasRwd = (permissions: TaskPermission | TaskPermission[], rwd: string): boolean => {\n if (!Array.isArray(permissions)) {\n permissions = [permissions];\n }\n\n if (!rwd) {\n return true;\n }\n\n // Is there a permission that doesn't restrict RWD permissions, that means all RWD permissions are allowed.\n const permissionWithoutRwdRestrictions = permissions.some(permission => {\n return typeof permission.rwd !== \"string\";\n });\n\n if (permissionWithoutRwdRestrictions) {\n return true;\n }\n\n // If there is no permission that doesn't restrict RWD permissions, that means we need to check if the RWD.\n return permissions.some(permission => {\n return permission.rwd && permission.rwd.includes(rwd);\n });\n};\n"],"names":["checkPermissions","context","check","taskPermissions","relevant","current","hasRwd","NotAuthorizedError","permissions","rwd","Array","permissionWithoutRwdRestrictions","permission"],"mappings":";AAMO,MAAMA,mBAAmB,OAC5BC,SACAC,QAA0B,CAAC,CAAC;IAE5B,MAAMC,kBAAkB,MAAMF,QAAQ,QAAQ,CAAC,cAAc,CAAiB;IAE9E,MAAMG,WAAWD,gBAAgB,MAAM,CAACE,CAAAA;QACpC,IAAIH,MAAM,GAAG,IAAI,CAACI,OAAOD,SAASH,MAAM,GAAG,GACvC,OAAO;QAGX,OAAO;IACX;IAEA,IAAIE,AAAoB,MAApBA,SAAS,MAAM,EACf,MAAM,IAAIG;AAElB;AAEA,MAAMD,SAAS,CAACE,aAAgDC;IAC5D,IAAI,CAACC,MAAM,OAAO,CAACF,cACfA,cAAc;QAACA;KAAY;IAG/B,IAAI,CAACC,KACD,OAAO;IAIX,MAAME,mCAAmCH,YAAY,IAAI,CAACI,CAAAA,aAC/C,AAA0B,YAA1B,OAAOA,WAAW,GAAG;IAGhC,IAAID,kCACA,OAAO;IAIX,OAAOH,YAAY,IAAI,CAACI,CAAAA,aACbA,WAAW,GAAG,IAAIA,WAAW,GAAG,CAAC,QAAQ,CAACH;AAEzD"}
package/graphql/index.js CHANGED
@@ -2,77 +2,70 @@ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
2
  import { renderSortEnum } from "@webiny/api-headless-cms/utils/renderSortEnum.js";
3
3
  import { ContextPlugin } from "@webiny/handler";
4
4
  import { renderListFilterFields } from "@webiny/api-headless-cms/utils/renderListFilterFields.js";
5
- import { createFieldTypePluginRecords } from "@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords.js";
6
5
  import { emptyResolver, resolve, resolveList } from "./utils.js";
7
6
  import { renderFields } from "@webiny/api-headless-cms/utils/renderFields.js";
8
7
  import { checkPermissions } from "./checkPermissions.js";
9
8
  import { ListModelsUseCase } from "@webiny/api-headless-cms/features/contentModel/ListModels/index.js";
10
- const createWebinyBackgroundTaskDefinitionEnum = items => {
11
- if (items.length === 0) {
12
- return "Empty";
13
- }
14
- return items.filter(item => {
15
- return !item.isPrivate;
16
- }).map(definition => definition.id).join("\n");
17
- };
18
- const createGraphQL = () => {
19
- const plugin = new ContextPlugin(async ctx => {
20
- if (!ctx.tenancy.getCurrentTenant()) {
21
- return;
22
- }
23
- const taskModel = await ctx.tasks.getTaskModel();
24
- const logModel = await ctx.tasks.getLogModel();
25
- const listModels = ctx.container.resolve(ListModelsUseCase);
26
- const models = await ctx.security.withoutAuthorization(async () => {
27
- const modelsResult = await listModels.execute({
28
- includePrivate: false
29
- });
30
- return modelsResult.value.filter(model => model.fields.length > 0);
31
- });
32
- const fieldTypePlugins = createFieldTypePluginRecords(ctx.plugins);
33
- const taskFields = renderFields({
34
- models,
35
- model: taskModel,
36
- fields: taskModel.fields,
37
- type: "manage",
38
- fieldTypePlugins
39
- });
40
- const logFields = renderFields({
41
- models,
42
- model: logModel,
43
- fields: logModel.fields.filter(field => field.fieldId !== "task"),
44
- type: "manage",
45
- fieldTypePlugins
46
- });
47
- const listTasksFilterFieldsRender = renderListFilterFields({
48
- model: taskModel,
49
- fields: taskModel.fields,
50
- type: "manage",
51
- fieldTypePlugins,
52
- excludeFields: ["entryId"]
53
- });
54
- const listLogsFilterFieldsRender = renderListFilterFields({
55
- model: logModel,
56
- fields: logModel.fields,
57
- type: "manage",
58
- fieldTypePlugins,
59
- excludeFields: ["entryId"]
60
- });
61
- const sortTasksEnumRender = renderSortEnum({
62
- model: taskModel,
63
- fields: taskModel.fields,
64
- fieldTypePlugins,
65
- sorterPlugins: []
66
- });
67
- const sortLogsEnumRender = renderSortEnum({
68
- model: logModel,
69
- fields: logModel.fields,
70
- fieldTypePlugins,
71
- sorterPlugins: []
72
- });
73
- const taskDefinitions = ctx.tasks.listDefinitions();
74
- const plugin = new GraphQLSchemaPlugin({
75
- typeDefs: /* GraphQL */`
9
+ import { CmsModelFieldToGraphQLRegistry } from "@webiny/api-headless-cms/exports/api/cms/graphql.js";
10
+ const createGraphQL = ()=>{
11
+ const plugin = new ContextPlugin(async (ctx)=>{
12
+ if (!ctx.tenancy.getCurrentTenant()) return;
13
+ const taskModel = await ctx.tasks.getTaskModel();
14
+ const logModel = await ctx.tasks.getLogModel();
15
+ const listModels = ctx.container.resolve(ListModelsUseCase);
16
+ const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);
17
+ const models = await ctx.security.withoutAuthorization(async ()=>{
18
+ const modelsResult = await listModels.execute({
19
+ includePrivate: false
20
+ });
21
+ return modelsResult.value.filter((model)=>model.fields.length > 0);
22
+ });
23
+ const taskFields = renderFields({
24
+ models,
25
+ model: taskModel,
26
+ fields: taskModel.fields,
27
+ type: "manage",
28
+ fieldRegistry
29
+ });
30
+ const logFields = renderFields({
31
+ models,
32
+ model: logModel,
33
+ fields: logModel.fields.filter((field)=>"task" !== field.fieldId),
34
+ type: "manage",
35
+ fieldRegistry
36
+ });
37
+ const listTasksFilterFieldsRender = renderListFilterFields({
38
+ model: taskModel,
39
+ fields: taskModel.fields,
40
+ type: "manage",
41
+ fieldRegistry,
42
+ excludeFields: [
43
+ "entryId"
44
+ ]
45
+ });
46
+ const listLogsFilterFieldsRender = renderListFilterFields({
47
+ model: logModel,
48
+ fields: logModel.fields,
49
+ type: "manage",
50
+ fieldRegistry,
51
+ excludeFields: [
52
+ "entryId"
53
+ ]
54
+ });
55
+ const sortTasksEnumRender = renderSortEnum({
56
+ model: taskModel,
57
+ fields: taskModel.fields,
58
+ fieldRegistry,
59
+ sorters: []
60
+ });
61
+ const sortLogsEnumRender = renderSortEnum({
62
+ model: logModel,
63
+ fields: logModel.fields,
64
+ fieldRegistry,
65
+ sorters: []
66
+ });
67
+ const plugin = new GraphQLSchemaPlugin({
68
+ typeDefs: `
76
69
  type WebinyBackgroundTaskError {
77
70
  message: String
78
71
  code: String
@@ -80,8 +73,8 @@ const createGraphQL = () => {
80
73
  stack: String
81
74
  }
82
75
 
83
- ${taskFields.map(f => f.typeDefs).join("\n")}
84
- ${logFields.map(f => f.typeDefs).join("\n")}
76
+ ${taskFields.map((f)=>f.typeDefs).join("\n")}
77
+ ${logFields.map((f)=>f.typeDefs).join("\n")}
85
78
 
86
79
  type WebinyBackgroundTask {
87
80
  id: String!
@@ -93,7 +86,7 @@ const createGraphQL = () => {
93
86
  limit: Number
94
87
  sort: [WebinyBackgroundTaskLogListSorter!]
95
88
  ): [WebinyBackgroundTaskLog!]!
96
- ${taskFields.map(f => f.fields).join("\n")}
89
+ ${taskFields.map((f)=>f.fields).join("\n")}
97
90
  }
98
91
 
99
92
  type WebinyBackgroundTaskResponse {
@@ -118,7 +111,7 @@ const createGraphQL = () => {
118
111
  createdOn: DateTime!
119
112
  createdBy: WebinyBackgroundTaskIdentity!
120
113
  task: WebinyBackgroundTask!
121
- ${logFields.map(f => f.fields).join("\n")}
114
+ ${logFields.map((f)=>f.fields).join("\n")}
122
115
  }
123
116
 
124
117
  type WebinyBackgroundTaskLogListResponse {
@@ -178,10 +171,6 @@ const createGraphQL = () => {
178
171
  _empty: String
179
172
  }
180
173
 
181
- enum WebinyBackgroundTaskDefinitionEnum {
182
- ${createWebinyBackgroundTaskDefinitionEnum(taskDefinitions)}
183
- }
184
-
185
174
  extend type Query {
186
175
  backgroundTasks: WebinyBackgroundTaskQuery
187
176
  }
@@ -211,138 +200,103 @@ const createGraphQL = () => {
211
200
  }
212
201
 
213
202
  extend type WebinyBackgroundTaskMutation {
214
- triggerTask(definition: WebinyBackgroundTaskDefinitionEnum!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!
203
+ triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!
215
204
  abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!
216
205
  deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!
217
206
  }
218
207
  `,
219
- resolvers: {
220
- Query: {
221
- backgroundTasks: emptyResolver
222
- },
223
- Mutation: {
224
- backgroundTasks: emptyResolver
225
- },
226
- WebinyBackgroundTaskQuery: {
227
- /**
228
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
229
- */
230
- getTask: async (_, args, context) => {
231
- return resolve(async () => {
232
- await checkPermissions(context, {
233
- rwd: "r"
234
- });
235
- return await context.tasks.getTask(args.id);
236
- });
237
- },
238
- listTasks: async (_, args, context) => {
239
- return resolveList(async () => {
240
- await checkPermissions(context, {
241
- rwd: "r"
242
- });
243
- return await context.tasks.listTasks(args);
244
- });
245
- },
246
- listDefinitions: async (_, __, context) => {
247
- return resolve(async () => {
248
- await checkPermissions(context, {
249
- rwd: "r"
250
- });
251
- const result = context.tasks.listDefinitions();
252
- /**
253
- * Do not output private tasks.
254
- */
255
- return result.filter(item => {
256
- return !item.isPrivate;
257
- });
258
- });
259
- },
260
- listLogs: async (_, args, context) => {
261
- return resolveList(async () => {
262
- await checkPermissions(context, {
263
- rwd: "r"
264
- });
265
- return await context.tasks.listLogs(args);
266
- });
267
- }
268
- },
269
- WebinyBackgroundTaskMutation: {
270
- /**
271
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
272
- */
273
- abortTask: async (_, args, context) => {
274
- await checkPermissions(context, {
275
- rwd: "w"
276
- });
277
- return resolve(async () => {
278
- const result = await context.tasks.abort(args);
279
- if (result.isOk()) {
280
- return result.value;
281
- }
282
- throw result.error;
283
- });
284
- },
285
- /**
286
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
287
- */
288
- triggerTask: async (_, args, context) => {
289
- await checkPermissions(context, {
290
- rwd: "w"
291
- });
292
- return resolve(async () => {
293
- const result = await context.tasks.trigger(args);
294
- if (result.isOk()) {
295
- return result.value;
296
- }
297
- throw result.error;
298
- });
299
- },
300
- /**
301
- * We need to think of a way to pass the args type to the resolver without assigning it directly.
302
- */
303
- deleteTask: async (_, args, context) => {
304
- await checkPermissions(context, {
305
- rwd: "d"
306
- });
307
- return resolve(async () => {
308
- return await context.tasks.deleteTask(args.id);
309
- });
310
- }
311
- },
312
- /**
313
- * Custom resolvers for fields
314
- */
315
- WebinyBackgroundTask: {
316
- logs: async (parent, args, context) => {
317
- const {
318
- items
319
- } = await context.tasks.listLogs({
320
- sort: ["createdBy_ASC"],
321
- limit: 10000,
322
- ...args,
323
- where: {
324
- ...args?.where,
325
- task: parent.id
326
- }
327
- });
328
- return items;
329
- }
330
- },
331
- WebinyBackgroundTaskLog: {
332
- task: async (parent, _, context) => {
333
- return await context.tasks.getTask(parent.task);
334
- }
335
- }
336
- }
208
+ resolvers: {
209
+ Query: {
210
+ backgroundTasks: emptyResolver
211
+ },
212
+ Mutation: {
213
+ backgroundTasks: emptyResolver
214
+ },
215
+ WebinyBackgroundTaskQuery: {
216
+ getTask: async (_, args, context)=>resolve(async ()=>{
217
+ await checkPermissions(context, {
218
+ rwd: "r"
219
+ });
220
+ return await context.tasks.getTask(args.id);
221
+ }),
222
+ listTasks: async (_, args, context)=>resolveList(async ()=>{
223
+ await checkPermissions(context, {
224
+ rwd: "r"
225
+ });
226
+ return await context.tasks.listTasks(args);
227
+ }),
228
+ listDefinitions: async (_, __, context)=>resolve(async ()=>{
229
+ await checkPermissions(context, {
230
+ rwd: "r"
231
+ });
232
+ const result = context.tasks.listDefinitions();
233
+ return result.filter((item)=>!item.isPrivate);
234
+ }),
235
+ listLogs: async (_, args, context)=>resolveList(async ()=>{
236
+ await checkPermissions(context, {
237
+ rwd: "r"
238
+ });
239
+ return await context.tasks.listLogs(args);
240
+ })
241
+ },
242
+ WebinyBackgroundTaskMutation: {
243
+ abortTask: async (_, args, context)=>{
244
+ await checkPermissions(context, {
245
+ rwd: "w"
246
+ });
247
+ return resolve(async ()=>{
248
+ const result = await context.tasks.abort(args);
249
+ if (result.isOk()) return result.value;
250
+ throw result.error;
251
+ });
252
+ },
253
+ triggerTask: async (_, args, context)=>{
254
+ await checkPermissions(context, {
255
+ rwd: "w"
256
+ });
257
+ return resolve(async ()=>{
258
+ const result = await context.tasks.trigger(args);
259
+ if (result.isOk()) return result.value;
260
+ throw result.error;
261
+ });
262
+ },
263
+ deleteTask: async (_, args, context)=>{
264
+ await checkPermissions(context, {
265
+ rwd: "d"
266
+ });
267
+ return resolve(async ()=>await context.tasks.deleteTask(args.id));
268
+ }
269
+ },
270
+ WebinyBackgroundTask: {
271
+ logs: async (parent, args, context)=>{
272
+ const { items } = await context.tasks.listLogs({
273
+ sort: [
274
+ "createdBy_ASC"
275
+ ],
276
+ limit: 10000,
277
+ ...args,
278
+ where: {
279
+ ...args?.where,
280
+ task: parent.id
281
+ }
282
+ });
283
+ return items;
284
+ }
285
+ },
286
+ WebinyBackgroundTaskLog: {
287
+ task: async (parent, _, context)=>await context.tasks.getTask(parent.task)
288
+ }
289
+ }
290
+ });
291
+ plugin.name = "tasks.graphql.schema";
292
+ ctx.plugins.register(plugin);
337
293
  });
338
- plugin.name = "tasks.graphql.schema";
339
- ctx.plugins.register(plugin);
340
- });
341
- plugin.name = "tasks.graphql";
342
- return plugin;
343
- };
344
- export const createBackgroundTaskGraphQL = () => {
345
- return [createGraphQL()];
294
+ plugin.name = "tasks.graphql";
295
+ return plugin;
346
296
  };
297
+ const createBackgroundTaskGraphQL = ()=>[
298
+ createGraphQL()
299
+ ];
300
+ export { createBackgroundTaskGraphQL };
347
301
 
348
302
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["GraphQLSchemaPlugin","renderSortEnum","ContextPlugin","renderListFilterFields","createFieldTypePluginRecords","emptyResolver","resolve","resolveList","renderFields","checkPermissions","ListModelsUseCase","createWebinyBackgroundTaskDefinitionEnum","items","length","filter","item","isPrivate","map","definition","id","join","createGraphQL","plugin","ctx","tenancy","getCurrentTenant","taskModel","tasks","getTaskModel","logModel","getLogModel","listModels","container","models","security","withoutAuthorization","modelsResult","execute","includePrivate","value","model","fields","fieldTypePlugins","plugins","taskFields","type","logFields","field","fieldId","listTasksFilterFieldsRender","excludeFields","listLogsFilterFieldsRender","sortTasksEnumRender","sorterPlugins","sortLogsEnumRender","taskDefinitions","listDefinitions","typeDefs","f","allFiltersAsString","resolvers","Query","backgroundTasks","Mutation","WebinyBackgroundTaskQuery","getTask","_","args","context","rwd","listTasks","__","result","listLogs","WebinyBackgroundTaskMutation","abortTask","abort","isOk","error","triggerTask","trigger","deleteTask","WebinyBackgroundTask","logs","parent","sort","limit","where","task","WebinyBackgroundTaskLog","name","register","createBackgroundTaskGraphQL"],"sources":["index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/types.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { createFieldTypePluginRecords } from \"@webiny/api-headless-cms/graphql/schema/createFieldTypePluginRecords.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { TaskDefinition } from \"@webiny/api-core/features/task/TaskDefinition/index.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\nconst createWebinyBackgroundTaskDefinitionEnum = (items: TaskDefinition.Interface[]): string => {\n if (items.length === 0) {\n return \"Empty\";\n }\n return items\n .filter(item => {\n return !item.isPrivate;\n })\n .map(definition => definition.id)\n .join(\"\\n\");\n};\n\nconst createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async ctx => {\n if (!ctx.tenancy.getCurrentTenant()) {\n return;\n }\n\n const taskModel = await ctx.tasks.getTaskModel();\n const logModel = await ctx.tasks.getLogModel();\n\n const listModels = ctx.container.resolve(ListModelsUseCase);\n\n const models = await ctx.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute({ includePrivate: false });\n\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n const fieldTypePlugins = createFieldTypePluginRecords(ctx.plugins);\n\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldTypePlugins\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldTypePlugins\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldTypePlugins,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldTypePlugins,\n sorterPlugins: []\n });\n\n const taskDefinitions = ctx.tasks.listDefinitions();\n\n const plugin = new GraphQLSchemaPlugin<Context>({\n typeDefs: /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n enum WebinyBackgroundTaskDefinitionEnum {\n ${createWebinyBackgroundTaskDefinitionEnum(taskDefinitions)}\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: WebinyBackgroundTaskDefinitionEnum!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n `,\n resolvers: {\n Query: {\n backgroundTasks: emptyResolver\n },\n Mutation: {\n backgroundTasks: emptyResolver\n },\n WebinyBackgroundTaskQuery: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n getTask: async (_, args: IGetTaskQueryParams, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.getTask(args.id);\n });\n },\n listTasks: async (_, args: IListTaskParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listTasks(args);\n });\n },\n listDefinitions: async (_, __, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n const result = context.tasks.listDefinitions();\n /**\n * Do not output private tasks.\n */\n return result.filter(item => {\n return !item.isPrivate;\n });\n });\n },\n listLogs: async (_, args: IListTaskLogParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listLogs(args);\n });\n }\n },\n WebinyBackgroundTaskMutation: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n abortTask: async (_, args: IAbortTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.abort(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n triggerTask: async (_, args: ITriggerTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.trigger(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n deleteTask: async (_, args: IDeleteTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"d\"\n });\n return resolve(async () => {\n return await context.tasks.deleteTask(args.id);\n });\n }\n },\n /**\n * Custom resolvers for fields\n */\n WebinyBackgroundTask: {\n logs: async (parent: ITask, args: IListTaskLogParams, context) => {\n const { items } = await context.tasks.listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n }\n },\n WebinyBackgroundTaskLog: {\n task: async (parent: ITaskLog, _, context) => {\n return await context.tasks.getTask(parent.task);\n }\n }\n }\n });\n\n plugin.name = \"tasks.graphql.schema\";\n\n ctx.plugins.register(plugin);\n });\n\n plugin.name = \"tasks.graphql\";\n\n return plugin;\n};\n\nexport const createBackgroundTaskGraphQL = (): Plugin[] => {\n return [createGraphQL()];\n};\n"],"mappings":"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CAACyC,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACrC,IAAI,CAAC,IAAI,CAAC;AAC5D,kBAAkB0B,SAAS,CAAC7B,GAAG,CAACyC,CAAC,IAAIA,CAAC,CAACD,QAAQ,CAAC,CAACrC,IAAI,CAAC,IAAI,CAAC;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsBwB,UAAU,CAAC3B,GAAG,CAACyC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACrB,IAAI,CAAC,IAAI,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB0B,SAAS,CAAC7B,GAAG,CAACyC,CAAC,IAAIA,CAAC,CAACjB,MAAM,CAAC,CAACrB,IAAI,CAAC,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB6B,2BAA2B,CAACU,kBAAkB,CAAC,CAAC,IAAI,gBAAgB;AAC1F;AACA;AACA;AACA,sBAAsBR,0BAA0B,CAACQ,kBAAkB,CAAC,CAAC,IAAI,gBAAgB;AACzF;AACA;AACA;AACA,sBAAsBP,mBAAmB;AACzC;AACA;AACA;AACA,sBAAsBE,kBAAkB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB3C,wCAAwC,CAAC4C,eAAe,CAAC;AAC/E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;MAC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","ignoreList":[]}
1
+ {"version":3,"file":"graphql/index.js","sources":["../../src/graphql/index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { renderSortEnum } from \"@webiny/api-headless-cms/utils/renderSortEnum.js\";\nimport { ContextPlugin } from \"@webiny/handler\";\nimport type { Context, IListTaskLogParams, IListTaskParams, ITask, ITaskLog } from \"~/types.js\";\nimport { renderListFilterFields } from \"@webiny/api-headless-cms/utils/renderListFilterFields.js\";\nimport { emptyResolver, resolve, resolveList } from \"./utils.js\";\nimport { renderFields } from \"@webiny/api-headless-cms/utils/renderFields.js\";\nimport { checkPermissions } from \"./checkPermissions.js\";\nimport type { Plugin } from \"@webiny/plugins/types.js\";\nimport { ListModelsUseCase } from \"@webiny/api-headless-cms/features/contentModel/ListModels/index.js\";\nimport { CmsModelFieldToGraphQLRegistry } from \"@webiny/api-headless-cms/exports/api/cms/graphql.js\";\n\ninterface IGetTaskQueryParams {\n id: string;\n}\n\ninterface IAbortTaskMutationParams {\n id: string;\n message?: string;\n}\n\ninterface ITriggerTaskMutationParams {\n name?: string;\n definition: string;\n input?: Record<string, any>;\n delay?: number;\n}\n\ninterface IDeleteTaskMutationParams {\n id: string;\n}\n\nconst createGraphQL = () => {\n const plugin = new ContextPlugin<Context>(async ctx => {\n if (!ctx.tenancy.getCurrentTenant()) {\n return;\n }\n\n const taskModel = await ctx.tasks.getTaskModel();\n const logModel = await ctx.tasks.getLogModel();\n\n const listModels = ctx.container.resolve(ListModelsUseCase);\n const fieldRegistry = ctx.container.resolve(CmsModelFieldToGraphQLRegistry);\n\n const models = await ctx.security.withoutAuthorization(async () => {\n const modelsResult = await listModels.execute({ includePrivate: false });\n\n return modelsResult.value.filter(model => model.fields.length > 0);\n });\n const taskFields = renderFields({\n models,\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry\n });\n\n const logFields = renderFields({\n models,\n model: logModel,\n fields: logModel.fields.filter(field => field.fieldId !== \"task\"),\n type: \"manage\",\n fieldRegistry\n });\n\n const listTasksFilterFieldsRender = renderListFilterFields({\n model: taskModel,\n fields: taskModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const listLogsFilterFieldsRender = renderListFilterFields({\n model: logModel,\n fields: logModel.fields,\n type: \"manage\",\n fieldRegistry,\n excludeFields: [\"entryId\"]\n });\n\n const sortTasksEnumRender = renderSortEnum({\n model: taskModel,\n fields: taskModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const sortLogsEnumRender = renderSortEnum({\n model: logModel,\n fields: logModel.fields,\n fieldRegistry,\n sorters: []\n });\n\n const plugin = new GraphQLSchemaPlugin<Context>({\n typeDefs: /* GraphQL */ `\n type WebinyBackgroundTaskError {\n message: String\n code: String\n data: JSON\n stack: String\n }\n\n ${taskFields.map(f => f.typeDefs).join(\"\\n\")}\n ${logFields.map(f => f.typeDefs).join(\"\\n\")}\n\n type WebinyBackgroundTask {\n id: String!\n createdOn: DateTime!\n savedOn: DateTime\n createdBy: WebinyBackgroundTaskIdentity!\n logs(\n where: WebinyBackgroundTaskLogListWhereInput\n limit: Number\n sort: [WebinyBackgroundTaskLogListSorter!]\n ): [WebinyBackgroundTaskLog!]!\n ${taskFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskMeta {\n cursor: String\n hasMoreItems: Boolean!\n totalCount: Int!\n }\n\n type WebinyBackgroundTaskListResponse {\n data: [WebinyBackgroundTask!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskLog {\n id: String!\n createdOn: DateTime!\n createdBy: WebinyBackgroundTaskIdentity!\n task: WebinyBackgroundTask!\n ${logFields.map(f => f.fields).join(\"\\n\")}\n }\n\n type WebinyBackgroundTaskLogListResponse {\n data: [WebinyBackgroundTaskLog!]\n meta: WebinyBackgroundTaskMeta\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDefinition {\n id: String!\n title: String!\n description: String\n }\n\n type WebinyBackgroundTaskListDefinitionsResponse {\n data: [WebinyBackgroundTaskDefinition!]\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskIdentity {\n id: String!\n displayName: String!\n type: String\n }\n\n type WebinyBackgroundTaskTriggerResponse {\n data: WebinyBackgroundTask\n error: WebinyBackgroundTaskError\n }\n\n type WebinyBackgroundTaskDeleteResponse {\n data: Boolean\n error: WebinyBackgroundTaskError\n }\n\n input WebinyBackgroundTaskListWhereInput {\n ${listTasksFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n input WebinyBackgroundTaskLogListWhereInput {\n ${listLogsFilterFieldsRender.allFiltersAsString() || \"_empty: String\"}\n }\n\n enum WebinyBackgroundTaskListSorter {\n ${sortTasksEnumRender}\n }\n\n enum WebinyBackgroundTaskLogListSorter {\n ${sortLogsEnumRender}\n }\n\n type WebinyBackgroundTaskQuery {\n _empty: String\n }\n\n type WebinyBackgroundTaskMutation {\n _empty: String\n }\n\n extend type Query {\n backgroundTasks: WebinyBackgroundTaskQuery\n }\n\n extend type Mutation {\n backgroundTasks: WebinyBackgroundTaskMutation\n }\n\n extend type WebinyBackgroundTaskQuery {\n getTask(id: ID!): WebinyBackgroundTaskResponse!\n listTasks(\n where: WebinyBackgroundTaskListWhereInput\n sort: [WebinyBackgroundTaskListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskListResponse!\n listDefinitions: WebinyBackgroundTaskListDefinitionsResponse!\n\n listLogs(\n where: WebinyBackgroundTaskLogListWhereInput\n sort: [WebinyBackgroundTaskLogListSorter!]\n limit: Int\n after: String\n search: String\n ): WebinyBackgroundTaskLogListResponse!\n }\n\n extend type WebinyBackgroundTaskMutation {\n triggerTask(definition: String!, input: JSON, name: String, delay: Number): WebinyBackgroundTaskTriggerResponse!\n abortTask(id: ID!, message: String): WebinyBackgroundTaskResponse!\n deleteTask(id: ID!): WebinyBackgroundTaskDeleteResponse!\n }\n `,\n resolvers: {\n Query: {\n backgroundTasks: emptyResolver\n },\n Mutation: {\n backgroundTasks: emptyResolver\n },\n WebinyBackgroundTaskQuery: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n getTask: async (_, args: IGetTaskQueryParams, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.getTask(args.id);\n });\n },\n listTasks: async (_, args: IListTaskParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listTasks(args);\n });\n },\n listDefinitions: async (_, __, context) => {\n return resolve(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n const result = context.tasks.listDefinitions();\n /**\n * Do not output private tasks.\n */\n return result.filter(item => {\n return !item.isPrivate;\n });\n });\n },\n listLogs: async (_, args: IListTaskLogParams, context) => {\n return resolveList(async () => {\n await checkPermissions(context, {\n rwd: \"r\"\n });\n return await context.tasks.listLogs(args);\n });\n }\n },\n WebinyBackgroundTaskMutation: {\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n abortTask: async (_, args: IAbortTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.abort(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n triggerTask: async (_, args: ITriggerTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"w\"\n });\n return resolve<ITask>(async () => {\n const result = await context.tasks.trigger(args);\n if (result.isOk()) {\n return result.value;\n }\n\n throw result.error;\n });\n },\n /**\n * We need to think of a way to pass the args type to the resolver without assigning it directly.\n */\n deleteTask: async (_, args: IDeleteTaskMutationParams, context) => {\n await checkPermissions(context, {\n rwd: \"d\"\n });\n return resolve(async () => {\n return await context.tasks.deleteTask(args.id);\n });\n }\n },\n /**\n * Custom resolvers for fields\n */\n WebinyBackgroundTask: {\n logs: async (parent: ITask, args: IListTaskLogParams, context) => {\n const { items } = await context.tasks.listLogs({\n sort: [\"createdBy_ASC\"],\n limit: 10000,\n ...args,\n where: {\n ...args?.where,\n task: parent.id\n }\n });\n return items;\n }\n },\n WebinyBackgroundTaskLog: {\n task: async (parent: ITaskLog, _, context) => {\n return await context.tasks.getTask(parent.task);\n }\n }\n }\n });\n\n plugin.name = \"tasks.graphql.schema\";\n\n ctx.plugins.register(plugin);\n });\n\n plugin.name = \"tasks.graphql\";\n\n return plugin;\n};\n\nexport const createBackgroundTaskGraphQL = (): Plugin[] => {\n return [createGraphQL()];\n};\n"],"names":["createGraphQL","plugin","ContextPlugin","ctx","taskModel","logModel","listModels","ListModelsUseCase","fieldRegistry","CmsModelFieldToGraphQLRegistry","models","modelsResult","model","taskFields","renderFields","logFields","field","listTasksFilterFieldsRender","renderListFilterFields","listLogsFilterFieldsRender","sortTasksEnumRender","renderSortEnum","sortLogsEnumRender","GraphQLSchemaPlugin","f","emptyResolver","_","args","context","resolve","checkPermissions","resolveList","__","result","item","parent","items","createBackgroundTaskGraphQL"],"mappings":"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"}