@botonic/core 0.47.0 → 0.48.1
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/lib/cjs/core-bot.d.ts +2 -0
- package/lib/cjs/core-bot.js +39 -1
- package/lib/cjs/core-bot.js.map +1 -1
- package/lib/cjs/models/legacy-types.d.ts +19 -0
- package/lib/cjs/models/legacy-types.js.map +1 -1
- package/lib/cjs/testing/index.d.ts +91 -0
- package/lib/cjs/testing/index.js +196 -0
- package/lib/cjs/testing/index.js.map +1 -0
- package/lib/esm/core-bot.d.ts +2 -0
- package/lib/esm/core-bot.js +39 -1
- package/lib/esm/core-bot.js.map +1 -1
- package/lib/esm/models/legacy-types.d.ts +19 -0
- package/lib/esm/models/legacy-types.js.map +1 -1
- package/lib/esm/testing/index.d.ts +91 -0
- package/lib/esm/testing/index.js +196 -0
- package/lib/esm/testing/index.js.map +1 -0
- package/package.json +19 -2
- package/src/core-bot.ts +47 -2
- package/src/models/legacy-types.ts +21 -0
- package/src/testing/index.ts +311 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { type BotContext, type BotRequest, type BotSecrets, type BotSettings, type ContactInfo, type Input, type ProviderType, type ResolvedPlugins, type Session, type SessionUser } from '../models';
|
|
2
|
+
export declare const TEST_DEFAULTS: {
|
|
3
|
+
HUBTYPE_API_URL: string;
|
|
4
|
+
STATIC_URL: string;
|
|
5
|
+
LITELLM_API_URL: string;
|
|
6
|
+
AZURE_OPENAI_API_BASE: string;
|
|
7
|
+
AZURE_OPENAI_API_VERSION: string;
|
|
8
|
+
LANGUAGE_DETECTION_ENABLED: boolean;
|
|
9
|
+
HUBTYPE_ACCESS_TOKEN: string;
|
|
10
|
+
LITELLM_API_KEY: string;
|
|
11
|
+
AZURE_OPENAI_API_KEY: string;
|
|
12
|
+
ACCESS_TOKEN: string;
|
|
13
|
+
HUBTYPE_API_HOST: string;
|
|
14
|
+
FLOW_THREAD_ID: string;
|
|
15
|
+
BOT_ID: string;
|
|
16
|
+
USER_ID: string;
|
|
17
|
+
ORG_ID: string;
|
|
18
|
+
ORG_NAME: string;
|
|
19
|
+
PROVIDER: ProviderType;
|
|
20
|
+
LOCALE: string;
|
|
21
|
+
COUNTRY: string;
|
|
22
|
+
BOT_INTERACTION_ID: string;
|
|
23
|
+
MESSAGE_ID: string;
|
|
24
|
+
LAST_ROUTE_PATH: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function createTestSettings(overrides?: Partial<BotSettings>): BotSettings;
|
|
27
|
+
export declare function createTestSecrets(overrides?: Partial<BotSecrets>): BotSecrets;
|
|
28
|
+
export interface TestUserOptions {
|
|
29
|
+
id?: string;
|
|
30
|
+
provider?: ProviderType;
|
|
31
|
+
locale?: string;
|
|
32
|
+
country?: string;
|
|
33
|
+
systemLocale?: string;
|
|
34
|
+
contactInfo?: ContactInfo[];
|
|
35
|
+
extraData?: Record<string, any>;
|
|
36
|
+
}
|
|
37
|
+
export declare function createTestSessionUser(options?: TestUserOptions): SessionUser<Record<string, any>>;
|
|
38
|
+
export interface TestSessionOptions {
|
|
39
|
+
user?: TestUserOptions;
|
|
40
|
+
botId?: string;
|
|
41
|
+
organization?: string;
|
|
42
|
+
organizationId?: string;
|
|
43
|
+
isFirstInteraction?: boolean;
|
|
44
|
+
isTestIntegration?: boolean;
|
|
45
|
+
accessToken?: string;
|
|
46
|
+
hubtypeApi?: string;
|
|
47
|
+
flowThreadId?: string;
|
|
48
|
+
retries?: number;
|
|
49
|
+
shadowing?: boolean;
|
|
50
|
+
hubtypeCaseId?: string;
|
|
51
|
+
captureUserInputNodeId?: string;
|
|
52
|
+
}
|
|
53
|
+
export declare function createTestSession(options?: TestSessionOptions): Session<Record<string, any>>;
|
|
54
|
+
export interface TestInputOptions {
|
|
55
|
+
type?: Input['type'];
|
|
56
|
+
data?: string;
|
|
57
|
+
text?: string;
|
|
58
|
+
payload?: string;
|
|
59
|
+
src?: string;
|
|
60
|
+
botInteractionId?: string;
|
|
61
|
+
messageId?: string;
|
|
62
|
+
context?: Input['context'];
|
|
63
|
+
transcript?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare function createTestInput(options?: TestInputOptions): Input;
|
|
66
|
+
export interface TestBotRequestOptions {
|
|
67
|
+
input?: TestInputOptions | Input;
|
|
68
|
+
session?: TestSessionOptions | Session;
|
|
69
|
+
lastRoutePath?: string;
|
|
70
|
+
settings?: Partial<BotSettings> | BotSettings;
|
|
71
|
+
secrets?: Partial<BotSecrets> | BotSecrets;
|
|
72
|
+
}
|
|
73
|
+
export declare function createTestBotRequest(options?: TestBotRequestOptions): BotRequest;
|
|
74
|
+
export interface TestBotContextOptions<TPlugins extends ResolvedPlugins = ResolvedPlugins> extends TestBotRequestOptions {
|
|
75
|
+
plugins?: TPlugins;
|
|
76
|
+
params?: Record<string, string>;
|
|
77
|
+
defaultDelay?: number;
|
|
78
|
+
defaultTyping?: number;
|
|
79
|
+
}
|
|
80
|
+
export declare function createTestBotContext<TPlugins extends ResolvedPlugins = ResolvedPlugins>(options?: TestBotContextOptions<TPlugins>): BotContext<TPlugins>;
|
|
81
|
+
/**
|
|
82
|
+
* Alias for `createTestBotContext` typed as `PluginPreRequest`.
|
|
83
|
+
* PluginPreRequest === BotContext in @botonic/core.
|
|
84
|
+
*/
|
|
85
|
+
export declare const createTestPluginPreRequest: typeof createTestBotContext;
|
|
86
|
+
export interface TestPluginPostRequestOptions<TPlugins extends ResolvedPlugins = ResolvedPlugins> extends TestBotContextOptions<TPlugins> {
|
|
87
|
+
response?: string | null;
|
|
88
|
+
}
|
|
89
|
+
export declare function createTestPluginPostRequest<TPlugins extends ResolvedPlugins = ResolvedPlugins>(options?: TestPluginPostRequestOptions<TPlugins>): BotContext<TPlugins> & {
|
|
90
|
+
response: string | null;
|
|
91
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTestPluginPreRequest = exports.TEST_DEFAULTS = void 0;
|
|
4
|
+
exports.createTestSettings = createTestSettings;
|
|
5
|
+
exports.createTestSecrets = createTestSecrets;
|
|
6
|
+
exports.createTestSessionUser = createTestSessionUser;
|
|
7
|
+
exports.createTestSession = createTestSession;
|
|
8
|
+
exports.createTestInput = createTestInput;
|
|
9
|
+
exports.createTestBotRequest = createTestBotRequest;
|
|
10
|
+
exports.createTestBotContext = createTestBotContext;
|
|
11
|
+
exports.createTestPluginPostRequest = createTestPluginPostRequest;
|
|
12
|
+
const models_1 = require("../models");
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Default values
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
exports.TEST_DEFAULTS = {
|
|
17
|
+
HUBTYPE_API_URL: 'https://api.hubtype.com',
|
|
18
|
+
STATIC_URL: 'https://static.hubtype.com',
|
|
19
|
+
LITELLM_API_URL: 'https://api.litellm.com',
|
|
20
|
+
AZURE_OPENAI_API_BASE: 'https://api.openai.com',
|
|
21
|
+
AZURE_OPENAI_API_VERSION: '2026-02-01',
|
|
22
|
+
LANGUAGE_DETECTION_ENABLED: true,
|
|
23
|
+
HUBTYPE_ACCESS_TOKEN: 'testAccessToken', // pragma: allowlist secret
|
|
24
|
+
LITELLM_API_KEY: 'testLiteLLMAPIKey', // pragma: allowlist secret
|
|
25
|
+
AZURE_OPENAI_API_KEY: 'testAzureOpenAIAPIKey', // pragma: allowlist secret
|
|
26
|
+
ACCESS_TOKEN: 'fake_access_token',
|
|
27
|
+
HUBTYPE_API_HOST: 'https://api.hubtype.com',
|
|
28
|
+
FLOW_THREAD_ID: 'testFlowThreadId',
|
|
29
|
+
BOT_ID: 'testBotId',
|
|
30
|
+
USER_ID: 'testUserId',
|
|
31
|
+
ORG_ID: 'testOrgId',
|
|
32
|
+
ORG_NAME: 'testOrg',
|
|
33
|
+
PROVIDER: models_1.PROVIDER.WEBCHAT,
|
|
34
|
+
LOCALE: 'en',
|
|
35
|
+
COUNTRY: 'US',
|
|
36
|
+
BOT_INTERACTION_ID: 'testInteractionId',
|
|
37
|
+
MESSAGE_ID: 'testMessageId',
|
|
38
|
+
LAST_ROUTE_PATH: '',
|
|
39
|
+
};
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Leaf factories
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function createTestSettings(overrides) {
|
|
44
|
+
return {
|
|
45
|
+
HUBTYPE_API_URL: exports.TEST_DEFAULTS.HUBTYPE_API_URL,
|
|
46
|
+
STATIC_URL: exports.TEST_DEFAULTS.STATIC_URL,
|
|
47
|
+
LITELLM_API_URL: exports.TEST_DEFAULTS.LITELLM_API_URL,
|
|
48
|
+
AZURE_OPENAI_API_BASE: exports.TEST_DEFAULTS.AZURE_OPENAI_API_BASE,
|
|
49
|
+
AZURE_OPENAI_API_VERSION: exports.TEST_DEFAULTS.AZURE_OPENAI_API_VERSION,
|
|
50
|
+
LANGUAGE_DETECTION_ENABLED: exports.TEST_DEFAULTS.LANGUAGE_DETECTION_ENABLED,
|
|
51
|
+
CUSTOM_SHORT_URL_HOST: null,
|
|
52
|
+
custom: {},
|
|
53
|
+
...overrides,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function createTestSecrets(overrides) {
|
|
57
|
+
return {
|
|
58
|
+
HUBTYPE_ACCESS_TOKEN: exports.TEST_DEFAULTS.HUBTYPE_ACCESS_TOKEN,
|
|
59
|
+
LITELLM_API_KEY: exports.TEST_DEFAULTS.LITELLM_API_KEY,
|
|
60
|
+
AZURE_OPENAI_API_KEY: exports.TEST_DEFAULTS.AZURE_OPENAI_API_KEY,
|
|
61
|
+
custom: {},
|
|
62
|
+
...overrides,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function createTestSessionUser(options) {
|
|
66
|
+
const locale = options?.locale ?? exports.TEST_DEFAULTS.LOCALE;
|
|
67
|
+
const country = options?.country ?? exports.TEST_DEFAULTS.COUNTRY;
|
|
68
|
+
return {
|
|
69
|
+
id: options?.id ?? exports.TEST_DEFAULTS.USER_ID,
|
|
70
|
+
provider: options?.provider ?? exports.TEST_DEFAULTS.PROVIDER,
|
|
71
|
+
locale,
|
|
72
|
+
country,
|
|
73
|
+
system_locale: options?.systemLocale ?? locale,
|
|
74
|
+
contact_info: options?.contactInfo ?? [],
|
|
75
|
+
extra_data: options?.extraData ?? {},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function createTestSession(options) {
|
|
79
|
+
return {
|
|
80
|
+
bot: { id: options?.botId ?? exports.TEST_DEFAULTS.BOT_ID },
|
|
81
|
+
user: createTestSessionUser(options?.user),
|
|
82
|
+
organization: options?.organization ?? exports.TEST_DEFAULTS.ORG_NAME,
|
|
83
|
+
organization_id: options?.organizationId ?? exports.TEST_DEFAULTS.ORG_ID,
|
|
84
|
+
is_first_interaction: options?.isFirstInteraction ?? false,
|
|
85
|
+
is_test_integration: options?.isTestIntegration ?? false,
|
|
86
|
+
_access_token: options?.accessToken ?? exports.TEST_DEFAULTS.ACCESS_TOKEN,
|
|
87
|
+
_hubtype_api: options?.hubtypeApi ?? exports.TEST_DEFAULTS.HUBTYPE_API_HOST,
|
|
88
|
+
flow_thread_id: options?.flowThreadId ?? exports.TEST_DEFAULTS.FLOW_THREAD_ID,
|
|
89
|
+
__retries: options?.retries ?? 0,
|
|
90
|
+
_shadowing: options?.shadowing,
|
|
91
|
+
_hubtype_case_id: options?.hubtypeCaseId,
|
|
92
|
+
capture_user_input: options?.captureUserInputNodeId
|
|
93
|
+
? { node_id: options.captureUserInputNodeId }
|
|
94
|
+
: undefined,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function createTestInput(options) {
|
|
98
|
+
return {
|
|
99
|
+
type: options?.type ?? models_1.INPUT.TEXT,
|
|
100
|
+
data: options?.data,
|
|
101
|
+
text: options?.text,
|
|
102
|
+
payload: options?.payload,
|
|
103
|
+
src: options?.src,
|
|
104
|
+
transcript: options?.transcript,
|
|
105
|
+
context: options?.context,
|
|
106
|
+
bot_interaction_id: options?.botInteractionId ?? exports.TEST_DEFAULTS.BOT_INTERACTION_ID,
|
|
107
|
+
message_id: options?.messageId ?? exports.TEST_DEFAULTS.MESSAGE_ID,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function isFullInput(v) {
|
|
111
|
+
return 'bot_interaction_id' in v && 'message_id' in v;
|
|
112
|
+
}
|
|
113
|
+
function isFullSession(v) {
|
|
114
|
+
return 'bot' in v && '__retries' in v;
|
|
115
|
+
}
|
|
116
|
+
function isFullSettings(v) {
|
|
117
|
+
return ('HUBTYPE_API_URL' in v &&
|
|
118
|
+
'STATIC_URL' in v &&
|
|
119
|
+
'LITELLM_API_URL' in v &&
|
|
120
|
+
'AZURE_OPENAI_API_BASE' in v &&
|
|
121
|
+
'AZURE_OPENAI_API_VERSION' in v &&
|
|
122
|
+
'LANGUAGE_DETECTION_ENABLED' in v &&
|
|
123
|
+
'CUSTOM_SHORT_URL_HOST' in v &&
|
|
124
|
+
'custom' in v);
|
|
125
|
+
}
|
|
126
|
+
function isFullSecrets(v) {
|
|
127
|
+
return ('HUBTYPE_ACCESS_TOKEN' in v &&
|
|
128
|
+
'LITELLM_API_KEY' in v &&
|
|
129
|
+
'AZURE_OPENAI_API_KEY' in v &&
|
|
130
|
+
'custom' in v);
|
|
131
|
+
}
|
|
132
|
+
function createTestBotRequest(options) {
|
|
133
|
+
const input = options?.input == null
|
|
134
|
+
? createTestInput()
|
|
135
|
+
: isFullInput(options.input)
|
|
136
|
+
? options.input
|
|
137
|
+
: createTestInput(options.input);
|
|
138
|
+
const session = options?.session == null
|
|
139
|
+
? createTestSession()
|
|
140
|
+
: isFullSession(options.session)
|
|
141
|
+
? options.session
|
|
142
|
+
: createTestSession(options.session);
|
|
143
|
+
const settings = options?.settings == null
|
|
144
|
+
? createTestSettings()
|
|
145
|
+
: isFullSettings(options.settings)
|
|
146
|
+
? options.settings
|
|
147
|
+
: createTestSettings(options.settings);
|
|
148
|
+
const secrets = options?.secrets == null
|
|
149
|
+
? createTestSecrets()
|
|
150
|
+
: isFullSecrets(options.secrets)
|
|
151
|
+
? options.secrets
|
|
152
|
+
: createTestSecrets(options.secrets);
|
|
153
|
+
return {
|
|
154
|
+
input,
|
|
155
|
+
session,
|
|
156
|
+
lastRoutePath: options?.lastRoutePath ?? exports.TEST_DEFAULTS.LAST_ROUTE_PATH,
|
|
157
|
+
settings,
|
|
158
|
+
secrets,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function createTestBotContext(options) {
|
|
162
|
+
const request = createTestBotRequest(options);
|
|
163
|
+
const sessionForLocale = options?.session == null
|
|
164
|
+
? createTestSession()
|
|
165
|
+
: isFullSession(options.session)
|
|
166
|
+
? options.session
|
|
167
|
+
: createTestSession(options.session);
|
|
168
|
+
const locale = sessionForLocale.user.locale;
|
|
169
|
+
const country = sessionForLocale.user.country;
|
|
170
|
+
const systemLocale = sessionForLocale.user.system_locale;
|
|
171
|
+
return {
|
|
172
|
+
...request,
|
|
173
|
+
plugins: options?.plugins ?? {},
|
|
174
|
+
params: options?.params ?? {},
|
|
175
|
+
defaultDelay: options?.defaultDelay ?? 0,
|
|
176
|
+
defaultTyping: options?.defaultTyping ?? 0,
|
|
177
|
+
getUserLocale: () => locale,
|
|
178
|
+
getUserCountry: () => country,
|
|
179
|
+
getSystemLocale: () => systemLocale,
|
|
180
|
+
setUserLocale: () => undefined,
|
|
181
|
+
setUserCountry: () => undefined,
|
|
182
|
+
setSystemLocale: () => undefined,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Alias for `createTestBotContext` typed as `PluginPreRequest`.
|
|
187
|
+
* PluginPreRequest === BotContext in @botonic/core.
|
|
188
|
+
*/
|
|
189
|
+
exports.createTestPluginPreRequest = createTestBotContext;
|
|
190
|
+
function createTestPluginPostRequest(options) {
|
|
191
|
+
return {
|
|
192
|
+
...createTestBotContext(options),
|
|
193
|
+
response: options?.response ?? null,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/testing/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.48.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Build Chatbots using React",
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
7
7
|
"module": "./lib/esm/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"require": "./lib/cjs/index.js",
|
|
11
|
+
"import": "./lib/esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./testing": {
|
|
14
|
+
"require": "./lib/cjs/testing/index.js",
|
|
15
|
+
"import": "./lib/esm/testing/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
8
18
|
"scripts": {
|
|
9
19
|
"test": "../../node_modules/.bin/jest --coverage",
|
|
10
20
|
"prepublishOnly": "rm -rf lib && npm i && npm run build",
|
|
@@ -29,9 +39,16 @@
|
|
|
29
39
|
"index.d.ts",
|
|
30
40
|
"README.md"
|
|
31
41
|
],
|
|
42
|
+
"typesVersions": {
|
|
43
|
+
"*": {
|
|
44
|
+
"testing": [
|
|
45
|
+
"./lib/cjs/testing/index.d.ts"
|
|
46
|
+
]
|
|
47
|
+
}
|
|
48
|
+
},
|
|
32
49
|
"dependencies": {
|
|
33
50
|
"@babel/plugin-transform-runtime": "^7.25.9",
|
|
34
|
-
"axios": "^1.
|
|
51
|
+
"axios": "^1.15.2",
|
|
35
52
|
"pako": "^2.1.0",
|
|
36
53
|
"process": "^0.11.10",
|
|
37
54
|
"pusher-js": "^5.1.1"
|
package/src/core-bot.ts
CHANGED
|
@@ -4,6 +4,8 @@ import {
|
|
|
4
4
|
BotonicAction,
|
|
5
5
|
type BotRequest,
|
|
6
6
|
type BotResponse,
|
|
7
|
+
type BotSecrets,
|
|
8
|
+
type BotSettings,
|
|
7
9
|
INPUT,
|
|
8
10
|
type Input,
|
|
9
11
|
type ProcessInputResult,
|
|
@@ -98,6 +100,9 @@ export class CoreBot {
|
|
|
98
100
|
|
|
99
101
|
private getBotContext(request: BotRequest): BotContext {
|
|
100
102
|
const { input, session, lastRoutePath } = request
|
|
103
|
+
const settings = this.getSettings(request)
|
|
104
|
+
const secrets = this.getSecrets(request)
|
|
105
|
+
|
|
101
106
|
return {
|
|
102
107
|
input,
|
|
103
108
|
session,
|
|
@@ -114,7 +119,41 @@ export class CoreBot {
|
|
|
114
119
|
setUserLocale: (locale: string) => this.setUserLocale(locale, session),
|
|
115
120
|
setSystemLocale: (locale: string) =>
|
|
116
121
|
this.setSystemLocale(locale, session),
|
|
122
|
+
settings,
|
|
123
|
+
secrets,
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
private getSettings(request: BotRequest): BotSettings {
|
|
128
|
+
if (!request.settings) {
|
|
129
|
+
// This only happens in local development
|
|
130
|
+
return {
|
|
131
|
+
HUBTYPE_API_URL: '',
|
|
132
|
+
STATIC_URL: '',
|
|
133
|
+
LITELLM_API_URL: '',
|
|
134
|
+
AZURE_OPENAI_API_BASE: '',
|
|
135
|
+
AZURE_OPENAI_API_VERSION: '',
|
|
136
|
+
CUSTOM_SHORT_URL_HOST: '',
|
|
137
|
+
LANGUAGE_DETECTION_ENABLED: false,
|
|
138
|
+
custom: {},
|
|
139
|
+
}
|
|
117
140
|
}
|
|
141
|
+
|
|
142
|
+
return request.settings
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private getSecrets(request: BotRequest): BotSecrets {
|
|
146
|
+
if (!request.secrets) {
|
|
147
|
+
// This only happens in local development
|
|
148
|
+
return {
|
|
149
|
+
HUBTYPE_ACCESS_TOKEN: '',
|
|
150
|
+
LITELLM_API_KEY: '',
|
|
151
|
+
AZURE_OPENAI_API_KEY: '',
|
|
152
|
+
custom: {},
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return request.secrets
|
|
118
157
|
}
|
|
119
158
|
|
|
120
159
|
private async runInput(botContext: BotContext): Promise<BotResponse> {
|
|
@@ -126,6 +165,8 @@ export class CoreBot {
|
|
|
126
165
|
input: botContext.input,
|
|
127
166
|
session: botContext.session,
|
|
128
167
|
lastRoutePath: botContext.lastRoutePath,
|
|
168
|
+
settings: botContext.settings,
|
|
169
|
+
secrets: botContext.secrets,
|
|
129
170
|
response: [],
|
|
130
171
|
}
|
|
131
172
|
}
|
|
@@ -145,9 +186,11 @@ export class CoreBot {
|
|
|
145
186
|
|
|
146
187
|
return {
|
|
147
188
|
input: botContext.input,
|
|
148
|
-
response,
|
|
149
189
|
session: botContext.session,
|
|
150
190
|
lastRoutePath: botContext.lastRoutePath,
|
|
191
|
+
settings: botContext.settings,
|
|
192
|
+
secrets: botContext.secrets,
|
|
193
|
+
response,
|
|
151
194
|
}
|
|
152
195
|
}
|
|
153
196
|
|
|
@@ -247,11 +290,13 @@ export class CoreBot {
|
|
|
247
290
|
|
|
248
291
|
const followUp = await this.runInput(botContext)
|
|
249
292
|
|
|
250
|
-
const response = {
|
|
293
|
+
const response: BotResponse = {
|
|
251
294
|
input: followUp.input,
|
|
252
295
|
response: previousResponse.response.concat(followUp.response),
|
|
253
296
|
session: botContext.session,
|
|
254
297
|
lastRoutePath: followUp.lastRoutePath,
|
|
298
|
+
settings: followUp.settings,
|
|
299
|
+
secrets: followUp.secrets,
|
|
255
300
|
}
|
|
256
301
|
|
|
257
302
|
// Recursive call to handle multiple bot actions in a row
|
|
@@ -241,6 +241,7 @@ export interface SessionUser<TExtraData = any> {
|
|
|
241
241
|
locale: string
|
|
242
242
|
country: string
|
|
243
243
|
system_locale: string
|
|
244
|
+
system_locale_updated?: boolean
|
|
244
245
|
}
|
|
245
246
|
|
|
246
247
|
export interface HubtypeCaseContactReason {
|
|
@@ -334,6 +335,26 @@ export interface BotRequest<TExtraData = any> {
|
|
|
334
335
|
input: Input
|
|
335
336
|
lastRoutePath: RoutePath
|
|
336
337
|
session: Session<TExtraData>
|
|
338
|
+
settings: BotSettings
|
|
339
|
+
secrets: BotSecrets
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface BotSettings {
|
|
343
|
+
HUBTYPE_API_URL: string
|
|
344
|
+
STATIC_URL: string
|
|
345
|
+
LITELLM_API_URL: string
|
|
346
|
+
AZURE_OPENAI_API_BASE: string
|
|
347
|
+
AZURE_OPENAI_API_VERSION: string
|
|
348
|
+
LANGUAGE_DETECTION_ENABLED?: boolean
|
|
349
|
+
CUSTOM_SHORT_URL_HOST: string | null
|
|
350
|
+
custom: Record<string, any>
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export interface BotSecrets {
|
|
354
|
+
HUBTYPE_ACCESS_TOKEN: string
|
|
355
|
+
LITELLM_API_KEY: string
|
|
356
|
+
AZURE_OPENAI_API_KEY: string
|
|
357
|
+
custom: Record<string, any>
|
|
337
358
|
}
|
|
338
359
|
|
|
339
360
|
export interface BotContext<
|