@contextvm/sdk 0.1.45 → 0.1.47
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.
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { NostrEvent, Filter } from 'nostr-tools';
|
|
2
2
|
import { RelayHandler } from '../core/interfaces.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* relay connections, subscriptions, and publishing.
|
|
4
|
+
* RelayHandler implementation backed by applesauce-relay.
|
|
6
5
|
*/
|
|
7
6
|
export declare class ApplesauceRelayPool implements RelayHandler {
|
|
8
7
|
private readonly relayUrls;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applesauce-relay-pool.d.ts","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"applesauce-relay-pool.d.ts","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOrD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,aAAa,CAAyB;IAG9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAU;IAC5D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAO;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAU;IAG/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAU;IAExD,OAAO,CAAC,WAAW;IAmCnB;;;OAGG;gBACS,SAAS,EAAE,MAAM,EAAE;IAQ/B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAuD/C;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;;;;OAKG;IACG,SAAS,CACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,EACpC,MAAM,CAAC,EAAE,MAAM,IAAI,GAClB,OAAO,CAAC,IAAI,CAAC;IAIhB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAWnB;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;CAGzB"}
|
|
@@ -4,8 +4,7 @@ import { sleep } from '../core/utils/utils.js';
|
|
|
4
4
|
import { timer } from 'rxjs';
|
|
5
5
|
const logger = createLogger('applesauce-relay');
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* relay connections, subscriptions, and publishing.
|
|
7
|
+
* RelayHandler implementation backed by applesauce-relay.
|
|
9
8
|
*/
|
|
10
9
|
export class ApplesauceRelayPool {
|
|
11
10
|
createRelay(url) {
|
|
@@ -16,7 +15,7 @@ export class ApplesauceRelayPool {
|
|
|
16
15
|
const delay = Math.min(Math.pow(1.5, tries) * ApplesauceRelayPool.RECONNECT_BASE_DELAY_MS, ApplesauceRelayPool.RECONNECT_MAX_DELAY_MS);
|
|
17
16
|
return timer(delay);
|
|
18
17
|
};
|
|
19
|
-
// Observability for connection state monitoring
|
|
18
|
+
// Observability for connection state monitoring
|
|
20
19
|
relay.connected$.subscribe((connected) => {
|
|
21
20
|
logger.debug('Connection status changed', {
|
|
22
21
|
relayUrl: relay.url,
|
|
@@ -40,9 +39,6 @@ export class ApplesauceRelayPool {
|
|
|
40
39
|
constructor(relayUrls) {
|
|
41
40
|
this.subscriptions = [];
|
|
42
41
|
this.relayUrls = relayUrls;
|
|
43
|
-
// NOTE: Do NOT set Relay.publishTimeout to our per-attempt timeout.
|
|
44
|
-
// Relay.publishTimeout is used as the default inside Relay.customTimeoutOperator().
|
|
45
|
-
// We control per-attempt timeouts via RelayGroup.publish({ timeout }).
|
|
46
42
|
this.relayGroup = new RelayGroup(relayUrls.map((url) => this.createRelay(url)));
|
|
47
43
|
}
|
|
48
44
|
/**
|
|
@@ -72,25 +68,27 @@ export class ApplesauceRelayPool {
|
|
|
72
68
|
// MCP JSON-RPC round-trips cannot complete without delivering responses.
|
|
73
69
|
let lastLogAt = 0;
|
|
74
70
|
let attempt = 0;
|
|
75
|
-
// eslint-disable-next-line no-constant-condition
|
|
76
71
|
while (true) {
|
|
77
72
|
attempt += 1;
|
|
78
73
|
try {
|
|
79
74
|
const responses = await this.relayGroup.publish(event, {
|
|
80
75
|
timeout: ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS,
|
|
81
|
-
// Keep retries at 0/1 per attempt; we manage retrying via the outer loop.
|
|
82
76
|
retries: 0,
|
|
83
77
|
});
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
78
|
+
let successCount = 0;
|
|
79
|
+
let failedCount = 0;
|
|
80
|
+
for (const response of responses) {
|
|
81
|
+
if (response.ok)
|
|
82
|
+
successCount += 1;
|
|
83
|
+
else
|
|
84
|
+
failedCount += 1;
|
|
89
85
|
}
|
|
90
|
-
if (
|
|
86
|
+
if (successCount === 0)
|
|
87
|
+
throw new Error('Failed to publish event');
|
|
88
|
+
if (failedCount > 0) {
|
|
91
89
|
logger.warn('Failed to publish event to some relays', {
|
|
92
90
|
eventId: event.id,
|
|
93
|
-
failedCount
|
|
91
|
+
failedCount,
|
|
94
92
|
successCount,
|
|
95
93
|
});
|
|
96
94
|
}
|
|
@@ -100,7 +98,6 @@ export class ApplesauceRelayPool {
|
|
|
100
98
|
return;
|
|
101
99
|
}
|
|
102
100
|
catch (error) {
|
|
103
|
-
// Avoid log spam during extended outages.
|
|
104
101
|
const now = Date.now();
|
|
105
102
|
if (now - lastLogAt >=
|
|
106
103
|
ApplesauceRelayPool.PUBLISH_ERROR_LOG_INTERVAL_MS) {
|
|
@@ -124,7 +121,7 @@ export class ApplesauceRelayPool {
|
|
|
124
121
|
* @returns Object with unsubscribe method.
|
|
125
122
|
*/
|
|
126
123
|
createSubscription(filters, onEvent, onEose) {
|
|
127
|
-
logger.debug('Creating subscription
|
|
124
|
+
logger.debug('Creating subscription', { filters });
|
|
128
125
|
const subscription = this.relayGroup.subscription(filters, {
|
|
129
126
|
reconnect: Infinity,
|
|
130
127
|
resubscribe: Infinity,
|
|
@@ -132,14 +129,9 @@ export class ApplesauceRelayPool {
|
|
|
132
129
|
const sub = subscription.subscribe({
|
|
133
130
|
next: (response) => {
|
|
134
131
|
if (response === 'EOSE') {
|
|
135
|
-
logger.debug('Received EOSE signal');
|
|
136
132
|
onEose === null || onEose === void 0 ? void 0 : onEose();
|
|
137
133
|
}
|
|
138
134
|
else {
|
|
139
|
-
logger.debug('Received event', {
|
|
140
|
-
eventId: response.id,
|
|
141
|
-
kind: response.kind,
|
|
142
|
-
});
|
|
143
135
|
onEvent(response);
|
|
144
136
|
}
|
|
145
137
|
},
|
|
@@ -153,11 +145,7 @@ export class ApplesauceRelayPool {
|
|
|
153
145
|
});
|
|
154
146
|
},
|
|
155
147
|
});
|
|
156
|
-
return
|
|
157
|
-
unsubscribe: () => {
|
|
158
|
-
sub.unsubscribe();
|
|
159
|
-
},
|
|
160
|
-
};
|
|
148
|
+
return () => sub.unsubscribe();
|
|
161
149
|
}
|
|
162
150
|
/**
|
|
163
151
|
* Subscribes to events from the relay group.
|
|
@@ -166,8 +154,7 @@ export class ApplesauceRelayPool {
|
|
|
166
154
|
* @param onEose - Optional callback function for end-of-stream events.
|
|
167
155
|
*/
|
|
168
156
|
async subscribe(filters, onEvent, onEose) {
|
|
169
|
-
|
|
170
|
-
this.subscriptions.push(closer);
|
|
157
|
+
this.subscriptions.push(this.createSubscription(filters, onEvent, onEose));
|
|
171
158
|
}
|
|
172
159
|
/**
|
|
173
160
|
* Disconnects from all relays and cleans up resources.
|
|
@@ -182,8 +169,8 @@ export class ApplesauceRelayPool {
|
|
|
182
169
|
unsubscribe() {
|
|
183
170
|
logger.debug('Unsubscribing from all subscriptions');
|
|
184
171
|
try {
|
|
185
|
-
for (const
|
|
186
|
-
|
|
172
|
+
for (const unsubscribe of this.subscriptions)
|
|
173
|
+
unsubscribe();
|
|
187
174
|
this.subscriptions = [];
|
|
188
175
|
}
|
|
189
176
|
catch (error) {
|
|
@@ -199,8 +186,6 @@ export class ApplesauceRelayPool {
|
|
|
199
186
|
}
|
|
200
187
|
}
|
|
201
188
|
// Outbound publish policy
|
|
202
|
-
// 1s is too aggressive for real relays (especially right after reconnect or
|
|
203
|
-
// during high load). We want a bounded but realistic per-attempt timeout.
|
|
204
189
|
ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS = 10000;
|
|
205
190
|
ApplesauceRelayPool.PUBLISH_RETRY_INTERVAL_MS = 500;
|
|
206
191
|
ApplesauceRelayPool.PUBLISH_ERROR_LOG_INTERVAL_MS = 10000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"applesauce-relay-pool.js","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAmB,MAAM,MAAM,CAAC;AAE9C,MAAM,MAAM,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"applesauce-relay-pool.js","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contextvm/sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.47",
|
|
4
4
|
"description": "CtxVM SDK for JavaScript/TypeScript",
|
|
5
5
|
"license": "LGPL-3.0-1",
|
|
6
6
|
"author": "ContextVM",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@modelcontextprotocol/sdk": "^1.25.1",
|
|
62
62
|
"applesauce-relay": "^4.4.2",
|
|
63
|
-
"nostr-tools": "
|
|
63
|
+
"nostr-tools": "~2.18",
|
|
64
64
|
"pino": "^10.1.0",
|
|
65
65
|
"pino-pretty": "^13.1.3"
|
|
66
66
|
}
|