browser-crypto-secure-store
Version:
Securely store Crypto Keys in the browser
3 lines (2 loc) • 2.36 kB
JavaScript
var securestore=(()=>{var p=Object.defineProperty;var P=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var t in e)p(o,t,{get:e[t],enumerable:!0})},g=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of K(e))!l.call(o,s)&&s!==t&&p(o,s,{get:()=>e[s],enumerable:!(r=P(e,s))||r.enumerable});return o};var d=o=>g(p({},"__esModule",{value:!0}),o);var h={};u(h,{SecureStore:()=>m});var i=class{constructor(e,t){this._dbName="secure";this._storeName="store";e&&(this._dbName=e),t&&(this._storeName=t)}async set(e,t){await(await this.createStore(this._dbName,this._storeName))("readwrite",s=>(s.put(t,e),this.promisifyRequest(s.transaction)))}async get(e){return await(await this.createStore(this._dbName,this._storeName))("readonly",r=>this.promisifyRequest(r.get(e)))}async remove(e){await(await this.createStore(this._dbName,this._storeName))("readwrite",r=>this.promisifyRequest(r.delete(e)))}async getAllKeys(){return await(await this.createStore(this._dbName,this._storeName))("readonly",t=>this.promisifyRequest(t.getAllKeys()))}promisifyRequest(e){return new Promise((t,r)=>{e.oncomplete=e.onsuccess=()=>t(e.result),e.onabort=e.onerror=()=>r(e.error)})}async createStore(e,t){let r=indexedDB.open(e);r.onupgradeneeded=()=>r.result.createObjectStore(t);let s=await this.promisifyRequest(r);return async(a,n)=>{let c=s.transaction(t,a).objectStore(t);return await n(c)}}};var m=class{constructor({cryptoKeyPairStore:e,dbName:t,storeName:r}={}){this.cryptoKeyPairStore=e||new i(t,r)}async setKey({key:e,options:t={algorithm:{name:"ECDSA",namedCurve:"P-256"},extractable:!1,keyUsages:["sign","verify"]},ttl:r}){let{algorithm:s,extractable:a,keyUsages:n}=t,y=await window.crypto.subtle.generateKey(s,a,n);try{return await this.cryptoKeyPairStore.set(e,y),r&&await this.setTtl(e,r),y}catch(c){throw new Error(`Error storing key pair: ${c.message}`)}}async getKey(e){let t=await this.cryptoKeyPairStore.get(e);if(!t)throw new Error(`Key not found: ${e}`);return t}async removeKey(e){await this.cryptoKeyPairStore.remove(e)}async getAllKeys(){return await this.cryptoKeyPairStore.getAllKeys()}async setTtl(e,t){window.setTimeout(async()=>{await this.removeKey(e),console.log("Removed key: ",e)},t)}};return d(h);})();
//# sourceMappingURL=browser-crypto-secure-store.min.js.map