@contextvm/sdk 0.1.43 → 0.1.45
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.
|
@@ -11,6 +11,9 @@ export declare class ApplesauceRelayPool implements RelayHandler {
|
|
|
11
11
|
private static readonly PUBLISH_ATTEMPT_TIMEOUT_MS;
|
|
12
12
|
private static readonly PUBLISH_RETRY_INTERVAL_MS;
|
|
13
13
|
private static readonly PUBLISH_ERROR_LOG_INTERVAL_MS;
|
|
14
|
+
private static readonly RECONNECT_BASE_DELAY_MS;
|
|
15
|
+
private static readonly RECONNECT_MAX_DELAY_MS;
|
|
16
|
+
private createRelay;
|
|
14
17
|
/**
|
|
15
18
|
* Creates a new ApplesauceRelayPool instance.
|
|
16
19
|
* @param relayUrls - An array of relay URLs to connect to.
|
|
@@ -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;AAWrD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,aAAa,CAA4B;IAKjD,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;IAW/B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD/C;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IA2C1B;;;;;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;IAKhB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAWnB;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;CAGzB"}
|
|
@@ -1,12 +1,38 @@
|
|
|
1
1
|
import { Relay, RelayGroup } from 'applesauce-relay';
|
|
2
2
|
import { createLogger } from '../core/utils/logger.js';
|
|
3
3
|
import { sleep } from '../core/utils/utils.js';
|
|
4
|
+
import { timer } from 'rxjs';
|
|
4
5
|
const logger = createLogger('applesauce-relay');
|
|
5
6
|
/**
|
|
6
7
|
* A RelayHandler implementation that uses the applesauce-relay library to manage
|
|
7
8
|
* relay connections, subscriptions, and publishing.
|
|
8
9
|
*/
|
|
9
10
|
export class ApplesauceRelayPool {
|
|
11
|
+
createRelay(url) {
|
|
12
|
+
const relay = new Relay(url);
|
|
13
|
+
// Ensure reconnect attempts continue at a bounded cadence even after many
|
|
14
|
+
// failures, so a relay coming back online is picked up quickly.
|
|
15
|
+
relay.reconnectTimer = (_error, tries = 0) => {
|
|
16
|
+
const delay = Math.min(Math.pow(1.5, tries) * ApplesauceRelayPool.RECONNECT_BASE_DELAY_MS, ApplesauceRelayPool.RECONNECT_MAX_DELAY_MS);
|
|
17
|
+
return timer(delay);
|
|
18
|
+
};
|
|
19
|
+
// Observability for connection state monitoring.
|
|
20
|
+
relay.connected$.subscribe((connected) => {
|
|
21
|
+
logger.debug('Connection status changed', {
|
|
22
|
+
relayUrl: relay.url,
|
|
23
|
+
connected,
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
relay.error$.subscribe((error) => {
|
|
27
|
+
if (!error)
|
|
28
|
+
return;
|
|
29
|
+
logger.error('Relay connection error', {
|
|
30
|
+
relayUrl: relay.url,
|
|
31
|
+
error: error instanceof Error ? error.message : String(error),
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
return relay;
|
|
35
|
+
}
|
|
10
36
|
/**
|
|
11
37
|
* Creates a new ApplesauceRelayPool instance.
|
|
12
38
|
* @param relayUrls - An array of relay URLs to connect to.
|
|
@@ -14,27 +40,10 @@ export class ApplesauceRelayPool {
|
|
|
14
40
|
constructor(relayUrls) {
|
|
15
41
|
this.subscriptions = [];
|
|
16
42
|
this.relayUrls = relayUrls;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
relays.forEach((relay) => {
|
|
22
|
-
relay.connected$.subscribe((isConnected) => {
|
|
23
|
-
logger.debug(`Connection status changed`, {
|
|
24
|
-
relayUrl: relay.url,
|
|
25
|
-
connected: isConnected,
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
relay.error$.subscribe((error) => {
|
|
29
|
-
if (error) {
|
|
30
|
-
logger.error(`Relay connection error`, {
|
|
31
|
-
relayUrl: relay.url,
|
|
32
|
-
error: error instanceof Error ? error.message : String(error),
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
this.relayGroup = new RelayGroup(relays);
|
|
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
|
+
this.relayGroup = new RelayGroup(relayUrls.map((url) => this.createRelay(url)));
|
|
38
47
|
}
|
|
39
48
|
/**
|
|
40
49
|
* Connects to the configured relays.
|
|
@@ -61,7 +70,6 @@ export class ApplesauceRelayPool {
|
|
|
61
70
|
logger.debug('Publishing event', { eventId: event.id, kind: event.kind });
|
|
62
71
|
// NOTE: Publishing is intentionally retried indefinitely.
|
|
63
72
|
// MCP JSON-RPC round-trips cannot complete without delivering responses.
|
|
64
|
-
let lastError;
|
|
65
73
|
let lastLogAt = 0;
|
|
66
74
|
let attempt = 0;
|
|
67
75
|
// eslint-disable-next-line no-constant-condition
|
|
@@ -92,7 +100,6 @@ export class ApplesauceRelayPool {
|
|
|
92
100
|
return;
|
|
93
101
|
}
|
|
94
102
|
catch (error) {
|
|
95
|
-
lastError = error;
|
|
96
103
|
// Avoid log spam during extended outages.
|
|
97
104
|
const now = Date.now();
|
|
98
105
|
if (now - lastLogAt >=
|
|
@@ -117,10 +124,7 @@ export class ApplesauceRelayPool {
|
|
|
117
124
|
* @returns Object with unsubscribe method.
|
|
118
125
|
*/
|
|
119
126
|
createSubscription(filters, onEvent, onEose) {
|
|
120
|
-
logger.debug('Creating subscription with filters', {
|
|
121
|
-
filters,
|
|
122
|
-
relayUrls: this.relayUrls,
|
|
123
|
-
});
|
|
127
|
+
logger.debug('Creating subscription with filters', { filters });
|
|
124
128
|
const subscription = this.relayGroup.subscription(filters, {
|
|
125
129
|
reconnect: Infinity,
|
|
126
130
|
resubscribe: Infinity,
|
|
@@ -151,7 +155,6 @@ export class ApplesauceRelayPool {
|
|
|
151
155
|
});
|
|
152
156
|
return {
|
|
153
157
|
unsubscribe: () => {
|
|
154
|
-
logger.debug('Unsubscribing from subscription');
|
|
155
158
|
sub.unsubscribe();
|
|
156
159
|
},
|
|
157
160
|
};
|
|
@@ -163,20 +166,8 @@ export class ApplesauceRelayPool {
|
|
|
163
166
|
* @param onEose - Optional callback function for end-of-stream events.
|
|
164
167
|
*/
|
|
165
168
|
async subscribe(filters, onEvent, onEose) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const closer = this.createSubscription(filters, onEvent, onEose);
|
|
169
|
-
this.subscriptions.push({
|
|
170
|
-
filters,
|
|
171
|
-
onEvent,
|
|
172
|
-
onEose,
|
|
173
|
-
closer,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (error) {
|
|
177
|
-
logger.error('Failed to create subscription', { filters, error });
|
|
178
|
-
throw error;
|
|
179
|
-
}
|
|
169
|
+
const closer = this.createSubscription(filters, onEvent, onEose);
|
|
170
|
+
this.subscriptions.push(closer);
|
|
180
171
|
}
|
|
181
172
|
/**
|
|
182
173
|
* Disconnects from all relays and cleans up resources.
|
|
@@ -191,9 +182,8 @@ export class ApplesauceRelayPool {
|
|
|
191
182
|
unsubscribe() {
|
|
192
183
|
logger.debug('Unsubscribing from all subscriptions');
|
|
193
184
|
try {
|
|
194
|
-
for (const
|
|
195
|
-
|
|
196
|
-
}
|
|
185
|
+
for (const sub of this.subscriptions)
|
|
186
|
+
sub.unsubscribe();
|
|
197
187
|
this.subscriptions = [];
|
|
198
188
|
}
|
|
199
189
|
catch (error) {
|
|
@@ -209,7 +199,12 @@ export class ApplesauceRelayPool {
|
|
|
209
199
|
}
|
|
210
200
|
}
|
|
211
201
|
// Outbound publish policy
|
|
212
|
-
|
|
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
|
+
ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS = 10000;
|
|
213
205
|
ApplesauceRelayPool.PUBLISH_RETRY_INTERVAL_MS = 500;
|
|
214
206
|
ApplesauceRelayPool.PUBLISH_ERROR_LOG_INTERVAL_MS = 10000;
|
|
207
|
+
// Reconnect backoff policy
|
|
208
|
+
ApplesauceRelayPool.RECONNECT_BASE_DELAY_MS = 3000;
|
|
209
|
+
ApplesauceRelayPool.RECONNECT_MAX_DELAY_MS = 30000;
|
|
215
210
|
//# sourceMappingURL=applesauce-relay-pool.js.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"applesauce-relay-pool.js","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"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"}
|