@memori.ai/memori-react 8.40.4 → 8.41.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
 
2
2
 
3
+ ## [8.41.0](https://github.com/memori-ai/memori-react/compare/v8.40.4...v8.41.0) (2026-06-22)
4
+
5
+
6
+ ### Features
7
+
8
+ * integrate JetStream support in NATS configuration and session handling ([d133c95](https://github.com/memori-ai/memori-react/commit/d133c95fc9385a7e06875dadcc6ea9be444f3868))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * update NATS subject default value to include session ID format ([dc0e7ea](https://github.com/memori-ai/memori-react/commit/dc0e7ea0a1c0eba5fb8f834df3ef55d598e05166))
14
+
3
15
  ## [8.40.4](https://github.com/memori-ai/memori-react/compare/v8.40.3...v8.40.4) (2026-06-19)
4
16
 
5
17
 
@@ -1,5 +1,9 @@
1
1
  export interface NatsConfig {
2
2
  url: string;
3
3
  token: string;
4
+ stream?: string;
5
+ consumer?: string;
6
+ subject?: string;
4
7
  }
8
+ export declare function parseNatsConfig(raw: Record<string, unknown>): NatsConfig;
5
9
  export declare function getNatsConfig(baseUrl: string, sessionId: string, signal?: AbortSignal): Promise<NatsConfig>;
@@ -1,6 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getNatsConfig = void 0;
3
+ exports.getNatsConfig = exports.parseNatsConfig = void 0;
4
+ function readStringField(raw, ...keys) {
5
+ for (const key of keys) {
6
+ const value = raw[key];
7
+ if (typeof value === 'string' && value.length > 0) {
8
+ return value;
9
+ }
10
+ }
11
+ return undefined;
12
+ }
13
+ function readBooleanField(raw, ...keys) {
14
+ for (const key of keys) {
15
+ const value = raw[key];
16
+ if (typeof value === 'boolean') {
17
+ return value;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ function parseNatsConfig(raw) {
23
+ const url = readStringField(raw, 'url');
24
+ const token = readStringField(raw, 'token');
25
+ if (!url || !token) {
26
+ throw new Error('Invalid response from NATS config service');
27
+ }
28
+ const useJetStream = readBooleanField(raw, 'useJetStream', 'use_jetstream');
29
+ const stream = readStringField(raw, 'stream', 'streamName', 'stream_name');
30
+ const consumer = readStringField(raw, 'consumer', 'consumerName', 'consumer_name', 'durableName', 'durable_name');
31
+ const subject = readStringField(raw, 'subject', 'filterSubject', 'filter_subject');
32
+ if (useJetStream && !stream) {
33
+ throw new Error('Invalid response from NATS config service: JetStream enabled but stream missing');
34
+ }
35
+ return {
36
+ url,
37
+ token,
38
+ ...(stream ? { stream } : {}),
39
+ ...(consumer ? { consumer } : {}),
40
+ ...(subject ? { subject } : {}),
41
+ };
42
+ }
43
+ exports.parseNatsConfig = parseNatsConfig;
4
44
  async function getNatsConfig(baseUrl, sessionId, signal) {
5
45
  if (!sessionId) {
6
46
  throw new Error('Missing sessionId for NATS config request');
@@ -20,10 +60,7 @@ async function getNatsConfig(baseUrl, sessionId, signal) {
20
60
  }
21
61
  }
22
62
  const data = (await response.json());
23
- if (!data.url || !data.token) {
24
- throw new Error('Invalid response from NATS config service');
25
- }
26
- return { url: data.url, token: data.token };
63
+ return parseNatsConfig(data);
27
64
  }
28
65
  exports.getNatsConfig = getNatsConfig;
29
66
  //# sourceMappingURL=getNatsConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getNatsConfig.js","sourceRoot":"","sources":["../../../src/helpers/nats/getNatsConfig.ts"],"names":[],"mappings":";;;AAwBO,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,SAAiB,EACjB,MAAoB;IAEpB,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,uBAAuB,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAChE,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAU,CAAA,CAAC,CAAC;QAEjE,QAAQ,QAAQ,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,sCAAsC,CAC1D,CAAC;YACJ,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,oCAAoC,CACxD,CAAC;YACJ,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,+CAA+C,CACnE,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAC3D,CAAC;SACL;KACF;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;IAE5D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC;AA5CD,sCA4CC"}
1
+ {"version":3,"file":"getNatsConfig.js","sourceRoot":"","sources":["../../../src/helpers/nats/getNatsConfig.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,11 @@ function useNats({ baseUrl, sessionId, onProgress, onDialogResponse, onError, })
28
28
  (0, getNatsConfig_1.getNatsConfig)(baseUrl, sessionId, controller.signal)
29
29
  .then(cfg => {
30
30
  if (!cancelled) {
31
- console.info('[NATS] config received, server url:', cfg.url);
31
+ console.info('[NATS] config received', {
32
+ url: cfg.url,
33
+ jetStream: !!cfg.stream,
34
+ stream: cfg.stream,
35
+ });
32
36
  setConfig(cfg);
33
37
  setConfigError(null);
34
38
  }
@@ -62,7 +66,7 @@ function useNats({ baseUrl, sessionId, onProgress, onDialogResponse, onError, })
62
66
  console.warn('Unknown NATS event', event);
63
67
  }
64
68
  }, []);
65
- (0, useNatsSession_1.useNatsSession)(sessionId, config === null || config === void 0 ? void 0 : config.url, config === null || config === void 0 ? void 0 : config.token, handleMessage);
69
+ (0, useNatsSession_1.useNatsSession)(sessionId, config !== null && config !== void 0 ? config : undefined, handleMessage);
66
70
  return {
67
71
  connected: !!config,
68
72
  configError,
@@ -1 +1 @@
1
- {"version":3,"file":"useNats.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNats.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNats.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { NatsConfig } from './getNatsConfig';
1
2
  export interface NatsProgressEvent {
2
3
  eventType: 'progress';
3
4
  jobId?: string;
@@ -24,4 +25,4 @@ export interface NatsErrorEvent {
24
25
  }
25
26
  export type NatsSessionEvent = NatsProgressEvent | NatsDialogResponseEvent | NatsErrorEvent;
26
27
  export declare function normalizeNatsEvent(raw: Record<string, unknown>): NatsSessionEvent;
27
- export declare function useNatsSession(sessionId: string | undefined, natsWsUrl: string | undefined, natsToken: string | undefined, onMessage: (event: NatsSessionEvent) => void): void;
28
+ export declare function useNatsSession(sessionId: string | undefined, config: NatsConfig | undefined, onMessage: (event: NatsSessionEvent) => void): void;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useNatsSession = exports.normalizeNatsEvent = void 0;
4
4
  const react_1 = require("react");
5
5
  const nats_core_1 = require("@nats-io/nats-core");
6
+ const jetstream_1 = require("@nats-io/jetstream");
6
7
  function readString(raw, camelKey, snakeKey) {
7
8
  var _a;
8
9
  const value = (_a = raw[camelKey]) !== null && _a !== void 0 ? _a : raw[snakeKey];
@@ -61,24 +62,123 @@ function normalizeNatsEvent(raw) {
61
62
  };
62
63
  }
63
64
  exports.normalizeNatsEvent = normalizeNatsEvent;
64
- function useNatsSession(sessionId, natsWsUrl, natsToken, onMessage) {
65
+ function decodeMessage(subject, received, raw, onMessage) {
66
+ const payload = normalizeNatsEvent(raw);
67
+ console.debug(`[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`, payload);
68
+ onMessage(payload);
69
+ }
70
+ async function consumeCoreSubscription(nc, subject, onMessage) {
71
+ const sub = nc.subscribe(subject);
72
+ console.info('[NATS] subscribed to subject', subject);
73
+ let received = 0;
74
+ for await (const msg of sub) {
75
+ received += 1;
76
+ try {
77
+ decodeMessage(subject, received, msg.json(), onMessage);
78
+ }
79
+ catch (err) {
80
+ console.error('[NATS] message decode error', err);
81
+ }
82
+ }
83
+ console.info(`[NATS] subscription on ${subject} closed (received ${received} messages)`);
84
+ }
85
+ async function consumeJetStream(nc, config, subject, mode, onMessage, setConsumerMessages) {
86
+ const js = (0, jetstream_1.jetstream)(nc);
87
+ const consumer = config.consumer
88
+ ? await js.consumers.get(config.stream, config.consumer)
89
+ : await js.consumers.get(config.stream, {
90
+ filter_subjects: [subject],
91
+ deliver_policy: mode === 'catch-up'
92
+ ? jetstream_1.DeliverPolicy.LastPerSubject
93
+ : jetstream_1.DeliverPolicy.New,
94
+ });
95
+ console.info('[NATS] JetStream consumer ready', config.consumer
96
+ ? { stream: config.stream, consumer: config.consumer, subject, mode }
97
+ : { stream: config.stream, subject, mode });
98
+ const messages = await consumer.consume();
99
+ setConsumerMessages(messages);
100
+ let received = 0;
101
+ for await (const msg of messages) {
102
+ received += 1;
103
+ try {
104
+ decodeMessage(subject, received, msg.json(), onMessage);
105
+ }
106
+ catch (err) {
107
+ console.error('[NATS] message decode error', err);
108
+ }
109
+ }
110
+ console.info(`[NATS] JetStream consumer on ${subject} closed (received ${received} messages)`);
111
+ }
112
+ function closeNatsSession(consumerMessagesRef, connRef) {
113
+ var _a, _b;
114
+ (_a = consumerMessagesRef.current) === null || _a === void 0 ? void 0 : _a.stop();
115
+ consumerMessagesRef.current = null;
116
+ (_b = connRef.current) === null || _b === void 0 ? void 0 : _b.close();
117
+ connRef.current = null;
118
+ }
119
+ function useNatsSession(sessionId, config, onMessage) {
65
120
  const connRef = (0, react_1.useRef)(null);
121
+ const consumerMessagesRef = (0, react_1.useRef)(null);
66
122
  const onMessageRef = (0, react_1.useRef)(onMessage);
123
+ const wasHiddenRef = (0, react_1.useRef)(false);
124
+ const [resumeGeneration, setResumeGeneration] = (0, react_1.useState)(0);
67
125
  (0, react_1.useEffect)(() => {
68
126
  onMessageRef.current = onMessage;
69
127
  }, [onMessage]);
70
128
  (0, react_1.useEffect)(() => {
71
- if (!sessionId || !natsWsUrl || !natsToken) {
72
- console.debug('[NATS] subscription skipped (missing sessionId/url/token)', { sessionId, hasUrl: !!natsWsUrl, hasToken: !!natsToken });
129
+ if (!sessionId || !(config === null || config === void 0 ? void 0 : config.stream)) {
130
+ return;
131
+ }
132
+ const requestResume = () => {
133
+ if (document.visibilityState !== 'visible') {
134
+ return;
135
+ }
136
+ console.info('[NATS] resuming JetStream after visibility/network change');
137
+ setResumeGeneration(generation => generation + 1);
138
+ };
139
+ const onVisibilityChange = () => {
140
+ if (document.visibilityState === 'hidden') {
141
+ wasHiddenRef.current = true;
142
+ return;
143
+ }
144
+ if (wasHiddenRef.current) {
145
+ wasHiddenRef.current = false;
146
+ requestResume();
147
+ }
148
+ };
149
+ const onPageShow = (event) => {
150
+ if (event.persisted) {
151
+ requestResume();
152
+ }
153
+ };
154
+ document.addEventListener('visibilitychange', onVisibilityChange);
155
+ window.addEventListener('online', requestResume);
156
+ window.addEventListener('pageshow', onPageShow);
157
+ return () => {
158
+ document.removeEventListener('visibilitychange', onVisibilityChange);
159
+ window.removeEventListener('online', requestResume);
160
+ window.removeEventListener('pageshow', onPageShow);
161
+ };
162
+ }, [sessionId, config === null || config === void 0 ? void 0 : config.stream]);
163
+ (0, react_1.useEffect)(() => {
164
+ var _a;
165
+ if (!sessionId || !(config === null || config === void 0 ? void 0 : config.url) || !config.token) {
166
+ console.debug('[NATS] subscription skipped (missing sessionId/url/token)', {
167
+ sessionId,
168
+ hasUrl: !!(config === null || config === void 0 ? void 0 : config.url),
169
+ hasToken: !!(config === null || config === void 0 ? void 0 : config.token),
170
+ });
73
171
  return;
74
172
  }
75
173
  let closed = false;
76
- const subject = sessionId;
174
+ const subject = (_a = config.subject) !== null && _a !== void 0 ? _a : `sessions.${sessionId}`;
175
+ const useJetStream = !!config.stream;
176
+ const jetStreamMode = useJetStream && resumeGeneration > 0 ? 'catch-up' : 'live';
77
177
  (async () => {
78
- console.info('[NATS] connecting to', natsWsUrl, 'for session', sessionId);
178
+ console.info('[NATS] connecting to', config.url, 'for session', sessionId, useJetStream ? `(JetStream/${jetStreamMode})` : '(core)');
79
179
  const nc = await (0, nats_core_1.wsconnect)({
80
- servers: [natsWsUrl],
81
- token: natsToken,
180
+ servers: [config.url],
181
+ token: config.token,
82
182
  });
83
183
  if (closed) {
84
184
  console.debug('[NATS] connection established after cleanup, closing immediately');
@@ -87,30 +187,27 @@ function useNatsSession(sessionId, natsWsUrl, natsToken, onMessage) {
87
187
  }
88
188
  connRef.current = nc;
89
189
  console.info('[NATS] connected to', nc.getServer());
90
- const sub = nc.subscribe(subject);
91
- console.info('[NATS] subscribed to subject', subject);
92
- let received = 0;
93
- for await (const msg of sub) {
94
- received += 1;
95
- try {
96
- const payload = normalizeNatsEvent(msg.json());
97
- console.debug(`[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`, payload);
98
- onMessageRef.current(payload);
99
- }
100
- catch (err) {
101
- console.error('[NATS] message decode error', err);
102
- }
190
+ const dispatch = (event) => {
191
+ onMessageRef.current(event);
192
+ };
193
+ if (useJetStream) {
194
+ await consumeJetStream(nc, config, subject, jetStreamMode, dispatch, messages => {
195
+ consumerMessagesRef.current = messages;
196
+ });
197
+ }
198
+ else {
199
+ await consumeCoreSubscription(nc, subject, dispatch);
103
200
  }
104
- console.info(`[NATS] subscription on ${subject} closed (received ${received} messages)`);
105
201
  })().catch(err => console.error('[NATS] connection error', err));
106
202
  return () => {
107
- var _a;
108
203
  console.info('[NATS] cleanup: closing connection for subject', subject);
109
204
  closed = true;
110
- (_a = connRef.current) === null || _a === void 0 ? void 0 : _a.close();
111
- connRef.current = null;
205
+ closeNatsSession(consumerMessagesRef, connRef);
112
206
  };
113
- }, [sessionId, natsWsUrl, natsToken]);
207
+ }, [sessionId, config, resumeGeneration]);
208
+ (0, react_1.useEffect)(() => {
209
+ setResumeGeneration(0);
210
+ }, [sessionId]);
114
211
  }
115
212
  exports.useNatsSession = useNatsSession;
116
213
  //# sourceMappingURL=useNatsSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNatsSession.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNatsSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNatsSession.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNatsSession.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "8.40.4";
1
+ export declare const version = "8.41.0";
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '8.40.4';
4
+ exports.version = '8.41.0';
5
5
  //# sourceMappingURL=version.js.map
@@ -1,5 +1,9 @@
1
1
  export interface NatsConfig {
2
2
  url: string;
3
3
  token: string;
4
+ stream?: string;
5
+ consumer?: string;
6
+ subject?: string;
4
7
  }
8
+ export declare function parseNatsConfig(raw: Record<string, unknown>): NatsConfig;
5
9
  export declare function getNatsConfig(baseUrl: string, sessionId: string, signal?: AbortSignal): Promise<NatsConfig>;
@@ -1,3 +1,42 @@
1
+ function readStringField(raw, ...keys) {
2
+ for (const key of keys) {
3
+ const value = raw[key];
4
+ if (typeof value === 'string' && value.length > 0) {
5
+ return value;
6
+ }
7
+ }
8
+ return undefined;
9
+ }
10
+ function readBooleanField(raw, ...keys) {
11
+ for (const key of keys) {
12
+ const value = raw[key];
13
+ if (typeof value === 'boolean') {
14
+ return value;
15
+ }
16
+ }
17
+ return undefined;
18
+ }
19
+ export function parseNatsConfig(raw) {
20
+ const url = readStringField(raw, 'url');
21
+ const token = readStringField(raw, 'token');
22
+ if (!url || !token) {
23
+ throw new Error('Invalid response from NATS config service');
24
+ }
25
+ const useJetStream = readBooleanField(raw, 'useJetStream', 'use_jetstream');
26
+ const stream = readStringField(raw, 'stream', 'streamName', 'stream_name');
27
+ const consumer = readStringField(raw, 'consumer', 'consumerName', 'consumer_name', 'durableName', 'durable_name');
28
+ const subject = readStringField(raw, 'subject', 'filterSubject', 'filter_subject');
29
+ if (useJetStream && !stream) {
30
+ throw new Error('Invalid response from NATS config service: JetStream enabled but stream missing');
31
+ }
32
+ return {
33
+ url,
34
+ token,
35
+ ...(stream ? { stream } : {}),
36
+ ...(consumer ? { consumer } : {}),
37
+ ...(subject ? { subject } : {}),
38
+ };
39
+ }
1
40
  export async function getNatsConfig(baseUrl, sessionId, signal) {
2
41
  if (!sessionId) {
3
42
  throw new Error('Missing sessionId for NATS config request');
@@ -17,9 +56,6 @@ export async function getNatsConfig(baseUrl, sessionId, signal) {
17
56
  }
18
57
  }
19
58
  const data = (await response.json());
20
- if (!data.url || !data.token) {
21
- throw new Error('Invalid response from NATS config service');
22
- }
23
- return { url: data.url, token: data.token };
59
+ return parseNatsConfig(data);
24
60
  }
25
61
  //# sourceMappingURL=getNatsConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getNatsConfig.js","sourceRoot":"","sources":["../../../src/helpers/nats/getNatsConfig.ts"],"names":[],"mappings":"AAwBA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,SAAiB,EACjB,MAAoB;IAEpB,IAAI,CAAC,SAAS,EAAE;QACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,uBAAuB,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAChE,EAAE,MAAM,EAAE,CACX,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAU,CAAA,CAAC,CAAC;QAEjE,QAAQ,QAAQ,CAAC,MAAM,EAAE;YACvB,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,sCAAsC,CAC1D,CAAC;YACJ,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,oCAAoC,CACxD,CAAC;YACJ,KAAK,GAAG;gBACN,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,+CAA+C,CACnE,CAAC;YACJ;gBACE,MAAM,IAAI,KAAK,CACb,SAAS,CAAC,KAAK,IAAI,sBAAsB,QAAQ,CAAC,MAAM,EAAE,CAC3D,CAAC;SACL;KACF;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;IAE5D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;KAC9D;IAED,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"getNatsConfig.js","sourceRoot":"","sources":["../../../src/helpers/nats/getNatsConfig.ts"],"names":[],"mappings":"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"}
@@ -25,7 +25,11 @@ export function useNats({ baseUrl, sessionId, onProgress, onDialogResponse, onEr
25
25
  getNatsConfig(baseUrl, sessionId, controller.signal)
26
26
  .then(cfg => {
27
27
  if (!cancelled) {
28
- console.info('[NATS] config received, server url:', cfg.url);
28
+ console.info('[NATS] config received', {
29
+ url: cfg.url,
30
+ jetStream: !!cfg.stream,
31
+ stream: cfg.stream,
32
+ });
29
33
  setConfig(cfg);
30
34
  setConfigError(null);
31
35
  }
@@ -59,7 +63,7 @@ export function useNats({ baseUrl, sessionId, onProgress, onDialogResponse, onEr
59
63
  console.warn('Unknown NATS event', event);
60
64
  }
61
65
  }, []);
62
- useNatsSession(sessionId, config === null || config === void 0 ? void 0 : config.url, config === null || config === void 0 ? void 0 : config.token, handleMessage);
66
+ useNatsSession(sessionId, config !== null && config !== void 0 ? config : undefined, handleMessage);
63
67
  return {
64
68
  connected: !!config,
65
69
  configError,
@@ -1 +1 @@
1
- {"version":3,"file":"useNats.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNats.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNats.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNats.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { NatsConfig } from './getNatsConfig';
1
2
  export interface NatsProgressEvent {
2
3
  eventType: 'progress';
3
4
  jobId?: string;
@@ -24,4 +25,4 @@ export interface NatsErrorEvent {
24
25
  }
25
26
  export type NatsSessionEvent = NatsProgressEvent | NatsDialogResponseEvent | NatsErrorEvent;
26
27
  export declare function normalizeNatsEvent(raw: Record<string, unknown>): NatsSessionEvent;
27
- export declare function useNatsSession(sessionId: string | undefined, natsWsUrl: string | undefined, natsToken: string | undefined, onMessage: (event: NatsSessionEvent) => void): void;
28
+ export declare function useNatsSession(sessionId: string | undefined, config: NatsConfig | undefined, onMessage: (event: NatsSessionEvent) => void): void;
@@ -1,5 +1,6 @@
1
- import { useEffect, useRef } from 'react';
1
+ import { useEffect, useRef, useState } from 'react';
2
2
  import { wsconnect } from '@nats-io/nats-core';
3
+ import { jetstream, DeliverPolicy, } from '@nats-io/jetstream';
3
4
  function readString(raw, camelKey, snakeKey) {
4
5
  var _a;
5
6
  const value = (_a = raw[camelKey]) !== null && _a !== void 0 ? _a : raw[snakeKey];
@@ -57,24 +58,123 @@ export function normalizeNatsEvent(raw) {
57
58
  correlationID,
58
59
  };
59
60
  }
60
- export function useNatsSession(sessionId, natsWsUrl, natsToken, onMessage) {
61
+ function decodeMessage(subject, received, raw, onMessage) {
62
+ const payload = normalizeNatsEvent(raw);
63
+ console.debug(`[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`, payload);
64
+ onMessage(payload);
65
+ }
66
+ async function consumeCoreSubscription(nc, subject, onMessage) {
67
+ const sub = nc.subscribe(subject);
68
+ console.info('[NATS] subscribed to subject', subject);
69
+ let received = 0;
70
+ for await (const msg of sub) {
71
+ received += 1;
72
+ try {
73
+ decodeMessage(subject, received, msg.json(), onMessage);
74
+ }
75
+ catch (err) {
76
+ console.error('[NATS] message decode error', err);
77
+ }
78
+ }
79
+ console.info(`[NATS] subscription on ${subject} closed (received ${received} messages)`);
80
+ }
81
+ async function consumeJetStream(nc, config, subject, mode, onMessage, setConsumerMessages) {
82
+ const js = jetstream(nc);
83
+ const consumer = config.consumer
84
+ ? await js.consumers.get(config.stream, config.consumer)
85
+ : await js.consumers.get(config.stream, {
86
+ filter_subjects: [subject],
87
+ deliver_policy: mode === 'catch-up'
88
+ ? DeliverPolicy.LastPerSubject
89
+ : DeliverPolicy.New,
90
+ });
91
+ console.info('[NATS] JetStream consumer ready', config.consumer
92
+ ? { stream: config.stream, consumer: config.consumer, subject, mode }
93
+ : { stream: config.stream, subject, mode });
94
+ const messages = await consumer.consume();
95
+ setConsumerMessages(messages);
96
+ let received = 0;
97
+ for await (const msg of messages) {
98
+ received += 1;
99
+ try {
100
+ decodeMessage(subject, received, msg.json(), onMessage);
101
+ }
102
+ catch (err) {
103
+ console.error('[NATS] message decode error', err);
104
+ }
105
+ }
106
+ console.info(`[NATS] JetStream consumer on ${subject} closed (received ${received} messages)`);
107
+ }
108
+ function closeNatsSession(consumerMessagesRef, connRef) {
109
+ var _a, _b;
110
+ (_a = consumerMessagesRef.current) === null || _a === void 0 ? void 0 : _a.stop();
111
+ consumerMessagesRef.current = null;
112
+ (_b = connRef.current) === null || _b === void 0 ? void 0 : _b.close();
113
+ connRef.current = null;
114
+ }
115
+ export function useNatsSession(sessionId, config, onMessage) {
61
116
  const connRef = useRef(null);
117
+ const consumerMessagesRef = useRef(null);
62
118
  const onMessageRef = useRef(onMessage);
119
+ const wasHiddenRef = useRef(false);
120
+ const [resumeGeneration, setResumeGeneration] = useState(0);
63
121
  useEffect(() => {
64
122
  onMessageRef.current = onMessage;
65
123
  }, [onMessage]);
66
124
  useEffect(() => {
67
- if (!sessionId || !natsWsUrl || !natsToken) {
68
- console.debug('[NATS] subscription skipped (missing sessionId/url/token)', { sessionId, hasUrl: !!natsWsUrl, hasToken: !!natsToken });
125
+ if (!sessionId || !(config === null || config === void 0 ? void 0 : config.stream)) {
126
+ return;
127
+ }
128
+ const requestResume = () => {
129
+ if (document.visibilityState !== 'visible') {
130
+ return;
131
+ }
132
+ console.info('[NATS] resuming JetStream after visibility/network change');
133
+ setResumeGeneration(generation => generation + 1);
134
+ };
135
+ const onVisibilityChange = () => {
136
+ if (document.visibilityState === 'hidden') {
137
+ wasHiddenRef.current = true;
138
+ return;
139
+ }
140
+ if (wasHiddenRef.current) {
141
+ wasHiddenRef.current = false;
142
+ requestResume();
143
+ }
144
+ };
145
+ const onPageShow = (event) => {
146
+ if (event.persisted) {
147
+ requestResume();
148
+ }
149
+ };
150
+ document.addEventListener('visibilitychange', onVisibilityChange);
151
+ window.addEventListener('online', requestResume);
152
+ window.addEventListener('pageshow', onPageShow);
153
+ return () => {
154
+ document.removeEventListener('visibilitychange', onVisibilityChange);
155
+ window.removeEventListener('online', requestResume);
156
+ window.removeEventListener('pageshow', onPageShow);
157
+ };
158
+ }, [sessionId, config === null || config === void 0 ? void 0 : config.stream]);
159
+ useEffect(() => {
160
+ var _a;
161
+ if (!sessionId || !(config === null || config === void 0 ? void 0 : config.url) || !config.token) {
162
+ console.debug('[NATS] subscription skipped (missing sessionId/url/token)', {
163
+ sessionId,
164
+ hasUrl: !!(config === null || config === void 0 ? void 0 : config.url),
165
+ hasToken: !!(config === null || config === void 0 ? void 0 : config.token),
166
+ });
69
167
  return;
70
168
  }
71
169
  let closed = false;
72
- const subject = sessionId;
170
+ const subject = (_a = config.subject) !== null && _a !== void 0 ? _a : `sessions.${sessionId}`;
171
+ const useJetStream = !!config.stream;
172
+ const jetStreamMode = useJetStream && resumeGeneration > 0 ? 'catch-up' : 'live';
73
173
  (async () => {
74
- console.info('[NATS] connecting to', natsWsUrl, 'for session', sessionId);
174
+ console.info('[NATS] connecting to', config.url, 'for session', sessionId, useJetStream ? `(JetStream/${jetStreamMode})` : '(core)');
75
175
  const nc = await wsconnect({
76
- servers: [natsWsUrl],
77
- token: natsToken,
176
+ servers: [config.url],
177
+ token: config.token,
78
178
  });
79
179
  if (closed) {
80
180
  console.debug('[NATS] connection established after cleanup, closing immediately');
@@ -83,29 +183,26 @@ export function useNatsSession(sessionId, natsWsUrl, natsToken, onMessage) {
83
183
  }
84
184
  connRef.current = nc;
85
185
  console.info('[NATS] connected to', nc.getServer());
86
- const sub = nc.subscribe(subject);
87
- console.info('[NATS] subscribed to subject', subject);
88
- let received = 0;
89
- for await (const msg of sub) {
90
- received += 1;
91
- try {
92
- const payload = normalizeNatsEvent(msg.json());
93
- console.debug(`[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`, payload);
94
- onMessageRef.current(payload);
95
- }
96
- catch (err) {
97
- console.error('[NATS] message decode error', err);
98
- }
186
+ const dispatch = (event) => {
187
+ onMessageRef.current(event);
188
+ };
189
+ if (useJetStream) {
190
+ await consumeJetStream(nc, config, subject, jetStreamMode, dispatch, messages => {
191
+ consumerMessagesRef.current = messages;
192
+ });
193
+ }
194
+ else {
195
+ await consumeCoreSubscription(nc, subject, dispatch);
99
196
  }
100
- console.info(`[NATS] subscription on ${subject} closed (received ${received} messages)`);
101
197
  })().catch(err => console.error('[NATS] connection error', err));
102
198
  return () => {
103
- var _a;
104
199
  console.info('[NATS] cleanup: closing connection for subject', subject);
105
200
  closed = true;
106
- (_a = connRef.current) === null || _a === void 0 ? void 0 : _a.close();
107
- connRef.current = null;
201
+ closeNatsSession(consumerMessagesRef, connRef);
108
202
  };
109
- }, [sessionId, natsWsUrl, natsToken]);
203
+ }, [sessionId, config, resumeGeneration]);
204
+ useEffect(() => {
205
+ setResumeGeneration(0);
206
+ }, [sessionId]);
110
207
  }
111
208
  //# sourceMappingURL=useNatsSession.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNatsSession.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNatsSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useNatsSession.js","sourceRoot":"","sources":["../../../src/helpers/nats/useNatsSession.ts"],"names":[],"mappings":"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"}
package/esm/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "8.40.4";
1
+ export declare const version = "8.41.0";
package/esm/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '8.40.4';
1
+ export const version = '8.41.0';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "8.40.4",
2
+ "version": "8.41.0",
3
3
  "name": "@memori.ai/memori-react",
4
4
  "author": "Memori Srl",
5
5
  "main": "dist/index.js",
@@ -294,6 +294,7 @@
294
294
  "dependencies": {
295
295
  "@headlessui/react": "1.7.4",
296
296
  "@memori.ai/memori-api-client": "6.24.1",
297
+ "@nats-io/jetstream": "^3.4.0",
297
298
  "@nats-io/nats-core": "^3.4.0",
298
299
  "@react-three/drei": "8.20.2",
299
300
  "@react-three/fiber": "7.0.25",
@@ -9,6 +9,87 @@ export interface NatsConfig {
9
9
  url: string;
10
10
  /** Bearer token used to authenticate the WebSocket connection. */
11
11
  token: string;
12
+ /**
13
+ * JetStream stream that stores session events. When set, the client consumes
14
+ * via JetStream instead of core NATS subscribe.
15
+ */
16
+ stream?: string;
17
+ /**
18
+ * Optional durable consumer name. When omitted, an ordered ephemeral consumer
19
+ * filtered to the session subject is used.
20
+ */
21
+ consumer?: string;
22
+ /**
23
+ * Subject to subscribe or filter on. Defaults to `sessions.<sessionId>` when omitted.
24
+ */
25
+ subject?: string;
26
+ }
27
+
28
+ function readStringField(
29
+ raw: Record<string, unknown>,
30
+ ...keys: string[]
31
+ ): string | undefined {
32
+ for (const key of keys) {
33
+ const value = raw[key];
34
+ if (typeof value === 'string' && value.length > 0) {
35
+ return value;
36
+ }
37
+ }
38
+ return undefined;
39
+ }
40
+
41
+ function readBooleanField(
42
+ raw: Record<string, unknown>,
43
+ ...keys: string[]
44
+ ): boolean | undefined {
45
+ for (const key of keys) {
46
+ const value = raw[key];
47
+ if (typeof value === 'boolean') {
48
+ return value;
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+
54
+ /**
55
+ * Normalizes raw `/api/nats` payloads (camelCase or snake_case) into {@link NatsConfig}.
56
+ */
57
+ export function parseNatsConfig(raw: Record<string, unknown>): NatsConfig {
58
+ const url = readStringField(raw, 'url');
59
+ const token = readStringField(raw, 'token');
60
+
61
+ if (!url || !token) {
62
+ throw new Error('Invalid response from NATS config service');
63
+ }
64
+
65
+ const useJetStream = readBooleanField(raw, 'useJetStream', 'use_jetstream');
66
+ const stream = readStringField(raw, 'stream', 'streamName', 'stream_name');
67
+ const consumer = readStringField(
68
+ raw,
69
+ 'consumer',
70
+ 'consumerName',
71
+ 'consumer_name',
72
+ 'durableName',
73
+ 'durable_name'
74
+ );
75
+ const subject = readStringField(
76
+ raw,
77
+ 'subject',
78
+ 'filterSubject',
79
+ 'filter_subject'
80
+ );
81
+
82
+ if (useJetStream && !stream) {
83
+ throw new Error('Invalid response from NATS config service: JetStream enabled but stream missing');
84
+ }
85
+
86
+ return {
87
+ url,
88
+ token,
89
+ ...(stream ? { stream } : {}),
90
+ ...(consumer ? { consumer } : {}),
91
+ ...(subject ? { subject } : {}),
92
+ };
12
93
  }
13
94
 
14
95
  /**
@@ -59,11 +140,6 @@ export async function getNatsConfig(
59
140
  }
60
141
  }
61
142
 
62
- const data = (await response.json()) as Partial<NatsConfig>;
63
-
64
- if (!data.url || !data.token) {
65
- throw new Error('Invalid response from NATS config service');
66
- }
67
-
68
- return { url: data.url, token: data.token };
143
+ const data = (await response.json()) as Record<string, unknown>;
144
+ return parseNatsConfig(data);
69
145
  }
@@ -4,7 +4,7 @@
4
4
  // this hook *receives* asynchronous events on the session channel (progress /
5
5
  // dialog.text_entered_response / error).
6
6
  import { useEffect, useRef, useState, useCallback } from 'react';
7
- import { getNatsConfig } from './getNatsConfig';
7
+ import { getNatsConfig, NatsConfig } from './getNatsConfig';
8
8
  import {
9
9
  useNatsSession,
10
10
  NatsSessionEvent,
@@ -39,9 +39,7 @@ export function useNats({
39
39
  onDialogResponse,
40
40
  onError,
41
41
  }: UseNatsOptions) {
42
- const [config, setConfig] = useState<{ url: string; token: string } | null>(
43
- null
44
- );
42
+ const [config, setConfig] = useState<NatsConfig | null>(null);
45
43
  const [configError, setConfigError] = useState<Error | null>(null);
46
44
 
47
45
  // Keep callbacks in refs so the dispatcher identity stays stable.
@@ -75,7 +73,11 @@ export function useNats({
75
73
  getNatsConfig(baseUrl, sessionId, controller.signal)
76
74
  .then(cfg => {
77
75
  if (!cancelled) {
78
- console.info('[NATS] config received, server url:', cfg.url);
76
+ console.info('[NATS] config received', {
77
+ url: cfg.url,
78
+ jetStream: !!cfg.stream,
79
+ stream: cfg.stream,
80
+ });
79
81
  setConfig(cfg);
80
82
  setConfigError(null);
81
83
  }
@@ -111,7 +113,7 @@ export function useNats({
111
113
  }
112
114
  }, []);
113
115
 
114
- useNatsSession(sessionId, config?.url, config?.token, handleMessage);
116
+ useNatsSession(sessionId, config ?? undefined, handleMessage);
115
117
 
116
118
  return {
117
119
  /** True once connection config has been retrieved. */
@@ -1,11 +1,23 @@
1
1
  // helpers/nats/useNatsSession.ts - Subscribe to a session's NATS channel.
2
2
  //
3
- // Opens a W3C WebSocket connection (via `wsconnect`), subscribes to the
4
- // session subject (`sessions.<sessionId>`) and forwards every decoded event to
5
- // `onMessage`. The cleanup (`nc.close()`) is essential: without it, every
6
- // `sessionId` change would leave orphan connections / iterators.
7
- import { useEffect, useRef } from 'react';
3
+ // Opens a W3C WebSocket connection (via `wsconnect`), then either:
4
+ // - core NATS: subscribes to the session subject directly, or
5
+ // - JetStream: consumes from the configured stream (ordered consumer by default).
6
+ //
7
+ // When JetStream is enabled, reconnects on tab visibility / network resume and
8
+ // replays the last message per subject to recover events missed while Safari
9
+ // (or other browsers) suspend the WebSocket in background.
10
+ //
11
+ // The cleanup (`consumerMessages.stop()` + `nc.close()`) is essential: without
12
+ // it, every `sessionId` change would leave orphan connections / iterators.
13
+ import { useEffect, useRef, useState, type MutableRefObject } from 'react';
8
14
  import { wsconnect, NatsConnection } from '@nats-io/nats-core';
15
+ import {
16
+ jetstream,
17
+ DeliverPolicy,
18
+ type ConsumerMessages,
19
+ } from '@nats-io/jetstream';
20
+ import type { NatsConfig } from './getNatsConfig';
9
21
 
10
22
  /**
11
23
  * `progress` event: job advancement updates.
@@ -52,6 +64,8 @@ export type NatsSessionEvent =
52
64
  | NatsDialogResponseEvent
53
65
  | NatsErrorEvent;
54
66
 
67
+ type JetStreamConsumeMode = 'live' | 'catch-up';
68
+
55
69
  function readString(
56
70
  raw: Record<string, unknown>,
57
71
  camelKey: string,
@@ -143,49 +157,198 @@ export function normalizeNatsEvent(raw: Record<string, unknown>): NatsSessionEve
143
157
  } as NatsSessionEvent;
144
158
  }
145
159
 
160
+ function decodeMessage(
161
+ subject: string,
162
+ received: number,
163
+ raw: Record<string, unknown>,
164
+ onMessage: (event: NatsSessionEvent) => void
165
+ ) {
166
+ const payload = normalizeNatsEvent(raw);
167
+ console.debug(
168
+ `[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`,
169
+ payload
170
+ );
171
+ onMessage(payload);
172
+ }
173
+
174
+ async function consumeCoreSubscription(
175
+ nc: NatsConnection,
176
+ subject: string,
177
+ onMessage: (event: NatsSessionEvent) => void
178
+ ) {
179
+ const sub = nc.subscribe(subject);
180
+ console.info('[NATS] subscribed to subject', subject);
181
+ let received = 0;
182
+ for await (const msg of sub) {
183
+ received += 1;
184
+ try {
185
+ decodeMessage(
186
+ subject,
187
+ received,
188
+ msg.json<Record<string, unknown>>(),
189
+ onMessage
190
+ );
191
+ } catch (err) {
192
+ console.error('[NATS] message decode error', err);
193
+ }
194
+ }
195
+ console.info(
196
+ `[NATS] subscription on ${subject} closed (received ${received} messages)`
197
+ );
198
+ }
199
+
200
+ async function consumeJetStream(
201
+ nc: NatsConnection,
202
+ config: Pick<NatsConfig, 'stream' | 'consumer'>,
203
+ subject: string,
204
+ mode: JetStreamConsumeMode,
205
+ onMessage: (event: NatsSessionEvent) => void,
206
+ setConsumerMessages: (messages: ConsumerMessages) => void
207
+ ) {
208
+ const js = jetstream(nc);
209
+ const consumer = config.consumer
210
+ ? await js.consumers.get(config.stream!, config.consumer)
211
+ : await js.consumers.get(config.stream!, {
212
+ filter_subjects: [subject],
213
+ deliver_policy:
214
+ mode === 'catch-up'
215
+ ? DeliverPolicy.LastPerSubject
216
+ : DeliverPolicy.New,
217
+ });
218
+
219
+ console.info(
220
+ '[NATS] JetStream consumer ready',
221
+ config.consumer
222
+ ? { stream: config.stream, consumer: config.consumer, subject, mode }
223
+ : { stream: config.stream, subject, mode }
224
+ );
225
+
226
+ const messages = await consumer.consume();
227
+ setConsumerMessages(messages);
228
+ let received = 0;
229
+ for await (const msg of messages) {
230
+ received += 1;
231
+ try {
232
+ decodeMessage(subject, received, msg.json(), onMessage);
233
+ } catch (err) {
234
+ console.error('[NATS] message decode error', err);
235
+ }
236
+ }
237
+ console.info(
238
+ `[NATS] JetStream consumer on ${subject} closed (received ${received} messages)`
239
+ );
240
+ }
241
+
242
+ function closeNatsSession(
243
+ consumerMessagesRef: MutableRefObject<ConsumerMessages | null>,
244
+ connRef: MutableRefObject<NatsConnection | null>
245
+ ) {
246
+ consumerMessagesRef.current?.stop();
247
+ consumerMessagesRef.current = null;
248
+ connRef.current?.close();
249
+ connRef.current = null;
250
+ }
251
+
146
252
  /**
147
253
  * Open a NATS WebSocket connection, subscribe to the session subject and
148
254
  * forward decoded events to `onMessage`.
149
255
  *
150
256
  * `onMessage` is kept in a ref so callers do not need to memoize it: the
151
- * connection is only (re)opened when `sessionId`, `natsWsUrl` or `natsToken`
257
+ * connection is only (re)opened when `sessionId`, `config` or `resumeGeneration`
152
258
  * change.
153
259
  *
154
260
  * @param sessionId Current session UUID (subscription is skipped when falsy).
155
- * @param natsWsUrl WebSocket URL of the NATS server.
156
- * @param natsToken Bearer token for authentication.
261
+ * @param config Connection config from `/api/nats` (url + token required).
157
262
  * @param onMessage Callback invoked for each decoded event.
158
263
  */
159
264
  export function useNatsSession(
160
265
  sessionId: string | undefined,
161
- natsWsUrl: string | undefined,
162
- natsToken: string | undefined,
266
+ config: NatsConfig | undefined,
163
267
  onMessage: (event: NatsSessionEvent) => void
164
268
  ) {
165
269
  const connRef = useRef<NatsConnection | null>(null);
270
+ const consumerMessagesRef = useRef<ConsumerMessages | null>(null);
166
271
  const onMessageRef = useRef(onMessage);
272
+ const wasHiddenRef = useRef(false);
273
+ const [resumeGeneration, setResumeGeneration] = useState(0);
167
274
 
168
275
  // Keep the latest callback without retriggering the connection effect.
169
276
  useEffect(() => {
170
277
  onMessageRef.current = onMessage;
171
278
  }, [onMessage]);
172
279
 
280
+ // Reconnect when the tab returns from background or the network comes back.
173
281
  useEffect(() => {
174
- if (!sessionId || !natsWsUrl || !natsToken) {
282
+ if (!sessionId || !config?.stream) {
283
+ return;
284
+ }
285
+
286
+ const requestResume = () => {
287
+ if (document.visibilityState !== 'visible') {
288
+ return;
289
+ }
290
+ console.info('[NATS] resuming JetStream after visibility/network change');
291
+ setResumeGeneration(generation => generation + 1);
292
+ };
293
+
294
+ const onVisibilityChange = () => {
295
+ if (document.visibilityState === 'hidden') {
296
+ wasHiddenRef.current = true;
297
+ return;
298
+ }
299
+ if (wasHiddenRef.current) {
300
+ wasHiddenRef.current = false;
301
+ requestResume();
302
+ }
303
+ };
304
+
305
+ const onPageShow = (event: PageTransitionEvent) => {
306
+ if (event.persisted) {
307
+ requestResume();
308
+ }
309
+ };
310
+
311
+ document.addEventListener('visibilitychange', onVisibilityChange);
312
+ window.addEventListener('online', requestResume);
313
+ window.addEventListener('pageshow', onPageShow);
314
+
315
+ return () => {
316
+ document.removeEventListener('visibilitychange', onVisibilityChange);
317
+ window.removeEventListener('online', requestResume);
318
+ window.removeEventListener('pageshow', onPageShow);
319
+ };
320
+ }, [sessionId, config?.stream]);
321
+
322
+ useEffect(() => {
323
+ if (!sessionId || !config?.url || !config.token) {
175
324
  console.debug(
176
325
  '[NATS] subscription skipped (missing sessionId/url/token)',
177
- { sessionId, hasUrl: !!natsWsUrl, hasToken: !!natsToken }
326
+ {
327
+ sessionId,
328
+ hasUrl: !!config?.url,
329
+ hasToken: !!config?.token,
330
+ }
178
331
  );
179
332
  return;
180
333
  }
334
+
181
335
  let closed = false;
182
- const subject = sessionId;
336
+ const subject = config.subject ?? `sessions.${sessionId}`;
337
+ const useJetStream = !!config.stream;
338
+ const jetStreamMode: JetStreamConsumeMode =
339
+ useJetStream && resumeGeneration > 0 ? 'catch-up' : 'live';
183
340
 
184
341
  (async () => {
185
- console.info('[NATS] connecting to', natsWsUrl, 'for session', sessionId);
342
+ console.info(
343
+ '[NATS] connecting to',
344
+ config.url,
345
+ 'for session',
346
+ sessionId,
347
+ useJetStream ? `(JetStream/${jetStreamMode})` : '(core)'
348
+ );
186
349
  const nc = await wsconnect({
187
- servers: [natsWsUrl],
188
- token: natsToken,
350
+ servers: [config.url],
351
+ token: config.token,
189
352
  });
190
353
  if (closed) {
191
354
  console.debug(
@@ -197,34 +360,35 @@ export function useNatsSession(
197
360
  connRef.current = nc;
198
361
  console.info('[NATS] connected to', nc.getServer());
199
362
 
200
- const sub = nc.subscribe(subject);
201
- console.info('[NATS] subscribed to subject', subject);
202
- let received = 0;
203
- for await (const msg of sub) {
204
- received += 1;
205
- try {
206
- const payload = normalizeNatsEvent(
207
- msg.json<Record<string, unknown>>()
208
- );
209
- console.debug(
210
- `[NATS] message #${received} on ${subject} (eventType=${payload.eventType})`,
211
- payload
212
- );
213
- onMessageRef.current(payload);
214
- } catch (err) {
215
- console.error('[NATS] message decode error', err);
216
- }
363
+ const dispatch = (event: NatsSessionEvent) => {
364
+ onMessageRef.current(event);
365
+ };
366
+
367
+ if (useJetStream) {
368
+ await consumeJetStream(
369
+ nc,
370
+ config,
371
+ subject,
372
+ jetStreamMode,
373
+ dispatch,
374
+ messages => {
375
+ consumerMessagesRef.current = messages;
376
+ }
377
+ );
378
+ } else {
379
+ await consumeCoreSubscription(nc, subject, dispatch);
217
380
  }
218
- console.info(
219
- `[NATS] subscription on ${subject} closed (received ${received} messages)`
220
- );
221
381
  })().catch(err => console.error('[NATS] connection error', err));
222
382
 
223
383
  return () => {
224
384
  console.info('[NATS] cleanup: closing connection for subject', subject);
225
385
  closed = true;
226
- connRef.current?.close();
227
- connRef.current = null;
386
+ closeNatsSession(consumerMessagesRef, connRef);
228
387
  };
229
- }, [sessionId, natsWsUrl, natsToken]);
388
+ }, [sessionId, config, resumeGeneration]);
389
+
390
+ // Reset catch-up generation when the active session changes.
391
+ useEffect(() => {
392
+ setResumeGeneration(0);
393
+ }, [sessionId]);
230
394
  }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // This file is auto-generated. Do not edit manually.
2
- export const version = '8.40.4';
2
+ export const version = '8.41.0';