@contextvm/sdk 0.1.47 → 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.
Files changed (61) hide show
  1. package/dist/esm/core/constants.d.ts +3 -0
  2. package/dist/esm/core/constants.d.ts.map +1 -1
  3. package/dist/esm/core/constants.js +3 -0
  4. package/dist/esm/core/constants.js.map +1 -1
  5. package/dist/esm/core/utils/logger.d.ts +1 -1
  6. package/dist/esm/core/utils/logger.d.ts.map +1 -1
  7. package/dist/esm/core/utils/lru-cache.d.ts.map +1 -1
  8. package/dist/esm/core/utils/lru-cache.js +9 -1
  9. package/dist/esm/core/utils/lru-cache.js.map +1 -1
  10. package/dist/esm/core/utils/task-queue.d.ts +5 -0
  11. package/dist/esm/core/utils/task-queue.d.ts.map +1 -1
  12. package/dist/esm/core/utils/task-queue.js +11 -0
  13. package/dist/esm/core/utils/task-queue.js.map +1 -1
  14. package/dist/esm/core/utils/utils.d.ts +8 -0
  15. package/dist/esm/core/utils/utils.d.ts.map +1 -1
  16. package/dist/esm/core/utils/utils.js +23 -0
  17. package/dist/esm/core/utils/utils.js.map +1 -1
  18. package/dist/esm/relay/applesauce-relay-pool.d.ts +37 -4
  19. package/dist/esm/relay/applesauce-relay-pool.d.ts.map +1 -1
  20. package/dist/esm/relay/applesauce-relay-pool.js +165 -11
  21. package/dist/esm/relay/applesauce-relay-pool.js.map +1 -1
  22. package/dist/esm/signer/private-key-signer.d.ts.map +1 -1
  23. package/dist/esm/signer/private-key-signer.js +1 -1
  24. package/dist/esm/signer/private-key-signer.js.map +1 -1
  25. package/dist/esm/transport/base-nostr-transport.d.ts +1 -1
  26. package/dist/esm/transport/base-nostr-transport.d.ts.map +1 -1
  27. package/dist/esm/transport/base-nostr-transport.js +8 -6
  28. package/dist/esm/transport/base-nostr-transport.js.map +1 -1
  29. package/dist/esm/transport/nostr-client/correlation-store.d.ts +60 -0
  30. package/dist/esm/transport/nostr-client/correlation-store.d.ts.map +1 -0
  31. package/dist/esm/transport/nostr-client/correlation-store.js +61 -0
  32. package/dist/esm/transport/nostr-client/correlation-store.js.map +1 -0
  33. package/dist/esm/transport/nostr-client/stateless-mode-handler.d.ts +24 -0
  34. package/dist/esm/transport/nostr-client/stateless-mode-handler.d.ts.map +1 -0
  35. package/dist/esm/transport/nostr-client/stateless-mode-handler.js +61 -0
  36. package/dist/esm/transport/nostr-client/stateless-mode-handler.js.map +1 -0
  37. package/dist/esm/transport/nostr-client-transport.d.ts +48 -24
  38. package/dist/esm/transport/nostr-client-transport.d.ts.map +1 -1
  39. package/dist/esm/transport/nostr-client-transport.js +92 -131
  40. package/dist/esm/transport/nostr-client-transport.js.map +1 -1
  41. package/dist/esm/transport/nostr-server/announcement-manager.d.ts +116 -0
  42. package/dist/esm/transport/nostr-server/announcement-manager.d.ts.map +1 -0
  43. package/dist/esm/transport/nostr-server/announcement-manager.js +288 -0
  44. package/dist/esm/transport/nostr-server/announcement-manager.js.map +1 -0
  45. package/dist/esm/transport/nostr-server/authorization-policy.d.ts +74 -0
  46. package/dist/esm/transport/nostr-server/authorization-policy.d.ts.map +1 -0
  47. package/dist/esm/transport/nostr-server/authorization-policy.js +91 -0
  48. package/dist/esm/transport/nostr-server/authorization-policy.js.map +1 -0
  49. package/dist/esm/transport/nostr-server/correlation-store.d.ts +102 -0
  50. package/dist/esm/transport/nostr-server/correlation-store.d.ts.map +1 -0
  51. package/dist/esm/transport/nostr-server/correlation-store.js +167 -0
  52. package/dist/esm/transport/nostr-server/correlation-store.js.map +1 -0
  53. package/dist/esm/transport/nostr-server/session-store.d.ts +99 -0
  54. package/dist/esm/transport/nostr-server/session-store.d.ts.map +1 -0
  55. package/dist/esm/transport/nostr-server/session-store.js +123 -0
  56. package/dist/esm/transport/nostr-server/session-store.js.map +1 -0
  57. package/dist/esm/transport/nostr-server-transport.d.ts +18 -63
  58. package/dist/esm/transport/nostr-server-transport.d.ts.map +1 -1
  59. package/dist/esm/transport/nostr-server-transport.js +135 -378
  60. package/dist/esm/transport/nostr-server-transport.js.map +1 -1
  61. package/package.json +15 -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":"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"}
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
- * It implements the Transport interface from the @modelcontextprotocol/sdk.
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
- private readonly pendingRequestIds;
24
- private readonly maxPendingRequests;
25
- private serverInitializeEvent;
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
- * @param message The JSON-RPC request or response to send.
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
- * Emulates the server's initialize response for stateless clients.
43
- * This method constructs a generic server response and injects it back into the client,
44
- * allowing the client to self-initialize without a network roundtrip.
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 emulateInitializeResponse;
64
+ private sendRequest;
48
65
  /**
49
- * Internal method to send a JSON-RPC message and get the resulting event ID.
50
- * Registers the event ID before publishing to avoid race conditions in multi-relay setups
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 _sendInternal;
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
- * Get the server initialize event
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 from the 'e' tag.
68
- * @param mcpMessage The incoming MCP message.
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 incoming MCP message.
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,EAKpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAM/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;AAGnD;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,oBACX,SAAQ,kBACR,YAAW,SAAS;IAGb,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;IAGxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;gBAE1B,OAAO,EAAE,qBAAqB;IAkB1C;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCnC;;OAEG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC;;;OAGG;IACU,IAAI,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCzD;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAsDjC;;;;;;;OAOG;YACW,aAAa;IA0B3B;;OAEG;YACW,oBAAoB;IAwGlC;;OAEG;IACI,wBAAwB,IAAI,UAAU,GAAG,SAAS;IAIzD;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAiBtB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAuB3B"}
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"}