agentic-qe 2.7.4 → 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 (519) hide show
  1. package/CHANGELOG.md +104 -0
  2. package/README.md +67 -2
  3. package/dist/cli/commands/agent/spawn.d.ts +12 -1
  4. package/dist/cli/commands/agent/spawn.d.ts.map +1 -1
  5. package/dist/cli/commands/agent/spawn.js +95 -8
  6. package/dist/cli/commands/agent/spawn.js.map +1 -1
  7. package/dist/cli/index.js +91 -0
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  10. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts +134 -0
  11. package/dist/edge/adapters/BrowserHNSWAdapter.d.ts.map +1 -0
  12. package/dist/edge/adapters/BrowserHNSWAdapter.js +484 -0
  13. package/dist/edge/adapters/BrowserHNSWAdapter.js.map +1 -0
  14. package/dist/edge/adapters/IndexedDBStorage.d.ts +114 -0
  15. package/dist/edge/adapters/IndexedDBStorage.d.ts.map +1 -0
  16. package/dist/edge/adapters/IndexedDBStorage.js +478 -0
  17. package/dist/edge/adapters/IndexedDBStorage.js.map +1 -0
  18. package/dist/edge/adapters/index.d.ts +12 -0
  19. package/dist/edge/adapters/index.d.ts.map +1 -0
  20. package/dist/edge/adapters/index.js +22 -0
  21. package/dist/edge/adapters/index.js.map +1 -0
  22. package/dist/edge/browser/BrowserAgent.d.ts +241 -0
  23. package/dist/edge/browser/BrowserAgent.d.ts.map +1 -0
  24. package/dist/edge/browser/BrowserAgent.js +743 -0
  25. package/dist/edge/browser/BrowserAgent.js.map +1 -0
  26. package/dist/edge/index.d.ts +34 -0
  27. package/dist/edge/index.d.ts.map +1 -0
  28. package/dist/edge/index.js +114 -0
  29. package/dist/edge/index.js.map +1 -0
  30. package/dist/edge/p2p/coordination/CoordinationManager.d.ts +181 -0
  31. package/dist/edge/p2p/coordination/CoordinationManager.d.ts.map +1 -0
  32. package/dist/edge/p2p/coordination/CoordinationManager.js +851 -0
  33. package/dist/edge/p2p/coordination/CoordinationManager.js.map +1 -0
  34. package/dist/edge/p2p/coordination/HealthMonitor.d.ts +143 -0
  35. package/dist/edge/p2p/coordination/HealthMonitor.d.ts.map +1 -0
  36. package/dist/edge/p2p/coordination/HealthMonitor.js +432 -0
  37. package/dist/edge/p2p/coordination/HealthMonitor.js.map +1 -0
  38. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts +146 -0
  39. package/dist/edge/p2p/coordination/SyncOrchestrator.d.ts.map +1 -0
  40. package/dist/edge/p2p/coordination/SyncOrchestrator.js +783 -0
  41. package/dist/edge/p2p/coordination/SyncOrchestrator.js.map +1 -0
  42. package/dist/edge/p2p/coordination/index.d.ts +70 -0
  43. package/dist/edge/p2p/coordination/index.d.ts.map +1 -0
  44. package/dist/edge/p2p/coordination/index.js +107 -0
  45. package/dist/edge/p2p/coordination/index.js.map +1 -0
  46. package/dist/edge/p2p/coordination/types.d.ts +572 -0
  47. package/dist/edge/p2p/coordination/types.d.ts.map +1 -0
  48. package/dist/edge/p2p/coordination/types.js +366 -0
  49. package/dist/edge/p2p/coordination/types.js.map +1 -0
  50. package/dist/edge/p2p/crdt/CRDTStore.d.ts +324 -0
  51. package/dist/edge/p2p/crdt/CRDTStore.d.ts.map +1 -0
  52. package/dist/edge/p2p/crdt/CRDTStore.js +839 -0
  53. package/dist/edge/p2p/crdt/CRDTStore.js.map +1 -0
  54. package/dist/edge/p2p/crdt/GCounter.d.ts +173 -0
  55. package/dist/edge/p2p/crdt/GCounter.d.ts.map +1 -0
  56. package/dist/edge/p2p/crdt/GCounter.js +394 -0
  57. package/dist/edge/p2p/crdt/GCounter.js.map +1 -0
  58. package/dist/edge/p2p/crdt/LWWRegister.d.ts +200 -0
  59. package/dist/edge/p2p/crdt/LWWRegister.d.ts.map +1 -0
  60. package/dist/edge/p2p/crdt/LWWRegister.js +456 -0
  61. package/dist/edge/p2p/crdt/LWWRegister.js.map +1 -0
  62. package/dist/edge/p2p/crdt/ORSet.d.ts +232 -0
  63. package/dist/edge/p2p/crdt/ORSet.d.ts.map +1 -0
  64. package/dist/edge/p2p/crdt/ORSet.js +723 -0
  65. package/dist/edge/p2p/crdt/ORSet.js.map +1 -0
  66. package/dist/edge/p2p/crdt/PatternCRDT.d.ts +366 -0
  67. package/dist/edge/p2p/crdt/PatternCRDT.d.ts.map +1 -0
  68. package/dist/edge/p2p/crdt/PatternCRDT.js +838 -0
  69. package/dist/edge/p2p/crdt/PatternCRDT.js.map +1 -0
  70. package/dist/edge/p2p/crdt/VectorClock.d.ts +274 -0
  71. package/dist/edge/p2p/crdt/VectorClock.d.ts.map +1 -0
  72. package/dist/edge/p2p/crdt/VectorClock.js +499 -0
  73. package/dist/edge/p2p/crdt/VectorClock.js.map +1 -0
  74. package/dist/edge/p2p/crdt/index.d.ts +87 -0
  75. package/dist/edge/p2p/crdt/index.d.ts.map +1 -0
  76. package/dist/edge/p2p/crdt/index.js +120 -0
  77. package/dist/edge/p2p/crdt/index.js.map +1 -0
  78. package/dist/edge/p2p/crdt/types.d.ts +667 -0
  79. package/dist/edge/p2p/crdt/types.d.ts.map +1 -0
  80. package/dist/edge/p2p/crdt/types.js +208 -0
  81. package/dist/edge/p2p/crdt/types.js.map +1 -0
  82. package/dist/edge/p2p/crypto/Identity.d.ts +139 -0
  83. package/dist/edge/p2p/crypto/Identity.d.ts.map +1 -0
  84. package/dist/edge/p2p/crypto/Identity.js +449 -0
  85. package/dist/edge/p2p/crypto/Identity.js.map +1 -0
  86. package/dist/edge/p2p/crypto/KeyManager.d.ts +196 -0
  87. package/dist/edge/p2p/crypto/KeyManager.d.ts.map +1 -0
  88. package/dist/edge/p2p/crypto/KeyManager.js +576 -0
  89. package/dist/edge/p2p/crypto/KeyManager.js.map +1 -0
  90. package/dist/edge/p2p/crypto/Signer.d.ts +164 -0
  91. package/dist/edge/p2p/crypto/Signer.d.ts.map +1 -0
  92. package/dist/edge/p2p/crypto/Signer.js +357 -0
  93. package/dist/edge/p2p/crypto/Signer.js.map +1 -0
  94. package/dist/edge/p2p/crypto/index.d.ts +90 -0
  95. package/dist/edge/p2p/crypto/index.d.ts.map +1 -0
  96. package/dist/edge/p2p/crypto/index.js +158 -0
  97. package/dist/edge/p2p/crypto/index.js.map +1 -0
  98. package/dist/edge/p2p/crypto/types.d.ts +217 -0
  99. package/dist/edge/p2p/crypto/types.d.ts.map +1 -0
  100. package/dist/edge/p2p/crypto/types.js +42 -0
  101. package/dist/edge/p2p/crypto/types.js.map +1 -0
  102. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts +270 -0
  103. package/dist/edge/p2p/federated/FederatedCoordinator.d.ts.map +1 -0
  104. package/dist/edge/p2p/federated/FederatedCoordinator.js +824 -0
  105. package/dist/edge/p2p/federated/FederatedCoordinator.js.map +1 -0
  106. package/dist/edge/p2p/federated/FederatedRound.d.ts +295 -0
  107. package/dist/edge/p2p/federated/FederatedRound.d.ts.map +1 -0
  108. package/dist/edge/p2p/federated/FederatedRound.js +819 -0
  109. package/dist/edge/p2p/federated/FederatedRound.js.map +1 -0
  110. package/dist/edge/p2p/federated/GradientAggregator.d.ts +226 -0
  111. package/dist/edge/p2p/federated/GradientAggregator.d.ts.map +1 -0
  112. package/dist/edge/p2p/federated/GradientAggregator.js +826 -0
  113. package/dist/edge/p2p/federated/GradientAggregator.js.map +1 -0
  114. package/dist/edge/p2p/federated/ModelManager.d.ts +248 -0
  115. package/dist/edge/p2p/federated/ModelManager.d.ts.map +1 -0
  116. package/dist/edge/p2p/federated/ModelManager.js +724 -0
  117. package/dist/edge/p2p/federated/ModelManager.js.map +1 -0
  118. package/dist/edge/p2p/federated/index.d.ts +65 -0
  119. package/dist/edge/p2p/federated/index.d.ts.map +1 -0
  120. package/dist/edge/p2p/federated/index.js +110 -0
  121. package/dist/edge/p2p/federated/index.js.map +1 -0
  122. package/dist/edge/p2p/federated/types.d.ts +905 -0
  123. package/dist/edge/p2p/federated/types.d.ts.map +1 -0
  124. package/dist/edge/p2p/federated/types.js +339 -0
  125. package/dist/edge/p2p/federated/types.js.map +1 -0
  126. package/dist/edge/p2p/index.d.ts +156 -0
  127. package/dist/edge/p2p/index.d.ts.map +1 -0
  128. package/dist/edge/p2p/index.js +242 -0
  129. package/dist/edge/p2p/index.js.map +1 -0
  130. package/dist/edge/p2p/nat/ConnectivityTester.d.ts +128 -0
  131. package/dist/edge/p2p/nat/ConnectivityTester.d.ts.map +1 -0
  132. package/dist/edge/p2p/nat/ConnectivityTester.js +560 -0
  133. package/dist/edge/p2p/nat/ConnectivityTester.js.map +1 -0
  134. package/dist/edge/p2p/nat/HolePuncher.d.ts +159 -0
  135. package/dist/edge/p2p/nat/HolePuncher.d.ts.map +1 -0
  136. package/dist/edge/p2p/nat/HolePuncher.js +569 -0
  137. package/dist/edge/p2p/nat/HolePuncher.js.map +1 -0
  138. package/dist/edge/p2p/nat/NATDetector.d.ts +109 -0
  139. package/dist/edge/p2p/nat/NATDetector.d.ts.map +1 -0
  140. package/dist/edge/p2p/nat/NATDetector.js +472 -0
  141. package/dist/edge/p2p/nat/NATDetector.js.map +1 -0
  142. package/dist/edge/p2p/nat/TURNManager.d.ts +158 -0
  143. package/dist/edge/p2p/nat/TURNManager.d.ts.map +1 -0
  144. package/dist/edge/p2p/nat/TURNManager.js +547 -0
  145. package/dist/edge/p2p/nat/TURNManager.js.map +1 -0
  146. package/dist/edge/p2p/nat/index.d.ts +74 -0
  147. package/dist/edge/p2p/nat/index.d.ts.map +1 -0
  148. package/dist/edge/p2p/nat/index.js +104 -0
  149. package/dist/edge/p2p/nat/index.js.map +1 -0
  150. package/dist/edge/p2p/nat/types.d.ts +583 -0
  151. package/dist/edge/p2p/nat/types.d.ts.map +1 -0
  152. package/dist/edge/p2p/nat/types.js +267 -0
  153. package/dist/edge/p2p/nat/types.js.map +1 -0
  154. package/dist/edge/p2p/protocol/AgentChannel.d.ts +333 -0
  155. package/dist/edge/p2p/protocol/AgentChannel.d.ts.map +1 -0
  156. package/dist/edge/p2p/protocol/AgentChannel.js +914 -0
  157. package/dist/edge/p2p/protocol/AgentChannel.js.map +1 -0
  158. package/dist/edge/p2p/protocol/MessageEncoder.d.ts +147 -0
  159. package/dist/edge/p2p/protocol/MessageEncoder.d.ts.map +1 -0
  160. package/dist/edge/p2p/protocol/MessageEncoder.js +738 -0
  161. package/dist/edge/p2p/protocol/MessageEncoder.js.map +1 -0
  162. package/dist/edge/p2p/protocol/MessageRouter.d.ts +266 -0
  163. package/dist/edge/p2p/protocol/MessageRouter.d.ts.map +1 -0
  164. package/dist/edge/p2p/protocol/MessageRouter.js +808 -0
  165. package/dist/edge/p2p/protocol/MessageRouter.js.map +1 -0
  166. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts +309 -0
  167. package/dist/edge/p2p/protocol/ProtocolHandler.d.ts.map +1 -0
  168. package/dist/edge/p2p/protocol/ProtocolHandler.js +930 -0
  169. package/dist/edge/p2p/protocol/ProtocolHandler.js.map +1 -0
  170. package/dist/edge/p2p/protocol/index.d.ts +114 -0
  171. package/dist/edge/p2p/protocol/index.d.ts.map +1 -0
  172. package/dist/edge/p2p/protocol/index.js +206 -0
  173. package/dist/edge/p2p/protocol/index.js.map +1 -0
  174. package/dist/edge/p2p/protocol/types.d.ts +737 -0
  175. package/dist/edge/p2p/protocol/types.d.ts.map +1 -0
  176. package/dist/edge/p2p/protocol/types.js +490 -0
  177. package/dist/edge/p2p/protocol/types.js.map +1 -0
  178. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts +284 -0
  179. package/dist/edge/p2p/sharing/PatternBroadcaster.d.ts.map +1 -0
  180. package/dist/edge/p2p/sharing/PatternBroadcaster.js +644 -0
  181. package/dist/edge/p2p/sharing/PatternBroadcaster.js.map +1 -0
  182. package/dist/edge/p2p/sharing/PatternIndex.d.ts +168 -0
  183. package/dist/edge/p2p/sharing/PatternIndex.d.ts.map +1 -0
  184. package/dist/edge/p2p/sharing/PatternIndex.js +781 -0
  185. package/dist/edge/p2p/sharing/PatternIndex.js.map +1 -0
  186. package/dist/edge/p2p/sharing/PatternSerializer.d.ts +163 -0
  187. package/dist/edge/p2p/sharing/PatternSerializer.d.ts.map +1 -0
  188. package/dist/edge/p2p/sharing/PatternSerializer.js +696 -0
  189. package/dist/edge/p2p/sharing/PatternSerializer.js.map +1 -0
  190. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts +242 -0
  191. package/dist/edge/p2p/sharing/PatternSyncManager.d.ts.map +1 -0
  192. package/dist/edge/p2p/sharing/PatternSyncManager.js +859 -0
  193. package/dist/edge/p2p/sharing/PatternSyncManager.js.map +1 -0
  194. package/dist/edge/p2p/sharing/index.d.ts +90 -0
  195. package/dist/edge/p2p/sharing/index.d.ts.map +1 -0
  196. package/dist/edge/p2p/sharing/index.js +152 -0
  197. package/dist/edge/p2p/sharing/index.js.map +1 -0
  198. package/dist/edge/p2p/sharing/types.d.ts +796 -0
  199. package/dist/edge/p2p/sharing/types.d.ts.map +1 -0
  200. package/dist/edge/p2p/sharing/types.js +264 -0
  201. package/dist/edge/p2p/sharing/types.js.map +1 -0
  202. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts +218 -0
  203. package/dist/edge/p2p/webrtc/ConnectionPool.d.ts.map +1 -0
  204. package/dist/edge/p2p/webrtc/ConnectionPool.js +562 -0
  205. package/dist/edge/p2p/webrtc/ConnectionPool.js.map +1 -0
  206. package/dist/edge/p2p/webrtc/ICEManager.d.ts +171 -0
  207. package/dist/edge/p2p/webrtc/ICEManager.d.ts.map +1 -0
  208. package/dist/edge/p2p/webrtc/ICEManager.js +490 -0
  209. package/dist/edge/p2p/webrtc/ICEManager.js.map +1 -0
  210. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts +159 -0
  211. package/dist/edge/p2p/webrtc/PeerConnectionManager.d.ts.map +1 -0
  212. package/dist/edge/p2p/webrtc/PeerConnectionManager.js +735 -0
  213. package/dist/edge/p2p/webrtc/PeerConnectionManager.js.map +1 -0
  214. package/dist/edge/p2p/webrtc/SignalingClient.d.ts +191 -0
  215. package/dist/edge/p2p/webrtc/SignalingClient.d.ts.map +1 -0
  216. package/dist/edge/p2p/webrtc/SignalingClient.js +608 -0
  217. package/dist/edge/p2p/webrtc/SignalingClient.js.map +1 -0
  218. package/dist/edge/p2p/webrtc/index.d.ts +158 -0
  219. package/dist/edge/p2p/webrtc/index.d.ts.map +1 -0
  220. package/dist/edge/p2p/webrtc/index.js +164 -0
  221. package/dist/edge/p2p/webrtc/index.js.map +1 -0
  222. package/dist/edge/p2p/webrtc/types.d.ts +665 -0
  223. package/dist/edge/p2p/webrtc/types.d.ts.map +1 -0
  224. package/dist/edge/p2p/webrtc/types.js +245 -0
  225. package/dist/edge/p2p/webrtc/types.js.map +1 -0
  226. package/dist/edge/server/AgentSpawnAPI.d.ts +98 -0
  227. package/dist/edge/server/AgentSpawnAPI.d.ts.map +1 -0
  228. package/dist/edge/server/AgentSpawnAPI.js +264 -0
  229. package/dist/edge/server/AgentSpawnAPI.js.map +1 -0
  230. package/dist/edge/server/SignalingServer.d.ts +71 -0
  231. package/dist/edge/server/SignalingServer.d.ts.map +1 -0
  232. package/dist/edge/server/SignalingServer.js +429 -0
  233. package/dist/edge/server/SignalingServer.js.map +1 -0
  234. package/dist/edge/server/index.d.ts +64 -0
  235. package/dist/edge/server/index.d.ts.map +1 -0
  236. package/dist/edge/server/index.js +318 -0
  237. package/dist/edge/server/index.js.map +1 -0
  238. package/dist/edge/types/browser-agent.types.d.ts +455 -0
  239. package/dist/edge/types/browser-agent.types.d.ts.map +1 -0
  240. package/dist/edge/types/browser-agent.types.js +116 -0
  241. package/dist/edge/types/browser-agent.types.js.map +1 -0
  242. package/dist/edge/types/index.d.ts +11 -0
  243. package/dist/edge/types/index.d.ts.map +1 -0
  244. package/dist/edge/types/index.js +17 -0
  245. package/dist/edge/types/index.js.map +1 -0
  246. package/dist/edge/types/storage.types.d.ts +207 -0
  247. package/dist/edge/types/storage.types.d.ts.map +1 -0
  248. package/dist/edge/types/storage.types.js +47 -0
  249. package/dist/edge/types/storage.types.js.map +1 -0
  250. package/dist/edge/wasm/shims.d.ts +224 -0
  251. package/dist/edge/wasm/shims.d.ts.map +1 -0
  252. package/dist/edge/wasm/shims.js +667 -0
  253. package/dist/edge/wasm/shims.js.map +1 -0
  254. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts +33 -0
  255. package/dist/mcp/handlers/NewDomainToolsHandler.d.ts.map +1 -0
  256. package/dist/mcp/handlers/NewDomainToolsHandler.js +305 -0
  257. package/dist/mcp/handlers/NewDomainToolsHandler.js.map +1 -0
  258. package/dist/mcp/handlers/filtered/index.d.ts +15 -19
  259. package/dist/mcp/handlers/filtered/index.d.ts.map +1 -1
  260. package/dist/mcp/handlers/filtered/index.js +16 -27
  261. package/dist/mcp/handlers/filtered/index.js.map +1 -1
  262. package/dist/mcp/handlers/integration/index.d.ts +5 -4
  263. package/dist/mcp/handlers/integration/index.d.ts.map +1 -1
  264. package/dist/mcp/handlers/integration/index.js +7 -7
  265. package/dist/mcp/handlers/integration/index.js.map +1 -1
  266. package/dist/mcp/server-instructions.d.ts +1 -1
  267. package/dist/mcp/server-instructions.js +1 -1
  268. package/dist/mcp/server.d.ts.map +1 -1
  269. package/dist/mcp/server.js +14 -0
  270. package/dist/mcp/server.js.map +1 -1
  271. package/dist/mcp/tools.d.ts +8 -0
  272. package/dist/mcp/tools.d.ts.map +1 -1
  273. package/dist/mcp/tools.js +412 -1
  274. package/dist/mcp/tools.js.map +1 -1
  275. package/dist/planning/GOAPPlanner.d.ts +1 -0
  276. package/dist/planning/GOAPPlanner.d.ts.map +1 -1
  277. package/dist/planning/GOAPPlanner.js +12 -0
  278. package/dist/planning/GOAPPlanner.js.map +1 -1
  279. package/package.json +29 -8
  280. package/dist/alerting/AlertManager.d.ts +0 -120
  281. package/dist/alerting/AlertManager.d.ts.map +0 -1
  282. package/dist/alerting/AlertManager.js +0 -345
  283. package/dist/alerting/AlertManager.js.map +0 -1
  284. package/dist/alerting/FeedbackRouter.d.ts +0 -98
  285. package/dist/alerting/FeedbackRouter.d.ts.map +0 -1
  286. package/dist/alerting/FeedbackRouter.js +0 -331
  287. package/dist/alerting/FeedbackRouter.js.map +0 -1
  288. package/dist/alerting/StrategyApplicator.d.ts +0 -120
  289. package/dist/alerting/StrategyApplicator.d.ts.map +0 -1
  290. package/dist/alerting/StrategyApplicator.js +0 -299
  291. package/dist/alerting/StrategyApplicator.js.map +0 -1
  292. package/dist/alerting/index.d.ts +0 -68
  293. package/dist/alerting/index.d.ts.map +0 -1
  294. package/dist/alerting/index.js +0 -112
  295. package/dist/alerting/index.js.map +0 -1
  296. package/dist/alerting/types.d.ts +0 -118
  297. package/dist/alerting/types.d.ts.map +0 -1
  298. package/dist/alerting/types.js +0 -11
  299. package/dist/alerting/types.js.map +0 -1
  300. package/dist/cli/commands/fleet/backup.d.ts +0 -49
  301. package/dist/cli/commands/fleet/backup.d.ts.map +0 -1
  302. package/dist/cli/commands/fleet/backup.js +0 -88
  303. package/dist/cli/commands/fleet/backup.js.map +0 -1
  304. package/dist/cli/commands/fleet/health.d.ts +0 -154
  305. package/dist/cli/commands/fleet/health.d.ts.map +0 -1
  306. package/dist/cli/commands/fleet/health.js +0 -483
  307. package/dist/cli/commands/fleet/health.js.map +0 -1
  308. package/dist/cli/commands/fleet/init.d.ts +0 -11
  309. package/dist/cli/commands/fleet/init.d.ts.map +0 -1
  310. package/dist/cli/commands/fleet/init.js +0 -91
  311. package/dist/cli/commands/fleet/init.js.map +0 -1
  312. package/dist/cli/commands/fleet/logs.d.ts +0 -21
  313. package/dist/cli/commands/fleet/logs.d.ts.map +0 -1
  314. package/dist/cli/commands/fleet/logs.js +0 -267
  315. package/dist/cli/commands/fleet/logs.js.map +0 -1
  316. package/dist/cli/commands/fleet/metrics.d.ts +0 -27
  317. package/dist/cli/commands/fleet/metrics.d.ts.map +0 -1
  318. package/dist/cli/commands/fleet/metrics.js +0 -369
  319. package/dist/cli/commands/fleet/metrics.js.map +0 -1
  320. package/dist/cli/commands/fleet/monitor.d.ts +0 -18
  321. package/dist/cli/commands/fleet/monitor.d.ts.map +0 -1
  322. package/dist/cli/commands/fleet/monitor.js +0 -237
  323. package/dist/cli/commands/fleet/monitor.js.map +0 -1
  324. package/dist/cli/commands/fleet/optimize.d.ts +0 -42
  325. package/dist/cli/commands/fleet/optimize.d.ts.map +0 -1
  326. package/dist/cli/commands/fleet/optimize.js +0 -135
  327. package/dist/cli/commands/fleet/optimize.js.map +0 -1
  328. package/dist/cli/commands/fleet/recover.d.ts +0 -22
  329. package/dist/cli/commands/fleet/recover.d.ts.map +0 -1
  330. package/dist/cli/commands/fleet/recover.js +0 -99
  331. package/dist/cli/commands/fleet/recover.js.map +0 -1
  332. package/dist/cli/commands/fleet/restart.d.ts +0 -18
  333. package/dist/cli/commands/fleet/restart.d.ts.map +0 -1
  334. package/dist/cli/commands/fleet/restart.js +0 -290
  335. package/dist/cli/commands/fleet/restart.js.map +0 -1
  336. package/dist/cli/commands/fleet/scale.d.ts +0 -9
  337. package/dist/cli/commands/fleet/scale.d.ts.map +0 -1
  338. package/dist/cli/commands/fleet/scale.js +0 -77
  339. package/dist/cli/commands/fleet/scale.js.map +0 -1
  340. package/dist/cli/commands/fleet/shutdown.d.ts +0 -19
  341. package/dist/cli/commands/fleet/shutdown.d.ts.map +0 -1
  342. package/dist/cli/commands/fleet/shutdown.js +0 -307
  343. package/dist/cli/commands/fleet/shutdown.js.map +0 -1
  344. package/dist/cli/commands/fleet/status.d.ts +0 -10
  345. package/dist/cli/commands/fleet/status.d.ts.map +0 -1
  346. package/dist/cli/commands/fleet/status.js +0 -97
  347. package/dist/cli/commands/fleet/status.js.map +0 -1
  348. package/dist/cli/commands/fleet/topology.d.ts +0 -23
  349. package/dist/cli/commands/fleet/topology.d.ts.map +0 -1
  350. package/dist/cli/commands/fleet/topology.js +0 -376
  351. package/dist/cli/commands/fleet/topology.js.map +0 -1
  352. package/dist/cli/commands/monitor/alerts.d.ts +0 -45
  353. package/dist/cli/commands/monitor/alerts.d.ts.map +0 -1
  354. package/dist/cli/commands/monitor/alerts.js +0 -168
  355. package/dist/cli/commands/monitor/alerts.js.map +0 -1
  356. package/dist/cli/commands/monitor/analyze.d.ts +0 -49
  357. package/dist/cli/commands/monitor/analyze.d.ts.map +0 -1
  358. package/dist/cli/commands/monitor/analyze.js +0 -209
  359. package/dist/cli/commands/monitor/analyze.js.map +0 -1
  360. package/dist/cli/commands/monitor/compare.d.ts +0 -38
  361. package/dist/cli/commands/monitor/compare.d.ts.map +0 -1
  362. package/dist/cli/commands/monitor/compare.js +0 -177
  363. package/dist/cli/commands/monitor/compare.js.map +0 -1
  364. package/dist/cli/commands/monitor/dashboard.d.ts +0 -34
  365. package/dist/cli/commands/monitor/dashboard.d.ts.map +0 -1
  366. package/dist/cli/commands/monitor/dashboard.js +0 -157
  367. package/dist/cli/commands/monitor/dashboard.js.map +0 -1
  368. package/dist/cli/commands/monitor/export.d.ts +0 -36
  369. package/dist/cli/commands/monitor/export.d.ts.map +0 -1
  370. package/dist/cli/commands/monitor/export.js +0 -157
  371. package/dist/cli/commands/monitor/export.js.map +0 -1
  372. package/dist/cli/commands/monitor/index.d.ts +0 -11
  373. package/dist/cli/commands/monitor/index.d.ts.map +0 -1
  374. package/dist/cli/commands/monitor/index.js +0 -14
  375. package/dist/cli/commands/monitor/index.js.map +0 -1
  376. package/dist/cli/commands/quality/baseline.d.ts +0 -27
  377. package/dist/cli/commands/quality/baseline.d.ts.map +0 -1
  378. package/dist/cli/commands/quality/baseline.js +0 -124
  379. package/dist/cli/commands/quality/baseline.js.map +0 -1
  380. package/dist/cli/commands/quality/compare.d.ts +0 -36
  381. package/dist/cli/commands/quality/compare.d.ts.map +0 -1
  382. package/dist/cli/commands/quality/compare.js +0 -136
  383. package/dist/cli/commands/quality/compare.js.map +0 -1
  384. package/dist/cli/commands/quality/decision.d.ts +0 -81
  385. package/dist/cli/commands/quality/decision.d.ts.map +0 -1
  386. package/dist/cli/commands/quality/decision.js +0 -319
  387. package/dist/cli/commands/quality/decision.js.map +0 -1
  388. package/dist/cli/commands/quality/gate.d.ts +0 -47
  389. package/dist/cli/commands/quality/gate.d.ts.map +0 -1
  390. package/dist/cli/commands/quality/gate.js +0 -205
  391. package/dist/cli/commands/quality/gate.js.map +0 -1
  392. package/dist/cli/commands/quality/index.d.ts +0 -17
  393. package/dist/cli/commands/quality/index.d.ts.map +0 -1
  394. package/dist/cli/commands/quality/index.js +0 -41
  395. package/dist/cli/commands/quality/index.js.map +0 -1
  396. package/dist/cli/commands/quality/policy.d.ts +0 -57
  397. package/dist/cli/commands/quality/policy.d.ts.map +0 -1
  398. package/dist/cli/commands/quality/policy.js +0 -359
  399. package/dist/cli/commands/quality/policy.js.map +0 -1
  400. package/dist/cli/commands/quality/risk.d.ts +0 -41
  401. package/dist/cli/commands/quality/risk.d.ts.map +0 -1
  402. package/dist/cli/commands/quality/risk.js +0 -255
  403. package/dist/cli/commands/quality/risk.js.map +0 -1
  404. package/dist/cli/commands/quality/trends.d.ts +0 -40
  405. package/dist/cli/commands/quality/trends.d.ts.map +0 -1
  406. package/dist/cli/commands/quality/trends.js +0 -122
  407. package/dist/cli/commands/quality/trends.js.map +0 -1
  408. package/dist/cli/commands/quality/validate.d.ts +0 -44
  409. package/dist/cli/commands/quality/validate.d.ts.map +0 -1
  410. package/dist/cli/commands/quality/validate.js +0 -234
  411. package/dist/cli/commands/quality/validate.js.map +0 -1
  412. package/dist/cli/commands/test/analyze-failures.d.ts +0 -39
  413. package/dist/cli/commands/test/analyze-failures.d.ts.map +0 -1
  414. package/dist/cli/commands/test/analyze-failures.js +0 -113
  415. package/dist/cli/commands/test/analyze-failures.js.map +0 -1
  416. package/dist/cli/commands/test/clean.d.ts +0 -3
  417. package/dist/cli/commands/test/clean.d.ts.map +0 -1
  418. package/dist/cli/commands/test/clean.js +0 -148
  419. package/dist/cli/commands/test/clean.js.map +0 -1
  420. package/dist/cli/commands/test/debug.d.ts +0 -3
  421. package/dist/cli/commands/test/debug.d.ts.map +0 -1
  422. package/dist/cli/commands/test/debug.js +0 -167
  423. package/dist/cli/commands/test/debug.js.map +0 -1
  424. package/dist/cli/commands/test/diff.d.ts +0 -3
  425. package/dist/cli/commands/test/diff.d.ts.map +0 -1
  426. package/dist/cli/commands/test/diff.js +0 -195
  427. package/dist/cli/commands/test/diff.js.map +0 -1
  428. package/dist/cli/commands/test/flakiness.d.ts +0 -32
  429. package/dist/cli/commands/test/flakiness.d.ts.map +0 -1
  430. package/dist/cli/commands/test/flakiness.js +0 -121
  431. package/dist/cli/commands/test/flakiness.js.map +0 -1
  432. package/dist/cli/commands/test/index.d.ts +0 -17
  433. package/dist/cli/commands/test/index.d.ts.map +0 -1
  434. package/dist/cli/commands/test/index.js +0 -45
  435. package/dist/cli/commands/test/index.js.map +0 -1
  436. package/dist/cli/commands/test/mutate.d.ts +0 -29
  437. package/dist/cli/commands/test/mutate.d.ts.map +0 -1
  438. package/dist/cli/commands/test/mutate.js +0 -163
  439. package/dist/cli/commands/test/mutate.js.map +0 -1
  440. package/dist/cli/commands/test/parallel.d.ts +0 -3
  441. package/dist/cli/commands/test/parallel.d.ts.map +0 -1
  442. package/dist/cli/commands/test/parallel.js +0 -117
  443. package/dist/cli/commands/test/parallel.js.map +0 -1
  444. package/dist/cli/commands/test/profile.d.ts +0 -3
  445. package/dist/cli/commands/test/profile.d.ts.map +0 -1
  446. package/dist/cli/commands/test/profile.js +0 -156
  447. package/dist/cli/commands/test/profile.js.map +0 -1
  448. package/dist/cli/commands/test/queue.d.ts +0 -3
  449. package/dist/cli/commands/test/queue.d.ts.map +0 -1
  450. package/dist/cli/commands/test/queue.js +0 -140
  451. package/dist/cli/commands/test/queue.js.map +0 -1
  452. package/dist/cli/commands/test/retry.d.ts +0 -3
  453. package/dist/cli/commands/test/retry.d.ts.map +0 -1
  454. package/dist/cli/commands/test/retry.js +0 -105
  455. package/dist/cli/commands/test/retry.js.map +0 -1
  456. package/dist/cli/commands/test/snapshot.d.ts +0 -3
  457. package/dist/cli/commands/test/snapshot.d.ts.map +0 -1
  458. package/dist/cli/commands/test/snapshot.js +0 -176
  459. package/dist/cli/commands/test/snapshot.js.map +0 -1
  460. package/dist/cli/commands/test/trace.d.ts +0 -3
  461. package/dist/cli/commands/test/trace.d.ts.map +0 -1
  462. package/dist/cli/commands/test/trace.js +0 -137
  463. package/dist/cli/commands/test/trace.js.map +0 -1
  464. package/dist/cli/commands/test/watch.d.ts +0 -3
  465. package/dist/cli/commands/test/watch.d.ts.map +0 -1
  466. package/dist/cli/commands/test/watch.js +0 -130
  467. package/dist/cli/commands/test/watch.js.map +0 -1
  468. package/dist/cli/index-spec.d.ts +0 -3
  469. package/dist/cli/index-spec.d.ts.map +0 -1
  470. package/dist/cli/index-spec.js +0 -154
  471. package/dist/cli/index-spec.js.map +0 -1
  472. package/dist/cli/index-working.d.ts +0 -7
  473. package/dist/cli/index-working.d.ts.map +0 -1
  474. package/dist/cli/index-working.js +0 -617
  475. package/dist/cli/index-working.js.map +0 -1
  476. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts +0 -83
  477. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.d.ts.map +0 -1
  478. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js +0 -130
  479. package/dist/mcp/handlers/filtered/coverage-analyzer-filtered.js.map +0 -1
  480. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts +0 -58
  481. package/dist/mcp/handlers/filtered/flaky-detector-filtered.d.ts.map +0 -1
  482. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js +0 -84
  483. package/dist/mcp/handlers/filtered/flaky-detector-filtered.js.map +0 -1
  484. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts +0 -54
  485. package/dist/mcp/handlers/filtered/security-scanner-filtered.d.ts.map +0 -1
  486. package/dist/mcp/handlers/filtered/security-scanner-filtered.js +0 -73
  487. package/dist/mcp/handlers/filtered/security-scanner-filtered.js.map +0 -1
  488. package/dist/mcp/handlers/integration/contract-validate.d.ts +0 -10
  489. package/dist/mcp/handlers/integration/contract-validate.d.ts.map +0 -1
  490. package/dist/mcp/handlers/integration/contract-validate.js +0 -348
  491. package/dist/mcp/handlers/integration/contract-validate.js.map +0 -1
  492. package/dist/reporting/ResultAggregator.d.ts +0 -107
  493. package/dist/reporting/ResultAggregator.d.ts.map +0 -1
  494. package/dist/reporting/ResultAggregator.js +0 -435
  495. package/dist/reporting/ResultAggregator.js.map +0 -1
  496. package/dist/reporting/index.d.ts +0 -48
  497. package/dist/reporting/index.d.ts.map +0 -1
  498. package/dist/reporting/index.js +0 -154
  499. package/dist/reporting/index.js.map +0 -1
  500. package/dist/reporting/reporters/ControlLoopReporter.d.ts +0 -128
  501. package/dist/reporting/reporters/ControlLoopReporter.d.ts.map +0 -1
  502. package/dist/reporting/reporters/ControlLoopReporter.js +0 -417
  503. package/dist/reporting/reporters/ControlLoopReporter.js.map +0 -1
  504. package/dist/reporting/reporters/HumanReadableReporter.d.ts +0 -140
  505. package/dist/reporting/reporters/HumanReadableReporter.d.ts.map +0 -1
  506. package/dist/reporting/reporters/HumanReadableReporter.js +0 -524
  507. package/dist/reporting/reporters/HumanReadableReporter.js.map +0 -1
  508. package/dist/reporting/reporters/JSONReporter.d.ts +0 -251
  509. package/dist/reporting/reporters/JSONReporter.d.ts.map +0 -1
  510. package/dist/reporting/reporters/JSONReporter.js +0 -325
  511. package/dist/reporting/reporters/JSONReporter.js.map +0 -1
  512. package/dist/reporting/reporters/index.d.ts +0 -14
  513. package/dist/reporting/reporters/index.d.ts.map +0 -1
  514. package/dist/reporting/reporters/index.js +0 -19
  515. package/dist/reporting/reporters/index.js.map +0 -1
  516. package/dist/reporting/types.d.ts +0 -427
  517. package/dist/reporting/types.d.ts.map +0 -1
  518. package/dist/reporting/types.js +0 -12
  519. 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":";AAAA;;;;;;;;;GASG;;;AAGH,mCAUiB;AAEjB;;GAEG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAC;AACpC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AACrC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;GAEG;AACH,MAAM,wBAAwB,GAAG,MAAM,CAAC;AACxC,MAAM,4BAA4B,GAAG,MAAM,CAAC;AAC5C,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEzC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAa,WAAW;IAQtB;;;;OAIG;IACH,YAAY,SAAqC,EAAE;QAX3C,iBAAY,GAA8B,IAAI,CAAC;QAC/C,mBAAc,GAAW,CAAC,CAAC;QAC3B,kBAAa,GAA4C,IAAI,GAAG,EAAE,CAAC;QACnE,gBAAW,GAAY,KAAK,CAAC;QAC7B,qBAAgB,GAAuC,IAAI,CAAC;QAQlE,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,mCAA2B;YAC9B,GAAG,MAAM;YACT,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,mCAA2B,CAAC,WAAW;SAC3E,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM;QACjB,oBAAoB;QACpB,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,YAAa,CAAC;QAC5B,CAAC;QAED,+DAA+D;QAC/D,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEhD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC;YAC3C,OAAO,MAAM,CAAC;QAChB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAED;;OAEG;IACI,eAAe;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACI,oBAAoB,CACzB,QAA2B,EAC3B,SAA4B;QAE5B,OAAO,+BAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAClB,QAA2B,EAC3B,SAA4B,EAC5B,YAAoB,GAAG;QAEvB,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnE,OAAO,WAAW,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;;;;;OAMG;IACI,EAAE,CAAI,IAAkB,EAAE,OAA2B;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,OAA0B,CAAC,CAAC;QAC9D,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,OAA0B,CAAC,CAAC;IAChF,CAAC;IAED;;OAEG;IACI,SAAS;QACd,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,+CAA+C;IAC/C,kBAAkB;IAClB,+CAA+C;IAEvC,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAC7C,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,SAAS,CAAC,oBAAY,CAAC,gBAAgB,EAAE;YAC5C,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACjE,SAAS,EAAE,SAAS;SACrB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAEhD,IAAI,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,SAAS,EACT,gCAAgC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAC7E,CAAC;gBACF,IAAI,CAAC,SAAS,CAAC,oBAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;gBACrD,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,0CAA0C;YAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAE3D,eAAe;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;gBAC3B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACnC,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,oBAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CACpC,SAAS,EACT,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CACnE,CAAC;YACF,IAAI,CAAC,SAAS,CAAC,oBAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YACrD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAExC,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAChC,gCAAgC;YAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEnD,OAAO,OAAO;iBACX,MAAM,CACL,CAAC,CAAC,EAAoD,EAAE,CACtD,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAC9C;iBACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,6BAA6B;YAC7B,MAAM,SAAS,GAA0B,EAAE,CAAC;YAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;wBACrB,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC3B,CAAC;oBACD,IAAI,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;wBAC/C,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,0BAA0B;gBAC5B,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,MAAiB;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,OAAO,CAAC;oBACN,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,EAAE;oBACjB,UAAU,EAAE,CAAC;oBACb,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACtC,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,SAAS;iBACjB,CAAC,CAAC;YACL,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAExB,gEAAgE;YAChE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;iBAC5B,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,CAAC;oBACN,GAAG,MAAM;oBACT,MAAM,EAAE,SAAS;oBACjB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACvC,CAAC,CAAC;YACL,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,OAAO,CAAC;oBACN,MAAM,EAAE,SAAS;oBACjB,aAAa,EAAE,EAAE;oBACjB,UAAU,EAAE,CAAC;oBACb,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;oBACtC,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB;iBACpE,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAC9B,MAAiB;QAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,2CAA2C;YAC3C,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC;gBAC/B,UAAU,EAAE,CAAC,MAAM,CAAC;gBACpB,oBAAoB,EAAE,CAAC;aACxB,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;gBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAExB,EAAE,CAAC,cAAc,GAAG,CAAC,KAAK,EAAE,EAAE;gBAC5B,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACjC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;oBAE5C,8CAA8C;oBAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBACpC,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;wBAC9C,IAAI,MAAM,EAAE,CAAC;4BACX,QAAQ,GAAG,IAAI,CAAC;4BAChB,YAAY,CAAC,gBAAgB,CAAC,CAAC;4BAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;4BACX,OAAO,CAAC;gCACN,aAAa,EAAE,MAAM,CAAC,OAAO;gCAC7B,UAAU,EAAE,MAAM,CAAC,IAAI;gCACvB,OAAO,EAAE,IAAI;6BACd,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACjD,mCAAmC;oBACnC,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC,CAAC;YAEF,EAAE,CAAC,yBAAyB,GAAG,GAAG,EAAE;gBAClC,IAAI,EAAE,CAAC,iBAAiB,KAAK,UAAU,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACrD,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,CAAC;YAEF,+CAA+C;YAC/C,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAEtC,sCAAsC;YACtC,EAAE,CAAC,WAAW,EAAE;iBACb,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;iBAC9C,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,CAAC,gBAAgB,CAAC,CAAC;oBAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CACpB,eAAuB;QAEvB,8BAA8B;QAC9B,6EAA6E;QAC7E,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEpC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,gBAAgB,CACtB,SAAgC,EAChC,SAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;gBACtC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE1C,8BAA8B;QAC9B,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC;QAC/C,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC;QAE/C,wCAAwC;QACxC,IAAI,OAA0B,CAAC;QAC/B,IAAI,UAAkB,CAAC;QAEvB,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,GAAG,yBAAiB,CAAC,MAAM,CAAC;YACnC,UAAU,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,iBAAiB,IAAI,qBAAqB,EAAE,CAAC;YACtD,qDAAqD;YACrD,mCAAmC;YACnC,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACpD,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,iBAAiB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACvD,0DAA0D;YAC1D,OAAO,GAAG,yBAAiB,CAAC,SAAS,CAAC;YACtC,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,sDAAsD;YACtD,OAAO,GAAG,yBAAiB,CAAC,OAAO,CAAC;YACpC,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;QAED,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAEvD,OAAO;YACL,OAAO;YACP,eAAe,EAAE,aAAa,EAAE,aAAa;YAC7C,YAAY,EAAE,aAAa,EAAE,UAAU;YACvC,qBAAqB;YACrB,4BAA4B,EAAE,OAAO,KAAK,yBAAiB,CAAC,SAAS;YACrE,UAAU;YACV,WAAW;YACX,UAAU;YACV,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;SACvB,CAAC;IACJ,CAAC;IAEO,yBAAyB,CAC/B,SAAgC;QAEhC,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,yBAAyB;QAEzB,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;YAC5B,OAAO,yBAAiB,CAAC,OAAO,CAAC;QACnC,CAAC;QAED,wEAAwE;QACxE,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;YAClD,OAAO,yBAAiB,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,iEAAiE;QACjE,uEAAuE;QACvE,oEAAoE;QACpE,+CAA+C;QAC/C,OAAO,yBAAiB,CAAC,QAAQ,CAAC;IACpC,CAAC;IAEO,WAAW,CAAC,EAAU;QAC5B,8BAA8B;QAC9B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,kBAAkB;YAClB,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,CAAC;QACpE,CAAC;QAED,aAAa;QACb,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACjC,gBAAgB;QAChB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QACtE,iBAAiB;QACjB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACtD,yBAAyB;QACzB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAElC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,kBAAkB,CAAC,SAAiB,EAAE,KAAa;QACzD,OAAO;YACL,OAAO,EAAE,yBAAiB,CAAC,MAAM;YACjC,qBAAqB,EAAE,KAAK;YAC5B,4BAA4B,EAAE,KAAK;YACnC,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,EAAE;YACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,KAAK;SACN,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,MAAiB;QACpC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;IACnE,CAAC;IAEO,SAAS,CAAI,IAAkB,EAAE,IAAO;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAgB;gBACzB,IAAI;gBACJ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,IAAI;aACL,CAAC;YACF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,IAAI,CAAC;oBACH,OAAO,CAAC,KAAK,CAAC,CAAC;gBACjB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AA3eD,kCA2eC;AAED,kBAAe,WAAW,CAAC"}