Está correto, é assi mesmo!

Quando você envia a mensagem para o relay solititando os eventos, você 'seta' um listener "message" que receberá os eventos, porém, recebe evento a evento, e no final vocẽ recebe um "EOSE", que indica o fim da resposta do relay.

Então, vocẽ provavelmente está enviando o "REQ" e setando o listener "message", porém, fechando assim que recebe o primeiro evento, então receberá sempre o primeiro evento e fechar o listener. Você deve enviar o "REQ" e deixar o listener esperando por um tempo limite "timeout", tenho um código de exemplo:

Em typescript fica assim utilizando Promise:

Reply to this note

Please Login to reply.

Discussion

Provavelmente deve ser isso.

Lendo a documentação da lib websocket lá informar que estás questões de comunicação não deveria ser precaução do dev, a lib cuida disso por debaixo dos panos.

Que mesmo que a mensagem seja fragmentada a lib pegar todas as partes monta e retorna o resultado. Por isso não me preocupei com essa parte da comunicação.

Vou fazer os testes essa parte do listener

Se não quiser mexer diretamente com websocket tem a lib nostr-tools que é uma mão na roda.

Dá um npm install nostr-tools e npm install ws

E aqui está o código:

Antes só faça uma coisinha, vá em node_modules/nostr-tools/lib/esm/relay.js e coloque import WebSocket from 'ws'

O código:

import { Relay } from 'nostr-tools/relay'

const relay = await Relay.connect('wss://relay.damus.io')

console.log(`connected to ${relay.url}`)

// let's query for an event that exists

const sub = relay.subscribe([

{

"kinds": [1],

"authors": ['912aa339f3f0c6401da45ec920e7f4f751c56990c8b4e85c912c4161272ad28d'],

},

], {

onevent(event) {

console.log('we got the event we wanted:', event.content)

},

oneose() {

sub.close()

}

})

Isso ai grande homem!!!

Imaginei que seria isso mesmo, intuitivamente a gente acha que uma execução só, irá retornar todos os eventos etc..

Ai sim Man, mais um passo pra dominar o protocolo!!