318 lines
6.8 KiB
TypeScript
318 lines
6.8 KiB
TypeScript
/**
|
|
* Type definitions for Onebox
|
|
*/
|
|
|
|
// Service types
|
|
export interface IService {
|
|
id?: number;
|
|
name: string;
|
|
image: string;
|
|
registry?: string;
|
|
envVars: Record<string, string>;
|
|
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<string, string>;
|
|
}
|
|
|
|
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<string, string>;
|
|
envVars: Record<string, string>;
|
|
}
|
|
|
|
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<string, string>;
|
|
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<T = unknown> {
|
|
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;
|
|
}
|