@botonic/core 0.44.0 → 0.45.0-alpha.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 +1 -1
- package/lib/cjs/debug/inspector.d.ts +1 -1
- package/lib/cjs/debug/inspector.js +0 -2
- package/lib/cjs/debug/inspector.js.map +1 -1
- package/lib/cjs/handoff.d.ts +1 -1
- package/lib/cjs/handoff.js +2 -1
- package/lib/cjs/handoff.js.map +1 -1
- package/lib/cjs/hubtype-service.d.ts +3 -3
- package/lib/cjs/hubtype-service.js +25 -19
- package/lib/cjs/hubtype-service.js.map +1 -1
- package/lib/cjs/models/ai-agents.d.ts +13 -2
- package/lib/cjs/models/hubtype-analytics.d.ts +1 -1
- package/lib/cjs/plugins.d.ts +1 -1
- package/lib/cjs/pusher-utils.js +1 -1
- package/lib/cjs/pusher-utils.js.map +1 -1
- package/lib/cjs/routing/router-utils.d.ts +1 -1
- package/lib/cjs/routing/router-utils.js +15 -8
- package/lib/cjs/routing/router-utils.js.map +1 -1
- package/lib/cjs/routing/router.d.ts +1 -1
- package/lib/cjs/routing/router.js +31 -20
- package/lib/cjs/routing/router.js.map +1 -1
- package/lib/cjs/utils.d.ts +1 -1
- package/lib/cjs/utils.js +12 -8
- package/lib/cjs/utils.js.map +1 -1
- package/lib/esm/core-bot.d.ts +1 -1
- package/lib/esm/debug/inspector.d.ts +1 -1
- package/lib/esm/debug/inspector.js +0 -2
- package/lib/esm/debug/inspector.js.map +1 -1
- package/lib/esm/handoff.d.ts +1 -1
- package/lib/esm/handoff.js +2 -1
- package/lib/esm/handoff.js.map +1 -1
- package/lib/esm/hubtype-service.d.ts +3 -3
- package/lib/esm/hubtype-service.js +25 -19
- package/lib/esm/hubtype-service.js.map +1 -1
- package/lib/esm/models/ai-agents.d.ts +13 -2
- package/lib/esm/models/hubtype-analytics.d.ts +1 -1
- package/lib/esm/plugins.d.ts +1 -1
- package/lib/esm/pusher-utils.js +1 -1
- package/lib/esm/pusher-utils.js.map +1 -1
- package/lib/esm/routing/router-utils.d.ts +1 -1
- package/lib/esm/routing/router-utils.js +15 -8
- package/lib/esm/routing/router-utils.js.map +1 -1
- package/lib/esm/routing/router.d.ts +1 -1
- package/lib/esm/routing/router.js +31 -20
- package/lib/esm/routing/router.js.map +1 -1
- package/lib/esm/utils.d.ts +1 -1
- package/lib/esm/utils.js +12 -8
- package/lib/esm/utils.js.map +1 -1
- package/package.json +4 -7
- package/src/core-bot.ts +9 -9
- package/src/debug/inspector.ts +4 -6
- package/src/handoff.ts +6 -3
- package/src/hubtype-service.ts +34 -23
- package/src/models/ai-agents.ts +14 -1
- package/src/models/hubtype-analytics.ts +1 -1
- package/src/plugins.ts +1 -1
- package/src/pusher-utils.ts +1 -1
- package/src/routing/router-utils.ts +23 -9
- package/src/routing/router.ts +41 -24
- package/src/utils.ts +18 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/routing/router.ts"],"names":[],"mappings":";;;AAAA,4CAA6C;AAC7C,kDAAmD;AAcnD,oCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/routing/router.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Session } from './models/legacy-types';
|
|
1
|
+
import { type Session } from './models/legacy-types';
|
|
2
2
|
export declare const isNode: () => boolean;
|
|
3
3
|
export declare const isBrowser: () => boolean;
|
|
4
4
|
export declare const isMobile: (mobileBreakpoint?: number) => boolean;
|
package/lib/esm/utils.js
CHANGED
|
@@ -12,7 +12,7 @@ exports.isInstagram = isInstagram;
|
|
|
12
12
|
exports.isTwitter = isTwitter;
|
|
13
13
|
const legacy_types_1 = require("./models/legacy-types");
|
|
14
14
|
const isNode = () => {
|
|
15
|
-
// @ts-
|
|
15
|
+
// @ts-expect-error
|
|
16
16
|
return typeof IS_NODE !== 'undefined'
|
|
17
17
|
? // @ts-ignore
|
|
18
18
|
IS_NODE
|
|
@@ -22,7 +22,7 @@ const isNode = () => {
|
|
|
22
22
|
};
|
|
23
23
|
exports.isNode = isNode;
|
|
24
24
|
const isBrowser = () => {
|
|
25
|
-
// @ts-
|
|
25
|
+
// @ts-expect-error
|
|
26
26
|
return typeof IS_BROWSER !== 'undefined'
|
|
27
27
|
? // @ts-ignore
|
|
28
28
|
IS_BROWSER
|
|
@@ -45,8 +45,9 @@ function isFunction(o) {
|
|
|
45
45
|
return typeof o === 'function';
|
|
46
46
|
}
|
|
47
47
|
function cloneObject(object) {
|
|
48
|
-
if (!object)
|
|
48
|
+
if (!object) {
|
|
49
49
|
return {};
|
|
50
|
+
}
|
|
50
51
|
return { ...object };
|
|
51
52
|
}
|
|
52
53
|
const params2queryString = (params) => Object.entries(params)
|
|
@@ -68,19 +69,22 @@ const join = (...segments) => {
|
|
|
68
69
|
const part = parts[i];
|
|
69
70
|
// Remove leading and trailing slashes
|
|
70
71
|
// Also remove "." segments
|
|
71
|
-
if (!part || part === '.')
|
|
72
|
+
if (!part || part === '.') {
|
|
72
73
|
continue;
|
|
74
|
+
}
|
|
73
75
|
// Interpret ".." to pop the last segment
|
|
74
|
-
if (part === '..')
|
|
76
|
+
if (part === '..') {
|
|
75
77
|
newParts.pop();
|
|
78
|
+
}
|
|
76
79
|
// Push new path segments.
|
|
77
|
-
else
|
|
80
|
+
else {
|
|
78
81
|
newParts.push(part);
|
|
82
|
+
}
|
|
79
83
|
}
|
|
80
84
|
// Preserve the initial slash if there was one.
|
|
81
|
-
|
|
82
|
-
if (parts[0] === '')
|
|
85
|
+
if (parts[0] === '') {
|
|
83
86
|
newParts.unshift('');
|
|
87
|
+
}
|
|
84
88
|
// Turn back into a single string path.
|
|
85
89
|
return newParts.join('/') || (newParts.length ? '/' : '.');
|
|
86
90
|
};
|
package/lib/esm/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAmCA,gCAEC;AAED,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@botonic/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.45.0-alpha.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Build Chatbots using React",
|
|
6
6
|
"main": "./lib/cjs/index.js",
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"test": "../../node_modules/.bin/jest --coverage",
|
|
10
10
|
"prepublishOnly": "rm -rf lib && npm i && npm run build",
|
|
11
|
-
"lint": "
|
|
12
|
-
"
|
|
11
|
+
"lint": "biome check --write src/",
|
|
12
|
+
"lint:check": "biome check src/",
|
|
13
|
+
"format": "biome format --write src/",
|
|
13
14
|
"build": "../../node_modules/.bin/tsc -p tsconfig.json && ../../node_modules/.bin/tsc -p tsconfig.esm.json",
|
|
14
15
|
"build:watch": "npm run build -- --watch",
|
|
15
16
|
"cloc": "../../scripts/qa/cloc-package.sh ."
|
|
@@ -51,9 +52,5 @@
|
|
|
51
52
|
"conversational-ui",
|
|
52
53
|
"javascript"
|
|
53
54
|
],
|
|
54
|
-
"eslintConfig": {
|
|
55
|
-
"extends": "../.eslintrc.js",
|
|
56
|
-
"root": true
|
|
57
|
-
},
|
|
58
55
|
"sideEffects": false
|
|
59
56
|
}
|
package/src/core-bot.ts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Inspector } from './debug'
|
|
2
2
|
import {
|
|
3
|
-
BotContext,
|
|
3
|
+
type BotContext,
|
|
4
4
|
BotonicAction,
|
|
5
|
-
BotRequest,
|
|
6
|
-
BotResponse,
|
|
5
|
+
type BotRequest,
|
|
6
|
+
type BotResponse,
|
|
7
7
|
INPUT,
|
|
8
|
-
Input,
|
|
9
|
-
ProcessInputResult,
|
|
10
|
-
ResolvedPlugins,
|
|
11
|
-
Route,
|
|
12
|
-
Routes,
|
|
13
|
-
Session,
|
|
8
|
+
type Input,
|
|
9
|
+
type ProcessInputResult,
|
|
10
|
+
type ResolvedPlugins,
|
|
11
|
+
type Route,
|
|
12
|
+
type Routes,
|
|
13
|
+
type Session,
|
|
14
14
|
} from './models'
|
|
15
15
|
import { runPlugins } from './plugins'
|
|
16
16
|
import { getComputedRoutes, Router } from './routing'
|
package/src/debug/inspector.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Route, RouteMatcher } from '../models'
|
|
1
|
+
import type { Route, RouteMatcher } from '../models'
|
|
2
2
|
export class RouteInspector {
|
|
3
3
|
routeMatched(
|
|
4
4
|
_route: Route,
|
|
@@ -37,13 +37,12 @@ export class FocusRouteInspector extends RouteInspector {
|
|
|
37
37
|
if (this.focusRoutePaths === null) {
|
|
38
38
|
return true
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
return this.focusRoutePaths.includes(route.path)
|
|
40
|
+
return this.focusRoutePaths.includes(route.path as string)
|
|
42
41
|
}
|
|
43
42
|
}
|
|
44
43
|
|
|
45
44
|
export class LogRouteInspector extends FocusRouteInspector {
|
|
46
|
-
routeMatched(
|
|
45
|
+
override routeMatched(
|
|
47
46
|
route: Route,
|
|
48
47
|
routeKey: string,
|
|
49
48
|
routeValue: RouteMatcher,
|
|
@@ -58,8 +57,7 @@ export class LogRouteInspector extends FocusRouteInspector {
|
|
|
58
57
|
)
|
|
59
58
|
}
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
routeNotMatched(
|
|
60
|
+
override routeNotMatched(
|
|
63
61
|
route: Route,
|
|
64
62
|
routeKey: string,
|
|
65
63
|
routeValue: RouteMatcher,
|
package/src/handoff.ts
CHANGED
|
@@ -3,10 +3,11 @@ import axios from 'axios'
|
|
|
3
3
|
import { PATH_PAYLOAD_IDENTIFIER } from './constants'
|
|
4
4
|
import {
|
|
5
5
|
BotonicAction,
|
|
6
|
-
BotonicActionType,
|
|
6
|
+
type BotonicActionType,
|
|
7
7
|
EVENT_FORMAT_VERSION,
|
|
8
|
-
Session,
|
|
8
|
+
type Session,
|
|
9
9
|
} from './models'
|
|
10
|
+
|
|
10
11
|
const HUBTYPE_API_URL = 'https://api.hubtype.com'
|
|
11
12
|
|
|
12
13
|
export interface HubtypeAgentsInfo {
|
|
@@ -362,7 +363,9 @@ export function cancelHandoff(
|
|
|
362
363
|
typification: string | null = null
|
|
363
364
|
): void {
|
|
364
365
|
let action: BotonicActionType = BotonicAction.DiscardCase
|
|
365
|
-
if (typification)
|
|
366
|
+
if (typification) {
|
|
367
|
+
action = `${action}:${JSON.stringify({ typification })}`
|
|
368
|
+
}
|
|
366
369
|
session._botonic_action = action
|
|
367
370
|
}
|
|
368
371
|
|
package/src/hubtype-service.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import axios, { AxiosResponse } from 'axios'
|
|
2
|
-
import Pusher, { AuthOptions, Channel } from 'pusher-js'
|
|
3
|
-
import Channels from 'pusher-js/types/src/core/channels/channels'
|
|
1
|
+
import axios, { type AxiosResponse } from 'axios'
|
|
2
|
+
import Pusher, { type AuthOptions, type Channel } from 'pusher-js'
|
|
3
|
+
import type Channels from 'pusher-js/types/src/core/channels/channels'
|
|
4
4
|
|
|
5
|
-
import { Input, SessionUser } from './models'
|
|
5
|
+
import type { Input, SessionUser } from './models'
|
|
6
6
|
import { decompressData } from './pusher-utils'
|
|
7
7
|
|
|
8
8
|
interface UnsentInput {
|
|
@@ -101,7 +101,9 @@ export class HubtypeService {
|
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
_initPusher(): Promise<void> {
|
|
104
|
-
if (this.pusher)
|
|
104
|
+
if (this.pusher) {
|
|
105
|
+
return Promise.resolve()
|
|
106
|
+
}
|
|
105
107
|
if (!this.user.id || !this.appId) {
|
|
106
108
|
// TODO recover user & appId somehow
|
|
107
109
|
return Promise.reject('No User or appId. Clear cache and reload')
|
|
@@ -144,22 +146,27 @@ export class HubtypeService {
|
|
|
144
146
|
})
|
|
145
147
|
this.channel.bind('update_message_info', data => this.onPusherEvent(data))
|
|
146
148
|
|
|
147
|
-
this.pusher
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
})
|
|
149
|
+
this.pusher?.connection.bind('error', event => {
|
|
150
|
+
if (event.type === 'WebSocketError') {
|
|
151
|
+
this.handleConnectionChange(false)
|
|
152
|
+
} else {
|
|
153
|
+
const errorMsg = event.error?.data
|
|
154
|
+
? event.error.data.code || event.error.data.message
|
|
155
|
+
: 'Connection error'
|
|
156
|
+
cleanAndReject(`Pusher error (${errorMsg})`)
|
|
157
|
+
}
|
|
158
|
+
})
|
|
158
159
|
})
|
|
159
160
|
this.pusher.connection.bind('state_change', states => {
|
|
160
|
-
if (states.current === 'connecting')
|
|
161
|
-
|
|
162
|
-
|
|
161
|
+
if (states.current === 'connecting') {
|
|
162
|
+
this.updateAuthHeaders()
|
|
163
|
+
}
|
|
164
|
+
if (states.current === 'connected') {
|
|
165
|
+
this.handleConnectionChange(true)
|
|
166
|
+
}
|
|
167
|
+
if (states.current === 'unavailable') {
|
|
168
|
+
this.handleConnectionChange(false)
|
|
169
|
+
}
|
|
163
170
|
})
|
|
164
171
|
|
|
165
172
|
return connectionPromise
|
|
@@ -167,7 +174,7 @@ export class HubtypeService {
|
|
|
167
174
|
|
|
168
175
|
constructHeaders(): BotonicHeaders {
|
|
169
176
|
const headers = {}
|
|
170
|
-
if (this.user
|
|
177
|
+
if (this.user?.id) {
|
|
171
178
|
headers['X-BOTONIC-USER-ID'] = this.user.id
|
|
172
179
|
}
|
|
173
180
|
|
|
@@ -206,7 +213,9 @@ export class HubtypeService {
|
|
|
206
213
|
}
|
|
207
214
|
|
|
208
215
|
onPusherEvent(event: any): void {
|
|
209
|
-
if (this.onEvent && typeof this.onEvent === 'function')
|
|
216
|
+
if (this.onEvent && typeof this.onEvent === 'function') {
|
|
217
|
+
this.onEvent(event)
|
|
218
|
+
}
|
|
210
219
|
}
|
|
211
220
|
|
|
212
221
|
get pusherChannel(): string {
|
|
@@ -241,7 +250,7 @@ export class HubtypeService {
|
|
|
241
250
|
}
|
|
242
251
|
)
|
|
243
252
|
this.handleSentInput(message)
|
|
244
|
-
} catch (
|
|
253
|
+
} catch (_e) {
|
|
245
254
|
this.handleUnsentInput(message)
|
|
246
255
|
}
|
|
247
256
|
return Promise.resolve()
|
|
@@ -256,7 +265,9 @@ export class HubtypeService {
|
|
|
256
265
|
}
|
|
257
266
|
|
|
258
267
|
destroyPusher(): void {
|
|
259
|
-
if (!this.pusher)
|
|
268
|
+
if (!this.pusher) {
|
|
269
|
+
return
|
|
270
|
+
}
|
|
260
271
|
|
|
261
272
|
this.pusher.disconnect()
|
|
262
273
|
this.pusher.unsubscribe(this.pusherChannel)
|
package/src/models/ai-agents.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export interface BaseMessage {
|
|
2
|
-
type: 'text' | 'textWithButtons' | 'carousel' | 'exit'
|
|
2
|
+
type: 'text' | 'textWithButtons' | 'botExecutor' | 'carousel' | 'exit'
|
|
3
3
|
}
|
|
4
4
|
|
|
5
5
|
export interface Button {
|
|
@@ -7,6 +7,10 @@ export interface Button {
|
|
|
7
7
|
payload?: string
|
|
8
8
|
url?: string
|
|
9
9
|
}
|
|
10
|
+
export interface ButtonWithPayload {
|
|
11
|
+
text: string
|
|
12
|
+
payload: string
|
|
13
|
+
}
|
|
10
14
|
|
|
11
15
|
export interface TextMessage extends BaseMessage {
|
|
12
16
|
type: 'text'
|
|
@@ -23,6 +27,14 @@ export interface TextWithButtonsMessage extends BaseMessage {
|
|
|
23
27
|
}
|
|
24
28
|
}
|
|
25
29
|
|
|
30
|
+
export interface BotExecutorMessage extends BaseMessage {
|
|
31
|
+
type: 'botExecutor'
|
|
32
|
+
content: {
|
|
33
|
+
text: string
|
|
34
|
+
buttons: ButtonWithPayload[]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
26
38
|
interface CarouselElement {
|
|
27
39
|
title: string
|
|
28
40
|
subtitle: string
|
|
@@ -45,6 +57,7 @@ export interface ExitMessage extends BaseMessage {
|
|
|
45
57
|
export type OutputMessage =
|
|
46
58
|
| TextMessage
|
|
47
59
|
| TextWithButtonsMessage
|
|
60
|
+
| BotExecutorMessage
|
|
48
61
|
| CarouselMessage
|
|
49
62
|
| ExitMessage
|
|
50
63
|
|
package/src/plugins.ts
CHANGED
package/src/pusher-utils.ts
CHANGED
|
@@ -11,6 +11,6 @@ export function decompressData(compressedData: string): string {
|
|
|
11
11
|
const charData = strData.split('').map(x => x.charCodeAt(0)) // Convert binary string to character-number array
|
|
12
12
|
const binData = new Uint8Array(charData) // Turn number array into byte-array
|
|
13
13
|
const data = inflate(binData)
|
|
14
|
-
// @ts-
|
|
14
|
+
// @ts-expect-error
|
|
15
15
|
return String.fromCharCode.apply(null, new Uint8Array(data)) // Convert gunzipped byteArray back to ascii string
|
|
16
16
|
}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
PATH_PAYLOAD_IDENTIFIER,
|
|
5
5
|
PATH_PAYLOAD_REGEXP,
|
|
6
6
|
} from '../constants'
|
|
7
|
-
import {
|
|
7
|
+
import type {
|
|
8
8
|
Action,
|
|
9
9
|
BotContext,
|
|
10
10
|
Input,
|
|
@@ -27,7 +27,9 @@ export class NoMatchingRouteError extends Error {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export function isPathPayload(payload?: string): boolean {
|
|
30
|
-
if (!payload)
|
|
30
|
+
if (!payload) {
|
|
31
|
+
return false
|
|
32
|
+
}
|
|
31
33
|
const isPathPayload = PATH_PAYLOAD_REGEXP.exec(payload)
|
|
32
34
|
return Boolean(isPathPayload)
|
|
33
35
|
}
|
|
@@ -37,8 +39,12 @@ export function getPathParamsFromPathPayload(payload?: string): PathParams {
|
|
|
37
39
|
path: null,
|
|
38
40
|
params: {},
|
|
39
41
|
}
|
|
40
|
-
if (!payload)
|
|
41
|
-
|
|
42
|
+
if (!payload) {
|
|
43
|
+
return defaultPathParams
|
|
44
|
+
}
|
|
45
|
+
if (!isPathPayload(payload)) {
|
|
46
|
+
return defaultPathParams
|
|
47
|
+
}
|
|
42
48
|
try {
|
|
43
49
|
const pathWithParams = payload.split(PATH_PAYLOAD_IDENTIFIER)[1]
|
|
44
50
|
if (!pathWithParams) {
|
|
@@ -53,7 +59,9 @@ export function getPathParamsFromPathPayload(payload?: string): PathParams {
|
|
|
53
59
|
}
|
|
54
60
|
|
|
55
61
|
export function pathParamsToParams(pathParams?: string): Params {
|
|
56
|
-
if (!pathParams)
|
|
62
|
+
if (!pathParams) {
|
|
63
|
+
return {}
|
|
64
|
+
}
|
|
57
65
|
try {
|
|
58
66
|
const params = {}
|
|
59
67
|
const searchParams = new URLSearchParams(pathParams)
|
|
@@ -61,21 +69,27 @@ export function pathParamsToParams(pathParams?: string): Params {
|
|
|
61
69
|
params[key] = value
|
|
62
70
|
}
|
|
63
71
|
return params
|
|
64
|
-
} catch (
|
|
72
|
+
} catch (_e) {
|
|
65
73
|
return {}
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
|
|
69
77
|
export function getEmptyAction(childRoutes?: Route[]): Action {
|
|
70
|
-
if (!childRoutes)
|
|
78
|
+
if (!childRoutes) {
|
|
79
|
+
return null
|
|
80
|
+
}
|
|
71
81
|
const emptyActionRoute = childRoutes.find(r => r.path === EMPTY_ACTION_PATH)
|
|
72
|
-
if (!emptyActionRoute)
|
|
82
|
+
if (!emptyActionRoute) {
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
73
85
|
return emptyActionRoute.action
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
export function getNotFoundAction(input: Input, routes: Route[]): Action {
|
|
77
89
|
const notFoundActionRoute = routes.find(r => r.path === NOT_FOUND_PATH)
|
|
78
|
-
if (!notFoundActionRoute)
|
|
90
|
+
if (!notFoundActionRoute) {
|
|
91
|
+
throw new NoMatchingRouteError(input)
|
|
92
|
+
}
|
|
79
93
|
return notFoundActionRoute.action
|
|
80
94
|
}
|
|
81
95
|
|
package/src/routing/router.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NOT_FOUND_PATH } from '../constants'
|
|
2
2
|
import { RouteInspector } from '../debug/inspector'
|
|
3
|
-
import {
|
|
3
|
+
import type {
|
|
4
4
|
Input,
|
|
5
5
|
MatchedValue,
|
|
6
6
|
Matcher,
|
|
@@ -19,7 +19,6 @@ import {
|
|
|
19
19
|
getNotFoundAction,
|
|
20
20
|
getPathParamsFromPathPayload,
|
|
21
21
|
isPathPayload,
|
|
22
|
-
pathParamsToParams,
|
|
23
22
|
} from './router-utils'
|
|
24
23
|
|
|
25
24
|
export class Router {
|
|
@@ -68,7 +67,7 @@ export class Router {
|
|
|
68
67
|
* Independently of whether the redirectionRoute is found or not, the intent is to trigger a redirection which by definition breaks the flow, so retries are set to 0.
|
|
69
68
|
* It has preference over ignoring retries.
|
|
70
69
|
*/
|
|
71
|
-
if (matchedRoute
|
|
70
|
+
if (matchedRoute?.redirect) {
|
|
72
71
|
session.__retries = 0
|
|
73
72
|
const redirectionRoute = this.getRouteByPath(matchedRoute.redirect)
|
|
74
73
|
if (redirectionRoute) {
|
|
@@ -93,7 +92,7 @@ export class Router {
|
|
|
93
92
|
* Ignore Retry Scenario:
|
|
94
93
|
* We have matched a route with an ignore retry, so we return directly the new bot state. The intent is to break the flow, so retries are set to 0.
|
|
95
94
|
*/
|
|
96
|
-
if (matchedRoute
|
|
95
|
+
if (matchedRoute?.ignoreRetry) {
|
|
97
96
|
session.__retries = 0
|
|
98
97
|
return {
|
|
99
98
|
action: matchedRoute.action,
|
|
@@ -198,11 +197,13 @@ export class Router {
|
|
|
198
197
|
// Strip '[Object: null prototype]' from groups result: https://stackoverflow.com/a/62945609/6237608
|
|
199
198
|
params = { ...match.groups }
|
|
200
199
|
}
|
|
201
|
-
} catch (
|
|
200
|
+
} catch (_e) {}
|
|
202
201
|
return Boolean(match)
|
|
203
202
|
})
|
|
204
203
|
)
|
|
205
|
-
if (route)
|
|
204
|
+
if (route) {
|
|
205
|
+
return { route: cloneObject(route), params }
|
|
206
|
+
}
|
|
206
207
|
return null
|
|
207
208
|
}
|
|
208
209
|
|
|
@@ -214,23 +215,23 @@ export class Router {
|
|
|
214
215
|
path: RoutePath,
|
|
215
216
|
routeList: Route[] = this.routes
|
|
216
217
|
): Nullable<Route> {
|
|
217
|
-
if (!path)
|
|
218
|
+
if (!path) {
|
|
219
|
+
return null
|
|
220
|
+
}
|
|
218
221
|
const [currentPath, ...childPath] = path.split('/')
|
|
219
222
|
for (const route of routeList) {
|
|
220
223
|
// iterate over all routeList
|
|
221
224
|
if (route.path === currentPath) {
|
|
222
|
-
if (
|
|
223
|
-
route.childRoutes &&
|
|
224
|
-
route.childRoutes.length &&
|
|
225
|
-
childPath.length > 0
|
|
226
|
-
) {
|
|
225
|
+
if (route.childRoutes?.length && childPath.length > 0) {
|
|
227
226
|
// evaluate childroute over next actions
|
|
228
227
|
const computedRoute = this.getRouteByPath(
|
|
229
228
|
childPath.join('/'),
|
|
230
229
|
route.childRoutes
|
|
231
230
|
)
|
|
232
231
|
// IMPORTANT: Returning a new object to avoid modifying dev routes and introduce side effects
|
|
233
|
-
if (computedRoute)
|
|
232
|
+
if (computedRoute) {
|
|
233
|
+
return cloneObject(computedRoute)
|
|
234
|
+
}
|
|
234
235
|
} else if (childPath.length === 0) {
|
|
235
236
|
return cloneObject(route) // last action and found route
|
|
236
237
|
}
|
|
@@ -254,11 +255,17 @@ export class Router {
|
|
|
254
255
|
lastRoutePath: RoutePath
|
|
255
256
|
): MatchedValue {
|
|
256
257
|
let value: any = null
|
|
257
|
-
if (Object.keys(input).indexOf(prop) > -1)
|
|
258
|
-
|
|
259
|
-
else if (prop === '
|
|
260
|
-
|
|
261
|
-
else if (prop === '
|
|
258
|
+
if (Object.keys(input).indexOf(prop) > -1) {
|
|
259
|
+
value = input[prop]
|
|
260
|
+
} else if (prop === 'text') {
|
|
261
|
+
value = input.data
|
|
262
|
+
} else if (prop === 'input') {
|
|
263
|
+
value = input
|
|
264
|
+
} else if (prop === 'session') {
|
|
265
|
+
value = session
|
|
266
|
+
} else if (prop === 'request') {
|
|
267
|
+
value = { input, session, lastRoutePath }
|
|
268
|
+
}
|
|
262
269
|
const matched = this.matchValue(matcher, value)
|
|
263
270
|
if (matched) {
|
|
264
271
|
this.routeInspector.routeMatched(route, prop, matcher, value)
|
|
@@ -273,12 +280,18 @@ export class Router {
|
|
|
273
280
|
* If there is a match, it will return a truthy value (true, RegExp result), o.w., it will return a falsy value.
|
|
274
281
|
* */
|
|
275
282
|
matchValue(matcher: Matcher, value: any): MatchedValue {
|
|
276
|
-
if (typeof matcher === 'string')
|
|
283
|
+
if (typeof matcher === 'string') {
|
|
284
|
+
return value === matcher
|
|
285
|
+
}
|
|
277
286
|
if (matcher instanceof RegExp) {
|
|
278
|
-
if (value === undefined || value === null)
|
|
287
|
+
if (value === undefined || value === null) {
|
|
288
|
+
return false
|
|
289
|
+
}
|
|
279
290
|
return matcher.exec(value)
|
|
280
291
|
}
|
|
281
|
-
if (typeof matcher === 'function')
|
|
292
|
+
if (typeof matcher === 'function') {
|
|
293
|
+
return matcher(value)
|
|
294
|
+
}
|
|
282
295
|
return false
|
|
283
296
|
}
|
|
284
297
|
|
|
@@ -293,7 +306,9 @@ export class Router {
|
|
|
293
306
|
lastRoutePath: RoutePath
|
|
294
307
|
): RoutingState {
|
|
295
308
|
const currentRoute = this.getRouteByPath(lastRoutePath)
|
|
296
|
-
if (currentRoute && lastRoutePath)
|
|
309
|
+
if (currentRoute && lastRoutePath) {
|
|
310
|
+
currentRoute.path = lastRoutePath
|
|
311
|
+
}
|
|
297
312
|
if (typeof input.payload === 'string' && isPathPayload(input.payload)) {
|
|
298
313
|
return this.getRoutingStateFromPathPayload(currentRoute, input.payload)
|
|
299
314
|
}
|
|
@@ -309,7 +324,7 @@ export class Router {
|
|
|
309
324
|
session: Session
|
|
310
325
|
): RoutingState {
|
|
311
326
|
// get route depending of current ChildRoutes
|
|
312
|
-
if (currentRoute
|
|
327
|
+
if (currentRoute?.childRoutes) {
|
|
313
328
|
const routeParams = this.getRoute(
|
|
314
329
|
input,
|
|
315
330
|
currentRoute.childRoutes,
|
|
@@ -397,7 +412,9 @@ export class Router {
|
|
|
397
412
|
const routingState = getRoutingStateFromPath(
|
|
398
413
|
`${currentRoute.path}/${path}`
|
|
399
414
|
)
|
|
400
|
-
if (routingState.matchedRoute)
|
|
415
|
+
if (routingState.matchedRoute) {
|
|
416
|
+
return routingState
|
|
417
|
+
}
|
|
401
418
|
}
|
|
402
419
|
// 2. Received __PATH_PAYLOAD__Flow1/Subflow1, so we can resolve it directly
|
|
403
420
|
return getRoutingStateFromPath(path as string)
|