diff --git a/nostr-java-api/pom.xml b/nostr-java-api/pom.xml
index c324dde9f..21777ec5e 100644
--- a/nostr-java-api/pom.xml
+++ b/nostr-java-api/pom.xml
@@ -4,7 +4,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-api
jar
diff --git a/nostr-java-api/src/main/java/module-info.java b/nostr-java-api/src/main/java/module-info.java
index 3290a781e..5238893c9 100644
--- a/nostr-java-api/src/main/java/module-info.java
+++ b/nostr-java-api/src/main/java/module-info.java
@@ -4,7 +4,6 @@
requires nostr.event;
requires nostr.id;
requires nostr.client;
- requires nostr.context;
requires nostr.encryption;
requires nostr.encryption.nip04dm;
requires nostr.encryption.nip44dm;
diff --git a/nostr-java-api/src/main/java/nostr/api/NostrIF.java b/nostr-java-api/src/main/java/nostr/api/NostrIF.java
index aecd93a6a..f297dfb21 100644
--- a/nostr-java-api/src/main/java/nostr/api/NostrIF.java
+++ b/nostr-java-api/src/main/java/nostr/api/NostrIF.java
@@ -3,8 +3,6 @@
import lombok.NonNull;
import nostr.base.IEvent;
import nostr.base.ISignable;
-import nostr.context.RequestContext;
-import nostr.event.BaseMessage;
import nostr.event.filter.Filters;
import nostr.event.impl.GenericEvent;
import nostr.id.Identity;
@@ -22,7 +20,6 @@ public interface NostrIF {
List sendRequest(@NonNull Filters filters, @NonNull String subscriptionId, Map relays);
List sendRequest(@NonNull List filtersList, @NonNull String subscriptionId);
List sendRequest(@NonNull List filtersList, @NonNull String subscriptionId, Map relays);
- List sendRequest(@NonNull BaseMessage message, @NonNull RequestContext context);
NostrIF sign(@NonNull Identity identity, @NonNull ISignable signable);
boolean verify(@NonNull GenericEvent event);
Identity getSender();
diff --git a/nostr-java-api/src/main/java/nostr/api/NostrSpringWebSocketClient.java b/nostr-java-api/src/main/java/nostr/api/NostrSpringWebSocketClient.java
index a2955c1d3..9cf09d1fc 100644
--- a/nostr-java-api/src/main/java/nostr/api/NostrSpringWebSocketClient.java
+++ b/nostr-java-api/src/main/java/nostr/api/NostrSpringWebSocketClient.java
@@ -5,9 +5,7 @@
import lombok.NonNull;
import nostr.base.IEvent;
import nostr.base.ISignable;
-import nostr.context.RequestContext;
import nostr.crypto.schnorr.Schnorr;
-import nostr.event.BaseMessage;
import nostr.event.filter.Filters;
import nostr.event.impl.GenericEvent;
import nostr.id.Identity;
@@ -116,11 +114,6 @@ public List sendRequest(@NonNull Filters filters, @NonNull String subscr
}
- @Override
- public List sendRequest(@NonNull BaseMessage message, @NonNull RequestContext context) {
- return List.of();
- }
-
@Override
public NostrIF sign(@NonNull Identity identity, @NonNull ISignable signable) {
identity.sign(signable);
diff --git a/nostr-java-base/pom.xml b/nostr-java-base/pom.xml
index 7a1f2e4b6..acf2f5122 100644
--- a/nostr-java-base/pom.xml
+++ b/nostr-java-base/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-base
diff --git a/nostr-java-client/pom.xml b/nostr-java-client/pom.xml
index 4aa6500ba..f2911d6ec 100644
--- a/nostr-java-client/pom.xml
+++ b/nostr-java-client/pom.xml
@@ -4,7 +4,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-client
jar
diff --git a/nostr-java-client/src/main/java/module-info.java b/nostr-java-client/src/main/java/module-info.java
index ff959a1f2..f897a28f3 100644
--- a/nostr-java-client/src/main/java/module-info.java
+++ b/nostr-java-client/src/main/java/module-info.java
@@ -4,7 +4,6 @@
requires java.logging;
requires nostr.util;
requires nostr.base;
- requires nostr.context;
requires com.fasterxml.jackson.core;
requires reactor.core;
requires spring.webflux;
diff --git a/nostr-java-crypto/pom.xml b/nostr-java-crypto/pom.xml
index ce4557a33..b0022724f 100644
--- a/nostr-java-crypto/pom.xml
+++ b/nostr-java-crypto/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-crypto
diff --git a/nostr-java-encryption-nip04/pom.xml b/nostr-java-encryption-nip04/pom.xml
index ced97d6bf..5c28eba3c 100644
--- a/nostr-java-encryption-nip04/pom.xml
+++ b/nostr-java-encryption-nip04/pom.xml
@@ -4,7 +4,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-encryption-nip04
diff --git a/nostr-java-encryption-nip44/pom.xml b/nostr-java-encryption-nip44/pom.xml
index bb95d4948..d50eb5b4c 100644
--- a/nostr-java-encryption-nip44/pom.xml
+++ b/nostr-java-encryption-nip44/pom.xml
@@ -4,7 +4,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-encryption-nip44
diff --git a/nostr-java-encryption/pom.xml b/nostr-java-encryption/pom.xml
index 169f58443..bc81e01bc 100644
--- a/nostr-java-encryption/pom.xml
+++ b/nostr-java-encryption/pom.xml
@@ -4,7 +4,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-encryption
diff --git a/nostr-java-event/pom.xml b/nostr-java-event/pom.xml
index 8a7b7c9c5..44581be69 100644
--- a/nostr-java-event/pom.xml
+++ b/nostr-java-event/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-event
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/AbstractFilterable.java b/nostr-java-event/src/main/java/nostr/event/filter/AbstractFilterable.java
new file mode 100644
index 000000000..5c60ee9d9
--- /dev/null
+++ b/nostr-java-event/src/main/java/nostr/event/filter/AbstractFilterable.java
@@ -0,0 +1,17 @@
+package nostr.event.filter;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+
+@Getter
+@EqualsAndHashCode
+public abstract class AbstractFilterable implements Filterable {
+ private final T filterable;
+ private final String filterKey;
+
+ protected AbstractFilterable(@NonNull T filterable, @NonNull String filterKey) {
+ this.filterable = filterable;
+ this.filterKey = filterKey;
+ }
+}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/AddressableTagFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/AddressableTagFilter.java
index b6181320b..1a8c7eeca 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/AddressableTagFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/AddressableTagFilter.java
@@ -14,13 +14,12 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;
-@EqualsAndHashCode
-public class AddressableTagFilter implements Filterable {
- public final static String filterKey = "#a";
- private final T addressableTag;
+@EqualsAndHashCode(callSuper = true)
+public class AddressableTagFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "#a";
public AddressableTagFilter(T addressableTag) {
- this.addressableTag = addressableTag;
+ super(addressableTag, FILTER_KEY);
}
@Override
@@ -28,16 +27,6 @@ public Predicate getPredicate() {
return this::compare;
}
- @Override
- public T getFilterCriterion() {
- return addressableTag;
- }
-
- @Override
- public String getFilterKey() {
- return filterKey;
- }
-
public static AddressTag createAddressTag(@NonNull JsonNode addressableTag) throws IllegalArgumentException {
try {
List list = Arrays.stream(addressableTag.asText().split(":")).toList();
@@ -56,6 +45,7 @@ public static AddressTag createAddressTag(@NonNull JsonNode addressableTag) thro
@Override
public String getFilterableValue() {
+ T addressableTag = getAddressableTag();
Integer kind = addressableTag.getKind();
String hexString = addressableTag.getPublicKey().toHexString();
String id = addressableTag.getIdentifierTag().getId();
@@ -66,14 +56,19 @@ public String getFilterableValue() {
}
private boolean compare(@NonNull GenericEvent genericEvent) {
+ T addressableTag = getAddressableTag();
return
!genericEvent.getPubKey().toHexString().equals(
- this.addressableTag.getPublicKey().toHexString()) ||
+ addressableTag.getPublicKey().toHexString()) ||
!genericEvent.getKind().equals(
- this.addressableTag.getKind()) ||
+ addressableTag.getKind()) ||
getTypeSpecificTags(IdentifierTag.class, genericEvent).stream()
.anyMatch(identifierTag ->
identifierTag.getId().equals(
- this.addressableTag.getIdentifierTag().getId()));
+ addressableTag.getIdentifierTag().getId()));
+ }
+
+ private T getAddressableTag() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/AuthorFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/AuthorFilter.java
index dfd0d185a..8ea0a704f 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/AuthorFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/AuthorFilter.java
@@ -6,33 +6,26 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class AuthorFilter implements Filterable {
- public final static String filterKey = "authors";
- private final T publicKey;
+@EqualsAndHashCode(callSuper = true)
+public class AuthorFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "authors";
public AuthorFilter(T publicKey) {
- this.publicKey = publicKey;
+ super(publicKey, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- this.publicKey.toHexString().equals(genericEvent.getPubKey().toHexString());
+ genericEvent.getPubKey().toHexString().equals(getFilterableValue());
}
@Override
- public T getFilterCriterion() {
- return publicKey;
- }
-
- @Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getAuthor().toHexString();
}
- @Override
- public String getFilterableValue() {
- return publicKey.toHexString();
+ private T getAuthor() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/EventFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/EventFilter.java
index c6fae8a50..d4c3a4174 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/EventFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/EventFilter.java
@@ -5,33 +5,26 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class EventFilter implements Filterable {
- public final static String filterKey = "ids";
- private final T event;
+@EqualsAndHashCode(callSuper = true)
+public class EventFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "ids";
public EventFilter(T event) {
- this.event = event;
+ super(event, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- this.event.getId().equals(genericEvent.getId());
+ genericEvent.getId().equals(getFilterableValue());
}
@Override
- public T getFilterCriterion() {
- return event;
- }
-
- @Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getEvent().getId();
}
- @Override
- public String getFilterableValue() {
- return event.getId();
+ private T getEvent() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/Filterable.java b/nostr-java-event/src/main/java/nostr/event/filter/Filterable.java
index 002ded0ba..70654ee32 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/Filterable.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/Filterable.java
@@ -14,7 +14,7 @@ public interface Filterable {
ObjectMapper mapper = new ObjectMapper();
Predicate getPredicate();
- T getFilterCriterion();
+ T getFilterable();
Object getFilterableValue();
String getFilterKey();
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/Filters.java b/nostr-java-event/src/main/java/nostr/event/filter/Filters.java
index 65e1a12e5..73fb75f42 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/Filters.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/Filters.java
@@ -7,17 +7,15 @@
import java.util.List;
import java.util.Map;
-import java.util.Objects;
import static java.util.stream.Collectors.groupingBy;
+@Getter
@EqualsAndHashCode
public class Filters {
public static final int DEFAULT_FILTERS_LIMIT = 10;
- @Getter
private final Map> filtersMap;
- @Getter
@Setter
private Integer limit = DEFAULT_FILTERS_LIMIT;
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/GenericTagQueryFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/GenericTagQueryFilter.java
index 324ba6557..f0fdbda68 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/GenericTagQueryFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/GenericTagQueryFilter.java
@@ -6,15 +6,14 @@
import nostr.event.impl.GenericEvent;
import nostr.event.impl.GenericTag;
-import java.util.HashSet;
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class GenericTagQueryFilter implements Filterable {
- private final T genericTagQuery;
+@EqualsAndHashCode(callSuper = true)
+public class GenericTagQueryFilter extends AbstractFilterable {
+ public static final String HASH_PREFIX = "#";
public GenericTagQueryFilter(T genericTagQuery) {
- this.genericTagQuery = genericTagQuery;
+ super(genericTagQuery, genericTagQuery.getTagName());
}
@Override
@@ -22,27 +21,32 @@ public Predicate getPredicate() {
return (genericEvent) ->
getTypeSpecificTags(GenericTag.class, genericEvent).stream()
.filter(genericTag ->
- genericTag.getCode().equals(this.genericTagQuery.getTagName()))
+ genericTag.getCode().equals(stripLeadingHashTag()))
.anyMatch(genericTag ->
- new HashSet<>(genericTag
+ genericTag
.getAttributes().stream().map(
- ElementAttribute::getValue).toList())
+ ElementAttribute::getValue).toList()
.contains(
- this.genericTagQuery.getValue()));
- }
-
- @Override
- public T getFilterCriterion() {
- return genericTagQuery;
+ getFilterableValue()));
}
@Override
public String getFilterKey() {
- return genericTagQuery.getTagName();
+ return getGenericTagQuery().getTagName();
}
@Override
public String getFilterableValue() {
- return genericTagQuery.getValue();
+ return getGenericTagQuery().getValue();
+ }
+
+ private T getGenericTagQuery() {
+ return super.getFilterable();
+ }
+
+ private String stripLeadingHashTag() {
+ return getFilterKey().startsWith(HASH_PREFIX) ?
+ getFilterKey().substring(1) :
+ getFilterKey();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/GeohashTagFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/GeohashTagFilter.java
new file mode 100644
index 000000000..9c31bc1ef
--- /dev/null
+++ b/nostr-java-event/src/main/java/nostr/event/filter/GeohashTagFilter.java
@@ -0,0 +1,32 @@
+package nostr.event.filter;
+
+import lombok.EqualsAndHashCode;
+import nostr.event.impl.GenericEvent;
+import nostr.event.tag.GeohashTag;
+
+import java.util.function.Predicate;
+
+@EqualsAndHashCode(callSuper = true)
+public class GeohashTagFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "#g";
+
+ public GeohashTagFilter(T geohashTag) {
+ super(geohashTag, FILTER_KEY);
+ }
+
+ @Override
+ public Predicate getPredicate() {
+ return (genericEvent) ->
+ getTypeSpecificTags(GeohashTag.class, genericEvent).stream().anyMatch(geoHashTag ->
+ geoHashTag.getLocation().equals(getFilterableValue()));
+ }
+
+ @Override
+ public String getFilterableValue() {
+ return getGeoHashTag().getLocation();
+ }
+
+ private T getGeoHashTag() {
+ return super.getFilterable();
+ }
+}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/IdentifierTagFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/IdentifierTagFilter.java
index 6efc2b1ff..b746e7269 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/IdentifierTagFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/IdentifierTagFilter.java
@@ -6,34 +6,27 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class IdentifierTagFilter implements Filterable {
- public final static String filterKey = "#d";
- private final T identifierTag;
-
+@EqualsAndHashCode(callSuper = true)
+public class IdentifierTagFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "#d";
public IdentifierTagFilter(T identifierTag) {
- this.identifierTag = identifierTag;
+ super(identifierTag, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- getTypeSpecificTags(IdentifierTag.class, genericEvent).stream().anyMatch(genericEventIdentifiterTag ->
- genericEventIdentifiterTag.getId().equals(this.identifierTag.getId()));
- }
-
- @Override
- public T getFilterCriterion() {
- return identifierTag;
+ getTypeSpecificTags(IdentifierTag.class, genericEvent).stream()
+ .anyMatch(genericEventIdentifierTag ->
+ genericEventIdentifierTag.getId().equals(getFilterableValue()));
}
@Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getIdentifierTag().getId();
}
- @Override
- public String getFilterableValue() {
- return identifierTag.getId();
+ private T getIdentifierTag() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/KindFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/KindFilter.java
index d018a913d..5c2765e8a 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/KindFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/KindFilter.java
@@ -7,24 +7,18 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class KindFilter implements Filterable {
- public final static String filterKey = "kinds";
- private final T kind;
+@EqualsAndHashCode(callSuper = true)
+public class KindFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "kinds";
public KindFilter(T kind) {
- this.kind = kind;
+ super(kind, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- genericEvent.getKind().equals(this.kind.getValue());
- }
-
- @Override
- public T getFilterCriterion() {
- return kind;
+ genericEvent.getKind().equals(getFilterableValue());
}
@Override
@@ -35,12 +29,11 @@ public void addToArrayNode(ArrayNode arrayNode) {
}
@Override
- public String getFilterKey() {
- return filterKey;
+ public Integer getFilterableValue() {
+ return getKind().getValue();
}
- @Override
- public Integer getFilterableValue() {
- return kind.getValue();
+ private T getKind() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/ReferencedEventFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/ReferencedEventFilter.java
index 4ac62b0db..352d638eb 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/ReferencedEventFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/ReferencedEventFilter.java
@@ -6,13 +6,12 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class ReferencedEventFilter implements Filterable {
- public final static String filterKey = "#e";
- private final T referencedEvent;
+@EqualsAndHashCode(callSuper = true)
+public class ReferencedEventFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "#e";
- public ReferencedEventFilter(T referencedEvent) {
- this.referencedEvent = referencedEvent;
+ public ReferencedEventFilter(T referencedEventTag) {
+ super(referencedEventTag, FILTER_KEY);
}
@Override
@@ -20,21 +19,15 @@ public Predicate getPredicate() {
return (genericEvent) ->
getTypeSpecificTags(EventTag.class, genericEvent).stream()
.anyMatch(eventTag ->
- eventTag.getIdEvent().equals(referencedEvent.getId()));
+ eventTag.getIdEvent().equals(getFilterableValue()));
}
@Override
- public T getFilterCriterion() {
- return referencedEvent;
- }
-
- @Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getReferencedEventTag().getIdEvent();
}
- @Override
- public String getFilterableValue() {
- return referencedEvent.getId();
+ private T getReferencedEventTag() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/ReferencedPublicKeyFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/ReferencedPublicKeyFilter.java
index 4dc4eab03..2eee8214d 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/ReferencedPublicKeyFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/ReferencedPublicKeyFilter.java
@@ -1,19 +1,17 @@
package nostr.event.filter;
import lombok.EqualsAndHashCode;
-import nostr.base.PublicKey;
import nostr.event.impl.GenericEvent;
import nostr.event.tag.PubKeyTag;
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class ReferencedPublicKeyFilter implements Filterable {
- public final static String filterKey = "#p";
- private final T referencedPublicKey;
+@EqualsAndHashCode(callSuper = true)
+public class ReferencedPublicKeyFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "#p";
- public ReferencedPublicKeyFilter(T referencedPublicKey) {
- this.referencedPublicKey = referencedPublicKey;
+ public ReferencedPublicKeyFilter(T referencedPubKeyTag) {
+ super(referencedPubKeyTag, FILTER_KEY);
}
@Override
@@ -21,21 +19,15 @@ public Predicate getPredicate() {
return (genericEvent) ->
getTypeSpecificTags(PubKeyTag.class, genericEvent).stream()
.anyMatch(pubKeyTag ->
- pubKeyTag.getPublicKey().toHexString().equals(this.referencedPublicKey.toHexString()));
+ pubKeyTag.getPublicKey().toHexString().equals(getFilterableValue()));
}
@Override
- public T getFilterCriterion() {
- return referencedPublicKey;
- }
-
- @Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getReferencedPublicKey().getPublicKey().toHexString();
}
- @Override
- public String getFilterableValue() {
- return referencedPublicKey.toHexString();
+ private T getReferencedPublicKey() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/SinceFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/SinceFilter.java
index fb06f049e..d6dc288c7 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/SinceFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/SinceFilter.java
@@ -6,38 +6,31 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class SinceFilter implements Filterable {
- public final static String filterKey = "since";
- private final Long since;
+@EqualsAndHashCode(callSuper = true)
+public class SinceFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "since";
public SinceFilter(Long since) {
- this.since = since;
+ super(since, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- this.since < genericEvent.getCreatedAt();
- }
-
- @Override
- public Long getFilterCriterion() {
- return since;
+ genericEvent.getCreatedAt() > getSince();
}
@Override
public ObjectNode toObjectNode(ObjectNode objectNode) {
- return mapper.createObjectNode().put(filterKey, since);
+ return mapper.createObjectNode().put(FILTER_KEY, getSince());
}
@Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getSince().toString();
}
- @Override
- public String getFilterableValue() {
- return since.toString();
+ private Long getSince() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/filter/UntilFilter.java b/nostr-java-event/src/main/java/nostr/event/filter/UntilFilter.java
index 54c9e2a99..54ac32872 100644
--- a/nostr-java-event/src/main/java/nostr/event/filter/UntilFilter.java
+++ b/nostr-java-event/src/main/java/nostr/event/filter/UntilFilter.java
@@ -6,38 +6,31 @@
import java.util.function.Predicate;
-@EqualsAndHashCode
-public class UntilFilter implements Filterable {
- public final static String filterKey = "until";
- private final Long until;
+@EqualsAndHashCode(callSuper = true)
+public class UntilFilter extends AbstractFilterable {
+ public final static String FILTER_KEY = "until";
public UntilFilter(Long until) {
- this.until = until;
+ super(until, FILTER_KEY);
}
@Override
public Predicate getPredicate() {
return (genericEvent) ->
- this.until >= genericEvent.getCreatedAt();
- }
-
- @Override
- public Long getFilterCriterion() {
- return until;
+ genericEvent.getCreatedAt() < getUntil();
}
@Override
public ObjectNode toObjectNode(ObjectNode objectNode) {
- return mapper.createObjectNode().put(filterKey, until);
+ return mapper.createObjectNode().put(FILTER_KEY, getUntil());
}
@Override
- public String getFilterKey() {
- return filterKey;
+ public String getFilterableValue() {
+ return getUntil().toString();
}
- @Override
- public String getFilterableValue() {
- return until.toString();
+ private Long getUntil() {
+ return super.getFilterable();
}
}
diff --git a/nostr-java-event/src/main/java/nostr/event/json/codec/FilterableProvider.java b/nostr-java-event/src/main/java/nostr/event/json/codec/FilterableProvider.java
index 507d24f6c..b3792eabf 100644
--- a/nostr-java-event/src/main/java/nostr/event/json/codec/FilterableProvider.java
+++ b/nostr-java-event/src/main/java/nostr/event/json/codec/FilterableProvider.java
@@ -9,6 +9,7 @@
import nostr.event.filter.EventFilter;
import nostr.event.filter.Filterable;
import nostr.event.filter.GenericTagQueryFilter;
+import nostr.event.filter.GeohashTagFilter;
import nostr.event.filter.IdentifierTagFilter;
import nostr.event.filter.KindFilter;
import nostr.event.filter.ReferencedEventFilter;
@@ -16,7 +17,10 @@
import nostr.event.filter.SinceFilter;
import nostr.event.filter.UntilFilter;
import nostr.event.impl.GenericEvent;
+import nostr.event.tag.EventTag;
+import nostr.event.tag.GeohashTag;
import nostr.event.tag.IdentifierTag;
+import nostr.event.tag.PubKeyTag;
import java.util.List;
import java.util.function.Function;
@@ -25,17 +29,17 @@
class FilterableProvider {
protected static List getFilterable(String type, JsonNode node) {
return switch (type) {
- case ReferencedPublicKeyFilter.filterKey -> getFilterable(node, referencedPubKey -> new ReferencedPublicKeyFilter<>(new PublicKey(referencedPubKey.asText())));
- case ReferencedEventFilter.filterKey -> getFilterable(node, referencedEvent -> new ReferencedEventFilter<>(new GenericEvent(referencedEvent.asText())));
- case AddressableTagFilter.filterKey -> getFilterable(node, addressableTag -> new AddressableTagFilter<>(AddressableTagFilter.createAddressTag(addressableTag)));
- case IdentifierTagFilter.filterKey -> getFilterable(node, identifierTag -> new IdentifierTagFilter<>(new IdentifierTag(identifierTag.asText())));
- case AuthorFilter.filterKey -> getFilterable(node, author -> new AuthorFilter<>(new PublicKey(author.asText())));
- case EventFilter.filterKey -> getFilterable(node, event -> new EventFilter<>(new GenericEvent(event.asText())));
- case KindFilter.filterKey -> getFilterable(node, kindNode -> new KindFilter<>(Kind.valueOf(kindNode.asInt())));
- case SinceFilter.filterKey -> List.of(new SinceFilter(node.asLong()));
- case UntilFilter.filterKey -> List.of(new UntilFilter(node.asLong()));
- default ->
- getFilterable(node, genericNode -> new GenericTagQueryFilter<>(new GenericTagQuery(type, genericNode.asText())));
+ case ReferencedPublicKeyFilter.FILTER_KEY -> getFilterable(node, referencedPubKey -> new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(referencedPubKey.asText()))));
+ case ReferencedEventFilter.FILTER_KEY -> getFilterable(node, referencedEvent -> new ReferencedEventFilter<>(new EventTag(referencedEvent.asText())));
+ case AddressableTagFilter.FILTER_KEY -> getFilterable(node, addressableTag -> new AddressableTagFilter<>(AddressableTagFilter.createAddressTag(addressableTag)));
+ case IdentifierTagFilter.FILTER_KEY -> getFilterable(node, identifierTag -> new IdentifierTagFilter<>(new IdentifierTag(identifierTag.asText())));
+ case GeohashTagFilter.FILTER_KEY -> getFilterable(node, geohashTag -> new GeohashTagFilter<>(new GeohashTag(geohashTag.asText())));
+ case AuthorFilter.FILTER_KEY -> getFilterable(node, author -> new AuthorFilter<>(new PublicKey(author.asText())));
+ case EventFilter.FILTER_KEY -> getFilterable(node, event -> new EventFilter<>(new GenericEvent(event.asText())));
+ case KindFilter.FILTER_KEY -> getFilterable(node, kindNode -> new KindFilter<>(Kind.valueOf(kindNode.asInt())));
+ case SinceFilter.FILTER_KEY -> List.of(new SinceFilter(node.asLong()));
+ case UntilFilter.FILTER_KEY -> List.of(new UntilFilter(node.asLong()));
+ default -> getFilterable(node, genericNode -> new GenericTagQueryFilter<>(new GenericTagQuery(type, genericNode.asText())));
};
}
diff --git a/nostr-java-examples/pom.xml b/nostr-java-examples/pom.xml
index ad1dfcf4d..5fa7b1fe7 100644
--- a/nostr-java-examples/pom.xml
+++ b/nostr-java-examples/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-examples
diff --git a/nostr-java-id/pom.xml b/nostr-java-id/pom.xml
index 3b9796f47..c3a2e4af5 100644
--- a/nostr-java-id/pom.xml
+++ b/nostr-java-id/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-id
diff --git a/nostr-java-test/pom.xml b/nostr-java-test/pom.xml
index 25ff07bd8..0ad8d8305 100644
--- a/nostr-java-test/pom.xml
+++ b/nostr-java-test/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-test
diff --git a/nostr-java-test/src/test/java/nostr/test/event/ApiEventTest.java b/nostr-java-test/src/test/java/nostr/test/event/ApiEventTest.java
index 26e88c8a1..988b14eef 100644
--- a/nostr-java-test/src/test/java/nostr/test/event/ApiEventTest.java
+++ b/nostr-java-test/src/test/java/nostr/test/event/ApiEventTest.java
@@ -2,7 +2,6 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
-
import nostr.api.EventNostr;
import nostr.api.NIP01;
import nostr.api.NIP04;
@@ -12,26 +11,33 @@
import nostr.api.NIP52;
import nostr.api.NIP57;
import nostr.base.ElementAttribute;
+import nostr.base.GenericTagQuery;
import nostr.base.PrivateKey;
import nostr.base.PublicKey;
import nostr.crypto.bech32.Bech32;
import nostr.crypto.bech32.Bech32Prefix;
import nostr.event.BaseTag;
+import nostr.event.NIP01Event;
+import nostr.event.filter.Filters;
+import nostr.event.filter.GenericTagQueryFilter;
+import nostr.event.filter.GeohashTagFilter;
import nostr.event.impl.CalendarContent;
import nostr.event.impl.CreateOrUpdateStallEvent;
import nostr.event.impl.CreateOrUpdateStallEvent.Stall;
import nostr.event.impl.DirectMessageEvent;
import nostr.event.impl.EncryptedPayloadEvent;
+import nostr.event.impl.GenericTag;
import nostr.event.impl.NostrMarketplaceEvent;
import nostr.event.impl.NostrMarketplaceEvent.Product.Spec;
import nostr.event.impl.TextNoteEvent;
import nostr.event.impl.ZapReceiptEvent;
import nostr.event.impl.ZapRequestEvent;
+import nostr.event.message.OkMessage;
+import nostr.event.tag.GeohashTag;
import nostr.event.tag.IdentifierTag;
import nostr.event.tag.PubKeyTag;
import nostr.id.Identity;
import nostr.util.NostrException;
-
import org.junit.jupiter.api.Test;
import java.io.IOException;
@@ -41,13 +47,14 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.UUID;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import nostr.event.message.OkMessage;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* @author eric
@@ -133,6 +140,57 @@ public void testNIP44SendDirectMessage() throws IOException {
nip44.close();
}
+ @Test
+ public void testNIP01SendTextNoteEventGeoHashTag() throws IOException {
+ System.out.println("testNIP01SendTextNoteEventGeoHashTag");
+
+ Identity identity = Identity.generateRandomIdentity();
+
+ String targetString = "geohash_tag-location";
+ GeohashTag geohashTag = new GeohashTag(targetString);
+ NIP01 nip01 = new NIP01<>(identity);
+
+ nip01.createTextNoteEvent(List.of(geohashTag), "GeohashTag Test location").signAndSend(Map.of("local", "ws://localhost:5555"));
+
+ Filters filters = new Filters(
+ new GeohashTagFilter<>(new GeohashTag(targetString)));
+
+ List result = nip01.sendRequest(filters, UUID.randomUUID().toString());
+
+ assertFalse(result.isEmpty());
+ assertEquals(2, result.size());
+ assertTrue(result.stream().anyMatch(s -> s.contains(targetString)));
+
+ nip01.close();
+ }
+
+ @Test
+ public void testNIP01SendTextNoteEventCustomGenericTag() throws IOException {
+ System.out.println("testNIP01SendTextNoteEventCustomGenericTag");
+
+ Identity identity = Identity.generateRandomIdentity();
+
+ String targetString = "custom-generic-tag";
+ GenericTag genericTag = GenericTag.create("m", 1, targetString);
+ NIP01 nip01 = new NIP01<>(identity);
+ nip01.createTextNoteEvent(List.of(genericTag), "Custom Generic Tag Test").signAndSend(Map.of("local", "ws://localhost:5555"));
+
+ Filters filters = new Filters(
+ new GenericTagQueryFilter<>(new GenericTagQuery("#m", targetString)));
+
+ List result = nip01.sendRequest(filters, UUID.randomUUID().toString());
+
+ assertFalse(result.isEmpty());
+ assertEquals(2, result.size());
+
+ String matcher = """
+ ["m","custom-generic-tag"]""";
+
+ assertTrue(result.stream().anyMatch(s -> s.contains(matcher)));
+
+ nip01.close();
+ }
+
@Test
public void testNIP04EncryptDecrypt() {
System.out.println("testNIP04EncryptDecrypt");
@@ -320,10 +378,10 @@ public void testNIP52CalendarTimeBasedEventEvent() throws IOException {
"Calendar Time-Based Event title",
1716513986268L).build();
- calendarContent.setStartTzid("1687765220");
- calendarContent.setEndTzid("1687765230");
+ calendarContent.setStartTzid("1687765220");
+ calendarContent.setEndTzid("1687765230");
- calendarContent.setLabels(List.of("english", "mycenaean greek"));
+ calendarContent.setLabels(List.of("english", "mycenaean greek"));
List tags = new ArrayList<>();
tags.add(new PubKeyTag(new PublicKey("2bed79f81439ff794cf5ac5f7bff9121e257f399829e472c7a14d3e86fe76985"),
@@ -396,7 +454,7 @@ void testNIP57CreateZapReceiptEvent() throws NostrException {
var nip57 = new NIP57(sender);
ZapReceiptEvent instance = nip57.createZapReceiptEvent(zapRequestPubKeyTag, baseTags, zapRequestEventTag,
- zapRequestAddressTag, ZAP_RECEIPT_IDENTIFIER, ZAP_RECEIPT_RELAY_URI, BOLT_11, DESCRIPTION_SHA256, PRE_IMAGE)
+ zapRequestAddressTag, ZAP_RECEIPT_IDENTIFIER, ZAP_RECEIPT_RELAY_URI, BOLT_11, DESCRIPTION_SHA256, PRE_IMAGE)
.getEvent();
instance.update();
diff --git a/nostr-java-test/src/test/java/nostr/test/filters/FiltersDecoderTest.java b/nostr-java-test/src/test/java/nostr/test/filters/FiltersDecoderTest.java
index 85c8bdeca..caa589845 100644
--- a/nostr-java-test/src/test/java/nostr/test/filters/FiltersDecoderTest.java
+++ b/nostr-java-test/src/test/java/nostr/test/filters/FiltersDecoderTest.java
@@ -8,6 +8,7 @@
import nostr.event.filter.EventFilter;
import nostr.event.filter.Filters;
import nostr.event.filter.GenericTagQueryFilter;
+import nostr.event.filter.GeohashTagFilter;
import nostr.event.filter.IdentifierTagFilter;
import nostr.event.filter.KindFilter;
import nostr.event.filter.ReferencedEventFilter;
@@ -17,7 +18,10 @@
import nostr.event.impl.GenericEvent;
import nostr.event.json.codec.FiltersDecoder;
import nostr.event.tag.AddressTag;
+import nostr.event.tag.EventTag;
+import nostr.event.tag.GeohashTag;
import nostr.event.tag.IdentifierTag;
+import nostr.event.tag.PubKeyTag;
import org.junit.jupiter.api.Test;
import java.time.Instant;
@@ -25,6 +29,7 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.fail;
@Log
public class FiltersDecoderTest {
@@ -131,7 +136,7 @@ public void testMultipleAddressableTagFiltersDecoder() {
public void testKindFiltersDecoder() {
log.info("testKindFiltersDecoder");
- String filterKey = KindFilter.filterKey;
+ String filterKey = KindFilter.FILTER_KEY;
Kind kind = Kind.valueOf(1);
String expected = "{\"" + filterKey + "\":[" + kind.toString() + "]}";
@@ -144,7 +149,7 @@ public void testKindFiltersDecoder() {
public void testMultipleKindFiltersDecoder() {
log.info("testMultipleKindFiltersDecoder");
- String filterKey = KindFilter.filterKey;
+ String filterKey = KindFilter.FILTER_KEY;
Kind kind1 = Kind.valueOf(1);
Kind kind2 = Kind.valueOf(2);
@@ -201,7 +206,7 @@ public void testReferencedEventFilterDecoder() {
String expected = "{\"#e\":[\"" + eventId + "\"]}";
Filters decodedFilters = new FiltersDecoder<>().decode(expected);
- assertEquals(new Filters(new ReferencedEventFilter<>(new GenericEvent(eventId))), decodedFilters);
+ assertEquals(new Filters(new ReferencedEventFilter<>(new EventTag(eventId))), decodedFilters);
}
@Test
@@ -217,13 +222,13 @@ public void testMultipleReferencedEventFilterDecoder() {
assertEquals(
new Filters(
- new ReferencedEventFilter<>(new GenericEvent(eventId1)),
- new ReferencedEventFilter<>(new GenericEvent(eventId2))),
+ new ReferencedEventFilter<>(new EventTag(eventId1)),
+ new ReferencedEventFilter<>(new EventTag(eventId2))),
decodedFilters);
}
@Test
- public void testReferencedPublicKeyFilterDecoder() {
+ public void testReferencedPublicKeyFilterDecofder() {
log.info("testReferencedPublicKeyFilterDecoder");
String pubkeyString = "f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75";
@@ -231,7 +236,7 @@ public void testReferencedPublicKeyFilterDecoder() {
String expected = "{\"#p\":[\"" + pubkeyString + "\"]}";
Filters decodedFilters = new FiltersDecoder<>().decode(expected);
- assertEquals(new Filters(new ReferencedPublicKeyFilter<>(new PublicKey(pubkeyString))), decodedFilters);
+ assertEquals(new Filters(new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubkeyString)))), decodedFilters);
}
@Test
@@ -248,14 +253,14 @@ public void testMultipleReferencedPublicKeyFilterDecoder() {
assertEquals(
new Filters(
- new ReferencedPublicKeyFilter<>(new PublicKey(pubkeyString1)),
- new ReferencedPublicKeyFilter<>(new PublicKey(pubkeyString2))),
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubkeyString1))),
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubkeyString2)))),
decodedFilters);
}
@Test
- public void testGenericTagFiltersDecoder() {
- log.info("testGenericTagFiltersDecoder");
+ public void testGeohashTagFiltersDecoder() {
+ log.info("testGeohashTagFiltersDecoder");
String geohashKey = "#g";
String geohashValue = "2vghde";
@@ -263,12 +268,12 @@ public void testGenericTagFiltersDecoder() {
Filters decodedFilters = new FiltersDecoder<>().decode(reqJsonWithCustomTagQueryFilterToDecode);
- assertEquals(new Filters(new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue))), decodedFilters);
+ assertEquals(new Filters(new GeohashTagFilter<>(new GeohashTag(geohashValue))), decodedFilters);
}
@Test
- public void testMultipleGenericTagFiltersDecoder() {
- log.info("testMultipleGenericTagFiltersDecoder");
+ public void testMultipleGeohashTagFiltersDecoder() {
+ log.info("testMultipleGeohashTagFiltersDecoder");
String geohashKey = "#g";
String geohashValue1 = "2vghde";
@@ -277,10 +282,41 @@ public void testMultipleGenericTagFiltersDecoder() {
Filters decodedFilters = new FiltersDecoder<>().decode(reqJsonWithCustomTagQueryFilterToDecode);
+ assertEquals(new Filters(
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2))),
+ decodedFilters);
+ }
+
+ @Test
+ public void testGenericTagFiltersDecoder() {
+ log.info("testGenericTagFiltersDecoder");
+
+ String customTagKey = "#b";
+ String customTagValue = "2vghde";
+ String reqJsonWithCustomTagQueryFilterToDecode = "{\"" + customTagKey + "\":[\"" + customTagValue + "\"]}";
+
+ Filters decodedFilters = new FiltersDecoder<>().decode(reqJsonWithCustomTagQueryFilterToDecode);
+
+ assertEquals(new Filters(new GenericTagQueryFilter<>(new GenericTagQuery(customTagKey, customTagValue))), decodedFilters);
+ }
+
+ @Test
+ public void testMultipleGenericTagFiltersDecoder() {
+ log.info("testMultipleGenericTagFiltersDecoder");
+
+ String customTagKey = "#b";
+ String customTagValue1 = "2vghde";
+ String customTagValue2 = "3abcde";
+
+ String reqJsonWithCustomTagQueryFilterToDecode = "{\"" + customTagKey + "\":[\"" + customTagValue1 + "\",\"" + customTagValue2 + "\"]}";
+
+ Filters decodedFilters = new FiltersDecoder<>().decode(reqJsonWithCustomTagQueryFilterToDecode);
+
assertEquals(
new Filters(
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2))),
+ new GenericTagQueryFilter<>(new GenericTagQuery(customTagKey, customTagValue1)),
+ new GenericTagQueryFilter<>(new GenericTagQuery(customTagKey, customTagValue2))),
decodedFilters);
}
diff --git a/nostr-java-test/src/test/java/nostr/test/filters/FiltersEncoderTest.java b/nostr-java-test/src/test/java/nostr/test/filters/FiltersEncoderTest.java
index 3331c8106..6cafac92f 100644
--- a/nostr-java-test/src/test/java/nostr/test/filters/FiltersEncoderTest.java
+++ b/nostr-java-test/src/test/java/nostr/test/filters/FiltersEncoderTest.java
@@ -10,6 +10,7 @@
import nostr.event.filter.Filterable;
import nostr.event.filter.Filters;
import nostr.event.filter.GenericTagQueryFilter;
+import nostr.event.filter.GeohashTagFilter;
import nostr.event.filter.IdentifierTagFilter;
import nostr.event.filter.KindFilter;
import nostr.event.filter.ReferencedEventFilter;
@@ -20,7 +21,10 @@
import nostr.event.json.codec.FiltersEncoder;
import nostr.event.message.ReqMessage;
import nostr.event.tag.AddressTag;
+import nostr.event.tag.EventTag;
+import nostr.event.tag.GeohashTag;
import nostr.event.tag.IdentifierTag;
+import nostr.event.tag.PubKeyTag;
import org.junit.jupiter.api.Test;
import java.time.Instant;
@@ -182,7 +186,7 @@ public void testReferencedEventFilterEncoder() {
String eventId = "f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75";
- FiltersEncoder encoder = new FiltersEncoder(new Filters(new ReferencedEventFilter<>(new GenericEvent(eventId))));
+ FiltersEncoder encoder = new FiltersEncoder(new Filters(new ReferencedEventFilter<>(new EventTag(eventId))));
String encodedFilters = encoder.encode();
assertEquals("{\"#e\":[\"" + eventId + "\"]}", encodedFilters);
}
@@ -196,35 +200,21 @@ public void testMultipleReferencedEventFilterEncoder() {
FiltersEncoder encoder = new FiltersEncoder(new Filters(
List.of(
- new ReferencedEventFilter<>(new GenericEvent(eventId1)),
- new ReferencedEventFilter<>(new GenericEvent(eventId2)))));
+ new ReferencedEventFilter<>(new EventTag(eventId1)),
+ new ReferencedEventFilter<>(new EventTag(eventId2)))));
String encodedFilters = encoder.encode();
String eventIds = String.join("\",\"", eventId1, eventId2);
assertEquals("{\"#e\":[\"" + eventIds + "\"]}", encodedFilters);
}
- @Test
- public void testSingleGenericTagQueryFiltersEncoder() {
- log.info("testSingleGenericTagQueryFiltersEncoder");
-
- String geohashKey = "#g";
- String new_geohash = "2vghde";
-
- FiltersEncoder encoder = new FiltersEncoder(
- new Filters(new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, new_geohash))));
-
- String encodedFilters = encoder.encode();
- assertEquals("{\"#g\":[\"2vghde\"]}", encodedFilters);
- }
-
@Test
public void testReferencedPublicKeyFilterEncoder() {
log.info("testReferencedPublicKeyFilterEncoder");
String pubKeyString = "f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75";
- FiltersEncoder encoder = new FiltersEncoder(new Filters(new ReferencedPublicKeyFilter<>(new PublicKey(pubKeyString))));
+ FiltersEncoder encoder = new FiltersEncoder(new Filters(new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubKeyString)))));
String encodedFilters = encoder.encode();
assertEquals("{\"#p\":[\"" + pubKeyString + "\"]}", encodedFilters);
@@ -238,8 +228,8 @@ public void testMultipleReferencedPublicKeyFilterEncoder() {
String pubKeyString2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
FiltersEncoder encoder = new FiltersEncoder(new Filters(
- new ReferencedPublicKeyFilter<>(new PublicKey(pubKeyString1)),
- new ReferencedPublicKeyFilter<>(new PublicKey(pubKeyString2))));
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubKeyString1))),
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(pubKeyString2)))));
String encodedFilters = encoder.encode();
String pubKeyTags = String.join("\",\"", pubKeyString1, pubKeyString2);
@@ -247,21 +237,63 @@ public void testMultipleReferencedPublicKeyFilterEncoder() {
}
@Test
- public void testMultipleGenericTagQueryFiltersEncoder() {
+ public void testSingleGeohashTagQueryFiltersEncoder() {
+ log.info("testSingleGeohashTagQueryFiltersEncoder");
+
+ String new_geohash = "2vghde";
+
+ FiltersEncoder encoder = new FiltersEncoder(
+ new Filters(new GeohashTagFilter<>(new GeohashTag(new_geohash))));
+
+ String encodedFilters = encoder.encode();
+ assertEquals("{\"#g\":[\"2vghde\"]}", encodedFilters);
+ }
+
+ @Test
+ public void testMultipleGeohashTagQueryFiltersEncoder() {
log.info("testMultipleGenericTagQueryFiltersEncoder");
- String geohashKey = "#g";
String geohashValue1 = "2vghde";
String geohashValue2 = "3abcde";
FiltersEncoder encoder = new FiltersEncoder(new Filters(
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2))));
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2))));
String encodedFilters = encoder.encode();
assertEquals("{\"#g\":[\"2vghde\",\"3abcde\"]}", encodedFilters);
}
+ @Test
+ public void testSingleCustomGenericTagQueryFiltersEncoder() {
+ log.info("testSingleCustomGenericTagQueryFiltersEncoder");
+
+ String customKey = "#b";
+ String customValue = "2vghde";
+
+ FiltersEncoder encoder = new FiltersEncoder(
+ new Filters(new GenericTagQueryFilter<>(new GenericTagQuery(customKey, customValue))));
+
+ String encodedFilters = encoder.encode();
+ assertEquals("{\"#b\":[\"2vghde\"]}", encodedFilters);
+ }
+
+ @Test
+ public void testMultipleCustomGenericTagQueryFiltersEncoder() {
+ log.info("testMultipleCustomGenericTagQueryFiltersEncoder");
+
+ String customKey = "#b";
+ String customValue1 = "2vghde";
+ String customValue2 = "3abcde";
+
+ FiltersEncoder encoder = new FiltersEncoder(new Filters(
+ new GenericTagQueryFilter<>(new GenericTagQuery(customKey, customValue1)),
+ new GenericTagQueryFilter<>(new GenericTagQuery(customKey, customValue2))));
+
+ String encodedFilters = encoder.encode();
+ assertEquals("{\"#b\":[\"2vghde\",\"3abcde\"]}", encodedFilters);
+ }
+
@Test
public void testMultipleAddressableTagFilterEncoder() {
log.info("testMultipleAddressableTagFilterEncoder");
diff --git a/nostr-java-test/src/test/java/nostr/test/json/JsonParseTest.java b/nostr-java-test/src/test/java/nostr/test/json/JsonParseTest.java
index 65a7aed69..fe86d6ae1 100644
--- a/nostr-java-test/src/test/java/nostr/test/json/JsonParseTest.java
+++ b/nostr-java-test/src/test/java/nostr/test/json/JsonParseTest.java
@@ -20,6 +20,7 @@
import nostr.event.filter.Filterable;
import nostr.event.filter.Filters;
import nostr.event.filter.GenericTagQueryFilter;
+import nostr.event.filter.GeohashTagFilter;
import nostr.event.filter.IdentifierTagFilter;
import nostr.event.filter.KindFilter;
import nostr.event.filter.ReferencedEventFilter;
@@ -35,6 +36,7 @@
import nostr.event.message.ReqMessage;
import nostr.event.tag.AddressTag;
import nostr.event.tag.EventTag;
+import nostr.event.tag.GeohashTag;
import nostr.event.tag.IdentifierTag;
import nostr.event.tag.PriceTag;
import nostr.event.tag.PubKeyTag;
@@ -80,17 +82,17 @@ public void testBaseMessageDecoderEventFilter() throws JsonProcessingException {
Filters filters = ((ReqMessage) message).getFiltersList().getFirst();
- List kindFilters = filters.getFilterByType(KindFilter.filterKey);
+ List kindFilters = filters.getFilterByType(KindFilter.FILTER_KEY);
assertEquals(1, kindFilters.size());
assertEquals(new KindFilter<>(Kind.TEXT_NOTE), kindFilters.getFirst());
- List eventFilter = filters.getFilterByType(EventFilter.filterKey);
+ List eventFilter = filters.getFilterByType(EventFilter.FILTER_KEY);
assertEquals(1, eventFilter.size());
assertEquals(new EventFilter<>(new GenericEvent("f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75")), eventFilter.getFirst());
- List referencedPublicKeyfilter = filters.getFilterByType(ReferencedPublicKeyFilter.filterKey);
+ List referencedPublicKeyfilter = filters.getFilterByType(ReferencedPublicKeyFilter.FILTER_KEY);
assertEquals(1, referencedPublicKeyfilter.size());
- assertEquals(new ReferencedPublicKeyFilter<>(new PublicKey("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712")), referencedPublicKeyfilter.getFirst());
+ assertEquals(new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712"))), referencedPublicKeyfilter.getFirst());
}
@Test
@@ -112,17 +114,17 @@ public void testBaseMessageDecoderKindsAuthorsReferencedPublicKey() throws JsonP
Filters filters = ((ReqMessage) message).getFiltersList().getFirst();
- List kindFilters = filters.getFilterByType(KindFilter.filterKey);
+ List kindFilters = filters.getFilterByType(KindFilter.FILTER_KEY);
assertEquals(1, kindFilters.size());
assertEquals(new KindFilter<>(Kind.TEXT_NOTE), kindFilters.getFirst());
- List authorFilters = filters.getFilterByType(AuthorFilter.filterKey);
+ List authorFilters = filters.getFilterByType(AuthorFilter.FILTER_KEY);
assertEquals(1, authorFilters.size());
assertEquals(new AuthorFilter<>(new PublicKey("f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75")), authorFilters.getFirst());
- List referencedPublicKeyfilter = filters.getFilterByType(ReferencedPublicKeyFilter.filterKey);
+ List referencedPublicKeyfilter = filters.getFilterByType(ReferencedPublicKeyFilter.FILTER_KEY);
assertEquals(1, referencedPublicKeyfilter.size());
- assertEquals(new ReferencedPublicKeyFilter<>(new PublicKey("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712")), referencedPublicKeyfilter.getFirst());
+ assertEquals(new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712"))), referencedPublicKeyfilter.getFirst());
}
@Test
@@ -144,17 +146,17 @@ public void testBaseMessageDecoderKindsAuthorsReferencedEvents() throws JsonProc
Filters filters = ((ReqMessage) message).getFiltersList().getFirst();
- List kindFilters = filters.getFilterByType(KindFilter.filterKey);
+ List kindFilters = filters.getFilterByType(KindFilter.FILTER_KEY);
assertEquals(1, kindFilters.size());
assertEquals(new KindFilter<>(Kind.TEXT_NOTE), kindFilters.getFirst());
- List authorFilters = filters.getFilterByType(AuthorFilter.filterKey);
+ List authorFilters = filters.getFilterByType(AuthorFilter.FILTER_KEY);
assertEquals(1, authorFilters.size());
assertEquals(new AuthorFilter<>(new PublicKey("f1b419a95cb0233a11d431423b41a42734e7165fcab16081cd08ef1c90e0be75")), authorFilters.getFirst());
- List referencedEventFilters = filters.getFilterByType(ReferencedEventFilter.filterKey);
+ List referencedEventFilters = filters.getFilterByType(ReferencedEventFilter.FILTER_KEY);
assertEquals(1, referencedEventFilters.size());
- assertEquals(new ReferencedEventFilter<>(new GenericEvent("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712")), referencedEventFilters.getFirst());
+ assertEquals(new ReferencedEventFilter<>(new EventTag("fc7f200c5bed175702bd06c7ca5dba90d3497e827350b42fc99c3a4fa276a712")), referencedEventFilters.getFirst());
}
@Test
@@ -390,7 +392,7 @@ public void testReqMessageDeserializer() throws JsonProcessingException {
ReqMessage expectedReqMessage = new ReqMessage(subscriptionId,
new Filters(
- new GenericTagQueryFilter<>(new GenericTagQuery("#g", geohashValue))));
+ new GeohashTagFilter<>(new GeohashTag(geohashValue))));
assertEquals(expectedReqMessage, decodedReqMessage);
}
@@ -410,8 +412,8 @@ public void testReqMessageFilterListDecoder() {
ReqMessage expectedReqMessage = new ReqMessage(subscriptionId,
new Filters(
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2))));
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2))));
assertEquals(reqJsonWithCustomTagQueryFiltersToDecode, decodedReqMessage.encode());
assertEquals(expectedReqMessage, decodedReqMessage);
@@ -444,12 +446,12 @@ public void testReqMessagePopulatedFilterDecoder() {
ReqMessage expectedReqMessage = new ReqMessage(subscriptionId,
new Filters(
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2)),
- new ReferencedPublicKeyFilter<>(new PublicKey(author)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2)),
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(author))),
new KindFilter<>(Kind.TEXT_NOTE),
new AuthorFilter<>(new PublicKey(author)),
- new ReferencedEventFilter<>(new GenericEvent(referencedEventId))));
+ new ReferencedEventFilter<>(new EventTag(referencedEventId))));
assertEquals(expectedReqMessage, decodedReqMessage);
});
@@ -485,9 +487,9 @@ public void testReqMessagePopulatedListOfFiltersWithIdentityDecoder() throws Jso
new Filters(
new KindFilter<>(Kind.TEXT_NOTE),
new AuthorFilter<>(new PublicKey(author)),
- new ReferencedEventFilter<>(new GenericEvent(referencedEventId)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2)),
+ new ReferencedEventFilter<>(new EventTag(referencedEventId)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2)),
new IdentifierTagFilter<>(new IdentifierTag(uuidValue1)),
new IdentifierTagFilter<>(new IdentifierTag(uuidValue2))));
@@ -527,8 +529,8 @@ public void testReqMessagePopulatedListOfFiltersListDecoder() throws JsonProcess
new Filters(
new KindFilter<>(Kind.TEXT_NOTE),
new AuthorFilter<>(new PublicKey(author)),
- new ReferencedEventFilter<>(new GenericEvent(referencedEventId)),
- new ReferencedPublicKeyFilter<>(new PublicKey(author)),
+ new ReferencedEventFilter<>(new EventTag(referencedEventId)),
+ new ReferencedPublicKeyFilter<>(new PubKeyTag(new PublicKey(author))),
new AddressableTagFilter<>(addressTag1)));
assertEquals(expectedReqMessage.encode(), decodedReqMessage.encode());
@@ -561,7 +563,7 @@ public void testReqMessagePopulatedListOfMultipleTypeFiltersListDecoder() throws
new KindFilter<>(Kind.RECOMMEND_SERVER),
new AuthorFilter<>(new PublicKey(author)),
new AuthorFilter<>(new PublicKey(author2)),
- new ReferencedEventFilter<>(new GenericEvent(referencedEventId))));
+ new ReferencedEventFilter<>(new EventTag(referencedEventId))));
assertEquals(expectedReqMessage.encode(), decodedReqMessage.encode());
assertEquals(expectedReqMessage, decodedReqMessage);
@@ -601,9 +603,9 @@ public void testGenericTagQueryListDecoder() throws JsonProcessingException {
new KindFilter<>(Kind.RECOMMEND_SERVER),
new AuthorFilter<>(new PublicKey(author)),
new AuthorFilter<>(new PublicKey(author2)),
- new ReferencedEventFilter<>(new GenericEvent(referencedEventId)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue1)),
- new GenericTagQueryFilter<>(new GenericTagQuery(geohashKey, geohashValue2)),
+ new ReferencedEventFilter<>(new EventTag(referencedEventId)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue1)),
+ new GeohashTagFilter<>(new GeohashTag(geohashValue2)),
new IdentifierTagFilter<>(new IdentifierTag(uuidValue1)),
new IdentifierTagFilter<>(new IdentifierTag(uuidValue2))));
diff --git a/nostr-java-util/pom.xml b/nostr-java-util/pom.xml
index 055036fd6..7dc6acd13 100644
--- a/nostr-java-util/pom.xml
+++ b/nostr-java-util/pom.xml
@@ -6,7 +6,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
nostr-java-util
@@ -22,11 +22,5 @@
org.projectlombok
lombok
-
- ${project.groupId}
- nostr-java-context-interface
- ${project.version}
- compile
-
-
\ No newline at end of file
+
diff --git a/nostr-java-util/src/main/java/module-info.java b/nostr-java-util/src/main/java/module-info.java
index 6c586eb94..8658ffc7d 100644
--- a/nostr-java-util/src/main/java/module-info.java
+++ b/nostr-java-util/src/main/java/module-info.java
@@ -2,8 +2,6 @@
requires static lombok;
requires java.logging;
- requires nostr.context;
-
exports nostr.util;
exports nostr.util.thread;
}
diff --git a/pom.xml b/pom.xml
index 6db953756..df4632823 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
xyz.tcheeric
nostr-java
- 0.6.4-SNAPSHOT
+ 0.6.5-SNAPSHOT
pom
${project.artifactId}