From 2f9c49acb9208e1656e668b81f221b8e94d608d7 Mon Sep 17 00:00:00 2001 From: ANKUR DWIVEDI Date: Fri, 19 Jul 2024 10:57:25 +0530 Subject: [PATCH 1/5] added checks paramter --- package-lock.json | 2 +- package.json | 2 +- src/interfaces/UploadOptions.ts | 5 +++ src/upload/index.ts | 3 ++ test/upload.js | 54 +++++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c9edc9..464ee1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "imagekit-javascript", - "version": "1.5.5", + "version": "3.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 9d9c653..d101e93 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "imagekit-javascript", - "version": "3.0.1", + "version": "3.0.2", "description": "Javascript SDK for using ImageKit.io in the browser", "main": "dist/imagekit.cjs.js", "module": "dist/imagekit.esm.js", diff --git a/src/interfaces/UploadOptions.ts b/src/interfaces/UploadOptions.ts index ec39a91..51007d9 100644 --- a/src/interfaces/UploadOptions.ts +++ b/src/interfaces/UploadOptions.ts @@ -141,4 +141,9 @@ export interface UploadOptions { * Optional XMLHttpRequest object that you can send for upload API request. You can listen to `progress` and other events on this object for any custom logic. */ xhr?: XMLHttpRequest + + /** + * Server-side checks to run on the asset. + */ + checks?: string } diff --git a/src/upload/index.ts b/src/upload/index.ts index 3af5d4e..ac4de69 100644 --- a/src/upload/index.ts +++ b/src/upload/index.ts @@ -9,6 +9,7 @@ export const upload = ( options: ImageKitOptions, callback?: (err: Error | null, response: UploadResponse | null) => void, ) => { + console.log({uploadOptions}) if (!uploadOptions.file) { respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback); return; @@ -90,6 +91,8 @@ export const upload = ( } else if(key === "transformation" && typeof uploadOptions.transformation === "object" && uploadOptions.transformation !== null) { formData.append(key, JSON.stringify(uploadOptions.transformation)); + } else if (key === 'checks' && uploadOptions.checks) { + formData.append("checks", uploadOptions.checks); } else if(uploadOptions[key] !== undefined) { formData.append(key, String(uploadOptions[key])); } diff --git a/test/upload.js b/test/upload.js index 4715c72..6161551 100644 --- a/test/upload.js +++ b/test/upload.js @@ -1309,4 +1309,58 @@ describe("File upload", function () { expect(callback.calledOnce).to.be.true; sinon.assert.calledWith(callback, errRes, null); }); + + it("With checks option", async function () { + const fileOptions = { + ...securityParameters, + fileName: "test_file_name", + file: "test_file", + responseFields: "tags, customCoordinates, isPrivateFile, metadata", + useUniqueFileName: false, + checks: "'request.folder' : '/'", + }; + var callback = sinon.spy(); + + imagekit.upload(fileOptions, callback); + + expect(server.requests.length).to.be.equal(1); + await sleep(); + successUploadResponse(); + await sleep(); + + var arg = server.requests[0].requestBody; + expect(arg.get("file")).to.be.equal("test_file"); + expect(arg.get("fileName")).to.be.equal("test_file_name"); + expect(arg.get("responseFields")).to.be.equal("tags, customCoordinates, isPrivateFile, metadata"); + expect(arg.get("useUniqueFileName")).to.be.equal("false"); + expect(arg.get("publicKey")).to.be.equal("test_public_key"); + + expect(callback.calledOnce).to.be.true; + sinon.assert.calledWith(callback, null, uploadSuccessResponseObj); + }); + + it("Should return error for unsuccessfull check", async function () { + const fileOptions = { + ...securityParameters, + fileName: "test_file_name", + file: "test_file", + responseFields: "tags, customCoordinates, isPrivateFile, metadata", + useUniqueFileName: false, + checks: "'request.folder' : 'marketing/'", + }; + var callback = sinon.spy(); + + imagekit.upload(fileOptions, callback); + + expect(server.requests.length).to.be.equal(1); + await sleep(); + var errRes = { + help: "For support kindly contact us at support@imagekit.io .", + message: "Your request failed 'checks' validation.", + }; + errorUploadResponse(400, errRes); + await sleep(); + expect(callback.calledOnce).to.be.true; + sinon.assert.calledWith(callback, errRes, null); + }); }); From 76ad4d50f54fdcdb443f5225724eb98eab3a5ddb Mon Sep 17 00:00:00 2001 From: ANKUR DWIVEDI Date: Fri, 19 Jul 2024 10:58:55 +0530 Subject: [PATCH 2/5] added checks paramter --- src/upload/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/upload/index.ts b/src/upload/index.ts index ac4de69..3d4915a 100644 --- a/src/upload/index.ts +++ b/src/upload/index.ts @@ -9,7 +9,6 @@ export const upload = ( options: ImageKitOptions, callback?: (err: Error | null, response: UploadResponse | null) => void, ) => { - console.log({uploadOptions}) if (!uploadOptions.file) { respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback); return; From 04ba602bbc45c31d31ec8c951197c6ff221a0d88 Mon Sep 17 00:00:00 2001 From: ANKUR DWIVEDI Date: Fri, 19 Jul 2024 11:12:25 +0530 Subject: [PATCH 3/5] checks assertion --- test/upload.js | 1 + 1 file changed, 1 insertion(+) diff --git a/test/upload.js b/test/upload.js index 6161551..c711f32 100644 --- a/test/upload.js +++ b/test/upload.js @@ -1334,6 +1334,7 @@ describe("File upload", function () { expect(arg.get("responseFields")).to.be.equal("tags, customCoordinates, isPrivateFile, metadata"); expect(arg.get("useUniqueFileName")).to.be.equal("false"); expect(arg.get("publicKey")).to.be.equal("test_public_key"); + expect(arg.get('checks')).to.be.equal("'request.folder' : '/'"); expect(callback.calledOnce).to.be.true; sinon.assert.calledWith(callback, null, uploadSuccessResponseObj); From 91e6e13cf799dd79aa0e498702ad252b5905a659 Mon Sep 17 00:00:00 2001 From: ANKUR DWIVEDI Date: Fri, 19 Jul 2024 11:29:37 +0530 Subject: [PATCH 4/5] checks assertion --- test/upload.js | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/test/upload.js b/test/upload.js index c711f32..5f27bd4 100644 --- a/test/upload.js +++ b/test/upload.js @@ -1339,29 +1339,4 @@ describe("File upload", function () { expect(callback.calledOnce).to.be.true; sinon.assert.calledWith(callback, null, uploadSuccessResponseObj); }); - - it("Should return error for unsuccessfull check", async function () { - const fileOptions = { - ...securityParameters, - fileName: "test_file_name", - file: "test_file", - responseFields: "tags, customCoordinates, isPrivateFile, metadata", - useUniqueFileName: false, - checks: "'request.folder' : 'marketing/'", - }; - var callback = sinon.spy(); - - imagekit.upload(fileOptions, callback); - - expect(server.requests.length).to.be.equal(1); - await sleep(); - var errRes = { - help: "For support kindly contact us at support@imagekit.io .", - message: "Your request failed 'checks' validation.", - }; - errorUploadResponse(400, errRes); - await sleep(); - expect(callback.calledOnce).to.be.true; - sinon.assert.calledWith(callback, errRes, null); - }); }); From 3baa4ae40b7cbf4fc743e770d049e4842b9e3164 Mon Sep 17 00:00:00 2001 From: ANKUR DWIVEDI Date: Fri, 19 Jul 2024 11:48:46 +0530 Subject: [PATCH 5/5] checks assertion --- src/interfaces/UploadOptions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interfaces/UploadOptions.ts b/src/interfaces/UploadOptions.ts index 51007d9..092f263 100644 --- a/src/interfaces/UploadOptions.ts +++ b/src/interfaces/UploadOptions.ts @@ -143,7 +143,7 @@ export interface UploadOptions { xhr?: XMLHttpRequest /** - * Server-side checks to run on the asset. + * Optional `checks` parameters can be used to run server-side checks before files are uploaded to the Media Library. */ checks?: string }