New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

ng2-webstorage

Package Overview
Dependencies
Maintainers
1
Versions
28
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ng2-webstorage - npm Package Compare versions

Comparing version 1.2.5 to 1.3.0

bundles/core.umd.js

28

dist/app.js

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

"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {

@@ -8,27 +7,20 @@ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;

};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var core_1 = require('@angular/core');
var index_1 = require('./services/index');
__export(require('./decorators/index'));
__export(require('./services/index'));
__export(require('./helpers/keyStorage'));
var Ng2Webstorage = (function () {
import { NgModule } from '@angular/core';
import { LocalStorageService, SessionStorageService } from './services/index';
export * from './decorators/index';
export * from './interfaces/index';
export * from './services/index';
export * from './helpers/keyStorage';
export var Ng2Webstorage = (function () {
function Ng2Webstorage() {
}
Ng2Webstorage = __decorate([
core_1.NgModule({
NgModule({
declarations: [],
providers: [index_1.SessionStorageService, index_1.LocalStorageService],
providers: [SessionStorageService, LocalStorageService],
imports: []
}),
__metadata('design:paramtypes', [])
})
], Ng2Webstorage);
return Ng2Webstorage;
}());
exports.Ng2Webstorage = Ng2Webstorage;
//# sourceMappingURL=app.js.map
export declare const LIB_KEY: string;
export declare const LIB_KEY_SEPARATOR: string;
export declare const STORAGE_NAMES: {};
export declare const STORAGE_NAMES: {
[x: number]: string;
};

@@ -1,8 +0,7 @@

"use strict";
var storage_1 = require('../enums/storage');
exports.LIB_KEY = 'ng2-webstorage';
exports.LIB_KEY_SEPARATOR = '|';
exports.STORAGE_NAMES = (_a = {},
_a[storage_1.STORAGE.local] = 'local',
_a[storage_1.STORAGE.session] = 'session',
import { STORAGE } from '../enums/storage';
export var LIB_KEY = 'ng2-webstorage';
export var LIB_KEY_SEPARATOR = '|';
export var STORAGE_NAMES = (_a = {},
_a[STORAGE.local] = 'local',
_a[STORAGE.session] = 'session',
_a

@@ -9,0 +8,0 @@ );

@@ -1,8 +0,4 @@

"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./localStorage'));
__export(require('./sessionStorage'));
__export(require('./webStorage'));
export * from './localStorage';
export * from './sessionStorage';
export * from './webStorage';
//# sourceMappingURL=index.js.map

@@ -1,8 +0,6 @@

"use strict";
var webStorage_1 = require('./webStorage');
var storage_1 = require('../enums/storage');
function LocalStorage(webstorageKey) {
return webStorage_1.WebStorage(webstorageKey, storage_1.STORAGE.local);
import { WebStorage } from './webStorage';
import { STORAGE } from '../enums/storage';
export function LocalStorage(webstorageKey) {
return WebStorage(webstorageKey, STORAGE.local);
}
exports.LocalStorage = LocalStorage;
//# sourceMappingURL=localStorage.js.map

@@ -1,8 +0,6 @@

"use strict";
var webStorage_1 = require('./webStorage');
var storage_1 = require('../enums/storage');
function SessionStorage(webstorageKey) {
return webStorage_1.WebStorage(webstorageKey, storage_1.STORAGE.session);
import { WebStorage } from './webStorage';
import { STORAGE } from '../enums/storage';
export function SessionStorage(webstorageKey) {
return WebStorage(webstorageKey, STORAGE.session);
}
exports.SessionStorage = SessionStorage;
//# sourceMappingURL=sessionStorage.js.map

@@ -1,14 +0,13 @@

"use strict";
var index_1 = require('../helpers/index');
var index_2 = require('../helpers/index');
function WebStorage(webSKey, sType) {
import { KeyStorageHelper } from '../helpers/index';
import { WebStorageHelper } from '../helpers/index';
export function WebStorage(webSKey, sType) {
return function (targetedClass, raw) {
var key = webSKey || raw, sKey = index_1.KeyStorageHelper.genKey(key);
var key = webSKey || raw, sKey = KeyStorageHelper.genKey(key);
Object.defineProperty(targetedClass, raw, {
get: function () {
return index_2.WebStorageHelper.retrieve(sType, sKey);
return WebStorageHelper.retrieve(sType, sKey);
},
set: function (value) {
this[sKey] = value;
index_2.WebStorageHelper.store(sType, sKey, value);
WebStorageHelper.store(sType, sKey, value);
}

@@ -18,3 +17,2 @@ });

}
exports.WebStorage = WebStorage;
//# sourceMappingURL=webStorage.js.map

@@ -1,7 +0,6 @@

"use strict";
export var STORAGE;
(function (STORAGE) {
STORAGE[STORAGE["local"] = 0] = "local";
STORAGE[STORAGE["session"] = 1] = "session";
})(exports.STORAGE || (exports.STORAGE = {}));
var STORAGE = exports.STORAGE;
})(STORAGE || (STORAGE = {}));
//# sourceMappingURL=storage.js.map

@@ -1,8 +0,4 @@

"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./keyStorage'));
__export(require('./storageObserver'));
__export(require('./webStorage'));
export * from './keyStorage';
export * from './storageObserver';
export * from './webStorage';
//# sourceMappingURL=index.js.map

@@ -1,6 +0,5 @@

"use strict";
var lib_1 = require('../constants/lib');
var CUSTOM_LIB_KEY = lib_1.LIB_KEY;
var CUSTOM_LIB_KEY_SEPARATOR = lib_1.LIB_KEY_SEPARATOR;
var KeyStorageHelper = (function () {
import { LIB_KEY, LIB_KEY_SEPARATOR } from '../constants/lib';
var CUSTOM_LIB_KEY = LIB_KEY;
var CUSTOM_LIB_KEY_SEPARATOR = LIB_KEY_SEPARATOR;
export var KeyStorageHelper = (function () {
function KeyStorageHelper() {

@@ -17,7 +16,7 @@ }

KeyStorageHelper.setStorageKeyPrefix = function (key) {
if (key === void 0) { key = lib_1.LIB_KEY; }
if (key === void 0) { key = LIB_KEY; }
CUSTOM_LIB_KEY = key;
};
KeyStorageHelper.setStorageKeySeparator = function (separator) {
if (separator === void 0) { separator = lib_1.LIB_KEY_SEPARATOR; }
if (separator === void 0) { separator = LIB_KEY_SEPARATOR; }
CUSTOM_LIB_KEY_SEPARATOR = separator;

@@ -27,3 +26,2 @@ };

}());
exports.KeyStorageHelper = KeyStorageHelper;
//# sourceMappingURL=keyStorage.js.map

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

"use strict";
var MockStorageHelper = (function () {
export var MockStorageHelper = (function () {
function MockStorageHelper() {

@@ -9,3 +8,2 @@ }

MockStorageHelper.getStorage = function (sType) {
var self = this;
if (!this.mockStorages[sType])

@@ -58,3 +56,2 @@ this.mockStorages[sType] = MockStorageHelper.generateStorage();

}());
exports.MockStorageHelper = MockStorageHelper;
//# sourceMappingURL=mockStorage.js.map

@@ -1,4 +0,3 @@

"use strict";
var core_1 = require('@angular/core');
var StorageObserverHelper = (function () {
import { EventEmitter } from '@angular/core';
export var StorageObserverHelper = (function () {
function StorageObserverHelper() {

@@ -10,3 +9,3 @@ }

return this.observers[oKey];
return this.observers[oKey] = new core_1.EventEmitter();
return this.observers[oKey] = new EventEmitter();
};

@@ -24,3 +23,2 @@ StorageObserverHelper.emit = function (sType, sKey, value) {

}());
exports.StorageObserverHelper = StorageObserverHelper;
//# sourceMappingURL=storageObserver.js.map
import { IWebStorage } from '../interfaces/webStorage';
import { STORAGE } from '../enums/storage';
export declare class WebStorageHelper {
static cached: {};
static storageAvailability: {};
static cached: {
[x: number]: {};
};
static storageAvailability: {
[x: number]: any;
};
static store(sType: STORAGE, sKey: string, value: any): void;

@@ -7,0 +11,0 @@ static retrieve(sType: STORAGE, sKey: string): string;

@@ -1,8 +0,7 @@

"use strict";
var storage_1 = require('../enums/storage');
var storageObserver_1 = require('./storageObserver');
var keyStorage_1 = require('./keyStorage');
var mockStorage_1 = require('./mockStorage');
var lib_1 = require('../constants/lib');
var WebStorageHelper = (function () {
import { STORAGE } from '../enums/storage';
import { StorageObserverHelper } from './storageObserver';
import { KeyStorageHelper } from './keyStorage';
import { MockStorageHelper } from './mockStorage';
import { STORAGE_NAMES } from '../constants/lib';
export var WebStorageHelper = (function () {
function WebStorageHelper() {

@@ -13,3 +12,3 @@ }

this.cached[sType][sKey] = value;
storageObserver_1.StorageObserverHelper.emit(sType, sKey, value);
StorageObserverHelper.emit(sType, sKey, value);
};

@@ -31,7 +30,7 @@ WebStorageHelper.retrieve = function (sType, sKey) {

var storage = this.getStorage(sType);
keyStorage_1.KeyStorageHelper.retrieveKeysFromStorage(storage)
KeyStorageHelper.retrieveKeysFromStorage(storage)
.forEach(function (sKey) {
storage.removeItem(sKey);
delete _this.cached[sType][sKey];
storageObserver_1.StorageObserverHelper.emit(sType, sKey, null);
StorageObserverHelper.emit(sType, sKey, null);
});

@@ -42,6 +41,6 @@ };

delete this.cached[sType][sKey];
storageObserver_1.StorageObserverHelper.emit(sType, sKey, null);
StorageObserverHelper.emit(sType, sKey, null);
};
WebStorageHelper.getStorage = function (sType) {
return this.isStorageAvailable(sType) ? this.getWStorage(sType) : mockStorage_1.MockStorageHelper.getStorage(sType);
return this.isStorageAvailable(sType) ? this.getWStorage(sType) : MockStorageHelper.getStorage(sType);
};

@@ -51,6 +50,6 @@ WebStorageHelper.getWStorage = function (sType) {

switch (sType) {
case storage_1.STORAGE.local:
case STORAGE.local:
storage = localStorage;
break;
case storage_1.STORAGE.session:
case STORAGE.session:
storage = sessionStorage;

@@ -79,11 +78,10 @@ break;

if (!isAvailable)
console.warn(lib_1.STORAGE_NAMES[sType] + " storage unavailable, Ng2Webstorage will use a fallback strategy instead");
console.warn(STORAGE_NAMES[sType] + " storage unavailable, Ng2Webstorage will use a fallback strategy instead");
return this.storageAvailability[sType] = isAvailable;
};
WebStorageHelper.cached = (_a = {}, _a[storage_1.STORAGE.local] = {}, _a[storage_1.STORAGE.session] = {}, _a);
WebStorageHelper.storageAvailability = (_b = {}, _b[storage_1.STORAGE.local] = null, _b[storage_1.STORAGE.session] = null, _b);
WebStorageHelper.cached = (_a = {}, _a[STORAGE.local] = {}, _a[STORAGE.session] = {}, _a);
WebStorageHelper.storageAvailability = (_b = {}, _b[STORAGE.local] = null, _b[STORAGE.session] = null, _b);
return WebStorageHelper;
var _a, _b;
}());
exports.WebStorageHelper = WebStorageHelper;
//# sourceMappingURL=webStorage.js.map

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

"use strict";
export * from './webStorage';
export * from './storage';
//# sourceMappingURL=index.js.map

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

"use strict";
//# sourceMappingURL=storage.js.map

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

"use strict";
//# sourceMappingURL=webStorage.js.map

@@ -1,8 +0,4 @@

"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./webStorage'));
__export(require('./localStorage'));
__export(require('./sessionStorage'));
export * from './webStorage';
export * from './localStorage';
export * from './sessionStorage';
//# sourceMappingURL=index.js.map

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

"use strict";
var __extends = (this && this.__extends) || function (d, b) {

@@ -13,20 +12,15 @@ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];

};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var core_1 = require('@angular/core');
var storage_1 = require('../enums/storage');
var webStorage_1 = require('./webStorage');
var LocalStorageService = (function (_super) {
import { Injectable } from '@angular/core';
import { STORAGE } from '../enums/storage';
import { WebStorageService } from './webStorage';
export var LocalStorageService = (function (_super) {
__extends(LocalStorageService, _super);
function LocalStorageService() {
_super.call(this, storage_1.STORAGE.local);
_super.call(this, STORAGE.local);
}
LocalStorageService = __decorate([
core_1.Injectable(),
__metadata('design:paramtypes', [])
Injectable()
], LocalStorageService);
return LocalStorageService;
}(webStorage_1.WebStorageService));
exports.LocalStorageService = LocalStorageService;
}(WebStorageService));
//# sourceMappingURL=localStorage.js.map

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

"use strict";
var __extends = (this && this.__extends) || function (d, b) {

@@ -13,20 +12,15 @@ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];

};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var core_1 = require('@angular/core');
var storage_1 = require('../enums/storage');
var webStorage_1 = require('./webStorage');
var SessionStorageService = (function (_super) {
import { Injectable } from '@angular/core';
import { STORAGE } from '../enums/storage';
import { WebStorageService } from './webStorage';
export var SessionStorageService = (function (_super) {
__extends(SessionStorageService, _super);
function SessionStorageService() {
_super.call(this, storage_1.STORAGE.session);
_super.call(this, STORAGE.session);
}
SessionStorageService = __decorate([
core_1.Injectable(),
__metadata('design:paramtypes', [])
Injectable()
], SessionStorageService);
return SessionStorageService;
}(webStorage_1.WebStorageService));
exports.SessionStorageService = SessionStorageService;
}(WebStorageService));
//# sourceMappingURL=sessionStorage.js.map

@@ -1,4 +0,3 @@

"use strict";
var index_1 = require('../helpers/index');
var WebStorageService = (function () {
import { KeyStorageHelper, WebStorageHelper, StorageObserverHelper } from '../helpers/index';
export var WebStorageService = (function () {
function WebStorageService(sType) {

@@ -10,22 +9,21 @@ if (sType === void 0) { sType = null; }

WebStorageService.prototype.store = function (raw, value) {
var sKey = index_1.KeyStorageHelper.genKey(raw);
index_1.WebStorageHelper.store(this.sType, sKey, value);
var sKey = KeyStorageHelper.genKey(raw);
WebStorageHelper.store(this.sType, sKey, value);
};
WebStorageService.prototype.retrieve = function (raw) {
var sKey = index_1.KeyStorageHelper.genKey(raw);
return index_1.WebStorageHelper.retrieve(this.sType, sKey);
var sKey = KeyStorageHelper.genKey(raw);
return WebStorageHelper.retrieve(this.sType, sKey);
};
WebStorageService.prototype.clear = function (raw) {
if (raw)
index_1.WebStorageHelper.clear(this.sType, index_1.KeyStorageHelper.genKey(raw));
WebStorageHelper.clear(this.sType, KeyStorageHelper.genKey(raw));
else
index_1.WebStorageHelper.clearAll(this.sType);
WebStorageHelper.clearAll(this.sType);
};
WebStorageService.prototype.observe = function (raw) {
var sKey = index_1.KeyStorageHelper.genKey(raw);
return index_1.StorageObserverHelper.observe(this.sType, sKey);
var sKey = KeyStorageHelper.genKey(raw);
return StorageObserverHelper.observe(this.sType, sKey);
};
return WebStorageService;
}());
exports.WebStorageService = WebStorageService;
//# sourceMappingURL=webStorage.js.map

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

"use strict";
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(require('./dist/app'));
export * from './dist/app';
// # sourceMappingURL=index.js.map
{
"name": "ng2-webstorage",
"version": "1.2.5",
"description": "angular2 webstorage manager",
"main": "index.js",
"typings": "index.d.ts",
"devDependencies": {
"@angular/common": "^2.0.1",
"@angular/compiler": "^2.0.1",
"@angular/core": "^2.0.1",
"@angular/forms": "^2.0.1",
"@angular/platform-browser": "2.0.1",
"@angular/platform-browser-dynamic": "^2.0.1",
"compression-webpack-plugin": "^0.3.1",
"es6-shim": "^0.35.1",
"es6-symbol": "^3.0.2",
"es7-reflect-metadata": "^1.6.0",
"istanbul-instrumenter-loader": "^0.2.0",
"jasmine-core": "2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^1.0.1",
"karma-coverage": "^1.0.0",
"karma-jasmine": "^1.0.2",
"karma-mocha-reporter": "^2.0.3",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^1.7.0",
"remap-istanbul": "^0.6.4",
"rimraf": "^2.5.2",
"rxjs": "^5.0.0-beta.12",
"source-map-loader": "^0.1.5",
"ts-helpers": "^1.1.1",
"ts-loader": "^0.8.2",
"tslint": "^3.10.2",
"tslint-loader": "^2.1.4",
"typescript": "^1.8.10",
"webpack": "^1.13.1",
"webpack-dev-server": "^1.14.1",
"webpack-merge": "^0.13.0",
"zone.js": "^0.6.23"
},
"scripts": {
"tsc": "node node_modules/typescript/bin/tsc -d --outDir dist --sourceMap",
"clean": "node node_modules/rimraf/bin dist",
"prebuild": "npm run clean",
"build": "npm run tsc",
"dev": "webpack-dev-server --content-base example --port=8080 --hot --progress -c --config config/webpack.dev.js",
"dev2": "webpack-dev-server --content-base example --port=8081 --host 0.0.0.0 --hot --progress -c --config config/webpack.dev.js",
"test": "karma start",
"test:watch": "npm run test -- --auto-watch --no-single-run"
},
"repository": {
"type": "git",
"url": "git+https://github.com/PillowPillow/ng2-webstorage.git"
},
"keywords": [
"typescript",
"angular2",
"ng2",
"localstorage",
"sessionStorage"
],
"author": "Nicolas Gaignoux <https://github.com/PillowPillow>",
"license": "MIT",
"bugs": {
"url": "https://github.com/PillowPillow/ng2-webstorage/issues"
},
"homepage": "https://github.com/PillowPillow/ng2-webstorage#readme"
"name": "ng2-webstorage",
"version": "1.3.0",
"description": "angular2 webstorage manager",
"main": "bundles/core.umd.js",
"module": "index.js",
"typings": "index.d.ts",
"devDependencies": {
"@angular/common": "^2.0.1",
"@angular/compiler": "^2.0.1",
"@angular/core": "^2.0.1",
"@angular/forms": "^2.0.1",
"@angular/platform-browser": "2.0.1",
"@angular/platform-browser-dynamic": "^2.0.1",
"compression-webpack-plugin": "^0.3.1",
"es6-shim": "^0.35.1",
"es6-symbol": "^3.0.2",
"es7-reflect-metadata": "^1.6.0",
"istanbul-instrumenter-loader": "^0.2.0",
"jasmine-core": "2.4.1",
"karma": "^0.13.22",
"karma-chrome-launcher": "^1.0.1",
"karma-coverage": "^1.0.0",
"karma-jasmine": "^1.0.2",
"karma-mocha-reporter": "^2.0.3",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^1.7.0",
"remap-istanbul": "^0.6.4",
"rimraf": "^2.5.2",
"rollup": "^0.36.1",
"rxjs": "^5.0.0-beta.12",
"source-map-loader": "^0.1.5",
"ts-helpers": "^1.1.1",
"ts-loader": "^0.8.2",
"tslint": "^3.10.2",
"tslint-loader": "^2.1.4",
"typescript": "^2.0.3",
"webpack": "^1.13.1",
"webpack-dev-server": "^1.14.1",
"webpack-merge": "^0.13.0",
"zone.js": "^0.6.23"
},
"scripts": {
"tsc": "node node_modules/typescript/bin/tsc --p config/tsconfig.dist.json -d --rootDir lib --outDir dist",
"prebundle": "node node_modules/rollup/bin/rollup -c config/rollup.js",
"bundle": "uglifyjs --compress --mangle --output bundles/core.umd.min.js -- bundles/core.umd.js",
"clean": "node node_modules/rimraf/bin dist bundles",
"prebuild": "npm run clean",
"build": "npm run tsc && npm run bundle",
"dev": "webpack-dev-server --content-base example --port=8080 --hot --progress -c --config config/webpack.dev.js",
"dev2": "webpack-dev-server --content-base example --port=8081 --host 0.0.0.0 --hot --progress -c --config config/webpack.dev.js",
"test": "karma start",
"test:watch": "npm run test -- --auto-watch --no-single-run"
},
"repository": {
"type": "git",
"url": "git+https://github.com/PillowPillow/ng2-webstorage.git"
},
"keywords": [
"typescript",
"angular2",
"ng2",
"localstorage",
"sessionStorage"
],
"author": "Nicolas Gaignoux <https://github.com/PillowPillow>",
"license": "MIT",
"bugs": {
"url": "https://github.com/PillowPillow/ng2-webstorage/issues"
},
"homepage": "https://github.com/PillowPillow/ng2-webstorage#readme"
}

@@ -46,2 +46,17 @@ # ng2-webstorage

```
If you're using systemJS, you have to reference the umd version of the lib in your config.
```` typescript
System.config({
map: {
...,
ng2-webstorage': 'node_modules/ng2-webstorage'
},
packages: {
...,
'ng2-webstorage': {main: 'bundles/core.umd.js', defaultExtension: 'js'}
}
});
````

@@ -48,0 +63,0 @@ 3. Inject the services you want in your components and/or use the available decorators

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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