* Renamed `NWCClient` to `nwc.NewNWCClient(opts)` in `cmd/nwcclient/main.go`
* Added `RPCRaw` wrappers for NWC client methods in `pkg/protocol/nwc/methods.go`
**Updated walletcli main function**
* Updated the main function in `cmd/walletcli/main.go` to use new NWC client and RPCRaw wrappers
**Added new methods for walletcli**
* Added new methods for handling NWC client RPC calls, such as:
* `handleGetWalletServiceInfo`
* `handleMakeHoldInvoice`
* `handleSettleHoldInvoice`
* `handleCancelHoldInvoice`
**Code formatting and style changes**
* Formatted code according to Go standard
* Used consistent naming conventions and coding styles
**Other updates**
* Updated dependencies and imported packages accordingly
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package nwc
|
|
|
|
import (
|
|
"errors"
|
|
"net/url"
|
|
|
|
"orly.dev/pkg/crypto/p256k"
|
|
"orly.dev/pkg/utils/chk"
|
|
)
|
|
|
|
type ConnectionParams struct {
|
|
clientSecretKey []byte
|
|
walletPublicKey []byte
|
|
relays []string
|
|
}
|
|
|
|
// GetWalletPublicKey returns the wallet public key from the ConnectionParams.
|
|
func (c *ConnectionParams) GetWalletPublicKey() []byte {
|
|
return c.walletPublicKey
|
|
}
|
|
|
|
func ParseConnectionURI(nwcUri string) (parts *ConnectionParams, err error) {
|
|
var p *url.URL
|
|
if p, err = url.Parse(nwcUri); chk.E(err) {
|
|
return
|
|
}
|
|
parts = &ConnectionParams{}
|
|
if p.Scheme != "nostr+walletconnect" {
|
|
err = errors.New("incorrect scheme")
|
|
return
|
|
}
|
|
if parts.walletPublicKey, err = p256k.HexToBin(p.Host); chk.E(err) {
|
|
err = errors.New("invalid public key")
|
|
return
|
|
}
|
|
query := p.Query()
|
|
var ok bool
|
|
if parts.relays, ok = query["relay"]; !ok {
|
|
err = errors.New("missing relay parameter")
|
|
return
|
|
}
|
|
if len(parts.relays) == 0 {
|
|
return nil, errors.New("no relays")
|
|
}
|
|
var secret string
|
|
if secret = query.Get("secret"); secret == "" {
|
|
err = errors.New("missing secret parameter")
|
|
return
|
|
}
|
|
if parts.clientSecretKey, err = p256k.HexToBin(secret); chk.E(err) {
|
|
err = errors.New("invalid secret")
|
|
return
|
|
}
|
|
return
|
|
}
|