@webiny/api-apw 0.0.0-unstable.6e5425ee89 → 0.0.0-unstable.78f581c1d2

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 (207) hide show
  1. package/ApwChangeRequestNotification.js +10 -0
  2. package/ApwChangeRequestNotification.js.map +1 -1
  3. package/ApwCommentNotification.js +10 -0
  4. package/ApwCommentNotification.js.map +1 -1
  5. package/ApwContentReviewNotification.js +10 -0
  6. package/ApwContentReviewNotification.js.map +1 -1
  7. package/ApwContentUrlPlugin.js +10 -0
  8. package/ApwContentUrlPlugin.js.map +1 -1
  9. package/ContentApwSettingsPlugin.js +5 -0
  10. package/ContentApwSettingsPlugin.js.map +1 -1
  11. package/crud/createChangeRequestMethods.js +11 -4
  12. package/crud/createChangeRequestMethods.js.map +1 -1
  13. package/crud/createCommentMethods.js +12 -4
  14. package/crud/createCommentMethods.js.map +1 -1
  15. package/crud/createContentReviewMethods.js +84 -20
  16. package/crud/createContentReviewMethods.js.map +1 -1
  17. package/crud/createReviewerMethods.js +12 -4
  18. package/crud/createReviewerMethods.js.map +1 -1
  19. package/crud/createWorkflowMethods.js +17 -4
  20. package/crud/createWorkflowMethods.js.map +1 -1
  21. package/crud/index.js +25 -0
  22. package/crud/index.js.map +1 -1
  23. package/crud/utils.js +28 -0
  24. package/crud/utils.js.map +1 -1
  25. package/index.js +11 -1
  26. package/index.js.map +1 -1
  27. package/package.json +34 -34
  28. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js +15 -0
  29. package/plugins/cms/CmsEntryApwSettingsGetterPlugin.js.map +1 -1
  30. package/plugins/cms/apwEntryPlugins.js +8 -0
  31. package/plugins/cms/apwEntryPlugins.js.map +1 -1
  32. package/plugins/cms/index.js +13 -0
  33. package/plugins/cms/index.js.map +1 -1
  34. package/plugins/cms/linkContentReviewToEntry.js +17 -0
  35. package/plugins/cms/linkContentReviewToEntry.js.map +1 -1
  36. package/plugins/cms/linkWorkflowToEntry.js +31 -2
  37. package/plugins/cms/linkWorkflowToEntry.js.map +1 -1
  38. package/plugins/cms/notifications/changeRequestNotification.js +4 -0
  39. package/plugins/cms/notifications/changeRequestNotification.js.map +1 -1
  40. package/plugins/cms/notifications/commentNotification.js +4 -0
  41. package/plugins/cms/notifications/commentNotification.js.map +1 -1
  42. package/plugins/cms/notifications/contentReviewNotification.js +4 -0
  43. package/plugins/cms/notifications/contentReviewNotification.js.map +1 -1
  44. package/plugins/cms/notifications/contentUrl.js +8 -1
  45. package/plugins/cms/notifications/contentUrl.js.map +1 -1
  46. package/plugins/cms/triggerContentReview.js +14 -0
  47. package/plugins/cms/triggerContentReview.js.map +1 -1
  48. package/plugins/cms/updateContentReviewStatus.js +18 -0
  49. package/plugins/cms/updateContentReviewStatus.js.map +1 -1
  50. package/plugins/cms/utils.js +47 -2
  51. package/plugins/cms/utils.js.map +1 -1
  52. package/plugins/context.js +31 -0
  53. package/plugins/context.js.map +1 -1
  54. package/plugins/graphql/changeRequest.gql.js +8 -1
  55. package/plugins/graphql/changeRequest.gql.js.map +1 -1
  56. package/plugins/graphql/comment.gql.js +8 -1
  57. package/plugins/graphql/comment.gql.js.map +1 -1
  58. package/plugins/graphql/contentReview.gql.js +20 -1
  59. package/plugins/graphql/contentReview.gql.js.map +1 -1
  60. package/plugins/graphql/reviewer.gql.js +8 -1
  61. package/plugins/graphql/reviewer.gql.js.map +1 -1
  62. package/plugins/graphql/workflow.gql.js +8 -1
  63. package/plugins/graphql/workflow.gql.js.map +1 -1
  64. package/plugins/graphql.js +16 -1
  65. package/plugins/graphql.js.map +1 -1
  66. package/plugins/hooks/createReviewerFromIdentity.js +11 -2
  67. package/plugins/hooks/createReviewerFromIdentity.js.map +1 -1
  68. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js +9 -1
  69. package/plugins/hooks/deleteChangeRequestsAfterContentReview.js.map +1 -1
  70. package/plugins/hooks/deleteCommentsAfterChangeRequest.js +8 -1
  71. package/plugins/hooks/deleteCommentsAfterChangeRequest.js.map +1 -1
  72. package/plugins/hooks/index.js +14 -0
  73. package/plugins/hooks/index.js.map +1 -1
  74. package/plugins/hooks/initializeContentReviewSteps.js +15 -2
  75. package/plugins/hooks/initializeContentReviewSteps.js.map +1 -1
  76. package/plugins/hooks/initializeNotifications.js +5 -0
  77. package/plugins/hooks/initializeNotifications.js.map +1 -1
  78. package/plugins/hooks/listContentReviews.js +12 -0
  79. package/plugins/hooks/listContentReviews.js.map +1 -1
  80. package/plugins/hooks/notifications/appUrl.js +4 -0
  81. package/plugins/hooks/notifications/appUrl.js.map +1 -1
  82. package/plugins/hooks/notifications/changeRequestAfterCreate.js +28 -0
  83. package/plugins/hooks/notifications/changeRequestAfterCreate.js.map +1 -1
  84. package/plugins/hooks/notifications/changeRequestUrl.js +4 -0
  85. package/plugins/hooks/notifications/changeRequestUrl.js.map +1 -1
  86. package/plugins/hooks/notifications/commentAfterCreate.js +30 -0
  87. package/plugins/hooks/notifications/commentAfterCreate.js.map +1 -1
  88. package/plugins/hooks/notifications/commentUrl.js +4 -0
  89. package/plugins/hooks/notifications/commentUrl.js.map +1 -1
  90. package/plugins/hooks/notifications/contentReviewAfterCreate.js +24 -1
  91. package/plugins/hooks/notifications/contentReviewAfterCreate.js.map +1 -1
  92. package/plugins/hooks/notifications/contentReviewUrl.js +4 -0
  93. package/plugins/hooks/notifications/contentReviewUrl.js.map +1 -1
  94. package/plugins/hooks/notifications/contentUrl.js +5 -0
  95. package/plugins/hooks/notifications/contentUrl.js.map +1 -1
  96. package/plugins/hooks/notifications/lastChangeRequestNotificationPlugin.js +4 -0
  97. package/plugins/hooks/notifications/lastChangeRequestNotificationPlugin.js.map +1 -1
  98. package/plugins/hooks/notifications/lastCommentNotificationPlugin.js +4 -0
  99. package/plugins/hooks/notifications/lastCommentNotificationPlugin.js.map +1 -1
  100. package/plugins/hooks/notifications/lastContentReviewNotificationPlugin.js +4 -0
  101. package/plugins/hooks/notifications/lastContentReviewNotificationPlugin.js.map +1 -1
  102. package/plugins/hooks/notifications/reviewers.js +7 -0
  103. package/plugins/hooks/notifications/reviewers.js.map +1 -1
  104. package/plugins/hooks/notifications/sendChangeRequestNotification.js +11 -0
  105. package/plugins/hooks/notifications/sendChangeRequestNotification.js.map +1 -1
  106. package/plugins/hooks/notifications/sendCommentNotification.js +11 -0
  107. package/plugins/hooks/notifications/sendCommentNotification.js.map +1 -1
  108. package/plugins/hooks/notifications/sendContentReviewNotification.js +11 -0
  109. package/plugins/hooks/notifications/sendContentReviewNotification.js.map +1 -1
  110. package/plugins/hooks/updatePendingChangeRequests.js +8 -0
  111. package/plugins/hooks/updatePendingChangeRequests.js.map +1 -1
  112. package/plugins/hooks/updateTotalComments.js +9 -0
  113. package/plugins/hooks/updateTotalComments.js.map +1 -1
  114. package/plugins/hooks/validateChangeRequest.js +16 -0
  115. package/plugins/hooks/validateChangeRequest.js.map +1 -1
  116. package/plugins/hooks/validateComment.js +12 -1
  117. package/plugins/hooks/validateComment.js.map +1 -1
  118. package/plugins/hooks/validateContentReview.js +6 -0
  119. package/plugins/hooks/validateContentReview.js.map +1 -1
  120. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js +15 -0
  121. package/plugins/pageBuilder/PageApwSettingsGetterPlugin.js.map +1 -1
  122. package/plugins/pageBuilder/apwContentPagePlugins.js +4 -0
  123. package/plugins/pageBuilder/apwContentPagePlugins.js.map +1 -1
  124. package/plugins/pageBuilder/extendPbPageSettingsSchema.js +6 -1
  125. package/plugins/pageBuilder/extendPbPageSettingsSchema.js.map +1 -1
  126. package/plugins/pageBuilder/index.js +11 -0
  127. package/plugins/pageBuilder/index.js.map +1 -1
  128. package/plugins/pageBuilder/linkContentReviewToPage.js +16 -0
  129. package/plugins/pageBuilder/linkContentReviewToPage.js.map +1 -1
  130. package/plugins/pageBuilder/linkWorkflowToPage.js +31 -1
  131. package/plugins/pageBuilder/linkWorkflowToPage.js.map +1 -1
  132. package/plugins/pageBuilder/notifications/changeRequestNotification.js +4 -0
  133. package/plugins/pageBuilder/notifications/changeRequestNotification.js.map +1 -1
  134. package/plugins/pageBuilder/notifications/commentNotification.js +4 -0
  135. package/plugins/pageBuilder/notifications/commentNotification.js.map +1 -1
  136. package/plugins/pageBuilder/notifications/contentReviewNotification.js +4 -0
  137. package/plugins/pageBuilder/notifications/contentReviewNotification.js.map +1 -1
  138. package/plugins/pageBuilder/notifications/contentUrl.js +7 -1
  139. package/plugins/pageBuilder/notifications/contentUrl.js.map +1 -1
  140. package/plugins/pageBuilder/triggerContentReview.js +11 -0
  141. package/plugins/pageBuilder/triggerContentReview.js.map +1 -1
  142. package/plugins/pageBuilder/updateContentReviewStatus.js +12 -0
  143. package/plugins/pageBuilder/updateContentReviewStatus.js.map +1 -1
  144. package/plugins/pageBuilder/utils.js +35 -1
  145. package/plugins/pageBuilder/utils.js.map +1 -1
  146. package/plugins/utils.js +43 -0
  147. package/plugins/utils.js.map +1 -1
  148. package/scheduler/createScheduleActionMethods.js +20 -1
  149. package/scheduler/createScheduleActionMethods.js.map +1 -1
  150. package/scheduler/handlers/executeAction/index.js +33 -9
  151. package/scheduler/handlers/executeAction/index.js.map +1 -1
  152. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js +5 -0
  153. package/scheduler/handlers/executeAction/plugins/ApplicationGraphQL.js.map +1 -1
  154. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js +21 -0
  155. package/scheduler/handlers/executeAction/plugins/HeadlessCMSGraphQL.js.map +1 -1
  156. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js +27 -4
  157. package/scheduler/handlers/executeAction/plugins/PageBuilderGraphQL.js.map +1 -1
  158. package/scheduler/handlers/executeAction/security.js +11 -0
  159. package/scheduler/handlers/executeAction/security.js.map +1 -1
  160. package/scheduler/handlers/scheduleAction/index.js +25 -5
  161. package/scheduler/handlers/scheduleAction/index.js.map +1 -1
  162. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js +23 -2
  163. package/scheduler/handlers/scheduleAction/scheduleAction.utils.js.map +1 -1
  164. package/scheduler/handlers/utils.js +40 -3
  165. package/scheduler/handlers/utils.js.map +1 -1
  166. package/scheduler/index.js +3 -0
  167. package/scheduler/index.js.map +1 -1
  168. package/scheduler/types.js +6 -0
  169. package/scheduler/types.js.map +1 -1
  170. package/storageOperations/changeRequestStorageOperations.js +19 -0
  171. package/storageOperations/changeRequestStorageOperations.js.map +1 -1
  172. package/storageOperations/commentStorageOperations.js +21 -0
  173. package/storageOperations/commentStorageOperations.js.map +1 -1
  174. package/storageOperations/contentReviewStorageOperations.js +17 -0
  175. package/storageOperations/contentReviewStorageOperations.js.map +1 -1
  176. package/storageOperations/index.js +14 -0
  177. package/storageOperations/index.js.map +1 -1
  178. package/storageOperations/models/changeRequest.model.js +9 -0
  179. package/storageOperations/models/changeRequest.model.js.map +1 -1
  180. package/storageOperations/models/comment.model.js +8 -0
  181. package/storageOperations/models/comment.model.js.map +1 -1
  182. package/storageOperations/models/contentModelPluginFactory.js +5 -0
  183. package/storageOperations/models/contentModelPluginFactory.js.map +1 -1
  184. package/storageOperations/models/contentReview.model.js +26 -0
  185. package/storageOperations/models/contentReview.model.js.map +1 -1
  186. package/storageOperations/models/index.js +24 -2
  187. package/storageOperations/models/index.js.map +1 -1
  188. package/storageOperations/models/reviewer.model.js +8 -0
  189. package/storageOperations/models/reviewer.model.js.map +1 -1
  190. package/storageOperations/models/utils.js +4 -0
  191. package/storageOperations/models/utils.js.map +1 -1
  192. package/storageOperations/models/workflow.model.js +23 -0
  193. package/storageOperations/models/workflow.model.js.map +1 -1
  194. package/storageOperations/reviewerStorageOperations.js +17 -0
  195. package/storageOperations/reviewerStorageOperations.js.map +1 -1
  196. package/storageOperations/workflowStorageOperations.js +19 -0
  197. package/storageOperations/workflowStorageOperations.js.map +1 -1
  198. package/types.js +14 -0
  199. package/types.js.map +1 -1
  200. package/utils/contentApwSettingsPlugin.js +6 -0
  201. package/utils/contentApwSettingsPlugin.js.map +1 -1
  202. package/utils/errors.js +17 -0
  203. package/utils/errors.js.map +1 -1
  204. package/utils/fieldResolver.js +12 -2
  205. package/utils/fieldResolver.js.map +1 -1
  206. package/utils/resolve.js +3 -0
  207. package/utils/resolve.js.map +1 -1
@@ -4,13 +4,15 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.createContentUrlPlugin = exports.createContentEntryUrl = void 0;
7
+
7
8
  var _ApwContentUrlPlugin = require("../../../ApwContentUrlPlugin");
9
+
8
10
  var _types = require("../../../types");
11
+
9
12
  /**
10
13
  * In this file we create a plugin which in turn creates a content entry url when requested by the code which sends notifications.
11
14
  * Due to multiple content types for the APW, everything needs to be pluginable.
12
15
  */
13
-
14
16
  const createContentEntryUrl = params => {
15
17
  /**
16
18
  * All variables must exist for URL to be created.
@@ -20,9 +22,11 @@ const createContentEntryUrl = params => {
20
22
  if (!!key) {
21
23
  continue;
22
24
  }
25
+
23
26
  console.log(`Missing variable "${key}", which we use to create a content entry URL.`);
24
27
  return null;
25
28
  }
29
+
26
30
  const {
27
31
  baseUrl,
28
32
  modelId,
@@ -30,7 +34,9 @@ const createContentEntryUrl = params => {
30
34
  } = params;
31
35
  return `${baseUrl}/cms/content-entries/${modelId}?id=${id}`;
32
36
  };
37
+
33
38
  exports.createContentEntryUrl = createContentEntryUrl;
39
+
34
40
  const createContentUrlPlugin = () => {
35
41
  return (0, _ApwContentUrlPlugin.createApwContentUrlPlugin)(_types.ApwContentTypes.CMS_ENTRY, params => {
36
42
  const {
@@ -50,4 +56,5 @@ const createContentUrlPlugin = () => {
50
56
  });
51
57
  });
52
58
  };
59
+
53
60
  exports.createContentUrlPlugin = createContentUrlPlugin;
@@ -1 +1 @@
1
- {"version":3,"names":["createContentEntryUrl","params","key","console","log","baseUrl","modelId","id","createContentUrlPlugin","createApwContentUrlPlugin","ApwContentTypes","CMS_ENTRY","contentReview","content","settings"],"sources":["contentUrl.ts"],"sourcesContent":["/**\n * In this file we create a plugin which in turn creates a content entry url when requested by the code which sends notifications.\n * Due to multiple content types for the APW, everything needs to be pluginable.\n */\nimport { createApwContentUrlPlugin } from \"~/ApwContentUrlPlugin\";\nimport { ApwContentTypes } from \"~/types\";\n\ninterface CreateContentEntryUrlParams {\n baseUrl?: string;\n modelId?: string;\n id: string;\n}\nexport const createContentEntryUrl = (params: CreateContentEntryUrlParams): string | null => {\n /**\n * All variables must exist for URL to be created.\n * We go through all vars and throw a log if it does not exist.\n */\n for (const key in params) {\n if (!!key) {\n continue;\n }\n console.log(`Missing variable \"${key}\", which we use to create a content entry URL.`);\n return null;\n }\n const { baseUrl, modelId, id } = params;\n return `${baseUrl}/cms/content-entries/${modelId}?id=${id}`;\n};\n\nexport const createContentUrlPlugin = () => {\n return createApwContentUrlPlugin(ApwContentTypes.CMS_ENTRY, params => {\n const { baseUrl, contentReview } = params;\n const { id } = contentReview.content;\n const { modelId } = contentReview.content.settings;\n return createContentEntryUrl({\n baseUrl,\n modelId,\n id\n });\n });\n};\n"],"mappings":";;;;;;AAIA;AACA;AALA;AACA;AACA;AACA;;AASO,MAAMA,qBAAqB,GAAIC,MAAmC,IAAoB;EACzF;AACJ;AACA;AACA;EACI,KAAK,MAAMC,GAAG,IAAID,MAAM,EAAE;IACtB,IAAI,CAAC,CAACC,GAAG,EAAE;MACP;IACJ;IACAC,OAAO,CAACC,GAAG,CAAE,qBAAoBF,GAAI,gDAA+C,CAAC;IACrF,OAAO,IAAI;EACf;EACA,MAAM;IAAEG,OAAO;IAAEC,OAAO;IAAEC;EAAG,CAAC,GAAGN,MAAM;EACvC,OAAQ,GAAEI,OAAQ,wBAAuBC,OAAQ,OAAMC,EAAG,EAAC;AAC/D,CAAC;AAAC;AAEK,MAAMC,sBAAsB,GAAG,MAAM;EACxC,OAAO,IAAAC,8CAAyB,EAACC,sBAAe,CAACC,SAAS,EAAEV,MAAM,IAAI;IAClE,MAAM;MAAEI,OAAO;MAAEO;IAAc,CAAC,GAAGX,MAAM;IACzC,MAAM;MAAEM;IAAG,CAAC,GAAGK,aAAa,CAACC,OAAO;IACpC,MAAM;MAAEP;IAAQ,CAAC,GAAGM,aAAa,CAACC,OAAO,CAACC,QAAQ;IAClD,OAAOd,qBAAqB,CAAC;MACzBK,OAAO;MACPC,OAAO;MACPC;IACJ,CAAC,CAAC;EACN,CAAC,CAAC;AACN,CAAC;AAAC"}
1
+ {"version":3,"names":["createContentEntryUrl","params","key","console","log","baseUrl","modelId","id","createContentUrlPlugin","createApwContentUrlPlugin","ApwContentTypes","CMS_ENTRY","contentReview","content","settings"],"sources":["contentUrl.ts"],"sourcesContent":["/**\n * In this file we create a plugin which in turn creates a content entry url when requested by the code which sends notifications.\n * Due to multiple content types for the APW, everything needs to be pluginable.\n */\nimport { createApwContentUrlPlugin } from \"~/ApwContentUrlPlugin\";\nimport { ApwContentTypes } from \"~/types\";\n\ninterface CreateContentEntryUrlParams {\n baseUrl?: string;\n modelId?: string;\n id: string;\n}\nexport const createContentEntryUrl = (params: CreateContentEntryUrlParams): string | null => {\n /**\n * All variables must exist for URL to be created.\n * We go through all vars and throw a log if it does not exist.\n */\n for (const key in params) {\n if (!!key) {\n continue;\n }\n console.log(`Missing variable \"${key}\", which we use to create a content entry URL.`);\n return null;\n }\n const { baseUrl, modelId, id } = params;\n return `${baseUrl}/cms/content-entries/${modelId}?id=${id}`;\n};\n\nexport const createContentUrlPlugin = () => {\n return createApwContentUrlPlugin(ApwContentTypes.CMS_ENTRY, params => {\n const { baseUrl, contentReview } = params;\n const { id } = contentReview.content;\n const { modelId } = contentReview.content.settings;\n return createContentEntryUrl({\n baseUrl,\n modelId,\n id\n });\n });\n};\n"],"mappings":";;;;;;;AAIA;;AACA;;AALA;AACA;AACA;AACA;AASO,MAAMA,qBAAqB,GAAIC,MAAD,IAAwD;EACzF;AACJ;AACA;AACA;EACI,KAAK,MAAMC,GAAX,IAAkBD,MAAlB,EAA0B;IACtB,IAAI,CAAC,CAACC,GAAN,EAAW;MACP;IACH;;IACDC,OAAO,CAACC,GAAR,CAAa,qBAAoBF,GAAI,gDAArC;IACA,OAAO,IAAP;EACH;;EACD,MAAM;IAAEG,OAAF;IAAWC,OAAX;IAAoBC;EAApB,IAA2BN,MAAjC;EACA,OAAQ,GAAEI,OAAQ,wBAAuBC,OAAQ,OAAMC,EAAG,EAA1D;AACH,CAdM;;;;AAgBA,MAAMC,sBAAsB,GAAG,MAAM;EACxC,OAAO,IAAAC,8CAAA,EAA0BC,sBAAA,CAAgBC,SAA1C,EAAqDV,MAAM,IAAI;IAClE,MAAM;MAAEI,OAAF;MAAWO;IAAX,IAA6BX,MAAnC;IACA,MAAM;MAAEM;IAAF,IAASK,aAAa,CAACC,OAA7B;IACA,MAAM;MAAEP;IAAF,IAAcM,aAAa,CAACC,OAAd,CAAsBC,QAA1C;IACA,OAAOd,qBAAqB,CAAC;MACzBK,OADyB;MAEzBC,OAFyB;MAGzBC;IAHyB,CAAD,CAA5B;EAKH,CATM,CAAP;AAUH,CAXM"}
@@ -1,13 +1,18 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.triggerContentReview = void 0;
9
+
8
10
  var _error = _interopRequireDefault(require("@webiny/error"));
11
+
9
12
  var _types = require("../../types");
13
+
10
14
  var _utils = require("./utils");
15
+
11
16
  const triggerContentReview = params => {
12
17
  const {
13
18
  cms,
@@ -18,28 +23,37 @@ const triggerContentReview = params => {
18
23
  model
19
24
  }) => {
20
25
  var _entry$meta, _entry$meta$apw, _entry$meta2, _entry$meta2$apw;
26
+
21
27
  if ((0, _utils.isAwpModel)(model)) {
22
28
  return;
23
29
  }
30
+
24
31
  const contentReviewId = (_entry$meta = entry.meta) === null || _entry$meta === void 0 ? void 0 : (_entry$meta$apw = _entry$meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.contentReviewId;
32
+
25
33
  if (contentReviewId) {
26
34
  const contentReview = await apw.contentReview.get(contentReviewId);
35
+
27
36
  if (contentReview.reviewStatus !== _types.ApwContentReviewStatus.UNDER_REVIEW) {
28
37
  return;
29
38
  }
39
+
30
40
  throw new _error.default(`A peer review for this content has been already requested.`, "REVIEW_ALREADY_EXIST", {
31
41
  contentReviewId,
32
42
  entry
33
43
  });
34
44
  }
45
+
35
46
  const workflowId = (_entry$meta2 = entry.meta) === null || _entry$meta2 === void 0 ? void 0 : (_entry$meta2$apw = _entry$meta2.apw) === null || _entry$meta2$apw === void 0 ? void 0 : _entry$meta2$apw.workflowId;
47
+
36
48
  if (!workflowId) {
37
49
  return;
38
50
  }
51
+
39
52
  throw new _error.default("This content requires peer review approval before it can be published.", "REVIEW_REQUIRED", {
40
53
  workflowId,
41
54
  entry
42
55
  });
43
56
  });
44
57
  };
58
+
45
59
  exports.triggerContentReview = triggerContentReview;
@@ -1 +1 @@
1
- {"version":3,"names":["triggerContentReview","params","cms","apw","onEntryBeforePublish","subscribe","entry","model","isAwpModel","contentReviewId","meta","contentReview","get","reviewStatus","ApwContentReviewStatus","UNDER_REVIEW","Error","workflowId"],"sources":["triggerContentReview.ts"],"sourcesContent":["import Error from \"@webiny/error\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReviewStatus,\n OnCmsEntryBeforePublishTopicParams\n} from \"~/types\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { isAwpModel } from \"~/plugins/cms/utils\";\n\ninterface TriggerContentReviewParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const triggerContentReview = (params: TriggerContentReviewParams) => {\n const { cms, apw } = params;\n\n cms.onEntryBeforePublish.subscribe<OnCmsEntryBeforePublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n if (contentReviewId) {\n const contentReview = await apw.contentReview.get(contentReviewId);\n\n if (contentReview.reviewStatus !== ApwContentReviewStatus.UNDER_REVIEW) {\n return;\n }\n throw new Error(\n `A peer review for this content has been already requested.`,\n \"REVIEW_ALREADY_EXIST\",\n {\n contentReviewId,\n entry\n }\n );\n }\n\n const workflowId = entry.meta?.apw?.workflowId;\n\n if (!workflowId) {\n return;\n }\n throw new Error(\n \"This content requires peer review approval before it can be published.\",\n \"REVIEW_REQUIRED\",\n {\n workflowId,\n entry\n }\n );\n }\n );\n};\n"],"mappings":";;;;;;;AAAA;AACA;AAMA;AAMO,MAAMA,oBAAoB,GAAIC,MAAkC,IAAK;EACxE,MAAM;IAAEC,GAAG;IAAEC;EAAI,CAAC,GAAGF,MAAM;EAE3BC,GAAG,CAACE,oBAAoB,CAACC,SAAS,CAC9B,OAAO;IAAEC,KAAK;IAAEC;EAAM,CAAC,KAAK;IAAA;IACxB,IAAI,IAAAC,iBAAU,EAACD,KAAK,CAAC,EAAE;MACnB;IACJ;IACA,MAAME,eAAe,kBAAGH,KAAK,CAACI,IAAI,mEAAV,YAAYP,GAAG,oDAAf,gBAAiBM,eAAe;IACxD,IAAIA,eAAe,EAAE;MACjB,MAAME,aAAa,GAAG,MAAMR,GAAG,CAACQ,aAAa,CAACC,GAAG,CAACH,eAAe,CAAC;MAElE,IAAIE,aAAa,CAACE,YAAY,KAAKC,6BAAsB,CAACC,YAAY,EAAE;QACpE;MACJ;MACA,MAAM,IAAIC,cAAK,CACV,4DAA2D,EAC5D,sBAAsB,EACtB;QACIP,eAAe;QACfH;MACJ,CAAC,CACJ;IACL;IAEA,MAAMW,UAAU,mBAAGX,KAAK,CAACI,IAAI,qEAAV,aAAYP,GAAG,qDAAf,iBAAiBc,UAAU;IAE9C,IAAI,CAACA,UAAU,EAAE;MACb;IACJ;IACA,MAAM,IAAID,cAAK,CACX,wEAAwE,EACxE,iBAAiB,EACjB;MACIC,UAAU;MACVX;IACJ,CAAC,CACJ;EACL,CAAC,CACJ;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["triggerContentReview","params","cms","apw","onEntryBeforePublish","subscribe","entry","model","isAwpModel","contentReviewId","meta","contentReview","get","reviewStatus","ApwContentReviewStatus","UNDER_REVIEW","Error","workflowId"],"sources":["triggerContentReview.ts"],"sourcesContent":["import Error from \"@webiny/error\";\nimport {\n AdvancedPublishingWorkflow,\n ApwContentReviewStatus,\n OnCmsEntryBeforePublishTopicParams\n} from \"~/types\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { isAwpModel } from \"~/plugins/cms/utils\";\n\ninterface TriggerContentReviewParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n}\nexport const triggerContentReview = (params: TriggerContentReviewParams) => {\n const { cms, apw } = params;\n\n cms.onEntryBeforePublish.subscribe<OnCmsEntryBeforePublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n if (contentReviewId) {\n const contentReview = await apw.contentReview.get(contentReviewId);\n\n if (contentReview.reviewStatus !== ApwContentReviewStatus.UNDER_REVIEW) {\n return;\n }\n throw new Error(\n `A peer review for this content has been already requested.`,\n \"REVIEW_ALREADY_EXIST\",\n {\n contentReviewId,\n entry\n }\n );\n }\n\n const workflowId = entry.meta?.apw?.workflowId;\n\n if (!workflowId) {\n return;\n }\n throw new Error(\n \"This content requires peer review approval before it can be published.\",\n \"REVIEW_REQUIRED\",\n {\n workflowId,\n entry\n }\n );\n }\n );\n};\n"],"mappings":";;;;;;;;;AAAA;;AACA;;AAMA;;AAMO,MAAMA,oBAAoB,GAAIC,MAAD,IAAwC;EACxE,MAAM;IAAEC,GAAF;IAAOC;EAAP,IAAeF,MAArB;EAEAC,GAAG,CAACE,oBAAJ,CAAyBC,SAAzB,CACI,OAAO;IAAEC,KAAF;IAASC;EAAT,CAAP,KAA4B;IAAA;;IACxB,IAAI,IAAAC,iBAAA,EAAWD,KAAX,CAAJ,EAAuB;MACnB;IACH;;IACD,MAAME,eAAe,kBAAGH,KAAK,CAACI,IAAT,mEAAG,YAAYP,GAAf,oDAAG,gBAAiBM,eAAzC;;IACA,IAAIA,eAAJ,EAAqB;MACjB,MAAME,aAAa,GAAG,MAAMR,GAAG,CAACQ,aAAJ,CAAkBC,GAAlB,CAAsBH,eAAtB,CAA5B;;MAEA,IAAIE,aAAa,CAACE,YAAd,KAA+BC,6BAAA,CAAuBC,YAA1D,EAAwE;QACpE;MACH;;MACD,MAAM,IAAIC,cAAJ,CACD,4DADC,EAEF,sBAFE,EAGF;QACIP,eADJ;QAEIH;MAFJ,CAHE,CAAN;IAQH;;IAED,MAAMW,UAAU,mBAAGX,KAAK,CAACI,IAAT,qEAAG,aAAYP,GAAf,qDAAG,iBAAiBc,UAApC;;IAEA,IAAI,CAACA,UAAL,EAAiB;MACb;IACH;;IACD,MAAM,IAAID,cAAJ,CACF,wEADE,EAEF,iBAFE,EAGF;MACIC,UADJ;MAEIX;IAFJ,CAHE,CAAN;EAQH,CAnCL;AAqCH,CAxCM"}
@@ -1,14 +1,20 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.updateContentReviewStatus = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _types = require("../../types");
13
+
10
14
  var _utils = require("../../crud/utils");
15
+
11
16
  var _utils2 = require("./utils");
17
+
12
18
  const updateContentReviewStatus = params => {
13
19
  const {
14
20
  apw,
@@ -20,24 +26,30 @@ const updateContentReviewStatus = params => {
20
26
  model
21
27
  }) => {
22
28
  var _entry$meta, _entry$meta$apw;
29
+
23
30
  if ((0, _utils2.isAwpModel)(model)) {
24
31
  return;
25
32
  }
33
+
26
34
  const contentReviewId = (_entry$meta = entry.meta) === null || _entry$meta === void 0 ? void 0 : (_entry$meta$apw = _entry$meta.apw) === null || _entry$meta$apw === void 0 ? void 0 : _entry$meta$apw.contentReviewId;
27
35
  /**
28
36
  * Bail out if there is no "content review" linked.
29
37
  */
38
+
30
39
  if (!contentReviewId) {
31
40
  return;
32
41
  }
42
+
33
43
  const contentReview = await apw.contentReview.get(contentReviewId);
34
44
  const identity = security.getIdentity();
35
45
  /**
36
46
  * If content review is "readyToBePublished set its status as "published" after page publish.
37
47
  */
48
+
38
49
  if (contentReview.reviewStatus !== _types.ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {
39
50
  return;
40
51
  }
52
+
41
53
  await apw.contentReview.update(contentReviewId, {
42
54
  reviewStatus: _types.ApwContentReviewStatus.PUBLISHED,
43
55
  content: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, contentReview.content), _utils.INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META), {}, {
@@ -50,16 +62,20 @@ const updateContentReviewStatus = params => {
50
62
  model
51
63
  }) => {
52
64
  var _entry$meta2, _entry$meta2$apw;
65
+
53
66
  if ((0, _utils2.isAwpModel)(model)) {
54
67
  return;
55
68
  }
69
+
56
70
  const contentReviewId = (_entry$meta2 = entry.meta) === null || _entry$meta2 === void 0 ? void 0 : (_entry$meta2$apw = _entry$meta2.apw) === null || _entry$meta2$apw === void 0 ? void 0 : _entry$meta2$apw.contentReviewId;
57
71
  /**
58
72
  * Bail out if there is no "content review" linked.
59
73
  */
74
+
60
75
  if (!contentReviewId) {
61
76
  return;
62
77
  }
78
+
63
79
  const contentReview = await apw.contentReview.get(contentReviewId);
64
80
  /**
65
81
  * If content review is "published set its status as "readyToBePublished" after page unpublish.
@@ -68,6 +84,7 @@ const updateContentReviewStatus = params => {
68
84
  if (contentReview.reviewStatus !== _types.ApwContentReviewStatus.PUBLISHED) {
69
85
  return;
70
86
  }
87
+
71
88
  await apw.contentReview.update(contentReviewId, {
72
89
  reviewStatus: _types.ApwContentReviewStatus.READY_TO_BE_PUBLISHED,
73
90
  content: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, contentReview.content), _utils.INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META), {}, {
@@ -76,4 +93,5 @@ const updateContentReviewStatus = params => {
76
93
  });
77
94
  });
78
95
  };
96
+
79
97
  exports.updateContentReviewStatus = updateContentReviewStatus;
@@ -1 +1 @@
1
- {"version":3,"names":["updateContentReviewStatus","params","apw","cms","security","onEntryAfterPublish","subscribe","entry","model","isAwpModel","contentReviewId","meta","contentReview","get","identity","getIdentity","reviewStatus","ApwContentReviewStatus","READY_TO_BE_PUBLISHED","update","PUBLISHED","content","INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META","publishedBy","id","onEntryAfterUnpublish"],"sources":["updateContentReviewStatus.ts"],"sourcesContent":["import {\n AdvancedPublishingWorkflow,\n ApwContentReviewStatus,\n OnCmsEntryAfterPublishTopicParams,\n OnCmsEntryAfterUnpublishTopicParams\n} from \"~/types\";\nimport { INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META } from \"~/crud/utils\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { Security } from \"@webiny/api-security/types\";\nimport { isAwpModel } from \"~/plugins/cms/utils\";\n\ninterface UpdateContentReviewStatusParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n security: Security;\n}\n\nexport const updateContentReviewStatus = (params: UpdateContentReviewStatusParams) => {\n const { apw, cms, security } = params;\n\n cms.onEntryAfterPublish.subscribe<OnCmsEntryAfterPublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n /**\n * Bail out if there is no \"content review\" linked.\n */\n if (!contentReviewId) {\n return;\n }\n\n const contentReview = await apw.contentReview.get(contentReviewId);\n const identity = security.getIdentity();\n /**\n * If content review is \"readyToBePublished set its status as \"published\" after page publish.\n */\n if (contentReview.reviewStatus !== ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {\n return;\n }\n await apw.contentReview.update(contentReviewId, {\n reviewStatus: ApwContentReviewStatus.PUBLISHED,\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META,\n publishedBy: identity.id\n }\n });\n }\n );\n cms.onEntryAfterUnpublish.subscribe<OnCmsEntryAfterUnpublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n /**\n * Bail out if there is no \"content review\" linked.\n */\n if (!contentReviewId) {\n return;\n }\n\n const contentReview = await apw.contentReview.get(contentReviewId);\n /**\n * If content review is \"published set its status as \"readyToBePublished\" after page unpublish.\n */\n\n if (contentReview.reviewStatus !== ApwContentReviewStatus.PUBLISHED) {\n return;\n }\n await apw.contentReview.update(contentReviewId, {\n reviewStatus: ApwContentReviewStatus.READY_TO_BE_PUBLISHED,\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META,\n publishedBy: null\n }\n });\n }\n );\n};\n"],"mappings":";;;;;;;;AAAA;AAMA;AAGA;AAQO,MAAMA,yBAAyB,GAAIC,MAAuC,IAAK;EAClF,MAAM;IAAEC,GAAG;IAAEC,GAAG;IAAEC;EAAS,CAAC,GAAGH,MAAM;EAErCE,GAAG,CAACE,mBAAmB,CAACC,SAAS,CAC7B,OAAO;IAAEC,KAAK;IAAEC;EAAM,CAAC,KAAK;IAAA;IACxB,IAAI,IAAAC,kBAAU,EAACD,KAAK,CAAC,EAAE;MACnB;IACJ;IACA,MAAME,eAAe,kBAAGH,KAAK,CAACI,IAAI,mEAAV,YAAYT,GAAG,oDAAf,gBAAiBQ,eAAe;IACxD;AACZ;AACA;IACY,IAAI,CAACA,eAAe,EAAE;MAClB;IACJ;IAEA,MAAME,aAAa,GAAG,MAAMV,GAAG,CAACU,aAAa,CAACC,GAAG,CAACH,eAAe,CAAC;IAClE,MAAMI,QAAQ,GAAGV,QAAQ,CAACW,WAAW,EAAE;IACvC;AACZ;AACA;IACY,IAAIH,aAAa,CAACI,YAAY,KAAKC,6BAAsB,CAACC,qBAAqB,EAAE;MAC7E;IACJ;IACA,MAAMhB,GAAG,CAACU,aAAa,CAACO,MAAM,CAACT,eAAe,EAAE;MAC5CM,YAAY,EAAEC,6BAAsB,CAACG,SAAS;MAC9CC,OAAO,0FACAT,aAAa,CAACS,OAAO,GACrBC,mDAA4C;QAC/CC,WAAW,EAAET,QAAQ,CAACU;MAAE;IAEhC,CAAC,CAAC;EACN,CAAC,CACJ;EACDrB,GAAG,CAACsB,qBAAqB,CAACnB,SAAS,CAC/B,OAAO;IAAEC,KAAK;IAAEC;EAAM,CAAC,KAAK;IAAA;IACxB,IAAI,IAAAC,kBAAU,EAACD,KAAK,CAAC,EAAE;MACnB;IACJ;IACA,MAAME,eAAe,mBAAGH,KAAK,CAACI,IAAI,qEAAV,aAAYT,GAAG,qDAAf,iBAAiBQ,eAAe;IACxD;AACZ;AACA;IACY,IAAI,CAACA,eAAe,EAAE;MAClB;IACJ;IAEA,MAAME,aAAa,GAAG,MAAMV,GAAG,CAACU,aAAa,CAACC,GAAG,CAACH,eAAe,CAAC;IAClE;AACZ;AACA;;IAEY,IAAIE,aAAa,CAACI,YAAY,KAAKC,6BAAsB,CAACG,SAAS,EAAE;MACjE;IACJ;IACA,MAAMlB,GAAG,CAACU,aAAa,CAACO,MAAM,CAACT,eAAe,EAAE;MAC5CM,YAAY,EAAEC,6BAAsB,CAACC,qBAAqB;MAC1DG,OAAO,0FACAT,aAAa,CAACS,OAAO,GACrBC,mDAA4C;QAC/CC,WAAW,EAAE;MAAI;IAEzB,CAAC,CAAC;EACN,CAAC,CACJ;AACL,CAAC;AAAC"}
1
+ {"version":3,"names":["updateContentReviewStatus","params","apw","cms","security","onEntryAfterPublish","subscribe","entry","model","isAwpModel","contentReviewId","meta","contentReview","get","identity","getIdentity","reviewStatus","ApwContentReviewStatus","READY_TO_BE_PUBLISHED","update","PUBLISHED","content","INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META","publishedBy","id","onEntryAfterUnpublish"],"sources":["updateContentReviewStatus.ts"],"sourcesContent":["import {\n AdvancedPublishingWorkflow,\n ApwContentReviewStatus,\n OnCmsEntryAfterPublishTopicParams,\n OnCmsEntryAfterUnpublishTopicParams\n} from \"~/types\";\nimport { INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META } from \"~/crud/utils\";\nimport { HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport { Security } from \"@webiny/api-security/types\";\nimport { isAwpModel } from \"~/plugins/cms/utils\";\n\ninterface UpdateContentReviewStatusParams {\n apw: AdvancedPublishingWorkflow;\n cms: HeadlessCms;\n security: Security;\n}\n\nexport const updateContentReviewStatus = (params: UpdateContentReviewStatusParams) => {\n const { apw, cms, security } = params;\n\n cms.onEntryAfterPublish.subscribe<OnCmsEntryAfterPublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n /**\n * Bail out if there is no \"content review\" linked.\n */\n if (!contentReviewId) {\n return;\n }\n\n const contentReview = await apw.contentReview.get(contentReviewId);\n const identity = security.getIdentity();\n /**\n * If content review is \"readyToBePublished set its status as \"published\" after page publish.\n */\n if (contentReview.reviewStatus !== ApwContentReviewStatus.READY_TO_BE_PUBLISHED) {\n return;\n }\n await apw.contentReview.update(contentReviewId, {\n reviewStatus: ApwContentReviewStatus.PUBLISHED,\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META,\n publishedBy: identity.id\n }\n });\n }\n );\n cms.onEntryAfterUnpublish.subscribe<OnCmsEntryAfterUnpublishTopicParams>(\n async ({ entry, model }) => {\n if (isAwpModel(model)) {\n return;\n }\n const contentReviewId = entry.meta?.apw?.contentReviewId;\n /**\n * Bail out if there is no \"content review\" linked.\n */\n if (!contentReviewId) {\n return;\n }\n\n const contentReview = await apw.contentReview.get(contentReviewId);\n /**\n * If content review is \"published set its status as \"readyToBePublished\" after page unpublish.\n */\n\n if (contentReview.reviewStatus !== ApwContentReviewStatus.PUBLISHED) {\n return;\n }\n await apw.contentReview.update(contentReviewId, {\n reviewStatus: ApwContentReviewStatus.READY_TO_BE_PUBLISHED,\n content: {\n ...contentReview.content,\n ...INITIAL_CONTENT_REVIEW_CONTENT_SCHEDULE_META,\n publishedBy: null\n }\n });\n }\n );\n};\n"],"mappings":";;;;;;;;;;;AAAA;;AAMA;;AAGA;;AAQO,MAAMA,yBAAyB,GAAIC,MAAD,IAA6C;EAClF,MAAM;IAAEC,GAAF;IAAOC,GAAP;IAAYC;EAAZ,IAAyBH,MAA/B;EAEAE,GAAG,CAACE,mBAAJ,CAAwBC,SAAxB,CACI,OAAO;IAAEC,KAAF;IAASC;EAAT,CAAP,KAA4B;IAAA;;IACxB,IAAI,IAAAC,kBAAA,EAAWD,KAAX,CAAJ,EAAuB;MACnB;IACH;;IACD,MAAME,eAAe,kBAAGH,KAAK,CAACI,IAAT,mEAAG,YAAYT,GAAf,oDAAG,gBAAiBQ,eAAzC;IACA;AACZ;AACA;;IACY,IAAI,CAACA,eAAL,EAAsB;MAClB;IACH;;IAED,MAAME,aAAa,GAAG,MAAMV,GAAG,CAACU,aAAJ,CAAkBC,GAAlB,CAAsBH,eAAtB,CAA5B;IACA,MAAMI,QAAQ,GAAGV,QAAQ,CAACW,WAAT,EAAjB;IACA;AACZ;AACA;;IACY,IAAIH,aAAa,CAACI,YAAd,KAA+BC,6BAAA,CAAuBC,qBAA1D,EAAiF;MAC7E;IACH;;IACD,MAAMhB,GAAG,CAACU,aAAJ,CAAkBO,MAAlB,CAAyBT,eAAzB,EAA0C;MAC5CM,YAAY,EAAEC,6BAAA,CAAuBG,SADO;MAE5CC,OAAO,0FACAT,aAAa,CAACS,OADd,GAEAC,mDAFA;QAGHC,WAAW,EAAET,QAAQ,CAACU;MAHnB;IAFqC,CAA1C,CAAN;EAQH,CA7BL;EA+BArB,GAAG,CAACsB,qBAAJ,CAA0BnB,SAA1B,CACI,OAAO;IAAEC,KAAF;IAASC;EAAT,CAAP,KAA4B;IAAA;;IACxB,IAAI,IAAAC,kBAAA,EAAWD,KAAX,CAAJ,EAAuB;MACnB;IACH;;IACD,MAAME,eAAe,mBAAGH,KAAK,CAACI,IAAT,qEAAG,aAAYT,GAAf,qDAAG,iBAAiBQ,eAAzC;IACA;AACZ;AACA;;IACY,IAAI,CAACA,eAAL,EAAsB;MAClB;IACH;;IAED,MAAME,aAAa,GAAG,MAAMV,GAAG,CAACU,aAAJ,CAAkBC,GAAlB,CAAsBH,eAAtB,CAA5B;IACA;AACZ;AACA;;IAEY,IAAIE,aAAa,CAACI,YAAd,KAA+BC,6BAAA,CAAuBG,SAA1D,EAAqE;MACjE;IACH;;IACD,MAAMlB,GAAG,CAACU,aAAJ,CAAkBO,MAAlB,CAAyBT,eAAzB,EAA0C;MAC5CM,YAAY,EAAEC,6BAAA,CAAuBC,qBADO;MAE5CG,OAAO,0FACAT,aAAa,CAACS,OADd,GAEAC,mDAFA;QAGHC,WAAW,EAAE;MAHV;IAFqC,CAA1C,CAAN;EAQH,CA7BL;AA+BH,CAjEM"}
@@ -1,50 +1,72 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.updateEntryMeta = exports.isAwpModel = exports.hasEntries = exports.getLatestEntryRevision = exports.getEntryTitle = exports.fetchModel = exports.assignWorkflowToEntry = void 0;
9
+
8
10
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
11
+
9
12
  var _error = _interopRequireDefault(require("@webiny/error"));
13
+
10
14
  var _types = require("../../types");
15
+
11
16
  var _utils = require("../utils");
17
+
12
18
  var _changeRequest = require("../../storageOperations/models/changeRequest.model");
19
+
13
20
  var _comment = require("../../storageOperations/models/comment.model");
21
+
14
22
  var _contentReview = require("../../storageOperations/models/contentReview.model");
23
+
15
24
  var _reviewer = require("../../storageOperations/models/reviewer.model");
25
+
16
26
  var _workflow = require("../../storageOperations/models/workflow.model");
27
+
17
28
  const fetchModel = async (cms, id, settings) => {
18
29
  if (!settings) {
19
30
  throw new _error.default("Missing settings.", "SETTINGS_ERROR", {
20
31
  id
21
32
  });
22
33
  }
34
+
23
35
  const modelId = settings.modelId;
36
+
24
37
  if (!modelId) {
25
38
  throw new _error.default("Missing modelId in settings.", "MODEL_ID_ERROR", {
26
39
  id,
27
40
  settings
28
41
  });
29
42
  }
43
+
30
44
  const model = await cms.getModel(modelId);
45
+
31
46
  if (model) {
32
47
  return model;
33
48
  }
49
+
34
50
  throw new _error.default("There is no requested model in the system.", "MODEL_NOT_EXISTS", {
35
51
  id,
36
52
  settings
37
53
  });
38
54
  };
55
+
39
56
  exports.fetchModel = fetchModel;
57
+
40
58
  const getEntryTitle = (model, entry) => {
41
59
  const titleFieldId = model.titleFieldId;
60
+
42
61
  if (!titleFieldId || !entry.values[titleFieldId]) {
43
62
  return entry.id;
44
63
  }
64
+
45
65
  return entry.values[titleFieldId];
46
66
  };
67
+
47
68
  exports.getEntryTitle = getEntryTitle;
69
+
48
70
  const getLatestEntryRevision = async params => {
49
71
  const {
50
72
  cms,
@@ -53,14 +75,18 @@ const getLatestEntryRevision = async params => {
53
75
  } = params;
54
76
  const items = await cms.getLatestEntriesByIds(model, [entryId]);
55
77
  const item = items.shift();
78
+
56
79
  if (!item) {
57
80
  throw new _error.default("There is no entry with given ID.", "ENTRY_NOT_FOUND", {
58
81
  entryId
59
82
  });
60
83
  }
84
+
61
85
  return item;
62
86
  };
87
+
63
88
  exports.getLatestEntryRevision = getLatestEntryRevision;
89
+
64
90
  const updateEntryMeta = async params => {
65
91
  const {
66
92
  entryId,
@@ -75,31 +101,43 @@ const updateEntryMeta = async params => {
75
101
  });
76
102
  await cms.updateEntry(model, entry.id, {}, meta);
77
103
  };
104
+
78
105
  exports.updateEntryMeta = updateEntryMeta;
106
+
79
107
  const isWorkflowApplicable = (entry, workflow) => {
80
108
  const application = workflow.app;
109
+
81
110
  if (application !== _types.ApwWorkflowApplications.CMS) {
82
111
  return false;
83
112
  }
113
+
84
114
  const scopeType = workflow.scope.type;
115
+
85
116
  if (scopeType === _types.WorkflowScopeTypes.DEFAULT) {
86
117
  return true;
87
118
  } else if (scopeType === _types.WorkflowScopeTypes.CUSTOM) {
88
119
  var _workflow$scope$data, _workflow$scope$data2;
120
+
89
121
  const models = (_workflow$scope$data = workflow.scope.data) === null || _workflow$scope$data === void 0 ? void 0 : _workflow$scope$data.models;
122
+
90
123
  if (Array.isArray(models) && models.includes(entry.modelId)) {
91
124
  return true;
92
125
  }
126
+
93
127
  const entries = ((_workflow$scope$data2 = workflow.scope.data) === null || _workflow$scope$data2 === void 0 ? void 0 : _workflow$scope$data2.entries) || [];
128
+
94
129
  if (Array.isArray(entries) && entries.some(value => value.id === entry.entryId)) {
95
130
  return true;
96
131
  }
132
+
97
133
  return false;
98
134
  }
135
+
99
136
  throw new _error.default(`Unknown scope type "${scopeType}".`, "UNKNOWN_SCOPE_TYPE", {
100
137
  workflow
101
138
  });
102
139
  };
140
+
103
141
  const assignWorkflowToEntry = async params => {
104
142
  const {
105
143
  apw,
@@ -108,6 +146,7 @@ const assignWorkflowToEntry = async params => {
108
146
  /**
109
147
  * Lookup and assign "workflowId".
110
148
  */
149
+
111
150
  try {
112
151
  /*
113
152
  * List all workflows for app cms
@@ -118,23 +157,24 @@ const assignWorkflowToEntry = async params => {
118
157
  }
119
158
  });
120
159
  console.log(`Found ${entries.length} workflows.`);
121
-
122
160
  /*
123
161
  * Re-order them based on workflow scope and pre-defined rule i.e.
124
162
  * "specific" entry -> entry for a "category" -> "default".
125
163
  * There can be more than one workflow with same "scope" and "app".
126
164
  * Therefore, we are also sorting the workflows by `createdOn` to get the latest workflow.
127
165
  */
128
- const sortedWorkflows = entries.sort(_utils.workflowByPrecedenceDesc).sort(_utils.workflowByCreatedOnDesc);
129
166
 
167
+ const sortedWorkflows = entries.sort(_utils.workflowByPrecedenceDesc).sort(_utils.workflowByCreatedOnDesc);
130
168
  /**
131
169
  * Assign the first applicable workflow to the page and exit.
132
170
  */
171
+
133
172
  for (const workflow of sortedWorkflows) {
134
173
  if (isWorkflowApplicable(entry, workflow) === false) {
135
174
  console.log(`Not applying workflow ${workflow.id} to entry ${entry.id}.`);
136
175
  continue;
137
176
  }
177
+
138
178
  entry.meta = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, entry.meta || {}), {}, {
139
179
  apw: {
140
180
  workflowId: workflow.id,
@@ -147,7 +187,9 @@ const assignWorkflowToEntry = async params => {
147
187
  throw new _error.default(`Failed to assign workflow to CMS entry "${entry.id}".`, ex.code, ex.data);
148
188
  }
149
189
  };
190
+
150
191
  exports.assignWorkflowToEntry = assignWorkflowToEntry;
192
+
151
193
  const hasEntries = workflow => {
152
194
  const {
153
195
  app,
@@ -155,8 +197,11 @@ const hasEntries = workflow => {
155
197
  } = workflow;
156
198
  return app === _types.ApwWorkflowApplications.CMS && scope.type === _types.WorkflowScopeTypes.CUSTOM && scope.data && Array.isArray(scope.data.entries);
157
199
  };
200
+
158
201
  exports.hasEntries = hasEntries;
202
+
159
203
  const isAwpModel = model => {
160
204
  return [_changeRequest.CHANGE_REQUEST_MODEL_ID, _comment.COMMENT_MODEL_ID, _contentReview.CONTENT_REVIEW_MODEL_ID, _reviewer.REVIEWER_MODEL_ID, _workflow.WORKFLOW_MODEL_ID].includes(model.modelId);
161
205
  };
206
+
162
207
  exports.isAwpModel = isAwpModel;
@@ -1 +1 @@
1
- {"version":3,"names":["fetchModel","cms","id","settings","WebinyError","modelId","model","getModel","getEntryTitle","entry","titleFieldId","values","getLatestEntryRevision","params","entryId","items","getLatestEntriesByIds","item","shift","updateEntryMeta","meta","updateEntry","isWorkflowApplicable","workflow","application","app","ApwWorkflowApplications","CMS","scopeType","scope","type","WorkflowScopeTypes","DEFAULT","CUSTOM","models","data","Array","isArray","includes","entries","some","value","assignWorkflowToEntry","apw","list","where","console","log","length","sortedWorkflows","sort","workflowByPrecedenceDesc","workflowByCreatedOnDesc","workflowId","contentReviewId","ex","code","hasEntries","isAwpModel","CHANGE_REQUEST_MODEL_ID","COMMENT_MODEL_ID","CONTENT_REVIEW_MODEL_ID","REVIEWER_MODEL_ID","WORKFLOW_MODEL_ID"],"sources":["utils.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport {\n AdvancedPublishingWorkflow,\n ApwWorkflow,\n ApwWorkflowApplications,\n WorkflowScopeTypes\n} from \"~/types\";\nimport { workflowByCreatedOnDesc, workflowByPrecedenceDesc } from \"~/plugins/utils\";\nimport { CHANGE_REQUEST_MODEL_ID } from \"~/storageOperations/models/changeRequest.model\";\nimport { COMMENT_MODEL_ID } from \"~/storageOperations/models/comment.model\";\nimport { CONTENT_REVIEW_MODEL_ID } from \"~/storageOperations/models/contentReview.model\";\nimport { REVIEWER_MODEL_ID } from \"~/storageOperations/models/reviewer.model\";\nimport { WORKFLOW_MODEL_ID } from \"~/storageOperations/models/workflow.model\";\n\nexport const fetchModel = async (\n cms: HeadlessCms,\n id: string,\n settings?: { modelId?: string } | null\n): Promise<CmsModel> => {\n if (!settings) {\n throw new WebinyError(\"Missing settings.\", \"SETTINGS_ERROR\", {\n id\n });\n }\n const modelId = settings.modelId;\n if (!modelId) {\n throw new WebinyError(\"Missing modelId in settings.\", \"MODEL_ID_ERROR\", {\n id,\n settings\n });\n }\n const model = await cms.getModel(modelId);\n if (model) {\n return model;\n }\n throw new WebinyError(\"There is no requested model in the system.\", \"MODEL_NOT_EXISTS\", {\n id,\n settings\n });\n};\n\nexport const getEntryTitle = (model: CmsModel, entry: CmsEntry): string => {\n const titleFieldId = model.titleFieldId;\n if (!titleFieldId || !entry.values[titleFieldId]) {\n return entry.id;\n }\n return entry.values[titleFieldId];\n};\n\ninterface GetLatestEntryRevisionParams {\n cms: HeadlessCms;\n model: CmsModel;\n entryId: string;\n}\nexport const getLatestEntryRevision = async (\n params: GetLatestEntryRevisionParams\n): Promise<CmsEntry> => {\n const { cms, model, entryId } = params;\n const items = await cms.getLatestEntriesByIds(model, [entryId]);\n\n const item = items.shift();\n if (!item) {\n throw new WebinyError(\"There is no entry with given ID.\", \"ENTRY_NOT_FOUND\", {\n entryId\n });\n }\n return item;\n};\n\ninterface UpdateEntryMetaParams {\n meta: Record<string, any>;\n entryId: string;\n cms: HeadlessCms;\n model: CmsModel;\n}\nexport const updateEntryMeta = async (params: UpdateEntryMetaParams): Promise<void> => {\n const { entryId, cms, model, meta } = params;\n\n const entry = await getLatestEntryRevision({\n cms,\n model,\n entryId\n });\n\n await cms.updateEntry(model, entry.id, {}, meta);\n};\n\nconst isWorkflowApplicable = (entry: CmsEntry, workflow: ApwWorkflow): boolean => {\n const application = workflow.app;\n if (application !== ApwWorkflowApplications.CMS) {\n return false;\n }\n\n const scopeType = workflow.scope.type;\n\n if (scopeType === WorkflowScopeTypes.DEFAULT) {\n return true;\n } else if (scopeType === WorkflowScopeTypes.CUSTOM) {\n const models = workflow.scope.data?.models;\n\n if (Array.isArray(models) && models.includes(entry.modelId)) {\n return true;\n }\n\n const entries = workflow.scope.data?.entries || [];\n if (Array.isArray(entries) && entries.some(value => value.id === entry.entryId)) {\n return true;\n }\n return false;\n }\n throw new WebinyError(`Unknown scope type \"${scopeType}\".`, \"UNKNOWN_SCOPE_TYPE\", {\n workflow\n });\n};\n\ninterface AssignWorkflowToEntryParams {\n apw: AdvancedPublishingWorkflow;\n entry: CmsEntry;\n}\nexport const assignWorkflowToEntry = async (params: AssignWorkflowToEntryParams): Promise<void> => {\n const { apw, entry } = params;\n /**\n * Lookup and assign \"workflowId\".\n */\n try {\n /*\n * List all workflows for app cms\n */\n const [entries] = await apw.workflow.list({\n where: {\n app: ApwWorkflowApplications.CMS\n }\n });\n\n console.log(`Found ${entries.length} workflows.`);\n\n /*\n * Re-order them based on workflow scope and pre-defined rule i.e.\n * \"specific\" entry -> entry for a \"category\" -> \"default\".\n * There can be more than one workflow with same \"scope\" and \"app\".\n * Therefore, we are also sorting the workflows by `createdOn` to get the latest workflow.\n */\n const sortedWorkflows = entries\n .sort(workflowByPrecedenceDesc)\n .sort(workflowByCreatedOnDesc);\n\n /**\n * Assign the first applicable workflow to the page and exit.\n */\n for (const workflow of sortedWorkflows) {\n if (isWorkflowApplicable(entry, workflow) === false) {\n console.log(`Not applying workflow ${workflow.id} to entry ${entry.id}.`);\n continue;\n }\n entry.meta = {\n ...(entry.meta || {}),\n apw: {\n workflowId: workflow.id,\n contentReviewId: null\n }\n };\n return;\n }\n } catch (ex) {\n throw new WebinyError(\n `Failed to assign workflow to CMS entry \"${entry.id}\".`,\n ex.code,\n ex.data\n );\n }\n};\n\nexport const hasEntries = (workflow: ApwWorkflow): Boolean => {\n const { app, scope } = workflow;\n return (\n app === ApwWorkflowApplications.CMS &&\n scope.type === WorkflowScopeTypes.CUSTOM &&\n scope.data &&\n Array.isArray(scope.data.entries)\n );\n};\n\nexport const isAwpModel = (model: CmsModel): boolean => {\n return [\n CHANGE_REQUEST_MODEL_ID,\n COMMENT_MODEL_ID,\n CONTENT_REVIEW_MODEL_ID,\n REVIEWER_MODEL_ID,\n WORKFLOW_MODEL_ID\n ].includes(model.modelId);\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["fetchModel","cms","id","settings","WebinyError","modelId","model","getModel","getEntryTitle","entry","titleFieldId","values","getLatestEntryRevision","params","entryId","items","getLatestEntriesByIds","item","shift","updateEntryMeta","meta","updateEntry","isWorkflowApplicable","workflow","application","app","ApwWorkflowApplications","CMS","scopeType","scope","type","WorkflowScopeTypes","DEFAULT","CUSTOM","models","data","Array","isArray","includes","entries","some","value","assignWorkflowToEntry","apw","list","where","console","log","length","sortedWorkflows","sort","workflowByPrecedenceDesc","workflowByCreatedOnDesc","workflowId","contentReviewId","ex","code","hasEntries","isAwpModel","CHANGE_REQUEST_MODEL_ID","COMMENT_MODEL_ID","CONTENT_REVIEW_MODEL_ID","REVIEWER_MODEL_ID","WORKFLOW_MODEL_ID"],"sources":["utils.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\nimport { CmsEntry, CmsModel, HeadlessCms } from \"@webiny/api-headless-cms/types\";\nimport {\n AdvancedPublishingWorkflow,\n ApwWorkflow,\n ApwWorkflowApplications,\n WorkflowScopeTypes\n} from \"~/types\";\nimport { workflowByCreatedOnDesc, workflowByPrecedenceDesc } from \"~/plugins/utils\";\nimport { CHANGE_REQUEST_MODEL_ID } from \"~/storageOperations/models/changeRequest.model\";\nimport { COMMENT_MODEL_ID } from \"~/storageOperations/models/comment.model\";\nimport { CONTENT_REVIEW_MODEL_ID } from \"~/storageOperations/models/contentReview.model\";\nimport { REVIEWER_MODEL_ID } from \"~/storageOperations/models/reviewer.model\";\nimport { WORKFLOW_MODEL_ID } from \"~/storageOperations/models/workflow.model\";\n\nexport const fetchModel = async (\n cms: HeadlessCms,\n id: string,\n settings?: { modelId?: string } | null\n): Promise<CmsModel> => {\n if (!settings) {\n throw new WebinyError(\"Missing settings.\", \"SETTINGS_ERROR\", {\n id\n });\n }\n const modelId = settings.modelId;\n if (!modelId) {\n throw new WebinyError(\"Missing modelId in settings.\", \"MODEL_ID_ERROR\", {\n id,\n settings\n });\n }\n const model = await cms.getModel(modelId);\n if (model) {\n return model;\n }\n throw new WebinyError(\"There is no requested model in the system.\", \"MODEL_NOT_EXISTS\", {\n id,\n settings\n });\n};\n\nexport const getEntryTitle = (model: CmsModel, entry: CmsEntry): string => {\n const titleFieldId = model.titleFieldId;\n if (!titleFieldId || !entry.values[titleFieldId]) {\n return entry.id;\n }\n return entry.values[titleFieldId];\n};\n\ninterface GetLatestEntryRevisionParams {\n cms: HeadlessCms;\n model: CmsModel;\n entryId: string;\n}\nexport const getLatestEntryRevision = async (\n params: GetLatestEntryRevisionParams\n): Promise<CmsEntry> => {\n const { cms, model, entryId } = params;\n const items = await cms.getLatestEntriesByIds(model, [entryId]);\n\n const item = items.shift();\n if (!item) {\n throw new WebinyError(\"There is no entry with given ID.\", \"ENTRY_NOT_FOUND\", {\n entryId\n });\n }\n return item;\n};\n\ninterface UpdateEntryMetaParams {\n meta: Record<string, any>;\n entryId: string;\n cms: HeadlessCms;\n model: CmsModel;\n}\nexport const updateEntryMeta = async (params: UpdateEntryMetaParams): Promise<void> => {\n const { entryId, cms, model, meta } = params;\n\n const entry = await getLatestEntryRevision({\n cms,\n model,\n entryId\n });\n\n await cms.updateEntry(model, entry.id, {}, meta);\n};\n\nconst isWorkflowApplicable = (entry: CmsEntry, workflow: ApwWorkflow): boolean => {\n const application = workflow.app;\n if (application !== ApwWorkflowApplications.CMS) {\n return false;\n }\n\n const scopeType = workflow.scope.type;\n\n if (scopeType === WorkflowScopeTypes.DEFAULT) {\n return true;\n } else if (scopeType === WorkflowScopeTypes.CUSTOM) {\n const models = workflow.scope.data?.models;\n\n if (Array.isArray(models) && models.includes(entry.modelId)) {\n return true;\n }\n\n const entries = workflow.scope.data?.entries || [];\n if (Array.isArray(entries) && entries.some(value => value.id === entry.entryId)) {\n return true;\n }\n return false;\n }\n throw new WebinyError(`Unknown scope type \"${scopeType}\".`, \"UNKNOWN_SCOPE_TYPE\", {\n workflow\n });\n};\n\ninterface AssignWorkflowToEntryParams {\n apw: AdvancedPublishingWorkflow;\n entry: CmsEntry;\n}\nexport const assignWorkflowToEntry = async (params: AssignWorkflowToEntryParams): Promise<void> => {\n const { apw, entry } = params;\n /**\n * Lookup and assign \"workflowId\".\n */\n try {\n /*\n * List all workflows for app cms\n */\n const [entries] = await apw.workflow.list({\n where: {\n app: ApwWorkflowApplications.CMS\n }\n });\n\n console.log(`Found ${entries.length} workflows.`);\n\n /*\n * Re-order them based on workflow scope and pre-defined rule i.e.\n * \"specific\" entry -> entry for a \"category\" -> \"default\".\n * There can be more than one workflow with same \"scope\" and \"app\".\n * Therefore, we are also sorting the workflows by `createdOn` to get the latest workflow.\n */\n const sortedWorkflows = entries\n .sort(workflowByPrecedenceDesc)\n .sort(workflowByCreatedOnDesc);\n\n /**\n * Assign the first applicable workflow to the page and exit.\n */\n for (const workflow of sortedWorkflows) {\n if (isWorkflowApplicable(entry, workflow) === false) {\n console.log(`Not applying workflow ${workflow.id} to entry ${entry.id}.`);\n continue;\n }\n entry.meta = {\n ...(entry.meta || {}),\n apw: {\n workflowId: workflow.id,\n contentReviewId: null\n }\n };\n return;\n }\n } catch (ex) {\n throw new WebinyError(\n `Failed to assign workflow to CMS entry \"${entry.id}\".`,\n ex.code,\n ex.data\n );\n }\n};\n\nexport const hasEntries = (workflow: ApwWorkflow): Boolean => {\n const { app, scope } = workflow;\n return (\n app === ApwWorkflowApplications.CMS &&\n scope.type === WorkflowScopeTypes.CUSTOM &&\n scope.data &&\n Array.isArray(scope.data.entries)\n );\n};\n\nexport const isAwpModel = (model: CmsModel): boolean => {\n return [\n CHANGE_REQUEST_MODEL_ID,\n COMMENT_MODEL_ID,\n CONTENT_REVIEW_MODEL_ID,\n REVIEWER_MODEL_ID,\n WORKFLOW_MODEL_ID\n ].includes(model.modelId);\n};\n"],"mappings":"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"}
@@ -1,22 +1,36 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+
4
5
  Object.defineProperty(exports, "__esModule", {
5
6
  value: true
6
7
  });
7
8
  exports.createApwPageBuilderContext = exports.createApwHeadlessCmsContext = void 0;
9
+
8
10
  var _hooks = require("./hooks");
11
+
9
12
  var _error = _interopRequireDefault(require("@webiny/error"));
13
+
10
14
  var _api = require("@webiny/api");
15
+
11
16
  var _crud = require("../crud");
17
+
12
18
  var _pageBuilder = require("./pageBuilder");
19
+
13
20
  var _storageOperations = require("../storageOperations");
21
+
14
22
  var _scheduler = require("../scheduler");
23
+
15
24
  var _security = require("../scheduler/handlers/executeAction/security");
25
+
16
26
  var _utils = require("./utils");
27
+
17
28
  var _extendPbPageSettingsSchema = require("./pageBuilder/extendPbPageSettingsSchema");
29
+
18
30
  var _apwContentPagePlugins = require("./pageBuilder/apwContentPagePlugins");
31
+
19
32
  var _cms = require("./cms");
33
+
20
34
  const setupApwContext = params => new _api.ContextPlugin(async context => {
21
35
  const {
22
36
  tenancy,
@@ -24,26 +38,34 @@ const setupApwContext = params => new _api.ContextPlugin(async context => {
24
38
  i18n,
25
39
  handlerClient
26
40
  } = context;
41
+
27
42
  if ((0, _utils.isInstallationPending)({
28
43
  tenancy,
29
44
  i18n
30
45
  })) {
31
46
  return;
32
47
  }
48
+
33
49
  const getLocale = () => {
34
50
  const locale = i18n.getContentLocale();
51
+
35
52
  if (!locale) {
36
53
  throw new _error.default("Missing content locale in api-apw/plugins/context.ts", "LOCALE_ERROR");
37
54
  }
55
+
38
56
  return locale;
39
57
  };
58
+
40
59
  const getTenant = () => {
41
60
  return tenancy.getCurrentTenant();
42
61
  };
62
+
43
63
  const getPermission = async name => {
44
64
  return security.getPermission(name);
45
65
  };
66
+
46
67
  const getIdentity = () => security.getIdentity();
68
+
47
69
  const scheduler = (0, _scheduler.createScheduler)({
48
70
  getLocale,
49
71
  getIdentity,
@@ -61,6 +83,7 @@ const setupApwContext = params => new _api.ContextPlugin(async context => {
61
83
  * TODO: We need to figure out a way to pass "cms" from outside (e.g. apps/api/graphql)
62
84
  */
63
85
  cms: context.cms,
86
+
64
87
  /**
65
88
  * TODO: This is required for "entryFieldFromStorageTransform" which access plugins from context.
66
89
  */
@@ -72,16 +95,19 @@ const setupApwContext = params => new _api.ContextPlugin(async context => {
72
95
  plugins: context.plugins
73
96
  });
74
97
  });
98
+
75
99
  const setupApwPageBuilder = () => {
76
100
  return new _api.ContextPlugin(async context => {
77
101
  (0, _pageBuilder.apwPageBuilderHooks)(context);
78
102
  });
79
103
  };
104
+
80
105
  const setupApwHeadlessCms = () => {
81
106
  return new _api.ContextPlugin(async context => {
82
107
  (0, _cms.apwCmsHooks)(context);
83
108
  });
84
109
  };
110
+
85
111
  const createApwPageBuilderContext = params => {
86
112
  return new _api.ContextPlugin(async context => {
87
113
  if (!context.wcp.canUseFeature("advancedPublishingWorkflow")) {
@@ -89,6 +115,7 @@ const createApwPageBuilderContext = params => {
89
115
  } else if ((0, _utils.isInstallationPending)(context)) {
90
116
  return;
91
117
  }
118
+
92
119
  await setupApwContext(params).apply(context);
93
120
  await setupApwPageBuilder().apply(context);
94
121
  await setupApwHeadlessCms().apply(context);
@@ -98,7 +125,9 @@ const createApwPageBuilderContext = params => {
98
125
  context.plugins.register((0, _extendPbPageSettingsSchema.extendPbPageSettingsSchema)());
99
126
  });
100
127
  };
128
+
101
129
  exports.createApwPageBuilderContext = createApwPageBuilderContext;
130
+
102
131
  const createApwHeadlessCmsContext = params => {
103
132
  return new _api.ContextPlugin(async context => {
104
133
  if (!context.wcp.canUseFeature("advancedPublishingWorkflow")) {
@@ -106,10 +135,12 @@ const createApwHeadlessCmsContext = params => {
106
135
  } else if ((0, _utils.isInstallationPending)(context)) {
107
136
  return;
108
137
  }
138
+
109
139
  await setupApwContext(params).apply(context);
110
140
  await setupApwHeadlessCms().apply(context);
111
141
  await (0, _hooks.attachApwHooks)().apply(context);
112
142
  await (0, _security.createCustomAuth)(params).apply(context);
113
143
  });
114
144
  };
145
+
115
146
  exports.createApwHeadlessCmsContext = createApwHeadlessCmsContext;