@lodashventure/medusa-hero 1.1.5 → 1.1.7
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.
- package/.medusa/server/src/api/admin/categories/[id]/hero/route.js +22 -17
- package/.medusa/server/src/api/admin/categories/[id]/thumbnail/route.js +25 -18
- package/.medusa/server/src/workflows/upload-category-image.js +46 -38
- package/package.json +19 -19
- package/.medusa/server/src/services/gcs-direct-upload.js +0 -57
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DELETE = exports.POST = exports.GET = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const upload_category_image_1 = require("../../../../../workflows/upload-category-image");
|
|
6
|
-
const
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
7
|
// GET - Get category hero image
|
|
8
8
|
const GET = async (req, res) => {
|
|
9
9
|
const { id } = req.params;
|
|
@@ -69,10 +69,11 @@ const POST = async (req, res) => {
|
|
|
69
69
|
},
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
|
+
const updatedCategory = result.result?.category;
|
|
72
73
|
return res.json({
|
|
73
74
|
category: {
|
|
74
75
|
id,
|
|
75
|
-
hero:
|
|
76
|
+
hero: updatedCategory?.metadata?.hero ?? null,
|
|
76
77
|
},
|
|
77
78
|
});
|
|
78
79
|
}
|
|
@@ -87,7 +88,7 @@ const DELETE = async (req, res) => {
|
|
|
87
88
|
const { id } = req.params;
|
|
88
89
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
89
90
|
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
90
|
-
const
|
|
91
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
91
92
|
try {
|
|
92
93
|
const { data: categories } = await query.graph({
|
|
93
94
|
entity: "product_category",
|
|
@@ -98,26 +99,30 @@ const DELETE = async (req, res) => {
|
|
|
98
99
|
return res.status(404).json({ error: "Category not found" });
|
|
99
100
|
}
|
|
100
101
|
const heroUrl = categories[0].metadata?.hero;
|
|
101
|
-
|
|
102
|
+
const heroFileId = categories[0].metadata?.hero_file_id ||
|
|
103
|
+
categories[0].metadata?.heroFileId;
|
|
104
|
+
if (!heroUrl && !heroFileId) {
|
|
102
105
|
return res.status(404).json({ error: "No hero image found for this category" });
|
|
103
106
|
}
|
|
104
|
-
|
|
105
|
-
const isGcsUrl = heroUrl.includes("storage.googleapis.com") ||
|
|
106
|
-
heroUrl.includes("storage.cloud.google.com");
|
|
107
|
-
if (isGcsUrl) {
|
|
107
|
+
if (heroFileId) {
|
|
108
108
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
109
|
+
await (0, core_flows_1.deleteFilesWorkflow)(req.scope).run({
|
|
110
|
+
input: {
|
|
111
|
+
ids: [heroFileId],
|
|
112
|
+
},
|
|
113
|
+
});
|
|
115
114
|
}
|
|
116
115
|
catch (deleteError) {
|
|
117
|
-
logger.error("Error deleting file from
|
|
118
|
-
// Continue even if file deletion fails
|
|
116
|
+
logger.error("Error deleting hero file from storage:", deleteError);
|
|
119
117
|
}
|
|
120
118
|
}
|
|
119
|
+
const updatedMetadata = { ...(categories[0].metadata || {}) };
|
|
120
|
+
delete updatedMetadata.hero;
|
|
121
|
+
delete updatedMetadata.hero_file_id;
|
|
122
|
+
delete updatedMetadata.heroFileId;
|
|
123
|
+
await productModuleService.updateProductCategories(id, {
|
|
124
|
+
metadata: updatedMetadata,
|
|
125
|
+
});
|
|
121
126
|
return res.json({
|
|
122
127
|
message: "Category hero image deleted successfully",
|
|
123
128
|
});
|
|
@@ -128,4 +133,4 @@ const DELETE = async (req, res) => {
|
|
|
128
133
|
}
|
|
129
134
|
};
|
|
130
135
|
exports.DELETE = DELETE;
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NhdGVnb3JpZXMvW2lkXS9oZXJvL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUMvRSwwRkFBNkY7QUFHN0YsNERBQWtFO0FBRWxFLGdDQUFnQztBQUN6QixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQTBCLEVBQzFCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QyxNQUFNLEVBQUUsa0JBQWtCO1lBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDO1lBQ2xDLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRTtTQUNoQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNkLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFB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
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DELETE = exports.POST = exports.GET = void 0;
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const upload_category_image_1 = require("../../../../../workflows/upload-category-image");
|
|
6
|
-
const
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
7
|
// GET - Get category thumbnail
|
|
8
8
|
const GET = async (req, res) => {
|
|
9
9
|
const { id } = req.params;
|
|
@@ -69,10 +69,11 @@ const POST = async (req, res) => {
|
|
|
69
69
|
},
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
|
+
const updatedCategory = result.result?.category;
|
|
72
73
|
return res.json({
|
|
73
74
|
category: {
|
|
74
75
|
id,
|
|
75
|
-
thumbnail:
|
|
76
|
+
thumbnail: updatedCategory?.metadata?.thumbnail ?? null,
|
|
76
77
|
},
|
|
77
78
|
});
|
|
78
79
|
}
|
|
@@ -87,7 +88,7 @@ const DELETE = async (req, res) => {
|
|
|
87
88
|
const { id } = req.params;
|
|
88
89
|
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
89
90
|
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
90
|
-
const
|
|
91
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
91
92
|
try {
|
|
92
93
|
const { data: categories } = await query.graph({
|
|
93
94
|
entity: "product_category",
|
|
@@ -98,26 +99,32 @@ const DELETE = async (req, res) => {
|
|
|
98
99
|
return res.status(404).json({ error: "Category not found" });
|
|
99
100
|
}
|
|
100
101
|
const thumbnailUrl = categories[0].metadata?.thumbnail;
|
|
101
|
-
|
|
102
|
-
|
|
102
|
+
const thumbnailFileId = categories[0].metadata?.thumbnail_file_id ||
|
|
103
|
+
categories[0].metadata?.thumbnailFileId;
|
|
104
|
+
if (!thumbnailUrl && !thumbnailFileId) {
|
|
105
|
+
return res
|
|
106
|
+
.status(404)
|
|
107
|
+
.json({ error: "No thumbnail found for this category" });
|
|
103
108
|
}
|
|
104
|
-
|
|
105
|
-
const isGcsUrl = thumbnailUrl.includes("storage.googleapis.com") ||
|
|
106
|
-
thumbnailUrl.includes("storage.cloud.google.com");
|
|
107
|
-
if (isGcsUrl) {
|
|
109
|
+
if (thumbnailFileId) {
|
|
108
110
|
try {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
111
|
+
await (0, core_flows_1.deleteFilesWorkflow)(req.scope).run({
|
|
112
|
+
input: {
|
|
113
|
+
ids: [thumbnailFileId],
|
|
114
|
+
},
|
|
115
|
+
});
|
|
115
116
|
}
|
|
116
117
|
catch (deleteError) {
|
|
117
|
-
logger.error("Error deleting file from
|
|
118
|
-
// Continue even if file deletion fails
|
|
118
|
+
logger.error("Error deleting thumbnail file from storage:", deleteError);
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
+
const updatedMetadata = { ...(categories[0].metadata || {}) };
|
|
122
|
+
delete updatedMetadata.thumbnail;
|
|
123
|
+
delete updatedMetadata.thumbnail_file_id;
|
|
124
|
+
delete updatedMetadata.thumbnailFileId;
|
|
125
|
+
await productModuleService.updateProductCategories(id, {
|
|
126
|
+
metadata: updatedMetadata,
|
|
127
|
+
});
|
|
121
128
|
return res.json({
|
|
122
129
|
message: "Category thumbnail deleted successfully",
|
|
123
130
|
});
|
|
@@ -128,4 +135,4 @@ const DELETE = async (req, res) => {
|
|
|
128
135
|
}
|
|
129
136
|
};
|
|
130
137
|
exports.DELETE = DELETE;
|
|
131
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NhdGVnb3JpZXMvW2lkXS90aHVtYm5haWwvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBQy9FLDBGQUE2RjtBQUc3Riw0REFBa0U7QUFFbEUsK0JBQStCO0FBQ3hCLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBMEIsRUFDMUIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUM7WUFDbEMsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQ2QsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsU0FBUyxJQUFJLElBQUk7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLENBQUM7QUFDSCxDQUFDLENBQUM7QUF6QlcsUUFBQSxHQUFHLE9BeUJkO0FBRUYsbUNBQW1DO0FBQzVCLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBMEIsRUFDMUIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzdDLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUMxQixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1FBRXRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxxQkFBcUI7UUFDckIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxzRUFBc0U7YUFDOUUsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELCtCQUErQjtRQUMvQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixLQUFLLEVBQUUsbURBQW1EO2FBQzNELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsbURBQTJCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM5RCxLQUFLLEVBQUU7Z0JBQ0wsVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLFFBQVEsRUFBRTtvQkFDUixRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7b0JBQzNCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDdkIsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztpQkFDeEM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO1FBRWhELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNkLFFBQVEsRUFBRTtnQkFDUixFQUFFO2dCQUNGLFNBQVMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsSUFBSSxJQUFJO2FBQ3hEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQWMsQ0FBQyxDQUFDO1FBQ3BFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7QUFDSCxDQUFDLENBQUM7QUFoRVcsUUFBQSxJQUFJLFFBZ0VmO0FBRUYscUNBQXFDO0FBQzlCLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsR0FBMEIsRUFDMUIsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25FLE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQzVDLGVBQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QyxNQUFNLEVBQUUsa0JBQWtCO1lBQzFCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7WUFDMUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7UUFDdkQsTUFBTSxlQUFlLEdBQ25CLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCO1lBQ3pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDO1FBRTFDLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN0QyxPQUFPLEdBQUc7aUJBQ1AsTUFBTSxDQUFDLEdBQUcsQ0FBQztpQkFDWCxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUEsZ0NBQW1CLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFDdkMsS0FBSyxFQUFFO3dCQUNMLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQztxQkFDdkI7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUFDLE9BQU8sV0FBVyxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQ1YsNkNBQTZDLEVBQzdDLFdBQW9CLENBQ3JCLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM5RCxPQUFPLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDakMsT0FBTyxlQUFlLENBQUMsaUJBQWlCLENBQUM7UUFDekMsT0FBTyxlQUFlLENBQUMsZUFBZSxDQUFDO1FBRXZDLE1BQU0sb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsRUFBRSxFQUFFO1lBQ3JELFFBQVEsRUFBRSxlQUFlO1NBQzFCLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNkLE9BQU8sRUFBRSx5Q0FBeUM7U0FDbkQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxFQUFFLEtBQWMsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUscUNBQXFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7QUFDSCxDQUFDLENBQUM7QUFoRVcsUUFBQSxNQUFNLFVBZ0VqQiJ9
|
|
@@ -2,20 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.uploadCategoryImageWorkflow = void 0;
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
-
const gcs_direct_upload_1 = require("../services/gcs-direct-upload");
|
|
6
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
7
|
const uploadCategoryImageStep = (0, workflows_sdk_1.createStep)("upload-category-image-step", async ({ categoryId, imageType, fileData }, { container }) => {
|
|
8
8
|
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
const timestamp = Date.now();
|
|
12
|
-
const ext = fileData.filename.split('.').pop() || 'jpg';
|
|
13
|
-
const filename = `categories/${imageType}-${categoryId}-${timestamp}.${ext}`;
|
|
14
|
-
// Convert base64 to buffer
|
|
15
|
-
const buffer = Buffer.from(fileData.content, "base64");
|
|
16
|
-
// Upload directly to GCS
|
|
17
|
-
const publicUrl = await gcsUploadService.uploadFile(filename, buffer, fileData.mimeType);
|
|
18
|
-
// Retrieve existing category
|
|
9
|
+
const productModuleService = container.resolve(utils_1.Modules.PRODUCT);
|
|
10
|
+
const logger = container.resolve("logger");
|
|
19
11
|
const { data: categories } = await query.graph({
|
|
20
12
|
entity: "product_category",
|
|
21
13
|
fields: ["id", "metadata"],
|
|
@@ -25,42 +17,58 @@ const uploadCategoryImageStep = (0, workflows_sdk_1.createStep)("upload-category
|
|
|
25
17
|
throw new Error(`Category with id ${categoryId} not found`);
|
|
26
18
|
}
|
|
27
19
|
const category = categories[0];
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
const existingMetadata = category.metadata || {};
|
|
21
|
+
// Generate unique filename for storage providers
|
|
22
|
+
const timestamp = Date.now();
|
|
23
|
+
const ext = fileData.filename.split(".").pop() || "jpg";
|
|
24
|
+
const sanitizedName = fileData.filename.replace(/\s+/g, "_");
|
|
25
|
+
const nameWithoutExt = sanitizedName.replace(/\.[^.]+$/, "");
|
|
26
|
+
const filename = `categories/${imageType}-${categoryId}-${timestamp}-${nameWithoutExt}.${ext}`;
|
|
27
|
+
// Convert base64 to buffer expected by Medusa file workflows
|
|
28
|
+
const buffer = Buffer.from(fileData.content, "base64");
|
|
29
|
+
const { result: uploadedFiles } = await (0, core_flows_1.uploadFilesWorkflow)(container).run({
|
|
30
|
+
input: {
|
|
31
|
+
files: [
|
|
32
|
+
{
|
|
33
|
+
filename,
|
|
34
|
+
mimeType: fileData.mimeType,
|
|
35
|
+
content: buffer.toString("binary"),
|
|
36
|
+
access: "public",
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const uploadedFile = uploadedFiles?.[0];
|
|
42
|
+
if (!uploadedFile?.id || !uploadedFile?.url) {
|
|
43
|
+
throw new Error("File upload failed");
|
|
44
|
+
}
|
|
45
|
+
const previousFileId = existingMetadata?.[`${imageType}_file_id`] ||
|
|
46
|
+
existingMetadata?.[`${imageType}FileId`];
|
|
47
|
+
const updatedMetadata = {
|
|
48
|
+
...existingMetadata,
|
|
49
|
+
[imageType]: uploadedFile.url,
|
|
50
|
+
[`${imageType}_file_id`]: uploadedFile.id,
|
|
51
|
+
};
|
|
52
|
+
const updatedCategory = await productModuleService.updateProductCategories(categoryId, { metadata: updatedMetadata });
|
|
53
|
+
if (previousFileId) {
|
|
31
54
|
try {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const parts = oldImageUrl.split('/');
|
|
36
|
-
const bucketIndex = parts.indexOf('sangaroon');
|
|
37
|
-
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
38
|
-
const oldFilename = parts.slice(bucketIndex + 1).join('/');
|
|
39
|
-
await gcsUploadService.deleteFile(oldFilename);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
55
|
+
await (0, core_flows_1.deleteFilesWorkflow)(container).run({
|
|
56
|
+
input: { ids: [previousFileId] },
|
|
57
|
+
});
|
|
42
58
|
}
|
|
43
59
|
catch (error) {
|
|
44
|
-
|
|
45
|
-
// Continue even if deletion fails
|
|
60
|
+
logger?.warn?.(`Failed to delete previous ${imageType} file ${previousFileId}: ${error}`);
|
|
46
61
|
}
|
|
47
62
|
}
|
|
48
|
-
// Update category metadata with new image URL
|
|
49
|
-
const updatedMetadata = {
|
|
50
|
-
...category.metadata,
|
|
51
|
-
[imageType]: publicUrl,
|
|
52
|
-
};
|
|
53
|
-
// Note: Category metadata update should be done via the category service
|
|
54
|
-
// For now, we'll return the URL and let the route handler update it
|
|
55
63
|
return new workflows_sdk_1.StepResponse({
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
category: updatedCategory,
|
|
65
|
+
uploadedFile,
|
|
66
|
+
}, {
|
|
67
|
+
uploadedFileId: uploadedFile.id,
|
|
60
68
|
});
|
|
61
69
|
});
|
|
62
70
|
exports.uploadCategoryImageWorkflow = (0, workflows_sdk_1.createWorkflow)("upload-category-image", (input) => {
|
|
63
71
|
const result = uploadCategoryImageStep(input);
|
|
64
72
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
65
73
|
});
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNhdGVnb3J5LWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGxvYWQtY2F0ZWdvcnktaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTJDO0FBQzNDLHFEQUErRTtBQUMvRSw0REFBdUY7QUFhdkYsTUFBTSx1QkFBdUIsR0FBRyxJQUFBLDBCQUFVLEVBQ3hDLDRCQUE0QixFQUM1QixLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBNEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDckYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQXdCLGVBQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxrQkFBa0I7UUFDMUIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUMxQixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFO0tBQzVCLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixVQUFVLFlBQVksQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-hero",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.7",
|
|
4
4
|
"description": "Plugin for managing category thumbnail and hero images in Medusa",
|
|
5
5
|
"author": "StandUpCode",
|
|
6
6
|
"license": "MIT",
|
|
@@ -31,21 +31,21 @@
|
|
|
31
31
|
"prepublishOnly": "medusa plugin:build"
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
|
-
"@medusajs/admin-sdk": "2.11.
|
|
35
|
-
"@medusajs/admin-shared": "2.11.
|
|
36
|
-
"@medusajs/cli": "2.11.
|
|
37
|
-
"@medusajs/framework": "2.11.
|
|
38
|
-
"@medusajs/icons": "^2.11.
|
|
39
|
-
"@medusajs/medusa": "2.11.
|
|
40
|
-
"@medusajs/ui": "4.0.
|
|
41
|
-
"@swc/core": "1.
|
|
42
|
-
"@types/multer": "^
|
|
43
|
-
"@types/node": "^
|
|
44
|
-
"@types/react": "^
|
|
45
|
-
"@types/react-dom": "^
|
|
46
|
-
"react": "^
|
|
47
|
-
"react-dom": "^
|
|
48
|
-
"typescript": "^5.
|
|
34
|
+
"@medusajs/admin-sdk": "2.11.3",
|
|
35
|
+
"@medusajs/admin-shared": "2.11.3",
|
|
36
|
+
"@medusajs/cli": "2.11.3",
|
|
37
|
+
"@medusajs/framework": "2.11.3",
|
|
38
|
+
"@medusajs/icons": "^2.11.3",
|
|
39
|
+
"@medusajs/medusa": "2.11.3",
|
|
40
|
+
"@medusajs/ui": "4.0.27",
|
|
41
|
+
"@swc/core": "1.15.0",
|
|
42
|
+
"@types/multer": "^2.0.0",
|
|
43
|
+
"@types/node": "^24.10.0",
|
|
44
|
+
"@types/react": "^19.2.2",
|
|
45
|
+
"@types/react-dom": "^19.2.2",
|
|
46
|
+
"react": "^19.2.0",
|
|
47
|
+
"react-dom": "^19.2.0",
|
|
48
|
+
"typescript": "^5.9.3"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
51
|
"@medusajs/admin-sdk": "2.11.2",
|
|
@@ -61,12 +61,12 @@
|
|
|
61
61
|
"@dnd-kit/core": "^6.3.1",
|
|
62
62
|
"@dnd-kit/sortable": "^10.0.0",
|
|
63
63
|
"@dnd-kit/utilities": "^3.2.2",
|
|
64
|
-
"@google-cloud/storage": "^7.
|
|
64
|
+
"@google-cloud/storage": "^7.17.3",
|
|
65
65
|
"clsx": "^2.1.1",
|
|
66
|
-
"lucide-react": "^0.
|
|
66
|
+
"lucide-react": "^0.553.0",
|
|
67
67
|
"multer": "^2.0.2",
|
|
68
68
|
"react-dropzone": "^14.3.8",
|
|
69
69
|
"ts-node": "^10.9.2",
|
|
70
|
-
"yalc": "
|
|
70
|
+
"yalc": "1.0.0-pre.53"
|
|
71
71
|
}
|
|
72
72
|
}
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GcsDirectUploadService = void 0;
|
|
4
|
-
const storage_1 = require("@google-cloud/storage");
|
|
5
|
-
class GcsDirectUploadService {
|
|
6
|
-
constructor() {
|
|
7
|
-
// Initialize GCS client with credentials from env
|
|
8
|
-
this.storage = new storage_1.Storage({
|
|
9
|
-
credentials: {
|
|
10
|
-
client_email: process.env.CLIENT_EMAIL,
|
|
11
|
-
private_key: process.env.PRIVATE_KEY.replace(/\\n/g, '\n'),
|
|
12
|
-
},
|
|
13
|
-
});
|
|
14
|
-
this.bucketName = process.env.BUCKET_NAME || 'sangaroon';
|
|
15
|
-
this.baseUrl = (process.env.GCP_STORAGE_BASE_PUBLIC_URL || 'https://storage.cloud.google.com').replace(/\/+$/, '');
|
|
16
|
-
}
|
|
17
|
-
async uploadFile(filename, buffer, mimeType) {
|
|
18
|
-
try {
|
|
19
|
-
const bucket = this.storage.bucket(this.bucketName);
|
|
20
|
-
const file = bucket.file(filename);
|
|
21
|
-
await file.save(buffer, {
|
|
22
|
-
metadata: {
|
|
23
|
-
contentType: mimeType,
|
|
24
|
-
},
|
|
25
|
-
public: true,
|
|
26
|
-
resumable: false,
|
|
27
|
-
});
|
|
28
|
-
// Return the public URL
|
|
29
|
-
const sanitizedFilename = filename.replace(/^\/+/, '');
|
|
30
|
-
const baseWithBucket = this.baseUrl.endsWith(`/${this.bucketName}`)
|
|
31
|
-
? this.baseUrl
|
|
32
|
-
: `${this.baseUrl}/${this.bucketName}`;
|
|
33
|
-
return `${baseWithBucket}/${sanitizedFilename}`;
|
|
34
|
-
}
|
|
35
|
-
catch (error) {
|
|
36
|
-
console.error('Error uploading to GCS:', error);
|
|
37
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
38
|
-
throw new Error(`Failed to upload file to GCS: ${message}`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
async deleteFile(filename) {
|
|
42
|
-
try {
|
|
43
|
-
const bucket = this.storage.bucket(this.bucketName);
|
|
44
|
-
const file = bucket.file(filename);
|
|
45
|
-
const [exists] = await file.exists();
|
|
46
|
-
if (exists) {
|
|
47
|
-
await file.delete();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch (error) {
|
|
51
|
-
console.error('Error deleting from GCS:', error);
|
|
52
|
-
// Don't throw on delete errors
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
exports.GcsDirectUploadService = GcsDirectUploadService;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NzLWRpcmVjdC11cGxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvZ2NzLWRpcmVjdC11cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBRWhELE1BQWEsc0JBQXNCO0lBS2pDO1FBQ0Usa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFhO2dCQUN2QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDNUQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDakUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsUUFBUSxFQUFFO29CQUNSLFdBQVcsRUFBRSxRQUFRO2lCQUN0QjtnQkFDRCxNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUM7WUFFSCx3QkFBd0I7WUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUNkLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sR0FBRyxjQUFjLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUExREQsd0RBMERDIn0=
|