@dollhousemcp/mcp-server 1.4.4 → 1.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (650) hide show
  1. package/dist/generated/version.d.ts +2 -2
  2. package/dist/generated/version.js +3 -3
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +54 -7
  5. package/package.json +1 -1
  6. package/dist/collection/MarketplaceBrowser.d.ts +0 -24
  7. package/dist/collection/MarketplaceBrowser.d.ts.map +0 -1
  8. package/dist/collection/MarketplaceBrowser.js +0 -115
  9. package/dist/collection/MarketplaceSearch.d.ts +0 -18
  10. package/dist/collection/MarketplaceSearch.d.ts.map +0 -1
  11. package/dist/collection/MarketplaceSearch.js +0 -48
  12. package/dist/collection/PersonaInstaller.d.ts +0 -26
  13. package/dist/collection/PersonaInstaller.d.ts.map +0 -1
  14. package/dist/collection/PersonaInstaller.js +0 -103
  15. package/dist/elements/ensembles/Ensemble.d.ts +0 -144
  16. package/dist/elements/ensembles/Ensemble.d.ts.map +0 -1
  17. package/dist/elements/ensembles/Ensemble.js +0 -860
  18. package/dist/elements/ensembles/EnsembleManager.d.ts +0 -85
  19. package/dist/elements/ensembles/EnsembleManager.d.ts.map +0 -1
  20. package/dist/elements/ensembles/EnsembleManager.js +0 -378
  21. package/dist/elements/ensembles/constants.d.ts +0 -73
  22. package/dist/elements/ensembles/constants.d.ts.map +0 -1
  23. package/dist/elements/ensembles/constants.js +0 -92
  24. package/dist/elements/ensembles/index.d.ts +0 -8
  25. package/dist/elements/ensembles/index.d.ts.map +0 -1
  26. package/dist/elements/ensembles/index.js +0 -8
  27. package/dist/elements/ensembles/types.d.ts +0 -92
  28. package/dist/elements/ensembles/types.d.ts.map +0 -1
  29. package/dist/elements/ensembles/types.js +0 -8
  30. package/dist/elements/memories/Memory.d.ts +0 -110
  31. package/dist/elements/memories/Memory.d.ts.map +0 -1
  32. package/dist/elements/memories/Memory.js +0 -470
  33. package/dist/elements/memories/MemoryManager.d.ts +0 -86
  34. package/dist/elements/memories/MemoryManager.d.ts.map +0 -1
  35. package/dist/elements/memories/MemoryManager.js +0 -435
  36. package/dist/elements/memories/constants.d.ts +0 -42
  37. package/dist/elements/memories/constants.d.ts.map +0 -1
  38. package/dist/elements/memories/constants.js +0 -49
  39. package/dist/elements/memories/index.d.ts +0 -6
  40. package/dist/elements/memories/index.d.ts.map +0 -1
  41. package/dist/elements/memories/index.js +0 -6
  42. package/dist/marketplace/GitHubClient.d.ts +0 -22
  43. package/dist/marketplace/GitHubClient.d.ts.map +0 -1
  44. package/dist/marketplace/GitHubClient.js +0 -112
  45. package/dist/marketplace/MarketplaceBrowser.d.ts +0 -24
  46. package/dist/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  47. package/dist/marketplace/MarketplaceBrowser.js +0 -115
  48. package/dist/marketplace/MarketplaceSearch.d.ts +0 -18
  49. package/dist/marketplace/MarketplaceSearch.d.ts.map +0 -1
  50. package/dist/marketplace/MarketplaceSearch.js +0 -48
  51. package/dist/marketplace/PersonaDetails.d.ts +0 -22
  52. package/dist/marketplace/PersonaDetails.d.ts.map +0 -1
  53. package/dist/marketplace/PersonaDetails.js +0 -71
  54. package/dist/marketplace/PersonaInstaller.d.ts +0 -25
  55. package/dist/marketplace/PersonaInstaller.d.ts.map +0 -1
  56. package/dist/marketplace/PersonaInstaller.js +0 -100
  57. package/dist/marketplace/PersonaSubmitter.d.ts +0 -19
  58. package/dist/marketplace/PersonaSubmitter.d.ts.map +0 -1
  59. package/dist/marketplace/PersonaSubmitter.js +0 -57
  60. package/dist/marketplace/index.d.ts +0 -10
  61. package/dist/marketplace/index.d.ts.map +0 -1
  62. package/dist/marketplace/index.js +0 -10
  63. package/dist/server/tools/MarketplaceTools.d.ts +0 -10
  64. package/dist/server/tools/MarketplaceTools.d.ts.map +0 -1
  65. package/dist/server/tools/MarketplaceTools.js +0 -96
  66. package/dist/src/cache/APICache.d.ts +0 -23
  67. package/dist/src/cache/APICache.d.ts.map +0 -1
  68. package/dist/src/cache/APICache.js +0 -42
  69. package/dist/src/cache/index.d.ts +0 -5
  70. package/dist/src/cache/index.d.ts.map +0 -1
  71. package/dist/src/cache/index.js +0 -5
  72. package/dist/src/config/constants.d.ts +0 -25
  73. package/dist/src/config/constants.d.ts.map +0 -1
  74. package/dist/src/config/constants.js +0 -30
  75. package/dist/src/config/index.d.ts +0 -6
  76. package/dist/src/config/index.d.ts.map +0 -1
  77. package/dist/src/config/index.js +0 -6
  78. package/dist/src/config/indicator-config.d.ts +0 -107
  79. package/dist/src/config/indicator-config.d.ts.map +0 -1
  80. package/dist/src/config/indicator-config.js +0 -158
  81. package/dist/src/constants/defaultPersonas.d.ts +0 -10
  82. package/dist/src/constants/defaultPersonas.d.ts.map +0 -1
  83. package/dist/src/constants/defaultPersonas.js +0 -18
  84. package/dist/src/constants/limits.d.ts +0 -10
  85. package/dist/src/constants/limits.d.ts.map +0 -1
  86. package/dist/src/constants/limits.js +0 -13
  87. package/dist/src/errors/SecurityError.d.ts +0 -29
  88. package/dist/src/errors/SecurityError.d.ts.map +0 -1
  89. package/dist/src/errors/SecurityError.js +0 -47
  90. package/dist/src/errors/index.d.ts +0 -2
  91. package/dist/src/errors/index.d.ts.map +0 -1
  92. package/dist/src/errors/index.js +0 -2
  93. package/dist/src/index.barrel.d.ts +0 -21
  94. package/dist/src/index.barrel.d.ts.map +0 -1
  95. package/dist/src/index.barrel.js +0 -31
  96. package/dist/src/index.d.ts +0 -220
  97. package/dist/src/index.d.ts.map +0 -1
  98. package/dist/src/index.js +0 -1559
  99. package/dist/src/marketplace/GitHubClient.d.ts +0 -22
  100. package/dist/src/marketplace/GitHubClient.d.ts.map +0 -1
  101. package/dist/src/marketplace/GitHubClient.js +0 -112
  102. package/dist/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  103. package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  104. package/dist/src/marketplace/MarketplaceBrowser.js +0 -45
  105. package/dist/src/marketplace/MarketplaceSearch.d.ts +0 -18
  106. package/dist/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  107. package/dist/src/marketplace/MarketplaceSearch.js +0 -36
  108. package/dist/src/marketplace/PersonaDetails.d.ts +0 -22
  109. package/dist/src/marketplace/PersonaDetails.d.ts.map +0 -1
  110. package/dist/src/marketplace/PersonaDetails.js +0 -71
  111. package/dist/src/marketplace/PersonaInstaller.d.ts +0 -25
  112. package/dist/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  113. package/dist/src/marketplace/PersonaInstaller.js +0 -100
  114. package/dist/src/marketplace/PersonaSubmitter.d.ts +0 -19
  115. package/dist/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  116. package/dist/src/marketplace/PersonaSubmitter.js +0 -57
  117. package/dist/src/marketplace/index.d.ts +0 -10
  118. package/dist/src/marketplace/index.d.ts.map +0 -1
  119. package/dist/src/marketplace/index.js +0 -10
  120. package/dist/src/persona/PersonaLoader.d.ts +0 -33
  121. package/dist/src/persona/PersonaLoader.d.ts.map +0 -1
  122. package/dist/src/persona/PersonaLoader.js +0 -139
  123. package/dist/src/persona/PersonaManager.d.ts +0 -112
  124. package/dist/src/persona/PersonaManager.d.ts.map +0 -1
  125. package/dist/src/persona/PersonaManager.js +0 -341
  126. package/dist/src/persona/PersonaValidator.d.ts +0 -33
  127. package/dist/src/persona/PersonaValidator.d.ts.map +0 -1
  128. package/dist/src/persona/PersonaValidator.js +0 -157
  129. package/dist/src/persona/export-import/PersonaExporter.d.ts +0 -43
  130. package/dist/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  131. package/dist/src/persona/export-import/PersonaExporter.js +0 -99
  132. package/dist/src/persona/export-import/PersonaImporter.d.ts +0 -65
  133. package/dist/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  134. package/dist/src/persona/export-import/PersonaImporter.js +0 -313
  135. package/dist/src/persona/export-import/PersonaSharer.d.ts +0 -60
  136. package/dist/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  137. package/dist/src/persona/export-import/PersonaSharer.js +0 -363
  138. package/dist/src/persona/export-import/index.d.ts +0 -10
  139. package/dist/src/persona/export-import/index.d.ts.map +0 -1
  140. package/dist/src/persona/export-import/index.js +0 -7
  141. package/dist/src/persona/index.d.ts +0 -7
  142. package/dist/src/persona/index.d.ts.map +0 -1
  143. package/dist/src/persona/index.js +0 -7
  144. package/dist/src/security/InputValidator.d.ts +0 -69
  145. package/dist/src/security/InputValidator.d.ts.map +0 -1
  146. package/dist/src/security/InputValidator.js +0 -381
  147. package/dist/src/security/commandValidator.d.ts +0 -7
  148. package/dist/src/security/commandValidator.d.ts.map +0 -1
  149. package/dist/src/security/commandValidator.js +0 -77
  150. package/dist/src/security/constants.d.ts +0 -21
  151. package/dist/src/security/constants.d.ts.map +0 -1
  152. package/dist/src/security/constants.js +0 -23
  153. package/dist/src/security/contentValidator.d.ts +0 -47
  154. package/dist/src/security/contentValidator.d.ts.map +0 -1
  155. package/dist/src/security/contentValidator.js +0 -188
  156. package/dist/src/security/fileLockManager.d.ts +0 -70
  157. package/dist/src/security/fileLockManager.d.ts.map +0 -1
  158. package/dist/src/security/fileLockManager.js +0 -187
  159. package/dist/src/security/index.d.ts +0 -12
  160. package/dist/src/security/index.d.ts.map +0 -1
  161. package/dist/src/security/index.js +0 -14
  162. package/dist/src/security/pathValidator.d.ts +0 -9
  163. package/dist/src/security/pathValidator.d.ts.map +0 -1
  164. package/dist/src/security/pathValidator.js +0 -97
  165. package/dist/src/security/secureYamlParser.d.ts +0 -46
  166. package/dist/src/security/secureYamlParser.d.ts.map +0 -1
  167. package/dist/src/security/secureYamlParser.js +0 -203
  168. package/dist/src/security/securityMonitor.d.ts +0 -58
  169. package/dist/src/security/securityMonitor.d.ts.map +0 -1
  170. package/dist/src/security/securityMonitor.js +0 -108
  171. package/dist/src/security/tokenManager.d.ts +0 -59
  172. package/dist/src/security/tokenManager.d.ts.map +0 -1
  173. package/dist/src/security/tokenManager.js +0 -216
  174. package/dist/src/security/yamlValidator.d.ts +0 -20
  175. package/dist/src/security/yamlValidator.d.ts.map +0 -1
  176. package/dist/src/security/yamlValidator.js +0 -138
  177. package/dist/src/server/ServerSetup.d.ts +0 -31
  178. package/dist/src/server/ServerSetup.d.ts.map +0 -1
  179. package/dist/src/server/ServerSetup.js +0 -79
  180. package/dist/src/server/index.d.ts +0 -7
  181. package/dist/src/server/index.d.ts.map +0 -1
  182. package/dist/src/server/index.js +0 -7
  183. package/dist/src/server/tools/ConfigTools.d.ts +0 -10
  184. package/dist/src/server/tools/ConfigTools.d.ts.map +0 -1
  185. package/dist/src/server/tools/ConfigTools.js +0 -63
  186. package/dist/src/server/tools/MarketplaceTools.d.ts +0 -10
  187. package/dist/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  188. package/dist/src/server/tools/MarketplaceTools.js +0 -92
  189. package/dist/src/server/tools/PersonaTools.d.ts +0 -10
  190. package/dist/src/server/tools/PersonaTools.d.ts.map +0 -1
  191. package/dist/src/server/tools/PersonaTools.js +0 -257
  192. package/dist/src/server/tools/ToolRegistry.d.ts +0 -37
  193. package/dist/src/server/tools/ToolRegistry.d.ts.map +0 -1
  194. package/dist/src/server/tools/ToolRegistry.js +0 -40
  195. package/dist/src/server/tools/UpdateTools.d.ts +0 -10
  196. package/dist/src/server/tools/UpdateTools.d.ts.map +0 -1
  197. package/dist/src/server/tools/UpdateTools.js +0 -64
  198. package/dist/src/server/tools/UserTools.d.ts +0 -10
  199. package/dist/src/server/tools/UserTools.d.ts.map +0 -1
  200. package/dist/src/server/tools/UserTools.js +0 -51
  201. package/dist/src/server/tools/index.d.ts +0 -10
  202. package/dist/src/server/tools/index.d.ts.map +0 -1
  203. package/dist/src/server/tools/index.js +0 -10
  204. package/dist/src/server/types.d.ts +0 -34
  205. package/dist/src/server/types.d.ts.map +0 -1
  206. package/dist/src/server/types.js +0 -5
  207. package/dist/src/tools/debug.d.ts +0 -20
  208. package/dist/src/tools/debug.d.ts.map +0 -1
  209. package/dist/src/tools/debug.js +0 -37
  210. package/dist/src/types/cache.d.ts +0 -8
  211. package/dist/src/types/cache.d.ts.map +0 -1
  212. package/dist/src/types/cache.js +0 -5
  213. package/dist/src/types/index.d.ts +0 -8
  214. package/dist/src/types/index.d.ts.map +0 -1
  215. package/dist/src/types/index.js +0 -8
  216. package/dist/src/types/marketplace.d.ts +0 -23
  217. package/dist/src/types/marketplace.d.ts.map +0 -1
  218. package/dist/src/types/marketplace.js +0 -5
  219. package/dist/src/types/mcp.d.ts +0 -161
  220. package/dist/src/types/mcp.d.ts.map +0 -1
  221. package/dist/src/types/mcp.js +0 -75
  222. package/dist/src/types/persona.d.ts +0 -30
  223. package/dist/src/types/persona.d.ts.map +0 -1
  224. package/dist/src/types/persona.js +0 -5
  225. package/dist/src/update/BackupManager.d.ts +0 -46
  226. package/dist/src/update/BackupManager.d.ts.map +0 -1
  227. package/dist/src/update/BackupManager.js +0 -261
  228. package/dist/src/update/DependencyChecker.d.ts +0 -41
  229. package/dist/src/update/DependencyChecker.d.ts.map +0 -1
  230. package/dist/src/update/DependencyChecker.js +0 -132
  231. package/dist/src/update/RateLimiter.d.ts +0 -80
  232. package/dist/src/update/RateLimiter.d.ts.map +0 -1
  233. package/dist/src/update/RateLimiter.js +0 -172
  234. package/dist/src/update/SignatureVerifier.d.ts +0 -71
  235. package/dist/src/update/SignatureVerifier.d.ts.map +0 -1
  236. package/dist/src/update/SignatureVerifier.js +0 -214
  237. package/dist/src/update/UpdateChecker.d.ts +0 -127
  238. package/dist/src/update/UpdateChecker.d.ts.map +0 -1
  239. package/dist/src/update/UpdateChecker.js +0 -460
  240. package/dist/src/update/UpdateManager.d.ts +0 -41
  241. package/dist/src/update/UpdateManager.d.ts.map +0 -1
  242. package/dist/src/update/UpdateManager.js +0 -260
  243. package/dist/src/update/VersionManager.d.ts +0 -31
  244. package/dist/src/update/VersionManager.d.ts.map +0 -1
  245. package/dist/src/update/VersionManager.js +0 -134
  246. package/dist/src/update/index.d.ts +0 -9
  247. package/dist/src/update/index.d.ts.map +0 -1
  248. package/dist/src/update/index.js +0 -9
  249. package/dist/src/utils/filesystem.d.ts +0 -32
  250. package/dist/src/utils/filesystem.d.ts.map +0 -1
  251. package/dist/src/utils/filesystem.js +0 -73
  252. package/dist/src/utils/git.d.ts +0 -32
  253. package/dist/src/utils/git.d.ts.map +0 -1
  254. package/dist/src/utils/git.js +0 -65
  255. package/dist/src/utils/index.d.ts +0 -7
  256. package/dist/src/utils/index.d.ts.map +0 -1
  257. package/dist/src/utils/index.js +0 -7
  258. package/dist/src/utils/logger.d.ts +0 -45
  259. package/dist/src/utils/logger.d.ts.map +0 -1
  260. package/dist/src/utils/logger.js +0 -91
  261. package/dist/src/utils/version.d.ts +0 -25
  262. package/dist/src/utils/version.d.ts.map +0 -1
  263. package/dist/src/utils/version.js +0 -97
  264. package/dist/test/src/cache/APICache.d.ts +0 -23
  265. package/dist/test/src/cache/APICache.d.ts.map +0 -1
  266. package/dist/test/src/cache/APICache.js +0 -42
  267. package/dist/test/src/cache/index.d.ts +0 -5
  268. package/dist/test/src/cache/index.d.ts.map +0 -1
  269. package/dist/test/src/cache/index.js +0 -5
  270. package/dist/test/src/collection/CollectionBrowser.d.ts +0 -24
  271. package/dist/test/src/collection/CollectionBrowser.d.ts.map +0 -1
  272. package/dist/test/src/collection/CollectionBrowser.js +0 -115
  273. package/dist/test/src/collection/CollectionSearch.d.ts +0 -18
  274. package/dist/test/src/collection/CollectionSearch.d.ts.map +0 -1
  275. package/dist/test/src/collection/CollectionSearch.js +0 -48
  276. package/dist/test/src/collection/GitHubClient.d.ts +0 -22
  277. package/dist/test/src/collection/GitHubClient.d.ts.map +0 -1
  278. package/dist/test/src/collection/GitHubClient.js +0 -114
  279. package/dist/test/src/collection/PersonaDetails.d.ts +0 -22
  280. package/dist/test/src/collection/PersonaDetails.d.ts.map +0 -1
  281. package/dist/test/src/collection/PersonaDetails.js +0 -71
  282. package/dist/test/src/collection/PersonaInstaller.d.ts +0 -26
  283. package/dist/test/src/collection/PersonaInstaller.d.ts.map +0 -1
  284. package/dist/test/src/collection/PersonaInstaller.js +0 -103
  285. package/dist/test/src/collection/PersonaSubmitter.d.ts +0 -19
  286. package/dist/test/src/collection/PersonaSubmitter.d.ts.map +0 -1
  287. package/dist/test/src/collection/PersonaSubmitter.js +0 -57
  288. package/dist/test/src/collection/index.d.ts +0 -10
  289. package/dist/test/src/collection/index.d.ts.map +0 -1
  290. package/dist/test/src/collection/index.js +0 -10
  291. package/dist/test/src/config/constants.d.ts +0 -25
  292. package/dist/test/src/config/constants.d.ts.map +0 -1
  293. package/dist/test/src/config/constants.js +0 -30
  294. package/dist/test/src/config/index.d.ts +0 -6
  295. package/dist/test/src/config/index.d.ts.map +0 -1
  296. package/dist/test/src/config/index.js +0 -6
  297. package/dist/test/src/config/indicator-config.d.ts +0 -107
  298. package/dist/test/src/config/indicator-config.d.ts.map +0 -1
  299. package/dist/test/src/config/indicator-config.js +0 -158
  300. package/dist/test/src/constants/defaultPersonas.d.ts +0 -10
  301. package/dist/test/src/constants/defaultPersonas.d.ts.map +0 -1
  302. package/dist/test/src/constants/defaultPersonas.js +0 -18
  303. package/dist/test/src/constants/limits.d.ts +0 -10
  304. package/dist/test/src/constants/limits.d.ts.map +0 -1
  305. package/dist/test/src/constants/limits.js +0 -13
  306. package/dist/test/src/elements/BaseElement.d.ts +0 -81
  307. package/dist/test/src/elements/BaseElement.d.ts.map +0 -1
  308. package/dist/test/src/elements/BaseElement.js +0 -381
  309. package/dist/test/src/elements/FeedbackProcessor.d.ts +0 -57
  310. package/dist/test/src/elements/FeedbackProcessor.d.ts.map +0 -1
  311. package/dist/test/src/elements/FeedbackProcessor.js +0 -418
  312. package/dist/test/src/elements/agents/Agent.d.ts +0 -145
  313. package/dist/test/src/elements/agents/Agent.d.ts.map +0 -1
  314. package/dist/test/src/elements/agents/Agent.js +0 -848
  315. package/dist/test/src/elements/agents/AgentManager.d.ts +0 -125
  316. package/dist/test/src/elements/agents/AgentManager.d.ts.map +0 -1
  317. package/dist/test/src/elements/agents/AgentManager.js +0 -608
  318. package/dist/test/src/elements/agents/constants.d.ts +0 -42
  319. package/dist/test/src/elements/agents/constants.d.ts.map +0 -1
  320. package/dist/test/src/elements/agents/constants.js +0 -45
  321. package/dist/test/src/elements/agents/goalTemplates.d.ts +0 -44
  322. package/dist/test/src/elements/agents/goalTemplates.d.ts.map +0 -1
  323. package/dist/test/src/elements/agents/goalTemplates.js +0 -297
  324. package/dist/test/src/elements/agents/index.d.ts +0 -8
  325. package/dist/test/src/elements/agents/index.d.ts.map +0 -1
  326. package/dist/test/src/elements/agents/index.js +0 -8
  327. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +0 -76
  328. package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +0 -1
  329. package/dist/test/src/elements/agents/ruleEngineConfig.js +0 -143
  330. package/dist/test/src/elements/agents/types.d.ts +0 -97
  331. package/dist/test/src/elements/agents/types.d.ts.map +0 -1
  332. package/dist/test/src/elements/agents/types.js +0 -5
  333. package/dist/test/src/elements/index.d.ts +0 -6
  334. package/dist/test/src/elements/index.d.ts.map +0 -1
  335. package/dist/test/src/elements/index.js +0 -6
  336. package/dist/test/src/elements/memories/Memory.d.ts +0 -110
  337. package/dist/test/src/elements/memories/Memory.d.ts.map +0 -1
  338. package/dist/test/src/elements/memories/Memory.js +0 -470
  339. package/dist/test/src/elements/memories/MemoryManager.d.ts +0 -86
  340. package/dist/test/src/elements/memories/MemoryManager.d.ts.map +0 -1
  341. package/dist/test/src/elements/memories/MemoryManager.js +0 -435
  342. package/dist/test/src/elements/memories/constants.d.ts +0 -42
  343. package/dist/test/src/elements/memories/constants.d.ts.map +0 -1
  344. package/dist/test/src/elements/memories/constants.js +0 -49
  345. package/dist/test/src/elements/memories/index.d.ts +0 -6
  346. package/dist/test/src/elements/memories/index.d.ts.map +0 -1
  347. package/dist/test/src/elements/memories/index.js +0 -6
  348. package/dist/test/src/elements/skills/Skill.d.ts +0 -109
  349. package/dist/test/src/elements/skills/Skill.d.ts.map +0 -1
  350. package/dist/test/src/elements/skills/Skill.js +0 -381
  351. package/dist/test/src/elements/templates/Template.d.ts +0 -138
  352. package/dist/test/src/elements/templates/Template.d.ts.map +0 -1
  353. package/dist/test/src/elements/templates/Template.js +0 -673
  354. package/dist/test/src/elements/templates/TemplateManager.d.ts +0 -104
  355. package/dist/test/src/elements/templates/TemplateManager.d.ts.map +0 -1
  356. package/dist/test/src/elements/templates/TemplateManager.js +0 -496
  357. package/dist/test/src/elements/templates/index.d.ts +0 -6
  358. package/dist/test/src/elements/templates/index.d.ts.map +0 -1
  359. package/dist/test/src/elements/templates/index.js +0 -6
  360. package/dist/test/src/errors/SecurityError.d.ts +0 -29
  361. package/dist/test/src/errors/SecurityError.d.ts.map +0 -1
  362. package/dist/test/src/errors/SecurityError.js +0 -47
  363. package/dist/test/src/errors/index.d.ts +0 -2
  364. package/dist/test/src/errors/index.d.ts.map +0 -1
  365. package/dist/test/src/errors/index.js +0 -2
  366. package/dist/test/src/index.barrel.d.ts +0 -21
  367. package/dist/test/src/index.barrel.d.ts.map +0 -1
  368. package/dist/test/src/index.barrel.js +0 -31
  369. package/dist/test/src/index.d.ts +0 -223
  370. package/dist/test/src/index.d.ts.map +0 -1
  371. package/dist/test/src/index.js +0 -1594
  372. package/dist/test/src/marketplace/GitHubClient.d.ts +0 -22
  373. package/dist/test/src/marketplace/GitHubClient.d.ts.map +0 -1
  374. package/dist/test/src/marketplace/GitHubClient.js +0 -112
  375. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +0 -21
  376. package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +0 -1
  377. package/dist/test/src/marketplace/MarketplaceBrowser.js +0 -45
  378. package/dist/test/src/marketplace/MarketplaceSearch.d.ts +0 -18
  379. package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +0 -1
  380. package/dist/test/src/marketplace/MarketplaceSearch.js +0 -36
  381. package/dist/test/src/marketplace/PersonaDetails.d.ts +0 -22
  382. package/dist/test/src/marketplace/PersonaDetails.d.ts.map +0 -1
  383. package/dist/test/src/marketplace/PersonaDetails.js +0 -71
  384. package/dist/test/src/marketplace/PersonaInstaller.d.ts +0 -25
  385. package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +0 -1
  386. package/dist/test/src/marketplace/PersonaInstaller.js +0 -100
  387. package/dist/test/src/marketplace/PersonaSubmitter.d.ts +0 -19
  388. package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +0 -1
  389. package/dist/test/src/marketplace/PersonaSubmitter.js +0 -57
  390. package/dist/test/src/marketplace/index.d.ts +0 -10
  391. package/dist/test/src/marketplace/index.d.ts.map +0 -1
  392. package/dist/test/src/marketplace/index.js +0 -10
  393. package/dist/test/src/persona/PersonaElement.d.ts +0 -64
  394. package/dist/test/src/persona/PersonaElement.d.ts.map +0 -1
  395. package/dist/test/src/persona/PersonaElement.js +0 -223
  396. package/dist/test/src/persona/PersonaElementManager.d.ts +0 -97
  397. package/dist/test/src/persona/PersonaElementManager.d.ts.map +0 -1
  398. package/dist/test/src/persona/PersonaElementManager.js +0 -342
  399. package/dist/test/src/persona/PersonaLoader.d.ts +0 -34
  400. package/dist/test/src/persona/PersonaLoader.d.ts.map +0 -1
  401. package/dist/test/src/persona/PersonaLoader.js +0 -145
  402. package/dist/test/src/persona/PersonaManager.d.ts +0 -112
  403. package/dist/test/src/persona/PersonaManager.d.ts.map +0 -1
  404. package/dist/test/src/persona/PersonaManager.js +0 -341
  405. package/dist/test/src/persona/PersonaValidator.d.ts +0 -33
  406. package/dist/test/src/persona/PersonaValidator.d.ts.map +0 -1
  407. package/dist/test/src/persona/PersonaValidator.js +0 -157
  408. package/dist/test/src/persona/export-import/PersonaExporter.d.ts +0 -43
  409. package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +0 -1
  410. package/dist/test/src/persona/export-import/PersonaExporter.js +0 -99
  411. package/dist/test/src/persona/export-import/PersonaImporter.d.ts +0 -65
  412. package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +0 -1
  413. package/dist/test/src/persona/export-import/PersonaImporter.js +0 -315
  414. package/dist/test/src/persona/export-import/PersonaSharer.d.ts +0 -60
  415. package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +0 -1
  416. package/dist/test/src/persona/export-import/PersonaSharer.js +0 -502
  417. package/dist/test/src/persona/export-import/index.d.ts +0 -10
  418. package/dist/test/src/persona/export-import/index.d.ts.map +0 -1
  419. package/dist/test/src/persona/export-import/index.js +0 -7
  420. package/dist/test/src/persona/index.d.ts +0 -7
  421. package/dist/test/src/persona/index.d.ts.map +0 -1
  422. package/dist/test/src/persona/index.js +0 -7
  423. package/dist/test/src/portfolio/MigrationManager.d.ts +0 -44
  424. package/dist/test/src/portfolio/MigrationManager.d.ts.map +0 -1
  425. package/dist/test/src/portfolio/MigrationManager.js +0 -163
  426. package/dist/test/src/portfolio/PortfolioManager.d.ts +0 -54
  427. package/dist/test/src/portfolio/PortfolioManager.d.ts.map +0 -1
  428. package/dist/test/src/portfolio/PortfolioManager.js +0 -224
  429. package/dist/test/src/portfolio/types.d.ts +0 -18
  430. package/dist/test/src/portfolio/types.d.ts.map +0 -1
  431. package/dist/test/src/portfolio/types.js +0 -13
  432. package/dist/test/src/security/InputValidator.d.ts +0 -80
  433. package/dist/test/src/security/InputValidator.d.ts.map +0 -1
  434. package/dist/test/src/security/InputValidator.js +0 -436
  435. package/dist/test/src/security/audit/SecurityAuditor.d.ts +0 -44
  436. package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +0 -1
  437. package/dist/test/src/security/audit/SecurityAuditor.js +0 -274
  438. package/dist/test/src/security/audit/config/suppressions.d.ts +0 -34
  439. package/dist/test/src/security/audit/config/suppressions.d.ts.map +0 -1
  440. package/dist/test/src/security/audit/config/suppressions.js +0 -575
  441. package/dist/test/src/security/audit/index.d.ts +0 -14
  442. package/dist/test/src/security/audit/index.d.ts.map +0 -1
  443. package/dist/test/src/security/audit/index.js +0 -15
  444. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +0 -46
  445. package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +0 -1
  446. package/dist/test/src/security/audit/reporters/ConsoleReporter.js +0 -174
  447. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +0 -13
  448. package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +0 -1
  449. package/dist/test/src/security/audit/reporters/JsonReporter.js +0 -25
  450. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +0 -13
  451. package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +0 -1
  452. package/dist/test/src/security/audit/reporters/MarkdownReporter.js +0 -79
  453. package/dist/test/src/security/audit/rules/SecurityRules.d.ts +0 -20
  454. package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +0 -1
  455. package/dist/test/src/security/audit/rules/SecurityRules.js +0 -244
  456. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +0 -47
  457. package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +0 -1
  458. package/dist/test/src/security/audit/scanners/CodeScanner.js +0 -174
  459. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +0 -13
  460. package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +0 -1
  461. package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +0 -22
  462. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +0 -13
  463. package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +0 -1
  464. package/dist/test/src/security/audit/scanners/DependencyScanner.js +0 -22
  465. package/dist/test/src/security/audit/types.d.ts +0 -94
  466. package/dist/test/src/security/audit/types.d.ts.map +0 -1
  467. package/dist/test/src/security/audit/types.js +0 -6
  468. package/dist/test/src/security/commandValidator.d.ts +0 -7
  469. package/dist/test/src/security/commandValidator.d.ts.map +0 -1
  470. package/dist/test/src/security/commandValidator.js +0 -78
  471. package/dist/test/src/security/constants.d.ts +0 -24
  472. package/dist/test/src/security/constants.d.ts.map +0 -1
  473. package/dist/test/src/security/constants.js +0 -26
  474. package/dist/test/src/security/contentValidator.d.ts +0 -47
  475. package/dist/test/src/security/contentValidator.d.ts.map +0 -1
  476. package/dist/test/src/security/contentValidator.js +0 -301
  477. package/dist/test/src/security/errors.d.ts +0 -14
  478. package/dist/test/src/security/errors.d.ts.map +0 -1
  479. package/dist/test/src/security/errors.js +0 -28
  480. package/dist/test/src/security/fileLockManager.d.ts +0 -70
  481. package/dist/test/src/security/fileLockManager.d.ts.map +0 -1
  482. package/dist/test/src/security/fileLockManager.js +0 -187
  483. package/dist/test/src/security/index.d.ts +0 -12
  484. package/dist/test/src/security/index.d.ts.map +0 -1
  485. package/dist/test/src/security/index.js +0 -14
  486. package/dist/test/src/security/pathValidator.d.ts +0 -9
  487. package/dist/test/src/security/pathValidator.d.ts.map +0 -1
  488. package/dist/test/src/security/pathValidator.js +0 -98
  489. package/dist/test/src/security/regexValidator.d.ts +0 -59
  490. package/dist/test/src/security/regexValidator.d.ts.map +0 -1
  491. package/dist/test/src/security/regexValidator.js +0 -214
  492. package/dist/test/src/security/secureYamlParser.d.ts +0 -46
  493. package/dist/test/src/security/secureYamlParser.d.ts.map +0 -1
  494. package/dist/test/src/security/secureYamlParser.js +0 -203
  495. package/dist/test/src/security/securityMonitor.d.ts +0 -58
  496. package/dist/test/src/security/securityMonitor.d.ts.map +0 -1
  497. package/dist/test/src/security/securityMonitor.js +0 -108
  498. package/dist/test/src/security/tokenManager.d.ts +0 -85
  499. package/dist/test/src/security/tokenManager.d.ts.map +0 -1
  500. package/dist/test/src/security/tokenManager.js +0 -286
  501. package/dist/test/src/security/validators/unicodeValidator.d.ts +0 -97
  502. package/dist/test/src/security/validators/unicodeValidator.d.ts.map +0 -1
  503. package/dist/test/src/security/validators/unicodeValidator.js +0 -312
  504. package/dist/test/src/security/yamlValidator.d.ts +0 -21
  505. package/dist/test/src/security/yamlValidator.d.ts.map +0 -1
  506. package/dist/test/src/security/yamlValidator.js +0 -164
  507. package/dist/test/src/server/ServerSetup.d.ts +0 -35
  508. package/dist/test/src/server/ServerSetup.d.ts.map +0 -1
  509. package/dist/test/src/server/ServerSetup.js +0 -116
  510. package/dist/test/src/server/index.d.ts +0 -7
  511. package/dist/test/src/server/index.d.ts.map +0 -1
  512. package/dist/test/src/server/index.js +0 -7
  513. package/dist/test/src/server/startup.d.ts +0 -31
  514. package/dist/test/src/server/startup.d.ts.map +0 -1
  515. package/dist/test/src/server/startup.js +0 -67
  516. package/dist/test/src/server/tools/CollectionTools.d.ts +0 -10
  517. package/dist/test/src/server/tools/CollectionTools.d.ts.map +0 -1
  518. package/dist/test/src/server/tools/CollectionTools.js +0 -96
  519. package/dist/test/src/server/tools/ConfigTools.d.ts +0 -10
  520. package/dist/test/src/server/tools/ConfigTools.d.ts.map +0 -1
  521. package/dist/test/src/server/tools/ConfigTools.js +0 -63
  522. package/dist/test/src/server/tools/MarketplaceTools.d.ts +0 -10
  523. package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +0 -1
  524. package/dist/test/src/server/tools/MarketplaceTools.js +0 -92
  525. package/dist/test/src/server/tools/PersonaTools.d.ts +0 -10
  526. package/dist/test/src/server/tools/PersonaTools.d.ts.map +0 -1
  527. package/dist/test/src/server/tools/PersonaTools.js +0 -257
  528. package/dist/test/src/server/tools/ToolRegistry.d.ts +0 -37
  529. package/dist/test/src/server/tools/ToolRegistry.d.ts.map +0 -1
  530. package/dist/test/src/server/tools/ToolRegistry.js +0 -40
  531. package/dist/test/src/server/tools/UpdateTools.d.ts +0 -10
  532. package/dist/test/src/server/tools/UpdateTools.d.ts.map +0 -1
  533. package/dist/test/src/server/tools/UpdateTools.js +0 -64
  534. package/dist/test/src/server/tools/UserTools.d.ts +0 -10
  535. package/dist/test/src/server/tools/UserTools.d.ts.map +0 -1
  536. package/dist/test/src/server/tools/UserTools.js +0 -51
  537. package/dist/test/src/server/tools/index.d.ts +0 -10
  538. package/dist/test/src/server/tools/index.d.ts.map +0 -1
  539. package/dist/test/src/server/tools/index.js +0 -10
  540. package/dist/test/src/server/types.d.ts +0 -34
  541. package/dist/test/src/server/types.d.ts.map +0 -1
  542. package/dist/test/src/server/types.js +0 -5
  543. package/dist/test/src/tools/debug.d.ts +0 -20
  544. package/dist/test/src/tools/debug.d.ts.map +0 -1
  545. package/dist/test/src/tools/debug.js +0 -37
  546. package/dist/test/src/types/cache.d.ts +0 -8
  547. package/dist/test/src/types/cache.d.ts.map +0 -1
  548. package/dist/test/src/types/cache.js +0 -5
  549. package/dist/test/src/types/collection.d.ts +0 -23
  550. package/dist/test/src/types/collection.d.ts.map +0 -1
  551. package/dist/test/src/types/collection.js +0 -5
  552. package/dist/test/src/types/elements/IElement.d.ts +0 -123
  553. package/dist/test/src/types/elements/IElement.d.ts.map +0 -1
  554. package/dist/test/src/types/elements/IElement.js +0 -30
  555. package/dist/test/src/types/elements/IElementManager.d.ts +0 -65
  556. package/dist/test/src/types/elements/IElementManager.d.ts.map +0 -1
  557. package/dist/test/src/types/elements/IElementManager.js +0 -6
  558. package/dist/test/src/types/elements/IRatingManager.d.ts +0 -109
  559. package/dist/test/src/types/elements/IRatingManager.d.ts.map +0 -1
  560. package/dist/test/src/types/elements/IRatingManager.js +0 -6
  561. package/dist/test/src/types/elements/IReferenceResolver.d.ts +0 -52
  562. package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +0 -1
  563. package/dist/test/src/types/elements/IReferenceResolver.js +0 -6
  564. package/dist/test/src/types/elements/RatingBreakdowns.d.ts +0 -49
  565. package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +0 -1
  566. package/dist/test/src/types/elements/RatingBreakdowns.js +0 -6
  567. package/dist/test/src/types/elements/index.d.ts +0 -9
  568. package/dist/test/src/types/elements/index.d.ts.map +0 -1
  569. package/dist/test/src/types/elements/index.js +0 -11
  570. package/dist/test/src/types/index.d.ts +0 -9
  571. package/dist/test/src/types/index.d.ts.map +0 -1
  572. package/dist/test/src/types/index.js +0 -9
  573. package/dist/test/src/types/marketplace.d.ts +0 -23
  574. package/dist/test/src/types/marketplace.d.ts.map +0 -1
  575. package/dist/test/src/types/marketplace.js +0 -5
  576. package/dist/test/src/types/mcp.d.ts +0 -84
  577. package/dist/test/src/types/mcp.d.ts.map +0 -1
  578. package/dist/test/src/types/mcp.js +0 -80
  579. package/dist/test/src/types/persona.d.ts +0 -30
  580. package/dist/test/src/types/persona.d.ts.map +0 -1
  581. package/dist/test/src/types/persona.js +0 -5
  582. package/dist/test/src/update/BackupManager.d.ts +0 -46
  583. package/dist/test/src/update/BackupManager.d.ts.map +0 -1
  584. package/dist/test/src/update/BackupManager.js +0 -261
  585. package/dist/test/src/update/DependencyChecker.d.ts +0 -41
  586. package/dist/test/src/update/DependencyChecker.d.ts.map +0 -1
  587. package/dist/test/src/update/DependencyChecker.js +0 -132
  588. package/dist/test/src/update/RateLimiter.d.ts +0 -80
  589. package/dist/test/src/update/RateLimiter.d.ts.map +0 -1
  590. package/dist/test/src/update/RateLimiter.js +0 -172
  591. package/dist/test/src/update/SignatureVerifier.d.ts +0 -71
  592. package/dist/test/src/update/SignatureVerifier.d.ts.map +0 -1
  593. package/dist/test/src/update/SignatureVerifier.js +0 -214
  594. package/dist/test/src/update/UpdateChecker.d.ts +0 -127
  595. package/dist/test/src/update/UpdateChecker.d.ts.map +0 -1
  596. package/dist/test/src/update/UpdateChecker.js +0 -469
  597. package/dist/test/src/update/UpdateManager.d.ts +0 -41
  598. package/dist/test/src/update/UpdateManager.d.ts.map +0 -1
  599. package/dist/test/src/update/UpdateManager.js +0 -260
  600. package/dist/test/src/update/VersionManager.d.ts +0 -31
  601. package/dist/test/src/update/VersionManager.d.ts.map +0 -1
  602. package/dist/test/src/update/VersionManager.js +0 -134
  603. package/dist/test/src/update/index.d.ts +0 -9
  604. package/dist/test/src/update/index.d.ts.map +0 -1
  605. package/dist/test/src/update/index.js +0 -9
  606. package/dist/test/src/utils/filesystem.d.ts +0 -29
  607. package/dist/test/src/utils/filesystem.d.ts.map +0 -1
  608. package/dist/test/src/utils/filesystem.js +0 -94
  609. package/dist/test/src/utils/git.d.ts +0 -32
  610. package/dist/test/src/utils/git.d.ts.map +0 -1
  611. package/dist/test/src/utils/git.js +0 -65
  612. package/dist/test/src/utils/index.d.ts +0 -7
  613. package/dist/test/src/utils/index.d.ts.map +0 -1
  614. package/dist/test/src/utils/index.js +0 -7
  615. package/dist/test/src/utils/logger.d.ts +0 -45
  616. package/dist/test/src/utils/logger.d.ts.map +0 -1
  617. package/dist/test/src/utils/logger.js +0 -91
  618. package/dist/test/src/utils/version.d.ts +0 -25
  619. package/dist/test/src/utils/version.d.ts.map +0 -1
  620. package/dist/test/src/utils/version.js +0 -97
  621. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +0 -33
  622. package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +0 -1
  623. package/dist/test/test/__tests__/integration/helpers/file-utils.js +0 -83
  624. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +0 -26
  625. package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +0 -1
  626. package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +0 -95
  627. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +0 -26
  628. package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +0 -1
  629. package/dist/test/test/__tests__/integration/helpers/test-server.js +0 -41
  630. package/dist/test/test/__tests__/integration/setup.d.ts +0 -8
  631. package/dist/test/test/__tests__/integration/setup.d.ts.map +0 -1
  632. package/dist/test/test/__tests__/integration/setup.js +0 -31
  633. package/dist/test/test/__tests__/integration/teardown.d.ts +0 -5
  634. package/dist/test/test/__tests__/integration/teardown.d.ts.map +0 -1
  635. package/dist/test/test/__tests__/integration/teardown.js +0 -23
  636. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +0 -34
  637. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +0 -1
  638. package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +0 -224
  639. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +0 -89
  640. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +0 -1
  641. package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +0 -543
  642. package/dist/test/test/__tests__/security/index.d.ts +0 -46
  643. package/dist/test/test/__tests__/security/index.d.ts.map +0 -1
  644. package/dist/test/test/__tests__/security/index.js +0 -98
  645. package/dist/test/test/__tests__/security/setup.d.ts +0 -3
  646. package/dist/test/test/__tests__/security/setup.d.ts.map +0 -1
  647. package/dist/test/test/__tests__/security/setup.js +0 -23
  648. package/dist/types/marketplace.d.ts +0 -23
  649. package/dist/types/marketplace.d.ts.map +0 -1
  650. package/dist/types/marketplace.js +0 -5
@@ -1,214 +0,0 @@
1
- /**
2
- * RegexValidator - Provides protection against ReDoS attacks
3
- *
4
- * This module implements safe regex execution by:
5
- * 1. Pre-validating content length based on pattern complexity
6
- * 2. Analyzing patterns for known ReDoS vulnerabilities
7
- * 3. Limiting execution based on calculated risk
8
- */
9
- import { SecurityError } from './errors.js';
10
- import { SecurityMonitor } from './securityMonitor.js';
11
- export class RegexValidator {
12
- // Default limits based on pattern complexity
13
- static COMPLEXITY_LIMITS = {
14
- low: 100000, // 100KB for simple patterns
15
- medium: 10000, // 10KB for moderate patterns
16
- high: 1000 // 1KB for complex patterns
17
- };
18
- /**
19
- * Validates content against a pattern with ReDoS protection
20
- *
21
- * Protection strategy:
22
- * 1. Analyze pattern complexity
23
- * 2. Enforce content length limits based on complexity
24
- * 3. Reject known dangerous patterns
25
- * 4. Execute regex only if safe
26
- */
27
- static validate(content, pattern, options = {}) {
28
- const { maxLength, rejectDangerousPatterns = true, logEvents = true } = options;
29
- // Analyze pattern for ReDoS risks
30
- const analysis = this.analyzePattern(pattern);
31
- // Reject dangerous patterns if configured
32
- if (rejectDangerousPatterns && !analysis.safe) {
33
- if (logEvents) {
34
- SecurityMonitor.logSecurityEvent({
35
- type: 'UPDATE_SECURITY_VIOLATION',
36
- severity: 'HIGH',
37
- source: 'RegexValidator',
38
- details: 'Dangerous regex pattern rejected',
39
- additionalData: {
40
- pattern: pattern.source,
41
- risks: analysis.risks
42
- }
43
- });
44
- }
45
- throw new SecurityError(`Pattern rejected due to ReDoS risk: ${analysis.risks.join(', ')}`);
46
- }
47
- // Determine effective max length
48
- const effectiveMaxLength = maxLength ?? analysis.maxSafeLength;
49
- // Check content length
50
- if (content.length > effectiveMaxLength) {
51
- throw new SecurityError(`Content too large for validation: ${content.length} bytes (max: ${effectiveMaxLength} for ${analysis.complexity} complexity pattern)`);
52
- }
53
- // Create a copy of the regex to avoid modifying the original
54
- const safeCopy = new RegExp(pattern.source, pattern.flags);
55
- try {
56
- // Track execution time for monitoring
57
- const startTime = performance.now();
58
- const result = safeCopy.test(content);
59
- const elapsed = performance.now() - startTime;
60
- // Log slow patterns
61
- if (elapsed > 50 && logEvents) {
62
- SecurityMonitor.logSecurityEvent({
63
- type: 'RATE_LIMIT_WARNING',
64
- severity: 'MEDIUM',
65
- source: 'RegexValidator',
66
- details: `Slow regex execution: ${elapsed.toFixed(2)}ms`,
67
- additionalData: {
68
- pattern: pattern.source,
69
- contentLength: content.length,
70
- elapsed
71
- }
72
- });
73
- }
74
- return result;
75
- }
76
- catch (error) {
77
- // Handle any regex errors
78
- if (logEvents) {
79
- SecurityMonitor.logSecurityEvent({
80
- type: 'UPDATE_SECURITY_VIOLATION',
81
- severity: 'HIGH',
82
- source: 'RegexValidator',
83
- details: 'Regex execution error',
84
- additionalData: {
85
- error: error instanceof Error ? error.message : 'Unknown error'
86
- }
87
- });
88
- }
89
- return false;
90
- }
91
- }
92
- /**
93
- * Validates multiple patterns with shared risk assessment
94
- */
95
- static validateAny(content, patterns, options = {}) {
96
- for (const pattern of patterns) {
97
- if (this.validate(content, pattern, options)) {
98
- return true;
99
- }
100
- }
101
- return false;
102
- }
103
- /**
104
- * Validates all patterns must match
105
- */
106
- static validateAll(content, patterns, options = {}) {
107
- for (const pattern of patterns) {
108
- if (!this.validate(content, pattern, options)) {
109
- return false;
110
- }
111
- }
112
- return true;
113
- }
114
- /**
115
- * Analyzes a regex pattern for potential ReDoS vulnerabilities
116
- *
117
- * Detects patterns known to cause exponential backtracking:
118
- * - Nested quantifiers: (a+)+, (a*)*
119
- * - Alternation with overlap: (a|a)*
120
- * - Quantified groups with alternation: (a|b)+
121
- * - Catastrophic patterns: (.+)+$
122
- */
123
- static analyzePattern(pattern) {
124
- const source = pattern.source;
125
- const risks = [];
126
- // Nested quantifiers - extremely dangerous
127
- if (/\([^)]+[+*]\)[+*]/.test(source) ||
128
- /\([^)]+\{[^}]+\}\)[+*]/.test(source) ||
129
- /\(\w+[+*]\)[+*]/.test(source)) {
130
- risks.push('Nested quantifiers detected');
131
- }
132
- // Alternation with repetition
133
- if (/\([^)]*\|[^)]*\)[+*]/.test(source)) {
134
- risks.push('Quantified alternation detected');
135
- }
136
- // Alternation with overlap (e.g., (a|a)*)
137
- const alternationMatch = source.match(/\(([^|)]+)\|([^)]+)\)/g);
138
- if (alternationMatch) {
139
- for (const match of alternationMatch) {
140
- const parts = match.slice(1, -1).split('|');
141
- if (parts.some((part, i) => parts.slice(i + 1).includes(part))) {
142
- risks.push('Overlapping alternation detected');
143
- break;
144
- }
145
- }
146
- }
147
- // Catastrophic backtracking patterns
148
- // Check for patterns like (.+)+, (.*)+, etc. that can cause exponential backtracking
149
- if (/\([^)]*\.\+[^)]*\)\+/.test(source) || /\([^)]*\.\*[^)]*\)\+/.test(source) || /\([^)]*\\w\+[^)]*\)\+/.test(source)) {
150
- risks.push('Potential catastrophic backtracking');
151
- }
152
- // Unbounded lookahead/lookbehind with quantifiers
153
- if (/\(\?[=!<].*[+*]/.test(source)) {
154
- risks.push('Unbounded lookahead/lookbehind');
155
- }
156
- // Polynomial patterns (multiple quantifiers in sequence)
157
- const quantifierCount = (source.match(/[+*?]|\{\d*,?\d*\}/g) || []).length;
158
- if (quantifierCount > 3) {
159
- risks.push('Multiple quantifiers detected');
160
- }
161
- // Determine complexity and safe content length
162
- let complexity;
163
- let maxSafeLength;
164
- if (risks.length === 0) {
165
- if (quantifierCount === 0) {
166
- complexity = 'low';
167
- maxSafeLength = this.COMPLEXITY_LIMITS.low;
168
- }
169
- else if (quantifierCount <= 3) {
170
- complexity = 'medium';
171
- maxSafeLength = this.COMPLEXITY_LIMITS.medium;
172
- }
173
- else {
174
- complexity = 'high';
175
- maxSafeLength = this.COMPLEXITY_LIMITS.high;
176
- }
177
- }
178
- else if (risks.length === 1) {
179
- complexity = 'high';
180
- maxSafeLength = this.COMPLEXITY_LIMITS.high;
181
- }
182
- else {
183
- complexity = 'high';
184
- maxSafeLength = this.COMPLEXITY_LIMITS.high;
185
- }
186
- return {
187
- safe: risks.length === 0,
188
- risks,
189
- complexity,
190
- maxSafeLength
191
- };
192
- }
193
- /**
194
- * Creates a regex pattern with safety analysis
195
- */
196
- static createSafePattern(pattern, flags) {
197
- const regex = new RegExp(pattern, flags);
198
- const analysis = this.analyzePattern(regex);
199
- if (!analysis.safe) {
200
- SecurityMonitor.logSecurityEvent({
201
- type: 'UPDATE_SECURITY_VIOLATION',
202
- severity: 'MEDIUM',
203
- source: 'RegexValidator',
204
- details: 'Potentially dangerous regex pattern created',
205
- additionalData: {
206
- pattern,
207
- risks: analysis.risks
208
- }
209
- });
210
- }
211
- return regex;
212
- }
213
- }
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXhWYWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VjdXJpdHkvcmVnZXhWYWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBa0J2RCxNQUFNLE9BQU8sY0FBYztJQUN6Qiw2Q0FBNkM7SUFDckMsTUFBTSxDQUFVLGlCQUFpQixHQUFHO1FBQzFDLEdBQUcsRUFBRSxNQUFNLEVBQUssNEJBQTRCO1FBQzVDLE1BQU0sRUFBRSxLQUFLLEVBQUcsNkJBQTZCO1FBQzdDLElBQUksRUFBRSxJQUFJLENBQU0sMkJBQTJCO0tBQzVDLENBQUM7SUFFRjs7Ozs7Ozs7T0FRRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQ2IsT0FBZSxFQUNmLE9BQWUsRUFDZixVQUFrQyxFQUFFO1FBRXBDLE1BQU0sRUFDSixTQUFTLEVBQ1QsdUJBQXVCLEdBQUcsSUFBSSxFQUM5QixTQUFTLEdBQUcsSUFBSSxFQUNqQixHQUFHLE9BQU8sQ0FBQztRQUVaLGtDQUFrQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlDLDBDQUEwQztRQUMxQyxJQUFJLHVCQUF1QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsZUFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUMvQixJQUFJLEVBQUUsMkJBQTJCO29CQUNqQyxRQUFRLEVBQUUsTUFBTTtvQkFDaEIsTUFBTSxFQUFFLGdCQUFnQjtvQkFDeEIsT0FBTyxFQUFFLGtDQUFrQztvQkFDM0MsY0FBYyxFQUFFO3dCQUNkLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTTt3QkFD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USxDQUFDLEtBQUs7aUJBQ3RCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVnZXhWYWxpZGF0b3IgLSBQcm92aWRlcyBwcm90ZWN0aW9uIGFnYWluc3QgUmVEb1MgYXR0YWNrc1xuICogXG4gKiBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHNhZmUgcmVnZXggZXhlY3V0aW9uIGJ5OlxuICogMS4gUHJlLXZhbGlkYXRpbmcgY29udGVudCBsZW5ndGggYmFzZWQgb24gcGF0dGVybiBjb21wbGV4aXR5XG4gKiAyLiBBbmFseXppbmcgcGF0dGVybnMgZm9yIGtub3duIFJlRG9TIHZ1bG5lcmFiaWxpdGllc1xuICogMy4gTGltaXRpbmcgZXhlY3V0aW9uIGJhc2VkIG9uIGNhbGN1bGF0ZWQgcmlza1xuICovXG5cbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnZXhWYWxpZGF0aW9uT3B0aW9ucyB7XG4gIC8qKiBNYXhpbXVtIGNvbnRlbnQgbGVuZ3RoIGFsbG93ZWQgKi9cbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAvKiogUmVqZWN0IHBhdHRlcm5zIHdpdGggaGlnaCBSZURvUyByaXNrICovXG4gIHJlamVjdERhbmdlcm91c1BhdHRlcm5zPzogYm9vbGVhbjtcbiAgLyoqIExvZyBzZWN1cml0eSBldmVudHMgKi9cbiAgbG9nRXZlbnRzPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIFBhdHRlcm5BbmFseXNpcyB7XG4gIHNhZmU6IGJvb2xlYW47XG4gIHJpc2tzOiBzdHJpbmdbXTtcbiAgY29tcGxleGl0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgbWF4U2FmZUxlbmd0aDogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgUmVnZXhWYWxpZGF0b3Ige1xuICAvLyBEZWZhdWx0IGxpbWl0cyBiYXNlZCBvbiBwYXR0ZXJuIGNvbXBsZXhpdHlcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQ09NUExFWElUWV9MSU1JVFMgPSB7XG4gICAgbG93OiAxMDAwMDAsICAgIC8vIDEwMEtCIGZvciBzaW1wbGUgcGF0dGVybnNcbiAgICBtZWRpdW06IDEwMDAwLCAgLy8gMTBLQiBmb3IgbW9kZXJhdGUgcGF0dGVybnNcbiAgICBoaWdoOiAxMDAwICAgICAgLy8gMUtCIGZvciBjb21wbGV4IHBhdHRlcm5zXG4gIH07XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBjb250ZW50IGFnYWluc3QgYSBwYXR0ZXJuIHdpdGggUmVEb1MgcHJvdGVjdGlvblxuICAgKiBcbiAgICogUHJvdGVjdGlvbiBzdHJhdGVneTpcbiAgICogMS4gQW5hbHl6ZSBwYXR0ZXJuIGNvbXBsZXhpdHlcbiAgICogMi4gRW5mb3JjZSBjb250ZW50IGxlbmd0aCBsaW1pdHMgYmFzZWQgb24gY29tcGxleGl0eVxuICAgKiAzLiBSZWplY3Qga25vd24gZGFuZ2Vyb3VzIHBhdHRlcm5zXG4gICAqIDQuIEV4ZWN1dGUgcmVnZXggb25seSBpZiBzYWZlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGUoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHBhdHRlcm46IFJlZ0V4cCxcbiAgICBvcHRpb25zOiBSZWdleFZhbGlkYXRpb25PcHRpb25zID0ge31cbiAgKTogYm9vbGVhbiB7XG4gICAgY29uc3Qge1xuICAgICAgbWF4TGVuZ3RoLFxuICAgICAgcmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnMgPSB0cnVlLFxuICAgICAgbG9nRXZlbnRzID0gdHJ1ZVxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgLy8gQW5hbHl6ZSBwYXR0ZXJuIGZvciBSZURvUyByaXNrc1xuICAgIGNvbnN0IGFuYWx5c2lzID0gdGhpcy5hbmFseXplUGF0dGVybihwYXR0ZXJuKTtcbiAgICBcbiAgICAvLyBSZWplY3QgZGFuZ2Vyb3VzIHBhdHRlcm5zIGlmIGNvbmZpZ3VyZWRcbiAgICBpZiAocmVqZWN0RGFuZ2Vyb3VzUGF0dGVybnMgJiYgIWFuYWx5c2lzLnNhZmUpIHtcbiAgICAgIGlmIChsb2dFdmVudHMpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdVUERBVEVfU0VDVVJJVFlfVklPTEFUSU9OJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0hJR0gnLFxuICAgICAgICAgIHNvdXJjZTogJ1JlZ2V4VmFsaWRhdG9yJyxcbiAgICAgICAgICBkZXRhaWxzOiAnRGFuZ2Vyb3VzIHJlZ2V4IHBhdHRlcm4gcmVqZWN0ZWQnLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiBwYXR0ZXJuLnNvdXJjZSxcbiAgICAgICAgICAgIHJpc2tzOiBhbmFseXNpcy5yaXNrc1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgYFBhdHRlcm4gcmVqZWN0ZWQgZHVlIHRvIFJlRG9TIHJpc2s6ICR7YW5hbHlzaXMucmlza3Muam9pbignLCAnKX1gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgbWF4IGxlbmd0aFxuICAgIGNvbnN0IGVmZmVjdGl2ZU1heExlbmd0aCA9IG1heExlbmd0aCA/PyBhbmFseXNpcy5tYXhTYWZlTGVuZ3RoO1xuICAgIFxuICAgIC8vIENoZWNrIGNvbnRlbnQgbGVuZ3RoXG4gICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gZWZmZWN0aXZlTWF4TGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgYENvbnRlbnQgdG9vIGxhcmdlIGZvciB2YWxpZGF0aW9uOiAke2NvbnRlbnQubGVuZ3RofSBieXRlcyAobWF4OiAke2VmZmVjdGl2ZU1heExlbmd0aH0gZm9yICR7YW5hbHlzaXMuY29tcGxleGl0eX0gY29tcGxleGl0eSBwYXR0ZXJuKWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgcmVnZXggdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHNhZmVDb3B5ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLnNvdXJjZSwgcGF0dGVybi5mbGFncyk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFRyYWNrIGV4ZWN1dGlvbiB0aW1lIGZvciBtb25pdG9yaW5nXG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHNhZmVDb3B5LnRlc3QoY29udGVudCk7XG4gICAgICBjb25zdCBlbGFwc2VkID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIC8vIExvZyBzbG93IHBhdHRlcm5zXG4gICAgICBpZiAoZWxhcHNlZCA+IDUwICYmIGxvZ0V2ZW50cykge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfV0FSTklORycsXG4gICAgICAgICAgc2V2ZXJpdHk6ICdNRURJVU0nLFxuICAgICAgICAgIHNvdXJjZTogJ1JlZ2V4VmFsaWRhdG9yJyxcbiAgICAgICAgICBkZXRhaWxzOiBgU2xvdyByZWdleCBleGVjdXRpb246ICR7ZWxhcHNlZC50b0ZpeGVkKDIpfW1zYCxcbiAgICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgICAgcGF0dGVybjogcGF0dGVybi5zb3VyY2UsXG4gICAgICAgICAgICBjb250ZW50TGVuZ3RoOiBjb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgIGVsYXBzZWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgYW55IHJlZ2V4IGVycm9yc1xuICAgICAgaWYgKGxvZ0V2ZW50cykge1xuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ1VQREFURV9TRUNVUklUWV9WSU9MQVRJT04nLFxuICAgICAgICAgIHNldmVyaXR5OiAnSElHSCcsXG4gICAgICAgICAgc291cmNlOiAnUmVnZXhWYWxpZGF0b3InLFxuICAgICAgICAgIGRldGFpbHM6ICdSZWdleCBleGVjdXRpb24gZXJyb3InLFxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7XG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcidcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbXVsdGlwbGUgcGF0dGVybnMgd2l0aCBzaGFyZWQgcmlzayBhc3Nlc3NtZW50XG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVBbnkoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHBhdHRlcm5zOiBSZWdFeHBbXSxcbiAgICBvcHRpb25zOiBSZWdleFZhbGlkYXRpb25PcHRpb25zID0ge31cbiAgKTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZShjb250ZW50LCBwYXR0ZXJuLCBvcHRpb25zKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhbGwgcGF0dGVybnMgbXVzdCBtYXRjaFxuICAgKi9cbiAgc3RhdGljIHZhbGlkYXRlQWxsKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBwYXR0ZXJuczogUmVnRXhwW10sXG4gICAgb3B0aW9uczogUmVnZXhWYWxpZGF0aW9uT3B0aW9ucyA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKGNvbnRlbnQsIHBhdHRlcm4sIG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHl6ZXMgYSByZWdleCBwYXR0ZXJuIGZvciBwb3RlbnRpYWwgUmVEb1MgdnVsbmVyYWJpbGl0aWVzXG4gICAqIFxuICAgKiBEZXRlY3RzIHBhdHRlcm5zIGtub3duIHRvIGNhdXNlIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZzpcbiAgICogLSBOZXN0ZWQgcXVhbnRpZmllcnM6IChhKykrLCAoYSopKlxuICAgKiAtIEFsdGVybmF0aW9uIHdpdGggb3ZlcmxhcDogKGF8YSkqXG4gICAqIC0gUXVhbnRpZmllZCBncm91cHMgd2l0aCBhbHRlcm5hdGlvbjogKGF8YikrXG4gICAqIC0gQ2F0YXN0cm9waGljIHBhdHRlcm5zOiAoLispKyRcbiAgICovXG4gIHN0YXRpYyBhbmFseXplUGF0dGVybihwYXR0ZXJuOiBSZWdFeHApOiBQYXR0ZXJuQW5hbHlzaXMge1xuICAgIGNvbnN0IHNvdXJjZSA9IHBhdHRlcm4uc291cmNlO1xuICAgIGNvbnN0IHJpc2tzOiBzdHJpbmdbXSA9IFtdO1xuICAgIFxuICAgIC8vIE5lc3RlZCBxdWFudGlmaWVycyAtIGV4dHJlbWVseSBkYW5nZXJvdXNcbiAgICBpZiAoL1xcKFteKV0rWysqXVxcKVsrKl0vLnRlc3Qoc291cmNlKSB8fCBcbiAgICAgICAgL1xcKFteKV0rXFx7W159XStcXH1cXClbKypdLy50ZXN0KHNvdXJjZSkgfHxcbiAgICAgICAgL1xcKFxcdytbKypdXFwpWysqXS8udGVzdChzb3VyY2UpKSB7XG4gICAgICByaXNrcy5wdXNoKCdOZXN0ZWQgcXVhbnRpZmllcnMgZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBBbHRlcm5hdGlvbiB3aXRoIHJlcGV0aXRpb25cbiAgICBpZiAoL1xcKFteKV0qXFx8W14pXSpcXClbKypdLy50ZXN0KHNvdXJjZSkpIHtcbiAgICAgIHJpc2tzLnB1c2goJ1F1YW50aWZpZWQgYWx0ZXJuYXRpb24gZGV0ZWN0ZWQnKTtcbiAgICB9XG5cbiAgICAvLyBBbHRlcm5hdGlvbiB3aXRoIG92ZXJsYXAgKGUuZy4sIChhfGEpKilcbiAgICBjb25zdCBhbHRlcm5hdGlvbk1hdGNoID0gc291cmNlLm1hdGNoKC9cXCgoW158KV0rKVxcfChbXildKylcXCkvZyk7XG4gICAgaWYgKGFsdGVybmF0aW9uTWF0Y2gpIHtcbiAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgYWx0ZXJuYXRpb25NYXRjaCkge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IG1hdGNoLnNsaWNlKDEsIC0xKS5zcGxpdCgnfCcpO1xuICAgICAgICBpZiAocGFydHMuc29tZSgocGFydCwgaSkgPT4gcGFydHMuc2xpY2UoaSArIDEpLmluY2x1ZGVzKHBhcnQpKSkge1xuICAgICAgICAgIHJpc2tzLnB1c2goJ092ZXJsYXBwaW5nIGFsdGVybmF0aW9uIGRldGVjdGVkJyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDYXRhc3Ryb3BoaWMgYmFja3RyYWNraW5nIHBhdHRlcm5zXG4gICAgLy8gQ2hlY2sgZm9yIHBhdHRlcm5zIGxpa2UgKC4rKSssICguKikrLCBldGMuIHRoYXQgY2FuIGNhdXNlIGV4cG9uZW50aWFsIGJhY2t0cmFja2luZ1xuICAgIGlmICgvXFwoW14pXSpcXC5cXCtbXildKlxcKVxcKy8udGVzdChzb3VyY2UpIHx8IC9cXChbXildKlxcLlxcKlteKV0qXFwpXFwrLy50ZXN0KHNvdXJjZSkgfHwgL1xcKFteKV0qXFxcXHdcXCtbXildKlxcKVxcKy8udGVzdChzb3VyY2UpKSB7XG4gICAgICByaXNrcy5wdXNoKCdQb3RlbnRpYWwgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZycpO1xuICAgIH1cblxuICAgIC8vIFVuYm91bmRlZCBsb29rYWhlYWQvbG9va2JlaGluZCB3aXRoIHF1YW50aWZpZXJzXG4gICAgaWYgKC9cXChcXD9bPSE8XS4qWysqXS8udGVzdChzb3VyY2UpKSB7XG4gICAgICByaXNrcy5wdXNoKCdVbmJvdW5kZWQgbG9va2FoZWFkL2xvb2tiZWhpbmQnKTtcbiAgICB9XG5cbiAgICAvLyBQb2x5bm9taWFsIHBhdHRlcm5zIChtdWx0aXBsZSBxdWFudGlmaWVycyBpbiBzZXF1ZW5jZSlcbiAgICBjb25zdCBxdWFudGlmaWVyQ291bnQgPSAoc291cmNlLm1hdGNoKC9bKyo/XXxcXHtcXGQqLD9cXGQqXFx9L2cpIHx8IFtdKS5sZW5ndGg7XG4gICAgaWYgKHF1YW50aWZpZXJDb3VudCA+IDMpIHtcbiAgICAgIHJpc2tzLnB1c2goJ011bHRpcGxlIHF1YW50aWZpZXJzIGRldGVjdGVkJyk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZXJtaW5lIGNvbXBsZXhpdHkgYW5kIHNhZmUgY29udGVudCBsZW5ndGhcbiAgICBsZXQgY29tcGxleGl0eTogJ2xvdycgfCAnbWVkaXVtJyB8ICdoaWdoJztcbiAgICBsZXQgbWF4U2FmZUxlbmd0aDogbnVtYmVyO1xuICAgIFxuICAgIGlmIChyaXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChxdWFudGlmaWVyQ291bnQgPT09IDApIHtcbiAgICAgICAgY29tcGxleGl0eSA9ICdsb3cnO1xuICAgICAgICBtYXhTYWZlTGVuZ3RoID0gdGhpcy5DT01QTEVYSVRZX0xJTUlUUy5sb3c7XG4gICAgICB9IGVsc2UgaWYgKHF1YW50aWZpZXJDb3VudCA8PSAzKSB7XG4gICAgICAgIGNvbXBsZXhpdHkgPSAnbWVkaXVtJztcbiAgICAgICAgbWF4U2FmZUxlbmd0aCA9IHRoaXMuQ09NUExFWElUWV9MSU1JVFMubWVkaXVtO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29tcGxleGl0eSA9ICdoaWdoJztcbiAgICAgICAgbWF4U2FmZUxlbmd0aCA9IHRoaXMuQ09NUExFWElUWV9MSU1JVFMuaGlnaDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpc2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29tcGxleGl0eSA9ICdoaWdoJztcbiAgICAgIG1heFNhZmVMZW5ndGggPSB0aGlzLkNPTVBMRVhJVFlfTElNSVRTLmhpZ2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXhpdHkgPSAnaGlnaCc7XG4gICAgICBtYXhTYWZlTGVuZ3RoID0gdGhpcy5DT01QTEVYSVRZX0xJTUlUUy5oaWdoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzYWZlOiByaXNrcy5sZW5ndGggPT09IDAsXG4gICAgICByaXNrcyxcbiAgICAgIGNvbXBsZXhpdHksXG4gICAgICBtYXhTYWZlTGVuZ3RoXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcmVnZXggcGF0dGVybiB3aXRoIHNhZmV0eSBhbmFseXNpc1xuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVNhZmVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZywgZmxhZ3M/OiBzdHJpbmcpOiBSZWdFeHAge1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXR0ZXJuLCBmbGFncyk7XG4gICAgY29uc3QgYW5hbHlzaXMgPSB0aGlzLmFuYWx5emVQYXR0ZXJuKHJlZ2V4KTtcbiAgICBcbiAgICBpZiAoIWFuYWx5c2lzLnNhZmUpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1VQREFURV9TRUNVUklUWV9WSU9MQVRJT04nLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1JlZ2V4VmFsaWRhdG9yJyxcbiAgICAgICAgZGV0YWlsczogJ1BvdGVudGlhbGx5IGRhbmdlcm91cyByZWdleCBwYXR0ZXJuIGNyZWF0ZWQnLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIHBhdHRlcm4sXG4gICAgICAgICAgcmlza3M6IGFuYWx5c2lzLnJpc2tzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gcmVnZXg7XG4gIH1cbn0iXX0=
@@ -1,46 +0,0 @@
1
- /**
2
- * Secure YAML Parser for DollhouseMCP
3
- *
4
- * Provides safe YAML parsing that prevents deserialization attacks
5
- * by using a restricted schema and pre-validation.
6
- *
7
- * Security: SEC-003 - YAML parsing vulnerability protection
8
- */
9
- import matter from 'gray-matter';
10
- export interface SecureParseOptions {
11
- maxYamlSize?: number;
12
- maxContentSize?: number;
13
- allowedKeys?: string[];
14
- validateContent?: boolean;
15
- }
16
- export interface ParsedContent {
17
- data: Record<string, any>;
18
- content: string;
19
- excerpt?: string;
20
- }
21
- export declare class SecureYamlParser {
22
- private static readonly DEFAULT_OPTIONS;
23
- private static readonly SAFE_SCHEMA;
24
- private static readonly FIELD_VALIDATORS;
25
- /**
26
- * Securely parse content with YAML frontmatter
27
- */
28
- static parse(input: string, options?: SecureParseOptions): ParsedContent;
29
- /**
30
- * Create a secure gray-matter compatible parser
31
- */
32
- static createSecureMatterParser(): {
33
- parse: (input: string) => {
34
- data: Record<string, any>;
35
- content: string;
36
- excerpt: string | undefined;
37
- orig: string;
38
- };
39
- stringify: (content: string, data: any) => string;
40
- };
41
- /**
42
- * Safe wrapper for gray-matter with security validations
43
- */
44
- static safeMatter(input: string, options?: matter.GrayMatterOption<string, any>): matter.GrayMatterFile<string>;
45
- }
46
- //# sourceMappingURL=secureYamlParser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"secureYamlParser.d.ts","sourceRoot":"","sources":["../../../../src/security/secureYamlParser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,MAAM,MAAM,aAAa,CAAC;AAKjC,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAIrC;IAGF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAwB;IAG3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAatC;IAEF;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,aAAa;IA8G5E;;OAEG;IACH,MAAM,CAAC,wBAAwB;uBAEZ,MAAM;;;;;;6BASA,MAAM,QAAQ,GAAG;;IAoB1C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;CAgChH"}
@@ -1,203 +0,0 @@
1
- /**
2
- * Secure YAML Parser for DollhouseMCP
3
- *
4
- * Provides safe YAML parsing that prevents deserialization attacks
5
- * by using a restricted schema and pre-validation.
6
- *
7
- * Security: SEC-003 - YAML parsing vulnerability protection
8
- */
9
- import * as yaml from 'js-yaml';
10
- import matter from 'gray-matter';
11
- import { SecurityError } from '../errors/SecurityError.js';
12
- import { ContentValidator } from './contentValidator.js';
13
- import { SecurityMonitor } from './securityMonitor.js';
14
- export class SecureYamlParser {
15
- static DEFAULT_OPTIONS = {
16
- maxYamlSize: 64 * 1024, // 64KB for YAML
17
- maxContentSize: 1024 * 1024, // 1MB for content
18
- validateContent: true
19
- };
20
- // Allowed YAML types - using FAILSAFE_SCHEMA as base
21
- static SAFE_SCHEMA = yaml.FAILSAFE_SCHEMA;
22
- // Additional validation for specific persona fields
23
- static FIELD_VALIDATORS = {
24
- name: (v) => typeof v === 'string' && v.length <= 100,
25
- description: (v) => typeof v === 'string' && v.length <= 500,
26
- author: (v) => typeof v === 'string' && v.length <= 100,
27
- version: (v) => typeof v === 'string' && /^\d+\.\d+(\.\d+)?(-[a-zA-Z0-9.-]+)?$/.test(v),
28
- category: (v) => typeof v === 'string' && v.length <= 50,
29
- age_rating: (v) => ['all', '13+', '18+'].includes(v),
30
- price: (v) => typeof v === 'string' && (v === 'free' || /^\$\d+\.\d{2}$/.test(v)),
31
- ai_generated: (v) => typeof v === 'boolean' || v === 'true' || v === 'false',
32
- generation_method: (v) => ['human', 'ChatGPT', 'Claude', 'hybrid'].includes(v),
33
- created_date: (v) => typeof v === 'string' && !isNaN(Date.parse(v)),
34
- triggers: (v) => Array.isArray(v) && v.every(t => typeof t === 'string' && t.length <= 50),
35
- content_flags: (v) => Array.isArray(v) && v.every(f => typeof f === 'string' && f.length <= 50)
36
- };
37
- /**
38
- * Securely parse content with YAML frontmatter
39
- */
40
- static parse(input, options = {}) {
41
- const opts = { ...this.DEFAULT_OPTIONS, ...options };
42
- // 1. Size validation
43
- if (input.length > (opts.maxContentSize || this.DEFAULT_OPTIONS.maxContentSize)) {
44
- throw new SecurityError('Content exceeds maximum allowed size', 'medium');
45
- }
46
- // 2. Extract frontmatter boundaries
47
- const frontmatterMatch = input.match(/^---\n([\s\S]*?)\n---/);
48
- if (!frontmatterMatch) {
49
- // No frontmatter, return empty data
50
- return {
51
- data: {},
52
- content: input
53
- };
54
- }
55
- const yamlContent = frontmatterMatch[1];
56
- const markdownContent = input.substring(frontmatterMatch[0].length);
57
- // 3. Validate YAML size
58
- if (yamlContent.length > (opts.maxYamlSize || this.DEFAULT_OPTIONS.maxYamlSize)) {
59
- throw new SecurityError('YAML frontmatter exceeds maximum allowed size', 'medium');
60
- }
61
- // 4. Pre-parse security validation
62
- if (!ContentValidator.validateYamlContent(yamlContent)) {
63
- SecurityMonitor.logSecurityEvent({
64
- type: 'YAML_INJECTION_ATTEMPT',
65
- severity: 'CRITICAL',
66
- source: 'secure_yaml_parser',
67
- details: 'Malicious YAML pattern detected during parsing'
68
- });
69
- throw new SecurityError('Malicious YAML content detected', 'critical');
70
- }
71
- // 5. Parse with safe schema
72
- let data;
73
- try {
74
- data = yaml.load(yamlContent, {
75
- schema: this.SAFE_SCHEMA,
76
- json: false, // Don't allow JSON-specific types
77
- onWarning: (warning) => {
78
- SecurityMonitor.logSecurityEvent({
79
- type: 'YAML_PARSING_WARNING',
80
- severity: 'LOW',
81
- source: 'secure_yaml_parser',
82
- details: `YAML warning: ${warning.message}`
83
- });
84
- }
85
- });
86
- }
87
- catch (error) {
88
- throw new SecurityError(`YAML parsing failed: ${error instanceof Error ? error.message : 'Unknown error'}`, 'high');
89
- }
90
- // 6. Ensure data is an object
91
- if (typeof data !== 'object' || data === null || Array.isArray(data)) {
92
- throw new SecurityError('YAML must contain an object at root level', 'medium');
93
- }
94
- // 7. Validate allowed keys if specified
95
- if (opts.allowedKeys) {
96
- const invalidKeys = Object.keys(data).filter(key => !opts.allowedKeys.includes(key));
97
- if (invalidKeys.length > 0) {
98
- throw new SecurityError(`Invalid YAML keys detected: ${invalidKeys.join(', ')}`, 'medium');
99
- }
100
- }
101
- // 8. Validate field types and content
102
- for (const [key, value] of Object.entries(data)) {
103
- // Check field-specific validators
104
- if (this.FIELD_VALIDATORS[key] && !this.FIELD_VALIDATORS[key](value)) {
105
- throw new SecurityError(`Invalid value for field '${key}'`, 'medium');
106
- }
107
- // Validate string fields for injection patterns
108
- if (typeof value === 'string' && opts.validateContent) {
109
- const validation = ContentValidator.validateAndSanitize(value);
110
- if (!validation.isValid && validation.severity === 'critical') {
111
- throw new SecurityError(`Security threat detected in field '${key}'`, 'critical');
112
- }
113
- // Replace with sanitized content
114
- data[key] = validation.sanitizedContent;
115
- }
116
- }
117
- // 9. Validate markdown content if requested
118
- let finalContent = markdownContent;
119
- if (opts.validateContent) {
120
- const contentValidation = ContentValidator.validateAndSanitize(markdownContent);
121
- if (!contentValidation.isValid && contentValidation.severity === 'critical') {
122
- throw new SecurityError('Security threat detected in content', 'critical');
123
- }
124
- finalContent = contentValidation.sanitizedContent || markdownContent;
125
- }
126
- SecurityMonitor.logSecurityEvent({
127
- type: 'YAML_PARSE_SUCCESS',
128
- severity: 'LOW',
129
- source: 'secure_yaml_parser',
130
- details: `Successfully parsed YAML with ${Object.keys(data).length} fields`
131
- });
132
- return {
133
- data,
134
- content: finalContent
135
- };
136
- }
137
- /**
138
- * Create a secure gray-matter compatible parser
139
- */
140
- static createSecureMatterParser() {
141
- return {
142
- parse: (input) => {
143
- const result = this.parse(input);
144
- return {
145
- data: result.data,
146
- content: result.content,
147
- excerpt: result.excerpt,
148
- orig: input
149
- };
150
- },
151
- stringify: (content, data) => {
152
- // Validate data before stringifying
153
- const validation = ContentValidator.validateMetadata(data);
154
- if (!validation.isValid) {
155
- throw new SecurityError('Cannot stringify content with security threats', 'high');
156
- }
157
- // Use safe YAML dump
158
- const yamlStr = yaml.dump(data, {
159
- schema: this.SAFE_SCHEMA,
160
- skipInvalid: true,
161
- noRefs: true,
162
- noCompatMode: true
163
- });
164
- return `---\n${yamlStr}---\n${content}`;
165
- }
166
- };
167
- }
168
- /**
169
- * Safe wrapper for gray-matter with security validations
170
- */
171
- static safeMatter(input, options) {
172
- // First, use our secure parser
173
- const secureParsed = this.parse(input);
174
- // Then use gray-matter with custom engines
175
- return matter(input, {
176
- ...options,
177
- engines: {
178
- yaml: {
179
- parse: (str) => {
180
- // Use our secure YAML parsing
181
- const parsed = yaml.load(str, {
182
- schema: this.SAFE_SCHEMA,
183
- json: false
184
- });
185
- // Ensure it's an object
186
- if (typeof parsed !== 'object' || parsed === null) {
187
- return {};
188
- }
189
- return parsed;
190
- },
191
- stringify: (obj) => {
192
- return yaml.dump(obj, {
193
- schema: this.SAFE_SCHEMA,
194
- skipInvalid: true,
195
- noRefs: true
196
- });
197
- }
198
- }
199
- }
200
- });
201
- }
202
- }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJlWWFtbFBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEtBQUssSUFBSSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWV2RCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLE1BQU0sQ0FBVSxlQUFlLEdBQXVCO1FBQzVELFdBQVcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFPLGdCQUFnQjtRQUM3QyxjQUFjLEVBQUUsSUFBSSxHQUFHLElBQUksRUFBRyxrQkFBa0I7UUFDaEQsZUFBZSxFQUFFLElBQUk7S0FDdEIsQ0FBQztJQUVGLHFEQUFxRDtJQUM3QyxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7SUFFM0Qsb0RBQW9EO0lBQzVDLE1BQU0sQ0FBVSxnQkFBZ0IsR0FBNEM7UUFDbEYsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxHQUFHO1FBQ3JELFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksR0FBRztRQUM1RCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDdkQs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QUFFO1lBQ25CLEdBQUcsT0FBTztZQUNWLE9BQU8sRUFBRTtnQkFDUCxJQUFJLEVBQUU7b0JBQ0osS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUU7d0JBQ3JCLDhCQUE4Qjt3QkFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7NEJBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVzs0QkFDeEIsSUFBSSxFQUFFLEtBQUs7eUJBQ1osQ0FBQyxDQUFDO3dCQUNILHdCQUF3Qjt3QkFDeEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUNsRCxPQUFPLEVBQUUsQ0FBQzt3QkFDWixDQUFDO3dCQUNELE9BQU8sTUFBZ0IsQ0FBQztvQkFDMUIsQ0FBQztvQkFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDcEIsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXOzRCQUN4QixXQUFXLEVBQUUsSUFBSTs0QkFDakIsTUFBTSxFQUFFLElBQUk7eUJBQ2IsQ0FBQyxDQUFDO29CQUNMLENBQUM7aUJBQ0Y7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlY3VyZSBZQU1MIFBhcnNlciBmb3IgRG9sbGhvdXNlTUNQXG4gKiBcbiAqIFByb3ZpZGVzIHNhZmUgWUFNTCBwYXJzaW5nIHRoYXQgcHJldmVudHMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAqIGJ5IHVzaW5nIGEgcmVzdHJpY3RlZCBzY2hlbWEgYW5kIHByZS12YWxpZGF0aW9uLlxuICogXG4gKiBTZWN1cml0eTogU0VDLTAwMyAtIFlBTUwgcGFyc2luZyB2dWxuZXJhYmlsaXR5IHByb3RlY3Rpb25cbiAqL1xuXG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IG1hdHRlciBmcm9tICdncmF5LW1hdHRlcic7XG5pbXBvcnQgeyBTZWN1cml0eUVycm9yIH0gZnJvbSAnLi4vZXJyb3JzL1NlY3VyaXR5RXJyb3IuanMnO1xuaW1wb3J0IHsgQ29udGVudFZhbGlkYXRvciB9IGZyb20gJy4vY29udGVudFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuL3NlY3VyaXR5TW9uaXRvci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlUGFyc2VPcHRpb25zIHtcbiAgbWF4WWFtbFNpemU/OiBudW1iZXI7XG4gIG1heENvbnRlbnRTaXplPzogbnVtYmVyO1xuICBhbGxvd2VkS2V5cz86IHN0cmluZ1tdO1xuICB2YWxpZGF0ZUNvbnRlbnQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZENvbnRlbnQge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGV4Y2VycHQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTZWN1cmVZYW1sUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9PUFRJT05TOiBTZWN1cmVQYXJzZU9wdGlvbnMgPSB7XG4gICAgbWF4WWFtbFNpemU6IDY0ICogMTAyNCwgICAgICAvLyA2NEtCIGZvciBZQU1MXG4gICAgbWF4Q29udGVudFNpemU6IDEwMjQgKiAxMDI0LCAgLy8gMU1CIGZvciBjb250ZW50XG4gICAgdmFsaWRhdGVDb250ZW50OiB0cnVlXG4gIH07XG5cbiAgLy8gQWxsb3dlZCBZQU1MIHR5cGVzIC0gdXNpbmcgRkFJTFNBRkVfU0NIRU1BIGFzIGJhc2VcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0FGRV9TQ0hFTUEgPSB5YW1sLkZBSUxTQUZFX1NDSEVNQTtcblxuICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gZm9yIHNwZWNpZmljIHBlcnNvbmEgZmllbGRzXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEZJRUxEX1ZBTElEQVRPUlM6IFJlY29yZDxzdHJpbmcsICh2YWx1ZTogYW55KSA9PiBib29sZWFuPiA9IHtcbiAgICBuYW1lOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICBkZXNjcmlwdGlvbjogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MDAsXG4gICAgYXV0aG9yOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYubGVuZ3RoIDw9IDEwMCxcbiAgICB2ZXJzaW9uOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1bYS16QS1aMC05Li1dKyk/JC8udGVzdCh2KSxcbiAgICBjYXRlZ29yeTogKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2Lmxlbmd0aCA8PSA1MCxcbiAgICBhZ2VfcmF0aW5nOiAodikgPT4gWydhbGwnLCAnMTMrJywgJzE4KyddLmluY2x1ZGVzKHYpLFxuICAgIHByaWNlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICh2ID09PSAnZnJlZScgfHwgL15cXCRcXGQrXFwuXFxkezJ9JC8udGVzdCh2KSksXG4gICAgYWlfZ2VuZXJhdGVkOiAodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyB8fCB2ID09PSAndHJ1ZScgfHwgdiA9PT0gJ2ZhbHNlJyxcbiAgICBnZW5lcmF0aW9uX21ldGhvZDogKHYpID0+IFsnaHVtYW4nLCAnQ2hhdEdQVCcsICdDbGF1ZGUnLCAnaHlicmlkJ10uaW5jbHVkZXModiksXG4gICAgY3JlYXRlZF9kYXRlOiAodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmICFpc05hTihEYXRlLnBhcnNlKHYpKSxcbiAgICB0cmlnZ2VyczogKHYpID0+IEFycmF5LmlzQXJyYXkodikgJiYgdi5ldmVyeSh0ID0+IHR5cGVvZiB0ID09PSAnc3RyaW5nJyAmJiB0Lmxlbmd0aCA8PSA1MCksXG4gICAgY29udGVudF9mbGFnczogKHYpID0+IEFycmF5LmlzQXJyYXkodikgJiYgdi5ldmVyeShmID0+IHR5cGVvZiBmID09PSAnc3RyaW5nJyAmJiBmLmxlbmd0aCA8PSA1MClcbiAgfTtcblxuICAvKipcbiAgICogU2VjdXJlbHkgcGFyc2UgY29udGVudCB3aXRoIFlBTUwgZnJvbnRtYXR0ZXJcbiAgICovXG4gIHN0YXRpYyBwYXJzZShpbnB1dDogc3RyaW5nLCBvcHRpb25zOiBTZWN1cmVQYXJzZU9wdGlvbnMgPSB7fSk6IFBhcnNlZENvbnRlbnQge1xuICAgIGNvbnN0IG9wdHMgPSB7IC4uLnRoaXMuREVGQVVMVF9PUFRJT05TLCAuLi5vcHRpb25zIH07XG5cbiAgICAvLyAxLiBTaXplIHZhbGlkYXRpb25cbiAgICBpZiAoaW5wdXQubGVuZ3RoID4gKG9wdHMubWF4Q29udGVudFNpemUgfHwgdGhpcy5ERUZBVUxUX09QVElPTlMubWF4Q29udGVudFNpemUhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0NvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgc2l6ZScsICdtZWRpdW0nKTtcbiAgICB9XG5cbiAgICAvLyAyLiBFeHRyYWN0IGZyb250bWF0dGVyIGJvdW5kYXJpZXNcbiAgICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gaW5wdXQubWF0Y2goL14tLS1cXG4oW1xcc1xcU10qPylcXG4tLS0vKTtcbiAgICBpZiAoIWZyb250bWF0dGVyTWF0Y2gpIHtcbiAgICAgIC8vIE5vIGZyb250bWF0dGVyLCByZXR1cm4gZW1wdHkgZGF0YVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGNvbnRlbnQ6IGlucHV0XG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBpbnB1dC5zdWJzdHJpbmcoZnJvbnRtYXR0ZXJNYXRjaFswXS5sZW5ndGgpO1xuXG4gICAgLy8gMy4gVmFsaWRhdGUgWUFNTCBzaXplXG4gICAgaWYgKHlhbWxDb250ZW50Lmxlbmd0aCA+IChvcHRzLm1heFlhbWxTaXplIHx8IHRoaXMuREVGQVVMVF9PUFRJT05TLm1heFlhbWxTaXplISkpIHtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdZQU1MIGZyb250bWF0dGVyIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIHNpemUnLCAnbWVkaXVtJyk7XG4gICAgfVxuXG4gICAgLy8gNC4gUHJlLXBhcnNlIHNlY3VyaXR5IHZhbGlkYXRpb25cbiAgICBpZiAoIUNvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVZYW1sQ29udGVudCh5YW1sQ29udGVudCkpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgc291cmNlOiAnc2VjdXJlX3lhbWxfcGFyc2VyJyxcbiAgICAgICAgZGV0YWlsczogJ01hbGljaW91cyBZQU1MIHBhdHRlcm4gZGV0ZWN0ZWQgZHVyaW5nIHBhcnNpbmcnXG4gICAgICB9KTtcbiAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdNYWxpY2lvdXMgWUFNTCBjb250ZW50IGRldGVjdGVkJywgJ2NyaXRpY2FsJyk7XG4gICAgfVxuXG4gICAgLy8gNS4gUGFyc2Ugd2l0aCBzYWZlIHNjaGVtYVxuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSB5YW1sLmxvYWQoeWFtbENvbnRlbnQsIHtcbiAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICBqc29uOiBmYWxzZSwgIC8vIERvbid0IGFsbG93IEpTT04tc3BlY2lmaWMgdHlwZXNcbiAgICAgICAgb25XYXJuaW5nOiAod2FybmluZykgPT4ge1xuICAgICAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgICAgIHR5cGU6ICdZQU1MX1BBUlNJTkdfV0FSTklORycsXG4gICAgICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgICAgICAgZGV0YWlsczogYFlBTUwgd2FybmluZzogJHt3YXJuaW5nLm1lc3NhZ2V9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoYFlBTUwgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCwgJ2hpZ2gnKTtcbiAgICB9XG5cbiAgICAvLyA2LiBFbnN1cmUgZGF0YSBpcyBhbiBvYmplY3RcbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IGRhdGEgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ1lBTUwgbXVzdCBjb250YWluIGFuIG9iamVjdCBhdCByb290IGxldmVsJywgJ21lZGl1bScpO1xuICAgIH1cblxuICAgIC8vIDcuIFZhbGlkYXRlIGFsbG93ZWQga2V5cyBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0cy5hbGxvd2VkS2V5cykge1xuICAgICAgY29uc3QgaW52YWxpZEtleXMgPSBPYmplY3Qua2V5cyhkYXRhKS5maWx0ZXIoa2V5ID0+ICFvcHRzLmFsbG93ZWRLZXlzIS5pbmNsdWRlcyhrZXkpKTtcbiAgICAgIGlmIChpbnZhbGlkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKGBJbnZhbGlkIFlBTUwga2V5cyBkZXRlY3RlZDogJHtpbnZhbGlkS2V5cy5qb2luKCcsICcpfWAsICdtZWRpdW0nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LiBWYWxpZGF0ZSBmaWVsZCB0eXBlcyBhbmQgY29udGVudFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAvLyBDaGVjayBmaWVsZC1zcGVjaWZpYyB2YWxpZGF0b3JzXG4gICAgICBpZiAodGhpcy5GSUVMRF9WQUxJREFUT1JTW2tleV0gJiYgIXRoaXMuRklFTERfVkFMSURBVE9SU1trZXldKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3IgZmllbGQgJyR7a2V5fSdgLCAnbWVkaXVtJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFZhbGlkYXRlIHN0cmluZyBmaWVsZHMgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgb3B0cy52YWxpZGF0ZUNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghdmFsaWRhdGlvbi5pc1ZhbGlkICYmIHZhbGlkYXRpb24uc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihgU2VjdXJpdHkgdGhyZWF0IGRldGVjdGVkIGluIGZpZWxkICcke2tleX0nYCwgJ2NyaXRpY2FsJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVwbGFjZSB3aXRoIHNhbml0aXplZCBjb250ZW50XG4gICAgICAgIGRhdGFba2V5XSA9IHZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA5LiBWYWxpZGF0ZSBtYXJrZG93biBjb250ZW50IGlmIHJlcXVlc3RlZFxuICAgIGxldCBmaW5hbENvbnRlbnQgPSBtYXJrZG93bkNvbnRlbnQ7XG4gICAgaWYgKG9wdHMudmFsaWRhdGVDb250ZW50KSB7XG4gICAgICBjb25zdCBjb250ZW50VmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVBbmRTYW5pdGl6ZShtYXJrZG93bkNvbnRlbnQpO1xuICAgICAgaWYgKCFjb250ZW50VmFsaWRhdGlvbi5pc1ZhbGlkICYmIGNvbnRlbnRWYWxpZGF0aW9uLnNldmVyaXR5ID09PSAnY3JpdGljYWwnKSB7XG4gICAgICAgIHRocm93IG5ldyBTZWN1cml0eUVycm9yKCdTZWN1cml0eSB0aHJlYXQgZGV0ZWN0ZWQgaW4gY29udGVudCcsICdjcml0aWNhbCcpO1xuICAgICAgfVxuICAgICAgZmluYWxDb250ZW50ID0gY29udGVudFZhbGlkYXRpb24uc2FuaXRpemVkQ29udGVudCB8fCBtYXJrZG93bkNvbnRlbnQ7XG4gICAgfVxuXG4gICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgdHlwZTogJ1lBTUxfUEFSU0VfU1VDQ0VTUycsXG4gICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICBzb3VyY2U6ICdzZWN1cmVfeWFtbF9wYXJzZXInLFxuICAgICAgZGV0YWlsczogYFN1Y2Nlc3NmdWxseSBwYXJzZWQgWUFNTCB3aXRoICR7T2JqZWN0LmtleXMoZGF0YSkubGVuZ3RofSBmaWVsZHNgXG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIGNvbnRlbnQ6IGZpbmFsQ29udGVudFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgc2VjdXJlIGdyYXktbWF0dGVyIGNvbXBhdGlibGUgcGFyc2VyXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU2VjdXJlTWF0dGVyUGFyc2VyKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZTogKGlucHV0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShpbnB1dCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGEsXG4gICAgICAgICAgY29udGVudDogcmVzdWx0LmNvbnRlbnQsXG4gICAgICAgICAgZXhjZXJwdDogcmVzdWx0LmV4Y2VycHQsXG4gICAgICAgICAgb3JpZzogaW5wdXRcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzdHJpbmdpZnk6IChjb250ZW50OiBzdHJpbmcsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAvLyBWYWxpZGF0ZSBkYXRhIGJlZm9yZSBzdHJpbmdpZnlpbmdcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVNZXRhZGF0YShkYXRhKTtcbiAgICAgICAgaWYgKCF2YWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignQ2Fubm90IHN0cmluZ2lmeSBjb250ZW50IHdpdGggc2VjdXJpdHkgdGhyZWF0cycsICdoaWdoJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2Ugc2FmZSBZQU1MIGR1bXBcbiAgICAgICAgY29uc3QgeWFtbFN0ciA9IHlhbWwuZHVtcChkYXRhLCB7XG4gICAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICAgIHNraXBJbnZhbGlkOiB0cnVlLFxuICAgICAgICAgIG5vUmVmczogdHJ1ZSxcbiAgICAgICAgICBub0NvbXBhdE1vZGU6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGAtLS1cXG4ke3lhbWxTdHJ9LS0tXFxuJHtjb250ZW50fWA7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYWZlIHdyYXBwZXIgZm9yIGdyYXktbWF0dGVyIHdpdGggc2VjdXJpdHkgdmFsaWRhdGlvbnNcbiAgICovXG4gIHN0YXRpYyBzYWZlTWF0dGVyKGlucHV0OiBzdHJpbmcsIG9wdGlvbnM/OiBtYXR0ZXIuR3JheU1hdHRlck9wdGlvbjxzdHJpbmcsIGFueT4pOiBtYXR0ZXIuR3JheU1hdHRlckZpbGU8c3RyaW5nPiB7XG4gICAgLy8gRmlyc3QsIHVzZSBvdXIgc2VjdXJlIHBhcnNlclxuICAgIGNvbnN0IHNlY3VyZVBhcnNlZCA9IHRoaXMucGFyc2UoaW5wdXQpO1xuXG4gICAgLy8gVGhlbiB1c2UgZ3JheS1tYXR0ZXIgd2l0aCBjdXN0b20gZW5naW5lc1xuICAgIHJldHVybiBtYXR0ZXIoaW5wdXQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBlbmdpbmVzOiB7XG4gICAgICAgIHlhbWw6IHtcbiAgICAgICAgICBwYXJzZTogKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBVc2Ugb3VyIHNlY3VyZSBZQU1MIHBhcnNpbmdcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHlhbWwubG9hZChzdHIsIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICAgICAgICBqc29uOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBFbnN1cmUgaXQncyBhbiBvYmplY3RcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0JyB8fCBwYXJzZWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZCBhcyBvYmplY3Q7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHJpbmdpZnk6IChvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHlhbWwuZHVtcChvYmosIHtcbiAgICAgICAgICAgICAgc2NoZW1hOiB0aGlzLlNBRkVfU0NIRU1BLFxuICAgICAgICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgbm9SZWZzOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSJdfQ==
@@ -1,58 +0,0 @@
1
- /**
2
- * Security Monitor for DollhouseMCP
3
- *
4
- * Centralized security event logging and monitoring system
5
- * for tracking and alerting on security-related events.
6
- */
7
- export interface SecurityEvent {
8
- type: 'CONTENT_INJECTION_ATTEMPT' | 'YAML_INJECTION_ATTEMPT' | 'PATH_TRAVERSAL_ATTEMPT' | 'TOKEN_VALIDATION_FAILURE' | 'UPDATE_SECURITY_VIOLATION' | 'RATE_LIMIT_EXCEEDED' | 'YAML_PARSING_WARNING' | 'YAML_PARSE_SUCCESS' | 'TOKEN_VALIDATION_SUCCESS' | 'RATE_LIMIT_WARNING' | 'TOKEN_CACHE_CLEARED' | 'YAML_UNICODE_ATTACK' | 'UNICODE_DIRECTION_OVERRIDE' | 'UNICODE_MIXED_SCRIPT' | 'UNICODE_VALIDATION_ERROR' | 'CONTENT_SIZE_EXCEEDED' | 'INCLUDE_DEPTH_EXCEEDED' | 'TEMPLATE_RENDERED' | 'TEMPLATE_INCLUDE' | 'TEMPLATE_LOADED' | 'TEMPLATE_SAVED' | 'TEMPLATE_DELETED' | 'MEMORY_CREATED' | 'MEMORY_ADDED' | 'MEMORY_SEARCHED' | 'SENSITIVE_MEMORY_DELETED' | 'RETENTION_POLICY_ENFORCED' | 'MEMORY_CLEARED' | 'MEMORY_LOADED' | 'MEMORY_SAVED' | 'MEMORY_DELETED' | 'MEMORY_LOAD_FAILED' | 'MEMORY_SAVE_FAILED' | 'MEMORY_LIST_ITEM_FAILED' | 'MEMORY_IMPORT_FAILED' | 'MEMORY_DESERIALIZE_FAILED' | 'ELEMENT_CREATED' | 'ELEMENT_DELETED' | 'AGENT_DECISION' | 'RULE_ENGINE_CONFIG_UPDATE' | 'RULE_ENGINE_CONFIG_VALIDATION_ERROR' | 'GOAL_TEMPLATE_APPLIED' | 'GOAL_TEMPLATE_VALIDATION';
9
- severity: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
10
- source: string;
11
- details: string;
12
- userAgent?: string;
13
- ip?: string;
14
- additionalData?: Record<string, any>;
15
- }
16
- export interface SecurityLogEntry extends SecurityEvent {
17
- timestamp: string;
18
- id: string;
19
- }
20
- export declare class SecurityMonitor {
21
- private static eventCount;
22
- private static readonly events;
23
- private static readonly MAX_EVENTS;
24
- /**
25
- * Logs a security event
26
- */
27
- static logSecurityEvent(event: SecurityEvent): void;
28
- /**
29
- * Sends security alerts for critical events
30
- */
31
- private static sendSecurityAlert;
32
- /**
33
- * Gets recent security events for analysis
34
- */
35
- static getRecentEvents(count?: number): SecurityLogEntry[];
36
- /**
37
- * Gets events by severity
38
- */
39
- static getEventsBySeverity(severity: SecurityEvent['severity']): SecurityLogEntry[];
40
- /**
41
- * Gets events by type
42
- */
43
- static getEventsByType(type: SecurityEvent['type']): SecurityLogEntry[];
44
- /**
45
- * Generates a security report
46
- */
47
- static generateSecurityReport(): {
48
- totalEvents: number;
49
- eventsBySeverity: Record<string, number>;
50
- eventsByType: Record<string, number>;
51
- recentCriticalEvents: SecurityLogEntry[];
52
- };
53
- /**
54
- * Clears old events (for memory management)
55
- */
56
- static clearOldEvents(daysToKeep?: number): void;
57
- }
58
- //# sourceMappingURL=securityMonitor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"securityMonitor.d.ts","sourceRoot":"","sources":["../../../../src/security/securityMonitor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,2BAA2B,GAAG,wBAAwB,GAAG,wBAAwB,GACjF,0BAA0B,GAAG,2BAA2B,GAAG,qBAAqB,GAChF,sBAAsB,GAAG,oBAAoB,GAAG,0BAA0B,GAC1E,oBAAoB,GAAG,qBAAqB,GAAG,qBAAqB,GACpE,4BAA4B,GAAG,sBAAsB,GAAG,0BAA0B,GAClF,uBAAuB,GAAG,wBAAwB,GAAG,mBAAmB,GACxE,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,kBAAkB,GAC9E,gBAAgB,GAAG,cAAc,GAAG,iBAAiB,GAAG,0BAA0B,GAClF,2BAA2B,GAAG,gBAAgB,GAAG,eAAe,GAAG,cAAc,GACjF,gBAAgB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,yBAAyB,GAC1F,sBAAsB,GAAG,2BAA2B,GAAG,iBAAiB,GAAG,iBAAiB,GAC5F,gBAAgB,GAAG,2BAA2B,GAAG,qCAAqC,GACtF,uBAAuB,GAAG,0BAA0B,CAAC;IAC3D,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAK;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACxD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAE1C;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAsBnD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAsBhC;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,GAAE,MAAY,GAAG,gBAAgB,EAAE;IAI/D;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,gBAAgB,EAAE;IAInF;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,gBAAgB,EAAE;IAIvE;;OAEG;IACH,MAAM,CAAC,sBAAsB,IAAI;QAC/B,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;KAC1C;IAuBD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,GAAE,MAAU,GAAG,IAAI;CAUpD"}