/** * Type definitions for Onebox */ // Service types export interface IService { id?: number; name: string; image: string; registry?: string; envVars: Record; port: number; domain?: string; containerID?: string; status: 'stopped' | 'starting' | 'running' | 'stopping' | 'failed'; createdAt: number; updatedAt: number; // Onebox Registry fields useOneboxRegistry?: boolean; registryRepository?: string; registryImageTag?: string; autoUpdateOnPush?: boolean; imageDigest?: string; // Platform service requirements platformRequirements?: IPlatformRequirements; } // Registry types export interface IRegistry { id?: number; url: string; username: string; passwordEncrypted: string; createdAt: number; } // Registry token types export interface IRegistryToken { id?: number; name: string; tokenHash: string; type: 'global' | 'ci'; scope: 'all' | string[]; // 'all' or array of service names expiresAt: number | null; createdAt: number; lastUsedAt: number | null; createdBy: string; } export interface ICreateRegistryTokenRequest { name: string; type: 'global' | 'ci'; scope: 'all' | string[]; expiresIn: '30d' | '90d' | '365d' | 'never'; } export interface IRegistryTokenView { id: number; name: string; type: 'global' | 'ci'; scope: 'all' | string[]; scopeDisplay: string; expiresAt: number | null; createdAt: number; lastUsedAt: number | null; createdBy: string; isExpired: boolean; } export interface ITokenCreatedResponse { token: IRegistryTokenView; plainToken: string; // Only shown once at creation } // Platform service types export type TPlatformServiceType = 'mongodb' | 'minio' | 'redis' | 'postgresql' | 'rabbitmq' | 'caddy'; export type TPlatformResourceType = 'database' | 'bucket' | 'cache' | 'queue'; export type TPlatformServiceStatus = 'stopped' | 'starting' | 'running' | 'stopping' | 'failed'; export interface IPlatformService { id?: number; name: string; type: TPlatformServiceType; status: TPlatformServiceStatus; containerId?: string; config: IPlatformServiceConfig; adminCredentialsEncrypted?: string; createdAt: number; updatedAt: number; } export interface IPlatformServiceConfig { image: string; port: number; volumes?: string[]; command?: string; environment?: Record; } export interface IPlatformResource { id?: number; platformServiceId: number; serviceId: number; resourceType: TPlatformResourceType; resourceName: string; credentialsEncrypted: string; createdAt: number; } export interface IPlatformRequirements { mongodb?: boolean; s3?: boolean; } export interface IProvisionedResource { type: TPlatformResourceType; name: string; credentials: Record; envVars: Record; } export interface IEnvVarMapping { envVar: string; credentialPath: string; } // Nginx configuration types export interface INginxConfig { id?: number; serviceId: number; domain: string; port: number; sslEnabled: boolean; configTemplate: string; createdAt: number; updatedAt: number; } // Domain management types export interface IDomain { id?: number; domain: string; dnsProvider: 'cloudflare' | 'manual' | null; cloudflareZoneId?: string; isObsolete: boolean; defaultWildcard: boolean; createdAt: number; updatedAt: number; } export interface ICertificate { id?: number; domainId: number; certDomain: string; isWildcard: boolean; certPem: string; // Certificate PEM content keyPem: string; // Private key PEM content fullchainPem: string; // Full chain PEM content (cert + intermediates) expiryDate: number; issuer: string; isValid: boolean; createdAt: number; updatedAt: number; } export interface ICertRequirement { id?: number; serviceId: number; domainId: number; subdomain: string; certificateId?: number; status: 'pending' | 'active' | 'renewing'; createdAt: number; updatedAt: number; } export interface IDomainView { domain: IDomain; certificates: ICertificate[]; requirements: ICertRequirement[]; serviceCount: number; certificateStatus: 'valid' | 'expiring-soon' | 'expired' | 'pending' | 'none'; daysRemaining: number | null; } // SSL certificate type - stores certificate content directly in database export interface ISslCertificate { id?: number; domain: string; certPem: string; // Certificate PEM content keyPem: string; // Private key PEM content fullchainPem: string; // Full chain PEM content (cert + intermediates) expiryDate: number; issuer: string; createdAt: number; updatedAt: number; } // DNS record types export interface IDnsRecord { id?: number; domain: string; type: 'A' | 'AAAA' | 'CNAME'; value: string; cloudflareID?: string; createdAt: number; updatedAt: number; } // Metrics types export interface IMetric { id?: number; serviceId: number; timestamp: number; cpuPercent: number; memoryUsed: number; memoryLimit: number; networkRxBytes: number; networkTxBytes: number; } // Log entry types export interface ILogEntry { id?: number; serviceId: number; timestamp: number; message: string; level: 'info' | 'warn' | 'error' | 'debug'; source: 'stdout' | 'stderr'; } // User types export interface IUser { id?: number; username: string; passwordHash: string; role: 'admin' | 'user'; createdAt: number; updatedAt: number; } // Settings types export interface ISetting { key: string; value: string; updatedAt: number; } // Application settings export interface IAppSettings { serverIP?: string; cloudflareAPIKey?: string; cloudflareEmail?: string; cloudflareZoneID?: string; acmeEmail?: string; nginxConfigDir?: string; dataDir?: string; httpPort?: number; metricsInterval?: number; logRetentionDays?: number; } // Container stats from Docker export interface IContainerStats { cpuPercent: number; memoryUsed: number; memoryLimit: number; memoryPercent: number; networkRx: number; networkTx: number; } // Service deployment options export interface IServiceDeployOptions { name: string; image: string; registry?: string; envVars?: Record; port: number; domain?: string; autoSSL?: boolean; autoDNS?: boolean; // Onebox Registry options useOneboxRegistry?: boolean; registryImageTag?: string; autoUpdateOnPush?: boolean; // Platform service requirements enableMongoDB?: boolean; enableS3?: boolean; } // HTTP API request/response types export interface IApiResponse { success: boolean; data?: T; error?: string; message?: string; } export interface ILoginRequest { username: string; password: string; } export interface ILoginResponse { token: string; user: { username: string; role: string; }; } // CLI command types export interface ICliArgs { _: string[]; [key: string]: unknown; }