@openziti/ziti-console-lib 0.3.0

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.
Files changed (705) hide show
  1. package/README.md +24 -0
  2. package/assets/animations/ConstructionZiggy.json +15233 -0
  3. package/assets/animations/HelloZiggy.json +10008 -0
  4. package/assets/animations/SmartZiggy.json +9488 -0
  5. package/assets/components/add.html +1 -0
  6. package/assets/components/api.html +12 -0
  7. package/assets/components/customtags.html +4 -0
  8. package/assets/components/line.html +1 -0
  9. package/assets/components/noitems.html +1 -0
  10. package/assets/components/save.html +4 -0
  11. package/assets/components/search.html +8 -0
  12. package/assets/components/tabIdentities.html +6 -0
  13. package/assets/components/tabPolicies.html +7 -0
  14. package/assets/components/tabRouters.html +5 -0
  15. package/assets/components/tabServers.html +4 -0
  16. package/assets/components/tabServices.html +5 -0
  17. package/assets/components/tabSessions.html +4 -0
  18. package/assets/data/mail.json +0 -0
  19. package/assets/data/services.json +6 -0
  20. package/assets/data/settings.json +25 -0
  21. package/assets/data/site.json +31 -0
  22. package/assets/data/tags.json +7 -0
  23. package/assets/data/templates.json +1 -0
  24. package/assets/fonts/OpenSans-Regular.ttf +0 -0
  25. package/assets/fonts/OpenSans-Regular.woff +0 -0
  26. package/assets/fonts/OpenSans-Regular.woff2 +0 -0
  27. package/assets/fonts/RussoOne-Regular.ttf +0 -0
  28. package/assets/fonts/RussoOne-Regular.woff +0 -0
  29. package/assets/fonts/RussoOne-Regular.woff2 +0 -0
  30. package/assets/fonts/zac.eot +0 -0
  31. package/assets/fonts/zac.svg +55 -0
  32. package/assets/fonts/zac.ttf +0 -0
  33. package/assets/fonts/zac.woff +0 -0
  34. package/assets/fonts/zac.woff2 +0 -0
  35. package/assets/html/api-sessions.htm +153 -0
  36. package/assets/html/attributes.htm +260 -0
  37. package/assets/html/auth-policies.htm +410 -0
  38. package/assets/html/cas.htm +445 -0
  39. package/assets/html/config-types.htm +168 -0
  40. package/assets/html/configs.htm +238 -0
  41. package/assets/html/deprecated/fabric-links.htm +336 -0
  42. package/assets/html/deprecated/fabric-routers.htm +72 -0
  43. package/assets/html/deprecated/fabric-services.htm +494 -0
  44. package/assets/html/identities.htm +934 -0
  45. package/assets/html/index.htm +161 -0
  46. package/assets/html/jwt-signers.htm +260 -0
  47. package/assets/html/known.htm +115 -0
  48. package/assets/html/login.htm +131 -0
  49. package/assets/html/organization.htm +223 -0
  50. package/assets/html/posture-checks.htm +393 -0
  51. package/assets/html/profile.htm +52 -0
  52. package/assets/html/recipes.htm +455 -0
  53. package/assets/html/router-policies.htm +168 -0
  54. package/assets/html/routers.htm +323 -0
  55. package/assets/html/servers.htm +236 -0
  56. package/assets/html/service-policies.htm +197 -0
  57. package/assets/html/service-router-policies.htm +170 -0
  58. package/assets/html/services.htm +634 -0
  59. package/assets/html/sessions.htm +157 -0
  60. package/assets/html/settings.htm +146 -0
  61. package/assets/html/terminators.htm +244 -0
  62. package/assets/html/transit-routers.htm +173 -0
  63. package/assets/icons/android-icon-192x192.png +0 -0
  64. package/assets/icons/apple-icon-114x114.png +0 -0
  65. package/assets/icons/apple-icon-120x120.png +0 -0
  66. package/assets/icons/apple-icon-144x144.png +0 -0
  67. package/assets/icons/apple-icon-152x152.png +0 -0
  68. package/assets/icons/apple-icon-180x180.png +0 -0
  69. package/assets/icons/apple-icon-57x57.png +0 -0
  70. package/assets/icons/apple-icon-60x60.png +0 -0
  71. package/assets/icons/apple-icon-72x72.png +0 -0
  72. package/assets/icons/apple-icon-76x76.png +0 -0
  73. package/assets/icons/apple-icon-precomposed.png +0 -0
  74. package/assets/icons/favicon-16x16.png +0 -0
  75. package/assets/icons/favicon-32x32.png +0 -0
  76. package/assets/icons/favicon-96x96.png +0 -0
  77. package/assets/icons/favicon.ico +0 -0
  78. package/assets/icons/ms-icon-144x144.png +0 -0
  79. package/assets/images/Filter.png +0 -0
  80. package/assets/images/Login.jpg +0 -0
  81. package/assets/images/SortDown.png +0 -0
  82. package/assets/images/SortUp.png +0 -0
  83. package/assets/images/android.png +0 -0
  84. package/assets/images/anywhere.png +0 -0
  85. package/assets/images/apple.png +0 -0
  86. package/assets/images/bug.png +0 -0
  87. package/assets/images/check.png +0 -0
  88. package/assets/images/error.png +0 -0
  89. package/assets/images/info.png +0 -0
  90. package/assets/images/linux.png +0 -0
  91. package/assets/images/other.png +0 -0
  92. package/assets/images/scrollbar.png +0 -0
  93. package/assets/images/select.png +0 -0
  94. package/assets/images/success.png +0 -0
  95. package/assets/images/visualizer/ER.png +0 -0
  96. package/assets/images/visualizer/Routers.png +0 -0
  97. package/assets/images/visualizer/er_error.png +0 -0
  98. package/assets/images/visualizer/error_er.png +0 -0
  99. package/assets/images/visualizer/host-error.png +0 -0
  100. package/assets/images/visualizer/host.png +0 -0
  101. package/assets/images/visualizer/host_unregistered.png +0 -0
  102. package/assets/images/visualizer/link-cut.png +0 -0
  103. package/assets/images/visualizer/service.png +0 -0
  104. package/assets/images/visualizer/unregistered.png +0 -0
  105. package/assets/images/warning.png +0 -0
  106. package/assets/images/windows.png +0 -0
  107. package/assets/languages/en-us.json +330 -0
  108. package/assets/resources/avatar/man.svg +78 -0
  109. package/assets/resources/avatar/woman.svg +96 -0
  110. package/assets/resources/icon/analysis.svg +104 -0
  111. package/assets/resources/icon/appwans.svg +20 -0
  112. package/assets/resources/icon/architecture.svg +1 -0
  113. package/assets/resources/icon/bike.svg +94 -0
  114. package/assets/resources/icon/bus.svg +64 -0
  115. package/assets/resources/icon/cas.svg +46 -0
  116. package/assets/resources/icon/clusters.svg +28 -0
  117. package/assets/resources/icon/computer.svg +1 -0
  118. package/assets/resources/icon/data.svg +1 -0
  119. package/assets/resources/icon/delivery-truck.svg +1 -0
  120. package/assets/resources/icon/explosion.svg +81 -0
  121. package/assets/resources/icon/fabricServices.svg +31 -0
  122. package/assets/resources/icon/fabrics.svg +136 -0
  123. package/assets/resources/icon/front.svg +83 -0
  124. package/assets/resources/icon/gateway.svg +49 -0
  125. package/assets/resources/icon/gear.svg +122 -0
  126. package/assets/resources/icon/house.svg +72 -0
  127. package/assets/resources/icon/language.svg +1 -0
  128. package/assets/resources/icon/objective.svg +55 -0
  129. package/assets/resources/icon/route.svg +97 -0
  130. package/assets/resources/icon/routers.svg +27 -0
  131. package/assets/resources/icon/startup.svg +112 -0
  132. package/assets/resources/icon/switch.svg +101 -0
  133. package/assets/scripts/chart.min.js +7 -0
  134. package/assets/scripts/commands.js +112 -0
  135. package/assets/scripts/components/codemirror/codemirror.css +356 -0
  136. package/assets/scripts/components/codemirror/codemirror.js +9741 -0
  137. package/assets/scripts/components/codemirror/modes/addons/closetags.js +200 -0
  138. package/assets/scripts/components/codemirror/modes/addons/colorize.js +40 -0
  139. package/assets/scripts/components/codemirror/modes/addons/css-hint.js +66 -0
  140. package/assets/scripts/components/codemirror/modes/addons/formatting.js +124 -0
  141. package/assets/scripts/components/codemirror/modes/addons/html-hint.js +366 -0
  142. package/assets/scripts/components/codemirror/modes/addons/javascript-hint.js +159 -0
  143. package/assets/scripts/components/codemirror/modes/addons/show-hint.css +36 -0
  144. package/assets/scripts/components/codemirror/modes/addons/show-hint.js +482 -0
  145. package/assets/scripts/components/codemirror/modes/css.js +831 -0
  146. package/assets/scripts/components/codemirror/modes/htmlmixed.js +152 -0
  147. package/assets/scripts/components/codemirror/modes/javascript.js +930 -0
  148. package/assets/scripts/components/codemirror/modes/xml.js +413 -0
  149. package/assets/scripts/components/column.css +184 -0
  150. package/assets/scripts/components/column.js +165 -0
  151. package/assets/scripts/components/flows.css +0 -0
  152. package/assets/scripts/components/flows.js +48 -0
  153. package/assets/scripts/components/leaflet/images/layers-2x.png +0 -0
  154. package/assets/scripts/components/leaflet/images/layers.png +0 -0
  155. package/assets/scripts/components/leaflet/images/marker-icon-2x.png +0 -0
  156. package/assets/scripts/components/leaflet/images/marker-icon.png +0 -0
  157. package/assets/scripts/components/leaflet/images/marker-shadow.png +0 -0
  158. package/assets/scripts/components/leaflet/leaflet-src.esm.js +13926 -0
  159. package/assets/scripts/components/leaflet/leaflet-src.esm.js.map +1 -0
  160. package/assets/scripts/components/leaflet/leaflet-src.js +14020 -0
  161. package/assets/scripts/components/leaflet/leaflet-src.js.map +1 -0
  162. package/assets/scripts/components/leaflet/leaflet.css +640 -0
  163. package/assets/scripts/components/leaflet/leaflet.js +5 -0
  164. package/assets/scripts/components/leaflet/leaflet.js.map +1 -0
  165. package/assets/scripts/components/moment.js +4602 -0
  166. package/assets/scripts/components/multiselect.js +333 -0
  167. package/assets/scripts/components/network/img/network/acceptDeleteIcon.png +0 -0
  168. package/assets/scripts/components/network/img/network/addNodeIcon.png +0 -0
  169. package/assets/scripts/components/network/img/network/backIcon.png +0 -0
  170. package/assets/scripts/components/network/img/network/connectIcon.png +0 -0
  171. package/assets/scripts/components/network/img/network/cross.png +0 -0
  172. package/assets/scripts/components/network/img/network/cross2.png +0 -0
  173. package/assets/scripts/components/network/img/network/deleteIcon.png +0 -0
  174. package/assets/scripts/components/network/img/network/downArrow.png +0 -0
  175. package/assets/scripts/components/network/img/network/editIcon.png +0 -0
  176. package/assets/scripts/components/network/img/network/leftArrow.png +0 -0
  177. package/assets/scripts/components/network/img/network/minus.png +0 -0
  178. package/assets/scripts/components/network/img/network/plus.png +0 -0
  179. package/assets/scripts/components/network/img/network/rightArrow.png +0 -0
  180. package/assets/scripts/components/network/img/network/upArrow.png +0 -0
  181. package/assets/scripts/components/network/img/network/zoomExtends.png +0 -0
  182. package/assets/scripts/components/network/types/DOMutil.d.ts +99 -0
  183. package/assets/scripts/components/network/types/index-legacy-bundle.d.ts +4 -0
  184. package/assets/scripts/components/network/types/index-legacy-bundle.d.ts.map +1 -0
  185. package/assets/scripts/components/network/types/index-legacy.d.ts +24 -0
  186. package/assets/scripts/components/network/types/index-legacy.d.ts.map +1 -0
  187. package/assets/scripts/components/network/types/index-peer.d.ts +11 -0
  188. package/assets/scripts/components/network/types/index-peer.d.ts.map +1 -0
  189. package/assets/scripts/components/network/types/index-standalone.d.ts +7 -0
  190. package/assets/scripts/components/network/types/index-standalone.d.ts.map +1 -0
  191. package/assets/scripts/components/network/types/module/hammer.d.ts +2 -0
  192. package/assets/scripts/components/network/types/module/moment.d.ts +2 -0
  193. package/assets/scripts/components/network/types/network/Images.d.ts +2 -0
  194. package/assets/scripts/components/network/types/network/Network.d.ts +1030 -0
  195. package/assets/scripts/components/network/types/network/dotparser.d.ts +2 -0
  196. package/assets/scripts/components/network/types/network/gephiParser.d.ts +80 -0
  197. package/assets/scripts/components/network/types/network/gephiParser.d.ts.map +1 -0
  198. package/assets/scripts/components/network/types/network/modules/components/edges/bezier-edge-dynamic.d.ts +55 -0
  199. package/assets/scripts/components/network/types/network/modules/components/edges/bezier-edge-dynamic.d.ts.map +1 -0
  200. package/assets/scripts/components/network/types/network/modules/components/edges/bezier-edge-static.d.ts +37 -0
  201. package/assets/scripts/components/network/types/network/modules/components/edges/bezier-edge-static.d.ts.map +1 -0
  202. package/assets/scripts/components/network/types/network/modules/components/edges/cubic-bezier-edge.d.ts +32 -0
  203. package/assets/scripts/components/network/types/network/modules/components/edges/cubic-bezier-edge.d.ts.map +1 -0
  204. package/assets/scripts/components/network/types/network/modules/components/edges/index.d.ts +10 -0
  205. package/assets/scripts/components/network/types/network/modules/components/edges/index.d.ts.map +1 -0
  206. package/assets/scripts/components/network/types/network/modules/components/edges/straight-edge.d.ts +26 -0
  207. package/assets/scripts/components/network/types/network/modules/components/edges/straight-edge.d.ts.map +1 -0
  208. package/assets/scripts/components/network/types/network/modules/components/edges/util/bezier-edge-base.d.ts +68 -0
  209. package/assets/scripts/components/network/types/network/modules/components/edges/util/bezier-edge-base.d.ts.map +1 -0
  210. package/assets/scripts/components/network/types/network/modules/components/edges/util/cubic-bezier-edge-base.d.ts +38 -0
  211. package/assets/scripts/components/network/types/network/modules/components/edges/util/cubic-bezier-edge-base.d.ts.map +1 -0
  212. package/assets/scripts/components/network/types/network/modules/components/edges/util/edge-base.d.ts +248 -0
  213. package/assets/scripts/components/network/types/network/modules/components/edges/util/edge-base.d.ts.map +1 -0
  214. package/assets/scripts/components/network/types/network/modules/components/edges/util/end-points.d.ts +58 -0
  215. package/assets/scripts/components/network/types/network/modules/components/edges/util/end-points.d.ts.map +1 -0
  216. package/assets/scripts/components/network/types/network/modules/components/edges/util/types.d.ts +196 -0
  217. package/assets/scripts/components/network/types/network/modules/components/edges/util/types.d.ts.map +1 -0
  218. package/assets/scripts/components/network/types/network/modules/layout-engine/index.d.ts +32 -0
  219. package/assets/scripts/components/network/types/network/modules/layout-engine/index.d.ts.map +1 -0
  220. package/assets/scripts/components/network/types/network/options.d.ts +2 -0
  221. package/assets/scripts/components/network/types/network/shapes.d.ts +122 -0
  222. package/assets/scripts/components/network/types/network/shapes.d.ts.map +1 -0
  223. package/assets/scripts/components/network/vis-network.css +716 -0
  224. package/assets/scripts/components/network/vis-network.esm.js +58974 -0
  225. package/assets/scripts/components/network/vis-network.esm.js.map +1 -0
  226. package/assets/scripts/components/network/vis-network.esm.min.js +53 -0
  227. package/assets/scripts/components/network/vis-network.esm.min.js.map +1 -0
  228. package/assets/scripts/components/network/vis-network.js +58994 -0
  229. package/assets/scripts/components/network/vis-network.js.map +1 -0
  230. package/assets/scripts/components/network/vis-network.min.css +1 -0
  231. package/assets/scripts/components/network/vis-network.min.js +53 -0
  232. package/assets/scripts/components/network/vis-network.min.js.map +1 -0
  233. package/assets/scripts/components/qrcode.min.js +1 -0
  234. package/assets/scripts/components/resources.js +26 -0
  235. package/assets/scripts/components/selector-new.js +300 -0
  236. package/assets/scripts/components/selector.js +300 -0
  237. package/assets/scripts/components/spectrum.js +2323 -0
  238. package/assets/scripts/components/timezone.js +1545 -0
  239. package/assets/scripts/components/uploader.js +74 -0
  240. package/assets/scripts/context.js +177 -0
  241. package/assets/scripts/dragging.js +58 -0
  242. package/assets/scripts/forms/forms.js +74 -0
  243. package/assets/scripts/forms/host.v1.htm +43 -0
  244. package/assets/scripts/forms/intercept.v1.htm +0 -0
  245. package/assets/scripts/forms/schema.js +693 -0
  246. package/assets/scripts/growler.js +133 -0
  247. package/assets/scripts/header.js +163 -0
  248. package/assets/scripts/jquery-3.6.3.min.js +2 -0
  249. package/assets/scripts/jquery.datetimepicker.js +2930 -0
  250. package/assets/scripts/locale.js +47 -0
  251. package/assets/scripts/modal.js +65 -0
  252. package/assets/scripts/model/data.js +558 -0
  253. package/assets/scripts/model/fabric.js +55 -0
  254. package/assets/scripts/model/fabricServices.js +45 -0
  255. package/assets/scripts/model/known.js +43 -0
  256. package/assets/scripts/model/links.js +44 -0
  257. package/assets/scripts/model/routers.js +51 -0
  258. package/assets/scripts/model/series.js +70 -0
  259. package/assets/scripts/model/sessions.js +61 -0
  260. package/assets/scripts/model/settings.js +60 -0
  261. package/assets/scripts/model/summary.js +49 -0
  262. package/assets/scripts/model/tags.js +330 -0
  263. package/assets/scripts/model/templates.js +42 -0
  264. package/assets/scripts/model/user.js +40 -0
  265. package/assets/scripts/restrictions.js +34 -0
  266. package/assets/scripts/service.js +76 -0
  267. package/assets/scripts/validation-tools.js +5119 -0
  268. package/assets/scripts/ziti.js +372 -0
  269. package/assets/styles/chart.min.css +1 -0
  270. package/assets/styles/dark.css +52 -0
  271. package/assets/styles/datetimepicker.css +1 -0
  272. package/assets/styles/forms.css +521 -0
  273. package/assets/styles/global.scss +890 -0
  274. package/assets/styles/growler.css +190 -0
  275. package/assets/styles/header.css +232 -0
  276. package/assets/styles/icons.css +160 -0
  277. package/assets/styles/navigation.css +183 -0
  278. package/assets/styles/select2.css +481 -0
  279. package/assets/styles/spectrum.css +507 -0
  280. package/assets/styles/tables.css +424 -0
  281. package/assets/styles/tooltip.css +134 -0
  282. package/assets/styles/ziti.css +3216 -0
  283. package/assets/svgs/Advanced.svg +89 -0
  284. package/assets/svgs/ArrowDown.svg +15 -0
  285. package/assets/svgs/ArrowDownDark.svg +15 -0
  286. package/assets/svgs/Confirm_Trash.svg +42 -0
  287. package/assets/svgs/DownloadKey.svg +50 -0
  288. package/assets/svgs/Filter.svg +13 -0
  289. package/assets/svgs/Growl_Bug.svg +47 -0
  290. package/assets/svgs/Growl_Error.svg +41 -0
  291. package/assets/svgs/Growl_Info.svg +45 -0
  292. package/assets/svgs/Growl_Success.svg +34 -0
  293. package/assets/svgs/Growl_Warning.svg +44 -0
  294. package/assets/svgs/MainMenuBlankUser.svg +14 -0
  295. package/assets/svgs/MainMenuNetworks.svg +37 -0
  296. package/assets/svgs/MainMenuNotifications.svg +32 -0
  297. package/assets/svgs/MainMenuOrg.svg +68 -0
  298. package/assets/svgs/MainMenuPlus.svg +13 -0
  299. package/assets/svgs/MainMenuSearch.svg +22 -0
  300. package/assets/svgs/MainMenuSupport.svg +417 -0
  301. package/assets/svgs/No_Clients.svg +94 -0
  302. package/assets/svgs/No_Plus.svg +30 -0
  303. package/assets/svgs/No_Routers.svg +56 -0
  304. package/assets/svgs/Resize.svg +33 -0
  305. package/assets/svgs/Simple.svg +62 -0
  306. package/assets/svgs/appwans.svg +20 -0
  307. package/assets/svgs/cas.svg +46 -0
  308. package/assets/svgs/cert.svg +69 -0
  309. package/assets/svgs/clear.svg +13 -0
  310. package/assets/svgs/close.svg +14 -0
  311. package/assets/svgs/clusters.svg +28 -0
  312. package/assets/svgs/copy.svg +64 -0
  313. package/assets/svgs/dashboard.svg +32 -0
  314. package/assets/svgs/dial.svg +83 -0
  315. package/assets/svgs/docs.svg +95 -0
  316. package/assets/svgs/downloads.svg +74 -0
  317. package/assets/svgs/fabricServices.svg +31 -0
  318. package/assets/svgs/fabrics.svg +134 -0
  319. package/assets/svgs/gateways.svg +49 -0
  320. package/assets/svgs/heart.svg +1 -0
  321. package/assets/svgs/ids.svg +20 -0
  322. package/assets/svgs/infoicon.svg +14 -0
  323. package/assets/svgs/lock.svg +12 -0
  324. package/assets/svgs/minus.svg +11 -0
  325. package/assets/svgs/nodata.svg +27 -0
  326. package/assets/svgs/qr.svg +56 -0
  327. package/assets/svgs/refresh.svg +24 -0
  328. package/assets/svgs/routers.svg +31 -0
  329. package/assets/svgs/select.svg +18 -0
  330. package/assets/svgs/services.svg +19 -0
  331. package/assets/svgs/settings.svg +1 -0
  332. package/assets/svgs/upload.svg +55 -0
  333. package/assets/templates/footer.htm +183 -0
  334. package/assets/templates/header.htm +298 -0
  335. package/assets/vectors/certificates.svg +1 -0
  336. package/assets/vectors/change.svg +1 -0
  337. package/assets/vectors/configuration.svg +2 -0
  338. package/assets/vectors/customize.svg +1 -0
  339. package/assets/vectors/dashboard.svg +1 -0
  340. package/assets/vectors/edgepolicies.svg +2 -0
  341. package/assets/vectors/globe.svg +63 -0
  342. package/assets/vectors/help.svg +48 -0
  343. package/assets/vectors/identity.svg +1 -0
  344. package/assets/vectors/notify.svg +1 -0
  345. package/assets/vectors/plus.svg +1 -0
  346. package/assets/vectors/posture.svg +1 -0
  347. package/assets/vectors/profile.svg +1 -0
  348. package/assets/vectors/router.svg +1 -0
  349. package/assets/vectors/routerpolicies.svg +1 -0
  350. package/assets/vectors/schema.svg +1 -0
  351. package/assets/vectors/server (1).svg +293 -0
  352. package/assets/vectors/servers.svg +103 -0
  353. package/assets/vectors/servicepolicy.svg +1 -0
  354. package/assets/vectors/services.svg +126 -0
  355. package/assets/vectors/settings.svg +130 -0
  356. package/assets/vectors/terminators.svg +1 -0
  357. package/assets/vectors/transitrouter.svg +1 -0
  358. package/esm2022/lib/app.initializer.mjs +24 -0
  359. package/esm2022/lib/features/card/card.component.mjs +29 -0
  360. package/esm2022/lib/features/card-list/card-list.component.mjs +50 -0
  361. package/esm2022/lib/features/config-editor/config-editor.component.mjs +239 -0
  362. package/esm2022/lib/features/confirm/confirm.component.mjs +59 -0
  363. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +92 -0
  364. package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +77 -0
  365. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +47 -0
  366. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +46 -0
  367. package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +124 -0
  368. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +269 -0
  369. package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +94 -0
  370. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +38 -0
  371. package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +34 -0
  372. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +66 -0
  373. package/esm2022/lib/features/data-table/data-table.component.mjs +848 -0
  374. package/esm2022/lib/features/data-table/data-table.service.mjs +99 -0
  375. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +95 -0
  376. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +27 -0
  377. package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +30 -0
  378. package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +35 -0
  379. package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +73 -0
  380. package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +131 -0
  381. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +169 -0
  382. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +51 -0
  383. package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +74 -0
  384. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +122 -0
  385. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +72 -0
  386. package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +98 -0
  387. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +180 -0
  388. package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +104 -0
  389. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +72 -0
  390. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +119 -0
  391. package/esm2022/lib/features/extendable/extendable.component.mjs +56 -0
  392. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +50 -0
  393. package/esm2022/lib/features/json-view/json-view.component.mjs +197 -0
  394. package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +139 -0
  395. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +48 -0
  396. package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +21 -0
  397. package/esm2022/lib/features/messaging/growler.component.mjs +63 -0
  398. package/esm2022/lib/features/messaging/growler.model.mjs +24 -0
  399. package/esm2022/lib/features/messaging/growler.module.mjs +35 -0
  400. package/esm2022/lib/features/messaging/growler.service.mjs +72 -0
  401. package/esm2022/lib/features/messaging/logger.service.mjs +175 -0
  402. package/esm2022/lib/features/no-items/no-items.component.mjs +47 -0
  403. package/esm2022/lib/features/overrides/overrides.component.mjs +119 -0
  404. package/esm2022/lib/features/overrides/overrides.service.mjs +115 -0
  405. package/esm2022/lib/features/preview-list/preview-list.component.mjs +91 -0
  406. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +223 -0
  407. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +150 -0
  408. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +188 -0
  409. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +131 -0
  410. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +72 -0
  411. package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +55 -0
  412. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +96 -0
  413. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +322 -0
  414. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +144 -0
  415. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +172 -0
  416. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +240 -0
  417. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +453 -0
  418. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +680 -0
  419. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +252 -0
  420. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +214 -0
  421. package/esm2022/lib/features/qr-code/qr-code.component.mjs +143 -0
  422. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +87 -0
  423. package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +62 -0
  424. package/esm2022/lib/features/side-modal/side-modal.component.mjs +46 -0
  425. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +17 -0
  426. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +55 -0
  427. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +128 -0
  428. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +292 -0
  429. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +588 -0
  430. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +370 -0
  431. package/esm2022/lib/features/wrappers/node-wrapper.service.mjs +51 -0
  432. package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +92 -0
  433. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +147 -0
  434. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +937 -0
  435. package/esm2022/lib/models/config.mjs +9 -0
  436. package/esm2022/lib/models/edge-router.mjs +13 -0
  437. package/esm2022/lib/models/identity.mjs +34 -0
  438. package/esm2022/lib/models/service-policy.mjs +12 -0
  439. package/esm2022/lib/models/service.mjs +12 -0
  440. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +102 -0
  441. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +246 -0
  442. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +149 -0
  443. package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +361 -0
  444. package/esm2022/lib/pages/identities/identities-page.component.mjs +233 -0
  445. package/esm2022/lib/pages/identities/identities-page.service.mjs +498 -0
  446. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +132 -0
  447. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +457 -0
  448. package/esm2022/lib/pages/services/services-page.component.mjs +141 -0
  449. package/esm2022/lib/pages/services/services-page.service.mjs +215 -0
  450. package/esm2022/lib/safe.pipe.mjs +19 -0
  451. package/esm2022/lib/services/console-events.service.mjs +32 -0
  452. package/esm2022/lib/services/csv-download.service.mjs +92 -0
  453. package/esm2022/lib/services/deactivate-guard.service.mjs +18 -0
  454. package/esm2022/lib/services/login-service.class.mjs +28 -0
  455. package/esm2022/lib/services/node-data.service.mjs +292 -0
  456. package/esm2022/lib/services/noop-login.service.mjs +45 -0
  457. package/esm2022/lib/services/schema.service.mjs +808 -0
  458. package/esm2022/lib/services/settings-service.class.mjs +131 -0
  459. package/esm2022/lib/services/settings.service.mjs +193 -0
  460. package/esm2022/lib/services/tab-name.service.mjs +65 -0
  461. package/esm2022/lib/services/validation.service.mjs +124 -0
  462. package/esm2022/lib/services/ziti-controller-data.service.mjs +260 -0
  463. package/esm2022/lib/services/ziti-data.service.mjs +54 -0
  464. package/esm2022/lib/services/ziti-domain-controller.service.mjs +3 -0
  465. package/esm2022/lib/shared/list-page-component.class.mjs +145 -0
  466. package/esm2022/lib/shared/list-page-service.class.mjs +151 -0
  467. package/esm2022/lib/version.mjs +4 -0
  468. package/esm2022/lib/zac-routing.module.mjs +41 -0
  469. package/esm2022/lib/ziti-console-lib.module.mjs +364 -0
  470. package/esm2022/lib/ziti-console.constants.mjs +19 -0
  471. package/esm2022/openziti-ziti-console-lib.mjs +5 -0
  472. package/esm2022/public-api.mjs +71 -0
  473. package/fesm2022/openziti-ziti-console-lib.mjs +15813 -0
  474. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -0
  475. package/index.d.ts +6 -0
  476. package/lib/app.initializer.d.ts +3 -0
  477. package/lib/app.initializer.d.ts.map +1 -0
  478. package/lib/features/card/card.component.d.ts +11 -0
  479. package/lib/features/card/card.component.d.ts.map +1 -0
  480. package/lib/features/card-list/card-list.component.d.ts +23 -0
  481. package/lib/features/card-list/card-list.component.d.ts.map +1 -0
  482. package/lib/features/config-editor/config-editor.component.d.ts +39 -0
  483. package/lib/features/config-editor/config-editor.component.d.ts.map +1 -0
  484. package/lib/features/confirm/confirm.component.d.ts +23 -0
  485. package/lib/features/confirm/confirm.component.d.ts.map +1 -0
  486. package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts +31 -0
  487. package/lib/features/creation-summary-dialog/creation-summary-dialog.component.d.ts.map +1 -0
  488. package/lib/features/custom-tags/custom-tags.component.d.ts +20 -0
  489. package/lib/features/custom-tags/custom-tags.component.d.ts.map +1 -0
  490. package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts +16 -0
  491. package/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.d.ts.map +1 -0
  492. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts +19 -0
  493. package/lib/features/data-table/cells/table-cell-select/table-cell-select.component.d.ts.map +1 -0
  494. package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts +22 -0
  495. package/lib/features/data-table/cells/table-cell-token/table-cell-token.component.d.ts.map +1 -0
  496. package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts +52 -0
  497. package/lib/features/data-table/column-headers/table-column-default/table-column-default.component.d.ts.map +1 -0
  498. package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts +27 -0
  499. package/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.d.ts.map +1 -0
  500. package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts +19 -0
  501. package/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.d.ts.map +1 -0
  502. package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts +15 -0
  503. package/lib/features/data-table/column-headers/table-column-select/table-column-select.component.d.ts.map +1 -0
  504. package/lib/features/data-table/data-table-filter.service.d.ts +24 -0
  505. package/lib/features/data-table/data-table-filter.service.d.ts.map +1 -0
  506. package/lib/features/data-table/data-table.component.d.ts +154 -0
  507. package/lib/features/data-table/data-table.component.d.ts.map +1 -0
  508. package/lib/features/data-table/data-table.service.d.ts +20 -0
  509. package/lib/features/data-table/data-table.service.d.ts.map +1 -0
  510. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts +22 -0
  511. package/lib/features/data-table/table-filter-bar/filter-bar.component.d.ts.map +1 -0
  512. package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts +10 -0
  513. package/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.d.ts.map +1 -0
  514. package/lib/features/data-table/tooltips/os-tooltip.component.d.ts +15 -0
  515. package/lib/features/data-table/tooltips/os-tooltip.component.d.ts.map +1 -0
  516. package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts +15 -0
  517. package/lib/features/data-table/tooltips/sdk-tooltip.component.d.ts.map +1 -0
  518. package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts +19 -0
  519. package/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.d.ts.map +1 -0
  520. package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts +26 -0
  521. package/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.d.ts.map +1 -0
  522. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts +45 -0
  523. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.d.ts.map +1 -0
  524. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts +14 -0
  525. package/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.d.ts.map +1 -0
  526. package/lib/features/dynamic-widgets/number/number-input.component.d.ts +20 -0
  527. package/lib/features/dynamic-widgets/number/number-input.component.d.ts.map +1 -0
  528. package/lib/features/dynamic-widgets/object/object.component.d.ts +26 -0
  529. package/lib/features/dynamic-widgets/object/object.component.d.ts.map +1 -0
  530. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +20 -0
  531. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -0
  532. package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts +21 -0
  533. package/lib/features/dynamic-widgets/port-ranges/port-ranges.component.d.ts.map +1 -0
  534. package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts +58 -0
  535. package/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.d.ts.map +1 -0
  536. package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts +23 -0
  537. package/lib/features/dynamic-widgets/selector/selector-input.component.d.ts.map +1 -0
  538. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +20 -0
  539. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -0
  540. package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts +23 -0
  541. package/lib/features/dynamic-widgets/text-list/text-list-input.component.d.ts.map +1 -0
  542. package/lib/features/extendable/extendable.component.d.ts +15 -0
  543. package/lib/features/extendable/extendable.component.d.ts.map +1 -0
  544. package/lib/features/extendable/extensions-noop.service.d.ts +31 -0
  545. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -0
  546. package/lib/features/json-view/json-view.component.d.ts +37 -0
  547. package/lib/features/json-view/json-view.component.d.ts.map +1 -0
  548. package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts +35 -0
  549. package/lib/features/list-page-features/list-page-form/list-page-form.component.d.ts.map +1 -0
  550. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts +13 -0
  551. package/lib/features/list-page-features/list-page-header/list-page-header.component.d.ts.map +1 -0
  552. package/lib/features/loading-indicator/loading-indicator.component.d.ts +9 -0
  553. package/lib/features/loading-indicator/loading-indicator.component.d.ts.map +1 -0
  554. package/lib/features/messaging/growler.component.d.ts +19 -0
  555. package/lib/features/messaging/growler.component.d.ts.map +1 -0
  556. package/lib/features/messaging/growler.model.d.ts +8 -0
  557. package/lib/features/messaging/growler.model.d.ts.map +1 -0
  558. package/lib/features/messaging/growler.module.d.ts +10 -0
  559. package/lib/features/messaging/growler.module.d.ts.map +1 -0
  560. package/lib/features/messaging/growler.service.d.ts +18 -0
  561. package/lib/features/messaging/growler.service.d.ts.map +1 -0
  562. package/lib/features/messaging/logger.service.d.ts +27 -0
  563. package/lib/features/messaging/logger.service.d.ts.map +1 -0
  564. package/lib/features/no-items/no-items.component.d.ts +19 -0
  565. package/lib/features/no-items/no-items.component.d.ts.map +1 -0
  566. package/lib/features/overrides/overrides.component.d.ts +33 -0
  567. package/lib/features/overrides/overrides.component.d.ts.map +1 -0
  568. package/lib/features/overrides/overrides.service.d.ts +18 -0
  569. package/lib/features/overrides/overrides.service.d.ts.map +1 -0
  570. package/lib/features/preview-list/preview-list.component.d.ts +24 -0
  571. package/lib/features/preview-list/preview-list.component.d.ts.map +1 -0
  572. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +52 -0
  573. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -0
  574. package/lib/features/projectable-forms/configuration/configuration.service.d.ts +33 -0
  575. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -0
  576. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +45 -0
  577. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -0
  578. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts +29 -0
  579. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -0
  580. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +22 -0
  581. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -0
  582. package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts +15 -0
  583. package/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.d.ts.map +1 -0
  584. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +23 -0
  585. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -0
  586. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +70 -0
  587. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -0
  588. package/lib/features/projectable-forms/identity/identity-form.service.d.ts +20 -0
  589. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -0
  590. package/lib/features/projectable-forms/projectable-form.class.d.ts +39 -0
  591. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -0
  592. package/lib/features/projectable-forms/service/service-form.component.d.ts +62 -0
  593. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -0
  594. package/lib/features/projectable-forms/service/service-form.service.d.ts +96 -0
  595. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -0
  596. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +140 -0
  597. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -0
  598. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +58 -0
  599. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -0
  600. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts +37 -0
  601. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -0
  602. package/lib/features/qr-code/qr-code.component.d.ts +40 -0
  603. package/lib/features/qr-code/qr-code.component.d.ts.map +1 -0
  604. package/lib/features/reset-enrollment/reset-enrollment.component.d.ts +27 -0
  605. package/lib/features/reset-enrollment/reset-enrollment.component.d.ts.map +1 -0
  606. package/lib/features/reset-enrollment/reset-enrollment.service.d.ts +13 -0
  607. package/lib/features/reset-enrollment/reset-enrollment.service.d.ts.map +1 -0
  608. package/lib/features/side-modal/side-modal.component.d.ts +15 -0
  609. package/lib/features/side-modal/side-modal.component.d.ts.map +1 -0
  610. package/lib/features/sidebars/side-banner/side-banner.component.d.ts +7 -0
  611. package/lib/features/sidebars/side-banner/side-banner.component.d.ts.map +1 -0
  612. package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts +16 -0
  613. package/lib/features/sidebars/side-navbar/side-navbar.component.d.ts.map +1 -0
  614. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts +34 -0
  615. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts.map +1 -0
  616. package/lib/features/tag-selector/tag-selector.component.d.ts +59 -0
  617. package/lib/features/tag-selector/tag-selector.component.d.ts.map +1 -0
  618. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts +53 -0
  619. package/lib/features/visualizer/identity-service-path/identity-service-path.component.d.ts.map +1 -0
  620. package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts +21 -0
  621. package/lib/features/visualizer/identity-service-path/identity-service-path.helper.d.ts.map +1 -0
  622. package/lib/features/wrappers/node-wrapper.service.d.ts +24 -0
  623. package/lib/features/wrappers/node-wrapper.service.d.ts.map +1 -0
  624. package/lib/features/wrappers/zac-wrapper-service.class.d.ts +38 -0
  625. package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +1 -0
  626. package/lib/features/wrappers/zac-wrapper.component.d.ts +31 -0
  627. package/lib/features/wrappers/zac-wrapper.component.d.ts.map +1 -0
  628. package/lib/features/wrappers/zac-wrapper.service.d.ts +56 -0
  629. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -0
  630. package/lib/models/config.d.ts +6 -0
  631. package/lib/models/config.d.ts.map +1 -0
  632. package/lib/models/edge-router.d.ts +10 -0
  633. package/lib/models/edge-router.d.ts.map +1 -0
  634. package/lib/models/identity.d.ts +16 -0
  635. package/lib/models/identity.d.ts.map +1 -0
  636. package/lib/models/service-policy.d.ts +9 -0
  637. package/lib/models/service-policy.d.ts.map +1 -0
  638. package/lib/models/service.d.ts +9 -0
  639. package/lib/models/service.d.ts.map +1 -0
  640. package/lib/pages/configurations/configurations-page.component.d.ts +29 -0
  641. package/lib/pages/configurations/configurations-page.component.d.ts.map +1 -0
  642. package/lib/pages/configurations/configurations-page.service.d.ts +78 -0
  643. package/lib/pages/configurations/configurations-page.service.d.ts.map +1 -0
  644. package/lib/pages/edge-routers/edge-routers-page.component.d.ts +38 -0
  645. package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +1 -0
  646. package/lib/pages/edge-routers/edge-routers-page.service.d.ts +47 -0
  647. package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -0
  648. package/lib/pages/identities/identities-page.component.d.ts +44 -0
  649. package/lib/pages/identities/identities-page.component.d.ts.map +1 -0
  650. package/lib/pages/identities/identities-page.service.d.ts +54 -0
  651. package/lib/pages/identities/identities-page.service.d.ts.map +1 -0
  652. package/lib/pages/service-policies/service-policies-page.component.d.ts +36 -0
  653. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -0
  654. package/lib/pages/service-policies/service-policies-page.service.d.ts +63 -0
  655. package/lib/pages/service-policies/service-policies-page.service.d.ts.map +1 -0
  656. package/lib/pages/services/services-page.component.d.ts +37 -0
  657. package/lib/pages/services/services-page.component.d.ts.map +1 -0
  658. package/lib/pages/services/services-page.service.d.ts +46 -0
  659. package/lib/pages/services/services-page.service.d.ts.map +1 -0
  660. package/lib/safe.pipe.d.ts +11 -0
  661. package/lib/safe.pipe.d.ts.map +1 -0
  662. package/lib/services/console-events.service.d.ts +12 -0
  663. package/lib/services/console-events.service.d.ts.map +1 -0
  664. package/lib/services/csv-download.service.d.ts +11 -0
  665. package/lib/services/csv-download.service.d.ts.map +1 -0
  666. package/lib/services/deactivate-guard.service.d.ts +14 -0
  667. package/lib/services/deactivate-guard.service.d.ts.map +1 -0
  668. package/lib/services/login-service.class.d.ts +22 -0
  669. package/lib/services/login-service.class.d.ts.map +1 -0
  670. package/lib/services/node-data.service.d.ts +32 -0
  671. package/lib/services/node-data.service.d.ts.map +1 -0
  672. package/lib/services/noop-login.service.d.ts +23 -0
  673. package/lib/services/noop-login.service.d.ts.map +1 -0
  674. package/lib/services/schema.service.d.ts +63 -0
  675. package/lib/services/schema.service.d.ts.map +1 -0
  676. package/lib/services/settings-service.class.d.ts +35 -0
  677. package/lib/services/settings-service.class.d.ts.map +1 -0
  678. package/lib/services/settings.service.d.ts +18 -0
  679. package/lib/services/settings.service.d.ts.map +1 -0
  680. package/lib/services/tab-name.service.d.ts +20 -0
  681. package/lib/services/tab-name.service.d.ts.map +1 -0
  682. package/lib/services/validation.service.d.ts +13 -0
  683. package/lib/services/validation.service.d.ts.map +1 -0
  684. package/lib/services/ziti-controller-data.service.d.ts +32 -0
  685. package/lib/services/ziti-controller-data.service.d.ts.map +1 -0
  686. package/lib/services/ziti-data.service.d.ts +40 -0
  687. package/lib/services/ziti-data.service.d.ts.map +1 -0
  688. package/lib/services/ziti-domain-controller.service.d.ts +13 -0
  689. package/lib/services/ziti-domain-controller.service.d.ts.map +1 -0
  690. package/lib/shared/list-page-component.class.d.ts +52 -0
  691. package/lib/shared/list-page-component.class.d.ts.map +1 -0
  692. package/lib/shared/list-page-service.class.d.ts +47 -0
  693. package/lib/shared/list-page-service.class.d.ts.map +1 -0
  694. package/lib/version.d.ts +4 -0
  695. package/lib/version.d.ts.map +1 -0
  696. package/lib/zac-routing.module.d.ts +8 -0
  697. package/lib/zac-routing.module.d.ts.map +1 -0
  698. package/lib/ziti-console-lib.module.d.ts +85 -0
  699. package/lib/ziti-console-lib.module.d.ts.map +1 -0
  700. package/lib/ziti-console.constants.d.ts +4 -0
  701. package/lib/ziti-console.constants.d.ts.map +1 -0
  702. package/openziti-ziti-console-lib.d.ts.map +1 -0
  703. package/package.json +48 -0
  704. package/public-api.d.ts +68 -0
  705. package/public-api.d.ts.map +1 -0
@@ -0,0 +1,361 @@
1
+ import { Injectable, Inject } from "@angular/core";
2
+ import { cloneDeep, isEmpty } from 'lodash';
3
+ import moment from 'moment';
4
+ import { ListPageServiceClass } from "../../shared/list-page-service.class";
5
+ import { TableColumnDefaultComponent } from "../../features/data-table/column-headers/table-column-default/table-column-default.component";
6
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
7
+ import { ZITI_DATA_SERVICE } from "../../services/ziti-data.service";
8
+ import { EdgeRouter } from "../../models/edge-router";
9
+ import { unset, forEach } from "lodash";
10
+ import { OSTooltipComponent } from "../../features/data-table/tooltips/os-tooltip.component";
11
+ import { GrowlerModel } from "../../features/messaging/growler.model";
12
+ import { EDGE_ROUTER_EXTENSION_SERVICE } from "../../features/projectable-forms/edge-router/edge-router-form.service";
13
+ import { ConfirmComponent } from "../../features/confirm/confirm.component";
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "../../features/data-table/data-table-filter.service";
16
+ import * as i2 from "../../services/csv-download.service";
17
+ import * as i3 from "../../features/messaging/growler.service";
18
+ import * as i4 from "@angular/material/dialog";
19
+ import * as i5 from "../../services/settings-service.class";
20
+ import * as i6 from "../../services/ziti-data.service";
21
+ const CSV_COLUMNS = [
22
+ { label: 'Name', path: 'name' },
23
+ { label: 'Attributes', path: 'roleAttributes' },
24
+ { label: 'Verified', path: 'isVerified' },
25
+ { label: 'Online', path: 'isOnline' },
26
+ { label: 'Created', path: 'createdAt' },
27
+ { label: 'Token', path: 'enrollmentToken' },
28
+ { label: 'No Traversal', path: 'noTraversal' },
29
+ { label: 'Host Name', path: 'hostname' },
30
+ { label: 'Disabled', path: 'disabled' },
31
+ { label: 'Tunneler Enabled', path: 'isTunnelerEnabled' },
32
+ { label: 'OS', path: 'versionInfo.os' },
33
+ { label: 'Architecture', path: 'versionInfo.arch' },
34
+ { label: 'Version', path: 'versionInfo.version' },
35
+ { label: 'Revision', path: 'versionInfo.revision' },
36
+ { label: 'Fingerprint', path: 'fingerprint' },
37
+ { label: 'ID', path: 'id' },
38
+ ];
39
+ class EdgeRoutersPageService extends ListPageServiceClass {
40
+ constructor(settings, filterService, zitiService, csvDownloadService, growlerService, dialogForm, extService) {
41
+ super(settings, filterService, csvDownloadService, extService);
42
+ this.zitiService = zitiService;
43
+ this.csvDownloadService = csvDownloadService;
44
+ this.growlerService = growlerService;
45
+ this.dialogForm = dialogForm;
46
+ this.extService = extService;
47
+ this.paging = this.DEFAULT_PAGING;
48
+ this.modalType = 'edge-router';
49
+ this.selectedEdgeRouter = new EdgeRouter();
50
+ this.columnFilters = {
51
+ name: '',
52
+ os: '',
53
+ createdAt: '',
54
+ };
55
+ this.menuItems = [
56
+ { name: 'Edit', action: 'update' },
57
+ { name: 'Download JWT', action: 'download-enrollment' },
58
+ { name: 'Reset Enrollment', action: 'reset-enrollment' },
59
+ { name: 'Re-Enroll', action: 're-enroll' },
60
+ { name: 'Delete', action: 'delete' },
61
+ ];
62
+ this.tableHeaderActions = [
63
+ { name: 'Download All', action: 'download-all' },
64
+ { name: 'Download Selected', action: 'download-selected' },
65
+ ];
66
+ this.resourceType = 'edge-routers';
67
+ this.validate = (formData) => {
68
+ return Promise.resolve({ passed: true });
69
+ };
70
+ }
71
+ initTableColumns() {
72
+ this.initMenuActions();
73
+ const nameRenderer = (row) => {
74
+ return `<div class="col cell-name-renderer" data-id="${row?.data?.id}">
75
+ <span class="circle ${row?.data?.isVerified}" title="Verified Status"></span>
76
+ <span class="circle ${row?.data?.isOnline}" title="Online Status"></span>
77
+ <strong>${row?.data?.name}</strong>
78
+ </div>`;
79
+ };
80
+ const rolesRenderer = (row) => {
81
+ let roles = '';
82
+ row?.data?.roleAttributes?.forEach((attr) => {
83
+ roles += '<div class="hashtag">' + attr + '</div>';
84
+ });
85
+ return roles;
86
+ };
87
+ const osRenderer = (row) => {
88
+ const osMap = {
89
+ 'darwin': 'apple',
90
+ 'linux': 'linux',
91
+ 'android': 'android',
92
+ 'windows': 'windows'
93
+ };
94
+ let os = "other";
95
+ forEach(osMap, (value, key) => {
96
+ if (row?.data?.versionInfo?.osVersion?.toLowerCase().indexOf(key) >= 0 ||
97
+ row?.data?.versionInfo?.os.toLowerCase().indexOf(key) >= 0) {
98
+ os = value;
99
+ }
100
+ });
101
+ return `<div class="col desktop" data-id="${row?.data?.id}" style="overflow: unset;">
102
+ <span class="os ${os}" data-balloon-pos="up"></span>
103
+ </div>`;
104
+ };
105
+ const enrollmentTokenFormatter = (row) => {
106
+ const token = row?.data?.enrollmentToken;
107
+ if (token) {
108
+ if (moment(row?.data?.enrollmentExpiresAt).isBefore()) {
109
+ return 'Enrollment Expired';
110
+ }
111
+ else {
112
+ return token;
113
+ }
114
+ }
115
+ else {
116
+ return '';
117
+ }
118
+ };
119
+ const columnFilters = this.columnFilters;
120
+ const osParams = {
121
+ filterType: 'COMBO',
122
+ filterOptions: [
123
+ { label: 'All', value: '', icon: 'empty' },
124
+ { label: 'Apple', value: 'darwin', icon: 'apple' },
125
+ { label: 'Windows', value: 'mingw', icon: 'windows' },
126
+ { label: 'Linux', value: 'linux', icon: 'linux' },
127
+ { label: 'Android', value: 'android', icon: 'android' },
128
+ { label: 'Other (text search)', value: '', icon: 'other', useTextInput: true },
129
+ ],
130
+ columnFilters,
131
+ };
132
+ let tableColumns = [
133
+ {
134
+ colId: 'name',
135
+ field: 'name',
136
+ headerName: 'Name',
137
+ headerComponent: TableColumnDefaultComponent,
138
+ headerComponentParams: this.headerComponentParams,
139
+ onCellClicked: (data) => {
140
+ if (this.hasSelectedText()) {
141
+ return;
142
+ }
143
+ this.openUpdate(data.data);
144
+ },
145
+ resizable: true,
146
+ cellRenderer: nameRenderer,
147
+ cellClass: 'nf-cell-vert-align tCol',
148
+ sortable: true,
149
+ filter: true,
150
+ sortColumn: this.sort.bind(this),
151
+ sortDir: 'asc'
152
+ },
153
+ {
154
+ colId: 'os',
155
+ field: 'versionInfo.os',
156
+ headerName: 'O/S',
157
+ width: 100,
158
+ cellRenderer: osRenderer,
159
+ headerComponent: TableColumnDefaultComponent,
160
+ tooltipComponent: OSTooltipComponent,
161
+ tooltipField: 'versionInfo.os',
162
+ tooltipComponentParams: { color: '#ececec' },
163
+ resizable: true,
164
+ cellClass: 'nf-cell-vert-align tCol',
165
+ },
166
+ {
167
+ colId: 'roles',
168
+ field: 'roleAttributes',
169
+ headerName: 'Roles',
170
+ headerComponent: TableColumnDefaultComponent,
171
+ onCellClicked: (data) => {
172
+ if (this.hasSelectedText()) {
173
+ return;
174
+ }
175
+ this.openUpdate(data.data);
176
+ },
177
+ resizable: true,
178
+ cellRenderer: rolesRenderer,
179
+ cellClass: 'nf-cell-vert-align tCol',
180
+ sortable: false,
181
+ filter: false,
182
+ },
183
+ {
184
+ colId: 'verified',
185
+ field: 'isVerified',
186
+ headerName: 'Verified',
187
+ width: 100,
188
+ sortable: true,
189
+ headerComponent: TableColumnDefaultComponent,
190
+ resizable: true,
191
+ cellClass: 'nf-cell-vert-align tCol',
192
+ },
193
+ {
194
+ colId: 'online',
195
+ field: 'isOnline',
196
+ headerName: 'Online',
197
+ width: 100,
198
+ headerComponent: TableColumnDefaultComponent,
199
+ resizable: true,
200
+ cellClass: 'nf-cell-vert-align tCol',
201
+ },
202
+ {
203
+ colId: 'createdAt',
204
+ field: 'createdAt',
205
+ headerName: 'Created At',
206
+ headerComponent: TableColumnDefaultComponent,
207
+ valueFormatter: this.createdAtFormatter,
208
+ resizable: true,
209
+ sortable: true,
210
+ sortColumn: this.sort.bind(this),
211
+ cellClass: 'nf-cell-vert-align tCol',
212
+ },
213
+ {
214
+ colId: 'enrollmentToken',
215
+ field: 'enrollmentToken',
216
+ headerName: 'Token',
217
+ headerComponent: TableColumnDefaultComponent,
218
+ valueFormatter: enrollmentTokenFormatter,
219
+ resizable: true,
220
+ cellClass: 'nf-cell-vert-align tCol',
221
+ },
222
+ {
223
+ colId: 'jwt',
224
+ field: 'enrollmentJwt',
225
+ headerName: 'JWT',
226
+ headerComponent: TableColumnDefaultComponent,
227
+ cellRenderer: 'cellTokenComponent',
228
+ resizable: true,
229
+ cellClass: 'nf-cell-vert-align tCol',
230
+ }
231
+ ];
232
+ if (this.extService.processTableColumns) {
233
+ tableColumns = this.extService.processTableColumns(tableColumns);
234
+ }
235
+ return tableColumns;
236
+ }
237
+ getData(filters, sort) {
238
+ // we can customize filters or sorting here before moving on...
239
+ return super.getTableData('edge-routers', this.paging, filters, sort)
240
+ .then((results) => {
241
+ return this.processData(results);
242
+ });
243
+ }
244
+ processData(results) {
245
+ if (!isEmpty(results?.data)) {
246
+ //pre-process data before rendering
247
+ results.data = this.addActionsPerRow(results);
248
+ }
249
+ return results;
250
+ }
251
+ addActionsPerRow(results) {
252
+ return results.data.map((row) => {
253
+ row.actionList = ['update', 're-enroll', 'delete'];
254
+ if (this.hasEnrolmentToken(row)) {
255
+ row.actionList.push('download-enrollment');
256
+ }
257
+ this.addListItemExtensionActions(row);
258
+ return row;
259
+ });
260
+ }
261
+ hasEnrolmentToken(item) {
262
+ return !isEmpty(item?.enrollmentJwt);
263
+ }
264
+ getEdgeRouterRoleAttributes() {
265
+ return this.zitiService.get('edge-router-role-attributes', {}, []);
266
+ }
267
+ getJWT(identity) {
268
+ return identity.enrollmentJwt;
269
+ }
270
+ downloadJWT(jwt, name) {
271
+ const element = document.createElement('a');
272
+ element.setAttribute('href', 'data:application/ziti-jwt;charset=utf-8,' + encodeURIComponent(jwt));
273
+ element.setAttribute('download', name + ".jwt");
274
+ element.style.display = 'none';
275
+ document.body.appendChild(element);
276
+ element.click();
277
+ document.body.removeChild(element);
278
+ }
279
+ downloadAllItems() {
280
+ const paging = cloneDeep(this.paging);
281
+ paging.total = 2000;
282
+ super.getTableData('edge-routers', paging, undefined, undefined)
283
+ .then((results) => {
284
+ return this.downloadItems(results?.data);
285
+ });
286
+ }
287
+ downloadItems(selectedItems) {
288
+ this.csvDownloadService.download('edge-routers', selectedItems, CSV_COLUMNS, false, false, undefined, false);
289
+ }
290
+ reenroll(router) {
291
+ const data = {
292
+ appendId: 'ReenrollRouter',
293
+ title: 'Re-Enroll Router',
294
+ message: `<p>If the router is currently connected, it will be disconnected until the enrollment process is completed with the newly generated JWT. <p> Are you sure you want to re-enroll the selected router?`,
295
+ confirmLabel: 'Yes',
296
+ cancelLabel: 'Oops, no get me out of here',
297
+ showCancelLink: true
298
+ };
299
+ this.dialogRef = this.dialogForm.open(ConfirmComponent, {
300
+ data: data,
301
+ autoFocus: false,
302
+ });
303
+ return this.dialogRef.afterClosed().toPromise().then((result) => {
304
+ if (result) {
305
+ return this.zitiService.post(`edge-routers/${router.id}/re-enroll`, {}, true).then((result) => {
306
+ const growlerData = new GrowlerModel('success', 'Success', `Re-enroll Confirmed`, `Router re-enroll was sent. A new enrollment token is now available`);
307
+ this.growlerService.show(growlerData);
308
+ });
309
+ }
310
+ else {
311
+ return Promise.resolve();
312
+ }
313
+ });
314
+ }
315
+ openUpdate(item) {
316
+ this.modalType = 'edge-router';
317
+ if (item) {
318
+ this.selectedEdgeRouter = item;
319
+ this.selectedEdgeRouter.badges = [];
320
+ if (this.selectedEdgeRouter.isOnline) {
321
+ this.selectedEdgeRouter.badges.push({ label: 'Online', class: 'online', circle: 'true' });
322
+ }
323
+ else {
324
+ this.selectedEdgeRouter.badges.push({ label: 'Offline', class: 'offline', circle: 'false' });
325
+ }
326
+ if (!this.selectedEdgeRouter.isVerified) {
327
+ this.selectedEdgeRouter.badges.push({ label: 'Unverified', class: 'unreg' });
328
+ }
329
+ // TODO: implement when metrics and dialog features are available
330
+ /*this.selectedEdgeRouterZ.moreActions = [
331
+ {name: 'open-metrics', label: 'Open Metrics'},
332
+ {name: 'dial-logs', label: 'Dial Logs'},
333
+ {name: 'dial-logs', label: 'View Events'},
334
+ ];*/
335
+ unset(this.selectedEdgeRouter, '_links');
336
+ }
337
+ else {
338
+ this.selectedEdgeRouter = new EdgeRouter();
339
+ }
340
+ this.sideModalOpen = true;
341
+ }
342
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, deps: [{ token: SETTINGS_SERVICE }, { token: i1.DataTableFilterService }, { token: ZITI_DATA_SERVICE }, { token: i2.CsvDownloadService }, { token: i3.GrowlerService }, { token: i4.MatDialog }, { token: EDGE_ROUTER_EXTENSION_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
343
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, providedIn: 'root' }); }
344
+ }
345
+ export { EdgeRoutersPageService };
346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EdgeRoutersPageService, decorators: [{
347
+ type: Injectable,
348
+ args: [{
349
+ providedIn: 'root'
350
+ }]
351
+ }], ctorParameters: function () { return [{ type: i5.SettingsServiceClass, decorators: [{
352
+ type: Inject,
353
+ args: [SETTINGS_SERVICE]
354
+ }] }, { type: i1.DataTableFilterService }, { type: i6.ZitiDataService, decorators: [{
355
+ type: Inject,
356
+ args: [ZITI_DATA_SERVICE]
357
+ }] }, { type: i2.CsvDownloadService }, { type: i3.GrowlerService }, { type: i4.MatDialog }, { type: undefined, decorators: [{
358
+ type: Inject,
359
+ args: [EDGE_ROUTER_EXTENSION_SERVICE]
360
+ }] }]; } });
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9wYWdlcy9lZGdlLXJvdXRlcnMvZWRnZS1yb3V0ZXJzLXBhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDMUUsT0FBTyxFQUNILDJCQUEyQixFQUM5QixNQUFNLDhGQUE4RixDQUFDO0FBRXRHLE9BQU8sRUFBQyxnQkFBZ0IsRUFBa0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRixPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0sa0NBQWtDLENBQUM7QUFFcEYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBR3RDLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHlEQUF5RCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUlwRSxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSx1RUFBdUUsQ0FBQztBQUVwSCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7Ozs7QUFFMUUsTUFBTSxXQUFXLEdBQUc7SUFDaEIsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUM7SUFDN0IsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFF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LEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7YUFDM0Y7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7YUFDOUY7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO2FBQzlFO1lBQ0QsaUVBQWlFO1lBQ2pFOzs7O2dCQUlJO1lBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7U0FDOUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDOytHQXRWUSxzQkFBc0Isa0JBNEJuQixnQkFBZ0IsbURBRWhCLGlCQUFpQixzR0FJakIsNkJBQTZCO21IQWxDaEMsc0JBQXNCLGNBRm5CLE1BQU07O1NBRVQsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkE2QlEsTUFBTTsyQkFBQyxnQkFBZ0I7OzBCQUV2QixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBSXhCLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3QsIENvbXBvbmVudH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7Y2xvbmVEZWVwLCBpc0VtcHR5fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEYXRhVGFibGVGaWx0ZXJTZXJ2aWNlLCBGaWx0ZXJPYmp9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TGlzdFBhZ2VTZXJ2aWNlQ2xhc3N9IGZyb20gXCIuLi8uLi9zaGFyZWQvbGlzdC1wYWdlLXNlcnZpY2UuY2xhc3NcIjtcbmltcG9ydCB7XG4gICAgVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50XG59IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9kYXRhLXRhYmxlL2NvbHVtbi1oZWFkZXJzL3RhYmxlLWNvbHVtbi1kZWZhdWx0L3RhYmxlLWNvbHVtbi1kZWZhdWx0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtDYWxsYmFja1Jlc3VsdHN9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9saXN0LXBhZ2UtZmVhdHVyZXMvbGlzdC1wYWdlLWZvcm0vbGlzdC1wYWdlLWZvcm0uY29tcG9uZW50XCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0NzdkRvd25sb2FkU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL2Nzdi1kb3dubG9hZC5zZXJ2aWNlXCI7XG5pbXBvcnQge0VkZ2VSb3V0ZXJ9IGZyb20gXCIuLi8uLi9tb2RlbHMvZWRnZS1yb3V0ZXJcIjtcbmltcG9ydCB7dW5zZXQsIGZvckVhY2h9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7SVRvb2x0aXBBbmd1bGFyQ29tcH0gZnJvbSBcImFnLWdyaWQtYW5ndWxhclwiO1xuaW1wb3J0IHtJVG9vbHRpcFBhcmFtc30gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XG5pbXBvcnQge09TVG9vbHRpcENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvdG9vbHRpcHMvb3MtdG9vbHRpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2VDbGFzc30gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLXNlcnZpY2UuY2xhc3NcIjtcbmltcG9ydCB7RURHRV9ST1VURVJfRVhURU5TSU9OX1NFUlZJQ0V9IGZyb20gXCIuLi8uLi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9lZGdlLXJvdXRlci9lZGdlLXJvdXRlci1mb3JtLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7Q29uZmlybUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZlYXR1cmVzL2NvbmZpcm0vY29uZmlybS5jb21wb25lbnRcIjtcblxuY29uc3QgQ1NWX0NPTFVNTlMgPSBbXG4gICAge2xhYmVsOiAnTmFtZScsIHBhdGg6ICduYW1lJ30sXG4gICAge2xhYmVsOiAnQXR0cmlidXRlcycsIHBhdGg6ICdyb2xlQXR0cmlidXRlcyd9LFxuICAgIHtsYWJlbDogJ1ZlcmlmaWVkJywgcGF0aDogJ2lzVmVyaWZpZWQnfSxcbiAgICB7bGFiZWw6ICdPbmxpbmUnLCBwYXRoOiAnaXNPbmxpbmUnfSxcbiAgICB7bGFiZWw6ICdDcmVhdGVkJywgcGF0aDogJ2NyZWF0ZWRBdCd9LFxuICAgIHtsYWJlbDogJ1Rva2VuJywgcGF0aDogJ2Vucm9sbG1lbnRUb2tlbid9LFxuICAgIHtsYWJlbDogJ05vIFRyYXZlcnNhbCcsIHBhdGg6ICdub1RyYXZlcnNhbCd9LFxuICAgIHtsYWJlbDogJ0hvc3QgTmFtZScsIHBhdGg6ICdob3N0bmFtZSd9LFxuICAgIHtsYWJlbDogJ0Rpc2FibGVkJywgcGF0aDogJ2Rpc2FibGVkJ30sXG4gICAge2xhYmVsOiAnVHVubmVsZXIgRW5hYmxlZCcsIHBhdGg6ICdpc1R1bm5lbGVyRW5hYmxlZCd9LFxuICAgIHtsYWJlbDogJ09TJywgcGF0aDogJ3ZlcnNpb25JbmZvLm9zJ30sXG4gICAge2xhYmVsOiAnQXJjaGl0ZWN0dXJlJywgcGF0aDogJ3ZlcnNpb25JbmZvLmFyY2gnfSxcbiAgICB7bGFiZWw6ICdWZXJzaW9uJywgcGF0aDogJ3ZlcnNpb25JbmZvLnZlcnNpb24nfSxcbiAgICB7bGFiZWw6ICdSZXZpc2lvbicsIHBhdGg6ICd2ZXJzaW9uSW5mby5yZXZpc2lvbid9LFxuICAgIHtsYWJlbDogJ0ZpbmdlcnByaW50JywgcGF0aDogJ2ZpbmdlcnByaW50J30sXG4gICAge2xhYmVsOiAnSUQnLCBwYXRoOiAnaWQnfSxcbl07XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWRnZVJvdXRlcnNQYWdlU2VydmljZSBleHRlbmRzIExpc3RQYWdlU2VydmljZUNsYXNzIHtcblxuICAgIHByaXZhdGUgcGFnaW5nID0gdGhpcy5ERUZBVUxUX1BBR0lORztcbiAgICBwdWJsaWMgbW9kYWxUeXBlID0gJ2VkZ2Utcm91dGVyJztcblxuICAgIHNlbGVjdGVkRWRnZVJvdXRlcjogYW55ID0gbmV3IEVkZ2VSb3V0ZXIoKTtcbiAgICBjb2x1bW5GaWx0ZXJzOiBhbnkgPSB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICBvczogJycsXG4gICAgICAgIGNyZWF0ZWRBdDogJycsXG4gICAgfTtcblxuICAgIG92ZXJyaWRlIG1lbnVJdGVtcyA9IFtcbiAgICAgICAge25hbWU6ICdFZGl0JywgYWN0aW9uOiAndXBkYXRlJ30sXG4gICAgICAgIHtuYW1lOiAnRG93bmxvYWQgSldUJywgYWN0aW9uOiAnZG93bmxvYWQtZW5yb2xsbWVudCd9LFxuICAgICAgICB7bmFtZTogJ1Jlc2V0IEVucm9sbG1lbnQnLCBhY3Rpb246ICdyZXNldC1lbnJvbGxtZW50J30sXG4gICAgICAgIHtuYW1lOiAnUmUtRW5yb2xsJywgYWN0aW9uOiAncmUtZW5yb2xsJ30sXG4gICAgICAgIHtuYW1lOiAnRGVsZXRlJywgYWN0aW9uOiAnZGVsZXRlJ30sXG4gICAgXVxuXG4gICAgb3ZlcnJpZGUgdGFibGVIZWFkZXJBY3Rpb25zID0gW1xuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIEFsbCcsIGFjdGlvbjogJ2Rvd25sb2FkLWFsbCd9LFxuICAgICAgICB7bmFtZTogJ0Rvd25sb2FkIFNlbGVjdGVkJywgYWN0aW9uOiAnZG93bmxvYWQtc2VsZWN0ZWQnfSxcbiAgICBdXG5cbiAgICByZXNvdXJjZVR5cGUgPSAnZWRnZS1yb3V0ZXJzJztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2VDbGFzcyxcbiAgICAgICAgZmlsdGVyU2VydmljZTogRGF0YVRhYmxlRmlsdGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBvdmVycmlkZSBjc3ZEb3dubG9hZFNlcnZpY2U6IENzdkRvd25sb2FkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nRm9ybTogTWF0RGlhbG9nLFxuICAgICAgICBASW5qZWN0KEVER0VfUk9VVEVSX0VYVEVOU0lPTl9TRVJWSUNFKSBwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MsIGZpbHRlclNlcnZpY2UsIGNzdkRvd25sb2FkU2VydmljZSwgZXh0U2VydmljZSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUgPSAoZm9ybURhdGEpOiBQcm9taXNlPENhbGxiYWNrUmVzdWx0cz4gPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgcGFzc2VkOiB0cnVlfSk7XG4gICAgfVxuXG4gICAgaW5pdFRhYmxlQ29sdW1ucygpOiBhbnkge1xuICAgICAgICB0aGlzLmluaXRNZW51QWN0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IG5hbWVSZW5kZXJlciA9IChyb3cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImNvbCBjZWxsLW5hbWUtcmVuZGVyZXJcIiBkYXRhLWlkPVwiJHtyb3c/LmRhdGE/LmlkfVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlICR7cm93Py5kYXRhPy5pc1ZlcmlmaWVkfVwiIHRpdGxlPVwiVmVyaWZpZWQgU3RhdHVzXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2lyY2xlICR7cm93Py5kYXRhPy5pc09ubGluZX1cIiB0aXRsZT1cIk9ubGluZSBTdGF0dXNcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz4ke3Jvdz8uZGF0YT8ubmFtZX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9kaXY+YFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm9sZXNSZW5kZXJlciA9IChyb3cpID0+IHtcbiAgICAgICAgICAgIGxldCByb2xlcyA9ICcnO1xuICAgICAgICAgICAgcm93Py5kYXRhPy5yb2xlQXR0cmlidXRlcz8uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgIHJvbGVzICs9ICc8ZGl2IGNsYXNzPVwiaGFzaHRhZ1wiPicrYXR0cisnPC9kaXY+JztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJvbGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3NSZW5kZXJlciA9IChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9zTWFwOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgJ2Rhcndpbic6ICdhcHBsZScsXG4gICAgICAgICAgICAgICAgJ2xpbnV4JzogJ2xpbnV4JyxcbiAgICAgICAgICAgICAgICAnYW5kcm9pZCc6ICdhbmRyb2lkJyxcbiAgICAgICAgICAgICAgICAnd2luZG93cyc6ICd3aW5kb3dzJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IG9zID0gXCJvdGhlclwiO1xuICAgICAgICAgICAgZm9yRWFjaChvc01hcCwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocm93Py5kYXRhPy52ZXJzaW9uSW5mbz8ub3NWZXJzaW9uPy50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoa2V5KT49MCB8fFxuICAgICAgICAgICAgICAgICAgICByb3c/LmRhdGE/LnZlcnNpb25JbmZvPy5vcy50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoa2V5KT49MCkge1xuICAgICAgICAgICAgICAgICAgICBvcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiY29sIGRlc2t0b3BcIiBkYXRhLWlkPVwiJHtyb3c/LmRhdGE/LmlkfVwiIHN0eWxlPVwib3ZlcmZsb3c6IHVuc2V0O1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3MgJHtvc31cIiBkYXRhLWJhbGxvb24tcG9zPVwidXBcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVucm9sbG1lbnRUb2tlbkZvcm1hdHRlciA9IChyb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcm93Py5kYXRhPy5lbnJvbGxtZW50VG9rZW47XG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAobW9tZW50KHJvdz8uZGF0YT8uZW5yb2xsbWVudEV4cGlyZXNBdCkuaXNCZWZvcmUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0Vucm9sbG1lbnQgRXhwaXJlZCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkZpbHRlcnMgPSB0aGlzLmNvbHVtbkZpbHRlcnM7XG5cbiAgICAgICAgY29uc3Qgb3NQYXJhbXMgPSB7XG4gICAgICAgICAgICBmaWx0ZXJUeXBlOiAnQ09NQk8nLFxuICAgICAgICAgICAgZmlsdGVyT3B0aW9uczogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdBbGwnLCB2YWx1ZTogJycsIGljb246ICdlbXB0eScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQXBwbGUnLCB2YWx1ZTogJ2RhcndpbicsIGljb246ICdhcHBsZScgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnV2luZG93cycsIHZhbHVlOiAnbWluZ3cnLCBpY29uOiAnd2luZG93cycgIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0xpbnV4JywgdmFsdWU6ICdsaW51eCcsIGljb246ICdsaW51eCcgIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0FuZHJvaWQnLCB2YWx1ZTogJ2FuZHJvaWQnLCBpY29uOiAnYW5kcm9pZCcgIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ090aGVyICh0ZXh0IHNlYXJjaCknLCB2YWx1ZTogJycsIGljb246ICdvdGhlcicsIHVzZVRleHRJbnB1dDogdHJ1ZSAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBjb2x1bW5GaWx0ZXJzLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICduYW1lJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ25hbWUnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdOYW1lJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnRQYXJhbXM6IHRoaXMuaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgICAgICAgICAgIG9uQ2VsbENsaWNrZWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdGVkVGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVXBkYXRlKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiBuYW1lUmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzb3J0Q29sdW1uOiB0aGlzLnNvcnQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICBzb3J0RGlyOiAnYXNjJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ29zJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3ZlcnNpb25JbmZvLm9zJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnTy9TJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgICAgICAgIGNlbGxSZW5kZXJlcjogb3NSZW5kZXJlcixcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB0b29sdGlwQ29tcG9uZW50OiBPU1Rvb2x0aXBDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgdG9vbHRpcEZpZWxkOiAndmVyc2lvbkluZm8ub3MnLFxuICAgICAgICAgICAgICAgIHRvb2x0aXBDb21wb25lbnRQYXJhbXM6IHsgY29sb3I6ICcjZWNlY2VjJyB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsQ2xhc3M6ICduZi1jZWxsLXZlcnQtYWxpZ24gdENvbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbElkOiAncm9sZXMnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAncm9sZUF0dHJpYnV0ZXMnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdSb2xlcycsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgb25DZWxsQ2xpY2tlZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0ZWRUZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5VcGRhdGUoZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjZWxsUmVuZGVyZXI6IHJvbGVzUmVuZGVyZXIsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ3ZlcmlmaWVkJyxcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lzVmVyaWZpZWQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdWZXJpZmllZCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ29ubGluZScsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdpc09ubGluZScsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ09ubGluZScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xJZDogJ2NyZWF0ZWRBdCcsXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdjcmVhdGVkQXQnLFxuICAgICAgICAgICAgICAgIGhlYWRlck5hbWU6ICdDcmVhdGVkIEF0JyxcbiAgICAgICAgICAgICAgICBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQ29sdW1uRGVmYXVsdENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICB2YWx1ZUZvcm1hdHRlcjogdGhpcy5jcmVhdGVkQXRGb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHNvcnRDb2x1bW46IHRoaXMuc29ydC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdlbnJvbGxtZW50VG9rZW4nLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW5yb2xsbWVudFRva2VuJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJOYW1lOiAnVG9rZW4nLFxuICAgICAgICAgICAgICAgIGhlYWRlckNvbXBvbmVudDogVGFibGVDb2x1bW5EZWZhdWx0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgIHZhbHVlRm9ybWF0dGVyOiBlbnJvbGxtZW50VG9rZW5Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNlbGxDbGFzczogJ25mLWNlbGwtdmVydC1hbGlnbiB0Q29sJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sSWQ6ICdqd3QnLFxuICAgICAgICAgICAgICAgIGZpZWxkOiAnZW5yb2xsbWVudEp3dCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyTmFtZTogJ0pXVCcsXG4gICAgICAgICAgICAgICAgaGVhZGVyQ29tcG9uZW50OiBUYWJsZUNvbHVtbkRlZmF1bHRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgY2VsbFJlbmRlcmVyOiAnY2VsbFRva2VuQ29tcG9uZW50JyxcbiAgICAgICAgICAgICAgICByZXNpemFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgY2VsbENsYXNzOiAnbmYtY2VsbC12ZXJ0LWFsaWduIHRDb2wnLFxuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuXG4gICAgICAgIGlmICh0aGlzLmV4dFNlcnZpY2UucHJvY2Vzc1RhYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgdGFibGVDb2x1bW5zID0gdGhpcy5leHRTZXJ2aWNlLnByb2Nlc3NUYWJsZUNvbHVtbnModGFibGVDb2x1bW5zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnM7XG4gICAgfVxuXG4gICAgZ2V0RGF0YShmaWx0ZXJzPzogRmlsdGVyT2JqW10sIHNvcnQ/OiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICAvLyB3ZSBjYW4gY3VzdG9taXplIGZpbHRlcnMgb3Igc29ydGluZyBoZXJlIGJlZm9yZSBtb3Zpbmcgb24uLi5cbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFRhYmxlRGF0YSgnZWRnZS1yb3V0ZXJzJywgdGhpcy5wYWdpbmcsIGZpbHRlcnMsIHNvcnQpXG4gICAgICAgICAgICAudGhlbigocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEocmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NEYXRhKHJlc3VsdHM6IGFueSkge1xuICAgICAgICBpZiAoIWlzRW1wdHkocmVzdWx0cz8uZGF0YSkpIHtcbiAgICAgICAgICAgIC8vcHJlLXByb2Nlc3MgZGF0YSBiZWZvcmUgcmVuZGVyaW5nXG4gICAgICAgICAgICByZXN1bHRzLmRhdGEgPSB0aGlzLmFkZEFjdGlvbnNQZXJSb3cocmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRBY3Rpb25zUGVyUm93KHJlc3VsdHM6IGFueSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgICAgICAgcm93LmFjdGlvbkxpc3QgPSBbJ3VwZGF0ZScsICdyZS1lbnJvbGwnLCAnZGVsZXRlJ107XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNFbnJvbG1lbnRUb2tlbihyb3cpKSB7XG4gICAgICAgICAgICAgICAgcm93LmFjdGlvbkxpc3QucHVzaCgnZG93bmxvYWQtZW5yb2xsbWVudCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hZGRMaXN0SXRlbUV4dGVuc2lvbkFjdGlvbnMocm93KTtcbiAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhc0Vucm9sbWVudFRva2VuKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFpc0VtcHR5KGl0ZW0/LmVucm9sbG1lbnRKd3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFZGdlUm91dGVyUm9sZUF0dHJpYnV0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnppdGlTZXJ2aWNlLmdldCgnZWRnZS1yb3V0ZXItcm9sZS1hdHRyaWJ1dGVzJywge30sIFtdKTtcbiAgICB9XG5cblxuICAgIGdldEpXVChpZGVudGl0eTogYW55KSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eS5lbnJvbGxtZW50Snd0O1xuICAgIH1cblxuICAgIGRvd25sb2FkSldUKGp3dCwgbmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsICdkYXRhOmFwcGxpY2F0aW9uL3ppdGktand0O2NoYXJzZXQ9dXRmLTgsJyArIGVuY29kZVVSSUNvbXBvbmVudChqd3QpKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2Rvd25sb2FkJywgbmFtZStcIi5qd3RcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgZWxlbWVudC5jbGljaygpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGRvd25sb2FkQWxsSXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IGNsb25lRGVlcCh0aGlzLnBhZ2luZyk7XG4gICAgICAgIHBhZ2luZy50b3RhbCA9IDIwMDA7XG4gICAgICAgIHN1cGVyLmdldFRhYmxlRGF0YSgnZWRnZS1yb3V0ZXJzJywgcGFnaW5nLCB1bmRlZmluZWQsIHVuZGVmaW5lZClcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kb3dubG9hZEl0ZW1zKHJlc3VsdHM/LmRhdGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZG93bmxvYWRJdGVtcyhzZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgIHRoaXMuY3N2RG93bmxvYWRTZXJ2aWNlLmRvd25sb2FkKFxuICAgICAgICAgICAgJ2VkZ2Utcm91dGVycycsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLFxuICAgICAgICAgICAgQ1NWX0NPTFVNTlMsXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZWVucm9sbChyb3V0ZXI6IGFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgYXBwZW5kSWQ6ICdSZWVucm9sbFJvdXRlcicsXG4gICAgICAgICAgICB0aXRsZTogJ1JlLUVucm9sbCBSb3V0ZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogYDxwPklmIHRoZSByb3V0ZXIgaXMgY3VycmVudGx5IGNvbm5lY3RlZCwgaXQgd2lsbCBiZSBkaXNjb25uZWN0ZWQgdW50aWwgdGhlIGVucm9sbG1lbnQgcHJvY2VzcyBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgbmV3bHkgZ2VuZXJhdGVkIEpXVC4gPHA+IEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZS1lbnJvbGwgdGhlIHNlbGVjdGVkIHJvdXRlcj9gLFxuICAgICAgICAgICAgY29uZmlybUxhYmVsOiAnWWVzJyxcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAnT29wcywgbm8gZ2V0IG1lIG91dCBvZiBoZXJlJyxcbiAgICAgICAgICAgIHNob3dDYW5jZWxMaW5rOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dGb3JtLm9wZW4oQ29uZmlybUNvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS50b1Byb21pc2UoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5wb3N0KGBlZGdlLXJvdXRlcnMvJHtyb3V0ZXIuaWR9L3JlLWVucm9sbGAsIHt9LCB0cnVlKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJlLWVucm9sbCBDb25maXJtZWRgLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFJvdXRlciByZS1lbnJvbGwgd2FzIHNlbnQuIEEgbmV3IGVucm9sbG1lbnQgdG9rZW4gaXMgbm93IGF2YWlsYWJsZWAsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9wZW5VcGRhdGUoaXRlbT86IGFueSkge1xuICAgICAgICB0aGlzLm1vZGFsVHlwZSA9ICdlZGdlLXJvdXRlcic7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlciA9IGl0ZW07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5iYWRnZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5pc09ubGluZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLmJhZGdlcy5wdXNoKHtsYWJlbDogJ09ubGluZScsIGNsYXNzOiAnb25saW5lJywgY2lyY2xlOiAndHJ1ZSd9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuYmFkZ2VzLnB1c2goe2xhYmVsOiAnT2ZmbGluZScsIGNsYXNzOiAnb2ZmbGluZScsIGNpcmNsZTogJ2ZhbHNlJ30pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRWRnZVJvdXRlci5pc1ZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEVkZ2VSb3V0ZXIuYmFkZ2VzLnB1c2goe2xhYmVsOiAnVW52ZXJpZmllZCcsIGNsYXNzOiAndW5yZWcnfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgd2hlbiBtZXRyaWNzIGFuZCBkaWFsb2cgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZVxuICAgICAgICAgICAgLyp0aGlzLnNlbGVjdGVkRWRnZVJvdXRlcloubW9yZUFjdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge25hbWU6ICdvcGVuLW1ldHJpY3MnLCBsYWJlbDogJ09wZW4gTWV0cmljcyd9LFxuICAgICAgICAgICAgICAgIHtuYW1lOiAnZGlhbC1sb2dzJywgbGFiZWw6ICdEaWFsIExvZ3MnfSxcbiAgICAgICAgICAgICAgICB7bmFtZTogJ2RpYWwtbG9ncycsIGxhYmVsOiAnVmlldyBFdmVudHMnfSxcbiAgICAgICAgICAgIF07Ki9cbiAgICAgICAgICAgIHVuc2V0KHRoaXMuc2VsZWN0ZWRFZGdlUm91dGVyLCAnX2xpbmtzJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRWRnZVJvdXRlciA9IG5ldyBFZGdlUm91dGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaWRlTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICB9XG59XG4iXX0=