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

autocomplete-js

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

autocomplete-js - npm Package Compare versions

Comparing version 2.1.5 to 2.2.0

64

dist/autocomplete.js

@@ -5,7 +5,7 @@ (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.AutoComplete = 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){

*
* Autocomplete.js v2.1.5
* Autocomplete.js v2.2.0
* Developed by Baptiste Donaux
* https://autocomplete-js.com
* http://autocomplete-js.com
*
* (c) 2016, Baptiste Donaux
* (c) 2017, Baptiste Donaux
*/

@@ -18,2 +18,7 @@ "use strict";

})(ConditionOperator || (ConditionOperator = {}));
var EventType;
(function (EventType) {
EventType[EventType["KEYDOWN"] = 0] = "KEYDOWN";
EventType[EventType["KEYUP"] = 1] = "KEYUP";
})(EventType || (EventType = {}));
/**

@@ -57,8 +62,4 @@ * Core

focus: params._Focus.bind(params),
keyup: AutoComplete.prototype.event.bind(null, params),
keydown: function (event) {
if (event.keyCode == 38 || event.keyCode == 40) {
event.preventDefault();
}
},
keyup: AutoComplete.prototype.event.bind(null, params, EventType.KEYUP),
keydown: AutoComplete.prototype.event.bind(null, params, EventType.KEYDOWN),
position: params._Position.bind(params)

@@ -71,3 +72,16 @@ };

};
AutoComplete.prototype.event = function (params, event) {
AutoComplete.prototype.getEventsByType = function (params, type) {
var mappings = {};
for (var key in params.KeyboardMappings) {
var event = EventType.KEYUP;
if (params.KeyboardMappings[key].Event !== undefined) {
event = params.KeyboardMappings[key].Event;
}
if (event == type) {
mappings[key] = params.KeyboardMappings[key];
}
}
return mappings;
};
AutoComplete.prototype.event = function (params, type, event) {
var eventIdentifier = function (condition) {

@@ -96,3 +110,3 @@ if ((match === true && mapping.Operator == ConditionOperator.AND) || (match === false && mapping.Operator == ConditionOperator.OR)) {

};
for (var name in params.KeyboardMappings) {
for (var name in AutoComplete.prototype.getEventsByType(params, type)) {
var mapping = AutoComplete.merge({

@@ -103,3 +117,3 @@ Operator: ConditionOperator.AND

if (match === true) {
mapping.Callback.bind(params, event)();
mapping.Callback.call(params, event);
}

@@ -186,5 +200,6 @@ }

},
Operator: ConditionOperator.AND
Operator: ConditionOperator.AND,
Event: EventType.KEYUP
},
"KeyUpAndDown": {
"KeyUpAndDown_down": {
Conditions: [{

@@ -200,2 +215,17 @@ Is: 38,

event.preventDefault();
},
Operator: ConditionOperator.OR,
Event: EventType.KEYDOWN
},
"KeyUpAndDown_up": {
Conditions: [{
Is: 38,
Not: false
},
{
Is: 40,
Not: false
}],
Callback: function (event) {
event.preventDefault();
var first = this.DOMResults.querySelector("li:first-child:not(.locked)"), last = this.DOMResults.querySelector("li:last-child:not(.locked)"), active = this.DOMResults.querySelector("li.active");

@@ -220,3 +250,4 @@ if (active) {

},
Operator: ConditionOperator.OR
Operator: ConditionOperator.OR,
Event: EventType.KEYUP
},

@@ -246,3 +277,4 @@ "AlphaNum": {

},
Operator: ConditionOperator.AND
Operator: ConditionOperator.AND,
Event: EventType.KEYUP
}

@@ -249,0 +281,0 @@ },

/*
* @license MIT
*
* Autocomplete.js v2.1.5
* Autocomplete.js v2.2.0
* Developed by Baptiste Donaux
* https://autocomplete-js.com
* http://autocomplete-js.com
*
* (c) 2016, Baptiste Donaux
* (c) 2017, Baptiste Donaux
*/
(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.AutoComplete = 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";var ConditionOperator;!function(t){t[t.AND=0]="AND",t[t.OR=1]="OR"}(ConditionOperator||(ConditionOperator={}));var AutoComplete=function(){function t(e,i){if(void 0===e&&(e={}),void 0===i&&(i="[data-autocomplete]"),Array.isArray(i))i.forEach(function(i){new t(e,i)});else if("string"==typeof i){var o=document.querySelectorAll(i);Array.prototype.forEach.call(o,function(i){new t(e,i)})}else t.prototype.create(t.merge(t.defaults,e,{DOMResults:document.createElement("div")}),i)}return t.prototype.create=function(e,i){if(e.Input=i,e.Input.nodeName.match(/^INPUT$/i)&&(e.Input.hasAttribute("type")===!1||e.Input.getAttribute("type").match(/^TEXT|SEARCH$/i))){e.Input.setAttribute("autocomplete","off"),e._Position(e),e.Input.parentNode.appendChild(e.DOMResults),e.$Listeners={blur:e._Blur.bind(e),destroy:t.prototype.destroy.bind(null,e),focus:e._Focus.bind(e),keyup:t.prototype.event.bind(null,e),keydown:function(t){38!=t.keyCode&&40!=t.keyCode||t.preventDefault()},position:e._Position.bind(e)};for(var o in e.$Listeners)e.Input.addEventListener(o,e.$Listeners[o])}},t.prototype.event=function(e,i){var o=function(e){(s===!0&&r.Operator==ConditionOperator.AND||s===!1&&r.Operator==ConditionOperator.OR)&&(e=t.merge({Not:!1},e),e.hasOwnProperty("Is")?s=e.Is==i.keyCode?!e.Not:e.Not:e.hasOwnProperty("From")&&e.hasOwnProperty("To")&&(s=i.keyCode>=e.From&&i.keyCode<=e.To?!e.Not:e.Not))};for(var n in e.KeyboardMappings){var r=t.merge({Operator:ConditionOperator.AND},e.KeyboardMappings[n]),s=ConditionOperator.AND==r.Operator;r.Conditions.forEach(o),s===!0&&r.Callback.bind(e,i)()}},t.prototype.ajax=function(e,i,o){if(void 0===o&&(o=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),o===!0)e.$AjaxTimer=window.setTimeout(t.prototype.ajax.bind(null,e,i,!1),e.Delay);else{e.Request&&e.Request.abort();var n=Object.getOwnPropertyNames(e.HttpHeaders),r=e._HttpMethod(),s=e._Url(),a=e._QueryArg()+"="+e._Pre();r.match(/^GET$/i)&&(s+=s.indexOf("?")!==-1?"&"+a:"?"+a),e.Request=new XMLHttpRequest,e.Request.open(r,s,!0);for(var u=n.length-1;u>=0;u--)e.Request.setRequestHeader(n[u],e.HttpHeaders[n[u]]);e.Request.onreadystatechange=i,e.Request.send(a)}},t.prototype.destroy=function(t){for(var e in t.$Listeners)t.Input.removeEventListener(e,t.$Listeners[e]);t.DOMResults.parentNode.removeChild(t.DOMResults)},t.merge=function(){for(var t,e={},i=0;i<arguments.length;i++)for(t in arguments[i])e[t]=arguments[i][t];return e},t.defaults={Delay:150,EmptyMessage:"No result here",Highlight:{getRegex:function(t){return new RegExp(t,"ig")},transform:function(t){return"<strong>"+t+"</strong>"}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");null!==t&&(this._Select(t),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:ConditionOperator.AND},KeyUpAndDown:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault();var e=this.DOMResults.querySelector("li:first-child:not(.locked)"),i=this.DOMResults.querySelector("li:last-child:not(.locked)"),o=this.DOMResults.querySelector("li.active");if(o){var n=Array.prototype.indexOf.call(o.parentNode.children,o),r=n+(t.keyCode-39),s=this.DOMResults.getElementsByTagName("li").length;r<0?r=s-1:r>=s&&(r=0),o.classList.remove("active"),o.parentElement.children.item(r).classList.add("active")}else i&&38==t.keyCode?i.classList.add("active"):e&&e.classList.add("active")},Operator:ConditionOperator.OR},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),i=this._Pre();""!==i&&(e&&i==e||this.DOMResults.setAttribute("class","autocomplete open"),t.prototype.ajax(this,function(){4==this.Request.readyState&&200==this.Request.status&&(this._Render(this._Post(this.Request.response)),this._Open())}.bind(this)))},Operator:ConditionOperator.AND}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var t="";return t=this.Input.hasAttribute("data-autocomplete-empty-message")?this.Input.getAttribute("data-autocomplete-empty-message"):this.EmptyMessage!==!1?this.EmptyMessage:""},_Limit:function(){var t=this.Input.getAttribute("data-autocomplete-limit");return isNaN(t)||null===t?this.Limit:parseInt(t)},_Highlight:function(t){return t.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(t){if(void 0===t&&(t=!1),t)this.DOMResults.setAttribute("class","autocomplete");else{var e=this;setTimeout(function(){e._Blur(!0)},150)}},_Focus:function(){var t=this.Input.getAttribute("data-autocomplete-old-value");t&&this.Input.value==t||this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){"locked"!=e.getAttribute("class")&&(e.onclick=function(){t._Select(e)})})},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(t){var e;e="string"==typeof t?this._RenderRaw(t):this._RenderResponseItems(t),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(e)},_RenderResponseItems:function(t){var e=document.createElement("ul"),i=document.createElement("li"),o=this._Limit();o<0?t=t.reverse():0===o&&(o=t.length);for(var n=0;n<Math.min(Math.abs(o),t.length);n++)i.innerHTML=t[n].Label,i.setAttribute("data-autocomplete-value",t[n].Value),e.appendChild(i),i=document.createElement("li");return e},_RenderRaw:function(t){var e=document.createElement("ul"),i=document.createElement("li");if(t.length>0)this.DOMResults.innerHTML=t;else{var o=this._EmptyMessage();""!==o&&(i.innerHTML=o,i.setAttribute("class","locked"),e.appendChild(i))}return e},_Post:function(t){try{var e=[],i=JSON.parse(t);if(0===Object.keys(i).length)return"";if(Array.isArray(i))for(var o=0;o<Object.keys(i).length;o++)e[e.length]={Value:i[o],Label:this._Highlight(i[o])};else for(var n in i)e.push({Value:n,Label:this._Highlight(i[n])});return e}catch(e){return t}},_Pre:function(){return this.Input.value},_Select:function(t){t.hasAttribute("data-autocomplete-value")?this.Input.value=t.getAttribute("data-autocomplete-value"):this.Input.value=t.innerHTML,this.Input.setAttribute("data-autocomplete-old-value",this.Input.value)},$AjaxTimer:null,$Listeners:{}},t}();module.exports=AutoComplete;
"use strict";var ConditionOperator;!function(t){t[t.AND=0]="AND",t[t.OR=1]="OR"}(ConditionOperator||(ConditionOperator={}));var EventType;!function(t){t[t.KEYDOWN=0]="KEYDOWN",t[t.KEYUP=1]="KEYUP"}(EventType||(EventType={}));var AutoComplete=function(){function t(e,n){if(void 0===e&&(e={}),void 0===n&&(n="[data-autocomplete]"),Array.isArray(n))n.forEach(function(n){new t(e,n)});else if("string"==typeof n){var o=document.querySelectorAll(n);Array.prototype.forEach.call(o,function(n){new t(e,n)})}else t.prototype.create(t.merge(t.defaults,e,{DOMResults:document.createElement("div")}),n)}return t.prototype.create=function(e,n){if(e.Input=n,e.Input.nodeName.match(/^INPUT$/i)&&(e.Input.hasAttribute("type")===!1||e.Input.getAttribute("type").match(/^TEXT|SEARCH$/i))){e.Input.setAttribute("autocomplete","off"),e._Position(e),e.Input.parentNode.appendChild(e.DOMResults),e.$Listeners={blur:e._Blur.bind(e),destroy:t.prototype.destroy.bind(null,e),focus:e._Focus.bind(e),keyup:t.prototype.event.bind(null,e,EventType.KEYUP),keydown:t.prototype.event.bind(null,e,EventType.KEYDOWN),position:e._Position.bind(e)};for(var o in e.$Listeners)e.Input.addEventListener(o,e.$Listeners[o])}},t.prototype.getEventsByType=function(t,e){var n={};for(var o in t.KeyboardMappings){var i=EventType.KEYUP;void 0!==t.KeyboardMappings[o].Event&&(i=t.KeyboardMappings[o].Event),i==e&&(n[o]=t.KeyboardMappings[o])}return n},t.prototype.event=function(e,n,o){var i=function(e){(a===!0&&s.Operator==ConditionOperator.AND||a===!1&&s.Operator==ConditionOperator.OR)&&(e=t.merge({Not:!1},e),e.hasOwnProperty("Is")?a=e.Is==o.keyCode?!e.Not:e.Not:e.hasOwnProperty("From")&&e.hasOwnProperty("To")&&(a=o.keyCode>=e.From&&o.keyCode<=e.To?!e.Not:e.Not))};for(var r in t.prototype.getEventsByType(e,n)){var s=t.merge({Operator:ConditionOperator.AND},e.KeyboardMappings[r]),a=ConditionOperator.AND==s.Operator;s.Conditions.forEach(i),a===!0&&s.Callback.call(e,o)}},t.prototype.ajax=function(e,n,o){if(void 0===o&&(o=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),o===!0)e.$AjaxTimer=window.setTimeout(t.prototype.ajax.bind(null,e,n,!1),e.Delay);else{e.Request&&e.Request.abort();var i=Object.getOwnPropertyNames(e.HttpHeaders),r=e._HttpMethod(),s=e._Url(),a=e._QueryArg()+"="+e._Pre();r.match(/^GET$/i)&&(s+=s.indexOf("?")!==-1?"&"+a:"?"+a),e.Request=new XMLHttpRequest,e.Request.open(r,s,!0);for(var u=i.length-1;u>=0;u--)e.Request.setRequestHeader(i[u],e.HttpHeaders[i[u]]);e.Request.onreadystatechange=n,e.Request.send(a)}},t.prototype.destroy=function(t){for(var e in t.$Listeners)t.Input.removeEventListener(e,t.$Listeners[e]);t.DOMResults.parentNode.removeChild(t.DOMResults)},t.merge=function(){for(var t,e={},n=0;n<arguments.length;n++)for(t in arguments[n])e[t]=arguments[n][t];return e},t.defaults={Delay:150,EmptyMessage:"No result here",Highlight:{getRegex:function(t){return new RegExp(t,"ig")},transform:function(t){return"<strong>"+t+"</strong>"}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(){if(this.DOMResults.getAttribute("class").indexOf("open")!=-1){var t=this.DOMResults.querySelector("li.active");null!==t&&(this._Select(t),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:ConditionOperator.AND,Event:EventType.KEYUP},KeyUpAndDown_down:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault()},Operator:ConditionOperator.OR,Event:EventType.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault();var e=this.DOMResults.querySelector("li:first-child:not(.locked)"),n=this.DOMResults.querySelector("li:last-child:not(.locked)"),o=this.DOMResults.querySelector("li.active");if(o){var i=Array.prototype.indexOf.call(o.parentNode.children,o),r=i+(t.keyCode-39),s=this.DOMResults.getElementsByTagName("li").length;r<0?r=s-1:r>=s&&(r=0),o.classList.remove("active"),o.parentElement.children.item(r).classList.add("active")}else n&&38==t.keyCode?n.classList.add("active"):e&&e.classList.add("active")},Operator:ConditionOperator.OR,Event:EventType.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),n=this._Pre();""!==n&&(e&&n==e||this.DOMResults.setAttribute("class","autocomplete open"),t.prototype.ajax(this,function(){4==this.Request.readyState&&200==this.Request.status&&(this._Render(this._Post(this.Request.response)),this._Open())}.bind(this)))},Operator:ConditionOperator.AND,Event:EventType.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){var t="";return t=this.Input.hasAttribute("data-autocomplete-empty-message")?this.Input.getAttribute("data-autocomplete-empty-message"):this.EmptyMessage!==!1?this.EmptyMessage:""},_Limit:function(){var t=this.Input.getAttribute("data-autocomplete-limit");return isNaN(t)||null===t?this.Limit:parseInt(t)},_Highlight:function(t){return t.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(t){if(void 0===t&&(t=!1),t)this.DOMResults.setAttribute("class","autocomplete");else{var e=this;setTimeout(function(){e._Blur(!0)},150)}},_Focus:function(){var t=this.Input.getAttribute("data-autocomplete-old-value");t&&this.Input.value==t||this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){"locked"!=e.getAttribute("class")&&(e.onclick=function(){t._Select(e)})})},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(t){var e;e="string"==typeof t?this._RenderRaw(t):this._RenderResponseItems(t),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(e)},_RenderResponseItems:function(t){var e=document.createElement("ul"),n=document.createElement("li"),o=this._Limit();o<0?t=t.reverse():0===o&&(o=t.length);for(var i=0;i<Math.min(Math.abs(o),t.length);i++)n.innerHTML=t[i].Label,n.setAttribute("data-autocomplete-value",t[i].Value),e.appendChild(n),n=document.createElement("li");return e},_RenderRaw:function(t){var e=document.createElement("ul"),n=document.createElement("li");if(t.length>0)this.DOMResults.innerHTML=t;else{var o=this._EmptyMessage();""!==o&&(n.innerHTML=o,n.setAttribute("class","locked"),e.appendChild(n))}return e},_Post:function(t){try{var e=[],n=JSON.parse(t);if(0===Object.keys(n).length)return"";if(Array.isArray(n))for(var o=0;o<Object.keys(n).length;o++)e[e.length]={Value:n[o],Label:this._Highlight(n[o])};else for(var i in n)e.push({Value:i,Label:this._Highlight(n[i])});return e}catch(e){return t}},_Pre:function(){return this.Input.value},_Select:function(t){t.hasAttribute("data-autocomplete-value")?this.Input.value=t.getAttribute("data-autocomplete-value"):this.Input.value=t.innerHTML,this.Input.setAttribute("data-autocomplete-old-value",this.Input.value)},$AjaxTimer:null,$Listeners:{}},t}();module.exports=AutoComplete;
},{}]},{},[1])(1)
});
{
"name": "autocomplete-js",
"version": "2.1.5",
"version": "2.2.0",
"author": "support@autocomplete-js.com",

@@ -5,0 +5,0 @@ "license": "MIT",

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