Skip to content

Commit 429f2b1

Browse files
feat(mux): wait_for_eviction endpoint for flex eviction notifications (#10325)
1 parent 835c772 commit 429f2b1

7 files changed

Lines changed: 53 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: 119
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai/runloop-d0efdaa19d8a5685def3947450df7f9bdaf9bad3243317d514add5d22129fc5f.yml
3-
openapi_spec_hash: 7e484ea9f60294503bf4691fe3efef3a
4-
config_hash: 218b8d25038e627faab98532392ee9a0
1+
configured_endpoints: 120
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/runloop-ai/runloop-f18b1bba718700c841b3904207cd8ba2c066421a691845d6283bbbb361cf161d.yml
3+
openapi_spec_hash: 6044f4a4da13881c5f82fcc394c1f43b
4+
config_hash: d9a5b7a4227236a55c89de56b56f4aec

api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ Types:
186186
- <code><a href="./src/resources/devboxes/devboxes.ts">DevboxReadFileContentsResponse</a></code>
187187
- <code><a href="./src/resources/devboxes/devboxes.ts">DevboxRemoveTunnelResponse</a></code>
188188
- <code><a href="./src/resources/devboxes/devboxes.ts">DevboxUploadFileResponse</a></code>
189+
- <code><a href="./src/resources/devboxes/devboxes.ts">DevboxWatchEvictionsResponse</a></code>
189190

190191
Methods:
191192

@@ -213,6 +214,7 @@ Methods:
213214
- <code title="post /v1/devboxes/{id}/suspend">client.devboxes.<a href="./src/resources/devboxes/devboxes.ts">suspend</a>(id) -> DevboxView</code>
214215
- <code title="post /v1/devboxes/{id}/upload_file">client.devboxes.<a href="./src/resources/devboxes/devboxes.ts">uploadFile</a>(id, { ...params }) -> unknown</code>
215216
- <code title="post /v1/devboxes/{devbox_id}/executions/{execution_id}/wait_for_status">client.devboxes.<a href="./src/resources/devboxes/devboxes.ts">waitForCommand</a>(devboxId, executionId, { ...params }) -> DevboxAsyncExecutionDetailView</code>
217+
- <code title="get /v1/devboxes/watch_evictions">client.devboxes.<a href="./src/resources/devboxes/devboxes.ts">watchEvictions</a>() -> DevboxWatchEvictionsResponse</code>
216218
- <code title="post /v1/devboxes/{id}/write_file_contents">client.devboxes.<a href="./src/resources/devboxes/devboxes.ts">writeFileContents</a>(id, { ...params }) -> DevboxExecutionDetailView</code>
217219

218220
## DiskSnapshots

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ import {
223223
DevboxView,
224224
DevboxViewsDevboxesCursorIDPage,
225225
DevboxWaitForCommandParams,
226+
DevboxWatchEvictionsResponse,
226227
DevboxWriteFileContentsParams,
227228
Devboxes,
228229
PtyTunnelView,
@@ -690,6 +691,7 @@ export declare namespace Runloop {
690691
type DevboxReadFileContentsResponse as DevboxReadFileContentsResponse,
691692
type DevboxRemoveTunnelResponse as DevboxRemoveTunnelResponse,
692693
type DevboxUploadFileResponse as DevboxUploadFileResponse,
694+
type DevboxWatchEvictionsResponse as DevboxWatchEvictionsResponse,
693695
DevboxViewsDevboxesCursorIDPage as DevboxViewsDevboxesCursorIDPage,
694696
DevboxSnapshotViewsDiskSnapshotsCursorIDPage as DevboxSnapshotViewsDiskSnapshotsCursorIDPage,
695697
type DevboxCreateParams as DevboxCreateParams,

src/resources/devboxes/devboxes.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,17 @@ export class Devboxes extends APIResource {
538538
});
539539
}
540540

541+
/**
542+
* Subscribe, via server-sent events, to pending infrastructure evictions for every
543+
* Devbox in the account. On connect the stream emits one event per Devbox that
544+
* currently has a pending eviction, then one event as each further eviction is
545+
* scheduled. Best-effort and advisory: a Devbox stays running until its deadline,
546+
* and delivery is not guaranteed.
547+
*/
548+
watchEvictions(options?: Core.RequestOptions): Core.APIPromise<DevboxWatchEvictionsResponse> {
549+
return this._client.get('/v1/devboxes/watch_evictions', options);
550+
}
551+
541552
/**
542553
* Write UTF-8 string contents to a file at path on the Devbox. Note for large
543554
* files (larger than 100MB), the upload_file endpoint must be used.
@@ -1094,6 +1105,19 @@ export type DevboxRemoveTunnelResponse = unknown;
10941105

10951106
export type DevboxUploadFileResponse = unknown;
10961107

1108+
export interface DevboxWatchEvictionsResponse {
1109+
/**
1110+
* The ID of the Devbox with a pending eviction.
1111+
*/
1112+
devbox_id: string;
1113+
1114+
/**
1115+
* Unix timestamp (milliseconds) after which the Devbox will be suspended. Advisory
1116+
* and best-effort.
1117+
*/
1118+
eviction_deadline_ms: number;
1119+
}
1120+
10971121
/**
10981122
* Parameters for creating a new Devbox.
10991123
*
@@ -1556,6 +1580,7 @@ export declare namespace Devboxes {
15561580
type DevboxReadFileContentsResponse as DevboxReadFileContentsResponse,
15571581
type DevboxRemoveTunnelResponse as DevboxRemoveTunnelResponse,
15581582
type DevboxUploadFileResponse as DevboxUploadFileResponse,
1583+
type DevboxWatchEvictionsResponse as DevboxWatchEvictionsResponse,
15591584
DevboxViewsDevboxesCursorIDPage as DevboxViewsDevboxesCursorIDPage,
15601585
DevboxSnapshotViewsDiskSnapshotsCursorIDPage as DevboxSnapshotViewsDiskSnapshotsCursorIDPage,
15611586
type DevboxCreateParams as DevboxCreateParams,

src/resources/devboxes/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export {
2222
type DevboxReadFileContentsResponse,
2323
type DevboxRemoveTunnelResponse,
2424
type DevboxUploadFileResponse,
25+
type DevboxWatchEvictionsResponse,
2526
type DevboxCreateParams,
2627
type DevboxUpdateParams,
2728
type DevboxListParams,

src/resources/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ export {
103103
type DevboxReadFileContentsResponse,
104104
type DevboxRemoveTunnelResponse,
105105
type DevboxUploadFileResponse,
106+
type DevboxWatchEvictionsResponse,
106107
type DevboxCreateParams,
107108
type DevboxUpdateParams,
108109
type DevboxListParams,

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,24 @@ describe('resource devboxes', () => {
596596
});
597597
});
598598

599+
test('watchEvictions', async () => {
600+
const responsePromise = client.devboxes.watchEvictions();
601+
const rawResponse = await responsePromise.asResponse();
602+
expect(rawResponse).toBeInstanceOf(Response);
603+
const response = await responsePromise;
604+
expect(response).not.toBeInstanceOf(Response);
605+
const dataAndResponse = await responsePromise.withResponse();
606+
expect(dataAndResponse.data).toBe(response);
607+
expect(dataAndResponse.response).toBe(rawResponse);
608+
});
609+
610+
test('watchEvictions: request options instead of params are passed correctly', async () => {
611+
// ensure the request options are being passed correctly by passing an invalid HTTP method in order to cause an error
612+
await expect(client.devboxes.watchEvictions({ path: '/_stainless_unknown_path' })).rejects.toThrow(
613+
Runloop.NotFoundError,
614+
);
615+
});
616+
599617
test('writeFileContents: only required params', async () => {
600618
const responsePromise = client.devboxes.writeFileContents('id', {
601619
contents: 'contents',

0 commit comments

Comments
 (0)