You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.5 KiB
64 lines
1.5 KiB
package main |
|
|
|
import ( |
|
"context" |
|
"flag" |
|
"fmt" |
|
"time" |
|
|
|
"lol.mleku.dev/chk" |
|
"lol.mleku.dev/log" |
|
"next.orly.dev/pkg/interfaces/signer/p8k" |
|
"next.orly.dev/pkg/encoders/event" |
|
"next.orly.dev/pkg/encoders/kind" |
|
"next.orly.dev/pkg/encoders/tag" |
|
"next.orly.dev/pkg/protocol/ws" |
|
) |
|
|
|
func main() { |
|
var err error |
|
url := flag.String("url", "ws://127.0.0.1:3334", "relay websocket URL") |
|
timeout := flag.Duration("timeout", 20*time.Second, "publish timeout") |
|
flag.Parse() |
|
|
|
// Minimal client that publishes a single kind 4678 event and reports OK/err |
|
var rl *ws.Client |
|
if rl, err = ws.RelayConnect(context.Background(), *url); chk.E(err) { |
|
log.E.F("connect error: %v", err) |
|
return |
|
} |
|
defer rl.Close() |
|
|
|
var signer *p8k.Signer |
|
if signer, err = p8k.New(); chk.E(err) { |
|
log.E.F("signer create error: %v", err) |
|
return |
|
} |
|
if err = signer.Generate(); chk.E(err) { |
|
log.E.F("signer generate error: %v", err) |
|
return |
|
} |
|
|
|
ev := &event.E{ |
|
CreatedAt: time.Now().Unix(), |
|
Kind: kind.K{K: 4678}.K, // arbitrary custom kind |
|
Tags: tag.NewS(), |
|
Content: []byte("policy test: expect rejection"), |
|
} |
|
if err = ev.Sign(signer); chk.E(err) { |
|
log.E.F("sign error: %v", err) |
|
return |
|
} |
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), *timeout) |
|
defer cancel() |
|
|
|
if err = rl.Publish(ctx, ev); err != nil { |
|
// Expected path if policy rejects: client returns error with reason (from OK false) |
|
fmt.Println("policy reject:", err) |
|
return |
|
} |
|
|
|
log.I.Ln("publish result: accepted") |
|
fmt.Println("ACCEPT") |
|
}
|
|
|