blockmine 1.20.0 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/.claude/agents/README.md +469 -0
  2. package/.claude/agents/auth-route-debugger.md +118 -0
  3. package/.claude/agents/auth-route-tester.md +93 -0
  4. package/.claude/agents/auto-error-resolver.md +97 -0
  5. package/.claude/agents/build-optimizer.md +236 -0
  6. package/.claude/agents/code-architecture-reviewer.md +83 -0
  7. package/.claude/agents/code-refactor-master.md +94 -0
  8. package/.claude/agents/cost-optimizer.md +134 -0
  9. package/.claude/agents/deployment-orchestrator.md +113 -0
  10. package/.claude/agents/documentation-architect.md +82 -0
  11. package/.claude/agents/frontend-error-fixer.md +77 -0
  12. package/.claude/agents/iac-code-generator.md +71 -0
  13. package/.claude/agents/incident-responder.md +346 -0
  14. package/.claude/agents/infrastructure-architect.md +31 -0
  15. package/.claude/agents/kubernetes-specialist.md +56 -0
  16. package/.claude/agents/migration-planner.md +181 -0
  17. package/.claude/agents/network-architect.md +196 -0
  18. package/.claude/agents/plan-reviewer.md +52 -0
  19. package/.claude/agents/refactor-planner.md +63 -0
  20. package/.claude/agents/security-scanner.md +102 -0
  21. package/.claude/agents/web-research-specialist.md +78 -0
  22. package/.claude/commands/cost-analysis.md +315 -0
  23. package/.claude/commands/dev-docs-update.md +55 -0
  24. package/.claude/commands/dev-docs.md +51 -0
  25. package/.claude/commands/incident-debug.md +247 -0
  26. package/.claude/commands/infra-plan.md +81 -0
  27. package/.claude/commands/migration-plan.md +478 -0
  28. package/.claude/commands/route-research-for-testing.md +37 -0
  29. package/.claude/commands/security-review.md +66 -0
  30. package/.claude/hooks/CONFIG.md +448 -0
  31. package/.claude/hooks/README.md +163 -0
  32. package/.claude/hooks/SKILL_ACTIVATION_COMPLETE.md +226 -0
  33. package/.claude/hooks/WINDOWS_HOOKS_README.md +151 -0
  34. package/.claude/hooks/add-skill-activation-banners.ts +132 -0
  35. package/.claude/hooks/comprehensive-skill-test.ts +1315 -0
  36. package/.claude/hooks/error-handling-reminder.sh +12 -0
  37. package/.claude/hooks/error-handling-reminder.ts +222 -0
  38. package/.claude/hooks/k8s-manifest-validator.sh +56 -0
  39. package/.claude/hooks/package-lock.json +556 -0
  40. package/.claude/hooks/package.json +16 -0
  41. package/.claude/hooks/post-tool-use-tracker.ps1 +174 -0
  42. package/.claude/hooks/post-tool-use-tracker.sh +183 -0
  43. package/.claude/hooks/security-policy-check.sh +247 -0
  44. package/.claude/hooks/skill-activation-prompt.ps1 +10 -0
  45. package/.claude/hooks/skill-activation-prompt.sh +10 -0
  46. package/.claude/hooks/skill-activation-prompt.ts +141 -0
  47. package/.claude/hooks/stop-build-check-enhanced.sh +130 -0
  48. package/.claude/hooks/terraform-validator.sh +53 -0
  49. package/.claude/hooks/test-input.json +7 -0
  50. package/.claude/hooks/test-skill-activation.ts +427 -0
  51. package/.claude/hooks/trigger-build-resolver.sh +79 -0
  52. package/.claude/hooks/tsc-check.sh +173 -0
  53. package/.claude/hooks/tsconfig.json +19 -0
  54. package/.claude/settings.json +55 -0
  55. package/.claude/settings.local.json +28 -3
  56. package/.claude/skills/README.md +507 -0
  57. package/.claude/skills/api-engineering/SKILL.md +63 -0
  58. package/.claude/skills/api-engineering/resources/api-versioning.md +88 -0
  59. package/.claude/skills/api-engineering/resources/graphql-patterns.md +106 -0
  60. package/.claude/skills/api-engineering/resources/rate-limiting.md +118 -0
  61. package/.claude/skills/api-engineering/resources/rest-api-design.md +105 -0
  62. package/.claude/skills/backend-dev-guidelines/SKILL.md +306 -0
  63. package/.claude/skills/backend-dev-guidelines/resources/architecture-overview.md +451 -0
  64. package/.claude/skills/backend-dev-guidelines/resources/async-and-errors.md +307 -0
  65. package/.claude/skills/backend-dev-guidelines/resources/complete-examples.md +638 -0
  66. package/.claude/skills/backend-dev-guidelines/resources/configuration.md +275 -0
  67. package/.claude/skills/backend-dev-guidelines/resources/database-patterns.md +224 -0
  68. package/.claude/skills/backend-dev-guidelines/resources/middleware-guide.md +213 -0
  69. package/.claude/skills/backend-dev-guidelines/resources/routing-and-controllers.md +756 -0
  70. package/.claude/skills/backend-dev-guidelines/resources/sentry-and-monitoring.md +336 -0
  71. package/.claude/skills/backend-dev-guidelines/resources/services-and-repositories.md +789 -0
  72. package/.claude/skills/backend-dev-guidelines/resources/testing-guide.md +235 -0
  73. package/.claude/skills/backend-dev-guidelines/resources/validation-patterns.md +754 -0
  74. package/.claude/skills/budget-and-cost-management/SKILL.md +850 -0
  75. package/.claude/skills/build-engineering/SKILL.md +431 -0
  76. package/.claude/skills/build-engineering/resources/artifact-repositories.md +72 -0
  77. package/.claude/skills/build-engineering/resources/build-caching.md +96 -0
  78. package/.claude/skills/build-engineering/resources/build-pipelines.md +105 -0
  79. package/.claude/skills/build-engineering/resources/build-security.md +95 -0
  80. package/.claude/skills/build-engineering/resources/build-systems.md +389 -0
  81. package/.claude/skills/build-engineering/resources/compilation-optimization.md +201 -0
  82. package/.claude/skills/build-engineering/resources/dependency-management.md +73 -0
  83. package/.claude/skills/build-engineering/resources/monorepo-builds.md +110 -0
  84. package/.claude/skills/build-engineering/resources/performance-optimization.md +113 -0
  85. package/.claude/skills/build-engineering/resources/reproducible-builds.md +82 -0
  86. package/.claude/skills/cloud-engineering/SKILL.md +675 -0
  87. package/.claude/skills/cloud-engineering/resources/aws-patterns.md +742 -0
  88. package/.claude/skills/cloud-engineering/resources/azure-patterns.md +714 -0
  89. package/.claude/skills/cloud-engineering/resources/cleared-cloud-environments.md +987 -0
  90. package/.claude/skills/cloud-engineering/resources/cloud-cost-optimization.md +757 -0
  91. package/.claude/skills/cloud-engineering/resources/cloud-networking.md +1058 -0
  92. package/.claude/skills/cloud-engineering/resources/cloud-security-tools.md +1530 -0
  93. package/.claude/skills/cloud-engineering/resources/cloud-security.md +990 -0
  94. package/.claude/skills/cloud-engineering/resources/gcp-patterns.md +758 -0
  95. package/.claude/skills/cloud-engineering/resources/migration-strategies.md +820 -0
  96. package/.claude/skills/cloud-engineering/resources/multi-cloud-strategies.md +670 -0
  97. package/.claude/skills/cloud-engineering/resources/oci-patterns.md +1198 -0
  98. package/.claude/skills/cloud-engineering/resources/serverless-patterns.md +795 -0
  99. package/.claude/skills/cloud-engineering/resources/well-architected-frameworks.md +966 -0
  100. package/.claude/skills/cybersecurity/SKILL.md +409 -0
  101. package/.claude/skills/cybersecurity/resources/security-architecture.md +266 -0
  102. package/.claude/skills/database-engineering/SKILL.md +61 -0
  103. package/.claude/skills/database-engineering/resources/backup-and-recovery.md +72 -0
  104. package/.claude/skills/database-engineering/resources/database-replication.md +63 -0
  105. package/.claude/skills/database-engineering/resources/postgresql-fundamentals.md +70 -0
  106. package/.claude/skills/database-engineering/resources/query-optimization.md +68 -0
  107. package/.claude/skills/devsecops/SKILL.md +374 -0
  108. package/.claude/skills/devsecops/resources/ci-cd-security.md +204 -0
  109. package/.claude/skills/devsecops/resources/compliance-automation.md +530 -0
  110. package/.claude/skills/devsecops/resources/compliance-frameworks.md +2322 -0
  111. package/.claude/skills/devsecops/resources/container-security.md +915 -0
  112. package/.claude/skills/devsecops/resources/cspm-integration.md +1440 -0
  113. package/.claude/skills/devsecops/resources/policy-enforcement.md +619 -0
  114. package/.claude/skills/devsecops/resources/secrets-management.md +755 -0
  115. package/.claude/skills/devsecops/resources/security-monitoring.md +146 -0
  116. package/.claude/skills/devsecops/resources/security-scanning.md +887 -0
  117. package/.claude/skills/devsecops/resources/security-testing.md +203 -0
  118. package/.claude/skills/devsecops/resources/supply-chain-security.md +518 -0
  119. package/.claude/skills/devsecops/resources/vulnerability-management.md +481 -0
  120. package/.claude/skills/devsecops/resources/zero-trust-architecture.md +177 -0
  121. package/.claude/skills/documentation-as-code/SKILL.md +323 -0
  122. package/.claude/skills/documentation-as-code/resources/api-documentation.md +90 -0
  123. package/.claude/skills/documentation-as-code/resources/changelog-management.md +79 -0
  124. package/.claude/skills/documentation-as-code/resources/diagram-generation.md +44 -0
  125. package/.claude/skills/documentation-as-code/resources/docs-as-code-workflow.md +99 -0
  126. package/.claude/skills/documentation-as-code/resources/documentation-automation.md +68 -0
  127. package/.claude/skills/documentation-as-code/resources/documentation-sites.md +79 -0
  128. package/.claude/skills/documentation-as-code/resources/markdown-best-practices.md +162 -0
  129. package/.claude/skills/documentation-as-code/resources/openapi-specification.md +77 -0
  130. package/.claude/skills/documentation-as-code/resources/readme-engineering.md +60 -0
  131. package/.claude/skills/documentation-as-code/resources/technical-writing-guide.md +202 -0
  132. package/.claude/skills/engineering-management/SKILL.md +356 -0
  133. package/.claude/skills/engineering-management/resources/career-ladders.md +609 -0
  134. package/.claude/skills/engineering-management/resources/hiring-and-assessment.md +555 -0
  135. package/.claude/skills/engineering-management/resources/one-on-one-guides.md +609 -0
  136. package/.claude/skills/engineering-management/resources/resource-planning.md +557 -0
  137. package/.claude/skills/engineering-management/resources/team-organization-patterns.md +491 -0
  138. package/.claude/skills/engineering-management/resources/technical-interviews.md +474 -0
  139. package/.claude/skills/engineering-operations-management/SKILL.md +817 -0
  140. package/.claude/skills/error-tracking/SKILL.md +379 -0
  141. package/.claude/skills/frontend-dev-guidelines/SKILL.md +403 -0
  142. package/.claude/skills/frontend-dev-guidelines/resources/common-patterns.md +331 -0
  143. package/.claude/skills/frontend-dev-guidelines/resources/complete-examples.md +872 -0
  144. package/.claude/skills/frontend-dev-guidelines/resources/component-patterns.md +502 -0
  145. package/.claude/skills/frontend-dev-guidelines/resources/data-fetching.md +767 -0
  146. package/.claude/skills/frontend-dev-guidelines/resources/file-organization.md +502 -0
  147. package/.claude/skills/frontend-dev-guidelines/resources/loading-and-error-states.md +501 -0
  148. package/.claude/skills/frontend-dev-guidelines/resources/performance.md +406 -0
  149. package/.claude/skills/frontend-dev-guidelines/resources/routing-guide.md +364 -0
  150. package/.claude/skills/frontend-dev-guidelines/resources/styling-guide.md +428 -0
  151. package/.claude/skills/frontend-dev-guidelines/resources/typescript-standards.md +418 -0
  152. package/.claude/skills/general-it-engineering/SKILL.md +393 -0
  153. package/.claude/skills/general-it-engineering/resources/asset-management.md +712 -0
  154. package/.claude/skills/general-it-engineering/resources/automation-orchestration.md +817 -0
  155. package/.claude/skills/general-it-engineering/resources/business-continuity.md +786 -0
  156. package/.claude/skills/general-it-engineering/resources/change-management.md +715 -0
  157. package/.claude/skills/general-it-engineering/resources/enterprise-monitoring.md +729 -0
  158. package/.claude/skills/general-it-engineering/resources/help-desk-operations.md +738 -0
  159. package/.claude/skills/general-it-engineering/resources/incident-service-management.md +834 -0
  160. package/.claude/skills/general-it-engineering/resources/it-governance.md +753 -0
  161. package/.claude/skills/general-it-engineering/resources/itil-framework.md +503 -0
  162. package/.claude/skills/general-it-engineering/resources/service-management.md +669 -0
  163. package/.claude/skills/infrastructure-architecture/SKILL.md +328 -0
  164. package/.claude/skills/infrastructure-architecture/resources/architecture-decision-records.md +505 -0
  165. package/.claude/skills/infrastructure-architecture/resources/architecture-patterns.md +528 -0
  166. package/.claude/skills/infrastructure-architecture/resources/capacity-planning.md +453 -0
  167. package/.claude/skills/infrastructure-architecture/resources/cleared-environment-architecture.md +773 -0
  168. package/.claude/skills/infrastructure-architecture/resources/cost-architecture.md +499 -0
  169. package/.claude/skills/infrastructure-architecture/resources/data-architecture.md +501 -0
  170. package/.claude/skills/infrastructure-architecture/resources/disaster-recovery.md +535 -0
  171. package/.claude/skills/infrastructure-architecture/resources/migration-architecture.md +512 -0
  172. package/.claude/skills/infrastructure-architecture/resources/multi-region-design.md +608 -0
  173. package/.claude/skills/infrastructure-architecture/resources/reference-architectures.md +562 -0
  174. package/.claude/skills/infrastructure-architecture/resources/security-architecture.md +538 -0
  175. package/.claude/skills/infrastructure-architecture/resources/system-design-principles.md +489 -0
  176. package/.claude/skills/infrastructure-architecture/resources/workload-classification.md +1000 -0
  177. package/.claude/skills/infrastructure-strategy/SKILL.md +924 -0
  178. package/.claude/skills/network-engineering/SKILL.md +385 -0
  179. package/.claude/skills/network-engineering/resources/dns-management.md +738 -0
  180. package/.claude/skills/network-engineering/resources/load-balancing.md +820 -0
  181. package/.claude/skills/network-engineering/resources/network-architecture.md +546 -0
  182. package/.claude/skills/network-engineering/resources/network-security.md +921 -0
  183. package/.claude/skills/network-engineering/resources/network-troubleshooting.md +749 -0
  184. package/.claude/skills/network-engineering/resources/routing-switching.md +373 -0
  185. package/.claude/skills/network-engineering/resources/sdn-networking.md +695 -0
  186. package/.claude/skills/network-engineering/resources/service-mesh-networking.md +777 -0
  187. package/.claude/skills/network-engineering/resources/tcp-ip-protocols.md +444 -0
  188. package/.claude/skills/network-engineering/resources/vpn-connectivity.md +672 -0
  189. package/.claude/skills/observability-engineering/SKILL.md +101 -0
  190. package/.claude/skills/observability-engineering/resources/apm-tools.md +97 -0
  191. package/.claude/skills/observability-engineering/resources/correlation-strategies.md +87 -0
  192. package/.claude/skills/observability-engineering/resources/distributed-tracing.md +98 -0
  193. package/.claude/skills/observability-engineering/resources/logs-aggregation.md +118 -0
  194. package/.claude/skills/observability-engineering/resources/observability-cost-optimization.md +141 -0
  195. package/.claude/skills/observability-engineering/resources/opentelemetry.md +110 -0
  196. package/.claude/skills/platform-engineering/SKILL.md +555 -0
  197. package/.claude/skills/platform-engineering/resources/architecture-overview.md +600 -0
  198. package/.claude/skills/platform-engineering/resources/container-orchestration.md +916 -0
  199. package/.claude/skills/platform-engineering/resources/cost-optimization.md +634 -0
  200. package/.claude/skills/platform-engineering/resources/developer-platforms.md +670 -0
  201. package/.claude/skills/platform-engineering/resources/gitops-automation.md +650 -0
  202. package/.claude/skills/platform-engineering/resources/infrastructure-as-code.md +778 -0
  203. package/.claude/skills/platform-engineering/resources/infrastructure-standards.md +708 -0
  204. package/.claude/skills/platform-engineering/resources/multi-tenancy.md +602 -0
  205. package/.claude/skills/platform-engineering/resources/platform-security.md +711 -0
  206. package/.claude/skills/platform-engineering/resources/resource-management.md +592 -0
  207. package/.claude/skills/platform-engineering/resources/service-mesh.md +628 -0
  208. package/.claude/skills/release-engineering/SKILL.md +393 -0
  209. package/.claude/skills/release-engineering/resources/artifact-management.md +108 -0
  210. package/.claude/skills/release-engineering/resources/build-optimization.md +84 -0
  211. package/.claude/skills/release-engineering/resources/ci-cd-pipelines.md +411 -0
  212. package/.claude/skills/release-engineering/resources/deployment-strategies.md +197 -0
  213. package/.claude/skills/release-engineering/resources/pipeline-security.md +62 -0
  214. package/.claude/skills/release-engineering/resources/progressive-delivery.md +83 -0
  215. package/.claude/skills/release-engineering/resources/release-automation.md +68 -0
  216. package/.claude/skills/release-engineering/resources/release-orchestration.md +77 -0
  217. package/.claude/skills/release-engineering/resources/rollback-strategies.md +66 -0
  218. package/.claude/skills/release-engineering/resources/versioning-strategies.md +59 -0
  219. package/.claude/skills/route-tester/SKILL.md +392 -0
  220. package/.claude/skills/skill-developer/ADVANCED.md +197 -0
  221. package/.claude/skills/skill-developer/HOOK_MECHANISMS.md +306 -0
  222. package/.claude/skills/skill-developer/PATTERNS_LIBRARY.md +152 -0
  223. package/.claude/skills/skill-developer/SKILL.md +430 -0
  224. package/.claude/skills/skill-developer/SKILL_RULES_REFERENCE.md +315 -0
  225. package/.claude/skills/skill-developer/TRIGGER_TYPES.md +305 -0
  226. package/.claude/skills/skill-developer/TROUBLESHOOTING.md +514 -0
  227. package/.claude/skills/skill-rules.json +2940 -0
  228. package/.claude/skills/sre/SKILL.md +464 -0
  229. package/.claude/skills/sre/resources/alerting-best-practices.md +282 -0
  230. package/.claude/skills/sre/resources/capacity-planning.md +226 -0
  231. package/.claude/skills/sre/resources/chaos-engineering.md +193 -0
  232. package/.claude/skills/sre/resources/disaster-recovery.md +232 -0
  233. package/.claude/skills/sre/resources/incident-management.md +436 -0
  234. package/.claude/skills/sre/resources/observability-stack.md +240 -0
  235. package/.claude/skills/sre/resources/on-call-runbooks.md +167 -0
  236. package/.claude/skills/sre/resources/performance-optimization.md +108 -0
  237. package/.claude/skills/sre/resources/reliability-patterns.md +183 -0
  238. package/.claude/skills/sre/resources/slo-sli-sla.md +464 -0
  239. package/.claude/skills/sre/resources/toil-reduction.md +145 -0
  240. package/.claude/skills/systems-engineering/SKILL.md +648 -0
  241. package/.claude/skills/systems-engineering/resources/automation-patterns.md +771 -0
  242. package/.claude/skills/systems-engineering/resources/configuration-management.md +998 -0
  243. package/.claude/skills/systems-engineering/resources/linux-administration.md +672 -0
  244. package/.claude/skills/systems-engineering/resources/networking-fundamentals.md +982 -0
  245. package/.claude/skills/systems-engineering/resources/performance-tuning.md +871 -0
  246. package/.claude/skills/systems-engineering/resources/powershell-scripting.md +482 -0
  247. package/.claude/skills/systems-engineering/resources/security-hardening.md +739 -0
  248. package/.claude/skills/systems-engineering/resources/shell-scripting.md +915 -0
  249. package/.claude/skills/systems-engineering/resources/storage-management.md +628 -0
  250. package/.claude/skills/systems-engineering/resources/system-monitoring.md +787 -0
  251. package/.claude/skills/systems-engineering/resources/troubleshooting-guide.md +753 -0
  252. package/.claude/skills/systems-engineering/resources/windows-administration.md +738 -0
  253. package/.claude/skills/technical-leadership/SKILL.md +728 -0
  254. package/CHANGELOG.md +90 -39
  255. package/README.md +94 -0
  256. package/backend/docs/SECRETS_DOCUMENTATION.md +327 -0
  257. package/backend/jest.config.js +59 -0
  258. package/backend/package-lock.json +6129 -0
  259. package/backend/package.json +16 -4
  260. package/backend/prisma/migrations/20251026104609_add_websocket_api/migration.sql +33 -0
  261. package/backend/prisma/schema.prisma +33 -0
  262. package/backend/src/__tests__/core/DependencyService.test.js +336 -0
  263. package/backend/src/__tests__/core/UserService.test.js +875 -0
  264. package/backend/src/__tests__/repositories/BaseRepository.test.js +146 -0
  265. package/backend/src/__tests__/repositories/BotRepository.test.js +118 -0
  266. package/backend/src/__tests__/repositories/CommandRepository.test.js +132 -0
  267. package/backend/src/__tests__/repositories/EventGraphRepository.test.js +93 -0
  268. package/backend/src/__tests__/repositories/GroupRepository.test.js +155 -0
  269. package/backend/src/__tests__/repositories/PermissionRepository.test.js +130 -0
  270. package/backend/src/__tests__/repositories/PluginRepository.test.js +107 -0
  271. package/backend/src/__tests__/repositories/ServerRepository.test.js +80 -0
  272. package/backend/src/__tests__/repositories/UserRepository.test.js +128 -0
  273. package/backend/src/__tests__/secretsFilter.test.js +425 -0
  274. package/backend/src/__tests__/services/BotLifecycleService.test.js +411 -0
  275. package/backend/src/__tests__/services/BotProcessManager.test.js +285 -0
  276. package/backend/src/__tests__/services/CacheManager.test.js +125 -0
  277. package/backend/src/__tests__/services/CommandExecutionService.test.js +460 -0
  278. package/backend/src/__tests__/services/ResourceMonitorService.test.js +207 -0
  279. package/backend/src/__tests__/services/TelemetryService.test.js +291 -0
  280. package/backend/src/__tests__/setup.js +25 -0
  281. package/backend/src/api/routes/apiKeys.js +181 -0
  282. package/backend/src/api/routes/bots.js +49 -7
  283. package/backend/src/api/routes/plugins.js +2 -1
  284. package/backend/src/api/routes/system.js +174 -0
  285. package/backend/src/container.js +82 -0
  286. package/backend/src/core/BotManager.js +142 -871
  287. package/backend/src/core/BotManager.old.js +1093 -0
  288. package/backend/src/core/BotProcess.js +1092 -850
  289. package/backend/src/core/BreakLoopSignal.js +8 -0
  290. package/backend/src/core/EventGraphManager.js +280 -193
  291. package/backend/src/core/GraphExecutionEngine.js +321 -928
  292. package/backend/src/core/MessageQueue.js +27 -6
  293. package/backend/src/core/NodeRegistry.js +37 -991
  294. package/backend/src/core/PluginManager.js +62 -12
  295. package/backend/src/core/PrismaService.js +32 -0
  296. package/backend/src/core/UserService.js +3 -3
  297. package/backend/src/core/__tests__/PrismaService.test.js +24 -0
  298. package/backend/src/core/commands/README.md +305 -0
  299. package/backend/src/core/commands/dev.js +13 -7
  300. package/backend/src/core/commands/ping.js +10 -4
  301. package/backend/src/core/commands/whois.js +63 -0
  302. package/backend/src/core/config/validation.js +27 -0
  303. package/backend/src/core/constants/graphTypes.js +21 -0
  304. package/backend/src/core/node-registries/actions.js +132 -0
  305. package/backend/src/core/node-registries/arrays.js +137 -0
  306. package/backend/src/core/node-registries/bot.js +23 -0
  307. package/backend/src/core/node-registries/data.js +290 -0
  308. package/backend/src/core/node-registries/debug.js +26 -0
  309. package/backend/src/core/node-registries/events.js +187 -0
  310. package/backend/src/core/node-registries/flow.js +139 -0
  311. package/backend/src/core/node-registries/logic.js +45 -0
  312. package/backend/src/core/node-registries/math.js +42 -0
  313. package/backend/src/core/node-registries/objects.js +98 -0
  314. package/backend/src/core/node-registries/strings.js +153 -0
  315. package/backend/src/core/node-registries/time.js +113 -0
  316. package/backend/src/core/node-registries/users.js +79 -0
  317. package/backend/src/core/nodes/actions/bot_look_at.js +36 -0
  318. package/backend/src/core/nodes/actions/bot_set_variable.js +32 -0
  319. package/backend/src/core/nodes/actions/http_request.js +98 -0
  320. package/backend/src/core/nodes/actions/send_log.js +28 -0
  321. package/backend/src/core/nodes/actions/send_message.js +32 -0
  322. package/backend/src/core/nodes/actions/send_websocket_response.js +33 -0
  323. package/backend/src/core/nodes/arrays/add_element.js +23 -0
  324. package/backend/src/core/nodes/arrays/contains.js +40 -0
  325. package/backend/src/core/nodes/arrays/find_index.js +23 -0
  326. package/backend/src/core/nodes/arrays/get_by_index.js +23 -0
  327. package/backend/src/core/nodes/arrays/get_next.js +35 -0
  328. package/backend/src/core/nodes/arrays/get_random_element.js +32 -0
  329. package/backend/src/core/nodes/arrays/remove_by_index.js +30 -0
  330. package/backend/src/core/nodes/bot/get_position.js +20 -0
  331. package/backend/src/core/nodes/data/array_literal.js +31 -0
  332. package/backend/src/core/nodes/data/boolean_literal.js +21 -0
  333. package/backend/src/core/nodes/data/cast.js +42 -0
  334. package/backend/src/core/nodes/data/datetime_literal.js +27 -0
  335. package/backend/src/core/nodes/data/entity_info.js +69 -0
  336. package/backend/src/core/nodes/data/get_argument.js +23 -0
  337. package/backend/src/core/nodes/data/get_bot_look.js +14 -0
  338. package/backend/src/core/nodes/data/get_entity_field.js +18 -0
  339. package/backend/src/core/nodes/data/get_nearby_entities.js +32 -0
  340. package/backend/src/core/nodes/data/get_nearby_players.js +64 -0
  341. package/backend/src/core/nodes/data/get_server_players.js +18 -0
  342. package/backend/src/core/nodes/data/get_user_field.js +40 -0
  343. package/backend/src/core/nodes/data/get_variable.js +23 -0
  344. package/backend/src/core/nodes/data/length.js +25 -0
  345. package/backend/src/core/nodes/data/make_object.js +31 -0
  346. package/backend/src/core/nodes/data/number_literal.js +21 -0
  347. package/backend/src/core/nodes/data/string_literal.js +34 -0
  348. package/backend/src/core/nodes/data/type_check.js +53 -0
  349. package/backend/src/core/nodes/debug/log.js +16 -0
  350. package/backend/src/core/nodes/flow/branch.js +15 -0
  351. package/backend/src/core/nodes/flow/break.js +14 -0
  352. package/backend/src/core/nodes/flow/delay.js +43 -0
  353. package/backend/src/core/nodes/flow/for_each.js +39 -0
  354. package/backend/src/core/nodes/flow/sequence.js +16 -0
  355. package/backend/src/core/nodes/flow/switch.js +47 -0
  356. package/backend/src/core/nodes/flow/while.js +64 -0
  357. package/backend/src/core/nodes/logic/__tests__/compare.test.js +83 -0
  358. package/backend/src/core/nodes/logic/compare.js +33 -0
  359. package/backend/src/core/nodes/logic/operation.js +35 -0
  360. package/backend/src/core/nodes/math/__tests__/operation.test.js +65 -0
  361. package/backend/src/core/nodes/math/operation.js +31 -0
  362. package/backend/src/core/nodes/math/random_number.js +43 -0
  363. package/backend/src/core/nodes/objects/create.js +40 -0
  364. package/backend/src/core/nodes/objects/delete.js +26 -0
  365. package/backend/src/core/nodes/objects/get.js +23 -0
  366. package/backend/src/core/nodes/objects/has_key.js +30 -0
  367. package/backend/src/core/nodes/objects/set.js +27 -0
  368. package/backend/src/core/nodes/strings/__tests__/concat.test.js +89 -0
  369. package/backend/src/core/nodes/strings/concat.js +27 -0
  370. package/backend/src/core/nodes/strings/contains.js +41 -0
  371. package/backend/src/core/nodes/strings/ends_with.js +43 -0
  372. package/backend/src/core/nodes/strings/equals.js +36 -0
  373. package/backend/src/core/nodes/strings/length.js +36 -0
  374. package/backend/src/core/nodes/strings/matches.js +39 -0
  375. package/backend/src/core/nodes/strings/split.js +37 -0
  376. package/backend/src/core/nodes/strings/starts_with.js +43 -0
  377. package/backend/src/core/nodes/time/__tests__/now.test.js +24 -0
  378. package/backend/src/core/nodes/time/add.js +33 -0
  379. package/backend/src/core/nodes/time/compare.js +35 -0
  380. package/backend/src/core/nodes/time/diff.js +29 -0
  381. package/backend/src/core/nodes/time/format.js +32 -0
  382. package/backend/src/core/nodes/time/now.js +18 -0
  383. package/backend/src/core/nodes/users/check_blacklist.js +37 -0
  384. package/backend/src/core/nodes/users/get_groups.js +36 -0
  385. package/backend/src/core/nodes/users/get_permissions.js +36 -0
  386. package/backend/src/core/nodes/users/set_blacklist.js +37 -0
  387. package/backend/src/core/services/BotLifecycleService.js +596 -0
  388. package/backend/src/core/services/BotProcessManager.js +163 -0
  389. package/backend/src/core/services/CacheManager.js +111 -0
  390. package/backend/src/core/services/CommandExecutionService.js +351 -0
  391. package/backend/src/core/services/ResourceMonitorService.js +90 -0
  392. package/backend/src/core/services/TelemetryService.js +124 -0
  393. package/backend/src/core/services/ValidationService.js +132 -0
  394. package/backend/src/core/services/__tests__/ValidationService.test.js +148 -0
  395. package/backend/src/core/services.js +20 -5
  396. package/backend/src/core/system/CommandContext.js +84 -0
  397. package/backend/src/core/system/Transport.js +78 -0
  398. package/backend/src/core/utils/__tests__/jsonParser.test.js +44 -0
  399. package/backend/src/core/utils/jsonParser.js +18 -0
  400. package/backend/src/core/utils/secretsFilter.js +262 -0
  401. package/backend/src/core/utils/variableParser.js +89 -0
  402. package/backend/src/core/validation/__tests__/nodeSchemas.test.js +175 -0
  403. package/backend/src/core/validation/nodeSchemas.js +112 -0
  404. package/backend/src/lib/prisma.js +2 -4
  405. package/backend/src/real-time/botApi/handlers/commandHandlers.js +28 -0
  406. package/backend/src/real-time/botApi/handlers/graphHandlers.js +99 -0
  407. package/backend/src/real-time/botApi/handlers/graphWebSocketHandlers.js +147 -0
  408. package/backend/src/real-time/botApi/handlers/index.js +43 -0
  409. package/backend/src/real-time/botApi/handlers/messageHandlers.js +66 -0
  410. package/backend/src/real-time/botApi/handlers/statusHandlers.js +17 -0
  411. package/backend/src/real-time/botApi/handlers/userHandlers.js +141 -0
  412. package/backend/src/real-time/botApi/index.js +40 -0
  413. package/backend/src/real-time/botApi/middleware.js +79 -0
  414. package/backend/src/real-time/botApi/utils.js +54 -0
  415. package/backend/src/real-time/socketHandler.js +6 -2
  416. package/backend/src/repositories/BaseRepository.js +43 -0
  417. package/backend/src/repositories/BotRepository.js +42 -0
  418. package/backend/src/repositories/CommandRepository.js +53 -0
  419. package/backend/src/repositories/EventGraphRepository.js +40 -0
  420. package/backend/src/repositories/GroupRepository.js +69 -0
  421. package/backend/src/repositories/PermissionRepository.js +48 -0
  422. package/backend/src/repositories/PluginRepository.js +42 -0
  423. package/backend/src/repositories/ServerRepository.js +27 -0
  424. package/backend/src/repositories/UserRepository.js +48 -0
  425. package/backend/src/server.js +3 -0
  426. package/backend/src/test-refactor.js +85 -0
  427. package/frontend/dist/assets/index-CfTo92bP.css +1 -0
  428. package/frontend/dist/assets/index-CiFD5X9Z.js +8344 -0
  429. package/frontend/dist/index.html +2 -2
  430. package/frontend/package.json +1 -5
  431. package/package.json +2 -1
  432. package/frontend/dist/assets/index-BFd7YoAj.css +0 -1
  433. package/frontend/dist/assets/index-CMMutadc.js +0 -8352
  434. package/nul +0 -0
@@ -0,0 +1,608 @@
1
+ # Multi-Region Design
2
+
3
+ Comprehensive guide to designing multi-region architectures for high availability, disaster recovery, and global performance.
4
+
5
+ ## Why Multi-Region?
6
+
7
+ **Primary Drivers:**
8
+ 1. **High Availability** - Survive regional outages
9
+ 2. **Disaster Recovery** - RTO/RPO requirements
10
+ 3. **Global Performance** - Reduce latency for users worldwide
11
+ 4. **Compliance** - Data residency requirements
12
+ 5. **Business Continuity** - Critical applications
13
+
14
+ ## Architecture Patterns
15
+
16
+ ### 1. Active-Passive (Warm Standby)
17
+
18
+ **Description:**
19
+ Primary region handles all traffic. Secondary region on standby with replicated data.
20
+
21
+ **Diagram:**
22
+ ```
23
+ ┌─────────────────────┐ ┌─────────────────────┐
24
+ │ Region A (Primary)│ │ Region B (Secondary)│
25
+ │ │ │ │
26
+ │ ┌─────────────┐ │ │ ┌─────────────┐ │
27
+ │ │ Application │◄──┼────────┼──►│ Application │ │
28
+ │ │ (Active) │ │ Data │ │ (Standby) │ │
29
+ │ └──────┬──────┘ │ Repl │ └─────────────┘ │
30
+ │ │ │ │ │
31
+ │ ┌──────▼──────┐ │ │ ┌─────────────┐ │
32
+ │ │ Database │───┼────────┼──►│ Database │ │
33
+ │ │ (Primary) │ │ Async │ │ (Replica) │ │
34
+ │ └─────────────┘ │ │ └─────────────┘ │
35
+ └─────────────────────┘ └─────────────────────┘
36
+ 100% 0%
37
+ Traffic Traffic
38
+ ```
39
+
40
+ **When to Use:**
41
+ - RTO: 5-30 minutes acceptable
42
+ - Cost optimization (secondary idle)
43
+ - Simple failover needed
44
+
45
+ **Implementation:**
46
+ ```yaml
47
+ # Route 53 health check and failover
48
+ resource "aws_route53_health_check" "primary" {
49
+ fqdn = "api.primary-region.example.com"
50
+ port = 443
51
+ type = "HTTPS"
52
+ resource_path = "/health"
53
+ failure_threshold = 3
54
+ request_interval = 30
55
+ }
56
+
57
+ resource "aws_route53_record" "api" {
58
+ zone_id = aws_route53_zone.main.zone_id
59
+ name = "api.example.com"
60
+ type = "A"
61
+
62
+ # Primary region (active)
63
+ set_identifier = "primary"
64
+ failover_routing_policy {
65
+ type = "PRIMARY"
66
+ }
67
+ health_check_id = aws_route53_health_check.primary.id
68
+ alias {
69
+ name = aws_lb.primary.dns_name
70
+ zone_id = aws_lb.primary.zone_id
71
+ evaluate_target_health = true
72
+ }
73
+ }
74
+
75
+ resource "aws_route53_record" "api_failover" {
76
+ zone_id = aws_route53_zone.main.zone_id
77
+ name = "api.example.com"
78
+ type = "A"
79
+
80
+ # Secondary region (standby)
81
+ set_identifier = "secondary"
82
+ failover_routing_policy {
83
+ type = "SECONDARY"
84
+ }
85
+ alias {
86
+ name = aws_lb.secondary.dns_name
87
+ zone_id = aws_lb.secondary.zone_id
88
+ evaluate_target_health = true
89
+ }
90
+ }
91
+ ```
92
+
93
+ **Pros:**
94
+ - ✅ Lower cost (secondary mostly idle)
95
+ - ✅ Simple to implement
96
+ - ✅ Data always available in secondary
97
+
98
+ **Cons:**
99
+ - ❌ Slower failover (5-30 minutes)
100
+ - ❌ Wasted capacity in secondary
101
+ - ❌ Manual failover often required
102
+
103
+ **Cost Estimate:**
104
+ - Primary: 100% of single-region cost
105
+ - Secondary: 30-50% (data replication + standby compute)
106
+ - **Total: ~130-150% of single-region**
107
+
108
+ ---
109
+
110
+ ### 2. Active-Active (Hot-Hot)
111
+
112
+ **Description:**
113
+ Multiple regions actively handle traffic simultaneously.
114
+
115
+ **Diagram:**
116
+ ```
117
+ ┌─────────────────┐
118
+ │ Global Load │
119
+ │ Balancer │
120
+ │ (Route 53) │
121
+ └────────┬────────┘
122
+
123
+ ┏━━━━━━━━━━┻━━━━━━━━━━┓
124
+ ┃ ┃
125
+ ┌───────▼────────┐ ┌───────▼────────┐
126
+ │ Region A │ │ Region B │
127
+ │ ┌──────────┐ │ │ ┌──────────┐ │
128
+ │ │Application│ │ │ │Application│ │
129
+ │ │ (Active) │ │ │ │ (Active) │ │
130
+ │ └─────┬────┘ │ │ └─────┬────┘ │
131
+ │ ┌─────▼────┐ │ │ ┌─────▼────┐ │
132
+ │ │Database │◄─┼────┼─►│Database │ │
133
+ │ │(Primary) │ │ Bi │ │(Primary) │ │
134
+ │ └──────────┘ │ Dir│ └──────────┘ │
135
+ └────────────────┘ Sync└────────────────┘
136
+ 50% 50%
137
+ Traffic Traffic
138
+ ```
139
+
140
+ **When to Use:**
141
+ - RTO: < 5 minutes required
142
+ - Global user base
143
+ - High availability critical
144
+ - Cost less of a concern
145
+
146
+ **Implementation:**
147
+ ```typescript
148
+ // DynamoDB global tables (active-active)
149
+ resource "aws_dynamodb_table" "users" {
150
+ name = "users"
151
+ billing_mode = "PAY_PER_REQUEST"
152
+ hash_key = "userId"
153
+
154
+ attribute {
155
+ name = "userId"
156
+ type = "S"
157
+ }
158
+
159
+ # Enable global tables
160
+ replica {
161
+ region_name = "us-east-1"
162
+ }
163
+
164
+ replica {
165
+ region_name = "eu-west-1"
166
+ }
167
+
168
+ replica {
169
+ region_name = "ap-southeast-1"
170
+ }
171
+
172
+ # Conflict resolution: last-writer-wins
173
+ stream_enabled = true
174
+ stream_view_type = "NEW_AND_OLD_IMAGES"
175
+ }
176
+
177
+ // Route 53 latency-based routing
178
+ resource "aws_route53_record" "api_us" {
179
+ zone_id = aws_route53_zone.main.zone_id
180
+ name = "api.example.com"
181
+ type = "A"
182
+
183
+ set_identifier = "us-east-1"
184
+ latency_routing_policy {
185
+ region = "us-east-1"
186
+ }
187
+ alias {
188
+ name = aws_lb.us_east_1.dns_name
189
+ zone_id = aws_lb.us_east_1.zone_id
190
+ }
191
+ }
192
+
193
+ resource "aws_route53_record" "api_eu" {
194
+ zone_id = aws_route53_zone.main.zone_id
195
+ name = "api.example.com"
196
+ type = "A"
197
+
198
+ set_identifier = "eu-west-1"
199
+ latency_routing_policy {
200
+ region = "eu-west-1"
201
+ }
202
+ alias {
203
+ name = aws_lb.eu_west_1.dns_name
204
+ zone_id = aws_lb.eu_west_1.zone_id
205
+ }
206
+ }
207
+ ```
208
+
209
+ **Pros:**
210
+ - ✅ Fastest failover (seconds)
211
+ - ✅ Optimal user latency (geo-routing)
212
+ - ✅ Full capacity utilization
213
+ - ✅ No wasted resources
214
+
215
+ **Cons:**
216
+ - ❌ Higher cost (2x infrastructure)
217
+ - ❌ Data consistency complexity
218
+ - ❌ Cross-region data transfer costs
219
+ - ❌ Difficult to test
220
+
221
+ **Cost Estimate:**
222
+ - Region A: 100% of single-region
223
+ - Region B: 100% of single-region
224
+ - Data transfer: 10-20% additional
225
+ - **Total: ~210-220% of single-region**
226
+
227
+ ---
228
+
229
+ ### 3. Read Replicas (Global Read)
230
+
231
+ **Description:**
232
+ Primary region for writes, multiple regions for reads.
233
+
234
+ **Diagram:**
235
+ ```
236
+ Writes (10%)
237
+
238
+ ┌───────▼────────┐
239
+ │ Primary Region│
240
+ │ (us-east-1) │
241
+ │ ┌──────────┐ │
242
+ │ │ Database │ │
243
+ │ │ (Primary)│ │
244
+ │ └────┬─────┘ │
245
+ └───────┼────────┘
246
+
247
+ Replication
248
+ ┌──────┼──────┐
249
+ │ │
250
+ ┌──────▼──────┐ ┌───▼────────┐
251
+ │ Read Replica│ │Read Replica│
252
+ │ (eu-west-1)│ │(ap-south-1)│
253
+ │ │ │ │
254
+ │ Reads (45%)│ │Reads (45%) │
255
+ └─────────────┘ └────────────┘
256
+ ```
257
+
258
+ **When to Use:**
259
+ - Read-heavy workloads (90%+ reads)
260
+ - Global user base
261
+ - Eventual consistency acceptable
262
+ - Cost optimization
263
+
264
+ **Implementation:**
265
+ ```terraform
266
+ # Primary database
267
+ resource "aws_db_instance" "primary" {
268
+ identifier = "users-primary"
269
+ region = "us-east-1"
270
+
271
+ engine = "postgres"
272
+ instance_class = "db.r5.xlarge"
273
+
274
+ backup_retention_period = 7
275
+ multi_az = true
276
+ }
277
+
278
+ # Read replica in Europe
279
+ resource "aws_db_instance" "replica_eu" {
280
+ identifier = "users-replica-eu"
281
+ region = "eu-west-1"
282
+
283
+ replicate_source_db = aws_db_instance.primary.identifier
284
+ instance_class = "db.r5.large" # Can be smaller
285
+
286
+ # No backups needed for replica
287
+ backup_retention_period = 0
288
+ }
289
+
290
+ # Read replica in Asia
291
+ resource "aws_db_instance" "replica_asia" {
292
+ identifier = "users-replica-asia"
293
+ region = "ap-southeast-1"
294
+
295
+ replicate_source_db = aws_db_instance.primary.identifier
296
+ instance_class = "db.r5.large"
297
+
298
+ backup_retention_period = 0
299
+ }
300
+ ```
301
+
302
+ **Application Code:**
303
+ ```typescript
304
+ // Smart connection routing
305
+ const connectionConfig = {
306
+ write: process.env.DATABASE_PRIMARY_URL,
307
+ read: [
308
+ process.env.DATABASE_REPLICA_EU_URL,
309
+ process.env.DATABASE_REPLICA_ASIA_URL,
310
+ ]
311
+ };
312
+
313
+ // Use Prisma read replicas
314
+ const prisma = new PrismaClient({
315
+ datasources: {
316
+ db: {
317
+ url: connectionConfig.write
318
+ }
319
+ }
320
+ });
321
+
322
+ // Explicit read from replica
323
+ const users = await prisma.$queryRaw`
324
+ SELECT * FROM users WHERE region = 'EU'
325
+ ` // Automatically routed to nearest replica
326
+
327
+ // Writes always go to primary
328
+ await prisma.user.create({
329
+ data: { name: 'John' }
330
+ }); // Routed to primary
331
+ ```
332
+
333
+ **Pros:**
334
+ - ✅ Lower cost than active-active
335
+ - ✅ Improved read performance globally
336
+ - ✅ Reduced load on primary
337
+
338
+ **Cons:**
339
+ - ❌ Replication lag (eventual consistency)
340
+ - ❌ Writes still centralized
341
+ - ❌ Application must handle read-after-write
342
+
343
+ **Cost Estimate:**
344
+ - Primary: 100%
345
+ - Replica 1: 50% (smaller instance)
346
+ - Replica 2: 50%
347
+ - **Total: ~200% of single-region**
348
+
349
+ ---
350
+
351
+ ## Data Replication Strategies
352
+
353
+ ### Synchronous Replication
354
+ ```
355
+ Client → Primary DB → Secondary DB → Client
356
+ (wait) (wait) (response)
357
+ ```
358
+ - ✅ Strong consistency
359
+ - ❌ Higher latency
360
+ - ❌ Availability impact if secondary fails
361
+
362
+ ### Asynchronous Replication
363
+ ```
364
+ Client → Primary DB → Client
365
+ (no wait) (response)
366
+
367
+ Secondary DB
368
+ (background)
369
+ ```
370
+ - ✅ Lower latency
371
+ - ✅ High availability
372
+ - ❌ Potential data loss
373
+ - ❌ Eventual consistency
374
+
375
+ ### Comparison:
376
+
377
+ | Aspect | Synchronous | Asynchronous |
378
+ |--------|-------------|--------------|
379
+ | Consistency | Strong | Eventual |
380
+ | Latency | High (+50-200ms) | Low (no impact) |
381
+ | Data Loss Risk | None | Seconds to minutes |
382
+ | Availability | Lower | Higher |
383
+ | Use Case | Financial | Most applications |
384
+
385
+ ---
386
+
387
+ ## Handling Cross-Region Challenges
388
+
389
+ ### 1. Network Latency
390
+
391
+ **Problem:** Cross-region latency 50-300ms
392
+
393
+ **Solutions:**
394
+ - Use CDN for static assets
395
+ - Cache aggressively at edge
396
+ - Async replication
397
+ - Regional data partitioning
398
+
399
+ ```typescript
400
+ // Regional data partitioning
401
+ const userRegion = getUserRegion(userId);
402
+
403
+ // Route to nearest region
404
+ const regionalDB = {
405
+ 'US': usEastDB,
406
+ 'EU': euWestDB,
407
+ 'ASIA': apSouthDB
408
+ }[userRegion];
409
+
410
+ const user = await regionalDB.users.findUnique({
411
+ where: { id: userId }
412
+ });
413
+ ```
414
+
415
+ ### 2. Data Consistency
416
+
417
+ **Problem:** Distributed data, potential conflicts
418
+
419
+ **Solutions:**
420
+ - Last-writer-wins (simple, lossy)
421
+ - Vector clocks (complex, accurate)
422
+ - CRDTs (Conflict-Free Replicated Data Types)
423
+ - Application-level conflict resolution
424
+
425
+ ```typescript
426
+ // Last-writer-wins with timestamp
427
+ interface User {
428
+ id: string;
429
+ name: string;
430
+ updatedAt: Date; // Conflict resolution
431
+ region: string; // Origin tracking
432
+ }
433
+
434
+ async function resolveConflict(local: User, remote: User) {
435
+ // Simple: most recent wins
436
+ return local.updatedAt > remote.updatedAt ? local : remote;
437
+ }
438
+ ```
439
+
440
+ ### 3. Data Transfer Costs
441
+
442
+ **AWS Inter-Region Data Transfer:**
443
+ - us-east-1 → us-west-2: $0.02/GB
444
+ - us-east-1 → eu-west-1: $0.02/GB
445
+ - us-east-1 → ap-south-1: $0.08/GB
446
+
447
+ **Cost Optimization:**
448
+ ```terraform
449
+ # Use VPC peering to reduce costs
450
+ resource "aws_vpc_peering_connection" "us_to_eu" {
451
+ vpc_id = aws_vpc.us_east.id
452
+ peer_vpc_id = aws_vpc.eu_west.id
453
+ peer_region = "eu-west-1"
454
+
455
+ # Reduces data transfer cost vs public internet
456
+ }
457
+
458
+ # Compress data before transfer
459
+ resource "aws_lambda_function" "replicate_with_compression" {
460
+ function_name = "replicate-compressed"
461
+
462
+ environment {
463
+ variables = {
464
+ COMPRESSION = "gzip" # Reduce data volume 60-80%
465
+ }
466
+ }
467
+ }
468
+ ```
469
+
470
+ ---
471
+
472
+ ## Failover Procedures
473
+
474
+ ### Automated Failover (Active-Passive)
475
+
476
+ ```bash
477
+ #!/bin/bash
478
+ # Automated failover script
479
+
480
+ # 1. Detect primary region failure
481
+ PRIMARY_HEALTH=$(curl -f https://api.us-east-1.example.com/health || echo "FAIL")
482
+
483
+ if [ "$PRIMARY_HEALTH" == "FAIL" ]; then
484
+ echo "Primary region unhealthy. Initiating failover..."
485
+
486
+ # 2. Promote secondary database to primary
487
+ aws rds promote-read-replica \
488
+ --db-instance-identifier users-replica-eu \
489
+ --region eu-west-1
490
+
491
+ # 3. Update DNS to point to secondary
492
+ aws route53 change-resource-record-sets \
493
+ --hosted-zone-id Z1234567890ABC \
494
+ --change-batch '{
495
+ "Changes": [{
496
+ "Action": "UPSERT",
497
+ "ResourceRecordSet": {
498
+ "Name": "api.example.com",
499
+ "Type": "A",
500
+ "SetIdentifier": "failover",
501
+ "Failover": "PRIMARY",
502
+ "AliasTarget": {
503
+ "HostedZoneId": "Z0987654321XYZ",
504
+ "DNSName": "api.eu-west-1.example.com",
505
+ "EvaluateTargetHealth": true
506
+ }
507
+ }
508
+ }]
509
+ }'
510
+
511
+ # 4. Notify team
512
+ aws sns publish \
513
+ --topic-arn arn:aws:sns:us-east-1:123456789:failover-alerts \
514
+ --message "Failover to eu-west-1 completed"
515
+
516
+ echo "Failover complete. Traffic now routing to eu-west-1."
517
+ fi
518
+ ```
519
+
520
+ ### Manual Failover Runbook
521
+
522
+ ```markdown
523
+ # Multi-Region Failover Runbook
524
+
525
+ ## Pre-Failover Checklist
526
+ - [ ] Confirm primary region is truly down (not false alarm)
527
+ - [ ] Verify secondary region is healthy
528
+ - [ ] Check replication lag < 5 minutes
529
+ - [ ] Notify stakeholders (Slack #incidents)
530
+ - [ ] Document start time
531
+
532
+ ## Failover Steps (30 minutes)
533
+
534
+ ### Step 1: Promote Secondary Database (5 min)
535
+ ```bash
536
+ aws rds promote-read-replica \
537
+ --db-instance-identifier users-replica-eu
538
+ ```
539
+
540
+ ### Step 2: Update Application Config (5 min)
541
+ ```bash
542
+ kubectl set env deployment/api \
543
+ DATABASE_URL=postgresql://eu-west-1.rds.amazonaws.com/users
544
+ ```
545
+
546
+ ### Step 3: Update DNS (10 min propagation)
547
+ ```bash
548
+ # Update Route 53
549
+ aws route53 change-resource-record-sets ...
550
+ ```
551
+
552
+ ### Step 4: Verify Traffic (5 min)
553
+ - Check CloudWatch metrics
554
+ - Test critical user flows
555
+ - Monitor error rates
556
+
557
+ ### Step 5: Monitor (5 min)
558
+ - Watch dashboards for 15 minutes
559
+ - Confirm no spike in errors
560
+ - Verify latency acceptable
561
+
562
+ ## Post-Failover
563
+ - [ ] Update status page
564
+ - [ ] Monitor for 4 hours
565
+ - [ ] Plan failback when primary restored
566
+ - [ ] Post-mortem scheduled
567
+ ```
568
+
569
+ ---
570
+
571
+ ## Testing Multi-Region Failover
572
+
573
+ ### Chaos Engineering
574
+
575
+ ```yaml
576
+ # Chaos Mesh experiment: Simulate region failure
577
+ apiVersion: chaos-mesh.org/v1alpha1
578
+ kind: NetworkChaos
579
+ metadata:
580
+ name: region-failure-simulation
581
+ spec:
582
+ action: partition
583
+ mode: all
584
+ selector:
585
+ namespaces:
586
+ - production
587
+ labelSelectors:
588
+ 'region': 'us-east-1'
589
+ direction: both
590
+ duration: '30m'
591
+ ```
592
+
593
+ ### GameDays
594
+
595
+ **Quarterly failover testing:**
596
+ 1. Schedule 2-hour window
597
+ 2. Announce to team
598
+ 3. Execute failover procedure
599
+ 4. Measure RTO/RPO
600
+ 5. Document learnings
601
+ 6. Update runbooks
602
+
603
+ ---
604
+
605
+ **Related Resources:**
606
+ - disaster-recovery.md - RTO/RPO planning and backup strategies
607
+ - capacity-planning.md - Sizing multi-region infrastructure
608
+ - cost-architecture.md - Multi-region cost optimization