mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-11-12 01:00:54 +00:00
* Codex worktree snapshot: startup-cleanup Co-authored-by: Codex * fix(browser): close malformed proxy connections without a reply * feat(browser): embed host browsing in terminal side panels * style(browser): blend compact browser chrome into terminal panels * feat(browser): open terminal links internally with a system browser preference * fix(browser): retain the first terminal link during panel mount replay * fix(browser): release contexts when their split pane closes * style(browser): remove the downloads panel shadow * fix(browser): ignore late downloads after panel closure * fix(browser): mount browser content on terminal auto-open * fix(browser): preserve empty-vault recovery with bookmarks * fix(browser): expose actions for supported terminal types * fix(browser): retain open requests before the panel mounts * fix(browser): align vault actions with supported hosts * fix(browser): share download controls across host contexts * fix(browser): keep vault browser requests on visible sessions * fix(browser): release contexts after workspace detach * fix(browser): enforce WebRTC routing on page contents * fix(browser): skip unsupported sessions in open requests * style(browser): encode glyphs in ASCII-safe source
37 lines
1.8 KiB
TypeScript
37 lines
1.8 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { requestHostBrowserPanel, subscribeHostBrowserPanelRequests, type HostBrowserPanelRequest } from './hostBrowserPanelRequests';
|
|
|
|
test('detached terminal requests reach the main window instead of being dropped', async () => {
|
|
const previous = Object.getOwnPropertyDescriptor(globalThis, 'window');
|
|
const forwarded: HostBrowserPanelRequest[] = [];
|
|
const delivered: HostBrowserPanelRequest[] = [];
|
|
let nativeListener: ((request: HostBrowserPanelRequest) => void) | undefined;
|
|
let removed = false;
|
|
Object.defineProperty(globalThis, 'window', { configurable: true, value: { netcatty: {
|
|
requestHostBrowserPanel: async (request: HostBrowserPanelRequest) => { forwarded.push(request); return true; },
|
|
onHostBrowserPanelRequest: (listener: typeof nativeListener) => {
|
|
nativeListener = listener;
|
|
return () => { removed = true; nativeListener = undefined; };
|
|
},
|
|
} } });
|
|
let unsubscribe: (() => void) | undefined;
|
|
try {
|
|
const request = { host: { id: 'host', hostname: 'host', label: 'Host', username: 'test' }, url: 'http://localhost:3000/' } as HostBrowserPanelRequest;
|
|
requestHostBrowserPanel(request);
|
|
await Promise.resolve();
|
|
assert.deepEqual(forwarded, [request]);
|
|
unsubscribe = subscribeHostBrowserPanelRequests((value) => delivered.push(value));
|
|
assert.ok(nativeListener);
|
|
nativeListener(request);
|
|
assert.deepEqual(delivered, [request]);
|
|
assert.equal(forwarded.length, 1, 'main-window consumption must not forward the request again');
|
|
unsubscribe(); unsubscribe = undefined;
|
|
assert.equal(removed, true);
|
|
} finally {
|
|
unsubscribe?.();
|
|
if (previous) Object.defineProperty(globalThis, 'window', previous);
|
|
else Reflect.deleteProperty(globalThis, 'window');
|
|
}
|
|
});
|