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.7.1"
".": "0.8.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 18
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d173129101e26f450c200e84430d993479c034700cf826917425d513b88912e6.yml
openapi_spec_hash: 150b86da7588979d7619b1a894e4720c
config_hash: eaeed470b1070b34df69c49d68e67355
configured_endpoints: 21
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-a5b1d2c806c42c1534eefc8d34516f7f6e4ab68cb6a836534ee549bdbe4653f3.yml
openapi_spec_hash: 0be350cc8ddbd1fc7e058ce6c3a44ee8
config_hash: 307153ecd5b85f77ce8e0d87f6e5dfab
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 0.8.0 (2025-07-16)

Full Changelog: [v0.7.1...v0.8.0](https://github.com/onkernel/kernel-node-sdk/compare/v0.7.1...v0.8.0)

### Features

* **api:** manual updates ([d073427](https://github.com/onkernel/kernel-node-sdk/commit/d0734275dd0014d8710a08eaa3a732d4530abe4f))


### Chores

* make some internal functions async ([b5d654f](https://github.com/onkernel/kernel-node-sdk/commit/b5d654f72557c9f5949e2067f6e61a5dcd514b03))

## 0.7.1 (2025-07-08)

Full Changelog: [v0.7.0...v0.7.1](https://github.com/onkernel/kernel-node-sdk/compare/v0.7.0...v0.7.1)
Expand Down
33 changes: 23 additions & 10 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,29 @@ Methods:

Types:

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

Methods:

- <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>
- <code title="get /browsers">client.browsers.<a href="./src/resources/browsers.ts">list</a>() -> BrowserListResponse</code>
- <code title="delete /browsers">client.browsers.<a href="./src/resources/browsers.ts">delete</a>({ ...params }) -> void</code>
- <code title="delete /browsers/{id}">client.browsers.<a href="./src/resources/browsers.ts">deleteByID</a>(id) -> void</code>
- <code title="get /browsers/{id}/replay">client.browsers.<a href="./src/resources/browsers.ts">retrieveReplay</a>(id) -> Response</code>
- <code title="post /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">create</a>({ ...params }) -> BrowserCreateResponse</code>
- <code title="get /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">retrieve</a>(id) -> BrowserRetrieveResponse</code>
- <code title="get /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">list</a>() -> BrowserListResponse</code>
- <code title="delete /browsers">client.browsers.<a href="./src/resources/browsers/browsers.ts">delete</a>({ ...params }) -> void</code>
- <code title="delete /browsers/{id}">client.browsers.<a href="./src/resources/browsers/browsers.ts">deleteByID</a>(id) -> void</code>

## Replays

Types:

- <code><a href="./src/resources/browsers/replays.ts">ReplayListResponse</a></code>
- <code><a href="./src/resources/browsers/replays.ts">ReplayStartResponse</a></code>

Methods:

- <code title="get /browsers/{id}/replays">client.browsers.replays.<a href="./src/resources/browsers/replays.ts">list</a>(id) -> ReplayListResponse</code>
- <code title="get /browsers/{id}/replays/{replay_id}">client.browsers.replays.<a href="./src/resources/browsers/replays.ts">download</a>(replayID, { ...params }) -> Response</code>
- <code title="post /browsers/{id}/replays">client.browsers.replays.<a href="./src/resources/browsers/replays.ts">start</a>(id, { ...params }) -> ReplayStartResponse</code>
- <code title="post /browsers/{id}/replays/{replay_id}/stop">client.browsers.replays.<a href="./src/resources/browsers/replays.ts">stop</a>(replayID, { ...params }) -> void</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.7.1",
"version": "0.8.0",
"description": "The official TypeScript library for the Kernel API",
"author": "Kernel <>",
"types": "dist/index.d.ts",
Expand Down
43 changes: 23 additions & 20 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,6 @@ import * as Errors from './core/error';
import * as Uploads from './core/uploads';
import * as API from './resources/index';
import { APIPromise } from './core/api-promise';
import {
BrowserCreateParams,
BrowserCreateResponse,
BrowserDeleteParams,
BrowserListResponse,
BrowserPersistence,
BrowserRetrieveResponse,
Browsers,
} from './resources/browsers';
import {
DeploymentCreateParams,
DeploymentCreateResponse,
Expand All @@ -48,6 +39,15 @@ import {
Invocations,
} from './resources/invocations';
import { AppListParams, AppListResponse, Apps } from './resources/apps/apps';
import {
BrowserCreateParams,
BrowserCreateResponse,
BrowserDeleteParams,
BrowserListResponse,
BrowserPersistence,
BrowserRetrieveResponse,
Browsers,
} from './resources/browsers/browsers';
import { type Fetch } from './internal/builtin-types';
import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers';
import { FinalRequestOptions, RequestOptions } from './internal/request-options';
Expand Down Expand Up @@ -230,7 +230,7 @@ export class Kernel {
* Create a new client instance re-using the same options given to the current client with optional overriding.
*/
withOptions(options: Partial<ClientOptions>): this {
return new (this.constructor as any as new (props: ClientOptions) => typeof this)({
const client = new (this.constructor as any as new (props: ClientOptions) => typeof this)({
...this._options,
environment: options.environment ? options.environment : undefined,
baseURL: options.environment ? undefined : this.baseURL,
Expand All @@ -243,6 +243,7 @@ export class Kernel {
apiKey: this.apiKey,
...options,
});
return client;
}

/**
Expand All @@ -260,7 +261,7 @@ export class Kernel {
return;
}

protected authHeaders(opts: FinalRequestOptions): NullableHeaders | undefined {
protected async authHeaders(opts: FinalRequestOptions): Promise<NullableHeaders | undefined> {
return buildHeaders([{ Authorization: `Bearer ${this.apiKey}` }]);
}

Expand Down Expand Up @@ -392,7 +393,9 @@ export class Kernel {

await this.prepareOptions(options);

const { req, url, timeout } = this.buildRequest(options, { retryCount: maxRetries - retriesRemaining });
const { req, url, timeout } = await this.buildRequest(options, {
retryCount: maxRetries - retriesRemaining,
});

await this.prepareRequest(req, { url, options });

Expand Down Expand Up @@ -470,7 +473,7 @@ export class Kernel {
} with status ${response.status} in ${headersTime - startTime}ms`;

if (!response.ok) {
const shouldRetry = this.shouldRetry(response);
const shouldRetry = await this.shouldRetry(response);
if (retriesRemaining && shouldRetry) {
const retryMessage = `retrying, ${retriesRemaining} attempts remaining`;

Expand Down Expand Up @@ -569,7 +572,7 @@ export class Kernel {
}
}

private shouldRetry(response: Response): boolean {
private async shouldRetry(response: Response): Promise<boolean> {
// Note this is not a standard header.
const shouldRetryHeader = response.headers.get('x-should-retry');

Expand Down Expand Up @@ -646,18 +649,18 @@ export class Kernel {
return sleepSeconds * jitter * 1000;
}

buildRequest(
async buildRequest(
inputOptions: FinalRequestOptions,
{ retryCount = 0 }: { retryCount?: number } = {},
): { req: FinalizedRequestInit; url: string; timeout: number } {
): Promise<{ req: FinalizedRequestInit; url: string; timeout: number }> {
const options = { ...inputOptions };
const { method, path, query, defaultBaseURL } = options;

const url = this.buildURL(path!, query as Record<string, unknown>, defaultBaseURL);
if ('timeout' in options) validatePositiveInteger('timeout', options.timeout);
options.timeout = options.timeout ?? this.timeout;
const { bodyHeaders, body } = this.buildBody({ options });
const reqHeaders = this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });
const reqHeaders = await this.buildHeaders({ options: inputOptions, method, bodyHeaders, retryCount });

const req: FinalizedRequestInit = {
method,
Expand All @@ -673,7 +676,7 @@ export class Kernel {
return { req, url, timeout: options.timeout };
}

private buildHeaders({
private async buildHeaders({
options,
method,
bodyHeaders,
Expand All @@ -683,7 +686,7 @@ export class Kernel {
method: HTTPMethod;
bodyHeaders: HeadersLike;
retryCount: number;
}): Headers {
}): Promise<Headers> {
let idempotencyHeaders: HeadersLike = {};
if (this.idempotencyHeader && method !== 'get') {
if (!options.idempotencyKey) options.idempotencyKey = this.defaultIdempotencyKey();
Expand All @@ -699,7 +702,7 @@ export class Kernel {
...(options.timeout ? { 'X-Stainless-Timeout': String(Math.trunc(options.timeout / 1000)) } : {}),
...getPlatformHeaders(),
},
this.authHeaders(options),
await this.authHeaders(options),
this._options.defaultHeaders,
bodyHeaders,
options.headers,
Expand Down
Loading