Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

tus-js-client

Package Overview
Dependencies
Maintainers
1
Versions
50
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tus-js-client - npm Package Compare versions

Comparing version 1.2.1 to 1.3.0

lib.es5/error.js

72

dist/tus.js

@@ -125,2 +125,45 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.tus = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){

});
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var DetailedError = function (_Error) {
_inherits(DetailedError, _Error);
function DetailedError(error) {
var causingErr = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
var xhr = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];
_classCallCheck(this, DetailedError);
var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(DetailedError).call(this, error.message));
_this.originalRequest = xhr;
_this.causingError = causingErr;
var message = error.message;
if (causingErr != null) {
message += ", caused by " + causingErr.toString();
}
if (xhr != null) {
message += ", originated from request (response code: " + xhr.status + ", response text: " + xhr.responseText + ")";
}
_this.message = message;
return _this;
}
return DetailedError;
}(Error);
exports.default = DetailedError;
},{}],6:[function(_dereq_,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = fingerprint;

@@ -137,3 +180,3 @@ /**

},{}],6:[function(_dereq_,module,exports){
},{}],7:[function(_dereq_,module,exports){
"use strict";

@@ -176,3 +219,3 @@

},{"./node/storage":4,"./upload":7}],7:[function(_dereq_,module,exports){
},{"./node/storage":4,"./upload":8}],8:[function(_dereq_,module,exports){
"use strict";

@@ -195,2 +238,6 @@

var _error = _dereq_("./error");
var _error2 = _interopRequireDefault(_error);
var _extend = _dereq_("extend");

@@ -338,5 +385,4 @@

key: "_emitXhrError",
value: function _emitXhrError(xhr, err) {
err.originalRequest = xhr;
this._emitError(err);
value: function _emitXhrError(xhr, err, causingErr) {
this._emitError(new _error2.default(err, causingErr, xhr));
}

@@ -445,4 +491,4 @@ }, {

xhr.onerror = function () {
_this._emitXhrError(xhr, new Error("tus: failed to create upload"));
xhr.onerror = function (err) {
_this._emitXhrError(xhr, new Error("tus: failed to create upload"), err);
};

@@ -516,4 +562,4 @@

xhr.onerror = function () {
_this2._emitXhrError(xhr, new Error("tus: failed to resume upload"));
xhr.onerror = function (err) {
_this2._emitXhrError(xhr, new Error("tus: failed to resume upload"), err);
};

@@ -577,3 +623,3 @@

xhr.onerror = function () {
xhr.onerror = function (err) {
// Don't emit an error if the upload was aborted manually

@@ -584,3 +630,3 @@ if (_this3._aborted) {

_this3._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + _this3._offset));
_this3._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + _this3._offset), err);
};

@@ -639,3 +685,3 @@

},{"./fingerprint":5,"./node/base64":1,"./node/request":2,"./node/source":3,"./node/storage":4,"extend":8}],8:[function(_dereq_,module,exports){
},{"./error":5,"./fingerprint":6,"./node/base64":1,"./node/request":2,"./node/source":3,"./node/storage":4,"extend":9}],9:[function(_dereq_,module,exports){
'use strict';

@@ -728,4 +774,4 @@

},{}]},{},[6])(6)
},{}]},{},[7])(7)
});
//# sourceMappingURL=tus.js.map

2

dist/tus.min.js

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

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.tus=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.encode=encode;var _window=window;var btoa=_window.btoa;function encode(data){return btoa(unescape(encodeURIComponent(data)))}var isSupported=exports.isSupported="btoa"in window},{}],2:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.newRequest=newRequest;function newRequest(){return new window.XMLHttpRequest}},{}],3:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});exports.getSource=getSource;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var FileSource=function(){function FileSource(file){_classCallCheck(this,FileSource);this._file=file;this.size=file.size}_createClass(FileSource,[{key:"slice",value:function slice(start,end){return this._file.slice(start,end)}},{key:"close",value:function close(){}}]);return FileSource}();function getSource(input){if(typeof input.slice==="function"&&typeof input.size!=="undefined"){return new FileSource(input)}throw new Error("source object may only be an instance of File or Blob in this environment")}},{}],4:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.setItem=setItem;exports.getItem=getItem;exports.removeItem=removeItem;var hasStorage=false;try{hasStorage="localStorage"in window;localStorage.length}catch(e){if(e.code===e.SECURITY_ERR){hasStorage=false}else{throw e}}var canStoreURLs=exports.canStoreURLs=hasStorage;function setItem(key,value){if(!hasStorage)return;return localStorage.setItem(key,value)}function getItem(key){if(!hasStorage)return;return localStorage.getItem(key)}function removeItem(key){if(!hasStorage)return;return localStorage.removeItem(key)}},{}],5:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=fingerprint;function fingerprint(file){return["tus",file.name,file.type,file.size,file.lastModified].join("-")}},{}],6:[function(_dereq_,module,exports){"use strict";var _upload=_dereq_("./upload");var _upload2=_interopRequireDefault(_upload);var _storage=_dereq_("./node/storage");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var defaultOptions=_upload2.default.defaultOptions;if(typeof window!=="undefined"){var _window=window;var XMLHttpRequest=_window.XMLHttpRequest;var Blob=_window.Blob;var isSupported=XMLHttpRequest&&Blob&&typeof Blob.prototype.slice==="function"}else{var isSupported=true}module.exports={Upload:_upload2.default,isSupported:isSupported,canStoreURLs:_storage.canStoreURLs,defaultOptions:defaultOptions}},{"./node/storage":4,"./upload":7}],7:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});var _fingerprint=_dereq_("./fingerprint");var _fingerprint2=_interopRequireDefault(_fingerprint);var _extend=_dereq_("extend");var _extend2=_interopRequireDefault(_extend);var _request=_dereq_("./node/request");var _source=_dereq_("./node/source");var _base=_dereq_("./node/base64");var Base64=_interopRequireWildcard(_base);var _storage=_dereq_("./node/storage");var Storage=_interopRequireWildcard(_storage);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var defaultOptions={endpoint:"",fingerprint:_fingerprint2.default,resume:true,onProgress:null,onChunkComplete:null,onSuccess:null,onError:null,headers:{},chunkSize:Infinity,withCredentials:false,uploadUrl:null,uploadSize:null,overridePatchMethod:false};var Upload=function(){function Upload(file,options){_classCallCheck(this,Upload);this.options=(0,_extend2.default)(true,{},defaultOptions,options);this.file=file;this.url=null;this._xhr=null;this._fingerprint=null;this._offset=null;this._aborted=false;this._size=null;this._source=null}_createClass(Upload,[{key:"start",value:function start(){var file=this.file;if(!file){this._emitError(new Error("tus: no file or stream to upload provided"));return}if(!this.options.endpoint){this._emitError(new Error("tus: no endpoint provided"));return}var source=this._source=(0,_source.getSource)(file,this.options.chunkSize);if(this.options.uploadSize!=null){var size=+this.options.uploadSize;if(isNaN(size)){throw new Error("tus: cannot convert `uploadSize` option into a number")}this._size=size}else{var size=source.size;if(size==null){throw new Error("tus: cannot automatically derive upload's size from input and must be specified manually using the `uploadSize` option")}this._size=size}if(this.options.uploadUrl!=null){this.url=this.options.uploadUrl;this._resumeUpload();return}if(this.options.resume){this._fingerprint=this.options.fingerprint(file);var resumedUrl=Storage.getItem(this._fingerprint);if(resumedUrl!=null){this.url=resumedUrl;this._resumeUpload();return}}this._createUpload()}},{key:"abort",value:function abort(){if(this._xhr!==null){this._xhr.abort();this._source.close();this._aborted=true}}},{key:"_emitXhrError",value:function _emitXhrError(xhr,err){err.originalRequest=xhr;this._emitError(err)}},{key:"_emitError",value:function _emitError(err){if(typeof this.options.onError==="function"){this.options.onError(err)}else{throw err}}},{key:"_emitSuccess",value:function _emitSuccess(){if(typeof this.options.onSuccess==="function"){this.options.onSuccess()}}},{key:"_emitProgress",value:function _emitProgress(bytesSent,bytesTotal){if(typeof this.options.onProgress==="function"){this.options.onProgress(bytesSent,bytesTotal)}}},{key:"_emitChunkComplete",value:function _emitChunkComplete(chunkSize,bytesAccepted,bytesTotal){if(typeof this.options.onChunkComplete==="function"){this.options.onChunkComplete(chunkSize,bytesAccepted,bytesTotal)}}},{key:"_setupXHR",value:function _setupXHR(xhr){xhr.setRequestHeader("Tus-Resumable","1.0.0");var headers=this.options.headers;for(var name in headers){xhr.setRequestHeader(name,headers[name])}xhr.withCredentials=this.options.withCredentials}},{key:"_createUpload",value:function _createUpload(){var _this=this;var xhr=(0,_request.newRequest)();xhr.open("POST",this.options.endpoint,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){_this._emitXhrError(xhr,new Error("tus: unexpected response while creating upload"));return}_this.url=xhr.getResponseHeader("Location");if(_this.options.resume){Storage.setItem(_this._fingerprint,_this.url)}_this._offset=0;_this._startUpload()};xhr.onerror=function(){_this._emitXhrError(xhr,new Error("tus: failed to create upload"))};this._setupXHR(xhr);xhr.setRequestHeader("Upload-Length",this._size);var metadata=encodeMetadata(this.options.metadata);if(metadata!==""){xhr.setRequestHeader("Upload-Metadata",metadata)}xhr.send(null)}},{key:"_resumeUpload",value:function _resumeUpload(){var _this2=this;var xhr=(0,_request.newRequest)();xhr.open("HEAD",this.url,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){if(_this2.options.resume){Storage.removeItem(_this2._fingerprint)}_this2.url=null;_this2._createUpload();return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this2._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}var length=parseInt(xhr.getResponseHeader("Upload-Length"),10);if(isNaN(length)){_this2._emitXhrError(xhr,new Error("tus: invalid or missing length value"));return}if(offset===length){_this2._emitProgress(length,length);_this2._emitSuccess();return}_this2._offset=offset;_this2._startUpload()};xhr.onerror=function(){_this2._emitXhrError(xhr,new Error("tus: failed to resume upload"))};this._setupXHR(xhr);xhr.send(null)}},{key:"_startUpload",value:function _startUpload(){var _this3=this;var xhr=this._xhr=(0,_request.newRequest)();if(this.options.overridePatchMethod){xhr.open("POST",this.url,true);xhr.setRequestHeader("X-HTTP-Method-Override","PATCH")}else{xhr.open("PATCH",this.url,true)}xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){_this3._emitXhrError(xhr,new Error("tus: unexpected response while uploading chunk"));return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this3._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}_this3._emitProgress(offset,_this3._size);_this3._emitChunkComplete(offset-_this3._offset,offset,_this3._size);_this3._offset=offset;if(offset==_this3._size){_this3._emitSuccess();_this3._source.close();return}_this3._startUpload()};xhr.onerror=function(){if(_this3._aborted){return}_this3._emitXhrError(xhr,new Error("tus: failed to upload chunk at offset "+_this3._offset))};if("upload"in xhr){xhr.upload.onprogress=function(e){if(!e.lengthComputable){return}_this3._emitProgress(start+e.loaded,_this3._size)}}this._setupXHR(xhr);xhr.setRequestHeader("Upload-Offset",this._offset);xhr.setRequestHeader("Content-Type","application/offset+octet-stream");var start=this._offset;var end=this._offset+this.options.chunkSize;if(end===Infinity||end>this._size){end=this._size}xhr.send(this._source.slice(start,end))}}]);return Upload}();function encodeMetadata(metadata){if(!Base64.isSupported){return""}var encoded=[];for(var key in metadata){encoded.push(key+" "+Base64.encode(metadata[key]))}return encoded.join(",")}Upload.defaultOptions=defaultOptions;exports.default=Upload},{"./fingerprint":5,"./node/base64":1,"./node/request":2,"./node/source":3,"./node/storage":4,extend:8}],8:[function(_dereq_,module,exports){"use strict";var hasOwn=Object.prototype.hasOwnProperty;var toStr=Object.prototype.toString;var isArray=function isArray(arr){if(typeof Array.isArray==="function"){return Array.isArray(arr)}return toStr.call(arr)==="[object Array]"};var isPlainObject=function isPlainObject(obj){if(!obj||toStr.call(obj)!=="[object Object]"){return false}var hasOwnConstructor=hasOwn.call(obj,"constructor");var hasIsPrototypeOf=obj.constructor&&obj.constructor.prototype&&hasOwn.call(obj.constructor.prototype,"isPrototypeOf");if(obj.constructor&&!hasOwnConstructor&&!hasIsPrototypeOf){return false}var key;for(key in obj){}return typeof key==="undefined"||hasOwn.call(obj,key)};module.exports=function extend(){var options,name,src,copy,copyIsArray,clone,target=arguments[0],i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2}else if(typeof target!=="object"&&typeof target!=="function"||target==null){target={}}for(;i<length;++i){options=arguments[i];if(options!=null){for(name in options){src=target[name];copy=options[name];if(target!==copy){if(deep&&copy&&(isPlainObject(copy)||(copyIsArray=isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&isArray(src)?src:[]}else{clone=src&&isPlainObject(src)?src:{}}target[name]=extend(deep,clone,copy)}else if(typeof copy!=="undefined"){target[name]=copy}}}}}return target}},{}]},{},[6])(6)});
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.tus=f()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.encode=encode;var _window=window;var btoa=_window.btoa;function encode(data){return btoa(unescape(encodeURIComponent(data)))}var isSupported=exports.isSupported="btoa"in window},{}],2:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.newRequest=newRequest;function newRequest(){return new window.XMLHttpRequest}},{}],3:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});exports.getSource=getSource;function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var FileSource=function(){function FileSource(file){_classCallCheck(this,FileSource);this._file=file;this.size=file.size}_createClass(FileSource,[{key:"slice",value:function slice(start,end){return this._file.slice(start,end)}},{key:"close",value:function close(){}}]);return FileSource}();function getSource(input){if(typeof input.slice==="function"&&typeof input.size!=="undefined"){return new FileSource(input)}throw new Error("source object may only be an instance of File or Blob in this environment")}},{}],4:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.setItem=setItem;exports.getItem=getItem;exports.removeItem=removeItem;var hasStorage=false;try{hasStorage="localStorage"in window;localStorage.length}catch(e){if(e.code===e.SECURITY_ERR){hasStorage=false}else{throw e}}var canStoreURLs=exports.canStoreURLs=hasStorage;function setItem(key,value){if(!hasStorage)return;return localStorage.setItem(key,value)}function getItem(key){if(!hasStorage)return;return localStorage.getItem(key)}function removeItem(key){if(!hasStorage)return;return localStorage.removeItem(key)}},{}],5:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _possibleConstructorReturn(self,call){if(!self){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return call&&(typeof call==="object"||typeof call==="function")?call:self}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function, not "+typeof superClass)}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:false,writable:true,configurable:true}});if(superClass)Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass}var DetailedError=function(_Error){_inherits(DetailedError,_Error);function DetailedError(error){var causingErr=arguments.length<=1||arguments[1]===undefined?null:arguments[1];var xhr=arguments.length<=2||arguments[2]===undefined?null:arguments[2];_classCallCheck(this,DetailedError);var _this=_possibleConstructorReturn(this,Object.getPrototypeOf(DetailedError).call(this,error.message));_this.originalRequest=xhr;_this.causingError=causingErr;var message=error.message;if(causingErr!=null){message+=", caused by "+causingErr.toString()}if(xhr!=null){message+=", originated from request (response code: "+xhr.status+", response text: "+xhr.responseText+")"}_this.message=message;return _this}return DetailedError}(Error);exports.default=DetailedError},{}],6:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.default=fingerprint;function fingerprint(file){return["tus",file.name,file.type,file.size,file.lastModified].join("-")}},{}],7:[function(_dereq_,module,exports){"use strict";var _upload=_dereq_("./upload");var _upload2=_interopRequireDefault(_upload);var _storage=_dereq_("./node/storage");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var defaultOptions=_upload2.default.defaultOptions;if(typeof window!=="undefined"){var _window=window;var XMLHttpRequest=_window.XMLHttpRequest;var Blob=_window.Blob;var isSupported=XMLHttpRequest&&Blob&&typeof Blob.prototype.slice==="function"}else{var isSupported=true}module.exports={Upload:_upload2.default,isSupported:isSupported,canStoreURLs:_storage.canStoreURLs,defaultOptions:defaultOptions}},{"./node/storage":4,"./upload":8}],8:[function(_dereq_,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();Object.defineProperty(exports,"__esModule",{value:true});var _fingerprint=_dereq_("./fingerprint");var _fingerprint2=_interopRequireDefault(_fingerprint);var _error=_dereq_("./error");var _error2=_interopRequireDefault(_error);var _extend=_dereq_("extend");var _extend2=_interopRequireDefault(_extend);var _request=_dereq_("./node/request");var _source=_dereq_("./node/source");var _base=_dereq_("./node/base64");var Base64=_interopRequireWildcard(_base);var _storage=_dereq_("./node/storage");var Storage=_interopRequireWildcard(_storage);function _interopRequireWildcard(obj){if(obj&&obj.__esModule){return obj}else{var newObj={};if(obj!=null){for(var key in obj){if(Object.prototype.hasOwnProperty.call(obj,key))newObj[key]=obj[key]}}newObj.default=obj;return newObj}}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var defaultOptions={endpoint:"",fingerprint:_fingerprint2.default,resume:true,onProgress:null,onChunkComplete:null,onSuccess:null,onError:null,headers:{},chunkSize:Infinity,withCredentials:false,uploadUrl:null,uploadSize:null,overridePatchMethod:false};var Upload=function(){function Upload(file,options){_classCallCheck(this,Upload);this.options=(0,_extend2.default)(true,{},defaultOptions,options);this.file=file;this.url=null;this._xhr=null;this._fingerprint=null;this._offset=null;this._aborted=false;this._size=null;this._source=null}_createClass(Upload,[{key:"start",value:function start(){var file=this.file;if(!file){this._emitError(new Error("tus: no file or stream to upload provided"));return}if(!this.options.endpoint){this._emitError(new Error("tus: no endpoint provided"));return}var source=this._source=(0,_source.getSource)(file,this.options.chunkSize);if(this.options.uploadSize!=null){var size=+this.options.uploadSize;if(isNaN(size)){throw new Error("tus: cannot convert `uploadSize` option into a number")}this._size=size}else{var size=source.size;if(size==null){throw new Error("tus: cannot automatically derive upload's size from input and must be specified manually using the `uploadSize` option")}this._size=size}if(this.options.uploadUrl!=null){this.url=this.options.uploadUrl;this._resumeUpload();return}if(this.options.resume){this._fingerprint=this.options.fingerprint(file);var resumedUrl=Storage.getItem(this._fingerprint);if(resumedUrl!=null){this.url=resumedUrl;this._resumeUpload();return}}this._createUpload()}},{key:"abort",value:function abort(){if(this._xhr!==null){this._xhr.abort();this._source.close();this._aborted=true}}},{key:"_emitXhrError",value:function _emitXhrError(xhr,err,causingErr){this._emitError(new _error2.default(err,causingErr,xhr))}},{key:"_emitError",value:function _emitError(err){if(typeof this.options.onError==="function"){this.options.onError(err)}else{throw err}}},{key:"_emitSuccess",value:function _emitSuccess(){if(typeof this.options.onSuccess==="function"){this.options.onSuccess()}}},{key:"_emitProgress",value:function _emitProgress(bytesSent,bytesTotal){if(typeof this.options.onProgress==="function"){this.options.onProgress(bytesSent,bytesTotal)}}},{key:"_emitChunkComplete",value:function _emitChunkComplete(chunkSize,bytesAccepted,bytesTotal){if(typeof this.options.onChunkComplete==="function"){this.options.onChunkComplete(chunkSize,bytesAccepted,bytesTotal)}}},{key:"_setupXHR",value:function _setupXHR(xhr){xhr.setRequestHeader("Tus-Resumable","1.0.0");var headers=this.options.headers;for(var name in headers){xhr.setRequestHeader(name,headers[name])}xhr.withCredentials=this.options.withCredentials}},{key:"_createUpload",value:function _createUpload(){var _this=this;var xhr=(0,_request.newRequest)();xhr.open("POST",this.options.endpoint,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){_this._emitXhrError(xhr,new Error("tus: unexpected response while creating upload"));return}_this.url=xhr.getResponseHeader("Location");if(_this.options.resume){Storage.setItem(_this._fingerprint,_this.url)}_this._offset=0;_this._startUpload()};xhr.onerror=function(err){_this._emitXhrError(xhr,new Error("tus: failed to create upload"),err)};this._setupXHR(xhr);xhr.setRequestHeader("Upload-Length",this._size);var metadata=encodeMetadata(this.options.metadata);if(metadata!==""){xhr.setRequestHeader("Upload-Metadata",metadata)}xhr.send(null)}},{key:"_resumeUpload",value:function _resumeUpload(){var _this2=this;var xhr=(0,_request.newRequest)();xhr.open("HEAD",this.url,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){if(_this2.options.resume){Storage.removeItem(_this2._fingerprint)}_this2.url=null;_this2._createUpload();return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this2._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}var length=parseInt(xhr.getResponseHeader("Upload-Length"),10);if(isNaN(length)){_this2._emitXhrError(xhr,new Error("tus: invalid or missing length value"));return}if(offset===length){_this2._emitProgress(length,length);_this2._emitSuccess();return}_this2._offset=offset;_this2._startUpload()};xhr.onerror=function(err){_this2._emitXhrError(xhr,new Error("tus: failed to resume upload"),err)};this._setupXHR(xhr);xhr.send(null)}},{key:"_startUpload",value:function _startUpload(){var _this3=this;var xhr=this._xhr=(0,_request.newRequest)();if(this.options.overridePatchMethod){xhr.open("POST",this.url,true);xhr.setRequestHeader("X-HTTP-Method-Override","PATCH")}else{xhr.open("PATCH",this.url,true)}xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){_this3._emitXhrError(xhr,new Error("tus: unexpected response while uploading chunk"));return}var offset=parseInt(xhr.getResponseHeader("Upload-Offset"),10);if(isNaN(offset)){_this3._emitXhrError(xhr,new Error("tus: invalid or missing offset value"));return}_this3._emitProgress(offset,_this3._size);_this3._emitChunkComplete(offset-_this3._offset,offset,_this3._size);_this3._offset=offset;if(offset==_this3._size){_this3._emitSuccess();_this3._source.close();return}_this3._startUpload()};xhr.onerror=function(err){if(_this3._aborted){return}_this3._emitXhrError(xhr,new Error("tus: failed to upload chunk at offset "+_this3._offset),err)};if("upload"in xhr){xhr.upload.onprogress=function(e){if(!e.lengthComputable){return}_this3._emitProgress(start+e.loaded,_this3._size)}}this._setupXHR(xhr);xhr.setRequestHeader("Upload-Offset",this._offset);xhr.setRequestHeader("Content-Type","application/offset+octet-stream");var start=this._offset;var end=this._offset+this.options.chunkSize;if(end===Infinity||end>this._size){end=this._size}xhr.send(this._source.slice(start,end))}}]);return Upload}();function encodeMetadata(metadata){if(!Base64.isSupported){return""}var encoded=[];for(var key in metadata){encoded.push(key+" "+Base64.encode(metadata[key]))}return encoded.join(",")}Upload.defaultOptions=defaultOptions;exports.default=Upload},{"./error":5,"./fingerprint":6,"./node/base64":1,"./node/request":2,"./node/source":3,"./node/storage":4,extend:9}],9:[function(_dereq_,module,exports){"use strict";var hasOwn=Object.prototype.hasOwnProperty;var toStr=Object.prototype.toString;var isArray=function isArray(arr){if(typeof Array.isArray==="function"){return Array.isArray(arr)}return toStr.call(arr)==="[object Array]"};var isPlainObject=function isPlainObject(obj){if(!obj||toStr.call(obj)!=="[object Object]"){return false}var hasOwnConstructor=hasOwn.call(obj,"constructor");var hasIsPrototypeOf=obj.constructor&&obj.constructor.prototype&&hasOwn.call(obj.constructor.prototype,"isPrototypeOf");if(obj.constructor&&!hasOwnConstructor&&!hasIsPrototypeOf){return false}var key;for(key in obj){}return typeof key==="undefined"||hasOwn.call(obj,key)};module.exports=function extend(){var options,name,src,copy,copyIsArray,clone,target=arguments[0],i=1,length=arguments.length,deep=false;if(typeof target==="boolean"){deep=target;target=arguments[1]||{};i=2}else if(typeof target!=="object"&&typeof target!=="function"||target==null){target={}}for(;i<length;++i){options=arguments[i];if(options!=null){for(name in options){src=target[name];copy=options[name];if(target!==copy){if(deep&&copy&&(isPlainObject(copy)||(copyIsArray=isArray(copy)))){if(copyIsArray){copyIsArray=false;clone=src&&isArray(src)?src:[]}else{clone=src&&isPlainObject(src)?src:{}}target[name]=extend(deep,clone,copy)}else if(typeof copy!=="undefined"){target[name]=copy}}}}}return target}},{}]},{},[7])(7)});
//# sourceMappingURL=tus.min.js.map

@@ -15,2 +15,6 @@ // Generated by Babel

var _https = require("https");
var https = _interopRequireWildcard(_https);
var _url = require("url");

@@ -22,2 +26,6 @@

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

@@ -42,4 +50,8 @@

this.upload = {};
this.upload.onprogress = noop;
// Ignored field
this.withCredentials = false;
this.responseText = "";
}

@@ -68,3 +80,3 @@

var req = this._request = http.request(options);
var req = this._request = options.protocol !== "https:" ? http.request(options) : https.request(options);
req.on("response", function (res) {

@@ -82,3 +94,3 @@ _this.status = res.statusCode;

if (body instanceof _stream.Readable) {
body.pipe(req);
body.pipe(new ProgressEmitter(this.upload.onprogress)).pipe(req);
} else {

@@ -103,4 +115,37 @@ req.end(body);

// ProgressEmitter is a simple PassThrough-style transform stream which keeps
// track of the number of bytes which have been piped through it and will
// invoke the `onprogress` function whenever new number are available.
var ProgressEmitter = function (_Transform) {
_inherits(ProgressEmitter, _Transform);
function ProgressEmitter(onprogress) {
_classCallCheck(this, ProgressEmitter);
var _this2 = _possibleConstructorReturn(this, Object.getPrototypeOf(ProgressEmitter).call(this));
_this2._onprogress = onprogress;
_this2._position = 0;
return _this2;
}
_createClass(ProgressEmitter, [{
key: "_transform",
value: function _transform(chunk, encoding, callback) {
this._position += chunk.length;
this._onprogress({
lengthComputable: true,
loaded: this._position
});
callback(null, chunk);
}
}]);
return ProgressEmitter;
}(_stream.Transform);
function newRequest() {
return new Request();
}

@@ -19,2 +19,6 @@ // Generated by Babel

var _error = require("./error");
var _error2 = _interopRequireDefault(_error);
var _extend = require("extend");

@@ -162,5 +166,4 @@

key: "_emitXhrError",
value: function _emitXhrError(xhr, err) {
err.originalRequest = xhr;
this._emitError(err);
value: function _emitXhrError(xhr, err, causingErr) {
this._emitError(new _error2.default(err, causingErr, xhr));
}

@@ -269,4 +272,4 @@ }, {

xhr.onerror = function () {
_this._emitXhrError(xhr, new Error("tus: failed to create upload"));
xhr.onerror = function (err) {
_this._emitXhrError(xhr, new Error("tus: failed to create upload"), err);
};

@@ -340,4 +343,4 @@

xhr.onerror = function () {
_this2._emitXhrError(xhr, new Error("tus: failed to resume upload"));
xhr.onerror = function (err) {
_this2._emitXhrError(xhr, new Error("tus: failed to resume upload"), err);
};

@@ -401,3 +404,3 @@

xhr.onerror = function () {
xhr.onerror = function (err) {
// Don't emit an error if the upload was aborted manually

@@ -408,3 +411,3 @@ if (_this3._aborted) {

_this3._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + _this3._offset));
_this3._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + _this3._offset), err);
};

@@ -411,0 +414,0 @@

import * as http from "http";
import * as https from "https";
import {parse} from "url";
import {Readable} from "stream";
import {Readable, Transform} from "stream";

@@ -20,4 +21,8 @@ function noop() {}

this.upload = {};
this.upload.onprogress = noop;
// Ignored field
this.withCredentials = false;
this.responseText = "";
}

@@ -40,3 +45,3 @@

let req = this._request = http.request(options);
let req = this._request = (options.protocol !== "https:")? http.request(options) : https.request(options);
req.on("response", (res) => {

@@ -54,3 +59,3 @@ this.status = res.statusCode;

if (body instanceof Readable) {
body.pipe(req);
body.pipe(new ProgressEmitter(this.upload.onprogress)).pipe(req);
} else {

@@ -70,4 +75,25 @@ req.end(body);

// ProgressEmitter is a simple PassThrough-style transform stream which keeps
// track of the number of bytes which have been piped through it and will
// invoke the `onprogress` function whenever new number are available.
class ProgressEmitter extends Transform {
constructor(onprogress) {
super();
this._onprogress = onprogress;
this._position = 0;
}
_transform(chunk, encoding, callback) {
this._position += chunk.length;
this._onprogress({
lengthComputable: true,
loaded: this._position
});
callback(null, chunk);
}
}
export function newRequest() {
return new Request();
}
/* global window */
import fingerprint from "./fingerprint";
import DetailedError from "./error";
import extend from "extend";

@@ -126,5 +127,4 @@

_emitXhrError(xhr, err) {
err.originalRequest = xhr;
this._emitError(err);
_emitXhrError(xhr, err, causingErr) {
this._emitError(new DetailedError(err, causingErr, xhr));
}

@@ -217,4 +217,4 @@

xhr.onerror = () => {
this._emitXhrError(xhr, new Error("tus: failed to create upload"));
xhr.onerror = (err) => {
this._emitXhrError(xhr, new Error("tus: failed to create upload"), err);
};

@@ -283,4 +283,4 @@

xhr.onerror = () => {
this._emitXhrError(xhr, new Error("tus: failed to resume upload"));
xhr.onerror = (err) => {
this._emitXhrError(xhr, new Error("tus: failed to resume upload"), err);
};

@@ -339,3 +339,3 @@

xhr.onerror = () => {
xhr.onerror = (err) => {
// Don't emit an error if the upload was aborted manually

@@ -346,3 +346,3 @@ if (this._aborted) {

this._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + this._offset));
this._emitXhrError(xhr, new Error("tus: failed to upload chunk at offset " + this._offset), err);
};

@@ -349,0 +349,0 @@

{
"name": "tus-js-client",
"version": "1.2.1",
"version": "1.3.0",
"description": "A pure JavaScript client for the tus resumable upload protocol",

@@ -5,0 +5,0 @@ "main": "lib.es5/index.js",

@@ -57,7 +57,2 @@ # tus-js-client [![Build Status](https://travis-ci.org/tus/tus-js-client.svg?branch=master)](https://travis-ci.org/tus/tus-js-client)

* The `onProgress` event handler will not be invoked during a request's body
is transmitted but only once a `PATCH` request is finished. Therefore, it may
only be emitted once, depending on the value of the `chunkSize` value. Basically,
it behaves very similar to the `onChunkComplete` event.
* As the Web Storage API is only available in browser environments,

@@ -64,0 +59,0 @@ tus-js-client will not be able store the URLs of created uploads allowing

@@ -94,3 +94,29 @@ /* global FakeBlob tus */

});
it("should add the request's body to errors", function () {
var file = new FakeBlob("hello world".split(""));
var err;
var options = {
endpoint: "/uploads",
onError: function (e) {
err = e;
}
};
var upload = new tus.Upload(file, options);
upload.start();
var req = jasmine.Ajax.requests.mostRecent();
expect(req.url).toBe("/uploads");
expect(req.method).toBe("POST");
req.respondWith({
status: 500,
responseText: "server_error"
});
expect(err.message).toBe("tus: unexpected response while creating upload, originated from request (response code: 500, response text: server_error)");
expect(err.originalRequest).toBeDefined();
});
});
});

@@ -216,3 +216,3 @@ /* global FakeBlob tus */

expect(err.message).toBe("tus: unexpected response while creating upload");
expect(err.message).toBe("tus: unexpected response while creating upload, originated from request (response code: 500, response text: )");
expect(err.originalRequest).toBeDefined();

@@ -219,0 +219,0 @@ expect(err.originalRequest.getResponseHeader("Custom")).toBe("blargh");

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc