2024-09-14 11:02:22 +08:00

54 lines
1.5 KiB
Go

package khatru29
import (
"github.com/fiatjaf/khatru"
"github.com/fiatjaf/relay29"
"github.com/nbd-wtf/go-nostr"
)
func Init(opts relay29.Options) (*khatru.Relay, *relay29.State) {
pubkey, _ := nostr.GetPublicKey(opts.SecretKey)
// create a new relay29.State
state := relay29.New(opts)
// create a new khatru relay
relay := khatru.NewRelay()
relay.Info.PubKey = pubkey
relay.Info.SupportedNIPs = append(relay.Info.SupportedNIPs, 29)
// assign khatru relay to relay29.State
state.Relay = relay
// provide GetAuthed function
state.GetAuthed = khatru.GetAuthed
// apply basic relay policies
relay.StoreEvent = append(relay.StoreEvent, state.DB.SaveEvent)
relay.QueryEvents = append(relay.QueryEvents,
state.NormalEventQuery,
state.MetadataQueryHandler,
state.AdminsQueryHandler,
state.MembersQueryHandler,
)
relay.DeleteEvent = append(relay.DeleteEvent, state.DB.DeleteEvent)
relay.RejectFilter = append(relay.RejectFilter,
state.RequireKindAndSingleGroupIDOrSpecificEventReference,
)
relay.RejectEvent = append(relay.RejectEvent,
state.RequireHTagForExistingGroup,
state.RequireModerationEventsToBeRecent,
state.RestrictWritesBasedOnGroupRules,
state.RestrictInvalidModerationActions,
state.PreventWritingOfEventsJustDeleted,
)
relay.OnEventSaved = append(relay.OnEventSaved,
state.ApplyModerationAction,
state.ReactToJoinRequest,
state.ReactToLeaveRequest,
)
relay.OnConnect = append(relay.OnConnect, khatru.RequestAuth)
return relay, state
}