@webiny/api-headless-cms-scheduler 6.0.0-rc.7 → 6.1.0-beta.0

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 (86) hide show
  1. package/context.js +10 -4
  2. package/context.js.map +1 -1
  3. package/exports/api/cms/scheduler.d.ts +2 -0
  4. package/exports/api/cms/scheduler.js +4 -0
  5. package/exports/api/cms/scheduler.js.map +1 -0
  6. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.d.ts +3 -3
  7. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js +8 -5
  8. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js.map +1 -1
  9. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.d.ts +3 -3
  10. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js +7 -6
  11. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -1
  12. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.d.ts +3 -3
  13. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js +6 -5
  14. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js.map +1 -1
  15. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.d.ts +3 -3
  16. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js +7 -6
  17. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -1
  18. package/features/NamespaceHandler/NamespaceHandler.d.ts +15 -0
  19. package/features/NamespaceHandler/NamespaceHandler.js +50 -0
  20. package/features/NamespaceHandler/NamespaceHandler.js.map +1 -0
  21. package/features/{ScheduleEntryAction/actionHandlers → PublishActionHandler}/PublishEntryActionHandler.d.ts +4 -4
  22. package/features/{ScheduleEntryAction/actionHandlers → PublishActionHandler}/PublishEntryActionHandler.js +7 -2
  23. package/features/PublishActionHandler/PublishEntryActionHandler.js.map +1 -0
  24. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.d.ts +15 -0
  25. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js +51 -0
  26. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js.map +1 -0
  27. package/features/SchedulePublishEntryUseCase/abstractions.d.ts +23 -0
  28. package/features/SchedulePublishEntryUseCase/abstractions.js +5 -0
  29. package/features/SchedulePublishEntryUseCase/abstractions.js.map +1 -0
  30. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.d.ts +15 -0
  31. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js +51 -0
  32. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js.map +1 -0
  33. package/features/ScheduleUnpublishEntryUseCase/abstractions.d.ts +23 -0
  34. package/features/ScheduleUnpublishEntryUseCase/abstractions.js +5 -0
  35. package/features/ScheduleUnpublishEntryUseCase/abstractions.js.map +1 -0
  36. package/features/{ScheduleEntryAction/actionHandlers → UnpublishActionHandler}/UnpublishEntryActionHandler.d.ts +6 -5
  37. package/features/{ScheduleEntryAction/actionHandlers → UnpublishActionHandler}/UnpublishEntryActionHandler.js +7 -2
  38. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js.map +1 -0
  39. package/index.d.ts +2 -6
  40. package/index.js +1 -7
  41. package/index.js.map +1 -1
  42. package/package.json +16 -18
  43. package/types.d.ts +4 -0
  44. package/types.js +3 -0
  45. package/types.js.map +1 -0
  46. package/utils/namespace.d.ts +4 -0
  47. package/utils/namespace.js +12 -0
  48. package/utils/namespace.js.map +1 -0
  49. package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.d.ts +0 -15
  50. package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.js +0 -25
  51. package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.js.map +0 -1
  52. package/features/CancelScheduledEntryAction/abstractions.d.ts +0 -22
  53. package/features/CancelScheduledEntryAction/abstractions.js +0 -11
  54. package/features/CancelScheduledEntryAction/abstractions.js.map +0 -1
  55. package/features/CancelScheduledEntryAction/feature.d.ts +0 -6
  56. package/features/CancelScheduledEntryAction/feature.js +0 -16
  57. package/features/CancelScheduledEntryAction/feature.js.map +0 -1
  58. package/features/CancelScheduledEntryAction/index.d.ts +0 -1
  59. package/features/CancelScheduledEntryAction/index.js +0 -3
  60. package/features/CancelScheduledEntryAction/index.js.map +0 -1
  61. package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.d.ts +0 -27
  62. package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.js +0 -83
  63. package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.js.map +0 -1
  64. package/features/ScheduleEntryAction/abstractions.d.ts +0 -45
  65. package/features/ScheduleEntryAction/abstractions.js +0 -15
  66. package/features/ScheduleEntryAction/abstractions.js.map +0 -1
  67. package/features/ScheduleEntryAction/actionHandlers/PublishEntryActionHandler.js.map +0 -1
  68. package/features/ScheduleEntryAction/actionHandlers/UnpublishEntryActionHandler.js.map +0 -1
  69. package/features/ScheduleEntryAction/feature.d.ts +0 -7
  70. package/features/ScheduleEntryAction/feature.js +0 -21
  71. package/features/ScheduleEntryAction/feature.js.map +0 -1
  72. package/features/ScheduleEntryAction/index.d.ts +0 -1
  73. package/features/ScheduleEntryAction/index.js +0 -3
  74. package/features/ScheduleEntryAction/index.js.map +0 -1
  75. package/graphql/ActionMapper.d.ts +0 -15
  76. package/graphql/ActionMapper.js +0 -18
  77. package/graphql/ActionMapper.js.map +0 -1
  78. package/graphql/dates.d.ts +0 -6
  79. package/graphql/dates.js +0 -9
  80. package/graphql/dates.js.map +0 -1
  81. package/graphql/index.d.ts +0 -3
  82. package/graphql/index.js +0 -246
  83. package/graphql/index.js.map +0 -1
  84. package/graphql/schema.d.ts +0 -162
  85. package/graphql/schema.js +0 -83
  86. package/graphql/schema.js.map +0 -1
package/context.js CHANGED
@@ -1,11 +1,17 @@
1
1
  import { ContextPlugin } from "@webiny/api";
2
- import { ScheduleEntryActionFeature } from "./features/ScheduleEntryAction/feature.js";
3
- import { CancelScheduledEntryActionFeature } from "./features/CancelScheduledEntryAction/feature.js";
4
2
  import { CancelScheduledActionOnEntryChangeFeature } from "./features/CancelScheduledActionOnEntryChange/feature.js";
3
+ import { NamespaceHandler } from "./features/NamespaceHandler/NamespaceHandler.js";
4
+ import { PublishEntryActionHandler } from "./features/PublishActionHandler/PublishEntryActionHandler.js";
5
+ import { UnpublishEntryActionHandler } from "./features/UnpublishActionHandler/UnpublishEntryActionHandler.js";
6
+ import { SchedulePublishEntryUseCase } from "./features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js";
7
+ import { ScheduleUnpublishEntryUseCase } from "./features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js";
5
8
  export const createHeadlessCmsScheduleContext = () => {
6
9
  return new ContextPlugin(async context => {
7
- ScheduleEntryActionFeature.register(context.container);
8
- CancelScheduledEntryActionFeature.register(context.container);
10
+ context.container.register(NamespaceHandler);
11
+ context.container.register(PublishEntryActionHandler);
12
+ context.container.register(UnpublishEntryActionHandler);
13
+ context.container.register(SchedulePublishEntryUseCase);
14
+ context.container.register(ScheduleUnpublishEntryUseCase);
9
15
  CancelScheduledActionOnEntryChangeFeature.register(context.container);
10
16
  });
11
17
  };
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["ContextPlugin","ScheduleEntryActionFeature","CancelScheduledEntryActionFeature","CancelScheduledActionOnEntryChangeFeature","createHeadlessCmsScheduleContext","context","register","container"],"sources":["context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { ScheduleEntryActionFeature } from \"~/features/ScheduleEntryAction/feature.js\";\nimport { CancelScheduledEntryActionFeature } from \"~/features/CancelScheduledEntryAction/feature.js\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\n\nexport const createHeadlessCmsScheduleContext = () => {\n return new ContextPlugin(async context => {\n ScheduleEntryActionFeature.register(context.container);\n CancelScheduledEntryActionFeature.register(context.container);\n CancelScheduledActionOnEntryChangeFeature.register(context.container);\n });\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,0BAA0B;AACnC,SAASC,iCAAiC;AAC1C,SAASC,yCAAyC;AAElD,OAAO,MAAMC,gCAAgC,GAAGA,CAAA,KAAM;EAClD,OAAO,IAAIJ,aAAa,CAAC,MAAMK,OAAO,IAAI;IACtCJ,0BAA0B,CAACK,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IACtDL,iCAAiC,CAACI,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAC7DJ,yCAAyC,CAACG,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;EACzE,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["ContextPlugin","CancelScheduledActionOnEntryChangeFeature","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","createHeadlessCmsScheduleContext","context","container","register"],"sources":["context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\nimport { NamespaceHandler } from \"~/features/NamespaceHandler/NamespaceHandler.js\";\nimport { PublishEntryActionHandler } from \"~/features/PublishActionHandler/PublishEntryActionHandler.js\";\nimport { UnpublishEntryActionHandler } from \"~/features/UnpublishActionHandler/UnpublishEntryActionHandler.js\";\nimport { SchedulePublishEntryUseCase } from \"~/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js\";\nimport { ScheduleUnpublishEntryUseCase } from \"~/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js\";\n\nexport const createHeadlessCmsScheduleContext = () => {\n return new ContextPlugin(async context => {\n context.container.register(NamespaceHandler);\n context.container.register(PublishEntryActionHandler);\n context.container.register(UnpublishEntryActionHandler);\n context.container.register(SchedulePublishEntryUseCase);\n context.container.register(ScheduleUnpublishEntryUseCase);\n\n CancelScheduledActionOnEntryChangeFeature.register(context.container);\n });\n};\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,aAAa;AAC3C,SAASC,yCAAyC;AAClD,SAASC,gBAAgB;AACzB,SAASC,yBAAyB;AAClC,SAASC,2BAA2B;AACpC,SAASC,2BAA2B;AACpC,SAASC,6BAA6B;AAEtC,OAAO,MAAMC,gCAAgC,GAAGA,CAAA,KAAM;EAClD,OAAO,IAAIP,aAAa,CAAC,MAAMQ,OAAO,IAAI;IACtCA,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACR,gBAAgB,CAAC;IAC5CM,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACP,yBAAyB,CAAC;IACrDK,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACN,2BAA2B,CAAC;IACvDI,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACL,2BAA2B,CAAC;IACvDG,OAAO,CAACC,SAAS,CAACC,QAAQ,CAACJ,6BAA6B,CAAC;IAEzDL,yCAAyC,CAACS,QAAQ,CAACF,OAAO,CAACC,SAAS,CAAC;EACzE,CAAC,CAAC;AACN,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ export { SchedulePublishEntryUseCase } from "../../../features/SchedulePublishEntryUseCase/abstractions.js";
2
+ export { ScheduleUnpublishEntryUseCase } from "../../../features/ScheduleUnpublishEntryUseCase/abstractions.js";
@@ -0,0 +1,4 @@
1
+ export { SchedulePublishEntryUseCase } from "../../../features/SchedulePublishEntryUseCase/abstractions.js";
2
+ export { ScheduleUnpublishEntryUseCase } from "../../../features/ScheduleUnpublishEntryUseCase/abstractions.js";
3
+
4
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase"],"sources":["scheduler.ts"],"sourcesContent":["export { SchedulePublishEntryUseCase } from \"~/features/SchedulePublishEntryUseCase/abstractions.js\";\nexport { ScheduleUnpublishEntryUseCase } from \"~/features/ScheduleUnpublishEntryUseCase/abstractions.js\";\n"],"mappings":"AAAA,SAASA,2BAA2B;AACpC,SAASC,6BAA6B","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
- import { ListScheduledActionsUseCase, CancelScheduledActionUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  /**
4
4
  * Cancels scheduled actions when an entry is deleted
5
5
  *
@@ -9,8 +9,8 @@ import { ListScheduledActionsUseCase, CancelScheduledActionUseCase } from "@webi
9
9
  */
10
10
  declare class CancelScheduledActionOnEntryDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
11
  private listScheduledActions;
12
- private cancelScheduledEntryAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface);
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
14
  handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
15
  private listSchedules;
16
16
  }
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
- import { ListScheduledActionsUseCase, CancelScheduledActionUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
3
4
 
4
5
  /**
5
6
  * Cancels scheduled actions when an entry is deleted
@@ -9,9 +10,9 @@ import { ListScheduledActionsUseCase, CancelScheduledActionUseCase } from "@webi
9
10
  * no longer exists.
10
11
  */
11
12
  class CancelScheduledActionOnEntryDeleteHandlerImpl {
12
- constructor(listScheduledActions, cancelScheduledEntryAction) {
13
+ constructor(listScheduledActions, cancelScheduledAction) {
13
14
  this.listScheduledActions = listScheduledActions;
14
- this.cancelScheduledEntryAction = cancelScheduledEntryAction;
15
+ this.cancelScheduledAction = cancelScheduledAction;
15
16
  }
16
17
  async handle(event) {
17
18
  const {
@@ -25,7 +26,7 @@ class CancelScheduledActionOnEntryDeleteHandlerImpl {
25
26
  }
26
27
  const schedules = await this.listSchedules(model.modelId, entry.entryId);
27
28
  for (const action of schedules) {
28
- const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);
29
+ const cancelRes = await this.cancelScheduledAction.execute(action);
29
30
  if (cancelRes.isFail()) {
30
31
  // Silently ignore errors - this is non-critical cleanup.
31
32
  // The entry was deleted successfully, cancelling scheduled actions is best-effort.
@@ -36,7 +37,9 @@ class CancelScheduledActionOnEntryDeleteHandlerImpl {
36
37
  const actionsResult = await this.listScheduledActions.execute({
37
38
  limit: 10000,
38
39
  where: {
39
- namespace: `Cms/Entry/${modelId}`,
40
+ namespace: createNamespace({
41
+ modelId
42
+ }),
40
43
  targetId_startsWith: `${entryId}#`
41
44
  }
42
45
  });
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase","CancelScheduledActionOnEntryDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledEntryAction","handle","event","entry","model","payload","isPrivate","schedules","listSchedules","modelId","entryId","action","cancelRes","execute","id","isFail","actionsResult","limit","where","namespace","targetId_startsWith","value","items","CancelScheduledActionOnEntryDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnEntryDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport { ListScheduledActionsUseCase, CancelScheduledActionUseCase } from \"@webiny/api-scheduler\";\n\n/**\n * Cancels scheduled actions when an entry is deleted\n *\n * When a user deletes an entry, any scheduled publish/unpublish\n * actions for all of its revisions should be canceled since the entry\n * no longer exists.\n */\nclass CancelScheduledActionOnEntryDeleteHandlerImpl\n implements EntryAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const schedules = await this.listSchedules(model.modelId, entry.entryId);\n for (const action of schedules) {\n const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // The entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n\n private async listSchedules(modelId: string, entryId: string) {\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: `Cms/Entry/${modelId}`,\n targetId_startsWith: `${entryId}#`\n }\n });\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SAASC,2BAA2B,EAAEC,4BAA4B,QAAQ,uBAAuB;;AAEjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,6CAA6C,CAEnD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,0BAAkE,EAC5E;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,0BAAkE,GAAlEA,0BAAkE;EAC3E;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,aAAa,CAACJ,KAAK,CAACK,OAAO,EAAEN,KAAK,CAACO,OAAO,CAAC;IACxE,KAAK,MAAMC,MAAM,IAAIJ,SAAS,EAAE;MAC5B,MAAMK,SAAS,GAAG,MAAM,IAAI,CAACZ,0BAA0B,CAACa,OAAO,CAACF,MAAM,CAACG,EAAE,CAAC;MAC1E,IAAIF,SAAS,CAACG,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;EAEA,MAAcP,aAAaA,CAACC,OAAe,EAAEC,OAAe,EAAE;IAC1D,MAAMM,aAAa,GAAG,MAAM,IAAI,CAACjB,oBAAoB,CAACc,OAAO,CAAC;MAC1DI,KAAK,EAAE,KAAK;MACZC,KAAK,EAAE;QACHC,SAAS,EAAE,aAAaV,OAAO,EAAE;QACjCW,mBAAmB,EAAE,GAAGV,OAAO;MACnC;IACJ,CAAC,CAAC;IAEF,OAAOM,aAAa,CAACK,KAAK,CAACC,KAAK;EACpC;AACJ;AAEA,OAAO,MAAMC,8CAA8C,GACvD7B,4BAA4B,CAAC8B,oBAAoB,CAAC;EAC9CC,cAAc,EAAE5B,6CAA6C;EAC7D6B,YAAY,EAAE,CAAC/B,2BAA2B,EAAEC,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["EntryAfterDeleteEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","createNamespace","CancelScheduledActionOnEntryDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","schedules","listSchedules","modelId","entryId","action","cancelRes","execute","isFail","actionsResult","limit","where","namespace","targetId_startsWith","value","items","CancelScheduledActionOnEntryDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnEntryDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry is deleted\n *\n * When a user deletes an entry, any scheduled publish/unpublish\n * actions for all of its revisions should be canceled since the entry\n * no longer exists.\n */\nclass CancelScheduledActionOnEntryDeleteHandlerImpl\n implements EntryAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const schedules = await this.listSchedules(model.modelId, entry.entryId);\n for (const action of schedules) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // The entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n\n private async listSchedules(modelId: string, entryId: string) {\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: createNamespace({ modelId }),\n targetId_startsWith: `${entryId}#`\n }\n });\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SACIC,4BAA4B,EAC5BC,2BAA2B,QACxB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,6CAA6C,CAEnD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,aAAa,CAACJ,KAAK,CAACK,OAAO,EAAEN,KAAK,CAACO,OAAO,CAAC;IACxE,KAAK,MAAMC,MAAM,IAAIJ,SAAS,EAAE;MAC5B,MAAMK,SAAS,GAAG,MAAM,IAAI,CAACZ,qBAAqB,CAACa,OAAO,CAACF,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACE,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;EAEA,MAAcN,aAAaA,CAACC,OAAe,EAAEC,OAAe,EAAE;IAC1D,MAAMK,aAAa,GAAG,MAAM,IAAI,CAAChB,oBAAoB,CAACc,OAAO,CAAC;MAC1DG,KAAK,EAAE,KAAK;MACZC,KAAK,EAAE;QACHC,SAAS,EAAEtB,eAAe,CAAC;UAAEa;QAAQ,CAAC,CAAC;QACvCU,mBAAmB,EAAE,GAAGT,OAAO;MACnC;IACJ,CAAC,CAAC;IAEF,OAAOK,aAAa,CAACK,KAAK,CAACC,KAAK;EACpC;AACJ;AAEA,OAAO,MAAMC,8CAA8C,GACvD7B,4BAA4B,CAAC8B,oBAAoB,CAAC;EAC9CC,cAAc,EAAE3B,6CAA6C;EAC7D4B,YAAY,EAAE,CAAC9B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  /**
4
4
  * Cancels scheduled "publish" when an entry is manually published
5
5
  *
@@ -9,8 +9,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
9
  */
10
10
  declare class CancelScheduledActionOnPublishEventHandlerImpl implements EntryAfterPublishEventHandler.Interface {
11
11
  private listScheduledActions;
12
- private cancelScheduledEntryAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface);
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
14
  handle(event: EntryAfterPublishEventHandler.Event): Promise<void>;
15
15
  }
16
16
  export declare const CancelScheduledActionOnPublishEventHandler: typeof CancelScheduledActionOnPublishEventHandlerImpl & {
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
3
4
 
4
5
  /**
5
6
  * Cancels scheduled "publish" when an entry is manually published
@@ -9,9 +10,9 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
10
  * takes precedence.
10
11
  */
11
12
  class CancelScheduledActionOnPublishEventHandlerImpl {
12
- constructor(listScheduledActions, cancelScheduledEntryAction) {
13
+ constructor(listScheduledActions, cancelScheduledAction) {
13
14
  this.listScheduledActions = listScheduledActions;
14
- this.cancelScheduledEntryAction = cancelScheduledEntryAction;
15
+ this.cancelScheduledAction = cancelScheduledAction;
15
16
  }
16
17
  async handle(event) {
17
18
  const {
@@ -25,14 +26,14 @@ class CancelScheduledActionOnPublishEventHandlerImpl {
25
26
  }
26
27
  const actionsResult = await this.listScheduledActions.execute({
27
28
  where: {
28
- namespace: `Cms/Entry/${model.modelId}`,
29
- actionType: "Publish",
29
+ namespace: createNamespace(model),
30
+ actionType: ScheduledActionTypePublish,
30
31
  targetId: entry.id
31
32
  }
32
33
  });
33
34
  const actions = actionsResult.value.items;
34
35
  for (const action of actions) {
35
- const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);
36
+ const cancelRes = await this.cancelScheduledAction.execute(action);
36
37
  if (cancelRes.isFail()) {
37
38
  // Silently ignore errors - this is non-critical cleanup.
38
39
  // Even if a schedule runs on an already published action, nothing bad will happen.
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterPublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","CancelScheduledActionOnPublishEventHandlerImpl","constructor","listScheduledActions","cancelScheduledEntryAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","modelId","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnPublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnPublishEventHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/events\";\nimport { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from \"@webiny/api-scheduler\";\n\n/**\n * Cancels scheduled \"publish\" when an entry is manually published\n *\n * When a user manually publishes an entry, any scheduled publish\n * action for that entry should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements EntryAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: `Cms/Entry/${model.modelId}`,\n actionType: \"Publish\",\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Even if a schedule runs on an already published action, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPublishEventHandler =\n EntryAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,6BAA6B,QAAQ,oEAAoE;AAClH,SAASC,4BAA4B,EAAEC,2BAA2B,QAAQ,uBAAuB;;AAEjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,8CAA8C,CAEpD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,0BAAkE,EAC5E;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,0BAAkE,GAAlEA,0BAAkE;EAC3E;EAEH,MAAMC,MAAMA,CAACC,KAA0C,EAAiB;IACpE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAE,aAAaN,KAAK,CAACO,OAAO,EAAE;QACvCC,UAAU,EAAE,SAAS;QACrBC,QAAQ,EAAEV,KAAK,CAACW;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGR,aAAa,CAACS,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAACnB,0BAA0B,CAACQ,OAAO,CAACU,MAAM,CAACJ,EAAE,CAAC;MAC1E,IAAIK,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,0CAA0C,GACnD3B,6BAA6B,CAAC4B,oBAAoB,CAAC;EAC/CC,cAAc,EAAE1B,8CAA8C;EAC9D2B,YAAY,EAAE,CAAC5B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["EntryAfterPublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","ScheduledActionTypePublish","createNamespace","CancelScheduledActionOnPublishEventHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnPublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnPublishEventHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled \"publish\" when an entry is manually published\n *\n * When a user manually publishes an entry, any scheduled publish\n * action for that entry should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements EntryAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Even if a schedule runs on an already published action, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPublishEventHandler =\n EntryAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,6BAA6B,QAAQ,oEAAoE;AAClH,SACIC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,0BAA0B,QACvB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,8CAA8C,CAEpD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAA0C,EAAiB;IACpE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,UAAU,EAAEhB,0BAA0B;QACtCiB,QAAQ,EAAET,KAAK,CAACU;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGP,aAAa,CAACQ,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAAClB,qBAAqB,CAACQ,OAAO,CAACS,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,0CAA0C,GACnD5B,6BAA6B,CAAC6B,oBAAoB,CAAC;EAC/CC,cAAc,EAAEzB,8CAA8C;EAC9D0B,YAAY,EAAE,CAAC7B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  /**
4
4
  * Cancels scheduled actions when an entry revision is deleted
5
5
  *
@@ -9,8 +9,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
9
  */
10
10
  declare class CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
11
  private listScheduledActions;
12
- private cancelScheduledEntryAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface);
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
14
  handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
15
  }
16
16
  export declare const CancelScheduledActionOnRevisionDeleteEventHandler: typeof CancelScheduledActionOnDeleteHandlerImpl & {
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
3
4
 
4
5
  /**
5
6
  * Cancels scheduled actions when an entry revision is deleted
@@ -9,9 +10,9 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
10
  * no longer exists.
10
11
  */
11
12
  class CancelScheduledActionOnDeleteHandlerImpl {
12
- constructor(listScheduledActions, cancelScheduledEntryAction) {
13
+ constructor(listScheduledActions, cancelScheduledAction) {
13
14
  this.listScheduledActions = listScheduledActions;
14
- this.cancelScheduledEntryAction = cancelScheduledEntryAction;
15
+ this.cancelScheduledAction = cancelScheduledAction;
15
16
  }
16
17
  async handle(event) {
17
18
  const {
@@ -25,13 +26,13 @@ class CancelScheduledActionOnDeleteHandlerImpl {
25
26
  }
26
27
  const actionsResult = await this.listScheduledActions.execute({
27
28
  where: {
28
- namespace: `Cms/Entry/${model.modelId}`,
29
+ namespace: createNamespace(model),
29
30
  targetId: entry.id
30
31
  }
31
32
  });
32
33
  const actions = actionsResult.value.items;
33
34
  for (const action of actions) {
34
- const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);
35
+ const cancelRes = await this.cancelScheduledAction.execute(action);
35
36
  if (cancelRes.isFail()) {
36
37
  // Silently ignore errors - this is non-critical cleanup.
37
38
  // Entry was deleted successfully, cancelling scheduled actions is best-effort.
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterDeleteEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","CancelScheduledActionOnDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledEntryAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","modelId","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnRevisionDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnRevisionDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from \"@webiny/api-scheduler\";\n\n/**\n * Cancels scheduled actions when an entry revision is deleted\n *\n * When a user deletes an entry revision, any scheduled publish/unpublish\n * action for that revision should be canceled since the revision\n * no longer exists.\n */\nclass CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: `Cms/Entry/${model.modelId}`,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRevisionDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SAASC,4BAA4B,EAAEC,2BAA2B,QAAQ,uBAAuB;;AAEjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wCAAwC,CAAmD;EAC7FC,WAAWA,CACCC,oBAA2D,EAC3DC,0BAAkE,EAC5E;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,0BAAkE,GAAlEA,0BAAkE;EAC3E;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAE,aAAaN,KAAK,CAACO,OAAO,EAAE;QACvCC,QAAQ,EAAET,KAAK,CAACU;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGP,aAAa,CAACQ,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAAClB,0BAA0B,CAACQ,OAAO,CAACS,MAAM,CAACJ,EAAE,CAAC;MAC1E,IAAIK,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,iDAAiD,GAC1D1B,4BAA4B,CAAC2B,oBAAoB,CAAC;EAC9CC,cAAc,EAAEzB,wCAAwC;EACxD0B,YAAY,EAAE,CAAC3B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["EntryAfterDeleteEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","createNamespace","CancelScheduledActionOnDeleteHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnRevisionDeleteEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnRevisionDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry revision is deleted\n *\n * When a user deletes an entry revision, any scheduled publish/unpublish\n * action for that revision should be canceled since the revision\n * no longer exists.\n */\nclass CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRevisionDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,mEAAmE;AAChH,SACIC,4BAA4B,EAC5BC,2BAA2B,QACxB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,wCAAwC,CAAmD;EAC7FC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAAyC,EAAiB;IACnE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,QAAQ,EAAER,KAAK,CAACS;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGN,aAAa,CAACO,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAACjB,qBAAqB,CAACQ,OAAO,CAACQ,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,iDAAiD,GAC1D1B,4BAA4B,CAAC2B,oBAAoB,CAAC;EAC9CC,cAAc,EAAExB,wCAAwC;EACxDyB,YAAY,EAAE,CAAC3B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
3
  /**
4
4
  * Cancels scheduled action when an entry is manually unpublished
5
5
  *
@@ -9,8 +9,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
9
  */
10
10
  declare class CancelScheduledActionOnUnpublishHandlerImpl implements EntryAfterUnpublishEventHandler.Interface {
11
11
  private listScheduledActions;
12
- private cancelScheduledEntryAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface);
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
14
  handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void>;
15
15
  }
16
16
  export declare const CancelScheduledActionOnUnpublishEventHandler: typeof CancelScheduledActionOnUnpublishHandlerImpl & {
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
- import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypeUnpublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
3
4
 
4
5
  /**
5
6
  * Cancels scheduled action when an entry is manually unpublished
@@ -9,9 +10,9 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
9
10
  * takes precedence.
10
11
  */
11
12
  class CancelScheduledActionOnUnpublishHandlerImpl {
12
- constructor(listScheduledActions, cancelScheduledEntryAction) {
13
+ constructor(listScheduledActions, cancelScheduledAction) {
13
14
  this.listScheduledActions = listScheduledActions;
14
- this.cancelScheduledEntryAction = cancelScheduledEntryAction;
15
+ this.cancelScheduledAction = cancelScheduledAction;
15
16
  }
16
17
  async handle(event) {
17
18
  const {
@@ -25,14 +26,14 @@ class CancelScheduledActionOnUnpublishHandlerImpl {
25
26
  }
26
27
  const actionsResult = await this.listScheduledActions.execute({
27
28
  where: {
28
- namespace: `Cms/Entry/${model.modelId}`,
29
- actionType: "Unpublish",
29
+ namespace: createNamespace(model),
30
+ actionType: ScheduledActionTypeUnpublish,
30
31
  targetId: entry.id
31
32
  }
32
33
  });
33
34
  const actions = actionsResult.value.items;
34
35
  for (const action of actions) {
35
- const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);
36
+ const cancelRes = await this.cancelScheduledAction.execute(action);
36
37
  if (cancelRes.isFail()) {
37
38
  // Silently ignore errors - this is non-critical cleanup.
38
39
  // Entry was unpublished successfully, cancelling scheduled actions is best-effort.
@@ -1 +1 @@
1
- {"version":3,"names":["EntryAfterUnpublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","CancelScheduledActionOnUnpublishHandlerImpl","constructor","listScheduledActions","cancelScheduledEntryAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","modelId","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnUnpublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnUnpublishEventHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events\";\nimport { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from \"@webiny/api-scheduler\";\n\n/**\n * Cancels scheduled action when an entry is manually unpublished\n *\n * When a user manually unpublishes an entry revision, any scheduled unpublish\n * action for that revision should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements EntryAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledEntryAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: `Cms/Entry/${model.modelId}`,\n actionType: \"Unpublish\",\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledEntryAction.execute(action.id);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnUnpublishEventHandler =\n EntryAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,sEAAsE;AACtH,SAASC,4BAA4B,EAAEC,2BAA2B,QAAQ,uBAAuB;;AAEjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,2CAA2C,CAEjD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,0BAAkE,EAC5E;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,0BAAkE,GAAlEA,0BAAkE;EAC3E;EAEH,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAE,aAAaN,KAAK,CAACO,OAAO,EAAE;QACvCC,UAAU,EAAE,WAAW;QACvBC,QAAQ,EAAEV,KAAK,CAACW;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGR,aAAa,CAACS,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAACnB,0BAA0B,CAACQ,OAAO,CAACU,MAAM,CAACJ,EAAE,CAAC;MAC1E,IAAIK,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,4CAA4C,GACrD3B,+BAA+B,CAAC4B,oBAAoB,CAAC;EACjDC,cAAc,EAAE1B,2CAA2C;EAC3D2B,YAAY,EAAE,CAAC5B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["EntryAfterUnpublishEventHandler","CancelScheduledActionUseCase","ListScheduledActionsUseCase","ScheduledActionTypeUnpublish","createNamespace","CancelScheduledActionOnUnpublishHandlerImpl","constructor","listScheduledActions","cancelScheduledAction","handle","event","entry","model","payload","isPrivate","actionsResult","execute","where","namespace","actionType","targetId","id","actions","value","items","action","cancelRes","isFail","CancelScheduledActionOnUnpublishEventHandler","createImplementation","implementation","dependencies"],"sources":["CancelScheduledActionOnUnpublishEventHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled action when an entry is manually unpublished\n *\n * When a user manually unpublishes an entry revision, any scheduled unpublish\n * action for that revision should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements EntryAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnUnpublishEventHandler =\n EntryAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"mappings":"AAAA,SAASA,+BAA+B,QAAQ,sEAAsE;AACtH,SACIC,4BAA4B,EAC5BC,2BAA2B,EAC3BC,4BAA4B,QACzB,gDAAgD;AACvD,SAASC,eAAe;;AAExB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,2CAA2C,CAEjD;EACIC,WAAWA,CACCC,oBAA2D,EAC3DC,qBAA6D,EACvE;IAAA,KAFUD,oBAA2D,GAA3DA,oBAA2D;IAAA,KAC3DC,qBAA6D,GAA7DA,qBAA6D;EACtE;EAEH,MAAMC,MAAMA,CAACC,KAA4C,EAAiB;IACtE,MAAM;MAAEC,KAAK;MAAEC;IAAM,CAAC,GAAGF,KAAK,CAACG,OAAO;;IAEtC;IACA,IAAID,KAAK,CAACE,SAAS,EAAE;MACjB;IACJ;IAEA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACR,oBAAoB,CAACS,OAAO,CAAC;MAC1DC,KAAK,EAAE;QACHC,SAAS,EAAEd,eAAe,CAACQ,KAAK,CAAC;QACjCO,UAAU,EAAEhB,4BAA4B;QACxCiB,QAAQ,EAAET,KAAK,CAACU;MACpB;IACJ,CAAC,CAAC;IAEF,MAAMC,OAAO,GAAGP,aAAa,CAACQ,KAAK,CAACC,KAAK;IAEzC,KAAK,MAAMC,MAAM,IAAIH,OAAO,EAAE;MAC1B,MAAMI,SAAS,GAAG,MAAM,IAAI,CAAClB,qBAAqB,CAACQ,OAAO,CAACS,MAAM,CAAC;MAClE,IAAIC,SAAS,CAACC,MAAM,CAAC,CAAC,EAAE;QACpB;QACA;MAAA;IAER;EACJ;AACJ;AAEA,OAAO,MAAMC,4CAA4C,GACrD5B,+BAA+B,CAAC6B,oBAAoB,CAAC;EACjDC,cAAc,EAAEzB,2CAA2C;EAC3D0B,YAAY,EAAE,CAAC7B,2BAA2B,EAAED,4BAA4B;AAC5E,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
4
+ import type { GenericRecord } from "@webiny/api/types.js";
5
+ declare class NamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {
6
+ private getModelUseCase;
7
+ private getEntryByIdUseCase;
8
+ constructor(getModelUseCase: GetModelUseCase.Interface, getEntryByIdUseCase: GetEntryByIdUseCase.Interface);
9
+ canHandle(namespace: string): boolean;
10
+ execute(params: NamespaceHandlerAbstraction.Params): NamespaceHandlerAbstraction.Response<GenericRecord>;
11
+ }
12
+ export declare const NamespaceHandler: typeof NamespaceHandlerImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/features/NamespaceHandler/abstractions").INamespaceHandler<GenericRecord>>;
14
+ };
15
+ export {};
@@ -0,0 +1,50 @@
1
+ import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { extractModelIdFromNamespace } from "../../utils/namespace.js";
3
+ import { Result } from "@webiny/feature/exports/api.js";
4
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
6
+ class NamespaceHandlerImpl {
7
+ constructor(getModelUseCase, getEntryByIdUseCase) {
8
+ this.getModelUseCase = getModelUseCase;
9
+ this.getEntryByIdUseCase = getEntryByIdUseCase;
10
+ }
11
+ canHandle(namespace) {
12
+ const modelId = extractModelIdFromNamespace(namespace);
13
+ return !!modelId;
14
+ }
15
+ async execute(params) {
16
+ /**
17
+ * We know that modelId is ok because of the canHandle() method, which is always called before execute() and must return true for this handler to be executed.
18
+ */
19
+ const modelId = extractModelIdFromNamespace(params.namespace);
20
+ // Fetch the target model
21
+ const modelResult = await this.getModelUseCase.execute(modelId);
22
+ if (modelResult.isFail()) {
23
+ return Result.fail(modelResult.error);
24
+ }
25
+ const model = modelResult.value;
26
+
27
+ // Fetch entry to get title
28
+ const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);
29
+ if (entryResult.isFail()) {
30
+ return Result.fail(entryResult.error);
31
+ }
32
+ const entry = entryResult.value;
33
+ const title = entry.values[model.titleFieldId] || "Unknown entry title";
34
+ return Result.ok({
35
+ namespace: params.namespace,
36
+ title,
37
+ modelId,
38
+ actionType: params.actionType,
39
+ targetId: params.targetId,
40
+ scheduleId: params.scheduleId,
41
+ immediately: params.immediately || false
42
+ });
43
+ }
44
+ }
45
+ export const NamespaceHandler = NamespaceHandlerAbstraction.createImplementation({
46
+ implementation: NamespaceHandlerImpl,
47
+ dependencies: [GetModelUseCase, GetEntryByIdUseCase]
48
+ });
49
+
50
+ //# sourceMappingURL=NamespaceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NamespaceHandler","NamespaceHandlerAbstraction","extractModelIdFromNamespace","Result","GetModelUseCase","GetEntryByIdUseCase","NamespaceHandlerImpl","constructor","getModelUseCase","getEntryByIdUseCase","canHandle","namespace","modelId","execute","params","modelResult","isFail","fail","error","model","value","entryResult","targetId","entry","title","values","titleFieldId","ok","actionType","scheduleId","immediately","createImplementation","implementation","dependencies"],"sources":["NamespaceHandler.ts"],"sourcesContent":["import { NamespaceHandler as NamespaceHandlerAbstraction } from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { extractModelIdFromNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nclass NamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {\n public constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface\n ) {}\n\n public canHandle(namespace: string): boolean {\n const modelId = extractModelIdFromNamespace(namespace);\n\n return !!modelId;\n }\n\n public async execute(\n params: NamespaceHandlerAbstraction.Params\n ): NamespaceHandlerAbstraction.Response<GenericRecord> {\n /**\n * We know that modelId is ok because of the canHandle() method, which is always called before execute() and must return true for this handler to be executed.\n */\n const modelId = extractModelIdFromNamespace(params.namespace)!;\n // Fetch the target model\n const modelResult = await this.getModelUseCase.execute(modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n\n const model = modelResult.value;\n\n // Fetch entry to get title\n const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);\n if (entryResult.isFail()) {\n return Result.fail(entryResult.error as any);\n }\n\n const entry = entryResult.value;\n const title = entry.values[model.titleFieldId] || \"Unknown entry title\";\n\n return Result.ok({\n namespace: params.namespace,\n title,\n modelId,\n actionType: params.actionType,\n targetId: params.targetId,\n scheduleId: params.scheduleId,\n immediately: params.immediately || false\n });\n }\n}\n\nexport const NamespaceHandler = NamespaceHandlerAbstraction.createImplementation({\n implementation: NamespaceHandlerImpl,\n dependencies: [GetModelUseCase, GetEntryByIdUseCase]\n});\n"],"mappings":"AAAA,SAASA,gBAAgB,IAAIC,2BAA2B,QAAQ,gDAAgD;AAChH,SAASC,2BAA2B;AACpC,SAASC,MAAM,QAAQ,gCAAgC;AACvD,SAASC,eAAe,QAAQ,kEAAkE;AAClG,SAASC,mBAAmB,QAAQ,sEAAsE;AAG1G,MAAMC,oBAAoB,CAAiE;EAChFC,WAAWA,CACNC,eAA0C,EAC1CC,mBAAkD,EAC5D;IAAA,KAFUD,eAA0C,GAA1CA,eAA0C;IAAA,KAC1CC,mBAAkD,GAAlDA,mBAAkD;EAC3D;EAEIC,SAASA,CAACC,SAAiB,EAAW;IACzC,MAAMC,OAAO,GAAGV,2BAA2B,CAACS,SAAS,CAAC;IAEtD,OAAO,CAAC,CAACC,OAAO;EACpB;EAEA,MAAaC,OAAOA,CAChBC,MAA0C,EACS;IACnD;AACR;AACA;IACQ,MAAMF,OAAO,GAAGV,2BAA2B,CAACY,MAAM,CAACH,SAAS,CAAE;IAC9D;IACA,MAAMI,WAAW,GAAG,MAAM,IAAI,CAACP,eAAe,CAACK,OAAO,CAACD,OAAO,CAAC;IAC/D,IAAIG,WAAW,CAACC,MAAM,CAAC,CAAC,EAAE;MACtB,OAAOb,MAAM,CAACc,IAAI,CAACF,WAAW,CAACG,KAAY,CAAC;IAChD;IAEA,MAAMC,KAAK,GAAGJ,WAAW,CAACK,KAAK;;IAE/B;IACA,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACZ,mBAAmB,CAACI,OAAO,CAACM,KAAK,EAAEL,MAAM,CAACQ,QAAQ,CAAC;IAClF,IAAID,WAAW,CAACL,MAAM,CAAC,CAAC,EAAE;MACtB,OAAOb,MAAM,CAACc,IAAI,CAACI,WAAW,CAACH,KAAY,CAAC;IAChD;IAEA,MAAMK,KAAK,GAAGF,WAAW,CAACD,KAAK;IAC/B,MAAMI,KAAK,GAAGD,KAAK,CAACE,MAAM,CAACN,KAAK,CAACO,YAAY,CAAC,IAAI,qBAAqB;IAEvE,OAAOvB,MAAM,CAACwB,EAAE,CAAC;MACbhB,SAAS,EAAEG,MAAM,CAACH,SAAS;MAC3Ba,KAAK;MACLZ,OAAO;MACPgB,UAAU,EAAEd,MAAM,CAACc,UAAU;MAC7BN,QAAQ,EAAER,MAAM,CAACQ,QAAQ;MACzBO,UAAU,EAAEf,MAAM,CAACe,UAAU;MAC7BC,WAAW,EAAEhB,MAAM,CAACgB,WAAW,IAAI;IACvC,CAAC,CAAC;EACN;AACJ;AAEA,OAAO,MAAM9B,gBAAgB,GAAGC,2BAA2B,CAAC8B,oBAAoB,CAAC;EAC7EC,cAAc,EAAE1B,oBAAoB;EACpC2B,YAAY,EAAE,CAAC7B,eAAe,EAAEC,mBAAmB;AACvD,CAAC,CAAC","ignoreList":[]}
@@ -1,12 +1,12 @@
1
- import { ScheduledActionHandler } from "@webiny/api-scheduler";
1
+ import { ScheduledActionHandler, ScheduledActionType, type IScheduledAction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
2
  import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
3
3
  import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
4
4
  import { GetPublishedEntriesByIdsUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds";
5
5
  import { PublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry";
6
6
  import { UnpublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry";
7
7
  import { RepublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/RepublishEntry";
8
- import type { IScheduleActionWithPayload } from "../../../features/ScheduleEntryAction/index.js";
9
8
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
9
+ import type { IScheduledActionPayload } from "../../types.js";
10
10
  /**
11
11
  * Handler for publishing CMS entries
12
12
  *
@@ -26,8 +26,8 @@ declare class PublishEntryActionHandlerImpl implements ScheduledActionHandler.In
26
26
  private republishEntryUseCase;
27
27
  private identityContext;
28
28
  constructor(getModelUseCase: GetModelUseCase.Interface, getEntryByIdUseCase: GetEntryByIdUseCase.Interface, getPublishedEntriesByIdsUseCase: GetPublishedEntriesByIdsUseCase.Interface, publishEntryUseCase: PublishEntryUseCase.Interface, unpublishEntryUseCase: UnpublishEntryUseCase.Interface, republishEntryUseCase: RepublishEntryUseCase.Interface, identityContext: IdentityContext.Interface);
29
- canHandle(namespace: string, actionType: string): boolean;
30
- handle(action: IScheduleActionWithPayload): Promise<void>;
29
+ canHandle(namespace: string, actionType: ScheduledActionType): boolean;
30
+ handle(action: IScheduledAction<IScheduledActionPayload>): Promise<void>;
31
31
  }
32
32
  export declare const PublishEntryActionHandler: typeof PublishEntryActionHandlerImpl & {
33
33
  __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/shared/abstractions").IScheduledActionHandler>;
@@ -1,4 +1,4 @@
1
- import { ScheduledActionHandler } from "@webiny/api-scheduler";
1
+ import { ScheduledActionHandler, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
2
  import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
3
3
  import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
4
4
  import { GetPublishedEntriesByIdsUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds";
@@ -6,6 +6,7 @@ import { PublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEn
6
6
  import { UnpublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry";
7
7
  import { RepublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/RepublishEntry";
8
8
  import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
9
+ import { extractModelIdFromNamespace } from "../../utils/namespace.js";
9
10
 
10
11
  /**
11
12
  * Handler for publishing CMS entries
@@ -28,7 +29,11 @@ class PublishEntryActionHandlerImpl {
28
29
  this.identityContext = identityContext;
29
30
  }
30
31
  canHandle(namespace, actionType) {
31
- return namespace.startsWith("Cms/Entry/") && actionType === "Publish";
32
+ const modelId = extractModelIdFromNamespace(namespace);
33
+ if (!modelId) {
34
+ return false;
35
+ }
36
+ return actionType === ScheduledActionTypePublish;
32
37
  }
33
38
  async handle(action) {
34
39
  const {
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ScheduledActionHandler","ScheduledActionTypePublish","GetModelUseCase","GetEntryByIdUseCase","GetPublishedEntriesByIdsUseCase","PublishEntryUseCase","UnpublishEntryUseCase","RepublishEntryUseCase","IdentityContext","extractModelIdFromNamespace","PublishEntryActionHandlerImpl","constructor","getModelUseCase","getEntryByIdUseCase","getPublishedEntriesByIdsUseCase","publishEntryUseCase","unpublishEntryUseCase","republishEntryUseCase","identityContext","canHandle","namespace","actionType","modelId","handle","action","payload","modelResult","execute","isFail","console","error","identity","getIdentity","Error","model","value","targetEntryResult","targetId","targetEntry","publishedEntriesResult","id","publishedTargetEntry","publishResult","republishResult","unpublishResult","PublishEntryActionHandler","createImplementation","implementation","dependencies"],"sources":["PublishEntryActionHandler.ts"],"sourcesContent":["import {\n ScheduledActionHandler,\n ScheduledActionType,\n type IScheduledAction,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { GetPublishedEntriesByIdsUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds\";\nimport { PublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry\";\nimport { UnpublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry\";\nimport { RepublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/RepublishEntry\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\nimport type { IScheduledActionPayload } from \"~/types.js\";\nimport { extractModelIdFromNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Handler for publishing CMS entries\n *\n * Handles the \"Publish\" action for CMS entries with namespace pattern: Cms/Entry/{modelId}\n *\n * Publishing logic:\n * 1. If entry is not published -> publish it\n * 2. If the same revision is already published -> republish it\n * 3. If a different revision is published -> unpublish old, publish new\n */\nclass PublishEntryActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface,\n private getPublishedEntriesByIdsUseCase: GetPublishedEntriesByIdsUseCase.Interface,\n private publishEntryUseCase: PublishEntryUseCase.Interface,\n private unpublishEntryUseCase: UnpublishEntryUseCase.Interface,\n private republishEntryUseCase: RepublishEntryUseCase.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n public canHandle(namespace: string, actionType: ScheduledActionType): boolean {\n const modelId = extractModelIdFromNamespace(namespace);\n if (!modelId) {\n return false;\n }\n return actionType === ScheduledActionTypePublish;\n }\n\n public async handle(action: IScheduledAction<IScheduledActionPayload>): Promise<void> {\n const { payload } = action;\n\n const modelId = payload.modelId;\n\n // Fetch the model\n const modelResult = await this.getModelUseCase.execute(modelId);\n if (modelResult.isFail()) {\n console.error(\n `Failed to get model \"${modelId}\" for scheduled publish action:`,\n modelResult.error,\n {\n identity: this.identityContext.getIdentity()\n }\n );\n throw new Error(`Model not found: ${modelId}`);\n }\n\n const model = modelResult.value;\n\n // Fetch the target entry\n const targetEntryResult = await this.getEntryByIdUseCase.execute<\n IScheduledAction<IScheduledActionPayload>\n >(model, action.targetId);\n if (targetEntryResult.isFail()) {\n console.error(\n `Failed to get entry \"${action.targetId}\" for scheduled publish action:`,\n targetEntryResult.error\n );\n throw new Error(`Entry not found: ${action.targetId}`);\n }\n\n const targetEntry = targetEntryResult.value;\n\n // Get published entries\n const publishedEntriesResult = await this.getPublishedEntriesByIdsUseCase.execute<\n IScheduledAction<IScheduledActionPayload>\n >(model, [targetEntry.id]);\n\n if (publishedEntriesResult.isFail()) {\n console.error(\n `Failed to get published entries for \"${targetEntry.id}\":`,\n publishedEntriesResult.error\n );\n throw new Error(`Failed to check published entries`);\n }\n\n const [publishedTargetEntry] = publishedEntriesResult.value;\n\n /**\n * Scenario 1: Entry has no published revision -> publish it\n */\n if (!publishedTargetEntry) {\n const publishResult = await this.publishEntryUseCase.execute<\n IScheduledAction<IScheduledActionPayload>\n >(model, targetEntry.id);\n if (publishResult.isFail()) {\n console.error(`Failed to publish entry \"${action.targetId}\":`, publishResult.error);\n throw new Error(`Failed to publish entry: ${action.targetId}`);\n }\n return;\n }\n\n /**\n * Scenario 2: Target entry is already published (same revision) -> republish it\n */\n if (publishedTargetEntry.id === targetEntry.id) {\n const republishResult = await this.republishEntryUseCase.execute(model, targetEntry.id);\n if (republishResult.isFail()) {\n console.error(\n `Failed to republish entry \"${action.targetId}\":`,\n republishResult.error\n );\n throw new Error(`Failed to republish entry: ${action.targetId}`);\n }\n return;\n }\n\n /**\n * Scenario 3: A different revision is published -> unpublish old, publish new\n */\n const unpublishResult = await this.unpublishEntryUseCase.execute<\n IScheduledAction<IScheduledActionPayload>\n >(model, publishedTargetEntry.id);\n if (unpublishResult.isFail()) {\n console.error(\n `Failed to unpublish old revision \"${publishedTargetEntry.id}\":`,\n unpublishResult.error\n );\n throw new Error(`Failed to unpublish old revision: ${publishedTargetEntry.id}`);\n }\n\n const publishResult = await this.publishEntryUseCase.execute<\n IScheduledAction<IScheduledActionPayload>\n >(model, targetEntry.id);\n if (publishResult.isFail()) {\n console.error(`Failed to publish entry \"${action.targetId}\":`, publishResult.error);\n throw new Error(`Failed to publish entry: ${action.targetId}`);\n }\n }\n}\n\nexport const PublishEntryActionHandler = ScheduledActionHandler.createImplementation({\n implementation: PublishEntryActionHandlerImpl,\n dependencies: [\n GetModelUseCase,\n GetEntryByIdUseCase,\n GetPublishedEntriesByIdsUseCase,\n PublishEntryUseCase,\n UnpublishEntryUseCase,\n RepublishEntryUseCase,\n IdentityContext\n ]\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ import { SchedulePublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { ScheduleActionUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
4
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
+ declare class SchedulePublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {
6
+ private scheduleAction;
7
+ private accessControl;
8
+ private getModelUseCase;
9
+ constructor(scheduleAction: ScheduleActionUseCase.Interface, accessControl: AccessControl.Interface, getModelUseCase: GetModelUseCase.Interface);
10
+ execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Result;
11
+ }
12
+ export declare const SchedulePublishEntryUseCase: typeof SchedulePublishEntryUseCaseImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").ISchedulePublishEntryUseCase>;
14
+ };
15
+ export {};
@@ -0,0 +1,51 @@
1
+ import { SchedulePublishEntryUseCase as UseCaseAbstraction } from "./abstractions.js";
2
+ import { ScheduleActionUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ import { Result } from "@webiny/feature/exports/api.js";
5
+ import { EntryNotAuthorizedError } from "@webiny/api-headless-cms/domain/contentEntry/errors.js";
6
+ import { AccessControl } from "@webiny/api-headless-cms/features/shared/abstractions.js";
7
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
8
+ class SchedulePublishEntryUseCaseImpl {
9
+ constructor(scheduleAction, accessControl, getModelUseCase) {
10
+ this.scheduleAction = scheduleAction;
11
+ this.accessControl = accessControl;
12
+ this.getModelUseCase = getModelUseCase;
13
+ }
14
+ async execute(params) {
15
+ const {
16
+ model: initialModel,
17
+ scheduleFor,
18
+ id
19
+ } = params;
20
+ const modelResult = await this.getModelUseCase.execute(initialModel.modelId);
21
+ if (modelResult.isFail()) {
22
+ return Result.fail(modelResult.error);
23
+ }
24
+ const model = modelResult.value;
25
+ const canAccess = await this.accessControl.canAccessEntry({
26
+ model,
27
+ pw: "p"
28
+ });
29
+ if (!canAccess) {
30
+ return Result.fail(EntryNotAuthorizedError.fromModel(model));
31
+ }
32
+ const scheduleResult = await this.scheduleAction.execute({
33
+ namespace: createNamespace(model),
34
+ actionType: ScheduledActionTypePublish,
35
+ scheduleFor,
36
+ targetId: id
37
+ });
38
+ if (scheduleResult.isFail()) {
39
+ return Result.fail(scheduleResult.error);
40
+ }
41
+ return Result.ok({
42
+ scheduledAction: scheduleResult.value
43
+ });
44
+ }
45
+ }
46
+ export const SchedulePublishEntryUseCase = UseCaseAbstraction.createImplementation({
47
+ implementation: SchedulePublishEntryUseCaseImpl,
48
+ dependencies: [ScheduleActionUseCase, AccessControl, GetModelUseCase]
49
+ });
50
+
51
+ //# sourceMappingURL=SchedulePublishEntryUseCase.js.map