From ca9ffcc80bf68d15fd9dbd9e0a7b78dcc7d9312c Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 21 May 2025 22:21:50 +0200 Subject: [PATCH] feat: add presignedUrl method to upload sdk (#12569) --- packages/core/js-sdk/src/admin/upload.ts | 48 ++++++++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/packages/core/js-sdk/src/admin/upload.ts b/packages/core/js-sdk/src/admin/upload.ts index 5df11bf804..44ee7c67f3 100644 --- a/packages/core/js-sdk/src/admin/upload.ts +++ b/packages/core/js-sdk/src/admin/upload.ts @@ -18,16 +18,16 @@ export class Upload { * This method creates a new upload. It sends a request to the * [Upload Files](https://docs.medusajs.com/api/admin#uploads_postuploads) * API route. - * + * * @param body - The details of the files to upload. * @param query - Configure the fields and relations to retrieve in the uploaded files. * @param headers - Headers to pass in the request. * @returns The upload files' details. - * + * * @privateRemarks - * + * * Note: The creation/upload flow be made more advanced, with support for streaming and progress, but for now we keep it simple - * + * * @example * sdk.admin.upload.create( * { @@ -89,12 +89,12 @@ export class Upload { * This method retrieves a file's details by its ID. It sends a request to the * [Get File](https://docs.medusajs.com/api/admin#uploads_getuploadsid) * API route. - * + * * @param id - The ID of the file to retrieve. * @param query - Query parameters to pass in the request. * @param headers - Headers to pass in the request. * @returns The file's details. - * + * * @example * sdk.admin.upload.retrieve("test.txt") * .then(({ file }) => { @@ -115,11 +115,11 @@ export class Upload { * This method deletes a file by its ID from the configured File Module Provider. It sends a request to the * [Delete File](https://docs.medusajs.com/api/admin#uploads_deleteuploadsid) * API route. - * + * * @param id - The ID of the file to delete. * @param headers - Headers to pass in the request. * @returns The deletion's details. - * + * * @example * sdk.admin.upload.delete("test.txt") * .then(({ deleted }) => { @@ -135,4 +135,36 @@ export class Upload { } ) } + + /** + * This method creates a presigned URL for a file upload. It sends a request to the + * `/admin/uploads/presigned-urls` API route. + * + * @param body - The details of the file to upload. + * @param query - Query parameters to pass in the request. + * @param headers - Headers to pass in the request. + * @returns The presigned URL for the file upload. + * + * @example + * sdk.admin.upload.presignedUrl({ + * name: "test.txt", + * size: 1000, + * type: "text/plain", + * })) + */ + async presignedUrl( + body: HttpTypes.AdminUploadPreSignedUrlRequest, + query?: SelectParams, + headers?: ClientHeaders + ) { + return this.client.fetch( + `/admin/uploads/presigned-urls`, + { + method: "POST", + headers, + body, + query, + } + ) + } }