Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.49.0"
".": "0.50.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 111
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-49a1a92e00d1eb87e91e8527275cb0705fce2edea30e70fea745f134dd451fbd.yml
openapi_spec_hash: 0ffef6a95f9d9b1096180fc5e4c5b39c
config_hash: 9818dd634f87b677410eefd013d7a179
configured_endpoints: 112
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-930823e8b25b4644b74098ad5479840f64a329321aa236460f8a9562ae9051bf.yml
openapi_spec_hash: 9f868e67df8fd2fec8d8fc3eb5ba0b26
config_hash: 08d55086449943a8fec212b870061a3f
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.50.0 (2026-04-13)

Full Changelog: [v0.49.0...v0.50.0](https://github.com/kernel/kernel-node-sdk/compare/v0.49.0...v0.50.0)

### Features

* add POST /browsers/{id}/curl and /curl/raw endpoints ([e60b999](https://github.com/kernel/kernel-node-sdk/commit/e60b999ed881b76a29ba949e691af35793b0e694))


### Chores

* **internal:** codegen related update ([591019f](https://github.com/kernel/kernel-node-sdk/commit/591019fd1f305d69dd5641fe6c1de39a796e3d94))

## 0.49.0 (2026-04-10)

Full Changelog: [v0.48.0...v0.49.0](https://github.com/kernel/kernel-node-sdk/compare/v0.48.0...v0.49.0)
Expand Down
2 changes: 2 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ Types:
- <code><a href="./src/resources/browsers/browsers.ts">BrowserRetrieveResponse</a></code>
- <code><a href="./src/resources/browsers/browsers.ts">BrowserUpdateResponse</a></code>
- <code><a href="./src/resources/browsers/browsers.ts">BrowserListResponse</a></code>
- <code><a href="./src/resources/browsers/browsers.ts">BrowserCurlResponse</a></code>

Methods:

Expand All @@ -82,6 +83,7 @@ Methods:
- <code title="patch /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">update</a>(id, { ...params }) -> BrowserUpdateResponse</code>
- <code title="get /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">list</a>({ ...params }) -> BrowserListResponsesOffsetPagination</code>
- <code title="delete /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">delete</a>({ ...params }) -> void</code>
- <code title="post /browsers/{id}/curl">client.browsers.<a href="./src/resources/browsers/browsers.ts">curl</a>(id, { ...params }) -> BrowserCurlResponse</code>
- <code title="delete /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">deleteByID</a>(id) -> void</code>
- <code title="post /browsers/{id}/extensions">client.browsers.<a href="./src/resources/browsers/browsers.ts">loadExtensions</a>(id, { ...params }) -> void</code>

Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
"version": "0.49.0",
"version": "0.50.0",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
Expand Down
4 changes: 4 additions & 0 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ import { Auth } from './resources/auth/auth';
import {
BrowserCreateParams,
BrowserCreateResponse,
BrowserCurlParams,
BrowserCurlResponse,
BrowserDeleteParams,
BrowserListParams,
BrowserListResponse,
Expand Down Expand Up @@ -1013,12 +1015,14 @@ export declare namespace Kernel {
type BrowserRetrieveResponse as BrowserRetrieveResponse,
type BrowserUpdateResponse as BrowserUpdateResponse,
type BrowserListResponse as BrowserListResponse,
type BrowserCurlResponse as BrowserCurlResponse,
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
type BrowserCreateParams as BrowserCreateParams,
type BrowserRetrieveParams as BrowserRetrieveParams,
type BrowserUpdateParams as BrowserUpdateParams,
type BrowserListParams as BrowserListParams,
type BrowserDeleteParams as BrowserDeleteParams,
type BrowserCurlParams as BrowserCurlParams,
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
};

Expand Down
75 changes: 75 additions & 0 deletions src/resources/browsers/browsers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,22 @@ export class Browsers extends APIResource {
});
}

/**
* Sends an HTTP request through Chrome's HTTP request stack, inheriting the
* browser's TLS fingerprint, cookies, proxy configuration, and headers. Returns a
* structured JSON response with status, headers, body, and timing.
*
* @example
* ```ts
* const response = await client.browsers.curl('id', {
* url: 'url',
* });
* ```
*/
curl(id: string, body: BrowserCurlParams, options?: RequestOptions): APIPromise<BrowserCurlResponse> {
return this._client.post(path`/browsers/${id}/curl`, { body, ...options });
}

/**
* Delete a browser session by ID
*
Expand Down Expand Up @@ -706,6 +722,31 @@ export interface BrowserListResponse {
viewport?: Shared.BrowserViewport;
}

/**
* Structured response from the browser curl request.
*/
export interface BrowserCurlResponse {
/**
* Response body (UTF-8 string or base64 depending on request).
*/
body: string;

/**
* Total request duration in milliseconds.
*/
duration_ms: number;

/**
* Response headers (multi-value).
*/
headers: { [key: string]: Array<string> };

/**
* HTTP status code from target.
*/
status: number;
}

export interface BrowserCreateParams {
/**
* List of browser extensions to load into the session. Provide each by id or name.
Expand Down Expand Up @@ -859,6 +900,38 @@ export interface BrowserDeleteParams {
persistent_id: string;
}

export interface BrowserCurlParams {
/**
* Target URL (must be http or https).
*/
url: string;

/**
* Request body (for POST/PUT/PATCH).
*/
body?: string;

/**
* Custom headers merged with browser defaults.
*/
headers?: { [key: string]: string };

/**
* HTTP method.
*/
method?: 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';

/**
* Encoding for the response body. Use base64 for binary content.
*/
response_encoding?: 'utf8' | 'base64';

/**
* Request timeout in milliseconds.
*/
timeout_ms?: number;
}

export interface BrowserLoadExtensionsParams {
/**
* List of extensions to upload and activate
Expand Down Expand Up @@ -898,12 +971,14 @@ export declare namespace Browsers {
type BrowserRetrieveResponse as BrowserRetrieveResponse,
type BrowserUpdateResponse as BrowserUpdateResponse,
type BrowserListResponse as BrowserListResponse,
type BrowserCurlResponse as BrowserCurlResponse,
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
type BrowserCreateParams as BrowserCreateParams,
type BrowserRetrieveParams as BrowserRetrieveParams,
type BrowserUpdateParams as BrowserUpdateParams,
type BrowserListParams as BrowserListParams,
type BrowserDeleteParams as BrowserDeleteParams,
type BrowserCurlParams as BrowserCurlParams,
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
};

Expand Down
2 changes: 2 additions & 0 deletions src/resources/browsers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ export {
type BrowserRetrieveResponse,
type BrowserUpdateResponse,
type BrowserListResponse,
type BrowserCurlResponse,
type BrowserCreateParams,
type BrowserRetrieveParams,
type BrowserUpdateParams,
type BrowserListParams,
type BrowserDeleteParams,
type BrowserCurlParams,
type BrowserLoadExtensionsParams,
type ProfilesOffsetPagination,
type BrowserListResponsesOffsetPagination,
Expand Down
2 changes: 2 additions & 0 deletions src/resources/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,13 @@ export {
type BrowserRetrieveResponse,
type BrowserUpdateResponse,
type BrowserListResponse,
type BrowserCurlResponse,
type BrowserCreateParams,
type BrowserRetrieveParams,
type BrowserUpdateParams,
type BrowserListParams,
type BrowserDeleteParams,
type BrowserCurlParams,
type BrowserLoadExtensionsParams,
type ProfilesOffsetPagination,
type BrowserListResponsesOffsetPagination,
Expand Down
2 changes: 1 addition & 1 deletion src/version.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const VERSION = '0.49.0'; // x-release-please-version
export const VERSION = '0.50.0'; // x-release-please-version
24 changes: 24 additions & 0 deletions tests/api-resources/browsers/browsers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,30 @@ describe('resource browsers', () => {
const response = await client.browsers.delete({ persistent_id: 'persistent_id' });
});

// Mock server tests are disabled
test.skip('curl: only required params', async () => {
const responsePromise = client.browsers.curl('id', { url: 'url' });
const rawResponse = await responsePromise.asResponse();
expect(rawResponse).toBeInstanceOf(Response);
const response = await responsePromise;
expect(response).not.toBeInstanceOf(Response);
const dataAndResponse = await responsePromise.withResponse();
expect(dataAndResponse.data).toBe(response);
expect(dataAndResponse.response).toBe(rawResponse);
});

// Mock server tests are disabled
test.skip('curl: required and optional params', async () => {
const response = await client.browsers.curl('id', {
url: 'url',
body: 'body',
headers: { foo: 'string' },
method: 'GET',
response_encoding: 'utf8',
timeout_ms: 1000,
});
});

// Mock server tests are disabled
test.skip('deleteByID', async () => {
const responsePromise = client.browsers.deleteByID('htzv5orfit78e1m2biiifpbv');
Expand Down
6 changes: 3 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1220,9 +1220,9 @@ baseline-browser-mapping@^2.9.0:
integrity sha512-B0xUquLkiGLgHhpPBqvl7GWegWBUNuujQ6kXd/r1U38ElPT6Ok8KZ8e+FpUGEc2ZoRQUzq/aUnaKFc/svWUGSg==

brace-expansion@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9"
integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==
version "2.1.0"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.1.0.tgz#4f41a41190216ee36067ec381526fe9539c4f0ae"
integrity sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==
dependencies:
balanced-match "^1.0.0"

Expand Down
Loading