From 21f9e75485ac54a7e350a92b3d402e33bf5f3d79 Mon Sep 17 00:00:00 2001 From: nick avlo Date: Wed, 21 Aug 2024 14:32:45 -0700 Subject: [PATCH] EventMessage "subscriptionId" related updates added required constructor parameter "subscriptionId" to EventMessageFactory added required arrayNode item "subscriptionId" to EventMessage encoder fixed CanonicalAuthenticationMessage decoder --- .../src/main/java/nostr/api/NIP01.java | 4 +-- .../nostr/api/factory/impl/NIP01Impl.java | 5 ++-- .../CanonicalAuthenticationMessage.java | 28 +++++++++++++++++-- .../nostr/event/message/EventMessage.java | 1 + 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/nostr-java-api/src/main/java/nostr/api/NIP01.java b/nostr-java-api/src/main/java/nostr/api/NIP01.java index 2e1a645ef..92a1e1016 100644 --- a/nostr-java-api/src/main/java/nostr/api/NIP01.java +++ b/nostr-java-api/src/main/java/nostr/api/NIP01.java @@ -226,9 +226,7 @@ public static Filters createFilters(List events, List a * @return an event message */ public static EventMessage createEventMessage(@NonNull IEvent event, @NonNull String subscriptionId) { - var result = new EventMessageFactory(event).create(); - result.setSubscriptionId(subscriptionId); - return result; + return new EventMessageFactory(event, subscriptionId).create(); } /** diff --git a/nostr-java-api/src/main/java/nostr/api/factory/impl/NIP01Impl.java b/nostr-java-api/src/main/java/nostr/api/factory/impl/NIP01Impl.java index d1eee0eee..b5b83453e 100644 --- a/nostr-java-api/src/main/java/nostr/api/factory/impl/NIP01Impl.java +++ b/nostr-java-api/src/main/java/nostr/api/factory/impl/NIP01Impl.java @@ -127,8 +127,9 @@ public static class EventMessageFactory extends MessageFactory { private final IEvent event; private String subscriptionId; - public EventMessageFactory(@NonNull IEvent event) { - this.event = event; + public EventMessageFactory(@NonNull IEvent event, @NonNull String subscriptionId) { + this.event = event; + this.subscriptionId = subscriptionId; } @Override diff --git a/nostr-java-event/src/main/java/nostr/event/message/CanonicalAuthenticationMessage.java b/nostr-java-event/src/main/java/nostr/event/message/CanonicalAuthenticationMessage.java index edd08191f..3599a1a10 100644 --- a/nostr-java-event/src/main/java/nostr/event/message/CanonicalAuthenticationMessage.java +++ b/nostr-java-event/src/main/java/nostr/event/message/CanonicalAuthenticationMessage.java @@ -7,16 +7,20 @@ import lombok.Getter; import lombok.NonNull; import lombok.Setter; +import lombok.SneakyThrows; import nostr.base.Command; import nostr.base.IEncoder; +import nostr.base.Relay; import nostr.event.BaseMessage; import nostr.event.impl.CanonicalAuthenticationEvent; +import nostr.event.impl.GenericEvent; +import nostr.event.impl.GenericTag; import nostr.event.json.codec.BaseEventEncoder; +import java.util.List; import java.util.Map; /** - * * @author eric */ @Setter @@ -39,8 +43,26 @@ public String encode() throws JsonProcessingException { new BaseEventEncoder<>(getEvent()).encode()))); } + @SneakyThrows public static T decode(@NonNull Map map, ObjectMapper mapper) { - var event = mapper.convertValue(map, new TypeReference() {}); - return (T) new CanonicalAuthenticationMessage(event); + var event = mapper.convertValue(map, new TypeReference() {}); + + List genericTags = event.getTags().stream() + .filter(GenericTag.class::isInstance) + .map(GenericTag.class::cast).toList(); + + CanonicalAuthenticationEvent canonEvent = new CanonicalAuthenticationEvent( + event.getPubKey(), + getAttributeValue(genericTags, "challenge"), + new Relay( + getAttributeValue(genericTags, "relay"))); + canonEvent.setId(map.get("id").toString()); + + return (T) new CanonicalAuthenticationMessage(canonEvent); + } + + private static String getAttributeValue(List genericTags, String attributeName) { + return genericTags.stream() + .filter(tag -> tag.getCode().equalsIgnoreCase(attributeName)).map(GenericTag::getAttributes).toList().get(0).get(0).getValue().toString(); } } \ No newline at end of file diff --git a/nostr-java-event/src/main/java/nostr/event/message/EventMessage.java b/nostr-java-event/src/main/java/nostr/event/message/EventMessage.java index e0ba7f80a..fcd430ac6 100644 --- a/nostr-java-event/src/main/java/nostr/event/message/EventMessage.java +++ b/nostr-java-event/src/main/java/nostr/event/message/EventMessage.java @@ -42,6 +42,7 @@ public String encode() throws JsonProcessingException { return IEncoder.MAPPER.writeValueAsString( getArrayNode() .add(getCommand()) + .add(getSubscriptionId()) .add(IEncoder.MAPPER.readTree( new BaseEventEncoder<>((BaseEvent)getEvent()).encode()))); }