@onkernel/sdk 0.49.0 → 0.52.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 +86 -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 +26 -2
- package/client.js.map +1 -1
- package/client.mjs +26 -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/internal/types.d.mts +6 -6
- package/internal/types.d.mts.map +1 -1
- package/internal/types.d.ts +6 -6
- package/internal/types.d.ts.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/profiles.d.mts +1 -2
- package/resources/profiles.d.mts.map +1 -1
- package/resources/profiles.d.ts +1 -2
- package/resources/profiles.d.ts.map +1 -1
- package/resources/profiles.js +1 -2
- package/resources/profiles.js.map +1 -1
- package/resources/profiles.mjs +1 -2
- package/resources/profiles.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 +37 -2
- package/src/index.ts +2 -0
- package/src/internal/types.ts +6 -8
- 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/profiles.ts +1 -2
- 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
|
@@ -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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"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { joinURL } from "./join-url.mjs";
|
|
2
|
+
export class BrowserRouteCache {
|
|
3
|
+
constructor() {
|
|
4
|
+
this.entries = new Map();
|
|
5
|
+
}
|
|
6
|
+
get(sessionId) {
|
|
7
|
+
return this.entries.get(sessionId);
|
|
8
|
+
}
|
|
9
|
+
set(route) {
|
|
10
|
+
this.entries.set(route.sessionId, route);
|
|
11
|
+
}
|
|
12
|
+
delete(sessionId) {
|
|
13
|
+
this.entries.delete(sessionId);
|
|
14
|
+
}
|
|
15
|
+
clear() {
|
|
16
|
+
this.entries.clear();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const BROWSER_ROUTING_SUBRESOURCES_ENV = 'KERNEL_BROWSER_ROUTING_SUBRESOURCES';
|
|
20
|
+
const DEFAULT_BROWSER_ROUTING_SUBRESOURCES = ['curl'];
|
|
21
|
+
const BROWSER_ROUTE_CACHEABLE_PATH = /^\/(?:v\d+\/)?browsers(?:\/[^/]+)?\/?$/;
|
|
22
|
+
const BROWSER_POOL_ACQUIRE_PATH = /^\/(?:v\d+\/)?browser_pools\/[^/]+\/acquire\/?$/;
|
|
23
|
+
const BROWSER_DELETE_BY_ID_PATH = /^\/(?:v\d+\/)?browsers\/([^/]+)\/?$/;
|
|
24
|
+
const BROWSER_POOL_RELEASE_PATH = /^\/(?:v\d+\/)?browser_pools\/[^/]+\/release\/?$/;
|
|
25
|
+
export function browserRoutingSubresourcesFromEnv() {
|
|
26
|
+
const raw = readBrowserRoutingSubresourcesEnv();
|
|
27
|
+
if (raw === undefined) {
|
|
28
|
+
return [...DEFAULT_BROWSER_ROUTING_SUBRESOURCES];
|
|
29
|
+
}
|
|
30
|
+
if (raw.trim() === '') {
|
|
31
|
+
return [];
|
|
32
|
+
}
|
|
33
|
+
return raw
|
|
34
|
+
.split(',')
|
|
35
|
+
.map((value) => value.trim())
|
|
36
|
+
.filter(Boolean);
|
|
37
|
+
}
|
|
38
|
+
export function createRoutingFetch(innerFetch, { apiBaseURL, subresources, cache, }) {
|
|
39
|
+
const allowed = new Set([...subresources].map((value) => value.trim()).filter(Boolean));
|
|
40
|
+
const apiOrigin = new URL(apiBaseURL).origin;
|
|
41
|
+
return async (input, init) => {
|
|
42
|
+
const request = new Request(input, init);
|
|
43
|
+
const shouldSniff = shouldSniffAndPopulateCache(request, apiOrigin);
|
|
44
|
+
const response = await routeRequest(innerFetch, { input, init, request }, apiOrigin, allowed, cache);
|
|
45
|
+
if (shouldSniff) {
|
|
46
|
+
await sniffAndPopulateCache(response, cache);
|
|
47
|
+
}
|
|
48
|
+
await maybeEvictBrowserRoute(request, response, apiOrigin, cache);
|
|
49
|
+
return response;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function shouldSniffAndPopulateCache(request, apiOrigin) {
|
|
53
|
+
const url = new URL(request.url);
|
|
54
|
+
return (url.origin === apiOrigin &&
|
|
55
|
+
(BROWSER_ROUTE_CACHEABLE_PATH.test(url.pathname) || BROWSER_POOL_ACQUIRE_PATH.test(url.pathname)));
|
|
56
|
+
}
|
|
57
|
+
async function maybeEvictBrowserRoute(request, response, apiOrigin, cache) {
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const url = new URL(request.url);
|
|
62
|
+
if (url.origin !== apiOrigin) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const sessionId = deletedSessionIdFromPath(request, url.pathname) ??
|
|
66
|
+
(await releasedSessionIdFromRequest(request, url.pathname));
|
|
67
|
+
if (sessionId) {
|
|
68
|
+
cache.delete(sessionId);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function deletedSessionIdFromPath(request, pathname) {
|
|
72
|
+
if (request.method.toUpperCase() !== 'DELETE') {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const match = pathname.match(BROWSER_DELETE_BY_ID_PATH);
|
|
76
|
+
if (!match) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const sessionId = decodeURIComponent(match[1] ?? '');
|
|
80
|
+
return sessionId || undefined;
|
|
81
|
+
}
|
|
82
|
+
async function releasedSessionIdFromRequest(request, pathname) {
|
|
83
|
+
if (request.method.toUpperCase() !== 'POST' || !BROWSER_POOL_RELEASE_PATH.test(pathname)) {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
try {
|
|
87
|
+
const body = await request.clone().json();
|
|
88
|
+
if (!body || typeof body !== 'object') {
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
const sessionId = body['session_id'];
|
|
92
|
+
return typeof sessionId === 'string' && sessionId.trim() ? sessionId.trim() : undefined;
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function browserRouteFromValue(value) {
|
|
99
|
+
if (!value || typeof value !== 'object') {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
const record = value;
|
|
103
|
+
const sessionId = typeof record['session_id'] === 'string' ? record['session_id'].trim() : '';
|
|
104
|
+
const baseURL = typeof record['base_url'] === 'string' ? record['base_url'].trim() : '';
|
|
105
|
+
if (!sessionId || !baseURL) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const explicitJWT = typeof record['jwt'] === 'string' ? record['jwt'].trim() : '';
|
|
109
|
+
const cdpWsURL = typeof record['cdp_ws_url'] === 'string' ? record['cdp_ws_url'] : undefined;
|
|
110
|
+
const jwt = explicitJWT || parseJwtFromCdpWsUrl(cdpWsURL) || '';
|
|
111
|
+
if (!jwt) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
sessionId,
|
|
116
|
+
baseURL,
|
|
117
|
+
jwt,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
async function sniffAndPopulateCache(response, cache) {
|
|
121
|
+
const contentType = response.headers.get('content-type')?.toLowerCase() ?? '';
|
|
122
|
+
if (!contentType.includes('application/json')) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
populateCache(await response.clone().json(), cache);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Ignore malformed JSON in routing cache population.
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function populateCache(value, cache) {
|
|
133
|
+
const route = browserRouteFromValue(value);
|
|
134
|
+
if (route) {
|
|
135
|
+
cache.set(route);
|
|
136
|
+
}
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
for (const item of value) {
|
|
139
|
+
populateCache(item, cache);
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (!value || typeof value !== 'object') {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
for (const child of Object.values(value)) {
|
|
147
|
+
if (typeof child === 'object' && child !== null) {
|
|
148
|
+
populateCache(child, cache);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function routeRequest(innerFetch, { input, init, request, }, apiOrigin, allowed, cache) {
|
|
153
|
+
const url = new URL(request.url);
|
|
154
|
+
if (url.origin !== apiOrigin) {
|
|
155
|
+
return innerFetch(input, init);
|
|
156
|
+
}
|
|
157
|
+
const match = url.pathname.match(/^\/(?:v\d+\/)?browsers\/([^/]+)\/([^/]+)(\/.*)?$/);
|
|
158
|
+
if (!match) {
|
|
159
|
+
return innerFetch(input, init);
|
|
160
|
+
}
|
|
161
|
+
const sessionId = decodeURIComponent(match[1] ?? '');
|
|
162
|
+
const subresource = match[2] ?? '';
|
|
163
|
+
if (!sessionId || !allowed.has(subresource)) {
|
|
164
|
+
return innerFetch(input, init);
|
|
165
|
+
}
|
|
166
|
+
const route = cache.get(sessionId);
|
|
167
|
+
if (route === undefined) {
|
|
168
|
+
return innerFetch(input, init);
|
|
169
|
+
}
|
|
170
|
+
const target = new URL(joinURL(route.baseURL, `/${subresource}${match[3] ?? ''}`));
|
|
171
|
+
url.searchParams.forEach((value, key) => {
|
|
172
|
+
if (key !== 'jwt') {
|
|
173
|
+
target.searchParams.append(key, value);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
if (!target.searchParams.get('jwt')) {
|
|
177
|
+
target.searchParams.set('jwt', route.jwt);
|
|
178
|
+
}
|
|
179
|
+
const headers = new Headers(request.headers);
|
|
180
|
+
headers.delete('authorization');
|
|
181
|
+
return innerFetch(target.toString(), buildRoutedInit(request, init, headers));
|
|
182
|
+
}
|
|
183
|
+
function buildRoutedInit(request, originalInit, headers) {
|
|
184
|
+
const method = request.method.toUpperCase();
|
|
185
|
+
const routedInit = {
|
|
186
|
+
...(originalInit ?? {}),
|
|
187
|
+
method,
|
|
188
|
+
headers,
|
|
189
|
+
redirect: request.redirect,
|
|
190
|
+
signal: request.signal,
|
|
191
|
+
};
|
|
192
|
+
delete routedInit['body'];
|
|
193
|
+
delete routedInit['duplex'];
|
|
194
|
+
if (method !== 'GET' && method !== 'HEAD') {
|
|
195
|
+
const body = requestBodyForFetch(request, originalInit);
|
|
196
|
+
if (body !== undefined) {
|
|
197
|
+
routedInit.body = body;
|
|
198
|
+
}
|
|
199
|
+
if (originalInit?.duplex !== undefined) {
|
|
200
|
+
routedInit.duplex = originalInit.duplex;
|
|
201
|
+
}
|
|
202
|
+
else if (requiresHalfDuplex(body)) {
|
|
203
|
+
routedInit.duplex = 'half';
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return routedInit;
|
|
207
|
+
}
|
|
208
|
+
function requestBodyForFetch(request, originalInit) {
|
|
209
|
+
if (originalInit?.body !== undefined && originalInit.body !== null) {
|
|
210
|
+
return originalInit.body;
|
|
211
|
+
}
|
|
212
|
+
return request.body ?? undefined;
|
|
213
|
+
}
|
|
214
|
+
function requiresHalfDuplex(body) {
|
|
215
|
+
return ((globalThis.ReadableStream && body instanceof globalThis.ReadableStream) ||
|
|
216
|
+
(typeof body === 'object' && body !== null && Symbol.asyncIterator in body));
|
|
217
|
+
}
|
|
218
|
+
function parseJwtFromCdpWsUrl(cdpWsUrl) {
|
|
219
|
+
if (!cdpWsUrl) {
|
|
220
|
+
return undefined;
|
|
221
|
+
}
|
|
222
|
+
try {
|
|
223
|
+
return new URL(cdpWsUrl).searchParams.get('jwt') ?? undefined;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
return undefined;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function readBrowserRoutingSubresourcesEnv() {
|
|
230
|
+
if (typeof globalThis.process !== 'undefined') {
|
|
231
|
+
const value = globalThis.process.env?.[BROWSER_ROUTING_SUBRESOURCES_ENV];
|
|
232
|
+
return typeof value === 'string' ? value : undefined;
|
|
233
|
+
}
|
|
234
|
+
if (typeof globalThis.Deno !== 'undefined') {
|
|
235
|
+
const value = globalThis.Deno.env?.get?.(BROWSER_ROUTING_SUBRESOURCES_ENV);
|
|
236
|
+
return typeof value === 'string' ? value : undefined;
|
|
237
|
+
}
|
|
238
|
+
return undefined;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=browser-routing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-routing.mjs","sourceRoot":"","sources":["../src/lib/browser-routing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-url.d.mts","sourceRoot":"","sources":["../src/lib/join-url.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-url.d.ts","sourceRoot":"","sources":["../src/lib/join-url.ts"],"names":[],"mappings":"AAAA,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
package/lib/join-url.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.joinURL = joinURL;
|
|
4
|
+
function joinURL(baseURL, path) {
|
|
5
|
+
return `${baseURL.replace(/\/+$/, '')}${path.startsWith('/') ? path : `/${path}`}`;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=join-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-url.js","sourceRoot":"","sources":["../src/lib/join-url.ts"],"names":[],"mappings":";;AAAA,0BAEC;AAFD,SAAgB,OAAO,CAAC,OAAe,EAAE,IAAY;IACnD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACrF,CAAC"}
|
package/lib/join-url.mjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"join-url.mjs","sourceRoot":"","sources":["../src/lib/join-url.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,IAAY;IACnD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;AACrF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onkernel/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.52.0",
|
|
4
4
|
"description": "The official TypeScript library for the Kernel API",
|
|
5
5
|
"author": "Kernel <>",
|
|
6
6
|
"types": "./index.d.ts",
|
|
@@ -95,6 +95,16 @@
|
|
|
95
95
|
"./index.mjs": {
|
|
96
96
|
"default": "./index.mjs"
|
|
97
97
|
},
|
|
98
|
+
"./lib/*.mjs": {
|
|
99
|
+
"default": "./lib/*.mjs"
|
|
100
|
+
},
|
|
101
|
+
"./lib/*.js": {
|
|
102
|
+
"default": "./lib/*.js"
|
|
103
|
+
},
|
|
104
|
+
"./lib/*": {
|
|
105
|
+
"import": "./lib/*.mjs",
|
|
106
|
+
"require": "./lib/*.js"
|
|
107
|
+
},
|
|
98
108
|
"./pagination": {
|
|
99
109
|
"import": "./pagination.mjs",
|
|
100
110
|
"require": "./pagination.js"
|
|
@@ -184,6 +184,12 @@ export interface ManagedAuth {
|
|
|
184
184
|
* - Ping Identity: _.pingone.com, _.pingidentity.com
|
|
185
185
|
*/
|
|
186
186
|
allowed_domains?: Array<string>;
|
|
187
|
+
/**
|
|
188
|
+
* ID of the underlying browser session driving the current flow (present when flow
|
|
189
|
+
* in progress). Use this to inspect or terminate the browser session via the
|
|
190
|
+
* `/browsers` API.
|
|
191
|
+
*/
|
|
192
|
+
browser_session_id?: string | null;
|
|
187
193
|
/**
|
|
188
194
|
* Whether automatic re-authentication is possible (has credential, selectors, and
|
|
189
195
|
* login_url)
|
|
@@ -219,7 +225,10 @@ export interface ManagedAuth {
|
|
|
219
225
|
*/
|
|
220
226
|
external_action_message?: string | null;
|
|
221
227
|
/**
|
|
222
|
-
* When the current flow expires (null when no flow in progress)
|
|
228
|
+
* When the current flow expires (null when no flow in progress). A flow past this
|
|
229
|
+
* timestamp is no longer valid and its `flow_status` will be `EXPIRED`. Clients
|
|
230
|
+
* may start a new login to supersede a stale `IN_PROGRESS` flow past this
|
|
231
|
+
* timestamp.
|
|
223
232
|
*/
|
|
224
233
|
flow_expires_at?: string | null;
|
|
225
234
|
/**
|
|
@@ -247,9 +256,19 @@ export interface ManagedAuth {
|
|
|
247
256
|
*/
|
|
248
257
|
hosted_url?: string | null;
|
|
249
258
|
/**
|
|
250
|
-
*
|
|
259
|
+
* @deprecated Deprecated alias for `last_auth_check_at`. Despite the name, this is
|
|
260
|
+
* the last health-check timestamp, not the last successful authentication. Use
|
|
261
|
+
* `last_auth_check_at` instead.
|
|
251
262
|
*/
|
|
252
263
|
last_auth_at?: string;
|
|
264
|
+
/**
|
|
265
|
+
* When the most recent auth health check ran for this connection, regardless of
|
|
266
|
+
* outcome. Updated on every health check and does not by itself indicate that the
|
|
267
|
+
* profile is currently authenticated - use `status` for that. May be newer than
|
|
268
|
+
* `flow_expires_at` when a flow is still in progress because health checks
|
|
269
|
+
* continue to run in parallel.
|
|
270
|
+
*/
|
|
271
|
+
last_auth_check_at?: string;
|
|
253
272
|
/**
|
|
254
273
|
* Browser live view URL for debugging (present when flow in progress)
|
|
255
274
|
*/
|
|
@@ -336,6 +355,11 @@ export declare namespace ManagedAuth {
|
|
|
336
355
|
* Field type
|
|
337
356
|
*/
|
|
338
357
|
type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'code' | 'totp';
|
|
358
|
+
/**
|
|
359
|
+
* Contextual help text near the field that tells the user what to enter (e.g.,
|
|
360
|
+
* "Enter the phone ending in (**_) _**-\*\*92")
|
|
361
|
+
*/
|
|
362
|
+
hint?: string;
|
|
339
363
|
/**
|
|
340
364
|
* If this field is associated with an MFA option, the type of that option (e.g.,
|
|
341
365
|
* password field linked to "Enter password" option)
|
|
@@ -726,6 +750,11 @@ export declare namespace ConnectionFollowResponse {
|
|
|
726
750
|
* Field type
|
|
727
751
|
*/
|
|
728
752
|
type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'code' | 'totp';
|
|
753
|
+
/**
|
|
754
|
+
* Contextual help text near the field that tells the user what to enter (e.g.,
|
|
755
|
+
* "Enter the phone ending in (**_) _**-\*\*92")
|
|
756
|
+
*/
|
|
757
|
+
hint?: string;
|
|
729
758
|
/**
|
|
730
759
|
* If this field is associated with an MFA option, the type of that option (e.g.,
|
|
731
760
|
* password field linked to "Enter password" option)
|