From 88031c888b999e455e9afb3f87b07ce391189a15 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Fri, 29 Aug 2025 16:24:58 -0300 Subject: [PATCH] wallet --stream --- go.mod | 4 ++-- go.sum | 4 ++++ wallet.go | 30 +++++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index f01fbe2..5e7fcdb 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.24.1 require ( fiatjaf.com/lib v0.3.1 - fiatjaf.com/nostr v0.0.0-20250818235102-c8d5aa703fab + fiatjaf.com/nostr v0.0.0-20250829192328-aa321f6e7f10 github.com/bep/debounce v1.2.1 github.com/btcsuite/btcd/btcec/v2 v2.3.5 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e @@ -21,7 +21,7 @@ require ( github.com/mdp/qrterminal/v3 v3.2.1 github.com/stretchr/testify v1.10.0 github.com/urfave/cli/v3 v3.0.0-beta1 - golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 + golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b golang.org/x/term v0.32.0 ) diff --git a/go.sum b/go.sum index 03adb20..7698af4 100644 --- a/go.sum +++ b/go.sum @@ -3,6 +3,8 @@ fiatjaf.com/lib v0.3.1 h1:/oFQwNtFRfV+ukmOCxfBEAuayoLwXp4wu2/fz5iHpwA= fiatjaf.com/lib v0.3.1/go.mod h1:Ycqq3+mJ9jAWu7XjbQI1cVr+OFgnHn79dQR5oTII47g= fiatjaf.com/nostr v0.0.0-20250818235102-c8d5aa703fab h1:zMp+G9Et5Z7ku/WUflZpmQzDIAB/Ah00Ms3cMtX9Pw4= fiatjaf.com/nostr v0.0.0-20250818235102-c8d5aa703fab/go.mod h1:j7AfnEAevFuLcpH4Y1RYM27sYJfshL3An6ZSAQNlUlY= +fiatjaf.com/nostr v0.0.0-20250829192328-aa321f6e7f10 h1:T1rQuoQgC6GwxJTLTDjli8ZauCtOa+BjybU3pxCN84w= +fiatjaf.com/nostr v0.0.0-20250829192328-aa321f6e7f10/go.mod h1:92kdTV0aFobQ14aq5IMpkYy3lGI8RUabMwN3Cfv/qmg= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/FastFilter/xorfilter v0.2.1 h1:lbdeLG9BdpquK64ZsleBS8B4xO/QW1IM0gMzF7KaBKc= github.com/FastFilter/xorfilter v0.2.1/go.mod h1:aumvdkhscz6YBZF9ZA/6O4fIoNod4YR50kIVGGZ7l9I= @@ -240,6 +242,8 @@ golang.org/x/exp v0.0.0-20250717185816-542afb5b7346 h1:vuCObX8mQzik1tfEcYxWZBuVs golang.org/x/exp v0.0.0-20250717185816-542afb5b7346/go.mod h1:A+z0yzpGtvnG90cToK5n2tu8UJVP2XUATh+r+sfOOOc= golang.org/x/exp v0.0.0-20250813145105-42675adae3e6 h1:SbTAbRFnd5kjQXbczszQ0hdk3ctwYf3qBNH9jIsGclE= golang.org/x/exp v0.0.0-20250813145105-42675adae3e6/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b h1:DXr+pvt3nC887026GRP39Ej11UATqWDmWuS99x26cD0= +golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b/go.mod h1:4QTo5u+SEIbbKW1RacMZq1YEfOBqeXa19JeshGi+zc4= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= diff --git a/wallet.go b/wallet.go index 102fb99..3f39815 100644 --- a/wallet.go +++ b/wallet.go @@ -34,6 +34,24 @@ func prepareWallet(ctx context.Context, c *cli.Command) (*nip60.Wallet, func(), w.Processed = func(evt nostr.Event, err error) { if err == nil { logverbose("processed event %s\n", evt) + + if c.Bool("stream") { + // after EOSE log updates and the new balance + select { + case <-w.Stable: + switch evt.Kind { + case 5: + log("- token deleted\n") + case 7375: + log("- token added\n") + default: + return + } + + log(" balance: %d\n", w.Balance()) + default: + } + } } else { log("error processing event %s: %s\n", evt, err) } @@ -87,15 +105,25 @@ var wallet = &cli.Command{ Usage: "displays the current wallet balance", Description: "all wallet data is stored on Nostr relays, signed and encrypted with the given key, and reloaded again from relays on every call.\n\nthe same data can be accessed by other compatible nip60 clients.", DisableSliceFlagSeparator: true, - Flags: defaultKeyFlags, + Flags: append(defaultKeyFlags, + &cli.BoolFlag{ + Name: "stream", + Usage: "keep listening for wallet-related events and logging them", + }, + ), Action: func(ctx context.Context, c *cli.Command) error { w, closew, err := prepareWallet(ctx, c) if err != nil { return err } + log("balance: ") stdout(w.Balance()) + if c.Bool("stream") { + <-ctx.Done() // this will hang forever + } + closew() return nil },