@dollhousemcp/mcp-server 1.4.4 → 1.5.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 (667) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +68 -7
  3. package/dist/auth/GitHubAuthManager.d.ts +93 -0
  4. package/dist/auth/GitHubAuthManager.d.ts.map +1 -0
  5. package/dist/auth/GitHubAuthManager.js +465 -0
  6. package/dist/generated/version.d.ts +2 -2
  7. package/dist/generated/version.js +3 -3
  8. package/dist/index.d.ts +23 -0
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/index.js +244 -5
  11. package/dist/security/tokenManager.d.ts +34 -0
  12. package/dist/security/tokenManager.d.ts.map +1 -1
  13. package/dist/security/tokenManager.js +199 -1
  14. package/dist/server/ServerSetup.d.ts.map +1 -1
  15. package/dist/server/ServerSetup.js +4 -1
  16. package/dist/server/tools/AuthTools.d.ts +10 -0
  17. package/dist/server/tools/AuthTools.d.ts.map +1 -0
  18. package/dist/server/tools/AuthTools.js +41 -0
  19. package/dist/server/types.d.ts +3 -0
  20. package/dist/server/types.d.ts.map +1 -1
  21. package/dist/server/types.js +1 -1
  22. package/package.json +1 -1
  23. package/dist/collection/MarketplaceBrowser.d.ts +0 -24
  24. package/dist/collection/MarketplaceBrowser.d.ts.map +0 -1
  25. package/dist/collection/MarketplaceBrowser.js +0 -115
  26. package/dist/collection/MarketplaceSearch.d.ts +0 -18
  27. package/dist/collection/MarketplaceSearch.d.ts.map +0 -1
  28. package/dist/collection/MarketplaceSearch.js +0 -48
  29. package/dist/collection/PersonaInstaller.d.ts +0 -26
  30. package/dist/collection/PersonaInstaller.d.ts.map +0 -1
  31. package/dist/collection/PersonaInstaller.js +0 -103
  32. package/dist/elements/ensembles/Ensemble.d.ts +0 -144
  33. package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
  34. package/dist/elements/ensembles/Ensemble.js +0 -860
  35. package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
  36. package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
  37. package/dist/elements/ensembles/EnsembleManager.js +0 -378
  38. package/dist/elements/ensembles/constants.d.ts +0 -73
  39. package/dist/elements/ensembles/constants.d.ts.map +0 -1
  40. package/dist/elements/ensembles/constants.js +0 -92
  41. package/dist/elements/ensembles/index.d.ts +0 -8
  42. package/dist/elements/ensembles/index.d.ts.map +0 -1
  43. package/dist/elements/ensembles/index.js +0 -8
  44. package/dist/elements/ensembles/types.d.ts +0 -92
  45. package/dist/elements/ensembles/types.d.ts.map +0 -1
  46. package/dist/elements/ensembles/types.js +0 -8
  47. package/dist/elements/memories/Memory.d.ts +0 -110
  48. package/dist/elements/memories/Memory.d.ts.map +0 -1
  49. package/dist/elements/memories/Memory.js +0 -470
  50. package/dist/elements/memories/MemoryManager.d.ts +0 -86
  51. package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
  52. package/dist/elements/memories/MemoryManager.js +0 -435
  53. package/dist/elements/memories/constants.d.ts +0 -42
  54. package/dist/elements/memories/constants.d.ts.map +0 -1
  55. package/dist/elements/memories/constants.js +0 -49
  56. package/dist/elements/memories/index.d.ts +0 -6
  57. package/dist/elements/memories/index.d.ts.map +0 -1
  58. package/dist/elements/memories/index.js +0 -6
  59. package/dist/marketplace/GitHubClient.d.ts +0 -22
  60. package/dist/marketplace/GitHubClient.d.ts.map +0 -1
  61. package/dist/marketplace/GitHubClient.js +0 -112
  62. package/dist/marketplace/MarketplaceBrowser.d.ts +0 -24
  63. package/dist/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  64. package/dist/marketplace/MarketplaceBrowser.js +0 -115
  65. package/dist/marketplace/MarketplaceSearch.d.ts +0 -18
  66. package/dist/marketplace/MarketplaceSearch.d.ts.map +0 -1
  67. package/dist/marketplace/MarketplaceSearch.js +0 -48
  68. package/dist/marketplace/PersonaDetails.d.ts +0 -22
  69. package/dist/marketplace/PersonaDetails.d.ts.map +0 -1
  70. package/dist/marketplace/PersonaDetails.js +0 -71
  71. package/dist/marketplace/PersonaInstaller.d.ts +0 -25
  72. package/dist/marketplace/PersonaInstaller.d.ts.map +0 -1
  73. package/dist/marketplace/PersonaInstaller.js +0 -100
  74. package/dist/marketplace/PersonaSubmitter.d.ts +0 -19
  75. package/dist/marketplace/PersonaSubmitter.d.ts.map +0 -1
  76. package/dist/marketplace/PersonaSubmitter.js +0 -57
  77. package/dist/marketplace/index.d.ts +0 -10
  78. package/dist/marketplace/index.d.ts.map +0 -1
  79. package/dist/marketplace/index.js +0 -10
  80. package/dist/server/tools/MarketplaceTools.d.ts +0 -10
  81. package/dist/server/tools/MarketplaceTools.d.ts.map +0 -1
  82. package/dist/server/tools/MarketplaceTools.js +0 -96
  83. package/dist/src/cache/APICache.d.ts +0 -23
  84. package/dist/src/cache/APICache.d.ts.map +0 -1
  85. package/dist/src/cache/APICache.js +0 -42
  86. package/dist/src/cache/index.d.ts +0 -5
  87. package/dist/src/cache/index.d.ts.map +0 -1
  88. package/dist/src/cache/index.js +0 -5
  89. package/dist/src/config/constants.d.ts +0 -25
  90. package/dist/src/config/constants.d.ts.map +0 -1
  91. package/dist/src/config/constants.js +0 -30
  92. package/dist/src/config/index.d.ts +0 -6
  93. package/dist/src/config/index.d.ts.map +0 -1
  94. package/dist/src/config/index.js +0 -6
  95. package/dist/src/config/indicator-config.d.ts +0 -107
  96. package/dist/src/config/indicator-config.d.ts.map +0 -1
  97. package/dist/src/config/indicator-config.js +0 -158
  98. package/dist/src/constants/defaultPersonas.d.ts +0 -10
  99. package/dist/src/constants/defaultPersonas.d.ts.map +0 -1
  100. package/dist/src/constants/defaultPersonas.js +0 -18
  101. package/dist/src/constants/limits.d.ts +0 -10
  102. package/dist/src/constants/limits.d.ts.map +0 -1
  103. package/dist/src/constants/limits.js +0 -13
  104. package/dist/src/errors/SecurityError.d.ts +0 -29
  105. package/dist/src/errors/SecurityError.d.ts.map +0 -1
  106. package/dist/src/errors/SecurityError.js +0 -47
  107. package/dist/src/errors/index.d.ts +0 -2
  108. package/dist/src/errors/index.d.ts.map +0 -1
  109. package/dist/src/errors/index.js +0 -2
  110. package/dist/src/index.barrel.d.ts +0 -21
  111. package/dist/src/index.barrel.d.ts.map +0 -1
  112. package/dist/src/index.barrel.js +0 -31
  113. package/dist/src/index.d.ts +0 -220
  114. package/dist/src/index.d.ts.map +0 -1
  115. package/dist/src/index.js +0 -1559
  116. package/dist/src/marketplace/GitHubClient.d.ts +0 -22
  117. package/dist/src/marketplace/GitHubClient.d.ts.map +0 -1
  118. package/dist/src/marketplace/GitHubClient.js +0 -112
  119. package/dist/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  120. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  121. package/dist/src/marketplace/MarketplaceBrowser.js +0 -45
  122. package/dist/src/marketplace/MarketplaceSearch.d.ts +0 -18
  123. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  124. package/dist/src/marketplace/MarketplaceSearch.js +0 -36
  125. package/dist/src/marketplace/PersonaDetails.d.ts +0 -22
  126. package/dist/src/marketplace/PersonaDetails.d.ts.map +0 -1
  127. package/dist/src/marketplace/PersonaDetails.js +0 -71
  128. package/dist/src/marketplace/PersonaInstaller.d.ts +0 -25
  129. package/dist/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  130. package/dist/src/marketplace/PersonaInstaller.js +0 -100
  131. package/dist/src/marketplace/PersonaSubmitter.d.ts +0 -19
  132. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  133. package/dist/src/marketplace/PersonaSubmitter.js +0 -57
  134. package/dist/src/marketplace/index.d.ts +0 -10
  135. package/dist/src/marketplace/index.d.ts.map +0 -1
  136. package/dist/src/marketplace/index.js +0 -10
  137. package/dist/src/persona/PersonaLoader.d.ts +0 -33
  138. package/dist/src/persona/PersonaLoader.d.ts.map +0 -1
  139. package/dist/src/persona/PersonaLoader.js +0 -139
  140. package/dist/src/persona/PersonaManager.d.ts +0 -112
  141. package/dist/src/persona/PersonaManager.d.ts.map +0 -1
  142. package/dist/src/persona/PersonaManager.js +0 -341
  143. package/dist/src/persona/PersonaValidator.d.ts +0 -33
  144. package/dist/src/persona/PersonaValidator.d.ts.map +0 -1
  145. package/dist/src/persona/PersonaValidator.js +0 -157
  146. package/dist/src/persona/export-import/PersonaExporter.d.ts +0 -43
  147. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  148. package/dist/src/persona/export-import/PersonaExporter.js +0 -99
  149. package/dist/src/persona/export-import/PersonaImporter.d.ts +0 -65
  150. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  151. package/dist/src/persona/export-import/PersonaImporter.js +0 -313
  152. package/dist/src/persona/export-import/PersonaSharer.d.ts +0 -60
  153. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  154. package/dist/src/persona/export-import/PersonaSharer.js +0 -363
  155. package/dist/src/persona/export-import/index.d.ts +0 -10
  156. package/dist/src/persona/export-import/index.d.ts.map +0 -1
  157. package/dist/src/persona/export-import/index.js +0 -7
  158. package/dist/src/persona/index.d.ts +0 -7
  159. package/dist/src/persona/index.d.ts.map +0 -1
  160. package/dist/src/persona/index.js +0 -7
  161. package/dist/src/security/InputValidator.d.ts +0 -69
  162. package/dist/src/security/InputValidator.d.ts.map +0 -1
  163. package/dist/src/security/InputValidator.js +0 -381
  164. package/dist/src/security/commandValidator.d.ts +0 -7
  165. package/dist/src/security/commandValidator.d.ts.map +0 -1
  166. package/dist/src/security/commandValidator.js +0 -77
  167. package/dist/src/security/constants.d.ts +0 -21
  168. package/dist/src/security/constants.d.ts.map +0 -1
  169. package/dist/src/security/constants.js +0 -23
  170. package/dist/src/security/contentValidator.d.ts +0 -47
  171. package/dist/src/security/contentValidator.d.ts.map +0 -1
  172. package/dist/src/security/contentValidator.js +0 -188
  173. package/dist/src/security/fileLockManager.d.ts +0 -70
  174. package/dist/src/security/fileLockManager.d.ts.map +0 -1
  175. package/dist/src/security/fileLockManager.js +0 -187
  176. package/dist/src/security/index.d.ts +0 -12
  177. package/dist/src/security/index.d.ts.map +0 -1
  178. package/dist/src/security/index.js +0 -14
  179. package/dist/src/security/pathValidator.d.ts +0 -9
  180. package/dist/src/security/pathValidator.d.ts.map +0 -1
  181. package/dist/src/security/pathValidator.js +0 -97
  182. package/dist/src/security/secureYamlParser.d.ts +0 -46
  183. package/dist/src/security/secureYamlParser.d.ts.map +0 -1
  184. package/dist/src/security/secureYamlParser.js +0 -203
  185. package/dist/src/security/securityMonitor.d.ts +0 -58
  186. package/dist/src/security/securityMonitor.d.ts.map +0 -1
  187. package/dist/src/security/securityMonitor.js +0 -108
  188. package/dist/src/security/tokenManager.d.ts +0 -59
  189. package/dist/src/security/tokenManager.d.ts.map +0 -1
  190. package/dist/src/security/tokenManager.js +0 -216
  191. package/dist/src/security/yamlValidator.d.ts +0 -20
  192. package/dist/src/security/yamlValidator.d.ts.map +0 -1
  193. package/dist/src/security/yamlValidator.js +0 -138
  194. package/dist/src/server/ServerSetup.d.ts +0 -31
  195. package/dist/src/server/ServerSetup.d.ts.map +0 -1
  196. package/dist/src/server/ServerSetup.js +0 -79
  197. package/dist/src/server/index.d.ts +0 -7
  198. package/dist/src/server/index.d.ts.map +0 -1
  199. package/dist/src/server/index.js +0 -7
  200. package/dist/src/server/tools/ConfigTools.d.ts +0 -10
  201. package/dist/src/server/tools/ConfigTools.d.ts.map +0 -1
  202. package/dist/src/server/tools/ConfigTools.js +0 -63
  203. package/dist/src/server/tools/MarketplaceTools.d.ts +0 -10
  204. package/dist/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  205. package/dist/src/server/tools/MarketplaceTools.js +0 -92
  206. package/dist/src/server/tools/PersonaTools.d.ts +0 -10
  207. package/dist/src/server/tools/PersonaTools.d.ts.map +0 -1
  208. package/dist/src/server/tools/PersonaTools.js +0 -257
  209. package/dist/src/server/tools/ToolRegistry.d.ts +0 -37
  210. package/dist/src/server/tools/ToolRegistry.d.ts.map +0 -1
  211. package/dist/src/server/tools/ToolRegistry.js +0 -40
  212. package/dist/src/server/tools/UpdateTools.d.ts +0 -10
  213. package/dist/src/server/tools/UpdateTools.d.ts.map +0 -1
  214. package/dist/src/server/tools/UpdateTools.js +0 -64
  215. package/dist/src/server/tools/UserTools.d.ts +0 -10
  216. package/dist/src/server/tools/UserTools.d.ts.map +0 -1
  217. package/dist/src/server/tools/UserTools.js +0 -51
  218. package/dist/src/server/tools/index.d.ts +0 -10
  219. package/dist/src/server/tools/index.d.ts.map +0 -1
  220. package/dist/src/server/tools/index.js +0 -10
  221. package/dist/src/server/types.d.ts +0 -34
  222. package/dist/src/server/types.d.ts.map +0 -1
  223. package/dist/src/server/types.js +0 -5
  224. package/dist/src/tools/debug.d.ts +0 -20
  225. package/dist/src/tools/debug.d.ts.map +0 -1
  226. package/dist/src/tools/debug.js +0 -37
  227. package/dist/src/types/cache.d.ts +0 -8
  228. package/dist/src/types/cache.d.ts.map +0 -1
  229. package/dist/src/types/cache.js +0 -5
  230. package/dist/src/types/index.d.ts +0 -8
  231. package/dist/src/types/index.d.ts.map +0 -1
  232. package/dist/src/types/index.js +0 -8
  233. package/dist/src/types/marketplace.d.ts +0 -23
  234. package/dist/src/types/marketplace.d.ts.map +0 -1
  235. package/dist/src/types/marketplace.js +0 -5
  236. package/dist/src/types/mcp.d.ts +0 -161
  237. package/dist/src/types/mcp.d.ts.map +0 -1
  238. package/dist/src/types/mcp.js +0 -75
  239. package/dist/src/types/persona.d.ts +0 -30
  240. package/dist/src/types/persona.d.ts.map +0 -1
  241. package/dist/src/types/persona.js +0 -5
  242. package/dist/src/update/BackupManager.d.ts +0 -46
  243. package/dist/src/update/BackupManager.d.ts.map +0 -1
  244. package/dist/src/update/BackupManager.js +0 -261
  245. package/dist/src/update/DependencyChecker.d.ts +0 -41
  246. package/dist/src/update/DependencyChecker.d.ts.map +0 -1
  247. package/dist/src/update/DependencyChecker.js +0 -132
  248. package/dist/src/update/RateLimiter.d.ts +0 -80
  249. package/dist/src/update/RateLimiter.d.ts.map +0 -1
  250. package/dist/src/update/RateLimiter.js +0 -172
  251. package/dist/src/update/SignatureVerifier.d.ts +0 -71
  252. package/dist/src/update/SignatureVerifier.d.ts.map +0 -1
  253. package/dist/src/update/SignatureVerifier.js +0 -214
  254. package/dist/src/update/UpdateChecker.d.ts +0 -127
  255. package/dist/src/update/UpdateChecker.d.ts.map +0 -1
  256. package/dist/src/update/UpdateChecker.js +0 -460
  257. package/dist/src/update/UpdateManager.d.ts +0 -41
  258. package/dist/src/update/UpdateManager.d.ts.map +0 -1
  259. package/dist/src/update/UpdateManager.js +0 -260
  260. package/dist/src/update/VersionManager.d.ts +0 -31
  261. package/dist/src/update/VersionManager.d.ts.map +0 -1
  262. package/dist/src/update/VersionManager.js +0 -134
  263. package/dist/src/update/index.d.ts +0 -9
  264. package/dist/src/update/index.d.ts.map +0 -1
  265. package/dist/src/update/index.js +0 -9
  266. package/dist/src/utils/filesystem.d.ts +0 -32
  267. package/dist/src/utils/filesystem.d.ts.map +0 -1
  268. package/dist/src/utils/filesystem.js +0 -73
  269. package/dist/src/utils/git.d.ts +0 -32
  270. package/dist/src/utils/git.d.ts.map +0 -1
  271. package/dist/src/utils/git.js +0 -65
  272. package/dist/src/utils/index.d.ts +0 -7
  273. package/dist/src/utils/index.d.ts.map +0 -1
  274. package/dist/src/utils/index.js +0 -7
  275. package/dist/src/utils/logger.d.ts +0 -45
  276. package/dist/src/utils/logger.d.ts.map +0 -1
  277. package/dist/src/utils/logger.js +0 -91
  278. package/dist/src/utils/version.d.ts +0 -25
  279. package/dist/src/utils/version.d.ts.map +0 -1
  280. package/dist/src/utils/version.js +0 -97
  281. package/dist/test/src/cache/APICache.d.ts +0 -23
  282. package/dist/test/src/cache/APICache.d.ts.map +0 -1
  283. package/dist/test/src/cache/APICache.js +0 -42
  284. package/dist/test/src/cache/index.d.ts +0 -5
  285. package/dist/test/src/cache/index.d.ts.map +0 -1
  286. package/dist/test/src/cache/index.js +0 -5
  287. package/dist/test/src/collection/CollectionBrowser.d.ts +0 -24
  288. package/dist/test/src/collection/CollectionBrowser.d.ts.map +0 -1
  289. package/dist/test/src/collection/CollectionBrowser.js +0 -115
  290. package/dist/test/src/collection/CollectionSearch.d.ts +0 -18
  291. package/dist/test/src/collection/CollectionSearch.d.ts.map +0 -1
  292. package/dist/test/src/collection/CollectionSearch.js +0 -48
  293. package/dist/test/src/collection/GitHubClient.d.ts +0 -22
  294. package/dist/test/src/collection/GitHubClient.d.ts.map +0 -1
  295. package/dist/test/src/collection/GitHubClient.js +0 -114
  296. package/dist/test/src/collection/PersonaDetails.d.ts +0 -22
  297. package/dist/test/src/collection/PersonaDetails.d.ts.map +0 -1
  298. package/dist/test/src/collection/PersonaDetails.js +0 -71
  299. package/dist/test/src/collection/PersonaInstaller.d.ts +0 -26
  300. package/dist/test/src/collection/PersonaInstaller.d.ts.map +0 -1
  301. package/dist/test/src/collection/PersonaInstaller.js +0 -103
  302. package/dist/test/src/collection/PersonaSubmitter.d.ts +0 -19
  303. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +0 -1
  304. package/dist/test/src/collection/PersonaSubmitter.js +0 -57
  305. package/dist/test/src/collection/index.d.ts +0 -10
  306. package/dist/test/src/collection/index.d.ts.map +0 -1
  307. package/dist/test/src/collection/index.js +0 -10
  308. package/dist/test/src/config/constants.d.ts +0 -25
  309. package/dist/test/src/config/constants.d.ts.map +0 -1
  310. package/dist/test/src/config/constants.js +0 -30
  311. package/dist/test/src/config/index.d.ts +0 -6
  312. package/dist/test/src/config/index.d.ts.map +0 -1
  313. package/dist/test/src/config/index.js +0 -6
  314. package/dist/test/src/config/indicator-config.d.ts +0 -107
  315. package/dist/test/src/config/indicator-config.d.ts.map +0 -1
  316. package/dist/test/src/config/indicator-config.js +0 -158
  317. package/dist/test/src/constants/defaultPersonas.d.ts +0 -10
  318. package/dist/test/src/constants/defaultPersonas.d.ts.map +0 -1
  319. package/dist/test/src/constants/defaultPersonas.js +0 -18
  320. package/dist/test/src/constants/limits.d.ts +0 -10
  321. package/dist/test/src/constants/limits.d.ts.map +0 -1
  322. package/dist/test/src/constants/limits.js +0 -13
  323. package/dist/test/src/elements/BaseElement.d.ts +0 -81
  324. package/dist/test/src/elements/BaseElement.d.ts.map +0 -1
  325. package/dist/test/src/elements/BaseElement.js +0 -381
  326. package/dist/test/src/elements/FeedbackProcessor.d.ts +0 -57
  327. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +0 -1
  328. package/dist/test/src/elements/FeedbackProcessor.js +0 -418
  329. package/dist/test/src/elements/agents/Agent.d.ts +0 -145
  330. package/dist/test/src/elements/agents/Agent.d.ts.map +0 -1
  331. package/dist/test/src/elements/agents/Agent.js +0 -848
  332. package/dist/test/src/elements/agents/AgentManager.d.ts +0 -125
  333. package/dist/test/src/elements/agents/AgentManager.d.ts.map +0 -1
  334. package/dist/test/src/elements/agents/AgentManager.js +0 -608
  335. package/dist/test/src/elements/agents/constants.d.ts +0 -42
  336. package/dist/test/src/elements/agents/constants.d.ts.map +0 -1
  337. package/dist/test/src/elements/agents/constants.js +0 -45
  338. package/dist/test/src/elements/agents/goalTemplates.d.ts +0 -44
  339. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +0 -1
  340. package/dist/test/src/elements/agents/goalTemplates.js +0 -297
  341. package/dist/test/src/elements/agents/index.d.ts +0 -8
  342. package/dist/test/src/elements/agents/index.d.ts.map +0 -1
  343. package/dist/test/src/elements/agents/index.js +0 -8
  344. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +0 -76
  345. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +0 -1
  346. package/dist/test/src/elements/agents/ruleEngineConfig.js +0 -143
  347. package/dist/test/src/elements/agents/types.d.ts +0 -97
  348. package/dist/test/src/elements/agents/types.d.ts.map +0 -1
  349. package/dist/test/src/elements/agents/types.js +0 -5
  350. package/dist/test/src/elements/index.d.ts +0 -6
  351. package/dist/test/src/elements/index.d.ts.map +0 -1
  352. package/dist/test/src/elements/index.js +0 -6
  353. package/dist/test/src/elements/memories/Memory.d.ts +0 -110
  354. package/dist/test/src/elements/memories/Memory.d.ts.map +0 -1
  355. package/dist/test/src/elements/memories/Memory.js +0 -470
  356. package/dist/test/src/elements/memories/MemoryManager.d.ts +0 -86
  357. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +0 -1
  358. package/dist/test/src/elements/memories/MemoryManager.js +0 -435
  359. package/dist/test/src/elements/memories/constants.d.ts +0 -42
  360. package/dist/test/src/elements/memories/constants.d.ts.map +0 -1
  361. package/dist/test/src/elements/memories/constants.js +0 -49
  362. package/dist/test/src/elements/memories/index.d.ts +0 -6
  363. package/dist/test/src/elements/memories/index.d.ts.map +0 -1
  364. package/dist/test/src/elements/memories/index.js +0 -6
  365. package/dist/test/src/elements/skills/Skill.d.ts +0 -109
  366. package/dist/test/src/elements/skills/Skill.d.ts.map +0 -1
  367. package/dist/test/src/elements/skills/Skill.js +0 -381
  368. package/dist/test/src/elements/templates/Template.d.ts +0 -138
  369. package/dist/test/src/elements/templates/Template.d.ts.map +0 -1
  370. package/dist/test/src/elements/templates/Template.js +0 -673
  371. package/dist/test/src/elements/templates/TemplateManager.d.ts +0 -104
  372. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +0 -1
  373. package/dist/test/src/elements/templates/TemplateManager.js +0 -496
  374. package/dist/test/src/elements/templates/index.d.ts +0 -6
  375. package/dist/test/src/elements/templates/index.d.ts.map +0 -1
  376. package/dist/test/src/elements/templates/index.js +0 -6
  377. package/dist/test/src/errors/SecurityError.d.ts +0 -29
  378. package/dist/test/src/errors/SecurityError.d.ts.map +0 -1
  379. package/dist/test/src/errors/SecurityError.js +0 -47
  380. package/dist/test/src/errors/index.d.ts +0 -2
  381. package/dist/test/src/errors/index.d.ts.map +0 -1
  382. package/dist/test/src/errors/index.js +0 -2
  383. package/dist/test/src/index.barrel.d.ts +0 -21
  384. package/dist/test/src/index.barrel.d.ts.map +0 -1
  385. package/dist/test/src/index.barrel.js +0 -31
  386. package/dist/test/src/index.d.ts +0 -223
  387. package/dist/test/src/index.d.ts.map +0 -1
  388. package/dist/test/src/index.js +0 -1594
  389. package/dist/test/src/marketplace/GitHubClient.d.ts +0 -22
  390. package/dist/test/src/marketplace/GitHubClient.d.ts.map +0 -1
  391. package/dist/test/src/marketplace/GitHubClient.js +0 -112
  392. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  393. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  394. package/dist/test/src/marketplace/MarketplaceBrowser.js +0 -45
  395. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +0 -18
  396. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  397. package/dist/test/src/marketplace/MarketplaceSearch.js +0 -36
  398. package/dist/test/src/marketplace/PersonaDetails.d.ts +0 -22
  399. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +0 -1
  400. package/dist/test/src/marketplace/PersonaDetails.js +0 -71
  401. package/dist/test/src/marketplace/PersonaInstaller.d.ts +0 -25
  402. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  403. package/dist/test/src/marketplace/PersonaInstaller.js +0 -100
  404. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +0 -19
  405. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  406. package/dist/test/src/marketplace/PersonaSubmitter.js +0 -57
  407. package/dist/test/src/marketplace/index.d.ts +0 -10
  408. package/dist/test/src/marketplace/index.d.ts.map +0 -1
  409. package/dist/test/src/marketplace/index.js +0 -10
  410. package/dist/test/src/persona/PersonaElement.d.ts +0 -64
  411. package/dist/test/src/persona/PersonaElement.d.ts.map +0 -1
  412. package/dist/test/src/persona/PersonaElement.js +0 -223
  413. package/dist/test/src/persona/PersonaElementManager.d.ts +0 -97
  414. package/dist/test/src/persona/PersonaElementManager.d.ts.map +0 -1
  415. package/dist/test/src/persona/PersonaElementManager.js +0 -342
  416. package/dist/test/src/persona/PersonaLoader.d.ts +0 -34
  417. package/dist/test/src/persona/PersonaLoader.d.ts.map +0 -1
  418. package/dist/test/src/persona/PersonaLoader.js +0 -145
  419. package/dist/test/src/persona/PersonaManager.d.ts +0 -112
  420. package/dist/test/src/persona/PersonaManager.d.ts.map +0 -1
  421. package/dist/test/src/persona/PersonaManager.js +0 -341
  422. package/dist/test/src/persona/PersonaValidator.d.ts +0 -33
  423. package/dist/test/src/persona/PersonaValidator.d.ts.map +0 -1
  424. package/dist/test/src/persona/PersonaValidator.js +0 -157
  425. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +0 -43
  426. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  427. package/dist/test/src/persona/export-import/PersonaExporter.js +0 -99
  428. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +0 -65
  429. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  430. package/dist/test/src/persona/export-import/PersonaImporter.js +0 -315
  431. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +0 -60
  432. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  433. package/dist/test/src/persona/export-import/PersonaSharer.js +0 -502
  434. package/dist/test/src/persona/export-import/index.d.ts +0 -10
  435. package/dist/test/src/persona/export-import/index.d.ts.map +0 -1
  436. package/dist/test/src/persona/export-import/index.js +0 -7
  437. package/dist/test/src/persona/index.d.ts +0 -7
  438. package/dist/test/src/persona/index.d.ts.map +0 -1
  439. package/dist/test/src/persona/index.js +0 -7
  440. package/dist/test/src/portfolio/MigrationManager.d.ts +0 -44
  441. package/dist/test/src/portfolio/MigrationManager.d.ts.map +0 -1
  442. package/dist/test/src/portfolio/MigrationManager.js +0 -163
  443. package/dist/test/src/portfolio/PortfolioManager.d.ts +0 -54
  444. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +0 -1
  445. package/dist/test/src/portfolio/PortfolioManager.js +0 -224
  446. package/dist/test/src/portfolio/types.d.ts +0 -18
  447. package/dist/test/src/portfolio/types.d.ts.map +0 -1
  448. package/dist/test/src/portfolio/types.js +0 -13
  449. package/dist/test/src/security/InputValidator.d.ts +0 -80
  450. package/dist/test/src/security/InputValidator.d.ts.map +0 -1
  451. package/dist/test/src/security/InputValidator.js +0 -436
  452. package/dist/test/src/security/audit/SecurityAuditor.d.ts +0 -44
  453. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +0 -1
  454. package/dist/test/src/security/audit/SecurityAuditor.js +0 -274
  455. package/dist/test/src/security/audit/config/suppressions.d.ts +0 -34
  456. package/dist/test/src/security/audit/config/suppressions.d.ts.map +0 -1
  457. package/dist/test/src/security/audit/config/suppressions.js +0 -575
  458. package/dist/test/src/security/audit/index.d.ts +0 -14
  459. package/dist/test/src/security/audit/index.d.ts.map +0 -1
  460. package/dist/test/src/security/audit/index.js +0 -15
  461. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +0 -46
  462. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +0 -1
  463. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +0 -174
  464. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +0 -13
  465. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +0 -1
  466. package/dist/test/src/security/audit/reporters/JsonReporter.js +0 -25
  467. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +0 -13
  468. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +0 -1
  469. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +0 -79
  470. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +0 -20
  471. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +0 -1
  472. package/dist/test/src/security/audit/rules/SecurityRules.js +0 -244
  473. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +0 -47
  474. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +0 -1
  475. package/dist/test/src/security/audit/scanners/CodeScanner.js +0 -174
  476. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +0 -13
  477. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +0 -1
  478. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +0 -22
  479. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +0 -13
  480. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +0 -1
  481. package/dist/test/src/security/audit/scanners/DependencyScanner.js +0 -22
  482. package/dist/test/src/security/audit/types.d.ts +0 -94
  483. package/dist/test/src/security/audit/types.d.ts.map +0 -1
  484. package/dist/test/src/security/audit/types.js +0 -6
  485. package/dist/test/src/security/commandValidator.d.ts +0 -7
  486. package/dist/test/src/security/commandValidator.d.ts.map +0 -1
  487. package/dist/test/src/security/commandValidator.js +0 -78
  488. package/dist/test/src/security/constants.d.ts +0 -24
  489. package/dist/test/src/security/constants.d.ts.map +0 -1
  490. package/dist/test/src/security/constants.js +0 -26
  491. package/dist/test/src/security/contentValidator.d.ts +0 -47
  492. package/dist/test/src/security/contentValidator.d.ts.map +0 -1
  493. package/dist/test/src/security/contentValidator.js +0 -301
  494. package/dist/test/src/security/errors.d.ts +0 -14
  495. package/dist/test/src/security/errors.d.ts.map +0 -1
  496. package/dist/test/src/security/errors.js +0 -28
  497. package/dist/test/src/security/fileLockManager.d.ts +0 -70
  498. package/dist/test/src/security/fileLockManager.d.ts.map +0 -1
  499. package/dist/test/src/security/fileLockManager.js +0 -187
  500. package/dist/test/src/security/index.d.ts +0 -12
  501. package/dist/test/src/security/index.d.ts.map +0 -1
  502. package/dist/test/src/security/index.js +0 -14
  503. package/dist/test/src/security/pathValidator.d.ts +0 -9
  504. package/dist/test/src/security/pathValidator.d.ts.map +0 -1
  505. package/dist/test/src/security/pathValidator.js +0 -98
  506. package/dist/test/src/security/regexValidator.d.ts +0 -59
  507. package/dist/test/src/security/regexValidator.d.ts.map +0 -1
  508. package/dist/test/src/security/regexValidator.js +0 -214
  509. package/dist/test/src/security/secureYamlParser.d.ts +0 -46
  510. package/dist/test/src/security/secureYamlParser.d.ts.map +0 -1
  511. package/dist/test/src/security/secureYamlParser.js +0 -203
  512. package/dist/test/src/security/securityMonitor.d.ts +0 -58
  513. package/dist/test/src/security/securityMonitor.d.ts.map +0 -1
  514. package/dist/test/src/security/securityMonitor.js +0 -108
  515. package/dist/test/src/security/tokenManager.d.ts +0 -85
  516. package/dist/test/src/security/tokenManager.d.ts.map +0 -1
  517. package/dist/test/src/security/tokenManager.js +0 -286
  518. package/dist/test/src/security/validators/unicodeValidator.d.ts +0 -97
  519. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +0 -1
  520. package/dist/test/src/security/validators/unicodeValidator.js +0 -312
  521. package/dist/test/src/security/yamlValidator.d.ts +0 -21
  522. package/dist/test/src/security/yamlValidator.d.ts.map +0 -1
  523. package/dist/test/src/security/yamlValidator.js +0 -164
  524. package/dist/test/src/server/ServerSetup.d.ts +0 -35
  525. package/dist/test/src/server/ServerSetup.d.ts.map +0 -1
  526. package/dist/test/src/server/ServerSetup.js +0 -116
  527. package/dist/test/src/server/index.d.ts +0 -7
  528. package/dist/test/src/server/index.d.ts.map +0 -1
  529. package/dist/test/src/server/index.js +0 -7
  530. package/dist/test/src/server/startup.d.ts +0 -31
  531. package/dist/test/src/server/startup.d.ts.map +0 -1
  532. package/dist/test/src/server/startup.js +0 -67
  533. package/dist/test/src/server/tools/CollectionTools.d.ts +0 -10
  534. package/dist/test/src/server/tools/CollectionTools.d.ts.map +0 -1
  535. package/dist/test/src/server/tools/CollectionTools.js +0 -96
  536. package/dist/test/src/server/tools/ConfigTools.d.ts +0 -10
  537. package/dist/test/src/server/tools/ConfigTools.d.ts.map +0 -1
  538. package/dist/test/src/server/tools/ConfigTools.js +0 -63
  539. package/dist/test/src/server/tools/MarketplaceTools.d.ts +0 -10
  540. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  541. package/dist/test/src/server/tools/MarketplaceTools.js +0 -92
  542. package/dist/test/src/server/tools/PersonaTools.d.ts +0 -10
  543. package/dist/test/src/server/tools/PersonaTools.d.ts.map +0 -1
  544. package/dist/test/src/server/tools/PersonaTools.js +0 -257
  545. package/dist/test/src/server/tools/ToolRegistry.d.ts +0 -37
  546. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +0 -1
  547. package/dist/test/src/server/tools/ToolRegistry.js +0 -40
  548. package/dist/test/src/server/tools/UpdateTools.d.ts +0 -10
  549. package/dist/test/src/server/tools/UpdateTools.d.ts.map +0 -1
  550. package/dist/test/src/server/tools/UpdateTools.js +0 -64
  551. package/dist/test/src/server/tools/UserTools.d.ts +0 -10
  552. package/dist/test/src/server/tools/UserTools.d.ts.map +0 -1
  553. package/dist/test/src/server/tools/UserTools.js +0 -51
  554. package/dist/test/src/server/tools/index.d.ts +0 -10
  555. package/dist/test/src/server/tools/index.d.ts.map +0 -1
  556. package/dist/test/src/server/tools/index.js +0 -10
  557. package/dist/test/src/server/types.d.ts +0 -34
  558. package/dist/test/src/server/types.d.ts.map +0 -1
  559. package/dist/test/src/server/types.js +0 -5
  560. package/dist/test/src/tools/debug.d.ts +0 -20
  561. package/dist/test/src/tools/debug.d.ts.map +0 -1
  562. package/dist/test/src/tools/debug.js +0 -37
  563. package/dist/test/src/types/cache.d.ts +0 -8
  564. package/dist/test/src/types/cache.d.ts.map +0 -1
  565. package/dist/test/src/types/cache.js +0 -5
  566. package/dist/test/src/types/collection.d.ts +0 -23
  567. package/dist/test/src/types/collection.d.ts.map +0 -1
  568. package/dist/test/src/types/collection.js +0 -5
  569. package/dist/test/src/types/elements/IElement.d.ts +0 -123
  570. package/dist/test/src/types/elements/IElement.d.ts.map +0 -1
  571. package/dist/test/src/types/elements/IElement.js +0 -30
  572. package/dist/test/src/types/elements/IElementManager.d.ts +0 -65
  573. package/dist/test/src/types/elements/IElementManager.d.ts.map +0 -1
  574. package/dist/test/src/types/elements/IElementManager.js +0 -6
  575. package/dist/test/src/types/elements/IRatingManager.d.ts +0 -109
  576. package/dist/test/src/types/elements/IRatingManager.d.ts.map +0 -1
  577. package/dist/test/src/types/elements/IRatingManager.js +0 -6
  578. package/dist/test/src/types/elements/IReferenceResolver.d.ts +0 -52
  579. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +0 -1
  580. package/dist/test/src/types/elements/IReferenceResolver.js +0 -6
  581. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +0 -49
  582. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +0 -1
  583. package/dist/test/src/types/elements/RatingBreakdowns.js +0 -6
  584. package/dist/test/src/types/elements/index.d.ts +0 -9
  585. package/dist/test/src/types/elements/index.d.ts.map +0 -1
  586. package/dist/test/src/types/elements/index.js +0 -11
  587. package/dist/test/src/types/index.d.ts +0 -9
  588. package/dist/test/src/types/index.d.ts.map +0 -1
  589. package/dist/test/src/types/index.js +0 -9
  590. package/dist/test/src/types/marketplace.d.ts +0 -23
  591. package/dist/test/src/types/marketplace.d.ts.map +0 -1
  592. package/dist/test/src/types/marketplace.js +0 -5
  593. package/dist/test/src/types/mcp.d.ts +0 -84
  594. package/dist/test/src/types/mcp.d.ts.map +0 -1
  595. package/dist/test/src/types/mcp.js +0 -80
  596. package/dist/test/src/types/persona.d.ts +0 -30
  597. package/dist/test/src/types/persona.d.ts.map +0 -1
  598. package/dist/test/src/types/persona.js +0 -5
  599. package/dist/test/src/update/BackupManager.d.ts +0 -46
  600. package/dist/test/src/update/BackupManager.d.ts.map +0 -1
  601. package/dist/test/src/update/BackupManager.js +0 -261
  602. package/dist/test/src/update/DependencyChecker.d.ts +0 -41
  603. package/dist/test/src/update/DependencyChecker.d.ts.map +0 -1
  604. package/dist/test/src/update/DependencyChecker.js +0 -132
  605. package/dist/test/src/update/RateLimiter.d.ts +0 -80
  606. package/dist/test/src/update/RateLimiter.d.ts.map +0 -1
  607. package/dist/test/src/update/RateLimiter.js +0 -172
  608. package/dist/test/src/update/SignatureVerifier.d.ts +0 -71
  609. package/dist/test/src/update/SignatureVerifier.d.ts.map +0 -1
  610. package/dist/test/src/update/SignatureVerifier.js +0 -214
  611. package/dist/test/src/update/UpdateChecker.d.ts +0 -127
  612. package/dist/test/src/update/UpdateChecker.d.ts.map +0 -1
  613. package/dist/test/src/update/UpdateChecker.js +0 -469
  614. package/dist/test/src/update/UpdateManager.d.ts +0 -41
  615. package/dist/test/src/update/UpdateManager.d.ts.map +0 -1
  616. package/dist/test/src/update/UpdateManager.js +0 -260
  617. package/dist/test/src/update/VersionManager.d.ts +0 -31
  618. package/dist/test/src/update/VersionManager.d.ts.map +0 -1
  619. package/dist/test/src/update/VersionManager.js +0 -134
  620. package/dist/test/src/update/index.d.ts +0 -9
  621. package/dist/test/src/update/index.d.ts.map +0 -1
  622. package/dist/test/src/update/index.js +0 -9
  623. package/dist/test/src/utils/filesystem.d.ts +0 -29
  624. package/dist/test/src/utils/filesystem.d.ts.map +0 -1
  625. package/dist/test/src/utils/filesystem.js +0 -94
  626. package/dist/test/src/utils/git.d.ts +0 -32
  627. package/dist/test/src/utils/git.d.ts.map +0 -1
  628. package/dist/test/src/utils/git.js +0 -65
  629. package/dist/test/src/utils/index.d.ts +0 -7
  630. package/dist/test/src/utils/index.d.ts.map +0 -1
  631. package/dist/test/src/utils/index.js +0 -7
  632. package/dist/test/src/utils/logger.d.ts +0 -45
  633. package/dist/test/src/utils/logger.d.ts.map +0 -1
  634. package/dist/test/src/utils/logger.js +0 -91
  635. package/dist/test/src/utils/version.d.ts +0 -25
  636. package/dist/test/src/utils/version.d.ts.map +0 -1
  637. package/dist/test/src/utils/version.js +0 -97
  638. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +0 -33
  639. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +0 -1
  640. package/dist/test/test/__tests__/integration/helpers/file-utils.js +0 -83
  641. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +0 -26
  642. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +0 -1
  643. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +0 -95
  644. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +0 -26
  645. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +0 -1
  646. package/dist/test/test/__tests__/integration/helpers/test-server.js +0 -41
  647. package/dist/test/test/__tests__/integration/setup.d.ts +0 -8
  648. package/dist/test/test/__tests__/integration/setup.d.ts.map +0 -1
  649. package/dist/test/test/__tests__/integration/setup.js +0 -31
  650. package/dist/test/test/__tests__/integration/teardown.d.ts +0 -5
  651. package/dist/test/test/__tests__/integration/teardown.d.ts.map +0 -1
  652. package/dist/test/test/__tests__/integration/teardown.js +0 -23
  653. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +0 -34
  654. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +0 -1
  655. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +0 -224
  656. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +0 -89
  657. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +0 -1
  658. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +0 -543
  659. package/dist/test/test/__tests__/security/index.d.ts +0 -46
  660. package/dist/test/test/__tests__/security/index.d.ts.map +0 -1
  661. package/dist/test/test/__tests__/security/index.js +0 -98
  662. package/dist/test/test/__tests__/security/setup.d.ts +0 -3
  663. package/dist/test/test/__tests__/security/setup.d.ts.map +0 -1
  664. package/dist/test/test/__tests__/security/setup.js +0 -23
  665. package/dist/types/marketplace.d.ts +0 -23
  666. package/dist/types/marketplace.d.ts.map +0 -1
  667. package/dist/types/marketplace.js +0 -5
@@ -22,6 +22,14 @@ export interface TokenValidationResult {
22
22
  */
23
23
  export declare class TokenManager {
24
24
  private static readonly GITHUB_TOKEN_PATTERNS;
25
+ private static readonly TOKEN_DIR;
26
+ private static readonly TOKEN_FILE;
27
+ private static readonly ALGORITHM;
28
+ private static readonly KEY_LENGTH;
29
+ private static readonly IV_LENGTH;
30
+ private static readonly TAG_LENGTH;
31
+ private static readonly SALT_LENGTH;
32
+ private static readonly ITERATIONS;
25
33
  private static tokenValidationLimiter;
26
34
  /**
27
35
  * Get or create the token validation rate limiter
@@ -81,5 +89,31 @@ export declare class TokenManager {
81
89
  * This is called internally when accessing collection features. (PR #280)
82
90
  */
83
91
  static ensureTokenPermissions(operation: 'read' | 'write' | 'marketplace' | 'collection' | 'gist'): Promise<TokenValidationResult>;
92
+ /**
93
+ * Derive encryption key from a passphrase
94
+ */
95
+ private static deriveKey;
96
+ /**
97
+ * Get machine-specific passphrase for encryption
98
+ * Uses a combination of machine ID and user info for uniqueness
99
+ */
100
+ private static getMachinePassphrase;
101
+ /**
102
+ * Store GitHub token securely to file
103
+ */
104
+ static storeGitHubToken(token: string): Promise<void>;
105
+ /**
106
+ * Retrieve GitHub token from secure storage
107
+ */
108
+ static retrieveGitHubToken(): Promise<string | null>;
109
+ /**
110
+ * Remove stored GitHub token
111
+ */
112
+ static removeStoredToken(): Promise<void>;
113
+ /**
114
+ * Get GitHub token from environment or secure storage
115
+ * Updated to check secure storage if environment variable not set
116
+ */
117
+ static getGitHubTokenAsync(): Promise<string | null>;
84
118
  }
85
119
  //# sourceMappingURL=tokenManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokenManager.d.ts","sourceRoot":"","sources":["../../src/security/tokenManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC;IACF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAK3C;IAGF,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAA4B;IAEjE;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAOxC;;;OAGG;IACH,MAAM,CAAC,4BAA4B,IAAI,WAAW;IAQlD;;;OAGG;IACH,MAAM,CAAC,2BAA2B,IAAI,IAAI;IAI1C;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAWlD;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,GAAG,IAAI;IAwBtC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQzC;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgB1C;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAO5C;;OAEG;WACU,mBAAmB,CAC9B,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,WAAW,GAC1B,OAAO,CAAC,qBAAqB,CAAC;IA0HjC;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAgBpE;;;;;;OAMG;IACH,MAAM,CAAC,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,GAAG,WAAW;IAkC1G;;;;;OAKG;WACU,sBAAsB,CACjC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,aAAa,GAAG,YAAY,GAAG,MAAM,GAClE,OAAO,CAAC,qBAAqB,CAAC;CAalC"}
1
+ {"version":3,"file":"tokenManager.d.ts","sourceRoot":"","sources":["../../src/security/tokenManager.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,12 @@
4
4
  import { logger } from '../utils/logger.js';
5
5
  import { RateLimiter } from '../update/RateLimiter.js';
6
6
  import { SecurityError } from './errors.js';
7
+ import * as crypto from 'crypto';
8
+ import * as fs from 'fs/promises';
9
+ import * as path from 'path';
10
+ import { homedir } from 'os';
11
+ import { SecurityMonitor } from './securityMonitor.js';
12
+ import { UnicodeValidator } from './validators/unicodeValidator.js';
7
13
  /**
8
14
  * Secure GitHub token manager with validation and protection
9
15
  */
@@ -14,6 +20,15 @@ export class TokenManager {
14
20
  USER_ACCESS_TOKEN: /^ghu_[A-Za-z0-9_]{36,}$/,
15
21
  REFRESH_TOKEN: /^ghr_[A-Za-z0-9_]{36,}$/
16
22
  };
23
+ // Secure storage configuration
24
+ static TOKEN_DIR = path.join(homedir(), '.dollhouse', '.auth');
25
+ static TOKEN_FILE = 'github_token.enc';
26
+ static ALGORITHM = 'aes-256-gcm';
27
+ static KEY_LENGTH = 32;
28
+ static IV_LENGTH = 16;
29
+ static TAG_LENGTH = 16;
30
+ static SALT_LENGTH = 32;
31
+ static ITERATIONS = 100000;
17
32
  // Rate limiter for token validation operations - prevents brute force attacks
18
33
  static tokenValidationLimiter = null;
19
34
  /**
@@ -282,5 +297,188 @@ export class TokenManager {
282
297
  const requiredScopes = this.getRequiredScopes(operation);
283
298
  return this.validateTokenScopes(token, requiredScopes);
284
299
  }
300
+ /**
301
+ * Derive encryption key from a passphrase
302
+ */
303
+ static deriveKey(passphrase, salt) {
304
+ return crypto.pbkdf2Sync(passphrase, salt, this.ITERATIONS, this.KEY_LENGTH, 'sha256');
305
+ }
306
+ /**
307
+ * Get machine-specific passphrase for encryption
308
+ * Uses a combination of machine ID and user info for uniqueness
309
+ */
310
+ static getMachinePassphrase() {
311
+ // Use a combination of hostname, username, and a fixed app identifier
312
+ const hostname = crypto.createHash('sha256').update(homedir()).digest('hex').substring(0, 16);
313
+ const username = crypto.createHash('sha256').update(process.env.USER || 'default').digest('hex').substring(0, 16);
314
+ const appId = 'DollhouseMCP-TokenStore-v1';
315
+ return `${appId}-${hostname}-${username}`;
316
+ }
317
+ /**
318
+ * Store GitHub token securely to file
319
+ */
320
+ static async storeGitHubToken(token) {
321
+ try {
322
+ // Validate token format first
323
+ if (!this.validateTokenFormat(token)) {
324
+ throw new SecurityError('Invalid token format');
325
+ }
326
+ // Normalize and validate token
327
+ const validation = UnicodeValidator.normalize(token);
328
+ if (!validation.isValid) {
329
+ throw new SecurityError('Token contains invalid characters');
330
+ }
331
+ // Ensure directory exists
332
+ await fs.mkdir(this.TOKEN_DIR, { recursive: true, mode: 0o700 });
333
+ // Generate encryption components
334
+ const salt = crypto.randomBytes(this.SALT_LENGTH);
335
+ const iv = crypto.randomBytes(this.IV_LENGTH);
336
+ const passphrase = this.getMachinePassphrase();
337
+ const key = this.deriveKey(passphrase, salt);
338
+ // Encrypt token
339
+ const cipher = crypto.createCipheriv(this.ALGORITHM, key, iv);
340
+ const encrypted = Buffer.concat([
341
+ cipher.update(validation.normalizedContent, 'utf8'),
342
+ cipher.final()
343
+ ]);
344
+ const tag = cipher.getAuthTag();
345
+ // Create storage format: salt + iv + tag + encrypted
346
+ const stored = Buffer.concat([salt, iv, tag, encrypted]);
347
+ // Write to file with restricted permissions
348
+ const tokenPath = path.join(this.TOKEN_DIR, this.TOKEN_FILE);
349
+ await fs.writeFile(tokenPath, stored, { mode: 0o600 });
350
+ // Log security event
351
+ SecurityMonitor.logSecurityEvent({
352
+ type: 'TOKEN_VALIDATION_SUCCESS',
353
+ severity: 'LOW',
354
+ source: 'TokenManager.storeGitHubToken',
355
+ details: 'GitHub token stored securely',
356
+ metadata: {
357
+ tokenType: this.getTokenType(token),
358
+ tokenPrefix: this.getTokenPrefix(token)
359
+ }
360
+ });
361
+ logger.info('GitHub token stored securely');
362
+ }
363
+ catch (error) {
364
+ SecurityMonitor.logSecurityEvent({
365
+ type: 'TOKEN_VALIDATION_FAILURE',
366
+ severity: 'MEDIUM',
367
+ source: 'TokenManager.storeGitHubToken',
368
+ details: `Failed to store GitHub token: ${error instanceof Error ? error.message : 'Unknown error'}`
369
+ });
370
+ throw new SecurityError(`Failed to store token: ${error instanceof Error ? error.message : 'Unknown error'}`);
371
+ }
372
+ }
373
+ /**
374
+ * Retrieve GitHub token from secure storage
375
+ */
376
+ static async retrieveGitHubToken() {
377
+ try {
378
+ const tokenPath = path.join(this.TOKEN_DIR, this.TOKEN_FILE);
379
+ // Check if file exists
380
+ try {
381
+ await fs.access(tokenPath);
382
+ }
383
+ catch {
384
+ // No stored token
385
+ return null;
386
+ }
387
+ // Read encrypted data
388
+ const stored = await fs.readFile(tokenPath);
389
+ // Extract components
390
+ const salt = stored.subarray(0, this.SALT_LENGTH);
391
+ const iv = stored.subarray(this.SALT_LENGTH, this.SALT_LENGTH + this.IV_LENGTH);
392
+ const tag = stored.subarray(this.SALT_LENGTH + this.IV_LENGTH, this.SALT_LENGTH + this.IV_LENGTH + this.TAG_LENGTH);
393
+ const encrypted = stored.subarray(this.SALT_LENGTH + this.IV_LENGTH + this.TAG_LENGTH);
394
+ // Derive decryption key
395
+ const passphrase = this.getMachinePassphrase();
396
+ const key = this.deriveKey(passphrase, salt);
397
+ // Decrypt token
398
+ const decipher = crypto.createDecipheriv(this.ALGORITHM, key, iv);
399
+ decipher.setAuthTag(tag);
400
+ const decrypted = Buffer.concat([
401
+ decipher.update(encrypted),
402
+ decipher.final()
403
+ ]).toString('utf8');
404
+ // Validate decrypted token
405
+ if (!this.validateTokenFormat(decrypted)) {
406
+ SecurityMonitor.logSecurityEvent({
407
+ type: 'TOKEN_VALIDATION_FAILURE',
408
+ severity: 'HIGH',
409
+ source: 'TokenManager.retrieveGitHubToken',
410
+ details: 'Decrypted token has invalid format'
411
+ });
412
+ return null;
413
+ }
414
+ SecurityMonitor.logSecurityEvent({
415
+ type: 'TOKEN_VALIDATION_SUCCESS',
416
+ severity: 'LOW',
417
+ source: 'TokenManager.retrieveGitHubToken',
418
+ details: 'GitHub token retrieved from secure storage',
419
+ metadata: {
420
+ tokenType: this.getTokenType(decrypted),
421
+ tokenPrefix: this.getTokenPrefix(decrypted)
422
+ }
423
+ });
424
+ return decrypted;
425
+ }
426
+ catch (error) {
427
+ SecurityMonitor.logSecurityEvent({
428
+ type: 'TOKEN_VALIDATION_FAILURE',
429
+ severity: 'MEDIUM',
430
+ source: 'TokenManager.retrieveGitHubToken',
431
+ details: `Failed to retrieve GitHub token: ${error instanceof Error ? error.message : 'Unknown error'}`
432
+ });
433
+ logger.debug('Failed to retrieve stored token', { error });
434
+ return null;
435
+ }
436
+ }
437
+ /**
438
+ * Remove stored GitHub token
439
+ */
440
+ static async removeStoredToken() {
441
+ try {
442
+ const tokenPath = path.join(this.TOKEN_DIR, this.TOKEN_FILE);
443
+ // Check if file exists before attempting deletion
444
+ try {
445
+ await fs.access(tokenPath);
446
+ await fs.unlink(tokenPath);
447
+ SecurityMonitor.logSecurityEvent({
448
+ type: 'TOKEN_CACHE_CLEARED',
449
+ severity: 'LOW',
450
+ source: 'TokenManager.removeStoredToken',
451
+ details: 'GitHub token removed from secure storage'
452
+ });
453
+ logger.info('Stored GitHub token removed');
454
+ }
455
+ catch (error) {
456
+ // File doesn't exist or couldn't be deleted
457
+ logger.debug('No stored token to remove');
458
+ }
459
+ }
460
+ catch (error) {
461
+ SecurityMonitor.logSecurityEvent({
462
+ type: 'TOKEN_CACHE_CLEARED',
463
+ severity: 'LOW',
464
+ source: 'TokenManager.removeStoredToken',
465
+ details: `Failed to remove stored token: ${error instanceof Error ? error.message : 'Unknown error'}`
466
+ });
467
+ logger.warn('Failed to remove stored token', { error });
468
+ }
469
+ }
470
+ /**
471
+ * Get GitHub token from environment or secure storage
472
+ * Updated to check secure storage if environment variable not set
473
+ */
474
+ static async getGitHubTokenAsync() {
475
+ // First check environment variable
476
+ const envToken = this.getGitHubToken();
477
+ if (envToken) {
478
+ return envToken;
479
+ }
480
+ // Fall back to secure storage
481
+ return this.retrieveGitHubToken();
482
+ }
285
483
  }
286
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L3Rva2VuTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQW1CNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRztRQUM5QyxxQkFBcUIsRUFBRSx5QkFBeUI7UUFDaEQsa0JBQWtCLEVBQUUseUJBQXlCO1FBQzdDLGlCQUFpQixFQUFFLHlCQUF5QjtRQUM1QyxhQUFhLEVBQUUseUJBQXlCO0tBQ3pDLENBQUM7SUFFRiw4RUFBOEU7SUFDdEUsTUFBTSxDQUFDLHNCQUFzQixHQUF1QixJQUFJLENBQUM7SUFFakU7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLHlCQUF5QjtRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBQ3BFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLDRCQUE0QjtRQUNqQyxPQUFPLElBQUksV0FBVyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxFQUFFLEVBQVcseUJBQXlCO1lBQ25ELFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxXQUFXO1lBQ3JDLFVBQVUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFNLHFDQUFxQztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gs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QUFFLDJCQUEyQjthQUNuQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJlIEdpdEh1YiB0b2tlbiBtYW5hZ2VtZW50IGFuZCB2YWxpZGF0aW9uXG4gKi9cblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFJhdGVMaW1pdGVyIH0gZnJvbSAnLi4vdXBkYXRlL1JhdGVMaW1pdGVyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5TY29wZXMge1xuICByZXF1aXJlZDogc3RyaW5nW107XG4gIG9wdGlvbmFsPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5WYWxpZGF0aW9uUmVzdWx0IHtcbiAgaXNWYWxpZDogYm9vbGVhbjtcbiAgc2NvcGVzPzogc3RyaW5nW107XG4gIHJhdGVMaW1pdD86IHtcbiAgICByZW1haW5pbmc6IG51bWJlcjtcbiAgICByZXNldFRpbWU6IERhdGU7XG4gIH07XG4gIHJhdGVMaW1pdEV4Y2VlZGVkPzogYm9vbGVhbjtcbiAgcmV0cnlBZnRlck1zPzogbnVtYmVyO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWN1cmUgR2l0SHViIHRva2VuIG1hbmFnZXIgd2l0aCB2YWxpZGF0aW9uIGFuZCBwcm90ZWN0aW9uXG4gKi9cbmV4cG9ydCBjbGFzcyBUb2tlbk1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBHSVRIVUJfVE9LRU5fUEFUVEVSTlMgPSB7XG4gICAgUEVSU09OQUxfQUNDRVNTX1RPS0VOOiAvXmdocF9bQS1aYS16MC05X117MzYsfSQvLFxuICAgIElOU1RBTExBVElPTl9UT0tFTjogL15naHNfW0EtWmEtejAtOV9dezM2LH0kLyxcbiAgICBVU0VSX0FDQ0VTU19UT0tFTjogL15naHVfW0EtWmEtejAtOV9dezM2LH0kLyxcbiAgICBSRUZSRVNIX1RPS0VOOiAvXmdocl9bQS1aYS16MC05X117MzYsfSQvXG4gIH07XG5cbiAgLy8gUmF0ZSBsaW1pdGVyIGZvciB0b2tlbiB2YWxpZGF0aW9uIG9wZXJhdGlvbnMgLSBwcmV2ZW50cyBicnV0ZSBmb3JjZSBhdHRhY2tzXG4gIHByaXZhdGUgc3RhdGljIHRva2VuVmFsaWRhdGlvbkxpbWl0ZXI6IFJhdGVMaW1pdGVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCBvciBjcmVhdGUgdGhlIHRva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdGVyXG4gICAqIFByZXZlbnRzIGJydXRlIGZvcmNlIHRva2VuIHZhbGlkYXRpb24gYXR0YWNrc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0VG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiBSYXRlTGltaXRlciB7XG4gICAgaWYgKCF0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXIpIHtcbiAgICAgIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlciA9IHRoaXMuY3JlYXRlVG9rZW5WYWxpZGF0aW9uTGltaXRlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlblZhbGlkYXRpb25MaW1pdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhdGUgbGltaXRlciBzcGVjaWZpY2FsbHkgZm9yIHRva2VuIHZhbGlkYXRpb25cbiAgICogQ29uc2VydmF0aXZlIGxpbWl0cyB0byBwcmV2ZW50IGFidXNlIHdoaWxlIGFsbG93aW5nIGxlZ2l0aW1hdGUgdXNhZ2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk6IFJhdGVMaW1pdGVyIHtcbiAgICByZXR1cm4gbmV3IFJhdGVMaW1pdGVyKHtcbiAgICAgIG1heFJlcXVlc3RzOiAxMCwgICAgICAgICAgLy8gMTAgdmFsaWRhdGlvbiBhdHRlbXB0c1xuICAgICAgd2luZG93TXM6IDYwICogNjAgKiAxMDAwLCAvLyBwZXIgaG91clxuICAgICAgbWluRGVsYXlNczogNSAqIDEwMDAgICAgICAvLyA1IHNlY29uZHMgbWluaW11bSBiZXR3ZWVuIGF0dGVtcHRzXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIHRva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdGVyXG4gICAqIFVzZWZ1bCBmb3IgdGVzdGluZyBvciBtYW51YWwgaW50ZXJ2ZW50aW9uXG4gICAqL1xuICBzdGF0aWMgcmVzZXRUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk6IHZvaWQge1xuICAgIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlcj8ucmVzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBHaXRIdWIgdG9rZW4gZm9ybWF0XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVUb2tlbkZvcm1hdCh0b2tlbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0b2tlbiB8fCB0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYWdhaW5zdCBhbGwga25vd24gR2l0SHViIHRva2VuIHBhdHRlcm5zXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMpLnNvbWUocGF0dGVybiA9PiBcbiAgICAgIHBhdHRlcm4udGVzdCh0b2tlbilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBHaXRIdWIgdG9rZW4gZnJvbSBlbnZpcm9ubWVudCB3aXRoIHZhbGlkYXRpb25cbiAgICovXG4gIHN0YXRpYyBnZXRHaXRIdWJUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTjtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ05vIEdpdEh1YiB0b2tlbiBmb3VuZCBpbiBlbnZpcm9ubWVudCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW4pKSB7XG4gICAgICBsb2dnZXIud2FybignSW52YWxpZCBHaXRIdWIgdG9rZW4gZm9ybWF0IGRldGVjdGVkJywge1xuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbiksXG4gICAgICAgIGxlbmd0aDogdG9rZW4ubGVuZ3RoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnVmFsaWQgR2l0SHViIHRva2VuIGZvdW5kJywge1xuICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZSh0b2tlbiksXG4gICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICB9KTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWRhY3QgdG9rZW4gZm9yIHNhZmUgbG9nZ2luZ1xuICAgKi9cbiAgc3RhdGljIHJlZGFjdFRva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghdG9rZW4gfHwgdG9rZW4ubGVuZ3RoIDwgOCkge1xuICAgICAgcmV0dXJuICdbUkVEQUNURURdJztcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygwLCA0KSArICcuLi4nICsgdG9rZW4uc3Vic3RyaW5nKHRva2VuLmxlbmd0aCAtIDQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0b2tlbiB0eXBlIGZyb20gZm9ybWF0XG4gICAqL1xuICBzdGF0aWMgZ2V0VG9rZW5UeXBlKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5QRVJTT05BTF9BQ0NFU1NfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnUGVyc29uYWwgQWNjZXNzIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLklOU1RBTExBVElPTl9UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdJbnN0YWxsYXRpb24gVG9rZW4nO1xuICAgIH1cbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuVVNFUl9BQ0NFU1NfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnVXNlciBBY2Nlc3MgVG9rZW4nO1xuICAgIH1cbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuUkVGUkVTSF9UT0tFTi50ZXN0KHRva2VuKSkge1xuICAgICAgcmV0dXJuICdSZWZyZXNoIFRva2VuJztcbiAgICB9XG4gICAgcmV0dXJuICdVbmtub3duJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2FmZSB0b2tlbiBwcmVmaXggZm9yIGxvZ2dpbmdcbiAgICovXG4gIHN0YXRpYyBnZXRUb2tlblByZWZpeCh0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuLmxlbmd0aCA8IDQpIHtcbiAgICAgIHJldHVybiAnW0lOVkFMSURdJztcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuLnN1YnN0cmluZygwLCA0KSArICcuLi4nO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRva2VuIHNjb3BlcyB2aWEgR2l0SHViIEFQSVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHZhbGlkYXRlVG9rZW5TY29wZXMoXG4gICAgdG9rZW46IHN0cmluZywgXG4gICAgcmVxdWlyZWRTY29wZXM6IFRva2VuU2NvcGVzXG4gICk6IFByb21pc2U8VG9rZW5WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgLy8gVmFsaWRhdGUgdG9rZW4gZm9ybWF0IGJlZm9yZSBjb25zdW1pbmcgcmF0ZSBsaW1pdFxuICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yOiAnSW52YWxpZCB0b2tlbiBmb3JtYXQnXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENoZWNrIHJhdGUgbGltaXQgYmVmb3JlIG1ha2luZyBBUEkgY2FsbFxuICAgIGNvbnN0IHJhdGVMaW1pdGVyID0gdGhpcy5nZXRUb2tlblZhbGlkYXRpb25MaW1pdGVyKCk7XG4gICAgY29uc3QgcmF0ZUxpbWl0U3RhdHVzID0gcmF0ZUxpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuXG4gICAgaWYgKCFyYXRlTGltaXRTdGF0dXMuYWxsb3dlZCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdCBleGNlZWRlZCcsIHtcbiAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICByZXRyeUFmdGVyTXM6IHJhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXMsXG4gICAgICAgIHJlbWFpbmluZ1Rva2VuczogcmF0ZUxpbWl0U3RhdHVzLnJlbWFpbmluZ1Rva2Vuc1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKFxuICAgICAgICBgVG9rZW4gdmFsaWRhdGlvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2UgcmV0cnkgaW4gJHtNYXRoLmNlaWwoKHJhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXMgfHwgMCkgLyAxMDAwKX0gc2Vjb25kcy5gLFxuICAgICAgICAnUkFURV9MSU1JVF9FWENFRURFRCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnN1bWUgcmF0ZSBsaW1pdCB0b2tlbiBmb3IgdGhpcyB2YWxpZGF0aW9uIGF0dGVtcHRcbiAgICAgIHJhdGVMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuICAgICAgLy8gTWFrZSBhIHRlc3QgQVBJIGNhbGwgdG8gY2hlY2sgdG9rZW4gdmFsaWRpdHkgYW5kIHNjb3Blc1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2VyJywge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICAgJ1VzZXItQWdlbnQnOiAnRG9sbGhvdXNlTUNQLzEuMCdcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJhdGVMaW1pdFJlbWFpbmluZyA9IHBhcnNlSW50KHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1yZW1haW5pbmcnKSB8fCAnMCcpO1xuICAgICAgY29uc3QgcmF0ZUxpbWl0UmVzZXQgPSBwYXJzZUludChyZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQnKSB8fCAnMCcpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gYEdpdEh1YiBBUEkgZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YDtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIHZhbGlkYXRpb24gZmFpbGVkJywge1xuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIC8vIEV4dHJhY3Qgc2NvcGVzIGZyb20gcmVzcG9uc2UgaGVhZGVyc1xuICAgICAgY29uc3Qgc2NvcGVzSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtb2F1dGgtc2NvcGVzJykgfHwgJyc7XG4gICAgICBjb25zdCB0b2tlblNjb3BlcyA9IHNjb3Blc0hlYWRlci5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKS5maWx0ZXIocyA9PiBzKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgcmVxdWlyZWQgc2NvcGVzIGFyZSBwcmVzZW50XG4gICAgICBjb25zdCBoYXNSZXF1aXJlZFNjb3BlcyA9IHJlcXVpcmVkU2NvcGVzLnJlcXVpcmVkLmV2ZXJ5KHNjb3BlID0+IFxuICAgICAgICB0b2tlblNjb3Blcy5pbmNsdWRlcyhzY29wZSlcbiAgICAgICk7XG5cbiAgICAgIGlmICghaGFzUmVxdWlyZWRTY29wZXMpIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ1Njb3BlcyA9IHJlcXVpcmVkU2NvcGVzLnJlcXVpcmVkLmZpbHRlcihzY29wZSA9PiBcbiAgICAgICAgICAhdG9rZW5TY29wZXMuaW5jbHVkZXMoc2NvcGUpXG4gICAgICAgICk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIud2FybignVG9rZW4gbWlzc2luZyByZXF1aXJlZCBzY29wZXMnLCB7XG4gICAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICAgIG1pc3NpbmdTY29wZXM6IG1pc3NpbmdTY29wZXMsXG4gICAgICAgICAgY3VycmVudFNjb3BlczogdG9rZW5TY29wZXNcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICBzY29wZXM6IHRva2VuU2NvcGVzLFxuICAgICAgICAgIGVycm9yOiBgTWlzc2luZyByZXF1aXJlZCBzY29wZXM6ICR7bWlzc2luZ1Njb3Blcy5qb2luKCcsICcpfWBcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbG9nZ2VyLmluZm8oJ1Rva2VuIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bCcsIHtcbiAgICAgICAgdG9rZW5UeXBlOiB0aGlzLmdldFRva2VuVHlwZSh0b2tlbiksXG4gICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKSxcbiAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgcmF0ZUxpbWl0UmVtYWluaW5nOiByYXRlTGltaXRSZW1haW5pbmdcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiB0cnVlLFxuICAgICAgICBzY29wZXM6IHRva2VuU2NvcGVzLFxuICAgICAgICByYXRlTGltaXQ6IHtcbiAgICAgICAgICByZW1haW5pbmc6IHJhdGVMaW1pdFJlbWFpbmluZyxcbiAgICAgICAgICByZXNldFRpbWU6IG5ldyBEYXRlKHJhdGVMaW1pdFJlc2V0ICogMTAwMClcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgU2VjdXJpdHlFcnJvciAoaW5jbHVkaW5nIHJhdGUgbGltaXQgZXJyb3JzKSBzZXBhcmF0ZWx5XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZWN1cml0eUVycm9yICYmIGVycm9yLmNvZGUgPT09ICdSQVRFX0xJTUlUX0VYQ0VFREVEJykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gcmF0ZUxpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIHJhdGVMaW1pdEV4Y2VlZGVkOiB0cnVlLFxuICAgICAgICAgIHJldHJ5QWZ0ZXJNczogY3VycmVudFN0YXR1cy5yZXRyeUFmdGVyTXMsXG4gICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2VcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcic7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1Rva2VuIHZhbGlkYXRpb24gZXJyb3InLCB7XG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogYFZhbGlkYXRpb24gZXJyb3I6ICR7ZXJyb3JNZXNzYWdlfWBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBzYWZlIGVycm9yIG1lc3NhZ2Ugd2l0aG91dCB0b2tlbiBleHBvc3VyZVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UoZXJyb3I6IHN0cmluZywgdG9rZW4/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFJlbW92ZSBhbnkgcG90ZW50aWFsIHRva2VuIGRhdGEgZnJvbSBlcnJvciBtZXNzYWdlc1xuICAgIGxldCBzYWZlTWVzc2FnZSA9IGVycm9yXG4gICAgICAucmVwbGFjZSgvZ2hwX1tBLVphLXowLTlfXXszNix9L2csICdbUkVEQUNURURfUEFUXScpXG4gICAgICAucmVwbGFjZSgvZ2hzX1tBLVphLXowLTlfXXszNix9L2csICdbUkVEQUNURURfSU5TVEFMTF0nKVxuICAgICAgLnJlcGxhY2UoL2dodV9bQS1aYS16MC05X117MzYsfS9nLCAnW1JFREFDVEVEX1VTRVJdJylcbiAgICAgIC5yZXBsYWNlKC9naHJfW0EtWmEtejAtOV9dezM2LH0vZywgJ1tSRURBQ1RFRF9SRUZSRVNIXScpO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBjb25zdCB0b2tlblByZWZpeCA9IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pO1xuICAgICAgc2FmZU1lc3NhZ2UgKz0gYCAoVG9rZW46ICR7dG9rZW5QcmVmaXh9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhZmVNZXNzYWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtaW5pbXVtIHJlcXVpcmVkIHNjb3BlcyBmb3IgZGlmZmVyZW50IG9wZXJhdGlvbnNcbiAgICogXG4gICAqIE5PVEU6IFRoZSAnbWFya2V0cGxhY2UnIHNjb3BlIGlkZW50aWZpZXIgaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKiB3aXRoIGV4aXN0aW5nIHRva2VuIHZhbGlkYXRpb25zLiBUaGlzIGlzIGFuIGludGVybmFsIHNjb3BlIG5hbWUgYW5kIGRvZXMgbm90XG4gICAqIGFmZmVjdCB1c2VyLWZhY2luZyBmdW5jdGlvbmFsaXR5LiAoUFIgIzI4MClcbiAgICovXG4gIHN0YXRpYyBnZXRSZXF1aXJlZFNjb3BlcyhvcGVyYXRpb246ICdyZWFkJyB8ICd3cml0ZScgfCAnbWFya2V0cGxhY2UnIHwgJ2NvbGxlY3Rpb24nIHwgJ2dpc3QnKTogVG9rZW5TY29wZXMge1xuICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICBjYXNlICdyZWFkJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydyZXBvJ10sXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ3dyaXRlJzpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydyZXBvJ10sXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ21hcmtldHBsYWNlJzogLy8gSW50ZXJuYWwgc2NvcGUgbmFtZSBrZXB0IGZvciBjb21wYXRpYmlsaXR5IChQUiAjMjgwKVxuICAgICAgY2FzZSAnY29sbGVjdGlvbic6IC8vIE5ldyBwcmVmZXJyZWQgbmFtZVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ3JlcG8nXSxcbiAgICAgICAgICBvcHRpb25hbDogWyd1c2VyOmVtYWlsJ11cbiAgICAgICAgfTtcbiAgICAgIFxuICAgICAgY2FzZSAnZ2lzdCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsnZ2lzdCddLFxuICAgICAgICAgIG9wdGlvbmFsOiBbJ3VzZXI6ZW1haWwnXVxuICAgICAgICB9O1xuICAgICAgXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ3JlcG8nXVxuICAgICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0b2tlbiBoYXMgc3VmZmljaWVudCBwZXJtaXNzaW9ucyBmb3Igb3BlcmF0aW9uXG4gICAqIFxuICAgKiBOT1RFOiBUaGUgJ21hcmtldHBsYWNlJyBvcGVyYXRpb24gdHlwZSBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gYWNjZXNzaW5nIGNvbGxlY3Rpb24gZmVhdHVyZXMuIChQUiAjMjgwKVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGVuc3VyZVRva2VuUGVybWlzc2lvbnMoXG4gICAgb3BlcmF0aW9uOiAncmVhZCcgfCAnd3JpdGUnIHwgJ21hcmtldHBsYWNlJyB8ICdjb2xsZWN0aW9uJyB8ICdnaXN0J1xuICApOiBQcm9taXNlPFRva2VuVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRHaXRIdWJUb2tlbigpO1xuICAgIFxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogJ05vIEdpdEh1YiB0b2tlbiBhdmFpbGFibGUnXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVkU2NvcGVzID0gdGhpcy5nZXRSZXF1aXJlZFNjb3BlcyhvcGVyYXRpb24pO1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVG9rZW5TY29wZXModG9rZW4sIHJlcXVpcmVkU2NvcGVzKTtcbiAgfVxufSJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5NYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L3Rva2VuTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQW1CcEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUNmLE1BQU0sQ0FBVSxxQkFBcUIsR0FBRztRQUM5QyxxQkFBcUIsRUFBRSx5QkFBeUI7UUFDaEQsa0JBQWtCLEVBQUUseUJBQXlCO1FBQzdDLGlCQUFpQixFQUFFLHlCQUF5QjtRQUM1QyxhQUFhLEVBQUUseUJBQXlCO0tBQ3pDLENBQUM7SUFFRiwrQkFBK0I7SUFDdkIsTUFBTSxDQUFVLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQVUsVUFBVSxHQUFHLGtCQUFrQixDQUFDO0lBQ2hELE1BQU0sQ0FBVSxTQUFTLEdBQUcsYUFBYSxDQUFDO0lBQzFDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hDLE1BQU0sQ0FBVSxTQUFTLEdB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SyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsbUJBQW1CO1FBQzlCLG1DQUFtQztRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZWN1cmUgR2l0SHViIHRva2VuIG1hbmFnZW1lbnQgYW5kIHZhbGlkYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi91cGRhdGUvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCAqIGFzIGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMvcHJvbWlzZXMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuU2NvcGVzIHtcbiAgcmVxdWlyZWQ6IHN0cmluZ1tdO1xuICBvcHRpb25hbD86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuVmFsaWRhdGlvblJlc3VsdCB7XG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIHNjb3Blcz86IHN0cmluZ1tdO1xuICByYXRlTGltaXQ/OiB7XG4gICAgcmVtYWluaW5nOiBudW1iZXI7XG4gICAgcmVzZXRUaW1lOiBEYXRlO1xuICB9O1xuICByYXRlTGltaXRFeGNlZWRlZD86IGJvb2xlYW47XG4gIHJldHJ5QWZ0ZXJNcz86IG51bWJlcjtcbiAgZXJyb3I/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VjdXJlIEdpdEh1YiB0b2tlbiBtYW5hZ2VyIHdpdGggdmFsaWRhdGlvbiBhbmQgcHJvdGVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgVG9rZW5NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgR0lUSFVCX1RPS0VOX1BBVFRFUk5TID0ge1xuICAgIFBFUlNPTkFMX0FDQ0VTU19UT0tFTjogL15naHBfW0EtWmEtejAtOV9dezM2LH0kLyxcbiAgICBJTlNUQUxMQVRJT05fVE9LRU46IC9eZ2hzX1tBLVphLXowLTlfXXszNix9JC8sXG4gICAgVVNFUl9BQ0NFU1NfVE9LRU46IC9eZ2h1X1tBLVphLXowLTlfXXszNix9JC8sXG4gICAgUkVGUkVTSF9UT0tFTjogL15naHJfW0EtWmEtejAtOV9dezM2LH0kL1xuICB9O1xuXG4gIC8vIFNlY3VyZSBzdG9yYWdlIGNvbmZpZ3VyYXRpb25cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fRElSID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5kb2xsaG91c2UnLCAnLmF1dGgnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVE9LRU5fRklMRSA9ICdnaXRodWJfdG9rZW4uZW5jJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxHT1JJVEhNID0gJ2Flcy0yNTYtZ2NtJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgS0VZX0xFTkdUSCA9IDMyO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJVl9MRU5HVEggPSAxNjtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVEFHX0xFTkdUSCA9IDE2O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQUxUX0xFTkdUSCA9IDMyO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBJVEVSQVRJT05TID0gMTAwMDAwO1xuXG4gIC8vIFJhdGUgbGltaXRlciBmb3IgdG9rZW4gdmFsaWRhdGlvbiBvcGVyYXRpb25zIC0gcHJldmVudHMgYnJ1dGUgZm9yY2UgYXR0YWNrc1xuICBwcml2YXRlIHN0YXRpYyB0b2tlblZhbGlkYXRpb25MaW1pdGVyOiBSYXRlTGltaXRlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBHZXQgb3IgY3JlYXRlIHRoZSB0b2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXRlclxuICAgKiBQcmV2ZW50cyBicnV0ZSBmb3JjZSB0b2tlbiB2YWxpZGF0aW9uIGF0dGFja3NcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldFRva2VuVmFsaWRhdGlvbkxpbWl0ZXIoKTogUmF0ZUxpbWl0ZXIge1xuICAgIGlmICghdGhpcy50b2tlblZhbGlkYXRpb25MaW1pdGVyKSB7XG4gICAgICB0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXIgPSB0aGlzLmNyZWF0ZVRva2VuVmFsaWRhdGlvbkxpbWl0ZXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5WYWxpZGF0aW9uTGltaXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYXRlIGxpbWl0ZXIgc3BlY2lmaWNhbGx5IGZvciB0b2tlbiB2YWxpZGF0aW9uXG4gICAqIENvbnNlcnZhdGl2ZSBsaW1pdHMgdG8gcHJldmVudCBhYnVzZSB3aGlsZSBhbGxvd2luZyBsZWdpdGltYXRlIHVzYWdlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlVG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiBSYXRlTGltaXRlciB7XG4gICAgcmV0dXJuIG5ldyBSYXRlTGltaXRlcih7XG4gICAgICBtYXhSZXF1ZXN0czogMTAsICAgICAgICAgIC8vIDEwIHZhbGlkYXRpb24gYXR0ZW1wdHNcbiAgICAgIHdpbmRvd01zOiA2MCAqIDYwICogMTAwMCwgLy8gcGVyIGhvdXJcbiAgICAgIG1pbkRlbGF5TXM6IDUgKiAxMDAwICAgICAgLy8gNSBzZWNvbmRzIG1pbmltdW0gYmV0d2VlbiBhdHRlbXB0c1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSB0b2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXRlclxuICAgKiBVc2VmdWwgZm9yIHRlc3Rpbmcgb3IgbWFudWFsIGludGVydmVudGlvblxuICAgKi9cbiAgc3RhdGljIHJlc2V0VG9rZW5WYWxpZGF0aW9uTGltaXRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuVmFsaWRhdGlvbkxpbWl0ZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgR2l0SHViIHRva2VuIGZvcm1hdFxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlVG9rZW5Gb3JtYXQodG9rZW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdG9rZW4gfHwgdHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGFnYWluc3QgYWxsIGtub3duIEdpdEh1YiB0b2tlbiBwYXR0ZXJuc1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TKS5zb21lKHBhdHRlcm4gPT4gXG4gICAgICBwYXR0ZXJuLnRlc3QodG9rZW4pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZyb20gZW52aXJvbm1lbnQgd2l0aCB2YWxpZGF0aW9uXG4gICAqL1xuICBzdGF0aWMgZ2V0R2l0SHViVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5HSVRIVUJfVE9LRU47XG4gICAgXG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgbG9nZ2VyLmRlYnVnKCdObyBHaXRIdWIgdG9rZW4gZm91bmQgaW4gZW52aXJvbm1lbnQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgR2l0SHViIHRva2VuIGZvcm1hdCBkZXRlY3RlZCcsIHtcbiAgICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pLFxuICAgICAgICBsZW5ndGg6IHRva2VuLmxlbmd0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoJ1ZhbGlkIEdpdEh1YiB0b2tlbiBmb3VuZCcsIHtcbiAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgdG9rZW5QcmVmaXg6IHRoaXMuZ2V0VG9rZW5QcmVmaXgodG9rZW4pXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogUmVkYWN0IHRva2VuIGZvciBzYWZlIGxvZ2dpbmdcbiAgICovXG4gIHN0YXRpYyByZWRhY3RUb2tlbih0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXRva2VuIHx8IHRva2VuLmxlbmd0aCA8IDgpIHtcbiAgICAgIHJldHVybiAnW1JFREFDVEVEXSc7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMCwgNCkgKyAnLi4uJyArIHRva2VuLnN1YnN0cmluZyh0b2tlbi5sZW5ndGggLSA0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdG9rZW4gdHlwZSBmcm9tIGZvcm1hdFxuICAgKi9cbiAgc3RhdGljIGdldFRva2VuVHlwZSh0b2tlbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5HSVRIVUJfVE9LRU5fUEFUVEVSTlMuUEVSU09OQUxfQUNDRVNTX1RPS0VOLnRlc3QodG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ1BlcnNvbmFsIEFjY2VzcyBUb2tlbic7XG4gICAgfVxuICAgIGlmICh0aGlzLkdJVEhVQl9UT0tFTl9QQVRURVJOUy5JTlNUQUxMQVRJT05fVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnSW5zdGFsbGF0aW9uIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLlVTRVJfQUNDRVNTX1RPS0VOLnRlc3QodG9rZW4pKSB7XG4gICAgICByZXR1cm4gJ1VzZXIgQWNjZXNzIFRva2VuJztcbiAgICB9XG4gICAgaWYgKHRoaXMuR0lUSFVCX1RPS0VOX1BBVFRFUk5TLlJFRlJFU0hfVE9LRU4udGVzdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiAnUmVmcmVzaCBUb2tlbic7XG4gICAgfVxuICAgIHJldHVybiAnVW5rbm93bic7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNhZmUgdG9rZW4gcHJlZml4IGZvciBsb2dnaW5nXG4gICAqL1xuICBzdGF0aWMgZ2V0VG9rZW5QcmVmaXgodG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0b2tlbiB8fCB0b2tlbi5sZW5ndGggPCA0KSB7XG4gICAgICByZXR1cm4gJ1tJTlZBTElEXSc7XG4gICAgfVxuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMCwgNCkgKyAnLi4uJztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0b2tlbiBzY29wZXMgdmlhIEdpdEh1YiBBUElcbiAgICovXG4gIHN0YXRpYyBhc3luYyB2YWxpZGF0ZVRva2VuU2NvcGVzKFxuICAgIHRva2VuOiBzdHJpbmcsIFxuICAgIHJlcXVpcmVkU2NvcGVzOiBUb2tlblNjb3Blc1xuICApOiBQcm9taXNlPFRva2VuVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIC8vIFZhbGlkYXRlIHRva2VuIGZvcm1hdCBiZWZvcmUgY29uc3VtaW5nIHJhdGUgbGltaXRcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVUb2tlbkZvcm1hdCh0b2tlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICBlcnJvcjogJ0ludmFsaWQgdG9rZW4gZm9ybWF0J1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayByYXRlIGxpbWl0IGJlZm9yZSBtYWtpbmcgQVBJIGNhbGxcbiAgICBjb25zdCByYXRlTGltaXRlciA9IHRoaXMuZ2V0VG9rZW5WYWxpZGF0aW9uTGltaXRlcigpO1xuICAgIGNvbnN0IHJhdGVMaW1pdFN0YXR1cyA9IHJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcblxuICAgIGlmICghcmF0ZUxpbWl0U3RhdHVzLmFsbG93ZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdUb2tlbiB2YWxpZGF0aW9uIHJhdGUgbGltaXQgZXhjZWVkZWQnLCB7XG4gICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKSxcbiAgICAgICAgcmV0cnlBZnRlck1zOiByYXRlTGltaXRTdGF0dXMucmV0cnlBZnRlck1zLFxuICAgICAgICByZW1haW5pbmdUb2tlbnM6IHJhdGVMaW1pdFN0YXR1cy5yZW1haW5pbmdUb2tlbnNcbiAgICAgIH0pO1xuXG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgYFRva2VuIHZhbGlkYXRpb24gcmF0ZSBsaW1pdCBleGNlZWRlZC4gUGxlYXNlIHJldHJ5IGluICR7TWF0aC5jZWlsKChyYXRlTGltaXRTdGF0dXMucmV0cnlBZnRlck1zIHx8IDApIC8gMTAwMCl9IHNlY29uZHMuYCxcbiAgICAgICAgJ1JBVEVfTElNSVRfRVhDRUVERUQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBDb25zdW1lIHJhdGUgbGltaXQgdG9rZW4gZm9yIHRoaXMgdmFsaWRhdGlvbiBhdHRlbXB0XG4gICAgICByYXRlTGltaXRlci5jb25zdW1lVG9rZW4oKTtcbiAgICAgIC8vIE1ha2UgYSB0ZXN0IEFQSSBjYWxsIHRvIGNoZWNrIHRva2VuIHZhbGlkaXR5IGFuZCBzY29wZXNcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20vdXNlcicsIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdBdXRob3JpemF0aW9uJzogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb24nLFxuICAgICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByYXRlTGltaXRSZW1haW5pbmcgPSBwYXJzZUludChyZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVtYWluaW5nJykgfHwgJzAnKTtcbiAgICAgIGNvbnN0IHJhdGVMaW1pdFJlc2V0ID0gcGFyc2VJbnQocmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlc2V0JykgfHwgJzAnKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvciA9IGBHaXRIdWIgQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fWA7XG4gICAgICAgIGxvZ2dlci53YXJuKCdUb2tlbiB2YWxpZGF0aW9uIGZhaWxlZCcsIHtcbiAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBlcnJvclxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWN0IHNjb3BlcyBmcm9tIHJlc3BvbnNlIGhlYWRlcnNcbiAgICAgIGNvbnN0IHNjb3Blc0hlYWRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LW9hdXRoLXNjb3BlcycpIHx8ICcnO1xuICAgICAgY29uc3QgdG9rZW5TY29wZXMgPSBzY29wZXNIZWFkZXIuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHJlcXVpcmVkIHNjb3BlcyBhcmUgcHJlc2VudFxuICAgICAgY29uc3QgaGFzUmVxdWlyZWRTY29wZXMgPSByZXF1aXJlZFNjb3Blcy5yZXF1aXJlZC5ldmVyeShzY29wZSA9PiBcbiAgICAgICAgdG9rZW5TY29wZXMuaW5jbHVkZXMoc2NvcGUpXG4gICAgICApO1xuXG4gICAgICBpZiAoIWhhc1JlcXVpcmVkU2NvcGVzKSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmdTY29wZXMgPSByZXF1aXJlZFNjb3Blcy5yZXF1aXJlZC5maWx0ZXIoc2NvcGUgPT4gXG4gICAgICAgICAgIXRva2VuU2NvcGVzLmluY2x1ZGVzKHNjb3BlKVxuICAgICAgICApO1xuICAgICAgICBcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1Rva2VuIG1pc3NpbmcgcmVxdWlyZWQgc2NvcGVzJywge1xuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKSxcbiAgICAgICAgICBtaXNzaW5nU2NvcGVzOiBtaXNzaW5nU2NvcGVzLFxuICAgICAgICAgIGN1cnJlbnRTY29wZXM6IHRva2VuU2NvcGVzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgICBlcnJvcjogYE1pc3NpbmcgcmVxdWlyZWQgc2NvcGVzOiAke21pc3NpbmdTY29wZXMuam9pbignLCAnKX1gXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdUb2tlbiB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWwnLCB7XG4gICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbiksXG4gICAgICAgIHNjb3BlczogdG9rZW5TY29wZXMsXG4gICAgICAgIHJhdGVMaW1pdFJlbWFpbmluZzogcmF0ZUxpbWl0UmVtYWluaW5nXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgc2NvcGVzOiB0b2tlblNjb3BlcyxcbiAgICAgICAgcmF0ZUxpbWl0OiB7XG4gICAgICAgICAgcmVtYWluaW5nOiByYXRlTGltaXRSZW1haW5pbmcsXG4gICAgICAgICAgcmVzZXRUaW1lOiBuZXcgRGF0ZShyYXRlTGltaXRSZXNldCAqIDEwMDApXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIFNlY3VyaXR5RXJyb3IgKGluY2x1ZGluZyByYXRlIGxpbWl0IGVycm9ycykgc2VwYXJhdGVseVxuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvciAmJiBlcnJvci5jb2RlID09PSAnUkFURV9MSU1JVF9FWENFRURFRCcpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICByYXRlTGltaXRFeGNlZWRlZDogdHJ1ZSxcbiAgICAgICAgICByZXRyeUFmdGVyTXM6IGN1cnJlbnRTdGF0dXMucmV0cnlBZnRlck1zLFxuICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InO1xuICAgICAgbG9nZ2VyLmVycm9yKCdUb2tlbiB2YWxpZGF0aW9uIGVycm9yJywge1xuICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxuICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeCh0b2tlbilcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGBWYWxpZGF0aW9uIGVycm9yOiAke2Vycm9yTWVzc2FnZX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgc2FmZSBlcnJvciBtZXNzYWdlIHdpdGhvdXQgdG9rZW4gZXhwb3N1cmVcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTYWZlRXJyb3JNZXNzYWdlKGVycm9yOiBzdHJpbmcsIHRva2VuPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgYW55IHBvdGVudGlhbCB0b2tlbiBkYXRhIGZyb20gZXJyb3IgbWVzc2FnZXNcbiAgICBsZXQgc2FmZU1lc3NhZ2UgPSBlcnJvclxuICAgICAgLnJlcGxhY2UoL2docF9bQS1aYS16MC05X117MzYsfS9nLCAnW1JFREFDVEVEX1BBVF0nKVxuICAgICAgLnJlcGxhY2UoL2doc19bQS1aYS16MC05X117MzYsfS9nLCAnW1JFREFDVEVEX0lOU1RBTExdJylcbiAgICAgIC5yZXBsYWNlKC9naHVfW0EtWmEtejAtOV9dezM2LH0vZywgJ1tSRURBQ1RFRF9VU0VSXScpXG4gICAgICAucmVwbGFjZSgvZ2hyX1tBLVphLXowLTlfXXszNix9L2csICdbUkVEQUNURURfUkVGUkVTSF0nKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgY29uc3QgdG9rZW5QcmVmaXggPSB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKTtcbiAgICAgIHNhZmVNZXNzYWdlICs9IGAgKFRva2VuOiAke3Rva2VuUHJlZml4fSlgO1xuICAgIH1cblxuICAgIHJldHVybiBzYWZlTWVzc2FnZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWluaW11bSByZXF1aXJlZCBzY29wZXMgZm9yIGRpZmZlcmVudCBvcGVyYXRpb25zXG4gICAqIFxuICAgKiBOT1RFOiBUaGUgJ21hcmtldHBsYWNlJyBzY29wZSBpZGVudGlmaWVyIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBleGlzdGluZyB0b2tlbiB2YWxpZGF0aW9ucy4gVGhpcyBpcyBhbiBpbnRlcm5hbCBzY29wZSBuYW1lIGFuZCBkb2VzIG5vdFxuICAgKiBhZmZlY3QgdXNlci1mYWNpbmcgZnVuY3Rpb25hbGl0eS4gKFBSICMyODApXG4gICAqL1xuICBzdGF0aWMgZ2V0UmVxdWlyZWRTY29wZXMob3BlcmF0aW9uOiAncmVhZCcgfCAnd3JpdGUnIHwgJ21hcmtldHBsYWNlJyB8ICdjb2xsZWN0aW9uJyB8ICdnaXN0Jyk6IFRva2VuU2NvcGVzIHtcbiAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgY2FzZSAncmVhZCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncmVwbyddLFxuICAgICAgICAgIG9wdGlvbmFsOiBbJ3VzZXI6ZW1haWwnXVxuICAgICAgICB9O1xuICAgICAgXG4gICAgICBjYXNlICd3cml0ZSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IFsncmVwbyddLFxuICAgICAgICAgIG9wdGlvbmFsOiBbJ3VzZXI6ZW1haWwnXVxuICAgICAgICB9O1xuICAgICAgXG4gICAgICBjYXNlICdtYXJrZXRwbGFjZSc6IC8vIEludGVybmFsIHNjb3BlIG5hbWUga2VwdCBmb3IgY29tcGF0aWJpbGl0eSAoUFIgIzI4MClcbiAgICAgIGNhc2UgJ2NvbGxlY3Rpb24nOiAvLyBOZXcgcHJlZmVycmVkIG5hbWVcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydyZXBvJ10sXG4gICAgICAgICAgb3B0aW9uYWw6IFsndXNlcjplbWFpbCddXG4gICAgICAgIH07XG4gICAgICBcbiAgICAgIGNhc2UgJ2dpc3QnOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiBbJ2dpc3QnXSxcbiAgICAgICAgICBvcHRpb25hbDogWyd1c2VyOmVtYWlsJ11cbiAgICAgICAgfTtcbiAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogWydyZXBvJ11cbiAgICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdG9rZW4gaGFzIHN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIG9wZXJhdGlvblxuICAgKiBcbiAgICogTk9URTogVGhlICdtYXJrZXRwbGFjZScgb3BlcmF0aW9uIHR5cGUgaXMga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICogVGhpcyBpcyBjYWxsZWQgaW50ZXJuYWxseSB3aGVuIGFjY2Vzc2luZyBjb2xsZWN0aW9uIGZlYXR1cmVzLiAoUFIgIzI4MClcbiAgICovXG4gIHN0YXRpYyBhc3luYyBlbnN1cmVUb2tlblBlcm1pc3Npb25zKFxuICAgIG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdtYXJrZXRwbGFjZScgfCAnY29sbGVjdGlvbicgfCAnZ2lzdCdcbiAgKTogUHJvbWlzZTxUb2tlblZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0R2l0SHViVG9rZW4oKTtcbiAgICBcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6ICdObyBHaXRIdWIgdG9rZW4gYXZhaWxhYmxlJ1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlZFNjb3BlcyA9IHRoaXMuZ2V0UmVxdWlyZWRTY29wZXMob3BlcmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVRva2VuU2NvcGVzKHRva2VuLCByZXF1aXJlZFNjb3Blcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVyaXZlIGVuY3J5cHRpb24ga2V5IGZyb20gYSBwYXNzcGhyYXNlXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBkZXJpdmVLZXkocGFzc3BocmFzZTogc3RyaW5nLCBzYWx0OiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBjcnlwdG8ucGJrZGYyU3luYyhwYXNzcGhyYXNlLCBzYWx0LCB0aGlzLklURVJBVElPTlMsIHRoaXMuS0VZX0xFTkdUSCwgJ3NoYTI1NicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBtYWNoaW5lLXNwZWNpZmljIHBhc3NwaHJhc2UgZm9yIGVuY3J5cHRpb25cbiAgICogVXNlcyBhIGNvbWJpbmF0aW9uIG9mIG1hY2hpbmUgSUQgYW5kIHVzZXIgaW5mbyBmb3IgdW5pcXVlbmVzc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TWFjaGluZVBhc3NwaHJhc2UoKTogc3RyaW5nIHtcbiAgICAvLyBVc2UgYSBjb21iaW5hdGlvbiBvZiBob3N0bmFtZSwgdXNlcm5hbWUsIGFuZCBhIGZpeGVkIGFwcCBpZGVudGlmaWVyXG4gICAgY29uc3QgaG9zdG5hbWUgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhvbWVkaXIoKSkuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuICAgIGNvbnN0IHVzZXJuYW1lID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShwcm9jZXNzLmVudi5VU0VSIHx8ICdkZWZhdWx0JykuZGlnZXN0KCdoZXgnKS5zdWJzdHJpbmcoMCwgMTYpO1xuICAgIGNvbnN0IGFwcElkID0gJ0RvbGxob3VzZU1DUC1Ub2tlblN0b3JlLXYxJztcbiAgICBcbiAgICByZXR1cm4gYCR7YXBwSWR9LSR7aG9zdG5hbWV9LSR7dXNlcm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBHaXRIdWIgdG9rZW4gc2VjdXJlbHkgdG8gZmlsZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHN0b3JlR2l0SHViVG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0b2tlbiBmb3JtYXQgZmlyc3RcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZVRva2VuRm9ybWF0KHRva2VuKSkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignSW52YWxpZCB0b2tlbiBmb3JtYXQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gTm9ybWFsaXplIGFuZCB2YWxpZGF0ZSB0b2tlblxuICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHRva2VuKTtcbiAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdUb2tlbiBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHNcbiAgICAgIGF3YWl0IGZzLm1rZGlyKHRoaXMuVE9LRU5fRElSLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgbW9kZTogMG83MDAgfSk7XG5cbiAgICAgIC8vIEdlbmVyYXRlIGVuY3J5cHRpb24gY29tcG9uZW50c1xuICAgICAgY29uc3Qgc2FsdCA9IGNyeXB0by5yYW5kb21CeXRlcyh0aGlzLlNBTFRfTEVOR1RIKTtcbiAgICAgIGNvbnN0IGl2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKHRoaXMuSVZfTEVOR1RIKTtcbiAgICAgIGNvbnN0IHBhc3NwaHJhc2UgPSB0aGlzLmdldE1hY2hpbmVQYXNzcGhyYXNlKCk7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmRlcml2ZUtleShwYXNzcGhyYXNlLCBzYWx0KTtcblxuICAgICAgLy8gRW5jcnlwdCB0b2tlblxuICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KHRoaXMuQUxHT1JJVEhNLCBrZXksIGl2KTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZCA9IEJ1ZmZlci5jb25jYXQoW1xuICAgICAgICBjaXBoZXIudXBkYXRlKHZhbGlkYXRpb24ubm9ybWFsaXplZENvbnRlbnQsICd1dGY4JyksXG4gICAgICAgIGNpcGhlci5maW5hbCgpXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IHRhZyA9IGNpcGhlci5nZXRBdXRoVGFnKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBzdG9yYWdlIGZvcm1hdDogc2FsdCArIGl2ICsgdGFnICsgZW5jcnlwdGVkXG4gICAgICBjb25zdCBzdG9yZWQgPSBCdWZmZXIuY29uY2F0KFtzYWx0LCBpdiwgdGFnLCBlbmNyeXB0ZWRdKTtcblxuICAgICAgLy8gV3JpdGUgdG8gZmlsZSB3aXRoIHJlc3RyaWN0ZWQgcGVybWlzc2lvbnNcbiAgICAgIGNvbnN0IHRva2VuUGF0aCA9IHBhdGguam9pbih0aGlzLlRPS0VOX0RJUiwgdGhpcy5UT0tFTl9GSUxFKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0b2tlblBhdGgsIHN0b3JlZCwgeyBtb2RlOiAwbzYwMCB9KTtcblxuICAgICAgLy8gTG9nIHNlY3VyaXR5IGV2ZW50XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX1NVQ0NFU1MnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5zdG9yZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHknLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUodG9rZW4pLFxuICAgICAgICAgIHRva2VuUHJlZml4OiB0aGlzLmdldFRva2VuUHJlZml4KHRva2VuKVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmluZm8oJ0dpdEh1YiB0b2tlbiBzdG9yZWQgc2VjdXJlbHknKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9GQUlMVVJFJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIuc3RvcmVHaXRIdWJUb2tlbicsXG4gICAgICAgIGRldGFpbHM6IGBGYWlsZWQgdG8gc3RvcmUgR2l0SHViIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgRmFpbGVkIHRvIHN0b3JlIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBHaXRIdWIgdG9rZW4gZnJvbSBzZWN1cmUgc3RvcmFnZVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJldHJpZXZlR2l0SHViVG9rZW4oKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRva2VuUGF0aCA9IHBhdGguam9pbih0aGlzLlRPS0VOX0RJUiwgdGhpcy5UT0tFTl9GSUxFKTtcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLmFjY2Vzcyh0b2tlblBhdGgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIE5vIHN0b3JlZCB0b2tlblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gUmVhZCBlbmNyeXB0ZWQgZGF0YVxuICAgICAgY29uc3Qgc3RvcmVkID0gYXdhaXQgZnMucmVhZEZpbGUodG9rZW5QYXRoKTtcbiAgICAgIFxuICAgICAgLy8gRXh0cmFjdCBjb21wb25lbnRzXG4gICAgICBjb25zdCBzYWx0ID0gc3RvcmVkLnN1YmFycmF5KDAsIHRoaXMuU0FMVF9MRU5HVEgpO1xuICAgICAgY29uc3QgaXYgPSBzdG9yZWQuc3ViYXJyYXkodGhpcy5TQUxUX0xFTkdUSCwgdGhpcy5TQUxUX0xFTkdUSCArIHRoaXMuSVZfTEVOR1RIKTtcbiAgICAgIGNvbnN0IHRhZyA9IHN0b3JlZC5zdWJhcnJheSh0aGlzLlNBTFRfTEVOR1RIICsgdGhpcy5JVl9MRU5HVEgsIHRoaXMuU0FMVF9MRU5HVEggKyB0aGlzLklWX0xFTkdUSCArIHRoaXMuVEFHX0xFTkdUSCk7XG4gICAgICBjb25zdCBlbmNyeXB0ZWQgPSBzdG9yZWQuc3ViYXJyYXkodGhpcy5TQUxUX0xFTkdUSCArIHRoaXMuSVZfTEVOR1RIICsgdGhpcy5UQUdfTEVOR1RIKTtcblxuICAgICAgLy8gRGVyaXZlIGRlY3J5cHRpb24ga2V5XG4gICAgICBjb25zdCBwYXNzcGhyYXNlID0gdGhpcy5nZXRNYWNoaW5lUGFzc3BocmFzZSgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5kZXJpdmVLZXkocGFzc3BocmFzZSwgc2FsdCk7XG5cbiAgICAgIC8vIERlY3J5cHQgdG9rZW5cbiAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYodGhpcy5BTEdPUklUSE0sIGtleSwgaXYpO1xuICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgXG4gICAgICBjb25zdCBkZWNyeXB0ZWQgPSBCdWZmZXIuY29uY2F0KFtcbiAgICAgICAgZGVjaXBoZXIudXBkYXRlKGVuY3J5cHRlZCksXG4gICAgICAgIGRlY2lwaGVyLmZpbmFsKClcbiAgICAgIF0pLnRvU3RyaW5nKCd1dGY4Jyk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIGRlY3J5cHRlZCB0b2tlblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlVG9rZW5Gb3JtYXQoZGVjcnlwdGVkKSkge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1RPS0VOX1ZBTElEQVRJT05fRkFJTFVSRScsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmV0cmlldmVHaXRIdWJUb2tlbicsXG4gICAgICAgICAgZGV0YWlsczogJ0RlY3J5cHRlZCB0b2tlbiBoYXMgaW52YWxpZCBmb3JtYXQnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fVkFMSURBVElPTl9TVUNDRVNTJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdUb2tlbk1hbmFnZXIucmV0cmlldmVHaXRIdWJUb2tlbicsXG4gICAgICAgIGRldGFpbHM6ICdHaXRIdWIgdG9rZW4gcmV0cmlldmVkIGZyb20gc2VjdXJlIHN0b3JhZ2UnLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIHRva2VuVHlwZTogdGhpcy5nZXRUb2tlblR5cGUoZGVjcnlwdGVkKSxcbiAgICAgICAgICB0b2tlblByZWZpeDogdGhpcy5nZXRUb2tlblByZWZpeChkZWNyeXB0ZWQpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gZGVjcnlwdGVkO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdUT0tFTl9WQUxJREFUSU9OX0ZBSUxVUkUnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1Rva2VuTWFuYWdlci5yZXRyaWV2ZUdpdEh1YlRva2VuJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byByZXRyaWV2ZSBHaXRIdWIgdG9rZW46ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGxvZ2dlci5kZWJ1ZygnRmFpbGVkIHRvIHJldHJpZXZlIHN0b3JlZCB0b2tlbicsIHsgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHN0b3JlZCBHaXRIdWIgdG9rZW5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZW1vdmVTdG9yZWRUb2tlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdG9rZW5QYXRoID0gcGF0aC5qb2luKHRoaXMuVE9LRU5fRElSLCB0aGlzLlRPS0VOX0ZJTEUpO1xuICAgICAgXG4gICAgICAvLyBDaGVjayBpZiBmaWxlIGV4aXN0cyBiZWZvcmUgYXR0ZW1wdGluZyBkZWxldGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMuYWNjZXNzKHRva2VuUGF0aCk7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayh0b2tlblBhdGgpO1xuICAgICAgICBcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdUT0tFTl9DQUNIRV9DTEVBUkVEJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnJlbW92ZVN0b3JlZFRva2VuJyxcbiAgICAgICAgICBkZXRhaWxzOiAnR2l0SHViIHRva2VuIHJlbW92ZWQgZnJvbSBzZWN1cmUgc3RvcmFnZSdcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBsb2dnZXIuaW5mbygnU3RvcmVkIEdpdEh1YiB0b2tlbiByZW1vdmVkJyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY291bGRuJ3QgYmUgZGVsZXRlZFxuICAgICAgICBsb2dnZXIuZGVidWcoJ05vIHN0b3JlZCB0b2tlbiB0byByZW1vdmUnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnVE9LRU5fQ0FDSEVfQ0xFQVJFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnVG9rZW5NYW5hZ2VyLnJlbW92ZVN0b3JlZFRva2VuJyxcbiAgICAgICAgZGV0YWlsczogYEZhaWxlZCB0byByZW1vdmUgc3RvcmVkIHRva2VuOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWBcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBsb2dnZXIud2FybignRmFpbGVkIHRvIHJlbW92ZSBzdG9yZWQgdG9rZW4nLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgR2l0SHViIHRva2VuIGZyb20gZW52aXJvbm1lbnQgb3Igc2VjdXJlIHN0b3JhZ2VcbiAgICogVXBkYXRlZCB0byBjaGVjayBzZWN1cmUgc3RvcmFnZSBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0R2l0SHViVG9rZW5Bc3luYygpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAvLyBGaXJzdCBjaGVjayBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIGNvbnN0IGVudlRva2VuID0gdGhpcy5nZXRHaXRIdWJUb2tlbigpO1xuICAgIGlmIChlbnZUb2tlbikge1xuICAgICAgcmV0dXJuIGVudlRva2VuO1xuICAgIH1cblxuICAgIC8vIEZhbGwgYmFjayB0byBzZWN1cmUgc3RvcmFnZVxuICAgIHJldHVybiB0aGlzLnJldHJpZXZlR2l0SHViVG9rZW4oKTtcbiAgfVxufSJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"ServerSetup.d.ts","sourceRoot":"","sources":["../../src/server/ServerSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAOvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAe;;IAMnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IASzD;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmCjC;;OAEG;IACH,eAAe,IAAI,YAAY;CAGhC"}
1
+ {"version":3,"file":"ServerSetup.d.ts","sourceRoot":"","sources":["../../src/server/ServerSetup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAQvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI1C,qBAAa,WAAW;IACtB,OAAO,CAAC,YAAY,CAAe;;IAMnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IASzD;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAmCjC;;OAEG;IACH,eAAe,IAAI,YAAY;CAGhC"}
@@ -9,6 +9,7 @@ import { getCollectionTools } from './tools/CollectionTools.js';
9
9
  import { getUserTools } from './tools/UserTools.js';
10
10
  import { getUpdateTools } from './tools/UpdateTools.js';
11
11
  import { getConfigTools } from './tools/ConfigTools.js';
12
+ import { getAuthTools } from './tools/AuthTools.js';
12
13
  import { UnicodeValidator } from '../security/validators/unicodeValidator.js';
13
14
  import { logger } from '../utils/logger.js';
14
15
  export class ServerSetup {
@@ -38,6 +39,8 @@ export class ServerSetup {
38
39
  this.toolRegistry.registerMany(getCollectionTools(instance));
39
40
  // Register user tools
40
41
  this.toolRegistry.registerMany(getUserTools(instance));
42
+ // Register auth tools
43
+ this.toolRegistry.registerMany(getAuthTools(instance));
41
44
  // Register update tools
42
45
  this.toolRegistry.registerMany(getUpdateTools(instance));
43
46
  // Register config tools
@@ -116,4 +119,4 @@ export class ServerSetup {
116
119
  return this.toolRegistry;
117
120
  }
118
121
  }
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL1NlcnZlclNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBR0gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsTUFBTSxPQUFPLFdBQVc7SUFDZCxZQUFZLENBQWU7SUFFbkM7UUFDRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE1BQWMsRUFBRSxRQUFzQjtRQUNoRCxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3Qix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxD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RUFBRSxNQUFNLENBQUMsY0FBYztvQkFDN0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2lCQUMxQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM3QixNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7WUFDM0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsOEVBQThFO2dCQUM5RSxNQUFNLGFBQWEsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDN0MsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQzFELFVBQVUsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsK0NBQStDO1FBQy9DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcnZlciBzZXR1cCBhbmQgaW5pdGlhbGl6YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IENhbGxUb29sUmVxdWVzdFNjaGVtYSwgRXJyb3JDb2RlLCBMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLCBNY3BFcnJvciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBUb29sUmVnaXN0cnkgfSBmcm9tICcuL3Rvb2xzL1Rvb2xSZWdpc3RyeS5qcyc7XG5pbXBvcnQgeyBnZXRQZXJzb25hVG9vbHMgfSBmcm9tICcuL3Rvb2xzL1BlcnNvbmFUb29scy5qcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50VG9vbHMgfSBmcm9tICcuL3Rvb2xzL0VsZW1lbnRUb29scy5qcyc7XG5pbXBvcnQgeyBnZXRDb2xsZWN0aW9uVG9vbHMgfSBmcm9tICcuL3Rvb2xzL0NvbGxlY3Rpb25Ub29scy5qcyc7XG5pbXBvcnQgeyBnZXRVc2VyVG9vbHMgfSBmcm9tICcuL3Rvb2xzL1VzZXJUb29scy5qcyc7XG5pbXBvcnQgeyBnZXRVcGRhdGVUb29scyB9IGZyb20gJy4vdG9vbHMvVXBkYXRlVG9vbHMuanMnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnVG9vbHMgfSBmcm9tICcuL3Rvb2xzL0NvbmZpZ1Rvb2xzLmpzJztcbmltcG9ydCB7IElUb29sSGFuZGxlciB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgU2VydmVyU2V0dXAge1xuICBwcml2YXRlIHRvb2xSZWdpc3RyeTogVG9vbFJlZ2lzdHJ5O1xuICBcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50b29sUmVnaXN0cnkgPSBuZXcgVG9vbFJlZ2lzdHJ5KCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBzZXJ2ZXIgd2l0aCBhbGwgdG9vbHMgYW5kIGhhbmRsZXJzXG4gICAqL1xuICBzZXR1cFNlcnZlcihzZXJ2ZXI6IFNlcnZlciwgaW5zdGFuY2U6IElUb29sSGFuZGxlcik6IHZvaWQge1xuICAgIC8vIFJlZ2lzdGVyIGFsbCB0b29sc1xuICAgIHRoaXMucmVnaXN0ZXJUb29scyhpbnN0YW5jZSk7XG4gICAgXG4gICAgLy8gU2V0dXAgcmVxdWVzdCBoYW5kbGVyc1xuICAgIHRoaXMuc2V0dXBMaXN0VG9vbHNIYW5kbGVyKHNlcnZlcik7XG4gICAgdGhpcy5zZXR1cENhbGxUb29sSGFuZGxlcihzZXJ2ZXIpO1xuICB9XG4gIFxuICAvKipcbiAgICogUmVnaXN0ZXIgYWxsIHRvb2wgY2F0ZWdvcmllc1xuICAgKi9cbiAgcHJpdmF0ZSByZWdpc3RlclRvb2xzKGluc3RhbmNlOiBJVG9vbEhhbmRsZXIpOiB2b2lkIHtcbiAgICAvLyBSZWdpc3RlciBlbGVtZW50IHRvb2xzIChuZXcgZ2VuZXJpYyB0b29scyBmb3IgYWxsIGVsZW1lbnQgdHlwZXMpXG4gICAgdGhpcy50b29sUmVnaXN0cnkucmVnaXN0ZXJNYW55KGdldEVsZW1lbnRUb29scyhpbnN0YW5jZSkpO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIHBlcnNvbmEgdG9vbHMgKGxlZ2FjeSAtIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpXG4gICAgdGhpcy50b29sUmVnaXN0cnkucmVnaXN0ZXJNYW55KGdldFBlcnNvbmFUb29scyhpbnN0YW5jZSkpO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIGNvbGxlY3Rpb24gdG9vbHNcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0Q29sbGVjdGlvblRvb2xzKGluc3RhbmNlKSk7XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgdXNlciB0b29sc1xuICAgIHRoaXMudG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTWFueShnZXRVc2VyVG9vbHMoaW5zdGFuY2UpKTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciB1cGRhdGUgdG9vbHNcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0VXBkYXRlVG9vbHMoaW5zdGFuY2UpKTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciBjb25maWcgdG9vbHNcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0Q29uZmlnVG9vbHMoaW5zdGFuY2UpKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHVwIHRoZSBMaXN0VG9vbHNSZXF1ZXN0IGhhbmRsZXJcbiAgICovXG4gIHByaXZhdGUgc2V0dXBMaXN0VG9vbHNIYW5kbGVyKHNlcnZlcjogU2VydmVyKTogdm9pZCB7XG4gICAgc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRvb2xzOiB0aGlzLnRvb2xSZWdpc3RyeS5nZXRBbGxUb29scygpXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogU2V0dXAgdGhlIENhbGxUb29sUmVxdWVzdCBoYW5kbGVyXG4gICAqL1xuICBwcml2YXRlIHNldHVwQ2FsbFRvb2xIYW5kbGVyKHNlcnZlcjogU2VydmVyKTogdm9pZCB7XG4gICAgc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKENhbGxUb29sUmVxdWVzdFNjaGVtYSwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSByZXF1ZXN0LnBhcmFtcztcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMudG9vbFJlZ2lzdHJ5LmdldEhhbmRsZXIobmFtZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoXG4gICAgICAgICAgICBFcnJvckNvZGUuTWV0aG9kTm90Rm91bmQsXG4gICAgICAgICAgICBgVW5rbm93biB0b29sOiAke25hbWV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIE5vcm1hbGl6ZSBVbmljb2RlIGluIGFsbCBzdHJpbmcgYXJndW1lbnRzIHRvIHByZXZlbnQgc2VjdXJpdHkgYnlwYXNzZXNcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEFyZ3MgPSB0aGlzLm5vcm1hbGl6ZUFyZ3VtZW50c1VuaWNvZGUoYXJncywgbmFtZSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gYXdhaXQgaGFuZGxlcihub3JtYWxpemVkQXJncyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNY3BFcnJvcikge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aHJvdyBuZXcgTWNwRXJyb3IoXG4gICAgICAgICAgRXJyb3JDb2RlLkludGVybmFsRXJyb3IsXG4gICAgICAgICAgYEVycm9yIGV4ZWN1dGluZyB0b29sICR7bmFtZX06ICR7ZXJyb3J9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgbm9ybWFsaXplIFVuaWNvZGUgaW4gYWxsIHN0cmluZyB2YWx1ZXMgd2l0aGluIGFyZ3VtZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVBcmd1bWVudHNVbmljb2RlKGFyZ3M6IGFueSwgdG9vbE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKGFyZ3MgPT09IG51bGwgfHwgYXJncyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYXJncztcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhcmdzID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoYXJncyk7XG4gICAgICBpZiAocmVzdWx0LmRldGVjdGVkSXNzdWVzICYmIHJlc3VsdC5kZXRlY3RlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBVbmljb2RlIHNlY3VyaXR5IGlzc3VlcyBkZXRlY3RlZCBpbiB0b29sICR7dG9vbE5hbWV9OmAsIHtcbiAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5kZXRlY3RlZElzc3VlcyxcbiAgICAgICAgICBzZXZlcml0eTogcmVzdWx0LnNldmVyaXR5XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdC5ub3JtYWxpemVkQ29udGVudDtcbiAgICB9XG4gICAgXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJncykpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChpdGVtID0+IHRoaXMubm9ybWFsaXplQXJndW1lbnRzVW5pY29kZShpdGVtLCB0b29sTmFtZSkpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkOiBhbnkgPSB7fTtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBib3RoIGtleXMgYW5kIHZhbHVlcyB0byBwcmV2ZW50IFVuaWNvZGUgYXR0YWNrcyBpbiBwcm9wZXJ0eSBuYW1lc1xuICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5ID0gdHlwZW9mIGtleSA9PT0gJ3N0cmluZycgPyBcbiAgICAgICAgICBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShrZXkpLm5vcm1hbGl6ZWRDb250ZW50IDoga2V5O1xuICAgICAgICBub3JtYWxpemVkW25vcm1hbGl6ZWRLZXldID0gdGhpcy5ub3JtYWxpemVBcmd1bWVudHNVbmljb2RlKHZhbHVlLCB0b29sTmFtZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9XG4gICAgXG4gICAgLy8gRm9yIG5vbi1zdHJpbmcgcHJpbWl0aXZlIHR5cGVzLCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gYXJncztcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCB0aGUgdG9vbCByZWdpc3RyeVxuICAgKi9cbiAgZ2V0VG9vbFJlZ2lzdHJ5KCk6IFRvb2xSZWdpc3RyeSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbFJlZ2lzdHJ5O1xuICB9XG59Il19
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmVyU2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL1NlcnZlclNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBR0gsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE1BQU0sT0FBTyxXQUFXO0lBQ2QsWUFBWSxDQUFlO0lBRW5DO1FBQ0UsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxNQUFjLEVBQUUsUUFBc0I7UUFDaEQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFN0IseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJ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TyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VydmVyIHNldHVwIGFuZCBpbml0aWFsaXphdGlvblxuICovXG5cbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCJAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLCBFcnJvckNvZGUsIExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIE1jcEVycm9yIH0gZnJvbSBcIkBtb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanNcIjtcbmltcG9ydCB7IFRvb2xSZWdpc3RyeSB9IGZyb20gJy4vdG9vbHMvVG9vbFJlZ2lzdHJ5LmpzJztcbmltcG9ydCB7IGdldFBlcnNvbmFUb29scyB9IGZyb20gJy4vdG9vbHMvUGVyc29uYVRvb2xzLmpzJztcbmltcG9ydCB7IGdldEVsZW1lbnRUb29scyB9IGZyb20gJy4vdG9vbHMvRWxlbWVudFRvb2xzLmpzJztcbmltcG9ydCB7IGdldENvbGxlY3Rpb25Ub29scyB9IGZyb20gJy4vdG9vbHMvQ29sbGVjdGlvblRvb2xzLmpzJztcbmltcG9ydCB7IGdldFVzZXJUb29scyB9IGZyb20gJy4vdG9vbHMvVXNlclRvb2xzLmpzJztcbmltcG9ydCB7IGdldFVwZGF0ZVRvb2xzIH0gZnJvbSAnLi90b29scy9VcGRhdGVUb29scy5qcyc7XG5pbXBvcnQgeyBnZXRDb25maWdUb29scyB9IGZyb20gJy4vdG9vbHMvQ29uZmlnVG9vbHMuanMnO1xuaW1wb3J0IHsgZ2V0QXV0aFRvb2xzIH0gZnJvbSAnLi90b29scy9BdXRoVG9vbHMuanMnO1xuaW1wb3J0IHsgSVRvb2xIYW5kbGVyIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTZXJ2ZXJTZXR1cCB7XG4gIHByaXZhdGUgdG9vbFJlZ2lzdHJ5OiBUb29sUmVnaXN0cnk7XG4gIFxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnRvb2xSZWdpc3RyeSA9IG5ldyBUb29sUmVnaXN0cnkoKTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgdGhlIHNlcnZlciB3aXRoIGFsbCB0b29scyBhbmQgaGFuZGxlcnNcbiAgICovXG4gIHNldHVwU2VydmVyKHNlcnZlcjogU2VydmVyLCBpbnN0YW5jZTogSVRvb2xIYW5kbGVyKTogdm9pZCB7XG4gICAgLy8gUmVnaXN0ZXIgYWxsIHRvb2xzXG4gICAgdGhpcy5yZWdpc3RlclRvb2xzKGluc3RhbmNlKTtcbiAgICBcbiAgICAvLyBTZXR1cCByZXF1ZXN0IGhhbmRsZXJzXG4gICAgdGhpcy5zZXR1cExpc3RUb29sc0hhbmRsZXIoc2VydmVyKTtcbiAgICB0aGlzLnNldHVwQ2FsbFRvb2xIYW5kbGVyKHNlcnZlcik7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbGwgdG9vbCBjYXRlZ29yaWVzXG4gICAqL1xuICBwcml2YXRlIHJlZ2lzdGVyVG9vbHMoaW5zdGFuY2U6IElUb29sSGFuZGxlcik6IHZvaWQge1xuICAgIC8vIFJlZ2lzdGVyIGVsZW1lbnQgdG9vbHMgKG5ldyBnZW5lcmljIHRvb2xzIGZvciBhbGwgZWxlbWVudCB0eXBlcylcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0RWxlbWVudFRvb2xzKGluc3RhbmNlKSk7XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgcGVyc29uYSB0b29scyAobGVnYWN5IC0ga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0UGVyc29uYVRvb2xzKGluc3RhbmNlKSk7XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgY29sbGVjdGlvbiB0b29sc1xuICAgIHRoaXMudG9vbFJlZ2lzdHJ5LnJlZ2lzdGVyTWFueShnZXRDb2xsZWN0aW9uVG9vbHMoaW5zdGFuY2UpKTtcbiAgICBcbiAgICAvLyBSZWdpc3RlciB1c2VyIHRvb2xzXG4gICAgdGhpcy50b29sUmVnaXN0cnkucmVnaXN0ZXJNYW55KGdldFVzZXJUb29scyhpbnN0YW5jZSkpO1xuICAgIFxuICAgIC8vIFJlZ2lzdGVyIGF1dGggdG9vbHNcbiAgICB0aGlzLnRvb2xSZWdpc3RyeS5yZWdpc3Rlck1hbnkoZ2V0QXV0aFRvb2xzKGluc3RhbmNlKSk7XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgdXBkYXRlIHRvb2xzXG4gICAgdGhpcy50b29sUmVnaXN0cnkucmVnaXN0ZXJNYW55KGdldFVwZGF0ZVRvb2xzKGluc3RhbmNlKSk7XG4gICAgXG4gICAgLy8gUmVnaXN0ZXIgY29uZmlnIHRvb2xzXG4gICAgdGhpcy50b29sUmVnaXN0cnkucmVnaXN0ZXJNYW55KGdldENvbmZpZ1Rvb2xzKGluc3RhbmNlKSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBTZXR1cCB0aGUgTGlzdFRvb2xzUmVxdWVzdCBoYW5kbGVyXG4gICAqL1xuICBwcml2YXRlIHNldHVwTGlzdFRvb2xzSGFuZGxlcihzZXJ2ZXI6IFNlcnZlcik6IHZvaWQge1xuICAgIHNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b29sczogdGhpcy50b29sUmVnaXN0cnkuZ2V0QWxsVG9vbHMoKVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFNldHVwIHRoZSBDYWxsVG9vbFJlcXVlc3QgaGFuZGxlclxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cENhbGxUb29sSGFuZGxlcihzZXJ2ZXI6IFNlcnZlcik6IHZvaWQge1xuICAgIHNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihDYWxsVG9vbFJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9ID0gcmVxdWVzdC5wYXJhbXM7XG4gICAgICBcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLnRvb2xSZWdpc3RyeS5nZXRIYW5kbGVyKG5hbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICAgICAgRXJyb3JDb2RlLk1ldGhvZE5vdEZvdW5kLFxuICAgICAgICAgICAgYFVua25vd24gdG9vbDogJHtuYW1lfWBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBOb3JtYWxpemUgVW5pY29kZSBpbiBhbGwgc3RyaW5nIGFyZ3VtZW50cyB0byBwcmV2ZW50IHNlY3VyaXR5IGJ5cGFzc2VzXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRBcmdzID0gdGhpcy5ub3JtYWxpemVBcmd1bWVudHNVbmljb2RlKGFyZ3MsIG5hbWUpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGF3YWl0IGhhbmRsZXIobm9ybWFsaXplZEFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTWNwRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhyb3cgbmV3IE1jcEVycm9yKFxuICAgICAgICAgIEVycm9yQ29kZS5JbnRlcm5hbEVycm9yLFxuICAgICAgICAgIGBFcnJvciBleGVjdXRpbmcgdG9vbCAke25hbWV9OiAke2Vycm9yfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IG5vcm1hbGl6ZSBVbmljb2RlIGluIGFsbCBzdHJpbmcgdmFsdWVzIHdpdGhpbiBhcmd1bWVudHNcbiAgICovXG4gIHByaXZhdGUgbm9ybWFsaXplQXJndW1lbnRzVW5pY29kZShhcmdzOiBhbnksIHRvb2xOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChhcmdzID09PSBudWxsIHx8IGFyZ3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGFyZ3MpO1xuICAgICAgaWYgKHJlc3VsdC5kZXRlY3RlZElzc3VlcyAmJiByZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIud2FybihgVW5pY29kZSBzZWN1cml0eSBpc3N1ZXMgZGV0ZWN0ZWQgaW4gdG9vbCAke3Rvb2xOYW1lfTpgLCB7XG4gICAgICAgICAgaXNzdWVzOiByZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMsXG4gICAgICAgICAgc2V2ZXJpdHk6IHJlc3VsdC5zZXZlcml0eVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgfVxuICAgIFxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZ3MpKSB7XG4gICAgICByZXR1cm4gYXJncy5tYXAoaXRlbSA9PiB0aGlzLm5vcm1hbGl6ZUFyZ3VtZW50c1VuaWNvZGUoaXRlbSwgdG9vbE5hbWUpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhcmdzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZDogYW55ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhcmdzKSkge1xuICAgICAgICAvLyBOb3JtYWxpemUgYm90aCBrZXlzIGFuZCB2YWx1ZXMgdG8gcHJldmVudCBVbmljb2RlIGF0dGFja3MgaW4gcHJvcGVydHkgbmFtZXNcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEtleSA9IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnID8gXG4gICAgICAgICAgVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoa2V5KS5ub3JtYWxpemVkQ29udGVudCA6IGtleTtcbiAgICAgICAgbm9ybWFsaXplZFtub3JtYWxpemVkS2V5XSA9IHRoaXMubm9ybWFsaXplQXJndW1lbnRzVW5pY29kZSh2YWx1ZSwgdG9vbE5hbWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgfVxuICAgIFxuICAgIC8vIEZvciBub24tc3RyaW5nIHByaW1pdGl2ZSB0eXBlcywgcmV0dXJuIGFzLWlzXG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRvb2wgcmVnaXN0cnlcbiAgICovXG4gIGdldFRvb2xSZWdpc3RyeSgpOiBUb29sUmVnaXN0cnkge1xuICAgIHJldHVybiB0aGlzLnRvb2xSZWdpc3RyeTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Authentication-related tool definitions and handlers
3
+ */
4
+ import { ToolDefinition } from './ToolRegistry.js';
5
+ import { IToolHandler } from '../types.js';
6
+ export declare function getAuthTools(server: IToolHandler): Array<{
7
+ tool: ToolDefinition;
8
+ handler: any;
9
+ }>;
10
+ //# sourceMappingURL=AuthTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthTools.d.ts","sourceRoot":"","sources":["../../../src/server/tools/AuthTools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAoChG"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Authentication-related tool definitions and handlers
3
+ */
4
+ export function getAuthTools(server) {
5
+ return [
6
+ {
7
+ tool: {
8
+ name: "setup_github_auth",
9
+ description: "Set up GitHub authentication to access all DollhouseMCP features. This uses GitHub's secure device flow - no passwords needed! Use this when users say things like 'connect to GitHub', 'set up GitHub', 'I have a GitHub account now', or when they try to submit content without authentication.",
10
+ inputSchema: {
11
+ type: "object",
12
+ properties: {}
13
+ }
14
+ },
15
+ handler: () => server.setupGitHubAuth()
16
+ },
17
+ {
18
+ tool: {
19
+ name: "check_github_auth",
20
+ description: "Check current GitHub authentication status. Shows whether you're connected to GitHub, your username, and what actions are available. Use when users ask 'am I connected to GitHub?', 'what's my GitHub status?', or similar questions.",
21
+ inputSchema: {
22
+ type: "object",
23
+ properties: {}
24
+ }
25
+ },
26
+ handler: () => server.checkGitHubAuth()
27
+ },
28
+ {
29
+ tool: {
30
+ name: "clear_github_auth",
31
+ description: "Remove GitHub authentication and disconnect from GitHub. Use when users say 'disconnect from GitHub', 'remove my GitHub connection', 'clear authentication', or want to switch accounts.",
32
+ inputSchema: {
33
+ type: "object",
34
+ properties: {}
35
+ }
36
+ },
37
+ handler: () => server.clearGitHubAuth()
38
+ }
39
+ ];
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXV0aFRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci90b29scy9BdXRoVG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFLSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQW9CO0lBQy9DLE9BQU87UUFDTDtZQUNFLElBQUksRUFBRTtnQkFDSixJQUFJLEVBQUUsbUJBQW1CO2dCQUN6QixXQUFXLEVBQUUsb1NBQW9TO2dCQUNqVCxXQUFXLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLFFBQVE7b0JBQ2QsVUFBVSxFQUFFLEVBQUU7aUJBQ2Y7YUFDRjtZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFO1NBQ3hDO1FBQ0Q7WUFDRSxJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLG1CQUFtQjtnQkFDekIsV0FBVyxFQUFFLHdPQUF3TztnQkFDclAsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRSxFQUFFO2lCQUNmO2FBQ0Y7WUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtTQUN4QztRQUNEO1lBQ0UsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLFdBQVcsRUFBRSwwTEFBMEw7Z0JBQ3ZNLFdBQVcsRUFBRTtvQkFDWCxJQUFJLEVBQUUsUUFBUTtvQkFDZCxVQUFVLEVBQUUsRUFBRTtpQkFDZjthQUNGO1lBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7U0FDeEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aGVudGljYXRpb24tcmVsYXRlZCB0b29sIGRlZmluaXRpb25zIGFuZCBoYW5kbGVyc1xuICovXG5cbmltcG9ydCB7IFRvb2xEZWZpbml0aW9uIH0gZnJvbSAnLi9Ub29sUmVnaXN0cnkuanMnO1xuaW1wb3J0IHsgSVRvb2xIYW5kbGVyIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aFRvb2xzKHNlcnZlcjogSVRvb2xIYW5kbGVyKTogQXJyYXk8eyB0b29sOiBUb29sRGVmaW5pdGlvbjsgaGFuZGxlcjogYW55IH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIG5hbWU6IFwic2V0dXBfZ2l0aHViX2F1dGhcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiU2V0IHVwIEdpdEh1YiBhdXRoZW50aWNhdGlvbiB0byBhY2Nlc3MgYWxsIERvbGxob3VzZU1DUCBmZWF0dXJlcy4gVGhpcyB1c2VzIEdpdEh1YidzIHNlY3VyZSBkZXZpY2UgZmxvdyAtIG5vIHBhc3N3b3JkcyBuZWVkZWQhIFVzZSB0aGlzIHdoZW4gdXNlcnMgc2F5IHRoaW5ncyBsaWtlICdjb25uZWN0IHRvIEdpdEh1YicsICdzZXQgdXAgR2l0SHViJywgJ0kgaGF2ZSBhIEdpdEh1YiBhY2NvdW50IG5vdycsIG9yIHdoZW4gdGhleSB0cnkgdG8gc3VibWl0IGNvbnRlbnQgd2l0aG91dCBhdXRoZW50aWNhdGlvbi5cIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoKSA9PiBzZXJ2ZXIuc2V0dXBHaXRIdWJBdXRoKClcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJjaGVja19naXRodWJfYXV0aFwiLCBcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ2hlY2sgY3VycmVudCBHaXRIdWIgYXV0aGVudGljYXRpb24gc3RhdHVzLiBTaG93cyB3aGV0aGVyIHlvdSdyZSBjb25uZWN0ZWQgdG8gR2l0SHViLCB5b3VyIHVzZXJuYW1lLCBhbmQgd2hhdCBhY3Rpb25zIGFyZSBhdmFpbGFibGUuIFVzZSB3aGVuIHVzZXJzIGFzayAnYW0gSSBjb25uZWN0ZWQgdG8gR2l0SHViPycsICd3aGF0J3MgbXkgR2l0SHViIHN0YXR1cz8nLCBvciBzaW1pbGFyIHF1ZXN0aW9ucy5cIixcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHt9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyOiAoKSA9PiBzZXJ2ZXIuY2hlY2tHaXRIdWJBdXRoKClcbiAgICB9LFxuICAgIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgbmFtZTogXCJjbGVhcl9naXRodWJfYXV0aFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZW1vdmUgR2l0SHViIGF1dGhlbnRpY2F0aW9uIGFuZCBkaXNjb25uZWN0IGZyb20gR2l0SHViLiBVc2Ugd2hlbiB1c2VycyBzYXkgJ2Rpc2Nvbm5lY3QgZnJvbSBHaXRIdWInLCAncmVtb3ZlIG15IEdpdEh1YiBjb25uZWN0aW9uJywgJ2NsZWFyIGF1dGhlbnRpY2F0aW9uJywgb3Igd2FudCB0byBzd2l0Y2ggYWNjb3VudHMuXCIsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJvYmplY3RcIiwgXG4gICAgICAgICAgcHJvcGVydGllczoge31cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6ICgpID0+IHNlcnZlci5jbGVhckdpdEh1YkF1dGgoKVxuICAgIH1cbiAgXTtcbn0iXX0=
@@ -50,6 +50,9 @@ export interface IToolHandler {
50
50
  setUserIdentity(username: string, email?: string): Promise<any>;
51
51
  getUserIdentity(): Promise<any>;
52
52
  clearUserIdentity(): Promise<any>;
53
+ setupGitHubAuth(): Promise<any>;
54
+ checkGitHubAuth(): Promise<any>;
55
+ clearGitHubAuth(): Promise<any>;
53
56
  checkForUpdates(): Promise<any>;
54
57
  updateServer(confirm: boolean): Promise<any>;
55
58
  rollbackUpdate(confirm: boolean): Promise<any>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,4 @@
2
2
  * Server interface types to avoid circular dependencies
3
3
  */
4
4
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJ2ZXIgaW50ZXJmYWNlIHR5cGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xIYW5kbGVyIHtcbiAgLy8gUGVyc29uYSB0b29scyAobGVnYWN5IC0gd2lsbCBjYWxsIGVsZW1lbnQgdG9vbHMgaW50ZXJuYWxseSlcbiAgbGlzdFBlcnNvbmFzKCk6IFByb21pc2U8YW55PjtcbiAgYWN0aXZhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0QWN0aXZlUGVyc29uYSgpOiBQcm9taXNlPGFueT47XG4gIGRlYWN0aXZhdGVQZXJzb25hKCk6IFByb21pc2U8YW55PjtcbiAgZ2V0UGVyc29uYURldGFpbHMocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRQZXJzb25hcygpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGVkaXRQZXJzb25hKHBlcnNvbmE6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQgdG9vbHMgKGdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKVxuICBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KTogUHJvbWlzZTxhbnk+O1xuICBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgdG9vbHNcbiAgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT47XG4gIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIENvbGxlY3Rpb24gdG9vbHNcbiAgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgaW5zdGFsbENvbnRlbnQocGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzdWJtaXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIFVzZXIgdG9vbHNcbiAgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBnZXRVc2VySWRlbnRpdHkoKTogUHJvbWlzZTxhbnk+O1xuICBjbGVhclVzZXJJZGVudGl0eSgpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBVcGRhdGUgdG9vbHNcbiAgY2hlY2tGb3JVcGRhdGVzKCk6IFByb21pc2U8YW55PjtcbiAgdXBkYXRlU2VydmVyKGNvbmZpcm06IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XG4gIHJvbGxiYWNrVXBkYXRlKGNvbmZpcm06IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XG4gIGdldFNlcnZlclN0YXR1cygpOiBQcm9taXNlPGFueT47XG4gIGNvbnZlcnRUb0dpdEluc3RhbGxhdGlvbih0YXJnZXREaXI/OiBzdHJpbmcsIGNvbmZpcm0/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gQ29uZmlnIHRvb2xzXG4gIGNvbmZpZ3VyZUluZGljYXRvcihjb25maWc6IGFueSk6IFByb21pc2U8YW55PjtcbiAgZ2V0SW5kaWNhdG9yQ29uZmlnKCk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEV4cG9ydC9JbXBvcnQvU2hhcmUgdG9vbHNcbiAgZXhwb3J0UGVyc29uYShwZXJzb25hOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGV4cG9ydEFsbFBlcnNvbmFzKGluY2x1ZGVEZWZhdWx0cz86IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XG4gIGltcG9ydFBlcnNvbmEoc291cmNlOiBzdHJpbmcsIG92ZXJ3cml0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XG4gIHNoYXJlUGVyc29uYShwZXJzb25hOiBzdHJpbmcsIGV4cGlyeURheXM/OiBudW1iZXIpOiBQcm9taXNlPGFueT47XG4gIGltcG9ydEZyb21VcmwodXJsOiBzdHJpbmcsIG92ZXJ3cml0ZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT47XG59Il19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTZXJ2ZXIgaW50ZXJmYWNlIHR5cGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRvb2xIYW5kbGVyIHtcbiAgLy8gUGVyc29uYSB0b29scyAobGVnYWN5IC0gd2lsbCBjYWxsIGVsZW1lbnQgdG9vbHMgaW50ZXJuYWxseSlcbiAgbGlzdFBlcnNvbmFzKCk6IFByb21pc2U8YW55PjtcbiAgYWN0aXZhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZ2V0QWN0aXZlUGVyc29uYSgpOiBQcm9taXNlPGFueT47XG4gIGRlYWN0aXZhdGVQZXJzb25hKCk6IFByb21pc2U8YW55PjtcbiAgZ2V0UGVyc29uYURldGFpbHMocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRQZXJzb25hcygpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZVBlcnNvbmEobmFtZTogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBpbnN0cnVjdGlvbnM6IHN0cmluZywgdHJpZ2dlcnM/OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGVkaXRQZXJzb25hKHBlcnNvbmE6IHN0cmluZywgZmllbGQ6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgdmFsaWRhdGVQZXJzb25hKHBlcnNvbmE6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQgdG9vbHMgKGdlbmVyaWMgZm9yIGFsbCBlbGVtZW50IHR5cGVzKVxuICBsaXN0RWxlbWVudHModHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEFjdGl2ZUVsZW1lbnRzKHR5cGU6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgZGVhY3RpdmF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldEVsZW1lbnREZXRhaWxzKG5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICByZWxvYWRFbGVtZW50cyh0eXBlOiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGNyZWF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBjb250ZW50Pzogc3RyaW5nOyBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT59KTogUHJvbWlzZTxhbnk+O1xuICBlZGl0RWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICB2YWxpZGF0ZUVsZW1lbnQoYXJnczoge25hbWU6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBzdHJpY3Q/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgZGVsZXRlRWxlbWVudChhcmdzOiB7bmFtZTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGRlbGV0ZURhdGE/OiBib29sZWFufSk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIEVsZW1lbnQtc3BlY2lmaWMgdG9vbHNcbiAgcmVuZGVyVGVtcGxhdGUobmFtZTogc3RyaW5nLCB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBQcm9taXNlPGFueT47XG4gIGV4ZWN1dGVBZ2VudChuYW1lOiBzdHJpbmcsIGdvYWw6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIENvbGxlY3Rpb24gdG9vbHNcbiAgYnJvd3NlQ29sbGVjdGlvbihzZWN0aW9uPzogc3RyaW5nLCB0eXBlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzZWFyY2hDb2xsZWN0aW9uKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT47XG4gIGdldENvbGxlY3Rpb25Db250ZW50KHBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgaW5zdGFsbENvbnRlbnQocGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBzdWJtaXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIFVzZXIgdG9vbHNcbiAgc2V0VXNlcklkZW50aXR5KHVzZXJuYW1lOiBzdHJpbmcsIGVtYWlsPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBnZXRVc2VySWRlbnRpdHkoKTogUHJvbWlzZTxhbnk+O1xuICBjbGVhclVzZXJJZGVudGl0eSgpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBBdXRoZW50aWNhdGlvbiB0b29sc1xuICBzZXR1cEdpdEh1YkF1dGgoKTogUHJvbWlzZTxhbnk+O1xuICBjaGVja0dpdEh1YkF1dGgoKTogUHJvbWlzZTxhbnk+O1xuICBjbGVhckdpdEh1YkF1dGgoKTogUHJvbWlzZTxhbnk+O1xuICBcbiAgLy8gVXBkYXRlIHRvb2xzXG4gIGNoZWNrRm9yVXBkYXRlcygpOiBQcm9taXNlPGFueT47XG4gIHVwZGF0ZVNlcnZlcihjb25maXJtOiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICByb2xsYmFja1VwZGF0ZShjb25maXJtOiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBnZXRTZXJ2ZXJTdGF0dXMoKTogUHJvbWlzZTxhbnk+O1xuICBjb252ZXJ0VG9HaXRJbnN0YWxsYXRpb24odGFyZ2V0RGlyPzogc3RyaW5nLCBjb25maXJtPzogYm9vbGVhbik6IFByb21pc2U8YW55PjtcbiAgXG4gIC8vIENvbmZpZyB0b29sc1xuICBjb25maWd1cmVJbmRpY2F0b3IoY29uZmlnOiBhbnkpOiBQcm9taXNlPGFueT47XG4gIGdldEluZGljYXRvckNvbmZpZygpOiBQcm9taXNlPGFueT47XG4gIFxuICAvLyBFeHBvcnQvSW1wb3J0L1NoYXJlIHRvb2xzXG4gIGV4cG9ydFBlcnNvbmEocGVyc29uYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+O1xuICBleHBvcnRBbGxQZXJzb25hcyhpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBpbXBvcnRQZXJzb25hKHNvdXJjZTogc3RyaW5nLCBvdmVyd3JpdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xuICBzaGFyZVBlcnNvbmEocGVyc29uYTogc3RyaW5nLCBleHBpcnlEYXlzPzogbnVtYmVyKTogUHJvbWlzZTxhbnk+O1xuICBpbXBvcnRGcm9tVXJsKHVybDogc3RyaW5nLCBvdmVyd3JpdGU/OiBib29sZWFuKTogUHJvbWlzZTxhbnk+O1xufSJdfQ==