@0xpolygonid/js-sdk
Version:
SDK to work with Polygon ID
65 lines (64 loc) • 2.02 kB
JavaScript
/**
* Allows storing keys in the local storage of the browser
* (NOT ENCRYPTED: DO NOT USE IN THE PRODUCTION)
*
* @public
* @class LocalStoragePrivateKeyStore
* @implements implements AbstractPrivateKeyStore interface
*/
export class LocalStoragePrivateKeyStore {
/**
* get all keys
*
* @abstract
* @returns `Promise<{ alias: string; key: string }[]>`
*/
list() {
const dataStr = localStorage.getItem(LocalStoragePrivateKeyStore.storageKey);
if (!dataStr) {
throw new Error('no key under given alias');
}
const data = JSON.parse(dataStr);
return data.map((i) => ({ alias: i.id, key: i.value }));
}
/**
* Gets key from the local storage
*
* @param {{ alias: string }} args
* @returns hex string
*/
async get(args) {
const dataStr = localStorage.getItem(LocalStoragePrivateKeyStore.storageKey);
if (!dataStr) {
throw new Error('no key under given alias');
}
const data = JSON.parse(dataStr);
const privateKey = data.find((d) => d.id === args.alias);
if (!privateKey) {
throw new Error('no key under given alias');
}
return privateKey.value;
}
/**
* Import key to the local storage
*
* @param {{ alias: string; key: string }} args - alias and private key in the hex
* @returns void
*/
async importKey(args) {
const dataStr = localStorage.getItem(LocalStoragePrivateKeyStore.storageKey);
let data = [];
if (dataStr) {
data = JSON.parse(dataStr);
}
const index = data.findIndex((d) => d.id === args.alias);
if (index > -1) {
data[index].value = args.key;
}
else {
data.push({ id: args.alias, value: args.key });
}
localStorage.setItem(LocalStoragePrivateKeyStore.storageKey, JSON.stringify(data));
}
}
LocalStoragePrivateKeyStore.storageKey = 'keystore';