@contextvm/sdk 0.1.44 → 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"}
|
|
@@ -8,6 +8,31 @@ const logger = createLogger('applesauce-relay');
|
|
|
8
8
|
* relay connections, subscriptions, and publishing.
|
|
9
9
|
*/
|
|
10
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
|
+
}
|
|
11
36
|
/**
|
|
12
37
|
* Creates a new ApplesauceRelayPool instance.
|
|
13
38
|
* @param relayUrls - An array of relay URLs to connect to.
|
|
@@ -15,35 +40,10 @@ export class ApplesauceRelayPool {
|
|
|
15
40
|
constructor(relayUrls) {
|
|
16
41
|
this.subscriptions = [];
|
|
17
42
|
this.relayUrls = relayUrls;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
// failures, so a relay coming back online is picked up quickly.
|
|
23
|
-
for (const relay of relays) {
|
|
24
|
-
relay.reconnectTimer = (_error, tries = 0) => {
|
|
25
|
-
const delay = Math.min(Math.pow(1.5, tries) * 3000);
|
|
26
|
-
return timer(delay);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
// Set up observability for connection state monitoring
|
|
30
|
-
relays.forEach((relay) => {
|
|
31
|
-
relay.connected$.subscribe((isConnected) => {
|
|
32
|
-
logger.debug(`Connection status changed`, {
|
|
33
|
-
relayUrl: relay.url,
|
|
34
|
-
connected: isConnected,
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
relay.error$.subscribe((error) => {
|
|
38
|
-
if (error) {
|
|
39
|
-
logger.error(`Relay connection error`, {
|
|
40
|
-
relayUrl: relay.url,
|
|
41
|
-
error: error instanceof Error ? error.message : String(error),
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
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)));
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
49
|
* Connects to the configured relays.
|
|
@@ -70,7 +70,6 @@ export class ApplesauceRelayPool {
|
|
|
70
70
|
logger.debug('Publishing event', { eventId: event.id, kind: event.kind });
|
|
71
71
|
// NOTE: Publishing is intentionally retried indefinitely.
|
|
72
72
|
// MCP JSON-RPC round-trips cannot complete without delivering responses.
|
|
73
|
-
let lastError;
|
|
74
73
|
let lastLogAt = 0;
|
|
75
74
|
let attempt = 0;
|
|
76
75
|
// eslint-disable-next-line no-constant-condition
|
|
@@ -101,7 +100,6 @@ export class ApplesauceRelayPool {
|
|
|
101
100
|
return;
|
|
102
101
|
}
|
|
103
102
|
catch (error) {
|
|
104
|
-
lastError = error;
|
|
105
103
|
// Avoid log spam during extended outages.
|
|
106
104
|
const now = Date.now();
|
|
107
105
|
if (now - lastLogAt >=
|
|
@@ -126,10 +124,7 @@ export class ApplesauceRelayPool {
|
|
|
126
124
|
* @returns Object with unsubscribe method.
|
|
127
125
|
*/
|
|
128
126
|
createSubscription(filters, onEvent, onEose) {
|
|
129
|
-
logger.debug('Creating subscription with filters', {
|
|
130
|
-
filters,
|
|
131
|
-
relayUrls: this.relayUrls,
|
|
132
|
-
});
|
|
127
|
+
logger.debug('Creating subscription with filters', { filters });
|
|
133
128
|
const subscription = this.relayGroup.subscription(filters, {
|
|
134
129
|
reconnect: Infinity,
|
|
135
130
|
resubscribe: Infinity,
|
|
@@ -160,7 +155,6 @@ export class ApplesauceRelayPool {
|
|
|
160
155
|
});
|
|
161
156
|
return {
|
|
162
157
|
unsubscribe: () => {
|
|
163
|
-
logger.debug('Unsubscribing from subscription');
|
|
164
158
|
sub.unsubscribe();
|
|
165
159
|
},
|
|
166
160
|
};
|
|
@@ -172,20 +166,8 @@ export class ApplesauceRelayPool {
|
|
|
172
166
|
* @param onEose - Optional callback function for end-of-stream events.
|
|
173
167
|
*/
|
|
174
168
|
async subscribe(filters, onEvent, onEose) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const closer = this.createSubscription(filters, onEvent, onEose);
|
|
178
|
-
this.subscriptions.push({
|
|
179
|
-
filters,
|
|
180
|
-
onEvent,
|
|
181
|
-
onEose,
|
|
182
|
-
closer,
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
catch (error) {
|
|
186
|
-
logger.error('Failed to create subscription', { filters, error });
|
|
187
|
-
throw error;
|
|
188
|
-
}
|
|
169
|
+
const closer = this.createSubscription(filters, onEvent, onEose);
|
|
170
|
+
this.subscriptions.push(closer);
|
|
189
171
|
}
|
|
190
172
|
/**
|
|
191
173
|
* Disconnects from all relays and cleans up resources.
|
|
@@ -200,9 +182,8 @@ export class ApplesauceRelayPool {
|
|
|
200
182
|
unsubscribe() {
|
|
201
183
|
logger.debug('Unsubscribing from all subscriptions');
|
|
202
184
|
try {
|
|
203
|
-
for (const
|
|
204
|
-
|
|
205
|
-
}
|
|
185
|
+
for (const sub of this.subscriptions)
|
|
186
|
+
sub.unsubscribe();
|
|
206
187
|
this.subscriptions = [];
|
|
207
188
|
}
|
|
208
189
|
catch (error) {
|
|
@@ -218,7 +199,12 @@ export class ApplesauceRelayPool {
|
|
|
218
199
|
}
|
|
219
200
|
}
|
|
220
201
|
// Outbound publish policy
|
|
221
|
-
|
|
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;
|
|
222
205
|
ApplesauceRelayPool.PUBLISH_RETRY_INTERVAL_MS = 500;
|
|
223
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;
|
|
224
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;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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"}
|