@dollhousemcp/mcp-server 1.4.4 → 1.4.5

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 (650) hide show
  1. package/dist/generated/version.d.ts +2 -2
  2. package/dist/generated/version.js +3 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +54 -7
  5. package/package.json +1 -1
  6. package/dist/collection/MarketplaceBrowser.d.ts +0 -24
  7. package/dist/collection/MarketplaceBrowser.d.ts.map +0 -1
  8. package/dist/collection/MarketplaceBrowser.js +0 -115
  9. package/dist/collection/MarketplaceSearch.d.ts +0 -18
  10. package/dist/collection/MarketplaceSearch.d.ts.map +0 -1
  11. package/dist/collection/MarketplaceSearch.js +0 -48
  12. package/dist/collection/PersonaInstaller.d.ts +0 -26
  13. package/dist/collection/PersonaInstaller.d.ts.map +0 -1
  14. package/dist/collection/PersonaInstaller.js +0 -103
  15. package/dist/elements/ensembles/Ensemble.d.ts +0 -144
  16. package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
  17. package/dist/elements/ensembles/Ensemble.js +0 -860
  18. package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
  19. package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
  20. package/dist/elements/ensembles/EnsembleManager.js +0 -378
  21. package/dist/elements/ensembles/constants.d.ts +0 -73
  22. package/dist/elements/ensembles/constants.d.ts.map +0 -1
  23. package/dist/elements/ensembles/constants.js +0 -92
  24. package/dist/elements/ensembles/index.d.ts +0 -8
  25. package/dist/elements/ensembles/index.d.ts.map +0 -1
  26. package/dist/elements/ensembles/index.js +0 -8
  27. package/dist/elements/ensembles/types.d.ts +0 -92
  28. package/dist/elements/ensembles/types.d.ts.map +0 -1
  29. package/dist/elements/ensembles/types.js +0 -8
  30. package/dist/elements/memories/Memory.d.ts +0 -110
  31. package/dist/elements/memories/Memory.d.ts.map +0 -1
  32. package/dist/elements/memories/Memory.js +0 -470
  33. package/dist/elements/memories/MemoryManager.d.ts +0 -86
  34. package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
  35. package/dist/elements/memories/MemoryManager.js +0 -435
  36. package/dist/elements/memories/constants.d.ts +0 -42
  37. package/dist/elements/memories/constants.d.ts.map +0 -1
  38. package/dist/elements/memories/constants.js +0 -49
  39. package/dist/elements/memories/index.d.ts +0 -6
  40. package/dist/elements/memories/index.d.ts.map +0 -1
  41. package/dist/elements/memories/index.js +0 -6
  42. package/dist/marketplace/GitHubClient.d.ts +0 -22
  43. package/dist/marketplace/GitHubClient.d.ts.map +0 -1
  44. package/dist/marketplace/GitHubClient.js +0 -112
  45. package/dist/marketplace/MarketplaceBrowser.d.ts +0 -24
  46. package/dist/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  47. package/dist/marketplace/MarketplaceBrowser.js +0 -115
  48. package/dist/marketplace/MarketplaceSearch.d.ts +0 -18
  49. package/dist/marketplace/MarketplaceSearch.d.ts.map +0 -1
  50. package/dist/marketplace/MarketplaceSearch.js +0 -48
  51. package/dist/marketplace/PersonaDetails.d.ts +0 -22
  52. package/dist/marketplace/PersonaDetails.d.ts.map +0 -1
  53. package/dist/marketplace/PersonaDetails.js +0 -71
  54. package/dist/marketplace/PersonaInstaller.d.ts +0 -25
  55. package/dist/marketplace/PersonaInstaller.d.ts.map +0 -1
  56. package/dist/marketplace/PersonaInstaller.js +0 -100
  57. package/dist/marketplace/PersonaSubmitter.d.ts +0 -19
  58. package/dist/marketplace/PersonaSubmitter.d.ts.map +0 -1
  59. package/dist/marketplace/PersonaSubmitter.js +0 -57
  60. package/dist/marketplace/index.d.ts +0 -10
  61. package/dist/marketplace/index.d.ts.map +0 -1
  62. package/dist/marketplace/index.js +0 -10
  63. package/dist/server/tools/MarketplaceTools.d.ts +0 -10
  64. package/dist/server/tools/MarketplaceTools.d.ts.map +0 -1
  65. package/dist/server/tools/MarketplaceTools.js +0 -96
  66. package/dist/src/cache/APICache.d.ts +0 -23
  67. package/dist/src/cache/APICache.d.ts.map +0 -1
  68. package/dist/src/cache/APICache.js +0 -42
  69. package/dist/src/cache/index.d.ts +0 -5
  70. package/dist/src/cache/index.d.ts.map +0 -1
  71. package/dist/src/cache/index.js +0 -5
  72. package/dist/src/config/constants.d.ts +0 -25
  73. package/dist/src/config/constants.d.ts.map +0 -1
  74. package/dist/src/config/constants.js +0 -30
  75. package/dist/src/config/index.d.ts +0 -6
  76. package/dist/src/config/index.d.ts.map +0 -1
  77. package/dist/src/config/index.js +0 -6
  78. package/dist/src/config/indicator-config.d.ts +0 -107
  79. package/dist/src/config/indicator-config.d.ts.map +0 -1
  80. package/dist/src/config/indicator-config.js +0 -158
  81. package/dist/src/constants/defaultPersonas.d.ts +0 -10
  82. package/dist/src/constants/defaultPersonas.d.ts.map +0 -1
  83. package/dist/src/constants/defaultPersonas.js +0 -18
  84. package/dist/src/constants/limits.d.ts +0 -10
  85. package/dist/src/constants/limits.d.ts.map +0 -1
  86. package/dist/src/constants/limits.js +0 -13
  87. package/dist/src/errors/SecurityError.d.ts +0 -29
  88. package/dist/src/errors/SecurityError.d.ts.map +0 -1
  89. package/dist/src/errors/SecurityError.js +0 -47
  90. package/dist/src/errors/index.d.ts +0 -2
  91. package/dist/src/errors/index.d.ts.map +0 -1
  92. package/dist/src/errors/index.js +0 -2
  93. package/dist/src/index.barrel.d.ts +0 -21
  94. package/dist/src/index.barrel.d.ts.map +0 -1
  95. package/dist/src/index.barrel.js +0 -31
  96. package/dist/src/index.d.ts +0 -220
  97. package/dist/src/index.d.ts.map +0 -1
  98. package/dist/src/index.js +0 -1559
  99. package/dist/src/marketplace/GitHubClient.d.ts +0 -22
  100. package/dist/src/marketplace/GitHubClient.d.ts.map +0 -1
  101. package/dist/src/marketplace/GitHubClient.js +0 -112
  102. package/dist/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  103. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  104. package/dist/src/marketplace/MarketplaceBrowser.js +0 -45
  105. package/dist/src/marketplace/MarketplaceSearch.d.ts +0 -18
  106. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  107. package/dist/src/marketplace/MarketplaceSearch.js +0 -36
  108. package/dist/src/marketplace/PersonaDetails.d.ts +0 -22
  109. package/dist/src/marketplace/PersonaDetails.d.ts.map +0 -1
  110. package/dist/src/marketplace/PersonaDetails.js +0 -71
  111. package/dist/src/marketplace/PersonaInstaller.d.ts +0 -25
  112. package/dist/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  113. package/dist/src/marketplace/PersonaInstaller.js +0 -100
  114. package/dist/src/marketplace/PersonaSubmitter.d.ts +0 -19
  115. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  116. package/dist/src/marketplace/PersonaSubmitter.js +0 -57
  117. package/dist/src/marketplace/index.d.ts +0 -10
  118. package/dist/src/marketplace/index.d.ts.map +0 -1
  119. package/dist/src/marketplace/index.js +0 -10
  120. package/dist/src/persona/PersonaLoader.d.ts +0 -33
  121. package/dist/src/persona/PersonaLoader.d.ts.map +0 -1
  122. package/dist/src/persona/PersonaLoader.js +0 -139
  123. package/dist/src/persona/PersonaManager.d.ts +0 -112
  124. package/dist/src/persona/PersonaManager.d.ts.map +0 -1
  125. package/dist/src/persona/PersonaManager.js +0 -341
  126. package/dist/src/persona/PersonaValidator.d.ts +0 -33
  127. package/dist/src/persona/PersonaValidator.d.ts.map +0 -1
  128. package/dist/src/persona/PersonaValidator.js +0 -157
  129. package/dist/src/persona/export-import/PersonaExporter.d.ts +0 -43
  130. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  131. package/dist/src/persona/export-import/PersonaExporter.js +0 -99
  132. package/dist/src/persona/export-import/PersonaImporter.d.ts +0 -65
  133. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  134. package/dist/src/persona/export-import/PersonaImporter.js +0 -313
  135. package/dist/src/persona/export-import/PersonaSharer.d.ts +0 -60
  136. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  137. package/dist/src/persona/export-import/PersonaSharer.js +0 -363
  138. package/dist/src/persona/export-import/index.d.ts +0 -10
  139. package/dist/src/persona/export-import/index.d.ts.map +0 -1
  140. package/dist/src/persona/export-import/index.js +0 -7
  141. package/dist/src/persona/index.d.ts +0 -7
  142. package/dist/src/persona/index.d.ts.map +0 -1
  143. package/dist/src/persona/index.js +0 -7
  144. package/dist/src/security/InputValidator.d.ts +0 -69
  145. package/dist/src/security/InputValidator.d.ts.map +0 -1
  146. package/dist/src/security/InputValidator.js +0 -381
  147. package/dist/src/security/commandValidator.d.ts +0 -7
  148. package/dist/src/security/commandValidator.d.ts.map +0 -1
  149. package/dist/src/security/commandValidator.js +0 -77
  150. package/dist/src/security/constants.d.ts +0 -21
  151. package/dist/src/security/constants.d.ts.map +0 -1
  152. package/dist/src/security/constants.js +0 -23
  153. package/dist/src/security/contentValidator.d.ts +0 -47
  154. package/dist/src/security/contentValidator.d.ts.map +0 -1
  155. package/dist/src/security/contentValidator.js +0 -188
  156. package/dist/src/security/fileLockManager.d.ts +0 -70
  157. package/dist/src/security/fileLockManager.d.ts.map +0 -1
  158. package/dist/src/security/fileLockManager.js +0 -187
  159. package/dist/src/security/index.d.ts +0 -12
  160. package/dist/src/security/index.d.ts.map +0 -1
  161. package/dist/src/security/index.js +0 -14
  162. package/dist/src/security/pathValidator.d.ts +0 -9
  163. package/dist/src/security/pathValidator.d.ts.map +0 -1
  164. package/dist/src/security/pathValidator.js +0 -97
  165. package/dist/src/security/secureYamlParser.d.ts +0 -46
  166. package/dist/src/security/secureYamlParser.d.ts.map +0 -1
  167. package/dist/src/security/secureYamlParser.js +0 -203
  168. package/dist/src/security/securityMonitor.d.ts +0 -58
  169. package/dist/src/security/securityMonitor.d.ts.map +0 -1
  170. package/dist/src/security/securityMonitor.js +0 -108
  171. package/dist/src/security/tokenManager.d.ts +0 -59
  172. package/dist/src/security/tokenManager.d.ts.map +0 -1
  173. package/dist/src/security/tokenManager.js +0 -216
  174. package/dist/src/security/yamlValidator.d.ts +0 -20
  175. package/dist/src/security/yamlValidator.d.ts.map +0 -1
  176. package/dist/src/security/yamlValidator.js +0 -138
  177. package/dist/src/server/ServerSetup.d.ts +0 -31
  178. package/dist/src/server/ServerSetup.d.ts.map +0 -1
  179. package/dist/src/server/ServerSetup.js +0 -79
  180. package/dist/src/server/index.d.ts +0 -7
  181. package/dist/src/server/index.d.ts.map +0 -1
  182. package/dist/src/server/index.js +0 -7
  183. package/dist/src/server/tools/ConfigTools.d.ts +0 -10
  184. package/dist/src/server/tools/ConfigTools.d.ts.map +0 -1
  185. package/dist/src/server/tools/ConfigTools.js +0 -63
  186. package/dist/src/server/tools/MarketplaceTools.d.ts +0 -10
  187. package/dist/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  188. package/dist/src/server/tools/MarketplaceTools.js +0 -92
  189. package/dist/src/server/tools/PersonaTools.d.ts +0 -10
  190. package/dist/src/server/tools/PersonaTools.d.ts.map +0 -1
  191. package/dist/src/server/tools/PersonaTools.js +0 -257
  192. package/dist/src/server/tools/ToolRegistry.d.ts +0 -37
  193. package/dist/src/server/tools/ToolRegistry.d.ts.map +0 -1
  194. package/dist/src/server/tools/ToolRegistry.js +0 -40
  195. package/dist/src/server/tools/UpdateTools.d.ts +0 -10
  196. package/dist/src/server/tools/UpdateTools.d.ts.map +0 -1
  197. package/dist/src/server/tools/UpdateTools.js +0 -64
  198. package/dist/src/server/tools/UserTools.d.ts +0 -10
  199. package/dist/src/server/tools/UserTools.d.ts.map +0 -1
  200. package/dist/src/server/tools/UserTools.js +0 -51
  201. package/dist/src/server/tools/index.d.ts +0 -10
  202. package/dist/src/server/tools/index.d.ts.map +0 -1
  203. package/dist/src/server/tools/index.js +0 -10
  204. package/dist/src/server/types.d.ts +0 -34
  205. package/dist/src/server/types.d.ts.map +0 -1
  206. package/dist/src/server/types.js +0 -5
  207. package/dist/src/tools/debug.d.ts +0 -20
  208. package/dist/src/tools/debug.d.ts.map +0 -1
  209. package/dist/src/tools/debug.js +0 -37
  210. package/dist/src/types/cache.d.ts +0 -8
  211. package/dist/src/types/cache.d.ts.map +0 -1
  212. package/dist/src/types/cache.js +0 -5
  213. package/dist/src/types/index.d.ts +0 -8
  214. package/dist/src/types/index.d.ts.map +0 -1
  215. package/dist/src/types/index.js +0 -8
  216. package/dist/src/types/marketplace.d.ts +0 -23
  217. package/dist/src/types/marketplace.d.ts.map +0 -1
  218. package/dist/src/types/marketplace.js +0 -5
  219. package/dist/src/types/mcp.d.ts +0 -161
  220. package/dist/src/types/mcp.d.ts.map +0 -1
  221. package/dist/src/types/mcp.js +0 -75
  222. package/dist/src/types/persona.d.ts +0 -30
  223. package/dist/src/types/persona.d.ts.map +0 -1
  224. package/dist/src/types/persona.js +0 -5
  225. package/dist/src/update/BackupManager.d.ts +0 -46
  226. package/dist/src/update/BackupManager.d.ts.map +0 -1
  227. package/dist/src/update/BackupManager.js +0 -261
  228. package/dist/src/update/DependencyChecker.d.ts +0 -41
  229. package/dist/src/update/DependencyChecker.d.ts.map +0 -1
  230. package/dist/src/update/DependencyChecker.js +0 -132
  231. package/dist/src/update/RateLimiter.d.ts +0 -80
  232. package/dist/src/update/RateLimiter.d.ts.map +0 -1
  233. package/dist/src/update/RateLimiter.js +0 -172
  234. package/dist/src/update/SignatureVerifier.d.ts +0 -71
  235. package/dist/src/update/SignatureVerifier.d.ts.map +0 -1
  236. package/dist/src/update/SignatureVerifier.js +0 -214
  237. package/dist/src/update/UpdateChecker.d.ts +0 -127
  238. package/dist/src/update/UpdateChecker.d.ts.map +0 -1
  239. package/dist/src/update/UpdateChecker.js +0 -460
  240. package/dist/src/update/UpdateManager.d.ts +0 -41
  241. package/dist/src/update/UpdateManager.d.ts.map +0 -1
  242. package/dist/src/update/UpdateManager.js +0 -260
  243. package/dist/src/update/VersionManager.d.ts +0 -31
  244. package/dist/src/update/VersionManager.d.ts.map +0 -1
  245. package/dist/src/update/VersionManager.js +0 -134
  246. package/dist/src/update/index.d.ts +0 -9
  247. package/dist/src/update/index.d.ts.map +0 -1
  248. package/dist/src/update/index.js +0 -9
  249. package/dist/src/utils/filesystem.d.ts +0 -32
  250. package/dist/src/utils/filesystem.d.ts.map +0 -1
  251. package/dist/src/utils/filesystem.js +0 -73
  252. package/dist/src/utils/git.d.ts +0 -32
  253. package/dist/src/utils/git.d.ts.map +0 -1
  254. package/dist/src/utils/git.js +0 -65
  255. package/dist/src/utils/index.d.ts +0 -7
  256. package/dist/src/utils/index.d.ts.map +0 -1
  257. package/dist/src/utils/index.js +0 -7
  258. package/dist/src/utils/logger.d.ts +0 -45
  259. package/dist/src/utils/logger.d.ts.map +0 -1
  260. package/dist/src/utils/logger.js +0 -91
  261. package/dist/src/utils/version.d.ts +0 -25
  262. package/dist/src/utils/version.d.ts.map +0 -1
  263. package/dist/src/utils/version.js +0 -97
  264. package/dist/test/src/cache/APICache.d.ts +0 -23
  265. package/dist/test/src/cache/APICache.d.ts.map +0 -1
  266. package/dist/test/src/cache/APICache.js +0 -42
  267. package/dist/test/src/cache/index.d.ts +0 -5
  268. package/dist/test/src/cache/index.d.ts.map +0 -1
  269. package/dist/test/src/cache/index.js +0 -5
  270. package/dist/test/src/collection/CollectionBrowser.d.ts +0 -24
  271. package/dist/test/src/collection/CollectionBrowser.d.ts.map +0 -1
  272. package/dist/test/src/collection/CollectionBrowser.js +0 -115
  273. package/dist/test/src/collection/CollectionSearch.d.ts +0 -18
  274. package/dist/test/src/collection/CollectionSearch.d.ts.map +0 -1
  275. package/dist/test/src/collection/CollectionSearch.js +0 -48
  276. package/dist/test/src/collection/GitHubClient.d.ts +0 -22
  277. package/dist/test/src/collection/GitHubClient.d.ts.map +0 -1
  278. package/dist/test/src/collection/GitHubClient.js +0 -114
  279. package/dist/test/src/collection/PersonaDetails.d.ts +0 -22
  280. package/dist/test/src/collection/PersonaDetails.d.ts.map +0 -1
  281. package/dist/test/src/collection/PersonaDetails.js +0 -71
  282. package/dist/test/src/collection/PersonaInstaller.d.ts +0 -26
  283. package/dist/test/src/collection/PersonaInstaller.d.ts.map +0 -1
  284. package/dist/test/src/collection/PersonaInstaller.js +0 -103
  285. package/dist/test/src/collection/PersonaSubmitter.d.ts +0 -19
  286. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +0 -1
  287. package/dist/test/src/collection/PersonaSubmitter.js +0 -57
  288. package/dist/test/src/collection/index.d.ts +0 -10
  289. package/dist/test/src/collection/index.d.ts.map +0 -1
  290. package/dist/test/src/collection/index.js +0 -10
  291. package/dist/test/src/config/constants.d.ts +0 -25
  292. package/dist/test/src/config/constants.d.ts.map +0 -1
  293. package/dist/test/src/config/constants.js +0 -30
  294. package/dist/test/src/config/index.d.ts +0 -6
  295. package/dist/test/src/config/index.d.ts.map +0 -1
  296. package/dist/test/src/config/index.js +0 -6
  297. package/dist/test/src/config/indicator-config.d.ts +0 -107
  298. package/dist/test/src/config/indicator-config.d.ts.map +0 -1
  299. package/dist/test/src/config/indicator-config.js +0 -158
  300. package/dist/test/src/constants/defaultPersonas.d.ts +0 -10
  301. package/dist/test/src/constants/defaultPersonas.d.ts.map +0 -1
  302. package/dist/test/src/constants/defaultPersonas.js +0 -18
  303. package/dist/test/src/constants/limits.d.ts +0 -10
  304. package/dist/test/src/constants/limits.d.ts.map +0 -1
  305. package/dist/test/src/constants/limits.js +0 -13
  306. package/dist/test/src/elements/BaseElement.d.ts +0 -81
  307. package/dist/test/src/elements/BaseElement.d.ts.map +0 -1
  308. package/dist/test/src/elements/BaseElement.js +0 -381
  309. package/dist/test/src/elements/FeedbackProcessor.d.ts +0 -57
  310. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +0 -1
  311. package/dist/test/src/elements/FeedbackProcessor.js +0 -418
  312. package/dist/test/src/elements/agents/Agent.d.ts +0 -145
  313. package/dist/test/src/elements/agents/Agent.d.ts.map +0 -1
  314. package/dist/test/src/elements/agents/Agent.js +0 -848
  315. package/dist/test/src/elements/agents/AgentManager.d.ts +0 -125
  316. package/dist/test/src/elements/agents/AgentManager.d.ts.map +0 -1
  317. package/dist/test/src/elements/agents/AgentManager.js +0 -608
  318. package/dist/test/src/elements/agents/constants.d.ts +0 -42
  319. package/dist/test/src/elements/agents/constants.d.ts.map +0 -1
  320. package/dist/test/src/elements/agents/constants.js +0 -45
  321. package/dist/test/src/elements/agents/goalTemplates.d.ts +0 -44
  322. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +0 -1
  323. package/dist/test/src/elements/agents/goalTemplates.js +0 -297
  324. package/dist/test/src/elements/agents/index.d.ts +0 -8
  325. package/dist/test/src/elements/agents/index.d.ts.map +0 -1
  326. package/dist/test/src/elements/agents/index.js +0 -8
  327. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +0 -76
  328. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +0 -1
  329. package/dist/test/src/elements/agents/ruleEngineConfig.js +0 -143
  330. package/dist/test/src/elements/agents/types.d.ts +0 -97
  331. package/dist/test/src/elements/agents/types.d.ts.map +0 -1
  332. package/dist/test/src/elements/agents/types.js +0 -5
  333. package/dist/test/src/elements/index.d.ts +0 -6
  334. package/dist/test/src/elements/index.d.ts.map +0 -1
  335. package/dist/test/src/elements/index.js +0 -6
  336. package/dist/test/src/elements/memories/Memory.d.ts +0 -110
  337. package/dist/test/src/elements/memories/Memory.d.ts.map +0 -1
  338. package/dist/test/src/elements/memories/Memory.js +0 -470
  339. package/dist/test/src/elements/memories/MemoryManager.d.ts +0 -86
  340. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +0 -1
  341. package/dist/test/src/elements/memories/MemoryManager.js +0 -435
  342. package/dist/test/src/elements/memories/constants.d.ts +0 -42
  343. package/dist/test/src/elements/memories/constants.d.ts.map +0 -1
  344. package/dist/test/src/elements/memories/constants.js +0 -49
  345. package/dist/test/src/elements/memories/index.d.ts +0 -6
  346. package/dist/test/src/elements/memories/index.d.ts.map +0 -1
  347. package/dist/test/src/elements/memories/index.js +0 -6
  348. package/dist/test/src/elements/skills/Skill.d.ts +0 -109
  349. package/dist/test/src/elements/skills/Skill.d.ts.map +0 -1
  350. package/dist/test/src/elements/skills/Skill.js +0 -381
  351. package/dist/test/src/elements/templates/Template.d.ts +0 -138
  352. package/dist/test/src/elements/templates/Template.d.ts.map +0 -1
  353. package/dist/test/src/elements/templates/Template.js +0 -673
  354. package/dist/test/src/elements/templates/TemplateManager.d.ts +0 -104
  355. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +0 -1
  356. package/dist/test/src/elements/templates/TemplateManager.js +0 -496
  357. package/dist/test/src/elements/templates/index.d.ts +0 -6
  358. package/dist/test/src/elements/templates/index.d.ts.map +0 -1
  359. package/dist/test/src/elements/templates/index.js +0 -6
  360. package/dist/test/src/errors/SecurityError.d.ts +0 -29
  361. package/dist/test/src/errors/SecurityError.d.ts.map +0 -1
  362. package/dist/test/src/errors/SecurityError.js +0 -47
  363. package/dist/test/src/errors/index.d.ts +0 -2
  364. package/dist/test/src/errors/index.d.ts.map +0 -1
  365. package/dist/test/src/errors/index.js +0 -2
  366. package/dist/test/src/index.barrel.d.ts +0 -21
  367. package/dist/test/src/index.barrel.d.ts.map +0 -1
  368. package/dist/test/src/index.barrel.js +0 -31
  369. package/dist/test/src/index.d.ts +0 -223
  370. package/dist/test/src/index.d.ts.map +0 -1
  371. package/dist/test/src/index.js +0 -1594
  372. package/dist/test/src/marketplace/GitHubClient.d.ts +0 -22
  373. package/dist/test/src/marketplace/GitHubClient.d.ts.map +0 -1
  374. package/dist/test/src/marketplace/GitHubClient.js +0 -112
  375. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  376. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  377. package/dist/test/src/marketplace/MarketplaceBrowser.js +0 -45
  378. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +0 -18
  379. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  380. package/dist/test/src/marketplace/MarketplaceSearch.js +0 -36
  381. package/dist/test/src/marketplace/PersonaDetails.d.ts +0 -22
  382. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +0 -1
  383. package/dist/test/src/marketplace/PersonaDetails.js +0 -71
  384. package/dist/test/src/marketplace/PersonaInstaller.d.ts +0 -25
  385. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  386. package/dist/test/src/marketplace/PersonaInstaller.js +0 -100
  387. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +0 -19
  388. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  389. package/dist/test/src/marketplace/PersonaSubmitter.js +0 -57
  390. package/dist/test/src/marketplace/index.d.ts +0 -10
  391. package/dist/test/src/marketplace/index.d.ts.map +0 -1
  392. package/dist/test/src/marketplace/index.js +0 -10
  393. package/dist/test/src/persona/PersonaElement.d.ts +0 -64
  394. package/dist/test/src/persona/PersonaElement.d.ts.map +0 -1
  395. package/dist/test/src/persona/PersonaElement.js +0 -223
  396. package/dist/test/src/persona/PersonaElementManager.d.ts +0 -97
  397. package/dist/test/src/persona/PersonaElementManager.d.ts.map +0 -1
  398. package/dist/test/src/persona/PersonaElementManager.js +0 -342
  399. package/dist/test/src/persona/PersonaLoader.d.ts +0 -34
  400. package/dist/test/src/persona/PersonaLoader.d.ts.map +0 -1
  401. package/dist/test/src/persona/PersonaLoader.js +0 -145
  402. package/dist/test/src/persona/PersonaManager.d.ts +0 -112
  403. package/dist/test/src/persona/PersonaManager.d.ts.map +0 -1
  404. package/dist/test/src/persona/PersonaManager.js +0 -341
  405. package/dist/test/src/persona/PersonaValidator.d.ts +0 -33
  406. package/dist/test/src/persona/PersonaValidator.d.ts.map +0 -1
  407. package/dist/test/src/persona/PersonaValidator.js +0 -157
  408. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +0 -43
  409. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  410. package/dist/test/src/persona/export-import/PersonaExporter.js +0 -99
  411. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +0 -65
  412. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  413. package/dist/test/src/persona/export-import/PersonaImporter.js +0 -315
  414. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +0 -60
  415. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  416. package/dist/test/src/persona/export-import/PersonaSharer.js +0 -502
  417. package/dist/test/src/persona/export-import/index.d.ts +0 -10
  418. package/dist/test/src/persona/export-import/index.d.ts.map +0 -1
  419. package/dist/test/src/persona/export-import/index.js +0 -7
  420. package/dist/test/src/persona/index.d.ts +0 -7
  421. package/dist/test/src/persona/index.d.ts.map +0 -1
  422. package/dist/test/src/persona/index.js +0 -7
  423. package/dist/test/src/portfolio/MigrationManager.d.ts +0 -44
  424. package/dist/test/src/portfolio/MigrationManager.d.ts.map +0 -1
  425. package/dist/test/src/portfolio/MigrationManager.js +0 -163
  426. package/dist/test/src/portfolio/PortfolioManager.d.ts +0 -54
  427. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +0 -1
  428. package/dist/test/src/portfolio/PortfolioManager.js +0 -224
  429. package/dist/test/src/portfolio/types.d.ts +0 -18
  430. package/dist/test/src/portfolio/types.d.ts.map +0 -1
  431. package/dist/test/src/portfolio/types.js +0 -13
  432. package/dist/test/src/security/InputValidator.d.ts +0 -80
  433. package/dist/test/src/security/InputValidator.d.ts.map +0 -1
  434. package/dist/test/src/security/InputValidator.js +0 -436
  435. package/dist/test/src/security/audit/SecurityAuditor.d.ts +0 -44
  436. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +0 -1
  437. package/dist/test/src/security/audit/SecurityAuditor.js +0 -274
  438. package/dist/test/src/security/audit/config/suppressions.d.ts +0 -34
  439. package/dist/test/src/security/audit/config/suppressions.d.ts.map +0 -1
  440. package/dist/test/src/security/audit/config/suppressions.js +0 -575
  441. package/dist/test/src/security/audit/index.d.ts +0 -14
  442. package/dist/test/src/security/audit/index.d.ts.map +0 -1
  443. package/dist/test/src/security/audit/index.js +0 -15
  444. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +0 -46
  445. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +0 -1
  446. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +0 -174
  447. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +0 -13
  448. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +0 -1
  449. package/dist/test/src/security/audit/reporters/JsonReporter.js +0 -25
  450. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +0 -13
  451. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +0 -1
  452. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +0 -79
  453. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +0 -20
  454. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +0 -1
  455. package/dist/test/src/security/audit/rules/SecurityRules.js +0 -244
  456. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +0 -47
  457. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +0 -1
  458. package/dist/test/src/security/audit/scanners/CodeScanner.js +0 -174
  459. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +0 -13
  460. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +0 -1
  461. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +0 -22
  462. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +0 -13
  463. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +0 -1
  464. package/dist/test/src/security/audit/scanners/DependencyScanner.js +0 -22
  465. package/dist/test/src/security/audit/types.d.ts +0 -94
  466. package/dist/test/src/security/audit/types.d.ts.map +0 -1
  467. package/dist/test/src/security/audit/types.js +0 -6
  468. package/dist/test/src/security/commandValidator.d.ts +0 -7
  469. package/dist/test/src/security/commandValidator.d.ts.map +0 -1
  470. package/dist/test/src/security/commandValidator.js +0 -78
  471. package/dist/test/src/security/constants.d.ts +0 -24
  472. package/dist/test/src/security/constants.d.ts.map +0 -1
  473. package/dist/test/src/security/constants.js +0 -26
  474. package/dist/test/src/security/contentValidator.d.ts +0 -47
  475. package/dist/test/src/security/contentValidator.d.ts.map +0 -1
  476. package/dist/test/src/security/contentValidator.js +0 -301
  477. package/dist/test/src/security/errors.d.ts +0 -14
  478. package/dist/test/src/security/errors.d.ts.map +0 -1
  479. package/dist/test/src/security/errors.js +0 -28
  480. package/dist/test/src/security/fileLockManager.d.ts +0 -70
  481. package/dist/test/src/security/fileLockManager.d.ts.map +0 -1
  482. package/dist/test/src/security/fileLockManager.js +0 -187
  483. package/dist/test/src/security/index.d.ts +0 -12
  484. package/dist/test/src/security/index.d.ts.map +0 -1
  485. package/dist/test/src/security/index.js +0 -14
  486. package/dist/test/src/security/pathValidator.d.ts +0 -9
  487. package/dist/test/src/security/pathValidator.d.ts.map +0 -1
  488. package/dist/test/src/security/pathValidator.js +0 -98
  489. package/dist/test/src/security/regexValidator.d.ts +0 -59
  490. package/dist/test/src/security/regexValidator.d.ts.map +0 -1
  491. package/dist/test/src/security/regexValidator.js +0 -214
  492. package/dist/test/src/security/secureYamlParser.d.ts +0 -46
  493. package/dist/test/src/security/secureYamlParser.d.ts.map +0 -1
  494. package/dist/test/src/security/secureYamlParser.js +0 -203
  495. package/dist/test/src/security/securityMonitor.d.ts +0 -58
  496. package/dist/test/src/security/securityMonitor.d.ts.map +0 -1
  497. package/dist/test/src/security/securityMonitor.js +0 -108
  498. package/dist/test/src/security/tokenManager.d.ts +0 -85
  499. package/dist/test/src/security/tokenManager.d.ts.map +0 -1
  500. package/dist/test/src/security/tokenManager.js +0 -286
  501. package/dist/test/src/security/validators/unicodeValidator.d.ts +0 -97
  502. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +0 -1
  503. package/dist/test/src/security/validators/unicodeValidator.js +0 -312
  504. package/dist/test/src/security/yamlValidator.d.ts +0 -21
  505. package/dist/test/src/security/yamlValidator.d.ts.map +0 -1
  506. package/dist/test/src/security/yamlValidator.js +0 -164
  507. package/dist/test/src/server/ServerSetup.d.ts +0 -35
  508. package/dist/test/src/server/ServerSetup.d.ts.map +0 -1
  509. package/dist/test/src/server/ServerSetup.js +0 -116
  510. package/dist/test/src/server/index.d.ts +0 -7
  511. package/dist/test/src/server/index.d.ts.map +0 -1
  512. package/dist/test/src/server/index.js +0 -7
  513. package/dist/test/src/server/startup.d.ts +0 -31
  514. package/dist/test/src/server/startup.d.ts.map +0 -1
  515. package/dist/test/src/server/startup.js +0 -67
  516. package/dist/test/src/server/tools/CollectionTools.d.ts +0 -10
  517. package/dist/test/src/server/tools/CollectionTools.d.ts.map +0 -1
  518. package/dist/test/src/server/tools/CollectionTools.js +0 -96
  519. package/dist/test/src/server/tools/ConfigTools.d.ts +0 -10
  520. package/dist/test/src/server/tools/ConfigTools.d.ts.map +0 -1
  521. package/dist/test/src/server/tools/ConfigTools.js +0 -63
  522. package/dist/test/src/server/tools/MarketplaceTools.d.ts +0 -10
  523. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  524. package/dist/test/src/server/tools/MarketplaceTools.js +0 -92
  525. package/dist/test/src/server/tools/PersonaTools.d.ts +0 -10
  526. package/dist/test/src/server/tools/PersonaTools.d.ts.map +0 -1
  527. package/dist/test/src/server/tools/PersonaTools.js +0 -257
  528. package/dist/test/src/server/tools/ToolRegistry.d.ts +0 -37
  529. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +0 -1
  530. package/dist/test/src/server/tools/ToolRegistry.js +0 -40
  531. package/dist/test/src/server/tools/UpdateTools.d.ts +0 -10
  532. package/dist/test/src/server/tools/UpdateTools.d.ts.map +0 -1
  533. package/dist/test/src/server/tools/UpdateTools.js +0 -64
  534. package/dist/test/src/server/tools/UserTools.d.ts +0 -10
  535. package/dist/test/src/server/tools/UserTools.d.ts.map +0 -1
  536. package/dist/test/src/server/tools/UserTools.js +0 -51
  537. package/dist/test/src/server/tools/index.d.ts +0 -10
  538. package/dist/test/src/server/tools/index.d.ts.map +0 -1
  539. package/dist/test/src/server/tools/index.js +0 -10
  540. package/dist/test/src/server/types.d.ts +0 -34
  541. package/dist/test/src/server/types.d.ts.map +0 -1
  542. package/dist/test/src/server/types.js +0 -5
  543. package/dist/test/src/tools/debug.d.ts +0 -20
  544. package/dist/test/src/tools/debug.d.ts.map +0 -1
  545. package/dist/test/src/tools/debug.js +0 -37
  546. package/dist/test/src/types/cache.d.ts +0 -8
  547. package/dist/test/src/types/cache.d.ts.map +0 -1
  548. package/dist/test/src/types/cache.js +0 -5
  549. package/dist/test/src/types/collection.d.ts +0 -23
  550. package/dist/test/src/types/collection.d.ts.map +0 -1
  551. package/dist/test/src/types/collection.js +0 -5
  552. package/dist/test/src/types/elements/IElement.d.ts +0 -123
  553. package/dist/test/src/types/elements/IElement.d.ts.map +0 -1
  554. package/dist/test/src/types/elements/IElement.js +0 -30
  555. package/dist/test/src/types/elements/IElementManager.d.ts +0 -65
  556. package/dist/test/src/types/elements/IElementManager.d.ts.map +0 -1
  557. package/dist/test/src/types/elements/IElementManager.js +0 -6
  558. package/dist/test/src/types/elements/IRatingManager.d.ts +0 -109
  559. package/dist/test/src/types/elements/IRatingManager.d.ts.map +0 -1
  560. package/dist/test/src/types/elements/IRatingManager.js +0 -6
  561. package/dist/test/src/types/elements/IReferenceResolver.d.ts +0 -52
  562. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +0 -1
  563. package/dist/test/src/types/elements/IReferenceResolver.js +0 -6
  564. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +0 -49
  565. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +0 -1
  566. package/dist/test/src/types/elements/RatingBreakdowns.js +0 -6
  567. package/dist/test/src/types/elements/index.d.ts +0 -9
  568. package/dist/test/src/types/elements/index.d.ts.map +0 -1
  569. package/dist/test/src/types/elements/index.js +0 -11
  570. package/dist/test/src/types/index.d.ts +0 -9
  571. package/dist/test/src/types/index.d.ts.map +0 -1
  572. package/dist/test/src/types/index.js +0 -9
  573. package/dist/test/src/types/marketplace.d.ts +0 -23
  574. package/dist/test/src/types/marketplace.d.ts.map +0 -1
  575. package/dist/test/src/types/marketplace.js +0 -5
  576. package/dist/test/src/types/mcp.d.ts +0 -84
  577. package/dist/test/src/types/mcp.d.ts.map +0 -1
  578. package/dist/test/src/types/mcp.js +0 -80
  579. package/dist/test/src/types/persona.d.ts +0 -30
  580. package/dist/test/src/types/persona.d.ts.map +0 -1
  581. package/dist/test/src/types/persona.js +0 -5
  582. package/dist/test/src/update/BackupManager.d.ts +0 -46
  583. package/dist/test/src/update/BackupManager.d.ts.map +0 -1
  584. package/dist/test/src/update/BackupManager.js +0 -261
  585. package/dist/test/src/update/DependencyChecker.d.ts +0 -41
  586. package/dist/test/src/update/DependencyChecker.d.ts.map +0 -1
  587. package/dist/test/src/update/DependencyChecker.js +0 -132
  588. package/dist/test/src/update/RateLimiter.d.ts +0 -80
  589. package/dist/test/src/update/RateLimiter.d.ts.map +0 -1
  590. package/dist/test/src/update/RateLimiter.js +0 -172
  591. package/dist/test/src/update/SignatureVerifier.d.ts +0 -71
  592. package/dist/test/src/update/SignatureVerifier.d.ts.map +0 -1
  593. package/dist/test/src/update/SignatureVerifier.js +0 -214
  594. package/dist/test/src/update/UpdateChecker.d.ts +0 -127
  595. package/dist/test/src/update/UpdateChecker.d.ts.map +0 -1
  596. package/dist/test/src/update/UpdateChecker.js +0 -469
  597. package/dist/test/src/update/UpdateManager.d.ts +0 -41
  598. package/dist/test/src/update/UpdateManager.d.ts.map +0 -1
  599. package/dist/test/src/update/UpdateManager.js +0 -260
  600. package/dist/test/src/update/VersionManager.d.ts +0 -31
  601. package/dist/test/src/update/VersionManager.d.ts.map +0 -1
  602. package/dist/test/src/update/VersionManager.js +0 -134
  603. package/dist/test/src/update/index.d.ts +0 -9
  604. package/dist/test/src/update/index.d.ts.map +0 -1
  605. package/dist/test/src/update/index.js +0 -9
  606. package/dist/test/src/utils/filesystem.d.ts +0 -29
  607. package/dist/test/src/utils/filesystem.d.ts.map +0 -1
  608. package/dist/test/src/utils/filesystem.js +0 -94
  609. package/dist/test/src/utils/git.d.ts +0 -32
  610. package/dist/test/src/utils/git.d.ts.map +0 -1
  611. package/dist/test/src/utils/git.js +0 -65
  612. package/dist/test/src/utils/index.d.ts +0 -7
  613. package/dist/test/src/utils/index.d.ts.map +0 -1
  614. package/dist/test/src/utils/index.js +0 -7
  615. package/dist/test/src/utils/logger.d.ts +0 -45
  616. package/dist/test/src/utils/logger.d.ts.map +0 -1
  617. package/dist/test/src/utils/logger.js +0 -91
  618. package/dist/test/src/utils/version.d.ts +0 -25
  619. package/dist/test/src/utils/version.d.ts.map +0 -1
  620. package/dist/test/src/utils/version.js +0 -97
  621. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +0 -33
  622. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +0 -1
  623. package/dist/test/test/__tests__/integration/helpers/file-utils.js +0 -83
  624. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +0 -26
  625. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +0 -1
  626. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +0 -95
  627. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +0 -26
  628. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +0 -1
  629. package/dist/test/test/__tests__/integration/helpers/test-server.js +0 -41
  630. package/dist/test/test/__tests__/integration/setup.d.ts +0 -8
  631. package/dist/test/test/__tests__/integration/setup.d.ts.map +0 -1
  632. package/dist/test/test/__tests__/integration/setup.js +0 -31
  633. package/dist/test/test/__tests__/integration/teardown.d.ts +0 -5
  634. package/dist/test/test/__tests__/integration/teardown.d.ts.map +0 -1
  635. package/dist/test/test/__tests__/integration/teardown.js +0 -23
  636. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +0 -34
  637. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +0 -1
  638. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +0 -224
  639. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +0 -89
  640. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +0 -1
  641. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +0 -543
  642. package/dist/test/test/__tests__/security/index.d.ts +0 -46
  643. package/dist/test/test/__tests__/security/index.d.ts.map +0 -1
  644. package/dist/test/test/__tests__/security/index.js +0 -98
  645. package/dist/test/test/__tests__/security/setup.d.ts +0 -3
  646. package/dist/test/test/__tests__/security/setup.d.ts.map +0 -1
  647. package/dist/test/test/__tests__/security/setup.js +0 -23
  648. package/dist/types/marketplace.d.ts +0 -23
  649. package/dist/types/marketplace.d.ts.map +0 -1
  650. package/dist/types/marketplace.js +0 -5
@@ -1,80 +0,0 @@
1
- /**
2
- * Input validation and sanitization functions
3
- */
4
- /**
5
- * Enhanced input validation for MCP tools
6
- */
7
- export declare class MCPInputValidator {
8
- /**
9
- * Validate a persona identifier (name or filename)
10
- */
11
- static validatePersonaIdentifier(identifier: string): string;
12
- /**
13
- * Validate search query for collection
14
- */
15
- static validateSearchQuery(query: string): string;
16
- /**
17
- * Validate collection path
18
- */
19
- static validateCollectionPath(path: string): string;
20
- /**
21
- * Validate URL for import operations
22
- */
23
- static validateImportUrl(url: string): string;
24
- /**
25
- * Validate expiry days for sharing
26
- */
27
- static validateExpiryDays(days: number): number;
28
- /**
29
- * Validate boolean confirmation parameters
30
- */
31
- static validateConfirmation(confirm: boolean, operationName: string): boolean;
32
- /**
33
- * Validate field name for edit operations
34
- */
35
- static validateEditField(field: string): string;
36
- /**
37
- * Check if hostname is a private IP address (IPv4 and IPv6)
38
- */
39
- private static isPrivateIP;
40
- /**
41
- * Check for encoded private IP addresses that could bypass basic detection
42
- */
43
- private static isEncodedPrivateIP;
44
- }
45
- /**
46
- * Validate and sanitize a filename
47
- */
48
- export declare function validateFilename(filename: string): string;
49
- /**
50
- * Validate and sanitize a path
51
- */
52
- export declare function validatePath(inputPath: string, baseDir?: string): string;
53
- /**
54
- * Validate and sanitize a username
55
- */
56
- export declare function validateUsername(username: string): string;
57
- /**
58
- * Validate a category
59
- */
60
- export declare function validateCategory(category: string): string;
61
- /**
62
- * Validate content size
63
- */
64
- export declare function validateContentSize(content: string, maxSize?: number): void;
65
- /**
66
- * Comprehensive input validation before pattern matching
67
- * Validates all content types with appropriate limits
68
- */
69
- export interface ContentValidationOptions {
70
- maxContentLength?: number;
71
- maxYamlLength?: number;
72
- maxMetadataFieldLength?: number;
73
- maxFileSize?: number;
74
- }
75
- export declare function validateInputLengths(content: string, contentType: 'full' | 'yaml' | 'metadata' | 'field', options?: ContentValidationOptions): void;
76
- /**
77
- * General input sanitization
78
- */
79
- export declare function sanitizeInput(input: string, maxLength?: number): string;
80
- //# sourceMappingURL=InputValidator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InputValidator.d.ts","sourceRoot":"","sources":["../../../../src/security/InputValidator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH;;GAEG;AACH,qBAAa,iBAAiB;IAC5B;;OAEG;IACH,MAAM,CAAC,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAkB5D;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA4BjD;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAoDnD;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IA8D7C;;OAEG;IACH,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgB/C;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAY7E;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAkB/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAgD1B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;CA+BlC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiBzD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAwCxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUzD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBzD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAA2C,GAAG,IAAI,CAS/G;AAED;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,EACnD,OAAO,GAAE,wBAA6B,GACrC,IAAI,CA2CN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAa,GAAG,MAAM,CAa7E"}
@@ -1,436 +0,0 @@
1
- /**
2
- * Input validation and sanitization functions
3
- */
4
- import * as path from 'path';
5
- import { SECURITY_LIMITS, VALIDATION_PATTERNS } from './constants.js';
6
- import { VALID_CATEGORIES } from '../config/constants.js';
7
- import { RegexValidator } from './regexValidator.js';
8
- // Pre-compiled regex patterns for better performance
9
- // These patterns are used repeatedly and benefit from pre-compilation
10
- const CONTROL_CHARS_REGEX = /[\x00-\x1F\x7F]/g;
11
- const HTML_DANGEROUS_REGEX = /[<>'"&]/g;
12
- const SHELL_METACHAR_REGEX = /[;&|`$()!\\~*?{}]/g;
13
- const RTL_ZEROWIDTH_REGEX = /[\u202E\uFEFF]/g;
14
- const COLLECTION_PATH_CHAR_REGEX = /[a-zA-Z0-9\/\-_.]/;
15
- const VALID_COLLECTION_PATH_REGEX = /^[a-zA-Z0-9\/\-_.]*$/;
16
- const IPV4_REGEX = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
17
- const DECIMAL_IP_REGEX = /^\d{8,10}$/;
18
- const HEX_IP_REGEX = /^0x[0-9a-f]{1,8}$/i;
19
- const OCTAL_IP_REGEX = /^0[0-7]{8,11}$/;
20
- const FILENAME_DANGEROUS_REGEX = /[\/\\:*?"<>|]/g;
21
- const FILENAME_LEADING_DOTS_REGEX = /^\.+/;
22
- const PATH_NORMALIZE_REGEX = /^\/{1,100}|\/{1,100}$/g;
23
- const PATH_MULTIPLE_SLASHES_REGEX = /\/{1,100}/g;
24
- const URL_PLUS_DECODE_REGEX = /\+/g;
25
- /**
26
- * Enhanced input validation for MCP tools
27
- */
28
- export class MCPInputValidator {
29
- /**
30
- * Validate a persona identifier (name or filename)
31
- */
32
- static validatePersonaIdentifier(identifier) {
33
- if (!identifier || typeof identifier !== 'string') {
34
- throw new Error('Persona identifier must be a non-empty string');
35
- }
36
- if (identifier.length > 100) {
37
- throw new Error('Persona identifier too long (max 100 characters)');
38
- }
39
- // Allow persona names and filenames
40
- const sanitized = sanitizeInput(identifier, 100);
41
- if (!sanitized) {
42
- throw new Error('Persona identifier contains only invalid characters');
43
- }
44
- return sanitized;
45
- }
46
- /**
47
- * Validate search query for collection
48
- */
49
- static validateSearchQuery(query) {
50
- if (!query || typeof query !== 'string') {
51
- throw new Error('Search query must be a non-empty string');
52
- }
53
- if (query.length < 2) {
54
- throw new Error('Search query too short (minimum 2 characters)');
55
- }
56
- if (query.length > 200) {
57
- throw new Error('Search query too long (max 200 characters)');
58
- }
59
- // Sanitize but preserve spaces for search
60
- const sanitized = query
61
- .replace(CONTROL_CHARS_REGEX, '') // Remove control characters
62
- .replace(HTML_DANGEROUS_REGEX, '') // Remove HTML-dangerous characters
63
- .replace(SHELL_METACHAR_REGEX, '') // Remove shell metacharacters (expanded)
64
- .replace(RTL_ZEROWIDTH_REGEX, '') // Remove RTL override and zero-width chars
65
- .trim();
66
- if (!sanitized) {
67
- throw new Error('Search query contains only invalid characters');
68
- }
69
- return sanitized;
70
- }
71
- /**
72
- * Validate collection path
73
- */
74
- static validateCollectionPath(path) {
75
- if (!path || typeof path !== 'string') {
76
- throw new Error('Collection path must be a non-empty string');
77
- }
78
- if (path.length > 500) {
79
- throw new Error('Collection path too long (max 500 characters)');
80
- }
81
- // GitHub API paths should be safe filename patterns
82
- // Use single regex test for better performance (avoids O(n) character-by-character check)
83
- if (!VALID_COLLECTION_PATH_REGEX.test(path)) {
84
- // Only do character-by-character check if validation fails, to provide detailed error message
85
- for (let i = 0; i < path.length; i++) {
86
- const char = path[i];
87
- if (!COLLECTION_PATH_CHAR_REGEX.test(char)) {
88
- throw new Error(`Invalid character '${char}' in collection path at position ${i + 1}`);
89
- }
90
- }
91
- // Fallback error if we somehow don't find the invalid character
92
- throw new Error('Invalid characters in collection path');
93
- }
94
- // Prevent path traversal in GitHub paths (comprehensive check)
95
- const pathLower = path.toLowerCase();
96
- const encodedPath = decodeURIComponent(path.replace(URL_PLUS_DECODE_REGEX, ' ')); // Decode URL encoding
97
- // Check for various path traversal patterns
98
- const traversalPatterns = [
99
- '..', // Basic traversal
100
- './', // Current directory
101
- '/../', // Directory traversal with slashes
102
- '\\', // Backslash (Windows-style)
103
- '%2e%2e', // URL-encoded ..
104
- '%2e%2e%2f', // URL-encoded ../
105
- '%2e%2e%5c', // URL-encoded ..\
106
- '%252e%252e', // Double URL-encoded ..
107
- '..%2f', // Mixed encoding
108
- '..%5c', // Mixed encoding with backslash
109
- '..../', // Dotdot bypass attempt
110
- '..;/', // Semicolon bypass attempt
111
- ];
112
- for (const pattern of traversalPatterns) {
113
- if (pathLower.includes(pattern) || encodedPath.toLowerCase().includes(pattern)) {
114
- throw new Error('Path traversal not allowed in collection path');
115
- }
116
- }
117
- return path;
118
- }
119
- /**
120
- * Validate URL for import operations
121
- */
122
- static validateImportUrl(url) {
123
- if (!url || typeof url !== 'string') {
124
- throw new Error('URL must be a non-empty string');
125
- }
126
- if (url.length > 2000) {
127
- throw new Error('URL too long (max 2000 characters)');
128
- }
129
- // Reject protocol-relative URLs that could bypass validation
130
- if (url.startsWith('//')) {
131
- throw new Error('Protocol-relative URLs are not allowed');
132
- }
133
- try {
134
- // Decode URL to prevent encoding-based bypasses
135
- let decodedUrl = url;
136
- try {
137
- decodedUrl = decodeURIComponent(url);
138
- }
139
- catch {
140
- // If decoding fails, use original URL
141
- }
142
- const parsed = new URL(decodedUrl);
143
- // Protocol validation
144
- if (!['http:', 'https:'].includes(parsed.protocol)) {
145
- throw new Error('Only HTTP(S) URLs are allowed');
146
- }
147
- // Enhanced SSRF protection with IDN normalization
148
- let hostname = parsed.hostname.toLowerCase();
149
- // Handle IDN (International Domain Names) by converting to ASCII
150
- try {
151
- const idnNormalized = new URL(`http://${hostname}`).hostname;
152
- hostname = idnNormalized;
153
- }
154
- catch (idnError) {
155
- // If IDN conversion fails, reject the URL for security
156
- throw new Error('Invalid hostname: IDN conversion failed - potentially malicious domain name');
157
- }
158
- // Check for private IPs (now with IDN-normalized hostname)
159
- if (this.isPrivateIP(hostname)) {
160
- throw new Error('Private network URLs are not allowed');
161
- }
162
- // Additional SSRF checks for encoded IPs
163
- if (this.isEncodedPrivateIP(hostname)) {
164
- throw new Error('Encoded private network URLs are not allowed');
165
- }
166
- return url;
167
- }
168
- catch (error) {
169
- if (error instanceof Error && (error.message.includes('Private network') || error.message.includes('Encoded private'))) {
170
- throw error;
171
- }
172
- const errorMessage = error instanceof Error ? error.message : 'Unknown error';
173
- throw new Error(`Invalid URL format: ${errorMessage}`);
174
- }
175
- }
176
- /**
177
- * Validate expiry days for sharing
178
- */
179
- static validateExpiryDays(days) {
180
- if (typeof days !== 'number') {
181
- throw new Error('Expiry days must be a valid number');
182
- }
183
- if (isNaN(days) || !isFinite(days)) {
184
- throw new Error('Expiry days must be a valid number');
185
- }
186
- if (days < 1 || days > 365) {
187
- throw new Error('Expiry days must be between 1 and 365');
188
- }
189
- return Math.floor(days);
190
- }
191
- /**
192
- * Validate boolean confirmation parameters
193
- */
194
- static validateConfirmation(confirm, operationName) {
195
- if (typeof confirm !== 'boolean') {
196
- throw new Error(`${operationName} confirmation must be a boolean value`);
197
- }
198
- if (!confirm) {
199
- throw new Error(`${operationName} operation requires explicit confirmation (true)`);
200
- }
201
- return confirm;
202
- }
203
- /**
204
- * Validate field name for edit operations
205
- */
206
- static validateEditField(field) {
207
- if (!field || typeof field !== 'string') {
208
- throw new Error('Field name must be a non-empty string');
209
- }
210
- const validFields = [
211
- 'name', 'description', 'category', 'instructions',
212
- 'triggers', 'version', 'author', 'tags'
213
- ];
214
- const normalizedField = field.toLowerCase().trim();
215
- if (!validFields.includes(normalizedField)) {
216
- throw new Error(`Invalid field name. Must be one of: ${validFields.join(', ')}`);
217
- }
218
- return normalizedField;
219
- }
220
- /**
221
- * Check if hostname is a private IP address (IPv4 and IPv6)
222
- */
223
- static isPrivateIP(hostname) {
224
- // Check for localhost variations
225
- if (['localhost', '127.0.0.1', '::1'].includes(hostname)) {
226
- return true;
227
- }
228
- // Check for private IPv4 ranges
229
- const ipv4Match = hostname.match(IPV4_REGEX);
230
- if (ipv4Match) {
231
- const [, a, b, c, d] = ipv4Match.map(Number);
232
- // 10.0.0.0/8
233
- if (a === 10)
234
- return true;
235
- // 172.16.0.0/12
236
- if (a === 172 && b >= 16 && b <= 31)
237
- return true;
238
- // 192.168.0.0/16
239
- if (a === 192 && b === 168)
240
- return true;
241
- // 169.254.0.0/16 (link-local)
242
- if (a === 169 && b === 254)
243
- return true;
244
- }
245
- // Check for private IPv6 ranges
246
- const ipv6Lower = hostname.toLowerCase();
247
- // fc00::/7 - Unique Local Addresses (ULA)
248
- if (ipv6Lower.startsWith('fc') || ipv6Lower.startsWith('fd')) {
249
- return true;
250
- }
251
- // fe80::/10 - Link-Local Addresses
252
- // IPv6 link-local addresses are fe80::/10, meaning the valid range is fe80 through febf
253
- const fe80Range = parseInt(ipv6Lower.substring(0, 4), 16);
254
- if (fe80Range >= 0xfe80 && fe80Range <= 0xfebf) {
255
- return true;
256
- }
257
- // Additional IPv6 localhost formats
258
- if (['::1', '0:0:0:0:0:0:0:1'].includes(ipv6Lower)) {
259
- return true;
260
- }
261
- return false;
262
- }
263
- /**
264
- * Check for encoded private IP addresses that could bypass basic detection
265
- */
266
- static isEncodedPrivateIP(hostname) {
267
- // Check for decimal encoded IPs (e.g., 2130706433 = 127.0.0.1)
268
- if (DECIMAL_IP_REGEX.test(hostname)) {
269
- const num = parseInt(hostname, 10);
270
- if (num >= 0 && num <= 4294967295) { // Valid IPv4 range
271
- // Convert to IP format and check if private
272
- const ip = [(num >>> 24) & 255, (num >>> 16) & 255, (num >>> 8) & 255, num & 255].join('.');
273
- return this.isPrivateIP(ip);
274
- }
275
- }
276
- // Check for hex encoded IPs (e.g., 0x7f000001 = 127.0.0.1)
277
- if (HEX_IP_REGEX.test(hostname)) {
278
- const num = parseInt(hostname, 16);
279
- if (num >= 0 && num <= 4294967295) {
280
- const ip = [(num >>> 24) & 255, (num >>> 16) & 255, (num >>> 8) & 255, num & 255].join('.');
281
- return this.isPrivateIP(ip);
282
- }
283
- }
284
- // Check for octal encoded IPs (e.g., 017700000001 = 127.0.0.1)
285
- if (OCTAL_IP_REGEX.test(hostname)) {
286
- const num = parseInt(hostname, 8);
287
- if (num >= 0 && num <= 4294967295) {
288
- const ip = [(num >>> 24) & 255, (num >>> 16) & 255, (num >>> 8) & 255, num & 255].join('.');
289
- return this.isPrivateIP(ip);
290
- }
291
- }
292
- return false;
293
- }
294
- }
295
- /**
296
- * Validate and sanitize a filename
297
- */
298
- export function validateFilename(filename) {
299
- if (!filename || typeof filename !== 'string') {
300
- throw new Error('Filename must be a non-empty string');
301
- }
302
- if (filename.length > SECURITY_LIMITS.MAX_FILENAME_LENGTH) {
303
- throw new Error(`Filename too long (max ${SECURITY_LIMITS.MAX_FILENAME_LENGTH} characters)`);
304
- }
305
- // Remove any path separators and dangerous characters
306
- const sanitized = filename.replace(FILENAME_DANGEROUS_REGEX, '').replace(FILENAME_LEADING_DOTS_REGEX, '');
307
- if (!RegexValidator.validate(sanitized, VALIDATION_PATTERNS.SAFE_FILENAME, { maxLength: SECURITY_LIMITS.MAX_FILENAME_LENGTH })) {
308
- throw new Error('Invalid filename format. Use alphanumeric characters, hyphens, underscores, and dots only.');
309
- }
310
- return sanitized;
311
- }
312
- /**
313
- * Validate and sanitize a path
314
- */
315
- export function validatePath(inputPath, baseDir) {
316
- if (!inputPath || typeof inputPath !== 'string') {
317
- throw new Error('Path must be a non-empty string');
318
- }
319
- // If baseDir is provided and inputPath is absolute, reject it
320
- if (baseDir && path.isAbsolute(inputPath)) {
321
- throw new Error('Absolute paths not allowed when base directory is specified');
322
- }
323
- // Remove leading/trailing slashes and normalize
324
- // Length limits added to prevent ReDoS attacks
325
- const normalized = inputPath.replace(PATH_NORMALIZE_REGEX, '').replace(PATH_MULTIPLE_SLASHES_REGEX, '/');
326
- if (!VALIDATION_PATTERNS.SAFE_PATH.test(normalized)) {
327
- throw new Error('Invalid path format. Use alphanumeric characters, hyphens, underscores, dots, and forward slashes only.');
328
- }
329
- // Check for path traversal attempts
330
- if (normalized.includes('..') || normalized.includes('./') || normalized.includes('/.')) {
331
- throw new Error('Path traversal not allowed');
332
- }
333
- // Validate path depth
334
- const depth = normalized.split('/').length;
335
- if (depth > SECURITY_LIMITS.MAX_PATH_DEPTH) {
336
- throw new Error(`Path too deep (max ${SECURITY_LIMITS.MAX_PATH_DEPTH} levels)`);
337
- }
338
- // If baseDir provided, ensure path is within it
339
- if (baseDir) {
340
- const resolvedPath = path.resolve(baseDir, normalized);
341
- const resolvedBase = path.resolve(baseDir);
342
- if (!resolvedPath.startsWith(resolvedBase)) {
343
- throw new Error('Path traversal attempt detected');
344
- }
345
- }
346
- return normalized;
347
- }
348
- /**
349
- * Validate and sanitize a username
350
- */
351
- export function validateUsername(username) {
352
- if (!username || typeof username !== 'string') {
353
- throw new Error('Username must be a non-empty string');
354
- }
355
- if (!VALIDATION_PATTERNS.SAFE_USERNAME.test(username)) {
356
- throw new Error('Invalid username format. Use alphanumeric characters, hyphens, underscores, and dots only.');
357
- }
358
- return username.toLowerCase();
359
- }
360
- /**
361
- * Validate a category
362
- */
363
- export function validateCategory(category) {
364
- if (!category || typeof category !== 'string') {
365
- throw new Error('Category must be a non-empty string');
366
- }
367
- if (!RegexValidator.validate(category, VALIDATION_PATTERNS.SAFE_CATEGORY, { maxLength: 50 })) {
368
- throw new Error('Invalid category format. Use alphabetic characters, hyphens, and underscores only.');
369
- }
370
- const normalized = category.toLowerCase();
371
- if (!VALID_CATEGORIES.includes(normalized)) {
372
- throw new Error(`Invalid category. Must be one of: ${VALID_CATEGORIES.join(', ')}`);
373
- }
374
- return normalized;
375
- }
376
- /**
377
- * Validate content size
378
- */
379
- export function validateContentSize(content, maxSize = SECURITY_LIMITS.MAX_CONTENT_LENGTH) {
380
- if (!content || typeof content !== 'string') {
381
- throw new Error('Content must be a non-empty string');
382
- }
383
- const sizeBytes = Buffer.byteLength(content, 'utf8');
384
- if (sizeBytes > maxSize) {
385
- throw new Error(`Content too large (${sizeBytes} bytes, max ${maxSize} bytes)`);
386
- }
387
- }
388
- export function validateInputLengths(content, contentType, options = {}) {
389
- const limits = {
390
- maxContentLength: options.maxContentLength ?? SECURITY_LIMITS.MAX_CONTENT_LENGTH,
391
- maxYamlLength: options.maxYamlLength ?? SECURITY_LIMITS.MAX_YAML_LENGTH,
392
- maxMetadataFieldLength: options.maxMetadataFieldLength ?? SECURITY_LIMITS.MAX_METADATA_FIELD_LENGTH,
393
- maxFileSize: options.maxFileSize ?? SECURITY_LIMITS.MAX_FILE_SIZE
394
- };
395
- // Validate based on content type
396
- switch (contentType) {
397
- case 'full':
398
- if (content.length > limits.maxContentLength) {
399
- throw new Error(`Content exceeds maximum length of ${limits.maxContentLength} characters (${content.length} provided)`);
400
- }
401
- break;
402
- case 'yaml':
403
- if (content.length > limits.maxYamlLength) {
404
- throw new Error(`YAML content exceeds maximum length of ${limits.maxYamlLength} characters (${content.length} provided)`);
405
- }
406
- break;
407
- case 'metadata':
408
- // For metadata, check overall size
409
- if (content.length > limits.maxYamlLength) {
410
- throw new Error(`Metadata exceeds maximum length of ${limits.maxYamlLength} characters (${content.length} provided)`);
411
- }
412
- break;
413
- case 'field':
414
- if (content.length > limits.maxMetadataFieldLength) {
415
- throw new Error(`Field exceeds maximum length of ${limits.maxMetadataFieldLength} characters (${content.length} provided)`);
416
- }
417
- break;
418
- }
419
- }
420
- /**
421
- * General input sanitization
422
- */
423
- export function sanitizeInput(input, maxLength = 1000) {
424
- if (!input || typeof input !== 'string') {
425
- return '';
426
- }
427
- // Remove potentially dangerous characters and limit length
428
- return input
429
- .replace(CONTROL_CHARS_REGEX, '') // Remove control characters
430
- .replace(HTML_DANGEROUS_REGEX, '') // Remove HTML-dangerous characters
431
- .replace(SHELL_METACHAR_REGEX, '') // Remove shell metacharacters (expanded)
432
- .replace(RTL_ZEROWIDTH_REGEX, '') // Remove RTL override and zero-width chars
433
- .substring(0, maxLength)
434
- .trim();
435
- }
436
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5wdXRWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELHFEQUFxRDtBQUNyRCxzRUFBc0U7QUFDdEUsTUFBTSxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztBQUN4QyxNQUFNLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ2xELE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsTUFBTSwwQkFBMEIsR0FBRyxtQkFBbUIsQ0FBQztBQUN2RCxNQUFNLDJCQUEyQixHQUFHLHNCQUFzQixDQUFDO0FBQzNELE1BQU0sVUFBVSxHQUFHLDhCQUE4QixDQUFDO0FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO0FBQ3RDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDO0FBQzFDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0FBQ3hDLE1BQU0sd0JBQXdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLENBQUM7QUFDM0MsTUFBTSxvQkFBb0IsR0FBRyx3QkFBd0IsQ0FBQztBQUN0RCxNQUFNLDJCQUEyQixHQUFHLFlBQVksQ0FBQztBQUNqRCxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQztBQUVwQzs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUI7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U0FDM0UsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLDJDQUEyQztTQUM1RSxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztTQUN2QixJQUFJLEVBQUUsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIElucHV0IHZhbGlkYXRpb24gYW5kIHNhbml0aXphdGlvbiBmdW5jdGlvbnNcbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTLCBWQUxJREFUSU9OX1BBVFRFUk5TIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgVkFMSURfQ0FURUdPUklFUyB9IGZyb20gJy4uL2NvbmZpZy9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgUmVnZXhWYWxpZGF0b3IgfSBmcm9tICcuL3JlZ2V4VmFsaWRhdG9yLmpzJztcblxuLy8gUHJlLWNvbXBpbGVkIHJlZ2V4IHBhdHRlcm5zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2Vcbi8vIFRoZXNlIHBhdHRlcm5zIGFyZSB1c2VkIHJlcGVhdGVkbHkgYW5kIGJlbmVmaXQgZnJvbSBwcmUtY29tcGlsYXRpb25cbmNvbnN0IENPTlRST0xfQ0hBUlNfUkVHRVggPSAvW1xceDAwLVxceDFGXFx4N0ZdL2c7XG5jb25zdCBIVE1MX0RBTkdFUk9VU19SRUdFWCA9IC9bPD4nXCImXS9nO1xuY29uc3QgU0hFTExfTUVUQUNIQVJfUkVHRVggPSAvWzsmfGAkKCkhXFxcXH4qP3t9XS9nO1xuY29uc3QgUlRMX1pFUk9XSURUSF9SRUdFWCA9IC9bXFx1MjAyRVxcdUZFRkZdL2c7XG5jb25zdCBDT0xMRUNUSU9OX1BBVEhfQ0hBUl9SRUdFWCA9IC9bYS16QS1aMC05XFwvXFwtXy5dLztcbmNvbnN0IFZBTElEX0NPTExFQ1RJT05fUEFUSF9SRUdFWCA9IC9eW2EtekEtWjAtOVxcL1xcLV8uXSokLztcbmNvbnN0IElQVjRfUkVHRVggPSAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSQvO1xuY29uc3QgREVDSU1BTF9JUF9SRUdFWCA9IC9eXFxkezgsMTB9JC87XG5jb25zdCBIRVhfSVBfUkVHRVggPSAvXjB4WzAtOWEtZl17MSw4fSQvaTtcbmNvbnN0IE9DVEFMX0lQX1JFR0VYID0gL14wWzAtN117OCwxMX0kLztcbmNvbnN0IEZJTEVOQU1FX0RBTkdFUk9VU19SRUdFWCA9IC9bXFwvXFxcXDoqP1wiPD58XS9nO1xuY29uc3QgRklMRU5BTUVfTEVBRElOR19ET1RTX1JFR0VYID0gL15cXC4rLztcbmNvbnN0IFBBVEhfTk9STUFMSVpFX1JFR0VYID0gL15cXC97MSwxMDB9fFxcL3sxLDEwMH0kL2c7XG5jb25zdCBQQVRIX01VTFRJUExFX1NMQVNIRVNfUkVHRVggPSAvXFwvezEsMTAwfS9nO1xuY29uc3QgVVJMX1BMVVNfREVDT0RFX1JFR0VYID0gL1xcKy9nO1xuXG4vKipcbiAqIEVuaGFuY2VkIGlucHV0IHZhbGlkYXRpb24gZm9yIE1DUCB0b29sc1xuICovXG5leHBvcnQgY2xhc3MgTUNQSW5wdXRWYWxpZGF0b3Ige1xuICAvKipcbiAgICogVmFsaWRhdGUgYSBwZXJzb25hIGlkZW50aWZpZXIgKG5hbWUgb3IgZmlsZW5hbWUpXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVQZXJzb25hSWRlbnRpZmllcihpZGVudGlmaWVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaWRlbnRpZmllciB8fCB0eXBlb2YgaWRlbnRpZmllciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGVyc29uYSBpZGVudGlmaWVyIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKGlkZW50aWZpZXIubGVuZ3RoID4gMTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcnNvbmEgaWRlbnRpZmllciB0b28gbG9uZyAobWF4IDEwMCBjaGFyYWN0ZXJzKScpO1xuICAgIH1cblxuICAgIC8vIEFsbG93IHBlcnNvbmEgbmFtZXMgYW5kIGZpbGVuYW1lc1xuICAgIGNvbnN0IHNhbml0aXplZCA9IHNhbml0aXplSW5wdXQoaWRlbnRpZmllciwgMTAwKTtcbiAgICBpZiAoIXNhbml0aXplZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQZXJzb25hIGlkZW50aWZpZXIgY29udGFpbnMgb25seSBpbnZhbGlkIGNoYXJhY3RlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2FuaXRpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHNlYXJjaCBxdWVyeSBmb3IgY29sbGVjdGlvblxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlU2VhcmNoUXVlcnkocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFxdWVyeSB8fCB0eXBlb2YgcXVlcnkgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBxdWVyeSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5sZW5ndGggPCAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBxdWVyeSB0b28gc2hvcnQgKG1pbmltdW0gMiBjaGFyYWN0ZXJzKScpO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5sZW5ndGggPiAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VhcmNoIHF1ZXJ5IHRvbyBsb25nIChtYXggMjAwIGNoYXJhY3RlcnMpJyk7XG4gICAgfVxuXG4gICAgLy8gU2FuaXRpemUgYnV0IHByZXNlcnZlIHNwYWNlcyBmb3Igc2VhcmNoXG4gICAgY29uc3Qgc2FuaXRpemVkID0gcXVlcnlcbiAgICAgIC5yZXBsYWNlKENPTlRST0xfQ0hBUlNfUkVHRVgsICcnKSAvLyBSZW1vdmUgY29udHJvbCBjaGFyYWN0ZXJzXG4gICAgICAucmVwbGFjZShIVE1MX0RBTkdFUk9VU19SRUdFWCwgJycpIC8vIFJlbW92ZSBIVE1MLWRhbmdlcm91cyBjaGFyYWN0ZXJzXG4gICAgICAucmVwbGFjZShTSEVMTF9NRVRBQ0hBUl9SRUdFWCwgJycpIC8vIFJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVycyAoZXhwYW5kZWQpXG4gICAgICAucmVwbGFjZShSVExfWkVST1dJRFRIX1JFR0VYLCAnJykgLy8gUmVtb3ZlIFJUTCBvdmVycmlkZSBhbmQgemVyby13aWR0aCBjaGFyc1xuICAgICAgLnRyaW0oKTtcblxuICAgIGlmICghc2FuaXRpemVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlYXJjaCBxdWVyeSBjb250YWlucyBvbmx5IGludmFsaWQgY2hhcmFjdGVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgY29sbGVjdGlvbiBwYXRoXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVDb2xsZWN0aW9uUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghcGF0aCB8fCB0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sbGVjdGlvbiBwYXRoIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKHBhdGgubGVuZ3RoID4gNTAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbGxlY3Rpb24gcGF0aCB0b28gbG9uZyAobWF4IDUwMCBjaGFyYWN0ZXJzKScpO1xuICAgIH1cblxuICAgIC8vIEdpdEh1YiBBUEkgcGF0aHMgc2hvdWxkIGJlIHNhZmUgZmlsZW5hbWUgcGF0dGVybnNcbiAgICAvLyBVc2Ugc2luZ2xlIHJlZ2V4IHRlc3QgZm9yIGJldHRlciBwZXJmb3JtYW5jZSAoYXZvaWRzIE8obikgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBjaGVjaylcbiAgICBpZiAoIVZBTElEX0NPTExFQ1RJT05fUEFUSF9SRUdFWC50ZXN0KHBhdGgpKSB7XG4gICAgICAvLyBPbmx5IGRvIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgY2hlY2sgaWYgdmFsaWRhdGlvbiBmYWlscywgdG8gcHJvdmlkZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHBhdGhbaV07XG4gICAgICAgIGlmICghQ09MTEVDVElPTl9QQVRIX0NIQVJfUkVHRVgudGVzdChjaGFyKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFyYWN0ZXIgJyR7Y2hhcn0nIGluIGNvbGxlY3Rpb24gcGF0aCBhdCBwb3NpdGlvbiAke2kgKyAxfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGYWxsYmFjayBlcnJvciBpZiB3ZSBzb21laG93IGRvbid0IGZpbmQgdGhlIGludmFsaWQgY2hhcmFjdGVyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBjb2xsZWN0aW9uIHBhdGgnKTtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IHBhdGggdHJhdmVyc2FsIGluIEdpdEh1YiBwYXRocyAoY29tcHJlaGVuc2l2ZSBjaGVjaylcbiAgICBjb25zdCBwYXRoTG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgZW5jb2RlZFBhdGggPSBkZWNvZGVVUklDb21wb25lbnQocGF0aC5yZXBsYWNlKFVSTF9QTFVTX0RFQ09ERV9SRUdFWCwgJyAnKSk7IC8vIERlY29kZSBVUkwgZW5jb2RpbmdcbiAgICBcbiAgICAvLyBDaGVjayBmb3IgdmFyaW91cyBwYXRoIHRyYXZlcnNhbCBwYXR0ZXJuc1xuICAgIGNvbnN0IHRyYXZlcnNhbFBhdHRlcm5zID0gW1xuICAgICAgJy4uJywgICAgICAgICAgLy8gQmFzaWMgdHJhdmVyc2FsXG4gICAgICAnLi8nLCAgICAgICAgICAvLyBDdXJyZW50IGRpcmVjdG9yeVxuICAgICAgJy8uLi8nLCAgICAgICAgLy8gRGlyZWN0b3J5IHRyYXZlcnNhbCB3aXRoIHNsYXNoZXNcbiAgICAgICdcXFxcJywgICAgICAgICAgLy8gQmFja3NsYXNoIChXaW5kb3dzLXN0eWxlKVxuICAgICAgJyUyZSUyZScsICAgICAgLy8gVVJMLWVuY29kZWQgLi5cbiAgICAgICclMmUlMmUlMmYnLCAgIC8vIFVSTC1lbmNvZGVkIC4uL1xuICAgICAgJyUyZSUyZSU1YycsICAgLy8gVVJMLWVuY29kZWQgLi5cXFxuICAgICAgJyUyNTJlJTI1MmUnLCAgLy8gRG91YmxlIFVSTC1lbmNvZGVkIC4uXG4gICAgICAnLi4lMmYnLCAgICAgICAvLyBNaXhlZCBlbmNvZGluZ1xuICAgICAgJy4uJTVjJywgICAgICAgLy8gTWl4ZWQgZW5jb2Rpbmcgd2l0aCBiYWNrc2xhc2hcbiAgICAgICcuLi4uLycsICAgICAgIC8vIERvdGRvdCBieXBhc3MgYXR0ZW1wdFxuICAgICAgJy4uOy8nLCAgICAgICAgLy8gU2VtaWNvbG9uIGJ5cGFzcyBhdHRlbXB0XG4gICAgXTtcbiAgICBcbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgdHJhdmVyc2FsUGF0dGVybnMpIHtcbiAgICAgIGlmIChwYXRoTG93ZXIuaW5jbHVkZXMocGF0dGVybikgfHwgZW5jb2RlZFBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhwYXR0ZXJuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggdHJhdmVyc2FsIG5vdCBhbGxvd2VkIGluIGNvbGxlY3Rpb24gcGF0aCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIFVSTCBmb3IgaW1wb3J0IG9wZXJhdGlvbnNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUltcG9ydFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF1cmwgfHwgdHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVVJMIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKHVybC5sZW5ndGggPiAyMDAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VSTCB0b28gbG9uZyAobWF4IDIwMDAgY2hhcmFjdGVycyknKTtcbiAgICB9XG5cbiAgICAvLyBSZWplY3QgcHJvdG9jb2wtcmVsYXRpdmUgVVJMcyB0aGF0IGNvdWxkIGJ5cGFzcyB2YWxpZGF0aW9uXG4gICAgaWYgKHVybC5zdGFydHNXaXRoKCcvLycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3RvY29sLXJlbGF0aXZlIFVSTHMgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIERlY29kZSBVUkwgdG8gcHJldmVudCBlbmNvZGluZy1iYXNlZCBieXBhc3Nlc1xuICAgICAgbGV0IGRlY29kZWRVcmwgPSB1cmw7XG4gICAgICB0cnkge1xuICAgICAgICBkZWNvZGVkVXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWYgZGVjb2RpbmcgZmFpbHMsIHVzZSBvcmlnaW5hbCBVUkxcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChkZWNvZGVkVXJsKTtcbiAgICAgIFxuICAgICAgLy8gUHJvdG9jb2wgdmFsaWRhdGlvblxuICAgICAgaWYgKCFbJ2h0dHA6JywgJ2h0dHBzOiddLmluY2x1ZGVzKHBhcnNlZC5wcm90b2NvbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IEhUVFAoUykgVVJMcyBhcmUgYWxsb3dlZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFbmhhbmNlZCBTU1JGIHByb3RlY3Rpb24gd2l0aCBJRE4gbm9ybWFsaXphdGlvblxuICAgICAgbGV0IGhvc3RuYW1lID0gcGFyc2VkLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBJRE4gKEludGVybmF0aW9uYWwgRG9tYWluIE5hbWVzKSBieSBjb252ZXJ0aW5nIHRvIEFTQ0lJXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpZG5Ob3JtYWxpemVkID0gbmV3IFVSTChgaHR0cDovLyR7aG9zdG5hbWV9YCkuaG9zdG5hbWU7XG4gICAgICAgIGhvc3RuYW1lID0gaWRuTm9ybWFsaXplZDtcbiAgICAgIH0gY2F0Y2ggKGlkbkVycm9yKSB7XG4gICAgICAgIC8vIElmIElETiBjb252ZXJzaW9uIGZhaWxzLCByZWplY3QgdGhlIFVSTCBmb3Igc2VjdXJpdHlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhvc3RuYW1lOiBJRE4gY29udmVyc2lvbiBmYWlsZWQgLSBwb3RlbnRpYWxseSBtYWxpY2lvdXMgZG9tYWluIG5hbWUnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgZm9yIHByaXZhdGUgSVBzIChub3cgd2l0aCBJRE4tbm9ybWFsaXplZCBob3N0bmFtZSlcbiAgICAgIGlmICh0aGlzLmlzUHJpdmF0ZUlQKGhvc3RuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ByaXZhdGUgbmV0d29yayBVUkxzIGFyZSBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBBZGRpdGlvbmFsIFNTUkYgY2hlY2tzIGZvciBlbmNvZGVkIElQc1xuICAgICAgaWYgKHRoaXMuaXNFbmNvZGVkUHJpdmF0ZUlQKGhvc3RuYW1lKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY29kZWQgcHJpdmF0ZSBuZXR3b3JrIFVSTHMgYXJlIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1cmw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIChlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdQcml2YXRlIG5ldHdvcmsnKSB8fCBlcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdFbmNvZGVkIHByaXZhdGUnKSkpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJztcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBVUkwgZm9ybWF0OiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZXhwaXJ5IGRheXMgZm9yIHNoYXJpbmdcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUV4cGlyeURheXMoZGF5czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIGRheXMgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGlyeSBkYXlzIG11c3QgYmUgYSB2YWxpZCBudW1iZXInKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGlzTmFOKGRheXMpIHx8ICFpc0Zpbml0ZShkYXlzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBpcnkgZGF5cyBtdXN0IGJlIGEgdmFsaWQgbnVtYmVyJyk7XG4gICAgfVxuXG4gICAgaWYgKGRheXMgPCAxIHx8IGRheXMgPiAzNjUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwaXJ5IGRheXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDM2NScpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGJvb2xlYW4gY29uZmlybWF0aW9uIHBhcmFtZXRlcnNcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZUNvbmZpcm1hdGlvbihjb25maXJtOiBib29sZWFuLCBvcGVyYXRpb25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpcm0gIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbk5hbWV9IGNvbmZpcm1hdGlvbiBtdXN0IGJlIGEgYm9vbGVhbiB2YWx1ZWApO1xuICAgIH1cblxuICAgIGlmICghY29uZmlybSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke29wZXJhdGlvbk5hbWV9IG9wZXJhdGlvbiByZXF1aXJlcyBleHBsaWNpdCBjb25maXJtYXRpb24gKHRydWUpYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpcm07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgZmllbGQgbmFtZSBmb3IgZWRpdCBvcGVyYXRpb25zXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVFZGl0RmllbGQoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZCB8fCB0eXBlb2YgZmllbGQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZEZpZWxkcyA9IFtcbiAgICAgICduYW1lJywgJ2Rlc2NyaXB0aW9uJywgJ2NhdGVnb3J5JywgJ2luc3RydWN0aW9ucycsIFxuICAgICAgJ3RyaWdnZXJzJywgJ3ZlcnNpb24nLCAnYXV0aG9yJywgJ3RhZ3MnXG4gICAgXTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRGaWVsZCA9IGZpZWxkLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghdmFsaWRGaWVsZHMuaW5jbHVkZXMobm9ybWFsaXplZEZpZWxkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZpZWxkIG5hbWUuIE11c3QgYmUgb25lIG9mOiAke3ZhbGlkRmllbGRzLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRGaWVsZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBob3N0bmFtZSBpcyBhIHByaXZhdGUgSVAgYWRkcmVzcyAoSVB2NCBhbmQgSVB2NilcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGlzUHJpdmF0ZUlQKGhvc3RuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBmb3IgbG9jYWxob3N0IHZhcmlhdGlvbnNcbiAgICBpZiAoWydsb2NhbGhvc3QnLCAnMTI3LjAuMC4xJywgJzo6MSddLmluY2x1ZGVzKGhvc3RuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHByaXZhdGUgSVB2NCByYW5nZXNcbiAgICBjb25zdCBpcHY0TWF0Y2ggPSBob3N0bmFtZS5tYXRjaChJUFY0X1JFR0VYKTtcbiAgICBcbiAgICBpZiAoaXB2NE1hdGNoKSB7XG4gICAgICBjb25zdCBbLCBhLCBiLCBjLCBkXSA9IGlwdjRNYXRjaC5tYXAoTnVtYmVyKTtcbiAgICAgIFxuICAgICAgLy8gMTAuMC4wLjAvOFxuICAgICAgaWYgKGEgPT09IDEwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIFxuICAgICAgLy8gMTcyLjE2LjAuMC8xMlxuICAgICAgaWYgKGEgPT09IDE3MiAmJiBiID49IDE2ICYmIGIgPD0gMzEpIHJldHVybiB0cnVlO1xuICAgICAgXG4gICAgICAvLyAxOTIuMTY4LjAuMC8xNlxuICAgICAgaWYgKGEgPT09IDE5MiAmJiBiID09PSAxNjgpIHJldHVybiB0cnVlO1xuICAgICAgXG4gICAgICAvLyAxNjkuMjU0LjAuMC8xNiAobGluay1sb2NhbClcbiAgICAgIGlmIChhID09PSAxNjkgJiYgYiA9PT0gMjU0KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgcHJpdmF0ZSBJUHY2IHJhbmdlc1xuICAgIGNvbnN0IGlwdjZMb3dlciA9IGhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgLy8gZmMwMDo6LzcgLSBVbmlxdWUgTG9jYWwgQWRkcmVzc2VzIChVTEEpXG4gICAgaWYgKGlwdjZMb3dlci5zdGFydHNXaXRoKCdmYycpIHx8IGlwdjZMb3dlci5zdGFydHNXaXRoKCdmZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gZmU4MDo6LzEwIC0gTGluay1Mb2NhbCBBZGRyZXNzZXNcbiAgICAvLyBJUHY2IGxpbmstbG9jYWwgYWRkcmVzc2VzIGFyZSBmZTgwOjovMTAsIG1lYW5pbmcgdGhlIHZhbGlkIHJhbmdlIGlzIGZlODAgdGhyb3VnaCBmZWJmXG4gICAgY29uc3QgZmU4MFJhbmdlID0gcGFyc2VJbnQoaXB2Nkxvd2VyLnN1YnN0cmluZygwLCA0KSwgMTYpO1xuICAgIGlmIChmZTgwUmFuZ2UgPj0gMHhmZTgwICYmIGZlODBSYW5nZSA8PSAweGZlYmYpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBBZGRpdGlvbmFsIElQdjYgbG9jYWxob3N0IGZvcm1hdHNcbiAgICBpZiAoWyc6OjEnLCAnMDowOjA6MDowOjA6MDoxJ10uaW5jbHVkZXMoaXB2Nkxvd2VyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBlbmNvZGVkIHByaXZhdGUgSVAgYWRkcmVzc2VzIHRoYXQgY291bGQgYnlwYXNzIGJhc2ljIGRldGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbmNvZGVkUHJpdmF0ZUlQKGhvc3RuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBmb3IgZGVjaW1hbCBlbmNvZGVkIElQcyAoZS5nLiwgMjEzMDcwNjQzMyA9IDEyNy4wLjAuMSlcbiAgICBpZiAoREVDSU1BTF9JUF9SRUdFWC50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQoaG9zdG5hbWUsIDEwKTtcbiAgICAgIGlmIChudW0gPj0gMCAmJiBudW0gPD0gNDI5NDk2NzI5NSkgeyAvLyBWYWxpZCBJUHY0IHJhbmdlXG4gICAgICAgIC8vIENvbnZlcnQgdG8gSVAgZm9ybWF0IGFuZCBjaGVjayBpZiBwcml2YXRlXG4gICAgICAgIGNvbnN0IGlwID0gWyhudW0gPj4+IDI0KSAmIDI1NSwgKG51bSA+Pj4gMTYpICYgMjU1LCAobnVtID4+PiA4KSAmIDI1NSwgbnVtICYgMjU1XS5qb2luKCcuJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJpdmF0ZUlQKGlwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIGhleCBlbmNvZGVkIElQcyAoZS5nLiwgMHg3ZjAwMDAwMSA9IDEyNy4wLjAuMSlcbiAgICBpZiAoSEVYX0lQX1JFR0VYLnRlc3QoaG9zdG5hbWUpKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUludChob3N0bmFtZSwgMTYpO1xuICAgICAgaWYgKG51bSA+PSAwICYmIG51bSA8PSA0Mjk0OTY3Mjk1KSB7XG4gICAgICAgIGNvbnN0IGlwID0gWyhudW0gPj4+IDI0KSAmIDI1NSwgKG51bSA+Pj4gMTYpICYgMjU1LCAobnVtID4+PiA4KSAmIDI1NSwgbnVtICYgMjU1XS5qb2luKCcuJyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJpdmF0ZUlQKGlwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgZm9yIG9jdGFsIGVuY29kZWQgSVBzIChlLmcuLCAwMTc3MDAwMDAwMDEgPSAxMjcuMC4wLjEpXG4gICAgaWYgKE9DVEFMX0lQX1JFR0VYLnRlc3QoaG9zdG5hbWUpKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZUludChob3N0bmFtZSwgOCk7XG4gICAgICBpZiAobnVtID49IDAgJiYgbnVtIDw9IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgY29uc3QgaXAgPSBbKG51bSA+Pj4gMjQpICYgMjU1LCAobnVtID4+PiAxNikgJiAyNTUsIChudW0gPj4+IDgpICYgMjU1LCBudW0gJiAyNTVdLmpvaW4oJy4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNQcml2YXRlSVAoaXApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgc2FuaXRpemUgYSBmaWxlbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFmaWxlbmFtZSB8fCB0eXBlb2YgZmlsZW5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG4gIFxuICBpZiAoZmlsZW5hbWUubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9GSUxFTkFNRV9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGVuYW1lIHRvbyBsb25nIChtYXggJHtTRUNVUklUWV9MSU1JVFMuTUFYX0ZJTEVOQU1FX0xFTkdUSH0gY2hhcmFjdGVycylgKTtcbiAgfVxuICBcbiAgLy8gUmVtb3ZlIGFueSBwYXRoIHNlcGFyYXRvcnMgYW5kIGRhbmdlcm91cyBjaGFyYWN0ZXJzXG4gIGNvbnN0IHNhbml0aXplZCA9IGZpbGVuYW1lLnJlcGxhY2UoRklMRU5BTUVfREFOR0VST1VTX1JFR0VYLCAnJykucmVwbGFjZShGSUxFTkFNRV9MRUFESU5HX0RPVFNfUkVHRVgsICcnKTtcbiAgXG4gIGlmICghUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUoc2FuaXRpemVkLCBWQUxJREFUSU9OX1BBVFRFUk5TLlNBRkVfRklMRU5BTUUsIHsgbWF4TGVuZ3RoOiBTRUNVUklUWV9MSU1JVFMuTUFYX0ZJTEVOQU1FX0xFTkdUSCB9KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmaWxlbmFtZSBmb3JtYXQuIFVzZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycywgaHlwaGVucywgdW5kZXJzY29yZXMsIGFuZCBkb3RzIG9ubHkuJyk7XG4gIH1cbiAgXG4gIHJldHVybiBzYW5pdGl6ZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIHNhbml0aXplIGEgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQYXRoKGlucHV0UGF0aDogc3RyaW5nLCBiYXNlRGlyPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFpbnB1dFBhdGggfHwgdHlwZW9mIGlucHV0UGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBcbiAgLy8gSWYgYmFzZURpciBpcyBwcm92aWRlZCBhbmQgaW5wdXRQYXRoIGlzIGFic29sdXRlLCByZWplY3QgaXRcbiAgaWYgKGJhc2VEaXIgJiYgcGF0aC5pc0Fic29sdXRlKGlucHV0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Fic29sdXRlIHBhdGhzIG5vdCBhbGxvd2VkIHdoZW4gYmFzZSBkaXJlY3RvcnkgaXMgc3BlY2lmaWVkJyk7XG4gIH1cbiAgXG4gIC8vIFJlbW92ZSBsZWFkaW5nL3RyYWlsaW5nIHNsYXNoZXMgYW5kIG5vcm1hbGl6ZVxuICAvLyBMZW5ndGggbGltaXRzIGFkZGVkIHRvIHByZXZlbnQgUmVEb1MgYXR0YWNrc1xuICBjb25zdCBub3JtYWxpemVkID0gaW5wdXRQYXRoLnJlcGxhY2UoUEFUSF9OT1JNQUxJWkVfUkVHRVgsICcnKS5yZXBsYWNlKFBBVEhfTVVMVElQTEVfU0xBU0hFU19SRUdFWCwgJy8nKTtcbiAgXG4gIGlmICghVkFMSURBVElPTl9QQVRURVJOUy5TQUZFX1BBVEgudGVzdChub3JtYWxpemVkKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXRoIGZvcm1hdC4gVXNlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCB1bmRlcnNjb3JlcywgZG90cywgYW5kIGZvcndhcmQgc2xhc2hlcyBvbmx5LicpO1xuICB9XG4gIFxuICAvLyBDaGVjayBmb3IgcGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdHNcbiAgaWYgKG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy4uJykgfHwgbm9ybWFsaXplZC5pbmNsdWRlcygnLi8nKSB8fCBub3JtYWxpemVkLmluY2x1ZGVzKCcvLicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIHRyYXZlcnNhbCBub3QgYWxsb3dlZCcpO1xuICB9XG4gIFxuICAvLyBWYWxpZGF0ZSBwYXRoIGRlcHRoXG4gIGNvbnN0IGRlcHRoID0gbm9ybWFsaXplZC5zcGxpdCgnLycpLmxlbmd0aDtcbiAgaWYgKGRlcHRoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9QQVRIX0RFUFRIKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXRoIHRvbyBkZWVwIChtYXggJHtTRUNVUklUWV9MSU1JVFMuTUFYX1BBVEhfREVQVEh9IGxldmVscylgKTtcbiAgfVxuICBcbiAgLy8gSWYgYmFzZURpciBwcm92aWRlZCwgZW5zdXJlIHBhdGggaXMgd2l0aGluIGl0XG4gIGlmIChiYXNlRGlyKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKGJhc2VEaXIsIG5vcm1hbGl6ZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkQmFzZSA9IHBhdGgucmVzb2x2ZShiYXNlRGlyKTtcbiAgICBcbiAgICBpZiAoIXJlc29sdmVkUGF0aC5zdGFydHNXaXRoKHJlc29sdmVkQmFzZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGF0aCB0cmF2ZXJzYWwgYXR0ZW1wdCBkZXRlY3RlZCcpO1xuICAgIH1cbiAgfVxuICBcbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIHNhbml0aXplIGEgdXNlcm5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghdXNlcm5hbWUgfHwgdHlwZW9mIHVzZXJuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignVXNlcm5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgfVxuICBcbiAgaWYgKCFWQUxJREFUSU9OX1BBVFRFUk5TLlNBRkVfVVNFUk5BTUUudGVzdCh1c2VybmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdXNlcm5hbWUgZm9ybWF0LiBVc2UgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIHVuZGVyc2NvcmVzLCBhbmQgZG90cyBvbmx5LicpO1xuICB9XG4gIFxuICByZXR1cm4gdXNlcm5hbWUudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGNhdGVnb3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNhdGVnb3J5KGNhdGVnb3J5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWNhdGVnb3J5IHx8IHR5cGVvZiBjYXRlZ29yeSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhdGVnb3J5IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gIH1cbiAgXG4gIGlmICghUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUoY2F0ZWdvcnksIFZBTElEQVRJT05fUEFUVEVSTlMuU0FGRV9DQVRFR09SWSwgeyBtYXhMZW5ndGg6IDUwIH0pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNhdGVnb3J5IGZvcm1hdC4gVXNlIGFscGhhYmV0aWMgY2hhcmFjdGVycywgaHlwaGVucywgYW5kIHVuZGVyc2NvcmVzIG9ubHkuJyk7XG4gIH1cbiAgXG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBjYXRlZ29yeS50b0xvd2VyQ2FzZSgpO1xuICBcbiAgaWYgKCFWQUxJRF9DQVRFR09SSUVTLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNhdGVnb3J5LiBNdXN0IGJlIG9uZSBvZjogJHtWQUxJRF9DQVRFR09SSUVTLmpvaW4oJywgJyl9YCk7XG4gIH1cbiAgXG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGNvbnRlbnQgc2l6ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50OiBzdHJpbmcsIG1heFNpemU6IG51bWJlciA9IFNFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEgpOiB2b2lkIHtcbiAgaWYgKCFjb250ZW50IHx8IHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignQ29udGVudCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICB9XG4gIFxuICBjb25zdCBzaXplQnl0ZXMgPSBCdWZmZXIuYnl0ZUxlbmd0aChjb250ZW50LCAndXRmOCcpO1xuICBpZiAoc2l6ZUJ5dGVzID4gbWF4U2l6ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudCB0b28gbGFyZ2UgKCR7c2l6ZUJ5dGVzfSBieXRlcywgbWF4ICR7bWF4U2l6ZX0gYnl0ZXMpYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wcmVoZW5zaXZlIGlucHV0IHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAqIFZhbGlkYXRlcyBhbGwgY29udGVudCB0eXBlcyB3aXRoIGFwcHJvcHJpYXRlIGxpbWl0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0aW9uT3B0aW9ucyB7XG4gIG1heENvbnRlbnRMZW5ndGg/OiBudW1iZXI7XG4gIG1heFlhbWxMZW5ndGg/OiBudW1iZXI7XG4gIG1heE1ldGFkYXRhRmllbGRMZW5ndGg/OiBudW1iZXI7XG4gIG1heEZpbGVTaXplPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVJbnB1dExlbmd0aHMoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgY29udGVudFR5cGU6ICdmdWxsJyB8ICd5YW1sJyB8ICdtZXRhZGF0YScgfCAnZmllbGQnLFxuICBvcHRpb25zOiBDb250ZW50VmFsaWRhdGlvbk9wdGlvbnMgPSB7fVxuKTogdm9pZCB7XG4gIGNvbnN0IGxpbWl0cyA9IHtcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBvcHRpb25zLm1heENvbnRlbnRMZW5ndGggPz8gU0VDVVJJVFlfTElNSVRTLk1BWF9DT05URU5UX0xFTkdUSCxcbiAgICBtYXhZYW1sTGVuZ3RoOiBvcHRpb25zLm1heFlhbWxMZW5ndGggPz8gU0VDVVJJVFlfTElNSVRTLk1BWF9ZQU1MX0xFTkdUSCxcbiAgICBtYXhNZXRhZGF0YUZpZWxkTGVuZ3RoOiBvcHRpb25zLm1heE1ldGFkYXRhRmllbGRMZW5ndGggPz8gU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgsXG4gICAgbWF4RmlsZVNpemU6IG9wdGlvbnMubWF4RmlsZVNpemUgPz8gU0VDVVJJVFlfTElNSVRTLk1BWF9GSUxFX1NJWkVcbiAgfTtcblxuICAvLyBWYWxpZGF0ZSBiYXNlZCBvbiBjb250ZW50IHR5cGVcbiAgc3dpdGNoIChjb250ZW50VHlwZSkge1xuICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gbGltaXRzLm1heENvbnRlbnRMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDb250ZW50IGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtsaW1pdHMubWF4Q29udGVudExlbmd0aH0gY2hhcmFjdGVycyAoJHtjb250ZW50Lmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgXG4gICAgY2FzZSAneWFtbCc6XG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBsaW1pdHMubWF4WWFtbExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFlBTUwgY29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bGltaXRzLm1heFlhbWxMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIFxuICAgIGNhc2UgJ21ldGFkYXRhJzpcbiAgICAgIC8vIEZvciBtZXRhZGF0YSwgY2hlY2sgb3ZlcmFsbCBzaXplXG4gICAgICBpZiAoY29udGVudC5sZW5ndGggPiBsaW1pdHMubWF4WWFtbExlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE1ldGFkYXRhIGV4Y2VlZHMgbWF4aW11bSBsZW5ndGggb2YgJHtsaW1pdHMubWF4WWFtbExlbmd0aH0gY2hhcmFjdGVycyAoJHtjb250ZW50Lmxlbmd0aH0gcHJvdmlkZWQpYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgXG4gICAgY2FzZSAnZmllbGQnOlxuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gbGltaXRzLm1heE1ldGFkYXRhRmllbGRMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGaWVsZCBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7bGltaXRzLm1heE1ldGFkYXRhRmllbGRMZW5ndGh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbi8qKlxuICogR2VuZXJhbCBpbnB1dCBzYW5pdGl6YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSW5wdXQoaW5wdXQ6IHN0cmluZywgbWF4TGVuZ3RoOiBudW1iZXIgPSAxMDAwKTogc3RyaW5nIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIFxuICAvLyBSZW1vdmUgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzIGNoYXJhY3RlcnMgYW5kIGxpbWl0IGxlbmd0aFxuICByZXR1cm4gaW5wdXRcbiAgICAucmVwbGFjZShDT05UUk9MX0NIQVJTX1JFR0VYLCAnJykgLy8gUmVtb3ZlIGNvbnRyb2wgY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKEhUTUxfREFOR0VST1VTX1JFR0VYLCAnJykgLy8gUmVtb3ZlIEhUTUwtZGFuZ2Vyb3VzIGNoYXJhY3RlcnNcbiAgICAucmVwbGFjZShTSEVMTF9NRVRBQ0hBUl9SRUdFWCwgJycpIC8vIFJlbW92ZSBzaGVsbCBtZXRhY2hhcmFjdGVycyAoZXhwYW5kZWQpXG4gICAgLnJlcGxhY2UoUlRMX1pFUk9XSURUSF9SRUdFWCwgJycpIC8vIFJlbW92ZSBSVEwgb3ZlcnJpZGUgYW5kIHplcm8td2lkdGggY2hhcnNcbiAgICAuc3Vic3RyaW5nKDAsIG1heExlbmd0aClcbiAgICAudHJpbSgpO1xufSJdfQ==
@@ -1,44 +0,0 @@
1
- /**
2
- * Security Auditor - Core orchestrator for security scanning
3
- * Implements automated security auditing for DollhouseMCP (Issue #53)
4
- */
5
- import type { SecurityAuditConfig, ScanResult } from './types.js';
6
- export declare class SecurityAuditor {
7
- private config;
8
- private scanners;
9
- private suppressions;
10
- constructor(config: SecurityAuditConfig);
11
- /**
12
- * Initialize enabled scanners based on configuration
13
- */
14
- private initializeScanners;
15
- /**
16
- * Load suppression rules from configuration
17
- */
18
- private loadSuppressions;
19
- /**
20
- * Run security audit on the project
21
- */
22
- audit(projectRoot?: string): Promise<ScanResult>;
23
- /**
24
- * Filter out suppressed findings
25
- */
26
- private filterSuppressions;
27
- /**
28
- * Create scan result summary
29
- */
30
- private createScanResult;
31
- /**
32
- * Generate reports in configured formats
33
- */
34
- private generateReports;
35
- /**
36
- * Determine if the build should fail based on findings
37
- */
38
- private shouldFailBuild;
39
- /**
40
- * Get default configuration
41
- */
42
- static getDefaultConfig(): SecurityAuditConfig;
43
- }
44
- //# sourceMappingURL=SecurityAuditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SecurityAuditor.d.ts","sourceRoot":"","sources":["../../../../../src/security/audit/SecurityAuditor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,mBAAmB,EAEnB,UAAU,EAIX,MAAM,YAAY,CAAC;AAWpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,YAAY,CAAuC;gBAE/C,MAAM,EAAE,mBAAmB;IAMvC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACG,KAAK,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,UAAU,CAAC;IA6CrE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkE1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;YACW,eAAe;IA6B7B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,MAAM,CAAC,gBAAgB,IAAI,mBAAmB;CAmC/C"}