agentic-qe 2.7.3 → 2.8.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 (620) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/README.md +67 -2
  3. package/dist/agents/AccessibilityAllyAgent.d.ts +0 -7
  4. package/dist/agents/AccessibilityAllyAgent.d.ts.map +1 -1
  5. package/dist/agents/AccessibilityAllyAgent.js +0 -15
  6. package/dist/agents/AccessibilityAllyAgent.js.map +1 -1
  7. package/dist/agents/ApiContractValidatorAgent.js +4 -4
  8. package/dist/agents/ApiContractValidatorAgent.js.map +1 -1
  9. package/dist/agents/BaseAgent.d.ts +2 -0
  10. package/dist/agents/BaseAgent.d.ts.map +1 -1
  11. package/dist/agents/BaseAgent.js +43 -41
  12. package/dist/agents/BaseAgent.js.map +1 -1
  13. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts +0 -8
  14. package/dist/agents/CodeComplexityAnalyzerAgent.d.ts.map +1 -1
  15. package/dist/agents/CodeComplexityAnalyzerAgent.js +0 -15
  16. package/dist/agents/CodeComplexityAnalyzerAgent.js.map +1 -1
  17. package/dist/agents/CodeIntelligenceAgent.d.ts +0 -1
  18. package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -1
  19. package/dist/agents/CodeIntelligenceAgent.js +0 -2
  20. package/dist/agents/CodeIntelligenceAgent.js.map +1 -1
  21. package/dist/agents/DeploymentReadinessAgent.d.ts.map +1 -1
  22. package/dist/agents/DeploymentReadinessAgent.js +30 -30
  23. package/dist/agents/DeploymentReadinessAgent.js.map +1 -1
  24. package/dist/agents/FlakyTestHunterAgent.d.ts +0 -10
  25. package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
  26. package/dist/agents/FlakyTestHunterAgent.js +10 -20
  27. package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
  28. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  29. package/dist/agents/FleetCommanderAgent.js +28 -28
  30. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  31. package/dist/agents/LearningAgent.js +1 -1
  32. package/dist/agents/LearningAgent.js.map +1 -1
  33. package/dist/agents/PerformanceTesterAgent.d.ts.map +1 -1
  34. package/dist/agents/PerformanceTesterAgent.js +25 -25
  35. package/dist/agents/PerformanceTesterAgent.js.map +1 -1
  36. package/dist/agents/ProductionIntelligenceAgent.d.ts.map +1 -1
  37. package/dist/agents/ProductionIntelligenceAgent.js +20 -20
  38. package/dist/agents/ProductionIntelligenceAgent.js.map +1 -1
  39. package/dist/agents/QXPartnerAgent.d.ts +0 -8
  40. package/dist/agents/QXPartnerAgent.d.ts.map +1 -1
  41. package/dist/agents/QXPartnerAgent.js +0 -15
  42. package/dist/agents/QXPartnerAgent.js.map +1 -1
  43. package/dist/agents/QualityAnalyzerAgent.d.ts +0 -7
  44. package/dist/agents/QualityAnalyzerAgent.d.ts.map +1 -1
  45. package/dist/agents/QualityAnalyzerAgent.js +0 -16
  46. package/dist/agents/QualityAnalyzerAgent.js.map +1 -1
  47. package/dist/agents/RegressionRiskAnalyzerAgent.d.ts.map +1 -1
  48. package/dist/agents/RegressionRiskAnalyzerAgent.js +18 -18
  49. package/dist/agents/RegressionRiskAnalyzerAgent.js.map +1 -1
  50. package/dist/agents/RequirementsValidatorAgent.d.ts.map +1 -1
  51. package/dist/agents/RequirementsValidatorAgent.js +21 -21
  52. package/dist/agents/RequirementsValidatorAgent.js.map +1 -1
  53. package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
  54. package/dist/agents/SecurityScannerAgent.js +38 -38
  55. package/dist/agents/SecurityScannerAgent.js.map +1 -1
  56. package/dist/agents/TestDataArchitectAgent.d.ts.map +1 -1
  57. package/dist/agents/TestDataArchitectAgent.js +29 -29
  58. package/dist/agents/TestDataArchitectAgent.js.map +1 -1
  59. package/dist/agents/TestExecutorAgent.d.ts +0 -7
  60. package/dist/agents/TestExecutorAgent.d.ts.map +1 -1
  61. package/dist/agents/TestExecutorAgent.js +35 -51
  62. package/dist/agents/TestExecutorAgent.js.map +1 -1
  63. package/dist/agents/TestGeneratorAgent.d.ts +0 -7
  64. package/dist/agents/TestGeneratorAgent.d.ts.map +1 -1
  65. package/dist/agents/TestGeneratorAgent.js +0 -16
  66. package/dist/agents/TestGeneratorAgent.js.map +1 -1
  67. package/dist/agents/adapters/AgentLLMAdapter.d.ts.map +1 -1
  68. package/dist/agents/adapters/AgentLLMAdapter.js +5 -4
  69. package/dist/agents/adapters/AgentLLMAdapter.js.map +1 -1
  70. package/dist/agents/adapters/CoordinatorAdapter.d.ts.map +1 -1
  71. package/dist/agents/adapters/CoordinatorAdapter.js +2 -1
  72. package/dist/agents/adapters/CoordinatorAdapter.js.map +1 -1
  73. package/dist/agents/n8n/N8nAPIClient.d.ts.map +1 -1
  74. package/dist/agents/n8n/N8nAPIClient.js +3 -2
  75. package/dist/agents/n8n/N8nAPIClient.js.map +1 -1
  76. package/dist/agents/n8n/N8nAuditPersistence.d.ts.map +1 -1
  77. package/dist/agents/n8n/N8nAuditPersistence.js +2 -1
  78. package/dist/agents/n8n/N8nAuditPersistence.js.map +1 -1
  79. package/dist/agents/n8n/N8nBaseAgent.js +1 -1
  80. package/dist/agents/n8n/N8nBaseAgent.js.map +1 -1
  81. package/dist/agents/n8n/N8nComplianceValidatorAgent.js +1 -1
  82. package/dist/agents/n8n/N8nComplianceValidatorAgent.js.map +1 -1
  83. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js +1 -1
  84. package/dist/agents/n8n/N8nMonitoringValidatorAgent.js.map +1 -1
  85. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js +1 -1
  86. package/dist/agents/n8n/N8nReplayabilityTesterAgent.js.map +1 -1
  87. package/dist/agents/n8n/N8nSecurityAuditorAgent.js +1 -1
  88. package/dist/agents/n8n/N8nSecurityAuditorAgent.js.map +1 -1
  89. package/dist/agents/pool/AgentPool.d.ts.map +1 -1
  90. package/dist/agents/pool/AgentPool.js +2 -1
  91. package/dist/agents/pool/AgentPool.js.map +1 -1
  92. package/dist/agents/pool/QEAgentPoolFactory.d.ts.map +1 -1
  93. package/dist/agents/pool/QEAgentPoolFactory.js +2 -1
  94. package/dist/agents/pool/QEAgentPoolFactory.js.map +1 -1
  95. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  96. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  97. package/dist/cli/commands/agent/spawn.js +95 -8
  98. package/dist/cli/commands/agent/spawn.js.map +1 -1
  99. package/dist/cli/index.js +91 -0
  100. package/dist/cli/index.js.map +1 -1
  101. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  102. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  103. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  104. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  105. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  106. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  107. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  108. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  109. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  110. package/dist/edge/adapters/index.d.ts +12 -0
  111. package/dist/edge/adapters/index.d.ts.map +1 -0
  112. package/dist/edge/adapters/index.js +22 -0
  113. package/dist/edge/adapters/index.js.map +1 -0
  114. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  115. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  116. package/dist/edge/browser/BrowserAgent.js +743 -0
  117. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  118. package/dist/edge/index.d.ts +34 -0
  119. package/dist/edge/index.d.ts.map +1 -0
  120. package/dist/edge/index.js +114 -0
  121. package/dist/edge/index.js.map +1 -0
  122. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  123. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  124. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  125. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  126. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  127. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  128. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  129. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  130. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  131. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  132. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  133. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  134. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  135. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  136. package/dist/edge/p2p/coordination/index.js +107 -0
  137. package/dist/edge/p2p/coordination/index.js.map +1 -0
  138. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  139. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  140. package/dist/edge/p2p/coordination/types.js +366 -0
  141. package/dist/edge/p2p/coordination/types.js.map +1 -0
  142. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  143. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  144. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  145. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  146. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  147. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  148. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  149. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  150. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  151. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  152. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  153. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  154. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  155. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  156. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  157. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  158. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  159. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  160. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  161. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  162. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  163. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  164. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  165. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  166. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  167. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  168. package/dist/edge/p2p/crdt/index.js +120 -0
  169. package/dist/edge/p2p/crdt/index.js.map +1 -0
  170. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  171. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  172. package/dist/edge/p2p/crdt/types.js +208 -0
  173. package/dist/edge/p2p/crdt/types.js.map +1 -0
  174. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  175. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  176. package/dist/edge/p2p/crypto/Identity.js +449 -0
  177. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  178. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  179. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  180. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  181. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  182. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  183. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  184. package/dist/edge/p2p/crypto/Signer.js +357 -0
  185. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  186. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  187. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  188. package/dist/edge/p2p/crypto/index.js +158 -0
  189. package/dist/edge/p2p/crypto/index.js.map +1 -0
  190. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  191. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  192. package/dist/edge/p2p/crypto/types.js +42 -0
  193. package/dist/edge/p2p/crypto/types.js.map +1 -0
  194. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  195. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  196. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  197. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  198. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  199. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  200. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  201. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  202. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  203. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  204. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  205. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  206. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  207. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  209. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  210. package/dist/edge/p2p/federated/index.d.ts +65 -0
  211. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  212. package/dist/edge/p2p/federated/index.js +110 -0
  213. package/dist/edge/p2p/federated/index.js.map +1 -0
  214. package/dist/edge/p2p/federated/types.d.ts +905 -0
  215. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  216. package/dist/edge/p2p/federated/types.js +339 -0
  217. package/dist/edge/p2p/federated/types.js.map +1 -0
  218. package/dist/edge/p2p/index.d.ts +156 -0
  219. package/dist/edge/p2p/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/index.js +242 -0
  221. package/dist/edge/p2p/index.js.map +1 -0
  222. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  223. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  224. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  225. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  226. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  227. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  228. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  229. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  230. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  231. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  232. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  233. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  234. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  235. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  236. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  237. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  238. package/dist/edge/p2p/nat/index.d.ts +74 -0
  239. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  240. package/dist/edge/p2p/nat/index.js +104 -0
  241. package/dist/edge/p2p/nat/index.js.map +1 -0
  242. package/dist/edge/p2p/nat/types.d.ts +583 -0
  243. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  244. package/dist/edge/p2p/nat/types.js +267 -0
  245. package/dist/edge/p2p/nat/types.js.map +1 -0
  246. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  247. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  248. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  249. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  250. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  251. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  252. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  253. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  254. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  255. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  256. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  257. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  258. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  259. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  260. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  261. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  262. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  263. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  264. package/dist/edge/p2p/protocol/index.js +206 -0
  265. package/dist/edge/p2p/protocol/index.js.map +1 -0
  266. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  267. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  268. package/dist/edge/p2p/protocol/types.js +490 -0
  269. package/dist/edge/p2p/protocol/types.js.map +1 -0
  270. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  271. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  272. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  273. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  274. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  275. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  276. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  277. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  278. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  279. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  280. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  281. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  282. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  283. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  284. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  285. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  286. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  287. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  288. package/dist/edge/p2p/sharing/index.js +152 -0
  289. package/dist/edge/p2p/sharing/index.js.map +1 -0
  290. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  291. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  292. package/dist/edge/p2p/sharing/types.js +264 -0
  293. package/dist/edge/p2p/sharing/types.js.map +1 -0
  294. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  295. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  296. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  297. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  298. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  299. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  300. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  301. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  302. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  303. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  304. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  305. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  306. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  307. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  308. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  309. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  310. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  311. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  312. package/dist/edge/p2p/webrtc/index.js +164 -0
  313. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  314. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  315. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  316. package/dist/edge/p2p/webrtc/types.js +245 -0
  317. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  318. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  319. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  320. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  321. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  322. package/dist/edge/server/SignalingServer.d.ts +71 -0
  323. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  324. package/dist/edge/server/SignalingServer.js +429 -0
  325. package/dist/edge/server/SignalingServer.js.map +1 -0
  326. package/dist/edge/server/index.d.ts +64 -0
  327. package/dist/edge/server/index.d.ts.map +1 -0
  328. package/dist/edge/server/index.js +318 -0
  329. package/dist/edge/server/index.js.map +1 -0
  330. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  331. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  332. package/dist/edge/types/browser-agent.types.js +116 -0
  333. package/dist/edge/types/browser-agent.types.js.map +1 -0
  334. package/dist/edge/types/index.d.ts +11 -0
  335. package/dist/edge/types/index.d.ts.map +1 -0
  336. package/dist/edge/types/index.js +17 -0
  337. package/dist/edge/types/index.js.map +1 -0
  338. package/dist/edge/types/storage.types.d.ts +207 -0
  339. package/dist/edge/types/storage.types.d.ts.map +1 -0
  340. package/dist/edge/types/storage.types.js +47 -0
  341. package/dist/edge/types/storage.types.js.map +1 -0
  342. package/dist/edge/wasm/shims.d.ts +224 -0
  343. package/dist/edge/wasm/shims.d.ts.map +1 -0
  344. package/dist/edge/wasm/shims.js +667 -0
  345. package/dist/edge/wasm/shims.js.map +1 -0
  346. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  347. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  348. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  349. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  350. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  351. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  352. package/dist/mcp/handlers/filtered/index.js +16 -27
  353. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  354. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  355. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  356. package/dist/mcp/handlers/integration/index.js +7 -7
  357. package/dist/mcp/handlers/integration/index.js.map +1 -1
  358. package/dist/mcp/server-instructions.d.ts +1 -1
  359. package/dist/mcp/server-instructions.js +1 -1
  360. package/dist/mcp/server.d.ts.map +1 -1
  361. package/dist/mcp/server.js +14 -0
  362. package/dist/mcp/server.js.map +1 -1
  363. package/dist/mcp/tools.d.ts +8 -0
  364. package/dist/mcp/tools.d.ts.map +1 -1
  365. package/dist/mcp/tools.js +412 -1
  366. package/dist/mcp/tools.js.map +1 -1
  367. package/dist/persistence/migrations/all-migrations.d.ts.map +1 -1
  368. package/dist/persistence/migrations/all-migrations.js +44 -1
  369. package/dist/persistence/migrations/all-migrations.js.map +1 -1
  370. package/dist/planning/GOAPPlanner.d.ts +1 -0
  371. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  372. package/dist/planning/GOAPPlanner.js +15 -2
  373. package/dist/planning/GOAPPlanner.js.map +1 -1
  374. package/dist/planning/PlanLearning.d.ts.map +1 -1
  375. package/dist/planning/PlanLearning.js +2 -1
  376. package/dist/planning/PlanLearning.js.map +1 -1
  377. package/dist/planning/PlanSimilarity.d.ts.map +1 -1
  378. package/dist/planning/PlanSimilarity.js +2 -1
  379. package/dist/planning/PlanSimilarity.js.map +1 -1
  380. package/package.json +29 -8
  381. package/dist/alerting/AlertManager.d.ts +0 -120
  382. package/dist/alerting/AlertManager.d.ts.map +0 -1
  383. package/dist/alerting/AlertManager.js +0 -345
  384. package/dist/alerting/AlertManager.js.map +0 -1
  385. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  386. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  387. package/dist/alerting/FeedbackRouter.js +0 -331
  388. package/dist/alerting/FeedbackRouter.js.map +0 -1
  389. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  390. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  391. package/dist/alerting/StrategyApplicator.js +0 -299
  392. package/dist/alerting/StrategyApplicator.js.map +0 -1
  393. package/dist/alerting/index.d.ts +0 -68
  394. package/dist/alerting/index.d.ts.map +0 -1
  395. package/dist/alerting/index.js +0 -112
  396. package/dist/alerting/index.js.map +0 -1
  397. package/dist/alerting/types.d.ts +0 -118
  398. package/dist/alerting/types.d.ts.map +0 -1
  399. package/dist/alerting/types.js +0 -11
  400. package/dist/alerting/types.js.map +0 -1
  401. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  402. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  403. package/dist/cli/commands/fleet/backup.js +0 -88
  404. package/dist/cli/commands/fleet/backup.js.map +0 -1
  405. package/dist/cli/commands/fleet/health.d.ts +0 -154
  406. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  407. package/dist/cli/commands/fleet/health.js +0 -483
  408. package/dist/cli/commands/fleet/health.js.map +0 -1
  409. package/dist/cli/commands/fleet/init.d.ts +0 -11
  410. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  411. package/dist/cli/commands/fleet/init.js +0 -91
  412. package/dist/cli/commands/fleet/init.js.map +0 -1
  413. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  414. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  415. package/dist/cli/commands/fleet/logs.js +0 -267
  416. package/dist/cli/commands/fleet/logs.js.map +0 -1
  417. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  418. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  419. package/dist/cli/commands/fleet/metrics.js +0 -369
  420. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  421. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  422. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  423. package/dist/cli/commands/fleet/monitor.js +0 -237
  424. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  425. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  426. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  427. package/dist/cli/commands/fleet/optimize.js +0 -135
  428. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  429. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  430. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  431. package/dist/cli/commands/fleet/recover.js +0 -99
  432. package/dist/cli/commands/fleet/recover.js.map +0 -1
  433. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  434. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  435. package/dist/cli/commands/fleet/restart.js +0 -290
  436. package/dist/cli/commands/fleet/restart.js.map +0 -1
  437. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  438. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  439. package/dist/cli/commands/fleet/scale.js +0 -77
  440. package/dist/cli/commands/fleet/scale.js.map +0 -1
  441. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  442. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  443. package/dist/cli/commands/fleet/shutdown.js +0 -307
  444. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  445. package/dist/cli/commands/fleet/status.d.ts +0 -10
  446. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  447. package/dist/cli/commands/fleet/status.js +0 -97
  448. package/dist/cli/commands/fleet/status.js.map +0 -1
  449. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  450. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  451. package/dist/cli/commands/fleet/topology.js +0 -376
  452. package/dist/cli/commands/fleet/topology.js.map +0 -1
  453. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  454. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  455. package/dist/cli/commands/monitor/alerts.js +0 -168
  456. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  457. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  458. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  459. package/dist/cli/commands/monitor/analyze.js +0 -209
  460. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  461. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  462. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  463. package/dist/cli/commands/monitor/compare.js +0 -177
  464. package/dist/cli/commands/monitor/compare.js.map +0 -1
  465. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  466. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  467. package/dist/cli/commands/monitor/dashboard.js +0 -157
  468. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  469. package/dist/cli/commands/monitor/export.d.ts +0 -36
  470. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  471. package/dist/cli/commands/monitor/export.js +0 -157
  472. package/dist/cli/commands/monitor/export.js.map +0 -1
  473. package/dist/cli/commands/monitor/index.d.ts +0 -11
  474. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  475. package/dist/cli/commands/monitor/index.js +0 -14
  476. package/dist/cli/commands/monitor/index.js.map +0 -1
  477. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  478. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  479. package/dist/cli/commands/quality/baseline.js +0 -124
  480. package/dist/cli/commands/quality/baseline.js.map +0 -1
  481. package/dist/cli/commands/quality/compare.d.ts +0 -36
  482. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  483. package/dist/cli/commands/quality/compare.js +0 -136
  484. package/dist/cli/commands/quality/compare.js.map +0 -1
  485. package/dist/cli/commands/quality/decision.d.ts +0 -81
  486. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  487. package/dist/cli/commands/quality/decision.js +0 -319
  488. package/dist/cli/commands/quality/decision.js.map +0 -1
  489. package/dist/cli/commands/quality/gate.d.ts +0 -47
  490. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  491. package/dist/cli/commands/quality/gate.js +0 -205
  492. package/dist/cli/commands/quality/gate.js.map +0 -1
  493. package/dist/cli/commands/quality/index.d.ts +0 -17
  494. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  495. package/dist/cli/commands/quality/index.js +0 -41
  496. package/dist/cli/commands/quality/index.js.map +0 -1
  497. package/dist/cli/commands/quality/policy.d.ts +0 -57
  498. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  499. package/dist/cli/commands/quality/policy.js +0 -359
  500. package/dist/cli/commands/quality/policy.js.map +0 -1
  501. package/dist/cli/commands/quality/risk.d.ts +0 -41
  502. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  503. package/dist/cli/commands/quality/risk.js +0 -255
  504. package/dist/cli/commands/quality/risk.js.map +0 -1
  505. package/dist/cli/commands/quality/trends.d.ts +0 -40
  506. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  507. package/dist/cli/commands/quality/trends.js +0 -122
  508. package/dist/cli/commands/quality/trends.js.map +0 -1
  509. package/dist/cli/commands/quality/validate.d.ts +0 -44
  510. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  511. package/dist/cli/commands/quality/validate.js +0 -234
  512. package/dist/cli/commands/quality/validate.js.map +0 -1
  513. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  514. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  515. package/dist/cli/commands/test/analyze-failures.js +0 -113
  516. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  517. package/dist/cli/commands/test/clean.d.ts +0 -3
  518. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  519. package/dist/cli/commands/test/clean.js +0 -148
  520. package/dist/cli/commands/test/clean.js.map +0 -1
  521. package/dist/cli/commands/test/debug.d.ts +0 -3
  522. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  523. package/dist/cli/commands/test/debug.js +0 -167
  524. package/dist/cli/commands/test/debug.js.map +0 -1
  525. package/dist/cli/commands/test/diff.d.ts +0 -3
  526. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  527. package/dist/cli/commands/test/diff.js +0 -195
  528. package/dist/cli/commands/test/diff.js.map +0 -1
  529. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  530. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  531. package/dist/cli/commands/test/flakiness.js +0 -121
  532. package/dist/cli/commands/test/flakiness.js.map +0 -1
  533. package/dist/cli/commands/test/index.d.ts +0 -17
  534. package/dist/cli/commands/test/index.d.ts.map +0 -1
  535. package/dist/cli/commands/test/index.js +0 -45
  536. package/dist/cli/commands/test/index.js.map +0 -1
  537. package/dist/cli/commands/test/mutate.d.ts +0 -29
  538. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  539. package/dist/cli/commands/test/mutate.js +0 -163
  540. package/dist/cli/commands/test/mutate.js.map +0 -1
  541. package/dist/cli/commands/test/parallel.d.ts +0 -3
  542. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  543. package/dist/cli/commands/test/parallel.js +0 -117
  544. package/dist/cli/commands/test/parallel.js.map +0 -1
  545. package/dist/cli/commands/test/profile.d.ts +0 -3
  546. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  547. package/dist/cli/commands/test/profile.js +0 -156
  548. package/dist/cli/commands/test/profile.js.map +0 -1
  549. package/dist/cli/commands/test/queue.d.ts +0 -3
  550. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  551. package/dist/cli/commands/test/queue.js +0 -140
  552. package/dist/cli/commands/test/queue.js.map +0 -1
  553. package/dist/cli/commands/test/retry.d.ts +0 -3
  554. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  555. package/dist/cli/commands/test/retry.js +0 -105
  556. package/dist/cli/commands/test/retry.js.map +0 -1
  557. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  558. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  559. package/dist/cli/commands/test/snapshot.js +0 -176
  560. package/dist/cli/commands/test/snapshot.js.map +0 -1
  561. package/dist/cli/commands/test/trace.d.ts +0 -3
  562. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  563. package/dist/cli/commands/test/trace.js +0 -137
  564. package/dist/cli/commands/test/trace.js.map +0 -1
  565. package/dist/cli/commands/test/watch.d.ts +0 -3
  566. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  567. package/dist/cli/commands/test/watch.js +0 -130
  568. package/dist/cli/commands/test/watch.js.map +0 -1
  569. package/dist/cli/index-spec.d.ts +0 -3
  570. package/dist/cli/index-spec.d.ts.map +0 -1
  571. package/dist/cli/index-spec.js +0 -154
  572. package/dist/cli/index-spec.js.map +0 -1
  573. package/dist/cli/index-working.d.ts +0 -7
  574. package/dist/cli/index-working.d.ts.map +0 -1
  575. package/dist/cli/index-working.js +0 -617
  576. package/dist/cli/index-working.js.map +0 -1
  577. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  578. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  579. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  580. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  581. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  582. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  583. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  584. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  585. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  586. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  587. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  588. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  589. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  590. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  591. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  592. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  593. package/dist/reporting/ResultAggregator.d.ts +0 -107
  594. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  595. package/dist/reporting/ResultAggregator.js +0 -435
  596. package/dist/reporting/ResultAggregator.js.map +0 -1
  597. package/dist/reporting/index.d.ts +0 -48
  598. package/dist/reporting/index.d.ts.map +0 -1
  599. package/dist/reporting/index.js +0 -154
  600. package/dist/reporting/index.js.map +0 -1
  601. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  602. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  603. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  604. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  605. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  606. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  607. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  608. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  609. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  610. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  611. package/dist/reporting/reporters/JSONReporter.js +0 -325
  612. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  613. package/dist/reporting/reporters/index.d.ts +0 -14
  614. package/dist/reporting/reporters/index.d.ts.map +0 -1
  615. package/dist/reporting/reporters/index.js +0 -19
  616. package/dist/reporting/reporters/index.js.map +0 -1
  617. package/dist/reporting/types.d.ts +0 -427
  618. package/dist/reporting/types.d.ts.map +0 -1
  619. package/dist/reporting/types.js +0 -12
  620. package/dist/reporting/types.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ /**
2
+ * NAT Detector for @ruvector/edge P2P
3
+ *
4
+ * Detects NAT type using STUN servers with multiple testing strategies.
5
+ * Implements RFC 3489/5389 compliant NAT classification with caching
6
+ * and parallel server testing for reliable detection.
7
+ *
8
+ * @module edge/p2p/nat/NATDetector
9
+ * @version 1.0.0
10
+ */
11
+ import { NATClassification, NATDetectionResult, NATDetectorConfig, NATEventType, NATEventHandler } from './types';
12
+ /**
13
+ * NAT Detector - Detects NAT type using STUN
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * const detector = new NATDetector({
18
+ * stunServers: [
19
+ * { urls: 'stun:stun.l.google.com:19302' },
20
+ * { urls: 'stun:stun1.l.google.com:19302' },
21
+ * ],
22
+ * timeout: 10000,
23
+ * enableCache: true,
24
+ * });
25
+ *
26
+ * const result = await detector.detect();
27
+ * console.log('NAT Type:', result.natType);
28
+ * console.log('External IP:', result.externalAddress);
29
+ * ```
30
+ */
31
+ export declare class NATDetector {
32
+ private readonly config;
33
+ private cachedResult;
34
+ private cacheTimestamp;
35
+ private eventHandlers;
36
+ private isDetecting;
37
+ private detectionPromise;
38
+ /**
39
+ * Create a new NAT Detector
40
+ *
41
+ * @param config - Detector configuration
42
+ */
43
+ constructor(config?: Partial<NATDetectorConfig>);
44
+ /**
45
+ * Detect NAT type using configured STUN servers
46
+ *
47
+ * @returns Promise resolving to NAT detection result
48
+ */
49
+ detect(): Promise<NATDetectionResult>;
50
+ /**
51
+ * Force re-detection, ignoring cache
52
+ *
53
+ * @returns Promise resolving to fresh NAT detection result
54
+ */
55
+ forceDetect(): Promise<NATDetectionResult>;
56
+ /**
57
+ * Get cached detection result if available and valid
58
+ *
59
+ * @returns Cached result or null
60
+ */
61
+ getCachedResult(): NATDetectionResult | null;
62
+ /**
63
+ * Invalidate cached detection result
64
+ */
65
+ invalidateCache(): void;
66
+ /**
67
+ * Estimate connectivity probability between two NAT types
68
+ *
69
+ * @param localNat - Local NAT type
70
+ * @param remoteNat - Remote NAT type
71
+ * @returns Probability (0-1) of successful direct connection
72
+ */
73
+ estimateConnectivity(localNat: NATClassification, remoteNat: NATClassification): number;
74
+ /**
75
+ * Check if TURN relay is recommended based on NAT types
76
+ *
77
+ * @param localNat - Local NAT type
78
+ * @param remoteNat - Remote NAT type
79
+ * @param threshold - Probability threshold (default 0.5)
80
+ * @returns True if TURN is recommended
81
+ */
82
+ shouldUseTurn(localNat: NATClassification, remoteNat: NATClassification, threshold?: number): boolean;
83
+ /**
84
+ * Register event handler
85
+ *
86
+ * @param type - Event type to handle
87
+ * @param handler - Event handler function
88
+ * @returns Unsubscribe function
89
+ */
90
+ on<T>(type: NATEventType, handler: NATEventHandler<T>): () => void;
91
+ /**
92
+ * Get current configuration
93
+ */
94
+ getConfig(): NATDetectorConfig;
95
+ private isCacheValid;
96
+ private performDetection;
97
+ private queryStunServers;
98
+ private queryStunServer;
99
+ private performStunBinding;
100
+ private parseCandidate;
101
+ private analyzeResponses;
102
+ private classifyConsistentMapping;
103
+ private isPrivateIP;
104
+ private createFailedResult;
105
+ private getServerUrl;
106
+ private emitEvent;
107
+ }
108
+ export default NATDetector;
109
+ //# sourceMappingURL=NATDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NATDetector.d.ts","sourceRoot":"","sources":["../../../../src/edge/p2p/nat/NATDetector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EAGjB,YAAY,EAEZ,eAAe,EAEhB,MAAM,SAAS,CAAC;AAiBjB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,aAAa,CAAsD;IAC3E,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAA4C;IAEpE;;;;OAIG;gBACS,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAM;IAQnD;;;;OAIG;IACU,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAuBlD;;;;OAIG;IACU,WAAW,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAKvD;;;;OAIG;IACI,eAAe,IAAI,kBAAkB,GAAG,IAAI;IAInD;;OAEG;IACI,eAAe,IAAI,IAAI;IAK9B;;;;;;OAMG;IACI,oBAAoB,CACzB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,iBAAiB,GAC3B,MAAM;IAIT;;;;;;;OAOG;IACI,aAAa,CAClB,QAAQ,EAAE,iBAAiB,EAC3B,SAAS,EAAE,iBAAiB,EAC5B,SAAS,GAAE,MAAY,GACtB,OAAO;IAKV;;;;;;OAMG;IACI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAQzE;;OAEG;IACI,SAAS,IAAI,iBAAiB;IAQrC,OAAO,CAAC,YAAY;YAQN,gBAAgB;YA0ChB,gBAAgB;YAkChB,eAAe;YAwCf,kBAAkB;IA6EhC,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,yBAAyB;IAyBjC,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;CAiBlB;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ /**
3
+ * NAT Detector for @ruvector/edge P2P
4
+ *
5
+ * Detects NAT type using STUN servers with multiple testing strategies.
6
+ * Implements RFC 3489/5389 compliant NAT classification with caching
7
+ * and parallel server testing for reliable detection.
8
+ *
9
+ * @module edge/p2p/nat/NATDetector
10
+ * @version 1.0.0
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.NATDetector = void 0;
14
+ const types_1 = require("./types");
15
+ /**
16
+ * STUN message type constants
17
+ */
18
+ const STUN_BINDING_REQUEST = 0x0001;
19
+ const STUN_BINDING_RESPONSE = 0x0101;
20
+ const STUN_MAGIC_COOKIE = 0x2112a442;
21
+ const STUN_HEADER_SIZE = 20;
22
+ /**
23
+ * STUN attribute types
24
+ */
25
+ const STUN_ATTR_MAPPED_ADDRESS = 0x0001;
26
+ const STUN_ATTR_XOR_MAPPED_ADDRESS = 0x0020;
27
+ const STUN_ATTR_RESPONSE_ORIGIN = 0x802b;
28
+ /**
29
+ * NAT Detector - Detects NAT type using STUN
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const detector = new NATDetector({
34
+ * stunServers: [
35
+ * { urls: 'stun:stun.l.google.com:19302' },
36
+ * { urls: 'stun:stun1.l.google.com:19302' },
37
+ * ],
38
+ * timeout: 10000,
39
+ * enableCache: true,
40
+ * });
41
+ *
42
+ * const result = await detector.detect();
43
+ * console.log('NAT Type:', result.natType);
44
+ * console.log('External IP:', result.externalAddress);
45
+ * ```
46
+ */
47
+ class NATDetector {
48
+ /**
49
+ * Create a new NAT Detector
50
+ *
51
+ * @param config - Detector configuration
52
+ */
53
+ constructor(config = {}) {
54
+ this.cachedResult = null;
55
+ this.cacheTimestamp = 0;
56
+ this.eventHandlers = new Map();
57
+ this.isDetecting = false;
58
+ this.detectionPromise = null;
59
+ this.config = {
60
+ ...types_1.DEFAULT_NAT_DETECTOR_CONFIG,
61
+ ...config,
62
+ stunServers: config.stunServers ?? types_1.DEFAULT_NAT_DETECTOR_CONFIG.stunServers,
63
+ };
64
+ }
65
+ /**
66
+ * Detect NAT type using configured STUN servers
67
+ *
68
+ * @returns Promise resolving to NAT detection result
69
+ */
70
+ async detect() {
71
+ // Check cache first
72
+ if (this.isCacheValid()) {
73
+ return this.cachedResult;
74
+ }
75
+ // If detection is already in progress, return existing promise
76
+ if (this.isDetecting && this.detectionPromise) {
77
+ return this.detectionPromise;
78
+ }
79
+ this.isDetecting = true;
80
+ this.detectionPromise = this.performDetection();
81
+ try {
82
+ const result = await this.detectionPromise;
83
+ return result;
84
+ }
85
+ finally {
86
+ this.isDetecting = false;
87
+ this.detectionPromise = null;
88
+ }
89
+ }
90
+ /**
91
+ * Force re-detection, ignoring cache
92
+ *
93
+ * @returns Promise resolving to fresh NAT detection result
94
+ */
95
+ async forceDetect() {
96
+ this.invalidateCache();
97
+ return this.detect();
98
+ }
99
+ /**
100
+ * Get cached detection result if available and valid
101
+ *
102
+ * @returns Cached result or null
103
+ */
104
+ getCachedResult() {
105
+ return this.isCacheValid() ? this.cachedResult : null;
106
+ }
107
+ /**
108
+ * Invalidate cached detection result
109
+ */
110
+ invalidateCache() {
111
+ this.cachedResult = null;
112
+ this.cacheTimestamp = 0;
113
+ }
114
+ /**
115
+ * Estimate connectivity probability between two NAT types
116
+ *
117
+ * @param localNat - Local NAT type
118
+ * @param remoteNat - Remote NAT type
119
+ * @returns Probability (0-1) of successful direct connection
120
+ */
121
+ estimateConnectivity(localNat, remoteNat) {
122
+ return types_1.NAT_CONNECTIVITY_MATRIX[localNat]?.[remoteNat] ?? 0.3;
123
+ }
124
+ /**
125
+ * Check if TURN relay is recommended based on NAT types
126
+ *
127
+ * @param localNat - Local NAT type
128
+ * @param remoteNat - Remote NAT type
129
+ * @param threshold - Probability threshold (default 0.5)
130
+ * @returns True if TURN is recommended
131
+ */
132
+ shouldUseTurn(localNat, remoteNat, threshold = 0.5) {
133
+ const probability = this.estimateConnectivity(localNat, remoteNat);
134
+ return probability < threshold;
135
+ }
136
+ /**
137
+ * Register event handler
138
+ *
139
+ * @param type - Event type to handle
140
+ * @param handler - Event handler function
141
+ * @returns Unsubscribe function
142
+ */
143
+ on(type, handler) {
144
+ if (!this.eventHandlers.has(type)) {
145
+ this.eventHandlers.set(type, new Set());
146
+ }
147
+ this.eventHandlers.get(type).add(handler);
148
+ return () => this.eventHandlers.get(type)?.delete(handler);
149
+ }
150
+ /**
151
+ * Get current configuration
152
+ */
153
+ getConfig() {
154
+ return { ...this.config };
155
+ }
156
+ // ============================================
157
+ // Private Methods
158
+ // ============================================
159
+ isCacheValid() {
160
+ if (!this.config.enableCache || !this.cachedResult) {
161
+ return false;
162
+ }
163
+ const age = Date.now() - this.cacheTimestamp;
164
+ return age < this.config.cacheTtl;
165
+ }
166
+ async performDetection() {
167
+ const startTime = Date.now();
168
+ this.emitEvent(types_1.NATEventType.DetectionStarted, {
169
+ servers: this.config.stunServers.map((s) => this.getServerUrl(s)),
170
+ timestamp: startTime,
171
+ });
172
+ try {
173
+ // Get binding responses from STUN servers
174
+ const responses = await this.queryStunServers();
175
+ if (responses.length < this.config.minServers) {
176
+ const result = this.createFailedResult(startTime, `Insufficient STUN responses: ${responses.length}/${this.config.minServers}`);
177
+ this.emitEvent(types_1.NATEventType.DetectionFailed, result);
178
+ return result;
179
+ }
180
+ // Analyze responses to determine NAT type
181
+ const result = this.analyzeResponses(responses, startTime);
182
+ // Cache result
183
+ if (this.config.enableCache) {
184
+ this.cachedResult = result;
185
+ this.cacheTimestamp = Date.now();
186
+ }
187
+ this.emitEvent(types_1.NATEventType.DetectionCompleted, result);
188
+ return result;
189
+ }
190
+ catch (error) {
191
+ const result = this.createFailedResult(startTime, error instanceof Error ? error.message : 'Unknown detection error');
192
+ this.emitEvent(types_1.NATEventType.DetectionFailed, result);
193
+ return result;
194
+ }
195
+ }
196
+ async queryStunServers() {
197
+ const servers = this.config.stunServers;
198
+ if (this.config.parallelTesting) {
199
+ // Query all servers in parallel
200
+ const promises = servers.map((server) => this.queryStunServer(server));
201
+ const results = await Promise.allSettled(promises);
202
+ return results
203
+ .filter((r) => r.status === 'fulfilled' && r.value.success)
204
+ .map((r) => r.value);
205
+ }
206
+ else {
207
+ // Query servers sequentially
208
+ const responses = [];
209
+ for (const server of servers) {
210
+ try {
211
+ const response = await this.queryStunServer(server);
212
+ if (response.success) {
213
+ responses.push(response);
214
+ }
215
+ if (responses.length >= this.config.minServers) {
216
+ break;
217
+ }
218
+ }
219
+ catch {
220
+ // Continue to next server
221
+ }
222
+ }
223
+ return responses;
224
+ }
225
+ }
226
+ async queryStunServer(server) {
227
+ const serverUrl = this.getServerUrl(server);
228
+ const startTime = Date.now();
229
+ return new Promise((resolve) => {
230
+ const timeout = setTimeout(() => {
231
+ resolve({
232
+ server: serverUrl,
233
+ mappedAddress: '',
234
+ mappedPort: 0,
235
+ responseTimeMs: Date.now() - startTime,
236
+ success: false,
237
+ error: 'Timeout',
238
+ });
239
+ }, this.config.timeout);
240
+ // Use RTCPeerConnection for STUN binding in browser environment
241
+ this.performStunBinding(server)
242
+ .then((result) => {
243
+ clearTimeout(timeout);
244
+ resolve({
245
+ ...result,
246
+ server: serverUrl,
247
+ responseTimeMs: Date.now() - startTime,
248
+ });
249
+ })
250
+ .catch((error) => {
251
+ clearTimeout(timeout);
252
+ resolve({
253
+ server: serverUrl,
254
+ mappedAddress: '',
255
+ mappedPort: 0,
256
+ responseTimeMs: Date.now() - startTime,
257
+ success: false,
258
+ error: error instanceof Error ? error.message : 'STUN query failed',
259
+ });
260
+ });
261
+ });
262
+ }
263
+ async performStunBinding(server) {
264
+ return new Promise((resolve, reject) => {
265
+ // Check for RTCPeerConnection availability
266
+ if (typeof RTCPeerConnection === 'undefined') {
267
+ reject(new Error('RTCPeerConnection not available'));
268
+ return;
269
+ }
270
+ const pc = new RTCPeerConnection({
271
+ iceServers: [server],
272
+ iceCandidatePoolSize: 0,
273
+ });
274
+ let resolved = false;
275
+ const candidateTimeout = setTimeout(() => {
276
+ if (!resolved) {
277
+ resolved = true;
278
+ pc.close();
279
+ reject(new Error('No ICE candidates gathered'));
280
+ }
281
+ }, this.config.timeout);
282
+ pc.onicecandidate = (event) => {
283
+ if (event.candidate && !resolved) {
284
+ const candidate = event.candidate.candidate;
285
+ // Look for srflx (server reflexive) candidate
286
+ if (candidate.includes('typ srflx')) {
287
+ const parsed = this.parseCandidate(candidate);
288
+ if (parsed) {
289
+ resolved = true;
290
+ clearTimeout(candidateTimeout);
291
+ pc.close();
292
+ resolve({
293
+ mappedAddress: parsed.address,
294
+ mappedPort: parsed.port,
295
+ success: true,
296
+ });
297
+ }
298
+ }
299
+ }
300
+ else if (event.candidate === null && !resolved) {
301
+ // Gathering complete without srflx
302
+ resolved = true;
303
+ clearTimeout(candidateTimeout);
304
+ pc.close();
305
+ reject(new Error('No server reflexive candidate found'));
306
+ }
307
+ };
308
+ pc.onicegatheringstatechange = () => {
309
+ if (pc.iceGatheringState === 'complete' && !resolved) {
310
+ resolved = true;
311
+ clearTimeout(candidateTimeout);
312
+ pc.close();
313
+ reject(new Error('ICE gathering complete without srflx candidate'));
314
+ }
315
+ };
316
+ // Create data channel to trigger ICE gathering
317
+ pc.createDataChannel('nat-detection');
318
+ // Create offer to start ICE gathering
319
+ pc.createOffer()
320
+ .then((offer) => pc.setLocalDescription(offer))
321
+ .catch((error) => {
322
+ if (!resolved) {
323
+ resolved = true;
324
+ clearTimeout(candidateTimeout);
325
+ pc.close();
326
+ reject(error);
327
+ }
328
+ });
329
+ });
330
+ }
331
+ parseCandidate(candidateString) {
332
+ // Parse ICE candidate format:
333
+ // candidate:foundation component protocol priority address port typ type ...
334
+ const parts = candidateString.split(' ');
335
+ if (parts.length < 6) {
336
+ return null;
337
+ }
338
+ const address = parts[4];
339
+ const port = parseInt(parts[5], 10);
340
+ if (address && !isNaN(port)) {
341
+ return { address, port };
342
+ }
343
+ return null;
344
+ }
345
+ analyzeResponses(responses, startTime) {
346
+ const addresses = new Set();
347
+ const ports = new Set();
348
+ const serversUsed = [];
349
+ for (const response of responses) {
350
+ if (response.success) {
351
+ addresses.add(response.mappedAddress);
352
+ ports.add(response.mappedPort);
353
+ serversUsed.push(response.server);
354
+ }
355
+ }
356
+ const durationMs = Date.now() - startTime;
357
+ // Analyze mapping consistency
358
+ const portMappingConsistent = ports.size === 1;
359
+ const addressConsistent = addresses.size === 1;
360
+ // Determine NAT type based on responses
361
+ let natType;
362
+ let confidence;
363
+ if (addresses.size === 0) {
364
+ natType = types_1.NATClassification.Failed;
365
+ confidence = 0;
366
+ }
367
+ else if (addressConsistent && portMappingConsistent) {
368
+ // Same mapped address and port from multiple servers
369
+ // Indicates consistent NAT mapping
370
+ natType = this.classifyConsistentMapping(responses);
371
+ confidence = Math.min(0.9, 0.5 + responses.length * 0.1);
372
+ }
373
+ else if (addressConsistent && !portMappingConsistent) {
374
+ // Same address but different ports - likely symmetric NAT
375
+ natType = types_1.NATClassification.Symmetric;
376
+ confidence = 0.7;
377
+ }
378
+ else {
379
+ // Different addresses - unusual, possibly multi-homed
380
+ natType = types_1.NATClassification.Unknown;
381
+ confidence = 0.3;
382
+ }
383
+ const firstResponse = responses.find((r) => r.success);
384
+ return {
385
+ natType,
386
+ externalAddress: firstResponse?.mappedAddress,
387
+ externalPort: firstResponse?.mappedPort,
388
+ portMappingConsistent,
389
+ endpointIndependentFiltering: natType !== types_1.NATClassification.Symmetric,
390
+ confidence,
391
+ serversUsed,
392
+ durationMs,
393
+ detectedAt: Date.now(),
394
+ };
395
+ }
396
+ classifyConsistentMapping(responses) {
397
+ // With consistent mapping, we need additional tests to distinguish
398
+ // between Full Cone, Restricted Cone, and Port Restricted Cone.
399
+ // In browser environment, we can only determine that it's some form
400
+ // of cone NAT or no NAT.
401
+ const firstResponse = responses[0];
402
+ if (!firstResponse?.success) {
403
+ return types_1.NATClassification.Unknown;
404
+ }
405
+ // Check if external address looks like a private IP (indicating no NAT)
406
+ if (this.isPrivateIP(firstResponse.mappedAddress)) {
407
+ return types_1.NATClassification.Open;
408
+ }
409
+ // Without additional tests from different IPs/ports, we can only
410
+ // determine it's likely a cone NAT. Default to FullCone as optimistic.
411
+ // More sophisticated detection would require a STUN server that can
412
+ // respond from different IP/port combinations.
413
+ return types_1.NATClassification.FullCone;
414
+ }
415
+ isPrivateIP(ip) {
416
+ // Check for private IP ranges
417
+ const parts = ip.split('.').map(Number);
418
+ if (parts.length !== 4) {
419
+ // IPv6 or invalid
420
+ return ip.startsWith('fd') || ip.startsWith('fc') || ip === '::1';
421
+ }
422
+ // 10.0.0.0/8
423
+ if (parts[0] === 10)
424
+ return true;
425
+ // 172.16.0.0/12
426
+ if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
427
+ return true;
428
+ // 192.168.0.0/16
429
+ if (parts[0] === 192 && parts[1] === 168)
430
+ return true;
431
+ // 127.0.0.0/8 (loopback)
432
+ if (parts[0] === 127)
433
+ return true;
434
+ return false;
435
+ }
436
+ createFailedResult(startTime, error) {
437
+ return {
438
+ natType: types_1.NATClassification.Failed,
439
+ portMappingConsistent: false,
440
+ endpointIndependentFiltering: false,
441
+ confidence: 0,
442
+ serversUsed: [],
443
+ durationMs: Date.now() - startTime,
444
+ detectedAt: Date.now(),
445
+ error,
446
+ };
447
+ }
448
+ getServerUrl(server) {
449
+ return Array.isArray(server.urls) ? server.urls[0] : server.urls;
450
+ }
451
+ emitEvent(type, data) {
452
+ const handlers = this.eventHandlers.get(type);
453
+ if (handlers) {
454
+ const event = {
455
+ type,
456
+ timestamp: Date.now(),
457
+ data,
458
+ };
459
+ handlers.forEach((handler) => {
460
+ try {
461
+ handler(event);
462
+ }
463
+ catch (error) {
464
+ console.error(`NAT event handler error for ${type}:`, error);
465
+ }
466
+ });
467
+ }
468
+ }
469
+ }
470
+ exports.NATDetector = NATDetector;
471
+ exports.default = NATDetector;
472
+ //# sourceMappingURL=NATDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NATDetector.js","sourceRoot":"","sources":["../../../../src/edge/p2p/nat/NATDetector.ts"],"names":[],"mappings":"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"}