@onkernel/sdk 0.49.0 → 0.51.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.
- package/CHANGELOG.md +64 -0
- package/client.d.mts +5 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +5 -2
- package/client.d.ts.map +1 -1
- package/client.js +15 -2
- package/client.js.map +1 -1
- package/client.mjs +15 -2
- package/client.mjs.map +1 -1
- package/index.d.mts +2 -0
- package/index.d.mts.map +1 -1
- package/index.d.ts +2 -0
- package/index.d.ts.map +1 -1
- package/index.js +3 -1
- package/index.js.map +1 -1
- package/index.mjs +1 -0
- package/index.mjs.map +1 -1
- package/lib/browser-fetch.d.mts +7 -0
- package/lib/browser-fetch.d.mts.map +1 -0
- package/lib/browser-fetch.d.ts +7 -0
- package/lib/browser-fetch.d.ts.map +1 -0
- package/lib/browser-fetch.js +128 -0
- package/lib/browser-fetch.js.map +1 -0
- package/lib/browser-fetch.mjs +125 -0
- package/lib/browser-fetch.mjs.map +1 -0
- package/lib/browser-routing.d.mts +20 -0
- package/lib/browser-routing.d.mts.map +1 -0
- package/lib/browser-routing.d.ts +20 -0
- package/lib/browser-routing.d.ts.map +1 -0
- package/lib/browser-routing.js +246 -0
- package/lib/browser-routing.js.map +1 -0
- package/lib/browser-routing.mjs +240 -0
- package/lib/browser-routing.mjs.map +1 -0
- package/lib/join-url.d.mts +2 -0
- package/lib/join-url.d.mts.map +1 -0
- package/lib/join-url.d.ts +2 -0
- package/lib/join-url.d.ts.map +1 -0
- package/lib/join-url.js +7 -0
- package/lib/join-url.js.map +1 -0
- package/lib/join-url.mjs +4 -0
- package/lib/join-url.mjs.map +1 -0
- package/package.json +11 -1
- package/resources/auth/connections.d.mts +31 -2
- package/resources/auth/connections.d.mts.map +1 -1
- package/resources/auth/connections.d.ts +31 -2
- package/resources/auth/connections.d.ts.map +1 -1
- package/resources/browsers/browsers.d.mts +72 -1
- package/resources/browsers/browsers.d.mts.map +1 -1
- package/resources/browsers/browsers.d.ts +72 -1
- package/resources/browsers/browsers.d.ts.map +1 -1
- package/resources/browsers/browsers.js +23 -0
- package/resources/browsers/browsers.js.map +1 -1
- package/resources/browsers/browsers.mjs +23 -0
- package/resources/browsers/browsers.mjs.map +1 -1
- package/resources/browsers/index.d.mts +1 -1
- package/resources/browsers/index.d.mts.map +1 -1
- package/resources/browsers/index.d.ts +1 -1
- package/resources/browsers/index.d.ts.map +1 -1
- package/resources/browsers/index.js.map +1 -1
- package/resources/browsers/index.mjs.map +1 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js.map +1 -1
- package/resources/index.mjs.map +1 -1
- package/resources/projects/projects.d.mts +2 -2
- package/resources/projects/projects.d.ts +2 -2
- package/resources/projects/projects.js +2 -2
- package/resources/projects/projects.mjs +2 -2
- package/src/client.ts +25 -2
- package/src/index.ts +2 -0
- package/src/lib/browser-fetch.ts +180 -0
- package/src/lib/browser-routing.ts +329 -0
- package/src/lib/join-url.ts +3 -0
- package/src/resources/auth/connections.ts +35 -2
- package/src/resources/browsers/browsers.ts +85 -0
- package/src/resources/browsers/index.ts +2 -0
- package/src/resources/index.ts +2 -0
- package/src/resources/projects/projects.ts +2 -2
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/index.mjs
CHANGED
|
@@ -3,6 +3,7 @@ export { Kernel as default } from "./client.mjs";
|
|
|
3
3
|
export { toFile } from "./core/uploads.mjs";
|
|
4
4
|
export { APIPromise } from "./core/api-promise.mjs";
|
|
5
5
|
export { Kernel } from "./client.mjs";
|
|
6
|
+
export { BrowserRouteCache } from "./lib/browser-routing.mjs";
|
|
6
7
|
export { PagePromise } from "./core/pagination.mjs";
|
|
7
8
|
export { KernelError, APIError, APIConnectionError, APIConnectionTimeoutError, APIUserAbortError, NotFoundError, ConflictError, RateLimitError, BadRequestError, AuthenticationError, InternalServerError, PermissionDeniedError, UnprocessableEntityError, } from "./core/error.mjs";
|
|
8
9
|
export { appRegistry } from "./core/app-framework.mjs";
|
package/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,MAAM,IAAI,OAAO,EAAE;OAErB,EAAmB,MAAM,EAAE;OAC3B,EAAE,UAAU,EAAE;OACd,EAAE,MAAM,EAAsB;
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,sFAAsF;OAE/E,EAAE,MAAM,IAAI,OAAO,EAAE;OAErB,EAAmB,MAAM,EAAE;OAC3B,EAAE,UAAU,EAAE;OACd,EAAE,MAAM,EAAsB;OAE9B,EAAE,iBAAiB,EAAqB;OACxC,EAAE,WAAW,EAAE;OACf,EACL,WAAW,EACX,QAAQ,EACR,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB;OAEM,EAA2C,WAAW,EAAE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RequestInfo, RequestInit } from "../internal/builtin-types.mjs";
|
|
2
|
+
import type { Kernel } from "../client.mjs";
|
|
3
|
+
export interface BrowserFetchInit extends RequestInit {
|
|
4
|
+
timeout_ms?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function browserFetch(client: Kernel, sessionId: string, input: RequestInfo | URL, init?: BrowserFetchInit): Promise<Response>;
|
|
7
|
+
//# sourceMappingURL=browser-fetch.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-fetch.d.mts","sourceRoot":"","sources":["../src/lib/browser-fetch.ts"],"names":[],"mappings":"OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE;OAMjC,KAAK,EAAE,MAAM,EAAE;AAEtB,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,QAAQ,CAAC,CAmCnB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { RequestInfo, RequestInit } from "../internal/builtin-types.js";
|
|
2
|
+
import type { Kernel } from "../client.js";
|
|
3
|
+
export interface BrowserFetchInit extends RequestInit {
|
|
4
|
+
timeout_ms?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function browserFetch(client: Kernel, sessionId: string, input: RequestInfo | URL, init?: BrowserFetchInit): Promise<Response>;
|
|
7
|
+
//# sourceMappingURL=browser-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-fetch.d.ts","sourceRoot":"","sources":["../src/lib/browser-fetch.ts"],"names":[],"mappings":"OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE;OAMjC,KAAK,EAAE,MAAM,EAAE;AAEtB,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,QAAQ,CAAC,CAmCnB"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browserFetch = browserFetch;
|
|
4
|
+
const error_1 = require("../core/error.js");
|
|
5
|
+
const headers_1 = require("../internal/headers.js");
|
|
6
|
+
const join_url_1 = require("./join-url.js");
|
|
7
|
+
async function browserFetch(client, sessionId, input, init) {
|
|
8
|
+
const route = client.browserRouteCache.get(sessionId);
|
|
9
|
+
if (!route) {
|
|
10
|
+
throw new error_1.KernelError(`browser route cache does not contain session ${sessionId}; create, retrieve, or list the browser before calling browser.fetch`);
|
|
11
|
+
}
|
|
12
|
+
const { url: targetURL, method, headers, body, signal, duplex, timeout_ms } = splitFetchArgs(input, init);
|
|
13
|
+
assertHTTPURL(targetURL);
|
|
14
|
+
const query = { url: targetURL, jwt: route.jwt };
|
|
15
|
+
if (timeout_ms !== undefined) {
|
|
16
|
+
query['timeout_ms'] = timeout_ms;
|
|
17
|
+
}
|
|
18
|
+
const accept = headers.get('accept');
|
|
19
|
+
const requestOptions = {
|
|
20
|
+
method: normalizeMethod(method),
|
|
21
|
+
path: (0, join_url_1.joinURL)(route.baseURL, '/curl/raw'),
|
|
22
|
+
query,
|
|
23
|
+
body: body,
|
|
24
|
+
headers: (0, headers_1.buildHeaders)([
|
|
25
|
+
{ Authorization: null },
|
|
26
|
+
accept ? { Accept: accept } : { Accept: '*/*' },
|
|
27
|
+
headersToRequestOptionsHeaders(headers),
|
|
28
|
+
]),
|
|
29
|
+
signal: signal ?? null,
|
|
30
|
+
__binaryResponse: true,
|
|
31
|
+
};
|
|
32
|
+
if (duplex) {
|
|
33
|
+
requestOptions.fetchOptions = { duplex };
|
|
34
|
+
}
|
|
35
|
+
return client.request(requestOptions).asResponse();
|
|
36
|
+
}
|
|
37
|
+
function normalizeMethod(method) {
|
|
38
|
+
const methodLower = method.toLowerCase();
|
|
39
|
+
const allowed = new Set(['get', 'post', 'put', 'patch', 'delete']);
|
|
40
|
+
if (!allowed.has(methodLower)) {
|
|
41
|
+
throw new error_1.KernelError(`browser.fetch unsupported HTTP method: ${method}`);
|
|
42
|
+
}
|
|
43
|
+
return methodLower;
|
|
44
|
+
}
|
|
45
|
+
function splitFetchArgs(input, init) {
|
|
46
|
+
const timeoutFromInit = init && 'timeout_ms' in init ? init['timeout_ms'] : undefined;
|
|
47
|
+
if (input instanceof Request) {
|
|
48
|
+
const headers = new Headers(input.headers);
|
|
49
|
+
if (init?.headers) {
|
|
50
|
+
const extra = new Headers(init.headers);
|
|
51
|
+
extra.forEach((value, key) => {
|
|
52
|
+
headers.set(key, value);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const out = {
|
|
56
|
+
url: input.url,
|
|
57
|
+
method: (init?.method ?? input.method)?.toUpperCase() || 'GET',
|
|
58
|
+
headers,
|
|
59
|
+
};
|
|
60
|
+
const body = init?.body ?? input.body;
|
|
61
|
+
if (body !== undefined && body !== null) {
|
|
62
|
+
out.body = body;
|
|
63
|
+
}
|
|
64
|
+
const signal = init?.signal ?? input.signal;
|
|
65
|
+
if (signal !== undefined) {
|
|
66
|
+
out.signal = signal;
|
|
67
|
+
}
|
|
68
|
+
if (init?.duplex !== undefined) {
|
|
69
|
+
out.duplex = init.duplex;
|
|
70
|
+
}
|
|
71
|
+
if (timeoutFromInit !== undefined) {
|
|
72
|
+
out.timeout_ms = timeoutFromInit;
|
|
73
|
+
}
|
|
74
|
+
return out;
|
|
75
|
+
}
|
|
76
|
+
const out = {
|
|
77
|
+
url: input instanceof URL ? input.href : String(input),
|
|
78
|
+
method: (init?.method ?? 'GET').toUpperCase(),
|
|
79
|
+
headers: new Headers(init?.headers),
|
|
80
|
+
};
|
|
81
|
+
if (init?.body !== undefined) {
|
|
82
|
+
out.body = init.body;
|
|
83
|
+
}
|
|
84
|
+
if (init?.signal !== undefined) {
|
|
85
|
+
out.signal = init.signal;
|
|
86
|
+
}
|
|
87
|
+
if (init?.duplex !== undefined) {
|
|
88
|
+
out.duplex = init.duplex;
|
|
89
|
+
}
|
|
90
|
+
if (timeoutFromInit !== undefined) {
|
|
91
|
+
out.timeout_ms = timeoutFromInit;
|
|
92
|
+
}
|
|
93
|
+
return out;
|
|
94
|
+
}
|
|
95
|
+
function assertHTTPURL(url) {
|
|
96
|
+
let parsed;
|
|
97
|
+
try {
|
|
98
|
+
parsed = new URL(url);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
throw new error_1.KernelError(`browser.fetch target must be an absolute URL; received: ${url}`);
|
|
102
|
+
}
|
|
103
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
104
|
+
throw new error_1.KernelError(`browser.fetch only supports http(s) URLs; received: ${parsed.protocol}`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function headersToRequestOptionsHeaders(headers) {
|
|
108
|
+
const out = {};
|
|
109
|
+
headers.forEach((value, key) => {
|
|
110
|
+
switch (key.toLowerCase()) {
|
|
111
|
+
case 'accept':
|
|
112
|
+
case 'content-length':
|
|
113
|
+
case 'connection':
|
|
114
|
+
case 'keep-alive':
|
|
115
|
+
case 'proxy-authenticate':
|
|
116
|
+
case 'proxy-authorization':
|
|
117
|
+
case 'te':
|
|
118
|
+
case 'trailers':
|
|
119
|
+
case 'transfer-encoding':
|
|
120
|
+
case 'upgrade':
|
|
121
|
+
return;
|
|
122
|
+
default:
|
|
123
|
+
out[key] = value;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
return out;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=browser-fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-fetch.js","sourceRoot":"","sources":["../src/lib/browser-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { KernelError } from "../core/error.mjs";
|
|
2
|
+
import { buildHeaders } from "../internal/headers.mjs";
|
|
3
|
+
import { joinURL } from "./join-url.mjs";
|
|
4
|
+
export async function browserFetch(client, sessionId, input, init) {
|
|
5
|
+
const route = client.browserRouteCache.get(sessionId);
|
|
6
|
+
if (!route) {
|
|
7
|
+
throw new KernelError(`browser route cache does not contain session ${sessionId}; create, retrieve, or list the browser before calling browser.fetch`);
|
|
8
|
+
}
|
|
9
|
+
const { url: targetURL, method, headers, body, signal, duplex, timeout_ms } = splitFetchArgs(input, init);
|
|
10
|
+
assertHTTPURL(targetURL);
|
|
11
|
+
const query = { url: targetURL, jwt: route.jwt };
|
|
12
|
+
if (timeout_ms !== undefined) {
|
|
13
|
+
query['timeout_ms'] = timeout_ms;
|
|
14
|
+
}
|
|
15
|
+
const accept = headers.get('accept');
|
|
16
|
+
const requestOptions = {
|
|
17
|
+
method: normalizeMethod(method),
|
|
18
|
+
path: joinURL(route.baseURL, '/curl/raw'),
|
|
19
|
+
query,
|
|
20
|
+
body: body,
|
|
21
|
+
headers: buildHeaders([
|
|
22
|
+
{ Authorization: null },
|
|
23
|
+
accept ? { Accept: accept } : { Accept: '*/*' },
|
|
24
|
+
headersToRequestOptionsHeaders(headers),
|
|
25
|
+
]),
|
|
26
|
+
signal: signal ?? null,
|
|
27
|
+
__binaryResponse: true,
|
|
28
|
+
};
|
|
29
|
+
if (duplex) {
|
|
30
|
+
requestOptions.fetchOptions = { duplex };
|
|
31
|
+
}
|
|
32
|
+
return client.request(requestOptions).asResponse();
|
|
33
|
+
}
|
|
34
|
+
function normalizeMethod(method) {
|
|
35
|
+
const methodLower = method.toLowerCase();
|
|
36
|
+
const allowed = new Set(['get', 'post', 'put', 'patch', 'delete']);
|
|
37
|
+
if (!allowed.has(methodLower)) {
|
|
38
|
+
throw new KernelError(`browser.fetch unsupported HTTP method: ${method}`);
|
|
39
|
+
}
|
|
40
|
+
return methodLower;
|
|
41
|
+
}
|
|
42
|
+
function splitFetchArgs(input, init) {
|
|
43
|
+
const timeoutFromInit = init && 'timeout_ms' in init ? init['timeout_ms'] : undefined;
|
|
44
|
+
if (input instanceof Request) {
|
|
45
|
+
const headers = new Headers(input.headers);
|
|
46
|
+
if (init?.headers) {
|
|
47
|
+
const extra = new Headers(init.headers);
|
|
48
|
+
extra.forEach((value, key) => {
|
|
49
|
+
headers.set(key, value);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const out = {
|
|
53
|
+
url: input.url,
|
|
54
|
+
method: (init?.method ?? input.method)?.toUpperCase() || 'GET',
|
|
55
|
+
headers,
|
|
56
|
+
};
|
|
57
|
+
const body = init?.body ?? input.body;
|
|
58
|
+
if (body !== undefined && body !== null) {
|
|
59
|
+
out.body = body;
|
|
60
|
+
}
|
|
61
|
+
const signal = init?.signal ?? input.signal;
|
|
62
|
+
if (signal !== undefined) {
|
|
63
|
+
out.signal = signal;
|
|
64
|
+
}
|
|
65
|
+
if (init?.duplex !== undefined) {
|
|
66
|
+
out.duplex = init.duplex;
|
|
67
|
+
}
|
|
68
|
+
if (timeoutFromInit !== undefined) {
|
|
69
|
+
out.timeout_ms = timeoutFromInit;
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
const out = {
|
|
74
|
+
url: input instanceof URL ? input.href : String(input),
|
|
75
|
+
method: (init?.method ?? 'GET').toUpperCase(),
|
|
76
|
+
headers: new Headers(init?.headers),
|
|
77
|
+
};
|
|
78
|
+
if (init?.body !== undefined) {
|
|
79
|
+
out.body = init.body;
|
|
80
|
+
}
|
|
81
|
+
if (init?.signal !== undefined) {
|
|
82
|
+
out.signal = init.signal;
|
|
83
|
+
}
|
|
84
|
+
if (init?.duplex !== undefined) {
|
|
85
|
+
out.duplex = init.duplex;
|
|
86
|
+
}
|
|
87
|
+
if (timeoutFromInit !== undefined) {
|
|
88
|
+
out.timeout_ms = timeoutFromInit;
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function assertHTTPURL(url) {
|
|
93
|
+
let parsed;
|
|
94
|
+
try {
|
|
95
|
+
parsed = new URL(url);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
throw new KernelError(`browser.fetch target must be an absolute URL; received: ${url}`);
|
|
99
|
+
}
|
|
100
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') {
|
|
101
|
+
throw new KernelError(`browser.fetch only supports http(s) URLs; received: ${parsed.protocol}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function headersToRequestOptionsHeaders(headers) {
|
|
105
|
+
const out = {};
|
|
106
|
+
headers.forEach((value, key) => {
|
|
107
|
+
switch (key.toLowerCase()) {
|
|
108
|
+
case 'accept':
|
|
109
|
+
case 'content-length':
|
|
110
|
+
case 'connection':
|
|
111
|
+
case 'keep-alive':
|
|
112
|
+
case 'proxy-authenticate':
|
|
113
|
+
case 'proxy-authorization':
|
|
114
|
+
case 'te':
|
|
115
|
+
case 'trailers':
|
|
116
|
+
case 'transfer-encoding':
|
|
117
|
+
case 'upgrade':
|
|
118
|
+
return;
|
|
119
|
+
default:
|
|
120
|
+
out[key] = value;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=browser-fetch.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-fetch.mjs","sourceRoot":"","sources":["../src/lib/browser-fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Fetch } from "../internal/builtin-types.mjs";
|
|
2
|
+
export type BrowserRoute = {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
baseURL: string;
|
|
5
|
+
jwt: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class BrowserRouteCache {
|
|
8
|
+
private entries;
|
|
9
|
+
get(sessionId: string): BrowserRoute | undefined;
|
|
10
|
+
set(route: BrowserRoute): void;
|
|
11
|
+
delete(sessionId: string): void;
|
|
12
|
+
clear(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare function browserRoutingSubresourcesFromEnv(): string[];
|
|
15
|
+
export declare function createRoutingFetch(innerFetch: Fetch, { apiBaseURL, subresources, cache, }: {
|
|
16
|
+
apiBaseURL: string;
|
|
17
|
+
subresources: Iterable<string>;
|
|
18
|
+
cache: BrowserRouteCache;
|
|
19
|
+
}): Fetch;
|
|
20
|
+
//# sourceMappingURL=browser-routing.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-routing.d.mts","sourceRoot":"","sources":["../src/lib/browser-routing.ts"],"names":[],"mappings":"OAAO,KAAK,EAAE,KAAK,EAA4B;AAG/C,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmC;IAElD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,IAAI;CAGd;AASD,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAc5D;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,KAAK,EACjB,EACE,UAAU,EACV,YAAY,EACZ,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,iBAAiB,CAAC;CAC1B,GACA,KAAK,CAcP"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Fetch } from "../internal/builtin-types.js";
|
|
2
|
+
export type BrowserRoute = {
|
|
3
|
+
sessionId: string;
|
|
4
|
+
baseURL: string;
|
|
5
|
+
jwt: string;
|
|
6
|
+
};
|
|
7
|
+
export declare class BrowserRouteCache {
|
|
8
|
+
private entries;
|
|
9
|
+
get(sessionId: string): BrowserRoute | undefined;
|
|
10
|
+
set(route: BrowserRoute): void;
|
|
11
|
+
delete(sessionId: string): void;
|
|
12
|
+
clear(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare function browserRoutingSubresourcesFromEnv(): string[];
|
|
15
|
+
export declare function createRoutingFetch(innerFetch: Fetch, { apiBaseURL, subresources, cache, }: {
|
|
16
|
+
apiBaseURL: string;
|
|
17
|
+
subresources: Iterable<string>;
|
|
18
|
+
cache: BrowserRouteCache;
|
|
19
|
+
}): Fetch;
|
|
20
|
+
//# sourceMappingURL=browser-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-routing.d.ts","sourceRoot":"","sources":["../src/lib/browser-routing.ts"],"names":[],"mappings":"OAAO,KAAK,EAAE,KAAK,EAA4B;AAG/C,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAmC;IAElD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD,GAAG,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAI9B,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI/B,KAAK,IAAI,IAAI;CAGd;AASD,wBAAgB,iCAAiC,IAAI,MAAM,EAAE,CAc5D;AAED,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,KAAK,EACjB,EACE,UAAU,EACV,YAAY,EACZ,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,iBAAiB,CAAC;CAC1B,GACA,KAAK,CAcP"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BrowserRouteCache = void 0;
|
|
4
|
+
exports.browserRoutingSubresourcesFromEnv = browserRoutingSubresourcesFromEnv;
|
|
5
|
+
exports.createRoutingFetch = createRoutingFetch;
|
|
6
|
+
const join_url_1 = require("./join-url.js");
|
|
7
|
+
class BrowserRouteCache {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.entries = new Map();
|
|
10
|
+
}
|
|
11
|
+
get(sessionId) {
|
|
12
|
+
return this.entries.get(sessionId);
|
|
13
|
+
}
|
|
14
|
+
set(route) {
|
|
15
|
+
this.entries.set(route.sessionId, route);
|
|
16
|
+
}
|
|
17
|
+
delete(sessionId) {
|
|
18
|
+
this.entries.delete(sessionId);
|
|
19
|
+
}
|
|
20
|
+
clear() {
|
|
21
|
+
this.entries.clear();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.BrowserRouteCache = BrowserRouteCache;
|
|
25
|
+
const BROWSER_ROUTING_SUBRESOURCES_ENV = 'KERNEL_BROWSER_ROUTING_SUBRESOURCES';
|
|
26
|
+
const DEFAULT_BROWSER_ROUTING_SUBRESOURCES = ['curl'];
|
|
27
|
+
const BROWSER_ROUTE_CACHEABLE_PATH = /^\/(?:v\d+\/)?browsers(?:\/[^/]+)?\/?$/;
|
|
28
|
+
const BROWSER_POOL_ACQUIRE_PATH = /^\/(?:v\d+\/)?browser_pools\/[^/]+\/acquire\/?$/;
|
|
29
|
+
const BROWSER_DELETE_BY_ID_PATH = /^\/(?:v\d+\/)?browsers\/([^/]+)\/?$/;
|
|
30
|
+
const BROWSER_POOL_RELEASE_PATH = /^\/(?:v\d+\/)?browser_pools\/[^/]+\/release\/?$/;
|
|
31
|
+
function browserRoutingSubresourcesFromEnv() {
|
|
32
|
+
const raw = readBrowserRoutingSubresourcesEnv();
|
|
33
|
+
if (raw === undefined) {
|
|
34
|
+
return [...DEFAULT_BROWSER_ROUTING_SUBRESOURCES];
|
|
35
|
+
}
|
|
36
|
+
if (raw.trim() === '') {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
return raw
|
|
40
|
+
.split(',')
|
|
41
|
+
.map((value) => value.trim())
|
|
42
|
+
.filter(Boolean);
|
|
43
|
+
}
|
|
44
|
+
function createRoutingFetch(innerFetch, { apiBaseURL, subresources, cache, }) {
|
|
45
|
+
const allowed = new Set([...subresources].map((value) => value.trim()).filter(Boolean));
|
|
46
|
+
const apiOrigin = new URL(apiBaseURL).origin;
|
|
47
|
+
return async (input, init) => {
|
|
48
|
+
const request = new Request(input, init);
|
|
49
|
+
const shouldSniff = shouldSniffAndPopulateCache(request, apiOrigin);
|
|
50
|
+
const response = await routeRequest(innerFetch, { input, init, request }, apiOrigin, allowed, cache);
|
|
51
|
+
if (shouldSniff) {
|
|
52
|
+
await sniffAndPopulateCache(response, cache);
|
|
53
|
+
}
|
|
54
|
+
await maybeEvictBrowserRoute(request, response, apiOrigin, cache);
|
|
55
|
+
return response;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function shouldSniffAndPopulateCache(request, apiOrigin) {
|
|
59
|
+
const url = new URL(request.url);
|
|
60
|
+
return (url.origin === apiOrigin &&
|
|
61
|
+
(BROWSER_ROUTE_CACHEABLE_PATH.test(url.pathname) || BROWSER_POOL_ACQUIRE_PATH.test(url.pathname)));
|
|
62
|
+
}
|
|
63
|
+
async function maybeEvictBrowserRoute(request, response, apiOrigin, cache) {
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const url = new URL(request.url);
|
|
68
|
+
if (url.origin !== apiOrigin) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const sessionId = deletedSessionIdFromPath(request, url.pathname) ??
|
|
72
|
+
(await releasedSessionIdFromRequest(request, url.pathname));
|
|
73
|
+
if (sessionId) {
|
|
74
|
+
cache.delete(sessionId);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function deletedSessionIdFromPath(request, pathname) {
|
|
78
|
+
if (request.method.toUpperCase() !== 'DELETE') {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const match = pathname.match(BROWSER_DELETE_BY_ID_PATH);
|
|
82
|
+
if (!match) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
const sessionId = decodeURIComponent(match[1] ?? '');
|
|
86
|
+
return sessionId || undefined;
|
|
87
|
+
}
|
|
88
|
+
async function releasedSessionIdFromRequest(request, pathname) {
|
|
89
|
+
if (request.method.toUpperCase() !== 'POST' || !BROWSER_POOL_RELEASE_PATH.test(pathname)) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
const body = await request.clone().json();
|
|
94
|
+
if (!body || typeof body !== 'object') {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const sessionId = body['session_id'];
|
|
98
|
+
return typeof sessionId === 'string' && sessionId.trim() ? sessionId.trim() : undefined;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function browserRouteFromValue(value) {
|
|
105
|
+
if (!value || typeof value !== 'object') {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const record = value;
|
|
109
|
+
const sessionId = typeof record['session_id'] === 'string' ? record['session_id'].trim() : '';
|
|
110
|
+
const baseURL = typeof record['base_url'] === 'string' ? record['base_url'].trim() : '';
|
|
111
|
+
if (!sessionId || !baseURL) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
const explicitJWT = typeof record['jwt'] === 'string' ? record['jwt'].trim() : '';
|
|
115
|
+
const cdpWsURL = typeof record['cdp_ws_url'] === 'string' ? record['cdp_ws_url'] : undefined;
|
|
116
|
+
const jwt = explicitJWT || parseJwtFromCdpWsUrl(cdpWsURL) || '';
|
|
117
|
+
if (!jwt) {
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
sessionId,
|
|
122
|
+
baseURL,
|
|
123
|
+
jwt,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
async function sniffAndPopulateCache(response, cache) {
|
|
127
|
+
const contentType = response.headers.get('content-type')?.toLowerCase() ?? '';
|
|
128
|
+
if (!contentType.includes('application/json')) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
populateCache(await response.clone().json(), cache);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Ignore malformed JSON in routing cache population.
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function populateCache(value, cache) {
|
|
139
|
+
const route = browserRouteFromValue(value);
|
|
140
|
+
if (route) {
|
|
141
|
+
cache.set(route);
|
|
142
|
+
}
|
|
143
|
+
if (Array.isArray(value)) {
|
|
144
|
+
for (const item of value) {
|
|
145
|
+
populateCache(item, cache);
|
|
146
|
+
}
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
if (!value || typeof value !== 'object') {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
for (const child of Object.values(value)) {
|
|
153
|
+
if (typeof child === 'object' && child !== null) {
|
|
154
|
+
populateCache(child, cache);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async function routeRequest(innerFetch, { input, init, request, }, apiOrigin, allowed, cache) {
|
|
159
|
+
const url = new URL(request.url);
|
|
160
|
+
if (url.origin !== apiOrigin) {
|
|
161
|
+
return innerFetch(input, init);
|
|
162
|
+
}
|
|
163
|
+
const match = url.pathname.match(/^\/(?:v\d+\/)?browsers\/([^/]+)\/([^/]+)(\/.*)?$/);
|
|
164
|
+
if (!match) {
|
|
165
|
+
return innerFetch(input, init);
|
|
166
|
+
}
|
|
167
|
+
const sessionId = decodeURIComponent(match[1] ?? '');
|
|
168
|
+
const subresource = match[2] ?? '';
|
|
169
|
+
if (!sessionId || !allowed.has(subresource)) {
|
|
170
|
+
return innerFetch(input, init);
|
|
171
|
+
}
|
|
172
|
+
const route = cache.get(sessionId);
|
|
173
|
+
if (route === undefined) {
|
|
174
|
+
return innerFetch(input, init);
|
|
175
|
+
}
|
|
176
|
+
const target = new URL((0, join_url_1.joinURL)(route.baseURL, `/${subresource}${match[3] ?? ''}`));
|
|
177
|
+
url.searchParams.forEach((value, key) => {
|
|
178
|
+
if (key !== 'jwt') {
|
|
179
|
+
target.searchParams.append(key, value);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
if (!target.searchParams.get('jwt')) {
|
|
183
|
+
target.searchParams.set('jwt', route.jwt);
|
|
184
|
+
}
|
|
185
|
+
const headers = new Headers(request.headers);
|
|
186
|
+
headers.delete('authorization');
|
|
187
|
+
return innerFetch(target.toString(), buildRoutedInit(request, init, headers));
|
|
188
|
+
}
|
|
189
|
+
function buildRoutedInit(request, originalInit, headers) {
|
|
190
|
+
const method = request.method.toUpperCase();
|
|
191
|
+
const routedInit = {
|
|
192
|
+
...(originalInit ?? {}),
|
|
193
|
+
method,
|
|
194
|
+
headers,
|
|
195
|
+
redirect: request.redirect,
|
|
196
|
+
signal: request.signal,
|
|
197
|
+
};
|
|
198
|
+
delete routedInit['body'];
|
|
199
|
+
delete routedInit['duplex'];
|
|
200
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
201
|
+
const body = requestBodyForFetch(request, originalInit);
|
|
202
|
+
if (body !== undefined) {
|
|
203
|
+
routedInit.body = body;
|
|
204
|
+
}
|
|
205
|
+
if (originalInit?.duplex !== undefined) {
|
|
206
|
+
routedInit.duplex = originalInit.duplex;
|
|
207
|
+
}
|
|
208
|
+
else if (requiresHalfDuplex(body)) {
|
|
209
|
+
routedInit.duplex = 'half';
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return routedInit;
|
|
213
|
+
}
|
|
214
|
+
function requestBodyForFetch(request, originalInit) {
|
|
215
|
+
if (originalInit?.body !== undefined && originalInit.body !== null) {
|
|
216
|
+
return originalInit.body;
|
|
217
|
+
}
|
|
218
|
+
return request.body ?? undefined;
|
|
219
|
+
}
|
|
220
|
+
function requiresHalfDuplex(body) {
|
|
221
|
+
return ((globalThis.ReadableStream && body instanceof globalThis.ReadableStream) ||
|
|
222
|
+
(typeof body === 'object' && body !== null && Symbol.asyncIterator in body));
|
|
223
|
+
}
|
|
224
|
+
function parseJwtFromCdpWsUrl(cdpWsUrl) {
|
|
225
|
+
if (!cdpWsUrl) {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
return new URL(cdpWsUrl).searchParams.get('jwt') ?? undefined;
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return undefined;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function readBrowserRoutingSubresourcesEnv() {
|
|
236
|
+
if (typeof globalThis.process !== 'undefined') {
|
|
237
|
+
const value = globalThis.process.env?.[BROWSER_ROUTING_SUBRESOURCES_ENV];
|
|
238
|
+
return typeof value === 'string' ? value : undefined;
|
|
239
|
+
}
|
|
240
|
+
if (typeof globalThis.Deno !== 'undefined') {
|
|
241
|
+
const value = globalThis.Deno.env?.get?.(BROWSER_ROUTING_SUBRESOURCES_ENV);
|
|
242
|
+
return typeof value === 'string' ? value : undefined;
|
|
243
|
+
}
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=browser-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-routing.js","sourceRoot":"","sources":["../src/lib/browser-routing.ts"],"names":[],"mappings":"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"}
|