@webiny/api-page-builder-import-export 0.0.0-unstable.1e66d121db → 0.0.0-unstable.3386f66516

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 (117) hide show
  1. package/client.d.ts +2 -2
  2. package/client.js.map +1 -1
  3. package/export/combine/blocksHandler.d.ts +6 -0
  4. package/export/combine/blocksHandler.js +106 -0
  5. package/export/combine/blocksHandler.js.map +1 -0
  6. package/{exportPages → export}/combine/index.d.ts +3 -2
  7. package/export/combine/index.js +43 -0
  8. package/export/combine/index.js.map +1 -0
  9. package/export/combine/pagesHandler.d.ts +6 -0
  10. package/export/combine/pagesHandler.js +106 -0
  11. package/export/combine/pagesHandler.js.map +1 -0
  12. package/export/combine/templatesHandler.d.ts +6 -0
  13. package/export/combine/templatesHandler.js +106 -0
  14. package/export/combine/templatesHandler.js.map +1 -0
  15. package/export/process/blocksHandler.d.ts +6 -0
  16. package/export/process/blocksHandler.js +176 -0
  17. package/export/process/blocksHandler.js.map +1 -0
  18. package/{exportPages → export}/process/index.d.ts +4 -6
  19. package/export/process/index.js +40 -0
  20. package/export/process/index.js.map +1 -0
  21. package/export/process/pagesHandler.d.ts +6 -0
  22. package/export/process/pagesHandler.js +204 -0
  23. package/export/process/pagesHandler.js.map +1 -0
  24. package/export/process/templatesHandler.d.ts +6 -0
  25. package/export/process/templatesHandler.js +176 -0
  26. package/export/process/templatesHandler.js.map +1 -0
  27. package/{exportPages → export}/s3Stream.d.ts +0 -0
  28. package/{exportPages → export}/s3Stream.js +0 -0
  29. package/{exportPages → export}/s3Stream.js.map +0 -0
  30. package/export/utils.d.ts +22 -0
  31. package/export/utils.js +173 -0
  32. package/export/utils.js.map +1 -0
  33. package/{exportPages → export}/zipper.d.ts +6 -5
  34. package/{exportPages → export}/zipper.js +8 -7
  35. package/export/zipper.js.map +1 -0
  36. package/graphql/crud/blocks.crud.d.ts +4 -0
  37. package/graphql/crud/blocks.crud.js +155 -0
  38. package/graphql/crud/blocks.crud.js.map +1 -0
  39. package/graphql/crud/importExportTasks.crud.d.ts +5 -0
  40. package/graphql/crud/{pageImportExportTasks.crud.js → importExportTasks.crud.js} +48 -48
  41. package/graphql/crud/importExportTasks.crud.js.map +1 -0
  42. package/graphql/crud/pages.crud.d.ts +2 -2
  43. package/graphql/crud/pages.crud.js +18 -14
  44. package/graphql/crud/pages.crud.js.map +1 -1
  45. package/graphql/crud/templates.crud.d.ts +4 -0
  46. package/graphql/crud/templates.crud.js +140 -0
  47. package/graphql/crud/templates.crud.js.map +1 -0
  48. package/graphql/crud.d.ts +2 -2
  49. package/graphql/crud.js +6 -2
  50. package/graphql/crud.js.map +1 -1
  51. package/graphql/graphql/blocks.gql.d.ts +4 -0
  52. package/graphql/graphql/blocks.gql.js +57 -0
  53. package/graphql/graphql/blocks.gql.js.map +1 -0
  54. package/graphql/graphql/importExportTasks.gql.d.ts +4 -0
  55. package/graphql/graphql/{pageImportExportTasks.gql.js → importExportTasks.gql.js} +17 -17
  56. package/graphql/graphql/importExportTasks.gql.js.map +1 -0
  57. package/graphql/graphql/pages.gql.d.ts +2 -2
  58. package/graphql/graphql/pages.gql.js +3 -9
  59. package/graphql/graphql/pages.gql.js.map +1 -1
  60. package/graphql/graphql/templates.gql.d.ts +4 -0
  61. package/graphql/graphql/templates.gql.js +57 -0
  62. package/graphql/graphql/templates.gql.js.map +1 -0
  63. package/graphql/graphql.js +6 -2
  64. package/graphql/graphql.js.map +1 -1
  65. package/graphql/index.d.ts +2 -2
  66. package/graphql/index.js.map +1 -1
  67. package/graphql/types.d.ts +60 -23
  68. package/graphql/types.js.map +1 -1
  69. package/import/create/blocksHandler.d.ts +3 -0
  70. package/import/create/blocksHandler.js +110 -0
  71. package/import/create/blocksHandler.js.map +1 -0
  72. package/{importPages → import}/create/index.d.ts +7 -5
  73. package/import/create/index.js +43 -0
  74. package/import/create/index.js.map +1 -0
  75. package/import/create/pagesHandler.d.ts +3 -0
  76. package/import/create/pagesHandler.js +112 -0
  77. package/import/create/pagesHandler.js.map +1 -0
  78. package/import/create/templatesHandler.d.ts +3 -0
  79. package/import/create/templatesHandler.js +108 -0
  80. package/import/create/templatesHandler.js.map +1 -0
  81. package/import/process/blocksHandler.d.ts +3 -0
  82. package/import/process/blocksHandler.js +175 -0
  83. package/import/process/blocksHandler.js.map +1 -0
  84. package/{importPages → import}/process/index.d.ts +5 -3
  85. package/import/process/index.js +40 -0
  86. package/import/process/index.js.map +1 -0
  87. package/import/process/pagesHandler.d.ts +3 -0
  88. package/import/process/pagesHandler.js +181 -0
  89. package/import/process/pagesHandler.js.map +1 -0
  90. package/import/process/templatesHandler.d.ts +3 -0
  91. package/import/process/templatesHandler.js +172 -0
  92. package/import/process/templatesHandler.js.map +1 -0
  93. package/import/utils.d.ts +56 -0
  94. package/{importPages → import}/utils.js +162 -36
  95. package/import/utils.js.map +1 -0
  96. package/package.json +22 -22
  97. package/types.d.ts +62 -65
  98. package/types.js +17 -17
  99. package/types.js.map +1 -1
  100. package/exportPages/combine/index.js +0 -114
  101. package/exportPages/combine/index.js.map +0 -1
  102. package/exportPages/process/index.js +0 -208
  103. package/exportPages/process/index.js.map +0 -1
  104. package/exportPages/utils.d.ts +0 -13
  105. package/exportPages/utils.js +0 -113
  106. package/exportPages/utils.js.map +0 -1
  107. package/exportPages/zipper.js.map +0 -1
  108. package/graphql/crud/pageImportExportTasks.crud.d.ts +0 -5
  109. package/graphql/crud/pageImportExportTasks.crud.js.map +0 -1
  110. package/graphql/graphql/pageImportExportTasks.gql.d.ts +0 -4
  111. package/graphql/graphql/pageImportExportTasks.gql.js.map +0 -1
  112. package/importPages/create/index.js +0 -118
  113. package/importPages/create/index.js.map +0 -1
  114. package/importPages/process/index.js +0 -185
  115. package/importPages/process/index.js.map +0 -1
  116. package/importPages/utils.d.ts +0 -50
  117. package/importPages/utils.js.map +0 -1
package/client.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { PbPageImportExportContext } from "./graphql/types";
1
+ import { PbImportExportContext } from "./graphql/types";
2
2
  export interface InvokeHandlerClientParams<TParams> {
3
- context: PbPageImportExportContext;
3
+ context: PbImportExportContext;
4
4
  name: string;
5
5
  payload: TParams;
6
6
  description: string;
package/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["invokeHandlerClient","context","name","payload","description","request","tenantId","tenancy","getCurrentTenant","id","headers","invocationArgs","httpMethod","method","body","cookies","handlerClient","invoke","await"],"sources":["client.ts"],"sourcesContent":["import { PbPageImportExportContext } from \"~/graphql/types\";\n\nexport interface InvokeHandlerClientParams<TParams> {\n context: PbPageImportExportContext;\n name: string;\n payload: TParams;\n description: string;\n}\n\nexport async function invokeHandlerClient<TParams>({\n context,\n name,\n payload,\n description\n}: InvokeHandlerClientParams<TParams>) {\n /*\n * Prepare \"invocationArgs\", we're hacking our wat here.\n * They are necessary to setup the \"context.pageBuilder\" object among other things in IMPORT_PAGE_FUNCTION\n */\n const { request } = context;\n\n const tenantId = context.tenancy.getCurrentTenant().id;\n\n const headers = {\n ...request.headers,\n [\"x-tenant\"]: request.headers[\"x-tenant\"] || tenantId\n };\n delete headers[\"content-length\"];\n const invocationArgs = {\n httpMethod: request.method,\n body: request.body,\n headers,\n /**\n * Required until type augmentation works correctly.\n */\n cookies: (request as any).cookies\n };\n // Invoke handler\n await context.handlerClient.invoke<TParams & any>({\n name: name,\n payload: {\n ...payload,\n ...invocationArgs\n },\n await: false,\n description\n });\n}\n"],"mappings":";;;;;;;;;;;AASO,eAAeA,mBAAf,CAA4C;EAC/CC,OAD+C;EAE/CC,IAF+C;EAG/CC,OAH+C;EAI/CC;AAJ+C,CAA5C,EAKgC;EACnC;AACJ;AACA;AACA;EACI,MAAM;IAAEC;EAAF,IAAcJ,OAApB;EAEA,MAAMK,QAAQ,GAAGL,OAAO,CAACM,OAAR,CAAgBC,gBAAhB,GAAmCC,EAApD;EAEA,MAAMC,OAAO,+DACNL,OAAO,CAACK,OADF;IAET,CAAC,UAAD,GAAcL,OAAO,CAACK,OAAR,CAAgB,UAAhB,KAA+BJ;EAFpC,EAAb;EAIA,OAAOI,OAAO,CAAC,gBAAD,CAAd;EACA,MAAMC,cAAc,GAAG;IACnBC,UAAU,EAAEP,OAAO,CAACQ,MADD;IAEnBC,IAAI,EAAET,OAAO,CAACS,IAFK;IAGnBJ,OAHmB;;IAInB;AACR;AACA;IACQK,OAAO,EAAGV,OAAD,CAAiBU;EAPP,CAAvB,CAdmC,CAuBnC;;EACA,MAAMd,OAAO,CAACe,aAAR,CAAsBC,MAAtB,CAA4C;IAC9Cf,IAAI,EAAEA,IADwC;IAE9CC,OAAO,8DACAA,OADA,GAEAQ,cAFA,CAFuC;IAM9CO,KAAK,EAAE,KANuC;IAO9Cd;EAP8C,CAA5C,CAAN;AASH"}
1
+ {"version":3,"names":["invokeHandlerClient","context","name","payload","description","request","tenantId","tenancy","getCurrentTenant","id","headers","invocationArgs","httpMethod","method","body","cookies","handlerClient","invoke","await"],"sources":["client.ts"],"sourcesContent":["import { PbImportExportContext } from \"~/graphql/types\";\n\nexport interface InvokeHandlerClientParams<TParams> {\n context: PbImportExportContext;\n name: string;\n payload: TParams;\n description: string;\n}\n\nexport async function invokeHandlerClient<TParams>({\n context,\n name,\n payload,\n description\n}: InvokeHandlerClientParams<TParams>) {\n /*\n * Prepare \"invocationArgs\", we're hacking our wat here.\n * They are necessary to setup the \"context.pageBuilder\" object among other things in IMPORT_PAGE_FUNCTION\n */\n const { request } = context;\n\n const tenantId = context.tenancy.getCurrentTenant().id;\n\n const headers = {\n ...request.headers,\n [\"x-tenant\"]: request.headers[\"x-tenant\"] || tenantId\n };\n delete headers[\"content-length\"];\n const invocationArgs = {\n httpMethod: request.method,\n body: request.body,\n headers,\n /**\n * Required until type augmentation works correctly.\n */\n cookies: (request as any).cookies\n };\n // Invoke handler\n await context.handlerClient.invoke<TParams & any>({\n name: name,\n payload: {\n ...payload,\n ...invocationArgs\n },\n await: false,\n description\n });\n}\n"],"mappings":";;;;;;;;;;;AASO,eAAeA,mBAAf,CAA4C;EAC/CC,OAD+C;EAE/CC,IAF+C;EAG/CC,OAH+C;EAI/CC;AAJ+C,CAA5C,EAKgC;EACnC;AACJ;AACA;AACA;EACI,MAAM;IAAEC;EAAF,IAAcJ,OAApB;EAEA,MAAMK,QAAQ,GAAGL,OAAO,CAACM,OAAR,CAAgBC,gBAAhB,GAAmCC,EAApD;EAEA,MAAMC,OAAO,+DACNL,OAAO,CAACK,OADF;IAET,CAAC,UAAD,GAAcL,OAAO,CAACK,OAAR,CAAgB,UAAhB,KAA+BJ;EAFpC,EAAb;EAIA,OAAOI,OAAO,CAAC,gBAAD,CAAd;EACA,MAAMC,cAAc,GAAG;IACnBC,UAAU,EAAEP,OAAO,CAACQ,MADD;IAEnBC,IAAI,EAAET,OAAO,CAACS,IAFK;IAGnBJ,OAHmB;;IAInB;AACR;AACA;IACQK,OAAO,EAAGV,OAAD,CAAiBU;EAPP,CAAvB,CAdmC,CAuBnC;;EACA,MAAMd,OAAO,CAACe,aAAR,CAAsBC,MAAtB,CAA4C;IAC9Cf,IAAI,EAAEA,IADwC;IAE9CC,OAAO,8DACAA,OADA,GAEAQ,cAFA,CAFuC;IAM9CO,KAAK,EAAE,KANuC;IAO9Cd;EAP8C,CAA5C,CAAN;AASH"}
@@ -0,0 +1,6 @@
1
+ import { PbImportExportContext } from "../../types";
2
+ import { Payload, Response } from ".";
3
+ /**
4
+ * Handles the export blocks combine workflow.
5
+ */
6
+ export declare const blocksHandler: (payload: Payload, context: PbImportExportContext) => Promise<Response>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.blocksHandler = void 0;
7
+
8
+ var _types = require("../../types");
9
+
10
+ var _s3Stream = require("../s3Stream");
11
+
12
+ var _zipper = require("../zipper");
13
+
14
+ var _mockSecurity = require("../../mockSecurity");
15
+
16
+ /**
17
+ * Handles the export blocks combine workflow.
18
+ */
19
+ const blocksHandler = async (payload, context) => {
20
+ const log = console.log;
21
+ log("RUNNING Export Blocks Combine Handler");
22
+ const {
23
+ pageBuilder
24
+ } = context;
25
+ const {
26
+ taskId,
27
+ identity
28
+ } = payload;
29
+ (0, _mockSecurity.mockSecurity)(identity, context);
30
+
31
+ try {
32
+ const task = await pageBuilder.importExportTask.getTask(taskId);
33
+
34
+ if (!task) {
35
+ return {
36
+ data: null,
37
+ error: {
38
+ message: `There is no task with ID "${taskId}".`
39
+ }
40
+ };
41
+ }
42
+
43
+ const {
44
+ exportBlocksDataKey
45
+ } = task.input; // Get all files (zip) from given key
46
+
47
+ const listObjectResponse = await _s3Stream.s3Stream.listObject(exportBlocksDataKey);
48
+
49
+ if (!listObjectResponse.Contents) {
50
+ return {
51
+ data: null,
52
+ error: {
53
+ message: "There is no Contents defined on S3 Stream while combining blocks."
54
+ }
55
+ };
56
+ }
57
+
58
+ const zipFileKeys = listObjectResponse.Contents.filter(file => file.Key !== exportBlocksDataKey).map(file => file.Key).filter(Boolean); // Prepare zip of all zips
59
+
60
+ const zipOfZip = new _zipper.ZipOfZip(zipFileKeys, "WEBINY_BLOCK_EXPORT.zip"); // Upload
61
+
62
+ const blockExportUpload = await zipOfZip.process();
63
+ log(`Done uploading... File is located at ${blockExportUpload.Location} `); // Update task status and save export blocks data key
64
+
65
+ await pageBuilder.importExportTask.updateTask(taskId, {
66
+ status: _types.ImportExportTaskStatus.COMPLETED,
67
+ data: {
68
+ message: `Finish uploading block export.`,
69
+ key: blockExportUpload.Key,
70
+ url: _s3Stream.s3Stream.getPresignedUrl(blockExportUpload.Key)
71
+ }
72
+ }); // Remove individual zip files from storage
73
+
74
+ const deleteFilePromises = zipFileKeys.map(key => _s3Stream.s3Stream.deleteObject(key));
75
+ await Promise.all(deleteFilePromises);
76
+ log(`Successfully deleted ${deleteFilePromises.length} zip files.`);
77
+ } catch (e) {
78
+ log("[EXPORT_BLOCKS_COMBINE] Error => ", e.message);
79
+ /**
80
+ * In case of error, we'll update the task status to "failed",
81
+ * so that, client can show notify the user appropriately.
82
+ */
83
+
84
+ await pageBuilder.importExportTask.updateTask(taskId, {
85
+ status: _types.ImportExportTaskStatus.FAILED,
86
+ error: {
87
+ name: e.name,
88
+ message: e.message,
89
+ code: "EXPORT_FAILED"
90
+ }
91
+ });
92
+ return {
93
+ data: null,
94
+ error: {
95
+ message: e.message
96
+ }
97
+ };
98
+ }
99
+
100
+ return {
101
+ data: "",
102
+ error: null
103
+ };
104
+ };
105
+
106
+ exports.blocksHandler = blocksHandler;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["blocksHandler","payload","context","log","console","pageBuilder","taskId","identity","mockSecurity","task","importExportTask","getTask","data","error","message","exportBlocksDataKey","input","listObjectResponse","s3Stream","listObject","Contents","zipFileKeys","filter","file","Key","map","Boolean","zipOfZip","ZipOfZip","blockExportUpload","process","Location","updateTask","status","ImportExportTaskStatus","COMPLETED","key","url","getPresignedUrl","deleteFilePromises","deleteObject","Promise","all","length","e","FAILED","name","code"],"sources":["blocksHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { s3Stream } from \"../s3Stream\";\nimport { ZipOfZip } from \"../zipper\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { Payload, Response } from \"~/export/combine\";\n\n/**\n * Handles the export blocks combine workflow.\n */\nexport const blocksHandler = async (\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n\n log(\"RUNNING Export Blocks Combine Handler\");\n const { pageBuilder } = context;\n const { taskId, identity } = payload;\n\n mockSecurity(identity, context);\n\n try {\n const task = await pageBuilder.importExportTask.getTask(taskId);\n if (!task) {\n return {\n data: null,\n error: {\n message: `There is no task with ID \"${taskId}\".`\n }\n };\n }\n\n const { exportBlocksDataKey } = task.input;\n\n // Get all files (zip) from given key\n const listObjectResponse = await s3Stream.listObject(exportBlocksDataKey);\n if (!listObjectResponse.Contents) {\n return {\n data: null,\n error: {\n message: \"There is no Contents defined on S3 Stream while combining blocks.\"\n }\n };\n }\n\n const zipFileKeys = listObjectResponse.Contents.filter(\n file => file.Key !== exportBlocksDataKey\n )\n .map(file => file.Key)\n .filter(Boolean) as string[];\n\n // Prepare zip of all zips\n const zipOfZip = new ZipOfZip(zipFileKeys, \"WEBINY_BLOCK_EXPORT.zip\");\n\n // Upload\n const blockExportUpload = await zipOfZip.process();\n log(`Done uploading... File is located at ${blockExportUpload.Location} `);\n\n // Update task status and save export blocks data key\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish uploading block export.`,\n key: blockExportUpload.Key,\n url: s3Stream.getPresignedUrl(blockExportUpload.Key)\n }\n });\n\n // Remove individual zip files from storage\n const deleteFilePromises = zipFileKeys.map(key => s3Stream.deleteObject(key));\n await Promise.all(deleteFilePromises);\n log(`Successfully deleted ${deleteFilePromises.length} zip files.`);\n } catch (e) {\n log(\"[EXPORT_BLOCKS_COMBINE] Error => \", e.message);\n\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: \"EXPORT_FAILED\"\n }\n });\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- import { PbPageImportExportContext } from "../../types";
1
+ import { PbImportExportContext } from "../../types";
2
2
  import { SecurityIdentity } from "@webiny/api-security/types";
3
3
  export interface Payload {
4
4
  taskId: string;
5
+ type: string;
5
6
  identity: SecurityIdentity;
6
7
  }
7
8
  export interface Response {
@@ -11,5 +12,5 @@ export interface Response {
11
12
  /**
12
13
  * Handles the export pages combine workflow.
13
14
  */
14
- declare const _default: () => import("@webiny/handler-aws").RawEventHandler<Payload, PbPageImportExportContext, Response>;
15
+ declare const _default: () => import("@webiny/handler-aws").RawEventHandler<Payload, PbImportExportContext, Response>;
15
16
  export default _default;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _handlerAws = require("@webiny/handler-aws");
9
+
10
+ var _blocksHandler = require("./blocksHandler");
11
+
12
+ var _pagesHandler = require("./pagesHandler");
13
+
14
+ var _templatesHandler = require("./templatesHandler");
15
+
16
+ /**
17
+ * Handles the export pages combine workflow.
18
+ */
19
+ var _default = () => {
20
+ return (0, _handlerAws.createRawEventHandler)(async ({
21
+ payload,
22
+ context
23
+ }) => {
24
+ switch (payload.type) {
25
+ case "block":
26
+ {
27
+ return await (0, _blocksHandler.blocksHandler)(payload, context);
28
+ }
29
+
30
+ case "template":
31
+ {
32
+ return await (0, _templatesHandler.templatesHandler)(payload, context);
33
+ }
34
+
35
+ default:
36
+ {
37
+ return await (0, _pagesHandler.pagesHandler)(payload, context);
38
+ }
39
+ }
40
+ });
41
+ };
42
+
43
+ exports.default = _default;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createRawEventHandler","payload","context","type","blocksHandler","templatesHandler","pagesHandler"],"sources":["index.ts"],"sourcesContent":["import { PbImportExportContext } from \"~/types\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { createRawEventHandler } from \"@webiny/handler-aws\";\nimport { blocksHandler } from \"~/export/combine/blocksHandler\";\nimport { pagesHandler } from \"~/export/combine/pagesHandler\";\nimport { templatesHandler } from \"~/export/combine/templatesHandler\";\n\nexport interface Payload {\n taskId: string;\n type: string;\n identity: SecurityIdentity;\n}\n\nexport interface Response {\n data: string | null;\n error: Partial<Error> | null;\n}\n\n/**\n * Handles the export pages combine workflow.\n */\nexport default () => {\n return createRawEventHandler<Payload, PbImportExportContext, Response>(\n async ({ payload, context }) => {\n switch (payload.type) {\n case \"block\": {\n return await blocksHandler(payload, context);\n }\n case \"template\": {\n return await templatesHandler(payload, context);\n }\n default: {\n return await pagesHandler(payload, context);\n }\n }\n }\n );\n};\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;AACA;;AAaA;AACA;AACA;eACe,MAAM;EACjB,OAAO,IAAAA,iCAAA,EACH,OAAO;IAAEC,OAAF;IAAWC;EAAX,CAAP,KAAgC;IAC5B,QAAQD,OAAO,CAACE,IAAhB;MACI,KAAK,OAAL;QAAc;UACV,OAAO,MAAM,IAAAC,4BAAA,EAAcH,OAAd,EAAuBC,OAAvB,CAAb;QACH;;MACD,KAAK,UAAL;QAAiB;UACb,OAAO,MAAM,IAAAG,kCAAA,EAAiBJ,OAAjB,EAA0BC,OAA1B,CAAb;QACH;;MACD;QAAS;UACL,OAAO,MAAM,IAAAI,0BAAA,EAAaL,OAAb,EAAsBC,OAAtB,CAAb;QACH;IATL;EAWH,CAbE,CAAP;AAeH,C"}
@@ -0,0 +1,6 @@
1
+ import { PbImportExportContext } from "../../types";
2
+ import { Payload, Response } from ".";
3
+ /**
4
+ * Handles the export pages combine workflow.
5
+ */
6
+ export declare const pagesHandler: (payload: Payload, context: PbImportExportContext) => Promise<Response>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pagesHandler = void 0;
7
+
8
+ var _types = require("../../types");
9
+
10
+ var _s3Stream = require("../s3Stream");
11
+
12
+ var _zipper = require("../zipper");
13
+
14
+ var _mockSecurity = require("../../mockSecurity");
15
+
16
+ /**
17
+ * Handles the export pages combine workflow.
18
+ */
19
+ const pagesHandler = async (payload, context) => {
20
+ const log = console.log;
21
+ log("RUNNING Export Pages Combine Handler");
22
+ const {
23
+ pageBuilder
24
+ } = context;
25
+ const {
26
+ taskId,
27
+ identity
28
+ } = payload;
29
+ (0, _mockSecurity.mockSecurity)(identity, context);
30
+
31
+ try {
32
+ const task = await pageBuilder.importExportTask.getTask(taskId);
33
+
34
+ if (!task) {
35
+ return {
36
+ data: null,
37
+ error: {
38
+ message: `There is no task with ID "${taskId}".`
39
+ }
40
+ };
41
+ }
42
+
43
+ const {
44
+ exportPagesDataKey
45
+ } = task.input; // Get all files (zip) from given key
46
+
47
+ const listObjectResponse = await _s3Stream.s3Stream.listObject(exportPagesDataKey);
48
+
49
+ if (!listObjectResponse.Contents) {
50
+ return {
51
+ data: null,
52
+ error: {
53
+ message: "There is no Contents defined on S3 Stream while combining pages."
54
+ }
55
+ };
56
+ }
57
+
58
+ const zipFileKeys = listObjectResponse.Contents.filter(file => file.Key !== exportPagesDataKey).map(file => file.Key).filter(Boolean); // Prepare zip of all zips
59
+
60
+ const zipOfZip = new _zipper.ZipOfZip(zipFileKeys, "WEBINY_PAGE_EXPORT.zip"); // Upload
61
+
62
+ const pageExportUpload = await zipOfZip.process();
63
+ log(`Done uploading... File is located at ${pageExportUpload.Location} `); // Update task status and save export page data key
64
+
65
+ await pageBuilder.importExportTask.updateTask(taskId, {
66
+ status: _types.ImportExportTaskStatus.COMPLETED,
67
+ data: {
68
+ message: `Finish uploading page export.`,
69
+ key: pageExportUpload.Key,
70
+ url: _s3Stream.s3Stream.getPresignedUrl(pageExportUpload.Key)
71
+ }
72
+ }); // Remove individual zip files from storage
73
+
74
+ const deleteFilePromises = zipFileKeys.map(key => _s3Stream.s3Stream.deleteObject(key));
75
+ await Promise.all(deleteFilePromises);
76
+ log(`Successfully deleted ${deleteFilePromises.length} zip files.`);
77
+ } catch (e) {
78
+ log("[EXPORT_PAGES_COMBINE] Error => ", e.message);
79
+ /**
80
+ * In case of error, we'll update the task status to "failed",
81
+ * so that, client can show notify the user appropriately.
82
+ */
83
+
84
+ await pageBuilder.importExportTask.updateTask(taskId, {
85
+ status: _types.ImportExportTaskStatus.FAILED,
86
+ error: {
87
+ name: e.name,
88
+ message: e.message,
89
+ code: "EXPORT_FAILED"
90
+ }
91
+ });
92
+ return {
93
+ data: null,
94
+ error: {
95
+ message: e.message
96
+ }
97
+ };
98
+ }
99
+
100
+ return {
101
+ data: "",
102
+ error: null
103
+ };
104
+ };
105
+
106
+ exports.pagesHandler = pagesHandler;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["pagesHandler","payload","context","log","console","pageBuilder","taskId","identity","mockSecurity","task","importExportTask","getTask","data","error","message","exportPagesDataKey","input","listObjectResponse","s3Stream","listObject","Contents","zipFileKeys","filter","file","Key","map","Boolean","zipOfZip","ZipOfZip","pageExportUpload","process","Location","updateTask","status","ImportExportTaskStatus","COMPLETED","key","url","getPresignedUrl","deleteFilePromises","deleteObject","Promise","all","length","e","FAILED","name","code"],"sources":["pagesHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { s3Stream } from \"../s3Stream\";\nimport { ZipOfZip } from \"../zipper\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { Payload, Response } from \"~/export/combine\";\n\n/**\n * Handles the export pages combine workflow.\n */\nexport const pagesHandler = async (\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n\n log(\"RUNNING Export Pages Combine Handler\");\n const { pageBuilder } = context;\n const { taskId, identity } = payload;\n\n mockSecurity(identity, context);\n\n try {\n const task = await pageBuilder.importExportTask.getTask(taskId);\n if (!task) {\n return {\n data: null,\n error: {\n message: `There is no task with ID \"${taskId}\".`\n }\n };\n }\n\n const { exportPagesDataKey } = task.input;\n\n // Get all files (zip) from given key\n const listObjectResponse = await s3Stream.listObject(exportPagesDataKey);\n if (!listObjectResponse.Contents) {\n return {\n data: null,\n error: {\n message: \"There is no Contents defined on S3 Stream while combining pages.\"\n }\n };\n }\n\n const zipFileKeys = listObjectResponse.Contents.filter(\n file => file.Key !== exportPagesDataKey\n )\n .map(file => file.Key)\n .filter(Boolean) as string[];\n\n // Prepare zip of all zips\n const zipOfZip = new ZipOfZip(zipFileKeys, \"WEBINY_PAGE_EXPORT.zip\");\n\n // Upload\n const pageExportUpload = await zipOfZip.process();\n log(`Done uploading... File is located at ${pageExportUpload.Location} `);\n\n // Update task status and save export page data key\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish uploading page export.`,\n key: pageExportUpload.Key,\n url: s3Stream.getPresignedUrl(pageExportUpload.Key)\n }\n });\n\n // Remove individual zip files from storage\n const deleteFilePromises = zipFileKeys.map(key => s3Stream.deleteObject(key));\n await Promise.all(deleteFilePromises);\n log(`Successfully deleted ${deleteFilePromises.length} zip files.`);\n } catch (e) {\n log(\"[EXPORT_PAGES_COMBINE] Error => \", e.message);\n\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: \"EXPORT_FAILED\"\n }\n });\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PbImportExportContext } from "../../types";
2
+ import { Payload, Response } from ".";
3
+ /**
4
+ * Handles the export templates combine workflow.
5
+ */
6
+ export declare const templatesHandler: (payload: Payload, context: PbImportExportContext) => Promise<Response>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.templatesHandler = void 0;
7
+
8
+ var _types = require("../../types");
9
+
10
+ var _s3Stream = require("../s3Stream");
11
+
12
+ var _zipper = require("../zipper");
13
+
14
+ var _mockSecurity = require("../../mockSecurity");
15
+
16
+ /**
17
+ * Handles the export templates combine workflow.
18
+ */
19
+ const templatesHandler = async (payload, context) => {
20
+ const log = console.log;
21
+ log("RUNNING Export Templates Combine Handler");
22
+ const {
23
+ pageBuilder
24
+ } = context;
25
+ const {
26
+ taskId,
27
+ identity
28
+ } = payload;
29
+ (0, _mockSecurity.mockSecurity)(identity, context);
30
+
31
+ try {
32
+ const task = await pageBuilder.importExportTask.getTask(taskId);
33
+
34
+ if (!task) {
35
+ return {
36
+ data: null,
37
+ error: {
38
+ message: `There is no task with ID "${taskId}".`
39
+ }
40
+ };
41
+ }
42
+
43
+ const {
44
+ exportTemplatesDataKey
45
+ } = task.input; // Get all files (zip) from given key
46
+
47
+ const listObjectResponse = await _s3Stream.s3Stream.listObject(exportTemplatesDataKey);
48
+
49
+ if (!listObjectResponse.Contents) {
50
+ return {
51
+ data: null,
52
+ error: {
53
+ message: "There is no Contents defined on S3 Stream while combining templates."
54
+ }
55
+ };
56
+ }
57
+
58
+ const zipFileKeys = listObjectResponse.Contents.filter(file => file.Key !== exportTemplatesDataKey).map(file => file.Key).filter(Boolean); // Prepare zip of all zips
59
+
60
+ const zipOfZip = new _zipper.ZipOfZip(zipFileKeys, "WEBINY_TEMPLATE_EXPORT.zip"); // Upload
61
+
62
+ const templateExportUpload = await zipOfZip.process();
63
+ log(`Done uploading... File is located at ${templateExportUpload.Location} `); // Update task status and save export templates data key
64
+
65
+ await pageBuilder.importExportTask.updateTask(taskId, {
66
+ status: _types.ImportExportTaskStatus.COMPLETED,
67
+ data: {
68
+ message: `Finish uploading template export.`,
69
+ key: templateExportUpload.Key,
70
+ url: _s3Stream.s3Stream.getPresignedUrl(templateExportUpload.Key)
71
+ }
72
+ }); // Remove individual zip files from storage
73
+
74
+ const deleteFilePromises = zipFileKeys.map(key => _s3Stream.s3Stream.deleteObject(key));
75
+ await Promise.all(deleteFilePromises);
76
+ log(`Successfully deleted ${deleteFilePromises.length} zip files.`);
77
+ } catch (e) {
78
+ log("[EXPORT_TEMPLATES_COMBINE] Error => ", e.message);
79
+ /**
80
+ * In case of error, we'll update the task status to "failed",
81
+ * so that, client can show notify the user appropriately.
82
+ */
83
+
84
+ await pageBuilder.importExportTask.updateTask(taskId, {
85
+ status: _types.ImportExportTaskStatus.FAILED,
86
+ error: {
87
+ name: e.name,
88
+ message: e.message,
89
+ code: "EXPORT_FAILED"
90
+ }
91
+ });
92
+ return {
93
+ data: null,
94
+ error: {
95
+ message: e.message
96
+ }
97
+ };
98
+ }
99
+
100
+ return {
101
+ data: "",
102
+ error: null
103
+ };
104
+ };
105
+
106
+ exports.templatesHandler = templatesHandler;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["templatesHandler","payload","context","log","console","pageBuilder","taskId","identity","mockSecurity","task","importExportTask","getTask","data","error","message","exportTemplatesDataKey","input","listObjectResponse","s3Stream","listObject","Contents","zipFileKeys","filter","file","Key","map","Boolean","zipOfZip","ZipOfZip","templateExportUpload","process","Location","updateTask","status","ImportExportTaskStatus","COMPLETED","key","url","getPresignedUrl","deleteFilePromises","deleteObject","Promise","all","length","e","FAILED","name","code"],"sources":["templatesHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { s3Stream } from \"../s3Stream\";\nimport { ZipOfZip } from \"../zipper\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { Payload, Response } from \"~/export/combine\";\n\n/**\n * Handles the export templates combine workflow.\n */\nexport const templatesHandler = async (\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n\n log(\"RUNNING Export Templates Combine Handler\");\n const { pageBuilder } = context;\n const { taskId, identity } = payload;\n\n mockSecurity(identity, context);\n\n try {\n const task = await pageBuilder.importExportTask.getTask(taskId);\n if (!task) {\n return {\n data: null,\n error: {\n message: `There is no task with ID \"${taskId}\".`\n }\n };\n }\n\n const { exportTemplatesDataKey } = task.input;\n\n // Get all files (zip) from given key\n const listObjectResponse = await s3Stream.listObject(exportTemplatesDataKey);\n if (!listObjectResponse.Contents) {\n return {\n data: null,\n error: {\n message: \"There is no Contents defined on S3 Stream while combining templates.\"\n }\n };\n }\n\n const zipFileKeys = listObjectResponse.Contents.filter(\n file => file.Key !== exportTemplatesDataKey\n )\n .map(file => file.Key)\n .filter(Boolean) as string[];\n\n // Prepare zip of all zips\n const zipOfZip = new ZipOfZip(zipFileKeys, \"WEBINY_TEMPLATE_EXPORT.zip\");\n\n // Upload\n const templateExportUpload = await zipOfZip.process();\n log(`Done uploading... File is located at ${templateExportUpload.Location} `);\n\n // Update task status and save export templates data key\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish uploading template export.`,\n key: templateExportUpload.Key,\n url: s3Stream.getPresignedUrl(templateExportUpload.Key)\n }\n });\n\n // Remove individual zip files from storage\n const deleteFilePromises = zipFileKeys.map(key => s3Stream.deleteObject(key));\n await Promise.all(deleteFilePromises);\n log(`Successfully deleted ${deleteFilePromises.length} zip files.`);\n } catch (e) {\n log(\"[EXPORT_TEMPLATES_COMBINE] Error => \", e.message);\n\n /**\n * In case of error, we'll update the task status to \"failed\",\n * so that, client can show notify the user appropriately.\n */\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n code: \"EXPORT_FAILED\"\n }\n });\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { PbImportExportContext } from "../../types";
2
+ import { Configuration, Payload, Response } from ".";
3
+ /**
4
+ * Handles the export blocks process workflow.
5
+ */
6
+ export declare const blocksHandler: (configuration: Configuration, payload: Payload, context: PbImportExportContext) => Promise<Response>;
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.blocksHandler = void 0;
7
+
8
+ var _types = require("../../types");
9
+
10
+ var _client = require("../../client");
11
+
12
+ var _handlerGraphql = require("@webiny/handler-graphql");
13
+
14
+ var _utils = require("../utils");
15
+
16
+ var _mockSecurity = require("../../mockSecurity");
17
+
18
+ var _utils2 = require("@webiny/utils");
19
+
20
+ /**
21
+ * Handles the export blocks process workflow.
22
+ */
23
+ const blocksHandler = async (configuration, payload, context) => {
24
+ const log = console.log;
25
+ let subTask;
26
+ let noPendingTask = true;
27
+ let prevStatusOfSubTask = _types.ImportExportTaskStatus.PENDING;
28
+ log("RUNNING Export Blocks Process Handler");
29
+ const {
30
+ pageBuilder,
31
+ fileManager
32
+ } = context;
33
+ const {
34
+ taskId,
35
+ subTaskIndex,
36
+ type,
37
+ identity
38
+ } = payload; // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks
39
+ // and this Lambda is invoked internally, without credentials.
40
+
41
+ (0, _mockSecurity.mockSecurity)(identity, context);
42
+
43
+ try {
44
+ /*
45
+ * Note: We're not going to DB for finding the next sub-task to process,
46
+ * because the data might be out of sync due to GSI eventual consistency.
47
+ */
48
+ subTask = await pageBuilder.importExportTask.getSubTask(taskId, (0, _utils2.zeroPad)(subTaskIndex, 5));
49
+ /**
50
+ * Base condition!!
51
+ * Bail out early, if task not found or task's status is not "pending".
52
+ */
53
+
54
+ if (!subTask || subTask.status !== _types.ImportExportTaskStatus.PENDING) {
55
+ noPendingTask = true;
56
+ return {
57
+ data: "",
58
+ error: null
59
+ };
60
+ } else {
61
+ noPendingTask = false;
62
+ }
63
+
64
+ log(`Fetched sub task => ${subTask.id}`);
65
+ const {
66
+ input
67
+ } = subTask;
68
+ const {
69
+ blockId,
70
+ exportBlocksDataKey
71
+ } = input;
72
+ const block = await pageBuilder.getPageBlock(blockId);
73
+
74
+ if (!block) {
75
+ log(`Unable to load block "${blockId}"`);
76
+ throw new _handlerGraphql.NotFoundError(`Unable to load block "${blockId}"`);
77
+ }
78
+
79
+ log(`Processing block key "${blockId}"`); // Mark task status as PROCESSING
80
+
81
+ subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
82
+ status: _types.ImportExportTaskStatus.PROCESSING
83
+ }); // Update stats in main task
84
+
85
+ await pageBuilder.importExportTask.updateStats(taskId, {
86
+ prevStatus: prevStatusOfSubTask,
87
+ nextStatus: _types.ImportExportTaskStatus.PROCESSING
88
+ });
89
+ prevStatusOfSubTask = subTask.status;
90
+ log(`Extracting block data and uploading to storage...`); // Extract Block
91
+
92
+ const blockDataZip = await (0, _utils.exportBlock)(block, exportBlocksDataKey, fileManager);
93
+ log(`Finish uploading zip...`); // Update task record in DB
94
+
95
+ subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
96
+ status: _types.ImportExportTaskStatus.COMPLETED,
97
+ data: {
98
+ message: `Finish uploading data for block "${block.id}"`,
99
+ key: blockDataZip.Key
100
+ }
101
+ }); // Update stats in main task
102
+
103
+ await pageBuilder.importExportTask.updateStats(taskId, {
104
+ prevStatus: prevStatusOfSubTask,
105
+ nextStatus: _types.ImportExportTaskStatus.COMPLETED
106
+ });
107
+ prevStatusOfSubTask = subTask.status;
108
+ } catch (e) {
109
+ log("[EXPORT_BLOCKS_PROCESS] Error => ", e.message);
110
+
111
+ if (subTask && subTask.id) {
112
+ /**
113
+ * In case of error, we'll update the task status to "failed",
114
+ * so that, client can show notify the user appropriately.
115
+ */
116
+ subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
117
+ status: _types.ImportExportTaskStatus.FAILED,
118
+ error: {
119
+ name: e.name,
120
+ message: e.message,
121
+ code: "EXPORT_FAILED"
122
+ }
123
+ }); // Update stats in main task
124
+
125
+ await pageBuilder.importExportTask.updateStats(taskId, {
126
+ prevStatus: prevStatusOfSubTask,
127
+ nextStatus: _types.ImportExportTaskStatus.FAILED
128
+ });
129
+ prevStatusOfSubTask = subTask.status;
130
+ }
131
+
132
+ return {
133
+ data: null,
134
+ error: {
135
+ message: e.message
136
+ }
137
+ };
138
+ } finally {
139
+ // Base condition!
140
+ if (noPendingTask) {
141
+ log(`No pending sub-task for task ${taskId}`); // Combine individual block zip files.
142
+
143
+ await (0, _client.invokeHandlerClient)({
144
+ context,
145
+ name: configuration.handlers.combine,
146
+ payload: {
147
+ taskId,
148
+ type,
149
+ identity: context.security.getIdentity()
150
+ },
151
+ description: "Export blocks - combine"
152
+ });
153
+ } else {
154
+ console.log(`Invoking PROCESS for task "${subTaskIndex + 1}"`); // We want to continue with Self invocation no matter if current block error out.
155
+
156
+ await (0, _client.invokeHandlerClient)({
157
+ context,
158
+ name: configuration.handlers.process,
159
+ payload: {
160
+ taskId,
161
+ subTaskIndex: subTaskIndex + 1,
162
+ type,
163
+ identity: context.security.getIdentity()
164
+ },
165
+ description: "Export blocks - process - subtask"
166
+ });
167
+ }
168
+ }
169
+
170
+ return {
171
+ data: "",
172
+ error: null
173
+ };
174
+ };
175
+
176
+ exports.blocksHandler = blocksHandler;