Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions nostr-java-api/src/main/java/nostr/api/NIP01.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import nostr.api.factory.impl.NIP01Impl.ReplaceableEventFactory;
import nostr.api.factory.impl.NIP01Impl.ReqMessageFactory;
import nostr.api.factory.impl.NIP01Impl.TextNoteEventFactory;
import nostr.base.GenericTagQuery;
import nostr.base.IEvent;
import nostr.base.PublicKey;
import nostr.base.Relay;
Expand All @@ -29,7 +30,6 @@
import nostr.event.impl.Filters;
import nostr.event.list.EventList;
import nostr.event.list.FiltersList;
import nostr.event.list.GenericTagQueryList;
import nostr.event.list.KindList;
import nostr.event.list.PublicKeyList;
import nostr.event.message.CloseMessage;
Expand Down Expand Up @@ -206,15 +206,15 @@ public static PubKeyTag createPubKeyTag(@NonNull PublicKey publicKey, String mai
* @param until an integer unix timestamp in seconds, events must be older
* than this to pass
* @param limit maximum number of events to be returned in the initial query
* @param genericTagQueryList a generic tag query list
* @param genericTagQuery a generic tag query
* @return a filters object
*/
@Deprecated(forRemoval = true)
public static Filters createFilters(EventList events, PublicKeyList authors, KindList kinds, EventList referencedEvents, PublicKeyList referencePubKeys, Long since, Long until, Integer limit, GenericTagQueryList genericTagQueryList) {
public static Filters createFilters(EventList events, PublicKeyList authors, KindList kinds, EventList referencedEvents, PublicKeyList referencePubKeys, Long since, Long until, Integer limit, GenericTagQuery genericTagQuery) {
return Filters.builder()
.authors(authors)
.events(events)
.genericTagQueryList(genericTagQueryList)
.genericTagQuery(genericTagQuery)
.kinds(kinds).limit(limit)
.referencePubKeys(referencePubKeys)
.referencedEvents(referencedEvents)
Expand Down
7 changes: 5 additions & 2 deletions nostr-java-base/src/main/java/nostr/base/GenericTagQuery.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@

package nostr.base;

import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
*
* @author squirrel
Expand All @@ -17,7 +19,8 @@ public class GenericTagQuery implements IElement {
private List<String> value;

@Override
@JsonIgnore
public Integer getNip() {
return 1;
}
}
}
15 changes: 7 additions & 8 deletions nostr-java-event/src/main/java/nostr/event/impl/Filters.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,18 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import nostr.base.GenericTagQuery;
import nostr.base.annotation.Key;
import nostr.event.BaseEvent;
import nostr.event.json.deserializer.CustomGenericTagQueryListDeserializer;
import nostr.event.json.serializer.CustomGenericTagQueryListSerializer;
import nostr.event.json.deserializer.CustomGenericTagQueryDeserializer;
import nostr.event.json.serializer.CustomGenericTagQuerySerializer;
import nostr.event.json.serializer.CustomIdEventListSerializer;
import nostr.event.list.EventList;
import nostr.event.list.GenericTagQueryList;
import nostr.event.list.KindList;
import nostr.event.list.PublicKeyList;

Expand Down Expand Up @@ -63,9 +62,9 @@ public class Filters extends BaseEvent {
private Integer limit;

@Key(nip = 12)
@JsonSerialize(using=CustomGenericTagQueryListSerializer.class)
@JsonDeserialize(using=CustomGenericTagQueryListDeserializer.class)
private GenericTagQueryList genericTagQueryList;
@JsonSerialize(using=CustomGenericTagQuerySerializer.class)
@JsonDeserialize(using=CustomGenericTagQueryDeserializer.class)
private GenericTagQuery genericTagQuery;

@Override
public String toBech32() {
Expand All @@ -81,6 +80,6 @@ public Integer getNip() {
@Override
@JsonIgnore
public String getId() {
throw new UnsupportedOperationException("Not supported yet."); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/GeneratedMethodBody
throw new UnsupportedOperationException("Not supported.");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@ public BaseMessage decode() {
}
}
case "REQ" -> {
var filtersList = mapper.convertValue(msgArr[2], new TypeReference<FiltersList>() {
var len = msgArr.length - 2;
var filtersArr = new Object[len];
for (int i = 0; i < len; i++) {
filtersArr[i] = msgArr[i + 2];
}
var filtersList = mapper.convertValue(filtersArr, new TypeReference<FiltersList>() {
});
message = new ReqMessage(arg.toString(), filtersList);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
import lombok.AllArgsConstructor;
import lombok.Data;
Expand All @@ -12,6 +11,7 @@
import nostr.base.Relay;
import nostr.event.BaseEvent;
import nostr.event.BaseMessage;
import nostr.event.impl.Filters;
import nostr.event.impl.GenericMessage;
import nostr.event.message.CanonicalAuthenticationMessage;
import nostr.event.message.CloseMessage;
Expand All @@ -20,6 +20,8 @@
import nostr.event.message.RelayAuthenticationMessage;
import nostr.event.message.ReqMessage;

import java.util.List;

/**
* @author squirrel
*/
Expand All @@ -45,18 +47,16 @@ public String encode() {
} else if (message instanceof ReqMessage msg) {
arrayNode.add(msg.getSubscriptionId());
// Encode each filter individually and join them with a comma
ArrayNode filtersNode = JsonNodeFactory.instance.arrayNode();
msg.getFiltersList().getList().stream()
.map(filter -> {
try {
return IEncoder.MAPPER.valueToTree(filter);
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.map(n -> ((JsonNode) n))
.forEach(filtersNode::add);
arrayNode.add(filtersNode);
List<Filters> filtersList = msg.getFiltersList().getList();
for (Filters f : filtersList) {
try {
FiltersEncoder filtersEncoder = new FiltersEncoder(f, relay);
var filterNode = MAPPER.readTree(filtersEncoder.encode());
arrayNode.add(filterNode);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
} else if (message instanceof NoticeMessage msg) {
arrayNode.add(msg.getMessage());
} else if (message instanceof CloseMessage msg) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import lombok.Data;
import lombok.EqualsAndHashCode;
import nostr.base.IEncoder;
import nostr.base.Relay;
import nostr.event.impl.Filters;
import nostr.util.NostrException;
Expand All @@ -17,7 +16,6 @@

/**
* @author guilhermegps
*
*/
@Data
@EqualsAndHashCode(callSuper = false)
Expand All @@ -36,19 +34,30 @@ protected String toJson() throws NostrException {
try {
JsonNode node = IEncoder.MAPPER.valueToTree(getEvent());
ObjectNode objNode = (ObjectNode) node;
var arrayNode = (ArrayNode) node.get("genericTagQueryList");
if (arrayNode != null && !arrayNode.isNull()) {
for (JsonNode jn : arrayNode) {
//var arrayNode = (ArrayNode) node.get("genericTagQuery");
if (objNode != null && !objNode.isNull()) {
for (JsonNode jn : objNode) {
StreamSupport.stream(
Spliterators.spliteratorUnknownSize(jn.fields(), Spliterator.ORDERED), false)
Spliterators.spliteratorUnknownSize(jn.fields(), Spliterator.ORDERED), false)
.forEach(f -> {
objNode.set(f.getKey(), f.getValue());
if ("genericTagQuery".equals(f.getKey())) {
var mapper = new ObjectMapper();
try {
mapper.readTree(f.getValue().toString())
.fields()
.forEachRemaining(g -> objNode.set(g.getKey(), g.getValue()));
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
} else {
objNode.set(f.getKey(), f.getValue());
}
});
}
}
objNode.remove("genericTagQueryList");
objNode.remove("genericTagQuery");

return IEncoder.MAPPER.writeValueAsString(node);
return MAPPER.writeValueAsString(objNode);
} catch (JsonProcessingException | IllegalArgumentException e) {
throw new NostrException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import nostr.base.GenericTagQuery;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import nostr.base.GenericTagQuery;

public class CustomGenericTagQueryDeserializer extends JsonDeserializer<GenericTagQuery> {

Expand All @@ -28,7 +28,7 @@ public GenericTagQuery deserialize(JsonParser jsonParser, DeserializationContext
String tagName = field.getKey();
JsonNode valuesNode = field.getValue();
List<String> values = objectMapper.convertValue(valuesNode, ArrayList.class);
genericTagQuery.setTagName(tagName.charAt(1)); // Assuming tagName is always a single character preceded by '#'
genericTagQuery.setTagName(tagName.charAt(0)); // Assuming tagName is always a single character preceded by '#'
genericTagQuery.setValue(values);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,30 @@
package nostr.event.json.serializer;

import java.io.IOException;
import java.util.stream.Collectors;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.node.ObjectNode;

import nostr.base.GenericTagQuery;
import nostr.base.IEncoder;
import nostr.event.list.GenericTagQueryList;

import java.io.IOException;

/**
* @author guilhermegps
*
*/
public class CustomGenericTagQueryListSerializer extends JsonSerializer<GenericTagQueryList> {

@Override
public void serialize(GenericTagQueryList value, JsonGenerator gen, SerializerProvider serializers) {
try {
var list = value.getList().parallelStream().map(gtq -> toJson(gtq))
.collect(Collectors.toList());

gen.writePOJO(list);
} catch (IOException e) {
throw new RuntimeException(e);
public void serialize(GenericTagQueryList value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
for (GenericTagQuery gtq : value.getList()) {
JsonNode node = toJson(gtq);
gen.writeObjectField(node.fieldNames().next(), node.get(node.fieldNames().next()));
}
gen.writeEndObject();
}

private JsonNode toJson(GenericTagQuery gtq) {
Expand All @@ -39,8 +35,9 @@ private JsonNode toJson(GenericTagQuery gtq) {
objNode.set("#" + node.get("tagName").textValue(), node.get("value"));
objNode.remove("tagName");
objNode.remove("value");
objNode.remove("nip");

return node;
return node.get("genericTagQueryList").get(0);
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,18 @@
package nostr.event.json.serializer;

import java.io.IOException;
import java.io.Serial;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;

import nostr.base.GenericTagQuery;
import nostr.base.IEncoder;

import java.io.IOException;
import java.io.Serial;

/**
* @author guilhermegps
*
*/
public class CustomGenericTagQuerySerializer extends StdSerializer<GenericTagQuery> {

Expand All @@ -26,27 +24,15 @@ public CustomGenericTagQuerySerializer() {
}

@Override
public void serialize(GenericTagQuery value, JsonGenerator gen, SerializerProvider serializers) {
try {
gen.writePOJO(toJson(value));
} catch (IOException e) {
throw new RuntimeException(e);
}
}

private static JsonNode toJson(GenericTagQuery gtq) {
public void serialize(GenericTagQuery value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
var mapper = IEncoder.MAPPER;
try {
JsonNode node = mapper.valueToTree(gtq);
ObjectNode objNode = (ObjectNode) node;
objNode.set("#" + node.get("tagName").textValue(), node.get("value"));
objNode.remove("tagName");
objNode.remove("value");

return node;
} catch (IllegalArgumentException e) {
throw new RuntimeException(e);
}
JsonNode node = mapper.valueToTree(value);
ObjectNode objNode = (ObjectNode) node;
String attrName = "#" + value.getTagName();
objNode.set(attrName, node.get("value"));
objNode.remove("tagName");
objNode.remove("value");

gen.writeTree(objNode);
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package nostr.event.list;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Builder;
import lombok.NonNull;
import nostr.base.GenericTagQuery;
Expand All @@ -26,4 +27,10 @@ private GenericTagQueryList(@NonNull List<GenericTagQuery> list) {
super(list);
}

@Override
@JsonIgnore
public Integer getNip() {
return 1;
}

}
Loading