active-connect-ng2 0.2.38 → 0.2.40
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/lib/websocket/client.mjs +3 -2
- package/fesm2015/active-connect-ng2.mjs +2 -1
- package/fesm2015/active-connect-ng2.mjs.map +1 -1
- package/fesm2020/active-connect-ng2.mjs +2 -1
- package/fesm2020/active-connect-ng2.mjs.map +1 -1
- package/lib/websocket/client.d.ts +1 -1
- package/package.json +1 -1
|
@@ -32,7 +32,6 @@ export class WebsocketClient {
|
|
|
32
32
|
this.url = protocol + '//' + document.location.hostname + port + '/wss';
|
|
33
33
|
}
|
|
34
34
|
this.connect(this.url);
|
|
35
|
-
this.initTabSuspendedListener();
|
|
36
35
|
}
|
|
37
36
|
connect(url) {
|
|
38
37
|
if (!this.subject) {
|
|
@@ -125,6 +124,8 @@ export class WebsocketClient {
|
|
|
125
124
|
if (!this.closed) {
|
|
126
125
|
if (this.pool && this.pool.WssConnected)
|
|
127
126
|
this.pool.WssConnected = false;
|
|
127
|
+
this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');
|
|
128
|
+
this.resetRequestedState();
|
|
128
129
|
setTimeout(() => {
|
|
129
130
|
this.connect(url);
|
|
130
131
|
}, 1000);
|
|
@@ -343,4 +344,4 @@ WebsocketClient.outbounds = new Map();
|
|
|
343
344
|
WebsocketClient.handles = new Map();
|
|
344
345
|
WebsocketClient.onSuccessHandlers = [];
|
|
345
346
|
WebsocketClient.onReconnectCallback = [];
|
|
346
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBaURoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBMEMsRUFBRSxDQUFDO1FBUS9ELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFvQ1osOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBMEMzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBeUN0QixvQkFBZSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUEwT3BFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUExWnBCLElBQUksYUFBYTtZQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxRQUFRLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQztZQUNULFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLEtBQUssUUFBUSxDQUFDLENBQUM7b0JBQ2IsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFDbEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztvQkFDZCxNQUFNO2lCQUNQO2dCQUNELE9BQU8sQ0FBQyxDQUFDO29CQUNQLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2pCLElBQUksR0FBRyxLQUFLLENB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QUFFO1lBQ2IsSUFBSSxHQUFHLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxVQUFVLENBQUMsT0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTLEtBQUksQ0FBQzs7QUFyVVAsNENBQTRCLEdBQWUsRUFBRSxDQUFDO0FBc005Qyx5QkFBUyxHQVdwQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBZ0JDLHVCQUFPLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFzRXBELGlDQUFpQixHQUcxQixFQUFFLENBQUM7QUFLTSxtQ0FBbUIsR0FBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSB9IGZyb20gJ25neC1pbmRleGVkLWRiJztcclxuaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuL2RlY29yYXRvcnMvZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBKc29uUGFyc2VyIH0gZnJvbSAnLi9qc29uL2pzb24tcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xyXG4gIHdzITogV2ViU29ja2V0O1xyXG4gIHBvb2whOiB7IFdzc0Nvbm5lY3RlZDogYm9vbGVhbiB9IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVybD86IHN0cmluZyxcclxuICAgIHByaXZhdGUgc3VwcG9ydHNDYWNoZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgZGJTZXJ2aWNlPzogTmd4SW5kZXhlZERCU2VydmljZVxyXG4gICkge1xyXG4gICAgaWYgKHN1cHBvcnRzQ2FjaGUpIHRoaXMuaW5pdENhY2hlKCk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICBsZXQgcHJvdG9jb2w7XHJcbiAgICAgIGxldCBwb3J0O1xyXG4gICAgICBzd2l0Y2ggKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSB7XHJcbiAgICAgICAgY2FzZSAnaHR0cHM6Jzoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3NzOic7XHJcbiAgICAgICAgICBwb3J0ID0gJzo0NDMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIHByb3RvY29sID0gJ3dzOic7XHJcbiAgICAgICAgICBwb3J0ID0gJzo4MCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwgPSBwcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArIHBvcnQgKyAnL3dzcyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbm5lY3QodGhpcy51cmwgYXMgc3RyaW5nKTtcclxuICAgIHRoaXMuaW5pdFRhYlN1c3BlbmRlZExpc3RlbmVyKCk7XHJcbiAgfVxyXG5cclxuICBzdWJqZWN0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29ubmVjdCh1cmw6IHN0cmluZykge1xyXG4gICAgaWYgKCF0aGlzLnN1YmplY3QpIHtcclxuICAgICAgdGhpcy5jcmVhdGUodXJsKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YmplY3Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJTdXNwZW5kZWRMaXN0ZW5lcigpIHtcclxuICAgIGlmIChkb2N1bWVudCkge1xyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICdoaWRkZW4nKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgJ0FjdGl2ZUNvbm5lY3Q6IENsb3NpbmcgV2ViU29ja2V0IGR1ZSB0byB0YWIgc3VzcGVuc2lvbi4uLidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QodHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0FjdGl2ZUNvbm5lY3Q6IFJlY29ubmVjdGluZyBXZWJTb2NrZXQuLi4nKTtcclxuICAgICAgICAgIHRoaXMuY29ubmVjdCh0aGlzLnVybCBhcyBzdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlcXVlc3RTdGFjazogYW55W10gPSBbXTtcclxuICBwcml2YXRlIHJlcXVlc3RIaXN0b3J5TG9nczogeyB0aW1lc3RhbXA6IERhdGU7IG1ldGhvZDogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIHByaXZhdGUgbG9nRW50cnkobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIHRoaXMucmVxdWVzdEhpc3RvcnlMb2dzLnB1c2goeyB0aW1lc3RhbXA6IG5ldyBEYXRlKERhdGUubm93KCkpLCBtZXRob2QgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBnZXQgbG9ncygpOiB7IHRpbWVzdGFtcDogRGF0ZTsgbWV0aG9kOiBzdHJpbmcgfVtdIHtcclxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RIaXN0b3J5TG9ncztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Rva2VuID0gJyc7XHJcbiAgcHVibGljIGdldCBUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbikge1xyXG4gICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSlcclxuICAgICAgICB0aGlzLl90b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBUb2tlbih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW4gPSB2YWw7XHJcbiAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBDb25uZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbmRCcm93c2VySW5mb1RvU2VydmVyKCk7XHJcblxyXG4gICAgICB0aGlzLmF1dGgodGhpcy5Ub2tlbikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICBXZWJzb2NrZXRDbGllbnQub25SZWNvbm5lY3RDYWxsYmFjay5tYXAoKGMpID0+XHJcbiAgICAgICAgICAgIGMuRnVuYyA/IGMuRnVuYygpIDogbnVsbFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZFN0YXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbmRUb1NvY2tldChlLm1ldGhvZCwgZS5kYXRhKTtcclxuICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjayA9IHRoaXMucmVxdWVzdFN0YWNrLmZpbHRlcigoZTEpID0+IGUxICE9IGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0YXRpYyByZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzOiBGdW5jdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBjb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSByZXNldFJlcXVlc3RlZFN0YXRlKCkge1xyXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSkge1xyXG4gICAgICAvLyByZXNldCByZXF1ZXN0ZWQgc3RhdGUgZm9yIG91dGJvdW5kc1xyXG4gICAgICBXZWJzb2NrZXRDbGllbnQucmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrcy5mb3JFYWNoKChyZXNldCkgPT4ge1xyXG4gICAgICAgIHJlc2V0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb25uZWN0aW9uRXN0YWJsaXNoZWRPbmNlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIHN0YXRpYyBhZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGNhbGxiYWNrOiBGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZSh1cmw6IHN0cmluZykge1xyXG4gICAgLy8gY3JlYXRlIG5ldyBjb25uZWN0aW9uXHJcbiAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpDT05ORUNULVNFUlZFUicpO1xyXG4gICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsICsgKHRoaXMuc3VwcG9ydHNDYWNoZSA/ICc/Y2FjaGU9dHJ1ZScgOiAnJykpO1xyXG4gICAgdGhpcy53cy5vbmVycm9yID0gKGVycikgPT4ge1xyXG4gICAgICB0aGlzLndzLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkVSUk9SOicgKyBlcnIpO1xyXG4gICAgICBjb25zb2xlLmxvZygnQWN0aXZlQ29ubmVjdDogJyArIGVycik7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9nRW50cnkoJ1RDUC9IVFRQOkNPTk5FQ1RFRCcpO1xyXG4gICAgICB0aGlzLkNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VSZWNlaXZlZChKc29uUGFyc2VyLnBhcnNlKGUuZGF0YS50b1N0cmluZygpKSk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpDTE9TRUQnKTtcclxuICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBvb2wgJiYgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCkgdGhpcy5wb29sLldzc0Nvbm5lY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0KHVybCk7XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VJZDogbnVtYmVyID0gMDtcclxuICBwcm90ZWN0ZWQgc2VuZFRvU29ja2V0KFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gKyt0aGlzLm1lc3NhZ2VJZDtcclxuICAgIGlmICh0aGlzLndzLnJlYWR5U3RhdGUgIT0gdGhpcy53cy5PUEVOKSB7XHJcbiAgICAgIGlmICghZG9udEVuc3VyZVRyYW5zbWlzc2lvbilcclxuICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5wdXNoKHsgbWV0aG9kLCBkYXRhLCBtZXNzYWdlSWQgfSk7XHJcbiAgICAgIGVsc2UgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53cy5zZW5kKEpzb25QYXJzZXIuc3RyaW5naWZ5KHsgbWV0aG9kLCB2YWx1ZTogZGF0YSwgbWVzc2FnZUlkIH0pKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXNzYWdlSWQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdXRoKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VuZFRvU29ja2V0KCdhdXRoLnRva2VuJywgdG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRoaXMubG9nRW50cnkoJ1NFTkQ6JyArIG1ldGhvZCk7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSB0aGlzLnNlbmRUb1NvY2tldChcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uIHx8IGZhbHNlXHJcbiAgICApO1xyXG4gICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5leHBlY3RNZXRob2QoYG0uJHttZXRob2R9YCwgbWVzc2FnZUlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVqZWN0Q2FsbGJhY2tzOiBNYXA8bnVtYmVyLCBGdW5jdGlvbj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RlZE1ldGhvZHM6IE1hcDxzdHJpbmcgfCBudW1iZXIsIEFycmF5PEZ1bmN0aW9uPj4gPSBuZXcgTWFwKCk7XHJcbiAgcHJpdmF0ZSBleHBlY3RNZXRob2QobWV0aG9kOiBzdHJpbmcsIG1lc3NhZ2VJZD86IG51bWJlciB8IG51bGwpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWVzc2FnZUlkLCBbcmVzb2x2ZV0pO1xyXG4gICAgICAgIHRoaXMucmVqZWN0Q2FsbGJhY2tzLnNldChtZXNzYWdlSWQsIHJlamVjdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwZWN0ZWRNZXRob2RzLmhhcyhtZXRob2QpKSB7XHJcbiAgICAgICAgICBsZXQgYXJyID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICAoYXJyIGFzIEFycmF5PEZ1bmN0aW9uPikucHVzaChyZXNvbHZlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1ldGhvZCwgW3Jlc29sdmVdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlUmVjZWl2ZWQoe1xyXG4gICAgbWV0aG9kLFxyXG4gICAgdmFsdWUsXHJcbiAgICBtZXNzYWdlSWQsXHJcbiAgICBzcGVjaWZpY0hhc2gsXHJcbiAgICBpbnNlcnRlZCxcclxuICAgIHVwZGF0ZWQsXHJcbiAgICBkZWxldGVkLFxyXG4gICAgbGVuZ3RoLFxyXG4gIH06IHtcclxuICAgIG1ldGhvZDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIG1lc3NhZ2VJZDogbnVtYmVyIHwgbnVsbDtcclxuICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbDtcclxuICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICBkZWxldGVkOiBhbnlbXSB8IG51bGw7XHJcbiAgICBsZW5ndGg6IG51bWJlciB8IG51bGw7XHJcbiAgfSkge1xyXG4gICAgdGhpcy5sb2dFbnRyeSgnUkVDRUlWRUQ6JyArIG1ldGhvZCk7XHJcbiAgICBpZiAobWV0aG9kID09ICdfX19jYWNoZScpIHtcclxuICAgICAgdGhpcy5oYW5kbGVPdXRib3VuZENhY2hlUmVxdWVzdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGlmIChtZXRob2QgPT0gJ20uZXJyb3InKSB7XHJcbiAgICAgICAgY29uc3QgcmVqZWN0ID0gdGhpcy5yZWplY3RDYWxsYmFja3MuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgICAgaWYgKHJlamVjdCkge1xyXG4gICAgICAgICAgcmVqZWN0KHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVzc2FnZUlkID0gLTE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAobWVzc2FnZUlkICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWVzc2FnZUlkKTtcclxuICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IGNhbGxiYWNrLnNoaWZ0KCk7XHJcbiAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW52b2tlU3VjY2Vzc0hhbmRsZXJzKG1ldGhvZCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLmV4cGVjdGVkTWV0aG9kcy5nZXQobWV0aG9kKTtcclxuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgY2FsbGJhY2subGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZnVuYyA9IGNhbGxiYWNrLnNoaWZ0KCk7XHJcbiAgICAgICAgICBpZiAoZnVuYykgZnVuYyh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG91dCA9IFdlYnNvY2tldENsaWVudC5vdXRib3VuZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICBpZiAob3V0KSB7XHJcbiAgICAgICAgICAgIG91dCh2YWx1ZSwgc3BlY2lmaWNIYXNoLCBpbnNlcnRlZCwgdXBkYXRlZCwgZGVsZXRlZCwgbGVuZ3RoLCB0aGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGhhbmRsZSA9IFdlYnNvY2tldENsaWVudC5oYW5kbGVzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKGhhbmRsZSkge1xyXG4gICAgICAgICAgICAoaGFuZGxlLkZ1bmMgYXMgRnVuY3Rpb24pKHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICdObyBNZXNzYWdlSWQgd2FzIHByb3ZpZGVkLCB0aGUgY29ubmVjdGlvbiBpcyBub3Qgc3VwcG9ydGVkLidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT3V0Ym91bmRDYWNoZVJlcXVlc3QobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmRiU2VydmljZSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZGJTZXJ2aWNlLmdldEJ5S2V5KCdvdXRib3VuZCcsIG1ldGhvZCkuc3Vic2NyaWJlKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgICAgICAgIHNwZWNpZmljSGFzaDogaXRlbS5zcGVjaWZpY0hhc2ggfHwgbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdBY3RpdmVDb25uZWN0OiAnICsgZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgbWV0aG9kLFxyXG4gICAgICAgIHNwZWNpZmljSGFzaDogbnVsbCxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ0FjdGl2ZS1Db25uZWN0OiBDYWNoaW5nIG5vdCBwb3NzaWJsZSBhcyB0aGUgaW5kZXhlZERCIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG91dGJvdW5kczogTWFwPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgZXhwZWN0T3V0Ym91bmQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGNhbGxiYWNrOiAoXHJcbiAgICAgIGRhdGE6IGFueSxcclxuICAgICAgc3BlY2lmaWNIYXNoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBpbnNlcnRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICB1cGRhdGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGRlbGV0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsLFxyXG4gICAgICBfdGhpczogV2Vic29ja2V0Q2xpZW50XHJcbiAgICApID0+IHZvaWRcclxuICApIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vdXRib3VuZHMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgaGFuZGxlczogTWFwPHN0cmluZywgRGVjb3JhYmxlRnVuY3Rpb24+ID0gbmV3IE1hcCgpO1xyXG4gIHN0YXRpYyByZWdpc3RlckhhbmRsZShtZXRob2Q6IHN0cmluZywgY2FsbGJhY2s6IERlY29yYWJsZUZ1bmN0aW9uKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQuaGFuZGxlcy5zZXQobWV0aG9kLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGlzQ29ubmVjdGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMud3MpIHJldHVybiB0aGlzLndzLnJlYWR5U3RhdGUgPT0gV2ViU29ja2V0Lk9QRU47XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VuZEJyb3dzZXJJbmZvVG9TZXJ2ZXIoKSB7XHJcbiAgICAvLyBzZW5kIGJyb3dzZXIgLyBvcyBpbmZvcm1hdGlvblxyXG4gICAgY29uc3QgYnJvd3NlciA9IHRoaXMuZ2V0QnJvd3NlcigpO1xyXG4gICAgY29uc3Qgb3MgPSB0aGlzLmdldE9TKCk7XHJcbiAgICB0aGlzLnNlbmQoJ19fX2Jyb3dzZXInLCB7XHJcbiAgICAgIGJyb3dzZXI6IGAke2Jyb3dzZXIubmFtZX0gJHticm93c2VyLnZlcnNpb259ICR7b3N9YCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEJyb3dzZXIoKTogeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9IHtcclxuICAgIC8vIGh0dHBzOi8vd3d3LmdyZWdvcnl2YXJnaGVzZS5jb20vaG93LXRvLWdldC1icm93c2VyLW5hbWUtYW5kLXZlcnNpb24tdmlhLWphdmFzY3JpcHQvXHJcbiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICB0ZW0sXHJcbiAgICAgIE0gPVxyXG4gICAgICAgIHVhLm1hdGNoKFxyXG4gICAgICAgICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfGZpcmVmb3h8bXNpZXx0cmlkZW50KD89XFwvKSlcXC8/XFxzKihcXGQrKS9pXHJcbiAgICAgICAgKSB8fCBbXTtcclxuICAgIGlmICgvdHJpZGVudC9pLnRlc3QoTVsxXSkpIHtcclxuICAgICAgdGVtID0gL1xcYnJ2WyA6XSsoXFxkKykvZy5leGVjKHVhKSB8fCBbXTtcclxuICAgICAgcmV0dXJuIHsgbmFtZTogJ0lFICcsIHZlcnNpb246IHRlbVsxXSB8fCAnJyB9O1xyXG4gICAgfVxyXG4gICAgaWYgKE1bMV0gPT09ICdDaHJvbWUnKSB7XHJcbiAgICAgIHRlbSA9IHVhLm1hdGNoKC9cXGJPUFJcXC8oXFxkKykvKTtcclxuICAgICAgaWYgKHRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogJ09wZXJhJywgdmVyc2lvbjogdGVtWzFdIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIE0gPSBNWzJdID8gW01bMV0sIE1bMl1dIDogW25hdmlnYXRvci5hcHBOYW1lLCBuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgJy0/J107XHJcbiAgICBpZiAoKHRlbSA9IHVhLm1hdGNoKC92ZXJzaW9uXFwvKFxcZCspL2kpKSAhPSBudWxsKSB7XHJcbiAgICAgIE0uc3BsaWNlKDEsIDEsIHRlbVsxXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuYW1lOiBNWzBdLFxyXG4gICAgICB2ZXJzaW9uOiBNWzFdLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRPUygpOiBzdHJpbmcge1xyXG4gICAgdmFyIHVzZXJBZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LFxyXG4gICAgICBwbGF0Zm9ybSA9IHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0sXHJcbiAgICAgIG1hY29zUGxhdGZvcm1zID0gWydNYWNpbnRvc2gnLCAnTWFjSW50ZWwnLCAnTWFjUFBDJywgJ01hYzY4SyddLFxyXG4gICAgICB3aW5kb3dzUGxhdGZvcm1zID0gWydXaW4zMicsICdXaW42NCcsICdXaW5kb3dzJywgJ1dpbkNFJ10sXHJcbiAgICAgIGlvc1BsYXRmb3JtcyA9IFsnaVBob25lJywgJ2lQYWQnLCAnaVBvZCddLFxyXG4gICAgICBvcyA9IG51bGw7XHJcblxyXG4gICAgaWYgKG1hY29zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdNYWMgT1MnO1xyXG4gICAgfSBlbHNlIGlmIChpb3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ2lPUyc7XHJcbiAgICB9IGVsc2UgaWYgKHdpbmRvd3NQbGF0Zm9ybXMuaW5kZXhPZihwbGF0Zm9ybSkgIT09IC0xKSB7XHJcbiAgICAgIG9zID0gJ1dpbmRvd3MnO1xyXG4gICAgfSBlbHNlIGlmICgvQW5kcm9pZC8udGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgIG9zID0gJ0FuZHJvaWQnO1xyXG4gICAgfSBlbHNlIGlmICghb3MgJiYgL0xpbnV4Ly50ZXN0KHBsYXRmb3JtKSkge1xyXG4gICAgICBvcyA9ICdMaW51eCc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9zIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb25TdWNjZXNzSGFuZGxlcnM6IHtcclxuICAgIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbjtcclxuICAgIHJlZ2V4cDogUmVnRXhwO1xyXG4gIH1bXSA9IFtdO1xyXG4gIHB1YmxpYyBzdGF0aWMgb25TdWNjZXNzKGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbiwgcmVnZXhwOiBSZWdFeHApIHtcclxuICAgIHRoaXMub25TdWNjZXNzSGFuZGxlcnMucHVzaCh7IGNhbGxiYWNrLCByZWdleHAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvblJlY29ubmVjdENhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbltdID0gW107XHJcbiAgc3RhdGljIG9uUmVjb25uZWN0KGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uUmVjb25uZWN0Q2FsbGJhY2sucHVzaChjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2Q6IHN0cmluZykge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uU3VjY2Vzc0hhbmRsZXJzXHJcbiAgICAgIC5maWx0ZXIoKGUpID0+IGUucmVnZXhwLnRlc3QobWV0aG9kKSlcclxuICAgICAgLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICB2YXIgcmVzID0gKGUuY2FsbGJhY2suRnVuYyBhcyBGdW5jdGlvbikoKTtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XHJcbiAgICAgICAgICByZXMudGhlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2VkID0gZmFsc2U7XHJcbiAgcHVibGljIGRpc2Nvbm5lY3QocmVzdGFydD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghcmVzdGFydCkgdGhpcy5jbG9zZWQgPSB0cnVlO1xyXG4gICAgdGhpcy53cy5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q2FjaGUoKSB7fVxyXG59XHJcbiJdfQ==
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxHQUFZLEVBQ1osYUFBdUIsRUFDeEIsU0FBK0I7UUFGOUIsUUFBRyxHQUFILEdBQUcsQ0FBUztRQUNaLGtCQUFhLEdBQWIsYUFBYSxDQUFVO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXNCO1FBZ0RoQyxpQkFBWSxHQUFVLEVBQUUsQ0FBQztRQUN6Qix1QkFBa0IsR0FBMEMsRUFBRSxDQUFDO1FBUS9ELFdBQU0sR0FBRyxFQUFFLENBQUM7UUFvQ1osOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBNEMzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBeUN0QixvQkFBZSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQTBDLElBQUksR0FBRyxFQUFFLENBQUM7UUEwT3BFLFdBQU0sR0FBRyxLQUFLLENBQUM7UUEzWnBCLElBQUksYUFBYTtZQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxRQUFRLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQztZQUNULFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLEtBQUssUUFBUSxDQUFDLENBQUM7b0JBQ2IsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFDbEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztvQkFDZCxNQUFNO2lCQUNQO2dCQUNELE9BQU8sQ0FBQyxDQUFDO29CQUNQLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2pCLElBQUksR0FBRyxLQUFLLENB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QU0sQ0FBQyxDQUFDO2FBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxHQUFHLEdBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFpQixFQUFFLENBQUM7WUFDMUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxVQUFVLENBQUMsT0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTLEtBQUksQ0FBQzs7QUF2VVAsNENBQTRCLEdBQWUsRUFBRSxDQUFDO0FBd005Qyx5QkFBUyxHQVdwQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBZ0JDLHVCQUFPLEdBQW1DLElBQUksR0FBRyxFQUFFLENBQUM7QUFzRXBELGlDQUFpQixHQUcxQixFQUFFLENBQUM7QUFLTSxtQ0FBbUIsR0FBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSB9IGZyb20gJ25neC1pbmRleGVkLWRiJztcclxuaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuL2RlY29yYXRvcnMvZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBKc29uUGFyc2VyIH0gZnJvbSAnLi9qc29uL2pzb24tcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xyXG4gIHdzITogV2ViU29ja2V0O1xyXG4gIHBvb2whOiB7IFdzc0Nvbm5lY3RlZDogYm9vbGVhbiB9IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHVybD86IHN0cmluZyxcclxuICAgIHByaXZhdGUgc3VwcG9ydHNDYWNoZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgZGJTZXJ2aWNlPzogTmd4SW5kZXhlZERCU2VydmljZVxyXG4gICkge1xyXG4gICAgaWYgKHN1cHBvcnRzQ2FjaGUpIHRoaXMuaW5pdENhY2hlKCk7XHJcbiAgICBpZiAoIXVybCkge1xyXG4gICAgICBsZXQgcHJvdG9jb2w7XHJcbiAgICAgIGxldCBwb3J0O1xyXG4gICAgICBzd2l0Y2ggKGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sKSB7XHJcbiAgICAgICAgY2FzZSAnaHR0cHM6Jzoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3NzOic7XHJcbiAgICAgICAgICBwb3J0ID0gJzo0NDMnO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIHByb3RvY29sID0gJ3dzOic7XHJcbiAgICAgICAgICBwb3J0ID0gJzo4MCc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cmwgPSBwcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArIHBvcnQgKyAnL3dzcyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbm5lY3QodGhpcy51cmwgYXMgc3RyaW5nKTtcclxuICB9XHJcblxyXG4gIHN1YmplY3Q6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjb25uZWN0KHVybDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIXRoaXMuc3ViamVjdCkge1xyXG4gICAgICB0aGlzLmNyZWF0ZSh1cmwpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuc3ViamVjdDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0VGFiU3VzcGVuZGVkTGlzdGVuZXIoKSB7XHJcbiAgICBpZiAoZG9jdW1lbnQpIHtcclxuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICdBY3RpdmVDb25uZWN0OiBDbG9zaW5nIFdlYlNvY2tldCBkdWUgdG8gdGFiIHN1c3BlbnNpb24uLi4nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5kaXNjb25uZWN0KHRydWUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdBY3RpdmVDb25uZWN0OiBSZWNvbm5lY3RpbmcgV2ViU29ja2V0Li4uJyk7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3QodGhpcy51cmwgYXMgc3RyaW5nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0U3RhY2s6IGFueVtdID0gW107XHJcbiAgcHJpdmF0ZSByZXF1ZXN0SGlzdG9yeUxvZ3M6IHsgdGltZXN0YW1wOiBEYXRlOyBtZXRob2Q6IHN0cmluZyB9W10gPSBbXTtcclxuICBwcml2YXRlIGxvZ0VudHJ5KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnJlcXVlc3RIaXN0b3J5TG9ncy5wdXNoKHsgdGltZXN0YW1wOiBuZXcgRGF0ZShEYXRlLm5vdygpKSwgbWV0aG9kIH0pO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IGxvZ3MoKTogeyB0aW1lc3RhbXA6IERhdGU7IG1ldGhvZDogc3RyaW5nIH1bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0SGlzdG9yeUxvZ3M7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF90b2tlbiA9ICcnO1xyXG4gIHB1YmxpYyBnZXQgVG9rZW4oKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5fdG9rZW4pIHtcclxuICAgICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpXHJcbiAgICAgICAgdGhpcy5fdG9rZW4gPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Rva2VuJykgfHwgJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdG9rZW47XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgVG9rZW4odmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3Rva2VuID0gdmFsO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhbFN0b3JhZ2UpIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndG9rZW4nLCB2YWwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXQgQ29ubmVjdGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5zZW5kQnJvd3NlckluZm9Ub1NlcnZlcigpO1xyXG5cclxuICAgICAgdGhpcy5hdXRoKHRoaXMuVG9rZW4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgV2Vic29ja2V0Q2xpZW50Lm9uUmVjb25uZWN0Q2FsbGJhY2subWFwKChjKSA9PlxyXG4gICAgICAgICAgICBjLkZ1bmMgPyBjLkZ1bmMoKSA6IG51bGxcclxuICAgICAgICAgIClcclxuICAgICAgICApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RTdGFjay5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZW5kVG9Tb2NrZXQoZS5tZXRob2QsIGUuZGF0YSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sgPSB0aGlzLnJlcXVlc3RTdGFjay5maWx0ZXIoKGUxKSA9PiBlMSAhPSBlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrczogRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UpIHtcclxuICAgICAgLy8gcmVzZXQgcmVxdWVzdGVkIHN0YXRlIGZvciBvdXRib3VuZHNcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MuZm9yRWFjaCgocmVzZXQpID0+IHtcclxuICAgICAgICByZXNldCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgYWRkUmVzZXRSZXF1ZXN0aW5nU3RhdGVDYWxsYmFjayhjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5yZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGUodXJsOiBzdHJpbmcpIHtcclxuICAgIC8vIGNyZWF0ZSBuZXcgY29ubmVjdGlvblxyXG4gICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6Q09OTkVDVC1TRVJWRVInKTtcclxuICAgIHRoaXMud3MgPSBuZXcgV2ViU29ja2V0KHVybCArICh0aGlzLnN1cHBvcnRzQ2FjaGUgPyAnP2NhY2hlPXRydWUnIDogJycpKTtcclxuICAgIHRoaXMud3Mub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgdGhpcy53cy5jbG9zZSgpO1xyXG4gICAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpFUlJPUjonICsgZXJyKTtcclxuICAgICAgY29uc29sZS5sb2coJ0FjdGl2ZUNvbm5lY3Q6ICcgKyBlcnIpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpDT05ORUNURUQnKTtcclxuICAgICAgdGhpcy5Db25uZWN0ZWQgPSB0cnVlO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25tZXNzYWdlID0gKGUpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlUmVjZWl2ZWQoSnNvblBhcnNlci5wYXJzZShlLmRhdGEudG9TdHJpbmcoKSkpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25jbG9zZSA9ICgpID0+IHtcclxuICAgICAgdGhpcy5sb2dFbnRyeSgnVENQL0hUVFA6Q0xPU0VEJyk7XHJcbiAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvZ0VudHJ5KCdUQ1AvSFRUUDpSRVNFVC1SRVFVRVNURUQtT1VUQk9VTkQtU1RBVEUnKTtcclxuICAgICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkU3RhdGUoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29ubmVjdCh1cmwpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXNzYWdlSWQ6IG51bWJlciA9IDA7XHJcbiAgcHJvdGVjdGVkIHNlbmRUb1NvY2tldChcclxuICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbj86IGJvb2xlYW5cclxuICApIHtcclxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9ICsrdGhpcy5tZXNzYWdlSWQ7XHJcbiAgICBpZiAodGhpcy53cy5yZWFkeVN0YXRlICE9IHRoaXMud3MuT1BFTikge1xyXG4gICAgICBpZiAoIWRvbnRFbnN1cmVUcmFuc21pc3Npb24pXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sucHVzaCh7IG1ldGhvZCwgZGF0YSwgbWVzc2FnZUlkIH0pO1xyXG4gICAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud3Muc2VuZChKc29uUGFyc2VyLnN0cmluZ2lmeSh7IG1ldGhvZCwgdmFsdWU6IGRhdGEsIG1lc3NhZ2VJZCB9KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVzc2FnZUlkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXV0aCh0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbmRUb1NvY2tldCgnYXV0aC50b2tlbicsIHRva2VuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBkb250RW5zdXJlVHJhbnNtaXNzaW9uPzogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmxvZ0VudHJ5KCdTRU5EOicgKyBtZXRob2QpO1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5zZW5kVG9Tb2NrZXQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZGF0YSxcclxuICAgICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbiB8fCBmYWxzZVxyXG4gICAgKTtcclxuICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0TWV0aG9kKGBtLiR7bWV0aG9kfWAsIG1lc3NhZ2VJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlamVjdENhbGxiYWNrczogTWFwPG51bWJlciwgRnVuY3Rpb24+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgZXhwZWN0ZWRNZXRob2RzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBBcnJheTxGdW5jdGlvbj4+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgZXhwZWN0TWV0aG9kKG1ldGhvZDogc3RyaW5nLCBtZXNzYWdlSWQ/OiBudW1iZXIgfCBudWxsKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5leHBlY3RlZE1ldGhvZHMuc2V0KG1lc3NhZ2VJZCwgW3Jlc29sdmVdKTtcclxuICAgICAgICB0aGlzLnJlamVjdENhbGxiYWNrcy5zZXQobWVzc2FnZUlkLCByZWplY3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGVjdGVkTWV0aG9kcy5oYXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgbGV0IGFyciA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgKGFyciBhcyBBcnJheTxGdW5jdGlvbj4pLnB1c2gocmVzb2x2ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXhwZWN0ZWRNZXRob2RzLnNldChtZXRob2QsIFtyZXNvbHZlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZVJlY2VpdmVkKHtcclxuICAgIG1ldGhvZCxcclxuICAgIHZhbHVlLFxyXG4gICAgbWVzc2FnZUlkLFxyXG4gICAgc3BlY2lmaWNIYXNoLFxyXG4gICAgaW5zZXJ0ZWQsXHJcbiAgICB1cGRhdGVkLFxyXG4gICAgZGVsZXRlZCxcclxuICAgIGxlbmd0aCxcclxuICB9OiB7XHJcbiAgICBtZXRob2Q6IHN0cmluZztcclxuICAgIHZhbHVlOiBhbnk7XHJcbiAgICBtZXNzYWdlSWQ6IG51bWJlciB8IG51bGw7XHJcbiAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGw7XHJcbiAgICBpbnNlcnRlZDogYW55W10gfCBudWxsO1xyXG4gICAgdXBkYXRlZDogYW55W10gfCBudWxsO1xyXG4gICAgZGVsZXRlZDogYW55W10gfCBudWxsO1xyXG4gICAgbGVuZ3RoOiBudW1iZXIgfCBudWxsO1xyXG4gIH0pIHtcclxuICAgIHRoaXMubG9nRW50cnkoJ1JFQ0VJVkVEOicgKyBtZXRob2QpO1xyXG4gICAgaWYgKG1ldGhvZCA9PSAnX19fY2FjaGUnKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlT3V0Ym91bmRDYWNoZVJlcXVlc3QodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKG1lc3NhZ2VJZCkge1xyXG4gICAgICBpZiAobWV0aG9kID09ICdtLmVycm9yJykge1xyXG4gICAgICAgIGNvbnN0IHJlamVjdCA9IHRoaXMucmVqZWN0Q2FsbGJhY2tzLmdldChtZXNzYWdlSWQpO1xyXG4gICAgICAgIGlmIChyZWplY3QpIHtcclxuICAgICAgICAgIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1lc3NhZ2VJZCA9IC0xO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG1lc3NhZ2VJZCAhPSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQodmFsdWUsIHNwZWNpZmljSGFzaCwgaW5zZXJ0ZWQsIHVwZGF0ZWQsIGRlbGV0ZWQsIGxlbmd0aCwgdGhpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBXZWJzb2NrZXRDbGllbnQuaGFuZGxlcy5nZXQobWV0aG9kKTtcclxuICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgKGhhbmRsZS5GdW5jIGFzIEZ1bmN0aW9uKSh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcclxuICAgICAgICAnTm8gTWVzc2FnZUlkIHdhcyBwcm92aWRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU91dGJvdW5kQ2FjaGVSZXF1ZXN0KG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYlNlcnZpY2UpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmRiU2VydmljZS5nZXRCeUtleSgnb3V0Ym91bmQnLCBtZXRob2QpLnN1YnNjcmliZSgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgICAgICAgIG1ldGhvZCxcclxuICAgICAgICAgICAgICBzcGVjaWZpY0hhc2g6IGl0ZW0uc3BlY2lmaWNIYXNoIHx8IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kKCdfX19jYWNoZScsIHtcclxuICAgICAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICAgICAgc3BlY2lmaWNIYXNoOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIHRoaXMuc2VuZCgnX19fY2FjaGUnLCB7XHJcbiAgICAgICAgICBtZXRob2QsXHJcbiAgICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignQWN0aXZlQ29ubmVjdDogJyArIGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbmQoJ19fX2NhY2hlJywge1xyXG4gICAgICAgIG1ldGhvZCxcclxuICAgICAgICBzcGVjaWZpY0hhc2g6IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdBY3RpdmUtQ29ubmVjdDogQ2FjaGluZyBub3QgcG9zc2libGUgYXMgdGhlIGluZGV4ZWREQiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBvdXRib3VuZHM6IE1hcDxcclxuICAgIHN0cmluZyxcclxuICAgIChcclxuICAgICAgZGF0YTogYW55LFxyXG4gICAgICBzcGVjaWZpY0hhc2g6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIGluc2VydGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIHVwZGF0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgZGVsZXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBsZW5ndGg6IG51bWJlciB8IG51bGwsXHJcbiAgICAgIF90aGlzOiBXZWJzb2NrZXRDbGllbnRcclxuICAgICkgPT4gdm9pZFxyXG4gID4gPSBuZXcgTWFwKCk7XHJcbiAgc3RhdGljIGV4cGVjdE91dGJvdW5kKFxyXG4gICAgbWV0aG9kOiBzdHJpbmcsXHJcbiAgICBjYWxsYmFjazogKFxyXG4gICAgICBkYXRhOiBhbnksXHJcbiAgICAgIHNwZWNpZmljSGFzaDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgaW5zZXJ0ZWQ6IGFueVtdIHwgbnVsbCxcclxuICAgICAgdXBkYXRlZDogYW55W10gfCBudWxsLFxyXG4gICAgICBkZWxldGVkOiBhbnlbXSB8IG51bGwsXHJcbiAgICAgIGxlbmd0aDogbnVtYmVyIHwgbnVsbCxcclxuICAgICAgX3RoaXM6IFdlYnNvY2tldENsaWVudFxyXG4gICAgKSA9PiB2b2lkXHJcbiAgKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCcm93c2VyKCk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBodHRwczovL3d3dy5ncmVnb3J5dmFyZ2hlc2UuY29tL2hvdy10by1nZXQtYnJvd3Nlci1uYW1lLWFuZC12ZXJzaW9uLXZpYS1qYXZhc2NyaXB0L1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgdGVtLFxyXG4gICAgICBNID1cclxuICAgICAgICB1YS5tYXRjaChcclxuICAgICAgICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XHJcbiAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XHJcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRSAnLCB2ZXJzaW9uOiB0ZW1bMV0gfHwgJycgfTtcclxuICAgIH1cclxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xyXG4gICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLyk7XHJcbiAgICAgIGlmICh0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHRlbVsxXSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xyXG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkge1xyXG4gICAgICBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogTVswXSxcclxuICAgICAgdmVyc2lvbjogTVsxXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T1MoKTogc3RyaW5nIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLFxyXG4gICAgICBtYWNvc1BsYXRmb3JtcyA9IFsnTWFjaW50b3NoJywgJ01hY0ludGVsJywgJ01hY1BQQycsICdNYWM2OEsnXSxcclxuICAgICAgd2luZG93c1BsYXRmb3JtcyA9IFsnV2luMzInLCAnV2luNjQnLCAnV2luZG93cycsICdXaW5DRSddLFxyXG4gICAgICBpb3NQbGF0Zm9ybXMgPSBbJ2lQaG9uZScsICdpUGFkJywgJ2lQb2QnXSxcclxuICAgICAgb3MgPSBudWxsO1xyXG5cclxuICAgIGlmIChtYWNvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnTWFjIE9TJztcclxuICAgIH0gZWxzZSBpZiAoaW9zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdpT1MnO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dzUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdXaW5kb3dzJztcclxuICAgIH0gZWxzZSBpZiAoL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBvcyA9ICdBbmRyb2lkJztcclxuICAgIH0gZWxzZSBpZiAoIW9zICYmIC9MaW51eC8udGVzdChwbGF0Zm9ybSkpIHtcclxuICAgICAgb3MgPSAnTGludXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcyB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uU3VjY2Vzc0hhbmRsZXJzOiB7XHJcbiAgICBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb247XHJcbiAgICByZWdleHA6IFJlZ0V4cDtcclxuICB9W10gPSBbXTtcclxuICBwdWJsaWMgc3RhdGljIG9uU3VjY2VzcyhjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24sIHJlZ2V4cDogUmVnRXhwKSB7XHJcbiAgICB0aGlzLm9uU3VjY2Vzc0hhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcmVnZXhwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb25SZWNvbm5lY3RDYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHN0YXRpYyBvblJlY29ubmVjdChjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblJlY29ubmVjdENhbGxiYWNrLnB1c2goY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblN1Y2Nlc3NIYW5kbGVyc1xyXG4gICAgICAuZmlsdGVyKChlKSA9PiBlLnJlZ2V4cC50ZXN0KG1ldGhvZCkpXHJcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IChlLmNhbGxiYWNrLkZ1bmMgYXMgRnVuY3Rpb24pKCk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMudGhlbikge1xyXG4gICAgICAgICAgcmVzLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNjb25uZWN0KHJlc3RhcnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXJlc3RhcnQpIHRoaXMuY2xvc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdENhY2hlKCkge31cclxufVxyXG4iXX0=
|
|
@@ -100,7 +100,6 @@ class WebsocketClient {
|
|
|
100
100
|
this.url = protocol + '//' + document.location.hostname + port + '/wss';
|
|
101
101
|
}
|
|
102
102
|
this.connect(this.url);
|
|
103
|
-
this.initTabSuspendedListener();
|
|
104
103
|
}
|
|
105
104
|
connect(url) {
|
|
106
105
|
if (!this.subject) {
|
|
@@ -193,6 +192,8 @@ class WebsocketClient {
|
|
|
193
192
|
if (!this.closed) {
|
|
194
193
|
if (this.pool && this.pool.WssConnected)
|
|
195
194
|
this.pool.WssConnected = false;
|
|
195
|
+
this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');
|
|
196
|
+
this.resetRequestedState();
|
|
196
197
|
setTimeout(() => {
|
|
197
198
|
this.connect(url);
|
|
198
199
|
}, 1000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-connect-ng2.mjs","sources":["../../../projects/active-connect-ng2/src/lib/active-connect-ng2.module.ts","../../../projects/active-connect-ng2/src/lib/websocket/json/json-parser.ts","../../../projects/active-connect-ng2/src/lib/websocket/client.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/function.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/handle.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-success.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-reconnect.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/outbound.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/route.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/shared.ts","../../../projects/active-connect-ng2/src/lib/websocket/lifecycle/loading-status.ts","../../../projects/active-connect-ng2/src/lib/websocket/objects/outbound-object.ts","../../../projects/active-connect-ng2/src/public-api.ts","../../../projects/active-connect-ng2/src/active-connect-ng2.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { NgxIndexedDBModule, DBConfig } from 'ngx-indexed-db';\r\n\r\nconst dbConfig: DBConfig = {\r\n name: 'activeconnect_cache',\r\n version: 2,\r\n objectStoresMeta: [\r\n {\r\n store: 'outbound',\r\n storeConfig: { keyPath: 'method', autoIncrement: false },\r\n storeSchema: [\r\n { name: 'method', keypath: 'method', options: { unique: true } },\r\n { name: 'data', keypath: 'data', options: { unique: false } },\r\n {\r\n name: 'specificHash',\r\n keypath: 'specificHash',\r\n options: { unique: false },\r\n },\r\n {\r\n name: 'length',\r\n keypath: 'length',\r\n options: { unique: false },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [NgxIndexedDBModule.forRoot(dbConfig)],\r\n exports: [NgxIndexedDBModule],\r\n})\r\nexport class ActiveConnectNg2Module {}\r\n","export class JsonParser {\r\n static stringify(obj: any) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n static parsingFunction(key: any, value: any) {\r\n var a;\r\n if (typeof value === \"string\") {\r\n a =\r\n /^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\.[0-9]{3}Z$/.exec(\r\n value\r\n );\r\n if (a) {\r\n return new Date(a as any);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n static parse(str: string) {\r\n if (str && str != \"undefined\") {\r\n return JSON.parse(str, JsonParser.parsingFunction);\r\n }\r\n return str;\r\n }\r\n}\r\n","import { NgxIndexedDBService } from 'ngx-indexed-db';\r\nimport { DecorableFunction } from './decorators/function';\r\nimport { JsonParser } from './json/json-parser';\r\n\r\nexport class WebsocketClient {\r\n ws!: WebSocket;\r\n pool!: { WssConnected: boolean } | null;\r\n\r\n constructor(\r\n private url?: string,\r\n private supportsCache?: boolean,\r\n public dbService?: NgxIndexedDBService\r\n ) {\r\n if (supportsCache) this.initCache();\r\n if (!url) {\r\n let protocol;\r\n let port;\r\n switch (document.location.protocol) {\r\n case 'https:': {\r\n protocol = 'wss:';\r\n port = ':443';\r\n break;\r\n }\r\n default: {\r\n protocol = 'ws:';\r\n port = ':80';\r\n break;\r\n }\r\n }\r\n this.url = protocol + '//' + document.location.hostname + port + '/wss';\r\n }\r\n this.connect(this.url as string);\r\n this.initTabSuspendedListener();\r\n }\r\n\r\n subject: any;\r\n\r\n private connect(url: string) {\r\n if (!this.subject) {\r\n this.create(url);\r\n }\r\n return this.subject;\r\n }\r\n\r\n private initTabSuspendedListener() {\r\n if (document) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n console.log(\r\n 'ActiveConnect: Closing WebSocket due to tab suspension...'\r\n );\r\n this.disconnect(true);\r\n } else if (document.visibilityState === 'visible') {\r\n console.log('ActiveConnect: Reconnecting WebSocket...');\r\n this.connect(this.url as string);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private requestStack: any[] = [];\r\n private requestHistoryLogs: { timestamp: Date; method: string }[] = [];\r\n private logEntry(method: string) {\r\n this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });\r\n }\r\n public get logs(): { timestamp: Date; method: string }[] {\r\n return this.requestHistoryLogs;\r\n }\r\n\r\n private _token = '';\r\n public get Token(): string {\r\n if (!this._token) {\r\n if (window.localStorage)\r\n this._token = window.localStorage.getItem('token') || '';\r\n }\r\n return this._token;\r\n }\r\n public set Token(val: string) {\r\n this._token = val;\r\n if (window.localStorage) window.localStorage.setItem('token', val);\r\n }\r\n\r\n private set Connected(value: boolean) {\r\n if (value) {\r\n this.sendBrowserInfoToServer();\r\n\r\n this.auth(this.Token).then(() => {\r\n Promise.all(\r\n WebsocketClient.onReconnectCallback.map((c) =>\r\n c.Func ? c.Func() : null\r\n )\r\n ).then(() => {\r\n setTimeout(() => {\r\n this.resetRequestedState();\r\n this.requestStack.forEach((e) => {\r\n this.sendToSocket(e.method, e.data);\r\n this.requestStack = this.requestStack.filter((e1) => e1 != e);\r\n });\r\n }, 2000);\r\n });\r\n });\r\n }\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = value;\r\n }\r\n private static resetRequestedStateCallbacks: Function[] = [];\r\n private connectionEstablishedOnce: boolean = false;\r\n private resetRequestedState() {\r\n if (this.connectionEstablishedOnce) {\r\n // reset requested state for outbounds\r\n WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {\r\n reset();\r\n });\r\n } else {\r\n this.connectionEstablishedOnce = true;\r\n }\r\n }\r\n public static addResetRequestingStateCallback(callback: Function) {\r\n WebsocketClient.resetRequestedStateCallbacks.push(callback);\r\n }\r\n\r\n private create(url: string) {\r\n // create new connection\r\n this.logEntry('TCP/HTTP:CONNECT-SERVER');\r\n this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));\r\n this.ws.onerror = (err) => {\r\n this.ws.close();\r\n this.logEntry('TCP/HTTP:ERROR:' + err);\r\n console.log('ActiveConnect: ' + err);\r\n };\r\n this.ws.onopen = () => {\r\n this.logEntry('TCP/HTTP:CONNECTED');\r\n this.Connected = true;\r\n };\r\n this.ws.onmessage = (e) => {\r\n this.messageReceived(JsonParser.parse(e.data.toString()));\r\n };\r\n this.ws.onclose = () => {\r\n this.logEntry('TCP/HTTP:CLOSED');\r\n if (!this.closed) {\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = false;\r\n setTimeout(() => {\r\n this.connect(url);\r\n }, 1000);\r\n }\r\n };\r\n }\r\n\r\n private messageId: number = 0;\r\n protected sendToSocket(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ) {\r\n const messageId = ++this.messageId;\r\n if (this.ws.readyState != this.ws.OPEN) {\r\n if (!dontEnsureTransmission)\r\n this.requestStack.push({ method, data, messageId });\r\n else return false;\r\n } else {\r\n this.ws.send(JsonParser.stringify({ method, value: data, messageId }));\r\n }\r\n return messageId;\r\n }\r\n\r\n async auth(token: string): Promise<any> {\r\n return this.sendToSocket('auth.token', token);\r\n }\r\n\r\n public send(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ): Promise<any> {\r\n this.logEntry('SEND:' + method);\r\n const messageId = this.sendToSocket(\r\n method,\r\n data,\r\n dontEnsureTransmission || false\r\n );\r\n if (messageId) {\r\n return this.expectMethod(`m.${method}`, messageId);\r\n } else {\r\n return new Promise((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n }\r\n\r\n private rejectCallbacks: Map<number, Function> = new Map();\r\n private expectedMethods: Map<string | number, Array<Function>> = new Map();\r\n private expectMethod(method: string, messageId?: number | null) {\r\n return new Promise((resolve, reject) => {\r\n if (messageId) {\r\n this.expectedMethods.set(messageId, [resolve]);\r\n this.rejectCallbacks.set(messageId, reject);\r\n } else {\r\n if (this.expectedMethods.has(method)) {\r\n let arr = this.expectedMethods.get(method);\r\n (arr as Array<Function>).push(resolve);\r\n } else {\r\n this.expectedMethods.set(method, [resolve]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private messageReceived({\r\n method,\r\n value,\r\n messageId,\r\n specificHash,\r\n inserted,\r\n updated,\r\n deleted,\r\n length,\r\n }: {\r\n method: string;\r\n value: any;\r\n messageId: number | null;\r\n specificHash: number | null;\r\n inserted: any[] | null;\r\n updated: any[] | null;\r\n deleted: any[] | null;\r\n length: number | null;\r\n }) {\r\n this.logEntry('RECEIVED:' + method);\r\n if (method == '___cache') {\r\n this.handleOutboundCacheRequest(value);\r\n }\r\n if (messageId) {\r\n if (method == 'm.error') {\r\n const reject = this.rejectCallbacks.get(messageId);\r\n if (reject) {\r\n reject(value);\r\n }\r\n messageId = -1;\r\n }\r\n }\r\n\r\n if (messageId != null) {\r\n const callback = this.expectedMethods.get(messageId);\r\n if (callback) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n this.invokeSuccessHandlers(method);\r\n } else {\r\n const callback = this.expectedMethods.get(method);\r\n if (callback && callback.length > 0) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n } else {\r\n const out = WebsocketClient.outbounds.get(method);\r\n if (out) {\r\n out(value, specificHash, inserted, updated, deleted, length, this);\r\n }\r\n const handle = WebsocketClient.handles.get(method);\r\n if (handle) {\r\n (handle.Func as Function)(value);\r\n }\r\n }\r\n }\r\n } else {\r\n throw Error(\r\n 'No MessageId was provided, the connection is not supported.'\r\n );\r\n }\r\n }\r\n\r\n private handleOutboundCacheRequest(method: string) {\r\n if (this.dbService) {\r\n try {\r\n this.dbService.getByKey('outbound', method).subscribe((item: any) => {\r\n if (item) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: item.specificHash || null,\r\n });\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n }\r\n });\r\n } catch (e) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error('ActiveConnect: ' + e);\r\n }\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error(\r\n 'Active-Connect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n\r\n private static outbounds: Map<\r\n string,\r\n (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n > = new Map();\r\n static expectOutbound(\r\n method: string,\r\n callback: (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n ) {\r\n WebsocketClient.outbounds.set(method, callback);\r\n }\r\n\r\n private static handles: Map<string, DecorableFunction> = new Map();\r\n static registerHandle(method: string, callback: DecorableFunction) {\r\n WebsocketClient.handles.set(method, callback);\r\n }\r\n\r\n public get isConnected(): boolean {\r\n if (this.ws) return this.ws.readyState == WebSocket.OPEN;\r\n return true;\r\n }\r\n\r\n private sendBrowserInfoToServer() {\r\n // send browser / os information\r\n const browser = this.getBrowser();\r\n const os = this.getOS();\r\n this.send('___browser', {\r\n browser: `${browser.name} ${browser.version} ${os}`,\r\n });\r\n }\r\n\r\n public getBrowser(): { name: string; version: string } {\r\n // https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/\r\n var ua = navigator.userAgent,\r\n tem,\r\n M =\r\n ua.match(\r\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i\r\n ) || [];\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE ', version: tem[1] || '' };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) {\r\n return { name: 'Opera', version: tem[1] };\r\n }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n M.splice(1, 1, tem[1]);\r\n }\r\n return {\r\n name: M[0],\r\n version: M[1],\r\n };\r\n }\r\n\r\n public getOS(): string {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n\r\n return os || '';\r\n }\r\n\r\n private static onSuccessHandlers: {\r\n callback: DecorableFunction;\r\n regexp: RegExp;\r\n }[] = [];\r\n public static onSuccess(callback: DecorableFunction, regexp: RegExp) {\r\n this.onSuccessHandlers.push({ callback, regexp });\r\n }\r\n\r\n private static onReconnectCallback: DecorableFunction[] = [];\r\n static onReconnect(callback: DecorableFunction) {\r\n WebsocketClient.onReconnectCallback.push(callback);\r\n }\r\n\r\n private invokeSuccessHandlers(method: string) {\r\n WebsocketClient.onSuccessHandlers\r\n .filter((e) => e.regexp.test(method))\r\n .forEach((e) => {\r\n var res = (e.callback.Func as Function)();\r\n if (res && res.then) {\r\n res.then();\r\n }\r\n });\r\n }\r\n\r\n public closed = false;\r\n public disconnect(restart?: boolean) {\r\n if (!restart) this.closed = true;\r\n this.ws.close();\r\n }\r\n\r\n private initCache() {}\r\n}\r\n","/**\r\n * Represents the reference to an object method used for websocket routes and outbounds.\r\n */\r\nexport class DecorableFunction {\r\n /**\r\n * Creates an instance of DecorableFunction.\r\n * @param objConfig - The configuration object for the object method.\r\n * @param objConfig.target - The target object.\r\n * @param objConfig.propertyKey - The property key of the target object.\r\n */\r\n constructor(protected objConfig: { target: any; propertyKey: string }) {\r\n // singelton service - fetch from angular\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n if (!prototype.___constructorOverridden) {\r\n prototype.___constructorOverridden = true;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the decorated function.\r\n * @returns - The decorated function.\r\n */\r\n public get Func(): ((...data: any[]) => Promise<any> | any) | null {\r\n if (\r\n this.objConfig?.target &&\r\n this.objConfig.target[this.objConfig.propertyKey]\r\n ) {\r\n return this.objConfig.target[this.objConfig.propertyKey].bind(\r\n this.getBindObject()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bind object.\r\n * @private\r\n * @returns - The bind object.\r\n */\r\n private getBindObject(): any {\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n return prototype.___data._obj;\r\n }\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function Handle(method: string) {\r\n return function _Handle(target: any, propertyKey: string): any {\r\n // method annotation\r\n WebsocketClient.registerHandle(\r\n method,\r\n new DecorableFunction({ target, propertyKey })\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnSuccess(regexp: RegExp) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n WebsocketClient.onSuccess(\r\n new DecorableFunction({ target, propertyKey }),\r\n regexp\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnReconnect(target: any, propertyKey: string) {\r\n WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));\r\n}\r\n","import { WebsocketClient } from '../../client';\r\n\r\nexport function Outbound(\r\n method: string,\r\n requestingRequired?: boolean,\r\n cached?: boolean,\r\n sortBy?: (a: any, b: any) => number\r\n) {\r\n return function _Outbound(target: any, propertyKey: string): any {\r\n target.loading = new Map<string, boolean>();\r\n // property annotation\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) {\r\n if (!target.___received) target.___received = {};\r\n if (!target.___data) target.___data = {};\r\n if (!target.___received) target.___received = {};\r\n if (!target.___requested) target.___requested = {};\r\n if (!cached) {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error(\r\n 'ActiveConnect: could not delete indexdb cache entry'\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = result.data;\r\n target.loading.set(propertyKey, false);\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n target.___received[propertyKey] = false;\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n } else if (data == 'data_delete') {\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n target.___received[propertyKey] = false;\r\n target.___requested[propertyKey] = false;\r\n } else if (data == 'data_diff') {\r\n var data = target.___data[propertyKey] || [];\r\n inserted?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n updated?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n data = data.filter((d: any) => d.id != e.id);\r\n });\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n }\r\n );\r\n if (requestingRequired) {\r\n WebsocketClient.addResetRequestingStateCallback(function callback() {\r\n if (target.___requested) {\r\n target.___requested[propertyKey] = false;\r\n }\r\n });\r\n }\r\n\r\n const obj = {\r\n configurable: true,\r\n get() {\r\n if (!target.___requested) target.___requested = {};\r\n if (requestingRequired && !target.___requested[propertyKey]) {\r\n target.___requested[propertyKey] = true;\r\n (this as any).send('request.' + method, null).then();\r\n }\r\n if (!target.___data) target.___data = {};\r\n if (!target.___data[propertyKey]) {\r\n target.loading.set(propertyKey, true);\r\n } else if (target.loading[propertyKey]) {\r\n target.loading.set(propertyKey, false);\r\n }\r\n return target.___data[propertyKey];\r\n },\r\n set(val: any) {\r\n if (!target.___data) target.___data = {};\r\n target.loading.set(propertyKey, false);\r\n if (sortBy && val) val = val.sort(sortBy);\r\n return (target.___data[propertyKey] = val);\r\n },\r\n };\r\n target[propertyKey] = obj;\r\n return obj;\r\n };\r\n}\r\n","export function Route(\r\n method: string,\r\n loadingKey?: string,\r\n dontEnsureTransmission?: boolean\r\n) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n // method annotation\r\n const original = target[propertyKey];\r\n target[propertyKey] = async function execRoute(...data: any): Promise<any> {\r\n if (loadingKey) {\r\n if (!this.loadingElements[loadingKey]) {\r\n this.loadingElements[loadingKey] = 0;\r\n }\r\n this.loadingElements[loadingKey]++;\r\n }\r\n const promise = original.bind(this)(...data);\r\n let res = null;\r\n if (this.client) {\r\n res = await this.client\r\n .send(method, data[0], dontEnsureTransmission)\r\n ?.catch((err: any) => {\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n throw err;\r\n });\r\n }\r\n await promise;\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n return res;\r\n };\r\n return target;\r\n };\r\n}\r\n","/**\r\n * @deprecated\r\n */\r\nexport function Shared<T>(defaultValue?: T) {\r\n if (defaultValue) {\r\n throw Error(\r\n \"Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.\"\r\n );\r\n }\r\n return function _Shared(target: any, propertyKey: string) {};\r\n}\r\n","import { WebsocketClient } from '../client';\r\n\r\nexport class LoadingStatus extends WebsocketClient {\r\n private __proto__: any;\r\n static loading: Map<string, boolean>;\r\n get isLoading(): boolean {\r\n // return general loading\r\n let anyTrue = false;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n anyTrue ||= e;\r\n });\r\n if (!anyTrue) this.__proto__.loading.clear();\r\n return this.__proto__.loading.size > 0;\r\n }\r\n getLoadingMap(): Map<string, boolean> {\r\n return this.__proto__.loading;\r\n }\r\n\r\n get getCurrent(): number {\r\n let count = 0;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n if (e) count++;\r\n });\r\n if (count == 0) {\r\n this.__proto__.loading.clear();\r\n }\r\n return count;\r\n }\r\n get getTotal(): number {\r\n return this.__proto__.loading.size;\r\n }\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\nimport { WebsocketClient } from '../client';\r\n\r\nexport interface IdObject {\r\n id: number | null | undefined;\r\n}\r\n\r\nexport class OutboundObject<T extends IdObject> {\r\n private previouslyCachedCount: number | undefined;\r\n constructor(\r\n private client: WebsocketClient,\r\n private method: string,\r\n private lazyLoaded?: boolean,\r\n public readonly cached?: boolean,\r\n private initialLoadingCount?: number,\r\n private sortBy?: (a: T, b: T) => number\r\n ) {\r\n this.target.loading = new Map<string, boolean>();\r\n\r\n if (this.client.dbService) {\r\n try {\r\n this.client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n if (result) {\r\n this.previouslyCachedCount = result.data?.length || null;\r\n }\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to read cached data');\r\n console.error(e);\r\n }\r\n }\r\n\r\n const _this = this;\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n insertedOrGroupData: any[] | null,\r\n updatedOrGroupId: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _client: WebsocketClient\r\n ) {\r\n if (!cached) {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n _this.setData(result.data);\r\n if (result.length) _this._length = result.length;\r\n _this.loading = false;\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n _this.loading = false;\r\n _this.requested = false;\r\n } else if (data == 'data_delete') {\r\n _this.data = undefined;\r\n _this.dataMap = new Map();\r\n _this.requested = false;\r\n _this.loadedGroupData = null;\r\n _this.loadedGroupId = null;\r\n _this._length = undefined;\r\n _this.loading = false;\r\n } else if (data == 'data_group') {\r\n if (\r\n _this.requestedGroupId ==\r\n (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedGroupData = insertedOrGroupData;\r\n _this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedGroupChanged?.next(insertedOrGroupData as T[]);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_id') {\r\n if (\r\n _this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedIdData =\r\n (insertedOrGroupData?.length || 0) > 0\r\n ? (insertedOrGroupData as any[])[0]\r\n : null;\r\n _this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedIdChanged?.next(_this.loadedIdData as T);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_diff') {\r\n insertedOrGroupData?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n updatedOrGroupId?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n _this.dataMap.delete(e.id);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(null as any);\r\n }\r\n });\r\n _this.data = Array.from(_this.dataMap.values());\r\n if (_this.data && _this.sortBy)\r\n _this.data = _this.data.sort(_this.sortBy);\r\n _this.loading = false;\r\n\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (_this.data && _this.data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data: _this.data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n _this.setData(data);\r\n if (_this.loadedId) {\r\n const loadedValue = _this.dataMap.get(_this.loadedId);\r\n if (loadedValue) {\r\n _this.loadedIdData = loadedValue;\r\n _this.loadedIdChanged?.next(_this.loadedIdData);\r\n }\r\n }\r\n _this.loading = false;\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (data && data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n if (length) _this._length = length;\r\n }\r\n );\r\n\r\n WebsocketClient.addResetRequestingStateCallback(() => {\r\n this.afterServerReconnected();\r\n });\r\n }\r\n\r\n get target(): any {\r\n return (this.client as any).__proto__;\r\n }\r\n\r\n private dataMap: Map<number | null | undefined, T> = new Map();\r\n private data: T[] | undefined = undefined;\r\n\r\n public get(id: number): Observable<T> {\r\n if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {\r\n if (this.loadedIdData)\r\n setTimeout(() => {\r\n if (this.loadedIdData) this.loadedIdChanged?.next(this.loadedIdData);\r\n }, 50);\r\n return this.loadedObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedId != id || !this.loadedObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedObservable = new Observable<T>((observer: Observer<T>) => {\r\n this.loadedIdChanged = observer;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.data) {\r\n const res = this.dataMap.get(id);\r\n if (res) {\r\n this.loadedIdChanged?.next(res);\r\n resolve();\r\n return;\r\n }\r\n }\r\n if (this.loadedId == id) {\r\n this.loadedIdChanged?.next(this.loadedIdData as T);\r\n } else {\r\n await this.requestById(id);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedObservable as Observable<T>;\r\n }\r\n\r\n public getForGroup(groupId: number): Observable<T[]> {\r\n if (\r\n this.requestedGroupId == groupId &&\r\n this.loadedGroupObservable &&\r\n this.loadedGroupData\r\n ) {\r\n setTimeout(() => {\r\n if (this.loadedGroupData)\r\n this.loadedGroupChanged?.next(this.loadedGroupData);\r\n }, 50);\r\n return this.loadedGroupObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedGroupObservable = new Observable<T[]>(\r\n (observer: Observer<T[]>) => {\r\n this.loadedGroupChanged = observer;\r\n resolve();\r\n }\r\n );\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.loadedGroupId == groupId && this.loadedGroupData) {\r\n this.loadedGroupChanged?.next(this.loadedGroupData as T[]);\r\n } else {\r\n await this.requestForGroup(groupId);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedGroupObservable as Observable<T[]>;\r\n }\r\n\r\n public get all(): T[] | undefined {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n return this.data;\r\n }\r\n\r\n private requested: boolean = false;\r\n public async load(count?: number): Promise<void> {\r\n if (this.lazyLoaded) {\r\n const hasBeenRequestedBefore = this.requested;\r\n this._loading = true;\r\n if (!this.requested) {\r\n this.loading = true;\r\n }\r\n this.requested = true;\r\n await this.client.send('request.' + this.method, {\r\n count: hasBeenRequestedBefore\r\n ? this.data\r\n ? count || this.initialLoadingCount\r\n ? (count || (this.initialLoadingCount as number)) +\r\n this.loadedLength\r\n : undefined\r\n : undefined\r\n : this.previouslyCachedCount || (this.initialLoadingCount as number),\r\n loaded: this.loadedLength,\r\n });\r\n } else {\r\n throw Error(\r\n 'Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.'\r\n );\r\n }\r\n }\r\n\r\n private _loading = false;\r\n private set loading(value: boolean) {\r\n this._loading = value;\r\n this.target.loading.set(this.method, value);\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n public get loadedLength(): number {\r\n return this.data?.length || 0;\r\n }\r\n private _length: number | undefined = undefined;\r\n public get length(): number | undefined {\r\n return this._length;\r\n }\r\n\r\n private requestedId: number | null = null;\r\n private loadedObservable: Observable<T> | null = null;\r\n private loadedId: number | null = null;\r\n private loadedIdData: T | null = null;\r\n private loadedIdChanged: Observer<T> | null = null;\r\n private requestById(id: number): Promise<any> {\r\n this.loading = true;\r\n this.requestedId = id;\r\n return this.client.send('request.' + this.method, { id }) as Promise<any>;\r\n }\r\n\r\n private requestedGroupId: number | null = null;\r\n private loadedGroupObservable: Observable<T[]> | null = null;\r\n private loadedGroupId: number | null = null;\r\n private loadedGroupData: T[] | null = null;\r\n private loadedGroupChanged: Observer<T[]> | null = null;\r\n private requestForGroup(groupId: number): Promise<T[]> {\r\n this.loading = true;\r\n this.requestedGroupId = groupId;\r\n return this.client.send('request.' + this.method, { groupId });\r\n }\r\n\r\n private setData(data: T[] | { added: T[] | undefined; length: number }) {\r\n this.data = data as T[];\r\n if (this.data && this.sortBy) this.data = this.data.sort(this.sortBy);\r\n this._length = data.length;\r\n this.dataMap = new Map();\r\n this.data.forEach((d) => {\r\n this.dataMap.set(d.id, d);\r\n });\r\n }\r\n\r\n get isEmpty() {\r\n return this.data == undefined;\r\n }\r\n\r\n /**\r\n * The contained data can be modified within the callback method\r\n */\r\n public update(callback: (data: T[]) => void) {\r\n if (this.data) {\r\n const updateLengthVariable = this.data.length == this._length;\r\n const length = this.length;\r\n callback(this.data);\r\n this.setData(this.data);\r\n if (!updateLengthVariable) {\r\n this._length = length;\r\n }\r\n }\r\n }\r\n\r\n private afterServerReconnected() {\r\n if (this.requested && this.lazyLoaded) {\r\n this.requested = false;\r\n this.load(1).then();\r\n }\r\n if (this.loadedId) {\r\n this.loadedIdData = null;\r\n this.get(this.loadedId);\r\n }\r\n if (this.loadedGroupId) {\r\n this.loadedGroupData = null;\r\n this.getForGroup(this.loadedGroupId);\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of active-connect-ng2\r\n */\r\n\r\nexport * from './lib/active-connect-ng2.module';\r\nexport * from './lib/websocket';\r\nexport { NgxIndexedDBService } from 'ngx-indexed-db';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"active-connect-ng2.mjs","sources":["../../../projects/active-connect-ng2/src/lib/active-connect-ng2.module.ts","../../../projects/active-connect-ng2/src/lib/websocket/json/json-parser.ts","../../../projects/active-connect-ng2/src/lib/websocket/client.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/function.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/handle.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-success.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-reconnect.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/outbound.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/route.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/shared.ts","../../../projects/active-connect-ng2/src/lib/websocket/lifecycle/loading-status.ts","../../../projects/active-connect-ng2/src/lib/websocket/objects/outbound-object.ts","../../../projects/active-connect-ng2/src/public-api.ts","../../../projects/active-connect-ng2/src/active-connect-ng2.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { NgxIndexedDBModule, DBConfig } from 'ngx-indexed-db';\r\n\r\nconst dbConfig: DBConfig = {\r\n name: 'activeconnect_cache',\r\n version: 2,\r\n objectStoresMeta: [\r\n {\r\n store: 'outbound',\r\n storeConfig: { keyPath: 'method', autoIncrement: false },\r\n storeSchema: [\r\n { name: 'method', keypath: 'method', options: { unique: true } },\r\n { name: 'data', keypath: 'data', options: { unique: false } },\r\n {\r\n name: 'specificHash',\r\n keypath: 'specificHash',\r\n options: { unique: false },\r\n },\r\n {\r\n name: 'length',\r\n keypath: 'length',\r\n options: { unique: false },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [NgxIndexedDBModule.forRoot(dbConfig)],\r\n exports: [NgxIndexedDBModule],\r\n})\r\nexport class ActiveConnectNg2Module {}\r\n","export class JsonParser {\r\n static stringify(obj: any) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n static parsingFunction(key: any, value: any) {\r\n var a;\r\n if (typeof value === \"string\") {\r\n a =\r\n /^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\.[0-9]{3}Z$/.exec(\r\n value\r\n );\r\n if (a) {\r\n return new Date(a as any);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n static parse(str: string) {\r\n if (str && str != \"undefined\") {\r\n return JSON.parse(str, JsonParser.parsingFunction);\r\n }\r\n return str;\r\n }\r\n}\r\n","import { NgxIndexedDBService } from 'ngx-indexed-db';\r\nimport { DecorableFunction } from './decorators/function';\r\nimport { JsonParser } from './json/json-parser';\r\n\r\nexport class WebsocketClient {\r\n ws!: WebSocket;\r\n pool!: { WssConnected: boolean } | null;\r\n\r\n constructor(\r\n private url?: string,\r\n private supportsCache?: boolean,\r\n public dbService?: NgxIndexedDBService\r\n ) {\r\n if (supportsCache) this.initCache();\r\n if (!url) {\r\n let protocol;\r\n let port;\r\n switch (document.location.protocol) {\r\n case 'https:': {\r\n protocol = 'wss:';\r\n port = ':443';\r\n break;\r\n }\r\n default: {\r\n protocol = 'ws:';\r\n port = ':80';\r\n break;\r\n }\r\n }\r\n this.url = protocol + '//' + document.location.hostname + port + '/wss';\r\n }\r\n this.connect(this.url as string);\r\n }\r\n\r\n subject: any;\r\n\r\n private connect(url: string) {\r\n if (!this.subject) {\r\n this.create(url);\r\n }\r\n return this.subject;\r\n }\r\n\r\n public initTabSuspendedListener() {\r\n if (document) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n console.log(\r\n 'ActiveConnect: Closing WebSocket due to tab suspension...'\r\n );\r\n this.disconnect(true);\r\n } else if (document.visibilityState === 'visible') {\r\n console.log('ActiveConnect: Reconnecting WebSocket...');\r\n this.connect(this.url as string);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private requestStack: any[] = [];\r\n private requestHistoryLogs: { timestamp: Date; method: string }[] = [];\r\n private logEntry(method: string) {\r\n this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });\r\n }\r\n public get logs(): { timestamp: Date; method: string }[] {\r\n return this.requestHistoryLogs;\r\n }\r\n\r\n private _token = '';\r\n public get Token(): string {\r\n if (!this._token) {\r\n if (window.localStorage)\r\n this._token = window.localStorage.getItem('token') || '';\r\n }\r\n return this._token;\r\n }\r\n public set Token(val: string) {\r\n this._token = val;\r\n if (window.localStorage) window.localStorage.setItem('token', val);\r\n }\r\n\r\n private set Connected(value: boolean) {\r\n if (value) {\r\n this.sendBrowserInfoToServer();\r\n\r\n this.auth(this.Token).then(() => {\r\n Promise.all(\r\n WebsocketClient.onReconnectCallback.map((c) =>\r\n c.Func ? c.Func() : null\r\n )\r\n ).then(() => {\r\n setTimeout(() => {\r\n this.resetRequestedState();\r\n this.requestStack.forEach((e) => {\r\n this.sendToSocket(e.method, e.data);\r\n this.requestStack = this.requestStack.filter((e1) => e1 != e);\r\n });\r\n }, 2000);\r\n });\r\n });\r\n }\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = value;\r\n }\r\n private static resetRequestedStateCallbacks: Function[] = [];\r\n private connectionEstablishedOnce: boolean = false;\r\n private resetRequestedState() {\r\n if (this.connectionEstablishedOnce) {\r\n // reset requested state for outbounds\r\n WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {\r\n reset();\r\n });\r\n } else {\r\n this.connectionEstablishedOnce = true;\r\n }\r\n }\r\n public static addResetRequestingStateCallback(callback: Function) {\r\n WebsocketClient.resetRequestedStateCallbacks.push(callback);\r\n }\r\n\r\n private create(url: string) {\r\n // create new connection\r\n this.logEntry('TCP/HTTP:CONNECT-SERVER');\r\n this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));\r\n this.ws.onerror = (err) => {\r\n this.ws.close();\r\n this.logEntry('TCP/HTTP:ERROR:' + err);\r\n console.log('ActiveConnect: ' + err);\r\n };\r\n this.ws.onopen = () => {\r\n this.logEntry('TCP/HTTP:CONNECTED');\r\n this.Connected = true;\r\n };\r\n this.ws.onmessage = (e) => {\r\n this.messageReceived(JsonParser.parse(e.data.toString()));\r\n };\r\n this.ws.onclose = () => {\r\n this.logEntry('TCP/HTTP:CLOSED');\r\n if (!this.closed) {\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = false;\r\n this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');\r\n this.resetRequestedState();\r\n setTimeout(() => {\r\n this.connect(url);\r\n }, 1000);\r\n }\r\n };\r\n }\r\n\r\n private messageId: number = 0;\r\n protected sendToSocket(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ) {\r\n const messageId = ++this.messageId;\r\n if (this.ws.readyState != this.ws.OPEN) {\r\n if (!dontEnsureTransmission)\r\n this.requestStack.push({ method, data, messageId });\r\n else return false;\r\n } else {\r\n this.ws.send(JsonParser.stringify({ method, value: data, messageId }));\r\n }\r\n return messageId;\r\n }\r\n\r\n async auth(token: string): Promise<any> {\r\n return this.sendToSocket('auth.token', token);\r\n }\r\n\r\n public send(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ): Promise<any> {\r\n this.logEntry('SEND:' + method);\r\n const messageId = this.sendToSocket(\r\n method,\r\n data,\r\n dontEnsureTransmission || false\r\n );\r\n if (messageId) {\r\n return this.expectMethod(`m.${method}`, messageId);\r\n } else {\r\n return new Promise((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n }\r\n\r\n private rejectCallbacks: Map<number, Function> = new Map();\r\n private expectedMethods: Map<string | number, Array<Function>> = new Map();\r\n private expectMethod(method: string, messageId?: number | null) {\r\n return new Promise((resolve, reject) => {\r\n if (messageId) {\r\n this.expectedMethods.set(messageId, [resolve]);\r\n this.rejectCallbacks.set(messageId, reject);\r\n } else {\r\n if (this.expectedMethods.has(method)) {\r\n let arr = this.expectedMethods.get(method);\r\n (arr as Array<Function>).push(resolve);\r\n } else {\r\n this.expectedMethods.set(method, [resolve]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private messageReceived({\r\n method,\r\n value,\r\n messageId,\r\n specificHash,\r\n inserted,\r\n updated,\r\n deleted,\r\n length,\r\n }: {\r\n method: string;\r\n value: any;\r\n messageId: number | null;\r\n specificHash: number | null;\r\n inserted: any[] | null;\r\n updated: any[] | null;\r\n deleted: any[] | null;\r\n length: number | null;\r\n }) {\r\n this.logEntry('RECEIVED:' + method);\r\n if (method == '___cache') {\r\n this.handleOutboundCacheRequest(value);\r\n }\r\n if (messageId) {\r\n if (method == 'm.error') {\r\n const reject = this.rejectCallbacks.get(messageId);\r\n if (reject) {\r\n reject(value);\r\n }\r\n messageId = -1;\r\n }\r\n }\r\n\r\n if (messageId != null) {\r\n const callback = this.expectedMethods.get(messageId);\r\n if (callback) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n this.invokeSuccessHandlers(method);\r\n } else {\r\n const callback = this.expectedMethods.get(method);\r\n if (callback && callback.length > 0) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n } else {\r\n const out = WebsocketClient.outbounds.get(method);\r\n if (out) {\r\n out(value, specificHash, inserted, updated, deleted, length, this);\r\n }\r\n const handle = WebsocketClient.handles.get(method);\r\n if (handle) {\r\n (handle.Func as Function)(value);\r\n }\r\n }\r\n }\r\n } else {\r\n throw Error(\r\n 'No MessageId was provided, the connection is not supported.'\r\n );\r\n }\r\n }\r\n\r\n private handleOutboundCacheRequest(method: string) {\r\n if (this.dbService) {\r\n try {\r\n this.dbService.getByKey('outbound', method).subscribe((item: any) => {\r\n if (item) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: item.specificHash || null,\r\n });\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n }\r\n });\r\n } catch (e) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error('ActiveConnect: ' + e);\r\n }\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error(\r\n 'Active-Connect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n\r\n private static outbounds: Map<\r\n string,\r\n (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n > = new Map();\r\n static expectOutbound(\r\n method: string,\r\n callback: (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n ) {\r\n WebsocketClient.outbounds.set(method, callback);\r\n }\r\n\r\n private static handles: Map<string, DecorableFunction> = new Map();\r\n static registerHandle(method: string, callback: DecorableFunction) {\r\n WebsocketClient.handles.set(method, callback);\r\n }\r\n\r\n public get isConnected(): boolean {\r\n if (this.ws) return this.ws.readyState == WebSocket.OPEN;\r\n return true;\r\n }\r\n\r\n private sendBrowserInfoToServer() {\r\n // send browser / os information\r\n const browser = this.getBrowser();\r\n const os = this.getOS();\r\n this.send('___browser', {\r\n browser: `${browser.name} ${browser.version} ${os}`,\r\n });\r\n }\r\n\r\n public getBrowser(): { name: string; version: string } {\r\n // https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/\r\n var ua = navigator.userAgent,\r\n tem,\r\n M =\r\n ua.match(\r\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i\r\n ) || [];\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE ', version: tem[1] || '' };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) {\r\n return { name: 'Opera', version: tem[1] };\r\n }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n M.splice(1, 1, tem[1]);\r\n }\r\n return {\r\n name: M[0],\r\n version: M[1],\r\n };\r\n }\r\n\r\n public getOS(): string {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n\r\n return os || '';\r\n }\r\n\r\n private static onSuccessHandlers: {\r\n callback: DecorableFunction;\r\n regexp: RegExp;\r\n }[] = [];\r\n public static onSuccess(callback: DecorableFunction, regexp: RegExp) {\r\n this.onSuccessHandlers.push({ callback, regexp });\r\n }\r\n\r\n private static onReconnectCallback: DecorableFunction[] = [];\r\n static onReconnect(callback: DecorableFunction) {\r\n WebsocketClient.onReconnectCallback.push(callback);\r\n }\r\n\r\n private invokeSuccessHandlers(method: string) {\r\n WebsocketClient.onSuccessHandlers\r\n .filter((e) => e.regexp.test(method))\r\n .forEach((e) => {\r\n var res = (e.callback.Func as Function)();\r\n if (res && res.then) {\r\n res.then();\r\n }\r\n });\r\n }\r\n\r\n public closed = false;\r\n public disconnect(restart?: boolean) {\r\n if (!restart) this.closed = true;\r\n this.ws.close();\r\n }\r\n\r\n private initCache() {}\r\n}\r\n","/**\r\n * Represents the reference to an object method used for websocket routes and outbounds.\r\n */\r\nexport class DecorableFunction {\r\n /**\r\n * Creates an instance of DecorableFunction.\r\n * @param objConfig - The configuration object for the object method.\r\n * @param objConfig.target - The target object.\r\n * @param objConfig.propertyKey - The property key of the target object.\r\n */\r\n constructor(protected objConfig: { target: any; propertyKey: string }) {\r\n // singelton service - fetch from angular\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n if (!prototype.___constructorOverridden) {\r\n prototype.___constructorOverridden = true;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the decorated function.\r\n * @returns - The decorated function.\r\n */\r\n public get Func(): ((...data: any[]) => Promise<any> | any) | null {\r\n if (\r\n this.objConfig?.target &&\r\n this.objConfig.target[this.objConfig.propertyKey]\r\n ) {\r\n return this.objConfig.target[this.objConfig.propertyKey].bind(\r\n this.getBindObject()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bind object.\r\n * @private\r\n * @returns - The bind object.\r\n */\r\n private getBindObject(): any {\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n return prototype.___data._obj;\r\n }\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function Handle(method: string) {\r\n return function _Handle(target: any, propertyKey: string): any {\r\n // method annotation\r\n WebsocketClient.registerHandle(\r\n method,\r\n new DecorableFunction({ target, propertyKey })\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnSuccess(regexp: RegExp) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n WebsocketClient.onSuccess(\r\n new DecorableFunction({ target, propertyKey }),\r\n regexp\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnReconnect(target: any, propertyKey: string) {\r\n WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));\r\n}\r\n","import { WebsocketClient } from '../../client';\r\n\r\nexport function Outbound(\r\n method: string,\r\n requestingRequired?: boolean,\r\n cached?: boolean,\r\n sortBy?: (a: any, b: any) => number\r\n) {\r\n return function _Outbound(target: any, propertyKey: string): any {\r\n target.loading = new Map<string, boolean>();\r\n // property annotation\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) {\r\n if (!target.___received) target.___received = {};\r\n if (!target.___data) target.___data = {};\r\n if (!target.___received) target.___received = {};\r\n if (!target.___requested) target.___requested = {};\r\n if (!cached) {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error(\r\n 'ActiveConnect: could not delete indexdb cache entry'\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = result.data;\r\n target.loading.set(propertyKey, false);\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n target.___received[propertyKey] = false;\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n } else if (data == 'data_delete') {\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n target.___received[propertyKey] = false;\r\n target.___requested[propertyKey] = false;\r\n } else if (data == 'data_diff') {\r\n var data = target.___data[propertyKey] || [];\r\n inserted?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n updated?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n data = data.filter((d: any) => d.id != e.id);\r\n });\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n }\r\n );\r\n if (requestingRequired) {\r\n WebsocketClient.addResetRequestingStateCallback(function callback() {\r\n if (target.___requested) {\r\n target.___requested[propertyKey] = false;\r\n }\r\n });\r\n }\r\n\r\n const obj = {\r\n configurable: true,\r\n get() {\r\n if (!target.___requested) target.___requested = {};\r\n if (requestingRequired && !target.___requested[propertyKey]) {\r\n target.___requested[propertyKey] = true;\r\n (this as any).send('request.' + method, null).then();\r\n }\r\n if (!target.___data) target.___data = {};\r\n if (!target.___data[propertyKey]) {\r\n target.loading.set(propertyKey, true);\r\n } else if (target.loading[propertyKey]) {\r\n target.loading.set(propertyKey, false);\r\n }\r\n return target.___data[propertyKey];\r\n },\r\n set(val: any) {\r\n if (!target.___data) target.___data = {};\r\n target.loading.set(propertyKey, false);\r\n if (sortBy && val) val = val.sort(sortBy);\r\n return (target.___data[propertyKey] = val);\r\n },\r\n };\r\n target[propertyKey] = obj;\r\n return obj;\r\n };\r\n}\r\n","export function Route(\r\n method: string,\r\n loadingKey?: string,\r\n dontEnsureTransmission?: boolean\r\n) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n // method annotation\r\n const original = target[propertyKey];\r\n target[propertyKey] = async function execRoute(...data: any): Promise<any> {\r\n if (loadingKey) {\r\n if (!this.loadingElements[loadingKey]) {\r\n this.loadingElements[loadingKey] = 0;\r\n }\r\n this.loadingElements[loadingKey]++;\r\n }\r\n const promise = original.bind(this)(...data);\r\n let res = null;\r\n if (this.client) {\r\n res = await this.client\r\n .send(method, data[0], dontEnsureTransmission)\r\n ?.catch((err: any) => {\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n throw err;\r\n });\r\n }\r\n await promise;\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n return res;\r\n };\r\n return target;\r\n };\r\n}\r\n","/**\r\n * @deprecated\r\n */\r\nexport function Shared<T>(defaultValue?: T) {\r\n if (defaultValue) {\r\n throw Error(\r\n \"Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.\"\r\n );\r\n }\r\n return function _Shared(target: any, propertyKey: string) {};\r\n}\r\n","import { WebsocketClient } from '../client';\r\n\r\nexport class LoadingStatus extends WebsocketClient {\r\n private __proto__: any;\r\n static loading: Map<string, boolean>;\r\n get isLoading(): boolean {\r\n // return general loading\r\n let anyTrue = false;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n anyTrue ||= e;\r\n });\r\n if (!anyTrue) this.__proto__.loading.clear();\r\n return this.__proto__.loading.size > 0;\r\n }\r\n getLoadingMap(): Map<string, boolean> {\r\n return this.__proto__.loading;\r\n }\r\n\r\n get getCurrent(): number {\r\n let count = 0;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n if (e) count++;\r\n });\r\n if (count == 0) {\r\n this.__proto__.loading.clear();\r\n }\r\n return count;\r\n }\r\n get getTotal(): number {\r\n return this.__proto__.loading.size;\r\n }\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\nimport { WebsocketClient } from '../client';\r\n\r\nexport interface IdObject {\r\n id: number | null | undefined;\r\n}\r\n\r\nexport class OutboundObject<T extends IdObject> {\r\n private previouslyCachedCount: number | undefined;\r\n constructor(\r\n private client: WebsocketClient,\r\n private method: string,\r\n private lazyLoaded?: boolean,\r\n public readonly cached?: boolean,\r\n private initialLoadingCount?: number,\r\n private sortBy?: (a: T, b: T) => number\r\n ) {\r\n this.target.loading = new Map<string, boolean>();\r\n\r\n if (this.client.dbService) {\r\n try {\r\n this.client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n if (result) {\r\n this.previouslyCachedCount = result.data?.length || null;\r\n }\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to read cached data');\r\n console.error(e);\r\n }\r\n }\r\n\r\n const _this = this;\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n insertedOrGroupData: any[] | null,\r\n updatedOrGroupId: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _client: WebsocketClient\r\n ) {\r\n if (!cached) {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n _this.setData(result.data);\r\n if (result.length) _this._length = result.length;\r\n _this.loading = false;\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n _this.loading = false;\r\n _this.requested = false;\r\n } else if (data == 'data_delete') {\r\n _this.data = undefined;\r\n _this.dataMap = new Map();\r\n _this.requested = false;\r\n _this.loadedGroupData = null;\r\n _this.loadedGroupId = null;\r\n _this._length = undefined;\r\n _this.loading = false;\r\n } else if (data == 'data_group') {\r\n if (\r\n _this.requestedGroupId ==\r\n (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedGroupData = insertedOrGroupData;\r\n _this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedGroupChanged?.next(insertedOrGroupData as T[]);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_id') {\r\n if (\r\n _this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedIdData =\r\n (insertedOrGroupData?.length || 0) > 0\r\n ? (insertedOrGroupData as any[])[0]\r\n : null;\r\n _this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedIdChanged?.next(_this.loadedIdData as T);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_diff') {\r\n insertedOrGroupData?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n updatedOrGroupId?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n _this.dataMap.delete(e.id);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(null as any);\r\n }\r\n });\r\n _this.data = Array.from(_this.dataMap.values());\r\n if (_this.data && _this.sortBy)\r\n _this.data = _this.data.sort(_this.sortBy);\r\n _this.loading = false;\r\n\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (_this.data && _this.data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data: _this.data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n _this.setData(data);\r\n if (_this.loadedId) {\r\n const loadedValue = _this.dataMap.get(_this.loadedId);\r\n if (loadedValue) {\r\n _this.loadedIdData = loadedValue;\r\n _this.loadedIdChanged?.next(_this.loadedIdData);\r\n }\r\n }\r\n _this.loading = false;\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (data && data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n if (length) _this._length = length;\r\n }\r\n );\r\n\r\n WebsocketClient.addResetRequestingStateCallback(() => {\r\n this.afterServerReconnected();\r\n });\r\n }\r\n\r\n get target(): any {\r\n return (this.client as any).__proto__;\r\n }\r\n\r\n private dataMap: Map<number | null | undefined, T> = new Map();\r\n private data: T[] | undefined = undefined;\r\n\r\n public get(id: number): Observable<T> {\r\n if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {\r\n if (this.loadedIdData)\r\n setTimeout(() => {\r\n if (this.loadedIdData) this.loadedIdChanged?.next(this.loadedIdData);\r\n }, 50);\r\n return this.loadedObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedId != id || !this.loadedObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedObservable = new Observable<T>((observer: Observer<T>) => {\r\n this.loadedIdChanged = observer;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.data) {\r\n const res = this.dataMap.get(id);\r\n if (res) {\r\n this.loadedIdChanged?.next(res);\r\n resolve();\r\n return;\r\n }\r\n }\r\n if (this.loadedId == id) {\r\n this.loadedIdChanged?.next(this.loadedIdData as T);\r\n } else {\r\n await this.requestById(id);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedObservable as Observable<T>;\r\n }\r\n\r\n public getForGroup(groupId: number): Observable<T[]> {\r\n if (\r\n this.requestedGroupId == groupId &&\r\n this.loadedGroupObservable &&\r\n this.loadedGroupData\r\n ) {\r\n setTimeout(() => {\r\n if (this.loadedGroupData)\r\n this.loadedGroupChanged?.next(this.loadedGroupData);\r\n }, 50);\r\n return this.loadedGroupObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedGroupObservable = new Observable<T[]>(\r\n (observer: Observer<T[]>) => {\r\n this.loadedGroupChanged = observer;\r\n resolve();\r\n }\r\n );\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.loadedGroupId == groupId && this.loadedGroupData) {\r\n this.loadedGroupChanged?.next(this.loadedGroupData as T[]);\r\n } else {\r\n await this.requestForGroup(groupId);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedGroupObservable as Observable<T[]>;\r\n }\r\n\r\n public get all(): T[] | undefined {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n return this.data;\r\n }\r\n\r\n private requested: boolean = false;\r\n public async load(count?: number): Promise<void> {\r\n if (this.lazyLoaded) {\r\n const hasBeenRequestedBefore = this.requested;\r\n this._loading = true;\r\n if (!this.requested) {\r\n this.loading = true;\r\n }\r\n this.requested = true;\r\n await this.client.send('request.' + this.method, {\r\n count: hasBeenRequestedBefore\r\n ? this.data\r\n ? count || this.initialLoadingCount\r\n ? (count || (this.initialLoadingCount as number)) +\r\n this.loadedLength\r\n : undefined\r\n : undefined\r\n : this.previouslyCachedCount || (this.initialLoadingCount as number),\r\n loaded: this.loadedLength,\r\n });\r\n } else {\r\n throw Error(\r\n 'Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.'\r\n );\r\n }\r\n }\r\n\r\n private _loading = false;\r\n private set loading(value: boolean) {\r\n this._loading = value;\r\n this.target.loading.set(this.method, value);\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n public get loadedLength(): number {\r\n return this.data?.length || 0;\r\n }\r\n private _length: number | undefined = undefined;\r\n public get length(): number | undefined {\r\n return this._length;\r\n }\r\n\r\n private requestedId: number | null = null;\r\n private loadedObservable: Observable<T> | null = null;\r\n private loadedId: number | null = null;\r\n private loadedIdData: T | null = null;\r\n private loadedIdChanged: Observer<T> | null = null;\r\n private requestById(id: number): Promise<any> {\r\n this.loading = true;\r\n this.requestedId = id;\r\n return this.client.send('request.' + this.method, { id }) as Promise<any>;\r\n }\r\n\r\n private requestedGroupId: number | null = null;\r\n private loadedGroupObservable: Observable<T[]> | null = null;\r\n private loadedGroupId: number | null = null;\r\n private loadedGroupData: T[] | null = null;\r\n private loadedGroupChanged: Observer<T[]> | null = null;\r\n private requestForGroup(groupId: number): Promise<T[]> {\r\n this.loading = true;\r\n this.requestedGroupId = groupId;\r\n return this.client.send('request.' + this.method, { groupId });\r\n }\r\n\r\n private setData(data: T[] | { added: T[] | undefined; length: number }) {\r\n this.data = data as T[];\r\n if (this.data && this.sortBy) this.data = this.data.sort(this.sortBy);\r\n this._length = data.length;\r\n this.dataMap = new Map();\r\n this.data.forEach((d) => {\r\n this.dataMap.set(d.id, d);\r\n });\r\n }\r\n\r\n get isEmpty() {\r\n return this.data == undefined;\r\n }\r\n\r\n /**\r\n * The contained data can be modified within the callback method\r\n */\r\n public update(callback: (data: T[]) => void) {\r\n if (this.data) {\r\n const updateLengthVariable = this.data.length == this._length;\r\n const length = this.length;\r\n callback(this.data);\r\n this.setData(this.data);\r\n if (!updateLengthVariable) {\r\n this._length = length;\r\n }\r\n }\r\n }\r\n\r\n private afterServerReconnected() {\r\n if (this.requested && this.lazyLoaded) {\r\n this.requested = false;\r\n this.load(1).then();\r\n }\r\n if (this.loadedId) {\r\n this.loadedIdData = null;\r\n this.get(this.loadedId);\r\n }\r\n if (this.loadedGroupId) {\r\n this.loadedGroupData = null;\r\n this.getForGroup(this.loadedGroupId);\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of active-connect-ng2\r\n */\r\n\r\nexport * from './lib/active-connect-ng2.module';\r\nexport * from './lib/websocket';\r\nexport { NgxIndexedDBService } from 'ngx-indexed-db';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -99,7 +99,6 @@ class WebsocketClient {
|
|
|
99
99
|
this.url = protocol + '//' + document.location.hostname + port + '/wss';
|
|
100
100
|
}
|
|
101
101
|
this.connect(this.url);
|
|
102
|
-
this.initTabSuspendedListener();
|
|
103
102
|
}
|
|
104
103
|
connect(url) {
|
|
105
104
|
if (!this.subject) {
|
|
@@ -192,6 +191,8 @@ class WebsocketClient {
|
|
|
192
191
|
if (!this.closed) {
|
|
193
192
|
if (this.pool && this.pool.WssConnected)
|
|
194
193
|
this.pool.WssConnected = false;
|
|
194
|
+
this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');
|
|
195
|
+
this.resetRequestedState();
|
|
195
196
|
setTimeout(() => {
|
|
196
197
|
this.connect(url);
|
|
197
198
|
}, 1000);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-connect-ng2.mjs","sources":["../../../projects/active-connect-ng2/src/lib/active-connect-ng2.module.ts","../../../projects/active-connect-ng2/src/lib/websocket/json/json-parser.ts","../../../projects/active-connect-ng2/src/lib/websocket/client.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/function.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/handle.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-success.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-reconnect.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/outbound.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/route.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/shared.ts","../../../projects/active-connect-ng2/src/lib/websocket/lifecycle/loading-status.ts","../../../projects/active-connect-ng2/src/lib/websocket/objects/outbound-object.ts","../../../projects/active-connect-ng2/src/public-api.ts","../../../projects/active-connect-ng2/src/active-connect-ng2.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { NgxIndexedDBModule, DBConfig } from 'ngx-indexed-db';\r\n\r\nconst dbConfig: DBConfig = {\r\n name: 'activeconnect_cache',\r\n version: 2,\r\n objectStoresMeta: [\r\n {\r\n store: 'outbound',\r\n storeConfig: { keyPath: 'method', autoIncrement: false },\r\n storeSchema: [\r\n { name: 'method', keypath: 'method', options: { unique: true } },\r\n { name: 'data', keypath: 'data', options: { unique: false } },\r\n {\r\n name: 'specificHash',\r\n keypath: 'specificHash',\r\n options: { unique: false },\r\n },\r\n {\r\n name: 'length',\r\n keypath: 'length',\r\n options: { unique: false },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [NgxIndexedDBModule.forRoot(dbConfig)],\r\n exports: [NgxIndexedDBModule],\r\n})\r\nexport class ActiveConnectNg2Module {}\r\n","export class JsonParser {\r\n static stringify(obj: any) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n static parsingFunction(key: any, value: any) {\r\n var a;\r\n if (typeof value === \"string\") {\r\n a =\r\n /^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\.[0-9]{3}Z$/.exec(\r\n value\r\n );\r\n if (a) {\r\n return new Date(a as any);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n static parse(str: string) {\r\n if (str && str != \"undefined\") {\r\n return JSON.parse(str, JsonParser.parsingFunction);\r\n }\r\n return str;\r\n }\r\n}\r\n","import { NgxIndexedDBService } from 'ngx-indexed-db';\r\nimport { DecorableFunction } from './decorators/function';\r\nimport { JsonParser } from './json/json-parser';\r\n\r\nexport class WebsocketClient {\r\n ws!: WebSocket;\r\n pool!: { WssConnected: boolean } | null;\r\n\r\n constructor(\r\n private url?: string,\r\n private supportsCache?: boolean,\r\n public dbService?: NgxIndexedDBService\r\n ) {\r\n if (supportsCache) this.initCache();\r\n if (!url) {\r\n let protocol;\r\n let port;\r\n switch (document.location.protocol) {\r\n case 'https:': {\r\n protocol = 'wss:';\r\n port = ':443';\r\n break;\r\n }\r\n default: {\r\n protocol = 'ws:';\r\n port = ':80';\r\n break;\r\n }\r\n }\r\n this.url = protocol + '//' + document.location.hostname + port + '/wss';\r\n }\r\n this.connect(this.url as string);\r\n this.initTabSuspendedListener();\r\n }\r\n\r\n subject: any;\r\n\r\n private connect(url: string) {\r\n if (!this.subject) {\r\n this.create(url);\r\n }\r\n return this.subject;\r\n }\r\n\r\n private initTabSuspendedListener() {\r\n if (document) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n console.log(\r\n 'ActiveConnect: Closing WebSocket due to tab suspension...'\r\n );\r\n this.disconnect(true);\r\n } else if (document.visibilityState === 'visible') {\r\n console.log('ActiveConnect: Reconnecting WebSocket...');\r\n this.connect(this.url as string);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private requestStack: any[] = [];\r\n private requestHistoryLogs: { timestamp: Date; method: string }[] = [];\r\n private logEntry(method: string) {\r\n this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });\r\n }\r\n public get logs(): { timestamp: Date; method: string }[] {\r\n return this.requestHistoryLogs;\r\n }\r\n\r\n private _token = '';\r\n public get Token(): string {\r\n if (!this._token) {\r\n if (window.localStorage)\r\n this._token = window.localStorage.getItem('token') || '';\r\n }\r\n return this._token;\r\n }\r\n public set Token(val: string) {\r\n this._token = val;\r\n if (window.localStorage) window.localStorage.setItem('token', val);\r\n }\r\n\r\n private set Connected(value: boolean) {\r\n if (value) {\r\n this.sendBrowserInfoToServer();\r\n\r\n this.auth(this.Token).then(() => {\r\n Promise.all(\r\n WebsocketClient.onReconnectCallback.map((c) =>\r\n c.Func ? c.Func() : null\r\n )\r\n ).then(() => {\r\n setTimeout(() => {\r\n this.resetRequestedState();\r\n this.requestStack.forEach((e) => {\r\n this.sendToSocket(e.method, e.data);\r\n this.requestStack = this.requestStack.filter((e1) => e1 != e);\r\n });\r\n }, 2000);\r\n });\r\n });\r\n }\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = value;\r\n }\r\n private static resetRequestedStateCallbacks: Function[] = [];\r\n private connectionEstablishedOnce: boolean = false;\r\n private resetRequestedState() {\r\n if (this.connectionEstablishedOnce) {\r\n // reset requested state for outbounds\r\n WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {\r\n reset();\r\n });\r\n } else {\r\n this.connectionEstablishedOnce = true;\r\n }\r\n }\r\n public static addResetRequestingStateCallback(callback: Function) {\r\n WebsocketClient.resetRequestedStateCallbacks.push(callback);\r\n }\r\n\r\n private create(url: string) {\r\n // create new connection\r\n this.logEntry('TCP/HTTP:CONNECT-SERVER');\r\n this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));\r\n this.ws.onerror = (err) => {\r\n this.ws.close();\r\n this.logEntry('TCP/HTTP:ERROR:' + err);\r\n console.log('ActiveConnect: ' + err);\r\n };\r\n this.ws.onopen = () => {\r\n this.logEntry('TCP/HTTP:CONNECTED');\r\n this.Connected = true;\r\n };\r\n this.ws.onmessage = (e) => {\r\n this.messageReceived(JsonParser.parse(e.data.toString()));\r\n };\r\n this.ws.onclose = () => {\r\n this.logEntry('TCP/HTTP:CLOSED');\r\n if (!this.closed) {\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = false;\r\n setTimeout(() => {\r\n this.connect(url);\r\n }, 1000);\r\n }\r\n };\r\n }\r\n\r\n private messageId: number = 0;\r\n protected sendToSocket(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ) {\r\n const messageId = ++this.messageId;\r\n if (this.ws.readyState != this.ws.OPEN) {\r\n if (!dontEnsureTransmission)\r\n this.requestStack.push({ method, data, messageId });\r\n else return false;\r\n } else {\r\n this.ws.send(JsonParser.stringify({ method, value: data, messageId }));\r\n }\r\n return messageId;\r\n }\r\n\r\n async auth(token: string): Promise<any> {\r\n return this.sendToSocket('auth.token', token);\r\n }\r\n\r\n public send(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ): Promise<any> {\r\n this.logEntry('SEND:' + method);\r\n const messageId = this.sendToSocket(\r\n method,\r\n data,\r\n dontEnsureTransmission || false\r\n );\r\n if (messageId) {\r\n return this.expectMethod(`m.${method}`, messageId);\r\n } else {\r\n return new Promise((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n }\r\n\r\n private rejectCallbacks: Map<number, Function> = new Map();\r\n private expectedMethods: Map<string | number, Array<Function>> = new Map();\r\n private expectMethod(method: string, messageId?: number | null) {\r\n return new Promise((resolve, reject) => {\r\n if (messageId) {\r\n this.expectedMethods.set(messageId, [resolve]);\r\n this.rejectCallbacks.set(messageId, reject);\r\n } else {\r\n if (this.expectedMethods.has(method)) {\r\n let arr = this.expectedMethods.get(method);\r\n (arr as Array<Function>).push(resolve);\r\n } else {\r\n this.expectedMethods.set(method, [resolve]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private messageReceived({\r\n method,\r\n value,\r\n messageId,\r\n specificHash,\r\n inserted,\r\n updated,\r\n deleted,\r\n length,\r\n }: {\r\n method: string;\r\n value: any;\r\n messageId: number | null;\r\n specificHash: number | null;\r\n inserted: any[] | null;\r\n updated: any[] | null;\r\n deleted: any[] | null;\r\n length: number | null;\r\n }) {\r\n this.logEntry('RECEIVED:' + method);\r\n if (method == '___cache') {\r\n this.handleOutboundCacheRequest(value);\r\n }\r\n if (messageId) {\r\n if (method == 'm.error') {\r\n const reject = this.rejectCallbacks.get(messageId);\r\n if (reject) {\r\n reject(value);\r\n }\r\n messageId = -1;\r\n }\r\n }\r\n\r\n if (messageId != null) {\r\n const callback = this.expectedMethods.get(messageId);\r\n if (callback) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n this.invokeSuccessHandlers(method);\r\n } else {\r\n const callback = this.expectedMethods.get(method);\r\n if (callback && callback.length > 0) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n } else {\r\n const out = WebsocketClient.outbounds.get(method);\r\n if (out) {\r\n out(value, specificHash, inserted, updated, deleted, length, this);\r\n }\r\n const handle = WebsocketClient.handles.get(method);\r\n if (handle) {\r\n (handle.Func as Function)(value);\r\n }\r\n }\r\n }\r\n } else {\r\n throw Error(\r\n 'No MessageId was provided, the connection is not supported.'\r\n );\r\n }\r\n }\r\n\r\n private handleOutboundCacheRequest(method: string) {\r\n if (this.dbService) {\r\n try {\r\n this.dbService.getByKey('outbound', method).subscribe((item: any) => {\r\n if (item) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: item.specificHash || null,\r\n });\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n }\r\n });\r\n } catch (e) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error('ActiveConnect: ' + e);\r\n }\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error(\r\n 'Active-Connect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n\r\n private static outbounds: Map<\r\n string,\r\n (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n > = new Map();\r\n static expectOutbound(\r\n method: string,\r\n callback: (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n ) {\r\n WebsocketClient.outbounds.set(method, callback);\r\n }\r\n\r\n private static handles: Map<string, DecorableFunction> = new Map();\r\n static registerHandle(method: string, callback: DecorableFunction) {\r\n WebsocketClient.handles.set(method, callback);\r\n }\r\n\r\n public get isConnected(): boolean {\r\n if (this.ws) return this.ws.readyState == WebSocket.OPEN;\r\n return true;\r\n }\r\n\r\n private sendBrowserInfoToServer() {\r\n // send browser / os information\r\n const browser = this.getBrowser();\r\n const os = this.getOS();\r\n this.send('___browser', {\r\n browser: `${browser.name} ${browser.version} ${os}`,\r\n });\r\n }\r\n\r\n public getBrowser(): { name: string; version: string } {\r\n // https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/\r\n var ua = navigator.userAgent,\r\n tem,\r\n M =\r\n ua.match(\r\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i\r\n ) || [];\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE ', version: tem[1] || '' };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) {\r\n return { name: 'Opera', version: tem[1] };\r\n }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n M.splice(1, 1, tem[1]);\r\n }\r\n return {\r\n name: M[0],\r\n version: M[1],\r\n };\r\n }\r\n\r\n public getOS(): string {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n\r\n return os || '';\r\n }\r\n\r\n private static onSuccessHandlers: {\r\n callback: DecorableFunction;\r\n regexp: RegExp;\r\n }[] = [];\r\n public static onSuccess(callback: DecorableFunction, regexp: RegExp) {\r\n this.onSuccessHandlers.push({ callback, regexp });\r\n }\r\n\r\n private static onReconnectCallback: DecorableFunction[] = [];\r\n static onReconnect(callback: DecorableFunction) {\r\n WebsocketClient.onReconnectCallback.push(callback);\r\n }\r\n\r\n private invokeSuccessHandlers(method: string) {\r\n WebsocketClient.onSuccessHandlers\r\n .filter((e) => e.regexp.test(method))\r\n .forEach((e) => {\r\n var res = (e.callback.Func as Function)();\r\n if (res && res.then) {\r\n res.then();\r\n }\r\n });\r\n }\r\n\r\n public closed = false;\r\n public disconnect(restart?: boolean) {\r\n if (!restart) this.closed = true;\r\n this.ws.close();\r\n }\r\n\r\n private initCache() {}\r\n}\r\n","/**\r\n * Represents the reference to an object method used for websocket routes and outbounds.\r\n */\r\nexport class DecorableFunction {\r\n /**\r\n * Creates an instance of DecorableFunction.\r\n * @param objConfig - The configuration object for the object method.\r\n * @param objConfig.target - The target object.\r\n * @param objConfig.propertyKey - The property key of the target object.\r\n */\r\n constructor(protected objConfig: { target: any; propertyKey: string }) {\r\n // singelton service - fetch from angular\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n if (!prototype.___constructorOverridden) {\r\n prototype.___constructorOverridden = true;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the decorated function.\r\n * @returns - The decorated function.\r\n */\r\n public get Func(): ((...data: any[]) => Promise<any> | any) | null {\r\n if (\r\n this.objConfig?.target &&\r\n this.objConfig.target[this.objConfig.propertyKey]\r\n ) {\r\n return this.objConfig.target[this.objConfig.propertyKey].bind(\r\n this.getBindObject()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bind object.\r\n * @private\r\n * @returns - The bind object.\r\n */\r\n private getBindObject(): any {\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n return prototype.___data._obj;\r\n }\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function Handle(method: string) {\r\n return function _Handle(target: any, propertyKey: string): any {\r\n // method annotation\r\n WebsocketClient.registerHandle(\r\n method,\r\n new DecorableFunction({ target, propertyKey })\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnSuccess(regexp: RegExp) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n WebsocketClient.onSuccess(\r\n new DecorableFunction({ target, propertyKey }),\r\n regexp\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnReconnect(target: any, propertyKey: string) {\r\n WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));\r\n}\r\n","import { WebsocketClient } from '../../client';\r\n\r\nexport function Outbound(\r\n method: string,\r\n requestingRequired?: boolean,\r\n cached?: boolean,\r\n sortBy?: (a: any, b: any) => number\r\n) {\r\n return function _Outbound(target: any, propertyKey: string): any {\r\n target.loading = new Map<string, boolean>();\r\n // property annotation\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) {\r\n if (!target.___received) target.___received = {};\r\n if (!target.___data) target.___data = {};\r\n if (!target.___received) target.___received = {};\r\n if (!target.___requested) target.___requested = {};\r\n if (!cached) {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error(\r\n 'ActiveConnect: could not delete indexdb cache entry'\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = result.data;\r\n target.loading.set(propertyKey, false);\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n target.___received[propertyKey] = false;\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n } else if (data == 'data_delete') {\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n target.___received[propertyKey] = false;\r\n target.___requested[propertyKey] = false;\r\n } else if (data == 'data_diff') {\r\n var data = target.___data[propertyKey] || [];\r\n inserted?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n updated?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n data = data.filter((d: any) => d.id != e.id);\r\n });\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n }\r\n );\r\n if (requestingRequired) {\r\n WebsocketClient.addResetRequestingStateCallback(function callback() {\r\n if (target.___requested) {\r\n target.___requested[propertyKey] = false;\r\n }\r\n });\r\n }\r\n\r\n const obj = {\r\n configurable: true,\r\n get() {\r\n if (!target.___requested) target.___requested = {};\r\n if (requestingRequired && !target.___requested[propertyKey]) {\r\n target.___requested[propertyKey] = true;\r\n (this as any).send('request.' + method, null).then();\r\n }\r\n if (!target.___data) target.___data = {};\r\n if (!target.___data[propertyKey]) {\r\n target.loading.set(propertyKey, true);\r\n } else if (target.loading[propertyKey]) {\r\n target.loading.set(propertyKey, false);\r\n }\r\n return target.___data[propertyKey];\r\n },\r\n set(val: any) {\r\n if (!target.___data) target.___data = {};\r\n target.loading.set(propertyKey, false);\r\n if (sortBy && val) val = val.sort(sortBy);\r\n return (target.___data[propertyKey] = val);\r\n },\r\n };\r\n target[propertyKey] = obj;\r\n return obj;\r\n };\r\n}\r\n","export function Route(\r\n method: string,\r\n loadingKey?: string,\r\n dontEnsureTransmission?: boolean\r\n) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n // method annotation\r\n const original = target[propertyKey];\r\n target[propertyKey] = async function execRoute(...data: any): Promise<any> {\r\n if (loadingKey) {\r\n if (!this.loadingElements[loadingKey]) {\r\n this.loadingElements[loadingKey] = 0;\r\n }\r\n this.loadingElements[loadingKey]++;\r\n }\r\n const promise = original.bind(this)(...data);\r\n let res = null;\r\n if (this.client) {\r\n res = await this.client\r\n .send(method, data[0], dontEnsureTransmission)\r\n ?.catch((err: any) => {\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n throw err;\r\n });\r\n }\r\n await promise;\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n return res;\r\n };\r\n return target;\r\n };\r\n}\r\n","/**\r\n * @deprecated\r\n */\r\nexport function Shared<T>(defaultValue?: T) {\r\n if (defaultValue) {\r\n throw Error(\r\n \"Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.\"\r\n );\r\n }\r\n return function _Shared(target: any, propertyKey: string) {};\r\n}\r\n","import { WebsocketClient } from '../client';\r\n\r\nexport class LoadingStatus extends WebsocketClient {\r\n private __proto__: any;\r\n static loading: Map<string, boolean>;\r\n get isLoading(): boolean {\r\n // return general loading\r\n let anyTrue = false;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n anyTrue ||= e;\r\n });\r\n if (!anyTrue) this.__proto__.loading.clear();\r\n return this.__proto__.loading.size > 0;\r\n }\r\n getLoadingMap(): Map<string, boolean> {\r\n return this.__proto__.loading;\r\n }\r\n\r\n get getCurrent(): number {\r\n let count = 0;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n if (e) count++;\r\n });\r\n if (count == 0) {\r\n this.__proto__.loading.clear();\r\n }\r\n return count;\r\n }\r\n get getTotal(): number {\r\n return this.__proto__.loading.size;\r\n }\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\nimport { WebsocketClient } from '../client';\r\n\r\nexport interface IdObject {\r\n id: number | null | undefined;\r\n}\r\n\r\nexport class OutboundObject<T extends IdObject> {\r\n private previouslyCachedCount: number | undefined;\r\n constructor(\r\n private client: WebsocketClient,\r\n private method: string,\r\n private lazyLoaded?: boolean,\r\n public readonly cached?: boolean,\r\n private initialLoadingCount?: number,\r\n private sortBy?: (a: T, b: T) => number\r\n ) {\r\n this.target.loading = new Map<string, boolean>();\r\n\r\n if (this.client.dbService) {\r\n try {\r\n this.client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n if (result) {\r\n this.previouslyCachedCount = result.data?.length || null;\r\n }\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to read cached data');\r\n console.error(e);\r\n }\r\n }\r\n\r\n const _this = this;\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n insertedOrGroupData: any[] | null,\r\n updatedOrGroupId: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _client: WebsocketClient\r\n ) {\r\n if (!cached) {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n _this.setData(result.data);\r\n if (result.length) _this._length = result.length;\r\n _this.loading = false;\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n _this.loading = false;\r\n _this.requested = false;\r\n } else if (data == 'data_delete') {\r\n _this.data = undefined;\r\n _this.dataMap = new Map();\r\n _this.requested = false;\r\n _this.loadedGroupData = null;\r\n _this.loadedGroupId = null;\r\n _this._length = undefined;\r\n _this.loading = false;\r\n } else if (data == 'data_group') {\r\n if (\r\n _this.requestedGroupId ==\r\n (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedGroupData = insertedOrGroupData;\r\n _this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedGroupChanged?.next(insertedOrGroupData as T[]);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_id') {\r\n if (\r\n _this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedIdData =\r\n (insertedOrGroupData?.length || 0) > 0\r\n ? (insertedOrGroupData as any[])[0]\r\n : null;\r\n _this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedIdChanged?.next(_this.loadedIdData as T);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_diff') {\r\n insertedOrGroupData?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n updatedOrGroupId?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n _this.dataMap.delete(e.id);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(null as any);\r\n }\r\n });\r\n _this.data = Array.from(_this.dataMap.values());\r\n if (_this.data && _this.sortBy)\r\n _this.data = _this.data.sort(_this.sortBy);\r\n _this.loading = false;\r\n\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (_this.data && _this.data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data: _this.data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n _this.setData(data);\r\n if (_this.loadedId) {\r\n const loadedValue = _this.dataMap.get(_this.loadedId);\r\n if (loadedValue) {\r\n _this.loadedIdData = loadedValue;\r\n _this.loadedIdChanged?.next(_this.loadedIdData);\r\n }\r\n }\r\n _this.loading = false;\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (data && data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n if (length) _this._length = length;\r\n }\r\n );\r\n\r\n WebsocketClient.addResetRequestingStateCallback(() => {\r\n this.afterServerReconnected();\r\n });\r\n }\r\n\r\n get target(): any {\r\n return (this.client as any).__proto__;\r\n }\r\n\r\n private dataMap: Map<number | null | undefined, T> = new Map();\r\n private data: T[] | undefined = undefined;\r\n\r\n public get(id: number): Observable<T> {\r\n if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {\r\n if (this.loadedIdData)\r\n setTimeout(() => {\r\n if (this.loadedIdData) this.loadedIdChanged?.next(this.loadedIdData);\r\n }, 50);\r\n return this.loadedObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedId != id || !this.loadedObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedObservable = new Observable<T>((observer: Observer<T>) => {\r\n this.loadedIdChanged = observer;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.data) {\r\n const res = this.dataMap.get(id);\r\n if (res) {\r\n this.loadedIdChanged?.next(res);\r\n resolve();\r\n return;\r\n }\r\n }\r\n if (this.loadedId == id) {\r\n this.loadedIdChanged?.next(this.loadedIdData as T);\r\n } else {\r\n await this.requestById(id);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedObservable as Observable<T>;\r\n }\r\n\r\n public getForGroup(groupId: number): Observable<T[]> {\r\n if (\r\n this.requestedGroupId == groupId &&\r\n this.loadedGroupObservable &&\r\n this.loadedGroupData\r\n ) {\r\n setTimeout(() => {\r\n if (this.loadedGroupData)\r\n this.loadedGroupChanged?.next(this.loadedGroupData);\r\n }, 50);\r\n return this.loadedGroupObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedGroupObservable = new Observable<T[]>(\r\n (observer: Observer<T[]>) => {\r\n this.loadedGroupChanged = observer;\r\n resolve();\r\n }\r\n );\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.loadedGroupId == groupId && this.loadedGroupData) {\r\n this.loadedGroupChanged?.next(this.loadedGroupData as T[]);\r\n } else {\r\n await this.requestForGroup(groupId);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedGroupObservable as Observable<T[]>;\r\n }\r\n\r\n public get all(): T[] | undefined {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n return this.data;\r\n }\r\n\r\n private requested: boolean = false;\r\n public async load(count?: number): Promise<void> {\r\n if (this.lazyLoaded) {\r\n const hasBeenRequestedBefore = this.requested;\r\n this._loading = true;\r\n if (!this.requested) {\r\n this.loading = true;\r\n }\r\n this.requested = true;\r\n await this.client.send('request.' + this.method, {\r\n count: hasBeenRequestedBefore\r\n ? this.data\r\n ? count || this.initialLoadingCount\r\n ? (count || (this.initialLoadingCount as number)) +\r\n this.loadedLength\r\n : undefined\r\n : undefined\r\n : this.previouslyCachedCount || (this.initialLoadingCount as number),\r\n loaded: this.loadedLength,\r\n });\r\n } else {\r\n throw Error(\r\n 'Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.'\r\n );\r\n }\r\n }\r\n\r\n private _loading = false;\r\n private set loading(value: boolean) {\r\n this._loading = value;\r\n this.target.loading.set(this.method, value);\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n public get loadedLength(): number {\r\n return this.data?.length || 0;\r\n }\r\n private _length: number | undefined = undefined;\r\n public get length(): number | undefined {\r\n return this._length;\r\n }\r\n\r\n private requestedId: number | null = null;\r\n private loadedObservable: Observable<T> | null = null;\r\n private loadedId: number | null = null;\r\n private loadedIdData: T | null = null;\r\n private loadedIdChanged: Observer<T> | null = null;\r\n private requestById(id: number): Promise<any> {\r\n this.loading = true;\r\n this.requestedId = id;\r\n return this.client.send('request.' + this.method, { id }) as Promise<any>;\r\n }\r\n\r\n private requestedGroupId: number | null = null;\r\n private loadedGroupObservable: Observable<T[]> | null = null;\r\n private loadedGroupId: number | null = null;\r\n private loadedGroupData: T[] | null = null;\r\n private loadedGroupChanged: Observer<T[]> | null = null;\r\n private requestForGroup(groupId: number): Promise<T[]> {\r\n this.loading = true;\r\n this.requestedGroupId = groupId;\r\n return this.client.send('request.' + this.method, { groupId });\r\n }\r\n\r\n private setData(data: T[] | { added: T[] | undefined; length: number }) {\r\n this.data = data as T[];\r\n if (this.data && this.sortBy) this.data = this.data.sort(this.sortBy);\r\n this._length = data.length;\r\n this.dataMap = new Map();\r\n this.data.forEach((d) => {\r\n this.dataMap.set(d.id, d);\r\n });\r\n }\r\n\r\n get isEmpty() {\r\n return this.data == undefined;\r\n }\r\n\r\n /**\r\n * The contained data can be modified within the callback method\r\n */\r\n public update(callback: (data: T[]) => void) {\r\n if (this.data) {\r\n const updateLengthVariable = this.data.length == this._length;\r\n const length = this.length;\r\n callback(this.data);\r\n this.setData(this.data);\r\n if (!updateLengthVariable) {\r\n this._length = length;\r\n }\r\n }\r\n }\r\n\r\n private afterServerReconnected() {\r\n if (this.requested && this.lazyLoaded) {\r\n this.requested = false;\r\n this.load(1).then();\r\n }\r\n if (this.loadedId) {\r\n this.loadedIdData = null;\r\n this.get(this.loadedId);\r\n }\r\n if (this.loadedGroupId) {\r\n this.loadedGroupData = null;\r\n this.getForGroup(this.loadedGroupId);\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of active-connect-ng2\r\n */\r\n\r\nexport * from './lib/active-connect-ng2.module';\r\nexport * from './lib/websocket';\r\nexport { NgxIndexedDBService } from 'ngx-indexed-db';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"active-connect-ng2.mjs","sources":["../../../projects/active-connect-ng2/src/lib/active-connect-ng2.module.ts","../../../projects/active-connect-ng2/src/lib/websocket/json/json-parser.ts","../../../projects/active-connect-ng2/src/lib/websocket/client.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/function.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/handle.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-success.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/on-reconnect.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/outbound.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/route.ts","../../../projects/active-connect-ng2/src/lib/websocket/decorators/websocket/shared.ts","../../../projects/active-connect-ng2/src/lib/websocket/lifecycle/loading-status.ts","../../../projects/active-connect-ng2/src/lib/websocket/objects/outbound-object.ts","../../../projects/active-connect-ng2/src/public-api.ts","../../../projects/active-connect-ng2/src/active-connect-ng2.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { NgxIndexedDBModule, DBConfig } from 'ngx-indexed-db';\r\n\r\nconst dbConfig: DBConfig = {\r\n name: 'activeconnect_cache',\r\n version: 2,\r\n objectStoresMeta: [\r\n {\r\n store: 'outbound',\r\n storeConfig: { keyPath: 'method', autoIncrement: false },\r\n storeSchema: [\r\n { name: 'method', keypath: 'method', options: { unique: true } },\r\n { name: 'data', keypath: 'data', options: { unique: false } },\r\n {\r\n name: 'specificHash',\r\n keypath: 'specificHash',\r\n options: { unique: false },\r\n },\r\n {\r\n name: 'length',\r\n keypath: 'length',\r\n options: { unique: false },\r\n },\r\n ],\r\n },\r\n ],\r\n};\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [NgxIndexedDBModule.forRoot(dbConfig)],\r\n exports: [NgxIndexedDBModule],\r\n})\r\nexport class ActiveConnectNg2Module {}\r\n","export class JsonParser {\r\n static stringify(obj: any) {\r\n return JSON.stringify(obj);\r\n }\r\n\r\n static parsingFunction(key: any, value: any) {\r\n var a;\r\n if (typeof value === \"string\") {\r\n a =\r\n /^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}T[0-9]{2}\\:[0-9]{2}\\:[0-9]{2}\\.[0-9]{3}Z$/.exec(\r\n value\r\n );\r\n if (a) {\r\n return new Date(a as any);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n static parse(str: string) {\r\n if (str && str != \"undefined\") {\r\n return JSON.parse(str, JsonParser.parsingFunction);\r\n }\r\n return str;\r\n }\r\n}\r\n","import { NgxIndexedDBService } from 'ngx-indexed-db';\r\nimport { DecorableFunction } from './decorators/function';\r\nimport { JsonParser } from './json/json-parser';\r\n\r\nexport class WebsocketClient {\r\n ws!: WebSocket;\r\n pool!: { WssConnected: boolean } | null;\r\n\r\n constructor(\r\n private url?: string,\r\n private supportsCache?: boolean,\r\n public dbService?: NgxIndexedDBService\r\n ) {\r\n if (supportsCache) this.initCache();\r\n if (!url) {\r\n let protocol;\r\n let port;\r\n switch (document.location.protocol) {\r\n case 'https:': {\r\n protocol = 'wss:';\r\n port = ':443';\r\n break;\r\n }\r\n default: {\r\n protocol = 'ws:';\r\n port = ':80';\r\n break;\r\n }\r\n }\r\n this.url = protocol + '//' + document.location.hostname + port + '/wss';\r\n }\r\n this.connect(this.url as string);\r\n }\r\n\r\n subject: any;\r\n\r\n private connect(url: string) {\r\n if (!this.subject) {\r\n this.create(url);\r\n }\r\n return this.subject;\r\n }\r\n\r\n public initTabSuspendedListener() {\r\n if (document) {\r\n document.addEventListener('visibilitychange', () => {\r\n if (document.visibilityState === 'hidden') {\r\n console.log(\r\n 'ActiveConnect: Closing WebSocket due to tab suspension...'\r\n );\r\n this.disconnect(true);\r\n } else if (document.visibilityState === 'visible') {\r\n console.log('ActiveConnect: Reconnecting WebSocket...');\r\n this.connect(this.url as string);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private requestStack: any[] = [];\r\n private requestHistoryLogs: { timestamp: Date; method: string }[] = [];\r\n private logEntry(method: string) {\r\n this.requestHistoryLogs.push({ timestamp: new Date(Date.now()), method });\r\n }\r\n public get logs(): { timestamp: Date; method: string }[] {\r\n return this.requestHistoryLogs;\r\n }\r\n\r\n private _token = '';\r\n public get Token(): string {\r\n if (!this._token) {\r\n if (window.localStorage)\r\n this._token = window.localStorage.getItem('token') || '';\r\n }\r\n return this._token;\r\n }\r\n public set Token(val: string) {\r\n this._token = val;\r\n if (window.localStorage) window.localStorage.setItem('token', val);\r\n }\r\n\r\n private set Connected(value: boolean) {\r\n if (value) {\r\n this.sendBrowserInfoToServer();\r\n\r\n this.auth(this.Token).then(() => {\r\n Promise.all(\r\n WebsocketClient.onReconnectCallback.map((c) =>\r\n c.Func ? c.Func() : null\r\n )\r\n ).then(() => {\r\n setTimeout(() => {\r\n this.resetRequestedState();\r\n this.requestStack.forEach((e) => {\r\n this.sendToSocket(e.method, e.data);\r\n this.requestStack = this.requestStack.filter((e1) => e1 != e);\r\n });\r\n }, 2000);\r\n });\r\n });\r\n }\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = value;\r\n }\r\n private static resetRequestedStateCallbacks: Function[] = [];\r\n private connectionEstablishedOnce: boolean = false;\r\n private resetRequestedState() {\r\n if (this.connectionEstablishedOnce) {\r\n // reset requested state for outbounds\r\n WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {\r\n reset();\r\n });\r\n } else {\r\n this.connectionEstablishedOnce = true;\r\n }\r\n }\r\n public static addResetRequestingStateCallback(callback: Function) {\r\n WebsocketClient.resetRequestedStateCallbacks.push(callback);\r\n }\r\n\r\n private create(url: string) {\r\n // create new connection\r\n this.logEntry('TCP/HTTP:CONNECT-SERVER');\r\n this.ws = new WebSocket(url + (this.supportsCache ? '?cache=true' : ''));\r\n this.ws.onerror = (err) => {\r\n this.ws.close();\r\n this.logEntry('TCP/HTTP:ERROR:' + err);\r\n console.log('ActiveConnect: ' + err);\r\n };\r\n this.ws.onopen = () => {\r\n this.logEntry('TCP/HTTP:CONNECTED');\r\n this.Connected = true;\r\n };\r\n this.ws.onmessage = (e) => {\r\n this.messageReceived(JsonParser.parse(e.data.toString()));\r\n };\r\n this.ws.onclose = () => {\r\n this.logEntry('TCP/HTTP:CLOSED');\r\n if (!this.closed) {\r\n if (this.pool && this.pool.WssConnected) this.pool.WssConnected = false;\r\n this.logEntry('TCP/HTTP:RESET-REQUESTED-OUTBOUND-STATE');\r\n this.resetRequestedState();\r\n setTimeout(() => {\r\n this.connect(url);\r\n }, 1000);\r\n }\r\n };\r\n }\r\n\r\n private messageId: number = 0;\r\n protected sendToSocket(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ) {\r\n const messageId = ++this.messageId;\r\n if (this.ws.readyState != this.ws.OPEN) {\r\n if (!dontEnsureTransmission)\r\n this.requestStack.push({ method, data, messageId });\r\n else return false;\r\n } else {\r\n this.ws.send(JsonParser.stringify({ method, value: data, messageId }));\r\n }\r\n return messageId;\r\n }\r\n\r\n async auth(token: string): Promise<any> {\r\n return this.sendToSocket('auth.token', token);\r\n }\r\n\r\n public send(\r\n method: string,\r\n data: any,\r\n dontEnsureTransmission?: boolean\r\n ): Promise<any> {\r\n this.logEntry('SEND:' + method);\r\n const messageId = this.sendToSocket(\r\n method,\r\n data,\r\n dontEnsureTransmission || false\r\n );\r\n if (messageId) {\r\n return this.expectMethod(`m.${method}`, messageId);\r\n } else {\r\n return new Promise((resolve) => {\r\n resolve(false);\r\n });\r\n }\r\n }\r\n\r\n private rejectCallbacks: Map<number, Function> = new Map();\r\n private expectedMethods: Map<string | number, Array<Function>> = new Map();\r\n private expectMethod(method: string, messageId?: number | null) {\r\n return new Promise((resolve, reject) => {\r\n if (messageId) {\r\n this.expectedMethods.set(messageId, [resolve]);\r\n this.rejectCallbacks.set(messageId, reject);\r\n } else {\r\n if (this.expectedMethods.has(method)) {\r\n let arr = this.expectedMethods.get(method);\r\n (arr as Array<Function>).push(resolve);\r\n } else {\r\n this.expectedMethods.set(method, [resolve]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private messageReceived({\r\n method,\r\n value,\r\n messageId,\r\n specificHash,\r\n inserted,\r\n updated,\r\n deleted,\r\n length,\r\n }: {\r\n method: string;\r\n value: any;\r\n messageId: number | null;\r\n specificHash: number | null;\r\n inserted: any[] | null;\r\n updated: any[] | null;\r\n deleted: any[] | null;\r\n length: number | null;\r\n }) {\r\n this.logEntry('RECEIVED:' + method);\r\n if (method == '___cache') {\r\n this.handleOutboundCacheRequest(value);\r\n }\r\n if (messageId) {\r\n if (method == 'm.error') {\r\n const reject = this.rejectCallbacks.get(messageId);\r\n if (reject) {\r\n reject(value);\r\n }\r\n messageId = -1;\r\n }\r\n }\r\n\r\n if (messageId != null) {\r\n const callback = this.expectedMethods.get(messageId);\r\n if (callback) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n this.invokeSuccessHandlers(method);\r\n } else {\r\n const callback = this.expectedMethods.get(method);\r\n if (callback && callback.length > 0) {\r\n const func = callback.shift();\r\n if (func) func(value);\r\n } else {\r\n const out = WebsocketClient.outbounds.get(method);\r\n if (out) {\r\n out(value, specificHash, inserted, updated, deleted, length, this);\r\n }\r\n const handle = WebsocketClient.handles.get(method);\r\n if (handle) {\r\n (handle.Func as Function)(value);\r\n }\r\n }\r\n }\r\n } else {\r\n throw Error(\r\n 'No MessageId was provided, the connection is not supported.'\r\n );\r\n }\r\n }\r\n\r\n private handleOutboundCacheRequest(method: string) {\r\n if (this.dbService) {\r\n try {\r\n this.dbService.getByKey('outbound', method).subscribe((item: any) => {\r\n if (item) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: item.specificHash || null,\r\n });\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n }\r\n });\r\n } catch (e) {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error('ActiveConnect: ' + e);\r\n }\r\n } else {\r\n this.send('___cache', {\r\n method,\r\n specificHash: null,\r\n });\r\n console.error(\r\n 'Active-Connect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n\r\n private static outbounds: Map<\r\n string,\r\n (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n > = new Map();\r\n static expectOutbound(\r\n method: string,\r\n callback: (\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) => void\r\n ) {\r\n WebsocketClient.outbounds.set(method, callback);\r\n }\r\n\r\n private static handles: Map<string, DecorableFunction> = new Map();\r\n static registerHandle(method: string, callback: DecorableFunction) {\r\n WebsocketClient.handles.set(method, callback);\r\n }\r\n\r\n public get isConnected(): boolean {\r\n if (this.ws) return this.ws.readyState == WebSocket.OPEN;\r\n return true;\r\n }\r\n\r\n private sendBrowserInfoToServer() {\r\n // send browser / os information\r\n const browser = this.getBrowser();\r\n const os = this.getOS();\r\n this.send('___browser', {\r\n browser: `${browser.name} ${browser.version} ${os}`,\r\n });\r\n }\r\n\r\n public getBrowser(): { name: string; version: string } {\r\n // https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/\r\n var ua = navigator.userAgent,\r\n tem,\r\n M =\r\n ua.match(\r\n /(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i\r\n ) || [];\r\n if (/trident/i.test(M[1])) {\r\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\r\n return { name: 'IE ', version: tem[1] || '' };\r\n }\r\n if (M[1] === 'Chrome') {\r\n tem = ua.match(/\\bOPR\\/(\\d+)/);\r\n if (tem != null) {\r\n return { name: 'Opera', version: tem[1] };\r\n }\r\n }\r\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\r\n if ((tem = ua.match(/version\\/(\\d+)/i)) != null) {\r\n M.splice(1, 1, tem[1]);\r\n }\r\n return {\r\n name: M[0],\r\n version: M[1],\r\n };\r\n }\r\n\r\n public getOS(): string {\r\n var userAgent = window.navigator.userAgent,\r\n platform = window.navigator.platform,\r\n macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],\r\n windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],\r\n iosPlatforms = ['iPhone', 'iPad', 'iPod'],\r\n os = null;\r\n\r\n if (macosPlatforms.indexOf(platform) !== -1) {\r\n os = 'Mac OS';\r\n } else if (iosPlatforms.indexOf(platform) !== -1) {\r\n os = 'iOS';\r\n } else if (windowsPlatforms.indexOf(platform) !== -1) {\r\n os = 'Windows';\r\n } else if (/Android/.test(userAgent)) {\r\n os = 'Android';\r\n } else if (!os && /Linux/.test(platform)) {\r\n os = 'Linux';\r\n }\r\n\r\n return os || '';\r\n }\r\n\r\n private static onSuccessHandlers: {\r\n callback: DecorableFunction;\r\n regexp: RegExp;\r\n }[] = [];\r\n public static onSuccess(callback: DecorableFunction, regexp: RegExp) {\r\n this.onSuccessHandlers.push({ callback, regexp });\r\n }\r\n\r\n private static onReconnectCallback: DecorableFunction[] = [];\r\n static onReconnect(callback: DecorableFunction) {\r\n WebsocketClient.onReconnectCallback.push(callback);\r\n }\r\n\r\n private invokeSuccessHandlers(method: string) {\r\n WebsocketClient.onSuccessHandlers\r\n .filter((e) => e.regexp.test(method))\r\n .forEach((e) => {\r\n var res = (e.callback.Func as Function)();\r\n if (res && res.then) {\r\n res.then();\r\n }\r\n });\r\n }\r\n\r\n public closed = false;\r\n public disconnect(restart?: boolean) {\r\n if (!restart) this.closed = true;\r\n this.ws.close();\r\n }\r\n\r\n private initCache() {}\r\n}\r\n","/**\r\n * Represents the reference to an object method used for websocket routes and outbounds.\r\n */\r\nexport class DecorableFunction {\r\n /**\r\n * Creates an instance of DecorableFunction.\r\n * @param objConfig - The configuration object for the object method.\r\n * @param objConfig.target - The target object.\r\n * @param objConfig.propertyKey - The property key of the target object.\r\n */\r\n constructor(protected objConfig: { target: any; propertyKey: string }) {\r\n // singelton service - fetch from angular\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n if (!prototype.___constructorOverridden) {\r\n prototype.___constructorOverridden = true;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the decorated function.\r\n * @returns - The decorated function.\r\n */\r\n public get Func(): ((...data: any[]) => Promise<any> | any) | null {\r\n if (\r\n this.objConfig?.target &&\r\n this.objConfig.target[this.objConfig.propertyKey]\r\n ) {\r\n return this.objConfig.target[this.objConfig.propertyKey].bind(\r\n this.getBindObject()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Returns the bind object.\r\n * @private\r\n * @returns - The bind object.\r\n */\r\n private getBindObject(): any {\r\n const prototype = this.objConfig.target.prototype || this.objConfig.target;\r\n return prototype.___data._obj;\r\n }\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function Handle(method: string) {\r\n return function _Handle(target: any, propertyKey: string): any {\r\n // method annotation\r\n WebsocketClient.registerHandle(\r\n method,\r\n new DecorableFunction({ target, propertyKey })\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnSuccess(regexp: RegExp) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n WebsocketClient.onSuccess(\r\n new DecorableFunction({ target, propertyKey }),\r\n regexp\r\n );\r\n };\r\n}\r\n","import { WebsocketClient } from '../../client';\r\nimport { DecorableFunction } from '../function';\r\n\r\nexport function OnReconnect(target: any, propertyKey: string) {\r\n WebsocketClient.onReconnect(new DecorableFunction({ target, propertyKey }));\r\n}\r\n","import { WebsocketClient } from '../../client';\r\n\r\nexport function Outbound(\r\n method: string,\r\n requestingRequired?: boolean,\r\n cached?: boolean,\r\n sortBy?: (a: any, b: any) => number\r\n) {\r\n return function _Outbound(target: any, propertyKey: string): any {\r\n target.loading = new Map<string, boolean>();\r\n // property annotation\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n inserted: any[] | null,\r\n updated: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _this: WebsocketClient\r\n ) {\r\n if (!target.___received) target.___received = {};\r\n if (!target.___data) target.___data = {};\r\n if (!target.___received) target.___received = {};\r\n if (!target.___requested) target.___requested = {};\r\n if (!cached) {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error(\r\n 'ActiveConnect: could not delete indexdb cache entry'\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = result.data;\r\n target.loading.set(propertyKey, false);\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_this.dbService) {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n target.___received[propertyKey] = false;\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n } else if (data == 'data_delete') {\r\n target.___data[propertyKey] = undefined;\r\n target.loading.set(propertyKey, false);\r\n target.___received[propertyKey] = false;\r\n target.___requested[propertyKey] = false;\r\n } else if (data == 'data_diff') {\r\n var data = target.___data[propertyKey] || [];\r\n inserted?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n updated?.forEach((e) => {\r\n const matching = data.filter((d: any) => d.id == e.id);\r\n if (matching.length > 0) {\r\n data[data.indexOf(matching[0])] = e;\r\n } else {\r\n data.push(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n data = data.filter((d: any) => d.id != e.id);\r\n });\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n if (sortBy && data) data = data.sort(sortBy);\r\n target.___received[propertyKey] = true;\r\n target.___data[propertyKey] = data;\r\n target.loading.set(propertyKey, false);\r\n if (cached && specificHash) {\r\n if (_this.dbService) {\r\n if (data && data?.length > 0) {\r\n try {\r\n _this.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n })\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n try {\r\n _this.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data');\r\n console.error(e);\r\n }\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n }\r\n );\r\n if (requestingRequired) {\r\n WebsocketClient.addResetRequestingStateCallback(function callback() {\r\n if (target.___requested) {\r\n target.___requested[propertyKey] = false;\r\n }\r\n });\r\n }\r\n\r\n const obj = {\r\n configurable: true,\r\n get() {\r\n if (!target.___requested) target.___requested = {};\r\n if (requestingRequired && !target.___requested[propertyKey]) {\r\n target.___requested[propertyKey] = true;\r\n (this as any).send('request.' + method, null).then();\r\n }\r\n if (!target.___data) target.___data = {};\r\n if (!target.___data[propertyKey]) {\r\n target.loading.set(propertyKey, true);\r\n } else if (target.loading[propertyKey]) {\r\n target.loading.set(propertyKey, false);\r\n }\r\n return target.___data[propertyKey];\r\n },\r\n set(val: any) {\r\n if (!target.___data) target.___data = {};\r\n target.loading.set(propertyKey, false);\r\n if (sortBy && val) val = val.sort(sortBy);\r\n return (target.___data[propertyKey] = val);\r\n },\r\n };\r\n target[propertyKey] = obj;\r\n return obj;\r\n };\r\n}\r\n","export function Route(\r\n method: string,\r\n loadingKey?: string,\r\n dontEnsureTransmission?: boolean\r\n) {\r\n return function _Route(target: any, propertyKey: string): any {\r\n // method annotation\r\n const original = target[propertyKey];\r\n target[propertyKey] = async function execRoute(...data: any): Promise<any> {\r\n if (loadingKey) {\r\n if (!this.loadingElements[loadingKey]) {\r\n this.loadingElements[loadingKey] = 0;\r\n }\r\n this.loadingElements[loadingKey]++;\r\n }\r\n const promise = original.bind(this)(...data);\r\n let res = null;\r\n if (this.client) {\r\n res = await this.client\r\n .send(method, data[0], dontEnsureTransmission)\r\n ?.catch((err: any) => {\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n throw err;\r\n });\r\n }\r\n await promise;\r\n if (loadingKey) this.loadingElements[loadingKey]--;\r\n return res;\r\n };\r\n return target;\r\n };\r\n}\r\n","/**\r\n * @deprecated\r\n */\r\nexport function Shared<T>(defaultValue?: T) {\r\n if (defaultValue) {\r\n throw Error(\r\n \"Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.\"\r\n );\r\n }\r\n return function _Shared(target: any, propertyKey: string) {};\r\n}\r\n","import { WebsocketClient } from '../client';\r\n\r\nexport class LoadingStatus extends WebsocketClient {\r\n private __proto__: any;\r\n static loading: Map<string, boolean>;\r\n get isLoading(): boolean {\r\n // return general loading\r\n let anyTrue = false;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n anyTrue ||= e;\r\n });\r\n if (!anyTrue) this.__proto__.loading.clear();\r\n return this.__proto__.loading.size > 0;\r\n }\r\n getLoadingMap(): Map<string, boolean> {\r\n return this.__proto__.loading;\r\n }\r\n\r\n get getCurrent(): number {\r\n let count = 0;\r\n this.__proto__.loading.forEach((e: boolean) => {\r\n if (e) count++;\r\n });\r\n if (count == 0) {\r\n this.__proto__.loading.clear();\r\n }\r\n return count;\r\n }\r\n get getTotal(): number {\r\n return this.__proto__.loading.size;\r\n }\r\n}\r\n","import { Observable, Observer } from 'rxjs';\r\nimport { WebsocketClient } from '../client';\r\n\r\nexport interface IdObject {\r\n id: number | null | undefined;\r\n}\r\n\r\nexport class OutboundObject<T extends IdObject> {\r\n private previouslyCachedCount: number | undefined;\r\n constructor(\r\n private client: WebsocketClient,\r\n private method: string,\r\n private lazyLoaded?: boolean,\r\n public readonly cached?: boolean,\r\n private initialLoadingCount?: number,\r\n private sortBy?: (a: T, b: T) => number\r\n ) {\r\n this.target.loading = new Map<string, boolean>();\r\n\r\n if (this.client.dbService) {\r\n try {\r\n this.client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n if (result) {\r\n this.previouslyCachedCount = result.data?.length || null;\r\n }\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to read cached data');\r\n console.error(e);\r\n }\r\n }\r\n\r\n const _this = this;\r\n WebsocketClient.expectOutbound(\r\n method,\r\n function setOutbound(\r\n data: any,\r\n specificHash: number | null,\r\n insertedOrGroupData: any[] | null,\r\n updatedOrGroupId: any[] | null,\r\n deleted: any[] | null,\r\n length: number | null,\r\n _client: WebsocketClient\r\n ) {\r\n if (!cached) {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n }\r\n }\r\n\r\n if (data == 'cache_restore') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .getByKey('outbound', method)\r\n .subscribe((result: any) => {\r\n _this.setData(result.data);\r\n if (result.length) _this._length = result.length;\r\n _this.loading = false;\r\n });\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to restore cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n } else if (data == 'cache_delete') {\r\n if (_client.dbService) {\r\n try {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to delete cached data');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching / restore not possible as the indexedDB is not accessible'\r\n );\r\n }\r\n _this.loading = false;\r\n _this.requested = false;\r\n } else if (data == 'data_delete') {\r\n _this.data = undefined;\r\n _this.dataMap = new Map();\r\n _this.requested = false;\r\n _this.loadedGroupData = null;\r\n _this.loadedGroupId = null;\r\n _this._length = undefined;\r\n _this.loading = false;\r\n } else if (data == 'data_group') {\r\n if (\r\n _this.requestedGroupId ==\r\n (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedGroupData = insertedOrGroupData;\r\n _this.loadedGroupId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedGroupChanged?.next(insertedOrGroupData as T[]);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_id') {\r\n if (\r\n _this.requestedId == (updatedOrGroupId ? updatedOrGroupId[0] : 0)\r\n ) {\r\n _this.loadedIdData =\r\n (insertedOrGroupData?.length || 0) > 0\r\n ? (insertedOrGroupData as any[])[0]\r\n : null;\r\n _this.loadedId = updatedOrGroupId ? updatedOrGroupId[0] : 0;\r\n _this.loadedIdChanged?.next(_this.loadedIdData as T);\r\n _this.loading = false;\r\n }\r\n } else if (data == 'data_diff') {\r\n insertedOrGroupData?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n updatedOrGroupId?.forEach((e) => {\r\n _this.dataMap.set(e.id, e);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(e);\r\n }\r\n });\r\n deleted?.forEach((e) => {\r\n _this.dataMap.delete(e.id);\r\n if (e.id == _this.loadedId) {\r\n _this.loadedIdChanged?.next(null as any);\r\n }\r\n });\r\n _this.data = Array.from(_this.dataMap.values());\r\n if (_this.data && _this.sortBy)\r\n _this.data = _this.data.sort(_this.sortBy);\r\n _this.loading = false;\r\n\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (_this.data && _this.data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data: _this.data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n } else {\r\n _this.setData(data);\r\n if (_this.loadedId) {\r\n const loadedValue = _this.dataMap.get(_this.loadedId);\r\n if (loadedValue) {\r\n _this.loadedIdData = loadedValue;\r\n _this.loadedIdChanged?.next(_this.loadedIdData);\r\n }\r\n }\r\n _this.loading = false;\r\n if (cached && specificHash) {\r\n if (_client.dbService) {\r\n try {\r\n if (data && data?.length > 0) {\r\n _client.dbService\r\n .update('outbound', {\r\n method,\r\n data,\r\n specificHash,\r\n length,\r\n })\r\n .subscribe(() => {});\r\n } else {\r\n _client.dbService\r\n .deleteByKey('outbound', method)\r\n .subscribe(() => {});\r\n }\r\n } catch (e) {\r\n console.error('ActiveConnect: Unable to update cached data.');\r\n console.error(e);\r\n }\r\n } else {\r\n console.error(\r\n 'ActiveConnect: Caching not possible as the indexedDB has not been initialized'\r\n );\r\n }\r\n }\r\n }\r\n if (length) _this._length = length;\r\n }\r\n );\r\n\r\n WebsocketClient.addResetRequestingStateCallback(() => {\r\n this.afterServerReconnected();\r\n });\r\n }\r\n\r\n get target(): any {\r\n return (this.client as any).__proto__;\r\n }\r\n\r\n private dataMap: Map<number | null | undefined, T> = new Map();\r\n private data: T[] | undefined = undefined;\r\n\r\n public get(id: number): Observable<T> {\r\n if (this.requestedId == id && this.loadedObservable && this.loadedIdData) {\r\n if (this.loadedIdData)\r\n setTimeout(() => {\r\n if (this.loadedIdData) this.loadedIdChanged?.next(this.loadedIdData);\r\n }, 50);\r\n return this.loadedObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedId != id || !this.loadedObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedObservable = new Observable<T>((observer: Observer<T>) => {\r\n this.loadedIdChanged = observer;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.data) {\r\n const res = this.dataMap.get(id);\r\n if (res) {\r\n this.loadedIdChanged?.next(res);\r\n resolve();\r\n return;\r\n }\r\n }\r\n if (this.loadedId == id) {\r\n this.loadedIdChanged?.next(this.loadedIdData as T);\r\n } else {\r\n await this.requestById(id);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedObservable as Observable<T>;\r\n }\r\n\r\n public getForGroup(groupId: number): Observable<T[]> {\r\n if (\r\n this.requestedGroupId == groupId &&\r\n this.loadedGroupObservable &&\r\n this.loadedGroupData\r\n ) {\r\n setTimeout(() => {\r\n if (this.loadedGroupData)\r\n this.loadedGroupChanged?.next(this.loadedGroupData);\r\n }, 50);\r\n return this.loadedGroupObservable;\r\n }\r\n\r\n let observablePromise: Promise<any> | undefined;\r\n if (this.requestedGroupId != groupId || !this.loadedGroupObservable) {\r\n observablePromise = new Promise<void>((resolve) => {\r\n this.loadedGroupObservable = new Observable<T[]>(\r\n (observer: Observer<T[]>) => {\r\n this.loadedGroupChanged = observer;\r\n resolve();\r\n }\r\n );\r\n });\r\n }\r\n\r\n Promise.all([observablePromise]).then(() => {\r\n new Promise<void>(async (resolve) => {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n if (this.loadedGroupId == groupId && this.loadedGroupData) {\r\n this.loadedGroupChanged?.next(this.loadedGroupData as T[]);\r\n } else {\r\n await this.requestForGroup(groupId);\r\n }\r\n resolve();\r\n }).then();\r\n });\r\n return this.loadedGroupObservable as Observable<T[]>;\r\n }\r\n\r\n public get all(): T[] | undefined {\r\n if (!this.requested && this.lazyLoaded) {\r\n this.load().then();\r\n }\r\n return this.data;\r\n }\r\n\r\n private requested: boolean = false;\r\n public async load(count?: number): Promise<void> {\r\n if (this.lazyLoaded) {\r\n const hasBeenRequestedBefore = this.requested;\r\n this._loading = true;\r\n if (!this.requested) {\r\n this.loading = true;\r\n }\r\n this.requested = true;\r\n await this.client.send('request.' + this.method, {\r\n count: hasBeenRequestedBefore\r\n ? this.data\r\n ? count || this.initialLoadingCount\r\n ? (count || (this.initialLoadingCount as number)) +\r\n this.loadedLength\r\n : undefined\r\n : undefined\r\n : this.previouslyCachedCount || (this.initialLoadingCount as number),\r\n loaded: this.loadedLength,\r\n });\r\n } else {\r\n throw Error(\r\n 'Active-Connect: Cannot run loading request as this outbound is not lazy-loaded.'\r\n );\r\n }\r\n }\r\n\r\n private _loading = false;\r\n private set loading(value: boolean) {\r\n this._loading = value;\r\n this.target.loading.set(this.method, value);\r\n }\r\n public get loading(): boolean {\r\n return this._loading;\r\n }\r\n public get loadedLength(): number {\r\n return this.data?.length || 0;\r\n }\r\n private _length: number | undefined = undefined;\r\n public get length(): number | undefined {\r\n return this._length;\r\n }\r\n\r\n private requestedId: number | null = null;\r\n private loadedObservable: Observable<T> | null = null;\r\n private loadedId: number | null = null;\r\n private loadedIdData: T | null = null;\r\n private loadedIdChanged: Observer<T> | null = null;\r\n private requestById(id: number): Promise<any> {\r\n this.loading = true;\r\n this.requestedId = id;\r\n return this.client.send('request.' + this.method, { id }) as Promise<any>;\r\n }\r\n\r\n private requestedGroupId: number | null = null;\r\n private loadedGroupObservable: Observable<T[]> | null = null;\r\n private loadedGroupId: number | null = null;\r\n private loadedGroupData: T[] | null = null;\r\n private loadedGroupChanged: Observer<T[]> | null = null;\r\n private requestForGroup(groupId: number): Promise<T[]> {\r\n this.loading = true;\r\n this.requestedGroupId = groupId;\r\n return this.client.send('request.' + this.method, { groupId });\r\n }\r\n\r\n private setData(data: T[] | { added: T[] | undefined; length: number }) {\r\n this.data = data as T[];\r\n if (this.data && this.sortBy) this.data = this.data.sort(this.sortBy);\r\n this._length = data.length;\r\n this.dataMap = new Map();\r\n this.data.forEach((d) => {\r\n this.dataMap.set(d.id, d);\r\n });\r\n }\r\n\r\n get isEmpty() {\r\n return this.data == undefined;\r\n }\r\n\r\n /**\r\n * The contained data can be modified within the callback method\r\n */\r\n public update(callback: (data: T[]) => void) {\r\n if (this.data) {\r\n const updateLengthVariable = this.data.length == this._length;\r\n const length = this.length;\r\n callback(this.data);\r\n this.setData(this.data);\r\n if (!updateLengthVariable) {\r\n this._length = length;\r\n }\r\n }\r\n }\r\n\r\n private afterServerReconnected() {\r\n if (this.requested && this.lazyLoaded) {\r\n this.requested = false;\r\n this.load(1).then();\r\n }\r\n if (this.loadedId) {\r\n this.loadedIdData = null;\r\n this.get(this.loadedId);\r\n }\r\n if (this.loadedGroupId) {\r\n this.loadedGroupData = null;\r\n this.getForGroup(this.loadedGroupId);\r\n }\r\n }\r\n}\r\n","/*\r\n * Public API Surface of active-connect-ng2\r\n */\r\n\r\nexport * from './lib/active-connect-ng2.module';\r\nexport * from './lib/websocket';\r\nexport { NgxIndexedDBService } from 'ngx-indexed-db';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare class WebsocketClient {
|
|
|
11
11
|
constructor(url?: string | undefined, supportsCache?: boolean | undefined, dbService?: NgxIndexedDBService | undefined);
|
|
12
12
|
subject: any;
|
|
13
13
|
private connect;
|
|
14
|
-
|
|
14
|
+
initTabSuspendedListener(): void;
|
|
15
15
|
private requestStack;
|
|
16
16
|
private requestHistoryLogs;
|
|
17
17
|
private logEntry;
|