@webiny/api-website-builder-scheduler 0.0.0-unstable.7be00a75a9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/constants.d.ts +4 -0
  4. package/constants.js +10 -0
  5. package/constants.js.map +1 -0
  6. package/context.d.ts +2 -0
  7. package/context.js +28 -0
  8. package/context.js.map +1 -0
  9. package/exports/api/website-builder/scheduler.d.ts +4 -0
  10. package/exports/api/website-builder/scheduler.js +4 -0
  11. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageDeleteEventHandler.d.ts +18 -0
  12. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageDeleteEventHandler.js +35 -0
  13. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageDeleteEventHandler.js.map +1 -0
  14. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPagePublishEventHandler.d.ts +19 -0
  15. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPagePublishEventHandler.js +35 -0
  16. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPagePublishEventHandler.js.map +1 -0
  17. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageUnpublishEventHandler.d.ts +19 -0
  18. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageUnpublishEventHandler.js +35 -0
  19. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageUnpublishEventHandler.js.map +1 -0
  20. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnRedirectDeleteEventHandler.d.ts +19 -0
  21. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnRedirectDeleteEventHandler.js +34 -0
  22. package/features/CancelScheduledActionOnChange/CancelScheduledActionOnRedirectDeleteEventHandler.js.map +1 -0
  23. package/features/CancelScheduledActionOnChange/feature.d.ts +11 -0
  24. package/features/CancelScheduledActionOnChange/feature.js +17 -0
  25. package/features/CancelScheduledActionOnChange/feature.js.map +1 -0
  26. package/features/NamespaceHandler/PageNamespaceHandler.d.ts +14 -0
  27. package/features/NamespaceHandler/PageNamespaceHandler.js +39 -0
  28. package/features/NamespaceHandler/PageNamespaceHandler.js.map +1 -0
  29. package/features/NamespaceHandler/RedirectNamespaceHandler.d.ts +14 -0
  30. package/features/NamespaceHandler/RedirectNamespaceHandler.js +39 -0
  31. package/features/NamespaceHandler/RedirectNamespaceHandler.js.map +1 -0
  32. package/features/PublishActionHandler/PublishPageActionHandler.d.ts +16 -0
  33. package/features/PublishActionHandler/PublishPageActionHandler.js +30 -0
  34. package/features/PublishActionHandler/PublishPageActionHandler.js.map +1 -0
  35. package/features/PublishActionHandler/PublishRedirectActionHandler.d.ts +17 -0
  36. package/features/PublishActionHandler/PublishRedirectActionHandler.js +30 -0
  37. package/features/PublishActionHandler/PublishRedirectActionHandler.js.map +1 -0
  38. package/features/SchedulePublishPageUseCase/SchedulePublishPageUseCase.d.ts +11 -0
  39. package/features/SchedulePublishPageUseCase/SchedulePublishPageUseCase.js +31 -0
  40. package/features/SchedulePublishPageUseCase/SchedulePublishPageUseCase.js.map +1 -0
  41. package/features/SchedulePublishPageUseCase/abstractions.d.ts +21 -0
  42. package/features/SchedulePublishPageUseCase/abstractions.js +5 -0
  43. package/features/SchedulePublishPageUseCase/abstractions.js.map +1 -0
  44. package/features/SchedulePublishRedirectUseCase/SchedulePublishRedirectUseCase.d.ts +11 -0
  45. package/features/SchedulePublishRedirectUseCase/SchedulePublishRedirectUseCase.js +31 -0
  46. package/features/SchedulePublishRedirectUseCase/SchedulePublishRedirectUseCase.js.map +1 -0
  47. package/features/SchedulePublishRedirectUseCase/abstractions.d.ts +21 -0
  48. package/features/SchedulePublishRedirectUseCase/abstractions.js +5 -0
  49. package/features/SchedulePublishRedirectUseCase/abstractions.js.map +1 -0
  50. package/features/ScheduleUnpublishPageUseCase/ScheduleUnpublishPageUseCase.d.ts +11 -0
  51. package/features/ScheduleUnpublishPageUseCase/ScheduleUnpublishPageUseCase.js +31 -0
  52. package/features/ScheduleUnpublishPageUseCase/ScheduleUnpublishPageUseCase.js.map +1 -0
  53. package/features/ScheduleUnpublishPageUseCase/abstractions.d.ts +21 -0
  54. package/features/ScheduleUnpublishPageUseCase/abstractions.js +5 -0
  55. package/features/ScheduleUnpublishPageUseCase/abstractions.js.map +1 -0
  56. package/features/ScheduleUnpublishRedirectUseCase/ScheduleUnpublishRedirectUseCase.d.ts +11 -0
  57. package/features/ScheduleUnpublishRedirectUseCase/ScheduleUnpublishRedirectUseCase.js +31 -0
  58. package/features/ScheduleUnpublishRedirectUseCase/ScheduleUnpublishRedirectUseCase.js.map +1 -0
  59. package/features/ScheduleUnpublishRedirectUseCase/abstractions.d.ts +21 -0
  60. package/features/ScheduleUnpublishRedirectUseCase/abstractions.js +5 -0
  61. package/features/ScheduleUnpublishRedirectUseCase/abstractions.js.map +1 -0
  62. package/features/UnpublishActionHandler/UnpublishPageActionHandler.d.ts +17 -0
  63. package/features/UnpublishActionHandler/UnpublishPageActionHandler.js +30 -0
  64. package/features/UnpublishActionHandler/UnpublishPageActionHandler.js.map +1 -0
  65. package/features/UnpublishActionHandler/UnpublishRedirectActionHandler.d.ts +18 -0
  66. package/features/UnpublishActionHandler/UnpublishRedirectActionHandler.js +30 -0
  67. package/features/UnpublishActionHandler/UnpublishRedirectActionHandler.js.map +1 -0
  68. package/index.d.ts +2 -0
  69. package/index.js +7 -0
  70. package/index.js.map +1 -0
  71. package/package.json +47 -0
  72. package/types.d.ts +6 -0
  73. package/types.js +0 -0
  74. package/utils/namespace.d.ts +3 -0
  75. package/utils/namespace.js +11 -0
  76. package/utils/namespace.js.map +1 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) Webiny
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # @webiny/api-website-builder-scheduler
2
+
3
+ > [!NOTE]
4
+ > This package is part of the [Webiny](https://www.webiny.com) monorepo.
5
+ > It’s **included in every Webiny project by default** and is not meant to be used as a standalone package.
6
+
7
+ 📘 **Documentation:** [https://www.webiny.com/docs](https://www.webiny.com/docs)
8
+
9
+ ---
10
+
11
+ _This README file is automatically generated during the publish process._
package/constants.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare const WEBSITE_BUILDER_NAMESPACE = "WebsiteBuilder/Type/";
2
+ export declare const SCHEDULED_ACTION_TYPE_PAGE: "page";
3
+ export declare const SCHEDULED_ACTION_TYPE_REDIRECT: "redirect";
4
+ export declare const SCHEDULED_ACTION_TYPES: readonly ["page", "redirect"];
package/constants.js ADDED
@@ -0,0 +1,10 @@
1
+ const WEBSITE_BUILDER_NAMESPACE = "WebsiteBuilder/Type/";
2
+ const SCHEDULED_ACTION_TYPE_PAGE = "page";
3
+ const SCHEDULED_ACTION_TYPE_REDIRECT = "redirect";
4
+ const SCHEDULED_ACTION_TYPES = [
5
+ SCHEDULED_ACTION_TYPE_PAGE,
6
+ SCHEDULED_ACTION_TYPE_REDIRECT
7
+ ];
8
+ export { SCHEDULED_ACTION_TYPES, SCHEDULED_ACTION_TYPE_PAGE, SCHEDULED_ACTION_TYPE_REDIRECT, WEBSITE_BUILDER_NAMESPACE };
9
+
10
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../src/constants.ts"],"sourcesContent":["export const WEBSITE_BUILDER_NAMESPACE = \"WebsiteBuilder/Type/\";\n\nexport const SCHEDULED_ACTION_TYPE_PAGE = \"page\" as const;\nexport const SCHEDULED_ACTION_TYPE_REDIRECT = \"redirect\" as const;\n\nexport const SCHEDULED_ACTION_TYPES = [\n SCHEDULED_ACTION_TYPE_PAGE,\n SCHEDULED_ACTION_TYPE_REDIRECT\n] as const;\n"],"names":["WEBSITE_BUILDER_NAMESPACE","SCHEDULED_ACTION_TYPE_PAGE","SCHEDULED_ACTION_TYPE_REDIRECT","SCHEDULED_ACTION_TYPES"],"mappings":"AAAO,MAAMA,4BAA4B;AAElC,MAAMC,6BAA6B;AACnC,MAAMC,iCAAiC;AAEvC,MAAMC,yBAAyB;IAClCF;IACAC;CACH"}
package/context.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { ContextPlugin } from "@webiny/api";
2
+ export declare const createWebsiteBuilderScheduleContext: () => ContextPlugin<import("@webiny/api/types").Context>;
package/context.js ADDED
@@ -0,0 +1,28 @@
1
+ import { ContextPlugin } from "@webiny/api";
2
+ import { CancelScheduledActionOnChangeFeature } from "./features/CancelScheduledActionOnChange/feature.js";
3
+ import { PageNamespaceHandler } from "./features/NamespaceHandler/PageNamespaceHandler.js";
4
+ import { RedirectNamespaceHandler } from "./features/NamespaceHandler/RedirectNamespaceHandler.js";
5
+ import { PublishPageActionHandler } from "./features/PublishActionHandler/PublishPageActionHandler.js";
6
+ import { PublishRedirectActionHandler } from "./features/PublishActionHandler/PublishRedirectActionHandler.js";
7
+ import { UnpublishPageActionHandler } from "./features/UnpublishActionHandler/UnpublishPageActionHandler.js";
8
+ import { UnpublishRedirectActionHandler } from "./features/UnpublishActionHandler/UnpublishRedirectActionHandler.js";
9
+ import { SchedulePublishPageUseCase } from "./features/SchedulePublishPageUseCase/SchedulePublishPageUseCase.js";
10
+ import { ScheduleUnpublishPageUseCase } from "./features/ScheduleUnpublishPageUseCase/ScheduleUnpublishPageUseCase.js";
11
+ import { SchedulePublishRedirectUseCase } from "./features/SchedulePublishRedirectUseCase/SchedulePublishRedirectUseCase.js";
12
+ import { ScheduleUnpublishRedirectUseCase } from "./features/ScheduleUnpublishRedirectUseCase/ScheduleUnpublishRedirectUseCase.js";
13
+ const createWebsiteBuilderScheduleContext = ()=>new ContextPlugin(async (context)=>{
14
+ context.container.register(PageNamespaceHandler);
15
+ context.container.register(RedirectNamespaceHandler);
16
+ context.container.register(PublishPageActionHandler);
17
+ context.container.register(PublishRedirectActionHandler);
18
+ context.container.register(UnpublishPageActionHandler);
19
+ context.container.register(UnpublishRedirectActionHandler);
20
+ context.container.register(SchedulePublishPageUseCase);
21
+ context.container.register(ScheduleUnpublishPageUseCase);
22
+ context.container.register(SchedulePublishRedirectUseCase);
23
+ context.container.register(ScheduleUnpublishRedirectUseCase);
24
+ CancelScheduledActionOnChangeFeature.register(context.container);
25
+ });
26
+ export { createWebsiteBuilderScheduleContext };
27
+
28
+ //# sourceMappingURL=context.js.map
package/context.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { CancelScheduledActionOnChangeFeature } from \"~/features/CancelScheduledActionOnChange/feature.js\";\nimport { PageNamespaceHandler } from \"~/features/NamespaceHandler/PageNamespaceHandler.js\";\nimport { RedirectNamespaceHandler } from \"~/features/NamespaceHandler/RedirectNamespaceHandler.js\";\nimport { PublishPageActionHandler } from \"~/features/PublishActionHandler/PublishPageActionHandler.js\";\nimport { PublishRedirectActionHandler } from \"~/features/PublishActionHandler/PublishRedirectActionHandler.js\";\nimport { UnpublishPageActionHandler } from \"~/features/UnpublishActionHandler/UnpublishPageActionHandler.js\";\nimport { UnpublishRedirectActionHandler } from \"~/features/UnpublishActionHandler/UnpublishRedirectActionHandler.js\";\nimport { SchedulePublishPageUseCase } from \"~/features/SchedulePublishPageUseCase/SchedulePublishPageUseCase.js\";\nimport { ScheduleUnpublishPageUseCase } from \"~/features/ScheduleUnpublishPageUseCase/ScheduleUnpublishPageUseCase.js\";\nimport { SchedulePublishRedirectUseCase } from \"~/features/SchedulePublishRedirectUseCase/SchedulePublishRedirectUseCase.js\";\nimport { ScheduleUnpublishRedirectUseCase } from \"~/features/ScheduleUnpublishRedirectUseCase/ScheduleUnpublishRedirectUseCase.js\";\n\nexport const createWebsiteBuilderScheduleContext = () => {\n return new ContextPlugin(async context => {\n context.container.register(PageNamespaceHandler);\n context.container.register(RedirectNamespaceHandler);\n context.container.register(PublishPageActionHandler);\n context.container.register(PublishRedirectActionHandler);\n context.container.register(UnpublishPageActionHandler);\n context.container.register(UnpublishRedirectActionHandler);\n context.container.register(SchedulePublishPageUseCase);\n context.container.register(ScheduleUnpublishPageUseCase);\n context.container.register(SchedulePublishRedirectUseCase);\n context.container.register(ScheduleUnpublishRedirectUseCase);\n\n CancelScheduledActionOnChangeFeature.register(context.container);\n });\n};\n"],"names":["createWebsiteBuilderScheduleContext","ContextPlugin","context","PageNamespaceHandler","RedirectNamespaceHandler","PublishPageActionHandler","PublishRedirectActionHandler","UnpublishPageActionHandler","UnpublishRedirectActionHandler","SchedulePublishPageUseCase","ScheduleUnpublishPageUseCase","SchedulePublishRedirectUseCase","ScheduleUnpublishRedirectUseCase","CancelScheduledActionOnChangeFeature"],"mappings":";;;;;;;;;;;;AAaO,MAAMA,sCAAsC,IACxC,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;QAC3BL,QAAQ,SAAS,CAAC,QAAQ,CAACM;QAC3BN,QAAQ,SAAS,CAAC,QAAQ,CAACO;QAC3BP,QAAQ,SAAS,CAAC,QAAQ,CAACQ;QAC3BR,QAAQ,SAAS,CAAC,QAAQ,CAACS;QAC3BT,QAAQ,SAAS,CAAC,QAAQ,CAACU;QAE3BC,qCAAqC,QAAQ,CAACX,QAAQ,SAAS;IACnE"}
@@ -0,0 +1,4 @@
1
+ export { SchedulePublishPageUseCase } from "../../../features/SchedulePublishPageUseCase/abstractions.js";
2
+ export { ScheduleUnpublishPageUseCase } from "../../../features/ScheduleUnpublishPageUseCase/abstractions.js";
3
+ export { SchedulePublishRedirectUseCase } from "../../../features/SchedulePublishRedirectUseCase/abstractions.js";
4
+ export { ScheduleUnpublishRedirectUseCase } from "../../../features/ScheduleUnpublishRedirectUseCase/abstractions.js";
@@ -0,0 +1,4 @@
1
+ export { SchedulePublishPageUseCase } from "../../../features/SchedulePublishPageUseCase/abstractions.js";
2
+ export { ScheduleUnpublishPageUseCase } from "../../../features/ScheduleUnpublishPageUseCase/abstractions.js";
3
+ export { SchedulePublishRedirectUseCase } from "../../../features/SchedulePublishRedirectUseCase/abstractions.js";
4
+ export { ScheduleUnpublishRedirectUseCase } from "../../../features/ScheduleUnpublishRedirectUseCase/abstractions.js";
@@ -0,0 +1,18 @@
1
+ import { PageAfterDeleteEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled actions when a page is deleted.
5
+ *
6
+ * When a user deletes a page revision, any scheduled publish/unpublish
7
+ * actions for that revision should be canceled since the page no longer exists.
8
+ */
9
+ declare class CancelScheduledActionOnPageDeleteHandlerImpl implements PageAfterDeleteEventHandler.Interface {
10
+ private listScheduledActions;
11
+ private cancelScheduledAction;
12
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
13
+ handle(event: PageAfterDeleteEventHandler.Event): Promise<void>;
14
+ }
15
+ export declare const CancelScheduledActionOnPageDeleteEventHandler: typeof CancelScheduledActionOnPageDeleteHandlerImpl & {
16
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("@webiny/api-website-builder/features/pages/DeletePage/abstractions").PageAfterDeletePayload>>>;
17
+ };
18
+ export {};
@@ -0,0 +1,35 @@
1
+ import { PageAfterDeleteEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ import { SCHEDULED_ACTION_TYPE_PAGE } from "../../constants.js";
5
+ class CancelScheduledActionOnPageDeleteHandlerImpl {
6
+ constructor(listScheduledActions, cancelScheduledAction){
7
+ this.listScheduledActions = listScheduledActions;
8
+ this.cancelScheduledAction = cancelScheduledAction;
9
+ }
10
+ async handle(event) {
11
+ const { page } = event.payload;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ limit: 10000,
14
+ where: {
15
+ namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),
16
+ targetId: page.id
17
+ }
18
+ });
19
+ const actions = actionsResult.value.items;
20
+ for (const action of actions){
21
+ const cancelRes = await this.cancelScheduledAction.execute(action);
22
+ cancelRes.isFail();
23
+ }
24
+ }
25
+ }
26
+ const CancelScheduledActionOnPageDeleteEventHandler = PageAfterDeleteEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnPageDeleteHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
32
+ });
33
+ export { CancelScheduledActionOnPageDeleteEventHandler };
34
+
35
+ //# sourceMappingURL=CancelScheduledActionOnPageDeleteEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnChange/CancelScheduledActionOnPageDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageDeleteEventHandler.ts"],"sourcesContent":["import { PageAfterDeleteEventHandler } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { SCHEDULED_ACTION_TYPE_PAGE } from \"~/constants.js\";\n\n/**\n * Cancels scheduled actions when a page is deleted.\n *\n * When a user deletes a page revision, any scheduled publish/unpublish\n * actions for that revision should be canceled since the page no longer exists.\n */\nclass CancelScheduledActionOnPageDeleteHandlerImpl\n implements PageAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: PageAfterDeleteEventHandler.Event): Promise<void> {\n const { page } = event.payload;\n\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),\n targetId: page.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 // The page was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPageDeleteEventHandler =\n PageAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPageDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnPageDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","page","actionsResult","createNamespace","SCHEDULED_ACTION_TYPE_PAGE","actions","action","cancelRes","CancelScheduledActionOnPageDeleteEventHandler","PageAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;;AAcA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAwC,EAAiB;QAClE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAE9B,MAAME,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;YACP,OAAO;gBACH,WAAWC,gBAAgBC;gBAC3B,UAAUH,KAAK,EAAE;YACrB;QACJ;QAEA,MAAMI,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,gDACTC,4BAA4B,oBAAoB,CAAC;IAC7C,gBAAgBZ;IAChB,cAAc;QAACa;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { PageAfterPublishEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled "publish" when a page is manually published.
5
+ *
6
+ * When a user manually publishes a page, any scheduled publish
7
+ * action for that page should be canceled since the manual action
8
+ * takes precedence.
9
+ */
10
+ declare class CancelScheduledActionOnPublishEventHandlerImpl implements PageAfterPublishEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: PageAfterPublishEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnPagePublishEventHandler: typeof CancelScheduledActionOnPublishEventHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("@webiny/api-website-builder/features/pages/PublishPage/abstractions").PageAfterPublishPayload>>>;
18
+ };
19
+ export {};
@@ -0,0 +1,35 @@
1
+ import { PageAfterPublishEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ import { SCHEDULED_ACTION_TYPE_PAGE } from "../../constants.js";
5
+ class CancelScheduledActionOnPublishEventHandlerImpl {
6
+ constructor(listScheduledActions, cancelScheduledAction){
7
+ this.listScheduledActions = listScheduledActions;
8
+ this.cancelScheduledAction = cancelScheduledAction;
9
+ }
10
+ async handle(event) {
11
+ const { page } = event.payload;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),
15
+ actionType: ScheduledActionTypePublish,
16
+ targetId: page.id
17
+ }
18
+ });
19
+ const actions = actionsResult.value.items;
20
+ for (const action of actions){
21
+ const cancelRes = await this.cancelScheduledAction.execute(action);
22
+ cancelRes.isFail();
23
+ }
24
+ }
25
+ }
26
+ const CancelScheduledActionOnPagePublishEventHandler = PageAfterPublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnPublishEventHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
32
+ });
33
+ export { CancelScheduledActionOnPagePublishEventHandler };
34
+
35
+ //# sourceMappingURL=CancelScheduledActionOnPagePublishEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnChange/CancelScheduledActionOnPagePublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnChange/CancelScheduledActionOnPagePublishEventHandler.ts"],"sourcesContent":["import { PageAfterPublishEventHandler } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { SCHEDULED_ACTION_TYPE_PAGE } from \"~/constants.js\";\n\n/**\n * Cancels scheduled \"publish\" when a page is manually published.\n *\n * When a user manually publishes a page, any scheduled publish\n * action for that page should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements PageAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: PageAfterPublishEventHandler.Event): Promise<void> {\n const { page } = event.payload;\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),\n actionType: ScheduledActionTypePublish,\n targetId: page.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 page, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPagePublishEventHandler =\n PageAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnPublishEventHandlerImpl","listScheduledActions","cancelScheduledAction","event","page","actionsResult","createNamespace","SCHEDULED_ACTION_TYPE_PAGE","ScheduledActionTypePublish","actions","action","cancelRes","CancelScheduledActionOnPagePublishEventHandler","PageAfterPublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;;AAgBA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAE9B,MAAME,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBC;gBAC3B,YAAYC;gBACZ,UAAUJ,KAAK,EAAE;YACrB;QACJ;QAEA,MAAMK,UAAUJ,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMK,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,iDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { PageAfterUnpublishEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled "unpublish" when a page is manually unpublished.
5
+ *
6
+ * When a user manually unpublishes a page, any scheduled unpublish
7
+ * action for that page should be canceled since the manual action
8
+ * takes precedence.
9
+ */
10
+ declare class CancelScheduledActionOnUnpublishHandlerImpl implements PageAfterUnpublishEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: PageAfterUnpublishEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnPageUnpublishEventHandler: typeof CancelScheduledActionOnUnpublishHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("@webiny/api-website-builder/features/pages/UnpublishPage/abstractions").PageAfterUnpublishPayload>>>;
18
+ };
19
+ export {};
@@ -0,0 +1,35 @@
1
+ import { PageAfterUnpublishEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypeUnpublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ import { SCHEDULED_ACTION_TYPE_PAGE } from "../../constants.js";
5
+ class CancelScheduledActionOnUnpublishHandlerImpl {
6
+ constructor(listScheduledActions, cancelScheduledAction){
7
+ this.listScheduledActions = listScheduledActions;
8
+ this.cancelScheduledAction = cancelScheduledAction;
9
+ }
10
+ async handle(event) {
11
+ const { page } = event.payload;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),
15
+ actionType: ScheduledActionTypeUnpublish,
16
+ targetId: page.id
17
+ }
18
+ });
19
+ const actions = actionsResult.value.items;
20
+ for (const action of actions){
21
+ const cancelRes = await this.cancelScheduledAction.execute(action);
22
+ cancelRes.isFail();
23
+ }
24
+ }
25
+ }
26
+ const CancelScheduledActionOnPageUnpublishEventHandler = PageAfterUnpublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnUnpublishHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
32
+ });
33
+ export { CancelScheduledActionOnPageUnpublishEventHandler };
34
+
35
+ //# sourceMappingURL=CancelScheduledActionOnPageUnpublishEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnChange/CancelScheduledActionOnPageUnpublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnChange/CancelScheduledActionOnPageUnpublishEventHandler.ts"],"sourcesContent":["import { PageAfterUnpublishEventHandler } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { SCHEDULED_ACTION_TYPE_PAGE } from \"~/constants.js\";\n\n/**\n * Cancels scheduled \"unpublish\" when a page is manually unpublished.\n *\n * When a user manually unpublishes a page, any scheduled unpublish\n * action for that page should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements PageAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: PageAfterUnpublishEventHandler.Event): Promise<void> {\n const { page } = event.payload;\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(SCHEDULED_ACTION_TYPE_PAGE),\n actionType: ScheduledActionTypeUnpublish,\n targetId: page.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 // Page was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPageUnpublishEventHandler =\n PageAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnUnpublishHandlerImpl","listScheduledActions","cancelScheduledAction","event","page","actionsResult","createNamespace","SCHEDULED_ACTION_TYPE_PAGE","ScheduledActionTypeUnpublish","actions","action","cancelRes","CancelScheduledActionOnPageUnpublishEventHandler","PageAfterUnpublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;;AAgBA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA2C,EAAiB;QACrE,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAM,OAAO;QAE9B,MAAME,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBC;gBAC3B,YAAYC;gBACZ,UAAUJ,KAAK,EAAE;YACrB;QACJ;QAEA,MAAMK,UAAUJ,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMK,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,mDACTC,+BAA+B,oBAAoB,CAAC;IAChD,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { RedirectAfterDeleteEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/redirect.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled actions when a redirect is deleted.
5
+ *
6
+ * When a user deletes a redirect, any scheduled publish/unpublish
7
+ * actions for that redirect should be canceled since the redirect
8
+ * no longer exists.
9
+ */
10
+ declare class CancelScheduledActionOnRedirectDeleteHandlerImpl implements RedirectAfterDeleteEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: RedirectAfterDeleteEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnRedirectDeleteEventHandler: typeof CancelScheduledActionOnRedirectDeleteHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-core/features/eventPublisher").DomainEvent<import("@webiny/api-website-builder/features/redirects/DeleteRedirect/abstractions").RedirectAfterDeletePayload>>>;
18
+ };
19
+ export {};
@@ -0,0 +1,34 @@
1
+ import { RedirectAfterDeleteEventHandler } from "@webiny/api-website-builder/exports/api/website-builder/redirect.js";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ import { SCHEDULED_ACTION_TYPE_REDIRECT } from "../../constants.js";
5
+ class CancelScheduledActionOnRedirectDeleteHandlerImpl {
6
+ constructor(listScheduledActions, cancelScheduledAction){
7
+ this.listScheduledActions = listScheduledActions;
8
+ this.cancelScheduledAction = cancelScheduledAction;
9
+ }
10
+ async handle(event) {
11
+ const { redirect } = event.payload;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(SCHEDULED_ACTION_TYPE_REDIRECT),
15
+ targetId: redirect.id
16
+ }
17
+ });
18
+ const actions = actionsResult.value.items;
19
+ for (const action of actions){
20
+ const cancelRes = await this.cancelScheduledAction.execute(action);
21
+ cancelRes.isFail();
22
+ }
23
+ }
24
+ }
25
+ const CancelScheduledActionOnRedirectDeleteEventHandler = RedirectAfterDeleteEventHandler.createImplementation({
26
+ implementation: CancelScheduledActionOnRedirectDeleteHandlerImpl,
27
+ dependencies: [
28
+ ListScheduledActionsUseCase,
29
+ CancelScheduledActionUseCase
30
+ ]
31
+ });
32
+ export { CancelScheduledActionOnRedirectDeleteEventHandler };
33
+
34
+ //# sourceMappingURL=CancelScheduledActionOnRedirectDeleteEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnChange/CancelScheduledActionOnRedirectDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnChange/CancelScheduledActionOnRedirectDeleteEventHandler.ts"],"sourcesContent":["import { RedirectAfterDeleteEventHandler } from \"@webiny/api-website-builder/exports/api/website-builder/redirect.js\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\nimport { SCHEDULED_ACTION_TYPE_REDIRECT } from \"~/constants.js\";\n\n/**\n * Cancels scheduled actions when a redirect is deleted.\n *\n * When a user deletes a redirect, any scheduled publish/unpublish\n * actions for that redirect should be canceled since the redirect\n * no longer exists.\n */\nclass CancelScheduledActionOnRedirectDeleteHandlerImpl\n implements RedirectAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: RedirectAfterDeleteEventHandler.Event): Promise<void> {\n const { redirect } = event.payload;\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(SCHEDULED_ACTION_TYPE_REDIRECT),\n targetId: redirect.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 // The redirect was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRedirectDeleteEventHandler =\n RedirectAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnRedirectDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnRedirectDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","redirect","actionsResult","createNamespace","SCHEDULED_ACTION_TYPE_REDIRECT","actions","action","cancelRes","CancelScheduledActionOnRedirectDeleteEventHandler","RedirectAfterDeleteEventHandler","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,QAAQ,EAAE,GAAGD,MAAM,OAAO;QAElC,MAAME,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBC;gBAC3B,UAAUH,SAAS,EAAE;YACzB;QACJ;QAEA,MAAMI,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,oDACTC,gCAAgC,oBAAoB,CAAC;IACjD,gBAAgBZ;IAChB,cAAc;QAACa;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CancelScheduledActionOnChange Feature
3
+ *
4
+ * Automatically cancels scheduled actions when pages or redirects are manually
5
+ * published, unpublished, or deleted. This ensures scheduled actions
6
+ * don't execute after a user has already performed the action manually.
7
+ */
8
+ export declare const CancelScheduledActionOnChangeFeature: {
9
+ name: string;
10
+ register(container: import("@webiny/di").Container): void;
11
+ };
@@ -0,0 +1,17 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { CancelScheduledActionOnPagePublishEventHandler } from "./CancelScheduledActionOnPagePublishEventHandler.js";
3
+ import { CancelScheduledActionOnPageUnpublishEventHandler } from "./CancelScheduledActionOnPageUnpublishEventHandler.js";
4
+ import { CancelScheduledActionOnPageDeleteEventHandler } from "./CancelScheduledActionOnPageDeleteEventHandler.js";
5
+ import { CancelScheduledActionOnRedirectDeleteEventHandler } from "./CancelScheduledActionOnRedirectDeleteEventHandler.js";
6
+ const CancelScheduledActionOnChangeFeature = createFeature({
7
+ name: "CancelScheduledActionOnChange",
8
+ register (container) {
9
+ container.register(CancelScheduledActionOnPagePublishEventHandler);
10
+ container.register(CancelScheduledActionOnPageUnpublishEventHandler);
11
+ container.register(CancelScheduledActionOnPageDeleteEventHandler);
12
+ container.register(CancelScheduledActionOnRedirectDeleteEventHandler);
13
+ }
14
+ });
15
+ export { CancelScheduledActionOnChangeFeature };
16
+
17
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnChange/feature.js","sources":["../../../src/features/CancelScheduledActionOnChange/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelScheduledActionOnPagePublishEventHandler } from \"./CancelScheduledActionOnPagePublishEventHandler.js\";\nimport { CancelScheduledActionOnPageUnpublishEventHandler } from \"./CancelScheduledActionOnPageUnpublishEventHandler.js\";\nimport { CancelScheduledActionOnPageDeleteEventHandler } from \"./CancelScheduledActionOnPageDeleteEventHandler.js\";\nimport { CancelScheduledActionOnRedirectDeleteEventHandler } from \"./CancelScheduledActionOnRedirectDeleteEventHandler.js\";\n\n/**\n * CancelScheduledActionOnChange Feature\n *\n * Automatically cancels scheduled actions when pages or redirects are manually\n * published, unpublished, or deleted. This ensures scheduled actions\n * don't execute after a user has already performed the action manually.\n */\nexport const CancelScheduledActionOnChangeFeature = createFeature({\n name: \"CancelScheduledActionOnChange\",\n register(container) {\n container.register(CancelScheduledActionOnPagePublishEventHandler);\n container.register(CancelScheduledActionOnPageUnpublishEventHandler);\n container.register(CancelScheduledActionOnPageDeleteEventHandler);\n container.register(CancelScheduledActionOnRedirectDeleteEventHandler);\n }\n});\n"],"names":["CancelScheduledActionOnChangeFeature","createFeature","container","CancelScheduledActionOnPagePublishEventHandler","CancelScheduledActionOnPageUnpublishEventHandler","CancelScheduledActionOnPageDeleteEventHandler","CancelScheduledActionOnRedirectDeleteEventHandler"],"mappings":";;;;;AAaO,MAAMA,uCAAuCC,cAAc;IAC9D,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC;QACnBD,UAAU,QAAQ,CAACE;QACnBF,UAAU,QAAQ,CAACG;QACnBH,UAAU,QAAQ,CAACI;IACvB;AACJ"}
@@ -0,0 +1,14 @@
1
+ import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import type { GenericRecord } from "@webiny/api/types.js";
3
+ import type { IScheduledActionPayload } from "../../types.js";
4
+ import { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
5
+ declare class PageNamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {
6
+ private getPageByIdUseCase;
7
+ constructor(getPageByIdUseCase: GetPageByIdUseCase.Interface);
8
+ canHandle(namespace: string): boolean;
9
+ execute(params: NamespaceHandlerAbstraction.Params): NamespaceHandlerAbstraction.Response<IScheduledActionPayload>;
10
+ }
11
+ export declare const PageNamespaceHandler: typeof PageNamespaceHandlerImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/features/NamespaceHandler/abstractions").INamespaceHandler<GenericRecord>>;
13
+ };
14
+ export {};
@@ -0,0 +1,39 @@
1
+ import { NamespaceHandler } 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 { SCHEDULED_ACTION_TYPE_PAGE } from "../../constants.js";
5
+ import { GetPageByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
6
+ class PageNamespaceHandlerImpl {
7
+ constructor(getPageByIdUseCase){
8
+ this.getPageByIdUseCase = getPageByIdUseCase;
9
+ }
10
+ canHandle(namespace) {
11
+ const type = extractModelIdFromNamespace(namespace);
12
+ return type === SCHEDULED_ACTION_TYPE_PAGE;
13
+ }
14
+ async execute(params) {
15
+ const type = extractModelIdFromNamespace(params.namespace);
16
+ const pageResult = await this.getPageByIdUseCase.execute(params.targetId);
17
+ if (pageResult.isFail()) return Result.fail(pageResult.error);
18
+ const page = pageResult.value;
19
+ const title = page.properties.title || "Unknown page title";
20
+ return Result.ok({
21
+ namespace: params.namespace,
22
+ title,
23
+ type,
24
+ actionType: params.actionType,
25
+ targetId: params.targetId,
26
+ scheduleId: params.scheduleId,
27
+ immediately: params.immediately || false
28
+ });
29
+ }
30
+ }
31
+ const PageNamespaceHandler = NamespaceHandler.createImplementation({
32
+ implementation: PageNamespaceHandlerImpl,
33
+ dependencies: [
34
+ GetPageByIdUseCase
35
+ ]
36
+ });
37
+ export { PageNamespaceHandler };
38
+
39
+ //# sourceMappingURL=PageNamespaceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/NamespaceHandler/PageNamespaceHandler.js","sources":["../../../src/features/NamespaceHandler/PageNamespaceHandler.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 type { GenericRecord } from \"@webiny/api/types.js\";\nimport { SCHEDULED_ACTION_TYPE_PAGE } from \"~/constants.js\";\nimport type { IScheduledActionPayload } from \"~/types.js\";\nimport { GetPageByIdUseCase } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\n\nclass PageNamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {\n public constructor(private getPageByIdUseCase: GetPageByIdUseCase.Interface) {}\n\n public canHandle(namespace: string): boolean {\n const type = extractModelIdFromNamespace(namespace);\n return type === SCHEDULED_ACTION_TYPE_PAGE;\n }\n\n public async execute(\n params: NamespaceHandlerAbstraction.Params\n ): NamespaceHandlerAbstraction.Response<IScheduledActionPayload> {\n const type = extractModelIdFromNamespace(params.namespace)!;\n\n const pageResult = await this.getPageByIdUseCase.execute(params.targetId);\n if (pageResult.isFail()) {\n return Result.fail(pageResult.error as any);\n }\n const page = pageResult.value;\n\n const title = page.properties.title || \"Unknown page title\";\n\n return Result.ok({\n namespace: params.namespace,\n title,\n type,\n actionType: params.actionType,\n targetId: params.targetId,\n scheduleId: params.scheduleId,\n immediately: params.immediately || false\n });\n }\n}\n\nexport const PageNamespaceHandler = NamespaceHandlerAbstraction.createImplementation({\n implementation: PageNamespaceHandlerImpl,\n dependencies: [GetPageByIdUseCase]\n});\n"],"names":["PageNamespaceHandlerImpl","getPageByIdUseCase","namespace","type","extractModelIdFromNamespace","SCHEDULED_ACTION_TYPE_PAGE","params","pageResult","Result","page","title","PageNamespaceHandler","NamespaceHandlerAbstraction","GetPageByIdUseCase"],"mappings":";;;;;AAQA,MAAMA;IACF,YAA2BC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;IAAmD;IAEvE,UAAUC,SAAiB,EAAW;QACzC,MAAMC,OAAOC,4BAA4BF;QACzC,OAAOC,SAASE;IACpB;IAEA,MAAa,QACTC,MAA0C,EACmB;QAC7D,MAAMH,OAAOC,4BAA4BE,OAAO,SAAS;QAEzD,MAAMC,aAAa,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAACD,OAAO,QAAQ;QACxE,IAAIC,WAAW,MAAM,IACjB,OAAOC,OAAO,IAAI,CAACD,WAAW,KAAK;QAEvC,MAAME,OAAOF,WAAW,KAAK;QAE7B,MAAMG,QAAQD,KAAK,UAAU,CAAC,KAAK,IAAI;QAEvC,OAAOD,OAAO,EAAE,CAAC;YACb,WAAWF,OAAO,SAAS;YAC3BI;YACAP;YACA,YAAYG,OAAO,UAAU;YAC7B,UAAUA,OAAO,QAAQ;YACzB,YAAYA,OAAO,UAAU;YAC7B,aAAaA,OAAO,WAAW,IAAI;QACvC;IACJ;AACJ;AAEO,MAAMK,uBAAuBC,iBAAAA,oBAAgD,CAAC;IACjF,gBAAgBZ;IAChB,cAAc;QAACa;KAAmB;AACtC"}
@@ -0,0 +1,14 @@
1
+ import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import type { GenericRecord } from "@webiny/api/types.js";
3
+ import type { IScheduledActionPayload } from "../../types.js";
4
+ import { GetRedirectByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/redirect.js";
5
+ declare class RedirectNamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {
6
+ private getRedirectByIdUseCase;
7
+ constructor(getRedirectByIdUseCase: GetRedirectByIdUseCase.Interface);
8
+ canHandle(namespace: string): boolean;
9
+ execute(params: NamespaceHandlerAbstraction.Params): NamespaceHandlerAbstraction.Response<IScheduledActionPayload>;
10
+ }
11
+ export declare const RedirectNamespaceHandler: typeof RedirectNamespaceHandlerImpl & {
12
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/features/NamespaceHandler/abstractions").INamespaceHandler<GenericRecord>>;
13
+ };
14
+ export {};
@@ -0,0 +1,39 @@
1
+ import { NamespaceHandler } 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 { SCHEDULED_ACTION_TYPE_REDIRECT } from "../../constants.js";
5
+ import { GetRedirectByIdUseCase } from "@webiny/api-website-builder/exports/api/website-builder/redirect.js";
6
+ class RedirectNamespaceHandlerImpl {
7
+ constructor(getRedirectByIdUseCase){
8
+ this.getRedirectByIdUseCase = getRedirectByIdUseCase;
9
+ }
10
+ canHandle(namespace) {
11
+ const type = extractModelIdFromNamespace(namespace);
12
+ return type === SCHEDULED_ACTION_TYPE_REDIRECT;
13
+ }
14
+ async execute(params) {
15
+ const type = extractModelIdFromNamespace(params.namespace);
16
+ const redirectResult = await this.getRedirectByIdUseCase.execute(params.targetId);
17
+ if (redirectResult.isFail()) return Result.fail(redirectResult.error);
18
+ const redirect = redirectResult.value;
19
+ const title = redirect.redirectFrom || "Unknown redirect title";
20
+ return Result.ok({
21
+ namespace: params.namespace,
22
+ title,
23
+ type,
24
+ actionType: params.actionType,
25
+ targetId: params.targetId,
26
+ scheduleId: params.scheduleId,
27
+ immediately: params.immediately || false
28
+ });
29
+ }
30
+ }
31
+ const RedirectNamespaceHandler = NamespaceHandler.createImplementation({
32
+ implementation: RedirectNamespaceHandlerImpl,
33
+ dependencies: [
34
+ GetRedirectByIdUseCase
35
+ ]
36
+ });
37
+ export { RedirectNamespaceHandler };
38
+
39
+ //# sourceMappingURL=RedirectNamespaceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/NamespaceHandler/RedirectNamespaceHandler.js","sources":["../../../src/features/NamespaceHandler/RedirectNamespaceHandler.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 type { GenericRecord } from \"@webiny/api/types.js\";\nimport { SCHEDULED_ACTION_TYPE_REDIRECT } from \"~/constants.js\";\nimport type { IScheduledActionPayload } from \"~/types.js\";\nimport { GetRedirectByIdUseCase } from \"@webiny/api-website-builder/exports/api/website-builder/redirect.js\";\n\nclass RedirectNamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {\n public constructor(private getRedirectByIdUseCase: GetRedirectByIdUseCase.Interface) {}\n\n public canHandle(namespace: string): boolean {\n const type = extractModelIdFromNamespace(namespace);\n\n return type === SCHEDULED_ACTION_TYPE_REDIRECT;\n }\n\n public async execute(\n params: NamespaceHandlerAbstraction.Params\n ): NamespaceHandlerAbstraction.Response<IScheduledActionPayload> {\n const type = extractModelIdFromNamespace(params.namespace)!;\n\n const redirectResult = await this.getRedirectByIdUseCase.execute(params.targetId);\n if (redirectResult.isFail()) {\n return Result.fail(redirectResult.error as any);\n }\n const redirect = redirectResult.value;\n\n const title = redirect.redirectFrom || \"Unknown redirect title\";\n\n return Result.ok({\n namespace: params.namespace,\n title,\n type,\n actionType: params.actionType,\n targetId: params.targetId,\n scheduleId: params.scheduleId,\n immediately: params.immediately || false\n });\n }\n}\n\nexport const RedirectNamespaceHandler = NamespaceHandlerAbstraction.createImplementation({\n implementation: RedirectNamespaceHandlerImpl,\n dependencies: [GetRedirectByIdUseCase]\n});\n"],"names":["RedirectNamespaceHandlerImpl","getRedirectByIdUseCase","namespace","type","extractModelIdFromNamespace","SCHEDULED_ACTION_TYPE_REDIRECT","params","redirectResult","Result","redirect","title","RedirectNamespaceHandler","NamespaceHandlerAbstraction","GetRedirectByIdUseCase"],"mappings":";;;;;AAQA,MAAMA;IACF,YAA2BC,sBAAwD,CAAE;aAA1DA,sBAAsB,GAAtBA;IAA2D;IAE/E,UAAUC,SAAiB,EAAW;QACzC,MAAMC,OAAOC,4BAA4BF;QAEzC,OAAOC,SAASE;IACpB;IAEA,MAAa,QACTC,MAA0C,EACmB;QAC7D,MAAMH,OAAOC,4BAA4BE,OAAO,SAAS;QAEzD,MAAMC,iBAAiB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAACD,OAAO,QAAQ;QAChF,IAAIC,eAAe,MAAM,IACrB,OAAOC,OAAO,IAAI,CAACD,eAAe,KAAK;QAE3C,MAAME,WAAWF,eAAe,KAAK;QAErC,MAAMG,QAAQD,SAAS,YAAY,IAAI;QAEvC,OAAOD,OAAO,EAAE,CAAC;YACb,WAAWF,OAAO,SAAS;YAC3BI;YACAP;YACA,YAAYG,OAAO,UAAU;YAC7B,UAAUA,OAAO,QAAQ;YACzB,YAAYA,OAAO,UAAU;YAC7B,aAAaA,OAAO,WAAW,IAAI;QACvC;IACJ;AACJ;AAEO,MAAMK,2BAA2BC,iBAAAA,oBAAgD,CAAC;IACrF,gBAAgBZ;IAChB,cAAc;QAACa;KAAuB;AAC1C"}
@@ -0,0 +1,16 @@
1
+ import { ScheduledActionHandler, ScheduledActionType, type IScheduledAction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { PublishPageUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
3
+ import type { IScheduledActionPayload } from "../../types.js";
4
+ /**
5
+ * Handles the scheduled "publish" action for Website Builder pages.
6
+ */
7
+ declare class PublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {
8
+ private publishPageUseCase;
9
+ constructor(publishPageUseCase: PublishPageUseCase.Interface);
10
+ canHandle(namespace: string, actionType: ScheduledActionType): boolean;
11
+ handle(action: IScheduledAction<IScheduledActionPayload>): Promise<void>;
12
+ }
13
+ export declare const PublishPageActionHandler: typeof PublishPageActionHandlerImpl & {
14
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/shared/abstractions").IScheduledActionHandler>;
15
+ };
16
+ export {};
@@ -0,0 +1,30 @@
1
+ import { ScheduledActionHandler, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { PublishPageUseCase } from "@webiny/api-website-builder/exports/api/website-builder/page.js";
3
+ import { extractModelIdFromNamespace } from "../../utils/namespace.js";
4
+ import { SCHEDULED_ACTION_TYPE_PAGE } from "../../constants.js";
5
+ class PublishPageActionHandlerImpl {
6
+ constructor(publishPageUseCase){
7
+ this.publishPageUseCase = publishPageUseCase;
8
+ }
9
+ canHandle(namespace, actionType) {
10
+ return extractModelIdFromNamespace(namespace) === SCHEDULED_ACTION_TYPE_PAGE && actionType === ScheduledActionTypePublish;
11
+ }
12
+ async handle(action) {
13
+ const result = await this.publishPageUseCase.execute({
14
+ id: action.targetId
15
+ });
16
+ if (result.isFail()) {
17
+ console.error(`Failed to publish page "${action.targetId}":`, result.error);
18
+ throw new Error(`Failed to publish page: ${action.targetId}`);
19
+ }
20
+ }
21
+ }
22
+ const PublishPageActionHandler = ScheduledActionHandler.createImplementation({
23
+ implementation: PublishPageActionHandlerImpl,
24
+ dependencies: [
25
+ PublishPageUseCase
26
+ ]
27
+ });
28
+ export { PublishPageActionHandler };
29
+
30
+ //# sourceMappingURL=PublishPageActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/PublishActionHandler/PublishPageActionHandler.js","sources":["../../../src/features/PublishActionHandler/PublishPageActionHandler.ts"],"sourcesContent":["import {\n ScheduledActionHandler,\n ScheduledActionType,\n type IScheduledAction,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { PublishPageUseCase } from \"@webiny/api-website-builder/exports/api/website-builder/page.js\";\nimport type { IScheduledActionPayload } from \"~/types.js\";\nimport { extractModelIdFromNamespace } from \"~/utils/namespace.js\";\nimport { SCHEDULED_ACTION_TYPE_PAGE } from \"~/constants.js\";\n\n/**\n * Handles the scheduled \"publish\" action for Website Builder pages.\n */\nclass PublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(private publishPageUseCase: PublishPageUseCase.Interface) {}\n\n public canHandle(namespace: string, actionType: ScheduledActionType): boolean {\n return (\n extractModelIdFromNamespace(namespace) === SCHEDULED_ACTION_TYPE_PAGE &&\n actionType === ScheduledActionTypePublish\n );\n }\n\n public async handle(action: IScheduledAction<IScheduledActionPayload>): Promise<void> {\n const result = await this.publishPageUseCase.execute({ id: action.targetId });\n if (result.isFail()) {\n console.error(`Failed to publish page \"${action.targetId}\":`, result.error);\n throw new Error(`Failed to publish page: ${action.targetId}`);\n }\n }\n}\n\nexport const PublishPageActionHandler = ScheduledActionHandler.createImplementation({\n implementation: PublishPageActionHandlerImpl,\n dependencies: [PublishPageUseCase]\n});\n"],"names":["PublishPageActionHandlerImpl","publishPageUseCase","namespace","actionType","extractModelIdFromNamespace","SCHEDULED_ACTION_TYPE_PAGE","ScheduledActionTypePublish","action","result","console","Error","PublishPageActionHandler","ScheduledActionHandler","PublishPageUseCase"],"mappings":";;;;AAcA,MAAMA;IACF,YAAoBC,kBAAgD,CAAE;aAAlDA,kBAAkB,GAAlBA;IAAmD;IAEhE,UAAUC,SAAiB,EAAEC,UAA+B,EAAW;QAC1E,OACIC,4BAA4BF,eAAeG,8BAC3CF,eAAeG;IAEvB;IAEA,MAAa,OAAOC,MAAiD,EAAiB;QAClF,MAAMC,SAAS,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAAE,IAAID,OAAO,QAAQ;QAAC;QAC3E,IAAIC,OAAO,MAAM,IAAI;YACjBC,QAAQ,KAAK,CAAC,CAAC,wBAAwB,EAAEF,OAAO,QAAQ,CAAC,EAAE,CAAC,EAAEC,OAAO,KAAK;YAC1E,MAAM,IAAIE,MAAM,CAAC,wBAAwB,EAAEH,OAAO,QAAQ,EAAE;QAChE;IACJ;AACJ;AAEO,MAAMI,2BAA2BC,uBAAuB,oBAAoB,CAAC;IAChF,gBAAgBZ;IAChB,cAAc;QAACa;KAAmB;AACtC"}