stentor-handler-manager 1.54.9 → 1.54.12
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/HandlerManager.js +8 -7
- package/lib/HandlerManager.js.map +1 -1
- package/lib/requestForPath.js +8 -7
- package/lib/requestForPath.js.map +1 -1
- package/package.json +10 -10
package/lib/HandlerManager.js
CHANGED
|
@@ -14,8 +14,9 @@ exports.HandlerManager = void 0;
|
|
|
14
14
|
const stentor_guards_1 = require("stentor-guards");
|
|
15
15
|
const stentor_handler_factory_1 = require("stentor-handler-factory");
|
|
16
16
|
const stentor_logger_1 = require("stentor-logger");
|
|
17
|
-
const
|
|
17
|
+
const stentor_guards_2 = require("stentor-guards");
|
|
18
18
|
const stentor_storage_1 = require("stentor-storage");
|
|
19
|
+
const stentor_utils_1 = require("stentor-utils");
|
|
19
20
|
const requestForPath_1 = require("./requestForPath");
|
|
20
21
|
class HandlerManager {
|
|
21
22
|
constructor(props) {
|
|
@@ -61,12 +62,12 @@ class HandlerManager {
|
|
|
61
62
|
// STEP #0 Try to get one from storage, either currentHandler or currentMediaHandler
|
|
62
63
|
const handlerFromStorage = this.factory.from(request, context);
|
|
63
64
|
if ((0, stentor_guards_1.isHandler)(handlerFromStorage) && handlerFromStorage.canHandleRequest(request, context)) {
|
|
64
|
-
(0, stentor_logger_1.log)().info(`Using handler from storage with id: ${handlerFromStorage.intentId} which can handle the request ${request.type}-${(0,
|
|
65
|
+
(0, stentor_logger_1.log)().info(`Using handler from storage with id: ${handlerFromStorage.intentId} which can handle the request ${request.type}-${(0, stentor_utils_1.keyFromRequest)(request)}`);
|
|
65
66
|
handler = handlerFromStorage;
|
|
66
67
|
}
|
|
67
68
|
// STEP #0.1 Another check, see if it is an InputUnknown request and it can handle it
|
|
68
|
-
if ((0, stentor_guards_1.isHandler)(handlerFromStorage) && (0,
|
|
69
|
-
(0, stentor_logger_1.log)().info(`Using handler from storage with id: ${handlerFromStorage.intentId} which can handle the request ${request.type}-${(0,
|
|
69
|
+
if ((0, stentor_guards_1.isHandler)(handlerFromStorage) && (0, stentor_guards_2.isInputUnknownRequest)(request) && handlerFromStorage.canHandleInputUnknown(request, context)) {
|
|
70
|
+
(0, stentor_logger_1.log)().info(`Using handler from storage with id: ${handlerFromStorage.intentId} which can handle the request ${request.type}-${(0, stentor_utils_1.keyFromRequest)(request)}`);
|
|
70
71
|
handler = handlerFromStorage;
|
|
71
72
|
}
|
|
72
73
|
// STEP #1 - Forwarding Path Check
|
|
@@ -102,7 +103,7 @@ class HandlerManager {
|
|
|
102
103
|
// we need to request one....
|
|
103
104
|
// if we didn't set the ID from the forwarding path
|
|
104
105
|
if (!id) {
|
|
105
|
-
id = (0,
|
|
106
|
+
id = (0, stentor_utils_1.keyFromRequest)(request);
|
|
106
107
|
}
|
|
107
108
|
// Error condition here, we don't have a handler and don't have an ID to request
|
|
108
109
|
if (!id) {
|
|
@@ -164,10 +165,10 @@ class HandlerManager {
|
|
|
164
165
|
// #4. Final error condition, we have no idea what is going on, throw an error
|
|
165
166
|
if (!handler) {
|
|
166
167
|
let helpfulErrorMessage;
|
|
167
|
-
if ((0,
|
|
168
|
+
if ((0, stentor_guards_2.isLaunchRequest)(request)) {
|
|
168
169
|
helpfulErrorMessage = `Request was a LaunchRequest with id:${id}`;
|
|
169
170
|
}
|
|
170
|
-
else if ((0,
|
|
171
|
+
else if ((0, stentor_guards_2.isIntentRequest)(request)) {
|
|
171
172
|
helpfulErrorMessage = `Intent request for ${request.intentId} with id: ${id}.`;
|
|
172
173
|
}
|
|
173
174
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerManager.js","sourceRoot":"","sources":["../src/HandlerManager.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,oCAAoC;AACpC,mDAAyD;AAEzD,qEAA8E;AAC9E,mDAAqC;AAErC,
|
|
1
|
+
{"version":3,"file":"HandlerManager.js","sourceRoot":"","sources":["../src/HandlerManager.ts"],"names":[],"mappings":"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"}
|
package/lib/requestForPath.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.requestForPath = void 0;
|
|
4
4
|
/*! Copyright (c) 2019, XAPPmedia */
|
|
5
|
+
const stentor_constants_1 = require("stentor-constants");
|
|
5
6
|
const stentor_logger_1 = require("stentor-logger");
|
|
6
|
-
const
|
|
7
|
+
const stentor_guards_1 = require("stentor-guards");
|
|
7
8
|
/**
|
|
8
9
|
* For the provided path, it updates the request.
|
|
9
10
|
*
|
|
@@ -20,10 +21,10 @@ function requestForPath(request, path) {
|
|
|
20
21
|
// see if it is START type
|
|
21
22
|
if (path.type === "START") {
|
|
22
23
|
// TODO: Do we need this request check anymore?
|
|
23
|
-
if ((0,
|
|
24
|
-
(0,
|
|
25
|
-
(0,
|
|
26
|
-
(0,
|
|
24
|
+
if ((0, stentor_guards_1.isIntentRequest)(request) ||
|
|
25
|
+
(0, stentor_guards_1.isLaunchRequest)(request) ||
|
|
26
|
+
(0, stentor_guards_1.isInputUnknownRequest)(request) ||
|
|
27
|
+
(0, stentor_guards_1.isOptionSelectRequest)(request)) {
|
|
27
28
|
(0, stentor_logger_1.log)().info(`Setting overrideKey on request to ${path.intentId}`);
|
|
28
29
|
request.overrideKey = path.intentId;
|
|
29
30
|
}
|
|
@@ -34,8 +35,8 @@ function requestForPath(request, path) {
|
|
|
34
35
|
if (path.slots) {
|
|
35
36
|
// TODO: is there a better way to achieve this?
|
|
36
37
|
// Slots always make it a IntentRequest
|
|
37
|
-
request.type =
|
|
38
|
-
if ((0,
|
|
38
|
+
request.type = stentor_constants_1.INTENT_REQUEST_TYPE;
|
|
39
|
+
if ((0, stentor_guards_1.isIntentRequest)(request)) {
|
|
39
40
|
request.slots = Object.assign({}, path.slots);
|
|
40
41
|
}
|
|
41
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestForPath.js","sourceRoot":"","sources":["../src/requestForPath.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,mDAAqC;AAErC,
|
|
1
|
+
{"version":3,"file":"requestForPath.js","sourceRoot":"","sources":["../src/requestForPath.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,yDAAwD;AACxD,mDAAqC;AAErC,mDAKwB;AAExB;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAAC,OAAgB,EAAE,IAAoB;IACjE,IAAI,CAAC,IAAI,EAAE;QACP,OAAO,OAAO,CAAC;KAClB;IAED,0BAA0B;IAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;QACvB,+CAA+C;QAC/C,IACI,IAAA,gCAAe,EAAC,OAAO,CAAC;YACxB,IAAA,gCAAe,EAAC,OAAO,CAAC;YACxB,IAAA,sCAAqB,EAAC,OAAO,CAAC;YAC9B,IAAA,sCAAqB,EAAC,OAAO,CAAC,EAChC;YACE,IAAA,oBAAG,GAAE,CAAC,IAAI,CAAC,qCAAqC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;SACvC;aAAM;YACH,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;SAC7F;KACJ;IAED,IAAI,IAAI,CAAC,KAAK,EAAE;QACZ,+CAA+C;QAC/C,uCAAuC;QACvC,OAAO,CAAC,IAAI,GAAG,uCAAmB,CAAC;QACnC,IAAI,IAAA,gCAAe,EAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,CAAC,KAAK,qBAAQ,IAAI,CAAC,KAAK,CAAE,CAAC;SACrC;KACJ;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AA/BD,wCA+BC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.54.
|
|
7
|
+
"version": "1.54.12",
|
|
8
8
|
"description": "Handler manager for stentor",
|
|
9
9
|
"types": "lib/index",
|
|
10
10
|
"main": "lib/index",
|
|
@@ -25,18 +25,18 @@
|
|
|
25
25
|
"mocha": "9.2.2",
|
|
26
26
|
"sinon": "13.0.1",
|
|
27
27
|
"sinon-chai": "3.7.0",
|
|
28
|
-
"stentor-models": "1.54.
|
|
28
|
+
"stentor-models": "1.54.12",
|
|
29
|
+
"stentor-request": "1.54.12",
|
|
29
30
|
"ts-node": "10.7.0",
|
|
30
31
|
"typescript": "4.6.3"
|
|
31
32
|
},
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"stentor-guards": "1.54.
|
|
34
|
-
"stentor-handler": "1.54.
|
|
35
|
-
"stentor-handler-factory": "1.54.
|
|
36
|
-
"stentor-logger": "1.54.
|
|
37
|
-
"stentor-
|
|
38
|
-
"stentor-
|
|
39
|
-
"stentor-storage": "1.54.9"
|
|
34
|
+
"stentor-guards": "1.54.12",
|
|
35
|
+
"stentor-handler": "1.54.12",
|
|
36
|
+
"stentor-handler-factory": "1.54.12",
|
|
37
|
+
"stentor-logger": "1.54.12",
|
|
38
|
+
"stentor-response": "1.54.12",
|
|
39
|
+
"stentor-storage": "1.54.12"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"stentor-models": "1.x"
|
|
@@ -46,5 +46,5 @@
|
|
|
46
46
|
"clean": "rm -rf ./lib/*",
|
|
47
47
|
"test": "mocha --recursive -r ts-node/register \"./src/**/*.test.ts\""
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "1a3c457eb1ffaafac05991ede1a4b7e0f3146ab0"
|
|
50
50
|
}
|