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.1.1 to 1.1.2

14

dist/tus.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(require,module,exports){
(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";

@@ -18,3 +18,3 @@

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

@@ -27,3 +27,3 @@

var _upload = require("./upload");
var _upload = _dereq_("./upload");

@@ -47,3 +47,3 @@ var _upload2 = _interopRequireDefault(_upload);

},{"./upload":3}],3:[function(require,module,exports){
},{"./upload":3}],3:[function(_dereq_,module,exports){
"use strict";

@@ -57,7 +57,7 @@

var _fingerprint = require("./fingerprint");
var _fingerprint = _dereq_("./fingerprint");
var _fingerprint2 = _interopRequireDefault(_fingerprint);
var _extend = require("extend");
var _extend = _dereq_("extend");

@@ -428,3 +428,3 @@ var _extend2 = _interopRequireDefault(_extend);

},{"./fingerprint":1,"extend":4}],4:[function(require,module,exports){
},{"./fingerprint":1,"extend":4}],4:[function(_dereq_,module,exports){
'use strict';

@@ -431,0 +431,0 @@

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

(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(require,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("-")}},{}],2:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defaultOptions=exports.isSupported=exports.Upload=undefined;var _upload=require("./upload");var _upload2=_interopRequireDefault(_upload);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var defaultOptions=_upload2.default.defaultOptions;var _window=window;var XMLHttpRequest=_window.XMLHttpRequest;var localStorage=_window.localStorage;var Blob=_window.Blob;var isSupported=XMLHttpRequest&&localStorage&&Blob&&typeof Blob.prototype.slice==="function";exports.Upload=_upload2.default;exports.isSupported=isSupported;exports.defaultOptions=defaultOptions},{"./upload":3}],3:[function(require,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=require("./fingerprint");var _fingerprint2=_interopRequireDefault(_fingerprint);var _extend=require("extend");var _extend2=_interopRequireDefault(_extend);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 _window=window;var localStorage=_window.localStorage;var btoa=_window.btoa;var defaultOptions={endpoint:"",fingerprint:_fingerprint2.default,resume:true,onProgress:null,onChunkComplete:null,onSuccess:null,onError:null,headers:{},chunkSize:Infinity,withCredentials: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}_createClass(Upload,[{key:"start",value:function start(){var file=this.file;if(!file){this._emitError(new Error("tus: no file to upload provided"));return}if(!this.options.endpoint){this._emitError(new Error("tus: no endpoint provided"));return}if(this.url!==null){this._resumeUpload();return}if(this.options.resume){this._fingerprint=this.options.fingerprint(file);var resumedUrl=localStorage.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._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=new XMLHttpRequest;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){localStorage.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.file.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=new XMLHttpRequest;xhr.open("HEAD",this.url,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){if(_this2.options.resume){localStorage.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}_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=new XMLHttpRequest;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 creating upload"));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._emitChunkComplete(offset-_this3._offset,offset,_this3.file.size);_this3._offset=offset;if(offset==_this3.file.size){_this3._emitProgress(offset,offset);_this3._emitSuccess();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.file.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.file.size}xhr.send(this.file.slice(start,end))}}]);return Upload}();function encodeMetadata(metadata){if(!("btoa"in window)){return""}var encoded=[];for(var key in metadata){encoded.push(key+" "+btoa(unescape(encodeURIComponent(metadata[key]))))}return encoded.join(",")}Upload.defaultOptions=defaultOptions;exports.default=Upload},{"./fingerprint":1,extend:4}],4:[function(require,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}},{}]},{},[2])(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.default=fingerprint;function fingerprint(file){return["tus",file.name,file.type,file.size,file.lastModified].join("-")}},{}],2:[function(_dereq_,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.defaultOptions=exports.isSupported=exports.Upload=undefined;var _upload=_dereq_("./upload");var _upload2=_interopRequireDefault(_upload);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{"default":obj}}var defaultOptions=_upload2.default.defaultOptions;var _window=window;var XMLHttpRequest=_window.XMLHttpRequest;var localStorage=_window.localStorage;var Blob=_window.Blob;var isSupported=XMLHttpRequest&&localStorage&&Blob&&typeof Blob.prototype.slice==="function";exports.Upload=_upload2.default;exports.isSupported=isSupported;exports.defaultOptions=defaultOptions},{"./upload":3}],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});var _fingerprint=_dereq_("./fingerprint");var _fingerprint2=_interopRequireDefault(_fingerprint);var _extend=_dereq_("extend");var _extend2=_interopRequireDefault(_extend);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 _window=window;var localStorage=_window.localStorage;var btoa=_window.btoa;var defaultOptions={endpoint:"",fingerprint:_fingerprint2.default,resume:true,onProgress:null,onChunkComplete:null,onSuccess:null,onError:null,headers:{},chunkSize:Infinity,withCredentials: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}_createClass(Upload,[{key:"start",value:function start(){var file=this.file;if(!file){this._emitError(new Error("tus: no file to upload provided"));return}if(!this.options.endpoint){this._emitError(new Error("tus: no endpoint provided"));return}if(this.url!==null){this._resumeUpload();return}if(this.options.resume){this._fingerprint=this.options.fingerprint(file);var resumedUrl=localStorage.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._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=new XMLHttpRequest;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){localStorage.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.file.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=new XMLHttpRequest;xhr.open("HEAD",this.url,true);xhr.onload=function(){if(!(xhr.status>=200&&xhr.status<300)){if(_this2.options.resume){localStorage.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}_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=new XMLHttpRequest;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 creating upload"));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._emitChunkComplete(offset-_this3._offset,offset,_this3.file.size);_this3._offset=offset;if(offset==_this3.file.size){_this3._emitProgress(offset,offset);_this3._emitSuccess();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.file.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.file.size}xhr.send(this.file.slice(start,end))}}]);return Upload}();function encodeMetadata(metadata){if(!("btoa"in window)){return""}var encoded=[];for(var key in metadata){encoded.push(key+" "+btoa(unescape(encodeURIComponent(metadata[key]))))}return encoded.join(",")}Upload.defaultOptions=defaultOptions;exports.default=Upload},{"./fingerprint":1,extend:4}],4:[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}},{}]},{},[2])(2)});
{
"name": "tus-js-client",
"version": "1.1.1",
"version": "1.1.2",
"description": "A pure JavaScript client for the tus resumable upload protocol",

@@ -30,2 +30,3 @@ "browser": "dist/tus.js",

"browserify": "^12.0.0",
"derequire": "^2.0.3",
"eslint": "^1.6.0",

@@ -35,3 +36,3 @@ "phantomjs": "^1.9.18",

"watchify": "^3.5.0",
"zuul": "^3.7.2"
"zuul": "^3.7.3"
},

@@ -42,3 +43,3 @@ "dependencies": {

"scripts": {
"build": "browserify lib/index.js -t [ babelify --presets [ es2015 ] ] -o dist/tus.js -s tus",
"build": "browserify lib/index.js -t [ babelify --presets [ es2015 ] ] -s tus | derequire > dist/tus.js",
"watch": "watchify lib/index.js -t babelify -o dist/tus.js -s tus -v",

@@ -45,0 +46,0 @@ "test": "./bin/test",

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