Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

knx-listener

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

knx-listener - npm Package Compare versions

Comparing version 0.0.3 to 0.0.4

6

dist/bus-listener.js

@@ -60,2 +60,6 @@ "use strict";

}, 0);
const ref = this.qmanager.on('disconnect', () => {
clearInterval(interval);
ref.unsubscribe();
});
interval.unref();

@@ -168,2 +172,2 @@ }

exports.BusListener = BusListener;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzLWxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1cy1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkNBTXNCO0FBVXRCLG1EQUV5QjtBQU96QiwyQ0FFcUI7QUFLckI7SUFTRTtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNEJBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFJTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxVQUFrQixFQUFFLEVBQ2xELE9BQU8sRUFBRSxTQUFTLE1BQ3dDLEVBQUU7UUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHO2dCQUNsQixFQUFFLEVBQUUsc0JBQVU7Z0JBQ2QsUUFBUSxFQUFFLENBQWE7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBRTNELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBRTdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHO1lBQ1gsRUFBRSxDQUFDLENBQUMsT0FBTyxTQUFTLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDcEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFFWixPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsQ0FBQztnQkFFeEIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBRXpFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUU7d0JBQ3ZDLE9BQU8sRUFBRSxTQUFTO3FCQUNuQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRU4sTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBSU0sUUFBUSxDQUFJLEVBQVk7UUFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDTSxXQUFXO1FBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztJQUMvQyxDQUFDO0lBSU0sS0FBSyxDQUFJLEVBQVk7UUFDMUIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTztZQUM1QixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssVUFBVSxHQUFHLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDTixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUM7b0JBQzNCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBRXZCLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLFVBQVUsR0FBRyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztvQkFDdkQsQ0FBQztnQkFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ04sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJUyxRQUFRO1FBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDckQsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUlTLFlBQVksQ0FBQyxHQUFZLEVBQUUsTUFBbUI7UUFDdEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVM7WUFDckMsTUFBTSxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVTtZQUNsQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVO1lBQy9CLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDO0lBQzdCLENBQUM7SUFJTSxLQUFLLENBQUMsSUFBb0MsRUFBRSxZQUFvQjtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsTUFBTSxHQUFHLEdBQUcsa0JBQUssQ0FBQztZQUNoQixJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixJQUFJLEVBQUUsWUFBWTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFlLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTTtZQUM1RixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRztZQUVWLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsQ0FBQyxHQUFHO1lBRUwsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFJTSxJQUFJLENBQUMsWUFBb0I7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sR0FBRyxHQUFHLGlCQUFJLENBQUM7WUFDZixJQUFJO1lBQ0osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLElBQUksRUFBRSxZQUFZO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQWdCLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTTtZQUM3RixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxZQUFZO2dCQUM5QixHQUFHLENBQUMsTUFBTSxLQUFLLEVBQXNCO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHO1lBRVYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxDQUFDLEdBQUc7WUFFTCxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlNLFVBQVUsQ0FBSSxFQUFZO1FBQy9CLE1BQU0sR0FBRyxHQUFHLHVCQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUMxQixJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU07WUFDakQsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBSVMsY0FBYztRQUN0QixNQUFNLEdBQUcsR0FBRyxpQkFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNO1lBRXhDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFHekIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFVixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlTLGFBQWE7UUFDckIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUUzQixhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUlTLElBQUksQ0FBQyxHQUFXO1FBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FDMUIsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDYixDQUFDO0lBSVMsVUFBVSxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLHVCQUFVLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQzFCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU07WUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSTtnQkFDNUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNO2dCQUN4QixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUk7Z0JBQ3BCLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBdUI7Z0JBQ3pDLEdBQUcsQ0FBQyxjQUFjLEtBQUssQ0FBaUIsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFNRCxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQTRCO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBck9ELGtDQXFPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRpc2Nvbm5lY3QsXG4gIHJlYWQsXG4gIG9wZW5UdW5uZWwsXG4gIHBpbmcsXG4gIHdyaXRlLFxufSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuaW1wb3J0IHtcbiAgRGlzY29ubmVjdFJlcG9uc2UsXG4gIENoYW5uZWwsXG4gIENvbm5lY3RSZXNwb25zZVR1bm5lbCxcbiAgVHVubmVsaW5nQWNrLFxuICBHcm91cFJlc3BvbnNlLFxuICBIcGFpLFxuICBTdWJzY3JpYmVyLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgUXVlcnlNYW5hZ2VyLFxufSBmcm9tICcuL3F1ZXJ5LW1hbmFnZXInO1xuaW1wb3J0IHtcbiAgU2VydmljZSxcbiAgUHJvdG9jb2wsXG4gIENvbm5lY3Rpb24sXG4gIEJ1c0V2ZW50LFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBNeUlwTnVtYmVyLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBZGRyZXNzSW5mbyxcbn0gZnJvbSAnZGdyYW0nO1xuXG5leHBvcnQgY2xhc3MgQnVzTGlzdGVuZXIge1xuICBwcm90ZWN0ZWQgc2VxdWVuY2VJZHM6IFNldDxudW1iZXI+O1xuICBwcm90ZWN0ZWQgcW1hbmFnZXI6IFF1ZXJ5TWFuYWdlcjtcbiAgcHJvdGVjdGVkIGNvbnRyb2xQb2ludDogSHBhaTtcbiAgcHJvdGVjdGVkIGhlYXJ0YmVhdEludGVydmFsOiBOb2RlSlMuVGltZXI7XG4gIHByb3RlY3RlZCBzb3VyY2U6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHJlbW90ZUhvc3Q6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlbW90ZVBvcnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGNoYW5uZWxJZDogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcXVlbmNlSWRzID0gbmV3IFNldCgpO1xuICAgIHRoaXMucW1hbmFnZXIgPSBuZXcgUXVlcnlNYW5hZ2VyKCk7XG4gIH1cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHR1bm5lbGluZy4gSXQgaXMgYG5ldmVyLXJlc29sdmluZ2AgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIGJpbmQocmVtb3RlSG9zdDogc3RyaW5nLCByZW1vdGVQb3J0OiBudW1iZXIsIHtcbiAgICB0aW1lb3V0LCBvbkZhaWx1cmUsXG4gIH06IHsgdGltZW91dD86IG51bWJlciwgb25GYWlsdXJlPzogKGVycjogRXJyb3IpID0+IHZvaWQgfSA9IHt9KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5jb25uZWN0KCkudGhlbigoc29jaykgPT4ge1xuICAgICAgdGhpcy5jb250cm9sUG9pbnQgPSB7XG4gICAgICAgIGlwOiBNeUlwTnVtYmVyLFxuICAgICAgICBwcm90b2NvbDogUHJvdG9jb2wuVWRwNCxcbiAgICAgICAgcG9ydDogc29jay5wb3J0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLm9wZW5UdW5uZWwocmVtb3RlSG9zdCwgcmVtb3RlUG9ydCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gd2hlbiB0dW5uZWxpbmcgaXMgb3Blbiwgc3RvcmUgaW1wb3J0YW50IGluZm9cbiAgICAgICAgdGhpcy5zb3VyY2UgPSByZXNwb25zZS5rbnhBZGRyZXNzO1xuICAgICAgICB0aGlzLmNoYW5uZWxJZCA9IHJlc3BvbnNlLmNoYW5uZWxJZDtcbiAgICAgICAgdGhpcy5yZW1vdGVIb3N0ID0gcmVtb3RlSG9zdDtcbiAgICAgICAgdGhpcy5yZW1vdGVQb3J0ID0gcmVtb3RlUG9ydDtcbiAgICAgICAgLy8gYmVnaW4gaGVhcnRiZWF0IHRvIHRoZSByZW1vdGUgaG9zdFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEhlYXJ0YmVhdCgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkZhaWx1cmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25GYWlsdXJlKGVycik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BIZWFydGJlYXQoKTtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIC8vIGNhc3QgbnVtYmVyIHRvIHVpbnRcbiAgICAgICAgdGltZW91dCA9IHRpbWVvdXQgPj4+IDA7XG4gICAgICAgIC8vIHNjaGVkdWxlIHJldHJ5IGluIGB0aW1lb3V0YCBzZWNvbmRzXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KS51bnJlZigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBjYWxsIHRvIHJlY29ubmVjdFxuICAgICAgICAgIHJldHVybiB0aGlzLmJpbmQocmVtb3RlSG9zdCwgcmVtb3RlUG9ydCwge1xuICAgICAgICAgICAgdGltZW91dCwgb25GYWlsdXJlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIHRpbWVvdXQsIHRoZW4gcHJvcGFnYXRlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiByZXR1cm5zIHByb21pc2UsIHdoaWNoIGluZGljYXRlcyBzb2NrZXQgY2xvc2VcbiAgICovXG4gIHB1YmxpYyBjb21wbGV0ZTxUPihjYj86ICgpID0+IFQpIHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5jb21wbGV0ZShjYik7XG4gIH1cbiAgcHVibGljIGlzQ29ubmVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXJ0YmVhdEludGVydmFsID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiByZWFkeSByZXR1cm4gcHJvbWlzZXMsIHdoaWNoIG9ubHkgcmVzb2x2ZXMgd2hlbiB0dW5uZWwgaXMgY29ubmVjdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZHk8VD4oY2I/OiAoKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHJlc29sdmUodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nID8gY2IoKSA6IHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAvLyB3aGVuIGNvbm5lY3RlZCwgY2xlYXIgaW50ZXJ2YWxcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgICBpbnRlcnZhbC51bnJlZigpOyAvLyBsZXQgbm9kZSBleGl0XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBuZXh0IHNlcXVlbmNlIG51bWJlciB0byBudW1iZXIgZWFjaCBrbnggdGVsZWdyYW1cbiAgICovXG4gIHByb3RlY3RlZCBuZXh0U2VxbigpIHtcbiAgICBsZXQgaWQgPSAwO1xuICAgIHdoaWxlICh0aGlzLnNlcXVlbmNlSWRzLmhhcyhpZCkpIHtcbiAgICAgIGlmIChpZCsrID49IDB4RkYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYXhpbXVtIHNlcXVlbmNlIG51bWJlciByZWFjaGVkJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VxdWVuY2VJZHMuYWRkKGlkKTtcbiAgICByZXR1cm4gaWQ7XG4gIH1cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBzZW5kZXIgdGhlIG9uZSB0aGlzIHR1bm5lbGluZyB3YXMgaW5pdGlhbGx5IGJvdW5kIHRvXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNTYW1lT3JpZ2luKHJlczogQ2hhbm5lbCwgc2VuZGVyOiBBZGRyZXNzSW5mbykge1xuICAgIHJldHVybiByZXMuY2hhbm5lbElkID09PSB0aGlzLmNoYW5uZWxJZCAmJlxuICAgICAgc2VuZGVyLmFkZHJlc3MgPT09IHRoaXMucmVtb3RlSG9zdCAmJlxuICAgICAgc2VuZGVyLnBvcnQgPT09IHRoaXMucmVtb3RlUG9ydCAmJlxuICAgICAgc2VuZGVyLmZhbWlseSA9PT0gJ0lQdjQnO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kcyBkYXRhIHRvIHRoZSBidXNcbiAgICovXG4gIHB1YmxpYyB3cml0ZShkYXRhOiBCdWZmZXIgfCBVaW50OEFycmF5IHwgbnVtYmVyW10sIGdyb3VwQWRkcmVzczogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VxbiA9IHRoaXMubmV4dFNlcW4oKTtcbiAgICBjb25zdCByZXEgPSB3cml0ZSh7XG4gICAgICBkYXRhLCBzZXFuLFxuICAgICAgY2hhbm5lbElkOiB0aGlzLmNoYW5uZWxJZCxcbiAgICAgIGRlc3Q6IGdyb3VwQWRkcmVzcyxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucW1hbmFnZXIucmVxdWVzdDxUdW5uZWxpbmdBY2s+KHRoaXMucmVtb3RlSG9zdCwgdGhpcy5yZW1vdGVQb3J0LCByZXEsIChyZXMsIHNlbmRlcikgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5zZXFuID09PSBzZXFuICYmIHRoaXMuaXNTYW1lT3JpZ2luKHJlcywgc2VuZGVyKTtcbiAgICB9KS50aGVuKChyZXMpID0+IHtcbiAgICAgIC8vIGFsd2F5cyBmcmVlIHVzZWQgc2VxdWVuY2UgbnVtYmVyXG4gICAgICB0aGlzLnNlcXVlbmNlSWRzLmRlbGV0ZShzZXFuKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwgKGVycikgPT4ge1xuICAgICAgLy8gYWx3YXlzIGZyZWUgdXNlZCBzZXF1ZW5jZSBudW1iZXJcbiAgICAgIHRoaXMuc2VxdWVuY2VJZHMuZGVsZXRlKHNlcW4pO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTZW5kcyByZWFkIHJlcXVlc3QsIHdoaWNoIHdpbGwgb25seSBiZSByZXNvbHZlZCB3aGVuIHJlc3BvbnNlIGV2ZW50IHJlY2VpdmVkXG4gICAqL1xuICBwdWJsaWMgcmVhZChncm91cEFkZHJlc3M6IG51bWJlcikge1xuICAgIGNvbnN0IHNlcW4gPSB0aGlzLm5leHRTZXFuKCk7XG4gICAgY29uc3QgcmVxID0gcmVhZCh7XG4gICAgICBzZXFuLFxuICAgICAgY2hhbm5lbElkOiB0aGlzLmNoYW5uZWxJZCxcbiAgICAgIGRlc3Q6IGdyb3VwQWRkcmVzcyxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucW1hbmFnZXIucmVxdWVzdDxHcm91cFJlc3BvbnNlPih0aGlzLnJlbW90ZUhvc3QsIHRoaXMucmVtb3RlUG9ydCwgcmVxLCAocmVzLCBzZW5kZXIpID0+IHtcbiAgICAgIHJldHVybiByZXMuZGVzdCA9PT0gZ3JvdXBBZGRyZXNzICYmXG4gICAgICAgIHJlcy5hY3Rpb24gPT09IEJ1c0V2ZW50Lkdyb3VwUmVzcG9uc2UgJiZcbiAgICAgICAgdGhpcy5pc1NhbWVPcmlnaW4ocmVzLCBzZW5kZXIpO1xuICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgLy8gYWx3YXlzIGZyZWUgdXNlZCBzZXF1ZW5jZSBudW1iZXJcbiAgICAgIHRoaXMuc2VxdWVuY2VJZHMuZGVsZXRlKHNlcW4pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAvLyBhbHdheXMgZnJlZSB1c2VkIHNlcXVlbmNlIG51bWJlclxuICAgICAgdGhpcy5zZXF1ZW5jZUlkcy5kZWxldGUoc2Vxbik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdHVubmVsaW5nXG4gICAqL1xuICBwdWJsaWMgZGlzY29ubmVjdDxUPihjYj86ICgpID0+IFQpIHtcbiAgICBjb25zdCByZXEgPSBkaXNjb25uZWN0KHRoaXMuY2hhbm5lbElkLCB0aGlzLmNvbnRyb2xQb2ludCk7XG4gICAgcmV0dXJuIHRoaXMucW1hbmFnZXIucmVxdWVzdDxEaXNjb25uZWN0UmVwb25zZT4oXG4gICAgICB0aGlzLnJlbW90ZUhvc3QsIHRoaXMucmVtb3RlUG9ydCwgcmVxLCAocmVzLCByZW1vdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lT3JpZ2luKHJlcywgcmVtb3RlKTtcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyB3aGVuIGRpc2Nvbm5lY3RpbmcsIHdlIHN0b3AgaGVhcnRiZWF0aW5nXG4gICAgICAgIHRoaXMuc3RvcEhlYXJ0YmVhdCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5kaXNjb25uZWN0KGNiKTtcbiAgICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBQaW5ncyByZW1vdGUgdG8gdmVyaWZ5IGlmIHRoZSBjaGFubmVsIGlzIHN0aWxsIGFjdGl2ZVxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0SGVhcnRiZWF0KCkge1xuICAgIGNvbnN0IHJlcSA9IHBpbmcodGhpcy5jaGFubmVsSWQsIHRoaXMuY29udHJvbFBvaW50KTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKF9yZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIC8vIGNoZWNrIGNvbm5lY3Rpb24gd2l0aCB0aGUgZmlyc3QgcGluZ1xuICAgICAgcmV0dXJuIHRoaXMucGluZyhyZXEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IHR1bm5lbCBpcyByZWFkeVxuICAgICAgICAvLyBpZiBpdCBpcyBzdWNjZXNzZnVsbCwgdGhlbiBiZWdpbiBoZWFydGJlYXQgZXZlcnkgNjBzXG4gICAgICAgIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5waW5nKHJlcSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSwgNjAwMDApO1xuICAgICAgICAvLyBsZXQgbm9kZSBleGl0IHdpdGhvdXQgd2FpdGluZyB0aGUgaW50ZXJ2YWxcbiAgICAgICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbC51bnJlZigpO1xuICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogU3RvcCBoZWFydGJlYXRcbiAgICovXG4gIHByb3RlY3RlZCBzdG9wSGVhcnRiZWF0KCkge1xuICAgIGlmICh0aGlzLmhlYXJ0YmVhdEludGVydmFsKSB7XG4gICAgICAvLyBzdG9wIGhlYXJ0YmVhdCBpZiBzdGFydGVkXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpO1xuICAgICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFNlbmQgcGluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIHBpbmcocmVxOiBCdWZmZXIpIHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5yZXF1ZXN0PENoYW5uZWw+KFxuICAgICAgdGhpcy5yZW1vdGVIb3N0LCB0aGlzLnJlbW90ZVBvcnQsIHJlcSwgKHJlcywgcmVtb3RlKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZU9yaWdpbihyZXMsIHJlbW90ZSk7XG4gICAgICB9LCA1MDAwKTtcbiAgfVxuICAvKipcbiAgICogUmVxdWVzdCB0dW5uZWxpbmdcbiAgICovXG4gIHByb3RlY3RlZCBvcGVuVHVubmVsKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyKSB7XG4gICAgY29uc3QgcSA9IG9wZW5UdW5uZWwoe1xuICAgICAgcmVjZWl2ZUF0OiB0aGlzLmNvbnRyb2xQb2ludCxcbiAgICAgIHJlc3BvbmRUbzogdGhpcy5jb250cm9sUG9pbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMucW1hbmFnZXIucmVxdWVzdDxDb25uZWN0UmVzcG9uc2VUdW5uZWw+KFxuICAgICAgaG9zdCwgcG9ydCwgcSwgKHJlcywgc2VuZGVyKSA9PiB7XG4gICAgICAgIHJldHVybiBzZW5kZXIuYWRkcmVzcyA9PT0gaG9zdCAmJlxuICAgICAgICAgIHNlbmRlci5mYW1pbHkgPT09ICdJUHY0JyAmJlxuICAgICAgICAgIHNlbmRlci5wb3J0ID09PSBwb3J0ICYmXG4gICAgICAgICAgcmVzLnNlcnZpY2VJZCA9PT0gU2VydmljZS5Db25uZWN0UmVzcG9uc2UgJiZcbiAgICAgICAgICByZXMuY29ubmVjdGlvblR5cGUgPT09IENvbm5lY3Rpb24uVHVubmVsO1xuICAgICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFN1cHBvcnRlZCBldmVudHNcbiAgICovXG4gIG9uKGV2ZW50OiAndW5wcm9jZXNzZWQnLCBjYjogKGVycjogRXJyb3IsIHJhdz86IEJ1ZmZlciwgcmVtb3RlPzogQWRkcmVzc0luZm8pID0+IHZvaWQpOiBTdWJzY3JpYmVyO1xuICBvbjxUPihldmVudDogJ3F1ZXJ5JywgY2I6IChxdWVyeTogVCwgc2VuZGVyPzogQWRkcmVzc0luZm8pID0+IHZvaWQpOiBTdWJzY3JpYmVyO1xuICBvbihldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU3Vic2NyaWJlciB7XG4gICAgcmV0dXJuIHRoaXMucW1hbmFnZXIub24oZXZlbnQsIGNiKTtcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzLWxpc3RlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2J1cy1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkNBTXNCO0FBVXRCLG1EQUV5QjtBQU96QiwyQ0FFcUI7QUFLckI7SUFTRTtRQUNFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksNEJBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFJTSxJQUFJLENBQUMsVUFBa0IsRUFBRSxVQUFrQixFQUFFLEVBQ2xELE9BQU8sRUFBRSxTQUFTLE1BQ3dDLEVBQUU7UUFDNUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSTtZQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHO2dCQUNsQixFQUFFLEVBQUUsc0JBQVU7Z0JBQ2QsUUFBUSxFQUFFLENBQWE7Z0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTthQUNoQixDQUFDO1lBQ0YsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVE7Z0JBRTNELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7Z0JBRTdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHO1lBQ1gsRUFBRSxDQUFDLENBQUMsT0FBTyxTQUFT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QUFDLENBQUM7SUFDYixDQUFDO0lBSVMsVUFBVSxDQUFDLElBQVksRUFBRSxJQUFZO1FBQzdDLE1BQU0sQ0FBQyxHQUFHLHVCQUFVLENBQUM7WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQzFCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU07WUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSTtnQkFDNUIsTUFBTSxDQUFDLE1BQU0sS0FBSyxNQUFNO2dCQUN4QixNQUFNLENBQUMsSUFBSSxLQUFLLElBQUk7Z0JBQ3BCLEdBQUcsQ0FBQyxTQUFTLEtBQUssR0FBdUI7Z0JBQ3pDLEdBQUcsQ0FBQyxjQUFjLEtBQUssQ0FBaUIsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFNRCxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQTRCO1FBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBMU9ELGtDQTBPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGRpc2Nvbm5lY3QsXG4gIHJlYWQsXG4gIG9wZW5UdW5uZWwsXG4gIHBpbmcsXG4gIHdyaXRlLFxufSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuaW1wb3J0IHtcbiAgRGlzY29ubmVjdFJlcG9uc2UsXG4gIENoYW5uZWwsXG4gIENvbm5lY3RSZXNwb25zZVR1bm5lbCxcbiAgVHVubmVsaW5nQWNrLFxuICBHcm91cFJlc3BvbnNlLFxuICBIcGFpLFxuICBTdWJzY3JpYmVyLFxufSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgUXVlcnlNYW5hZ2VyLFxufSBmcm9tICcuL3F1ZXJ5LW1hbmFnZXInO1xuaW1wb3J0IHtcbiAgU2VydmljZSxcbiAgUHJvdG9jb2wsXG4gIENvbm5lY3Rpb24sXG4gIEJ1c0V2ZW50LFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBNeUlwTnVtYmVyLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBZGRyZXNzSW5mbyxcbn0gZnJvbSAnZGdyYW0nO1xuXG5leHBvcnQgY2xhc3MgQnVzTGlzdGVuZXIge1xuICBwcm90ZWN0ZWQgc2VxdWVuY2VJZHM6IFNldDxudW1iZXI+O1xuICBwcm90ZWN0ZWQgcW1hbmFnZXI6IFF1ZXJ5TWFuYWdlcjtcbiAgcHJvdGVjdGVkIGNvbnRyb2xQb2ludDogSHBhaTtcbiAgcHJvdGVjdGVkIGhlYXJ0YmVhdEludGVydmFsOiBOb2RlSlMuVGltZXI7XG4gIHByb3RlY3RlZCBzb3VyY2U6IG51bWJlcjtcbiAgcHJvdGVjdGVkIHJlbW90ZUhvc3Q6IHN0cmluZztcbiAgcHJvdGVjdGVkIHJlbW90ZVBvcnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGNoYW5uZWxJZDogbnVtYmVyO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNlcXVlbmNlSWRzID0gbmV3IFNldCgpO1xuICAgIHRoaXMucW1hbmFnZXIgPSBuZXcgUXVlcnlNYW5hZ2VyKCk7XG4gIH1cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHR1bm5lbGluZy4gSXQgaXMgYG5ldmVyLXJlc29sdmluZ2AgcHJvbWlzZVxuICAgKi9cbiAgcHVibGljIGJpbmQocmVtb3RlSG9zdDogc3RyaW5nLCByZW1vdGVQb3J0OiBudW1iZXIsIHtcbiAgICB0aW1lb3V0LCBvbkZhaWx1cmUsXG4gIH06IHsgdGltZW91dD86IG51bWJlciwgb25GYWlsdXJlPzogKGVycjogRXJyb3IpID0+IHZvaWQgfSA9IHt9KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5jb25uZWN0KCkudGhlbigoc29jaykgPT4ge1xuICAgICAgdGhpcy5jb250cm9sUG9pbnQgPSB7XG4gICAgICAgIGlwOiBNeUlwTnVtYmVyLFxuICAgICAgICBwcm90b2NvbDogUHJvdG9jb2wuVWRwNCxcbiAgICAgICAgcG9ydDogc29jay5wb3J0LFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLm9wZW5UdW5uZWwocmVtb3RlSG9zdCwgcmVtb3RlUG9ydCkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gd2hlbiB0dW5uZWxpbmcgaXMgb3Blbiwgc3RvcmUgaW1wb3J0YW50IGluZm9cbiAgICAgICAgdGhpcy5zb3VyY2UgPSByZXNwb25zZS5rbnhBZGRyZXNzO1xuICAgICAgICB0aGlzLmNoYW5uZWxJZCA9IHJlc3BvbnNlLmNoYW5uZWxJZDtcbiAgICAgICAgdGhpcy5yZW1vdGVIb3N0ID0gcmVtb3RlSG9zdDtcbiAgICAgICAgdGhpcy5yZW1vdGVQb3J0ID0gcmVtb3RlUG9ydDtcbiAgICAgICAgLy8gYmVnaW4gaGVhcnRiZWF0IHRvIHRoZSByZW1vdGUgaG9zdFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydEhlYXJ0YmVhdCgpO1xuICAgICAgfSk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkZhaWx1cmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25GYWlsdXJlKGVycik7XG4gICAgICB9XG4gICAgICB0aGlzLnN0b3BIZWFydGJlYXQoKTtcbiAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgIC8vIGNhc3QgbnVtYmVyIHRvIHVpbnRcbiAgICAgICAgdGltZW91dCA9IHRpbWVvdXQgPj4+IDA7XG4gICAgICAgIC8vIHNjaGVkdWxlIHJldHJ5IGluIGB0aW1lb3V0YCBzZWNvbmRzXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0KS51bnJlZigpKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBjYWxsIHRvIHJlY29ubmVjdFxuICAgICAgICAgIHJldHVybiB0aGlzLmJpbmQocmVtb3RlSG9zdCwgcmVtb3RlUG9ydCwge1xuICAgICAgICAgICAgdGltZW91dCwgb25GYWlsdXJlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIHRpbWVvdXQsIHRoZW4gcHJvcGFnYXRlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiByZXR1cm5zIHByb21pc2UsIHdoaWNoIGluZGljYXRlcyBzb2NrZXQgY2xvc2VcbiAgICovXG4gIHB1YmxpYyBjb21wbGV0ZTxUPihjYj86ICgpID0+IFQpIHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5jb21wbGV0ZShjYik7XG4gIH1cbiAgcHVibGljIGlzQ29ubmVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhlYXJ0YmVhdEludGVydmFsID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiByZWFkeSByZXR1cm4gcHJvbWlzZXMsIHdoaWNoIG9ubHkgcmVzb2x2ZXMgd2hlbiB0dW5uZWwgaXMgY29ubmVjdGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZHk8VD4oY2I/OiAoKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHJlc29sdmUodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nID8gY2IoKSA6IHVuZGVmaW5lZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICAvLyB3aGVuIGNvbm5lY3RlZCwgY2xlYXIgaW50ZXJ2YWxcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnFtYW5hZ2VyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICAgIC8vIHdoZW4gZGlzY29ubmVjdCBzY2hlZHVsZWRcbiAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgICAgICByZWYudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGludGVydmFsLnVucmVmKCk7IC8vIGxldCBub2RlIGV4aXRcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGVzIG5leHQgc2VxdWVuY2UgbnVtYmVyIHRvIG51bWJlciBlYWNoIGtueCB0ZWxlZ3JhbVxuICAgKi9cbiAgcHJvdGVjdGVkIG5leHRTZXFuKCkge1xuICAgIGxldCBpZCA9IDA7XG4gICAgd2hpbGUgKHRoaXMuc2VxdWVuY2VJZHMuaGFzKGlkKSkge1xuICAgICAgaWYgKGlkKysgPj0gMHhGRikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heGltdW0gc2VxdWVuY2UgbnVtYmVyIHJlYWNoZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXF1ZW5jZUlkcy5hZGQoaWQpO1xuICAgIHJldHVybiBpZDtcbiAgfVxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHNlbmRlciB0aGUgb25lIHRoaXMgdHVubmVsaW5nIHdhcyBpbml0aWFsbHkgYm91bmQgdG9cbiAgICovXG4gIHByb3RlY3RlZCBpc1NhbWVPcmlnaW4ocmVzOiBDaGFubmVsLCBzZW5kZXI6IEFkZHJlc3NJbmZvKSB7XG4gICAgcmV0dXJuIHJlcy5jaGFubmVsSWQgPT09IHRoaXMuY2hhbm5lbElkICYmXG4gICAgICBzZW5kZXIuYWRkcmVzcyA9PT0gdGhpcy5yZW1vdGVIb3N0ICYmXG4gICAgICBzZW5kZXIucG9ydCA9PT0gdGhpcy5yZW1vdGVQb3J0ICYmXG4gICAgICBzZW5kZXIuZmFtaWx5ID09PSAnSVB2NCc7XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIGRhdGEgdG8gdGhlIGJ1c1xuICAgKi9cbiAgcHVibGljIHdyaXRlKGRhdGE6IEJ1ZmZlciB8IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSwgZ3JvdXBBZGRyZXNzOiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXFuID0gdGhpcy5uZXh0U2VxbigpO1xuICAgIGNvbnN0IHJlcSA9IHdyaXRlKHtcbiAgICAgIGRhdGEsIHNlcW4sXG4gICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgZGVzdDogZ3JvdXBBZGRyZXNzLFxuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5yZXF1ZXN0PFR1bm5lbGluZ0Fjaz4odGhpcy5yZW1vdGVIb3N0LCB0aGlzLnJlbW90ZVBvcnQsIHJlcSwgKHJlcywgc2VuZGVyKSA9PiB7XG4gICAgICByZXR1cm4gcmVzLnNlcW4gPT09IHNlcW4gJiYgdGhpcy5pc1NhbWVPcmlnaW4ocmVzLCBzZW5kZXIpO1xuICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgLy8gYWx3YXlzIGZyZWUgdXNlZCBzZXF1ZW5jZSBudW1iZXJcbiAgICAgIHRoaXMuc2VxdWVuY2VJZHMuZGVsZXRlKHNlcW4pO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAvLyBhbHdheXMgZnJlZSB1c2VkIHNlcXVlbmNlIG51bWJlclxuICAgICAgdGhpcy5zZXF1ZW5jZUlkcy5kZWxldGUoc2Vxbik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFNlbmRzIHJlYWQgcmVxdWVzdCwgd2hpY2ggd2lsbCBvbmx5IGJlIHJlc29sdmVkIHdoZW4gcmVzcG9uc2UgZXZlbnQgcmVjZWl2ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkKGdyb3VwQWRkcmVzczogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2VxbiA9IHRoaXMubmV4dFNlcW4oKTtcbiAgICBjb25zdCByZXEgPSByZWFkKHtcbiAgICAgIHNlcW4sXG4gICAgICBjaGFubmVsSWQ6IHRoaXMuY2hhbm5lbElkLFxuICAgICAgZGVzdDogZ3JvdXBBZGRyZXNzLFxuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5yZXF1ZXN0PEdyb3VwUmVzcG9uc2U+KHRoaXMucmVtb3RlSG9zdCwgdGhpcy5yZW1vdGVQb3J0LCByZXEsIChyZXMsIHNlbmRlcikgPT4ge1xuICAgICAgcmV0dXJuIHJlcy5kZXN0ID09PSBncm91cEFkZHJlc3MgJiZcbiAgICAgICAgcmVzLmFjdGlvbiA9PT0gQnVzRXZlbnQuR3JvdXBSZXNwb25zZSAmJlxuICAgICAgICB0aGlzLmlzU2FtZU9yaWdpbihyZXMsIHNlbmRlcik7XG4gICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAvLyBhbHdheXMgZnJlZSB1c2VkIHNlcXVlbmNlIG51bWJlclxuICAgICAgdGhpcy5zZXF1ZW5jZUlkcy5kZWxldGUoc2Vxbik7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIChlcnIpID0+IHtcbiAgICAgIC8vIGFsd2F5cyBmcmVlIHVzZWQgc2VxdWVuY2UgbnVtYmVyXG4gICAgICB0aGlzLnNlcXVlbmNlSWRzLmRlbGV0ZShzZXFuKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogVGVybWluYXRlcyB0dW5uZWxpbmdcbiAgICovXG4gIHB1YmxpYyBkaXNjb25uZWN0PFQ+KGNiPzogKCkgPT4gVCkge1xuICAgIGNvbnN0IHJlcSA9IGRpc2Nvbm5lY3QodGhpcy5jaGFubmVsSWQsIHRoaXMuY29udHJvbFBvaW50KTtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5yZXF1ZXN0PERpc2Nvbm5lY3RSZXBvbnNlPihcbiAgICAgIHRoaXMucmVtb3RlSG9zdCwgdGhpcy5yZW1vdGVQb3J0LCByZXEsIChyZXMsIHJlbW90ZSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWVPcmlnaW4ocmVzLCByZW1vdGUpO1xuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIHdoZW4gZGlzY29ubmVjdGluZywgd2Ugc3RvcCBoZWFydGJlYXRpbmdcbiAgICAgICAgdGhpcy5zdG9wSGVhcnRiZWF0KCk7XG4gICAgICAgIHJldHVybiB0aGlzLnFtYW5hZ2VyLmRpc2Nvbm5lY3QoY2IpO1xuICAgICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFBpbmdzIHJlbW90ZSB0byB2ZXJpZnkgaWYgdGhlIGNoYW5uZWwgaXMgc3RpbGwgYWN0aXZlXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhcnRIZWFydGJlYXQoKSB7XG4gICAgY29uc3QgcmVxID0gcGluZyh0aGlzLmNoYW5uZWxJZCwgdGhpcy5jb250cm9sUG9pbnQpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigoX3Jlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8gY2hlY2sgY29ubmVjdGlvbiB3aXRoIHRoZSBmaXJzdCBwaW5nXG4gICAgICByZXR1cm4gdGhpcy5waW5nKHJlcSkudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIGluZGljYXRlIHRoYXQgdHVubmVsIGlzIHJlYWR5XG4gICAgICAgIC8vIGlmIGl0IGlzIHN1Y2Nlc3NmdWxsLCB0aGVuIGJlZ2luIGhlYXJ0YmVhdCBldmVyeSA2MHNcbiAgICAgICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnBpbmcocmVxKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9LCA2MDAwMCk7XG4gICAgICAgIC8vIGxldCBub2RlIGV4aXQgd2l0aG91dCB3YWl0aW5nIHRoZSBpbnRlcnZhbFxuICAgICAgICB0aGlzLmhlYXJ0YmVhdEludGVydmFsLnVucmVmKCk7XG4gICAgICB9KS5jYXRjaChyZWplY3QpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBTdG9wIGhlYXJ0YmVhdFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BIZWFydGJlYXQoKSB7XG4gICAgaWYgKHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWwpIHtcbiAgICAgIC8vIHN0b3AgaGVhcnRiZWF0IGlmIHN0YXJ0ZWRcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5oZWFydGJlYXRJbnRlcnZhbCk7XG4gICAgICB0aGlzLmhlYXJ0YmVhdEludGVydmFsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2VuZCBwaW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgcGluZyhyZXE6IEJ1ZmZlcikge1xuICAgIHJldHVybiB0aGlzLnFtYW5hZ2VyLnJlcXVlc3Q8Q2hhbm5lbD4oXG4gICAgICB0aGlzLnJlbW90ZUhvc3QsIHRoaXMucmVtb3RlUG9ydCwgcmVxLCAocmVzLCByZW1vdGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lT3JpZ2luKHJlcywgcmVtb3RlKTtcbiAgICAgIH0sIDUwMDApO1xuICB9XG4gIC8qKlxuICAgKiBSZXF1ZXN0IHR1bm5lbGluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIG9wZW5UdW5uZWwoaG9zdDogc3RyaW5nLCBwb3J0OiBudW1iZXIpIHtcbiAgICBjb25zdCBxID0gb3BlblR1bm5lbCh7XG4gICAgICByZWNlaXZlQXQ6IHRoaXMuY29udHJvbFBvaW50LFxuICAgICAgcmVzcG9uZFRvOiB0aGlzLmNvbnRyb2xQb2ludCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5yZXF1ZXN0PENvbm5lY3RSZXNwb25zZVR1bm5lbD4oXG4gICAgICBob3N0LCBwb3J0LCBxLCAocmVzLCBzZW5kZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlbmRlci5hZGRyZXNzID09PSBob3N0ICYmXG4gICAgICAgICAgc2VuZGVyLmZhbWlseSA9PT0gJ0lQdjQnICYmXG4gICAgICAgICAgc2VuZGVyLnBvcnQgPT09IHBvcnQgJiZcbiAgICAgICAgICByZXMuc2VydmljZUlkID09PSBTZXJ2aWNlLkNvbm5lY3RSZXNwb25zZSAmJlxuICAgICAgICAgIHJlcy5jb25uZWN0aW9uVHlwZSA9PT0gQ29ubmVjdGlvbi5UdW5uZWw7XG4gICAgICB9KTtcbiAgfVxuICAvKipcbiAgICogU3VwcG9ydGVkIGV2ZW50c1xuICAgKi9cbiAgb24oZXZlbnQ6ICd1bnByb2Nlc3NlZCcsIGNiOiAoZXJyOiBFcnJvciwgcmF3PzogQnVmZmVyLCByZW1vdGU/OiBBZGRyZXNzSW5mbykgPT4gdm9pZCk6IFN1YnNjcmliZXI7XG4gIG9uPFQ+KGV2ZW50OiAncXVlcnknLCBjYjogKHF1ZXJ5OiBULCBzZW5kZXI/OiBBZGRyZXNzSW5mbykgPT4gdm9pZCk6IFN1YnNjcmliZXI7XG4gIG9uKGV2ZW50OiBzdHJpbmcsIGNiOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpOiBTdWJzY3JpYmVyIHtcbiAgICByZXR1cm4gdGhpcy5xbWFuYWdlci5vbihldmVudCwgY2IpO1xuICB9XG59XG4iXX0=

@@ -0,2 +1,9 @@

export * from './utils/async-socket';
export * from './utils/smart-cursor';
export * from './utils/index';
export { BusListener } from './bus-listener';
export * from './interfaces';
export * from './serializer';
export * from './deserializer';
export * from './constants';
export * from './query-manager';
export * from './bus-listener';

11

dist/index.js

@@ -5,5 +5,10 @@ "use strict";

}
__export(require("./utils/async-socket"));
__export(require("./utils/smart-cursor"));
__export(require("./utils/index"));
var bus_listener_1 = require("./bus-listener");
exports.BusListener = bus_listener_1.BusListener;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLG1DQUE4QjtBQUM5QiwrQ0FBNkM7QUFBcEMscUNBQUEsV0FBVyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleCc7XG5leHBvcnQgeyBCdXNMaXN0ZW5lciB9IGZyb20gJy4vYnVzLWxpc3RlbmVyJztcbiJdfQ==
__export(require("./serializer"));
__export(require("./deserializer"));
__export(require("./constants"));
__export(require("./query-manager"));
__export(require("./bus-listener"));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBDQUFxQztBQUNyQywwQ0FBcUM7QUFDckMsbUNBQThCO0FBRTlCLGtDQUE2QjtBQUM3QixvQ0FBK0I7QUFDL0IsaUNBQTRCO0FBQzVCLHFDQUFnQztBQUNoQyxvQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3V0aWxzL2FzeW5jLXNvY2tldCc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3NtYXJ0LWN1cnNvcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vaW50ZXJmYWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3NlcmlhbGl6ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9kZXNlcmlhbGl6ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyeS1tYW5hZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vYnVzLWxpc3RlbmVyJztcbiJdfQ==

@@ -5,5 +5,5 @@ /// <reference types="node" />

export declare class QueryManager extends AsyncSocket {
constructor();
connect(port?: number): Promise<RemoteInfo>;
request<T>(host: string, port: number, data: Buffer, select: (res: T, sender?: RemoteInfo) => boolean, timeout?: number): Promise<T>;
private process(raw, remote);
}

@@ -8,5 +8,8 @@ "use strict";

class QueryManager extends async_socket_1.AsyncSocket {
constructor() {
super();
super.on('raw', this.process.bind(this));
connect(port = 0) {
const ref = super.on('raw', this.process.bind(this));
return super.connect(port).catch((err) => {
ref.unsubscribe();
throw err;
});
}

@@ -27,3 +30,5 @@ request(host, port, data, select, timeout) {

ref.unsubscribe();
reject(tslib_1.__assign({}, new Error(`Request timeout`), { code: 'ETIMEOUT' }));
const err = new Error(`Request timeout`);
err.code = 'ETIMEOUT';
reject(err);
}, timeout > 200 ? timeout : 200).unref();

@@ -74,2 +79,2 @@ return super.send(host, port, data).catch((err) => {

exports.QueryManager = QueryManager;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWVyeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsdURBRThCO0FBQzlCLHVEQUU4QjtBQUM5QixpREFPd0I7QUFDeEIsNkNBRXNCO0FBU3RCLGtCQUEwQixTQUFRLDBCQUFXO0lBQzNDO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFFUixLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFJRCxPQUFPLENBQ0wsSUFBWSxFQUFFLElBQVksRUFBRSxJQUFZLEVBQ3hDLE1BQWdELEVBQUUsT0FBZ0I7UUFFbEUsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFJLENBQUMsT0FBTyxFQUFFLE1BQU07WUFFcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBeUIsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07Z0JBRWpFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMxQixFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQWMsQ0FBQyxDQUFDLENBQUM7d0JBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakIsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3JELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsVUFBVSxDQUFDO2dCQUNULEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxzQkFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FB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QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNwRSxDQUFDO1FBQ0gsQ0FBRTtRQUFBLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQWhGRCxvQ0FnRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBSZW1vdGVJbmZvLFxufSBmcm9tICdkZ3JhbSc7XG5pbXBvcnQge1xuICBBc3luY1NvY2tldCxcbn0gZnJvbSAnLi91dGlscy9hc3luYy1zb2NrZXQnO1xuaW1wb3J0IHtcbiAgU21hcnRDdXJzb3IsXG59IGZyb20gJy4vdXRpbHMvc21hcnQtY3Vyc29yJztcbmltcG9ydCB7XG4gIGNoYW5uZWwgYXMgcmVhZENoYW5uZWwsXG4gIGNvbm5lY3RSZXNwb25zZSxcbiAgaGVhZGVyIGFzIHJlYWRIZWFkZXIsXG4gIGhwYWksXG4gIHNlcW51bSxcbiAgdHVubmVsQ2VtaSxcbn0gZnJvbSAnLi9kZXNlcmlhbGl6ZXInO1xuaW1wb3J0IHtcbiAgYWNrLFxufSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuaW1wb3J0IHtcbiAgU2VydmljZSxcbiAgU3RhdHVzLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5cbi8qKlxuICogTWFuYWdlcyBpbyBzZXJ2ZXIgcXVlcmllcyBhbmQgdHJhY2tzIHJlc29sdXRpb24gb2YgbWFwcGFibGUgcmVxdWVzdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFF1ZXJ5TWFuYWdlciBleHRlbmRzIEFzeW5jU29ja2V0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBmb3J3YXJkIHJhdyBkYXRhIGZvciBwcm9jZXNzaW5nXG4gICAgc3VwZXIub24oJ3JhdycsIHRoaXMucHJvY2Vzcy5iaW5kKHRoaXMpKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1hcGFibGUgcmVxdWVzdCB0byB0cmFjayByZXNwb25zZXMgd2l0aCB0aW1lb3V0XG4gICAqL1xuICByZXF1ZXN0PFQ+KFxuICAgIGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBkYXRhOiBCdWZmZXIsXG4gICAgc2VsZWN0OiAocmVzOiBULCBzZW5kZXI/OiBSZW1vdGVJbmZvKSA9PiBib29sZWFuLCB0aW1lb3V0PzogbnVtYmVyLFxuICApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8ga2VlcCByZWYgdG8gdW5zdWIgdG8gYXZvaWQgYSBtZW1vcnkgbGVha1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5vbjxUICYgeyBzdGF0dXM6IG51bWJlciB9PigncXVlcnknLCAocXVlcnksIHJlbW90ZSkgPT4ge1xuICAgICAgICAvLyBtYXAgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKHNlbGVjdChxdWVyeSwgcmVtb3RlKSkge1xuICAgICAgICAgIGlmIChxdWVyeS5zdGF0dXMgPT09IFN0YXR1cy5Ob0Vycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlKHF1ZXJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUmVxdWVzdCBlcnJvciAke3F1ZXJ5LnN0YXR1c31gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIHNldCB0aW1lb3V0IGlmIG5vIHJlc3BvbnNlIHdpdGhpbiBnaXZlbiB0aW1lXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVmLnVuc3Vic2NyaWJlKCk7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgIHJlamVjdCh7IC4uLm5ldyBFcnJvcihgUmVxdWVzdCB0aW1lb3V0YCksIGNvZGU6ICdFVElNRU9VVCcgfSk7XG4gICAgICB9LCB0aW1lb3V0ID4gMjAwID8gdGltZW91dCA6IDIwMCkudW5yZWYoKTsgLy8gdW5yZWYgdGltZW91dCB0byBsZXQgbm9kZSBleGl0XG4gICAgICAvLyBtYWtlIHJlcXVlc3QgYW5kIHByb3BhZ2F0ZSBlcnJvcnNcbiAgICAgIHJldHVybiBzdXBlci5zZW5kKGhvc3QsIHBvcnQsIGRhdGEpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgcmVmLnVuc3Vic2NyaWJlKCk7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyByYXcgbWVzc2FnZXMgZnJvbSBzb2NrZXQgc3RyZWFtXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3MocmF3OiBCdWZmZXIsIHJlbW90ZTogUmVtb3RlSW5mbykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwb3MgPSBuZXcgU21hcnRDdXJzb3IoKTtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHJlYWRIZWFkZXIocmF3LCBwb3MpO1xuICAgICAgc3dpdGNoIChoZWFkZXIuc2VydmljZUlkKSB7XG4gICAgICAgIGNhc2UgU2VydmljZS5Db25uZWN0UmVzcG9uc2U6IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsID0gcmVhZENoYW5uZWwocmF3LCBwb3MpO1xuICAgICAgICAgIGNvbnN0IHNlbmRlciA9IGhwYWkocmF3LCBwb3MpO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gY29ubmVjdFJlc3BvbnNlKHJhdywgcG9zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMuZW1pdCgncXVlcnknLCB7XG4gICAgICAgICAgICAuLi5oZWFkZXIsIC4uLmNoYW5uZWwsIC4uLnNlbmRlciwgLi4ucmVzcG9uc2UsXG4gICAgICAgICAgfSwgcmVtb3RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFNlcnZpY2UuQ29ubmVjdFN0YXRlUmVzcG9uc2U6IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsID0gcmVhZENoYW5uZWwocmF3LCBwb3MpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCdxdWVyeScsIHsgLi4uY2hhbm5lbCB9LCByZW1vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU2VydmljZS5UdW5uZWxpbmdBY2s6IHtcbiAgICAgICAgICBjb25zdCBzZXFuID0gc2VxbnVtKHJhdywgcG9zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMuZW1pdCgncXVlcnknLCB7IC4uLnNlcW4gfSwgcmVtb3RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFNlcnZpY2UuVHVubmVsaW5nUmVxdWVzdDoge1xuICAgICAgICAgIGNvbnN0IHNlcW4gPSBzZXFudW0ocmF3LCBwb3MpO1xuICAgICAgICAgIGNvbnN0IGNlbWkgPSB0dW5uZWxDZW1pKHJhdywgcG9zKTtcbiAgICAgICAgICAvLyByZXBseSBhY2sgdG8gaW5kaWNhdGUgc3VjY2Vzc2Z1bCByZWNlcHRpb24gb2YgdGhlIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLnNlbmQocmVtb3RlLmFkZHJlc3MsIHJlbW90ZS5wb3J0LCBhY2soXG4gICAgICAgICAgICBzZXFuLnNlcW4sIHNlcW4uY2hhbm5lbElkLCBTdGF0dXMuTm9FcnJvcixcbiAgICAgICAgICApKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMuZW1pdCgncXVlcnknLCB7IC4uLmNlbWksIC4uLnNlcW4gfSwgcmVtb3RlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFNlcnZpY2UuRGlzY29ubmVjdFJlc3BvbnNlOiB7XG4gICAgICAgICAgY29uc3QgY2hhbm5lbCA9IHJlYWRDaGFubmVsKHJhdywgcG9zKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudHMuZW1pdCgncXVlcnknLCB7IC4uLmNoYW5uZWwgfSwgcmVtb3RlKTtcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwcm9jZXNzICR7aGVhZGVyLnNlcnZpY2VJZH1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCd1bnByb2Nlc3NlZCcsIGVyciwgcmF3LCByZW1vdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9xdWVyeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EsdURBRThCO0FBQzlCLHVEQUU4QjtBQUM5QixpREFPd0I7QUFDeEIsNkNBRXNCO0FBU3RCLGtCQUEwQixTQUFRLDBCQUFXO0lBQzNDLE9BQU8sQ0FBQyxPQUFlLENBQUM7UUFFdEIsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHO1lBQ25DLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVsQixNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUlELE9BQU8sQ0FDTCxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVksRUFDeEMsTUFBZ0QsRUFBRSxPQUFnQjtRQUVsRSxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTTtZQUVwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUF5QixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTTtnQkFFakUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBYyxDQUFDLENBQUMsQ0FBQzt3QkFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqQixDQUFDO29CQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNOLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsS0FBSyxDQUFD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LEdBQTBCLEVBQUUsQ0FBQztvQkFDaEMsTUFBTSxPQUFPLEdBQUcsc0JBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLHVCQUFPLE9BQU8sR0FBSSxNQUFNLENBQUMsQ0FBQztnQkFDM0QsQ0FBQztnQkFDRCxTQUFTLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7UUFDSCxDQUFFO1FBQUEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBdEZELG9DQXNGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJlbW90ZUluZm8sXG59IGZyb20gJ2RncmFtJztcbmltcG9ydCB7XG4gIEFzeW5jU29ja2V0LFxufSBmcm9tICcuL3V0aWxzL2FzeW5jLXNvY2tldCc7XG5pbXBvcnQge1xuICBTbWFydEN1cnNvcixcbn0gZnJvbSAnLi91dGlscy9zbWFydC1jdXJzb3InO1xuaW1wb3J0IHtcbiAgY2hhbm5lbCBhcyByZWFkQ2hhbm5lbCxcbiAgY29ubmVjdFJlc3BvbnNlLFxuICBoZWFkZXIgYXMgcmVhZEhlYWRlcixcbiAgaHBhaSxcbiAgc2VxbnVtLFxuICB0dW5uZWxDZW1pLFxufSBmcm9tICcuL2Rlc2VyaWFsaXplcic7XG5pbXBvcnQge1xuICBhY2ssXG59IGZyb20gJy4vc2VyaWFsaXplcic7XG5pbXBvcnQge1xuICBTZXJ2aWNlLFxuICBTdGF0dXMsXG59IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBNYW5hZ2VzIGlvIHNlcnZlciBxdWVyaWVzIGFuZCB0cmFja3MgcmVzb2x1dGlvbiBvZiBtYXBwYWJsZSByZXF1ZXN0c1xuICovXG5leHBvcnQgY2xhc3MgUXVlcnlNYW5hZ2VyIGV4dGVuZHMgQXN5bmNTb2NrZXQge1xuICBjb25uZWN0KHBvcnQ6IG51bWJlciA9IDAgLyogT1MgYXNzaWduZWQgcG9ydCAqLyk6IFByb21pc2U8UmVtb3RlSW5mbz4ge1xuICAgIC8vIGZvcndhcmQgcmF3IGRhdGEgZm9yIHByb2Nlc3NpbmdcbiAgICBjb25zdCByZWYgPSBzdXBlci5vbigncmF3JywgdGhpcy5wcm9jZXNzLmJpbmQodGhpcykpO1xuICAgIHJldHVybiBzdXBlci5jb25uZWN0KHBvcnQpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIHJlZi51bnN1YnNjcmliZSgpO1xuICAgICAgLy8gcHJvcGFnYXRlIGVycm9yIHRvIHRoZSBjYWxsZXJcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1hcGFibGUgcmVxdWVzdCB0byB0cmFjayByZXNwb25zZXMgd2l0aCB0aW1lb3V0XG4gICAqL1xuICByZXF1ZXN0PFQ+KFxuICAgIGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBkYXRhOiBCdWZmZXIsXG4gICAgc2VsZWN0OiAocmVzOiBULCBzZW5kZXI/OiBSZW1vdGVJbmZvKSA9PiBib29sZWFuLCB0aW1lb3V0PzogbnVtYmVyLFxuICApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgLy8ga2VlcCByZWYgdG8gdW5zdWIgdG8gYXZvaWQgYSBtZW1vcnkgbGVha1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5vbjxUICYgeyBzdGF0dXM6IG51bWJlciB9PigncXVlcnknLCAocXVlcnksIHJlbW90ZSkgPT4ge1xuICAgICAgICAvLyBtYXAgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgaWYgKHNlbGVjdChxdWVyeSwgcmVtb3RlKSkge1xuICAgICAgICAgIGlmIChxdWVyeS5zdGF0dXMgPT09IFN0YXR1cy5Ob0Vycm9yKSB7XG4gICAgICAgICAgICByZXNvbHZlKHF1ZXJ5KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihgUmVxdWVzdCBlcnJvciAke3F1ZXJ5LnN0YXR1c31gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIHNldCB0aW1lb3V0IGlmIG5vIHJlc3BvbnNlIHdpdGhpbiBnaXZlbiB0aW1lXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVmLnVuc3Vic2NyaWJlKCk7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgIGNvbnN0IGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uID0gbmV3IEVycm9yKGBSZXF1ZXN0IHRpbWVvdXRgKTtcbiAgICAgICAgZXJyLmNvZGUgPSAnRVRJTUVPVVQnO1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgIH0sIHRpbWVvdXQgPiAyMDAgPyB0aW1lb3V0IDogMjAwKS51bnJlZigpOyAvLyB1bnJlZiB0aW1lb3V0IHRvIGxldCBub2RlIGV4aXRcbiAgICAgIC8vIG1ha2UgcmVxdWVzdCBhbmQgcHJvcGFnYXRlIGVycm9yc1xuICAgICAgcmV0dXJuIHN1cGVyLnNlbmQoaG9zdCwgcG9ydCwgZGF0YSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICByZWYudW5zdWJzY3JpYmUoKTsgLy8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUHJvY2Vzc2VzIHJhdyBtZXNzYWdlcyBmcm9tIHNvY2tldCBzdHJlYW1cbiAgICovXG4gIHByaXZhdGUgcHJvY2VzcyhyYXc6IEJ1ZmZlciwgcmVtb3RlOiBSZW1vdGVJbmZvKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvcyA9IG5ldyBTbWFydEN1cnNvcigpO1xuICAgICAgY29uc3QgaGVhZGVyID0gcmVhZEhlYWRlcihyYXcsIHBvcyk7XG4gICAgICBzd2l0Y2ggKGhlYWRlci5zZXJ2aWNlSWQpIHtcbiAgICAgICAgY2FzZSBTZXJ2aWNlLkNvbm5lY3RSZXNwb25zZToge1xuICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZWFkQ2hhbm5lbChyYXcsIHBvcyk7XG4gICAgICAgICAgY29uc3Qgc2VuZGVyID0gaHBhaShyYXcsIHBvcyk7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBjb25uZWN0UmVzcG9uc2UocmF3LCBwb3MpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCdxdWVyeScsIHtcbiAgICAgICAgICAgIC4uLmhlYWRlciwgLi4uY2hhbm5lbCwgLi4uc2VuZGVyLCAuLi5yZXNwb25zZSxcbiAgICAgICAgICB9LCByZW1vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU2VydmljZS5Db25uZWN0U3RhdGVSZXNwb25zZToge1xuICAgICAgICAgIGNvbnN0IGNoYW5uZWwgPSByZWFkQ2hhbm5lbChyYXcsIHBvcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLmVtaXQoJ3F1ZXJ5JywgeyAuLi5jaGFubmVsIH0sIHJlbW90ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBTZXJ2aWNlLlR1bm5lbGluZ0Fjazoge1xuICAgICAgICAgIGNvbnN0IHNlcW4gPSBzZXFudW0ocmF3LCBwb3MpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCdxdWVyeScsIHsgLi4uc2VxbiB9LCByZW1vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU2VydmljZS5UdW5uZWxpbmdSZXF1ZXN0OiB7XG4gICAgICAgICAgY29uc3Qgc2VxbiA9IHNlcW51bShyYXcsIHBvcyk7XG4gICAgICAgICAgY29uc3QgY2VtaSA9IHR1bm5lbENlbWkocmF3LCBwb3MpO1xuICAgICAgICAgIC8vIHJlcGx5IGFjayB0byBpbmRpY2F0ZSBzdWNjZXNzZnVsIHJlY2VwdGlvbiBvZiB0aGUgbWVzc2FnZVxuICAgICAgICAgIHRoaXMuc2VuZChyZW1vdGUuYWRkcmVzcywgcmVtb3RlLnBvcnQsIGFjayhcbiAgICAgICAgICAgIHNlcW4uc2Vxbiwgc2Vxbi5jaGFubmVsSWQsIFN0YXR1cy5Ob0Vycm9yLFxuICAgICAgICAgICkpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCdxdWVyeScsIHsgLi4uY2VtaSwgLi4uc2VxbiB9LCByZW1vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgU2VydmljZS5EaXNjb25uZWN0UmVzcG9uc2U6IHtcbiAgICAgICAgICBjb25zdCBjaGFubmVsID0gcmVhZENoYW5uZWwocmF3LCBwb3MpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5lbWl0KCdxdWVyeScsIHsgLi4uY2hhbm5lbCB9LCByZW1vdGUpO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHByb2Nlc3MgJHtoZWFkZXIuc2VydmljZUlkfWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlbnRzLmVtaXQoJ3VucHJvY2Vzc2VkJywgZXJyLCByYXcsIHJlbW90ZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
/// <reference types="node" />
import { AddressInfo } from 'dgram';
import { RemoteInfo } from 'dgram';
import { EventEmitter } from 'events';

@@ -9,8 +9,9 @@ import { Subscriber } from '../interfaces';

isConnected(): boolean;
connect(port?: number): Promise<AddressInfo>;
connect(port?: number): Promise<RemoteInfo>;
complete<T>(cb?: () => T): Promise<T>;
disconnect<T>(cb?: () => T): Promise<T>;
send(host: string, port: number, data: any): Promise<void>;
on(event: 'raw', cb: (raw: Buffer, sender: AddressInfo) => void): Subscriber;
on<T>(event: string, cb: (query: T, sender: AddressInfo) => void): Subscriber;
on(event: 'disconnect', cb: () => void): Subscriber;
on(event: 'raw', cb: (raw: Buffer, sender: RemoteInfo) => void): Subscriber;
on<T>(event: string, cb: (query: T, sender: RemoteInfo) => void): Subscriber;
}

@@ -23,2 +23,3 @@ "use strict";

this.socket = undefined;
this.events.emit('disconnect');
this.events.removeAllListeners();

@@ -91,2 +92,2 @@ })

exports.AsyncSocket = AsyncSocket;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FzeW5jLXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBSWU7QUFDZixtQ0FFZ0I7QUFRaEI7SUFBQTtRQUVZLFdBQU0sR0FBaUIsSUFBSSxxQkFBWSxFQUFFLENBQUM7SUErRXRELENBQUM7SUE5RUMsV0FBVztRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFlLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFjLENBQUMsT0FBTyxFQUFFLE1BQU07WUFDOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztxQkFDL0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFNO29CQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDYixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztvQkFFeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuQyxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUc7b0JBQ2pCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDZCxDQUFDLENBQUM7cUJBQ0Qs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Q0wsV0FBVyxFQUFFLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUN6RCxDQUFDO1FBQ0osQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFqRkQsa0NBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY3JlYXRlU29ja2V0LFxuICBTb2NrZXQsXG4gIEFkZHJlc3NJbmZvLFxufSBmcm9tICdkZ3JhbSc7XG5pbXBvcnQge1xuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQge1xuICBTdWJzY3JpYmVyLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBTaW1wbGUgcHJvbWlzYWJsZSB1ZHAgc29ja2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY1NvY2tldCB7XG4gIHByaXZhdGUgc29ja2V0OiBTb2NrZXQ7XG4gIHByb3RlY3RlZCBldmVudHM6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIGNvbm5lY3QocG9ydDogbnVtYmVyID0gMCAvKiBPUyBhc3NpZ25lZCBwb3J0ICovKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEFkZHJlc3NJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5zb2NrZXQuYWRkcmVzcygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gY3JlYXRlU29ja2V0KCd1ZHA0JylcbiAgICAgICAgICAub24oJ21lc3NhZ2UnLCAocmF3OiBCdWZmZXIsIHJlbW90ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdCgncmF3JywgcmF3LCByZW1vdGUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAvLyByZW1vdmUgYWxsIHVzZWQgbGlzdGVuZXJzXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbmNlKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uY2UoJ2xpc3RlbmluZycsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb2NrZXQuYWRkcmVzcygpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXQuYmluZChwb3J0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjb21wbGV0ZTxUPihjYj86ICgpID0+IFQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiKCkgOiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGRpc2Nvbm5lY3Q8VD4oY2I/OiAoKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nID8gY2IoKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZW5kKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChkYXRhLCBwb3J0LCBob3N0LCAoZXJyLCBieXRlcykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYnl0ZXMgIT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBFeHBlY3RlZCB0byBzZW5kICR7ZGF0YS5sZW5ndGh9IGJ5dGVzLCBidXQgc2VudCAke2J5dGVzfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29ubmVjdGlvbmApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uKGV2ZW50OiAncmF3JywgY2I6IChyYXc6IEJ1ZmZlciwgc2VuZGVyOiBBZGRyZXNzSW5mbykgPT4gdm9pZCk6IFN1YnNjcmliZXI7XG4gIG9uPFQ+KGV2ZW50OiBzdHJpbmcsIGNiOiAocXVlcnk6IFQsIHNlbmRlcjogQWRkcmVzc0luZm8pID0+IHZvaWQpOiBTdWJzY3JpYmVyO1xuICBvbihldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU3Vic2NyaWJlciB7XG4gICAgaWYgKHRoaXMuZXZlbnRzLm9uKGV2ZW50LCBjYikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihldmVudCwgY2IpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc3Vic2NyaWJlYCk7XG4gICAgfVxuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc29ja2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FzeW5jLXNvY2tldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBSWU7QUFDZixtQ0FFZ0I7QUFRaEI7SUFBQTtRQUVZLFdBQU0sR0FBaUIsSUFBSSxxQkFBWSxFQUFFLENBQUM7SUFrRnRELENBQUM7SUFqRkMsV0FBVztRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFlLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksT0FBTyxDQUFhLENBQUMsT0FBTyxFQUFFLE1BQU07WUFDN0MsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztxQkFDL0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQVcsRUFBRSxNQUFNO29CQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDYixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztvQkFFeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBRS9CLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHO29C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QUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDO2dCQUNMLFdBQVcsRUFBRSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7YUFDekQsQ0FBQztRQUNKLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBcEZELGtDQW9GQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNyZWF0ZVNvY2tldCxcbiAgU29ja2V0LFxuICBSZW1vdGVJbmZvLFxufSBmcm9tICdkZ3JhbSc7XG5pbXBvcnQge1xuICBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQge1xuICBTdWJzY3JpYmVyLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuLyoqXG4gKiBTaW1wbGUgcHJvbWlzYWJsZSB1ZHAgc29ja2V0XG4gKi9cbmV4cG9ydCBjbGFzcyBBc3luY1NvY2tldCB7XG4gIHByaXZhdGUgc29ja2V0OiBTb2NrZXQ7XG4gIHByb3RlY3RlZCBldmVudHM6IEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc29ja2V0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIGNvbm5lY3QocG9ydDogbnVtYmVyID0gMCAvKiBPUyBhc3NpZ25lZCBwb3J0ICovKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFJlbW90ZUluZm8+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLnNvY2tldC5hZGRyZXNzKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBjcmVhdGVTb2NrZXQoJ3VkcDQnKVxuICAgICAgICAgIC5vbignbWVzc2FnZScsIChyYXc6IEJ1ZmZlciwgcmVtb3RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5lbWl0KCdyYXcnLCByYXcsIHJlbW90ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIGVtaXQgZGlzY29ubmVjdCBldmVudFxuICAgICAgICAgICAgdGhpcy5ldmVudHMuZW1pdCgnZGlzY29ubmVjdCcpO1xuICAgICAgICAgICAgLy8gYW5kIHJlbW92ZSBhbGwgbGlzdGVuZXJzIHRvIHByZXZlbnQgYW55IG1lbW9yeSBsZWFrXG4gICAgICAgICAgICB0aGlzLmV2ZW50cy5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbmNlKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm9uY2UoJ2xpc3RlbmluZycsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5zb2NrZXQuYWRkcmVzcygpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zb2NrZXQuYmluZChwb3J0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBjb21wbGV0ZTxUPihjYj86ICgpID0+IFQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8VD4oKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJyA/IGNiKCkgOiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGRpc2Nvbm5lY3Q8VD4oY2I/OiAoKSA9PiBUKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUodHlwZW9mIGNiID09PSAnZnVuY3Rpb24nID8gY2IoKSA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0eXBlb2YgY2IgPT09ICdmdW5jdGlvbicgPyBjYigpIDogdW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZW5kKGhvc3Q6IHN0cmluZywgcG9ydDogbnVtYmVyLCBkYXRhKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChkYXRhLCBwb3J0LCBob3N0LCAoZXJyLCBieXRlcykgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYnl0ZXMgIT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGBFeHBlY3RlZCB0byBzZW5kICR7ZGF0YS5sZW5ndGh9IGJ5dGVzLCBidXQgc2VudCAke2J5dGVzfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29ubmVjdGlvbmApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uKGV2ZW50OiAnZGlzY29ubmVjdCcsIGNiOiAoKSA9PiB2b2lkKTogU3Vic2NyaWJlcjtcbiAgb24oZXZlbnQ6ICdyYXcnLCBjYjogKHJhdzogQnVmZmVyLCBzZW5kZXI6IFJlbW90ZUluZm8pID0+IHZvaWQpOiBTdWJzY3JpYmVyO1xuICBvbjxUPihldmVudDogc3RyaW5nLCBjYjogKHF1ZXJ5OiBULCBzZW5kZXI6IFJlbW90ZUluZm8pID0+IHZvaWQpOiBTdWJzY3JpYmVyO1xuICBvbihldmVudDogc3RyaW5nLCBjYjogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkKTogU3Vic2NyaWJlciB7XG4gICAgaWYgKHRoaXMuZXZlbnRzLm9uKGV2ZW50LCBjYikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB0aGlzLmV2ZW50cy5yZW1vdmVMaXN0ZW5lcihldmVudCwgY2IpLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc3Vic2NyaWJlYCk7XG4gICAgfVxuICB9XG59XG4iXX0=
{
"name": "knx-listener",
"license": "MIT",
"version": "0.0.3",
"version": "0.0.4",
"main": "./dist/index.js",

@@ -6,0 +6,0 @@ "types": "./dist/index.d.ts",

@@ -26,3 +26,3 @@ # KNX Listener

### Write value `1` to `0/0/1` through `192.168.0.100`
### Write value **1** to **0/0/1** through **192.168.0.100**
```

@@ -43,3 +43,3 @@ Usage bin/groupswrite.js -s <ip address> -g <group address> -d <XX:XX:..>

### Read value from `0/0/1` through `192.168.0.100`
### Read value from **0/0/1** through **192.168.0.100**
```

@@ -70,4 +70,3 @@ Usage bin/groupsread.js -s <ip address> -g <group address>

() => process.exit(),
() => process.exit(),
);
() => process.exit());
};

@@ -104,12 +103,12 @@

## TODO
* Generate `JSDoc`
* Generate JSDoc
* Integration testing
* Create another npm module for data types decoding
* Create `REST API` with `express`
* Create stream using websockets to broadcast telegrams to rich web apps
* Create `ETS` project parser to get
* Create another npm module for data types encoding/decoding
## What is next?
* You may record telegrams to a database and `return last values` on demand
* You may build visualization with any `KNX gateway`
* You may delagate decoding of data to your `thick` clients (rich & mobile apps)
* You may create stream using websockets to broadcast telegrams to rich web apps
* You may create ETS project parser to get group address and store them in db
* You may create REST API with express
* You may record telegrams to a database and return last values on demand
* You may build visualization with any KNX gateway
* You may delegate decoding of data to your rich clients

@@ -112,2 +112,7 @@ import {

}, 0);
const ref = this.qmanager.on('disconnect', () => {
// when disconnect scheduled
clearInterval(interval);
ref.unsubscribe();
});
interval.unref(); // let node exit

@@ -114,0 +119,0 @@ }

@@ -0,2 +1,9 @@

export * from './utils/async-socket';
export * from './utils/smart-cursor';
export * from './utils/index';
export { BusListener } from './bus-listener';
export * from './interfaces';
export * from './serializer';
export * from './deserializer';
export * from './constants';
export * from './query-manager';
export * from './bus-listener';

@@ -30,6 +30,10 @@ import {

export class QueryManager extends AsyncSocket {
constructor() {
super();
connect(port: number = 0 /* OS assigned port */): Promise<RemoteInfo> {
// forward raw data for processing
super.on('raw', this.process.bind(this));
const ref = super.on('raw', this.process.bind(this));
return super.connect(port).catch((err) => {
ref.unsubscribe();
// propagate error to the caller
throw err;
});
}

@@ -58,3 +62,5 @@ /**

ref.unsubscribe(); // avoid memory leak
reject({ ...new Error(`Request timeout`), code: 'ETIMEOUT' });
const err: NodeJS.ErrnoException = new Error(`Request timeout`);
err.code = 'ETIMEOUT';
reject(err);
}, timeout > 200 ? timeout : 200).unref(); // unref timeout to let node exit

@@ -61,0 +67,0 @@ // make request and propagate errors

import {
createSocket,
Socket,
AddressInfo,
RemoteInfo,
} from 'dgram';

@@ -23,3 +23,3 @@ import {

connect(port: number = 0 /* OS assigned port */) {
return new Promise<AddressInfo>((resolve, reject) => {
return new Promise<RemoteInfo>((resolve, reject) => {
if (this.isConnected()) {

@@ -34,3 +34,5 @@ resolve(this.socket.address());

this.socket = undefined;
// remove all used listeners
// emit disconnect event
this.events.emit('disconnect');
// and remove all listeners to prevent any memory leak
this.events.removeAllListeners();

@@ -88,4 +90,5 @@ })

}
on(event: 'raw', cb: (raw: Buffer, sender: AddressInfo) => void): Subscriber;
on<T>(event: string, cb: (query: T, sender: AddressInfo) => void): Subscriber;
on(event: 'disconnect', cb: () => void): Subscriber;
on(event: 'raw', cb: (raw: Buffer, sender: RemoteInfo) => void): Subscriber;
on<T>(event: string, cb: (query: T, sender: RemoteInfo) => void): Subscriber;
on(event: string, cb: (...args: any[]) => void): Subscriber {

@@ -92,0 +95,0 @@ if (this.events.on(event, cb)) {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc