// internal/nostr/events/encoder.go package events import ( "github.com/nbd-wtf/go-nostr" "git.sovbit.dev/Enki/nostr-poster/internal/models" "git.sovbit.dev/Enki/nostr-poster/internal/utils" ) // EncodeEvent converts a nostr.Event to models.EventResponse with NIP-19 encoded IDs func EncodeEvent(event *nostr.Event, publishedRelays []string) (*models.EventResponse, error) { // Create the basic response response := &models.EventResponse{ ID: event.ID, Pubkey: event.PubKey, CreatedAt: int64(event.CreatedAt), Kind: event.Kind, Content: event.Content, Tags: convertTags(event.Tags), // Use a helper function to convert tags Relays: publishedRelays, } // Encode the event ID as nevent (with relay info) nevent, err := utils.EncodeEventAsNevent(event.ID, publishedRelays, event.PubKey) if err == nil { response.Nevent = nevent } // Encode the event ID as note (without relay info) note, err := utils.EncodeEventAsNote(event.ID) if err == nil { response.Note = note } // Encode the pubkey as npub npub, err := utils.EncodePubkey(event.PubKey) if err == nil { response.Npub = npub } return response, nil } // Helper function to convert nostr.Tags to [][]string func convertTags(tags nostr.Tags) [][]string { result := make([][]string, len(tags)) for i, tag := range tags { // Create a new string slice for each tag tagStrings := make([]string, len(tag)) for j, v := range tag { tagStrings[j] = v } result[i] = tagStrings } return result }