@principal-ai/subsystems-core 0.29.0 → 0.31.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 (558) hide show
  1. package/README.md +15 -110
  2. package/dist/index.d.ts +7 -75
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +21 -205
  5. package/dist/index.js.map +1 -1
  6. package/dist/node.d.ts +5 -61
  7. package/dist/node.d.ts.map +1 -1
  8. package/dist/node.js +9 -131
  9. package/dist/node.js.map +1 -1
  10. package/dist/types/index.d.ts +3 -348
  11. package/dist/types/index.d.ts.map +1 -1
  12. package/dist/types/index.js +3 -19
  13. package/dist/types/index.js.map +1 -1
  14. package/dist/types/subsystem-model.d.ts +34 -3
  15. package/dist/types/subsystem-model.d.ts.map +1 -1
  16. package/dist/types/subsystem-model.js.map +1 -1
  17. package/package.json +7 -24
  18. package/schemas/subsystem-model.schema.json +52 -1
  19. package/src/index.ts +7 -580
  20. package/src/node.ts +21 -262
  21. package/src/types/index.ts +3 -456
  22. package/src/types/subsystem-model.ts +39 -3
  23. package/dist/ConfigurationLoader.d.ts +0 -76
  24. package/dist/ConfigurationLoader.d.ts.map +0 -1
  25. package/dist/ConfigurationLoader.js +0 -148
  26. package/dist/ConfigurationLoader.js.map +0 -1
  27. package/dist/ConfigurationValidator.d.ts +0 -31
  28. package/dist/ConfigurationValidator.d.ts.map +0 -1
  29. package/dist/ConfigurationValidator.js +0 -239
  30. package/dist/ConfigurationValidator.js.map +0 -1
  31. package/dist/EventProcessor.d.ts +0 -49
  32. package/dist/EventProcessor.d.ts.map +0 -1
  33. package/dist/EventProcessor.js +0 -220
  34. package/dist/EventProcessor.js.map +0 -1
  35. package/dist/EventRecorderService.d.ts +0 -305
  36. package/dist/EventRecorderService.d.ts.map +0 -1
  37. package/dist/EventRecorderService.js +0 -467
  38. package/dist/EventRecorderService.js.map +0 -1
  39. package/dist/LibraryLoader.d.ts +0 -65
  40. package/dist/LibraryLoader.d.ts.map +0 -1
  41. package/dist/LibraryLoader.js +0 -197
  42. package/dist/LibraryLoader.js.map +0 -1
  43. package/dist/PathBasedEventProcessor.d.ts +0 -77
  44. package/dist/PathBasedEventProcessor.d.ts.map +0 -1
  45. package/dist/PathBasedEventProcessor.js +0 -136
  46. package/dist/PathBasedEventProcessor.js.map +0 -1
  47. package/dist/SessionManager.d.ts +0 -194
  48. package/dist/SessionManager.d.ts.map +0 -1
  49. package/dist/SessionManager.js +0 -302
  50. package/dist/SessionManager.js.map +0 -1
  51. package/dist/ValidationEngine.d.ts +0 -31
  52. package/dist/ValidationEngine.d.ts.map +0 -1
  53. package/dist/ValidationEngine.js +0 -162
  54. package/dist/ValidationEngine.js.map +0 -1
  55. package/dist/auxiliary/AuxiliaryManifestValidator.d.ts +0 -41
  56. package/dist/auxiliary/AuxiliaryManifestValidator.d.ts.map +0 -1
  57. package/dist/auxiliary/AuxiliaryManifestValidator.js +0 -100
  58. package/dist/auxiliary/AuxiliaryManifestValidator.js.map +0 -1
  59. package/dist/auxiliary/index.d.ts +0 -9
  60. package/dist/auxiliary/index.d.ts.map +0 -1
  61. package/dist/auxiliary/index.js +0 -14
  62. package/dist/auxiliary/index.js.map +0 -1
  63. package/dist/auxiliary/validateAreaScopeDisjoint.d.ts +0 -24
  64. package/dist/auxiliary/validateAreaScopeDisjoint.d.ts.map +0 -1
  65. package/dist/auxiliary/validateAreaScopeDisjoint.js +0 -61
  66. package/dist/auxiliary/validateAreaScopeDisjoint.js.map +0 -1
  67. package/dist/cli/codegen.d.ts +0 -41
  68. package/dist/cli/codegen.d.ts.map +0 -1
  69. package/dist/cli/codegen.js +0 -257
  70. package/dist/cli/codegen.js.map +0 -1
  71. package/dist/codegen/type-generator.d.ts +0 -123
  72. package/dist/codegen/type-generator.d.ts.map +0 -1
  73. package/dist/codegen/type-generator.js +0 -433
  74. package/dist/codegen/type-generator.js.map +0 -1
  75. package/dist/codegen/usage-example.d.ts +0 -103
  76. package/dist/codegen/usage-example.d.ts.map +0 -1
  77. package/dist/codegen/usage-example.js +0 -258
  78. package/dist/codegen/usage-example.js.map +0 -1
  79. package/dist/dashboard/DashboardValidator.d.ts +0 -85
  80. package/dist/dashboard/DashboardValidator.d.ts.map +0 -1
  81. package/dist/dashboard/DashboardValidator.js +0 -775
  82. package/dist/dashboard/DashboardValidator.js.map +0 -1
  83. package/dist/dashboard/index.d.ts +0 -6
  84. package/dist/dashboard/index.d.ts.map +0 -1
  85. package/dist/dashboard/index.js +0 -10
  86. package/dist/dashboard/index.js.map +0 -1
  87. package/dist/discovery/CanvasDiscovery.d.ts +0 -160
  88. package/dist/discovery/CanvasDiscovery.d.ts.map +0 -1
  89. package/dist/discovery/CanvasDiscovery.js +0 -865
  90. package/dist/discovery/CanvasDiscovery.js.map +0 -1
  91. package/dist/discovery/CanvasFileManifest.d.ts +0 -86
  92. package/dist/discovery/CanvasFileManifest.d.ts.map +0 -1
  93. package/dist/discovery/CanvasFileManifest.js +0 -338
  94. package/dist/discovery/CanvasFileManifest.js.map +0 -1
  95. package/dist/discovery/LibraryDiscovery.d.ts +0 -108
  96. package/dist/discovery/LibraryDiscovery.d.ts.map +0 -1
  97. package/dist/discovery/LibraryDiscovery.js +0 -263
  98. package/dist/discovery/LibraryDiscovery.js.map +0 -1
  99. package/dist/discovery/types.d.ts +0 -403
  100. package/dist/discovery/types.d.ts.map +0 -1
  101. package/dist/discovery/types.js +0 -6
  102. package/dist/discovery/types.js.map +0 -1
  103. package/dist/events/EventsCanvasValidator.d.ts +0 -139
  104. package/dist/events/EventsCanvasValidator.d.ts.map +0 -1
  105. package/dist/events/EventsCanvasValidator.js +0 -281
  106. package/dist/events/EventsCanvasValidator.js.map +0 -1
  107. package/dist/events/NamespacePathIndex.d.ts +0 -61
  108. package/dist/events/NamespacePathIndex.d.ts.map +0 -1
  109. package/dist/events/NamespacePathIndex.js +0 -74
  110. package/dist/events/NamespacePathIndex.js.map +0 -1
  111. package/dist/events/OtelEventPathsValidator.d.ts +0 -75
  112. package/dist/events/OtelEventPathsValidator.d.ts.map +0 -1
  113. package/dist/events/OtelEventPathsValidator.js +0 -126
  114. package/dist/events/OtelEventPathsValidator.js.map +0 -1
  115. package/dist/events/ScopeEventsValidator.d.ts +0 -68
  116. package/dist/events/ScopeEventsValidator.d.ts.map +0 -1
  117. package/dist/events/ScopeEventsValidator.js +0 -91
  118. package/dist/events/ScopeEventsValidator.js.map +0 -1
  119. package/dist/events/index.d.ts +0 -9
  120. package/dist/events/index.d.ts.map +0 -1
  121. package/dist/events/index.js +0 -12
  122. package/dist/events/index.js.map +0 -1
  123. package/dist/events/path-helpers.d.ts +0 -33
  124. package/dist/events/path-helpers.d.ts.map +0 -1
  125. package/dist/events/path-helpers.js +0 -59
  126. package/dist/events/path-helpers.js.map +0 -1
  127. package/dist/execution/ExecutionLoader.d.ts +0 -135
  128. package/dist/execution/ExecutionLoader.d.ts.map +0 -1
  129. package/dist/execution/ExecutionLoader.js +0 -266
  130. package/dist/execution/ExecutionLoader.js.map +0 -1
  131. package/dist/execution/ExecutionValidator.d.ts +0 -94
  132. package/dist/execution/ExecutionValidator.d.ts.map +0 -1
  133. package/dist/execution/ExecutionValidator.js +0 -503
  134. package/dist/execution/ExecutionValidator.js.map +0 -1
  135. package/dist/generated/graph-converter-execution.types.d.ts +0 -177
  136. package/dist/generated/graph-converter-execution.types.d.ts.map +0 -1
  137. package/dist/generated/graph-converter-execution.types.js +0 -12
  138. package/dist/generated/graph-converter-execution.types.js.map +0 -1
  139. package/dist/helpers/GraphInstrumentationHelper.d.ts +0 -93
  140. package/dist/helpers/GraphInstrumentationHelper.d.ts.map +0 -1
  141. package/dist/helpers/GraphInstrumentationHelper.js +0 -252
  142. package/dist/helpers/GraphInstrumentationHelper.js.map +0 -1
  143. package/dist/matchers/SpanMatcher.d.ts +0 -107
  144. package/dist/matchers/SpanMatcher.d.ts.map +0 -1
  145. package/dist/matchers/SpanMatcher.js +0 -274
  146. package/dist/matchers/SpanMatcher.js.map +0 -1
  147. package/dist/orchestration/TraceOrchestrator.d.ts +0 -71
  148. package/dist/orchestration/TraceOrchestrator.d.ts.map +0 -1
  149. package/dist/orchestration/TraceOrchestrator.js +0 -416
  150. package/dist/orchestration/TraceOrchestrator.js.map +0 -1
  151. package/dist/parsers/OtlpTraceParser.d.ts +0 -131
  152. package/dist/parsers/OtlpTraceParser.d.ts.map +0 -1
  153. package/dist/parsers/OtlpTraceParser.js +0 -310
  154. package/dist/parsers/OtlpTraceParser.js.map +0 -1
  155. package/dist/registry/CompositeRegistry.d.ts +0 -71
  156. package/dist/registry/CompositeRegistry.d.ts.map +0 -1
  157. package/dist/registry/CompositeRegistry.js +0 -113
  158. package/dist/registry/CompositeRegistry.js.map +0 -1
  159. package/dist/registry/EventRegistry.d.ts +0 -79
  160. package/dist/registry/EventRegistry.d.ts.map +0 -1
  161. package/dist/registry/EventRegistry.js +0 -165
  162. package/dist/registry/EventRegistry.js.map +0 -1
  163. package/dist/registry/LocalRegistry.d.ts +0 -111
  164. package/dist/registry/LocalRegistry.d.ts.map +0 -1
  165. package/dist/registry/LocalRegistry.js +0 -335
  166. package/dist/registry/LocalRegistry.js.map +0 -1
  167. package/dist/registry/RemoteRegistry.d.ts +0 -122
  168. package/dist/registry/RemoteRegistry.d.ts.map +0 -1
  169. package/dist/registry/RemoteRegistry.js +0 -399
  170. package/dist/registry/RemoteRegistry.js.map +0 -1
  171. package/dist/registry/VersionRegistry.d.ts +0 -51
  172. package/dist/registry/VersionRegistry.d.ts.map +0 -1
  173. package/dist/registry/VersionRegistry.js +0 -105
  174. package/dist/registry/VersionRegistry.js.map +0 -1
  175. package/dist/rules/config.d.ts +0 -57
  176. package/dist/rules/config.d.ts.map +0 -1
  177. package/dist/rules/config.js +0 -382
  178. package/dist/rules/config.js.map +0 -1
  179. package/dist/rules/engine.d.ts +0 -70
  180. package/dist/rules/engine.d.ts.map +0 -1
  181. package/dist/rules/engine.js +0 -373
  182. package/dist/rules/engine.js.map +0 -1
  183. package/dist/rules/implementations/connection-type-references.d.ts +0 -7
  184. package/dist/rules/implementations/connection-type-references.d.ts.map +0 -1
  185. package/dist/rules/implementations/connection-type-references.js +0 -107
  186. package/dist/rules/implementations/connection-type-references.js.map +0 -1
  187. package/dist/rules/implementations/dead-end-states.d.ts +0 -17
  188. package/dist/rules/implementations/dead-end-states.d.ts.map +0 -1
  189. package/dist/rules/implementations/dead-end-states.js +0 -75
  190. package/dist/rules/implementations/dead-end-states.js.map +0 -1
  191. package/dist/rules/implementations/index.d.ts +0 -23
  192. package/dist/rules/implementations/index.d.ts.map +0 -1
  193. package/dist/rules/implementations/index.js +0 -73
  194. package/dist/rules/implementations/index.js.map +0 -1
  195. package/dist/rules/implementations/minimum-node-sources.d.ts +0 -24
  196. package/dist/rules/implementations/minimum-node-sources.d.ts.map +0 -1
  197. package/dist/rules/implementations/minimum-node-sources.js +0 -59
  198. package/dist/rules/implementations/minimum-node-sources.js.map +0 -1
  199. package/dist/rules/implementations/no-unknown-fields.d.ts +0 -7
  200. package/dist/rules/implementations/no-unknown-fields.d.ts.map +0 -1
  201. package/dist/rules/implementations/no-unknown-fields.js +0 -216
  202. package/dist/rules/implementations/no-unknown-fields.js.map +0 -1
  203. package/dist/rules/implementations/orphaned-edge-types.d.ts +0 -7
  204. package/dist/rules/implementations/orphaned-edge-types.d.ts.map +0 -1
  205. package/dist/rules/implementations/orphaned-edge-types.js +0 -50
  206. package/dist/rules/implementations/orphaned-edge-types.js.map +0 -1
  207. package/dist/rules/implementations/orphaned-node-types.d.ts +0 -7
  208. package/dist/rules/implementations/orphaned-node-types.d.ts.map +0 -1
  209. package/dist/rules/implementations/orphaned-node-types.js +0 -53
  210. package/dist/rules/implementations/orphaned-node-types.js.map +0 -1
  211. package/dist/rules/implementations/required-metadata.d.ts +0 -7
  212. package/dist/rules/implementations/required-metadata.d.ts.map +0 -1
  213. package/dist/rules/implementations/required-metadata.js +0 -48
  214. package/dist/rules/implementations/required-metadata.js.map +0 -1
  215. package/dist/rules/implementations/state-transition-references.d.ts +0 -7
  216. package/dist/rules/implementations/state-transition-references.d.ts.map +0 -1
  217. package/dist/rules/implementations/state-transition-references.js +0 -138
  218. package/dist/rules/implementations/state-transition-references.js.map +0 -1
  219. package/dist/rules/implementations/unreachable-states.d.ts +0 -7
  220. package/dist/rules/implementations/unreachable-states.d.ts.map +0 -1
  221. package/dist/rules/implementations/unreachable-states.js +0 -83
  222. package/dist/rules/implementations/unreachable-states.js.map +0 -1
  223. package/dist/rules/implementations/valid-action-patterns.d.ts +0 -17
  224. package/dist/rules/implementations/valid-action-patterns.d.ts.map +0 -1
  225. package/dist/rules/implementations/valid-action-patterns.js +0 -112
  226. package/dist/rules/implementations/valid-action-patterns.js.map +0 -1
  227. package/dist/rules/implementations/valid-color-format.d.ts +0 -7
  228. package/dist/rules/implementations/valid-color-format.d.ts.map +0 -1
  229. package/dist/rules/implementations/valid-color-format.js +0 -94
  230. package/dist/rules/implementations/valid-color-format.js.map +0 -1
  231. package/dist/rules/implementations/valid-edge-types.d.ts +0 -7
  232. package/dist/rules/implementations/valid-edge-types.d.ts.map +0 -1
  233. package/dist/rules/implementations/valid-edge-types.js +0 -248
  234. package/dist/rules/implementations/valid-edge-types.js.map +0 -1
  235. package/dist/rules/implementations/valid-node-types.d.ts +0 -7
  236. package/dist/rules/implementations/valid-node-types.d.ts.map +0 -1
  237. package/dist/rules/implementations/valid-node-types.js +0 -187
  238. package/dist/rules/implementations/valid-node-types.js.map +0 -1
  239. package/dist/rules/index.d.ts +0 -28
  240. package/dist/rules/index.d.ts.map +0 -1
  241. package/dist/rules/index.js +0 -70
  242. package/dist/rules/index.js.map +0 -1
  243. package/dist/rules/types.d.ts +0 -309
  244. package/dist/rules/types.d.ts.map +0 -1
  245. package/dist/rules/types.js +0 -40
  246. package/dist/rules/types.js.map +0 -1
  247. package/dist/scopes/ScopePathIndex.d.ts +0 -56
  248. package/dist/scopes/ScopePathIndex.d.ts.map +0 -1
  249. package/dist/scopes/ScopePathIndex.js +0 -67
  250. package/dist/scopes/ScopePathIndex.js.map +0 -1
  251. package/dist/scopes/ScopesCanvasValidator.d.ts +0 -76
  252. package/dist/scopes/ScopesCanvasValidator.d.ts.map +0 -1
  253. package/dist/scopes/ScopesCanvasValidator.js +0 -221
  254. package/dist/scopes/ScopesCanvasValidator.js.map +0 -1
  255. package/dist/scopes/index.d.ts +0 -12
  256. package/dist/scopes/index.d.ts.map +0 -1
  257. package/dist/scopes/index.js +0 -30
  258. package/dist/scopes/index.js.map +0 -1
  259. package/dist/scopes/utils.d.ts +0 -85
  260. package/dist/scopes/utils.d.ts.map +0 -1
  261. package/dist/scopes/utils.js +0 -143
  262. package/dist/scopes/utils.js.map +0 -1
  263. package/dist/scopes/validateScopeNamespaceNesting.d.ts +0 -38
  264. package/dist/scopes/validateScopeNamespaceNesting.d.ts.map +0 -1
  265. package/dist/scopes/validateScopeNamespaceNesting.js +0 -69
  266. package/dist/scopes/validateScopeNamespaceNesting.js.map +0 -1
  267. package/dist/spans/index.d.ts +0 -12
  268. package/dist/spans/index.d.ts.map +0 -1
  269. package/dist/spans/index.js +0 -25
  270. package/dist/spans/index.js.map +0 -1
  271. package/dist/spans/utils.d.ts +0 -70
  272. package/dist/spans/utils.d.ts.map +0 -1
  273. package/dist/spans/utils.js +0 -205
  274. package/dist/spans/utils.js.map +0 -1
  275. package/dist/storyboard/builder.d.ts +0 -135
  276. package/dist/storyboard/builder.d.ts.map +0 -1
  277. package/dist/storyboard/builder.js +0 -235
  278. package/dist/storyboard/builder.js.map +0 -1
  279. package/dist/storyboard/index.d.ts +0 -9
  280. package/dist/storyboard/index.d.ts.map +0 -1
  281. package/dist/storyboard/index.js +0 -18
  282. package/dist/storyboard/index.js.map +0 -1
  283. package/dist/storyboard/types.d.ts +0 -101
  284. package/dist/storyboard/types.d.ts.map +0 -1
  285. package/dist/storyboard/types.js +0 -10
  286. package/dist/storyboard/types.js.map +0 -1
  287. package/dist/telemetry/coverage.d.ts +0 -92
  288. package/dist/telemetry/coverage.d.ts.map +0 -1
  289. package/dist/telemetry/coverage.js +0 -335
  290. package/dist/telemetry/coverage.js.map +0 -1
  291. package/dist/telemetry/event-validator.d.ts +0 -86
  292. package/dist/telemetry/event-validator.d.ts.map +0 -1
  293. package/dist/telemetry/event-validator.js +0 -257
  294. package/dist/telemetry/event-validator.js.map +0 -1
  295. package/dist/types/audit.d.ts +0 -236
  296. package/dist/types/audit.d.ts.map +0 -1
  297. package/dist/types/audit.js +0 -53
  298. package/dist/types/audit.js.map +0 -1
  299. package/dist/types/auxiliary.d.ts +0 -54
  300. package/dist/types/auxiliary.d.ts.map +0 -1
  301. package/dist/types/auxiliary.js +0 -27
  302. package/dist/types/auxiliary.js.map +0 -1
  303. package/dist/types/canvas-scope.d.ts +0 -156
  304. package/dist/types/canvas-scope.d.ts.map +0 -1
  305. package/dist/types/canvas-scope.js +0 -62
  306. package/dist/types/canvas-scope.js.map +0 -1
  307. package/dist/types/canvas.d.ts +0 -1138
  308. package/dist/types/canvas.d.ts.map +0 -1
  309. package/dist/types/canvas.js +0 -178
  310. package/dist/types/canvas.js.map +0 -1
  311. package/dist/types/dashboard.d.ts +0 -170
  312. package/dist/types/dashboard.d.ts.map +0 -1
  313. package/dist/types/dashboard.js +0 -14
  314. package/dist/types/dashboard.js.map +0 -1
  315. package/dist/types/library.d.ts +0 -227
  316. package/dist/types/library.d.ts.map +0 -1
  317. package/dist/types/library.js +0 -16
  318. package/dist/types/library.js.map +0 -1
  319. package/dist/types/otel.d.ts +0 -465
  320. package/dist/types/otel.d.ts.map +0 -1
  321. package/dist/types/otel.js +0 -163
  322. package/dist/types/otel.js.map +0 -1
  323. package/dist/types/path-based-config.d.ts +0 -235
  324. package/dist/types/path-based-config.d.ts.map +0 -1
  325. package/dist/types/path-based-config.js +0 -11
  326. package/dist/types/path-based-config.js.map +0 -1
  327. package/dist/types/registered-trace.d.ts +0 -337
  328. package/dist/types/registered-trace.d.ts.map +0 -1
  329. package/dist/types/registered-trace.js +0 -16
  330. package/dist/types/registered-trace.js.map +0 -1
  331. package/dist/types/resource-match.d.ts +0 -207
  332. package/dist/types/resource-match.d.ts.map +0 -1
  333. package/dist/types/resource-match.js +0 -74
  334. package/dist/types/resource-match.js.map +0 -1
  335. package/dist/types/version-registry.d.ts +0 -137
  336. package/dist/types/version-registry.d.ts.map +0 -1
  337. package/dist/types/version-registry.js +0 -10
  338. package/dist/types/version-registry.js.map +0 -1
  339. package/dist/utils/CanvasConverter.d.ts +0 -148
  340. package/dist/utils/CanvasConverter.d.ts.map +0 -1
  341. package/dist/utils/CanvasConverter.js +0 -530
  342. package/dist/utils/CanvasConverter.js.map +0 -1
  343. package/dist/utils/GraphConverter.d.ts +0 -18
  344. package/dist/utils/GraphConverter.d.ts.map +0 -1
  345. package/dist/utils/GraphConverter.js +0 -80
  346. package/dist/utils/GraphConverter.js.map +0 -1
  347. package/dist/utils/PathMatcher.d.ts +0 -55
  348. package/dist/utils/PathMatcher.d.ts.map +0 -1
  349. package/dist/utils/PathMatcher.js +0 -178
  350. package/dist/utils/PathMatcher.js.map +0 -1
  351. package/dist/utils/TraceToCanvas.d.ts +0 -83
  352. package/dist/utils/TraceToCanvas.d.ts.map +0 -1
  353. package/dist/utils/TraceToCanvas.js +0 -336
  354. package/dist/utils/TraceToCanvas.js.map +0 -1
  355. package/dist/utils/YamlParser.d.ts +0 -36
  356. package/dist/utils/YamlParser.d.ts.map +0 -1
  357. package/dist/utils/YamlParser.js +0 -92
  358. package/dist/utils/YamlParser.js.map +0 -1
  359. package/dist/utils/registeredTraceHelpers.d.ts +0 -76
  360. package/dist/utils/registeredTraceHelpers.d.ts.map +0 -1
  361. package/dist/utils/registeredTraceHelpers.js +0 -203
  362. package/dist/utils/registeredTraceHelpers.js.map +0 -1
  363. package/dist/utils/traceAggregation.d.ts +0 -25
  364. package/dist/utils/traceAggregation.d.ts.map +0 -1
  365. package/dist/utils/traceAggregation.js +0 -140
  366. package/dist/utils/traceAggregation.js.map +0 -1
  367. package/dist/validation/OtelCanvasValidator.d.ts +0 -40
  368. package/dist/validation/OtelCanvasValidator.d.ts.map +0 -1
  369. package/dist/validation/OtelCanvasValidator.js +0 -59
  370. package/dist/validation/OtelCanvasValidator.js.map +0 -1
  371. package/dist/validation/index.d.ts +0 -8
  372. package/dist/validation/index.d.ts.map +0 -1
  373. package/dist/validation/index.js +0 -13
  374. package/dist/validation/index.js.map +0 -1
  375. package/dist/validation/libraryValidation.d.ts +0 -53
  376. package/dist/validation/libraryValidation.d.ts.map +0 -1
  377. package/dist/validation/libraryValidation.js +0 -115
  378. package/dist/validation/libraryValidation.js.map +0 -1
  379. package/dist/workflow/edge-derivation.d.ts +0 -111
  380. package/dist/workflow/edge-derivation.d.ts.map +0 -1
  381. package/dist/workflow/edge-derivation.js +0 -174
  382. package/dist/workflow/edge-derivation.js.map +0 -1
  383. package/dist/workflow/edge-validation.d.ts +0 -170
  384. package/dist/workflow/edge-validation.d.ts.map +0 -1
  385. package/dist/workflow/edge-validation.js +0 -332
  386. package/dist/workflow/edge-validation.js.map +0 -1
  387. package/dist/workflow/example.d.ts +0 -11
  388. package/dist/workflow/example.d.ts.map +0 -1
  389. package/dist/workflow/example.js +0 -310
  390. package/dist/workflow/example.js.map +0 -1
  391. package/dist/workflow/index.d.ts +0 -20
  392. package/dist/workflow/index.d.ts.map +0 -1
  393. package/dist/workflow/index.js +0 -49
  394. package/dist/workflow/index.js.map +0 -1
  395. package/dist/workflow/scenario-matcher.d.ts +0 -63
  396. package/dist/workflow/scenario-matcher.d.ts.map +0 -1
  397. package/dist/workflow/scenario-matcher.js +0 -215
  398. package/dist/workflow/scenario-matcher.js.map +0 -1
  399. package/dist/workflow/template-parser.d.ts +0 -73
  400. package/dist/workflow/template-parser.d.ts.map +0 -1
  401. package/dist/workflow/template-parser.js +0 -280
  402. package/dist/workflow/template-parser.js.map +0 -1
  403. package/dist/workflow/template-renderer.d.ts +0 -45
  404. package/dist/workflow/template-renderer.d.ts.map +0 -1
  405. package/dist/workflow/template-renderer.js +0 -401
  406. package/dist/workflow/template-renderer.js.map +0 -1
  407. package/dist/workflow/types.d.ts +0 -393
  408. package/dist/workflow/types.d.ts.map +0 -1
  409. package/dist/workflow/types.js +0 -40
  410. package/dist/workflow/types.js.map +0 -1
  411. package/dist/workflow/validator.d.ts +0 -363
  412. package/dist/workflow/validator.d.ts.map +0 -1
  413. package/dist/workflow/validator.js +0 -2283
  414. package/dist/workflow/validator.js.map +0 -1
  415. package/schemas/auxiliary.manifest.schema.json +0 -56
  416. package/src/ConfigurationLoader.test.ts +0 -466
  417. package/src/ConfigurationLoader.ts +0 -184
  418. package/src/ConfigurationValidator.test.ts +0 -200
  419. package/src/ConfigurationValidator.ts +0 -273
  420. package/src/EventProcessor.test.ts +0 -405
  421. package/src/EventProcessor.ts +0 -256
  422. package/src/EventRecorderService.test.ts +0 -543
  423. package/src/EventRecorderService.ts +0 -741
  424. package/src/LibraryLoader.ts +0 -194
  425. package/src/PathBasedEventProcessor.test.ts +0 -336
  426. package/src/PathBasedEventProcessor.ts +0 -196
  427. package/src/SessionManager.test.ts +0 -424
  428. package/src/SessionManager.ts +0 -471
  429. package/src/ValidationEngine.test.ts +0 -520
  430. package/src/ValidationEngine.ts +0 -200
  431. package/src/auxiliary/AuxiliaryManifestValidator.test.ts +0 -93
  432. package/src/auxiliary/AuxiliaryManifestValidator.ts +0 -132
  433. package/src/auxiliary/index.ts +0 -18
  434. package/src/auxiliary/validateAreaScopeDisjoint.test.ts +0 -85
  435. package/src/auxiliary/validateAreaScopeDisjoint.ts +0 -72
  436. package/src/cli/codegen.ts +0 -286
  437. package/src/codegen/type-generator.test.ts +0 -219
  438. package/src/codegen/type-generator.ts +0 -560
  439. package/src/codegen/usage-example.ts +0 -357
  440. package/src/dashboard/DashboardValidator.ts +0 -904
  441. package/src/dashboard/index.ts +0 -14
  442. package/src/discovery/CanvasDiscovery.test.ts +0 -691
  443. package/src/discovery/CanvasDiscovery.ts +0 -1114
  444. package/src/discovery/CanvasFileManifest.test.ts +0 -521
  445. package/src/discovery/CanvasFileManifest.ts +0 -419
  446. package/src/discovery/LibraryDiscovery.test.ts +0 -329
  447. package/src/discovery/LibraryDiscovery.ts +0 -386
  448. package/src/discovery/types.ts +0 -453
  449. package/src/events/EventsCanvasValidator.test.ts +0 -191
  450. package/src/events/EventsCanvasValidator.ts +0 -428
  451. package/src/events/NamespacePathIndex.test.ts +0 -97
  452. package/src/events/NamespacePathIndex.ts +0 -100
  453. package/src/events/OtelEventPathsValidator.test.ts +0 -243
  454. package/src/events/OtelEventPathsValidator.ts +0 -191
  455. package/src/events/ScopeEventsValidator.test.ts +0 -173
  456. package/src/events/ScopeEventsValidator.ts +0 -158
  457. package/src/events/index.ts +0 -27
  458. package/src/events/path-helpers.ts +0 -53
  459. package/src/execution/ExecutionLoader.test.ts +0 -378
  460. package/src/execution/ExecutionLoader.ts +0 -331
  461. package/src/execution/ExecutionValidator.test.ts +0 -503
  462. package/src/execution/ExecutionValidator.ts +0 -617
  463. package/src/generated/graph-converter-execution.types.ts +0 -193
  464. package/src/helpers/GraphInstrumentationHelper.test.ts +0 -364
  465. package/src/helpers/GraphInstrumentationHelper.ts +0 -323
  466. package/src/matchers/SpanMatcher.test.ts +0 -1105
  467. package/src/matchers/SpanMatcher.ts +0 -381
  468. package/src/orchestration/TraceOrchestrator.ts +0 -560
  469. package/src/orchestration/__tests__/TraceOrchestrator.test.ts +0 -1098
  470. package/src/parsers/OtlpTraceParser.ts +0 -401
  471. package/src/parsers/__tests__/OtlpTraceParser.test.ts +0 -197
  472. package/src/registry/CompositeRegistry.ts +0 -140
  473. package/src/registry/EventRegistry.test.ts +0 -387
  474. package/src/registry/EventRegistry.ts +0 -191
  475. package/src/registry/LocalRegistry.ts +0 -416
  476. package/src/registry/RemoteRegistry.ts +0 -499
  477. package/src/registry/VersionRegistry.test.ts +0 -223
  478. package/src/registry/VersionRegistry.ts +0 -121
  479. package/src/rules/config.test.ts +0 -277
  480. package/src/rules/config.ts +0 -450
  481. package/src/rules/engine.test.ts +0 -331
  482. package/src/rules/engine.ts +0 -448
  483. package/src/rules/implementations/connection-type-references.ts +0 -117
  484. package/src/rules/implementations/dead-end-states.ts +0 -101
  485. package/src/rules/implementations/index.ts +0 -66
  486. package/src/rules/implementations/minimum-node-sources.ts +0 -84
  487. package/src/rules/implementations/no-unknown-fields.ts +0 -372
  488. package/src/rules/implementations/orphaned-edge-types.ts +0 -55
  489. package/src/rules/implementations/orphaned-node-types.ts +0 -58
  490. package/src/rules/implementations/required-metadata.ts +0 -52
  491. package/src/rules/implementations/state-transition-references.ts +0 -155
  492. package/src/rules/implementations/unreachable-states.ts +0 -94
  493. package/src/rules/implementations/valid-action-patterns.ts +0 -140
  494. package/src/rules/implementations/valid-color-format.ts +0 -152
  495. package/src/rules/implementations/valid-edge-types.ts +0 -273
  496. package/src/rules/implementations/valid-node-types.ts +0 -200
  497. package/src/rules/index.ts +0 -92
  498. package/src/rules/types.ts +0 -426
  499. package/src/scopes/ScopePathIndex.test.ts +0 -94
  500. package/src/scopes/ScopePathIndex.ts +0 -89
  501. package/src/scopes/ScopesCanvasValidator.test.ts +0 -127
  502. package/src/scopes/ScopesCanvasValidator.ts +0 -305
  503. package/src/scopes/__tests__/utils.test.ts +0 -383
  504. package/src/scopes/index.ts +0 -42
  505. package/src/scopes/utils.ts +0 -182
  506. package/src/scopes/validateScopeNamespaceNesting.test.ts +0 -127
  507. package/src/scopes/validateScopeNamespaceNesting.ts +0 -88
  508. package/src/spans/index.ts +0 -24
  509. package/src/spans/utils.ts +0 -249
  510. package/src/storyboard/builder.ts +0 -308
  511. package/src/storyboard/index.ts +0 -26
  512. package/src/storyboard/types.ts +0 -117
  513. package/src/telemetry/coverage.ts +0 -480
  514. package/src/telemetry/event-validator.ts +0 -312
  515. package/src/types/audit.ts +0 -314
  516. package/src/types/auxiliary.ts +0 -63
  517. package/src/types/canvas-scope.ts +0 -190
  518. package/src/types/canvas.test.ts +0 -199
  519. package/src/types/canvas.ts +0 -1395
  520. package/src/types/dashboard.ts +0 -257
  521. package/src/types/library.ts +0 -283
  522. package/src/types/otel.test.ts +0 -219
  523. package/src/types/otel.ts +0 -620
  524. package/src/types/path-based-config.ts +0 -285
  525. package/src/types/registered-trace.ts +0 -432
  526. package/src/types/resource-match.ts +0 -263
  527. package/src/types/version-registry.ts +0 -150
  528. package/src/utils/CanvasConverter.ts +0 -670
  529. package/src/utils/GraphConverter.test.ts +0 -322
  530. package/src/utils/GraphConverter.ts +0 -84
  531. package/src/utils/PathMatcher.test.ts +0 -139
  532. package/src/utils/PathMatcher.ts +0 -185
  533. package/src/utils/TraceToCanvas.test.ts +0 -310
  534. package/src/utils/TraceToCanvas.ts +0 -510
  535. package/src/utils/YamlParser.ts +0 -77
  536. package/src/utils/registeredTraceHelpers.ts +0 -251
  537. package/src/utils/traceAggregation.test.ts +0 -385
  538. package/src/utils/traceAggregation.ts +0 -173
  539. package/src/validation/OtelCanvasValidator.ts +0 -86
  540. package/src/validation/index.ts +0 -17
  541. package/src/validation/libraryValidation.ts +0 -206
  542. package/src/workflow/README.md +0 -408
  543. package/src/workflow/__tests__/edge-derivation.test.ts +0 -449
  544. package/src/workflow/__tests__/edge-validation.test.ts +0 -417
  545. package/src/workflow/__tests__/scenario-matcher.test.ts +0 -225
  546. package/src/workflow/__tests__/template-parser.test.ts +0 -276
  547. package/src/workflow/__tests__/template-renderer.test.ts +0 -509
  548. package/src/workflow/__tests__/types.test.ts +0 -187
  549. package/src/workflow/__tests__/validator.test.ts +0 -3225
  550. package/src/workflow/edge-derivation.ts +0 -265
  551. package/src/workflow/edge-validation.ts +0 -503
  552. package/src/workflow/example.ts +0 -330
  553. package/src/workflow/index.ts +0 -86
  554. package/src/workflow/scenario-matcher.ts +0 -253
  555. package/src/workflow/template-parser.ts +0 -350
  556. package/src/workflow/template-renderer.ts +0 -453
  557. package/src/workflow/types.ts +0 -511
  558. package/src/workflow/validator.ts +0 -2737
@@ -1,1105 +0,0 @@
1
- import { describe, it, expect } from 'bun:test';
2
- import { SpanMatcher } from './SpanMatcher';
3
- import type { ExtendedCanvas } from '../types/canvas';
4
- import type { OtelSpanData, OtelResourceData } from '../types/otel';
5
-
6
- describe('SpanMatcher', () => {
7
- describe('exact span name matching', () => {
8
- it('should match exact span names', () => {
9
- const canvas: ExtendedCanvas = {
10
- nodes: [
11
- {
12
- id: 'node1',
13
- type: 'text',
14
- x: 0,
15
- y: 0,
16
- width: 100,
17
- height: 100,
18
- pv: {
19
- otel: {
20
- spanMatch: {
21
- name: 'validateUser',
22
- },
23
- },
24
- },
25
- },
26
- ],
27
- };
28
-
29
- const matcher = new SpanMatcher(canvas);
30
-
31
- const span: OtelSpanData = {
32
- traceId: 'trace1',
33
- spanId: 'span1',
34
- name: 'validateUser',
35
- kind: 2,
36
- startTimeUnixNano: '1000000000000', // 1000ms = 1 second in nanoseconds
37
- endTimeUnixNano: '1000100000000', // 100ms later
38
- attributes: [],
39
- events: [],
40
- status: { code: 1 },
41
- };
42
-
43
- const resource: OtelResourceData = { attributes: [] };
44
-
45
- const result = matcher.matchSpan(span, resource);
46
-
47
- expect(result.matchedNodeIds).toContain('node1');
48
- expect(result.duration).toBe(100); // 100ms
49
- expect(result.timestamp).toBe(1000000); // 1000 seconds
50
- });
51
-
52
- it('should not match different span names', () => {
53
- const canvas: ExtendedCanvas = {
54
- nodes: [
55
- {
56
- id: 'node1',
57
- type: 'text',
58
- x: 0,
59
- y: 0,
60
- width: 100,
61
- height: 100,
62
- pv: {
63
- otel: {
64
- spanMatch: {
65
- name: 'validateUser',
66
- },
67
- },
68
- },
69
- },
70
- ],
71
- };
72
-
73
- const matcher = new SpanMatcher(canvas);
74
-
75
- const span: OtelSpanData = {
76
- traceId: 'trace1',
77
- spanId: 'span1',
78
- name: 'differentOperation',
79
- kind: 2,
80
- startTimeUnixNano: '1000000000',
81
- endTimeUnixNano: '2000000000',
82
- attributes: [],
83
- events: [],
84
- status: { code: 1 },
85
- };
86
-
87
- const resource: OtelResourceData = { attributes: [] };
88
-
89
- const result = matcher.matchSpan(span, resource);
90
-
91
- expect(result.matchedNodeIds).toEqual([]);
92
- });
93
- });
94
-
95
- describe('glob pattern matching', () => {
96
- it('should match glob patterns in span names', () => {
97
- const canvas: ExtendedCanvas = {
98
- nodes: [
99
- {
100
- id: 'node1',
101
- type: 'text',
102
- x: 0,
103
- y: 0,
104
- width: 100,
105
- height: 100,
106
- pv: {
107
- otel: {
108
- spanMatch: {
109
- name: 'GET /api/*',
110
- },
111
- },
112
- },
113
- },
114
- ],
115
- };
116
-
117
- const matcher = new SpanMatcher(canvas);
118
-
119
- const span1: OtelSpanData = {
120
- traceId: 'trace1',
121
- spanId: 'span1',
122
- name: 'GET /api/users',
123
- kind: 2,
124
- startTimeUnixNano: '1000000000',
125
- endTimeUnixNano: '2000000000',
126
- attributes: [],
127
- events: [],
128
- status: { code: 1 },
129
- };
130
-
131
- const span2: OtelSpanData = {
132
- traceId: 'trace1',
133
- spanId: 'span2',
134
- name: 'GET /api/products',
135
- kind: 2,
136
- startTimeUnixNano: '1000000000',
137
- endTimeUnixNano: '2000000000',
138
- attributes: [],
139
- events: [],
140
- status: { code: 1 },
141
- };
142
-
143
- const span3: OtelSpanData = {
144
- traceId: 'trace1',
145
- spanId: 'span3',
146
- name: 'POST /api/users',
147
- kind: 2,
148
- startTimeUnixNano: '1000000000',
149
- endTimeUnixNano: '2000000000',
150
- attributes: [],
151
- events: [],
152
- status: { code: 1 },
153
- };
154
-
155
- const resource: OtelResourceData = { attributes: [] };
156
-
157
- expect(matcher.matchSpan(span1, resource).matchedNodeIds).toContain(
158
- 'node1'
159
- );
160
- expect(matcher.matchSpan(span2, resource).matchedNodeIds).toContain(
161
- 'node1'
162
- );
163
- expect(matcher.matchSpan(span3, resource).matchedNodeIds).toEqual([]);
164
- });
165
-
166
- it('should match wildcard pattern', () => {
167
- const canvas: ExtendedCanvas = {
168
- nodes: [
169
- {
170
- id: 'node1',
171
- type: 'text',
172
- x: 0,
173
- y: 0,
174
- width: 100,
175
- height: 100,
176
- pv: {
177
- otel: {
178
- spanMatch: {
179
- name: '*',
180
- },
181
- },
182
- },
183
- },
184
- ],
185
- };
186
-
187
- const matcher = new SpanMatcher(canvas);
188
-
189
- const span: OtelSpanData = {
190
- traceId: 'trace1',
191
- spanId: 'span1',
192
- name: 'any operation',
193
- kind: 2,
194
- startTimeUnixNano: '1000000000',
195
- endTimeUnixNano: '2000000000',
196
- attributes: [],
197
- events: [],
198
- status: { code: 1 },
199
- };
200
-
201
- const resource: OtelResourceData = { attributes: [] };
202
-
203
- expect(matcher.matchSpan(span, resource).matchedNodeIds).toContain(
204
- 'node1'
205
- );
206
- });
207
- });
208
-
209
- describe('array of span names matching', () => {
210
- it('should match any of the provided span names', () => {
211
- const canvas: ExtendedCanvas = {
212
- nodes: [
213
- {
214
- id: 'node1',
215
- type: 'text',
216
- x: 0,
217
- y: 0,
218
- width: 100,
219
- height: 100,
220
- pv: {
221
- otel: {
222
- spanMatch: {
223
- name: ['GET /api/users', 'POST /api/users'],
224
- },
225
- },
226
- },
227
- },
228
- ],
229
- };
230
-
231
- const matcher = new SpanMatcher(canvas);
232
-
233
- const span1: OtelSpanData = {
234
- traceId: 'trace1',
235
- spanId: 'span1',
236
- name: 'GET /api/users',
237
- kind: 2,
238
- startTimeUnixNano: '1000000000',
239
- endTimeUnixNano: '2000000000',
240
- attributes: [],
241
- events: [],
242
- status: { code: 1 },
243
- };
244
-
245
- const span2: OtelSpanData = {
246
- traceId: 'trace1',
247
- spanId: 'span2',
248
- name: 'POST /api/users',
249
- kind: 2,
250
- startTimeUnixNano: '1000000000',
251
- endTimeUnixNano: '2000000000',
252
- attributes: [],
253
- events: [],
254
- status: { code: 1 },
255
- };
256
-
257
- const span3: OtelSpanData = {
258
- traceId: 'trace1',
259
- spanId: 'span3',
260
- name: 'DELETE /api/users',
261
- kind: 2,
262
- startTimeUnixNano: '1000000000',
263
- endTimeUnixNano: '2000000000',
264
- attributes: [],
265
- events: [],
266
- status: { code: 1 },
267
- };
268
-
269
- const resource: OtelResourceData = { attributes: [] };
270
-
271
- expect(matcher.matchSpan(span1, resource).matchedNodeIds).toContain(
272
- 'node1'
273
- );
274
- expect(matcher.matchSpan(span2, resource).matchedNodeIds).toContain(
275
- 'node1'
276
- );
277
- expect(matcher.matchSpan(span3, resource).matchedNodeIds).toEqual([]);
278
- });
279
- });
280
-
281
- describe('span kind matching', () => {
282
- it('should match span kind', () => {
283
- const canvas: ExtendedCanvas = {
284
- nodes: [
285
- {
286
- id: 'node1',
287
- type: 'text',
288
- x: 0,
289
- y: 0,
290
- width: 100,
291
- height: 100,
292
- pv: {
293
- otel: {
294
- spanMatch: {
295
- kind: 'SPAN_KIND_SERVER',
296
- },
297
- },
298
- },
299
- },
300
- ],
301
- };
302
-
303
- const matcher = new SpanMatcher(canvas);
304
-
305
- const serverSpan: OtelSpanData = {
306
- traceId: 'trace1',
307
- spanId: 'span1',
308
- name: 'operation',
309
- kind: 2, // SERVER
310
- startTimeUnixNano: '1000000000',
311
- endTimeUnixNano: '2000000000',
312
- attributes: [],
313
- events: [],
314
- status: { code: 1 },
315
- };
316
-
317
- const clientSpan: OtelSpanData = {
318
- traceId: 'trace1',
319
- spanId: 'span2',
320
- name: 'operation',
321
- kind: 3, // CLIENT
322
- startTimeUnixNano: '1000000000',
323
- endTimeUnixNano: '2000000000',
324
- attributes: [],
325
- events: [],
326
- status: { code: 1 },
327
- };
328
-
329
- const resource: OtelResourceData = { attributes: [] };
330
-
331
- expect(matcher.matchSpan(serverSpan, resource).matchedNodeIds).toContain(
332
- 'node1'
333
- );
334
- expect(matcher.matchSpan(clientSpan, resource).matchedNodeIds).toEqual(
335
- []
336
- );
337
- });
338
-
339
- it('should match multiple span kinds', () => {
340
- const canvas: ExtendedCanvas = {
341
- nodes: [
342
- {
343
- id: 'node1',
344
- type: 'text',
345
- x: 0,
346
- y: 0,
347
- width: 100,
348
- height: 100,
349
- pv: {
350
- otel: {
351
- spanMatch: {
352
- kind: ['SPAN_KIND_SERVER', 'SPAN_KIND_CLIENT'],
353
- },
354
- },
355
- },
356
- },
357
- ],
358
- };
359
-
360
- const matcher = new SpanMatcher(canvas);
361
-
362
- const serverSpan: OtelSpanData = {
363
- traceId: 'trace1',
364
- spanId: 'span1',
365
- name: 'operation',
366
- kind: 2, // SERVER
367
- startTimeUnixNano: '1000000000',
368
- endTimeUnixNano: '2000000000',
369
- attributes: [],
370
- events: [],
371
- status: { code: 1 },
372
- };
373
-
374
- const clientSpan: OtelSpanData = {
375
- traceId: 'trace1',
376
- spanId: 'span2',
377
- name: 'operation',
378
- kind: 3, // CLIENT
379
- startTimeUnixNano: '1000000000',
380
- endTimeUnixNano: '2000000000',
381
- attributes: [],
382
- events: [],
383
- status: { code: 1 },
384
- };
385
-
386
- const internalSpan: OtelSpanData = {
387
- traceId: 'trace1',
388
- spanId: 'span3',
389
- name: 'operation',
390
- kind: 1, // INTERNAL
391
- startTimeUnixNano: '1000000000',
392
- endTimeUnixNano: '2000000000',
393
- attributes: [],
394
- events: [],
395
- status: { code: 1 },
396
- };
397
-
398
- const resource: OtelResourceData = { attributes: [] };
399
-
400
- expect(matcher.matchSpan(serverSpan, resource).matchedNodeIds).toContain(
401
- 'node1'
402
- );
403
- expect(matcher.matchSpan(clientSpan, resource).matchedNodeIds).toContain(
404
- 'node1'
405
- );
406
- expect(matcher.matchSpan(internalSpan, resource).matchedNodeIds).toEqual(
407
- []
408
- );
409
- });
410
- });
411
-
412
- describe('span attributes matching', () => {
413
- it('should match span attributes', () => {
414
- const canvas: ExtendedCanvas = {
415
- nodes: [
416
- {
417
- id: 'node1',
418
- type: 'text',
419
- x: 0,
420
- y: 0,
421
- width: 100,
422
- height: 100,
423
- pv: {
424
- otel: {
425
- spanMatch: {
426
- attributes: {
427
- 'http.method': 'GET',
428
- 'http.route': '/api/users',
429
- },
430
- },
431
- },
432
- },
433
- },
434
- ],
435
- };
436
-
437
- const matcher = new SpanMatcher(canvas);
438
-
439
- const matchingSpan: OtelSpanData = {
440
- traceId: 'trace1',
441
- spanId: 'span1',
442
- name: 'operation',
443
- kind: 2,
444
- startTimeUnixNano: '1000000000',
445
- endTimeUnixNano: '2000000000',
446
- attributes: [
447
- { key: 'http.method', value: { stringValue: 'GET' } },
448
- { key: 'http.route', value: { stringValue: '/api/users' } },
449
- ],
450
- events: [],
451
- status: { code: 1 },
452
- };
453
-
454
- const nonMatchingSpan: OtelSpanData = {
455
- traceId: 'trace1',
456
- spanId: 'span2',
457
- name: 'operation',
458
- kind: 2,
459
- startTimeUnixNano: '1000000000',
460
- endTimeUnixNano: '2000000000',
461
- attributes: [
462
- { key: 'http.method', value: { stringValue: 'POST' } },
463
- { key: 'http.route', value: { stringValue: '/api/users' } },
464
- ],
465
- events: [],
466
- status: { code: 1 },
467
- };
468
-
469
- const resource: OtelResourceData = { attributes: [] };
470
-
471
- expect(
472
- matcher.matchSpan(matchingSpan, resource).matchedNodeIds
473
- ).toContain('node1');
474
- expect(
475
- matcher.matchSpan(nonMatchingSpan, resource).matchedNodeIds
476
- ).toEqual([]);
477
- });
478
-
479
- it('should match wildcard attribute values', () => {
480
- const canvas: ExtendedCanvas = {
481
- nodes: [
482
- {
483
- id: 'node1',
484
- type: 'text',
485
- x: 0,
486
- y: 0,
487
- width: 100,
488
- height: 100,
489
- pv: {
490
- otel: {
491
- spanMatch: {
492
- attributes: {
493
- 'db.system': 'postgresql',
494
- 'db.operation': '*', // Any operation
495
- },
496
- },
497
- },
498
- },
499
- },
500
- ],
501
- };
502
-
503
- const matcher = new SpanMatcher(canvas);
504
-
505
- const querySpan: OtelSpanData = {
506
- traceId: 'trace1',
507
- spanId: 'span1',
508
- name: 'db query',
509
- kind: 3,
510
- startTimeUnixNano: '1000000000',
511
- endTimeUnixNano: '2000000000',
512
- attributes: [
513
- { key: 'db.system', value: { stringValue: 'postgresql' } },
514
- { key: 'db.operation', value: { stringValue: 'SELECT' } },
515
- ],
516
- events: [],
517
- status: { code: 1 },
518
- };
519
-
520
- const insertSpan: OtelSpanData = {
521
- traceId: 'trace1',
522
- spanId: 'span2',
523
- name: 'db insert',
524
- kind: 3,
525
- startTimeUnixNano: '1000000000',
526
- endTimeUnixNano: '2000000000',
527
- attributes: [
528
- { key: 'db.system', value: { stringValue: 'postgresql' } },
529
- { key: 'db.operation', value: { stringValue: 'INSERT' } },
530
- ],
531
- events: [],
532
- status: { code: 1 },
533
- };
534
-
535
- const resource: OtelResourceData = { attributes: [] };
536
-
537
- expect(matcher.matchSpan(querySpan, resource).matchedNodeIds).toContain(
538
- 'node1'
539
- );
540
- expect(matcher.matchSpan(insertSpan, resource).matchedNodeIds).toContain(
541
- 'node1'
542
- );
543
- });
544
- });
545
-
546
- describe('span event matching', () => {
547
- it('should match span events by name', () => {
548
- const canvas: ExtendedCanvas = {
549
- nodes: [
550
- {
551
- id: 'node1',
552
- type: 'text',
553
- x: 0,
554
- y: 0,
555
- width: 100,
556
- height: 100,
557
- pv: {
558
- otel: {
559
- spanMatch: {
560
- event: {
561
- name: 'exception',
562
- },
563
- },
564
- },
565
- },
566
- },
567
- ],
568
- };
569
-
570
- const matcher = new SpanMatcher(canvas);
571
-
572
- const spanWithException: OtelSpanData = {
573
- traceId: 'trace1',
574
- spanId: 'span1',
575
- name: 'operation',
576
- kind: 2,
577
- startTimeUnixNano: '1000000000',
578
- endTimeUnixNano: '2000000000',
579
- attributes: [],
580
- events: [
581
- {
582
- timeUnixNano: '1500000000',
583
- name: 'exception',
584
- attributes: [],
585
- },
586
- ],
587
- status: { code: 2 },
588
- };
589
-
590
- const spanWithoutException: OtelSpanData = {
591
- traceId: 'trace1',
592
- spanId: 'span2',
593
- name: 'operation',
594
- kind: 2,
595
- startTimeUnixNano: '1000000000',
596
- endTimeUnixNano: '2000000000',
597
- attributes: [],
598
- events: [],
599
- status: { code: 1 },
600
- };
601
-
602
- const resource: OtelResourceData = { attributes: [] };
603
-
604
- expect(
605
- matcher.matchSpan(spanWithException, resource).matchedNodeIds
606
- ).toContain('node1');
607
- expect(
608
- matcher.matchSpan(spanWithoutException, resource).matchedNodeIds
609
- ).toEqual([]);
610
- });
611
-
612
- it('should match span events by attributes', () => {
613
- const canvas: ExtendedCanvas = {
614
- nodes: [
615
- {
616
- id: 'node1',
617
- type: 'text',
618
- x: 0,
619
- y: 0,
620
- width: 100,
621
- height: 100,
622
- pv: {
623
- otel: {
624
- spanMatch: {
625
- event: {
626
- name: 'exception',
627
- attributes: {
628
- 'exception.type': 'ValidationError',
629
- },
630
- },
631
- },
632
- },
633
- },
634
- },
635
- ],
636
- };
637
-
638
- const matcher = new SpanMatcher(canvas);
639
-
640
- const matchingSpan: OtelSpanData = {
641
- traceId: 'trace1',
642
- spanId: 'span1',
643
- name: 'operation',
644
- kind: 2,
645
- startTimeUnixNano: '1000000000',
646
- endTimeUnixNano: '2000000000',
647
- attributes: [],
648
- events: [
649
- {
650
- timeUnixNano: '1500000000',
651
- name: 'exception',
652
- attributes: [
653
- {
654
- key: 'exception.type',
655
- value: { stringValue: 'ValidationError' },
656
- },
657
- ],
658
- },
659
- ],
660
- status: { code: 2 },
661
- };
662
-
663
- const nonMatchingSpan: OtelSpanData = {
664
- traceId: 'trace1',
665
- spanId: 'span2',
666
- name: 'operation',
667
- kind: 2,
668
- startTimeUnixNano: '1000000000',
669
- endTimeUnixNano: '2000000000',
670
- attributes: [],
671
- events: [
672
- {
673
- timeUnixNano: '1500000000',
674
- name: 'exception',
675
- attributes: [
676
- {
677
- key: 'exception.type',
678
- value: { stringValue: 'DatabaseError' },
679
- },
680
- ],
681
- },
682
- ],
683
- status: { code: 2 },
684
- };
685
-
686
- const resource: OtelResourceData = { attributes: [] };
687
-
688
- expect(
689
- matcher.matchSpan(matchingSpan, resource).matchedNodeIds
690
- ).toContain('node1');
691
- expect(
692
- matcher.matchSpan(nonMatchingSpan, resource).matchedNodeIds
693
- ).toEqual([]);
694
- });
695
- });
696
-
697
- describe('resource matching', () => {
698
- it('should match resource attributes', () => {
699
- const canvas: ExtendedCanvas = {
700
- nodes: [
701
- {
702
- id: 'node1',
703
- type: 'text',
704
- x: 0,
705
- y: 0,
706
- width: 100,
707
- height: 100,
708
- pv: {
709
- otel: {
710
- resourceMatch: {
711
- 'service.name': 'checkout-api',
712
- 'deployment.environment': 'production',
713
- },
714
- },
715
- },
716
- },
717
- ],
718
- };
719
-
720
- const matcher = new SpanMatcher(canvas);
721
-
722
- const span: OtelSpanData = {
723
- traceId: 'trace1',
724
- spanId: 'span1',
725
- name: 'operation',
726
- kind: 2,
727
- startTimeUnixNano: '1000000000',
728
- endTimeUnixNano: '2000000000',
729
- attributes: [],
730
- events: [],
731
- status: { code: 1 },
732
- };
733
-
734
- const matchingResource: OtelResourceData = {
735
- attributes: [
736
- { key: 'service.name', value: { stringValue: 'checkout-api' } },
737
- {
738
- key: 'deployment.environment',
739
- value: { stringValue: 'production' },
740
- },
741
- ],
742
- };
743
-
744
- const nonMatchingResource: OtelResourceData = {
745
- attributes: [
746
- { key: 'service.name', value: { stringValue: 'other-service' } },
747
- {
748
- key: 'deployment.environment',
749
- value: { stringValue: 'production' },
750
- },
751
- ],
752
- };
753
-
754
- expect(
755
- matcher.matchSpan(span, matchingResource).matchedNodeIds
756
- ).toContain('node1');
757
- expect(
758
- matcher.matchSpan(span, nonMatchingResource).matchedNodeIds
759
- ).toEqual([]);
760
- });
761
-
762
- it('should match resource attribute wildcards', () => {
763
- const canvas: ExtendedCanvas = {
764
- nodes: [
765
- {
766
- id: 'node1',
767
- type: 'text',
768
- x: 0,
769
- y: 0,
770
- width: 100,
771
- height: 100,
772
- pv: {
773
- otel: {
774
- resourceMatch: {
775
- 'service.name': '*-api',
776
- },
777
- },
778
- },
779
- },
780
- ],
781
- };
782
-
783
- const matcher = new SpanMatcher(canvas);
784
-
785
- const span: OtelSpanData = {
786
- traceId: 'trace1',
787
- spanId: 'span1',
788
- name: 'operation',
789
- kind: 2,
790
- startTimeUnixNano: '1000000000',
791
- endTimeUnixNano: '2000000000',
792
- attributes: [],
793
- events: [],
794
- status: { code: 1 },
795
- };
796
-
797
- const resource1: OtelResourceData = {
798
- attributes: [
799
- { key: 'service.name', value: { stringValue: 'checkout-api' } },
800
- ],
801
- };
802
-
803
- const resource2: OtelResourceData = {
804
- attributes: [
805
- { key: 'service.name', value: { stringValue: 'payment-api' } },
806
- ],
807
- };
808
-
809
- const resource3: OtelResourceData = {
810
- attributes: [
811
- { key: 'service.name', value: { stringValue: 'frontend-app' } },
812
- ],
813
- };
814
-
815
- expect(matcher.matchSpan(span, resource1).matchedNodeIds).toContain(
816
- 'node1'
817
- );
818
- expect(matcher.matchSpan(span, resource2).matchedNodeIds).toContain(
819
- 'node1'
820
- );
821
- expect(matcher.matchSpan(span, resource3).matchedNodeIds).toEqual([]);
822
- });
823
- });
824
-
825
- describe('combined matching (resource AND span)', () => {
826
- it('should require both resource and span match', () => {
827
- const canvas: ExtendedCanvas = {
828
- nodes: [
829
- {
830
- id: 'node1',
831
- type: 'text',
832
- x: 0,
833
- y: 0,
834
- width: 100,
835
- height: 100,
836
- pv: {
837
- otel: {
838
- resourceMatch: {
839
- 'service.name': 'checkout-api',
840
- },
841
- spanMatch: {
842
- name: 'POST /checkout',
843
- },
844
- },
845
- },
846
- },
847
- ],
848
- };
849
-
850
- const matcher = new SpanMatcher(canvas);
851
-
852
- const matchingResource: OtelResourceData = {
853
- attributes: [
854
- { key: 'service.name', value: { stringValue: 'checkout-api' } },
855
- ],
856
- };
857
-
858
- const nonMatchingResource: OtelResourceData = {
859
- attributes: [
860
- { key: 'service.name', value: { stringValue: 'payment-api' } },
861
- ],
862
- };
863
-
864
- const matchingSpan: OtelSpanData = {
865
- traceId: 'trace1',
866
- spanId: 'span1',
867
- name: 'POST /checkout',
868
- kind: 2,
869
- startTimeUnixNano: '1000000000',
870
- endTimeUnixNano: '2000000000',
871
- attributes: [],
872
- events: [],
873
- status: { code: 1 },
874
- };
875
-
876
- const nonMatchingSpan: OtelSpanData = {
877
- traceId: 'trace1',
878
- spanId: 'span2',
879
- name: 'GET /products',
880
- kind: 2,
881
- startTimeUnixNano: '1000000000',
882
- endTimeUnixNano: '2000000000',
883
- attributes: [],
884
- events: [],
885
- status: { code: 1 },
886
- };
887
-
888
- // Both resource and span match
889
- expect(
890
- matcher.matchSpan(matchingSpan, matchingResource).matchedNodeIds
891
- ).toContain('node1');
892
-
893
- // Resource matches but span doesn't
894
- expect(
895
- matcher.matchSpan(nonMatchingSpan, matchingResource).matchedNodeIds
896
- ).toEqual([]);
897
-
898
- // Span matches but resource doesn't
899
- expect(
900
- matcher.matchSpan(matchingSpan, nonMatchingResource).matchedNodeIds
901
- ).toEqual([]);
902
-
903
- // Neither matches
904
- expect(
905
- matcher.matchSpan(nonMatchingSpan, nonMatchingResource).matchedNodeIds
906
- ).toEqual([]);
907
- });
908
- });
909
-
910
- describe('multiple nodes', () => {
911
- it('should match multiple nodes', () => {
912
- const canvas: ExtendedCanvas = {
913
- nodes: [
914
- {
915
- id: 'node1',
916
- type: 'text',
917
- x: 0,
918
- y: 0,
919
- width: 100,
920
- height: 100,
921
- pv: {
922
- otel: {
923
- spanMatch: {
924
- name: 'GET /api/*',
925
- },
926
- },
927
- },
928
- },
929
- {
930
- id: 'node2',
931
- type: 'text',
932
- x: 0,
933
- y: 0,
934
- width: 100,
935
- height: 100,
936
- pv: {
937
- otel: {
938
- spanMatch: {
939
- kind: 'SPAN_KIND_SERVER',
940
- },
941
- },
942
- },
943
- },
944
- {
945
- id: 'node3',
946
- type: 'text',
947
- x: 0,
948
- y: 0,
949
- width: 100,
950
- height: 100,
951
- pv: {
952
- otel: {
953
- spanMatch: {
954
- name: 'POST /api/*',
955
- },
956
- },
957
- },
958
- },
959
- ],
960
- };
961
-
962
- const matcher = new SpanMatcher(canvas);
963
-
964
- const span: OtelSpanData = {
965
- traceId: 'trace1',
966
- spanId: 'span1',
967
- name: 'GET /api/users',
968
- kind: 2, // SERVER
969
- startTimeUnixNano: '1000000000',
970
- endTimeUnixNano: '2000000000',
971
- attributes: [],
972
- events: [],
973
- status: { code: 1 },
974
- };
975
-
976
- const resource: OtelResourceData = { attributes: [] };
977
-
978
- const result = matcher.matchSpan(span, resource);
979
-
980
- expect(result.matchedNodeIds).toContain('node1');
981
- expect(result.matchedNodeIds).toContain('node2');
982
- expect(result.matchedNodeIds).not.toContain('node3');
983
- });
984
- });
985
-
986
- describe('getStats', () => {
987
- it('should return matcher statistics', () => {
988
- const canvas: ExtendedCanvas = {
989
- nodes: [
990
- {
991
- id: 'node1',
992
- type: 'text',
993
- x: 0,
994
- y: 0,
995
- width: 100,
996
- height: 100,
997
- pv: {
998
- otel: {
999
- resourceMatch: {
1000
- 'service.name': 'api',
1001
- },
1002
- spanMatch: {
1003
- name: 'operation',
1004
- },
1005
- },
1006
- },
1007
- },
1008
- {
1009
- id: 'node2',
1010
- type: 'text',
1011
- x: 0,
1012
- y: 0,
1013
- width: 100,
1014
- height: 100,
1015
- pv: {
1016
- otel: {
1017
- spanMatch: {
1018
- kind: 'SPAN_KIND_SERVER',
1019
- },
1020
- },
1021
- },
1022
- },
1023
- {
1024
- id: 'node3',
1025
- type: 'text',
1026
- x: 0,
1027
- y: 0,
1028
- width: 100,
1029
- height: 100,
1030
- pv: {
1031
- otel: {
1032
- resourceMatch: {
1033
- 'service.name': 'other',
1034
- },
1035
- },
1036
- },
1037
- },
1038
- ],
1039
- };
1040
-
1041
- const matcher = new SpanMatcher(canvas);
1042
- const stats = matcher.getStats();
1043
-
1044
- expect(stats.totalRules).toBe(3);
1045
- expect(stats.rulesWithResourceMatch).toBe(2);
1046
- expect(stats.rulesWithSpanMatch).toBe(2);
1047
- });
1048
- });
1049
-
1050
- describe('edge cases', () => {
1051
- it('should handle empty canvas', () => {
1052
- const canvas: ExtendedCanvas = { nodes: [] };
1053
- const matcher = new SpanMatcher(canvas);
1054
-
1055
- const span: OtelSpanData = {
1056
- traceId: 'trace1',
1057
- spanId: 'span1',
1058
- name: 'operation',
1059
- kind: 2,
1060
- startTimeUnixNano: '1000000000',
1061
- endTimeUnixNano: '2000000000',
1062
- attributes: [],
1063
- events: [],
1064
- status: { code: 1 },
1065
- };
1066
-
1067
- const resource: OtelResourceData = { attributes: [] };
1068
-
1069
- expect(matcher.matchSpan(span, resource).matchedNodeIds).toEqual([]);
1070
- });
1071
-
1072
- it('should handle nodes without otel extension', () => {
1073
- const canvas: ExtendedCanvas = {
1074
- nodes: [
1075
- {
1076
- id: 'node1',
1077
- type: 'text',
1078
- x: 0,
1079
- y: 0,
1080
- width: 100,
1081
- height: 100,
1082
- },
1083
- ],
1084
- };
1085
-
1086
- const matcher = new SpanMatcher(canvas);
1087
-
1088
- const span: OtelSpanData = {
1089
- traceId: 'trace1',
1090
- spanId: 'span1',
1091
- name: 'operation',
1092
- kind: 2,
1093
- startTimeUnixNano: '1000000000',
1094
- endTimeUnixNano: '2000000000',
1095
- attributes: [],
1096
- events: [],
1097
- status: { code: 1 },
1098
- };
1099
-
1100
- const resource: OtelResourceData = { attributes: [] };
1101
-
1102
- expect(matcher.matchSpan(span, resource).matchedNodeIds).toEqual([]);
1103
- });
1104
- });
1105
- });