Skip to content

Commit 2f12277

Browse files
committed
refactor: replace browser-scoped client with browser routing cache
Route direct-to-VM browser requests through the shared client cache so the SDK no longer needs the generated browser session wrapper layer. Made-with: Cursor
1 parent e730af8 commit 2f12277

15 files changed

Lines changed: 590 additions & 1069 deletions

examples/browser-scoped.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
/**
2-
* Browser-scoped client: call browser VM-routed browser APIs without repeating the
3-
* session id, and run `fetch`-style HTTP through the browser network stack.
4-
*
5-
* Run after `yarn build` so `dist/` matches sources, or import from `src/` via
6-
* ts-node with path aliases.
2+
* Browser routing: keep the standard browser resource surface while routing
3+
* allowlisted subresources and raw HTTP directly to the browser VM.
74
*/
85
import Kernel from '@onkernel/sdk';
96

107
async function main() {
11-
const kernel = new Kernel();
8+
const kernel = new Kernel({
9+
browserRouting: {
10+
enabled: true,
11+
directToVMSubresources: ['computer'],
12+
},
13+
});
1214

1315
const created = await kernel.browsers.create({});
14-
const browser = kernel.forBrowser(created);
16+
kernel.browserRouteCache.prime(created);
1517

16-
await browser.computer.clickMouse({ x: 10, y: 10 });
18+
await kernel.browsers.computer.clickMouse(created.session_id, { x: 10, y: 10 });
1719

18-
const page = await browser.fetch('https://example.com', { method: 'GET' });
20+
const page = await kernel.browsers.fetch(created.session_id, 'https://example.com', { method: 'GET' });
1921
console.log('status', page.status);
2022

2123
await kernel.browsers.deleteByID(created.session_id);

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
"prepublishOnly": "echo 'to publish, run yarn build && (cd dist; yarn publish)' && exit 1",
2424
"format": "./scripts/format",
2525
"prepare": "if ./scripts/utils/check-is-in-git-install.sh; then ./scripts/build && ./scripts/utils/git-swap.sh; fi",
26-
"generate:browser-session": "ts-node -T scripts/generate-browser-session.ts",
2726
"tsn": "ts-node -r tsconfig-paths/register",
2827
"lint": "./scripts/lint",
2928
"fix": "./scripts/format"

scripts/build

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ cd "$(dirname "$0")/.."
66

77
node scripts/utils/check-version.cjs
88

9-
./node_modules/.bin/ts-node -T scripts/generate-browser-session.ts
10-
./node_modules/.bin/prettier --write src/lib/generated/browser-session-bindings.ts >/dev/null
11-
129
# Build into dist and will publish the package from there,
1310
# so that src/resources/foo.ts becomes <package root>/resources/foo.js
1411
# This way importing from `"@onkernel/sdk/resources/foo"` works

scripts/generate-browser-session.ts

Lines changed: 0 additions & 332 deletions
This file was deleted.

scripts/lint

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,6 @@ set -e
44

55
cd "$(dirname "$0")/.."
66

7-
echo "==> Regenerating browser session bindings"
8-
./node_modules/.bin/ts-node -T scripts/generate-browser-session.ts
9-
./node_modules/.bin/prettier --write src/lib/generated/browser-session-bindings.ts >/dev/null
10-
11-
echo "==> Verifying generated browser session bindings are committed"
12-
git diff --exit-code -- src/lib/generated/browser-session-bindings.ts
13-
147
echo "==> Running eslint"
158
./node_modules/.bin/eslint .
169

0 commit comments

Comments
 (0)