@webiny/api-website-builder-scheduler 6.0.0-rc.6

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 (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +11 -0
  3. package/context.d.ts +2 -0
  4. package/context.js +13 -0
  5. package/context.js.map +1 -0
  6. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnDeleteEventHandler.d.ts +20 -0
  7. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnDeleteEventHandler.js +48 -0
  8. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnDeleteEventHandler.js.map +1 -0
  9. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnPublishEventHandler.d.ts +19 -0
  10. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnPublishEventHandler.js +45 -0
  11. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -0
  12. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnUnpublishEventHandler.d.ts +19 -0
  13. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnUnpublishEventHandler.js +45 -0
  14. package/features/CancelScheduledActionOnPageChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -0
  15. package/features/CancelScheduledActionOnPageChange/feature.d.ts +8 -0
  16. package/features/CancelScheduledActionOnPageChange/feature.js +22 -0
  17. package/features/CancelScheduledActionOnPageChange/feature.js.map +1 -0
  18. package/features/CancelScheduledPageAction/CancelScheduledPageActionUseCase.d.ts +15 -0
  19. package/features/CancelScheduledPageAction/CancelScheduledPageActionUseCase.js +25 -0
  20. package/features/CancelScheduledPageAction/CancelScheduledPageActionUseCase.js.map +1 -0
  21. package/features/CancelScheduledPageAction/abstractions.d.ts +22 -0
  22. package/features/CancelScheduledPageAction/abstractions.js +11 -0
  23. package/features/CancelScheduledPageAction/abstractions.js.map +1 -0
  24. package/features/CancelScheduledPageAction/feature.d.ts +6 -0
  25. package/features/CancelScheduledPageAction/feature.js +16 -0
  26. package/features/CancelScheduledPageAction/feature.js.map +1 -0
  27. package/features/CancelScheduledPageAction/index.d.ts +1 -0
  28. package/features/CancelScheduledPageAction/index.js +3 -0
  29. package/features/CancelScheduledPageAction/index.js.map +1 -0
  30. package/features/SchedulePageAction/SchedulePageActionUseCase.d.ts +25 -0
  31. package/features/SchedulePageAction/SchedulePageActionUseCase.js +74 -0
  32. package/features/SchedulePageAction/SchedulePageActionUseCase.js.map +1 -0
  33. package/features/SchedulePageAction/abstractions.d.ts +42 -0
  34. package/features/SchedulePageAction/abstractions.js +17 -0
  35. package/features/SchedulePageAction/abstractions.js.map +1 -0
  36. package/features/SchedulePageAction/actionHandlers/PublishPageActionHandler.d.ts +22 -0
  37. package/features/SchedulePageAction/actionHandlers/PublishPageActionHandler.js +34 -0
  38. package/features/SchedulePageAction/actionHandlers/PublishPageActionHandler.js.map +1 -0
  39. package/features/SchedulePageAction/actionHandlers/UnpublishPageActionHandler.d.ts +22 -0
  40. package/features/SchedulePageAction/actionHandlers/UnpublishPageActionHandler.js +34 -0
  41. package/features/SchedulePageAction/actionHandlers/UnpublishPageActionHandler.js.map +1 -0
  42. package/features/SchedulePageAction/feature.d.ts +7 -0
  43. package/features/SchedulePageAction/feature.js +21 -0
  44. package/features/SchedulePageAction/feature.js.map +1 -0
  45. package/features/SchedulePageAction/index.d.ts +1 -0
  46. package/features/SchedulePageAction/index.js +3 -0
  47. package/features/SchedulePageAction/index.js.map +1 -0
  48. package/graphql/ActionMapper.d.ts +12 -0
  49. package/graphql/ActionMapper.js +15 -0
  50. package/graphql/ActionMapper.js.map +1 -0
  51. package/graphql/dates.d.ts +6 -0
  52. package/graphql/dates.js +9 -0
  53. package/graphql/dates.js.map +1 -0
  54. package/graphql/index.d.ts +2 -0
  55. package/graphql/index.js +239 -0
  56. package/graphql/index.js.map +1 -0
  57. package/graphql/schema.d.ts +142 -0
  58. package/graphql/schema.js +76 -0
  59. package/graphql/schema.js.map +1 -0
  60. package/index.d.ts +6 -0
  61. package/index.js +12 -0
  62. package/index.js.map +1 -0
  63. package/package.json +44 -0
@@ -0,0 +1,42 @@
1
+ import { Result } from "@webiny/feature/api";
2
+ import type { IScheduledAction } from "@webiny/api-scheduler";
3
+ import { InvalidScheduleDateError, ScheduledActionPersistenceError, SchedulerServiceError } from "@webiny/api-scheduler/domain/errors.js";
4
+ import type { GetPageByIdUseCase } from "@webiny/api-website-builder/features/pages/GetPageById/abstractions.js";
5
+ /**
6
+ * SchedulePageActionUseCase - Schedule a WB page action (publish/unpublish)
7
+ *
8
+ * This is a convenience use case for scheduling WB page actions.
9
+ * It handles:
10
+ * - Immediate execution (via RunAction)
11
+ * - Future scheduling (via ScheduleAction)
12
+ * - Fetching page title for schedule metadata
13
+ */
14
+ export type SchedulePageActionType = "Publish" | "Unpublish";
15
+ export interface ISchedulePageActionPayload {
16
+ readonly _type: "Wb/Page";
17
+ }
18
+ export interface ISchedulePageActionWithPayload extends IScheduledAction<ISchedulePageActionPayload> {
19
+ }
20
+ export interface ISchedulePageActionInput {
21
+ targetId: string;
22
+ actionType: SchedulePageActionType;
23
+ immediately?: boolean;
24
+ scheduleFor?: string;
25
+ }
26
+ export interface ISchedulePageActionErrors {
27
+ persistence: ScheduledActionPersistenceError;
28
+ invalidDate: InvalidScheduleDateError;
29
+ schedulerService: SchedulerServiceError;
30
+ pageError: GetPageByIdUseCase.Error;
31
+ }
32
+ type SchedulePageActionError = ISchedulePageActionErrors[keyof ISchedulePageActionErrors];
33
+ export interface ISchedulePageActionUseCase {
34
+ execute(input: ISchedulePageActionInput): Promise<Result<IScheduledAction<ISchedulePageActionPayload>, SchedulePageActionError>>;
35
+ }
36
+ export declare const SchedulePageActionUseCase: import("@webiny/di").Abstraction<ISchedulePageActionUseCase>;
37
+ export declare namespace SchedulePageActionUseCase {
38
+ type Interface = ISchedulePageActionUseCase;
39
+ type Input = ISchedulePageActionInput;
40
+ type Error = SchedulePageActionError;
41
+ }
42
+ export {};
@@ -0,0 +1,17 @@
1
+ import { createAbstraction } from "@webiny/feature/api";
2
+
3
+ /**
4
+ * SchedulePageActionUseCase - Schedule a WB page action (publish/unpublish)
5
+ *
6
+ * This is a convenience use case for scheduling WB page actions.
7
+ * It handles:
8
+ * - Immediate execution (via RunAction)
9
+ * - Future scheduling (via ScheduleAction)
10
+ * - Fetching page title for schedule metadata
11
+ */
12
+
13
+ // Pages have one fixed model, so no payload is needed beyond what the scheduler stores.
14
+
15
+ export const SchedulePageActionUseCase = createAbstraction("SchedulePageActionUseCase");
16
+
17
+ //# sourceMappingURL=abstractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAbstraction","SchedulePageActionUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IScheduledAction } from \"@webiny/api-scheduler\";\nimport {\n InvalidScheduleDateError,\n ScheduledActionPersistenceError,\n SchedulerServiceError\n} from \"@webiny/api-scheduler/domain/errors.js\";\nimport type { GetPageByIdUseCase } from \"@webiny/api-website-builder/features/pages/GetPageById/abstractions.js\";\n\n/**\n * SchedulePageActionUseCase - Schedule a WB page action (publish/unpublish)\n *\n * This is a convenience use case for scheduling WB page actions.\n * It handles:\n * - Immediate execution (via RunAction)\n * - Future scheduling (via ScheduleAction)\n * - Fetching page title for schedule metadata\n */\n\nexport type SchedulePageActionType = \"Publish\" | \"Unpublish\";\n\n// Pages have one fixed model, so no payload is needed beyond what the scheduler stores.\nexport interface ISchedulePageActionPayload {\n readonly _type: \"Wb/Page\";\n}\n\nexport interface ISchedulePageActionWithPayload\n extends IScheduledAction<ISchedulePageActionPayload> {}\n\nexport interface ISchedulePageActionInput {\n targetId: string;\n actionType: SchedulePageActionType;\n immediately?: boolean;\n scheduleFor?: string;\n}\n\nexport interface ISchedulePageActionErrors {\n persistence: ScheduledActionPersistenceError;\n invalidDate: InvalidScheduleDateError;\n schedulerService: SchedulerServiceError;\n pageError: GetPageByIdUseCase.Error;\n}\n\ntype SchedulePageActionError = ISchedulePageActionErrors[keyof ISchedulePageActionErrors];\n\nexport interface ISchedulePageActionUseCase {\n execute(\n input: ISchedulePageActionInput\n ): Promise<Result<IScheduledAction<ISchedulePageActionPayload>, SchedulePageActionError>>;\n}\n\nexport const SchedulePageActionUseCase = createAbstraction<ISchedulePageActionUseCase>(\n \"SchedulePageActionUseCase\"\n);\n\nexport namespace SchedulePageActionUseCase {\n export type Interface = ISchedulePageActionUseCase;\n export type Input = ISchedulePageActionInput;\n export type Error = SchedulePageActionError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAS/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIA;;AA8BA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,2BACJ,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { ScheduledActionHandler } from "@webiny/api-scheduler";
2
+ import { PublishPageUseCase } from "@webiny/api-website-builder/features/pages/PublishPage/abstractions.js";
3
+ import type { ISchedulePageActionWithPayload } from "../../../features/SchedulePageAction/index.js";
4
+ /**
5
+ * Handler for publishing WB pages.
6
+ *
7
+ * Handles the "Publish" action for WB pages with namespace: Wb/Page.
8
+ *
9
+ * Publishing logic:
10
+ * 1. Resolve PublishPageUseCase from the container.
11
+ * 2. Call execute with the target page revision ID.
12
+ */
13
+ declare class PublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {
14
+ private publishPageUseCase;
15
+ constructor(publishPageUseCase: PublishPageUseCase.Interface);
16
+ canHandle(namespace: string, actionType: string): boolean;
17
+ handle(action: ISchedulePageActionWithPayload): Promise<void>;
18
+ }
19
+ export declare const PublishPageActionHandler: typeof PublishPageActionHandlerImpl & {
20
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/shared/abstractions").IScheduledActionHandler>;
21
+ };
22
+ export {};
@@ -0,0 +1,34 @@
1
+ import { ScheduledActionHandler } from "@webiny/api-scheduler";
2
+ import { PublishPageUseCase } from "@webiny/api-website-builder/features/pages/PublishPage/abstractions.js";
3
+ /**
4
+ * Handler for publishing WB pages.
5
+ *
6
+ * Handles the "Publish" action for WB pages with namespace: Wb/Page.
7
+ *
8
+ * Publishing logic:
9
+ * 1. Resolve PublishPageUseCase from the container.
10
+ * 2. Call execute with the target page revision ID.
11
+ */
12
+ class PublishPageActionHandlerImpl {
13
+ constructor(publishPageUseCase) {
14
+ this.publishPageUseCase = publishPageUseCase;
15
+ }
16
+ canHandle(namespace, actionType) {
17
+ return namespace === "Wb/Page" && actionType === "Publish";
18
+ }
19
+ async handle(action) {
20
+ const result = await this.publishPageUseCase.execute({
21
+ id: action.targetId
22
+ });
23
+ if (result.isFail()) {
24
+ console.error(`Failed to publish page "${action.targetId}" for scheduled publish action:`, result.error);
25
+ throw new Error(`Failed to publish page: ${action.targetId}`);
26
+ }
27
+ }
28
+ }
29
+ export const PublishPageActionHandler = ScheduledActionHandler.createImplementation({
30
+ implementation: PublishPageActionHandlerImpl,
31
+ dependencies: [PublishPageUseCase]
32
+ });
33
+
34
+ //# sourceMappingURL=PublishPageActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ScheduledActionHandler","PublishPageUseCase","PublishPageActionHandlerImpl","constructor","publishPageUseCase","canHandle","namespace","actionType","handle","action","result","execute","id","targetId","isFail","console","error","Error","PublishPageActionHandler","createImplementation","implementation","dependencies"],"sources":["PublishPageActionHandler.ts"],"sourcesContent":["import { ScheduledActionHandler } from \"@webiny/api-scheduler\";\nimport { PublishPageUseCase } from \"@webiny/api-website-builder/features/pages/PublishPage/abstractions.js\";\nimport type { ISchedulePageActionWithPayload } from \"~/features/SchedulePageAction/index.js\";\n\n/**\n * Handler for publishing WB pages.\n *\n * Handles the \"Publish\" action for WB pages with namespace: Wb/Page.\n *\n * Publishing logic:\n * 1. Resolve PublishPageUseCase from the container.\n * 2. Call execute with the target page revision ID.\n */\nclass PublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(private publishPageUseCase: PublishPageUseCase.Interface) {}\n\n public canHandle(namespace: string, actionType: string): boolean {\n return namespace === \"Wb/Page\" && actionType === \"Publish\";\n }\n\n public async handle(action: ISchedulePageActionWithPayload): Promise<void> {\n const result = await this.publishPageUseCase.execute({ id: action.targetId });\n\n if (result.isFail()) {\n console.error(\n `Failed to publish page \"${action.targetId}\" for scheduled publish action:`,\n result.error\n );\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"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,uBAAuB;AAC9D,SAASC,kBAAkB,QAAQ,wEAAwE;AAG3G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,4BAA4B,CAA6C;EAC3EC,WAAWA,CAASC,kBAAgD,EAAE;IAAA,KAAlDA,kBAAgD,GAAhDA,kBAAgD;EAAG;EAEhEC,SAASA,CAACC,SAAiB,EAAEC,UAAkB,EAAW;IAC7D,OAAOD,SAAS,KAAK,SAAS,IAAIC,UAAU,KAAK,SAAS;EAC9D;EAEA,MAAaC,MAAMA,CAACC,MAAsC,EAAiB;IACvE,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACN,kBAAkB,CAACO,OAAO,CAAC;MAAEC,EAAE,EAAEH,MAAM,CAACI;IAAS,CAAC,CAAC;IAE7E,IAAIH,MAAM,CAACI,MAAM,CAAC,CAAC,EAAE;MACjBC,OAAO,CAACC,KAAK,CACT,2BAA2BP,MAAM,CAACI,QAAQ,iCAAiC,EAC3EH,MAAM,CAACM,KACX,CAAC;MACD,MAAM,IAAIC,KAAK,CAAC,2BAA2BR,MAAM,CAACI,QAAQ,EAAE,CAAC;IACjE;EACJ;AACJ;AAEA,OAAO,MAAMK,wBAAwB,GAAGlB,sBAAsB,CAACmB,oBAAoB,CAAC;EAChFC,cAAc,EAAElB,4BAA4B;EAC5CmB,YAAY,EAAE,CAACpB,kBAAkB;AACrC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ import { ScheduledActionHandler } from "@webiny/api-scheduler";
2
+ import { UnpublishPageUseCase } from "@webiny/api-website-builder/features/pages/UnpublishPage/abstractions.js";
3
+ import type { ISchedulePageActionWithPayload } from "../../../features/SchedulePageAction/index.js";
4
+ /**
5
+ * Handler for unpublishing WB pages.
6
+ *
7
+ * Handles the "Unpublish" action for WB pages with namespace: Wb/Page.
8
+ *
9
+ * Unpublishing logic:
10
+ * 1. Resolve UnpublishPageUseCase from the container.
11
+ * 2. Call execute with the target page revision ID.
12
+ */
13
+ declare class UnpublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {
14
+ private unpublishPageUseCase;
15
+ constructor(unpublishPageUseCase: UnpublishPageUseCase.Interface);
16
+ canHandle(namespace: string, actionType: string): boolean;
17
+ handle(action: ISchedulePageActionWithPayload): Promise<void>;
18
+ }
19
+ export declare const UnpublishPageActionHandler: typeof UnpublishPageActionHandlerImpl & {
20
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/shared/abstractions").IScheduledActionHandler>;
21
+ };
22
+ export {};
@@ -0,0 +1,34 @@
1
+ import { ScheduledActionHandler } from "@webiny/api-scheduler";
2
+ import { UnpublishPageUseCase } from "@webiny/api-website-builder/features/pages/UnpublishPage/abstractions.js";
3
+ /**
4
+ * Handler for unpublishing WB pages.
5
+ *
6
+ * Handles the "Unpublish" action for WB pages with namespace: Wb/Page.
7
+ *
8
+ * Unpublishing logic:
9
+ * 1. Resolve UnpublishPageUseCase from the container.
10
+ * 2. Call execute with the target page revision ID.
11
+ */
12
+ class UnpublishPageActionHandlerImpl {
13
+ constructor(unpublishPageUseCase) {
14
+ this.unpublishPageUseCase = unpublishPageUseCase;
15
+ }
16
+ canHandle(namespace, actionType) {
17
+ return namespace === "Wb/Page" && actionType === "Unpublish";
18
+ }
19
+ async handle(action) {
20
+ const result = await this.unpublishPageUseCase.execute({
21
+ id: action.targetId
22
+ });
23
+ if (result.isFail()) {
24
+ console.error(`Failed to unpublish page "${action.targetId}" for scheduled unpublish action:`, result.error);
25
+ throw new Error(`Failed to unpublish page: ${action.targetId}`);
26
+ }
27
+ }
28
+ }
29
+ export const UnpublishPageActionHandler = ScheduledActionHandler.createImplementation({
30
+ implementation: UnpublishPageActionHandlerImpl,
31
+ dependencies: [UnpublishPageUseCase]
32
+ });
33
+
34
+ //# sourceMappingURL=UnpublishPageActionHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ScheduledActionHandler","UnpublishPageUseCase","UnpublishPageActionHandlerImpl","constructor","unpublishPageUseCase","canHandle","namespace","actionType","handle","action","result","execute","id","targetId","isFail","console","error","Error","UnpublishPageActionHandler","createImplementation","implementation","dependencies"],"sources":["UnpublishPageActionHandler.ts"],"sourcesContent":["import { ScheduledActionHandler } from \"@webiny/api-scheduler\";\nimport { UnpublishPageUseCase } from \"@webiny/api-website-builder/features/pages/UnpublishPage/abstractions.js\";\nimport type { ISchedulePageActionWithPayload } from \"~/features/SchedulePageAction/index.js\";\n\n/**\n * Handler for unpublishing WB pages.\n *\n * Handles the \"Unpublish\" action for WB pages with namespace: Wb/Page.\n *\n * Unpublishing logic:\n * 1. Resolve UnpublishPageUseCase from the container.\n * 2. Call execute with the target page revision ID.\n */\nclass UnpublishPageActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(private unpublishPageUseCase: UnpublishPageUseCase.Interface) {}\n\n public canHandle(namespace: string, actionType: string): boolean {\n return namespace === \"Wb/Page\" && actionType === \"Unpublish\";\n }\n\n public async handle(action: ISchedulePageActionWithPayload): Promise<void> {\n const result = await this.unpublishPageUseCase.execute({ id: action.targetId });\n\n if (result.isFail()) {\n console.error(\n `Failed to unpublish page \"${action.targetId}\" for scheduled unpublish action:`,\n result.error\n );\n throw new Error(`Failed to unpublish page: ${action.targetId}`);\n }\n }\n}\n\nexport const UnpublishPageActionHandler = ScheduledActionHandler.createImplementation({\n implementation: UnpublishPageActionHandlerImpl,\n dependencies: [UnpublishPageUseCase]\n});\n"],"mappings":"AAAA,SAASA,sBAAsB,QAAQ,uBAAuB;AAC9D,SAASC,oBAAoB,QAAQ,0EAA0E;AAG/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,8BAA8B,CAA6C;EAC7EC,WAAWA,CAASC,oBAAoD,EAAE;IAAA,KAAtDA,oBAAoD,GAApDA,oBAAoD;EAAG;EAEpEC,SAASA,CAACC,SAAiB,EAAEC,UAAkB,EAAW;IAC7D,OAAOD,SAAS,KAAK,SAAS,IAAIC,UAAU,KAAK,WAAW;EAChE;EAEA,MAAaC,MAAMA,CAACC,MAAsC,EAAiB;IACvE,MAAMC,MAAM,GAAG,MAAM,IAAI,CAACN,oBAAoB,CAACO,OAAO,CAAC;MAAEC,EAAE,EAAEH,MAAM,CAACI;IAAS,CAAC,CAAC;IAE/E,IAAIH,MAAM,CAACI,MAAM,CAAC,CAAC,EAAE;MACjBC,OAAO,CAACC,KAAK,CACT,6BAA6BP,MAAM,CAACI,QAAQ,mCAAmC,EAC/EH,MAAM,CAACM,KACX,CAAC;MACD,MAAM,IAAIC,KAAK,CAAC,6BAA6BR,MAAM,CAACI,QAAQ,EAAE,CAAC;IACnE;EACJ;AACJ;AAEA,OAAO,MAAMK,0BAA0B,GAAGlB,sBAAsB,CAACmB,oBAAoB,CAAC;EAClFC,cAAc,EAAElB,8BAA8B;EAC9CmB,YAAY,EAAE,CAACpB,oBAAoB;AACvC,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SchedulePageAction Feature
3
+ *
4
+ * Provides the ability to schedule WB page actions (publish/unpublish).
5
+ * Handles both immediate execution and future scheduling.
6
+ */
7
+ export declare const SchedulePageActionFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
@@ -0,0 +1,21 @@
1
+ import { createFeature } from "@webiny/feature/api";
2
+ import { SchedulePageActionUseCase } from "./SchedulePageActionUseCase.js";
3
+ import { PublishPageActionHandler } from "./actionHandlers/PublishPageActionHandler.js";
4
+ import { UnpublishPageActionHandler } from "./actionHandlers/UnpublishPageActionHandler.js";
5
+
6
+ /**
7
+ * SchedulePageAction Feature
8
+ *
9
+ * Provides the ability to schedule WB page actions (publish/unpublish).
10
+ * Handles both immediate execution and future scheduling.
11
+ */
12
+ export const SchedulePageActionFeature = createFeature({
13
+ name: "SchedulePageAction",
14
+ register(container) {
15
+ container.register(SchedulePageActionUseCase);
16
+ container.register(PublishPageActionHandler);
17
+ container.register(UnpublishPageActionHandler);
18
+ }
19
+ });
20
+
21
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createFeature","SchedulePageActionUseCase","PublishPageActionHandler","UnpublishPageActionHandler","SchedulePageActionFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SchedulePageActionUseCase } from \"./SchedulePageActionUseCase.js\";\nimport { PublishPageActionHandler } from \"./actionHandlers/PublishPageActionHandler.js\";\nimport { UnpublishPageActionHandler } from \"./actionHandlers/UnpublishPageActionHandler.js\";\n\n/**\n * SchedulePageAction Feature\n *\n * Provides the ability to schedule WB page actions (publish/unpublish).\n * Handles both immediate execution and future scheduling.\n */\nexport const SchedulePageActionFeature = createFeature({\n name: \"SchedulePageAction\",\n register(container) {\n container.register(SchedulePageActionUseCase);\n container.register(PublishPageActionHandler);\n container.register(UnpublishPageActionHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,yBAAyB;AAClC,SAASC,wBAAwB;AACjC,SAASC,0BAA0B;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGJ,aAAa,CAAC;EACnDK,IAAI,EAAE,oBAAoB;EAC1BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACL,yBAAyB,CAAC;IAC7CM,SAAS,CAACD,QAAQ,CAACJ,wBAAwB,CAAC;IAC5CK,SAAS,CAACD,QAAQ,CAACH,0BAA0B,CAAC;EAClD;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export * from "./abstractions.js";
@@ -0,0 +1,3 @@
1
+ export * from "./abstractions.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import type { ISchedulePageActionWithPayload } from "../features/SchedulePageAction/index.js";
2
+ export declare class ActionMapper {
3
+ static fromScheduledAction(action: ISchedulePageActionWithPayload): {
4
+ id: string;
5
+ targetId: string;
6
+ scheduledBy: import("@webiny/api-scheduler/shared/abstractions").Identity;
7
+ publishOn: string | null;
8
+ unpublishOn: string | null;
9
+ type: string;
10
+ title: string | undefined;
11
+ };
12
+ }
@@ -0,0 +1,15 @@
1
+ export class ActionMapper {
2
+ static fromScheduledAction(action) {
3
+ return {
4
+ id: action.id,
5
+ targetId: action.targetId,
6
+ scheduledBy: action.scheduledBy,
7
+ publishOn: action.actionType === "Publish" ? action.scheduledFor : null,
8
+ unpublishOn: action.actionType === "Unpublish" ? action.scheduledFor : null,
9
+ type: action.actionType.toLowerCase(),
10
+ title: action.title
11
+ };
12
+ }
13
+ }
14
+
15
+ //# sourceMappingURL=ActionMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ActionMapper","fromScheduledAction","action","id","targetId","scheduledBy","publishOn","actionType","scheduledFor","unpublishOn","type","toLowerCase","title"],"sources":["ActionMapper.ts"],"sourcesContent":["import type { ISchedulePageActionWithPayload } from \"~/features/SchedulePageAction/index.js\";\n\nexport class ActionMapper {\n static fromScheduledAction(action: ISchedulePageActionWithPayload) {\n return {\n id: action.id,\n targetId: action.targetId,\n scheduledBy: action.scheduledBy,\n publishOn: action.actionType === \"Publish\" ? action.scheduledFor : null,\n unpublishOn: action.actionType === \"Unpublish\" ? action.scheduledFor : null,\n type: action.actionType.toLowerCase(),\n title: action.title\n };\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,YAAY,CAAC;EACtB,OAAOC,mBAAmBA,CAACC,MAAsC,EAAE;IAC/D,OAAO;MACHC,EAAE,EAAED,MAAM,CAACC,EAAE;MACbC,QAAQ,EAAEF,MAAM,CAACE,QAAQ;MACzBC,WAAW,EAAEH,MAAM,CAACG,WAAW;MAC/BC,SAAS,EAAEJ,MAAM,CAACK,UAAU,KAAK,SAAS,GAAGL,MAAM,CAACM,YAAY,GAAG,IAAI;MACvEC,WAAW,EAAEP,MAAM,CAACK,UAAU,KAAK,WAAW,GAAGL,MAAM,CAACM,YAAY,GAAG,IAAI;MAC3EE,IAAI,EAAER,MAAM,CAACK,UAAU,CAACI,WAAW,CAAC,CAAC;MACrCC,KAAK,EAAEV,MAAM,CAACU;IAClB,CAAC;EACL;AACJ","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ export type DateISOString = `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`;
2
+ /**
3
+ * We can safely cast the result of `toISOString()` to `DateISOString` type.
4
+ * We need this to ensure that no malformed date strings are used in the scheduler.
5
+ */
6
+ export declare const dateToISOString: (value: Date) => DateISOString;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * We can safely cast the result of `toISOString()` to `DateISOString` type.
3
+ * We need this to ensure that no malformed date strings are used in the scheduler.
4
+ */
5
+ export const dateToISOString = value => {
6
+ return value.toISOString();
7
+ };
8
+
9
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["dateToISOString","value","toISOString"],"sources":["dates.ts"],"sourcesContent":["export type DateISOString =\n `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`;\n\n/**\n * We can safely cast the result of `toISOString()` to `DateISOString` type.\n * We need this to ensure that no malformed date strings are used in the scheduler.\n */\nexport const dateToISOString = (value: Date): DateISOString => {\n return value.toISOString() as DateISOString;\n};\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAIC,KAAW,IAAoB;EAC3D,OAAOA,KAAK,CAACC,WAAW,CAAC,CAAC;AAC9B,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
+ export declare const createWbSchedulerGraphQL: () => GraphQLSchemaPlugin<import("@webiny/api/types").Context>;
@@ -0,0 +1,239 @@
1
+ import { GraphQLSchemaPlugin } from "@webiny/handler-graphql";
2
+ import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
3
+ import { cancelScheduleSchema, createScheduleSchema, getScheduleSchema, listScheduleSchema, updateScheduleSchema } from "./schema.js";
4
+ import { createZodError } from "@webiny/utils";
5
+ import { ListScheduledActionsUseCase } from "@webiny/api-scheduler/features/ListScheduledActions";
6
+ import { SchedulePageActionUseCase } from "../features/SchedulePageAction/index.js";
7
+ import { CancelScheduledPageActionUseCase } from "../features/CancelScheduledPageAction/index.js";
8
+ import { ActionMapper } from "./ActionMapper.js";
9
+ const typeMap = {
10
+ publish: "Publish",
11
+ unpublish: "Unpublish"
12
+ };
13
+ const resolve = async cb => {
14
+ try {
15
+ const result = await cb();
16
+ return new Response(result);
17
+ } catch (ex) {
18
+ return new ErrorResponse(ex);
19
+ }
20
+ };
21
+ const resolveList = async cb => {
22
+ try {
23
+ const result = await cb();
24
+ return new ListResponse(result.data, result.meta);
25
+ } catch (ex) {
26
+ return new ListErrorResponse(ex);
27
+ }
28
+ };
29
+ export const createWbSchedulerGraphQL = () => {
30
+ return new GraphQLSchemaPlugin({
31
+ typeDefs: /* GraphQL */`
32
+ enum WbScheduleRecordType {
33
+ publish
34
+ unpublish
35
+ }
36
+
37
+ type WbScheduleRecord {
38
+ id: String!
39
+ targetId: String!
40
+ scheduledBy: WbIdentity!
41
+ publishOn: DateTime
42
+ unpublishOn: DateTime
43
+ type: WbScheduleRecordType!
44
+ title: String!
45
+ }
46
+
47
+ type WbGetScheduleResponse {
48
+ data: WbScheduleRecord
49
+ error: WbError
50
+ }
51
+
52
+ type WbListSchedulesResponse {
53
+ data: [WbScheduleRecord!]
54
+ error: WbError
55
+ meta: WbMeta
56
+ }
57
+
58
+ type WbCreateScheduleResponse {
59
+ data: WbScheduleRecord
60
+ error: WbError
61
+ }
62
+
63
+ type WbUpdateScheduleResponse {
64
+ data: WbScheduleRecord
65
+ error: WbError
66
+ }
67
+
68
+ type WbCancelScheduleResponse {
69
+ data: Boolean
70
+ error: WbError
71
+ }
72
+
73
+ input WbListSchedulesWhereInput {
74
+ targetId: ID
75
+ title_contains: String
76
+ title_not_contains: String
77
+ type: WbScheduleRecordType
78
+ scheduledBy: ID
79
+ scheduledFor: DateTime
80
+ scheduledFor_gte: DateTime
81
+ scheduledFor_lte: DateTime
82
+ }
83
+
84
+ enum WbListSchedulesSorter {
85
+ title_ASC
86
+ title_DESC
87
+ scheduledFor_ASC
88
+ scheduledFor_DESC
89
+ }
90
+
91
+ extend type WbQuery {
92
+ getWbSchedule(id: ID!): WbGetScheduleResponse!
93
+ listWbSchedules(
94
+ where: WbListSchedulesWhereInput
95
+ sort: [WbListSchedulesSorter!]
96
+ limit: Int
97
+ after: String
98
+ ): WbListSchedulesResponse!
99
+ }
100
+
101
+ extend type WbMutation {
102
+ createWbSchedule(
103
+ id: ID!
104
+ immediately: Boolean
105
+ scheduleFor: DateTime
106
+ type: WbScheduleRecordType!
107
+ ): WbCreateScheduleResponse!
108
+ updateWbSchedule(
109
+ id: ID!
110
+ immediately: Boolean
111
+ scheduleFor: DateTime
112
+ type: WbScheduleRecordType!
113
+ ): WbUpdateScheduleResponse!
114
+ cancelWbSchedule(id: ID!): WbCancelScheduleResponse!
115
+ }
116
+ `,
117
+ resolvers: {
118
+ WbQuery: {
119
+ async getWbSchedule(_, args, context) {
120
+ return resolve(async () => {
121
+ const validated = await getScheduleSchema.safeParseAsync(args);
122
+ if (validated.error) {
123
+ throw createZodError(validated.error);
124
+ }
125
+ const listActions = context.container.resolve(ListScheduledActionsUseCase);
126
+ const actions = await listActions.execute({
127
+ where: {
128
+ namespace: "Wb/Page",
129
+ targetId: args.id
130
+ }
131
+ });
132
+ if (actions.isFail()) {
133
+ throw actions.error;
134
+ }
135
+ const {
136
+ items
137
+ } = actions.value;
138
+ if (!items.length) {
139
+ return null;
140
+ }
141
+ return ActionMapper.fromScheduledAction(items[0]);
142
+ });
143
+ },
144
+ async listWbSchedules(_, args, context) {
145
+ return resolveList(async () => {
146
+ const validated = await listScheduleSchema.safeParseAsync(args);
147
+ if (validated.error) {
148
+ throw createZodError(validated.error);
149
+ }
150
+ const listActions = context.container.resolve(ListScheduledActionsUseCase);
151
+ const {
152
+ type,
153
+ ...where
154
+ } = validated.data.where ?? {};
155
+ if (type) {
156
+ // @ts-expect-error
157
+ where["actionType"] = typeMap[type];
158
+ }
159
+ const actions = await listActions.execute({
160
+ where: {
161
+ ...where,
162
+ namespace: "Wb/Page"
163
+ },
164
+ // @ts-expect-error sort values are validated by Zod schema
165
+ sort: validated.data.sort,
166
+ limit: validated.data.limit,
167
+ after: validated.data.after
168
+ });
169
+ if (actions.isFail()) {
170
+ throw actions.error;
171
+ }
172
+ return {
173
+ data: actions.value.items.map(item => ActionMapper.fromScheduledAction(item)),
174
+ meta: actions.value.meta
175
+ };
176
+ });
177
+ }
178
+ },
179
+ WbMutation: {
180
+ async createWbSchedule(_, args, context) {
181
+ return resolve(async () => {
182
+ const validated = await createScheduleSchema.safeParseAsync(args);
183
+ if (validated.error) {
184
+ throw createZodError(validated.error);
185
+ }
186
+ const data = validated.data;
187
+ const schedulePage = context.container.resolve(SchedulePageActionUseCase);
188
+ const result = await schedulePage.execute({
189
+ targetId: data.id,
190
+ scheduleFor: data.scheduleFor?.toISOString(),
191
+ immediately: data.immediately,
192
+ actionType: typeMap[data.type]
193
+ });
194
+ if (result.isFail()) {
195
+ throw result.error;
196
+ }
197
+ return ActionMapper.fromScheduledAction(result.value);
198
+ });
199
+ },
200
+ async updateWbSchedule(_, args, context) {
201
+ return resolve(async () => {
202
+ const validated = await updateScheduleSchema.safeParseAsync(args);
203
+ if (validated.error) {
204
+ throw createZodError(validated.error);
205
+ }
206
+ const data = validated.data;
207
+ const schedulePage = context.container.resolve(SchedulePageActionUseCase);
208
+ const result = await schedulePage.execute({
209
+ targetId: data.id,
210
+ scheduleFor: data.scheduleFor?.toISOString(),
211
+ immediately: data.immediately,
212
+ actionType: typeMap[data.type]
213
+ });
214
+ if (result.isFail()) {
215
+ throw result.error;
216
+ }
217
+ return ActionMapper.fromScheduledAction(result.value);
218
+ });
219
+ },
220
+ async cancelWbSchedule(_, args, context) {
221
+ return resolve(async () => {
222
+ const validated = await cancelScheduleSchema.safeParseAsync(args);
223
+ if (validated.error) {
224
+ throw createZodError(validated.error);
225
+ }
226
+ const cancelPageAction = context.container.resolve(CancelScheduledPageActionUseCase);
227
+ const res = await cancelPageAction.execute(validated.data.id);
228
+ if (res.isFail()) {
229
+ throw res.error;
230
+ }
231
+ return true;
232
+ });
233
+ }
234
+ }
235
+ }
236
+ });
237
+ };
238
+
239
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["GraphQLSchemaPlugin","ErrorResponse","ListErrorResponse","ListResponse","Response","cancelScheduleSchema","createScheduleSchema","getScheduleSchema","listScheduleSchema","updateScheduleSchema","createZodError","ListScheduledActionsUseCase","SchedulePageActionUseCase","CancelScheduledPageActionUseCase","ActionMapper","typeMap","publish","unpublish","resolve","cb","result","ex","resolveList","data","meta","createWbSchedulerGraphQL","typeDefs","resolvers","WbQuery","getWbSchedule","_","args","context","validated","safeParseAsync","error","listActions","container","actions","execute","where","namespace","targetId","id","isFail","items","value","length","fromScheduledAction","listWbSchedules","type","sort","limit","after","map","item","WbMutation","createWbSchedule","schedulePage","scheduleFor","toISOString","immediately","actionType","updateWbSchedule","cancelWbSchedule","cancelPageAction","res"],"sources":["index.ts"],"sourcesContent":["import { GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport {\n cancelScheduleSchema,\n createScheduleSchema,\n getScheduleSchema,\n listScheduleSchema,\n updateScheduleSchema\n} from \"~/graphql/schema.js\";\nimport { createZodError } from \"@webiny/utils\";\nimport { ListScheduledActionsUseCase } from \"@webiny/api-scheduler/features/ListScheduledActions\";\nimport {\n type ISchedulePageActionPayload,\n SchedulePageActionUseCase\n} from \"~/features/SchedulePageAction/index.js\";\nimport { CancelScheduledPageActionUseCase } from \"~/features/CancelScheduledPageAction/index.js\";\nimport { ActionMapper } from \"~/graphql/ActionMapper.js\";\n\nconst typeMap = {\n publish: \"Publish\",\n unpublish: \"Unpublish\"\n} as const;\n\nconst resolve = async (cb: () => Promise<unknown>) => {\n try {\n const result = await cb();\n\n return new Response(result);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\ninterface IResolveListCallableResponse {\n data: unknown[];\n meta: unknown;\n}\n\nconst resolveList = async (cb: () => Promise<IResolveListCallableResponse>) => {\n try {\n const result = await cb();\n\n return new ListResponse(result.data, result.meta);\n } catch (ex) {\n return new ListErrorResponse(ex);\n }\n};\n\nexport const createWbSchedulerGraphQL = () => {\n return new GraphQLSchemaPlugin({\n typeDefs: /* GraphQL */ `\n enum WbScheduleRecordType {\n publish\n unpublish\n }\n\n type WbScheduleRecord {\n id: String!\n targetId: String!\n scheduledBy: WbIdentity!\n publishOn: DateTime\n unpublishOn: DateTime\n type: WbScheduleRecordType!\n title: String!\n }\n\n type WbGetScheduleResponse {\n data: WbScheduleRecord\n error: WbError\n }\n\n type WbListSchedulesResponse {\n data: [WbScheduleRecord!]\n error: WbError\n meta: WbMeta\n }\n\n type WbCreateScheduleResponse {\n data: WbScheduleRecord\n error: WbError\n }\n\n type WbUpdateScheduleResponse {\n data: WbScheduleRecord\n error: WbError\n }\n\n type WbCancelScheduleResponse {\n data: Boolean\n error: WbError\n }\n\n input WbListSchedulesWhereInput {\n targetId: ID\n title_contains: String\n title_not_contains: String\n type: WbScheduleRecordType\n scheduledBy: ID\n scheduledFor: DateTime\n scheduledFor_gte: DateTime\n scheduledFor_lte: DateTime\n }\n\n enum WbListSchedulesSorter {\n title_ASC\n title_DESC\n scheduledFor_ASC\n scheduledFor_DESC\n }\n\n extend type WbQuery {\n getWbSchedule(id: ID!): WbGetScheduleResponse!\n listWbSchedules(\n where: WbListSchedulesWhereInput\n sort: [WbListSchedulesSorter!]\n limit: Int\n after: String\n ): WbListSchedulesResponse!\n }\n\n extend type WbMutation {\n createWbSchedule(\n id: ID!\n immediately: Boolean\n scheduleFor: DateTime\n type: WbScheduleRecordType!\n ): WbCreateScheduleResponse!\n updateWbSchedule(\n id: ID!\n immediately: Boolean\n scheduleFor: DateTime\n type: WbScheduleRecordType!\n ): WbUpdateScheduleResponse!\n cancelWbSchedule(id: ID!): WbCancelScheduleResponse!\n }\n `,\n resolvers: {\n WbQuery: {\n async getWbSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await getScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const listActions = context.container.resolve(ListScheduledActionsUseCase);\n\n const actions = await listActions.execute<ISchedulePageActionPayload>({\n where: { namespace: \"Wb/Page\", targetId: args.id }\n });\n\n if (actions.isFail()) {\n throw actions.error;\n }\n\n const { items } = actions.value;\n\n if (!items.length) {\n return null;\n }\n\n return ActionMapper.fromScheduledAction(items[0]);\n });\n },\n async listWbSchedules(_, args, context) {\n return resolveList(async () => {\n const validated = await listScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const listActions = context.container.resolve(ListScheduledActionsUseCase);\n\n const { type, ...where } = validated.data.where ?? {};\n\n if (type) {\n // @ts-expect-error\n where[\"actionType\"] = typeMap[type];\n }\n\n const actions = await listActions.execute<ISchedulePageActionPayload>({\n where: { ...where, namespace: \"Wb/Page\" },\n // @ts-expect-error sort values are validated by Zod schema\n sort: validated.data.sort,\n limit: validated.data.limit,\n after: validated.data.after\n });\n\n if (actions.isFail()) {\n throw actions.error;\n }\n\n return {\n data: actions.value.items.map(item =>\n ActionMapper.fromScheduledAction(item)\n ),\n meta: actions.value.meta\n };\n });\n }\n },\n WbMutation: {\n async createWbSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await createScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const data = validated.data;\n\n const schedulePage = context.container.resolve(SchedulePageActionUseCase);\n const result = await schedulePage.execute({\n targetId: data.id,\n scheduleFor: data.scheduleFor?.toISOString(),\n immediately: data.immediately,\n actionType: typeMap[data.type]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return ActionMapper.fromScheduledAction(result.value);\n });\n },\n async updateWbSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await updateScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const data = validated.data;\n\n const schedulePage = context.container.resolve(SchedulePageActionUseCase);\n const result = await schedulePage.execute({\n targetId: data.id,\n scheduleFor: data.scheduleFor?.toISOString(),\n immediately: data.immediately,\n actionType: typeMap[data.type]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return ActionMapper.fromScheduledAction(result.value);\n });\n },\n async cancelWbSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await cancelScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const cancelPageAction = context.container.resolve(\n CancelScheduledPageActionUseCase\n );\n\n const res = await cancelPageAction.execute(validated.data.id);\n\n if (res.isFail()) {\n throw res.error;\n }\n\n return true;\n });\n }\n }\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}