@flamingo-stack/openframe-frontend-core 0.0.212 → 0.0.213
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/{chunk-ZFBLC5GV.cjs → chunk-35XIT2CF.cjs} +17 -17
- package/dist/{chunk-ZFBLC5GV.cjs.map → chunk-35XIT2CF.cjs.map} +1 -1
- package/dist/{chunk-QKFBZLIR.js → chunk-3JWIJJ44.js} +2 -2
- package/dist/chunk-CZR7ARBA.js +698 -0
- package/dist/chunk-CZR7ARBA.js.map +1 -0
- package/dist/{chunk-UYQOPC57.js → chunk-HICZPTRR.js} +4 -351
- package/dist/chunk-HICZPTRR.js.map +1 -0
- package/dist/{chunk-5BNWGK6D.js → chunk-IK2X5YJU.js} +3 -3
- package/dist/{chunk-VTUIMMHO.cjs → chunk-OTKJASSX.cjs} +26 -26
- package/dist/{chunk-VTUIMMHO.cjs.map → chunk-OTKJASSX.cjs.map} +1 -1
- package/dist/chunk-OZ3GH6OQ.cjs +698 -0
- package/dist/chunk-OZ3GH6OQ.cjs.map +1 -0
- package/dist/{chunk-EH3RWVF3.cjs → chunk-WT5JV2GS.cjs} +8 -355
- package/dist/chunk-WT5JV2GS.cjs.map +1 -0
- package/dist/{chunk-WI76ZUBE.cjs → chunk-ZDF6F7ED.cjs} +544 -678
- package/dist/chunk-ZDF6F7ED.cjs.map +1 -0
- package/dist/{chunk-3E5ANY55.js → chunk-ZTJVRSN5.js} +409 -543
- package/dist/{chunk-3E5ANY55.js.map → chunk-ZTJVRSN5.js.map} +1 -1
- package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-nats-dialog-subscription.d.ts +0 -9
- package/dist/components/chat/hooks/use-nats-dialog-subscription.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +5 -4
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.js +4 -3
- package/dist/components/contact/index.cjs +6 -5
- package/dist/components/contact/index.cjs.map +1 -1
- package/dist/components/contact/index.js +5 -4
- package/dist/components/features/index.cjs +5 -4
- package/dist/components/features/index.cjs.map +1 -1
- package/dist/components/features/index.js +4 -3
- package/dist/components/features/notifications/index.d.ts +2 -2
- package/dist/components/features/notifications/index.d.ts.map +1 -1
- package/dist/components/features/notifications/notifications-context.d.ts +16 -1
- package/dist/components/features/notifications/notifications-context.d.ts.map +1 -1
- package/dist/components/features/notifications/types.d.ts +4 -0
- package/dist/components/features/notifications/types.d.ts.map +1 -1
- package/dist/components/index.cjs +55 -54
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +7 -6
- package/dist/components/index.js.map +1 -1
- package/dist/components/navigation/app-header.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +5 -4
- package/dist/components/navigation/index.cjs.map +1 -1
- package/dist/components/navigation/index.js +4 -3
- package/dist/components/tickets/index.cjs +66 -65
- package/dist/components/tickets/index.cjs.map +1 -1
- package/dist/components/tickets/index.js +6 -5
- package/dist/components/tickets/index.js.map +1 -1
- package/dist/components/ui/index.cjs +5 -4
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +4 -3
- package/dist/embed-shims/index.cjs +3 -3
- package/dist/embed-shims/index.cjs.map +1 -1
- package/dist/embed-shims/index.js +4 -4
- package/dist/hooks/index.cjs +3 -2
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.js +2 -1
- package/dist/index.cjs +5 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -3
- package/dist/nats/index.cjs +28 -346
- package/dist/nats/index.cjs.map +1 -1
- package/dist/nats/index.d.ts +3 -0
- package/dist/nats/index.d.ts.map +1 -1
- package/dist/nats/index.js +30 -346
- package/dist/nats/index.js.map +1 -1
- package/dist/nats/nats-provider.d.ts +28 -0
- package/dist/nats/nats-provider.d.ts.map +1 -0
- package/dist/nats/nats.d.ts +1 -0
- package/dist/nats/nats.d.ts.map +1 -1
- package/dist/nats/shared-connection.d.ts +73 -0
- package/dist/nats/shared-connection.d.ts.map +1 -0
- package/dist/nats/use-nats-subscription.d.ts +18 -0
- package/dist/nats/use-nats-subscription.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +60 -207
- package/src/components/chat/hooks/use-nats-dialog-subscription.ts +71 -214
- package/src/components/features/notifications/index.ts +2 -1
- package/src/components/features/notifications/notifications-context.tsx +104 -6
- package/src/components/features/notifications/types.ts +5 -0
- package/src/components/navigation/app-header.tsx +7 -9
- package/src/nats/index.ts +3 -0
- package/src/nats/nats-provider.tsx +146 -0
- package/src/nats/nats.ts +2 -0
- package/src/nats/shared-connection.ts +285 -0
- package/src/nats/use-nats-subscription.ts +99 -0
- package/dist/chunk-EH3RWVF3.cjs.map +0 -1
- package/dist/chunk-UYQOPC57.js.map +0 -1
- package/dist/chunk-WI76ZUBE.cjs.map +0 -1
- /package/dist/{chunk-QKFBZLIR.js.map → chunk-3JWIJJ44.js.map} +0 -0
- /package/dist/{chunk-5BNWGK6D.js.map → chunk-IK2X5YJU.js.map} +0 -0
package/dist/nats/index.js
CHANGED
|
@@ -1,347 +1,31 @@
|
|
|
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
|
-
handler: () => {
|
|
32
|
-
const delay = Math.min(initialDelay * multiplier ** attempt, maxDelay);
|
|
33
|
-
attempt++;
|
|
34
|
-
return jitter ? delay * (0.5 + cryptoRandom() * 0.5) : delay;
|
|
35
|
-
},
|
|
36
|
-
reset: () => {
|
|
37
|
-
attempt = 0;
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function mapOptionsToConnectionOptions(opts, backoff) {
|
|
42
|
-
return {
|
|
43
|
-
servers: opts.servers,
|
|
44
|
-
name: opts.name,
|
|
45
|
-
token: opts.token,
|
|
46
|
-
user: opts.user,
|
|
47
|
-
pass: opts.pass,
|
|
48
|
-
timeout: opts.connectTimeoutMs ?? 15e3,
|
|
49
|
-
reconnect: opts.reconnect ?? true,
|
|
50
|
-
maxReconnectAttempts: opts.maxReconnectAttempts,
|
|
51
|
-
reconnectTimeWait: opts.reconnectTimeWaitMs,
|
|
52
|
-
reconnectDelayHandler: backoff?.handler,
|
|
53
|
-
pingInterval: opts.pingIntervalMs,
|
|
54
|
-
maxPingOut: opts.maxPingOut,
|
|
55
|
-
inboxPrefix: opts.inboxPrefix
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
function mapNatsTypeToStatus(type) {
|
|
59
|
-
const t = String(type).toLowerCase();
|
|
60
|
-
if (t.includes("disconnect")) return "disconnected";
|
|
61
|
-
if (t === "reconnecting") return "reconnecting";
|
|
62
|
-
if (t === "reconnect" || t.includes("connect")) return "connected";
|
|
63
|
-
if (t.includes("error")) return "error";
|
|
64
|
-
if (t.includes("close")) return "closed";
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
function createNatsClient(options) {
|
|
68
|
-
let nc = null;
|
|
69
|
-
let statusLoopAbort = null;
|
|
70
|
-
let connectInFlight = null;
|
|
71
|
-
const backoff = options.exponentialBackoff ? createExponentialBackoffHandler(options.exponentialBackoff) : void 0;
|
|
72
|
-
const statusListeners = /* @__PURE__ */ new Set();
|
|
73
|
-
function emitStatus(event) {
|
|
74
|
-
for (const listener of statusListeners) {
|
|
75
|
-
try {
|
|
76
|
-
listener(event);
|
|
77
|
-
} catch {
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
async function connect() {
|
|
82
|
-
if (nc && !nc.isClosed()) return;
|
|
83
|
-
if (connectInFlight) return connectInFlight;
|
|
84
|
-
assertClientSide();
|
|
85
|
-
connectInFlight = (async () => {
|
|
86
|
-
try {
|
|
87
|
-
emitStatus({ status: "connecting" });
|
|
88
|
-
const nats = await importNats();
|
|
89
|
-
const conn = await nats.connect(mapOptionsToConnectionOptions(options, backoff));
|
|
90
|
-
nc = conn;
|
|
91
|
-
emitStatus({ status: "connected" });
|
|
92
|
-
statusLoopAbort = new AbortController();
|
|
93
|
-
const signal = statusLoopAbort.signal;
|
|
94
|
-
(async () => {
|
|
95
|
-
try {
|
|
96
|
-
for await (const s of conn.status()) {
|
|
97
|
-
if (signal.aborted) return;
|
|
98
|
-
const mapped = mapNatsTypeToStatus(s?.type);
|
|
99
|
-
if (mapped) {
|
|
100
|
-
if (mapped === "connected" && backoff) {
|
|
101
|
-
backoff.reset();
|
|
102
|
-
}
|
|
103
|
-
emitStatus({ status: mapped, data: s?.data });
|
|
104
|
-
if (mapped === "closed") {
|
|
105
|
-
nc = null;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
} catch (e) {
|
|
110
|
-
if (!signal.aborted) {
|
|
111
|
-
emitStatus({ status: "error", data: e });
|
|
112
|
-
nc = null;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
})().catch(() => {
|
|
116
|
-
});
|
|
117
|
-
} finally {
|
|
118
|
-
connectInFlight = null;
|
|
119
|
-
}
|
|
120
|
-
})();
|
|
121
|
-
return connectInFlight;
|
|
122
|
-
}
|
|
123
|
-
async function close() {
|
|
124
|
-
const conn = nc;
|
|
125
|
-
nc = null;
|
|
126
|
-
if (statusLoopAbort) {
|
|
127
|
-
try {
|
|
128
|
-
statusLoopAbort.abort();
|
|
129
|
-
} catch {
|
|
130
|
-
}
|
|
131
|
-
statusLoopAbort = null;
|
|
132
|
-
}
|
|
133
|
-
if (!conn) return;
|
|
134
|
-
try {
|
|
135
|
-
await conn.drain();
|
|
136
|
-
} finally {
|
|
137
|
-
try {
|
|
138
|
-
await conn.close();
|
|
139
|
-
} finally {
|
|
140
|
-
emitStatus({ status: "closed" });
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
function requireConnection() {
|
|
145
|
-
if (!nc) throw new Error("NATS is not connected. Call client.connect() first.");
|
|
146
|
-
return nc;
|
|
147
|
-
}
|
|
148
|
-
function isConnected() {
|
|
149
|
-
return Boolean(nc) && !nc.isClosed();
|
|
150
|
-
}
|
|
151
|
-
function publishBytes(subject, payload, opts) {
|
|
152
|
-
const conn = requireConnection();
|
|
153
|
-
(async () => {
|
|
154
|
-
const nats = await importNats();
|
|
155
|
-
conn.publish(subject, payload, { headers: toNatsHeaders(nats, opts?.headers) });
|
|
156
|
-
})().catch((e) => emitStatus({ status: "error", data: e }));
|
|
157
|
-
}
|
|
158
|
-
function publishString(subject, payload, opts) {
|
|
159
|
-
(async () => {
|
|
160
|
-
const nats = await importNats();
|
|
161
|
-
const sc = nats.StringCodec();
|
|
162
|
-
publishBytes(subject, sc.encode(payload), opts);
|
|
163
|
-
})().catch((e) => emitStatus({ status: "error", data: e }));
|
|
164
|
-
}
|
|
165
|
-
function publishJson(subject, payload, opts) {
|
|
166
|
-
(async () => {
|
|
167
|
-
const nats = await importNats();
|
|
168
|
-
const jc = nats.JSONCodec();
|
|
169
|
-
publishBytes(subject, jc.encode(payload), opts);
|
|
170
|
-
})().catch((e) => emitStatus({ status: "error", data: e }));
|
|
171
|
-
}
|
|
172
|
-
async function requestBytes(subject, payload, opts) {
|
|
173
|
-
const conn = requireConnection();
|
|
174
|
-
const nats = await importNats();
|
|
175
|
-
const msg = await conn.request(subject, payload, {
|
|
176
|
-
timeout: opts?.timeoutMs ?? 2e3,
|
|
177
|
-
headers: toNatsHeaders(nats, opts?.headers)
|
|
178
|
-
});
|
|
179
|
-
return msg;
|
|
180
|
-
}
|
|
181
|
-
async function requestString(subject, payload, opts) {
|
|
182
|
-
const nats = await importNats();
|
|
183
|
-
const sc = nats.StringCodec();
|
|
184
|
-
const msg = await requestBytes(subject, sc.encode(payload), opts);
|
|
185
|
-
return sc.decode(msg.data);
|
|
186
|
-
}
|
|
187
|
-
async function requestJson(subject, payload, opts) {
|
|
188
|
-
const nats = await importNats();
|
|
189
|
-
const reqCodec = nats.JSONCodec();
|
|
190
|
-
const resCodec = nats.JSONCodec();
|
|
191
|
-
const msg = await requestBytes(subject, reqCodec.encode(payload), opts);
|
|
192
|
-
return resCodec.decode(msg.data);
|
|
193
|
-
}
|
|
194
|
-
function subscribeBytes(subject, onMessage, opts) {
|
|
195
|
-
const conn = requireConnection();
|
|
196
|
-
const sub = conn.subscribe(subject, { queue: opts?.queue });
|
|
197
|
-
if (typeof opts?.max === "number") sub.unsubscribe(opts.max);
|
|
198
|
-
const abortController = new AbortController();
|
|
199
|
-
const signal = opts?.signal ?? abortController.signal;
|
|
200
|
-
(async () => {
|
|
201
|
-
try {
|
|
202
|
-
for await (const msg of sub) {
|
|
203
|
-
if (signal.aborted) break;
|
|
204
|
-
await onMessage(msg);
|
|
205
|
-
}
|
|
206
|
-
} catch (e) {
|
|
207
|
-
emitStatus({ status: "error", data: e });
|
|
208
|
-
} finally {
|
|
209
|
-
try {
|
|
210
|
-
sub.unsubscribe();
|
|
211
|
-
} catch {
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
})().catch((e) => emitStatus({ status: "error", data: e }));
|
|
215
|
-
return {
|
|
216
|
-
subscription: sub,
|
|
217
|
-
unsubscribe() {
|
|
218
|
-
try {
|
|
219
|
-
abortController.abort();
|
|
220
|
-
} catch {
|
|
221
|
-
}
|
|
222
|
-
try {
|
|
223
|
-
sub.unsubscribe();
|
|
224
|
-
} catch {
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
function subscribeString(subject, onMessage, opts) {
|
|
230
|
-
return subscribeBytes(
|
|
231
|
-
subject,
|
|
232
|
-
async (msg) => {
|
|
233
|
-
const nats = await importNats();
|
|
234
|
-
const sc = nats.StringCodec();
|
|
235
|
-
await onMessage(sc.decode(msg.data), msg);
|
|
236
|
-
},
|
|
237
|
-
opts
|
|
238
|
-
);
|
|
239
|
-
}
|
|
240
|
-
function subscribeJson(subject, onMessage, opts) {
|
|
241
|
-
return subscribeBytes(
|
|
242
|
-
subject,
|
|
243
|
-
async (msg) => {
|
|
244
|
-
const nats = await importNats();
|
|
245
|
-
const jc = nats.JSONCodec();
|
|
246
|
-
await onMessage(jc.decode(msg.data), msg);
|
|
247
|
-
},
|
|
248
|
-
opts
|
|
249
|
-
);
|
|
250
|
-
}
|
|
251
|
-
async function subscribeJetStreamOrdered(onMessage, opts) {
|
|
252
|
-
const conn = requireConnection();
|
|
253
|
-
if (opts.signal?.aborted) {
|
|
254
|
-
return { unsubscribe() {
|
|
255
|
-
} };
|
|
256
|
-
}
|
|
257
|
-
const nats = await importNats();
|
|
258
|
-
if (opts.signal?.aborted) {
|
|
259
|
-
return { unsubscribe() {
|
|
260
|
-
} };
|
|
261
|
-
}
|
|
262
|
-
const inactiveThresholdNs = (opts.inactiveThresholdMs ?? 5 * 6e4) * 1e6;
|
|
263
|
-
const js = conn.jetstream();
|
|
264
|
-
const consumer = await js.consumers.get(opts.streamName, {
|
|
265
|
-
filterSubjects: opts.filterSubject,
|
|
266
|
-
deliver_policy: nats.DeliverPolicy.StartSequence,
|
|
267
|
-
opt_start_seq: opts.optStartSeq ?? 0,
|
|
268
|
-
inactive_threshold: inactiveThresholdNs
|
|
269
|
-
});
|
|
270
|
-
const iterRef = { current: null };
|
|
271
|
-
let closed = false;
|
|
272
|
-
const onAbort = () => {
|
|
273
|
-
void teardown();
|
|
274
|
-
};
|
|
275
|
-
opts.signal?.addEventListener("abort", onAbort, { once: true });
|
|
276
|
-
async function teardown() {
|
|
277
|
-
if (closed) return;
|
|
278
|
-
closed = true;
|
|
279
|
-
opts.signal?.removeEventListener("abort", onAbort);
|
|
280
|
-
const iter = iterRef.current;
|
|
281
|
-
iterRef.current = null;
|
|
282
|
-
if (iter) {
|
|
283
|
-
try {
|
|
284
|
-
await iter.close();
|
|
285
|
-
} catch {
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
if (opts.signal?.aborted) {
|
|
290
|
-
void teardown();
|
|
291
|
-
return { unsubscribe() {
|
|
292
|
-
} };
|
|
293
|
-
}
|
|
294
|
-
(async () => {
|
|
295
|
-
try {
|
|
296
|
-
const iter = await consumer.consume();
|
|
297
|
-
if (closed) {
|
|
298
|
-
try {
|
|
299
|
-
await iter.close();
|
|
300
|
-
} catch {
|
|
301
|
-
}
|
|
302
|
-
return;
|
|
303
|
-
}
|
|
304
|
-
iterRef.current = iter;
|
|
305
|
-
for await (const msg of iter) {
|
|
306
|
-
if (closed) break;
|
|
307
|
-
try {
|
|
308
|
-
await onMessage(msg);
|
|
309
|
-
} catch (e) {
|
|
310
|
-
emitStatus({ status: "error", data: e });
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
} catch (e) {
|
|
314
|
-
if (!closed) emitStatus({ status: "error", data: e });
|
|
315
|
-
}
|
|
316
|
-
})().catch((e) => emitStatus({ status: "error", data: e }));
|
|
317
|
-
return {
|
|
318
|
-
unsubscribe() {
|
|
319
|
-
void teardown();
|
|
320
|
-
}
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
function onStatus(listener) {
|
|
324
|
-
statusListeners.add(listener);
|
|
325
|
-
return () => statusListeners.delete(listener);
|
|
326
|
-
}
|
|
327
|
-
return {
|
|
328
|
-
connect,
|
|
329
|
-
close,
|
|
330
|
-
isConnected,
|
|
331
|
-
publishBytes,
|
|
332
|
-
publishString,
|
|
333
|
-
publishJson,
|
|
334
|
-
requestBytes,
|
|
335
|
-
requestString,
|
|
336
|
-
requestJson,
|
|
337
|
-
subscribeBytes,
|
|
338
|
-
subscribeString,
|
|
339
|
-
subscribeJson,
|
|
340
|
-
subscribeJetStreamOrdered,
|
|
341
|
-
onStatus
|
|
342
|
-
};
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
export { createNatsClient };
|
|
346
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
NATS_DEFAULTS,
|
|
4
|
+
NatsProvider,
|
|
5
|
+
acquireClient,
|
|
6
|
+
createNatsClient,
|
|
7
|
+
getSharedConnection,
|
|
8
|
+
getSharedConnectionFor,
|
|
9
|
+
releaseClient,
|
|
10
|
+
startConnectionLifecycle,
|
|
11
|
+
useNats,
|
|
12
|
+
useNatsJsonSubscription,
|
|
13
|
+
useNatsSubscription,
|
|
14
|
+
useOptionalNats
|
|
15
|
+
} from "../chunk-CZR7ARBA.js";
|
|
16
|
+
import "../chunk-GGWZFCYS.js";
|
|
17
|
+
export {
|
|
18
|
+
NATS_DEFAULTS,
|
|
19
|
+
NatsProvider,
|
|
20
|
+
acquireClient,
|
|
21
|
+
createNatsClient,
|
|
22
|
+
getSharedConnection,
|
|
23
|
+
getSharedConnectionFor,
|
|
24
|
+
releaseClient,
|
|
25
|
+
startConnectionLifecycle,
|
|
26
|
+
useNats,
|
|
27
|
+
useNatsJsonSubscription,
|
|
28
|
+
useNatsSubscription,
|
|
29
|
+
useOptionalNats
|
|
30
|
+
};
|
|
347
31
|
//# sourceMappingURL=index.js.map
|
package/dist/nats/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/nats/nats.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type {\n ConnectionOptions,\n Consumer,\n ConsumerMessages,\n JsMsg,\n MsgHdrs as NatsHeaders,\n Msg,\n NatsConnection,\n Subscription,\n} from 'nats.ws'\n\nexport type JetStreamDeliverPolicy = 'new' | 'byStartSequence'\n\nexport interface JetStreamOrderedSubscribeOptions {\n streamName: string\n filterSubject: string\n deliverPolicy: JetStreamDeliverPolicy\n /** Required when deliverPolicy === 'byStartSequence'. */\n optStartSeq?: number\n /** Auto-cleanup the ephemeral consumer after this idle time. Default: 5 minutes. */\n inactiveThresholdMs?: number\n /** AbortSignal to tear down the consumer. */\n signal?: AbortSignal\n}\n\nexport interface JetStreamSubscriptionHandle {\n unsubscribe(): void\n}\n\nexport interface NatsClientOptions {\n /**\n * NATS server URL(s), for example:\n * - \"wss://nats.example.com:443\"\n * - [\"wss://nats-1.example.com:443\", \"wss://nats-2.example.com:443\"]\n */\n servers: string | string[]\n\n /**\n * Connection name (shows up in NATS monitoring).\n */\n name?: string\n\n /**\n * Auth options (pick one: token or user/pass).\n */\n token?: string\n user?: string\n pass?: string\n\n /**\n * Reconnect behavior.\n */\n reconnect?: boolean\n maxReconnectAttempts?: number\n reconnectTimeWaitMs?: number\n\n /**\n * Exponential backoff for reconnect delays.\n * When set, uses `reconnectDelayHandler` from nats.ws under the hood,\n * overriding `reconnectTimeWaitMs`.\n */\n exponentialBackoff?: {\n /** Initial delay in ms (default: 1000) */\n initialDelayMs?: number\n /** Maximum delay cap in ms (default: 30000) */\n maxDelayMs?: number\n /** Multiplier per attempt (default: 2) */\n multiplier?: number\n /** Add random jitter 0-50% of delay to prevent thundering herd (default: true) */\n jitter?: boolean\n }\n\n /**\n * Ping behavior (keep-alive).\n */\n pingIntervalMs?: number\n maxPingOut?: number\n\n /**\n * Optional inbox prefix (useful if you want to isolate request/reply inboxes).\n */\n inboxPrefix?: string\n\n /**\n * Connection timeout in milliseconds (maps to `nats.ws` connect option `timeout`).\n * If you see `NatsError: TIMEOUT` during connect, increase this.\n */\n connectTimeoutMs?: number\n}\n\nexport interface NatsSubscribeOptions {\n /**\n * Queue group for load-balancing messages across subscribers.\n */\n queue?: string\n\n /**\n * Auto-unsubscribe after receiving this many messages.\n */\n max?: number\n\n /**\n * Abort signal to stop message iteration and unsubscribe.\n */\n signal?: AbortSignal\n}\n\nexport type NatsHeadersInit = Record<string, string> | NatsHeaders | undefined\n\nexport interface NatsPublishOptions {\n headers?: NatsHeadersInit\n}\n\nexport interface NatsRequestOptions {\n timeoutMs?: number\n headers?: NatsHeadersInit\n}\n\nexport interface NatsSubscriptionHandle {\n readonly subscription: Subscription\n unsubscribe(): void\n}\n\nexport type NatsStatus =\n | 'connecting'\n | 'connected'\n | 'disconnected'\n | 'reconnecting'\n | 'closed'\n | 'error'\n\nexport interface NatsStatusEvent {\n status: NatsStatus\n data?: unknown\n}\n\nexport interface NatsClient {\n connect(): Promise<void>\n close(): Promise<void>\n\n isConnected(): boolean\n\n publishBytes(subject: string, payload: Uint8Array, options?: NatsPublishOptions): void\n publishString(subject: string, payload: string, options?: NatsPublishOptions): void\n publishJson<T>(subject: string, payload: T, options?: NatsPublishOptions): void\n\n requestBytes(subject: string, payload: Uint8Array, options?: NatsRequestOptions): Promise<Msg>\n requestString(subject: string, payload: string, options?: NatsRequestOptions): Promise<string>\n requestJson<TResponse, TRequest = unknown>(\n subject: string,\n payload: TRequest,\n options?: NatsRequestOptions,\n ): Promise<TResponse>\n\n subscribeBytes(\n subject: string,\n onMessage: (msg: Msg) => void | Promise<void>,\n options?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle\n subscribeString(\n subject: string,\n onMessage: (payload: string, msg: Msg) => void | Promise<void>,\n options?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle\n subscribeJson<T>(\n subject: string,\n onMessage: (payload: T, msg: Msg) => void | Promise<void>,\n options?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle\n\n /**\n * Subscribe to a JetStream subject via an ephemeral OrderedConsumer (no acks).\n * Use `optStartSeq` with `deliverPolicy: 'byStartSequence'` to resume from a known offset,\n * or `deliverPolicy: 'new'` to live-tail.\n */\n subscribeJetStreamOrdered(\n onMessage: (msg: JsMsg) => void | Promise<void>,\n options: JetStreamOrderedSubscribeOptions,\n ): Promise<JetStreamSubscriptionHandle>\n\n onStatus(listener: (event: NatsStatusEvent) => void): () => void\n}\n\nfunction assertClientSide(): void {\n // This wrapper is meant for browser/Tauri usage via WebSockets.\n // Keep it safe to import from Next.js server bundles by throwing only when used.\n if (typeof window === 'undefined') {\n throw new Error('NATS client can only connect from the browser/runtime with WebSocket support (window is undefined).')\n }\n}\n\nasync function importNats(): Promise<typeof import('nats.ws')> {\n // Browser/Tauri only: always use the websocket client (no Node-only deps).\n return await import('nats.ws')\n}\n\nfunction toNatsHeaders(nats: typeof import('nats.ws'), init: NatsHeadersInit): NatsHeaders | undefined {\n if (!init) return undefined\n if (typeof (init as NatsHeaders).get === 'function') return init as NatsHeaders\n\n const h = nats.headers()\n for (const [k, v] of Object.entries(init as Record<string, string>)) {\n if (v !== undefined && v !== null) h.set(k, String(v))\n }\n return h\n}\n\n/** Returns a cryptographically random float in [0, 1). */\nfunction cryptoRandom(): number {\n const buf = new Uint32Array(1)\n crypto.getRandomValues(buf)\n return buf[0] / (0xffffffff + 1)\n}\n\ninterface ExponentialBackoffHandle {\n handler: () => number\n reset: () => void\n}\n\nfunction createExponentialBackoffHandler(opts: NonNullable<NatsClientOptions['exponentialBackoff']>): ExponentialBackoffHandle {\n const initialDelay = opts.initialDelayMs ?? 1000\n const maxDelay = opts.maxDelayMs ?? 30_000\n const multiplier = opts.multiplier ?? 2\n const jitter = opts.jitter ?? true\n\n let attempt = 0\n\n return {\n handler: (): number => {\n const delay = Math.min(initialDelay * multiplier ** attempt, maxDelay)\n attempt++\n return jitter ? delay * (0.5 + cryptoRandom() * 0.5) : delay\n },\n reset: () => {\n attempt = 0\n },\n }\n}\n\nfunction mapOptionsToConnectionOptions(\n opts: NatsClientOptions,\n backoff?: ExponentialBackoffHandle,\n): ConnectionOptions {\n return {\n servers: opts.servers,\n name: opts.name,\n token: opts.token,\n user: opts.user,\n pass: opts.pass,\n timeout: opts.connectTimeoutMs ?? 15000,\n reconnect: opts.reconnect ?? true,\n maxReconnectAttempts: opts.maxReconnectAttempts,\n reconnectTimeWait: opts.reconnectTimeWaitMs,\n reconnectDelayHandler: backoff?.handler,\n pingInterval: opts.pingIntervalMs,\n maxPingOut: opts.maxPingOut,\n inboxPrefix: opts.inboxPrefix,\n }\n}\n\nfunction mapNatsTypeToStatus(type: unknown): NatsStatus | null {\n const t = String(type).toLowerCase()\n if (t.includes('disconnect')) return 'disconnected'\n if (t === 'reconnecting') return 'reconnecting'\n if (t === 'reconnect' || t.includes('connect')) return 'connected'\n if (t.includes('error')) return 'error'\n if (t.includes('close')) return 'closed'\n return null\n}\n\nexport function createNatsClient(options: NatsClientOptions): NatsClient {\n let nc: NatsConnection | null = null\n let statusLoopAbort: AbortController | null = null\n let connectInFlight: Promise<void> | null = null\n\n const backoff = options.exponentialBackoff\n ? createExponentialBackoffHandler(options.exponentialBackoff)\n : undefined\n\n const statusListeners = new Set<(event: NatsStatusEvent) => void>()\n\n function emitStatus(event: NatsStatusEvent) {\n for (const listener of statusListeners) {\n try {\n listener(event)\n } catch {\n // ignore listener failures\n }\n }\n }\n\n async function connect(): Promise<void> {\n if (nc && !nc.isClosed()) return\n if (connectInFlight) return connectInFlight\n assertClientSide()\n\n connectInFlight = (async () => {\n try {\n emitStatus({ status: 'connecting' })\n\n const nats = await importNats()\n const conn = await nats.connect(mapOptionsToConnectionOptions(options, backoff))\n nc = conn\n\n emitStatus({ status: 'connected' })\n\n statusLoopAbort = new AbortController()\n const signal = statusLoopAbort.signal\n\n ;(async () => {\n try {\n for await (const s of conn.status()) {\n if (signal.aborted) return\n const mapped = mapNatsTypeToStatus((s as any)?.type)\n if (mapped) {\n if (mapped === 'connected' && backoff) {\n backoff.reset()\n }\n emitStatus({ status: mapped, data: (s as any)?.data })\n if (mapped === 'closed') {\n nc = null\n }\n }\n }\n } catch (e) {\n if (!signal.aborted) {\n emitStatus({ status: 'error', data: e })\n nc = null\n }\n }\n })().catch(() => {\n // ignore\n })\n } finally {\n connectInFlight = null\n }\n })()\n\n return connectInFlight\n }\n\n async function close(): Promise<void> {\n const conn = nc\n nc = null\n\n if (statusLoopAbort) {\n try {\n statusLoopAbort.abort()\n } catch {\n // ignore\n }\n statusLoopAbort = null\n }\n\n if (!conn) return\n try {\n await conn.drain()\n } finally {\n try {\n await conn.close()\n } finally {\n emitStatus({ status: 'closed' })\n }\n }\n }\n\n function requireConnection(): NatsConnection {\n if (!nc) throw new Error('NATS is not connected. Call client.connect() first.')\n return nc\n }\n\n function isConnected(): boolean {\n return Boolean(nc) && !nc!.isClosed()\n }\n\n function publishBytes(subject: string, payload: Uint8Array, opts?: NatsPublishOptions): void {\n const conn = requireConnection()\n ;(async () => {\n const nats = await importNats()\n conn.publish(subject, payload, { headers: toNatsHeaders(nats, opts?.headers) })\n })().catch((e) => emitStatus({ status: 'error', data: e }))\n }\n\n function publishString(subject: string, payload: string, opts?: NatsPublishOptions): void {\n ;(async () => {\n const nats = await importNats()\n const sc = nats.StringCodec()\n publishBytes(subject, sc.encode(payload), opts)\n })().catch((e) => emitStatus({ status: 'error', data: e }))\n }\n\n function publishJson<T>(subject: string, payload: T, opts?: NatsPublishOptions): void {\n ;(async () => {\n const nats = await importNats()\n const jc = nats.JSONCodec<T>()\n publishBytes(subject, jc.encode(payload), opts)\n })().catch((e) => emitStatus({ status: 'error', data: e }))\n }\n\n async function requestBytes(subject: string, payload: Uint8Array, opts?: NatsRequestOptions): Promise<Msg> {\n const conn = requireConnection()\n const nats = await importNats()\n const msg = await conn.request(subject, payload, {\n timeout: opts?.timeoutMs ?? 2000,\n headers: toNatsHeaders(nats, opts?.headers),\n })\n return msg\n }\n\n async function requestString(subject: string, payload: string, opts?: NatsRequestOptions): Promise<string> {\n const nats = await importNats()\n const sc = nats.StringCodec()\n const msg = await requestBytes(subject, sc.encode(payload), opts)\n return sc.decode(msg.data)\n }\n\n async function requestJson<TResponse, TRequest = unknown>(\n subject: string,\n payload: TRequest,\n opts?: NatsRequestOptions,\n ): Promise<TResponse> {\n const nats = await importNats()\n const reqCodec = nats.JSONCodec<TRequest>()\n const resCodec = nats.JSONCodec<TResponse>()\n const msg = await requestBytes(subject, reqCodec.encode(payload), opts)\n return resCodec.decode(msg.data)\n }\n\n function subscribeBytes(\n subject: string,\n onMessage: (msg: Msg) => void | Promise<void>,\n opts?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle {\n const conn = requireConnection()\n const sub = conn.subscribe(subject, { queue: opts?.queue })\n if (typeof opts?.max === 'number') sub.unsubscribe(opts.max)\n\n const abortController = new AbortController()\n const signal = opts?.signal ?? abortController.signal\n\n ;(async () => {\n try {\n for await (const msg of sub) {\n if (signal.aborted) break\n await onMessage(msg)\n }\n } catch (e) {\n emitStatus({ status: 'error', data: e })\n } finally {\n try {\n sub.unsubscribe()\n } catch {\n // ignore\n }\n }\n })().catch((e) => emitStatus({ status: 'error', data: e }))\n\n return {\n subscription: sub,\n unsubscribe() {\n try {\n abortController.abort()\n } catch {\n // ignore\n }\n try {\n sub.unsubscribe()\n } catch {\n // ignore\n }\n },\n }\n }\n\n function subscribeString(\n subject: string,\n onMessage: (payload: string, msg: Msg) => void | Promise<void>,\n opts?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle {\n return subscribeBytes(\n subject,\n async (msg) => {\n const nats = await importNats()\n const sc = nats.StringCodec()\n await onMessage(sc.decode(msg.data), msg)\n },\n opts,\n )\n }\n\n function subscribeJson<T>(\n subject: string,\n onMessage: (payload: T, msg: Msg) => void | Promise<void>,\n opts?: NatsSubscribeOptions,\n ): NatsSubscriptionHandle {\n return subscribeBytes(\n subject,\n async (msg) => {\n const nats = await importNats()\n const jc = nats.JSONCodec<T>()\n await onMessage(jc.decode(msg.data), msg)\n },\n opts,\n )\n }\n\n async function subscribeJetStreamOrdered(\n onMessage: (msg: JsMsg) => void | Promise<void>,\n opts: JetStreamOrderedSubscribeOptions,\n ): Promise<JetStreamSubscriptionHandle> {\n const conn = requireConnection()\n if (opts.signal?.aborted) {\n return { unsubscribe() {} }\n }\n\n const nats = await importNats()\n if (opts.signal?.aborted) {\n return { unsubscribe() {} }\n }\n\n const inactiveThresholdNs =\n (opts.inactiveThresholdMs ?? 5 * 60_000) * 1_000_000\n\n const js = conn.jetstream()\n const consumer: Consumer = await js.consumers.get(opts.streamName, {\n filterSubjects: opts.filterSubject,\n deliver_policy: nats.DeliverPolicy.StartSequence,\n opt_start_seq: opts.optStartSeq ?? 0,\n inactive_threshold: inactiveThresholdNs,\n })\n\n const iterRef: { current: ConsumerMessages | null } = { current: null }\n let closed = false\n\n const onAbort = () => {\n void teardown()\n }\n opts.signal?.addEventListener('abort', onAbort, { once: true })\n\n async function teardown(): Promise<void> {\n if (closed) return\n closed = true\n opts.signal?.removeEventListener('abort', onAbort)\n const iter = iterRef.current\n iterRef.current = null\n if (iter) {\n try {\n await iter.close()\n } catch {\n // ignore\n }\n }\n }\n\n if (opts.signal?.aborted) {\n void teardown()\n return { unsubscribe() {} }\n }\n\n ;(async () => {\n try {\n const iter = await consumer.consume()\n if (closed) {\n try {\n await iter.close()\n } catch {\n // ignore\n }\n return\n }\n iterRef.current = iter\n for await (const msg of iter) {\n if (closed) break\n try {\n await onMessage(msg)\n } catch (e) {\n emitStatus({ status: 'error', data: e })\n }\n }\n } catch (e) {\n if (!closed) emitStatus({ status: 'error', data: e })\n }\n })().catch((e) => emitStatus({ status: 'error', data: e }))\n\n return {\n unsubscribe() {\n void teardown()\n },\n }\n }\n\n function onStatus(listener: (event: NatsStatusEvent) => void): () => void {\n statusListeners.add(listener)\n return () => statusListeners.delete(listener)\n }\n\n return {\n connect,\n close,\n isConnected,\n publishBytes,\n publishString,\n publishJson,\n requestBytes,\n requestString,\n requestJson,\n subscribeBytes,\n subscribeString,\n subscribeJson,\n subscribeJetStreamOrdered,\n onStatus,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { NatsClient, NatsStatus } from './nats';
|
|
3
|
+
import { type AcquireClientOptions, type NatsReconnectionBackoff } from './shared-connection';
|
|
4
|
+
export type { NatsReconnectionBackoff } from './shared-connection';
|
|
5
|
+
export interface NatsProviderProps {
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
/** Return the current NATS WebSocket URL (or null when not yet available, e.g. unauthenticated). */
|
|
8
|
+
getWsUrl: () => string | null;
|
|
9
|
+
/** Called before each reconnect attempt. */
|
|
10
|
+
onBeforeReconnect?: () => Promise<void> | void;
|
|
11
|
+
clientConfig?: AcquireClientOptions;
|
|
12
|
+
reconnectionBackoff?: NatsReconnectionBackoff;
|
|
13
|
+
/**
|
|
14
|
+
* Bump this to force re-evaluating `getWsUrl()` (e.g. when auth state flips).
|
|
15
|
+
* Provider does not subscribe to external auth state by itself.
|
|
16
|
+
*/
|
|
17
|
+
urlRevision?: unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface NatsContextValue {
|
|
20
|
+
client: NatsClient | null;
|
|
21
|
+
status: NatsStatus;
|
|
22
|
+
isReady: boolean;
|
|
23
|
+
reconnectionCount: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function NatsProvider({ children, getWsUrl, onBeforeReconnect, clientConfig, reconnectionBackoff, urlRevision, }: NatsProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export declare function useNats(): NatsContextValue;
|
|
27
|
+
export declare function useOptionalNats(): NatsContextValue | null;
|
|
28
|
+
//# sourceMappingURL=nats-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nats-provider.d.ts","sourceRoot":"","sources":["../../src/nats/nats-provider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,qBAAqB,CAAA;AAE5B,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAElE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,oGAAoG;IACpG,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC7B,4CAA4C;IAC5C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC9C,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,mBAAmB,CAAC,EAAE,uBAAuB,CAAA;IAC7C;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAID,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,WAAW,GACZ,EAAE,iBAAiB,2CA0FnB;AAED,wBAAgB,OAAO,IAAI,gBAAgB,CAI1C;AAED,wBAAgB,eAAe,IAAI,gBAAgB,GAAG,IAAI,CAEzD"}
|
package/dist/nats/nats.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { JsMsg, MsgHdrs as NatsHeaders, Msg, Subscription } from 'nats.ws';
|
|
2
|
+
export type { JsMsg, Msg, Subscription } from 'nats.ws';
|
|
2
3
|
export type JetStreamDeliverPolicy = 'new' | 'byStartSequence';
|
|
3
4
|
export interface JetStreamOrderedSubscribeOptions {
|
|
4
5
|
streamName: string;
|
package/dist/nats/nats.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nats.d.ts","sourceRoot":"","sources":["../../src/nats/nats.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nats.d.ts","sourceRoot":"","sources":["../../src/nats/nats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { type NatsClient, type NatsStatus, type NatsStatusEvent } from './nats';
|
|
2
|
+
export declare const NATS_DEFAULTS: {
|
|
3
|
+
readonly SHARED_CLOSE_DELAY_MS: 3000;
|
|
4
|
+
readonly CONNECT_TIMEOUT_MS: 10000;
|
|
5
|
+
readonly PING_INTERVAL_MS: 30000;
|
|
6
|
+
readonly MAX_PING_OUT: 3;
|
|
7
|
+
readonly RETRY_INITIAL_DELAY_MS: 1000;
|
|
8
|
+
readonly RETRY_MAX_DELAY_MS: 30000;
|
|
9
|
+
readonly RETRY_MULTIPLIER: 2;
|
|
10
|
+
};
|
|
11
|
+
export interface NatsReconnectionBackoff {
|
|
12
|
+
/** Number of fast retries before exponential phase kicks in. Default: 0. */
|
|
13
|
+
fastRetries?: number;
|
|
14
|
+
/** Delay used during the fast-retry phase. Default: RETRY_INITIAL_DELAY_MS. */
|
|
15
|
+
fastRetryDelayMs?: number;
|
|
16
|
+
/** Base delay for the exponential phase. Default: RETRY_INITIAL_DELAY_MS. */
|
|
17
|
+
initialDelayMs?: number;
|
|
18
|
+
/** Upper cap on any single retry delay. Default: RETRY_MAX_DELAY_MS. */
|
|
19
|
+
maxDelayMs?: number;
|
|
20
|
+
/** Per-attempt multiplier during exponential phase. Default: RETRY_MULTIPLIER. */
|
|
21
|
+
multiplier?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SharedConnection {
|
|
24
|
+
wsUrl: string;
|
|
25
|
+
client: NatsClient;
|
|
26
|
+
connectPromise: Promise<void> | null;
|
|
27
|
+
refCount: number;
|
|
28
|
+
closeTimer: ReturnType<typeof setTimeout> | null;
|
|
29
|
+
retryTimer: ReturnType<typeof setTimeout> | null;
|
|
30
|
+
/**
|
|
31
|
+
* Identity of the consumer driving reconnect. When set, other consumers
|
|
32
|
+
* should observe status only and skip their own scheduleRetry — otherwise
|
|
33
|
+
* each disconnect triggers multiple concurrent connect() calls racing over
|
|
34
|
+
* connectPromise.
|
|
35
|
+
*/
|
|
36
|
+
retryOwner: object | null;
|
|
37
|
+
}
|
|
38
|
+
export interface AcquireClientOptions {
|
|
39
|
+
name?: string;
|
|
40
|
+
user?: string;
|
|
41
|
+
pass?: string;
|
|
42
|
+
connectTimeoutMs?: number;
|
|
43
|
+
pingIntervalMs?: number;
|
|
44
|
+
maxPingOut?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface ReleaseClientOptions {
|
|
47
|
+
delayMs?: number;
|
|
48
|
+
}
|
|
49
|
+
export declare function getSharedConnection(): SharedConnection | null;
|
|
50
|
+
export declare function acquireClient(url: string, opts?: AcquireClientOptions): SharedConnection;
|
|
51
|
+
export declare function releaseClient(url: string, opts?: ReleaseClientOptions): void;
|
|
52
|
+
export declare function getSharedConnectionFor(url: string | null | undefined): SharedConnection | null;
|
|
53
|
+
export interface ConnectionLifecycleOptions {
|
|
54
|
+
conn: SharedConnection;
|
|
55
|
+
wsUrl: string;
|
|
56
|
+
onBeforeReconnect?: () => Promise<void> | void;
|
|
57
|
+
backoff?: NatsReconnectionBackoff;
|
|
58
|
+
getFreshUrl: () => string | null;
|
|
59
|
+
/** Called on every status change (after closed-guard). */
|
|
60
|
+
onStatusChange?: (status: NatsStatus, evt: NatsStatusEvent) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Decide which statuses should trigger a retry attempt. Defaults to closed +
|
|
63
|
+
* disconnected. Override to skip 'error' (JetStream protocol errors that
|
|
64
|
+
* don't close the WS) or include it.
|
|
65
|
+
*/
|
|
66
|
+
shouldRetryOn?: (status: NatsStatus) => boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface ConnectionLifecycleHandle {
|
|
69
|
+
/** Stop observing status, clear any pending retry, release ownership if held. */
|
|
70
|
+
stop(): void;
|
|
71
|
+
}
|
|
72
|
+
export declare function startConnectionLifecycle(options: ConnectionLifecycleOptions): ConnectionLifecycleHandle;
|
|
73
|
+
//# sourceMappingURL=shared-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-connection.d.ts","sourceRoot":"","sources":["../../src/nats/shared-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAA;AAEjG,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAA;AAEV,MAAM,WAAW,uBAAuB;IACtC,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,UAAU,CAAA;IAClB,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IACpC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;IAChD,UAAU,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAA;IAChD;;;;;OAKG;IACH,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAID,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CA8CxF;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAkB5E;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAG9F;AAWD,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,gBAAgB,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC9C,OAAO,CAAC,EAAE,uBAAuB,CAAA;IACjC,WAAW,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAChC,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,eAAe,KAAK,IAAI,CAAA;IACnE;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAA;CAChD;AAED,MAAM,WAAW,yBAAyB;IACxC,iFAAiF;IACjF,IAAI,IAAI,IAAI,CAAA;CACb;AAID,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,yBAAyB,CAuHvG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { JsMsg, Msg, NatsSubscribeOptions } from './nats';
|
|
2
|
+
export interface UseNatsSubscriptionOptions extends NatsSubscribeOptions {
|
|
3
|
+
enabled?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface UseNatsSubscriptionReturn {
|
|
6
|
+
isSubscribed: boolean;
|
|
7
|
+
isReady: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Subscribe to a NATS subject using the shared connection from <NatsProvider>.
|
|
11
|
+
* Automatically (re)subscribes when the connection becomes ready, when the
|
|
12
|
+
* subject changes, and after reconnections.
|
|
13
|
+
*/
|
|
14
|
+
export declare function useNatsSubscription(subject: string | null, onMessage: (msg: Msg) => void | Promise<void>, options?: UseNatsSubscriptionOptions): UseNatsSubscriptionReturn;
|
|
15
|
+
export type UseNatsJsonSubscriptionOptions = UseNatsSubscriptionOptions;
|
|
16
|
+
export declare function useNatsJsonSubscription<T = unknown>(subject: string | null, onPayload: (payload: T, msg: Msg) => void | Promise<void>, options?: UseNatsJsonSubscriptionOptions): UseNatsSubscriptionReturn;
|
|
17
|
+
export type NatsJsMsg = JsMsg;
|
|
18
|
+
//# sourceMappingURL=use-nats-subscription.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-nats-subscription.d.ts","sourceRoot":"","sources":["../../src/nats/use-nats-subscription.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAA;AAG9D,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC7C,OAAO,CAAC,EAAE,0BAA0B,GACnC,yBAAyB,CAyC3B;AAED,MAAM,MAAM,8BAA8B,GAAG,0BAA0B,CAAA;AAEvE,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EACjD,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACzD,OAAO,CAAC,EAAE,8BAA8B,GACvC,yBAAyB,CAuB3B;AAED,MAAM,MAAM,SAAS,GAAG,KAAK,CAAA"}
|