Skip to content

Commit 553e10c

Browse files
feat(api): update via SDK Studio
1 parent 1b13624 commit 553e10c

File tree

9 files changed

+91
-70
lines changed

9 files changed

+91
-70
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: 4
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d168b58fcf39dbd0458d132091793d3e2d0930070b7dda2d5f7f1baff20dd31b.yml
3-
openapi_spec_hash: b7e0fd7ee1656d7dbad57209d1584d92
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-2af763aab4c314b382e1123edc4ee3d51c0fe7977730ce6776b9fb09b29fe291.yml
3+
openapi_spec_hash: be02256478be81fa3f649076879850bc
44
config_hash: eab40627b734534462ae3b8ccd8b263b

README.md

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,11 @@ const client = new Kernel({
2929

3030
async function main() {
3131
const response = await client.apps.deploy({
32-
appName: 'REPLACE_ME',
3332
file: fs.createReadStream('path/to/file'),
3433
version: 'REPLACE_ME',
3534
});
3635

37-
console.log(response.id);
36+
console.log(response.apps);
3837
}
3938

4039
main();
@@ -54,11 +53,7 @@ const client = new Kernel({
5453
});
5554

5655
async function main() {
57-
const params: Kernel.AppDeployParams = {
58-
appName: 'REPLACE_ME',
59-
file: fs.createReadStream('path/to/file'),
60-
version: 'REPLACE_ME',
61-
};
56+
const params: Kernel.AppDeployParams = { file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' };
6257
const response: Kernel.AppDeployResponse = await client.apps.deploy(params);
6358
}
6459

@@ -83,37 +78,17 @@ import Kernel, { toFile } from '@onkernel/sdk';
8378
const client = new Kernel();
8479

8580
// If you have access to Node `fs` we recommend using `fs.createReadStream()`:
86-
await client.apps.deploy({
87-
appName: 'my-awesome-app',
88-
file: fs.createReadStream('/path/to/file'),
89-
version: '1.0.0',
90-
});
81+
await client.apps.deploy({ file: fs.createReadStream('/path/to/file') });
9182

9283
// Or if you have the web `File` API you can pass a `File` instance:
93-
await client.apps.deploy({
94-
appName: 'my-awesome-app',
95-
file: new File(['my bytes'], 'file'),
96-
version: '1.0.0',
97-
});
84+
await client.apps.deploy({ file: new File(['my bytes'], 'file') });
9885

9986
// You can also pass a `fetch` `Response`:
100-
await client.apps.deploy({
101-
appName: 'my-awesome-app',
102-
file: await fetch('https://somesite/file'),
103-
version: '1.0.0',
104-
});
87+
await client.apps.deploy({ file: await fetch('https://somesite/file') });
10588

10689
// Finally, if none of the above are convenient, you can use our `toFile` helper:
107-
await client.apps.deploy({
108-
appName: 'my-awesome-app',
109-
file: await toFile(Buffer.from('my bytes'), 'file'),
110-
version: '1.0.0',
111-
});
112-
await client.apps.deploy({
113-
appName: 'my-awesome-app',
114-
file: await toFile(new Uint8Array([0, 1, 2]), 'file'),
115-
version: '1.0.0',
116-
});
90+
await client.apps.deploy({ file: await toFile(Buffer.from('my bytes'), 'file') });
91+
await client.apps.deploy({ file: await toFile(new Uint8Array([0, 1, 2]), 'file') });
11792
```
11893

11994
## Handling errors
@@ -126,7 +101,7 @@ a subclass of `APIError` will be thrown:
126101
```ts
127102
async function main() {
128103
const response = await client.apps
129-
.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
104+
.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
130105
.catch(async (err) => {
131106
if (err instanceof Kernel.APIError) {
132107
console.log(err.status); // 400
@@ -170,7 +145,7 @@ const client = new Kernel({
170145
});
171146

172147
// Or, configure per-request:
173-
await client.apps.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
148+
await client.apps.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
174149
maxRetries: 5,
175150
});
176151
```
@@ -187,7 +162,7 @@ const client = new Kernel({
187162
});
188163

189164
// Override per-request:
190-
await client.apps.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
165+
await client.apps.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
191166
timeout: 5 * 1000,
192167
});
193168
```
@@ -211,16 +186,16 @@ Unlike `.asResponse()` this method consumes the body, returning once it is parse
211186
const client = new Kernel();
212187

213188
const response = await client.apps
214-
.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
189+
.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
215190
.asResponse();
216191
console.log(response.headers.get('X-My-Header'));
217192
console.log(response.statusText); // access the underlying Response object
218193

219194
const { data: response, response: raw } = await client.apps
220-
.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
195+
.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
221196
.withResponse();
222197
console.log(raw.headers.get('X-My-Header'));
223-
console.log(response.id);
198+
console.log(response.apps);
224199
```
225200

226201
### Logging

api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ Types:
2020

2121
Methods:
2222

23-
- <code title="post /browser">client.browser.<a href="./src/resources/browser.ts">createSession</a>() -> BrowserCreateSessionResponse</code>
23+
- <code title="post /browser">client.browser.<a href="./src/resources/browser.ts">createSession</a>({ ...params }) -> BrowserCreateSessionResponse</code>

src/client.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import {
2828
AppRetrieveInvocationResponse,
2929
Apps,
3030
} from './resources/apps';
31-
import { Browser, BrowserCreateSessionResponse } from './resources/browser';
31+
import { Browser, BrowserCreateSessionParams, BrowserCreateSessionResponse } from './resources/browser';
3232
import { readEnv } from './internal/utils/env';
3333
import { formatRequestDetails, loggerFor } from './internal/utils/log';
3434
import { isEmptyObj } from './internal/utils/values';
@@ -751,5 +751,9 @@ export declare namespace Kernel {
751751
type AppInvokeParams as AppInvokeParams,
752752
};
753753

754-
export { Browser as Browser, type BrowserCreateSessionResponse as BrowserCreateSessionResponse };
754+
export {
755+
Browser as Browser,
756+
type BrowserCreateSessionResponse as BrowserCreateSessionResponse,
757+
type BrowserCreateSessionParams as BrowserCreateSessionParams,
758+
};
755759
}

src/resources/apps.ts

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ export class Apps extends APIResource {
1414
* @example
1515
* ```ts
1616
* const response = await client.apps.deploy({
17-
* appName: 'my-awesome-app',
1817
* file: fs.createReadStream('path/to/file'),
19-
* version: '1.0.0',
2018
* });
2119
* ```
2220
*/
@@ -32,7 +30,7 @@ export class Apps extends APIResource {
3230
* const response = await client.apps.invoke({
3331
* actionName: 'analyze',
3432
* appName: 'my-awesome-app',
35-
* payload: '{ "data": "example input" }',
33+
* payload: { data: 'example input' },
3634
* version: '1.0.0',
3735
* });
3836
* ```
@@ -57,10 +55,7 @@ export class Apps extends APIResource {
5755
}
5856

5957
export interface AppDeployResponse {
60-
/**
61-
* ID of the deployed app version
62-
*/
63-
id: string;
58+
apps: Array<AppDeployResponse.App>;
6459

6560
/**
6661
* Success message
@@ -73,6 +68,31 @@ export interface AppDeployResponse {
7368
success: boolean;
7469
}
7570

71+
export namespace AppDeployResponse {
72+
export interface App {
73+
/**
74+
* ID for the app version deployed
75+
*/
76+
id: string;
77+
78+
actions: Array<App.Action>;
79+
80+
/**
81+
* Name of the app
82+
*/
83+
name: string;
84+
}
85+
86+
export namespace App {
87+
export interface Action {
88+
/**
89+
* Name of the action
90+
*/
91+
name: string;
92+
}
93+
}
94+
}
95+
7696
export interface AppInvokeResponse {
7797
/**
7898
* ID of the invocation
@@ -108,24 +128,29 @@ export interface AppRetrieveInvocationResponse {
108128

109129
export interface AppDeployParams {
110130
/**
111-
* Name of the application
131+
* ZIP file containing the application source directory
112132
*/
113-
appName: string;
133+
file: Uploadable;
114134

115135
/**
116-
* ZIP file containing the application
136+
* Relative path to the entrypoint of the application
117137
*/
118-
file: Uploadable;
138+
entrypointRelPath?: string;
119139

120140
/**
121-
* Version of the application
141+
* Allow overwriting an existing app version
122142
*/
123-
version: string;
143+
force?: 'true' | 'false';
144+
145+
/**
146+
* Region for deployment. Currently we only support "aws.us-east-1a"
147+
*/
148+
region?: 'aws.us-east-1a';
124149

125150
/**
126-
* AWS region for deployment (e.g. "aws.us-east-1a")
151+
* Version of the application. Can be any string.
127152
*/
128-
region?: string;
153+
version?: string;
129154
}
130155

131156
export interface AppInvokeParams {

src/resources/browser.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ export class Browser extends APIResource {
88
/**
99
* Create Browser Session
1010
*/
11-
createSession(options?: RequestOptions): APIPromise<BrowserCreateSessionResponse> {
12-
return this._client.post('/browser', options);
11+
createSession(
12+
body: BrowserCreateSessionParams,
13+
options?: RequestOptions,
14+
): APIPromise<BrowserCreateSessionResponse> {
15+
return this._client.post('/browser', { body, ...options });
1316
}
1417
}
1518

@@ -30,6 +33,16 @@ export interface BrowserCreateSessionResponse {
3033
sessionId: string;
3134
}
3235

36+
export interface BrowserCreateSessionParams {
37+
/**
38+
* Kernel App invocation ID
39+
*/
40+
invocationId: string;
41+
}
42+
3343
export declare namespace Browser {
34-
export { type BrowserCreateSessionResponse as BrowserCreateSessionResponse };
44+
export {
45+
type BrowserCreateSessionResponse as BrowserCreateSessionResponse,
46+
type BrowserCreateSessionParams as BrowserCreateSessionParams,
47+
};
3548
}

src/resources/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ export {
88
type AppDeployParams,
99
type AppInvokeParams,
1010
} from './apps';
11-
export { Browser, type BrowserCreateSessionResponse } from './browser';
11+
export { Browser, type BrowserCreateSessionResponse, type BrowserCreateSessionParams } from './browser';

tests/api-resources/apps.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@ describe('resource apps', () => {
1111
// skipped: tests are disabled for the time being
1212
test.skip('deploy: only required params', async () => {
1313
const responsePromise = client.apps.deploy({
14-
appName: 'my-awesome-app',
1514
file: await toFile(Buffer.from('# my file contents'), 'README.md'),
16-
version: '1.0.0',
1715
});
1816
const rawResponse = await responsePromise.asResponse();
1917
expect(rawResponse).toBeInstanceOf(Response);
@@ -27,10 +25,11 @@ describe('resource apps', () => {
2725
// skipped: tests are disabled for the time being
2826
test.skip('deploy: required and optional params', async () => {
2927
const response = await client.apps.deploy({
30-
appName: 'my-awesome-app',
3128
file: await toFile(Buffer.from('# my file contents'), 'README.md'),
32-
version: '1.0.0',
29+
entrypointRelPath: 'app.py',
30+
force: 'false',
3331
region: 'aws.us-east-1a',
32+
version: '1.0.0',
3433
});
3534
});
3635

@@ -39,7 +38,7 @@ describe('resource apps', () => {
3938
const responsePromise = client.apps.invoke({
4039
actionName: 'analyze',
4140
appName: 'my-awesome-app',
42-
payload: '{ "data": "example input" }',
41+
payload: { data: 'example input' },
4342
version: '1.0.0',
4443
});
4544
const rawResponse = await responsePromise.asResponse();
@@ -56,7 +55,7 @@ describe('resource apps', () => {
5655
const response = await client.apps.invoke({
5756
actionName: 'analyze',
5857
appName: 'my-awesome-app',
59-
payload: '{ "data": "example input" }',
58+
payload: { data: 'example input' },
6059
version: '1.0.0',
6160
});
6261
});

tests/api-resources/browser.test.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ const client = new Kernel({
99

1010
describe('resource browser', () => {
1111
// skipped: tests are disabled for the time being
12-
test.skip('createSession', async () => {
13-
const responsePromise = client.browser.createSession();
12+
test.skip('createSession: only required params', async () => {
13+
const responsePromise = client.browser.createSession({ invocationId: 'invocationId' });
1414
const rawResponse = await responsePromise.asResponse();
1515
expect(rawResponse).toBeInstanceOf(Response);
1616
const response = await responsePromise;
@@ -19,4 +19,9 @@ describe('resource browser', () => {
1919
expect(dataAndResponse.data).toBe(response);
2020
expect(dataAndResponse.response).toBe(rawResponse);
2121
});
22+
23+
// skipped: tests are disabled for the time being
24+
test.skip('createSession: required and optional params', async () => {
25+
const response = await client.browser.createSession({ invocationId: 'invocationId' });
26+
});
2227
});

0 commit comments

Comments
 (0)