valtech-components 2.0.724 → 2.0.726
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/templates/auth-background/auth-background.component.mjs +5 -5
- package/esm2022/lib/services/auth/handoff.service.mjs +152 -0
- package/esm2022/lib/services/auth/index.mjs +5 -1
- package/esm2022/lib/services/auth/org-switch.service.mjs +137 -0
- package/esm2022/lib/services/firebase/firestore-collection.mjs +10 -2
- package/esm2022/lib/services/firebase/firestore.service.mjs +22 -1
- package/esm2022/lib/services/firebase/shared-config.mjs +63 -30
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +374 -36
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/services/auth/handoff.service.d.ts +149 -0
- package/lib/services/auth/index.d.ts +4 -0
- package/lib/services/auth/org-switch.service.d.ts +127 -0
- package/lib/services/firebase/firestore-collection.d.ts +12 -1
- package/lib/services/firebase/firestore.service.d.ts +18 -0
- package/lib/services/firebase/shared-config.d.ts +61 -28
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -79,11 +79,11 @@ export class AuthBackgroundComponent {
|
|
|
79
79
|
color,
|
|
80
80
|
thickness: isThick ? 1.2 : isMedium ? 0.7 : 0.3,
|
|
81
81
|
opacity: isThick ? 0.5 : isMedium ? 0.4 : 0.3,
|
|
82
|
-
// Pulse vertical (equalizer) —
|
|
83
|
-
pulseDuration:
|
|
82
|
+
// Pulse vertical (equalizer) — ~1/3 de las waves son "rápidas"
|
|
83
|
+
pulseDuration: Math.random() < 0.33 ? 0.8 + Math.random() * 0.8 : 1.6 + Math.random() * 2.4,
|
|
84
84
|
pulseDelay: -Math.random() * 4,
|
|
85
|
-
// Traveling horizontal — más
|
|
86
|
-
travelDuration:
|
|
85
|
+
// Traveling horizontal — ~1/3 más rápidas para sensación de ecualizador
|
|
86
|
+
travelDuration: Math.random() < 0.33 ? 5 + Math.random() * 4 : 10 + Math.random() * 12,
|
|
87
87
|
travelDelay: -Math.random() * 12,
|
|
88
88
|
travelDirection: i % 2 === 0 ? 'right' : 'left',
|
|
89
89
|
};
|
|
@@ -161,4 +161,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
161
161
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
162
162
|
type: Input
|
|
163
163
|
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1iYWNrZ3JvdW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvYXV0aC1iYWNrZ3JvdW5kL2F1dGgtYmFja2dyb3VuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZ0IvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBbU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsSUFDSSxLQUFLLENBQUMsS0FBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBa0JEO1FBM0JRLFdBQU0sR0FBRyxNQUFNLENBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBVzVDLGtCQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25GLGdCQUFXLEdBQUcsTUFBTSxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQ2hDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhO2dCQUNsRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsS0FBSyxLQUFLO2dCQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxxQkFBcUI7YUFDcEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUd6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGVBQWU7UUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDOUIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUU1QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3RELDBFQUEwRTtZQUMxRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNwQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUV6QyxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFMUMsOEVBQThFO1lBQzlFLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDckYsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBRWhFLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsSUFBSTtnQkFDSixLQUFLO2dCQUNMLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0JBQy9DLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUc7Z0JBQzdDLHlEQUF5RDtnQkFDekQsYUFBYSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztnQkFDdEMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7Z0JBQzlCLDREQUE0RDtnQkFDNUQsY0FBYyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDdkMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7Z0JBQ2hDLGVBQWUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsT0FBaUIsQ0FBQyxDQUFDLENBQUUsTUFBZ0I7YUFDdEUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0F6RVUsdUJBQXVCO21HQUF2Qix1QkFBdUIsMkdBOUx4Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVCw0ekZBaENTLFlBQVk7OzRGQStMWCx1QkFBdUI7a0JBbE1uQyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsWUFDYjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStCVDt3REFtS0csS0FBSztzQkFEUixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEF1dGhCYWNrZ3JvdW5kTWV0YWRhdGEgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFdhdmVEYXRhIHtcbiAgaWQ6IG51bWJlcjtcbiAgcGF0aDogc3RyaW5nO1xuICBjb2xvcjogc3RyaW5nO1xuICB0aGlja25lc3M6IG51bWJlcjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICBwdWxzZUR1cmF0aW9uOiBudW1iZXI7XG4gIHB1bHNlRGVsYXk6IG51bWJlcjtcbiAgdHJhdmVsRHVyYXRpb246IG51bWJlcjtcbiAgdHJhdmVsRGVsYXk6IG51bWJlcjtcbiAgdHJhdmVsRGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnO1xufVxuXG4vKipcbiAqIHZhbC1hdXRoLWJhY2tncm91bmRcbiAqXG4gKiBBIHZpc3VhbGx5IHN0cmlraW5nIGJhY2tncm91bmQgY29tcG9uZW50IGZvciBhdXRoZW50aWNhdGlvbiBwYWdlcy5cbiAqIEZlYXR1cmVzIGFuaW1hdGVkIHdhdmUgcGF0dGVybnMsIGdyYWluIHRleHR1cmUsIGFuZCBnbGFzc21vcnBoaXNtIGVmZmVjdHMuXG4gKiBTdXBwb3J0cyBkYXJrIG1vZGUgYXV0b21hdGljYWxseSB2aWEgQ1NTIHZhcmlhYmxlcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgaHRtbFxuICogPHZhbC1hdXRoLWJhY2tncm91bmQ+XG4gKiAgIDxkaXYgY2xhc3M9XCJteS1jb250ZW50XCI+XG4gKiAgICAgPGgxPldlbGNvbWU8L2gxPlxuICogICAgIDx2YWwtbG9naW4gW3Byb3BzXT1cImxvZ2luUHJvcHNcIiAvPlxuICogICA8L2Rpdj5cbiAqIDwvdmFsLWF1dGgtYmFja2dyb3VuZD5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEN1c3RvbSBjb25maWd1cmF0aW9uXG4gKiBgYGBodG1sXG4gKiA8dmFsLWF1dGgtYmFja2dyb3VuZCBbcHJvcHNdPVwie1xuICogICB3YXZlQ291bnQ6IDMwLFxuICogICBzaG93R3JhaW46IGZhbHNlLFxuICogICBtaW5IZWlnaHQ6ICcxMDB2aCdcbiAqIH1cIj5cbiAqICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj4uLi48L2Rpdj5cbiAqIDwvdmFsLWF1dGgtYmFja2dyb3VuZD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtYXV0aC1iYWNrZ3JvdW5kJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJhdXRoLWJhY2tncm91bmRcIiBbc3R5bGUubWluLWhlaWdodF09XCJjb25maWcoKS5taW5IZWlnaHRcIj5cbiAgICAgIEBpZiAoY29uZmlnKCkuc2hvd0dyYWluKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmFpblwiPjwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChjb25maWcoKS5zaG93R2xhc3MpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdsYXNzLWxheWVyXCI+PC9kaXY+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1iZ1wiPlxuICAgICAgICA8c3ZnIGNsYXNzPVwid2F2ZXNcIiB2aWV3Qm94PVwiMCAwIDE0NDAgODAwXCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIj5cbiAgICAgICAgICBAZm9yICh3YXZlIG9mIHdhdmVzKCk7IHRyYWNrIHdhdmUuaWQpIHtcbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIFthdHRyLmRdPVwid2F2ZS5wYXRoXCJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cIndhdmUuY29sb3JcIlxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwid2F2ZS50aGlja25lc3NcIlxuICAgICAgICAgICAgICBbY2xhc3MudHJhdmVsLWxlZnRdPVwid2F2ZS50cmF2ZWxEaXJlY3Rpb24gPT09ICdsZWZ0J1wiXG4gICAgICAgICAgICAgIFtjbGFzcy50cmF2ZWwtcmlnaHRdPVwid2F2ZS50cmF2ZWxEaXJlY3Rpb24gPT09ICdyaWdodCdcIlxuICAgICAgICAgICAgICBbc3R5bGUub3BhY2l0eV09XCJ3YXZlLm9wYWNpdHlcIlxuICAgICAgICAgICAgICBbc3R5bGUuLS1wdWxzZS1kdXJhdGlvbl09XCJ3YXZlLnB1bHNlRHVyYXRpb24gKyAncydcIlxuICAgICAgICAgICAgICBbc3R5bGUuLS1wdWxzZS1kZWxheV09XCJ3YXZlLnB1bHNlRGVsYXkgKyAncydcIlxuICAgICAgICAgICAgICBbc3R5bGUuLS10cmF2ZWwtZHVyYXRpb25dPVwid2F2ZS50cmF2ZWxEdXJhdGlvbiArICdzJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXRyYXZlbC1kZWxheV09XCJ3YXZlLnRyYXZlbERlbGF5ICsgJ3MnXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudC1sYXllclwiPlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC8qIFRoZW1lIHZhcmlhYmxlcyAtIExpZ2h0IG1vZGUgKGRlZmF1bHQpICovXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAtLWF1dGgtYmctc3RhcnQ6ICNmZmZmZmY7XG4gICAgICAgIC0tYXV0aC1iZy1taWQ6ICNmOGY5ZmE7XG4gICAgICAgIC0tYXV0aC1iZy1lbmQ6ICNmMGYwZjA7XG4gICAgICAgIC0tYXV0aC1nbGFzcy1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpO1xuICAgICAgICAtLWF1dGgtZ3JhaW4tb3BhY2l0eTogMC4wMzU7XG4gICAgICAgIC0tYXV0aC13YXZlLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzYzNjZmMSk7XG4gICAgICB9XG5cbiAgICAgIC8qIERhcmsgbW9kZSAtIFN5c3RlbSBwcmVmZXJlbmNlICovXG4gICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLWF1dGgtYmctc3RhcnQ6ICMwZjBmMWE7XG4gICAgICAgICAgLS1hdXRoLWJnLW1pZDogIzFhMWEyZTtcbiAgICAgICAgICAtLWF1dGgtYmctZW5kOiAjMTYyMTNlO1xuICAgICAgICAgIC0tYXV0aC1nbGFzcy1iZzogcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAgICAgICAgIC0tYXV0aC1ncmFpbi1vcGFjaXR5OiAwLjA1O1xuICAgICAgICAgIC0tYXV0aC13YXZlLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzgxOGNmOCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLyogRGFyayBtb2RlIC0gQ2xhc3MtYmFzZWQgKGZvciB0b2dnbGUgc3VwcG9ydCkgKi9cbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSB7XG4gICAgICAgIC0tYXV0aC1iZy1zdGFydDogIzBmMGYxYTtcbiAgICAgICAgLS1hdXRoLWJnLW1pZDogIzFhMWEyZTtcbiAgICAgICAgLS1hdXRoLWJnLWVuZDogIzE2MjEzZTtcbiAgICAgICAgLS1hdXRoLWdsYXNzLWJnOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICAgIC0tYXV0aC1ncmFpbi1vcGFjaXR5OiAwLjA1O1xuICAgICAgICAtLWF1dGgtd2F2ZS1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnksICM4MThjZjgpO1xuICAgICAgfVxuXG4gICAgICAuYXV0aC1iYWNrZ3JvdW5kIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCB2YXIoLS1hdXRoLWJnLXN0YXJ0KSAwJSwgdmFyKC0tYXV0aC1iZy1taWQpIDUwJSwgdmFyKC0tYXV0aC1iZy1lbmQpIDEwMCUpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAuZ3JhaW4ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMDtcbiAgICAgICAgb3BhY2l0eTogdmFyKC0tYXV0aC1ncmFpbi1vcGFjaXR5KTtcbiAgICAgICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB2aWV3Qm94PScwIDAgMjU2IDI1NicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2ZpbHRlciBpZD0nbm9pc2UnJTNFJTNDZmVUdXJidWxlbmNlIHR5cGU9J2ZyYWN0YWxOb2lzZScgYmFzZUZyZXF1ZW5jeT0nMC41JyBudW1PY3RhdmVzPScyJyBzdGl0Y2hUaWxlcz0nc3RpdGNoJy8lM0UlM0MvZmlsdGVyJTNFJTNDcmVjdCB3aWR0aD0nMTAwJTI1JyBoZWlnaHQ9JzEwMCUyNScgZmlsdGVyPSd1cmwoJTIzbm9pc2UpJy8lM0UlM0Mvc3ZnJTNFXCIpO1xuICAgICAgfVxuXG4gICAgICAuZ2xhc3MtbGF5ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYXV0aC1nbGFzcy1iZyk7XG4gICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigzcHgpIHNhdHVyYXRlKDEyMCUpO1xuICAgICAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigzcHgpIHNhdHVyYXRlKDEyMCUpO1xuICAgICAgfVxuXG4gICAgICAud2F2ZS1iZyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAwO1xuICAgICAgICB0cmFuc2l0aW9uOiBmaWx0ZXIgMC4zcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAvKiBJbnZlcnQgd2F2ZXMgaW4gZGFyayBtb2RlICovXG4gICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7XG4gICAgICAgIC53YXZlLWJnIHtcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxKSBvcGFjaXR5KDAuNik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC53YXZlLWJnLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLndhdmUtYmcsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC53YXZlLWJnIHtcbiAgICAgICAgZmlsdGVyOiBpbnZlcnQoMSkgb3BhY2l0eSgwLjYpO1xuICAgICAgfVxuXG4gICAgICAud2F2ZXMge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLndhdmVzIHBhdGgge1xuICAgICAgICBmaWxsOiBub25lO1xuICAgICAgICB0cmFuc2Zvcm0tYm94OiBmaWxsLWJveDtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgd2F2ZS1wdWxzZSB2YXIoLS1wdWxzZS1kdXJhdGlvbiwgM3MpIGVhc2UtaW4tb3V0IHZhcigtLXB1bHNlLWRlbGF5LCAwcykgaW5maW5pdGUgYWx0ZXJuYXRlLFxuICAgICAgICAgIHdhdmUtdHJhdmVsLXJpZ2h0IHZhcigtLXRyYXZlbC1kdXJhdGlvbiwgMTJzKSBsaW5lYXIgdmFyKC0tdHJhdmVsLWRlbGF5LCAwcykgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC53YXZlcyBwYXRoLnRyYXZlbC1sZWZ0IHtcbiAgICAgICAgYW5pbWF0aW9uOlxuICAgICAgICAgIHdhdmUtcHVsc2UgdmFyKC0tcHVsc2UtZHVyYXRpb24sIDNzKSBlYXNlLWluLW91dCB2YXIoLS1wdWxzZS1kZWxheSwgMHMpIGluZmluaXRlIGFsdGVybmF0ZSxcbiAgICAgICAgICB3YXZlLXRyYXZlbC1sZWZ0IHZhcigtLXRyYXZlbC1kdXJhdGlvbiwgMTJzKSBsaW5lYXIgdmFyKC0tdHJhdmVsLWRlbGF5LCAwcykgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC8qIFZlcnRpY2FsIGJyZWF0aGluZyDigJQgZXF1YWxpemVyLXN0eWxlIHB1bHNlIHBlciB3YXZlICovXG4gICAgICBAa2V5ZnJhbWVzIHdhdmUtcHVsc2Uge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVkoMC44NSk7XG4gICAgICAgIH1cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgxLjI1KTtcbiAgICAgICAgfVxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgwLjg1KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBIb3Jpem9udGFsIHRyYXZlbGluZyDigJQgbGlrZSBzb3VuZCB0cmF2ZWxpbmcgYWNyb3NzIHRoZSBjYW52YXMgKi9cbiAgICAgIEBrZXlmcmFtZXMgd2F2ZS10cmF2ZWwtcmlnaHQge1xuICAgICAgICBmcm9tIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTMwMHB4KTtcbiAgICAgICAgfVxuICAgICAgICB0byB7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDMwMHB4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIHdhdmUtdHJhdmVsLWxlZnQge1xuICAgICAgICBmcm9tIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzAwcHgpO1xuICAgICAgICB9XG4gICAgICAgIHRvIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTMwMHB4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBSZWR1Y2VkIG1vdGlvbiDigJQga2VlcCB3YXZlcyBzdGlsbCAqL1xuICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAgICAgLndhdmVzIHBhdGgge1xuICAgICAgICAgIGFuaW1hdGlvbjogbm9uZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY29udGVudC1sYXllciB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoQmFja2dyb3VuZENvbXBvbmVudCB7XG4gIHByaXZhdGUgX3Byb3BzID0gc2lnbmFsPEF1dGhCYWNrZ3JvdW5kTWV0YWRhdGE+KHt9KTtcblxuICBASW5wdXQoKVxuICBzZXQgcHJvcHModmFsdWU6IEF1dGhCYWNrZ3JvdW5kTWV0YWRhdGEpIHtcbiAgICB0aGlzLl9wcm9wcy5zZXQodmFsdWUpO1xuICAgIHRoaXMucmVnZW5lcmF0ZVdhdmVzKCk7XG4gIH1cbiAgZ2V0IHByb3BzKCk6IEF1dGhCYWNrZ3JvdW5kTWV0YWRhdGEge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q29sb3JzID0gWycjZTBlMGUwJywgJyNiZGJkYmQnLCAnIzllOWU5ZScsICcjNzU3NTc1JywgJyM2MTYxNjEnLCAnIzQyNDI0MiddO1xuICBwcml2YXRlIHdhdmVzU2lnbmFsID0gc2lnbmFsPFdhdmVEYXRhW10+KFtdKTtcblxuICBjb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLl9wcm9wcygpO1xuICAgIHJldHVybiB7XG4gICAgICB3YXZlQ291bnQ6IHByb3BzLndhdmVDb3VudCA/PyA0NSxcbiAgICAgIHdhdmVDb2xvcnM6IHByb3BzLndhdmVDb2xvcnMgPz8gdGhpcy5kZWZhdWx0Q29sb3JzLFxuICAgICAgc2hvd0dyYWluOiBwcm9wcy5zaG93R3JhaW4gIT09IGZhbHNlLFxuICAgICAgc2hvd0dsYXNzOiBwcm9wcy5zaG93R2xhc3MgIT09IGZhbHNlLFxuICAgICAgbWluSGVpZ2h0OiBwcm9wcy5taW5IZWlnaHQgPz8gJ2NhbGMoMTAwdmggLSAxMjBweCknLFxuICAgIH07XG4gIH0pO1xuXG4gIHdhdmVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy53YXZlc1NpZ25hbCgpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlZ2VuZXJhdGVXYXZlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdlbmVyYXRlV2F2ZXMoKTogdm9pZCB7XG4gICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICBjb25zdCBjb2xvcnMgPSBjZmcud2F2ZUNvbG9ycztcbiAgICBjb25zdCBjb3VudCA9IGNmZy53YXZlQ291bnQ7XG5cbiAgICBjb25zdCBuZXdXYXZlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0sIChfLCBpKSA9PiB7XG4gICAgICAvLyBEaXN0cmlidWlyIHVuaWZvcm1lIGEgbG8gbGFyZ28gZGVsIHZpZXdCb3ggKDAuLjgwMCkg4oCUIHNpbiBodWVjb3MgYXJyaWJhXG4gICAgICBjb25zdCB5ID0gKChpICsgMC41KSAvIGNvdW50KSAqIDgwMDtcbiAgICAgIGNvbnN0IGlzVGhpY2sgPSBpICUgNSA9PT0gMDtcbiAgICAgIGNvbnN0IGlzTWVkaXVtID0gaSAlIDMgPT09IDAgJiYgIWlzVGhpY2s7XG5cbiAgICAgIGNvbnN0IGFtcGxpdHVkZSA9IDEwICsgTWF0aC5yYW5kb20oKSAqIDIwO1xuICAgICAgY29uc3QgZnJlcXVlbmN5ID0gMSArIE1hdGgucmFuZG9tKCkgKiAyO1xuICAgICAgY29uc3QgcGhhc2UgPSBNYXRoLnJhbmRvbSgpICogTWF0aC5QSSAqIDI7XG5cbiAgICAgIC8vIFBhdGggZXh0ZW5kaWRvIG9mZi1jYW52YXMgKC00MDAgLi4gMTg0MCkgcGFyYSBxdWUgdHJhbnNsYXRlWCBubyBkZWplIGh1ZWNvc1xuICAgICAgbGV0IHBhdGggPSBgTS00MDAsJHt5fWA7XG4gICAgICBmb3IgKGxldCB4ID0gLTQwMDsgeCA8PSAxODQwOyB4ICs9IDQwKSB7XG4gICAgICAgIGNvbnN0IHdhdmVZID0geSArIGFtcGxpdHVkZSAqIE1hdGguc2luKCh4IC8gMTQ0MCkgKiBNYXRoLlBJICogZnJlcXVlbmN5ICogMiArIHBoYXNlKTtcbiAgICAgICAgcGF0aCArPSBgIEwke3h9LCR7d2F2ZVkudG9GaXhlZCgxKX1gO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2xvciA9IGNvbG9yc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjb2xvcnMubGVuZ3RoKV07XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpLFxuICAgICAgICBwYXRoLFxuICAgICAgICBjb2xvcixcbiAgICAgICAgdGhpY2tuZXNzOiBpc1RoaWNrID8gMS4yIDogaXNNZWRpdW0gPyAwLjcgOiAwLjMsXG4gICAgICAgIG9wYWNpdHk6IGlzVGhpY2sgPyAwLjUgOiBpc01lZGl1bSA/IDAuNCA6IDAuMyxcbiAgICAgICAgLy8gUHVsc2UgdmVydGljYWwgKGVxdWFsaXplcikg4oCUIGR1cmFjacOzbiB2YXJpYWRhIHBvciB3YXZlXG4gICAgICAgIHB1bHNlRHVyYXRpb246IDEuOCArIE1hdGgucmFuZG9tKCkgKiAzLFxuICAgICAgICBwdWxzZURlbGF5OiAtTWF0aC5yYW5kb20oKSAqIDQsXG4gICAgICAgIC8vIFRyYXZlbGluZyBob3Jpem9udGFsIOKAlCBtw6FzIGxlbnRvIHF1ZSBwdWxzZSBwYXJhIG5vIG1hcmVhclxuICAgICAgICB0cmF2ZWxEdXJhdGlvbjogMTQgKyBNYXRoLnJhbmRvbSgpICogMTYsXG4gICAgICAgIHRyYXZlbERlbGF5OiAtTWF0aC5yYW5kb20oKSAqIDEyLFxuICAgICAgICB0cmF2ZWxEaXJlY3Rpb246IGkgJSAyID09PSAwID8gKCdyaWdodCcgYXMgY29uc3QpIDogKCdsZWZ0JyBhcyBjb25zdCksXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy53YXZlc1NpZ25hbC5zZXQobmV3V2F2ZXMpO1xuICB9XG59XG4iXX0=
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1iYWNrZ3JvdW5kLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90ZW1wbGF0ZXMvYXV0aC1iYWNrZ3JvdW5kL2F1dGgtYmFja2dyb3VuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBZ0IvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBbU1ILE1BQU0sT0FBTyx1QkFBdUI7SUFHbEMsSUFDSSxLQUFLLENBQUMsS0FBNkI7UUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBa0JEO1FBM0JRLFdBQU0sR0FBRyxNQUFNLENBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBVzVDLGtCQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ25GLGdCQUFXLEdBQUcsTUFBTSxDQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QixPQUFPO2dCQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUU7Z0JBQ2hDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJ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LENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUc7Z0JBQzNGLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2dCQUM5Qix3RUFBd0U7Z0JBQ3hFLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUN0RixXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDaEMsZUFBZSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxPQUFpQixDQUFDLENBQUMsQ0FBRSxNQUFnQjthQUN0RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDOytHQXpFVSx1QkFBdUI7bUdBQXZCLHVCQUF1QiwyR0E5THhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JULDR6RkFoQ1MsWUFBWTs7NEZBK0xYLHVCQUF1QjtrQkFsTW5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JUO3dEQW1LRyxLQUFLO3NCQURSLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBzaWduYWwsIGNvbXB1dGVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0aEJhY2tncm91bmRNZXRhZGF0YSB9IGZyb20gJy4vdHlwZXMnO1xuXG5pbnRlcmZhY2UgV2F2ZURhdGEge1xuICBpZDogbnVtYmVyO1xuICBwYXRoOiBzdHJpbmc7XG4gIGNvbG9yOiBzdHJpbmc7XG4gIHRoaWNrbmVzczogbnVtYmVyO1xuICBvcGFjaXR5OiBudW1iZXI7XG4gIHB1bHNlRHVyYXRpb246IG51bWJlcjtcbiAgcHVsc2VEZWxheTogbnVtYmVyO1xuICB0cmF2ZWxEdXJhdGlvbjogbnVtYmVyO1xuICB0cmF2ZWxEZWxheTogbnVtYmVyO1xuICB0cmF2ZWxEaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCc7XG59XG5cbi8qKlxuICogdmFsLWF1dGgtYmFja2dyb3VuZFxuICpcbiAqIEEgdmlzdWFsbHkgc3RyaWtpbmcgYmFja2dyb3VuZCBjb21wb25lbnQgZm9yIGF1dGhlbnRpY2F0aW9uIHBhZ2VzLlxuICogRmVhdHVyZXMgYW5pbWF0ZWQgd2F2ZSBwYXR0ZXJucywgZ3JhaW4gdGV4dHVyZSwgYW5kIGdsYXNzbW9ycGhpc20gZWZmZWN0cy5cbiAqIFN1cHBvcnRzIGRhcmsgbW9kZSBhdXRvbWF0aWNhbGx5IHZpYSBDU1MgdmFyaWFibGVzLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIHVzYWdlXG4gKiBgYGBodG1sXG4gKiA8dmFsLWF1dGgtYmFja2dyb3VuZD5cbiAqICAgPGRpdiBjbGFzcz1cIm15LWNvbnRlbnRcIj5cbiAqICAgICA8aDE+V2VsY29tZTwvaDE+XG4gKiAgICAgPHZhbC1sb2dpbiBbcHJvcHNdPVwibG9naW5Qcm9wc1wiIC8+XG4gKiAgIDwvZGl2PlxuICogPC92YWwtYXV0aC1iYWNrZ3JvdW5kPlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ3VzdG9tIGNvbmZpZ3VyYXRpb25cbiAqIGBgYGh0bWxcbiAqIDx2YWwtYXV0aC1iYWNrZ3JvdW5kIFtwcm9wc109XCJ7XG4gKiAgIHdhdmVDb3VudDogMzAsXG4gKiAgIHNob3dHcmFpbjogZmFsc2UsXG4gKiAgIG1pbkhlaWdodDogJzEwMHZoJ1xuICogfVwiPlxuICogICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPi4uLjwvZGl2PlxuICogPC92YWwtYXV0aC1iYWNrZ3JvdW5kPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1hdXRoLWJhY2tncm91bmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8c2VjdGlvbiBjbGFzcz1cImF1dGgtYmFja2dyb3VuZFwiIFtzdHlsZS5taW4taGVpZ2h0XT1cImNvbmZpZygpLm1pbkhlaWdodFwiPlxuICAgICAgQGlmIChjb25maWcoKS5zaG93R3JhaW4pIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyYWluXCI+PC9kaXY+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbmZpZygpLnNob3dHbGFzcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2xhc3MtbGF5ZXJcIj48L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJ3YXZlLWJnXCI+XG4gICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHZpZXdCb3g9XCIwIDAgMTQ0MCA4MDBcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPlxuICAgICAgICAgIEBmb3IgKHdhdmUgb2Ygd2F2ZXMoKTsgdHJhY2sgd2F2ZS5pZCkge1xuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgW2F0dHIuZF09XCJ3YXZlLnBhdGhcIlxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwid2F2ZS5jb2xvclwiXG4gICAgICAgICAgICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJ3YXZlLnRoaWNrbmVzc1wiXG4gICAgICAgICAgICAgIFtjbGFzcy50cmF2ZWwtbGVmdF09XCJ3YXZlLnRyYXZlbERpcmVjdGlvbiA9PT0gJ2xlZnQnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnRyYXZlbC1yaWdodF09XCJ3YXZlLnRyYXZlbERpcmVjdGlvbiA9PT0gJ3JpZ2h0J1wiXG4gICAgICAgICAgICAgIFtzdHlsZS5vcGFjaXR5XT1cIndhdmUub3BhY2l0eVwiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXB1bHNlLWR1cmF0aW9uXT1cIndhdmUucHVsc2VEdXJhdGlvbiArICdzJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXB1bHNlLWRlbGF5XT1cIndhdmUucHVsc2VEZWxheSArICdzJ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXRyYXZlbC1kdXJhdGlvbl09XCJ3YXZlLnRyYXZlbER1cmF0aW9uICsgJ3MnXCJcbiAgICAgICAgICAgICAgW3N0eWxlLi0tdHJhdmVsLWRlbGF5XT1cIndhdmUudHJhdmVsRGVsYXkgKyAncydcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50LWxheWVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgLyogVGhlbWUgdmFyaWFibGVzIC0gTGlnaHQgbW9kZSAoZGVmYXVsdCkgKi9cbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIC0tYXV0aC1iZy1zdGFydDogI2ZmZmZmZjtcbiAgICAgICAgLS1hdXRoLWJnLW1pZDogI2Y4ZjlmYTtcbiAgICAgICAgLS1hdXRoLWJnLWVuZDogI2YwZjBmMDtcbiAgICAgICAgLS1hdXRoLWdsYXNzLWJnOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMyk7XG4gICAgICAgIC0tYXV0aC1ncmFpbi1vcGFjaXR5OiAwLjAzNTtcbiAgICAgICAgLS1hdXRoLXdhdmUtY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNjM2NmYxKTtcbiAgICAgIH1cblxuICAgICAgLyogRGFyayBtb2RlIC0gU3lzdGVtIHByZWZlcmVuY2UgKi9cbiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIC0tYXV0aC1iZy1zdGFydDogIzBmMGYxYTtcbiAgICAgICAgICAtLWF1dGgtYmctbWlkOiAjMWExYTJlO1xuICAgICAgICAgIC0tYXV0aC1iZy1lbmQ6ICMxNjIxM2U7XG4gICAgICAgICAgLS1hdXRoLWdsYXNzLWJnOiByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gICAgICAgICAgLS1hdXRoLWdyYWluLW9wYWNpdHk6IDAuMDU7XG4gICAgICAgICAgLS1hdXRoLXdhdmUtY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjODE4Y2Y4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBEYXJrIG1vZGUgLSBDbGFzcy1iYXNlZCAoZm9yIHRvZ2dsZSBzdXBwb3J0KSAqL1xuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyayksXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIHtcbiAgICAgICAgLS1hdXRoLWJnLXN0YXJ0OiAjMGYwZjFhO1xuICAgICAgICAtLWF1dGgtYmctbWlkOiAjMWExYTJlO1xuICAgICAgICAtLWF1dGgtYmctZW5kOiAjMTYyMTNlO1xuICAgICAgICAtLWF1dGgtZ2xhc3MtYmc6IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICAgICAgLS1hdXRoLWdyYWluLW9wYWNpdHk6IDAuMDU7XG4gICAgICAgIC0tYXV0aC13YXZlLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSwgIzgxOGNmOCk7XG4gICAgICB9XG5cbiAgICAgIC5hdXRoLWJhY2tncm91bmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWF1dGgtYmctc3RhcnQpIDAlLCB2YXIoLS1hdXRoLWJnLW1pZCkgNTAlLCB2YXIoLS1hdXRoLWJnLWVuZCkgMTAwJSk7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgIC5ncmFpbiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAwO1xuICAgICAgICBvcGFjaXR5OiB2YXIoLS1hdXRoLWdyYWluLW9wYWNpdHkpO1xuICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHZpZXdCb3g9JzAgMCAyNTYgMjU2JyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZmlsdGVyIGlkPSdub2lzZSclM0UlM0NmZVR1cmJ1bGVuY2UgdHlwZT0nZnJhY3RhbE5vaXNlJyBiYXNlRnJlcXVlbmN5PScwLjUnIG51bU9jdGF2ZXM9JzInIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLyUzRSUzQy9maWx0ZXIlM0UlM0NyZWN0IHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyBmaWx0ZXI9J3VybCglMjNub2lzZSknLyUzRSUzQy9zdmclM0VcIik7XG4gICAgICB9XG5cbiAgICAgIC5nbGFzcy1sYXllciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hdXRoLWdsYXNzLWJnKTtcbiAgICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCkgc2F0dXJhdGUoMTIwJSk7XG4gICAgICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDNweCkgc2F0dXJhdGUoMTIwJSk7XG4gICAgICB9XG5cbiAgICAgIC53YXZlLWJnIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICAgIHotaW5kZXg6IDA7XG4gICAgICAgIHRyYW5zaXRpb246IGZpbHRlciAwLjNzIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC8qIEludmVydCB3YXZlcyBpbiBkYXJrIG1vZGUgKi9cbiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHtcbiAgICAgICAgLndhdmUtYmcge1xuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEpIG9wYWNpdHkoMC42KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLndhdmUtYmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAud2F2ZS1iZyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLndhdmUtYmcge1xuICAgICAgICBmaWx0ZXI6IGludmVydCgxKSBvcGFjaXR5KDAuNik7XG4gICAgICB9XG5cbiAgICAgIC53YXZlcyB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAud2F2ZXMgcGF0aCB7XG4gICAgICAgIGZpbGw6IG5vbmU7XG4gICAgICAgIHRyYW5zZm9ybS1ib3g6IGZpbGwtYm94O1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG4gICAgICAgIGFuaW1hdGlvbjpcbiAgICAgICAgICB3YXZlLXB1bHNlIHZhcigtLXB1bHNlLWR1cmF0aW9uLCAzcykgZWFzZS1pbi1vdXQgdmFyKC0tcHVsc2UtZGVsYXksIDBzKSBpbmZpbml0ZSBhbHRlcm5hdGUsXG4gICAgICAgICAgd2F2ZS10cmF2ZWwtcmlnaHQgdmFyKC0tdHJhdmVsLWR1cmF0aW9uLCAxMnMpIGxpbmVhciB2YXIoLS10cmF2ZWwtZGVsYXksIDBzKSBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgLndhdmVzIHBhdGgudHJhdmVsLWxlZnQge1xuICAgICAgICBhbmltYXRpb246XG4gICAgICAgICAgd2F2ZS1wdWxzZSB2YXIoLS1wdWxzZS1kdXJhdGlvbiwgM3MpIGVhc2UtaW4tb3V0IHZhcigtLXB1bHNlLWRlbGF5LCAwcykgaW5maW5pdGUgYWx0ZXJuYXRlLFxuICAgICAgICAgIHdhdmUtdHJhdmVsLWxlZnQgdmFyKC0tdHJhdmVsLWR1cmF0aW9uLCAxMnMpIGxpbmVhciB2YXIoLS10cmF2ZWwtZGVsYXksIDBzKSBpbmZpbml0ZTtcbiAgICAgIH1cblxuICAgICAgLyogVmVydGljYWwgYnJlYXRoaW5nIOKAlCBlcXVhbGl6ZXItc3R5bGUgcHVsc2UgcGVyIHdhdmUgKi9cbiAgICAgIEBrZXlmcmFtZXMgd2F2ZS1wdWxzZSB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWSgwLjg1KTtcbiAgICAgICAgfVxuICAgICAgICA1MCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDEuMjUpO1xuICAgICAgICB9XG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGVZKDAuODUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEhvcml6b250YWwgdHJhdmVsaW5nIOKAlCBsaWtlIHNvdW5kIHRyYXZlbGluZyBhY3Jvc3MgdGhlIGNhbnZhcyAqL1xuICAgICAgQGtleWZyYW1lcyB3YXZlLXRyYXZlbC1yaWdodCB7XG4gICAgICAgIGZyb20ge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAwcHgpO1xuICAgICAgICB9XG4gICAgICAgIHRvIHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMzAwcHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgd2F2ZS10cmF2ZWwtbGVmdCB7XG4gICAgICAgIGZyb20ge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgzMDBweCk7XG4gICAgICAgIH1cbiAgICAgICAgdG8ge1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtMzAwcHgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIFJlZHVjZWQgbW90aW9uIOKAlCBrZWVwIHdhdmVzIHN0aWxsICovXG4gICAgICBAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgICAgICAud2F2ZXMgcGF0aCB7XG4gICAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jb250ZW50LWxheWVyIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEF1dGhCYWNrZ3JvdW5kQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBfcHJvcHMgPSBzaWduYWw8QXV0aEJhY2tncm91bmRNZXRhZGF0YT4oe30pO1xuXG4gIEBJbnB1dCgpXG4gIHNldCBwcm9wcyh2YWx1ZTogQXV0aEJhY2tncm91bmRNZXRhZGF0YSkge1xuICAgIHRoaXMuX3Byb3BzLnNldCh2YWx1ZSk7XG4gICAgdGhpcy5yZWdlbmVyYXRlV2F2ZXMoKTtcbiAgfVxuICBnZXQgcHJvcHMoKTogQXV0aEJhY2tncm91bmRNZXRhZGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzKCk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRDb2xvcnMgPSBbJyNlMGUwZTAnLCAnI2JkYmRiZCcsICcjOWU5ZTllJywgJyM3NTc1NzUnLCAnIzYxNjE2MScsICcjNDI0MjQyJ107XG4gIHByaXZhdGUgd2F2ZXNTaWduYWwgPSBzaWduYWw8V2F2ZURhdGFbXT4oW10pO1xuXG4gIGNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuX3Byb3BzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdhdmVDb3VudDogcHJvcHMud2F2ZUNvdW50ID8/IDQ1LFxuICAgICAgd2F2ZUNvbG9yczogcHJvcHMud2F2ZUNvbG9ycyA/PyB0aGlzLmRlZmF1bHRDb2xvcnMsXG4gICAgICBzaG93R3JhaW46IHByb3BzLnNob3dHcmFpbiAhPT0gZmFsc2UsXG4gICAgICBzaG93R2xhc3M6IHByb3BzLnNob3dHbGFzcyAhPT0gZmFsc2UsXG4gICAgICBtaW5IZWlnaHQ6IHByb3BzLm1pbkhlaWdodCA/PyAnY2FsYygxMDB2aCAtIDEyMHB4KScsXG4gICAgfTtcbiAgfSk7XG5cbiAgd2F2ZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLndhdmVzU2lnbmFsKCkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnZW5lcmF0ZVdhdmVzKCk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2VuZXJhdGVXYXZlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjZmcgPSB0aGlzLmNvbmZpZygpO1xuICAgIGNvbnN0IGNvbG9ycyA9IGNmZy53YXZlQ29sb3JzO1xuICAgIGNvbnN0IGNvdW50ID0gY2ZnLndhdmVDb3VudDtcblxuICAgIGNvbnN0IG5ld1dhdmVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSwgKF8sIGkpID0+IHtcbiAgICAgIC8vIERpc3RyaWJ1aXIgdW5pZm9ybWUgYSBsbyBsYXJnbyBkZWwgdmlld0JveCAoMC4uODAwKSDigJQgc2luIGh1ZWNvcyBhcnJpYmFcbiAgICAgIGNvbnN0IHkgPSAoKGkgKyAwLjUpIC8gY291bnQpICogODAwO1xuICAgICAgY29uc3QgaXNUaGljayA9IGkgJSA1ID09PSAwO1xuICAgICAgY29uc3QgaXNNZWRpdW0gPSBpICUgMyA9PT0gMCAmJiAhaXNUaGljaztcblxuICAgICAgY29uc3QgYW1wbGl0dWRlID0gMTAgKyBNYXRoLnJhbmRvbSgpICogMjA7XG4gICAgICBjb25zdCBmcmVxdWVuY3kgPSAxICsgTWF0aC5yYW5kb20oKSAqIDI7XG4gICAgICBjb25zdCBwaGFzZSA9IE1hdGgucmFuZG9tKCkgKiBNYXRoLlBJICogMjtcblxuICAgICAgLy8gUGF0aCBleHRlbmRpZG8gb2ZmLWNhbnZhcyAoLTQwMCAuLiAxODQwKSBwYXJhIHF1ZSB0cmFuc2xhdGVYIG5vIGRlamUgaHVlY29zXG4gICAgICBsZXQgcGF0aCA9IGBNLTQwMCwke3l9YDtcbiAgICAgIGZvciAobGV0IHggPSAtNDAwOyB4IDw9IDE4NDA7IHggKz0gNDApIHtcbiAgICAgICAgY29uc3Qgd2F2ZVkgPSB5ICsgYW1wbGl0dWRlICogTWF0aC5zaW4oKHggLyAxNDQwKSAqIE1hdGguUEkgKiBmcmVxdWVuY3kgKiAyICsgcGhhc2UpO1xuICAgICAgICBwYXRoICs9IGAgTCR7eH0sJHt3YXZlWS50b0ZpeGVkKDEpfWA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gY29sb3JzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNvbG9ycy5sZW5ndGgpXTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGksXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGNvbG9yLFxuICAgICAgICB0aGlja25lc3M6IGlzVGhpY2sgPyAxLjIgOiBpc01lZGl1bSA/IDAuNyA6IDAuMyxcbiAgICAgICAgb3BhY2l0eTogaXNUaGljayA/IDAuNSA6IGlzTWVkaXVtID8gMC40IDogMC4zLFxuICAgICAgICAvLyBQdWxzZSB2ZXJ0aWNhbCAoZXF1YWxpemVyKSDigJQgfjEvMyBkZSBsYXMgd2F2ZXMgc29uIFwicsOhcGlkYXNcIlxuICAgICAgICBwdWxzZUR1cmF0aW9uOiBNYXRoLnJhbmRvbSgpIDwgMC4zMyA/IDAuOCArIE1hdGgucmFuZG9tKCkgKiAwLjggOiAxLjYgKyBNYXRoLnJhbmRvbSgpICogMi40LFxuICAgICAgICBwdWxzZURlbGF5OiAtTWF0aC5yYW5kb20oKSAqIDQsXG4gICAgICAgIC8vIFRyYXZlbGluZyBob3Jpem9udGFsIOKAlCB+MS8zIG3DoXMgcsOhcGlkYXMgcGFyYSBzZW5zYWNpw7NuIGRlIGVjdWFsaXphZG9yXG4gICAgICAgIHRyYXZlbER1cmF0aW9uOiBNYXRoLnJhbmRvbSgpIDwgMC4zMyA/IDUgKyBNYXRoLnJhbmRvbSgpICogNCA6IDEwICsgTWF0aC5yYW5kb20oKSAqIDEyLFxuICAgICAgICB0cmF2ZWxEZWxheTogLU1hdGgucmFuZG9tKCkgKiAxMixcbiAgICAgICAgdHJhdmVsRGlyZWN0aW9uOiBpICUgMiA9PT0gMCA/ICgncmlnaHQnIGFzIGNvbnN0KSA6ICgnbGVmdCcgYXMgY29uc3QpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMud2F2ZXNTaWduYWwuc2V0KG5ld1dhdmVzKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { firstValueFrom } from 'rxjs';
|
|
3
|
+
import { catchError, tap } from 'rxjs/operators';
|
|
4
|
+
import { VALTECH_AUTH_CONFIG } from './config';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common/http";
|
|
7
|
+
import * as i2 from "./auth.service";
|
|
8
|
+
import * as i3 from "@angular/router";
|
|
9
|
+
/**
|
|
10
|
+
* Name of the query param that carries the handoff token. Apps may override
|
|
11
|
+
* via `detectAndExchangeHandoff({ tokenParam })` but the default keeps the
|
|
12
|
+
* convention consistent across the factory.
|
|
13
|
+
*/
|
|
14
|
+
export const HANDOFF_TOKEN_PARAM = 'handoff';
|
|
15
|
+
/**
|
|
16
|
+
* Name of the query param that carries the post-exchange route.
|
|
17
|
+
*/
|
|
18
|
+
export const HANDOFF_ROUTE_PARAM = 'route';
|
|
19
|
+
/**
|
|
20
|
+
* HandoffService — cross-app session transfer.
|
|
21
|
+
*
|
|
22
|
+
* Implements the OAuth Authorization Code pattern, applied internally between
|
|
23
|
+
* apps that share the same backend.
|
|
24
|
+
*
|
|
25
|
+
* **Origin app (user is authenticated):**
|
|
26
|
+
*
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const { token, route } = await firstValueFrom(
|
|
29
|
+
* handoff.createHandoff({ targetAppId: 'myvaltech', route: '/app/dashboard' })
|
|
30
|
+
* );
|
|
31
|
+
* window.location.href = `https://myvaltech.app/?handoff=${token}&route=${encodeURIComponent(route ?? '/')}`;
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* **Target app (boot):** call `exchangeHandoff(token)`. On success, the session
|
|
35
|
+
* is installed (`AuthService.setExternalAuth`) and the user is authenticated.
|
|
36
|
+
* See `detectAndExchangeHandoff` helper for the typical bootstrap pattern.
|
|
37
|
+
*
|
|
38
|
+
* Security notes:
|
|
39
|
+
* - Token is single-use and short-lived (30s) — enforced server-side.
|
|
40
|
+
* - Token in URL must be removed from history after exchange to avoid log leakage.
|
|
41
|
+
* - The exchange endpoint is public; do NOT add auth header. The
|
|
42
|
+
* `HttpClient` request below avoids triggering the auth interceptor since the
|
|
43
|
+
* user isn't logged in yet on the target app.
|
|
44
|
+
*/
|
|
45
|
+
export class HandoffService {
|
|
46
|
+
constructor(config, http, auth, router) {
|
|
47
|
+
this.config = config;
|
|
48
|
+
this.http = http;
|
|
49
|
+
this.auth = auth;
|
|
50
|
+
this.router = router;
|
|
51
|
+
this.detected = false;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a handoff token. Caller must be authenticated.
|
|
55
|
+
*
|
|
56
|
+
* @param request Optional metadata: target app id and intended route.
|
|
57
|
+
* @returns Observable emitting `{ token, expiresAt, route? }`.
|
|
58
|
+
*/
|
|
59
|
+
createHandoff(request = {}) {
|
|
60
|
+
return this.http.post(`${this.baseUrl}/handoff`, request);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Exchange a handoff token for a session and install it.
|
|
64
|
+
*
|
|
65
|
+
* On success, the response is piped through `AuthService.setExternalAuth`
|
|
66
|
+
* so the user becomes authenticated. Subsequent navigation can proceed.
|
|
67
|
+
*
|
|
68
|
+
* On failure, the observable errors. The caller is responsible for
|
|
69
|
+
* showing an error and routing to `/login`.
|
|
70
|
+
*
|
|
71
|
+
* @param token Raw handoff token read from the URL.
|
|
72
|
+
*/
|
|
73
|
+
exchangeHandoff(token) {
|
|
74
|
+
return this.http
|
|
75
|
+
.post(`${this.baseUrl}/handoff/exchange`, { token })
|
|
76
|
+
.pipe(tap(response => this.installSession(response)), catchError(err => {
|
|
77
|
+
// Surface the error untouched — the caller decides how to react
|
|
78
|
+
// (typically: redirect to /login + toast). Don't install a bad session.
|
|
79
|
+
throw err;
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Bootstrap helper — reads the handoff token from the current URL, exchanges
|
|
84
|
+
* it for a session, and navigates to the intended route with the token
|
|
85
|
+
* stripped from history.
|
|
86
|
+
*
|
|
87
|
+
* Idempotent: subsequent calls are no-ops. Wire from an
|
|
88
|
+
* `APP_INITIALIZER`/`provideAppInitializer` factory in `main.ts`.
|
|
89
|
+
*
|
|
90
|
+
* ```typescript
|
|
91
|
+
* // main.ts
|
|
92
|
+
* provideAppInitializer(() => inject(HandoffService).detectAndExchangeHandoff())
|
|
93
|
+
* ```
|
|
94
|
+
*
|
|
95
|
+
* On error (expired/used/invalid token), redirects to `errorRoute` (default:
|
|
96
|
+
* the app's configured `loginRoute`). The URL is always cleaned, even on
|
|
97
|
+
* error, so the token cannot be retried by refreshing the page.
|
|
98
|
+
*
|
|
99
|
+
* @returns `true` if a handoff was detected and processed (success or fail).
|
|
100
|
+
* `false` if no token was present (cold boot, normal flow).
|
|
101
|
+
*/
|
|
102
|
+
async detectAndExchangeHandoff(options = {}) {
|
|
103
|
+
if (this.detected || typeof window === 'undefined') {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
this.detected = true;
|
|
107
|
+
const tokenParam = options.tokenParam ?? HANDOFF_TOKEN_PARAM;
|
|
108
|
+
const routeParam = options.routeParam ?? HANDOFF_ROUTE_PARAM;
|
|
109
|
+
const defaultRoute = options.defaultRoute ?? '/';
|
|
110
|
+
const errorRoute = options.errorRoute ?? this.config.loginRoute ?? '/login';
|
|
111
|
+
const params = new URLSearchParams(window.location.search);
|
|
112
|
+
const token = params.get(tokenParam);
|
|
113
|
+
if (!token) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
const targetRoute = params.get(routeParam) || defaultRoute;
|
|
117
|
+
try {
|
|
118
|
+
await firstValueFrom(this.exchangeHandoff(token));
|
|
119
|
+
await this.router.navigateByUrl(targetRoute, { replaceUrl: true });
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
console.warn('[Handoff] Exchange failed, redirecting to login', err);
|
|
123
|
+
await this.router.navigateByUrl(errorRoute, { replaceUrl: true });
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Persist the session in `AuthService`. Mirrors the install flow used by
|
|
129
|
+
* the normal signin path so timers, Firebase, and tab-sync all kick in.
|
|
130
|
+
*/
|
|
131
|
+
installSession(response) {
|
|
132
|
+
this.auth.setExternalAuth({
|
|
133
|
+
accessToken: response.accessToken,
|
|
134
|
+
refreshToken: response.refreshToken,
|
|
135
|
+
firebaseToken: response.firebaseToken,
|
|
136
|
+
expiresIn: response.expiresIn,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
get baseUrl() {
|
|
140
|
+
return `${this.config.apiUrl}${this.config.authPrefix}`;
|
|
141
|
+
}
|
|
142
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HandoffService, deps: [{ token: VALTECH_AUTH_CONFIG }, { token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
143
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HandoffService, providedIn: 'root' }); }
|
|
144
|
+
}
|
|
145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: HandoffService, decorators: [{
|
|
146
|
+
type: Injectable,
|
|
147
|
+
args: [{ providedIn: 'root' }]
|
|
148
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
149
|
+
type: Inject,
|
|
150
|
+
args: [VALTECH_AUTH_CONFIG]
|
|
151
|
+
}] }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.Router }] });
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZG9mZi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL2hhbmRvZmYuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOzs7OztBQUcvQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDO0FBRTdDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDO0FBeUQzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRztBQUVILE1BQU0sT0FBTyxjQUFjO0lBR3pCLFlBQ3VDLE1BQXlCLEVBQ3RELElBQWdCLEVBQ2hCLElBQWlCLEVBQ2pCLE1BQWM7UUFIZSxXQUFNLEdBQU4sTUFBTSxDQUFtQjtRQUN0RCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU5oQixhQUFRLEdBQUcsS0FBSyxDQUFDO0lBT3RCLENBQUM7SUFFSjs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxVQUFnQyxFQUFFO1FBQzlDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsZUFBZSxDQUFDLEtBQWE7UUFDM0IsT0FBTyxJQUFJLENB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bnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFZhbHRlY2hBdXRoQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogTmFtZSBvZiB0aGUgcXVlcnkgcGFyYW0gdGhhdCBjYXJyaWVzIHRoZSBoYW5kb2ZmIHRva2VuLiBBcHBzIG1heSBvdmVycmlkZVxuICogdmlhIGBkZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmYoeyB0b2tlblBhcmFtIH0pYCBidXQgdGhlIGRlZmF1bHQga2VlcHMgdGhlXG4gKiBjb252ZW50aW9uIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYWN0b3J5LlxuICovXG5leHBvcnQgY29uc3QgSEFORE9GRl9UT0tFTl9QQVJBTSA9ICdoYW5kb2ZmJztcblxuLyoqXG4gKiBOYW1lIG9mIHRoZSBxdWVyeSBwYXJhbSB0aGF0IGNhcnJpZXMgdGhlIHBvc3QtZXhjaGFuZ2Ugcm91dGUuXG4gKi9cbmV4cG9ydCBjb25zdCBIQU5ET0ZGX1JPVVRFX1BBUkFNID0gJ3JvdXRlJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgSGFuZG9mZlNlcnZpY2UuZGV0ZWN0QW5kRXhjaGFuZ2VIYW5kb2ZmYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXRlY3RBbmRFeGNoYW5nZU9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHF1ZXJ5IHBhcmFtIG5hbWUuIERlZmF1bHQ6IGAnaGFuZG9mZidgLiAqL1xuICB0b2tlblBhcmFtPzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIHJvdXRlIHBhcmFtIG5hbWUuIERlZmF1bHQ6IGAncm91dGUnYC4gKi9cbiAgcm91dGVQYXJhbT86IHN0cmluZztcbiAgLyoqIFdoZXJlIHRvIG5hdmlnYXRlIGlmIG5vIHJvdXRlIHBhcmFtIGlzIHByZXNlbnQuIERlZmF1bHQ6IGAnLydgLiAqL1xuICBkZWZhdWx0Um91dGU/OiBzdHJpbmc7XG4gIC8qKiBXaGVyZSB0byBuYXZpZ2F0ZSBvbiBleGNoYW5nZSBlcnJvci4gRGVmYXVsdDogYXBwJ3MgY29uZmlndXJlZCBgbG9naW5Sb3V0ZWAuICovXG4gIGVycm9yUm91dGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVxdWVzdCBib2R5IGZvciBgUE9TVCAvdjIvYXV0aC9oYW5kb2ZmYC5cbiAqXG4gKiBCb3RoIGZpZWxkcyBhcmUgb3B0aW9uYWwgYW5kIHN0b3JlZCBmb3IgYXVkaXQgb25seSDigJQgdGhlIGV4Y2hhbmdlIHN0ZXBcbiAqIGRvZXMgbm90IGVuZm9yY2UgdGhhdCB0aGUgcmVkZWVtaW5nIGFwcCBtYXRjaGVzIGB0YXJnZXRBcHBJZGAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZG9mZkNyZWF0ZVJlcXVlc3Qge1xuICAvKiogVGFyZ2V0IGFwcCB0aGUgaGFuZG9mZiBpcyBpbnRlbmRlZCBmb3IgKGUuZy4gYFwibXl2YWx0ZWNoXCJgKS4gQXVkaXQtb25seS4gKi9cbiAgdGFyZ2V0QXBwSWQ/OiBzdHJpbmc7XG4gIC8qKiBSb3V0ZSB0aGUgdGFyZ2V0IGFwcCBzaG91bGQgbmF2aWdhdGUgdG8gYWZ0ZXIgZXhjaGFuZ2UuIEVjaG9lZCBiYWNrLiAqL1xuICByb3V0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBib2R5IGZyb20gYFBPU1QgL3YyL2F1dGgvaGFuZG9mZmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGFuZG9mZkNyZWF0ZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgLyoqIFJhdyB0b2tlbiB0byBlbWJlZCBpbiB0aGUgcmVkaXJlY3QgVVJMIGFzIGA/aGFuZG9mZj08dG9rZW4+YC4gMzBzIFRUTCwgc2luZ2xlLXVzZS4gKi9cbiAgdG9rZW46IHN0cmluZztcbiAgLyoqIFJGQzMzMzkgZXhwaXJhdGlvbiB0aW1lc3RhbXAuICovXG4gIGV4cGlyZXNBdDogc3RyaW5nO1xuICAvKiogRWNob2VkIGByb3V0ZWAgZnJvbSB0aGUgcmVxdWVzdCwgd2hlbiBwcm92aWRlZC4gKi9cbiAgcm91dGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzcG9uc2UgYm9keSBmcm9tIGBQT1NUIC92Mi9hdXRoL2hhbmRvZmYvZXhjaGFuZ2VgLlxuICpcbiAqIFNhbWUgc2hhcGUgYXMgYFNpZ25pblJlc3BvbnNlYCDigJQgaW5zdGFsbGFibGUgdmlhIGBBdXRoU2VydmljZS5zZXRFeHRlcm5hbEF1dGhgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRvZmZFeGNoYW5nZVJlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIGZpcmViYXNlVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICB0b2tlblR5cGU6IHN0cmluZztcbiAgdXNlcklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGFuZG9mZlNlcnZpY2Ug4oCUIGNyb3NzLWFwcCBzZXNzaW9uIHRyYW5zZmVyLlxuICpcbiAqIEltcGxlbWVudHMgdGhlIE9BdXRoIEF1dGhvcml6YXRpb24gQ29kZSBwYXR0ZXJuLCBhcHBsaWVkIGludGVybmFsbHkgYmV0d2VlblxuICogYXBwcyB0aGF0IHNoYXJlIHRoZSBzYW1lIGJhY2tlbmQuXG4gKlxuICogKipPcmlnaW4gYXBwICh1c2VyIGlzIGF1dGhlbnRpY2F0ZWQpOioqXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgeyB0b2tlbiwgcm91dGUgfSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICogICBoYW5kb2ZmLmNyZWF0ZUhhbmRvZmYoeyB0YXJnZXRBcHBJZDogJ215dmFsdGVjaCcsIHJvdXRlOiAnL2FwcC9kYXNoYm9hcmQnIH0pXG4gKiApO1xuICogd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgaHR0cHM6Ly9teXZhbHRlY2guYXBwLz9oYW5kb2ZmPSR7dG9rZW59JnJvdXRlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJvdXRlID8/ICcvJyl9YDtcbiAqIGBgYFxuICpcbiAqICoqVGFyZ2V0IGFwcCAoYm9vdCk6KiogY2FsbCBgZXhjaGFuZ2VIYW5kb2ZmKHRva2VuKWAuIE9uIHN1Y2Nlc3MsIHRoZSBzZXNzaW9uXG4gKiBpcyBpbnN0YWxsZWQgKGBBdXRoU2VydmljZS5zZXRFeHRlcm5hbEF1dGhgKSBhbmQgdGhlIHVzZXIgaXMgYXV0aGVudGljYXRlZC5cbiAqIFNlZSBgZGV0ZWN0QW5kRXhjaGFuZ2VIYW5kb2ZmYCBoZWxwZXIgZm9yIHRoZSB0eXBpY2FsIGJvb3RzdHJhcCBwYXR0ZXJuLlxuICpcbiAqIFNlY3VyaXR5IG5vdGVzOlxuICogLSBUb2tlbiBpcyBzaW5nbGUtdXNlIGFuZCBzaG9ydC1saXZlZCAoMzBzKSDigJQgZW5mb3JjZWQgc2VydmVyLXNpZGUuXG4gKiAtIFRva2VuIGluIFVSTCBtdXN0IGJlIHJlbW92ZWQgZnJvbSBoaXN0b3J5IGFmdGVyIGV4Y2hhbmdlIHRvIGF2b2lkIGxvZyBsZWFrYWdlLlxuICogLSBUaGUgZXhjaGFuZ2UgZW5kcG9pbnQgaXMgcHVibGljOyBkbyBOT1QgYWRkIGF1dGggaGVhZGVyLiBUaGVcbiAqICAgYEh0dHBDbGllbnRgIHJlcXVlc3QgYmVsb3cgYXZvaWRzIHRyaWdnZXJpbmcgdGhlIGF1dGggaW50ZXJjZXB0b3Igc2luY2UgdGhlXG4gKiAgIHVzZXIgaXNuJ3QgbG9nZ2VkIGluIHlldCBvbiB0aGUgdGFyZ2V0IGFwcC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBIYW5kb2ZmU2VydmljZSB7XG4gIHByaXZhdGUgZGV0ZWN0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICAvKipcbiAgICogQ3JlYXRlIGEgaGFuZG9mZiB0b2tlbi4gQ2FsbGVyIG11c3QgYmUgYXV0aGVudGljYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3QgT3B0aW9uYWwgbWV0YWRhdGE6IHRhcmdldCBhcHAgaWQgYW5kIGludGVuZGVkIHJvdXRlLlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIGVtaXR0aW5nIGB7IHRva2VuLCBleHBpcmVzQXQsIHJvdXRlPyB9YC5cbiAgICovXG4gIGNyZWF0ZUhhbmRvZmYocmVxdWVzdDogSGFuZG9mZkNyZWF0ZVJlcXVlc3QgPSB7fSk6IE9ic2VydmFibGU8SGFuZG9mZkNyZWF0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEhhbmRvZmZDcmVhdGVSZXNwb25zZT4oYCR7dGhpcy5iYXNlVXJsfS9oYW5kb2ZmYCwgcmVxdWVzdCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBoYW5kb2ZmIHRva2VuIGZvciBhIHNlc3Npb24gYW5kIGluc3RhbGwgaXQuXG4gICAqXG4gICAqIE9uIHN1Y2Nlc3MsIHRoZSByZXNwb25zZSBpcyBwaXBlZCB0aHJvdWdoIGBBdXRoU2VydmljZS5zZXRFeHRlcm5hbEF1dGhgXG4gICAqIHNvIHRoZSB1c2VyIGJlY29tZXMgYXV0aGVudGljYXRlZC4gU3Vic2VxdWVudCBuYXZpZ2F0aW9uIGNhbiBwcm9jZWVkLlxuICAgKlxuICAgKiBPbiBmYWlsdXJlLCB0aGUgb2JzZXJ2YWJsZSBlcnJvcnMuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gICAqIHNob3dpbmcgYW4gZXJyb3IgYW5kIHJvdXRpbmcgdG8gYC9sb2dpbmAuXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiBSYXcgaGFuZG9mZiB0b2tlbiByZWFkIGZyb20gdGhlIFVSTC5cbiAgICovXG4gIGV4Y2hhbmdlSGFuZG9mZih0b2tlbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIYW5kb2ZmRXhjaGFuZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PEhhbmRvZmZFeGNoYW5nZVJlc3BvbnNlPihgJHt0aGlzLmJhc2VVcmx9L2hhbmRvZmYvZXhjaGFuZ2VgLCB7IHRva2VuIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKHJlc3BvbnNlID0+IHRoaXMuaW5zdGFsbFNlc3Npb24ocmVzcG9uc2UpKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIC8vIFN1cmZhY2UgdGhlIGVycm9yIHVudG91Y2hlZCDigJQgdGhlIGNhbGxlciBkZWNpZGVzIGhvdyB0byByZWFjdFxuICAgICAgICAgIC8vICh0eXBpY2FsbHk6IHJlZGlyZWN0IHRvIC9sb2dpbiArIHRvYXN0KS4gRG9uJ3QgaW5zdGFsbCBhIGJhZCBzZXNzaW9uLlxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGhlbHBlciDigJQgcmVhZHMgdGhlIGhhbmRvZmYgdG9rZW4gZnJvbSB0aGUgY3VycmVudCBVUkwsIGV4Y2hhbmdlc1xuICAgKiBpdCBmb3IgYSBzZXNzaW9uLCBhbmQgbmF2aWdhdGVzIHRvIHRoZSBpbnRlbmRlZCByb3V0ZSB3aXRoIHRoZSB0b2tlblxuICAgKiBzdHJpcHBlZCBmcm9tIGhpc3RvcnkuXG4gICAqXG4gICAqIElkZW1wb3RlbnQ6IHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy4gV2lyZSBmcm9tIGFuXG4gICAqIGBBUFBfSU5JVElBTElaRVJgL2Bwcm92aWRlQXBwSW5pdGlhbGl6ZXJgIGZhY3RvcnkgaW4gYG1haW4udHNgLlxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIG1haW4udHNcbiAgICogcHJvdmlkZUFwcEluaXRpYWxpemVyKCgpID0+IGluamVjdChIYW5kb2ZmU2VydmljZSkuZGV0ZWN0QW5kRXhjaGFuZ2VIYW5kb2ZmKCkpXG4gICAqIGBgYFxuICAgKlxuICAgKiBPbiBlcnJvciAoZXhwaXJlZC91c2VkL2ludmFsaWQgdG9rZW4pLCByZWRpcmVjdHMgdG8gYGVycm9yUm91dGVgIChkZWZhdWx0OlxuICAgKiB0aGUgYXBwJ3MgY29uZmlndXJlZCBgbG9naW5Sb3V0ZWApLiBUaGUgVVJMIGlzIGFsd2F5cyBjbGVhbmVkLCBldmVuIG9uXG4gICAqIGVycm9yLCBzbyB0aGUgdG9rZW4gY2Fubm90IGJlIHJldHJpZWQgYnkgcmVmcmVzaGluZyB0aGUgcGFnZS5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIGEgaGFuZG9mZiB3YXMgZGV0ZWN0ZWQgYW5kIHByb2Nlc3NlZCAoc3VjY2VzcyBvciBmYWlsKS5cbiAgICogICAgICAgICAgYGZhbHNlYCBpZiBubyB0b2tlbiB3YXMgcHJlc2VudCAoY29sZCBib290LCBub3JtYWwgZmxvdykuXG4gICAqL1xuICBhc3luYyBkZXRlY3RBbmRFeGNoYW5nZUhhbmRvZmYob3B0aW9uczogRGV0ZWN0QW5kRXhjaGFuZ2VPcHRpb25zID0ge30pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5kZXRlY3RlZCB8fCB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmRldGVjdGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IHRva2VuUGFyYW0gPSBvcHRpb25zLnRva2VuUGFyYW0gPz8gSEFORE9GRl9UT0tFTl9QQVJBTTtcbiAgICBjb25zdCByb3V0ZVBhcmFtID0gb3B0aW9ucy5yb3V0ZVBhcmFtID8/IEhBTkRPRkZfUk9VVEVfUEFSQU07XG4gICAgY29uc3QgZGVmYXVsdFJvdXRlID0gb3B0aW9ucy5kZWZhdWx0Um91dGUgPz8gJy8nO1xuICAgIGNvbnN0IGVycm9yUm91dGUgPSBvcHRpb25zLmVycm9yUm91dGUgPz8gdGhpcy5jb25maWcubG9naW5Sb3V0ZSA/PyAnL2xvZ2luJztcblxuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgY29uc3QgdG9rZW4gPSBwYXJhbXMuZ2V0KHRva2VuUGFyYW0pO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXRSb3V0ZSA9IHBhcmFtcy5nZXQocm91dGVQYXJhbSkgfHwgZGVmYXVsdFJvdXRlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjaGFuZ2VIYW5kb2ZmKHRva2VuKSk7XG4gICAgICBhd2FpdCB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhcmdldFJvdXRlLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tIYW5kb2ZmXSBFeGNoYW5nZSBmYWlsZWQsIHJlZGlyZWN0aW5nIHRvIGxvZ2luJywgZXJyKTtcbiAgICAgIGF3YWl0IHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZXJyb3JSb3V0ZSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3QgdGhlIHNlc3Npb24gaW4gYEF1dGhTZXJ2aWNlYC4gTWlycm9ycyB0aGUgaW5zdGFsbCBmbG93IHVzZWQgYnlcbiAgICogdGhlIG5vcm1hbCBzaWduaW4gcGF0aCBzbyB0aW1lcnMsIEZpcmViYXNlLCBhbmQgdGFiLXN5bmMgYWxsIGtpY2sgaW4uXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxTZXNzaW9uKHJlc3BvbnNlOiBIYW5kb2ZmRXhjaGFuZ2VSZXNwb25zZSk6IHZvaWQge1xuICAgIHRoaXMuYXV0aC5zZXRFeHRlcm5hbEF1dGgoe1xuICAgICAgYWNjZXNzVG9rZW46IHJlc3BvbnNlLmFjY2Vzc1Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZXNwb25zZS5yZWZyZXNoVG9rZW4sXG4gICAgICBmaXJlYmFzZVRva2VuOiByZXNwb25zZS5maXJlYmFzZVRva2VuLFxuICAgICAgZXhwaXJlc0luOiByZXNwb25zZS5leHBpcmVzSW4sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBiYXNlVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29uZmlnLmFwaVVybH0ke3RoaXMuY29uZmlnLmF1dGhQcmVmaXh9YDtcbiAgfVxufVxuIl19
|
|
@@ -89,4 +89,8 @@ export { SessionService } from './session.service';
|
|
|
89
89
|
// OAuth (Login social)
|
|
90
90
|
export { OAuthService } from './oauth.service';
|
|
91
91
|
export { OAuthCallbackComponent } from './oauth-callback.component';
|
|
92
|
-
|
|
92
|
+
// Cross-app session handoff (OAuth Authorization Code pattern internal)
|
|
93
|
+
export { HandoffService, HANDOFF_TOKEN_PARAM, HANDOFF_ROUTE_PARAM } from './handoff.service';
|
|
94
|
+
// Active organization switch orchestration
|
|
95
|
+
export { OrgSwitchService } from './org-switch.service';
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2F1dGgvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFFRztBQUVILFFBQVE7QUFDUixjQUFjLFNBQVMsQ0FBQztBQUV4QixnQkFBZ0I7QUFDaEIsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsNkJBQTZCLEVBQzdCLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQztBQUVsQixxQkFBcUI7QUFDckIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLFNBQVM7QUFDVCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixTQUFTLEdBQ1YsTUFBTSxVQUFVLENBQUM7QUFFbEIsa0NBQWtDO0FBQ2xDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEQsZ0RBQWdEO0FBQ2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakQsa0RBQWtEO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkQsdUJBQXVCO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRSx3RUFBd0U7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBUTdGLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVmFsdGVjaCBBdXRoIFNlcnZpY2VcbiAqXG4gKiBTZXJ2aWNpbyBkZSBhdXRlbnRpY2FjacOzbiByZXV0aWxpemFibGUgcGFyYSBhcGxpY2FjaW9uZXMgQW5ndWxhci5cbiAqIFByb3BvcmNpb25hIGF1dGVudGljYWNpw7NuIGNvbiBBdXRoVjIsIE1GQSwgc2luY3Jvbml6YWNpw7NuIGVudHJlIHBlc3Rhw7FhcyxcbiAqIHJlZnJlc2ggcHJvYWN0aXZvIGRlIHRva2VucywgeSByZWdpc3RybyBhdXRvbcOhdGljbyBkZSBkaXNwb3NpdGl2b3MgcGFyYVxuICogcHVzaCBub3RpZmljYXRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFbiBtYWluLnRzXG4gKiBpbXBvcnQgeyBib290c3RyYXBBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuICogaW1wb3J0IHsgcHJvdmlkZVZhbHRlY2hBdXRoLCBwcm92aWRlVmFsdGVjaEZpcmViYXNlIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuICpcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlVmFsdGVjaEZpcmViYXNlKGVudmlyb25tZW50LmZpcmViYXNlKSxcbiAqICAgICBwcm92aWRlVmFsdGVjaEF1dGgoe1xuICogICAgICAgYXBpVXJsOiBlbnZpcm9ubWVudC5hcGlVcmwsXG4gKiAgICAgICBlbmFibGVGaXJlYmFzZUludGVncmF0aW9uOiB0cnVlLFxuICogICAgICAgZW5hYmxlRGV2aWNlUmVnaXN0cmF0aW9uOiB0cnVlLCAvLyBBdXRvLXJlZ2lzdHJhIGRpc3Bvc2l0aXZvcyBwYXJhIHB1c2hcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIC8vIEVuIGFwcC5yb3V0ZXMudHNcbiAqIGltcG9ydCB7IGF1dGhHdWFyZCwgZ3Vlc3RHdWFyZCwgcGVybWlzc2lvbkd1YXJkIH0gZnJvbSAndmFsdGVjaC1jb21wb25lbnRzJztcbiAqXG4gKiBjb25zdCByb3V0ZXM6IFJvdXRlcyA9IFtcbiAqICAgeyBwYXRoOiAnbG9naW4nLCBjYW5BY3RpdmF0ZTogW2d1ZXN0R3VhcmRdLCBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vbG9naW4ucGFnZScpIH0sXG4gKiAgIHsgcGF0aDogJ2Rhc2hib2FyZCcsIGNhbkFjdGl2YXRlOiBbYXV0aEd1YXJkXSwgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2Rhc2hib2FyZC5wYWdlJykgfSxcbiAqICAgeyBwYXRoOiAnYWRtaW4nLCBjYW5BY3RpdmF0ZTogW2F1dGhHdWFyZCwgcGVybWlzc2lvbkd1YXJkKCdhZG1pbjoqJyldLCBsb2FkQ29tcG9uZW50OiAoKSA9PiBpbXBvcnQoJy4vYWRtaW4ucGFnZScpIH0sXG4gKiBdO1xuICpcbiAqIC8vIEVuIGNvbXBvbmVudGVzXG4gKiBpbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBMb2dpbkNvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gKlxuICogICBhc3luYyBsb2dpbigpIHtcbiAqICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc2lnbmluKHsgZW1haWwsIHBhc3N3b3JkIH0pKTtcbiAqICAgICBpZiAodGhpcy5hdXRoLm1mYVBlbmRpbmcoKS5yZXF1aXJlZCkge1xuICogICAgICAgLy8gTW9zdHJhciBVSSBkZSBNRkFcbiAqICAgICB9IGVsc2Uge1xuICogICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZGFzaGJvYXJkJ10pO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gSGFiaWxpdGFyIG5vdGlmaWNhY2lvbmVzIHB1c2ggKHNvbGljaXRhIHBlcm1pc29zICsgcmVnaXN0cmEgZGlzcG9zaXRpdm8pXG4gKiAgIGFzeW5jIGVuYWJsZU5vdGlmaWNhdGlvbnMoKSB7XG4gKiAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5hdXRoLmVuYWJsZU5vdGlmaWNhdGlvbnMoKTtcbiAqICAgICBpZiAocmVzdWx0LmdyYW50ZWQpIHtcbiAqICAgICAgIGNvbnNvbGUubG9nKCdOb3RpZmljYWNpb25lcyBoYWJpbGl0YWRhcycpO1xuICogICAgIH1cbiAqICAgfVxuICpcbiAqICAgLy8gVmVyaWZpY2FyIGVzdGFkbyBkZSBwZXJtaXNvc1xuICogICBnZXQgY2FuUmVjZWl2ZU5vdGlmaWNhdGlvbnMoKTogYm9vbGVhbiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuYXV0aC5nZXROb3RpZmljYXRpb25QZXJtaXNzaW9uU3RhdGUoKSA9PT0gJ2dyYW50ZWQnO1xuICogICB9XG4gKlxuICogICAvLyBFbiB0ZW1wbGF0ZTogdXNhciBzaWduYWxzIGRpcmVjdGFtZW50ZVxuICogICAvLyB7eyBhdXRoLnVzZXIoKT8uZW1haWwgfX1cbiAqICAgLy8gQGlmIChhdXRoLmhhc1Blcm1pc3Npb24oJ3RlbXBsYXRlczplZGl0JykpIHsgLi4uIH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbi8vIFRpcG9zXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuLy8gQ29uZmlndXJhY2nDs25cbmV4cG9ydCB7XG4gIFZBTFRFQ0hfQVVUSF9DT05GSUcsXG4gIHByb3ZpZGVWYWx0ZWNoQXV0aCxcbiAgcHJvdmlkZVZhbHRlY2hBdXRoSW50ZXJjZXB0b3IsXG4gIERFRkFVTFRfQVVUSF9DT05GSUcsXG59IGZyb20gJy4vY29uZmlnJztcblxuLy8gU2VydmljaW8gcHJpbmNpcGFsXG5leHBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuLy8gR3VhcmRzXG5leHBvcnQge1xuICBhdXRoR3VhcmQsXG4gIGd1ZXN0R3VhcmQsXG4gIHBlcm1pc3Npb25HdWFyZCxcbiAgcGVybWlzc2lvbkd1YXJkRnJvbVJvdXRlLFxuICBzdXBlckFkbWluR3VhcmQsXG4gIHJvbGVHdWFyZCxcbn0gZnJvbSAnLi9ndWFyZHMnO1xuXG4vLyBJbnRlcmNlcHRvciAocGFyYSB1c28gYXZhbnphZG8pXG5leHBvcnQgeyBhdXRoSW50ZXJjZXB0b3IgfSBmcm9tICcuL2ludGVyY2VwdG9yJztcblxuLy8gU2VydmljaW9zIGludGVybm9zIChwYXJhIHRlc3RpbmcgbyBleHRlbnNpw7NuKVxuZXhwb3J0IHsgQXV0aFN0YXRlU2VydmljZSB9IGZyb20gJy4vYXV0aC1zdGF0ZS5zZXJ2aWNlJztcbmV4cG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4vdG9rZW4uc2VydmljZSc7XG5leHBvcnQgeyBBdXRoU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuL3N0b3JhZ2Uuc2VydmljZSc7XG5leHBvcnQgeyBBdXRoU3luY1NlcnZpY2UgfSBmcm9tICcuL3N5bmMuc2VydmljZSc7XG5cbi8vIFNlcnZpY2lvcyBkZSBnZXN0acOzbiBkZSBkaXNwb3NpdGl2b3MgeSBzZXNpb25lc1xuZXhwb3J0IHsgRGV2aWNlU2VydmljZSB9IGZyb20gJy4vZGV2aWNlLnNlcnZpY2UnO1xuZXhwb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cbi8vIE9BdXRoIChMb2dpbiBzb2NpYWwpXG5leHBvcnQgeyBPQXV0aFNlcnZpY2UgfSBmcm9tICcuL29hdXRoLnNlcnZpY2UnO1xuZXhwb3J0IHsgT0F1dGhDYWxsYmFja0NvbXBvbmVudCB9IGZyb20gJy4vb2F1dGgtY2FsbGJhY2suY29tcG9uZW50JztcblxuLy8gQ3Jvc3MtYXBwIHNlc3Npb24gaGFuZG9mZiAoT0F1dGggQXV0aG9yaXphdGlvbiBDb2RlIHBhdHRlcm4gaW50ZXJuYWwpXG5leHBvcnQgeyBIYW5kb2ZmU2VydmljZSwgSEFORE9GRl9UT0tFTl9QQVJBTSwgSEFORE9GRl9ST1VURV9QQVJBTSB9IGZyb20gJy4vaGFuZG9mZi5zZXJ2aWNlJztcbmV4cG9ydCB0eXBlIHtcbiAgSGFuZG9mZkNyZWF0ZVJlcXVlc3QsXG4gIEhhbmRvZmZDcmVhdGVSZXNwb25zZSxcbiAgSGFuZG9mZkV4Y2hhbmdlUmVzcG9uc2UsXG4gIERldGVjdEFuZEV4Y2hhbmdlT3B0aW9ucyxcbn0gZnJvbSAnLi9oYW5kb2ZmLnNlcnZpY2UnO1xuXG4vLyBBY3RpdmUgb3JnYW5pemF0aW9uIHN3aXRjaCBvcmNoZXN0cmF0aW9uXG5leHBvcnQgeyBPcmdTd2l0Y2hTZXJ2aWNlIH0gZnJvbSAnLi9vcmctc3dpdGNoLnNlcnZpY2UnO1xuZXhwb3J0IHR5cGUgeyBPcmdDaGFuZ2VkRXZlbnQsIFN3aXRjaE9yZ09wdGlvbnMgfSBmcm9tICcuL29yZy1zd2l0Y2guc2VydmljZSc7XG4iXX0=
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Injectable, signal } from '@angular/core';
|
|
2
|
+
import { firstValueFrom, Subject } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./auth.service";
|
|
5
|
+
/**
|
|
6
|
+
* OrgSwitchService — orchestrates active organization changes across the app.
|
|
7
|
+
*
|
|
8
|
+
* Built on top of `AuthService.switchOrg`, which already:
|
|
9
|
+
* - Hits `POST /v2/auth/switch-org` and receives a new Firebase custom token.
|
|
10
|
+
* - Re-authenticates Firebase Auth with the new token (RBAC claims update).
|
|
11
|
+
* - Broadcasts `ORG_SWITCH` to other tabs via `AuthSyncService` (multi-tab sync).
|
|
12
|
+
*
|
|
13
|
+
* What this service adds on top:
|
|
14
|
+
* - A `switching` signal so the UI can show a loading indicator (1-2s switch).
|
|
15
|
+
* - An `orgChanged$` Observable that components subscribe to in order to
|
|
16
|
+
* invalidate their org-scoped caches (e.g. drop old query results, reset
|
|
17
|
+
* page state) without a full page reload.
|
|
18
|
+
* - Optional `reload: true` for apps where invalidating in-memory state piece
|
|
19
|
+
* by piece is impractical.
|
|
20
|
+
*
|
|
21
|
+
* **What this service does NOT do automatically:**
|
|
22
|
+
*
|
|
23
|
+
* 1. **Teardown Firestore listeners.** Listeners are owned by their subscribing
|
|
24
|
+
* components (typically via `takeUntilDestroyed` or async pipe). When the
|
|
25
|
+
* component re-renders or unsubscribes, the listener disposes. If a
|
|
26
|
+
* component does NOT unsubscribe on org change, its listener will keep
|
|
27
|
+
* pointing at the previous org's path and may start failing rules. The fix
|
|
28
|
+
* is component-level: subscribe to `orgChanged$` and reset state, or use
|
|
29
|
+
* the `reload: true` option.
|
|
30
|
+
*
|
|
31
|
+
* 2. **Re-instantiate routed components.** Angular keeps mounted components
|
|
32
|
+
* alive across navigations. If you need fresh state, either subscribe to
|
|
33
|
+
* `orgChanged$` in the component, or use `reload: true`.
|
|
34
|
+
*
|
|
35
|
+
* @example Basic switch with loading state
|
|
36
|
+
* ```typescript
|
|
37
|
+
* private orgSwitch = inject(OrgSwitchService);
|
|
38
|
+
*
|
|
39
|
+
* async onSwitchOrg(orgId: string) {
|
|
40
|
+
* await this.orgSwitch.switchTo(orgId);
|
|
41
|
+
* // Components subscribed to orgChanged$ have already reset their state.
|
|
42
|
+
* }
|
|
43
|
+
*
|
|
44
|
+
* // In template:
|
|
45
|
+
* @if (orgSwitch.switching()) { <val-loading /> }
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example Component reacting to org change
|
|
49
|
+
* ```typescript
|
|
50
|
+
* private orgSwitch = inject(OrgSwitchService);
|
|
51
|
+
*
|
|
52
|
+
* constructor() {
|
|
53
|
+
* this.orgSwitch.orgChanged$
|
|
54
|
+
* .pipe(takeUntilDestroyed())
|
|
55
|
+
* .subscribe(() => this.resetState());
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @example Brutal reload mode
|
|
60
|
+
* ```typescript
|
|
61
|
+
* await this.orgSwitch.switchTo(orgId, { reload: true });
|
|
62
|
+
* // window.location.reload() — clean slate, loses scroll position
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export class OrgSwitchService {
|
|
66
|
+
constructor(auth) {
|
|
67
|
+
this.auth = auth;
|
|
68
|
+
this._switching = signal(false);
|
|
69
|
+
this._orgChanged = new Subject();
|
|
70
|
+
/**
|
|
71
|
+
* `true` while a switch is in flight. UI should disable interactions
|
|
72
|
+
* with org-scoped data and show a loading indicator.
|
|
73
|
+
*/
|
|
74
|
+
this.switching = this._switching.asReadonly();
|
|
75
|
+
/**
|
|
76
|
+
* Fires after a successful switch, with the previous and new org ids.
|
|
77
|
+
* Components subscribe to invalidate caches / reset state.
|
|
78
|
+
*
|
|
79
|
+
* Fires AFTER the Firebase re-auth completes — listeners attached here
|
|
80
|
+
* see the updated Firebase user / activeOrg claim.
|
|
81
|
+
*/
|
|
82
|
+
this.orgChanged$ = this._orgChanged.asObservable();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Switch the user's active organization.
|
|
86
|
+
*
|
|
87
|
+
* Re-entrant safe: while a switch is in flight, additional calls are
|
|
88
|
+
* rejected silently (returns immediately). Inspect `switching()` to gate UI.
|
|
89
|
+
*
|
|
90
|
+
* @param orgId Target organization id. Must be one the user has a role in
|
|
91
|
+
* — backend rejects otherwise with `PERMISSION_DENIED`.
|
|
92
|
+
* @param options See `SwitchOrgOptions`.
|
|
93
|
+
*
|
|
94
|
+
* @throws The error from `auth.switchOrg` if the backend call fails.
|
|
95
|
+
* `switching` returns to `false` before the error propagates.
|
|
96
|
+
*/
|
|
97
|
+
async switchTo(orgId, options = {}) {
|
|
98
|
+
if (this._switching()) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const previousOrg = this.currentActiveOrg();
|
|
102
|
+
if (previousOrg === orgId) {
|
|
103
|
+
// No-op — already on this org.
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
this._switching.set(true);
|
|
107
|
+
try {
|
|
108
|
+
await firstValueFrom(this.auth.switchOrg(orgId));
|
|
109
|
+
this._orgChanged.next({ previousOrg, newOrg: orgId });
|
|
110
|
+
if (options.reload && typeof window !== 'undefined') {
|
|
111
|
+
window.location.reload();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
this._switching.set(false);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Read the current `activeOrg` from the auth user signal.
|
|
120
|
+
* Falls back to empty string if the user isn't loaded yet.
|
|
121
|
+
*/
|
|
122
|
+
currentActiveOrg() {
|
|
123
|
+
const user = this.auth.user();
|
|
124
|
+
// AuthUser may expose activeOrgId under different names depending on
|
|
125
|
+
// backend version — keep tolerant.
|
|
126
|
+
return (user?.activeOrgId ??
|
|
127
|
+
user?.activeOrg ??
|
|
128
|
+
'');
|
|
129
|
+
}
|
|
130
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrgSwitchService, deps: [{ token: i1.AuthService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
131
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrgSwitchService, providedIn: 'root' }); }
|
|
132
|
+
}
|
|
133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrgSwitchService, decorators: [{
|
|
134
|
+
type: Injectable,
|
|
135
|
+
args: [{ providedIn: 'root' }]
|
|
136
|
+
}], ctorParameters: () => [{ type: i1.AuthService }] });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLXN3aXRjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zZXJ2aWNlcy9hdXRoL29yZy1zd2l0Y2guc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBOEIzRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyREc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBbUIzQixZQUFvQixJQUFpQjtRQUFqQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBbEJwQixlQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFFOUQ7OztXQUdHO1FBQ00sY0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEQ7Ozs7OztXQU1HO1FBQ00sZ0JBQVcsR0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUU1QyxDQUFDO0lBRXpDOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYSxFQUFFLFVBQTRCLEVBQUU7UUFDMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLElBQUksV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzFCLCtCQUErQjtZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFdEQsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUNwRCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdCQUFnQjtRQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLHFFQUFxRTtRQUNyRSxtQ0FBbUM7UUFDbkMsT0FBTyxDQUNKLElBQTRELEVBQUUsV0FBVztZQUN6RSxJQUE0RCxFQUFFLFNBQVM7WUFDeEUsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOytHQXZFVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGFjdGl2ZSBvcmdhbml6YXRpb24gY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdDaGFuZ2VkRXZlbnQge1xuICAvKiogT3JnIHRoZSB1c2VyIHdhcyBvbiBiZWZvcmUgdGhlIHN3aXRjaC4gTWF5IGJlIGVtcHR5IG9uIGZpcnN0IHNpZ24taW4uICovXG4gIHByZXZpb3VzT3JnOiBzdHJpbmc7XG4gIC8qKiBPcmcgdGhlIHVzZXIganVzdCBzd2l0Y2hlZCB0by4gKi9cbiAgbmV3T3JnOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYE9yZ1N3aXRjaFNlcnZpY2Uuc3dpdGNoVG9gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN3aXRjaE9yZ09wdGlvbnMge1xuICAvKipcbiAgICogSWYgYHRydWVgLCBhZnRlciB0aGUgc3dpdGNoIHN1Y2NlZWRzIHRoZSBwYWdlIGlzIGZ1bGx5IHJlbG9hZGVkIHZpYVxuICAgKiBgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpYC4gVXNlZnVsIGZvciBhcHBzIHdpdGggc2lnbmlmaWNhbnQgaW4tbWVtb3J5XG4gICAqIHN0YXRlIHRpZWQgdG8gdGhlIHByZXZpb3VzIG9yZyB0aGF0J3MgaGFyZCB0byBpbnZhbGlkYXRlIHBpZWNlIGJ5IHBpZWNlLlxuICAgKlxuICAgKiBUcmFkZS1vZmY6IHJlbG9hZCBsb3NlcyBhbGwgaW4tbWVtb3J5IHN0YXRlIChmb3Jtcywgc2Nyb2xsIHBvc2l0aW9uKS5cbiAgICogRGVmYXVsdDogYGZhbHNlYCDigJQgcmVsaWVzIG9uIGBvcmdDaGFuZ2VkJGAgYW5kIGBhdXRoLnVzZXIoKWAgc2lnbmFsXG4gICAqIHByb3BhZ2F0aW9uIGZvciBjb21wb25lbnRzIHRvIHJlYWN0LlxuICAgKi9cbiAgcmVsb2FkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcmdTd2l0Y2hTZXJ2aWNlIOKAlCBvcmNoZXN0cmF0ZXMgYWN0aXZlIG9yZ2FuaXphdGlvbiBjaGFuZ2VzIGFjcm9zcyB0aGUgYXBwLlxuICpcbiAqIEJ1aWx0IG9uIHRvcCBvZiBgQXV0aFNlcnZpY2Uuc3dpdGNoT3JnYCwgd2hpY2ggYWxyZWFkeTpcbiAqIC0gSGl0cyBgUE9TVCAvdjIvYXV0aC9zd2l0Y2gtb3JnYCBhbmQgcmVjZWl2ZXMgYSBuZXcgRmlyZWJhc2UgY3VzdG9tIHRva2VuLlxuICogLSBSZS1hdXRoZW50aWNhdGVzIEZpcmViYXNlIEF1dGggd2l0aCB0aGUgbmV3IHRva2VuIChSQkFDIGNsYWltcyB1cGRhdGUpLlxuICogLSBCcm9hZGNhc3RzIGBPUkdfU1dJVENIYCB0byBvdGhlciB0YWJzIHZpYSBgQXV0aFN5bmNTZXJ2aWNlYCAobXVsdGktdGFiIHN5bmMpLlxuICpcbiAqIFdoYXQgdGhpcyBzZXJ2aWNlIGFkZHMgb24gdG9wOlxuICogLSBBIGBzd2l0Y2hpbmdgIHNpZ25hbCBzbyB0aGUgVUkgY2FuIHNob3cgYSBsb2FkaW5nIGluZGljYXRvciAoMS0ycyBzd2l0Y2gpLlxuICogLSBBbiBgb3JnQ2hhbmdlZCRgIE9ic2VydmFibGUgdGhhdCBjb21wb25lbnRzIHN1YnNjcmliZSB0byBpbiBvcmRlciB0b1xuICogICBpbnZhbGlkYXRlIHRoZWlyIG9yZy1zY29wZWQgY2FjaGVzIChlLmcuIGRyb3Agb2xkIHF1ZXJ5IHJlc3VsdHMsIHJlc2V0XG4gKiAgIHBhZ2Ugc3RhdGUpIHdpdGhvdXQgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICogLSBPcHRpb25hbCBgcmVsb2FkOiB0cnVlYCBmb3IgYXBwcyB3aGVyZSBpbnZhbGlkYXRpbmcgaW4tbWVtb3J5IHN0YXRlIHBpZWNlXG4gKiAgIGJ5IHBpZWNlIGlzIGltcHJhY3RpY2FsLlxuICpcbiAqICoqV2hhdCB0aGlzIHNlcnZpY2UgZG9lcyBOT1QgZG8gYXV0b21hdGljYWxseToqKlxuICpcbiAqIDEuICoqVGVhcmRvd24gRmlyZXN0b3JlIGxpc3RlbmVycy4qKiBMaXN0ZW5lcnMgYXJlIG93bmVkIGJ5IHRoZWlyIHN1YnNjcmliaW5nXG4gKiAgICBjb21wb25lbnRzICh0eXBpY2FsbHkgdmlhIGB0YWtlVW50aWxEZXN0cm95ZWRgIG9yIGFzeW5jIHBpcGUpLiBXaGVuIHRoZVxuICogICAgY29tcG9uZW50IHJlLXJlbmRlcnMgb3IgdW5zdWJzY3JpYmVzLCB0aGUgbGlzdGVuZXIgZGlzcG9zZXMuIElmIGFcbiAqICAgIGNvbXBvbmVudCBkb2VzIE5PVCB1bnN1YnNjcmliZSBvbiBvcmcgY2hhbmdlLCBpdHMgbGlzdGVuZXIgd2lsbCBrZWVwXG4gKiAgICBwb2ludGluZyBhdCB0aGUgcHJldmlvdXMgb3JnJ3MgcGF0aCBhbmQgbWF5IHN0YXJ0IGZhaWxpbmcgcnVsZXMuIFRoZSBmaXhcbiAqICAgIGlzIGNvbXBvbmVudC1sZXZlbDogc3Vic2NyaWJlIHRvIGBvcmdDaGFuZ2VkJGAgYW5kIHJlc2V0IHN0YXRlLCBvciB1c2VcbiAqICAgIHRoZSBgcmVsb2FkOiB0cnVlYCBvcHRpb24uXG4gKlxuICogMi4gKipSZS1pbnN0YW50aWF0ZSByb3V0ZWQgY29tcG9uZW50cy4qKiBBbmd1bGFyIGtlZXBzIG1vdW50ZWQgY29tcG9uZW50c1xuICogICAgYWxpdmUgYWNyb3NzIG5hdmlnYXRpb25zLiBJZiB5b3UgbmVlZCBmcmVzaCBzdGF0ZSwgZWl0aGVyIHN1YnNjcmliZSB0b1xuICogICAgYG9yZ0NoYW5nZWQkYCBpbiB0aGUgY29tcG9uZW50LCBvciB1c2UgYHJlbG9hZDogdHJ1ZWAuXG4gKlxuICogQGV4YW1wbGUgQmFzaWMgc3dpdGNoIHdpdGggbG9hZGluZyBzdGF0ZVxuICogYGBgdHlwZXNjcmlwdFxuICogcHJpdmF0ZSBvcmdTd2l0Y2ggPSBpbmplY3QoT3JnU3dpdGNoU2VydmljZSk7XG4gKlxuICogYXN5bmMgb25Td2l0Y2hPcmcob3JnSWQ6IHN0cmluZykge1xuICogICBhd2FpdCB0aGlzLm9yZ1N3aXRjaC5zd2l0Y2hUbyhvcmdJZCk7XG4gKiAgIC8vIENvbXBvbmVudHMgc3Vic2NyaWJlZCB0byBvcmdDaGFuZ2VkJCBoYXZlIGFscmVhZHkgcmVzZXQgdGhlaXIgc3RhdGUuXG4gKiB9XG4gKlxuICogLy8gSW4gdGVtcGxhdGU6XG4gKiBAaWYgKG9yZ1N3aXRjaC5zd2l0Y2hpbmcoKSkgeyA8dmFsLWxvYWRpbmcgLz4gfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQ29tcG9uZW50IHJlYWN0aW5nIHRvIG9yZyBjaGFuZ2VcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHByaXZhdGUgb3JnU3dpdGNoID0gaW5qZWN0KE9yZ1N3aXRjaFNlcnZpY2UpO1xuICpcbiAqIGNvbnN0cnVjdG9yKCkge1xuICogICB0aGlzLm9yZ1N3aXRjaC5vcmdDaGFuZ2VkJFxuICogICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICogICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZXNldFN0YXRlKCkpO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgQnJ1dGFsIHJlbG9hZCBtb2RlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBhd2FpdCB0aGlzLm9yZ1N3aXRjaC5zd2l0Y2hUbyhvcmdJZCwgeyByZWxvYWQ6IHRydWUgfSk7XG4gKiAvLyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCkg4oCUIGNsZWFuIHNsYXRlLCBsb3NlcyBzY3JvbGwgcG9zaXRpb25cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE9yZ1N3aXRjaFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zd2l0Y2hpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcmdDaGFuZ2VkID0gbmV3IFN1YmplY3Q8T3JnQ2hhbmdlZEV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBgdHJ1ZWAgd2hpbGUgYSBzd2l0Y2ggaXMgaW4gZmxpZ2h0LiBVSSBzaG91bGQgZGlzYWJsZSBpbnRlcmFjdGlvbnNcbiAgICogd2l0aCBvcmctc2NvcGVkIGRhdGEgYW5kIHNob3cgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICovXG4gIHJlYWRvbmx5IHN3aXRjaGluZyA9IHRoaXMuX3N3aXRjaGluZy5hc1JlYWRvbmx5KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIGFmdGVyIGEgc3VjY2Vzc2Z1bCBzd2l0Y2gsIHdpdGggdGhlIHByZXZpb3VzIGFuZCBuZXcgb3JnIGlkcy5cbiAgICogQ29tcG9uZW50cyBzdWJzY3JpYmUgdG8gaW52YWxpZGF0ZSBjYWNoZXMgLyByZXNldCBzdGF0ZS5cbiAgICpcbiAgICogRmlyZXMgQUZURVIgdGhlIEZpcmViYXNlIHJlLWF1dGggY29tcGxldGVzIOKAlCBsaXN0ZW5lcnMgYXR0YWNoZWQgaGVyZVxuICAgKiBzZWUgdGhlIHVwZGF0ZWQgRmlyZWJhc2UgdXNlciAvIGFjdGl2ZU9yZyBjbGFpbS5cbiAgICovXG4gIHJlYWRvbmx5IG9yZ0NoYW5nZWQkOiBPYnNlcnZhYmxlPE9yZ0NoYW5nZWRFdmVudD4gPSB0aGlzLl9vcmdDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIFN3aXRjaCB0aGUgdXNlcidzIGFjdGl2ZSBvcmdhbml6YXRpb24uXG4gICAqXG4gICAqIFJlLWVudHJhbnQgc2FmZTogd2hpbGUgYSBzd2l0Y2ggaXMgaW4gZmxpZ2h0LCBhZGRpdGlvbmFsIGNhbGxzIGFyZVxuICAgKiByZWplY3RlZCBzaWxlbnRseSAocmV0dXJucyBpbW1lZGlhdGVseSkuIEluc3BlY3QgYHN3aXRjaGluZygpYCB0byBnYXRlIFVJLlxuICAgKlxuICAgKiBAcGFyYW0gb3JnSWQgVGFyZ2V0IG9yZ2FuaXphdGlvbiBpZC4gTXVzdCBiZSBvbmUgdGhlIHVzZXIgaGFzIGEgcm9sZSBpblxuICAgKiAgICAgICAgICAgICAg4oCUIGJhY2tlbmQgcmVqZWN0cyBvdGhlcndpc2Ugd2l0aCBgUEVSTUlTU0lPTl9ERU5JRURgLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBTZWUgYFN3aXRjaE9yZ09wdGlvbnNgLlxuICAgKlxuICAgKiBAdGhyb3dzIFRoZSBlcnJvciBmcm9tIGBhdXRoLnN3aXRjaE9yZ2AgaWYgdGhlIGJhY2tlbmQgY2FsbCBmYWlscy5cbiAgICogICAgICAgICBgc3dpdGNoaW5nYCByZXR1cm5zIHRvIGBmYWxzZWAgYmVmb3JlIHRoZSBlcnJvciBwcm9wYWdhdGVzLlxuICAgKi9cbiAgYXN5bmMgc3dpdGNoVG8ob3JnSWQ6IHN0cmluZywgb3B0aW9uczogU3dpdGNoT3JnT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuX3N3aXRjaGluZygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNPcmcgPSB0aGlzLmN1cnJlbnRBY3RpdmVPcmcoKTtcbiAgICBpZiAocHJldmlvdXNPcmcgPT09IG9yZ0lkKSB7XG4gICAgICAvLyBOby1vcCDigJQgYWxyZWFkeSBvbiB0aGlzIG9yZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zd2l0Y2hpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmF1dGguc3dpdGNoT3JnKG9yZ0lkKSk7XG4gICAgICB0aGlzLl9vcmdDaGFuZ2VkLm5leHQoeyBwcmV2aW91c09yZywgbmV3T3JnOiBvcmdJZCB9KTtcblxuICAgICAgaWYgKG9wdGlvbnMucmVsb2FkICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fc3dpdGNoaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlYWQgdGhlIGN1cnJlbnQgYGFjdGl2ZU9yZ2AgZnJvbSB0aGUgYXV0aCB1c2VyIHNpZ25hbC5cbiAgICogRmFsbHMgYmFjayB0byBlbXB0eSBzdHJpbmcgaWYgdGhlIHVzZXIgaXNuJ3QgbG9hZGVkIHlldC5cbiAgICovXG4gIHByaXZhdGUgY3VycmVudEFjdGl2ZU9yZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGgudXNlcigpO1xuICAgIC8vIEF1dGhVc2VyIG1heSBleHBvc2UgYWN0aXZlT3JnSWQgdW5kZXIgZGlmZmVyZW50IG5hbWVzIGRlcGVuZGluZyBvblxuICAgIC8vIGJhY2tlbmQgdmVyc2lvbiDigJQga2VlcCB0b2xlcmFudC5cbiAgICByZXR1cm4gKFxuICAgICAgKHVzZXIgYXMgeyBhY3RpdmVPcmdJZD86IHN0cmluZzsgYWN0aXZlT3JnPzogc3RyaW5nIH0gfCBudWxsKT8uYWN0aXZlT3JnSWQgPz9cbiAgICAgICh1c2VyIGFzIHsgYWN0aXZlT3JnSWQ/OiBzdHJpbmc7IGFjdGl2ZU9yZz86IHN0cmluZyB9IHwgbnVsbCk/LmFjdGl2ZU9yZyA/P1xuICAgICAgJydcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* Reemplaza la clase abstracta para evitar problemas con inject() en clases no-injectable.
|
|
6
6
|
*/
|
|
7
7
|
import { Injectable } from '@angular/core';
|
|
8
|
+
import { ABS_PATH_SENTINEL } from './firestore.service';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "./firestore.service";
|
|
10
11
|
/**
|
|
@@ -59,12 +60,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
59
60
|
export class TypedCollection {
|
|
60
61
|
constructor(firestore, collectionPath, options = {}) {
|
|
61
62
|
this.firestore = firestore;
|
|
62
|
-
this.collectionPath = collectionPath;
|
|
63
63
|
this.options = {
|
|
64
64
|
softDelete: false,
|
|
65
65
|
timestamps: true,
|
|
66
|
+
skipAppPrefix: false,
|
|
66
67
|
...options,
|
|
67
68
|
};
|
|
69
|
+
// Marcar el path con el sentinel cuando skipAppPrefix=true. FirestoreService
|
|
70
|
+
// detecta el sentinel y devuelve el path sin prefijo `apps/{appId}/`.
|
|
71
|
+
// Subcolecciones (subPath = `${this.collectionPath}/...`) heredan el sentinel
|
|
72
|
+
// automáticamente por concatenación.
|
|
73
|
+
this.collectionPath = this.options.skipAppPrefix
|
|
74
|
+
? `${ABS_PATH_SENTINEL}${collectionPath}`
|
|
75
|
+
: collectionPath;
|
|
68
76
|
}
|
|
69
77
|
// ===========================================================================
|
|
70
78
|
// LECTURAS ONE-TIME
|
|
@@ -290,4 +298,4 @@ export class TypedCollection {
|
|
|
290
298
|
return this.collectionPath;
|
|
291
299
|
}
|
|
292
300
|
}
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBb0MzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQyxZQUFvQixTQUEyQjtRQUEzQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtJQUFHLENBQUM7SUFFbkQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUNKLGNBQXNCLEVBQ3RCLE9BQTJCO1FBRTNCLE9BQU8sSUFBSSxlQUFlLENBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsQ0FBQzsrR0FmVSwwQkFBMEI7bUhBQTFCLDBCQUEwQixjQURiLE1BQU07OzRGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQW1CbEM7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUNVLFNBQTJCLEVBQzNCLGNBQXNCLEVBQzlCLFVBQTZCLEVBQUU7UUFGdkIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQVE7UUFHOUIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsOEVBQThFO0lBQzlFLG9CQUFvQjtJQUNwQiw4RUFBOEU7SUFFOUU7O09BRUc7SUFDSCxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMs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QUVHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpcmVzdG9yZSBDb2xsZWN0aW9uIEZhY3RvcnlcbiAqXG4gKiBQYXRyw7NuIGZhY3RvcnkgcGFyYSBjcmVhciBpbnN0YW5jaWFzIGRlIGNvbGVjY2nDs24gdGlwYWRhcy5cbiAqIFJlZW1wbGF6YSBsYSBjbGFzZSBhYnN0cmFjdGEgcGFyYSBldml0YXIgcHJvYmxlbWFzIGNvbiBpbmplY3QoKSBlbiBjbGFzZXMgbm8taW5qZWN0YWJsZS5cbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpcmVzdG9yZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmVzdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50LCBQYWdpbmF0ZWRSZXN1bHQsIFF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgdW5hIGNvbGVjY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogU2kgdHJ1ZSwgdXNhIHNvZnQgZGVsZXRlIChtYXJjYSBkZWxldGVkQXQgZW4gbHVnYXIgZGUgZWxpbWluYXIpLlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgc29mdERlbGV0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNpIHRydWUsIG1hbmVqYSBhdXRvbcOhdGljYW1lbnRlIGNyZWF0ZWRBdC91cGRhdGVkQXQuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHRpbWVzdGFtcHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlZmVyZW5jaWEgYSB1bmEgc3ViLWNvbGVjY2nDs24gdGlwYWRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YkNvbGxlY3Rpb25SZWY8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PiB7XG4gIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+O1xuICBnZXRBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPjtcbiAgd2F0Y2goaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VCB8IG51bGw+O1xuICB3YXRjaEFsbChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+O1xuICBjcmVhdGUoZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pOiBQcm9taXNlPFQ+O1xuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPik6IFByb21pc2U8dm9pZD47XG4gIGRlbGV0ZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBGYWN0b3J5IHBhcmEgY3JlYXIgaW5zdGFuY2lhcyBkZSBjb2xlY2Npw7NuIHRpcGFkYXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG4gKiBleHBvcnQgY2xhc3MgVXNlcnNTZXJ2aWNlIHtcbiAqICAgcHJpdmF0ZSB1c2VycyA9IGluamVjdChGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSkuY3JlYXRlPFVzZXI+KCd1c2VycycpO1xuICpcbiAqICAgZ2V0QWxsID0gKCkgPT4gdGhpcy51c2Vycy5nZXRBbGwoKTtcbiAqICAgZ2V0QnlJZCA9IChpZDogc3RyaW5nKSA9PiB0aGlzLnVzZXJzLmdldEJ5SWQoaWQpO1xuICogICBjcmVhdGUgPSAoZGF0YTogT21pdDxVc2VyLCAnaWQnPikgPT4gdGhpcy51c2Vycy5jcmVhdGUoZGF0YSk7XG4gKlxuICogICAvLyBNw6l0b2RvcyBwZXJzb25hbGl6YWRvc1xuICogICBhc3luYyBnZXRBY3RpdmVVc2VycygpOiBQcm9taXNlPFVzZXJbXT4ge1xuICogICAgIHJldHVybiB0aGlzLnVzZXJzLnF1ZXJ5KHtcbiAqICAgICAgIHdoZXJlOiBbeyBmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZSB9XVxuICogICAgIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGaXJlc3RvcmVDb2xsZWN0aW9uRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlyZXN0b3JlOiBGaXJlc3RvcmVTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDcmVhIHVuYSBpbnN0YW5jaWEgZGUgY29sZWNjacOzbiB0aXBhZGEuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzbiBlbiBGaXJlc3RvcmVcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBjb25maWd1cmFjacOzblxuICAgKiBAcmV0dXJucyBJbnN0YW5jaWEgZGUgVHlwZWRDb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGU8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDb2xsZWN0aW9uT3B0aW9uc1xuICApOiBUeXBlZENvbGxlY3Rpb248VD4ge1xuICAgIHJldHVybiBuZXcgVHlwZWRDb2xsZWN0aW9uPFQ+KHRoaXMuZmlyZXN0b3JlLCBjb2xsZWN0aW9uUGF0aCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb2xlY2Npw7NuIHRpcGFkYSBjb24gbcOpdG9kb3MgQ1JVRC5cbiAqXG4gKiBOTyB1c2EgaW5qZWN0KCkgLSByZWNpYmUgRmlyZXN0b3JlU2VydmljZSBwb3IgY29uc3RydWN0b3IuXG4gKiBFc3RvIGV2aXRhIGVsIGVycm9yIE5HMDIwMy5cbiAqL1xuZXhwb3J0IGNsYXNzIFR5cGVkQ29sbGVjdGlvbjxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBDb2xsZWN0aW9uT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnMgPSB7fVxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBzb2Z0RGVsZXRlOiBmYWxzZSxcbiAgICAgIHRpbWVzdGFtcHM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVDVFVSQVMgT05FLVRJTUVcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW4gZG9jdW1lbnRvIHBvciBJRC5cbiAgICovXG4gIGFzeW5jIGdldEJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRvZG9zIGxvcyBkb2N1bWVudG9zIGRlIGxhIGNvbGVjY2nDs24uXG4gICAqL1xuICBhc3luYyBnZXRBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRWplY3V0YSB1bmEgcXVlcnkgcGVyc29uYWxpemFkYS5cbiAgICovXG4gIGFzeW5jIHF1ZXJ5KG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBkb2N1bWVudG9zIGNvbiBwYWdpbmFjacOzbi5cbiAgICovXG4gIGFzeW5jIHBhZ2luYXRlKG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyAmIHsgbGltaXQ6IG51bWJlciB9KTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucykgYXMgUXVlcnlPcHRpb25zICYgeyBsaW1pdDogbnVtYmVyIH07XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdldFBhZ2luYXRlZDxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZWwgcHJpbWVyIGRvY3VtZW50byBxdWUgY29pbmNpZGEgY29uIGxhIHF1ZXJ5LlxuICAgKi9cbiAgYXN5bmMgZ2V0Rmlyc3Qob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxpbWl0OiAxLFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gICAgcmV0dXJuIHJlc3VsdHNbMF0gPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgbG9zIGRvY3VtZW50b3MgcXVlIGNvaW5jaWRlbiBjb24gbGEgcXVlcnkgKHNlcnZlci1zaWRlIGFnZ3JlZ2F0aW9uKS5cbiAgICogTm8gZGVzY2FyZ2EgZG9jdW1lbnRvcyDigJQgdXNhIGdldENvdW50RnJvbVNlcnZlcigpIGRlIEZpcmVzdG9yZS5cbiAgICovXG4gIGFzeW5jIGNvdW50KG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuY291bnREb2NzKHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSB0b2RvcyBsb3MgZG9jdW1lbnRvcyAob25lLXRpbWUgZmV0Y2ggc2luIGxpc3RlbmVyKS5cbiAgICogQSBkaWZlcmVuY2lhIGRlIHdhdGNoQWxsKCksIG5vIG1hbnRpZW5lIHN1YnNjcmlwY2lvbmVzIGFjdGl2YXMuXG4gICAqL1xuICBhc3luYyBnZXRBbGxPbmNlKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqL1xuICBhc3luYyBleGlzdHMoaWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5leGlzdHModGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSBjYW1iaW9zIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIHdhdGNoKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmRvY0NoYW5nZXM8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgd2F0Y2hBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgdW5hIHF1ZXJ5IHBlcnNvbmFsaXphZGEuXG4gICAqL1xuICB3YXRjaFF1ZXJ5KG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBxdWVyeU9wdGlvbnMpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ3JlYSB1biBudWV2byBkb2N1bWVudG8gY29uIElEIGF1dG8tZ2VuZXJhZG8uXG4gICAqL1xuICBhc3luYyBjcmVhdGUoZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pOiBQcm9taXNlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuYWRkRG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWEgdW4gZG9jdW1lbnRvIGNvbiBJRCBlc3BlY8OtZmljby5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVdpdGhJZChpZDogc3RyaW5nLCBkYXRhOiBPbWl0PFQsICdpZCc+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnNldERvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGNhbXBvcyBkZSB1biBkb2N1bWVudG8uXG4gICAqL1xuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxPbWl0PFQsICdpZCcgfCAnY3JlYXRlZEF0Jz4+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBkb2N1bWVudG8uXG4gICAqIFNpIHNvZnREZWxldGUgZXN0w6EgaGFiaWxpdGFkbywgbWFyY2EgY29tbyBlbGltaW5hZG8gZW4gbHVnYXIgZGUgYm9ycmFyLlxuICAgKi9cbiAgYXN5bmMgZGVsZXRlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnNvZnREZWxldGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgICAgZGVsZXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFBhcnRpYWw8VD4pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZGVsZXRlRG9jKHRoaXMuY29sbGVjdGlvblBhdGgsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgbcO6bHRpcGxlcyBkb2N1bWVudG9zIGVuIHVuYSBzb2xhIG9wZXJhY2nDs24gYXTDs21pY2EuXG4gICAqL1xuICBhc3luYyBiYXRjaFVwZGF0ZShpZHM6IHN0cmluZ1tdLCBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7IC8vIEZpcmVzdG9yZSBiYXRjaCBsaW1pdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSArPSBCQVRDSF9MSU1JVCkge1xuICAgICAgY29uc3QgY2h1bmsgPSBpZHMuc2xpY2UoaSwgaSArIEJBVENIX0xJTUlUKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlyZXN0b3JlLmJhdGNoKGJhdGNoID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBjaHVuaykge1xuICAgICAgICAgIGJhdGNoLnVwZGF0ZShgJHt0aGlzLmNvbGxlY3Rpb25QYXRofS8ke2lkfWAsIGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSBtw7psdGlwbGVzIGRvY3VtZW50b3MgZW4gdW5hIHNvbGEgb3BlcmFjacOzbiBhdMOzbWljYS5cbiAgICovXG4gIGFzeW5jIGJhdGNoRGVsZXRlKGlkczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgQkFUQ0hfTElNSVQgPSA1MDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpICs9IEJBVENIX0xJTUlUKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGlkcy5zbGljZShpLCBpICsgQkFUQ0hfTElNSVQpO1xuICAgICAgYXdhaXQgdGhpcy5maXJlc3RvcmUuYmF0Y2goYmF0Y2ggPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNodW5rKSB7XG4gICAgICAgICAgYmF0Y2guZGVsZXRlKGAke3RoaXMuY29sbGVjdGlvblBhdGh9LyR7aWR9YCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0YXVyYSB1biBkb2N1bWVudG8gc29mdC1kZWxldGVkLlxuICAgKi9cbiAgYXN5bmMgcmVzdG9yZShpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb2Z0IGRlbGV0ZSBubyBlc3TDoSBoYWJpbGl0YWRvIHBhcmEgZXN0YSBjb2xlY2Npw7NuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS51cGRhdGVEb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQsIHtcbiAgICAgIGRlbGV0ZWRBdDogbnVsbCxcbiAgICB9IGFzIHVua25vd24gYXMgUGFydGlhbDxUPik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1VCLUNPTEVDQ0lPTkVTXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuYSByZWZlcmVuY2lhIGEgdW5hIHN1Yi1jb2xlY2Npw7NuLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEVuIFVzZXJzU2VydmljZVxuICAgKiBnZXRVc2VyRG9jdW1lbnRzKHVzZXJJZDogc3RyaW5nKSB7XG4gICAqICAgcmV0dXJuIHRoaXMudXNlcnMuc3ViY29sbGVjdGlvbjxEb2N1bWVudD4odXNlcklkLCAnZG9jdW1lbnRzJyk7XG4gICAqIH1cbiAgICpcbiAgICogLy8gVXNvXG4gICAqIGNvbnN0IGRvY3MgPSBhd2FpdCB1c2Vycy5nZXRVc2VyRG9jdW1lbnRzKCd1c2VyMTIzJykuZ2V0QWxsKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgc3ViY29sbGVjdGlvbjxTIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIHBhcmVudElkOiBzdHJpbmcsXG4gICAgc3ViY29sbGVjdGlvbk5hbWU6IHN0cmluZ1xuICApOiBTdWJDb2xsZWN0aW9uUmVmPFM+IHtcbiAgICBjb25zdCBzdWJQYXRoID0gYCR7dGhpcy5jb2xsZWN0aW9uUGF0aH0vJHtwYXJlbnRJZH0vJHtzdWJjb2xsZWN0aW9uTmFtZX1gO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEJ5SWQ6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5nZXREb2M8Uz4oc3ViUGF0aCwgaWQpLFxuICAgICAgZ2V0QWxsOiAob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucykgPT4gdGhpcy5maXJlc3RvcmUuZ2V0RG9jczxTPihzdWJQYXRoLCBvcHRpb25zKSxcbiAgICAgIHdhdGNoOiAoaWQ6IHN0cmluZykgPT4gdGhpcy5maXJlc3RvcmUuZG9jQ2hhbmdlczxTPihzdWJQYXRoLCBpZCksXG4gICAgICB3YXRjaEFsbDogKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpID0+IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFM+KHN1YlBhdGgsIG9wdGlvbnMpLFxuICAgICAgY3JlYXRlOiAoZGF0YTogT21pdDxTLCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz4pID0+XG4gICAgICAgIHRoaXMuZmlyZXN0b3JlLmFkZERvYzxTPihzdWJQYXRoLCBkYXRhKSxcbiAgICAgIHVwZGF0ZTogKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8Uz4pID0+IHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxTPihzdWJQYXRoLCBpZCwgZGF0YSksXG4gICAgICBkZWxldGU6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5kZWxldGVEb2Moc3ViUGF0aCwgaWQpLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBmaWx0cm9zIHBvciBkZWZlY3RvIGEgbGFzIHF1ZXJpZXMuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5T3B0aW9ucyB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMgPz8ge307XG4gICAgfVxuXG4gICAgLy8gRXhjbHVpciBkb2N1bWVudG9zIHNvZnQtZGVsZXRlZCBwb3IgZGVmZWN0b1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0geyBmaWVsZDogJ2RlbGV0ZWRBdCcsIG9wZXJhdG9yOiAnPT0nIGFzIGNvbnN0LCB2YWx1ZTogbnVsbCB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB3aGVyZTogWy4uLihvcHRpb25zPy53aGVyZSA/PyBbXSksIHdoZXJlQ2xhdXNlXSxcbiAgICB9O1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBudWV2byBJRCBzaW4gY3JlYXIgZWwgZG9jdW1lbnRvLlxuICAgKi9cbiAgZ2VuZXJhdGVJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZW5lcmF0ZUlkKHRoaXMuY29sbGVjdGlvblBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgbGEgcnV0YSBkZSBsYSBjb2xlY2Npw7NuLlxuICAgKi9cbiAgZ2V0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25QYXRoO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIEZpcmVzdG9yZUNvbGxlY3Rpb25GYWN0b3J5LmNyZWF0ZSgpIGluc3RlYWQuXG4gKiBUeXBlIGFsaWFzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlyZXN0b3JlQ29sbGVjdGlvbjxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+ID0gVHlwZWRDb2xsZWN0aW9uPFQ+O1xuIl19
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS1jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0scUJBQXFCLENBQUM7OztBQTZDMUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUVILE1BQU0sT0FBTywwQkFBMEI7SUFDckMsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBRyxDQUFDO0lBRW5EOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FDSixjQUFzQixFQUN0QixPQUEyQjtRQUUzQixPQUFPLElBQUksZUFBZSxDQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7K0dBZlUsMEJBQTBCO21IQUExQiwwQkFBMEIsY0FEYixNQUFNOzs0RkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7QUFtQmxDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFDVSxTQUEyQixFQUNuQyxjQUFzQixFQUN0QixVQUE2QixFQUFFO1FBRnZCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBSW5DLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixVQUFVLEVBQUUsS0FBSztZQUNqQixVQUFVLEVBQUUsSUFBSTtZQUNoQixhQUFhLEVBQUUsS0FBSztZQUNwQixHQUFHLE9BQU87U0FDWCxDQUFDO1FBQ0YsNkVBQTZFO1FBQzdFLHNFQUFzRTtRQUN0RSw4RUFBOEU7UUFDOUUscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxjQUFj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LENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUM7U0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsYUFBYTtJQUNiLDhFQUE4RTtJQUU5RTs7T0FFRztJQUNILFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyZXN0b3JlIENvbGxlY3Rpb24gRmFjdG9yeVxuICpcbiAqIFBhdHLDs24gZmFjdG9yeSBwYXJhIGNyZWFyIGluc3RhbmNpYXMgZGUgY29sZWNjacOzbiB0aXBhZGFzLlxuICogUmVlbXBsYXphIGxhIGNsYXNlIGFic3RyYWN0YSBwYXJhIGV2aXRhciBwcm9ibGVtYXMgY29uIGluamVjdCgpIGVuIGNsYXNlcyBuby1pbmplY3RhYmxlLlxuICovXG5cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQUJTX1BBVEhfU0VOVElORUwsIEZpcmVzdG9yZVNlcnZpY2UgfSBmcm9tICcuL2ZpcmVzdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpcmVzdG9yZURvY3VtZW50LCBQYWdpbmF0ZWRSZXN1bHQsIFF1ZXJ5T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIE9wY2lvbmVzIGRlIGNvbmZpZ3VyYWNpw7NuIHBhcmEgdW5hIGNvbGVjY2nDs24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogU2kgdHJ1ZSwgdXNhIHNvZnQgZGVsZXRlIChtYXJjYSBkZWxldGVkQXQgZW4gbHVnYXIgZGUgZWxpbWluYXIpLlxuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgc29mdERlbGV0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNpIHRydWUsIG1hbmVqYSBhdXRvbcOhdGljYW1lbnRlIGNyZWF0ZWRBdC91cGRhdGVkQXQuXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHRpbWVzdGFtcHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaSB0cnVlLCBlbCBwYXRoIHNlIHRyYXRhIGNvbW8gZ2xvYmFsIHkgTk8gc2UgcHJlZmlqYSBjb24gYGFwcHMve2FwcElkfS9gLlxuICAgKlxuICAgKiBVc2FyIHBhcmEgY29sZWNjaW9uZXMgY3Jvc3MtYXBwIGEgbml2ZWwgdXNlci9nbG9iYWwsIHAuZWouXG4gICAqIGB1c2Vycy97dWlkfS9ub3RpZmljYXRpb25zYCAoaW5ib3ggZ2xvYmFsKSwgYHByb2ZpbGVzL3t1aWR9YCBvIGBwdWJsaWMvLi4uYC5cbiAgICpcbiAgICogTGFzIHJlZ2xhcyBkZSBGaXJlc3RvcmUgZGViZW4gcGVybWl0aXIgZWwgcGF0aCBhYnNvbHV0byBjb3JyZXNwb25kaWVudGUuXG4gICAqXG4gICAqIERlZmF1bHQ6IGZhbHNlIChwYXRoIHByZWZpamFkbyBhIGBhcHBzL3thcHBJZH0vLi4uYCkuXG4gICAqL1xuICBza2lwQXBwUHJlZml4PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2lhIGEgdW5hIHN1Yi1jb2xlY2Npw7NuIHRpcGFkYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdWJDb2xsZWN0aW9uUmVmPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4ge1xuICBnZXRCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPjtcbiAgZ2V0QWxsKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPFRbXT47XG4gIHdhdGNoKGlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCBudWxsPjtcbiAgd2F0Y2hBbGwob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPjtcbiAgY3JlYXRlKGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+KTogUHJvbWlzZTxUPjtcbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pOiBQcm9taXNlPHZvaWQ+O1xuICBkZWxldGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogRmFjdG9yeSBwYXJhIGNyZWFyIGluc3RhbmNpYXMgZGUgY29sZWNjacOzbiB0aXBhZGFzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuICogZXhwb3J0IGNsYXNzIFVzZXJzU2VydmljZSB7XG4gKiAgIHByaXZhdGUgdXNlcnMgPSBpbmplY3QoRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnkpLmNyZWF0ZTxVc2VyPigndXNlcnMnKTtcbiAqXG4gKiAgIGdldEFsbCA9ICgpID0+IHRoaXMudXNlcnMuZ2V0QWxsKCk7XG4gKiAgIGdldEJ5SWQgPSAoaWQ6IHN0cmluZykgPT4gdGhpcy51c2Vycy5nZXRCeUlkKGlkKTtcbiAqICAgY3JlYXRlID0gKGRhdGE6IE9taXQ8VXNlciwgJ2lkJz4pID0+IHRoaXMudXNlcnMuY3JlYXRlKGRhdGEpO1xuICpcbiAqICAgLy8gTcOpdG9kb3MgcGVyc29uYWxpemFkb3NcbiAqICAgYXN5bmMgZ2V0QWN0aXZlVXNlcnMoKTogUHJvbWlzZTxVc2VyW10+IHtcbiAqICAgICByZXR1cm4gdGhpcy51c2Vycy5xdWVyeSh7XG4gKiAgICAgICB3aGVyZTogW3sgZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6IHRydWUgfV1cbiAqICAgICB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlU2VydmljZSkge31cblxuICAvKipcbiAgICogQ3JlYSB1bmEgaW5zdGFuY2lhIGRlIGNvbGVjY2nDs24gdGlwYWRhLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs24gZW4gRmlyZXN0b3JlXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgY29uZmlndXJhY2nDs25cbiAgICogQHJldHVybnMgSW5zdGFuY2lhIGRlIFR5cGVkQ29sbGVjdGlvblxuICAgKi9cbiAgY3JlYXRlPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ29sbGVjdGlvbk9wdGlvbnNcbiAgKTogVHlwZWRDb2xsZWN0aW9uPFQ+IHtcbiAgICByZXR1cm4gbmV3IFR5cGVkQ29sbGVjdGlvbjxUPih0aGlzLmZpcmVzdG9yZSwgY29sbGVjdGlvblBhdGgsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogQ29sZWNjacOzbiB0aXBhZGEgY29uIG3DqXRvZG9zIENSVUQuXG4gKlxuICogTk8gdXNhIGluamVjdCgpIC0gcmVjaWJlIEZpcmVzdG9yZVNlcnZpY2UgcG9yIGNvbnN0cnVjdG9yLlxuICogRXN0byBldml0YSBlbCBlcnJvciBORzAyMDMuXG4gKi9cbmV4cG9ydCBjbGFzcyBUeXBlZENvbGxlY3Rpb248VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQ29sbGVjdGlvbk9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29sbGVjdGlvblBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlU2VydmljZSxcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IENvbGxlY3Rpb25PcHRpb25zID0ge31cbiAgKSB7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgc29mdERlbGV0ZTogZmFsc2UsXG4gICAgICB0aW1lc3RhbXBzOiB0cnVlLFxuICAgICAgc2tpcEFwcFByZWZpeDogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gICAgLy8gTWFyY2FyIGVsIHBhdGggY29uIGVsIHNlbnRpbmVsIGN1YW5kbyBza2lwQXBwUHJlZml4PXRydWUuIEZpcmVzdG9yZVNlcnZpY2VcbiAgICAvLyBkZXRlY3RhIGVsIHNlbnRpbmVsIHkgZGV2dWVsdmUgZWwgcGF0aCBzaW4gcHJlZmlqbyBgYXBwcy97YXBwSWR9L2AuXG4gICAgLy8gU3ViY29sZWNjaW9uZXMgKHN1YlBhdGggPSBgJHt0aGlzLmNvbGxlY3Rpb25QYXRofS8uLi5gKSBoZXJlZGFuIGVsIHNlbnRpbmVsXG4gICAgLy8gYXV0b23DoXRpY2FtZW50ZSBwb3IgY29uY2F0ZW5hY2nDs24uXG4gICAgdGhpcy5jb2xsZWN0aW9uUGF0aCA9IHRoaXMub3B0aW9ucy5za2lwQXBwUHJlZml4XG4gICAgICA/IGAke0FCU19QQVRIX1NFTlRJTkVMfSR7Y29sbGVjdGlvblBhdGh9YFxuICAgICAgOiBjb2xsZWN0aW9uUGF0aDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRUNUVVJBUyBPTkUtVElNRVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSB1biBkb2N1bWVudG8gcG9yIElELlxuICAgKi9cbiAgYXN5bmMgZ2V0QnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdG9kb3MgbG9zIGRvY3VtZW50b3MgZGUgbGEgY29sZWNjacOzbi5cbiAgICovXG4gIGFzeW5jIGdldEFsbChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdldERvY3M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFamVjdXRhIHVuYSBxdWVyeSBwZXJzb25hbGl6YWRhLlxuICAgKi9cbiAgYXN5bmMgcXVlcnkob3B0aW9uczogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdldERvY3M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIGRvY3VtZW50b3MgY29uIHBhZ2luYWNpw7NuLlxuICAgKi9cbiAgYXN5bmMgcGFnaW5hdGUob3B0aW9uczogUXVlcnlPcHRpb25zICYgeyBsaW1pdDogbnVtYmVyIH0pOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zKSBhcyBRdWVyeU9wdGlvbnMgJiB7IGxpbWl0OiBudW1iZXIgfTtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZ2V0UGFnaW5hdGVkPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBlbCBwcmltZXIgZG9jdW1lbnRvIHF1ZSBjb2luY2lkYSBjb24gbGEgcXVlcnkuXG4gICAqL1xuICBhc3luYyBnZXRGaXJzdChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgIGNvbnN0IHF1ZXJ5T3B0aW9ucyA9IHRoaXMuYXBwbHlEZWZhdWx0RmlsdGVycyh7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGltaXQ6IDEsXG4gICAgfSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlLmdldERvY3M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgICByZXR1cm4gcmVzdWx0c1swXSA/PyBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1ZW50YSBsb3MgZG9jdW1lbnRvcyBxdWUgY29pbmNpZGVuIGNvbiBsYSBxdWVyeSAoc2VydmVyLXNpZGUgYWdncmVnYXRpb24pLlxuICAgKiBObyBkZXNjYXJnYSBkb2N1bWVudG9zIOKAlCB1c2EgZ2V0Q291bnRGcm9tU2VydmVyKCkgZGUgRmlyZXN0b3JlLlxuICAgKi9cbiAgYXN5bmMgY291bnQob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5jb3VudERvY3ModGhpcy5jb2xsZWN0aW9uUGF0aCwgcXVlcnlPcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHRvZG9zIGxvcyBkb2N1bWVudG9zIChvbmUtdGltZSBmZXRjaCBzaW4gbGlzdGVuZXIpLlxuICAgKiBBIGRpZmVyZW5jaWEgZGUgd2F0Y2hBbGwoKSwgbm8gbWFudGllbmUgc3Vic2NyaXBjaW9uZXMgYWN0aXZhcy5cbiAgICovXG4gIGFzeW5jIGdldEFsbE9uY2Uob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcXVlcnlPcHRpb25zID0gdGhpcy5hcHBseURlZmF1bHRGaWx0ZXJzKG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW4gZG9jdW1lbnRvIGV4aXN0ZS5cbiAgICovXG4gIGFzeW5jIGV4aXN0cyhpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmV4aXN0cyh0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1VCU0NSSVBDSU9ORVMgUkVBTC1USU1FXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBTdXNjcmliZSBhIGNhbWJpb3MgZGUgdW4gZG9jdW1lbnRvLlxuICAgKi9cbiAgd2F0Y2goaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuZG9jQ2hhbmdlczxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSBjYW1iaW9zIGRlIGxhIGNvbGVjY2nDs24uXG4gICAqL1xuICB3YXRjaEFsbChvcHRpb25zPzogUXVlcnlPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSB1bmEgcXVlcnkgcGVyc29uYWxpemFkYS5cbiAgICovXG4gIHdhdGNoUXVlcnkob3B0aW9uczogUXVlcnlPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBxdWVyeU9wdGlvbnMgPSB0aGlzLmFwcGx5RGVmYXVsdEZpbHRlcnMob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIHF1ZXJ5T3B0aW9ucyk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNDUklUVVJBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBDcmVhIHVuIG51ZXZvIGRvY3VtZW50byBjb24gSUQgYXV0by1nZW5lcmFkby5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBPbWl0PFQsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICd1cGRhdGVkQXQnPik6IFByb21pc2U8VD4ge1xuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5hZGREb2M8VD4odGhpcy5jb2xsZWN0aW9uUGF0aCwgZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSB1biBkb2N1bWVudG8gY29uIElEIGVzcGVjw61maWNvLlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2l0aElkKGlkOiBzdHJpbmcsIGRhdGE6IE9taXQ8VCwgJ2lkJz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuc2V0RG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGlkLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgY2FtcG9zIGRlIHVuIGRvY3VtZW50by5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnPj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUudXBkYXRlRG9jPFQ+KHRoaXMuY29sbGVjdGlvblBhdGgsIGlkLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIHVuIGRvY3VtZW50by5cbiAgICogU2kgc29mdERlbGV0ZSBlc3TDoSBoYWJpbGl0YWRvLCBtYXJjYSBjb21vIGVsaW1pbmFkbyBlbiBsdWdhciBkZSBib3JyYXIuXG4gICAqL1xuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc29mdERlbGV0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwge1xuICAgICAgICBkZWxldGVkQXQ6IG5ldyBEYXRlKCksXG4gICAgICB9IGFzIHVua25vd24gYXMgUGFydGlhbDxUPik7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpcmVzdG9yZS5kZWxldGVEb2ModGhpcy5jb2xsZWN0aW9uUGF0aCwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBtw7psdGlwbGVzIGRvY3VtZW50b3MgZW4gdW5hIHNvbGEgb3BlcmFjacOzbiBhdMOzbWljYS5cbiAgICovXG4gIGFzeW5jIGJhdGNoVXBkYXRlKGlkczogc3RyaW5nW10sIGRhdGE6IFBhcnRpYWw8T21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCc+Pik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBCQVRDSF9MSU1JVCA9IDUwMDsgLy8gRmlyZXN0b3JlIGJhdGNoIGxpbWl0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpICs9IEJBVENIX0xJTUlUKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGlkcy5zbGljZShpLCBpICsgQkFUQ0hfTElNSVQpO1xuICAgICAgYXdhaXQgdGhpcy5maXJlc3RvcmUuYmF0Y2goYmF0Y2ggPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNodW5rKSB7XG4gICAgICAgICAgYmF0Y2gudXBkYXRlKGAke3RoaXMuY29sbGVjdGlvblBhdGh9LyR7aWR9YCwgZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIG3Dumx0aXBsZXMgZG9jdW1lbnRvcyBlbiB1bmEgc29sYSBvcGVyYWNpw7NuIGF0w7NtaWNhLlxuICAgKi9cbiAgYXN5bmMgYmF0Y2hEZWxldGUoaWRzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBCQVRDSF9MSU1JVCA9IDUwMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlkcy5sZW5ndGg7IGkgKz0gQkFUQ0hfTElNSVQpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gaWRzLnNsaWNlKGksIGkgKyBCQVRDSF9MSU1JVCk7XG4gICAgICBhd2FpdCB0aGlzLmZpcmVzdG9yZS5iYXRjaChiYXRjaCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgY2h1bmspIHtcbiAgICAgICAgICBiYXRjaC5kZWxldGUoYCR7dGhpcy5jb2xsZWN0aW9uUGF0aH0vJHtpZH1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RhdXJhIHVuIGRvY3VtZW50byBzb2Z0LWRlbGV0ZWQuXG4gICAqL1xuICBhc3luYyByZXN0b3JlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zb2Z0RGVsZXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvZnQgZGVsZXRlIG5vIGVzdMOhIGhhYmlsaXRhZG8gcGFyYSBlc3RhIGNvbGVjY2nDs24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLnVwZGF0ZURvYzxUPih0aGlzLmNvbGxlY3Rpb25QYXRoLCBpZCwge1xuICAgICAgZGVsZXRlZEF0OiBudWxsLFxuICAgIH0gYXMgdW5rbm93biBhcyBQYXJ0aWFsPFQ+KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTVUItQ09MRUNDSU9ORVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIE9idGllbmUgdW5hIHJlZmVyZW5jaWEgYSB1bmEgc3ViLWNvbGVjY2nDs24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRW4gVXNlcnNTZXJ2aWNlXG4gICAqIGdldFVzZXJEb2N1bWVudHModXNlcklkOiBzdHJpbmcpIHtcbiAgICogICByZXR1cm4gdGhpcy51c2Vycy5zdWJjb2xsZWN0aW9uPERvY3VtZW50Pih1c2VySWQsICdkb2N1bWVudHMnKTtcbiAgICogfVxuICAgKlxuICAgKiAvLyBVc29cbiAgICogY29uc3QgZG9jcyA9IGF3YWl0IHVzZXJzLmdldFVzZXJEb2N1bWVudHMoJ3VzZXIxMjMnKS5nZXRBbGwoKTtcbiAgICogYGBgXG4gICAqL1xuICBzdWJjb2xsZWN0aW9uPFMgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgcGFyZW50SWQ6IHN0cmluZyxcbiAgICBzdWJjb2xsZWN0aW9uTmFtZTogc3RyaW5nXG4gICk6IFN1YkNvbGxlY3Rpb25SZWY8Uz4ge1xuICAgIGNvbnN0IHN1YlBhdGggPSBgJHt0aGlzLmNvbGxlY3Rpb25QYXRofS8ke3BhcmVudElkfS8ke3N1YmNvbGxlY3Rpb25OYW1lfWA7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2V0QnlJZDogKGlkOiBzdHJpbmcpID0+IHRoaXMuZmlyZXN0b3JlLmdldERvYzxTPihzdWJQYXRoLCBpZCksXG4gICAgICBnZXRBbGw6IChvcHRpb25zPzogUXVlcnlPcHRpb25zKSA9PiB0aGlzLmZpcmVzdG9yZS5nZXREb2NzPFM+KHN1YlBhdGgsIG9wdGlvbnMpLFxuICAgICAgd2F0Y2g6IChpZDogc3RyaW5nKSA9PiB0aGlzLmZpcmVzdG9yZS5kb2NDaGFuZ2VzPFM+KHN1YlBhdGgsIGlkKSxcbiAgICAgIHdhdGNoQWxsOiAob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucykgPT4gdGhpcy5maXJlc3RvcmUuY29sbGVjdGlvbkNoYW5nZXM8Uz4oc3ViUGF0aCwgb3B0aW9ucyksXG4gICAgICBjcmVhdGU6IChkYXRhOiBPbWl0PFMsICdpZCcgfCAnY3JlYXRlZEF0JyB8ICd1cGRhdGVkQXQnPikgPT5cbiAgICAgICAgdGhpcy5maXJlc3RvcmUuYWRkRG9jPFM+KHN1YlBhdGgsIGRhdGEpLFxuICAgICAgdXBkYXRlOiAoaWQ6IHN0cmluZywgZGF0YTogUGFydGlhbDxTPikgPT4gdGhpcy5maXJlc3RvcmUudXBkYXRlRG9jPFM+KHN1YlBhdGgsIGlkLCBkYXRhKSxcbiAgICAgIGRlbGV0ZTogKGlkOiBzdHJpbmcpID0+IHRoaXMuZmlyZXN0b3JlLmRlbGV0ZURvYyhzdWJQYXRoLCBpZCksXG4gICAgfTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNw4lUT0RPUyBQUklWQURPU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBsaWNhIGZpbHRyb3MgcG9yIGRlZmVjdG8gYSBsYXMgcXVlcmllcy5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlEZWZhdWx0RmlsdGVycyhvcHRpb25zPzogUXVlcnlPcHRpb25zKTogUXVlcnlPcHRpb25zIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zb2Z0RGVsZXRlKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucyA/PyB7fTtcbiAgICB9XG5cbiAgICAvLyBFeGNsdWlyIGRvY3VtZW50b3Mgc29mdC1kZWxldGVkIHBvciBkZWZlY3RvXG4gICAgY29uc3Qgd2hlcmVDbGF1c2UgPSB7IGZpZWxkOiAnZGVsZXRlZEF0Jywgb3BlcmF0b3I6ICc9PScgYXMgY29uc3QsIHZhbHVlOiBudWxsIH07XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHdoZXJlOiBbLi4uKG9wdGlvbnM/LndoZXJlID8/IFtdKSwgd2hlcmVDbGF1c2VdLFxuICAgIH07XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVRJTElEQURFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogR2VuZXJhIHVuIG51ZXZvIElEIHNpbiBjcmVhciBlbCBkb2N1bWVudG8uXG4gICAqL1xuICBnZW5lcmF0ZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZXN0b3JlLmdlbmVyYXRlSWQodGhpcy5jb2xsZWN0aW9uUGF0aCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBsYSBydXRhIGRlIGxhIGNvbGVjY2nDs24uXG4gICAqL1xuICBnZXRQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvblBhdGg7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgRmlyZXN0b3JlQ29sbGVjdGlvbkZhY3RvcnkuY3JlYXRlKCkgaW5zdGVhZC5cbiAqIFR5cGUgYWxpYXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICovXG5leHBvcnQgdHlwZSBGaXJlc3RvcmVDb2xsZWN0aW9uPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4gPSBUeXBlZENvbGxlY3Rpb248VD47XG4iXX0=
|