@senior-gestao-pessoas/hcmxt-bridge-lib 1.0.0 → 1.0.1

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.
@@ -215,7 +215,7 @@ export class XtBridgeService {
215
215
  "id": requestId,
216
216
  "parameters": [
217
217
  { "parametro": action },
218
- { "parametro": JSON.stringify(payload || {}) }
218
+ { "parametro": payload ? JSON.stringify(payload || {}) : "" }
219
219
  ],
220
220
  functionName,
221
221
  chunkSize
@@ -401,4 +401,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
401
401
  providedIn: 'root'
402
402
  }]
403
403
  }], ctorParameters: function () { return []; } });
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHQtYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvc3JjL2xpYi9zZXJ2aWNlcy94dC1icmlkZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFtRDdDLE1BQU0sT0FBTyxlQUFlO0lBRVQsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDbkQsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEUsWUFBWSxHQUFhLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTZELENBQUM7SUFDcEYsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4Qyx1Q0FBdUMsR0FBRyxpQkFBaUIsQ0FBQztJQUM1RCx3QkFBd0IsR0FBRyxLQUFLLENBQUM7SUFDakMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGVBQWU7SUFDL0MsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDeEIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBRXhEO1FBQ0UsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIscURBQXFEO1FBQ3JELElB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N0Isd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZO1FBQ1YsT0FBTztZQUNMLGVBQWUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJO1NBQzFDLENBQUM7SUFDSixDQUFDO3dHQXpiVSxlQUFlOzRHQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgWHRCcmlkZ2VSZXF1ZXN0IHtcbiAgaWQ6IHN0cmluZztcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIHBheWxvYWQ/OiBhbnk7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFh0QnJpZGdlUmVzcG9uc2Uge1xuICBpZDogc3RyaW5nO1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBkYXRhPzogYW55O1xuICBlcnJvcj86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJpZGdlQ29uZmlnIHtcbiAgLy8gTm9tZSBkYSBmdW7Dp8OjbyBubyBCYWNrLUVuZCAoZGVmYXVsdDogXCJYdEJyaWRnZVJlcXVlc3RcIilcbiAgZnVuY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8vIFRpbWVvdXQgcGFyYSByZXF1aXNpw6fDtWVzIGVtIG1zIChkZWZhdWx0OiAzMDAwMClcbiAgcmVxdWVzdFRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLy8gVGFtYW5obyBkZSBjaHVuayBwYXJhIGRhZG9zIGdyYW5kZXMgZW0gYnl0ZXMgKGRlZmF1bHQ6IDY0S0IpXG4gIGNodW5rU2l6ZT86IG51bWJlcjtcblxuICAvLyBOw7ptZXJvIG3DoXhpbW8gZGUgdGVudGF0aXZhcyBlbSBjYXNvIGRlIGZhbGhhIChkZWZhdWx0OiAzKVxuICBtYXhSZXRyaWVzPzogbnVtYmVyO1xuXG4gIC8vIERlbGF5IGVudHJlIHRlbnRhdGl2YXMgZW0gbXMgKGRlZmF1bHQ6IDEwMDAwKVxuICByZXRyeURlbGF5PzogbnVtYmVyO1xufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIC8vIENFRiBpbmplY3RlZCBmdW5jdGlvbnNcbiAgICBjZWZTZW5kVG9TZXJ2ZXI/OiAocmVxdWVzdERhdGE6IHN0cmluZykgPT4gdm9pZDtcbiAgICAvLyBBbmd1bGFyIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgIGhhbmRsZUNlZlJlc3BvbnNlPzogKHJlc3BvbnNlRGF0YTogc3RyaW5nKSA9PiB2b2lkO1xuICAgIC8vIE5hdGl2ZSBpbnZva2UgZnVuY3Rpb24gZm9yIFh0IGVtdWxhdG9yXG4gICAgaW52b2tlTmF0aXZlPzogKHR5cGU6IG51bWJlciwgcGF5bG9hZDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIC8vIEFwcCBjb21wb25lbnQgY2FsbGJhY2tzIC0gY2FsbGVkIGJ5IHNlcnZlciB3aXRoIHJlcXVlc3QgSURcbiAgICByZXNvbHZlRnVuY3Rpb24/OiAoaWQ6IHN0cmluZywgZGF0YTogYW55KSA9PiB2b2lkO1xuICAgIHJlamVjdEZ1bmN0aW9uPzogKGlkOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHZvaWQ7XG4gIH1cbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgWHRCcmlkZ2VTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlc3BvbnNlU3ViamVjdHMgPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxhbnk+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RUaW1lb3V0cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGlvblN0YXR1cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHJlcXVlc3RPcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjaHVua0J1ZmZlcnMgPSBuZXcgTWFwPHN0cmluZywgeyBjaHVua3M6IE1hcDxudW1iZXIsIHN0cmluZz47IGxhc3RTZXE/OiBudW1iZXIgfT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9YVF9CUklER0VfUkVRVUVTVF9GVU5DVElPTl9OQU1FID0gXCJYdEJyaWRnZVJlcXVlc3RcIjtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1JFUVVFU1RfVElNRV9PVVQgPSAzMDAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7IC8vIERlZmF1bHQgNjRLQlxuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9DSFVOS1MgPSAxMDAwO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTUFYX1JFVFJJRVMgPSAzO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfUkVUUllfREVMQVkgPSAxMDAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXRyeVRpbWVvdXRzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmluaXRpYWxpemVDZWZDb21tdW5pY2F0aW9uKCk7XG4gICAgdGhpcy5jaGVja0NlZkF2YWlsYWJpbGl0eSgpO1xuICAgIC8vIFJlZ2lzdHJhciBjYWxsYmFja3MgZ2xvYmFpcyBwYXJhIG8gc2Vydmlkb3IgY2hhbWFyXG4gICAgdGhpcy5yZWdpc3Rlckdsb2JhbENhbGxiYWNrcygpO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlciBnbG9iYWwgY2FsbGJhY2tzIHRoYXQgdGhlIHNlcnZlciB3aWxsIGludm9rZVxuICAgKiBTZXJ2aWRvciBjaGFtYSBkb2N1bWVudC5hcHAuZzUucmVzb2x2ZUZ1bmN0aW9uKGlkLCBkYXRhKSBvdSBkb2N1bWVudC5hcHAuZzUucmVqZWN0RnVuY3Rpb24oaWQsIGVycm9yKVxuICAgKi9cbiAgcHJpdmF0ZSByZWdpc3Rlckdsb2JhbENhbGxiYWNrcygpOiB2b2lkIHtcbiAgICAvLyBDcmlhciBlc3RydXR1cmEgZG9jdW1lbnQuYXBwLmc1IHNlIG7Do28gZXhpc3RpclxuICAgIGlmICghKGRvY3VtZW50IGFzIGFueSkuYXBwKSB7XG4gICAgICAoZG9jdW1lbnQgYXMgYW55KS5hcHAgPSB7fTtcbiAgICB9XG4gICAgaWYgKCEoZG9jdW1lbnQgYXMgYW55KS5hcHAuZzUpIHtcbiAgICAgIChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNSA9IHt9O1xuICAgIH1cblxuICAgIC8vIFNhbHZhciByZWZlcsOqbmNpYXMgb3JpZ2luYWlzIHNlIGV4aXN0aXJlbSAoZG8gQXBwQ29tcG9uZW50KVxuICAgIGNvbnN0IG9yaWdpbmFsUmVzb2x2ZSA9IChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNS5yZXNvbHZlRnVuY3Rpb247XG4gICAgY29uc3Qgb3JpZ2luYWxSZWplY3QgPSAoZG9jdW1lbnQgYXMgYW55KS5hcHAuZzUucmVqZWN0RnVuY3Rpb247XG5cbiAgICAvLyBEZWZpbmlyIG5vdmEgcmVzb2x2ZUZ1bmN0aW9uXG4gICAgKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1LnJlc29sdmVGdW5jdGlvbiA9IChpZDogc3RyaW5nLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIC8vIENoYW1hciBvcmlnaW5hbCBkbyBBcHBDb21wb25lbnQgc2UgZXhpc3RpclxuICAgICAgaWYgKG9yaWdpbmFsUmVzb2x2ZSAmJiB0eXBlb2Ygb3JpZ2luYWxSZXNvbHZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3JpZ2luYWxSZXNvbHZlLmNhbGwoZ2xvYmFsVGhpcywgaWQsIGRhdGEpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ0Vycm8gYW8gcmVjZWJlciBjb211bmljYcOnw6NvIGNvbSBvIEJhY2stRW5kLicgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2Vzc2FyIHZpYSBYdEJyaWRnZVNlcnZpY2VcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyQ2FsbGJhY2soaWQsIGRhdGEsIGZhbHNlKTtcbiAgICB9O1xuXG4gICAgLy8gRGVmaW5pciBub3ZhIHJlamVjdEZ1bmN0aW9uXG4gICAgKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1LnJlamVjdEZ1bmN0aW9uID0gKGlkOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHtcbiAgICAgIC8vIENoYW1hciBvcmlnaW5hbCBkbyBBcHBDb21wb25lbnQgc2UgZXhpc3RpclxuICAgICAgaWYgKG9yaWdpbmFsUmVqZWN0ICYmIHR5cGVvZiBvcmlnaW5hbFJlamVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG9yaWdpbmFsUmVqZWN0LmNhbGwoZ2xvYmFsVGhpcywgaWQsIGVycm9yKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6ICdFcnJvIGFvIHJlY2ViZXIgY29tdW5pY2HDp8OjbyBjb20gbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3NhciB2aWEgWHRCcmlkZ2VTZXJ2aWNlXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlckNhbGxiYWNrKGlkLCBlcnJvciwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIC8vIFRhbWLDqW0gcmVnaXN0cmFyIGVtIHdpbmRvdyBwYXJhIGNvbXBhdGliaWxpZGFkZVxuICAgIChnbG9iYWxUaGlzIGFzIGFueSkucmVzb2x2ZUZ1bmN0aW9uID0gKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1LnJlc29sdmVGdW5jdGlvbjtcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLnJlamVjdEZ1bmN0aW9uID0gKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1LnJlamVjdEZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgQ0VGIGNvbW11bmljYXRpb24gYnkgc2V0dGluZyB1cCB0aGUgZ2xvYmFsIGNhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVDZWZDb21tdW5pY2F0aW9uKCk6IHZvaWQge1xuICAgIC8vIFNldCB1cCBnbG9iYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBDRUYgd2lsbCBjYWxsIChmb3IgZGlyZWN0IHJlc3BvbnNlcylcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLmhhbmRsZUNlZlJlc3BvbnNlID0gKHJlc3BvbnNlRGF0YTogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZTogYW55ID0gSlNPTi5wYXJzZShyZXNwb25zZURhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ0ZhbGhhIGFvIHByb2Nlc3NhciByZXNwb3N0YSBkbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNhbGxiYWNrIGZyb20gc2VydmVyIHZpYSByZXNvbHZlRnVuY3Rpb24vcmVqZWN0RnVuY3Rpb25cbiAgICogUHJvY2Vzc2EgdGFudG8gcmVzcG9zdGFzIHNpbXBsZXMgcXVhbnRvIGNodW5rZWRcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU2VydmVyQ2FsbGJhY2soaWQ6IHN0cmluZywgZGF0YTogYW55LCBpc0Vycm9yOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc3ViamVjdCA9IHRoaXMucmVzcG9uc2VTdWJqZWN0cy5nZXQoaWQpO1xuXG4gICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogYEZhbGhhIGFvIHByb2Nlc3NhciByZXNwb3N0YSBkbyBCYWNrLUVuZCBjb20gSUQ6ICR7aWR9YCB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBhcnNlZERhdGEgPSBkYXRhO1xuXG4gICAgICAvLyBQYXJzZSBKU09OIHNlIGZvciBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBGYWxoYSBhbyBwcm9jZXNzYXIgcmVzcG9zdGEgZG8gQmFjay1FbmQgY29tIElEOiAke2lkfWAgfSk7XG4gICAgICAgICAgcGFyc2VkRGF0YSA9IGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzUGFyc2VkRGF0YU9iamVjdCA9IHBhcnNlZERhdGEgJiYgdHlwZW9mIHBhcnNlZERhdGEgPT09ICdvYmplY3QnO1xuICAgICAgLy8gVmVyaWZpY2FyIHNlIMOpIHJlc3Bvc3RhIGNodW5rZWQgeyBjaHVuaywgc2VxLCBsYXN0IH1cbiAgICAgIGlmIChoYXNQYXJzZWREYXRhT2JqZWN0ICYmIHBhcnNlZERhdGEuY2h1bmsgJiYgcGFyc2VkRGF0YS5zZXEgIT09IHVuZGVmaW5lZCAmJiBwYXJzZWREYXRhLmxhc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmhhbmRsZUNodW5rUmVzcG9uc2UoaWQsIHBhcnNlZERhdGEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlc3Bvc3RhIG5vcm1hbCAobsOjby1jaHVua2VkKVxuICAgICAgaWYgKGlzRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNc2cgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBkYXRhIDogSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiBgRXJybyBhbyBwcm9jZXNzYXIgcmVzcG9zdGEgZG8gQmFjay1FbmQgY29tIElEOiAke2lkfWAgfSk7XG4gICAgICAgIHN1YmplY3QuZXJyb3IobmV3IEVycm9yKGVycm9yTXNnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWJqZWN0Lm5leHQocGFyc2VkRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIHRoaXMuY2xlYW51cFJlcXVlc3QoaWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogYEVycm8gYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIEJhY2stRW5kIGNvbSBJRDogJHtpZH1gIH0pO1xuICAgICAgc3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLmNsZWFudXBSZXF1ZXN0KGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgQ0VGIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGNoZWNrQ2VmQXZhaWxhYmlsaXR5KCk6IHZvaWQge1xuICAgIGNvbnN0IGlzQXZhaWxhYmxlID0gdHlwZW9mIChnbG9iYWxUaGlzIGFzIGFueSkuY2VmU2VuZFRvU2VydmVyID09PSAnZnVuY3Rpb24nO1xuICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cy5uZXh0KGlzQXZhaWxhYmxlKTtcblxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiAnRnVuw6fDtWVzIGRlIGNvbXVuaWNhw6fDo28gY29tIG8gQmFjay1FbmQgbsOjbyBkaXNwb27DrXZlaXMuJyB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdW5pcXVlIElEIGZvciByZXF1ZXN0cyAtIGd1YXJhbnRlZWQgdW5pcXVlIGV2ZW4gd2l0aCBjb25jdXJyZW50IGNhbGxzXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlUmVxdWVzdElkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByYW5kb20gPSBjcnlwdG8ucmFuZG9tVVVJRCgpLnNwbGl0KCctJykuam9pbignJyk7XG4gICAgY29uc3QgY291bnRlciA9IHRoaXMucmVzcG9uc2VTdWJqZWN0cy5zaXplOyAvLyBBZGRpdGlvbmFsIHVuaXF1ZW5lc3NcbiAgICByZXR1cm4gYHJlcV8ke3RpbWVzdGFtcH1fJHtyYW5kb219XyR7Y291bnRlcn1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgcmVxdWVzdCB0byBzZXJ2ZXIgdmlhIENFRiAtIFRocmVhZC1zYWZlIHdpdGggdGltZW91dCBwcm90ZWN0aW9uIGFuZCByZXRyeSByZXNpbGllbmNlXG4gICAqL1xuICBzZW5kUmVxdWVzdDxUID0gYW55PihhY3Rpb246IHN0cmluZywgcGF5bG9hZD86IGFueSwgYnJpZGdlQ29uZmlnPzogQnJpZGdlQ29uZmlnKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYnJpZGdlQ29uZmlnPy5mdW5jdGlvbk5hbWUgPz8gdGhpcy5ERUZBVUxUX1hUX0JSSURHRV9SRVFVRVNUX0ZVTkNUSU9OX05BTUU7XG4gICAgY29uc3QgdGltZW91dCA9IGJyaWRnZUNvbmZpZz8ucmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5ERUZBVUxUX1JFUVVFU1RfVElNRV9PVVQ7XG4gICAgY29uc3QgY2h1bmtTaXplID0gYnJpZGdlQ29uZmlnPy5jaHVua1NpemUgPz8gdGhpcy5ERUZBVUxUX0NIVU5LX1NJWkU7XG4gICAgY29uc3QgbWF4UmV0cmllcyA9IGJyaWRnZUNvbmZpZz8ubWF4UmV0cmllcyA/PyB0aGlzLkRFRkFVTFRfTUFYX1JFVFJJRVM7XG4gICAgY29uc3QgcmV0cnlEZWxheSA9IGJyaWRnZUNvbmZpZz8ucmV0cnlEZWxheSA/PyB0aGlzLkRFRkFVTFRfUkVUUllfREVMQVk7XG5cbiAgICBjb25zdCBvdXRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxUPigpO1xuICAgIGNvbnN0IHJldHJ5S2V5ID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZCgpO1xuXG4gICAgY29uc3QgYXR0ZW1wdCA9IChhdHRlbXB0TnVtYmVyOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgIHRoaXMuZXhlY3V0ZUF0dGVtcHQ8VD4oYWN0aW9uLCBwYXlsb2FkLCBmdW5jdGlvbk5hbWUsIHRpbWVvdXQsIGNodW5rU2l6ZSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgICBvdXRlclN1YmplY3QubmV4dChkYXRhKTtcbiAgICAgICAgICBvdXRlclN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICB0aGlzLnJldHJ5VGltZW91dHMuZGVsZXRlKHJldHJ5S2V5KTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChhdHRlbXB0TnVtYmVyIDwgbWF4UmV0cmllcykge1xuICAgICAgICAgICAgY29uc3QgcmV0cnlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lb3V0cy5kZWxldGUocmV0cnlLZXkpO1xuICAgICAgICAgICAgICBhdHRlbXB0KGF0dGVtcHROdW1iZXIgKyAxKTtcbiAgICAgICAgICAgIH0sIHJldHJ5RGVsYXkpO1xuICAgICAgICAgICAgdGhpcy5yZXRyeVRpbWVvdXRzLnNldChyZXRyeUtleSwgcmV0cnlUaW1lb3V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgc3VtbWFyeTogJ0Vycm8nLFxuICAgICAgICAgICAgICBkZXRhaWw6IGBGYWxoYSBuYSBjb211bmljYcOnw6NvIGNvbSBvIEJhY2stRW5kIGFww7NzICR7bWF4UmV0cmllcyArIDF9IHRlbnRhdGl2YShzKS5gXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG91dGVyU3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgYXR0ZW1wdCgwKTtcblxuICAgIHJldHVybiBvdXRlclN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgc2luZ2xlIGF0dGVtcHQgb2YgdGhlIHJlcXVlc3RcbiAgICovXG4gIHByaXZhdGUgZXhlY3V0ZUF0dGVtcHQ8VD4oXG4gICAgYWN0aW9uOiBzdHJpbmcsXG4gICAgcGF5bG9hZDogYW55LFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHRpbWVvdXQ6IG51bWJlcixcbiAgICBjaHVua1NpemU6IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSB0aGlzLmdlbmVyYXRlUmVxdWVzdElkKCk7XG5cbiAgICAvLyBDcmVhdGUgc3ViamVjdCBmb3IgdGhpcyBzcGVjaWZpYyByZXF1ZXN0XG4gICAgY29uc3QgcmVzcG9uc2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0cy5zZXQocmVxdWVzdElkLCByZXNwb25zZVN1YmplY3QpO1xuICAgIHRoaXMucmVxdWVzdE9yZGVyLnB1c2gocmVxdWVzdElkKTtcblxuICAgIC8vIFNldCB1cCB0aW1lb3V0IHRvIHByZXZlbnQgaGFuZ2luZyByZXF1ZXN0c1xuICAgIGNvbnN0IHNldHVwVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IHRoaXMucmVzcG9uc2VTdWJqZWN0cy5nZXQocmVxdWVzdElkKTtcbiAgICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICAgIHN1YmplY3QuZXJyb3IobmV3IEVycm9yKGBSZXF1ZXN0ICR7cmVxdWVzdElkfSB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0fW1zYCkpO1xuICAgICAgICB0aGlzLmNsZWFudXBSZXF1ZXN0KHJlcXVlc3RJZCk7XG4gICAgICB9XG4gICAgfSwgdGltZW91dCk7XG5cbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5zZXQocmVxdWVzdElkLCBzZXR1cFRpbWVvdXQpO1xuXG4gICAgLy8gU2VuZCByZXF1ZXN0IHZpYSBpbnZva2VOYXRpdmUgd2l0aCBYdEJyaWRnZVJlcXVlc3QgZm9ybWF0XG4gICAgaWYgKChnbG9iYWxUaGlzIGFzIGFueSkuaW52b2tlTmF0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIFwiaWRcIjogcmVxdWVzdElkLFxuICAgICAgICAgIFwicGFyYW1ldGVyc1wiOiBbXG4gICAgICAgICAgICB7IFwicGFyYW1ldHJvXCI6IGFjdGlvbiB9LFxuICAgICAgICAgICAgeyBcInBhcmFtZXRyb1wiOiBKU09OLnN0cmluZ2lmeShwYXlsb2FkIHx8IHt9KSB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgY2h1bmtTaXplXG4gICAgICAgIH0pO1xuXG4gICAgICAgIChnbG9iYWxUaGlzIGFzIGFueSkuaW52b2tlTmF0aXZlKDAsIGAjIyMke3JlcXVlc3R9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ0ZhbGhhIGFvIGVudmlhciByZXF1aXNpw6fDo28gcGFyYSBvIEJhY2stRW5kLicgfSk7XG4gICAgICAgIHJlc3BvbnNlU3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMuY2xlYW51cFJlcXVlc3QocmVxdWVzdElkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6ICdGYWxoYSBhbyBlbnZpYXIgcmVxdWlzacOnw6NvIHBhcmEgbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0NFRiBjb21tdW5pY2F0aW9uIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJlc3BvbnNlU3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLmNsZWFudXBSZXF1ZXN0KHJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG9ic2VydmFibGUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgZmlyc3QgcmVzcG9uc2VcbiAgICByZXR1cm4gcmVzcG9uc2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB0YWtlKDEpXG4gICAgKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXNwb25zZSBmcm9tIENFRiAtIFRocmVhZC1zYWZlLCBwcmV2ZW50cyByZXNwb25zZSBtaXhpbmdcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2UocmVzcG9uc2U6IFh0QnJpZGdlUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ1Jlc3Bvc3RhIGludsOhbGlkYSBkbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFueVJlc3BvbnNlOiBhbnkgPSByZXNwb25zZSBhcyBhbnk7XG5cbiAgICAvLyBTdXBvcnRlIGEgY2h1bmtlZCByZXNwb25zZSAoZXg6IHsgaWQ/LCBjaHVuaywgc2VxLCBsYXN0IH0pXG4gICAgaWYgKGFueVJlc3BvbnNlLmNodW5rKSB7XG4gICAgICBjb25zdCByZXNvbHZlZElkID0gYW55UmVzcG9uc2UuaWQgfHwgdGhpcy5yZXF1ZXN0T3JkZXIuYXQoLTEpO1xuICAgICAgaWYgKCFyZXNvbHZlZElkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiAnRXJybyBhbyByZWNlYmVyIHJlc3Bvc3RhIGRvIEJhY2stRW5kLicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVDaHVua1Jlc3BvbnNlKHJlc29sdmVkSWQsIGFueVJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLmlkKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ1Jlc3Bvc3RhIGludsOhbGlkYSBkbyBCYWNrLUVuZCAoaWQgYXVzZW50ZSknIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnJlc3BvbnNlU3ViamVjdHMuZ2V0KHJlc3BvbnNlLmlkKTtcblxuICAgIHRoaXMuaGFuZGxlU3ViamVjdChzdWJqZWN0LCByZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1YmplY3Qoc3ViamVjdDogU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkLCByZXNwb25zZTogWHRCcmlkZ2VSZXNwb25zZSkge1xuICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICAvLyBDbGVhciB0aW1lb3V0IGZvciB0aGlzIHJlcXVlc3RcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLnJlcXVlc3RUaW1lb3V0cy5nZXQocmVzcG9uc2UuaWQpO1xuICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5kZWxldGUocmVzcG9uc2UuaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zZSBtYXRjaGVkIHRvIGNvcnJlY3QgcmVxdWVzdCBJRCAtIHNhZmUgdG8gcHJvY2Vzc1xuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3ViamVjdC5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ViamVjdC5lcnJvcihuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IgPz8gJ1NlcnZlciBlcnJvcicpKTtcbiAgICAgIH1cbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0cy5kZWxldGUocmVzcG9uc2UuaWQpO1xuICAgICAgdGhpcy5yZXF1ZXN0T3JkZXIgPSB0aGlzLnJlcXVlc3RPcmRlci5maWx0ZXIoaWQgPT4gaWQgIT09IHJlc3BvbnNlLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gbWF0Y2hpbmcgcmVxdWVzdCBJRCAtIGNvdWxkIGJlIGxhdGUvZHVwbGljYXRlIHJlc3BvbnNlXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogYFJlc3Bvc3RhIGRvIEJhY2stRW5kIHJlY2ViaWRhIHBhcmEgSUQgZGUgcmVxdWlzacOnw6NvIGRlc2NvbmhlY2lkby9jb25jbHXDrWRvOiAke3Jlc3BvbnNlLmlkfWAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaHVua2VkIHJlc3BvbnNlIGZyb20gc2VydmVyIGNhbGxiYWNrXG4gICAqIEJhY2tlbmQgY2hhbWEgcmVzb2x2ZUZ1bmN0aW9uIG3Dumx0aXBsYXMgdmV6ZXMgY29tIGNodW5rc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVDaHVua1Jlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBjaHVua1Jlc3BvbnNlOiB7IGNodW5rOiBzdHJpbmc7IHNlcTogbnVtYmVyOyBsYXN0OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5yZXNwb25zZVN1YmplY3RzLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICghc3ViamVjdCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBSZXNwb3N0YSBkbyBCYWNrLUVuZCBjb20gQ2h1bmsgcmVjZWJpZG8gcGFyYSBJRCBkZSByZXF1aXNpw6fDo28gZGVzY29uaGVjaWRvOiAke3JlcXVlc3RJZH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGJ1ZmZlciBzZSBuw6NvIGV4aXN0aXJcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5jaHVua0J1ZmZlcnMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IHsgY2h1bmtzOiBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpIH07XG4gICAgICB0aGlzLmNodW5rQnVmZmVycy5zZXQocmVxdWVzdElkLCBidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIEFybWF6ZW5hciBjaHVua1xuICAgIGJ1ZmZlci5jaHVua3Muc2V0KGNodW5rUmVzcG9uc2Uuc2VxLCBjaHVua1Jlc3BvbnNlLmNodW5rKTtcblxuICAgIGlmIChidWZmZXIuY2h1bmtzLnNpemUgPiB0aGlzLk1BWF9DSFVOS1MpIHtcbiAgICAgIHN1YmplY3QuZXJyb3IobmV3IEVycm9yKCdMaW1pdGUgZGUgY2h1bmtzIGV4Y2VkaWRvJykpO1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBSZXNwb3N0YSBkbyBCYWNrLUVuZCBhdGluZ2l1IGxpbWl0ZSBtw6F4aW1vIGRlIENodW5rIHBhcmEgSUQgZGUgcmVxdWlzacOnw6NvOiAke3JlcXVlc3RJZH1gIH0pO1xuICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1hcmNhciBzZXF1w6puY2lhIGZpbmFsIHNlIGZvciBvIMO6bHRpbW8gY2h1bmtcbiAgICBpZiAoY2h1bmtSZXNwb25zZS5sYXN0KSB7XG4gICAgICBidWZmZXIubGFzdFNlcSA9IGNodW5rUmVzcG9uc2Uuc2VxO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBzZSB0b2RvcyBvcyBjaHVua3MgZm9yYW0gcmVjZWJpZG9zXG4gICAgaWYgKGJ1ZmZlci5sYXN0U2VxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIERldGVjdGFyIHNlIMOpIDAtYmFzZWQgb3UgMS1iYXNlZFxuICAgICAgY29uc3QgaXNaZXJvQmFzZWQgPSBidWZmZXIuY2h1bmtzLmhhcygwKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU2l6ZSA9IGlzWmVyb0Jhc2VkID8gYnVmZmVyLmxhc3RTZXEgKyAxIDogYnVmZmVyLmxhc3RTZXE7XG5cbiAgICAgIC8vIEFndWFyZGFyIHRvZG9zIG9zIGNodW5rc1xuICAgICAgaWYgKGJ1ZmZlci5jaHVua3Muc2l6ZSAhPT0gZXhwZWN0ZWRTaXplKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVG9kb3Mgb3MgY2h1bmtzIHJlY2ViaWRvcyAtIG1vbnRhciByZXNwb3N0YSBmaW5hbFxuICAgICAgY29uc3QgY2h1bmtzT3JkZXJlZCA9IEFycmF5LmZyb20oYnVmZmVyLmNodW5rcy5lbnRyaWVzKCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSlcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5WzFdKVxuICAgICAgICAuam9pbignJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2h1bmtzT3JkZXJlZCk7XG4gICAgICAgIHN1YmplY3QubmV4dChwYXJzZWQpO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYW51cFJlcXVlc3QocmVxdWVzdElkKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiBgRmFsaGEgYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIEJhY2stRW5kIHBhcmEgJHtyZXF1ZXN0SWR9YCB9KTtcbiAgICAgICAgc3ViamVjdC5lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBjaHVua2VkIHJlc3BvbnNlOiAke2Vycm9yfWApKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXF1ZXN0IHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZXNwb25zZVN1YmplY3RzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgIHRoaXMucmVxdWVzdE9yZGVyID0gdGhpcy5yZXF1ZXN0T3JkZXIuZmlsdGVyKGlkID0+IGlkICE9PSByZXF1ZXN0SWQpO1xuICAgIHRoaXMuY2h1bmtCdWZmZXJzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMucmVxdWVzdFRpbWVvdXRzLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5kZWxldGUocmVxdWVzdElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbm5lY3Rpb24gc3RhdHVzIGFzIG9ic2VydmFibGVcbiAgICovXG4gIGdldENvbm5lY3Rpb25TdGF0dXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblN0YXR1cy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBDRUYgaXMgY3VycmVudGx5IGF2YWlsYWJsZVxuICAgKi9cbiAgaXNDZWZBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblN0YXR1cy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIHBlbmRpbmcgcmVxdWVzdHMgKGNhbGwgb24gY29tcG9uZW50IGRlc3Ryb3kpXG4gICAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0cy5mb3JFYWNoKChzdWJqZWN0KSA9PiB7XG4gICAgICBzdWJqZWN0LmVycm9yKG5ldyBFcnJvcignU2VydmljZSBjbGVhbnVwIC0gcmVxdWVzdCBjYW5jZWxsZWQnKSk7XG4gICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNwb25zZVN1YmplY3RzLmNsZWFyKCk7XG5cbiAgICAvLyBDbGVhciBhbGwgdGltZW91dHNcbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5mb3JFYWNoKHRpbWVvdXQgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5jbGVhcigpO1xuXG4gICAgLy8gQ2xlYXIgcGVuZGluZyByZXRyaWVzXG4gICAgdGhpcy5yZXRyeVRpbWVvdXRzLmZvckVhY2godGltZW91dCA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xuICAgIHRoaXMucmV0cnlUaW1lb3V0cy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWJ1ZyBpbmZvIGFib3V0IHBlbmRpbmcgcmVxdWVzdHNcbiAgICovXG4gIGdldERlYnVnSW5mbygpOiB7IHBlbmRpbmdSZXF1ZXN0czogbnVtYmVyOyBhY3RpdmVUaW1lb3V0czogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nUmVxdWVzdHM6IHRoaXMucmVzcG9uc2VTdWJqZWN0cy5zaXplLFxuICAgICAgYWN0aXZlVGltZW91dHM6IHRoaXMucmVxdWVzdFRpbWVvdXRzLnNpemVcbiAgICB9O1xuICB9XG59XG4iXX0=
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHQtYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvc3JjL2xpYi9zZXJ2aWNlcy94dC1icmlkZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQWMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFtRDdDLE1BQU0sT0FBTyxlQUFlO0lBRVQsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7SUFDbkQsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDekMsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDaEUsWUFBWSxHQUFhLEVBQUUsQ0FBQztJQUNuQixZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQTZELENBQUM7SUFDcEYsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4Qyx1Q0FBdUMsR0FBRyxpQkFBaUIsQ0FBQztJQUM1RCx3QkFBd0IsR0FBRyxLQUFLLENBQUM7SUFDakMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLGVBQWU7SUFDL0MsVUFBVSxHQUFHLElBQUksQ0FBQztJQUNsQixtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDeEIsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQzVCLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBRXhEO1FBQ0UsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIscURBQXFEO1FBQ3JELElB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RCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTdCLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWTtRQUNWLE9BQU87WUFDTCxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUk7WUFDM0MsY0FBYyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSTtTQUMxQyxDQUFDO0lBQ0osQ0FBQzt3R0F6YlUsZUFBZTs0R0FBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIFh0QnJpZGdlUmVxdWVzdCB7XG4gIGlkOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBwYXlsb2FkPzogYW55O1xuICB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBYdEJyaWRnZVJlc3BvbnNlIHtcbiAgaWQ6IHN0cmluZztcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgZGF0YT86IGFueTtcbiAgZXJyb3I/OiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyaWRnZUNvbmZpZyB7XG4gIC8vIE5vbWUgZGEgZnVuw6fDo28gbm8gQmFjay1FbmQgKGRlZmF1bHQ6IFwiWHRCcmlkZ2VSZXF1ZXN0XCIpXG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcblxuICAvLyBUaW1lb3V0IHBhcmEgcmVxdWlzacOnw7VlcyBlbSBtcyAoZGVmYXVsdDogMzAwMDApXG4gIHJlcXVlc3RUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8vIFRhbWFuaG8gZGUgY2h1bmsgcGFyYSBkYWRvcyBncmFuZGVzIGVtIGJ5dGVzIChkZWZhdWx0OiA2NEtCKVxuICBjaHVua1NpemU/OiBudW1iZXI7XG5cbiAgLy8gTsO6bWVybyBtw6F4aW1vIGRlIHRlbnRhdGl2YXMgZW0gY2FzbyBkZSBmYWxoYSAoZGVmYXVsdDogMylcbiAgbWF4UmV0cmllcz86IG51bWJlcjtcblxuICAvLyBEZWxheSBlbnRyZSB0ZW50YXRpdmFzIGVtIG1zIChkZWZhdWx0OiAxMDAwMClcbiAgcmV0cnlEZWxheT86IG51bWJlcjtcbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgV2luZG93IHtcbiAgICAvLyBDRUYgaW5qZWN0ZWQgZnVuY3Rpb25zXG4gICAgY2VmU2VuZFRvU2VydmVyPzogKHJlcXVlc3REYXRhOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgLy8gQW5ndWxhciBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICBoYW5kbGVDZWZSZXNwb25zZT86IChyZXNwb25zZURhdGE6IHN0cmluZykgPT4gdm9pZDtcbiAgICAvLyBOYXRpdmUgaW52b2tlIGZ1bmN0aW9uIGZvciBYdCBlbXVsYXRvclxuICAgIGludm9rZU5hdGl2ZT86ICh0eXBlOiBudW1iZXIsIHBheWxvYWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgICAvLyBBcHAgY29tcG9uZW50IGNhbGxiYWNrcyAtIGNhbGxlZCBieSBzZXJ2ZXIgd2l0aCByZXF1ZXN0IElEXG4gICAgcmVzb2x2ZUZ1bmN0aW9uPzogKGlkOiBzdHJpbmcsIGRhdGE6IGFueSkgPT4gdm9pZDtcbiAgICByZWplY3RGdW5jdGlvbj86IChpZDogc3RyaW5nLCBlcnJvcjogYW55KSA9PiB2b2lkO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFh0QnJpZGdlU2VydmljZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNwb25zZVN1YmplY3RzID0gbmV3IE1hcDxzdHJpbmcsIFN1YmplY3Q8YW55Pj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0VGltZW91dHMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25TdGF0dXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSByZXF1ZXN0T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgY2h1bmtCdWZmZXJzID0gbmV3IE1hcDxzdHJpbmcsIHsgY2h1bmtzOiBNYXA8bnVtYmVyLCBzdHJpbmc+OyBsYXN0U2VxPzogbnVtYmVyIH0+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfWFRfQlJJREdFX1JFUVVFU1RfRlVOQ1RJT05fTkFNRSA9IFwiWHRCcmlkZ2VSZXF1ZXN0XCI7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9SRVFVRVNUX1RJTUVfT1VUID0gMzAwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9DSFVOS19TSVpFID0gNjQgKiAxMDI0OyAvLyBEZWZhdWx0IDY0S0JcbiAgcHJpdmF0ZSByZWFkb25seSBNQVhfQ0hVTktTID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX01BWF9SRVRSSUVTID0gMztcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1JFVFJZX0RFTEFZID0gMTAwMDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0cnlUaW1lb3V0cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQ2VmQ29tbXVuaWNhdGlvbigpO1xuICAgIHRoaXMuY2hlY2tDZWZBdmFpbGFiaWxpdHkoKTtcbiAgICAvLyBSZWdpc3RyYXIgY2FsbGJhY2tzIGdsb2JhaXMgcGFyYSBvIHNlcnZpZG9yIGNoYW1hclxuICAgIHRoaXMucmVnaXN0ZXJHbG9iYWxDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXIgZ2xvYmFsIGNhbGxiYWNrcyB0aGF0IHRoZSBzZXJ2ZXIgd2lsbCBpbnZva2VcbiAgICogU2Vydmlkb3IgY2hhbWEgZG9jdW1lbnQuYXBwLmc1LnJlc29sdmVGdW5jdGlvbihpZCwgZGF0YSkgb3UgZG9jdW1lbnQuYXBwLmc1LnJlamVjdEZ1bmN0aW9uKGlkLCBlcnJvcilcbiAgICovXG4gIHByaXZhdGUgcmVnaXN0ZXJHbG9iYWxDYWxsYmFja3MoKTogdm9pZCB7XG4gICAgLy8gQ3JpYXIgZXN0cnV0dXJhIGRvY3VtZW50LmFwcC5nNSBzZSBuw6NvIGV4aXN0aXJcbiAgICBpZiAoIShkb2N1bWVudCBhcyBhbnkpLmFwcCkge1xuICAgICAgKGRvY3VtZW50IGFzIGFueSkuYXBwID0ge307XG4gICAgfVxuICAgIGlmICghKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1KSB7XG4gICAgICAoZG9jdW1lbnQgYXMgYW55KS5hcHAuZzUgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBTYWx2YXIgcmVmZXLDqm5jaWFzIG9yaWdpbmFpcyBzZSBleGlzdGlyZW0gKGRvIEFwcENvbXBvbmVudClcbiAgICBjb25zdCBvcmlnaW5hbFJlc29sdmUgPSAoZG9jdW1lbnQgYXMgYW55KS5hcHAuZzUucmVzb2x2ZUZ1bmN0aW9uO1xuICAgIGNvbnN0IG9yaWdpbmFsUmVqZWN0ID0gKGRvY3VtZW50IGFzIGFueSkuYXBwLmc1LnJlamVjdEZ1bmN0aW9uO1xuXG4gICAgLy8gRGVmaW5pciBub3ZhIHJlc29sdmVGdW5jdGlvblxuICAgIChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNS5yZXNvbHZlRnVuY3Rpb24gPSAoaWQ6IHN0cmluZywgZGF0YTogYW55KSA9PiB7XG4gICAgICAvLyBDaGFtYXIgb3JpZ2luYWwgZG8gQXBwQ29tcG9uZW50IHNlIGV4aXN0aXJcbiAgICAgIGlmIChvcmlnaW5hbFJlc29sdmUgJiYgdHlwZW9mIG9yaWdpbmFsUmVzb2x2ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIG9yaWdpbmFsUmVzb2x2ZS5jYWxsKGdsb2JhbFRoaXMsIGlkLCBkYXRhKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6ICdFcnJvIGFvIHJlY2ViZXIgY29tdW5pY2HDp8OjbyBjb20gbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3NhciB2aWEgWHRCcmlkZ2VTZXJ2aWNlXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlckNhbGxiYWNrKGlkLCBkYXRhLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIC8vIERlZmluaXIgbm92YSByZWplY3RGdW5jdGlvblxuICAgIChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNS5yZWplY3RGdW5jdGlvbiA9IChpZDogc3RyaW5nLCBlcnJvcjogYW55KSA9PiB7XG4gICAgICAvLyBDaGFtYXIgb3JpZ2luYWwgZG8gQXBwQ29tcG9uZW50IHNlIGV4aXN0aXJcbiAgICAgIGlmIChvcmlnaW5hbFJlamVjdCAmJiB0eXBlb2Ygb3JpZ2luYWxSZWplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBvcmlnaW5hbFJlamVjdC5jYWxsKGdsb2JhbFRoaXMsIGlkLCBlcnJvcik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiAnRXJybyBhbyByZWNlYmVyIGNvbXVuaWNhw6fDo28gY29tIG8gQmFjay1FbmQuJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzYXIgdmlhIFh0QnJpZGdlU2VydmljZVxuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJDYWxsYmFjayhpZCwgZXJyb3IsIHRydWUpO1xuICAgIH07XG5cbiAgICAvLyBUYW1iw6ltIHJlZ2lzdHJhciBlbSB3aW5kb3cgcGFyYSBjb21wYXRpYmlsaWRhZGVcbiAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLnJlc29sdmVGdW5jdGlvbiA9IChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNS5yZXNvbHZlRnVuY3Rpb247XG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KS5yZWplY3RGdW5jdGlvbiA9IChkb2N1bWVudCBhcyBhbnkpLmFwcC5nNS5yZWplY3RGdW5jdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIENFRiBjb21tdW5pY2F0aW9uIGJ5IHNldHRpbmcgdXAgdGhlIGdsb2JhbCBjYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ2VmQ29tbXVuaWNhdGlvbigpOiB2b2lkIHtcbiAgICAvLyBTZXQgdXAgZ2xvYmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgQ0VGIHdpbGwgY2FsbCAoZm9yIGRpcmVjdCByZXNwb25zZXMpXG4gICAgKGdsb2JhbFRoaXMgYXMgYW55KS5oYW5kbGVDZWZSZXNwb25zZSA9IChyZXNwb25zZURhdGE6IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IEpTT04ucGFyc2UocmVzcG9uc2VEYXRhKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6ICdGYWxoYSBhbyBwcm9jZXNzYXIgcmVzcG9zdGEgZG8gQmFjay1FbmQuJyB9KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjYWxsYmFjayBmcm9tIHNlcnZlciB2aWEgcmVzb2x2ZUZ1bmN0aW9uL3JlamVjdEZ1bmN0aW9uXG4gICAqIFByb2Nlc3NhIHRhbnRvIHJlc3Bvc3RhcyBzaW1wbGVzIHF1YW50byBjaHVua2VkXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVNlcnZlckNhbGxiYWNrKGlkOiBzdHJpbmcsIGRhdGE6IGFueSwgaXNFcnJvcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnJlc3BvbnNlU3ViamVjdHMuZ2V0KGlkKTtcblxuICAgIGlmICghc3ViamVjdCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBGYWxoYSBhbyBwcm9jZXNzYXIgcmVzcG9zdGEgZG8gQmFjay1FbmQgY29tIElEOiAke2lkfWAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXJzZWREYXRhID0gZGF0YTtcblxuICAgICAgLy8gUGFyc2UgSlNPTiBzZSBmb3Igc3RyaW5nXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiBgRmFsaGEgYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIEJhY2stRW5kIGNvbSBJRDogJHtpZH1gIH0pO1xuICAgICAgICAgIHBhcnNlZERhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc1BhcnNlZERhdGFPYmplY3QgPSBwYXJzZWREYXRhICYmIHR5cGVvZiBwYXJzZWREYXRhID09PSAnb2JqZWN0JztcbiAgICAgIC8vIFZlcmlmaWNhciBzZSDDqSByZXNwb3N0YSBjaHVua2VkIHsgY2h1bmssIHNlcSwgbGFzdCB9XG4gICAgICBpZiAoaGFzUGFyc2VkRGF0YU9iamVjdCAmJiBwYXJzZWREYXRhLmNodW5rICYmIHBhcnNlZERhdGEuc2VxICE9PSB1bmRlZmluZWQgJiYgcGFyc2VkRGF0YS5sYXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaHVua1Jlc3BvbnNlKGlkLCBwYXJzZWREYXRhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb3N0YSBub3JtYWwgKG7Do28tY2h1bmtlZClcbiAgICAgIGlmIChpc0Vycm9yKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTXNnID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZGF0YSA6IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogYEVycm8gYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIEJhY2stRW5kIGNvbSBJRDogJHtpZH1gIH0pO1xuICAgICAgICBzdWJqZWN0LmVycm9yKG5ldyBFcnJvcihlcnJvck1zZykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ViamVjdC5uZXh0KHBhcnNlZERhdGEpO1xuICAgICAgfVxuXG4gICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICB0aGlzLmNsZWFudXBSZXF1ZXN0KGlkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBFcnJvIGFvIHByb2Nlc3NhciByZXNwb3N0YSBkbyBCYWNrLUVuZCBjb20gSUQ6ICR7aWR9YCB9KTtcbiAgICAgIHN1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIENFRiBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja0NlZkF2YWlsYWJpbGl0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0F2YWlsYWJsZSA9IHR5cGVvZiAoZ2xvYmFsVGhpcyBhcyBhbnkpLmNlZlNlbmRUb1NlcnZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMubmV4dChpc0F2YWlsYWJsZSk7XG5cbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ0Z1bsOnw7VlcyBkZSBjb211bmljYcOnw6NvIGNvbSBvIEJhY2stRW5kIG7Do28gZGlzcG9uw612ZWlzLicgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBJRCBmb3IgcmVxdWVzdHMgLSBndWFyYW50ZWVkIHVuaXF1ZSBldmVuIHdpdGggY29uY3VycmVudCBjYWxsc1xuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmFuZG9tID0gY3J5cHRvLnJhbmRvbVVVSUQoKS5zcGxpdCgnLScpLmpvaW4oJycpO1xuICAgIGNvbnN0IGNvdW50ZXIgPSB0aGlzLnJlc3BvbnNlU3ViamVjdHMuc2l6ZTsgLy8gQWRkaXRpb25hbCB1bmlxdWVuZXNzXG4gICAgcmV0dXJuIGByZXFfJHt0aW1lc3RhbXB9XyR7cmFuZG9tfV8ke2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIHJlcXVlc3QgdG8gc2VydmVyIHZpYSBDRUYgLSBUaHJlYWQtc2FmZSB3aXRoIHRpbWVvdXQgcHJvdGVjdGlvbiBhbmQgcmV0cnkgcmVzaWxpZW5jZVxuICAgKi9cbiAgc2VuZFJlcXVlc3Q8VCA9IGFueT4oYWN0aW9uOiBzdHJpbmcsIHBheWxvYWQ/OiBhbnksIGJyaWRnZUNvbmZpZz86IEJyaWRnZUNvbmZpZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGJyaWRnZUNvbmZpZz8uZnVuY3Rpb25OYW1lID8/IHRoaXMuREVGQVVMVF9YVF9CUklER0VfUkVRVUVTVF9GVU5DVElPTl9OQU1FO1xuICAgIGNvbnN0IHRpbWVvdXQgPSBicmlkZ2VDb25maWc/LnJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuREVGQVVMVF9SRVFVRVNUX1RJTUVfT1VUO1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGJyaWRnZUNvbmZpZz8uY2h1bmtTaXplID8/IHRoaXMuREVGQVVMVF9DSFVOS19TSVpFO1xuICAgIGNvbnN0IG1heFJldHJpZXMgPSBicmlkZ2VDb25maWc/Lm1heFJldHJpZXMgPz8gdGhpcy5ERUZBVUxUX01BWF9SRVRSSUVTO1xuICAgIGNvbnN0IHJldHJ5RGVsYXkgPSBicmlkZ2VDb25maWc/LnJldHJ5RGVsYXkgPz8gdGhpcy5ERUZBVUxUX1JFVFJZX0RFTEFZO1xuXG4gICAgY29uc3Qgb3V0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8VD4oKTtcbiAgICBjb25zdCByZXRyeUtleSA9IHRoaXMuZ2VuZXJhdGVSZXF1ZXN0SWQoKTtcblxuICAgIGNvbnN0IGF0dGVtcHQgPSAoYXR0ZW1wdE51bWJlcjogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLmV4ZWN1dGVBdHRlbXB0PFQ+KGFjdGlvbiwgcGF5bG9hZCwgZnVuY3Rpb25OYW1lLCB0aW1lb3V0LCBjaHVua1NpemUpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgb3V0ZXJTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICAgICAgb3V0ZXJTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgdGhpcy5yZXRyeVRpbWVvdXRzLmRlbGV0ZShyZXRyeUtleSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBpZiAoYXR0ZW1wdE51bWJlciA8IG1heFJldHJpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJldHJ5VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnJldHJ5VGltZW91dHMuZGVsZXRlKHJldHJ5S2V5KTtcbiAgICAgICAgICAgICAgYXR0ZW1wdChhdHRlbXB0TnVtYmVyICsgMSk7XG4gICAgICAgICAgICB9LCByZXRyeURlbGF5KTtcbiAgICAgICAgICAgIHRoaXMucmV0cnlUaW1lb3V0cy5zZXQocmV0cnlLZXksIHJldHJ5VGltZW91dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtcbiAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHN1bW1hcnk6ICdFcnJvJyxcbiAgICAgICAgICAgICAgZGV0YWlsOiBgRmFsaGEgbmEgY29tdW5pY2HDp8OjbyBjb20gbyBCYWNrLUVuZCBhcMOzcyAke21heFJldHJpZXMgKyAxfSB0ZW50YXRpdmEocykuYFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvdXRlclN1YmplY3QuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGF0dGVtcHQoMCk7XG5cbiAgICByZXR1cm4gb3V0ZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIHNpbmdsZSBhdHRlbXB0IG9mIHRoZSByZXF1ZXN0XG4gICAqL1xuICBwcml2YXRlIGV4ZWN1dGVBdHRlbXB0PFQ+KFxuICAgIGFjdGlvbjogc3RyaW5nLFxuICAgIHBheWxvYWQ6IGFueSxcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgY2h1bmtTaXplOiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5nZW5lcmF0ZVJlcXVlc3RJZCgpO1xuXG4gICAgLy8gQ3JlYXRlIHN1YmplY3QgZm9yIHRoaXMgc3BlY2lmaWMgcmVxdWVzdFxuICAgIGNvbnN0IHJlc3BvbnNlU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICB0aGlzLnJlc3BvbnNlU3ViamVjdHMuc2V0KHJlcXVlc3RJZCwgcmVzcG9uc2VTdWJqZWN0KTtcbiAgICB0aGlzLnJlcXVlc3RPcmRlci5wdXNoKHJlcXVlc3RJZCk7XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dCB0byBwcmV2ZW50IGhhbmdpbmcgcmVxdWVzdHNcbiAgICBjb25zdCBzZXR1cFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnJlc3BvbnNlU3ViamVjdHMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgICBpZiAoc3ViamVjdCkge1xuICAgICAgICBzdWJqZWN0LmVycm9yKG5ldyBFcnJvcihgUmVxdWVzdCAke3JlcXVlc3RJZH0gdGltZWQgb3V0IGFmdGVyICR7dGltZW91dH1tc2ApKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH0sIHRpbWVvdXQpO1xuXG4gICAgdGhpcy5yZXF1ZXN0VGltZW91dHMuc2V0KHJlcXVlc3RJZCwgc2V0dXBUaW1lb3V0KTtcblxuICAgIC8vIFNlbmQgcmVxdWVzdCB2aWEgaW52b2tlTmF0aXZlIHdpdGggWHRCcmlkZ2VSZXF1ZXN0IGZvcm1hdFxuICAgIGlmICgoZ2xvYmFsVGhpcyBhcyBhbnkpLmludm9rZU5hdGl2ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBcImlkXCI6IHJlcXVlc3RJZCxcbiAgICAgICAgICBcInBhcmFtZXRlcnNcIjogW1xuICAgICAgICAgICAgeyBcInBhcmFtZXRyb1wiOiBhY3Rpb24gfSxcbiAgICAgICAgICAgIHsgXCJwYXJhbWV0cm9cIjogcGF5bG9hZCA/IEpTT04uc3RyaW5naWZ5KHBheWxvYWQgfHwge30pIDogXCJcIiB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgY2h1bmtTaXplXG4gICAgICAgIH0pO1xuXG4gICAgICAgIChnbG9iYWxUaGlzIGFzIGFueSkuaW52b2tlTmF0aXZlKDAsIGAjIyMke3JlcXVlc3R9YCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ0ZhbGhhIGFvIGVudmlhciByZXF1aXNpw6fDo28gcGFyYSBvIEJhY2stRW5kLicgfSk7XG4gICAgICAgIHJlc3BvbnNlU3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMuY2xlYW51cFJlcXVlc3QocmVxdWVzdElkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6ICdGYWxoYSBhbyBlbnZpYXIgcmVxdWlzacOnw6NvIHBhcmEgbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ0NFRiBjb21tdW5pY2F0aW9uIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgIHJlc3BvbnNlU3ViamVjdC5lcnJvcihlcnJvcik7XG4gICAgICB0aGlzLmNsZWFudXBSZXF1ZXN0KHJlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIG9ic2VydmFibGUgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgZmlyc3QgcmVzcG9uc2VcbiAgICByZXR1cm4gcmVzcG9uc2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICB0YWtlKDEpXG4gICAgKSBhcyBPYnNlcnZhYmxlPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZXNwb25zZSBmcm9tIENFRiAtIFRocmVhZC1zYWZlLCBwcmV2ZW50cyByZXNwb25zZSBtaXhpbmdcbiAgICovXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2UocmVzcG9uc2U6IFh0QnJpZGdlUmVzcG9uc2UpOiB2b2lkIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ1Jlc3Bvc3RhIGludsOhbGlkYSBkbyBCYWNrLUVuZC4nIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFueVJlc3BvbnNlOiBhbnkgPSByZXNwb25zZSBhcyBhbnk7XG5cbiAgICAvLyBTdXBvcnRlIGEgY2h1bmtlZCByZXNwb25zZSAoZXg6IHsgaWQ/LCBjaHVuaywgc2VxLCBsYXN0IH0pXG4gICAgaWYgKGFueVJlc3BvbnNlLmNodW5rKSB7XG4gICAgICBjb25zdCByZXNvbHZlZElkID0gYW55UmVzcG9uc2UuaWQgfHwgdGhpcy5yZXF1ZXN0T3JkZXIuYXQoLTEpO1xuICAgICAgaWYgKCFyZXNvbHZlZElkKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiAnRXJybyBhbyByZWNlYmVyIHJlc3Bvc3RhIGRvIEJhY2stRW5kLicgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5oYW5kbGVDaHVua1Jlc3BvbnNlKHJlc29sdmVkSWQsIGFueVJlc3BvbnNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3BvbnNlLmlkKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogJ1Jlc3Bvc3RhIGludsOhbGlkYSBkbyBCYWNrLUVuZCAoaWQgYXVzZW50ZSknIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLnJlc3BvbnNlU3ViamVjdHMuZ2V0KHJlc3BvbnNlLmlkKTtcblxuICAgIHRoaXMuaGFuZGxlU3ViamVjdChzdWJqZWN0LCByZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1YmplY3Qoc3ViamVjdDogU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkLCByZXNwb25zZTogWHRCcmlkZ2VSZXNwb25zZSkge1xuICAgIGlmIChzdWJqZWN0KSB7XG4gICAgICAvLyBDbGVhciB0aW1lb3V0IGZvciB0aGlzIHJlcXVlc3RcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLnJlcXVlc3RUaW1lb3V0cy5nZXQocmVzcG9uc2UuaWQpO1xuICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5kZWxldGUocmVzcG9uc2UuaWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXNwb25zZSBtYXRjaGVkIHRvIGNvcnJlY3QgcmVxdWVzdCBJRCAtIHNhZmUgdG8gcHJvY2Vzc1xuICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgc3ViamVjdC5uZXh0KHJlc3BvbnNlLmRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3ViamVjdC5lcnJvcihuZXcgRXJyb3IocmVzcG9uc2UuZXJyb3IgPz8gJ1NlcnZlciBlcnJvcicpKTtcbiAgICAgIH1cbiAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0cy5kZWxldGUocmVzcG9uc2UuaWQpO1xuICAgICAgdGhpcy5yZXF1ZXN0T3JkZXIgPSB0aGlzLnJlcXVlc3RPcmRlci5maWx0ZXIoaWQgPT4gaWQgIT09IHJlc3BvbnNlLmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gbWF0Y2hpbmcgcmVxdWVzdCBJRCAtIGNvdWxkIGJlIGxhdGUvZHVwbGljYXRlIHJlc3BvbnNlXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJybycsIGRldGFpbDogYFJlc3Bvc3RhIGRvIEJhY2stRW5kIHJlY2ViaWRhIHBhcmEgSUQgZGUgcmVxdWlzacOnw6NvIGRlc2NvbmhlY2lkby9jb25jbHXDrWRvOiAke3Jlc3BvbnNlLmlkfWAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaHVua2VkIHJlc3BvbnNlIGZyb20gc2VydmVyIGNhbGxiYWNrXG4gICAqIEJhY2tlbmQgY2hhbWEgcmVzb2x2ZUZ1bmN0aW9uIG3Dumx0aXBsYXMgdmV6ZXMgY29tIGNodW5rc1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVDaHVua1Jlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBjaHVua1Jlc3BvbnNlOiB7IGNodW5rOiBzdHJpbmc7IHNlcTogbnVtYmVyOyBsYXN0OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5yZXNwb25zZVN1YmplY3RzLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICghc3ViamVjdCkge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBSZXNwb3N0YSBkbyBCYWNrLUVuZCBjb20gQ2h1bmsgcmVjZWJpZG8gcGFyYSBJRCBkZSByZXF1aXNpw6fDo28gZGVzY29uaGVjaWRvOiAke3JlcXVlc3RJZH1gIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGJ1ZmZlciBzZSBuw6NvIGV4aXN0aXJcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5jaHVua0J1ZmZlcnMuZ2V0KHJlcXVlc3RJZCk7XG4gICAgaWYgKCFidWZmZXIpIHtcbiAgICAgIGJ1ZmZlciA9IHsgY2h1bmtzOiBuZXcgTWFwPG51bWJlciwgc3RyaW5nPigpIH07XG4gICAgICB0aGlzLmNodW5rQnVmZmVycy5zZXQocmVxdWVzdElkLCBidWZmZXIpO1xuICAgIH1cblxuICAgIC8vIEFybWF6ZW5hciBjaHVua1xuICAgIGJ1ZmZlci5jaHVua3Muc2V0KGNodW5rUmVzcG9uc2Uuc2VxLCBjaHVua1Jlc3BvbnNlLmNodW5rKTtcblxuICAgIGlmIChidWZmZXIuY2h1bmtzLnNpemUgPiB0aGlzLk1BWF9DSFVOS1MpIHtcbiAgICAgIHN1YmplY3QuZXJyb3IobmV3IEVycm9yKCdMaW1pdGUgZGUgY2h1bmtzIGV4Y2VkaWRvJykpO1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgc3VtbWFyeTogJ0Vycm8nLCBkZXRhaWw6IGBSZXNwb3N0YSBkbyBCYWNrLUVuZCBhdGluZ2l1IGxpbWl0ZSBtw6F4aW1vIGRlIENodW5rIHBhcmEgSUQgZGUgcmVxdWlzacOnw6NvOiAke3JlcXVlc3RJZH1gIH0pO1xuICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE1hcmNhciBzZXF1w6puY2lhIGZpbmFsIHNlIGZvciBvIMO6bHRpbW8gY2h1bmtcbiAgICBpZiAoY2h1bmtSZXNwb25zZS5sYXN0KSB7XG4gICAgICBidWZmZXIubGFzdFNlcSA9IGNodW5rUmVzcG9uc2Uuc2VxO1xuICAgIH1cblxuICAgIC8vIFZlcmlmaWNhciBzZSB0b2RvcyBvcyBjaHVua3MgZm9yYW0gcmVjZWJpZG9zXG4gICAgaWYgKGJ1ZmZlci5sYXN0U2VxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIERldGVjdGFyIHNlIMOpIDAtYmFzZWQgb3UgMS1iYXNlZFxuICAgICAgY29uc3QgaXNaZXJvQmFzZWQgPSBidWZmZXIuY2h1bmtzLmhhcygwKTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkU2l6ZSA9IGlzWmVyb0Jhc2VkID8gYnVmZmVyLmxhc3RTZXEgKyAxIDogYnVmZmVyLmxhc3RTZXE7XG5cbiAgICAgIC8vIEFndWFyZGFyIHRvZG9zIG9zIGNodW5rc1xuICAgICAgaWYgKGJ1ZmZlci5jaHVua3Muc2l6ZSAhPT0gZXhwZWN0ZWRTaXplKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVG9kb3Mgb3MgY2h1bmtzIHJlY2ViaWRvcyAtIG1vbnRhciByZXNwb3N0YSBmaW5hbFxuICAgICAgY29uc3QgY2h1bmtzT3JkZXJlZCA9IEFycmF5LmZyb20oYnVmZmVyLmNodW5rcy5lbnRyaWVzKCkpXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSlcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5WzFdKVxuICAgICAgICAuam9pbignJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2h1bmtzT3JkZXJlZCk7XG4gICAgICAgIHN1YmplY3QubmV4dChwYXJzZWQpO1xuICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuY2xlYW51cFJlcXVlc3QocmVxdWVzdElkKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvJywgZGV0YWlsOiBgRmFsaGEgYW8gcHJvY2Vzc2FyIHJlc3Bvc3RhIGRvIEJhY2stRW5kIHBhcmEgJHtyZXF1ZXN0SWR9YCB9KTtcbiAgICAgICAgc3ViamVjdC5lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBjaHVua2VkIHJlc3BvbnNlOiAke2Vycm9yfWApKTtcbiAgICAgICAgdGhpcy5jbGVhbnVwUmVxdWVzdChyZXF1ZXN0SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCByZXF1ZXN0IHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZXNwb25zZVN1YmplY3RzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuICAgIHRoaXMucmVxdWVzdE9yZGVyID0gdGhpcy5yZXF1ZXN0T3JkZXIuZmlsdGVyKGlkID0+IGlkICE9PSByZXF1ZXN0SWQpO1xuICAgIHRoaXMuY2h1bmtCdWZmZXJzLmRlbGV0ZShyZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMucmVxdWVzdFRpbWVvdXRzLmdldChyZXF1ZXN0SWQpO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5kZWxldGUocmVxdWVzdElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbm5lY3Rpb24gc3RhdHVzIGFzIG9ic2VydmFibGVcbiAgICovXG4gIGdldENvbm5lY3Rpb25TdGF0dXMoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblN0YXR1cy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBDRUYgaXMgY3VycmVudGx5IGF2YWlsYWJsZVxuICAgKi9cbiAgaXNDZWZBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblN0YXR1cy52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbnVwIHBlbmRpbmcgcmVxdWVzdHMgKGNhbGwgb24gY29tcG9uZW50IGRlc3Ryb3kpXG4gICAqL1xuICBjbGVhbnVwKCk6IHZvaWQge1xuICAgIHRoaXMucmVzcG9uc2VTdWJqZWN0cy5mb3JFYWNoKChzdWJqZWN0KSA9PiB7XG4gICAgICBzdWJqZWN0LmVycm9yKG5ldyBFcnJvcignU2VydmljZSBjbGVhbnVwIC0gcmVxdWVzdCBjYW5jZWxsZWQnKSk7XG4gICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSk7XG4gICAgdGhpcy5yZXNwb25zZVN1YmplY3RzLmNsZWFyKCk7XG5cbiAgICAvLyBDbGVhciBhbGwgdGltZW91dHNcbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5mb3JFYWNoKHRpbWVvdXQgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXQpKTtcbiAgICB0aGlzLnJlcXVlc3RUaW1lb3V0cy5jbGVhcigpO1xuXG4gICAgLy8gQ2xlYXIgcGVuZGluZyByZXRyaWVzXG4gICAgdGhpcy5yZXRyeVRpbWVvdXRzLmZvckVhY2godGltZW91dCA9PiBjbGVhclRpbWVvdXQodGltZW91dCkpO1xuICAgIHRoaXMucmV0cnlUaW1lb3V0cy5jbGVhcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWJ1ZyBpbmZvIGFib3V0IHBlbmRpbmcgcmVxdWVzdHNcbiAgICovXG4gIGdldERlYnVnSW5mbygpOiB7IHBlbmRpbmdSZXF1ZXN0czogbnVtYmVyOyBhY3RpdmVUaW1lb3V0czogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBwZW5kaW5nUmVxdWVzdHM6IHRoaXMucmVzcG9uc2VTdWJqZWN0cy5zaXplLFxuICAgICAgYWN0aXZlVGltZW91dHM6IHRoaXMucmVxdWVzdFRpbWVvdXRzLnNpemVcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -216,7 +216,7 @@ class XtBridgeService {
216
216
  "id": requestId,
217
217
  "parameters": [
218
218
  { "parametro": action },
219
- { "parametro": JSON.stringify(payload || {}) }
219
+ { "parametro": payload ? JSON.stringify(payload || {}) : "" }
220
220
  ],
221
221
  functionName,
222
222
  chunkSize
@@ -1 +1 @@
1
- {"version":3,"file":"senior-gestao-pessoas-hcmxt-bridge-lib.mjs","sources":["../../lib/src/lib/services/xt-bridge.service.ts","../../lib/src/public-api.ts","../../lib/src/senior-gestao-pessoas-hcmxt-bridge-lib.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { Observable, Subject, BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { MessageService } from 'primeng/api';\n\nexport interface XtBridgeRequest {\n id: string;\n action: string;\n payload?: any;\n timestamp: number;\n}\n\nexport interface XtBridgeResponse {\n id: string;\n success: boolean;\n data?: any;\n error?: string;\n timestamp: number;\n}\n\nexport interface BridgeConfig {\n // Nome da função no Back-End (default: \"XtBridgeRequest\")\n functionName?: string;\n\n // Timeout para requisições em ms (default: 30000)\n requestTimeout?: number;\n\n // Tamanho de chunk para dados grandes em bytes (default: 64KB)\n chunkSize?: number;\n\n // Número máximo de tentativas em caso de falha (default: 3)\n maxRetries?: number;\n\n // Delay entre tentativas em ms (default: 10000)\n retryDelay?: number;\n}\n\ndeclare global {\n interface Window {\n // CEF injected functions\n cefSendToServer?: (requestData: string) => void;\n // Angular callback functions\n handleCefResponse?: (responseData: string) => void;\n // Native invoke function for Xt emulator\n invokeNative?: (type: number, payload: string) => void;\n // App component callbacks - called by server with request ID\n resolveFunction?: (id: string, data: any) => void;\n rejectFunction?: (id: string, error: any) => void;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtBridgeService {\n\n private readonly responseSubjects = new Map<string, Subject<any>>();\n private readonly requestTimeouts = new Map<string, any>();\n private readonly connectionStatus = new BehaviorSubject<boolean>(false);\n private requestOrder: string[] = [];\n private readonly chunkBuffers = new Map<string, { chunks: Map<number, string>; lastSeq?: number }>();\n private readonly messageService = inject(MessageService);\n private readonly DEFAULT_XT_BRIDGE_REQUEST_FUNCTION_NAME = \"XtBridgeRequest\";\n private readonly DEFAULT_REQUEST_TIME_OUT = 30000;\n private readonly DEFAULT_CHUNK_SIZE = 64 * 1024; // Default 64KB\n private readonly MAX_CHUNKS = 1000;\n private readonly DEFAULT_MAX_RETRIES = 3;\n private readonly DEFAULT_RETRY_DELAY = 10000;\n private readonly retryTimeouts = new Map<string, any>();\n\n constructor() {\n this.initializeCefCommunication();\n this.checkCefAvailability();\n // Registrar callbacks globais para o servidor chamar\n this.registerGlobalCallbacks();\n }\n /**\n * Register global callbacks that the server will invoke\n * Servidor chama document.app.g5.resolveFunction(id, data) ou document.app.g5.rejectFunction(id, error)\n */\n private registerGlobalCallbacks(): void {\n // Criar estrutura document.app.g5 se não existir\n if (!(document as any).app) {\n (document as any).app = {};\n }\n if (!(document as any).app.g5) {\n (document as any).app.g5 = {};\n }\n\n // Salvar referências originais se existirem (do AppComponent)\n const originalResolve = (document as any).app.g5.resolveFunction;\n const originalReject = (document as any).app.g5.rejectFunction;\n\n // Definir nova resolveFunction\n (document as any).app.g5.resolveFunction = (id: string, data: any) => {\n // Chamar original do AppComponent se existir\n if (originalResolve && typeof originalResolve === 'function') {\n try {\n originalResolve.call(globalThis, id, data);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber comunicação com o Back-End.' });\n }\n }\n\n // Processar via XtBridgeService\n this.handleServerCallback(id, data, false);\n };\n\n // Definir nova rejectFunction\n (document as any).app.g5.rejectFunction = (id: string, error: any) => {\n // Chamar original do AppComponent se existir\n if (originalReject && typeof originalReject === 'function') {\n try {\n originalReject.call(globalThis, id, error);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber comunicação com o Back-End.' });\n }\n }\n\n // Processar via XtBridgeService\n this.handleServerCallback(id, error, true);\n };\n\n // Também registrar em window para compatibilidade\n (globalThis as any).resolveFunction = (document as any).app.g5.resolveFunction;\n (globalThis as any).rejectFunction = (document as any).app.g5.rejectFunction;\n }\n\n /**\n * Initialize CEF communication by setting up the global callback\n */\n private initializeCefCommunication(): void {\n // Set up global callback function that CEF will call (for direct responses)\n (globalThis as any).handleCefResponse = (responseData: string) => {\n try {\n const response: any = JSON.parse(responseData);\n this.handleResponse(response);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao processar resposta do Back-End.' });\n }\n };\n }\n\n /**\n * Handle callback from server via resolveFunction/rejectFunction\n * Processa tanto respostas simples quanto chunked\n */\n private handleServerCallback(id: string, data: any, isError: boolean): void {\n const subject = this.responseSubjects.get(id);\n\n if (!subject) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End com ID: ${id}` });\n return;\n }\n\n try {\n let parsedData = data;\n\n // Parse JSON se for string\n if (typeof data === 'string') {\n try {\n parsedData = JSON.parse(data);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End com ID: ${id}` });\n parsedData = data;\n }\n }\n\n const hasParsedDataObject = parsedData && typeof parsedData === 'object';\n // Verificar se é resposta chunked { chunk, seq, last }\n if (hasParsedDataObject && parsedData.chunk && parsedData.seq !== undefined && parsedData.last !== undefined) {\n this.handleChunkResponse(id, parsedData);\n return;\n }\n\n // Resposta normal (não-chunked)\n if (isError) {\n const errorMsg = typeof data === 'string' ? data : JSON.stringify(data);\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Erro ao processar resposta do Back-End com ID: ${id}` });\n subject.error(new Error(errorMsg));\n } else {\n subject.next(parsedData);\n }\n\n subject.complete();\n this.cleanupRequest(id);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Erro ao processar resposta do Back-End com ID: ${id}` });\n subject.error(error);\n this.cleanupRequest(id);\n }\n }\n\n /**\n * Check if CEF functions are available\n */\n private checkCefAvailability(): void {\n const isAvailable = typeof (globalThis as any).cefSendToServer === 'function';\n this.connectionStatus.next(isAvailable);\n\n if (!isAvailable) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Funções de comunicação com o Back-End não disponíveis.' });\n }\n }\n\n /**\n * Generate unique ID for requests - guaranteed unique even with concurrent calls\n */\n private generateRequestId(): string {\n const timestamp = Date.now();\n const random = crypto.randomUUID().split('-').join('');\n const counter = this.responseSubjects.size; // Additional uniqueness\n return `req_${timestamp}_${random}_${counter}`;\n }\n\n /**\n * Send request to server via CEF - Thread-safe with timeout protection and retry resilience\n */\n sendRequest<T = any>(action: string, payload?: any, bridgeConfig?: BridgeConfig): Observable<T> {\n const functionName = bridgeConfig?.functionName ?? this.DEFAULT_XT_BRIDGE_REQUEST_FUNCTION_NAME;\n const timeout = bridgeConfig?.requestTimeout ?? this.DEFAULT_REQUEST_TIME_OUT;\n const chunkSize = bridgeConfig?.chunkSize ?? this.DEFAULT_CHUNK_SIZE;\n const maxRetries = bridgeConfig?.maxRetries ?? this.DEFAULT_MAX_RETRIES;\n const retryDelay = bridgeConfig?.retryDelay ?? this.DEFAULT_RETRY_DELAY;\n\n const outerSubject = new Subject<T>();\n const retryKey = this.generateRequestId();\n\n const attempt = (attemptNumber: number): void => {\n this.executeAttempt<T>(action, payload, functionName, timeout, chunkSize).subscribe({\n next: (data) => {\n outerSubject.next(data);\n outerSubject.complete();\n this.retryTimeouts.delete(retryKey);\n },\n error: (error) => {\n if (attemptNumber < maxRetries) {\n const retryTimeout = setTimeout(() => {\n this.retryTimeouts.delete(retryKey);\n attempt(attemptNumber + 1);\n }, retryDelay);\n this.retryTimeouts.set(retryKey, retryTimeout);\n } else {\n this.messageService.add({\n severity: 'error',\n summary: 'Erro',\n detail: `Falha na comunicação com o Back-End após ${maxRetries + 1} tentativa(s).`\n });\n outerSubject.error(error);\n }\n }\n });\n };\n\n attempt(0);\n\n return outerSubject.asObservable().pipe(take(1));\n }\n\n /**\n * Execute a single attempt of the request\n */\n private executeAttempt<T>(\n action: string,\n payload: any,\n functionName: string,\n timeout: number,\n chunkSize: number\n ): Observable<T> {\n const requestId = this.generateRequestId();\n\n // Create subject for this specific request\n const responseSubject = new Subject<any>();\n this.responseSubjects.set(requestId, responseSubject);\n this.requestOrder.push(requestId);\n\n // Set up timeout to prevent hanging requests\n const setupTimeout = setTimeout(() => {\n const subject = this.responseSubjects.get(requestId);\n if (subject) {\n subject.error(new Error(`Request ${requestId} timed out after ${timeout}ms`));\n this.cleanupRequest(requestId);\n }\n }, timeout);\n\n this.requestTimeouts.set(requestId, setupTimeout);\n\n // Send request via invokeNative with XtBridgeRequest format\n if ((globalThis as any).invokeNative) {\n try {\n const request = JSON.stringify({\n \"id\": requestId,\n \"parameters\": [\n { \"parametro\": action },\n { \"parametro\": JSON.stringify(payload || {}) }\n ],\n functionName,\n chunkSize\n });\n\n (globalThis as any).invokeNative(0, `###${request}`);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao enviar requisição para o Back-End.' });\n responseSubject.error(error);\n this.cleanupRequest(requestId);\n }\n } else {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao enviar requisição para o Back-End.' });\n const error = new Error('CEF communication not available');\n responseSubject.error(error);\n this.cleanupRequest(requestId);\n }\n\n // Return observable that completes after first response\n return responseSubject.asObservable().pipe(\n take(1)\n ) as Observable<T>;\n }\n\n /**\n * Handle response from CEF - Thread-safe, prevents response mixing\n */\n private handleResponse(response: XtBridgeResponse): void {\n if (!response) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Resposta inválida do Back-End.' });\n return;\n }\n\n const anyResponse: any = response as any;\n\n // Suporte a chunked response (ex: { id?, chunk, seq, last })\n if (anyResponse.chunk) {\n const resolvedId = anyResponse.id || this.requestOrder.at(-1);\n if (!resolvedId) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber resposta do Back-End.' });\n return;\n }\n\n this.handleChunkResponse(resolvedId, anyResponse);\n return;\n }\n\n if (!response.id) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Resposta inválida do Back-End (id ausente)' });\n return;\n }\n\n const subject = this.responseSubjects.get(response.id);\n\n this.handleSubject(subject, response);\n }\n\n private handleSubject(subject: Subject<any> | undefined, response: XtBridgeResponse) {\n if (subject) {\n // Clear timeout for this request\n const timeout = this.requestTimeouts.get(response.id);\n if (timeout) {\n clearTimeout(timeout);\n this.requestTimeouts.delete(response.id);\n }\n\n // Response matched to correct request ID - safe to process\n if (response.success) {\n subject.next(response.data);\n } else {\n subject.error(new Error(response.error ?? 'Server error'));\n }\n subject.complete();\n this.responseSubjects.delete(response.id);\n this.requestOrder = this.requestOrder.filter(id => id !== response.id);\n } else {\n // No matching request ID - could be late/duplicate response\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End recebida para ID de requisição desconhecido/concluído: ${response.id}` });\n }\n }\n\n /**\n * Handle chunked response from server callback\n * Backend chama resolveFunction múltiplas vezes com chunks\n */\n private handleChunkResponse(requestId: string, chunkResponse: { chunk: string; seq: number; last: boolean }): void {\n const subject = this.responseSubjects.get(requestId);\n if (!subject) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End com Chunk recebido para ID de requisição desconhecido: ${requestId}` });\n return;\n }\n\n // Inicializar buffer se não existir\n let buffer = this.chunkBuffers.get(requestId);\n if (!buffer) {\n buffer = { chunks: new Map<number, string>() };\n this.chunkBuffers.set(requestId, buffer);\n }\n\n // Armazenar chunk\n buffer.chunks.set(chunkResponse.seq, chunkResponse.chunk);\n\n if (buffer.chunks.size > this.MAX_CHUNKS) {\n subject.error(new Error('Limite de chunks excedido'));\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End atingiu limite máximo de Chunk para ID de requisição: ${requestId}` });\n this.cleanupRequest(requestId);\n return;\n }\n\n // Marcar sequência final se for o último chunk\n if (chunkResponse.last) {\n buffer.lastSeq = chunkResponse.seq;\n }\n\n // Verificar se todos os chunks foram recebidos\n if (buffer.lastSeq !== undefined) {\n // Detectar se é 0-based ou 1-based\n const isZeroBased = buffer.chunks.has(0);\n const expectedSize = isZeroBased ? buffer.lastSeq + 1 : buffer.lastSeq;\n\n // Aguardar todos os chunks\n if (buffer.chunks.size !== expectedSize) {\n return;\n }\n\n // Todos os chunks recebidos - montar resposta final\n const chunksOrdered = Array.from(buffer.chunks.entries())\n .sort((a, b) => a[0] - b[0])\n .map((entry) => entry[1])\n .join('');\n\n try {\n const parsed = JSON.parse(chunksOrdered);\n subject.next(parsed);\n subject.complete();\n this.cleanupRequest(requestId);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End para ${requestId}` });\n subject.error(new Error(`Failed to parse chunked response: ${error}`));\n this.cleanupRequest(requestId);\n }\n }\n }\n\n /**\n * Clean up request tracking\n */\n private cleanupRequest(requestId: string): void {\n this.responseSubjects.delete(requestId);\n this.requestOrder = this.requestOrder.filter(id => id !== requestId);\n this.chunkBuffers.delete(requestId);\n\n const timeout = this.requestTimeouts.get(requestId);\n if (timeout) {\n clearTimeout(timeout);\n this.requestTimeouts.delete(requestId);\n }\n }\n\n /**\n * Get connection status as observable\n */\n getConnectionStatus(): Observable<boolean> {\n return this.connectionStatus.asObservable();\n }\n\n /**\n * Check if CEF is currently available\n */\n isCefAvailable(): boolean {\n return this.connectionStatus.value;\n }\n\n /**\n * Cleanup pending requests (call on component destroy)\n */\n cleanup(): void {\n this.responseSubjects.forEach((subject) => {\n subject.error(new Error('Service cleanup - request cancelled'));\n subject.complete();\n });\n this.responseSubjects.clear();\n\n // Clear all timeouts\n this.requestTimeouts.forEach(timeout => clearTimeout(timeout));\n this.requestTimeouts.clear();\n\n // Clear pending retries\n this.retryTimeouts.forEach(timeout => clearTimeout(timeout));\n this.retryTimeouts.clear();\n }\n\n /**\n * Get debug info about pending requests\n */\n getDebugInfo(): { pendingRequests: number; activeTimeouts: number } {\n return {\n pendingRequests: this.responseSubjects.size,\n activeTimeouts: this.requestTimeouts.size\n };\n }\n}\n","/*\n * Public API Surface of hcmxt-bridge-lib\n */\n\n// Services\nexport { XtBridgeService, XtBridgeRequest, XtBridgeResponse, BridgeConfig } from './lib/services/xt-bridge.service';\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":"senior-gestao-pessoas-hcmxt-bridge-lib.mjs","sources":["../../lib/src/lib/services/xt-bridge.service.ts","../../lib/src/public-api.ts","../../lib/src/senior-gestao-pessoas-hcmxt-bridge-lib.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { Observable, Subject, BehaviorSubject } from 'rxjs';\nimport { take } from 'rxjs/operators';\nimport { MessageService } from 'primeng/api';\n\nexport interface XtBridgeRequest {\n id: string;\n action: string;\n payload?: any;\n timestamp: number;\n}\n\nexport interface XtBridgeResponse {\n id: string;\n success: boolean;\n data?: any;\n error?: string;\n timestamp: number;\n}\n\nexport interface BridgeConfig {\n // Nome da função no Back-End (default: \"XtBridgeRequest\")\n functionName?: string;\n\n // Timeout para requisições em ms (default: 30000)\n requestTimeout?: number;\n\n // Tamanho de chunk para dados grandes em bytes (default: 64KB)\n chunkSize?: number;\n\n // Número máximo de tentativas em caso de falha (default: 3)\n maxRetries?: number;\n\n // Delay entre tentativas em ms (default: 10000)\n retryDelay?: number;\n}\n\ndeclare global {\n interface Window {\n // CEF injected functions\n cefSendToServer?: (requestData: string) => void;\n // Angular callback functions\n handleCefResponse?: (responseData: string) => void;\n // Native invoke function for Xt emulator\n invokeNative?: (type: number, payload: string) => void;\n // App component callbacks - called by server with request ID\n resolveFunction?: (id: string, data: any) => void;\n rejectFunction?: (id: string, error: any) => void;\n }\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtBridgeService {\n\n private readonly responseSubjects = new Map<string, Subject<any>>();\n private readonly requestTimeouts = new Map<string, any>();\n private readonly connectionStatus = new BehaviorSubject<boolean>(false);\n private requestOrder: string[] = [];\n private readonly chunkBuffers = new Map<string, { chunks: Map<number, string>; lastSeq?: number }>();\n private readonly messageService = inject(MessageService);\n private readonly DEFAULT_XT_BRIDGE_REQUEST_FUNCTION_NAME = \"XtBridgeRequest\";\n private readonly DEFAULT_REQUEST_TIME_OUT = 30000;\n private readonly DEFAULT_CHUNK_SIZE = 64 * 1024; // Default 64KB\n private readonly MAX_CHUNKS = 1000;\n private readonly DEFAULT_MAX_RETRIES = 3;\n private readonly DEFAULT_RETRY_DELAY = 10000;\n private readonly retryTimeouts = new Map<string, any>();\n\n constructor() {\n this.initializeCefCommunication();\n this.checkCefAvailability();\n // Registrar callbacks globais para o servidor chamar\n this.registerGlobalCallbacks();\n }\n /**\n * Register global callbacks that the server will invoke\n * Servidor chama document.app.g5.resolveFunction(id, data) ou document.app.g5.rejectFunction(id, error)\n */\n private registerGlobalCallbacks(): void {\n // Criar estrutura document.app.g5 se não existir\n if (!(document as any).app) {\n (document as any).app = {};\n }\n if (!(document as any).app.g5) {\n (document as any).app.g5 = {};\n }\n\n // Salvar referências originais se existirem (do AppComponent)\n const originalResolve = (document as any).app.g5.resolveFunction;\n const originalReject = (document as any).app.g5.rejectFunction;\n\n // Definir nova resolveFunction\n (document as any).app.g5.resolveFunction = (id: string, data: any) => {\n // Chamar original do AppComponent se existir\n if (originalResolve && typeof originalResolve === 'function') {\n try {\n originalResolve.call(globalThis, id, data);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber comunicação com o Back-End.' });\n }\n }\n\n // Processar via XtBridgeService\n this.handleServerCallback(id, data, false);\n };\n\n // Definir nova rejectFunction\n (document as any).app.g5.rejectFunction = (id: string, error: any) => {\n // Chamar original do AppComponent se existir\n if (originalReject && typeof originalReject === 'function') {\n try {\n originalReject.call(globalThis, id, error);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber comunicação com o Back-End.' });\n }\n }\n\n // Processar via XtBridgeService\n this.handleServerCallback(id, error, true);\n };\n\n // Também registrar em window para compatibilidade\n (globalThis as any).resolveFunction = (document as any).app.g5.resolveFunction;\n (globalThis as any).rejectFunction = (document as any).app.g5.rejectFunction;\n }\n\n /**\n * Initialize CEF communication by setting up the global callback\n */\n private initializeCefCommunication(): void {\n // Set up global callback function that CEF will call (for direct responses)\n (globalThis as any).handleCefResponse = (responseData: string) => {\n try {\n const response: any = JSON.parse(responseData);\n this.handleResponse(response);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao processar resposta do Back-End.' });\n }\n };\n }\n\n /**\n * Handle callback from server via resolveFunction/rejectFunction\n * Processa tanto respostas simples quanto chunked\n */\n private handleServerCallback(id: string, data: any, isError: boolean): void {\n const subject = this.responseSubjects.get(id);\n\n if (!subject) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End com ID: ${id}` });\n return;\n }\n\n try {\n let parsedData = data;\n\n // Parse JSON se for string\n if (typeof data === 'string') {\n try {\n parsedData = JSON.parse(data);\n } catch {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End com ID: ${id}` });\n parsedData = data;\n }\n }\n\n const hasParsedDataObject = parsedData && typeof parsedData === 'object';\n // Verificar se é resposta chunked { chunk, seq, last }\n if (hasParsedDataObject && parsedData.chunk && parsedData.seq !== undefined && parsedData.last !== undefined) {\n this.handleChunkResponse(id, parsedData);\n return;\n }\n\n // Resposta normal (não-chunked)\n if (isError) {\n const errorMsg = typeof data === 'string' ? data : JSON.stringify(data);\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Erro ao processar resposta do Back-End com ID: ${id}` });\n subject.error(new Error(errorMsg));\n } else {\n subject.next(parsedData);\n }\n\n subject.complete();\n this.cleanupRequest(id);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Erro ao processar resposta do Back-End com ID: ${id}` });\n subject.error(error);\n this.cleanupRequest(id);\n }\n }\n\n /**\n * Check if CEF functions are available\n */\n private checkCefAvailability(): void {\n const isAvailable = typeof (globalThis as any).cefSendToServer === 'function';\n this.connectionStatus.next(isAvailable);\n\n if (!isAvailable) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Funções de comunicação com o Back-End não disponíveis.' });\n }\n }\n\n /**\n * Generate unique ID for requests - guaranteed unique even with concurrent calls\n */\n private generateRequestId(): string {\n const timestamp = Date.now();\n const random = crypto.randomUUID().split('-').join('');\n const counter = this.responseSubjects.size; // Additional uniqueness\n return `req_${timestamp}_${random}_${counter}`;\n }\n\n /**\n * Send request to server via CEF - Thread-safe with timeout protection and retry resilience\n */\n sendRequest<T = any>(action: string, payload?: any, bridgeConfig?: BridgeConfig): Observable<T> {\n const functionName = bridgeConfig?.functionName ?? this.DEFAULT_XT_BRIDGE_REQUEST_FUNCTION_NAME;\n const timeout = bridgeConfig?.requestTimeout ?? this.DEFAULT_REQUEST_TIME_OUT;\n const chunkSize = bridgeConfig?.chunkSize ?? this.DEFAULT_CHUNK_SIZE;\n const maxRetries = bridgeConfig?.maxRetries ?? this.DEFAULT_MAX_RETRIES;\n const retryDelay = bridgeConfig?.retryDelay ?? this.DEFAULT_RETRY_DELAY;\n\n const outerSubject = new Subject<T>();\n const retryKey = this.generateRequestId();\n\n const attempt = (attemptNumber: number): void => {\n this.executeAttempt<T>(action, payload, functionName, timeout, chunkSize).subscribe({\n next: (data) => {\n outerSubject.next(data);\n outerSubject.complete();\n this.retryTimeouts.delete(retryKey);\n },\n error: (error) => {\n if (attemptNumber < maxRetries) {\n const retryTimeout = setTimeout(() => {\n this.retryTimeouts.delete(retryKey);\n attempt(attemptNumber + 1);\n }, retryDelay);\n this.retryTimeouts.set(retryKey, retryTimeout);\n } else {\n this.messageService.add({\n severity: 'error',\n summary: 'Erro',\n detail: `Falha na comunicação com o Back-End após ${maxRetries + 1} tentativa(s).`\n });\n outerSubject.error(error);\n }\n }\n });\n };\n\n attempt(0);\n\n return outerSubject.asObservable().pipe(take(1));\n }\n\n /**\n * Execute a single attempt of the request\n */\n private executeAttempt<T>(\n action: string,\n payload: any,\n functionName: string,\n timeout: number,\n chunkSize: number\n ): Observable<T> {\n const requestId = this.generateRequestId();\n\n // Create subject for this specific request\n const responseSubject = new Subject<any>();\n this.responseSubjects.set(requestId, responseSubject);\n this.requestOrder.push(requestId);\n\n // Set up timeout to prevent hanging requests\n const setupTimeout = setTimeout(() => {\n const subject = this.responseSubjects.get(requestId);\n if (subject) {\n subject.error(new Error(`Request ${requestId} timed out after ${timeout}ms`));\n this.cleanupRequest(requestId);\n }\n }, timeout);\n\n this.requestTimeouts.set(requestId, setupTimeout);\n\n // Send request via invokeNative with XtBridgeRequest format\n if ((globalThis as any).invokeNative) {\n try {\n const request = JSON.stringify({\n \"id\": requestId,\n \"parameters\": [\n { \"parametro\": action },\n { \"parametro\": payload ? JSON.stringify(payload || {}) : \"\" }\n ],\n functionName,\n chunkSize\n });\n\n (globalThis as any).invokeNative(0, `###${request}`);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao enviar requisição para o Back-End.' });\n responseSubject.error(error);\n this.cleanupRequest(requestId);\n }\n } else {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Falha ao enviar requisição para o Back-End.' });\n const error = new Error('CEF communication not available');\n responseSubject.error(error);\n this.cleanupRequest(requestId);\n }\n\n // Return observable that completes after first response\n return responseSubject.asObservable().pipe(\n take(1)\n ) as Observable<T>;\n }\n\n /**\n * Handle response from CEF - Thread-safe, prevents response mixing\n */\n private handleResponse(response: XtBridgeResponse): void {\n if (!response) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Resposta inválida do Back-End.' });\n return;\n }\n\n const anyResponse: any = response as any;\n\n // Suporte a chunked response (ex: { id?, chunk, seq, last })\n if (anyResponse.chunk) {\n const resolvedId = anyResponse.id || this.requestOrder.at(-1);\n if (!resolvedId) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Erro ao receber resposta do Back-End.' });\n return;\n }\n\n this.handleChunkResponse(resolvedId, anyResponse);\n return;\n }\n\n if (!response.id) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: 'Resposta inválida do Back-End (id ausente)' });\n return;\n }\n\n const subject = this.responseSubjects.get(response.id);\n\n this.handleSubject(subject, response);\n }\n\n private handleSubject(subject: Subject<any> | undefined, response: XtBridgeResponse) {\n if (subject) {\n // Clear timeout for this request\n const timeout = this.requestTimeouts.get(response.id);\n if (timeout) {\n clearTimeout(timeout);\n this.requestTimeouts.delete(response.id);\n }\n\n // Response matched to correct request ID - safe to process\n if (response.success) {\n subject.next(response.data);\n } else {\n subject.error(new Error(response.error ?? 'Server error'));\n }\n subject.complete();\n this.responseSubjects.delete(response.id);\n this.requestOrder = this.requestOrder.filter(id => id !== response.id);\n } else {\n // No matching request ID - could be late/duplicate response\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End recebida para ID de requisição desconhecido/concluído: ${response.id}` });\n }\n }\n\n /**\n * Handle chunked response from server callback\n * Backend chama resolveFunction múltiplas vezes com chunks\n */\n private handleChunkResponse(requestId: string, chunkResponse: { chunk: string; seq: number; last: boolean }): void {\n const subject = this.responseSubjects.get(requestId);\n if (!subject) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End com Chunk recebido para ID de requisição desconhecido: ${requestId}` });\n return;\n }\n\n // Inicializar buffer se não existir\n let buffer = this.chunkBuffers.get(requestId);\n if (!buffer) {\n buffer = { chunks: new Map<number, string>() };\n this.chunkBuffers.set(requestId, buffer);\n }\n\n // Armazenar chunk\n buffer.chunks.set(chunkResponse.seq, chunkResponse.chunk);\n\n if (buffer.chunks.size > this.MAX_CHUNKS) {\n subject.error(new Error('Limite de chunks excedido'));\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Resposta do Back-End atingiu limite máximo de Chunk para ID de requisição: ${requestId}` });\n this.cleanupRequest(requestId);\n return;\n }\n\n // Marcar sequência final se for o último chunk\n if (chunkResponse.last) {\n buffer.lastSeq = chunkResponse.seq;\n }\n\n // Verificar se todos os chunks foram recebidos\n if (buffer.lastSeq !== undefined) {\n // Detectar se é 0-based ou 1-based\n const isZeroBased = buffer.chunks.has(0);\n const expectedSize = isZeroBased ? buffer.lastSeq + 1 : buffer.lastSeq;\n\n // Aguardar todos os chunks\n if (buffer.chunks.size !== expectedSize) {\n return;\n }\n\n // Todos os chunks recebidos - montar resposta final\n const chunksOrdered = Array.from(buffer.chunks.entries())\n .sort((a, b) => a[0] - b[0])\n .map((entry) => entry[1])\n .join('');\n\n try {\n const parsed = JSON.parse(chunksOrdered);\n subject.next(parsed);\n subject.complete();\n this.cleanupRequest(requestId);\n } catch (error) {\n this.messageService.add({ severity: 'error', summary: 'Erro', detail: `Falha ao processar resposta do Back-End para ${requestId}` });\n subject.error(new Error(`Failed to parse chunked response: ${error}`));\n this.cleanupRequest(requestId);\n }\n }\n }\n\n /**\n * Clean up request tracking\n */\n private cleanupRequest(requestId: string): void {\n this.responseSubjects.delete(requestId);\n this.requestOrder = this.requestOrder.filter(id => id !== requestId);\n this.chunkBuffers.delete(requestId);\n\n const timeout = this.requestTimeouts.get(requestId);\n if (timeout) {\n clearTimeout(timeout);\n this.requestTimeouts.delete(requestId);\n }\n }\n\n /**\n * Get connection status as observable\n */\n getConnectionStatus(): Observable<boolean> {\n return this.connectionStatus.asObservable();\n }\n\n /**\n * Check if CEF is currently available\n */\n isCefAvailable(): boolean {\n return this.connectionStatus.value;\n }\n\n /**\n * Cleanup pending requests (call on component destroy)\n */\n cleanup(): void {\n this.responseSubjects.forEach((subject) => {\n subject.error(new Error('Service cleanup - request cancelled'));\n subject.complete();\n });\n this.responseSubjects.clear();\n\n // Clear all timeouts\n this.requestTimeouts.forEach(timeout => clearTimeout(timeout));\n this.requestTimeouts.clear();\n\n // Clear pending retries\n this.retryTimeouts.forEach(timeout => clearTimeout(timeout));\n this.retryTimeouts.clear();\n }\n\n /**\n * Get debug info about pending requests\n */\n getDebugInfo(): { pendingRequests: number; activeTimeouts: number } {\n return {\n pendingRequests: this.responseSubjects.size,\n activeTimeouts: this.requestTimeouts.size\n };\n }\n}\n","/*\n * Public API Surface of hcmxt-bridge-lib\n */\n\n// Services\nexport { XtBridgeService, XtBridgeRequest, XtBridgeResponse, BridgeConfig } from './lib/services/xt-bridge.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "../node_modules/ng-packagr/package.schema.json",
3
3
  "name": "@senior-gestao-pessoas/hcmxt-bridge-lib",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "http://git.senior.com.br/gestao-pessoas/hcmxt-bridge-lib"