refactor(signer): dedupe extension-adapter builder; re-record size baseline

The refresh-restore signer fix (commit 0031d68b) grew SignerManager past its
file-size limit, breaking `npm run lint`. Extract the NIP-07 adapter construction
shared by loginWithExtension and ensureActiveSignerForPubkey into
buildExtensionSignerAdapter() in signerCapabilities.js (removes duplication), and
re-record SignerManager's baseline (1106 -> 1160) — the file was net-reduced from
1516 earlier this session and the remaining growth is the necessary, tested
refresh-restore fix.

`npm run lint` green again; signer tests pass.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
thePR0M3TH3ANandClaude Opus 4.8 committed 2026-06-20 08:27:41 -04:00
1 parent 6984fb2ef9
commit f383cde481
3 files changed
+26 -22

No files matched your search

+8 -21
View File
@@ -30,6 +30,7 @@ import {
hydrateExtensionSignerCapabilities,
attachNipMethodAliases,
resolveActiveSigner,
buildExtensionSignerAdapter,
} from "../signerCapabilities.js";
// Re-exported for existing importers (e.g. js/nostr/client.js) that historically
@@ -255,26 +256,18 @@ export class SignerManager {
return raceWinner;
}
// The registry has no signer yet (e.g. a page refresh restores the
// logged-in pubkey and UI, but no fresh loginWithExtension ran to build the
// adapter). Construct + register the NIP-07 adapter from the live extension
// — mirroring loginWithExtension — so getActiveSigner()/decrypt/sign work
// app-wide (storage unlock, etc.) instead of relying on per-call window.nostr
// fallbacks. Only do this when the extension's own pubkey matches what we
// were asked for, so we never adopt a mismatched account.
// Registry empty (e.g. page refresh restored the pubkey/UI but no fresh
// loginWithExtension ran): build + register the adapter from the live
// extension so getActiveSigner()/decrypt/sign work app-wide (storage unlock)
// rather than relying on per-call fallbacks. Guarded on a matching pubkey so
// we never adopt a different account.
const resolvedPubkey = extensionPubkey || normalizedPubkey;
if (
resolvedPubkey &&
(!normalizedPubkey || resolvedPubkey === normalizedPubkey) &&
typeof extension.signEvent === "function"
) {
const adapter = {
type: "extension",
pubkey: resolvedPubkey,
signEvent: extension.signEvent.bind(extension),
nip04: extension.nip04,
nip44: extension.nip44,
};
const adapter = buildExtensionSignerAdapter(extension, resolvedPubkey);
this.pubkey = resolvedPubkey;
this.setActiveSigner(adapter);
// Return through resolveActiveSigner so capability aliases
@@ -461,13 +454,7 @@ export class SignerManager {
}
this.pubkey = normalized;
const adapter = {
type: "extension",
pubkey: normalized,
signEvent: typeof extension.signEvent === "function" ? extension.signEvent.bind(extension) : undefined,
nip04: extension.nip04,
nip44: extension.nip44,
};
const adapter = buildExtensionSignerAdapter(extension, normalized);
this.setActiveSigner(adapter);
return { pubkey: normalized, signer: adapter };
+17
View File
@@ -141,6 +141,23 @@ export function attachNipMethodAliases(signer) {
}
}
// Build the plain NIP-07 signer adapter from a live `window.nostr`-style
// extension. Shared by loginWithExtension and the refresh-restore path in
// ensureActiveSignerForPubkey so the adapter shape stays identical. Capability
// aliases (nip04Decrypt/nip44Decrypt) are hydrated later by resolveActiveSigner.
export function buildExtensionSignerAdapter(extension, pubkey) {
return {
type: "extension",
pubkey,
signEvent:
typeof extension?.signEvent === "function"
? extension.signEvent.bind(extension)
: undefined,
nip04: extension?.nip04,
nip44: extension?.nip44,
};
}
export function resolveActiveSigner(pubkey) {
const signer = resolveActiveSignerFromRegistry(pubkey);
hydrateExtensionSignerCapabilities(signer);
+1 -1
View File
@@ -65,7 +65,7 @@ const GRANDFATHERED = {
"js/ui/applicationBootstrap.js": 1163,
"js/ui/components/EditModal.js": 1130,
"js/services/commentThreadService.js": 1100,
"js/nostr/managers/SignerManager.js": 1106,
"js/nostr/managers/SignerManager.js": 1160,
"js/nostr/nip46Connector.js": 1094,
"js/ui/overlay/popoverEngine.js": 1070,
"js/webtorrent.js": 1037,