From ac7598b5e390cf497ea17de1698bf67dfa818d6c Mon Sep 17 00:00:00 2001 From: futpib Date: Sun, 7 May 2023 14:40:57 +0400 Subject: [PATCH] Fix reposts without `p` tag not parsed --- nip18.test.js | 20 +++++++++++++++++++- nip18.ts | 6 +++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/nip18.test.js b/nip18.test.js index c8b938f..85c459f 100644 --- a/nip18.test.js +++ b/nip18.test.js @@ -2,10 +2,11 @@ const {nip18, finishEvent, getPublicKey, Kind} = require('./lib/nostr.cjs') +const relayUrl = 'https://relay.example.com' + describe('finishRepostEvent + getRepostedEventPointer + getRepostedEvent', () => { const privateKey = 'd217c1ff2f8a65c3e3a1740db3b9f58b8c848bb45e26d00ed4714e4a0f4ceecf' - const relayUrl = 'https://relay.example.com' const publicKey = getPublicKey(privateKey) @@ -99,3 +100,20 @@ describe('finishRepostEvent + getRepostedEventPointer + getRepostedEvent', () => expect(repostedEventFromContent).toEqual(undefined) }) }) + +describe('getRepostedEventPointer', () => { + it('should parse an event with only an `e` tag', () => { + const event = { + kind: Kind.Repost, + tags: [ + ['e', 'reposted event id', relayUrl], + ], + } + + const repostedEventPointer = nip18.getRepostedEventPointer(event) + + expect(repostedEventPointer.id).toEqual('reposted event id') + expect(repostedEventPointer.author).toEqual(undefined) + expect(repostedEventPointer.relays).toEqual([ relayUrl ]) + }) +}) diff --git a/nip18.ts b/nip18.ts index 77fce26..53da9d1 100644 --- a/nip18.ts +++ b/nip18.ts @@ -55,14 +55,14 @@ export function getRepostedEventPointer(event: Event): undefined | Event } } - if (lastETag === undefined || lastPTag === undefined) { + if (lastETag === undefined) { return undefined } return { id: lastETag[1], - relays: [ lastETag[2], lastPTag[2] ].filter((x) => x !== undefined), - author: lastPTag[1], + relays: [ lastETag[2], lastPTag?.[2] ].filter((x): x is string => typeof x === 'string'), + author: lastPTag?.[1], } }