applesauce-relay 0.0.0-next-20250430173639 → 0.0.0-next-20250430195017
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.
- package/dist/__tests__/relay.test.js +20 -4
- package/dist/relay.js +12 -10
- package/package.json +1 -1
|
@@ -47,17 +47,33 @@ describe("req", () => {
|
|
|
47
47
|
await firstValueFrom(relay.connected$.pipe(filter(Boolean)));
|
|
48
48
|
expect(relay.connected).toBe(true);
|
|
49
49
|
});
|
|
50
|
-
it("should send
|
|
50
|
+
it("should send expected messages to relay", async () => {
|
|
51
|
+
subscribeSpyTo(relay.req([{ kinds: [1] }], "sub1"));
|
|
52
|
+
// Wait for all message to be sent
|
|
53
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
54
|
+
expect(server.messages).toEqual([["REQ", "sub1", { kinds: [1] }]]);
|
|
55
|
+
});
|
|
56
|
+
it("should not close the REQ when EOSE is received", async () => {
|
|
51
57
|
// Create subscription that completes after first EOSE
|
|
52
|
-
const sub = relay.req([{ kinds: [1] }], "sub1")
|
|
58
|
+
const sub = subscribeSpyTo(relay.req([{ kinds: [1] }], "sub1"));
|
|
53
59
|
// Verify REQ was sent
|
|
54
|
-
expect(
|
|
60
|
+
await expect(server).toReceiveMessage(["REQ", "sub1", { kinds: [1] }]);
|
|
55
61
|
// Send EOSE to complete subscription
|
|
62
|
+
server.send(["EVENT", "sub1", mockEvent]);
|
|
56
63
|
server.send(["EOSE", "sub1"]);
|
|
64
|
+
// Verify the subscription did not complete
|
|
65
|
+
expect(sub.receivedComplete()).toBe(false);
|
|
66
|
+
expect(sub.getValues()).toEqual([expect.objectContaining(mockEvent), "EOSE"]);
|
|
67
|
+
});
|
|
68
|
+
it("should send CLOSE when unsubscribed", async () => {
|
|
69
|
+
// Create subscription that completes after first EOSE
|
|
70
|
+
const sub = subscribeSpyTo(relay.req([{ kinds: [1] }], "sub1"));
|
|
71
|
+
// Verify REQ was sent
|
|
72
|
+
await expect(server).toReceiveMessage(["REQ", "sub1", { kinds: [1] }]);
|
|
57
73
|
// Complete the subscription
|
|
58
74
|
sub.unsubscribe();
|
|
59
75
|
// Verify CLOSE was sent
|
|
60
|
-
expect(
|
|
76
|
+
await expect(server).toReceiveMessage(["CLOSE", "sub1"]);
|
|
61
77
|
});
|
|
62
78
|
it("should emit nostr event and EOSE", async () => {
|
|
63
79
|
const spy = subscribeSpyTo(relay.req([{ kinds: [1] }], "sub1"));
|
package/dist/relay.js
CHANGED
|
@@ -191,9 +191,7 @@ export class Relay {
|
|
|
191
191
|
.subscribe(() => this.ready$.next(true));
|
|
192
192
|
}
|
|
193
193
|
/** Wait for ready and authenticated */
|
|
194
|
-
waitForAuth(
|
|
195
|
-
// NOTE: require BehaviorSubject so it always has a value
|
|
196
|
-
requireAuth, observable) {
|
|
194
|
+
waitForAuth(requireAuth, observable) {
|
|
197
195
|
return combineLatest([requireAuth, this.authenticated$]).pipe(
|
|
198
196
|
// wait for auth not required or authenticated
|
|
199
197
|
filter(([required, authenticated]) => !required || authenticated),
|
|
@@ -204,13 +202,17 @@ export class Relay {
|
|
|
204
202
|
}
|
|
205
203
|
/** Wait for the relay to be ready to accept connections */
|
|
206
204
|
waitForReady(observable) {
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
205
|
+
// If the relay is ready, don't wait
|
|
206
|
+
if (this.ready$.value)
|
|
207
|
+
return observable;
|
|
208
|
+
else
|
|
209
|
+
return this.ready$.pipe(
|
|
210
|
+
// wait for ready to be true
|
|
211
|
+
filter((ready) => ready),
|
|
212
|
+
// complete after the first value so this does not repeat
|
|
213
|
+
take(1),
|
|
214
|
+
// switch to the observable
|
|
215
|
+
switchMap(() => observable));
|
|
214
216
|
}
|
|
215
217
|
multiplex(open, close, filter) {
|
|
216
218
|
return this.socket.multiplex(open, close, filter);
|