Persist NIP-07 permissions between sessions

This commit is contained in:
thePR0M3TH3AN committed 2025-10-20 13:21:01 -04:00
1 parent 1f2161c789
commit 8393283cf8
2 files changed
+42 -1

No files matched your search

+17 -1
View File
@@ -3175,7 +3175,23 @@ export class NostrClient {
this.watchHistoryLastCreatedAt = 0;
this.countRequestCounter = 0;
this.countUnsupportedRelays = new Set();
const storedPermissions = readStoredNip07Permissions();
let storedPermissions = null;
const hasLocalStorage =
(typeof window !== "undefined" &&
window &&
typeof window.localStorage !== "undefined") ||
(typeof globalThis !== "undefined" &&
globalThis &&
typeof globalThis.localStorage !== "undefined");
if (hasLocalStorage) {
try {
storedPermissions = readStoredNip07Permissions();
} catch (error) {
storedPermissions = null;
}
}
this.extensionPermissionCache =
storedPermissions instanceof Set ? storedPermissions : new Set();
}
+25
View File
@@ -968,7 +968,18 @@ async function testEnsureExtensionPermissionCaching() {
const actor = "permission-actor";
const extension = installExtensionCrypto({ actor });
const previousCache = nostrClient.extensionPermissionCache;
let previousStoredPermissions = null;
if (typeof localStorage !== "undefined" && localStorage) {
try {
previousStoredPermissions = localStorage.getItem(
NIP07_PERMISSIONS_STORAGE_KEY,
);
} catch (error) {
previousStoredPermissions = null;
}
}
nostrClient.extensionPermissionCache = new Set();
clearStoredExtensionPermissions();
try {
const first = await nostrClient.ensureExtensionPermissions([
@@ -998,6 +1009,20 @@ async function testEnsureExtensionPermissionCaching() {
} finally {
extension.restore();
nostrClient.extensionPermissionCache = previousCache;
if (typeof localStorage !== "undefined" && localStorage) {
try {
if (previousStoredPermissions && previousStoredPermissions.length) {
localStorage.setItem(
NIP07_PERMISSIONS_STORAGE_KEY,
previousStoredPermissions,
);
} else {
clearStoredExtensionPermissions();
}
} catch (error) {
// ignore restore errors in tests
}
}
}
}