diff --git a/.changeset/fix-event-expiration-validation.md b/.changeset/fix-event-expiration-validation.md new file mode 100644 index 00000000..14609437 --- /dev/null +++ b/.changeset/fix-event-expiration-validation.md @@ -0,0 +1,5 @@ +--- +"nostream": patch +--- + +fix: reject expiration timestamp 0 and accept safe-integer timestamps beyond year 2287 in getEventExpiration() diff --git a/src/utils/event.ts b/src/utils/event.ts index 78b012b0..9f23ee1f 100644 --- a/src/utils/event.ts +++ b/src/utils/event.ts @@ -253,7 +253,7 @@ export const getEventExpiration = (event: Event): number | undefined => { const expirationTime = Number(rawExpirationTime) - if (Number.isSafeInteger(expirationTime) && Math.log10(expirationTime) < 10) { + if (Number.isSafeInteger(expirationTime) && expirationTime > 0) { return expirationTime } } diff --git a/test/unit/utils/event.spec.ts b/test/unit/utils/event.spec.ts index 53cc0f6c..9c747ac2 100644 --- a/test/unit/utils/event.spec.ts +++ b/test/unit/utils/event.spec.ts @@ -691,6 +691,16 @@ describe('NIP-40', () => { event.tags = [['expiration', 'a']] expect(getEventExpiration(event)).to.be.undefined }) + + it('returns false if expiration is 0', () => { + event.tags = [['expiration', '0']] + expect(getEventExpiration(event)).to.be.undefined + }) + + it('returns true if expiration is a safe integer beyond year 2287', () => { + event.tags = [['expiration', '10000000000']] + expect(getEventExpiration(event)).to.equal(10000000000) + }) }) describe('isExpiredEvent', () => {