blockmine 1.21.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.
- package/.claude/agents/README.md +469 -0
- package/.claude/agents/auth-route-debugger.md +118 -0
- package/.claude/agents/auth-route-tester.md +93 -0
- package/.claude/agents/auto-error-resolver.md +97 -0
- package/.claude/agents/build-optimizer.md +236 -0
- package/.claude/agents/code-architecture-reviewer.md +83 -0
- package/.claude/agents/code-refactor-master.md +94 -0
- package/.claude/agents/cost-optimizer.md +134 -0
- package/.claude/agents/deployment-orchestrator.md +113 -0
- package/.claude/agents/documentation-architect.md +82 -0
- package/.claude/agents/frontend-error-fixer.md +77 -0
- package/.claude/agents/iac-code-generator.md +71 -0
- package/.claude/agents/incident-responder.md +346 -0
- package/.claude/agents/infrastructure-architect.md +31 -0
- package/.claude/agents/kubernetes-specialist.md +56 -0
- package/.claude/agents/migration-planner.md +181 -0
- package/.claude/agents/network-architect.md +196 -0
- package/.claude/agents/plan-reviewer.md +52 -0
- package/.claude/agents/refactor-planner.md +63 -0
- package/.claude/agents/security-scanner.md +102 -0
- package/.claude/agents/web-research-specialist.md +78 -0
- package/.claude/commands/cost-analysis.md +315 -0
- package/.claude/commands/dev-docs-update.md +55 -0
- package/.claude/commands/dev-docs.md +51 -0
- package/.claude/commands/incident-debug.md +247 -0
- package/.claude/commands/infra-plan.md +81 -0
- package/.claude/commands/migration-plan.md +478 -0
- package/.claude/commands/route-research-for-testing.md +37 -0
- package/.claude/commands/security-review.md +66 -0
- package/.claude/hooks/CONFIG.md +448 -0
- package/.claude/hooks/README.md +163 -0
- package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
- package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
- package/.claude/hooks/add-skill-activation-banners.ts +132 -0
- package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
- package/.claude/hooks/error-handling-reminder.sh +12 -0
- package/.claude/hooks/error-handling-reminder.ts +222 -0
- package/.claude/hooks/k8s-manifest-validator.sh +56 -0
- package/.claude/hooks/package-lock.json +556 -0
- package/.claude/hooks/package.json +16 -0
- package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
- package/.claude/hooks/post-tool-use-tracker.sh +183 -0
- package/.claude/hooks/security-policy-check.sh +247 -0
- package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
- package/.claude/hooks/skill-activation-prompt.sh +10 -0
- package/.claude/hooks/skill-activation-prompt.ts +141 -0
- package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
- package/.claude/hooks/terraform-validator.sh +53 -0
- package/.claude/hooks/test-input.json +7 -0
- package/.claude/hooks/test-skill-activation.ts +427 -0
- package/.claude/hooks/trigger-build-resolver.sh +79 -0
- package/.claude/hooks/tsc-check.sh +173 -0
- package/.claude/hooks/tsconfig.json +19 -0
- package/.claude/settings.json +55 -0
- package/.claude/settings.local.json +27 -14
- package/.claude/skills/README.md +507 -0
- package/.claude/skills/api-engineering/SKILL.md +63 -0
- package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
- package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
- package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
- package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
- package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
- package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
- package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
- package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
- package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
- package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
- package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
- package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
- package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
- package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
- package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
- package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
- package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
- package/.claude/skills/build-engineering/SKILL.md +431 -0
- package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
- package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
- package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
- package/.claude/skills/build-engineering/resources/build-security.md +95 -0
- package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
- package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
- package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
- package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
- package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
- package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
- package/.claude/skills/cloud-engineering/SKILL.md +675 -0
- package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
- package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
- package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
- package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
- package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
- package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
- package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
- package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
- package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
- package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
- package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
- package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
- package/.claude/skills/cybersecurity/SKILL.md +409 -0
- package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
- package/.claude/skills/database-engineering/SKILL.md +61 -0
- package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
- package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
- package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
- package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
- package/.claude/skills/devsecops/SKILL.md +374 -0
- package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
- package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
- package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
- package/.claude/skills/devsecops/resources/container-security.md +915 -0
- package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
- package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
- package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
- package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
- package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
- package/.claude/skills/devsecops/resources/security-testing.md +203 -0
- package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
- package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
- package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
- package/.claude/skills/documentation-as-code/SKILL.md +323 -0
- package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
- package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
- package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
- package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
- package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
- package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
- package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
- package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
- package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
- package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
- package/.claude/skills/engineering-management/SKILL.md +356 -0
- package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
- package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
- package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
- package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
- package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
- package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
- package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
- package/.claude/skills/error-tracking/SKILL.md +379 -0
- package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
- package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
- package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
- package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
- package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
- package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
- package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
- package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
- package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
- package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
- package/.claude/skills/general-it-engineering/SKILL.md +393 -0
- package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
- package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
- package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
- package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
- package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
- package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
- package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
- package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
- package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
- package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
- package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
- package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
- package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
- package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
- package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
- package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
- package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
- package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
- package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
- package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
- package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
- package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
- package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
- package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
- package/.claude/skills/network-engineering/SKILL.md +385 -0
- package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
- package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
- package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
- package/.claude/skills/network-engineering/resources/network-security.md +921 -0
- package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
- package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
- package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
- package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
- package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
- package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
- package/.claude/skills/observability-engineering/SKILL.md +101 -0
- package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
- package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
- package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
- package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
- package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
- package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
- package/.claude/skills/platform-engineering/SKILL.md +555 -0
- package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
- package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
- package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
- package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
- package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
- package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
- package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
- package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
- package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
- package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
- package/.claude/skills/release-engineering/SKILL.md +393 -0
- package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
- package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
- package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
- package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
- package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
- package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
- package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
- package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
- package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
- package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
- package/.claude/skills/route-tester/SKILL.md +392 -0
- package/.claude/skills/skill-developer/ADVANCED.md +197 -0
- package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
- package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
- package/.claude/skills/skill-developer/SKILL.md +430 -0
- package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
- package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
- package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
- package/.claude/skills/skill-rules.json +2940 -0
- package/.claude/skills/sre/SKILL.md +464 -0
- package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
- package/.claude/skills/sre/resources/capacity-planning.md +226 -0
- package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
- package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
- package/.claude/skills/sre/resources/incident-management.md +436 -0
- package/.claude/skills/sre/resources/observability-stack.md +240 -0
- package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
- package/.claude/skills/sre/resources/performance-optimization.md +108 -0
- package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
- package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
- package/.claude/skills/sre/resources/toil-reduction.md +145 -0
- package/.claude/skills/systems-engineering/SKILL.md +648 -0
- package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
- package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
- package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
- package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
- package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
- package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
- package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
- package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
- package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
- package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
- package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
- package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
- package/.claude/skills/technical-leadership/SKILL.md +728 -0
- package/CHANGELOG.md +90 -54
- package/README.md +94 -0
- package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
- package/backend/jest.config.js +59 -0
- package/backend/package-lock.json +6129 -0
- package/backend/package.json +16 -4
- package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
- package/backend/prisma/schema.prisma +33 -0
- package/backend/src/__tests__/core/DependencyService.test.js +336 -0
- package/backend/src/__tests__/core/UserService.test.js +875 -0
- package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
- package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
- package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
- package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
- package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
- package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
- package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
- package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
- package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
- package/backend/src/__tests__/secretsFilter.test.js +425 -0
- package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
- package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
- package/backend/src/__tests__/services/CacheManager.test.js +125 -0
- package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
- package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
- package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
- package/backend/src/__tests__/setup.js +25 -0
- package/backend/src/api/routes/apiKeys.js +181 -0
- package/backend/src/api/routes/bots.js +49 -7
- package/backend/src/api/routes/plugins.js +2 -1
- package/backend/src/api/routes/system.js +174 -0
- package/backend/src/container.js +82 -0
- package/backend/src/core/BotManager.js +142 -871
- package/backend/src/core/BotManager.old.js +1093 -0
- package/backend/src/core/BotProcess.js +1092 -858
- package/backend/src/core/EventGraphManager.js +280 -198
- package/backend/src/core/GraphExecutionEngine.js +321 -325
- package/backend/src/core/MessageQueue.js +27 -6
- package/backend/src/core/NodeRegistry.js +37 -1134
- package/backend/src/core/PluginManager.js +62 -12
- package/backend/src/core/PrismaService.js +32 -0
- package/backend/src/core/UserService.js +3 -3
- package/backend/src/core/__tests__/PrismaService.test.js +24 -0
- package/backend/src/core/commands/README.md +305 -0
- package/backend/src/core/commands/dev.js +13 -7
- package/backend/src/core/commands/ping.js +10 -4
- package/backend/src/core/commands/whois.js +63 -0
- package/backend/src/core/config/validation.js +27 -0
- package/backend/src/core/constants/graphTypes.js +21 -0
- package/backend/src/core/node-registries/actions.js +132 -0
- package/backend/src/core/node-registries/arrays.js +137 -0
- package/backend/src/core/node-registries/bot.js +23 -0
- package/backend/src/core/node-registries/data.js +290 -0
- package/backend/src/core/node-registries/debug.js +26 -0
- package/backend/src/core/node-registries/events.js +187 -0
- package/backend/src/core/node-registries/flow.js +139 -0
- package/backend/src/core/node-registries/logic.js +45 -0
- package/backend/src/core/node-registries/math.js +42 -0
- package/backend/src/core/node-registries/objects.js +98 -0
- package/backend/src/core/node-registries/strings.js +153 -0
- package/backend/src/core/node-registries/time.js +113 -0
- package/backend/src/core/node-registries/users.js +79 -0
- package/backend/src/core/nodes/{action_bot_look_at.js → actions/bot_look_at.js} +36 -36
- package/backend/src/core/nodes/{action_bot_set_variable.js → actions/bot_set_variable.js} +32 -32
- package/backend/src/core/nodes/{action_send_log.js → actions/send_log.js} +28 -23
- package/backend/src/core/nodes/{action_send_message.js → actions/send_message.js} +32 -32
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/{data_cast.js → data/cast.js} +8 -0
- package/backend/src/core/nodes/data/datetime_literal.js +27 -0
- package/backend/src/core/nodes/data/entity_info.js +69 -0
- package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
- package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
- package/backend/src/core/nodes/{data_get_user_field.js → data/get_user_field.js} +1 -1
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/{debug_log.js → debug/log.js} +16 -16
- package/backend/src/core/nodes/{flow_branch.js → flow/branch.js} +15 -15
- package/backend/src/core/nodes/{flow_break.js → flow/break.js} +14 -14
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/{flow_for_each.js → flow/for_each.js} +39 -39
- package/backend/src/core/nodes/{flow_sequence.js → flow/sequence.js} +16 -16
- package/backend/src/core/nodes/{flow_switch.js → flow/switch.js} +47 -47
- package/backend/src/core/nodes/{flow_while.js → flow/while.js} +1 -1
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
- package/backend/src/core/nodes/time/add.js +33 -0
- package/backend/src/core/nodes/time/compare.js +35 -0
- package/backend/src/core/nodes/time/diff.js +29 -0
- package/backend/src/core/nodes/time/format.js +32 -0
- package/backend/src/core/nodes/time/now.js +18 -0
- package/backend/src/core/nodes/{user_check_blacklist.js → users/check_blacklist.js} +37 -37
- package/backend/src/core/nodes/{user_get_groups.js → users/get_groups.js} +36 -36
- package/backend/src/core/nodes/{user_get_permissions.js → users/get_permissions.js} +36 -36
- package/backend/src/core/nodes/{user_set_blacklist.js → users/set_blacklist.js} +37 -37
- package/backend/src/core/services/BotLifecycleService.js +596 -0
- package/backend/src/core/services/BotProcessManager.js +163 -0
- package/backend/src/core/services/CacheManager.js +111 -0
- package/backend/src/core/services/CommandExecutionService.js +351 -0
- package/backend/src/core/services/ResourceMonitorService.js +90 -0
- package/backend/src/core/services/TelemetryService.js +124 -0
- package/backend/src/core/services/ValidationService.js +132 -0
- package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
- package/backend/src/core/services.js +20 -5
- package/backend/src/core/system/CommandContext.js +84 -0
- package/backend/src/core/system/Transport.js +78 -0
- package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
- package/backend/src/core/utils/jsonParser.js +18 -0
- package/backend/src/core/utils/secretsFilter.js +262 -0
- package/backend/src/core/utils/variableParser.js +89 -0
- package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
- package/backend/src/core/validation/nodeSchemas.js +112 -0
- package/backend/src/lib/prisma.js +2 -4
- package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
- package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
- package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
- package/backend/src/real-time/botApi/handlers/index.js +43 -0
- package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
- package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
- package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
- package/backend/src/real-time/botApi/index.js +40 -0
- package/backend/src/real-time/botApi/middleware.js +79 -0
- package/backend/src/real-time/botApi/utils.js +54 -0
- package/backend/src/real-time/socketHandler.js +6 -2
- package/backend/src/repositories/BaseRepository.js +43 -0
- package/backend/src/repositories/BotRepository.js +42 -0
- package/backend/src/repositories/CommandRepository.js +53 -0
- package/backend/src/repositories/EventGraphRepository.js +40 -0
- package/backend/src/repositories/GroupRepository.js +69 -0
- package/backend/src/repositories/PermissionRepository.js +48 -0
- package/backend/src/repositories/PluginRepository.js +42 -0
- package/backend/src/repositories/ServerRepository.js +27 -0
- package/backend/src/repositories/UserRepository.js +48 -0
- package/backend/src/server.js +3 -0
- package/backend/src/test-refactor.js +85 -0
- package/frontend/dist/assets/index-CfTo92bP.css +1 -0
- package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/package.json +0 -5
- package/package.json +2 -1
- package/frontend/dist/assets/index-B9GedHEa.js +0 -8352
- package/frontend/dist/assets/index-zLiy9MDx.css +0 -1
- package/nul +0 -0
- /package/backend/src/core/nodes/{action_http_request.js → actions/http_request.js} +0 -0
- /package/backend/src/core/nodes/{array_add_element.js → arrays/add_element.js} +0 -0
- /package/backend/src/core/nodes/{array_contains.js → arrays/contains.js} +0 -0
- /package/backend/src/core/nodes/{array_find_index.js → arrays/find_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_by_index.js → arrays/get_by_index.js} +0 -0
- /package/backend/src/core/nodes/{array_get_random_element.js → arrays/get_random_element.js} +0 -0
- /package/backend/src/core/nodes/{array_remove_by_index.js → arrays/remove_by_index.js} +0 -0
- /package/backend/src/core/nodes/{bot_get_position.js → bot/get_position.js} +0 -0
- /package/backend/src/core/nodes/{data_array_literal.js → data/array_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_boolean_literal.js → data/boolean_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_get_argument.js → data/get_argument.js} +0 -0
- /package/backend/src/core/nodes/{data_get_bot_look.js → data/get_bot_look.js} +0 -0
- /package/backend/src/core/nodes/{data_get_entity_field.js → data/get_entity_field.js} +0 -0
- /package/backend/src/core/nodes/{data_get_server_players.js → data/get_server_players.js} +0 -0
- /package/backend/src/core/nodes/{data_get_variable.js → data/get_variable.js} +0 -0
- /package/backend/src/core/nodes/{data_length.js → data/length.js} +0 -0
- /package/backend/src/core/nodes/{data_make_object.js → data/make_object.js} +0 -0
- /package/backend/src/core/nodes/{data_number_literal.js → data/number_literal.js} +0 -0
- /package/backend/src/core/nodes/{data_string_literal.js → data/string_literal.js} +0 -0
- /package/backend/src/core/nodes/{logic_compare.js → logic/compare.js} +0 -0
- /package/backend/src/core/nodes/{logic_operation.js → logic/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_operation.js → math/operation.js} +0 -0
- /package/backend/src/core/nodes/{math_random_number.js → math/random_number.js} +0 -0
- /package/backend/src/core/nodes/{object_create.js → objects/create.js} +0 -0
- /package/backend/src/core/nodes/{object_delete.js → objects/delete.js} +0 -0
- /package/backend/src/core/nodes/{object_get.js → objects/get.js} +0 -0
- /package/backend/src/core/nodes/{object_has_key.js → objects/has_key.js} +0 -0
- /package/backend/src/core/nodes/{object_set.js → objects/set.js} +0 -0
- /package/backend/src/core/nodes/{string_concat.js → strings/concat.js} +0 -0
- /package/backend/src/core/nodes/{string_contains.js → strings/contains.js} +0 -0
- /package/backend/src/core/nodes/{string_ends_with.js → strings/ends_with.js} +0 -0
- /package/backend/src/core/nodes/{string_equals.js → strings/equals.js} +0 -0
- /package/backend/src/core/nodes/{string_length.js → strings/length.js} +0 -0
- /package/backend/src/core/nodes/{string_matches.js → strings/matches.js} +0 -0
- /package/backend/src/core/nodes/{string_split.js → strings/split.js} +0 -0
- /package/backend/src/core/nodes/{string_starts_with.js → strings/starts_with.js} +0 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
describe('strings:concat node', () => {
|
|
2
|
+
const stringConcat = require('../concat');
|
|
3
|
+
|
|
4
|
+
const mockHelpers = (...strings) => ({
|
|
5
|
+
resolvePinValue: jest.fn(async (node, pinId, defaultValue) => {
|
|
6
|
+
const match = pinId.match(/^pin_(\d+)$/);
|
|
7
|
+
if (match) {
|
|
8
|
+
const index = parseInt(match[1]);
|
|
9
|
+
return strings[index] !== undefined ? strings[index] : defaultValue;
|
|
10
|
+
}
|
|
11
|
+
return defaultValue;
|
|
12
|
+
}),
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should concatenate two strings', async () => {
|
|
16
|
+
const node = { id: 'test', data: { pinCount: 2 } };
|
|
17
|
+
const helpers = mockHelpers('Hello', ' World');
|
|
18
|
+
|
|
19
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
20
|
+
|
|
21
|
+
expect(result).toBe('Hello World');
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
it('should concatenate multiple strings', async () => {
|
|
25
|
+
const node = { id: 'test', data: { pinCount: 4 } };
|
|
26
|
+
const helpers = mockHelpers('A', 'B', 'C', 'D');
|
|
27
|
+
|
|
28
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
29
|
+
|
|
30
|
+
expect(result).toBe('ABCD');
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should handle empty strings', async () => {
|
|
34
|
+
const node = { id: 'test', data: { pinCount: 3 } };
|
|
35
|
+
const helpers = mockHelpers('Hello', '', 'World');
|
|
36
|
+
|
|
37
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
38
|
+
|
|
39
|
+
expect(result).toBe('HelloWorld');
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('should use default pinCount of 2', async () => {
|
|
43
|
+
const node = { id: 'test', data: {} };
|
|
44
|
+
const helpers = mockHelpers('A', 'B');
|
|
45
|
+
|
|
46
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
47
|
+
|
|
48
|
+
expect(result).toBe('AB');
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('should handle non-string inputs by converting to string', async () => {
|
|
52
|
+
const node = { id: 'test', data: { pinCount: 4 } };
|
|
53
|
+
const helpers = mockHelpers('String: ', 123, ' Boolean: ', true);
|
|
54
|
+
|
|
55
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
56
|
+
|
|
57
|
+
expect(result).toBe('String: 123 Boolean: true');
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('should handle null and undefined inputs', async () => {
|
|
61
|
+
const node = { id: 'test', data: { pinCount: 4 } };
|
|
62
|
+
const helpers = mockHelpers('Value: ', null, ' | ', undefined);
|
|
63
|
+
|
|
64
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
65
|
+
|
|
66
|
+
// null и undefined заменяются на пустые строки в текущей реализации
|
|
67
|
+
expect(result).toBe('Value: | ');
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should handle very large number of inputs', async () => {
|
|
71
|
+
const node = { id: 'test', data: { pinCount: 100 } };
|
|
72
|
+
const inputs = Array(100).fill('x');
|
|
73
|
+
const helpers = mockHelpers(...inputs);
|
|
74
|
+
|
|
75
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
76
|
+
|
|
77
|
+
expect(result).toBe('x'.repeat(100));
|
|
78
|
+
expect(result.length).toBe(100);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should handle object inputs by stringifying', async () => {
|
|
82
|
+
const node = { id: 'test', data: { pinCount: 2 } };
|
|
83
|
+
const helpers = mockHelpers('Object: ', { key: 'value' });
|
|
84
|
+
|
|
85
|
+
const result = await stringConcat.evaluate(node, 'result', {}, helpers);
|
|
86
|
+
|
|
87
|
+
expect(result).toBe('Object: [object Object]');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
describe('time:now node', () => {
|
|
2
|
+
const timeNow = require('../now');
|
|
3
|
+
|
|
4
|
+
it('should return current date from now pin', async () => {
|
|
5
|
+
const node = { id: 'test', type: 'time:now' };
|
|
6
|
+
const context = {};
|
|
7
|
+
const helpers = {};
|
|
8
|
+
|
|
9
|
+
const result = await timeNow.evaluate(node, 'now', context, helpers);
|
|
10
|
+
|
|
11
|
+
expect(result).toBeInstanceOf(Date);
|
|
12
|
+
expect(result.getTime()).toBeLessThanOrEqual(Date.now());
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should return null for unknown pin', async () => {
|
|
16
|
+
const node = { id: 'test', type: 'time:now' };
|
|
17
|
+
const context = {};
|
|
18
|
+
const helpers = {};
|
|
19
|
+
|
|
20
|
+
const result = await timeNow.evaluate(node, 'unknown', context, helpers);
|
|
21
|
+
|
|
22
|
+
expect(result).toBeNull();
|
|
23
|
+
});
|
|
24
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const { add } = require('date-fns');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node
|
|
5
|
+
* @param {string} pinId
|
|
6
|
+
* @param {object} context
|
|
7
|
+
* @param {object} helpers
|
|
8
|
+
* @returns {Promise<any>}
|
|
9
|
+
*/
|
|
10
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
11
|
+
const { resolvePinValue } = helpers;
|
|
12
|
+
|
|
13
|
+
if (pinId === 'result') {
|
|
14
|
+
const date = await resolvePinValue(node, 'date', new Date());
|
|
15
|
+
const duration = await resolvePinValue(node, 'duration', {});
|
|
16
|
+
|
|
17
|
+
if (date instanceof Date && !isNaN(date.getTime())) {
|
|
18
|
+
try {
|
|
19
|
+
return add(date, duration);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
// Либо пробросить ошибку, либо вернуть null
|
|
22
|
+
throw new Error(`Ошибка добавления продолжительности: ${error.message}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
throw new Error('Невалидная входная дата');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
module.exports = {
|
|
32
|
+
evaluate,
|
|
33
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const { isAfter, isBefore, isEqual } = require('date-fns');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node
|
|
5
|
+
* @param {string} pinId
|
|
6
|
+
* @param {object} context
|
|
7
|
+
* @param {object} helpers
|
|
8
|
+
* @returns {Promise<any>}
|
|
9
|
+
*/
|
|
10
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
11
|
+
const { resolvePinValue } = helpers;
|
|
12
|
+
|
|
13
|
+
if (pinId === 'result') {
|
|
14
|
+
const dateLeft = await resolvePinValue(node, 'date_left', new Date());
|
|
15
|
+
const dateRight = await resolvePinValue(node, 'date_right', new Date());
|
|
16
|
+
const op = await resolvePinValue(node, 'operation', 'after');
|
|
17
|
+
|
|
18
|
+
if (dateLeft instanceof Date && !isNaN(dateLeft.getTime()) &&
|
|
19
|
+
dateRight instanceof Date && !isNaN(dateRight.getTime())) {
|
|
20
|
+
switch (op) {
|
|
21
|
+
case 'after': return isAfter(dateLeft, dateRight);
|
|
22
|
+
case 'before': return isBefore(dateLeft, dateRight);
|
|
23
|
+
case 'equal': return isEqual(dateLeft, dateRight);
|
|
24
|
+
default: return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
evaluate,
|
|
35
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const { differenceInMilliseconds } = require('date-fns');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node
|
|
5
|
+
* @param {string} pinId
|
|
6
|
+
* @param {object} context
|
|
7
|
+
* @param {object} helpers
|
|
8
|
+
* @returns {Promise<any>}
|
|
9
|
+
*/
|
|
10
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
11
|
+
const { resolvePinValue } = helpers;
|
|
12
|
+
|
|
13
|
+
if (pinId === 'diff') {
|
|
14
|
+
const dateLeft = await resolvePinValue(node, 'date_left', new Date());
|
|
15
|
+
const dateRight = await resolvePinValue(node, 'date_right', new Date());
|
|
16
|
+
|
|
17
|
+
if (dateLeft instanceof Date && !isNaN(dateLeft.getTime()) &&
|
|
18
|
+
dateRight instanceof Date && !isNaN(dateRight.getTime())) {
|
|
19
|
+
return differenceInMilliseconds(dateLeft, dateRight);
|
|
20
|
+
}
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = {
|
|
28
|
+
evaluate,
|
|
29
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const { format } = require('date-fns');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} node
|
|
5
|
+
* @param {string} pinId
|
|
6
|
+
* @param {object} context
|
|
7
|
+
* @param {object} helpers
|
|
8
|
+
* @returns {Promise<any>}
|
|
9
|
+
*/
|
|
10
|
+
async function evaluate(node, pinId, context, helpers) {
|
|
11
|
+
const { resolvePinValue } = helpers;
|
|
12
|
+
|
|
13
|
+
if (pinId === 'formatted') {
|
|
14
|
+
const date = await resolvePinValue(node, 'date', new Date());
|
|
15
|
+
const formatString = await resolvePinValue(node, 'format', 'yyyy-MM-dd HH:mm:ss');
|
|
16
|
+
|
|
17
|
+
if (date instanceof Date && !isNaN(date.getTime())) {
|
|
18
|
+
try {
|
|
19
|
+
return format(date, formatString);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
throw new Error(`Ошибка форматирования: ${error.message}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
throw new Error('Ошибка: невалидная дата');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
module.exports = {
|
|
31
|
+
evaluate,
|
|
32
|
+
};
|
|
@@ -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 === 'now') {
|
|
10
|
+
return new Date();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
module.exports = {
|
|
17
|
+
evaluate,
|
|
18
|
+
};
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
const User = require('
|
|
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) {
|
|
12
|
-
const { resolvePinValue } = helpers;
|
|
13
|
-
|
|
14
|
-
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
-
let isBlacklisted = false;
|
|
16
|
-
let usernameToFind = null;
|
|
17
|
-
|
|
18
|
-
if (typeof userIdentifier === 'string') {
|
|
19
|
-
usernameToFind = userIdentifier;
|
|
20
|
-
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
-
usernameToFind = userIdentifier.username;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (usernameToFind) {
|
|
25
|
-
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
-
if (user) {
|
|
27
|
-
isBlacklisted = user.isBlacklisted;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Этот узел имеет только один выходной пин данных
|
|
32
|
-
return isBlacklisted;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
module.exports = {
|
|
36
|
-
evaluate,
|
|
37
|
-
};
|
|
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) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let isBlacklisted = false;
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user) {
|
|
27
|
+
isBlacklisted = user.isBlacklisted;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Этот узел имеет только один выходной пин данных
|
|
32
|
+
return isBlacklisted;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
evaluate,
|
|
37
|
+
};
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
const User = require('
|
|
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) {
|
|
12
|
-
const { resolvePinValue } = helpers;
|
|
13
|
-
|
|
14
|
-
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
-
let groups = [];
|
|
16
|
-
let usernameToFind = null;
|
|
17
|
-
|
|
18
|
-
if (typeof userIdentifier === 'string') {
|
|
19
|
-
usernameToFind = userIdentifier;
|
|
20
|
-
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
-
usernameToFind = userIdentifier.username;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (usernameToFind) {
|
|
25
|
-
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
-
if (user && user.groups) {
|
|
27
|
-
groups = user.groups.map(g => g.group.name);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return groups;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
module.exports = {
|
|
35
|
-
evaluate,
|
|
36
|
-
};
|
|
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) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let groups = [];
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user && user.groups) {
|
|
27
|
+
groups = user.groups.map(g => g.group.name);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return groups;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
evaluate,
|
|
36
|
+
};
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
const User = require('
|
|
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) {
|
|
12
|
-
const { resolvePinValue } = helpers;
|
|
13
|
-
|
|
14
|
-
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
-
let permissions = [];
|
|
16
|
-
let usernameToFind = null;
|
|
17
|
-
|
|
18
|
-
if (typeof userIdentifier === 'string') {
|
|
19
|
-
usernameToFind = userIdentifier;
|
|
20
|
-
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
-
usernameToFind = userIdentifier.username;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (usernameToFind) {
|
|
25
|
-
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
-
if (user && user.permissionsSet) {
|
|
27
|
-
permissions = Array.from(user.permissionsSet);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return permissions;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
module.exports = {
|
|
35
|
-
evaluate,
|
|
36
|
-
};
|
|
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) {
|
|
12
|
+
const { resolvePinValue } = helpers;
|
|
13
|
+
|
|
14
|
+
const userIdentifier = await resolvePinValue(node, 'user', null);
|
|
15
|
+
let permissions = [];
|
|
16
|
+
let usernameToFind = null;
|
|
17
|
+
|
|
18
|
+
if (typeof userIdentifier === 'string') {
|
|
19
|
+
usernameToFind = userIdentifier;
|
|
20
|
+
} else if (userIdentifier && typeof userIdentifier === 'object' && userIdentifier.username) {
|
|
21
|
+
usernameToFind = userIdentifier.username;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (usernameToFind) {
|
|
25
|
+
const user = await User.getUser(usernameToFind, context.botId);
|
|
26
|
+
if (user && user.permissionsSet) {
|
|
27
|
+
permissions = Array.from(user.permissionsSet);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return permissions;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
evaluate,
|
|
36
|
+
};
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
const User = require('
|
|
2
|
-
const
|
|
3
|
-
const prisma =
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @param {object} node - Экземпляр узла из графа.
|
|
7
|
-
* @param {object} context - Контекст выполнения графа.
|
|
8
|
-
* @param {object} helpers - Вспомогательные функции движка.
|
|
9
|
-
* @param {function} helpers.resolvePinValue - Функция для получения значения с пина.
|
|
10
|
-
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
11
|
-
* @param {Map} helpers.memo - Карта для мемоизации значений.
|
|
12
|
-
*/
|
|
13
|
-
async function execute(node, context, helpers) {
|
|
14
|
-
const { resolvePinValue, traverse, memo } = helpers;
|
|
15
|
-
|
|
16
|
-
const userObject = await resolvePinValue(node, 'user', null);
|
|
17
|
-
const blacklistStatus = await resolvePinValue(node, 'blacklist_status', false);
|
|
18
|
-
let updatedUser = null;
|
|
19
|
-
|
|
20
|
-
if (userObject && userObject.username) {
|
|
21
|
-
const user = await User.getUser(userObject.username, context.botId);
|
|
22
|
-
if (user) {
|
|
23
|
-
updatedUser = await prisma.user.update({
|
|
24
|
-
where: { id: user.id },
|
|
25
|
-
data: { isBlacklisted: blacklistStatus }
|
|
26
|
-
});
|
|
27
|
-
User.clearCache(userObject.username, context.botId);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
memo.set(`${node.id}:updated_user`, updatedUser);
|
|
32
|
-
await traverse(node, 'exec');
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
module.exports = {
|
|
36
|
-
execute,
|
|
37
|
-
};
|
|
1
|
+
const User = require('../../UserService');
|
|
2
|
+
const prismaService = require('../../PrismaService');
|
|
3
|
+
const prisma = prismaService.getClient();
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {object} node - Экземпляр узла из графа.
|
|
7
|
+
* @param {object} context - Контекст выполнения графа.
|
|
8
|
+
* @param {object} helpers - Вспомогательные функции движка.
|
|
9
|
+
* @param {function} helpers.resolvePinValue - Функция для получения значения с пина.
|
|
10
|
+
* @param {function} helpers.traverse - Функция для перехода к следующему узлу.
|
|
11
|
+
* @param {Map} helpers.memo - Карта для мемоизации значений.
|
|
12
|
+
*/
|
|
13
|
+
async function execute(node, context, helpers) {
|
|
14
|
+
const { resolvePinValue, traverse, memo } = helpers;
|
|
15
|
+
|
|
16
|
+
const userObject = await resolvePinValue(node, 'user', null);
|
|
17
|
+
const blacklistStatus = await resolvePinValue(node, 'blacklist_status', false);
|
|
18
|
+
let updatedUser = null;
|
|
19
|
+
|
|
20
|
+
if (userObject && userObject.username) {
|
|
21
|
+
const user = await User.getUser(userObject.username, context.botId);
|
|
22
|
+
if (user) {
|
|
23
|
+
updatedUser = await prisma.user.update({
|
|
24
|
+
where: { id: user.id },
|
|
25
|
+
data: { isBlacklisted: blacklistStatus }
|
|
26
|
+
});
|
|
27
|
+
User.clearCache(userObject.username, context.botId);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
memo.set(`${node.id}:updated_user`, updatedUser);
|
|
32
|
+
await traverse(node, 'exec');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
module.exports = {
|
|
36
|
+
execute,
|
|
37
|
+
};
|