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.
- 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 +28 -3
- 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 -39
- 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 -850
- package/backend/src/core/BreakLoopSignal.js +8 -0
- package/backend/src/core/EventGraphManager.js +280 -193
- package/backend/src/core/GraphExecutionEngine.js +321 -928
- package/backend/src/core/MessageQueue.js +27 -6
- package/backend/src/core/NodeRegistry.js +37 -991
- 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/actions/bot_look_at.js +36 -0
- package/backend/src/core/nodes/actions/bot_set_variable.js +32 -0
- package/backend/src/core/nodes/actions/http_request.js +98 -0
- package/backend/src/core/nodes/actions/send_log.js +28 -0
- package/backend/src/core/nodes/actions/send_message.js +32 -0
- package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
- package/backend/src/core/nodes/arrays/add_element.js +23 -0
- package/backend/src/core/nodes/arrays/contains.js +40 -0
- package/backend/src/core/nodes/arrays/find_index.js +23 -0
- package/backend/src/core/nodes/arrays/get_by_index.js +23 -0
- package/backend/src/core/nodes/arrays/get_next.js +35 -0
- package/backend/src/core/nodes/arrays/get_random_element.js +32 -0
- package/backend/src/core/nodes/arrays/remove_by_index.js +30 -0
- package/backend/src/core/nodes/bot/get_position.js +20 -0
- package/backend/src/core/nodes/data/array_literal.js +31 -0
- package/backend/src/core/nodes/data/boolean_literal.js +21 -0
- package/backend/src/core/nodes/data/cast.js +42 -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_argument.js +23 -0
- package/backend/src/core/nodes/data/get_bot_look.js +14 -0
- package/backend/src/core/nodes/data/get_entity_field.js +18 -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_server_players.js +18 -0
- package/backend/src/core/nodes/data/get_user_field.js +40 -0
- package/backend/src/core/nodes/data/get_variable.js +23 -0
- package/backend/src/core/nodes/data/length.js +25 -0
- package/backend/src/core/nodes/data/make_object.js +31 -0
- package/backend/src/core/nodes/data/number_literal.js +21 -0
- package/backend/src/core/nodes/data/string_literal.js +34 -0
- package/backend/src/core/nodes/data/type_check.js +53 -0
- package/backend/src/core/nodes/debug/log.js +16 -0
- package/backend/src/core/nodes/flow/branch.js +15 -0
- package/backend/src/core/nodes/flow/break.js +14 -0
- package/backend/src/core/nodes/flow/delay.js +43 -0
- package/backend/src/core/nodes/flow/for_each.js +39 -0
- package/backend/src/core/nodes/flow/sequence.js +16 -0
- package/backend/src/core/nodes/flow/switch.js +47 -0
- package/backend/src/core/nodes/flow/while.js +64 -0
- package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
- package/backend/src/core/nodes/logic/compare.js +33 -0
- package/backend/src/core/nodes/logic/operation.js +35 -0
- package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
- package/backend/src/core/nodes/math/operation.js +31 -0
- package/backend/src/core/nodes/math/random_number.js +43 -0
- package/backend/src/core/nodes/objects/create.js +40 -0
- package/backend/src/core/nodes/objects/delete.js +26 -0
- package/backend/src/core/nodes/objects/get.js +23 -0
- package/backend/src/core/nodes/objects/has_key.js +30 -0
- package/backend/src/core/nodes/objects/set.js +27 -0
- package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
- package/backend/src/core/nodes/strings/concat.js +27 -0
- package/backend/src/core/nodes/strings/contains.js +41 -0
- package/backend/src/core/nodes/strings/ends_with.js +43 -0
- package/backend/src/core/nodes/strings/equals.js +36 -0
- package/backend/src/core/nodes/strings/length.js +36 -0
- package/backend/src/core/nodes/strings/matches.js +39 -0
- package/backend/src/core/nodes/strings/split.js +37 -0
- package/backend/src/core/nodes/strings/starts_with.js +43 -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/users/check_blacklist.js +37 -0
- package/backend/src/core/nodes/users/get_groups.js +36 -0
- package/backend/src/core/nodes/users/get_permissions.js +36 -0
- package/backend/src/core/nodes/users/set_blacklist.js +37 -0
- 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 +1 -5
- package/package.json +2 -1
- package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
- package/frontend/dist/assets/index-CMMutadc.js +0 -8352
- package/nul +0 -0
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
# Architecture Patterns
|
|
2
|
+
|
|
3
|
+
Comprehensive guide to common architectural patterns for modern infrastructure and applications.
|
|
4
|
+
|
|
5
|
+
## Pattern Catalog
|
|
6
|
+
|
|
7
|
+
### 1. Monolithic Architecture
|
|
8
|
+
|
|
9
|
+
**Description:**
|
|
10
|
+
All functionality in a single, unified application.
|
|
11
|
+
|
|
12
|
+
**Structure:**
|
|
13
|
+
```
|
|
14
|
+
┌────────────────────────────────────┐
|
|
15
|
+
│ Monolithic Application │
|
|
16
|
+
│ ┌──────────────────────────────┐ │
|
|
17
|
+
│ │ Presentation Layer │ │
|
|
18
|
+
│ ├──────────────────────────────┤ │
|
|
19
|
+
│ │ Business Logic │ │
|
|
20
|
+
│ ├──────────────────────────────┤ │
|
|
21
|
+
│ │ Data Access Layer │ │
|
|
22
|
+
│ └──────────────────────────────┘ │
|
|
23
|
+
└────────────────┬───────────────────┘
|
|
24
|
+
│
|
|
25
|
+
┌────────▼────────┐
|
|
26
|
+
│ Database │
|
|
27
|
+
└─────────────────┘
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**When to Use:**
|
|
31
|
+
- Starting new projects (validate product-market fit)
|
|
32
|
+
- Small to medium teams
|
|
33
|
+
- Simple business logic
|
|
34
|
+
- Tight coupling is acceptable
|
|
35
|
+
|
|
36
|
+
**Pros:**
|
|
37
|
+
- ✅ Simple deployment
|
|
38
|
+
- ✅ Easy local development
|
|
39
|
+
- ✅ Straightforward debugging
|
|
40
|
+
- ✅ Strong consistency
|
|
41
|
+
- ✅ Lower operational overhead
|
|
42
|
+
|
|
43
|
+
**Cons:**
|
|
44
|
+
- ❌ Scaling all-or-nothing
|
|
45
|
+
- ❌ Technology lock-in
|
|
46
|
+
- ❌ Long deployment cycles
|
|
47
|
+
- ❌ High deployment risk
|
|
48
|
+
- ❌ Difficult to isolate failures
|
|
49
|
+
|
|
50
|
+
**Example:**
|
|
51
|
+
```typescript
|
|
52
|
+
// Single Express application
|
|
53
|
+
const app = express();
|
|
54
|
+
|
|
55
|
+
// All routes in one application
|
|
56
|
+
app.use('/users', userRoutes);
|
|
57
|
+
app.use('/orders', orderRoutes);
|
|
58
|
+
app.use('/products', productRoutes);
|
|
59
|
+
app.use('/payments', paymentRoutes);
|
|
60
|
+
|
|
61
|
+
// Single database connection
|
|
62
|
+
const db = new PrismaClient();
|
|
63
|
+
|
|
64
|
+
app.listen(3000);
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### 2. Microservices Architecture
|
|
70
|
+
|
|
71
|
+
**Description:**
|
|
72
|
+
Application broken into small, independent services communicating over network.
|
|
73
|
+
|
|
74
|
+
**Structure:**
|
|
75
|
+
```
|
|
76
|
+
API Gateway
|
|
77
|
+
│
|
|
78
|
+
┌────────────┼────────────┐
|
|
79
|
+
│ │ │
|
|
80
|
+
┌────▼───┐ ┌───▼────┐ ┌────▼───┐
|
|
81
|
+
│ User │ │ Order │ │Product │
|
|
82
|
+
│Service │ │Service │ │Service │
|
|
83
|
+
└────┬───┘ └───┬────┘ └────┬───┘
|
|
84
|
+
│ │ │
|
|
85
|
+
┌────▼───┐ ┌───▼────┐ ┌────▼───┐
|
|
86
|
+
│UserDB │ │OrderDB │ │Product │
|
|
87
|
+
└────────┘ └────────┘ │ DB │
|
|
88
|
+
└────────┘
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**When to Use:**
|
|
92
|
+
- Large, complex applications
|
|
93
|
+
- Multiple independent teams
|
|
94
|
+
- Different scaling requirements per service
|
|
95
|
+
- Technology diversity needed
|
|
96
|
+
|
|
97
|
+
**Pros:**
|
|
98
|
+
- ✅ Independent scaling
|
|
99
|
+
- ✅ Technology flexibility
|
|
100
|
+
- ✅ Team autonomy
|
|
101
|
+
- ✅ Fault isolation
|
|
102
|
+
- ✅ Easier to understand (each service)
|
|
103
|
+
|
|
104
|
+
**Cons:**
|
|
105
|
+
- ❌ Distributed system complexity
|
|
106
|
+
- ❌ Network latency
|
|
107
|
+
- ❌ Data consistency challenges
|
|
108
|
+
- ❌ Debugging difficulty
|
|
109
|
+
- ❌ High operational overhead
|
|
110
|
+
|
|
111
|
+
**Example:**
|
|
112
|
+
```yaml
|
|
113
|
+
# User Service
|
|
114
|
+
apiVersion: apps/v1
|
|
115
|
+
kind: Deployment
|
|
116
|
+
metadata:
|
|
117
|
+
name: user-service
|
|
118
|
+
spec:
|
|
119
|
+
replicas: 3
|
|
120
|
+
template:
|
|
121
|
+
spec:
|
|
122
|
+
containers:
|
|
123
|
+
- name: user-service
|
|
124
|
+
image: user-service:v1.0.0
|
|
125
|
+
env:
|
|
126
|
+
- name: DATABASE_URL
|
|
127
|
+
value: postgresql://user-db:5432
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
# Order Service
|
|
131
|
+
apiVersion: apps/v1
|
|
132
|
+
kind: Deployment
|
|
133
|
+
metadata:
|
|
134
|
+
name: order-service
|
|
135
|
+
spec:
|
|
136
|
+
replicas: 5 # Scale independently
|
|
137
|
+
template:
|
|
138
|
+
spec:
|
|
139
|
+
containers:
|
|
140
|
+
- name: order-service
|
|
141
|
+
image: order-service:v1.0.0
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### 3. Serverless Architecture
|
|
147
|
+
|
|
148
|
+
**Description:**
|
|
149
|
+
Application built using Function-as-a-Service (FaaS) and managed services.
|
|
150
|
+
|
|
151
|
+
**Structure:**
|
|
152
|
+
```
|
|
153
|
+
┌──────────┐ ┌─────────────┐
|
|
154
|
+
│ API │────►│ Lambda │
|
|
155
|
+
│ Gateway │ │ Functions │
|
|
156
|
+
└──────────┘ └──────┬──────┘
|
|
157
|
+
│
|
|
158
|
+
┌─────────────┼─────────────┐
|
|
159
|
+
│ │ │
|
|
160
|
+
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
|
|
161
|
+
│ DynamoDB│ │ S3 │ │ SQS │
|
|
162
|
+
└─────────┘ └─────────┘ └─────────┘
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**When to Use:**
|
|
166
|
+
- Variable, unpredictable workloads
|
|
167
|
+
- Event-driven processing
|
|
168
|
+
- Low operational overhead desired
|
|
169
|
+
- Cost optimization for sporadic usage
|
|
170
|
+
|
|
171
|
+
**Pros:**
|
|
172
|
+
- ✅ No infrastructure management
|
|
173
|
+
- ✅ Automatic scaling
|
|
174
|
+
- ✅ Pay-per-use pricing
|
|
175
|
+
- ✅ Fast iteration
|
|
176
|
+
- ✅ High availability built-in
|
|
177
|
+
|
|
178
|
+
**Cons:**
|
|
179
|
+
- ❌ Cold start latency
|
|
180
|
+
- ❌ Vendor lock-in
|
|
181
|
+
- ❌ Debugging challenges
|
|
182
|
+
- ❌ Limited execution time
|
|
183
|
+
- ❌ Stateless (requires external state)
|
|
184
|
+
|
|
185
|
+
**Example:**
|
|
186
|
+
```typescript
|
|
187
|
+
// AWS Lambda handler
|
|
188
|
+
export const handler = async (event: APIGatewayEvent) => {
|
|
189
|
+
const userId = event.pathParameters?.userId;
|
|
190
|
+
|
|
191
|
+
// Auto-scales based on requests
|
|
192
|
+
const user = await dynamodb.get({
|
|
193
|
+
TableName: 'Users',
|
|
194
|
+
Key: { userId }
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
statusCode: 200,
|
|
199
|
+
body: JSON.stringify(user)
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
// Terraform definition
|
|
204
|
+
resource "aws_lambda_function" "user_api" {
|
|
205
|
+
function_name = "user-api"
|
|
206
|
+
handler = "index.handler"
|
|
207
|
+
runtime = "nodejs18.x"
|
|
208
|
+
|
|
209
|
+
# Only charged when invoked
|
|
210
|
+
memory_size = 512
|
|
211
|
+
timeout = 30
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
### 4. Event-Driven Architecture
|
|
218
|
+
|
|
219
|
+
**Description:**
|
|
220
|
+
Services communicate asynchronously through events.
|
|
221
|
+
|
|
222
|
+
**Structure:**
|
|
223
|
+
```
|
|
224
|
+
┌──────────┐ ┌──────────────┐ ┌──────────┐
|
|
225
|
+
│ Order │──event─►│ Event Bus │──event─►│Inventory │
|
|
226
|
+
│ Service │ │ (SNS/SQS) │ │ Service │
|
|
227
|
+
└──────────┘ └───────┬──────┘ └──────────┘
|
|
228
|
+
│
|
|
229
|
+
event│
|
|
230
|
+
│
|
|
231
|
+
┌──────▼─────┐
|
|
232
|
+
│Notification│
|
|
233
|
+
│ Service │
|
|
234
|
+
└────────────┘
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
**When to Use:**
|
|
238
|
+
- Loose coupling required
|
|
239
|
+
- Asynchronous processing
|
|
240
|
+
- High scalability needs
|
|
241
|
+
- Multiple consumers per event
|
|
242
|
+
|
|
243
|
+
**Pros:**
|
|
244
|
+
- ✅ Loose coupling
|
|
245
|
+
- ✅ Scalability
|
|
246
|
+
- ✅ Resilience
|
|
247
|
+
- ✅ Easy to add consumers
|
|
248
|
+
- ✅ Event replay capability
|
|
249
|
+
|
|
250
|
+
**Cons:**
|
|
251
|
+
- ❌ Eventual consistency
|
|
252
|
+
- ❌ Debugging complexity
|
|
253
|
+
- ❌ Message ordering challenges
|
|
254
|
+
- ❌ Duplicate message handling
|
|
255
|
+
- ❌ Monitoring difficulty
|
|
256
|
+
|
|
257
|
+
**Example:**
|
|
258
|
+
```typescript
|
|
259
|
+
// Order service publishes event
|
|
260
|
+
const event = {
|
|
261
|
+
eventType: 'order.created',
|
|
262
|
+
orderId: '12345',
|
|
263
|
+
userId: 'user-789',
|
|
264
|
+
items: [...],
|
|
265
|
+
timestamp: new Date().toISOString()
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
await eventBridge.putEvents({
|
|
269
|
+
Entries: [{
|
|
270
|
+
Source: 'order-service',
|
|
271
|
+
DetailType: 'OrderCreated',
|
|
272
|
+
Detail: JSON.stringify(event)
|
|
273
|
+
}]
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
// Inventory service subscribes
|
|
277
|
+
eventBridge.on('order.created', async (event) => {
|
|
278
|
+
await reserveInventory(event.items);
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Notification service subscribes
|
|
282
|
+
eventBridge.on('order.created', async (event) => {
|
|
283
|
+
await sendOrderConfirmation(event.userId, event.orderId);
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
### 5. CQRS (Command Query Responsibility Segregation)
|
|
290
|
+
|
|
291
|
+
**Description:**
|
|
292
|
+
Separate read and write models for different optimization.
|
|
293
|
+
|
|
294
|
+
**Structure:**
|
|
295
|
+
```
|
|
296
|
+
Write Side: Read Side:
|
|
297
|
+
┌──────────┐ ┌──────────┐
|
|
298
|
+
│ Commands │ │ Queries │
|
|
299
|
+
└────┬─────┘ └────┬─────┘
|
|
300
|
+
│ │
|
|
301
|
+
┌────▼─────┐ ┌────▼─────┐
|
|
302
|
+
│Write Model│ │Read Model│
|
|
303
|
+
│(Normalized) │(Denorm.) │
|
|
304
|
+
└────┬─────┘ └────▲─────┘
|
|
305
|
+
│ │
|
|
306
|
+
│ ┌────────────┐ │
|
|
307
|
+
└─────►│Event Store │─────────┘
|
|
308
|
+
└────────────┘
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
**When to Use:**
|
|
312
|
+
- Complex domain logic
|
|
313
|
+
- Different read/write performance needs
|
|
314
|
+
- Audit requirements
|
|
315
|
+
- Temporal queries needed
|
|
316
|
+
|
|
317
|
+
**Pros:**
|
|
318
|
+
- ✅ Optimized read models
|
|
319
|
+
- ✅ Scalability (independent scaling)
|
|
320
|
+
- ✅ Audit trail
|
|
321
|
+
- ✅ Temporal queries
|
|
322
|
+
- ✅ Multiple read models
|
|
323
|
+
|
|
324
|
+
**Cons:**
|
|
325
|
+
- ❌ Complexity
|
|
326
|
+
- ❌ Eventual consistency
|
|
327
|
+
- ❌ More storage
|
|
328
|
+
- ❌ Synchronization overhead
|
|
329
|
+
- ❌ Learning curve
|
|
330
|
+
|
|
331
|
+
**Example:**
|
|
332
|
+
```typescript
|
|
333
|
+
// Write side: Commands
|
|
334
|
+
class CreateOrderCommand {
|
|
335
|
+
constructor(
|
|
336
|
+
public userId: string,
|
|
337
|
+
public items: OrderItem[]
|
|
338
|
+
) {}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
class OrderAggregate {
|
|
342
|
+
async handle(command: CreateOrderCommand) {
|
|
343
|
+
// Validate business rules
|
|
344
|
+
const order = this.createOrder(command);
|
|
345
|
+
|
|
346
|
+
// Persist event
|
|
347
|
+
const event = new OrderCreatedEvent(order);
|
|
348
|
+
await eventStore.append(event);
|
|
349
|
+
|
|
350
|
+
return order.id;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Read side: Queries
|
|
355
|
+
class GetOrderQuery {
|
|
356
|
+
constructor(public orderId: string) {}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
class OrderQueryHandler {
|
|
360
|
+
async handle(query: GetOrderQuery) {
|
|
361
|
+
// Optimized read model (denormalized)
|
|
362
|
+
return await readDb.query(`
|
|
363
|
+
SELECT o.*, u.name as user_name, p.name as product_name
|
|
364
|
+
FROM orders_view o
|
|
365
|
+
JOIN users u ON o.user_id = u.id
|
|
366
|
+
JOIN products p ON o.product_id = p.id
|
|
367
|
+
WHERE o.id = $1
|
|
368
|
+
`, [query.orderId]);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Event handler: Updates read model
|
|
373
|
+
eventStore.on('OrderCreated', async (event) => {
|
|
374
|
+
// Update denormalized read model
|
|
375
|
+
await readDb.insert('orders_view', {
|
|
376
|
+
order_id: event.orderId,
|
|
377
|
+
user_id: event.userId,
|
|
378
|
+
user_name: event.userName, // Denormalized
|
|
379
|
+
...event.data
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
### 6. Hexagonal Architecture (Ports & Adapters)
|
|
387
|
+
|
|
388
|
+
**Description:**
|
|
389
|
+
Application core isolated from external concerns.
|
|
390
|
+
|
|
391
|
+
**Structure:**
|
|
392
|
+
```
|
|
393
|
+
Adapters (External)
|
|
394
|
+
│
|
|
395
|
+
┌─────────┼─────────┐
|
|
396
|
+
│ │ │
|
|
397
|
+
┌───▼──┐ ┌───▼──┐ ┌───▼──┐
|
|
398
|
+
│REST │ │GraphQL│ │ CLI │
|
|
399
|
+
│ API │ │ API │ │ │
|
|
400
|
+
└───┬──┘ └───┬──┘ └───┬──┘
|
|
401
|
+
│ │ │
|
|
402
|
+
└────────┼────────┘
|
|
403
|
+
Ports
|
|
404
|
+
┌────▼────┐
|
|
405
|
+
│ Core │
|
|
406
|
+
│Business │
|
|
407
|
+
│ Logic │
|
|
408
|
+
└────┬────┘
|
|
409
|
+
Ports
|
|
410
|
+
┌────────┼────────┐
|
|
411
|
+
│ │ │
|
|
412
|
+
┌───▼──┐ ┌───▼──┐ ┌───▼──┐
|
|
413
|
+
│Postgres│MongoDB│ S3 │
|
|
414
|
+
└──────┘ └──────┘ └──────┘
|
|
415
|
+
Adapters (External)
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
**When to Use:**
|
|
419
|
+
- Complex business logic
|
|
420
|
+
- Multiple interfaces (REST, GraphQL, CLI)
|
|
421
|
+
- Testing important
|
|
422
|
+
- Technology flexibility needed
|
|
423
|
+
|
|
424
|
+
**Pros:**
|
|
425
|
+
- ✅ Testable business logic
|
|
426
|
+
- ✅ Technology independence
|
|
427
|
+
- ✅ Clear boundaries
|
|
428
|
+
- ✅ Maintainability
|
|
429
|
+
- ✅ Adapter swapping
|
|
430
|
+
|
|
431
|
+
**Cons:**
|
|
432
|
+
- ❌ More abstraction layers
|
|
433
|
+
- ❌ Initial complexity
|
|
434
|
+
- ❌ Boilerplate code
|
|
435
|
+
- ❌ Learning curve
|
|
436
|
+
|
|
437
|
+
**Example:**
|
|
438
|
+
```typescript
|
|
439
|
+
// Core domain (independent)
|
|
440
|
+
interface UserRepository {
|
|
441
|
+
save(user: User): Promise<void>;
|
|
442
|
+
findById(id: string): Promise<User>;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
class CreateUserUseCase {
|
|
446
|
+
constructor(private userRepo: UserRepository) {}
|
|
447
|
+
|
|
448
|
+
async execute(userData: CreateUserData) {
|
|
449
|
+
const user = User.create(userData);
|
|
450
|
+
await this.userRepo.save(user);
|
|
451
|
+
return user;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// Adapter: PostgreSQL implementation
|
|
456
|
+
class PostgresUserRepository implements UserRepository {
|
|
457
|
+
async save(user: User) {
|
|
458
|
+
await db.users.create({ data: user.toJSON() });
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
async findById(id: string) {
|
|
462
|
+
const data = await db.users.findUnique({ where: { id } });
|
|
463
|
+
return User.fromJSON(data);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
// Adapter: MongoDB implementation
|
|
468
|
+
class MongoUserRepository implements UserRepository {
|
|
469
|
+
async save(user: User) {
|
|
470
|
+
await mongodb.collection('users').insertOne(user.toJSON());
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
async findById(id: string) {
|
|
474
|
+
const data = await mongodb.collection('users').findOne({ _id: id });
|
|
475
|
+
return User.fromJSON(data);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// REST API adapter
|
|
480
|
+
app.post('/users', async (req, res) => {
|
|
481
|
+
const useCase = new CreateUserUseCase(
|
|
482
|
+
new PostgresUserRepository() // Swap easily
|
|
483
|
+
);
|
|
484
|
+
const user = await useCase.execute(req.body);
|
|
485
|
+
res.json(user);
|
|
486
|
+
});
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## Pattern Selection Guide
|
|
492
|
+
|
|
493
|
+
| Pattern | Team Size | Complexity | Ops Overhead | When to Use |
|
|
494
|
+
|---------|-----------|------------|--------------|-------------|
|
|
495
|
+
| Monolith | Small | Low | Low | MVP, small apps, simple domains |
|
|
496
|
+
| Microservices | Large | High | High | Complex domains, scale diversity |
|
|
497
|
+
| Serverless | Any | Medium | Very Low | Event-driven, variable load |
|
|
498
|
+
| Event-Driven | Medium+ | High | Medium | Async processing, loose coupling |
|
|
499
|
+
| CQRS | Medium+ | Very High | High | Complex reads, audit needs |
|
|
500
|
+
| Hexagonal | Any | Medium | Low | Testability, tech flexibility |
|
|
501
|
+
|
|
502
|
+
## Anti-Patterns
|
|
503
|
+
|
|
504
|
+
❌ **Microservices too early** - Start with monolith, extract services as needed
|
|
505
|
+
❌ **Distributed monolith** - Microservices with tight coupling (worst of both worlds)
|
|
506
|
+
❌ **Technology-driven** - Choosing pattern because it's trendy
|
|
507
|
+
❌ **Over-engineering** - CQRS+Event Sourcing for simple CRUD
|
|
508
|
+
❌ **Under-engineering** - Monolith when clear service boundaries exist
|
|
509
|
+
|
|
510
|
+
## Migration Strategies
|
|
511
|
+
|
|
512
|
+
### Monolith → Microservices
|
|
513
|
+
1. **Strangler Fig Pattern** - Gradually extract services
|
|
514
|
+
2. **Start with periphery** - Extract non-core services first
|
|
515
|
+
3. **Database per service** - Split databases gradually
|
|
516
|
+
4. **API gateway** - Unified entry point
|
|
517
|
+
|
|
518
|
+
### Synchronous → Event-Driven
|
|
519
|
+
1. **Dual write** - Write to DB and event store
|
|
520
|
+
2. **Change Data Capture** - CDC tools (Debezium)
|
|
521
|
+
3. **Gradual migration** - Migrate one flow at a time
|
|
522
|
+
|
|
523
|
+
---
|
|
524
|
+
|
|
525
|
+
**Related Resources:**
|
|
526
|
+
- system-design-principles.md - SOLID, 12-factor, CAP theorem
|
|
527
|
+
- reference-architectures.md - Real-world architecture examples
|
|
528
|
+
- migration-architecture.md - Migration patterns and strategies
|