mirror of
https://github.com/logos-messaging/logos-delivery-js.git
synced 2026-03-15 22:23:08 +00:00
74 lines
1.5 KiB
TypeScript
74 lines
1.5 KiB
TypeScript
|
|
import type { PartialPeerInfo, PeerCache } from "@waku/interfaces";
|
||
|
|
|
||
|
|
const isValidStoredPeer = (peer: unknown): boolean => {
|
||
|
|
return (
|
||
|
|
!!peer &&
|
||
|
|
typeof peer === "object" &&
|
||
|
|
"id" in peer &&
|
||
|
|
typeof peer.id === "string" &&
|
||
|
|
"multiaddrs" in peer &&
|
||
|
|
Array.isArray(peer.multiaddrs)
|
||
|
|
);
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* A noop cache that will be used in environments where localStorage is not available.
|
||
|
|
*/
|
||
|
|
class NoopCache implements PeerCache {
|
||
|
|
public get(): PartialPeerInfo[] {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
|
||
|
|
public set(_value: PartialPeerInfo[]): void {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
public remove(): void {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* A cache that uses localStorage to store peer information.
|
||
|
|
*/
|
||
|
|
class LocalStorageCache implements PeerCache {
|
||
|
|
public get(): PartialPeerInfo[] {
|
||
|
|
try {
|
||
|
|
const cachedPeers = localStorage.getItem("waku:peers");
|
||
|
|
const peers = cachedPeers ? JSON.parse(cachedPeers) : [];
|
||
|
|
|
||
|
|
return peers.filter(isValidStoredPeer);
|
||
|
|
} catch (e) {
|
||
|
|
return [];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public set(_value: PartialPeerInfo[]): void {
|
||
|
|
try {
|
||
|
|
localStorage.setItem("waku:peers", JSON.stringify(_value));
|
||
|
|
} catch (e) {
|
||
|
|
// ignore
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public remove(): void {
|
||
|
|
try {
|
||
|
|
localStorage.removeItem("waku:peers");
|
||
|
|
} catch (e) {
|
||
|
|
// ignore
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
export const defaultCache = (): PeerCache => {
|
||
|
|
try {
|
||
|
|
if (typeof localStorage !== "undefined") {
|
||
|
|
return new LocalStorageCache();
|
||
|
|
}
|
||
|
|
} catch (_e) {
|
||
|
|
// ignore
|
||
|
|
}
|
||
|
|
|
||
|
|
return new NoopCache();
|
||
|
|
};
|