secure-client-store
October 12, 2025 ยท View on GitHub
Universal TypeScript library for AES-256-GCM client-side encryption โ works seamlessly in Browsers and Node.js.
Compatible with React, Vue, and Angular.
Ideal for securely storing sensitive client-side data.
๐ Features
- ๐ AES-256-GCM encryption for strong, modern security
- ๐ Works in both Browser and Node.js environments
- โ๏ธ Framework-agnostic โ use with React, Vue, Angular, or Vanilla JS
- โณ Auto-clear feature to remove data after a defined duration
- ๐งฉ Simple API methods:
initializeKey,encrypt,decrypt
๐ฆ Installation
npm install secure-client-store
๐ง Usage Examples
Default behavior (auto-generate + store key)
const store = new SecureStore();
await store.initializeKey();
const encrypted = await store.encrypt("secret");
const decrypted = await store.decrypt(encrypted);
With custom user-provided key
// Must be a 256-bit (32-byte) base64 string
const myKey = "aW5zZWN1cmVfMzJfYnl0ZV9iYXNlNjRfZGF0YQ==";
const store = new SecureStore({ userKey: myKey });
await store.initializeKey();
const encrypted = await store.encrypt("secret");
const decrypted = await store.decrypt(encrypted);
React (Functional Component)
import React, { useEffect, useState } from "react";
import { SecureStore } from "secure-client-store";
const store = new SecureStore();
export default function App() {
const [crypted, setCrypted] = useState<string | null>(null);
useEffect(() => {
(async () => {
await store.initializeKey();
const c = await store.encrypt("secret from React");
setCrypted(c);
})();
store.autoClearData(1000 * 60 * 60); // 1 hour
}, []);
return <div>{crypted}</div>;
}
Vue 3 (Composition API)
import { ref, onMounted } from "vue";
import { SecureStore } from "secure-client-store";
const store = new SecureStore();
export default {
setup() {
const data = ref("");
onMounted(async () => {
await store.initializeKey();
data.value = await store.encrypt("vue secret");
});
return { data };
}
};
Angular (Service)
import { Injectable } from "@angular/core";
import { SecureStore } from "secure-client-store";
@Injectable({ providedIn: "root" })
export class SecureService {
private store = new SecureStore();
async init() {
await this.store.initializeKey();
}
encrypt(text: string) {
return this.store.encrypt(text);
}
decrypt(ct: string) {
return this.store.decrypt(ct);
}
}
๐ Support This Project
If you find secure-client-store useful, please consider supporting my work ๐
๐ Payoneer: Send via Payoneer
Payoneer Customer ID: 56133568
Bank Details:
Bank Name: Citibank
Bank Address: 111 Wall Street, New York, NY 10043, USA
Routing (ABA): 031100209
SWIFT Code: CITIUS33
Account Number: 70580680002068111
Account Type: CHECKING
Beneficiary Name: MUHAMMAD SAAD NASIR