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