@webiny/api-headless-cms-scheduler 0.0.0-unstable.a4637c5ce6 → 0.0.0-unstable.b6d7105cee

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 (124) hide show
  1. package/README.md +11 -15
  2. package/context.d.ts +2 -7
  3. package/context.js +15 -65
  4. package/context.js.map +1 -1
  5. package/exports/api/cms/scheduler.d.ts +2 -0
  6. package/exports/api/cms/scheduler.js +2 -0
  7. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.d.ts +20 -0
  8. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js +40 -0
  9. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js.map +1 -0
  10. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.d.ts +19 -0
  11. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js +35 -0
  12. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -0
  13. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.d.ts +19 -0
  14. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js +34 -0
  15. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js.map +1 -0
  16. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.d.ts +19 -0
  17. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js +35 -0
  18. package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -0
  19. package/features/CancelScheduledActionOnEntryChange/feature.d.ts +11 -0
  20. package/features/CancelScheduledActionOnEntryChange/feature.js +17 -0
  21. package/features/CancelScheduledActionOnEntryChange/feature.js.map +1 -0
  22. package/features/NamespaceHandler/NamespaceHandler.d.ts +15 -0
  23. package/features/NamespaceHandler/NamespaceHandler.js +44 -0
  24. package/features/NamespaceHandler/NamespaceHandler.js.map +1 -0
  25. package/features/PublishActionHandler/PublishEntryActionHandler.d.ts +35 -0
  26. package/features/PublishActionHandler/PublishEntryActionHandler.js +92 -0
  27. package/features/PublishActionHandler/PublishEntryActionHandler.js.map +1 -0
  28. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.d.ts +15 -0
  29. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js +47 -0
  30. package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js.map +1 -0
  31. package/features/SchedulePublishEntryUseCase/abstractions.d.ts +24 -0
  32. package/features/SchedulePublishEntryUseCase/abstractions.js +5 -0
  33. package/features/SchedulePublishEntryUseCase/abstractions.js.map +1 -0
  34. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.d.ts +15 -0
  35. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js +47 -0
  36. package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js.map +1 -0
  37. package/features/ScheduleUnpublishEntryUseCase/abstractions.d.ts +24 -0
  38. package/features/ScheduleUnpublishEntryUseCase/abstractions.js +5 -0
  39. package/features/ScheduleUnpublishEntryUseCase/abstractions.js.map +1 -0
  40. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.d.ts +30 -0
  41. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js +69 -0
  42. package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js.map +1 -0
  43. package/index.d.ts +2 -10
  44. package/index.js +5 -27
  45. package/index.js.map +1 -1
  46. package/package.json +25 -26
  47. package/types.d.ts +3 -10
  48. package/types.js +0 -7
  49. package/utils/namespace.d.ts +4 -0
  50. package/utils/namespace.js +9 -0
  51. package/utils/namespace.js.map +1 -0
  52. package/constants.d.ts +0 -11
  53. package/constants.js +0 -19
  54. package/constants.js.map +0 -1
  55. package/graphql/index.d.ts +0 -3
  56. package/graphql/index.js +0 -204
  57. package/graphql/index.js.map +0 -1
  58. package/graphql/schema.d.ts +0 -217
  59. package/graphql/schema.js +0 -87
  60. package/graphql/schema.js.map +0 -1
  61. package/handler/Handler.d.ts +0 -23
  62. package/handler/Handler.js +0 -74
  63. package/handler/Handler.js.map +0 -1
  64. package/handler/actions/PublishHandlerAction.d.ts +0 -13
  65. package/handler/actions/PublishHandlerAction.js +0 -64
  66. package/handler/actions/PublishHandlerAction.js.map +0 -1
  67. package/handler/actions/UnpublishHandlerAction.d.ts +0 -13
  68. package/handler/actions/UnpublishHandlerAction.js +0 -53
  69. package/handler/actions/UnpublishHandlerAction.js.map +0 -1
  70. package/handler/index.d.ts +0 -7
  71. package/handler/index.js +0 -64
  72. package/handler/index.js.map +0 -1
  73. package/handler/types.d.ts +0 -5
  74. package/handler/types.js +0 -7
  75. package/handler/types.js.map +0 -1
  76. package/hooks/index.d.ts +0 -7
  77. package/hooks/index.js +0 -58
  78. package/hooks/index.js.map +0 -1
  79. package/manifest.d.ts +0 -17
  80. package/manifest.js +0 -47
  81. package/manifest.js.map +0 -1
  82. package/scheduler/ScheduleExecutor.d.ts +0 -16
  83. package/scheduler/ScheduleExecutor.js +0 -55
  84. package/scheduler/ScheduleExecutor.js.map +0 -1
  85. package/scheduler/ScheduleFetcher.d.ts +0 -16
  86. package/scheduler/ScheduleFetcher.js +0 -51
  87. package/scheduler/ScheduleFetcher.js.map +0 -1
  88. package/scheduler/ScheduleRecord.d.ts +0 -31
  89. package/scheduler/ScheduleRecord.js +0 -57
  90. package/scheduler/ScheduleRecord.js.map +0 -1
  91. package/scheduler/Scheduler.d.ts +0 -14
  92. package/scheduler/Scheduler.js +0 -27
  93. package/scheduler/Scheduler.js.map +0 -1
  94. package/scheduler/actions/PublishScheduleAction.d.ts +0 -26
  95. package/scheduler/actions/PublishScheduleAction.js +0 -196
  96. package/scheduler/actions/PublishScheduleAction.js.map +0 -1
  97. package/scheduler/actions/UnpublishScheduleAction.d.ts +0 -26
  98. package/scheduler/actions/UnpublishScheduleAction.js +0 -194
  99. package/scheduler/actions/UnpublishScheduleAction.js.map +0 -1
  100. package/scheduler/createScheduleRecordId.d.ts +0 -2
  101. package/scheduler/createScheduleRecordId.js +0 -33
  102. package/scheduler/createScheduleRecordId.js.map +0 -1
  103. package/scheduler/createScheduler.d.ts +0 -12
  104. package/scheduler/createScheduler.js +0 -65
  105. package/scheduler/createScheduler.js.map +0 -1
  106. package/scheduler/dates.d.ts +0 -7
  107. package/scheduler/dates.js +0 -27
  108. package/scheduler/dates.js.map +0 -1
  109. package/scheduler/model.d.ts +0 -1
  110. package/scheduler/model.js +0 -88
  111. package/scheduler/model.js.map +0 -1
  112. package/scheduler/types.d.ts +0 -88
  113. package/scheduler/types.js +0 -19
  114. package/scheduler/types.js.map +0 -1
  115. package/service/SchedulerService.d.ts +0 -23
  116. package/service/SchedulerService.js +0 -151
  117. package/service/SchedulerService.js.map +0 -1
  118. package/service/types.d.ts +0 -19
  119. package/service/types.js +0 -7
  120. package/service/types.js.map +0 -1
  121. package/types.js.map +0 -1
  122. package/utils/dateInTheFuture.d.ts +0 -6
  123. package/utils/dateInTheFuture.js +0 -19
  124. package/utils/dateInTheFuture.js.map +0 -1
package/README.md CHANGED
@@ -1,15 +1,11 @@
1
- # @webiny/api-headless-cms-schedule
2
- [![](https://img.shields.io/npm/dw/@webiny/api-headless-cms-schedule.svg)](https://www.npmjs.com/package/@webiny/api-headless-cms-schedule)
3
- [![](https://img.shields.io/npm/v/@webiny/api-headless-cms-schedule.svg)](https://www.npmjs.com/package/@webiny/api-headless-cms-schedule)
4
- [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
5
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
6
-
7
- ## Install
8
- ```
9
- npm install --save @webiny/api-headless-cms-schedule
10
- ```
11
-
12
- Or if you prefer yarn:
13
- ```
14
- yarn add @webiny/api-headless-cms-schedule
15
- ```
1
+ # @webiny/api-headless-cms-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/context.d.ts CHANGED
@@ -1,7 +1,2 @@
1
- import { ContextPlugin } from "@webiny/api/index.js";
2
- import type { SchedulerClient, SchedulerClientConfig } from "@webiny/aws-sdk/client-scheduler/index.js";
3
- import type { ScheduleContext } from "./types.js";
4
- export interface ICreateHeadlessCmsSchedulerContextParams {
5
- getClient(config?: SchedulerClientConfig): Pick<SchedulerClient, "send">;
6
- }
7
- export declare const createHeadlessCmsScheduleContext: (params: ICreateHeadlessCmsSchedulerContextParams) => ContextPlugin<ScheduleContext>;
1
+ import { ContextPlugin } from "@webiny/api";
2
+ export declare const createHeadlessCmsScheduleContext: () => ContextPlugin<import("@webiny/api/types").Context>;
package/context.js CHANGED
@@ -1,68 +1,18 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.createHeadlessCmsScheduleContext = void 0;
7
- var _index = require("@webiny/api/index.js");
8
- var _SchedulerService = require("./service/SchedulerService.js");
9
- var _manifest = require("./manifest.js");
10
- var _utils = require("@webiny/utils");
11
- var _createScheduler = require("./scheduler/createScheduler.js");
12
- var _handlerGraphql = require("@webiny/handler-graphql");
13
- var _constants = require("./constants.js");
14
- var _apiHeadlessCms = require("@webiny/api-headless-cms");
15
- var _index2 = require("./hooks/index.js");
16
- const createHeadlessCmsScheduleContext = params => {
17
- return new _index.ContextPlugin(async context => {
18
- /**
19
- * If the Headless CMS is not ready, it means the system is not fully installed yet.
20
- * We do not want to continue because it would break anyway.
21
- */
22
- const ready = await (0, _apiHeadlessCms.isHeadlessCmsReady)(context);
23
- if (!ready) {
24
- return;
25
- }
26
- const manifest = await (0, _manifest.getManifest)({
27
- client: context.db.driver.getClient()
28
- });
29
- if (manifest.error) {
30
- console.error(manifest.error.message);
31
- console.log((0, _utils.convertException)(manifest.error, ["message"]));
32
- console.info("Scheduler not attached.");
33
- return;
34
- }
35
- const service = (0, _SchedulerService.createSchedulerService)({
36
- getClient: params.getClient,
37
- config: {
38
- lambdaArn: manifest.data.lambdaArn,
39
- roleArn: manifest.data.roleArn
40
- }
41
- });
42
- let schedulerModel;
43
- try {
44
- schedulerModel = await context.cms.getModel(_constants.SCHEDULE_MODEL_ID);
45
- } catch (ex) {
46
- if (ex.code === "NOT_FOUND" || ex instanceof _handlerGraphql.NotFoundError) {
47
- console.error(`Schedule model "${_constants.SCHEDULE_MODEL_ID}" not found.`);
48
- return;
49
- }
50
- console.error(`Error while fetching schedule model "${_constants.SCHEDULE_MODEL_ID}".`);
51
- console.log((0, _utils.convertException)(ex));
52
- return;
53
- }
54
- (0, _index2.attachLifecycleHooks)({
55
- cms: context.cms,
56
- schedulerModel
57
- });
58
- context.cms.scheduler = await (0, _createScheduler.createScheduler)({
59
- cms: context.cms,
60
- security: context.security,
61
- service,
62
- schedulerModel
1
+ import { ContextPlugin } from "@webiny/api";
2
+ import { CancelScheduledActionOnEntryChangeFeature } from "./features/CancelScheduledActionOnEntryChange/feature.js";
3
+ import { NamespaceHandler } from "./features/NamespaceHandler/NamespaceHandler.js";
4
+ import { PublishEntryActionHandler } from "./features/PublishActionHandler/PublishEntryActionHandler.js";
5
+ import { UnpublishEntryActionHandler } from "./features/UnpublishActionHandler/UnpublishEntryActionHandler.js";
6
+ import { SchedulePublishEntryUseCase } from "./features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js";
7
+ import { ScheduleUnpublishEntryUseCase } from "./features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js";
8
+ const createHeadlessCmsScheduleContext = ()=>new ContextPlugin(async (context)=>{
9
+ context.container.register(NamespaceHandler);
10
+ context.container.register(PublishEntryActionHandler);
11
+ context.container.register(UnpublishEntryActionHandler);
12
+ context.container.register(SchedulePublishEntryUseCase);
13
+ context.container.register(ScheduleUnpublishEntryUseCase);
14
+ CancelScheduledActionOnEntryChangeFeature.register(context.container);
63
15
  });
64
- });
65
- };
66
- exports.createHeadlessCmsScheduleContext = createHeadlessCmsScheduleContext;
16
+ export { createHeadlessCmsScheduleContext };
67
17
 
68
18
  //# sourceMappingURL=context.js.map
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["_index","require","_SchedulerService","_manifest","_utils","_createScheduler","_handlerGraphql","_constants","_apiHeadlessCms","_index2","createHeadlessCmsScheduleContext","params","ContextPlugin","context","ready","isHeadlessCmsReady","manifest","getManifest","client","db","driver","getClient","error","console","message","log","convertException","info","service","createSchedulerService","config","lambdaArn","data","roleArn","schedulerModel","cms","getModel","SCHEDULE_MODEL_ID","ex","code","NotFoundError","attachLifecycleHooks","scheduler","createScheduler","security","exports"],"sources":["context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api/index.js\";\nimport type {\n SchedulerClient,\n SchedulerClientConfig\n} from \"@webiny/aws-sdk/client-scheduler/index.js\";\nimport { createSchedulerService } from \"~/service/SchedulerService.js\";\nimport { getManifest } from \"~/manifest.js\";\nimport { convertException } from \"@webiny/utils\";\nimport type { ScheduleContext } from \"~/types.js\";\nimport { createScheduler } from \"./scheduler/createScheduler.js\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { SCHEDULE_MODEL_ID } from \"./constants.js\";\nimport { isHeadlessCmsReady } from \"@webiny/api-headless-cms\";\nimport type { DynamoDBDocument } from \"@webiny/aws-sdk/client-dynamodb/index.js\";\nimport { attachLifecycleHooks } from \"~/hooks/index.js\";\n\nexport interface ICreateHeadlessCmsSchedulerContextParams {\n getClient(config?: SchedulerClientConfig): Pick<SchedulerClient, \"send\">;\n}\n\nexport const createHeadlessCmsScheduleContext = (\n params: ICreateHeadlessCmsSchedulerContextParams\n) => {\n return new ContextPlugin<ScheduleContext>(async context => {\n /**\n * If the Headless CMS is not ready, it means the system is not fully installed yet.\n * We do not want to continue because it would break anyway.\n */\n const ready = await isHeadlessCmsReady(context);\n if (!ready) {\n return;\n }\n const manifest = await getManifest({\n client: context.db.driver.getClient() as DynamoDBDocument\n });\n if (manifest.error) {\n console.error(manifest.error.message);\n console.log(convertException(manifest.error, [\"message\"]));\n console.info(\"Scheduler not attached.\");\n return;\n }\n\n const service = createSchedulerService({\n getClient: params.getClient,\n config: {\n lambdaArn: manifest.data.lambdaArn,\n roleArn: manifest.data.roleArn\n }\n });\n\n let schedulerModel: CmsModel;\n try {\n schedulerModel = await context.cms.getModel(SCHEDULE_MODEL_ID);\n } catch (ex) {\n if (ex.code === \"NOT_FOUND\" || ex instanceof NotFoundError) {\n console.error(`Schedule model \"${SCHEDULE_MODEL_ID}\" not found.`);\n return;\n }\n console.error(`Error while fetching schedule model \"${SCHEDULE_MODEL_ID}\".`);\n console.log(convertException(ex));\n return;\n }\n\n attachLifecycleHooks({\n cms: context.cms,\n schedulerModel\n });\n\n context.cms.scheduler = await createScheduler({\n cms: context.cms,\n security: context.security,\n service,\n schedulerModel\n });\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAKA,IAAAC,iBAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,gBAAA,GAAAJ,OAAA;AAEA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,UAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AAEA,IAAAQ,OAAA,GAAAR,OAAA;AAMO,MAAMS,gCAAgC,GACzCC,MAAgD,IAC/C;EACD,OAAO,IAAIC,oBAAa,CAAkB,MAAMC,OAAO,IAAI;IACvD;AACR;AACA;AACA;IACQ,MAAMC,KAAK,GAAG,MAAM,IAAAC,kCAAkB,EAACF,OAAO,CAAC;IAC/C,IAAI,CAACC,KAAK,EAAE;MACR;IACJ;IACA,MAAME,QAAQ,GAAG,MAAM,IAAAC,qBAAW,EAAC;MAC/BC,MAAM,EAAEL,OAAO,CAACM,EAAE,CAACC,MAAM,CAACC,SAAS,CAAC;IACxC,CAAC,CAAC;IACF,IAAIL,QAAQ,CAACM,KAAK,EAAE;MAChBC,OAAO,CAACD,KAAK,CAACN,QAAQ,CAACM,KAAK,CAACE,OAAO,CAAC;MACrCD,OAAO,CAACE,GAAG,CAAC,IAAAC,uBAAgB,EAACV,QAAQ,CAACM,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;MAC1DC,OAAO,CAACI,IAAI,CAAC,yBAAyB,CAAC;MACvC;IACJ;IAEA,MAAMC,OAAO,GAAG,IAAAC,wCAAsB,EAAC;MACnCR,SAAS,EAAEV,MAAM,CAACU,SAAS;MAC3BS,MAAM,EAAE;QACJC,SAAS,EAAEf,QAAQ,CAACgB,IAAI,CAACD,SAAS;QAClCE,OAAO,EAAEjB,QAAQ,CAACgB,IAAI,CAACC;MAC3B;IACJ,CAAC,CAAC;IAEF,IAAIC,cAAwB;IAC5B,IAAI;MACAA,cAAc,GAAG,MAAMrB,OAAO,CAACsB,GAAG,CAACC,QAAQ,CAACC,4BAAiB,CAAC;IAClE,CAAC,CAAC,OAAOC,EAAE,EAAE;MACT,IAAIA,EAAE,CAACC,IAAI,KAAK,WAAW,IAAID,EAAE,YAAYE,6BAAa,EAAE;QACxDjB,OAAO,CAACD,KAAK,CAAC,mBAAmBe,4BAAiB,cAAc,CAAC;QACjE;MACJ;MACAd,OAAO,CAACD,KAAK,CAAC,wCAAwCe,4BAAiB,IAAI,CAAC;MAC5Ed,OAAO,CAACE,GAAG,CAAC,IAAAC,uBAAgB,EAACY,EAAE,CAAC,CAAC;MACjC;IACJ;IAEA,IAAAG,4BAAoB,EAAC;MACjBN,GAAG,EAAEtB,OAAO,CAACsB,GAAG;MAChBD;IACJ,CAAC,CAAC;IAEFrB,OAAO,CAACsB,GAAG,CAACO,SAAS,GAAG,MAAM,IAAAC,gCAAe,EAAC;MAC1CR,GAAG,EAAEtB,OAAO,CAACsB,GAAG;MAChBS,QAAQ,EAAE/B,OAAO,CAAC+B,QAAQ;MAC1BhB,OAAO;MACPM;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAACW,OAAA,CAAAnC,gCAAA,GAAAA,gCAAA","ignoreList":[]}
1
+ {"version":3,"file":"context.js","sources":["../src/context.ts"],"sourcesContent":["import { ContextPlugin } from \"@webiny/api\";\nimport { CancelScheduledActionOnEntryChangeFeature } from \"~/features/CancelScheduledActionOnEntryChange/feature.js\";\nimport { NamespaceHandler } from \"~/features/NamespaceHandler/NamespaceHandler.js\";\nimport { PublishEntryActionHandler } from \"~/features/PublishActionHandler/PublishEntryActionHandler.js\";\nimport { UnpublishEntryActionHandler } from \"~/features/UnpublishActionHandler/UnpublishEntryActionHandler.js\";\nimport { SchedulePublishEntryUseCase } from \"~/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js\";\nimport { ScheduleUnpublishEntryUseCase } from \"~/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js\";\n\nexport const createHeadlessCmsScheduleContext = () => {\n return new ContextPlugin(async context => {\n context.container.register(NamespaceHandler);\n context.container.register(PublishEntryActionHandler);\n context.container.register(UnpublishEntryActionHandler);\n context.container.register(SchedulePublishEntryUseCase);\n context.container.register(ScheduleUnpublishEntryUseCase);\n\n CancelScheduledActionOnEntryChangeFeature.register(context.container);\n });\n};\n"],"names":["createHeadlessCmsScheduleContext","ContextPlugin","context","NamespaceHandler","PublishEntryActionHandler","UnpublishEntryActionHandler","SchedulePublishEntryUseCase","ScheduleUnpublishEntryUseCase","CancelScheduledActionOnEntryChangeFeature"],"mappings":";;;;;;;AAQO,MAAMA,mCAAmC,IACrC,IAAIC,cAAc,OAAMC;QAC3BA,QAAQ,SAAS,CAAC,QAAQ,CAACC;QAC3BD,QAAQ,SAAS,CAAC,QAAQ,CAACE;QAC3BF,QAAQ,SAAS,CAAC,QAAQ,CAACG;QAC3BH,QAAQ,SAAS,CAAC,QAAQ,CAACI;QAC3BJ,QAAQ,SAAS,CAAC,QAAQ,CAACK;QAE3BC,0CAA0C,QAAQ,CAACN,QAAQ,SAAS;IACxE"}
@@ -0,0 +1,2 @@
1
+ export { SchedulePublishEntryUseCase } from "../../../features/SchedulePublishEntryUseCase/abstractions.js";
2
+ export { ScheduleUnpublishEntryUseCase } from "../../../features/ScheduleUnpublishEntryUseCase/abstractions.js";
@@ -0,0 +1,2 @@
1
+ export { SchedulePublishEntryUseCase } from "../../../features/SchedulePublishEntryUseCase/abstractions.js";
2
+ export { ScheduleUnpublishEntryUseCase } from "../../../features/ScheduleUnpublishEntryUseCase/abstractions.js";
@@ -0,0 +1,20 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled actions when an entry is deleted
5
+ *
6
+ * When a user deletes an entry, any scheduled publish/unpublish
7
+ * actions for all of its revisions should be canceled since the entry
8
+ * no longer exists.
9
+ */
10
+ declare class CancelScheduledActionOnEntryDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
+ private listSchedules;
16
+ }
17
+ export declare const CancelScheduledActionOnEntryDeleteEventHandler: typeof CancelScheduledActionOnEntryDeleteHandlerImpl & {
18
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events").EntryAfterDeleteEvent>>;
19
+ };
20
+ export {};
@@ -0,0 +1,40 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ class CancelScheduledActionOnEntryDeleteHandlerImpl {
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
8
+ }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const schedules = await this.listSchedules(model.modelId, entry.entryId);
13
+ for (const action of schedules){
14
+ const cancelRes = await this.cancelScheduledAction.execute(action);
15
+ cancelRes.isFail();
16
+ }
17
+ }
18
+ async listSchedules(modelId, entryId) {
19
+ const actionsResult = await this.listScheduledActions.execute({
20
+ limit: 10000,
21
+ where: {
22
+ namespace: createNamespace({
23
+ modelId
24
+ }),
25
+ targetId_startsWith: `${entryId}#`
26
+ }
27
+ });
28
+ return actionsResult.value.items;
29
+ }
30
+ }
31
+ const CancelScheduledActionOnEntryDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
32
+ implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,
33
+ dependencies: [
34
+ ListScheduledActionsUseCase,
35
+ CancelScheduledActionUseCase
36
+ ]
37
+ });
38
+ export { CancelScheduledActionOnEntryDeleteEventHandler };
39
+
40
+ //# sourceMappingURL=CancelScheduledActionOnEntryDeleteEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry is deleted\n *\n * When a user deletes an entry, any scheduled publish/unpublish\n * actions for all of its revisions should be canceled since the entry\n * no longer exists.\n */\nclass CancelScheduledActionOnEntryDeleteHandlerImpl\n implements EntryAfterDeleteEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const schedules = await this.listSchedules(model.modelId, entry.entryId);\n for (const action of schedules) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // The entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n\n private async listSchedules(modelId: string, entryId: string) {\n const actionsResult = await this.listScheduledActions.execute({\n limit: 10000,\n where: {\n namespace: createNamespace({ modelId }),\n targetId_startsWith: `${entryId}#`\n }\n });\n\n return actionsResult.value.items;\n }\n}\n\nexport const CancelScheduledActionOnEntryDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnEntryDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnEntryDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","schedules","action","cancelRes","modelId","entryId","actionsResult","createNamespace","CancelScheduledActionOnEntryDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,YAAY,MAAM,IAAI,CAAC,aAAa,CAACD,MAAM,OAAO,EAAED,MAAM,OAAO;QACvE,KAAK,MAAMG,UAAUD,UAAW;YAC5B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;IAEA,MAAc,cAAcC,OAAe,EAAEC,OAAe,EAAE;QAC1D,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;YACP,OAAO;gBACH,WAAWC,gBAAgB;oBAAEH;gBAAQ;gBACrC,qBAAqB,GAAGC,QAAQ,CAAC,CAAC;YACtC;QACJ;QAEA,OAAOC,cAAc,KAAK,CAAC,KAAK;IACpC;AACJ;AAEO,MAAME,iDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBd;IAChB,cAAc;QAACe;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled "publish" when an entry is manually published
5
+ *
6
+ * When a user manually publishes an entry, any scheduled publish
7
+ * action for that entry should be canceled since the manual action
8
+ * takes precedence.
9
+ */
10
+ declare class CancelScheduledActionOnPublishEventHandlerImpl implements EntryAfterPublishEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: EntryAfterPublishEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnPublishEventHandler: typeof CancelScheduledActionOnPublishEventHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/PublishEntry/events").EntryAfterPublishEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,35 @@
1
+ import { EntryAfterPublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypePublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ class CancelScheduledActionOnPublishEventHandlerImpl {
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
8
+ }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ actionType: ScheduledActionTypePublish,
16
+ targetId: entry.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 CancelScheduledActionOnPublishEventHandler = EntryAfterPublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnPublishEventHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
32
+ });
33
+ export { CancelScheduledActionOnPublishEventHandler };
34
+
35
+ //# sourceMappingURL=CancelScheduledActionOnPublishEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.ts"],"sourcesContent":["import { EntryAfterPublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypePublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled \"publish\" when an entry is manually published\n *\n * When a user manually publishes an entry, any scheduled publish\n * action for that entry should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnPublishEventHandlerImpl\n implements EntryAfterPublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterPublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypePublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Even if a schedule runs on an already published action, nothing bad will happen.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnPublishEventHandler =\n EntryAfterPublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnPublishEventHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnPublishEventHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypePublish","actions","action","cancelRes","CancelScheduledActionOnPublishEventHandler","EntryAfterPublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA0C,EAAiB;QACpE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,6CACTC,8BAA8B,oBAAoB,CAAC;IAC/C,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled actions when an entry revision is deleted
5
+ *
6
+ * When a user deletes an entry revision, any scheduled publish/unpublish
7
+ * action for that revision should be canceled since the revision
8
+ * no longer exists.
9
+ */
10
+ declare class CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: EntryAfterDeleteEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnRevisionDeleteEventHandler: typeof CancelScheduledActionOnDeleteHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events").EntryAfterDeleteEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,34 @@
1
+ import { EntryAfterDeleteEventHandler } from "@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ class CancelScheduledActionOnDeleteHandlerImpl {
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
8
+ }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ targetId: entry.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 CancelScheduledActionOnRevisionDeleteEventHandler = EntryAfterDeleteEventHandler.createImplementation({
26
+ implementation: CancelScheduledActionOnDeleteHandlerImpl,
27
+ dependencies: [
28
+ ListScheduledActionsUseCase,
29
+ CancelScheduledActionUseCase
30
+ ]
31
+ });
32
+ export { CancelScheduledActionOnRevisionDeleteEventHandler };
33
+
34
+ //# sourceMappingURL=CancelScheduledActionOnRevisionDeleteEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.ts"],"sourcesContent":["import { EntryAfterDeleteEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/DeleteEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled actions when an entry revision is deleted\n *\n * When a user deletes an entry revision, any scheduled publish/unpublish\n * action for that revision should be canceled since the revision\n * no longer exists.\n */\nclass CancelScheduledActionOnDeleteHandlerImpl implements EntryAfterDeleteEventHandler.Interface {\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterDeleteEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was deleted successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnRevisionDeleteEventHandler =\n EntryAfterDeleteEventHandler.createImplementation({\n implementation: CancelScheduledActionOnDeleteHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnDeleteHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","actions","action","cancelRes","CancelScheduledActionOnRevisionDeleteEventHandler","EntryAfterDeleteEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAcA,MAAMA;IACF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAAyC,EAAiB;QACnE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,UAAUD,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMI,UAAUF,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMG,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,oDACTC,6BAA6B,oBAAoB,CAAC;IAC9C,gBAAgBZ;IAChB,cAAc;QAACa;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,19 @@
1
+ import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ /**
4
+ * Cancels scheduled action when an entry is manually unpublished
5
+ *
6
+ * When a user manually unpublishes an entry revision, any scheduled unpublish
7
+ * action for that revision should be canceled since the manual action
8
+ * takes precedence.
9
+ */
10
+ declare class CancelScheduledActionOnUnpublishHandlerImpl implements EntryAfterUnpublishEventHandler.Interface {
11
+ private listScheduledActions;
12
+ private cancelScheduledAction;
13
+ constructor(listScheduledActions: ListScheduledActionsUseCase.Interface, cancelScheduledAction: CancelScheduledActionUseCase.Interface);
14
+ handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void>;
15
+ }
16
+ export declare const CancelScheduledActionOnUnpublishEventHandler: typeof CancelScheduledActionOnUnpublishHandlerImpl & {
17
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-core/features/eventPublisher").IEventHandler<import("@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events").EntryAfterUnpublishEvent>>;
18
+ };
19
+ export {};
@@ -0,0 +1,35 @@
1
+ import { EntryAfterUnpublishEventHandler } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events";
2
+ import { CancelScheduledActionUseCase, ListScheduledActionsUseCase, ScheduledActionTypeUnpublish } from "@webiny/api-scheduler/exports/api/scheduler.js";
3
+ import { createNamespace } from "../../utils/namespace.js";
4
+ class CancelScheduledActionOnUnpublishHandlerImpl {
5
+ constructor(listScheduledActions, cancelScheduledAction){
6
+ this.listScheduledActions = listScheduledActions;
7
+ this.cancelScheduledAction = cancelScheduledAction;
8
+ }
9
+ async handle(event) {
10
+ const { entry, model } = event.payload;
11
+ if (model.isPrivate) return;
12
+ const actionsResult = await this.listScheduledActions.execute({
13
+ where: {
14
+ namespace: createNamespace(model),
15
+ actionType: ScheduledActionTypeUnpublish,
16
+ targetId: entry.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 CancelScheduledActionOnUnpublishEventHandler = EntryAfterUnpublishEventHandler.createImplementation({
27
+ implementation: CancelScheduledActionOnUnpublishHandlerImpl,
28
+ dependencies: [
29
+ ListScheduledActionsUseCase,
30
+ CancelScheduledActionUseCase
31
+ ]
32
+ });
33
+ export { CancelScheduledActionOnUnpublishEventHandler };
34
+
35
+ //# sourceMappingURL=CancelScheduledActionOnUnpublishEventHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.ts"],"sourcesContent":["import { EntryAfterUnpublishEventHandler } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry/events\";\nimport {\n CancelScheduledActionUseCase,\n ListScheduledActionsUseCase,\n ScheduledActionTypeUnpublish\n} from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { createNamespace } from \"~/utils/namespace.js\";\n\n/**\n * Cancels scheduled action when an entry is manually unpublished\n *\n * When a user manually unpublishes an entry revision, any scheduled unpublish\n * action for that revision should be canceled since the manual action\n * takes precedence.\n */\nclass CancelScheduledActionOnUnpublishHandlerImpl\n implements EntryAfterUnpublishEventHandler.Interface\n{\n constructor(\n private listScheduledActions: ListScheduledActionsUseCase.Interface,\n private cancelScheduledAction: CancelScheduledActionUseCase.Interface\n ) {}\n\n async handle(event: EntryAfterUnpublishEventHandler.Event): Promise<void> {\n const { entry, model } = event.payload;\n\n // Skip private models\n if (model.isPrivate) {\n return;\n }\n\n const actionsResult = await this.listScheduledActions.execute({\n where: {\n namespace: createNamespace(model),\n actionType: ScheduledActionTypeUnpublish,\n targetId: entry.id\n }\n });\n\n const actions = actionsResult.value.items;\n\n for (const action of actions) {\n const cancelRes = await this.cancelScheduledAction.execute(action);\n if (cancelRes.isFail()) {\n // Silently ignore errors - this is non-critical cleanup.\n // Entry was unpublished successfully, cancelling scheduled actions is best-effort.\n }\n }\n }\n}\n\nexport const CancelScheduledActionOnUnpublishEventHandler =\n EntryAfterUnpublishEventHandler.createImplementation({\n implementation: CancelScheduledActionOnUnpublishHandlerImpl,\n dependencies: [ListScheduledActionsUseCase, CancelScheduledActionUseCase]\n });\n"],"names":["CancelScheduledActionOnUnpublishHandlerImpl","listScheduledActions","cancelScheduledAction","event","entry","model","actionsResult","createNamespace","ScheduledActionTypeUnpublish","actions","action","cancelRes","CancelScheduledActionOnUnpublishEventHandler","EntryAfterUnpublishEventHandler","ListScheduledActionsUseCase","CancelScheduledActionUseCase"],"mappings":";;;AAeA,MAAMA;IAGF,YACYC,oBAA2D,EAC3DC,qBAA6D,CACvE;aAFUD,oBAAoB,GAApBA;aACAC,qBAAqB,GAArBA;IACT;IAEH,MAAM,OAAOC,KAA4C,EAAiB;QACtE,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGF,MAAM,OAAO;QAGtC,IAAIE,MAAM,SAAS,EACf;QAGJ,MAAMC,gBAAgB,MAAM,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC;YAC1D,OAAO;gBACH,WAAWC,gBAAgBF;gBAC3B,YAAYG;gBACZ,UAAUJ,MAAM,EAAE;YACtB;QACJ;QAEA,MAAMK,UAAUH,cAAc,KAAK,CAAC,KAAK;QAEzC,KAAK,MAAMI,UAAUD,QAAS;YAC1B,MAAME,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAACD;YACvDC,UAAU,MAAM;QAIxB;IACJ;AACJ;AAEO,MAAMC,+CACTC,gCAAgC,oBAAoB,CAAC;IACjD,gBAAgBb;IAChB,cAAc;QAACc;QAA6BC;KAA6B;AAC7E"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * CancelScheduledActionOnEntryChange Feature
3
+ *
4
+ * Automatically cancels scheduled actions when entries 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 CancelScheduledActionOnEntryChangeFeature: {
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 { CancelScheduledActionOnPublishEventHandler } from "./CancelScheduledActionOnPublishEventHandler.js";
3
+ import { CancelScheduledActionOnUnpublishEventHandler } from "./CancelScheduledActionOnUnpublishEventHandler.js";
4
+ import { CancelScheduledActionOnEntryDeleteEventHandler } from "./CancelScheduledActionOnEntryDeleteEventHandler.js";
5
+ import { CancelScheduledActionOnRevisionDeleteEventHandler } from "./CancelScheduledActionOnRevisionDeleteEventHandler.js";
6
+ const CancelScheduledActionOnEntryChangeFeature = createFeature({
7
+ name: "CancelScheduledActionOnEntryChange",
8
+ register (container) {
9
+ container.register(CancelScheduledActionOnPublishEventHandler);
10
+ container.register(CancelScheduledActionOnUnpublishEventHandler);
11
+ container.register(CancelScheduledActionOnEntryDeleteEventHandler);
12
+ container.register(CancelScheduledActionOnRevisionDeleteEventHandler);
13
+ }
14
+ });
15
+ export { CancelScheduledActionOnEntryChangeFeature };
16
+
17
+ //# sourceMappingURL=feature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/CancelScheduledActionOnEntryChange/feature.js","sources":["../../../src/features/CancelScheduledActionOnEntryChange/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { CancelScheduledActionOnPublishEventHandler } from \"./CancelScheduledActionOnPublishEventHandler.js\";\nimport { CancelScheduledActionOnUnpublishEventHandler } from \"./CancelScheduledActionOnUnpublishEventHandler.js\";\nimport { CancelScheduledActionOnEntryDeleteEventHandler } from \"./CancelScheduledActionOnEntryDeleteEventHandler.js\";\nimport { CancelScheduledActionOnRevisionDeleteEventHandler } from \"./CancelScheduledActionOnRevisionDeleteEventHandler.js\";\n\n/**\n * CancelScheduledActionOnEntryChange Feature\n *\n * Automatically cancels scheduled actions when entries 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 CancelScheduledActionOnEntryChangeFeature = createFeature({\n name: \"CancelScheduledActionOnEntryChange\",\n register(container) {\n container.register(CancelScheduledActionOnPublishEventHandler);\n container.register(CancelScheduledActionOnUnpublishEventHandler);\n container.register(CancelScheduledActionOnEntryDeleteEventHandler);\n container.register(CancelScheduledActionOnRevisionDeleteEventHandler);\n }\n});\n"],"names":["CancelScheduledActionOnEntryChangeFeature","createFeature","container","CancelScheduledActionOnPublishEventHandler","CancelScheduledActionOnUnpublishEventHandler","CancelScheduledActionOnEntryDeleteEventHandler","CancelScheduledActionOnRevisionDeleteEventHandler"],"mappings":";;;;;AAaO,MAAMA,4CAA4CC,cAAc;IACnE,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,15 @@
1
+ import { NamespaceHandler as NamespaceHandlerAbstraction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
3
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
4
+ import type { GenericRecord } from "@webiny/api/types.js";
5
+ declare class NamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {
6
+ private getModelUseCase;
7
+ private getEntryByIdUseCase;
8
+ constructor(getModelUseCase: GetModelUseCase.Interface, getEntryByIdUseCase: GetEntryByIdUseCase.Interface);
9
+ canHandle(namespace: string): boolean;
10
+ execute(params: NamespaceHandlerAbstraction.Params): NamespaceHandlerAbstraction.Response<GenericRecord>;
11
+ }
12
+ export declare const NamespaceHandler: typeof NamespaceHandlerImpl & {
13
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/features/NamespaceHandler/abstractions").INamespaceHandler<GenericRecord>>;
14
+ };
15
+ export {};
@@ -0,0 +1,44 @@
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 { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
5
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
6
+ class NamespaceHandlerImpl {
7
+ constructor(getModelUseCase, getEntryByIdUseCase){
8
+ this.getModelUseCase = getModelUseCase;
9
+ this.getEntryByIdUseCase = getEntryByIdUseCase;
10
+ }
11
+ canHandle(namespace) {
12
+ const modelId = extractModelIdFromNamespace(namespace);
13
+ return !!modelId;
14
+ }
15
+ async execute(params) {
16
+ const modelId = extractModelIdFromNamespace(params.namespace);
17
+ const modelResult = await this.getModelUseCase.execute(modelId);
18
+ if (modelResult.isFail()) return Result.fail(modelResult.error);
19
+ const model = modelResult.value;
20
+ const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);
21
+ if (entryResult.isFail()) return Result.fail(entryResult.error);
22
+ const entry = entryResult.value;
23
+ const title = entry.values[model.titleFieldId] || "Unknown entry title";
24
+ return Result.ok({
25
+ namespace: params.namespace,
26
+ title,
27
+ modelId,
28
+ actionType: params.actionType,
29
+ targetId: params.targetId,
30
+ scheduleId: params.scheduleId,
31
+ immediately: params.immediately || false
32
+ });
33
+ }
34
+ }
35
+ const NamespaceHandler_NamespaceHandler = NamespaceHandler.createImplementation({
36
+ implementation: NamespaceHandlerImpl,
37
+ dependencies: [
38
+ GetModelUseCase,
39
+ GetEntryByIdUseCase
40
+ ]
41
+ });
42
+ export { NamespaceHandler_NamespaceHandler as NamespaceHandler };
43
+
44
+ //# sourceMappingURL=NamespaceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/NamespaceHandler/NamespaceHandler.js","sources":["../../../src/features/NamespaceHandler/NamespaceHandler.ts"],"sourcesContent":["import { NamespaceHandler as NamespaceHandlerAbstraction } from \"@webiny/api-scheduler/exports/api/scheduler.js\";\nimport { extractModelIdFromNamespace } from \"~/utils/namespace.js\";\nimport { Result } from \"@webiny/feature/exports/api.js\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js\";\nimport type { GenericRecord } from \"@webiny/api/types.js\";\n\nclass NamespaceHandlerImpl implements NamespaceHandlerAbstraction.Interface<GenericRecord> {\n public constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface\n ) {}\n\n public canHandle(namespace: string): boolean {\n const modelId = extractModelIdFromNamespace(namespace);\n\n return !!modelId;\n }\n\n public async execute(\n params: NamespaceHandlerAbstraction.Params\n ): NamespaceHandlerAbstraction.Response<GenericRecord> {\n /**\n * We know that modelId is ok because of the canHandle() method, which is always called before execute() and must return true for this handler to be executed.\n */\n const modelId = extractModelIdFromNamespace(params.namespace)!;\n // Fetch the target model\n const modelResult = await this.getModelUseCase.execute(modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as any);\n }\n\n const model = modelResult.value;\n\n // Fetch entry to get title\n const entryResult = await this.getEntryByIdUseCase.execute(model, params.targetId);\n if (entryResult.isFail()) {\n return Result.fail(entryResult.error as any);\n }\n\n const entry = entryResult.value;\n const title = entry.values[model.titleFieldId] || \"Unknown entry title\";\n\n return Result.ok({\n namespace: params.namespace,\n title,\n modelId,\n actionType: params.actionType,\n targetId: params.targetId,\n scheduleId: params.scheduleId,\n immediately: params.immediately || false\n });\n }\n}\n\nexport const NamespaceHandler = NamespaceHandlerAbstraction.createImplementation({\n implementation: NamespaceHandlerImpl,\n dependencies: [GetModelUseCase, GetEntryByIdUseCase]\n});\n"],"names":["NamespaceHandlerImpl","getModelUseCase","getEntryByIdUseCase","namespace","modelId","extractModelIdFromNamespace","params","modelResult","Result","model","entryResult","entry","title","NamespaceHandler","NamespaceHandlerAbstraction","GetModelUseCase","GetEntryByIdUseCase"],"mappings":";;;;;AAOA,MAAMA;IACF,YACYC,eAA0C,EAC1CC,mBAAkD,CAC5D;aAFUD,eAAe,GAAfA;aACAC,mBAAmB,GAAnBA;IACT;IAEI,UAAUC,SAAiB,EAAW;QACzC,MAAMC,UAAUC,4BAA4BF;QAE5C,OAAO,CAAC,CAACC;IACb;IAEA,MAAa,QACTE,MAA0C,EACS;QAInD,MAAMF,UAAUC,4BAA4BC,OAAO,SAAS;QAE5D,MAAMC,cAAc,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAACH;QACvD,IAAIG,YAAY,MAAM,IAClB,OAAOC,OAAO,IAAI,CAACD,YAAY,KAAK;QAGxC,MAAME,QAAQF,YAAY,KAAK;QAG/B,MAAMG,cAAc,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAACD,OAAOH,OAAO,QAAQ;QACjF,IAAII,YAAY,MAAM,IAClB,OAAOF,OAAO,IAAI,CAACE,YAAY,KAAK;QAGxC,MAAMC,QAAQD,YAAY,KAAK;QAC/B,MAAME,QAAQD,MAAM,MAAM,CAACF,MAAM,YAAY,CAAC,IAAI;QAElD,OAAOD,OAAO,EAAE,CAAC;YACb,WAAWF,OAAO,SAAS;YAC3BM;YACAR;YACA,YAAYE,OAAO,UAAU;YAC7B,UAAUA,OAAO,QAAQ;YACzB,YAAYA,OAAO,UAAU;YAC7B,aAAaA,OAAO,WAAW,IAAI;QACvC;IACJ;AACJ;AAEO,MAAMO,oCAAmBC,iBAAAA,oBAAgD,CAAC;IAC7E,gBAAgBd;IAChB,cAAc;QAACe;QAAiBC;KAAoB;AACxD"}
@@ -0,0 +1,35 @@
1
+ import { ScheduledActionHandler, ScheduledActionType, type IScheduledAction } from "@webiny/api-scheduler/exports/api/scheduler.js";
2
+ import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel";
3
+ import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById";
4
+ import { GetPublishedEntriesByIdsUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds";
5
+ import { PublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/PublishEntry";
6
+ import { UnpublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/UnpublishEntry";
7
+ import { RepublishEntryUseCase } from "@webiny/api-headless-cms/features/contentEntry/RepublishEntry";
8
+ import { IdentityContext } from "@webiny/api-core/features/security/IdentityContext/index.js";
9
+ import type { IScheduledActionPayload } from "../../types.js";
10
+ /**
11
+ * Handler for publishing CMS entries
12
+ *
13
+ * Handles the "Publish" action for CMS entries with namespace pattern: Cms/Entry/{modelId}
14
+ *
15
+ * Publishing logic:
16
+ * 1. If entry is not published -> publish it
17
+ * 2. If the same revision is already published -> republish it
18
+ * 3. If a different revision is published -> unpublish old, publish new
19
+ */
20
+ declare class PublishEntryActionHandlerImpl implements ScheduledActionHandler.Interface {
21
+ private getModelUseCase;
22
+ private getEntryByIdUseCase;
23
+ private getPublishedEntriesByIdsUseCase;
24
+ private publishEntryUseCase;
25
+ private unpublishEntryUseCase;
26
+ private republishEntryUseCase;
27
+ private identityContext;
28
+ constructor(getModelUseCase: GetModelUseCase.Interface, getEntryByIdUseCase: GetEntryByIdUseCase.Interface, getPublishedEntriesByIdsUseCase: GetPublishedEntriesByIdsUseCase.Interface, publishEntryUseCase: PublishEntryUseCase.Interface, unpublishEntryUseCase: UnpublishEntryUseCase.Interface, republishEntryUseCase: RepublishEntryUseCase.Interface, identityContext: IdentityContext.Interface);
29
+ canHandle(namespace: string, actionType: ScheduledActionType): boolean;
30
+ handle(action: IScheduledAction<IScheduledActionPayload>): Promise<void>;
31
+ }
32
+ export declare const PublishEntryActionHandler: typeof PublishEntryActionHandlerImpl & {
33
+ __abstraction: import("@webiny/di").Abstraction<import("@webiny/api-scheduler/shared/abstractions").IScheduledActionHandler>;
34
+ };
35
+ export {};