diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 332798e..347d8bf 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.1.0-alpha.8" + ".": "0.1.0-alpha.9" } diff --git a/.stats.yml b/.stats.yml index 6af3fb9..cbc2ff8 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 4 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-d168b58fcf39dbd0458d132091793d3e2d0930070b7dda2d5f7f1baff20dd31b.yml -openapi_spec_hash: b7e0fd7ee1656d7dbad57209d1584d92 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/kernel%2Fkernel-2af763aab4c314b382e1123edc4ee3d51c0fe7977730ce6776b9fb09b29fe291.yml +openapi_spec_hash: be02256478be81fa3f649076879850bc config_hash: eab40627b734534462ae3b8ccd8b263b diff --git a/CHANGELOG.md b/CHANGELOG.md index d51ec33..8b9e9f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.1.0-alpha.9 (2025-05-12) + +Full Changelog: [v0.1.0-alpha.8...v0.1.0-alpha.9](https://github.com/onkernel/kernel-node-sdk/compare/v0.1.0-alpha.8...v0.1.0-alpha.9) + +### Features + +* **api:** update via SDK Studio ([553e10c](https://github.com/onkernel/kernel-node-sdk/commit/553e10cfd6516146d2d81fb3cce9f3f88b21aa62)) + ## 0.1.0-alpha.8 (2025-05-11) Full Changelog: [v0.1.0-alpha.7...v0.1.0-alpha.8](https://github.com/onkernel/kernel-node-sdk/compare/v0.1.0-alpha.7...v0.1.0-alpha.8) diff --git a/README.md b/README.md index 9373ffc..d2163df 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,11 @@ const client = new Kernel({ async function main() { const response = await client.apps.deploy({ - appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME', }); - console.log(response.id); + console.log(response.apps); } main(); @@ -54,11 +53,7 @@ const client = new Kernel({ }); async function main() { - const params: Kernel.AppDeployParams = { - appName: 'REPLACE_ME', - file: fs.createReadStream('path/to/file'), - version: 'REPLACE_ME', - }; + const params: Kernel.AppDeployParams = { file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }; const response: Kernel.AppDeployResponse = await client.apps.deploy(params); } @@ -83,37 +78,17 @@ 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({ - appName: 'my-awesome-app', - file: fs.createReadStream('/path/to/file'), - version: '1.0.0', -}); +await client.apps.deploy({ file: fs.createReadStream('/path/to/file') }); // Or if you have the web `File` API you can pass a `File` instance: -await client.apps.deploy({ - appName: 'my-awesome-app', - file: new File(['my bytes'], 'file'), - version: '1.0.0', -}); +await client.apps.deploy({ file: new File(['my bytes'], 'file') }); // You can also pass a `fetch` `Response`: -await client.apps.deploy({ - appName: 'my-awesome-app', - file: await fetch('https://somesite/file'), - version: '1.0.0', -}); +await client.apps.deploy({ file: await fetch('https://somesite/file') }); // Finally, if none of the above are convenient, you can use our `toFile` helper: -await client.apps.deploy({ - appName: 'my-awesome-app', - file: await toFile(Buffer.from('my bytes'), 'file'), - version: '1.0.0', -}); -await client.apps.deploy({ - appName: 'my-awesome-app', - file: await toFile(new Uint8Array([0, 1, 2]), 'file'), - version: '1.0.0', -}); +await client.apps.deploy({ file: await toFile(Buffer.from('my bytes'), 'file') }); +await client.apps.deploy({ file: await toFile(new Uint8Array([0, 1, 2]), 'file') }); ``` ## Handling errors @@ -126,7 +101,7 @@ a subclass of `APIError` will be thrown: ```ts async function main() { const response = await client.apps - .deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }) + .deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }) .catch(async (err) => { if (err instanceof Kernel.APIError) { console.log(err.status); // 400 @@ -170,7 +145,7 @@ const client = new Kernel({ }); // Or, configure per-request: -await client.apps.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, { +await client.apps.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, { maxRetries: 5, }); ``` @@ -187,7 +162,7 @@ const client = new Kernel({ }); // Override per-request: -await client.apps.deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, { +await client.apps.deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }, { timeout: 5 * 1000, }); ``` @@ -211,16 +186,16 @@ Unlike `.asResponse()` this method consumes the body, returning once it is parse const client = new Kernel(); const response = await client.apps - .deploy({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }) + .deploy({ file: fs.createReadStream('path/to/file'), version: '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({ appName: 'REPLACE_ME', file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }) + .deploy({ file: fs.createReadStream('path/to/file'), version: 'REPLACE_ME' }) .withResponse(); console.log(raw.headers.get('X-My-Header')); -console.log(response.id); +console.log(response.apps); ``` ### Logging diff --git a/api.md b/api.md index 02224e6..88e3798 100644 --- a/api.md +++ b/api.md @@ -20,4 +20,4 @@ Types: Methods: -- client.browser.createSession() -> BrowserCreateSessionResponse +- client.browser.createSession({ ...params }) -> BrowserCreateSessionResponse diff --git a/package.json b/package.json index f8ba76e..7e24e0f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@onkernel/sdk", - "version": "0.1.0-alpha.8", + "version": "0.1.0-alpha.9", "description": "The official TypeScript library for the Kernel API", "author": "Kernel <>", "types": "dist/index.d.ts", diff --git a/src/client.ts b/src/client.ts index f2cd38f..d1dfe16 100644 --- a/src/client.ts +++ b/src/client.ts @@ -28,7 +28,7 @@ import { AppRetrieveInvocationResponse, Apps, } from './resources/apps'; -import { Browser, BrowserCreateSessionResponse } from './resources/browser'; +import { Browser, BrowserCreateSessionParams, BrowserCreateSessionResponse } from './resources/browser'; import { readEnv } from './internal/utils/env'; import { formatRequestDetails, loggerFor } from './internal/utils/log'; import { isEmptyObj } from './internal/utils/values'; @@ -751,5 +751,9 @@ export declare namespace Kernel { type AppInvokeParams as AppInvokeParams, }; - export { Browser as Browser, type BrowserCreateSessionResponse as BrowserCreateSessionResponse }; + export { + Browser as Browser, + type BrowserCreateSessionResponse as BrowserCreateSessionResponse, + type BrowserCreateSessionParams as BrowserCreateSessionParams, + }; } diff --git a/src/resources/apps.ts b/src/resources/apps.ts index e8feb85..8219c1c 100644 --- a/src/resources/apps.ts +++ b/src/resources/apps.ts @@ -14,9 +14,7 @@ export class Apps extends APIResource { * @example * ```ts * const response = await client.apps.deploy({ - * appName: 'my-awesome-app', * file: fs.createReadStream('path/to/file'), - * version: '1.0.0', * }); * ``` */ @@ -32,7 +30,7 @@ export class Apps extends APIResource { * const response = await client.apps.invoke({ * actionName: 'analyze', * appName: 'my-awesome-app', - * payload: '{ "data": "example input" }', + * payload: { data: 'example input' }, * version: '1.0.0', * }); * ``` @@ -57,10 +55,7 @@ export class Apps extends APIResource { } export interface AppDeployResponse { - /** - * ID of the deployed app version - */ - id: string; + apps: Array; /** * Success message @@ -73,6 +68,31 @@ export interface AppDeployResponse { success: boolean; } +export namespace AppDeployResponse { + export interface App { + /** + * ID for the app version deployed + */ + id: string; + + actions: Array; + + /** + * Name of the app + */ + name: string; + } + + export namespace App { + export interface Action { + /** + * Name of the action + */ + name: string; + } + } +} + export interface AppInvokeResponse { /** * ID of the invocation @@ -108,24 +128,29 @@ export interface AppRetrieveInvocationResponse { export interface AppDeployParams { /** - * Name of the application + * ZIP file containing the application source directory */ - appName: string; + file: Uploadable; /** - * ZIP file containing the application + * Relative path to the entrypoint of the application */ - file: Uploadable; + entrypointRelPath?: string; /** - * Version of the application + * Allow overwriting an existing app version */ - version: string; + force?: 'true' | 'false'; + + /** + * Region for deployment. Currently we only support "aws.us-east-1a" + */ + region?: 'aws.us-east-1a'; /** - * AWS region for deployment (e.g. "aws.us-east-1a") + * Version of the application. Can be any string. */ - region?: string; + version?: string; } export interface AppInvokeParams { diff --git a/src/resources/browser.ts b/src/resources/browser.ts index 3ab7870..2b434f5 100644 --- a/src/resources/browser.ts +++ b/src/resources/browser.ts @@ -8,8 +8,11 @@ export class Browser extends APIResource { /** * Create Browser Session */ - createSession(options?: RequestOptions): APIPromise { - return this._client.post('/browser', options); + createSession( + body: BrowserCreateSessionParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post('/browser', { body, ...options }); } } @@ -30,6 +33,16 @@ export interface BrowserCreateSessionResponse { sessionId: string; } +export interface BrowserCreateSessionParams { + /** + * Kernel App invocation ID + */ + invocationId: string; +} + export declare namespace Browser { - export { type BrowserCreateSessionResponse as BrowserCreateSessionResponse }; + export { + type BrowserCreateSessionResponse as BrowserCreateSessionResponse, + type BrowserCreateSessionParams as BrowserCreateSessionParams, + }; } diff --git a/src/resources/index.ts b/src/resources/index.ts index b324da1..bf366e6 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -8,4 +8,4 @@ export { type AppDeployParams, type AppInvokeParams, } from './apps'; -export { Browser, type BrowserCreateSessionResponse } from './browser'; +export { Browser, type BrowserCreateSessionResponse, type BrowserCreateSessionParams } from './browser'; diff --git a/src/version.ts b/src/version.ts index 2cc4fcd..fdbf689 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.1.0-alpha.8'; // x-release-please-version +export const VERSION = '0.1.0-alpha.9'; // x-release-please-version diff --git a/tests/api-resources/apps.test.ts b/tests/api-resources/apps.test.ts index cec0d2b..7cb3c56 100644 --- a/tests/api-resources/apps.test.ts +++ b/tests/api-resources/apps.test.ts @@ -11,9 +11,7 @@ describe('resource apps', () => { // skipped: tests are disabled for the time being test.skip('deploy: only required params', async () => { const responsePromise = client.apps.deploy({ - appName: 'my-awesome-app', file: await toFile(Buffer.from('# my file contents'), 'README.md'), - version: '1.0.0', }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -27,10 +25,11 @@ describe('resource apps', () => { // skipped: tests are disabled for the time being test.skip('deploy: required and optional params', async () => { const response = await client.apps.deploy({ - appName: 'my-awesome-app', file: await toFile(Buffer.from('# my file contents'), 'README.md'), - version: '1.0.0', + entrypointRelPath: 'app.py', + force: 'false', region: 'aws.us-east-1a', + version: '1.0.0', }); }); @@ -39,7 +38,7 @@ describe('resource apps', () => { const responsePromise = client.apps.invoke({ actionName: 'analyze', appName: 'my-awesome-app', - payload: '{ "data": "example input" }', + payload: { data: 'example input' }, version: '1.0.0', }); const rawResponse = await responsePromise.asResponse(); @@ -56,7 +55,7 @@ describe('resource apps', () => { const response = await client.apps.invoke({ actionName: 'analyze', appName: 'my-awesome-app', - payload: '{ "data": "example input" }', + payload: { data: 'example input' }, version: '1.0.0', }); }); diff --git a/tests/api-resources/browser.test.ts b/tests/api-resources/browser.test.ts index 6782448..012e207 100644 --- a/tests/api-resources/browser.test.ts +++ b/tests/api-resources/browser.test.ts @@ -9,8 +9,8 @@ const client = new Kernel({ describe('resource browser', () => { // skipped: tests are disabled for the time being - test.skip('createSession', async () => { - const responsePromise = client.browser.createSession(); + test.skip('createSession: only required params', async () => { + const responsePromise = client.browser.createSession({ invocationId: 'invocationId' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -19,4 +19,9 @@ describe('resource browser', () => { expect(dataAndResponse.data).toBe(response); expect(dataAndResponse.response).toBe(rawResponse); }); + + // skipped: tests are disabled for the time being + test.skip('createSession: required and optional params', async () => { + const response = await client.browser.createSession({ invocationId: 'invocationId' }); + }); });