Skip to content

Commit e60b999

Browse files
feat: add POST /browsers/{id}/curl and /curl/raw endpoints
1 parent 591019f commit e60b999

7 files changed

Lines changed: 113 additions & 4 deletions

File tree

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 111
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-7d048a0d07483d4fa8d1094f5ec172d1758f044b4e5ced1f41f92f1de8b47def.yml
3-
openapi_spec_hash: 0ffef6a95f9d9b1096180fc5e4c5b39c
4-
config_hash: 9818dd634f87b677410eefd013d7a179
1+
configured_endpoints: 112
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-930823e8b25b4644b74098ad5479840f64a329321aa236460f8a9562ae9051bf.yml
3+
openapi_spec_hash: 9f868e67df8fd2fec8d8fc3eb5ba0b26
4+
config_hash: 08d55086449943a8fec212b870061a3f

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ Types:
7474
- <code><a href="./src/resources/browsers/browsers.ts">BrowserRetrieveResponse</a></code>
7575
- <code><a href="./src/resources/browsers/browsers.ts">BrowserUpdateResponse</a></code>
7676
- <code><a href="./src/resources/browsers/browsers.ts">BrowserListResponse</a></code>
77+
- <code><a href="./src/resources/browsers/browsers.ts">BrowserCurlResponse</a></code>
7778

7879
Methods:
7980

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

src/client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ import { Auth } from './resources/auth/auth';
103103
import {
104104
BrowserCreateParams,
105105
BrowserCreateResponse,
106+
BrowserCurlParams,
107+
BrowserCurlResponse,
106108
BrowserDeleteParams,
107109
BrowserListParams,
108110
BrowserListResponse,
@@ -1013,12 +1015,14 @@ export declare namespace Kernel {
10131015
type BrowserRetrieveResponse as BrowserRetrieveResponse,
10141016
type BrowserUpdateResponse as BrowserUpdateResponse,
10151017
type BrowserListResponse as BrowserListResponse,
1018+
type BrowserCurlResponse as BrowserCurlResponse,
10161019
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
10171020
type BrowserCreateParams as BrowserCreateParams,
10181021
type BrowserRetrieveParams as BrowserRetrieveParams,
10191022
type BrowserUpdateParams as BrowserUpdateParams,
10201023
type BrowserListParams as BrowserListParams,
10211024
type BrowserDeleteParams as BrowserDeleteParams,
1025+
type BrowserCurlParams as BrowserCurlParams,
10221026
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
10231027
};
10241028

src/resources/browsers/browsers.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,22 @@ export class Browsers extends APIResource {
168168
});
169169
}
170170

171+
/**
172+
* Sends an HTTP request through Chrome's HTTP request stack, inheriting the
173+
* browser's TLS fingerprint, cookies, proxy configuration, and headers. Returns a
174+
* structured JSON response with status, headers, body, and timing.
175+
*
176+
* @example
177+
* ```ts
178+
* const response = await client.browsers.curl('id', {
179+
* url: 'url',
180+
* });
181+
* ```
182+
*/
183+
curl(id: string, body: BrowserCurlParams, options?: RequestOptions): APIPromise<BrowserCurlResponse> {
184+
return this._client.post(path`/browsers/${id}/curl`, { body, ...options });
185+
}
186+
171187
/**
172188
* Delete a browser session by ID
173189
*
@@ -706,6 +722,31 @@ export interface BrowserListResponse {
706722
viewport?: Shared.BrowserViewport;
707723
}
708724

725+
/**
726+
* Structured response from the browser curl request.
727+
*/
728+
export interface BrowserCurlResponse {
729+
/**
730+
* Response body (UTF-8 string or base64 depending on request).
731+
*/
732+
body: string;
733+
734+
/**
735+
* Total request duration in milliseconds.
736+
*/
737+
duration_ms: number;
738+
739+
/**
740+
* Response headers (multi-value).
741+
*/
742+
headers: { [key: string]: Array<string> };
743+
744+
/**
745+
* HTTP status code from target.
746+
*/
747+
status: number;
748+
}
749+
709750
export interface BrowserCreateParams {
710751
/**
711752
* List of browser extensions to load into the session. Provide each by id or name.
@@ -859,6 +900,38 @@ export interface BrowserDeleteParams {
859900
persistent_id: string;
860901
}
861902

903+
export interface BrowserCurlParams {
904+
/**
905+
* Target URL (must be http or https).
906+
*/
907+
url: string;
908+
909+
/**
910+
* Request body (for POST/PUT/PATCH).
911+
*/
912+
body?: string;
913+
914+
/**
915+
* Custom headers merged with browser defaults.
916+
*/
917+
headers?: { [key: string]: string };
918+
919+
/**
920+
* HTTP method.
921+
*/
922+
method?: 'GET' | 'HEAD' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS';
923+
924+
/**
925+
* Encoding for the response body. Use base64 for binary content.
926+
*/
927+
response_encoding?: 'utf8' | 'base64';
928+
929+
/**
930+
* Request timeout in milliseconds.
931+
*/
932+
timeout_ms?: number;
933+
}
934+
862935
export interface BrowserLoadExtensionsParams {
863936
/**
864937
* List of extensions to upload and activate
@@ -898,12 +971,14 @@ export declare namespace Browsers {
898971
type BrowserRetrieveResponse as BrowserRetrieveResponse,
899972
type BrowserUpdateResponse as BrowserUpdateResponse,
900973
type BrowserListResponse as BrowserListResponse,
974+
type BrowserCurlResponse as BrowserCurlResponse,
901975
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
902976
type BrowserCreateParams as BrowserCreateParams,
903977
type BrowserRetrieveParams as BrowserRetrieveParams,
904978
type BrowserUpdateParams as BrowserUpdateParams,
905979
type BrowserListParams as BrowserListParams,
906980
type BrowserDeleteParams as BrowserDeleteParams,
981+
type BrowserCurlParams as BrowserCurlParams,
907982
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
908983
};
909984

src/resources/browsers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ export {
1010
type BrowserRetrieveResponse,
1111
type BrowserUpdateResponse,
1212
type BrowserListResponse,
13+
type BrowserCurlResponse,
1314
type BrowserCreateParams,
1415
type BrowserRetrieveParams,
1516
type BrowserUpdateParams,
1617
type BrowserListParams,
1718
type BrowserDeleteParams,
19+
type BrowserCurlParams,
1820
type BrowserLoadExtensionsParams,
1921
type ProfilesOffsetPagination,
2022
type BrowserListResponsesOffsetPagination,

src/resources/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@ export {
2929
type BrowserRetrieveResponse,
3030
type BrowserUpdateResponse,
3131
type BrowserListResponse,
32+
type BrowserCurlResponse,
3233
type BrowserCreateParams,
3334
type BrowserRetrieveParams,
3435
type BrowserUpdateParams,
3536
type BrowserListParams,
3637
type BrowserDeleteParams,
38+
type BrowserCurlParams,
3739
type BrowserLoadExtensionsParams,
3840
type ProfilesOffsetPagination,
3941
type BrowserListResponsesOffsetPagination,

tests/api-resources/browsers/browsers.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,30 @@ describe('resource browsers', () => {
133133
const response = await client.browsers.delete({ persistent_id: 'persistent_id' });
134134
});
135135

136+
// Mock server tests are disabled
137+
test.skip('curl: only required params', async () => {
138+
const responsePromise = client.browsers.curl('id', { url: 'url' });
139+
const rawResponse = await responsePromise.asResponse();
140+
expect(rawResponse).toBeInstanceOf(Response);
141+
const response = await responsePromise;
142+
expect(response).not.toBeInstanceOf(Response);
143+
const dataAndResponse = await responsePromise.withResponse();
144+
expect(dataAndResponse.data).toBe(response);
145+
expect(dataAndResponse.response).toBe(rawResponse);
146+
});
147+
148+
// Mock server tests are disabled
149+
test.skip('curl: required and optional params', async () => {
150+
const response = await client.browsers.curl('id', {
151+
url: 'url',
152+
body: 'body',
153+
headers: { foo: 'string' },
154+
method: 'GET',
155+
response_encoding: 'utf8',
156+
timeout_ms: 1000,
157+
});
158+
});
159+
136160
// Mock server tests are disabled
137161
test.skip('deleteByID', async () => {
138162
const responsePromise = client.browsers.deleteByID('htzv5orfit78e1m2biiifpbv');

0 commit comments

Comments
 (0)