blockmine 1.20.0 → 1.22.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 (434) hide show
  1. package/.claude/agents/README.md +469 -0
  2. package/.claude/agents/auth-route-debugger.md +118 -0
  3. package/.claude/agents/auth-route-tester.md +93 -0
  4. package/.claude/agents/auto-error-resolver.md +97 -0
  5. package/.claude/agents/build-optimizer.md +236 -0
  6. package/.claude/agents/code-architecture-reviewer.md +83 -0
  7. package/.claude/agents/code-refactor-master.md +94 -0
  8. package/.claude/agents/cost-optimizer.md +134 -0
  9. package/.claude/agents/deployment-orchestrator.md +113 -0
  10. package/.claude/agents/documentation-architect.md +82 -0
  11. package/.claude/agents/frontend-error-fixer.md +77 -0
  12. package/.claude/agents/iac-code-generator.md +71 -0
  13. package/.claude/agents/incident-responder.md +346 -0
  14. package/.claude/agents/infrastructure-architect.md +31 -0
  15. package/.claude/agents/kubernetes-specialist.md +56 -0
  16. package/.claude/agents/migration-planner.md +181 -0
  17. package/.claude/agents/network-architect.md +196 -0
  18. package/.claude/agents/plan-reviewer.md +52 -0
  19. package/.claude/agents/refactor-planner.md +63 -0
  20. package/.claude/agents/security-scanner.md +102 -0
  21. package/.claude/agents/web-research-specialist.md +78 -0
  22. package/.claude/commands/cost-analysis.md +315 -0
  23. package/.claude/commands/dev-docs-update.md +55 -0
  24. package/.claude/commands/dev-docs.md +51 -0
  25. package/.claude/commands/incident-debug.md +247 -0
  26. package/.claude/commands/infra-plan.md +81 -0
  27. package/.claude/commands/migration-plan.md +478 -0
  28. package/.claude/commands/route-research-for-testing.md +37 -0
  29. package/.claude/commands/security-review.md +66 -0
  30. package/.claude/hooks/CONFIG.md +448 -0
  31. package/.claude/hooks/README.md +163 -0
  32. package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
  33. package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
  34. package/.claude/hooks/add-skill-activation-banners.ts +132 -0
  35. package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
  36. package/.claude/hooks/error-handling-reminder.sh +12 -0
  37. package/.claude/hooks/error-handling-reminder.ts +222 -0
  38. package/.claude/hooks/k8s-manifest-validator.sh +56 -0
  39. package/.claude/hooks/package-lock.json +556 -0
  40. package/.claude/hooks/package.json +16 -0
  41. package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
  42. package/.claude/hooks/post-tool-use-tracker.sh +183 -0
  43. package/.claude/hooks/security-policy-check.sh +247 -0
  44. package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
  45. package/.claude/hooks/skill-activation-prompt.sh +10 -0
  46. package/.claude/hooks/skill-activation-prompt.ts +141 -0
  47. package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
  48. package/.claude/hooks/terraform-validator.sh +53 -0
  49. package/.claude/hooks/test-input.json +7 -0
  50. package/.claude/hooks/test-skill-activation.ts +427 -0
  51. package/.claude/hooks/trigger-build-resolver.sh +79 -0
  52. package/.claude/hooks/tsc-check.sh +173 -0
  53. package/.claude/hooks/tsconfig.json +19 -0
  54. package/.claude/settings.json +55 -0
  55. package/.claude/settings.local.json +28 -3
  56. package/.claude/skills/README.md +507 -0
  57. package/.claude/skills/api-engineering/SKILL.md +63 -0
  58. package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
  59. package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
  60. package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
  61. package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
  62. package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
  63. package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
  64. package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
  65. package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
  66. package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
  67. package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
  68. package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
  69. package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
  70. package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
  71. package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
  72. package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
  73. package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
  74. package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
  75. package/.claude/skills/build-engineering/SKILL.md +431 -0
  76. package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
  77. package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
  78. package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
  79. package/.claude/skills/build-engineering/resources/build-security.md +95 -0
  80. package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
  81. package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
  82. package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
  83. package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
  84. package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
  85. package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
  86. package/.claude/skills/cloud-engineering/SKILL.md +675 -0
  87. package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
  88. package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
  89. package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
  90. package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
  91. package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
  92. package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
  93. package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
  94. package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
  95. package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
  96. package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
  97. package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
  98. package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
  99. package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
  100. package/.claude/skills/cybersecurity/SKILL.md +409 -0
  101. package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
  102. package/.claude/skills/database-engineering/SKILL.md +61 -0
  103. package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
  104. package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
  105. package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
  106. package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
  107. package/.claude/skills/devsecops/SKILL.md +374 -0
  108. package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
  109. package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
  110. package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
  111. package/.claude/skills/devsecops/resources/container-security.md +915 -0
  112. package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
  113. package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
  114. package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
  115. package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
  116. package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
  117. package/.claude/skills/devsecops/resources/security-testing.md +203 -0
  118. package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
  119. package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
  120. package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
  121. package/.claude/skills/documentation-as-code/SKILL.md +323 -0
  122. package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
  123. package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
  124. package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
  125. package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
  126. package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
  127. package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
  128. package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
  129. package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
  130. package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
  131. package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
  132. package/.claude/skills/engineering-management/SKILL.md +356 -0
  133. package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
  134. package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
  135. package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
  136. package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
  137. package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
  138. package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
  139. package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
  140. package/.claude/skills/error-tracking/SKILL.md +379 -0
  141. package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
  142. package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  143. package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  144. package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  145. package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  146. package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
  147. package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  148. package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
  149. package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  150. package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  151. package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  152. package/.claude/skills/general-it-engineering/SKILL.md +393 -0
  153. package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
  154. package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
  155. package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
  156. package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
  157. package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
  158. package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
  159. package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
  160. package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
  161. package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
  162. package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
  163. package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
  164. package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
  165. package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
  166. package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
  167. package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
  168. package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
  169. package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
  170. package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
  171. package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
  172. package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
  173. package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
  174. package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
  175. package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
  176. package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
  177. package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
  178. package/.claude/skills/network-engineering/SKILL.md +385 -0
  179. package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
  180. package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
  181. package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
  182. package/.claude/skills/network-engineering/resources/network-security.md +921 -0
  183. package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
  184. package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
  185. package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
  186. package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
  187. package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
  188. package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
  189. package/.claude/skills/observability-engineering/SKILL.md +101 -0
  190. package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
  191. package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
  192. package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
  193. package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
  194. package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
  195. package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
  196. package/.claude/skills/platform-engineering/SKILL.md +555 -0
  197. package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
  198. package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
  199. package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
  200. package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
  201. package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
  202. package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
  203. package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
  204. package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
  205. package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
  206. package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
  207. package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
  208. package/.claude/skills/release-engineering/SKILL.md +393 -0
  209. package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
  210. package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
  211. package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
  212. package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
  213. package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
  214. package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
  215. package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
  216. package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
  217. package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
  218. package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
  219. package/.claude/skills/route-tester/SKILL.md +392 -0
  220. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  221. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  222. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  223. package/.claude/skills/skill-developer/SKILL.md +430 -0
  224. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  225. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  226. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  227. package/.claude/skills/skill-rules.json +2940 -0
  228. package/.claude/skills/sre/SKILL.md +464 -0
  229. package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
  230. package/.claude/skills/sre/resources/capacity-planning.md +226 -0
  231. package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
  232. package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
  233. package/.claude/skills/sre/resources/incident-management.md +436 -0
  234. package/.claude/skills/sre/resources/observability-stack.md +240 -0
  235. package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
  236. package/.claude/skills/sre/resources/performance-optimization.md +108 -0
  237. package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
  238. package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
  239. package/.claude/skills/sre/resources/toil-reduction.md +145 -0
  240. package/.claude/skills/systems-engineering/SKILL.md +648 -0
  241. package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
  242. package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
  243. package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
  244. package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
  245. package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
  246. package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
  247. package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
  248. package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
  249. package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
  250. package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
  251. package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
  252. package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
  253. package/.claude/skills/technical-leadership/SKILL.md +728 -0
  254. package/CHANGELOG.md +90 -39
  255. package/README.md +94 -0
  256. package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
  257. package/backend/jest.config.js +59 -0
  258. package/backend/package-lock.json +6129 -0
  259. package/backend/package.json +16 -4
  260. package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
  261. package/backend/prisma/schema.prisma +33 -0
  262. package/backend/src/__tests__/core/DependencyService.test.js +336 -0
  263. package/backend/src/__tests__/core/UserService.test.js +875 -0
  264. package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
  265. package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
  266. package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
  267. package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
  268. package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
  269. package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
  270. package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
  271. package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
  272. package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
  273. package/backend/src/__tests__/secretsFilter.test.js +425 -0
  274. package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
  275. package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
  276. package/backend/src/__tests__/services/CacheManager.test.js +125 -0
  277. package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
  278. package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
  279. package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
  280. package/backend/src/__tests__/setup.js +25 -0
  281. package/backend/src/api/routes/apiKeys.js +181 -0
  282. package/backend/src/api/routes/bots.js +49 -7
  283. package/backend/src/api/routes/plugins.js +2 -1
  284. package/backend/src/api/routes/system.js +174 -0
  285. package/backend/src/container.js +82 -0
  286. package/backend/src/core/BotManager.js +142 -871
  287. package/backend/src/core/BotManager.old.js +1093 -0
  288. package/backend/src/core/BotProcess.js +1092 -850
  289. package/backend/src/core/BreakLoopSignal.js +8 -0
  290. package/backend/src/core/EventGraphManager.js +280 -193
  291. package/backend/src/core/GraphExecutionEngine.js +321 -928
  292. package/backend/src/core/MessageQueue.js +27 -6
  293. package/backend/src/core/NodeRegistry.js +37 -991
  294. package/backend/src/core/PluginManager.js +62 -12
  295. package/backend/src/core/PrismaService.js +32 -0
  296. package/backend/src/core/UserService.js +3 -3
  297. package/backend/src/core/__tests__/PrismaService.test.js +24 -0
  298. package/backend/src/core/commands/README.md +305 -0
  299. package/backend/src/core/commands/dev.js +13 -7
  300. package/backend/src/core/commands/ping.js +10 -4
  301. package/backend/src/core/commands/whois.js +63 -0
  302. package/backend/src/core/config/validation.js +27 -0
  303. package/backend/src/core/constants/graphTypes.js +21 -0
  304. package/backend/src/core/node-registries/actions.js +132 -0
  305. package/backend/src/core/node-registries/arrays.js +137 -0
  306. package/backend/src/core/node-registries/bot.js +23 -0
  307. package/backend/src/core/node-registries/data.js +290 -0
  308. package/backend/src/core/node-registries/debug.js +26 -0
  309. package/backend/src/core/node-registries/events.js +187 -0
  310. package/backend/src/core/node-registries/flow.js +139 -0
  311. package/backend/src/core/node-registries/logic.js +45 -0
  312. package/backend/src/core/node-registries/math.js +42 -0
  313. package/backend/src/core/node-registries/objects.js +98 -0
  314. package/backend/src/core/node-registries/strings.js +153 -0
  315. package/backend/src/core/node-registries/time.js +113 -0
  316. package/backend/src/core/node-registries/users.js +79 -0
  317. package/backend/src/core/nodes/actions/bot_look_at.js +36 -0
  318. package/backend/src/core/nodes/actions/bot_set_variable.js +32 -0
  319. package/backend/src/core/nodes/actions/http_request.js +98 -0
  320. package/backend/src/core/nodes/actions/send_log.js +28 -0
  321. package/backend/src/core/nodes/actions/send_message.js +32 -0
  322. package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
  323. package/backend/src/core/nodes/arrays/add_element.js +23 -0
  324. package/backend/src/core/nodes/arrays/contains.js +40 -0
  325. package/backend/src/core/nodes/arrays/find_index.js +23 -0
  326. package/backend/src/core/nodes/arrays/get_by_index.js +23 -0
  327. package/backend/src/core/nodes/arrays/get_next.js +35 -0
  328. package/backend/src/core/nodes/arrays/get_random_element.js +32 -0
  329. package/backend/src/core/nodes/arrays/remove_by_index.js +30 -0
  330. package/backend/src/core/nodes/bot/get_position.js +20 -0
  331. package/backend/src/core/nodes/data/array_literal.js +31 -0
  332. package/backend/src/core/nodes/data/boolean_literal.js +21 -0
  333. package/backend/src/core/nodes/data/cast.js +42 -0
  334. package/backend/src/core/nodes/data/datetime_literal.js +27 -0
  335. package/backend/src/core/nodes/data/entity_info.js +69 -0
  336. package/backend/src/core/nodes/data/get_argument.js +23 -0
  337. package/backend/src/core/nodes/data/get_bot_look.js +14 -0
  338. package/backend/src/core/nodes/data/get_entity_field.js +18 -0
  339. package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
  340. package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
  341. package/backend/src/core/nodes/data/get_server_players.js +18 -0
  342. package/backend/src/core/nodes/data/get_user_field.js +40 -0
  343. package/backend/src/core/nodes/data/get_variable.js +23 -0
  344. package/backend/src/core/nodes/data/length.js +25 -0
  345. package/backend/src/core/nodes/data/make_object.js +31 -0
  346. package/backend/src/core/nodes/data/number_literal.js +21 -0
  347. package/backend/src/core/nodes/data/string_literal.js +34 -0
  348. package/backend/src/core/nodes/data/type_check.js +53 -0
  349. package/backend/src/core/nodes/debug/log.js +16 -0
  350. package/backend/src/core/nodes/flow/branch.js +15 -0
  351. package/backend/src/core/nodes/flow/break.js +14 -0
  352. package/backend/src/core/nodes/flow/delay.js +43 -0
  353. package/backend/src/core/nodes/flow/for_each.js +39 -0
  354. package/backend/src/core/nodes/flow/sequence.js +16 -0
  355. package/backend/src/core/nodes/flow/switch.js +47 -0
  356. package/backend/src/core/nodes/flow/while.js +64 -0
  357. package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
  358. package/backend/src/core/nodes/logic/compare.js +33 -0
  359. package/backend/src/core/nodes/logic/operation.js +35 -0
  360. package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
  361. package/backend/src/core/nodes/math/operation.js +31 -0
  362. package/backend/src/core/nodes/math/random_number.js +43 -0
  363. package/backend/src/core/nodes/objects/create.js +40 -0
  364. package/backend/src/core/nodes/objects/delete.js +26 -0
  365. package/backend/src/core/nodes/objects/get.js +23 -0
  366. package/backend/src/core/nodes/objects/has_key.js +30 -0
  367. package/backend/src/core/nodes/objects/set.js +27 -0
  368. package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
  369. package/backend/src/core/nodes/strings/concat.js +27 -0
  370. package/backend/src/core/nodes/strings/contains.js +41 -0
  371. package/backend/src/core/nodes/strings/ends_with.js +43 -0
  372. package/backend/src/core/nodes/strings/equals.js +36 -0
  373. package/backend/src/core/nodes/strings/length.js +36 -0
  374. package/backend/src/core/nodes/strings/matches.js +39 -0
  375. package/backend/src/core/nodes/strings/split.js +37 -0
  376. package/backend/src/core/nodes/strings/starts_with.js +43 -0
  377. package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
  378. package/backend/src/core/nodes/time/add.js +33 -0
  379. package/backend/src/core/nodes/time/compare.js +35 -0
  380. package/backend/src/core/nodes/time/diff.js +29 -0
  381. package/backend/src/core/nodes/time/format.js +32 -0
  382. package/backend/src/core/nodes/time/now.js +18 -0
  383. package/backend/src/core/nodes/users/check_blacklist.js +37 -0
  384. package/backend/src/core/nodes/users/get_groups.js +36 -0
  385. package/backend/src/core/nodes/users/get_permissions.js +36 -0
  386. package/backend/src/core/nodes/users/set_blacklist.js +37 -0
  387. package/backend/src/core/services/BotLifecycleService.js +596 -0
  388. package/backend/src/core/services/BotProcessManager.js +163 -0
  389. package/backend/src/core/services/CacheManager.js +111 -0
  390. package/backend/src/core/services/CommandExecutionService.js +351 -0
  391. package/backend/src/core/services/ResourceMonitorService.js +90 -0
  392. package/backend/src/core/services/TelemetryService.js +124 -0
  393. package/backend/src/core/services/ValidationService.js +132 -0
  394. package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
  395. package/backend/src/core/services.js +20 -5
  396. package/backend/src/core/system/CommandContext.js +84 -0
  397. package/backend/src/core/system/Transport.js +78 -0
  398. package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
  399. package/backend/src/core/utils/jsonParser.js +18 -0
  400. package/backend/src/core/utils/secretsFilter.js +262 -0
  401. package/backend/src/core/utils/variableParser.js +89 -0
  402. package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
  403. package/backend/src/core/validation/nodeSchemas.js +112 -0
  404. package/backend/src/lib/prisma.js +2 -4
  405. package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
  406. package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
  407. package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
  408. package/backend/src/real-time/botApi/handlers/index.js +43 -0
  409. package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
  410. package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
  411. package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
  412. package/backend/src/real-time/botApi/index.js +40 -0
  413. package/backend/src/real-time/botApi/middleware.js +79 -0
  414. package/backend/src/real-time/botApi/utils.js +54 -0
  415. package/backend/src/real-time/socketHandler.js +6 -2
  416. package/backend/src/repositories/BaseRepository.js +43 -0
  417. package/backend/src/repositories/BotRepository.js +42 -0
  418. package/backend/src/repositories/CommandRepository.js +53 -0
  419. package/backend/src/repositories/EventGraphRepository.js +40 -0
  420. package/backend/src/repositories/GroupRepository.js +69 -0
  421. package/backend/src/repositories/PermissionRepository.js +48 -0
  422. package/backend/src/repositories/PluginRepository.js +42 -0
  423. package/backend/src/repositories/ServerRepository.js +27 -0
  424. package/backend/src/repositories/UserRepository.js +48 -0
  425. package/backend/src/server.js +3 -0
  426. package/backend/src/test-refactor.js +85 -0
  427. package/frontend/dist/assets/index-CfTo92bP.css +1 -0
  428. package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
  429. package/frontend/dist/index.html +2 -2
  430. package/frontend/package.json +1 -5
  431. package/package.json +2 -1
  432. package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
  433. package/frontend/dist/assets/index-CMMutadc.js +0 -8352
  434. package/nul +0 -0
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
7
+ */
8
+ async function evaluate(node, pinId, context, helpers) {
9
+ if (pinId === 'position') {
10
+ if (context.bot?.entity?.position) {
11
+ return context.bot.entity.position;
12
+ }
13
+ }
14
+
15
+ return null;
16
+ }
17
+
18
+ module.exports = {
19
+ evaluate,
20
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ const numPins = node.data?.pinCount || 0;
14
+ const items = [];
15
+
16
+ for (let i = 0; i < numPins; i++) {
17
+ const value = await resolvePinValue(node, `pin_${i}`) ||
18
+ node.data?.[`item_${i}`] ||
19
+ node.data?.[`value_${i}`];
20
+ items.push(value);
21
+ }
22
+
23
+ return items;
24
+ }
25
+
26
+ return [];
27
+ }
28
+
29
+ module.exports = {
30
+ evaluate,
31
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ return await resolvePinValue(node, 'value', false);
14
+ }
15
+
16
+ return false;
17
+ }
18
+
19
+ module.exports = {
20
+ evaluate,
21
+ };
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ const value = await resolvePinValue(node, 'value');
14
+ const targetType = node.data?.targetType || 'String';
15
+
16
+ switch (targetType) {
17
+ case 'String':
18
+ // Для объектов и массивов используем JSON.stringify
19
+ if (typeof value === 'object' && value !== null) {
20
+ try {
21
+ return JSON.stringify(value);
22
+ } catch (e) {
23
+ return String(value ?? '');
24
+ }
25
+ }
26
+ return String(value ?? '');
27
+ case 'Number':
28
+ const num = Number(value);
29
+ return isNaN(num) ? 0 : num;
30
+ case 'Boolean':
31
+ return ['true', '1', 'yes'].includes(String(value).toLowerCase());
32
+ default:
33
+ return value;
34
+ }
35
+ }
36
+
37
+ return null;
38
+ }
39
+
40
+ module.exports = {
41
+ evaluate,
42
+ };
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @param {object} node
3
+ * @param {string} pinId
4
+ * @param {object} context
5
+ * @param {object} helpers
6
+ * @returns {Promise<any>}
7
+ */
8
+ async function evaluate(node, pinId, context, helpers) {
9
+ const { resolvePinValue } = helpers;
10
+
11
+ if (pinId === 'value') {
12
+ const dateString = await resolvePinValue(node, 'date', '');
13
+ if (dateString) {
14
+ const date = new Date(dateString);
15
+ if (!isNaN(date.getTime())) {
16
+ return date;
17
+ }
18
+ }
19
+ return new Date();
20
+ }
21
+
22
+ return null;
23
+ }
24
+
25
+ module.exports = {
26
+ evaluate,
27
+ };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Нода для извлечения информации из объекта существа
3
+ * @param {object} node - Экземпляр узла из графа.
4
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
5
+ * @param {object} context - Контекст выполнения графа.
6
+ * @param {object} helpers - Вспомогательные функции движка.
7
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
8
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
9
+ */
10
+ async function evaluate(node, pinId, context, helpers) {
11
+ const { resolvePinValue } = helpers;
12
+
13
+ // Получаем объект существа из входного пина
14
+ const entity = await resolvePinValue(node, 'entity');
15
+
16
+ if (!entity) {
17
+ // Возвращаем значения по умолчанию если существо не передано
18
+ if (pinId === 'type') return null;
19
+ if (pinId === 'username') return null;
20
+ if (pinId === 'distance') return null;
21
+ if (pinId === 'position') return null;
22
+ if (pinId === 'id') return null;
23
+ if (pinId === 'isPlayer') return false;
24
+ return null;
25
+ }
26
+
27
+ // Возвращаем нужное поле в зависимости от запрошенного выходного пина
28
+ switch (pinId) {
29
+ case 'type':
30
+ return entity.type || 'unknown';
31
+
32
+ case 'username':
33
+ // Для игроков - username, для остальных - displayName или type
34
+ return entity.username || entity.displayName || entity.type || 'unknown';
35
+
36
+ case 'distance':
37
+ // Вычисляем расстояние от бота до существа
38
+ if (entity.position && context.bot?.entity?.position) {
39
+ const botPos = context.bot.entity.position;
40
+ const entityPos = entity.position;
41
+
42
+ const dx = entityPos.x - botPos.x;
43
+ const dy = entityPos.y - botPos.y;
44
+ const dz = entityPos.z - botPos.z;
45
+ const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
46
+
47
+ // Округляем до 2 знаков после запятой
48
+ return Math.round(distance * 100) / 100;
49
+ }
50
+ return null;
51
+
52
+ case 'position':
53
+ return entity.position || null;
54
+
55
+ case 'id':
56
+ return entity.id || null;
57
+
58
+ case 'isPlayer':
59
+ return entity.type === 'player';
60
+
61
+ default:
62
+ return null;
63
+ }
64
+ }
65
+
66
+ module.exports = {
67
+ evaluate,
68
+ };
69
+
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
7
+ */
8
+ async function evaluate(node, pinId, context, helpers, defaultValue = null) {
9
+ const args = context.args || {};
10
+ const argName = node.data?.argumentName || '';
11
+
12
+ if (pinId === 'value') {
13
+ return args && argName && args[argName] !== undefined ? args[argName] : defaultValue;
14
+ } else if (pinId === 'exists') {
15
+ return args && argName && args[argName] !== undefined;
16
+ }
17
+
18
+ return null;
19
+ }
20
+
21
+ module.exports = {
22
+ evaluate,
23
+ };
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
7
+ */
8
+ async function evaluate(node, pinId, context, helpers) {
9
+ return context.botState ? { yaw: context.botState.yaw, pitch: context.botState.pitch } : null;
10
+ }
11
+
12
+ module.exports = {
13
+ evaluate,
14
+ };
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers, defaultValue = null) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ const entity = await resolvePinValue(node, 'entity');
13
+ return entity ? entity[pinId] : defaultValue;
14
+ }
15
+
16
+ module.exports = {
17
+ evaluate,
18
+ };
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Нода для получения списка существ рядом с ботом
3
+ * @param {object} node - Экземпляр узла из графа.
4
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
5
+ * @param {object} context - Контекст выполнения графа.
6
+ * @param {object} helpers - Вспомогательные функции движка.
7
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
8
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
9
+ */
10
+ async function evaluate(node, pinId, context, helpers) {
11
+ const { resolvePinValue } = helpers;
12
+
13
+ if (pinId === 'entities') {
14
+ // Получаем радиус из входного пина (по умолчанию 32 блока)
15
+ const radius = await resolvePinValue(node, 'radius', 32);
16
+
17
+ // Получаем список существ через botApi
18
+ if (context.bot && context.bot.getNearbyEntities) {
19
+ const entities = await context.bot.getNearbyEntities(null, radius);
20
+ return entities || [];
21
+ }
22
+
23
+ return [];
24
+ }
25
+
26
+ return null;
27
+ }
28
+
29
+ module.exports = {
30
+ evaluate,
31
+ };
32
+
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Нода для получения списка игроков рядом с ботом с расстоянием до них
3
+ * @param {object} node - Экземпляр узла из графа.
4
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
5
+ * @param {object} context - Контекст выполнения графа.
6
+ * @param {object} helpers - Вспомогательные функции движка.
7
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
8
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
9
+ */
10
+ async function evaluate(node, pinId, context, helpers) {
11
+ const { resolvePinValue } = helpers;
12
+
13
+ if (pinId === 'players') {
14
+ // Получаем радиус из входного пина (по умолчанию 32 блока)
15
+ const radius = await resolvePinValue(node, 'radius', 32);
16
+
17
+ // Получаем список всех существ через botApi
18
+ if (context.bot && context.bot.getNearbyEntities) {
19
+ const entities = await context.bot.getNearbyEntities(null, radius);
20
+
21
+ // Фильтруем только игроков и добавляем расстояние
22
+ const players = [];
23
+ const botPosition = context.bot.entity?.position;
24
+
25
+ for (const entity of entities) {
26
+ // Только игроки (type === 'player')
27
+ if (entity.type === 'player' && entity.position) {
28
+ let distance = null;
29
+
30
+ // Вычисляем расстояние, если известна позиция бота
31
+ if (botPosition) {
32
+ const dx = entity.position.x - botPosition.x;
33
+ const dy = entity.position.y - botPosition.y;
34
+ const dz = entity.position.z - botPosition.z;
35
+ distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
36
+ // Округляем до 2 знаков после запятой
37
+ distance = Math.round(distance * 100) / 100;
38
+ }
39
+
40
+ players.push({
41
+ username: entity.username,
42
+ distance: distance,
43
+ position: entity.position,
44
+ id: entity.id
45
+ });
46
+ }
47
+ }
48
+
49
+ // Сортируем по расстоянию (ближайшие первыми)
50
+ players.sort((a, b) => (a.distance || 0) - (b.distance || 0));
51
+
52
+ return players;
53
+ }
54
+
55
+ return [];
56
+ }
57
+
58
+ return null;
59
+ }
60
+
61
+ module.exports = {
62
+ evaluate,
63
+ };
64
+
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
7
+ */
8
+ async function evaluate(node, pinId, context, helpers) {
9
+ if (pinId === 'players') {
10
+ return context.players || [];
11
+ }
12
+
13
+ return [];
14
+ }
15
+
16
+ module.exports = {
17
+ evaluate,
18
+ };
@@ -0,0 +1,40 @@
1
+ const User = require('../../UserService');
2
+
3
+ /**
4
+ * @param {object} node - Экземпляр узла из графа.
5
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
6
+ * @param {object} context - Контекст выполнения графа.
7
+ * @param {object} helpers - Вспомогательные функции движка.
8
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
9
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
10
+ */
11
+ async function evaluate(node, pinId, context, helpers, defaultValue = null) {
12
+ const { resolvePinValue } = helpers;
13
+
14
+ const userIdentifier = await resolvePinValue(node, 'user');
15
+ let userObject = null;
16
+
17
+ if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
18
+ userObject = userIdentifier;
19
+ } else if (typeof userIdentifier === 'string' && userIdentifier.length > 0) {
20
+ userObject = await User.getUser(userIdentifier, context.botId);
21
+ }
22
+
23
+ if (userObject) {
24
+ if (pinId === 'username') {
25
+ return userObject.username;
26
+ } else if (pinId === 'groups') {
27
+ return userObject.groups ? userObject.groups.map(g => g.group?.name).filter(Boolean) : [];
28
+ } else if (pinId === 'permissions') {
29
+ return userObject.permissionsSet ? Array.from(userObject.permissionsSet) : [];
30
+ } else if (pinId === 'isBlacklisted') {
31
+ return !!userObject.isBlacklisted;
32
+ }
33
+ }
34
+
35
+ return defaultValue;
36
+ }
37
+
38
+ module.exports = {
39
+ evaluate,
40
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
7
+ */
8
+ async function evaluate(node, pinId, context, helpers) {
9
+ if (pinId === 'value') {
10
+ const varName = node.data?.variableName || node.data?.selectedVariable || '';
11
+ if (!varName) {
12
+ console.warn('[GraphExecutionEngine] data:get_variable: не указано имя переменной', node.data);
13
+ return null;
14
+ }
15
+ return context.variables.hasOwnProperty(varName) ? context.variables[varName] : null;
16
+ }
17
+
18
+ return null;
19
+ }
20
+
21
+ module.exports = {
22
+ evaluate,
23
+ };
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'length') {
13
+ const data = await resolvePinValue(node, 'data');
14
+ if (Array.isArray(data) || typeof data === 'string') {
15
+ return data.length;
16
+ }
17
+ return 0;
18
+ }
19
+
20
+ return 0;
21
+ }
22
+
23
+ module.exports = {
24
+ evaluate,
25
+ };
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ const numPins = node.data?.pinCount || 0;
14
+ const obj = {};
15
+
16
+ for (let i = 0; i < numPins; i++) {
17
+ const key = node.data[`key_${i}`];
18
+ if (key) {
19
+ obj[key] = await resolvePinValue(node, `value_${i}`);
20
+ }
21
+ }
22
+
23
+ return obj;
24
+ }
25
+
26
+ return {};
27
+ }
28
+
29
+ module.exports = {
30
+ evaluate,
31
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ return await resolvePinValue(node, 'value', 0);
14
+ }
15
+
16
+ return 0;
17
+ }
18
+
19
+ module.exports = {
20
+ evaluate,
21
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {string} pinId - Идентификатор выходного пина, значение которого нужно вычислить.
4
+ * @param {object} context - Контекст выполнения графа.
5
+ * @param {object} helpers - Вспомогательные функции движка.
6
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с входного пина.
7
+ * @returns {Promise<any>} - Вычисленное значение для выходного пина.
8
+ */
9
+ async function evaluate(node, pinId, context, helpers) {
10
+ const { resolvePinValue } = helpers;
11
+
12
+ if (pinId === 'value') {
13
+ let text = String(node.data?.value || '');
14
+
15
+ // Парсим и заменяем переменные в формате {varName}
16
+ const variablePattern = /\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
17
+ const matches = [...text.matchAll(variablePattern)];
18
+
19
+ for (const match of matches) {
20
+ const varName = match[1];
21
+ // Получаем значение из динамического пина
22
+ const varValue = await resolvePinValue(node, `var_${varName}`, '');
23
+ text = text.replace(match[0], String(varValue));
24
+ }
25
+
26
+ return text;
27
+ }
28
+
29
+ return '';
30
+ }
31
+
32
+ module.exports = {
33
+ evaluate,
34
+ };
@@ -0,0 +1,53 @@
1
+ async function evaluate(node, pinId, context, helpers) {
2
+ const { resolvePinValue } = helpers;
3
+ const value = await resolvePinValue(node, 'value');
4
+ const checkType = node.data?.checkType || 'string';
5
+
6
+ if (pinId === 'result') {
7
+ switch (checkType) {
8
+ case 'string':
9
+ return typeof value === 'string';
10
+
11
+ case 'number':
12
+ return typeof value === 'number' && !isNaN(value);
13
+
14
+ case 'numeric_string':
15
+ // Проверяет, является ли значение строкой, которую можно преобразовать в число
16
+ if (typeof value !== 'string') return false;
17
+ const trimmed = value.trim();
18
+ if (trimmed === '') return false;
19
+ const num = Number(trimmed);
20
+ return !isNaN(num) && isFinite(num);
21
+
22
+ case 'boolean':
23
+ return typeof value === 'boolean';
24
+
25
+ case 'array':
26
+ return Array.isArray(value);
27
+
28
+ case 'object':
29
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
30
+
31
+ case 'null':
32
+ return value === null || value === undefined;
33
+
34
+ default:
35
+ return false;
36
+ }
37
+ }
38
+
39
+ if (pinId === 'type_name') {
40
+ // Возвращает строковое название типа
41
+ if (value === null) return 'null';
42
+ if (value === undefined) return 'undefined';
43
+ if (Array.isArray(value)) return 'array';
44
+ return typeof value;
45
+ }
46
+
47
+ return null;
48
+ }
49
+
50
+ module.exports = {
51
+ evaluate,
52
+ };
53
+
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @param {object} node - The node instance from the graph.
3
+ * @param {object} context - The execution context.
4
+ * @param {object} helpers - Execution helpers.
5
+ * @param {function} helpers.resolvePinValue - Function to resolve a pin's value.
6
+ * @param {function} helpers.traverse - Function to continue execution to the next node.
7
+ */
8
+ async function execute(node, context, helpers) {
9
+ const value = await helpers.resolvePinValue(node, 'value');
10
+ console.log('[Graph Debug]', value);
11
+ await helpers.traverse(node, 'exec');
12
+ }
13
+
14
+ module.exports = {
15
+ execute,
16
+ };
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @param {object} node - Экземпляр узла из графа.
3
+ * @param {object} context - Контекст выполнения графа.
4
+ * @param {object} helpers - Вспомогательные функции движка.
5
+ * @param {function} helpers.resolvePinValue - Функция для получения значения с пина.
6
+ * @param {function} helpers.traverse - Функция для перехода к следующему узлу.
7
+ */
8
+ async function execute(node, context, helpers) {
9
+ const condition = await helpers.resolvePinValue(node, 'condition', false);
10
+ await helpers.traverse(node, condition ? 'exec_true' : 'exec_false');
11
+ }
12
+
13
+ module.exports = {
14
+ execute,
15
+ };