diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 2e38a297..febc17a4 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.49.0" + ".": "0.50.0" } diff --git a/.stats.yml b/.stats.yml index ad1b0f25..bed10345 100644 --- a/.stats.yml +++ b/.stats.yml @@ -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-686a9addd4f9356ca26ff3ff04e1a11466d77a412859829075566394922b715d.yml +openapi_spec_hash: 7a9e9c2023400d44bcbfb87b7ec07708 +config_hash: 08d55086449943a8fec212b870061a3f diff --git a/CHANGELOG.md b/CHANGELOG.md index fd3c6a8d..46dd9b84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 0.50.0 (2026-04-20) + +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)) +* remove paid plan gating from project endpoints ([deee93a](https://github.com/kernel/kernel-node-sdk/commit/deee93a6df11b6c0849a24dd888781678bb8379c)) + + +### Bug Fixes + +* include MFA and sign-in options in CUA SSO-only step response ([516f87b](https://github.com/kernel/kernel-node-sdk/commit/516f87b537e0b84fb5559bfea1c40221003694ec)) + + +### 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) diff --git a/api.md b/api.md index 4f2faea0..ba877c96 100644 --- a/api.md +++ b/api.md @@ -74,6 +74,7 @@ Types: - BrowserRetrieveResponse - BrowserUpdateResponse - BrowserListResponse +- BrowserCurlResponse Methods: @@ -82,6 +83,7 @@ Methods: - client.browsers.update(id, { ...params }) -> BrowserUpdateResponse - client.browsers.list({ ...params }) -> BrowserListResponsesOffsetPagination - client.browsers.delete({ ...params }) -> void +- client.browsers.curl(id, { ...params }) -> BrowserCurlResponse - client.browsers.deleteByID(id) -> void - client.browsers.loadExtensions(id, { ...params }) -> void diff --git a/package-lock.json b/package-lock.json index 0b03c70e..a012986d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@onkernel/sdk", - "version": "0.49.0", + "version": "0.50.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@onkernel/sdk", - "version": "0.49.0", + "version": "0.50.0", "license": "Apache-2.0", "devDependencies": { "@arethetypeswrong/cli": "^0.17.0", diff --git a/package.json b/package.json index 08d49845..7eabcc83 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/client.ts b/src/client.ts index dc9e5ced..7a00e5e5 100644 --- a/src/client.ts +++ b/src/client.ts @@ -103,6 +103,8 @@ import { Auth } from './resources/auth/auth'; import { BrowserCreateParams, BrowserCreateResponse, + BrowserCurlParams, + BrowserCurlResponse, BrowserDeleteParams, BrowserListParams, BrowserListResponse, @@ -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, }; diff --git a/src/resources/auth/connections.ts b/src/resources/auth/connections.ts index 09ffe71e..852cd6b4 100644 --- a/src/resources/auth/connections.ts +++ b/src/resources/auth/connections.ts @@ -433,6 +433,12 @@ export namespace ManagedAuth { */ type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'code' | 'totp'; + /** + * Contextual help text near the field that tells the user what to enter (e.g., + * "Enter the phone ending in (**_) _**-\*\*92") + */ + hint?: string; + /** * If this field is associated with an MFA option, the type of that option (e.g., * password field linked to "Enter password" option) @@ -890,6 +896,12 @@ export namespace ConnectionFollowResponse { */ type: 'text' | 'email' | 'password' | 'tel' | 'number' | 'url' | 'code' | 'totp'; + /** + * Contextual help text near the field that tells the user what to enter (e.g., + * "Enter the phone ending in (**_) _**-\*\*92") + */ + hint?: string; + /** * If this field is associated with an MFA option, the type of that option (e.g., * password field linked to "Enter password" option) diff --git a/src/resources/browsers/browsers.ts b/src/resources/browsers/browsers.ts index c4a910eb..61873f31 100644 --- a/src/resources/browsers/browsers.ts +++ b/src/resources/browsers/browsers.ts @@ -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 { + return this._client.post(path`/browsers/${id}/curl`, { body, ...options }); + } + /** * Delete a browser session by ID * @@ -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 }; + + /** + * 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. @@ -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 @@ -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, }; diff --git a/src/resources/browsers/index.ts b/src/resources/browsers/index.ts index 4af2fb19..e38f0732 100644 --- a/src/resources/browsers/index.ts +++ b/src/resources/browsers/index.ts @@ -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, diff --git a/src/resources/index.ts b/src/resources/index.ts index 312dbe0f..789de808 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -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, diff --git a/src/resources/projects/projects.ts b/src/resources/projects/projects.ts index 142531fa..b2d1219c 100644 --- a/src/resources/projects/projects.ts +++ b/src/resources/projects/projects.ts @@ -16,8 +16,8 @@ export class Projects extends APIResource { limits: LimitsAPI.Limits = new LimitsAPI.Limits(this._client); /** - * Create a new project within the authenticated organization. Requires a paid plan - * and the projects feature flag. + * Create a new project within the authenticated organization. Requires the + * projects feature flag. * * @example * ```ts diff --git a/src/version.ts b/src/version.ts index b3df7b0e..049e29ec 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.49.0'; // x-release-please-version +export const VERSION = '0.50.0'; // x-release-please-version diff --git a/tests/api-resources/browsers/browsers.test.ts b/tests/api-resources/browsers/browsers.test.ts index e4f99975..0c2f5740 100644 --- a/tests/api-resources/browsers/browsers.test.ts +++ b/tests/api-resources/browsers/browsers.test.ts @@ -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'); diff --git a/yarn.lock b/yarn.lock index e5e2a93b..f6eae3cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"