main.mx raw
1 package main
2
3 import (
4 "smesh.lol/web/common/jsbridge/ext"
5 )
6
7 // Signer extension background page. Persistent (MV2).
8 // Handles NIP-07, vault management, and signing requests.
9
10 func main() {
11 loadVault()
12 ext.OnMessage(handleMessage)
13 }
14
15 // handleMessage dispatches extension messages by method.
16 // respond must be called exactly once with the JSON result.
17 func handleMessage(method, paramsJSON string, senderTabID int, respond func(string)) {
18 ext.ConsoleLog("handleMessage: " + method)
19 switch method {
20 // NIP-07
21 case "getPublicKey":
22 respond(nip07GetPublicKey())
23 case "signEvent":
24 respond(nip07SignEvent(paramsJSON, senderTabID))
25 case "getRelays":
26 respond(nip07GetRelays())
27 case "nip04.encrypt":
28 respond(nip07Nip04Encrypt(paramsJSON))
29 case "nip04.decrypt":
30 respond(nip07Nip04Decrypt(paramsJSON))
31 case "nip44.encrypt":
32 respond(nip07Nip44Encrypt(paramsJSON))
33 case "nip44.decrypt":
34 respond(nip07Nip44Decrypt(paramsJSON))
35
36 // Management API (sm3sh modal) — some are async.
37 case "smesh.getVaultStatus":
38 respond(mgmtGetVaultStatus())
39 case "smesh.unlockVault":
40 mgmtUnlockVaultAsync(paramsJSON, respond)
41 case "smesh.lockVault":
42 respond(mgmtLockVault())
43 case "smesh.createVault":
44 mgmtCreateVaultAsync(paramsJSON, respond)
45 case "smesh.listIdentities":
46 respond(mgmtListIdentities())
47 case "smesh.switchIdentity":
48 respond(mgmtSwitchIdentity(paramsJSON))
49 case "smesh.addIdentity":
50 respond(mgmtAddIdentity(paramsJSON))
51 case "smesh.removeIdentity":
52 respond(mgmtRemoveIdentity(paramsJSON))
53 case "smesh.nsecLogin":
54 respond(mgmtNsecLogin(paramsJSON))
55 case "smesh.exportVault":
56 mgmtExportVaultAsync(paramsJSON, respond)
57 case "smesh.importVault":
58 mgmtImportVaultAsync(paramsJSON, respond)
59 case "smesh.getPermissions":
60 respond(mgmtGetPermissions())
61 case "smesh.setPermission":
62 respond(mgmtSetPermission(paramsJSON))
63 case "smesh.promptResponse":
64 respond(mgmtPromptResponse(paramsJSON))
65
66 // HD keychain
67 case "smesh.generateMnemonic":
68 respond(mgmtGenerateMnemonic())
69 case "smesh.validateMnemonic":
70 respond(mgmtValidateMnemonic(paramsJSON))
71 case "smesh.createHDVault":
72 mgmtCreateHDVaultAsync(paramsJSON, respond)
73 case "smesh.restoreHDVault":
74 mgmtRestoreHDVaultAsync(paramsJSON, respond)
75 case "smesh.deriveIdentity":
76 mgmtDeriveIdentityAsync(paramsJSON, respond)
77 case "smesh.getMnemonic":
78 respond(mgmtGetMnemonic())
79 case "smesh.probeAccount":
80 mgmtProbeAccountAsync(paramsJSON, respond)
81 case "smesh.isHD":
82 respond(mgmtIsHD())
83 case "smesh.resetExtension":
84 respond(mgmtResetExtension())
85
86 default:
87 respond("{\"error\":\"unknown method\"}")
88 }
89 }
90