- cmd/lerproxy/app/bufpool.go - Removed bufferPool-related code and `Pool` struct - cmd/nwcclient/main.go - Renamed `Method` to `Capability` for clarity in method handling - pkg/utils/values/values.go - Added utility functions to return pointers for various types - pkg/utils/pointers/pointers.go - Revised documentation to reference `utils/values` package for pointer utilities - pkg/protocol/nwc/types.go - Replaced redundant types and structures with simplified versions - Introduced dedicated structs for `MakeInvoice`, `PayInvoice`, and related results - Refactored `Transaction` and its fields for consistent type usage - pkg/protocol/nwc/uri.go - Added `ParseConnectionURI` function for URI parsing and validation - pkg/protocol/nwc/client.go - Refactored `Client` struct to improve key management and relay handling - Introduced `Request` struct for generic method invocation payloads
50 lines
1.0 KiB
Go
50 lines
1.0 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
|
|
}
|
|
|
|
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
|
|
}
|