4runr-os 2.9.34 → 2.9.35
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/apps/gateway/DEPLOYMENT.md +426 -0
- package/apps/gateway/ENV_VARIABLES.md +366 -0
- package/apps/gateway/JWT-RATE-LIMIT-VALIDATION.md +462 -0
- package/apps/gateway/PERSISTENCE-AND-AUTH.md +227 -0
- package/apps/gateway/PHASE5-TESTING.md +222 -0
- package/apps/gateway/README.md +351 -0
- package/apps/gateway/TROUBLESHOOTING.md +541 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/redis-sentinel-publisher.d.ts +8 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/redis-sentinel-publisher.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/redis-sentinel-publisher.js +27 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/redis-sentinel-publisher.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/sentinel-event-stream.d.ts +14 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/sentinel-event-stream.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/sentinel-event-stream.js +69 -0
- package/apps/gateway/dist/apps/gateway/src/adapters/sentinel-event-stream.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions-simple.d.ts +10 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions-simple.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions-simple.js +372 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions-simple.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions.d.ts +14 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions.js +210 -0
- package/apps/gateway/dist/apps/gateway/src/agents/definitions.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/local-model-provider.d.ts +25 -0
- package/apps/gateway/dist/apps/gateway/src/agents/local-model-provider.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/local-model-provider.js +144 -0
- package/apps/gateway/dist/apps/gateway/src/agents/local-model-provider.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/tools.d.ts +24 -0
- package/apps/gateway/dist/apps/gateway/src/agents/tools.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/agents/tools.js +110 -0
- package/apps/gateway/dist/apps/gateway/src/agents/tools.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/anthropic-provider.d.ts +14 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/anthropic-provider.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/anthropic-provider.js +139 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/anthropic-provider.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/index.d.ts +6 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/index.js +6 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/openai-provider.d.ts +14 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/openai-provider.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/openai-provider.js +136 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/openai-provider.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/provider-manager.d.ts +18 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/provider-manager.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/provider-manager.js +91 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/provider-manager.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/redis-credentials-store.d.ts +15 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/redis-credentials-store.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/redis-credentials-store.js +153 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/redis-credentials-store.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/types.d.ts +54 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/types.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/types.js +2 -0
- package/apps/gateway/dist/apps/gateway/src/ai-providers/types.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/config/persistence.d.ts +5 -0
- package/apps/gateway/dist/apps/gateway/src/config/persistence.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/config/persistence.js +14 -0
- package/apps/gateway/dist/apps/gateway/src/config/persistence.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/crypto/envelope.d.ts +28 -0
- package/apps/gateway/dist/apps/gateway/src/crypto/envelope.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/crypto/envelope.js +111 -0
- package/apps/gateway/dist/apps/gateway/src/crypto/envelope.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/db/prisma.d.ts +4 -0
- package/apps/gateway/dist/apps/gateway/src/db/prisma.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/db/prisma.js +31 -0
- package/apps/gateway/dist/apps/gateway/src/db/prisma.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/db/redis.d.ts +5 -0
- package/apps/gateway/dist/apps/gateway/src/db/redis.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/db/redis.js +68 -0
- package/apps/gateway/dist/apps/gateway/src/db/redis.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/agents-api.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/agents-api.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/agents-api.js +369 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/agents-api.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/metrics-parser.d.ts +46 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/metrics-parser.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/metrics-parser.js +114 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/metrics-parser.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/middleware.d.ts +9 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/middleware.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/middleware.js +23 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/middleware.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/routes.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/routes.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/routes.js +266 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/routes.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/tools-api.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/tools-api.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/tools-api.js +183 -0
- package/apps/gateway/dist/apps/gateway/src/devkit/tools-api.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/health/index.d.ts +22 -0
- package/apps/gateway/dist/apps/gateway/src/health/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/health/index.js +180 -0
- package/apps/gateway/dist/apps/gateway/src/health/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/index.d.ts +2 -0
- package/apps/gateway/dist/apps/gateway/src/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/index.js +982 -0
- package/apps/gateway/dist/apps/gateway/src/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/metrics/index.d.ts +33 -0
- package/apps/gateway/dist/apps/gateway/src/metrics/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/metrics/index.js +166 -0
- package/apps/gateway/dist/apps/gateway/src/metrics/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/auth.d.ts +5 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/auth.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/auth.js +64 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/auth.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authApiKey.d.ts +4 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authApiKey.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authApiKey.js +105 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authApiKey.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authJwt.d.ts +12 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authJwt.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authJwt.js +75 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/authJwt.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/correlationId.d.ts +4 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/correlationId.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/correlationId.js +11 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/correlationId.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/ddos-protection.d.ts +13 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/ddos-protection.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/ddos-protection.js +178 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/ddos-protection.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/errorHandler.d.ts +14 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/errorHandler.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/errorHandler.js +98 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/errorHandler.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/mfa.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/mfa.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/mfa.js +92 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/mfa.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rateLimit.d.ts +6 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rateLimit.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rateLimit.js +54 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rateLimit.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rbac.d.ts +19 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rbac.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rbac.js +229 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/rbac.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/security.d.ts +8 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/security.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/security.js +55 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/security.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/validate.d.ts +7 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/validate.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/validate.js +156 -0
- package/apps/gateway/dist/apps/gateway/src/middleware/validate.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/config.d.ts +26 -0
- package/apps/gateway/dist/apps/gateway/src/queue/config.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/config.js +21 -0
- package/apps/gateway/dist/apps/gateway/src/queue/config.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/index.d.ts +13 -0
- package/apps/gateway/dist/apps/gateway/src/queue/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/index.js +152 -0
- package/apps/gateway/dist/apps/gateway/src/queue/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/processor.d.ts +16 -0
- package/apps/gateway/dist/apps/gateway/src/queue/processor.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/queue/processor.js +316 -0
- package/apps/gateway/dist/apps/gateway/src/queue/processor.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers-simple.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers-simple.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers-simple.js +116 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers-simple.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers.js +157 -0
- package/apps/gateway/dist/apps/gateway/src/routes/ai-providers.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/chats.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/chats.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/chats.js +150 -0
- package/apps/gateway/dist/apps/gateway/src/routes/chats.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/gdpr.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/gdpr.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/gdpr.js +228 -0
- package/apps/gateway/dist/apps/gateway/src/routes/gdpr.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/mfa.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/mfa.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/mfa.js +191 -0
- package/apps/gateway/dist/apps/gateway/src/routes/mfa.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-policies.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-policies.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-policies.js +142 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-policies.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-predictive.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-predictive.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-predictive.js +82 -0
- package/apps/gateway/dist/apps/gateway/src/routes/sentinel-predictive.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/shield.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/shield.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/shield.js +71 -0
- package/apps/gateway/dist/apps/gateway/src/routes/shield.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-credentials.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-credentials.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-credentials.js +194 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-credentials.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-proxy.d.ts +3 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-proxy.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-proxy.js +187 -0
- package/apps/gateway/dist/apps/gateway/src/routes/tool-proxy.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/index.d.ts +5 -0
- package/apps/gateway/dist/apps/gateway/src/runs/index.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/index.js +19 -0
- package/apps/gateway/dist/apps/gateway/src/runs/index.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/memoryRunStore.d.ts +12 -0
- package/apps/gateway/dist/apps/gateway/src/runs/memoryRunStore.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/memoryRunStore.js +78 -0
- package/apps/gateway/dist/apps/gateway/src/runs/memoryRunStore.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/postgresRunStore.d.ts +15 -0
- package/apps/gateway/dist/apps/gateway/src/runs/postgresRunStore.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/postgresRunStore.js +148 -0
- package/apps/gateway/dist/apps/gateway/src/runs/postgresRunStore.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/runStore.d.ts +10 -0
- package/apps/gateway/dist/apps/gateway/src/runs/runStore.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/runStore.js +2 -0
- package/apps/gateway/dist/apps/gateway/src/runs/runStore.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/types.d.ts +44 -0
- package/apps/gateway/dist/apps/gateway/src/runs/types.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/runs/types.js +2 -0
- package/apps/gateway/dist/apps/gateway/src/runs/types.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/schemas/runs.d.ts +126 -0
- package/apps/gateway/dist/apps/gateway/src/schemas/runs.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/schemas/runs.js +63 -0
- package/apps/gateway/dist/apps/gateway/src/schemas/runs.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/utils/circuit-breaker.d.ts +13 -0
- package/apps/gateway/dist/apps/gateway/src/utils/circuit-breaker.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/utils/circuit-breaker.js +72 -0
- package/apps/gateway/dist/apps/gateway/src/utils/circuit-breaker.js.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/utils/log-encryption.d.ts +10 -0
- package/apps/gateway/dist/apps/gateway/src/utils/log-encryption.d.ts.map +1 -0
- package/apps/gateway/dist/apps/gateway/src/utils/log-encryption.js +140 -0
- package/apps/gateway/dist/apps/gateway/src/utils/log-encryption.js.map +1 -0
- package/apps/gateway/dist/packages/adapters/redis/IdempotencyStore.d.ts +41 -0
- package/apps/gateway/dist/packages/adapters/redis/IdempotencyStore.d.ts.map +1 -0
- package/apps/gateway/dist/packages/adapters/redis/IdempotencyStore.js +127 -0
- package/apps/gateway/dist/packages/adapters/redis/IdempotencyStore.js.map +1 -0
- package/apps/gateway/dist/packages/middleware/idempotency/idempotency.d.ts +45 -0
- package/apps/gateway/dist/packages/middleware/idempotency/idempotency.d.ts.map +1 -0
- package/apps/gateway/dist/packages/middleware/idempotency/idempotency.js +145 -0
- package/apps/gateway/dist/packages/middleware/idempotency/idempotency.js.map +1 -0
- package/apps/gateway/dist/src/api/admin.d.ts +7 -0
- package/apps/gateway/dist/src/api/admin.d.ts.map +1 -0
- package/apps/gateway/dist/src/api/admin.js +275 -0
- package/apps/gateway/dist/src/api/admin.js.map +1 -0
- package/apps/gateway/dist/src/api/agents.d.ts +3 -0
- package/apps/gateway/dist/src/api/agents.d.ts.map +1 -0
- package/apps/gateway/dist/src/api/agents.js +66 -0
- package/apps/gateway/dist/src/api/agents.js.map +1 -0
- package/apps/gateway/dist/src/api/proxy.d.ts +3 -0
- package/apps/gateway/dist/src/api/proxy.d.ts.map +1 -0
- package/apps/gateway/dist/src/api/proxy.js +373 -0
- package/apps/gateway/dist/src/api/proxy.js.map +1 -0
- package/apps/gateway/dist/src/api/tokens.d.ts +3 -0
- package/apps/gateway/dist/src/api/tokens.d.ts.map +1 -0
- package/apps/gateway/dist/src/api/tokens.js +116 -0
- package/apps/gateway/dist/src/api/tokens.js.map +1 -0
- package/apps/gateway/dist/src/crypto/envelope.d.ts +26 -0
- package/apps/gateway/dist/src/crypto/envelope.d.ts.map +1 -0
- package/apps/gateway/dist/src/crypto/envelope.js +100 -0
- package/apps/gateway/dist/src/crypto/envelope.js.map +1 -0
- package/apps/gateway/dist/src/models/memory-db.d.ts +149 -0
- package/apps/gateway/dist/src/models/memory-db.d.ts.map +1 -0
- package/apps/gateway/dist/src/models/memory-db.js +295 -0
- package/apps/gateway/dist/src/models/memory-db.js.map +1 -0
- package/apps/gateway/dist/src/observability/metrics.d.ts +62 -0
- package/apps/gateway/dist/src/observability/metrics.d.ts.map +1 -0
- package/apps/gateway/dist/src/observability/metrics.js +205 -0
- package/apps/gateway/dist/src/observability/metrics.js.map +1 -0
- package/apps/gateway/dist/src/policies/validators.d.ts +147 -0
- package/apps/gateway/dist/src/policies/validators.d.ts.map +1 -0
- package/apps/gateway/dist/src/policies/validators.js +105 -0
- package/apps/gateway/dist/src/policies/validators.js.map +1 -0
- package/apps/gateway/dist/src/runtime/cache.d.ts +31 -0
- package/apps/gateway/dist/src/runtime/cache.d.ts.map +1 -0
- package/apps/gateway/dist/src/runtime/cache.js +142 -0
- package/apps/gateway/dist/src/runtime/cache.js.map +1 -0
- package/apps/gateway/dist/src/runtime/circuit.d.ts +57 -0
- package/apps/gateway/dist/src/runtime/circuit.d.ts.map +1 -0
- package/apps/gateway/dist/src/runtime/circuit.js +173 -0
- package/apps/gateway/dist/src/runtime/circuit.js.map +1 -0
- package/apps/gateway/dist/src/runtime/http.d.ts +62 -0
- package/apps/gateway/dist/src/runtime/http.d.ts.map +1 -0
- package/apps/gateway/dist/src/runtime/http.js +102 -0
- package/apps/gateway/dist/src/runtime/http.js.map +1 -0
- package/apps/gateway/dist/src/runtime/lifecycle.d.ts +49 -0
- package/apps/gateway/dist/src/runtime/lifecycle.d.ts.map +1 -0
- package/apps/gateway/dist/src/runtime/lifecycle.js +155 -0
- package/apps/gateway/dist/src/runtime/lifecycle.js.map +1 -0
- package/apps/gateway/dist/src/runtime/retry.d.ts +33 -0
- package/apps/gateway/dist/src/runtime/retry.d.ts.map +1 -0
- package/apps/gateway/dist/src/runtime/retry.js +122 -0
- package/apps/gateway/dist/src/runtime/retry.js.map +1 -0
- package/apps/gateway/dist/src/secrets/provider.d.ts +50 -0
- package/apps/gateway/dist/src/secrets/provider.d.ts.map +1 -0
- package/apps/gateway/dist/src/secrets/provider.js +189 -0
- package/apps/gateway/dist/src/secrets/provider.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/config.d.ts +25 -0
- package/apps/gateway/dist/src/sentinel/config.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/config.js +179 -0
- package/apps/gateway/dist/src/sentinel/config.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/judge.d.ts +24 -0
- package/apps/gateway/dist/src/sentinel/judge.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/judge.js +275 -0
- package/apps/gateway/dist/src/sentinel/judge.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/middleware.d.ts +19 -0
- package/apps/gateway/dist/src/sentinel/middleware.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/middleware.js +231 -0
- package/apps/gateway/dist/src/sentinel/middleware.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/shield.d.ts +116 -0
- package/apps/gateway/dist/src/sentinel/shield.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/shield.js +344 -0
- package/apps/gateway/dist/src/sentinel/shield.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/telemetry.d.ts +79 -0
- package/apps/gateway/dist/src/sentinel/telemetry.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/telemetry.js +313 -0
- package/apps/gateway/dist/src/sentinel/telemetry.js.map +1 -0
- package/apps/gateway/dist/src/sentinel/types.d.ts +283 -0
- package/apps/gateway/dist/src/sentinel/types.d.ts.map +1 -0
- package/apps/gateway/dist/src/sentinel/types.js +2 -0
- package/apps/gateway/dist/src/sentinel/types.js.map +1 -0
- package/apps/gateway/dist/src/services/4runr-cipher.d.ts +9 -0
- package/apps/gateway/dist/src/services/4runr-cipher.d.ts.map +1 -0
- package/apps/gateway/dist/src/services/4runr-cipher.js +64 -0
- package/apps/gateway/dist/src/services/4runr-cipher.js.map +1 -0
- package/apps/gateway/dist/src/services/policyEngine.d.ts +17 -0
- package/apps/gateway/dist/src/services/policyEngine.d.ts.map +1 -0
- package/apps/gateway/dist/src/services/policyEngine.js +310 -0
- package/apps/gateway/dist/src/services/policyEngine.js.map +1 -0
- package/apps/gateway/dist/src/tools/gmail-send.d.ts +19 -0
- package/apps/gateway/dist/src/tools/gmail-send.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/gmail-send.js +120 -0
- package/apps/gateway/dist/src/tools/gmail-send.js.map +1 -0
- package/apps/gateway/dist/src/tools/http-fetch.d.ts +13 -0
- package/apps/gateway/dist/src/tools/http-fetch.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/http-fetch.js +86 -0
- package/apps/gateway/dist/src/tools/http-fetch.js.map +1 -0
- package/apps/gateway/dist/src/tools/index.d.ts +71 -0
- package/apps/gateway/dist/src/tools/index.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/index.js +99 -0
- package/apps/gateway/dist/src/tools/index.js.map +1 -0
- package/apps/gateway/dist/src/tools/mock/gmail_send.mock.d.ts +12 -0
- package/apps/gateway/dist/src/tools/mock/gmail_send.mock.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/mock/gmail_send.mock.js +10 -0
- package/apps/gateway/dist/src/tools/mock/gmail_send.mock.js.map +1 -0
- package/apps/gateway/dist/src/tools/mock/http_fetch.mock.d.ts +13 -0
- package/apps/gateway/dist/src/tools/mock/http_fetch.mock.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/mock/http_fetch.mock.js +10 -0
- package/apps/gateway/dist/src/tools/mock/http_fetch.mock.js.map +1 -0
- package/apps/gateway/dist/src/tools/mock/openai.mock.d.ts +9 -0
- package/apps/gateway/dist/src/tools/mock/openai.mock.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/mock/openai.mock.js +8 -0
- package/apps/gateway/dist/src/tools/mock/openai.mock.js.map +1 -0
- package/apps/gateway/dist/src/tools/mock/serpapi.mock.d.ts +15 -0
- package/apps/gateway/dist/src/tools/mock/serpapi.mock.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/mock/serpapi.mock.js +12 -0
- package/apps/gateway/dist/src/tools/mock/serpapi.mock.js.map +1 -0
- package/apps/gateway/dist/src/tools/openai.d.ts +27 -0
- package/apps/gateway/dist/src/tools/openai.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/openai.js +100 -0
- package/apps/gateway/dist/src/tools/openai.js.map +1 -0
- package/apps/gateway/dist/src/tools/serpapi.d.ts +16 -0
- package/apps/gateway/dist/src/tools/serpapi.d.ts.map +1 -0
- package/apps/gateway/dist/src/tools/serpapi.js +56 -0
- package/apps/gateway/dist/src/tools/serpapi.js.map +1 -0
- package/apps/gateway/dist/src/types/policy.d.ts +221 -0
- package/apps/gateway/dist/src/types/policy.d.ts.map +1 -0
- package/apps/gateway/dist/src/types/policy.js +60 -0
- package/apps/gateway/dist/src/types/policy.js.map +1 -0
- package/apps/gateway/dist/src/utils/token-utils.d.ts +5 -0
- package/apps/gateway/dist/src/utils/token-utils.d.ts.map +1 -0
- package/apps/gateway/dist/src/utils/token-utils.js +28 -0
- package/apps/gateway/dist/src/utils/token-utils.js.map +1 -0
- package/apps/gateway/load-tests/README.md +107 -0
- package/apps/gateway/src/__tests__/integration/README.md +86 -0
- package/mk3-tui/binaries/win32-x64/mk3-tui.exe +0 -0
- package/mk3-tui/src/main.rs +9 -19
- package/mk3-tui/src/ui/layout.rs +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
# Deployment Guide
|
|
2
|
+
|
|
3
|
+
Complete guide for deploying the 4Runr Gateway to production.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
|
|
7
|
+
1. [Prerequisites](#prerequisites)
|
|
8
|
+
2. [Pre-Deployment Checklist](#pre-deployment-checklist)
|
|
9
|
+
3. [Environment Setup](#environment-setup)
|
|
10
|
+
4. [Database Setup](#database-setup)
|
|
11
|
+
5. [Deployment Methods](#deployment-methods)
|
|
12
|
+
6. [Post-Deployment Verification](#post-deployment-verification)
|
|
13
|
+
7. [Rollback Procedures](#rollback-procedures)
|
|
14
|
+
8. [Scaling](#scaling)
|
|
15
|
+
|
|
16
|
+
## Prerequisites
|
|
17
|
+
|
|
18
|
+
### Infrastructure Requirements
|
|
19
|
+
|
|
20
|
+
- **PostgreSQL 12+**: For persistent storage
|
|
21
|
+
- **Redis 6+**: For queue, rate limiting, and idempotency
|
|
22
|
+
- **Docker & Docker Compose**: For containerized deployment (recommended)
|
|
23
|
+
- **Node.js 18+**: For direct deployment (alternative)
|
|
24
|
+
|
|
25
|
+
### Security Requirements
|
|
26
|
+
|
|
27
|
+
- Strong database passwords
|
|
28
|
+
- Secure JWT secrets (min 32 characters)
|
|
29
|
+
- Encryption keys for sensitive data
|
|
30
|
+
- SSL/TLS certificates for HTTPS
|
|
31
|
+
- Firewall rules configured
|
|
32
|
+
|
|
33
|
+
### Network Requirements
|
|
34
|
+
|
|
35
|
+
- Port 3000: Gateway API (or configure reverse proxy)
|
|
36
|
+
- Port 5432: PostgreSQL (internal only)
|
|
37
|
+
- Port 6379: Redis (internal only)
|
|
38
|
+
|
|
39
|
+
## Pre-Deployment Checklist
|
|
40
|
+
|
|
41
|
+
- [ ] All environment variables configured
|
|
42
|
+
- [ ] Database migrations tested
|
|
43
|
+
- [ ] Secrets generated and stored securely
|
|
44
|
+
- [ ] Health checks configured
|
|
45
|
+
- [ ] Monitoring and alerting set up
|
|
46
|
+
- [ ] Backup strategy in place
|
|
47
|
+
- [ ] Rollback plan documented
|
|
48
|
+
- [ ] Load testing completed
|
|
49
|
+
- [ ] Security audit performed
|
|
50
|
+
|
|
51
|
+
## Environment Setup
|
|
52
|
+
|
|
53
|
+
### 1. Generate Secure Secrets
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# Generate JWT secret
|
|
57
|
+
openssl rand -base64 32
|
|
58
|
+
|
|
59
|
+
# Generate encryption key
|
|
60
|
+
openssl rand -base64 32
|
|
61
|
+
|
|
62
|
+
# Generate API keys (if using memory mode)
|
|
63
|
+
openssl rand -hex 32
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 2. Create Production Environment File
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
cd infra
|
|
70
|
+
cp env.example .env.production
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Edit `.env.production` with production values:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
NODE_ENV=production
|
|
77
|
+
GATEWAY_PERSISTENCE=postgres
|
|
78
|
+
DATABASE_URL=postgresql://user:strong-password@db-host:5432/4runr_gateway
|
|
79
|
+
REDIS_URL=redis://redis-host:6379
|
|
80
|
+
|
|
81
|
+
AUTH_ENABLED=true
|
|
82
|
+
AUTH_MODE=mixed
|
|
83
|
+
JWT_SECRET=<generated-secret>
|
|
84
|
+
JWT_ALG=HS256
|
|
85
|
+
|
|
86
|
+
RATE_LIMIT_ENABLED=true
|
|
87
|
+
RATE_LIMIT_MAX=100
|
|
88
|
+
RATE_LIMIT_WINDOW_MS=60000
|
|
89
|
+
|
|
90
|
+
SENTINEL_STORE_PLAIN=false
|
|
91
|
+
SENTINEL_MODE=live
|
|
92
|
+
SENTINEL_SHIELD_MODE=enforce
|
|
93
|
+
|
|
94
|
+
LOG_LEVEL=warn
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### 3. Store Secrets Securely
|
|
98
|
+
|
|
99
|
+
**DO NOT** commit secrets to version control. Use:
|
|
100
|
+
- Environment variable management (AWS Secrets Manager, HashiCorp Vault, etc.)
|
|
101
|
+
- Docker secrets
|
|
102
|
+
- Kubernetes secrets
|
|
103
|
+
- CI/CD secret management
|
|
104
|
+
|
|
105
|
+
## Database Setup
|
|
106
|
+
|
|
107
|
+
### 1. Create Database
|
|
108
|
+
|
|
109
|
+
```sql
|
|
110
|
+
CREATE DATABASE 4runr_gateway;
|
|
111
|
+
CREATE USER 4runr WITH PASSWORD 'strong-password';
|
|
112
|
+
GRANT ALL PRIVILEGES ON DATABASE 4runr_gateway TO 4runr;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### 2. Run Migrations
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
cd apps/gateway
|
|
119
|
+
pnpm db:generate
|
|
120
|
+
pnpm db:migrate
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Or via Docker:
|
|
124
|
+
```bash
|
|
125
|
+
docker-compose -f infra/docker-compose.prod.yml run --rm gateway pnpm db:migrate
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 3. Seed Initial Data (Optional)
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# Seed API key
|
|
132
|
+
pnpm seed:api-key
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Deployment Methods
|
|
136
|
+
|
|
137
|
+
### Method 1: Docker Compose (Recommended)
|
|
138
|
+
|
|
139
|
+
**Best for**: Single server deployments, small to medium scale
|
|
140
|
+
|
|
141
|
+
1. **Build and start:**
|
|
142
|
+
```bash
|
|
143
|
+
cd infra
|
|
144
|
+
docker-compose -f docker-compose.prod.yml up -d --build
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
2. **Verify services:**
|
|
148
|
+
```bash
|
|
149
|
+
docker-compose -f docker-compose.prod.yml ps
|
|
150
|
+
docker-compose -f docker-compose.prod.yml logs -f gateway
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
3. **Check health:**
|
|
154
|
+
```bash
|
|
155
|
+
curl http://localhost:3000/health
|
|
156
|
+
curl http://localhost:3000/ready
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Method 2: Kubernetes
|
|
160
|
+
|
|
161
|
+
**Best for**: Large scale, high availability
|
|
162
|
+
|
|
163
|
+
1. **Create namespace:**
|
|
164
|
+
```bash
|
|
165
|
+
kubectl create namespace 4runr-gateway
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
2. **Create secrets:**
|
|
169
|
+
```bash
|
|
170
|
+
kubectl create secret generic gateway-secrets \
|
|
171
|
+
--from-literal=jwt-secret='your-secret' \
|
|
172
|
+
--from-literal=database-url='postgresql://...' \
|
|
173
|
+
--namespace=4runr-gateway
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
3. **Deploy:**
|
|
177
|
+
```bash
|
|
178
|
+
kubectl apply -f k8s/gateway-deployment.yaml
|
|
179
|
+
kubectl apply -f k8s/gateway-service.yaml
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Method 3: Direct Node.js
|
|
183
|
+
|
|
184
|
+
**Best for**: Development, custom deployments
|
|
185
|
+
|
|
186
|
+
1. **Build:**
|
|
187
|
+
```bash
|
|
188
|
+
cd apps/gateway
|
|
189
|
+
pnpm install
|
|
190
|
+
pnpm build
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
2. **Start:**
|
|
194
|
+
```bash
|
|
195
|
+
NODE_ENV=production node dist/index.js
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Or use PM2:
|
|
199
|
+
```bash
|
|
200
|
+
pm2 start dist/index.js --name gateway
|
|
201
|
+
pm2 save
|
|
202
|
+
pm2 startup
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Post-Deployment Verification
|
|
206
|
+
|
|
207
|
+
### 1. Health Checks
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Liveness
|
|
211
|
+
curl http://your-server/health
|
|
212
|
+
# Expected: {"status":"ok"}
|
|
213
|
+
|
|
214
|
+
# Readiness
|
|
215
|
+
curl http://your-server/ready
|
|
216
|
+
# Expected: {"ready":true,"checks":{...}}
|
|
217
|
+
|
|
218
|
+
# Startup
|
|
219
|
+
curl http://your-server/startup
|
|
220
|
+
# Expected: {"started":true}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 2. API Functionality
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# Create a run
|
|
227
|
+
curl -X POST http://your-server/api/runs \
|
|
228
|
+
-H "x-api-key: your-key" \
|
|
229
|
+
-H "Content-Type: application/json" \
|
|
230
|
+
-d '{"name": "Test Run", "input": {}}'
|
|
231
|
+
|
|
232
|
+
# List runs
|
|
233
|
+
curl http://your-server/api/runs \
|
|
234
|
+
-H "x-api-key: your-key"
|
|
235
|
+
|
|
236
|
+
# Check metrics
|
|
237
|
+
curl http://your-server/metrics
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 3. Monitor Logs
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
# Docker
|
|
244
|
+
docker-compose -f infra/docker-compose.prod.yml logs -f gateway
|
|
245
|
+
|
|
246
|
+
# Kubernetes
|
|
247
|
+
kubectl logs -f deployment/gateway -n 4runr-gateway
|
|
248
|
+
|
|
249
|
+
# PM2
|
|
250
|
+
pm2 logs gateway
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### 4. Check Metrics
|
|
254
|
+
|
|
255
|
+
Access Prometheus metrics at `/metrics` and verify:
|
|
256
|
+
- HTTP request counts
|
|
257
|
+
- Run creation/start/completion rates
|
|
258
|
+
- Error rates
|
|
259
|
+
- Queue job metrics
|
|
260
|
+
- Rate limit hits
|
|
261
|
+
|
|
262
|
+
## Rollback Procedures
|
|
263
|
+
|
|
264
|
+
### Quick Rollback (Docker Compose)
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
cd infra
|
|
268
|
+
|
|
269
|
+
# Stop current version
|
|
270
|
+
docker-compose -f docker-compose.prod.yml down
|
|
271
|
+
|
|
272
|
+
# Switch to previous version
|
|
273
|
+
git checkout <previous-version-tag>
|
|
274
|
+
|
|
275
|
+
# Rebuild and start
|
|
276
|
+
docker-compose -f docker-compose.prod.yml up -d --build
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Database Rollback
|
|
280
|
+
|
|
281
|
+
If migrations need to be rolled back:
|
|
282
|
+
|
|
283
|
+
```bash
|
|
284
|
+
cd apps/gateway
|
|
285
|
+
pnpm prisma migrate resolve --rolled-back <migration-name>
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
**Warning**: Only rollback migrations if you're certain no data depends on them.
|
|
289
|
+
|
|
290
|
+
### Configuration Rollback
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
# Restore previous environment file
|
|
294
|
+
cp .env.production.backup .env.production
|
|
295
|
+
|
|
296
|
+
# Restart services
|
|
297
|
+
docker-compose -f docker-compose.prod.yml restart gateway
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
## Scaling
|
|
301
|
+
|
|
302
|
+
### Horizontal Scaling
|
|
303
|
+
|
|
304
|
+
The gateway is stateless and can be scaled horizontally:
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
# Docker Compose (multiple instances)
|
|
308
|
+
docker-compose -f docker-compose.prod.yml up -d --scale gateway=3
|
|
309
|
+
|
|
310
|
+
# Kubernetes
|
|
311
|
+
kubectl scale deployment gateway --replicas=3 -n 4runr-gateway
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
### Load Balancing
|
|
315
|
+
|
|
316
|
+
Use a load balancer (nginx, HAProxy, AWS ALB) in front of multiple gateway instances:
|
|
317
|
+
|
|
318
|
+
```nginx
|
|
319
|
+
upstream gateway {
|
|
320
|
+
least_conn;
|
|
321
|
+
server gateway1:3000;
|
|
322
|
+
server gateway2:3000;
|
|
323
|
+
server gateway3:3000;
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Database Scaling
|
|
328
|
+
|
|
329
|
+
- Use connection pooling (Prisma handles this)
|
|
330
|
+
- Consider read replicas for read-heavy workloads
|
|
331
|
+
- Monitor connection counts
|
|
332
|
+
|
|
333
|
+
### Redis Scaling
|
|
334
|
+
|
|
335
|
+
- Use Redis Cluster for high availability
|
|
336
|
+
- Configure Redis Sentinel for failover
|
|
337
|
+
- Monitor memory usage
|
|
338
|
+
|
|
339
|
+
## Monitoring & Alerting
|
|
340
|
+
|
|
341
|
+
### Key Metrics to Monitor
|
|
342
|
+
|
|
343
|
+
- **HTTP Request Rate**: Requests per second
|
|
344
|
+
- **Error Rate**: 4xx and 5xx errors
|
|
345
|
+
- **Response Time**: p50, p95, p99 latencies
|
|
346
|
+
- **Queue Depth**: Number of jobs waiting
|
|
347
|
+
- **Database Connections**: Active connections
|
|
348
|
+
- **Memory Usage**: Container/node memory
|
|
349
|
+
- **CPU Usage**: Container/node CPU
|
|
350
|
+
|
|
351
|
+
### Recommended Alerts
|
|
352
|
+
|
|
353
|
+
- Error rate > 1%
|
|
354
|
+
- Response time p95 > 1s
|
|
355
|
+
- Queue depth > 1000
|
|
356
|
+
- Database connections > 80% of max
|
|
357
|
+
- Memory usage > 80%
|
|
358
|
+
- Health check failures
|
|
359
|
+
|
|
360
|
+
## Backup & Recovery
|
|
361
|
+
|
|
362
|
+
### Database Backups
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
# Daily backup script
|
|
366
|
+
pg_dump -h db-host -U 4runr 4runr_gateway > backup-$(date +%Y%m%d).sql
|
|
367
|
+
|
|
368
|
+
# Restore
|
|
369
|
+
psql -h db-host -U 4runr 4runr_gateway < backup-20231119.sql
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
### Configuration Backups
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Backup environment file
|
|
376
|
+
cp .env.production .env.production.backup
|
|
377
|
+
|
|
378
|
+
# Backup docker-compose
|
|
379
|
+
cp docker-compose.prod.yml docker-compose.prod.yml.backup
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
## Security Hardening
|
|
383
|
+
|
|
384
|
+
### Production Security Checklist
|
|
385
|
+
|
|
386
|
+
- [ ] HTTPS enabled (TLS 1.2+)
|
|
387
|
+
- [ ] Security headers configured
|
|
388
|
+
- [ ] Secrets stored securely (not in code)
|
|
389
|
+
- [ ] Database access restricted (firewall)
|
|
390
|
+
- [ ] Redis access restricted (firewall)
|
|
391
|
+
- [ ] Rate limiting enabled
|
|
392
|
+
- [ ] Authentication required
|
|
393
|
+
- [ ] Error messages masked in production
|
|
394
|
+
- [ ] Logging configured (no sensitive data)
|
|
395
|
+
- [ ] Regular security updates
|
|
396
|
+
|
|
397
|
+
### SSL/TLS Setup
|
|
398
|
+
|
|
399
|
+
Use a reverse proxy (nginx, Traefik) for SSL termination:
|
|
400
|
+
|
|
401
|
+
```nginx
|
|
402
|
+
server {
|
|
403
|
+
listen 443 ssl;
|
|
404
|
+
server_name api.yourdomain.com;
|
|
405
|
+
|
|
406
|
+
ssl_certificate /path/to/cert.pem;
|
|
407
|
+
ssl_certificate_key /path/to/key.pem;
|
|
408
|
+
|
|
409
|
+
location / {
|
|
410
|
+
proxy_pass http://gateway:3000;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
## Troubleshooting
|
|
416
|
+
|
|
417
|
+
See [TROUBLESHOOTING.md](./TROUBLESHOOTING.md) for common deployment issues.
|
|
418
|
+
|
|
419
|
+
## Support
|
|
420
|
+
|
|
421
|
+
For deployment issues:
|
|
422
|
+
- Check logs: `docker-compose logs gateway`
|
|
423
|
+
- Verify health: `curl http://localhost/health`
|
|
424
|
+
- Review metrics: `curl http://localhost/metrics`
|
|
425
|
+
- See troubleshooting guide
|
|
426
|
+
|