package main import ( "smesh.lol/web/common/jsbridge/ext" ) // Signer extension background page. Persistent (MV2). // Handles NIP-07, vault management, and signing requests. func main() { loadVault() ext.OnMessage(handleMessage) } // handleMessage dispatches extension messages by method. // respond must be called exactly once with the JSON result. func handleMessage(method, paramsJSON string, senderTabID int, respond func(string)) { ext.ConsoleLog("handleMessage: " + method) switch method { // NIP-07 case "getPublicKey": respond(nip07GetPublicKey()) case "signEvent": respond(nip07SignEvent(paramsJSON, senderTabID)) case "getRelays": respond(nip07GetRelays()) case "nip04.encrypt": respond(nip07Nip04Encrypt(paramsJSON)) case "nip04.decrypt": respond(nip07Nip04Decrypt(paramsJSON)) case "nip44.encrypt": respond(nip07Nip44Encrypt(paramsJSON)) case "nip44.decrypt": respond(nip07Nip44Decrypt(paramsJSON)) // Management API (sm3sh modal) — some are async. case "smesh.getVaultStatus": respond(mgmtGetVaultStatus()) case "smesh.unlockVault": mgmtUnlockVaultAsync(paramsJSON, respond) case "smesh.lockVault": respond(mgmtLockVault()) case "smesh.createVault": mgmtCreateVaultAsync(paramsJSON, respond) case "smesh.listIdentities": respond(mgmtListIdentities()) case "smesh.switchIdentity": respond(mgmtSwitchIdentity(paramsJSON)) case "smesh.addIdentity": respond(mgmtAddIdentity(paramsJSON)) case "smesh.removeIdentity": respond(mgmtRemoveIdentity(paramsJSON)) case "smesh.nsecLogin": respond(mgmtNsecLogin(paramsJSON)) case "smesh.exportVault": mgmtExportVaultAsync(paramsJSON, respond) case "smesh.importVault": mgmtImportVaultAsync(paramsJSON, respond) case "smesh.getPermissions": respond(mgmtGetPermissions()) case "smesh.setPermission": respond(mgmtSetPermission(paramsJSON)) case "smesh.promptResponse": respond(mgmtPromptResponse(paramsJSON)) // HD keychain case "smesh.generateMnemonic": respond(mgmtGenerateMnemonic()) case "smesh.validateMnemonic": respond(mgmtValidateMnemonic(paramsJSON)) case "smesh.createHDVault": mgmtCreateHDVaultAsync(paramsJSON, respond) case "smesh.restoreHDVault": mgmtRestoreHDVaultAsync(paramsJSON, respond) case "smesh.deriveIdentity": mgmtDeriveIdentityAsync(paramsJSON, respond) case "smesh.getMnemonic": respond(mgmtGetMnemonic()) case "smesh.probeAccount": mgmtProbeAccountAsync(paramsJSON, respond) case "smesh.isHD": respond(mgmtIsHD()) case "smesh.resetExtension": respond(mgmtResetExtension()) default: respond("{\"error\":\"unknown method\"}") } }