handle-event-types.go raw
1 package app
2
3 import (
4 "next.orly.dev/pkg/nostr/encoders/envelopes/eventenvelope"
5 "next.orly.dev/pkg/nostr/encoders/envelopes/okenvelope"
6 "next.orly.dev/pkg/nostr/encoders/reason"
7 "next.orly.dev/pkg/event/authorization"
8 "next.orly.dev/pkg/event/routing"
9 "next.orly.dev/pkg/event/validation"
10 )
11
12 // sendValidationError sends an appropriate OK response for a validation failure.
13 func (l *Listener) sendValidationError(env eventenvelope.I, result validation.Result) error {
14 var r []byte
15 switch result.Code {
16 case validation.ReasonBlocked:
17 r = reason.Blocked.F(result.Msg)
18 case validation.ReasonInvalid:
19 r = reason.Invalid.F(result.Msg)
20 case validation.ReasonError:
21 r = reason.Error.F(result.Msg)
22 default:
23 r = reason.Error.F(result.Msg)
24 }
25 return okenvelope.NewFrom(env.Id(), false, r).Write(l)
26 }
27
28 // sendAuthorizationDenied sends an appropriate OK response for an authorization denial.
29 func (l *Listener) sendAuthorizationDenied(env eventenvelope.I, decision authorization.Decision) error {
30 var r []byte
31 if decision.RequireAuth {
32 r = reason.AuthRequired.F(decision.DenyReason)
33 } else {
34 r = reason.Blocked.F(decision.DenyReason)
35 }
36 return okenvelope.NewFrom(env.Id(), false, r).Write(l)
37 }
38
39 // sendRoutingError sends an appropriate OK response for a routing error.
40 func (l *Listener) sendRoutingError(env eventenvelope.I, result routing.Result) error {
41 if result.Error != nil {
42 return okenvelope.NewFrom(env.Id(), false, reason.Error.F(result.Error.Error())).Write(l)
43 }
44 return nil
45 }
46
47 // sendProcessingError sends an appropriate OK response for a processing failure.
48 func (l *Listener) sendProcessingError(env eventenvelope.I, msg string) error {
49 return okenvelope.NewFrom(env.Id(), false, reason.Error.F(msg)).Write(l)
50 }
51
52 // sendProcessingBlocked sends an appropriate OK response for a blocked event.
53 func (l *Listener) sendProcessingBlocked(env eventenvelope.I, msg string) error {
54 return okenvelope.NewFrom(env.Id(), false, reason.Blocked.F(msg)).Write(l)
55 }
56
57 // sendRawValidationError sends an OK response for raw JSON validation failure (before unmarshal).
58 // Since we don't have an event ID at this point, we pass nil.
59 func (l *Listener) sendRawValidationError(result validation.Result) error {
60 var r []byte
61 switch result.Code {
62 case validation.ReasonBlocked:
63 r = reason.Blocked.F(result.Msg)
64 case validation.ReasonInvalid:
65 r = reason.Invalid.F(result.Msg)
66 case validation.ReasonError:
67 r = reason.Error.F(result.Msg)
68 default:
69 r = reason.Error.F(result.Msg)
70 }
71 return okenvelope.NewFrom(nil, false, r).Write(l)
72 }
73