1
1
import { Transport } from "../shared/transport.js" ;
2
2
import { JSONRPCMessage , JSONRPCMessageSchema } from "../types.js" ;
3
+ import { EventSource , type EventSourceInit } from "eventsource" ;
3
4
4
5
/**
5
6
* Client transport for SSE: this will connect to a server using Server-Sent Events for receiving
6
7
* messages and make separate POST requests for sending messages.
7
- *
8
- * This uses the EventSource API in browsers. You can install the `eventsource` package for Node.js.
9
8
*/
10
9
export class SSEClientTransport implements Transport {
11
10
private _eventSource ?: EventSource ;
@@ -19,7 +18,10 @@ export class SSEClientTransport implements Transport {
19
18
onerror ?: ( error : Error ) => void ;
20
19
onmessage ?: ( message : JSONRPCMessage ) => void ;
21
20
22
- constructor ( url : URL , opts ?: { eventSourceInit ?: EventSourceInit , requestInit ?: RequestInit } ) {
21
+ constructor (
22
+ url : URL ,
23
+ opts ?: { eventSourceInit ?: EventSourceInit ; requestInit ?: RequestInit } ,
24
+ ) {
23
25
this . _url = url ;
24
26
this . _eventSourceInit = opts ?. eventSourceInit ;
25
27
this . _requestInit = opts ?. requestInit ;
@@ -33,7 +35,10 @@ export class SSEClientTransport implements Transport {
33
35
}
34
36
35
37
return new Promise ( ( resolve , reject ) => {
36
- this . _eventSource = new EventSource ( this . _url . href , this . _eventSourceInit ) ;
38
+ this . _eventSource = new EventSource (
39
+ this . _url . href ,
40
+ this . _eventSourceInit ,
41
+ ) ;
37
42
this . _abortController = new AbortController ( ) ;
38
43
39
44
this . _eventSource . onerror = ( event ) => {
@@ -101,7 +106,7 @@ export class SSEClientTransport implements Transport {
101
106
method : "POST" ,
102
107
headers,
103
108
body : JSON . stringify ( message ) ,
104
- signal : this . _abortController ?. signal
109
+ signal : this . _abortController ?. signal ,
105
110
} ;
106
111
107
112
const response = await fetch ( this . _endpoint , init ) ;
0 commit comments