UNPKG

recoder-shared

Version:

Shared types, utilities, and configurations for Recoder

850 lines (756 loc) 19.5 kB
/** * Project types and interfaces */ import { Timestamp, ProjectType, Environment, IntegrationType, RealityCheckConfig } from './common'; export enum ProjectStatus { PLANNING = 'planning', IN_PROGRESS = 'in_progress', GENERATING = 'generating', VALIDATING = 'validating', COMPLETED = 'completed', FAILED = 'failed', ARCHIVED = 'archived' } export enum ProjectVisibility { PRIVATE = 'private', TEAM = 'team', PUBLIC = 'public' } export interface Project { id: string; name: string; description: string; type: ProjectType; status: ProjectStatus; visibility: ProjectVisibility; configuration: ProjectConfiguration; plan: ProjectPlan; structure: ProjectStructure; dependencies: ProjectDependencies; integrations: ProjectIntegration[]; validation: ProjectValidation; deployment: DeploymentConfig; collaboration: ProjectCollaboration; metrics: ProjectMetrics; createdBy: string; teamMembers: string[]; tags: string[]; version: string; repositoryUrl?: string; timestamps: Timestamp; } export interface ProjectConfiguration { language: string; framework: string; targetEnvironment: Environment; qualityLevel: 'prototype' | 'production' | 'enterprise'; realityCheck: RealityCheckConfig; buildTools: string[]; packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun'; nodeVersion?: string; pythonVersion?: string; dockerSupport: boolean; cicdPipeline: boolean; } export interface ProjectPlan { requirements: Requirements; architecture: Architecture; timeline: Timeline; resources: ResourcePlanning; riskAssessment: RiskAssessment; qualityGates: QualityGate[]; } export interface Requirements { functional: FunctionalRequirement[]; nonFunctional: NonFunctionalRequirement[]; business: BusinessRequirement[]; technical: TechnicalRequirement[]; security: SecurityRequirement[]; compliance: ComplianceRequirement[]; } export interface FunctionalRequirement { id: string; title: string; description: string; priority: 'low' | 'medium' | 'high' | 'critical'; complexity: 'simple' | 'moderate' | 'complex' | 'very-complex'; userStory: string; acceptanceCriteria: string[]; dependencies: string[]; estimatedHours: number; status: 'pending' | 'in-progress' | 'completed' | 'blocked'; } export interface NonFunctionalRequirement { id: string; category: 'performance' | 'scalability' | 'security' | 'usability' | 'reliability' | 'maintainability'; requirement: string; metric: string; targetValue: string; priority: 'low' | 'medium' | 'high' | 'critical'; validationMethod: string; } export interface BusinessRequirement { id: string; stakeholder: string; requirement: string; businessValue: string; successCriteria: string[]; constraints: string[]; } export interface TechnicalRequirement { id: string; category: 'infrastructure' | 'integration' | 'data' | 'security' | 'performance'; requirement: string; specification: string; constraints: string[]; dependencies: string[]; } export interface SecurityRequirement { id: string; type: 'authentication' | 'authorization' | 'encryption' | 'data-protection' | 'audit' | 'compliance'; requirement: string; implementation: string; validationMethod: string; complianceStandards: string[]; } export interface ComplianceRequirement { id: string; standard: string; // GDPR, HIPAA, SOX, PCI-DSS, etc. requirement: string; implementation: string; evidence: string[]; auditTrail: boolean; } export interface Architecture { pattern: 'monolithic' | 'microservices' | 'serverless' | 'jamstack' | 'spa' | 'ssr'; components: ArchitectureComponent[]; dataFlow: DataFlow[]; integrationPoints: IntegrationPoint[]; scalabilityStrategy: ScalabilityStrategy; securityModel: SecurityModel; monitoringStrategy: MonitoringStrategy; } export interface ArchitectureComponent { id: string; name: string; type: 'frontend' | 'backend' | 'database' | 'cache' | 'queue' | 'storage' | 'cdn' | 'auth'; technology: string; responsibilities: string[]; interfaces: ComponentInterface[]; dependencies: string[]; scalingStrategy: string; monitoringRequirements: string[]; } export interface ComponentInterface { name: string; type: 'rest' | 'graphql' | 'grpc' | 'websocket' | 'message-queue' | 'database'; specification: string; authentication: boolean; rateLimit?: number; caching?: boolean; } export interface DataFlow { from: string; to: string; dataType: string; volume: 'low' | 'medium' | 'high' | 'extreme'; frequency: string; security: 'none' | 'encrypted' | 'authenticated' | 'both'; backup: boolean; } export interface IntegrationPoint { id: string; type: IntegrationType; provider: string; service: string; authentication: string; configuration: Record<string, any>; realImplementation: boolean; fallbackStrategy: string; monitoringEndpoints: string[]; } export interface ScalabilityStrategy { horizontal: boolean; vertical: boolean; autoScaling: boolean; loadBalancing: string; cachingStrategy: string; cdnStrategy: string; databaseScaling: string; } export interface SecurityModel { authentication: string; authorization: string; encryption: EncryptionConfig; dataProtection: DataProtectionConfig; auditLogging: boolean; threatModel: string[]; } export interface EncryptionConfig { inTransit: boolean; atRest: boolean; keyManagement: string; algorithms: string[]; } export interface DataProtectionConfig { classification: 'public' | 'internal' | 'confidential' | 'restricted'; retention: string; anonymization: boolean; backupEncryption: boolean; } export interface MonitoringStrategy { metrics: string[]; logging: LoggingConfig; alerting: AlertingConfig; tracing: boolean; healthChecks: string[]; } export interface LoggingConfig { level: 'error' | 'warn' | 'info' | 'debug' | 'trace'; structured: boolean; retention: string; aggregation: boolean; } export interface AlertingConfig { channels: string[]; severityLevels: string[]; escalationRules: string[]; silencingRules: string[]; } export interface Timeline { phases: ProjectPhase[]; milestones: Milestone[]; dependencies: PhaseDependency[]; estimatedDuration: string; bufferTime: string; deliveryDate: string; } export interface ProjectPhase { id: string; name: string; description: string; duration: string; startDate: string; endDate: string; deliverables: string[]; resources: string[]; dependencies: string[]; status: 'not-started' | 'in-progress' | 'completed' | 'blocked' | 'delayed'; } export interface Milestone { id: string; name: string; description: string; dueDate: string; criteria: string[]; dependencies: string[]; status: 'pending' | 'achieved' | 'missed' | 'at-risk'; } export interface PhaseDependency { from: string; to: string; type: 'finish-to-start' | 'start-to-start' | 'finish-to-finish' | 'start-to-finish'; lag: string; } export interface ResourcePlanning { roles: RoleRequirement[]; skills: SkillRequirement[]; tools: ToolRequirement[]; infrastructure: InfrastructureRequirement[]; budget: BudgetEstimate; } export interface RoleRequirement { role: string; count: number; duration: string; skills: string[]; level: 'junior' | 'mid' | 'senior' | 'lead'; } export interface SkillRequirement { skill: string; level: 'basic' | 'intermediate' | 'advanced' | 'expert'; critical: boolean; alternatives: string[]; } export interface ToolRequirement { name: string; type: 'development' | 'testing' | 'deployment' | 'monitoring' | 'collaboration'; cost: 'free' | 'paid' | 'enterprise'; license: string; alternatives: string[]; } export interface InfrastructureRequirement { component: string; specification: string; environment: Environment; cost: string; scaling: 'fixed' | 'dynamic'; } export interface BudgetEstimate { development: number; infrastructure: number; tools: number; thirdParty: number; maintenance: number; total: number; currency: string; } export interface RiskAssessment { risks: ProjectRisk[]; mitigationStrategies: MitigationStrategy[]; contingencyPlans: ContingencyPlan[]; riskScore: number; } export interface ProjectRisk { id: string; category: 'technical' | 'business' | 'operational' | 'external' | 'security'; description: string; probability: 'low' | 'medium' | 'high'; impact: 'low' | 'medium' | 'high' | 'critical'; riskScore: number; owner: string; status: 'open' | 'mitigated' | 'accepted' | 'transferred' | 'closed'; } export interface MitigationStrategy { riskId: string; strategy: string; actions: string[]; owner: string; timeline: string; cost: number; effectiveness: number; } export interface ContingencyPlan { trigger: string; actions: string[]; resources: string[]; timeline: string; approvalRequired: boolean; } export interface QualityGate { id: string; name: string; phase: string; criteria: QualityCriterion[]; automatedChecks: string[]; manualReviews: string[]; exitCriteria: string[]; } export interface QualityCriterion { metric: string; threshold: string; measurement: string; critical: boolean; } export interface ProjectStructure { directories: DirectoryStructure[]; files: FileStructure[]; conventions: NamingConvention[]; patterns: StructurePattern[]; } export interface DirectoryStructure { path: string; purpose: string; contents: string[]; permissions: string; gitIgnore: boolean; } export interface FileStructure { path: string; type: string; template: string; generated: boolean; critical: boolean; } export interface NamingConvention { type: 'file' | 'directory' | 'variable' | 'function' | 'class' | 'constant'; pattern: string; description: string; examples: string[]; } export interface StructurePattern { name: string; description: string; structure: string[]; benefits: string[]; constraints: string[]; } export interface ProjectDependencies { runtime: Dependency[]; development: Dependency[]; peer: Dependency[]; optional: Dependency[]; security: SecurityDependency[]; licensing: LicensingInfo[]; } export interface Dependency { name: string; version: string; type: 'production' | 'development' | 'peer' | 'optional'; source: string; purpose: string; alternatives: string[]; critical: boolean; vulnerabilities: Vulnerability[]; } export interface SecurityDependency { name: string; version: string; vulnerabilities: Vulnerability[]; securityRating: 'low' | 'medium' | 'high' | 'critical'; lastAudit: string; mitigations: string[]; } export interface Vulnerability { id: string; severity: 'low' | 'medium' | 'high' | 'critical'; description: string; cwe: string; cvss: number; fixedIn?: string; workaround?: string; } export interface LicensingInfo { dependency: string; license: string; compatible: boolean; restrictions: string[]; attribution: boolean; } export interface ProjectIntegration { id: string; type: IntegrationType; provider: string; service: string; configuration: IntegrationConfiguration; authentication: AuthenticationConfig; validation: IntegrationValidation; monitoring: IntegrationMonitoring; fallback: FallbackConfig; } export interface IntegrationConfiguration { endpoint: string; version: string; environment: Environment; parameters: Record<string, any>; headers: Record<string, string>; timeout: number; retryPolicy: RetryPolicy; } export interface AuthenticationConfig { type: 'none' | 'api-key' | 'oauth' | 'jwt' | 'certificate' | 'basic'; credentials: string; // encrypted refreshable: boolean; expiration?: string; } export interface RetryPolicy { maxAttempts: number; backoffStrategy: 'linear' | 'exponential' | 'fixed'; baseDelay: number; maxDelay: number; retryOn: string[]; } export interface IntegrationValidation { healthCheck: string; testCases: IntegrationTestCase[]; lastValidation: string; status: 'healthy' | 'degraded' | 'down' | 'unknown'; responseTime: number; } export interface IntegrationTestCase { name: string; request: any; expectedResponse: any; validations: string[]; critical: boolean; } export interface IntegrationMonitoring { metrics: string[]; alerts: string[]; dashboards: string[]; logging: boolean; tracing: boolean; } export interface FallbackConfig { enabled: boolean; strategy: 'circuit-breaker' | 'cache' | 'alternative-service' | 'degraded-mode'; configuration: Record<string, any>; testScenarios: string[]; } export interface ProjectValidation { status: 'pending' | 'in-progress' | 'passed' | 'failed' | 'warning'; checks: ValidationCheck[]; realityChecks: RealityCheck[]; securityChecks: SecurityCheck[]; performanceChecks: PerformanceCheck[]; lastValidation: string; score: number; } export interface ValidationCheck { id: string; name: string; category: 'syntax' | 'semantic' | 'security' | 'performance' | 'best-practices' | 'reality'; status: 'passed' | 'failed' | 'warning' | 'skipped'; message: string; severity: 'info' | 'warning' | 'error' | 'critical'; file?: string; line?: number; column?: number; fix?: string; } export interface RealityCheck { id: string; name: string; description: string; category: 'integration' | 'dependency' | 'configuration' | 'data' | 'security'; result: 'real' | 'mock' | 'placeholder' | 'incomplete'; evidence: string[]; recommendations: string[]; impact: 'low' | 'medium' | 'high' | 'critical'; } export interface SecurityCheck { id: string; rule: string; severity: 'low' | 'medium' | 'high' | 'critical'; category: string; description: string; file: string; line: number; evidence: string; remediation: string; cwe?: string; owasp?: string; } export interface PerformanceCheck { id: string; metric: string; value: number; threshold: number; status: 'passed' | 'warning' | 'failed'; impact: string; recommendations: string[]; } export interface DeploymentConfig { strategy: 'manual' | 'ci-cd' | 'gitops'; environments: EnvironmentConfig[]; pipeline: PipelineStage[]; rollback: RollbackConfig; monitoring: DeploymentMonitoring; } export interface EnvironmentConfig { name: Environment; url?: string; variables: Record<string, string>; secrets: string[]; infrastructure: InfrastructureConfig; scaling: ScalingConfig; } export interface InfrastructureConfig { provider: string; region: string; instances: InstanceConfig[]; networking: NetworkConfig; storage: StorageConfig; monitoring: boolean; } export interface InstanceConfig { type: string; count: number; cpu: string; memory: string; storage: string; os: string; } export interface NetworkConfig { vpc: string; subnets: string[]; loadBalancer: boolean; cdn: boolean; ssl: boolean; } export interface StorageConfig { databases: DatabaseConfig[]; fileStorage: FileStorageConfig[]; cache: CacheConfig[]; } export interface DatabaseConfig { type: string; size: string; backup: boolean; encryption: boolean; multiAz: boolean; } export interface FileStorageConfig { type: string; size: string; backup: boolean; encryption: boolean; cdn: boolean; } export interface CacheConfig { type: string; size: string; replication: boolean; persistence: boolean; } export interface ScalingConfig { autoScaling: boolean; minInstances: number; maxInstances: number; targetCpu: number; targetMemory: number; scaleUpPolicy: string; scaleDownPolicy: string; } export interface PipelineStage { name: string; type: 'build' | 'test' | 'security-scan' | 'deploy' | 'verify'; commands: string[]; environment: Record<string, string>; artifacts: string[]; parallelizable: boolean; timeout: number; retryPolicy: RetryPolicy; approvalRequired: boolean; } export interface RollbackConfig { strategy: 'immediate' | 'gradual' | 'manual'; triggers: string[]; maxRollbacks: number; dataBackup: boolean; notifications: string[]; } export interface DeploymentMonitoring { healthChecks: string[]; metrics: string[]; alerts: string[]; canaryAnalysis: boolean; rollbackTriggers: string[]; } export interface ProjectCollaboration { team: TeamMember[]; permissions: ProjectPermission[]; workflows: WorkflowConfig[]; communications: CommunicationConfig; } export interface TeamMember { userId: string; role: 'owner' | 'admin' | 'developer' | 'reviewer' | 'viewer'; permissions: string[]; joinedAt: string; lastActivity: string; } export interface ProjectPermission { resource: string; actions: string[]; roles: string[]; conditions: string[]; } export interface WorkflowConfig { name: string; triggers: string[]; steps: WorkflowStep[]; notifications: string[]; approval: ApprovalConfig; } export interface WorkflowStep { name: string; type: 'automated' | 'manual' | 'approval'; action: string; conditions: string[]; timeout: number; retryPolicy: RetryPolicy; } export interface ApprovalConfig { required: boolean; approvers: string[]; minApprovals: number; timeout: number; autoApprove: string[]; } export interface CommunicationConfig { channels: CommunicationChannel[]; notifications: NotificationRule[]; integrations: string[]; } export interface CommunicationChannel { type: 'slack' | 'teams' | 'discord' | 'email' | 'webhook'; configuration: Record<string, any>; events: string[]; active: boolean; } export interface NotificationRule { event: string; channels: string[]; recipients: string[]; template: string; conditions: string[]; } export interface ProjectMetrics { progress: ProgressMetrics; quality: QualityMetrics; performance: PerformanceMetrics; collaboration: CollaborationMetrics; deployment: DeploymentMetrics; } export interface ProgressMetrics { completedRequirements: number; totalRequirements: number; completedTasks: number; totalTasks: number; milestonesAchieved: number; totalMilestones: number; burndownRate: number; velocityTrend: number[]; } export interface QualityMetrics { codeQuality: number; testCoverage: number; bugDensity: number; technicalDebt: number; securityScore: number; performanceScore: number; maintainabilityIndex: number; } export interface PerformanceMetrics { buildTime: number; deploymentTime: number; responseTime: number; throughput: number; errorRate: number; availability: number; } export interface CollaborationMetrics { teamVelocity: number; communicationFrequency: number; knowledgeSharing: number; conflictResolution: number; memberSatisfaction: number; } export interface DeploymentMetrics { frequency: number; successRate: number; rollbackRate: number; leadTime: number; recoveryTime: number; } export interface CreateProjectRequest { name: string; description: string; type: ProjectType; visibility: ProjectVisibility; configuration: Partial<ProjectConfiguration>; requirements?: Partial<Requirements>; teamMembers?: string[]; tags?: string[]; } export interface UpdateProjectRequest { name?: string; description?: string; status?: ProjectStatus; visibility?: ProjectVisibility; configuration?: Partial<ProjectConfiguration>; plan?: Partial<ProjectPlan>; teamMembers?: string[]; tags?: string[]; }