@dollhousemcp/mcp-server 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1004) hide show
  1. package/CHANGELOG.md +132 -0
  2. package/LICENSE +51 -0
  3. package/README.md +1124 -0
  4. package/data/agents/code-reviewer.md +296 -0
  5. package/data/agents/research-assistant.md +259 -0
  6. package/data/agents/task-manager.md +206 -0
  7. package/data/ensembles/business-advisor.md +354 -0
  8. package/data/ensembles/creative-studio.md +288 -0
  9. package/data/ensembles/development-team.md +292 -0
  10. package/data/ensembles/security-analysis-team.md +438 -0
  11. package/data/memories/conversation-history.md +146 -0
  12. package/data/memories/learning-progress.md +376 -0
  13. package/data/memories/project-context.md +268 -0
  14. package/data/personas/business-consultant.md +50 -0
  15. package/data/personas/creative-writer.md +44 -0
  16. package/data/personas/debug-detective.md +59 -0
  17. package/data/personas/eli5-explainer.md +49 -0
  18. package/data/personas/security-analyst.md +161 -0
  19. package/data/personas/technical-analyst.md +43 -0
  20. package/data/skills/code-review.md +112 -0
  21. package/data/skills/creative-writing.md +174 -0
  22. package/data/skills/data-analysis.md +160 -0
  23. package/data/skills/penetration-testing.md +374 -0
  24. package/data/skills/research.md +181 -0
  25. package/data/skills/threat-modeling.md +469 -0
  26. package/data/skills/translation.md +148 -0
  27. package/data/templates/code-documentation.md +409 -0
  28. package/data/templates/email-professional.md +158 -0
  29. package/data/templates/meeting-notes.md +141 -0
  30. package/data/templates/penetration-test-report.md +608 -0
  31. package/data/templates/project-brief.md +234 -0
  32. package/data/templates/report-executive.md +258 -0
  33. package/data/templates/security-vulnerability-report.md +457 -0
  34. package/data/templates/threat-assessment-report.md +774 -0
  35. package/dist/cache/APICache.d.ts +23 -0
  36. package/dist/cache/APICache.d.ts.map +1 -0
  37. package/dist/cache/APICache.js +42 -0
  38. package/dist/cache/index.d.ts +5 -0
  39. package/dist/cache/index.d.ts.map +1 -0
  40. package/dist/cache/index.js +5 -0
  41. package/dist/collection/CollectionBrowser.d.ts +24 -0
  42. package/dist/collection/CollectionBrowser.d.ts.map +1 -0
  43. package/dist/collection/CollectionBrowser.js +120 -0
  44. package/dist/collection/CollectionSearch.d.ts +18 -0
  45. package/dist/collection/CollectionSearch.d.ts.map +1 -0
  46. package/dist/collection/CollectionSearch.js +48 -0
  47. package/dist/collection/ElementInstaller.d.ts +33 -0
  48. package/dist/collection/ElementInstaller.d.ts.map +1 -0
  49. package/dist/collection/ElementInstaller.js +142 -0
  50. package/dist/collection/GitHubClient.d.ts +22 -0
  51. package/dist/collection/GitHubClient.d.ts.map +1 -0
  52. package/dist/collection/GitHubClient.js +114 -0
  53. package/dist/collection/MarketplaceBrowser.d.ts +24 -0
  54. package/dist/collection/MarketplaceBrowser.d.ts.map +1 -0
  55. package/dist/collection/MarketplaceBrowser.js +115 -0
  56. package/dist/collection/MarketplaceSearch.d.ts +18 -0
  57. package/dist/collection/MarketplaceSearch.d.ts.map +1 -0
  58. package/dist/collection/MarketplaceSearch.js +48 -0
  59. package/dist/collection/PersonaDetails.d.ts +22 -0
  60. package/dist/collection/PersonaDetails.d.ts.map +1 -0
  61. package/dist/collection/PersonaDetails.js +71 -0
  62. package/dist/collection/PersonaInstaller.d.ts +26 -0
  63. package/dist/collection/PersonaInstaller.d.ts.map +1 -0
  64. package/dist/collection/PersonaInstaller.js +103 -0
  65. package/dist/collection/PersonaSubmitter.d.ts +19 -0
  66. package/dist/collection/PersonaSubmitter.d.ts.map +1 -0
  67. package/dist/collection/PersonaSubmitter.js +57 -0
  68. package/dist/collection/index.d.ts +10 -0
  69. package/dist/collection/index.d.ts.map +1 -0
  70. package/dist/collection/index.js +10 -0
  71. package/dist/config/constants.d.ts +25 -0
  72. package/dist/config/constants.d.ts.map +1 -0
  73. package/dist/config/constants.js +34 -0
  74. package/dist/config/index.d.ts +6 -0
  75. package/dist/config/index.d.ts.map +1 -0
  76. package/dist/config/index.js +6 -0
  77. package/dist/config/indicator-config.d.ts +107 -0
  78. package/dist/config/indicator-config.d.ts.map +1 -0
  79. package/dist/config/indicator-config.js +158 -0
  80. package/dist/constants/defaultPersonas.d.ts +10 -0
  81. package/dist/constants/defaultPersonas.d.ts.map +1 -0
  82. package/dist/constants/defaultPersonas.js +18 -0
  83. package/dist/constants/limits.d.ts +10 -0
  84. package/dist/constants/limits.d.ts.map +1 -0
  85. package/dist/constants/limits.js +13 -0
  86. package/dist/elements/BaseElement.d.ts +81 -0
  87. package/dist/elements/BaseElement.d.ts.map +1 -0
  88. package/dist/elements/BaseElement.js +381 -0
  89. package/dist/elements/FeedbackProcessor.d.ts +57 -0
  90. package/dist/elements/FeedbackProcessor.d.ts.map +1 -0
  91. package/dist/elements/FeedbackProcessor.js +418 -0
  92. package/dist/elements/agents/Agent.d.ts +145 -0
  93. package/dist/elements/agents/Agent.d.ts.map +1 -0
  94. package/dist/elements/agents/Agent.js +848 -0
  95. package/dist/elements/agents/AgentManager.d.ts +125 -0
  96. package/dist/elements/agents/AgentManager.d.ts.map +1 -0
  97. package/dist/elements/agents/AgentManager.js +615 -0
  98. package/dist/elements/agents/constants.d.ts +42 -0
  99. package/dist/elements/agents/constants.d.ts.map +1 -0
  100. package/dist/elements/agents/constants.js +45 -0
  101. package/dist/elements/agents/goalTemplates.d.ts +44 -0
  102. package/dist/elements/agents/goalTemplates.d.ts.map +1 -0
  103. package/dist/elements/agents/goalTemplates.js +297 -0
  104. package/dist/elements/agents/index.d.ts +8 -0
  105. package/dist/elements/agents/index.d.ts.map +1 -0
  106. package/dist/elements/agents/index.js +8 -0
  107. package/dist/elements/agents/ruleEngineConfig.d.ts +76 -0
  108. package/dist/elements/agents/ruleEngineConfig.d.ts.map +1 -0
  109. package/dist/elements/agents/ruleEngineConfig.js +143 -0
  110. package/dist/elements/agents/types.d.ts +97 -0
  111. package/dist/elements/agents/types.d.ts.map +1 -0
  112. package/dist/elements/agents/types.js +5 -0
  113. package/dist/elements/ensembles/Ensemble.d.ts +144 -0
  114. package/dist/elements/ensembles/Ensemble.d.ts.map +1 -0
  115. package/dist/elements/ensembles/Ensemble.js +860 -0
  116. package/dist/elements/ensembles/EnsembleManager.d.ts +85 -0
  117. package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -0
  118. package/dist/elements/ensembles/EnsembleManager.js +378 -0
  119. package/dist/elements/ensembles/constants.d.ts +73 -0
  120. package/dist/elements/ensembles/constants.d.ts.map +1 -0
  121. package/dist/elements/ensembles/constants.js +92 -0
  122. package/dist/elements/ensembles/index.d.ts +8 -0
  123. package/dist/elements/ensembles/index.d.ts.map +1 -0
  124. package/dist/elements/ensembles/index.js +8 -0
  125. package/dist/elements/ensembles/types.d.ts +92 -0
  126. package/dist/elements/ensembles/types.d.ts.map +1 -0
  127. package/dist/elements/ensembles/types.js +8 -0
  128. package/dist/elements/index.d.ts +11 -0
  129. package/dist/elements/index.d.ts.map +1 -0
  130. package/dist/elements/index.js +12 -0
  131. package/dist/elements/memories/Memory.d.ts +110 -0
  132. package/dist/elements/memories/Memory.d.ts.map +1 -0
  133. package/dist/elements/memories/Memory.js +470 -0
  134. package/dist/elements/memories/MemoryManager.d.ts +86 -0
  135. package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
  136. package/dist/elements/memories/MemoryManager.js +435 -0
  137. package/dist/elements/memories/constants.d.ts +42 -0
  138. package/dist/elements/memories/constants.d.ts.map +1 -0
  139. package/dist/elements/memories/constants.js +49 -0
  140. package/dist/elements/memories/index.d.ts +6 -0
  141. package/dist/elements/memories/index.d.ts.map +1 -0
  142. package/dist/elements/memories/index.js +6 -0
  143. package/dist/elements/skills/Skill.d.ts +109 -0
  144. package/dist/elements/skills/Skill.d.ts.map +1 -0
  145. package/dist/elements/skills/Skill.js +381 -0
  146. package/dist/elements/skills/index.d.ts +5 -0
  147. package/dist/elements/skills/index.d.ts.map +1 -0
  148. package/dist/elements/skills/index.js +5 -0
  149. package/dist/elements/templates/Template.d.ts +138 -0
  150. package/dist/elements/templates/Template.d.ts.map +1 -0
  151. package/dist/elements/templates/Template.js +673 -0
  152. package/dist/elements/templates/TemplateManager.d.ts +104 -0
  153. package/dist/elements/templates/TemplateManager.d.ts.map +1 -0
  154. package/dist/elements/templates/TemplateManager.js +501 -0
  155. package/dist/elements/templates/index.d.ts +6 -0
  156. package/dist/elements/templates/index.d.ts.map +1 -0
  157. package/dist/elements/templates/index.js +6 -0
  158. package/dist/errors/SecurityError.d.ts +29 -0
  159. package/dist/errors/SecurityError.d.ts.map +1 -0
  160. package/dist/errors/SecurityError.js +47 -0
  161. package/dist/errors/index.d.ts +2 -0
  162. package/dist/errors/index.d.ts.map +1 -0
  163. package/dist/errors/index.js +2 -0
  164. package/dist/index.barrel.d.ts +21 -0
  165. package/dist/index.barrel.d.ts.map +1 -0
  166. package/dist/index.barrel.js +31 -0
  167. package/dist/index.d.ts +223 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +1606 -0
  170. package/dist/marketplace/GitHubClient.d.ts +22 -0
  171. package/dist/marketplace/GitHubClient.d.ts.map +1 -0
  172. package/dist/marketplace/GitHubClient.js +112 -0
  173. package/dist/marketplace/MarketplaceBrowser.d.ts +24 -0
  174. package/dist/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  175. package/dist/marketplace/MarketplaceBrowser.js +115 -0
  176. package/dist/marketplace/MarketplaceSearch.d.ts +18 -0
  177. package/dist/marketplace/MarketplaceSearch.d.ts.map +1 -0
  178. package/dist/marketplace/MarketplaceSearch.js +48 -0
  179. package/dist/marketplace/PersonaDetails.d.ts +22 -0
  180. package/dist/marketplace/PersonaDetails.d.ts.map +1 -0
  181. package/dist/marketplace/PersonaDetails.js +71 -0
  182. package/dist/marketplace/PersonaInstaller.d.ts +25 -0
  183. package/dist/marketplace/PersonaInstaller.d.ts.map +1 -0
  184. package/dist/marketplace/PersonaInstaller.js +100 -0
  185. package/dist/marketplace/PersonaSubmitter.d.ts +19 -0
  186. package/dist/marketplace/PersonaSubmitter.d.ts.map +1 -0
  187. package/dist/marketplace/PersonaSubmitter.js +57 -0
  188. package/dist/marketplace/index.d.ts +10 -0
  189. package/dist/marketplace/index.d.ts.map +1 -0
  190. package/dist/marketplace/index.js +10 -0
  191. package/dist/persona/PersonaElement.d.ts +64 -0
  192. package/dist/persona/PersonaElement.d.ts.map +1 -0
  193. package/dist/persona/PersonaElement.js +223 -0
  194. package/dist/persona/PersonaElementManager.d.ts +97 -0
  195. package/dist/persona/PersonaElementManager.d.ts.map +1 -0
  196. package/dist/persona/PersonaElementManager.js +348 -0
  197. package/dist/persona/PersonaLoader.d.ts +34 -0
  198. package/dist/persona/PersonaLoader.d.ts.map +1 -0
  199. package/dist/persona/PersonaLoader.js +145 -0
  200. package/dist/persona/PersonaManager.d.ts +112 -0
  201. package/dist/persona/PersonaManager.d.ts.map +1 -0
  202. package/dist/persona/PersonaManager.js +341 -0
  203. package/dist/persona/PersonaValidator.d.ts +39 -0
  204. package/dist/persona/PersonaValidator.d.ts.map +1 -0
  205. package/dist/persona/PersonaValidator.js +161 -0
  206. package/dist/persona/export-import/PersonaExporter.d.ts +43 -0
  207. package/dist/persona/export-import/PersonaExporter.d.ts.map +1 -0
  208. package/dist/persona/export-import/PersonaExporter.js +99 -0
  209. package/dist/persona/export-import/PersonaImporter.d.ts +65 -0
  210. package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -0
  211. package/dist/persona/export-import/PersonaImporter.js +315 -0
  212. package/dist/persona/export-import/PersonaSharer.d.ts +60 -0
  213. package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -0
  214. package/dist/persona/export-import/PersonaSharer.js +502 -0
  215. package/dist/persona/export-import/index.d.ts +10 -0
  216. package/dist/persona/export-import/index.d.ts.map +1 -0
  217. package/dist/persona/export-import/index.js +7 -0
  218. package/dist/persona/index.d.ts +7 -0
  219. package/dist/persona/index.d.ts.map +1 -0
  220. package/dist/persona/index.js +7 -0
  221. package/dist/portfolio/MigrationManager.d.ts +44 -0
  222. package/dist/portfolio/MigrationManager.d.ts.map +1 -0
  223. package/dist/portfolio/MigrationManager.js +163 -0
  224. package/dist/portfolio/PortfolioManager.d.ts +54 -0
  225. package/dist/portfolio/PortfolioManager.d.ts.map +1 -0
  226. package/dist/portfolio/PortfolioManager.js +224 -0
  227. package/dist/portfolio/types.d.ts +18 -0
  228. package/dist/portfolio/types.d.ts.map +1 -0
  229. package/dist/portfolio/types.js +13 -0
  230. package/dist/security/InputValidator.d.ts +80 -0
  231. package/dist/security/InputValidator.d.ts.map +1 -0
  232. package/dist/security/InputValidator.js +448 -0
  233. package/dist/security/audit/SecurityAuditor.d.ts +44 -0
  234. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -0
  235. package/dist/security/audit/SecurityAuditor.js +274 -0
  236. package/dist/security/audit/config/suppressions.d.ts +34 -0
  237. package/dist/security/audit/config/suppressions.d.ts.map +1 -0
  238. package/dist/security/audit/config/suppressions.js +575 -0
  239. package/dist/security/audit/index.d.ts +14 -0
  240. package/dist/security/audit/index.d.ts.map +1 -0
  241. package/dist/security/audit/index.js +15 -0
  242. package/dist/security/audit/reporters/ConsoleReporter.d.ts +46 -0
  243. package/dist/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
  244. package/dist/security/audit/reporters/ConsoleReporter.js +174 -0
  245. package/dist/security/audit/reporters/JsonReporter.d.ts +13 -0
  246. package/dist/security/audit/reporters/JsonReporter.d.ts.map +1 -0
  247. package/dist/security/audit/reporters/JsonReporter.js +25 -0
  248. package/dist/security/audit/reporters/MarkdownReporter.d.ts +13 -0
  249. package/dist/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
  250. package/dist/security/audit/reporters/MarkdownReporter.js +79 -0
  251. package/dist/security/audit/rules/SecurityRules.d.ts +20 -0
  252. package/dist/security/audit/rules/SecurityRules.d.ts.map +1 -0
  253. package/dist/security/audit/rules/SecurityRules.js +244 -0
  254. package/dist/security/audit/scanners/CodeScanner.d.ts +47 -0
  255. package/dist/security/audit/scanners/CodeScanner.d.ts.map +1 -0
  256. package/dist/security/audit/scanners/CodeScanner.js +174 -0
  257. package/dist/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
  258. package/dist/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
  259. package/dist/security/audit/scanners/ConfigurationScanner.js +22 -0
  260. package/dist/security/audit/scanners/DependencyScanner.d.ts +13 -0
  261. package/dist/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
  262. package/dist/security/audit/scanners/DependencyScanner.js +22 -0
  263. package/dist/security/audit/types.d.ts +94 -0
  264. package/dist/security/audit/types.d.ts.map +1 -0
  265. package/dist/security/audit/types.js +6 -0
  266. package/dist/security/commandValidator.d.ts +7 -0
  267. package/dist/security/commandValidator.d.ts.map +1 -0
  268. package/dist/security/commandValidator.js +78 -0
  269. package/dist/security/constants.d.ts +24 -0
  270. package/dist/security/constants.d.ts.map +1 -0
  271. package/dist/security/constants.js +26 -0
  272. package/dist/security/contentValidator.d.ts +47 -0
  273. package/dist/security/contentValidator.d.ts.map +1 -0
  274. package/dist/security/contentValidator.js +301 -0
  275. package/dist/security/errorHandler.d.ts +42 -0
  276. package/dist/security/errorHandler.d.ts.map +1 -0
  277. package/dist/security/errorHandler.js +166 -0
  278. package/dist/security/errors.d.ts +14 -0
  279. package/dist/security/errors.d.ts.map +1 -0
  280. package/dist/security/errors.js +28 -0
  281. package/dist/security/fileLockManager.d.ts +70 -0
  282. package/dist/security/fileLockManager.d.ts.map +1 -0
  283. package/dist/security/fileLockManager.js +187 -0
  284. package/dist/security/index.d.ts +12 -0
  285. package/dist/security/index.d.ts.map +1 -0
  286. package/dist/security/index.js +14 -0
  287. package/dist/security/pathValidator.d.ts +9 -0
  288. package/dist/security/pathValidator.d.ts.map +1 -0
  289. package/dist/security/pathValidator.js +102 -0
  290. package/dist/security/regexValidator.d.ts +59 -0
  291. package/dist/security/regexValidator.d.ts.map +1 -0
  292. package/dist/security/regexValidator.js +214 -0
  293. package/dist/security/secureYamlParser.d.ts +46 -0
  294. package/dist/security/secureYamlParser.d.ts.map +1 -0
  295. package/dist/security/secureYamlParser.js +203 -0
  296. package/dist/security/securityMonitor.d.ts +58 -0
  297. package/dist/security/securityMonitor.d.ts.map +1 -0
  298. package/dist/security/securityMonitor.js +108 -0
  299. package/dist/security/tokenManager.d.ts +85 -0
  300. package/dist/security/tokenManager.d.ts.map +1 -0
  301. package/dist/security/tokenManager.js +286 -0
  302. package/dist/security/validators/unicodeValidator.d.ts +97 -0
  303. package/dist/security/validators/unicodeValidator.d.ts.map +1 -0
  304. package/dist/security/validators/unicodeValidator.js +312 -0
  305. package/dist/security/yamlValidator.d.ts +21 -0
  306. package/dist/security/yamlValidator.d.ts.map +1 -0
  307. package/dist/security/yamlValidator.js +164 -0
  308. package/dist/server/ServerSetup.d.ts +35 -0
  309. package/dist/server/ServerSetup.d.ts.map +1 -0
  310. package/dist/server/ServerSetup.js +116 -0
  311. package/dist/server/index.d.ts +7 -0
  312. package/dist/server/index.d.ts.map +1 -0
  313. package/dist/server/index.js +7 -0
  314. package/dist/server/startup.d.ts +31 -0
  315. package/dist/server/startup.d.ts.map +1 -0
  316. package/dist/server/startup.js +67 -0
  317. package/dist/server/tools/CollectionTools.d.ts +10 -0
  318. package/dist/server/tools/CollectionTools.d.ts.map +1 -0
  319. package/dist/server/tools/CollectionTools.js +96 -0
  320. package/dist/server/tools/ConfigTools.d.ts +10 -0
  321. package/dist/server/tools/ConfigTools.d.ts.map +1 -0
  322. package/dist/server/tools/ConfigTools.js +63 -0
  323. package/dist/server/tools/MarketplaceTools.d.ts +10 -0
  324. package/dist/server/tools/MarketplaceTools.d.ts.map +1 -0
  325. package/dist/server/tools/MarketplaceTools.js +96 -0
  326. package/dist/server/tools/PersonaTools.d.ts +10 -0
  327. package/dist/server/tools/PersonaTools.d.ts.map +1 -0
  328. package/dist/server/tools/PersonaTools.js +257 -0
  329. package/dist/server/tools/ToolRegistry.d.ts +37 -0
  330. package/dist/server/tools/ToolRegistry.d.ts.map +1 -0
  331. package/dist/server/tools/ToolRegistry.js +40 -0
  332. package/dist/server/tools/UpdateTools.d.ts +10 -0
  333. package/dist/server/tools/UpdateTools.d.ts.map +1 -0
  334. package/dist/server/tools/UpdateTools.js +64 -0
  335. package/dist/server/tools/UserTools.d.ts +10 -0
  336. package/dist/server/tools/UserTools.d.ts.map +1 -0
  337. package/dist/server/tools/UserTools.js +51 -0
  338. package/dist/server/tools/index.d.ts +10 -0
  339. package/dist/server/tools/index.d.ts.map +1 -0
  340. package/dist/server/tools/index.js +10 -0
  341. package/dist/server/types.d.ts +34 -0
  342. package/dist/server/types.d.ts.map +1 -0
  343. package/dist/server/types.js +5 -0
  344. package/dist/src/cache/APICache.d.ts +23 -0
  345. package/dist/src/cache/APICache.d.ts.map +1 -0
  346. package/dist/src/cache/APICache.js +42 -0
  347. package/dist/src/cache/index.d.ts +5 -0
  348. package/dist/src/cache/index.d.ts.map +1 -0
  349. package/dist/src/cache/index.js +5 -0
  350. package/dist/src/config/constants.d.ts +25 -0
  351. package/dist/src/config/constants.d.ts.map +1 -0
  352. package/dist/src/config/constants.js +30 -0
  353. package/dist/src/config/index.d.ts +6 -0
  354. package/dist/src/config/index.d.ts.map +1 -0
  355. package/dist/src/config/index.js +6 -0
  356. package/dist/src/config/indicator-config.d.ts +107 -0
  357. package/dist/src/config/indicator-config.d.ts.map +1 -0
  358. package/dist/src/config/indicator-config.js +158 -0
  359. package/dist/src/constants/defaultPersonas.d.ts +10 -0
  360. package/dist/src/constants/defaultPersonas.d.ts.map +1 -0
  361. package/dist/src/constants/defaultPersonas.js +18 -0
  362. package/dist/src/constants/limits.d.ts +10 -0
  363. package/dist/src/constants/limits.d.ts.map +1 -0
  364. package/dist/src/constants/limits.js +13 -0
  365. package/dist/src/errors/SecurityError.d.ts +29 -0
  366. package/dist/src/errors/SecurityError.d.ts.map +1 -0
  367. package/dist/src/errors/SecurityError.js +47 -0
  368. package/dist/src/errors/index.d.ts +2 -0
  369. package/dist/src/errors/index.d.ts.map +1 -0
  370. package/dist/src/errors/index.js +2 -0
  371. package/dist/src/index.barrel.d.ts +21 -0
  372. package/dist/src/index.barrel.d.ts.map +1 -0
  373. package/dist/src/index.barrel.js +31 -0
  374. package/dist/src/index.d.ts +220 -0
  375. package/dist/src/index.d.ts.map +1 -0
  376. package/dist/src/index.js +1559 -0
  377. package/dist/src/marketplace/GitHubClient.d.ts +22 -0
  378. package/dist/src/marketplace/GitHubClient.d.ts.map +1 -0
  379. package/dist/src/marketplace/GitHubClient.js +112 -0
  380. package/dist/src/marketplace/MarketplaceBrowser.d.ts +21 -0
  381. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  382. package/dist/src/marketplace/MarketplaceBrowser.js +45 -0
  383. package/dist/src/marketplace/MarketplaceSearch.d.ts +18 -0
  384. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
  385. package/dist/src/marketplace/MarketplaceSearch.js +36 -0
  386. package/dist/src/marketplace/PersonaDetails.d.ts +22 -0
  387. package/dist/src/marketplace/PersonaDetails.d.ts.map +1 -0
  388. package/dist/src/marketplace/PersonaDetails.js +71 -0
  389. package/dist/src/marketplace/PersonaInstaller.d.ts +25 -0
  390. package/dist/src/marketplace/PersonaInstaller.d.ts.map +1 -0
  391. package/dist/src/marketplace/PersonaInstaller.js +100 -0
  392. package/dist/src/marketplace/PersonaSubmitter.d.ts +19 -0
  393. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
  394. package/dist/src/marketplace/PersonaSubmitter.js +57 -0
  395. package/dist/src/marketplace/index.d.ts +10 -0
  396. package/dist/src/marketplace/index.d.ts.map +1 -0
  397. package/dist/src/marketplace/index.js +10 -0
  398. package/dist/src/persona/PersonaLoader.d.ts +33 -0
  399. package/dist/src/persona/PersonaLoader.d.ts.map +1 -0
  400. package/dist/src/persona/PersonaLoader.js +139 -0
  401. package/dist/src/persona/PersonaManager.d.ts +112 -0
  402. package/dist/src/persona/PersonaManager.d.ts.map +1 -0
  403. package/dist/src/persona/PersonaManager.js +341 -0
  404. package/dist/src/persona/PersonaValidator.d.ts +33 -0
  405. package/dist/src/persona/PersonaValidator.d.ts.map +1 -0
  406. package/dist/src/persona/PersonaValidator.js +157 -0
  407. package/dist/src/persona/export-import/PersonaExporter.d.ts +43 -0
  408. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
  409. package/dist/src/persona/export-import/PersonaExporter.js +99 -0
  410. package/dist/src/persona/export-import/PersonaImporter.d.ts +65 -0
  411. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
  412. package/dist/src/persona/export-import/PersonaImporter.js +313 -0
  413. package/dist/src/persona/export-import/PersonaSharer.d.ts +60 -0
  414. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
  415. package/dist/src/persona/export-import/PersonaSharer.js +363 -0
  416. package/dist/src/persona/export-import/index.d.ts +10 -0
  417. package/dist/src/persona/export-import/index.d.ts.map +1 -0
  418. package/dist/src/persona/export-import/index.js +7 -0
  419. package/dist/src/persona/index.d.ts +7 -0
  420. package/dist/src/persona/index.d.ts.map +1 -0
  421. package/dist/src/persona/index.js +7 -0
  422. package/dist/src/security/InputValidator.d.ts +69 -0
  423. package/dist/src/security/InputValidator.d.ts.map +1 -0
  424. package/dist/src/security/InputValidator.js +381 -0
  425. package/dist/src/security/commandValidator.d.ts +7 -0
  426. package/dist/src/security/commandValidator.d.ts.map +1 -0
  427. package/dist/src/security/commandValidator.js +77 -0
  428. package/dist/src/security/constants.d.ts +21 -0
  429. package/dist/src/security/constants.d.ts.map +1 -0
  430. package/dist/src/security/constants.js +23 -0
  431. package/dist/src/security/contentValidator.d.ts +47 -0
  432. package/dist/src/security/contentValidator.d.ts.map +1 -0
  433. package/dist/src/security/contentValidator.js +188 -0
  434. package/dist/src/security/fileLockManager.d.ts +70 -0
  435. package/dist/src/security/fileLockManager.d.ts.map +1 -0
  436. package/dist/src/security/fileLockManager.js +187 -0
  437. package/dist/src/security/index.d.ts +12 -0
  438. package/dist/src/security/index.d.ts.map +1 -0
  439. package/dist/src/security/index.js +14 -0
  440. package/dist/src/security/pathValidator.d.ts +9 -0
  441. package/dist/src/security/pathValidator.d.ts.map +1 -0
  442. package/dist/src/security/pathValidator.js +97 -0
  443. package/dist/src/security/secureYamlParser.d.ts +46 -0
  444. package/dist/src/security/secureYamlParser.d.ts.map +1 -0
  445. package/dist/src/security/secureYamlParser.js +203 -0
  446. package/dist/src/security/securityMonitor.d.ts +58 -0
  447. package/dist/src/security/securityMonitor.d.ts.map +1 -0
  448. package/dist/src/security/securityMonitor.js +108 -0
  449. package/dist/src/security/tokenManager.d.ts +59 -0
  450. package/dist/src/security/tokenManager.d.ts.map +1 -0
  451. package/dist/src/security/tokenManager.js +216 -0
  452. package/dist/src/security/yamlValidator.d.ts +20 -0
  453. package/dist/src/security/yamlValidator.d.ts.map +1 -0
  454. package/dist/src/security/yamlValidator.js +138 -0
  455. package/dist/src/server/ServerSetup.d.ts +31 -0
  456. package/dist/src/server/ServerSetup.d.ts.map +1 -0
  457. package/dist/src/server/ServerSetup.js +79 -0
  458. package/dist/src/server/index.d.ts +7 -0
  459. package/dist/src/server/index.d.ts.map +1 -0
  460. package/dist/src/server/index.js +7 -0
  461. package/dist/src/server/tools/ConfigTools.d.ts +10 -0
  462. package/dist/src/server/tools/ConfigTools.d.ts.map +1 -0
  463. package/dist/src/server/tools/ConfigTools.js +63 -0
  464. package/dist/src/server/tools/MarketplaceTools.d.ts +10 -0
  465. package/dist/src/server/tools/MarketplaceTools.d.ts.map +1 -0
  466. package/dist/src/server/tools/MarketplaceTools.js +92 -0
  467. package/dist/src/server/tools/PersonaTools.d.ts +10 -0
  468. package/dist/src/server/tools/PersonaTools.d.ts.map +1 -0
  469. package/dist/src/server/tools/PersonaTools.js +257 -0
  470. package/dist/src/server/tools/ToolRegistry.d.ts +37 -0
  471. package/dist/src/server/tools/ToolRegistry.d.ts.map +1 -0
  472. package/dist/src/server/tools/ToolRegistry.js +40 -0
  473. package/dist/src/server/tools/UpdateTools.d.ts +10 -0
  474. package/dist/src/server/tools/UpdateTools.d.ts.map +1 -0
  475. package/dist/src/server/tools/UpdateTools.js +64 -0
  476. package/dist/src/server/tools/UserTools.d.ts +10 -0
  477. package/dist/src/server/tools/UserTools.d.ts.map +1 -0
  478. package/dist/src/server/tools/UserTools.js +51 -0
  479. package/dist/src/server/tools/index.d.ts +10 -0
  480. package/dist/src/server/tools/index.d.ts.map +1 -0
  481. package/dist/src/server/tools/index.js +10 -0
  482. package/dist/src/server/types.d.ts +34 -0
  483. package/dist/src/server/types.d.ts.map +1 -0
  484. package/dist/src/server/types.js +5 -0
  485. package/dist/src/tools/debug.d.ts +20 -0
  486. package/dist/src/tools/debug.d.ts.map +1 -0
  487. package/dist/src/tools/debug.js +37 -0
  488. package/dist/src/types/cache.d.ts +8 -0
  489. package/dist/src/types/cache.d.ts.map +1 -0
  490. package/dist/src/types/cache.js +5 -0
  491. package/dist/src/types/index.d.ts +8 -0
  492. package/dist/src/types/index.d.ts.map +1 -0
  493. package/dist/src/types/index.js +8 -0
  494. package/dist/src/types/marketplace.d.ts +23 -0
  495. package/dist/src/types/marketplace.d.ts.map +1 -0
  496. package/dist/src/types/marketplace.js +5 -0
  497. package/dist/src/types/mcp.d.ts +161 -0
  498. package/dist/src/types/mcp.d.ts.map +1 -0
  499. package/dist/src/types/mcp.js +75 -0
  500. package/dist/src/types/persona.d.ts +30 -0
  501. package/dist/src/types/persona.d.ts.map +1 -0
  502. package/dist/src/types/persona.js +5 -0
  503. package/dist/src/update/BackupManager.d.ts +46 -0
  504. package/dist/src/update/BackupManager.d.ts.map +1 -0
  505. package/dist/src/update/BackupManager.js +261 -0
  506. package/dist/src/update/DependencyChecker.d.ts +41 -0
  507. package/dist/src/update/DependencyChecker.d.ts.map +1 -0
  508. package/dist/src/update/DependencyChecker.js +132 -0
  509. package/dist/src/update/RateLimiter.d.ts +80 -0
  510. package/dist/src/update/RateLimiter.d.ts.map +1 -0
  511. package/dist/src/update/RateLimiter.js +172 -0
  512. package/dist/src/update/SignatureVerifier.d.ts +71 -0
  513. package/dist/src/update/SignatureVerifier.d.ts.map +1 -0
  514. package/dist/src/update/SignatureVerifier.js +214 -0
  515. package/dist/src/update/UpdateChecker.d.ts +127 -0
  516. package/dist/src/update/UpdateChecker.d.ts.map +1 -0
  517. package/dist/src/update/UpdateChecker.js +460 -0
  518. package/dist/src/update/UpdateManager.d.ts +41 -0
  519. package/dist/src/update/UpdateManager.d.ts.map +1 -0
  520. package/dist/src/update/UpdateManager.js +260 -0
  521. package/dist/src/update/VersionManager.d.ts +31 -0
  522. package/dist/src/update/VersionManager.d.ts.map +1 -0
  523. package/dist/src/update/VersionManager.js +134 -0
  524. package/dist/src/update/index.d.ts +9 -0
  525. package/dist/src/update/index.d.ts.map +1 -0
  526. package/dist/src/update/index.js +9 -0
  527. package/dist/src/utils/filesystem.d.ts +32 -0
  528. package/dist/src/utils/filesystem.d.ts.map +1 -0
  529. package/dist/src/utils/filesystem.js +73 -0
  530. package/dist/src/utils/git.d.ts +32 -0
  531. package/dist/src/utils/git.d.ts.map +1 -0
  532. package/dist/src/utils/git.js +65 -0
  533. package/dist/src/utils/index.d.ts +7 -0
  534. package/dist/src/utils/index.d.ts.map +1 -0
  535. package/dist/src/utils/index.js +7 -0
  536. package/dist/src/utils/logger.d.ts +45 -0
  537. package/dist/src/utils/logger.d.ts.map +1 -0
  538. package/dist/src/utils/logger.js +91 -0
  539. package/dist/src/utils/version.d.ts +25 -0
  540. package/dist/src/utils/version.d.ts.map +1 -0
  541. package/dist/src/utils/version.js +97 -0
  542. package/dist/test/src/cache/APICache.d.ts +23 -0
  543. package/dist/test/src/cache/APICache.d.ts.map +1 -0
  544. package/dist/test/src/cache/APICache.js +42 -0
  545. package/dist/test/src/cache/index.d.ts +5 -0
  546. package/dist/test/src/cache/index.d.ts.map +1 -0
  547. package/dist/test/src/cache/index.js +5 -0
  548. package/dist/test/src/collection/CollectionBrowser.d.ts +24 -0
  549. package/dist/test/src/collection/CollectionBrowser.d.ts.map +1 -0
  550. package/dist/test/src/collection/CollectionBrowser.js +115 -0
  551. package/dist/test/src/collection/CollectionSearch.d.ts +18 -0
  552. package/dist/test/src/collection/CollectionSearch.d.ts.map +1 -0
  553. package/dist/test/src/collection/CollectionSearch.js +48 -0
  554. package/dist/test/src/collection/GitHubClient.d.ts +22 -0
  555. package/dist/test/src/collection/GitHubClient.d.ts.map +1 -0
  556. package/dist/test/src/collection/GitHubClient.js +114 -0
  557. package/dist/test/src/collection/PersonaDetails.d.ts +22 -0
  558. package/dist/test/src/collection/PersonaDetails.d.ts.map +1 -0
  559. package/dist/test/src/collection/PersonaDetails.js +71 -0
  560. package/dist/test/src/collection/PersonaInstaller.d.ts +26 -0
  561. package/dist/test/src/collection/PersonaInstaller.d.ts.map +1 -0
  562. package/dist/test/src/collection/PersonaInstaller.js +103 -0
  563. package/dist/test/src/collection/PersonaSubmitter.d.ts +19 -0
  564. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +1 -0
  565. package/dist/test/src/collection/PersonaSubmitter.js +57 -0
  566. package/dist/test/src/collection/index.d.ts +10 -0
  567. package/dist/test/src/collection/index.d.ts.map +1 -0
  568. package/dist/test/src/collection/index.js +10 -0
  569. package/dist/test/src/config/constants.d.ts +25 -0
  570. package/dist/test/src/config/constants.d.ts.map +1 -0
  571. package/dist/test/src/config/constants.js +30 -0
  572. package/dist/test/src/config/index.d.ts +6 -0
  573. package/dist/test/src/config/index.d.ts.map +1 -0
  574. package/dist/test/src/config/index.js +6 -0
  575. package/dist/test/src/config/indicator-config.d.ts +107 -0
  576. package/dist/test/src/config/indicator-config.d.ts.map +1 -0
  577. package/dist/test/src/config/indicator-config.js +158 -0
  578. package/dist/test/src/constants/defaultPersonas.d.ts +10 -0
  579. package/dist/test/src/constants/defaultPersonas.d.ts.map +1 -0
  580. package/dist/test/src/constants/defaultPersonas.js +18 -0
  581. package/dist/test/src/constants/limits.d.ts +10 -0
  582. package/dist/test/src/constants/limits.d.ts.map +1 -0
  583. package/dist/test/src/constants/limits.js +13 -0
  584. package/dist/test/src/elements/BaseElement.d.ts +81 -0
  585. package/dist/test/src/elements/BaseElement.d.ts.map +1 -0
  586. package/dist/test/src/elements/BaseElement.js +381 -0
  587. package/dist/test/src/elements/FeedbackProcessor.d.ts +57 -0
  588. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +1 -0
  589. package/dist/test/src/elements/FeedbackProcessor.js +418 -0
  590. package/dist/test/src/elements/agents/Agent.d.ts +145 -0
  591. package/dist/test/src/elements/agents/Agent.d.ts.map +1 -0
  592. package/dist/test/src/elements/agents/Agent.js +848 -0
  593. package/dist/test/src/elements/agents/AgentManager.d.ts +125 -0
  594. package/dist/test/src/elements/agents/AgentManager.d.ts.map +1 -0
  595. package/dist/test/src/elements/agents/AgentManager.js +608 -0
  596. package/dist/test/src/elements/agents/constants.d.ts +42 -0
  597. package/dist/test/src/elements/agents/constants.d.ts.map +1 -0
  598. package/dist/test/src/elements/agents/constants.js +45 -0
  599. package/dist/test/src/elements/agents/goalTemplates.d.ts +44 -0
  600. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +1 -0
  601. package/dist/test/src/elements/agents/goalTemplates.js +297 -0
  602. package/dist/test/src/elements/agents/index.d.ts +8 -0
  603. package/dist/test/src/elements/agents/index.d.ts.map +1 -0
  604. package/dist/test/src/elements/agents/index.js +8 -0
  605. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +76 -0
  606. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +1 -0
  607. package/dist/test/src/elements/agents/ruleEngineConfig.js +143 -0
  608. package/dist/test/src/elements/agents/types.d.ts +97 -0
  609. package/dist/test/src/elements/agents/types.d.ts.map +1 -0
  610. package/dist/test/src/elements/agents/types.js +5 -0
  611. package/dist/test/src/elements/index.d.ts +6 -0
  612. package/dist/test/src/elements/index.d.ts.map +1 -0
  613. package/dist/test/src/elements/index.js +6 -0
  614. package/dist/test/src/elements/memories/Memory.d.ts +110 -0
  615. package/dist/test/src/elements/memories/Memory.d.ts.map +1 -0
  616. package/dist/test/src/elements/memories/Memory.js +470 -0
  617. package/dist/test/src/elements/memories/MemoryManager.d.ts +86 -0
  618. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +1 -0
  619. package/dist/test/src/elements/memories/MemoryManager.js +435 -0
  620. package/dist/test/src/elements/memories/constants.d.ts +42 -0
  621. package/dist/test/src/elements/memories/constants.d.ts.map +1 -0
  622. package/dist/test/src/elements/memories/constants.js +49 -0
  623. package/dist/test/src/elements/memories/index.d.ts +6 -0
  624. package/dist/test/src/elements/memories/index.d.ts.map +1 -0
  625. package/dist/test/src/elements/memories/index.js +6 -0
  626. package/dist/test/src/elements/skills/Skill.d.ts +109 -0
  627. package/dist/test/src/elements/skills/Skill.d.ts.map +1 -0
  628. package/dist/test/src/elements/skills/Skill.js +381 -0
  629. package/dist/test/src/elements/templates/Template.d.ts +138 -0
  630. package/dist/test/src/elements/templates/Template.d.ts.map +1 -0
  631. package/dist/test/src/elements/templates/Template.js +673 -0
  632. package/dist/test/src/elements/templates/TemplateManager.d.ts +104 -0
  633. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +1 -0
  634. package/dist/test/src/elements/templates/TemplateManager.js +496 -0
  635. package/dist/test/src/elements/templates/index.d.ts +6 -0
  636. package/dist/test/src/elements/templates/index.d.ts.map +1 -0
  637. package/dist/test/src/elements/templates/index.js +6 -0
  638. package/dist/test/src/errors/SecurityError.d.ts +29 -0
  639. package/dist/test/src/errors/SecurityError.d.ts.map +1 -0
  640. package/dist/test/src/errors/SecurityError.js +47 -0
  641. package/dist/test/src/errors/index.d.ts +2 -0
  642. package/dist/test/src/errors/index.d.ts.map +1 -0
  643. package/dist/test/src/errors/index.js +2 -0
  644. package/dist/test/src/index.barrel.d.ts +21 -0
  645. package/dist/test/src/index.barrel.d.ts.map +1 -0
  646. package/dist/test/src/index.barrel.js +31 -0
  647. package/dist/test/src/index.d.ts +223 -0
  648. package/dist/test/src/index.d.ts.map +1 -0
  649. package/dist/test/src/index.js +1594 -0
  650. package/dist/test/src/marketplace/GitHubClient.d.ts +22 -0
  651. package/dist/test/src/marketplace/GitHubClient.d.ts.map +1 -0
  652. package/dist/test/src/marketplace/GitHubClient.js +112 -0
  653. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +21 -0
  654. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
  655. package/dist/test/src/marketplace/MarketplaceBrowser.js +45 -0
  656. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +18 -0
  657. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
  658. package/dist/test/src/marketplace/MarketplaceSearch.js +36 -0
  659. package/dist/test/src/marketplace/PersonaDetails.d.ts +22 -0
  660. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +1 -0
  661. package/dist/test/src/marketplace/PersonaDetails.js +71 -0
  662. package/dist/test/src/marketplace/PersonaInstaller.d.ts +25 -0
  663. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +1 -0
  664. package/dist/test/src/marketplace/PersonaInstaller.js +100 -0
  665. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +19 -0
  666. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
  667. package/dist/test/src/marketplace/PersonaSubmitter.js +57 -0
  668. package/dist/test/src/marketplace/index.d.ts +10 -0
  669. package/dist/test/src/marketplace/index.d.ts.map +1 -0
  670. package/dist/test/src/marketplace/index.js +10 -0
  671. package/dist/test/src/persona/PersonaElement.d.ts +64 -0
  672. package/dist/test/src/persona/PersonaElement.d.ts.map +1 -0
  673. package/dist/test/src/persona/PersonaElement.js +223 -0
  674. package/dist/test/src/persona/PersonaElementManager.d.ts +97 -0
  675. package/dist/test/src/persona/PersonaElementManager.d.ts.map +1 -0
  676. package/dist/test/src/persona/PersonaElementManager.js +342 -0
  677. package/dist/test/src/persona/PersonaLoader.d.ts +34 -0
  678. package/dist/test/src/persona/PersonaLoader.d.ts.map +1 -0
  679. package/dist/test/src/persona/PersonaLoader.js +145 -0
  680. package/dist/test/src/persona/PersonaManager.d.ts +112 -0
  681. package/dist/test/src/persona/PersonaManager.d.ts.map +1 -0
  682. package/dist/test/src/persona/PersonaManager.js +341 -0
  683. package/dist/test/src/persona/PersonaValidator.d.ts +33 -0
  684. package/dist/test/src/persona/PersonaValidator.d.ts.map +1 -0
  685. package/dist/test/src/persona/PersonaValidator.js +157 -0
  686. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +43 -0
  687. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
  688. package/dist/test/src/persona/export-import/PersonaExporter.js +99 -0
  689. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +65 -0
  690. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
  691. package/dist/test/src/persona/export-import/PersonaImporter.js +315 -0
  692. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +60 -0
  693. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
  694. package/dist/test/src/persona/export-import/PersonaSharer.js +502 -0
  695. package/dist/test/src/persona/export-import/index.d.ts +10 -0
  696. package/dist/test/src/persona/export-import/index.d.ts.map +1 -0
  697. package/dist/test/src/persona/export-import/index.js +7 -0
  698. package/dist/test/src/persona/index.d.ts +7 -0
  699. package/dist/test/src/persona/index.d.ts.map +1 -0
  700. package/dist/test/src/persona/index.js +7 -0
  701. package/dist/test/src/portfolio/MigrationManager.d.ts +44 -0
  702. package/dist/test/src/portfolio/MigrationManager.d.ts.map +1 -0
  703. package/dist/test/src/portfolio/MigrationManager.js +163 -0
  704. package/dist/test/src/portfolio/PortfolioManager.d.ts +54 -0
  705. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +1 -0
  706. package/dist/test/src/portfolio/PortfolioManager.js +224 -0
  707. package/dist/test/src/portfolio/types.d.ts +18 -0
  708. package/dist/test/src/portfolio/types.d.ts.map +1 -0
  709. package/dist/test/src/portfolio/types.js +13 -0
  710. package/dist/test/src/security/InputValidator.d.ts +80 -0
  711. package/dist/test/src/security/InputValidator.d.ts.map +1 -0
  712. package/dist/test/src/security/InputValidator.js +436 -0
  713. package/dist/test/src/security/audit/SecurityAuditor.d.ts +44 -0
  714. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +1 -0
  715. package/dist/test/src/security/audit/SecurityAuditor.js +274 -0
  716. package/dist/test/src/security/audit/config/suppressions.d.ts +34 -0
  717. package/dist/test/src/security/audit/config/suppressions.d.ts.map +1 -0
  718. package/dist/test/src/security/audit/config/suppressions.js +575 -0
  719. package/dist/test/src/security/audit/index.d.ts +14 -0
  720. package/dist/test/src/security/audit/index.d.ts.map +1 -0
  721. package/dist/test/src/security/audit/index.js +15 -0
  722. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +46 -0
  723. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
  724. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +174 -0
  725. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +13 -0
  726. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +1 -0
  727. package/dist/test/src/security/audit/reporters/JsonReporter.js +25 -0
  728. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +13 -0
  729. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
  730. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +79 -0
  731. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +20 -0
  732. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +1 -0
  733. package/dist/test/src/security/audit/rules/SecurityRules.js +244 -0
  734. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +47 -0
  735. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +1 -0
  736. package/dist/test/src/security/audit/scanners/CodeScanner.js +174 -0
  737. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
  738. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
  739. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +22 -0
  740. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +13 -0
  741. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
  742. package/dist/test/src/security/audit/scanners/DependencyScanner.js +22 -0
  743. package/dist/test/src/security/audit/types.d.ts +94 -0
  744. package/dist/test/src/security/audit/types.d.ts.map +1 -0
  745. package/dist/test/src/security/audit/types.js +6 -0
  746. package/dist/test/src/security/commandValidator.d.ts +7 -0
  747. package/dist/test/src/security/commandValidator.d.ts.map +1 -0
  748. package/dist/test/src/security/commandValidator.js +78 -0
  749. package/dist/test/src/security/constants.d.ts +24 -0
  750. package/dist/test/src/security/constants.d.ts.map +1 -0
  751. package/dist/test/src/security/constants.js +26 -0
  752. package/dist/test/src/security/contentValidator.d.ts +47 -0
  753. package/dist/test/src/security/contentValidator.d.ts.map +1 -0
  754. package/dist/test/src/security/contentValidator.js +301 -0
  755. package/dist/test/src/security/errors.d.ts +14 -0
  756. package/dist/test/src/security/errors.d.ts.map +1 -0
  757. package/dist/test/src/security/errors.js +28 -0
  758. package/dist/test/src/security/fileLockManager.d.ts +70 -0
  759. package/dist/test/src/security/fileLockManager.d.ts.map +1 -0
  760. package/dist/test/src/security/fileLockManager.js +187 -0
  761. package/dist/test/src/security/index.d.ts +12 -0
  762. package/dist/test/src/security/index.d.ts.map +1 -0
  763. package/dist/test/src/security/index.js +14 -0
  764. package/dist/test/src/security/pathValidator.d.ts +9 -0
  765. package/dist/test/src/security/pathValidator.d.ts.map +1 -0
  766. package/dist/test/src/security/pathValidator.js +98 -0
  767. package/dist/test/src/security/regexValidator.d.ts +59 -0
  768. package/dist/test/src/security/regexValidator.d.ts.map +1 -0
  769. package/dist/test/src/security/regexValidator.js +214 -0
  770. package/dist/test/src/security/secureYamlParser.d.ts +46 -0
  771. package/dist/test/src/security/secureYamlParser.d.ts.map +1 -0
  772. package/dist/test/src/security/secureYamlParser.js +203 -0
  773. package/dist/test/src/security/securityMonitor.d.ts +58 -0
  774. package/dist/test/src/security/securityMonitor.d.ts.map +1 -0
  775. package/dist/test/src/security/securityMonitor.js +108 -0
  776. package/dist/test/src/security/tokenManager.d.ts +85 -0
  777. package/dist/test/src/security/tokenManager.d.ts.map +1 -0
  778. package/dist/test/src/security/tokenManager.js +286 -0
  779. package/dist/test/src/security/validators/unicodeValidator.d.ts +97 -0
  780. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +1 -0
  781. package/dist/test/src/security/validators/unicodeValidator.js +312 -0
  782. package/dist/test/src/security/yamlValidator.d.ts +21 -0
  783. package/dist/test/src/security/yamlValidator.d.ts.map +1 -0
  784. package/dist/test/src/security/yamlValidator.js +164 -0
  785. package/dist/test/src/server/ServerSetup.d.ts +35 -0
  786. package/dist/test/src/server/ServerSetup.d.ts.map +1 -0
  787. package/dist/test/src/server/ServerSetup.js +116 -0
  788. package/dist/test/src/server/index.d.ts +7 -0
  789. package/dist/test/src/server/index.d.ts.map +1 -0
  790. package/dist/test/src/server/index.js +7 -0
  791. package/dist/test/src/server/startup.d.ts +31 -0
  792. package/dist/test/src/server/startup.d.ts.map +1 -0
  793. package/dist/test/src/server/startup.js +67 -0
  794. package/dist/test/src/server/tools/CollectionTools.d.ts +10 -0
  795. package/dist/test/src/server/tools/CollectionTools.d.ts.map +1 -0
  796. package/dist/test/src/server/tools/CollectionTools.js +96 -0
  797. package/dist/test/src/server/tools/ConfigTools.d.ts +10 -0
  798. package/dist/test/src/server/tools/ConfigTools.d.ts.map +1 -0
  799. package/dist/test/src/server/tools/ConfigTools.js +63 -0
  800. package/dist/test/src/server/tools/MarketplaceTools.d.ts +10 -0
  801. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +1 -0
  802. package/dist/test/src/server/tools/MarketplaceTools.js +92 -0
  803. package/dist/test/src/server/tools/PersonaTools.d.ts +10 -0
  804. package/dist/test/src/server/tools/PersonaTools.d.ts.map +1 -0
  805. package/dist/test/src/server/tools/PersonaTools.js +257 -0
  806. package/dist/test/src/server/tools/ToolRegistry.d.ts +37 -0
  807. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +1 -0
  808. package/dist/test/src/server/tools/ToolRegistry.js +40 -0
  809. package/dist/test/src/server/tools/UpdateTools.d.ts +10 -0
  810. package/dist/test/src/server/tools/UpdateTools.d.ts.map +1 -0
  811. package/dist/test/src/server/tools/UpdateTools.js +64 -0
  812. package/dist/test/src/server/tools/UserTools.d.ts +10 -0
  813. package/dist/test/src/server/tools/UserTools.d.ts.map +1 -0
  814. package/dist/test/src/server/tools/UserTools.js +51 -0
  815. package/dist/test/src/server/tools/index.d.ts +10 -0
  816. package/dist/test/src/server/tools/index.d.ts.map +1 -0
  817. package/dist/test/src/server/tools/index.js +10 -0
  818. package/dist/test/src/server/types.d.ts +34 -0
  819. package/dist/test/src/server/types.d.ts.map +1 -0
  820. package/dist/test/src/server/types.js +5 -0
  821. package/dist/test/src/tools/debug.d.ts +20 -0
  822. package/dist/test/src/tools/debug.d.ts.map +1 -0
  823. package/dist/test/src/tools/debug.js +37 -0
  824. package/dist/test/src/types/cache.d.ts +8 -0
  825. package/dist/test/src/types/cache.d.ts.map +1 -0
  826. package/dist/test/src/types/cache.js +5 -0
  827. package/dist/test/src/types/collection.d.ts +23 -0
  828. package/dist/test/src/types/collection.d.ts.map +1 -0
  829. package/dist/test/src/types/collection.js +5 -0
  830. package/dist/test/src/types/elements/IElement.d.ts +123 -0
  831. package/dist/test/src/types/elements/IElement.d.ts.map +1 -0
  832. package/dist/test/src/types/elements/IElement.js +30 -0
  833. package/dist/test/src/types/elements/IElementManager.d.ts +65 -0
  834. package/dist/test/src/types/elements/IElementManager.d.ts.map +1 -0
  835. package/dist/test/src/types/elements/IElementManager.js +6 -0
  836. package/dist/test/src/types/elements/IRatingManager.d.ts +109 -0
  837. package/dist/test/src/types/elements/IRatingManager.d.ts.map +1 -0
  838. package/dist/test/src/types/elements/IRatingManager.js +6 -0
  839. package/dist/test/src/types/elements/IReferenceResolver.d.ts +52 -0
  840. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +1 -0
  841. package/dist/test/src/types/elements/IReferenceResolver.js +6 -0
  842. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +49 -0
  843. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +1 -0
  844. package/dist/test/src/types/elements/RatingBreakdowns.js +6 -0
  845. package/dist/test/src/types/elements/index.d.ts +9 -0
  846. package/dist/test/src/types/elements/index.d.ts.map +1 -0
  847. package/dist/test/src/types/elements/index.js +11 -0
  848. package/dist/test/src/types/index.d.ts +9 -0
  849. package/dist/test/src/types/index.d.ts.map +1 -0
  850. package/dist/test/src/types/index.js +9 -0
  851. package/dist/test/src/types/marketplace.d.ts +23 -0
  852. package/dist/test/src/types/marketplace.d.ts.map +1 -0
  853. package/dist/test/src/types/marketplace.js +5 -0
  854. package/dist/test/src/types/mcp.d.ts +84 -0
  855. package/dist/test/src/types/mcp.d.ts.map +1 -0
  856. package/dist/test/src/types/mcp.js +80 -0
  857. package/dist/test/src/types/persona.d.ts +30 -0
  858. package/dist/test/src/types/persona.d.ts.map +1 -0
  859. package/dist/test/src/types/persona.js +5 -0
  860. package/dist/test/src/update/BackupManager.d.ts +46 -0
  861. package/dist/test/src/update/BackupManager.d.ts.map +1 -0
  862. package/dist/test/src/update/BackupManager.js +261 -0
  863. package/dist/test/src/update/DependencyChecker.d.ts +41 -0
  864. package/dist/test/src/update/DependencyChecker.d.ts.map +1 -0
  865. package/dist/test/src/update/DependencyChecker.js +132 -0
  866. package/dist/test/src/update/RateLimiter.d.ts +80 -0
  867. package/dist/test/src/update/RateLimiter.d.ts.map +1 -0
  868. package/dist/test/src/update/RateLimiter.js +172 -0
  869. package/dist/test/src/update/SignatureVerifier.d.ts +71 -0
  870. package/dist/test/src/update/SignatureVerifier.d.ts.map +1 -0
  871. package/dist/test/src/update/SignatureVerifier.js +214 -0
  872. package/dist/test/src/update/UpdateChecker.d.ts +127 -0
  873. package/dist/test/src/update/UpdateChecker.d.ts.map +1 -0
  874. package/dist/test/src/update/UpdateChecker.js +469 -0
  875. package/dist/test/src/update/UpdateManager.d.ts +41 -0
  876. package/dist/test/src/update/UpdateManager.d.ts.map +1 -0
  877. package/dist/test/src/update/UpdateManager.js +260 -0
  878. package/dist/test/src/update/VersionManager.d.ts +31 -0
  879. package/dist/test/src/update/VersionManager.d.ts.map +1 -0
  880. package/dist/test/src/update/VersionManager.js +134 -0
  881. package/dist/test/src/update/index.d.ts +9 -0
  882. package/dist/test/src/update/index.d.ts.map +1 -0
  883. package/dist/test/src/update/index.js +9 -0
  884. package/dist/test/src/utils/filesystem.d.ts +29 -0
  885. package/dist/test/src/utils/filesystem.d.ts.map +1 -0
  886. package/dist/test/src/utils/filesystem.js +94 -0
  887. package/dist/test/src/utils/git.d.ts +32 -0
  888. package/dist/test/src/utils/git.d.ts.map +1 -0
  889. package/dist/test/src/utils/git.js +65 -0
  890. package/dist/test/src/utils/index.d.ts +7 -0
  891. package/dist/test/src/utils/index.d.ts.map +1 -0
  892. package/dist/test/src/utils/index.js +7 -0
  893. package/dist/test/src/utils/logger.d.ts +45 -0
  894. package/dist/test/src/utils/logger.d.ts.map +1 -0
  895. package/dist/test/src/utils/logger.js +91 -0
  896. package/dist/test/src/utils/version.d.ts +25 -0
  897. package/dist/test/src/utils/version.d.ts.map +1 -0
  898. package/dist/test/src/utils/version.js +97 -0
  899. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +33 -0
  900. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +1 -0
  901. package/dist/test/test/__tests__/integration/helpers/file-utils.js +83 -0
  902. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +26 -0
  903. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +1 -0
  904. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +95 -0
  905. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +26 -0
  906. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +1 -0
  907. package/dist/test/test/__tests__/integration/helpers/test-server.js +41 -0
  908. package/dist/test/test/__tests__/integration/setup.d.ts +8 -0
  909. package/dist/test/test/__tests__/integration/setup.d.ts.map +1 -0
  910. package/dist/test/test/__tests__/integration/setup.js +31 -0
  911. package/dist/test/test/__tests__/integration/teardown.d.ts +5 -0
  912. package/dist/test/test/__tests__/integration/teardown.d.ts.map +1 -0
  913. package/dist/test/test/__tests__/integration/teardown.js +23 -0
  914. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +34 -0
  915. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +1 -0
  916. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +224 -0
  917. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +89 -0
  918. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +1 -0
  919. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +543 -0
  920. package/dist/test/test/__tests__/security/index.d.ts +46 -0
  921. package/dist/test/test/__tests__/security/index.d.ts.map +1 -0
  922. package/dist/test/test/__tests__/security/index.js +98 -0
  923. package/dist/test/test/__tests__/security/setup.d.ts +3 -0
  924. package/dist/test/test/__tests__/security/setup.d.ts.map +1 -0
  925. package/dist/test/test/__tests__/security/setup.js +23 -0
  926. package/dist/tools/debug.d.ts +20 -0
  927. package/dist/tools/debug.d.ts.map +1 -0
  928. package/dist/tools/debug.js +37 -0
  929. package/dist/types/cache.d.ts +8 -0
  930. package/dist/types/cache.d.ts.map +1 -0
  931. package/dist/types/cache.js +5 -0
  932. package/dist/types/collection.d.ts +23 -0
  933. package/dist/types/collection.d.ts.map +1 -0
  934. package/dist/types/collection.js +5 -0
  935. package/dist/types/elements/IElement.d.ts +123 -0
  936. package/dist/types/elements/IElement.d.ts.map +1 -0
  937. package/dist/types/elements/IElement.js +30 -0
  938. package/dist/types/elements/IElementManager.d.ts +65 -0
  939. package/dist/types/elements/IElementManager.d.ts.map +1 -0
  940. package/dist/types/elements/IElementManager.js +6 -0
  941. package/dist/types/elements/IRatingManager.d.ts +109 -0
  942. package/dist/types/elements/IRatingManager.d.ts.map +1 -0
  943. package/dist/types/elements/IRatingManager.js +6 -0
  944. package/dist/types/elements/IReferenceResolver.d.ts +52 -0
  945. package/dist/types/elements/IReferenceResolver.d.ts.map +1 -0
  946. package/dist/types/elements/IReferenceResolver.js +6 -0
  947. package/dist/types/elements/RatingBreakdowns.d.ts +49 -0
  948. package/dist/types/elements/RatingBreakdowns.d.ts.map +1 -0
  949. package/dist/types/elements/RatingBreakdowns.js +6 -0
  950. package/dist/types/elements/index.d.ts +9 -0
  951. package/dist/types/elements/index.d.ts.map +1 -0
  952. package/dist/types/elements/index.js +11 -0
  953. package/dist/types/index.d.ts +9 -0
  954. package/dist/types/index.d.ts.map +1 -0
  955. package/dist/types/index.js +9 -0
  956. package/dist/types/marketplace.d.ts +23 -0
  957. package/dist/types/marketplace.d.ts.map +1 -0
  958. package/dist/types/marketplace.js +5 -0
  959. package/dist/types/mcp.d.ts +84 -0
  960. package/dist/types/mcp.d.ts.map +1 -0
  961. package/dist/types/mcp.js +80 -0
  962. package/dist/types/persona.d.ts +30 -0
  963. package/dist/types/persona.d.ts.map +1 -0
  964. package/dist/types/persona.js +5 -0
  965. package/dist/update/BackupManager.d.ts +46 -0
  966. package/dist/update/BackupManager.d.ts.map +1 -0
  967. package/dist/update/BackupManager.js +261 -0
  968. package/dist/update/DependencyChecker.d.ts +41 -0
  969. package/dist/update/DependencyChecker.d.ts.map +1 -0
  970. package/dist/update/DependencyChecker.js +132 -0
  971. package/dist/update/RateLimiter.d.ts +80 -0
  972. package/dist/update/RateLimiter.d.ts.map +1 -0
  973. package/dist/update/RateLimiter.js +172 -0
  974. package/dist/update/SignatureVerifier.d.ts +71 -0
  975. package/dist/update/SignatureVerifier.d.ts.map +1 -0
  976. package/dist/update/SignatureVerifier.js +214 -0
  977. package/dist/update/UpdateChecker.d.ts +127 -0
  978. package/dist/update/UpdateChecker.d.ts.map +1 -0
  979. package/dist/update/UpdateChecker.js +469 -0
  980. package/dist/update/UpdateManager.d.ts +41 -0
  981. package/dist/update/UpdateManager.d.ts.map +1 -0
  982. package/dist/update/UpdateManager.js +260 -0
  983. package/dist/update/VersionManager.d.ts +31 -0
  984. package/dist/update/VersionManager.d.ts.map +1 -0
  985. package/dist/update/VersionManager.js +134 -0
  986. package/dist/update/index.d.ts +9 -0
  987. package/dist/update/index.d.ts.map +1 -0
  988. package/dist/update/index.js +9 -0
  989. package/dist/utils/filesystem.d.ts +29 -0
  990. package/dist/utils/filesystem.d.ts.map +1 -0
  991. package/dist/utils/filesystem.js +94 -0
  992. package/dist/utils/git.d.ts +32 -0
  993. package/dist/utils/git.d.ts.map +1 -0
  994. package/dist/utils/git.js +65 -0
  995. package/dist/utils/index.d.ts +7 -0
  996. package/dist/utils/index.d.ts.map +1 -0
  997. package/dist/utils/index.js +7 -0
  998. package/dist/utils/logger.d.ts +45 -0
  999. package/dist/utils/logger.d.ts.map +1 -0
  1000. package/dist/utils/logger.js +91 -0
  1001. package/dist/utils/version.d.ts +25 -0
  1002. package/dist/utils/version.d.ts.map +1 -0
  1003. package/dist/utils/version.js +97 -0
  1004. package/package.json +128 -0
@@ -0,0 +1,502 @@
1
+ /**
2
+ * Persona sharing functionality via URLs
3
+ */
4
+ import { PersonaExporter } from './PersonaExporter.js';
5
+ import { TokenManager } from '../../security/tokenManager.js';
6
+ import { SecurityError } from '../../security/errors.js';
7
+ import { logger } from '../../utils/logger.js';
8
+ import { RateLimiter } from '../../update/RateLimiter.js';
9
+ export class PersonaSharer {
10
+ githubClient;
11
+ currentUser;
12
+ exporter;
13
+ githubRateLimiter;
14
+ constructor(githubClient, currentUser) {
15
+ this.githubClient = githubClient;
16
+ this.currentUser = currentUser;
17
+ this.exporter = new PersonaExporter(currentUser);
18
+ // GitHub API rate limit: 60 requests per hour for unauthenticated
19
+ // 5000 per hour for authenticated - use TokenManager to check
20
+ const hasValidToken = TokenManager.getGitHubToken() !== null;
21
+ this.githubRateLimiter = new RateLimiter({
22
+ maxRequests: hasValidToken ? 100 : 30, // Conservative limits
23
+ windowMs: 60 * 60 * 1000, // 1 hour
24
+ minDelayMs: 1000 // Minimum 1 second between requests
25
+ });
26
+ }
27
+ /**
28
+ * Share a persona via GitHub Gist
29
+ */
30
+ async sharePersona(persona, expiryDays = 7) {
31
+ try {
32
+ // Validate gist permissions if token is available
33
+ const token = TokenManager.getGitHubToken();
34
+ let hasValidToken = false;
35
+ if (token) {
36
+ try {
37
+ const validation = await TokenManager.ensureTokenPermissions('gist');
38
+ if (!validation.isValid) {
39
+ const safeMessage = TokenManager.createSafeErrorMessage(validation.error || 'Unknown validation error', token);
40
+ logger.warn('GitHub token lacks gist permissions, falling back to base64 URL', { error: safeMessage });
41
+ // Continue to fallback instead of failing
42
+ }
43
+ else {
44
+ hasValidToken = true;
45
+ }
46
+ }
47
+ catch (error) {
48
+ // Handle rate limiting or other security errors gracefully
49
+ if (error instanceof SecurityError && error.code === 'RATE_LIMIT_EXCEEDED') {
50
+ logger.warn('Token validation rate limited, falling back to base64 URL', {
51
+ error: 'Rate limit exceeded for token validation'
52
+ });
53
+ }
54
+ else if (error instanceof Error) {
55
+ const safeMessage = TokenManager.createSafeErrorMessage(error.message, token);
56
+ logger.warn('Token validation failed, falling back to base64 URL', { error: safeMessage });
57
+ }
58
+ // Continue to fallback instead of failing
59
+ }
60
+ }
61
+ // Export persona to structured format
62
+ const exportData = this.exporter.exportPersona(persona);
63
+ // Add sharing metadata
64
+ const shareData = {
65
+ ...exportData,
66
+ sharedAt: new Date().toISOString(),
67
+ sharedBy: this.currentUser || 'anonymous',
68
+ expiresAt: new Date(Date.now() + expiryDays * 24 * 60 * 60 * 1000).toISOString(),
69
+ shareVersion: '1.0.0'
70
+ };
71
+ // Create GitHub Gist if token has proper permissions
72
+ if (hasValidToken) {
73
+ const gistResult = await this.createGist(persona.metadata.name, shareData);
74
+ if (gistResult.success) {
75
+ return {
76
+ success: true,
77
+ url: gistResult.url,
78
+ gistId: gistResult.gistId,
79
+ expiresAt: shareData.expiresAt,
80
+ message: this.formatShareSuccess(gistResult.url, shareData.expiresAt)
81
+ };
82
+ }
83
+ }
84
+ // Fallback to base64 URL if Gist fails or no token
85
+ return this.createBase64Url(shareData);
86
+ }
87
+ catch (error) {
88
+ const errorMessage = error instanceof Error ? error.message : String(error);
89
+ const safeMessage = TokenManager.createSafeErrorMessage(errorMessage);
90
+ logger.error('Share error', { error: safeMessage });
91
+ return {
92
+ success: false,
93
+ message: `Failed to share persona: ${safeMessage}`
94
+ };
95
+ }
96
+ }
97
+ /**
98
+ * Import a persona from a share URL
99
+ */
100
+ async importFromUrl(url) {
101
+ try {
102
+ // Validate URL first
103
+ if (!this.validateShareUrl(url)) {
104
+ return {
105
+ success: false,
106
+ message: 'Invalid or unsafe URL provided'
107
+ };
108
+ }
109
+ // Check if it's a GitHub Gist URL
110
+ const gistId = this.extractGistId(url);
111
+ if (gistId) {
112
+ return await this.importFromGist(gistId);
113
+ }
114
+ // Check if it's a base64 URL
115
+ if (url.includes('#dollhouse-persona=')) {
116
+ return this.importFromBase64Url(url);
117
+ }
118
+ // Validate URL for security
119
+ if (!this.validateShareUrl(url)) {
120
+ throw new Error('Invalid or potentially malicious URL');
121
+ }
122
+ // Try direct fetch with timeout
123
+ const controller = new AbortController();
124
+ const timeoutId = setTimeout(() => controller.abort(), 5000); // 5 second timeout
125
+ try {
126
+ const response = await fetch(url, {
127
+ signal: controller.signal,
128
+ headers: {
129
+ 'User-Agent': 'DollhouseMCP/1.0',
130
+ 'Accept': 'application/json'
131
+ }
132
+ });
133
+ clearTimeout(timeoutId);
134
+ if (!response.ok) {
135
+ throw new Error(`Request failed with status ${response.status}`);
136
+ }
137
+ // Validate Content-Type header
138
+ const contentType = response.headers.get('content-type');
139
+ if (!contentType || !contentType.toLowerCase().includes('application/json')) {
140
+ throw new Error('Invalid response type: expected JSON');
141
+ }
142
+ // Check response size to prevent memory exhaustion
143
+ const contentLength = response.headers.get('content-length');
144
+ const maxSize = 5 * 1024 * 1024; // 5MB max
145
+ if (contentLength && parseInt(contentLength) > maxSize) {
146
+ throw new Error('Response too large');
147
+ }
148
+ const data = await response.json();
149
+ return {
150
+ success: true,
151
+ data,
152
+ message: 'Successfully retrieved persona data'
153
+ };
154
+ }
155
+ finally {
156
+ clearTimeout(timeoutId);
157
+ }
158
+ }
159
+ catch (error) {
160
+ logger.error('Import from URL error', error);
161
+ return {
162
+ success: false,
163
+ message: `Failed to import from URL: ${error instanceof Error ? error.message : String(error)}`
164
+ };
165
+ }
166
+ }
167
+ /**
168
+ * Create a GitHub Gist
169
+ */
170
+ async createGist(personaName, data) {
171
+ try {
172
+ // Use TokenManager for secure token handling
173
+ const token = TokenManager.getGitHubToken();
174
+ if (!token) {
175
+ logger.info('No valid GitHub token available for Gist creation');
176
+ return { success: false };
177
+ }
178
+ // Check rate limit
179
+ const rateLimitStatus = this.githubRateLimiter.checkLimit();
180
+ if (!rateLimitStatus.allowed) {
181
+ logger.warn(`GitHub API rate limit exceeded. Retry after ${rateLimitStatus.retryAfterMs}ms`);
182
+ return { success: false };
183
+ }
184
+ const controller = new AbortController();
185
+ const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout
186
+ try {
187
+ const response = await fetch('https://api.github.com/gists', {
188
+ method: 'POST',
189
+ signal: controller.signal,
190
+ headers: {
191
+ 'Authorization': `Bearer ${token}`,
192
+ 'Accept': 'application/vnd.github.v3+json',
193
+ 'Content-Type': 'application/json',
194
+ 'User-Agent': 'DollhouseMCP/1.0'
195
+ },
196
+ body: JSON.stringify({
197
+ description: `DollhouseMCP Persona: ${personaName}`,
198
+ public: false, // Private gist for security
199
+ files: {
200
+ 'persona.json': {
201
+ content: JSON.stringify(data, null, 2)
202
+ }
203
+ }
204
+ })
205
+ });
206
+ clearTimeout(timeoutId);
207
+ if (!response.ok) {
208
+ throw new Error(`GitHub API error: ${response.status}`);
209
+ }
210
+ // Validate Content-Type for GitHub API response
211
+ const contentType = response.headers.get('content-type');
212
+ if (!contentType || !contentType.toLowerCase().includes('application/json')) {
213
+ throw new Error('Invalid GitHub API response type');
214
+ }
215
+ const gist = await response.json();
216
+ // Consume the rate limit token after successful request
217
+ this.githubRateLimiter.consumeToken();
218
+ return {
219
+ success: true,
220
+ url: gist.html_url,
221
+ gistId: gist.id
222
+ };
223
+ }
224
+ finally {
225
+ clearTimeout(timeoutId);
226
+ }
227
+ }
228
+ catch (error) {
229
+ const errorMessage = error instanceof Error ? error.message : String(error);
230
+ const safeMessage = TokenManager.createSafeErrorMessage(errorMessage);
231
+ logger.error('Gist creation error', { error: safeMessage });
232
+ return { success: false };
233
+ }
234
+ }
235
+ /**
236
+ * Create a base64 URL (fallback)
237
+ */
238
+ createBase64Url(data) {
239
+ const base64 = this.exporter.toBase64(data);
240
+ const url = `https://dollhousemcp.com/import#dollhouse-persona=${base64}`;
241
+ return {
242
+ success: true,
243
+ url,
244
+ expiresAt: data.expiresAt,
245
+ message: this.formatShareSuccess(url, data.expiresAt)
246
+ };
247
+ }
248
+ /**
249
+ * Import from GitHub Gist
250
+ */
251
+ async importFromGist(gistId) {
252
+ try {
253
+ // Check rate limit
254
+ const rateLimitStatus = this.githubRateLimiter.checkLimit();
255
+ if (!rateLimitStatus.allowed) {
256
+ throw new Error(`GitHub API rate limit exceeded. Please try again in ${Math.ceil(rateLimitStatus.retryAfterMs / 1000)} seconds`);
257
+ }
258
+ const gistUrl = `https://api.github.com/gists/${gistId}`;
259
+ // Validate URL (should always pass for GitHub API)
260
+ if (!this.validateShareUrl(gistUrl)) {
261
+ throw new Error('Invalid GitHub API URL');
262
+ }
263
+ const controller = new AbortController();
264
+ const timeoutId = setTimeout(() => controller.abort(), 10000); // 10 second timeout for API
265
+ try {
266
+ const response = await fetch(gistUrl, {
267
+ signal: controller.signal,
268
+ headers: {
269
+ 'Accept': 'application/vnd.github.v3+json',
270
+ 'User-Agent': 'DollhouseMCP/1.0'
271
+ }
272
+ });
273
+ clearTimeout(timeoutId);
274
+ if (!response.ok) {
275
+ throw new Error(`Failed to fetch gist: ${response.status}`);
276
+ }
277
+ // Validate Content-Type for GitHub API response
278
+ const contentType = response.headers.get('content-type');
279
+ if (!contentType || !contentType.toLowerCase().includes('application/json')) {
280
+ throw new Error('Invalid GitHub API response type');
281
+ }
282
+ const gist = await response.json();
283
+ const personaFile = gist.files['persona.json'];
284
+ if (!personaFile) {
285
+ throw new Error('No persona data found in gist');
286
+ }
287
+ const data = JSON.parse(personaFile.content);
288
+ // Check expiry
289
+ if (data.expiresAt && new Date(data.expiresAt) < new Date()) {
290
+ return {
291
+ success: false,
292
+ message: 'This share link has expired'
293
+ };
294
+ }
295
+ // Consume the rate limit token after successful request
296
+ this.githubRateLimiter.consumeToken();
297
+ return {
298
+ success: true,
299
+ data,
300
+ message: 'Successfully retrieved persona from GitHub'
301
+ };
302
+ }
303
+ finally {
304
+ clearTimeout(timeoutId);
305
+ }
306
+ }
307
+ catch (error) {
308
+ logger.error('Gist import error', error);
309
+ return {
310
+ success: false,
311
+ message: `Failed to import from gist: ${error instanceof Error ? error.message : String(error)}`
312
+ };
313
+ }
314
+ }
315
+ /**
316
+ * Validate URL for security (prevent SSRF attacks)
317
+ */
318
+ validateShareUrl(url) {
319
+ try {
320
+ // 1. URL length check to prevent DoS
321
+ if (url.length > 2048) {
322
+ logger.warn('URL exceeds maximum length', { urlLength: url.length });
323
+ return false;
324
+ }
325
+ const parsed = new URL(url);
326
+ // 2. Protocol check - only allow http/https
327
+ if (!['https:', 'http:'].includes(parsed.protocol)) {
328
+ logger.warn('Invalid protocol in URL', { protocol: parsed.protocol });
329
+ return false;
330
+ }
331
+ // 3. Port restrictions - block non-standard ports that could be internal services
332
+ const port = parsed.port || (parsed.protocol === 'https:' ? '443' : '80');
333
+ const allowedPorts = ['80', '443', '8080', '8443'];
334
+ if (!allowedPorts.includes(port)) {
335
+ logger.warn('Blocked non-standard port', { port });
336
+ return false;
337
+ }
338
+ // 4. Hostname validation
339
+ const hostname = parsed.hostname.toLowerCase();
340
+ // Block various localhost representations
341
+ const blockedHostnames = [
342
+ 'localhost',
343
+ 'localhost.localdomain',
344
+ '0.0.0.0',
345
+ '0',
346
+ '0x0',
347
+ '0x00000000',
348
+ '[::1]',
349
+ '[::ffff:127.0.0.1]',
350
+ '[0000:0000:0000:0000:0000:0000:0000:0001]'
351
+ ];
352
+ if (blockedHostnames.includes(hostname)) {
353
+ logger.warn('Blocked localhost hostname', { hostname });
354
+ return false;
355
+ }
356
+ // Block private IP ranges with comprehensive patterns
357
+ const privateIpPatterns = [
358
+ /^127\./, // Loopback
359
+ /^10\./, // Private class A
360
+ /^192\.168\./, // Private class C
361
+ /^172\.(1[6-9]|2[0-9]|3[0-1])\./, // Private class B
362
+ /^169\.254\./, // Link-local
363
+ /^fc00:/i, // IPv6 private
364
+ /^fe80:/i, // IPv6 link-local
365
+ /^::1$/, // IPv6 loopback
366
+ /^::ffff:0?:?0?:?0?:?0?$/i, // IPv6 mapped IPv4
367
+ /^100\.6[4-9]\./, // Carrier-grade NAT
368
+ /^100\.[7-9][0-9]\./, // Carrier-grade NAT
369
+ /^100\.1[0-2][0-9]\./, // Carrier-grade NAT
370
+ /^0\./, // Reserved
371
+ /^255\.255\.255\.255$/ // Broadcast
372
+ ];
373
+ if (privateIpPatterns.some(pattern => pattern.test(hostname))) {
374
+ logger.warn('Blocked private IP range', { hostname });
375
+ return false;
376
+ }
377
+ // Block cloud metadata endpoints
378
+ const metadataEndpoints = [
379
+ '169.254.169.254', // AWS/GCP/Azure
380
+ 'metadata.google.internal',
381
+ 'metadata.azure.com',
382
+ '100.100.100.200' // Alibaba Cloud
383
+ ];
384
+ if (metadataEndpoints.includes(hostname)) {
385
+ logger.warn('Blocked cloud metadata endpoint', { hostname });
386
+ return false;
387
+ }
388
+ // Block numeric IP representations that could bypass checks
389
+ if (/^\d+$/.test(hostname)) {
390
+ // Convert decimal to IP and check
391
+ const num = parseInt(hostname, 10);
392
+ if (num <= 0xFFFFFFFF) {
393
+ const ip = `${(num >>> 24) & 0xFF}.${(num >>> 16) & 0xFF}.${(num >>> 8) & 0xFF}.${num & 0xFF}`;
394
+ logger.warn('Blocked numeric IP representation', { hostname, resolvedIp: ip });
395
+ return false;
396
+ }
397
+ }
398
+ // Block hex IP representations
399
+ if (/^0x[0-9a-f]+$/i.test(hostname)) {
400
+ logger.warn('Blocked hex IP representation', { hostname });
401
+ return false;
402
+ }
403
+ // Validate domain format (basic check)
404
+ // Allow GitHub domains and common share platforms
405
+ const trustedDomains = [
406
+ 'github.com',
407
+ 'gist.github.com',
408
+ 'api.github.com',
409
+ 'raw.githubusercontent.com',
410
+ 'dollhousemcp.com'
411
+ ];
412
+ // Check if it's a trusted domain
413
+ const isTrustedDomain = trustedDomains.some(domain => hostname === domain || hostname.endsWith(`.${domain}`));
414
+ if (!isTrustedDomain) {
415
+ // For non-trusted domains, apply stricter validation
416
+ // Must be a valid domain format, not just an IP
417
+ const domainPattern = /^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i;
418
+ const ipv4Pattern = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
419
+ const ipv6Pattern = /^\[?([0-9a-f]{0,4}:){2,7}[0-9a-f]{0,4}\]?$/i;
420
+ if (ipv4Pattern.test(hostname) || ipv6Pattern.test(hostname)) {
421
+ logger.warn('Direct IP access not allowed for untrusted sources', { hostname });
422
+ return false;
423
+ }
424
+ if (!domainPattern.test(hostname)) {
425
+ logger.warn('Invalid domain format', { hostname });
426
+ return false;
427
+ }
428
+ }
429
+ logger.debug('URL validation passed', {
430
+ hostname,
431
+ protocol: parsed.protocol,
432
+ isTrusted: isTrustedDomain
433
+ });
434
+ return true;
435
+ }
436
+ catch (error) {
437
+ logger.warn('URL validation error', { error: error instanceof Error ? error.message : 'Unknown error' });
438
+ return false;
439
+ }
440
+ }
441
+ /**
442
+ * Import from base64 URL
443
+ */
444
+ importFromBase64Url(url) {
445
+ try {
446
+ // Limit base64 length to prevent ReDoS attacks (10KB max for base64 encoded data)
447
+ const match = url.match(/#dollhouse-persona=([A-Za-z0-9+/=]{1,10000})$/);
448
+ if (!match) {
449
+ throw new Error('Invalid share URL format');
450
+ }
451
+ const base64 = match[1];
452
+ const json = Buffer.from(base64, 'base64').toString('utf-8');
453
+ const data = JSON.parse(json);
454
+ // Check expiry
455
+ if (data.expiresAt && new Date(data.expiresAt) < new Date()) {
456
+ return {
457
+ success: false,
458
+ message: 'This share link has expired'
459
+ };
460
+ }
461
+ return {
462
+ success: true,
463
+ data,
464
+ message: 'Successfully decoded persona data'
465
+ };
466
+ }
467
+ catch (error) {
468
+ return {
469
+ success: false,
470
+ message: `Failed to decode share URL: ${error instanceof Error ? error.message : String(error)}`
471
+ };
472
+ }
473
+ }
474
+ /**
475
+ * Extract Gist ID from GitHub URL
476
+ */
477
+ extractGistId(url) {
478
+ const match = url.match(/gist\.github\.com\/[^\/]+\/([a-f0-9]+)/);
479
+ return match ? match[1] : null;
480
+ }
481
+ /**
482
+ * Format share success message
483
+ */
484
+ formatShareSuccess(url, expiresAt) {
485
+ const expiryDate = new Date(expiresAt);
486
+ const daysUntilExpiry = Math.ceil((expiryDate.getTime() - Date.now()) / (24 * 60 * 60 * 1000));
487
+ return `✅ Successfully created share link!
488
+
489
+ 🔗 Share URL:
490
+ ${url}
491
+
492
+ ⏱️ Expires: ${expiryDate.toLocaleDateString()} (${daysUntilExpiry} days)
493
+
494
+ 📋 To share this persona:
495
+ 1. Copy the URL above
496
+ 2. Share it with others
497
+ 3. They can import using: import_from_url "${url}"
498
+
499
+ 🔒 Privacy: This link is private and will expire automatically.`;
500
+ }
501
+ }
502
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVNoYXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wZXJzb25hL2V4cG9ydC1pbXBvcnQvUGVyc29uYVNoYXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sc0JBQXNCLENBQUM7QUFFeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBVTFELE1BQU0sT0FBTyxhQUFhO0lBS2Q7SUFDQTtJQUxGLFFBQVEsQ0FBa0I7SUFDMUIsaUJBQWlCLENBQWM7SUFFdkMsWUFDVSxZQUEwQixFQUMxQixXQUEwQjtRQUQxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUVsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpELGtFQUFrRTtRQUNsRSw4REFBOEQ7UUFDOUQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksQ0FBQztRQUM3RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUM7WUFDdkMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsc0JBQXNCO1lBQzdELFFBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTO1lBQ25DLFVBQVUsRUFBRSxJQUFJLENBQUMsb0NBQW9DO1NBQ3RELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJ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QUMsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNLLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxTQUFpQjtRQUN2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUUvRixPQUFPOzs7RUFHVCxHQUFHOztjQUVTLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLGVBQWU7Ozs7OzZDQUtwQixHQUFHOztnRUFFZ0IsQ0FBQztJQUMvRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlcnNvbmEgc2hhcmluZyBmdW5jdGlvbmFsaXR5IHZpYSBVUkxzXG4gKi9cblxuaW1wb3J0IHsgUGVyc29uYSB9IGZyb20gJy4uLy4uL3R5cGVzL3BlcnNvbmEuanMnO1xuaW1wb3J0IHsgUGVyc29uYUV4cG9ydGVyLCBFeHBvcnRlZFBlcnNvbmEgfSBmcm9tICcuL1BlcnNvbmFFeHBvcnRlci5qcyc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuLi8uLi9jb2xsZWN0aW9uL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBUb2tlbk1hbmFnZXIgfSBmcm9tICcuLi8uLi9zZWN1cml0eS90b2tlbk1hbmFnZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgUmF0ZUxpbWl0ZXIgfSBmcm9tICcuLi8uLi91cGRhdGUvUmF0ZUxpbWl0ZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNoYXJlUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgdXJsPzogc3RyaW5nO1xuICBnaXN0SWQ/OiBzdHJpbmc7XG4gIGV4cGlyZXNBdD86IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUGVyc29uYVNoYXJlciB7XG4gIHByaXZhdGUgZXhwb3J0ZXI6IFBlcnNvbmFFeHBvcnRlcjtcbiAgcHJpdmF0ZSBnaXRodWJSYXRlTGltaXRlcjogUmF0ZUxpbWl0ZXI7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50LFxuICAgIHByaXZhdGUgY3VycmVudFVzZXI6IHN0cmluZyB8IG51bGxcbiAgKSB7XG4gICAgdGhpcy5leHBvcnRlciA9IG5ldyBQZXJzb25hRXhwb3J0ZXIoY3VycmVudFVzZXIpO1xuICAgIFxuICAgIC8vIEdpdEh1YiBBUEkgcmF0ZSBsaW1pdDogNjAgcmVxdWVzdHMgcGVyIGhvdXIgZm9yIHVuYXV0aGVudGljYXRlZFxuICAgIC8vIDUwMDAgcGVyIGhvdXIgZm9yIGF1dGhlbnRpY2F0ZWQgLSB1c2UgVG9rZW5NYW5hZ2VyIHRvIGNoZWNrXG4gICAgY29uc3QgaGFzVmFsaWRUb2tlbiA9IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbigpICE9PSBudWxsO1xuICAgIHRoaXMuZ2l0aHViUmF0ZUxpbWl0ZXIgPSBuZXcgUmF0ZUxpbWl0ZXIoe1xuICAgICAgbWF4UmVxdWVzdHM6IGhhc1ZhbGlkVG9rZW4gPyAxMDAgOiAzMCwgLy8gQ29uc2VydmF0aXZlIGxpbWl0c1xuICAgICAgd2luZG93TXM6IDYwICogNjAgKiAxMDAwLCAvLyAxIGhvdXJcbiAgICAgIG1pbkRlbGF5TXM6IDEwMDAgLy8gTWluaW11bSAxIHNlY29uZCBiZXR3ZWVuIHJlcXVlc3RzXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmUgYSBwZXJzb25hIHZpYSBHaXRIdWIgR2lzdFxuICAgKi9cbiAgYXN5bmMgc2hhcmVQZXJzb25hKHBlcnNvbmE6IFBlcnNvbmEsIGV4cGlyeURheXM6IG51bWJlciA9IDcpOiBQcm9taXNlPFNoYXJlUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIGdpc3QgcGVybWlzc2lvbnMgaWYgdG9rZW4gaXMgYXZhaWxhYmxlXG4gICAgICBjb25zdCB0b2tlbiA9IFRva2VuTWFuYWdlci5nZXRHaXRIdWJUb2tlbigpO1xuICAgICAgbGV0IGhhc1ZhbGlkVG9rZW4gPSBmYWxzZTtcbiAgICAgIFxuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGF3YWl0IFRva2VuTWFuYWdlci5lbnN1cmVUb2tlblBlcm1pc3Npb25zKCdnaXN0Jyk7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gVG9rZW5NYW5hZ2VyLmNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UodmFsaWRhdGlvbi5lcnJvciB8fCAnVW5rbm93biB2YWxpZGF0aW9uIGVycm9yJywgdG9rZW4pO1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ0dpdEh1YiB0b2tlbiBsYWNrcyBnaXN0IHBlcm1pc3Npb25zLCBmYWxsaW5nIGJhY2sgdG8gYmFzZTY0IFVSTCcsIHsgZXJyb3I6IHNhZmVNZXNzYWdlIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgdG8gZmFsbGJhY2sgaW5zdGVhZCBvZiBmYWlsaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhhc1ZhbGlkVG9rZW4gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgcmF0ZSBsaW1pdGluZyBvciBvdGhlciBzZWN1cml0eSBlcnJvcnMgZ3JhY2VmdWxseVxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ1JBVEVfTElNSVRfRVhDRUVERUQnKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybignVG9rZW4gdmFsaWRhdGlvbiByYXRlIGxpbWl0ZWQsIGZhbGxpbmcgYmFjayB0byBiYXNlNjQgVVJMJywgeyBcbiAgICAgICAgICAgICAgZXJyb3I6ICdSYXRlIGxpbWl0IGV4Y2VlZGVkIGZvciB0b2tlbiB2YWxpZGF0aW9uJyBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgY29uc3Qgc2FmZU1lc3NhZ2UgPSBUb2tlbk1hbmFnZXIuY3JlYXRlU2FmZUVycm9yTWVzc2FnZShlcnJvci5tZXNzYWdlLCB0b2tlbik7XG4gICAgICAgICAgICBsb2dnZXIud2FybignVG9rZW4gdmFsaWRhdGlvbiBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBiYXNlNjQgVVJMJywgeyBlcnJvcjogc2FmZU1lc3NhZ2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIENvbnRpbnVlIHRvIGZhbGxiYWNrIGluc3RlYWQgb2YgZmFpbGluZ1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEV4cG9ydCBwZXJzb25hIHRvIHN0cnVjdHVyZWQgZm9ybWF0XG4gICAgICBjb25zdCBleHBvcnREYXRhID0gdGhpcy5leHBvcnRlci5leHBvcnRQZXJzb25hKHBlcnNvbmEpO1xuICAgICAgXG4gICAgICAvLyBBZGQgc2hhcmluZyBtZXRhZGF0YVxuICAgICAgY29uc3Qgc2hhcmVEYXRhID0ge1xuICAgICAgICAuLi5leHBvcnREYXRhLFxuICAgICAgICBzaGFyZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBzaGFyZWRCeTogdGhpcy5jdXJyZW50VXNlciB8fCAnYW5vbnltb3VzJyxcbiAgICAgICAgZXhwaXJlc0F0OiBuZXcgRGF0ZShEYXRlLm5vdygpICsgZXhwaXJ5RGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHNoYXJlVmVyc2lvbjogJzEuMC4wJ1xuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIEdpdEh1YiBHaXN0IGlmIHRva2VuIGhhcyBwcm9wZXIgcGVybWlzc2lvbnNcbiAgICAgIGlmIChoYXNWYWxpZFRva2VuKSB7XG4gICAgICAgIGNvbnN0IGdpc3RSZXN1bHQgPSBhd2FpdCB0aGlzLmNyZWF0ZUdpc3QocGVyc29uYS5tZXRhZGF0YS5uYW1lLCBzaGFyZURhdGEpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGdpc3RSZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiBnaXN0UmVzdWx0LnVybCEsXG4gICAgICAgICAgICBnaXN0SWQ6IGdpc3RSZXN1bHQuZ2lzdElkLFxuICAgICAgICAgICAgZXhwaXJlc0F0OiBzaGFyZURhdGEuZXhwaXJlc0F0LFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5mb3JtYXRTaGFyZVN1Y2Nlc3MoZ2lzdFJlc3VsdC51cmwhLCBzaGFyZURhdGEuZXhwaXJlc0F0KVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRmFsbGJhY2sgdG8gYmFzZTY0IFVSTCBpZiBHaXN0IGZhaWxzIG9yIG5vIHRva2VuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVCYXNlNjRVcmwoc2hhcmVEYXRhKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBjb25zdCBzYWZlTWVzc2FnZSA9IFRva2VuTWFuYWdlci5jcmVhdGVTYWZlRXJyb3JNZXNzYWdlKGVycm9yTWVzc2FnZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1NoYXJlIGVycm9yJywgeyBlcnJvcjogc2FmZU1lc3NhZ2UgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHNoYXJlIHBlcnNvbmE6ICR7c2FmZU1lc3NhZ2V9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgcGVyc29uYSBmcm9tIGEgc2hhcmUgVVJMXG4gICAqL1xuICBhc3luYyBpbXBvcnRGcm9tVXJsKHVybDogc3RyaW5nKTogUHJvbWlzZTx7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiBhbnk7IG1lc3NhZ2U6IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFZhbGlkYXRlIFVSTCBmaXJzdFxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlU2hhcmVVcmwodXJsKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIG1lc3NhZ2U6ICdJbnZhbGlkIG9yIHVuc2FmZSBVUkwgcHJvdmlkZWQnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBpdCdzIGEgR2l0SHViIEdpc3QgVVJMXG4gICAgICBjb25zdCBnaXN0SWQgPSB0aGlzLmV4dHJhY3RHaXN0SWQodXJsKTtcbiAgICAgIGlmIChnaXN0SWQpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW1wb3J0RnJvbUdpc3QoZ2lzdElkKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgaXQncyBhIGJhc2U2NCBVUkxcbiAgICAgIGlmICh1cmwuaW5jbHVkZXMoJyNkb2xsaG91c2UtcGVyc29uYT0nKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRGcm9tQmFzZTY0VXJsKHVybCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIFVSTCBmb3Igc2VjdXJpdHlcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZVNoYXJlVXJsKHVybCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG9yIHBvdGVudGlhbGx5IG1hbGljaW91cyBVUkwnKTtcbiAgICAgIH1cblxuICAgICAgLy8gVHJ5IGRpcmVjdCBmZXRjaCB3aXRoIHRpbWVvdXRcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IGNvbnRyb2xsZXIuYWJvcnQoKSwgNTAwMCk7IC8vIDUgc2Vjb25kIHRpbWVvdXRcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdVc2VyLUFnZW50JzogJ0RvbGxob3VzZU1DUC8xLjAnLFxuICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVmFsaWRhdGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgaWYgKCFjb250ZW50VHlwZSB8fCAhY29udGVudFR5cGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJlc3BvbnNlIHR5cGU6IGV4cGVjdGVkIEpTT04nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIHJlc3BvbnNlIHNpemUgdG8gcHJldmVudCBtZW1vcnkgZXhoYXVzdGlvblxuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJyk7XG4gICAgICAgIGNvbnN0IG1heFNpemUgPSA1ICogMTAyNCAqIDEwMjQ7IC8vIDVNQiBtYXhcbiAgICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCkgPiBtYXhTaXplKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNwb25zZSB0b28gbGFyZ2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIG1lc3NhZ2U6ICdTdWNjZXNzZnVsbHkgcmV0cmlldmVkIHBlcnNvbmEgZGF0YSdcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignSW1wb3J0IGZyb20gVVJMIGVycm9yJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gaW1wb3J0IGZyb20gVVJMOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBHaXRIdWIgR2lzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVHaXN0KHBlcnNvbmFOYW1lOiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyB1cmw/OiBzdHJpbmc7IGdpc3RJZD86IHN0cmluZyB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBUb2tlbk1hbmFnZXIgZm9yIHNlY3VyZSB0b2tlbiBoYW5kbGluZ1xuICAgICAgY29uc3QgdG9rZW4gPSBUb2tlbk1hbmFnZXIuZ2V0R2l0SHViVG9rZW4oKTtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ05vIHZhbGlkIEdpdEh1YiB0b2tlbiBhdmFpbGFibGUgZm9yIEdpc3QgY3JlYXRpb24nKTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgcmF0ZSBsaW1pdFxuICAgICAgY29uc3QgcmF0ZUxpbWl0U3RhdHVzID0gdGhpcy5naXRodWJSYXRlTGltaXRlci5jaGVja0xpbWl0KCk7XG4gICAgICBpZiAoIXJhdGVMaW1pdFN0YXR1cy5hbGxvd2VkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQuIFJldHJ5IGFmdGVyICR7cmF0ZUxpbWl0U3RhdHVzLnJldHJ5QWZ0ZXJNc31tc2ApO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiBmYWxzZSB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDEwMDAwKTsgLy8gMTAgc2Vjb25kIHRpbWVvdXRcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9naXN0cycsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGBEb2xsaG91c2VNQ1AgUGVyc29uYTogJHtwZXJzb25hTmFtZX1gLFxuICAgICAgICAgIHB1YmxpYzogZmFsc2UsIC8vIFByaXZhdGUgZ2lzdCBmb3Igc2VjdXJpdHlcbiAgICAgICAgICBmaWxlczoge1xuICAgICAgICAgICAgJ3BlcnNvbmEuanNvbic6IHtcbiAgICAgICAgICAgICAgY29udGVudDogSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgR2l0SHViIEFQSSBlcnJvcjogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBDb250ZW50LVR5cGUgZm9yIEdpdEh1YiBBUEkgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIGlmICghY29udGVudFR5cGUgfHwgIWNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBHaXRIdWIgQVBJIHJlc3BvbnNlIHR5cGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdpc3QgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBDb25zdW1lIHRoZSByYXRlIGxpbWl0IHRva2VuIGFmdGVyIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICB0aGlzLmdpdGh1YlJhdGVMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIHVybDogZ2lzdC5odG1sX3VybCxcbiAgICAgICAgICBnaXN0SWQ6IGdpc3QuaWRcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgIGNvbnN0IHNhZmVNZXNzYWdlID0gVG9rZW5NYW5hZ2VyLmNyZWF0ZVNhZmVFcnJvck1lc3NhZ2UoZXJyb3JNZXNzYWdlKTtcbiAgICAgIGxvZ2dlci5lcnJvcignR2lzdCBjcmVhdGlvbiBlcnJvcicsIHsgZXJyb3I6IHNhZmVNZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYmFzZTY0IFVSTCAoZmFsbGJhY2spXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUJhc2U2NFVybChkYXRhOiBhbnkpOiBTaGFyZVJlc3VsdCB7XG4gICAgY29uc3QgYmFzZTY0ID0gdGhpcy5leHBvcnRlci50b0Jhc2U2NChkYXRhKTtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9kb2xsaG91c2VtY3AuY29tL2ltcG9ydCNkb2xsaG91c2UtcGVyc29uYT0ke2Jhc2U2NH1gO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgdXJsLFxuICAgICAgZXhwaXJlc0F0OiBkYXRhLmV4cGlyZXNBdCxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZm9ybWF0U2hhcmVTdWNjZXNzKHVybCwgZGF0YS5leHBpcmVzQXQpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSBHaXRIdWIgR2lzdFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbXBvcnRGcm9tR2lzdChnaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8eyBzdWNjZXNzOiBib29sZWFuOyBkYXRhPzogYW55OyBtZXNzYWdlOiBzdHJpbmcgfT4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayByYXRlIGxpbWl0XG4gICAgICBjb25zdCByYXRlTGltaXRTdGF0dXMgPSB0aGlzLmdpdGh1YlJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgICAgIGlmICghcmF0ZUxpbWl0U3RhdHVzLmFsbG93ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHaXRIdWIgQVBJIHJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gaW4gJHtNYXRoLmNlaWwocmF0ZUxpbWl0U3RhdHVzLnJldHJ5QWZ0ZXJNcyEgLyAxMDAwKX0gc2Vjb25kc2ApO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBnaXN0VXJsID0gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ2lzdHMvJHtnaXN0SWR9YDtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRhdGUgVVJMIChzaG91bGQgYWx3YXlzIHBhc3MgZm9yIEdpdEh1YiBBUEkpXG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVTaGFyZVVybChnaXN0VXJsKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgR2l0SHViIEFQSSBVUkwnKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCAxMDAwMCk7IC8vIDEwIHNlY29uZCB0aW1lb3V0IGZvciBBUElcbiAgICAgIFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChnaXN0VXJsLCB7XG4gICAgICAgICAgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNvbicsXG4gICAgICAgICAgICAnVXNlci1BZ2VudCc6ICdEb2xsaG91c2VNQ1AvMS4wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggZ2lzdDogJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWxpZGF0ZSBDb250ZW50LVR5cGUgZm9yIEdpdEh1YiBBUEkgcmVzcG9uc2VcbiAgICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIGlmICghY29udGVudFR5cGUgfHwgIWNvbnRlbnRUeXBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBHaXRIdWIgQVBJIHJlc3BvbnNlIHR5cGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdpc3QgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGNvbnN0IHBlcnNvbmFGaWxlID0gZ2lzdC5maWxlc1sncGVyc29uYS5qc29uJ107XG4gICAgICAgIFxuICAgICAgICBpZiAoIXBlcnNvbmFGaWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBwZXJzb25hIGRhdGEgZm91bmQgaW4gZ2lzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UocGVyc29uYUZpbGUuY29udGVudCk7XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBleHBpcnlcbiAgICAgICAgaWYgKGRhdGEuZXhwaXJlc0F0ICYmIG5ldyBEYXRlKGRhdGEuZXhwaXJlc0F0KSA8IG5ldyBEYXRlKCkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhpcyBzaGFyZSBsaW5rIGhhcyBleHBpcmVkJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb25zdW1lIHRoZSByYXRlIGxpbWl0IHRva2VuIGFmdGVyIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICB0aGlzLmdpdGh1YlJhdGVMaW1pdGVyLmNvbnN1bWVUb2tlbigpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgbWVzc2FnZTogJ1N1Y2Nlc3NmdWxseSByZXRyaWV2ZWQgcGVyc29uYSBmcm9tIEdpdEh1YidcbiAgICAgICAgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignR2lzdCBpbXBvcnQgZXJyb3InLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byBpbXBvcnQgZnJvbSBnaXN0OiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBVUkwgZm9yIHNlY3VyaXR5IChwcmV2ZW50IFNTUkYgYXR0YWNrcylcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVTaGFyZVVybCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICAvLyAxLiBVUkwgbGVuZ3RoIGNoZWNrIHRvIHByZXZlbnQgRG9TXG4gICAgICBpZiAodXJsLmxlbmd0aCA+IDIwNDgpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1VSTCBleGNlZWRzIG1heGltdW0gbGVuZ3RoJywgeyB1cmxMZW5ndGg6IHVybC5sZW5ndGggfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgICAgXG4gICAgICAvLyAyLiBQcm90b2NvbCBjaGVjayAtIG9ubHkgYWxsb3cgaHR0cC9odHRwc1xuICAgICAgaWYgKCFbJ2h0dHBzOicsICdodHRwOiddLmluY2x1ZGVzKHBhcnNlZC5wcm90b2NvbCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0ludmFsaWQgcHJvdG9jb2wgaW4gVVJMJywgeyBwcm90b2NvbDogcGFyc2VkLnByb3RvY29sIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIDMuIFBvcnQgcmVzdHJpY3Rpb25zIC0gYmxvY2sgbm9uLXN0YW5kYXJkIHBvcnRzIHRoYXQgY291bGQgYmUgaW50ZXJuYWwgc2VydmljZXNcbiAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZWQucG9ydCB8fCAocGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JyA/ICc0NDMnIDogJzgwJyk7XG4gICAgICBjb25zdCBhbGxvd2VkUG9ydHMgPSBbJzgwJywgJzQ0MycsICc4MDgwJywgJzg0NDMnXTtcbiAgICAgIGlmICghYWxsb3dlZFBvcnRzLmluY2x1ZGVzKHBvcnQpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdCbG9ja2VkIG5vbi1zdGFuZGFyZCBwb3J0JywgeyBwb3J0IH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIDQuIEhvc3RuYW1lIHZhbGlkYXRpb25cbiAgICAgIGNvbnN0IGhvc3RuYW1lID0gcGFyc2VkLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBcbiAgICAgIC8vIEJsb2NrIHZhcmlvdXMgbG9jYWxob3N0IHJlcHJlc2VudGF0aW9uc1xuICAgICAgY29uc3QgYmxvY2tlZEhvc3RuYW1lcyA9IFtcbiAgICAgICAgJ2xvY2FsaG9zdCcsIFxuICAgICAgICAnbG9jYWxob3N0LmxvY2FsZG9tYWluJyxcbiAgICAgICAgJzAuMC4wLjAnLFxuICAgICAgICAnMCcsXG4gICAgICAgICcweDAnLFxuICAgICAgICAnMHgwMDAwMDAwMCcsXG4gICAgICAgICdbOjoxXScsXG4gICAgICAgICdbOjpmZmZmOjEyNy4wLjAuMV0nLFxuICAgICAgICAnWzAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMDowMDAwOjAwMDA6MDAwMV0nXG4gICAgICBdO1xuICAgICAgXG4gICAgICBpZiAoYmxvY2tlZEhvc3RuYW1lcy5pbmNsdWRlcyhob3N0bmFtZSkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Jsb2NrZWQgbG9jYWxob3N0IGhvc3RuYW1lJywgeyBob3N0bmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCbG9jayBwcml2YXRlIElQIHJhbmdlcyB3aXRoIGNvbXByZWhlbnNpdmUgcGF0dGVybnNcbiAgICAgIGNvbnN0IHByaXZhdGVJcFBhdHRlcm5zID0gW1xuICAgICAgICAvXjEyN1xcLi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9vcGJhY2tcbiAgICAgICAgL14xMFxcLi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaXZhdGUgY2xhc3MgQVxuICAgICAgICAvXjE5MlxcLjE2OFxcLi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByaXZhdGUgY2xhc3MgQ1xuICAgICAgICAvXjE3MlxcLigxWzYtOV18MlswLTldfDNbMC0xXSlcXC4vLCAgICAgICAgICAvLyBQcml2YXRlIGNsYXNzIEJcbiAgICAgICAgL14xNjlcXC4yNTRcXC4vLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMaW5rLWxvY2FsXG4gICAgICAgIC9eZmMwMDovaSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElQdjYgcHJpdmF0ZVxuICAgICAgICAvXmZlODA6L2ksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJUHY2IGxpbmstbG9jYWxcbiAgICAgICAgL146OjEkLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSVB2NiBsb29wYmFja1xuICAgICAgICAvXjo6ZmZmZjowPzo/MD86PzA/Oj8wPyQvaSwgICAgICAgICAgICAgICAgLy8gSVB2NiBtYXBwZWQgSVB2NFxuICAgICAgICAvXjEwMFxcLjZbNC05XVxcLi8sICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fycmllci1ncmFkZSBOQVRcbiAgICAgICAgL14xMDBcXC5bNy05XVswLTldXFwuLywgICAgICAgICAgICAgICAgICAgICAgIC8vIENhcnJpZXItZ3JhZGUgTkFUXG4gICAgICAgIC9eMTAwXFwuMVswLTJdWzAtOV1cXC4vLCAgICAgICAgICAgICAgICAgICAgICAvLyBDYXJyaWVyLWdyYWRlIE5BVFxuICAgICAgICAvXjBcXC4vLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZWRcbiAgICAgICAgL14yNTVcXC4yNTVcXC4yNTVcXC4yNTUkLyAgICAgICAgICAgICAgICAgICAgICAvLyBCcm9hZGNhc3RcbiAgICAgIF07XG4gICAgICBcbiAgICAgIGlmIChwcml2YXRlSXBQYXR0ZXJucy5zb21lKHBhdHRlcm4gPT4gcGF0dGVybi50ZXN0KGhvc3RuYW1lKSkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0Jsb2NrZWQgcHJpdmF0ZSBJUCByYW5nZScsIHsgaG9zdG5hbWUgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gQmxvY2sgY2xvdWQgbWV0YWRhdGEgZW5kcG9pbnRzXG4gICAgICBjb25zdCBtZXRhZGF0YUVuZHBvaW50cyA9IFtcbiAgICAgICAgJzE2OS4yNTQuMTY5LjI1NCcsICAgICAvLyBBV1MvR0NQL0F6dXJlXG4gICAgICAgICdtZXRhZGF0YS5nb29nbGUuaW50ZXJuYWwnLFxuICAgICAgICAnbWV0YWRhdGEuYXp1cmUuY29tJyxcbiAgICAgICAgJzEwMC4xMDAuMTAwLjIwMCcgICAgICAvLyBBbGliYWJhIENsb3VkXG4gICAgICBdO1xuICAgICAgXG4gICAgICBpZiAobWV0YWRhdGFFbmRwb2ludHMuaW5jbHVkZXMoaG9zdG5hbWUpKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdCbG9ja2VkIGNsb3VkIG1ldGFkYXRhIGVuZHBvaW50JywgeyBob3N0bmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCbG9jayBudW1lcmljIElQIHJlcHJlc2VudGF0aW9ucyB0aGF0IGNvdWxkIGJ5cGFzcyBjaGVja3NcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgICAvLyBDb252ZXJ0IGRlY2ltYWwgdG8gSVAgYW5kIGNoZWNrXG4gICAgICAgIGNvbnN0IG51bSA9IHBhcnNlSW50KGhvc3RuYW1lLCAxMCk7XG4gICAgICAgIGlmIChudW0gPD0gMHhGRkZGRkZGRikge1xuICAgICAgICAgIGNvbnN0IGlwID0gYCR7KG51bSA+Pj4gMjQpICYgMHhGRn0uJHsobnVtID4+PiAxNikgJiAweEZGfS4keyhudW0gPj4+IDgpICYgMHhGRn0uJHtudW0gJiAweEZGfWA7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0Jsb2NrZWQgbnVtZXJpYyBJUCByZXByZXNlbnRhdGlvbicsIHsgaG9zdG5hbWUsIHJlc29sdmVkSXA6IGlwIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBCbG9jayBoZXggSVAgcmVwcmVzZW50YXRpb25zXG4gICAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgICBsb2dnZXIud2FybignQmxvY2tlZCBoZXggSVAgcmVwcmVzZW50YXRpb24nLCB7IGhvc3RuYW1lIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFZhbGlkYXRlIGRvbWFpbiBmb3JtYXQgKGJhc2ljIGNoZWNrKVxuICAgICAgLy8gQWxsb3cgR2l0SHViIGRvbWFpbnMgYW5kIGNvbW1vbiBzaGFyZSBwbGF0Zm9ybXNcbiAgICAgIGNvbnN0IHRydXN0ZWREb21haW5zID0gW1xuICAgICAgICAnZ2l0aHViLmNvbScsXG4gICAgICAgICdnaXN0LmdpdGh1Yi5jb20nLCBcbiAgICAgICAgJ2FwaS5naXRodWIuY29tJyxcbiAgICAgICAgJ3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20nLFxuICAgICAgICAnZG9sbGhvdXNlbWNwLmNvbSdcbiAgICAgIF07XG4gICAgICBcbiAgICAgIC8vIENoZWNrIGlmIGl0J3MgYSB0cnVzdGVkIGRvbWFpblxuICAgICAgY29uc3QgaXNUcnVzdGVkRG9tYWluID0gdHJ1c3RlZERvbWFpbnMuc29tZShkb21haW4gPT4gXG4gICAgICAgIGhvc3RuYW1lID09PSBkb21haW4gfHwgaG9zdG5hbWUuZW5kc1dpdGgoYC4ke2RvbWFpbn1gKVxuICAgICAgKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1RydXN0ZWREb21haW4pIHtcbiAgICAgICAgLy8gRm9yIG5vbi10cnVzdGVkIGRvbWFpbnMsIGFwcGx5IHN0cmljdGVyIHZhbGlkYXRpb25cbiAgICAgICAgLy8gTXVzdCBiZSBhIHZhbGlkIGRvbWFpbiBmb3JtYXQsIG5vdCBqdXN0IGFuIElQXG4gICAgICAgIGNvbnN0IGRvbWFpblBhdHRlcm4gPSAvXihbYS16MC05XSsoLVthLXowLTldKykqXFwuKStbYS16XXsyLH0kL2k7XG4gICAgICAgIGNvbnN0IGlwdjRQYXR0ZXJuID0gL15cXGR7MSwzfVxcLlxcZHsxLDN9XFwuXFxkezEsM31cXC5cXGR7MSwzfSQvO1xuICAgICAgICBjb25zdCBpcHY2UGF0dGVybiA9IC9eXFxbPyhbMC05YS1mXXswLDR9Oil7Miw3fVswLTlhLWZdezAsNH1cXF0/JC9pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlwdjRQYXR0ZXJuLnRlc3QoaG9zdG5hbWUpIHx8IGlwdjZQYXR0ZXJuLnRlc3QoaG9zdG5hbWUpKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0RpcmVjdCBJUCBhY2Nlc3Mgbm90IGFsbG93ZWQgZm9yIHVudHJ1c3RlZCBzb3VyY2VzJywgeyBob3N0bmFtZSB9KTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICghZG9tYWluUGF0dGVybi50ZXN0KGhvc3RuYW1lKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIGRvbWFpbiBmb3JtYXQnLCB7IGhvc3RuYW1lIH0pO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBsb2dnZXIuZGVidWcoJ1VSTCB2YWxpZGF0aW9uIHBhc3NlZCcsIHsgXG4gICAgICAgIGhvc3RuYW1lLCBcbiAgICAgICAgcHJvdG9jb2w6IHBhcnNlZC5wcm90b2NvbCxcbiAgICAgICAgaXNUcnVzdGVkOiBpc1RydXN0ZWREb21haW4gXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdVUkwgdmFsaWRhdGlvbiBlcnJvcicsIHsgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InIH0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgZnJvbSBiYXNlNjQgVVJMXG4gICAqL1xuICBwcml2YXRlIGltcG9ydEZyb21CYXNlNjRVcmwodXJsOiBzdHJpbmcpOiB7IHN1Y2Nlc3M6IGJvb2xlYW47IGRhdGE/OiBhbnk7IG1lc3NhZ2U6IHN0cmluZyB9IHtcbiAgICB0cnkge1xuICAgICAgLy8gTGltaXQgYmFzZTY0IGxlbmd0aCB0byBwcmV2ZW50IFJlRG9TIGF0dGFja3MgKDEwS0IgbWF4IGZvciBiYXNlNjQgZW5jb2RlZCBkYXRhKVxuICAgICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goLyNkb2xsaG91c2UtcGVyc29uYT0oW0EtWmEtejAtOSsvPV17MSwxMDAwMH0pJC8pO1xuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2hhcmUgVVJMIGZvcm1hdCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBiYXNlNjQgPSBtYXRjaFsxXTtcbiAgICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKS50b1N0cmluZygndXRmLTgnKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGpzb24pO1xuXG4gICAgICAvLyBDaGVjayBleHBpcnlcbiAgICAgIGlmIChkYXRhLmV4cGlyZXNBdCAmJiBuZXcgRGF0ZShkYXRhLmV4cGlyZXNBdCkgPCBuZXcgRGF0ZSgpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgbWVzc2FnZTogJ1RoaXMgc2hhcmUgbGluayBoYXMgZXhwaXJlZCdcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgbWVzc2FnZTogJ1N1Y2Nlc3NmdWxseSBkZWNvZGVkIHBlcnNvbmEgZGF0YSdcbiAgICAgIH07XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gZGVjb2RlIHNoYXJlIFVSTDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBHaXN0IElEIGZyb20gR2l0SHViIFVSTFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0R2lzdElkKHVybDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2ggPSB1cmwubWF0Y2goL2dpc3RcXC5naXRodWJcXC5jb21cXC9bXlxcL10rXFwvKFthLWYwLTldKykvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHNoYXJlIHN1Y2Nlc3MgbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRTaGFyZVN1Y2Nlc3ModXJsOiBzdHJpbmcsIGV4cGlyZXNBdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBleHBpcnlEYXRlID0gbmV3IERhdGUoZXhwaXJlc0F0KTtcbiAgICBjb25zdCBkYXlzVW50aWxFeHBpcnkgPSBNYXRoLmNlaWwoKGV4cGlyeURhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAoMjQgKiA2MCAqIDYwICogMTAwMCkpO1xuXG4gICAgcmV0dXJuIGDinIUgU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgc2hhcmUgbGluayFcblxu8J+UlyBTaGFyZSBVUkw6XG4ke3VybH1cblxu4o+x77iPIEV4cGlyZXM6ICR7ZXhwaXJ5RGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX0gKCR7ZGF5c1VudGlsRXhwaXJ5fSBkYXlzKVxuXG7wn5OLIFRvIHNoYXJlIHRoaXMgcGVyc29uYTpcbjEuIENvcHkgdGhlIFVSTCBhYm92ZVxuMi4gU2hhcmUgaXQgd2l0aCBvdGhlcnNcbjMuIFRoZXkgY2FuIGltcG9ydCB1c2luZzogaW1wb3J0X2Zyb21fdXJsIFwiJHt1cmx9XCJcblxu8J+UkiBQcml2YWN5OiBUaGlzIGxpbmsgaXMgcHJpdmF0ZSBhbmQgd2lsbCBleHBpcmUgYXV0b21hdGljYWxseS5gO1xuICB9XG59Il19
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Export all export/import/sharing modules
3
+ */
4
+ export { PersonaExporter } from './PersonaExporter.js';
5
+ export { PersonaImporter } from './PersonaImporter.js';
6
+ export { PersonaSharer } from './PersonaSharer.js';
7
+ export type { ExportedPersona, ExportBundle } from './PersonaExporter.js';
8
+ export type { ImportResult } from './PersonaImporter.js';
9
+ export type { ShareResult } from './PersonaSharer.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/persona/export-import/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Export all export/import/sharing modules
3
+ */
4
+ export { PersonaExporter } from './PersonaExporter.js';
5
+ export { PersonaImporter } from './PersonaImporter.js';
6
+ export { PersonaSharer } from './PersonaSharer.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcGVyc29uYS9leHBvcnQtaW1wb3J0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4cG9ydCBhbGwgZXhwb3J0L2ltcG9ydC9zaGFyaW5nIG1vZHVsZXNcbiAqL1xuXG5leHBvcnQgeyBQZXJzb25hRXhwb3J0ZXIgfSBmcm9tICcuL1BlcnNvbmFFeHBvcnRlci5qcyc7XG5leHBvcnQgeyBQZXJzb25hSW1wb3J0ZXIgfSBmcm9tICcuL1BlcnNvbmFJbXBvcnRlci5qcyc7XG5leHBvcnQgeyBQZXJzb25hU2hhcmVyIH0gZnJvbSAnLi9QZXJzb25hU2hhcmVyLmpzJztcblxuZXhwb3J0IHR5cGUgeyBFeHBvcnRlZFBlcnNvbmEsIEV4cG9ydEJ1bmRsZSB9IGZyb20gJy4vUGVyc29uYUV4cG9ydGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgSW1wb3J0UmVzdWx0IH0gZnJvbSAnLi9QZXJzb25hSW1wb3J0ZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBTaGFyZVJlc3VsdCB9IGZyb20gJy4vUGVyc29uYVNoYXJlci5qcyc7Il19
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Persona module exports
3
+ */
4
+ export * from './PersonaManager.js';
5
+ export * from './PersonaLoader.js';
6
+ export * from './PersonaValidator.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/persona/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Persona module exports
3
+ */
4
+ export * from './PersonaManager.js';
5
+ export * from './PersonaLoader.js';
6
+ export * from './PersonaValidator.js';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcGVyc29uYS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXJzb25hIG1vZHVsZSBleHBvcnRzXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hTWFuYWdlci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL1BlcnNvbmFMb2FkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hVmFsaWRhdG9yLmpzJzsiXX0=