@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,370 @@
1
+ import { Injectable } from '@angular/core';
2
+ import _ from 'lodash';
3
+ import * as i0 from "@angular/core";
4
+ class Link {
5
+ }
6
+ class Node {
7
+ }
8
+ class ServiceHostNode {
9
+ constructor() {
10
+ this.intercept = [];
11
+ }
12
+ }
13
+ export class ServiceData {
14
+ }
15
+ class IdentityServicePathHelper {
16
+ constructor() {
17
+ this.posy_for_group3 = 0;
18
+ }
19
+ getEndpointGraphObj(endpoint, bindIdnetities, edgerouters, selectedServiceOb, serviceConfigs, filterText = '') {
20
+ let endpointNodeOb = null;
21
+ const rootOb = new RootJson();
22
+ const bindNode = bindIdnetities.find((nd) => nd.id === endpoint.id);
23
+ if (!bindNode) {
24
+ endpointNodeOb = createEndpoint(endpoint);
25
+ endpointNodeOb.group = '1';
26
+ endpointNodeOb.posx = 50;
27
+ endpointNodeOb.posy = 200;
28
+ rootOb.addNode(endpointNodeOb);
29
+ }
30
+ let publicRouterNodes = [];
31
+ let posy = 0;
32
+ _.isArray(edgerouters) && edgerouters.forEach((nd) => {
33
+ const nodeOb = createERNode(nd);
34
+ nodeOb.group = '2a';
35
+ nodeOb.posx = 250;
36
+ posy = posy + 100;
37
+ nodeOb.posy = posy;
38
+ publicRouterNodes.push(nodeOb);
39
+ rootOb.addNode(nodeOb);
40
+ });
41
+ let publicRouterNodesForEndpointTunnelers = [];
42
+ const posx_for_group3 = 550;
43
+ this.posy_for_group3 = 0;
44
+ let group3Ids = [];
45
+ let posy_for_group4 = 150;
46
+ const group4Nodes = [];
47
+ const serviceIPPorts = [];
48
+ const srNode = new ServiceHostNode();
49
+ srNode.id = selectedServiceOb.id;
50
+ srNode.name = selectedServiceOb.name;
51
+ srNode.intercept = serviceConfigAlias(serviceConfigs);
52
+ srNode.type = 'Config Service';
53
+ srNode.group = '4';
54
+ srNode.status = '1';
55
+ group4Nodes.push(srNode);
56
+ rootOb.addNode(srNode);
57
+ _.isArray(bindIdnetities) && bindIdnetities.forEach((ePoint) => {
58
+ if (group3Ids.indexOf(ePoint.id) < 0) {
59
+ group3Ids.push(ePoint.id);
60
+ }
61
+ });
62
+ // create links between nodes
63
+ // in group3, remove routers/ep that exist in group2
64
+ this.posy_for_group3 = 165;
65
+ let grp3Yincrement = 100;
66
+ const group3Nodes = [];
67
+ let countgrp3 = 0;
68
+ group3Ids.find((nid) => {
69
+ // let's check if the service hosted is an Endpoint
70
+ let grp3Node = findEndpoint(nid, bindIdnetities);
71
+ if (grp3Node) {
72
+ grp3Node.group = '3';
73
+ grp3Node.posx = posx_for_group3;
74
+ grp3Node.posy = this.posy_for_group3;
75
+ this.posy_for_group3 = this.posy_for_group3 + 125;
76
+ group3Nodes.push(grp3Node);
77
+ countgrp3++;
78
+ rootOb.addNode(grp3Node);
79
+ }
80
+ });
81
+ grp3Yincrement = countgrp3 > 2 ? 75 : 100;
82
+ if (countgrp3 === 1) {
83
+ this.posy_for_group3 = 160;
84
+ }
85
+ else if (countgrp3 === 2) {
86
+ this.posy_for_group3 = 120;
87
+ }
88
+ else if (countgrp3 >= 5) {
89
+ this.posy_for_group3 = 50;
90
+ grp3Yincrement = 75;
91
+ }
92
+ else {
93
+ this.posy_for_group3 = 73;
94
+ }
95
+ if (group3Nodes)
96
+ group3Nodes.find((node3) => {
97
+ if (node3.group === '3') {
98
+ node3.posy = this.posy_for_group3;
99
+ this.posy_for_group3 = this.posy_for_group3 + grp3Yincrement;
100
+ }
101
+ });
102
+ if (group4Nodes && group4Nodes.length === 1) {
103
+ posy_for_group4 = 200;
104
+ }
105
+ group4Nodes.find((nd4) => {
106
+ // nd4.posx = group3Nodes && group3Nodes.length > 0 && !group3Nodes[0].type.includes("Public Hosted") ? posx_for_group3 + 175 : posx_for_group3;
107
+ nd4.posx = posx_for_group3 + 175;
108
+ nd4.posy = posy_for_group4;
109
+ posy_for_group4 = posy_for_group4 + 100;
110
+ });
111
+ let countPublicNodes = 0;
112
+ rootOb.nodes.find((pNode) => {
113
+ if (pNode.group.includes('2')) {
114
+ countPublicNodes = countPublicNodes + 1;
115
+ }
116
+ });
117
+ publicRouterNodes = [];
118
+ let posy_group2 = 100;
119
+ let yIncrement = 0;
120
+ if (countPublicNodes === 1) {
121
+ posy_group2 = 200;
122
+ }
123
+ else if (countPublicNodes >= 2 && countPublicNodes < 5) {
124
+ posy_group2 = 60;
125
+ yIncrement = 80;
126
+ }
127
+ else if (countPublicNodes >= 5 && countPublicNodes < 10) {
128
+ posy_group2 = 40;
129
+ yIncrement = 50;
130
+ }
131
+ else {
132
+ posy_group2 = 40;
133
+ yIncrement = 40;
134
+ }
135
+ rootOb.nodes.find((publicNode) => {
136
+ if (publicNode.group.includes('2')) {
137
+ publicNode.posx = 275;
138
+ publicNode.posy = posy_group2;
139
+ posy_group2 = posy_group2 + yIncrement;
140
+ publicRouterNodes.push(publicNode);
141
+ if (publicNode.group === '2b') {
142
+ group3Nodes.push(publicNode);
143
+ }
144
+ }
145
+ });
146
+ for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {
147
+ const nd = rootOb.nodes[k1];
148
+ if (endpointNodeOb !== null && (nd.group === '2a' || nd.group === '2ab' || nd.group === '2ac')) {
149
+ const lnk = new Link();
150
+ lnk.source = endpointNodeOb.id;
151
+ lnk.sourceName = endpointNodeOb.name;
152
+ lnk.target = nd.id;
153
+ lnk.targetName = nd.name;
154
+ lnk.status = getEndpointToRouterLinkState(endpointNodeOb, nd);
155
+ lnk.weight = getWeight(lnk.status);
156
+ rootOb.addLink(lnk);
157
+ }
158
+ }
159
+ for (let k1 = 0; k1 < rootOb.nodes.length; k1++) {
160
+ const nd1 = rootOb.nodes[k1];
161
+ if (nd1.group.includes('2')) {
162
+ for (let k2 = 0; k2 < group3Nodes.length; k2++) {
163
+ const nd2 = group3Nodes[k2];
164
+ if (nd2.group === '2b' || nd2.group === '2ab') {
165
+ continue;
166
+ } // link not required.
167
+ const lnk = new Link();
168
+ lnk.source = nd1.id;
169
+ lnk.sourceName = nd1.name;
170
+ lnk.target = nd2.id;
171
+ lnk.targetName = nd2.name;
172
+ if (nd1.type.includes('Router') && nd2.type.includes('Router')) {
173
+ lnk.status =
174
+ nd1.status === 'PROVISIONED' &&
175
+ nd1.online === 'Yes' &&
176
+ nd2.status === 'PROVISIONED' &&
177
+ nd2.online === 'Yes'
178
+ ? 1
179
+ : 0;
180
+ }
181
+ else {
182
+ lnk.status = getEndpointToRouterLinkState(nd2, nd1);
183
+ }
184
+ lnk.weight = getWeight(lnk.status);
185
+ rootOb.addLink(lnk);
186
+ }
187
+ }
188
+ }
189
+ for (let k0 = 0; k0 < group4Nodes.length; k0++) {
190
+ for (let k1 = 0; k1 < group3Nodes.length; k1++) {
191
+ const lnk = new Link();
192
+ lnk.source = group3Nodes[k1].id;
193
+ lnk.sourceName = group3Nodes[k1].name;
194
+ lnk.target = group4Nodes[k0].id;
195
+ lnk.targetName = group4Nodes[k0].name;
196
+ lnk.weight = 1;
197
+ const foundNd = rootOb.nodes.find(function (rnd) {
198
+ // if (rnd.id === group3Nodes[k1].id) {
199
+ return rnd.id === group3Nodes[k1].id;
200
+ // }
201
+ });
202
+ if (foundNd.type.includes('Router')) {
203
+ lnk.status = foundNd.status === 'PROVISIONED' && foundNd.online === 'Yes' ? 1 : 0;
204
+ }
205
+ else {
206
+ lnk.status = getServiceToEndpointLinkState(group3Nodes[k1], group4Nodes[k0]);
207
+ lnk.weight = getWeight(lnk.status);
208
+ }
209
+ rootOb.addLink(lnk);
210
+ }
211
+ }
212
+ function serviceConfigAlias(configs) {
213
+ let intercept = [];
214
+ _.isArray(configs) && configs.forEach((conf) => {
215
+ let addresses = '';
216
+ let ports = '';
217
+ if (conf.data.addresses) {
218
+ addresses = conf.data.addresses.toString();
219
+ }
220
+ else {
221
+ addresses = conf.data.address;
222
+ }
223
+ if (_.isArray(conf.data.portRanges)) {
224
+ conf.data.portRanges.forEach((portsJson) => {
225
+ for (const key in portsJson) {
226
+ ports = ports + key + ':' + portsJson[key] + ' ';
227
+ }
228
+ ports = ports + ';';
229
+ });
230
+ }
231
+ else {
232
+ ports = conf.data.port;
233
+ }
234
+ intercept.push(addresses);
235
+ intercept.push(ports);
236
+ });
237
+ return intercept;
238
+ }
239
+ function findEndpoint(endpointId, endpoints) {
240
+ let node = null;
241
+ if (endpointId === null) {
242
+ return null;
243
+ }
244
+ const ePoint = endpoints.find(function (er) {
245
+ return er.id === endpointId;
246
+ });
247
+ if (ePoint) {
248
+ node = createEndpoint(ePoint);
249
+ node.type = 'Hosted Identity';
250
+ }
251
+ return node;
252
+ } // end of findEndpoint
253
+ function createEndpoint(ePoint) {
254
+ const node = new Node();
255
+ node.id = ePoint.id;
256
+ node.name = ePoint.name;
257
+ node.type = 'Identity';
258
+ node.apiSession = ePoint.hasApiSession === false ? 'No' : 'Yes';
259
+ node.routerConnection = ePoint.hasEdgeRouterConnection === false ? 'No' : 'Yes';
260
+ node.os = ePoint.envInfo ? ePoint.envInfo.os : '';
261
+ node.mfaEnabled = ePoint.isMfaEnabled;
262
+ node.status = ePoint.envInfo && ePoint.envInfo.os !== null ? 'Registered' : 'Un-Registered';
263
+ return node;
264
+ }
265
+ function createERNode(erouter) {
266
+ const nodeOb = new Node();
267
+ nodeOb.id = erouter.id;
268
+ nodeOb.name = erouter.name;
269
+ nodeOb.status = erouter.isVerified === true ? 'Registered' : 'Un-Registered';
270
+ nodeOb.online = erouter.isOnline === false ? 'No' : 'Yes';
271
+ nodeOb.tunnelerEnabled = erouter.isTunnelerEnabled === false ? 'No' : 'Yes';
272
+ nodeOb.type = 'EdgeRouter';
273
+ return nodeOb;
274
+ }
275
+ function findEdgeRouterForId(routerId, edgerouters) {
276
+ const erouter = edgerouters.find((er) => {
277
+ // if (er.id === routerId) {
278
+ return er.id === routerId;
279
+ // }
280
+ });
281
+ if (erouter) {
282
+ return createERNode(erouter);
283
+ }
284
+ else {
285
+ return null;
286
+ }
287
+ } // end of findEdgeRouterForId
288
+ function getEndpointToRouterLinkState(endpointNode, routerNode) {
289
+ let linkstate = 0;
290
+ if (routerNode.status === 'ERROR') {
291
+ linkstate = 0;
292
+ }
293
+ else if (endpointNode.status === 'Un-Registered') {
294
+ linkstate = -1;
295
+ }
296
+ else if (endpointNode.apiSession === 'No') {
297
+ linkstate = 0;
298
+ }
299
+ else if (endpointNode.routerConnection === 'No') {
300
+ linkstate = -1;
301
+ }
302
+ else if (routerNode.online === 'Yes' && endpointNode.routerConnection === 'Yes') {
303
+ linkstate = 1;
304
+ }
305
+ else {
306
+ linkstate = -1;
307
+ }
308
+ return linkstate;
309
+ }
310
+ function getServiceToEndpointLinkState(endpointNode, serviceNode) {
311
+ let linkstate = 0;
312
+ if (endpointNode.status === 'Un-Registered' || serviceNode.intercept.includes('No')) {
313
+ linkstate = -1;
314
+ }
315
+ else if (endpointNode.apiSession === 'No') {
316
+ linkstate = 0;
317
+ }
318
+ else if (endpointNode.status === 'Registered' && endpointNode.apiSession === 'Yes') {
319
+ linkstate = 1;
320
+ }
321
+ else {
322
+ linkstate = 0;
323
+ }
324
+ return linkstate;
325
+ }
326
+ function getWeight(linkState) {
327
+ return linkState === -1 ? 5 : 1;
328
+ }
329
+ return rootOb;
330
+ } // end of NEW Function
331
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
332
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, providedIn: 'root' }); }
333
+ }
334
+ export { IdentityServicePathHelper };
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IdentityServicePathHelper, decorators: [{
336
+ type: Injectable,
337
+ args: [{
338
+ providedIn: 'root',
339
+ }]
340
+ }], ctorParameters: function () { return []; } });
341
+ class RootJson {
342
+ constructor() {
343
+ this.nodes = [];
344
+ this.links = [];
345
+ }
346
+ addNode(newObject) {
347
+ const foundObj = this.nodes.find(function (nd) {
348
+ // if (nd.id === newObject.id) {
349
+ // nd = newObject;
350
+ return nd.id === newObject.id;
351
+ // }
352
+ });
353
+ if (!foundObj) {
354
+ this.nodes.push(newObject);
355
+ }
356
+ }
357
+ ;
358
+ replaceNode(newObject) {
359
+ const indx = this.nodes.findIndex(nd => nd.id === newObject.id);
360
+ if (indx >= 0) {
361
+ this.nodes[indx] = newObject;
362
+ }
363
+ }
364
+ ;
365
+ addLink(newObject) {
366
+ this.links.push(newObject);
367
+ }
368
+ ;
369
+ }
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdHktc2VydmljZS1wYXRoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy92aXN1YWxpemVyL2lkZW50aXR5LXNlcnZpY2UtcGF0aC9pZGVudGl0eS1zZXJ2aWNlLXBhdGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBVSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDOztBQUV2QixNQUFNLElBQUk7Q0FPVDtBQUVELE1BQU0sSUFBSTtDQWdCVDtBQUVELE1BQU0sZUFBZTtJQUFyQjtRQWtCSSxjQUFTLEdBQUcsRUFBRSxDQUFDO0lBR25CLENBQUM7Q0FBQTtBQUVELE1BQU0sT0FBTyxXQUFXO0NBR3ZCO0FBRUQsTUFHYSx5QkFBeUI7SUFHbEM7UUFGQSxvQkFBZSxHQUFHLENBQUMsQ0FBQztJQUdqQixDQUFDO0lBRUcsbUJBQW1CLENBQ3RCLFFBQVEsRUFDUixjQUFjLEVBQ2QsV0FBVyxFQUNYLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsVUFBVSxHQUFHLEVBQUU7UUFFZixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBSSxjQUFjLENBQUMsSUFBSSxDQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBRSxFQUFFLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFLENBQUcsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1osY0FBYyxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxjQUFjLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUMzQixjQUFjLENBQUMsSUFBSSxHQUFHLEVBQUUs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QUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7QUFvVkEsTUFBTSxRQUFRO0lBQWQ7UUFDTyxVQUFLLEdBQU8sRUFBRSxDQUFDO1FBQ2YsVUFBSyxHQUFPLEVBQUUsQ0FBQztJQXNCdEIsQ0FBQztJQXJCTSxPQUFPLENBQUUsU0FBUztRQUNWLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFFLFVBQVUsRUFBRTtZQUMzQyxnQ0FBZ0M7WUFDNUIsa0JBQWtCO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUk7UUFDUixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QjtJQUNULENBQUM7SUFBQSxDQUFDO0lBQ0YsV0FBVyxDQUFFLFNBQVM7UUFDaEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7WUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUM3QjtJQUNULENBQUM7SUFBQSxDQUFDO0lBQ0gsT0FBTyxDQUFFLFNBQVM7UUFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBQUEsQ0FBQztDQUVSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5jbGFzcyBMaW5rIHtcbiAgICBzb3VyY2U7XG4gICAgc291cmNlTmFtZTtcbiAgICB0YXJnZXQ7XG4gICAgdGFyZ2V0TmFtZTtcbiAgICB3ZWlnaHQ7XG4gICAgc3RhdHVzO1xufVxuXG5jbGFzcyBOb2RlIHtcbiAgICBpZDtcbiAgICBuYW1lO1xuICAgIHByb3ZpZGVyO1xuICAgIGdyb3VwO1xuICAgIHBvc3g7XG4gICAgcG9zeTtcbiAgICBzdGF0dXM7XG4gICAgb25saW5lO1xuICAgIGFwaVNlc3Npb247XG4gICAgcm91dGVyQ29ubmVjdGlvbjtcbiAgICB0dW5uZWxlckVuYWJsZWQ7XG4gICAgb3M7XG4gICAgbWZhRW5hYmxlZDtcbiAgICB0eXBlO1xuICAgIHVzYWdlO1xufVxuXG5jbGFzcyBTZXJ2aWNlSG9zdE5vZGUge1xuICAgIGlkO1xuICAgIG5hbWU7XG4gICAgZ3JvdXA7XG4gICAgcG9zeDtcbiAgICBwb3N5O1xuICAgIGludGVyY2VwdElwcztcbiAgICBpbnRlcmNlcHRQb3J0cztcbiAgICBpbnRlcmNlcHRQcm90b2NvbHM7XG4gICAgZm9yd2FyZGVkSG9zdDtcbiAgICBob3N0TmFtZXM7XG4gICAgZm9yd2FyZGVkUG9ydDtcbiAgICBob3N0UG9ydHM7XG4gICAgZm9yd2FyZGVkUHJvdG9jb2w7XG4gICAgaG9zdFByb3RvY29scztcbiAgICBzdGF0dXM7XG4gICAgdHlwZTtcbiAgICB1c2FnZTtcbiAgICBpbnRlcmNlcHQgPSBbXTtcbiAgICBjb25maWdBZGRyZXNzO1xuICAgIGNvbmZpZ1BvcnRzO1xufVxuXG5leHBvcnQgY2xhc3MgU2VydmljZURhdGEge1xuICAgIGlkO1xuICAgIG5hbWU7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIElkZW50aXR5U2VydmljZVBhdGhIZWxwZXIge1xuICAgIHBvc3lfZm9yX2dyb3VwMyA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICApIHt9XG5cbiAgICBwdWJsaWMgZ2V0RW5kcG9pbnRHcmFwaE9iaihcbiAgICAgICAgZW5kcG9pbnQsXG4gICAgICAgIGJpbmRJZG5ldGl0aWVzLFxuICAgICAgICBlZGdlcm91dGVycyxcbiAgICAgICAgc2VsZWN0ZWRTZXJ2aWNlT2IsXG4gICAgICAgIHNlcnZpY2VDb25maWdzLFxuICAgICAgICBmaWx0ZXJUZXh0ID0gJydcbiAgICApIHtcbiAgICAgICAgbGV0IGVuZHBvaW50Tm9kZU9iID0gbnVsbDtcbiAgICAgICAgY29uc3Qgcm9vdE9iID0gbmV3IFJvb3RKc29uKCk7XG4gICAgICAgIGNvbnN0IGJpbmROb2RlID0gIGJpbmRJZG5ldGl0aWVzLmZpbmQoIChuZCkgPT4gIG5kLmlkID09PSBlbmRwb2ludC5pZCAgKTtcbiAgICAgICBpZiAoIWJpbmROb2RlKSB7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IgPSBjcmVhdGVFbmRwb2ludChlbmRwb2ludCk7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IuZ3JvdXAgPSAnMSc7XG4gICAgICAgICAgZW5kcG9pbnROb2RlT2IucG9zeCA9IDUwO1xuICAgICAgICAgIGVuZHBvaW50Tm9kZU9iLnBvc3kgPSAyMDA7XG4gICAgICAgICAgcm9vdE9iLmFkZE5vZGUoZW5kcG9pbnROb2RlT2IpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwdWJsaWNSb3V0ZXJOb2RlcyA9IFtdO1xuICAgICAgICBsZXQgcG9zeSA9IDA7XG4gICAgICAgIF8uaXNBcnJheShlZGdlcm91dGVycykgJiYgZWRnZXJvdXRlcnMuZm9yRWFjaCgobmQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYiA9IGNyZWF0ZUVSTm9kZShuZCk7XG4gICAgICAgICAgICBub2RlT2IuZ3JvdXAgPSAnMmEnO1xuICAgICAgICAgICAgbm9kZU9iLnBvc3ggPSAyNTA7XG4gICAgICAgICAgICBwb3N5ID0gcG9zeSArIDEwMDtcbiAgICAgICAgICAgIG5vZGVPYi5wb3N5ID0gcG9zeTtcbiAgICAgICAgICAgIHB1YmxpY1JvdXRlck5vZGVzLnB1c2gobm9kZU9iKTtcbiAgICAgICAgICAgIHJvb3RPYi5hZGROb2RlKG5vZGVPYik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBwdWJsaWNSb3V0ZXJOb2Rlc0ZvckVuZHBvaW50VHVubmVsZXJzID0gW107XG5cbiAgICAgICAgY29uc3QgcG9zeF9mb3JfZ3JvdXAzID0gNTUwO1xuICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDA7XG4gICAgICAgIGxldCBncm91cDNJZHMgPSBbXTtcbiAgICAgICAgbGV0IHBvc3lfZm9yX2dyb3VwNCA9IDE1MDtcbiAgICAgICAgY29uc3QgZ3JvdXA0Tm9kZXMgPSBbXTtcbiAgICAgICAgY29uc3Qgc2VydmljZUlQUG9ydHMgPSBbXTtcbiAgICAgICAgICAgY29uc3Qgc3JOb2RlID0gbmV3IFNlcnZpY2VIb3N0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuaWQgPSBzZWxlY3RlZFNlcnZpY2VPYi5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLm5hbWUgPSBzZWxlY3RlZFNlcnZpY2VPYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuaW50ZXJjZXB0ID0gc2VydmljZUNvbmZpZ0FsaWFzKHNlcnZpY2VDb25maWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgc3JOb2RlLnR5cGUgPSAnQ29uZmlnIFNlcnZpY2UnO1xuICAgICAgICAgICAgICAgICAgICAgICBzck5vZGUuZ3JvdXAgPSAnNCc7XG4gICAgICAgICAgICAgICAgICAgICAgIHNyTm9kZS5zdGF0dXMgPSAnMSc7XG4gICAgICAgICAgICAgICAgICAgICAgIGdyb3VwNE5vZGVzLnB1c2goc3JOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgcm9vdE9iLmFkZE5vZGUoc3JOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgXy5pc0FycmF5KGJpbmRJZG5ldGl0aWVzKSAmJiBiaW5kSWRuZXRpdGllcy5mb3JFYWNoKChlUG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAzSWRzLmluZGV4T2YoZVBvaW50LmlkKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDNJZHMucHVzaChlUG9pbnQuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSBsaW5rcyBiZXR3ZWVuIG5vZGVzXG5cbiAgICAgICAgLy8gaW4gZ3JvdXAzLCAgcmVtb3ZlICByb3V0ZXJzL2VwICB0aGF0IGV4aXN0IGluIGdyb3VwMlxuICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IDE2NTtcbiAgICAgICAgbGV0IGdycDNZaW5jcmVtZW50ID0gMTAwO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwM05vZGVzID0gW107XG4gICAgICAgIGxldCBjb3VudGdycDMgPSAwO1xuICAgICAgICBncm91cDNJZHMuZmluZCgobmlkKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbGV0J3MgY2hlY2sgaWYgdGhlIHNlcnZpY2UgaG9zdGVkIGlzIGFuIEVuZHBvaW50XG4gICAgICAgICAgICAgICBsZXQgZ3JwM05vZGUgPSBmaW5kRW5kcG9pbnQobmlkLCBiaW5kSWRuZXRpdGllcyk7XG4gICAgICAgICAgICAgICAgICBpZihncnAzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBncnAzTm9kZS5ncm91cCA9ICczJztcbiAgICAgICAgICAgICAgICAgICAgZ3JwM05vZGUucG9zeCA9IHBvc3hfZm9yX2dyb3VwMztcbiAgICAgICAgICAgICAgICAgICAgZ3JwM05vZGUucG9zeSA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzICsgMTI1O1xuICAgICAgICAgICAgICAgICAgICBncm91cDNOb2Rlcy5wdXNoKGdycDNOb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY291bnRncnAzKys7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RPYi5hZGROb2RlKGdycDNOb2RlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ3JwM1lpbmNyZW1lbnQgPSBjb3VudGdycDMgPiAyID8gNzUgOiAxMDA7XG4gICAgICAgIGlmIChjb3VudGdycDMgPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gMTYwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvdW50Z3JwMyA9PT0gMikge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSAxMjA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRncnAzID49IDUpIHtcbiAgICAgICAgICAgIHRoaXMucG9zeV9mb3JfZ3JvdXAzID0gNTA7XG4gICAgICAgICAgICBncnAzWWluY3JlbWVudCA9IDc1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3N5X2Zvcl9ncm91cDMgPSA3MztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChncm91cDNOb2RlcylcbiAgICAgICAgICAgIGdyb3VwM05vZGVzLmZpbmQoKG5vZGUzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUzLmdyb3VwID09PSAnMycpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZTMucG9zeSA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3lfZm9yX2dyb3VwMyA9IHRoaXMucG9zeV9mb3JfZ3JvdXAzICsgZ3JwM1lpbmNyZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGdyb3VwNE5vZGVzICYmIGdyb3VwNE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcG9zeV9mb3JfZ3JvdXA0ID0gMjAwO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXA0Tm9kZXMuZmluZCgobmQ0KSA9PiB7XG4gICAgICAgICAgIC8vIG5kNC5wb3N4ID0gZ3JvdXAzTm9kZXMgICYmIGdyb3VwM05vZGVzLmxlbmd0aCA+IDAgICYmICFncm91cDNOb2Rlc1swXS50eXBlLmluY2x1ZGVzKFwiUHVibGljIEhvc3RlZFwiKSA/IHBvc3hfZm9yX2dyb3VwMyArIDE3NSA6IHBvc3hfZm9yX2dyb3VwMztcbiAgICAgICAgICAgIG5kNC5wb3N4ID0gcG9zeF9mb3JfZ3JvdXAzICsgMTc1O1xuICAgICAgICAgICAgbmQ0LnBvc3kgPSBwb3N5X2Zvcl9ncm91cDQ7XG4gICAgICAgICAgICBwb3N5X2Zvcl9ncm91cDQgPSBwb3N5X2Zvcl9ncm91cDQgKyAxMDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBjb3VudFB1YmxpY05vZGVzID0gMDtcbiAgICAgICAgcm9vdE9iLm5vZGVzLmZpbmQoKHBOb2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAocE5vZGUuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICAgICAgICAgIGNvdW50UHVibGljTm9kZXMgPSBjb3VudFB1YmxpY05vZGVzICsgMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHVibGljUm91dGVyTm9kZXMgPSBbXTtcbiAgICAgICAgbGV0IHBvc3lfZ3JvdXAyID0gMTAwO1xuICAgICAgICBsZXQgeUluY3JlbWVudCA9IDA7XG4gICAgICAgIGlmIChjb3VudFB1YmxpY05vZGVzID09PSAxKSB7XG4gICAgICAgICAgICBwb3N5X2dyb3VwMiA9IDIwMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb3VudFB1YmxpY05vZGVzID49IDIgJiYgY291bnRQdWJsaWNOb2RlcyA8IDUpIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gNjA7XG4gICAgICAgICAgICB5SW5jcmVtZW50ID0gODA7XG4gICAgICAgIH0gZWxzZSBpZiAoY291bnRQdWJsaWNOb2RlcyA+PSA1ICYmIGNvdW50UHVibGljTm9kZXMgPCAxMCkge1xuICAgICAgICAgICAgcG9zeV9ncm91cDIgPSA0MDtcbiAgICAgICAgICAgIHlJbmNyZW1lbnQgPSA1MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvc3lfZ3JvdXAyID0gNDA7XG4gICAgICAgICAgICB5SW5jcmVtZW50ID0gNDA7XG4gICAgICAgIH1cblxuICAgICAgICByb290T2Iubm9kZXMuZmluZCgocHVibGljTm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHB1YmxpY05vZGUuZ3JvdXAuaW5jbHVkZXMoJzInKSkge1xuICAgICAgICAgICAgICAgIHB1YmxpY05vZGUucG9zeCA9IDI3NTtcbiAgICAgICAgICAgICAgICBwdWJsaWNOb2RlLnBvc3kgPSBwb3N5X2dyb3VwMjtcbiAgICAgICAgICAgICAgICBwb3N5X2dyb3VwMiA9IHBvc3lfZ3JvdXAyICsgeUluY3JlbWVudDtcbiAgICAgICAgICAgICAgICBwdWJsaWNSb3V0ZXJOb2Rlcy5wdXNoKHB1YmxpY05vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChwdWJsaWNOb2RlLmdyb3VwID09PSAnMmInKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwM05vZGVzLnB1c2gocHVibGljTm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCByb290T2Iubm9kZXMubGVuZ3RoOyBrMSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZCA9IHJvb3RPYi5ub2Rlc1trMV07XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnROb2RlT2IgIT09bnVsbCAmJiAobmQuZ3JvdXAgPT09ICcyYScgfHwgbmQuZ3JvdXAgPT09ICcyYWInIHx8IG5kLmdyb3VwID09PSAnMmFjJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2UgPSBlbmRwb2ludE5vZGVPYi5pZDtcbiAgICAgICAgICAgICAgICBsbmsuc291cmNlTmFtZSA9IGVuZHBvaW50Tm9kZU9iLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLnRhcmdldCA9IG5kLmlkO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXROYW1lID0gbmQubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0RW5kcG9pbnRUb1JvdXRlckxpbmtTdGF0ZShlbmRwb2ludE5vZGVPYiwgbmQpO1xuICAgICAgICAgICAgICAgIGxuay53ZWlnaHQgPSBnZXRXZWlnaHQobG5rLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgcm9vdE9iLmFkZExpbmsobG5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCByb290T2Iubm9kZXMubGVuZ3RoOyBrMSsrKSB7XG4gICAgICAgICAgICBjb25zdCBuZDEgPSByb290T2Iubm9kZXNbazFdO1xuXG4gICAgICAgICAgICBpZiAobmQxLmdyb3VwLmluY2x1ZGVzKCcyJykpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrMiA9IDA7IGsyIDwgZ3JvdXAzTm9kZXMubGVuZ3RoOyBrMisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5kMiA9IGdyb3VwM05vZGVzW2syXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5kMi5ncm91cCA9PT0gJzJiJyB8fCBuZDIuZ3JvdXAgPT09ICcyYWInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyBsaW5rIG5vdCByZXF1aXJlZC5cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgICAgICBsbmsuc291cmNlID0gbmQxLmlkO1xuICAgICAgICAgICAgICAgICAgICBsbmsuc291cmNlTmFtZSA9IG5kMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBsbmsudGFyZ2V0ID0gbmQyLmlkO1xuICAgICAgICAgICAgICAgICAgICBsbmsudGFyZ2V0TmFtZSA9IG5kMi5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZDEudHlwZS5pbmNsdWRlcygnUm91dGVyJykgJiYgbmQyLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDEuc3RhdHVzID09PSAnUFJPVklTSU9ORUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQxLm9ubGluZSA9PT0gJ1llcycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZDIuc3RhdHVzID09PSAnUFJPVklTSU9ORUQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmQyLm9ubGluZSA9PT0gJ1llcydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSBnZXRFbmRwb2ludFRvUm91dGVyTGlua1N0YXRlKG5kMiwgbmQxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGswID0gMDsgazAgPCBncm91cDROb2Rlcy5sZW5ndGg7IGswKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGsxID0gMDsgazEgPCBncm91cDNOb2Rlcy5sZW5ndGg7IGsxKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsbmsgPSBuZXcgTGluaygpO1xuICAgICAgICAgICAgICAgIGxuay5zb3VyY2UgPSBncm91cDNOb2Rlc1trMV0uaWQ7XG4gICAgICAgICAgICAgICAgbG5rLnNvdXJjZU5hbWUgPSBncm91cDNOb2Rlc1trMV0ubmFtZTtcbiAgICAgICAgICAgICAgICBsbmsudGFyZ2V0ID0gZ3JvdXA0Tm9kZXNbazBdLmlkO1xuICAgICAgICAgICAgICAgIGxuay50YXJnZXROYW1lID0gZ3JvdXA0Tm9kZXNbazBdLm5hbWU7XG4gICAgICAgICAgICAgICAgbG5rLndlaWdodCA9IDE7XG4gICAgICAgICAgICAgICAgY29uc3QgZm91bmROZCA9IHJvb3RPYi5ub2Rlcy5maW5kKCBmdW5jdGlvbiAocm5kKSB7XG4gICAgICAgICAgICAgICAgICAgLy8gaWYgKHJuZC5pZCA9PT0gZ3JvdXAzTm9kZXNbazFdLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm5kLmlkID09PSBncm91cDNOb2Rlc1trMV0uaWQ7XG4gICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZE5kLnR5cGUuaW5jbHVkZXMoJ1JvdXRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxuay5zdGF0dXMgPSBmb3VuZE5kLnN0YXR1cyA9PT0gJ1BST1ZJU0lPTkVEJyAmJiBmb3VuZE5kLm9ubGluZSA9PT0gJ1llcycgPyAxIDogMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsbmsuc3RhdHVzID0gZ2V0U2VydmljZVRvRW5kcG9pbnRMaW5rU3RhdGUoZ3JvdXAzTm9kZXNbazFdLCBncm91cDROb2Rlc1trMF0pO1xuICAgICAgICAgICAgICAgICAgICBsbmsud2VpZ2h0ID0gZ2V0V2VpZ2h0KGxuay5zdGF0dXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByb290T2IuYWRkTGluayhsbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gc2VydmljZUNvbmZpZ0FsaWFzKGNvbmZpZ3MpIHtcbiAgICAgICAgICBsZXQgaW50ZXJjZXB0ID0gW107XG4gICAgICAgICAgXy5pc0FycmF5KGNvbmZpZ3MpICYmIGNvbmZpZ3MuZm9yRWFjaCggKGNvbmYpID0+IHtcbiAgICAgICAgICAgICBsZXQgYWRkcmVzc2VzID0gJyc7XG4gICAgICAgICAgICAgbGV0IHBvcnRzID0gJyc7XG4gICAgICAgICAgICBpZiAoY29uZi5kYXRhLmFkZHJlc3Nlcykge1xuICAgICAgICAgICAgICAgYWRkcmVzc2VzID0gY29uZi5kYXRhLmFkZHJlc3Nlcy50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGFkZHJlc3NlcyA9IGNvbmYuZGF0YS5hZGRyZXNzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGNvbmYuZGF0YS5wb3J0UmFuZ2VzKSApIHtcbiAgICAgICAgICAgICAgICBjb25mLmRhdGEucG9ydFJhbmdlcy5mb3JFYWNoKCAocG9ydHNKc29uKSA9PiB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwb3J0c0pzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcG9ydHMgPSBwb3J0cyArIGtleSArJzonK3BvcnRzSnNvbltrZXldICsnICcgO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgIHBvcnRzID0gcG9ydHMgKyAnOyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcnRzID0gIGNvbmYuZGF0YS5wb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW50ZXJjZXB0LnB1c2goYWRkcmVzc2VzKTtcbiAgICAgICAgICAgIGludGVyY2VwdC5wdXNoKHBvcnRzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gaW50ZXJjZXB0O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEVuZHBvaW50KGVuZHBvaW50SWQsIGVuZHBvaW50cykge1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVuZHBvaW50SWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVQb2ludCA9IGVuZHBvaW50cy5maW5kKCBmdW5jdGlvbiAoZXIpIHtcbiAgICAgICAgICAgICAgICAgcmV0dXJuIGVyLmlkID09PSBlbmRwb2ludElkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBub2RlID0gY3JlYXRlRW5kcG9pbnQoZVBvaW50KTtcbiAgICAgICAgICAgICAgICBub2RlLnR5cGUgPSAnSG9zdGVkIElkZW50aXR5JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IC8vIGVuZCBvZiBmaW5kRW5kcG9pbnRcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbmRwb2ludChlUG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgbm9kZS5pZCA9IGVQb2ludC5pZDtcbiAgICAgICAgICAgIG5vZGUubmFtZSA9IGVQb2ludC5uYW1lO1xuICAgICAgICAgICAgbm9kZS50eXBlID0gJ0lkZW50aXR5JztcbiAgICAgICAgICAgIG5vZGUuYXBpU2Vzc2lvbiA9IGVQb2ludC5oYXNBcGlTZXNzaW9uID09PSBmYWxzZSA/ICdObycgOiAnWWVzJztcbiAgICAgICAgICAgIG5vZGUucm91dGVyQ29ubmVjdGlvbiA9IGVQb2ludC5oYXNFZGdlUm91dGVyQ29ubmVjdGlvbiA9PT0gZmFsc2UgPyAnTm8nIDogJ1llcyc7XG4gICAgICAgICAgICBub2RlLm9zID0gZVBvaW50LmVudkluZm8/IGVQb2ludC5lbnZJbmZvLm9zIDogJyc7XG4gICAgICAgICAgICBub2RlLm1mYUVuYWJsZWQgPSBlUG9pbnQuaXNNZmFFbmFibGVkO1xuICAgICAgICAgICAgbm9kZS5zdGF0dXMgPSBlUG9pbnQuZW52SW5mbyAmJiBlUG9pbnQuZW52SW5mby5vcyAhPT0gbnVsbCA/ICdSZWdpc3RlcmVkJyA6ICdVbi1SZWdpc3RlcmVkJztcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gY3JlYXRlRVJOb2RlKGVyb3V0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVPYiA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICBub2RlT2IuaWQgPSBlcm91dGVyLmlkO1xuICAgICAgICAgICAgbm9kZU9iLm5hbWUgPSBlcm91dGVyLm5hbWU7XG4gICAgICAgICAgICBub2RlT2Iuc3RhdHVzID0gZXJvdXRlci5pc1ZlcmlmaWVkID09PSB0cnVlPyAnUmVnaXN0ZXJlZCc6J1VuLVJlZ2lzdGVyZWQnO1xuICAgICAgICAgICAgbm9kZU9iLm9ubGluZSA9IGVyb3V0ZXIuaXNPbmxpbmUgPT09IGZhbHNlID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgbm9kZU9iLnR1bm5lbGVyRW5hYmxlZCA9IGVyb3V0ZXIuaXNUdW5uZWxlckVuYWJsZWQgPT09IGZhbHNlID8gJ05vJyA6ICdZZXMnO1xuICAgICAgICAgICAgbm9kZU9iLnR5cGUgPSAnRWRnZVJvdXRlcic7XG4gICAgICAgICAgICByZXR1cm4gbm9kZU9iO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZmluZEVkZ2VSb3V0ZXJGb3JJZChyb3V0ZXJJZCwgZWRnZXJvdXRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyb3V0ZXIgPSBlZGdlcm91dGVycy5maW5kKChlcikgPT4ge1xuICAgICAgICAgICAgICAvLyAgaWYgKGVyLmlkID09PSByb3V0ZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXIuaWQgPT09IHJvdXRlcklkO1xuICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChlcm91dGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUVSTm9kZShlcm91dGVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gZW5kIG9mIGZpbmRFZGdlUm91dGVyRm9ySWRcblxuICAgICAgICBmdW5jdGlvbiBnZXRFbmRwb2ludFRvUm91dGVyTGlua1N0YXRlKGVuZHBvaW50Tm9kZSwgcm91dGVyTm9kZSkge1xuICAgICAgICAgICAgbGV0IGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICBpZiAocm91dGVyTm9kZS5zdGF0dXMgPT09ICdFUlJPUicpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuc3RhdHVzID09PSAnVW4tUmVnaXN0ZXJlZCcpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAtMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kcG9pbnROb2RlLmFwaVNlc3Npb24gPT09ICdObycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUucm91dGVyQ29ubmVjdGlvbiA9PT0gJ05vJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3V0ZXJOb2RlLm9ubGluZSA9PT0gJ1llcycgJiYgZW5kcG9pbnROb2RlLnJvdXRlckNvbm5lY3Rpb24gPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlua3N0YXRlID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbGlua3N0YXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gZ2V0U2VydmljZVRvRW5kcG9pbnRMaW5rU3RhdGUoZW5kcG9pbnROb2RlLCBzZXJ2aWNlTm9kZSkge1xuICAgICAgICAgICAgbGV0IGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICBpZiAoZW5kcG9pbnROb2RlLnN0YXR1cyA9PT0gJ1VuLVJlZ2lzdGVyZWQnIHx8IHNlcnZpY2VOb2RlLmludGVyY2VwdC5pbmNsdWRlcygnTm8nKSkge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwb2ludE5vZGUuYXBpU2Vzc2lvbiA9PT0gJ05vJykge1xuICAgICAgICAgICAgICAgIGxpbmtzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZHBvaW50Tm9kZS5zdGF0dXMgPT09ICdSZWdpc3RlcmVkJyAmJiBlbmRwb2ludE5vZGUuYXBpU2Vzc2lvbiA9PT0gJ1llcycpIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaW5rc3RhdGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGxpbmtzdGF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFdlaWdodChsaW5rU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5rU3RhdGUgPT09IC0xID8gNSA6IDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvb3RPYjtcbiAgICB9IC8vIGVuZCBvZiBORVcgRnVuY3Rpb25cblxufVxuXG4gY2xhc3MgUm9vdEpzb24ge1xuICAgICAgICBub2RlczphbnkgPSBbXTtcbiAgICAgICAgbGlua3M6YW55ID0gW107XG4gICAgICAgIGFkZE5vZGUgKG5ld09iamVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kT2JqID0gdGhpcy5ub2Rlcy5maW5kKCBmdW5jdGlvbiAobmQpIHtcbiAgICAgICAgICAgICAgICAgICAvLyBpZiAobmQuaWQgPT09IG5ld09iamVjdC5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAvLyBuZCA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZC5pZCA9PT0gbmV3T2JqZWN0LmlkO1xuICAgICAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZE9iaikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLnB1c2gobmV3T2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlcGxhY2VOb2RlIChuZXdPYmplY3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5keCA9IHRoaXMubm9kZXMuZmluZEluZGV4KG5kID0+IG5kLmlkID09PSBuZXdPYmplY3QuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgdGhpcy5ub2Rlc1tpbmR4XSA9IG5ld09iamVjdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgYWRkTGluayAobmV3T2JqZWN0KSB7XG4gICAgICAgICAgIHRoaXMubGlua3MucHVzaChuZXdPYmplY3QpO1xuICAgICAgICB9O1xuXG4gfVxuIl19
@@ -0,0 +1,51 @@
1
+ import { ZacWrapperService } from "./zac-wrapper.service";
2
+ import { Inject, Injectable } from "@angular/core";
3
+ import { ZITI_DOMAIN_CONTROLLER } from "../../services/ziti-domain-controller.service";
4
+ import { ZITI_URLS } from "../../ziti-console.constants";
5
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
6
+ import { get } from "lodash";
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/common/http";
9
+ import * as i2 from "@angular/router";
10
+ import * as i3 from "../messaging/growler.service";
11
+ import * as i4 from "../messaging/logger.service";
12
+ import * as i5 from "../../services/validation.service";
13
+ import * as i6 from "../../services/settings.service";
14
+ class NodeWrapperService extends ZacWrapperService {
15
+ constructor(zitiDomainController, URLS, settingsService, http, router, growlerService, loggerService, validationService) {
16
+ super(zitiDomainController, URLS, settingsService, http, router, growlerService, loggerService, validationService);
17
+ this.zitiDomainController = zitiDomainController;
18
+ this.URLS = URLS;
19
+ this.settingsService = settingsService;
20
+ this.http = http;
21
+ this.router = router;
22
+ this.growlerService = growlerService;
23
+ this.loggerService = loggerService;
24
+ this.validationService = validationService;
25
+ }
26
+ initZac() {
27
+ if (this.zacInit) {
28
+ return;
29
+ }
30
+ const appInit = get(window, 'app.init');
31
+ this.initZacListeners();
32
+ this.zacInit = true;
33
+ }
34
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeWrapperService, deps: [{ token: ZITI_DOMAIN_CONTROLLER }, { token: ZITI_URLS }, { token: SETTINGS_SERVICE }, { token: i1.HttpClient }, { token: i2.Router }, { token: i3.GrowlerService }, { token: i4.LoggerService }, { token: i5.ValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
35
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeWrapperService, providedIn: 'root' }); }
36
+ }
37
+ export { NodeWrapperService };
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NodeWrapperService, decorators: [{
39
+ type: Injectable,
40
+ args: [{ providedIn: 'root' }]
41
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
42
+ type: Inject,
43
+ args: [ZITI_DOMAIN_CONTROLLER]
44
+ }] }, { type: undefined, decorators: [{
45
+ type: Inject,
46
+ args: [ZITI_URLS]
47
+ }] }, { type: i6.SettingsService, decorators: [{
48
+ type: Inject,
49
+ args: [SETTINGS_SERVICE]
50
+ }] }, { type: i1.HttpClient }, { type: i2.Router }, { type: i3.GrowlerService }, { type: i4.LoggerService }, { type: i5.ValidationService }]; } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS13cmFwcGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvd3JhcHBlcnMvbm9kZS13cmFwcGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFhLE1BQU0sdUJBQXVCLENBQUM7QUFDcEUsT0FBTyxFQUFlLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHL0QsT0FBTyxFQUFDLHNCQUFzQixFQUE4QixNQUFNLCtDQUErQyxDQUFDO0FBQ2xILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFbEYsT0FBTyxFQUFDLEdBQUcsRUFBZSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7QUFNekMsTUFDYSxrQkFBbUIsU0FBUSxpQkFBaUI7SUFFckQsWUFDNkMsb0JBQWlELEVBQzlELElBQVEsRUFDRCxlQUFnQyxFQUMxRCxJQUFnQixFQUNoQixNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsaUJBQW9DO1FBRTdDLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBVDFFLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBNkI7UUFDOUQsU0FBSSxHQUFKLElBQUksQ0FBSTtRQUNELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUMxRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUdqRCxDQUFDO0lBRVEsT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLE9BQU87U0FDVjtRQUNELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQzsrR0F0QlEsa0JBQWtCLGtCQUdmLHNCQUFzQixhQUN0QixTQUFTLGFBQ1QsZ0JBQWdCO21IQUxuQixrQkFBa0IsY0FETixNQUFNOztTQUNsQixrQkFBa0I7NEZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQUl2QixNQUFNOzJCQUFDLHNCQUFzQjs7MEJBQzdCLE1BQU07MkJBQUMsU0FBUzs7MEJBQ2hCLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtaYWNXcmFwcGVyU2VydmljZSwgQ09NUE9ORU5UU30gZnJvbSBcIi4vemFjLXdyYXBwZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtaSVRJX0RPTUFJTl9DT05UUk9MTEVSLCBaaXRpRG9tYWluQ29udHJvbGxlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy96aXRpLWRvbWFpbi1jb250cm9sbGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7WklUSV9VUkxTfSBmcm9tIFwiLi4vLi4veml0aS1jb25zb2xlLmNvbnN0YW50c1wiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2VcIjtcblxuaW1wb3J0IHtnZXQsIHNldCwgaXNFbXB0eX0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uL21lc3NhZ2luZy9sb2dnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcblxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXG5leHBvcnQgY2xhc3MgTm9kZVdyYXBwZXJTZXJ2aWNlIGV4dGVuZHMgWmFjV3JhcHBlclNlcnZpY2Uge1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoWklUSV9ET01BSU5fQ09OVFJPTExFUikgb3ZlcnJpZGUgeml0aURvbWFpbkNvbnRyb2xsZXI6IFppdGlEb21haW5Db250cm9sbGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX1VSTFMpIG92ZXJyaWRlIFVSTFM6YW55LFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBvdmVycmlkZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgb3ZlcnJpZGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBvdmVycmlkZSBsb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICBvdmVycmlkZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoeml0aURvbWFpbkNvbnRyb2xsZXIsIFVSTFMsIHNldHRpbmdzU2VydmljZSwgaHR0cCwgcm91dGVyLCBncm93bGVyU2VydmljZSwgbG9nZ2VyU2VydmljZSwgdmFsaWRhdGlvblNlcnZpY2UpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGluaXRaYWMoKSB7XG4gICAgICAgIGlmICh0aGlzLnphY0luaXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcHBJbml0ID0gZ2V0KHdpbmRvdywgJ2FwcC5pbml0Jyk7XG4gICAgICAgIHRoaXMuaW5pdFphY0xpc3RlbmVycygpO1xuICAgICAgICB0aGlzLnphY0luaXQgPSB0cnVlO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,92 @@
1
+ import { EventEmitter, Inject, Injectable, InjectionToken } from "@angular/core";
2
+ import { ZITI_DOMAIN_CONTROLLER } from "../../services/ziti-domain-controller.service";
3
+ import { ZITI_URLS } from "../../ziti-console.constants";
4
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
5
+ import { Subscription } from "rxjs";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "@angular/router";
9
+ import * as i3 from "../messaging/growler.service";
10
+ import * as i4 from "../messaging/logger.service";
11
+ import * as i5 from "../../services/validation.service";
12
+ import * as i6 from "../../services/settings.service";
13
+ export const ZAC_WRAPPER_SERVICE = new InjectionToken('ZAC_WRAPPER_SERVICE');
14
+ // @ts-ignore
15
+ const { $, tags } = window;
16
+ class ZacWrapperServiceClass {
17
+ constructor(zitiDomainController, URLS, settingsService, http, router, growlerService, loggerService, validationService) {
18
+ this.zitiDomainController = zitiDomainController;
19
+ this.URLS = URLS;
20
+ this.settingsService = settingsService;
21
+ this.http = http;
22
+ this.router = router;
23
+ this.growlerService = growlerService;
24
+ this.loggerService = loggerService;
25
+ this.validationService = validationService;
26
+ this.zitiUpdated = new EventEmitter();
27
+ this.pageChanged = new EventEmitter();
28
+ this.subscription = new Subscription();
29
+ this.page = '';
30
+ this.scriptsAdded = false;
31
+ this.zacInit = false;
32
+ }
33
+ initZACPersonalSettings() {
34
+ if (!this.settingsService?.supportedFeatures?.tags) {
35
+ localStorage.setItem("hideTags", "yes");
36
+ }
37
+ if (localStorage.getItem("primaryColor") != null) {
38
+ document.documentElement.style.setProperty("--primary", localStorage.getItem("primaryColor"));
39
+ }
40
+ if (localStorage.getItem("secondaryColor") != null) {
41
+ document.documentElement.style.setProperty("--secondary", localStorage.getItem("secondaryColor"));
42
+ }
43
+ var mode = localStorage.getItem("Transitions");
44
+ if (mode == "off") {
45
+ document.documentElement.style.setProperty("--transition", "0s");
46
+ }
47
+ else {
48
+ document.documentElement.style.setProperty("--transition", "0.5s");
49
+ }
50
+ $(document).ready((e) => {
51
+ $(".personal").show();
52
+ if (!this.settingsService?.supportedFeatures?.tags) {
53
+ $("#HideTags").parent().hide();
54
+ $('<div></div>').insertBefore($("#HideTags").parent().siblings()[3]);
55
+ }
56
+ });
57
+ }
58
+ resetZacEvents() {
59
+ $("input").off("keyup");
60
+ $("select").off("keyup");
61
+ $(".toggle").off("click");
62
+ $("body").off("keyup");
63
+ $("#SServiceName").off('keyup');
64
+ $("#SServiceHost").off('keyup');
65
+ $("#CreateButton").off('click');
66
+ $("#CreateIdButton").off('click');
67
+ $("#IdentityDownload").off('click');
68
+ $("#DoneIdButton").off('click');
69
+ $("#DoneServiceButton").off('click');
70
+ $("#InlineAddIdentityButton").off('click');
71
+ $("#InlineAddServiceButton").off('click');
72
+ $("#AlertButton").off('click');
73
+ tags.tagData = [];
74
+ }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZacWrapperServiceClass, deps: [{ token: ZITI_DOMAIN_CONTROLLER }, { token: ZITI_URLS }, { token: SETTINGS_SERVICE }, { token: i1.HttpClient }, { token: i2.Router }, { token: i3.GrowlerService }, { token: i4.LoggerService }, { token: i5.ValidationService }], target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZacWrapperServiceClass, providedIn: 'root' }); }
77
+ }
78
+ export { ZacWrapperServiceClass };
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZacWrapperServiceClass, decorators: [{
80
+ type: Injectable,
81
+ args: [{ providedIn: 'root' }]
82
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
83
+ type: Inject,
84
+ args: [ZITI_DOMAIN_CONTROLLER]
85
+ }] }, { type: undefined, decorators: [{
86
+ type: Inject,
87
+ args: [ZITI_URLS]
88
+ }] }, { type: i6.SettingsService, decorators: [{
89
+ type: Inject,
90
+ args: [SETTINGS_SERVICE]
91
+ }] }, { type: i1.HttpClient }, { type: i2.Router }, { type: i3.GrowlerService }, { type: i4.LoggerService }, { type: i5.ValidationService }]; } });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFjLXdyYXBwZXItc2VydmljZS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy93cmFwcGVycy96YWMtd3JhcHBlci1zZXJ2aWNlLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxFQUFDLHNCQUFzQixFQUE4QixNQUFNLCtDQUErQyxDQUFDO0FBQ2xILE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7QUFFbEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFLbEMsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxjQUFjLENBQXlCLHFCQUFxQixDQUFDLENBQUM7QUFFckcsYUFBYTtBQUNiLE1BQU0sRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFDLEdBQUcsTUFBTSxDQUFDO0FBRXpCLE1BQ3NCLHNCQUFzQjtJQVV4QyxZQUM4QyxvQkFBaUQsRUFDOUQsSUFBUyxFQUNGLGVBQWdDLEVBQzFELElBQWdCLEVBQ2hCLE1BQWMsRUFDZCxjQUE4QixFQUM5QixhQUE0QixFQUM1QixpQkFBb0M7UUFQSix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQTZCO1FBQzlELFNBQUksR0FBSixJQUFJLENBQUs7UUFDRixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDMUQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFmbEQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUN2QyxpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELFNBQUksR0FBRyxFQUFFLENBQUM7UUFDVixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO0lBV2IsQ0FBQztJQU9KLHVCQUF1QjtRQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUU7WUFDaEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUUsSUFBSSxFQUFFO1lBQzVDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ2pHO1FBQ0QsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUUsSUFBSSxFQUFFO1lBQzlDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDckc7UUFDRCxJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLElBQUksSUFBSSxJQUFFLEtBQUssRUFBRTtZQUNiLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEU7YUFBTTtZQUNILFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDdEU7UUFDRCxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDcEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLElBQUksRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMvQixDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3hFO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztRQUNWLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQzsrR0FuRWlCLHNCQUFzQixrQkFXNUIsc0JBQXNCLGFBQ3RCLFNBQVMsYUFDVCxnQkFBZ0I7bUhBYlYsc0JBQXNCLGNBRG5CLE1BQU07O1NBQ1Qsc0JBQXNCOzRGQUF0QixzQkFBc0I7a0JBRDNDLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDOzswQkFZdkIsTUFBTTsyQkFBQyxzQkFBc0I7OzBCQUM3QixNQUFNOzJCQUFDLFNBQVM7OzBCQUNoQixNQUFNOzJCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7WklUSV9ET01BSU5fQ09OVFJPTExFUiwgWml0aURvbWFpbkNvbnRyb2xsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kb21haW4tY29udHJvbGxlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1pJVElfVVJMU30gZnJvbSBcIi4uLy4uL3ppdGktY29uc29sZS5jb25zdGFudHNcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSBcIi4uL21lc3NhZ2luZy9sb2dnZXIuc2VydmljZVwiO1xuaW1wb3J0IHtWYWxpZGF0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZVwiO1xuXG5leHBvcnQgY29uc3QgWkFDX1dSQVBQRVJfU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxaYWNXcmFwcGVyU2VydmljZUNsYXNzPignWkFDX1dSQVBQRVJfU0VSVklDRScpO1xuXG4vLyBAdHMtaWdub3JlXG5jb25zdCB7JCwgdGFnc30gPSB3aW5kb3c7XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFphY1dyYXBwZXJTZXJ2aWNlQ2xhc3Mge1xuXG4gICAgcm9vdFJlc291cmNlQWRkcmVzczogc3RyaW5nO1xuICAgIHppdGlVcGRhdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIHBhZ2VDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHBhZ2UgPSAnJztcbiAgICBzY3JpcHRzQWRkZWQgPSBmYWxzZTtcbiAgICB6YWNJbml0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChaSVRJX0RPTUFJTl9DT05UUk9MTEVSKSBwcm90ZWN0ZWQgeml0aURvbWFpbkNvbnRyb2xsZXI6IFppdGlEb21haW5Db250cm9sbGVyU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX1VSTFMpIHByb3RlY3RlZCBVUkxTOiBhbnksXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJvdGVjdGVkIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZVxuICAgICkge31cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBpbml0WmFjKCk7XG4gICAgcHVibGljIGFic3RyYWN0IGxvYWRDdXJyZW50UGFnZSgpXG4gICAgcHVibGljIGFic3RyYWN0IGluaXRaQUNCdXR0b25MaXN0ZW5lcigpO1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpbml0WmFjTGlzdGVuZXJzKCk7XG5cbiAgICBpbml0WkFDUGVyc29uYWxTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzU2VydmljZT8uc3VwcG9ydGVkRmVhdHVyZXM/LnRhZ3MpIHtcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaGlkZVRhZ3NcIiwgXCJ5ZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicHJpbWFyeUNvbG9yXCIpIT1udWxsKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLXByaW1hcnlcIiwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwcmltYXJ5Q29sb3JcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNlY29uZGFyeUNvbG9yXCIpIT1udWxsKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLXNlY29uZGFyeVwiLCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInNlY29uZGFyeUNvbG9yXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVHJhbnNpdGlvbnNcIik7XG4gICAgICAgIGlmIChtb2RlPT1cIm9mZlwiKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRyYW5zaXRpb25cIiwgXCIwc1wiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdHJhbnNpdGlvblwiLCBcIjAuNXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgJChkb2N1bWVudCkucmVhZHkoKGUpID0+IHtcbiAgICAgICAgICAgICQoXCIucGVyc29uYWxcIikuc2hvdygpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzU2VydmljZT8uc3VwcG9ydGVkRmVhdHVyZXM/LnRhZ3MpIHtcbiAgICAgICAgICAgICAgICAkKFwiI0hpZGVUYWdzXCIpLnBhcmVudCgpLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAkKCc8ZGl2PjwvZGl2PicpLmluc2VydEJlZm9yZSgkKFwiI0hpZGVUYWdzXCIpLnBhcmVudCgpLnNpYmxpbmdzKClbM10pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNldFphY0V2ZW50cygpIHtcbiAgICAgICAgJChcImlucHV0XCIpLm9mZihcImtleXVwXCIpO1xuICAgICAgICAkKFwic2VsZWN0XCIpLm9mZihcImtleXVwXCIpO1xuICAgICAgICAkKFwiLnRvZ2dsZVwiKS5vZmYoXCJjbGlja1wiKTtcbiAgICAgICAgJChcImJvZHlcIikub2ZmKFwia2V5dXBcIik7XG4gICAgICAgICQoXCIjU1NlcnZpY2VOYW1lXCIpLm9mZigna2V5dXAnKTtcbiAgICAgICAgJChcIiNTU2VydmljZUhvc3RcIikub2ZmKCdrZXl1cCcpO1xuICAgICAgICAkKFwiI0NyZWF0ZUJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoXCIjQ3JlYXRlSWRCdXR0b25cIikub2ZmKCdjbGljaycpO1xuICAgICAgICAkKFwiI0lkZW50aXR5RG93bmxvYWRcIikub2ZmKCdjbGljaycpO1xuICAgICAgICAkKFwiI0RvbmVJZEJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgICQoXCIjRG9uZVNlcnZpY2VCdXR0b25cIikub2ZmKCdjbGljaycpO1xuICAgICAgICAkKFwiI0lubGluZUFkZElkZW50aXR5QnV0dG9uXCIpLm9mZignY2xpY2snKTtcbiAgICAgICAgJChcIiNJbmxpbmVBZGRTZXJ2aWNlQnV0dG9uXCIpLm9mZignY2xpY2snKTtcbiAgICAgICAgJChcIiNBbGVydEJ1dHRvblwiKS5vZmYoJ2NsaWNrJyk7XG4gICAgICAgIHRhZ3MudGFnRGF0YSA9IFtdO1xuICAgIH1cbn0iXX0=