@lodashventure/medusa-collection-thumbnail 1.1.0 → 1.1.3
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/api/admin/collections/[id]/thumbnail/route.d.ts +5 -1
- package/.medusa/server/api/admin/collections/[id]/thumbnail/route.js +150 -40
- package/.medusa/server/services/gcs-direct-upload.js +7 -3
- package/.medusa/server/workflows/upload-collection-thumbnail.js +4 -2
- package/README.md +1 -1
- package/package.json +8 -6
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
type MedusaRequestWithFile<TBody = unknown> = MedusaRequest<TBody> & {
|
|
3
|
+
file?: Express.Multer.File;
|
|
4
|
+
};
|
|
2
5
|
export declare const GET: (req: MedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
3
|
-
export declare const POST: (req:
|
|
6
|
+
export declare const POST: (req: MedusaRequestWithFile, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
4
7
|
export declare const DELETE: (req: MedusaRequest, res: MedusaResponse) => Promise<MedusaResponse>;
|
|
8
|
+
export {};
|
|
@@ -2,52 +2,96 @@
|
|
|
2
2
|
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
|
+
const collection_1 = require("../../../../../modules/collection");
|
|
5
6
|
const upload_collection_thumbnail_1 = require("../../../../../workflows/upload-collection-thumbnail");
|
|
6
7
|
const gcs_direct_upload_1 = require("../../../../../services/gcs-direct-upload");
|
|
8
|
+
const resolveLogger = (req) => {
|
|
9
|
+
try {
|
|
10
|
+
return req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return console;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const normalizeCustomRecord = (record) => {
|
|
17
|
+
if (!record) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
if (Array.isArray(record)) {
|
|
21
|
+
for (const entry of record) {
|
|
22
|
+
const normalized = normalizeCustomRecord(entry);
|
|
23
|
+
if (normalized) {
|
|
24
|
+
return normalized;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
if (typeof record === "object") {
|
|
30
|
+
return record;
|
|
31
|
+
}
|
|
32
|
+
return undefined;
|
|
33
|
+
};
|
|
7
34
|
const GET = async (req, res) => {
|
|
8
35
|
const { id } = req.params;
|
|
9
|
-
const
|
|
36
|
+
const logger = resolveLogger(req);
|
|
10
37
|
try {
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
38
|
+
const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
|
|
39
|
+
const customRecords = await collectionCustomService.listProductCollectionCustoms({
|
|
40
|
+
collection_id: id,
|
|
41
|
+
});
|
|
42
|
+
const customData = normalizeCustomRecord(customRecords);
|
|
43
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
14
44
|
return res.json({
|
|
15
|
-
thumbnail: customData?.thumbnail
|
|
45
|
+
thumbnail: customData?.thumbnail ?? null,
|
|
16
46
|
});
|
|
17
47
|
}
|
|
18
48
|
catch (error) {
|
|
19
|
-
|
|
49
|
+
const err = error;
|
|
50
|
+
logger.error("Error fetching collection thumbnail:", err);
|
|
51
|
+
if (err?.name === "AwilixResolutionError") {
|
|
52
|
+
return res.status(500).json({
|
|
53
|
+
error: "Collection thumbnail module is not registered",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
20
56
|
return res.status(500).json({ error: "Failed to fetch thumbnail" });
|
|
21
57
|
}
|
|
22
58
|
};
|
|
23
59
|
exports.GET = GET;
|
|
24
60
|
const POST = async (req, res) => {
|
|
25
61
|
const { id } = req.params;
|
|
26
|
-
const
|
|
27
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
62
|
+
const logger = resolveLogger(req);
|
|
28
63
|
try {
|
|
64
|
+
const productModuleService = req.scope.resolve(utils_1.Modules.PRODUCT);
|
|
29
65
|
const collection = await productModuleService.retrieveProductCollection(id);
|
|
30
66
|
if (!collection) {
|
|
31
67
|
return res.status(404).json({ error: "Collection not found" });
|
|
32
68
|
}
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
|
|
69
|
+
const payload = prepareFilePayload(req);
|
|
70
|
+
if (!isFilePayloadSuccess(payload)) {
|
|
71
|
+
const failurePayload = payload;
|
|
72
|
+
return res
|
|
73
|
+
.status(failurePayload.status)
|
|
74
|
+
.json({ error: failurePayload.error });
|
|
36
75
|
}
|
|
37
|
-
const
|
|
76
|
+
const { filename, mimeType, base64 } = payload.data;
|
|
77
|
+
const { result: workflowResult } = await (0, upload_collection_thumbnail_1.uploadCollectionThumbnailWorkflow)(req.scope).run({
|
|
38
78
|
input: {
|
|
39
79
|
collectionId: id,
|
|
40
80
|
fileData: {
|
|
41
|
-
filename
|
|
42
|
-
mimeType
|
|
43
|
-
content:
|
|
81
|
+
filename,
|
|
82
|
+
mimeType,
|
|
83
|
+
content: base64,
|
|
44
84
|
},
|
|
45
85
|
},
|
|
46
86
|
});
|
|
87
|
+
if (!workflowResult?.thumbnailUrl) {
|
|
88
|
+
throw new Error("Thumbnail URL missing from workflow result");
|
|
89
|
+
}
|
|
90
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
47
91
|
return res.json({
|
|
48
92
|
collection: {
|
|
49
93
|
id,
|
|
50
|
-
thumbnail:
|
|
94
|
+
thumbnail: workflowResult.thumbnailUrl,
|
|
51
95
|
},
|
|
52
96
|
});
|
|
53
97
|
}
|
|
@@ -59,43 +103,109 @@ const POST = async (req, res) => {
|
|
|
59
103
|
exports.POST = POST;
|
|
60
104
|
const DELETE = async (req, res) => {
|
|
61
105
|
const { id } = req.params;
|
|
62
|
-
const collectionCustomService = req.scope.resolve("collectionCustom");
|
|
63
|
-
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
64
106
|
const gcsUploadService = new gcs_direct_upload_1.GcsDirectUploadService();
|
|
107
|
+
const logger = resolveLogger(req);
|
|
65
108
|
try {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
109
|
+
const collectionCustomService = req.scope.resolve(collection_1.COLLECTION_MODULE);
|
|
110
|
+
const customRecords = await collectionCustomService.listProductCollectionCustoms({
|
|
111
|
+
collection_id: id,
|
|
112
|
+
});
|
|
113
|
+
const existingCustom = normalizeCustomRecord(customRecords);
|
|
114
|
+
if (!existingCustom?.thumbnail) {
|
|
115
|
+
return res
|
|
116
|
+
.status(404)
|
|
117
|
+
.json({ error: "No thumbnail found for this collection" });
|
|
71
118
|
}
|
|
72
119
|
// Delete the file from GCS
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
120
|
+
try {
|
|
121
|
+
const url = existingCustom.thumbnail;
|
|
122
|
+
const isGcsUrl = url.includes("storage.googleapis.com") ||
|
|
123
|
+
url.includes("storage.cloud.google.com");
|
|
124
|
+
if (isGcsUrl) {
|
|
125
|
+
const parts = url.split("/");
|
|
126
|
+
const bucketIndex = parts.indexOf("sangaroon");
|
|
127
|
+
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
128
|
+
const filename = parts.slice(bucketIndex + 1).join("/");
|
|
129
|
+
await gcsUploadService.deleteFile(filename);
|
|
83
130
|
}
|
|
84
131
|
}
|
|
85
|
-
catch (deleteError) {
|
|
86
|
-
logger.error("Error deleting file from GCS:", deleteError);
|
|
87
|
-
// Continue even if file deletion fails
|
|
88
|
-
}
|
|
89
132
|
}
|
|
90
|
-
|
|
133
|
+
catch (deleteError) {
|
|
134
|
+
logger.error("Error deleting file from GCS:", deleteError);
|
|
135
|
+
// Continue even if file deletion fails
|
|
136
|
+
}
|
|
137
|
+
await collectionCustomService.updateProductCollectionCustoms([
|
|
138
|
+
{ id: existingCustom.id, thumbnail: null },
|
|
139
|
+
]);
|
|
140
|
+
res.setHeader("Content-Type", "application/json; charset=utf-8");
|
|
91
141
|
return res.json({
|
|
92
142
|
message: "Thumbnail deleted successfully",
|
|
93
143
|
});
|
|
94
144
|
}
|
|
95
145
|
catch (error) {
|
|
96
|
-
|
|
146
|
+
const err = error;
|
|
147
|
+
logger.error("Error deleting collection thumbnail:", err);
|
|
148
|
+
if (err?.name === "AwilixResolutionError") {
|
|
149
|
+
return res.status(500).json({
|
|
150
|
+
error: "Collection thumbnail module is not registered",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
97
153
|
return res.status(500).json({ error: "Failed to delete thumbnail" });
|
|
98
154
|
}
|
|
99
155
|
};
|
|
100
156
|
exports.DELETE = DELETE;
|
|
101
|
-
|
|
157
|
+
const isFilePayloadSuccess = (payload) => payload.success === true;
|
|
158
|
+
const prepareFilePayload = (req) => {
|
|
159
|
+
if (req.file) {
|
|
160
|
+
return {
|
|
161
|
+
success: true,
|
|
162
|
+
data: {
|
|
163
|
+
filename: req.file.originalname,
|
|
164
|
+
mimeType: req.file.mimetype,
|
|
165
|
+
base64: req.file.buffer.toString("base64"),
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const body = req.body;
|
|
170
|
+
if (!body || typeof body !== "object") {
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
status: 400,
|
|
174
|
+
error: "Invalid payload",
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
const { filename, mimeType, content } = body;
|
|
178
|
+
if (!filename || !mimeType || !content) {
|
|
179
|
+
return {
|
|
180
|
+
success: false,
|
|
181
|
+
status: 400,
|
|
182
|
+
error: "Missing file data",
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const buffer = Buffer.from(content, "base64");
|
|
187
|
+
if (!buffer.length) {
|
|
188
|
+
return {
|
|
189
|
+
success: false,
|
|
190
|
+
status: 400,
|
|
191
|
+
error: "Invalid file content",
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
success: true,
|
|
196
|
+
data: {
|
|
197
|
+
filename,
|
|
198
|
+
mimeType,
|
|
199
|
+
base64: content,
|
|
200
|
+
},
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return {
|
|
205
|
+
success: false,
|
|
206
|
+
status: 400,
|
|
207
|
+
error: "Failed to decode file",
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2NvbGxlY3Rpb25zL1tpZF0vdGh1bWJuYWlsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUcvRSxrRUFBc0U7QUFDdEUsc0dBQXlHO0FBQ3pHLGlGQUFtRjtBQVVuRixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQWtCLEVBQWMsRUFBRTtJQUN2RCxJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxxQkFBcUIsR0FBRyxDQUM1QixNQUFlLEVBQ3lDLEVBQUU7SUFDMUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7WUFDM0IsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixPQUFPLFVBQVUsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE9BQU8sTUFBb0QsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyxDQUFDO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUs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
|
|
@@ -15,7 +15,7 @@ class GcsDirectUploadService {
|
|
|
15
15
|
},
|
|
16
16
|
});
|
|
17
17
|
this.bucketName = process.env.BUCKET_NAME || 'sangaroon';
|
|
18
|
-
this.baseUrl = process.env.GCP_STORAGE_BASE_PUBLIC_URL || 'https://storage.
|
|
18
|
+
this.baseUrl = (process.env.GCP_STORAGE_BASE_PUBLIC_URL || 'https://storage.cloud.google.com').replace(/\/+$/, '');
|
|
19
19
|
}
|
|
20
20
|
async uploadFile(filename, buffer, mimeType) {
|
|
21
21
|
try {
|
|
@@ -29,7 +29,11 @@ class GcsDirectUploadService {
|
|
|
29
29
|
resumable: false,
|
|
30
30
|
});
|
|
31
31
|
// Return the public URL
|
|
32
|
-
|
|
32
|
+
const sanitizedFilename = filename.replace(/^\/+/, '');
|
|
33
|
+
const baseWithBucket = this.baseUrl.endsWith(`/${this.bucketName}`)
|
|
34
|
+
? this.baseUrl
|
|
35
|
+
: `${this.baseUrl}/${this.bucketName}`;
|
|
36
|
+
return `${baseWithBucket}/${sanitizedFilename}`;
|
|
33
37
|
}
|
|
34
38
|
catch (error) {
|
|
35
39
|
console.error('Error uploading to GCS:', error);
|
|
@@ -52,4 +56,4 @@ class GcsDirectUploadService {
|
|
|
52
56
|
}
|
|
53
57
|
}
|
|
54
58
|
exports.GcsDirectUploadService = GcsDirectUploadService;
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2NzLWRpcmVjdC11cGxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvZ2NzLWRpcmVjdC11cGxvYWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBRWhELE1BQWEsc0JBQXNCO0lBQ3pCLE9BQU8sQ0FBVTtJQUNqQixVQUFVLENBQVM7SUFDbkIsT0FBTyxDQUFTO0lBRXhCO1FBQ0Usa0RBQWtEO1FBQ2xELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxpQkFBTyxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFhO2dCQUN2QyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDNUQ7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQztRQUN6RCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxrQ0FBa0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDakUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDdEIsUUFBUSxFQUFFO29CQUNSLFdBQVcsRUFBRSxRQUFRO2lCQUN0QjtnQkFDRCxNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUM7WUFFSCx3QkFBd0I7WUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2dCQUNkLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sR0FBRyxjQUFjLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNsRCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQWdCO1FBQy9CLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRW5DLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsK0JBQStCO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6REQsd0RBeURDIn0=
|
|
@@ -22,7 +22,9 @@ const uploadThumbnailStep = (0, workflows_sdk_1.createStep)("upload-thumbnail-st
|
|
|
22
22
|
try {
|
|
23
23
|
// Extract filename from the URL
|
|
24
24
|
const oldUrl = existingCustom.thumbnail;
|
|
25
|
-
|
|
25
|
+
const isGcsUrl = oldUrl.includes("storage.googleapis.com") ||
|
|
26
|
+
oldUrl.includes("storage.cloud.google.com");
|
|
27
|
+
if (isGcsUrl) {
|
|
26
28
|
const parts = oldUrl.split('/');
|
|
27
29
|
const bucketIndex = parts.indexOf('sangaroon');
|
|
28
30
|
if (bucketIndex !== -1 && bucketIndex < parts.length - 1) {
|
|
@@ -54,4 +56,4 @@ exports.uploadCollectionThumbnailWorkflow = (0, workflows_sdk_1.createWorkflow)(
|
|
|
54
56
|
const result = uploadThumbnailStep(input);
|
|
55
57
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
56
58
|
});
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbGxlY3Rpb24tdGh1bWJuYWlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dvcmtmbG93cy91cGxvYWQtY29sbGVjdGlvbi10aHVtYm5haWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTTJDO0FBQzNDLHFFQUF1RTtBQVd2RSxNQUFNLG1CQUFtQixHQUFHLElBQUEsMEJBQVUsRUFDcEMsdUJBQXVCLEVBQ3ZCLEtBQUssRUFBRSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQXdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3hFLE1BQU0sdUJBQXVCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBUSxDQUFDO0lBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSwwQ0FBc0IsRUFBRSxDQUFDO0lBRXRELCtEQUErRDtJQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0IsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDO0lBQ3hELE1BQU0sUUFBUSxHQUFHLHlCQUF5QixZQUFZLElBQUksU0FBUyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTdFLDJCQUEyQjtJQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFdkQsNkNBQTZDO0lBQzdDLE1BQU0sU0FBUyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXpGLE1BQU0sY0FBYyxHQUFHLE1BQU0sdUJBQXVCO1NBQ2pELDRCQUE0QixDQUFDLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxDQUFDO1NBQzdELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFL0Isb0NBQW9DO0lBQ3BDLElBQUksY0FBYyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILGdDQUFnQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ3hDLE1BQU0sUUFBUSxHQUNaLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM5QyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUNiLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQy9DLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6RCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNELE1BQU0sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN4RCxrQ0FBa0M7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sdUJBQXVCLENBQUMsOEJBQThCLENBQzFELENBQUMsRUFBRSxFQUFFLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDbEQsQ0FBQztJQUNKLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSx1QkFBdUIsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUM1RCxhQUFhLEVBQUUsWUFBWTtnQkFDM0IsU0FBUyxFQUFFLFNBQVM7YUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxJQUFJLDRCQUFZLENBQUM7UUFDdEIsWUFBWTtRQUNaLFlBQVksRUFBRSxTQUFTO0tBQ3hCLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSxpQ0FBaUMsR0FBRyxJQUFBLDhCQUFjLEVBQzdELDZCQUE2QixFQUM3QixDQUFDLEtBQXlDLEVBQUUsRUFBRTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
|
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ modules: [
|
|
|
46
46
|
CLIENT_EMAIL=your-gcs-client-email
|
|
47
47
|
PRIVATE_KEY=your-gcs-private-key
|
|
48
48
|
BUCKET_NAME=your-bucket-name
|
|
49
|
-
GCP_STORAGE_BASE_PUBLIC_URL=https://storage.
|
|
49
|
+
GCP_STORAGE_BASE_PUBLIC_URL=https://storage.cloud.google.com
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
## API Routes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-collection-thumbnail",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "Collection thumbnail management plugin for Medusa v2",
|
|
5
5
|
"author": "Lodashventure",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,11 +16,11 @@
|
|
|
16
16
|
],
|
|
17
17
|
"exports": {
|
|
18
18
|
"./package.json": "./package.json",
|
|
19
|
-
"./workflows": "./.medusa/server/workflows/index.js",
|
|
20
|
-
"./.medusa/server/src/modules/*": "./.medusa/server/modules/*/index.js",
|
|
21
|
-
"./modules/*": "./.medusa/server/modules/*/index.js",
|
|
19
|
+
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
20
|
+
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
21
|
+
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
22
22
|
"./admin": "./.medusa/server/src/admin/index.mjs",
|
|
23
|
-
"./*": "./.medusa/server/*.js"
|
|
23
|
+
"./*": "./.medusa/server/src/*.js"
|
|
24
24
|
},
|
|
25
25
|
"repository": {
|
|
26
26
|
"type": "git",
|
|
@@ -36,7 +36,8 @@
|
|
|
36
36
|
"@medusajs/admin-sdk": "2.11.2",
|
|
37
37
|
"@medusajs/framework": "2.11.2",
|
|
38
38
|
"@medusajs/icons": "2.11.2",
|
|
39
|
-
"@medusajs/ui": "*"
|
|
39
|
+
"@medusajs/ui": "*",
|
|
40
|
+
"yalc": "1.0.0-pre.53"
|
|
40
41
|
},
|
|
41
42
|
"peerDependencies": {
|
|
42
43
|
"@medusajs/admin-sdk": "2.11.2",
|
|
@@ -52,6 +53,7 @@
|
|
|
52
53
|
"@medusajs/cli": "2.11.2",
|
|
53
54
|
"@medusajs/medusa": "2.11.2",
|
|
54
55
|
"@medusajs/types": "2.11.2",
|
|
56
|
+
"@swc/core": "^1.5.7",
|
|
55
57
|
"@types/multer": "^2.0.0",
|
|
56
58
|
"@types/node": "^20.19.23",
|
|
57
59
|
"@types/react": "^18.3.2",
|