async publish ({ created_at, content, tags = [], kind }, { relays, signer, timeout } = {}) {
    const event = await this.sign({ kind, created_at, content, tags }, { signer })

    const successfulRelays = []
    const failedRelays = []

    const relaySet = NDKRelaySet.fromRelayUrls(relays, this.ndk, true)

    event.on('relay:publish:failed', (relay, error) => {
      failedRelays.push({ relay: relay.url, error })
    })

    for (const relay of (await relaySet.publish(event, timeout))) {
      successfulRelays.push(relay.url)
    }

    return {
      event,
      successfulRelays,
      failedRelays
    }
  }
@param {Object} rawEvent
@param {number} rawEvent.kind
@param {number} rawEvent.created_at
@param {string} rawEvent.content
@param {Array<Array<string>>} rawEvent.tags
@param {Object} context
@param {Array<string>} context.relays
@param {string} context.privKey
@param {NDKSigner} context.signer
@param {number} context.timeout
@returns {Promise<NDKEvent>}