UNPKG

@jaykanjia/medusa-file-cloudinary

Version:

A Medusa plugin to use Cloudinary as a file storage provider. Seamlessly upload, retrieve, and manage media files in your Medusa store using Cloudinary.

88 lines 7.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@medusajs/framework/utils"); const cloudinary_1 = require("cloudinary"); const stream_1 = require("stream"); const uuid_1 = require("uuid"); class CloudinaryFileProviderService extends utils_1.AbstractFileProviderService { constructor({ logger }, options) { super(); this.logger_ = logger; this.options_ = options; cloudinary_1.v2.config({ cloud_name: options.cloudName, api_key: options.apiKey, api_secret: options.apiSecret, secure: options.secure ?? true, }); } static validateOptions(options) { if (!options.apiKey || !options.apiSecret || !options.cloudName) { throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "API key, API secret or Cloud Name is required in the cloudinary provider's options."); } } async upload(file) { const publicId = this.generatePublicId(file.filename); console.log({ publicId }); // Convert binary-encoded string to Buffer const buffer = Buffer.from(file.content, "binary"); return new Promise((resolve, reject) => { const uploadStream = cloudinary_1.v2.uploader.upload_stream({ resource_type: "auto", public_id: publicId, folder: this.options_?.folderName || undefined, }, (error, result) => { console.log({ result }); if (error) return reject(error); if (!result) return reject(new Error("No result returned from Cloudinary upload.")); resolve({ url: result.secure_url, key: result.public_id.replace(this.options_?.folderName || "", ""), }); }); stream_1.Readable.from(buffer).pipe(uploadStream); }); } async delete(file) { const publicId = (this.options_?.folderName ? `${this.options_?.folderName}/` : "") + file.fileKey.replace(/\.[^/.]+$/, ""); console.log({ publicId }); await cloudinary_1.v2.uploader .destroy(publicId) .then((result) => console.log(result)); return; } async getAsBuffer(file) { const url = cloudinary_1.v2.url(file.fileKey, { secure: true }); const response = await fetch(url); return Buffer.from(await response.arrayBuffer()); } async getDownloadStream(file) { const url = cloudinary_1.v2.url(file.fileKey, { secure: true }); const response = await fetch(url); return stream_1.Readable.fromWeb(response.body); } async getPresignedDownloadUrl(file) { return cloudinary_1.v2.url(file.fileKey, { secure: true }); } // helper function cleanFilename(filename) { // Remove the file extension const filenameWithoutExtension = filename.replace(/\.[^/.]+$/, ""); return filenameWithoutExtension .replace(/[^a-zA-Z0-9.\-_]/g, "_") .replace(/_+/g, "_") .replace(/^_+|_+$/g, "") .toLowerCase(); } generatePublicId(filename) { const cleaned = this.cleanFilename(filename); const unique = (0, uuid_1.v4)(); return `${unique}_${cleaned}`; } } CloudinaryFileProviderService.identifier = "cloudinary"; exports.default = CloudinaryFileProviderService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvZmlsZS1jbG91ZGluYXJ5L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxREFHbUM7QUFPbkMsMkNBQThDO0FBQzlDLG1DQUFrQztBQUNsQywrQkFBb0M7QUFjcEMsTUFBTSw2QkFBOEIsU0FBUSxtQ0FBMkI7SUFLdEUsWUFBWSxFQUFFLE1BQU0sRUFBd0IsRUFBRSxPQUFnQjtRQUM3RCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBRXhCLGVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDakIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzdCLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN2QixVQUFVLEVBQUUsT0FBTyxDQUFDLFNBQVM7WUFDN0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksSUFBSTtTQUM5QixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFnQjtRQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLG1CQUFXLENBQ3BCLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIscUZBQXFGLENBQ3JGLENBQUM7UUFDSCxDQUFDO0lBQ0YsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBMkI7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFF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