@restnfeel/agentc-starter-kit
Version:
한국어 기업용 CMS 모듈 - Task Master AI와 함께 빠르게 웹사이트를 구현할 수 있는 재사용 가능한 컴포넌트 시스템
593 lines (540 loc) • 13.9 kB
text/typescript
// Cache Types and Interfaces for AgentC CMS Caching System
export type CacheLevel = "browser" | "cdn" | "server" | "database" | "memory";
export type CacheStrategy =
| "ttl"
| "lru"
| "lfu"
| "invalidation-based"
| "write-through"
| "write-behind";
export type CacheProvider =
| "redis"
| "memcached"
| "cloudflare"
| "aws-cloudfront"
| "azure-cdn"
| "memory"
| "browser";
export type ContentType =
| "static-asset"
| "component-data"
| "api-response"
| "template-data"
| "user-session"
| "page-content";
export type CacheStatus =
| "hit"
| "miss"
| "expired"
| "invalid"
| "warming"
| "error";
export type InvalidationStrategy =
| "manual"
| "time-based"
| "version-based"
| "tag-based"
| "dependency-based";
// Core Cache Configuration
export interface CacheConfig {
level: CacheLevel;
strategy: CacheStrategy;
provider: CacheProvider;
ttl: number; // Time to live in seconds
maxSize?: number; // Maximum cache size in MB
maxItems?: number; // Maximum number of cached items
compression?: boolean;
encryption?: boolean;
region?: string; // For CDN configurations
endpoint?: string; // For custom cache endpoints
credentials?: CacheCredentials;
}
export interface CacheCredentials {
apiKey?: string;
secretKey?: string;
region?: string;
endpoint?: string;
token?: string;
}
// Cache Entry Structure
export interface CacheEntry<T = any> {
key: string;
value: T;
contentType: ContentType;
metadata: CacheMetadata;
headers?: Record<string, string>;
etag?: string;
lastModified: Date;
createdAt: Date;
expiresAt: Date;
accessCount: number;
lastAccessed: Date;
size: number; // Size in bytes
compressed: boolean;
encrypted: boolean;
tags: string[];
dependencies: string[];
}
export interface CacheMetadata {
source: string; // Origin of the cached data
version: string;
checksum: string;
mimeType?: string;
encoding?: string;
originalSize: number;
compressedSize?: number;
cacheLevel: CacheLevel;
strategy: CacheStrategy;
priority: number; // 1-10, higher = more important
cost: number; // Cost to regenerate/fetch
}
// Cache Statistics and Metrics
export interface CacheStats {
hitRate: number; // Percentage of cache hits
missRate: number; // Percentage of cache misses
hitCount: number;
missCount: number;
totalRequests: number;
averageResponseTime: number;
medianResponseTime: number;
p95ResponseTime: number;
p99ResponseTime: number;
totalSize: number; // Total cache size in bytes
itemCount: number;
evictionCount: number;
errorCount: number;
lastReset: Date;
uptime: number; // Uptime in seconds
}
export interface CachePerformanceMetrics {
cacheLevel: CacheLevel;
provider: CacheProvider;
stats: CacheStats;
networkMetrics: NetworkMetrics;
resourceUtilization: ResourceUtilization;
costMetrics: CostMetrics;
trends: PerformanceTrends;
alerts: CacheAlert[];
}
export interface NetworkMetrics {
bandwidth: number; // MB/s
latency: number; // ms
throughput: number; // requests/s
errorRate: number; // percentage
timeouts: number;
connections: number;
bytesTransferred: number;
requestsPerSecond: number;
}
export interface ResourceUtilization {
cpuUsage: number; // percentage
memoryUsage: number; // percentage
diskUsage: number; // percentage
networkUsage: number; // percentage
connectionPool: number; // active connections
}
export interface CostMetrics {
storageCost: number; // USD per month
bandwidthCost: number; // USD per month
computeCost: number; // USD per month
totalCost: number; // USD per month
costPerRequest: number; // USD
savings: number; // USD saved through caching
}
export interface PerformanceTrends {
hitRateTrend: number[]; // Last 24 hours
responseTrend: number[]; // Response times
errorTrend: number[]; // Error rates
costTrend: number[]; // Cost over time
usageTrend: number[]; // Usage patterns
}
// Cache Invalidation
export interface CacheInvalidation {
strategy: InvalidationStrategy;
trigger: InvalidationTrigger;
scope: InvalidationScope;
pattern?: string; // For pattern-based invalidation
tags?: string[]; // For tag-based invalidation
dependencies?: string[]; // For dependency-based invalidation
timestamp: Date;
reason: string;
executedBy: string;
}
export interface InvalidationTrigger {
type: "manual" | "automatic" | "scheduled" | "event-based";
source: string;
condition?: string;
schedule?: CronSchedule;
event?: string;
}
export interface InvalidationScope {
level: CacheLevel[];
contentTypes: ContentType[];
keys?: string[];
patterns?: string[];
tags?: string[];
excludeKeys?: string[];
}
export interface CronSchedule {
pattern: string; // Cron pattern
timezone: string;
enabled: boolean;
nextRun: Date;
lastRun?: Date;
}
// CDN Configuration
export interface CDNConfig extends CacheConfig {
provider:
| "cloudflare"
| "aws-cloudfront"
| "azure-cdn"
| "google-cdn"
| "fastly"
| "keycdn";
distributionId?: string;
zones: CDNZone[];
behaviors: CDNBehavior[];
headers: CDNHeaderConfig;
compression: CompressionConfig;
security: CDNSecurityConfig;
analytics: boolean;
logging: boolean;
purgeApi: boolean;
}
export interface CDNZone {
name: string;
region: string;
enabled: boolean;
ttl: number;
origin: string;
customDomain?: string;
ssl: boolean;
http2: boolean;
ipv6: boolean;
}
export interface CDNBehavior {
pathPattern: string;
cachingDisabled: boolean;
ttl: number;
queryStringCaching: boolean;
headerCaching: string[];
compression: boolean;
contentTypes: string[];
methods: string[];
}
export interface CDNHeaderConfig {
cacheControl: string;
vary: string[];
customHeaders: Record<string, string>;
corsHeaders: CORSConfig;
securityHeaders: SecurityHeaders;
}
export interface CompressionConfig {
enabled: boolean;
algorithms: ("gzip" | "brotli" | "deflate")[];
minSize: number; // Minimum file size to compress (bytes)
contentTypes: string[];
level: number; // Compression level 1-9
}
export interface CDNSecurityConfig {
hotlinkProtection: boolean;
ipWhitelist: string[];
ipBlacklist: string[];
rateLimiting: RateLimitConfig;
ddosProtection: boolean;
waf: boolean;
botProtection: boolean;
}
export interface CORSConfig {
allowedOrigins: string[];
allowedMethods: string[];
allowedHeaders: string[];
exposedHeaders: string[];
credentials: boolean;
maxAge: number;
}
export interface SecurityHeaders {
xFrameOptions: string;
xContentTypeOptions: string;
xXSSProtection: string;
referrerPolicy: string;
contentSecurityPolicy: string;
strictTransportSecurity: string;
}
export interface RateLimitConfig {
enabled: boolean;
requestsPerMinute: number;
requestsPerHour: number;
requestsPerDay: number;
burstLimit: number;
whitelist: string[];
action: "block" | "throttle" | "captcha";
}
// Browser Cache Configuration
export interface BrowserCacheConfig extends CacheConfig {
serviceWorker: boolean;
localStorage: boolean;
sessionStorage: boolean;
indexedDB: boolean;
cacheAPI: boolean;
maxAge: number;
staleWhileRevalidate: number;
cacheFirst: boolean;
networkFirst: boolean;
offlineSupport: boolean;
}
// Server Cache Configuration
export interface ServerCacheConfig extends CacheConfig {
redis?: RedisConfig;
memcached?: MemcachedConfig;
memory?: MemoryConfig;
clustering: boolean;
sharding: boolean;
replication: boolean;
persistence: boolean;
backupSchedule?: CronSchedule;
}
export interface RedisConfig {
host: string;
port: number;
password?: string;
database: number;
cluster: boolean;
sentinel: boolean;
maxConnections: number;
connectionTimeout: number;
commandTimeout: number;
retryAttempts: number;
}
export interface MemcachedConfig {
servers: string[];
timeout: number;
retries: number;
poolSize: number;
compression: boolean;
serialization: "json" | "msgpack" | "pickle";
}
export interface MemoryConfig {
maxSize: number; // MB
algorithm: "lru" | "lfu" | "fifo";
checkPeriod: number; // seconds
gcInterval: number; // seconds
}
// Cache Alerts and Monitoring
export interface CacheAlert {
id: string;
type: AlertType;
severity: AlertSeverity;
message: string;
description: string;
threshold: number;
currentValue: number;
triggerTime: Date;
resolvedTime?: Date;
status: AlertStatus;
cacheLevel: CacheLevel;
provider: CacheProvider;
actions: AlertAction[];
}
export type AlertType =
| "hit-rate-low"
| "miss-rate-high"
| "response-time-high"
| "error-rate-high"
| "storage-full"
| "memory-usage-high"
| "connection-limit"
| "cost-threshold"
| "availability-low";
export type AlertSeverity = "low" | "medium" | "high" | "critical";
export type AlertStatus = "active" | "resolved" | "acknowledged" | "suppressed";
export interface AlertAction {
type: "email" | "sms" | "webhook" | "auto-scale" | "invalidate" | "failover";
enabled: boolean;
config: Record<string, any>;
conditions: string[];
}
// Cache Warming and Preloading
export interface CacheWarmingConfig {
enabled: boolean;
schedule: CronSchedule;
urls: string[];
patterns: string[];
priority: number;
concurrency: number;
timeout: number;
retries: number;
userAgents: string[];
headers: Record<string, string>;
}
export interface CachePreloadRequest {
key: string;
url: string;
contentType: ContentType;
priority: number;
headers?: Record<string, string>;
method: string;
body?: any;
timeout: number;
}
// Cache API Interfaces
export interface ICacheProvider {
get<T>(key: string): Promise<CacheEntry<T> | null>;
set<T>(key: string, value: T, options?: CacheSetOptions): Promise<boolean>;
delete(key: string): Promise<boolean>;
clear(pattern?: string): Promise<boolean>;
exists(key: string): Promise<boolean>;
ttl(key: string): Promise<number>;
keys(pattern?: string): Promise<string[]>;
stats(): Promise<CacheStats>;
health(): Promise<HealthStatus>;
}
export interface CacheSetOptions {
ttl?: number;
tags?: string[];
dependencies?: string[];
priority?: number;
metadata?: Partial<CacheMetadata>;
headers?: Record<string, string>;
compress?: boolean;
encrypt?: boolean;
}
export interface HealthStatus {
status: "healthy" | "degraded" | "unhealthy";
uptime: number;
lastCheck: Date;
responseTime: number;
issues: string[];
metrics: CacheStats;
}
// Cache Management API
export interface CacheManagerAPI {
// Configuration
configure(config: CacheConfig): Promise<void>;
getConfig(): Promise<CacheConfig>;
updateConfig(updates: Partial<CacheConfig>): Promise<void>;
// Cache Operations
get<T>(key: string, level?: CacheLevel): Promise<T | null>;
set<T>(key: string, value: T, options?: CacheSetOptions): Promise<void>;
invalidate(request: CacheInvalidation): Promise<void>;
warm(config: CacheWarmingConfig): Promise<void>;
preload(requests: CachePreloadRequest[]): Promise<void>;
// Monitoring and Analytics
getStats(level?: CacheLevel): Promise<CachePerformanceMetrics>;
getAlerts(): Promise<CacheAlert[]>;
exportMetrics(format: "json" | "csv" | "prometheus"): Promise<string>;
// Management
flush(level?: CacheLevel): Promise<void>;
backup(): Promise<string>; // Returns backup ID
restore(backupId: string): Promise<void>;
optimize(): Promise<void>;
}
// Event System
export interface CacheEvent {
type: CacheEventType;
level: CacheLevel;
provider: CacheProvider;
key?: string;
contentType?: ContentType;
timestamp: Date;
data: Record<string, any>;
metadata: {
source: string;
version: string;
traceId: string;
};
}
export type CacheEventType =
| "cache-hit"
| "cache-miss"
| "cache-set"
| "cache-delete"
| "cache-invalidate"
| "cache-warm"
| "cache-error"
| "cache-full"
| "cache-expired"
| "provider-connect"
| "provider-disconnect"
| "alert-triggered"
| "alert-resolved";
export interface CacheEventListener {
eventTypes: CacheEventType[];
handler: (event: CacheEvent) => void;
filters?: Record<string, any>;
priority: number;
}
// Integration with AgentC Components
export interface ComponentCacheConfig {
componentType: string; // HeroSection, CTASection, etc.
cacheStrategy: CacheStrategy;
ttl: number;
invalidationTriggers: string[];
dependencies: string[];
priority: number;
preprocessing?: ComponentPreprocessConfig;
}
export interface ComponentPreprocessConfig {
minify: boolean;
compress: boolean;
optimize: boolean;
bundleCSS: boolean;
bundleJS: boolean;
generateETags: boolean;
responsive: boolean;
}
// Cache Policies
export interface CachePolicy {
name: string;
description: string;
rules: CachePolicyRule[];
priority: number;
enabled: boolean;
environments: string[];
createdAt: Date;
updatedAt: Date;
createdBy: string;
}
export interface CachePolicyRule {
condition: string; // JavaScript expression
action: CachePolicyAction;
weight: number;
description: string;
}
export interface CachePolicyAction {
type: "cache" | "bypass" | "redirect" | "modify";
config: CacheConfig;
headers?: Record<string, string>;
redirectUrl?: string;
modifications?: Record<string, any>;
}
// Export all interfaces
export default {
// Types
CacheLevel,
CacheStrategy,
CacheProvider,
ContentType,
CacheStatus,
InvalidationStrategy,
AlertType,
AlertSeverity,
AlertStatus,
CacheEventType,
// Main interfaces
CacheConfig,
CacheEntry,
CacheMetadata,
CacheStats,
CachePerformanceMetrics,
CacheInvalidation,
CDNConfig,
BrowserCacheConfig,
ServerCacheConfig,
CacheAlert,
ICacheProvider,
CacheManagerAPI,
CacheEvent,
ComponentCacheConfig,
CachePolicy,
};