ems-web-app-cognito 1.0.20 → 1.0.25

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.
@@ -27,21 +27,17 @@ export class EphemeralStorage {
27
27
  this._cache = {};
28
28
  }
29
29
  getItem(key) {
30
- console.log(`getting: ${key}: ${this._cache[key]}`, this._cache);
31
30
  return this._cache[key];
32
31
  }
33
32
  setItem(key, value) {
34
- console.log(`setting: ${key}: ${value}`);
35
33
  this._cache[key] = value;
36
34
  return this.getItem(key);
37
35
  }
38
36
  removeItem(key) {
39
37
  delete this._cache[key];
40
- console.log(`deleting: ${key}`, this._cache);
41
38
  }
42
39
  clear() {
43
40
  this._cache = {};
44
- console.log(`clearing`, this._cache);
45
41
  }
46
42
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLmNsYXNzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGNBQWM7O0FBQ1gsNkNBQThCLEdBQVksMERBQTBELENBQUM7QUFDckcscUNBQXNCLEdBQVcseURBQXlELENBQUM7QUFDM0Ysb0NBQXFCLEdBQVcsc0hBQXNILENBQUM7QUFDdkosMkJBQVksR0FBVyw4REFBOEQsQ0FBQztBQUN0RixnQ0FBaUIsR0FBVyxvREFBb0QsQ0FBQztBQUNqRixnQ0FBaUIsR0FBVyw4Q0FBOEMsQ0FBQztBQUMzRSx5QkFBVSxHQUFXLGVBQWUsQ0FBQztBQUNyQyw0QkFBYSxHQUFXLFVBQVUsQ0FBQztBQUNuQyxrQ0FBbUIsR0FBVyxpQkFBaUIsQ0FBQztBQUNoRCwrQkFBZ0IsR0FBVyxjQUFjLENBQUM7QUFDMUMsbUNBQW9CLEdBQVcsa0JBQWtCLENBQUM7QUFDbEQsc0NBQXVCLEdBQVcsc0JBQXNCLENBQUM7QUFDekQsMEJBQVcsR0FBVyxRQUFRLENBQUM7QUFDL0Isd0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0IseUJBQVUsR0FBVyxPQUFPLENBQUM7QUFDN0Isc0NBQXVCLEdBQVcsdUJBQXVCLENBQUM7QUFDMUQsdUJBQVEsR0FBVyxvQ0FBb0MsQ0FBQztBQUN4RCw0QkFBYSxHQUFXLDhDQUE4QyxDQUFDO0FBQ3ZFLDZCQUFjLEdBQVcsdUJBQXVCLENBQUM7QUFDakQsNEJBQWEsR0FBVyxlQUFlLENBQUM7QUFDeEMsZ0NBQWlCLEdBQVcsOENBQThDLENBQUE7QUFDMUUsdUNBQXdCLEdBQVcsd0dBQXdHLENBQUM7QUFJNUosTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNTLFdBQU0sR0FBUSxFQUFFLENBQUM7SUFzQjFCLENBQUM7SUFwQkEsT0FBTyxDQUFDLEdBQVc7UUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQzlCLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUN6QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxLQUFLO1FBQ0osSUFBSSxDQUFDLE1BQU0sR0FBRSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBDb2duaXRvU3RyaW5ncyB7XG5cdCBwdWJsaWMgc3RhdGljIG9uVXNlclBhc3N3b3JkQ2hhbmdlU3VjY2Vzc2Z1bDogc3RyaW5nICA9IFwiVXBkYXRlIHN1Y2Nlc3NmdWwuIFBsZWFzZSBsb2cgaW4gd2l0aCB5b3VyIG5ldyBwYXNzd29yZC5cIjtcblx0IHB1YmxpYyBzdGF0aWMgb25WZXJpZmljYXRpb25Db2RlU2VudDogc3RyaW5nID0gXCJFbnRlciB5b3VyIGVtYWlsIGJlbG93IHRvIGdlbmVyYXRlIGEgdmVyaWZpY2F0aW9uIGNvZGUuXCI7XG5cdCBwdWJsaWMgc3RhdGljIG9uTmV3UGFzc3dvcmRSZXF1aXJlZDogc3RyaW5nID0gXCJZb3UgbmVlZCB0byBjcmVhdGUgYSBuZXcgcGFzc3dvcmQuIFBsZWFzZSBjaGVjayB5b3VyIGVtYWlsIGZvciBhIHZlcmlmaWNhdGlvbiBjb2RlIGFuZCB0aGVuIGNvbXBsZXRlIHRoZSBmb3JtIGJlbG93LlwiO1xuXHQgcHVibGljIHN0YXRpYyBvbkZpcnN0TG9naW46IHN0cmluZyA9IFwiUGxlYXNlIGNvbXBsZXRlIHRoZSBmaWVsZHMgYmVsb3cgdG8gZmluaXNoIGFjY291bnQgY3JlYXRpb24uXCI7XG5cdCBwdWJsaWMgc3RhdGljIG9uVG9vTWFueUF0dGVtcHRzOiBzdHJpbmcgPSBcIlRvbyBtYW55IGF0dGVtcHRzLiBQbGVhc2UgdHJ5IGFnYWluIGluIDE1IG1pbnV0ZXMuXCI7XG5cdCBwdWJsaWMgc3RhdGljIG9uUGFzc3dvcmRVcGRhdGVkOiBzdHJpbmcgPSBcIllvdXIgcGFzc3dvcmQgaGFzIGJlZW4gdXBkYXRlZCBzdWNjZXNzZnVsbHkuXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsRW1haWw6IHN0cmluZyA9IFwiRW1haWwgQWRkcmVzc1wiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbFBhc3N3b3JkOiBzdHJpbmcgPSBcIlBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsRm9yZ290UGFzc3dvcmQ6IHN0cmluZyA9IFwiRm9yZ290IFBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsTmV3UGFzc3dvcmQ6IHN0cmluZyA9IFwiTmV3IFBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsQ3VycmVudFBhc3N3b3JkOiBzdHJpbmcgPSBcIkN1cnJlbnQgUGFzc3dvcmRcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxDb25maXJtTmV3UGFzc3dvcmQ6IHN0cmluZyA9IFwiQ29uZmlybSBOZXcgUGFzc3dvcmRcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxTdWJtaXQ6IHN0cmluZyA9IFwiU3VibWl0XCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsQ29kZTogc3RyaW5nID0gXCJDb2RlXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsQ2xvc2U6IHN0cmluZyA9IFwiQ2xvc2VcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxVc2VSZWd1bGFyUGFzc3dvcmQ6IHN0cmluZyA9IFwiVXNlIFN0YW5kYXJkIFBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsT3RwOiBzdHJpbmcgPSBcIkVtYWlsIG1lIGEgT25lIFRpbWUgUGFzc3dvcmQgKE9UUClcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxPdHBFbnRlcjogc3RyaW5nID0gXCJFbnRlciB0aGUgY29kZSB0aGF0IHdhcyBqdXN0IGVtYWlsZWQgdG8geW91LlwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbE1hZ2ljTGluazogc3RyaW5nID0gXCJFbWFpbCBtZSBhIG1hZ2ljIGxpbmtcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxQYXNza2V5czogc3RyaW5nID0gXCJVc2UgYSBwYXNza2V5XCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsUGFzc2tleUVudGVyOiBzdHJpbmcgPSBcIkVudGVyIHRoZSBjb2RlIHRoYXQgd2FzIGp1c3QgZW1haWxlZCB0byB5b3UuXCJcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxQYXNzd29yZFJlcXVpcmVtZW50OiBzdHJpbmcgPSBcIk11c3QgYmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBjb250YWluIGEgbnVtYmVyLCBzcGVjaWFsIGNoYXJhY3RlciwgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVyLlwiO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBFcGhlbWVyYWxTdG9yYWdlIHtcblx0cHJpdmF0ZSBfY2FjaGU6IGFueSA9IHt9O1xuXG5cdGdldEl0ZW0oa2V5OiBzdHJpbmcpOiBhbnkge1xuXHRcdGNvbnNvbGUubG9nKGBnZXR0aW5nOiAke2tleX06ICR7dGhpcy5fY2FjaGVba2V5XX1gLCB0aGlzLl9jYWNoZSk7XG5cdFx0cmV0dXJuIHRoaXMuX2NhY2hlW2tleV07XG5cdH1cblxuXHRzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTpzdHJpbmcge1xuXHRcdGNvbnNvbGUubG9nKGBzZXR0aW5nOiAke2tleX06ICR7dmFsdWV9YCk7XG5cdFx0dGhpcy5fY2FjaGVba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLmdldEl0ZW0oa2V5KTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcblx0XHRkZWxldGUgdGhpcy5fY2FjaGVba2V5XTtcblx0XHRjb25zb2xlLmxvZyhgZGVsZXRpbmc6ICR7a2V5fWAsIHRoaXMuX2NhY2hlKTtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2NhY2hlPSB7fTtcblx0XHRjb25zb2xlLmxvZyhgY2xlYXJpbmdgLCB0aGlzLl9jYWNoZSk7XG5cdH1cbn0iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5jbGFzc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLmNsYXNzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGNBQWM7O0FBQ1gsNkNBQThCLEdBQVksMERBQTBELENBQUM7QUFDckcscUNBQXNCLEdBQVcseURBQXlELENBQUM7QUFDM0Ysb0NBQXFCLEdBQVcsc0hBQXNILENBQUM7QUFDdkosMkJBQVksR0FBVyw4REFBOEQsQ0FBQztBQUN0RixnQ0FBaUIsR0FBVyxvREFBb0QsQ0FBQztBQUNqRixnQ0FBaUIsR0FBVyw4Q0FBOEMsQ0FBQztBQUMzRSx5QkFBVSxHQUFXLGVBQWUsQ0FBQztBQUNyQyw0QkFBYSxHQUFXLFVBQVUsQ0FBQztBQUNuQyxrQ0FBbUIsR0FBVyxpQkFBaUIsQ0FBQztBQUNoRCwrQkFBZ0IsR0FBVyxjQUFjLENBQUM7QUFDMUMsbUNBQW9CLEdBQVcsa0JBQWtCLENBQUM7QUFDbEQsc0NBQXVCLEdBQVcsc0JBQXNCLENBQUM7QUFDekQsMEJBQVcsR0FBVyxRQUFRLENBQUM7QUFDL0Isd0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0IseUJBQVUsR0FBVyxPQUFPLENBQUM7QUFDN0Isc0NBQXVCLEdBQVcsdUJBQXVCLENBQUM7QUFDMUQsdUJBQVEsR0FBVyxvQ0FBb0MsQ0FBQztBQUN4RCw0QkFBYSxHQUFXLDhDQUE4QyxDQUFDO0FBQ3ZFLDZCQUFjLEdBQVcsdUJBQXVCLENBQUM7QUFDakQsNEJBQWEsR0FBVyxlQUFlLENBQUM7QUFDeEMsZ0NBQWlCLEdBQVcsOENBQThDLENBQUE7QUFDMUUsdUNBQXdCLEdBQVcsd0dBQXdHLENBQUM7QUFJNUosTUFBTSxPQUFPLGdCQUFnQjtJQUE3QjtRQUNTLFdBQU0sR0FBUSxFQUFFLENBQUM7SUFrQjFCLENBQUM7SUFoQkEsT0FBTyxDQUFDLEdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUs7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFFLEVBQUUsQ0FBQztJQUNqQixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQ29nbml0b1N0cmluZ3Mge1xuXHQgcHVibGljIHN0YXRpYyBvblVzZXJQYXNzd29yZENoYW5nZVN1Y2Nlc3NmdWw6IHN0cmluZyAgPSBcIlVwZGF0ZSBzdWNjZXNzZnVsLiBQbGVhc2UgbG9nIGluIHdpdGggeW91ciBuZXcgcGFzc3dvcmQuXCI7XG5cdCBwdWJsaWMgc3RhdGljIG9uVmVyaWZpY2F0aW9uQ29kZVNlbnQ6IHN0cmluZyA9IFwiRW50ZXIgeW91ciBlbWFpbCBiZWxvdyB0byBnZW5lcmF0ZSBhIHZlcmlmaWNhdGlvbiBjb2RlLlwiO1xuXHQgcHVibGljIHN0YXRpYyBvbk5ld1Bhc3N3b3JkUmVxdWlyZWQ6IHN0cmluZyA9IFwiWW91IG5lZWQgdG8gY3JlYXRlIGEgbmV3IHBhc3N3b3JkLiBQbGVhc2UgY2hlY2sgeW91ciBlbWFpbCBmb3IgYSB2ZXJpZmljYXRpb24gY29kZSBhbmQgdGhlbiBjb21wbGV0ZSB0aGUgZm9ybSBiZWxvdy5cIjtcblx0IHB1YmxpYyBzdGF0aWMgb25GaXJzdExvZ2luOiBzdHJpbmcgPSBcIlBsZWFzZSBjb21wbGV0ZSB0aGUgZmllbGRzIGJlbG93IHRvIGZpbmlzaCBhY2NvdW50IGNyZWF0aW9uLlwiO1xuXHQgcHVibGljIHN0YXRpYyBvblRvb01hbnlBdHRlbXB0czogc3RyaW5nID0gXCJUb28gbWFueSBhdHRlbXB0cy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiAxNSBtaW51dGVzLlwiO1xuXHQgcHVibGljIHN0YXRpYyBvblBhc3N3b3JkVXBkYXRlZDogc3RyaW5nID0gXCJZb3VyIHBhc3N3b3JkIGhhcyBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LlwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbEVtYWlsOiBzdHJpbmcgPSBcIkVtYWlsIEFkZHJlc3NcIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxQYXNzd29yZDogc3RyaW5nID0gXCJQYXNzd29yZFwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbEZvcmdvdFBhc3N3b3JkOiBzdHJpbmcgPSBcIkZvcmdvdCBQYXNzd29yZFwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbE5ld1Bhc3N3b3JkOiBzdHJpbmcgPSBcIk5ldyBQYXNzd29yZFwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbEN1cnJlbnRQYXNzd29yZDogc3RyaW5nID0gXCJDdXJyZW50IFBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsQ29uZmlybU5ld1Bhc3N3b3JkOiBzdHJpbmcgPSBcIkNvbmZpcm0gTmV3IFBhc3N3b3JkXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsU3VibWl0OiBzdHJpbmcgPSBcIlN1Ym1pdFwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbENvZGU6IHN0cmluZyA9IFwiQ29kZVwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbENsb3NlOiBzdHJpbmcgPSBcIkNsb3NlXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsVXNlUmVndWxhclBhc3N3b3JkOiBzdHJpbmcgPSBcIlVzZSBTdGFuZGFyZCBQYXNzd29yZFwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbE90cDogc3RyaW5nID0gXCJFbWFpbCBtZSBhIE9uZSBUaW1lIFBhc3N3b3JkIChPVFApXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsT3RwRW50ZXI6IHN0cmluZyA9IFwiRW50ZXIgdGhlIGNvZGUgdGhhdCB3YXMganVzdCBlbWFpbGVkIHRvIHlvdS5cIjtcblx0IHB1YmxpYyBzdGF0aWMgbGFiZWxNYWdpY0xpbms6IHN0cmluZyA9IFwiRW1haWwgbWUgYSBtYWdpYyBsaW5rXCI7XG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsUGFzc2tleXM6IHN0cmluZyA9IFwiVXNlIGEgcGFzc2tleVwiO1xuXHQgcHVibGljIHN0YXRpYyBsYWJlbFBhc3NrZXlFbnRlcjogc3RyaW5nID0gXCJFbnRlciB0aGUgY29kZSB0aGF0IHdhcyBqdXN0IGVtYWlsZWQgdG8geW91LlwiXG5cdCBwdWJsaWMgc3RhdGljIGxhYmVsUGFzc3dvcmRSZXF1aXJlbWVudDogc3RyaW5nID0gXCJNdXN0IGJlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgY29udGFpbiBhIG51bWJlciwgc3BlY2lhbCBjaGFyYWN0ZXIsIHVwcGVyY2FzZSBhbmQgbG93ZXJjYXNlIGxldHRlci5cIjtcbn1cblxuXG5leHBvcnQgY2xhc3MgRXBoZW1lcmFsU3RvcmFnZSB7XG5cdHByaXZhdGUgX2NhY2hlOiBhbnkgPSB7fTtcblxuXHRnZXRJdGVtKGtleTogc3RyaW5nKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5fY2FjaGVba2V5XTtcblx0fVxuXG5cdHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOnN0cmluZyB7XG5cdFx0dGhpcy5fY2FjaGVba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLmdldEl0ZW0oa2V5KTtcblx0fVxuXG5cdHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpIHtcblx0XHRkZWxldGUgdGhpcy5fY2FjaGVba2V5XTtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuX2NhY2hlPSB7fTtcblx0fVxufSJdfQ==
@@ -20,13 +20,16 @@ export class CognitoService {
20
20
  this.formSource = new BehaviorSubject(null);
21
21
  this.form$ = this.formSource.asObservable();
22
22
  this.user = null;
23
+ this.storage = new EphemeralStorage();
24
+ this.useLocalStorage = true;
23
25
  }
24
- initialize(UserPoolId, ClientId, useLocalStorage, idToken, accessToken, refreshToken) {
26
+ initialize(UserPoolId, ClientId, useLocalStorage = true, idToken, accessToken, refreshToken) {
25
27
  //for federated users
26
28
  const access = params("access_token") ?? accessToken ?? localStorage.getItem("ems_access_token") ?? null;
27
29
  const id = params("id_token") ?? idToken ?? localStorage.getItem("ems_id_token") ?? null;
28
30
  const sessionId = params("sessionId") ?? null;
29
31
  const otp = params("otp") ?? null;
32
+ this.useLocalStorage = useLocalStorage;
30
33
  if (useLocalStorage && access && id) {
31
34
  localStorage.setItem("ems_access_token", access);
32
35
  localStorage.setItem("ems_id_token", id);
@@ -46,16 +49,13 @@ export class CognitoService {
46
49
  }
47
50
  }
48
51
  setCognitoUserFromToken(UserPoolId, ClientId, idToken, accessToken, refreshToken) {
49
- console.log("using ephemeral storage");
50
- const Storage = new EphemeralStorage();
51
- this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage });
52
+ this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage: this.storage });
52
53
  if (idToken) {
53
54
  const decoded = jwtDecode(idToken);
54
- console.log(decoded);
55
55
  this.user = new CognitoUser({
56
56
  Username: decoded['cognito:username'],
57
57
  Pool: this.pool,
58
- Storage
58
+ Storage: this.storage
59
59
  });
60
60
  const idTokenObj = new CognitoIdToken({ IdToken: idToken });
61
61
  const accessTokenObj = new CognitoAccessToken({ AccessToken: accessToken });
@@ -76,6 +76,8 @@ export class CognitoService {
76
76
  const request = ChallengeResponse ? CognitoRequestType.MagicLink : CognitoRequestType.Authentication;
77
77
  const details = new AuthenticationDetails({ Username });
78
78
  const data = { Username, Pool: this.pool };
79
+ if (!this.useLocalStorage)
80
+ data.Storage = this.storage;
79
81
  const user = this.user = this.user ?? new CognitoUser(data);
80
82
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
81
83
  //@ts-ignore
@@ -103,6 +105,8 @@ export class CognitoService {
103
105
  const request = ChallengeResponse ? CognitoRequestType.Passkey : CognitoRequestType.Authentication;
104
106
  const details = new AuthenticationDetails({ Username });
105
107
  const data = { Username, Pool: this.pool };
108
+ if (!this.useLocalStorage)
109
+ data.Storage = this.storage;
106
110
  const user = this.user = this.user ?? new CognitoUser(data);
107
111
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
108
112
  return new Promise(async (resolve, reject) => {
@@ -125,6 +129,8 @@ export class CognitoService {
125
129
  const request = ChallengeResponse ? CognitoRequestType.OtpChallenge : CognitoRequestType.Authentication;
126
130
  const details = new AuthenticationDetails({ Username });
127
131
  const data = { Username, Pool: this.pool };
132
+ if (!this.useLocalStorage)
133
+ data.Storage = this.storage;
128
134
  const user = this.user = this.user ?? new CognitoUser(data);
129
135
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
130
136
  return new Promise(async (resolve, reject) => {
@@ -192,6 +198,8 @@ export class CognitoService {
192
198
  authenticate(Username, Password) {
193
199
  const details = new AuthenticationDetails({ Username, Password });
194
200
  const data = { Username, Pool: this.pool };
201
+ if (!this.useLocalStorage)
202
+ data.Storage = this.storage;
195
203
  const user = new CognitoUser(data);
196
204
  return new Promise((resolve, reject) => {
197
205
  if (!this.user)
@@ -207,6 +215,8 @@ export class CognitoService {
207
215
  });
208
216
  const Username = session.getIdToken().payload["cognito:username"];
209
217
  const data = { Username, Pool: this.pool };
218
+ if (!this.useLocalStorage)
219
+ data.Storage = this.storage;
210
220
  this.user = new CognitoUser(data);
211
221
  this.userSource.next(this.user);
212
222
  this.sessionSource.next(session);
@@ -227,6 +237,8 @@ export class CognitoService {
227
237
  }
228
238
  requestVerificationCode(Username) {
229
239
  const data = { Username, Pool: this.pool };
240
+ if (!this.useLocalStorage)
241
+ data.Storage = this.storage;
230
242
  const user = new CognitoUser(data);
231
243
  return this.forgotPassword(user);
232
244
  }
@@ -304,4 +316,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
304
316
  providedIn: 'root'
305
317
  }]
306
318
  }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBdUIsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWMsR0FBRyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTyw0QkFBNEIsQ0FBQztBQUUvSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUt2QyxNQUFNLE9BQU8sY0FBYztJQWtCekIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWhCNUIsa0JBQWEsR0FBK0MsSUFBSSxlQUFlLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBQ2xILGFBQVEsR0FBMEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuRixlQUFVLEdBQXdDLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNqRyxVQUFLLEdBQW1DLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7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QU8sR0FBRyxrQkFBa0IsQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLElBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFZLEVBQUUsT0FBYSxFQUFFLEVBQUU7WUFDcEQsSUFBRyxLQUFLO2dCQUFFLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUNwRztnQkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUMxRjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQXdCO1FBQ2pELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFTyxPQUFPLENBQUMsU0FBYyxFQUFFO1FBQzlCLE1BQU0sT0FBTyxHQUFHO1lBQ1YsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDdkUsQ0FBQztRQUNMLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQzs7MkdBbFVVLGNBQWM7K0dBQWQsY0FBYyxjQUZiLE1BQU07MkZBRVAsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlLCBIdHRwUmVxdWVzdCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIHRocm93RXJyb3IsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIHRhcCwgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0ICdjcm9zcy1mZXRjaC9wb2x5ZmlsbCc7XG5pbXBvcnQgeyBDb2duaXRvVXNlciwgQ29nbml0b1VzZXJQb29sLCBDb2duaXRvVXNlclNlc3Npb24sIENvZ25pdG9JZFRva2VuLCBDb2duaXRvQWNjZXNzVG9rZW4sIENvZ25pdG9SZWZyZXNoVG9rZW4sIEF1dGhlbnRpY2F0aW9uRGV0YWlscyB9ICBmcm9tICdhbWF6b24tY29nbml0by1pZGVudGl0eS1qcyc7XG5pbXBvcnQgeyBJQ29nbml0b1Jlc3BvbnNlLCBJQ29nbml0b1VzZXJEYXRhIH0gZnJvbSBcIi4vY29nbml0by5pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBDb2duaXRvUmVzcG9uc2VUeXBlLCBDb2duaXRvUmVxdWVzdFR5cGUsIENvZ25pdG9Gb3JtVHlwZSB9IGZyb20gXCIuL2NvZ25pdG8udHlwZXNcIjtcbmltcG9ydCB7IEVwaGVtZXJhbFN0b3JhZ2UgfSBmcm9tIFwiLi9jb2duaXRvLmNsYXNzZXNcIjtcbmltcG9ydCB7IHBhcmFtcyB9IGZyb20gXCIuL2NvZ25pdG8udXRpbHNcIjtcbmltcG9ydCB7IGp3dERlY29kZSB9IGZyb20gXCJqd3QtZGVjb2RlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvZ25pdG9TZXJ2aWNlIHtcblxuICBwcml2YXRlIHNlc3Npb25Tb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlclNlc3Npb24gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29nbml0b1VzZXJTZXNzaW9uIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBzZXNzaW9uJDogT2JzZXJ2YWJsZTxDb2duaXRvVXNlclNlc3Npb24gfCBudWxsPiA9IHRoaXMuc2Vzc2lvblNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIHVzZXJTb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlciB8IG51bGw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvVXNlciB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgdXNlciQ6IE9ic2VydmFibGU8Q29nbml0b1VzZXIgfCBudWxsPiA9IHRoaXMudXNlclNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGZvcm1Tb3VyY2U6IEJlaGF2aW9yU3ViamVjdDxDb2duaXRvRm9ybVR5cGUgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29nbml0b0Zvcm1UeXBlIHwgbnVsbD4obnVsbCk7XG4gIHB1YmxpYyBmb3JtJDogT2JzZXJ2YWJsZTxDb2duaXRvRm9ybVR5cGUgfCBudWxsPiA9IHRoaXMuZm9ybVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuXG4gIHByaXZhdGUgdXNlcjogQ29nbml0b1VzZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwb29sITogQ29nbml0b1VzZXJQb29sO1xuXG4gIHByaXZhdGUgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgaWRUb2tlbj86IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcblxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoVXNlclBvb2xJZDogc3RyaW5nLCBDbGllbnRJZDogc3RyaW5nLCB1c2VMb2NhbFN0b3JhZ2U/OiBib29sZWFuLCBpZFRva2VuPzogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZywgcmVmcmVzaFRva2VuPzogc3RyaW5nICkge1xuXG4gICAgLy9mb3IgZmVkZXJhdGVkIHVzZXJzXG4gICAgY29uc3QgYWNjZXNzID0gcGFyYW1zKFwiYWNjZXNzX3Rva2VuXCIpID8/IGFjY2Vzc1Rva2VuID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2FjY2Vzc190b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IGlkID0gcGFyYW1zKFwiaWRfdG9rZW5cIikgPz8gaWRUb2tlbiA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19pZF90b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHBhcmFtcyhcInNlc3Npb25JZFwiKSA/PyBudWxsO1xuICAgIGNvbnN0IG90cCA9IHBhcmFtcyhcIm90cFwiKSA/PyBudWxsO1xuXG4gICAgaWYodXNlTG9jYWxTdG9yYWdlICYmIGFjY2VzcyAmJiBpZCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJlbXNfYWNjZXNzX3Rva2VuXCIsIGFjY2Vzcyk7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19pZF90b2tlblwiLCBpZCk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaGFzaCA9IFwiXCI7XG4gICAgfSBcblxuICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBhY2Nlc3M7XG4gICAgdGhpcy5pZFRva2VuID0gaWQ7XG5cbiAgICAvL2ZvciBzcnAgdXNlcnNcbiAgICBpZih1c2VMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIHRoaXMucG9vbCA9IG5ldyBDb2duaXRvVXNlclBvb2woeyBVc2VyUG9vbElkLCBDbGllbnRJZCB9KTtcbiAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgIHRoaXMudXNlcj8uZ2V0U2Vzc2lvbigoZTogRXJyb3IsIHNlc3Npb246IG51bGwpID0+IHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRDb2duaXRvVXNlckZyb21Ub2tlbihVc2VyUG9vbElkLCBDbGllbnRJZCwgaWRUb2tlbiwgYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbik7XG4gICAgfVxuICAgIFxuICB9XG5cbiAgcHVibGljIHNldENvZ25pdG9Vc2VyRnJvbVRva2VuIChVc2VyUG9vbElkOiBzdHJpbmcsIENsaWVudElkOiBzdHJpbmcsIGlkVG9rZW4/OiBzdHJpbmcsIGFjY2Vzc1Rva2VuPzogc3RyaW5nLCByZWZyZXNoVG9rZW4/OiBzdHJpbmcpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwidXNpbmcgZXBoZW1lcmFsIHN0b3JhZ2VcIik7XG5cbiAgICAgIGNvbnN0IFN0b3JhZ2UgPSBuZXcgRXBoZW1lcmFsU3RvcmFnZSgpO1xuICAgICAgdGhpcy5wb29sID0gbmV3IENvZ25pdG9Vc2VyUG9vbCh7IFVzZXJQb29sSWQsIENsaWVudElkLCBTdG9yYWdlIH0pO1xuICAgICAgXG4gICAgICBpZihpZFRva2VuKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQ6IGFueSA9IGp3dERlY29kZShpZFRva2VuKTtcbiAgICAgICAgY29uc29sZS5sb2coZGVjb2RlZCk7XG4gICAgICAgIHRoaXMudXNlciA9IG5ldyBDb2duaXRvVXNlcih7XG4gICAgICAgICAgICBVc2VybmFtZTogZGVjb2RlZFsnY29nbml0bzp1c2VybmFtZSddLFxuICAgICAgICAgICAgUG9vbDogdGhpcy5wb29sLCBcbiAgICAgICAgICAgIFN0b3JhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaWRUb2tlbk9iaiA9IG5ldyBDb2duaXRvSWRUb2tlbih7IElkVG9rZW46IGlkVG9rZW4gfSk7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuT2JqID0gbmV3IENvZ25pdG9BY2Nlc3NUb2tlbih7IEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbiEgfSk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbk9iaiA9IG5ldyBDb2duaXRvUmVmcmVzaFRva2VuKHsgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW4hIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IENvZ25pdG9Vc2VyU2Vzc2lvbih7IElkVG9rZW46IGlkVG9rZW5PYmosIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbk9iaiwgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW5PYmogfSk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBzZXNzaW9uIHRvIHRoZSBDb2duaXRvIHVzZXJcbiAgICAgICAgdGhpcy51c2VyLnNldFNpZ25JblVzZXJTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy51c2VyPy5nZXRTZXNzaW9uKChlOiBFcnJvciwgc2Vzc2lvbjogbnVsbCkgPT4gdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbikpO1xuICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfTtcblxuICBwdWJsaWMgbWFnaWNMaW5rQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nLCBTZXNzaW9uSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ2hhbGxlbmdlUmVzcG9uc2UgPyBDb2duaXRvUmVxdWVzdFR5cGUuTWFnaWNMaW5rIDogQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIGNvbnN0IGRldGFpbHMgPSBuZXcgQXV0aGVudGljYXRpb25EZXRhaWxzKHsgVXNlcm5hbWUgfSk7XG4gICAgY29uc3QgZGF0YSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLnVzZXIgPSB0aGlzLnVzZXIgPz8gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHRoaXMudXNlci5zZXRBdXRoZW50aWNhdGlvbkZsb3dUeXBlKCdDVVNUT01fQVVUSCcpO1xuXG4gICAgLy9AdHMtaWdub3JlXG4gICAgaWYoU2Vzc2lvbklkKSB0aGlzLnVzZXIuU2Vzc2lvbiA9IFNlc3Npb25JZDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyggcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PnZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0ge1xuICAgICAgICBvblN1Y2Nlc3M6IChzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXIsIHJlcXVlc3QgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSk9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBjdXN0b21DaGFsbGVuZ2U6IChjaGFsbGVuZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5NYWdpY0xpbmssIHVzZXIsIHJlcXVlc3QsIGNoYWxsZW5nZVBhcmFtZXRlcnMgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmKENoYWxsZW5nZVJlc3BvbnNlKSB1c2VyLnNlbmRDdXN0b21DaGFsbGVuZ2VBbnN3ZXIoQ2hhbGxlbmdlUmVzcG9uc2UsIGhhbmRsZXIpO1xuICAgICAgZWxzZSB1c2VyLmluaXRpYXRlQXV0aChkZXRhaWxzLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwYXNza2V5QXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3NrZXkgOiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSB9KTtcbiAgICBjb25zdCBkYXRhID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlciA/PyBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyLnNldEF1dGhlbnRpY2F0aW9uRmxvd1R5cGUoJ0NVU1RPTV9BVVRIJyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoIHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT52b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0IH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgY3VzdG9tQ2hhbGxlbmdlOiAoY2hhbGxlbmdlUGFyYW1ldGVyczogYW55KSA9PiByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5QYXNza2V5LCB1c2VyLCByZXF1ZXN0LCBjaGFsbGVuZ2VQYXJhbWV0ZXJzIH0pXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZihDaGFsbGVuZ2VSZXNwb25zZSkgdXNlci5zZW5kQ3VzdG9tQ2hhbGxlbmdlQW5zd2VyKENoYWxsZW5nZVJlc3BvbnNlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgdXNlci5pbml0aWF0ZUF1dGgoZGV0YWlscywgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3RwQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLk90cENoYWxsZW5nZSA6IENvZ25pdG9SZXF1ZXN0VHlwZS5BdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lIH0pO1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyID0gdGhpcy51c2VyID8/IG5ldyBDb2duaXRvVXNlcihkYXRhKTtcbiAgICB0aGlzLnVzZXIuc2V0QXV0aGVudGljYXRpb25GbG93VHlwZSgnQ1VTVE9NX0FVVEgnKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyggcmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PnZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0ge1xuICAgICAgICBvblN1Y2Nlc3M6IChzZXNzaW9uOiBDb2duaXRvVXNlclNlc3Npb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXIsIHJlcXVlc3QgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSk9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBjdXN0b21DaGFsbGVuZ2U6IChjaGFsbGVuZ2VQYXJhbWV0ZXJzOiBhbnkpID0+IHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk90cENoYWxsZW5nZSwgdXNlciwgcmVxdWVzdCwgY2hhbGxlbmdlUGFyYW1ldGVycyB9KVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgaWYoQ2hhbGxlbmdlUmVzcG9uc2UpIHVzZXIuc2VuZEN1c3RvbUNoYWxsZW5nZUFuc3dlcihDaGFsbGVuZ2VSZXNwb25zZSwgaGFuZGxlcik7XG4gICAgICBlbHNlIHVzZXIuaW5pdGlhdGVBdXRoKGRldGFpbHMsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJJbmZvKHVybDogc3RyaW5nKTogUHJvbWlzZTxJQ29nbml0b1VzZXJEYXRhIHwgSHR0cEVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gYCR7dXJsfS9vYXV0aDIvdXNlckluZm9gXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMuaGVhZGVycygpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQocmVxdWVzdCwgeyBoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IHRydWUgfSApLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IFxuICAgICAgICAgIHsgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtYWlsOiByZXN1bHQuZW1haWwsXG4gICAgICAgICAgICB1c2VybmFtZTogcmVzdWx0LnVzZXJuYW1lLFxuICAgICAgICAgICAgc3ViOiByZXN1bHQuc3ViLFxuICAgICAgICAgICAgZmlyc3ROYW1lOiByZXN1bHQuZ2l2ZW5fbmFtZSxcbiAgICAgICAgICAgIGxhc3ROYW1lOiByZXN1bHQuZmFtaWx5X25hbWUsXG4gICAgICAgICAgICBhY2Nlc3NUb2tlbjogdGhpcy5hY2Nlc3NUb2tlbiEsXG4gICAgICAgICAgICBpZFRva2VuOiB0aGlzLmlkVG9rZW4hXG4gICAgICAgICAgfX1cbiAgICAgICAgKVxuICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgLy8sIGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvclF1aWV0bHkpXG4gIH1cblxuICBwdWJsaWMgc2V0VXNlclNlc3Npb24oc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSB7XG4gICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gIH1cblxuICBwdWJsaWMgc2hvd0Zvcm0oZm9ybTogQ29nbml0b0Zvcm1UeXBlIHwgbnVsbCkge1xuICAgIHRoaXMuZm9ybVNvdXJjZS5uZXh0KGZvcm0pO1xuICB9XG5cbiAgcHVibGljIGxvZ291dCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgIGlmKHRoaXMudXNlcikge1xuICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dChudWxsKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQobnVsbCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiZW1zX2lkX3Rva2VuXCIpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImVtc19hY2Nlc3NfdG9rZW5cIik7XG4gICAgICAgIHRoaXMudXNlci5nbG9iYWxTaWduT3V0KHtcbiAgICAgICAgICBvblN1Y2Nlc3M6IHJlc29sdmUsXG4gICAgICAgICAgb25GYWlsdXJlOiAoKSA9PiB7XG4gICAgICAgICAgICAvL2lmIHVzZXIgaXMgZGlzYWJsZWQsIG11c3QgbWFudWFsbHkgY2xlYXIgbG9jYWwgc3RvcmFnZSAoYXBwYXJlbnRseSlcbiAgICAgICAgICAgIGZvcihsZXQgcHJvcCBpbiBsb2NhbFN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgaWYocHJvcC5tYXRjaCgvY29nbml0by9pKSkgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICB9XG5cbiAgcHVibGljIGF1dGhlbnRpY2F0ZShVc2VybmFtZTogc3RyaW5nLCBQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxJQ29nbml0b1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZGV0YWlscyA9IG5ldyBBdXRoZW50aWNhdGlvbkRldGFpbHMoeyBVc2VybmFtZSwgUGFzc3dvcmR9KTtcbiAgICBjb25zdCBkYXRhID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgY29uc3QgdXNlciA9IG5ldyBDb2duaXRvVXNlcihkYXRhKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgICAgaWYoIXRoaXMudXNlcikgdGhpcy5hdXRoZW50aWNhdGVVc2VyKHVzZXIsIGRldGFpbHMsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIGVsc2UgdGhpcy5nZXRVc2VyU2Vzc2lvbihyZXNvbHZlLCByZWplY3QpXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRmVkZXJhdGVkU2Vzc2lvbihJZFRva2VuOiBzdHJpbmcsIEFjY2Vzc1Rva2VuOiBzdHJpbmcpIHtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgQ29nbml0b1VzZXJTZXNzaW9uKHtcbiAgICAgICAgICBJZFRva2VuOiBuZXcgQ29nbml0b0lkVG9rZW4oeyBJZFRva2VuIH0pLFxuICAgICAgICAgIEFjY2Vzc1Rva2VuOiBuZXcgQ29nbml0b0FjY2Vzc1Rva2VuKHsgQWNjZXNzVG9rZW4gfSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBVc2VybmFtZSA9IHNlc3Npb24uZ2V0SWRUb2tlbigpLnBheWxvYWRbXCJjb2duaXRvOnVzZXJuYW1lXCJdO1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICB0aGlzLnVzZXIgPSBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVBhc3N3b3JkVXBkYXRlKHBhc3N3b3JkOiBzdHJpbmcsIHVzZXI6IENvZ25pdG9Vc2VyLCBhdHRyaWJ1dGVzOiBhbnkpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLk5ld1VzZXJQYXNzd29yZFJlc2V0O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICB1c2VyLmNvbXBsZXRlTmV3UGFzc3dvcmRDaGFsbGVuZ2UocGFzc3dvcmQsIGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh1c2VyKTtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0OiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb24gfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpID0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdFZlcmlmaWNhdGlvbkNvZGUoVXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGEgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBjb25zdCB1c2VyID0gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmZvcmdvdFBhc3N3b3JkKHVzZXIpO1xuICB9XG5cbiAgcHVibGljIHJlc2V0UGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIG9sZFBhc3N3b3JkOiBzdHJpbmcsIG5ld1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLlBhc3N3b3JkUmVzZXQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmNoYW5nZVBhc3N3b3JkKG9sZFBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVycm9yLCByZXN1bHQpID0+IHtcbiAgICAgICAgIGlmKGVycm9yKSByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIHVzZXIsIHJlcXVlc3QsIGVycm9yLCBzZXNzaW9uOiBudWxsfSk7XG4gICAgICAgICBlbHNlIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSk7XG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3Jnb3RQYXNzd29yZCh1c2VyOiBDb2duaXRvVXNlcik6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuRm9yZ290UGFzc3dvcmQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmZvcmdvdFBhc3N3b3JkKHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlN1Y2Nlc3MsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkxpbWl0RXhjZWVkZWRFeGNlcHRpb24sIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pXG4gICAgICAgfSlcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtUGFzc3dvcmQodXNlcjogQ29nbml0b1VzZXIsIGNvZGU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuQ29uZmlybVBhc3N3b3JkO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgdXNlci5jb25maXJtUGFzc3dvcmQoY29kZSwgcGFzc3dvcmQsIHtcbiAgICAgICAgIG9uU3VjY2VzczogKHJlc3BvbnNlOiBhbnkpID0+IHsgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuU3VjY2VzcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSB9LFxuICAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5JbnZhbGlkQ29kZSwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRoZW50aWNhdGVVc2VyKHVzZXI6IENvZ25pdG9Vc2VyLCBkZXRhaWxzOiBBdXRoZW50aWNhdGlvbkRldGFpbHMsIHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCApIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHVzZXIuYXV0aGVudGljYXRlVXNlcihkZXRhaWxzLCB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHVzZXIpO1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgb25GYWlsdXJlOiAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgbmV3UGFzc3dvcmRSZXF1aXJlZDogKHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHt0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLlBhc3N3b3JkUmVzZXQsIHVzZXJBdHRyaWJ1dGVzLCByZXF1aXJlZEF0dHJpYnV0ZXMsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVc2VyU2Vzc2lvbihyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIHRoaXMudXNlciEuZ2V0U2Vzc2lvbigoZXJyb3I6IEVycm9yLCBzZXNzaW9uOiBudWxsKSA9PiB7XG4gICAgICBpZihlcnJvcikgcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyOiB0aGlzLnVzZXIhLCByZXF1ZXN0LCBlcnJvciB9KTtcbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlcjogdGhpcy51c2VyISwgcmVxdWVzdCB9KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvclF1aWV0bHkoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIG9mKGVycm9yKTtcbiAgfVxuXG4gIHByaXZhdGUgaGVhZGVycyhjdXN0b206IGFueSA9IHt9KSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IHRoaXMuYWNjZXNzVG9rZW4gPyBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gIDogXCJcIlxuICAgICAgIH07XG4gICAgcmV0dXJuIG5ldyBIdHRwSGVhZGVycyhoZWFkZXJzKTtcbiAgfVxufVxuIl19
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb2duaXRvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsV0FBVyxFQUE0RCxNQUFNLHNCQUFzQixDQUFDO0FBQ3pILE9BQU8sRUFBdUIsZUFBZSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWMsR0FBRyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTyw0QkFBNEIsQ0FBQztBQUUvSyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQW1CLE1BQU0saUJBQWlCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQUt2QyxNQUFNLE9BQU8sY0FBYztJQW9CekIsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQWxCNUIsa0JBQWEsR0FBK0MsSUFBSSxlQUFlLENBQTRCLElBQUksQ0FBQyxDQUFDO1FBQ2xILGFBQVEsR0FBMEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuRixlQUFVLEdBQXdDLElBQUksZUFBZSxDQUFxQixJQUFJLENBQUMsQ0FBQztRQUNqRyxVQUFLLEdBQW1DLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7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LENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUF3QjtRQUNqRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8sT0FBTyxDQUFDLFNBQWMsRUFBRTtRQUM5QixNQUFNLE9BQU8sR0FBRztZQUNWLGNBQWMsRUFBRSxrQkFBa0I7WUFDbEMsZUFBZSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3ZFLENBQUM7UUFDTCxPQUFPLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OzJHQXhVVSxjQUFjOytHQUFkLGNBQWMsY0FGYixNQUFNOzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCB0aHJvd0Vycm9yLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCB0YXAsIHRha2UgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCAnY3Jvc3MtZmV0Y2gvcG9seWZpbGwnO1xuaW1wb3J0IHsgQ29nbml0b1VzZXIsIENvZ25pdG9Vc2VyUG9vbCwgQ29nbml0b1VzZXJTZXNzaW9uLCBDb2duaXRvSWRUb2tlbiwgQ29nbml0b0FjY2Vzc1Rva2VuLCBDb2duaXRvUmVmcmVzaFRva2VuLCBBdXRoZW50aWNhdGlvbkRldGFpbHMgfSAgZnJvbSAnYW1hem9uLWNvZ25pdG8taWRlbnRpdHktanMnO1xuaW1wb3J0IHsgSUNvZ25pdG9SZXNwb25zZSwgSUNvZ25pdG9Vc2VyRGF0YSB9IGZyb20gXCIuL2NvZ25pdG8uaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgQ29nbml0b1Jlc3BvbnNlVHlwZSwgQ29nbml0b1JlcXVlc3RUeXBlLCBDb2duaXRvRm9ybVR5cGUgfSBmcm9tIFwiLi9jb2duaXRvLnR5cGVzXCI7XG5pbXBvcnQgeyBFcGhlbWVyYWxTdG9yYWdlIH0gZnJvbSBcIi4vY29nbml0by5jbGFzc2VzXCI7XG5pbXBvcnQgeyBwYXJhbXMgfSBmcm9tIFwiLi9jb2duaXRvLnV0aWxzXCI7XG5pbXBvcnQgeyBqd3REZWNvZGUgfSBmcm9tIFwiand0LWRlY29kZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDb2duaXRvU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBzZXNzaW9uU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q29nbml0b1VzZXJTZXNzaW9uIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Vc2VyU2Vzc2lvbiB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgc2Vzc2lvbiQ6IE9ic2VydmFibGU8Q29nbml0b1VzZXJTZXNzaW9uIHwgbnVsbD4gPSB0aGlzLnNlc3Npb25Tb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSB1c2VyU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q29nbml0b1VzZXIgfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29nbml0b1VzZXIgfCBudWxsPihudWxsKTtcbiAgcHVibGljIHVzZXIkOiBPYnNlcnZhYmxlPENvZ25pdG9Vc2VyIHwgbnVsbD4gPSB0aGlzLnVzZXJTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHJpdmF0ZSBmb3JtU291cmNlOiBCZWhhdmlvclN1YmplY3Q8Q29nbml0b0Zvcm1UeXBlIHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvZ25pdG9Gb3JtVHlwZSB8IG51bGw+KG51bGwpO1xuICBwdWJsaWMgZm9ybSQ6IE9ic2VydmFibGU8Q29nbml0b0Zvcm1UeXBlIHwgbnVsbD4gPSB0aGlzLmZvcm1Tb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cblxuICBwcml2YXRlIHVzZXI6IENvZ25pdG9Vc2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcG9vbCE6IENvZ25pdG9Vc2VyUG9vbDtcblxuICBwcml2YXRlIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuICBwcml2YXRlIGlkVG9rZW4/OiBzdHJpbmc7XG4gIHByaXZhdGUgc3RvcmFnZTogRXBoZW1lcmFsU3RvcmFnZSA9IG5ldyBFcGhlbWVyYWxTdG9yYWdlKCk7XG4gIHByaXZhdGUgdXNlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcblxuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoVXNlclBvb2xJZDogc3RyaW5nLCBDbGllbnRJZDogc3RyaW5nLCB1c2VMb2NhbFN0b3JhZ2U6IGJvb2xlYW4gPSB0cnVlLCBpZFRva2VuPzogc3RyaW5nLCBhY2Nlc3NUb2tlbj86IHN0cmluZywgcmVmcmVzaFRva2VuPzogc3RyaW5nICkge1xuXG4gICAgLy9mb3IgZmVkZXJhdGVkIHVzZXJzXG4gICAgY29uc3QgYWNjZXNzID0gcGFyYW1zKFwiYWNjZXNzX3Rva2VuXCIpID8/IGFjY2Vzc1Rva2VuID8/IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZW1zX2FjY2Vzc190b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IGlkID0gcGFyYW1zKFwiaWRfdG9rZW5cIikgPz8gaWRUb2tlbiA/PyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImVtc19pZF90b2tlblwiKSA/PyBudWxsO1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IHBhcmFtcyhcInNlc3Npb25JZFwiKSA/PyBudWxsO1xuICAgIGNvbnN0IG90cCA9IHBhcmFtcyhcIm90cFwiKSA/PyBudWxsO1xuXG4gICAgdGhpcy51c2VMb2NhbFN0b3JhZ2UgPSB1c2VMb2NhbFN0b3JhZ2U7XG5cbiAgICBpZih1c2VMb2NhbFN0b3JhZ2UgJiYgYWNjZXNzICYmIGlkKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImVtc19hY2Nlc3NfdG9rZW5cIiwgYWNjZXNzKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZW1zX2lkX3Rva2VuXCIsIGlkKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gXCJcIjtcbiAgICB9IFxuXG4gICAgdGhpcy5hY2Nlc3NUb2tlbiA9IGFjY2VzcztcbiAgICB0aGlzLmlkVG9rZW4gPSBpZDtcblxuICAgIC8vZm9yIHNycCB1c2Vyc1xuICAgIGlmKHVzZUxvY2FsU3RvcmFnZSkge1xuICAgICAgdGhpcy5wb29sID0gbmV3IENvZ25pdG9Vc2VyUG9vbCh7IFVzZXJQb29sSWQsIENsaWVudElkIH0pO1xuICAgICAgdGhpcy51c2VyID0gdGhpcy5wb29sLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy51c2VyPy5nZXRTZXNzaW9uKChlOiBFcnJvciwgc2Vzc2lvbjogbnVsbCkgPT4gdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldENvZ25pdG9Vc2VyRnJvbVRva2VuKFVzZXJQb29sSWQsIENsaWVudElkLCBpZFRva2VuLCBhY2Nlc3NUb2tlbiwgcmVmcmVzaFRva2VuKTtcbiAgICB9XG4gICAgXG4gIH1cblxuICBwdWJsaWMgc2V0Q29nbml0b1VzZXJGcm9tVG9rZW4gKFVzZXJQb29sSWQ6IHN0cmluZywgQ2xpZW50SWQ6IHN0cmluZywgaWRUb2tlbj86IHN0cmluZywgYWNjZXNzVG9rZW4/OiBzdHJpbmcsIHJlZnJlc2hUb2tlbj86IHN0cmluZykge1xuICAgICAgdGhpcy5wb29sID0gbmV3IENvZ25pdG9Vc2VyUG9vbCh7IFVzZXJQb29sSWQsIENsaWVudElkLCBTdG9yYWdlOiB0aGlzLnN0b3JhZ2UgfSk7XG4gICAgICBcbiAgICAgIGlmKGlkVG9rZW4pIHtcbiAgICAgICAgY29uc3QgZGVjb2RlZDogYW55ID0gand0RGVjb2RlKGlkVG9rZW4pO1xuICAgICAgICB0aGlzLnVzZXIgPSBuZXcgQ29nbml0b1VzZXIoe1xuICAgICAgICAgICAgVXNlcm5hbWU6IGRlY29kZWRbJ2NvZ25pdG86dXNlcm5hbWUnXSxcbiAgICAgICAgICAgIFBvb2w6IHRoaXMucG9vbCwgXG4gICAgICAgICAgICBTdG9yYWdlOiB0aGlzLnN0b3JhZ2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaWRUb2tlbk9iaiA9IG5ldyBDb2duaXRvSWRUb2tlbih7IElkVG9rZW46IGlkVG9rZW4gfSk7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuT2JqID0gbmV3IENvZ25pdG9BY2Nlc3NUb2tlbih7IEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbiEgfSk7XG4gICAgICAgIGNvbnN0IHJlZnJlc2hUb2tlbk9iaiA9IG5ldyBDb2duaXRvUmVmcmVzaFRva2VuKHsgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW4hIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IENvZ25pdG9Vc2VyU2Vzc2lvbih7IElkVG9rZW46IGlkVG9rZW5PYmosIEFjY2Vzc1Rva2VuOiBhY2Nlc3NUb2tlbk9iaiwgUmVmcmVzaFRva2VuOiByZWZyZXNoVG9rZW5PYmogfSk7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBzZXNzaW9uIHRvIHRoZSBDb2duaXRvIHVzZXJcbiAgICAgICAgdGhpcy51c2VyLnNldFNpZ25JblVzZXJTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlciA9IHRoaXMucG9vbC5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh0aGlzLnVzZXIpO1xuICAgICAgdGhpcy51c2VyPy5nZXRTZXNzaW9uKChlOiBFcnJvciwgc2Vzc2lvbjogbnVsbCkgPT4gdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbikpO1xuICAgICAgcmV0dXJuIHRoaXMudXNlcjtcbiAgfTtcblxuICBwdWJsaWMgbWFnaWNMaW5rQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nLCBTZXNzaW9uSWQ/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ2hhbGxlbmdlUmVzcG9uc2UgPyBDb2duaXRvUmVxdWVzdFR5cGUuTWFnaWNMaW5rIDogQ29nbml0b1JlcXVlc3RUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgIGNvbnN0IGRldGFpbHMgPSBuZXcgQXV0aGVudGljYXRpb25EZXRhaWxzKHsgVXNlcm5hbWUgfSk7XG4gICAgY29uc3QgZGF0YTogYW55ID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgaWYoIXRoaXMudXNlTG9jYWxTdG9yYWdlKSBkYXRhLlN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2U7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlciA/PyBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyLnNldEF1dGhlbnRpY2F0aW9uRmxvd1R5cGUoJ0NVU1RPTV9BVVRIJyk7XG5cbiAgICAvL0B0cy1pZ25vcmVcbiAgICBpZihTZXNzaW9uSWQpIHRoaXMudXNlci5TZXNzaW9uID0gU2Vzc2lvbklkO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jKCByZXNvbHZlOiAocmVzdWx0OiBhbnkpID0+dm9pZCwgcmVqZWN0OiAocmVzdWx0OiBhbnkpID0+IHZvaWQpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXIgPSB7XG4gICAgICAgIG9uU3VjY2VzczogKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikgPT4ge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICAgIHRoaXMudXNlclNvdXJjZS5uZXh0KHRoaXMudXNlcik7XG4gICAgICAgICAgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuQXV0aGVudGljYXRlZCwgc2Vzc2lvbiwgdXNlciwgcmVxdWVzdCB9KVxuICAgICAgICB9LFxuICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KT0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSksXG4gICAgICAgIGN1c3RvbUNoYWxsZW5nZTogKGNoYWxsZW5nZVBhcmFtZXRlcnM6IGFueSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk1hZ2ljTGluaywgdXNlciwgcmVxdWVzdCwgY2hhbGxlbmdlUGFyYW1ldGVycyB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgaWYoQ2hhbGxlbmdlUmVzcG9uc2UpIHVzZXIuc2VuZEN1c3RvbUNoYWxsZW5nZUFuc3dlcihDaGFsbGVuZ2VSZXNwb25zZSwgaGFuZGxlcik7XG4gICAgICBlbHNlIHVzZXIuaW5pdGlhdGVBdXRoKGRldGFpbHMsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBhc3NrZXlBdXRoZW50aWNhdGUoVXNlcm5hbWU6IHN0cmluZywgQ2hhbGxlbmdlUmVzcG9uc2U/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ2hhbGxlbmdlUmVzcG9uc2UgPyBDb2duaXRvUmVxdWVzdFR5cGUuUGFzc2tleSA6IENvZ25pdG9SZXF1ZXN0VHlwZS5BdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lIH0pO1xuICAgIGNvbnN0IGRhdGE6YW55ID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgaWYoIXRoaXMudXNlTG9jYWxTdG9yYWdlKSBkYXRhLlN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2U7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlciA/PyBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyLnNldEF1dGhlbnRpY2F0aW9uRmxvd1R5cGUoJ0NVU1RPTV9BVVRIJyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoIHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT52b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0IH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgY3VzdG9tQ2hhbGxlbmdlOiAoY2hhbGxlbmdlUGFyYW1ldGVyczogYW55KSA9PiByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5QYXNza2V5LCB1c2VyLCByZXF1ZXN0LCBjaGFsbGVuZ2VQYXJhbWV0ZXJzIH0pXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZihDaGFsbGVuZ2VSZXNwb25zZSkgdXNlci5zZW5kQ3VzdG9tQ2hhbGxlbmdlQW5zd2VyKENoYWxsZW5nZVJlc3BvbnNlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgdXNlci5pbml0aWF0ZUF1dGgoZGV0YWlscywgaGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3RwQXV0aGVudGljYXRlKFVzZXJuYW1lOiBzdHJpbmcsIENoYWxsZW5nZVJlc3BvbnNlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENoYWxsZW5nZVJlc3BvbnNlID8gQ29nbml0b1JlcXVlc3RUeXBlLk90cENoYWxsZW5nZSA6IENvZ25pdG9SZXF1ZXN0VHlwZS5BdXRoZW50aWNhdGlvbjtcbiAgICBjb25zdCBkZXRhaWxzID0gbmV3IEF1dGhlbnRpY2F0aW9uRGV0YWlscyh7IFVzZXJuYW1lIH0pO1xuICAgIGNvbnN0IGRhdGE6YW55ID0geyBVc2VybmFtZSwgUG9vbDogdGhpcy5wb29sIH07XG4gICAgaWYoIXRoaXMudXNlTG9jYWxTdG9yYWdlKSBkYXRhLlN0b3JhZ2UgPSB0aGlzLnN0b3JhZ2U7XG4gICAgY29uc3QgdXNlciA9IHRoaXMudXNlciA9IHRoaXMudXNlciA/PyBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyLnNldEF1dGhlbnRpY2F0aW9uRmxvd1R5cGUoJ0NVU1RPTV9BVVRIJyk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMoIHJlc29sdmU6IChyZXN1bHQ6IGFueSkgPT52b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlciA9IHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0IH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpPT4gcmVqZWN0KHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5Ob3RBdXRob3JpemVkLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgY3VzdG9tQ2hhbGxlbmdlOiAoY2hhbGxlbmdlUGFyYW1ldGVyczogYW55KSA9PiByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5PdHBDaGFsbGVuZ2UsIHVzZXIsIHJlcXVlc3QsIGNoYWxsZW5nZVBhcmFtZXRlcnMgfSlcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmKENoYWxsZW5nZVJlc3BvbnNlKSB1c2VyLnNlbmRDdXN0b21DaGFsbGVuZ2VBbnN3ZXIoQ2hhbGxlbmdlUmVzcG9uc2UsIGhhbmRsZXIpO1xuICAgICAgZWxzZSB1c2VyLmluaXRpYXRlQXV0aChkZXRhaWxzLCBoYW5kbGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VySW5mbyh1cmw6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9Vc2VyRGF0YSB8IEh0dHBFcnJvclJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IGAke3VybH0vb2F1dGgyL3VzZXJJbmZvYFxuICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLmhlYWRlcnMoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHJlcXVlc3QsIHsgaGVhZGVycywgd2l0aENyZWRlbnRpYWxzOiB0cnVlIH0gKS5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdDogYW55KSA9PiBcbiAgICAgICAgICB7IHJldHVybiB7XG4gICAgICAgICAgICBlbWFpbDogcmVzdWx0LmVtYWlsLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHJlc3VsdC51c2VybmFtZSxcbiAgICAgICAgICAgIHN1YjogcmVzdWx0LnN1YixcbiAgICAgICAgICAgIGZpcnN0TmFtZTogcmVzdWx0LmdpdmVuX25hbWUsXG4gICAgICAgICAgICBsYXN0TmFtZTogcmVzdWx0LmZhbWlseV9uYW1lLFxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuYWNjZXNzVG9rZW4hLFxuICAgICAgICAgICAgaWRUb2tlbjogdGhpcy5pZFRva2VuIVxuICAgICAgICAgIH19XG4gICAgICAgIClcbiAgICAgKS50b1Byb21pc2UoKTtcblxuICAgIC8vLCBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3JRdWlldGx5KVxuICB9XG5cbiAgcHVibGljIHNldFVzZXJTZXNzaW9uKHNlc3Npb246IENvZ25pdG9Vc2VyU2Vzc2lvbikge1xuICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICB9XG5cbiAgcHVibGljIHNob3dGb3JtKGZvcm06IENvZ25pdG9Gb3JtVHlwZSB8IG51bGwpIHtcbiAgICB0aGlzLmZvcm1Tb3VyY2UubmV4dChmb3JtKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2dvdXQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBhbnkpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogYW55KSA9PiB2b2lkKSA9PiB7XG4gICAgICBpZih0aGlzLnVzZXIpIHtcbiAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KG51bGwpO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImVtc19pZF90b2tlblwiKTtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJlbXNfYWNjZXNzX3Rva2VuXCIpO1xuICAgICAgICB0aGlzLnVzZXIuZ2xvYmFsU2lnbk91dCh7XG4gICAgICAgICAgb25TdWNjZXNzOiByZXNvbHZlLFxuICAgICAgICAgIG9uRmFpbHVyZTogKCkgPT4ge1xuICAgICAgICAgICAgLy9pZiB1c2VyIGlzIGRpc2FibGVkLCBtdXN0IG1hbnVhbGx5IGNsZWFyIGxvY2FsIHN0b3JhZ2UgKGFwcGFyZW50bHkpXG4gICAgICAgICAgICBmb3IobGV0IHByb3AgaW4gbG9jYWxTdG9yYWdlKSB7XG4gICAgICAgICAgICAgIGlmKHByb3AubWF0Y2goL2NvZ25pdG8vaSkpIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUoVXNlcm5hbWU6IHN0cmluZywgUGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IGRldGFpbHMgPSBuZXcgQXV0aGVudGljYXRpb25EZXRhaWxzKHsgVXNlcm5hbWUsIFBhc3N3b3JkfSk7XG4gICAgY29uc3QgZGF0YTphbnkgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBpZighdGhpcy51c2VMb2NhbFN0b3JhZ2UpIGRhdGEuU3RvcmFnZSA9IHRoaXMuc3RvcmFnZTtcbiAgICBjb25zdCB1c2VyID0gbmV3IENvZ25pdG9Vc2VyKGRhdGEpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogYW55KSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IGFueSkgPT4gdm9pZCkgPT4ge1xuICAgICAgICBpZighdGhpcy51c2VyKSB0aGlzLmF1dGhlbnRpY2F0ZVVzZXIodXNlciwgZGV0YWlscywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgZWxzZSB0aGlzLmdldFVzZXJTZXNzaW9uKHJlc29sdmUsIHJlamVjdClcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGZWRlcmF0ZWRTZXNzaW9uKElkVG9rZW46IHN0cmluZywgQWNjZXNzVG9rZW46IHN0cmluZykge1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IG5ldyBDb2duaXRvVXNlclNlc3Npb24oe1xuICAgICAgICAgIElkVG9rZW46IG5ldyBDb2duaXRvSWRUb2tlbih7IElkVG9rZW4gfSksXG4gICAgICAgICAgQWNjZXNzVG9rZW46IG5ldyBDb2duaXRvQWNjZXNzVG9rZW4oeyBBY2Nlc3NUb2tlbiB9KSxcbiAgICB9KTtcblxuICAgIGNvbnN0IFVzZXJuYW1lID0gc2Vzc2lvbi5nZXRJZFRva2VuKCkucGF5bG9hZFtcImNvZ25pdG86dXNlcm5hbWVcIl07XG4gICAgY29uc3QgZGF0YTphbnkgPSB7IFVzZXJuYW1lLCBQb29sOiB0aGlzLnBvb2wgfTtcbiAgICBpZighdGhpcy51c2VMb2NhbFN0b3JhZ2UpIGRhdGEuU3RvcmFnZSA9IHRoaXMuc3RvcmFnZTtcbiAgICB0aGlzLnVzZXIgPSBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgdGhpcy51c2VyU291cmNlLm5leHQodGhpcy51c2VyKTtcbiAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBjb21wbGV0ZVBhc3N3b3JkVXBkYXRlKHBhc3N3b3JkOiBzdHJpbmcsIHVzZXI6IENvZ25pdG9Vc2VyLCBhdHRyaWJ1dGVzOiBhbnkpOiBQcm9taXNlPElDb2duaXRvUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0gQ29nbml0b1JlcXVlc3RUeXBlLk5ld1VzZXJQYXNzd29yZFJlc2V0O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkKSA9PiB7XG4gICAgICB1c2VyLmNvbXBsZXRlTmV3UGFzc3dvcmRDaGFsbGVuZ2UocGFzc3dvcmQsIGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICB0aGlzLnVzZXJTb3VyY2UubmV4dCh1c2VyKTtcbiAgICAgICAgICB0aGlzLnNlc3Npb25Tb3VyY2UubmV4dChzZXNzaW9uKTtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0OiBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb24gfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpID0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTm90QXV0aG9yaXplZCwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVxdWVzdFZlcmlmaWNhdGlvbkNvZGUoVXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHsgVXNlcm5hbWUsIFBvb2w6IHRoaXMucG9vbCB9O1xuICAgIGlmKCF0aGlzLnVzZUxvY2FsU3RvcmFnZSkgZGF0YS5TdG9yYWdlID0gdGhpcy5zdG9yYWdlO1xuICAgIGNvbnN0IHVzZXIgPSBuZXcgQ29nbml0b1VzZXIoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuZm9yZ290UGFzc3dvcmQodXNlcik7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRQYXNzd29yZCh1c2VyOiBDb2duaXRvVXNlciwgb2xkUGFzc3dvcmQ6IHN0cmluZywgbmV3UGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8SUNvZ25pdG9SZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuUGFzc3dvcmRSZXNldDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCkgPT4ge1xuICAgICAgIHVzZXIuY2hhbmdlUGFzc3dvcmQob2xkUGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCAoZXJyb3IsIHJlc3VsdCkgPT4ge1xuICAgICAgICAgaWYoZXJyb3IpIHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTGltaXRFeGNlZWRlZEV4Y2VwdGlvbiwgdXNlciwgcmVxdWVzdCwgZXJyb3IsIHNlc3Npb246IG51bGx9KTtcbiAgICAgICAgIGVsc2UgcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuU3VjY2VzcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KTtcbiAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGZvcmdvdFBhc3N3b3JkKHVzZXI6IENvZ25pdG9Vc2VyKTogUHJvbWlzZTxJQ29nbml0b1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENvZ25pdG9SZXF1ZXN0VHlwZS5Gb3Jnb3RQYXNzd29yZDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCkgPT4ge1xuICAgICAgIHVzZXIuZm9yZ290UGFzc3dvcmQoe1xuICAgICAgICAgb25TdWNjZXNzOiAocmVzcG9uc2U6IGFueSkgPT4gcmVzb2x2ZSh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuU3VjY2VzcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KSxcbiAgICAgICAgIG9uRmFpbHVyZTogKGVycm9yOiBhbnkpID0+IHJlamVjdCh7IHR5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuTGltaXRFeGNlZWRlZEV4Y2VwdGlvbiwgZXJyb3IsIHVzZXIsIHJlcXVlc3QsIHNlc3Npb246IG51bGwgfSlcbiAgICAgICB9KVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNvbmZpcm1QYXNzd29yZCh1c2VyOiBDb2duaXRvVXNlciwgY29kZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxJQ29nbml0b1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVxdWVzdCA9IENvZ25pdG9SZXF1ZXN0VHlwZS5Db25maXJtUGFzc3dvcmQ7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkLCByZWplY3Q6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQpID0+IHtcbiAgICAgICB1c2VyLmNvbmZpcm1QYXNzd29yZChjb2RlLCBwYXNzd29yZCwge1xuICAgICAgICAgb25TdWNjZXNzOiAocmVzcG9uc2U6IGFueSkgPT4geyByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5TdWNjZXNzLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pIH0sXG4gICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkludmFsaWRDb2RlLCBlcnJvciwgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KVxuICAgICAgIH0pXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF1dGhlbnRpY2F0ZVVzZXIodXNlcjogQ29nbml0b1VzZXIsIGRldGFpbHM6IEF1dGhlbnRpY2F0aW9uRGV0YWlscywgcmVzb2x2ZTogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCwgcmVqZWN0OiAocmVzdWx0OiBJQ29nbml0b1Jlc3BvbnNlKSA9PiB2b2lkICkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgdXNlci5hdXRoZW50aWNhdGVVc2VyKGRldGFpbHMsIHtcbiAgICAgICAgb25TdWNjZXNzOiAoc2Vzc2lvbjogQ29nbml0b1VzZXJTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uU291cmNlLm5leHQoc2Vzc2lvbik7XG4gICAgICAgICAgdGhpcy51c2VyU291cmNlLm5leHQodXNlcik7XG4gICAgICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyLCByZXF1ZXN0IH0pO1xuICAgICAgICB9LFxuICAgICAgICBvbkZhaWx1cmU6IChlcnJvcjogYW55KSA9PiByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLk5vdEF1dGhvcml6ZWQsIGVycm9yLCB1c2VyLCByZXF1ZXN0LCBzZXNzaW9uOiBudWxsIH0pLFxuICAgICAgICBuZXdQYXNzd29yZFJlcXVpcmVkOiAodXNlckF0dHJpYnV0ZXMsIHJlcXVpcmVkQXR0cmlidXRlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoe3R5cGU6IENvZ25pdG9SZXNwb25zZVR5cGUuUGFzc3dvcmRSZXNldCwgdXNlckF0dHJpYnV0ZXMsIHJlcXVpcmVkQXR0cmlidXRlcywgdXNlciwgcmVxdWVzdCwgc2Vzc2lvbjogbnVsbCB9KVxuICAgICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFVzZXJTZXNzaW9uKHJlc29sdmU6IChyZXN1bHQ6IElDb2duaXRvUmVzcG9uc2UpID0+IHZvaWQsIHJlamVjdDogKHJlc3VsdDogSUNvZ25pdG9SZXNwb25zZSkgPT4gdm9pZCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBDb2duaXRvUmVxdWVzdFR5cGUuQXV0aGVudGljYXRpb247XG4gICAgdGhpcy51c2VyIS5nZXRTZXNzaW9uKChlcnJvcjogRXJyb3IsIHNlc3Npb246IG51bGwpID0+IHtcbiAgICAgIGlmKGVycm9yKSByZWplY3QoeyB0eXBlOiBDb2duaXRvUmVzcG9uc2VUeXBlLkF1dGhlbnRpY2F0ZWQsIHNlc3Npb24sIHVzZXI6IHRoaXMudXNlciEsIHJlcXVlc3QsIGVycm9yIH0pO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuc2Vzc2lvblNvdXJjZS5uZXh0KHNlc3Npb24pO1xuICAgICAgICByZXNvbHZlKHsgdHlwZTogQ29nbml0b1Jlc3BvbnNlVHlwZS5BdXRoZW50aWNhdGVkLCBzZXNzaW9uLCB1c2VyOiB0aGlzLnVzZXIhLCByZXF1ZXN0IH0pO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUVycm9yUXVpZXRseShlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICByZXR1cm4gb2YoZXJyb3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBoZWFkZXJzKGN1c3RvbTogYW55ID0ge30pIHtcbiAgICBjb25zdCBoZWFkZXJzID0geyBcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgICBcIkF1dGhvcml6YXRpb25cIjogdGhpcy5hY2Nlc3NUb2tlbiA/IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VufWAgOiBcIlwiXG4gICAgICAgfTtcbiAgICByZXR1cm4gbmV3IEh0dHBIZWFkZXJzKGhlYWRlcnMpO1xuICB9XG59XG4iXX0=
@@ -80,21 +80,17 @@ class EphemeralStorage {
80
80
  this._cache = {};
81
81
  }
82
82
  getItem(key) {
83
- console.log(`getting: ${key}: ${this._cache[key]}`, this._cache);
84
83
  return this._cache[key];
85
84
  }
86
85
  setItem(key, value) {
87
- console.log(`setting: ${key}: ${value}`);
88
86
  this._cache[key] = value;
89
87
  return this.getItem(key);
90
88
  }
91
89
  removeItem(key) {
92
90
  delete this._cache[key];
93
- console.log(`deleting: ${key}`, this._cache);
94
91
  }
95
92
  clear() {
96
93
  this._cache = {};
97
- console.log(`clearing`, this._cache);
98
94
  }
99
95
  }
100
96
 
@@ -142,14 +138,17 @@ class CognitoService {
142
138
  this.formSource = new BehaviorSubject(null);
143
139
  this.form$ = this.formSource.asObservable();
144
140
  this.user = null;
141
+ this.storage = new EphemeralStorage();
142
+ this.useLocalStorage = true;
145
143
  }
146
- initialize(UserPoolId, ClientId, useLocalStorage, idToken, accessToken, refreshToken) {
144
+ initialize(UserPoolId, ClientId, useLocalStorage = true, idToken, accessToken, refreshToken) {
147
145
  var _a, _b, _c, _d, _e, _f, _g, _h, _j;
148
146
  //for federated users
149
147
  const access = (_c = (_b = (_a = params("access_token")) !== null && _a !== void 0 ? _a : accessToken) !== null && _b !== void 0 ? _b : localStorage.getItem("ems_access_token")) !== null && _c !== void 0 ? _c : null;
150
148
  const id = (_f = (_e = (_d = params("id_token")) !== null && _d !== void 0 ? _d : idToken) !== null && _e !== void 0 ? _e : localStorage.getItem("ems_id_token")) !== null && _f !== void 0 ? _f : null;
151
149
  const sessionId = (_g = params("sessionId")) !== null && _g !== void 0 ? _g : null;
152
150
  const otp = (_h = params("otp")) !== null && _h !== void 0 ? _h : null;
151
+ this.useLocalStorage = useLocalStorage;
153
152
  if (useLocalStorage && access && id) {
154
153
  localStorage.setItem("ems_access_token", access);
155
154
  localStorage.setItem("ems_id_token", id);
@@ -170,16 +169,13 @@ class CognitoService {
170
169
  }
171
170
  setCognitoUserFromToken(UserPoolId, ClientId, idToken, accessToken, refreshToken) {
172
171
  var _a;
173
- console.log("using ephemeral storage");
174
- const Storage = new EphemeralStorage();
175
- this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage });
172
+ this.pool = new CognitoUserPool({ UserPoolId, ClientId, Storage: this.storage });
176
173
  if (idToken) {
177
174
  const decoded = jwtDecode(idToken);
178
- console.log(decoded);
179
175
  this.user = new CognitoUser({
180
176
  Username: decoded['cognito:username'],
181
177
  Pool: this.pool,
182
- Storage
178
+ Storage: this.storage
183
179
  });
184
180
  const idTokenObj = new CognitoIdToken({ IdToken: idToken });
185
181
  const accessTokenObj = new CognitoAccessToken({ AccessToken: accessToken });
@@ -201,6 +197,8 @@ class CognitoService {
201
197
  const request = ChallengeResponse ? CognitoRequestType.MagicLink : CognitoRequestType.Authentication;
202
198
  const details = new AuthenticationDetails({ Username });
203
199
  const data = { Username, Pool: this.pool };
200
+ if (!this.useLocalStorage)
201
+ data.Storage = this.storage;
204
202
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
205
203
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
206
204
  //@ts-ignore
@@ -229,6 +227,8 @@ class CognitoService {
229
227
  const request = ChallengeResponse ? CognitoRequestType.Passkey : CognitoRequestType.Authentication;
230
228
  const details = new AuthenticationDetails({ Username });
231
229
  const data = { Username, Pool: this.pool };
230
+ if (!this.useLocalStorage)
231
+ data.Storage = this.storage;
232
232
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
233
233
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
234
234
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
@@ -252,6 +252,8 @@ class CognitoService {
252
252
  const request = ChallengeResponse ? CognitoRequestType.OtpChallenge : CognitoRequestType.Authentication;
253
253
  const details = new AuthenticationDetails({ Username });
254
254
  const data = { Username, Pool: this.pool };
255
+ if (!this.useLocalStorage)
256
+ data.Storage = this.storage;
255
257
  const user = this.user = (_a = this.user) !== null && _a !== void 0 ? _a : new CognitoUser(data);
256
258
  this.user.setAuthenticationFlowType('CUSTOM_AUTH');
257
259
  return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
@@ -319,6 +321,8 @@ class CognitoService {
319
321
  authenticate(Username, Password) {
320
322
  const details = new AuthenticationDetails({ Username, Password });
321
323
  const data = { Username, Pool: this.pool };
324
+ if (!this.useLocalStorage)
325
+ data.Storage = this.storage;
322
326
  const user = new CognitoUser(data);
323
327
  return new Promise((resolve, reject) => {
324
328
  if (!this.user)
@@ -334,6 +338,8 @@ class CognitoService {
334
338
  });
335
339
  const Username = session.getIdToken().payload["cognito:username"];
336
340
  const data = { Username, Pool: this.pool };
341
+ if (!this.useLocalStorage)
342
+ data.Storage = this.storage;
337
343
  this.user = new CognitoUser(data);
338
344
  this.userSource.next(this.user);
339
345
  this.sessionSource.next(session);
@@ -354,6 +360,8 @@ class CognitoService {
354
360
  }
355
361
  requestVerificationCode(Username) {
356
362
  const data = { Username, Pool: this.pool };
363
+ if (!this.useLocalStorage)
364
+ data.Storage = this.storage;
357
365
  const user = new CognitoUser(data);
358
366
  return this.forgotPassword(user);
359
367
  }