@trezor/connect-common
Version:
Collection of assets and utils used by trezor-connect library.
60 lines (59 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.storage = void 0;
const utils_1 = require("@trezor/utils");
const storageVersion = 2;
const storageName = `storage_v${storageVersion}`;
const getEmptyState = () => ({
origin: {}
});
let memoryStorage = getEmptyState();
const getPermanentStorage = () => {
const ls = localStorage.getItem(storageName);
return ls ? JSON.parse(ls) : getEmptyState();
};
class Storage extends utils_1.TypedEmitter {
save(getNewState, temporary = false) {
if (temporary || !global.window) {
memoryStorage = getNewState(memoryStorage);
return;
}
try {
const newState = getNewState(getPermanentStorage());
localStorage.setItem(storageName, JSON.stringify(newState));
this.emit('changed', newState);
} catch {
console.warn('long term storage not available');
memoryStorage = getNewState(memoryStorage);
}
}
saveForOrigin(getNewState, origin, temporary = false) {
this.save(state => ({
...state,
origin: {
...state.origin,
[origin]: getNewState(state.origin?.[origin] || {})
}
}), temporary);
}
load(temporary = false) {
if (temporary || !global?.window?.localStorage) {
return memoryStorage;
}
try {
return getPermanentStorage();
} catch {
console.warn('long term storage not available');
return memoryStorage;
}
}
loadForOrigin(origin, temporary = false) {
const state = this.load(temporary);
return state.origin?.[origin] || {};
}
}
const storage = new Storage();
exports.storage = storage;
//# sourceMappingURL=storage.js.map