Fix comment event matching for uppercase addresses

This commit is contained in:
thePR0M3TH3AN committed 2025-11-04 16:52:12 -05:00
1 parent 71df75a8d1
commit c882139e90
2 files changed
+69 -10

No files matched your search

+33 -10
View File
@@ -916,13 +916,27 @@ function isVideoCommentEvent(event, descriptor) {
descriptor && typeof descriptor === "object" ? descriptor : {};
const tags = Array.isArray(event.tags) ? event.tags : [];
const requiresRootIdentifierMatch = Boolean(targetDescriptor.rootIdentifier);
const normalizedRootIdentifier = normalizeTagValue(
targetDescriptor.rootIdentifier,
);
const normalizedVideoDefinitionAddress = normalizeTagValue(
targetDescriptor.videoDefinitionAddress,
);
const normalizedVideoEventId = normalizeTagValue(
targetDescriptor.videoEventId,
);
const normalizedParentCommentId = normalizeTagValue(
targetDescriptor.parentCommentId,
);
const requiresRootIdentifierMatch = Boolean(normalizedRootIdentifier);
const requiresAddressMatch =
!requiresRootIdentifierMatch && Boolean(targetDescriptor.videoDefinitionAddress);
!requiresRootIdentifierMatch && Boolean(normalizedVideoDefinitionAddress);
const requiresEventMatch =
!requiresRootIdentifierMatch && !requiresAddressMatch &&
Boolean(targetDescriptor.videoEventId);
const requiresParentTag = Boolean(targetDescriptor.parentCommentId);
!requiresRootIdentifierMatch &&
!requiresAddressMatch &&
Boolean(normalizedVideoEventId);
const requiresParentTag = Boolean(normalizedParentCommentId);
let hasIdentifierTag = !requiresRootIdentifierMatch;
let hasDefinitionTag = !requiresAddressMatch;
@@ -972,20 +986,29 @@ function isVideoCommentEvent(event, descriptor) {
}
if (lowerName === "i") {
if (normalizedValue === targetDescriptor.rootIdentifier) {
if (
normalizedRootIdentifier &&
normalizedValue === normalizedRootIdentifier
) {
hasIdentifierTag = true;
}
} else if (lowerName === "a") {
if (normalizedValue === targetDescriptor.videoDefinitionAddress) {
if (
normalizedVideoDefinitionAddress &&
normalizedValue === normalizedVideoDefinitionAddress
) {
hasDefinitionTag = true;
}
} else if (lowerName === "e") {
if (normalizedValue === targetDescriptor.videoEventId) {
if (
normalizedVideoEventId &&
normalizedValue === normalizedVideoEventId
) {
hasEventTag = true;
}
if (
targetDescriptor.parentCommentId &&
normalizedValue === targetDescriptor.parentCommentId
normalizedParentCommentId &&
normalizedValue === normalizedParentCommentId
) {
hasParentTag = true;
}
+36
View File
@@ -6,8 +6,11 @@ import {
publishComment,
listVideoComments,
subscribeVideoComments,
__testExports,
} from "../../js/nostr/commentEvents.js";
const { normalizeCommentTarget, isVideoCommentEvent } = __testExports;
function createMockClient({
actorPubkey = "actor-pubkey",
relays = ["wss://primary"],
@@ -281,6 +284,39 @@ test("listVideoComments matches comments even when tag casing and whitespace dif
"isVideoCommentEvent should treat tag casing and whitespace as insignificant",
);
});
test("listVideoComments matches uppercase definition addresses without lowering", async () => {
const uppercasePointer = "30078:AUTHOR:Clip42";
const matchingEvent = {
id: "uppercase-comment",
kind: COMMENT_EVENT_KIND,
created_at: 1700000400,
tags: [
["A", uppercasePointer],
["e", "video-1"],
],
};
const { client, pool } = createMockClient();
pool.list = async () => [[matchingEvent]];
const descriptorInput = {
videoEventId: "video-1",
videoDefinitionAddress: uppercasePointer,
};
const events = await listVideoComments(client, descriptorInput);
assert.equal(events.length, 1, "uppercase pointer should still match");
assert.equal(events[0].id, "uppercase-comment", "matched event should be returned");
const normalizedDescriptor = normalizeCommentTarget(descriptorInput);
assert.ok(normalizedDescriptor, "normalizeCommentTarget should produce a descriptor");
assert.equal(
isVideoCommentEvent(matchingEvent, normalizedDescriptor),
true,
"isVideoCommentEvent should respect descriptor casing for definition pointers",
);
});
test("listVideoComments matches comments even when tag casing and whitespace differ", async () => {
const mismatchedEvent = {
id: "case-comment",