diff --git a/package.json b/package.json index f87ef02..2b32c2c 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "node-fetch": "2", "ts-jest": "^29.0.3", "tsd": "^0.22.0", - "typescript": "^4.9.4" + "typescript": "^4.9.4", + "websocket-polyfill": "^0.0.3" }, "scripts": { "build": "node build.js", diff --git a/relay.test.js b/relay.test.js index 40a6a3b..fc57df4 100644 --- a/relay.test.js +++ b/relay.test.js @@ -1,5 +1,6 @@ /* eslint-env jest */ +require('websocket-polyfill') const { relayInit, generatePrivateKey, @@ -8,110 +9,106 @@ const { signEvent } = require('./lib/nostr.cjs') -describe('relay interaction', () => { - let relay = relayInit('wss://nostr-pub.semisol.dev/') +let relay = relayInit('wss://nostr-pub.semisol.dev/') - beforeAll(() => { - relay.connect() - }) - - afterAll(async () => { - await relay.close() - }) - - test('connectivity', () => { - return expect( - new Promise(resolve => { - relay.on('connect', () => { - resolve(true) - }) - relay.on('error', () => { - resolve(false) - }) - }) - ).resolves.toBe(true) - }) - - test('querying', () => { - var resolve1 - var resolve2 - - let sub = relay.sub([ - { - ids: [ - 'd7dd5eb3ab747e16f8d0212d53032ea2a7cadef53837e5a6c66d42849fcb9027' - ] - } - ]) - sub.on('event', event => { - expect(event).toHaveProperty( - 'id', - 'd7dd5eb3ab747e16f8d0212d53032ea2a7cadef53837e5a6c66d42849fcb9027' - ) - resolve1(true) - }) - sub.on('eose', () => { - resolve2(true) - }) - - return expect( - Promise.all([ - new Promise(resolve => { - resolve1 = resolve - }), - new Promise(resolve => { - resolve2 = resolve - }) - ]) - ).resolves.toEqual([true, true]) - }) - - test('listening (twice) and publishing', async () => { - let sk = generatePrivateKey() - let pk = getPublicKey(sk) - var resolve1 - var resolve2 - - let sub = relay.sub([ - { - kinds: [27572], - authors: [pk] - } - ]) - - sub.on('event', event => { - expect(event).toHaveProperty('pubkey', pk) - expect(event).toHaveProperty('kind', 27572) - expect(event).toHaveProperty('content', 'nostr-tools test suite') - resolve1(true) - }) - sub.on('event', event => { - expect(event).toHaveProperty('pubkey', pk) - expect(event).toHaveProperty('kind', 27572) - expect(event).toHaveProperty('content', 'nostr-tools test suite') - resolve2(true) - }) - - let event = { - kind: 27572, - pubkey: pk, - created_at: Math.floor(Date.now() / 1000), - tags: [], - content: 'nostr-tools test suite' - } - event.id = getEventHash(event) - event.sig = await signEvent(event, sk) - - relay.publish(event) - return expect( - Promise.all([ - new Promise(resolve => { - resolve1 = resolve - }), - new Promise(resolve => { - resolve2 = resolve - }) - ]) - ).resolves.toEqual([true, true]) - }) +beforeAll(() => { + relay.connect() +}) + +afterAll(async () => { + await relay.close() +}) + +test('connectivity', () => { + return expect( + new Promise(resolve => { + relay.on('connect', () => { + resolve(true) + }) + relay.on('error', () => { + resolve(false) + }) + }) + ).resolves.toBe(true) +}) + +test('querying', () => { + var resolve1 + var resolve2 + + let sub = relay.sub([ + { + ids: ['d7dd5eb3ab747e16f8d0212d53032ea2a7cadef53837e5a6c66d42849fcb9027'] + } + ]) + sub.on('event', event => { + expect(event).toHaveProperty( + 'id', + 'd7dd5eb3ab747e16f8d0212d53032ea2a7cadef53837e5a6c66d42849fcb9027' + ) + resolve1(true) + }) + sub.on('eose', () => { + resolve2(true) + }) + + return expect( + Promise.all([ + new Promise(resolve => { + resolve1 = resolve + }), + new Promise(resolve => { + resolve2 = resolve + }) + ]) + ).resolves.toEqual([true, true]) +}) + +test('listening (twice) and publishing', async () => { + let sk = generatePrivateKey() + let pk = getPublicKey(sk) + var resolve1 + var resolve2 + + let sub = relay.sub([ + { + kinds: [27572], + authors: [pk] + } + ]) + + sub.on('event', event => { + expect(event).toHaveProperty('pubkey', pk) + expect(event).toHaveProperty('kind', 27572) + expect(event).toHaveProperty('content', 'nostr-tools test suite') + resolve1(true) + }) + sub.on('event', event => { + expect(event).toHaveProperty('pubkey', pk) + expect(event).toHaveProperty('kind', 27572) + expect(event).toHaveProperty('content', 'nostr-tools test suite') + resolve2(true) + }) + + let event = { + kind: 27572, + pubkey: pk, + created_at: Math.floor(Date.now() / 1000), + tags: [], + content: 'nostr-tools test suite' + } + event.id = getEventHash(event) + event.sig = await signEvent(event, sk) + + relay.publish(event) + return expect( + Promise.all([ + new Promise(resolve => { + resolve1 = resolve + }), + new Promise(resolve => { + resolve2 = resolve + }) + ]) + ).resolves.toEqual([true, true]) })