diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index d920d7bf..3125f0fd 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -26,7 +26,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
- node-version: '20'
+ node-version: '24'
- name: Bootstrap
run: ./scripts/bootstrap
@@ -48,7 +48,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
- node-version: '20'
+ node-version: '24'
- name: Bootstrap
run: ./scripts/bootstrap
@@ -85,7 +85,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
- node-version: '20'
+ node-version: '24'
- name: Bootstrap
run: ./scripts/bootstrap
diff --git a/.github/workflows/publish-npm.yml b/.github/workflows/publish-npm.yml
index 664e42c3..d01da10b 100644
--- a/.github/workflows/publish-npm.yml
+++ b/.github/workflows/publish-npm.yml
@@ -22,7 +22,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1
with:
- node-version: '20'
+ node-version: '24'
- name: Install dependencies
run: |
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 5f3243d4..2fc68753 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.76.0"
+ ".": "0.78.0"
}
diff --git a/.stats.yml b/.stats.yml
index 3f7dec3b..04d533eb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 125
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-ba32039d3975da7aa6d28e5184f0a44c9fbfe36ab7dbc71985d14e2ecc0867b9.yml
-openapi_spec_hash: a9f32fc90c2add2ae85af828c298e35b
-config_hash: 06186eb40e0058a2a87ac251fc07415d
+configured_endpoints: 127
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel/kernel-1413d61d06059008b4c1e204c783d8b2e7dca9af23f6e3b6d2552493ea2d9853.yml
+openapi_spec_hash: 80aca500caddd300cb03a6daf568fddb
+config_hash: 77ee715aa17061166f9a02b264a21b8d
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a8b606f8..c6fc61d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,30 @@
# Changelog
+## 0.78.0 (2026-07-13)
+
+Full Changelog: [v0.76.0...v0.78.0](https://github.com/kernel/kernel-node-sdk/compare/v0.76.0...v0.78.0)
+
+### Features
+
+* Add exact-match name filter to list endpoints ([dd94a68](https://github.com/kernel/kernel-node-sdk/commit/dd94a6824da367c28f29a41a50ff220a7bbd0015))
+* Add name-only rename for profiles and proxies ([2fe4124](https://github.com/kernel/kernel-node-sdk/commit/2fe41244b7e184914c6858a9533132d65b4380ba))
+* Auto-default refresh_on_profile_update when browser pool profile changes ([adaf037](https://github.com/kernel/kernel-node-sdk/commit/adaf0372de1e2eaf1450a93d510c51f9b843957c))
+* Document name uniqueness and query match semantics ([670f7c3](https://github.com/kernel/kernel-node-sdk/commit/670f7c32c4c63064198a53bab24117354a26832d))
+* Expose telemetry exception message in API/SDK ([ddf0a65](https://github.com/kernel/kernel-node-sdk/commit/ddf0a65dc7fb1a64e299173462266a09af0d2605))
+* Make the browser pool OpenAPI contract truthful ([cfc4539](https://github.com/kernel/kernel-node-sdk/commit/cfc45396ab79ee020ffd927ea2cd40291b5496bb))
+* Persist and echo deployment source identity ([f8605df](https://github.com/kernel/kernel-node-sdk/commit/f8605df3e781a05a2beddb933273b0eb4fb0d24b))
+* Support multiple audit log method exclusions ([a3b8713](https://github.com/kernel/kernel-node-sdk/commit/a3b871374783991780c24b16fee40945c4e383fd))
+
+
+### Bug Fixes
+
+* **ci:** bump @arethetypeswrong/cli to ^0.18.0 and run CI workflows on Node 24 ([6fca519](https://github.com/kernel/kernel-node-sdk/commit/6fca5191da0d3c4512a74e3246df0591459b6d29))
+
+
+### Documentation
+
+* **openapi:** describe unified concurrency limit, deprecate max_pooled_sessions (CUS-275) ([37d3e27](https://github.com/kernel/kernel-node-sdk/commit/37d3e277f98b068f23c5fc85e7b26269c254827c))
+
## 0.76.0 (2026-07-09)
Full Changelog: [v0.75.0...v0.76.0](https://github.com/kernel/kernel-node-sdk/compare/v0.75.0...v0.76.0)
diff --git a/api.md b/api.md
index d729ebd3..f7950f3e 100644
--- a/api.md
+++ b/api.md
@@ -252,6 +252,7 @@ Methods:
- client.profiles.create({ ...params }) -> Profile
- client.profiles.retrieve(idOrName) -> Profile
+- client.profiles.update(idOrName, { ...params }) -> Profile
- client.profiles.list({ ...params }) -> ProfilesOffsetPagination
- client.profiles.delete(idOrName) -> void
- client.profiles.download(idOrName) -> Response
@@ -289,6 +290,7 @@ Types:
- ProxyCreateResponse
- ProxyRetrieveResponse
+- ProxyUpdateResponse
- ProxyListResponse
- ProxyCheckResponse
@@ -296,6 +298,7 @@ Methods:
- client.proxies.create({ ...params }) -> ProxyCreateResponse
- client.proxies.retrieve(id) -> ProxyRetrieveResponse
+- client.proxies.update(id, { ...params }) -> ProxyUpdateResponse
- client.proxies.list({ ...params }) -> ProxyListResponsesOffsetPagination
- client.proxies.delete(id) -> void
- client.proxies.check(id, { ...params }) -> ProxyCheckResponse
diff --git a/package.json b/package.json
index 7757d07a..58db90c7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
- "version": "0.76.0",
+ "version": "0.78.0",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
@@ -28,7 +28,7 @@
"fix": "./scripts/format"
},
"devDependencies": {
- "@arethetypeswrong/cli": "^0.17.0",
+ "@arethetypeswrong/cli": "^0.18.0",
"@swc/core": "^1.3.102",
"@swc/jest": "^0.2.29",
"@types/busboy": "^1.5.4",
diff --git a/src/client.ts b/src/client.ts
index db4f3c37..7dd7a576 100644
--- a/src/client.ts
+++ b/src/client.ts
@@ -123,7 +123,7 @@ import {
InvocationUpdateResponse,
Invocations,
} from './resources/invocations';
-import { ProfileCreateParams, ProfileListParams, Profiles } from './resources/profiles';
+import { ProfileCreateParams, ProfileListParams, ProfileUpdateParams, Profiles } from './resources/profiles';
import {
Proxies,
ProxyCheckParams,
@@ -134,6 +134,8 @@ import {
ProxyListResponse,
ProxyListResponsesOffsetPagination,
ProxyRetrieveResponse,
+ ProxyUpdateParams,
+ ProxyUpdateResponse,
} from './resources/proxies';
import { Auth } from './resources/auth/auth';
import {
@@ -1122,6 +1124,7 @@ export declare namespace Kernel {
export {
Profiles as Profiles,
type ProfileCreateParams as ProfileCreateParams,
+ type ProfileUpdateParams as ProfileUpdateParams,
type ProfileListParams as ProfileListParams,
};
@@ -1131,10 +1134,12 @@ export declare namespace Kernel {
Proxies as Proxies,
type ProxyCreateResponse as ProxyCreateResponse,
type ProxyRetrieveResponse as ProxyRetrieveResponse,
+ type ProxyUpdateResponse as ProxyUpdateResponse,
type ProxyListResponse as ProxyListResponse,
type ProxyCheckResponse as ProxyCheckResponse,
type ProxyListResponsesOffsetPagination as ProxyListResponsesOffsetPagination,
type ProxyCreateParams as ProxyCreateParams,
+ type ProxyUpdateParams as ProxyUpdateParams,
type ProxyListParams as ProxyListParams,
type ProxyCheckParams as ProxyCheckParams,
};
diff --git a/src/resources/api-keys.ts b/src/resources/api-keys.ts
index a82e2c32..7901f3cc 100644
--- a/src/resources/api-keys.ts
+++ b/src/resources/api-keys.ts
@@ -141,7 +141,8 @@ export interface APIKey {
masked_key: string;
/**
- * API key name
+ * Label for the API key. API keys are not addressable by name; use the ID or key
+ * identifier for stable references.
*/
name: string;
@@ -188,7 +189,7 @@ export interface CreatedAPIKey extends APIKey {
export interface APIKeyCreateParams {
/**
- * API key name (1-255 characters)
+ * Label for the API key (1-255 characters). API keys are not addressable by name.
*/
name: string;
@@ -225,6 +226,14 @@ export interface APIKeyListParams extends OffsetPaginationParams {
*/
include_deleted?: boolean;
+ /**
+ * Exact-match filter on API key name using the database collation. In production,
+ * matching is case- and accent-insensitive. Names are not required to be unique,
+ * so multiple keys may match. When status=all or include_deleted=true is set,
+ * soft-deleted keys with the same name may also match.
+ */
+ name?: string;
+
/**
* Case-insensitive substring match against API key name, creator, and project. API
* key identifiers and masked keys match by exact value or prefix.
diff --git a/src/resources/audit-logs.ts b/src/resources/audit-logs.ts
index 85df4103..9367dc9a 100644
--- a/src/resources/audit-logs.ts
+++ b/src/resources/audit-logs.ts
@@ -119,7 +119,7 @@ export interface AuditLogListParams extends PageTokenPaginationParams {
/**
* Filter out results by HTTP method.
*/
- exclude_method?: string;
+ exclude_method?: Array;
/**
* Filter by HTTP method.
@@ -166,7 +166,7 @@ export interface AuditLogExportChunkParams {
/**
* Filter out results by HTTP method.
*/
- exclude_method?: string;
+ exclude_method?: Array;
/**
* Encoding for the returned chunk.
diff --git a/src/resources/auth/connections.ts b/src/resources/auth/connections.ts
index 67d067b7..9e5f8a49 100644
--- a/src/resources/auth/connections.ts
+++ b/src/resources/auth/connections.ts
@@ -729,7 +729,9 @@ export interface ManagedAuthCreateRequest {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
proxy?: ManagedAuthCreateRequest.Proxy;
@@ -778,7 +780,9 @@ export namespace ManagedAuthCreateRequest {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
export interface Proxy {
/**
@@ -917,7 +921,9 @@ export interface ManagedAuthUpdateRequest {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
proxy?: ManagedAuthUpdateRequest.Proxy;
@@ -964,7 +970,9 @@ export namespace ManagedAuthUpdateRequest {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
export interface Proxy {
/**
@@ -1320,7 +1328,9 @@ export interface ConnectionCreateParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
proxy?: ConnectionCreateParams.Proxy;
@@ -1369,7 +1379,9 @@ export namespace ConnectionCreateParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
export interface Proxy {
/**
@@ -1430,7 +1442,9 @@ export interface ConnectionUpdateParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
proxy?: ConnectionUpdateParams.Proxy;
@@ -1477,7 +1491,9 @@ export namespace ConnectionUpdateParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
export interface Proxy {
/**
@@ -1512,7 +1528,9 @@ export interface ConnectionListParams extends OffsetPaginationParams {
export interface ConnectionLoginParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
proxy?: ConnectionLoginParams.Proxy;
@@ -1526,7 +1544,9 @@ export interface ConnectionLoginParams {
export namespace ConnectionLoginParams {
/**
* Proxy selection. Provide either id or name. The proxy must be in the same
- * project as the resource referencing it.
+ * project as the resource referencing it. When selecting by name, the name must
+ * match exactly one active proxy in the project. Ambiguous names return a 400; use
+ * id for stable references.
*/
export interface Proxy {
/**
diff --git a/src/resources/browser-pools.ts b/src/resources/browser-pools.ts
index a810bc8f..086e30cf 100644
--- a/src/resources/browser-pools.ts
+++ b/src/resources/browser-pools.ts
@@ -216,7 +216,7 @@ export namespace BrowserPool {
*/
export interface BrowserPoolConfig {
/**
- * Number of browsers to maintain in the pool. The maximum size is determined by
+ * Number of browsers maintained in the pool. The maximum size is determined by
* your organization's pooled sessions limit (the sum of all pool sizes cannot
* exceed your limit).
*/
@@ -226,7 +226,8 @@ export namespace BrowserPool {
* Custom Chrome enterprise policy overrides applied to all browsers in this pool.
* Keys are Chrome enterprise policy names; values must match their expected types.
* Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
- * https://chromeenterprise.google/policies/
+ * https://chromeenterprise.google/policies/ The serialized JSON payload is capped
+ * at 5 MiB.
*/
chrome_policy?: { [key: string]: unknown };
@@ -236,14 +237,13 @@ export namespace BrowserPool {
extensions?: Array;
/**
- * Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
- * most organizations but can be raised per-organization, so only the lower bound
- * is enforced here.
+ * Percentage of the pool to fill per minute. The cap is 25 for most organizations
+ * but can be raised per-organization, so only the lower bound is enforced here.
*/
fill_rate_per_minute?: number;
/**
- * If true, launches the browser using a headless image. Defaults to false.
+ * If true, launches the browser using a headless image.
*/
headless?: boolean;
@@ -268,15 +268,15 @@ export namespace BrowserPool {
profile?: BrowserPoolConfig.Profile;
/**
- * Optional proxy to associate to the browser session. Must reference a proxy in
- * the same project as the browser session.
+ * Optional proxy associated to the browser session. References a proxy in the same
+ * project as the browser session.
*/
proxy_id?: string;
/**
* When true, flush idle browsers when the profile the pool uses is updated, so
- * pool browsers pick up the latest profile data. Requires a profile to be set on
- * the pool.
+ * pool browsers pick up the latest profile data. When a profile is provided during
+ * creation, this defaults to true. Requires a profile to be set on the pool.
*/
refresh_on_profile_update?: boolean;
@@ -297,7 +297,7 @@ export namespace BrowserPool {
/**
* Default idle timeout in seconds for browsers acquired from this pool before they
- * are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
+ * are destroyed. Minimum 10, maximum 259200 (72 hours).
*/
timeout_seconds?: number;
@@ -485,7 +485,8 @@ export interface BrowserPoolCreateParams {
* Custom Chrome enterprise policy overrides applied to all browsers in this pool.
* Keys are Chrome enterprise policy names; values must match their expected types.
* Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
- * https://chromeenterprise.google/policies/
+ * https://chromeenterprise.google/policies/ The serialized JSON payload is capped
+ * at 5 MiB.
*/
chrome_policy?: { [key: string]: unknown };
@@ -508,7 +509,7 @@ export interface BrowserPoolCreateParams {
/**
* If true, launches the browser in kiosk mode to hide address bar and tabs in live
- * view.
+ * view. Defaults to false.
*/
kiosk_mode?: boolean;
@@ -534,8 +535,8 @@ export interface BrowserPoolCreateParams {
/**
* When true, flush idle browsers when the profile the pool uses is updated, so
- * pool browsers pick up the latest profile data. Requires a profile to be set on
- * the pool.
+ * pool browsers pick up the latest profile data. When a profile is provided during
+ * creation, this defaults to true. Requires a profile to be set on the pool.
*/
refresh_on_profile_update?: boolean;
@@ -550,7 +551,7 @@ export interface BrowserPoolCreateParams {
/**
* If true, launches the browser in stealth mode to reduce detection by anti-bot
- * mechanisms.
+ * mechanisms. Defaults to false.
*/
stealth?: boolean;
@@ -601,10 +602,12 @@ export namespace BrowserPoolCreateParams {
export interface BrowserPoolUpdateParams {
/**
- * Custom Chrome enterprise policy overrides applied to all browsers in this pool.
- * Keys are Chrome enterprise policy names; values must match their expected types.
+ * If provided, replaces the custom Chrome enterprise policy overrides applied to
+ * all browsers in this pool. Empty object clears any previously-set policy. Keys
+ * are Chrome enterprise policy names; values must match their expected types.
* Blocked: kernel-managed policies (extensions, proxy, CDP/automation). See
- * https://chromeenterprise.google/policies/
+ * https://chromeenterprise.google/policies/ The serialized JSON payload is capped
+ * at 5 MiB.
*/
chrome_policy?: { [key: string]: unknown };
@@ -619,30 +622,31 @@ export interface BrowserPoolUpdateParams {
discard_all_idle?: boolean;
/**
- * List of browser extensions to load into the session. Provide each by id or name.
+ * If provided, replaces the extension list. Empty array clears all
+ * previously-selected extensions. Omit this field to leave extensions unchanged.
*/
extensions?: Array;
/**
- * Percentage of the pool to fill per minute. Defaults to 10. The cap is 25 for
- * most organizations but can be raised per-organization, so only the lower bound
- * is enforced here.
+ * If provided, replaces the percentage of the pool to fill per minute. The cap is
+ * 25 for most organizations but can be raised per-organization, so only the lower
+ * bound is enforced here.
*/
fill_rate_per_minute?: number;
/**
- * If true, launches the browser using a headless image. Defaults to false.
+ * If provided, replaces whether browsers launch using a headless image.
*/
headless?: boolean;
/**
- * If true, launches the browser in kiosk mode to hide address bar and tabs in live
- * view.
+ * If provided, replaces whether browsers launch in kiosk mode.
*/
kiosk_mode?: boolean;
/**
- * Optional name for the browser pool. Must be unique within the project.
+ * If provided, replaces the pool name. Empty string is a no-op; the pool name
+ * cannot be cleared or reset to empty once assigned.
*/
name?: string;
@@ -656,43 +660,42 @@ export interface BrowserPoolUpdateParams {
profile?: BrowserPoolUpdateParams.Profile;
/**
- * Optional proxy to associate to the browser session. Must reference a proxy in
- * the same project as the browser session.
+ * Empty string clears the previously-selected proxy. Omit this field to leave the
+ * proxy unchanged.
*/
proxy_id?: string;
/**
- * When true, flush idle browsers when the profile the pool uses is updated, so
- * pool browsers pick up the latest profile data. Requires a profile to be set on
- * the pool.
+ * If provided, replaces whether idle browsers are flushed when the profile the
+ * pool uses is updated. When the pool's profile reference is changed (including
+ * newly attached) and this field is omitted, it defaults to true. Re-sending the
+ * same profile reference leaves this setting unchanged. Clearing the profile also
+ * disables this setting. Requires a profile to be set on the pool.
*/
refresh_on_profile_update?: boolean;
/**
- * Number of browsers to maintain in the pool. The maximum size is determined by
- * your organization's pooled sessions limit (the sum of all pool sizes cannot
- * exceed your limit).
+ * If provided, replaces the number of browsers to maintain in the pool. The
+ * maximum size is determined by your organization's pooled sessions limit (the sum
+ * of all pool sizes cannot exceed your limit).
*/
size?: number;
/**
- * Optional URL to navigate to when a new browser is warmed into the pool.
- * Best-effort: failures to navigate do not fail pool fill. Only applied to
- * newly-warmed browsers; browsers reused via release/acquire keep whatever URL the
- * previous lease left them on. Accepts any URL Chromium can resolve, including
- * chrome:// pages.
+ * If provided, replaces the URL to navigate to when a new browser is warmed into
+ * the pool. Empty string clears the previously-set URL. Omit this field to leave
+ * it unchanged.
*/
start_url?: string;
/**
- * If true, launches the browser in stealth mode to reduce detection by anti-bot
- * mechanisms.
+ * If provided, replaces whether browsers launch in stealth mode.
*/
stealth?: boolean;
/**
- * Default idle timeout in seconds for browsers acquired from this pool before they
- * are destroyed. Defaults to 600 seconds. Minimum 10, maximum 259200 (72 hours).
+ * If provided, replaces the default idle timeout in seconds for browsers acquired
+ * from this pool before they are destroyed. Minimum 10, maximum 259200 (72 hours).
*/
timeout_seconds?: number;
@@ -737,7 +740,16 @@ export namespace BrowserPoolUpdateParams {
export interface BrowserPoolListParams extends OffsetPaginationParams {
/**
- * Search browser pools by name or ID.
+ * Exact-match filter on browser pool name using the database collation. In
+ * production, matching is case- and accent-insensitive. During the default-project
+ * migration, unscoped requests prefer a concrete default-project browser pool over
+ * a legacy unscoped browser pool with the same name.
+ */
+ name?: string;
+
+ /**
+ * Case-insensitive substring match against browser pool name. IDs match by exact
+ * value.
*/
query?: string;
}
diff --git a/src/resources/browsers/telemetry.ts b/src/resources/browsers/telemetry.ts
index c11affc2..7b41c677 100644
--- a/src/resources/browsers/telemetry.ts
+++ b/src/resources/browsers/telemetry.ts
@@ -371,7 +371,10 @@ export namespace BrowserConsoleErrorEvent {
*/
export interface Data extends TelemetryAPI.BrowserEventContext {
/**
- * Error message text. Present in both source paths.
+ * Human-readable error text, as the browser console would display it. For
+ * console.error() calls, the first argument coerced to a string. For uncaught
+ * exceptions, the prefix and error message, e.g. "Uncaught Error: boom" or
+ * "Uncaught (in promise) TypeError: x is not a function".
*/
text: string;
diff --git a/src/resources/credential-providers.ts b/src/resources/credential-providers.ts
index 601cf269..d85d198e 100644
--- a/src/resources/credential-providers.ts
+++ b/src/resources/credential-providers.ts
@@ -346,7 +346,8 @@ export interface CredentialProviderUpdateParams {
export interface CredentialProviderListParams extends OffsetPaginationParams {
/**
- * Search credential providers by name or ID.
+ * Case-insensitive substring match against credential provider name. IDs match by
+ * exact value.
*/
query?: string;
}
diff --git a/src/resources/credentials.ts b/src/resources/credentials.ts
index 09aba3a2..da4992a1 100644
--- a/src/resources/credentials.ts
+++ b/src/resources/credentials.ts
@@ -326,7 +326,8 @@ export interface CredentialListParams extends OffsetPaginationParams {
domain?: string;
/**
- * Search credentials by name, domain, or ID.
+ * Case-insensitive substring match against credential name or domain. IDs match by
+ * exact value.
*/
query?: string;
}
diff --git a/src/resources/deployments.ts b/src/resources/deployments.ts
index 597dad21..8e3c7622 100644
--- a/src/resources/deployments.ts
+++ b/src/resources/deployments.ts
@@ -165,6 +165,39 @@ export namespace DeploymentStateEvent {
*/
env_vars?: { [key: string]: string };
+ /**
+ * Hex-encoded SHA-256 checksum of the source archive. For file uploads, this
+ * hashes the uploaded archive; for GitHub-sourced deployments, this hashes the
+ * GitHub archive downloaded by the API. Omitted for deployments created before
+ * this field was recorded.
+ */
+ source_checksum?: string;
+
+ /**
+ * For GitHub-sourced deployments, the subpath within the repository that was used
+ * as the deploy root. Omitted when the repo root was used or for file uploads.
+ */
+ source_path?: string;
+
+ /**
+ * For GitHub-sourced deployments, the git ref as requested at deploy time (branch,
+ * tag, or commit SHA — not resolved to a commit). Omitted for file uploads.
+ */
+ source_ref?: string;
+
+ /**
+ * Origin of the deployed source code. This is read-only response provenance;
+ * `file` indicates an uploaded archive and `github` indicates a repository fetched
+ * by the API.
+ */
+ source_type?: 'file' | 'github';
+
+ /**
+ * For GitHub-sourced deployments, the repository URL that was fetched. Omitted for
+ * file uploads.
+ */
+ source_url?: string;
+
/**
* Status reason
*/
@@ -213,6 +246,39 @@ export interface DeploymentCreateResponse {
*/
env_vars?: { [key: string]: string };
+ /**
+ * Hex-encoded SHA-256 checksum of the source archive. For file uploads, this
+ * hashes the uploaded archive; for GitHub-sourced deployments, this hashes the
+ * GitHub archive downloaded by the API. Omitted for deployments created before
+ * this field was recorded.
+ */
+ source_checksum?: string;
+
+ /**
+ * For GitHub-sourced deployments, the subpath within the repository that was used
+ * as the deploy root. Omitted when the repo root was used or for file uploads.
+ */
+ source_path?: string;
+
+ /**
+ * For GitHub-sourced deployments, the git ref as requested at deploy time (branch,
+ * tag, or commit SHA — not resolved to a commit). Omitted for file uploads.
+ */
+ source_ref?: string;
+
+ /**
+ * Origin of the deployed source code. This is read-only response provenance;
+ * `file` indicates an uploaded archive and `github` indicates a repository fetched
+ * by the API.
+ */
+ source_type?: 'file' | 'github';
+
+ /**
+ * For GitHub-sourced deployments, the repository URL that was fetched. Omitted for
+ * file uploads.
+ */
+ source_url?: string;
+
/**
* Status reason
*/
@@ -260,6 +326,39 @@ export interface DeploymentRetrieveResponse {
*/
env_vars?: { [key: string]: string };
+ /**
+ * Hex-encoded SHA-256 checksum of the source archive. For file uploads, this
+ * hashes the uploaded archive; for GitHub-sourced deployments, this hashes the
+ * GitHub archive downloaded by the API. Omitted for deployments created before
+ * this field was recorded.
+ */
+ source_checksum?: string;
+
+ /**
+ * For GitHub-sourced deployments, the subpath within the repository that was used
+ * as the deploy root. Omitted when the repo root was used or for file uploads.
+ */
+ source_path?: string;
+
+ /**
+ * For GitHub-sourced deployments, the git ref as requested at deploy time (branch,
+ * tag, or commit SHA — not resolved to a commit). Omitted for file uploads.
+ */
+ source_ref?: string;
+
+ /**
+ * Origin of the deployed source code. This is read-only response provenance;
+ * `file` indicates an uploaded archive and `github` indicates a repository fetched
+ * by the API.
+ */
+ source_type?: 'file' | 'github';
+
+ /**
+ * For GitHub-sourced deployments, the repository URL that was fetched. Omitted for
+ * file uploads.
+ */
+ source_url?: string;
+
/**
* Status reason
*/
@@ -307,6 +406,39 @@ export interface DeploymentListResponse {
*/
env_vars?: { [key: string]: string };
+ /**
+ * Hex-encoded SHA-256 checksum of the source archive. For file uploads, this
+ * hashes the uploaded archive; for GitHub-sourced deployments, this hashes the
+ * GitHub archive downloaded by the API. Omitted for deployments created before
+ * this field was recorded.
+ */
+ source_checksum?: string;
+
+ /**
+ * For GitHub-sourced deployments, the subpath within the repository that was used
+ * as the deploy root. Omitted when the repo root was used or for file uploads.
+ */
+ source_path?: string;
+
+ /**
+ * For GitHub-sourced deployments, the git ref as requested at deploy time (branch,
+ * tag, or commit SHA — not resolved to a commit). Omitted for file uploads.
+ */
+ source_ref?: string;
+
+ /**
+ * Origin of the deployed source code. This is read-only response provenance;
+ * `file` indicates an uploaded archive and `github` indicates a repository fetched
+ * by the API.
+ */
+ source_type?: 'file' | 'github';
+
+ /**
+ * For GitHub-sourced deployments, the repository URL that was fetched. Omitted for
+ * file uploads.
+ */
+ source_url?: string;
+
/**
* Status reason
*/
diff --git a/src/resources/extensions.ts b/src/resources/extensions.ts
index 809c2a3e..0d306ce1 100644
--- a/src/resources/extensions.ts
+++ b/src/resources/extensions.ts
@@ -250,7 +250,16 @@ export interface ExtensionUploadResponse {
export interface ExtensionListParams extends OffsetPaginationParams {
/**
- * Search extensions by name or ID.
+ * Exact-match filter on extension name using the database collation. In
+ * production, matching is case- and accent-insensitive. During the default-project
+ * migration, unscoped requests prefer a concrete default-project extension over a
+ * legacy unscoped extension with the same name.
+ */
+ name?: string;
+
+ /**
+ * Case-insensitive substring match against extension name. IDs match by exact
+ * value.
*/
query?: string;
}
diff --git a/src/resources/index.ts b/src/resources/index.ts
index a7fdf353..797de87a 100644
--- a/src/resources/index.ts
+++ b/src/resources/index.ts
@@ -120,7 +120,12 @@ export {
type InvocationListResponsesOffsetPagination,
} from './invocations';
export { Organization } from './organization/organization';
-export { Profiles, type ProfileCreateParams, type ProfileListParams } from './profiles';
+export {
+ Profiles,
+ type ProfileCreateParams,
+ type ProfileUpdateParams,
+ type ProfileListParams,
+} from './profiles';
export {
Projects,
type CreateProjectRequest,
@@ -135,9 +140,11 @@ export {
Proxies,
type ProxyCreateResponse,
type ProxyRetrieveResponse,
+ type ProxyUpdateResponse,
type ProxyListResponse,
type ProxyCheckResponse,
type ProxyCreateParams,
+ type ProxyUpdateParams,
type ProxyListParams,
type ProxyCheckParams,
type ProxyListResponsesOffsetPagination,
diff --git a/src/resources/organization/limits.ts b/src/resources/organization/limits.ts
index 53f2f5c0..f0948cbd 100644
--- a/src/resources/organization/limits.ts
+++ b/src/resources/organization/limits.ts
@@ -9,8 +9,9 @@ import { RequestOptions } from '../../internal/request-options';
*/
export class Limits extends APIResource {
/**
- * Get the organization's concurrent session ceiling and the default per-project
- * concurrency cap applied to projects without an explicit override.
+ * Get the organization's concurrency limit — the maximum browsers running at once
+ * across on-demand sessions and browser pool reservations — and the default
+ * per-project concurrency cap applied to projects without an explicit override.
*/
retrieve(options?: RequestOptions): APIPromise {
return this._client.get('/org/limits', options);
@@ -19,8 +20,7 @@ export class Limits extends APIResource {
/**
* Set the default per-project concurrency cap applied to projects without an
* explicit override. Set the value to 0 to remove the default; omit to leave it
- * unchanged. The default cannot exceed the organization's concurrent session
- * ceiling.
+ * unchanged. The default cannot exceed the organization's concurrency limit.
*/
update(body: LimitUpdateParams, options?: RequestOptions): APIPromise {
return this._client.patch('/org/limits', { body, ...options });
@@ -29,7 +29,7 @@ export class Limits extends APIResource {
export interface OrgLimits {
/**
- * Default maximum concurrent browser sessions applied to every project that has no
+ * Default maximum concurrent browsers applied to every project that has no
* explicit per-project override. Null means no org-level default, so such projects
* are uncapped (only the org-wide limit applies). Applies to existing and newly
* created projects.
@@ -37,8 +37,9 @@ export interface OrgLimits {
default_project_max_concurrent_sessions?: number | null;
/**
- * The organization's effective concurrent browser session ceiling, from its plan
- * or an override. Read-only and shared across all projects in the org; a
+ * The organization's effective concurrency limit — the maximum browsers running at
+ * once, covering both on-demand sessions and browser pool reservations — from its
+ * plan or an override. Read-only and shared across all projects in the org; a
* per-project default cannot exceed it.
*/
max_concurrent_sessions?: number;
@@ -46,18 +47,18 @@ export interface OrgLimits {
export interface UpdateOrgLimitsRequest {
/**
- * Default maximum concurrent browser sessions for projects without an explicit
- * override. Set to 0 to remove the default; omit to leave unchanged. Cannot exceed
- * the organization's concurrent session ceiling.
+ * Default maximum concurrent browsers for projects without an explicit override.
+ * Set to 0 to remove the default; omit to leave unchanged. Cannot exceed the
+ * organization's concurrency limit.
*/
default_project_max_concurrent_sessions?: number | null;
}
export interface LimitUpdateParams {
/**
- * Default maximum concurrent browser sessions for projects without an explicit
- * override. Set to 0 to remove the default; omit to leave unchanged. Cannot exceed
- * the organization's concurrent session ceiling.
+ * Default maximum concurrent browsers for projects without an explicit override.
+ * Set to 0 to remove the default; omit to leave unchanged. Cannot exceed the
+ * organization's concurrency limit.
*/
default_project_max_concurrent_sessions?: number | null;
}
diff --git a/src/resources/profiles.ts b/src/resources/profiles.ts
index aa78a014..52546235 100644
--- a/src/resources/profiles.ts
+++ b/src/resources/profiles.ts
@@ -16,6 +16,11 @@ export class Profiles extends APIResource {
/**
* Create a browser profile that can be used to load state into future browser
* sessions.
+ *
+ * @example
+ * ```ts
+ * const profile = await client.profiles.create();
+ * ```
*/
create(body: ProfileCreateParams, options?: RequestOptions): APIPromise {
return this._client.post('/profiles', { body, ...options });
@@ -23,13 +28,52 @@ export class Profiles extends APIResource {
/**
* Retrieve details for a single profile by its ID or name.
+ *
+ * @example
+ * ```ts
+ * const profile = await client.profiles.retrieve(
+ * 'id_or_name',
+ * );
+ * ```
*/
retrieve(idOrName: string, options?: RequestOptions): APIPromise {
return this._client.get(path`/profiles/${idOrName}`, options);
}
+ /**
+ * Update a profile's name. Names must be unique within the logical project; during
+ * the default-project migration, unscoped profiles and profiles in the org default
+ * project are treated as the same project. Duplicate-name conflicts are checked
+ * before update but are best-effort because there is no backing unique index.
+ * Renaming a profile while a browser session references it by name may prevent
+ * that session's changes from saving; prefer renaming when the profile is not in
+ * use.
+ *
+ * @example
+ * ```ts
+ * const profile = await client.profiles.update('id_or_name', {
+ * name: 'my-renamed-profile',
+ * });
+ * ```
+ */
+ update(
+ idOrName: string,
+ body: ProfileUpdateParams,
+ options?: RequestOptions,
+ ): APIPromise {
+ return this._client.patch(path`/profiles/${idOrName}`, { body, ...options });
+ }
+
/**
* List profiles with optional filtering and pagination.
+ *
+ * @example
+ * ```ts
+ * // Automatically fetches more pages as needed.
+ * for await (const profile of client.profiles.list()) {
+ * // ...
+ * }
+ * ```
*/
list(
query: ProfileListParams | null | undefined = {},
@@ -40,6 +84,11 @@ export class Profiles extends APIResource {
/**
* Delete a profile by its ID or by its name.
+ *
+ * @example
+ * ```ts
+ * await client.profiles.delete('id_or_name');
+ * ```
*/
delete(idOrName: string, options?: RequestOptions): APIPromise {
return this._client.delete(path`/profiles/${idOrName}`, {
@@ -50,6 +99,16 @@ export class Profiles extends APIResource {
/**
* Returns a zstd-compressed tar file of the full user-data directory.
+ *
+ * @example
+ * ```ts
+ * const response = await client.profiles.download(
+ * 'id_or_name',
+ * );
+ *
+ * const content = await response.blob();
+ * console.log(content);
+ * ```
*/
download(idOrName: string, options?: RequestOptions): APIPromise {
return this._client.get(path`/profiles/${idOrName}/download`, {
@@ -62,20 +121,43 @@ export class Profiles extends APIResource {
export interface ProfileCreateParams {
/**
- * Optional name of the profile. Must be unique within the project.
+ * Optional name of the profile. Must be unique within the logical project; during
+ * the default-project migration, unscoped profiles and profiles in the org default
+ * project are treated as the same project.
*/
name?: string;
}
+export interface ProfileUpdateParams {
+ /**
+ * New profile name. Must be unique within the logical project; during the
+ * default-project migration, unscoped profiles and profiles in the org default
+ * project are treated as the same project.
+ */
+ name: string;
+}
+
export interface ProfileListParams extends OffsetPaginationParams {
/**
- * Search profiles by name or ID.
+ * Exact-match filter on profile name using the database collation. In production,
+ * matching is case- and accent-insensitive. During the default-project migration,
+ * unscoped requests prefer a concrete default-project profile over a legacy
+ * unscoped profile with the same name.
+ */
+ name?: string;
+
+ /**
+ * Case-insensitive substring match against profile name or ID.
*/
query?: string;
}
export declare namespace Profiles {
- export { type ProfileCreateParams as ProfileCreateParams, type ProfileListParams as ProfileListParams };
+ export {
+ type ProfileCreateParams as ProfileCreateParams,
+ type ProfileUpdateParams as ProfileUpdateParams,
+ type ProfileListParams as ProfileListParams,
+ };
}
export { type ProfilesOffsetPagination };
diff --git a/src/resources/projects/limits.ts b/src/resources/projects/limits.ts
index 52ec16ac..d1a3e53c 100644
--- a/src/resources/projects/limits.ts
+++ b/src/resources/projects/limits.ts
@@ -49,14 +49,16 @@ export interface ProjectLimits {
max_concurrent_invocations?: number | null;
/**
- * Maximum concurrent browser sessions for this project. Null means no
- * project-level cap.
+ * Maximum concurrent browsers for this project, covering both on-demand sessions
+ * (`browsers.create()`) and browser pool reservations. Null means no project-level
+ * cap.
*/
max_concurrent_sessions?: number | null;
/**
- * Maximum pooled sessions capacity for this project. Null means no project-level
- * cap.
+ * @deprecated Deprecated: pooled browsers now count toward
+ * `max_concurrent_sessions`. Always null once the unified concurrency limit is
+ * enabled for your organization.
*/
max_pooled_sessions?: number | null;
}
@@ -69,14 +71,16 @@ export interface UpdateProjectLimitsRequest {
max_concurrent_invocations?: number | null;
/**
- * Maximum concurrent browser sessions for this project. Set to 0 to remove the
- * cap; omit to leave unchanged.
+ * Maximum concurrent browsers for this project, covering both on-demand sessions
+ * and browser pool reservations. Set to 0 to remove the cap; omit to leave
+ * unchanged.
*/
max_concurrent_sessions?: number | null;
/**
- * Maximum pooled sessions capacity for this project. Set to 0 to remove the cap;
- * omit to leave unchanged.
+ * @deprecated Deprecated: pooled browsers now count toward
+ * `max_concurrent_sessions`. Requests that set this field are rejected with a 400
+ * once the unified concurrency limit is enabled for your organization.
*/
max_pooled_sessions?: number | null;
}
@@ -89,14 +93,16 @@ export interface LimitUpdateParams {
max_concurrent_invocations?: number | null;
/**
- * Maximum concurrent browser sessions for this project. Set to 0 to remove the
- * cap; omit to leave unchanged.
+ * Maximum concurrent browsers for this project, covering both on-demand sessions
+ * and browser pool reservations. Set to 0 to remove the cap; omit to leave
+ * unchanged.
*/
max_concurrent_sessions?: number | null;
/**
- * Maximum pooled sessions capacity for this project. Set to 0 to remove the cap;
- * omit to leave unchanged.
+ * @deprecated Deprecated: pooled browsers now count toward
+ * `max_concurrent_sessions`. Requests that set this field are rejected with a 400
+ * once the unified concurrency limit is enabled for your organization.
*/
max_pooled_sessions?: number | null;
}
diff --git a/src/resources/projects/projects.ts b/src/resources/projects/projects.ts
index e20a1c2e..9fbc1f49 100644
--- a/src/resources/projects/projects.ts
+++ b/src/resources/projects/projects.ts
@@ -155,6 +155,12 @@ export interface ProjectUpdateParams {
}
export interface ProjectListParams extends OffsetPaginationParams {
+ /**
+ * Exact-match filter on project name using the database collation. In production,
+ * matching is case- and accent-insensitive.
+ */
+ name?: string;
+
/**
* Case-insensitive substring match against project name
*/
diff --git a/src/resources/proxies.ts b/src/resources/proxies.ts
index 3dda98f5..28c592cc 100644
--- a/src/resources/proxies.ts
+++ b/src/resources/proxies.ts
@@ -13,6 +13,13 @@ import { path } from '../internal/utils/path';
export class Proxies extends APIResource {
/**
* Create a new proxy configuration in the resolved project.
+ *
+ * @example
+ * ```ts
+ * const proxy = await client.proxies.create({
+ * type: 'datacenter',
+ * });
+ * ```
*/
create(body: ProxyCreateParams, options?: RequestOptions): APIPromise {
return this._client.post('/proxies', { body, ...options });
@@ -20,13 +27,43 @@ export class Proxies extends APIResource {
/**
* Retrieve a proxy in the resolved project by ID.
+ *
+ * @example
+ * ```ts
+ * const proxy = await client.proxies.retrieve('id');
+ * ```
*/
retrieve(id: string, options?: RequestOptions): APIPromise {
return this._client.get(path`/proxies/${id}`, options);
}
+ /**
+ * Update a proxy's name. Proxy names are not unique and are not ID-or-name
+ * addressable on this endpoint; duplicate names are allowed. Name-based
+ * session-create lookups can remain ambiguous until callers resolve proxies by ID
+ * or the API adds a stronger uniqueness contract.
+ *
+ * @example
+ * ```ts
+ * const proxy = await client.proxies.update('id', {
+ * name: 'my-renamed-proxy',
+ * });
+ * ```
+ */
+ update(id: string, body: ProxyUpdateParams, options?: RequestOptions): APIPromise {
+ return this._client.patch(path`/proxies/${id}`, { body, ...options });
+ }
+
/**
* List proxies in the resolved project.
+ *
+ * @example
+ * ```ts
+ * // Automatically fetches more pages as needed.
+ * for await (const proxyListResponse of client.proxies.list()) {
+ * // ...
+ * }
+ * ```
*/
list(
query: ProxyListParams | null | undefined = {},
@@ -37,6 +74,11 @@ export class Proxies extends APIResource {
/**
* Soft delete a proxy. Sessions referencing it are not modified.
+ *
+ * @example
+ * ```ts
+ * await client.proxies.delete('id');
+ * ```
*/
delete(id: string, options?: RequestOptions): APIPromise {
return this._client.delete(path`/proxies/${id}`, {
@@ -52,6 +94,11 @@ export class Proxies extends APIResource {
* exit IP. For residential and mobile proxies, the exit node varies between
* requests, so this validates proxy configuration and connectivity rather than
* guaranteeing site-specific reachability.
+ *
+ * @example
+ * ```ts
+ * const response = await client.proxies.check('id');
+ * ```
*/
check(
id: string,
@@ -376,6 +423,162 @@ export namespace ProxyRetrieveResponse {
}
}
+/**
+ * Configuration for routing traffic through a proxy.
+ */
+export interface ProxyUpdateResponse {
+ /**
+ * Proxy type to use. In terms of quality for avoiding bot-detection, from best to
+ * worst: `mobile` > `residential` > `isp` > `datacenter`.
+ */
+ type: 'datacenter' | 'isp' | 'residential' | 'mobile' | 'custom';
+
+ id?: string;
+
+ /**
+ * Hostnames that should bypass the parent proxy and connect directly.
+ */
+ bypass_hosts?: Array;
+
+ /**
+ * Configuration specific to the selected proxy `type`.
+ */
+ config?:
+ | ProxyUpdateResponse.DatacenterProxyConfig
+ | ProxyUpdateResponse.IspProxyConfig
+ | ProxyUpdateResponse.ResidentialProxyConfig
+ | ProxyUpdateResponse.MobileProxyConfig
+ | ProxyUpdateResponse.CustomProxyConfig;
+
+ /**
+ * IP address that the proxy uses when making requests.
+ */
+ ip_address?: string;
+
+ /**
+ * Timestamp of the last health check performed on this proxy.
+ */
+ last_checked?: string;
+
+ /**
+ * Readable name of the proxy.
+ */
+ name?: string;
+
+ /**
+ * Protocol to use for the proxy connection.
+ */
+ protocol?: 'http' | 'https';
+
+ /**
+ * Current health status of the proxy.
+ */
+ status?: 'available' | 'unavailable';
+}
+
+export namespace ProxyUpdateResponse {
+ /**
+ * Configuration for a datacenter proxy.
+ */
+ export interface DatacenterProxyConfig {
+ /**
+ * ISO 3166 country code. Defaults to US if not provided.
+ */
+ country?: string;
+ }
+
+ /**
+ * Configuration for an ISP proxy.
+ */
+ export interface IspProxyConfig {
+ /**
+ * ISO 3166 country code. Defaults to US if not provided.
+ */
+ country?: string;
+ }
+
+ /**
+ * Configuration for residential proxies.
+ */
+ export interface ResidentialProxyConfig {
+ /**
+ * Autonomous system number. See https://bgp.potaroo.net/cidr/autnums.html
+ */
+ asn?: string;
+
+ /**
+ * City name (no spaces, e.g. `sanfrancisco`). If provided, `country` must also be
+ * provided.
+ */
+ city?: string;
+
+ /**
+ * ISO 3166 country code.
+ */
+ country?: string;
+
+ /**
+ * @deprecated Operating system of the residential device.
+ */
+ os?: 'windows' | 'macos' | 'android';
+
+ /**
+ * Two-letter state code.
+ */
+ state?: string;
+
+ /**
+ * US ZIP code.
+ */
+ zip?: string;
+ }
+
+ /**
+ * Configuration for mobile proxies.
+ */
+ export interface MobileProxyConfig {
+ /**
+ * Provider city alias. Mobile carrier routing can make observed geo vary.
+ */
+ city?: string;
+
+ /**
+ * ISO 3166 country code
+ */
+ country?: string;
+
+ /**
+ * US-only state code. Mobile carrier routing can make observed geo vary.
+ */
+ state?: string;
+ }
+
+ /**
+ * Configuration for a custom proxy (e.g., private proxy server).
+ */
+ export interface CustomProxyConfig {
+ /**
+ * Proxy host address or IP.
+ */
+ host: string;
+
+ /**
+ * Proxy port.
+ */
+ port: number;
+
+ /**
+ * Whether the proxy has a password.
+ */
+ has_password?: boolean;
+
+ /**
+ * Username for proxy authentication.
+ */
+ username?: string;
+ }
+}
+
/**
* Configuration for routing traffic through a proxy.
*/
@@ -824,9 +1027,25 @@ export namespace ProxyCreateParams {
}
}
+export interface ProxyUpdateParams {
+ /**
+ * New proxy name. Proxy names are trimmed and length-checked only; duplicates are
+ * allowed because proxies are updated by ID, not by name.
+ */
+ name: string;
+}
+
export interface ProxyListParams extends OffsetPaginationParams {
/**
- * Search proxies by name, host, IP address, or ID.
+ * Exact-match filter on proxy name using the database collation. In production,
+ * matching is case- and accent-insensitive. Names are not required to be unique,
+ * so multiple proxies may match.
+ */
+ name?: string;
+
+ /**
+ * Case-insensitive substring match against proxy name, host, or IP address. IDs
+ * match by exact value.
*/
query?: string;
}
@@ -853,10 +1072,12 @@ export declare namespace Proxies {
export {
type ProxyCreateResponse as ProxyCreateResponse,
type ProxyRetrieveResponse as ProxyRetrieveResponse,
+ type ProxyUpdateResponse as ProxyUpdateResponse,
type ProxyListResponse as ProxyListResponse,
type ProxyCheckResponse as ProxyCheckResponse,
type ProxyListResponsesOffsetPagination as ProxyListResponsesOffsetPagination,
type ProxyCreateParams as ProxyCreateParams,
+ type ProxyUpdateParams as ProxyUpdateParams,
type ProxyListParams as ProxyListParams,
type ProxyCheckParams as ProxyCheckParams,
};
diff --git a/src/version.ts b/src/version.ts
index 2c80dbec..3d604761 100644
--- a/src/version.ts
+++ b/src/version.ts
@@ -1 +1 @@
-export const VERSION = '0.76.0'; // x-release-please-version
+export const VERSION = '0.78.0'; // x-release-please-version
diff --git a/tests/api-resources/api-keys.test.ts b/tests/api-resources/api-keys.test.ts
index b179ccfb..6456eace 100644
--- a/tests/api-resources/api-keys.test.ts
+++ b/tests/api-resources/api-keys.test.ts
@@ -86,6 +86,7 @@ describe('resource apiKeys', () => {
{
include_deleted: true,
limit: 100,
+ name: 'name',
offset: 0,
query: 'query',
sort_by: 'created_at',
diff --git a/tests/api-resources/audit-logs.test.ts b/tests/api-resources/audit-logs.test.ts
index b1773ceb..ebce088d 100644
--- a/tests/api-resources/audit-logs.test.ts
+++ b/tests/api-resources/audit-logs.test.ts
@@ -29,7 +29,7 @@ describe('resource auditLogs', () => {
end: '2026-01-02T00:00:00Z',
start: '2026-01-01T00:00:00Z',
auth_strategy: 'auth_strategy',
- exclude_method: 'exclude_method',
+ exclude_method: ['string'],
limit: 1,
method: 'method',
page_token: 'page_token',
@@ -46,7 +46,7 @@ describe('resource auditLogs', () => {
start: '2026-01-01T00:00:00Z',
auth_strategy: 'auth_strategy',
cursor: 'cursor',
- exclude_method: 'exclude_method',
+ exclude_method: ['string'],
format: 'jsonl',
limit: 1,
method: 'method',
diff --git a/tests/api-resources/browser-pools.test.ts b/tests/api-resources/browser-pools.test.ts
index bb7370a6..e061f651 100644
--- a/tests/api-resources/browser-pools.test.ts
+++ b/tests/api-resources/browser-pools.test.ts
@@ -87,6 +87,7 @@ describe('resource browserPools', () => {
client.browserPools.list(
{
limit: 1,
+ name: 'name',
offset: 0,
query: 'query',
},
diff --git a/tests/api-resources/extensions.test.ts b/tests/api-resources/extensions.test.ts
index 8d196d93..ecdcdc2e 100644
--- a/tests/api-resources/extensions.test.ts
+++ b/tests/api-resources/extensions.test.ts
@@ -27,6 +27,7 @@ describe('resource extensions', () => {
client.extensions.list(
{
limit: 1,
+ name: 'name',
offset: 0,
query: 'query',
},
diff --git a/tests/api-resources/profiles.test.ts b/tests/api-resources/profiles.test.ts
index 0bbb5574..13ff21e4 100644
--- a/tests/api-resources/profiles.test.ts
+++ b/tests/api-resources/profiles.test.ts
@@ -32,6 +32,23 @@ describe('resource profiles', () => {
expect(dataAndResponse.response).toBe(rawResponse);
});
+ // Mock server tests are disabled
+ test.skip('update: only required params', async () => {
+ const responsePromise = client.profiles.update('id_or_name', { name: 'my-renamed-profile' });
+ 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('update: required and optional params', async () => {
+ const response = await client.profiles.update('id_or_name', { name: 'my-renamed-profile' });
+ });
+
// Mock server tests are disabled
test.skip('list', async () => {
const responsePromise = client.profiles.list();
@@ -51,6 +68,7 @@ describe('resource profiles', () => {
client.profiles.list(
{
limit: 1,
+ name: 'name',
offset: 0,
query: 'query',
},
diff --git a/tests/api-resources/projects/projects.test.ts b/tests/api-resources/projects/projects.test.ts
index 229d6581..f4be4431 100644
--- a/tests/api-resources/projects/projects.test.ts
+++ b/tests/api-resources/projects/projects.test.ts
@@ -68,6 +68,7 @@ describe('resource projects', () => {
client.projects.list(
{
limit: 100,
+ name: 'name',
offset: 0,
query: 'query',
},
diff --git a/tests/api-resources/proxies.test.ts b/tests/api-resources/proxies.test.ts
index e64b2747..800ba2c0 100644
--- a/tests/api-resources/proxies.test.ts
+++ b/tests/api-resources/proxies.test.ts
@@ -43,6 +43,23 @@ describe('resource proxies', () => {
expect(dataAndResponse.response).toBe(rawResponse);
});
+ // Mock server tests are disabled
+ test.skip('update: only required params', async () => {
+ const responsePromise = client.proxies.update('id', { name: 'my-renamed-proxy' });
+ 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('update: required and optional params', async () => {
+ const response = await client.proxies.update('id', { name: 'my-renamed-proxy' });
+ });
+
// Mock server tests are disabled
test.skip('list', async () => {
const responsePromise = client.proxies.list();
@@ -62,6 +79,7 @@ describe('resource proxies', () => {
client.proxies.list(
{
limit: 1,
+ name: 'name',
offset: 0,
query: 'query',
},
diff --git a/yarn.lock b/yarn.lock
index 3540e212..4bc693e4 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12,12 +12,12 @@
resolved "https://registry.yarnpkg.com/@andrewbranch/untar.js/-/untar.js-1.0.3.tgz#ba9494f85eb83017c5c855763969caf1d0adea00"
integrity sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==
-"@arethetypeswrong/cli@^0.17.0":
- version "0.17.0"
- resolved "https://registry.yarnpkg.com/@arethetypeswrong/cli/-/cli-0.17.0.tgz#f97f10926b3f9f9eb5117550242d2e06c25cadac"
- integrity sha512-xSMW7bfzVWpYw5JFgZqBXqr6PdR0/REmn3DkxCES5N0JTcB0CVgbIynJCvKBFmXaPc3hzmmTrb7+yPDRoOSZdA==
+"@arethetypeswrong/cli@^0.18.0":
+ version "0.18.4"
+ resolved "https://registry.yarnpkg.com/@arethetypeswrong/cli/-/cli-0.18.4.tgz#c31f54f3b0d0e0f3256ab3edb6530beeb5e64b4b"
+ integrity sha512-kNWo6LTzGAuLYPpJ7Sgo63whSUeeSuKMlYx6IBgzs4ONEG807gW4hSSENvpeCHzO2H2wIzG5EFl0OKBbqGBAyA==
dependencies:
- "@arethetypeswrong/core" "0.17.0"
+ "@arethetypeswrong/core" "0.18.4"
chalk "^4.1.2"
cli-table3 "^0.6.3"
commander "^10.0.1"
@@ -25,15 +25,16 @@
marked-terminal "^7.1.0"
semver "^7.5.4"
-"@arethetypeswrong/core@0.17.0":
- version "0.17.0"
- resolved "https://registry.yarnpkg.com/@arethetypeswrong/core/-/core-0.17.0.tgz#abb3b5f425056d37193644c2a2de4aecf866b76b"
- integrity sha512-FHyhFizXNetigTVsIhqXKGYLpazPS5YNojEPpZEUcBPt9wVvoEbNIvG+hybuBR+pjlRcbyuqhukHZm1fr+bDgA==
+"@arethetypeswrong/core@0.18.4":
+ version "0.18.4"
+ resolved "https://registry.yarnpkg.com/@arethetypeswrong/core/-/core-0.18.4.tgz#24edea3d651dea7d32bf6f1cc9ee9a00db39de49"
+ integrity sha512-M5F0ePyN6h2Z6XxRiyIPqjGbltotXLjR0CKA0uKspsDu0QmgTNYvRb4RSQPMUs2ZXZHCCYpbaZbFbYOXLxCjUA==
dependencies:
"@andrewbranch/untar.js" "^1.0.3"
+ "@loaderkit/resolve" "^1.0.2"
cjs-module-lexer "^1.2.3"
- fflate "^0.8.2"
- lru-cache "^10.4.3"
+ fflate "^0.8.3"
+ lru-cache "^11.0.1"
semver "^7.5.4"
typescript "5.6.1-rc"
validate-npm-package-name "^5.0.0"
@@ -306,6 +307,11 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@braidai/lang@^1.0.0":
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/@braidai/lang/-/lang-1.1.2.tgz#65bc2bc1db6d00e153b95ac7006f4573e289e9be"
+ integrity sha512-qBcknbBufNHlui137Hft8xauQMTZDKdophmLFv05r2eNmdIv/MlPuP4TdUknHG68UdWLgVZwgxVe735HzJNIwA==
+
"@colors/colors@1.5.0":
version "1.5.0"
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
@@ -688,6 +694,13 @@
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
+"@loaderkit/resolve@^1.0.2":
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/@loaderkit/resolve/-/resolve-1.0.6.tgz#8d45341e688faecc25b3ae919c0f45d94c4e26c9"
+ integrity sha512-G8FdIoF5CypfwmD9rl8BXod5HDn8JqB0CCNBXDTaRZ+yRYhARrrSToX1zg1zy9jX3zLqigsELwhT4gNtkdQAUg==
+ dependencies:
+ "@braidai/lang" "^1.0.0"
+
"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
@@ -1710,10 +1723,10 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-fflate@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.2.tgz#fc8631f5347812ad6028bbe4a2308b2792aa1dea"
- integrity sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==
+fflate@^0.8.3:
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.8.3.tgz#bc27d8eb30343d4d512abb03480202ce65d825fc"
+ integrity sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==
file-entry-cache@^8.0.0:
version "8.0.0"
@@ -2504,10 +2517,10 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lru-cache@^10.4.3:
- version "10.4.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
- integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
+lru-cache@^11.0.1:
+ version "11.5.2"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.5.2.tgz#00e16665c90c620fba14a3c368732a976493f760"
+ integrity sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==
lru-cache@^5.1.1:
version "5.1.1"