You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

imagekit-javascript

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

imagekit-javascript - npm Package Compare versions

Comparing version

to
2.0.0

247

dist/imagekit.cjs.js
'use strict';
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _classCallCheck(instance, Constructor) {

@@ -38,2 +24,3 @@ if (!(instance instanceof Constructor)) {

}
function _defineProperties(target, props) {

@@ -45,15 +32,13 @@ for (var i = 0; i < props.length; i++) {

if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {

@@ -69,20 +54,41 @@ Object.defineProperty(obj, key, {

}
return obj;
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return (hint === "string" ? String : Number)(input);
return keys;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
var version = "1.6.0-alpha.0";
var version = "2.0.0";

@@ -141,2 +147,14 @@ var errorMessages = {

help: ""
},
MISSING_SIGNATURE: {
message: "Missing signature for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
},
MISSING_TOKEN: {
message: "Missing token for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
},
MISSING_EXPIRE: {
message: "Missing expire for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
}

@@ -180,26 +198,5 @@ };

};
var request = function request(uploadFileXHR, formData, jwtRequestOptions, options, callback) {
if (options.apiVersion === 'v2-alpha') {
getJwt(options.authenticationEndpoint, jwtRequestOptions).then(function (tokenObj) {
formData.append("token", tokenObj.token);
uploadFile(uploadFileXHR, formData, options.apiVersion).then(function (result) {
return respond(false, result, callback);
}, function (ex) {
return respond(true, ex, callback);
});
}, function (ex) {
return respond(true, ex, callback);
});
return;
}
generateSignatureToken(options.authenticationEndpoint).then(function (signaturObj) {
formData.append("signature", signaturObj.signature);
formData.append("expire", String(signaturObj.expire));
formData.append("token", signaturObj.token);
formData.append("publicKey", String(options.publicKey));
uploadFile(uploadFileXHR, formData).then(function (result) {
return respond(false, result, callback);
}, function (ex) {
return respond(true, ex, callback);
});
var request = function request(uploadFileXHR, formData, callback) {
uploadFile(uploadFileXHR, formData).then(function (result) {
return respond(false, result, callback);
}, function (ex) {

@@ -209,76 +206,5 @@ return respond(true, ex, callback);

};
var getJwt = function getJwt(authenticationEndpoint, jwtRequestOptions) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.timeout = 60000;
xhr.open('POST', authenticationEndpoint);
xhr.setRequestHeader("Content-type", "application/json");
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
};
xhr.onload = function () {
if (xhr.status === 200) {
try {
var body = JSON.parse(xhr.responseText);
var obj = {
token: body.token
};
if (!obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send(JSON.stringify(jwtRequestOptions));
});
};
var generateSignatureToken = function generateSignatureToken(authenticationEndpoint) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.timeout = 60000;
var urlObj = new URL(authenticationEndpoint);
urlObj.searchParams.set("t", Math.random().toString());
xhr.open('GET', urlObj.toString());
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
};
xhr.onload = function () {
if (xhr.status === 200) {
try {
var body = JSON.parse(xhr.responseText);
var obj = {
signature: body.signature,
expire: body.expire,
token: body.token
};
if (!obj.signature || !obj.expire || !obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send();
});
};
var uploadFile = function uploadFile(uploadFileXHR, formData) {
var apiVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
return new Promise(function (resolve, reject) {
var uploadUrl = apiVersion === 'v2-alpha' ? 'https://upload.imagekit.io/api/v2-alpha/files/upload' : 'https://upload.imagekit.io/api/v1/files/upload';
uploadFileXHR.open('POST', uploadUrl);
uploadFileXHR.open('POST', 'https://upload.imagekit.io/api/v1/files/upload');
uploadFileXHR.onerror = function (e) {

@@ -311,6 +237,2 @@ return reject(errorMessages.UPLOAD_ENDPOINT_NETWORK_ERROR);

var upload = function upload(xhr, uploadOptions, options, callback) {
if (!uploadOptions) {
respond(true, errorMessages.INVALID_UPLOAD_OPTIONS, callback);
return;
}
if (!uploadOptions.file) {

@@ -324,6 +246,2 @@ respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback);

}
if (!options.authenticationEndpoint) {
respond(true, errorMessages.MISSING_AUTHENTICATION_ENDPOINT, callback);
return;
}
if (!options.publicKey) {

@@ -333,7 +251,14 @@ respond(true, errorMessages.MISSING_PUBLIC_KEY, callback);

}
var reqPayload = {
publicKey: options.publicKey,
expire: 3600,
uploadPayload: {}
};
if (!uploadOptions.token) {
respond(true, errorMessages.MISSING_TOKEN, callback);
return;
}
if (!uploadOptions.signature) {
respond(true, errorMessages.MISSING_SIGNATURE, callback);
return;
}
if (!uploadOptions.expire) {
respond(true, errorMessages.MISSING_EXPIRE, callback);
return;
}
var formData = new FormData();

@@ -347,21 +272,21 @@ var key;

formData.append('tags', uploadOptions.tags.join(","));
reqPayload.uploadPayload[key] = uploadOptions.tags.join(",");
} else if (key === 'signature') {
formData.append("signature", uploadOptions.signature);
} else if (key === 'expire') {
formData.append("expire", String(uploadOptions.expire));
} else if (key === 'token') {
formData.append("token", uploadOptions.token);
} else if (key === "responseFields" && Array.isArray(uploadOptions.responseFields)) {
formData.append('responseFields', uploadOptions.responseFields.join(","));
reqPayload.uploadPayload[key] = uploadOptions.responseFields.join(",");
} else if (key === "extensions" && Array.isArray(uploadOptions.extensions)) {
formData.append('extensions', JSON.stringify(uploadOptions.extensions));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.extensions);
} else if (key === "customMetadata" && _typeof(uploadOptions.customMetadata) === "object" && !Array.isArray(uploadOptions.customMetadata) && uploadOptions.customMetadata !== null) {
formData.append('customMetadata', JSON.stringify(uploadOptions.customMetadata));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.customMetadata);
} else if (uploadOptions[key] !== undefined) {
formData.append(key, String(uploadOptions[key]));
if (key !== 'file') reqPayload.uploadPayload[key] = String(uploadOptions[key]);
}
}
}
request(xhr, formData, reqPayload, _objectSpread2(_objectSpread2({}, options), {}, {
authenticationEndpoint: options.authenticationEndpoint
}), callback);
formData.append("publicKey", options.publicKey);
request(xhr, formData, callback);
};

@@ -618,3 +543,3 @@

var _ref = uploadOptions || {},
userProvidedXHR = _ref.xhr;
userProvidedXHR = _ref.xhr;
delete uploadOptions.xhr;

@@ -621,0 +546,0 @@ var xhr = userProvidedXHR || new XMLHttpRequest();

@@ -1,31 +0,17 @@

function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _typeof(obj) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
}, _typeof(obj);
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}
return _typeof(obj);
}
function _classCallCheck(instance, Constructor) {

@@ -36,2 +22,3 @@ if (!(instance instanceof Constructor)) {

}
function _defineProperties(target, props) {

@@ -43,15 +30,13 @@ for (var i = 0; i < props.length; i++) {

if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
Object.defineProperty(target, descriptor.key, descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
if (staticProps) _defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", {
writable: false
});
return Constructor;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {

@@ -67,20 +52,41 @@ Object.defineProperty(obj, key, {

}
return obj;
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null) return input;
var prim = input[Symbol.toPrimitive];
if (prim !== undefined) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object") return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return (hint === "string" ? String : Number)(input);
return keys;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
var version = "1.6.0-alpha.0";
var version = "2.0.0";

@@ -139,2 +145,14 @@ var errorMessages = {

help: ""
},
MISSING_SIGNATURE: {
message: "Missing signature for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
},
MISSING_TOKEN: {
message: "Missing token for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
},
MISSING_EXPIRE: {
message: "Missing expire for upload. The SDK expects token, sginature and expire for authentication.",
help: ""
}

@@ -178,26 +196,5 @@ };

};
var request = function request(uploadFileXHR, formData, jwtRequestOptions, options, callback) {
if (options.apiVersion === 'v2-alpha') {
getJwt(options.authenticationEndpoint, jwtRequestOptions).then(function (tokenObj) {
formData.append("token", tokenObj.token);
uploadFile(uploadFileXHR, formData, options.apiVersion).then(function (result) {
return respond(false, result, callback);
}, function (ex) {
return respond(true, ex, callback);
});
}, function (ex) {
return respond(true, ex, callback);
});
return;
}
generateSignatureToken(options.authenticationEndpoint).then(function (signaturObj) {
formData.append("signature", signaturObj.signature);
formData.append("expire", String(signaturObj.expire));
formData.append("token", signaturObj.token);
formData.append("publicKey", String(options.publicKey));
uploadFile(uploadFileXHR, formData).then(function (result) {
return respond(false, result, callback);
}, function (ex) {
return respond(true, ex, callback);
});
var request = function request(uploadFileXHR, formData, callback) {
uploadFile(uploadFileXHR, formData).then(function (result) {
return respond(false, result, callback);
}, function (ex) {

@@ -207,76 +204,5 @@ return respond(true, ex, callback);

};
var getJwt = function getJwt(authenticationEndpoint, jwtRequestOptions) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.timeout = 60000;
xhr.open('POST', authenticationEndpoint);
xhr.setRequestHeader("Content-type", "application/json");
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
};
xhr.onload = function () {
if (xhr.status === 200) {
try {
var body = JSON.parse(xhr.responseText);
var obj = {
token: body.token
};
if (!obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send(JSON.stringify(jwtRequestOptions));
});
};
var generateSignatureToken = function generateSignatureToken(authenticationEndpoint) {
return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.timeout = 60000;
var urlObj = new URL(authenticationEndpoint);
urlObj.searchParams.set("t", Math.random().toString());
xhr.open('GET', urlObj.toString());
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
};
xhr.onload = function () {
if (xhr.status === 200) {
try {
var body = JSON.parse(xhr.responseText);
var obj = {
signature: body.signature,
expire: body.expire,
token: body.token
};
if (!obj.signature || !obj.expire || !obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send();
});
};
var uploadFile = function uploadFile(uploadFileXHR, formData) {
var apiVersion = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
return new Promise(function (resolve, reject) {
var uploadUrl = apiVersion === 'v2-alpha' ? 'https://upload.imagekit.io/api/v2-alpha/files/upload' : 'https://upload.imagekit.io/api/v1/files/upload';
uploadFileXHR.open('POST', uploadUrl);
uploadFileXHR.open('POST', 'https://upload.imagekit.io/api/v1/files/upload');
uploadFileXHR.onerror = function (e) {

@@ -309,6 +235,2 @@ return reject(errorMessages.UPLOAD_ENDPOINT_NETWORK_ERROR);

var upload = function upload(xhr, uploadOptions, options, callback) {
if (!uploadOptions) {
respond(true, errorMessages.INVALID_UPLOAD_OPTIONS, callback);
return;
}
if (!uploadOptions.file) {

@@ -322,6 +244,2 @@ respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback);

}
if (!options.authenticationEndpoint) {
respond(true, errorMessages.MISSING_AUTHENTICATION_ENDPOINT, callback);
return;
}
if (!options.publicKey) {

@@ -331,7 +249,14 @@ respond(true, errorMessages.MISSING_PUBLIC_KEY, callback);

}
var reqPayload = {
publicKey: options.publicKey,
expire: 3600,
uploadPayload: {}
};
if (!uploadOptions.token) {
respond(true, errorMessages.MISSING_TOKEN, callback);
return;
}
if (!uploadOptions.signature) {
respond(true, errorMessages.MISSING_SIGNATURE, callback);
return;
}
if (!uploadOptions.expire) {
respond(true, errorMessages.MISSING_EXPIRE, callback);
return;
}
var formData = new FormData();

@@ -345,21 +270,21 @@ var key;

formData.append('tags', uploadOptions.tags.join(","));
reqPayload.uploadPayload[key] = uploadOptions.tags.join(",");
} else if (key === 'signature') {
formData.append("signature", uploadOptions.signature);
} else if (key === 'expire') {
formData.append("expire", String(uploadOptions.expire));
} else if (key === 'token') {
formData.append("token", uploadOptions.token);
} else if (key === "responseFields" && Array.isArray(uploadOptions.responseFields)) {
formData.append('responseFields', uploadOptions.responseFields.join(","));
reqPayload.uploadPayload[key] = uploadOptions.responseFields.join(",");
} else if (key === "extensions" && Array.isArray(uploadOptions.extensions)) {
formData.append('extensions', JSON.stringify(uploadOptions.extensions));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.extensions);
} else if (key === "customMetadata" && _typeof(uploadOptions.customMetadata) === "object" && !Array.isArray(uploadOptions.customMetadata) && uploadOptions.customMetadata !== null) {
formData.append('customMetadata', JSON.stringify(uploadOptions.customMetadata));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.customMetadata);
} else if (uploadOptions[key] !== undefined) {
formData.append(key, String(uploadOptions[key]));
if (key !== 'file') reqPayload.uploadPayload[key] = String(uploadOptions[key]);
}
}
}
request(xhr, formData, reqPayload, _objectSpread2(_objectSpread2({}, options), {}, {
authenticationEndpoint: options.authenticationEndpoint
}), callback);
formData.append("publicKey", options.publicKey);
request(xhr, formData, callback);
};

@@ -616,3 +541,3 @@

var _ref = uploadOptions || {},
userProvidedXHR = _ref.xhr;
userProvidedXHR = _ref.xhr;
delete uploadOptions.xhr;

@@ -626,2 +551,2 @@ var xhr = userProvidedXHR || new XMLHttpRequest();

export { ImageKit as default };
export default ImageKit;

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ImageKit=t()}(this,(function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?e(Object(r),!0).forEach((function(e){o(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):e(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function o(e,t,n){return(t=a(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}var i={message:"Missing urlEndpoint during SDK initialization",help:""},s={message:"Invalid transformationPosition parameter",help:""},u={message:"Missing file parameter for upload",help:""},p={message:"Missing fileName parameter for upload",help:""},l={message:"Missing authentication endpoint for upload",help:""},f={message:"Missing public key for upload",help:""},c={message:"The authenticationEndpoint you provided timed out in 60 seconds",help:""},d={message:"Request to authenticationEndpoint failed due to network error",help:""},y={message:"Invalid response from authenticationEndpoint. The SDK expects a JSON response with three fields i.e. signature, token and expire.",help:""},h={message:"Request to ImageKit upload endpoint failed due to network error",help:""},g={message:"Invalid uploadOptions parameter",help:""};function m(e,t,n){"function"==typeof n&&(e?n(t,null):n(null,t))}function v(e){var t={},n=e.getAllResponseHeaders();return Object.keys(n).length&&n.trim().split(/[\r\n]+/).map((function(e){return e.split(/: /)})).forEach((function(e){t[e[0].trim()]=e[1].trim()})),t}var b=function(e,n){var r=t({},e),o={statusCode:n.status,headers:v(n)};return Object.defineProperty(r,"$ResponseMetadata",{value:o,enumerable:!1,writable:!1}),r},w=function(e,t){return new Promise((function(n,r){var o=new XMLHttpRequest;o.timeout=6e4,o.open("POST",e),o.setRequestHeader("Content-type","application/json"),o.ontimeout=function(e){return r(c)},o.onerror=function(){return r(d)},o.onload=function(){if(200!==o.status)return r(y);try{var e={token:JSON.parse(o.responseText).token};return e.token?n(e):r(y)}catch(e){return r(y)}},o.send(JSON.stringify(t))}))},P=function(e){return new Promise((function(t,n){var r=new XMLHttpRequest;r.timeout=6e4;var o=new URL(e);o.searchParams.set("t",Math.random().toString()),r.open("GET",o.toString()),r.ontimeout=function(e){return n(c)},r.onerror=function(){return n(d)},r.onload=function(){if(200!==r.status)return n(y);try{var e=JSON.parse(r.responseText),o={signature:e.signature,expire:e.expire,token:e.token};return o.signature&&o.expire&&o.token?t(o):n(y)}catch(e){return n(y)}},r.send()}))},x=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return new Promise((function(r,o){var a="v2-alpha"===n?"https://upload.imagekit.io/api/v2-alpha/files/upload":"https://upload.imagekit.io/api/v1/files/upload";e.open("POST",a),e.onerror=function(e){return o(h)},e.onload=function(){if(200===e.status)try{var t=JSON.parse(e.responseText),n=b(t,e);return r(n)}catch(e){return o(e)}else try{t=JSON.parse(e.responseText);var a=b(t,e);return o(a)}catch(e){return o(e)}},e.send(t)}))},O=function(e,r,o,a){if(r)if(r.file)if(r.fileName)if(o.authenticationEndpoint)if(o.publicKey){var i,s={publicKey:o.publicKey,expire:3600,uploadPayload:{}},c=new FormData;for(i in r)i&&("file"===i&&"string"!=typeof r.file?c.append("file",r.file,String(r.fileName)):"tags"===i&&Array.isArray(r.tags)?(c.append("tags",r.tags.join(",")),s.uploadPayload[i]=r.tags.join(",")):"responseFields"===i&&Array.isArray(r.responseFields)?(c.append("responseFields",r.responseFields.join(",")),s.uploadPayload[i]=r.responseFields.join(",")):"extensions"===i&&Array.isArray(r.extensions)?(c.append("extensions",JSON.stringify(r.extensions)),s.uploadPayload[i]=JSON.stringify(r.extensions)):"customMetadata"!==i||"object"!==n(r.customMetadata)||Array.isArray(r.customMetadata)||null===r.customMetadata?void 0!==r[i]&&(c.append(i,String(r[i])),"file"!==i&&(s.uploadPayload[i]=String(r[i]))):(c.append("customMetadata",JSON.stringify(r.customMetadata)),s.uploadPayload[i]=JSON.stringify(r.customMetadata)));!function(e,t,n,r,o){"v2-alpha"!==r.apiVersion?P(r.authenticationEndpoint).then((function(n){t.append("signature",n.signature),t.append("expire",String(n.expire)),t.append("token",n.token),t.append("publicKey",String(r.publicKey)),x(e,t).then((function(e){return m(!1,e,o)}),(function(e){return m(!0,e,o)}))}),(function(e){return m(!0,e,o)})):w(r.authenticationEndpoint,n).then((function(n){t.append("token",n.token),x(e,t,r.apiVersion).then((function(e){return m(!1,e,o)}),(function(e){return m(!0,e,o)}))}),(function(e){return m(!0,e,o)}))}(e,c,s,t(t({},o),{},{authenticationEndpoint:o.authenticationEndpoint}),a)}else m(!0,f,a);else m(!0,l,a);else m(!0,p,a);else m(!0,u,a);else m(!0,g,a)},S={width:"w",height:"h",aspectRatio:"ar",quality:"q",crop:"c",cropMode:"cm",focus:"fo",x:"x",y:"y",format:"f",radius:"r",background:"bg",border:"b",rotation:"rt",rotate:"rt",blur:"bl",named:"n",overlayImage:"oi",overlayImageAspectRatio:"oiar",overlayImageBackground:"oibg",overlayImageBorder:"oib",overlayImageDPR:"oidpr",overlayImageQuality:"oiq",overlayImageCropping:"oic",overlayImageTrim:"oit",overlayX:"ox",overlayY:"oy",overlayFocus:"ofo",overlayHeight:"oh",overlayWidth:"ow",overlayText:"ot",overlayTextFontSize:"ots",overlayTextFontFamily:"otf",overlayTextColor:"otc",overlayTextTransparency:"oa",overlayAlpha:"oa",overlayTextTypography:"ott",overlayBackground:"obg",overlayTextEncoded:"ote",overlayTextWidth:"otw",overlayTextBackground:"otbg",overlayTextPadding:"otp",overlayTextInnerAlignment:"otia",overlayRadius:"or",progressive:"pr",lossless:"lo",trim:"t",metadata:"md",colorProfile:"cp",defaultImage:"di",dpr:"dpr",effectSharpen:"e-sharpen",effectUSM:"e-usm",effectContrast:"e-contrast",effectGray:"e-grayscale",original:"orig",raw:"raw"},j=["path","query"],k=function(){return"path"},T=function(e){return"query"===e.transformationPosition},E=function(e){return void 0!==e.transformationPosition&&-1!=j.indexOf(e.transformationPosition)},M=function(e){return e&&(S[e]||S[e.toLowerCase()])||""},R=function(){return":"},A=function(){return","},I=function(){return"-"};function N(e){return"string"==typeof e&&"/"==e[e.length-1]&&(e=e.substring(0,e.length-1)),e}function q(e,t){var n=t||"/",r=new RegExp(n+"{1,}","g");return e.join(n).replace(r,n)}var F=function(e){if(!e.path&&!e.src)return"";var t,n,r;try{e.path?(r=new URL(e.urlEndpoint).pathname,t=new URL(q([e.urlEndpoint.replace(r,""),e.path]))):(t=new URL(e.src),n=!0)}catch(e){return console.error(e),""}for(var o in e.queryParameters)t.searchParams.append(o,String(e.queryParameters[o]));var a=function(e){if(!Array.isArray(e))return"";for(var t=[],n=0,r=e.length;n<r;n++){var o=[];for(var a in e[n]){var i=M(a);if(i||(i=a),"-"===e[n][a])o.push(i);else if("raw"===a)o.push(e[n][a]);else{var s=e[n][a];"oi"!==i&&"di"!==i||(s=(s=N(("string"==typeof(u=s||"")&&"/"==u[0]&&(u=u.slice(1)),u))).replace(/\//g,"@@")),o.push([i,s].join(I()))}}t.push(o.join(A()))}var u;return t.join(R())}(e.transformation);return a&&a.length&&(T(e)||n?t.searchParams.append("tr",a):t.pathname=q(["tr"+R()+a,t.pathname])),t.pathname=q(r?[r,t.pathname]:[t.pathname]),t.href};return function(){function e(n){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),o(this,"options",{sdkVersion:"javascript-".concat("1.6.0-alpha.0"),publicKey:"",urlEndpoint:"",transformationPosition:k()}),this.options=t(t({},this.options),n||{}),!this.options.urlEndpoint)throw i;if(!E(this.options))throw s}var a,u,p;return a=e,(u=[{key:"url",value:function(e){return n=e,r=this.options,F(t(t({},r),n));var n,r}},{key:"upload",value:function(e,r,o){var a;if("function"==typeof r?a=r:o=r||{},!e||"object"!==n(e))return m(!0,g,a);var i=t(t({},this.options),o),s=(e||{}).xhr;delete e.xhr;var u,p,l=s||new XMLHttpRequest;return(u=this,p=O,function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];if(t.length!==p.length||void 0===t[t.length-1])return new Promise((function(e,n){t.pop(),t.push((function(t){if(t)return n(t);for(var r=arguments.length,o=new Array(r>1?r-1:0),a=1;a<r;a++)o[a-1]=arguments[a];e(o.length>1?o:o[0])})),p.call.apply(p,[u].concat(t))}));if("function"!=typeof t[t.length-1])throw new Error("Callback must be a function.");p.call.apply(p,[u].concat(t))})(l,e,i,a)}}])&&r(a.prototype,u),p&&r(a,p),Object.defineProperty(a,"prototype",{writable:!1}),e}()}));
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ImageKit=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function r(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{};t%2?n(Object(o),!0).forEach((function(t){r(e,t,o[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(o)):n(Object(o)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(o,t))}))}return e}var a={message:"Missing urlEndpoint during SDK initialization",help:""},i={message:"Invalid transformationPosition parameter",help:""},s={message:"Missing file parameter for upload",help:""},u={message:"Missing fileName parameter for upload",help:""},p={message:"Missing public key for upload",help:""},l={message:"Request to ImageKit upload endpoint failed due to network error",help:""},f={message:"Invalid uploadOptions parameter",help:""},c={message:"Missing signature for upload. The SDK expects token, sginature and expire for authentication.",help:""},y={message:"Missing token for upload. The SDK expects token, sginature and expire for authentication.",help:""},d={message:"Missing expire for upload. The SDK expects token, sginature and expire for authentication.",help:""};function g(e,t,r){"function"==typeof r&&(e?r(t,null):r(null,t))}function h(e){var t={},r=e.getAllResponseHeaders();return Object.keys(r).length&&r.trim().split(/[\r\n]+/).map((function(e){return e.split(/: /)})).forEach((function(e){t[e[0].trim()]=e[1].trim()})),t}var m=function(e,t){var r=o({},e),n={statusCode:t.status,headers:h(t)};return Object.defineProperty(r,"$ResponseMetadata",{value:n,enumerable:!1,writable:!1}),r},v=function(e,t){return new Promise((function(r,n){e.open("POST","https://upload.imagekit.io/api/v1/files/upload"),e.onerror=function(e){return n(l)},e.onload=function(){if(200===e.status)try{var t=JSON.parse(e.responseText),o=m(t,e);return r(o)}catch(e){return n(e)}else try{t=JSON.parse(e.responseText);var a=m(t,e);return n(a)}catch(e){return n(e)}},e.send(t)}))},b=function(t,r,n,o){if(r.file)if(r.fileName)if(n.publicKey)if(r.token)if(r.signature)if(r.expire){var a,i=new FormData;for(a in r)a&&("file"===a&&"string"!=typeof r.file?i.append("file",r.file,String(r.fileName)):"tags"===a&&Array.isArray(r.tags)?i.append("tags",r.tags.join(",")):"signature"===a?i.append("signature",r.signature):"expire"===a?i.append("expire",String(r.expire)):"token"===a?i.append("token",r.token):"responseFields"===a&&Array.isArray(r.responseFields)?i.append("responseFields",r.responseFields.join(",")):"extensions"===a&&Array.isArray(r.extensions)?i.append("extensions",JSON.stringify(r.extensions)):"customMetadata"!==a||"object"!==e(r.customMetadata)||Array.isArray(r.customMetadata)||null===r.customMetadata?void 0!==r[a]&&i.append(a,String(r[a])):i.append("customMetadata",JSON.stringify(r.customMetadata)));i.append("publicKey",n.publicKey),function(e,t,r){v(e,t).then((function(e){return g(!1,e,r)}),(function(e){return g(!0,e,r)}))}(t,i,o)}else g(!0,d,o);else g(!0,c,o);else g(!0,y,o);else g(!0,p,o);else g(!0,u,o);else g(!0,s,o)},x={width:"w",height:"h",aspectRatio:"ar",quality:"q",crop:"c",cropMode:"cm",focus:"fo",x:"x",y:"y",format:"f",radius:"r",background:"bg",border:"b",rotation:"rt",rotate:"rt",blur:"bl",named:"n",overlayImage:"oi",overlayImageAspectRatio:"oiar",overlayImageBackground:"oibg",overlayImageBorder:"oib",overlayImageDPR:"oidpr",overlayImageQuality:"oiq",overlayImageCropping:"oic",overlayImageTrim:"oit",overlayX:"ox",overlayY:"oy",overlayFocus:"ofo",overlayHeight:"oh",overlayWidth:"ow",overlayText:"ot",overlayTextFontSize:"ots",overlayTextFontFamily:"otf",overlayTextColor:"otc",overlayTextTransparency:"oa",overlayAlpha:"oa",overlayTextTypography:"ott",overlayBackground:"obg",overlayTextEncoded:"ote",overlayTextWidth:"otw",overlayTextBackground:"otbg",overlayTextPadding:"otp",overlayTextInnerAlignment:"otia",overlayRadius:"or",progressive:"pr",lossless:"lo",trim:"t",metadata:"md",colorProfile:"cp",defaultImage:"di",dpr:"dpr",effectSharpen:"e-sharpen",effectUSM:"e-usm",effectContrast:"e-contrast",effectGray:"e-grayscale",original:"orig",raw:"raw"},w=["path","query"],O=function(){return"path"},P=function(e){return"query"===e.transformationPosition},j=function(e){return void 0!==e.transformationPosition&&-1!=w.indexOf(e.transformationPosition)},S=function(e){return e&&(x[e]||x[e.toLowerCase()])||""},T=function(){return":"},k=function(){return","},M=function(){return"-"};function A(e){return"string"==typeof e&&"/"==e[e.length-1]&&(e=e.substring(0,e.length-1)),e}function I(e,t){var r=t||"/",n=new RegExp(r+"{1,}","g");return e.join(r).replace(n,r)}var E=function(e){if(!e.path&&!e.src)return"";var t,r,n;try{e.path?(n=new URL(e.urlEndpoint).pathname,t=new URL(I([e.urlEndpoint.replace(n,""),e.path]))):(t=new URL(e.src),r=!0)}catch(e){return console.error(e),""}for(var o in e.queryParameters)t.searchParams.append(o,String(e.queryParameters[o]));var a=function(e){if(!Array.isArray(e))return"";for(var t=[],r=0,n=e.length;r<n;r++){var o=[];for(var a in e[r]){var i=S(a);if(i||(i=a),"-"===e[r][a])o.push(i);else if("raw"===a)o.push(e[r][a]);else{var s=e[r][a];"oi"!==i&&"di"!==i||(s=(s=A(("string"==typeof(u=s||"")&&"/"==u[0]&&(u=u.slice(1)),u))).replace(/\//g,"@@")),o.push([i,s].join(M()))}}t.push(o.join(k()))}var u;return t.join(T())}(e.transformation);return a&&a.length&&(P(e)||r?t.searchParams.append("tr",a):t.pathname=I(["tr"+T()+a,t.pathname])),t.pathname=I(n?[n,t.pathname]:[t.pathname]),t.href};return function(){function n(e){if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),r(this,"options",{sdkVersion:"javascript-".concat("2.0.0"),publicKey:"",urlEndpoint:"",transformationPosition:O()}),this.options=o(o({},this.options),e||{}),!this.options.urlEndpoint)throw a;if(!j(this.options))throw i}var s,u,p;return s=n,(u=[{key:"url",value:function(e){return t=e,r=this.options,E(o(o({},r),t));var t,r}},{key:"upload",value:function(t,r,n){var a;if("function"==typeof r?a=r:n=r||{},!t||"object"!==e(t))return g(!0,f,a);var i=o(o({},this.options),n),s=(t||{}).xhr;delete t.xhr;var u,p,l=s||new XMLHttpRequest;return(u=this,p=b,function(){for(var e=arguments.length,t=new Array(e),r=0;r<e;r++)t[r]=arguments[r];if(t.length!==p.length||void 0===t[t.length-1])return new Promise((function(e,r){t.pop(),t.push((function(t){if(t)return r(t);for(var n=arguments.length,o=new Array(n>1?n-1:0),a=1;a<n;a++)o[a-1]=arguments[a];e(o.length>1?o:o[0])})),p.call.apply(p,[u].concat(t))}));if("function"!=typeof t[t.length-1])throw new Error("Callback must be a function.");p.call.apply(p,[u].concat(t))})(l,t,i,a)}}])&&t(s.prototype,u),p&&t(s,p),n}()}));

@@ -54,3 +54,15 @@ declare const _default: {

};
MISSING_SIGNATURE: {
message: string;
help: string;
};
MISSING_TOKEN: {
message: string;
help: string;
};
MISSING_EXPIRE: {
message: string;
help: string;
};
};
export default _default;

@@ -5,3 +5,3 @@ interface ResponseMetadata {

}
type IKResponse<T> = T extends Error ? T & {
declare type IKResponse<T> = T extends Error ? T & {
$ResponseMetadata?: ResponseMetadata;

@@ -8,0 +8,0 @@ } : T & {

@@ -6,5 +6,3 @@ import { TransformationPosition } from ".";

publicKey?: string;
authenticationEndpoint?: string;
transformationPosition?: TransformationPosition;
apiVersion?: string;
}
import { ImageKitOptions } from "./ImageKitOptions";
import { TransformationPosition } from "./Transformation";
import { UploadOptions, JwtRequestOptions } from "./UploadOptions";
import { UploadOptions } from "./UploadOptions";
import { UploadResponse, FileType } from "./UploadResponse";
import { UrlOptions } from "./UrlOptions";
export type { ImageKitOptions, TransformationPosition, UploadOptions, UploadResponse, FileType, UrlOptions, JwtRequestOptions };
export type { ImageKitOptions, TransformationPosition, UploadOptions, UploadResponse, FileType, UrlOptions };
import supportedTransforms from "../constants/supportedTransforms";
export type TransformationPosition = "path" | "query";
export type Transformation = Partial<typeof supportedTransforms>;
export declare type TransformationPosition = "path" | "query";
export declare type Transformation = Partial<typeof supportedTransforms>;

@@ -17,2 +17,16 @@ /**

/**
* HMAC-SHA1 digest of the token+expire using your ImageKit.io private API key as a key. This should be in lowercase.
* Warning: Signature must be calculated on the server-side. This field is required for authentication when uploading a file from the client-side.
*/
signature: string;
/**
* A unique value generated by the client, which will be used by the ImageKit.io server to recognize and prevent subsequent retries for the same request. We suggest using V4 UUIDs, or another random string with enough entropy to avoid collisions.
* Note: Sending a value that has been used in the past will result in a validation error. Even if your previous request resulted in an error, you should always send a new value for this field.
*/
token: string;
/**
* The time until your signature is valid. It must be a Unix time in less than 1 hour into the future. It should be in seconds.
*/
expire: number;
/**
* The name with which the file has to be uploaded.

@@ -83,8 +97,1 @@ * The file name can contain:

}
export interface JwtRequestOptions {
publicKey: string;
expire: number;
uploadPayload: {
[key: string]: Object | string | boolean;
};
}

@@ -9,3 +9,3 @@ /**

*/
export type FileType = "all" | "image" | "non-image";
export declare type FileType = "all" | "image" | "non-image";
/**

@@ -12,0 +12,0 @@ * Metadata object structure

@@ -52,2 +52,2 @@ import { TransformationPosition } from ".";

*/
export type UrlOptions = UrlOptionsSrc | UrlOptionsPath;
export declare type UrlOptions = UrlOptionsSrc | UrlOptionsPath;

@@ -1,17 +0,4 @@

import { ImageKitOptions, UploadResponse, JwtRequestOptions } from "../interfaces";
import { UploadResponse } from "../interfaces";
import IKResponse from "../interfaces/IKResponse";
interface SignatureResponse {
signature: string;
expire: number;
token: string;
}
interface JwtResponse {
token: string;
}
export declare const request: (uploadFileXHR: XMLHttpRequest, formData: FormData, jwtRequestOptions: JwtRequestOptions, options: ImageKitOptions & {
authenticationEndpoint: string;
}, callback?: ((err: Error | null, response: UploadResponse | null) => void) | undefined) => void;
export declare const getJwt: (authenticationEndpoint: string, jwtRequestOptions: JwtRequestOptions) => Promise<JwtResponse>;
export declare const generateSignatureToken: (authenticationEndpoint: string) => Promise<SignatureResponse>;
export declare const uploadFile: (uploadFileXHR: XMLHttpRequest, formData: FormData, apiVersion?: undefined | string) => Promise<IKResponse<UploadResponse> | Error>;
export {};
export declare const request: (uploadFileXHR: XMLHttpRequest, formData: FormData, callback?: ((err: Error | null, response: UploadResponse | null) => void) | undefined) => void;
export declare const uploadFile: (uploadFileXHR: XMLHttpRequest, formData: FormData) => Promise<IKResponse<UploadResponse> | Error>;
{
"name": "imagekit-javascript",
"version": "1.6.0-alpha.0",
"version": "2.0.0",
"description": "Javascript SDK for using ImageKit.io in the browser",

@@ -5,0 +5,0 @@ "main": "dist/imagekit.cjs.js",

@@ -17,2 +17,8 @@ [<img width="250" alt="ImageKit.io" src="https://raw.githubusercontent.com/imagekit-developer/imagekit-javascript/master/assets/imagekit-light-logo.svg"/>](https://imagekit.io)

## Changelog - SDK Version 2.0.0
### Breaking changes
**1. Authentication Process Update:**
* Previously, when using client side file upload, the SDK required the `publicKey` and `authenticationEndpoint` parameters during SDK initialization to fetch security parameters (`signature`, `token`, and `expire`).
* In version 2.0.0, we've updated the authentication process for the SDK. As a user of the SDK, you are now responsible for generating the security parameters (`signature`, `token`, and `expire`) yourself. This means you no longer need to provide the `authenticationEndpoint`. When using the SDK's upload method, make sure to pass these security parameters explicitly along with other [upload options](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload). For guidance on generating these security parameters, please refer to the documentation available [here](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#signature-generation-for-client-side-file-upload).
## Installation

@@ -63,3 +69,3 @@

`publicKey` and `authenticationEndpoint` parameters are required if you want to use the SDK for client-side file upload. You can get these parameters from the developer section in your ImageKit dashboard - https://imagekit.io/dashboard#developers
`publicKey` parameter is required if you want to use the SDK for client-side file upload. You can get this parameter from the developer section in your ImageKit dashboard - https://imagekit.io/dashboard#developers
```

@@ -69,3 +75,2 @@ var imagekit = new ImageKit({

urlEndpoint: "https://ik.imagekit.io/your_imagekit_id",
authenticationEndpoint: "http://www.yourserver.com/auth",
});

@@ -91,3 +96,3 @@ ```

```
// Run it from project root
// Run it from the project root
yarn startSampleApp

@@ -268,6 +273,4 @@ ```

Also, ensure that you have specified `authenticationEndpoint` during SDK initialization. The SDK makes an HTTP GET request to this endpoint and expects a JSON response with three fields, i.e. `signature`, `token`, and `expire`. In addition, the SDK adds a query parameter `t` with a random value to ensure that the request URL is unique and the response is not cached in [Safari iOS](https://github.com/imagekit-developer/imagekit-javascript/issues/59). Your backend can ignore this query parameter.
Also, before making an upload request, please ensure you have generated mandatory security parameters: `signature`, `token`, and `expire`. To generate these security parameters, refer to the [documentation here](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#signature-generation-for-client-side-file-upload). Obtain the parameters using a secure method and pass them, along with the mandatory `file` and `fileName` parameters, to the `upload()` method.
[Learn how to implement authenticationEndpoint](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#how-to-implement-authenticationendpoint-endpoint) on your server.
You can pass other parameters supported by the ImageKit upload API using the same parameter name as specified in the upload API documentation. For example, to specify tags for a file at the time of upload, use the `tags` parameter as specified in the [documentation here](https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload).

@@ -285,4 +288,4 @@

<script>
/* SDK initilization
authenticationEndpoint should be implemented on your server. Learn more here - https://docs.imagekit.io/api-reference/upload-file-api/client-side-file-upload#how-to-implement-authenticationendpoint-endpoint
/*
SDK initialization
*/

@@ -292,3 +295,2 @@ var imagekit = new ImageKit({

urlEndpoint: "https://ik.imagekit.io/your_imagekit_id",
authenticationEndpoint: "http://www.yourserver.com/auth"
});

@@ -305,2 +307,5 @@

tags: ["tag1"],
token: 'generated_token',
signature: 'generated_signature',
expire: 'generated_expire',
extensions: [

@@ -322,2 +327,5 @@ {

tags: ["tag1"],
token: 'generated_token',
signature: 'generated_signature',
expire: 'generated_expire',
extensions: [

@@ -364,2 +372,5 @@ {

tags: ["tag1"],
token: 'generated_token',
signature: 'generated_signature',
expire: 'generated_expire',
extensions: [

@@ -388,2 +399,5 @@ {

tags: ["tag1"],
token: 'generated_token',
signature: 'generated_signature',
expire: 'generated_expire',
extensions: [

@@ -408,2 +422,5 @@ {

tags: ["tag1"],
token: 'generated_token',
signature: 'generated_signature',
expire: 'generated_expire',
extensions: [

@@ -422,2 +439,3 @@ {

console.log(response.$ResponseMetadata.headers);
}
}
```

@@ -18,2 +18,5 @@ export default {

INVALID_UPLOAD_OPTIONS: { message: "Invalid uploadOptions parameter", help: "" },
MISSING_SIGNATURE: { message: "Missing signature for upload. The SDK expects token, sginature and expire for authentication.", help: ""},
MISSING_TOKEN: { message: "Missing token for upload. The SDK expects token, sginature and expire for authentication.", help: ""},
MISSING_EXPIRE: { message: "Missing expire for upload. The SDK expects token, sginature and expire for authentication.", help: ""},
};

@@ -7,5 +7,3 @@ import { TransformationPosition } from ".";

publicKey?: string;
authenticationEndpoint?: string;
transformationPosition?: TransformationPosition;
apiVersion?: string
}
}
import { ImageKitOptions } from "./ImageKitOptions";
import { TransformationPosition } from "./Transformation";
import { UploadOptions, JwtRequestOptions } from "./UploadOptions";
import { UploadOptions } from "./UploadOptions";
import { UploadResponse, FileType } from "./UploadResponse";
import { UrlOptions } from "./UrlOptions";
export type { ImageKitOptions, TransformationPosition, UploadOptions, UploadResponse, FileType, UrlOptions, JwtRequestOptions };
export type { ImageKitOptions, TransformationPosition, UploadOptions, UploadResponse, FileType, UrlOptions };

@@ -17,2 +17,16 @@ /**

/**
* HMAC-SHA1 digest of the token+expire using your ImageKit.io private API key as a key. This should be in lowercase.
* Warning: Signature must be calculated on the server-side. This field is required for authentication when uploading a file from the client-side.
*/
signature: string;
/**
* A unique value generated by the client, which will be used by the ImageKit.io server to recognize and prevent subsequent retries for the same request. We suggest using V4 UUIDs, or another random string with enough entropy to avoid collisions.
* Note: Sending a value that has been used in the past will result in a validation error. Even if your previous request resulted in an error, you should always send a new value for this field.
*/
token: string;
/**
* The time until your signature is valid. It must be a Unix time in less than 1 hour into the future. It should be in seconds.
*/
expire: number;
/**
* The name with which the file has to be uploaded.

@@ -108,7 +122,1 @@ * The file name can contain:

}
export interface JwtRequestOptions {
publicKey: string
expire: number
uploadPayload: { [key: string]: Object | string | boolean }
}
import errorMessages from "../constants/errorMessages";
import respond from "../utils/respond";
import { request } from "../utils/request";
import { ImageKitOptions, UploadOptions, UploadResponse, JwtRequestOptions } from "../interfaces";
import { ImageKitOptions, UploadOptions, UploadResponse } from "../interfaces";

@@ -12,8 +12,2 @@ export const upload = (

) => {
if (!uploadOptions) {
respond(true, errorMessages.INVALID_UPLOAD_OPTIONS, callback);
return;
}
if (!uploadOptions.file) {

@@ -29,7 +23,2 @@ respond(true, errorMessages.MISSING_UPLOAD_FILE_PARAMETER, callback);

if (!options.authenticationEndpoint) {
respond(true, errorMessages.MISSING_AUTHENTICATION_ENDPOINT, callback);
return;
}
if (!options.publicKey) {

@@ -40,8 +29,17 @@ respond(true, errorMessages.MISSING_PUBLIC_KEY, callback);

const reqPayload: JwtRequestOptions = {
publicKey: options.publicKey,
expire: 3600,
uploadPayload: {},
if(!uploadOptions.token) {
respond(true, errorMessages.MISSING_TOKEN, callback)
return
}
if(!uploadOptions.signature) {
respond(true, errorMessages.MISSING_SIGNATURE, callback)
return
}
if(!uploadOptions.expire) {
respond(true, errorMessages.MISSING_EXPIRE, callback)
return
}
var formData = new FormData();

@@ -54,18 +52,18 @@ let key: keyof typeof uploadOptions;

} else if (key === "tags" && Array.isArray(uploadOptions.tags)) {
formData.append('tags', uploadOptions.tags.join(","));
reqPayload.uploadPayload[key] = uploadOptions.tags.join(",");
formData.append('tags', uploadOptions.tags.join(","));
} else if (key === 'signature') {
formData.append("signature", uploadOptions.signature);
} else if (key === 'expire') {
formData.append("expire", String(uploadOptions.expire));
} else if (key === 'token') {
formData.append("token", uploadOptions.token);
} else if (key === "responseFields" && Array.isArray(uploadOptions.responseFields)) {
formData.append('responseFields', uploadOptions.responseFields.join(","));
reqPayload.uploadPayload[key] = uploadOptions.responseFields.join(",");
} else if (key === "extensions" && Array.isArray(uploadOptions.extensions)) {
formData.append('extensions', JSON.stringify(uploadOptions.extensions));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.extensions);
} else if (key === "customMetadata" && typeof uploadOptions.customMetadata === "object" &&
!Array.isArray(uploadOptions.customMetadata) && uploadOptions.customMetadata !== null) {
formData.append('customMetadata', JSON.stringify(uploadOptions.customMetadata));
reqPayload.uploadPayload[key] = JSON.stringify(uploadOptions.customMetadata);
} else if (uploadOptions[key] !== undefined) {
} else if(uploadOptions[key] !== undefined) {
formData.append(key, String(uploadOptions[key]));
if (key !== 'file')
reqPayload.uploadPayload[key] = String(uploadOptions[key]);
}

@@ -75,3 +73,5 @@ }

request(xhr, formData, reqPayload, { ...options, authenticationEndpoint: options.authenticationEndpoint }, callback);
formData.append("publicKey", options.publicKey);
request(xhr, formData, callback);
};
import respond from "../utils/respond";
import errorMessages from "../constants/errorMessages"
import { ImageKitOptions, UploadResponse, JwtRequestOptions } from "../interfaces";
import { ImageKitOptions, UploadResponse } from "../interfaces";
import IKResponse from "../interfaces/IKResponse";

@@ -12,6 +12,2 @@

interface JwtResponse {
token: string
}
function getResponseHeaderMap(xhr: XMLHttpRequest) {

@@ -49,33 +45,6 @@ const headers: Record<string, string | number | boolean> = {};

formData: FormData,
jwtRequestOptions: JwtRequestOptions,
options: ImageKitOptions & { authenticationEndpoint: string },
callback?: (err: Error | null, response: UploadResponse | null) => void) => {
if (options.apiVersion === 'v2-alpha') {
getJwt(options.authenticationEndpoint, jwtRequestOptions).then((tokenObj) => {
formData.append("token", tokenObj.token);
uploadFile(uploadFileXHR, formData, options.apiVersion).then((result) => {
return respond(false, result, callback);
}, (ex) => {
return respond(true, ex, callback);
});
}, (ex) => {
return respond(true, ex, callback);
});
return
}
generateSignatureToken(options.authenticationEndpoint).then((signaturObj) => {
formData.append("signature", signaturObj.signature);
formData.append("expire", String(signaturObj.expire));
formData.append("token", signaturObj.token);
formData.append("publicKey", String(options.publicKey));
uploadFile(uploadFileXHR, formData).then((result) => {
return respond(false, result, callback);
}, (ex) => {
return respond(true, ex, callback);
});
uploadFile(uploadFileXHR, formData).then((result) => {
return respond(false, result, callback);
}, (ex) => {

@@ -86,86 +55,8 @@ return respond(true, ex, callback);

export const getJwt = (
authenticationEndpoint: string,
jwtRequestOptions: JwtRequestOptions
): Promise<JwtResponse> => {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.timeout = 60000;
xhr.open('POST', authenticationEndpoint);
xhr.setRequestHeader("Content-type", "application/json");
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
}
xhr.onload = function () {
if (xhr.status === 200) {
try {
const body = JSON.parse(xhr.responseText);
const obj = {
token: body.token
}
if (!obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send(JSON.stringify(jwtRequestOptions));
});
}
export const generateSignatureToken = (
authenticationEndpoint: string
): Promise<SignatureResponse> => {
return new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.timeout = 60000;
var urlObj = new URL(authenticationEndpoint);
urlObj.searchParams.set("t", Math.random().toString());
xhr.open('GET', urlObj.toString());
xhr.ontimeout = function (e) {
return reject(errorMessages.AUTH_ENDPOINT_TIMEOUT);
};
xhr.onerror = function () {
return reject(errorMessages.AUTH_ENDPOINT_NETWORK_ERROR);
}
xhr.onload = function () {
if (xhr.status === 200) {
try {
var body = JSON.parse(xhr.responseText);
var obj = {
signature: body.signature,
expire: body.expire,
token: body.token
}
if (!obj.signature || !obj.expire || !obj.token) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
return resolve(obj);
} catch (ex) {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
} else {
return reject(errorMessages.AUTH_INVALID_RESPONSE);
}
};
xhr.send();
});
}
export const uploadFile = (
uploadFileXHR: XMLHttpRequest,
formData: FormData,
apiVersion: undefined | string = undefined,
formData: FormData
): Promise<IKResponse<UploadResponse> | Error> => {
return new Promise((resolve, reject) => {
const uploadUrl = apiVersion === 'v2-alpha' ? 'https://upload.imagekit.io/api/v2-alpha/files/upload' : 'https://upload.imagekit.io/api/v1/files/upload'
uploadFileXHR.open('POST', uploadUrl);
uploadFileXHR.open('POST', 'https://upload.imagekit.io/api/v1/files/upload');
uploadFileXHR.onerror = function (e) {

@@ -195,2 +86,2 @@ return reject(errorMessages.UPLOAD_ENDPOINT_NETWORK_ERROR);

});
}
}