@grafema/core 0.1.0-alpha.1

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 (402) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +76 -0
  3. package/dist/Orchestrator.d.ts +142 -0
  4. package/dist/Orchestrator.d.ts.map +1 -0
  5. package/dist/Orchestrator.js +481 -0
  6. package/dist/api/GraphAPI.d.ts +87 -0
  7. package/dist/api/GraphAPI.d.ts.map +1 -0
  8. package/dist/api/GraphAPI.js +210 -0
  9. package/dist/api/GuaranteeAPI.d.ts +147 -0
  10. package/dist/api/GuaranteeAPI.d.ts.map +1 -0
  11. package/dist/api/GuaranteeAPI.js +288 -0
  12. package/dist/core/ASTWorker.d.ts +133 -0
  13. package/dist/core/ASTWorker.d.ts.map +1 -0
  14. package/dist/core/ASTWorker.js +352 -0
  15. package/dist/core/ASTWorkerPool.d.ts +85 -0
  16. package/dist/core/ASTWorkerPool.d.ts.map +1 -0
  17. package/dist/core/ASTWorkerPool.js +207 -0
  18. package/dist/core/AnalysisQueue.d.ts +104 -0
  19. package/dist/core/AnalysisQueue.d.ts.map +1 -0
  20. package/dist/core/AnalysisQueue.js +299 -0
  21. package/dist/core/AnalysisWorker.d.ts +14 -0
  22. package/dist/core/AnalysisWorker.d.ts.map +1 -0
  23. package/dist/core/AnalysisWorker.js +307 -0
  24. package/dist/core/GraphBackend.d.ts +156 -0
  25. package/dist/core/GraphBackend.d.ts.map +1 -0
  26. package/dist/core/GraphBackend.js +85 -0
  27. package/dist/core/GuaranteeManager.d.ts +230 -0
  28. package/dist/core/GuaranteeManager.d.ts.map +1 -0
  29. package/dist/core/GuaranteeManager.js +352 -0
  30. package/dist/core/ManifestStore.d.ts +71 -0
  31. package/dist/core/ManifestStore.d.ts.map +1 -0
  32. package/dist/core/ManifestStore.js +146 -0
  33. package/dist/core/NodeFactory.d.ts +160 -0
  34. package/dist/core/NodeFactory.d.ts.map +1 -0
  35. package/dist/core/NodeFactory.js +137 -0
  36. package/dist/core/NodeId.d.ts +88 -0
  37. package/dist/core/NodeId.d.ts.map +1 -0
  38. package/dist/core/NodeId.js +170 -0
  39. package/dist/core/ParallelAnalyzer.d.ts +120 -0
  40. package/dist/core/ParallelAnalyzer.d.ts.map +1 -0
  41. package/dist/core/ParallelAnalyzer.js +331 -0
  42. package/dist/core/PriorityQueue.d.ts +106 -0
  43. package/dist/core/PriorityQueue.d.ts.map +1 -0
  44. package/dist/core/PriorityQueue.js +168 -0
  45. package/dist/core/Profiler.d.ts +75 -0
  46. package/dist/core/Profiler.d.ts.map +1 -0
  47. package/dist/core/Profiler.js +149 -0
  48. package/dist/core/QueueWorker.d.ts +12 -0
  49. package/dist/core/QueueWorker.d.ts.map +1 -0
  50. package/dist/core/QueueWorker.js +567 -0
  51. package/dist/core/RFDBClient.d.ts +179 -0
  52. package/dist/core/RFDBClient.d.ts.map +1 -0
  53. package/dist/core/RFDBClient.js +429 -0
  54. package/dist/core/Task.d.ts +56 -0
  55. package/dist/core/Task.d.ts.map +1 -0
  56. package/dist/core/Task.js +85 -0
  57. package/dist/core/TaskTypes.d.ts +20 -0
  58. package/dist/core/TaskTypes.d.ts.map +1 -0
  59. package/dist/core/TaskTypes.js +10 -0
  60. package/dist/core/VersionManager.d.ts +166 -0
  61. package/dist/core/VersionManager.d.ts.map +1 -0
  62. package/dist/core/VersionManager.js +237 -0
  63. package/dist/core/WorkerPool.d.ts +82 -0
  64. package/dist/core/WorkerPool.d.ts.map +1 -0
  65. package/dist/core/WorkerPool.js +109 -0
  66. package/dist/core/nodes/CallSiteNode.d.ts +26 -0
  67. package/dist/core/nodes/CallSiteNode.d.ts.map +1 -0
  68. package/dist/core/nodes/CallSiteNode.js +44 -0
  69. package/dist/core/nodes/ClassNode.d.ts +25 -0
  70. package/dist/core/nodes/ClassNode.d.ts.map +1 -0
  71. package/dist/core/nodes/ClassNode.js +40 -0
  72. package/dist/core/nodes/ConstantNode.d.ts +24 -0
  73. package/dist/core/nodes/ConstantNode.d.ts.map +1 -0
  74. package/dist/core/nodes/ConstantNode.js +39 -0
  75. package/dist/core/nodes/DatabaseQueryNode.d.ts +22 -0
  76. package/dist/core/nodes/DatabaseQueryNode.d.ts.map +1 -0
  77. package/dist/core/nodes/DatabaseQueryNode.js +37 -0
  78. package/dist/core/nodes/EntrypointNode.d.ts +102 -0
  79. package/dist/core/nodes/EntrypointNode.d.ts.map +1 -0
  80. package/dist/core/nodes/EntrypointNode.js +119 -0
  81. package/dist/core/nodes/EventListenerNode.d.ts +25 -0
  82. package/dist/core/nodes/EventListenerNode.d.ts.map +1 -0
  83. package/dist/core/nodes/EventListenerNode.js +39 -0
  84. package/dist/core/nodes/ExportNode.d.ts +26 -0
  85. package/dist/core/nodes/ExportNode.d.ts.map +1 -0
  86. package/dist/core/nodes/ExportNode.js +40 -0
  87. package/dist/core/nodes/ExternalStdioNode.d.ts +17 -0
  88. package/dist/core/nodes/ExternalStdioNode.d.ts.map +1 -0
  89. package/dist/core/nodes/ExternalStdioNode.js +26 -0
  90. package/dist/core/nodes/FunctionNode.d.ts +27 -0
  91. package/dist/core/nodes/FunctionNode.d.ts.map +1 -0
  92. package/dist/core/nodes/FunctionNode.js +53 -0
  93. package/dist/core/nodes/GuaranteeNode.d.ts +76 -0
  94. package/dist/core/nodes/GuaranteeNode.d.ts.map +1 -0
  95. package/dist/core/nodes/GuaranteeNode.js +117 -0
  96. package/dist/core/nodes/HttpRequestNode.d.ts +24 -0
  97. package/dist/core/nodes/HttpRequestNode.d.ts.map +1 -0
  98. package/dist/core/nodes/HttpRequestNode.js +38 -0
  99. package/dist/core/nodes/ImportNode.d.ts +27 -0
  100. package/dist/core/nodes/ImportNode.d.ts.map +1 -0
  101. package/dist/core/nodes/ImportNode.js +43 -0
  102. package/dist/core/nodes/LiteralNode.d.ts +26 -0
  103. package/dist/core/nodes/LiteralNode.d.ts.map +1 -0
  104. package/dist/core/nodes/LiteralNode.js +40 -0
  105. package/dist/core/nodes/MethodCallNode.d.ts +29 -0
  106. package/dist/core/nodes/MethodCallNode.d.ts.map +1 -0
  107. package/dist/core/nodes/MethodCallNode.js +47 -0
  108. package/dist/core/nodes/MethodNode.d.ts +29 -0
  109. package/dist/core/nodes/MethodNode.d.ts.map +1 -0
  110. package/dist/core/nodes/MethodNode.js +44 -0
  111. package/dist/core/nodes/ModuleNode.d.ts +29 -0
  112. package/dist/core/nodes/ModuleNode.d.ts.map +1 -0
  113. package/dist/core/nodes/ModuleNode.js +49 -0
  114. package/dist/core/nodes/NodeKind.d.ts +91 -0
  115. package/dist/core/nodes/NodeKind.d.ts.map +1 -0
  116. package/dist/core/nodes/NodeKind.js +146 -0
  117. package/dist/core/nodes/ParameterNode.d.ts +26 -0
  118. package/dist/core/nodes/ParameterNode.d.ts.map +1 -0
  119. package/dist/core/nodes/ParameterNode.js +43 -0
  120. package/dist/core/nodes/ScopeNode.d.ts +32 -0
  121. package/dist/core/nodes/ScopeNode.d.ts.map +1 -0
  122. package/dist/core/nodes/ScopeNode.js +47 -0
  123. package/dist/core/nodes/ServiceNode.d.ts +44 -0
  124. package/dist/core/nodes/ServiceNode.d.ts.map +1 -0
  125. package/dist/core/nodes/ServiceNode.js +49 -0
  126. package/dist/core/nodes/VariableDeclarationNode.d.ts +22 -0
  127. package/dist/core/nodes/VariableDeclarationNode.d.ts.map +1 -0
  128. package/dist/core/nodes/VariableDeclarationNode.js +38 -0
  129. package/dist/core/nodes/index.d.ts +25 -0
  130. package/dist/core/nodes/index.d.ts.map +1 -0
  131. package/dist/core/nodes/index.js +30 -0
  132. package/dist/index.d.ts +57 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +63 -0
  135. package/dist/plugins/Plugin.d.ts +44 -0
  136. package/dist/plugins/Plugin.d.ts.map +1 -0
  137. package/dist/plugins/Plugin.js +46 -0
  138. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts +23 -0
  139. package/dist/plugins/analysis/DatabaseAnalyzer.d.ts.map +1 -0
  140. package/dist/plugins/analysis/DatabaseAnalyzer.js +260 -0
  141. package/dist/plugins/analysis/ExpressAnalyzer.d.ts +19 -0
  142. package/dist/plugins/analysis/ExpressAnalyzer.d.ts.map +1 -0
  143. package/dist/plugins/analysis/ExpressAnalyzer.js +306 -0
  144. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts +17 -0
  145. package/dist/plugins/analysis/ExpressRouteAnalyzer.d.ts.map +1 -0
  146. package/dist/plugins/analysis/ExpressRouteAnalyzer.js +308 -0
  147. package/dist/plugins/analysis/FetchAnalyzer.d.ts +38 -0
  148. package/dist/plugins/analysis/FetchAnalyzer.d.ts.map +1 -0
  149. package/dist/plugins/analysis/FetchAnalyzer.js +344 -0
  150. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts +65 -0
  151. package/dist/plugins/analysis/IncrementalAnalysisPlugin.d.ts.map +1 -0
  152. package/dist/plugins/analysis/IncrementalAnalysisPlugin.js +472 -0
  153. package/dist/plugins/analysis/JSASTAnalyzer.d.ts +84 -0
  154. package/dist/plugins/analysis/JSASTAnalyzer.d.ts.map +1 -0
  155. package/dist/plugins/analysis/JSASTAnalyzer.js +1378 -0
  156. package/dist/plugins/analysis/ReactAnalyzer.d.ts +90 -0
  157. package/dist/plugins/analysis/ReactAnalyzer.d.ts.map +1 -0
  158. package/dist/plugins/analysis/ReactAnalyzer.js +1153 -0
  159. package/dist/plugins/analysis/RustAnalyzer.d.ts +13 -0
  160. package/dist/plugins/analysis/RustAnalyzer.d.ts.map +1 -0
  161. package/dist/plugins/analysis/RustAnalyzer.js +259 -0
  162. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts +21 -0
  163. package/dist/plugins/analysis/SQLiteAnalyzer.d.ts.map +1 -0
  164. package/dist/plugins/analysis/SQLiteAnalyzer.js +317 -0
  165. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts +35 -0
  166. package/dist/plugins/analysis/ServiceLayerAnalyzer.d.ts.map +1 -0
  167. package/dist/plugins/analysis/ServiceLayerAnalyzer.js +303 -0
  168. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts +33 -0
  169. package/dist/plugins/analysis/SocketIOAnalyzer.d.ts.map +1 -0
  170. package/dist/plugins/analysis/SocketIOAnalyzer.js +283 -0
  171. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts +27 -0
  172. package/dist/plugins/analysis/SystemDbAnalyzer.d.ts.map +1 -0
  173. package/dist/plugins/analysis/SystemDbAnalyzer.js +211 -0
  174. package/dist/plugins/analysis/ast/ConditionParser.d.ts +85 -0
  175. package/dist/plugins/analysis/ast/ConditionParser.d.ts.map +1 -0
  176. package/dist/plugins/analysis/ast/ConditionParser.js +277 -0
  177. package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts +15 -0
  178. package/dist/plugins/analysis/ast/ExpressionEvaluator.d.ts.map +1 -0
  179. package/dist/plugins/analysis/ast/ExpressionEvaluator.js +91 -0
  180. package/dist/plugins/analysis/ast/GraphBuilder.d.ts +77 -0
  181. package/dist/plugins/analysis/ast/GraphBuilder.d.ts.map +1 -0
  182. package/dist/plugins/analysis/ast/GraphBuilder.js +1077 -0
  183. package/dist/plugins/analysis/ast/OxcAdapter.d.ts +41 -0
  184. package/dist/plugins/analysis/ast/OxcAdapter.d.ts.map +1 -0
  185. package/dist/plugins/analysis/ast/OxcAdapter.js +40 -0
  186. package/dist/plugins/analysis/ast/types.d.ts +346 -0
  187. package/dist/plugins/analysis/ast/types.d.ts.map +1 -0
  188. package/dist/plugins/analysis/ast/types.js +4 -0
  189. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts +93 -0
  190. package/dist/plugins/analysis/ast/visitors/ASTVisitor.d.ts.map +1 -0
  191. package/dist/plugins/analysis/ast/visitors/ASTVisitor.js +24 -0
  192. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts +77 -0
  193. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.d.ts.map +1 -0
  194. package/dist/plugins/analysis/ast/visitors/CallExpressionVisitor.js +377 -0
  195. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts +27 -0
  196. package/dist/plugins/analysis/ast/visitors/ClassVisitor.d.ts.map +1 -0
  197. package/dist/plugins/analysis/ast/visitors/ClassVisitor.js +232 -0
  198. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts +25 -0
  199. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.d.ts.map +1 -0
  200. package/dist/plugins/analysis/ast/visitors/FunctionVisitor.js +172 -0
  201. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts +29 -0
  202. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.d.ts.map +1 -0
  203. package/dist/plugins/analysis/ast/visitors/ImportExportVisitor.js +180 -0
  204. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts +14 -0
  205. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.d.ts.map +1 -0
  206. package/dist/plugins/analysis/ast/visitors/TypeScriptVisitor.js +200 -0
  207. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts +45 -0
  208. package/dist/plugins/analysis/ast/visitors/VariableVisitor.d.ts.map +1 -0
  209. package/dist/plugins/analysis/ast/visitors/VariableVisitor.js +150 -0
  210. package/dist/plugins/analysis/ast/visitors/index.d.ts +17 -0
  211. package/dist/plugins/analysis/ast/visitors/index.d.ts.map +1 -0
  212. package/dist/plugins/analysis/ast/visitors/index.js +13 -0
  213. package/dist/plugins/discovery/DiscoveryPlugin.d.ts +34 -0
  214. package/dist/plugins/discovery/DiscoveryPlugin.d.ts.map +1 -0
  215. package/dist/plugins/discovery/DiscoveryPlugin.js +26 -0
  216. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts +26 -0
  217. package/dist/plugins/discovery/MonorepoServiceDiscovery.d.ts.map +1 -0
  218. package/dist/plugins/discovery/MonorepoServiceDiscovery.js +79 -0
  219. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts +14 -0
  220. package/dist/plugins/discovery/SimpleProjectDiscovery.d.ts.map +1 -0
  221. package/dist/plugins/discovery/SimpleProjectDiscovery.js +65 -0
  222. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts +19 -0
  223. package/dist/plugins/discovery/ZonServiceDiscovery.d.ts.map +1 -0
  224. package/dist/plugins/discovery/ZonServiceDiscovery.js +204 -0
  225. package/dist/plugins/enrichment/AliasTracker.d.ts +40 -0
  226. package/dist/plugins/enrichment/AliasTracker.d.ts.map +1 -0
  227. package/dist/plugins/enrichment/AliasTracker.js +290 -0
  228. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts +30 -0
  229. package/dist/plugins/enrichment/HTTPConnectionEnricher.d.ts.map +1 -0
  230. package/dist/plugins/enrichment/HTTPConnectionEnricher.js +135 -0
  231. package/dist/plugins/enrichment/ImportExportLinker.d.ts +30 -0
  232. package/dist/plugins/enrichment/ImportExportLinker.d.ts.map +1 -0
  233. package/dist/plugins/enrichment/ImportExportLinker.js +176 -0
  234. package/dist/plugins/enrichment/InstanceOfResolver.d.ts +21 -0
  235. package/dist/plugins/enrichment/InstanceOfResolver.d.ts.map +1 -0
  236. package/dist/plugins/enrichment/InstanceOfResolver.js +117 -0
  237. package/dist/plugins/enrichment/MethodCallResolver.d.ts +41 -0
  238. package/dist/plugins/enrichment/MethodCallResolver.d.ts.map +1 -0
  239. package/dist/plugins/enrichment/MethodCallResolver.js +252 -0
  240. package/dist/plugins/enrichment/MountPointResolver.d.ts +26 -0
  241. package/dist/plugins/enrichment/MountPointResolver.d.ts.map +1 -0
  242. package/dist/plugins/enrichment/MountPointResolver.js +189 -0
  243. package/dist/plugins/enrichment/PrefixEvaluator.d.ts +89 -0
  244. package/dist/plugins/enrichment/PrefixEvaluator.d.ts.map +1 -0
  245. package/dist/plugins/enrichment/PrefixEvaluator.js +415 -0
  246. package/dist/plugins/enrichment/RustFFIEnricher.d.ts +25 -0
  247. package/dist/plugins/enrichment/RustFFIEnricher.d.ts.map +1 -0
  248. package/dist/plugins/enrichment/RustFFIEnricher.js +170 -0
  249. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts +114 -0
  250. package/dist/plugins/enrichment/ValueDomainAnalyzer.d.ts.map +1 -0
  251. package/dist/plugins/enrichment/ValueDomainAnalyzer.js +464 -0
  252. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts +27 -0
  253. package/dist/plugins/indexing/IncrementalModuleIndexer.d.ts.map +1 -0
  254. package/dist/plugins/indexing/IncrementalModuleIndexer.js +238 -0
  255. package/dist/plugins/indexing/JSModuleIndexer.d.ts +33 -0
  256. package/dist/plugins/indexing/JSModuleIndexer.d.ts.map +1 -0
  257. package/dist/plugins/indexing/JSModuleIndexer.js +299 -0
  258. package/dist/plugins/indexing/RustModuleIndexer.d.ts +28 -0
  259. package/dist/plugins/indexing/RustModuleIndexer.d.ts.map +1 -0
  260. package/dist/plugins/indexing/RustModuleIndexer.js +140 -0
  261. package/dist/plugins/indexing/ServiceDetector.d.ts +46 -0
  262. package/dist/plugins/indexing/ServiceDetector.d.ts.map +1 -0
  263. package/dist/plugins/indexing/ServiceDetector.js +164 -0
  264. package/dist/plugins/validation/CallResolverValidator.d.ts +23 -0
  265. package/dist/plugins/validation/CallResolverValidator.d.ts.map +1 -0
  266. package/dist/plugins/validation/CallResolverValidator.js +108 -0
  267. package/dist/plugins/validation/DataFlowValidator.d.ts +24 -0
  268. package/dist/plugins/validation/DataFlowValidator.d.ts.map +1 -0
  269. package/dist/plugins/validation/DataFlowValidator.js +148 -0
  270. package/dist/plugins/validation/EvalBanValidator.d.ts +25 -0
  271. package/dist/plugins/validation/EvalBanValidator.d.ts.map +1 -0
  272. package/dist/plugins/validation/EvalBanValidator.js +123 -0
  273. package/dist/plugins/validation/GraphConnectivityValidator.d.ts +11 -0
  274. package/dist/plugins/validation/GraphConnectivityValidator.d.ts.map +1 -0
  275. package/dist/plugins/validation/GraphConnectivityValidator.js +135 -0
  276. package/dist/plugins/validation/SQLInjectionValidator.d.ts +43 -0
  277. package/dist/plugins/validation/SQLInjectionValidator.d.ts.map +1 -0
  278. package/dist/plugins/validation/SQLInjectionValidator.js +251 -0
  279. package/dist/plugins/validation/ShadowingDetector.d.ts +26 -0
  280. package/dist/plugins/validation/ShadowingDetector.d.ts.map +1 -0
  281. package/dist/plugins/validation/ShadowingDetector.js +119 -0
  282. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts +21 -0
  283. package/dist/plugins/validation/TypeScriptDeadCodeValidator.d.ts.map +1 -0
  284. package/dist/plugins/validation/TypeScriptDeadCodeValidator.js +151 -0
  285. package/dist/plugins/vcs/GitPlugin.d.ts +84 -0
  286. package/dist/plugins/vcs/GitPlugin.d.ts.map +1 -0
  287. package/dist/plugins/vcs/GitPlugin.js +295 -0
  288. package/dist/plugins/vcs/VCSPlugin.d.ts +133 -0
  289. package/dist/plugins/vcs/VCSPlugin.d.ts.map +1 -0
  290. package/dist/plugins/vcs/VCSPlugin.js +82 -0
  291. package/dist/plugins/vcs/index.d.ts +10 -0
  292. package/dist/plugins/vcs/index.d.ts.map +1 -0
  293. package/dist/plugins/vcs/index.js +18 -0
  294. package/dist/storage/backends/RFDBServerBackend.d.ts +258 -0
  295. package/dist/storage/backends/RFDBServerBackend.d.ts.map +1 -0
  296. package/dist/storage/backends/RFDBServerBackend.js +565 -0
  297. package/dist/storage/backends/typeValidation.d.ts +47 -0
  298. package/dist/storage/backends/typeValidation.d.ts.map +1 -0
  299. package/dist/storage/backends/typeValidation.js +137 -0
  300. package/dist/validation/PathValidator.d.ts +81 -0
  301. package/dist/validation/PathValidator.d.ts.map +1 -0
  302. package/dist/validation/PathValidator.js +251 -0
  303. package/package.json +57 -0
  304. package/src/.rfguard/current-session.txt +1 -0
  305. package/src/Orchestrator.ts +673 -0
  306. package/src/api/GraphAPI.ts +305 -0
  307. package/src/api/GuaranteeAPI.ts +401 -0
  308. package/src/core/ASTWorker.ts +567 -0
  309. package/src/core/ASTWorkerPool.ts +299 -0
  310. package/src/core/AnalysisQueue.ts +447 -0
  311. package/src/core/AnalysisWorker.ts +410 -0
  312. package/src/core/GraphBackend.ts +265 -0
  313. package/src/core/GuaranteeManager.ts +581 -0
  314. package/src/core/ManifestStore.ts +196 -0
  315. package/src/core/NodeFactory.ts +274 -0
  316. package/src/core/NodeId.ts +257 -0
  317. package/src/core/ParallelAnalyzer.ts +476 -0
  318. package/src/core/PriorityQueue.ts +227 -0
  319. package/src/core/Profiler.ts +188 -0
  320. package/src/core/QueueWorker.ts +780 -0
  321. package/src/core/Task.ts +107 -0
  322. package/src/core/TaskTypes.ts +40 -0
  323. package/src/core/VersionManager.ts +404 -0
  324. package/src/core/WorkerPool.ts +180 -0
  325. package/src/core/nodes/CallSiteNode.ts +72 -0
  326. package/src/core/nodes/ClassNode.ts +69 -0
  327. package/src/core/nodes/ConstantNode.ts +63 -0
  328. package/src/core/nodes/DatabaseQueryNode.ts +60 -0
  329. package/src/core/nodes/EntrypointNode.ts +164 -0
  330. package/src/core/nodes/EventListenerNode.ts +64 -0
  331. package/src/core/nodes/ExportNode.ts +71 -0
  332. package/src/core/nodes/ExternalStdioNode.ts +36 -0
  333. package/src/core/nodes/FunctionNode.ts +78 -0
  334. package/src/core/nodes/GuaranteeNode.ts +162 -0
  335. package/src/core/nodes/HttpRequestNode.ts +63 -0
  336. package/src/core/nodes/ImportNode.ts +75 -0
  337. package/src/core/nodes/LiteralNode.ts +67 -0
  338. package/src/core/nodes/MethodCallNode.ts +79 -0
  339. package/src/core/nodes/MethodNode.ts +78 -0
  340. package/src/core/nodes/ModuleNode.ts +74 -0
  341. package/src/core/nodes/NodeKind.ts +171 -0
  342. package/src/core/nodes/ParameterNode.ts +73 -0
  343. package/src/core/nodes/ScopeNode.ts +80 -0
  344. package/src/core/nodes/ServiceNode.ts +86 -0
  345. package/src/core/nodes/VariableDeclarationNode.ts +60 -0
  346. package/src/core/nodes/index.ts +49 -0
  347. package/src/index.ts +93 -0
  348. package/src/plugins/Plugin.ts +74 -0
  349. package/src/plugins/analysis/DatabaseAnalyzer.ts +322 -0
  350. package/src/plugins/analysis/ExpressAnalyzer.ts +401 -0
  351. package/src/plugins/analysis/ExpressRouteAnalyzer.ts +414 -0
  352. package/src/plugins/analysis/FetchAnalyzer.ts +441 -0
  353. package/src/plugins/analysis/IncrementalAnalysisPlugin.ts +686 -0
  354. package/src/plugins/analysis/JSASTAnalyzer.ts +1680 -0
  355. package/src/plugins/analysis/ReactAnalyzer.ts +1368 -0
  356. package/src/plugins/analysis/RustAnalyzer.ts +438 -0
  357. package/src/plugins/analysis/SQLiteAnalyzer.ts +388 -0
  358. package/src/plugins/analysis/ServiceLayerAnalyzer.ts +429 -0
  359. package/src/plugins/analysis/SocketIOAnalyzer.ts +395 -0
  360. package/src/plugins/analysis/SystemDbAnalyzer.ts +284 -0
  361. package/src/plugins/analysis/ast/ConditionParser.ts +333 -0
  362. package/src/plugins/analysis/ast/ExpressionEvaluator.ts +117 -0
  363. package/src/plugins/analysis/ast/GraphBuilder.ts +1371 -0
  364. package/src/plugins/analysis/ast/OxcAdapter.ts +63 -0
  365. package/src/plugins/analysis/ast/types.ts +400 -0
  366. package/src/plugins/analysis/ast/visitors/ASTVisitor.ts +137 -0
  367. package/src/plugins/analysis/ast/visitors/CallExpressionVisitor.ts +528 -0
  368. package/src/plugins/analysis/ast/visitors/ClassVisitor.ts +339 -0
  369. package/src/plugins/analysis/ast/visitors/FunctionVisitor.ts +273 -0
  370. package/src/plugins/analysis/ast/visitors/ImportExportVisitor.ts +259 -0
  371. package/src/plugins/analysis/ast/visitors/TypeScriptVisitor.ts +235 -0
  372. package/src/plugins/analysis/ast/visitors/VariableVisitor.ts +268 -0
  373. package/src/plugins/analysis/ast/visitors/index.ts +36 -0
  374. package/src/plugins/discovery/DiscoveryPlugin.ts +50 -0
  375. package/src/plugins/discovery/MonorepoServiceDiscovery.ts +117 -0
  376. package/src/plugins/discovery/SimpleProjectDiscovery.ts +102 -0
  377. package/src/plugins/enrichment/AliasTracker.ts +399 -0
  378. package/src/plugins/enrichment/HTTPConnectionEnricher.ts +192 -0
  379. package/src/plugins/enrichment/ImportExportLinker.ts +221 -0
  380. package/src/plugins/enrichment/InstanceOfResolver.ts +165 -0
  381. package/src/plugins/enrichment/MethodCallResolver.ts +333 -0
  382. package/src/plugins/enrichment/MountPointResolver.ts +264 -0
  383. package/src/plugins/enrichment/PrefixEvaluator.ts +527 -0
  384. package/src/plugins/enrichment/RustFFIEnricher.ts +218 -0
  385. package/src/plugins/enrichment/ValueDomainAnalyzer.ts +682 -0
  386. package/src/plugins/indexing/IncrementalModuleIndexer.ts +287 -0
  387. package/src/plugins/indexing/JSModuleIndexer.ts +374 -0
  388. package/src/plugins/indexing/RustModuleIndexer.ts +160 -0
  389. package/src/plugins/indexing/ServiceDetector.ts +230 -0
  390. package/src/plugins/validation/CallResolverValidator.ts +170 -0
  391. package/src/plugins/validation/DataFlowValidator.ts +233 -0
  392. package/src/plugins/validation/EvalBanValidator.ts +175 -0
  393. package/src/plugins/validation/GraphConnectivityValidator.ts +201 -0
  394. package/src/plugins/validation/SQLInjectionValidator.ts +363 -0
  395. package/src/plugins/validation/ShadowingDetector.ts +173 -0
  396. package/src/plugins/validation/TypeScriptDeadCodeValidator.ts +203 -0
  397. package/src/plugins/vcs/GitPlugin.ts +344 -0
  398. package/src/plugins/vcs/VCSPlugin.ts +190 -0
  399. package/src/plugins/vcs/index.ts +32 -0
  400. package/src/storage/backends/RFDBServerBackend.ts +687 -0
  401. package/src/storage/backends/typeValidation.ts +151 -0
  402. package/src/validation/PathValidator.ts +342 -0
@@ -0,0 +1,179 @@
1
+ /**
2
+ * RFDBClient - Unix socket client for RFDB server
3
+ *
4
+ * Provides the same API as GraphEngine NAPI binding but communicates
5
+ * with a separate rfdb-server process over Unix socket + MessagePack.
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import type { WireNode, WireEdge, RFDBResponse, IRFDBClient, AttrQuery, DatalogResult } from '@grafema/types';
9
+ import type { NodeType, EdgeType } from '@grafema/types';
10
+ export declare class RFDBClient extends EventEmitter implements IRFDBClient {
11
+ readonly socketPath: string;
12
+ private socket;
13
+ connected: boolean;
14
+ private pending;
15
+ private reqId;
16
+ private buffer;
17
+ constructor(socketPath?: string);
18
+ /**
19
+ * Connect to RFDB server
20
+ */
21
+ connect(): Promise<void>;
22
+ /**
23
+ * Handle incoming data, parse framed messages
24
+ */
25
+ private _handleData;
26
+ /**
27
+ * Handle decoded response
28
+ */
29
+ private _handleResponse;
30
+ /**
31
+ * Send a request and wait for response
32
+ */
33
+ private _send;
34
+ /**
35
+ * Add nodes to the graph
36
+ */
37
+ addNodes(nodes: Array<Partial<WireNode> & {
38
+ id: string;
39
+ type?: string;
40
+ node_type?: string;
41
+ nodeType?: string;
42
+ }>): Promise<RFDBResponse>;
43
+ /**
44
+ * Add edges to the graph
45
+ */
46
+ addEdges(edges: Array<Partial<WireEdge> & {
47
+ src: string;
48
+ dst: string;
49
+ type?: string;
50
+ edge_type?: string;
51
+ edgeType?: string;
52
+ }>, skipValidation?: boolean): Promise<RFDBResponse>;
53
+ /**
54
+ * Delete a node
55
+ */
56
+ deleteNode(id: string): Promise<RFDBResponse>;
57
+ /**
58
+ * Delete an edge
59
+ */
60
+ deleteEdge(src: string, dst: string, edgeType: EdgeType): Promise<RFDBResponse>;
61
+ /**
62
+ * Get a node by ID
63
+ */
64
+ getNode(id: string): Promise<WireNode | null>;
65
+ /**
66
+ * Check if node exists
67
+ */
68
+ nodeExists(id: string): Promise<boolean>;
69
+ /**
70
+ * Find nodes by type
71
+ */
72
+ findByType(nodeType: NodeType): Promise<string[]>;
73
+ /**
74
+ * Find nodes by attributes
75
+ */
76
+ findByAttr(query: Record<string, unknown>): Promise<string[]>;
77
+ /**
78
+ * Get neighbors of a node
79
+ */
80
+ neighbors(id: string, edgeTypes?: EdgeType[]): Promise<string[]>;
81
+ /**
82
+ * Breadth-first search
83
+ */
84
+ bfs(startIds: string[], maxDepth: number, edgeTypes?: EdgeType[]): Promise<string[]>;
85
+ /**
86
+ * Depth-first search
87
+ */
88
+ dfs(startIds: string[], maxDepth: number, edgeTypes?: EdgeType[]): Promise<string[]>;
89
+ /**
90
+ * Get outgoing edges from a node
91
+ */
92
+ getOutgoingEdges(id: string, edgeTypes?: EdgeType[] | null): Promise<WireEdge[]>;
93
+ /**
94
+ * Get incoming edges to a node
95
+ */
96
+ getIncomingEdges(id: string, edgeTypes?: EdgeType[] | null): Promise<WireEdge[]>;
97
+ /**
98
+ * Get node count
99
+ */
100
+ nodeCount(): Promise<number>;
101
+ /**
102
+ * Get edge count
103
+ */
104
+ edgeCount(): Promise<number>;
105
+ /**
106
+ * Count nodes by type
107
+ */
108
+ countNodesByType(types?: NodeType[] | null): Promise<Record<string, number>>;
109
+ /**
110
+ * Count edges by type
111
+ */
112
+ countEdgesByType(edgeTypes?: EdgeType[] | null): Promise<Record<string, number>>;
113
+ /**
114
+ * Flush data to disk
115
+ */
116
+ flush(): Promise<RFDBResponse>;
117
+ /**
118
+ * Compact the database
119
+ */
120
+ compact(): Promise<RFDBResponse>;
121
+ /**
122
+ * Clear the database
123
+ */
124
+ clear(): Promise<RFDBResponse>;
125
+ /**
126
+ * Query nodes (async generator)
127
+ */
128
+ queryNodes(query: AttrQuery): AsyncGenerator<WireNode, void, unknown>;
129
+ /**
130
+ * Get all nodes matching query
131
+ */
132
+ getAllNodes(query?: AttrQuery): Promise<WireNode[]>;
133
+ /**
134
+ * Get all edges
135
+ */
136
+ getAllEdges(): Promise<WireEdge[]>;
137
+ /**
138
+ * Check if node is an endpoint (has no outgoing edges)
139
+ */
140
+ isEndpoint(id: string): Promise<boolean>;
141
+ /**
142
+ * Get node identifier string
143
+ */
144
+ getNodeIdentifier(id: string): Promise<string | null>;
145
+ /**
146
+ * Update node version
147
+ */
148
+ updateNodeVersion(id: string, version: string): Promise<RFDBResponse>;
149
+ /**
150
+ * Load Datalog rules
151
+ */
152
+ datalogLoadRules(source: string): Promise<number>;
153
+ /**
154
+ * Clear Datalog rules
155
+ */
156
+ datalogClearRules(): Promise<RFDBResponse>;
157
+ /**
158
+ * Execute Datalog query
159
+ */
160
+ datalogQuery(query: string): Promise<DatalogResult[]>;
161
+ /**
162
+ * Check a guarantee (Datalog rule) and return violations
163
+ */
164
+ checkGuarantee(ruleSource: string): Promise<DatalogResult[]>;
165
+ /**
166
+ * Ping the server
167
+ */
168
+ ping(): Promise<string | false>;
169
+ /**
170
+ * Close connection
171
+ */
172
+ close(): Promise<void>;
173
+ /**
174
+ * Shutdown the server
175
+ */
176
+ shutdown(): Promise<void>;
177
+ }
178
+ export default RFDBClient;
179
+ //# sourceMappingURL=RFDBClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RFDBClient.d.ts","sourceRoot":"","sources":["../../src/core/RFDBClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,429 @@
1
+ /**
2
+ * RFDBClient - Unix socket client for RFDB server
3
+ *
4
+ * Provides the same API as GraphEngine NAPI binding but communicates
5
+ * with a separate rfdb-server process over Unix socket + MessagePack.
6
+ */
7
+ import { createConnection } from 'net';
8
+ import { encode, decode } from '@msgpack/msgpack';
9
+ import { EventEmitter } from 'events';
10
+ export class RFDBClient extends EventEmitter {
11
+ socketPath;
12
+ socket;
13
+ connected;
14
+ pending;
15
+ reqId;
16
+ buffer;
17
+ constructor(socketPath = '/tmp/rfdb.sock') {
18
+ super();
19
+ this.socketPath = socketPath;
20
+ this.socket = null;
21
+ this.connected = false;
22
+ this.pending = new Map();
23
+ this.reqId = 0;
24
+ this.buffer = Buffer.alloc(0);
25
+ }
26
+ /**
27
+ * Connect to RFDB server
28
+ */
29
+ async connect() {
30
+ if (this.connected)
31
+ return;
32
+ return new Promise((resolve, reject) => {
33
+ this.socket = createConnection(this.socketPath);
34
+ this.socket.on('connect', () => {
35
+ this.connected = true;
36
+ this.emit('connected');
37
+ resolve();
38
+ });
39
+ this.socket.on('error', (err) => {
40
+ if (!this.connected) {
41
+ reject(err);
42
+ }
43
+ else {
44
+ this.emit('error', err);
45
+ }
46
+ });
47
+ this.socket.on('close', () => {
48
+ this.connected = false;
49
+ this.emit('disconnected');
50
+ // Reject all pending requests
51
+ for (const [, { reject }] of this.pending) {
52
+ reject(new Error('Connection closed'));
53
+ }
54
+ this.pending.clear();
55
+ });
56
+ this.socket.on('data', (chunk) => {
57
+ this._handleData(chunk);
58
+ });
59
+ });
60
+ }
61
+ /**
62
+ * Handle incoming data, parse framed messages
63
+ */
64
+ _handleData(chunk) {
65
+ this.buffer = Buffer.concat([this.buffer, chunk]);
66
+ while (this.buffer.length >= 4) {
67
+ // Read length prefix (4 bytes, big-endian)
68
+ const msgLen = this.buffer.readUInt32BE(0);
69
+ if (this.buffer.length < 4 + msgLen) {
70
+ // Not enough data yet
71
+ break;
72
+ }
73
+ // Extract message
74
+ const msgBytes = this.buffer.subarray(4, 4 + msgLen);
75
+ this.buffer = this.buffer.subarray(4 + msgLen);
76
+ // Decode and dispatch
77
+ try {
78
+ const response = decode(msgBytes);
79
+ this._handleResponse(response);
80
+ }
81
+ catch (err) {
82
+ this.emit('error', new Error(`Failed to decode response: ${err.message}`));
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Handle decoded response
88
+ */
89
+ _handleResponse(response) {
90
+ if (this.pending.size === 0) {
91
+ this.emit('error', new Error('Received response with no pending request'));
92
+ return;
93
+ }
94
+ // Get the oldest pending request (FIFO)
95
+ const [id, { resolve, reject }] = this.pending.entries().next().value;
96
+ this.pending.delete(id);
97
+ if (response.error) {
98
+ reject(new Error(response.error));
99
+ }
100
+ else {
101
+ resolve(response);
102
+ }
103
+ }
104
+ /**
105
+ * Send a request and wait for response
106
+ */
107
+ async _send(cmd, payload = {}) {
108
+ if (!this.connected || !this.socket) {
109
+ throw new Error('Not connected to RFDB server');
110
+ }
111
+ const request = { cmd, ...payload };
112
+ const msgBytes = encode(request);
113
+ return new Promise((resolve, reject) => {
114
+ const id = this.reqId++;
115
+ this.pending.set(id, { resolve, reject });
116
+ // Write length prefix + message
117
+ const header = Buffer.alloc(4);
118
+ header.writeUInt32BE(msgBytes.length);
119
+ this.socket.write(Buffer.concat([header, Buffer.from(msgBytes)]));
120
+ });
121
+ }
122
+ // ===========================================================================
123
+ // Write Operations
124
+ // ===========================================================================
125
+ /**
126
+ * Add nodes to the graph
127
+ */
128
+ async addNodes(nodes) {
129
+ const wireNodes = nodes.map(n => ({
130
+ id: String(n.id),
131
+ nodeType: (n.node_type || n.nodeType || n.type || 'UNKNOWN'),
132
+ name: n.name || '',
133
+ file: n.file || '',
134
+ exported: n.exported || false,
135
+ metadata: typeof n.metadata === 'string' ? n.metadata : JSON.stringify(n.metadata || {}),
136
+ }));
137
+ return this._send('addNodes', { nodes: wireNodes });
138
+ }
139
+ /**
140
+ * Add edges to the graph
141
+ */
142
+ async addEdges(edges, skipValidation = false) {
143
+ const wireEdges = edges.map(e => ({
144
+ src: String(e.src),
145
+ dst: String(e.dst),
146
+ edgeType: (e.edge_type || e.edgeType || e.type || 'UNKNOWN'),
147
+ metadata: typeof e.metadata === 'string' ? e.metadata : JSON.stringify(e.metadata || {}),
148
+ }));
149
+ return this._send('addEdges', { edges: wireEdges, skipValidation });
150
+ }
151
+ /**
152
+ * Delete a node
153
+ */
154
+ async deleteNode(id) {
155
+ return this._send('deleteNode', { id: String(id) });
156
+ }
157
+ /**
158
+ * Delete an edge
159
+ */
160
+ async deleteEdge(src, dst, edgeType) {
161
+ return this._send('deleteEdge', {
162
+ src: String(src),
163
+ dst: String(dst),
164
+ edgeType
165
+ });
166
+ }
167
+ // ===========================================================================
168
+ // Read Operations
169
+ // ===========================================================================
170
+ /**
171
+ * Get a node by ID
172
+ */
173
+ async getNode(id) {
174
+ const response = await this._send('getNode', { id: String(id) });
175
+ return response.node || null;
176
+ }
177
+ /**
178
+ * Check if node exists
179
+ */
180
+ async nodeExists(id) {
181
+ const response = await this._send('nodeExists', { id: String(id) });
182
+ return response.value;
183
+ }
184
+ /**
185
+ * Find nodes by type
186
+ */
187
+ async findByType(nodeType) {
188
+ const response = await this._send('findByType', { nodeType });
189
+ return response.ids || [];
190
+ }
191
+ /**
192
+ * Find nodes by attributes
193
+ */
194
+ async findByAttr(query) {
195
+ const response = await this._send('findByAttr', { query });
196
+ return response.ids || [];
197
+ }
198
+ // ===========================================================================
199
+ // Graph Traversal
200
+ // ===========================================================================
201
+ /**
202
+ * Get neighbors of a node
203
+ */
204
+ async neighbors(id, edgeTypes = []) {
205
+ const response = await this._send('neighbors', {
206
+ id: String(id),
207
+ edgeTypes
208
+ });
209
+ return response.ids || [];
210
+ }
211
+ /**
212
+ * Breadth-first search
213
+ */
214
+ async bfs(startIds, maxDepth, edgeTypes = []) {
215
+ const response = await this._send('bfs', {
216
+ startIds: startIds.map(String),
217
+ maxDepth,
218
+ edgeTypes
219
+ });
220
+ return response.ids || [];
221
+ }
222
+ /**
223
+ * Depth-first search
224
+ */
225
+ async dfs(startIds, maxDepth, edgeTypes = []) {
226
+ const response = await this._send('dfs', {
227
+ startIds: startIds.map(String),
228
+ maxDepth,
229
+ edgeTypes
230
+ });
231
+ return response.ids || [];
232
+ }
233
+ /**
234
+ * Get outgoing edges from a node
235
+ */
236
+ async getOutgoingEdges(id, edgeTypes = null) {
237
+ const response = await this._send('getOutgoingEdges', {
238
+ id: String(id),
239
+ edgeTypes
240
+ });
241
+ return response.edges || [];
242
+ }
243
+ /**
244
+ * Get incoming edges to a node
245
+ */
246
+ async getIncomingEdges(id, edgeTypes = null) {
247
+ const response = await this._send('getIncomingEdges', {
248
+ id: String(id),
249
+ edgeTypes
250
+ });
251
+ return response.edges || [];
252
+ }
253
+ // ===========================================================================
254
+ // Stats
255
+ // ===========================================================================
256
+ /**
257
+ * Get node count
258
+ */
259
+ async nodeCount() {
260
+ const response = await this._send('nodeCount');
261
+ return response.count;
262
+ }
263
+ /**
264
+ * Get edge count
265
+ */
266
+ async edgeCount() {
267
+ const response = await this._send('edgeCount');
268
+ return response.count;
269
+ }
270
+ /**
271
+ * Count nodes by type
272
+ */
273
+ async countNodesByType(types = null) {
274
+ const response = await this._send('countNodesByType', { types });
275
+ return response.counts || {};
276
+ }
277
+ /**
278
+ * Count edges by type
279
+ */
280
+ async countEdgesByType(edgeTypes = null) {
281
+ const response = await this._send('countEdgesByType', { edgeTypes });
282
+ return response.counts || {};
283
+ }
284
+ // ===========================================================================
285
+ // Control
286
+ // ===========================================================================
287
+ /**
288
+ * Flush data to disk
289
+ */
290
+ async flush() {
291
+ return this._send('flush');
292
+ }
293
+ /**
294
+ * Compact the database
295
+ */
296
+ async compact() {
297
+ return this._send('compact');
298
+ }
299
+ /**
300
+ * Clear the database
301
+ */
302
+ async clear() {
303
+ return this._send('clear');
304
+ }
305
+ // ===========================================================================
306
+ // Bulk Read Operations
307
+ // ===========================================================================
308
+ /**
309
+ * Query nodes (async generator)
310
+ */
311
+ async *queryNodes(query) {
312
+ const serverQuery = {};
313
+ if (query.nodeType)
314
+ serverQuery.nodeType = query.nodeType;
315
+ if (query.type)
316
+ serverQuery.nodeType = query.type;
317
+ if (query.name)
318
+ serverQuery.name = query.name;
319
+ if (query.file)
320
+ serverQuery.file = query.file;
321
+ if (query.exported !== undefined)
322
+ serverQuery.exported = query.exported;
323
+ const response = await this._send('queryNodes', { query: serverQuery });
324
+ const nodes = response.nodes || [];
325
+ for (const node of nodes) {
326
+ yield node;
327
+ }
328
+ }
329
+ /**
330
+ * Get all nodes matching query
331
+ */
332
+ async getAllNodes(query = {}) {
333
+ const nodes = [];
334
+ for await (const node of this.queryNodes(query)) {
335
+ nodes.push(node);
336
+ }
337
+ return nodes;
338
+ }
339
+ /**
340
+ * Get all edges
341
+ */
342
+ async getAllEdges() {
343
+ const response = await this._send('getAllEdges');
344
+ return response.edges || [];
345
+ }
346
+ // ===========================================================================
347
+ // Node Utility Methods
348
+ // ===========================================================================
349
+ /**
350
+ * Check if node is an endpoint (has no outgoing edges)
351
+ */
352
+ async isEndpoint(id) {
353
+ const response = await this._send('isEndpoint', { id: String(id) });
354
+ return response.value;
355
+ }
356
+ /**
357
+ * Get node identifier string
358
+ */
359
+ async getNodeIdentifier(id) {
360
+ const response = await this._send('getNodeIdentifier', { id: String(id) });
361
+ return response.identifier || null;
362
+ }
363
+ /**
364
+ * Update node version
365
+ */
366
+ async updateNodeVersion(id, version) {
367
+ return this._send('updateNodeVersion', { id: String(id), version });
368
+ }
369
+ // ===========================================================================
370
+ // Datalog API
371
+ // ===========================================================================
372
+ /**
373
+ * Load Datalog rules
374
+ */
375
+ async datalogLoadRules(source) {
376
+ const response = await this._send('datalogLoadRules', { source });
377
+ return response.count;
378
+ }
379
+ /**
380
+ * Clear Datalog rules
381
+ */
382
+ async datalogClearRules() {
383
+ return this._send('datalogClearRules');
384
+ }
385
+ /**
386
+ * Execute Datalog query
387
+ */
388
+ async datalogQuery(query) {
389
+ const response = await this._send('datalogQuery', { query });
390
+ return response.results || [];
391
+ }
392
+ /**
393
+ * Check a guarantee (Datalog rule) and return violations
394
+ */
395
+ async checkGuarantee(ruleSource) {
396
+ const response = await this._send('checkGuarantee', { ruleSource });
397
+ return response.violations || [];
398
+ }
399
+ /**
400
+ * Ping the server
401
+ */
402
+ async ping() {
403
+ const response = await this._send('ping');
404
+ return response.pong && response.version ? response.version : false;
405
+ }
406
+ /**
407
+ * Close connection
408
+ */
409
+ async close() {
410
+ if (this.socket) {
411
+ this.socket.destroy();
412
+ this.socket = null;
413
+ this.connected = false;
414
+ }
415
+ }
416
+ /**
417
+ * Shutdown the server
418
+ */
419
+ async shutdown() {
420
+ try {
421
+ await this._send('shutdown');
422
+ }
423
+ catch {
424
+ // Expected - server closes connection
425
+ }
426
+ await this.close();
427
+ }
428
+ }
429
+ export default RFDBClient;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Task - базовая единица работы в очереди
3
+ */
4
+ import type { TaskData, TaskType } from './TaskTypes.js';
5
+ export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
6
+ export interface TaskOptions {
7
+ id: string;
8
+ type: TaskType;
9
+ priority?: number;
10
+ data: TaskData;
11
+ dependencies?: string[];
12
+ }
13
+ export declare class Task {
14
+ readonly id: string;
15
+ readonly type: TaskType;
16
+ readonly priority: number;
17
+ readonly data: TaskData;
18
+ readonly dependencies: string[];
19
+ status: TaskStatus;
20
+ result: unknown;
21
+ error: Error | null;
22
+ startedAt: number | null;
23
+ completedAt: number | null;
24
+ retries: number;
25
+ maxRetries: number;
26
+ constructor({ id, type, priority, data, dependencies }: TaskOptions);
27
+ /**
28
+ * Может ли задача выполняться (все зависимости готовы)
29
+ */
30
+ canExecute(completedTasks: Set<string>): boolean;
31
+ /**
32
+ * Начать выполнение
33
+ */
34
+ start(): void;
35
+ /**
36
+ * Завершить успешно
37
+ */
38
+ complete(result: unknown): void;
39
+ /**
40
+ * Завершить с ошибкой
41
+ */
42
+ fail(error: Error): void;
43
+ /**
44
+ * Можно ли повторить
45
+ */
46
+ canRetry(): boolean;
47
+ /**
48
+ * Повторить задачу
49
+ */
50
+ retry(): void;
51
+ /**
52
+ * Продолжительность выполнения (мс)
53
+ */
54
+ get duration(): number;
55
+ }
56
+ //# sourceMappingURL=Task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Task.d.ts","sourceRoot":"","sources":["../../src/core/Task.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,qBAAa,IAAI;IACf,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAEhC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;gBAEP,EAAE,EAAE,EAAE,IAAI,EAAE,QAAa,EAAE,IAAI,EAAE,YAAiB,EAAE,EAAE,WAAW;IAgB7E;;OAEG;IACH,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO;IAIhD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAM/B;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMxB;;OAEG;IACH,QAAQ,IAAI,OAAO;IAInB;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,CAIrB;CACF"}