Skip to content

Commit c6d737b

Browse files
feat: [kernel-1028] add api clipboard support
1 parent 74457c2 commit c6d737b

File tree

6 files changed

+89
-4
lines changed

6 files changed

+89
-4
lines changed

.stats.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
configured_endpoints: 101
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-a935c8aae21f8ddb83ea5e289034df12cbde88d432fa2b287629814bb3f58bb6.yml
3-
openapi_spec_hash: df3189b9728372f01662a19c060bcbc5
4-
config_hash: 81f143f4bee47ae7b0b8357551babadf
1+
configured_endpoints: 103
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-f05b888046776a18dbffc1264a27c0256839d132066ef5f6e09ccf1bc505a8f7.yml
3+
openapi_spec_hash: 646fce3982d3efbdb38004b0e4ac4d17
4+
config_hash: cff4d43372b6fa66b64e2d4150f6aa76

api.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ Methods:
167167
Types:
168168

169169
- <code><a href="./src/resources/browsers/computer.ts">ComputerGetMousePositionResponse</a></code>
170+
- <code><a href="./src/resources/browsers/computer.ts">ComputerReadClipboardResponse</a></code>
170171
- <code><a href="./src/resources/browsers/computer.ts">ComputerSetCursorVisibilityResponse</a></code>
171172

172173
Methods:
@@ -178,9 +179,11 @@ Methods:
178179
- <code title="post /browsers/{id}/computer/get_mouse_position">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">getMousePosition</a>(id) -> ComputerGetMousePositionResponse</code>
179180
- <code title="post /browsers/{id}/computer/move_mouse">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">moveMouse</a>(id, { ...params }) -> void</code>
180181
- <code title="post /browsers/{id}/computer/press_key">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">pressKey</a>(id, { ...params }) -> void</code>
182+
- <code title="post /browsers/{id}/computer/clipboard/read">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">readClipboard</a>(id) -> ComputerReadClipboardResponse</code>
181183
- <code title="post /browsers/{id}/computer/scroll">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">scroll</a>(id, { ...params }) -> void</code>
182184
- <code title="post /browsers/{id}/computer/cursor">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">setCursorVisibility</a>(id, { ...params }) -> ComputerSetCursorVisibilityResponse</code>
183185
- <code title="post /browsers/{id}/computer/type">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">typeText</a>(id, { ...params }) -> void</code>
186+
- <code title="post /browsers/{id}/computer/clipboard/write">client.browsers.computer.<a href="./src/resources/browsers/computer.ts">writeClipboard</a>(id, { ...params }) -> void</code>
184187

185188
## Playwright
186189

src/resources/browsers/browsers.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,12 @@ import {
1212
ComputerGetMousePositionResponse,
1313
ComputerMoveMouseParams,
1414
ComputerPressKeyParams,
15+
ComputerReadClipboardResponse,
1516
ComputerScrollParams,
1617
ComputerSetCursorVisibilityParams,
1718
ComputerSetCursorVisibilityResponse,
1819
ComputerTypeTextParams,
20+
ComputerWriteClipboardParams,
1921
} from './computer';
2022
import * as LogsAPI from './logs';
2123
import { LogStreamParams, Logs } from './logs';
@@ -870,6 +872,7 @@ export declare namespace Browsers {
870872
export {
871873
Computer as Computer,
872874
type ComputerGetMousePositionResponse as ComputerGetMousePositionResponse,
875+
type ComputerReadClipboardResponse as ComputerReadClipboardResponse,
873876
type ComputerSetCursorVisibilityResponse as ComputerSetCursorVisibilityResponse,
874877
type ComputerBatchParams as ComputerBatchParams,
875878
type ComputerCaptureScreenshotParams as ComputerCaptureScreenshotParams,
@@ -880,6 +883,7 @@ export declare namespace Browsers {
880883
type ComputerScrollParams as ComputerScrollParams,
881884
type ComputerSetCursorVisibilityParams as ComputerSetCursorVisibilityParams,
882885
type ComputerTypeTextParams as ComputerTypeTextParams,
886+
type ComputerWriteClipboardParams as ComputerWriteClipboardParams,
883887
};
884888

885889
export {

src/resources/browsers/computer.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,19 @@ export class Computer extends APIResource {
142142
});
143143
}
144144

145+
/**
146+
* Read text from the clipboard on the browser instance
147+
*
148+
* @example
149+
* ```ts
150+
* const response =
151+
* await client.browsers.computer.readClipboard('id');
152+
* ```
153+
*/
154+
readClipboard(id: string, options?: RequestOptions): APIPromise<ComputerReadClipboardResponse> {
155+
return this._client.post(path`/browsers/${id}/computer/clipboard/read`, options);
156+
}
157+
145158
/**
146159
* Scroll the mouse wheel at a position on the host computer
147160
*
@@ -194,6 +207,24 @@ export class Computer extends APIResource {
194207
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
195208
});
196209
}
210+
211+
/**
212+
* Write text to the clipboard on the browser instance
213+
*
214+
* @example
215+
* ```ts
216+
* await client.browsers.computer.writeClipboard('id', {
217+
* text: 'text',
218+
* });
219+
* ```
220+
*/
221+
writeClipboard(id: string, body: ComputerWriteClipboardParams, options?: RequestOptions): APIPromise<void> {
222+
return this._client.post(path`/browsers/${id}/computer/clipboard/write`, {
223+
body,
224+
...options,
225+
headers: buildHeaders([{ Accept: '*/*' }, options?.headers]),
226+
});
227+
}
197228
}
198229

199230
export interface ComputerGetMousePositionResponse {
@@ -208,6 +239,13 @@ export interface ComputerGetMousePositionResponse {
208239
y: number;
209240
}
210241

242+
export interface ComputerReadClipboardResponse {
243+
/**
244+
* Current clipboard text content
245+
*/
246+
text: string;
247+
}
248+
211249
/**
212250
* Generic OK response.
213251
*/
@@ -606,9 +644,17 @@ export interface ComputerTypeTextParams {
606644
delay?: number;
607645
}
608646

647+
export interface ComputerWriteClipboardParams {
648+
/**
649+
* Text to write to the system clipboard
650+
*/
651+
text: string;
652+
}
653+
609654
export declare namespace Computer {
610655
export {
611656
type ComputerGetMousePositionResponse as ComputerGetMousePositionResponse,
657+
type ComputerReadClipboardResponse as ComputerReadClipboardResponse,
612658
type ComputerSetCursorVisibilityResponse as ComputerSetCursorVisibilityResponse,
613659
type ComputerBatchParams as ComputerBatchParams,
614660
type ComputerCaptureScreenshotParams as ComputerCaptureScreenshotParams,
@@ -619,5 +665,6 @@ export declare namespace Computer {
619665
type ComputerScrollParams as ComputerScrollParams,
620666
type ComputerSetCursorVisibilityParams as ComputerSetCursorVisibilityParams,
621667
type ComputerTypeTextParams as ComputerTypeTextParams,
668+
type ComputerWriteClipboardParams as ComputerWriteClipboardParams,
622669
};
623670
}

src/resources/browsers/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export {
2222
export {
2323
Computer,
2424
type ComputerGetMousePositionResponse,
25+
type ComputerReadClipboardResponse,
2526
type ComputerSetCursorVisibilityResponse,
2627
type ComputerBatchParams,
2728
type ComputerCaptureScreenshotParams,
@@ -32,6 +33,7 @@ export {
3233
type ComputerScrollParams,
3334
type ComputerSetCursorVisibilityParams,
3435
type ComputerTypeTextParams,
36+
type ComputerWriteClipboardParams,
3537
} from './computer';
3638
export {
3739
Fs,

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,18 @@ describe('resource computer', () => {
199199
});
200200
});
201201

202+
// Mock server tests are disabled
203+
test.skip('readClipboard', async () => {
204+
const responsePromise = client.browsers.computer.readClipboard('id');
205+
const rawResponse = await responsePromise.asResponse();
206+
expect(rawResponse).toBeInstanceOf(Response);
207+
const response = await responsePromise;
208+
expect(response).not.toBeInstanceOf(Response);
209+
const dataAndResponse = await responsePromise.withResponse();
210+
expect(dataAndResponse.data).toBe(response);
211+
expect(dataAndResponse.response).toBe(rawResponse);
212+
});
213+
202214
// Mock server tests are disabled
203215
test.skip('scroll: only required params', async () => {
204216
const responsePromise = client.browsers.computer.scroll('id', { x: 0, y: 0 });
@@ -255,4 +267,21 @@ describe('resource computer', () => {
255267
test.skip('typeText: required and optional params', async () => {
256268
const response = await client.browsers.computer.typeText('id', { text: 'text', delay: 0 });
257269
});
270+
271+
// Mock server tests are disabled
272+
test.skip('writeClipboard: only required params', async () => {
273+
const responsePromise = client.browsers.computer.writeClipboard('id', { text: 'text' });
274+
const rawResponse = await responsePromise.asResponse();
275+
expect(rawResponse).toBeInstanceOf(Response);
276+
const response = await responsePromise;
277+
expect(response).not.toBeInstanceOf(Response);
278+
const dataAndResponse = await responsePromise.withResponse();
279+
expect(dataAndResponse.data).toBe(response);
280+
expect(dataAndResponse.response).toBe(rawResponse);
281+
});
282+
283+
// Mock server tests are disabled
284+
test.skip('writeClipboard: required and optional params', async () => {
285+
const response = await client.browsers.computer.writeClipboard('id', { text: 'text' });
286+
});
258287
});

0 commit comments

Comments
 (0)