@qntx/nostr 0.6.0 → 0.7.0
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/{abort-Ba8tDrOI.mjs → abort-DBq2STPj.mjs} +13 -6
- package/dist/abort-DBq2STPj.mjs.map +1 -0
- package/dist/{builder-9tjI6WQ3.mjs → builder-CdLE4J6O.mjs} +11 -17
- package/dist/builder-CdLE4J6O.mjs.map +1 -0
- package/dist/{builder-sSflu6nB.d.mts → builder-DgkqDylK.d.mts} +5 -6
- package/dist/{client-CadO5fAX.mjs → client-CILhdfsF.mjs} +104 -314
- package/dist/client-CILhdfsF.mjs.map +1 -0
- package/dist/client.d.mts +2 -2
- package/dist/client.mjs +2 -2
- package/dist/collections-DtwMc1NU.mjs +33 -0
- package/dist/collections-DtwMc1NU.mjs.map +1 -0
- package/dist/core.d.mts +9 -8
- package/dist/core.mjs +7 -7
- package/dist/{error-BW7re1UN.d.mts → error-BD_0QFKT.d.mts} +2 -2
- package/dist/{error-CR8Urc84.d.mts → error-BquXDmIN.d.mts} +4 -4
- package/dist/{error-DrEIM7FO.mjs → error-L_QdmSnV.mjs} +2 -2
- package/dist/{error-DrEIM7FO.mjs.map → error-L_QdmSnV.mjs.map} +1 -1
- package/dist/{error-B__OMBRY.mjs → error-gtJvV6YS.mjs} +2 -2
- package/dist/{error-B__OMBRY.mjs.map → error-gtJvV6YS.mjs.map} +1 -1
- package/dist/{event-fU3Y01PR.d.mts → event-DJeb_DIL.d.mts} +4 -2
- package/dist/{event-D8Nfoh4K.mjs → event-DinQMmJ1.mjs} +16 -10
- package/dist/event-DinQMmJ1.mjs.map +1 -0
- package/dist/{filter-C0IMByE3.d.mts → filter-jI_9htF7.d.mts} +2 -2
- package/dist/{gossip-DpIvkBuj.d.mts → gossip-C7HLW5kI.d.mts} +35 -26
- package/dist/{gossip-oloDMWEj.mjs → gossip-CcTp9VpU.mjs} +23 -33
- package/dist/gossip-CcTp9VpU.mjs.map +1 -0
- package/dist/gossip.d.mts +1 -1
- package/dist/gossip.mjs +1 -1
- package/dist/{index-CvkvqB16.d.mts → index-DU9tRFTZ.d.mts} +7 -20
- package/dist/{index-q4MDce_r.d.mts → index-DiXwNn2M.d.mts} +6 -8
- package/dist/{index-CNl2q67H.d.mts → index-DocgD9K0.d.mts} +92 -167
- package/dist/{index-D1bqFHKB.d.mts → index-InQZpHyQ.d.mts} +18 -18
- package/dist/{index-MxC28S4P.d.mts → index-Tx15HGAD.d.mts} +26 -28
- package/dist/{index-lvXeER5t.d.mts → index-iLT8UzY3.d.mts} +19 -37
- package/dist/index.d.mts +23 -21
- package/dist/index.mjs +21 -19
- package/dist/{instance-DQE8BoWt.mjs → instance-BcKzxHIP.mjs} +26 -27
- package/dist/instance-BcKzxHIP.mjs.map +1 -0
- package/dist/{instance-CIca-ynn.d.mts → instance-DjsL8h84.d.mts} +5 -5
- package/dist/{key-Cv4_pN3x.d.mts → key-D_5OgGT7.d.mts} +11 -7
- package/dist/{key-Bps-LqX7.mjs → key-bshqfmZL.mjs} +13 -9
- package/dist/key-bshqfmZL.mjs.map +1 -0
- package/dist/{loaders-o6YXB_Ri.mjs → loaders-DD0XAGzw.mjs} +73 -82
- package/dist/loaders-DD0XAGzw.mjs.map +1 -0
- package/dist/loaders.d.mts +3 -3
- package/dist/loaders.mjs +2 -2
- package/dist/{memory-C2EVx0_O.mjs → memory-D_-5-T31.mjs} +2 -2
- package/dist/memory-D_-5-T31.mjs.map +1 -0
- package/dist/{memory-index-Do1mz0WF.mjs → memory-index-C6rujtoc.mjs} +30 -247
- package/dist/memory-index-C6rujtoc.mjs.map +1 -0
- package/dist/message-CWLcFTQ1.mjs +194 -0
- package/dist/message-CWLcFTQ1.mjs.map +1 -0
- package/dist/{message-iGPIqnn0.d.mts → message-CbBZOhq3.d.mts} +3 -3
- package/dist/{nip17-CKIufV98.d.mts → nip17-cTDFfFVt.d.mts} +5 -6
- package/dist/{nip19-BevCJZsp.d.mts → nip19-D1OnJ192.d.mts} +3 -9
- package/dist/{nip46-DDV4dC56.d.mts → nip46-DrsPI8EX.d.mts} +3 -5
- package/dist/nip51-DoPUvQ--.d.mts +87 -0
- package/dist/{nip59-zQgdLcEr.d.mts → nip59-BFIihLYY.d.mts} +3 -4
- package/dist/nip65-52HiwiyD.d.mts +23 -0
- package/dist/{nip77-DH4RhS5r.d.mts → nip77-C9QcZn7b.d.mts} +3 -4
- package/dist/nips/blossom.d.mts +12 -8
- package/dist/nips/blossom.mjs +30 -9
- package/dist/nips/blossom.mjs.map +1 -1
- package/dist/nips/nip04.mjs +17 -7
- package/dist/nips/nip04.mjs.map +1 -1
- package/dist/nips/nip05.d.mts +2 -3
- package/dist/nips/nip05.mjs +1 -4
- package/dist/nips/nip05.mjs.map +1 -1
- package/dist/nips/nip10.d.mts +3 -3
- package/dist/nips/nip10.mjs +3 -3
- package/dist/nips/nip11.d.mts +1 -1
- package/dist/nips/nip11.mjs +4 -4
- package/dist/nips/nip11.mjs.map +1 -1
- package/dist/nips/nip13.d.mts +7 -7
- package/dist/nips/nip13.mjs +32 -10
- package/dist/nips/nip13.mjs.map +1 -1
- package/dist/nips/nip17.d.mts +1 -1
- package/dist/nips/nip17.mjs +13 -33
- package/dist/nips/nip17.mjs.map +1 -1
- package/dist/nips/nip19.d.mts +2 -2
- package/dist/nips/nip19.mjs +16 -28
- package/dist/nips/nip19.mjs.map +1 -1
- package/dist/nips/nip21.d.mts +6 -1
- package/dist/nips/nip21.mjs +15 -5
- package/dist/nips/nip21.mjs.map +1 -1
- package/dist/nips/nip27.d.mts +4 -4
- package/dist/nips/nip27.mjs.map +1 -1
- package/dist/nips/nip42.d.mts +1 -1
- package/dist/nips/nip42.mjs +2 -1
- package/dist/nips/nip42.mjs.map +1 -1
- package/dist/nips/nip44.mjs +1 -1
- package/dist/nips/nip46.d.mts +2 -2
- package/dist/nips/nip46.mjs +15 -19
- package/dist/nips/nip46.mjs.map +1 -1
- package/dist/nips/nip49.d.mts +5 -5
- package/dist/nips/nip49.mjs +4 -4
- package/dist/nips/nip49.mjs.map +1 -1
- package/dist/nips/nip51.d.mts +2 -86
- package/dist/nips/nip51.mjs +7 -23
- package/dist/nips/nip51.mjs.map +1 -1
- package/dist/nips/nip57.d.mts +7 -5
- package/dist/nips/nip57.mjs +12 -17
- package/dist/nips/nip57.mjs.map +1 -1
- package/dist/nips/nip59.d.mts +1 -1
- package/dist/nips/nip59.mjs +16 -16
- package/dist/nips/nip59.mjs.map +1 -1
- package/dist/nips/nip65.d.mts +2 -2
- package/dist/nips/nip65.mjs +14 -37
- package/dist/nips/nip65.mjs.map +1 -1
- package/dist/nips/nip77.d.mts +1 -1
- package/dist/nips/nip77.mjs +33 -32
- package/dist/nips/nip77.mjs.map +1 -1
- package/dist/nips/nip98.d.mts +5 -5
- package/dist/nips/nip98.mjs +8 -8
- package/dist/nips/nip98.mjs.map +1 -1
- package/dist/{pool-DBIYMtwy.d.mts → pool-SzJKPIa3.d.mts} +96 -91
- package/dist/pool-YHRZgcQ3.mjs +596 -0
- package/dist/pool-YHRZgcQ3.mjs.map +1 -0
- package/dist/put-DS0yzVJx.mjs +187 -0
- package/dist/put-DS0yzVJx.mjs.map +1 -0
- package/dist/{reactive-7aqeip4A.d.mts → reactive-BJ1ggn4d.d.mts} +7 -22
- package/dist/{reactive-BfhPp9a3.mjs → reactive-BJRoVHxU.mjs} +80 -65
- package/dist/reactive-BJRoVHxU.mjs.map +1 -0
- package/dist/{pool-As20OGxB.mjs → relay-CvxPiQ_m.mjs} +178 -721
- package/dist/relay-CvxPiQ_m.mjs.map +1 -0
- package/dist/relay.d.mts +4 -4
- package/dist/relay.mjs +3 -2
- package/dist/serial-Bzpw-xz3.mjs +21 -0
- package/dist/serial-Bzpw-xz3.mjs.map +1 -0
- package/dist/{signer-CYQutDzD.mjs → signer-yW3slDC2.mjs} +12 -14
- package/dist/signer-yW3slDC2.mjs.map +1 -0
- package/dist/signer.d.mts +2 -2
- package/dist/signer.mjs +2 -2
- package/dist/{storage-Dky3wuoH.mjs → storage-CZ52ifcQ.mjs} +17 -42
- package/dist/storage-CZ52ifcQ.mjs.map +1 -0
- package/dist/storage.d.mts +3 -3
- package/dist/storage.mjs +4 -4
- package/dist/store.d.mts +1 -1
- package/dist/store.mjs +1 -1
- package/dist/testing.d.mts +18 -18
- package/dist/testing.mjs +9 -9
- package/dist/testing.mjs.map +1 -1
- package/dist/{types-2pCUprRU.d.mts → types-Cm-XMgtH.d.mts} +6 -6
- package/dist/{types-CRQEk0Oi.d.mts → types-DNmiscfd.d.mts} +2 -2
- package/dist/{util-LfQirgDk.mjs → util-yFYzlbrm.mjs} +29 -7
- package/dist/util-yFYzlbrm.mjs.map +1 -0
- package/dist/{verifier-t5WoWbtY.mjs → verifier-BTLOpo1n.mjs} +3 -3
- package/dist/verifier-BTLOpo1n.mjs.map +1 -0
- package/dist/verifier-CgTFpgsC.d.mts +22 -0
- package/dist/wasm.browser.d.mts +3 -3
- package/dist/wasm.browser.mjs +3 -3
- package/dist/wasm.d.mts +3 -3
- package/dist/wasm.mjs +3 -3
- package/dist/wasm.mjs.map +1 -1
- package/package.json +5 -9
- package/dist/abort-Ba8tDrOI.mjs.map +0 -1
- package/dist/builder-9tjI6WQ3.mjs.map +0 -1
- package/dist/client-CadO5fAX.mjs.map +0 -1
- package/dist/event-D8Nfoh4K.mjs.map +0 -1
- package/dist/gossip-oloDMWEj.mjs.map +0 -1
- package/dist/instance-DQE8BoWt.mjs.map +0 -1
- package/dist/key-Bps-LqX7.mjs.map +0 -1
- package/dist/loaders-o6YXB_Ri.mjs.map +0 -1
- package/dist/memory-C2EVx0_O.mjs.map +0 -1
- package/dist/memory-index-Do1mz0WF.mjs.map +0 -1
- package/dist/message-DcY6Fi9o.mjs +0 -193
- package/dist/message-DcY6Fi9o.mjs.map +0 -1
- package/dist/nip65-CjgmdpPB.d.mts +0 -26
- package/dist/nips/nip96.d.mts +0 -40
- package/dist/nips/nip96.mjs +0 -118
- package/dist/nips/nip96.mjs.map +0 -1
- package/dist/pool-As20OGxB.mjs.map +0 -1
- package/dist/reactive-BfhPp9a3.mjs.map +0 -1
- package/dist/signer-CYQutDzD.mjs.map +0 -1
- package/dist/storage-Dky3wuoH.mjs.map +0 -1
- package/dist/util-LfQirgDk.mjs.map +0 -1
- package/dist/verifier-t5WoWbtY.mjs.map +0 -1
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { n as EventTemplate, t as Event } from "./event-
|
|
2
|
-
import { t as Filter } from "./filter-
|
|
3
|
-
import { n as CountResult } from "./message-
|
|
4
|
-
import {
|
|
1
|
+
import { n as EventTemplate, t as Event } from "./event-DJeb_DIL.mjs";
|
|
2
|
+
import { t as Filter } from "./filter-jI_9htF7.mjs";
|
|
3
|
+
import { n as CountResult } from "./message-CbBZOhq3.mjs";
|
|
4
|
+
import { t as EventVerifier } from "./verifier-CgTFpgsC.mjs";
|
|
5
|
+
import { a as NegentropyStorageVector } from "./nip77-C9QcZn7b.mjs";
|
|
5
6
|
import { t as WebSocketConstructor } from "./websocket-CmeqvAkp.mjs";
|
|
6
7
|
//#region src/relay/subscription.d.ts
|
|
7
8
|
type SubscriptionHandlers = {
|
|
@@ -31,39 +32,21 @@ type SubscribeOptions = SubscriptionHandlers & {
|
|
|
31
32
|
closeOnEose?: boolean | undefined;
|
|
32
33
|
signal?: AbortSignal | undefined;
|
|
33
34
|
};
|
|
34
|
-
|
|
35
|
-
|
|
35
|
+
/** Uniform close handle returned by subscriptions, fan-ins, and feeds. */
|
|
36
|
+
type Closer = {
|
|
37
|
+
close: (reason?: string) => void;
|
|
38
|
+
};
|
|
39
|
+
/** Public subscription handle returned by {@link Relay.subscribe}. */
|
|
40
|
+
type RelaySubscription = {
|
|
36
41
|
readonly id: string;
|
|
37
|
-
readonly
|
|
38
|
-
readonly handlers: SubscriptionHandlers;
|
|
39
|
-
readonly closeOnEose: boolean;
|
|
40
|
-
eosed: boolean;
|
|
41
|
-
closed: boolean;
|
|
42
|
-
/** True after one CLOSED `auth-required:` retry. */
|
|
43
|
-
authRetried: boolean;
|
|
44
|
-
/** Inclusive NIP-01 `since` watermark from verified EVENTs. */
|
|
45
|
-
lastCreatedAt: number | undefined;
|
|
46
|
-
/** Event ids at `lastCreatedAt` (same-second reconnect dedup). Not all seen ids. */
|
|
47
|
-
readonly idsAtWatermark: Set<string>;
|
|
48
|
-
constructor(filters: Filter[], opts: SubscribeOptions, sendClose: (id: string) => void);
|
|
49
|
-
close(reason?: string): void;
|
|
50
|
-
/** Advance the reconnect watermark after a verified EVENT. */
|
|
51
|
-
noteVerified(event: Event): void;
|
|
52
|
-
/**
|
|
53
|
-
* Filters for re-REQ. Original `filters` stay unchanged. NIP-01 `since` is inclusive — never
|
|
54
|
-
* `lastCreatedAt + 1`.
|
|
55
|
-
*/
|
|
56
|
-
replayFilters(): Filter[];
|
|
57
|
-
}
|
|
58
|
-
/** AsyncIterable wrapper over a subscription's events until EOSE or close. */
|
|
59
|
-
declare function subscriptionToAsyncIterable(start: (handlers: SubscriptionHandlers) => {
|
|
42
|
+
readonly closed: boolean;
|
|
60
43
|
close: (reason?: string) => void;
|
|
61
|
-
}
|
|
44
|
+
};
|
|
45
|
+
/** AsyncIterable wrapper over a subscription's events until EOSE or close. */
|
|
46
|
+
declare function subscriptionToAsyncIterable(start: (handlers: SubscriptionHandlers) => Closer, opts?: {
|
|
62
47
|
signal?: AbortSignal | undefined;
|
|
63
48
|
includeEose?: boolean | undefined;
|
|
64
|
-
}): AsyncIterable<Event> &
|
|
65
|
-
close: (reason?: string) => void;
|
|
66
|
-
};
|
|
49
|
+
}): AsyncIterable<Event> & Closer;
|
|
67
50
|
//#endregion
|
|
68
51
|
//#region src/relay/subscribe.d.ts
|
|
69
52
|
/** How a one-shot {@link Relay.fetch} REQ ended. */
|
|
@@ -82,7 +65,17 @@ type RelayFetchResult = {
|
|
|
82
65
|
};
|
|
83
66
|
//#endregion
|
|
84
67
|
//#region src/relay/relay.d.ts
|
|
85
|
-
/**
|
|
68
|
+
/**
|
|
69
|
+
* Relay lifecycle states:
|
|
70
|
+
*
|
|
71
|
+
* - `initialized` — constructed; `connect()` not yet attempted.
|
|
72
|
+
* - `connecting` — a `connect()` attempt is in flight (socket opening / resubscribing).
|
|
73
|
+
* - `connected` — socket open; REQ/EVENT/COUNT flow.
|
|
74
|
+
* - `disconnected` — socket down: a reconnect is scheduled when `enableReconnect` has live
|
|
75
|
+
* subscriptions to restore, or `disconnect()` severed manually (REQ state kept).
|
|
76
|
+
* - `closed` — terminal until the next `connect()`: `close()` or a socket death without a scheduled
|
|
77
|
+
* reconnect.
|
|
78
|
+
*/
|
|
86
79
|
declare const RelayStatus: {
|
|
87
80
|
readonly Initialized: "initialized";
|
|
88
81
|
readonly Connecting: "connecting";
|
|
@@ -95,7 +88,7 @@ type RelayStatusName = (typeof RelayStatus)[keyof typeof RelayStatus];
|
|
|
95
88
|
/** Per-relay options: socket override, verification, timeouts, reconnect, ping, NIP-42 auth. */
|
|
96
89
|
type RelayOptions = {
|
|
97
90
|
websocketImplementation?: WebSocketConstructor | undefined;
|
|
98
|
-
verifyEvent?:
|
|
91
|
+
verifyEvent?: EventVerifier | undefined;
|
|
99
92
|
publishTimeoutMs?: number | undefined;
|
|
100
93
|
connectTimeoutMs?: number | undefined;
|
|
101
94
|
/**
|
|
@@ -104,7 +97,7 @@ type RelayOptions = {
|
|
|
104
97
|
*/
|
|
105
98
|
enableReconnect?: boolean | undefined;
|
|
106
99
|
/** Backoff delays in ms between reconnect attempts. */
|
|
107
|
-
reconnectBackoffMs?: number
|
|
100
|
+
reconnectBackoffMs?: ReadonlyArray<number> | undefined;
|
|
108
101
|
enablePing?: boolean | undefined;
|
|
109
102
|
pingIntervalMs?: number | undefined;
|
|
110
103
|
pingTimeoutMs?: number | undefined;
|
|
@@ -116,6 +109,22 @@ type PublishResult = {
|
|
|
116
109
|
ok: boolean;
|
|
117
110
|
message: string;
|
|
118
111
|
};
|
|
112
|
+
/** Typed event payloads for {@link Relay.on}: lifecycle and protocol notifications. */
|
|
113
|
+
type RelayEventMap = {
|
|
114
|
+
/** A NIP-01 NOTICE message from the relay. */
|
|
115
|
+
notice: string;
|
|
116
|
+
/** Terminal close of the relay (a transient disconnect with reconnect does not fire it). */
|
|
117
|
+
close: undefined;
|
|
118
|
+
/** Fired when the relay sends a NIP-42 AUTH challenge. */
|
|
119
|
+
auth: string;
|
|
120
|
+
/** Fired after a successful reconnect (not the initial connect). */
|
|
121
|
+
reconnect: undefined;
|
|
122
|
+
/**
|
|
123
|
+
* Fired when a delivered EVENT fails id/signature verification, just before the event is dropped.
|
|
124
|
+
* A poisoned verifier dropping events does not fire it.
|
|
125
|
+
*/
|
|
126
|
+
invalidevent: undefined;
|
|
127
|
+
};
|
|
119
128
|
/**
|
|
120
129
|
* Single-relay NIP-01 client. Connection lifecycle, REQ/CLOSE, EVENT publish ACK, AUTH, COUNT,
|
|
121
130
|
* NIP-77, optional reconnect.
|
|
@@ -123,17 +132,6 @@ type PublishResult = {
|
|
|
123
132
|
declare class Relay {
|
|
124
133
|
#private;
|
|
125
134
|
readonly url: string;
|
|
126
|
-
onnotice: ((msg: string) => void) | undefined;
|
|
127
|
-
onclose: (() => void) | undefined;
|
|
128
|
-
/** Fired when the relay sends a NIP-42 AUTH challenge. */
|
|
129
|
-
onauth: ((challenge: string) => void) | undefined;
|
|
130
|
-
/** Fired after a successful reconnect (not the initial connect). */
|
|
131
|
-
onreconnect: (() => void) | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* Fired when a delivered EVENT fails id/signature verification, just before the event is dropped.
|
|
134
|
-
* A poisoned verifier dropping events does not fire it.
|
|
135
|
-
*/
|
|
136
|
-
oninvalidevent: (() => void) | undefined;
|
|
137
135
|
constructor(url: string, opts?: RelayOptions);
|
|
138
136
|
/** Latest NIP-42 challenge, if any. */
|
|
139
137
|
get challenge(): string | undefined;
|
|
@@ -145,6 +143,12 @@ declare class Relay {
|
|
|
145
143
|
get subscriptionCount(): number;
|
|
146
144
|
/** One-shot requests still awaiting a relay reply (EVENT ACK, COUNT, NEG). */
|
|
147
145
|
get inFlightCount(): number;
|
|
146
|
+
/**
|
|
147
|
+
* Listen for a relay event. Multiple listeners per type are allowed and fire in registration
|
|
148
|
+
* order; a throwing listener is reported and does not break the dispatch. Returns an unsubscribe
|
|
149
|
+
* function.
|
|
150
|
+
*/
|
|
151
|
+
on<K extends keyof RelayEventMap>(type: K, listener: (payload: RelayEventMap[K]) => void): () => void;
|
|
148
152
|
static connect(url: string, opts?: RelayOptions & {
|
|
149
153
|
signal?: AbortSignal;
|
|
150
154
|
}): Promise<Relay>;
|
|
@@ -161,25 +165,26 @@ declare class Relay {
|
|
|
161
165
|
*/
|
|
162
166
|
disconnect(): void;
|
|
163
167
|
/** Low-level REQ with callbacks. Survives reconnect when enableReconnect is on. */
|
|
164
|
-
subscribe(filters: Filter
|
|
168
|
+
subscribe(filters: ReadonlyArray<Filter>, opts?: SubscribeOptions): RelaySubscription;
|
|
165
169
|
/** AsyncIterable of events for filters until the subscription is closed. */
|
|
166
|
-
stream(filters: Filter
|
|
167
|
-
signal?: AbortSignal;
|
|
168
|
-
id?: string;
|
|
169
|
-
}): AsyncIterable<Event> &
|
|
170
|
-
close: (reason?: string) => void;
|
|
171
|
-
};
|
|
170
|
+
stream(filters: ReadonlyArray<Filter>, opts?: {
|
|
171
|
+
signal?: AbortSignal | undefined;
|
|
172
|
+
id?: string | undefined;
|
|
173
|
+
}): AsyncIterable<Event> & Closer;
|
|
172
174
|
/**
|
|
173
175
|
* One-shot query: collect events until the REQ ends, then close. `end` reports how it ended —
|
|
174
176
|
* relay `EOSE`, relay `CLOSED` (with its reason), or the local timeout; events received before a
|
|
175
177
|
* CLOSED or the deadline are still returned. Abort rejects; a failed (re)connect rejects.
|
|
176
178
|
*/
|
|
177
|
-
fetch(filters: Filter
|
|
179
|
+
fetch(filters: ReadonlyArray<Filter>, opts?: {
|
|
178
180
|
timeoutMs?: number | undefined;
|
|
179
181
|
signal?: AbortSignal | undefined;
|
|
180
182
|
id?: string | undefined;
|
|
181
183
|
}): Promise<RelayFetchResult>;
|
|
182
|
-
/**
|
|
184
|
+
/**
|
|
185
|
+
* Publish an event and wait for OK. A concurrent publish of the same event id joins the in-flight
|
|
186
|
+
* publish instead of racing it — the joiner's `timeoutMs` does not apply.
|
|
187
|
+
*/
|
|
183
188
|
publish(event: Event, opts?: {
|
|
184
189
|
timeoutMs?: number | undefined;
|
|
185
190
|
}): Promise<PublishResult>;
|
|
@@ -187,7 +192,7 @@ declare class Relay {
|
|
|
187
192
|
* NIP-45 COUNT: ask the relay how many events match `filters`. Resolves with the COUNT payload
|
|
188
193
|
* (count / optional approximate / optional hll).
|
|
189
194
|
*/
|
|
190
|
-
count(filters: Filter
|
|
195
|
+
count(filters: ReadonlyArray<Filter>, opts?: {
|
|
191
196
|
id?: string | undefined;
|
|
192
197
|
timeoutMs?: number | undefined;
|
|
193
198
|
signal?: AbortSignal | undefined;
|
|
@@ -198,8 +203,8 @@ declare class Relay {
|
|
|
198
203
|
}): Promise<PublishResult>;
|
|
199
204
|
/**
|
|
200
205
|
* Clear a cached AUTH rejection for the current challenge so a later `auth()` signs again. A
|
|
201
|
-
* successful auth and in-flight answers are kept. When a challenge is pending and unanswered,
|
|
202
|
-
* `
|
|
206
|
+
* successful auth and in-flight answers are kept. When a challenge is pending and unanswered, an
|
|
207
|
+
* `auth` event is re-fired so the pool's automatic auth can run once more.
|
|
203
208
|
*/
|
|
204
209
|
resetAuth(): void;
|
|
205
210
|
/**
|
|
@@ -231,16 +236,7 @@ type InvalidEventPolicy = {
|
|
|
231
236
|
cooldownMs: number;
|
|
232
237
|
};
|
|
233
238
|
/** Pool-wide options applied to every managed relay. */
|
|
234
|
-
type PoolOptions = {
|
|
235
|
-
websocketImplementation?: WebSocketConstructor | undefined;
|
|
236
|
-
verifyEvent?: RelayOptions["verifyEvent"];
|
|
237
|
-
publishTimeoutMs?: number | undefined;
|
|
238
|
-
connectTimeoutMs?: number | undefined;
|
|
239
|
-
enableReconnect?: boolean | undefined;
|
|
240
|
-
reconnectBackoffMs?: number[] | undefined;
|
|
241
|
-
enablePing?: boolean | undefined;
|
|
242
|
-
pingIntervalMs?: number | undefined;
|
|
243
|
-
pingTimeoutMs?: number | undefined;
|
|
239
|
+
type PoolOptions = Omit<RelayOptions, "authSigner"> & {
|
|
244
240
|
/**
|
|
245
241
|
* When set, automatically answer NIP-42 AUTH challenges for relays that send them. Return
|
|
246
242
|
* undefined to skip a given relay URL.
|
|
@@ -275,11 +271,19 @@ type PoolOptions = {
|
|
|
275
271
|
*/
|
|
276
272
|
onRelaySuspended?: ((url: string, until: number) => void) | undefined;
|
|
277
273
|
};
|
|
278
|
-
/** Per-relay publish outcome: the relay's OK
|
|
274
|
+
/** Per-relay publish outcome: the relay's OK verdict or a transport-level failure. */
|
|
279
275
|
type PoolPublishResult = {
|
|
280
|
-
url: string;
|
|
281
|
-
|
|
282
|
-
|
|
276
|
+
readonly url: string;
|
|
277
|
+
readonly status: "ok";
|
|
278
|
+
readonly message: string;
|
|
279
|
+
} | {
|
|
280
|
+
readonly url: string;
|
|
281
|
+
readonly status: "rejected";
|
|
282
|
+
readonly message: string;
|
|
283
|
+
} | {
|
|
284
|
+
readonly url: string;
|
|
285
|
+
readonly status: "failed";
|
|
286
|
+
readonly error: string;
|
|
283
287
|
};
|
|
284
288
|
/** Multi-relay subscribe options: callbacks also receive the normalized relay URL. */
|
|
285
289
|
type PoolSubscribeOptions = Omit<SubscribeOptions, "onevent" | "receivedEvent"> & {
|
|
@@ -295,13 +299,14 @@ type PoolFetchResult = {
|
|
|
295
299
|
readonly reason: string;
|
|
296
300
|
};
|
|
297
301
|
};
|
|
298
|
-
/** Per-relay NIP-45 COUNT result (or
|
|
299
|
-
type PoolCountResult = {
|
|
300
|
-
url: string;
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
302
|
+
/** Per-relay NIP-45 COUNT result (or a transport-level failure). */
|
|
303
|
+
type PoolCountResult = ({
|
|
304
|
+
readonly url: string;
|
|
305
|
+
readonly status: "ok";
|
|
306
|
+
} & CountResult) | {
|
|
307
|
+
readonly url: string;
|
|
308
|
+
readonly status: "failed";
|
|
309
|
+
readonly error: string;
|
|
305
310
|
};
|
|
306
311
|
/** Multi-relay coordinator: connection reuse, cross-relay event dedup, fan-out publish. */
|
|
307
312
|
declare class Pool {
|
|
@@ -325,38 +330,38 @@ declare class Pool {
|
|
|
325
330
|
* Subscribe across relays. Deduplicates by event id. Returns a closer; callbacks receive every
|
|
326
331
|
* new event once.
|
|
327
332
|
*/
|
|
328
|
-
subscribe(relays: string
|
|
329
|
-
close: (reason?: string) => void;
|
|
330
|
-
};
|
|
333
|
+
subscribe(relays: ReadonlyArray<string>, filters: ReadonlyArray<Filter>, opts?: PoolSubscribeOptions): Closer;
|
|
331
334
|
/**
|
|
332
335
|
* One-shot fetch per relay: each entry reports its own events and end reason (`eose`, `closed`,
|
|
333
336
|
* `timeout`), or `failed` when the connect or REQ itself errored. An abort rejects the whole
|
|
334
337
|
* call. Events are not deduped across relays — use {@link fetch} for that.
|
|
335
338
|
*/
|
|
336
|
-
fetchEach(relays: string
|
|
339
|
+
fetchEach(relays: ReadonlyArray<string>, filters: ReadonlyArray<Filter>, opts?: {
|
|
337
340
|
timeoutMs?: number | undefined;
|
|
338
341
|
signal?: AbortSignal | undefined;
|
|
339
342
|
}): Promise<PoolFetchResult[]>;
|
|
340
343
|
/** Fetch events until each connected relay EOSE or timeout; dedupe by id. */
|
|
341
|
-
fetch(relays: string
|
|
344
|
+
fetch(relays: ReadonlyArray<string>, filters: ReadonlyArray<Filter>, opts?: {
|
|
342
345
|
timeoutMs?: number | undefined;
|
|
343
346
|
signal?: AbortSignal | undefined;
|
|
344
347
|
/** Every event of every relay batch, including cross-relay duplicates. */
|
|
345
348
|
onevent?: ((event: Event, relayUrl: string) => void) | undefined;
|
|
346
349
|
}): Promise<Event[]>;
|
|
347
350
|
/** Publish to all listed relays; returns per-relay outcomes. */
|
|
348
|
-
publish(relays: string
|
|
351
|
+
publish(relays: ReadonlyArray<string>, event: Event, opts?: {
|
|
349
352
|
timeoutMs?: number | undefined;
|
|
350
353
|
}): Promise<PoolPublishResult[]>;
|
|
351
354
|
/** First successful publish (Promise.any semantics). */
|
|
352
|
-
publishAny(relays: string
|
|
355
|
+
publishAny(relays: ReadonlyArray<string>, event: Event, opts?: {
|
|
353
356
|
timeoutMs?: number | undefined;
|
|
354
|
-
}): Promise<PoolPublishResult
|
|
357
|
+
}): Promise<Extract<PoolPublishResult, {
|
|
358
|
+
status: "ok";
|
|
359
|
+
}>>;
|
|
355
360
|
/**
|
|
356
361
|
* NIP-45 COUNT across relays. Per-relay outcomes; failures do not throw. Counts are not summed —
|
|
357
362
|
* each relay reports independently (may overlap).
|
|
358
363
|
*/
|
|
359
|
-
count(relays: string
|
|
364
|
+
count(relays: ReadonlyArray<string>, filters: ReadonlyArray<Filter>, opts?: {
|
|
360
365
|
timeoutMs?: number | undefined;
|
|
361
366
|
signal?: AbortSignal | undefined;
|
|
362
367
|
}): Promise<PoolCountResult[]>;
|
|
@@ -367,5 +372,5 @@ declare class Pool {
|
|
|
367
372
|
connectedUrls(): string[];
|
|
368
373
|
}
|
|
369
374
|
//#endregion
|
|
370
|
-
export {
|
|
371
|
-
//# sourceMappingURL=pool-
|
|
375
|
+
export { RelaySubscription as _, PoolOptions as a, subscriptionToAsyncIterable as b, PublishResult as c, RelayOptions as d, RelayStatus as f, Closer as g, RelayFetchResult as h, PoolFetchResult as i, Relay as l, RelayFetchEnd as m, Pool as n, PoolPublishResult as o, RelayStatusName as p, PoolCountResult as r, PoolSubscribeOptions as s, InvalidEventPolicy as t, RelayEventMap as u, SubscribeOptions as v, SubscriptionHandlers as y };
|
|
376
|
+
//# sourceMappingURL=pool-SzJKPIa3.d.mts.map
|