@@ -3,34 +3,33 @@ import { Session } from "../common/session.js";
3
3
import { UserConfig } from "../common/config.js" ;
4
4
import { Telemetry } from "../telemetry/telemetry.js" ;
5
5
import type { SessionEvents } from "../common/session.js" ;
6
- import { ReadResourceCallback , RegisteredResource , ResourceMetadata } from "@modelcontextprotocol/sdk/server/mcp.js" ;
6
+ import { ReadResourceCallback , ResourceMetadata } from "@modelcontextprotocol/sdk/server/mcp.js" ;
7
7
8
8
type PayloadOf < K extends keyof SessionEvents > = SessionEvents [ K ] [ 0 ] ;
9
9
10
10
type ResourceConfiguration = { name : string ; uri : string ; config : ResourceMetadata } ;
11
11
12
- export function ReactiveResource < V , KE extends readonly ( keyof SessionEvents ) [ ] > (
12
+ export function ReactiveResource < Value , RelevantEvents extends readonly ( keyof SessionEvents ) [ ] > (
13
13
{ name, uri, config : resourceConfig } : ResourceConfiguration ,
14
14
{
15
15
initial,
16
16
events,
17
17
} : {
18
- initial : V ;
19
- events : KE ;
18
+ initial : Value ;
19
+ events : RelevantEvents ;
20
20
}
21
21
) {
22
- type E = KE [ number ] ;
22
+ type SomeEvent = RelevantEvents [ number ] ;
23
23
24
24
abstract class NewReactiveResource {
25
- private registeredResource ?: RegisteredResource ;
26
25
protected readonly session : Session ;
27
26
protected readonly config : UserConfig ;
28
- protected current : V ;
27
+ protected current : Value ;
29
28
30
29
constructor (
31
30
protected readonly server : Server ,
32
31
protected readonly telemetry : Telemetry ,
33
- current ?: V
32
+ current ?: Value
34
33
) {
35
34
this . current = current ?? initial ;
36
35
this . session = server . session ;
@@ -45,12 +44,7 @@ export function ReactiveResource<V, KE extends readonly (keyof SessionEvents)[]>
45
44
}
46
45
47
46
public register ( ) : void {
48
- this . registeredResource = this . server . mcpServer . registerResource (
49
- name ,
50
- uri ,
51
- resourceConfig ,
52
- this . resourceCallback
53
- ) ;
47
+ this . server . mcpServer . registerResource ( name , uri , resourceConfig , this . resourceCallback ) ;
54
48
}
55
49
56
50
private resourceCallback : ReadResourceCallback = ( uri ) => ( {
@@ -64,15 +58,14 @@ export function ReactiveResource<V, KE extends readonly (keyof SessionEvents)[]>
64
58
} ) ;
65
59
66
60
private triggerUpdate ( ) {
67
- this . registeredResource ?. update ( { } ) ;
68
- this . server . mcpServer . sendResourceListChanged ( ) ;
61
+ void this . server . mcpServer . server . sendResourceUpdated ( { uri } ) ;
69
62
}
70
63
71
- reduceApply ( eventName : E , ...event : PayloadOf < E > [ ] ) : void {
64
+ reduceApply ( eventName : SomeEvent , ...event : PayloadOf < SomeEvent > [ ] ) : void {
72
65
this . current = this . reduce ( eventName , ...event ) ;
73
66
}
74
67
75
- protected abstract reduce ( eventName : E , ...event : PayloadOf < E > [ ] ) : V ;
68
+ protected abstract reduce ( eventName : SomeEvent , ...event : PayloadOf < SomeEvent > [ ] ) : Value ;
76
69
abstract toOutput ( ) : string ;
77
70
}
78
71
0 commit comments