active-connect-ng2 0.2.41 → 0.2.43
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/esm2020/active-connect-ng2.mjs +5 -0
- package/esm2020/lib/active-connect-ng2.module.mjs +42 -0
- package/esm2020/lib/websocket/client.mjs +353 -0
- package/esm2020/lib/websocket/decorators/function.mjs +40 -0
- package/esm2020/lib/websocket/decorators/websocket/handle.mjs +9 -0
- package/esm2020/lib/websocket/decorators/websocket/on-reconnect.mjs +6 -0
- package/esm2020/lib/websocket/decorators/websocket/on-success.mjs +8 -0
- package/esm2020/lib/websocket/decorators/websocket/outbound.mjs +213 -0
- package/esm2020/lib/websocket/decorators/websocket/route.mjs +31 -0
- package/esm2020/lib/websocket/decorators/websocket/shared.mjs +10 -0
- package/esm2020/lib/websocket/decorators/websocket/websocket-route-service.mjs +2 -0
- package/esm2020/lib/websocket/index.mjs +11 -0
- package/esm2020/lib/websocket/json/json-parser.mjs +23 -0
- package/esm2020/lib/websocket/lifecycle/loading-status.mjs +31 -0
- package/esm2020/lib/websocket/objects/outbound-object.mjs +398 -0
- package/esm2020/public-api.mjs +7 -0
- package/fesm2015/active-connect-ng2.mjs +1184 -0
- package/fesm2015/active-connect-ng2.mjs.map +1 -0
- package/fesm2020/active-connect-ng2.mjs +1166 -0
- package/fesm2020/active-connect-ng2.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/active-connect-ng2.module.d.ts +7 -0
- package/lib/websocket/client.d.ts +60 -0
- package/lib/websocket/decorators/function.d.ts +30 -0
- package/lib/websocket/decorators/websocket/handle.d.ts +1 -0
- package/lib/websocket/decorators/websocket/on-reconnect.d.ts +1 -0
- package/lib/websocket/decorators/websocket/on-success.d.ts +1 -0
- package/lib/websocket/decorators/websocket/outbound.d.ts +1 -0
- package/lib/websocket/decorators/websocket/route.d.ts +1 -0
- package/lib/websocket/decorators/websocket/shared.d.ts +4 -0
- package/{src/lib/websocket/decorators/websocket/websocket-route-service.ts → lib/websocket/decorators/websocket/websocket-route-service.d.ts} +2 -3
- package/lib/websocket/json/json-parser.d.ts +5 -0
- package/lib/websocket/lifecycle/loading-status.d.ts +9 -0
- package/lib/websocket/objects/outbound-object.d.ts +48 -0
- package/package.json +32 -13
- package/{src/public-api.ts → public-api.d.ts} +0 -4
- package/ng-package.json +0 -7
- package/src/lib/active-connect-ng2.module.ts +0 -34
- package/src/lib/websocket/client.ts +0 -438
- package/src/lib/websocket/decorators/function.ts +0 -44
- package/src/lib/websocket/decorators/websocket/handle.ts +0 -12
- package/src/lib/websocket/decorators/websocket/on-reconnect.ts +0 -6
- package/src/lib/websocket/decorators/websocket/on-success.ts +0 -11
- package/src/lib/websocket/decorators/websocket/outbound.ts +0 -212
- package/src/lib/websocket/decorators/websocket/route.ts +0 -32
- package/src/lib/websocket/decorators/websocket/shared.ts +0 -11
- package/src/lib/websocket/json/json-parser.ts +0 -26
- package/src/lib/websocket/lifecycle/loading-status.ts +0 -32
- package/src/lib/websocket/objects/outbound-object.ts +0 -430
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
- /package/{src/lib/websocket/index.ts → lib/websocket/index.d.ts} +0 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWNvbm5lY3QtbmcyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9hY3RpdmUtY29ubmVjdC1uZzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { NgxIndexedDBModule } from 'ngx-indexed-db';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "ngx-indexed-db";
|
|
5
|
+
const dbConfig = {
|
|
6
|
+
name: 'activeconnect_cache',
|
|
7
|
+
version: 2,
|
|
8
|
+
objectStoresMeta: [
|
|
9
|
+
{
|
|
10
|
+
store: 'outbound',
|
|
11
|
+
storeConfig: { keyPath: 'method', autoIncrement: false },
|
|
12
|
+
storeSchema: [
|
|
13
|
+
{ name: 'method', keypath: 'method', options: { unique: true } },
|
|
14
|
+
{ name: 'data', keypath: 'data', options: { unique: false } },
|
|
15
|
+
{
|
|
16
|
+
name: 'specificHash',
|
|
17
|
+
keypath: 'specificHash',
|
|
18
|
+
options: { unique: false },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
name: 'length',
|
|
22
|
+
keypath: 'length',
|
|
23
|
+
options: { unique: false },
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
export class ActiveConnectNg2Module {
|
|
30
|
+
}
|
|
31
|
+
ActiveConnectNg2Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
32
|
+
ActiveConnectNg2Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, imports: [i1.NgxIndexedDBModule], exports: [NgxIndexedDBModule] });
|
|
33
|
+
ActiveConnectNg2Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, imports: [NgxIndexedDBModule.forRoot(dbConfig), NgxIndexedDBModule] });
|
|
34
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, decorators: [{
|
|
35
|
+
type: NgModule,
|
|
36
|
+
args: [{
|
|
37
|
+
declarations: [],
|
|
38
|
+
imports: [NgxIndexedDBModule.forRoot(dbConfig)],
|
|
39
|
+
exports: [NgxIndexedDBModule],
|
|
40
|
+
}]
|
|
41
|
+
}] });
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWNvbm5lY3QtbmcyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvbGliL2FjdGl2ZS1jb25uZWN0LW5nMi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsa0JBQWtCLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRTlELE1BQU0sUUFBUSxHQUFhO0lBQ3pCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLENBQUM7SUFDVixnQkFBZ0IsRUFBRTtRQUNoQjtZQUNFLEtBQUssRUFBRSxVQUFVO1lBQ2pCLFdBQVcsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtZQUN4RCxXQUFXLEVBQUU7Z0JBQ1gsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNoRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzdEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixPQUFPLEVBQUUsY0FBYztvQkFDdkIsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtpQkFDM0I7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7aUJBQzNCO2FBQ0Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxzQkFBc0I7O21IQUF0QixzQkFBc0I7b0hBQXRCLHNCQUFzQiw4Q0FGdkIsa0JBQWtCO29IQUVqQixzQkFBc0IsWUFIdkIsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUNwQyxrQkFBa0I7MkZBRWpCLHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ3hJbmRleGVkREJNb2R1bGUsIERCQ29uZmlnIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xyXG5cclxuY29uc3QgZGJDb25maWc6IERCQ29uZmlnID0ge1xyXG4gIG5hbWU6ICdhY3RpdmVjb25uZWN0X2NhY2hlJyxcclxuICB2ZXJzaW9uOiAyLFxyXG4gIG9iamVjdFN0b3Jlc01ldGE6IFtcclxuICAgIHtcclxuICAgICAgc3RvcmU6ICdvdXRib3VuZCcsXHJcbiAgICAgIHN0b3JlQ29uZmlnOiB7IGtleVBhdGg6ICdtZXRob2QnLCBhdXRvSW5jcmVtZW50OiBmYWxzZSB9LFxyXG4gICAgICBzdG9yZVNjaGVtYTogW1xyXG4gICAgICAgIHsgbmFtZTogJ21ldGhvZCcsIGtleXBhdGg6ICdtZXRob2QnLCBvcHRpb25zOiB7IHVuaXF1ZTogdHJ1ZSB9IH0sXHJcbiAgICAgICAgeyBuYW1lOiAnZGF0YScsIGtleXBhdGg6ICdkYXRhJywgb3B0aW9uczogeyB1bmlxdWU6IGZhbHNlIH0gfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnc3BlY2lmaWNIYXNoJyxcclxuICAgICAgICAgIGtleXBhdGg6ICdzcGVjaWZpY0hhc2gnLFxyXG4gICAgICAgICAgb3B0aW9uczogeyB1bmlxdWU6IGZhbHNlIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiAnbGVuZ3RoJyxcclxuICAgICAgICAgIGtleXBhdGg6ICdsZW5ndGgnLFxyXG4gICAgICAgICAgb3B0aW9uczogeyB1bmlxdWU6IGZhbHNlIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXSxcclxufTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXSxcclxuICBpbXBvcnRzOiBbTmd4SW5kZXhlZERCTW9kdWxlLmZvclJvb3QoZGJDb25maWcpXSxcclxuICBleHBvcnRzOiBbTmd4SW5kZXhlZERCTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjdGl2ZUNvbm5lY3ROZzJNb2R1bGUge31cclxuIl19
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
import { JsonParser } from './json/json-parser';
|
|
2
|
+
export class WebsocketClient {
|
|
3
|
+
constructor(url, supportsCache, dbService) {
|
|
4
|
+
this.url = url;
|
|
5
|
+
this.supportsCache = supportsCache;
|
|
6
|
+
this.dbService = dbService;
|
|
7
|
+
this.requestStack = [];
|
|
8
|
+
this.requestHistoryLogs = [];
|
|
9
|
+
this._token = '';
|
|
10
|
+
this.connectionEstablishedOnce = false;
|
|
11
|
+
this.messageId = 0;
|
|
12
|
+
this.rejectCallbacks = new Map();
|
|
13
|
+
this.expectedMethods = new Map();
|
|
14
|
+
this.closed = false;
|
|
15
|
+
if (supportsCache)
|
|
16
|
+
this.initCache();
|
|
17
|
+
this.setUrl(this.url);
|
|
18
|
+
}
|
|
19
|
+
setUrl(url) {
|
|
20
|
+
if (!url) {
|
|
21
|
+
let protocol;
|
|
22
|
+
let port;
|
|
23
|
+
switch (document.location.protocol) {
|
|
24
|
+
case 'https:': {
|
|
25
|
+
protocol = 'wss:';
|
|
26
|
+
port = ':443';
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
default: {
|
|
30
|
+
protocol = 'ws:';
|
|
31
|
+
port = ':80';
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
url = protocol + '//' + document.location.hostname + port + '/wss';
|
|
36
|
+
}
|
|
37
|
+
this.url = url;
|
|
38
|
+
this.disconnect();
|
|
39
|
+
this.connect(this.url);
|
|
40
|
+
}
|
|
41
|
+
connect(url) {
|
|
42
|
+
if (!this.subject) {
|
|
43
|
+
this.create(url);
|
|
44
|
+
}
|
|
45
|
+
return this.subject;
|
|
46
|
+
}
|
|
47
|
+
initTabSuspendedListener() {
|
|
48
|
+
if (document) {
|
|
49
|
+
document.addEventListener('visibilitychange', () => {
|
|
50
|
+
if (document.visibilityState === 'hidden') {
|
|
51
|
+
console.log('ActiveConnect: Closing WebSocket due to tab suspension...');
|
|
52
|
+
this.disconnect(true);
|
|
53
|
+
}
|
|
54
|
+
else if (document.visibilityState === 'visible') {
|
|
55
|
+
console.log('ActiveConnect: Reconnecting WebSocket...');
|
|
56
|
+
this.connect(this.url);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
logEntry(method) {
|
|
62
|
+
this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });
|
|
63
|
+
}
|
|
64
|
+
get logs() {
|
|
65
|
+
return this.requestHistoryLogs;
|
|
66
|
+
}
|
|
67
|
+
get Token() {
|
|
68
|
+
if (!this._token) {
|
|
69
|
+
if (window.localStorage)
|
|
70
|
+
this._token = window.localStorage.getItem('token') || '';
|
|
71
|
+
}
|
|
72
|
+
return this._token;
|
|
73
|
+
}
|
|
74
|
+
set Token(val) {
|
|
75
|
+
this._token = val;
|
|
76
|
+
if (window.localStorage)
|
|
77
|
+
window.localStorage.setItem('token', val);
|
|
78
|
+
}
|
|
79
|
+
set Connected(value) {
|
|
80
|
+
if (value) {
|
|
81
|
+
this.sendBrowserInfoToServer();
|
|
82
|
+
this.auth(this.Token).then(() => {
|
|
83
|
+
Promise.all(WebsocketClient.onReconnectCallback.map((c) => c.Func ? c.Func() : null)).then(() => {
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
this.resetRequestedState();
|
|
86
|
+
this.requestStack.forEach((e) => {
|
|
87
|
+
this.sendToSocket(e.method, e.data);
|
|
88
|
+
this.requestStack = this.requestStack.filter((e1) => e1 != e);
|
|
89
|
+
});
|
|
90
|
+
}, 2000);
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
if (this.pool && this.pool.WssConnected)
|
|
95
|
+
this.pool.WssConnected = value;
|
|
96
|
+
}
|
|
97
|
+
resetRequestedState() {
|
|
98
|
+
if (this.connectionEstablishedOnce) {
|
|
99
|
+
// reset requested state for outbounds
|
|
100
|
+
WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {
|
|
101
|
+
reset();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
this.connectionEstablishedOnce = true;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
static addResetRequestingStateCallback(callback) {
|
|
109
|
+
WebsocketClient.resetRequestedStateCallbacks.push(callback);
|
|
110
|
+
}
|
|
111
|
+
create(url) {
|
|
112
|
+
// create new connection
|
|
113
|
+
this.logEntry('TCP/HTTP:CONNECT-SERVER');
|
|
114
|
+
this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));
|
|
115
|
+
this.ws.onerror = (err) => {
|
|
116
|
+
this.ws.close();
|
|
117
|
+
this.logEntry('TCP/HTTP:ERROR:' + err);
|
|
118
|
+
console.log('ActiveConnect: ' + err);
|
|
119
|
+
};
|
|
120
|
+
this.ws.onopen = () => {
|
|
121
|
+
this.logEntry('TCP/HTTP:CONNECTED');
|
|
122
|
+
this.Connected = true;
|
|
123
|
+
};
|
|
124
|
+
this.ws.onmessage = (e) => {
|
|
125
|
+
this.messageReceived(JsonParser.parse(e.data.toString()));
|
|
126
|
+
};
|
|
127
|
+
this.ws.onclose = () => {
|
|
128
|
+
this.logEntry('TCP/HTTP:CLOSED');
|
|
129
|
+
if (!this.closed) {
|
|
130
|
+
if (this.pool && this.pool.WssConnected)
|
|
131
|
+
this.pool.WssConnected = false;
|
|
132
|
+
this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');
|
|
133
|
+
this.resetRequestedState();
|
|
134
|
+
setTimeout(() => {
|
|
135
|
+
this.connect(url);
|
|
136
|
+
}, 1000);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
sendToSocket(method, data, dontEnsureTransmission) {
|
|
141
|
+
const messageId = ++this.messageId;
|
|
142
|
+
if (this.ws.readyState != this.ws.OPEN) {
|
|
143
|
+
if (!dontEnsureTransmission)
|
|
144
|
+
this.requestStack.push({ method, data, messageId });
|
|
145
|
+
else
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
this.ws.send(JsonParser.stringify({ method, value: data, messageId }));
|
|
150
|
+
}
|
|
151
|
+
return messageId;
|
|
152
|
+
}
|
|
153
|
+
async auth(token) {
|
|
154
|
+
return this.sendToSocket('auth.token', token);
|
|
155
|
+
}
|
|
156
|
+
send(method, data, dontEnsureTransmission) {
|
|
157
|
+
this.logEntry('SEND:' + method);
|
|
158
|
+
const messageId = this.sendToSocket(method, data, dontEnsureTransmission || false);
|
|
159
|
+
if (messageId) {
|
|
160
|
+
return this.expectMethod(`m.${method}`, messageId);
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
return new Promise((resolve) => {
|
|
164
|
+
resolve(false);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
expectMethod(method, messageId) {
|
|
169
|
+
return new Promise((resolve, reject) => {
|
|
170
|
+
if (messageId) {
|
|
171
|
+
this.expectedMethods.set(messageId, [resolve]);
|
|
172
|
+
this.rejectCallbacks.set(messageId, reject);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
if (this.expectedMethods.has(method)) {
|
|
176
|
+
let arr = this.expectedMethods.get(method);
|
|
177
|
+
arr.push(resolve);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.expectedMethods.set(method, [resolve]);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
messageReceived({ method, value, messageId, specificHash, inserted, updated, deleted, length, }) {
|
|
186
|
+
this.logEntry('RECEIVED:' + method);
|
|
187
|
+
if (method == '___cache') {
|
|
188
|
+
this.handleOutboundCacheRequest(value);
|
|
189
|
+
}
|
|
190
|
+
if (messageId) {
|
|
191
|
+
if (method == 'm.error') {
|
|
192
|
+
const reject = this.rejectCallbacks.get(messageId);
|
|
193
|
+
if (reject) {
|
|
194
|
+
reject(value);
|
|
195
|
+
}
|
|
196
|
+
messageId = -1;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (messageId != null) {
|
|
200
|
+
const callback = this.expectedMethods.get(messageId);
|
|
201
|
+
if (callback) {
|
|
202
|
+
const func = callback.shift();
|
|
203
|
+
if (func)
|
|
204
|
+
func(value);
|
|
205
|
+
this.invokeSuccessHandlers(method);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
const callback = this.expectedMethods.get(method);
|
|
209
|
+
if (callback && callback.length > 0) {
|
|
210
|
+
const func = callback.shift();
|
|
211
|
+
if (func)
|
|
212
|
+
func(value);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
const out = WebsocketClient.outbounds.get(method);
|
|
216
|
+
if (out) {
|
|
217
|
+
out(value, specificHash, inserted, updated, deleted, length, this);
|
|
218
|
+
}
|
|
219
|
+
const handle = WebsocketClient.handles.get(method);
|
|
220
|
+
if (handle) {
|
|
221
|
+
handle.Func(value);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
throw Error('No MessageId was provided, the connection is not supported.');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
handleOutboundCacheRequest(method) {
|
|
231
|
+
if (this.dbService) {
|
|
232
|
+
try {
|
|
233
|
+
this.dbService.getByKey('outbound', method).subscribe((item) => {
|
|
234
|
+
if (item) {
|
|
235
|
+
this.send('___cache', {
|
|
236
|
+
method,
|
|
237
|
+
specificHash: item.specificHash || null,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.send('___cache', {
|
|
242
|
+
method,
|
|
243
|
+
specificHash: null,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
catch (e) {
|
|
249
|
+
this.send('___cache', {
|
|
250
|
+
method,
|
|
251
|
+
specificHash: null,
|
|
252
|
+
});
|
|
253
|
+
console.error('ActiveConnect: ' + e);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
this.send('___cache', {
|
|
258
|
+
method,
|
|
259
|
+
specificHash: null,
|
|
260
|
+
});
|
|
261
|
+
console.error('Active-Connect: Caching not possible as the indexedDB has not been initialized');
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
static expectOutbound(method, callback) {
|
|
265
|
+
WebsocketClient.outbounds.set(method, callback);
|
|
266
|
+
}
|
|
267
|
+
static registerHandle(method, callback) {
|
|
268
|
+
WebsocketClient.handles.set(method, callback);
|
|
269
|
+
}
|
|
270
|
+
get isConnected() {
|
|
271
|
+
if (this.ws)
|
|
272
|
+
return this.ws.readyState == WebSocket.OPEN;
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
sendBrowserInfoToServer() {
|
|
276
|
+
// send browser / os information
|
|
277
|
+
const browser = this.getBrowser();
|
|
278
|
+
const os = this.getOS();
|
|
279
|
+
this.send('___browser', {
|
|
280
|
+
browser: `${browser.name} ${browser.version} ${os}`,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
getBrowser() {
|
|
284
|
+
// https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/
|
|
285
|
+
var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
|
286
|
+
if (/trident/i.test(M[1])) {
|
|
287
|
+
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
|
|
288
|
+
return { name: 'IE ', version: tem[1] || '' };
|
|
289
|
+
}
|
|
290
|
+
if (M[1] === 'Chrome') {
|
|
291
|
+
tem = ua.match(/\bOPR\/(\d+)/);
|
|
292
|
+
if (tem != null) {
|
|
293
|
+
return { name: 'Opera', version: tem[1] };
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
|
297
|
+
if ((tem = ua.match(/version\/(\d+)/i)) != null) {
|
|
298
|
+
M.splice(1, 1, tem[1]);
|
|
299
|
+
}
|
|
300
|
+
return {
|
|
301
|
+
name: M[0],
|
|
302
|
+
version: M[1],
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
getOS() {
|
|
306
|
+
var userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'], iosPlatforms = ['iPhone', 'iPad', 'iPod'], os = null;
|
|
307
|
+
if (macosPlatforms.indexOf(platform) !== -1) {
|
|
308
|
+
os = 'Mac OS';
|
|
309
|
+
}
|
|
310
|
+
else if (iosPlatforms.indexOf(platform) !== -1) {
|
|
311
|
+
os = 'iOS';
|
|
312
|
+
}
|
|
313
|
+
else if (windowsPlatforms.indexOf(platform) !== -1) {
|
|
314
|
+
os = 'Windows';
|
|
315
|
+
}
|
|
316
|
+
else if (/Android/.test(userAgent)) {
|
|
317
|
+
os = 'Android';
|
|
318
|
+
}
|
|
319
|
+
else if (!os && /Linux/.test(platform)) {
|
|
320
|
+
os = 'Linux';
|
|
321
|
+
}
|
|
322
|
+
return os || '';
|
|
323
|
+
}
|
|
324
|
+
static onSuccess(callback, regexp) {
|
|
325
|
+
this.onSuccessHandlers.push({ callback, regexp });
|
|
326
|
+
}
|
|
327
|
+
static onReconnect(callback) {
|
|
328
|
+
WebsocketClient.onReconnectCallback.push(callback);
|
|
329
|
+
}
|
|
330
|
+
invokeSuccessHandlers(method) {
|
|
331
|
+
WebsocketClient.onSuccessHandlers
|
|
332
|
+
.filter((e) => e.regexp.test(method))
|
|
333
|
+
.forEach((e) => {
|
|
334
|
+
var res = e.callback.Func();
|
|
335
|
+
if (res && res.then) {
|
|
336
|
+
res.then();
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
disconnect(restart) {
|
|
341
|
+
if (!restart)
|
|
342
|
+
this.closed = true;
|
|
343
|
+
if (this.ws)
|
|
344
|
+
this.ws.close();
|
|
345
|
+
}
|
|
346
|
+
initCache() { }
|
|
347
|
+
}
|
|
348
|
+
WebsocketClient.resetRequestedStateCallbacks = [];
|
|
349
|
+
WebsocketClient.outbounds = new Map();
|
|
350
|
+
WebsocketClient.handles = new Map();
|
|
351
|
+
WebsocketClient.onSuccessHandlers = [];
|
|
352
|
+
WebsocketClient.onReconnectCallback = [];
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBc0RoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBMEMsRUFBRSxDQUFDO1FBUS9ELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFvQ1osOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBNEMzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBeUN0QixvQkFBZSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUEwT3BFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFqYXBCLElBQUksYUFBYTtZQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVMsTUFBTSxDQUFDLEdBQXVCO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixJQUFJLFFBQVEsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDO1lBQ1QsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtnQkFDbEMsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDYixRQUFRLEdBQUcsTUFBTSxDQUFDO29CQUNsQixJQUFJLEdBQUcsTUFBTSxDQUFDO29CQUNkLE1BQU07aUJBQ1A7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7b0JBQ1AsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDakIsSUFBSSxHQUFHLEtBQUssQ0FBQztvQkFDYixNQUFNO2lCQUNQO2FBQ0Y7WUFDRCxHQUFHLEdBQUcsUUFBUSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO1NBQ3BFO1FBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBYSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUlPLE9BQU8sQ0FBQyxHQUFXO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDbEI7UUFDRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVNLHdCQUF3QjtRQUM3QixJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pELElBQUksUUFBUSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7b0JBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsMkRBQTJELENBQzVELENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdkI7cUJBQU0sSUFBSSxRQUFRLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtvQkFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFhLENBQUMsQ0FBQztpQkFDbEM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUlPLFFBQVEsQ0FBQyxNQUFjO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUdELElBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ2hCLElBQUksTUFBTSxDQUFDLFlBQVk7Z0JBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFXLEtBQUssQ0FBQyxHQUFXO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLElBQUksTUFBTSxDQUFDLFlBQVk7WUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELElBQVksU0FBUyxDQUFDLEtBQWM7UUFDbEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUUvQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUM5QixPQUFPLENBQUMsR0FBRyxDQUNULGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDekIsQ0FDRixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1YsVUFBVSxDQUFDLEdBQUcsRUFBRTt3QkFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs0QkFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUNoRSxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ1gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUMxRSxDQUFDO0lBR08sbUJBQW1CO1FBQ3pCLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2xDLHNDQUFzQztZQUN0QyxlQUFlLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzdELEtBQUssRUFBRSxDQUFDO1lBQ1YsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztTQUN2QztJQUNILENBQUM7SUFDTSxNQUFNLENBQUMsK0JBQStCLENBQUMsUUFBa0I7UUFDOUQsZUFBZSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sTUFBTSxDQUFDLEdBQVc7UUFDeEIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtvQkFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ1Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBR1MsWUFBWSxDQUNwQixNQUFjLEVBQ2QsSUFBUyxFQUNULHNCQUFnQztRQUVoQyxNQUFNLFNBQVMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRTtZQUN0QyxJQUFJLENBQUMsc0JBQXNCO2dCQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQzs7Z0JBQ2pELE9BQU8sS0FBSyxDQUFDO1NBQ25CO2FBQU07WUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFTSxJQUFJLENBQ1QsTUFBYyxFQUNkLElBQVMsRUFDVCxzQkFBZ0M7UUFFaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FDakMsTUFBTSxFQUNOLElBQUksRUFDSixzQkFBc0IsSUFBSSxLQUFLLENBQ2hDLENBQUM7UUFDRixJQUFJLFNBQVMsRUFBRTtZQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLE1BQU0sRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3BEO2FBQU07WUFDTCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzdCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUlPLFlBQVksQ0FBQyxNQUFjLEVBQUUsU0FBeUI7UUFDNUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNyQyxJQUFJLFNBQVMsRUFBRTtnQkFDYixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDN0M7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDcEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFDLEdBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QztxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2lCQUM3QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEVBQ3RCLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBQ1IsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEdBVVA7UUFDQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUU7WUFDeEIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLE1BQU0sSUFBSSxTQUFTLEVBQUU7Z0JBQ3ZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2Y7Z0JBQ0QsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2hCO1NBQ0Y7UUFFRCxJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QixJQUFJLElBQUk7b0JBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDcEM7aUJBQU07Z0JBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUNuQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzlCLElBQUksSUFBSTt3QkFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3ZCO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEdBQUcsRUFBRTt3QkFDUCxHQUFHLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3BFO29CQUNELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNuRCxJQUFJLE1BQU0sRUFBRTt3QkFDVCxNQUFNLENBQUMsSUFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDbEM7aUJBQ0Y7YUFDRjtTQUNGO2FBQU07WUFDTCxNQUFNLEtBQUssQ0FDVCw2REFBNkQsQ0FDOUQsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLDBCQUEwQixDQUFDLE1BQWM7UUFDL0MsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNsRSxJQUFJLElBQUksRUFBRTt3QkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTs0QkFDcEIsTUFBTTs0QkFDTixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJO3lCQUN4QyxDQUFDLENBQUM7cUJBQ0o7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7NEJBQ3BCLE1BQU07NEJBQ04sWUFBWSxFQUFFLElBQUk7eUJBQ25CLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ3BCLE1BQU07b0JBQ04sWUFBWSxFQUFFLElBQUk7aUJBQ25CLENBQUMsQ0FBQztnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3RDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNwQixNQUFNO2dCQUNOLFlBQVksRUFBRSxJQUFJO2FBQ25CLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxLQUFLLENBQ1gsZ0ZBQWdGLENBQ2pGLENBQUM7U0FDSDtJQUNILENBQUM7SUFjRCxNQUFNLENBQUMsY0FBYyxDQUNuQixNQUFjLEVBQ2QsUUFRUztRQUVULGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBR0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFjLEVBQUUsUUFBMkI7UUFDL0QsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsZ0NBQWdDO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLEVBQUUsRUFBRTtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVTtRQUNmLHNGQUFzRjtRQUN0RixJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsU0FBUyxFQUMxQixHQUFHLEVBQ0gsQ0FBQyxHQUNDLEVBQUUsQ0FBQyxLQUFLLENBQ04sOERBQThELENBQy9ELElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3pCLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7U0FDL0M7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7WUFDckIsR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0IsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUNmLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMzQztTQUNGO1FBQ0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO1lBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QjtRQUNELE9BQU87WUFDTCxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNWLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQ3hDLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFDcEMsY0FBYyxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEVBQzlELGdCQUFnQixHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQ3pELFlBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQ3pDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFWixJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDM0MsRUFBRSxHQUFHLFFBQVEsQ0FBQztTQUNmO2FBQU0sSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hELEVBQUUsR0FBRyxLQUFLLENBQUM7U0FDWjthQUFNLElBQUksZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BELEVBQUUsR0FBRyxTQUFTLENBQUM7U0FDaEI7YUFBTSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDcEMsRUFBRSxHQUFHLFNBQVMsQ0FBQztTQUNoQjthQUFNLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN4QyxFQUFFLEdBQUcsT0FBTyxDQUFDO1NBQ2Q7UUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQU1NLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBMkIsRUFBRSxNQUFjO1FBQ2pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBR0QsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUEyQjtRQUM1QyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFjO1FBQzFDLGVBQWUsQ0FBQyxpQkFBaUI7YUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNwQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNiLElBQUksR0FBRyxHQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBaUIsRUFBRSxDQUFDO1lBQzFDLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ25CLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNaO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBR00sVUFBVSxDQUFDLE9BQWlCO1FBQ2pDLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLFNBQVMsS0FBSSxDQUFDOztBQXZVUCw0Q0FBNEIsR0FBZSxFQUFFLENBQUM7QUF3TTlDLHlCQUFTLEdBV3BCLElBQUksR0FBRyxFQUFFLENBQUM7QUFnQkMsdUJBQU8sR0FBbUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQXNFcEQsaUNBQWlCLEdBRzFCLEVBQUUsQ0FBQztBQUtNLG1DQUFtQixHQUF3QixFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlIH0gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xyXG5pbXBvcnQgeyBEZWNvcmFibGVGdW5jdGlvbiB9IGZyb20gJy4vZGVjb3JhdG9ycy9mdW5jdGlvbic7XHJcbmltcG9ydCB7IEpzb25QYXJzZXIgfSBmcm9tICcuL2pzb24vanNvbi1wYXJzZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFdlYnNvY2tldENsaWVudCB7XHJcbiAgd3MhOiBXZWJTb2NrZXQ7XHJcbiAgcG9vbCE6IHsgV3NzQ29ubmVjdGVkOiBib29sZWFuIH0gfCBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdXJsPzogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBzdXBwb3J0c0NhY2hlPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYlNlcnZpY2U/OiBOZ3hJbmRleGVkREJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpZiAoc3VwcG9ydHNDYWNoZSkgdGhpcy5pbml0Q2FjaGUoKTtcclxuICAgIHRoaXMuc2V0VXJsKHRoaXMudXJsKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzZXRVcmwodXJsOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIGxldCBwcm90b2NvbDtcclxuICAgICAgbGV0IHBvcnQ7XHJcbiAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpIHtcclxuICAgICAgICBjYXNlICdodHRwczonOiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3c3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjQ0Myc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjgwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB1cmwgPSBwcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArIHBvcnQgKyAnL3dzcyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVybCA9IHVybDtcclxuICAgIHRoaXMuZGlzY29ubmVjdCgpO1xyXG4gICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgfVxyXG5cclxuICBzdWJqZWN0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN1YmplY3QpIHtcclxuICAgICAgdGhpcy5jcmVhdGUodXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdFRhYlN1c3BlbmRlZExpc3RlbmVyKCkge1xyXG4gICAgaWYgKGRvY3VtZW50KSB7XHJcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAnQWN0aXZlQ29ubmVjdDogQ2xvc2luZyBXZWJTb2NrZXQgZHVlIHRvIHRhYiBzdXNwZW5zaW9uLi4uJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQWN0aXZlQ29ubmVjdDogUmVjb25uZWN0aW5nIFdlYlNvY2tldC4uLicpO1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHRoaXMudXJsIGFzIHN0cmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVxdWVzdFN0YWNrOiBhbnlbXSA9IFtdO1xyXG4gIHByaXZhdGUgcmVxdWVzdEhpc3RvcnlMb2dzOiB7IHRpbWVzdGFtcDogRGF0ZTsgbWV0aG9kOiBzdHJpbmcgfVtdID0gW107XHJcbiAgcHJpdmF0ZSBsb2dFbnRyeShtZXRob2Q6IHN0cmluZykge1xyXG4gICAgdGhpcy5yZXF1ZXN0SGlzdG9yeUxvZ3MucHVzaCh7IHRpbWVzdGFtcDogbmV3IERhdGUoRGF0ZS5ub3coKSksIG1ldGhvZCB9KTtcclxuICB9XHJcbiAgcHVibGljIGdldCBsb2dzKCk6IHsgdGltZXN0YW1wOiBEYXRlOyBtZXRob2Q6IHN0cmluZyB9W10ge1xyXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdEhpc3RvcnlMb2dzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdG9rZW4gPSAnJztcclxuICBwdWJsaWMgZ2V0IFRva2VuKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuX3Rva2VuKSB7XHJcbiAgICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKVxyXG4gICAgICAgIHRoaXMuX3Rva2VuID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCd0b2tlbicpIHx8ICcnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IFRva2VuKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90b2tlbiA9IHZhbDtcclxuICAgIGlmICh3aW5kb3cubG9jYWxTdG9yYWdlKSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3Rva2VuJywgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0IENvbm5lY3RlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuc2VuZEJyb3dzZXJJbmZvVG9TZXJ2ZXIoKTtcclxuXHJcbiAgICAgIHRoaXMuYXV0aCh0aGlzLlRva2VuKS50aGVuKCgpID0+IHtcclxuICAgICAgICBQcm9taXNlLmFsbChcclxuICAgICAgICAgIFdlYnNvY2tldENsaWVudC5vblJlY29ubmVjdENhbGxiYWNrLm1hcCgoYykgPT5cclxuICAgICAgICAgICAgYy5GdW5jID8gYy5GdW5jKCkgOiBudWxsXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkU3RhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2suZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VuZFRvU29ja2V0KGUubWV0aG9kLCBlLmRhdGEpO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVxdWVzdFN0YWNrID0gdGhpcy5yZXF1ZXN0U3RhY2suZmlsdGVyKChlMSkgPT4gZTEgIT0gZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucG9vbCAmJiB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkKSB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkID0gdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgc3RhdGljIHJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3M6IEZ1bmN0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIGNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHJlc2V0UmVxdWVzdGVkU3RhdGUoKSB7XHJcbiAgICBpZiAodGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlKSB7XHJcbiAgICAgIC8vIHJlc2V0IHJlcXVlc3RlZCBzdGF0ZSBmb3Igb3V0Ym91bmRzXHJcbiAgICAgIFdlYnNvY2tldENsaWVudC5yZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzLmZvckVhY2goKHJlc2V0KSA9PiB7XHJcbiAgICAgICAgcmVzZXQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgc3RhdGljIGFkZFJlc2V0UmVxdWVzdGluZ1N0YXRlQ2FsbGJhY2soY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlKHVybDogc3RyaW5nKSB7XHJcbiAgICAvLyBjcmVhdGUgbmV3IGNvbm5lY3Rpb25cclxuICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNPTk5FQ1QtU0VSVkVSJyk7XHJcbiAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh1cmwgKyAodGhpcy5zdXBwb3J0c0NhY2hlID8gJz9jYWNoZT10cnVlJyA6ICcnKSk7XHJcbiAgICB0aGlzLndzLm9uZXJyb3IgPSAoZXJyKSA9PiB7XHJcbiAgICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6RVJST1I6JyArIGVycik7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmVDb25uZWN0OiAnICsgZXJyKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHtcclxuICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6Q09OTkVDVEVEJyk7XHJcbiAgICAgIHRoaXMuQ29ubmVjdGVkID0gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9ubWVzc2FnZSA9IChlKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVJlY2VpdmVkKEpzb25QYXJzZXIucGFyc2UoZS5kYXRhLnRvU3RyaW5nKCkpKTtcclxuICAgIH07XHJcbiAgICB0aGlzLndzLm9uY2xvc2UgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNMT1NFRCcpO1xyXG4gICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9vbCAmJiB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkKSB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6UkVTRVQtUkVRVUVTVEVELU9VVEJPVU5ELVNUQVRFJyk7XHJcbiAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZFN0YXRlKCk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3QodXJsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZUlkOiBudW1iZXIgPSAwO1xyXG4gIHByb3RlY3RlZCBzZW5kVG9Tb2NrZXQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSArK3RoaXMubWVzc2FnZUlkO1xyXG4gICAgaWYgKHRoaXMud3MucmVhZHlTdGF0ZSAhPSB0aGlzLndzLk9QRU4pIHtcclxuICAgICAgaWYgKCFkb250RW5zdXJlVHJhbnNtaXNzaW9uKVxyXG4gICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLnB1c2goeyBtZXRob2QsIGRhdGEsIG1lc3NhZ2VJZCB9KTtcclxuICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndzLnNlbmQoSnNvblBhcnNlci5zdHJpbmdpZnkoeyBtZXRob2QsIHZhbHVlOiBkYXRhLCBtZXNzYWdlSWQgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lc3NhZ2VJZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGF1dGgodG9rZW46IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZW5kVG9Tb2NrZXQoJ2F1dGgudG9rZW4nLCB0b2tlbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZChcclxuICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbj86IGJvb2xlYW5cclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5sb2dFbnRyeSgnU0VORDonICsgbWV0aG9kKTtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHRoaXMuc2VuZFRvU29ja2V0KFxyXG4gICAgICBtZXRob2QsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24gfHwgZmFsc2VcclxuICAgICk7XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4cGVjdE1ldGhvZChgbS4ke21ldGhvZH1gLCBtZXNzYWdlSWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWplY3RDYWxsYmFja3M6IE1hcDxudW1iZXIsIEZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGV4cGVjdGVkTWV0aG9kczogTWFwPHN0cmluZyB8IG51bWJlciwgQXJyYXk8RnVuY3Rpb24+PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGV4cGVjdE1ldGhvZChtZXRob2Q6IHN0cmluZywgbWVzc2FnZUlkPzogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICAgIHRoaXMuZXhwZWN0ZWRNZXRob2RzLnNldChtZXNzYWdlSWQsIFtyZXNvbHZlXSk7XHJcbiAgICAgICAgdGhpcy5yZWplY3RDYWxsYmFja3Muc2V0KG1lc3NhZ2VJZCwgcmVqZWN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5leHBlY3RlZE1ldGhvZHMuaGFzKG1ldGhvZCkpIHtcclxuICAgICAgICAgIGxldCBhcnIgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIChhcnIgYXMgQXJyYXk8RnVuY3Rpb24+KS5wdXNoKHJlc29sdmUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWV0aG9kLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VSZWNlaXZlZCh7XHJcbiAgICBtZXRob2QsXHJcbiAgICB2YWx1ZSxcclxuICAgIG1lc3NhZ2VJZCxcclxuICAgIHNwZWNpZmljSGFzaCxcclxuICAgIGluc2VydGVkLFxyXG4gICAgdXBkYXRlZCxcclxuICAgIGRlbGV0ZWQsXHJcbiAgICBsZW5ndGgsXHJcbiAgfToge1xyXG4gICAgbWV0aG9kOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogYW55O1xyXG4gICAgbWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xyXG4gICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsO1xyXG4gICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbDtcclxuICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICB0aGlzLmxvZ0VudHJ5KCdSRUNFSVZFRDonICsgbWV0aG9kKTtcclxuICAgIGlmIChtZXRob2QgPT0gJ19fX2NhY2hlJykge1xyXG4gICAgICB0aGlzLmhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgaWYgKG1ldGhvZCA9PSAnbS5lcnJvcicpIHtcclxuICAgICAgICBjb25zdCByZWplY3QgPSB0aGlzLnJlamVjdENhbGxiYWNrcy5nZXQobWVzc2FnZUlkKTtcclxuICAgICAgICBpZiAocmVqZWN0KSB7XHJcbiAgICAgICAgICByZWplY3QodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZXNzYWdlSWQgPSAtMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChtZXNzYWdlSWQgIT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXNzYWdlSWQpO1xyXG4gICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICBjb25zdCBmdW5jID0gY2FsbGJhY2suc2hpZnQoKTtcclxuICAgICAgICBpZiAoZnVuYykgZnVuYyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5pbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXRob2QpO1xyXG4gICAgICAgIGlmIChjYWxsYmFjayAmJiBjYWxsYmFjay5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBmdW5jID0gY2FsbGJhY2suc2hpZnQoKTtcclxuICAgICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgb3V0ID0gV2Vic29ja2V0Q2xpZW50Lm91dGJvdW5kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIGlmIChvdXQpIHtcclxuICAgICAgICAgICAgb3V0KHZhbHVlLCBzcGVjaWZpY0hhc2gsIGluc2VydGVkLCB1cGRhdGVkLCBkZWxldGVkLCBsZW5ndGgsIHRoaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICBpZiAoaGFuZGxlKSB7XHJcbiAgICAgICAgICAgIChoYW5kbGUuRnVuYyBhcyBGdW5jdGlvbikodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgJ05vIE1lc3NhZ2VJZCB3YXMgcHJvdmlkZWQsIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdChtZXRob2Q6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZGJTZXJ2aWNlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5kYlNlcnZpY2UuZ2V0QnlLZXkoJ291dGJvdW5kJywgbWV0aG9kKS5zdWJzY3JpYmUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoOiBpdGVtLnNwZWNpZmljSGFzaCB8fCBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FjdGl2ZUNvbm5lY3Q6ICcgKyBlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAnQWN0aXZlLUNvbm5lY3Q6IENhY2hpbmcgbm90IHBvc3NpYmxlIGFzIHRoZSBpbmRleGVkREIgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3V0Ym91bmRzOiBNYXA8XHJcbiAgICBzdHJpbmcsXHJcbiAgICAoXHJcbiAgICAgIGRhdGE6IGFueSxcclxuICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBfdGhpczogV2Vic29ja2V0Q2xpZW50XHJcbiAgICApID0+IHZvaWRcclxuICA+ID0gbmV3IE1hcCgpO1xyXG4gIHN0YXRpYyBleHBlY3RPdXRib3VuZChcclxuICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgY2FsbGJhY2s6IChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gICkge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm91dGJvdW5kcy5zZXQobWV0aG9kLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBoYW5kbGVzOiBNYXA8c3RyaW5nLCBEZWNvcmFibGVGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIHJlZ2lzdGVySGFuZGxlKG1ldGhvZDogc3RyaW5nLCBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5oYW5kbGVzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNDb25uZWN0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy53cykgcmV0dXJuIHRoaXMud3MucmVhZHlTdGF0ZSA9PSBXZWJTb2NrZXQuT1BFTjtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZW5kQnJvd3NlckluZm9Ub1NlcnZlcigpIHtcclxuICAgIC8vIHNlbmQgYnJvd3NlciAvIG9zIGluZm9ybWF0aW9uXHJcbiAgICBjb25zdCBicm93c2VyID0gdGhpcy5nZXRCcm93c2VyKCk7XHJcbiAgICBjb25zdCBvcyA9IHRoaXMuZ2V0T1MoKTtcclxuICAgIHRoaXMuc2VuZCgnX19fYnJvd3NlcicsIHtcclxuICAgICAgYnJvd3NlcjogYCR7YnJvd3Nlci5uYW1lfSAke2Jyb3dzZXIudmVyc2lvbn0gJHtvc31gLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0QnJvd3NlcigpOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0ge1xyXG4gICAgLy8gaHR0cHM6Ly93d3cuZ3JlZ29yeXZhcmdoZXNlLmNvbS9ob3ctdG8tZ2V0LWJyb3dzZXItbmFtZS1hbmQtdmVyc2lvbi12aWEtamF2YXNjcmlwdC9cclxuICAgIHZhciB1YSA9IG5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHRlbSxcclxuICAgICAgTSA9XHJcbiAgICAgICAgdWEubWF0Y2goXHJcbiAgICAgICAgICAvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2lcclxuICAgICAgICApIHx8IFtdO1xyXG4gICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xyXG4gICAgICB0ZW0gPSAvXFxicnZbIDpdKyhcXGQrKS9nLmV4ZWModWEpIHx8IFtdO1xyXG4gICAgICByZXR1cm4geyBuYW1lOiAnSUUgJywgdmVyc2lvbjogdGVtWzFdIHx8ICcnIH07XHJcbiAgICB9XHJcbiAgICBpZiAoTVsxXSA9PT0gJ0Nocm9tZScpIHtcclxuICAgICAgdGVtID0gdWEubWF0Y2goL1xcYk9QUlxcLyhcXGQrKS8pO1xyXG4gICAgICBpZiAodGVtICE9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiAnT3BlcmEnLCB2ZXJzaW9uOiB0ZW1bMV0gfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgTSA9IE1bMl0gPyBbTVsxXSwgTVsyXV0gOiBbbmF2aWdhdG9yLmFwcE5hbWUsIG5hdmlnYXRvci5hcHBWZXJzaW9uLCAnLT8nXTtcclxuICAgIGlmICgodGVtID0gdWEubWF0Y2goL3ZlcnNpb25cXC8oXFxkKykvaSkpICE9IG51bGwpIHtcclxuICAgICAgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5hbWU6IE1bMF0sXHJcbiAgICAgIHZlcnNpb246IE1bMV0sXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9TKCk6IHN0cmluZyB7XHJcbiAgICB2YXIgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQsXHJcbiAgICAgIHBsYXRmb3JtID0gd2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSxcclxuICAgICAgbWFjb3NQbGF0Zm9ybXMgPSBbJ01hY2ludG9zaCcsICdNYWNJbnRlbCcsICdNYWNQUEMnLCAnTWFjNjhLJ10sXHJcbiAgICAgIHdpbmRvd3NQbGF0Zm9ybXMgPSBbJ1dpbjMyJywgJ1dpbjY0JywgJ1dpbmRvd3MnLCAnV2luQ0UnXSxcclxuICAgICAgaW9zUGxhdGZvcm1zID0gWydpUGhvbmUnLCAnaVBhZCcsICdpUG9kJ10sXHJcbiAgICAgIG9zID0gbnVsbDtcclxuXHJcbiAgICBpZiAobWFjb3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ01hYyBPUyc7XHJcbiAgICB9IGVsc2UgaWYgKGlvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnaU9TJztcclxuICAgIH0gZWxzZSBpZiAod2luZG93c1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnV2luZG93cyc7XHJcbiAgICB9IGVsc2UgaWYgKC9BbmRyb2lkLy50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgb3MgPSAnQW5kcm9pZCc7XHJcbiAgICB9IGVsc2UgaWYgKCFvcyAmJiAvTGludXgvLnRlc3QocGxhdGZvcm0pKSB7XHJcbiAgICAgIG9zID0gJ0xpbnV4JztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb3MgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvblN1Y2Nlc3NIYW5kbGVyczoge1xyXG4gICAgY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uO1xyXG4gICAgcmVnZXhwOiBSZWdFeHA7XHJcbiAgfVtdID0gW107XHJcbiAgcHVibGljIHN0YXRpYyBvblN1Y2Nlc3MoY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uLCByZWdleHA6IFJlZ0V4cCkge1xyXG4gICAgdGhpcy5vblN1Y2Nlc3NIYW5kbGVycy5wdXNoKHsgY2FsbGJhY2ssIHJlZ2V4cCB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uUmVjb25uZWN0Q2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uW10gPSBbXTtcclxuICBzdGF0aWMgb25SZWNvbm5lY3QoY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub25SZWNvbm5lY3RDYWxsYmFjay5wdXNoKGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52b2tlU3VjY2Vzc0hhbmRsZXJzKG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub25TdWNjZXNzSGFuZGxlcnNcclxuICAgICAgLmZpbHRlcigoZSkgPT4gZS5yZWdleHAudGVzdChtZXRob2QpKVxyXG4gICAgICAuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIHZhciByZXMgPSAoZS5jYWxsYmFjay5GdW5jIGFzIEZ1bmN0aW9uKSgpO1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnRoZW4pIHtcclxuICAgICAgICAgIHJlcy50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZWQgPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzY29ubmVjdChyZXN0YXJ0PzogYm9vbGVhbikge1xyXG4gICAgaWYgKCFyZXN0YXJ0KSB0aGlzLmNsb3NlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy53cykgdGhpcy53cy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2FjaGUoKSB7fVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the reference to an object method used for websocket routes and outbounds.
|
|
3
|
+
*/
|
|
4
|
+
export class DecorableFunction {
|
|
5
|
+
/**
|
|
6
|
+
* Creates an instance of DecorableFunction.
|
|
7
|
+
* @param objConfig - The configuration object for the object method.
|
|
8
|
+
* @param objConfig.target - The target object.
|
|
9
|
+
* @param objConfig.propertyKey - The property key of the target object.
|
|
10
|
+
*/
|
|
11
|
+
constructor(objConfig) {
|
|
12
|
+
this.objConfig = objConfig;
|
|
13
|
+
// singelton service - fetch from angular
|
|
14
|
+
const prototype = this.objConfig.target.prototype || this.objConfig.target;
|
|
15
|
+
if (!prototype.___constructorOverridden) {
|
|
16
|
+
prototype.___constructorOverridden = true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns the decorated function.
|
|
21
|
+
* @returns - The decorated function.
|
|
22
|
+
*/
|
|
23
|
+
get Func() {
|
|
24
|
+
if (this.objConfig?.target &&
|
|
25
|
+
this.objConfig.target[this.objConfig.propertyKey]) {
|
|
26
|
+
return this.objConfig.target[this.objConfig.propertyKey].bind(this.getBindObject());
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Returns the bind object.
|
|
32
|
+
* @private
|
|
33
|
+
* @returns - The bind object.
|
|
34
|
+
*/
|
|
35
|
+
getBindObject() {
|
|
36
|
+
const prototype = this.objConfig.target.prototype || this.objConfig.target;
|
|
37
|
+
return prototype.___data._obj;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy9mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUI7Ozs7O09BS0c7SUFDSCxZQUFzQixTQUErQztRQUEvQyxjQUFTLEdBQVQsU0FBUyxDQUFzQztRQUNuRSx5Q0FBeUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUU7WUFDdkMsU0FBUyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLElBQUk7UUFDYixJQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUNqRDtZQUNBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDckIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWE7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzNFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFJlcHJlc2VudHMgdGhlIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgbWV0aG9kIHVzZWQgZm9yIHdlYnNvY2tldCByb3V0ZXMgYW5kIG91dGJvdW5kcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEZWNvcmFibGVGdW5jdGlvbiB7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEZWNvcmFibGVGdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gb2JqQ29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgb2JqZWN0IG1ldGhvZC5cclxuICAgKiBAcGFyYW0gb2JqQ29uZmlnLnRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBvYmpDb25maWcucHJvcGVydHlLZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvYmpDb25maWc6IHsgdGFyZ2V0OiBhbnk7IHByb3BlcnR5S2V5OiBzdHJpbmcgfSkge1xyXG4gICAgLy8gc2luZ2VsdG9uIHNlcnZpY2UgLSBmZXRjaCBmcm9tIGFuZ3VsYXJcclxuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMub2JqQ29uZmlnLnRhcmdldC5wcm90b3R5cGUgfHwgdGhpcy5vYmpDb25maWcudGFyZ2V0O1xyXG4gICAgaWYgKCFwcm90b3R5cGUuX19fY29uc3RydWN0b3JPdmVycmlkZGVuKSB7XHJcbiAgICAgIHByb3RvdHlwZS5fX19jb25zdHJ1Y3Rvck92ZXJyaWRkZW4gPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uLlxyXG4gICAqIEByZXR1cm5zIC0gVGhlIGRlY29yYXRlZCBmdW5jdGlvbi5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IEZ1bmMoKTogKCguLi5kYXRhOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+IHwgYW55KSB8IG51bGwge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9iakNvbmZpZz8udGFyZ2V0ICYmXHJcbiAgICAgIHRoaXMub2JqQ29uZmlnLnRhcmdldFt0aGlzLm9iakNvbmZpZy5wcm9wZXJ0eUtleV1cclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vYmpDb25maWcudGFyZ2V0W3RoaXMub2JqQ29uZmlnLnByb3BlcnR5S2V5XS5iaW5kKFxyXG4gICAgICAgIHRoaXMuZ2V0QmluZE9iamVjdCgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJpbmQgb2JqZWN0LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMgLSBUaGUgYmluZCBvYmplY3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRCaW5kT2JqZWN0KCk6IGFueSB7XHJcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLm9iakNvbmZpZy50YXJnZXQucHJvdG90eXBlIHx8IHRoaXMub2JqQ29uZmlnLnRhcmdldDtcclxuICAgIHJldHVybiBwcm90b3R5cGUuX19fZGF0YS5fb2JqO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
import { DecorableFunction } from '../function';
|
|
3
|
+
export function Handle(method) {
|
|
4
|
+
return function _Handle(target, propertyKey) {
|
|
5
|
+
// method annotation
|
|
6
|
+
WebsocketClient.registerHandle(method, new DecorableFunction({ target, propertyKey }));
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2RlY29yYXRvcnMvd2Vic29ja2V0L2hhbmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQWM7SUFDbkMsT0FBTyxTQUFTLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUI7UUFDdEQsb0JBQW9CO1FBQ3BCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2Vic29ja2V0Q2xpZW50IH0gZnJvbSAnLi4vLi4vY2xpZW50JztcclxuaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jdGlvbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlKG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIF9IYW5kbGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gbWV0aG9kIGFubm90YXRpb25cclxuICAgIFdlYnNvY2tldENsaWVudC5yZWdpc3RlckhhbmRsZShcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBuZXcgRGVjb3JhYmxlRnVuY3Rpb24oeyB0YXJnZXQsIHByb3BlcnR5S2V5IH0pXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
import { DecorableFunction } from '../function';
|
|
3
|
+
export function OnReconnect(target, propertyKey) {
|
|
4
|
+
WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tcmVjb25uZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2RlY29yYXRvcnMvd2Vic29ja2V0L29uLXJlY29ubmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQVcsRUFBRSxXQUFtQjtJQUMxRCxlQUFlLENBQUMsV0FBVyxDQUFDLElBQUksaUJBQWlCLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xyXG5pbXBvcnQgeyBEZWNvcmFibGVGdW5jdGlvbiB9IGZyb20gJy4uL2Z1bmN0aW9uJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBPblJlY29ubmVjdCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xyXG4gIFdlYnNvY2tldENsaWVudC5vblJlY29ubmVjdChuZXcgRGVjb3JhYmxlRnVuY3Rpb24oeyB0YXJnZXQsIHByb3BlcnR5S2V5IH0pKTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
import { DecorableFunction } from '../function';
|
|
3
|
+
export function OnSuccess(regexp) {
|
|
4
|
+
return function _Route(target, propertyKey) {
|
|
5
|
+
WebsocketClient.onSuccess(new DecorableFunction({ target, propertyKey }), regexp);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tc3VjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvbGliL3dlYnNvY2tldC9kZWNvcmF0b3JzL3dlYnNvY2tldC9vbi1zdWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBYztJQUN0QyxPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQVcsRUFBRSxXQUFtQjtRQUNyRCxlQUFlLENBQUMsU0FBUyxDQUN2QixJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQzlDLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uLy4uL2NsaWVudCc7XHJcbmltcG9ydCB7IERlY29yYWJsZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3Rpb24nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9uU3VjY2VzcyhyZWdleHA6IFJlZ0V4cCkge1xyXG4gIHJldHVybiBmdW5jdGlvbiBfUm91dGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uU3VjY2VzcyhcclxuICAgICAgbmV3IERlY29yYWJsZUZ1bmN0aW9uKHsgdGFyZ2V0LCBwcm9wZXJ0eUtleSB9KSxcclxuICAgICAgcmVnZXhwXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|