badmfck-api-server 3.9.7 → 3.9.9
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/dist/apiServer/APIService.d.ts +0 -1
- package/dist/apiServer/APIService.js +2 -3
- package/dist/apiServer/BaseEndpoint.js +2 -2
- package/dist/apiServer/DBService.d.ts +1 -1
- package/dist/apiServer/helper/UID.js +2 -2
- package/dist/apiServer/helper/Validator.d.ts +10 -4
- package/dist/apiServer/helper/Validator.js +71 -66
- package/dist/apiServer/helper/ZipUtils.d.ts +8 -0
- package/dist/apiServer/helper/ZipUtils.js +28 -0
- package/dist/apiServer/interceptors/IntHmacSha256.d.ts +5 -0
- package/dist/apiServer/interceptors/IntHmacSha256.js +22 -0
- package/dist/apiServer/structures/DefaultErrors.d.ts +4 -3
- package/dist/apiServer/structures/DefaultErrors.js +5 -4
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
- package/dist/apiServer/APIService.js.map +0 -1
- package/dist/apiServer/BaseEndpoint.js.map +0 -1
- package/dist/apiServer/BaseService.js.map +0 -1
- package/dist/apiServer/ClusterService.d.ts +0 -30
- package/dist/apiServer/ClusterService.js +0 -81
- package/dist/apiServer/ClusterService.js.map +0 -1
- package/dist/apiServer/DocumentService.js.map +0 -1
- package/dist/apiServer/HUBService.d.ts +0 -37
- package/dist/apiServer/HUBService.js +0 -132
- package/dist/apiServer/HUBService.js.map +0 -1
- package/dist/apiServer/LocalRequest.js.map +0 -1
- package/dist/apiServer/LogService.js.map +0 -1
- package/dist/apiServer/MysqlService.js.map +0 -1
- package/dist/apiServer/WSAPITransport.js.map +0 -1
- package/dist/apiServer/WebSocketHandler.js.map +0 -1
- package/dist/apiServer/Websocket.d.ts +0 -8
- package/dist/apiServer/Websocket.js +0 -15
- package/dist/apiServer/WebsocketService.d.ts +0 -8
- package/dist/apiServer/WebsocketService.js +0 -18
- package/dist/apiServer/WebsocketService.js.map +0 -1
- package/dist/apiServer/cluster/HUBConnection.d.ts +0 -39
- package/dist/apiServer/cluster/HUBConnection.js +0 -251
- package/dist/apiServer/cluster/HUBConnection.js.map +0 -1
- package/dist/apiServer/cluster/HUBHandlres.d.ts +0 -0
- package/dist/apiServer/cluster/HUBHandlres.js +0 -2
- package/dist/apiServer/cluster/HUBHandlres.js.map +0 -1
- package/dist/apiServer/deployment/Deployment.js.map +0 -1
- package/dist/apiServer/helper/DataProvider.js.map +0 -1
- package/dist/apiServer/helper/Sleep.js.map +0 -1
- package/dist/apiServer/helper/UID.js.map +0 -1
- package/dist/apiServer/helper/Validator.js.map +0 -1
- package/dist/apiServer/monitor/Monitor.js.map +0 -1
- package/dist/apiServer/routes/Liveness.js.map +0 -1
- package/dist/apiServer/routes/Monitor.d.ts +0 -9
- package/dist/apiServer/routes/Monitor.js +0 -77
- package/dist/apiServer/routes/Readiness.js.map +0 -1
- package/dist/apiServer/structures/DefaultErrors.js.map +0 -1
- package/dist/apiServer/structures/HTTPStatus.js.map +0 -1
- package/dist/apiServer/structures/Interfaces.js.map +0 -1
@@ -1,18 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.WebsocketService = void 0;
|
4
|
-
const BaseService_1 = require("./BaseService");
|
5
|
-
const getDefaultWebSocketServiceOptions = () => {
|
6
|
-
return {};
|
7
|
-
};
|
8
|
-
class WebsocketService extends BaseService_1.BaseService {
|
9
|
-
options;
|
10
|
-
constructor(opt) {
|
11
|
-
super("WebsocketService");
|
12
|
-
this.options = { ...getDefaultWebSocketServiceOptions(), opt };
|
13
|
-
}
|
14
|
-
async init() {
|
15
|
-
super.init();
|
16
|
-
}
|
17
|
-
}
|
18
|
-
exports.WebsocketService = WebsocketService;
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"WebsocketService.js","sourceRoot":"","sources":["../../src/apiServer/WebsocketService.ts"],"names":[],"mappings":";;;AAAA,+CAA4C;AAM5C,MAAM,iCAAiC,GAAG,GAA2B,EAAE;IACnE,OAAO,EAEN,CAAA;AACL,CAAC,CAAA;AAGD,MAAa,gBAAiB,SAAQ,yBAAW;IAC7C,OAAO,CAA0B;IACjC,YAAY,GAA6B;QACrC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,EAAC,GAAG,iCAAiC,EAAE,EAAC,GAAG,EAAC,CAAA;IAC/D,CAAC;IAED,KAAK,CAAC,IAAI;QACN,KAAK,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;CACJ;AAVD,4CAUC","sourcesContent":["import { BaseService } from \"./BaseService\";\n\nexport interface IWebSocketServiceOptions{\n\n}\n\nconst getDefaultWebSocketServiceOptions = ():IWebSocketServiceOptions=>{\n return {\n\n }\n}\n\n\nexport class WebsocketService extends BaseService{\n options:IWebSocketServiceOptions;\n constructor(opt?:IWebSocketServiceOptions){\n super(\"WebsocketService\");\n this.options = {...getDefaultWebSocketServiceOptions(),opt}\n }\n\n async init(){\n super.init();\n }\n}"]}
|
@@ -1,39 +0,0 @@
|
|
1
|
-
import { WebSocket } from "ws";
|
2
|
-
import { IError } from "../structures/Interfaces";
|
3
|
-
import Signal, { Req } from "badmfck-signal";
|
4
|
-
export interface IClusterPacket {
|
5
|
-
method: string;
|
6
|
-
data?: any | null;
|
7
|
-
error?: IError;
|
8
|
-
callbackID: number;
|
9
|
-
}
|
10
|
-
export interface IHUBConnectionOptions {
|
11
|
-
direction: "incoming" | "outgoing";
|
12
|
-
ws: WebSocket;
|
13
|
-
hostID: string;
|
14
|
-
hostPrivateKey: string;
|
15
|
-
hostPublicKey: string;
|
16
|
-
hostURL: string;
|
17
|
-
targetID: string | null;
|
18
|
-
targetPublicKey: string | null;
|
19
|
-
targetURL: string | null;
|
20
|
-
onAuthorized: () => void;
|
21
|
-
onClose: () => void;
|
22
|
-
handlers: (Req<any, any> | Signal<any>)[];
|
23
|
-
maxTimeout?: number;
|
24
|
-
}
|
25
|
-
export declare class HUBConnection {
|
26
|
-
static callbackID: number;
|
27
|
-
private callbacks;
|
28
|
-
authorized: boolean;
|
29
|
-
private ws;
|
30
|
-
private onAuthorized;
|
31
|
-
options: IHUBConnectionOptions;
|
32
|
-
constructor(options: IHUBConnectionOptions);
|
33
|
-
sendAuth(): Promise<void>;
|
34
|
-
authorize(data: any): Promise<any | IError>;
|
35
|
-
handleCallback(data: IClusterPacket): void;
|
36
|
-
sendCallback(callbackID: number, data: IError | any): void;
|
37
|
-
send(packet: IClusterPacket): Promise<any | IError | null>;
|
38
|
-
close(): void;
|
39
|
-
}
|
@@ -1,251 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
-
exports.HUBConnection = void 0;
|
27
|
-
const ws_1 = require("ws");
|
28
|
-
const LogService_1 = require("../LogService");
|
29
|
-
const DefaultErrors_1 = __importStar(require("../structures/DefaultErrors"));
|
30
|
-
class HUBConnection {
|
31
|
-
static callbackID = 1;
|
32
|
-
callbacks = new Map();
|
33
|
-
authorized = false;
|
34
|
-
ws;
|
35
|
-
onAuthorized;
|
36
|
-
options;
|
37
|
-
constructor(options) {
|
38
|
-
(0, LogService_1.logInfo)("HUBConnection: new connection", options.hostID, options.targetID, options.direction === "outgoing" ? options.ws.url + " -->" : " <--");
|
39
|
-
this.options = options;
|
40
|
-
this.ws = options.ws;
|
41
|
-
this.onAuthorized = options.onAuthorized;
|
42
|
-
this.ws.on("close", () => {
|
43
|
-
if (!this.authorized)
|
44
|
-
return;
|
45
|
-
(0, LogService_1.logInfo)("HUBConnection: connection closed");
|
46
|
-
if (options.onClose)
|
47
|
-
options.onClose();
|
48
|
-
});
|
49
|
-
this.ws.on("error", (e) => {
|
50
|
-
(0, LogService_1.logError)("HUBConnection: connection error", e);
|
51
|
-
});
|
52
|
-
this.ws.on("open", () => {
|
53
|
-
(0, LogService_1.logInfo)("HUBConnection: connection opened", options.direction);
|
54
|
-
if (options.direction === "outgoing") {
|
55
|
-
(0, LogService_1.logInfo)("HUBConnection: send authroization");
|
56
|
-
this.sendAuth();
|
57
|
-
}
|
58
|
-
});
|
59
|
-
this.ws.on("message", async (msg, isBinary) => {
|
60
|
-
if (isBinary) {
|
61
|
-
(0, LogService_1.logError)("HUBConnection: invalid packet type, must be a string");
|
62
|
-
return;
|
63
|
-
}
|
64
|
-
let data = null;
|
65
|
-
try {
|
66
|
-
data = JSON.parse(msg.toString("utf8"));
|
67
|
-
}
|
68
|
-
catch (e) { }
|
69
|
-
if (!data || !data.method) {
|
70
|
-
(0, LogService_1.logError)("HUBConnection: invalid packet structure", data);
|
71
|
-
return;
|
72
|
-
}
|
73
|
-
if (typeof data.method !== "string") {
|
74
|
-
(0, LogService_1.logError)("HUBConnection: invalid packet structure", data);
|
75
|
-
return;
|
76
|
-
}
|
77
|
-
const callbackID = parseInt(data.callbackID);
|
78
|
-
if (data.method === "callback") {
|
79
|
-
this.handleCallback(data);
|
80
|
-
return;
|
81
|
-
}
|
82
|
-
;
|
83
|
-
if (!this.authorized && data.method === "auth") {
|
84
|
-
const result = await this.authorize(data.data);
|
85
|
-
if (DefaultErrors_1.ErrorUtils.isError(result)) {
|
86
|
-
(0, LogService_1.logError)("HUBConnection: authorization failed", result);
|
87
|
-
this.sendCallback(callbackID, result);
|
88
|
-
return;
|
89
|
-
}
|
90
|
-
this.authorized = true;
|
91
|
-
if (this.onAuthorized)
|
92
|
-
this.onAuthorized();
|
93
|
-
this.sendCallback(callbackID, result);
|
94
|
-
return;
|
95
|
-
}
|
96
|
-
if (!this.authorized) {
|
97
|
-
(0, LogService_1.logError)("HUBConnection: not authorized");
|
98
|
-
this.sendCallback(callbackID, DefaultErrors_1.default.UNAUTHORIZED);
|
99
|
-
return;
|
100
|
-
}
|
101
|
-
for (let i of options.handlers) {
|
102
|
-
if (i.name === data.method) {
|
103
|
-
const requestPacket = {
|
104
|
-
data: data.data,
|
105
|
-
authorized: this.authorized,
|
106
|
-
connection: this
|
107
|
-
};
|
108
|
-
if (i.type === "signal") {
|
109
|
-
i.invoke(requestPacket);
|
110
|
-
if (data.callbackID > 0)
|
111
|
-
this.sendCallback(callbackID, {});
|
112
|
-
return;
|
113
|
-
}
|
114
|
-
else if (i.type === "request") {
|
115
|
-
const result = await i.request(requestPacket);
|
116
|
-
this.sendCallback(callbackID, result);
|
117
|
-
return;
|
118
|
-
}
|
119
|
-
}
|
120
|
-
}
|
121
|
-
if (callbackID > 0)
|
122
|
-
this.sendCallback(callbackID, { ...DefaultErrors_1.default.NOT_IMPLEMENTED, details: "method not found: " + data.method });
|
123
|
-
else
|
124
|
-
(0, LogService_1.logError)("HUBConnection: method not found", data.method);
|
125
|
-
});
|
126
|
-
setTimeout(() => {
|
127
|
-
if (!this.authorized) {
|
128
|
-
(0, LogService_1.logError)("HUBConnection: authorization timeout", this.authorized);
|
129
|
-
this.close();
|
130
|
-
}
|
131
|
-
}, 15000);
|
132
|
-
setInterval(() => {
|
133
|
-
const now = +new Date();
|
134
|
-
for (let [key, value] of this.callbacks) {
|
135
|
-
if (now - value.time > (options.maxTimeout ?? 1000 * 60 * 15)) {
|
136
|
-
value.callback({ method: "callback", data: null, callbackID: key, error: { ...DefaultErrors_1.default.TIMEOUT } });
|
137
|
-
this.callbacks.delete(key);
|
138
|
-
}
|
139
|
-
}
|
140
|
-
}, options.maxTimeout || 1000 * 60 * 15);
|
141
|
-
}
|
142
|
-
async sendAuth() {
|
143
|
-
const response = await this.send({
|
144
|
-
method: "auth",
|
145
|
-
data: {
|
146
|
-
hostID: this.options.targetID,
|
147
|
-
targetPublicKey: this.options.hostPublicKey,
|
148
|
-
targetURL: this.options.hostURL,
|
149
|
-
targetID: this.options.hostID
|
150
|
-
},
|
151
|
-
callbackID: 1
|
152
|
-
});
|
153
|
-
if (DefaultErrors_1.ErrorUtils.isError(response)) {
|
154
|
-
(0, LogService_1.logError)("HUBConnection: auth failed", response);
|
155
|
-
this.close();
|
156
|
-
return;
|
157
|
-
}
|
158
|
-
this.authorized = true;
|
159
|
-
if (!response || !response.hostID || !response.hostPublicKey || !response.hostURL) {
|
160
|
-
(0, LogService_1.logError)("HUBConnection: invalid auth response", response);
|
161
|
-
this.close();
|
162
|
-
return;
|
163
|
-
}
|
164
|
-
this.options.targetID = response.hostID;
|
165
|
-
this.options.targetPublicKey = response.hostPublicKey;
|
166
|
-
this.options.targetURL = response.hostURL;
|
167
|
-
if (this.onAuthorized)
|
168
|
-
this.onAuthorized();
|
169
|
-
}
|
170
|
-
async authorize(data) {
|
171
|
-
if (typeof data !== "object" || !data || !data.hostID || !data.targetPublicKey || !data.targetID || !data.targetURL)
|
172
|
-
return { ...DefaultErrors_1.default.BAD_REQUEST, stack: [data], details: "expecting {hostID:string,targetPublicKey:string,targetID:string,targetURL:string}" };
|
173
|
-
if (data.hostID !== this.options.hostID)
|
174
|
-
return { ...DefaultErrors_1.default.UNAUTHORIZED, details: "invalid targetID" };
|
175
|
-
this.options.targetID = data.targetID;
|
176
|
-
this.options.targetPublicKey = data.targetPublicKey;
|
177
|
-
this.options.targetURL = data.targetURL;
|
178
|
-
return {
|
179
|
-
hostID: this.options.hostID,
|
180
|
-
hostPublicKey: this.options.hostPublicKey,
|
181
|
-
hostURL: this.options.hostURL
|
182
|
-
};
|
183
|
-
}
|
184
|
-
handleCallback(data) {
|
185
|
-
if (!this.callbacks.has(data.callbackID)) {
|
186
|
-
(0, LogService_1.logError)("HUBConnection: callback not found", data);
|
187
|
-
return;
|
188
|
-
}
|
189
|
-
const cb = this.callbacks.get(data.callbackID);
|
190
|
-
if (cb) {
|
191
|
-
cb.callback(data.data ?? data.error);
|
192
|
-
this.callbacks.delete(data.callbackID);
|
193
|
-
}
|
194
|
-
}
|
195
|
-
sendCallback(callbackID, data) {
|
196
|
-
if (isNaN(callbackID) || callbackID <= 0) {
|
197
|
-
(0, LogService_1.logError)("HUBConnection: invalid callbackID", callbackID, data);
|
198
|
-
return;
|
199
|
-
}
|
200
|
-
if (this.ws && this.ws.readyState === ws_1.WebSocket.OPEN) {
|
201
|
-
this.ws.send(JSON.stringify({
|
202
|
-
method: "callback",
|
203
|
-
error: DefaultErrors_1.ErrorUtils.isError(data) ? data : null,
|
204
|
-
data: DefaultErrors_1.ErrorUtils.isError(data) ? null : data,
|
205
|
-
callbackID: callbackID
|
206
|
-
}));
|
207
|
-
}
|
208
|
-
else {
|
209
|
-
(0, LogService_1.logError)("HUBConnection: ws not connected, cant send callback", this.options.direction, data);
|
210
|
-
}
|
211
|
-
}
|
212
|
-
async send(packet) {
|
213
|
-
if (!this.ws || this.ws.readyState !== ws_1.WebSocket.OPEN) {
|
214
|
-
(0, LogService_1.logError)("HUBConnection: ws not connected, cant send packet", packet);
|
215
|
-
return { ...DefaultErrors_1.default.SERVICE_NOT_WORKING, details: "ws not connected" };
|
216
|
-
}
|
217
|
-
let cb = null;
|
218
|
-
const promise = new Promise((resolve) => cb = resolve);
|
219
|
-
if (packet.callbackID > 0) {
|
220
|
-
const callbackID = HUBConnection.callbackID++;
|
221
|
-
this.callbacks.set(callbackID, { time: +new Date(), callback: cb });
|
222
|
-
packet.callbackID = callbackID;
|
223
|
-
}
|
224
|
-
this.ws.send(JSON.stringify(packet), err => {
|
225
|
-
if (err) {
|
226
|
-
(0, LogService_1.logError)("HUBConnection: cant send packet", err);
|
227
|
-
if (packet.callbackID > 0)
|
228
|
-
this.callbacks.delete(packet.callbackID);
|
229
|
-
cb(DefaultErrors_1.default.SERVICE_NOT_WORKING);
|
230
|
-
}
|
231
|
-
});
|
232
|
-
if (packet.callbackID === 0)
|
233
|
-
return null;
|
234
|
-
return promise;
|
235
|
-
}
|
236
|
-
close() {
|
237
|
-
(0, LogService_1.logInfo)("HUBConnection: close connection");
|
238
|
-
this.callbacks.clear();
|
239
|
-
this.authorized = false;
|
240
|
-
if (this.ws) {
|
241
|
-
try {
|
242
|
-
this.ws.removeAllListeners();
|
243
|
-
this.ws.close();
|
244
|
-
this.ws.terminate();
|
245
|
-
}
|
246
|
-
catch (e) { }
|
247
|
-
}
|
248
|
-
}
|
249
|
-
}
|
250
|
-
exports.HUBConnection = HUBConnection;
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCQ29ubmVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGlTZXJ2ZXIvY2x1c3Rlci9IVUJDb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkJBQXdDO0FBQ3hDLDhDQUFrRDtBQUNsRCw2RUFBd0U7QUFnQ3hFLE1BQWEsYUFBYTtJQUN0QixNQUFNLENBQUMsVUFBVSxHQUFRLENBQUMsQ0FBQztJQUNuQixTQUFTLEdBQThELElBQUksR0FBRyxFQUFFLENBQUM7SUFDekYsVUFBVSxHQUFXLEtBQUssQ0FBQztJQUNuQixFQUFFLENBQVc7SUFDYixZQUFZLENBQVU7SUFDOUIsT0FBTyxDQUF1QjtJQUU5QixZQUFZLE9BQTZCO1FBRXJDLElBQUEsb0JBQU8sRUFBQywrQkFBK0IsRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUMsT0FBTyxDQUFDLFNBQVMsS0FBRyxVQUFVLENBQUEsQ0FBQyxDQUFBLE9BQU8sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUEsTUFBTSxDQUFDLENBQUM7UUFFckksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtRQUd4QyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUMsR0FBRSxFQUFFO1lBQ25CLElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVTtnQkFDZixPQUFPO1lBQ1gsSUFBQSxvQkFBTyxFQUFDLGtDQUFrQyxDQUFDLENBQUE7WUFDM0MsSUFBRyxPQUFPLENBQUMsT0FBTztnQkFDZCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFD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QUFDO2dCQUNoQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3ZCO1lBQUEsT0FBTSxDQUFDLEVBQUMsR0FBRTtTQUNkO0lBQ0wsQ0FBQzs7QUFoVEwsc0NBa1RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmF3RGF0YSwgV2ViU29ja2V0IH0gZnJvbSBcIndzXCI7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nSW5mbyB9IGZyb20gXCIuLi9Mb2dTZXJ2aWNlXCI7XG5pbXBvcnQgRGVmYXVsdEVycm9ycywgeyBFcnJvclV0aWxzIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvRGVmYXVsdEVycm9yc1wiO1xuaW1wb3J0IHsgSUVycm9yIH0gZnJvbSBcIi4uL3N0cnVjdHVyZXMvSW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgcHJpdmF0ZURlY3J5cHQgfSBmcm9tIFwiY3J5cHRvXCI7XG5pbXBvcnQgU2lnbmFsLCB7IFJlcSB9IGZyb20gXCJiYWRtZmNrLXNpZ25hbFwiO1xuaW1wb3J0IHsgSVdlYnNvY2tldFBhY2tldCB9IGZyb20gXCIuLi9leHRlcm5hbC9FeHRlcm5hbFNlcnZpY2VcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQ2x1c3RlclBhY2tldHtcbiAgICBtZXRob2Q6c3RyaW5nLFxuICAgIGRhdGE/OmFueXxudWxsLFxuICAgIGVycm9yPzpJRXJyb3IsXG4gICAgY2FsbGJhY2tJRDpudW1iZXJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSFVCQ29ubmVjdGlvbk9wdGlvbnN7XG4gICAgZGlyZWN0aW9uOlwiaW5jb21pbmdcInxcIm91dGdvaW5nXCIsXG4gICAgd3M6V2ViU29ja2V0LFxuXG4gICAgaG9zdElEOnN0cmluZyxcbiAgICBob3N0UHJpdmF0ZUtleTpzdHJpbmcsXG4gICAgaG9zdFB1YmxpY0tleTpzdHJpbmcsXG4gICAgaG9zdFVSTDpzdHJpbmcsXG5cbiAgICB0YXJnZXRJRDpzdHJpbmd8bnVsbCxcbiAgICB0YXJnZXRQdWJsaWNLZXk6c3RyaW5nfG51bGwsXG4gICAgdGFyZ2V0VVJMOnN0cmluZ3xudWxsLFxuXG4gICAgb25BdXRob3JpemVkOigpPT52b2lkLFxuICAgIG9uQ2xvc2U6KCk9PnZvaWQsXG4gICAgaGFuZGxlcnM6KFJlcTxhbnksYW55PnxTaWduYWw8YW55PilbXSxcbiAgICBtYXhUaW1lb3V0PzpudW1iZXJcbn1cblxuZXhwb3J0IGNsYXNzIEhVQkNvbm5lY3Rpb257XG4gICAgc3RhdGljIGNhbGxiYWNrSUQ6bnVtYmVyPTE7XG4gICAgcHJpdmF0ZSBjYWxsYmFja3M6TWFwPG51bWJlcix7dGltZTpudW1iZXIsY2FsbGJhY2s6KHJlc3VsdDphbnl8SUVycm9yKT0+dm9pZH0+PW5ldyBNYXAoKTtcbiAgICBhdXRob3JpemVkOmJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIHdzOldlYlNvY2tldDtcbiAgICBwcml2YXRlIG9uQXV0aG9yaXplZDooKT0+dm9pZDtcbiAgICBvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucztcbiAgICBcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zOklIVUJDb25uZWN0aW9uT3B0aW9ucyl7XG4gICAgICAgIFxuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogbmV3IGNvbm5lY3Rpb25cIixvcHRpb25zLmhvc3RJRCxvcHRpb25zLnRhcmdldElELG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiP29wdGlvbnMud3MudXJsK1wiIC0tPlwiOlwiIDwtLVwiKTtcblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLndzID0gb3B0aW9ucy53cztcbiAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQgPSBvcHRpb25zLm9uQXV0aG9yaXplZFxuICAgICAgICBcblxuICAgICAgICB0aGlzLndzLm9uKFwiY2xvc2VcIiwoKT0+e1xuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBjbG9zZWRcIilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMub25DbG9zZSlcbiAgICAgICAgICAgICAgICBvcHRpb25zLm9uQ2xvc2UoKTtcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLndzLm9uKFwiZXJyb3JcIiwoZSk9PntcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBlcnJvclwiLGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLndzLm9uKFwib3BlblwiLCgpPT57XG4gICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY29ubmVjdGlvbiBvcGVuZWRcIixvcHRpb25zLmRpcmVjdGlvbilcbiAgICAgICAgICAgIGlmKG9wdGlvbnMuZGlyZWN0aW9uPT09XCJvdXRnb2luZ1wiKXtcbiAgICAgICAgICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRocm9pemF0aW9uXCIpXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQXV0aCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMud3Mub24oXCJtZXNzYWdlXCIsYXN5bmMgKG1zZzpSYXdEYXRhLGlzQmluYXJ5KT0+e1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihpc0JpbmFyeSl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCB0eXBlLCBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGRhdGEgPSBudWxsO1xuICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgIGRhdGEgPSBKU09OLnBhcnNlKG1zZy50b1N0cmluZyhcInV0ZjhcIikpXG4gICAgICAgICAgICB9Y2F0Y2goZSl7fVxuXG4gICAgICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiBtZXNzYWdlIHJlY2VpdmVkXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKTtcblxuICAgICAgICAgICAgLy8gY2hlY2sgcGFja2V0IHN0cnVjdHVyZVxuICAgICAgICAgICAgaWYoIWRhdGEgfHwgIWRhdGEubWV0aG9kKXtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgcGFja2V0IHN0cnVjdHVyZVwiLGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIHBhY2tldHNcbiAgICAgICAgICAgIGlmKHR5cGVvZiBkYXRhLm1ldGhvZCAhPT0gXCJzdHJpbmdcIil7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBpbnZhbGlkIHBhY2tldCBzdHJ1Y3R1cmVcIixkYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGNhbGxiYWNrSURcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBwYXJzZUludChkYXRhLmNhbGxiYWNrSUQpO1xuICAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gaGFuZGxlIGNhbGxiYWNrc1xuICAgICAgICAgICAgIGlmKGRhdGEubWV0aG9kPT09XCJjYWxsYmFja1wiKXtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCAmJiBkYXRhLm1ldGhvZD09PVwiYXV0aFwiKXtcbiAgICAgICAgICAgICAgICAvLyBkbyBhdXRob3JpemF0aW9uICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuYXV0aG9yaXplKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3VsdCkpe1xuICAgICAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGhvcml6YXRpb24gZmFpbGVkXCIscmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5vbkF1dGhvcml6ZWQpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BdXRob3JpemVkKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kQ2FsbGJhY2soY2FsbGJhY2tJRCxyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoIXRoaXMuYXV0aG9yaXplZCl7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiBub3QgYXV0aG9yaXplZFwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELERlZmF1bHRFcnJvcnMuVU5BVVRIT1JJWkVEKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGhhbmRsZSBtZXRob2RzXG4gICAgICAgICAgICBmb3IobGV0IGkgb2Ygb3B0aW9ucy5oYW5kbGVycyl7XG4gICAgICAgICAgICAgICAgaWYoaS5uYW1lID09PSBkYXRhLm1ldGhvZCl7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBhY2tldDpJV2Vic29ja2V0UGFja2V0PXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6ZGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZDp0aGlzLmF1dGhvcml6ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uOnRoaXNcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmKGkudHlwZSA9PT0gXCJzaWduYWxcIil7XG4gICAgICAgICAgICAgICAgICAgICAgICAoaSBhcyBTaWduYWw8SVdlYnNvY2tldFBhY2tldD4pLmludm9rZShyZXF1ZXN0UGFja2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuY2FsbGJhY2tJRD4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VuZENhbGxiYWNrKGNhbGxiYWNrSUQse30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpLnR5cGUgPT09IFwicmVxdWVzdFwiKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpIGFzIFJlcTxJV2Vic29ja2V0UGFja2V0LGFueT4pLnJlcXVlc3QocmVxdWVzdFBhY2tldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICB0aGlzLnNlbmRDYWxsYmFjayhjYWxsYmFja0lELHsuLi5EZWZhdWx0RXJyb3JzLk5PVF9JTVBMRU1FTlRFRCxkZXRhaWxzOlwibWV0aG9kIG5vdCBmb3VuZDogXCIrZGF0YS5tZXRob2R9KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IG1ldGhvZCBub3QgZm91bmRcIixkYXRhLm1ldGhvZCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgXG4gICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIGlmKCF0aGlzLmF1dGhvcml6ZWQpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXphdGlvbiB0aW1lb3V0XCIsdGhpcy5hdXRob3JpemVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwxNTAwMCk7IC8vIDE1c2VjIGZvciBhdXRob3JpemF0aW9uXG4gICAgICAgIFxuXG4gICAgICAgIHNldEludGVydmFsKCgpPT57XG4gICAgICAgICAgICBjb25zdCBub3cgPSArbmV3IERhdGUoKTtcbiAgICAgICAgICAgIGZvcihsZXQgW2tleSx2YWx1ZV0gb2YgdGhpcy5jYWxsYmFja3Mpe1xuICAgICAgICAgICAgICAgIGlmKG5vdy12YWx1ZS50aW1lPihvcHRpb25zLm1heFRpbWVvdXQgPz8gMTAwMCo2MCoxNSkpe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5jYWxsYmFjayh7bWV0aG9kOlwiY2FsbGJhY2tcIixkYXRhOm51bGwsY2FsbGJhY2tJRDprZXksZXJyb3I6ey4uLkRlZmF1bHRFcnJvcnMuVElNRU9VVH19KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LG9wdGlvbnMubWF4VGltZW91dCB8fCAxMDAwKjYwKjE1KTtcblxuICAgIH1cblxuXG4gICAgYXN5bmMgc2VuZEF1dGgoKXtcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBhdXRoIHBhY2tldFwiKVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZCh7XG4gICAgICAgICAgICBtZXRob2Q6XCJhdXRoXCIsXG4gICAgICAgICAgICBkYXRhOntcbiAgICAgICAgICAgICAgICBob3N0SUQ6dGhpcy5vcHRpb25zLnRhcmdldElELCAvLyBSRU1PVEUgSE9TVCBJRFxuICAgICAgICAgICAgICAgIHRhcmdldFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSwgLy8gTE9DQUwgUFVCTElDIEtFWVxuICAgICAgICAgICAgICAgIHRhcmdldFVSTDp0aGlzLm9wdGlvbnMuaG9zdFVSTCwgLy8gTE9DQUwgVVJMXG4gICAgICAgICAgICAgICAgdGFyZ2V0SUQ6dGhpcy5vcHRpb25zLmhvc3RJRCAvLyBMT0NBTCBIT1NUIElEXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2tJRDoxXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYoRXJyb3JVdGlscy5pc0Vycm9yKHJlc3BvbnNlKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGF1dGggZmFpbGVkXCIscmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdXRob3JpemVkPXRydWU7XG4gICAgICAgIFxuICAgICAgICBpZighcmVzcG9uc2UgfHwgIXJlc3BvbnNlLmhvc3RJRCB8fCAhcmVzcG9uc2UuaG9zdFB1YmxpY0tleSB8fCAhcmVzcG9uc2UuaG9zdFVSTCl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGludmFsaWQgYXV0aCByZXNwb25zZVwiLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gc3RvcmUgdGFyZ2V0SUQsIHRhcmdldFB1YmxpY0tleSwgdGFyZ2V0VVJMXG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRJRCA9IHJlc3BvbnNlLmhvc3RJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IHJlc3BvbnNlLmhvc3RQdWJsaWNLZXk7XG4gICAgICAgIHRoaXMub3B0aW9ucy50YXJnZXRVUkwgPSByZXNwb25zZS5ob3N0VVJMO1xuICAgICAgICBcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aCBzdWNjZXNzXCIscmVzcG9uc2UpO1xuXG4gICAgICAgIGlmKHRoaXMub25BdXRob3JpemVkKVxuICAgICAgICAgICAgdGhpcy5vbkF1dGhvcml6ZWQoKTtcbiAgICAgICAgXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogXG4gICAgICogQHBhcmFtIGRhdGEgLT4ge3NpZ25hdHVyZTplbmNyeXB0ZWQgaHViIGtleSxwdWJsaWNLZXk6ZW5jcnlwdGVkIHB1YmxpYyBrZXksIGNsaWVudElEOmNsaWVudElEfVxuICAgICAqIEByZXR1cm5zIFxuICAgICAqL1xuICAgIGFzeW5jIGF1dGhvcml6ZShkYXRhOmFueSk6UHJvbWlzZTxhbnl8SUVycm9yPntcblxuICAgICAgICAvL2xvZ0luZm8oXCJIVUJDb25uZWN0aW9uOiB0cnkgdG8gYXV0aG9yaXplIGNvbm5lY3Rpb25cIixkYXRhKTtcblxuICAgICAgICBpZih0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIiB8fCAhZGF0YSB8fCAhZGF0YS5ob3N0SUQgfHwgIWRhdGEudGFyZ2V0UHVibGljS2V5IHx8ICFkYXRhLnRhcmdldElEIHx8ICFkYXRhLnRhcmdldFVSTClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5CQURfUkVRVUVTVCxzdGFjazpbZGF0YV0sZGV0YWlsczpcImV4cGVjdGluZyB7aG9zdElEOnN0cmluZyx0YXJnZXRQdWJsaWNLZXk6c3RyaW5nLHRhcmdldElEOnN0cmluZyx0YXJnZXRVUkw6c3RyaW5nfVwifTtcblxuICAgICAgICBpZihkYXRhLmhvc3RJRCAhPT0gdGhpcy5vcHRpb25zLmhvc3RJRClcbiAgICAgICAgICAgIHJldHVybiB7Li4uRGVmYXVsdEVycm9ycy5VTkFVVEhPUklaRUQsZGV0YWlsczpcImludmFsaWQgdGFyZ2V0SURcIn07XG5cbiAgICAgICAgLy9sb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogYXV0aG9yaXplIHN1Y2Nlc3NcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLGRhdGEpO1xuXG4gICAgICAgIC8vMS4gc3RvcmUgdGFyZ2V0IGluZm9cbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldElEID0gZGF0YS50YXJnZXRJRDtcbiAgICAgICAgdGhpcy5vcHRpb25zLnRhcmdldFB1YmxpY0tleSA9IGRhdGEudGFyZ2V0UHVibGljS2V5O1xuICAgICAgICB0aGlzLm9wdGlvbnMudGFyZ2V0VVJMID0gZGF0YS50YXJnZXRVUkw7XG5cbiAgICAgICAgLy8yLiBzZW5kIGxvY2FsIGluZm9cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhvc3RJRDp0aGlzLm9wdGlvbnMuaG9zdElELFxuICAgICAgICAgICAgaG9zdFB1YmxpY0tleTp0aGlzLm9wdGlvbnMuaG9zdFB1YmxpY0tleSxcbiAgICAgICAgICAgIGhvc3RVUkw6dGhpcy5vcHRpb25zLmhvc3RVUkxcbiAgICAgICAgfVxuXG4gICAgfVxuXG5cbiAgICBoYW5kbGVDYWxsYmFjayhkYXRhOklDbHVzdGVyUGFja2V0KXtcbiAgICAgICAgXG4gICAgICAgIGlmKCF0aGlzLmNhbGxiYWNrcy5oYXMoZGF0YS5jYWxsYmFja0lEKSl7XG4gICAgICAgICAgICBsb2dFcnJvcihcIkhVQkNvbm5lY3Rpb246IGNhbGxiYWNrIG5vdCBmb3VuZFwiLGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IGV4ZWN1dGUgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBcbiAgICAgICAgY29uc3QgY2IgPSB0aGlzLmNhbGxiYWNrcy5nZXQoZGF0YS5jYWxsYmFja0lEKTtcbiAgICAgICAgaWYoY2Ipe1xuICAgICAgICAgICAgY2IuY2FsbGJhY2soZGF0YS5kYXRhID8/IGRhdGEuZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKGRhdGEuY2FsbGJhY2tJRCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBcbiAgICBzZW5kQ2FsbGJhY2soY2FsbGJhY2tJRDpudW1iZXIsZGF0YTpJRXJyb3J8YW55KXtcblxuICAgICAgICBpZihpc05hTihjYWxsYmFja0lEKSB8fCBjYWxsYmFja0lEPD0wKXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogaW52YWxpZCBjYWxsYmFja0lEXCIsY2FsbGJhY2tJRCxkYXRhKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgLy8gbG9nSW5mbyhcIkhVQkNvbm5lY3Rpb246IHNlbmQgY2FsbGJhY2tcIixkYXRhKTtcblxuICAgICAgICBpZih0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZT09PVdlYlNvY2tldC5PUEVOKXtcbiAgICAgICAgICAgIHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOlwiY2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICBlcnJvcjpFcnJvclV0aWxzLmlzRXJyb3IoZGF0YSk/ZGF0YTpudWxsLFxuICAgICAgICAgICAgICAgIGRhdGE6RXJyb3JVdGlscy5pc0Vycm9yKGRhdGEpP251bGw6ZGF0YSxcbiAgICAgICAgICAgICAgICBjYWxsYmFja0lEOmNhbGxiYWNrSURcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogd3Mgbm90IGNvbm5lY3RlZCwgY2FudCBzZW5kIGNhbGxiYWNrXCIsdGhpcy5vcHRpb25zLmRpcmVjdGlvbixkYXRhKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgc2VuZChwYWNrZXQ6SUNsdXN0ZXJQYWNrZXQpOlByb21pc2U8YW55fElFcnJvcnxudWxsPntcbiAgICAgICAvLyBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogc2VuZCBwYWNrZXRcIix0aGlzLm9wdGlvbnMuZGlyZWN0aW9uLHBhY2tldCk7XG4gICAgICAgIGlmKCF0aGlzLndzIHx8IHRoaXMud3MucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0Lk9QRU4pe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJIVUJDb25uZWN0aW9uOiB3cyBub3QgY29ubmVjdGVkLCBjYW50IHNlbmQgcGFja2V0XCIscGFja2V0KVxuICAgICAgICAgICAgcmV0dXJuIHsuLi5EZWZhdWx0RXJyb3JzLlNFUlZJQ0VfTk9UX1dPUktJTkcsZGV0YWlsczpcIndzIG5vdCBjb25uZWN0ZWRcIn07XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBjYj1udWxsO1xuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8SUNsdXN0ZXJQYWNrZXR8bnVsbD4oKHJlc29sdmUpPT5jYj1yZXNvbHZlKTtcblxuICAgICAgICBpZihwYWNrZXQuY2FsbGJhY2tJRD4wKXtcbiAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrSUQgPSBIVUJDb25uZWN0aW9uLmNhbGxiYWNrSUQrKztcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldChjYWxsYmFja0lELHt0aW1lOituZXcgRGF0ZSgpLGNhbGxiYWNrOmNiIX0pO1xuICAgICAgICAgICAgcGFja2V0LmNhbGxiYWNrSUQgPSBjYWxsYmFja0lEO1xuICAgICAgICB9XG5cbiAgICAgICAgLy90b2RvIC0gZW5jcnlwdCBkYXRhXG5cbiAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhY2tldCksZXJyPT57XG4gICAgICAgICAgICBpZihlcnIpe1xuICAgICAgICAgICAgICAgIGxvZ0Vycm9yKFwiSFVCQ29ubmVjdGlvbjogY2FudCBzZW5kIHBhY2tldFwiLGVycik7XG4gICAgICAgICAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ+MClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MuZGVsZXRlKHBhY2tldC5jYWxsYmFja0lEKTtcbiAgICAgICAgICAgICAgICBjYiEoRGVmYXVsdEVycm9ycy5TRVJWSUNFX05PVF9XT1JLSU5HKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYocGFja2V0LmNhbGxiYWNrSUQ9PT0wKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG5cbiAgICBjbG9zZSgpe1xuICAgICAgICBsb2dJbmZvKFwiSFVCQ29ubmVjdGlvbjogY2xvc2UgY29ubmVjdGlvblwiKVxuICAgICAgICB0aGlzLmNhbGxiYWNrcy5jbGVhcigpO1xuICAgICAgICB0aGlzLmF1dGhvcml6ZWQ9ZmFsc2U7XG5cbiAgICAgICAgaWYodGhpcy53cyl7XG4gICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgdGhpcy53cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLndzLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy53cy50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgIH1jYXRjaChlKXt9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuIl19
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"HUBConnection.js","sourceRoot":"","sources":["../../../src/apiServer/cluster/HUBConnection.ts"],"names":[],"mappings":"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","sourcesContent":["import { RawData, WebSocket } from \"ws\";\nimport { logError, logInfo } from \"../LogService\";\nimport DefaultErrors, { ErrorUtils } from \"../structures/DefaultErrors\";\nimport { IError } from \"../structures/Interfaces\";\nimport { privateDecrypt } from \"crypto\";\nimport Signal, { Req } from \"badmfck-signal\";\nimport { IWebsocketPacket } from \"../HUBService\";\n\nexport interface IClusterPacket{\n method:string,\n data?:any|null,\n error?:IError,\n callbackID:number\n}\n\nexport interface IHUBConnectionOptions{\n direction:\"incoming\"|\"outgoing\",\n ws:WebSocket,\n\n hostID:string,\n hostPrivateKey:string,\n hostPublicKey:string,\n hostURL:string,\n\n targetID:string|null,\n targetPublicKey:string|null,\n targetURL:string|null,\n\n onAuthorized:()=>void,\n onClose:()=>void,\n handlers:(Req<any,any>|Signal<any>)[],\n maxTimeout?:number\n}\n\nexport class HUBConnection{\n static callbackID:number=1;\n private callbacks:Map<number,{time:number,callback:(result:any|IError)=>void}>=new Map();\n authorized:boolean = false;\n private ws:WebSocket;\n private onAuthorized:()=>void;\n options:IHUBConnectionOptions;\n \n constructor(options:IHUBConnectionOptions){\n \n logInfo(\"HUBConnection: new connection\",options.hostID,options.targetID,options.direction===\"outgoing\"?options.ws.url+\" -->\":\" <--\");\n\n this.options = options;\n this.ws = options.ws;\n this.onAuthorized = options.onAuthorized\n \n\n this.ws.on(\"close\",()=>{\n if(!this.authorized)\n return;\n logInfo(\"HUBConnection: connection closed\")\n if(options.onClose)\n options.onClose();\n })\n\n this.ws.on(\"error\",(e)=>{\n logError(\"HUBConnection: connection error\",e);\n });\n\n this.ws.on(\"open\",()=>{\n logInfo(\"HUBConnection: connection opened\",options.direction)\n if(options.direction===\"outgoing\"){\n logInfo(\"HUBConnection: send authroization\")\n this.sendAuth();\n }\n })\n\n this.ws.on(\"message\",async (msg:RawData,isBinary)=>{\n \n if(isBinary){\n logError(\"HUBConnection: invalid packet type, must be a string\");\n return;\n }\n\n let data = null;\n try{\n data = JSON.parse(msg.toString(\"utf8\"))\n }catch(e){}\n\n //logInfo(\"HUBConnection: message received\",this.options.direction,data);\n\n // check packet structure\n if(!data || !data.method || !data.callbackID){\n logError(\"HUBConnection: invalid packet structure\",data);\n return;\n }\n\n // handle packets\n if(typeof data.method !== \"string\" || typeof data.callbackID !== \"number\"){\n logError(\"HUBConnection: invalid packet structure\",data);\n return;\n }\n\n // callbackID\n const callbackID = parseInt(data.callbackID);\n \n // handle callbacks\n if(data.method===\"callback\"){\n this.handleCallback(data);\n return;\n };\n\n \n if(!this.authorized && data.method===\"auth\"){\n // do authorization \n const result = await this.authorize(data.data);\n if(ErrorUtils.isError(result)){\n logError(\"HUBConnection: authorization failed\",result);\n this.sendCallback(callbackID,result);\n return;\n }\n this.authorized = true;\n if(this.onAuthorized)\n this.onAuthorized();\n this.sendCallback(callbackID,result);\n return;\n }\n\n \n \n if(!this.authorized){\n logError(\"HUBConnection: not authorized\");\n this.sendCallback(callbackID,DefaultErrors.UNAUTHORIZED);\n return;\n }\n\n // handle methods\n for(let i of options.handlers){\n if(i.name === data.method){\n\n const requestPacket:IWebsocketPacket={\n data:data.data,\n authorized:this.authorized,\n connection:this\n }\n\n if(i.type === \"signal\"){\n (i as Signal<IWebsocketPacket>).invoke(requestPacket);\n if(data.callbackID>0)\n this.sendCallback(callbackID,{});\n return;\n }else if(i.type === \"request\"){\n const result = await (i as Req<IWebsocketPacket,any>).request(requestPacket);\n this.sendCallback(callbackID,result);\n return;\n }\n }\n }\n\n this.sendCallback(callbackID,{...DefaultErrors.NOT_IMPLEMENTED,details:\"method not found: \"+data.method});\n \n })\n\n \n setTimeout(()=>{\n if(!this.authorized){\n logError(\"HUBConnection: authorization timeout\",this.authorized)\n this.close();\n }\n },15000); // 15sec for authorization\n \n\n setInterval(()=>{\n const now = +new Date();\n for(let [key,value] of this.callbacks){\n if(now-value.time>(options.maxTimeout ?? 1000*60*15)){\n value.callback({method:\"callback\",data:null,callbackID:key,error:{...DefaultErrors.TIMEOUT}});\n this.callbacks.delete(key);\n }\n }\n },options.maxTimeout || 1000*60*15);\n\n }\n\n\n async sendAuth(){\n // logInfo(\"HUBConnection: send auth packet\")\n const response = await this.send({\n method:\"auth\",\n data:{\n hostID:this.options.targetID, // REMOTE HOST ID\n targetPublicKey:this.options.hostPublicKey, // LOCAL PUBLIC KEY\n targetURL:this.options.hostURL, // LOCAL URL\n targetID:this.options.hostID // LOCAL HOST ID\n },\n callbackID:1\n })\n\n if(ErrorUtils.isError(response)){\n logError(\"HUBConnection: auth failed\",response);\n this.close();\n return;\n }\n\n this.authorized=true;\n \n if(!response || !response.hostID || !response.hostPublicKey || !response.hostURL){\n logError(\"HUBConnection: invalid auth response\",response);\n this.close();\n return;\n }\n\n\n // store targetID, targetPublicKey, targetURL\n this.options.targetID = response.hostID;\n this.options.targetPublicKey = response.hostPublicKey;\n this.options.targetURL = response.hostURL;\n \n // logInfo(\"HUBConnection: auth success\",response);\n\n if(this.onAuthorized)\n this.onAuthorized();\n \n }\n\n /**\n * \n * @param data -> {signature:encrypted hub key,publicKey:encrypted public key, clientID:clientID}\n * @returns \n */\n async authorize(data:any):Promise<any|IError>{\n\n //logInfo(\"HUBConnection: try to authorize connection\",data);\n\n if(typeof data !== \"object\" || !data || !data.hostID || !data.targetPublicKey || !data.targetID || !data.targetURL)\n return {...DefaultErrors.BAD_REQUEST,stack:[data],details:\"expecting {hostID:string,targetPublicKey:string,targetID:string,targetURL:string}\"};\n\n if(data.hostID !== this.options.hostID)\n return {...DefaultErrors.UNAUTHORIZED,details:\"invalid targetID\"};\n\n //logInfo(\"HUBConnection: authorize success\",this.options.direction,data);\n\n //1. store target info\n this.options.targetID = data.targetID;\n this.options.targetPublicKey = data.targetPublicKey;\n this.options.targetURL = data.targetURL;\n\n //2. send local info\n return {\n hostID:this.options.hostID,\n hostPublicKey:this.options.hostPublicKey,\n hostURL:this.options.hostURL\n }\n\n }\n\n\n handleCallback(data:IClusterPacket){\n \n if(!this.callbacks.has(data.callbackID)){\n logError(\"HUBConnection: callback not found\",data);\n return;\n }\n //logInfo(\"HUBConnection: execute callback\",data);\n\n \n const cb = this.callbacks.get(data.callbackID);\n if(cb){\n cb.callback(data.data ?? data.error);\n this.callbacks.delete(data.callbackID);\n }\n }\n\n \n sendCallback(callbackID:number,data:IError|any){\n\n if(isNaN(callbackID) || callbackID<=0){\n logError(\"HUBConnection: invalid callbackID\",callbackID,data);\n return;\n }\n\n // logInfo(\"HUBConnection: send callback\",data);\n\n if(this.ws && this.ws.readyState===WebSocket.OPEN){\n this.ws.send(JSON.stringify({\n method:\"callback\",\n error:ErrorUtils.isError(data)?data:null,\n data:ErrorUtils.isError(data)?null:data,\n callbackID:callbackID\n }))\n }else{\n logError(\"HUBConnection: ws not connected, cant send callback\",this.options.direction,data)\n }\n }\n\n async send(packet:IClusterPacket):Promise<any|IError|null>{\n // logInfo(\"HUBConnection: send packet\",this.options.direction,packet);\n if(!this.ws || this.ws.readyState !== WebSocket.OPEN){\n logError(\"HUBConnection: ws not connected, cant send packet\",packet)\n return {...DefaultErrors.SERVICE_NOT_WORKING,details:\"ws not connected\"};\n }\n \n let cb=null;\n const promise = new Promise<IClusterPacket|null>((resolve)=>cb=resolve);\n\n if(packet.callbackID>0){\n const callbackID = HUBConnection.callbackID++;\n this.callbacks.set(callbackID,{time:+new Date(),callback:cb!});\n packet.callbackID = callbackID;\n }\n\n //todo - encrypt data\n\n this.ws.send(JSON.stringify(packet),err=>{\n if(err){\n logError(\"HUBConnection: cant send packet\",err);\n if(packet.callbackID>0)\n this.callbacks.delete(packet.callbackID);\n cb!(DefaultErrors.SERVICE_NOT_WORKING);\n }\n });\n\n if(packet.callbackID===0)\n return null;\n\n return promise;\n }\n\n\n close(){\n logInfo(\"HUBConnection: close connection\")\n this.callbacks.clear();\n this.authorized=false;\n\n if(this.ws){\n try{\n this.ws.removeAllListeners();\n this.ws.close();\n this.ws.terminate();\n }catch(e){}\n }\n }\n\n}\n\n"]}
|
File without changes
|
@@ -1,2 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSFVCSGFuZGxyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpU2VydmVyL2NsdXN0ZXIvSFVCSGFuZGxyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIiJdfQ==
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"HUBHandlres.js","sourceRoot":"","sources":["../../../src/apiServer/cluster/HUBHandlres.ts"],"names":[],"mappings":"","sourcesContent":[""]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Deployment.js","sourceRoot":"","sources":["../../../src/apiServer/deployment/Deployment.ts"],"names":[],"mappings":";;;;;;AACA,kDAA+C;AAC/C,oDAA4B;AAE5B,8CAAwC;AAGxC,MAAa,UAAW,SAAQ,2BAAY;IAExC,IAAI,CAAO;IACX,YAAY,EAAC,KAAK,EAAC,QAAQ,EAAgC;QACvD,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,GAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxF,IAAA,oBAAO,EAAC,4CAA4C,GAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,CAAC,iBAAiB,CAAC;YACnB,EAAC,iBAAiB,EAAC,IAAI,EAAC,QAAQ,EAAC,IAAI,CAAC,IAAI,EAAC,OAAO,EAAC,IAAI,CAAC,iBAAiB,EAAC;SAC7E,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,GAAkB;QAGtC,OAAO,EAAE,CAAA;IACb,CAAC;CACJ;AAjBD,gCAiBC","sourcesContent":["import { Req } from \"badmfck-signal\";\nimport { BaseEndpoint } from \"../BaseEndpoint\";\nimport crypto from \"crypto\";\nimport { HTTPRequestVO, TransferPacketVO } from \"../structures/Interfaces\";\nimport { logWarn } from \"../LogService\";\n\n\nexport class Deployment extends BaseEndpoint{\n\n hash:string\n constructor({login,password}:{login:string,password:string}){\n super(\"sys-deployment\");\n this.hash = crypto.createHash(\"sha256\").update(login+password).digest().toString(\"hex\");\n logWarn(\"Deployment initialized at: sys-deployment/\"+this.hash)\n this.registerEndpoints([\n {ignoreInterceptor:true,endpoint:this.hash,handler:this.deploymentHistory},\n ])\n }\n\n async deploymentHistory(req: HTTPRequestVO): Promise<TransferPacketVO<any>> {\n //const encryptedPasswordAndLoging = \n // todo - get project root directory\n return {}\n }\n}"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"DataProvider.js","sourceRoot":"","sources":["../../../src/apiServer/helper/DataProvider.ts"],"names":[],"mappings":";;;;;;AAAA,oEAAoC;AAMpC,MAAa,YAAY;IACb,MAAM,CAAC,MAAM,GAAC,CAAC,CAAC;IAChB,IAAI,CAAS;IACb,IAAI,GAAC,KAAK,CAAC;IACX,eAAe,GAAC,CAAC,CAAC;IAClB,SAAS,GAAC,IAAI,GAAC,EAAE,GAAC,CAAC,CAAA;IACnB,IAAI,CAAkB;IACtB,SAAS,GAAC,IAAI,wBAAM,EAAO,CAAA;IAC3B,QAAQ,GAAS,KAAK,CAAC;IAEvB,QAAQ,CAAoD;IAQpE,YAAY,QAA4D,EAAC,SAAiB,EAAC,IAAY;QACnG,IAAI,CAAC,QAAQ,GAAC,QAAQ,CAAC;QACvB,IAAG,SAAS,KAAG,SAAS;YACpB,IAAI,CAAC,SAAS,GAAC,CAAC,SAAS,CAAC;QAC9B,IAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YACpB,IAAI,CAAC,SAAS,GAAC,CAAC,CAAC;QACrB,IAAG,CAAC,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,IAAI,GAAC,eAAe,GAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAG,IAAI,CAAC,IAAI;YACR,OAAO;QACX,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAC,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,WAAW,CAAC,IAAM;QACd,IAAG,IAAI,CAAC,IAAI;YACR,OAAO;QACX,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,OAAO;QAET,IAAG,IAAI,CAAC,IAAI;YACR,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAC,MAAM,EAAC,EAAE,CAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAC,EAAE,CAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEnF,IAAG,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAC;YAExC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC;YAClD,IAAG,IAAI,GAAC,IAAI,CAAC,SAAS;gBAClB,OAAO,IAAI,CAAC,IAAI,CAAC;SACxB;QAED,IAAI,CAAC,IAAI,GAAC,IAAI,CAAC;QACf,IAAI,CAAC,QAAQ,GAAC,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,GAAC,KAAK,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC;QACjC,IAAI,CAAC,IAAI,GAAC,GAAG,CAAC,IAAI,CAAA;QAClB,IAAI,CAAC,eAAe,GAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;;AAlEL,oCAoEC","sourcesContent":["import Signal from \"badmfck-signal\";\n\n/**\n * DataProvider \n * gathering data throught executor and handle duplicate requests\n */\nexport class DataProvider<T>{\n private static nextID=1;\n private name?:string;\n private busy=false;\n private lastRequestTime=0;\n private cacheTime=1000*60*5\n private data:T|undefined|null;\n private callbacks=new Signal<any>()\n private wasError:boolean=false;\n\n private executor:()=>Promise<{data:T|null|undefined,error?:boolean}>\n\n /**\n * \n * @param executor Execute procedure stored in executor, when need to get data\n * @param cacheTime cache interval\n * @param name DataProvider name (debugging)\n */\n constructor(executor:()=>Promise<{data:T|null|undefined,error?:boolean}>,cacheTime?:number,name?:string){\n this.executor=executor;\n if(cacheTime!==undefined)\n this.cacheTime=+cacheTime;\n if(isNaN(this.cacheTime))\n this.cacheTime=0;\n if(!this.name)\n this.name=\"DataProvider \"+(DataProvider.nextID++)\n }\n\n async forceUpdate(){\n if(this.busy)\n return;\n this.wasError=false;\n this.lastRequestTime=0;\n await this.getData()\n }\n\n localUpdate(data:T){\n if(this.busy)\n return;\n this.wasError=false;\n this.lastRequestTime=+new Date();\n this.data = data\n }\n\n async getData():Promise<T|null|undefined>{\n\n if(this.busy)\n return new Promise((resolve,reject)=>this.callbacks.subscribe((d)=>resolve(d)))\n \n if(this.lastRequestTime>0 && !this.wasError){\n // check cachetime\n const diff = (+new Date()) - this.lastRequestTime;\n if(diff<this.cacheTime)\n return this.data; // return cached value\n }\n\n this.busy=true;\n this.wasError=false;\n const res = await this.executor();\n this.busy=false;\n this.wasError=res.error ?? false;\n this.data=res.data\n this.lastRequestTime=+new Date();\n this.callbacks.invoke(this.data);\n this.callbacks.removeAll();\n return this.data;\n }\n \n}"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Sleep.js","sourceRoot":"","sources":["../../../src/apiServer/helper/Sleep.ts"],"names":[],"mappings":";;;AAAO,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAAxE,QAAA,KAAK,SAAmE","sourcesContent":["export const Sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"UID.js","sourceRoot":"","sources":["../../../src/apiServer/helper/UID.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"crypto\"\nexport class UID{\n private static readonly epoch = 1697037922668;\n private static nextUniqueID=1;\n private static nextUniqueTRXID=1;\n static generate():string{\n let uid = Buffer.from(\n parseInt(\n ((+new Date())-this.epoch)\n +\"\"\n +Math.round(Math.random()*1000)\n ).toString(16),'hex').toString('base64');\n\n uid=uid.replaceAll(\"=\",\"\")\n uid=uid.replaceAll(\"+\",\".\")\n uid=uid.replaceAll(\"/\",\"_\")\n \n return uid;\n }\n\n static generateRandomNumberBase(count:number):string{\n let base=\"\";\n for(let i=0;i<count;i++)\n base+=Math.round(Math.random()*9);\n return base;\n }\n\n static generateNumberic(year?:string):number{\n if(!year)\n year = new Date().getFullYear()+\"\";\n const nextID=UID.nextUniqueID++;\n if(UID.nextUniqueID>99)\n UID.nextUniqueID = 1\n return parseInt(year.substring(2)+\"\"+(+new Date() - this.epoch)+\"\"+(nextID+\"\").padStart(2,\"0\"));\n }\n\n static getNextDescendingIndex():number{\n return Number.MAX_SAFE_INTEGER - (+new Date());\n }\n\n static getNext():string{\n const nextID=UID.nextUniqueID++;\n if(UID.nextUniqueID>99)\n UID.nextUniqueID = 1\n return this.leadZero(nextID)\n }\n \n static getNextTRX():string{\n const nextID=UID.nextUniqueTRXID++;\n if(UID.nextUniqueTRXID>99)\n UID.nextUniqueTRXID = 1\n return this.leadZero(nextID)\n }\n\n \n\n static generateTrxUID(date?:Date){\n \n if(!date)\n date=new Date();\n\n const year = (new Date().getFullYear()+\"\").substring(2);\n const seconds = (date.getHours() * 3600 + date.getMinutes() * 60 + date.getSeconds())+\"\";\n\n const str=year\n +this.leadZero(date.getMonth()+1)\n +this.leadZero(date.getDate())\n +seconds.padStart(5,\"0\")\n +this.getNextTRX()\n\n return parseInt(str);\n \n }\n\n\n static sha256(str:string):string{\n let uid = crypto.createHash(\"sha256\").update(str).digest(\"base64\");\n uid=uid.replaceAll(\"=\",\"\")\n uid=uid.replaceAll(\"+\",\".\")\n uid=uid.replaceAll(\"/\",\"-\")\n return uid;\n }\n\n static leadZero(i:number):string{\n return (i+\"\").padStart(2,\"0\")\n }\n}"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../../src/apiServer/helper/Validator.ts"],"names":[],"mappings":"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","sourcesContent":["export type TValidatorType=\"string\"|\"number\"|\"boolean\"|\"date\"|\"array\"|\"object\"|\"email\"|\"phone\"\n\nexport interface IValidatorOptions{\n min?:number,\n max?:number,\n type?:TValidatorType,\n regex?:RegExp\n}\n\nexport interface IValidaotrType{\n name:string,\n type:TValidatorType\n optional?:boolean,\n arrayType?:IValidaotrType,\n}\n\nexport enum ValidationReport{\n OK=1,\n VALUE_IS_NULL=2,\n TYPE_MISSMATCH=3,\n VALUE_TOO_BIG=4,\n VALUE_TOO_SHORT=5,\n VALUE_INCORRECT=6\n}\n\nexport class Validator{\n\n static validateObject(fields:string[],object:any):boolean{\n if(!object || typeof object!==\"object\")\n return false\n for(let i of fields){\n if(!(i in object) || object[i]===undefined)\n return false;\n }\n return true;\n }\n\n static convertToType<T>(value:any,type:\"string\"|\"number\"|\"boolean\"|\"date\"):T|null{\n if(value===null || value === undefined)\n return null;\n\n if(type===\"string\"){\n if(typeof value ===\"object\"){\n let result = null\n try{ result = JSON.stringify(value);}catch(e){}\n if(result!==null)\n return result as T\n }\n return value+\"\" as T\n }\n\n if(type===\"boolean\"){\n if(typeof value===\"boolean\")\n return value as T\n if(typeof value===\"number\")\n return value>0 as T\n if(typeof value===\"object\")\n return false as T\n if(typeof value === \"string\")\n return (value.toLowerCase()===\"true\") as T\n }\n\n if(type===\"date\"){\n if(typeof value===\"string\" || typeof value===\"number\")\n return new Date(value) as T\n return null;\n }\n\n // number\n if(typeof value===\"number\")\n return value as T\n\n if(typeof value===\"object\")\n return 0 as T\n\n const num = parseInt(value+\"\");\n return num as T\n }\n\n static validateValue(value:string|number|boolean,opt?:IValidatorOptions):ValidationReport{\n if(value===undefined || value === null)\n return ValidationReport.VALUE_IS_NULL;\n if(!opt)\n return ValidationReport.OK;\n \n\n if(!opt.type)\n opt.type=\"string\";\n\n if(opt.type===\"boolean\"){\n if(typeof value===\"boolean\")\n return ValidationReport.OK;\n if(typeof value ===\"number\" && (value === 1 || value === 0))\n return ValidationReport.OK\n return ValidationReport.TYPE_MISSMATCH\n }\n\n if(opt.type === \"number\"){\n if(typeof value !== \"number\")\n return ValidationReport.TYPE_MISSMATCH\n if(opt.max && value>opt.max)\n return ValidationReport.VALUE_TOO_BIG\n if(opt.min && value<opt.min)\n return ValidationReport.VALUE_TOO_BIG\n return ValidationReport.OK;\n }\n\n if(typeof value !== \"string\")\n return ValidationReport.TYPE_MISSMATCH\n\n if(opt.max && value.length>opt.max)\n return ValidationReport.VALUE_TOO_BIG\n\n if(opt.min && value.length<opt.min)\n return ValidationReport.VALUE_TOO_SHORT\n\n if(opt.type===\"email\" && !opt.regex){\n opt.regex = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,6}$/g;\n }\n\n if(opt.regex){\n const globalRegex = new RegExp(opt.regex.source, opt.regex.flags.includes('g') ? opt.regex.flags : opt.regex.flags + 'g');\n const tmp = value.replaceAll(globalRegex,\"\");\n if(tmp.length!==0)\n return ValidationReport.VALUE_INCORRECT\n }\n\n \n \n return ValidationReport.OK;\n }\n}"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Monitor.js","sourceRoot":"","sources":["../../../src/apiServer/monitor/Monitor.ts"],"names":[],"mappings":"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","sourcesContent":["import { Signal } from \"badmfck-signal\";\nimport { REQ_HTTP_LOG } from \"../APIService\";\nimport { BaseEndpoint } from \"../BaseEndpoint\";\nimport { REQ_LOG } from \"../LogService\";\nimport { HTTPRequestVO, TransferPacketVO } from \"../structures/Interfaces\";\nimport crypto from \"crypto\";\nimport os from \"os\"\n\n\nexport interface IUserAction{\n action:string;\n}\n\ninterface IStatObject{\n requests:Map<string,number>, //ep, count\n errors:Map<string,number>, // ep, count\n fatalErrors:Map<string,number>, // ep, count\n apiErrors:Map<string,number> // ep,count\n}\n\ninterface ISystemStat{\n cpuUsage:any,\n memoryTotal:number,\n memoryUsage:any,\n}\n\nexport const S_MONITOR_REGISTRATE_ACTION=new Signal<IUserAction>()\n\nexport class Monitor extends BaseEndpoint{\n\n ignoreHttpLogging=true\n \n private httpRequests=new Map<number,Map<string,IStatObject>>(); // day of year,hour,minute, count\n private systemStat=new Map<number,Map<string,ISystemStat>>(); // day of year,hour,minute, count\n private userActions=new Map<number,Map<string,Map<string,number>>>(); // day of year, hour+minute, action , count\n private registeredActions=0;\n \n constructor(){\n super(\"sys-monitor\");\n\n S_MONITOR_REGISTRATE_ACTION.subscribe(data=>this.registrateAction(data))\n\n this.registerEndpoints([\n {ignoreInterceptor:true,endpoint:\"log\",handler:this.logs},\n {ignoreInterceptor:true,endpoint:\"netlog\",handler:this.netlog},\n {ignoreInterceptor:true,endpoint:\"metrics\",handler:this.metrics},\n {ignoreInterceptor:true,endpoint:\"server/stat\",handler:this.serverStat}\n ])\n\n setInterval(()=>{\n this.addSystemStat();\n },1000*60*10);\n this.addSystemStat();\n }\n\n registrateAction(data:IUserAction){\n if(!data.action)\n return;\n if(typeof data.action!==\"string\")\n return;\n if(data.action.length>20)\n data.action=data.action.substring(0,20);\n\n const d=new Date();\n const doy=this.getDateIndex(d);\n let day=this.userActions.get(doy);\n \n if(!day){\n day=new Map(); // string,number\n this.userActions.set(doy,day);\n if(this.userActions.size>7){\n for(let i of this.userActions){\n this.userActions.delete(i[0])\n break;\n }\n }\n }\n\n const minute=this.getHourMinuteIndex(d);\n let m = day.get(minute);\n if(!m){\n m=new Map();\n day.set(minute,m);\n }\n\n\n let cnt = m.get(data.action);\n if(!cnt)\n cnt=0;\n cnt++;\n m.set(data.action,cnt);\n\n }\n\n addSystemStat(){\n const so = this.createSystemStatObj();\n so.memoryUsage=process.memoryUsage()\n so.memoryTotal=os.totalmem()\n }\n \n\n // METRIC!\n registrateError(endpoint:string){\n const so = this.createStatObj();\n this.increaseStat(so.errors,endpoint)\n }\n\n registrateFatalError(endpoint:string){\n const so = this.createStatObj();\n this.increaseStat(so.fatalErrors,endpoint)\n }\n\n registrateAPIError(endpoint:string){\n const so = this.createStatObj();\n this.increaseStat(so.apiErrors,endpoint)\n }\n\n registrateResponse(endpoint:string,responseTime:number){\n const so = this.createStatObj();\n this.increaseStat(so.requests,endpoint)\n }\n\n increaseStat(statObject:Map<string,number>,endpoint:string):void{\n let reqep = statObject.get(endpoint);\n if(!reqep)\n reqep=0 \n reqep+=1;\n statObject.set(endpoint,reqep)\n this.registeredActions++\n }\n\n createStatObj():IStatObject{\n const d=new Date();\n const dtm = this.getDateIndex(d);\n let day=this.httpRequests.get(dtm);\n if(!day){\n day = new Map();\n this.httpRequests.set(dtm,day);\n if(this.httpRequests.size>7){\n for(let i of this.httpRequests){\n this.httpRequests.delete(i[0])\n break;\n }\n }\n }\n const hourMinute = this.getHourMinuteIndex(d);\n let hm = day.get(hourMinute);\n if(!hm){\n hm = {\n errors:new Map(),\n requests:new Map(),\n fatalErrors:new Map(),\n apiErrors:new Map()\n }\n day.set(hourMinute,hm)\n }\n return hm;\n }\n\n createSystemStatObj():ISystemStat{\n const d=new Date();\n const dtm = this.getDateIndex(d);\n let day=this.systemStat.get(dtm);\n if(!day){\n day = new Map();\n this.systemStat.set(dtm,day);\n if(this.systemStat.size>7){\n for(let i of this.systemStat){\n this.systemStat.delete(i[0])\n break;\n }\n }\n }\n const hourMinute = this.getHourMinuteIndex(d);\n let hm = day.get(hourMinute);\n if(!hm){\n hm = {\n cpuUsage:0,\n memoryTotal:0,\n memoryUsage:{}\n }\n day.set(hourMinute,hm)\n }\n return hm;\n }\n\n getDateIndex(d:Date):number{\n const dtm = d;\n return parseInt(dtm.getFullYear().toString().substring(2)+this.leadZero(dtm.getMonth()+1)+this.leadZero(dtm.getDate()))\n }\n\n getHourMinuteIndex(d:Date):string{\n const dtm = d;\n return this.leadZero(dtm.getHours())+this.leadZero(dtm.getMinutes())\n }\n\n leadZero(i:number):string{\n if(i>9)\n return i+\"\"\n return \"0\"+i;\n }\n\n // PRECHECK BEFORE ANY EXECUTION\n async precheck(req: HTTPRequestVO): Promise<TransferPacketVO<any> | null> {\n \n if(!req.headers)\n return {error:{code:10001,message:\"No authorization\",httpStatus:400}}\n \n if(!req.headers['authorization'])\n return {error:{code:10002,message:\"No authorization found\",httpStatus:400}}\n\n const auth = req.headers['authorization'];\n \n if(!req.precheck || !Array.isArray(req.precheck.data)){\n return {error:{code:10003,message:\"No authorization records found\",httpStatus:400}}\n }\n \n\n let authorized=false;\n for(let i of req.precheck.data){\n let expectationStr = \"\"\n expectationStr+=req.endpoint\n expectationStr+=JSON.stringify(i)\n expectationStr+=JSON.stringify(req.method)\n expectationStr+=JSON.stringify(req.data)\n expectationStr+=JSON.stringify(req.params)\n \n const expectation = \"sha256 \"+crypto.createHash(\"sha256\").update(expectationStr).digest().toString(\"hex\");\n \n if(auth === expectation){\n authorized=true;\n break\n }\n }\n\n if(!authorized){\n console.error(\"Wrong token: \"+auth)\n return {error:{code:10004,message:\"Unauthorized access\",httpStatus:401}}\n }\n\n return null;\n }\n\n async logs(req:HTTPRequestVO):Promise<TransferPacketVO<any>>{\n const log = await REQ_LOG.request(null)\n return {data:log}\n }\n\n async netlog(req:HTTPRequestVO):Promise<TransferPacketVO<any>>{\n const log = await REQ_HTTP_LOG.request()\n return {data:log}\n }\n\n async metrics(req:HTTPRequestVO):Promise<TransferPacketVO<any>>{\n \n // get metric for current date\n const date = new Date();\n const di = this.getDateIndex(date);\n const stat = this.httpRequests.get(di)\n \n\n // prepare to plain array (map with minutes)\n \n let result=[]\n if(stat){\n for(let minutes of stat){\n result.push({\n m:minutes[0],\n ae:this.mapToKeyValue(minutes[1].apiErrors),\n e:this.mapToKeyValue(minutes[1].errors),\n r:this.mapToKeyValue(minutes[1].requests),\n fe:this.mapToKeyValue(minutes[1].fatalErrors),\n })\n }\n }\n \n const ua = this.userActions.get(di);\n let uaResult:any[]=[]\n if(ua){\n for(let i of ua){\n const minutes = i[1];\n const mArray:any[]=[]\n for(let j of i[0]){\n mArray.push({\n action:j[0],\n count:j[1]\n })\n }\n result.push({\n m:i[0],\n data:mArray\n })\n }\n }\n\n return {data:{stat:result,date:+date,userActions:uaResult}};\n }\n\n async serverStat(req:HTTPRequestVO):Promise<TransferPacketVO<any>>{\n\n // get metric for current date\n const date = new Date();\n const di = this.getDateIndex(date);\n const stat = this.systemStat.get(di)\n if(!stat)\n return {data:[]}\n\n // prepare to plain array (map with minutes)\n let result=[]\n for(let minutes of stat){\n result.push({\n m:minutes[0],\n mt:minutes[1].memoryTotal,\n mu:minutes[1].memoryUsage,\n cu:minutes[1].cpuUsage,\n })\n }\n\n\n return {data:{\n registeredActions:this.registeredActions,\n uptime:process.uptime(),\n osUptime:os.uptime(),\n stat:result\n }}\n }\n\n mapToKeyValue(map:Map<string,string|number>):{name:string,value:string|number}[]{\n const res=[]\n for(let i of map)\n res.push({name:i[0],value:i[1]})\n return res;\n }\n}\n\n/*function getCPUUsage(callback, free){ \n\t\n var stats1 = getCPUInfo();\n var startIdle = stats1.idle;\n var startTotal = stats1.total;\n\t\n setTimeout(function() {\n var stats2 = getCPUInfo();\n var endIdle = stats2.idle;\n var endTotal = stats2.total;\n\t\t\n var idle \t= endIdle - startIdle;\n var total \t= endTotal - startTotal;\n var perc\t= idle / total;\n\t \t\n if(free === true)\n callback( perc );\n else\n callback( (1 - perc) );\n\t \t\t\n }, 1000 );\n}\n\nfunction getCPUInfo(callback){ \n var cpus = _os.cpus();\n\t\n var user = 0;\n var nice = 0;\n var sys = 0;\n var idle = 0;\n var irq = 0;\n var total = 0;\n\t\n for(var cpu in cpus){\n if (!cpus.hasOwnProperty(cpu)) continue;\t\n user += cpus[cpu].times.user;\n nice += cpus[cpu].times.nice;\n sys += cpus[cpu].times.sys;\n irq += cpus[cpu].times.irq;\n idle += cpus[cpu].times.idle;\n }\n\t\n var total = user + nice + sys + idle + irq;\n\t\n return {\n 'idle': idle, \n 'total': total\n };\n}*/"]}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Liveness.js","sourceRoot":"","sources":["../../../src/apiServer/routes/Liveness.ts"],"names":[],"mappings":";;;AAAA,8CAAwD;AACxD,kDAA+C;AAG/C,MAAa,QAAS,SAAQ,2BAAY;IACtC,OAAO,CAAM;IACb,YAAY,MAAW;QACnB,KAAK,CAAC,UAAU,CAAC,CAAA;QACjB,IAAI,CAAC,OAAO,GAAC,MAAM,CAAC;QACpB,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAC,QAAQ,EAAC,EAAE,EAAC,OAAO,EAAC,IAAI,CAAC,aAAa,EAAC,iBAAiB,EAAC,IAAI,EAAC,CAAC,CAAC,CAAA;IAC7F,CAAC;IAED,KAAK,CAAC,aAAa,CAAE,GAAiB;QAElC,MAAM,OAAO,GAAG,oCAAuB,CAAC,OAAO,EAAE,CAAA;QACjD,MAAM,IAAI,GAAG,EAAC,IAAI,EAAC,EAAC,QAAQ,EAAC,IAAI,EAAC,QAAQ,EAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAC,OAAO,EAAC,OAAO,EAAC,EAAC,CAAA;QAC5F,IAAI,EAAE,GAA+C,IAAI,CAAC;QAC1D,MAAM,CAAC,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAC,MAAM,EAAC,EAAE,GAAC,EAAE,GAAG,OAAO,CAAA,CAAA,CAAC,CAAC,CAAA;QAC9E,UAAU,CAAC,GAAE,EAAE;YACX,IAAG,EAAE;gBACD,EAAE,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC,EAAC,IAAI,GAAC,EAAE,CAAC,CAAA;QACV,OAAO,CAAC,CAAC;IACb,CAAC;CACJ;AApBD,4BAoBC","sourcesContent":["import { REQ_HTTP_REQUESTS_COUNT } from \"../APIService\";\nimport { BaseEndpoint } from \"../BaseEndpoint\";\nimport { HTTPRequestVO, TransferPacketVO } from \"../structures/Interfaces\";\n\nexport class Liveness extends BaseEndpoint{\n started:Date;\n constructor(stated:Date){\n super(\"liveness\")\n this.started=stated;\n this.registerEndpoints([{endpoint:\"\",handler:this.checkLiveness,ignoreInterceptor:true}])\n }\n\n async checkLiveness (req:HTTPRequestVO){\n // liveness probe - check if server is alive (wait for 10 sec and send response)\n const request = REQ_HTTP_REQUESTS_COUNT.request()\n const data = {data:{liveness:true,wakeTime:(+new Date()) - (+this.started),request:request}}\n let cb:((data:TransferPacketVO<any>)=>void) | null = null;\n const p = new Promise<TransferPacketVO<any>>((resolve,reject)=>{cb = resolve})\n setTimeout(()=>{\n if(cb)\n cb(data);\n },1000*10)\n return p;\n }\n}"]}
|
@@ -1,9 +0,0 @@
|
|
1
|
-
import { BaseEndpoint } from "../BaseEndpoint";
|
2
|
-
import { HTTPRequestVO, TransferPacketVO } from "../structures/Interfaces";
|
3
|
-
export declare class Monitor extends BaseEndpoint {
|
4
|
-
constructor();
|
5
|
-
getLogs(req: HTTPRequestVO): Promise<TransferPacketVO<any>>;
|
6
|
-
getNetLogs(req: HTTPRequestVO): Promise<TransferPacketVO<any>>;
|
7
|
-
getStat(req: HTTPRequestVO): Promise<TransferPacketVO<any>>;
|
8
|
-
checkAuthorization(req: HTTPRequestVO): Promise<boolean>;
|
9
|
-
}
|