@botonic/core 2.25.0 → 2.27.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## 2.27.0 (2026-04-29)
2
+
3
+ ### 🚀 Features
4
+
5
+ - typing to work again and improve it with few modes when sending messages ([#831](https://github.com/metis-ai/hubtype-product/pull/831))
6
+ - receiving db_id, bot_interaction_id and working capture_user_input_id and first_interaction updatable ([#822](https://github.com/metis-ai/hubtype-product/pull/822))
7
+ - supporting isFirstInteraction editable by bot, with snapshot logic ([#815](https://github.com/metis-ai/hubtype-product/pull/815))
8
+ - **botonic:** session and Hubtype API adaptations (non-webviews) ([#810](https://github.com/metis-ai/hubtype-product/pull/810))
9
+
10
+ ### ❤️ Thank You
11
+
12
+ - Marc Rabat @vanbasten17
13
+
14
+ ## 2.26.0 (2026-03-31)
15
+
16
+ This was a version bump only for @botonic/core to align it with other projects, there were no code changes.
17
+
1
18
  ## 2.25.0 (2026-03-27)
2
19
 
3
20
  This was a version bump only for @botonic/core to align it with other projects, there were no code changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@botonic/core",
3
- "version": "2.25.0",
3
+ "version": "2.27.0",
4
4
  "type": "module",
5
5
  "types": "./src/index.d.ts",
6
6
  "module": "./src/index.js",
@@ -11,7 +11,7 @@
11
11
  }
12
12
  },
13
13
  "dependencies": {
14
- "@botonic/shared": "2.25.0",
14
+ "@botonic/shared": "2.27.0",
15
15
  "tslib": "^2.3.0"
16
16
  },
17
17
  "references": [
package/src/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
+ export * from './lib/actions';
1
2
  export * from './lib/core-bot';
2
- export * from './lib/hubtype-service';
3
3
  export * from './lib/routes/types';
4
4
  export * from './lib/utils';
package/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
+ export * from './lib/actions';
1
2
  export * from './lib/core-bot';
2
- export * from './lib/hubtype-service';
3
3
  export * from './lib/routes/types';
4
4
  export * from './lib/utils';
5
5
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/botonic/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/botonic/core/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,aAAa,CAAA"}
@@ -0,0 +1 @@
1
+ export * from './update-webchat-client-settings';
@@ -0,0 +1,2 @@
1
+ export * from './update-webchat-client-settings';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/actions/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { BotonicContext } from '@botonic/shared';
2
+ export declare function updateWebchatClientSettingsAction(botonicContext: BotonicContext): Promise<{
3
+ status: number;
4
+ response: string;
5
+ }>;
@@ -0,0 +1,50 @@
1
+ import { __awaiter } from "tslib";
2
+ import { BotServerMessageFactory, parseUpdateWebchatClientSettingsPayload, } from '@botonic/shared';
3
+ function isSettingsPatch(value) {
4
+ return (typeof value === 'object' &&
5
+ value !== null &&
6
+ !Array.isArray(value) &&
7
+ Object.keys(value).length > 0);
8
+ }
9
+ function mergeSettingsPatch(current, patch) {
10
+ var _a, _b, _c, _d, _e;
11
+ return {
12
+ block_inputs: (_a = patch.block_inputs) !== null && _a !== void 0 ? _a : current.block_inputs,
13
+ user_input_enabled: (_b = patch.user_input_enabled) !== null && _b !== void 0 ? _b : current.user_input_enabled,
14
+ attachments_enabled: (_c = patch.attachments_enabled) !== null && _c !== void 0 ? _c : current.attachments_enabled,
15
+ emoji_picker_enabled: (_d = patch.emoji_picker_enabled) !== null && _d !== void 0 ? _d : current.emoji_picker_enabled,
16
+ custom: Object.assign(Object.assign({}, current.custom), ((_e = patch.custom) !== null && _e !== void 0 ? _e : {})),
17
+ };
18
+ }
19
+ export function updateWebchatClientSettingsAction(botonicContext) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const payload = botonicContext.input.payload;
22
+ if (!payload) {
23
+ return {
24
+ status: 400,
25
+ response: 'No payload',
26
+ };
27
+ }
28
+ const { settings } = parseUpdateWebchatClientSettingsPayload(payload);
29
+ if (!isSettingsPatch(settings)) {
30
+ return {
31
+ status: 400,
32
+ response: 'No settings to update',
33
+ };
34
+ }
35
+ const mergedSettings = mergeSettingsPatch(botonicContext.session.webchatClientSettings, settings);
36
+ yield botonicContext.updateBotSession({
37
+ webchatClientSettings: mergedSettings,
38
+ });
39
+ yield botonicContext.sendMessages([
40
+ BotServerMessageFactory.createWebchatClientSettings({
41
+ settings: mergedSettings,
42
+ }),
43
+ ], { typingMode: false });
44
+ return {
45
+ status: 200,
46
+ response: 'OK',
47
+ };
48
+ });
49
+ }
50
+ //# sourceMappingURL=update-webchat-client-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-webchat-client-settings.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/actions/update-webchat-client-settings.ts"],"names":[],"mappings":";AAAA,OAAO,EAEL,uBAAuB,EACvB,uCAAuC,GAExC,MAAM,iBAAiB,CAAA;AAKxB,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAC9B,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,OAA8B,EAC9B,KAAiC;;IAEjC,OAAO;QACL,YAAY,EAAE,MAAA,KAAK,CAAC,YAAY,mCAAI,OAAO,CAAC,YAAY;QACxD,kBAAkB,EAAE,MAAA,KAAK,CAAC,kBAAkB,mCAAI,OAAO,CAAC,kBAAkB;QAC1E,mBAAmB,EACjB,MAAA,KAAK,CAAC,mBAAmB,mCAAI,OAAO,CAAC,mBAAmB;QAC1D,oBAAoB,EAClB,MAAA,KAAK,CAAC,oBAAoB,mCAAI,OAAO,CAAC,oBAAoB;QAC5D,MAAM,kCACD,OAAO,CAAC,MAAM,GACd,CAAC,MAAA,KAAK,CAAC,MAAM,mCAAI,EAAE,CAAC,CACxB;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAgB,iCAAiC,CACrD,cAA8B;;QAE9B,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAA;QAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,YAAY;aACvB,CAAA;QACH,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,uCAAuC,CAAC,OAAO,CAAC,CAAA;QAErE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,QAAQ,EAAE,uBAAuB;aAClC,CAAA;QACH,CAAC;QAED,MAAM,cAAc,GAAG,kBAAkB,CACvC,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAC5C,QAAQ,CACT,CAAA;QAED,MAAM,cAAc,CAAC,gBAAgB,CAAC;YACpC,qBAAqB,EAAE,cAAc;SACtC,CAAC,CAAA;QAEF,MAAM,cAAc,CAAC,YAAY,CAC/B;YACE,uBAAuB,CAAC,2BAA2B,CAAC;gBAClD,QAAQ,EAAE,cAAc;aACzB,CAAC;SACH,EACD,EAAE,UAAU,EAAE,KAAK,EAAE,CACtB,CAAA;QAED,OAAO;YACL,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,IAAI;SACf,CAAA;IACH,CAAC;CAAA"}
@@ -1,33 +1,35 @@
1
- import { BotContext, BotonicRequest, ResolvedPlugins } from '@botonic/shared';
2
- import { HubtypeExternalAPIService } from '../hubtype-service';
1
+ import { BotonicContext, BotonicRequest, HubtypeApiService, ResolvedPlugins, TypingMode } from '@botonic/shared';
3
2
  import { Route } from '../routes/types';
4
3
  /** Config for CoreBot. */
5
4
  export interface CoreBotConfig {
6
5
  appId?: string;
7
6
  defaultDelay?: number;
8
- defaultRoutes?: (botContext: BotContext) => Route[];
7
+ defaultRoutes?: (botonicContext: BotonicContext) => Route[];
9
8
  defaultTyping?: number;
9
+ defaultTypingMode?: TypingMode;
10
10
  plugins?: ResolvedPlugins;
11
- routes: (botContext: BotContext) => Route[];
11
+ routes: (botonicContext: BotonicContext) => Route[];
12
12
  }
13
13
  /**
14
- * CoreBot: accepts RequestInput; normalizes to Input (v2) inside input().
15
- * Runs pipeline: input() → getBotContext → runInput (route, plugins, redirect).
14
+ * CoreBot: accepts v2-shaped `BotonicRequest` and runs
15
+ * input() → createBotonicContext → runInput (route, plugins, redirect).
16
16
  */
17
17
  export declare class CoreBot {
18
18
  appId?: string;
19
19
  defaultDelay: number;
20
- defaultRoutes: (botContext: BotContext) => Route[];
20
+ defaultRoutes: (botonicContext: BotonicContext) => Route[];
21
21
  defaultTyping: number;
22
+ defaultTypingMode: TypingMode;
22
23
  plugins: ResolvedPlugins;
23
- routes: (botContext: BotContext) => Route[];
24
- hubtypeService: HubtypeExternalAPIService;
24
+ routes: (botonicContext: BotonicContext) => Route[];
25
+ hubtypeService: HubtypeApiService;
25
26
  private readonly botonicContextFactory;
26
- constructor({ appId, defaultDelay, defaultRoutes, defaultTyping, plugins, routes, }: CoreBotConfig);
27
- input(botRequest: BotonicRequest): Promise<void>;
27
+ constructor({ appId, defaultDelay, defaultRoutes, defaultTyping, defaultTypingMode, plugins, routes, }: CoreBotConfig);
28
+ run(botonicRequest: BotonicRequest): Promise<void>;
28
29
  private runInput;
29
30
  private runPrePlugins;
30
31
  private getRoute;
32
+ private getCoreRoutes;
31
33
  private runPostPlugins;
32
34
  private runRedirectAction;
33
35
  }
@@ -1,106 +1,115 @@
1
1
  import { __awaiter } from "tslib";
2
- import { BotonicAction, BotonicContextFactory, MessageType, PluginMode, } from '@botonic/shared';
3
- import { HubtypeExternalAPIService } from '../hubtype-service';
2
+ import { BotonicAction, BotonicContextFactory, HubtypeApiService, isUpdateWebchatClientSettingsPayload, MessageType, PluginMode, } from '@botonic/shared';
3
+ import { updateWebchatClientSettingsAction } from '../actions';
4
4
  import { runPlugins } from '../plugins';
5
5
  import { Router } from '../routes/router';
6
6
  /**
7
- * CoreBot: accepts RequestInput; normalizes to Input (v2) inside input().
8
- * Runs pipeline: input() → getBotContext → runInput (route, plugins, redirect).
7
+ * CoreBot: accepts v2-shaped `BotonicRequest` and runs
8
+ * input() → createBotonicContext → runInput (route, plugins, redirect).
9
9
  */
10
10
  export class CoreBot {
11
- constructor({ appId, defaultDelay = 0.4, defaultRoutes = () => [], defaultTyping = 0.6, plugins, routes, }) {
12
- this.hubtypeService = new HubtypeExternalAPIService();
11
+ constructor({ appId, defaultDelay = 0.4, defaultRoutes = () => [], defaultTyping = 0.6, defaultTypingMode = 'inBetweenTyping', plugins, routes, }) {
12
+ this.hubtypeService = new HubtypeApiService();
13
13
  this.appId = appId;
14
14
  this.defaultDelay = defaultDelay;
15
15
  this.defaultRoutes = defaultRoutes;
16
16
  this.defaultTyping = defaultTyping;
17
+ this.defaultTypingMode = defaultTypingMode;
17
18
  this.plugins = plugins || {};
18
19
  this.routes = routes;
19
- this.botonicContextFactory = new BotonicContextFactory(this.hubtypeService, this.plugins, this.defaultTyping, this.defaultDelay);
20
+ this.botonicContextFactory = new BotonicContextFactory(this.hubtypeService, this.plugins, this.defaultTyping, this.defaultDelay, this.defaultTypingMode);
20
21
  }
21
- input(botRequest) {
22
+ run(botonicRequest) {
22
23
  return __awaiter(this, void 0, void 0, function* () {
23
- const botContext = this.botonicContextFactory.create(botRequest);
24
- yield this.runInput(botContext);
25
- if (botContext.session.isBotonicActionRedirect()) {
26
- yield this.runRedirectAction(botContext);
24
+ const botonicContext = this.botonicContextFactory.create(botonicRequest);
25
+ yield this.runInput(botonicContext);
26
+ if (botonicContext.session.isBotonicActionRedirect()) {
27
+ yield this.runRedirectAction(botonicContext);
27
28
  }
28
29
  });
29
30
  }
30
- runInput(botContext) {
31
+ runInput(botonicContext) {
31
32
  return __awaiter(this, void 0, void 0, function* () {
32
33
  var _a;
33
- if (botContext.input.type === MessageType.TypingEvent) {
34
- botContext.response = {
34
+ if (botonicContext.input.type === MessageType.TypingEvent) {
35
+ botonicContext.response = {
35
36
  status: 200,
36
37
  response: 'OK',
37
38
  };
38
- return botContext;
39
+ return botonicContext;
39
40
  }
40
- yield this.runPrePlugins(botContext);
41
- const route = yield this.getRoute(botContext);
42
- const actionResponse = yield ((_a = route.action) === null || _a === void 0 ? void 0 : _a.call(route, botContext));
43
- yield this.runPostPlugins(botContext, actionResponse);
44
- if (botContext.session.isFirstInteraction) {
45
- yield botContext.updateBotSession({ isFirstInteraction: false });
46
- }
47
- botContext.response = actionResponse !== null && actionResponse !== void 0 ? actionResponse : { status: 200, response: 'OK' };
48
- return botContext;
41
+ yield this.runPrePlugins(botonicContext);
42
+ const route = yield this.getRoute(botonicContext);
43
+ const actionResponse = yield ((_a = route.action) === null || _a === void 0 ? void 0 : _a.call(route, botonicContext));
44
+ yield this.runPostPlugins(botonicContext, actionResponse);
45
+ botonicContext.response = actionResponse !== null && actionResponse !== void 0 ? actionResponse : { status: 200, response: 'OK' };
46
+ return botonicContext;
49
47
  });
50
48
  }
51
- runPrePlugins(botContext) {
49
+ runPrePlugins(botonicContext) {
52
50
  return __awaiter(this, void 0, void 0, function* () {
53
51
  if (this.plugins) {
54
52
  yield runPlugins({
55
- botContext,
53
+ botonicContext,
56
54
  mode: PluginMode.PRE,
57
55
  });
58
56
  }
59
57
  });
60
58
  }
61
- getRoute(botContext) {
59
+ getRoute(botonicContext) {
62
60
  return __awaiter(this, void 0, void 0, function* () {
63
- const computedRoutes = this.routes(botContext);
61
+ const computedRoutes = this.routes(botonicContext);
64
62
  const router = new Router([
63
+ ...this.getCoreRoutes(botonicContext),
65
64
  ...computedRoutes,
66
- ...this.defaultRoutes(botContext),
65
+ ...this.defaultRoutes(botonicContext),
67
66
  ]);
68
- const route = router.processInput(botContext);
67
+ const route = router.processInput(botonicContext);
69
68
  return route;
70
69
  });
71
70
  }
72
- runPostPlugins(botContext, response) {
71
+ getCoreRoutes(botonicContext) {
72
+ return [
73
+ {
74
+ path: 'update-webchat-client-settings',
75
+ payload: payload => typeof payload === 'string' &&
76
+ isUpdateWebchatClientSettingsPayload(payload),
77
+ action: () => __awaiter(this, void 0, void 0, function* () { return yield updateWebchatClientSettingsAction(botonicContext); }),
78
+ },
79
+ ];
80
+ }
81
+ runPostPlugins(botonicContext, response) {
73
82
  return __awaiter(this, void 0, void 0, function* () {
74
83
  if (this.plugins) {
75
84
  yield runPlugins({
76
- botContext,
85
+ botonicContext,
77
86
  mode: PluginMode.POST,
78
87
  response,
79
88
  });
80
89
  }
81
90
  });
82
91
  }
83
- runRedirectAction(botContext_1) {
84
- return __awaiter(this, arguments, void 0, function* (botContext, numOfRedirects = 0) {
92
+ runRedirectAction(botonicContext_1) {
93
+ return __awaiter(this, arguments, void 0, function* (botonicContext, numOfRedirects = 0) {
85
94
  var _a;
86
95
  if (numOfRedirects > 10) {
87
96
  throw new Error('Maximum BotAction recursive calls reached (10)');
88
97
  }
89
- const nextPayload = botContext.session.getBotonicActionPayload(BotonicAction.Redirect);
98
+ const nextPayload = botonicContext.session.getBotonicActionPayload(BotonicAction.Redirect);
90
99
  const hadPayload = Boolean(nextPayload);
91
100
  if (!hadPayload) {
92
- yield botContext.updateBotSession({ botonicAction: null });
93
- botContext.response = {
101
+ yield botonicContext.updateBotSession({ botonicAction: null });
102
+ botonicContext.response = {
94
103
  status: 200,
95
104
  response: 'OK',
96
105
  };
97
- return botContext;
106
+ return botonicContext;
98
107
  }
99
- yield botContext.updateBotSession({ botonicAction: null });
100
- botContext.input.setAsPostback(nextPayload);
101
- const followUpContext = yield this.runInput(botContext);
102
- if (botContext.session.isBotonicActionRedirect()) {
103
- return yield this.runRedirectAction(botContext, numOfRedirects + 1);
108
+ yield botonicContext.updateBotSession({ botonicAction: null });
109
+ botonicContext.input.setAsPostback(nextPayload);
110
+ const followUpContext = yield this.runInput(botonicContext);
111
+ if (botonicContext.session.isBotonicActionRedirect()) {
112
+ return yield this.runRedirectAction(botonicContext, numOfRedirects + 1);
104
113
  }
105
114
  followUpContext.response = (_a = followUpContext.response) !== null && _a !== void 0 ? _a : {
106
115
  status: 200,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/core-bot/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/core-bot/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
1
  import { RunPluginArgs } from '@botonic/shared';
2
- export declare function runPlugins({ botContext, mode, response, }: RunPluginArgs): Promise<void>;
2
+ export declare function runPlugins({ botonicContext, mode, response, }: RunPluginArgs): Promise<void>;
@@ -1,17 +1,17 @@
1
1
  import { __awaiter } from "tslib";
2
2
  import { PluginMode } from '@botonic/shared';
3
3
  export function runPlugins(_a) {
4
- return __awaiter(this, arguments, void 0, function* ({ botContext, mode, response = { status: 200, response: 'OK' }, }) {
5
- const plugins = botContext.plugins;
4
+ return __awaiter(this, arguments, void 0, function* ({ botonicContext, mode, response = { status: 200, response: 'OK' }, }) {
5
+ const plugins = botonicContext.plugins;
6
6
  for (const key in plugins) {
7
7
  const plugin = plugins[key];
8
8
  try {
9
9
  if (mode === PluginMode.PRE && typeof plugin.pre === 'function') {
10
- yield plugin.pre(botContext);
10
+ yield plugin.pre(botonicContext);
11
11
  }
12
12
  if (mode === PluginMode.POST && typeof plugin.post === 'function') {
13
- botContext.response = response;
14
- yield plugin.post(botContext);
13
+ botonicContext.response = response;
14
+ yield plugin.post(botonicContext);
15
15
  }
16
16
  }
17
17
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/plugins/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAU,UAAU,EAAiB,MAAM,iBAAiB,CAAA;AAEnE,MAAM,UAAgB,UAAU;yDAAC,EAC/B,UAAU,EACV,IAAI,EACJ,QAAQ,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAC5B;QACd,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAA;QAClC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAW,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,CAAC;gBACH,IAAI,IAAI,KAAK,UAAU,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;oBAChE,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;gBAC9B,CAAC;gBACD,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAClE,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAA;oBAC9B,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;IACH,CAAC;CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/plugins/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAU,UAAU,EAAiB,MAAM,iBAAiB,CAAA;AAEnE,MAAM,UAAgB,UAAU;yDAAC,EAC/B,cAAc,EACd,IAAI,EACJ,QAAQ,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,GAC5B;QACd,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAA;QACtC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAW,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,CAAC;gBACH,IAAI,IAAI,KAAK,UAAU,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;oBAChE,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;gBAClC,CAAC;gBACD,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAClE,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAA;oBAClC,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAChB,CAAC;QACH,CAAC;IACH,CAAC;CAAA"}
@@ -1,14 +1,14 @@
1
- import type { BotContext } from '@botonic/shared';
1
+ import type { BotonicContext } from '@botonic/shared';
2
2
  import { Route } from './types';
3
3
  export declare const NOT_FOUND_PATH = "404";
4
4
  export declare class NoMatchingRouteError extends Error {
5
- botContext: BotContext;
6
- constructor(botContext: BotContext);
5
+ botonicContext: BotonicContext;
6
+ constructor(botonicContext: BotonicContext);
7
7
  }
8
8
  export declare class Router {
9
9
  private routes;
10
10
  constructor(routes: Route[]);
11
- processInput(botContext: BotContext): Route;
11
+ processInput(botonicContext: BotonicContext): Route;
12
12
  private routeMatches;
13
13
  private matchesStringValue;
14
14
  }
@@ -1,23 +1,23 @@
1
1
  export const NOT_FOUND_PATH = '404';
2
2
  export class NoMatchingRouteError extends Error {
3
- constructor(botContext) {
4
- super(`No route found for input '${JSON.stringify(botContext.input)}' and no ${NOT_FOUND_PATH} route defined`);
5
- this.botContext = botContext;
3
+ constructor(botonicContext) {
4
+ super(`No route found for input '${JSON.stringify(botonicContext.input)}' and no ${NOT_FOUND_PATH} route defined`);
5
+ this.botonicContext = botonicContext;
6
6
  }
7
7
  }
8
8
  export class Router {
9
9
  constructor(routes) {
10
10
  this.routes = routes;
11
11
  }
12
- processInput(botContext) {
12
+ processInput(botonicContext) {
13
13
  for (const route of this.routes) {
14
- if (this.routeMatches(route, botContext)) {
14
+ if (this.routeMatches(route, botonicContext)) {
15
15
  return route;
16
16
  }
17
17
  }
18
- throw new NoMatchingRouteError(botContext);
18
+ throw new NoMatchingRouteError(botonicContext);
19
19
  }
20
- routeMatches(route, botContext) {
20
+ routeMatches(route, botonicContext) {
21
21
  var _a, _b, _c;
22
22
  const hasMatchers = !!(route.text ||
23
23
  route.payload ||
@@ -28,9 +28,9 @@ export class Router {
28
28
  if (!hasMatchers) {
29
29
  return route.path === NOT_FOUND_PATH;
30
30
  }
31
- const textValue = botContext.input.text;
32
- const payloadValue = botContext.input.payload;
33
- const typeValue = botContext.input.type;
31
+ const textValue = botonicContext.input.text;
32
+ const payloadValue = botonicContext.input.payload;
33
+ const typeValue = botonicContext.input.type;
34
34
  const stringMatcherChecks = [
35
35
  { matcher: route.text, value: textValue },
36
36
  { matcher: route.payload, value: payloadValue },
@@ -41,13 +41,13 @@ export class Router {
41
41
  return true;
42
42
  }
43
43
  }
44
- if ((_a = route.input) === null || _a === void 0 ? void 0 : _a.call(route, botContext.input)) {
44
+ if ((_a = route.input) === null || _a === void 0 ? void 0 : _a.call(route, botonicContext.input)) {
45
45
  return true;
46
46
  }
47
- if ((_b = route.session) === null || _b === void 0 ? void 0 : _b.call(route, botContext.session)) {
47
+ if ((_b = route.session) === null || _b === void 0 ? void 0 : _b.call(route, botonicContext.session)) {
48
48
  return true;
49
49
  }
50
- if ((_c = route.context) === null || _c === void 0 ? void 0 : _c.call(route, botContext)) {
50
+ if ((_c = route.context) === null || _c === void 0 ? void 0 : _c.call(route, botonicContext)) {
51
51
  return true;
52
52
  }
53
53
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/routes/router.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAA;AAEnC,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAE7C,YAAY,UAAsB;QAChC,KAAK,CACH,6BAA6B,IAAI,CAAC,SAAS,CACzC,UAAU,CAAC,KAAK,CACjB,YAAY,cAAc,gBAAgB,CAC5C,CAAA;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,MAAM;IACjB,YAAoB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEvC,YAAY,CAAC,UAAsB;QACjC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,CAAC;gBACzC,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,MAAM,IAAI,oBAAoB,CAAC,UAAU,CAAC,CAAA;IAC5C,CAAC;IAEO,YAAY,CAAC,KAAY,EAAE,UAAsB;;QACvD,MAAM,WAAW,GAAG,CAAC,CAAC,CACpB,KAAK,CAAC,IAAI;YACV,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,IAAI;YACV,KAAK,CAAC,KAAK;YACX,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,OAAO,CACd,CAAA;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAA;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAA;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAA;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,IAAc,CAAA;QAEjD,MAAM,mBAAmB,GAAG;YAC1B,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;YACzC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE;YAC/C,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;SAC1C,CAAA;QAED,KAAK,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,mBAAmB,EAAE,CAAC;YACrD,IAAI,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;gBAChE,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC;QAED,IAAI,MAAA,KAAK,CAAC,KAAK,sDAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,MAAA,KAAK,CAAC,OAAO,sDAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,MAAA,KAAK,CAAC,OAAO,sDAAG,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,kBAAkB,CAAC,OAAsB,EAAE,KAAa;QAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,KAAK,KAAK,CAAA;QAC1B,CAAC;aAAM,IAAI,OAAO,YAAY,MAAM,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;aAAM,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAA;QACvB,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/routes/router.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Action, BotContext, BotonicContextInput, BotonicContextSession } from '@botonic/shared';
1
+ import type { Action, BotonicContext, BotonicContextInput, BotonicContextSession } from '@botonic/shared';
2
2
  export interface Route {
3
3
  action?: Action;
4
4
  path?: string;
@@ -12,4 +12,4 @@ export interface Route {
12
12
  export type StringMatcher = RegExp | string | ((data: string) => boolean);
13
13
  export type InputMatcher = (input: BotonicContextInput) => boolean | Promise<boolean>;
14
14
  export type SessionMatcher = (session: BotonicContextSession) => boolean | Promise<boolean>;
15
- export type ContextMatcher = (botContext: BotContext) => boolean | Promise<boolean>;
15
+ export type ContextMatcher = (botonicContext: BotonicContext) => boolean | Promise<boolean>;
@@ -1,4 +0,0 @@
1
- import type { BotonicContextSession } from '@botonic/shared';
2
- export declare function storeCaseRating(session: BotonicContextSession, rating: number, context?: any): Promise<{
3
- status: string;
4
- }>;
@@ -1,32 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- // function contextDefaults(context: any): any {
3
- // return {
4
- // timeoutMs: context.timeoutMs || 10000,
5
- // }
6
- // }
7
- export function storeCaseRating(session_1, rating_1) {
8
- return __awaiter(this, arguments, void 0, function* (session, rating, context = {}) {
9
- if (session.isTestIntegration) {
10
- return Promise.resolve({ status: 'ok' });
11
- }
12
- const baseUrl = session.hubtypeApi ||
13
- // @ts-expect-error - VITE_HUBTYPE_API_URL is not defined in the environment
14
- import.meta.env['VITE_HUBTYPE_API_URL'];
15
- const chatId = session.user.id;
16
- // context = contextDefaults(context)
17
- const response = yield fetch(`${baseUrl}/v1/chats/${chatId}/store_case_rating/`, {
18
- method: 'POST',
19
- headers: {
20
- Authorization: `Bearer ${session.accessToken}`,
21
- 'Content-Type': 'application/json',
22
- },
23
- body: JSON.stringify({ chat_id: chatId, rating }),
24
- // signal: AbortSignal.timeout((context as any).timeoutMs),
25
- });
26
- if (!response.ok) {
27
- throw new Error(`HTTP error! status: ${response.status}`);
28
- }
29
- return yield response.json();
30
- });
31
- }
32
- //# sourceMappingURL=handoff.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/hubtype-service/handoff.ts"],"names":[],"mappings":";AACA,gDAAgD;AAChD,aAAa;AACb,6CAA6C;AAC7C,MAAM;AACN,IAAI;AAEJ,MAAM,UAAgB,eAAe;yDACnC,OAA8B,EAC9B,MAAc,EACd,UAAe,EAAE;QAEjB,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QAC1C,CAAC;QACD,MAAM,OAAO,GACX,OAAO,CAAC,UAAU;YAClB,4EAA4E;YAC5E,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;QAC9B,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,aAAa,MAAM,qBAAqB,EAClD;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE;gBAC9C,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;YACjD,6DAA6D;SAC9D,CACF,CAAA;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;QAC3D,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAC9B,CAAC;CAAA"}
@@ -1,10 +0,0 @@
1
- import { BotContext, BotonicRequestSession, BotonicSessionUpdate, BotServerMessage, HandoffOptions, HubtypeServicePort, ResolvedPlugins, UserExtraData } from '@botonic/shared';
2
- export declare class HubtypeExternalAPIService implements HubtypeServicePort {
3
- baseUrl: string;
4
- constructor(baseUrl?: string);
5
- updateBotSession<TExtraData extends UserExtraData = UserExtraData>(botContext: BotContext<ResolvedPlugins, TExtraData>, updates: BotonicSessionUpdate<TExtraData>): Promise<void>;
6
- getBotSession(botContext: BotContext): Promise<Omit<BotonicRequestSession, '_access_token'>>;
7
- doHandoff(botContext: BotContext, handoffOptions?: HandoffOptions): Promise<any>;
8
- sendMessage(botContext: BotContext, message: BotServerMessage): Promise<unknown>;
9
- }
10
- export { storeCaseRating } from './handoff';
@@ -1,96 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import { BotonicContextSession, sessionUpdateToPatchBody, } from '@botonic/shared';
3
- export class HubtypeExternalAPIService {
4
- constructor(
5
- // @ts-expect-error - VITE_HUBTYPE_API_URL is not defined in the environment
6
- baseUrl = import.meta.env['VITE_HUBTYPE_API_URL'] // TODO: Should this come from vite or directly taken from lambda process.env?
7
- ) {
8
- this.baseUrl = baseUrl;
9
- }
10
- updateBotSession(botContext, updates) {
11
- return __awaiter(this, void 0, void 0, function* () {
12
- const patchedSession = sessionUpdateToPatchBody(updates);
13
- const sessionToUpdate = Object.assign({}, patchedSession);
14
- delete sessionToUpdate._access_token;
15
- delete sessionToUpdate._hubtype_api;
16
- // When patching user, send full user so backend replacement does not drop id, provider, contact_info, etc.
17
- // TODO: Beware this kind of unstructuring so we keep all levels of the user object
18
- if (sessionToUpdate.user != null &&
19
- typeof sessionToUpdate.user === 'object') {
20
- sessionToUpdate.user = Object.assign(Object.assign({}, botContext.session.raw.user), sessionToUpdate.user);
21
- }
22
- const response = yield fetch(`${this.baseUrl}/external/v2/conversational_apps/${botContext.session.bot.id}/users/${botContext.session.user.id}/context/`, {
23
- method: 'PATCH',
24
- headers: {
25
- 'Content-Type': 'application/json',
26
- },
27
- body: JSON.stringify(sessionToUpdate),
28
- });
29
- if (!response.ok) {
30
- console.error('Response error', response);
31
- throw new Error('Failed to update bot session');
32
- }
33
- const didUpdateBotonicAction = 'botonicAction' in updates;
34
- const previousBotonicAction = didUpdateBotonicAction
35
- ? undefined
36
- : botContext.session.raw._botonic_action;
37
- const sessionUpdated = yield response.json();
38
- sessionUpdated._access_token = botContext.session.accessToken;
39
- if (previousBotonicAction !== undefined) {
40
- sessionUpdated._botonic_action = previousBotonicAction;
41
- }
42
- botContext.session = new BotonicContextSession(sessionUpdated);
43
- });
44
- }
45
- getBotSession(botContext) {
46
- return __awaiter(this, void 0, void 0, function* () {
47
- const response = yield fetch(`${this.baseUrl}/external/v2/conversational_apps/${botContext.session.bot.id}/users/${botContext.session.user.id}/context/`);
48
- if (!response.ok) {
49
- throw new Error('Failed to get bot session');
50
- }
51
- const sessionResponse = yield response.json();
52
- return sessionResponse;
53
- });
54
- }
55
- doHandoff(botContext, handoffOptions) {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- const response = yield fetch(`${this.baseUrl}/external/v2/conversational_apps/${botContext.session.bot.id}/users/${botContext.session.user.id}/do_handoff/`, {
58
- method: 'POST',
59
- headers: {
60
- 'Content-Type': 'application/json',
61
- Authorization: `Bearer ${botContext.session.accessToken}`,
62
- },
63
- body: JSON.stringify(Object.assign(Object.assign({}, handoffOptions), { bot_interaction_id: botContext.input.botInteractionId })),
64
- });
65
- if (!response.ok) {
66
- throw new Error('Failed to do handoff');
67
- }
68
- return yield response.json();
69
- });
70
- }
71
- sendMessage(botContext, message) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- var _a;
74
- const response = yield fetch(`${this.baseUrl}/external/v2/conversational_apps/${botContext.session.bot.id}/users/${botContext.session.user.id}/send_message/`, {
75
- method: 'POST',
76
- headers: {
77
- 'Content-Type': 'application/json',
78
- Authorization: `Bearer ${botContext.session.accessToken}`,
79
- },
80
- body: JSON.stringify(message),
81
- });
82
- if (!response.ok) {
83
- const contentType = (_a = response.headers.get('content-type')) !== null && _a !== void 0 ? _a : '';
84
- const isJson = contentType.includes('application/json');
85
- const responseError = isJson
86
- ? yield response.json()
87
- : yield response.text();
88
- console.error('Response error', responseError);
89
- throw new Error('Failed to post message');
90
- }
91
- return yield response.json();
92
- });
93
- }
94
- }
95
- export { storeCaseRating } from './handoff';
96
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/botonic/core/src/lib/hubtype-service/index.ts"],"names":[],"mappings":"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"}