@contextvm/sdk 0.1.42 → 0.1.43
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,12 +1,16 @@
|
|
|
1
1
|
import type { NostrEvent, Filter } from 'nostr-tools';
|
|
2
2
|
import { RelayHandler } from '../core/interfaces.js';
|
|
3
3
|
/**
|
|
4
|
-
* A RelayHandler implementation that uses the applesauce-relay library
|
|
4
|
+
* A RelayHandler implementation that uses the applesauce-relay library to manage
|
|
5
|
+
* relay connections, subscriptions, and publishing.
|
|
5
6
|
*/
|
|
6
7
|
export declare class ApplesauceRelayPool implements RelayHandler {
|
|
7
8
|
private readonly relayUrls;
|
|
8
9
|
private readonly relayGroup;
|
|
9
10
|
private subscriptions;
|
|
11
|
+
private static readonly PUBLISH_ATTEMPT_TIMEOUT_MS;
|
|
12
|
+
private static readonly PUBLISH_RETRY_INTERVAL_MS;
|
|
13
|
+
private static readonly PUBLISH_ERROR_LOG_INTERVAL_MS;
|
|
10
14
|
/**
|
|
11
15
|
* Creates a new ApplesauceRelayPool instance.
|
|
12
16
|
* @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;AAgBrD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,aAAa,CAA0B;IAG/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,0BAA0B,CAAS;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAO;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAA6B,CAAU;IAE/D;;;OAGG;gBACS,SAAS,EAAE,MAAM,EAAE;IA+B/B;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;;OAGG;IACG,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA4D/C;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IA+C1B;;;;;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;IAiBhB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,WAAW,IAAI,IAAI;IAanB;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;CAGzB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Relay, RelayGroup } from 'applesauce-relay';
|
|
2
2
|
import { createLogger } from '../core/utils/logger.js';
|
|
3
|
+
import { sleep } from '../core/utils/utils.js';
|
|
3
4
|
const logger = createLogger('applesauce-relay');
|
|
4
5
|
/**
|
|
5
|
-
* A RelayHandler implementation that uses the applesauce-relay library
|
|
6
|
+
* A RelayHandler implementation that uses the applesauce-relay library to manage
|
|
7
|
+
* relay connections, subscriptions, and publishing.
|
|
6
8
|
*/
|
|
7
9
|
export class ApplesauceRelayPool {
|
|
8
10
|
/**
|
|
@@ -12,7 +14,9 @@ export class ApplesauceRelayPool {
|
|
|
12
14
|
constructor(relayUrls) {
|
|
13
15
|
this.subscriptions = [];
|
|
14
16
|
this.relayUrls = relayUrls;
|
|
15
|
-
const relays = relayUrls.map((url) => new Relay(url, {
|
|
17
|
+
const relays = relayUrls.map((url) => new Relay(url, {
|
|
18
|
+
publishTimeout: ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS,
|
|
19
|
+
}));
|
|
16
20
|
// Set up observability for connection state monitoring
|
|
17
21
|
relays.forEach((relay) => {
|
|
18
22
|
relay.connected$.subscribe((isConnected) => {
|
|
@@ -55,32 +59,55 @@ export class ApplesauceRelayPool {
|
|
|
55
59
|
*/
|
|
56
60
|
async publish(event) {
|
|
57
61
|
logger.debug('Publishing event', { eventId: event.id, kind: event.kind });
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
eventId: event.id,
|
|
72
|
-
failedCount: failedResponses.length,
|
|
73
|
-
successCount,
|
|
62
|
+
// NOTE: Publishing is intentionally retried indefinitely.
|
|
63
|
+
// MCP JSON-RPC round-trips cannot complete without delivering responses.
|
|
64
|
+
let lastError;
|
|
65
|
+
let lastLogAt = 0;
|
|
66
|
+
let attempt = 0;
|
|
67
|
+
// eslint-disable-next-line no-constant-condition
|
|
68
|
+
while (true) {
|
|
69
|
+
attempt += 1;
|
|
70
|
+
try {
|
|
71
|
+
const responses = await this.relayGroup.publish(event, {
|
|
72
|
+
timeout: ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS,
|
|
73
|
+
// Keep retries at 0/1 per attempt; we manage retrying via the outer loop.
|
|
74
|
+
retries: 0,
|
|
74
75
|
});
|
|
76
|
+
const failedResponses = responses.filter((response) => !response.ok);
|
|
77
|
+
const successCount = responses.length - failedResponses.length;
|
|
78
|
+
// Only throw an error if ALL relays failed to publish
|
|
79
|
+
if (successCount === 0) {
|
|
80
|
+
throw new Error('Failed to publish event to any relay');
|
|
81
|
+
}
|
|
82
|
+
if (failedResponses.length > 0) {
|
|
83
|
+
logger.warn('Failed to publish event to some relays', {
|
|
84
|
+
eventId: event.id,
|
|
85
|
+
failedCount: failedResponses.length,
|
|
86
|
+
successCount,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
logger.debug('Event published successfully', { eventId: event.id });
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
75
93
|
}
|
|
76
|
-
|
|
77
|
-
|
|
94
|
+
catch (error) {
|
|
95
|
+
lastError = error;
|
|
96
|
+
// Avoid log spam during extended outages.
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
if (now - lastLogAt >=
|
|
99
|
+
ApplesauceRelayPool.PUBLISH_ERROR_LOG_INTERVAL_MS) {
|
|
100
|
+
lastLogAt = now;
|
|
101
|
+
logger.error('Publish failed; will retry', {
|
|
102
|
+
eventId: event.id,
|
|
103
|
+
kind: event.kind,
|
|
104
|
+
attempt,
|
|
105
|
+
error,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
await sleep(ApplesauceRelayPool.PUBLISH_RETRY_INTERVAL_MS);
|
|
78
109
|
}
|
|
79
110
|
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
logger.error('Failed to publish event', { eventId: event.id, error });
|
|
82
|
-
throw error;
|
|
83
|
-
}
|
|
84
111
|
}
|
|
85
112
|
/**
|
|
86
113
|
* Creates a subscription wrapper around the RelayGroup's subscription method.
|
|
@@ -181,4 +208,8 @@ export class ApplesauceRelayPool {
|
|
|
181
208
|
return [...this.relayUrls];
|
|
182
209
|
}
|
|
183
210
|
}
|
|
211
|
+
// Outbound publish policy
|
|
212
|
+
ApplesauceRelayPool.PUBLISH_ATTEMPT_TIMEOUT_MS = 1000;
|
|
213
|
+
ApplesauceRelayPool.PUBLISH_RETRY_INTERVAL_MS = 500;
|
|
214
|
+
ApplesauceRelayPool.PUBLISH_ERROR_LOG_INTERVAL_MS = 10000;
|
|
184
215
|
//# 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;
|
|
1
|
+
{"version":3,"file":"applesauce-relay-pool.js","sourceRoot":"","sources":["../../../src/relay/applesauce-relay-pool.ts"],"names":[],"mappings":"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"}
|