asyar-sdk 3.0.1 → 3.1.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.
Files changed (49) hide show
  1. package/dist/ExtensionBridge.d.ts +1 -1
  2. package/dist/ExtensionBridge.d.ts.map +1 -1
  3. package/dist/ExtensionBridge.js +7 -4
  4. package/dist/ExtensionBridge.js.map +1 -1
  5. package/dist/ExtensionBridge.test.js +69 -0
  6. package/dist/ExtensionBridge.test.js.map +1 -1
  7. package/dist/ExtensionContext.d.ts.map +1 -1
  8. package/dist/ExtensionContext.js +2 -0
  9. package/dist/ExtensionContext.js.map +1 -1
  10. package/dist/cli/lib/manifest.d.ts +1 -1
  11. package/dist/cli/lib/manifest.d.ts.map +1 -1
  12. package/dist/cli/lib/manifest.js +4 -0
  13. package/dist/cli/lib/manifest.js.map +1 -1
  14. package/dist/contracts.d.ts +1 -0
  15. package/dist/contracts.d.ts.map +1 -1
  16. package/dist/contracts.js.map +1 -1
  17. package/dist/ipc/namespaces.d.ts +1 -1
  18. package/dist/ipc/namespaces.d.ts.map +1 -1
  19. package/dist/ipc/namespaces.js +1 -0
  20. package/dist/ipc/namespaces.js.map +1 -1
  21. package/dist/ipc/namespaces.test.js +4 -0
  22. package/dist/ipc/namespaces.test.js.map +1 -1
  23. package/dist/services/ActionServiceProxy.d.ts +1 -1
  24. package/dist/services/ActionServiceProxy.d.ts.map +1 -1
  25. package/dist/services/ActionServiceProxy.js.map +1 -1
  26. package/dist/services/BrowserServiceProxy.d.ts +29 -0
  27. package/dist/services/BrowserServiceProxy.d.ts.map +1 -0
  28. package/dist/services/BrowserServiceProxy.js +119 -0
  29. package/dist/services/BrowserServiceProxy.js.map +1 -0
  30. package/dist/services/BrowserServiceProxy.test.d.ts +2 -0
  31. package/dist/services/BrowserServiceProxy.test.d.ts.map +1 -0
  32. package/dist/services/BrowserServiceProxy.test.js +305 -0
  33. package/dist/services/BrowserServiceProxy.test.js.map +1 -0
  34. package/dist/services/IBrowserService.d.ts +140 -0
  35. package/dist/services/IBrowserService.d.ts.map +1 -0
  36. package/dist/services/IBrowserService.js +2 -0
  37. package/dist/services/IBrowserService.js.map +1 -0
  38. package/dist/types/ActionType.d.ts +2 -2
  39. package/dist/types/ActionType.d.ts.map +1 -1
  40. package/dist/types/ExtensionType.d.ts +9 -0
  41. package/dist/types/ExtensionType.d.ts.map +1 -1
  42. package/dist/view.test.js +1 -0
  43. package/dist/view.test.js.map +1 -1
  44. package/dist/worker.d.ts.map +1 -1
  45. package/dist/worker.js +2 -0
  46. package/dist/worker.js.map +1 -1
  47. package/dist/worker.test.js +1 -0
  48. package/dist/worker.test.js.map +1 -1
  49. package/package.json +1 -1
@@ -0,0 +1,119 @@
1
+ import { BaseServiceProxy } from './BaseServiceProxy';
2
+ export class BrowserServiceProxy extends BaseServiceProxy {
3
+ constructor() {
4
+ super(...arguments);
5
+ // Per-kind ref-counting state mirroring SystemEventsServiceProxy. Each kind
6
+ // owns its own subscriptionId so we can ref-count + unsubscribe independently.
7
+ this.states = new Map();
8
+ this.pushListenerInstalled = false;
9
+ }
10
+ listAvailableBrowsers() {
11
+ return this.broker.invoke('browser:listAvailableBrowsers', {}, undefined, 5000);
12
+ }
13
+ isCompanionInstalled(family) {
14
+ return this.broker.invoke('browser:isCompanionInstalled', { family }, undefined, 5000);
15
+ }
16
+ listBookmarks(filter) {
17
+ return this.broker.invoke('browser:listBookmarks', { filter: filter !== null && filter !== void 0 ? filter : {} }, undefined, 5000);
18
+ }
19
+ searchHistory(query, opts) {
20
+ return this.broker.invoke('browser:searchHistory', { query, opts: opts !== null && opts !== void 0 ? opts : {} }, undefined, 5000);
21
+ }
22
+ listTabs(filter) {
23
+ return this.broker.invoke('browser:listTabs', { filter: filter !== null && filter !== void 0 ? filter : {} }, undefined, 5000);
24
+ }
25
+ getActiveTab(browser) {
26
+ return this.broker.invoke('browser:getActiveTab', { browser }, undefined, 5000);
27
+ }
28
+ activateTab(tabId) {
29
+ return this.broker.invoke('browser:activateTab', { tabId }, undefined, 5000);
30
+ }
31
+ closeTab(tabId) {
32
+ return this.broker.invoke('browser:closeTab', { tabId }, undefined, 5000);
33
+ }
34
+ openUrl(url, target) {
35
+ return this.broker.invoke('browser:openUrl', { url, target: target !== null && target !== void 0 ? target : {} }, undefined, 5000);
36
+ }
37
+ listPairedBrowsers() {
38
+ return this.broker.invoke('browser:listPairedBrowsers', {}, undefined, 5000);
39
+ }
40
+ onTabsChanged(handler) {
41
+ return this.subscribe('tabs.changed', 'browser:subscribeTabsChanged', 'browser:unsubscribeTabsChanged', handler);
42
+ }
43
+ onPageChanged(handler) {
44
+ return this.subscribe('page.changed', 'browser:subscribePageChanged', 'browser:unsubscribePageChanged', handler);
45
+ }
46
+ subscribe(kind, subscribeMethod, unsubscribeMethod, handler) {
47
+ this.ensurePushListener();
48
+ let state = this.states.get(kind);
49
+ if (!state) {
50
+ const subscriptionIdPromise = this.broker.invoke(subscribeMethod, {}, undefined, 5000);
51
+ state = { subscriptionIdPromise, callbacks: new Set() };
52
+ this.states.set(kind, state);
53
+ }
54
+ const wrapped = (e) => handler(e);
55
+ state.callbacks.add(wrapped);
56
+ let disposed = false;
57
+ return () => {
58
+ if (disposed)
59
+ return;
60
+ disposed = true;
61
+ const s = this.states.get(kind);
62
+ if (!s)
63
+ return;
64
+ s.callbacks.delete(wrapped);
65
+ if (s.callbacks.size === 0) {
66
+ this.states.delete(kind);
67
+ s.subscriptionIdPromise
68
+ .then((id) => this.broker.invoke(unsubscribeMethod, { subscriptionId: id }, undefined, 5000))
69
+ .catch(() => {
70
+ // Subscribe failed; nothing to unsubscribe.
71
+ });
72
+ }
73
+ };
74
+ }
75
+ ensurePushListener() {
76
+ if (this.pushListenerInstalled)
77
+ return;
78
+ this.pushListenerInstalled = true;
79
+ this.broker.on('asyar:event:browser-event:push', (payload) => {
80
+ if (!payload || typeof payload !== 'object' || !('type' in payload))
81
+ return;
82
+ const env = payload;
83
+ const kind = env.type === 'tabs-changed' ? 'tabs.changed' :
84
+ env.type === 'page-changed' ? 'page.changed' :
85
+ null;
86
+ if (!kind)
87
+ return;
88
+ const state = this.states.get(kind);
89
+ if (!state)
90
+ return;
91
+ for (const cb of state.callbacks) {
92
+ try {
93
+ cb(payload);
94
+ }
95
+ catch (_a) {
96
+ // One bad callback must not block the rest on this push.
97
+ }
98
+ }
99
+ });
100
+ }
101
+ // — Page content methods (Plan 3)
102
+ getCurrentPage(browser) {
103
+ return this.broker.invoke('browser:getCurrentPage', { browser }, undefined, 10000);
104
+ }
105
+ queryPage(tabId, selector, attrs) {
106
+ return this.broker.invoke('browser:queryPage', { tabId, selector, attrs }, undefined, 10000);
107
+ }
108
+ actOnPage(tabId, action) {
109
+ return this.broker.invoke('browser:actOnPage', { tabId, action }, undefined, 10000);
110
+ }
111
+ // — Plan A (command-bar additions) —
112
+ searchWeb(text, browser) {
113
+ return this.broker.invoke('browser:searchWeb', { text, browser }, undefined, 5000);
114
+ }
115
+ getMostRecentActiveBrowser() {
116
+ return this.broker.invoke('browser:getMostRecentActiveBrowser', {}, undefined, 5000);
117
+ }
118
+ }
119
+ //# sourceMappingURL=BrowserServiceProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserServiceProxy.js","sourceRoot":"","sources":["../../src/services/BrowserServiceProxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=BrowserServiceProxy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserServiceProxy.test.d.ts","sourceRoot":"","sources":["../../src/services/BrowserServiceProxy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,305 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
11
+ // Mock MessageBroker BEFORE import (matches CacheServiceProxy.test.ts pattern)
12
+ vi.mock('../ipc/MessageBroker', () => {
13
+ return {
14
+ messageBroker: {
15
+ invoke: vi.fn(),
16
+ on: vi.fn(),
17
+ off: vi.fn(),
18
+ },
19
+ };
20
+ });
21
+ import { BrowserServiceProxy } from './BrowserServiceProxy';
22
+ import { messageBroker } from '../ipc/MessageBroker';
23
+ describe('BrowserServiceProxy', () => {
24
+ let proxy;
25
+ let mockBroker;
26
+ beforeEach(() => {
27
+ vi.clearAllMocks();
28
+ mockBroker = messageBroker;
29
+ proxy = new BrowserServiceProxy();
30
+ });
31
+ it('listAvailableBrowsers invokes browser:listAvailableBrowsers', () => __awaiter(void 0, void 0, void 0, function* () {
32
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce([]);
33
+ yield proxy.listAvailableBrowsers();
34
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:listAvailableBrowsers', {}, undefined, 5000);
35
+ }));
36
+ it('isCompanionInstalled invokes browser:isCompanionInstalled with family', () => __awaiter(void 0, void 0, void 0, function* () {
37
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce(false);
38
+ yield proxy.isCompanionInstalled('firefox');
39
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:isCompanionInstalled', { family: 'firefox' }, undefined, 5000);
40
+ }));
41
+ it('listBookmarks forwards filter', () => __awaiter(void 0, void 0, void 0, function* () {
42
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce([]);
43
+ yield proxy.listBookmarks({ query: 'doc' });
44
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:listBookmarks', { filter: { query: 'doc' } }, undefined, 5000);
45
+ }));
46
+ it('searchHistory forwards query + opts', () => __awaiter(void 0, void 0, void 0, function* () {
47
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce([]);
48
+ yield proxy.searchHistory('rust', { limit: 10 });
49
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:searchHistory', { query: 'rust', opts: { limit: 10 } }, undefined, 5000);
50
+ }));
51
+ });
52
+ describe('BrowserServiceProxy — bridge methods', () => {
53
+ let proxy;
54
+ let mockBroker;
55
+ beforeEach(() => {
56
+ vi.clearAllMocks();
57
+ mockBroker = messageBroker;
58
+ proxy = new BrowserServiceProxy();
59
+ });
60
+ it('listTabs invokes browser:listTabs', () => __awaiter(void 0, void 0, void 0, function* () {
61
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce([]);
62
+ yield proxy.listTabs({ query: 'react' });
63
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:listTabs', { filter: { query: 'react' } }, undefined, 5000);
64
+ }));
65
+ it('activateTab invokes browser:activateTab', () => __awaiter(void 0, void 0, void 0, function* () {
66
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce(undefined);
67
+ yield proxy.activateTab('t1');
68
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:activateTab', { tabId: 't1' }, undefined, 5000);
69
+ }));
70
+ it('openUrl invokes browser:openUrl with target', () => __awaiter(void 0, void 0, void 0, function* () {
71
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce(undefined);
72
+ yield proxy.openUrl('https://x', { newWindow: true });
73
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:openUrl', { url: 'https://x', target: { newWindow: true } }, undefined, 5000);
74
+ }));
75
+ it('getCurrentPage invokes browser:getCurrentPage with timeout 10000', () => __awaiter(void 0, void 0, void 0, function* () {
76
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce(null);
77
+ yield proxy.getCurrentPage();
78
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:getCurrentPage', { browser: undefined }, undefined, 10000);
79
+ }));
80
+ it('queryPage invokes browser:queryPage with timeout 10000', () => __awaiter(void 0, void 0, void 0, function* () {
81
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce([]);
82
+ yield proxy.queryPage('t1', 'body', ['class']);
83
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:queryPage', { tabId: 't1', selector: 'body', attrs: ['class'] }, undefined, 10000);
84
+ }));
85
+ it('actOnPage invokes browser:actOnPage with timeout 10000', () => __awaiter(void 0, void 0, void 0, function* () {
86
+ vi.mocked(mockBroker.invoke).mockResolvedValueOnce(undefined);
87
+ yield proxy.actOnPage('t1', { kind: 'goBack' });
88
+ expect(mockBroker.invoke).toHaveBeenCalledWith('browser:actOnPage', { tabId: 't1', action: { kind: 'goBack' } }, undefined, 10000);
89
+ }));
90
+ });
91
+ describe('BrowserServiceProxy.onTabsChanged — subscribe pattern', () => {
92
+ let proxy;
93
+ let invokeMock;
94
+ let onMock;
95
+ let offMock;
96
+ beforeEach(() => {
97
+ vi.clearAllMocks();
98
+ invokeMock = vi.fn();
99
+ onMock = vi.fn();
100
+ offMock = vi.fn();
101
+ proxy = new BrowserServiceProxy();
102
+ proxy.broker = {
103
+ invoke: invokeMock,
104
+ on: onMock,
105
+ off: offMock,
106
+ };
107
+ });
108
+ it('first listener issues browser:subscribeTabsChanged and installs push listener once', () => {
109
+ invokeMock.mockResolvedValueOnce('sub-1');
110
+ const handler = vi.fn();
111
+ proxy.onTabsChanged(handler);
112
+ expect(invokeMock).toHaveBeenCalledWith('browser:subscribeTabsChanged', {}, undefined, 5000);
113
+ expect(onMock).toHaveBeenCalledWith('asyar:event:browser-event:push', expect.any(Function));
114
+ expect(onMock).toHaveBeenCalledTimes(1);
115
+ // Second listener: no new subscribe, no new push listener.
116
+ invokeMock.mockClear();
117
+ onMock.mockClear();
118
+ proxy.onTabsChanged(vi.fn());
119
+ expect(invokeMock).not.toHaveBeenCalled();
120
+ expect(onMock).not.toHaveBeenCalled();
121
+ });
122
+ it('disposer issues browser:unsubscribeTabsChanged only when last listener is removed', () => __awaiter(void 0, void 0, void 0, function* () {
123
+ let resolveSub = () => { };
124
+ invokeMock.mockImplementation((cmd) => {
125
+ if (cmd === 'browser:subscribeTabsChanged') {
126
+ return new Promise((res) => {
127
+ resolveSub = res;
128
+ });
129
+ }
130
+ return Promise.resolve(undefined);
131
+ });
132
+ const dispose1 = proxy.onTabsChanged(vi.fn());
133
+ const dispose2 = proxy.onTabsChanged(vi.fn());
134
+ resolveSub('sub-1');
135
+ yield Promise.resolve();
136
+ // Disposing one of two listeners must NOT unsubscribe.
137
+ dispose1();
138
+ // Allow any microtask flush.
139
+ yield Promise.resolve();
140
+ yield Promise.resolve();
141
+ const unsubCallsAfterFirstDispose = invokeMock.mock.calls.filter((c) => c[0] === 'browser:unsubscribeTabsChanged');
142
+ expect(unsubCallsAfterFirstDispose).toHaveLength(0);
143
+ dispose2();
144
+ yield Promise.resolve();
145
+ yield Promise.resolve();
146
+ const unsubCalls = invokeMock.mock.calls.filter((c) => c[0] === 'browser:unsubscribeTabsChanged');
147
+ expect(unsubCalls).toHaveLength(1);
148
+ expect(unsubCalls[0]).toEqual([
149
+ 'browser:unsubscribeTabsChanged',
150
+ { subscriptionId: 'sub-1' },
151
+ undefined,
152
+ 5000,
153
+ ]);
154
+ }));
155
+ it('disposer is idempotent', () => __awaiter(void 0, void 0, void 0, function* () {
156
+ invokeMock.mockResolvedValue('sub-1');
157
+ const dispose = proxy.onTabsChanged(vi.fn());
158
+ yield Promise.resolve();
159
+ dispose();
160
+ yield Promise.resolve();
161
+ yield Promise.resolve();
162
+ const unsubCount = invokeMock.mock.calls.filter((c) => c[0] === 'browser:unsubscribeTabsChanged').length;
163
+ dispose();
164
+ yield Promise.resolve();
165
+ yield Promise.resolve();
166
+ const unsubCountAfter = invokeMock.mock.calls.filter((c) => c[0] === 'browser:unsubscribeTabsChanged').length;
167
+ expect(unsubCountAfter).toBe(unsubCount); // No extra unsubscribe on second call.
168
+ }));
169
+ it('only fires callbacks for matching tabs-changed payload', () => {
170
+ invokeMock.mockResolvedValue('sub-1');
171
+ let pushHandler;
172
+ onMock.mockImplementation((event, h) => {
173
+ if (event === 'asyar:event:browser-event:push')
174
+ pushHandler = h;
175
+ });
176
+ const handler = vi.fn();
177
+ proxy.onTabsChanged(handler);
178
+ expect(pushHandler).toBeDefined();
179
+ // Wrong shape: ignored.
180
+ pushHandler(null);
181
+ pushHandler({});
182
+ pushHandler({ type: 'something-else', tabs: [] });
183
+ expect(handler).not.toHaveBeenCalled();
184
+ // Correct shape: fired.
185
+ const evt = {
186
+ type: 'tabs-changed',
187
+ browser: { family: 'chromium', variant: 'chrome' },
188
+ tabs: [],
189
+ };
190
+ pushHandler(evt);
191
+ expect(handler).toHaveBeenCalledTimes(1);
192
+ expect(handler).toHaveBeenCalledWith(evt);
193
+ });
194
+ it('a thrown callback does not block other callbacks on the same kind', () => {
195
+ invokeMock.mockResolvedValue('sub-1');
196
+ let pushHandler;
197
+ onMock.mockImplementation((event, h) => {
198
+ if (event === 'asyar:event:browser-event:push')
199
+ pushHandler = h;
200
+ });
201
+ const a = vi.fn(() => { throw new Error('bad'); });
202
+ const b = vi.fn();
203
+ proxy.onTabsChanged(a);
204
+ proxy.onTabsChanged(b);
205
+ pushHandler({
206
+ type: 'tabs-changed',
207
+ browser: { family: 'chromium', variant: 'chrome' },
208
+ tabs: [],
209
+ });
210
+ expect(a).toHaveBeenCalledTimes(1);
211
+ expect(b).toHaveBeenCalledTimes(1);
212
+ });
213
+ });
214
+ describe('BrowserServiceProxy — command-bar additions', () => {
215
+ it('searchWeb invokes browser:searchWeb with text + browser', () => __awaiter(void 0, void 0, void 0, function* () {
216
+ const invokeMock = vi.fn(() => __awaiter(void 0, void 0, void 0, function* () { return undefined; }));
217
+ const proxy = new BrowserServiceProxy();
218
+ proxy.broker = { invoke: invokeMock, on: vi.fn(), off: vi.fn() };
219
+ yield proxy.searchWeb('react hooks');
220
+ expect(invokeMock).toHaveBeenCalledWith('browser:searchWeb', { text: 'react hooks', browser: undefined }, undefined, 5000);
221
+ }));
222
+ it('getMostRecentActiveBrowser invokes browser:getMostRecentActiveBrowser', () => __awaiter(void 0, void 0, void 0, function* () {
223
+ const invokeMock = vi.fn(() => __awaiter(void 0, void 0, void 0, function* () { return null; }));
224
+ const proxy = new BrowserServiceProxy();
225
+ proxy.broker = { invoke: invokeMock, on: vi.fn(), off: vi.fn() };
226
+ yield proxy.getMostRecentActiveBrowser();
227
+ expect(invokeMock).toHaveBeenCalledWith('browser:getMostRecentActiveBrowser', {}, undefined, 5000);
228
+ }));
229
+ });
230
+ describe('BrowserServiceProxy.onPageChanged — subscribe pattern', () => {
231
+ let proxy;
232
+ let invokeMock;
233
+ let onMock;
234
+ let offMock;
235
+ beforeEach(() => {
236
+ vi.clearAllMocks();
237
+ invokeMock = vi.fn();
238
+ onMock = vi.fn();
239
+ offMock = vi.fn();
240
+ proxy = new BrowserServiceProxy();
241
+ proxy.broker = {
242
+ invoke: invokeMock,
243
+ on: onMock,
244
+ off: offMock,
245
+ };
246
+ });
247
+ it('first listener issues browser:subscribePageChanged with empty payload (host hard-codes eventTypes)', () => {
248
+ invokeMock.mockResolvedValueOnce('sub-pg');
249
+ proxy.onPageChanged(vi.fn());
250
+ expect(invokeMock).toHaveBeenCalledWith('browser:subscribePageChanged', {}, undefined, 5000);
251
+ expect(onMock).toHaveBeenCalledWith('asyar:event:browser-event:push', expect.any(Function));
252
+ });
253
+ it('tabs-changed payload does NOT fire page-changed callback (isolation)', () => {
254
+ invokeMock.mockResolvedValue('sub');
255
+ let pushHandler;
256
+ onMock.mockImplementation((event, h) => {
257
+ if (event === 'asyar:event:browser-event:push')
258
+ pushHandler = h;
259
+ });
260
+ const pageHandler = vi.fn();
261
+ const tabsHandler = vi.fn();
262
+ proxy.onPageChanged(pageHandler);
263
+ proxy.onTabsChanged(tabsHandler);
264
+ expect(pushHandler).toBeDefined();
265
+ pushHandler({
266
+ type: 'page-changed',
267
+ browser: { family: 'chromium', variant: 'chrome' },
268
+ tabId: 't1',
269
+ page: { url: 'x', title: 'T', readableText: 'body', meta: {} },
270
+ });
271
+ expect(pageHandler).toHaveBeenCalledTimes(1);
272
+ expect(tabsHandler).toHaveBeenCalledTimes(0);
273
+ pushHandler({
274
+ type: 'tabs-changed',
275
+ browser: { family: 'chromium', variant: 'chrome' },
276
+ tabs: [],
277
+ });
278
+ expect(pageHandler).toHaveBeenCalledTimes(1);
279
+ expect(tabsHandler).toHaveBeenCalledTimes(1);
280
+ });
281
+ it('disposer issues browser:unsubscribePageChanged when last listener leaves', () => __awaiter(void 0, void 0, void 0, function* () {
282
+ let resolveSub = () => { };
283
+ invokeMock.mockImplementation((cmd) => {
284
+ if (cmd === 'browser:subscribePageChanged') {
285
+ return new Promise((res) => { resolveSub = res; });
286
+ }
287
+ return Promise.resolve(undefined);
288
+ });
289
+ const dispose = proxy.onPageChanged(vi.fn());
290
+ resolveSub('sub-pg');
291
+ yield Promise.resolve();
292
+ dispose();
293
+ yield Promise.resolve();
294
+ yield Promise.resolve();
295
+ const unsubCalls = invokeMock.mock.calls.filter((c) => c[0] === 'browser:unsubscribePageChanged');
296
+ expect(unsubCalls).toHaveLength(1);
297
+ expect(unsubCalls[0]).toEqual([
298
+ 'browser:unsubscribePageChanged',
299
+ { subscriptionId: 'sub-pg' },
300
+ undefined,
301
+ 5000,
302
+ ]);
303
+ }));
304
+ });
305
+ //# sourceMappingURL=BrowserServiceProxy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserServiceProxy.test.js","sourceRoot":"","sources":["../../src/services/BrowserServiceProxy.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ export type BrowserFamily = 'chromium' | 'firefox' | 'safari';
2
+ export interface BrowserId {
3
+ family: BrowserFamily;
4
+ variant: string;
5
+ profileId: string;
6
+ }
7
+ export interface Bookmark {
8
+ id: string;
9
+ browser: BrowserId;
10
+ title: string;
11
+ url: string;
12
+ folderPath: string[];
13
+ addedAt: number;
14
+ }
15
+ export interface HistoryEntry {
16
+ url: string;
17
+ title: string;
18
+ browser: BrowserId;
19
+ lastVisitAt: number;
20
+ visitCount: number;
21
+ }
22
+ export interface ListBookmarksFilter {
23
+ browser?: BrowserId;
24
+ query?: string;
25
+ }
26
+ export interface SearchHistoryOptions {
27
+ limit?: number;
28
+ sinceMs?: number;
29
+ }
30
+ export interface Tab {
31
+ id: string;
32
+ browser: BrowserId;
33
+ windowId: string;
34
+ index: number;
35
+ title: string;
36
+ url: string;
37
+ faviconUrl?: string;
38
+ isActive: boolean;
39
+ isPinned: boolean;
40
+ isAudible: boolean;
41
+ groupName?: string;
42
+ }
43
+ export interface OpenUrlTarget {
44
+ browser?: BrowserId;
45
+ newWindow?: boolean;
46
+ }
47
+ export interface BrowserKey {
48
+ family: BrowserFamily;
49
+ variant: string;
50
+ }
51
+ export interface TabsChangedEvent {
52
+ type: 'tabs-changed';
53
+ browser: BrowserKey;
54
+ tabs: Tab[];
55
+ }
56
+ export interface PageMeta {
57
+ description?: string;
58
+ ogImage?: string | null;
59
+ lang?: string;
60
+ }
61
+ export interface PageSnapshot {
62
+ url: string;
63
+ title: string;
64
+ readableText: string;
65
+ html?: string;
66
+ selection?: string;
67
+ meta: PageMeta;
68
+ }
69
+ export interface PageMatch {
70
+ tag: string;
71
+ attrs: Record<string, string>;
72
+ textContent: string;
73
+ }
74
+ export type PageAction = {
75
+ kind: 'reload';
76
+ } | {
77
+ kind: 'goBack';
78
+ } | {
79
+ kind: 'goForward';
80
+ } | {
81
+ kind: 'scrollToTop';
82
+ };
83
+ export interface PageChangedEvent {
84
+ type: 'page-changed';
85
+ browser: BrowserKey;
86
+ tabId: string;
87
+ page: PageSnapshot;
88
+ }
89
+ export interface IBrowserService {
90
+ /** Browsers detected on disk (have a readable data directory). No permission required. */
91
+ listAvailableBrowsers(): Promise<BrowserId[]>;
92
+ /** Returns true when the companion extension is currently paired for the given family. */
93
+ isCompanionInstalled(family: BrowserFamily): Promise<boolean>;
94
+ /** Reads bookmarks from on-disk files. Requires `browser:bookmarks.read`. */
95
+ listBookmarks(filter?: ListBookmarksFilter): Promise<Bookmark[]>;
96
+ /** Reads visit history from on-disk SQLite. Requires `browser:history.read`. */
97
+ searchHistory(query: string, opts?: SearchHistoryOptions): Promise<HistoryEntry[]>;
98
+ /** Lists open tabs from paired browsers. Requires `browser:tabs.read`. */
99
+ listTabs(filter?: {
100
+ browser?: BrowserId;
101
+ query?: string;
102
+ }): Promise<Tab[]>;
103
+ /** Returns the active tab for the given browser (or the frontmost paired browser). */
104
+ getActiveTab(browser?: BrowserId): Promise<Tab | null>;
105
+ /** Focuses the given tab. Requires `browser:tabs.control`. */
106
+ activateTab(tabId: string): Promise<void>;
107
+ /** Closes the given tab. Requires `browser:tabs.control`. */
108
+ closeTab(tabId: string): Promise<void>;
109
+ /** Opens the URL in the requested target. Requires `browser:openUrl`. */
110
+ openUrl(url: string, target?: OpenUrlTarget): Promise<void>;
111
+ /** Lists browser families/variants currently paired with the companion bridge. */
112
+ listPairedBrowsers(): Promise<BrowserKey[]>;
113
+ /**
114
+ * Subscribe to live tab changes. Requires `browser:tabs.read` (gated at the
115
+ * `browser:subscribeTabsChanged` RPC in the launcher).
116
+ *
117
+ * Returns a synchronous disposer — invoke it to unsubscribe. Listeners are
118
+ * ref-counted: the first listener issues one `browser:subscribeTabsChanged`
119
+ * RPC; subsequent listeners reuse that subscription. The last disposer
120
+ * triggers one `browser:unsubscribeTabsChanged` RPC. The disposer is
121
+ * idempotent.
122
+ */
123
+ onTabsChanged(handler: (e: TabsChangedEvent) => void): () => void;
124
+ /** Snapshot the currently active tab's page content. Requires `browser:page.read`. */
125
+ getCurrentPage(browser?: BrowserId): Promise<PageSnapshot | null>;
126
+ /** Run a CSS selector against the given tab and return matched element descriptors. Requires `browser:page.read`. */
127
+ queryPage(tabId: string, selector: string, attrs?: string[]): Promise<PageMatch[]>;
128
+ /** Perform a side-effecting action on a tab's page (reload / nav / scroll). Requires `browser:page.write`. */
129
+ actOnPage(tabId: string, action: PageAction): Promise<void>;
130
+ /**
131
+ * Subscribe to live page content changes. Requires `browser:page.read` (gated at the
132
+ * `browser:subscribePageChanged` RPC in Rust). Disposer is idempotent and ref-counted.
133
+ */
134
+ onPageChanged(handler: (e: PageChangedEvent) => void): () => void;
135
+ /** Open a web search using the browser's own default engine (new tab). Requires browser:tabs.write. */
136
+ searchWeb(text: string, browser?: BrowserId): Promise<void>;
137
+ /** The browser whose window was most recently focused (for "open new content here"). Requires browser:tabs.read. */
138
+ getMostRecentActiveBrowser(): Promise<BrowserKey | null>;
139
+ }
140
+ //# sourceMappingURL=IBrowserService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBrowserService.d.ts","sourceRoot":"","sources":["../../src/services/IBrowserService.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,aAAa,CAAC;IAEtB,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IAEZ,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;IAEnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,IAAI,EAAE,GAAG,EAAE,CAAC;CACb;AAED,MAAM,WAAW,QAAQ;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC;AAE5B,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,YAAY,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAG9B,0FAA0F;IAC1F,qBAAqB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAE9C,0FAA0F;IAC1F,oBAAoB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,6EAA6E;IAC7E,aAAa,CAAC,MAAM,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEjE,gFAAgF;IAChF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAInF,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3E,sFAAsF;IACtF,YAAY,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAEvD,8DAA8D;IAC9D,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvC,yEAAyE;IACzE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D,kFAAkF;IAClF,kBAAkB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAE5C;;;;;;;;;OASG;IACH,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAIlE,sFAAsF;IACtF,cAAc,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAElE,qHAAqH;IACrH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAEnF,8GAA8G;IAC9G,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5D;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAIlE,uGAAuG;IACvG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,oHAAoH;IACpH,0BAA0B,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CAC1D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBrowserService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBrowserService.js","sourceRoot":"","sources":["../../src/services/IBrowserService.ts"],"names":[],"mappings":""}
@@ -35,7 +35,7 @@ export interface ExtensionAction {
35
35
  extensionId: string;
36
36
  category?: string;
37
37
  context?: ActionContext;
38
- execute: () => Promise<void> | void;
38
+ execute: (payload?: unknown) => Promise<void> | void;
39
39
  confirm?: boolean;
40
40
  shortcut?: string;
41
41
  /** Renders in the launcher's danger color. Independent of `confirm`. */
@@ -51,7 +51,7 @@ export interface IActionService {
51
51
  }): void;
52
52
  getContext(): ActionContext;
53
53
  /** Register a handler for a manifest-declared action. Local-only — no IPC. */
54
- registerActionHandler(actionId: string, handler: () => Promise<void> | void): void;
54
+ registerActionHandler(actionId: string, handler: (payload?: unknown) => Promise<void> | void): void;
55
55
  }
56
56
  /**
57
57
  * Standard action category names.
@@ -1 +1 @@
1
- {"version":3,"file":"ActionType.d.ts","sourceRoot":"","sources":["../../src/types/ActionType.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,cAAc,mBAAmB;IAEjC;;OAEG;IACH,WAAW,gBAAgB;IAE3B;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,IAAI,SAAS;IAEb;;OAEG;IACH,cAAc,mBAAmB;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe,EAAE,CAAC;IACvD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,UAAU,IAAI,aAAa,CAAC;IAC5B,8EAA8E;IAC9E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CACpF;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA"}
1
+ {"version":3,"file":"ActionType.d.ts","sourceRoot":"","sources":["../../src/types/ActionType.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,cAAc,mBAAmB;IAEjC;;OAEG;IACH,WAAW,gBAAgB;IAE3B;;OAEG;IACH,MAAM,WAAW;IAEjB;;OAEG;IACH,IAAI,SAAS;IAEb;;OAEG;IACH,cAAc,mBAAmB;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IAC9C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,eAAe,EAAE,CAAC;IACvD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/C,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACxE,UAAU,IAAI,aAAa,CAAC;IAC5B,8EAA8E;IAC9E,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;CACrG;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAA;AAEV,MAAM,MAAM,mBAAmB,GAAG,OAAO,cAAc,CAAC,MAAM,OAAO,cAAc,CAAC,CAAA"}