Skip to content

Commit 115aa05

Browse files
feat: allow get browser to paginate soft deleted browsers
1 parent d7e4b06 commit 115aa05

File tree

7 files changed

+139
-90
lines changed

7 files changed

+139
-90
lines changed

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 66
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d611cf8b0301a07123eab0e92498bea5ad69c5292b28aca1016c362cca0a0564.yml
3-
openapi_spec_hash: 6d30f4ad9d61a7da8a75d543cf3d3d75
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-2af1b468584cb44aa9babbbfb82bff4055614fbb5c815084a6b7dacc1cf1a822.yml
3+
openapi_spec_hash: 891affa2849341ea01d62011125f7edc
44
config_hash: 9421eb86b7f3f4b274f123279da3858e

api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ Methods:
7070

7171
- <code title="post /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">create</a>({ ...params }) -> BrowserCreateResponse</code>
7272
- <code title="get /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">retrieve</a>(id) -> BrowserRetrieveResponse</code>
73-
- <code title="get /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">list</a>() -> BrowserListResponse</code>
73+
- <code title="get /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">list</a>({ ...params }) -> BrowserListResponsesOffsetPagination</code>
7474
- <code title="delete /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">delete</a>({ ...params }) -> void</code>
7575
- <code title="delete /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">deleteByID</a>(id) -> void</code>
7676
- <code title="post /browsers/{id}/extensions">client.browsers.<a href="./src/resources/browsers/browsers.ts">loadExtensions</a>(id, { ...params }) -> void</code>

src/client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ import {
6565
BrowserCreateParams,
6666
BrowserCreateResponse,
6767
BrowserDeleteParams,
68+
BrowserListParams,
6869
BrowserListResponse,
70+
BrowserListResponsesOffsetPagination,
6971
BrowserLoadExtensionsParams,
7072
BrowserPersistence,
7173
BrowserRetrieveResponse,
@@ -902,7 +904,9 @@ export declare namespace Kernel {
902904
type BrowserCreateResponse as BrowserCreateResponse,
903905
type BrowserRetrieveResponse as BrowserRetrieveResponse,
904906
type BrowserListResponse as BrowserListResponse,
907+
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
905908
type BrowserCreateParams as BrowserCreateParams,
909+
type BrowserListParams as BrowserListParams,
906910
type BrowserDeleteParams as BrowserDeleteParams,
907911
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
908912
};

src/resources/browsers/browsers.ts

Lines changed: 117 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
import { APIResource } from '../../core/resource';
4-
import * as BrowsersAPI from './browsers';
54
import * as ComputerAPI from './computer';
65
import {
76
Computer,
@@ -63,6 +62,7 @@ import {
6362
Fs,
6463
} from './fs/fs';
6564
import { APIPromise } from '../../core/api-promise';
65+
import { OffsetPagination, type OffsetPaginationParams, PagePromise } from '../../core/pagination';
6666
import { type Uploadable } from '../../core/uploads';
6767
import { buildHeaders } from '../../internal/headers';
6868
import { RequestOptions } from '../../internal/request-options';
@@ -107,15 +107,22 @@ export class Browsers extends APIResource {
107107
}
108108

109109
/**
110-
* List active browser sessions
110+
* List all browser sessions with pagination support. Use include_deleted=true to
111+
* include soft-deleted sessions in the results.
111112
*
112113
* @example
113114
* ```ts
114-
* const browsers = await client.browsers.list();
115+
* // Automatically fetches more pages as needed.
116+
* for await (const browserListResponse of client.browsers.list()) {
117+
* // ...
118+
* }
115119
* ```
116120
*/
117-
list(options?: RequestOptions): APIPromise<BrowserListResponse> {
118-
return this._client.get('/browsers', options);
121+
list(
122+
query: BrowserListParams | null | undefined = {},
123+
options?: RequestOptions,
124+
): PagePromise<BrowserListResponsesOffsetPagination, BrowserListResponse> {
125+
return this._client.getAPIList('/browsers', OffsetPagination<BrowserListResponse>, { query, ...options });
119126
}
120127

121128
/**
@@ -181,6 +188,8 @@ export class Browsers extends APIResource {
181188
}
182189
}
183190

191+
export type BrowserListResponsesOffsetPagination = OffsetPagination<BrowserListResponse>;
192+
184193
/**
185194
* Optional persistence configuration for the browser session.
186195
*/
@@ -258,6 +267,11 @@ export interface BrowserCreateResponse {
258267
*/
259268
browser_live_view_url?: string;
260269

270+
/**
271+
* When the browser session was soft-deleted. Only present for deleted sessions.
272+
*/
273+
deleted_at?: string;
274+
261275
/**
262276
* Whether the browser session is running in kiosk mode.
263277
*/
@@ -358,6 +372,11 @@ export interface BrowserRetrieveResponse {
358372
*/
359373
browser_live_view_url?: string;
360374

375+
/**
376+
* When the browser session was soft-deleted. Only present for deleted sessions.
377+
*/
378+
deleted_at?: string;
379+
361380
/**
362381
* Whether the browser session is running in kiosk mode.
363382
*/
@@ -421,107 +440,108 @@ export namespace BrowserRetrieveResponse {
421440
}
422441
}
423442

424-
export type BrowserListResponse = Array<BrowserListResponse.BrowserListResponseItem>;
443+
export interface BrowserListResponse {
444+
/**
445+
* Websocket URL for Chrome DevTools Protocol connections to the browser session
446+
*/
447+
cdp_ws_url: string;
425448

426-
export namespace BrowserListResponse {
427-
export interface BrowserListResponseItem {
428-
/**
429-
* Websocket URL for Chrome DevTools Protocol connections to the browser session
430-
*/
431-
cdp_ws_url: string;
449+
/**
450+
* When the browser session was created.
451+
*/
452+
created_at: string;
432453

433-
/**
434-
* When the browser session was created.
435-
*/
436-
created_at: string;
454+
/**
455+
* Whether the browser session is running in headless mode.
456+
*/
457+
headless: boolean;
437458

438-
/**
439-
* Whether the browser session is running in headless mode.
440-
*/
441-
headless: boolean;
459+
/**
460+
* Unique identifier for the browser session
461+
*/
462+
session_id: string;
442463

443-
/**
444-
* Unique identifier for the browser session
445-
*/
446-
session_id: string;
464+
/**
465+
* Whether the browser session is running in stealth mode.
466+
*/
467+
stealth: boolean;
447468

448-
/**
449-
* Whether the browser session is running in stealth mode.
450-
*/
451-
stealth: boolean;
469+
/**
470+
* The number of seconds of inactivity before the browser session is terminated.
471+
*/
472+
timeout_seconds: number;
452473

453-
/**
454-
* The number of seconds of inactivity before the browser session is terminated.
455-
*/
456-
timeout_seconds: number;
474+
/**
475+
* Remote URL for live viewing the browser session. Only available for non-headless
476+
* browsers.
477+
*/
478+
browser_live_view_url?: string;
457479

458-
/**
459-
* Remote URL for live viewing the browser session. Only available for non-headless
460-
* browsers.
461-
*/
462-
browser_live_view_url?: string;
480+
/**
481+
* When the browser session was soft-deleted. Only present for deleted sessions.
482+
*/
483+
deleted_at?: string;
463484

464-
/**
465-
* Whether the browser session is running in kiosk mode.
466-
*/
467-
kiosk_mode?: boolean;
485+
/**
486+
* Whether the browser session is running in kiosk mode.
487+
*/
488+
kiosk_mode?: boolean;
468489

469-
/**
470-
* Optional persistence configuration for the browser session.
471-
*/
472-
persistence?: BrowsersAPI.BrowserPersistence;
490+
/**
491+
* Optional persistence configuration for the browser session.
492+
*/
493+
persistence?: BrowserPersistence;
473494

474-
/**
475-
* Browser profile metadata.
476-
*/
477-
profile?: BrowsersAPI.Profile;
495+
/**
496+
* Browser profile metadata.
497+
*/
498+
profile?: Profile;
499+
500+
/**
501+
* ID of the proxy associated with this browser session, if any.
502+
*/
503+
proxy_id?: string;
504+
505+
/**
506+
* Initial browser window size in pixels with optional refresh rate. If omitted,
507+
* image defaults apply (commonly 1024x768@60). Only specific viewport
508+
* configurations are supported. The server will reject unsupported combinations.
509+
* Supported resolutions are: 2560x1440@10, 1920x1080@25, 1920x1200@25,
510+
* 1440x900@25, 1024x768@60, 1200x800@60 If refresh_rate is not provided, it will
511+
* be automatically determined from the width and height if they match a supported
512+
* configuration exactly. Note: Higher resolutions may affect the responsiveness of
513+
* live view browser
514+
*/
515+
viewport?: BrowserListResponse.Viewport;
516+
}
478517

518+
export namespace BrowserListResponse {
519+
/**
520+
* Initial browser window size in pixels with optional refresh rate. If omitted,
521+
* image defaults apply (commonly 1024x768@60). Only specific viewport
522+
* configurations are supported. The server will reject unsupported combinations.
523+
* Supported resolutions are: 2560x1440@10, 1920x1080@25, 1920x1200@25,
524+
* 1440x900@25, 1024x768@60, 1200x800@60 If refresh_rate is not provided, it will
525+
* be automatically determined from the width and height if they match a supported
526+
* configuration exactly. Note: Higher resolutions may affect the responsiveness of
527+
* live view browser
528+
*/
529+
export interface Viewport {
479530
/**
480-
* ID of the proxy associated with this browser session, if any.
531+
* Browser window height in pixels.
481532
*/
482-
proxy_id?: string;
533+
height: number;
483534

484535
/**
485-
* Initial browser window size in pixels with optional refresh rate. If omitted,
486-
* image defaults apply (commonly 1024x768@60). Only specific viewport
487-
* configurations are supported. The server will reject unsupported combinations.
488-
* Supported resolutions are: 2560x1440@10, 1920x1080@25, 1920x1200@25,
489-
* 1440x900@25, 1024x768@60, 1200x800@60 If refresh_rate is not provided, it will
490-
* be automatically determined from the width and height if they match a supported
491-
* configuration exactly. Note: Higher resolutions may affect the responsiveness of
492-
* live view browser
536+
* Browser window width in pixels.
493537
*/
494-
viewport?: BrowserListResponseItem.Viewport;
495-
}
538+
width: number;
496539

497-
export namespace BrowserListResponseItem {
498540
/**
499-
* Initial browser window size in pixels with optional refresh rate. If omitted,
500-
* image defaults apply (commonly 1024x768@60). Only specific viewport
501-
* configurations are supported. The server will reject unsupported combinations.
502-
* Supported resolutions are: 2560x1440@10, 1920x1080@25, 1920x1200@25,
503-
* 1440x900@25, 1024x768@60, 1200x800@60 If refresh_rate is not provided, it will
504-
* be automatically determined from the width and height if they match a supported
505-
* configuration exactly. Note: Higher resolutions may affect the responsiveness of
506-
* live view browser
541+
* Display refresh rate in Hz. If omitted, automatically determined from width and
542+
* height.
507543
*/
508-
export interface Viewport {
509-
/**
510-
* Browser window height in pixels.
511-
*/
512-
height: number;
513-
514-
/**
515-
* Browser window width in pixels.
516-
*/
517-
width: number;
518-
519-
/**
520-
* Display refresh rate in Hz. If omitted, automatically determined from width and
521-
* height.
522-
*/
523-
refresh_rate?: number;
524-
}
544+
refresh_rate?: number;
525545
}
526546
}
527547

@@ -666,6 +686,14 @@ export namespace BrowserCreateParams {
666686
}
667687
}
668688

689+
export interface BrowserListParams extends OffsetPaginationParams {
690+
/**
691+
* When true, includes soft-deleted browser sessions in the results alongside
692+
* active sessions.
693+
*/
694+
include_deleted?: boolean;
695+
}
696+
669697
export interface BrowserDeleteParams {
670698
/**
671699
* Persistent browser identifier
@@ -709,7 +737,9 @@ export declare namespace Browsers {
709737
type BrowserCreateResponse as BrowserCreateResponse,
710738
type BrowserRetrieveResponse as BrowserRetrieveResponse,
711739
type BrowserListResponse as BrowserListResponse,
740+
type BrowserListResponsesOffsetPagination as BrowserListResponsesOffsetPagination,
712741
type BrowserCreateParams as BrowserCreateParams,
742+
type BrowserListParams as BrowserListParams,
713743
type BrowserDeleteParams as BrowserDeleteParams,
714744
type BrowserLoadExtensionsParams as BrowserLoadExtensionsParams,
715745
};

src/resources/browsers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ export {
88
type BrowserRetrieveResponse,
99
type BrowserListResponse,
1010
type BrowserCreateParams,
11+
type BrowserListParams,
1112
type BrowserDeleteParams,
1213
type BrowserLoadExtensionsParams,
14+
type BrowserListResponsesOffsetPagination,
1315
} from './browsers';
1416
export {
1517
Computer,

src/resources/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ export {
1515
type BrowserRetrieveResponse,
1616
type BrowserListResponse,
1717
type BrowserCreateParams,
18+
type BrowserListParams,
1819
type BrowserDeleteParams,
1920
type BrowserLoadExtensionsParams,
21+
type BrowserListResponsesOffsetPagination,
2022
} from './browsers/browsers';
2123
export {
2224
Deployments,

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ describe('resource browsers', () => {
6666
expect(dataAndResponse.response).toBe(rawResponse);
6767
});
6868

69+
// Prism tests are disabled
70+
test.skip('list: request options and params are passed correctly', async () => {
71+
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
72+
await expect(
73+
client.browsers.list(
74+
{ include_deleted: true, limit: 1, offset: 0 },
75+
{ path: '/_stainless_unknown_path' },
76+
),
77+
).rejects.toThrow(Kernel.NotFoundError);
78+
});
79+
6980
// Prism tests are disabled
7081
test.skip('delete: only required params', async () => {
7182
const responsePromise = client.browsers.delete({ persistent_id: 'persistent_id' });

0 commit comments

Comments
 (0)