@@ -13,17 +13,26 @@ export const isDislikeReaction = (event: { kind?: number; content?: string }): b
1313 isReactionEvent ( event ) && event . content === '-'
1414
1515export const parseReaction = ( event : Event ) : ReactionEntry => {
16- const eTags = event . tags . filter ( ( tag ) => tag [ 0 ] === EventTags . Event )
17- const pTags = event . tags . filter ( ( tag ) => tag [ 0 ] === EventTags . Pubkey )
18- const aTags = event . tags . filter ( ( tag ) => tag [ 0 ] === EventTags . Address )
19- const kTag = event . tags . find ( ( tag ) => tag [ 0 ] === EventTags . Kind )
16+ let lastETag : string [ ] | undefined
17+ let lastPTag : string [ ] | undefined
18+ let lastATag : string [ ] | undefined
19+ let firstKTag : string [ ] | undefined
2020
21- const kTagValue = kTag && kTag . length > 1 ? kTag [ 1 ] : undefined
21+ for ( const tag of event . tags ) {
22+ switch ( tag [ 0 ] ) {
23+ case EventTags . Event : lastETag = tag ; break
24+ case EventTags . Pubkey : lastPTag = tag ; break
25+ case EventTags . Address : lastATag = tag ; break
26+ case EventTags . Kind : if ( ! firstKTag ) { firstKTag = tag } break
27+ }
28+ }
29+
30+ const kTagValue = firstKTag && firstKTag . length > 1 ? firstKTag [ 1 ] : undefined
2231 const parsedKind = kTagValue !== undefined ? Number ( kTagValue ) : undefined
2332 return {
24- targetEventId : eTags . length > 0 ? eTags [ eTags . length - 1 ] [ 1 ] : undefined ,
25- targetPubkey : pTags . length > 0 ? pTags [ pTags . length - 1 ] [ 1 ] : undefined ,
26- targetAddress : aTags . length > 0 ? aTags [ aTags . length - 1 ] [ 1 ] : undefined ,
33+ targetEventId : lastETag ?. [ 1 ] ,
34+ targetPubkey : lastPTag ?. [ 1 ] ,
35+ targetAddress : lastATag ?. [ 1 ] ,
2736 targetKind : parsedKind !== undefined && Number . isFinite ( parsedKind ) ? parsedKind : undefined ,
2837 content : event . content ,
2938 }
0 commit comments