Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.0-alpha.10"
".": "0.1.0-alpha.11"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 4
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-07d481d1498bf9677437b555e9ec2d843d50107faa7501e4c430a32b1f3c3343.yml
openapi_spec_hash: 296f78d82afbac95fad12c5eabd71f18
config_hash: 2c8351ba6611ce4a352e248405783846
configured_endpoints: 5
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-f40e779e2a48f5e37361f2f4a9879e5c40f2851b8033c23db69ec7b91242bf69.yml
openapi_spec_hash: 2dfa146149e61363f1ec40bf9251eb7c
config_hash: 2ddaa85513b6670889b1a56c905423c7
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# Changelog

## 0.1.0-alpha.11 (2025-05-19)

Full Changelog: [v0.1.0-alpha.10...v0.1.0-alpha.11](https://github.com/onkernel/kernel-node-sdk/compare/v0.1.0-alpha.10...v0.1.0-alpha.11)

### Features

* **api:** update via SDK Studio ([ca8d138](https://github.com/onkernel/kernel-node-sdk/commit/ca8d138bd9242266ddd5a5180cefb4baf85f583d))

## 0.1.0-alpha.10 (2025-05-14)

Full Changelog: [v0.1.0-alpha.9...v0.1.0-alpha.10](https://github.com/onkernel/kernel-node-sdk/compare/v0.1.0-alpha.9...v0.1.0-alpha.10)
Expand Down
73 changes: 37 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,13 @@ const client = new Kernel({
});

async function main() {
const response = await client.apps.deploy({
entrypointRelPath: 'app.py',
const deployment = await client.apps.deployments.create({
entrypoint_rel_path: 'main.ts',
file: fs.createReadStream('path/to/file'),
version: 'REPLACE_ME',
version: '1.0.0',
});

console.log(response.apps);
console.log(deployment.apps);
}

main();
Expand All @@ -54,12 +54,8 @@ const client = new Kernel({
});

async function main() {
const params: Kernel.AppDeployParams = {
entrypointRelPath: 'app.py',
file: fs.createReadStream('path/to/file'),
version: 'REPLACE_ME',
};
const response: Kernel.AppDeployResponse = await client.apps.deploy(params);
const params: Kernel.BrowserCreateParams = { invocation_id: 'REPLACE_ME' };
const browser: Kernel.BrowserCreateResponse = await client.browsers.create(params);
}

main();
Expand All @@ -83,21 +79,30 @@ import Kernel, { toFile } from '@onkernel/sdk';
const client = new Kernel();

// If you have access to Node `fs` we recommend using `fs.createReadStream()`:
await client.apps.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('/path/to/file') });
await client.apps.deployments.create({
entrypoint_rel_path: 'src/app.py',
file: fs.createReadStream('/path/to/file'),
});

// Or if you have the web `File` API you can pass a `File` instance:
await client.apps.deploy({ entrypointRelPath: 'app.py', file: new File(['my bytes'], 'file') });
await client.apps.deployments.create({
entrypoint_rel_path: 'src/app.py',
file: new File(['my bytes'], 'file'),
});

// You can also pass a `fetch` `Response`:
await client.apps.deploy({ entrypointRelPath: 'app.py', file: await fetch('https://somesite/file') });
await client.apps.deployments.create({
entrypoint_rel_path: 'src/app.py',
file: await fetch('https://somesite/file'),
});

// Finally, if none of the above are convenient, you can use our `toFile` helper:
await client.apps.deploy({
entrypointRelPath: 'app.py',
await client.apps.deployments.create({
entrypoint_rel_path: 'src/app.py',
file: await toFile(Buffer.from('my bytes'), 'file'),
});
await client.apps.deploy({
entrypointRelPath: 'app.py',
await client.apps.deployments.create({
entrypoint_rel_path: 'src/app.py',
file: await toFile(new Uint8Array([0, 1, 2]), 'file'),
});
```
Expand All @@ -111,17 +116,15 @@ a subclass of `APIError` will be thrown:
<!-- prettier-ignore -->
```ts
async function main() {
const response = await client.apps
.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
.catch(async (err) => {
if (err instanceof Kernel.APIError) {
console.log(err.status); // 400
console.log(err.name); // BadRequestError
console.log(err.headers); // {server: 'nginx', ...}
} else {
throw err;
}
});
const browser = await client.browsers.create({ invocation_id: 'REPLACE_ME' }).catch(async (err) => {
if (err instanceof Kernel.APIError) {
console.log(err.status); // 400
console.log(err.name); // BadRequestError
console.log(err.headers); // {server: 'nginx', ...}
} else {
throw err;
}
});
}

main();
Expand Down Expand Up @@ -156,7 +159,7 @@ const client = new Kernel({
});

// Or, configure per-request:
await client.apps.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
await client.browsers.create({ invocation_id: 'REPLACE_ME' }, {
maxRetries: 5,
});
```
Expand All @@ -173,7 +176,7 @@ const client = new Kernel({
});

// Override per-request:
await client.apps.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, {
await client.browsers.create({ invocation_id: 'REPLACE_ME' }, {
timeout: 5 * 1000,
});
```
Expand All @@ -196,17 +199,15 @@ Unlike `.asResponse()` this method consumes the body, returning once it is parse
```ts
const client = new Kernel();

const response = await client.apps
.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
.asResponse();
const response = await client.browsers.create({ invocation_id: 'REPLACE_ME' }).asResponse();
console.log(response.headers.get('X-My-Header'));
console.log(response.statusText); // access the underlying Response object

const { data: response, response: raw } = await client.apps
.deploy({ entrypointRelPath: 'app.py', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' })
const { data: browser, response: raw } = await client.browsers
.create({ invocation_id: 'REPLACE_ME' })
.withResponse();
console.log(raw.headers.get('X-My-Header'));
console.log(response.apps);
console.log(browser.session_id);
```

### Logging
Expand Down
30 changes: 21 additions & 9 deletions api.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,35 @@
# Apps

## Deployments

Types:

- <code><a href="./src/resources/apps/deployments.ts">DeploymentCreateResponse</a></code>

Methods:

- <code title="post /deploy">client.apps.deployments.<a href="./src/resources/apps/deployments.ts">create</a>({ ...params }) -> DeploymentCreateResponse</code>

## Invocations

Types:

- <code><a href="./src/resources/apps.ts">AppDeployResponse</a></code>
- <code><a href="./src/resources/apps.ts">AppInvokeResponse</a></code>
- <code><a href="./src/resources/apps.ts">AppRetrieveInvocationResponse</a></code>
- <code><a href="./src/resources/apps/invocations.ts">InvocationCreateResponse</a></code>
- <code><a href="./src/resources/apps/invocations.ts">InvocationRetrieveResponse</a></code>

Methods:

- <code title="post /apps/deploy">client.apps.<a href="./src/resources/apps.ts">deploy</a>({ ...params }) -> AppDeployResponse</code>
- <code title="post /apps/invoke">client.apps.<a href="./src/resources/apps.ts">invoke</a>({ ...params }) -> AppInvokeResponse</code>
- <code title="get /apps/invocations/{id}">client.apps.<a href="./src/resources/apps.ts">retrieveInvocation</a>(id) -> AppRetrieveInvocationResponse</code>
- <code title="post /invocations">client.apps.invocations.<a href="./src/resources/apps/invocations.ts">create</a>({ ...params }) -> InvocationCreateResponse</code>
- <code title="get /invocations/{id}">client.apps.invocations.<a href="./src/resources/apps/invocations.ts">retrieve</a>(id) -> InvocationRetrieveResponse</code>

# Browser
# Browsers

Types:

- <code><a href="./src/resources/browser.ts">BrowserCreateSessionResponse</a></code>
- <code><a href="./src/resources/browsers.ts">BrowserCreateResponse</a></code>
- <code><a href="./src/resources/browsers.ts">BrowserRetrieveResponse</a></code>

Methods:

- <code title="post /browser">client.browser.<a href="./src/resources/browser.ts">createSession</a>({ ...params }) -> BrowserCreateSessionResponse</code>
- <code title="post /browsers">client.browsers.<a href="./src/resources/browsers.ts">create</a>({ ...params }) -> BrowserCreateResponse</code>
- <code title="get /browsers/{id}">client.browsers.<a href="./src/resources/browsers.ts">retrieve</a>(id) -> BrowserRetrieveResponse</code>
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@onkernel/sdk",
"version": "0.1.0-alpha.10",
"version": "0.1.0-alpha.11",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
Expand Down
34 changes: 13 additions & 21 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,16 @@ import { type Fetch } from './internal/builtin-types';
import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
import { FinalRequestOptions, RequestOptions } from './internal/request-options';
import {
AppDeployParams,
AppDeployResponse,
AppInvokeParams,
AppInvokeResponse,
AppRetrieveInvocationResponse,
Apps,
} from './resources/apps';
import { Browser, BrowserCreateSessionParams, BrowserCreateSessionResponse } from './resources/browser';
BrowserCreateParams,
BrowserCreateResponse,
BrowserRetrieveResponse,
Browsers,
} from './resources/browsers';
import { readEnv } from './internal/utils/env';
import { formatRequestDetails, loggerFor } from './internal/utils/log';
import { isEmptyObj } from './internal/utils/values';
import { KernelApp } from './core/app-framework';
import { Apps } from './resources/apps/apps';

const environments = {
production: 'https://api.onkernel.com/',
Expand Down Expand Up @@ -735,25 +733,19 @@ export class Kernel {
static toFile = Uploads.toFile;

apps: API.Apps = new API.Apps(this);
browser: API.Browser = new API.Browser(this);
browsers: API.Browsers = new API.Browsers(this);
}
Kernel.Apps = Apps;
Kernel.Browser = Browser;
Kernel.Browsers = Browsers;
export declare namespace Kernel {
export type RequestOptions = Opts.RequestOptions;

export {
Apps as Apps,
type AppDeployResponse as AppDeployResponse,
type AppInvokeResponse as AppInvokeResponse,
type AppRetrieveInvocationResponse as AppRetrieveInvocationResponse,
type AppDeployParams as AppDeployParams,
type AppInvokeParams as AppInvokeParams,
};
export { Apps as Apps };

export {
Browser as Browser,
type BrowserCreateSessionResponse as BrowserCreateSessionResponse,
type BrowserCreateSessionParams as BrowserCreateSessionParams,
Browsers as Browsers,
type BrowserCreateResponse as BrowserCreateResponse,
type BrowserRetrieveResponse as BrowserRetrieveResponse,
type BrowserCreateParams as BrowserCreateParams,
};
}
Loading