UNPKG

@anderson.tec12/utils

Version:

[![npm version](https://badge.fury.io/js/%40anderson.tec12%2Futils.svg)](https://badge.fury.io/js/%40anderson.tec12%2Futils) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

76 lines (75 loc) 3.18 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.secureStorage = void 0; class SecureStorage { constructor(secret) { this.encoder = new TextEncoder(); this.decoder = new TextDecoder(); this.secret = secret; } getKey() { return __awaiter(this, void 0, void 0, function* () { const keyMaterial = yield window.crypto.subtle.importKey('raw', this.encoder.encode(this.secret), 'PBKDF2', false, ['deriveKey']); return yield window.crypto.subtle.deriveKey({ name: 'PBKDF2', salt: this.encoder.encode('saltaqui123'), iterations: 100000, hash: 'SHA-256', }, keyMaterial, { name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt']); }); } setItem(key, value) { return __awaiter(this, void 0, void 0, function* () { const iv = window.crypto.getRandomValues(new Uint8Array(12)); const encoded = this.encoder.encode(JSON.stringify(value)); const cryptoKey = yield this.getKey(); const encrypted = yield window.crypto.subtle.encrypt({ name: 'AES-GCM', iv: iv, }, cryptoKey, encoded); const data = { iv: Array.from(iv), value: Array.from(new Uint8Array(encrypted)), }; localStorage.setItem(key, JSON.stringify(data)); }); } getItem(key) { return __awaiter(this, void 0, void 0, function* () { const item = localStorage.getItem(key); if (!item) return null; const data = JSON.parse(item); const iv = new Uint8Array(data.iv); const encryptedData = new Uint8Array(data.value); const cryptoKey = yield this.getKey(); try { const decrypted = yield window.crypto.subtle.decrypt({ name: 'AES-GCM', iv: iv, }, cryptoKey, encryptedData); return JSON.parse(this.decoder.decode(decrypted)); } catch (e) { console.error('Erro ao descriptografar:', e); return null; } }); } removeItem(key) { localStorage.removeItem(key); } clear() { localStorage.clear(); } } exports.secureStorage = new SecureStorage('08dc3b0a3a70de0e0b82a6168814f697');