@webiny/api-page-builder-import-export 5.39.2-beta.3 → 5.39.3-beta.0
Sign up to get free protection for your applications and to get access to all the features.
- package/export/combine/index.js +2 -2
- package/export/combine/index.js.map +1 -1
- package/export/pages/ExportPagesCleanup.d.ts +5 -0
- package/export/pages/ExportPagesCleanup.js +82 -0
- package/export/pages/ExportPagesCleanup.js.map +1 -0
- package/export/pages/ExportPagesController.d.ts +5 -0
- package/export/pages/ExportPagesController.js +31 -0
- package/export/pages/ExportPagesController.js.map +1 -0
- package/export/pages/ExportPagesZipPages.d.ts +5 -0
- package/export/pages/ExportPagesZipPages.js +23 -0
- package/export/pages/ExportPagesZipPages.js.map +1 -0
- package/export/pages/controller/CombineZippedPages.d.ts +5 -0
- package/export/pages/controller/CombineZippedPages.js +75 -0
- package/export/pages/controller/CombineZippedPages.js.map +1 -0
- package/export/pages/controller/CreateZipPagesTasks.d.ts +8 -0
- package/export/pages/controller/CreateZipPagesTasks.js +103 -0
- package/export/pages/controller/CreateZipPagesTasks.js.map +1 -0
- package/export/pages/controller/ProcessZipPagesTasks.d.ts +6 -0
- package/export/pages/controller/ProcessZipPagesTasks.js +62 -0
- package/export/pages/controller/ProcessZipPagesTasks.js.map +1 -0
- package/export/pages/types.d.ts +53 -0
- package/export/pages/types.js +27 -0
- package/export/pages/types.js.map +1 -0
- package/export/pages/utils.d.ts +2 -0
- package/export/pages/utils.js +14 -0
- package/export/pages/utils.js.map +1 -0
- package/export/pages/zipPages/ZipPages.d.ts +5 -0
- package/export/pages/zipPages/ZipPages.js +100 -0
- package/export/pages/zipPages/ZipPages.js.map +1 -0
- package/export/pages/zipPages/ZipPagesDataManager.d.ts +14 -0
- package/export/pages/zipPages/ZipPagesDataManager.js +46 -0
- package/export/pages/zipPages/ZipPagesDataManager.js.map +1 -0
- package/export/pages/zipPages/getPageFactory.d.ts +4 -0
- package/export/pages/zipPages/getPageFactory.js +38 -0
- package/export/pages/zipPages/getPageFactory.js.map +1 -0
- package/export/process/exporters/PageExporter.d.ts +8 -1
- package/export/process/exporters/PageExporter.js.map +1 -1
- package/export/process/index.js +2 -2
- package/export/process/index.js.map +1 -1
- package/export/s3Stream.d.ts +2 -2
- package/export/s3Stream.js.map +1 -1
- package/graphql/crud/pages.crud.d.ts +0 -1
- package/graphql/crud/pages.crud.js +207 -123
- package/graphql/crud/pages.crud.js.map +1 -1
- package/graphql/graphql/blocks.gql.js +3 -4
- package/graphql/graphql/blocks.gql.js.map +1 -1
- package/graphql/graphql/forms.gql.js +3 -4
- package/graphql/graphql/forms.gql.js.map +1 -1
- package/graphql/graphql/importExportTasks.gql.js +3 -4
- package/graphql/graphql/importExportTasks.gql.js.map +1 -1
- package/graphql/graphql/pages.gql.js +100 -12
- package/graphql/graphql/pages.gql.js.map +1 -1
- package/graphql/graphql/templates.gql.js +3 -4
- package/graphql/graphql/templates.gql.js.map +1 -1
- package/graphql/graphql/utils/resolve.d.ts +3 -3
- package/graphql/graphql/utils/resolve.js +14 -5
- package/graphql/graphql/utils/resolve.js.map +1 -1
- package/graphql/index.d.ts +1 -1
- package/graphql/index.js +2 -1
- package/graphql/index.js.map +1 -1
- package/graphql/types.d.ts +53 -25
- package/graphql/types.js.map +1 -1
- package/import/create/index.js +2 -2
- package/import/create/index.js.map +1 -1
- package/import/pages/ImportPagesController.d.ts +5 -0
- package/import/pages/ImportPagesController.js +29 -0
- package/import/pages/ImportPagesController.js.map +1 -0
- package/import/pages/ImportPagesProcessPages.d.ts +6 -0
- package/import/pages/ImportPagesProcessPages.js +111 -0
- package/import/pages/ImportPagesProcessPages.js.map +1 -0
- package/import/pages/controller/ImportPagesProcessPagesChecker.d.ts +6 -0
- package/import/pages/controller/ImportPagesProcessPagesChecker.js +40 -0
- package/import/pages/controller/ImportPagesProcessPagesChecker.js.map +1 -0
- package/import/pages/controller/ImportPagesProcessZipFile.d.ts +5 -0
- package/import/pages/controller/ImportPagesProcessZipFile.js +71 -0
- package/import/pages/controller/ImportPagesProcessZipFile.js.map +1 -0
- package/import/{process/pages → pages/process}/importPage.d.ts +0 -1
- package/import/pages/process/importPage.js.map +1 -0
- package/import/pages/types.d.ts +48 -0
- package/import/pages/types.js +21 -0
- package/import/pages/types.js.map +1 -0
- package/import/process/index.js +2 -2
- package/import/process/index.js.map +1 -1
- package/import/utils/extractAndUploadZipFileContents.js +5 -2
- package/import/utils/extractAndUploadZipFileContents.js.map +1 -1
- package/package.json +25 -23
- package/tasks/common/ChildTasksCleanup.d.ts +12 -0
- package/tasks/common/ChildTasksCleanup.js +64 -0
- package/tasks/common/ChildTasksCleanup.js.map +1 -0
- package/tasks/index.d.ts +1 -0
- package/tasks/index.js +13 -0
- package/tasks/index.js.map +1 -0
- package/tasks/pages/exportPagesCleanupTask.d.ts +3 -0
- package/tasks/pages/exportPagesCleanupTask.js +36 -0
- package/tasks/pages/exportPagesCleanupTask.js.map +1 -0
- package/tasks/pages/exportPagesControllerTask.d.ts +3 -0
- package/tasks/pages/exportPagesControllerTask.js +82 -0
- package/tasks/pages/exportPagesControllerTask.js.map +1 -0
- package/tasks/pages/exportPagesZipPagesTask.d.ts +3 -0
- package/tasks/pages/exportPagesZipPagesTask.js +39 -0
- package/tasks/pages/exportPagesZipPagesTask.js.map +1 -0
- package/tasks/pages/importPagesControllerTask.d.ts +3 -0
- package/tasks/pages/importPagesControllerTask.js +39 -0
- package/tasks/pages/importPagesControllerTask.js.map +1 -0
- package/tasks/pages/importPagesProcessPageTask.d.ts +3 -0
- package/tasks/pages/importPagesProcessPageTask.js +39 -0
- package/tasks/pages/importPagesProcessPageTask.js.map +1 -0
- package/tasks/pages/index.d.ts +1 -0
- package/tasks/pages/index.js +17 -0
- package/tasks/pages/index.js.map +1 -0
- package/utils/ZipFiles.d.ts +11 -0
- package/utils/ZipFiles.js +127 -0
- package/utils/ZipFiles.js.map +1 -0
- package/export/combine/pagesHandler.d.ts +0 -6
- package/export/combine/pagesHandler.js +0 -101
- package/export/combine/pagesHandler.js.map +0 -1
- package/export/process/pagesHandler.d.ts +0 -6
- package/export/process/pagesHandler.js +0 -191
- package/export/process/pagesHandler.js.map +0 -1
- package/import/process/pages/importPage.js.map +0 -1
- package/import/process/pages/pagesHandler.d.ts +0 -3
- package/import/process/pages/pagesHandler.js +0 -185
- package/import/process/pages/pagesHandler.js.map +0 -1
- /package/import/{process/pages → pages/process}/importPage.js +0 -0
@@ -1,101 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.pagesHandler = void 0;
|
7
|
-
var _types = require("../../types");
|
8
|
-
var _s3Stream = require("../s3Stream");
|
9
|
-
var _zipper = require("../zipper");
|
10
|
-
var _mockSecurity = require("../../mockSecurity");
|
11
|
-
/**
|
12
|
-
* Handles the export pages combine workflow.
|
13
|
-
*/
|
14
|
-
const pagesHandler = async (payload, context) => {
|
15
|
-
const log = console.log;
|
16
|
-
log("RUNNING Export Pages Combine Handler");
|
17
|
-
const {
|
18
|
-
pageBuilder
|
19
|
-
} = context;
|
20
|
-
const {
|
21
|
-
taskId,
|
22
|
-
identity
|
23
|
-
} = payload;
|
24
|
-
(0, _mockSecurity.mockSecurity)(identity, context);
|
25
|
-
try {
|
26
|
-
const task = await pageBuilder.importExportTask.getTask(taskId);
|
27
|
-
if (!task) {
|
28
|
-
return {
|
29
|
-
data: null,
|
30
|
-
error: {
|
31
|
-
message: `There is no task with ID "${taskId}".`
|
32
|
-
}
|
33
|
-
};
|
34
|
-
}
|
35
|
-
const {
|
36
|
-
exportPagesDataKey
|
37
|
-
} = task.input;
|
38
|
-
|
39
|
-
// Get all files (zip) from given key
|
40
|
-
const listObjectResponse = await _s3Stream.s3Stream.listObject(exportPagesDataKey);
|
41
|
-
if (!listObjectResponse.Contents) {
|
42
|
-
return {
|
43
|
-
data: null,
|
44
|
-
error: {
|
45
|
-
message: "There is no Contents defined on S3 Stream while combining pages."
|
46
|
-
}
|
47
|
-
};
|
48
|
-
}
|
49
|
-
const zipFileKeys = listObjectResponse.Contents.filter(file => file.Key !== exportPagesDataKey).map(file => file.Key).filter(Boolean);
|
50
|
-
|
51
|
-
// Prepare zip of all zips
|
52
|
-
const zipOfZip = new _zipper.ZipOfZip(zipFileKeys, "WEBINY_PAGE_EXPORT.zip");
|
53
|
-
|
54
|
-
// Upload
|
55
|
-
const pageExportUpload = await zipOfZip.process();
|
56
|
-
log(`Done uploading... File is located at ${pageExportUpload.Location} `);
|
57
|
-
|
58
|
-
// Update task status and save export page data key
|
59
|
-
await pageBuilder.importExportTask.updateTask(taskId, {
|
60
|
-
status: _types.ImportExportTaskStatus.COMPLETED,
|
61
|
-
data: {
|
62
|
-
message: `Finish uploading page export.`,
|
63
|
-
key: pageExportUpload.Key,
|
64
|
-
url: await _s3Stream.s3Stream.getPresignedUrl(pageExportUpload.Key)
|
65
|
-
}
|
66
|
-
});
|
67
|
-
|
68
|
-
// Remove individual zip files from storage
|
69
|
-
const deleteFilePromises = zipFileKeys.map(key => _s3Stream.s3Stream.deleteObject(key));
|
70
|
-
await Promise.all(deleteFilePromises);
|
71
|
-
log(`Successfully deleted ${deleteFilePromises.length} zip files.`);
|
72
|
-
} catch (e) {
|
73
|
-
log("[EXPORT_PAGES_COMBINE] Error => ", e.message);
|
74
|
-
|
75
|
-
/**
|
76
|
-
* In case of error, we'll update the task status to "failed",
|
77
|
-
* so that, client can show notify the user appropriately.
|
78
|
-
*/
|
79
|
-
await pageBuilder.importExportTask.updateTask(taskId, {
|
80
|
-
status: _types.ImportExportTaskStatus.FAILED,
|
81
|
-
error: {
|
82
|
-
name: e.name,
|
83
|
-
message: e.message,
|
84
|
-
code: "EXPORT_FAILED"
|
85
|
-
}
|
86
|
-
});
|
87
|
-
return {
|
88
|
-
data: null,
|
89
|
-
error: {
|
90
|
-
message: e.message
|
91
|
-
}
|
92
|
-
};
|
93
|
-
}
|
94
|
-
return {
|
95
|
-
data: "",
|
96
|
-
error: null
|
97
|
-
};
|
98
|
-
};
|
99
|
-
exports.pagesHandler = pagesHandler;
|
100
|
-
|
101
|
-
//# sourceMappingURL=pagesHandler.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_types","require","_s3Stream","_zipper","_mockSecurity","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","exports"],"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: await 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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"}
|
@@ -1,6 +0,0 @@
|
|
1
|
-
import { PbImportExportContext } from "../../types";
|
2
|
-
import { Configuration, Payload, Response } from "./";
|
3
|
-
/**
|
4
|
-
* Handles the export pages process workflow.
|
5
|
-
*/
|
6
|
-
export declare const pagesHandler: (configuration: Configuration, payload: Payload, context: PbImportExportContext) => Promise<Response>;
|
@@ -1,191 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.pagesHandler = void 0;
|
7
|
-
var _types = require("../../types");
|
8
|
-
var _client = require("../../client");
|
9
|
-
var _handlerGraphql = require("@webiny/handler-graphql");
|
10
|
-
var _mockSecurity = require("../../mockSecurity");
|
11
|
-
var _utils = require("@webiny/utils");
|
12
|
-
var _PageExporter = require("./exporters/PageExporter");
|
13
|
-
/**
|
14
|
-
* Handles the export pages process workflow.
|
15
|
-
*/
|
16
|
-
const pagesHandler = async (configuration, payload, context) => {
|
17
|
-
const log = console.log;
|
18
|
-
let subTask;
|
19
|
-
let noPendingTask = true;
|
20
|
-
let prevStatusOfSubTask = _types.ImportExportTaskStatus.PENDING;
|
21
|
-
log("RUNNING Export Pages Process Handler");
|
22
|
-
const {
|
23
|
-
pageBuilder,
|
24
|
-
fileManager
|
25
|
-
} = context;
|
26
|
-
const {
|
27
|
-
taskId,
|
28
|
-
subTaskIndex,
|
29
|
-
type,
|
30
|
-
identity
|
31
|
-
} = payload;
|
32
|
-
// Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks
|
33
|
-
// and this Lambda is invoked internally, without credentials.
|
34
|
-
(0, _mockSecurity.mockSecurity)(identity, context);
|
35
|
-
try {
|
36
|
-
/*
|
37
|
-
* Note: We're not going to DB for finding the next sub-task to process,
|
38
|
-
* because the data might be out of sync due to GSI eventual consistency.
|
39
|
-
*/
|
40
|
-
subTask = await pageBuilder.importExportTask.getSubTask(taskId, (0, _utils.zeroPad)(subTaskIndex, 5));
|
41
|
-
/**
|
42
|
-
* Base condition!!
|
43
|
-
* Bail out early, if task not found or task's status is not "pending".
|
44
|
-
*/
|
45
|
-
if (!subTask || subTask.status !== _types.ImportExportTaskStatus.PENDING) {
|
46
|
-
noPendingTask = true;
|
47
|
-
return {
|
48
|
-
data: "",
|
49
|
-
error: null
|
50
|
-
};
|
51
|
-
} else {
|
52
|
-
noPendingTask = false;
|
53
|
-
}
|
54
|
-
log(`Fetched sub task => ${subTask.id}`);
|
55
|
-
const {
|
56
|
-
input
|
57
|
-
} = subTask;
|
58
|
-
const {
|
59
|
-
pageId,
|
60
|
-
exportPagesDataKey,
|
61
|
-
revisionType
|
62
|
-
} = input;
|
63
|
-
|
64
|
-
/**
|
65
|
-
* At the moment, we only export a single revision of the page.
|
66
|
-
* It could be "published" or "latest" depending upon user input.
|
67
|
-
*
|
68
|
-
* Note: In case of no "published" revision available, we use the latest revision.
|
69
|
-
*/
|
70
|
-
let page;
|
71
|
-
try {
|
72
|
-
if (revisionType === _types.ExportRevisionType.PUBLISHED) {
|
73
|
-
// Get "published" page.
|
74
|
-
page = await pageBuilder.getPublishedPageById({
|
75
|
-
id: pageId
|
76
|
-
});
|
77
|
-
} else {
|
78
|
-
// Get "latest" page.
|
79
|
-
page = await pageBuilder.getPage(pageId);
|
80
|
-
}
|
81
|
-
} catch (e) {
|
82
|
-
// If we're looking for "published" page and doesn't found it, get latest page.
|
83
|
-
if (revisionType === _types.ExportRevisionType.PUBLISHED && e instanceof _handlerGraphql.NotFoundError) {
|
84
|
-
page = await pageBuilder.getPage(pageId);
|
85
|
-
} else {
|
86
|
-
throw e;
|
87
|
-
}
|
88
|
-
}
|
89
|
-
if (!page) {
|
90
|
-
log(`Unable to load page "${pageId}"`);
|
91
|
-
throw new _handlerGraphql.NotFoundError(`Unable to load page "${pageId}"`);
|
92
|
-
}
|
93
|
-
log(`Processing page key "${pageId}" | version ${page.version} | ${page.status}`);
|
94
|
-
|
95
|
-
// Mark task status as PROCESSING
|
96
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
97
|
-
status: _types.ImportExportTaskStatus.PROCESSING
|
98
|
-
});
|
99
|
-
// Update stats in main task
|
100
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
101
|
-
prevStatus: prevStatusOfSubTask,
|
102
|
-
nextStatus: _types.ImportExportTaskStatus.PROCESSING
|
103
|
-
});
|
104
|
-
prevStatusOfSubTask = subTask.status;
|
105
|
-
log(`Extracting page data and uploading to storage...`);
|
106
|
-
const pageExporter = new _PageExporter.PageExporter(fileManager);
|
107
|
-
const pageDataZip = await pageExporter.execute(page, exportPagesDataKey);
|
108
|
-
log(`Finish uploading zip...`);
|
109
|
-
// Update task record in DB
|
110
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
111
|
-
status: _types.ImportExportTaskStatus.COMPLETED,
|
112
|
-
data: {
|
113
|
-
message: `Finish uploading data for page "${page.id}" v${page.version} (${page.status}).`,
|
114
|
-
key: pageDataZip.Key
|
115
|
-
}
|
116
|
-
});
|
117
|
-
// Update stats in main task
|
118
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
119
|
-
prevStatus: prevStatusOfSubTask,
|
120
|
-
nextStatus: _types.ImportExportTaskStatus.COMPLETED
|
121
|
-
});
|
122
|
-
prevStatusOfSubTask = subTask.status;
|
123
|
-
} catch (e) {
|
124
|
-
log("[EXPORT_PAGES_PROCESS] Error => ", e);
|
125
|
-
if (subTask && subTask.id) {
|
126
|
-
/**
|
127
|
-
* In case of error, we'll update the task status to "failed",
|
128
|
-
* so that, client can show notify the user appropriately.
|
129
|
-
*/
|
130
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
131
|
-
status: _types.ImportExportTaskStatus.FAILED,
|
132
|
-
error: {
|
133
|
-
name: e.name,
|
134
|
-
message: e.message,
|
135
|
-
stack: e.stack,
|
136
|
-
code: "EXPORT_FAILED"
|
137
|
-
}
|
138
|
-
});
|
139
|
-
|
140
|
-
// Update stats in main task
|
141
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
142
|
-
prevStatus: prevStatusOfSubTask,
|
143
|
-
nextStatus: _types.ImportExportTaskStatus.FAILED
|
144
|
-
});
|
145
|
-
prevStatusOfSubTask = subTask.status;
|
146
|
-
}
|
147
|
-
return {
|
148
|
-
data: null,
|
149
|
-
error: {
|
150
|
-
message: e.message
|
151
|
-
}
|
152
|
-
};
|
153
|
-
} finally {
|
154
|
-
// Base condition!
|
155
|
-
if (noPendingTask) {
|
156
|
-
log(`No pending sub-task for task ${taskId}`);
|
157
|
-
// Combine individual page zip files.
|
158
|
-
await (0, _client.invokeHandlerClient)({
|
159
|
-
context,
|
160
|
-
name: configuration.handlers.combine,
|
161
|
-
payload: {
|
162
|
-
taskId,
|
163
|
-
type,
|
164
|
-
identity: context.security.getIdentity()
|
165
|
-
},
|
166
|
-
description: "Export pages - combine"
|
167
|
-
});
|
168
|
-
} else {
|
169
|
-
console.log(`Invoking PROCESS for task "${subTaskIndex + 1}"`);
|
170
|
-
// We want to continue with Self invocation no matter if current page error out.
|
171
|
-
await (0, _client.invokeHandlerClient)({
|
172
|
-
context,
|
173
|
-
name: configuration.handlers.process,
|
174
|
-
payload: {
|
175
|
-
taskId,
|
176
|
-
type,
|
177
|
-
subTaskIndex: subTaskIndex + 1,
|
178
|
-
identity: context.security.getIdentity()
|
179
|
-
},
|
180
|
-
description: "Export pages - process - subtask"
|
181
|
-
});
|
182
|
-
}
|
183
|
-
}
|
184
|
-
return {
|
185
|
-
data: "",
|
186
|
-
error: null
|
187
|
-
};
|
188
|
-
};
|
189
|
-
exports.pagesHandler = pagesHandler;
|
190
|
-
|
191
|
-
//# sourceMappingURL=pagesHandler.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_types","require","_client","_handlerGraphql","_mockSecurity","_utils","_PageExporter","pagesHandler","configuration","payload","context","log","console","subTask","noPendingTask","prevStatusOfSubTask","ImportExportTaskStatus","PENDING","pageBuilder","fileManager","taskId","subTaskIndex","type","identity","mockSecurity","importExportTask","getSubTask","zeroPad","status","data","error","id","input","pageId","exportPagesDataKey","revisionType","page","ExportRevisionType","PUBLISHED","getPublishedPageById","getPage","e","NotFoundError","version","updateSubTask","PROCESSING","updateStats","prevStatus","nextStatus","pageExporter","PageExporter","pageDataZip","execute","COMPLETED","message","key","Key","FAILED","name","stack","code","invokeHandlerClient","handlers","combine","security","getIdentity","description","process","exports"],"sources":["pagesHandler.ts"],"sourcesContent":["import { ExportRevisionType, ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { NotFoundError } from \"@webiny/handler-graphql\";\nimport { Payload as ExtractPayload } from \"../combine\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { SecurityIdentity } from \"@webiny/api-security/types\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { Configuration, Payload, Response } from \"~/export/process\";\nimport { PageExporter } from \"./exporters/PageExporter\";\n\n/**\n * Handles the export pages process workflow.\n */\nexport const pagesHandler = async (\n configuration: Configuration,\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n let subTask;\n let noPendingTask = true;\n let prevStatusOfSubTask = ImportExportTaskStatus.PENDING;\n\n log(\"RUNNING Export Pages Process Handler\");\n const { pageBuilder, fileManager } = context;\n const { taskId, subTaskIndex, type, identity } = payload;\n // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks\n // and this Lambda is invoked internally, without credentials.\n mockSecurity(identity as SecurityIdentity, context);\n\n try {\n /*\n * Note: We're not going to DB for finding the next sub-task to process,\n * because the data might be out of sync due to GSI eventual consistency.\n */\n subTask = await pageBuilder.importExportTask.getSubTask(taskId, zeroPad(subTaskIndex, 5));\n /**\n * Base condition!!\n * Bail out early, if task not found or task's status is not \"pending\".\n */\n if (!subTask || subTask.status !== ImportExportTaskStatus.PENDING) {\n noPendingTask = true;\n return {\n data: \"\",\n error: null\n };\n } else {\n noPendingTask = false;\n }\n\n log(`Fetched sub task => ${subTask.id}`);\n\n const { input } = subTask;\n const { pageId, exportPagesDataKey, revisionType } = input;\n\n /**\n * At the moment, we only export a single revision of the page.\n * It could be \"published\" or \"latest\" depending upon user input.\n *\n * Note: In case of no \"published\" revision available, we use the latest revision.\n */\n let page;\n try {\n if (revisionType === ExportRevisionType.PUBLISHED) {\n // Get \"published\" page.\n page = await pageBuilder.getPublishedPageById({ id: pageId });\n } else {\n // Get \"latest\" page.\n page = await pageBuilder.getPage(pageId);\n }\n } catch (e) {\n // If we're looking for \"published\" page and doesn't found it, get latest page.\n if (revisionType === ExportRevisionType.PUBLISHED && e instanceof NotFoundError) {\n page = await pageBuilder.getPage(pageId);\n } else {\n throw e;\n }\n }\n\n if (!page) {\n log(`Unable to load page \"${pageId}\"`);\n throw new NotFoundError(`Unable to load page \"${pageId}\"`);\n }\n\n log(`Processing page key \"${pageId}\" | version ${page.version} | ${page.status}`);\n\n // Mark task status as PROCESSING\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.PROCESSING\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.PROCESSING\n });\n prevStatusOfSubTask = subTask.status;\n\n log(`Extracting page data and uploading to storage...`);\n\n const pageExporter = new PageExporter(fileManager);\n const pageDataZip = await pageExporter.execute(page, exportPagesDataKey);\n\n log(`Finish uploading zip...`);\n // Update task record in DB\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish uploading data for page \"${page.id}\" v${page.version} (${page.status}).`,\n key: pageDataZip.Key\n }\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.COMPLETED\n });\n prevStatusOfSubTask = subTask.status;\n } catch (e) {\n log(\"[EXPORT_PAGES_PROCESS] Error => \", e);\n\n if (subTask && subTask.id) {\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 subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n stack: e.stack,\n code: \"EXPORT_FAILED\"\n }\n });\n\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.FAILED\n });\n prevStatusOfSubTask = subTask.status;\n }\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n } finally {\n // Base condition!\n if (noPendingTask) {\n log(`No pending sub-task for task ${taskId}`);\n // Combine individual page zip files.\n await invokeHandlerClient<ExtractPayload>({\n context,\n name: configuration.handlers.combine,\n payload: {\n taskId,\n type,\n identity: context.security.getIdentity()\n },\n description: \"Export pages - combine\"\n });\n } else {\n console.log(`Invoking PROCESS for task \"${subTaskIndex + 1}\"`);\n // We want to continue with Self invocation no matter if current page error out.\n await invokeHandlerClient<Payload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId,\n type,\n subTaskIndex: subTaskIndex + 1,\n identity: context.security.getIdentity()\n },\n description: \"Export pages - process - subtask\"\n });\n }\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_path","_interopRequireDefault","require","_dotPropImmutable","_loadJsonFile","_fsExtra","_downloadInstallFiles","_constants","_s3Stream","_utils","importPage","pageKey","context","fileUploadsData","log","console","PAGE_EXTRACT_DIR","path","join","INSTALL_EXTRACT_DIR","ensureDirSync","pageDataFileKey","dotProp","get","PAGE_DATA_FILE_PATH","basename","readStream","s3Stream","writeStream","createWriteStream","Promise","resolve","reject","on","pipe","page","files","loadJson","Array","isArray","length","fileIdToNewFileMap","uploadAssets","settings","fileManager","getSettings","srcPrefix","updateFilesInData","data","content","updateImageInPageSettings","deleteFile","deleteS3Folder","dirname","params","newSettings","cleanSrcPrefix","endsWith","slice","newFile","general","image","id","set","key","social"],"sources":["importPage.ts"],"sourcesContent":["import path from \"path\";\nimport dotProp from \"dot-prop-immutable\";\nimport loadJson from \"load-json-file\";\nimport { createWriteStream, ensureDirSync } from \"fs-extra\";\nimport { deleteFile } from \"@webiny/api-page-builder/graphql/crud/install/utils/downloadInstallFiles\";\nimport { FileInput } from \"@webiny/api-file-manager/types\";\nimport { PageSettings } from \"@webiny/api-page-builder/types\";\nimport { PbImportExportContext } from \"~/graphql/types\";\nimport { FileUploadsData } from \"~/types\";\nimport { INSTALL_EXTRACT_DIR } from \"~/import/constants\";\nimport { s3Stream } from \"~/export/s3Stream\";\nimport { deleteS3Folder, updateFilesInData, uploadAssets } from \"~/import/utils\";\nimport { ExportedPageData } from \"~/export/process/exporters/PageExporter\";\n\ninterface ImportPageParams {\n key: string;\n pageKey: string;\n context: PbImportExportContext;\n fileUploadsData: FileUploadsData;\n}\n\nexport async function importPage({\n pageKey,\n context,\n fileUploadsData\n}: ImportPageParams): Promise<ExportedPageData[\"page\"]> {\n const log = console.log;\n\n // Making Directory for page in which we're going to extract the page data file.\n const PAGE_EXTRACT_DIR = path.join(INSTALL_EXTRACT_DIR, pageKey);\n ensureDirSync(PAGE_EXTRACT_DIR);\n\n const pageDataFileKey = dotProp.get(fileUploadsData, `data`);\n const PAGE_DATA_FILE_PATH = path.join(PAGE_EXTRACT_DIR, path.basename(pageDataFileKey));\n\n log(`Downloading Page data file: ${pageDataFileKey} at \"${PAGE_DATA_FILE_PATH}\"`);\n // Download and save page data file in disk.\n const readStream = await s3Stream.readStream(pageDataFileKey);\n const writeStream = createWriteStream(PAGE_DATA_FILE_PATH);\n\n await new Promise((resolve, reject) => {\n readStream.on(\"error\", reject).pipe(writeStream).on(\"finish\", resolve).on(\"error\", reject);\n });\n\n // Load the page data file from disk.\n log(`Load file ${pageDataFileKey}`);\n const { page, files } = await loadJson<ExportedPageData>(PAGE_DATA_FILE_PATH);\n\n // Only update page data if there are files.\n if (files && Array.isArray(files) && files.length > 0) {\n const fileIdToNewFileMap = await uploadAssets({\n context,\n files,\n fileUploadsData\n });\n\n const settings = await context.fileManager.getSettings();\n\n const { srcPrefix = \"\" } = settings || {};\n updateFilesInData({\n data: page.content || {},\n fileIdToNewFileMap,\n srcPrefix\n });\n\n page.settings = updateImageInPageSettings({\n settings: page.settings || {},\n fileIdToNewFileMap,\n srcPrefix\n });\n }\n\n log(\"Removing Directory for page...\");\n await deleteFile(pageKey);\n\n log(`Remove page contents from S3...`);\n await deleteS3Folder(path.dirname(fileUploadsData.data));\n\n return page;\n}\n\ninterface UpdateImageInPageSettingsParams {\n fileIdToNewFileMap: Map<string, FileInput>;\n srcPrefix: string;\n settings: PageSettings;\n}\n\nfunction updateImageInPageSettings(\n params: UpdateImageInPageSettingsParams\n): UpdateImageInPageSettingsParams[\"settings\"] {\n const { settings, fileIdToNewFileMap, srcPrefix } = params;\n let newSettings = settings;\n\n const cleanSrcPrefix = srcPrefix.endsWith(\"/\") ? srcPrefix.slice(0, -1) : srcPrefix;\n\n if (dotProp.get(newSettings, \"general.image.src\")) {\n const newFile = fileIdToNewFileMap.get(settings.general?.image?.id || \"\");\n if (newFile) {\n newSettings = dotProp.set(\n newSettings,\n \"general.image.src\",\n `${cleanSrcPrefix}/${newFile.key}`\n );\n }\n }\n\n if (dotProp.get(newSettings, \"social.image.src\")) {\n const newFile = fileIdToNewFileMap.get(settings.social?.image?.id || \"\");\n\n if (newFile) {\n newSettings = dotProp.set(\n newSettings,\n \"social.image.src\",\n `${cleanSrcPrefix}/${newFile.key}`\n );\n }\n }\n\n return newSettings;\n}\n"],"mappings":"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"}
|
@@ -1,185 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
4
|
-
value: true
|
5
|
-
});
|
6
|
-
exports.pagesHandler = void 0;
|
7
|
-
var _types = require("../../../types");
|
8
|
-
var _importPage = require("./importPage");
|
9
|
-
var _client = require("../../../client");
|
10
|
-
var _mockSecurity = require("../../../mockSecurity");
|
11
|
-
var _utils = require("@webiny/utils");
|
12
|
-
const pagesHandler = async (configuration, payload, context) => {
|
13
|
-
const log = console.log;
|
14
|
-
let subTask;
|
15
|
-
let noPendingTask = true;
|
16
|
-
let prevStatusOfSubTask = _types.ImportExportTaskStatus.PENDING;
|
17
|
-
log("RUNNING Import Page Queue Process");
|
18
|
-
const {
|
19
|
-
pageBuilder
|
20
|
-
} = context;
|
21
|
-
const {
|
22
|
-
taskId,
|
23
|
-
subTaskIndex,
|
24
|
-
type,
|
25
|
-
identity
|
26
|
-
} = payload;
|
27
|
-
// Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks
|
28
|
-
// and this Lambda is invoked internally, without credentials.
|
29
|
-
(0, _mockSecurity.mockSecurity)(identity, context);
|
30
|
-
try {
|
31
|
-
/*
|
32
|
-
* Note: We're not going to DB for getting next sub-task to process,
|
33
|
-
* because the data might be out of sync due to GSI eventual consistency.
|
34
|
-
*/
|
35
|
-
|
36
|
-
subTask = await pageBuilder.importExportTask.getSubTask(taskId, (0, _utils.zeroPad)(subTaskIndex, 5));
|
37
|
-
|
38
|
-
/**
|
39
|
-
* Base condition!!
|
40
|
-
* Bail out early, if task not found or task's status is not "pending".
|
41
|
-
*/
|
42
|
-
if (!subTask || subTask.status !== _types.ImportExportTaskStatus.PENDING) {
|
43
|
-
noPendingTask = true;
|
44
|
-
return {
|
45
|
-
data: "",
|
46
|
-
error: null
|
47
|
-
};
|
48
|
-
} else {
|
49
|
-
noPendingTask = false;
|
50
|
-
}
|
51
|
-
prevStatusOfSubTask = subTask.status;
|
52
|
-
log(`Fetched sub task => ${subTask.id}`);
|
53
|
-
const {
|
54
|
-
pageKey,
|
55
|
-
category,
|
56
|
-
zipFileKey,
|
57
|
-
input,
|
58
|
-
meta
|
59
|
-
} = subTask.data;
|
60
|
-
const {
|
61
|
-
fileUploadsData
|
62
|
-
} = input;
|
63
|
-
log(`Processing page key "${pageKey}"`);
|
64
|
-
|
65
|
-
// Mark task status as PROCESSING
|
66
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
67
|
-
status: _types.ImportExportTaskStatus.PROCESSING
|
68
|
-
});
|
69
|
-
// Update stats in main task
|
70
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
71
|
-
prevStatus: prevStatusOfSubTask,
|
72
|
-
nextStatus: _types.ImportExportTaskStatus.PROCESSING
|
73
|
-
});
|
74
|
-
prevStatusOfSubTask = subTask.status;
|
75
|
-
|
76
|
-
// Real job
|
77
|
-
const page = await (0, _importPage.importPage)({
|
78
|
-
context,
|
79
|
-
pageKey,
|
80
|
-
key: zipFileKey,
|
81
|
-
fileUploadsData
|
82
|
-
});
|
83
|
-
|
84
|
-
// Create a page
|
85
|
-
let pbPage = await context.pageBuilder.createPage(category, meta);
|
86
|
-
|
87
|
-
// Hooks attached to `pageBuilder.createPage` might enable security back again, here we disable security
|
88
|
-
(0, _mockSecurity.mockSecurity)(identity, context);
|
89
|
-
|
90
|
-
// Update page with data
|
91
|
-
pbPage = await context.pageBuilder.updatePage(pbPage.id, {
|
92
|
-
content: page.content,
|
93
|
-
title: page.title,
|
94
|
-
path: page.path,
|
95
|
-
settings: page.settings
|
96
|
-
});
|
97
|
-
|
98
|
-
// Hooks attached to `pageBuilder.updatePage` might enable security back again, here we disable security
|
99
|
-
(0, _mockSecurity.mockSecurity)(identity, context);
|
100
|
-
|
101
|
-
// TODO: Publish page
|
102
|
-
|
103
|
-
// Update task record in DB
|
104
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
105
|
-
status: _types.ImportExportTaskStatus.COMPLETED,
|
106
|
-
data: {
|
107
|
-
message: "Done",
|
108
|
-
page: {
|
109
|
-
id: pbPage.id,
|
110
|
-
title: pbPage.title,
|
111
|
-
version: pbPage.version,
|
112
|
-
status: pbPage.status
|
113
|
-
}
|
114
|
-
}
|
115
|
-
});
|
116
|
-
// Update stats in main task
|
117
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
118
|
-
prevStatus: prevStatusOfSubTask,
|
119
|
-
nextStatus: _types.ImportExportTaskStatus.COMPLETED
|
120
|
-
});
|
121
|
-
prevStatusOfSubTask = subTask.status;
|
122
|
-
} catch (e) {
|
123
|
-
log("[IMPORT_PAGES_PROCESS] Error => ", e);
|
124
|
-
if (subTask && subTask.id) {
|
125
|
-
/**
|
126
|
-
* In case of error, we'll update the task status to "failed",
|
127
|
-
* so that, client can show notify the user appropriately.
|
128
|
-
*/
|
129
|
-
subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {
|
130
|
-
status: _types.ImportExportTaskStatus.FAILED,
|
131
|
-
error: {
|
132
|
-
name: e.name,
|
133
|
-
message: e.message,
|
134
|
-
stack: e.stack,
|
135
|
-
code: "IMPORT_FAILED"
|
136
|
-
}
|
137
|
-
});
|
138
|
-
|
139
|
-
// Update stats in main task
|
140
|
-
await pageBuilder.importExportTask.updateStats(taskId, {
|
141
|
-
prevStatus: prevStatusOfSubTask,
|
142
|
-
nextStatus: _types.ImportExportTaskStatus.FAILED
|
143
|
-
});
|
144
|
-
prevStatusOfSubTask = subTask.status;
|
145
|
-
}
|
146
|
-
return {
|
147
|
-
data: null,
|
148
|
-
error: {
|
149
|
-
message: e.message
|
150
|
-
}
|
151
|
-
};
|
152
|
-
} finally {
|
153
|
-
// Base condition!
|
154
|
-
if (noPendingTask) {
|
155
|
-
log(`No pending sub-task for task ${taskId}`);
|
156
|
-
await pageBuilder.importExportTask.updateTask(taskId, {
|
157
|
-
status: _types.ImportExportTaskStatus.COMPLETED,
|
158
|
-
data: {
|
159
|
-
message: `Finish importing pages.`
|
160
|
-
}
|
161
|
-
});
|
162
|
-
} else {
|
163
|
-
log(`Invoking PROCESS for task "${subTaskIndex + 1}"`);
|
164
|
-
// We want to continue with Self invocation no matter if current page error out.
|
165
|
-
await (0, _client.invokeHandlerClient)({
|
166
|
-
context,
|
167
|
-
name: configuration.handlers.process,
|
168
|
-
payload: {
|
169
|
-
taskId,
|
170
|
-
subTaskIndex: subTaskIndex + 1,
|
171
|
-
type,
|
172
|
-
identity: context.security.getIdentity()
|
173
|
-
},
|
174
|
-
description: "Import pages - process - subtask"
|
175
|
-
});
|
176
|
-
}
|
177
|
-
}
|
178
|
-
return {
|
179
|
-
data: "",
|
180
|
-
error: null
|
181
|
-
};
|
182
|
-
};
|
183
|
-
exports.pagesHandler = pagesHandler;
|
184
|
-
|
185
|
-
//# sourceMappingURL=pagesHandler.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"names":["_types","require","_importPage","_client","_mockSecurity","_utils","pagesHandler","configuration","payload","context","log","console","subTask","noPendingTask","prevStatusOfSubTask","ImportExportTaskStatus","PENDING","pageBuilder","taskId","subTaskIndex","type","identity","mockSecurity","importExportTask","getSubTask","zeroPad","status","data","error","id","pageKey","category","zipFileKey","input","meta","fileUploadsData","updateSubTask","PROCESSING","updateStats","prevStatus","nextStatus","page","importPage","key","pbPage","createPage","updatePage","content","title","path","settings","COMPLETED","message","version","e","FAILED","name","stack","code","updateTask","invokeHandlerClient","handlers","process","security","getIdentity","description","exports"],"sources":["pagesHandler.ts"],"sourcesContent":["import { ImportExportTaskStatus, PbImportExportContext } from \"~/types\";\nimport { importPage } from \"./importPage\";\nimport { invokeHandlerClient } from \"~/client\";\nimport { mockSecurity } from \"~/mockSecurity\";\nimport { zeroPad } from \"@webiny/utils\";\nimport { Configuration, Payload, Response } from \"~/import/process\";\n\nexport const pagesHandler = async (\n configuration: Configuration,\n payload: Payload,\n context: PbImportExportContext\n): Promise<Response> => {\n const log = console.log;\n let subTask;\n let noPendingTask = true;\n let prevStatusOfSubTask = ImportExportTaskStatus.PENDING;\n\n log(\"RUNNING Import Page Queue Process\");\n const { pageBuilder } = context;\n const { taskId, subTaskIndex, type, identity } = payload;\n // Disable authorization; this is necessary because we call Page Builder CRUD methods which include authorization checks\n // and this Lambda is invoked internally, without credentials.\n mockSecurity(identity, context);\n\n try {\n /*\n * Note: We're not going to DB for getting next sub-task to process,\n * because the data might be out of sync due to GSI eventual consistency.\n */\n\n subTask = await pageBuilder.importExportTask.getSubTask(taskId, zeroPad(subTaskIndex, 5));\n\n /**\n * Base condition!!\n * Bail out early, if task not found or task's status is not \"pending\".\n */\n if (!subTask || subTask.status !== ImportExportTaskStatus.PENDING) {\n noPendingTask = true;\n return {\n data: \"\",\n error: null\n };\n } else {\n noPendingTask = false;\n }\n prevStatusOfSubTask = subTask.status;\n\n log(`Fetched sub task => ${subTask.id}`);\n\n const { pageKey, category, zipFileKey, input, meta } = subTask.data;\n const { fileUploadsData } = input;\n\n log(`Processing page key \"${pageKey}\"`);\n\n // Mark task status as PROCESSING\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.PROCESSING\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.PROCESSING\n });\n prevStatusOfSubTask = subTask.status;\n\n // Real job\n const page = await importPage({\n context,\n pageKey,\n key: zipFileKey,\n fileUploadsData\n });\n\n // Create a page\n let pbPage = await context.pageBuilder.createPage(category, meta);\n\n // Hooks attached to `pageBuilder.createPage` might enable security back again, here we disable security\n mockSecurity(identity, context);\n\n // Update page with data\n pbPage = await context.pageBuilder.updatePage(pbPage.id, {\n content: page.content,\n title: page.title,\n path: page.path,\n settings: page.settings\n });\n\n // Hooks attached to `pageBuilder.updatePage` might enable security back again, here we disable security\n mockSecurity(identity, context);\n\n // TODO: Publish page\n\n // Update task record in DB\n subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: \"Done\",\n page: {\n id: pbPage.id,\n title: pbPage.title,\n version: pbPage.version,\n status: pbPage.status\n }\n }\n });\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.COMPLETED\n });\n prevStatusOfSubTask = subTask.status;\n } catch (e) {\n log(\"[IMPORT_PAGES_PROCESS] Error => \", e);\n\n if (subTask && subTask.id) {\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 subTask = await pageBuilder.importExportTask.updateSubTask(taskId, subTask.id, {\n status: ImportExportTaskStatus.FAILED,\n error: {\n name: e.name,\n message: e.message,\n stack: e.stack,\n code: \"IMPORT_FAILED\"\n }\n });\n\n // Update stats in main task\n await pageBuilder.importExportTask.updateStats(taskId, {\n prevStatus: prevStatusOfSubTask,\n nextStatus: ImportExportTaskStatus.FAILED\n });\n prevStatusOfSubTask = subTask.status;\n }\n\n return {\n data: null,\n error: {\n message: e.message\n }\n };\n } finally {\n // Base condition!\n if (noPendingTask) {\n log(`No pending sub-task for task ${taskId}`);\n\n await pageBuilder.importExportTask.updateTask(taskId, {\n status: ImportExportTaskStatus.COMPLETED,\n data: {\n message: `Finish importing pages.`\n }\n });\n } else {\n log(`Invoking PROCESS for task \"${subTaskIndex + 1}\"`);\n // We want to continue with Self invocation no matter if current page error out.\n await invokeHandlerClient<Payload>({\n context,\n name: configuration.handlers.process,\n payload: {\n taskId,\n subTaskIndex: subTaskIndex + 1,\n type,\n identity: context.security.getIdentity()\n },\n description: \"Import pages - process - subtask\"\n });\n }\n }\n return {\n data: \"\",\n error: null\n };\n};\n"],"mappings":"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"}
|
File without changes
|