@intuitionrobotics/thunderstorm 0.41.67 → 0.41.70
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/app-backend/api/v1/utils/version/_assert.js +1 -1
- package/app-backend/api/v1/utils/version/_assert.js.map +1 -1
- package/app-backend/api/v1/utils/version/assert.js +13 -58
- package/app-backend/api/v1/utils/version/assert.js.map +1 -1
- package/app-backend/core/BaseStorm.js +34 -87
- package/app-backend/core/BaseStorm.js.map +1 -1
- package/app-backend/core/Storm.js +42 -112
- package/app-backend/core/Storm.js.map +1 -1
- package/app-backend/exceptions.js +11 -27
- package/app-backend/exceptions.js.map +1 -1
- package/app-backend/modules/CleanupScheduler.js +24 -92
- package/app-backend/modules/CleanupScheduler.js.map +1 -1
- package/app-backend/modules/FirestoreBackupScheduler.js +47 -138
- package/app-backend/modules/FirestoreBackupScheduler.js.map +1 -1
- package/app-backend/modules/ForceUpgrade.js +31 -82
- package/app-backend/modules/ForceUpgrade.js.map +1 -1
- package/app-backend/modules/http/AxiosHttpModule.js +116 -184
- package/app-backend/modules/http/AxiosHttpModule.js.map +1 -1
- package/app-backend/modules/proxy/RemoteProxy.js +40 -90
- package/app-backend/modules/proxy/RemoteProxy.js.map +1 -1
- package/app-backend/modules/proxy/RemoteProxyCaller.js +49 -122
- package/app-backend/modules/proxy/RemoteProxyCaller.js.map +1 -1
- package/app-backend/modules/server/HttpServer.js +153 -216
- package/app-backend/modules/server/HttpServer.js.map +1 -1
- package/app-backend/modules/server/server-api.js +236 -361
- package/app-backend/modules/server/server-api.js.map +1 -1
- package/app-backend/modules/server/server-errors.js +51 -91
- package/app-backend/modules/server/server-errors.js.map +1 -1
- package/app-backend/utils/LogClient_File.js +23 -42
- package/app-backend/utils/LogClient_File.js.map +1 -1
- package/app-backend/utils/file.js +7 -50
- package/app-backend/utils/file.js.map +1 -1
- package/app-backend/utils/promisify-request.js +13 -43
- package/app-backend/utils/promisify-request.js.map +1 -1
- package/app-backend/utils/to-be-removed.js +7 -8
- package/app-backend/utils/to-be-removed.js.map +1 -1
- package/app-backend/utils/types.js +1 -1
- package/app-backend/utils/types.js.map +1 -1
- package/app-frontend/components/ActionButton.js +5 -5
- package/app-frontend/components/ActionButton.js.map +1 -1
- package/app-frontend/components/DropDown.js +91 -119
- package/app-frontend/components/DropDown.js.map +1 -1
- package/app-frontend/components/FilterInput.js +31 -48
- package/app-frontend/components/FilterInput.js.map +1 -1
- package/app-frontend/components/GenericSelect.js +30 -59
- package/app-frontend/components/GenericSelect.js.map +1 -1
- package/app-frontend/components/GenericTabs.js +5 -23
- package/app-frontend/components/GenericTabs.js.map +1 -1
- package/app-frontend/components/Overlay.js +15 -34
- package/app-frontend/components/Overlay.js.map +1 -1
- package/app-frontend/components/TS_Input.js +43 -60
- package/app-frontend/components/TS_Input.js.map +1 -1
- package/app-frontend/components/TS_Table.js +31 -48
- package/app-frontend/components/TS_Table.js.map +1 -1
- package/app-frontend/components/TS_TextArea.js +21 -48
- package/app-frontend/components/TS_TextArea.js.map +1 -1
- package/app-frontend/components/Tabs.js +16 -33
- package/app-frontend/components/Tabs.js.map +1 -1
- package/app-frontend/components/adapter/Adapter.js +103 -154
- package/app-frontend/components/adapter/Adapter.js.map +1 -1
- package/app-frontend/components/adapter/BaseRenderer.js +9 -32
- package/app-frontend/components/adapter/BaseRenderer.js.map +1 -1
- package/app-frontend/components/checkbox/TS_Checkbox.js +12 -29
- package/app-frontend/components/checkbox/TS_Checkbox.js.map +1 -1
- package/app-frontend/components/checkbox/TS_CheckboxField.js +16 -34
- package/app-frontend/components/checkbox/TS_CheckboxField.js.map +1 -1
- package/app-frontend/components/form/Form.js +21 -39
- package/app-frontend/components/form/Form.js.map +1 -1
- package/app-frontend/components/playground/Example_NewProps.js +25 -53
- package/app-frontend/components/playground/Example_NewProps.js.map +1 -1
- package/app-frontend/components/playground/Playground.js +21 -49
- package/app-frontend/components/playground/Playground.js.map +1 -1
- package/app-frontend/components/tree/MenuComponent.js +11 -27
- package/app-frontend/components/tree/MenuComponent.js.map +1 -1
- package/app-frontend/components/tree/MultiTypeAdaptor.js +16 -32
- package/app-frontend/components/tree/MultiTypeAdaptor.js.map +1 -1
- package/app-frontend/components/tree/SimpleTreeNodeRenderer.js +18 -52
- package/app-frontend/components/tree/SimpleTreeNodeRenderer.js.map +1 -1
- package/app-frontend/components/tree/Tree.js +142 -178
- package/app-frontend/components/tree/Tree.js.map +1 -1
- package/app-frontend/components/treeicons.js +5 -5
- package/app-frontend/components/treeicons.js.map +1 -1
- package/app-frontend/core/AbstractThunder.js +27 -43
- package/app-frontend/core/AbstractThunder.js.map +1 -1
- package/app-frontend/core/AppPage.js +16 -32
- package/app-frontend/core/AppPage.js.map +1 -1
- package/app-frontend/core/AppWrapper.js +9 -10
- package/app-frontend/core/AppWrapper.js.map +1 -1
- package/app-frontend/core/BaseComponent.js +62 -106
- package/app-frontend/core/BaseComponent.js.map +1 -1
- package/app-frontend/core/SimpleScriptInjector.js +12 -31
- package/app-frontend/core/SimpleScriptInjector.js.map +1 -1
- package/app-frontend/core/Thunder.js +32 -48
- package/app-frontend/core/Thunder.js.map +1 -1
- package/app-frontend/core/thunder-dispatcher.js +18 -67
- package/app-frontend/core/thunder-dispatcher.js.map +1 -1
- package/app-frontend/modules/ConnectivityModule.js +16 -32
- package/app-frontend/modules/ConnectivityModule.js.map +1 -1
- package/app-frontend/modules/ForceUpgrade.js +17 -33
- package/app-frontend/modules/ForceUpgrade.js.map +1 -1
- package/app-frontend/modules/HistoryModule.js +51 -79
- package/app-frontend/modules/HistoryModule.js.map +1 -1
- package/app-frontend/modules/ResourcesModule.js +12 -28
- package/app-frontend/modules/ResourcesModule.js.map +1 -1
- package/app-frontend/modules/StorageModule.js +47 -68
- package/app-frontend/modules/StorageModule.js.map +1 -1
- package/app-frontend/modules/ThunderstormModule.js +15 -31
- package/app-frontend/modules/ThunderstormModule.js.map +1 -1
- package/app-frontend/modules/component-loader/ReactEntryComponentInjector.js +24 -41
- package/app-frontend/modules/component-loader/ReactEntryComponentInjector.js.map +1 -1
- package/app-frontend/modules/component-loader/entry-component-loading-module.js +19 -36
- package/app-frontend/modules/component-loader/entry-component-loading-module.js.map +1 -1
- package/app-frontend/modules/dialog/Dialog.js +55 -96
- package/app-frontend/modules/dialog/Dialog.js.map +1 -1
- package/app-frontend/modules/dialog/DialogModule.js +48 -84
- package/app-frontend/modules/dialog/DialogModule.js.map +1 -1
- package/app-frontend/modules/http/HttpClient.js +46 -93
- package/app-frontend/modules/http/HttpClient.js.map +1 -1
- package/app-frontend/modules/http/XhrHttpModule.js +66 -88
- package/app-frontend/modules/http/XhrHttpModule.js.map +1 -1
- package/app-frontend/modules/locale/LocaleModule.js +23 -50
- package/app-frontend/modules/locale/LocaleModule.js.map +1 -1
- package/app-frontend/modules/menu/MenuAndButton.js +23 -40
- package/app-frontend/modules/menu/MenuAndButton.js.map +1 -1
- package/app-frontend/modules/menu/MenuModule.js +25 -42
- package/app-frontend/modules/menu/MenuModule.js.map +1 -1
- package/app-frontend/modules/menu/PopupMenu.js +37 -64
- package/app-frontend/modules/menu/PopupMenu.js.map +1 -1
- package/app-frontend/modules/routing/RoutingModule.js +47 -66
- package/app-frontend/modules/routing/RoutingModule.js.map +1 -1
- package/app-frontend/modules/routing/route.js +31 -33
- package/app-frontend/modules/routing/route.js.map +1 -1
- package/app-frontend/modules/toaster/BaseToaster.js +18 -36
- package/app-frontend/modules/toaster/BaseToaster.js.map +1 -1
- package/app-frontend/modules/toaster/Toaster.js +12 -38
- package/app-frontend/modules/toaster/Toaster.js.map +1 -1
- package/app-frontend/modules/toaster/ToasterModule.js +61 -88
- package/app-frontend/modules/toaster/ToasterModule.js.map +1 -1
- package/app-frontend/modules/tooltip/Tooltip.js +25 -52
- package/app-frontend/modules/tooltip/Tooltip.js.map +1 -1
- package/app-frontend/modules/tooltip/TooltipModule.js +32 -51
- package/app-frontend/modules/tooltip/TooltipModule.js.map +1 -1
- package/app-frontend/tools/KeyboardListener.js +24 -41
- package/app-frontend/tools/KeyboardListener.js.map +1 -1
- package/app-frontend/tools/Stylable.js +14 -28
- package/app-frontend/tools/Stylable.js.map +1 -1
- package/app-frontend/utils/tools.js +8 -8
- package/app-frontend/utils/tools.js.map +1 -1
- package/app-frontend/widgets/FieldEditor.js +16 -32
- package/app-frontend/widgets/FieldEditor.js.map +1 -1
- package/app-frontend/widgets/FieldEditorClick.js +32 -49
- package/app-frontend/widgets/FieldEditorClick.js.map +1 -1
- package/app-frontend/widgets/FieldEditorWithButtons.js +33 -49
- package/app-frontend/widgets/FieldEditorWithButtons.js.map +1 -1
- package/app-frontend/widgets/click-to-drag/ClickToDrag.js +25 -41
- package/app-frontend/widgets/click-to-drag/ClickToDrag.js.map +1 -1
- package/app-frontend/widgets/click-to-drag/OverlayWithDocumentListener.js +22 -38
- package/app-frontend/widgets/click-to-drag/OverlayWithDocumentListener.js.map +1 -1
- package/package.json +4 -4
- package/shared/BaseHttpModule.js +44 -64
- package/shared/BaseHttpModule.js.map +1 -1
- package/shared/BaseHttpRequest.js +122 -176
- package/shared/BaseHttpRequest.js.map +1 -1
- package/shared/request-types.js +4 -19
- package/shared/request-types.js.map +1 -1
- package/test-backend/StormTester.js +37 -90
- package/test-backend/StormTester.js.map +1 -1
|
@@ -19,19 +19,6 @@
|
|
|
19
19
|
* See the License for the specific language governing permissions and
|
|
20
20
|
* limitations under the License.
|
|
21
21
|
*/
|
|
22
|
-
var __extends = (this && this.__extends) || (function () {
|
|
23
|
-
var extendStatics = function (d, b) {
|
|
24
|
-
extendStatics = Object.setPrototypeOf ||
|
|
25
|
-
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
26
|
-
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
27
|
-
return extendStatics(d, b);
|
|
28
|
-
};
|
|
29
|
-
return function (d, b) {
|
|
30
|
-
extendStatics(d, b);
|
|
31
|
-
function __() { this.constructor = d; }
|
|
32
|
-
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
22
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
23
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
24
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -41,427 +28,315 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
41
28
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
29
|
});
|
|
43
30
|
};
|
|
44
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
46
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
-
function step(op) {
|
|
49
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
-
while (_) try {
|
|
51
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
-
switch (op[0]) {
|
|
54
|
-
case 0: case 1: t = op; break;
|
|
55
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
-
default:
|
|
59
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
-
if (t[2]) _.ops.pop();
|
|
64
|
-
_.trys.pop(); continue;
|
|
65
|
-
}
|
|
66
|
-
op = body.call(thisArg, _);
|
|
67
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
var __spreadArrays = (this && this.__spreadArrays) || function () {
|
|
72
|
-
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
|
|
73
|
-
for (var r = Array(s), k = 0, i = 0; i < il; i++)
|
|
74
|
-
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
|
|
75
|
-
r[k] = a[j];
|
|
76
|
-
return r;
|
|
77
|
-
};
|
|
78
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
79
32
|
exports.ApiResponse = exports.ServerApi_Redirect = exports.ServerApi_Proxy = exports.ServerApi_Post = exports.ServerApi_Get = exports.ServerApi = void 0;
|
|
80
33
|
/**
|
|
81
34
|
* Created by tacb0ss on 11/07/2018.
|
|
82
35
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
36
|
+
const ts_common_1 = require("@intuitionrobotics/ts-common");
|
|
37
|
+
const url_1 = require("url");
|
|
38
|
+
const HttpServer_1 = require("./HttpServer");
|
|
86
39
|
// noinspection TypeScriptPreferShortImport
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
40
|
+
const types_1 = require("../../../shared/types");
|
|
41
|
+
const to_be_removed_1 = require("../../utils/to-be-removed");
|
|
42
|
+
const exceptions_1 = require("../../exceptions");
|
|
43
|
+
const RemoteProxy_1 = require("../proxy/RemoteProxy");
|
|
44
|
+
class ServerApi extends ts_common_1.Logger {
|
|
45
|
+
constructor(method, relativePath, tag) {
|
|
46
|
+
super(tag || relativePath);
|
|
47
|
+
this.printResponse = true;
|
|
48
|
+
this.headersToLog = [];
|
|
49
|
+
this.sideEffects = [];
|
|
50
|
+
this.assertProperty = to_be_removed_1.assertProperty;
|
|
51
|
+
this.callWrapper = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
yield this.call(req, res);
|
|
53
|
+
yield this.releaseSideEffects();
|
|
54
|
+
});
|
|
55
|
+
this.releaseSideEffects = () => __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
try {
|
|
57
|
+
yield Promise.all(this.sideEffects.map(sideEffect => sideEffect()));
|
|
58
|
+
}
|
|
59
|
+
catch (e) {
|
|
60
|
+
this.logError("Something went wrong while performing the side effects", e);
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
this.sideEffects = [];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
this.call = (req, res) => __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
const response = new ApiResponse(this, res);
|
|
68
|
+
this.logInfo(`Intercepted Url: ${req.path}`);
|
|
69
|
+
if (this.headersToLog.length > 0) {
|
|
70
|
+
const headers = {};
|
|
71
|
+
for (const headerName of this.headersToLog) {
|
|
72
|
+
headers[headerName] = req.header(headerName);
|
|
73
|
+
}
|
|
74
|
+
this.logDebug(`-- Headers: `, headers);
|
|
75
|
+
}
|
|
76
|
+
const reqQuery = url_1.parse(req.url, true).query;
|
|
77
|
+
if (reqQuery && typeof reqQuery === "object" && Object.keys(reqQuery).length)
|
|
78
|
+
this.logVerbose(`-- Url Params: `, reqQuery);
|
|
79
|
+
else
|
|
80
|
+
this.logVerbose(`-- No Params`);
|
|
81
|
+
const body = req.body;
|
|
82
|
+
if (body && ((typeof body === "object")))
|
|
83
|
+
this.logVerbose(`-- Body (Object): `, body);
|
|
84
|
+
else if (body && body.length)
|
|
85
|
+
this.logVerbose(`-- Body (String): `, body);
|
|
86
|
+
else
|
|
87
|
+
this.logVerbose(`-- No Body`);
|
|
88
|
+
const requestData = {
|
|
89
|
+
method: this.method,
|
|
90
|
+
originalUrl: req.path,
|
|
91
|
+
headers: req.headers,
|
|
92
|
+
url: req.url,
|
|
93
|
+
query: reqQuery,
|
|
94
|
+
body: body
|
|
95
|
+
};
|
|
96
|
+
try {
|
|
97
|
+
this.bodyValidator && ts_common_1.validate(body, this.bodyValidator);
|
|
98
|
+
this.queryValidator && ts_common_1.validate(reqQuery, this.queryValidator);
|
|
99
|
+
if (this.middlewares)
|
|
100
|
+
yield Promise.all(this.middlewares.map(m => m(req, requestData)));
|
|
101
|
+
const toReturn = yield this.process(req, response, reqQuery, body);
|
|
102
|
+
if (response.isConsumed())
|
|
103
|
+
return;
|
|
104
|
+
if (!toReturn)
|
|
105
|
+
return yield response.end(200);
|
|
106
|
+
// TODO need to handle stream and buffers
|
|
107
|
+
// if (Buffer.isBuffer(toReturn))
|
|
108
|
+
// return response.stream(200, toReturn as Buffer);
|
|
109
|
+
const responseType = typeof toReturn;
|
|
110
|
+
if (responseType === "object")
|
|
111
|
+
return yield response.json(200, toReturn);
|
|
112
|
+
if (responseType === "string" && toReturn.toLowerCase().startsWith("<html"))
|
|
113
|
+
return yield response.html(200, toReturn);
|
|
114
|
+
return yield response.text(200, toReturn);
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
let e = err;
|
|
118
|
+
let severity = ts_common_1.ServerErrorSeverity.Warning;
|
|
119
|
+
if (typeof e === "string")
|
|
120
|
+
e = new ts_common_1.BadImplementationException(`String was thrown: ${e}`);
|
|
121
|
+
if (!(e instanceof Error) && typeof e === "object")
|
|
122
|
+
e = new ts_common_1.BadImplementationException(`Object instance was thrown: ${JSON.stringify(e)}`);
|
|
123
|
+
try {
|
|
124
|
+
this.logErrorBold(e);
|
|
109
125
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
return __generator(this, function (_a) {
|
|
115
|
-
switch (_a.label) {
|
|
116
|
-
case 0:
|
|
117
|
-
_a.trys.push([0, 2, 3, 4]);
|
|
118
|
-
return [4 /*yield*/, Promise.all(this.sideEffects.map(function (sideEffect) { return sideEffect(); }))];
|
|
119
|
-
case 1:
|
|
120
|
-
_a.sent();
|
|
121
|
-
return [3 /*break*/, 4];
|
|
122
|
-
case 2:
|
|
123
|
-
e_1 = _a.sent();
|
|
124
|
-
this.logError("Something went wrong while performing the side effects", e_1);
|
|
125
|
-
return [3 /*break*/, 4];
|
|
126
|
-
case 3:
|
|
127
|
-
this.sideEffects = [];
|
|
128
|
-
return [7 /*endfinally*/];
|
|
129
|
-
case 4: return [2 /*return*/];
|
|
126
|
+
catch (e2) {
|
|
127
|
+
this.logErrorBold("Error while handling error on request...", e2);
|
|
128
|
+
this.logErrorBold(`Original error thrown: ${JSON.stringify(e)}`);
|
|
129
|
+
this.logErrorBold(`-- Someone was stupid... you MUST only throw an Error and not objects or strings!! --`);
|
|
130
130
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.logVerbose("-- Url Params: ", reqQuery);
|
|
151
|
-
else
|
|
152
|
-
this.logVerbose("-- No Params");
|
|
153
|
-
body = req.body;
|
|
154
|
-
if (body && ((typeof body === "object")))
|
|
155
|
-
this.logVerbose("-- Body (Object): ", body);
|
|
156
|
-
else if (body && body.length)
|
|
157
|
-
this.logVerbose("-- Body (String): ", body);
|
|
158
|
-
else
|
|
159
|
-
this.logVerbose("-- No Body");
|
|
160
|
-
requestData = {
|
|
161
|
-
method: this.method,
|
|
162
|
-
originalUrl: req.path,
|
|
163
|
-
headers: req.headers,
|
|
164
|
-
url: req.url,
|
|
165
|
-
query: reqQuery,
|
|
166
|
-
body: body
|
|
167
|
-
};
|
|
168
|
-
_b.label = 1;
|
|
169
|
-
case 1:
|
|
170
|
-
_b.trys.push([1, 12, , 18]);
|
|
171
|
-
this.bodyValidator && ts_common_1.validate(body, this.bodyValidator);
|
|
172
|
-
this.queryValidator && ts_common_1.validate(reqQuery, this.queryValidator);
|
|
173
|
-
if (!this.middlewares) return [3 /*break*/, 3];
|
|
174
|
-
return [4 /*yield*/, Promise.all(this.middlewares.map(function (m) { return m(req, requestData); }))];
|
|
175
|
-
case 2:
|
|
176
|
-
_b.sent();
|
|
177
|
-
_b.label = 3;
|
|
178
|
-
case 3: return [4 /*yield*/, this.process(req, response, reqQuery, body)];
|
|
179
|
-
case 4:
|
|
180
|
-
toReturn = _b.sent();
|
|
181
|
-
if (response.isConsumed())
|
|
182
|
-
return [2 /*return*/];
|
|
183
|
-
if (!!toReturn) return [3 /*break*/, 6];
|
|
184
|
-
return [4 /*yield*/, response.end(200)];
|
|
185
|
-
case 5: return [2 /*return*/, _b.sent()];
|
|
186
|
-
case 6:
|
|
187
|
-
responseType = typeof toReturn;
|
|
188
|
-
if (!(responseType === "object")) return [3 /*break*/, 8];
|
|
189
|
-
return [4 /*yield*/, response.json(200, toReturn)];
|
|
190
|
-
case 7: return [2 /*return*/, _b.sent()];
|
|
191
|
-
case 8:
|
|
192
|
-
if (!(responseType === "string" && toReturn.toLowerCase().startsWith("<html"))) return [3 /*break*/, 10];
|
|
193
|
-
return [4 /*yield*/, response.html(200, toReturn)];
|
|
194
|
-
case 9: return [2 /*return*/, _b.sent()];
|
|
195
|
-
case 10: return [4 /*yield*/, response.text(200, toReturn)];
|
|
196
|
-
case 11: return [2 /*return*/, _b.sent()];
|
|
197
|
-
case 12:
|
|
198
|
-
err_1 = _b.sent();
|
|
199
|
-
e = err_1;
|
|
131
|
+
if (ts_common_1.isErrorOfType(e, ts_common_1.ValidationException))
|
|
132
|
+
e = new exceptions_1.ApiException(400, "Validator exception", e);
|
|
133
|
+
if (!ts_common_1.isErrorOfType(e, exceptions_1.ApiException))
|
|
134
|
+
e = new exceptions_1.ApiException(500, "Unexpected server error", e);
|
|
135
|
+
const apiException = ts_common_1.isErrorOfType(e, exceptions_1.ApiException);
|
|
136
|
+
if (!apiException)
|
|
137
|
+
throw new ts_common_1.MUSTNeverHappenException("MUST NEVER REACH HERE!!!");
|
|
138
|
+
if (apiException.responseCode >= 500)
|
|
139
|
+
severity = ts_common_1.ServerErrorSeverity.Error;
|
|
140
|
+
else if (apiException.responseCode >= 400)
|
|
141
|
+
severity = ts_common_1.ServerErrorSeverity.Warning;
|
|
142
|
+
switch (apiException.responseCode) {
|
|
143
|
+
case 401:
|
|
144
|
+
severity = ts_common_1.ServerErrorSeverity.Debug;
|
|
145
|
+
break;
|
|
146
|
+
case 404:
|
|
147
|
+
severity = ts_common_1.ServerErrorSeverity.Info;
|
|
148
|
+
break;
|
|
149
|
+
case 403:
|
|
200
150
|
severity = ts_common_1.ServerErrorSeverity.Warning;
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
this.logErrorBold("-- Someone was stupid... you MUST only throw an Error and not objects or strings!! --");
|
|
212
|
-
}
|
|
213
|
-
if (ts_common_1.isErrorOfType(e, ts_common_1.ValidationException))
|
|
214
|
-
e = new exceptions_1.ApiException(400, "Validator exception", e);
|
|
215
|
-
if (!ts_common_1.isErrorOfType(e, exceptions_1.ApiException))
|
|
216
|
-
e = new exceptions_1.ApiException(500, "Unexpected server error", e);
|
|
217
|
-
apiException = ts_common_1.isErrorOfType(e, exceptions_1.ApiException);
|
|
218
|
-
if (!apiException)
|
|
219
|
-
throw new ts_common_1.MUSTNeverHappenException("MUST NEVER REACH HERE!!!");
|
|
220
|
-
if (apiException.responseCode >= 500)
|
|
221
|
-
severity = ts_common_1.ServerErrorSeverity.Error;
|
|
222
|
-
else if (apiException.responseCode >= 400)
|
|
223
|
-
severity = ts_common_1.ServerErrorSeverity.Warning;
|
|
224
|
-
switch (apiException.responseCode) {
|
|
225
|
-
case 401:
|
|
226
|
-
severity = ts_common_1.ServerErrorSeverity.Debug;
|
|
227
|
-
break;
|
|
228
|
-
case 404:
|
|
229
|
-
severity = ts_common_1.ServerErrorSeverity.Info;
|
|
230
|
-
break;
|
|
231
|
-
case 403:
|
|
232
|
-
severity = ts_common_1.ServerErrorSeverity.Warning;
|
|
233
|
-
break;
|
|
234
|
-
case 500:
|
|
235
|
-
severity = ts_common_1.ServerErrorSeverity.Critical;
|
|
236
|
-
break;
|
|
237
|
-
}
|
|
238
|
-
return [4 /*yield*/, HttpServer_1.HttpServer.errorMessageComposer(requestData, apiException)];
|
|
239
|
-
case 13:
|
|
240
|
-
message = _b.sent();
|
|
241
|
-
_b.label = 14;
|
|
242
|
-
case 14:
|
|
243
|
-
_b.trys.push([14, 16, , 17]);
|
|
244
|
-
return [4 /*yield*/, ts_common_1.dispatch_onServerError.dispatchModuleAsync([severity,
|
|
245
|
-
HttpServer_1.HttpServer,
|
|
246
|
-
message])];
|
|
247
|
-
case 15:
|
|
248
|
-
_b.sent();
|
|
249
|
-
return [3 /*break*/, 17];
|
|
250
|
-
case 16:
|
|
251
|
-
e_2 = _b.sent();
|
|
252
|
-
this.logError("Error while handing server error", e_2);
|
|
253
|
-
return [3 /*break*/, 17];
|
|
254
|
-
case 17:
|
|
255
|
-
if (apiException.responseCode === 500)
|
|
256
|
-
return [2 /*return*/, response.serverError(apiException)];
|
|
257
|
-
return [2 /*return*/, response.exception(apiException)];
|
|
258
|
-
case 18: return [2 /*return*/];
|
|
151
|
+
break;
|
|
152
|
+
case 500:
|
|
153
|
+
severity = ts_common_1.ServerErrorSeverity.Critical;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
const message = yield HttpServer_1.HttpServer.errorMessageComposer(requestData, apiException);
|
|
157
|
+
try {
|
|
158
|
+
yield ts_common_1.dispatch_onServerError.dispatchModuleAsync([severity,
|
|
159
|
+
HttpServer_1.HttpServer,
|
|
160
|
+
message]);
|
|
259
161
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
162
|
+
catch (e) {
|
|
163
|
+
this.logError("Error while handing server error", e);
|
|
164
|
+
}
|
|
165
|
+
if (apiException.responseCode === 500)
|
|
166
|
+
return response.serverError(apiException);
|
|
167
|
+
return response.exception(apiException);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
this.setMinLevel(ServerApi.isDebug ? ts_common_1.LogLevel.Verbose : ts_common_1.LogLevel.Info);
|
|
171
|
+
this.method = method;
|
|
172
|
+
this.relativePath = `${relativePath}`;
|
|
173
|
+
}
|
|
174
|
+
addSideEffect(sideEffect) {
|
|
268
175
|
this.sideEffects.push(sideEffect);
|
|
269
176
|
return this;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
var middlewares = [];
|
|
273
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
274
|
-
middlewares[_i] = arguments[_i];
|
|
275
|
-
}
|
|
177
|
+
}
|
|
178
|
+
setMiddlewares(...middlewares) {
|
|
276
179
|
this.middlewares = middlewares;
|
|
277
180
|
return this;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
for (var _i = 0; _i < arguments.length; _i++) {
|
|
282
|
-
middlewares[_i] = arguments[_i];
|
|
283
|
-
}
|
|
284
|
-
this.middlewares = __spreadArrays((this.middlewares || []), middlewares);
|
|
181
|
+
}
|
|
182
|
+
addMiddlewares(...middlewares) {
|
|
183
|
+
this.middlewares = [...(this.middlewares || []), ...middlewares];
|
|
285
184
|
return this;
|
|
286
|
-
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
headersToLog[_i] = arguments[_i];
|
|
292
|
-
}
|
|
293
|
-
(_a = this.headersToLog).push.apply(_a, headersToLog);
|
|
294
|
-
};
|
|
295
|
-
ServerApi.prototype.setBodyValidator = function (bodyValidator) {
|
|
185
|
+
}
|
|
186
|
+
addHeaderToLog(...headersToLog) {
|
|
187
|
+
this.headersToLog.push(...headersToLog);
|
|
188
|
+
}
|
|
189
|
+
setBodyValidator(bodyValidator) {
|
|
296
190
|
this.bodyValidator = bodyValidator;
|
|
297
|
-
}
|
|
298
|
-
|
|
191
|
+
}
|
|
192
|
+
setQueryValidator(queryValidator) {
|
|
299
193
|
this.queryValidator = queryValidator;
|
|
300
|
-
}
|
|
301
|
-
|
|
194
|
+
}
|
|
195
|
+
asProxy() {
|
|
302
196
|
return new ServerApi_Proxy(this);
|
|
303
|
-
}
|
|
304
|
-
|
|
197
|
+
}
|
|
198
|
+
getUrl() {
|
|
305
199
|
return this.url;
|
|
306
|
-
}
|
|
307
|
-
|
|
200
|
+
}
|
|
201
|
+
dontPrintResponse() {
|
|
308
202
|
// @ts-ignore
|
|
309
203
|
this.printResponse = false;
|
|
310
|
-
}
|
|
311
|
-
|
|
204
|
+
}
|
|
205
|
+
setMaxResponsePrintSize(printResponseMaxSizeBytes) {
|
|
312
206
|
// @ts-ignore
|
|
313
207
|
this.printResponse = printResponseMaxSizeBytes > -1;
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
|
|
208
|
+
}
|
|
209
|
+
route(router, prefixUrl) {
|
|
210
|
+
const fullPath = `${prefixUrl ? prefixUrl : ""}/${this.relativePath}`;
|
|
317
211
|
this.setTag(fullPath);
|
|
318
212
|
router[this.method](fullPath, this.callWrapper);
|
|
319
|
-
this.url =
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
}(ts_common_1.Logger));
|
|
213
|
+
this.url = `${HttpServer_1.HttpServer.getBaseUrl()}${fullPath}`;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
323
216
|
exports.ServerApi = ServerApi;
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
return _super.call(this, types_1.HttpMethod.GET, apiName) || this;
|
|
217
|
+
class ServerApi_Get extends ServerApi {
|
|
218
|
+
constructor(apiName) {
|
|
219
|
+
super(types_1.HttpMethod.GET, apiName);
|
|
328
220
|
}
|
|
329
|
-
|
|
330
|
-
}(ServerApi));
|
|
221
|
+
}
|
|
331
222
|
exports.ServerApi_Get = ServerApi_Get;
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
return _super.call(this, types_1.HttpMethod.POST, apiName) || this;
|
|
223
|
+
class ServerApi_Post extends ServerApi {
|
|
224
|
+
constructor(apiName) {
|
|
225
|
+
super(types_1.HttpMethod.POST, apiName);
|
|
336
226
|
}
|
|
337
|
-
|
|
338
|
-
}(ServerApi));
|
|
227
|
+
}
|
|
339
228
|
exports.ServerApi_Post = ServerApi_Post;
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
return __generator(this, function (_a) {
|
|
351
|
-
// @ts-ignore
|
|
352
|
-
return [2 /*return*/, this.api.process(request, response, queryParams, body)];
|
|
353
|
-
});
|
|
229
|
+
class ServerApi_Proxy extends ServerApi {
|
|
230
|
+
constructor(api) {
|
|
231
|
+
super(api.method, `${api.relativePath}/proxy`);
|
|
232
|
+
this.api = api;
|
|
233
|
+
this.setMiddlewares(RemoteProxy_1.RemoteProxy.Middleware);
|
|
234
|
+
}
|
|
235
|
+
process(request, response, queryParams, body) {
|
|
236
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
237
|
+
// @ts-ignore
|
|
238
|
+
return this.api.process(request, response, queryParams, body);
|
|
354
239
|
});
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
}(ServerApi));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
358
242
|
exports.ServerApi_Proxy = ServerApi_Proxy;
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
var query;
|
|
370
|
-
return __generator(this, function (_a) {
|
|
371
|
-
query = queryParams ? ts_common_1._keys(queryParams).reduce(function (c, k) { return c + '&' + k + '=' + queryParams[k]; }, '?') : '';
|
|
372
|
-
response.redirect(this.responseCode, "" + HttpServer_1.HttpServer.getBaseUrl() + this.redirectUrl + query);
|
|
373
|
-
return [2 /*return*/];
|
|
374
|
-
});
|
|
243
|
+
class ServerApi_Redirect extends ServerApi {
|
|
244
|
+
constructor(apiName, responseCode, redirectUrl) {
|
|
245
|
+
super(types_1.HttpMethod.ALL, apiName);
|
|
246
|
+
this.responseCode = responseCode;
|
|
247
|
+
this.redirectUrl = redirectUrl;
|
|
248
|
+
}
|
|
249
|
+
process(request, response, queryParams, body) {
|
|
250
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
251
|
+
const query = queryParams ? ts_common_1._keys(queryParams).reduce((c, k) => c + '&' + k + '=' + queryParams[k], '?') : '';
|
|
252
|
+
response.redirect(this.responseCode, `${HttpServer_1.HttpServer.getBaseUrl()}${this.redirectUrl}${query}`);
|
|
375
253
|
});
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
}(ServerApi));
|
|
254
|
+
}
|
|
255
|
+
}
|
|
379
256
|
exports.ServerApi_Redirect = ServerApi_Redirect;
|
|
380
|
-
|
|
381
|
-
|
|
257
|
+
class ApiResponse {
|
|
258
|
+
constructor(api, res) {
|
|
382
259
|
this.consumed = false;
|
|
383
260
|
this.api = api;
|
|
384
261
|
this.res = res;
|
|
385
262
|
}
|
|
386
|
-
|
|
263
|
+
isConsumed() {
|
|
387
264
|
return this.consumed;
|
|
388
|
-
}
|
|
389
|
-
|
|
265
|
+
}
|
|
266
|
+
consume() {
|
|
390
267
|
if (this.consumed) {
|
|
391
268
|
this.api.logError("This API was already satisfied!!", new Error());
|
|
392
269
|
return;
|
|
393
270
|
}
|
|
394
271
|
this.consumed = true;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
var _this = this;
|
|
272
|
+
}
|
|
273
|
+
stream(responseCode, stream, headers) {
|
|
398
274
|
this.consume();
|
|
399
275
|
this.printHeaders(headers);
|
|
400
276
|
this.res.set(headers);
|
|
401
277
|
this.res.writeHead(responseCode);
|
|
402
278
|
stream.pipe(this.res, { end: false });
|
|
403
|
-
stream.on('end',
|
|
404
|
-
|
|
279
|
+
stream.on('end', () => {
|
|
280
|
+
this.res.end();
|
|
405
281
|
});
|
|
406
|
-
}
|
|
407
|
-
|
|
282
|
+
}
|
|
283
|
+
printHeaders(headers) {
|
|
408
284
|
if (!headers)
|
|
409
|
-
return this.api.logVerbose(
|
|
410
|
-
this.api.logVerbose(
|
|
411
|
-
}
|
|
412
|
-
|
|
285
|
+
return this.api.logVerbose(` -- No response headers`);
|
|
286
|
+
this.api.logVerbose(` -- Response with headers: `, headers);
|
|
287
|
+
}
|
|
288
|
+
printResponse(response) {
|
|
413
289
|
if (!response)
|
|
414
|
-
return this.api.logVerbose(
|
|
290
|
+
return this.api.logVerbose(` -- No response body`);
|
|
415
291
|
if (!this.api.printResponse)
|
|
416
|
-
return this.api.logVerbose(
|
|
417
|
-
this.api.logVerbose(
|
|
418
|
-
}
|
|
419
|
-
|
|
292
|
+
return this.api.logVerbose(` -- Response: -- Not Printing --`);
|
|
293
|
+
this.api.logVerbose(` -- Response:`, response);
|
|
294
|
+
}
|
|
295
|
+
code(responseCode, headers) {
|
|
420
296
|
this.printHeaders(headers);
|
|
421
297
|
this.end(responseCode, "", headers);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
|
|
298
|
+
}
|
|
299
|
+
text(responseCode, response, _headers) {
|
|
300
|
+
const headers = (_headers || {});
|
|
425
301
|
headers["content-type"] = "text/plain";
|
|
426
302
|
this.end(responseCode, response, headers);
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
|
|
303
|
+
}
|
|
304
|
+
html(responseCode, response, _headers) {
|
|
305
|
+
const headers = (_headers || {});
|
|
430
306
|
headers["content-type"] = "text/html";
|
|
431
307
|
this.end(responseCode, response, headers);
|
|
432
|
-
}
|
|
433
|
-
|
|
308
|
+
}
|
|
309
|
+
json(responseCode, response, _headers) {
|
|
434
310
|
this._json(responseCode, response, _headers);
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
|
|
311
|
+
}
|
|
312
|
+
_json(responseCode, response, _headers) {
|
|
313
|
+
const headers = (_headers || {});
|
|
438
314
|
headers["content-type"] = "application/json";
|
|
439
315
|
this.end(responseCode, response, headers);
|
|
440
|
-
}
|
|
441
|
-
|
|
316
|
+
}
|
|
317
|
+
end(responseCode, response, headers) {
|
|
442
318
|
this.consume();
|
|
443
319
|
this.printHeaders(headers);
|
|
444
320
|
this.printResponse(response);
|
|
445
321
|
this.res.set(headers);
|
|
446
322
|
this.res.writeHead(responseCode);
|
|
447
323
|
this.res.end(typeof response !== "string" ? JSON.stringify(response, null, 2) : response);
|
|
448
|
-
}
|
|
449
|
-
|
|
324
|
+
}
|
|
325
|
+
redirect(responseCode, url) {
|
|
450
326
|
this.consume();
|
|
451
327
|
this.res.redirect(responseCode, url);
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
|
|
328
|
+
}
|
|
329
|
+
exception(exception, headers) {
|
|
330
|
+
const responseBody = exception.responseBody;
|
|
455
331
|
if (!ServerApi.isDebug)
|
|
456
332
|
delete responseBody.debugMessage;
|
|
457
333
|
this._json(exception.responseCode, responseBody, headers);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
334
|
+
}
|
|
335
|
+
serverError(error, headers) {
|
|
336
|
+
const stack = error.cause ? error.cause.stack : error.stack;
|
|
337
|
+
const message = (error.cause ? error.cause.message : error.message) || "";
|
|
462
338
|
this.text(500, ServerApi.isDebug && stack ? stack : message, headers);
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
}());
|
|
339
|
+
}
|
|
340
|
+
}
|
|
466
341
|
exports.ApiResponse = ApiResponse;
|
|
467
342
|
//# sourceMappingURL=server-api.js.map
|