@exromany/lido-csm-sdk
Version:
[](https://github.com/lidofinance/lido-csm-sdk/blob/main/LICENSE.txt) [](h
68 lines • 1.99 kB
JavaScript
import { KEY_TTL_DURATION } from './constants.js';
// Low-level storage functions
const trySerializeToLocalStorage = (key, value) => {
try {
const item = JSON.stringify(value);
localStorage.setItem(key, item);
return { success: true };
}
catch (error) {
return {
success: false,
error: error,
};
}
};
const tryDeserializeFromLocalStorage = (key) => {
try {
const item = localStorage.getItem(key);
if (item === null) {
return {
success: false,
error: new Error(`Item with key "${key}" does not exist`),
};
}
const value = JSON.parse(item);
return { success: true, value };
}
catch (error) {
return {
success: false,
error: error,
};
}
};
// Error-swallowing wrappers for localStorage operations
export const saveToLocalStorage = (key, value) => {
const result = trySerializeToLocalStorage(key, value);
if (!result.success) {
console.error('[keys cache localStorage] save error:', result.error);
}
};
export const getFromLocalStorage = (key) => {
const result = tryDeserializeFromLocalStorage(key);
if (result.success) {
return result.value;
}
else {
if (!localStorage.getItem(key)) {
return null; // Item doesn't exist, don't log error
}
console.error('[keys cache localStorage] get error:', result.error);
return null;
}
};
export const isKeyExpired = (timestamp) => {
const now = Date.now();
const age = now - timestamp;
return age >= KEY_TTL_DURATION;
};
export const cleanExpiredKeys = (keys) => {
return Object.entries(keys).reduce((cleanedKeys, [pubKey, timestamp]) => {
if (!isKeyExpired(timestamp)) {
cleanedKeys[pubKey] = timestamp;
}
return cleanedKeys;
}, {});
};
//# sourceMappingURL=storage.js.map