@reown/appkit-siwx
Version:
The chain agnostic tool to enable authentication for AppKit applications.
51 lines • 1.81 kB
JavaScript
/**
* This storage saves the sessions in the localStorage.
*/
export class LocalStorage {
constructor(params) {
this.key = params.key;
}
add(session) {
const sessions = this.getSessions();
sessions.push(session);
this.setSessions(sessions);
return Promise.resolve();
}
set(sessions) {
this.setSessions(sessions);
return Promise.resolve();
}
get(chainId, address) {
const allSessions = this.getSessions();
const validSessions = allSessions.filter(session => {
const isSameChain = session.data.chainId === chainId;
const isSameAddress = session.data.accountAddress === address;
const startsAt = session.data.notBefore || session.data.issuedAt;
if (startsAt && Date.parse(startsAt) > Date.now()) {
return false;
}
const endsAt = session.data.expirationTime;
if (endsAt && Date.now() > Date.parse(endsAt)) {
return false;
}
return isSameChain && isSameAddress;
});
return Promise.resolve(validSessions);
}
delete(chainId, address) {
const sessions = this.getSessions().filter(session => session.data.chainId !== chainId && session.data.accountAddress !== address);
this.setSessions(sessions);
return Promise.resolve();
}
getSessions() {
if (typeof localStorage === 'undefined') {
throw new Error('localStorage not available');
}
const stringItem = localStorage.getItem(this.key);
return stringItem ? JSON.parse(stringItem) : [];
}
setSessions(sessions) {
localStorage.setItem(this.key, JSON.stringify(sessions));
}
}
//# sourceMappingURL=LocalStorage.js.map