@onkernel/sdk 0.0.1-alpha.1 → 0.1.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/LICENSE +201 -0
- package/README.md +416 -8
- package/api-promise.d.mts +2 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +2 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +6 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +2 -0
- package/api-promise.mjs.map +1 -0
- package/client.d.mts +203 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +203 -0
- package/client.d.ts.map +1 -0
- package/client.js +477 -0
- package/client.js.map +1 -0
- package/client.mjs +473 -0
- package/client.mjs.map +1 -0
- package/core/api-promise.d.mts +46 -0
- package/core/api-promise.d.mts.map +1 -0
- package/core/api-promise.d.ts +46 -0
- package/core/api-promise.d.ts.map +1 -0
- package/core/api-promise.js +74 -0
- package/core/api-promise.js.map +1 -0
- package/core/api-promise.mjs +70 -0
- package/core/api-promise.mjs.map +1 -0
- package/core/app-framework.d.mts +49 -0
- package/core/app-framework.d.mts.map +1 -0
- package/core/app-framework.d.ts +49 -0
- package/core/app-framework.d.ts.map +1 -0
- package/core/app-framework.js +105 -0
- package/core/app-framework.js.map +1 -0
- package/core/app-framework.mjs +101 -0
- package/core/app-framework.mjs.map +1 -0
- package/core/error.d.mts +46 -0
- package/core/error.d.mts.map +1 -0
- package/core/error.d.ts +46 -0
- package/core/error.d.ts.map +1 -0
- package/core/error.js +113 -0
- package/core/error.js.map +1 -0
- package/core/error.mjs +97 -0
- package/core/error.mjs.map +1 -0
- package/core/resource.d.mts +6 -0
- package/core/resource.d.mts.map +1 -0
- package/core/resource.d.ts +6 -0
- package/core/resource.d.ts.map +1 -0
- package/core/resource.js +11 -0
- package/core/resource.js.map +1 -0
- package/core/resource.mjs +7 -0
- package/core/resource.mjs.map +1 -0
- package/core/uploads.d.mts +3 -0
- package/core/uploads.d.mts.map +1 -0
- package/core/uploads.d.ts +3 -0
- package/core/uploads.d.ts.map +1 -0
- package/core/uploads.js +6 -0
- package/core/uploads.js.map +1 -0
- package/core/uploads.mjs +2 -0
- package/core/uploads.mjs.map +1 -0
- package/error.d.mts +2 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +2 -0
- package/error.d.ts.map +1 -0
- package/error.js +6 -0
- package/error.js.map +1 -0
- package/error.mjs +2 -0
- package/error.mjs.map +1 -0
- package/index.d.mts +7 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +7 -0
- package/index.d.ts.map +1 -0
- package/index.js +32 -0
- package/index.js.map +1 -0
- package/index.mjs +8 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +73 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +73 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +4 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +3 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/detect-platform.d.mts +15 -0
- package/internal/detect-platform.d.mts.map +1 -0
- package/internal/detect-platform.d.ts +15 -0
- package/internal/detect-platform.d.ts.map +1 -0
- package/internal/detect-platform.js +162 -0
- package/internal/detect-platform.js.map +1 -0
- package/internal/detect-platform.mjs +157 -0
- package/internal/detect-platform.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +41 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +36 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +20 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +20 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +79 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +74 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/parse.d.mts +12 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +12 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +35 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +32 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/request-options.d.mts +32 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +32 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +14 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +10 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +28 -0
- package/internal/shim-types.d.ts +28 -0
- package/internal/shims.d.mts +20 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +20 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +92 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +85 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/to-file.d.mts +45 -0
- package/internal/to-file.d.mts.map +1 -0
- package/internal/to-file.d.ts +45 -0
- package/internal/to-file.d.ts.map +1 -0
- package/internal/to-file.js +91 -0
- package/internal/to-file.js.map +1 -0
- package/internal/to-file.mjs +88 -0
- package/internal/to-file.mjs.map +1 -0
- package/internal/tslib.js +81 -0
- package/internal/tslib.mjs +17 -0
- package/internal/types.d.mts +67 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +67 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +4 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +3 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +42 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +42 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +141 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +131 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +38 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +33 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/bytes.d.mts +4 -0
- package/internal/utils/bytes.d.mts.map +1 -0
- package/internal/utils/bytes.d.ts +4 -0
- package/internal/utils/bytes.d.ts.map +1 -0
- package/internal/utils/bytes.js +31 -0
- package/internal/utils/bytes.js.map +1 -0
- package/internal/utils/bytes.mjs +26 -0
- package/internal/utils/bytes.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +22 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +18 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +37 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +37 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +85 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +79 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/path.d.mts +15 -0
- package/internal/utils/path.d.mts.map +1 -0
- package/internal/utils/path.d.ts +15 -0
- package/internal/utils/path.d.ts.map +1 -0
- package/internal/utils/path.js +58 -0
- package/internal/utils/path.js.map +1 -0
- package/internal/utils/path.mjs +53 -0
- package/internal/utils/path.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +2 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +2 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +7 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +3 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +19 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +15 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +16 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +16 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +109 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +92 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +7 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +7 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +11 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +8 -0
- package/internal/utils.mjs.map +1 -0
- package/package.json +133 -42
- package/resource.d.mts +2 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +2 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +6 -0
- package/resource.js.map +1 -0
- package/resource.mjs +2 -0
- package/resource.mjs.map +1 -0
- package/resources/apps.d.mts +142 -0
- package/resources/apps.d.mts.map +1 -0
- package/resources/apps.d.ts +142 -0
- package/resources/apps.d.ts.map +1 -0
- package/resources/apps.js +54 -0
- package/resources/apps.js.map +1 -0
- package/resources/apps.mjs +50 -0
- package/resources/apps.mjs.map +1 -0
- package/resources/browser.d.mts +33 -0
- package/resources/browser.d.mts.map +1 -0
- package/resources/browser.d.ts +33 -0
- package/resources/browser.d.ts.map +1 -0
- package/resources/browser.js +15 -0
- package/resources/browser.js.map +1 -0
- package/resources/browser.mjs +11 -0
- package/resources/browser.mjs.map +1 -0
- package/resources/index.d.mts +3 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +3 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +9 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +4 -0
- package/resources/index.mjs.map +1 -0
- package/resources.d.mts +2 -0
- package/resources.d.mts.map +1 -0
- package/resources.d.ts +2 -0
- package/resources.d.ts.map +1 -0
- package/resources.js +5 -0
- package/resources.js.map +1 -0
- package/resources.mjs +2 -0
- package/resources.mjs.map +1 -0
- package/src/api-promise.ts +2 -0
- package/src/client.ts +759 -0
- package/src/core/README.md +3 -0
- package/src/core/api-promise.ts +92 -0
- package/src/core/app-framework.ts +137 -0
- package/src/core/error.ts +130 -0
- package/src/core/resource.ts +11 -0
- package/src/core/uploads.ts +2 -0
- package/src/error.ts +2 -0
- package/src/index.ts +24 -0
- package/src/internal/README.md +3 -0
- package/src/internal/builtin-types.ts +93 -0
- package/src/internal/detect-platform.ts +196 -0
- package/src/internal/errors.ts +33 -0
- package/src/internal/headers.ts +97 -0
- package/src/internal/parse.ts +50 -0
- package/src/internal/request-options.ts +37 -0
- package/src/internal/shim-types.d.ts +28 -0
- package/src/internal/shims.ts +107 -0
- package/src/internal/to-file.ts +154 -0
- package/src/internal/types.ts +92 -0
- package/src/internal/uploads.ts +187 -0
- package/src/internal/utils/base64.ts +40 -0
- package/src/internal/utils/bytes.ts +32 -0
- package/src/internal/utils/env.ts +18 -0
- package/src/internal/utils/log.ts +126 -0
- package/src/internal/utils/path.ts +63 -0
- package/src/internal/utils/sleep.ts +3 -0
- package/src/internal/utils/uuid.ts +17 -0
- package/src/internal/utils/values.ts +102 -0
- package/src/internal/utils.ts +8 -0
- package/src/lib/.keep +4 -0
- package/src/resource.ts +2 -0
- package/src/resources/apps.ts +187 -0
- package/src/resources/browser.ts +48 -0
- package/src/resources/index.ts +11 -0
- package/src/resources.ts +1 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +2 -0
- package/src/version.ts +1 -0
- package/uploads.d.mts +2 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +2 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +2 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
- package/dist/index.cjs +0 -71
- package/dist/index.d.cts +0 -59
- package/dist/index.d.ts +0 -59
- package/dist/index.js +0 -68
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { type Kernel } from '../client';
|
|
4
|
+
|
|
5
|
+
import { type PromiseOrValue } from '../internal/types';
|
|
6
|
+
import { APIResponseProps, defaultParseResponse } from '../internal/parse';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A subclass of `Promise` providing additional helper methods
|
|
10
|
+
* for interacting with the SDK.
|
|
11
|
+
*/
|
|
12
|
+
export class APIPromise<T> extends Promise<T> {
|
|
13
|
+
private parsedPromise: Promise<T> | undefined;
|
|
14
|
+
#client: Kernel;
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
client: Kernel,
|
|
18
|
+
private responsePromise: Promise<APIResponseProps>,
|
|
19
|
+
private parseResponse: (
|
|
20
|
+
client: Kernel,
|
|
21
|
+
props: APIResponseProps,
|
|
22
|
+
) => PromiseOrValue<T> = defaultParseResponse,
|
|
23
|
+
) {
|
|
24
|
+
super((resolve) => {
|
|
25
|
+
// this is maybe a bit weird but this has to be a no-op to not implicitly
|
|
26
|
+
// parse the response body; instead .then, .catch, .finally are overridden
|
|
27
|
+
// to parse the response
|
|
28
|
+
resolve(null as any);
|
|
29
|
+
});
|
|
30
|
+
this.#client = client;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
_thenUnwrap<U>(transform: (data: T, props: APIResponseProps) => U): APIPromise<U> {
|
|
34
|
+
return new APIPromise(this.#client, this.responsePromise, async (client, props) =>
|
|
35
|
+
transform(await this.parseResponse(client, props), props),
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Gets the raw `Response` instance instead of parsing the response
|
|
41
|
+
* data.
|
|
42
|
+
*
|
|
43
|
+
* If you want to parse the response body but still get the `Response`
|
|
44
|
+
* instance, you can use {@link withResponse()}.
|
|
45
|
+
*
|
|
46
|
+
* 👋 Getting the wrong TypeScript type for `Response`?
|
|
47
|
+
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
48
|
+
* to your `tsconfig.json`.
|
|
49
|
+
*/
|
|
50
|
+
asResponse(): Promise<Response> {
|
|
51
|
+
return this.responsePromise.then((p) => p.response);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Gets the parsed response data and the raw `Response` instance.
|
|
56
|
+
*
|
|
57
|
+
* If you just want to get the raw `Response` instance without parsing it,
|
|
58
|
+
* you can use {@link asResponse()}.
|
|
59
|
+
*
|
|
60
|
+
* 👋 Getting the wrong TypeScript type for `Response`?
|
|
61
|
+
* Try setting `"moduleResolution": "NodeNext"` or add `"lib": ["DOM"]`
|
|
62
|
+
* to your `tsconfig.json`.
|
|
63
|
+
*/
|
|
64
|
+
async withResponse(): Promise<{ data: T; response: Response }> {
|
|
65
|
+
const [data, response] = await Promise.all([this.parse(), this.asResponse()]);
|
|
66
|
+
return { data, response };
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private parse(): Promise<T> {
|
|
70
|
+
if (!this.parsedPromise) {
|
|
71
|
+
this.parsedPromise = this.responsePromise.then((data) => this.parseResponse(this.#client, data));
|
|
72
|
+
}
|
|
73
|
+
return this.parsedPromise;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override then<TResult1 = T, TResult2 = never>(
|
|
77
|
+
onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
|
|
78
|
+
onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null,
|
|
79
|
+
): Promise<TResult1 | TResult2> {
|
|
80
|
+
return this.parse().then(onfulfilled, onrejected);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
override catch<TResult = never>(
|
|
84
|
+
onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null,
|
|
85
|
+
): Promise<T | TResult> {
|
|
86
|
+
return this.parse().catch(onrejected);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
override finally(onfinally?: (() => void) | undefined | null): Promise<T> {
|
|
90
|
+
return this.parse().finally(onfinally);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
export interface KernelContext {
|
|
2
|
+
invocationId: string;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export interface KernelAction {
|
|
6
|
+
name: string;
|
|
7
|
+
handler: (context: KernelContext, input: any) => Promise<any>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface KernelJson {
|
|
11
|
+
apps: KernelAppJson[];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface KernelAppJson {
|
|
15
|
+
name: string;
|
|
16
|
+
actions: KernelActionJson[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface KernelActionJson {
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class KernelApp {
|
|
24
|
+
name: string;
|
|
25
|
+
actions: Map<string, KernelAction> = new Map();
|
|
26
|
+
|
|
27
|
+
constructor(name: string) {
|
|
28
|
+
this.name = name;
|
|
29
|
+
// Register this app in the global registry
|
|
30
|
+
appRegistry.registerApp(this);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Define an action
|
|
35
|
+
*/
|
|
36
|
+
action<T, R>(
|
|
37
|
+
nameOrHandler: string | ((input: T) => Promise<R>) | ((context: KernelContext, input: T) => Promise<R>),
|
|
38
|
+
handler?: ((input: T) => Promise<R>) | ((context: KernelContext, input: T) => Promise<R>),
|
|
39
|
+
) {
|
|
40
|
+
let actionName: string;
|
|
41
|
+
let actionHandler: (context: KernelContext, input: T) => Promise<R>;
|
|
42
|
+
|
|
43
|
+
if (typeof nameOrHandler === 'string' && handler) {
|
|
44
|
+
// Case: app.action("name", handler)
|
|
45
|
+
actionName = nameOrHandler;
|
|
46
|
+
|
|
47
|
+
// Create a handler that accepts context and input, adapting if needed
|
|
48
|
+
if (handler.length === 1) {
|
|
49
|
+
// Original handler only takes input, so we adapt it to the new signature
|
|
50
|
+
const singleArgHandler = handler as (input: T) => Promise<R>;
|
|
51
|
+
actionHandler = async (context: KernelContext, input: T) => singleArgHandler(input);
|
|
52
|
+
} else {
|
|
53
|
+
// Handler takes both context and input
|
|
54
|
+
actionHandler = handler as (context: KernelContext, input: T) => Promise<R>;
|
|
55
|
+
}
|
|
56
|
+
} else if (typeof nameOrHandler === 'function') {
|
|
57
|
+
// Case: app.action(handler)
|
|
58
|
+
actionName = nameOrHandler.name || 'default';
|
|
59
|
+
|
|
60
|
+
// Create a handler that accepts context and input, adapting if needed
|
|
61
|
+
if (nameOrHandler.length === 1) {
|
|
62
|
+
// Original handler only takes input, so we adapt it to the new signature
|
|
63
|
+
const singleArgHandler = nameOrHandler as (input: T) => Promise<R>;
|
|
64
|
+
actionHandler = async (context: KernelContext, input: T) => singleArgHandler(input);
|
|
65
|
+
} else {
|
|
66
|
+
// Handler takes both context and input
|
|
67
|
+
actionHandler = nameOrHandler as (context: KernelContext, input: T) => Promise<R>;
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
throw new Error('Invalid action definition');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Register the action
|
|
74
|
+
this.actions.set(actionName, {
|
|
75
|
+
name: actionName,
|
|
76
|
+
handler: actionHandler,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
return actionHandler;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Get all actions for this app
|
|
84
|
+
*/
|
|
85
|
+
getActions(): KernelAction[] {
|
|
86
|
+
return Array.from(this.actions.values());
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Get an action by name
|
|
91
|
+
*/
|
|
92
|
+
getAction(name: string): KernelAction | undefined {
|
|
93
|
+
return this.actions.get(name);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Export app information without handlers
|
|
98
|
+
*/
|
|
99
|
+
toJSON(): KernelAppJson {
|
|
100
|
+
return {
|
|
101
|
+
name: this.name,
|
|
102
|
+
actions: this.getActions().map((action) => ({
|
|
103
|
+
name: action.name,
|
|
104
|
+
})),
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Registry for storing all Kernel apps
|
|
110
|
+
class KernelAppRegistry {
|
|
111
|
+
private apps: Map<string, KernelApp> = new Map();
|
|
112
|
+
|
|
113
|
+
registerApp(app: KernelApp): void {
|
|
114
|
+
this.apps.set(app.name, app);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
getApps(): KernelApp[] {
|
|
118
|
+
return Array.from(this.apps.values());
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
getAppByName(name: string): KernelApp | undefined {
|
|
122
|
+
return this.apps.get(name);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export(): KernelJson {
|
|
126
|
+
return {
|
|
127
|
+
apps: this.getApps().map((app) => app.toJSON()),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
exportJSON(): string {
|
|
132
|
+
return JSON.stringify(this.export(), null, 2);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Create a singleton registry for apps
|
|
137
|
+
export const appRegistry = new KernelAppRegistry();
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import { castToError } from '../internal/errors';
|
|
4
|
+
|
|
5
|
+
export class KernelError extends Error {}
|
|
6
|
+
|
|
7
|
+
export class APIError<
|
|
8
|
+
TStatus extends number | undefined = number | undefined,
|
|
9
|
+
THeaders extends Headers | undefined = Headers | undefined,
|
|
10
|
+
TError extends Object | undefined = Object | undefined,
|
|
11
|
+
> extends KernelError {
|
|
12
|
+
/** HTTP status for the response that caused the error */
|
|
13
|
+
readonly status: TStatus;
|
|
14
|
+
/** HTTP headers for the response that caused the error */
|
|
15
|
+
readonly headers: THeaders;
|
|
16
|
+
/** JSON body of the response that caused the error */
|
|
17
|
+
readonly error: TError;
|
|
18
|
+
|
|
19
|
+
constructor(status: TStatus, error: TError, message: string | undefined, headers: THeaders) {
|
|
20
|
+
super(`${APIError.makeMessage(status, error, message)}`);
|
|
21
|
+
this.status = status;
|
|
22
|
+
this.headers = headers;
|
|
23
|
+
this.error = error;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private static makeMessage(status: number | undefined, error: any, message: string | undefined) {
|
|
27
|
+
const msg =
|
|
28
|
+
error?.message ?
|
|
29
|
+
typeof error.message === 'string' ?
|
|
30
|
+
error.message
|
|
31
|
+
: JSON.stringify(error.message)
|
|
32
|
+
: error ? JSON.stringify(error)
|
|
33
|
+
: message;
|
|
34
|
+
|
|
35
|
+
if (status && msg) {
|
|
36
|
+
return `${status} ${msg}`;
|
|
37
|
+
}
|
|
38
|
+
if (status) {
|
|
39
|
+
return `${status} status code (no body)`;
|
|
40
|
+
}
|
|
41
|
+
if (msg) {
|
|
42
|
+
return msg;
|
|
43
|
+
}
|
|
44
|
+
return '(no status code or body)';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static generate(
|
|
48
|
+
status: number | undefined,
|
|
49
|
+
errorResponse: Object | undefined,
|
|
50
|
+
message: string | undefined,
|
|
51
|
+
headers: Headers | undefined,
|
|
52
|
+
): APIError {
|
|
53
|
+
if (!status || !headers) {
|
|
54
|
+
return new APIConnectionError({ message, cause: castToError(errorResponse) });
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const error = errorResponse as Record<string, any>;
|
|
58
|
+
|
|
59
|
+
if (status === 400) {
|
|
60
|
+
return new BadRequestError(status, error, message, headers);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (status === 401) {
|
|
64
|
+
return new AuthenticationError(status, error, message, headers);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (status === 403) {
|
|
68
|
+
return new PermissionDeniedError(status, error, message, headers);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (status === 404) {
|
|
72
|
+
return new NotFoundError(status, error, message, headers);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (status === 409) {
|
|
76
|
+
return new ConflictError(status, error, message, headers);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (status === 422) {
|
|
80
|
+
return new UnprocessableEntityError(status, error, message, headers);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (status === 429) {
|
|
84
|
+
return new RateLimitError(status, error, message, headers);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
if (status >= 500) {
|
|
88
|
+
return new InternalServerError(status, error, message, headers);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return new APIError(status, error, message, headers);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class APIUserAbortError extends APIError<undefined, undefined, undefined> {
|
|
96
|
+
constructor({ message }: { message?: string } = {}) {
|
|
97
|
+
super(undefined, undefined, message || 'Request was aborted.', undefined);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export class APIConnectionError extends APIError<undefined, undefined, undefined> {
|
|
102
|
+
constructor({ message, cause }: { message?: string | undefined; cause?: Error | undefined }) {
|
|
103
|
+
super(undefined, undefined, message || 'Connection error.', undefined);
|
|
104
|
+
// in some environments the 'cause' property is already declared
|
|
105
|
+
// @ts-ignore
|
|
106
|
+
if (cause) this.cause = cause;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export class APIConnectionTimeoutError extends APIConnectionError {
|
|
111
|
+
constructor({ message }: { message?: string } = {}) {
|
|
112
|
+
super({ message: message ?? 'Request timed out.' });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export class BadRequestError extends APIError<400, Headers> {}
|
|
117
|
+
|
|
118
|
+
export class AuthenticationError extends APIError<401, Headers> {}
|
|
119
|
+
|
|
120
|
+
export class PermissionDeniedError extends APIError<403, Headers> {}
|
|
121
|
+
|
|
122
|
+
export class NotFoundError extends APIError<404, Headers> {}
|
|
123
|
+
|
|
124
|
+
export class ConflictError extends APIError<409, Headers> {}
|
|
125
|
+
|
|
126
|
+
export class UnprocessableEntityError extends APIError<422, Headers> {}
|
|
127
|
+
|
|
128
|
+
export class RateLimitError extends APIError<429, Headers> {}
|
|
129
|
+
|
|
130
|
+
export class InternalServerError extends APIError<number, Headers> {}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
import type { Kernel } from '../client';
|
|
4
|
+
|
|
5
|
+
export class APIResource {
|
|
6
|
+
protected _client: Kernel;
|
|
7
|
+
|
|
8
|
+
constructor(client: Kernel) {
|
|
9
|
+
this._client = client;
|
|
10
|
+
}
|
|
11
|
+
}
|
package/src/error.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
export { Kernel as default } from './client';
|
|
4
|
+
|
|
5
|
+
export { type Uploadable, toFile } from './core/uploads';
|
|
6
|
+
export { APIPromise } from './core/api-promise';
|
|
7
|
+
export { Kernel, type ClientOptions } from './client';
|
|
8
|
+
export {
|
|
9
|
+
KernelError,
|
|
10
|
+
APIError,
|
|
11
|
+
APIConnectionError,
|
|
12
|
+
APIConnectionTimeoutError,
|
|
13
|
+
APIUserAbortError,
|
|
14
|
+
NotFoundError,
|
|
15
|
+
ConflictError,
|
|
16
|
+
RateLimitError,
|
|
17
|
+
BadRequestError,
|
|
18
|
+
AuthenticationError,
|
|
19
|
+
InternalServerError,
|
|
20
|
+
PermissionDeniedError,
|
|
21
|
+
UnprocessableEntityError,
|
|
22
|
+
} from './core/error';
|
|
23
|
+
|
|
24
|
+
export { KernelAction, KernelContext, KernelJson, appRegistry } from './core/app-framework';
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
export type Fetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* An alias to the builtin `RequestInit` type so we can
|
|
7
|
+
* easily alias it in import statements if there are name clashes.
|
|
8
|
+
*
|
|
9
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit
|
|
10
|
+
*/
|
|
11
|
+
type _RequestInit = RequestInit;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* An alias to the builtin `Response` type so we can
|
|
15
|
+
* easily alias it in import statements if there are name clashes.
|
|
16
|
+
*
|
|
17
|
+
* https://developer.mozilla.org/docs/Web/API/Response
|
|
18
|
+
*/
|
|
19
|
+
type _Response = Response;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* The type for the first argument to `fetch`.
|
|
23
|
+
*
|
|
24
|
+
* https://developer.mozilla.org/docs/Web/API/Window/fetch#resource
|
|
25
|
+
*/
|
|
26
|
+
type _RequestInfo = Request | URL | string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The type for constructing `RequestInit` Headers.
|
|
30
|
+
*
|
|
31
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit#setting_headers
|
|
32
|
+
*/
|
|
33
|
+
type _HeadersInit = RequestInit['headers'];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The type for constructing `RequestInit` body.
|
|
37
|
+
*
|
|
38
|
+
* https://developer.mozilla.org/docs/Web/API/RequestInit#body
|
|
39
|
+
*/
|
|
40
|
+
type _BodyInit = RequestInit['body'];
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* An alias to the builtin `Array<T>` type so we can
|
|
44
|
+
* easily alias it in import statements if there are name clashes.
|
|
45
|
+
*/
|
|
46
|
+
type _Array<T> = Array<T>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* An alias to the builtin `Record<K, T>` type so we can
|
|
50
|
+
* easily alias it in import statements if there are name clashes.
|
|
51
|
+
*/
|
|
52
|
+
type _Record<K extends keyof any, T> = Record<K, T>;
|
|
53
|
+
|
|
54
|
+
export type {
|
|
55
|
+
_Array as Array,
|
|
56
|
+
_BodyInit as BodyInit,
|
|
57
|
+
_HeadersInit as HeadersInit,
|
|
58
|
+
_Record as Record,
|
|
59
|
+
_RequestInfo as RequestInfo,
|
|
60
|
+
_RequestInit as RequestInit,
|
|
61
|
+
_Response as Response,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* A copy of the builtin `EndingType` type as it isn't fully supported in certain
|
|
66
|
+
* environments and attempting to reference the global version will error.
|
|
67
|
+
*
|
|
68
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L27941
|
|
69
|
+
*/
|
|
70
|
+
type EndingType = 'native' | 'transparent';
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A copy of the builtin `BlobPropertyBag` type as it isn't fully supported in certain
|
|
74
|
+
* environments and attempting to reference the global version will error.
|
|
75
|
+
*
|
|
76
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L154
|
|
77
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob#options
|
|
78
|
+
*/
|
|
79
|
+
export interface BlobPropertyBag {
|
|
80
|
+
endings?: EndingType;
|
|
81
|
+
type?: string;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* A copy of the builtin `FilePropertyBag` type as it isn't fully supported in certain
|
|
86
|
+
* environments and attempting to reference the global version will error.
|
|
87
|
+
*
|
|
88
|
+
* https://github.com/microsoft/TypeScript/blob/49ad1a3917a0ea57f5ff248159256e12bb1cb705/src/lib/dom.generated.d.ts#L503
|
|
89
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/File/File#options
|
|
90
|
+
*/
|
|
91
|
+
export interface FilePropertyBag extends BlobPropertyBag {
|
|
92
|
+
lastModified?: number;
|
|
93
|
+
}
|