diff --git a/packages/network-support/src/utils/store.ts b/packages/network-support/src/utils/store.ts index 0801d14b..195bc816 100644 --- a/packages/network-support/src/utils/store.ts +++ b/packages/network-support/src/utils/store.ts @@ -38,16 +38,23 @@ export class LocalStorageCache implements IStore { } async set(key: string, value: T): Promise { - const data = { - value, - expiry: this.ttl ? Date.now() + this.ttl : undefined, - }; - localStorage.setItem(key, JSON.stringify(data)); + const expiry = this.ttl ? Date.now() + this.ttl : undefined; + const data = { value, expiry }; + + try { + localStorage.setItem(key, JSON.stringify(data)); + } catch { + await this.cleanExpiredLocalStorage(); + } } async remove(key: string): Promise { localStorage.removeItem(key); } + + async cleanExpiredLocalStorage(): Promise { + await Promise.all(Object.entries(localStorage).map(async ([key]) => this.get(key))); + } } export class LRUCache implements IStore {