learning_ai_common_plat/services/platform-service/src/lib/cosmos-init.ts
saravanakumardb1 721d3fcb48 feat(platform-service): fleet data model + container registration (P2 foundation)
Adds the agent-gigafactory fleet data model (modules/fleet/types.ts): Zod schemas
as the source of truth with inferred types (no `any`) for the 7 durable containers
— FleetJobDoc, FleetRunDoc, FleetLeaseDoc, FleetFactoryDoc, FleetProfileDoc,
FleetEventDoc, FleetArtifactDoc — each carrying productId. Lifecycle stages mirror
the agent-queue gigafactory spec (queued|blocked|assigned|building|review|testing|
shipped|failed|dead_letter). Registers fleet_* containers with their partition keys
(/productId for jobs/factories/profiles, /jobId for runs/leases/events/artifacts).
2026-05-29 20:19:59 -07:00

214 lines
11 KiB
TypeScript

import { initializeAllContainers, registerContainers } from '@bytelyst/cosmos';
import type { ContainerConfig } from '@bytelyst/cosmos';
import { config } from './config.js';
const CONTAINER_DEFS: Record<string, ContainerConfig> = {
products: { partitionKeyPath: '/id' },
users: { partitionKeyPath: '/id' },
settings: { partitionKeyPath: '/userId' },
devices: { partitionKeyPath: '/userId' },
notification_prefs: { partitionKeyPath: '/userId' },
audit_log: { partitionKeyPath: '/category', defaultTtl: 90 * 86400 },
feature_flags: { partitionKeyPath: '/id' },
// Growth modules
invitation_codes: { partitionKeyPath: '/id' },
referrals: { partitionKeyPath: '/id' },
referrals_v2: { partitionKeyPath: '/referrerId' },
// Billing modules
subscriptions: { partitionKeyPath: '/userId' },
payments: { partitionKeyPath: '/userId' },
licenses: { partitionKeyPath: '/id' },
plans: { partitionKeyPath: '/id' },
usage_daily: { partitionKeyPath: '/userId' },
// API tokens
api_tokens: { partitionKeyPath: '/id' },
rate_limit_entries: { partitionKeyPath: '/id', defaultTtl: 24 * 3600 },
// Tracker modules
tracker_items: { partitionKeyPath: '/id' },
comments: { partitionKeyPath: '/itemId' },
votes: { partitionKeyPath: '/itemId' },
// Themes
themes: { partitionKeyPath: '/id' },
// Waitlist (pre-launch signups)
waitlist: { partitionKeyPath: '/email' },
// Sessions (refresh token rotation + device tracking)
sessions: { partitionKeyPath: '/userId', defaultTtl: 30 * 86400 },
// Email/push delivery log
delivery_log: { partitionKeyPath: '/pk', defaultTtl: 90 * 86400 },
// Status page incidents
incidents: { partitionKeyPath: '/productId' },
// Password reset + email verification
password_reset_tokens: { partitionKeyPath: '/productId', defaultTtl: 86400 },
email_verifications: { partitionKeyPath: '/productId', defaultTtl: 7 * 86400 },
// SmartAuth — OAuth provider linking
auth_providers: { partitionKeyPath: '/userId' },
// SmartAuth — Enterprise IdP configs
auth_enterprise_idps: { partitionKeyPath: '/orgId' },
// SmartAuth — TOTP MFA secrets + recovery codes
auth_mfa: { partitionKeyPath: '/userId' },
// SmartAuth — MFA enforcement policies (per product)
auth_mfa_policies: { partitionKeyPath: '/productId' },
// SmartAuth — WebAuthn passkeys
auth_passkeys: { partitionKeyPath: '/userId' },
// SmartAuth — Device trust + fingerprinting
auth_devices: { partitionKeyPath: '/userId' },
// SmartAuth — Login events (audit trail, 365-day TTL)
auth_login_events: { partitionKeyPath: '/userId', defaultTtl: 365 * 86400 },
// IP allow/deny rules
ip_rules: { partitionKeyPath: '/productId' },
// Data exports
export_jobs: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
// Maintenance windows
maintenance_windows: { partitionKeyPath: '/productId' },
// Scheduled jobs
job_definitions: { partitionKeyPath: '/productId' },
job_runs: { partitionKeyPath: '/pk' },
// Generic orchestration runs
agent_runs: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
agent_run_steps: { partitionKeyPath: '/pk', defaultTtl: 30 * 86400 },
// Cross-product personal timeline
timeline_items: { partitionKeyPath: '/productId', defaultTtl: 90 * 86400 },
// Canonical tenant model
organizations: { partitionKeyPath: '/productId' },
workspaces: { partitionKeyPath: '/orgId' },
org_memberships: { partitionKeyPath: '/orgId' },
// Human review / approval queue
review_queue: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
// Agent registry and versioned prompt/config definitions
agent_registry: { partitionKeyPath: '/productId' },
agent_versions: { partitionKeyPath: '/agentId' },
// Agent governance / evaluations
agent_evaluation_suites: { partitionKeyPath: '/productId' },
agent_evaluation_cases: { partitionKeyPath: '/suiteId' },
agent_evaluation_runs: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
agent_evaluation_results: { partitionKeyPath: '/runId', defaultTtl: 30 * 86400 },
// AI budget and cost governance
ai_budget_policies: { partitionKeyPath: '/productId' },
ai_budget_spend_entries: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
ai_budget_alerts: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
// Shared knowledge / retrieval catalog
knowledge_bases: { partitionKeyPath: '/productId' },
knowledge_sources: { partitionKeyPath: '/knowledgeBaseId' },
knowledge_chunks: { partitionKeyPath: '/knowledgeBaseId', defaultTtl: 90 * 86400 },
// Enterprise provisioning / SCIM
scim_connectors: { partitionKeyPath: '/orgId' },
scim_user_sync: { partitionKeyPath: '/connectorId' },
scim_group_sync: { partitionKeyPath: '/connectorId' },
scim_events: { partitionKeyPath: '/connectorId', defaultTtl: 90 * 86400 },
// Support case management
support_cases: { partitionKeyPath: '/productId' },
support_case_notes: { partitionKeyPath: '/caseId' },
support_case_escalations: { partitionKeyPath: '/caseId', defaultTtl: 90 * 86400 },
// Telemetry (client diagnostics — see docs/WINDSURF/CLIENT_TELEMETRY_DESIGN.md)
telemetry_events: { partitionKeyPath: '/pk', defaultTtl: 30 * 86400 },
telemetry_error_clusters: { partitionKeyPath: '/pk', defaultTtl: 90 * 86400 },
telemetry_collection_policies: { partitionKeyPath: '/productId' },
// Database migrations tracking
migrations: { partitionKeyPath: '/productId' },
// Webhook subscriptions + delivery log
webhook_subscriptions: { partitionKeyPath: '/productId' },
webhook_deliveries: { partitionKeyPath: '/pk', defaultTtl: 30 * 86400 },
// Generic Marketplace
marketplace_listings: { partitionKeyPath: '/productId' },
marketplace_reviews: { partitionKeyPath: '/listingId' },
marketplace_installs: { partitionKeyPath: '/userId' },
marketplace_certifications: { partitionKeyPath: '/listingId' },
marketplace_reports: { partitionKeyPath: '/listingId' },
marketplace_votes: { partitionKeyPath: '/listingId' },
// P2 — Product Intelligence
experiments: { partitionKeyPath: '/id' },
experiment_assignments: { partitionKeyPath: '/experimentId' },
// A/B Testing — Extended containers for Intelligent A/B Testing
ab_testing_variants: { partitionKeyPath: '/experimentId' },
ab_testing_events: { partitionKeyPath: '/experimentId', defaultTtl: 90 * 86400 },
ab_testing_metrics: { partitionKeyPath: '/experimentId' },
experiment_suggestions: { partitionKeyPath: '/productId', defaultTtl: 180 * 86400 },
analytics_rollups: { partitionKeyPath: '/productId' },
feedback: { partitionKeyPath: '/productId' },
impersonation_sessions: { partitionKeyPath: '/productId', defaultTtl: 90 * 86400 },
changelog: { partitionKeyPath: '/productId' },
// Remote Diagnostics (see docs/devops/REMOTE_DIAGNOSTICS_ROADMAP.md)
debug_sessions: { partitionKeyPath: '/id', defaultTtl: 7 * 86400 },
debug_traces: { partitionKeyPath: '/pk', defaultTtl: 7 * 86400 },
debug_logs: { partitionKeyPath: '/pk', defaultTtl: 3 * 86400 },
debug_screenshots: { partitionKeyPath: '/sessionId', defaultTtl: 7 * 86400 },
diagnostic_triggers: { partitionKeyPath: '/id' },
session_replays: { partitionKeyPath: '/pk', defaultTtl: 7 * 86400 },
performance_profiles: { partitionKeyPath: '/pk', defaultTtl: 7 * 86400 },
// Predictive Analytics
user_features: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },
product_health: { partitionKeyPath: '/productId' },
feature_definitions: { partitionKeyPath: '/productId' },
churn_predictions: { partitionKeyPath: '/userId', defaultTtl: 120 * 86400 },
retention_campaigns: { partitionKeyPath: '/productId' },
campaign_deliveries: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },
model_performance: { partitionKeyPath: '/id' },
// AI Diagnostics (see docs/roadmaps/AI_DIAGNOSTIC_ASSISTANT_ROADMAP.md)
error_clusters: { partitionKeyPath: '/productId', defaultTtl: 90 * 86400 },
error_fingerprints: { partitionKeyPath: '/fingerprintHash' },
diagnostic_insights: { partitionKeyPath: '/clusterId', defaultTtl: 90 * 86400 },
diagnostic_queries: { partitionKeyPath: '/userId', defaultTtl: 30 * 86400 },
proactive_alerts: { partitionKeyPath: '/productId', defaultTtl: 30 * 86400 },
// Onboarding analytics (Phase 4.3)
onboarding_events: { partitionKeyPath: '/productId' },
onboarding_completions: { partitionKeyPath: '/productId' },
// Broadcast Messaging & Surveys (see docs/roadmaps/not-started/platform_BROADCAST_SURVEY_ROADMAP.md)
broadcasts: { partitionKeyPath: '/productId' },
broadcast_deliveries: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },
broadcast_reads: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },
in_app_messages: { partitionKeyPath: '/userId', defaultTtl: 30 * 86400 },
surveys: { partitionKeyPath: '/productId' },
survey_responses: { partitionKeyPath: '/surveyId', defaultTtl: 365 * 86400 },
user_survey_states: { partitionKeyPath: '/userId', defaultTtl: 90 * 86400 },
// CDN Pipeline (P2)
cdn_assets: { partitionKeyPath: '/productId' },
cdn_purge_requests: { partitionKeyPath: '/productId', defaultTtl: 90 * 86400 },
cdn_origin_configs: { partitionKeyPath: '/productId' },
// Full-Text Search (P2)
search_index: { partitionKeyPath: '/productId' },
search_suggestions: { partitionKeyPath: '/productId', defaultTtl: 180 * 86400 },
// Billing Dunning (P2)
dunning_campaigns: { partitionKeyPath: '/productId' },
dunning_policies: { partitionKeyPath: '/productId' },
// Multi-Tenant (P3)
tenants: { partitionKeyPath: '/productId' },
tenant_members: { partitionKeyPath: '/tenantId' },
tenant_invites: { partitionKeyPath: '/tenantId', defaultTtl: 7 * 86400 },
// Data Retention (P3)
retention_policies: { partitionKeyPath: '/productId' },
retention_jobs: { partitionKeyPath: '/productId', defaultTtl: 365 * 86400 },
// Backup/Restore (P3)
backups: { partitionKeyPath: '/productId' },
restores: { partitionKeyPath: '/productId' },
backup_configs: { partitionKeyPath: '/productId' },
// API Versioning (P3)
api_versions: { partitionKeyPath: '/productId' },
api_version_pins: { partitionKeyPath: '/productId' },
// i18n (P3)
translations: { partitionKeyPath: '/locale' },
i18n_locales: { partitionKeyPath: '/locale' },
// Agent Gigafactory — fleet coordinator (see modules/fleet/README.md)
fleet_jobs: { partitionKeyPath: '/productId' },
fleet_runs: { partitionKeyPath: '/jobId' },
fleet_leases: { partitionKeyPath: '/jobId' },
fleet_factories: { partitionKeyPath: '/productId' },
fleet_profiles: { partitionKeyPath: '/productId' },
fleet_events: { partitionKeyPath: '/jobId' },
fleet_artifacts: { partitionKeyPath: '/jobId' },
};
export async function initCosmosIfNeeded(): Promise<void> {
registerContainers(CONTAINER_DEFS);
const shouldInit = config.NODE_ENV !== 'production' || process.env.COSMOS_AUTO_INIT === 'true';
if (!shouldInit) return;
try {
await initializeAllContainers();
process.stdout.write('[platform-service] Cosmos containers ensured\n');
} catch (err) {
const msg = err instanceof Error ? err.message : String(err);
process.stderr.write(`[platform-service] Cosmos init failed: ${msg}\n`);
}
}