@contextvm/sdk 0.1.48 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/core/constants.d.ts +3 -0
- package/dist/esm/core/constants.d.ts.map +1 -1
- package/dist/esm/core/constants.js +3 -0
- package/dist/esm/core/constants.js.map +1 -1
- package/dist/esm/core/utils/logger.d.ts +1 -1
- package/dist/esm/core/utils/logger.d.ts.map +1 -1
- package/dist/esm/core/utils/lru-cache.d.ts.map +1 -1
- package/dist/esm/core/utils/lru-cache.js +9 -1
- package/dist/esm/core/utils/lru-cache.js.map +1 -1
- package/dist/esm/core/utils/task-queue.d.ts +5 -0
- package/dist/esm/core/utils/task-queue.d.ts.map +1 -1
- package/dist/esm/core/utils/task-queue.js +11 -0
- package/dist/esm/core/utils/task-queue.js.map +1 -1
- package/dist/esm/core/utils/utils.d.ts +8 -0
- package/dist/esm/core/utils/utils.d.ts.map +1 -1
- package/dist/esm/core/utils/utils.js +23 -0
- package/dist/esm/core/utils/utils.js.map +1 -1
- package/dist/esm/relay/applesauce-relay-pool.d.ts +37 -4
- package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
- package/dist/esm/relay/applesauce-relay-pool.js +165 -11
- package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
- package/dist/esm/transport/base-nostr-transport.d.ts +1 -1
- package/dist/esm/transport/base-nostr-transport.d.ts.map +1 -1
- package/dist/esm/transport/base-nostr-transport.js +8 -6
- package/dist/esm/transport/base-nostr-transport.js.map +1 -1
- package/dist/esm/transport/nostr-client/correlation-store.d.ts +60 -0
- package/dist/esm/transport/nostr-client/correlation-store.d.ts.map +1 -0
- package/dist/esm/transport/nostr-client/correlation-store.js +61 -0
- package/dist/esm/transport/nostr-client/correlation-store.js.map +1 -0
- package/dist/esm/transport/nostr-client/stateless-mode-handler.d.ts +24 -0
- package/dist/esm/transport/nostr-client/stateless-mode-handler.d.ts.map +1 -0
- package/dist/esm/transport/nostr-client/stateless-mode-handler.js +61 -0
- package/dist/esm/transport/nostr-client/stateless-mode-handler.js.map +1 -0
- package/dist/esm/transport/nostr-client-transport.d.ts +48 -24
- package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-client-transport.js +92 -131
- package/dist/esm/transport/nostr-client-transport.js.map +1 -1
- package/dist/esm/transport/nostr-server/announcement-manager.d.ts +116 -0
- package/dist/esm/transport/nostr-server/announcement-manager.d.ts.map +1 -0
- package/dist/esm/transport/nostr-server/announcement-manager.js +288 -0
- package/dist/esm/transport/nostr-server/announcement-manager.js.map +1 -0
- package/dist/esm/transport/nostr-server/authorization-policy.d.ts +74 -0
- package/dist/esm/transport/nostr-server/authorization-policy.d.ts.map +1 -0
- package/dist/esm/transport/nostr-server/authorization-policy.js +91 -0
- package/dist/esm/transport/nostr-server/authorization-policy.js.map +1 -0
- package/dist/esm/transport/nostr-server/correlation-store.d.ts +102 -0
- package/dist/esm/transport/nostr-server/correlation-store.d.ts.map +1 -0
- package/dist/esm/transport/nostr-server/correlation-store.js +167 -0
- package/dist/esm/transport/nostr-server/correlation-store.js.map +1 -0
- package/dist/esm/transport/nostr-server/session-store.d.ts +99 -0
- package/dist/esm/transport/nostr-server/session-store.d.ts.map +1 -0
- package/dist/esm/transport/nostr-server/session-store.js +123 -0
- package/dist/esm/transport/nostr-server/session-store.js.map +1 -0
- package/dist/esm/transport/nostr-server-transport.d.ts +18 -63
- package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
- package/dist/esm/transport/nostr-server-transport.js +135 -378
- package/dist/esm/transport/nostr-server-transport.js.map +1 -1
- package/package.json +11 -12
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { EncryptionMode, } from '../core/interfaces.js';
|
|
2
2
|
import { CTXVM_MESSAGES_KIND, GIFT_WRAP_KIND, mcpToNostrEvent, NOSTR_TAGS, nostrEventToMcpMessage, encryptMessage, SERVER_ANNOUNCEMENT_KIND, TOOLS_LIST_KIND, RESOURCES_LIST_KIND, RESOURCETEMPLATES_LIST_KIND, PROMPTS_LIST_KIND, } from '../core/index.js';
|
|
3
|
-
import { validateMessage } from '../core/utils/utils.js';
|
|
3
|
+
import { validateMessage, withTimeout } from '../core/utils/utils.js';
|
|
4
4
|
import { createLogger, } from '../core/utils/logger.js';
|
|
5
5
|
import { TaskQueue } from '../core/utils/task-queue.js';
|
|
6
|
+
// Default timeout for network operations (30 seconds)
|
|
7
|
+
const DEFAULT_TIMEOUT_MS = 30000;
|
|
6
8
|
/**
|
|
7
9
|
* Base class for Nostr-based transports that provides common functionality
|
|
8
10
|
* for managing Nostr connections, event conversion, and message handling.
|
|
@@ -26,7 +28,7 @@ export class BaseNostrTransport {
|
|
|
26
28
|
return;
|
|
27
29
|
}
|
|
28
30
|
try {
|
|
29
|
-
await this.relayHandler.connect();
|
|
31
|
+
await withTimeout(this.relayHandler.connect(), DEFAULT_TIMEOUT_MS, 'Connection to Nostr relay network timed out');
|
|
30
32
|
this.isConnected = true;
|
|
31
33
|
this.logger.info('Connected to Nostr relays', (_c = (_b = (_a = this.relayHandler).getRelayUrls) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : '');
|
|
32
34
|
}
|
|
@@ -42,7 +44,7 @@ export class BaseNostrTransport {
|
|
|
42
44
|
return;
|
|
43
45
|
}
|
|
44
46
|
try {
|
|
45
|
-
await this.relayHandler.disconnect();
|
|
47
|
+
await withTimeout(this.relayHandler.disconnect(), DEFAULT_TIMEOUT_MS, 'Disconnection from Nostr relay network timed out');
|
|
46
48
|
this.isConnected = false;
|
|
47
49
|
this.logger.info('Disconnected from Nostr relay network');
|
|
48
50
|
}
|
|
@@ -55,7 +57,7 @@ export class BaseNostrTransport {
|
|
|
55
57
|
*/
|
|
56
58
|
async getPublicKey() {
|
|
57
59
|
try {
|
|
58
|
-
return await this.signer.getPublicKey();
|
|
60
|
+
return await withTimeout(this.signer.getPublicKey(), DEFAULT_TIMEOUT_MS, 'Get public key timed out');
|
|
59
61
|
}
|
|
60
62
|
catch (error) {
|
|
61
63
|
this.logAndRethrowError('Failed to get public key from signer', error);
|
|
@@ -131,7 +133,7 @@ export class BaseNostrTransport {
|
|
|
131
133
|
try {
|
|
132
134
|
const pubkey = await this.getPublicKey();
|
|
133
135
|
const unsignedEvent = mcpToNostrEvent(message, pubkey, kind, tags);
|
|
134
|
-
return await this.signer.signEvent(unsignedEvent);
|
|
136
|
+
return await withTimeout(this.signer.signEvent(unsignedEvent), DEFAULT_TIMEOUT_MS, 'Sign event timed out');
|
|
135
137
|
}
|
|
136
138
|
catch (error) {
|
|
137
139
|
this.logAndRethrowError('Failed to create signed Nostr event', error, {
|
|
@@ -145,7 +147,7 @@ export class BaseNostrTransport {
|
|
|
145
147
|
*/
|
|
146
148
|
async publishEvent(event) {
|
|
147
149
|
try {
|
|
148
|
-
await this.relayHandler.publish(event);
|
|
150
|
+
await withTimeout(this.relayHandler.publish(event), DEFAULT_TIMEOUT_MS, 'Publish event timed out');
|
|
149
151
|
this.logger.debug('Published Nostr event', {
|
|
150
152
|
eventId: event.id,
|
|
151
153
|
kind: event.kind,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-nostr-transport.js","sourceRoot":"","sources":["../../../src/transport/base-nostr-transport.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,GAGf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-nostr-transport.js","sourceRoot":"","sources":["../../../src/transport/base-nostr-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { JSONRPCResponse } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a pending request waiting for a response from the server.
|
|
4
|
+
* Tracks the original request ID for response correlation and whether
|
|
5
|
+
* this is an initialize request.
|
|
6
|
+
*/
|
|
7
|
+
export interface PendingRequest {
|
|
8
|
+
/** The original JSON-RPC request ID to restore in the response */
|
|
9
|
+
originalRequestId: string | number | null;
|
|
10
|
+
/** Whether this request is the initialize handshake */
|
|
11
|
+
isInitialize: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Configuration options for the ClientCorrelationStore.
|
|
15
|
+
*/
|
|
16
|
+
export interface ClientCorrelationStoreOptions {
|
|
17
|
+
/** Maximum number of pending requests to track (default: 1000) */
|
|
18
|
+
maxPendingRequests?: number;
|
|
19
|
+
/** Callback invoked when a request is evicted from the cache */
|
|
20
|
+
onRequestEvicted?: (eventId: string, request: PendingRequest) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Manages correlation tracking for client-side request/response pairs.
|
|
24
|
+
* Uses an LRU cache to prevent memory leaks from abandoned requests.
|
|
25
|
+
*/
|
|
26
|
+
export declare class ClientCorrelationStore {
|
|
27
|
+
private readonly pendingRequests;
|
|
28
|
+
constructor(options?: ClientCorrelationStoreOptions);
|
|
29
|
+
/**
|
|
30
|
+
* Registers a pending request for correlation tracking.
|
|
31
|
+
* @param eventId - The Nostr event ID used as the correlation key
|
|
32
|
+
* @param request - The pending request information
|
|
33
|
+
*/
|
|
34
|
+
registerRequest(eventId: string, request: PendingRequest): void;
|
|
35
|
+
/**
|
|
36
|
+
* Resolves a response by finding and removing the corresponding request.
|
|
37
|
+
* Restores the original request ID in the response before resolving.
|
|
38
|
+
* @param eventId - The Nostr event ID of the response
|
|
39
|
+
* @param response - The JSON-RPC response to resolve
|
|
40
|
+
* @returns true if the request was found and resolved, false otherwise
|
|
41
|
+
*/
|
|
42
|
+
resolveResponse(eventId: string, response: JSONRPCResponse): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Checks if a pending request exists for the given event ID.
|
|
45
|
+
* @param eventId - The Nostr event ID to check
|
|
46
|
+
* @returns true if a request exists, false otherwise
|
|
47
|
+
*/
|
|
48
|
+
hasPendingRequest(eventId: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Removes a pending request without resolving it.
|
|
51
|
+
* @param eventId - The Nostr event ID of the request to remove
|
|
52
|
+
* @returns true if the request was found and removed, false otherwise
|
|
53
|
+
*/
|
|
54
|
+
removePendingRequest(eventId: string): boolean;
|
|
55
|
+
/** Gets the current number of pending requests */
|
|
56
|
+
get pendingRequestCount(): number;
|
|
57
|
+
/** Clears all pending requests from the store */
|
|
58
|
+
clear(): void;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=correlation-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation-store.d.ts","sourceRoot":"","sources":["../../../../src/transport/nostr-client/correlation-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAG1E;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC1C,uDAAuD;IACvD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,kEAAkE;IAClE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;CACvE;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2B;gBAE/C,OAAO,GAAE,6BAAkC;IAQvD;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI;IAI/D;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO;IAUpE;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI9C,kDAAkD;IAClD,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,iDAAiD;IACjD,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { LruCache } from '../../core/utils/lru-cache.js';
|
|
2
|
+
/**
|
|
3
|
+
* Manages correlation tracking for client-side request/response pairs.
|
|
4
|
+
* Uses an LRU cache to prevent memory leaks from abandoned requests.
|
|
5
|
+
*/
|
|
6
|
+
export class ClientCorrelationStore {
|
|
7
|
+
constructor(options = {}) {
|
|
8
|
+
const { maxPendingRequests = 1000, onRequestEvicted } = options;
|
|
9
|
+
this.pendingRequests = new LruCache(maxPendingRequests, onRequestEvicted);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Registers a pending request for correlation tracking.
|
|
13
|
+
* @param eventId - The Nostr event ID used as the correlation key
|
|
14
|
+
* @param request - The pending request information
|
|
15
|
+
*/
|
|
16
|
+
registerRequest(eventId, request) {
|
|
17
|
+
this.pendingRequests.set(eventId, request);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves a response by finding and removing the corresponding request.
|
|
21
|
+
* Restores the original request ID in the response before resolving.
|
|
22
|
+
* @param eventId - The Nostr event ID of the response
|
|
23
|
+
* @param response - The JSON-RPC response to resolve
|
|
24
|
+
* @returns true if the request was found and resolved, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
resolveResponse(eventId, response) {
|
|
27
|
+
const request = this.pendingRequests.get(eventId);
|
|
28
|
+
if (!request)
|
|
29
|
+
return false;
|
|
30
|
+
if (request.originalRequestId !== null) {
|
|
31
|
+
response.id = request.originalRequestId;
|
|
32
|
+
}
|
|
33
|
+
this.pendingRequests.delete(eventId);
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Checks if a pending request exists for the given event ID.
|
|
38
|
+
* @param eventId - The Nostr event ID to check
|
|
39
|
+
* @returns true if a request exists, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
hasPendingRequest(eventId) {
|
|
42
|
+
return this.pendingRequests.has(eventId);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Removes a pending request without resolving it.
|
|
46
|
+
* @param eventId - The Nostr event ID of the request to remove
|
|
47
|
+
* @returns true if the request was found and removed, false otherwise
|
|
48
|
+
*/
|
|
49
|
+
removePendingRequest(eventId) {
|
|
50
|
+
return this.pendingRequests.delete(eventId);
|
|
51
|
+
}
|
|
52
|
+
/** Gets the current number of pending requests */
|
|
53
|
+
get pendingRequestCount() {
|
|
54
|
+
return this.pendingRequests.size;
|
|
55
|
+
}
|
|
56
|
+
/** Clears all pending requests from the store */
|
|
57
|
+
clear() {
|
|
58
|
+
this.pendingRequests.clear();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=correlation-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"correlation-store.js","sourceRoot":"","sources":["../../../../src/transport/nostr-client/correlation-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAwBzD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IAGjC,YAAY,UAAyC,EAAE;QACrD,MAAM,EAAE,kBAAkB,GAAG,IAAI,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,QAAQ,CACjC,kBAAkB,EAClB,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,OAAe,EAAE,OAAuB;QACtD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,eAAe,CAAC,OAAe,EAAE,QAAyB;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,OAAO,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YACvC,QAAQ,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,iBAAiB,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACH,oBAAoB,CAAC,OAAe;QAClC,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,kDAAkD;IAClD,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACnC,CAAC;IAED,iDAAiD;IACjD,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { JSONRPCMessage, JSONRPCResultResponse } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Manages stateless mode emulation for public Nostr servers.
|
|
4
|
+
* Provides emulated initialize responses for clients that cannot
|
|
5
|
+
* maintain persistent connections to the server.
|
|
6
|
+
*/
|
|
7
|
+
export declare class StatelessModeHandler {
|
|
8
|
+
/**
|
|
9
|
+
* Creates an emulated initialize response for stateless clients.
|
|
10
|
+
* This response mimics what a real server would return during initialization,
|
|
11
|
+
* allowing stateless clients to function without maintaining a connection.
|
|
12
|
+
* @param requestId - The original request ID to include in the response
|
|
13
|
+
* @returns A JSON-RPC result response with emulated server capabilities
|
|
14
|
+
*/
|
|
15
|
+
createEmulatedResponse(requestId: string | number): JSONRPCResultResponse;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if a message should be handled in stateless mode.
|
|
18
|
+
* Stateless mode handles special messages that don't require server interaction.
|
|
19
|
+
* @param message - The JSON-RPC message to check
|
|
20
|
+
* @returns true if the message should be handled statelessly
|
|
21
|
+
*/
|
|
22
|
+
shouldHandleStatelessly(message: JSONRPCMessage): boolean;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=stateless-mode-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless-mode-handler.d.ts","sourceRoot":"","sources":["../../../../src/transport/nostr-client/stateless-mode-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EAEd,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAG5C;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B;;;;;;OAMG;IACH,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,qBAAqB;IA4BzE;;;;;OAKG;IACH,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO;CAgB1D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { INITIALIZE_METHOD, NOTIFICATIONS_INITIALIZED_METHOD, } from '@contextvm/sdk/core/constants.js';
|
|
2
|
+
import { LATEST_PROTOCOL_VERSION } from '@modelcontextprotocol/sdk/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manages stateless mode emulation for public Nostr servers.
|
|
5
|
+
* Provides emulated initialize responses for clients that cannot
|
|
6
|
+
* maintain persistent connections to the server.
|
|
7
|
+
*/
|
|
8
|
+
export class StatelessModeHandler {
|
|
9
|
+
/**
|
|
10
|
+
* Creates an emulated initialize response for stateless clients.
|
|
11
|
+
* This response mimics what a real server would return during initialization,
|
|
12
|
+
* allowing stateless clients to function without maintaining a connection.
|
|
13
|
+
* @param requestId - The original request ID to include in the response
|
|
14
|
+
* @returns A JSON-RPC result response with emulated server capabilities
|
|
15
|
+
*/
|
|
16
|
+
createEmulatedResponse(requestId) {
|
|
17
|
+
const emulatedResult = {
|
|
18
|
+
protocolVersion: LATEST_PROTOCOL_VERSION,
|
|
19
|
+
serverInfo: {
|
|
20
|
+
name: 'Emulated-Stateless-Server',
|
|
21
|
+
version: '1.0.0',
|
|
22
|
+
},
|
|
23
|
+
capabilities: {
|
|
24
|
+
tools: {
|
|
25
|
+
listChanged: true,
|
|
26
|
+
},
|
|
27
|
+
prompts: {
|
|
28
|
+
listChanged: true,
|
|
29
|
+
},
|
|
30
|
+
resources: {
|
|
31
|
+
subscribe: true,
|
|
32
|
+
listChanged: true,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
jsonrpc: '2.0',
|
|
38
|
+
id: requestId,
|
|
39
|
+
result: emulatedResult,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Checks if a message should be handled in stateless mode.
|
|
44
|
+
* Stateless mode handles special messages that don't require server interaction.
|
|
45
|
+
* @param message - The JSON-RPC message to check
|
|
46
|
+
* @returns true if the message should be handled statelessly
|
|
47
|
+
*/
|
|
48
|
+
shouldHandleStatelessly(message) {
|
|
49
|
+
if ('method' in message &&
|
|
50
|
+
message.method === INITIALIZE_METHOD &&
|
|
51
|
+
'id' in message) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
if ('method' in message &&
|
|
55
|
+
message.method === NOTIFICATIONS_INITIALIZED_METHOD) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=stateless-mode-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateless-mode-handler.js","sourceRoot":"","sources":["../../../../src/transport/nostr-client/stateless-mode-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gCAAgC,GACjC,MAAM,kCAAkC,CAAC;AAM1C,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E;;;;GAIG;AACH,MAAM,OAAO,oBAAoB;IAC/B;;;;;;OAMG;IACH,sBAAsB,CAAC,SAA0B;QAC/C,MAAM,cAAc,GAAqB;YACvC,eAAe,EAAE,uBAAuB;YACxC,UAAU,EAAE;gBACV,IAAI,EAAE,2BAA2B;gBACjC,OAAO,EAAE,OAAO;aACjB;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE;oBACL,WAAW,EAAE,IAAI;iBAClB;gBACD,OAAO,EAAE;oBACP,WAAW,EAAE,IAAI;iBAClB;gBACD,SAAS,EAAE;oBACT,SAAS,EAAE,IAAI;oBACf,WAAW,EAAE,IAAI;iBAClB;aACF;SACF,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,SAAS;YACb,MAAM,EAAE,cAAc;SACvB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,OAAuB;QAC7C,IACE,QAAQ,IAAI,OAAO;YACnB,OAAO,CAAC,MAAM,KAAK,iBAAiB;YACpC,IAAI,IAAI,OAAO,EACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,QAAQ,IAAI,OAAO;YACnB,OAAO,CAAC,MAAM,KAAK,gCAAgC,EACnD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -3,75 +3,99 @@ import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
|
|
|
3
3
|
import { BaseNostrTransport, BaseNostrTransportOptions } from './base-nostr-transport.js';
|
|
4
4
|
import { NostrEvent } from 'nostr-tools';
|
|
5
5
|
import { LogLevel } from '../core/utils/logger.js';
|
|
6
|
+
import { ClientCorrelationStore } from './nostr-client/correlation-store.js';
|
|
7
|
+
import { StatelessModeHandler } from './nostr-client/stateless-mode-handler.js';
|
|
6
8
|
/**
|
|
7
9
|
* Options for configuring the NostrClientTransport.
|
|
8
10
|
*/
|
|
9
11
|
export interface NostrTransportOptions extends BaseNostrTransportOptions {
|
|
12
|
+
/** The server's public key for targeting messages */
|
|
10
13
|
serverPubkey: string;
|
|
14
|
+
/** Whether to operate in stateless mode (emulates server responses) */
|
|
11
15
|
isStateless?: boolean;
|
|
16
|
+
/** Log level for the transport */
|
|
12
17
|
logLevel?: LogLevel;
|
|
13
18
|
}
|
|
14
19
|
/**
|
|
15
|
-
* A transport layer for CTXVM that uses Nostr events for communication.
|
|
16
|
-
*
|
|
20
|
+
* A client transport layer for CTXVM that uses Nostr events for communication.
|
|
21
|
+
* Implements the Transport interface from the @modelcontextprotocol/sdk.
|
|
22
|
+
* Handles request/response correlation and optional stateless mode emulation.
|
|
17
23
|
*/
|
|
18
24
|
export declare class NostrClientTransport extends BaseNostrTransport implements Transport {
|
|
25
|
+
/** Public event handlers required by the Transport interface */
|
|
19
26
|
onmessage?: (message: JSONRPCMessage) => void;
|
|
20
27
|
onclose?: () => void;
|
|
21
28
|
onerror?: (error: Error) => void;
|
|
29
|
+
/** The server's public key for message targeting */
|
|
22
30
|
private readonly serverPubkey;
|
|
23
|
-
|
|
24
|
-
private readonly
|
|
25
|
-
|
|
31
|
+
/** Manages request/response correlation for pending requests */
|
|
32
|
+
private readonly correlationStore;
|
|
33
|
+
/** Handles stateless mode emulation for public servers */
|
|
34
|
+
private readonly statelessHandler;
|
|
35
|
+
/** Whether stateless mode is enabled */
|
|
26
36
|
private readonly isStateless;
|
|
37
|
+
/** The server's initialize event, if received */
|
|
38
|
+
private serverInitializeEvent;
|
|
39
|
+
/**
|
|
40
|
+
* Creates a new NostrClientTransport instance.
|
|
41
|
+
* @param options - Configuration options for the transport
|
|
42
|
+
* @throws Error if serverPubkey is not a valid hex public key
|
|
43
|
+
*/
|
|
27
44
|
constructor(options: NostrTransportOptions);
|
|
28
45
|
/**
|
|
29
46
|
* Starts the transport, connecting to the relay and setting up event listeners.
|
|
30
47
|
*/
|
|
31
48
|
start(): Promise<void>;
|
|
32
49
|
/**
|
|
33
|
-
* Closes the transport, disconnecting from the relay.
|
|
50
|
+
* Closes the transport, disconnecting from the relay and clearing state.
|
|
34
51
|
*/
|
|
35
52
|
close(): Promise<void>;
|
|
36
53
|
/**
|
|
37
54
|
* Sends a JSON-RPC message over the Nostr transport.
|
|
38
|
-
*
|
|
55
|
+
* Handles stateless mode emulation for initialize requests.
|
|
56
|
+
* @param message - The JSON-RPC request or notification to send
|
|
39
57
|
*/
|
|
40
58
|
send(message: JSONRPCMessage): Promise<void>;
|
|
41
59
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
* @param requestId The ID of the original initialize request.
|
|
60
|
+
* Sends a request and registers it for correlation tracking.
|
|
61
|
+
* @param message - The JSON-RPC message to send
|
|
62
|
+
* @returns The ID of the published Nostr event
|
|
46
63
|
*/
|
|
47
|
-
private
|
|
64
|
+
private sendRequest;
|
|
48
65
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* where responses may arrive before the publish operation completes.
|
|
52
|
-
*
|
|
53
|
-
* @param message The JSON-RPC message to send.
|
|
54
|
-
* @returns The ID of the published Nostr event.
|
|
66
|
+
* Emulates the server's initialize response for stateless clients.
|
|
67
|
+
* @param requestId - The ID of the original initialize request
|
|
55
68
|
*/
|
|
56
|
-
private
|
|
69
|
+
private emulateInitializeResponse;
|
|
57
70
|
/**
|
|
58
71
|
* Processes incoming Nostr events, routing them to the correct handler.
|
|
72
|
+
* @param event - The incoming Nostr event
|
|
59
73
|
*/
|
|
60
74
|
private processIncomingEvent;
|
|
61
75
|
/**
|
|
62
|
-
*
|
|
76
|
+
* Gets the server's initialize event if received.
|
|
77
|
+
* @returns The server initialize event or undefined
|
|
63
78
|
*/
|
|
64
79
|
getServerInitializeEvent(): NostrEvent | undefined;
|
|
65
80
|
/**
|
|
66
81
|
* Handles response messages by correlating them with pending requests.
|
|
67
|
-
* @param correlatedEventId The event ID
|
|
68
|
-
* @param mcpMessage The
|
|
82
|
+
* @param correlatedEventId - The Nostr event ID used for correlation
|
|
83
|
+
* @param mcpMessage - The JSON-RPC response message
|
|
69
84
|
*/
|
|
70
85
|
private handleResponse;
|
|
71
86
|
/**
|
|
72
|
-
* Handles notification messages.
|
|
73
|
-
* @param mcpMessage The
|
|
87
|
+
* Handles notification messages by validating and forwarding them.
|
|
88
|
+
* @param mcpMessage - The JSON-RPC notification message
|
|
74
89
|
*/
|
|
75
90
|
private handleNotification;
|
|
91
|
+
/**
|
|
92
|
+
* Test-only accessor for internal state.
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
getInternalStateForTesting(): {
|
|
96
|
+
correlationStore: ClientCorrelationStore;
|
|
97
|
+
statelessHandler: StatelessModeHandler;
|
|
98
|
+
serverInitializeEvent: import("nostr-tools").Event | undefined;
|
|
99
|
+
};
|
|
76
100
|
}
|
|
77
101
|
//# sourceMappingURL=nostr-client-transport.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nostr-client-transport.d.ts","sourceRoot":"","sources":["../../../src/transport/nostr-client-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"nostr-client-transport.d.ts","sourceRoot":"","sources":["../../../src/transport/nostr-client-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EAIpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAQ/E,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGhF;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,oBACX,SAAQ,kBACR,YAAW,SAAS;IAEpB,gEAAgE;IACzD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAExC,oDAAoD;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyB;IAC1D,0DAA0D;IAC1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuB;IACxD,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,iDAAiD;IACjD,OAAO,CAAC,qBAAqB,CAAyB;IAEtD;;;;OAIG;gBACS,OAAO,EAAE,qBAAqB;IAmB1C;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BnC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAWnC;;;;OAIG;IACU,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BzD;;;;OAIG;YACW,WAAW;IAmBzB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAmBjC;;;OAGG;YACW,oBAAoB;IAqGlC;;;OAGG;IACI,wBAAwB,IAAI,UAAU,GAAG,SAAS;IAIzD;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA2BtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;;OAGG;IACH,0BAA0B;;;;;CAO3B"}
|