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"