From 483bf94ff483c93dbb8c6a203a963cbd5a52abb8 Mon Sep 17 00:00:00 2001 From: fiatjaf Date: Wed, 17 Jun 2026 11:39:30 -0300 Subject: [PATCH] support --jq flag on fetch and event commands. --- event.go | 35 ++++++++++++++++++++++++++++------- fetch.go | 24 +++++++++++++++++++++++- 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/event.go b/event.go index c5c7514..e5b4b97 100644 --- a/event.go +++ b/event.go @@ -90,6 +90,11 @@ example: Usage: "print the event enveloped in a [\"EVENT\", ...] message ready to be sent to a relay", Category: CATEGORY_EXTRAS, }, + &cli.StringFlag{ + Name: "jq", + Usage: "filter returned events with jq expression", + Category: CATEGORY_EXTRAS, + }, &cli.BoolFlag{ Name: "nevent", Usage: "print the nevent code (to stderr) after the event is published", @@ -182,6 +187,11 @@ example: return err } + jq, err := jqPrepare(c.String("jq")) + if err != nil { + return err + } + // then process input and generate events: // will reuse this @@ -401,15 +411,26 @@ example: } // print event as json - var result string - if c.Bool("envelope") { - j, _ := json.Marshal(nostr.EventEnvelope{Event: evt}) - result = string(j) + if jq == nil { + var result string + if c.Bool("envelope") { + j, _ := json.Marshal(nostr.EventEnvelope{Event: evt}) + result = string(j) + } else { + j, _ := easyjson.Marshal(&evt) + result = string(j) + } + stdout(result) } else { - j, _ := easyjson.Marshal(&evt) - result = string(j) + v, matches, err := jq(evt) + if err != nil { + return fmt.Errorf("jq filter failed: %w", err) + } + if matches { + out, _ := json.MarshalToString(v) + stdout(out) + } } - stdout(result) return publishFlow(ctx, c, kr, evt, relays) } diff --git a/fetch.go b/fetch.go index 32b6b0c..b14c492 100644 --- a/fetch.go +++ b/fetch.go @@ -24,9 +24,18 @@ var fetch = &cli.Command{ Aliases: []string{"r"}, Usage: "also use these relays to fetch from", }, + &cli.StringFlag{ + Name: "jq", + Usage: "filter returned events with jq expression", + }, ), ArgsUsage: "[nip05_or_nip19_code]", Action: func(ctx context.Context, c *cli.Command) error { + jq, err := jqPrepare(c.String("jq")) + if err != nil { + return err + } + for code := range getStdinLinesOrArguments(c.Args()) { filter := nostr.Filter{} var authorHint nostr.PubKey @@ -111,7 +120,20 @@ var fetch = &cli.Command{ Label: "nak-fetch", }) { found = true - stdout(ie.Event) + var out string + if jq == nil { + out = ie.Event.String() + } else { + v, matches, err := jq(ie.Event) + if err != nil { + return fmt.Errorf("jq filter failed: %w", err) + } + if !matches { + continue + } + out, _ = json.MarshalToString(v) + } + stdout(out) } if !found {