diff --git a/nostr-java-api/src/main/java/nostr/api/nip01/NIP01EventBuilder.java b/nostr-java-api/src/main/java/nostr/api/nip01/NIP01EventBuilder.java index cfaec9bf..e5e04170 100644 --- a/nostr-java-api/src/main/java/nostr/api/nip01/NIP01EventBuilder.java +++ b/nostr-java-api/src/main/java/nostr/api/nip01/NIP01EventBuilder.java @@ -27,24 +27,39 @@ public void updateDefaultSender(Identity defaultSender) { } public GenericEvent buildTextNote(String content) { - return new GenericEventFactory(resolveSender(null), Kind.TEXT_NOTE.getValue(), content) - .create(); + return buildTextNote(null, content); } - // Removed deprecated Identity-accepting overloads; use instance-configured sender + public GenericEvent buildTextNote(Identity sender, String content) { + return new GenericEventFactory(resolveSender(sender), Kind.TEXT_NOTE.getValue(), content) + .create(); + } public GenericEvent buildRecipientTextNote(String content, List tags) { - return new GenericEventFactory(resolveSender(null), Kind.TEXT_NOTE.getValue(), tags, content) + return buildRecipientTextNote(null, content, tags); + } + + public GenericEvent buildRecipientTextNote( + Identity sender, String content, List tags) { + return new GenericEventFactory( + resolveSender(sender), Kind.TEXT_NOTE.getValue(), tags, content) .create(); } public GenericEvent buildTaggedTextNote(@NonNull List tags, @NonNull String content) { - return new GenericEventFactory(resolveSender(null), Kind.TEXT_NOTE.getValue(), tags, content) + return buildTaggedTextNote(null, tags, content); + } + + public GenericEvent buildTaggedTextNote( + Identity sender, @NonNull List tags, @NonNull String content) { + return new GenericEventFactory( + resolveSender(sender), Kind.TEXT_NOTE.getValue(), tags, content) .create(); } public GenericEvent buildMetadataEvent(@NonNull Identity sender, @NonNull String payload) { - return new GenericEventFactory(sender, Kind.SET_METADATA.getValue(), payload).create(); + return new GenericEventFactory(resolveSender(sender), Kind.SET_METADATA.getValue(), payload) + .create(); } public GenericEvent buildMetadataEvent(@NonNull String payload) { @@ -56,28 +71,60 @@ public GenericEvent buildMetadataEvent(@NonNull String payload) { } public GenericEvent buildReplaceableEvent(Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, content).create(); + return buildReplaceableEvent(null, kind, content); + } + + public GenericEvent buildReplaceableEvent( + Identity sender, Integer kind, String content) { + return new GenericEventFactory(resolveSender(sender), kind, content).create(); + } + + public GenericEvent buildReplaceableEvent( + List tags, Integer kind, String content) { + return buildReplaceableEvent(null, tags, kind, content); } - public GenericEvent buildReplaceableEvent(List tags, Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, tags, content).create(); + public GenericEvent buildReplaceableEvent( + Identity sender, List tags, Integer kind, String content) { + return new GenericEventFactory(resolveSender(sender), kind, tags, content).create(); } public GenericEvent buildEphemeralEvent(List tags, Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, tags, content).create(); + return buildEphemeralEvent(null, tags, kind, content); + } + + public GenericEvent buildEphemeralEvent( + Identity sender, List tags, Integer kind, String content) { + return new GenericEventFactory(resolveSender(sender), kind, tags, content).create(); } public GenericEvent buildEphemeralEvent(Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, content).create(); + return buildEphemeralEvent(null, kind, content); + } + + public GenericEvent buildEphemeralEvent(Identity sender, Integer kind, String content) { + return new GenericEventFactory(resolveSender(sender), kind, content).create(); } public GenericEvent buildAddressableEvent(Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, content).create(); + return buildAddressableEvent(null, kind, content); + } + + public GenericEvent buildAddressableEvent( + Identity sender, Integer kind, String content) { + return new GenericEventFactory(resolveSender(sender), kind, content).create(); } public GenericEvent buildAddressableEvent( @NonNull List tags, @NonNull Integer kind, String content) { - return new GenericEventFactory(resolveSender(null), kind, tags, content).create(); + return buildAddressableEvent(null, tags, kind, content); + } + + public GenericEvent buildAddressableEvent( + Identity sender, @NonNull List tags, @NonNull Integer kind, String content) { + return new GenericEventFactory( + resolveSender(sender), kind, tags, content) + .create(); } private Identity resolveSender(Identity override) { diff --git a/nostr-java-api/src/test/java/nostr/api/unit/NIP01EventBuilderTest.java b/nostr-java-api/src/test/java/nostr/api/unit/NIP01EventBuilderTest.java new file mode 100644 index 00000000..d43bb71e --- /dev/null +++ b/nostr-java-api/src/test/java/nostr/api/unit/NIP01EventBuilderTest.java @@ -0,0 +1,35 @@ +package nostr.api.unit; + +import nostr.api.nip01.NIP01EventBuilder; +import nostr.base.PrivateKey; +import nostr.event.impl.GenericEvent; +import nostr.id.Identity; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class NIP01EventBuilderTest { + + // Ensures that an explicitly provided sender overrides the default identity. + @Test + void buildTextNoteUsesOverrideIdentity() { + Identity defaultSender = Identity.create(PrivateKey.generateRandomPrivKey()); + Identity overrideSender = Identity.create(PrivateKey.generateRandomPrivKey()); + NIP01EventBuilder builder = new NIP01EventBuilder(defaultSender); + + GenericEvent event = builder.buildTextNote(overrideSender, "override"); + + assertEquals(overrideSender.getPublicKey(), event.getPubKey()); + } + + // Ensures that the builder falls back to the configured sender when no override is supplied. + @Test + void buildTextNoteUsesDefaultIdentityWhenOverrideMissing() { + Identity defaultSender = Identity.create(PrivateKey.generateRandomPrivKey()); + NIP01EventBuilder builder = new NIP01EventBuilder(defaultSender); + + GenericEvent event = builder.buildTextNote("fallback"); + + assertEquals(defaultSender.getPublicKey(), event.getPubKey()); + } +}