@webiny/api-headless-cms-scheduler 0.0.0-unstable.7be00a75a9 → 0.0.0-unstable.7c2def32a7

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 (33) hide show
  1. package/CmsSchedulerFeature.d.ts +4 -0
  2. package/CmsSchedulerFeature.js +23 -0
  3. package/CmsSchedulerFeature.js.map +1 -0
  4. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.d.ts +3 -1
  5. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js +11 -2
  6. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js.map +1 -1
  7. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.d.ts +3 -1
  8. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js +8 -2
  9. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -1
  10. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.d.ts +3 -1
  11. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js +8 -2
  12. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js.map +1 -1
  13. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.d.ts +3 -1
  14. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js +8 -2
  15. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -1
  16. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js +2 -1
  17. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js.map +1 -1
  18. package/features/SchedulePublishEntryUseCase/abstractions.d.ts +1 -0
  19. package/features/SchedulePublishEntryUseCase/abstractions.js.map +1 -1
  20. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js +2 -1
  21. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js.map +1 -1
  22. package/features/ScheduleUnpublishEntryUseCase/abstractions.d.ts +1 -0
  23. package/features/ScheduleUnpublishEntryUseCase/abstractions.js.map +1 -1
  24. package/features/permissions/CmsSchedulerPermissions.d.ts +13 -0
  25. package/features/permissions/CmsSchedulerPermissions.js +31 -0
  26. package/features/permissions/CmsSchedulerPermissions.js.map +1 -0
  27. package/index.d.ts +1 -2
  28. package/index.js +1 -7
  29. package/package.json +12 -17
  30. package/context.d.ts +0 -2
  31. package/context.js +0 -18
  32. package/context.js.map +0 -1
  33. package/index.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ export declare const CmsSchedulerFeature: {
2
+ name: string;
3
+ register(container: import("@webiny/di").Container): void;
4
+ };
@@ -0,0 +1,23 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { CancelScheduledActionOnEntryChangeFeature } from "./features/CancelScheduledActionOnEntryChange/feature.js";
3
+ import { CmsSchedulerPermissions } from "./features/permissions/CmsSchedulerPermissions.js";
4
+ import { NamespaceHandler } from "./features/NamespaceHandler/NamespaceHandler.js";
5
+ import { PublishEntryActionHandler } from "./features/PublishActionHandler/PublishEntryActionHandler.js";
6
+ import { UnpublishEntryActionHandler } from "./features/UnpublishActionHandler/UnpublishEntryActionHandler.js";
7
+ import { SchedulePublishEntryUseCase } from "./features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js";
8
+ import { ScheduleUnpublishEntryUseCase } from "./features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js";
9
+ const CmsSchedulerFeature = createFeature({
10
+ name: "CmsScheduler",
11
+ register (container) {
12
+ container.register(NamespaceHandler);
13
+ container.register(PublishEntryActionHandler);
14
+ container.register(UnpublishEntryActionHandler);
15
+ container.register(SchedulePublishEntryUseCase);
16
+ container.register(ScheduleUnpublishEntryUseCase);
17
+ CancelScheduledActionOnEntryChangeFeature.register(container);
18
+ container.register(CmsSchedulerPermissions);
19
+ }
20
+ });
21
+ export { CmsSchedulerFeature };
22
+
23
+ //# sourceMappingURL=CmsSchedulerFeature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CmsSchedulerFeature.js","sources":["../src/CmsSchedulerFeature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\nimport { CmsSchedulerPermissions } from \"~/features/permissions/CmsSchedulerPermissions.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 CmsSchedulerFeature = createFeature({\n name: \"CmsScheduler\",\n register(container) {\n // Pure DI registration (was a request-time ContextPlugin — none of it needs ctx/post-auth).\n container.register(NamespaceHandler);\n container.register(PublishEntryActionHandler);\n container.register(UnpublishEntryActionHandler);\n container.register(SchedulePublishEntryUseCase);\n container.register(ScheduleUnpublishEntryUseCase);\n\n CancelScheduledActionOnEntryChangeFeature.register(container);\n container.register(CmsSchedulerPermissions);\n }\n});\n"],"names":["CmsSchedulerFeature","createFeature","container","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","CancelScheduledActionOnEntryChangeFeature","CmsSchedulerPermissions"],"mappings":";;;;;;;;AASO,MAAMA,sBAAsBC,cAAc;IAC7C,MAAM;IACN,UAASC,SAAS;QAEdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;QACnBJ,UAAU,QAAQ,CAACK;QAEnBC,0CAA0C,QAAQ,CAACN;QACnDA,UAAU,QAAQ,CAACO;IACvB;AACJ"}
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  /**
4
5
  * Cancels scheduled actions when an entry is deleted
5
6
  *
@@ -10,7 +11,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
10
11
  declare class CancelScheduledActionOnEntryDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
12
  private listScheduledActions;
12
13
  private cancelScheduledAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ private logger;
15
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface, logger: Logger.Interface);
14
16
  handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
17
  private listSchedules;
16
18
  }
@@ -1,10 +1,12 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  import { createNamespace } from "../../utils/namespace.js";
4
5
  class CancelScheduledActionOnEntryDeleteHandlerImpl {
5
- constructor(listScheduledActions, cancelScheduledAction){
6
+ constructor(listScheduledActions, cancelScheduledAction, logger){
6
7
  this.listScheduledActions = listScheduledActions;
7
8
  this.cancelScheduledAction = cancelScheduledAction;
9
+ this.logger = logger;
8
10
  }
9
11
  async handle(event) {
10
12
  const { entry, model } = event.payload;
@@ -25,6 +27,12 @@ class CancelScheduledActionOnEntryDeleteHandlerImpl {
25
27
  targetId_startsWith: `${entryId}#`
26
28
  }
27
29
  });
30
+ if (actionsResult.isFail()) {
31
+ this.logger.error({
32
+ error: actionsResult.error
33
+ }, "Could not list scheduled actions to cancel.");
34
+ return [];
35
+ }
28
36
  return actionsResult.value.items;
29
37
  }
30
38
  }
@@ -32,7 +40,8 @@ const CancelScheduledActionOnEntryDeleteEventHandler = EntryAfterDeleteEventHand
32
40
  implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,
33
41
  dependencies: [
34
42
  ListScheduledActionsUseCase,
35
- CancelScheduledActionUseCase
43
+ CancelScheduledActionUseCase,
44
+ Logger
36
45
  ]
37
46
  });
38
47
  export { CancelScheduledActionOnEntryDeleteEventHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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"],"names":["CancelScheduledActionOnEntryDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","schedules","action","cancelRes","modelId","entryId","actionsResult","createNamespace","CancelScheduledActionOnEntryDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAACD,MAAM,OAAO,EAAED,MAAM,OAAO;QACvE,KAAK,MAAMG,UAAUD,UAAW;YAC5B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;IAEA,MAAc,cAAcC,OAAe,EAAEC,OAAe,EAAE;QAC1D,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;YACP,OAAO;gBACH,WAAWC,gBAAgB;oBAAEH;gBAAQ;gBACrC,qBAAqB,GAAGC,QAAQ,CAAC,CAAC;YACtC;QACJ;QAEA,OAAOC,cAAc,KAAK,CAAC,KAAK;IACpC;AACJ;AAEO,MAAME,iDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBd;IAChB,cAAc;QAACe;QAA6BC;KAA6B;AAC7E"}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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 { Logger } from \"@webiny/api-core/features/logger/index.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 private logger: Logger.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 if (actionsResult.isFail()) {\n this.logger.error(\n { error: actionsResult.error },\n \"Could not list scheduled actions to cancel.\"\n );\n return [];\n }\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase, Logger]\n });\n"],"names":["CancelScheduledActionOnEntryDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","logger","event","entry","model","schedules","action","cancelRes","modelId","entryId","actionsResult","createNamespace","CancelScheduledActionOnEntryDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase","Logger"],"mappings":";;;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,EAC7DC,MAAwB,CAClC;aAHUF,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAACD,MAAM,OAAO,EAAED,MAAM,OAAO;QACvE,KAAK,MAAMG,UAAUD,UAAW;YAC5B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;IAEA,MAAc,cAAcC,OAAe,EAAEC,OAAe,EAAE;QAC1D,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;YACP,OAAO;gBACH,WAAWC,gBAAgB;oBAAEH;gBAAQ;gBACrC,qBAAqB,GAAGC,QAAQ,CAAC,CAAC;YACtC;QACJ;QAEA,IAAIC,cAAc,MAAM,IAAI;YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;gBAAE,OAAOA,cAAc,KAAK;YAAC,GAC7B;YAEJ,OAAO,EAAE;QACb;QAEA,OAAOA,cAAc,KAAK,CAAC,KAAK;IACpC;AACJ;AAEO,MAAME,iDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBf;IAChB,cAAc;QAACgB;QAA6BC;QAA8BC;KAAO;AACrF"}
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  /**
4
5
  * Cancels scheduled "publish" when an entry is manually published
5
6
  *
@@ -10,7 +11,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
10
11
  declare class CancelScheduledActionOnPublishEventHandlerImpl implements EntryAfterPublishEventHandler.Interface {
11
12
  private listScheduledActions;
12
13
  private cancelScheduledAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ private logger;
15
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface, logger: Logger.Interface);
14
16
  handle(event: EntryAfterPublishEventHandler.Event): Promise<void>;
15
17
  }
16
18
  export declare const CancelScheduledActionOnPublishEventHandler: typeof CancelScheduledActionOnPublishEventHandlerImpl & {
@@ -1,10 +1,12 @@
1
1
  import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  import { createNamespace } from "../../utils/namespace.js";
4
5
  class CancelScheduledActionOnPublishEventHandlerImpl {
5
- constructor(listScheduledActions, cancelScheduledAction){
6
+ constructor(listScheduledActions, cancelScheduledAction, logger){
6
7
  this.listScheduledActions = listScheduledActions;
7
8
  this.cancelScheduledAction = cancelScheduledAction;
9
+ this.logger = logger;
8
10
  }
9
11
  async handle(event) {
10
12
  const { entry, model } = event.payload;
@@ -16,6 +18,9 @@ class CancelScheduledActionOnPublishEventHandlerImpl {
16
18
  targetId: entry.id
17
19
  }
18
20
  });
21
+ if (actionsResult.isFail()) return void this.logger.error({
22
+ error: actionsResult.error
23
+ }, "Could not list scheduled actions to cancel.");
19
24
  const actions = actionsResult.value.items;
20
25
  for (const action of actions){
21
26
  const cancelRes = await this.cancelScheduledAction.execute(action);
@@ -27,7 +32,8 @@ const CancelScheduledActionOnPublishEventHandler = EntryAfterPublishEventHandler
27
32
  implementation: CancelScheduledActionOnPublishEventHandlerImpl,
28
33
  dependencies: [
29
34
  ListScheduledActionsUseCase,
30
- CancelScheduledActionUseCase
35
+ CancelScheduledActionUseCase,
36
+ Logger
31
37
  ]
32
38
  });
33
39
  export { CancelScheduledActionOnPublishEventHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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"],"names":["CancelScheduledActionOnPublishEventHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypePublish","actions","action","cancelRes","CancelScheduledActionOnPublishEventHandler","EntryAfterPublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA0C,EAAiB;QACpE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,6CACTC,8BAA8B,oBAAoB,CAAC;IAC/C,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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 { Logger } from \"@webiny/api-core/features/logger/index.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 private logger: Logger.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 if (actionsResult.isFail()) {\n this.logger.error(\n { error: actionsResult.error },\n \"Could not list scheduled actions to cancel.\"\n );\n return;\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, Logger]\n });\n"],"names":["CancelScheduledActionOnPublishEventHandlerImpl","listScheduledActions","cancelScheduledAction","logger","event","entry","model","actionsResult","createNamespace","ScheduledActionTypePublish","actions","action","cancelRes","CancelScheduledActionOnPublishEventHandler","EntryAfterPublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase","Logger"],"mappings":";;;;AAgBA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,EAC7DC,MAAwB,CAClC;aAHUF,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAA0C,EAAiB;QACpE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,IAAIE,cAAc,MAAM,IAAI,YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;YAAE,OAAOA,cAAc,KAAK;QAAC,GAC7B;QAKR,MAAMG,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,6CACTC,8BAA8B,oBAAoB,CAAC;IAC/C,gBAAgBd;IAChB,cAAc;QAACe;QAA6BC;QAA8BC;KAAO;AACrF"}
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  /**
4
5
  * Cancels scheduled actions when an entry revision is deleted
5
6
  *
@@ -10,7 +11,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
10
11
  declare class CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
12
  private listScheduledActions;
12
13
  private cancelScheduledAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ private logger;
15
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface, logger: Logger.Interface);
14
16
  handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
17
  }
16
18
  export declare const CancelScheduledActionOnRevisionDeleteEventHandler: typeof CancelScheduledActionOnDeleteHandlerImpl & {
@@ -1,10 +1,12 @@
1
1
  import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  import { createNamespace } from "../../utils/namespace.js";
4
5
  class CancelScheduledActionOnDeleteHandlerImpl {
5
- constructor(listScheduledActions, cancelScheduledAction){
6
+ constructor(listScheduledActions, cancelScheduledAction, logger){
6
7
  this.listScheduledActions = listScheduledActions;
7
8
  this.cancelScheduledAction = cancelScheduledAction;
9
+ this.logger = logger;
8
10
  }
9
11
  async handle(event) {
10
12
  const { entry, model } = event.payload;
@@ -15,6 +17,9 @@ class CancelScheduledActionOnDeleteHandlerImpl {
15
17
  targetId: entry.id
16
18
  }
17
19
  });
20
+ if (actionsResult.isFail()) return void this.logger.error({
21
+ error: actionsResult.error
22
+ }, "Could not list scheduled actions to cancel.");
18
23
  const actions = actionsResult.value.items;
19
24
  for (const action of actions){
20
25
  const cancelRes = await this.cancelScheduledAction.execute(action);
@@ -26,7 +31,8 @@ const CancelScheduledActionOnRevisionDeleteEventHandler = EntryAfterDeleteEventH
26
31
  implementation: CancelScheduledActionOnDeleteHandlerImpl,
27
32
  dependencies: [
28
33
  ListScheduledActionsUseCase,
29
- CancelScheduledActionUseCase
34
+ CancelScheduledActionUseCase,
35
+ Logger
30
36
  ]
31
37
  });
32
38
  export { CancelScheduledActionOnRevisionDeleteEventHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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"],"names":["CancelScheduledActionOnDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","actions","action","cancelRes","CancelScheduledActionOnRevisionDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IACF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,UAAUD,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMI,UAAUF,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMG,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,oDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBZ;IAChB,cAAc;QAACa;QAA6BC;KAA6B;AAC7E"}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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 { Logger } from \"@webiny/api-core/features/logger/index.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 private logger: Logger.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 if (actionsResult.isFail()) {\n this.logger.error(\n { error: actionsResult.error },\n \"Could not list scheduled actions to cancel.\"\n );\n return;\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, Logger]\n });\n"],"names":["CancelScheduledActionOnDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","logger","event","entry","model","actionsResult","createNamespace","actions","action","cancelRes","CancelScheduledActionOnRevisionDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase","Logger"],"mappings":";;;;AAeA,MAAMA;IACF,YACYC,oBAA2D,EAC3DC,qBAA6D,EAC7DC,MAAwB,CAClC;aAHUF,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,UAAUD,MAAM,EAAE;YACtB;QACJ;QAEA,IAAIE,cAAc,MAAM,IAAI,YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;YAAE,OAAOA,cAAc,KAAK;QAAC,GAC7B;QAKR,MAAME,UAAUF,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMG,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,oDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;QAA8BC;KAAO;AACrF"}
@@ -1,5 +1,6 @@
1
1
  import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  /**
4
5
  * Cancels scheduled action when an entry is manually unpublished
5
6
  *
@@ -10,7 +11,8 @@ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webi
10
11
  declare class CancelScheduledActionOnUnpublishHandlerImpl implements EntryAfterUnpublishEventHandler.Interface {
11
12
  private listScheduledActions;
12
13
  private cancelScheduledAction;
13
- constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ private logger;
15
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface, logger: Logger.Interface);
14
16
  handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void>;
15
17
  }
16
18
  export declare const CancelScheduledActionOnUnpublishEventHandler: typeof CancelScheduledActionOnUnpublishHandlerImpl & {
@@ -1,10 +1,12 @@
1
1
  import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
2
  import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypeUnpublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { Logger } from "@webiny/api-core/features/logger/index.js";
3
4
  import { createNamespace } from "../../utils/namespace.js";
4
5
  class CancelScheduledActionOnUnpublishHandlerImpl {
5
- constructor(listScheduledActions, cancelScheduledAction){
6
+ constructor(listScheduledActions, cancelScheduledAction, logger){
6
7
  this.listScheduledActions = listScheduledActions;
7
8
  this.cancelScheduledAction = cancelScheduledAction;
9
+ this.logger = logger;
8
10
  }
9
11
  async handle(event) {
10
12
  const { entry, model } = event.payload;
@@ -16,6 +18,9 @@ class CancelScheduledActionOnUnpublishHandlerImpl {
16
18
  targetId: entry.id
17
19
  }
18
20
  });
21
+ if (actionsResult.isFail()) return void this.logger.error({
22
+ error: actionsResult.error
23
+ }, "Could not list scheduled actions to cancel.");
19
24
  const actions = actionsResult.value.items;
20
25
  for (const action of actions){
21
26
  const cancelRes = await this.cancelScheduledAction.execute(action);
@@ -27,7 +32,8 @@ const CancelScheduledActionOnUnpublishEventHandler = EntryAfterUnpublishEventHan
27
32
  implementation: CancelScheduledActionOnUnpublishHandlerImpl,
28
33
  dependencies: [
29
34
  ListScheduledActionsUseCase,
30
- CancelScheduledActionUseCase
35
+ CancelScheduledActionUseCase,
36
+ Logger
31
37
  ]
32
38
  });
33
39
  export { CancelScheduledActionOnUnpublishEventHandler };
@@ -1 +1 @@
1
- {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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"],"names":["CancelScheduledActionOnUnpublishHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypeUnpublish","actions","action","cancelRes","CancelScheduledActionOnUnpublishEventHandler","EntryAfterUnpublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA4C,EAAiB;QACtE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,+CACTC,gCAAgC,oBAAoB,CAAC;IACjD,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/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 { Logger } from \"@webiny/api-core/features/logger/index.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 private logger: Logger.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 if (actionsResult.isFail()) {\n this.logger.error(\n { error: actionsResult.error },\n \"Could not list scheduled actions to cancel.\"\n );\n return;\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, Logger]\n });\n"],"names":["CancelScheduledActionOnUnpublishHandlerImpl","listScheduledActions","cancelScheduledAction","logger","event","entry","model","actionsResult","createNamespace","ScheduledActionTypeUnpublish","actions","action","cancelRes","CancelScheduledActionOnUnpublishEventHandler","EntryAfterUnpublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase","Logger"],"mappings":";;;;AAgBA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,EAC7DC,MAAwB,CAClC;aAHUF,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;aACAC,MAAM,GAANA;IACT;IAEH,MAAM,OAAOC,KAA4C,EAAiB;QACtE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,IAAIE,cAAc,MAAM,IAAI,YACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CACb;YAAE,OAAOA,cAAc,KAAK;QAAC,GAC7B;QAKR,MAAMG,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,+CACTC,gCAAgC,oBAAoB,CAAC;IACjD,gBAAgBd;IAChB,cAAc;QAACe;QAA6BC;QAA8BC;KAAO;AACrF"}
@@ -12,7 +12,7 @@ class SchedulePublishEntryUseCaseImpl {
12
12
  this.getModelUseCase = getModelUseCase;
13
13
  }
14
14
  async execute(params) {
15
- const { model: initialModel, scheduleFor, id } = params;
15
+ const { model: initialModel, tenant, scheduleFor, id } = params;
16
16
  const modelResult = await this.getModelUseCase.execute(initialModel.modelId);
17
17
  if (modelResult.isFail()) return Result.fail(modelResult.error);
18
18
  const model = modelResult.value;
@@ -25,6 +25,7 @@ class SchedulePublishEntryUseCaseImpl {
25
25
  namespace: createNamespace(model),
26
26
  actionType: ScheduledActionTypePublish,
27
27
  scheduleFor,
28
+ tenant,
28
29
  targetId: id
29
30
  });
30
31
  if (scheduleResult.isFail()) return Result.fail(scheduleResult.error);
@@ -1 +1 @@
1
- {"version":3,"file":"features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js","sources":["../../../src/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.ts"],"sourcesContent":["import { SchedulePublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport {\n ScheduleActionUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { EntryNotAuthorizedError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\nimport { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\n\nclass SchedulePublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private scheduleAction: ScheduleActionUseCase.Interface,\n private accessControl: AccessControl.Interface,\n private getModelUseCase: GetModelUseCase.Interface\n ) {}\n\n public async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Result {\n const { model: initialModel, scheduleFor, id } = params;\n\n const modelResult = await this.getModelUseCase.execute(initialModel.modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n const model = modelResult.value;\n\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model) as any);\n }\n\n const scheduleResult = await this.scheduleAction.execute({\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n scheduleFor,\n targetId: id\n });\n if (scheduleResult.isFail()) {\n return Result.fail(scheduleResult.error);\n }\n return Result.ok({\n scheduledAction: scheduleResult.value\n });\n }\n}\n\nexport const SchedulePublishEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: SchedulePublishEntryUseCaseImpl,\n dependencies: [ScheduleActionUseCase, AccessControl, GetModelUseCase]\n});\n"],"names":["SchedulePublishEntryUseCaseImpl","scheduleAction","accessControl","getModelUseCase","params","initialModel","scheduleFor","id","modelResult","Result","model","canAccess","EntryNotAuthorizedError","scheduleResult","createNamespace","ScheduledActionTypePublish","SchedulePublishEntryUseCase","UseCaseAbstraction","ScheduleActionUseCase","AccessControl","GetModelUseCase"],"mappings":";;;;;;;AAWA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,aAAsC,EACtCC,eAA0C,CACpD;aAHUF,cAAc,GAAdA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAa,QAAQC,MAAiC,EAA6B;QAC/E,MAAM,EAAE,OAAOC,YAAY,EAAEC,WAAW,EAAEC,EAAE,EAAE,GAAGH;QAEjD,MAAMI,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACH,aAAa,OAAO;QAC3E,IAAIG,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAExC,MAAME,QAAQF,YAAY,KAAK;QAE/B,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAED;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACC,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACF;QAGzD,MAAMG,iBAAiB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACrD,WAAWC,gBAAgBJ;YAC3B,YAAYK;YACZT;YACA,UAAUC;QACd;QACA,IAAIM,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAE3C,OAAOJ,OAAO,EAAE,CAAC;YACb,iBAAiBI,eAAe,KAAK;QACzC;IACJ;AACJ;AAEO,MAAMG,0DAA8BC,4BAAAA,oBAAuC,CAAC;IAC/E,gBAAgBjB;IAChB,cAAc;QAACkB;QAAuBC;QAAeC;KAAgB;AACzE"}
1
+ {"version":3,"file":"features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js","sources":["../../../src/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.ts"],"sourcesContent":["import { SchedulePublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport {\n ScheduleActionUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { EntryNotAuthorizedError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\nimport { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\n\nclass SchedulePublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private scheduleAction: ScheduleActionUseCase.Interface,\n private accessControl: AccessControl.Interface,\n private getModelUseCase: GetModelUseCase.Interface\n ) {}\n\n public async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Result {\n const { model: initialModel, tenant, scheduleFor, id } = params;\n\n const modelResult = await this.getModelUseCase.execute(initialModel.modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n const model = modelResult.value;\n\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"p\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model) as any);\n }\n\n const scheduleResult = await this.scheduleAction.execute({\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n scheduleFor,\n tenant,\n targetId: id\n });\n if (scheduleResult.isFail()) {\n return Result.fail(scheduleResult.error);\n }\n return Result.ok({\n scheduledAction: scheduleResult.value\n });\n }\n}\n\nexport const SchedulePublishEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: SchedulePublishEntryUseCaseImpl,\n dependencies: [ScheduleActionUseCase, AccessControl, GetModelUseCase]\n});\n"],"names":["SchedulePublishEntryUseCaseImpl","scheduleAction","accessControl","getModelUseCase","params","initialModel","tenant","scheduleFor","id","modelResult","Result","model","canAccess","EntryNotAuthorizedError","scheduleResult","createNamespace","ScheduledActionTypePublish","SchedulePublishEntryUseCase","UseCaseAbstraction","ScheduleActionUseCase","AccessControl","GetModelUseCase"],"mappings":";;;;;;;AAWA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,aAAsC,EACtCC,eAA0C,CACpD;aAHUF,cAAc,GAAdA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAa,QAAQC,MAAiC,EAA6B;QAC/E,MAAM,EAAE,OAAOC,YAAY,EAAEC,MAAM,EAAEC,WAAW,EAAEC,EAAE,EAAE,GAAGJ;QAEzD,MAAMK,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACJ,aAAa,OAAO;QAC3E,IAAII,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAExC,MAAME,QAAQF,YAAY,KAAK;QAE/B,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAED;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACC,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACF;QAGzD,MAAMG,iBAAiB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACrD,WAAWC,gBAAgBJ;YAC3B,YAAYK;YACZT;YACAD;YACA,UAAUE;QACd;QACA,IAAIM,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAE3C,OAAOJ,OAAO,EAAE,CAAC;YACb,iBAAiBI,eAAe,KAAK;QACzC;IACJ;AACJ;AAEO,MAAMG,0DAA8BC,4BAAAA,oBAAuC,CAAC;IAC/E,gBAAgBlB;IAChB,cAAc;QAACmB;QAAuBC;QAAeC;KAAgB;AACzE"}
@@ -4,6 +4,7 @@ import type { CmsModel } from "@webiny/api-headless-cms/types/index.js";
4
4
  export interface ISchedulePublishEntryUseCaseParams {
5
5
  id: string;
6
6
  model: Pick<CmsModel, "modelId">;
7
+ tenant: string;
7
8
  scheduleFor: Date;
8
9
  }
9
10
  export interface ISchedulePublishEntryUseCaseResult {
@@ -1 +1 @@
1
- {"version":3,"file":"features/SchedulePublishEntryUseCase/abstractions.js","sources":["../../../src/features/SchedulePublishEntryUseCase/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n IScheduledAction,\n ScheduleActionError\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface ISchedulePublishEntryUseCaseParams {\n id: string;\n model: Pick<CmsModel, \"modelId\">;\n scheduleFor: Date;\n}\n\nexport interface ISchedulePublishEntryUseCaseResult {\n scheduledAction: IScheduledAction;\n}\n\nexport type ISchedulePublishEntryUseCaseResponse = Promise<\n Result<ISchedulePublishEntryUseCaseResult, ScheduleActionError>\n>;\n\nexport interface ISchedulePublishEntryUseCase {\n execute(params: ISchedulePublishEntryUseCaseParams): ISchedulePublishEntryUseCaseResponse;\n}\n\n/** Schedule an entry for future publishing. */\nexport const SchedulePublishEntryUseCase = createAbstraction<ISchedulePublishEntryUseCase>(\n \"CmsScheduler/SchedulePublishEntryUseCase\"\n);\n\nexport namespace SchedulePublishEntryUseCase {\n export type Interface = ISchedulePublishEntryUseCase;\n export type Error = ScheduleActionError;\n export type Params = ISchedulePublishEntryUseCaseParams;\n export type Result = ISchedulePublishEntryUseCaseResponse;\n}\n"],"names":["SchedulePublishEntryUseCase","createAbstraction"],"mappings":";AA0BO,MAAMA,8BAA8BC,kBACvC"}
1
+ {"version":3,"file":"features/SchedulePublishEntryUseCase/abstractions.js","sources":["../../../src/features/SchedulePublishEntryUseCase/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n IScheduledAction,\n ScheduleActionError\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface ISchedulePublishEntryUseCaseParams {\n id: string;\n model: Pick<CmsModel, \"modelId\">;\n tenant: string;\n scheduleFor: Date;\n}\n\nexport interface ISchedulePublishEntryUseCaseResult {\n scheduledAction: IScheduledAction;\n}\n\nexport type ISchedulePublishEntryUseCaseResponse = Promise<\n Result<ISchedulePublishEntryUseCaseResult, ScheduleActionError>\n>;\n\nexport interface ISchedulePublishEntryUseCase {\n execute(params: ISchedulePublishEntryUseCaseParams): ISchedulePublishEntryUseCaseResponse;\n}\n\n/** Schedule an entry for future publishing. */\nexport const SchedulePublishEntryUseCase = createAbstraction<ISchedulePublishEntryUseCase>(\n \"CmsScheduler/SchedulePublishEntryUseCase\"\n);\n\nexport namespace SchedulePublishEntryUseCase {\n export type Interface = ISchedulePublishEntryUseCase;\n export type Error = ScheduleActionError;\n export type Params = ISchedulePublishEntryUseCaseParams;\n export type Result = ISchedulePublishEntryUseCaseResponse;\n}\n"],"names":["SchedulePublishEntryUseCase","createAbstraction"],"mappings":";AA2BO,MAAMA,8BAA8BC,kBACvC"}
@@ -12,7 +12,7 @@ class ScheduleUnpublishEntryUseCaseImpl {
12
12
  this.getModelUseCase = getModelUseCase;
13
13
  }
14
14
  async execute(params) {
15
- const { model: initialModel, scheduleFor, id } = params;
15
+ const { model: initialModel, scheduleFor, tenant, id } = params;
16
16
  const modelResult = await this.getModelUseCase.execute(initialModel.modelId);
17
17
  if (modelResult.isFail()) return Result.fail(modelResult.error);
18
18
  const model = modelResult.value;
@@ -25,6 +25,7 @@ class ScheduleUnpublishEntryUseCaseImpl {
25
25
  namespace: createNamespace(model),
26
26
  actionType: ScheduledActionTypeUnpublish,
27
27
  scheduleFor,
28
+ tenant,
28
29
  targetId: id
29
30
  });
30
31
  if (scheduleResult.isFail()) return Result.fail(scheduleResult.error);
@@ -1 +1 @@
1
- {"version":3,"file":"features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js","sources":["../../../src/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.ts"],"sourcesContent":["import { ScheduleUnpublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport {\n ScheduleActionUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { EntryNotAuthorizedError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\n\nclass ScheduleUnpublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private scheduleAction: ScheduleActionUseCase.Interface,\n private accessControl: AccessControl.Interface,\n private getModelUseCase: GetModelUseCase.Interface\n ) {}\n\n public async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Result {\n const { model: initialModel, scheduleFor, id } = params;\n\n const modelResult = await this.getModelUseCase.execute(initialModel.modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n const model = modelResult.value;\n\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model) as any);\n }\n\n const scheduleResult = await this.scheduleAction.execute({\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n scheduleFor,\n targetId: id\n });\n if (scheduleResult.isFail()) {\n return Result.fail(scheduleResult.error);\n }\n return Result.ok({\n scheduledAction: scheduleResult.value\n });\n }\n}\n\nexport const ScheduleUnpublishEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: ScheduleUnpublishEntryUseCaseImpl,\n dependencies: [ScheduleActionUseCase, AccessControl, GetModelUseCase]\n});\n"],"names":["ScheduleUnpublishEntryUseCaseImpl","scheduleAction","accessControl","getModelUseCase","params","initialModel","scheduleFor","id","modelResult","Result","model","canAccess","EntryNotAuthorizedError","scheduleResult","createNamespace","ScheduledActionTypeUnpublish","ScheduleUnpublishEntryUseCase","UseCaseAbstraction","ScheduleActionUseCase","AccessControl","GetModelUseCase"],"mappings":";;;;;;;AAWA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,aAAsC,EACtCC,eAA0C,CACpD;aAHUF,cAAc,GAAdA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAa,QAAQC,MAAiC,EAA6B;QAC/E,MAAM,EAAE,OAAOC,YAAY,EAAEC,WAAW,EAAEC,EAAE,EAAE,GAAGH;QAEjD,MAAMI,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACH,aAAa,OAAO;QAC3E,IAAIG,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAExC,MAAME,QAAQF,YAAY,KAAK;QAE/B,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAED;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACC,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACF;QAGzD,MAAMG,iBAAiB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACrD,WAAWC,gBAAgBJ;YAC3B,YAAYK;YACZT;YACA,UAAUC;QACd;QACA,IAAIM,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAE3C,OAAOJ,OAAO,EAAE,CAAC;YACb,iBAAiBI,eAAe,KAAK;QACzC;IACJ;AACJ;AAEO,MAAMG,8DAAgCC,8BAAAA,oBAAuC,CAAC;IACjF,gBAAgBjB;IAChB,cAAc;QAACkB;QAAuBC;QAAeC;KAAgB;AACzE"}
1
+ {"version":3,"file":"features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js","sources":["../../../src/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.ts"],"sourcesContent":["import { ScheduleUnpublishEntryUseCase as UseCaseAbstraction } from \"./abstractions.js\";\nimport {\n ScheduleActionUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { AccessControl } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { EntryNotAuthorizedError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\n\nclass ScheduleUnpublishEntryUseCaseImpl implements UseCaseAbstraction.Interface {\n public constructor(\n private scheduleAction: ScheduleActionUseCase.Interface,\n private accessControl: AccessControl.Interface,\n private getModelUseCase: GetModelUseCase.Interface\n ) {}\n\n public async execute(params: UseCaseAbstraction.Params): UseCaseAbstraction.Result {\n const { model: initialModel, scheduleFor, tenant, id } = params;\n\n const modelResult = await this.getModelUseCase.execute(initialModel.modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n const model = modelResult.value;\n\n const canAccess = await this.accessControl.canAccessEntry({ model, pw: \"u\" });\n if (!canAccess) {\n return Result.fail(EntryNotAuthorizedError.fromModel(model) as any);\n }\n\n const scheduleResult = await this.scheduleAction.execute({\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n scheduleFor,\n tenant,\n targetId: id\n });\n if (scheduleResult.isFail()) {\n return Result.fail(scheduleResult.error);\n }\n return Result.ok({\n scheduledAction: scheduleResult.value\n });\n }\n}\n\nexport const ScheduleUnpublishEntryUseCase = UseCaseAbstraction.createImplementation({\n implementation: ScheduleUnpublishEntryUseCaseImpl,\n dependencies: [ScheduleActionUseCase, AccessControl, GetModelUseCase]\n});\n"],"names":["ScheduleUnpublishEntryUseCaseImpl","scheduleAction","accessControl","getModelUseCase","params","initialModel","scheduleFor","tenant","id","modelResult","Result","model","canAccess","EntryNotAuthorizedError","scheduleResult","createNamespace","ScheduledActionTypeUnpublish","ScheduleUnpublishEntryUseCase","UseCaseAbstraction","ScheduleActionUseCase","AccessControl","GetModelUseCase"],"mappings":";;;;;;;AAWA,MAAMA;IACF,YACYC,cAA+C,EAC/CC,aAAsC,EACtCC,eAA0C,CACpD;aAHUF,cAAc,GAAdA;aACAC,aAAa,GAAbA;aACAC,eAAe,GAAfA;IACT;IAEH,MAAa,QAAQC,MAAiC,EAA6B;QAC/E,MAAM,EAAE,OAAOC,YAAY,EAAEC,WAAW,EAAEC,MAAM,EAAEC,EAAE,EAAE,GAAGJ;QAEzD,MAAMK,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACJ,aAAa,OAAO;QAC3E,IAAII,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAExC,MAAME,QAAQF,YAAY,KAAK;QAE/B,MAAMG,YAAY,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;YAAED;YAAO,IAAI;QAAI;QAC3E,IAAI,CAACC,WACD,OAAOF,OAAO,IAAI,CAACG,wBAAwB,SAAS,CAACF;QAGzD,MAAMG,iBAAiB,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YACrD,WAAWC,gBAAgBJ;YAC3B,YAAYK;YACZV;YACAC;YACA,UAAUC;QACd;QACA,IAAIM,eAAe,MAAM,IACrB,OAAOJ,OAAO,IAAI,CAACI,eAAe,KAAK;QAE3C,OAAOJ,OAAO,EAAE,CAAC;YACb,iBAAiBI,eAAe,KAAK;QACzC;IACJ;AACJ;AAEO,MAAMG,8DAAgCC,8BAAAA,oBAAuC,CAAC;IACjF,gBAAgBlB;IAChB,cAAc;QAACmB;QAAuBC;QAAeC;KAAgB;AACzE"}
@@ -4,6 +4,7 @@ import type { CmsModel } from "@webiny/api-headless-cms/types/index.js";
4
4
  export interface IScheduleUnpublishEntryUseCaseParams {
5
5
  id: string;
6
6
  model: Pick<CmsModel, "modelId">;
7
+ tenant: string;
7
8
  scheduleFor: Date;
8
9
  }
9
10
  export interface IScheduleUnpublishEntryUseCaseResult {
@@ -1 +1 @@
1
- {"version":3,"file":"features/ScheduleUnpublishEntryUseCase/abstractions.js","sources":["../../../src/features/ScheduleUnpublishEntryUseCase/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n IScheduledAction,\n ScheduleActionError\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IScheduleUnpublishEntryUseCaseParams {\n id: string;\n model: Pick<CmsModel, \"modelId\">;\n scheduleFor: Date;\n}\n\nexport interface IScheduleUnpublishEntryUseCaseResult {\n scheduledAction: IScheduledAction;\n}\n\nexport type IScheduleUnpublishEntryUseCaseResponse = Promise<\n Result<IScheduleUnpublishEntryUseCaseResult, ScheduleActionError>\n>;\n\nexport interface IScheduleUnpublishEntryUseCase {\n execute(params: IScheduleUnpublishEntryUseCaseParams): IScheduleUnpublishEntryUseCaseResponse;\n}\n\n/** Schedule an entry for future unpublishing. */\nexport const ScheduleUnpublishEntryUseCase = createAbstraction<IScheduleUnpublishEntryUseCase>(\n \"CmsScheduler/ScheduleUnpublishEntryUseCase\"\n);\n\nexport namespace ScheduleUnpublishEntryUseCase {\n export type Interface = IScheduleUnpublishEntryUseCase;\n export type Error = ScheduleActionError;\n export type Params = IScheduleUnpublishEntryUseCaseParams;\n export type Result = IScheduleUnpublishEntryUseCaseResponse;\n}\n"],"names":["ScheduleUnpublishEntryUseCase","createAbstraction"],"mappings":";AA0BO,MAAMA,gCAAgCC,kBACzC"}
1
+ {"version":3,"file":"features/ScheduleUnpublishEntryUseCase/abstractions.js","sources":["../../../src/features/ScheduleUnpublishEntryUseCase/abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type {\n IScheduledAction,\n ScheduleActionError\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\n\nexport interface IScheduleUnpublishEntryUseCaseParams {\n id: string;\n model: Pick<CmsModel, \"modelId\">;\n tenant: string;\n scheduleFor: Date;\n}\n\nexport interface IScheduleUnpublishEntryUseCaseResult {\n scheduledAction: IScheduledAction;\n}\n\nexport type IScheduleUnpublishEntryUseCaseResponse = Promise<\n Result<IScheduleUnpublishEntryUseCaseResult, ScheduleActionError>\n>;\n\nexport interface IScheduleUnpublishEntryUseCase {\n execute(params: IScheduleUnpublishEntryUseCaseParams): IScheduleUnpublishEntryUseCaseResponse;\n}\n\n/** Schedule an entry for future unpublishing. */\nexport const ScheduleUnpublishEntryUseCase = createAbstraction<IScheduleUnpublishEntryUseCase>(\n \"CmsScheduler/ScheduleUnpublishEntryUseCase\"\n);\n\nexport namespace ScheduleUnpublishEntryUseCase {\n export type Interface = IScheduleUnpublishEntryUseCase;\n export type Error = ScheduleActionError;\n export type Params = IScheduleUnpublishEntryUseCaseParams;\n export type Result = IScheduleUnpublishEntryUseCaseResponse;\n}\n"],"names":["ScheduleUnpublishEntryUseCase","createAbstraction"],"mappings":";AA2BO,MAAMA,gCAAgCC,kBACzC"}
@@ -0,0 +1,13 @@
1
+ import { SchedulerPermissions } from "@webiny/api-scheduler/features/permissions/abstractions.js";
2
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
3
+ declare class CmsSchedulerPermissionsImpl implements SchedulerPermissions.Interface {
4
+ private identityContext;
5
+ constructor(identityContext: IdentityContext.Interface);
6
+ canHandle(namespace: string): boolean;
7
+ canRead(): Promise<boolean>;
8
+ onlyOwnRecords(): Promise<boolean>;
9
+ }
10
+ export declare const CmsSchedulerPermissions: typeof CmsSchedulerPermissionsImpl & {
11
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/features/permissions/abstractions.js").ISchedulerPermissions>;
12
+ };
13
+ export {};
@@ -0,0 +1,31 @@
1
+ import { SchedulerPermissions } from "@webiny/api-scheduler/features/permissions/abstractions.js";
2
+ import { IdentityContext } from "@webiny/api-core/exports/api/security.js";
3
+ import { CMS_NAMESPACE } from "../../utils/namespace.js";
4
+ class CmsSchedulerPermissionsImpl {
5
+ constructor(identityContext){
6
+ this.identityContext = identityContext;
7
+ }
8
+ canHandle(namespace) {
9
+ return namespace.startsWith(CMS_NAMESPACE);
10
+ }
11
+ async canRead() {
12
+ if (await this.identityContext.hasFullAccess()) return true;
13
+ const permissions = await this.identityContext.getPermissions("cms.contentEntry");
14
+ return permissions.length > 0;
15
+ }
16
+ async onlyOwnRecords() {
17
+ if (await this.identityContext.hasFullAccess()) return false;
18
+ const permissions = await this.identityContext.getPermissions("cms.contentEntry");
19
+ if (!permissions.length) return false;
20
+ return !permissions.some((p)=>!p.own);
21
+ }
22
+ }
23
+ const CmsSchedulerPermissions = SchedulerPermissions.createImplementation({
24
+ implementation: CmsSchedulerPermissionsImpl,
25
+ dependencies: [
26
+ IdentityContext
27
+ ]
28
+ });
29
+ export { CmsSchedulerPermissions };
30
+
31
+ //# sourceMappingURL=CmsSchedulerPermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/permissions/CmsSchedulerPermissions.js","sources":["../../../src/features/permissions/CmsSchedulerPermissions.ts"],"sourcesContent":["import { SchedulerPermissions } from \"@webiny/api-scheduler/features/permissions/abstractions.js\";\nimport { IdentityContext } from \"@webiny/api-core/exports/api/security.js\";\nimport { CMS_NAMESPACE } from \"~/utils/namespace.js\";\n\nclass CmsSchedulerPermissionsImpl implements SchedulerPermissions.Interface {\n constructor(private identityContext: IdentityContext.Interface) {}\n\n canHandle(namespace: string): boolean {\n return namespace.startsWith(CMS_NAMESPACE);\n }\n\n async canRead(): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return true;\n }\n const permissions = await this.identityContext.getPermissions(\"cms.contentEntry\");\n return permissions.length > 0;\n }\n\n async onlyOwnRecords(): Promise<boolean> {\n if (await this.identityContext.hasFullAccess()) {\n return false;\n }\n const permissions = await this.identityContext.getPermissions(\"cms.contentEntry\");\n if (!permissions.length) {\n return false;\n }\n return !permissions.some((p: any) => !p.own);\n }\n}\n\nexport const CmsSchedulerPermissions = SchedulerPermissions.createImplementation({\n implementation: CmsSchedulerPermissionsImpl,\n dependencies: [IdentityContext]\n});\n"],"names":["CmsSchedulerPermissionsImpl","identityContext","namespace","CMS_NAMESPACE","permissions","p","CmsSchedulerPermissions","SchedulerPermissions","IdentityContext"],"mappings":";;;AAIA,MAAMA;IACF,YAAoBC,eAA0C,CAAE;aAA5CA,eAAe,GAAfA;IAA6C;IAEjE,UAAUC,SAAiB,EAAW;QAClC,OAAOA,UAAU,UAAU,CAACC;IAChC;IAEA,MAAM,UAA4B;QAC9B,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,IACxC,OAAO;QAEX,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;QAC9D,OAAOA,YAAY,MAAM,GAAG;IAChC;IAEA,MAAM,iBAAmC;QACrC,IAAI,MAAM,IAAI,CAAC,eAAe,CAAC,aAAa,IACxC,OAAO;QAEX,MAAMA,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC;QAC9D,IAAI,CAACA,YAAY,MAAM,EACnB,OAAO;QAEX,OAAO,CAACA,YAAY,IAAI,CAAC,CAACC,IAAW,CAACA,EAAE,GAAG;IAC/C;AACJ;AAEO,MAAMC,0BAA0BC,qBAAqB,oBAAoB,CAAC;IAC7E,gBAAgBP;IAChB,cAAc;QAACQ;KAAgB;AACnC"}
package/index.d.ts CHANGED
@@ -1,2 +1 @@
1
- import { ContextPlugin } from "@webiny/api";
2
- export declare const createHeadlessCmsScheduler: () => ContextPlugin[];
1
+ export { CmsSchedulerFeature } from "./CmsSchedulerFeature.js";
package/index.js CHANGED
@@ -1,7 +1 @@
1
- import { createHeadlessCmsScheduleContext } from "./context.js";
2
- const createHeadlessCmsScheduler = ()=>[
3
- createHeadlessCmsScheduleContext()
4
- ];
5
- export { createHeadlessCmsScheduler };
6
-
7
- //# sourceMappingURL=index.js.map
1
+ export { CmsSchedulerFeature } from "./CmsSchedulerFeature.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-scheduler",
3
- "version": "0.0.0-unstable.7be00a75a9",
3
+ "version": "0.0.0-unstable.7c2def32a7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -17,24 +17,19 @@
17
17
  },
18
18
  "license": "MIT",
19
19
  "dependencies": {
20
- "@webiny/api": "0.0.0-unstable.7be00a75a9",
21
- "@webiny/api-headless-cms": "0.0.0-unstable.7be00a75a9",
22
- "@webiny/api-scheduler": "0.0.0-unstable.7be00a75a9",
23
- "@webiny/feature": "0.0.0-unstable.7be00a75a9",
24
- "@webiny/handler-graphql": "0.0.0-unstable.7be00a75a9"
20
+ "@webiny/api": "0.0.0-unstable.7c2def32a7",
21
+ "@webiny/api-headless-cms": "0.0.0-unstable.7c2def32a7",
22
+ "@webiny/api-scheduler": "0.0.0-unstable.7c2def32a7",
23
+ "@webiny/feature": "0.0.0-unstable.7c2def32a7"
25
24
  },
26
25
  "devDependencies": {
27
- "@webiny/api-core": "0.0.0-unstable.7be00a75a9",
28
- "@webiny/aws-sdk": "0.0.0-unstable.7be00a75a9",
29
- "@webiny/build-tools": "0.0.0-unstable.7be00a75a9",
30
- "@webiny/handler": "0.0.0-unstable.7be00a75a9",
31
- "@webiny/handler-aws": "0.0.0-unstable.7be00a75a9",
32
- "@webiny/plugins": "0.0.0-unstable.7be00a75a9",
33
- "@webiny/project-utils": "0.0.0-unstable.7be00a75a9",
34
- "@webiny/wcp": "0.0.0-unstable.7be00a75a9",
35
- "aws-sdk-client-mock": "4.1.0",
36
- "typescript": "6.0.3",
37
- "vitest": "4.1.7"
26
+ "@webiny/api-core": "0.0.0-unstable.7c2def32a7",
27
+ "@webiny/api-headless-cms-testing": "0.0.0-unstable.7c2def32a7",
28
+ "@webiny/api-opensearch": "0.0.0-unstable.7c2def32a7",
29
+ "@webiny/build-tools": "0.0.0-unstable.7c2def32a7",
30
+ "@webiny/wcp": "0.0.0-unstable.7c2def32a7",
31
+ "typescript": "7.0.2",
32
+ "vitest": "4.1.11"
38
33
  },
39
34
  "publishConfig": {
40
35
  "access": "public"
package/context.d.ts DELETED
@@ -1,2 +0,0 @@
1
- import { ContextPlugin } from "@webiny/api";
2
- export declare const createHeadlessCmsScheduleContext: () => ContextPlugin<import("@webiny/api/types").Context>;
package/context.js DELETED
@@ -1,18 +0,0 @@
1
- import { ContextPlugin } from "@webiny/api";
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";
8
- const createHeadlessCmsScheduleContext = ()=>new ContextPlugin(async (context)=>{
9
- context.container.register(NamespaceHandler);
10
- context.container.register(PublishEntryActionHandler);
11
- context.container.register(UnpublishEntryActionHandler);
12
- context.container.register(SchedulePublishEntryUseCase);
13
- context.container.register(ScheduleUnpublishEntryUseCase);
14
- CancelScheduledActionOnEntryChangeFeature.register(context.container);
15
- });
16
- export { createHeadlessCmsScheduleContext };
17
-
18
- //# sourceMappingURL=context.js.map
package/context.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"context.js","sources":["../src/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"],"names":["createHeadlessCmsScheduleContext","ContextPlugin","context","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","CancelScheduledActionOnEntryChangeFeature"],"mappings":";;;;;;;AAQO,MAAMA,mCAAmC,IACrC,IAAIC,cAAc,OAAMC;QAC3BA,QAAQ,SAAS,CAAC,QAAQ,CAACC;QAC3BD,QAAQ,SAAS,CAAC,QAAQ,CAACE;QAC3BF,QAAQ,SAAS,CAAC,QAAQ,CAACG;QAC3BH,QAAQ,SAAS,CAAC,QAAQ,CAACI;QAC3BJ,QAAQ,SAAS,CAAC,QAAQ,CAACK;QAE3BC,0CAA0C,QAAQ,CAACN,QAAQ,SAAS;IACxE"}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createHeadlessCmsScheduleContext } from \"~/context.js\";\nimport { ContextPlugin } from \"@webiny/api\";\n\nexport const createHeadlessCmsScheduler = (): ContextPlugin[] => {\n return [createHeadlessCmsScheduleContext()];\n};\n"],"names":["createHeadlessCmsScheduler","createHeadlessCmsScheduleContext"],"mappings":";AAGO,MAAMA,6BAA6B,IAC/B;QAACC;KAAmC"}