@botonic/core 0.46.1 → 0.48.0

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.
@@ -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":";;;AAgDA,gDAcC;AAED,8CAQC;AAYD,sDAcC;AAkBD,8CAoBC;AAcD,0CAaC;AA8CD,oDAsCC;AAWD,oDA6BC;AAcD,kEASC;AAtTD,sCAakB;AAElB,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAEjE,QAAA,aAAa,GAAG;IAC3B,eAAe,EAAE,yBAAyB;IAC1C,UAAU,EAAE,4BAA4B;IACxC,eAAe,EAAE,yBAAyB;IAC1C,qBAAqB,EAAE,wBAAwB;IAC/C,wBAAwB,EAAE,YAAY;IACtC,0BAA0B,EAAE,IAAI;IAChC,oBAAoB,EAAE,iBAAiB,EAAE,2BAA2B;IACpE,eAAe,EAAE,mBAAmB,EAAE,2BAA2B;IACjE,oBAAoB,EAAE,uBAAuB,EAAE,2BAA2B;IAC1E,YAAY,EAAE,mBAAmB;IACjC,gBAAgB,EAAE,yBAAyB;IAC3C,cAAc,EAAE,kBAAkB;IAClC,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,SAAS;IACnB,QAAQ,EAAE,iBAAQ,CAAC,OAAuB;IAC1C,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,IAAI;IACb,kBAAkB,EAAE,mBAAmB;IACvC,UAAU,EAAE,eAAe;IAC3B,eAAe,EAAE,EAAE;CACpB,CAAA;AAED,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAgB,kBAAkB,CAChC,SAAgC;IAEhC,OAAO;QACL,eAAe,EAAE,qBAAa,CAAC,eAAe;QAC9C,UAAU,EAAE,qBAAa,CAAC,UAAU;QACpC,eAAe,EAAE,qBAAa,CAAC,eAAe;QAC9C,qBAAqB,EAAE,qBAAa,CAAC,qBAAqB;QAC1D,wBAAwB,EAAE,qBAAa,CAAC,wBAAwB;QAChE,0BAA0B,EAAE,qBAAa,CAAC,0BAA0B;QACpE,qBAAqB,EAAE,IAAI;QAC3B,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,SAAgB,iBAAiB,CAAC,SAA+B;IAC/D,OAAO;QACL,oBAAoB,EAAE,qBAAa,CAAC,oBAAoB;QACxD,eAAe,EAAE,qBAAa,CAAC,eAAe;QAC9C,oBAAoB,EAAE,qBAAa,CAAC,oBAAoB;QACxD,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAYD,SAAgB,qBAAqB,CACnC,OAAyB;IAEzB,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,qBAAa,CAAC,MAAM,CAAA;IACtD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,qBAAa,CAAC,OAAO,CAAA;IACzD,OAAO;QACL,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,qBAAa,CAAC,OAAO;QACxC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,qBAAa,CAAC,QAAQ;QACrD,MAAM;QACN,OAAO;QACP,aAAa,EAAE,OAAO,EAAE,YAAY,IAAI,MAAM;QAC9C,YAAY,EAAE,OAAO,EAAE,WAAW,IAAI,EAAE;QACxC,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE;KACrC,CAAA;AACH,CAAC;AAkBD,SAAgB,iBAAiB,CAC/B,OAA4B;IAE5B,OAAO;QACL,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,IAAI,qBAAa,CAAC,MAAM,EAAE;QACnD,IAAI,EAAE,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC;QAC1C,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,qBAAa,CAAC,QAAQ;QAC7D,eAAe,EAAE,OAAO,EAAE,cAAc,IAAI,qBAAa,CAAC,MAAM;QAChE,oBAAoB,EAAE,OAAO,EAAE,kBAAkB,IAAI,KAAK;QAC1D,mBAAmB,EAAE,OAAO,EAAE,iBAAiB,IAAI,KAAK;QACxD,aAAa,EAAE,OAAO,EAAE,WAAW,IAAI,qBAAa,CAAC,YAAY;QACjE,YAAY,EAAE,OAAO,EAAE,UAAU,IAAI,qBAAa,CAAC,gBAAgB;QACnE,cAAc,EAAE,OAAO,EAAE,YAAY,IAAI,qBAAa,CAAC,cAAc;QACrE,SAAS,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC;QAChC,UAAU,EAAE,OAAO,EAAE,SAAS;QAC9B,gBAAgB,EAAE,OAAO,EAAE,aAAa;QACxC,kBAAkB,EAAE,OAAO,EAAE,sBAAsB;YACjD,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,sBAAsB,EAAE;YAC7C,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAcD,SAAgB,eAAe,CAAC,OAA0B;IACxD,OAAO;QACL,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,cAAK,CAAC,IAAI;QACjC,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,IAAI,EAAE,OAAO,EAAE,IAAI;QACnB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,GAAG,EAAE,OAAO,EAAE,GAAG;QACjB,UAAU,EAAE,OAAO,EAAE,UAAU;QAC/B,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,kBAAkB,EAChB,OAAO,EAAE,gBAAgB,IAAI,qBAAa,CAAC,kBAAkB;QAC/D,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,qBAAa,CAAC,UAAU;KAC3D,CAAA;AACH,CAAC;AAcD,SAAS,WAAW,CAAC,CAA2B;IAC9C,OAAO,oBAAoB,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,CAAA;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,CAA+B;IACpD,OAAO,KAAK,IAAI,CAAC,IAAI,WAAW,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,cAAc,CACrB,CAAqC;IAErC,OAAO,CACL,iBAAiB,IAAI,CAAC;QACtB,YAAY,IAAI,CAAC;QACjB,iBAAiB,IAAI,CAAC;QACtB,uBAAuB,IAAI,CAAC;QAC5B,0BAA0B,IAAI,CAAC;QAC/B,4BAA4B,IAAI,CAAC;QACjC,uBAAuB,IAAI,CAAC;QAC5B,QAAQ,IAAI,CAAC,CACd,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,CAAmC;IACxD,OAAO,CACL,sBAAsB,IAAI,CAAC;QAC3B,iBAAiB,IAAI,CAAC;QACtB,sBAAsB,IAAI,CAAC;QAC3B,QAAQ,IAAI,CAAC,CACd,CAAA;AACH,CAAC;AAED,SAAgB,oBAAoB,CAClC,OAA+B;IAE/B,MAAM,KAAK,GACT,OAAO,EAAE,KAAK,IAAI,IAAI;QACpB,CAAC,CAAC,eAAe,EAAE;QACnB,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,OAAO,CAAC,KAAK;YACf,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAEtC,MAAM,OAAO,GACX,OAAO,EAAE,OAAO,IAAI,IAAI;QACtB,CAAC,CAAC,iBAAiB,EAAE;QACrB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,MAAM,QAAQ,GACZ,OAAO,EAAE,QAAQ,IAAI,IAAI;QACvB,CAAC,CAAC,kBAAkB,EAAE;QACtB,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChC,CAAC,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IAE5C,MAAM,OAAO,GACX,OAAO,EAAE,OAAO,IAAI,IAAI;QACtB,CAAC,CAAC,iBAAiB,EAAE;QACrB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,OAAO;QACL,KAAK;QACL,OAAO;QACP,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,qBAAa,CAAC,eAAe;QACtE,QAAQ;QACR,OAAO;KACR,CAAA;AACH,CAAC;AAWD,SAAgB,oBAAoB,CAElC,OAAyC;IACzC,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAE7C,MAAM,gBAAgB,GACpB,OAAO,EAAE,OAAO,IAAI,IAAI;QACtB,CAAC,CAAC,iBAAiB,EAAE;QACrB,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;YAC9B,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAE1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAA;IAC3C,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAA;IAC7C,MAAM,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAA;IAExD,OAAO;QACL,GAAG,OAAO;QACV,OAAO,EAAE,OAAO,EAAE,OAAO,IAAK,EAAe;QAC7C,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;QAC7B,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,CAAC;QACxC,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,CAAC;QAC1C,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM;QAC3B,cAAc,EAAE,GAAG,EAAE,CAAC,OAAO;QAC7B,eAAe,EAAE,GAAG,EAAE,CAAC,YAAY;QACnC,aAAa,EAAE,GAAG,EAAE,CAAC,SAAS;QAC9B,cAAc,EAAE,GAAG,EAAE,CAAC,SAAS;QAC/B,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS;KACjC,CAAA;AACH,CAAC;AAED;;;GAGG;AACU,QAAA,0BAA0B,GAAG,oBAAoB,CAAA;AAQ9D,SAAgB,2BAA2B,CAGzC,OAAgD;IAEhD,OAAO;QACL,GAAG,oBAAoB,CAAC,OAAO,CAAC;QAChC,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,IAAI;KACpC,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,10 +1,20 @@
1
1
  {
2
2
  "name": "@botonic/core",
3
- "version": "0.46.1",
3
+ "version": "0.48.0",
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,6 +39,13 @@
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
51
  "axios": "^1.13.6",
package/src/core-bot.ts CHANGED
@@ -97,7 +97,7 @@ export class CoreBot {
97
97
  }
98
98
 
99
99
  private getBotContext(request: BotRequest): BotContext {
100
- const { input, session, lastRoutePath } = request
100
+ const { input, session, lastRoutePath, settings, secrets } = request
101
101
  return {
102
102
  input,
103
103
  session,
@@ -114,6 +114,8 @@ export class CoreBot {
114
114
  setUserLocale: (locale: string) => this.setUserLocale(locale, session),
115
115
  setSystemLocale: (locale: string) =>
116
116
  this.setSystemLocale(locale, session),
117
+ settings,
118
+ secrets,
117
119
  }
118
120
  }
119
121
 
@@ -126,6 +128,8 @@ export class CoreBot {
126
128
  input: botContext.input,
127
129
  session: botContext.session,
128
130
  lastRoutePath: botContext.lastRoutePath,
131
+ settings: botContext.settings,
132
+ secrets: botContext.secrets,
129
133
  response: [],
130
134
  }
131
135
  }
@@ -145,9 +149,11 @@ export class CoreBot {
145
149
 
146
150
  return {
147
151
  input: botContext.input,
148
- response,
149
152
  session: botContext.session,
150
153
  lastRoutePath: botContext.lastRoutePath,
154
+ settings: botContext.settings,
155
+ secrets: botContext.secrets,
156
+ response,
151
157
  }
152
158
  }
153
159
 
@@ -247,11 +253,13 @@ export class CoreBot {
247
253
 
248
254
  const followUp = await this.runInput(botContext)
249
255
 
250
- const response = {
256
+ const response: BotResponse = {
251
257
  input: followUp.input,
252
258
  response: previousResponse.response.concat(followUp.response),
253
259
  session: botContext.session,
254
260
  lastRoutePath: followUp.lastRoutePath,
261
+ settings: followUp.settings,
262
+ secrets: followUp.secrets,
255
263
  }
256
264
 
257
265
  // Recursive call to handle multiple bot actions in a row
@@ -105,6 +105,16 @@ export enum VerbosityLevel {
105
105
  High = 'high',
106
106
  }
107
107
 
108
+ export interface HubtypeAssistantMessage {
109
+ role: 'assistant'
110
+ content: string
111
+ }
112
+
113
+ export interface HubtypeUserMessage {
114
+ role: 'user'
115
+ content: string
116
+ }
117
+
108
118
  export interface AiAgentArgs {
109
119
  name: string
110
120
  instructions: string
@@ -113,5 +123,6 @@ export interface AiAgentArgs {
113
123
  activeTools?: { name: string }[]
114
124
  inputGuardrailRules?: GuardrailRule[]
115
125
  sourceIds?: string[]
126
+ previousHubtypeMessages?: HubtypeAssistantMessage[]
116
127
  outputMessagesSchemas?: z.ZodObject<any>[]
117
128
  }
@@ -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<