@nostrify/nostrify 0.50.4 → 0.50.5
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/.turbo/turbo-build.log +6 -6
- package/.turbo/turbo-test.log +115 -114
- package/.turbo/turbo-typecheck.log +1 -1
- package/CHANGELOG.md +6 -0
- package/NIP05.ts +1 -1
- package/NPool.ts +1 -1
- package/NRelay1.test.ts +67 -2
- package/NRelay1.ts +3 -1
- package/dist/NIP05.js +1 -1
- package/dist/NPool.js +1 -1
- package/dist/NRelay1.d.ts.map +1 -1
- package/dist/NRelay1.js +2 -1
- package/dist/test/TestRelayServer.d.ts +2 -0
- package/dist/test/TestRelayServer.d.ts.map +1 -1
- package/dist/test/TestRelayServer.js +9 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/uploaders/BlossomUploader.d.ts.map +1 -1
- package/dist/uploaders/BlossomUploader.js +37 -24
- package/dist/utils/getFilterLimit.d.ts +15 -0
- package/dist/utils/getFilterLimit.d.ts.map +1 -0
- package/dist/utils/getFilterLimit.js +40 -0
- package/package.json +1 -1
- package/test/TestRelayServer.ts +10 -0
- package/uploaders/BlossomUploader.ts +45 -29
- package/utils/getFilterLimit.test.ts +74 -0
- package/utils/getFilterLimit.ts +69 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @nostrify/nostrify@0.50.
|
|
2
|
+
> @nostrify/nostrify@0.50.5 build /home/alex/Projects/nostrify/packages/nostrify
|
|
3
3
|
> npx tsc -p tsconfig.json && node ../../esbuild.config.js --package ./
|
|
4
4
|
|
|
5
5
|
npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm.
|
|
@@ -9,24 +9,24 @@ Building with esbuild...
|
|
|
9
9
|
dist/NRelay1.js 10.7kb
|
|
10
10
|
dist/NSchema.js 8.2kb
|
|
11
11
|
dist/NPool.js 6.0kb
|
|
12
|
-
dist/test/TestRelayServer.js 4.
|
|
12
|
+
dist/test/TestRelayServer.js 4.7kb
|
|
13
13
|
dist/NSet.js 4.1kb
|
|
14
14
|
dist/NConnectSigner.js 3.9kb
|
|
15
15
|
dist/NBrowserSigner.js 3.9kb
|
|
16
16
|
dist/ln/LNURL.js 3.3kb
|
|
17
17
|
dist/NIP98.js 2.7kb
|
|
18
|
-
dist/uploaders/BlossomUploader.js
|
|
18
|
+
dist/uploaders/BlossomUploader.js 2.3kb
|
|
19
19
|
dist/uploaders/NostrBuildUploader.js 1.9kb
|
|
20
20
|
dist/test/MockRelay.js 1.4kb
|
|
21
21
|
dist/BunkerURI.js 1.4kb
|
|
22
22
|
dist/NKinds.js 1.1kb
|
|
23
|
+
dist/utils/getFilterLimit.js 1.1kb
|
|
23
24
|
dist/NIP05.js 1.1kb
|
|
24
25
|
dist/NSecSigner.js 1.1kb
|
|
25
26
|
dist/utils/Machina.js 925b
|
|
26
27
|
dist/NCache.js 828b
|
|
27
28
|
dist/mod.js 815b
|
|
28
|
-
|
|
29
|
-
...and 11 more output files...
|
|
29
|
+
...and 12 more output files...
|
|
30
30
|
|
|
31
|
-
⚡ Done in
|
|
31
|
+
⚡ Done in 24ms
|
|
32
32
|
Done!
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,114 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
at async
|
|
114
|
-
|
|
1
|
+
|
|
2
|
+
> @nostrify/nostrify@0.50.4 test /home/alex/Projects/nostrify/packages/nostrify
|
|
3
|
+
> node --test "**/*.test.ts"
|
|
4
|
+
|
|
5
|
+
✔ BunkerURI (4.746225ms)
|
|
6
|
+
✔ BunkerURI.fromJSON (2.258631ms)
|
|
7
|
+
✔ NBrowserSigner - without extension (408.083868ms)
|
|
8
|
+
✔ NBrowserSigner - with extension polyfill (210.998188ms)
|
|
9
|
+
✔ NBrowserSigner.nip44 - with extension polyfill (69.247265ms)
|
|
10
|
+
✔ NBrowserSigner.nip04 - with extension polyfill (35.341396ms)
|
|
11
|
+
✔ NBrowserSigner.getRelays - with extension polyfill (2.962389ms)
|
|
12
|
+
✔ NBrowserSigner - missing nip44 support (1.052295ms)
|
|
13
|
+
✔ NBrowserSigner - missing nip04 support (1.702803ms)
|
|
14
|
+
✔ NBrowserSigner - feature detection (1.125042ms)
|
|
15
|
+
✔ NBrowserSigner - extension appears after delay (303.472084ms)
|
|
16
|
+
✔ NBrowserSigner - nip44 works when extension appears after delay (324.400107ms)
|
|
17
|
+
✔ NCache (9.658392ms)
|
|
18
|
+
✔ NConnectSigner.signEvent with nip04 encryption (391.774809ms)
|
|
19
|
+
✔ NConnectSigner.signEvent with nip44 encryption (207.494929ms)
|
|
20
|
+
✔ NIP05.lookup (133.058123ms)
|
|
21
|
+
✔ NIP05.lookup with invalid values but valid profile pointer (14.302013ms)
|
|
22
|
+
✔ NIP05.lookup with invalid document (23.813217ms)
|
|
23
|
+
✔ NIP50.parseInput (8.291733ms)
|
|
24
|
+
✔ NIP50.parseInput with negated token (3.697095ms)
|
|
25
|
+
✔ NIP98.template (11.10432ms)
|
|
26
|
+
✔ NIP98.template with payload (49.424727ms)
|
|
27
|
+
✔ NIP98.verify (196.555049ms)
|
|
28
|
+
✔ NIP98.verify fails with missing header (3.038283ms)
|
|
29
|
+
✔ NIP98.verify fails with missing token (2.190563ms)
|
|
30
|
+
✔ NIP98.verify fails with invalid token (2.09342ms)
|
|
31
|
+
✔ NIP98.verify fails with invalid event (83.997252ms)
|
|
32
|
+
✔ NIP98.verify fails with wrong event kind (41.704081ms)
|
|
33
|
+
✔ NIP98.verify fails with wrong request URL (72.762617ms)
|
|
34
|
+
✔ NIP98.verify fails with wrong request method (48.279566ms)
|
|
35
|
+
✔ NIP98.verify fails with expired event (33.173366ms)
|
|
36
|
+
✔ NIP98.verify fails with invalid payload (49.772463ms)
|
|
37
|
+
✔ NIP98Client.fetch - basic GET request (194.533194ms)
|
|
38
|
+
✔ NIP98Client.fetch - POST request with body (108.697493ms)
|
|
39
|
+
✔ NIP98Client.fetch - with Request object input (38.584365ms)
|
|
40
|
+
✔ NIP98Client.fetch - with URL object input (23.447316ms)
|
|
41
|
+
✔ NIP98Client.fetch - uses default fetch when not provided (14.447727ms)
|
|
42
|
+
✔ NIP98Client.fetch - preserves existing headers (11.962379ms)
|
|
43
|
+
✔ NIP98Client.fetch - event can be verified with NIP98.verify (42.905196ms)
|
|
44
|
+
✔ NIP98Client.fetch - handles different HTTP methods (125.16977ms)
|
|
45
|
+
✔ NKinds (2.69246ms)
|
|
46
|
+
✔ NPool.query (672.497853ms)
|
|
47
|
+
✔ NPool.req (192.651524ms)
|
|
48
|
+
✔ NPool.event (135.901938ms)
|
|
49
|
+
✔ NPool.query with eoseTimeout (674.863957ms)
|
|
50
|
+
✔ NPool.query with eoseTimeout disabled (538.297274ms)
|
|
51
|
+
✔ NRelay1.query (489.184286ms)
|
|
52
|
+
✔ NRelay1.query with NIP-50 search preserves relay order (116.873749ms)
|
|
53
|
+
✔ NRelay1.query mismatched filter (61.927786ms)
|
|
54
|
+
✔ NRelay1.req (181.155305ms)
|
|
55
|
+
✔ NRelay1.event (39.385065ms)
|
|
56
|
+
﹣ NRelay1 backoff (0.638474ms) # SKIP
|
|
57
|
+
▶ NRelay1 idleTimeout
|
|
58
|
+
✔ websocket opens (7.858275ms)
|
|
59
|
+
✔ websocket closes after idleTimeout (151.842041ms)
|
|
60
|
+
✔ websocket wakes up during activity (30.190448ms)
|
|
61
|
+
✔ NRelay1 idleTimeout (198.365795ms)
|
|
62
|
+
✔ NRelay1.count rejects when the server sends CLOSED (35.144825ms)
|
|
63
|
+
✔ NRelay1 closes when it receives a binary message (41.616786ms)
|
|
64
|
+
✔ n.id (9.547513ms)
|
|
65
|
+
✔ n.bech32 (4.65879ms)
|
|
66
|
+
✔ n.filter (131.436935ms)
|
|
67
|
+
✔ n.event (70.944096ms)
|
|
68
|
+
✔ n.metadata (97.979282ms)
|
|
69
|
+
✔ NSecSigner (291.691919ms)
|
|
70
|
+
✔ NSecSigner.nip44 (80.607728ms)
|
|
71
|
+
✔ NSet (40.639953ms)
|
|
72
|
+
✔ NSet.add (replaceable) (0.621333ms)
|
|
73
|
+
✔ NSet.add (parameterized) (0.741169ms)
|
|
74
|
+
✔ NSet.add (deletion) (0.904847ms)
|
|
75
|
+
✔ Construct a RelayError from the reason message (4.510339ms)
|
|
76
|
+
✔ Throw a new RelayError if the OK message is false (0.66793ms)
|
|
77
|
+
✔ LNURL.fromString (9.361371ms)
|
|
78
|
+
✔ LNURL.fromLightningAddress (2.017806ms)
|
|
79
|
+
✔ LNURL.toString (0.99139ms)
|
|
80
|
+
✔ LNURL.getDetails (132.517443ms)
|
|
81
|
+
✔ LNURL.getInvoice (13.935902ms)
|
|
82
|
+
✔ ErrorRelay (211.320757ms)
|
|
83
|
+
✔ MockRelay (5.595707ms)
|
|
84
|
+
✔ BlossomUploader.upload (850.402405ms)
|
|
85
|
+
✖ NostrBuildUploader.upload (29.655028ms)
|
|
86
|
+
✔ CircularSet (3.028483ms)
|
|
87
|
+
✔ push, iterate, & close (105.244549ms)
|
|
88
|
+
✔ close & reopen (0.783748ms)
|
|
89
|
+
✔ aborts with signal (53.551362ms)
|
|
90
|
+
✔ already aborted signal in constructor (3.530691ms)
|
|
91
|
+
✔ push after abort (1.118661ms)
|
|
92
|
+
✔ multiple messages in queue (3.467462ms)
|
|
93
|
+
✔ N64 (21.22806ms)
|
|
94
|
+
✔ N64.encodeEvent (0.471119ms)
|
|
95
|
+
✔ N64.decodeEvent (10.169586ms)
|
|
96
|
+
ℹ tests 90
|
|
97
|
+
ℹ suites 0
|
|
98
|
+
ℹ pass 88
|
|
99
|
+
ℹ fail 1
|
|
100
|
+
ℹ cancelled 0
|
|
101
|
+
ℹ skipped 1
|
|
102
|
+
ℹ todo 0
|
|
103
|
+
ℹ duration_ms 4116.611574
|
|
104
|
+
|
|
105
|
+
✖ failing tests:
|
|
106
|
+
|
|
107
|
+
test at uploaders/NostrBuildUploader.test.ts:12:7
|
|
108
|
+
✖ NostrBuildUploader.upload (29.655028ms)
|
|
109
|
+
Error: nostr.build with default uploader requires a secret key to be configured
|
|
110
|
+
at TestContext.<anonymous> (file:///home/alex/Projects/nostrify/packages/nostrify/uploaders/NostrBuildUploader.test.ts:25:13)
|
|
111
|
+
at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
|
|
112
|
+
at async Test.run (node:internal/test_runner/test:1110:7)
|
|
113
|
+
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:358:3)
|
|
114
|
+
at async file:///home/alex/Projects/nostrify/packages/nostrify/uploaders/NostrBuildUploader.test.ts:12:1
|
|
115
|
+
ELIFECYCLE Test failed. See above for more details.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @nostrify/nostrify@0.50.
|
|
2
|
+
> @nostrify/nostrify@0.50.5 typecheck /home/alex/Projects/nostrify/packages/nostrify
|
|
3
3
|
> npx tsc --noEmit
|
|
4
4
|
|
|
5
5
|
npm warn Unknown env config "verify-deps-before-run". This will stop working in the next major version of npm.
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.50.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Fix NRelay1 and NPool to not enforce an inferred limit on coordinate filters. Filters targeting a single replaceable kind + single author, or a single addressable kind + single author + single `#d` tag, now allow relays to send back historical events instead of closing the subscription after receiving just one event.
|
|
8
|
+
|
|
3
9
|
## 0.50.4
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
package/NIP05.ts
CHANGED
package/NPool.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type {
|
|
|
6
6
|
NostrRelayEVENT,
|
|
7
7
|
NRelay,
|
|
8
8
|
} from '@nostrify/types';
|
|
9
|
-
import { getFilterLimit } from '
|
|
9
|
+
import { getFilterLimit } from './utils/getFilterLimit.ts';
|
|
10
10
|
|
|
11
11
|
import { CircularSet } from './utils/CircularSet.ts';
|
|
12
12
|
import { Machina } from './utils/Machina.ts';
|
package/NRelay1.test.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { it, test } from "node:test";
|
|
|
2
2
|
import type { NostrEvent } from "@nostrify/types";
|
|
3
3
|
import { deepStrictEqual, ok, rejects } from "node:assert";
|
|
4
4
|
import { finalizeEvent, generateSecretKey } from "nostr-tools";
|
|
5
|
-
import { WebsocketEvent } from "websocket-ts";
|
|
5
|
+
import { ExponentialBackoff, WebsocketEvent } from "websocket-ts";
|
|
6
6
|
|
|
7
7
|
import { genEvent } from "./test/mod.ts";
|
|
8
8
|
import { TestRelayServer } from "./test/TestRelayServer.ts";
|
|
@@ -114,7 +114,7 @@ await test("NRelay1.req", async () => {
|
|
|
114
114
|
clearTimeout(tid);
|
|
115
115
|
});
|
|
116
116
|
|
|
117
|
-
await test("NRelay1.event", async () => {
|
|
117
|
+
await test("NRelay1.event sends while connection is open", async () => {
|
|
118
118
|
await using server = await TestRelayServer.create();
|
|
119
119
|
await using relay = new NRelay1(server.url);
|
|
120
120
|
|
|
@@ -129,6 +129,71 @@ await test("NRelay1.event", async () => {
|
|
|
129
129
|
await relay.event(event);
|
|
130
130
|
});
|
|
131
131
|
|
|
132
|
+
await test("NRelay1.event sends before connection is open", async () => {
|
|
133
|
+
await using server = await TestRelayServer.create();
|
|
134
|
+
await using relay = new NRelay1(server.url);
|
|
135
|
+
|
|
136
|
+
const event: NostrEvent = finalizeEvent({
|
|
137
|
+
kind: 1,
|
|
138
|
+
content: "Sent before connection was established",
|
|
139
|
+
tags: [],
|
|
140
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
141
|
+
}, generateSecretKey());
|
|
142
|
+
|
|
143
|
+
// Send immediately without waiting for the connection to open.
|
|
144
|
+
// The ArrayQueue buffer should hold the message and deliver it
|
|
145
|
+
// once the socket opens.
|
|
146
|
+
await relay.event(event);
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
await test("NRelay1.event throws when OK is false", async () => {
|
|
150
|
+
await using server = await TestRelayServer.create({
|
|
151
|
+
handleMessage(socket, msg) {
|
|
152
|
+
if (msg[0] === "EVENT") {
|
|
153
|
+
server.send(socket, ["OK", msg[1].id, false, "blocked: not allowed"]);
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
await using relay = new NRelay1(server.url);
|
|
159
|
+
|
|
160
|
+
const event: NostrEvent = finalizeEvent({
|
|
161
|
+
kind: 1,
|
|
162
|
+
content: "This event should be rejected",
|
|
163
|
+
tags: [],
|
|
164
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
165
|
+
}, generateSecretKey());
|
|
166
|
+
|
|
167
|
+
await rejects(() => relay.event(event), /blocked: not allowed/);
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
await test("NRelay1.event sends after reconnect from CLOSING state", async () => {
|
|
171
|
+
await using server = await TestRelayServer.create();
|
|
172
|
+
await using relay = new NRelay1(server.url, {
|
|
173
|
+
backoff: new ExponentialBackoff(100),
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
await new Promise<void>((resolve) =>
|
|
177
|
+
relay.socket.addEventListener(WebsocketEvent.open, () => resolve(), {
|
|
178
|
+
once: true,
|
|
179
|
+
})
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
server.dropConnections();
|
|
183
|
+
|
|
184
|
+
// Wait briefly for the socket to register as closed.
|
|
185
|
+
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
186
|
+
|
|
187
|
+
const event: NostrEvent = finalizeEvent({
|
|
188
|
+
kind: 1,
|
|
189
|
+
content: "Sent while connection was closing, delivered after reconnect",
|
|
190
|
+
tags: [],
|
|
191
|
+
created_at: Math.floor(Date.now() / 1000),
|
|
192
|
+
}, generateSecretKey());
|
|
193
|
+
|
|
194
|
+
await relay.event(event);
|
|
195
|
+
});
|
|
196
|
+
|
|
132
197
|
test.skip("NRelay1 backoff", async () => {
|
|
133
198
|
await using server = await TestRelayServer.create();
|
|
134
199
|
await using relay = new NRelay1(server.url);
|
package/NRelay1.ts
CHANGED
|
@@ -13,7 +13,9 @@ import type {
|
|
|
13
13
|
NostrRelayInfo,
|
|
14
14
|
NRelay,
|
|
15
15
|
} from '@nostrify/types';
|
|
16
|
-
import {
|
|
16
|
+
import { matchFilters, verifyEvent as _verifyEvent } from 'nostr-tools';
|
|
17
|
+
|
|
18
|
+
import { getFilterLimit } from './utils/getFilterLimit.ts';
|
|
17
19
|
import { ArrayQueue, ExponentialBackoff, Websocket, WebsocketBuilder, WebsocketEvent } from 'websocket-ts';
|
|
18
20
|
import type { Backoff } from 'websocket-ts';
|
|
19
21
|
|
package/dist/NIP05.js
CHANGED
|
@@ -2,7 +2,7 @@ import { NSchema as n, z } from "./NSchema.js";
|
|
|
2
2
|
class NIP05 {
|
|
3
3
|
/** NIP-05 value regex. */
|
|
4
4
|
static regex() {
|
|
5
|
-
return /^(?:([\w.+-]+)@)?([\w
|
|
5
|
+
return /^(?:([\w.+-]+)@)?((?:[\w-]+\.)+[\w-]+)$/;
|
|
6
6
|
}
|
|
7
7
|
/** Nostr pubkey with relays object. */
|
|
8
8
|
static profilePointerSchema() {
|
package/dist/NPool.js
CHANGED
package/dist/NRelay1.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NRelay1.d.ts","sourceRoot":"","sources":["../NRelay1.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,UAAU,EACV,WAAW,EACX,gBAAgB,EAEhB,cAAc,EACd,eAAe,EACf,aAAa,EAGb,cAAc,EACd,MAAM,EACP,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"NRelay1.d.ts","sourceRoot":"","sources":["../NRelay1.ts"],"names":[],"mappings":"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"}
|
package/dist/NRelay1.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { matchFilters, verifyEvent as _verifyEvent } from "nostr-tools";
|
|
2
|
+
import { getFilterLimit } from "./utils/getFilterLimit.js";
|
|
2
3
|
import { ArrayQueue, ExponentialBackoff, WebsocketBuilder, WebsocketEvent } from "websocket-ts";
|
|
3
4
|
import { Machina } from "./utils/Machina.js";
|
|
4
5
|
import { NSchema as n } from "./NSchema.js";
|
|
@@ -20,6 +20,8 @@ export declare class TestRelayServer {
|
|
|
20
20
|
get url(): string;
|
|
21
21
|
close(): Promise<void>;
|
|
22
22
|
open(): Promise<void>;
|
|
23
|
+
/** Close all active WebSocket connections without shutting down the server. */
|
|
24
|
+
dropConnections(): void;
|
|
23
25
|
event(event: NostrEvent): Promise<void>;
|
|
24
26
|
[Symbol.asyncDispose](): Promise<void>;
|
|
25
27
|
static create(opts?: TestRelayServerOpts): Promise<TestRelayServer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestRelayServer.d.ts","sourceRoot":"","sources":["../../test/TestRelayServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAmB,MAAM,IAAI,CAAC;AAKhD,UAAU,mBAAmB;IAC3B,aAAa,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9E;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,KAAK,CAAmB;gBAEpB,IAAI,CAAC,EAAE,mBAAmB;IAOtC,IAAI;IAWJ,OAAO,CAAC,oBAAoB;IAgC5B,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI;YAOnC,aAAa;IA2C3B,IAAI,GAAG,IAAI,MAAM,CAIhB;IAGK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;WAM/B,MAAM,CAAC,IAAI,CAAC,EAAE,mBAAmB;CAK/C"}
|
|
1
|
+
{"version":3,"file":"TestRelayServer.d.ts","sourceRoot":"","sources":["../../test/TestRelayServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAmB,MAAM,IAAI,CAAC;AAKhD,UAAU,mBAAmB;IAC3B,aAAa,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9E;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,IAAI,CAAsB;IAClC,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,KAAK,CAAmB;gBAEpB,IAAI,CAAC,EAAE,mBAAmB;IAOtC,IAAI;IAWJ,OAAO,CAAC,oBAAoB;IAgC5B,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI;YAOnC,aAAa;IA2C3B,IAAI,GAAG,IAAI,MAAM,CAIhB;IAGK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBrB,+EAA+E;IAC/E,eAAe,IAAI,IAAI;IASvB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;WAM/B,MAAM,CAAC,IAAI,CAAC,EAAE,mBAAmB;CAK/C"}
|
|
@@ -129,6 +129,15 @@ class TestRelayServer {
|
|
|
129
129
|
}
|
|
130
130
|
return Promise.resolve();
|
|
131
131
|
}
|
|
132
|
+
/** Close all active WebSocket connections without shutting down the server. */
|
|
133
|
+
dropConnections() {
|
|
134
|
+
if (!this.inited) throw new Error("TestRelayServer not initialized");
|
|
135
|
+
this.connections.forEach((conn) => {
|
|
136
|
+
if (conn.readyState === WebSocket.OPEN) {
|
|
137
|
+
conn.close();
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
132
141
|
event(event) {
|
|
133
142
|
if (!this.inited) throw new Error("TestRelayServer not initialized");
|
|
134
143
|
return this.store.event(event);
|