diff --git a/packages/medusa-file-s3/src/services/s3.js b/packages/medusa-file-s3/src/services/s3.js index b9cffa438c..b2007c3078 100644 --- a/packages/medusa-file-s3/src/services/s3.js +++ b/packages/medusa-file-s3/src/services/s3.js @@ -1,8 +1,10 @@ import fs from "fs" import aws from "aws-sdk" -import { AbstractFileService } from '@medusajs/medusa' +import { AbstractFileService } from "@medusajs/medusa" +import stream from "stream" class S3Service extends AbstractFileService { + // eslint-disable-next-line no-empty-pattern constructor({}, options) { super({}, options) @@ -15,16 +17,10 @@ class S3Service extends AbstractFileService { } upload(file) { - aws.config.setPromisesDependency(null) - aws.config.update({ - accessKeyId: this.accessKeyId_, - secretAccessKey: this.secretAccessKey_, - region: this.region_, - endpoint: this.endpoint_, - }, true) + this.updateAwsConfig() const s3 = new aws.S3() - var params = { + const params = { ACL: "public-read", Bucket: this.bucket_, Body: fs.createReadStream(file.path), @@ -38,22 +34,16 @@ class S3Service extends AbstractFileService { return } - resolve({ url: data.Location }) + resolve({ url: data.Location, key: data.Key }) }) }) } async delete(file) { - aws.config.setPromisesDependency(null) - aws.config.update({ - accessKeyId: this.accessKeyId_, - secretAccessKey: this.secretAccessKey_, - region: this.region_, - endpoint: this.endpoint_, - }, true) + this.updateAwsConfig() const s3 = new aws.S3() - var params = { + const params = { Bucket: this.bucket_, Key: `${file}`, } @@ -68,17 +58,70 @@ class S3Service extends AbstractFileService { }) }) } - + async getUploadStreamDescriptor(fileData) { - throw new Error("Method not implemented.") + this.updateAwsConfig() + + const pass = new stream.PassThrough() + + const fileKey = `${fileData.name}.${fileData.ext}` + const params = { + ACL: fileData.acl ?? "private", + Bucket: this.bucket_, + Body: pass, + Key: fileKey, + } + + const s3 = new aws.S3() + return { + writeStream: pass, + promise: s3.upload(params).promise(), + url: `${this.s3Url_}/${fileKey}`, + fileKey, + } } async getDownloadStream(fileData) { - throw new Error("Method not implemented.") + this.updateAwsConfig() + + const s3 = new aws.S3() + + const params = { + Bucket: this.bucket_, + Key: `${fileData.fileKey}`, + } + + return s3.getObject(params).createReadStream() } async getPresignedDownloadUrl(fileData) { - throw new Error("Method not implemented.") + this.updateAwsConfig({ + signatureVersion: "v4", + }) + + const s3 = new aws.S3() + + const params = { + Bucket: this.bucket_, + Key: `${fileData.fileKey}`, + Expires: this.downloadUrlDuration, + } + + return await s3.getSignedUrlPromise("getObject", params) + } + + updateAwsConfig(additionalConfiguration = {}) { + aws.config.setPromisesDependency(null) + aws.config.update( + { + accessKeyId: this.accessKeyId_, + secretAccessKey: this.secretAccessKey_, + region: this.region_, + endpoint: this.endpoint_, + ...additionalConfiguration, + }, + true + ) } } diff --git a/packages/medusa/src/strategies/batch-jobs/order/export.ts b/packages/medusa/src/strategies/batch-jobs/order/export.ts index 3b41286fea..516f7023b3 100644 --- a/packages/medusa/src/strategies/batch-jobs/order/export.ts +++ b/packages/medusa/src/strategies/batch-jobs/order/export.ts @@ -319,7 +319,10 @@ class OrderExportStrategy extends AbstractBatchJobStrategy { fieldName: "sales_channel", title: ["Sales channel name", "Sales channel description"].join(";"), accessor: (order: Order): string => - [order.sales_channel.name, order.sales_channel.description].join(";"), + [ + order.sales_channel?.name || "", + order.sales_channel?.description || "", + ].join(";"), }) } }