@fias/arche-sdk 1.1.2 → 1.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAgBjB;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,mBAAmB,CAAqC;IAChE,OAAO,CAAC,SAAS,CAAS;;IAU1B;;;OAGG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAgB,GAAG,IAAI;IAI5F;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAoB7E,SAAS,IAAI,MAAM;IAInB,cAAc,IAAI,gBAAgB,EAAE;IAIpC,QAAQ,IAAI,SAAS,GAAG,IAAI;IAI5B,cAAc,IAAI,MAAM;IAIxB,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAK/D,kBAAkB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAKhE;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,aAAa,CAiDnB;IAEF,OAAO,CAAC,IAAI;CAWb;AAOD,wBAAgB,SAAS,IAAI,UAAU,CAKtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,uBAAuB,EACvB,SAAS,EACT,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAgBjB;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAyC;IAC/D,OAAO,CAAC,mBAAmB,CAAqC;IAChE,OAAO,CAAC,SAAS,CAAS;;IAU1B;;;OAGG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAgB,GAAG,IAAI;IAI5F;;OAEG;IACG,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAoB7E,SAAS,IAAI,MAAM;IAInB,cAAc,IAAI,gBAAgB,EAAE;IAIpC,QAAQ,IAAI,SAAS,GAAG,IAAI;IAI5B,cAAc,IAAI,MAAM;IAIxB,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI;IAK/D,kBAAkB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAKhE;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf,OAAO,CAAC,aAAa,CAiDnB;IAEF,OAAO,CAAC,IAAI;CAWb;AASD,wBAAgB,SAAS,IAAI,UAAU,CAKtC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAGlC"}
package/dist/bridge.js CHANGED
@@ -182,9 +182,11 @@ class FiasBridge {
182
182
  }
183
183
  exports.FiasBridge = FiasBridge;
184
184
  /**
185
- * Singleton bridge instance. Created lazily on first access.
185
+ * Singleton bridge instance. Eagerly created at module scope so the
186
+ * message listener is registered synchronously during import, before
187
+ * the iframe `load` event fires and the host sends the init message.
186
188
  */
187
- let bridgeInstance = null;
189
+ let bridgeInstance = typeof window !== 'undefined' ? new FiasBridge() : null;
188
190
  function getBridge() {
189
191
  if (!bridgeInstance) {
190
192
  bridgeInstance = new FiasBridge();
@@ -1 +1 @@
1
- {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bridge.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.test.d.ts","sourceRoot":"","sources":["../src/bridge.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,407 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bridge_1 = require("./bridge");
4
+ // ---------------------------------------------------------------------------
5
+ // Window mock helpers
6
+ // ---------------------------------------------------------------------------
7
+ const listeners = {};
8
+ const postMessageSpy = jest.fn();
9
+ function setupWindowMock() {
10
+ global.window = {
11
+ addEventListener: jest.fn((type, handler) => {
12
+ if (!listeners[type])
13
+ listeners[type] = [];
14
+ listeners[type].push(handler);
15
+ }),
16
+ removeEventListener: jest.fn((type, handler) => {
17
+ if (listeners[type]) {
18
+ listeners[type] = listeners[type].filter((h) => h !== handler);
19
+ }
20
+ }),
21
+ parent: { postMessage: postMessageSpy },
22
+ };
23
+ }
24
+ function teardownWindowMock() {
25
+ for (const key of Object.keys(listeners)) {
26
+ delete listeners[key];
27
+ }
28
+ postMessageSpy.mockReset();
29
+ delete global.window;
30
+ }
31
+ function dispatchMessage(data) {
32
+ const handlers = [...(listeners['message'] || [])];
33
+ for (const handler of handlers) {
34
+ handler({ data, source: null });
35
+ }
36
+ }
37
+ /** Flush microtask queue (let awaited promises resolve) */
38
+ function flushMicrotasks() {
39
+ return new Promise((r) => process.nextTick(r));
40
+ }
41
+ const MOCK_THEME = {
42
+ mode: 'dark',
43
+ colors: {
44
+ primary: '#6d28d9',
45
+ secondary: '#1e1b4b',
46
+ background: '#0a0a0f',
47
+ surface: '#27272a',
48
+ text: '#e4e4e7',
49
+ textSecondary: '#a1a1aa',
50
+ border: '#3f3f46',
51
+ error: '#ef4444',
52
+ warning: '#f59e0b',
53
+ success: '#22c55e',
54
+ },
55
+ spacing: { xs: '4px', sm: '8px', md: '16px', lg: '24px', xl: '32px' },
56
+ fonts: {
57
+ body: 'sans-serif',
58
+ heading: 'sans-serif',
59
+ mono: 'monospace',
60
+ },
61
+ };
62
+ function sendInit(overrides = {}) {
63
+ dispatchMessage({
64
+ type: 'init',
65
+ messageId: 'init_0',
66
+ payload: {
67
+ archId: 'arche_test',
68
+ permissions: ['theme:read', 'entities:invoke'],
69
+ theme: MOCK_THEME,
70
+ currentPath: '/test',
71
+ ...overrides,
72
+ },
73
+ });
74
+ }
75
+ /** Find the last postMessage call matching a given type */
76
+ function findSentMessage(type) {
77
+ const calls = postMessageSpy.mock.calls;
78
+ for (let i = calls.length - 1; i >= 0; i--) {
79
+ if (calls[i][0]?.type === type)
80
+ return calls[i][0];
81
+ }
82
+ return undefined;
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Tests
86
+ // ---------------------------------------------------------------------------
87
+ describe('FiasBridge', () => {
88
+ beforeEach(() => {
89
+ setupWindowMock();
90
+ });
91
+ afterEach(() => {
92
+ teardownWindowMock();
93
+ });
94
+ describe('constructor / attach', () => {
95
+ it('registers a message listener on construction', () => {
96
+ new bridge_1.FiasBridge();
97
+ expect(window.addEventListener).toHaveBeenCalledWith('message', expect.any(Function));
98
+ });
99
+ it('does not register duplicate listeners on multiple attach() calls', () => {
100
+ const bridge = new bridge_1.FiasBridge();
101
+ bridge.attach();
102
+ bridge.attach();
103
+ expect(window.addEventListener).toHaveBeenCalledTimes(1);
104
+ });
105
+ it('can re-attach after destroy', () => {
106
+ const bridge = new bridge_1.FiasBridge();
107
+ bridge.destroy();
108
+ bridge.attach();
109
+ expect(window.addEventListener).toHaveBeenCalledTimes(2);
110
+ });
111
+ });
112
+ describe('waitForInit', () => {
113
+ it('resolves when init message is received', async () => {
114
+ const bridge = new bridge_1.FiasBridge();
115
+ const initPromise = bridge.waitForInit();
116
+ sendInit();
117
+ await expect(initPromise).resolves.toBeUndefined();
118
+ });
119
+ it('resolves immediately if already initialized', async () => {
120
+ const bridge = new bridge_1.FiasBridge();
121
+ sendInit();
122
+ await bridge.waitForInit();
123
+ await expect(bridge.waitForInit()).resolves.toBeUndefined();
124
+ });
125
+ it('stores init payload data', async () => {
126
+ const bridge = new bridge_1.FiasBridge();
127
+ sendInit();
128
+ await bridge.waitForInit();
129
+ expect(bridge.getArchId()).toBe('arche_test');
130
+ expect(bridge.getPermissions()).toEqual(['theme:read', 'entities:invoke']);
131
+ expect(bridge.getTheme()).toEqual(MOCK_THEME);
132
+ expect(bridge.getCurrentPath()).toBe('/test');
133
+ });
134
+ it('returns a copy of permissions (not a reference)', async () => {
135
+ const bridge = new bridge_1.FiasBridge();
136
+ sendInit();
137
+ await bridge.waitForInit();
138
+ const perms1 = bridge.getPermissions();
139
+ const perms2 = bridge.getPermissions();
140
+ expect(perms1).not.toBe(perms2);
141
+ expect(perms1).toEqual(perms2);
142
+ });
143
+ });
144
+ describe('ready / resize / showToast', () => {
145
+ it('sends ready message via postMessage', () => {
146
+ const bridge = new bridge_1.FiasBridge();
147
+ bridge.ready();
148
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({ type: 'ready', payload: {} }), '*');
149
+ });
150
+ it('sends resize message with height', () => {
151
+ const bridge = new bridge_1.FiasBridge();
152
+ bridge.resize(500);
153
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({ type: 'resize', payload: { height: 500 } }), '*');
154
+ });
155
+ it('sends toast message with default variant', () => {
156
+ const bridge = new bridge_1.FiasBridge();
157
+ bridge.showToast('Hello');
158
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({
159
+ type: 'toast',
160
+ payload: { message: 'Hello', variant: 'info' },
161
+ }), '*');
162
+ });
163
+ it('sends toast message with custom variant', () => {
164
+ const bridge = new bridge_1.FiasBridge();
165
+ bridge.showToast('Error!', 'error');
166
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({
167
+ type: 'toast',
168
+ payload: { message: 'Error!', variant: 'error' },
169
+ }), '*');
170
+ });
171
+ });
172
+ describe('request', () => {
173
+ it('sends a request and resolves on response', async () => {
174
+ const bridge = new bridge_1.FiasBridge();
175
+ sendInit();
176
+ await bridge.waitForInit();
177
+ postMessageSpy.mockClear();
178
+ const requestPromise = bridge.request('get_user', {});
179
+ // Flush microtasks so the awaited waitForInit() inside request() resolves
180
+ await flushMicrotasks();
181
+ const sentMessage = findSentMessage('get_user');
182
+ expect(sentMessage).toBeDefined();
183
+ dispatchMessage({
184
+ type: 'response',
185
+ messageId: sentMessage.messageId,
186
+ payload: { userId: 'user_123', displayName: 'Test', avatar: null },
187
+ });
188
+ await expect(requestPromise).resolves.toEqual({
189
+ userId: 'user_123',
190
+ displayName: 'Test',
191
+ avatar: null,
192
+ });
193
+ });
194
+ it('rejects on error response', async () => {
195
+ const bridge = new bridge_1.FiasBridge();
196
+ sendInit();
197
+ await bridge.waitForInit();
198
+ postMessageSpy.mockClear();
199
+ const requestPromise = bridge.request('storage_read', { path: '/test' });
200
+ await flushMicrotasks();
201
+ const sentMessage = findSentMessage('storage_read');
202
+ expect(sentMessage).toBeDefined();
203
+ dispatchMessage({
204
+ type: 'response',
205
+ messageId: sentMessage.messageId,
206
+ payload: null,
207
+ error: 'Permission denied',
208
+ });
209
+ await expect(requestPromise).rejects.toThrow('Permission denied');
210
+ });
211
+ it('rejects on timeout', async () => {
212
+ jest.useFakeTimers();
213
+ try {
214
+ const bridge = new bridge_1.FiasBridge();
215
+ sendInit();
216
+ const requestPromise = bridge.request('get_theme', {});
217
+ // Set up the assertion before advancing timers so the rejection is caught
218
+ const assertion = expect(requestPromise).rejects.toThrow('Bridge request timed out: get_theme');
219
+ await jest.advanceTimersByTimeAsync(30001);
220
+ await assertion;
221
+ }
222
+ finally {
223
+ jest.useRealTimers();
224
+ }
225
+ });
226
+ it('waits for init before sending', () => {
227
+ const bridge = new bridge_1.FiasBridge();
228
+ postMessageSpy.mockClear();
229
+ // Start request without await — blocks on waitForInit which never resolves
230
+ const promise = bridge.request('get_user', {});
231
+ promise.catch(() => { }); // suppress unhandled rejection on cleanup
232
+ // Synchronously: no message sent because init hasn't happened
233
+ expect(findSentMessage('get_user')).toBeUndefined();
234
+ // Clean up dangling promise
235
+ bridge.destroy();
236
+ });
237
+ });
238
+ describe('theme updates', () => {
239
+ it('notifies theme listeners', () => {
240
+ const bridge = new bridge_1.FiasBridge();
241
+ const listener = jest.fn();
242
+ bridge.onThemeUpdate(listener);
243
+ const newTheme = { ...MOCK_THEME, mode: 'light' };
244
+ dispatchMessage({ type: 'theme_update', payload: newTheme });
245
+ expect(listener).toHaveBeenCalledWith(newTheme);
246
+ expect(bridge.getTheme()).toEqual(newTheme);
247
+ });
248
+ it('allows unsubscribing from theme updates', () => {
249
+ const bridge = new bridge_1.FiasBridge();
250
+ const listener = jest.fn();
251
+ const unsubscribe = bridge.onThemeUpdate(listener);
252
+ unsubscribe();
253
+ dispatchMessage({ type: 'theme_update', payload: MOCK_THEME });
254
+ expect(listener).not.toHaveBeenCalled();
255
+ });
256
+ });
257
+ describe('navigation updates', () => {
258
+ it('notifies navigation listeners', () => {
259
+ const bridge = new bridge_1.FiasBridge();
260
+ const listener = jest.fn();
261
+ bridge.onNavigationUpdate(listener);
262
+ dispatchMessage({ type: 'navigate_update', payload: '/new-path' });
263
+ expect(listener).toHaveBeenCalledWith('/new-path');
264
+ expect(bridge.getCurrentPath()).toBe('/new-path');
265
+ });
266
+ it('allows unsubscribing from navigation updates', () => {
267
+ const bridge = new bridge_1.FiasBridge();
268
+ const listener = jest.fn();
269
+ const unsubscribe = bridge.onNavigationUpdate(listener);
270
+ unsubscribe();
271
+ dispatchMessage({ type: 'navigate_update', payload: '/new-path' });
272
+ expect(listener).not.toHaveBeenCalled();
273
+ });
274
+ });
275
+ describe('destroy', () => {
276
+ it('removes the message listener', () => {
277
+ const bridge = new bridge_1.FiasBridge();
278
+ bridge.destroy();
279
+ expect(window.removeEventListener).toHaveBeenCalledWith('message', expect.any(Function));
280
+ });
281
+ it('rejects pending requests', async () => {
282
+ jest.useFakeTimers();
283
+ try {
284
+ const bridge = new bridge_1.FiasBridge();
285
+ sendInit();
286
+ const requestPromise = bridge.request('get_user', {});
287
+ // Flush microtasks so request() passes waitForInit and registers the pending request
288
+ await jest.advanceTimersByTimeAsync(0);
289
+ bridge.destroy();
290
+ await expect(requestPromise).rejects.toThrow('Bridge destroyed');
291
+ }
292
+ finally {
293
+ jest.useRealTimers();
294
+ }
295
+ });
296
+ it('clears theme and navigation listeners', () => {
297
+ const bridge = new bridge_1.FiasBridge();
298
+ const themeListener = jest.fn();
299
+ const navListener = jest.fn();
300
+ bridge.onThemeUpdate(themeListener);
301
+ bridge.onNavigationUpdate(navListener);
302
+ bridge.destroy();
303
+ bridge.attach();
304
+ dispatchMessage({ type: 'theme_update', payload: MOCK_THEME });
305
+ dispatchMessage({ type: 'navigate_update', payload: '/path' });
306
+ expect(themeListener).not.toHaveBeenCalled();
307
+ expect(navListener).not.toHaveBeenCalled();
308
+ });
309
+ it('is safe to call multiple times', () => {
310
+ const bridge = new bridge_1.FiasBridge();
311
+ bridge.destroy();
312
+ expect(() => bridge.destroy()).not.toThrow();
313
+ });
314
+ });
315
+ describe('handleMessage edge cases', () => {
316
+ it('ignores null messages', () => {
317
+ new bridge_1.FiasBridge();
318
+ expect(() => dispatchMessage(null)).not.toThrow();
319
+ });
320
+ it('ignores non-object messages', () => {
321
+ new bridge_1.FiasBridge();
322
+ expect(() => dispatchMessage('hello')).not.toThrow();
323
+ });
324
+ it('ignores messages without a type field', () => {
325
+ new bridge_1.FiasBridge();
326
+ expect(() => dispatchMessage({ payload: 'test' })).not.toThrow();
327
+ });
328
+ it('ignores response messages with unknown messageId', () => {
329
+ new bridge_1.FiasBridge();
330
+ expect(() => dispatchMessage({
331
+ type: 'response',
332
+ messageId: 'unknown_123',
333
+ payload: {},
334
+ })).not.toThrow();
335
+ });
336
+ });
337
+ describe('send without window', () => {
338
+ it('does not throw when window is undefined', () => {
339
+ teardownWindowMock();
340
+ const bridge = new bridge_1.FiasBridge();
341
+ expect(() => bridge.ready()).not.toThrow();
342
+ setupWindowMock();
343
+ });
344
+ });
345
+ });
346
+ describe('getBridge / resetBridge', () => {
347
+ beforeEach(() => {
348
+ setupWindowMock();
349
+ (0, bridge_1.resetBridge)();
350
+ });
351
+ afterEach(() => {
352
+ (0, bridge_1.resetBridge)();
353
+ teardownWindowMock();
354
+ });
355
+ it('returns the same singleton instance', () => {
356
+ const a = (0, bridge_1.getBridge)();
357
+ const b = (0, bridge_1.getBridge)();
358
+ expect(a).toBe(b);
359
+ });
360
+ it('creates a new instance after resetBridge()', () => {
361
+ const a = (0, bridge_1.getBridge)();
362
+ (0, bridge_1.resetBridge)();
363
+ const b = (0, bridge_1.getBridge)();
364
+ expect(a).not.toBe(b);
365
+ });
366
+ it('resetBridge destroys the existing instance', () => {
367
+ const bridge = (0, bridge_1.getBridge)();
368
+ const destroySpy = jest.spyOn(bridge, 'destroy');
369
+ (0, bridge_1.resetBridge)();
370
+ expect(destroySpy).toHaveBeenCalled();
371
+ });
372
+ it('resetBridge is safe to call when no instance exists', () => {
373
+ (0, bridge_1.resetBridge)();
374
+ expect(() => (0, bridge_1.resetBridge)()).not.toThrow();
375
+ });
376
+ });
377
+ describe('StrictMode resilience', () => {
378
+ beforeEach(() => {
379
+ setupWindowMock();
380
+ (0, bridge_1.resetBridge)();
381
+ });
382
+ afterEach(() => {
383
+ (0, bridge_1.resetBridge)();
384
+ teardownWindowMock();
385
+ });
386
+ it('bridge survives destroy + re-attach cycle (simulates StrictMode)', async () => {
387
+ const bridge = (0, bridge_1.getBridge)();
388
+ const firstInit = bridge.waitForInit();
389
+ // StrictMode cleanup
390
+ bridge.destroy();
391
+ // StrictMode re-mount
392
+ bridge.attach();
393
+ const secondInit = bridge.waitForInit();
394
+ // Host sends init after re-mount
395
+ sendInit();
396
+ await expect(secondInit).resolves.toBeUndefined();
397
+ expect(bridge.getArchId()).toBe('arche_test');
398
+ await expect(firstInit).resolves.toBeUndefined();
399
+ });
400
+ it('singleton pattern means FiasProvider reuses the same bridge', () => {
401
+ const bridge1 = (0, bridge_1.getBridge)();
402
+ const bridge2 = (0, bridge_1.getBridge)();
403
+ expect(bridge1).toBe(bridge2);
404
+ expect(window.addEventListener).toHaveBeenCalledTimes(1);
405
+ });
406
+ });
407
+ //# sourceMappingURL=bridge.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.test.js","sourceRoot":"","sources":["../src/bridge.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=create-plugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-plugin.test.d.ts","sourceRoot":"","sources":["../../src/cli/create-plugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ describe('create-plugin CLI', () => {
3
+ let mockExit;
4
+ let consoleSpy;
5
+ let consoleErrorSpy;
6
+ const originalArgv = process.argv;
7
+ // Shared mock functions — configured per-test
8
+ const mockExistsSync = jest.fn();
9
+ const mockMkdirSync = jest.fn();
10
+ const mockReaddirSync = jest.fn();
11
+ const mockReadFileSync = jest.fn();
12
+ const mockWriteFileSync = jest.fn();
13
+ beforeEach(() => {
14
+ jest.resetModules();
15
+ mockExit = jest.spyOn(process, 'exit').mockImplementation(((code) => {
16
+ throw new Error(`process.exit(${code})`);
17
+ }));
18
+ consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
19
+ consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => { });
20
+ mockExistsSync.mockReset();
21
+ mockMkdirSync.mockReset();
22
+ mockReaddirSync.mockReset();
23
+ mockReadFileSync.mockReset();
24
+ mockWriteFileSync.mockReset();
25
+ });
26
+ afterEach(() => {
27
+ process.argv = originalArgv;
28
+ mockExit.mockRestore();
29
+ consoleSpy.mockRestore();
30
+ consoleErrorSpy.mockRestore();
31
+ });
32
+ function runCLI() {
33
+ jest.isolateModules(() => {
34
+ jest.doMock('fs', () => ({
35
+ existsSync: mockExistsSync,
36
+ mkdirSync: mockMkdirSync,
37
+ readdirSync: mockReaddirSync,
38
+ readFileSync: mockReadFileSync,
39
+ writeFileSync: mockWriteFileSync,
40
+ }));
41
+ require('./create-plugin');
42
+ });
43
+ }
44
+ it('exits with error when no project name provided', () => {
45
+ process.argv = ['node', 'create-plugin'];
46
+ expect(() => runCLI()).toThrow('process.exit(1)');
47
+ expect(consoleErrorSpy).toHaveBeenCalledWith('Usage: create-fias-plugin <project-name>');
48
+ });
49
+ it('exits with error when target directory already exists', () => {
50
+ process.argv = ['node', 'create-plugin', 'my-plugin'];
51
+ mockExistsSync.mockReturnValue(true);
52
+ expect(() => runCLI()).toThrow('process.exit(1)');
53
+ expect(consoleErrorSpy).toHaveBeenCalledWith('Error: Directory "my-plugin" already exists.');
54
+ });
55
+ it('creates plugin from template when directory does not exist', () => {
56
+ process.argv = ['node', 'create-plugin', 'test-plugin'];
57
+ mockExistsSync.mockReturnValue(false);
58
+ mockReaddirSync.mockReturnValue([{ name: 'package.json', isDirectory: () => false }]);
59
+ mockReadFileSync.mockReturnValue('{ "name": "{{name}}" }');
60
+ runCLI();
61
+ expect(mockMkdirSync).toHaveBeenCalled();
62
+ expect(mockWriteFileSync).toHaveBeenCalledWith(expect.stringContaining('package.json'), '{ "name": "test-plugin" }');
63
+ expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining('test-plugin'));
64
+ });
65
+ it('recursively copies subdirectories', () => {
66
+ process.argv = ['node', 'create-plugin', 'nested-plugin'];
67
+ mockExistsSync.mockReturnValue(false);
68
+ let callCount = 0;
69
+ mockReaddirSync.mockImplementation(() => {
70
+ callCount++;
71
+ if (callCount === 1) {
72
+ return [{ name: 'src', isDirectory: () => true }];
73
+ }
74
+ return [{ name: 'index.ts', isDirectory: () => false }];
75
+ });
76
+ mockReadFileSync.mockReturnValue('console.log("{{name}}")');
77
+ runCLI();
78
+ expect(mockMkdirSync).toHaveBeenCalledTimes(2);
79
+ expect(mockWriteFileSync).toHaveBeenCalledWith(expect.stringContaining('index.ts'), 'console.log("nested-plugin")');
80
+ });
81
+ it('replaces multiple template variables', () => {
82
+ process.argv = ['node', 'create-plugin', 'multi-replace'];
83
+ mockExistsSync.mockReturnValue(false);
84
+ mockReaddirSync.mockReturnValue([{ name: 'readme.md', isDirectory: () => false }]);
85
+ mockReadFileSync.mockReturnValue('# {{name}}\nWelcome to {{name}}');
86
+ runCLI();
87
+ expect(mockWriteFileSync).toHaveBeenCalledWith(expect.stringContaining('readme.md'), '# multi-replace\nWelcome to multi-replace');
88
+ });
89
+ });
90
+ //# sourceMappingURL=create-plugin.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-plugin.test.js","sourceRoot":"","sources":["../../src/cli/create-plugin.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fias.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fias.test.d.ts","sourceRoot":"","sources":["../src/fias.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const fias_1 = require("./fias");
4
+ const bridge_1 = require("./bridge");
5
+ const postMessageSpy = jest.fn();
6
+ beforeEach(() => {
7
+ global.window = {
8
+ addEventListener: jest.fn(),
9
+ removeEventListener: jest.fn(),
10
+ parent: { postMessage: postMessageSpy },
11
+ };
12
+ (0, bridge_1.resetBridge)();
13
+ });
14
+ afterEach(() => {
15
+ (0, bridge_1.resetBridge)();
16
+ delete global.window;
17
+ postMessageSpy.mockReset();
18
+ });
19
+ describe('fias utility namespace', () => {
20
+ it('fias.ready() sends a ready message', () => {
21
+ fias_1.fias.ready();
22
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({ type: 'ready', payload: {} }), '*');
23
+ });
24
+ it('fias.resize() sends a resize message', () => {
25
+ fias_1.fias.resize(400);
26
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({ type: 'resize', payload: { height: 400 } }), '*');
27
+ });
28
+ it('fias.showToast() sends a toast with default variant', () => {
29
+ fias_1.fias.showToast('Done');
30
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({
31
+ type: 'toast',
32
+ payload: { message: 'Done', variant: 'info' },
33
+ }), '*');
34
+ });
35
+ it('fias.showToast() sends a toast with custom variant', () => {
36
+ fias_1.fias.showToast('Oops', 'warning');
37
+ expect(postMessageSpy).toHaveBeenCalledWith(expect.objectContaining({
38
+ type: 'toast',
39
+ payload: { message: 'Oops', variant: 'warning' },
40
+ }), '*');
41
+ });
42
+ it('uses the getBridge singleton', () => {
43
+ const bridge = (0, bridge_1.getBridge)();
44
+ const readySpy = jest.spyOn(bridge, 'ready');
45
+ fias_1.fias.ready();
46
+ expect(readySpy).toHaveBeenCalled();
47
+ });
48
+ });
49
+ //# sourceMappingURL=fias.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fias.test.js","sourceRoot":"","sources":["../src/fias.test.ts"],"names":[],"mappings":";;AAAA,iCAA8B;AAC9B,qCAAkD;AAElD,MAAM,cAAc,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;AAEjC,UAAU,CAAC,GAAG,EAAE;IACb,MAAc,CAAC,MAAM,GAAG;QACvB,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC3B,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;QAC9B,MAAM,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE;KACxC,CAAC;IACF,IAAA,oBAAW,GAAE,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,IAAA,oBAAW,GAAE,CAAC;IACd,OAAQ,MAAc,CAAC,MAAM,CAAC;IAC9B,cAAc,CAAC,SAAS,EAAE,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,WAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EACvD,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,WAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,EACrE,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,WAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvB,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;SAC9C,CAAC,EACF,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,WAAI,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAClC,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CACzC,MAAM,CAAC,gBAAgB,CAAC;YACtB,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;SACjD,CAAC,EACF,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,WAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tests for SDK hooks.
3
+ *
4
+ * These test the hook logic by mocking React primitives and the bridge context.
5
+ * We mock `react` to control useState/useEffect/useCallback/useContext behavior,
6
+ * and verify hooks call the correct bridge methods.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=hooks.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.test.d.ts","sourceRoot":"","sources":["../src/hooks.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for SDK hooks.
4
+ *
5
+ * These test the hook logic by mocking React primitives and the bridge context.
6
+ * We mock `react` to control useState/useEffect/useCallback/useContext behavior,
7
+ * and verify hooks call the correct bridge methods.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ // Build a mock bridge that tracks calls
11
+ function createMockBridge() {
12
+ return {
13
+ waitForInit: jest.fn().mockResolvedValue(undefined),
14
+ ready: jest.fn(),
15
+ resize: jest.fn(),
16
+ showToast: jest.fn(),
17
+ request: jest.fn().mockResolvedValue({}),
18
+ getArchId: jest.fn().mockReturnValue('arche_test'),
19
+ getPermissions: jest.fn().mockReturnValue(['theme:read']),
20
+ getTheme: jest.fn().mockReturnValue(null),
21
+ getCurrentPath: jest.fn().mockReturnValue('/'),
22
+ onThemeUpdate: jest.fn().mockReturnValue(() => { }),
23
+ onNavigationUpdate: jest.fn().mockReturnValue(() => { }),
24
+ attach: jest.fn(),
25
+ destroy: jest.fn(),
26
+ };
27
+ }
28
+ // Mock React hooks
29
+ let mockContextValue = null;
30
+ const mockSetState = jest.fn();
31
+ let capturedEffectCleanup = null;
32
+ jest.mock('react', () => ({
33
+ createContext: jest.fn(() => ({})),
34
+ useContext: jest.fn(() => mockContextValue),
35
+ useState: jest.fn((initial) => [initial, mockSetState]),
36
+ useEffect: jest.fn((cb) => {
37
+ const cleanup = cb();
38
+ if (typeof cleanup === 'function') {
39
+ capturedEffectCleanup = cleanup;
40
+ }
41
+ }),
42
+ useCallback: jest.fn((fn) => fn),
43
+ }));
44
+ describe('SDK hooks', () => {
45
+ let mockBridge;
46
+ beforeEach(() => {
47
+ jest.clearAllMocks();
48
+ mockBridge = createMockBridge();
49
+ mockContextValue = mockBridge;
50
+ capturedEffectCleanup = null;
51
+ });
52
+ describe('useFiasUser', () => {
53
+ it('requests user profile from bridge', () => {
54
+ const { useFiasUser } = require('./hooks');
55
+ mockBridge.request.mockResolvedValue({
56
+ userId: 'user_1',
57
+ displayName: 'Test',
58
+ avatar: null,
59
+ });
60
+ const result = useFiasUser();
61
+ // Initial state is null
62
+ expect(result).toBeNull();
63
+ // Effect should have called bridge.request
64
+ expect(mockBridge.request).toHaveBeenCalledWith('get_user', {});
65
+ });
66
+ it('throws when used outside FiasProvider', () => {
67
+ mockContextValue = null;
68
+ const { useFiasUser } = require('./hooks');
69
+ expect(() => useFiasUser()).toThrow('useBridge must be used within a <FiasProvider>');
70
+ });
71
+ });
72
+ describe('useFiasTheme', () => {
73
+ it('returns initial theme from bridge and subscribes to updates', () => {
74
+ const { useFiasTheme } = require('./hooks');
75
+ const theme = { mode: 'dark', colors: {} };
76
+ mockBridge.getTheme.mockReturnValue(theme);
77
+ const result = useFiasTheme();
78
+ expect(result).toEqual(theme);
79
+ expect(mockBridge.onThemeUpdate).toHaveBeenCalled();
80
+ });
81
+ it('returns cleanup function from onThemeUpdate', () => {
82
+ const unsubscribe = jest.fn();
83
+ mockBridge.onThemeUpdate.mockReturnValue(unsubscribe);
84
+ const { useFiasTheme } = require('./hooks');
85
+ useFiasTheme();
86
+ // The effect cleanup should be the unsubscribe
87
+ expect(capturedEffectCleanup).toBe(unsubscribe);
88
+ });
89
+ });
90
+ describe('useFiasStorage', () => {
91
+ it('returns storage API methods that call bridge.request', async () => {
92
+ const { useFiasStorage } = require('./hooks');
93
+ const storage = useFiasStorage();
94
+ mockBridge.request.mockResolvedValue('file content');
95
+ await storage.readFile('/test.txt');
96
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_read', { path: '/test.txt' });
97
+ mockBridge.request.mockResolvedValue(undefined);
98
+ await storage.writeFile('/test.txt', 'data');
99
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_write', {
100
+ path: '/test.txt',
101
+ content: 'data',
102
+ });
103
+ mockBridge.request.mockResolvedValue(['a.txt', 'b.txt']);
104
+ await storage.listFiles('/prefix');
105
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_list', { prefix: '/prefix' });
106
+ mockBridge.request.mockResolvedValue(undefined);
107
+ await storage.deleteFile('/test.txt');
108
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_delete', { path: '/test.txt' });
109
+ });
110
+ it('calls listFiles without prefix', async () => {
111
+ const { useFiasStorage } = require('./hooks');
112
+ const storage = useFiasStorage();
113
+ mockBridge.request.mockResolvedValue([]);
114
+ await storage.listFiles();
115
+ expect(mockBridge.request).toHaveBeenCalledWith('storage_list', { prefix: undefined });
116
+ });
117
+ });
118
+ describe('useEntityInvocation', () => {
119
+ it('returns invoke function and initial state', () => {
120
+ const { useEntityInvocation } = require('./hooks');
121
+ const api = useEntityInvocation();
122
+ expect(api.invoke).toBeInstanceOf(Function);
123
+ expect(api.isLoading).toBe(false);
124
+ expect(api.result).toBeNull();
125
+ expect(api.error).toBeNull();
126
+ });
127
+ it('invoke calls bridge.request with entity params', async () => {
128
+ const { useEntityInvocation } = require('./hooks');
129
+ const mockResult = { output: 'response', metadata: {} };
130
+ mockBridge.request.mockResolvedValue(mockResult);
131
+ const api = useEntityInvocation();
132
+ const result = await api.invoke({
133
+ entityId: 'ent_test',
134
+ input: 'hello',
135
+ parameters: { temp: 0.7 },
136
+ });
137
+ expect(mockBridge.request).toHaveBeenCalledWith('entity_invoke', {
138
+ entityId: 'ent_test',
139
+ input: 'hello',
140
+ parameters: { temp: 0.7 },
141
+ });
142
+ expect(result).toEqual(mockResult);
143
+ });
144
+ it('invoke throws and sets error on failure', async () => {
145
+ const { useEntityInvocation } = require('./hooks');
146
+ mockBridge.request.mockRejectedValue(new Error('Credit limit'));
147
+ const api = useEntityInvocation();
148
+ await expect(api.invoke({ entityId: 'ent_test', input: 'hello' })).rejects.toThrow('Credit limit');
149
+ });
150
+ it('invoke wraps non-Error rejections', async () => {
151
+ const { useEntityInvocation } = require('./hooks');
152
+ mockBridge.request.mockRejectedValue('string error');
153
+ const api = useEntityInvocation();
154
+ await expect(api.invoke({ entityId: 'ent_test', input: 'hello' })).rejects.toThrow('string error');
155
+ });
156
+ });
157
+ describe('useFiasNavigation', () => {
158
+ it('returns current path and subscribes to updates', () => {
159
+ mockBridge.getCurrentPath.mockReturnValue('/current');
160
+ const { useFiasNavigation } = require('./hooks');
161
+ const nav = useFiasNavigation();
162
+ expect(nav.currentPath).toBe('/current');
163
+ expect(mockBridge.onNavigationUpdate).toHaveBeenCalled();
164
+ });
165
+ it('navigateTo calls bridge.request', () => {
166
+ const { useFiasNavigation } = require('./hooks');
167
+ const nav = useFiasNavigation();
168
+ nav.navigateTo('/new-path');
169
+ expect(mockBridge.request).toHaveBeenCalledWith('navigate', { path: '/new-path' });
170
+ });
171
+ it('returns cleanup function from onNavigationUpdate', () => {
172
+ const unsubscribe = jest.fn();
173
+ mockBridge.onNavigationUpdate.mockReturnValue(unsubscribe);
174
+ const { useFiasNavigation } = require('./hooks');
175
+ useFiasNavigation();
176
+ expect(capturedEffectCleanup).toBe(unsubscribe);
177
+ });
178
+ });
179
+ });
180
+ //# sourceMappingURL=hooks.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../src/hooks.test.ts"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -170,7 +170,7 @@ var FiasBridge = class {
170
170
  window.parent.postMessage(message, "*");
171
171
  }
172
172
  };
173
- var bridgeInstance = null;
173
+ var bridgeInstance = typeof window !== "undefined" ? new FiasBridge() : null;
174
174
  function getBridge() {
175
175
  if (!bridgeInstance) {
176
176
  bridgeInstance = new FiasBridge();
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tests for FiasProvider.
3
+ *
4
+ * Verifies that FiasProvider:
5
+ * 1. Uses the getBridge() singleton (not new FiasBridge())
6
+ * 2. Does NOT call bridge.destroy() on cleanup (StrictMode safety)
7
+ * 3. Waits for init before rendering children
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=provider.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.test.d.ts","sourceRoot":"","sources":["../src/provider.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ /**
3
+ * Tests for FiasProvider.
4
+ *
5
+ * Verifies that FiasProvider:
6
+ * 1. Uses the getBridge() singleton (not new FiasBridge())
7
+ * 2. Does NOT call bridge.destroy() on cleanup (StrictMode safety)
8
+ * 3. Waits for init before rendering children
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ // Mock bridge returned by getBridge
12
+ const mockBridge = {
13
+ waitForInit: jest.fn().mockResolvedValue(undefined),
14
+ ready: jest.fn(),
15
+ getTheme: jest.fn().mockReturnValue(null),
16
+ getCurrentPath: jest.fn().mockReturnValue('/'),
17
+ destroy: jest.fn(),
18
+ };
19
+ jest.mock('./bridge', () => ({
20
+ getBridge: jest.fn(() => mockBridge),
21
+ }));
22
+ // Mock context module so provider.tsx doesn't hit real createContext
23
+ const MockProvider = jest.fn(({ children }) => children);
24
+ jest.mock('./context', () => ({
25
+ FiasBridgeContext: { Provider: MockProvider },
26
+ }));
27
+ // Capture React hook calls
28
+ let capturedEffectCleanup = null;
29
+ const mockSetReady = jest.fn();
30
+ jest.mock('react', () => {
31
+ const actual = jest.requireActual('react');
32
+ return {
33
+ ...actual,
34
+ useState: jest.fn((initial) => [initial, mockSetReady]),
35
+ useMemo: jest.fn((factory) => factory()),
36
+ useEffect: jest.fn((cb) => {
37
+ const cleanup = cb();
38
+ if (typeof cleanup === 'function') {
39
+ capturedEffectCleanup = cleanup;
40
+ }
41
+ }),
42
+ };
43
+ });
44
+ describe('FiasProvider', () => {
45
+ beforeEach(() => {
46
+ jest.clearAllMocks();
47
+ capturedEffectCleanup = null;
48
+ mockBridge.waitForInit.mockResolvedValue(undefined);
49
+ });
50
+ it('uses getBridge() singleton via useMemo', () => {
51
+ const { FiasProvider } = require('./provider');
52
+ const { getBridge } = require('./bridge');
53
+ FiasProvider({ children: null });
54
+ expect(getBridge).toHaveBeenCalled();
55
+ });
56
+ it('calls bridge.waitForInit and then bridge.ready', async () => {
57
+ const { FiasProvider } = require('./provider');
58
+ FiasProvider({ children: null });
59
+ expect(mockBridge.waitForInit).toHaveBeenCalled();
60
+ // Let the waitForInit promise resolve
61
+ await Promise.resolve();
62
+ await Promise.resolve();
63
+ expect(mockBridge.ready).toHaveBeenCalled();
64
+ expect(mockSetReady).toHaveBeenCalledWith(true);
65
+ });
66
+ it('does NOT call bridge.destroy() on cleanup (StrictMode safety)', () => {
67
+ const { FiasProvider } = require('./provider');
68
+ FiasProvider({ children: null });
69
+ expect(capturedEffectCleanup).toBeDefined();
70
+ capturedEffectCleanup();
71
+ expect(mockBridge.destroy).not.toHaveBeenCalled();
72
+ });
73
+ it('does not call ready if unmounted before init resolves', async () => {
74
+ let resolveInit = () => { };
75
+ mockBridge.waitForInit.mockReturnValue(new Promise((r) => {
76
+ resolveInit = r;
77
+ }));
78
+ const { FiasProvider } = require('./provider');
79
+ FiasProvider({ children: null });
80
+ // Run cleanup before init resolves (simulates unmount)
81
+ capturedEffectCleanup();
82
+ resolveInit();
83
+ await Promise.resolve();
84
+ await Promise.resolve();
85
+ expect(mockBridge.ready).not.toHaveBeenCalled();
86
+ expect(mockSetReady).not.toHaveBeenCalledWith(true);
87
+ });
88
+ it('returns null when not ready (initial state)', () => {
89
+ const react = require('react');
90
+ react.useState.mockReturnValue([false, mockSetReady]);
91
+ const { FiasProvider } = require('./provider');
92
+ const result = FiasProvider({ children: 'child' });
93
+ expect(result).toBeNull();
94
+ });
95
+ });
96
+ //# sourceMappingURL=provider.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.test.js","sourceRoot":"","sources":["../src/provider.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fias/arche-sdk",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "SDK for building FIAS platform plugin arches",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",