WhatWG/W3C-compatible server-sent events/eventsource client. The module attempts to implement an absolute minimal amount of features/changes beyond the specification.
If you're looking for a modern alternative with a less constrained API, check out the eventsource-client
package.
npm install --save eventsource
Basically, any environment that supports:
If you need to support older runtimes, try the 2.x
branch/version range (note: 2.x branch is primarily targetted at Node.js, not browsers).
import {EventSource} from 'eventsource' const es = new EventSource('https://my-server.com/sse') /* * This will listen for events with the field `event: notice`. */ es.addEventListener('notice', (event) => { console.log(event.data) }) /* * This will listen for events with the field `event: update`. */ es.addEventListener('update', (event) => { console.log(event.data) }) /* * The event "message" is a special case, as it will capture events _without_ an * event field, as well as events that have the specific type `event: message`. * It will not trigger on any other event type. */ es.addEventListener('message', (event) => { console.log(event.data) }) /** * To explicitly close the connection, call the `close` method. * This will prevent any reconnection from happening. */ setTimeout(() => { es.close() }, 10_000)
Make sure you have configured your TSConfig so it matches the environment you are targetting. If you are targetting browsers, this would be dom
:
If you're using Node.js, ensure you have @types/node
installed (and it is version 18 or higher). Cloudflare workers have @cloudflare/workers-types
etc.
The following errors are caused by targetting an environment that does not have the necessary types available:
error TS2304: Cannot find name 'Event'.
error TS2304: Cannot find name 'EventTarget'.
error TS2304: Cannot find name 'MessageEvent'.
See MIGRATION.md for a detailed migration guide.
Extensions to the WhatWG/W3C API Message and code properties on errorsThe error
event has a message
and code
property that can be used to get more information about the error. In the specification, the Event
es.addEventListener('error', (err) => { if (err.code === 401 || err.code === 403) { console.log('not authorized') } })Specify
fetch
implementation
The EventSource
constructor accepts an optional fetch
property in the second argument that can be used to specify the fetch
implementation to use.
This can be useful in environments where the global fetch
function is not available - but it can also be used to alter the request/response behaviour.
const es = new EventSource('https://my-server.com/sse', { fetch: (input, init) => fetch(input, { ...init, headers: { ...init.headers, Authorization: 'Bearer myToken', }, }), })
Use a package like undici
to add proxy support, either through environment variables or explicit configuration.
// npm install undici --save import {fetch, EnvHttpProxyAgent} from 'undici' const proxyAgent = new EnvHttpProxyAgent() const es = new EventSource('https://my-server.com/sse', { fetch: (input, init) => fetch(input, {...init, dispatcher: proxyAgent}), })Allow unauthorized HTTPS requests
Use a package like undici
for more control of fetch options through the use of an Agent
.
// npm install undici --save import {fetch, Agent} from 'undici' const unsafeAgent = new Agent({ connect: { rejectUnauthorized: false, }, }) await fetch('https://my-server.com/sse', { dispatcher: unsafeAgent, })
MIT-licensed. See LICENSE.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4