@holocronlab/botruntime-sdk 6.13.3
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/LICENSE +8 -0
- package/dist/base-logger.d.ts +34 -0
- package/dist/base-logger.test.d.ts +1 -0
- package/dist/bot/bot-logger.d.ts +18 -0
- package/dist/bot/client/index.d.ts +80 -0
- package/dist/bot/client/types.d.ts +254 -0
- package/dist/bot/client/types.test.d.ts +1 -0
- package/dist/bot/common/generic.d.ts +41 -0
- package/dist/bot/common/generic.test.d.ts +1 -0
- package/dist/bot/common/index.d.ts +2 -0
- package/dist/bot/common/types.d.ts +54 -0
- package/dist/bot/common/types.test.d.ts +1 -0
- package/dist/bot/definition.d.ts +214 -0
- package/dist/bot/definition.test.d.ts +1 -0
- package/dist/bot/implementation.d.ts +72 -0
- package/dist/bot/implementation.test.d.ts +1 -0
- package/dist/bot/index.d.ts +6 -0
- package/dist/bot/server/context.d.ts +2 -0
- package/dist/bot/server/index.d.ts +5 -0
- package/dist/bot/server/responses.d.ts +3 -0
- package/dist/bot/server/types.d.ts +423 -0
- package/dist/bot/server/types.test.d.ts +1 -0
- package/dist/bot/server/workflows/update-handler.d.ts +3 -0
- package/dist/bot/server/workflows/update-type-conv.d.ts +2 -0
- package/dist/bot/workflow-proxy/index.d.ts +2 -0
- package/dist/bot/workflow-proxy/proxy.d.ts +17 -0
- package/dist/bot/workflow-proxy/types.d.ts +80 -0
- package/dist/bot/workflow-proxy/types.test.d.ts +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/recurring-events.d.ts +9 -0
- package/dist/common/recurring-events.test.d.ts +1 -0
- package/dist/common/types.d.ts +8 -0
- package/dist/consts.d.ts +11 -0
- package/dist/errors.d.ts +19 -0
- package/dist/fixtures.d.ts +357 -0
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.mjs +34 -0
- package/dist/index.mjs.map +7 -0
- package/dist/integration/client/index.d.ts +55 -0
- package/dist/integration/client/sub-types.d.ts +27 -0
- package/dist/integration/client/sub-types.test.d.ts +1 -0
- package/dist/integration/client/types.d.ts +209 -0
- package/dist/integration/client/types.test.d.ts +1 -0
- package/dist/integration/common/generic.d.ts +57 -0
- package/dist/integration/common/generic.test.d.ts +1 -0
- package/dist/integration/common/index.d.ts +1 -0
- package/dist/integration/definition/branded-schema.d.ts +21 -0
- package/dist/integration/definition/definition.test.d.ts +1 -0
- package/dist/integration/definition/generic.d.ts +9 -0
- package/dist/integration/definition/index.d.ts +130 -0
- package/dist/integration/definition/types.d.ts +119 -0
- package/dist/integration/implementation.d.ts +37 -0
- package/dist/integration/index.d.ts +5 -0
- package/dist/integration/server/action-metadata.d.ts +9 -0
- package/dist/integration/server/context.d.ts +4 -0
- package/dist/integration/server/index.d.ts +6 -0
- package/dist/integration/server/integration-logger.d.ts +36 -0
- package/dist/integration/server/types.d.ts +108 -0
- package/dist/interface/common/generic.d.ts +34 -0
- package/dist/interface/common/generic.test.d.ts +1 -0
- package/dist/interface/common/index.d.ts +1 -0
- package/dist/interface/definition.d.ts +87 -0
- package/dist/interface/index.d.ts +2 -0
- package/dist/interface/resolve.d.ts +18 -0
- package/dist/log.d.ts +7 -0
- package/dist/message.d.ts +742 -0
- package/dist/package.d.ts +64 -0
- package/dist/plugin/action-proxy/index.d.ts +2 -0
- package/dist/plugin/action-proxy/proxy.d.ts +5 -0
- package/dist/plugin/action-proxy/types.d.ts +14 -0
- package/dist/plugin/action-proxy/types.test.d.ts +1 -0
- package/dist/plugin/common/generic.d.ts +63 -0
- package/dist/plugin/common/generic.test.d.ts +1 -0
- package/dist/plugin/common/index.d.ts +2 -0
- package/dist/plugin/common/types.d.ts +59 -0
- package/dist/plugin/conversation-proxy/index.d.ts +2 -0
- package/dist/plugin/conversation-proxy/proxy.d.ts +13 -0
- package/dist/plugin/conversation-proxy/types.d.ts +54 -0
- package/dist/plugin/conversation-proxy/types.test.d.ts +1 -0
- package/dist/plugin/definition.d.ts +152 -0
- package/dist/plugin/definition.test.d.ts +1 -0
- package/dist/plugin/event-proxy/index.d.ts +2 -0
- package/dist/plugin/event-proxy/proxy.d.ts +5 -0
- package/dist/plugin/event-proxy/types.d.ts +19 -0
- package/dist/plugin/event-proxy/types.test.d.ts +1 -0
- package/dist/plugin/implementation.d.ts +71 -0
- package/dist/plugin/implementation.test.d.ts +1 -0
- package/dist/plugin/index.d.ts +4 -0
- package/dist/plugin/message-proxy/index.d.ts +2 -0
- package/dist/plugin/message-proxy/proxy.d.ts +13 -0
- package/dist/plugin/message-proxy/types.d.ts +22 -0
- package/dist/plugin/server/index.d.ts +1 -0
- package/dist/plugin/server/types.d.ts +505 -0
- package/dist/plugin/server/types.test.d.ts +1 -0
- package/dist/plugin/state-proxy/index.d.ts +2 -0
- package/dist/plugin/state-proxy/proxy.d.ts +5 -0
- package/dist/plugin/state-proxy/types.d.ts +29 -0
- package/dist/plugin/state-proxy/types.test.d.ts +1 -0
- package/dist/plugin/tag-prefixer.d.ts +10 -0
- package/dist/plugin/tag-prefixer.test.d.ts +1 -0
- package/dist/plugin/user-proxy/index.d.ts +2 -0
- package/dist/plugin/user-proxy/proxy.d.ts +14 -0
- package/dist/plugin/user-proxy/types.d.ts +30 -0
- package/dist/public-consts.d.ts +9 -0
- package/dist/retry.d.ts +2 -0
- package/dist/retry.test.d.ts +1 -0
- package/dist/schema.d.ts +18 -0
- package/dist/serve.d.ts +38 -0
- package/dist/utils/api-paging-utils.d.ts +43 -0
- package/dist/utils/api-paging-utils.test.d.ts +1 -0
- package/dist/utils/array-utils.d.ts +2 -0
- package/dist/utils/error-utils.d.ts +4 -0
- package/dist/utils/function-utils.d.ts +2 -0
- package/dist/utils/function-utils.test.d.ts +1 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/record-utils.d.ts +6 -0
- package/dist/utils/record-utils.test.d.ts +1 -0
- package/dist/utils/type-utils.d.ts +63 -0
- package/dist/utils/type-utils.test.d.ts +1 -0
- package/dist/version-utils.d.ts +18 -0
- package/dist/version.d.ts +1 -0
- package/dist/zui.d.ts +9 -0
- package/package.json +59 -0
- package/readme.md +11 -0
package/dist/serve.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as http from 'node:http';
|
|
2
|
+
export type Request = {
|
|
3
|
+
body?: string;
|
|
4
|
+
path: string;
|
|
5
|
+
query: string;
|
|
6
|
+
method: string;
|
|
7
|
+
headers: {
|
|
8
|
+
[key: string]: string | undefined;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type Response = {
|
|
12
|
+
body?: string;
|
|
13
|
+
headers?: {
|
|
14
|
+
[key: string]: string;
|
|
15
|
+
};
|
|
16
|
+
status?: number;
|
|
17
|
+
};
|
|
18
|
+
export type Handler = (req: Request) => Promise<Response | void>;
|
|
19
|
+
export declare function parseBody<T>(req: Request): T;
|
|
20
|
+
/**
|
|
21
|
+
* Maps a thrown handler error to an HTTP response.
|
|
22
|
+
*
|
|
23
|
+
* A deliberately thrown `RuntimeError` indicates a handled, user-facing failure,
|
|
24
|
+
* and an `InvalidPayloadError` indicates a malformed request. Both preserve
|
|
25
|
+
* their original 4xx status so callers do not retry them.
|
|
26
|
+
*
|
|
27
|
+
* Any other error is treated as unhandled and returned as a 500 response so
|
|
28
|
+
* callers can consider it transient.
|
|
29
|
+
*/
|
|
30
|
+
export declare const handlerErrorToHttpResponse: ({ thrown, unexpectedErrorMessage, }: {
|
|
31
|
+
thrown: unknown;
|
|
32
|
+
unexpectedErrorMessage: string;
|
|
33
|
+
}) => {
|
|
34
|
+
status: number;
|
|
35
|
+
body: string;
|
|
36
|
+
error: Error;
|
|
37
|
+
};
|
|
38
|
+
export declare function serve(handler: Handler, port?: number, callback?: (port: number) => void): Promise<http.Server>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
type _PageLister<R> = (t: {
|
|
2
|
+
nextToken?: string;
|
|
3
|
+
}) => Promise<{
|
|
4
|
+
items: R[];
|
|
5
|
+
meta: {
|
|
6
|
+
nextToken?: string;
|
|
7
|
+
};
|
|
8
|
+
}>;
|
|
9
|
+
declare class AsyncCollection<T> implements AsyncIterableIterator<T> {
|
|
10
|
+
private _list;
|
|
11
|
+
private _nextToken?;
|
|
12
|
+
private _elementsBuffer;
|
|
13
|
+
private _isExhausted;
|
|
14
|
+
constructor(_list: _PageLister<T>);
|
|
15
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Get the next element from the collection and advance the iterator.
|
|
18
|
+
*/
|
|
19
|
+
next(): Promise<IteratorResult<T, undefined>>;
|
|
20
|
+
/**
|
|
21
|
+
* Take the next n elements from the collection, advancing the iterator, and
|
|
22
|
+
* return them as an array.
|
|
23
|
+
*/
|
|
24
|
+
take(amount: number): Promise<T[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Take the next n pages of elements from the collection, advancing the
|
|
27
|
+
* iterator, and return the elements as an array.
|
|
28
|
+
*/
|
|
29
|
+
takePage(amount: number): Promise<T[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Take all remaining elements from in collection, moving the iterator to the
|
|
32
|
+
* end, and return them as an array.
|
|
33
|
+
*/
|
|
34
|
+
takeAll(): Promise<T[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns true if there are no more elements to fetch in the collection.
|
|
37
|
+
*/
|
|
38
|
+
get isExhausted(): boolean;
|
|
39
|
+
private _fetchNextPageIntoBuffer;
|
|
40
|
+
private get _bufferIsEmpty();
|
|
41
|
+
}
|
|
42
|
+
export type { AsyncCollection };
|
|
43
|
+
export declare const createAsyncCollection: <T>(listFn: _PageLister<T>) => AsyncCollection<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const pairs: <K extends string, V>(obj: Record<K, V>) => [K, V][];
|
|
2
|
+
export declare const values: <K extends string, V>(obj: Record<K, V>) => V[];
|
|
3
|
+
export declare const mapValues: <K extends string, V, R>(obj: Record<K, V>, fn: (value: V, key: K) => R) => Record<K, R>;
|
|
4
|
+
export declare const mapKeys: <K1 extends string, K2 extends string, V>(obj: Record<K1, V>, fn: (key: K1) => K2) => Record<K2, V>;
|
|
5
|
+
export declare const stripUndefinedProps: <K extends string, V>(obj: Record<K, V | undefined>) => Record<K, V>;
|
|
6
|
+
export declare const mergeRecords: <K extends string, V>(a: Record<K, V>, b: Record<K, V>, merge: (v1: V, v2: V) => V) => Record<K, V>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type Function<I extends any[] = any, O extends any = any> = (...args: I) => O;
|
|
2
|
+
export type ValueOf<T> = T[keyof T];
|
|
3
|
+
export type Merge<A extends object, B extends object> = Omit<A, keyof B> & B;
|
|
4
|
+
export type Cast<T, U> = T extends U ? T : U;
|
|
5
|
+
export type SafeCast<T, U> = [T] extends [never] ? U : Cast<T, U>;
|
|
6
|
+
export type Writable<T> = {
|
|
7
|
+
-readonly [K in keyof T]: T[K];
|
|
8
|
+
};
|
|
9
|
+
export type Default<T, U> = undefined extends T ? U : T;
|
|
10
|
+
export type Not<X extends boolean> = X extends true ? false : true;
|
|
11
|
+
export type And<X extends boolean, Y extends boolean> = X extends true ? (Y extends true ? true : false) : false;
|
|
12
|
+
export type Or<X extends boolean, Y extends boolean> = X extends true ? true : Y extends true ? true : false;
|
|
13
|
+
export type AtLeastOne<T> = [T, ...T[]];
|
|
14
|
+
export type AtLeastOneProperty<T> = T extends undefined ? {} : {
|
|
15
|
+
[K in keyof T]?: T[K];
|
|
16
|
+
} & {
|
|
17
|
+
[K in keyof T]: Pick<T, K>;
|
|
18
|
+
}[keyof T];
|
|
19
|
+
export type ExactlyOneProperty<T> = T extends undefined ? {} : {
|
|
20
|
+
[K in keyof T]: {
|
|
21
|
+
[P in K]: T[P];
|
|
22
|
+
} & {
|
|
23
|
+
[P in Exclude<keyof T, K>]?: never;
|
|
24
|
+
};
|
|
25
|
+
}[keyof T];
|
|
26
|
+
export type IsExtend<X, Y> = X extends Y ? true : false;
|
|
27
|
+
export type IsEquivalent<X, Y> = IsExtend<X, Y> extends true ? IsExtend<Y, X> : false;
|
|
28
|
+
export type IsIdentical<X, Y> = (<T>() => T extends X ? 1 : 2) extends <T>() => T extends Y ? 1 : 2 ? true : false;
|
|
29
|
+
export type IsEqual<X, Y> = IsIdentical<Normalize<X>, Normalize<Y>>;
|
|
30
|
+
/**
|
|
31
|
+
* For F1 function to extend F2 function,
|
|
32
|
+
* F2 input should extend F1 input so that if you call F1 thinking it is F2, it still works.
|
|
33
|
+
* IsStricterFunction is not an extension check as it allows F1 to require a stricter input than F2.
|
|
34
|
+
*/
|
|
35
|
+
export type IsStricterFunction<F1 extends Function, F2 extends Function> = And<IsExtend<ReturnType<F1>, ReturnType<F2>>, IsExtend<Parameters<F1>, Parameters<F2>>>;
|
|
36
|
+
export type AssertExtends<_A extends B, B> = true;
|
|
37
|
+
export type AssertNotExtends<A, B> = A extends B ? false : true;
|
|
38
|
+
export type AssertTrue<_T extends true> = true;
|
|
39
|
+
export type AssertAll<_T extends true[]> = true;
|
|
40
|
+
export type Join<S extends (string | number | symbol)[]> = S extends [infer H, ...infer T] ? `${Cast<H, string>}${Join<Cast<T, string[]>>}` : S extends [infer H] ? Cast<H, string> : '';
|
|
41
|
+
export type Split<S extends string | number | symbol, D extends string> = S extends `${infer H}${D}${infer T}` ? [H, ...Split<Cast<T, string>, D>] : [S];
|
|
42
|
+
export type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
43
|
+
/**
|
|
44
|
+
* removes string index signature from Record
|
|
45
|
+
*/
|
|
46
|
+
export type ToSealedRecord<R extends Record<string, any>> = {
|
|
47
|
+
[K in keyof R as string extends K ? never : K]: R[K];
|
|
48
|
+
};
|
|
49
|
+
type NormalizeTuple<T> = T extends [...infer A] ? {
|
|
50
|
+
[K in keyof A]: Normalize<A[K]>;
|
|
51
|
+
} : never;
|
|
52
|
+
type NormalizeObject<T extends object> = T extends infer O ? {
|
|
53
|
+
[K in keyof O]: Normalize<O[K]>;
|
|
54
|
+
} : never;
|
|
55
|
+
export type Normalize<T> = T extends (...args: infer A) => infer R ? (...args: NormalizeTuple<A>) => Normalize<R> : T extends Array<infer E> ? Array<Normalize<E>> : T extends ReadonlyArray<infer E> ? ReadonlyArray<Normalize<E>> : T extends Promise<infer R> ? Promise<Normalize<R>> : T extends Buffer ? Buffer : T extends object ? NormalizeObject<T> : T;
|
|
56
|
+
type DeepPartialObject<T extends object> = T extends infer O ? {
|
|
57
|
+
[K in keyof O]?: DeepPartial<O[K]>;
|
|
58
|
+
} : never;
|
|
59
|
+
export type DeepPartial<T> = T extends (...args: infer A) => infer R ? (...args: DeepPartial<A>) => DeepPartial<R> : T extends Array<infer E> ? Array<DeepPartial<E>> : T extends ReadonlyArray<infer E> ? ReadonlyArray<DeepPartial<E>> : T extends Promise<infer R> ? Promise<DeepPartial<R>> : T extends Buffer ? Buffer : T extends object ? DeepPartialObject<T> : T;
|
|
60
|
+
export type SafeOmit<T, K extends keyof T> = Omit<T, K>;
|
|
61
|
+
export type StringKeys<T> = Extract<keyof T, string>;
|
|
62
|
+
export type DistributivePick<T, K extends keyof T> = T extends any ? Pick<T, K> : never;
|
|
63
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Package } from './package';
|
|
2
|
+
import { PluginDefinition } from './plugin/definition';
|
|
3
|
+
type GenericPackage = Exclude<Package, PluginDefinition>;
|
|
4
|
+
/**
|
|
5
|
+
* Returns the major version range for a given package.
|
|
6
|
+
* Version utility helpers are only intended to be used with plugins.
|
|
7
|
+
**/
|
|
8
|
+
export declare function allWithinMajorOf<T extends GenericPackage>(pkg: T): T & {
|
|
9
|
+
version: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Returns the minor version range for a given package.
|
|
13
|
+
* Version utility helpers are only intended to be used with plugins.
|
|
14
|
+
**/
|
|
15
|
+
export declare function allWithinMinorOf<T extends GenericPackage>(pkg: T): T & {
|
|
16
|
+
version: string;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const SDK_VERSION: string;
|
package/dist/zui.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import '@holocronlab/botruntime-zui';
|
|
2
|
+
declare module '@holocronlab/botruntime-zui' {
|
|
3
|
+
namespace z {
|
|
4
|
+
type GenericZuiSchema<A extends Record<string, z.ZodType> = Record<string, z.ZodType>, R extends z.ZodType = z.ZodType> = (typeArguments: A) => R;
|
|
5
|
+
type ZuiObjectSchema = z.ZodObject | z.ZodRecord;
|
|
6
|
+
type ZuiObjectOrRefSchema = ZuiObjectSchema | z.ZodRef;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export { z } from '@holocronlab/botruntime-zui';
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@holocronlab/botruntime-sdk",
|
|
3
|
+
"version": "6.13.3",
|
|
4
|
+
"description": "SDK for building bots and integrations on botruntime",
|
|
5
|
+
"main": "./dist/index.cjs",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"readme.md",
|
|
11
|
+
"LICENSE"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public",
|
|
15
|
+
"registry": "https://registry.npmjs.org"
|
|
16
|
+
},
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "https://github.com/HolocronLab/botruntime-packages",
|
|
20
|
+
"directory": "packages/botruntime-sdk"
|
|
21
|
+
},
|
|
22
|
+
"scripts": {
|
|
23
|
+
"check:type": "tsc -p ./tsconfig.json --noEmit",
|
|
24
|
+
"build:type": "tsc -p ./tsconfig.package.json --emitDeclarationOnly --declaration",
|
|
25
|
+
"build:browser": "ts-node -T ./build.ts --browser",
|
|
26
|
+
"build:node": "ts-node -T ./build.ts --node",
|
|
27
|
+
"build": "npm run build:type && npm run build:node && npm run build:browser",
|
|
28
|
+
"test": "vitest --run"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [],
|
|
31
|
+
"author": "HolocronLab",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@holocronlab/botruntime-client": "^1.46.3",
|
|
35
|
+
"@holocronlab/botruntime-zui": "^2.3.0",
|
|
36
|
+
"browser-or-node": "^2.1.1",
|
|
37
|
+
"semver": "^7.3.8"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^22.16.4",
|
|
41
|
+
"@types/semver": "^7.3.11",
|
|
42
|
+
"esbuild": "^0.25.10",
|
|
43
|
+
"esbuild-plugin-polyfill-node": "^0.3.0",
|
|
44
|
+
"ts-node": "^10.9.2",
|
|
45
|
+
"typescript": "^6.0.3",
|
|
46
|
+
"vitest": "^2.1.8"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"esbuild": "^0.16.12"
|
|
50
|
+
},
|
|
51
|
+
"peerDependenciesMeta": {
|
|
52
|
+
"esbuild": {
|
|
53
|
+
"optional": true
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"engines": {
|
|
57
|
+
"node": ">=18.0.0"
|
|
58
|
+
}
|
|
59
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Botruntime SDK
|
|
2
|
+
|
|
3
|
+
SDK for TypeScript. Made for building bots, plugins and integrations as code on botruntime.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install --save @holocronlab/botruntime-sdk # for npm
|
|
9
|
+
yarn add @holocronlab/botruntime-sdk # for yarn
|
|
10
|
+
pnpm add @holocronlab/botruntime-sdk # for pnpm
|
|
11
|
+
```
|