@fias/arche-sdk 1.6.1 → 1.8.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.
File without changes
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FiasUser, FiasTheme, FiasStorageApi, EntityInvocationApi, ImageGenerationApi, FiasNavigationApi, StepNavigationApi, FiasDataStoreApi, FiasStoreApi } from './types';
1
+ import type { FiasUser, FiasTheme, FiasStorageApi, EntityInvocationApi, ImageGenerationApi, FiasNavigationApi, StepNavigationApi, StepNavigationOptions, FiasDataStoreApi, FiasStoreApi } from './types';
2
2
  /**
3
3
  * Access the current user's profile information.
4
4
  * Requires the `user:profile:read` permission in fias-plugin.json.
@@ -25,7 +25,14 @@ export declare function useFiasStorage(): FiasStorageApi;
25
25
  * Invoke platform entities (AI models, etc.) through the bridge.
26
26
  * Requires the `entities:invoke` permission in fias-plugin.json.
27
27
  *
28
- * @returns Entity invocation API (invoke, isLoading, result, error).
28
+ * Rendering pattern: `streamingText` accumulates tokens during the call AND
29
+ * keeps the full text after `isLoading` flips to `false` — it is not cleared
30
+ * when the response completes. `result.output` also holds the full text once
31
+ * the promise resolves. **Render only one slot** (e.g.
32
+ * `{isLoading ? streamingText : result?.output}`) — rendering both prints the
33
+ * response twice once the stream completes.
34
+ *
35
+ * @returns Entity invocation API (invoke, isLoading, result, error, streamingText).
29
36
  */
30
37
  export declare function useEntityInvocation(): EntityInvocationApi;
31
38
  /**
@@ -44,14 +51,6 @@ export declare function useImageGeneration(): ImageGenerationApi;
44
51
  * @returns Navigation API (navigateTo, currentPath).
45
52
  */
46
53
  export declare function useFiasNavigation(): FiasNavigationApi;
47
- /**
48
- * Manage step navigation for multi-node plugins.
49
- * Listens for step_navigate messages from the host to support
50
- * external navigation (e.g., clicking graph nodes).
51
- *
52
- * @param initialStep - Optional initial step/node ID.
53
- * @returns Step navigation API (currentStep, setCurrentStep).
54
- */
55
54
  /**
56
55
  * Like useState, but auto-persists to bridge storage.
57
56
  * Survives preview rebuilds during development.
@@ -60,7 +59,21 @@ export declare function useFiasNavigation(): FiasNavigationApi;
60
59
  * @param initialValue - Default value if nothing is stored
61
60
  */
62
61
  export declare function usePersistentState<T>(key: string, initialValue: T): [T, (value: T | ((prev: T) => T)) => void];
63
- export declare function useStepNavigation(initialStep?: string): StepNavigationApi;
62
+ /**
63
+ * Manage step navigation for multi-node plugins.
64
+ * Listens for step_navigate messages from the host to support
65
+ * external navigation (e.g., clicking graph nodes).
66
+ *
67
+ * Pass `{ persistKey }` to make the current step survive preview rebuilds.
68
+ * This is the correct way to persist step state — do NOT additionally wrap
69
+ * currentStep in `usePersistentState`, which creates two independent state
70
+ * sources and a bidirectional sync loop.
71
+ *
72
+ * @param initialStep - Optional initial step/node ID.
73
+ * @param options - Optional config; set `persistKey` to enable persistence.
74
+ * @returns Step navigation API (currentStep, setCurrentStep).
75
+ */
76
+ export declare function useStepNavigation(initialStep?: string, options?: StepNavigationOptions): StepNavigationApi;
64
77
  /**
65
78
  * Access the Arche Data Store for structured, queryable data persistence.
66
79
  * Requires the `data:store` permission in fias-plugin.json.
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EAGnB,kBAAkB,EAGlB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAIhB,YAAY,EAMb,MAAM,SAAS,CAAC;AAcjB;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAe7C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAS/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAqC/C;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,CAoCzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,CA2BvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;;GAOG;AACH;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAgD5C;AAED,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAWzE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAyFnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAqG3C"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,QAAQ,EACR,SAAS,EACT,cAAc,EACd,mBAAmB,EAGnB,kBAAkB,EAGlB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAIhB,YAAY,EAMb,MAAM,SAAS,CAAC;AA4EjB;;;;;GAKG;AACH,wBAAgB,WAAW,IAAI,QAAQ,GAAG,IAAI,CAe7C;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,IAAI,SAAS,GAAG,IAAI,CAS/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,cAAc,CAqC/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,IAAI,mBAAmB,CAoCzD;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,kBAAkB,CA2BvD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,iBAAiB,CAgBrD;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CA4C5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,iBAAiB,CAiEnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CAyFnD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAqG3C"}
package/dist/hooks.js CHANGED
@@ -23,6 +23,55 @@ function useBridge() {
23
23
  }
24
24
  return bridge;
25
25
  }
26
+ /**
27
+ * Trailing-edge debounce window for persistent-state writes. Rapid setter
28
+ * calls (e.g. per-frame updates from a requestAnimationFrame game loop) are
29
+ * coalesced so we don't trip the bridge's 50-in-5s runaway-loop detector or
30
+ * exhaust the 120/minute storage_write budget.
31
+ */
32
+ const PERSIST_DEBOUNCE_WAIT_MS = 250;
33
+ const PERSIST_DEBOUNCE_MAX_WAIT_MS = 1000;
34
+ /**
35
+ * Create a debounced storage_write scheduler. Writes are coalesced to the
36
+ * last value seen within a 250ms idle window, capped at a 1s max-wait so
37
+ * continuous updates still persist at least once per second. Call `flush()`
38
+ * on unmount or before switching keys to avoid losing the pending value.
39
+ *
40
+ * If `schedule` is called with a different `path` than the currently pending
41
+ * write, the pending write flushes synchronously before the new one is
42
+ * queued — each path gets a write.
43
+ */
44
+ function createDebouncedWriter(bridge) {
45
+ let pending = null;
46
+ function flush() {
47
+ if (!pending)
48
+ return;
49
+ const { path, content, timerId } = pending;
50
+ if (timerId !== null)
51
+ clearTimeout(timerId);
52
+ pending = null;
53
+ bridge.request('storage_write', { path, content }).catch(() => { });
54
+ }
55
+ function schedule(path, content) {
56
+ const now = Date.now();
57
+ if (pending && pending.path !== path) {
58
+ flush();
59
+ }
60
+ if (!pending) {
61
+ pending = { path, content, timerId: null, firstScheduledAt: now };
62
+ }
63
+ else {
64
+ pending.content = content;
65
+ }
66
+ if (pending.timerId !== null)
67
+ clearTimeout(pending.timerId);
68
+ const elapsed = now - pending.firstScheduledAt;
69
+ const remainingMax = Math.max(0, PERSIST_DEBOUNCE_MAX_WAIT_MS - elapsed);
70
+ const delay = Math.min(PERSIST_DEBOUNCE_WAIT_MS, remainingMax);
71
+ pending.timerId = setTimeout(flush, delay);
72
+ }
73
+ return { schedule, flush };
74
+ }
26
75
  /**
27
76
  * Access the current user's profile information.
28
77
  * Requires the `user:profile:read` permission in fias-plugin.json.
@@ -87,7 +136,14 @@ function useFiasStorage() {
87
136
  * Invoke platform entities (AI models, etc.) through the bridge.
88
137
  * Requires the `entities:invoke` permission in fias-plugin.json.
89
138
  *
90
- * @returns Entity invocation API (invoke, isLoading, result, error).
139
+ * Rendering pattern: `streamingText` accumulates tokens during the call AND
140
+ * keeps the full text after `isLoading` flips to `false` — it is not cleared
141
+ * when the response completes. `result.output` also holds the full text once
142
+ * the promise resolves. **Render only one slot** (e.g.
143
+ * `{isLoading ? streamingText : result?.output}`) — rendering both prints the
144
+ * response twice once the stream completes.
145
+ *
146
+ * @returns Entity invocation API (invoke, isLoading, result, error, streamingText).
91
147
  */
92
148
  function useEntityInvocation() {
93
149
  const bridge = useBridge();
@@ -171,14 +227,6 @@ function useFiasNavigation() {
171
227
  }, [bridge]);
172
228
  return { navigateTo, currentPath };
173
229
  }
174
- /**
175
- * Manage step navigation for multi-node plugins.
176
- * Listens for step_navigate messages from the host to support
177
- * external navigation (e.g., clicking graph nodes).
178
- *
179
- * @param initialStep - Optional initial step/node ID.
180
- * @returns Step navigation API (currentStep, setCurrentStep).
181
- */
182
230
  /**
183
231
  * Like useState, but auto-persists to bridge storage.
184
232
  * Survives preview rebuilds during development.
@@ -190,14 +238,19 @@ function usePersistentState(key, initialValue) {
190
238
  const bridge = useBridge();
191
239
  const [value, setValueInternal] = (0, react_1.useState)(initialValue);
192
240
  const initializedRef = (0, react_1.useRef)(false);
193
- // Load from storage on mount
241
+ const valueRef = (0, react_1.useRef)(initialValue);
242
+ const writer = (0, react_1.useMemo)(() => createDebouncedWriter(bridge), [bridge]);
243
+ // Load from storage on mount; flush any pending write on unmount/key change
244
+ // so rapid updates in a game loop never lose their last value.
194
245
  (0, react_1.useEffect)(() => {
195
246
  bridge
196
247
  .request('storage_read', { path: `__state/${key}` })
197
248
  .then((result) => {
198
249
  if (result.exists && result.content !== null) {
199
250
  try {
200
- setValueInternal(JSON.parse(result.content));
251
+ const parsed = JSON.parse(result.content);
252
+ valueRef.current = parsed;
253
+ setValueInternal(parsed);
201
254
  }
202
255
  catch {
203
256
  // Corrupted data — use initial value
@@ -205,36 +258,91 @@ function usePersistentState(key, initialValue) {
205
258
  }
206
259
  initializedRef.current = true;
207
260
  });
208
- }, [bridge, key]);
209
- // Setter that also persists
261
+ return () => {
262
+ writer.flush();
263
+ };
264
+ }, [bridge, key, writer]);
210
265
  const setValue = (0, react_1.useCallback)((next) => {
211
- setValueInternal((prev) => {
212
- const resolved = typeof next === 'function' ? next(prev) : next;
213
- // Skip write if value hasn't changed (prevents sync loops between hooks)
214
- const serialized = JSON.stringify(resolved);
215
- if (serialized === JSON.stringify(prev)) {
216
- return prev; // Preserve referential identity to skip React re-render
217
- }
218
- // Fire-and-forget write to storage
219
- bridge
220
- .request('storage_write', {
221
- path: `__state/${key}`,
222
- content: serialized,
223
- })
224
- .catch(() => { });
225
- return resolved;
226
- });
227
- }, [bridge, key]);
266
+ const resolved = typeof next === 'function' ? next(valueRef.current) : next;
267
+ valueRef.current = resolved;
268
+ setValueInternal(resolved);
269
+ writer.schedule(`__state/${key}`, JSON.stringify(resolved));
270
+ }, [key, writer]);
228
271
  return [value, setValue];
229
272
  }
230
- function useStepNavigation(initialStep) {
273
+ /**
274
+ * Manage step navigation for multi-node plugins.
275
+ * Listens for step_navigate messages from the host to support
276
+ * external navigation (e.g., clicking graph nodes).
277
+ *
278
+ * Pass `{ persistKey }` to make the current step survive preview rebuilds.
279
+ * This is the correct way to persist step state — do NOT additionally wrap
280
+ * currentStep in `usePersistentState`, which creates two independent state
281
+ * sources and a bidirectional sync loop.
282
+ *
283
+ * @param initialStep - Optional initial step/node ID.
284
+ * @param options - Optional config; set `persistKey` to enable persistence.
285
+ * @returns Step navigation API (currentStep, setCurrentStep).
286
+ */
287
+ function useStepNavigation(initialStep, options) {
231
288
  const bridge = useBridge();
232
- const [currentStep, setCurrentStep] = (0, react_1.useState)(initialStep ?? null);
289
+ const persistKey = options?.persistKey;
290
+ const [currentStep, setCurrentStepInternal] = (0, react_1.useState)(initialStep ?? null);
291
+ const initializedRef = (0, react_1.useRef)(false);
292
+ const writer = (0, react_1.useMemo)(() => createDebouncedWriter(bridge), [bridge]);
293
+ // Load persisted value on mount when persistKey is provided; flush any
294
+ // pending write on unmount/key change so we don't lose the last nav.
295
+ (0, react_1.useEffect)(() => {
296
+ if (!persistKey) {
297
+ initializedRef.current = true;
298
+ return;
299
+ }
300
+ let cancelled = false;
301
+ bridge
302
+ .request('storage_read', {
303
+ path: `__state/${persistKey}`,
304
+ })
305
+ .then((result) => {
306
+ // Don't clobber a user-initiated setCurrentStep that landed before this resolved.
307
+ if (cancelled || initializedRef.current)
308
+ return;
309
+ if (result.exists && result.content !== null) {
310
+ try {
311
+ const parsed = JSON.parse(result.content);
312
+ if (typeof parsed === 'string' || parsed === null) {
313
+ setCurrentStepInternal(parsed);
314
+ }
315
+ }
316
+ catch {
317
+ // Corrupted data — keep initial value
318
+ }
319
+ }
320
+ initializedRef.current = true;
321
+ })
322
+ .catch(() => {
323
+ initializedRef.current = true;
324
+ });
325
+ return () => {
326
+ cancelled = true;
327
+ writer.flush();
328
+ };
329
+ }, [bridge, persistKey, writer]);
330
+ // Subscribe to host-driven step navigation.
233
331
  (0, react_1.useEffect)(() => {
234
332
  return bridge.onStepNavigationUpdate((nodeId) => {
235
- setCurrentStep(nodeId);
333
+ setCurrentStepInternal(nodeId);
334
+ if (persistKey) {
335
+ writer.schedule(`__state/${persistKey}`, JSON.stringify(nodeId));
336
+ }
236
337
  });
237
- }, [bridge]);
338
+ }, [bridge, persistKey, writer]);
339
+ const setCurrentStep = (0, react_1.useCallback)((nodeId) => {
340
+ initializedRef.current = true;
341
+ setCurrentStepInternal(nodeId);
342
+ if (persistKey) {
343
+ writer.schedule(`__state/${persistKey}`, JSON.stringify(nodeId));
344
+ }
345
+ }, [persistKey, writer]);
238
346
  return { currentStep, setCurrentStep };
239
347
  }
240
348
  /**
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
@@ -44,6 +44,7 @@ jest.mock('react', () => ({
44
44
  }),
45
45
  useCallback: jest.fn((fn) => fn),
46
46
  useRef: jest.fn((initial) => ({ current: initial })),
47
+ useMemo: jest.fn((fn) => fn()),
47
48
  }));
48
49
  jest.mock('react-dom', () => ({
49
50
  flushSync: jest.fn((fn) => fn()),
@@ -184,102 +185,6 @@ describe('SDK hooks', () => {
184
185
  expect(capturedEffectCleanup).toBe(unsubscribe);
185
186
  });
186
187
  });
187
- describe('usePersistentState', () => {
188
- beforeEach(() => {
189
- // Default mock for storage_read so the mount effect doesn't crash
190
- mockBridge.request.mockResolvedValue({ exists: false, content: null });
191
- });
192
- it('loads persisted value from bridge storage on mount', () => {
193
- mockBridge.request.mockResolvedValue({ exists: true, content: '"saved-value"' });
194
- const { usePersistentState } = require('./hooks');
195
- const [value] = usePersistentState('myKey', 'default');
196
- // Initial render returns the default
197
- expect(value).toBe('default');
198
- // Effect fires storage_read
199
- expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
200
- path: '__state/myKey',
201
- });
202
- });
203
- it('setValue fires storage_write for new values', () => {
204
- // Track the updater function passed to setValueInternal
205
- let capturedUpdater = null;
206
- const mockSetValueInternal = jest.fn((fn) => {
207
- capturedUpdater = fn;
208
- });
209
- const react = require('react');
210
- react.useState.mockReturnValueOnce(['old-value', mockSetValueInternal]);
211
- const { usePersistentState } = require('./hooks');
212
- const [, setValue] = usePersistentState('myKey', 'old-value');
213
- // Call setValue with a new value
214
- setValue('new-value');
215
- expect(mockSetValueInternal).toHaveBeenCalled();
216
- // Execute the updater function — it should fire storage_write
217
- mockBridge.request.mockClear();
218
- mockBridge.request.mockResolvedValue(undefined);
219
- const result = capturedUpdater('old-value');
220
- expect(result).toBe('new-value');
221
- expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
222
- path: '__state/myKey',
223
- content: '"new-value"',
224
- });
225
- });
226
- it('setValue skips storage_write when value has not changed', () => {
227
- let capturedUpdater = null;
228
- const mockSetValueInternal = jest.fn((fn) => {
229
- capturedUpdater = fn;
230
- });
231
- const react = require('react');
232
- react.useState.mockReturnValueOnce(['same-value', mockSetValueInternal]);
233
- const { usePersistentState } = require('./hooks');
234
- const [, setValue] = usePersistentState('myKey', 'same-value');
235
- setValue('same-value');
236
- // Execute the updater — should return prev and NOT fire storage_write
237
- mockBridge.request.mockClear();
238
- const result = capturedUpdater('same-value');
239
- expect(result).toBe('same-value');
240
- // storage_write should NOT be called
241
- expect(mockBridge.request).not.toHaveBeenCalled();
242
- });
243
- it('setValue skips storage_write for identical objects', () => {
244
- let capturedUpdater = null;
245
- const mockSetValueInternal = jest.fn((fn) => {
246
- capturedUpdater = fn;
247
- });
248
- const react = require('react');
249
- const prevObj = { a: 1, b: [2, 3] };
250
- react.useState.mockReturnValueOnce([prevObj, mockSetValueInternal]);
251
- const { usePersistentState } = require('./hooks');
252
- const [, setValue] = usePersistentState('myKey', prevObj);
253
- // Set a structurally identical but referentially different object
254
- setValue({ a: 1, b: [2, 3] });
255
- mockBridge.request.mockClear();
256
- const result = capturedUpdater(prevObj);
257
- // Should return the original prev object (preserving referential identity)
258
- expect(result).toBe(prevObj);
259
- // storage_write should NOT be called
260
- expect(mockBridge.request).not.toHaveBeenCalled();
261
- });
262
- it('setValue supports functional updater form', () => {
263
- let capturedUpdater = null;
264
- const mockSetValueInternal = jest.fn((fn) => {
265
- capturedUpdater = fn;
266
- });
267
- const react = require('react');
268
- react.useState.mockReturnValueOnce([[1, 2], mockSetValueInternal]);
269
- const { usePersistentState } = require('./hooks');
270
- const [, setValue] = usePersistentState('myKey', [1, 2]);
271
- // Use functional updater
272
- setValue((prev) => [...prev, 3]);
273
- mockBridge.request.mockClear();
274
- mockBridge.request.mockResolvedValue(undefined);
275
- const result = capturedUpdater([1, 2]);
276
- expect(result).toEqual([1, 2, 3]);
277
- expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
278
- path: '__state/myKey',
279
- content: '[1,2,3]',
280
- });
281
- });
282
- });
283
188
  describe('useStepNavigation', () => {
284
189
  it('returns initial step and subscribes to updates', () => {
285
190
  const { useStepNavigation } = require('./hooks');
@@ -300,6 +205,195 @@ describe('SDK hooks', () => {
300
205
  useStepNavigation();
301
206
  expect(capturedEffectCleanup).toBe(unsubscribe);
302
207
  });
208
+ it('without persistKey, does not touch storage on mount or setCurrentStep', () => {
209
+ const { useStepNavigation } = require('./hooks');
210
+ const result = useStepNavigation('step-1');
211
+ expect(mockBridge.request).not.toHaveBeenCalledWith('storage_read', expect.anything());
212
+ result.setCurrentStep('step-2');
213
+ expect(mockBridge.request).not.toHaveBeenCalledWith('storage_write', expect.anything());
214
+ });
215
+ it('with persistKey, reads persisted value on mount', () => {
216
+ const { useStepNavigation } = require('./hooks');
217
+ useStepNavigation('step-1', { persistKey: 'currentStep' });
218
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
219
+ path: '__state/currentStep',
220
+ });
221
+ });
222
+ it('with persistKey, writes on setCurrentStep (after debounce flush)', () => {
223
+ jest.useFakeTimers();
224
+ try {
225
+ const { useStepNavigation } = require('./hooks');
226
+ const result = useStepNavigation('step-1', { persistKey: 'currentStep' });
227
+ mockBridge.request.mockClear();
228
+ result.setCurrentStep('step-2');
229
+ expect(mockSetState).toHaveBeenCalledWith('step-2');
230
+ // Setter updates in-memory state immediately; the write is debounced.
231
+ expect(mockBridge.request).not.toHaveBeenCalledWith('storage_write', expect.anything());
232
+ jest.advanceTimersByTime(260);
233
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
234
+ path: '__state/currentStep',
235
+ content: JSON.stringify('step-2'),
236
+ });
237
+ }
238
+ finally {
239
+ jest.useRealTimers();
240
+ }
241
+ });
242
+ it('with persistKey, persists host step_navigate messages (after debounce flush)', () => {
243
+ jest.useFakeTimers();
244
+ try {
245
+ let hostCallback = null;
246
+ mockBridge.onStepNavigationUpdate.mockImplementation((cb) => {
247
+ hostCallback = cb;
248
+ return () => { };
249
+ });
250
+ const { useStepNavigation } = require('./hooks');
251
+ useStepNavigation('step-1', { persistKey: 'currentStep' });
252
+ mockBridge.request.mockClear();
253
+ expect(hostCallback).not.toBeNull();
254
+ hostCallback('step-from-host');
255
+ expect(mockSetState).toHaveBeenCalledWith('step-from-host');
256
+ jest.advanceTimersByTime(260);
257
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
258
+ path: '__state/currentStep',
259
+ content: JSON.stringify('step-from-host'),
260
+ });
261
+ }
262
+ finally {
263
+ jest.useRealTimers();
264
+ }
265
+ });
266
+ it('with persistKey, persisted value wins over initialStep on mount', async () => {
267
+ mockBridge.request.mockResolvedValue({
268
+ content: JSON.stringify('step-persisted'),
269
+ exists: true,
270
+ });
271
+ const { useStepNavigation } = require('./hooks');
272
+ useStepNavigation('step-initial', { persistKey: 'currentStep' });
273
+ // Let the storage_read promise resolve
274
+ await Promise.resolve();
275
+ await Promise.resolve();
276
+ // After the read resolves, the internal setter is called with the persisted value
277
+ expect(mockSetState).toHaveBeenCalledWith('step-persisted');
278
+ });
279
+ });
280
+ describe('usePersistentState', () => {
281
+ function countStorageWrites(key) {
282
+ return mockBridge.request.mock.calls.filter((call) => call[0] === 'storage_write' && call[1].path === `__state/${key}`).length;
283
+ }
284
+ it('reads initial value from storage on mount', () => {
285
+ const { usePersistentState } = require('./hooks');
286
+ usePersistentState('counter', 0);
287
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_read', {
288
+ path: '__state/counter',
289
+ });
290
+ });
291
+ it('applies persisted value after storage_read resolves', async () => {
292
+ mockBridge.request.mockResolvedValue({
293
+ content: JSON.stringify(42),
294
+ exists: true,
295
+ });
296
+ const { usePersistentState } = require('./hooks');
297
+ usePersistentState('counter', 0);
298
+ await Promise.resolve();
299
+ await Promise.resolve();
300
+ expect(mockSetState).toHaveBeenCalledWith(42);
301
+ });
302
+ it('setter updates in-memory value synchronously, defers write', () => {
303
+ jest.useFakeTimers();
304
+ try {
305
+ const { usePersistentState } = require('./hooks');
306
+ const [, setValue] = usePersistentState('counter', 0);
307
+ mockBridge.request.mockClear();
308
+ setValue(1);
309
+ // In-memory update fires immediately via functional updater
310
+ expect(mockSetState).toHaveBeenCalled();
311
+ // No write yet — it's debounced
312
+ expect(countStorageWrites('counter')).toBe(0);
313
+ jest.advanceTimersByTime(260);
314
+ expect(countStorageWrites('counter')).toBe(1);
315
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
316
+ path: '__state/counter',
317
+ content: JSON.stringify(1),
318
+ });
319
+ }
320
+ finally {
321
+ jest.useRealTimers();
322
+ }
323
+ });
324
+ it('coalesces a rapid burst of setter calls into one write with the last value', () => {
325
+ jest.useFakeTimers();
326
+ try {
327
+ const { usePersistentState } = require('./hooks');
328
+ const [, setValue] = usePersistentState('counter', 0);
329
+ mockBridge.request.mockClear();
330
+ // Simulate a 60fps burst — 60 updates in ~1 second
331
+ for (let i = 1; i <= 60; i++) {
332
+ setValue(i);
333
+ jest.advanceTimersByTime(16);
334
+ }
335
+ // maxWait is 1000ms, so we'd get at most 1 write during the burst
336
+ const writesDuringBurst = countStorageWrites('counter');
337
+ expect(writesDuringBurst).toBeLessThanOrEqual(1);
338
+ // Let the trailing-edge flush fire
339
+ jest.advanceTimersByTime(260);
340
+ const writes = mockBridge.request.mock.calls.filter((call) => call[0] === 'storage_write');
341
+ // Total writes over the burst: at most 2 (one at maxWait, one trailing).
342
+ // Never 60. Final write contains the last value.
343
+ expect(writes.length).toBeGreaterThanOrEqual(1);
344
+ expect(writes.length).toBeLessThanOrEqual(2);
345
+ expect(writes[writes.length - 1][1]).toEqual({
346
+ path: '__state/counter',
347
+ content: JSON.stringify(60),
348
+ });
349
+ }
350
+ finally {
351
+ jest.useRealTimers();
352
+ }
353
+ });
354
+ it('enforces maxWait so continuous updates still persist at least once per second', () => {
355
+ jest.useFakeTimers();
356
+ try {
357
+ const { usePersistentState } = require('./hooks');
358
+ const [, setValue] = usePersistentState('counter', 0);
359
+ mockBridge.request.mockClear();
360
+ // Continuous updates every 50ms for 3 seconds — trailing-edge never fires
361
+ // because there's always another call within 250ms, so only the maxWait
362
+ // (1000ms) cap can trigger writes.
363
+ for (let t = 0; t < 3000; t += 50) {
364
+ setValue(t);
365
+ jest.advanceTimersByTime(50);
366
+ }
367
+ const writes = countStorageWrites('counter');
368
+ // Roughly 3 writes (one per 1000ms maxWait window) — allow a small jitter range
369
+ expect(writes).toBeGreaterThanOrEqual(2);
370
+ expect(writes).toBeLessThanOrEqual(4);
371
+ }
372
+ finally {
373
+ jest.useRealTimers();
374
+ }
375
+ });
376
+ it('flushes pending write on unmount', () => {
377
+ jest.useFakeTimers();
378
+ try {
379
+ const { usePersistentState } = require('./hooks');
380
+ const [, setValue] = usePersistentState('counter', 0);
381
+ mockBridge.request.mockClear();
382
+ setValue(7);
383
+ expect(countStorageWrites('counter')).toBe(0);
384
+ // Invoke the effect cleanup captured by the react mock — simulates unmount
385
+ expect(capturedEffectCleanup).not.toBeNull();
386
+ capturedEffectCleanup();
387
+ expect(countStorageWrites('counter')).toBe(1);
388
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
389
+ path: '__state/counter',
390
+ content: JSON.stringify(7),
391
+ });
392
+ }
393
+ finally {
394
+ jest.useRealTimers();
395
+ }
396
+ });
303
397
  });
304
398
  });
305
399
  //# sourceMappingURL=hooks.test.js.map