/** * Template Registry - Manages templates across providers and categories */ import { EventEmitter } from "../shared/event-emitter"; import type { AlimTalkTemplate, TemplateCategory, TemplateStatus } from "../types/template.types"; export interface TemplateSearchFilters { provider?: string; category?: TemplateCategory; status?: TemplateStatus; nameContains?: string; codeContains?: string; createdAfter?: Date; createdBefore?: Date; usageMin?: number; usageMax?: number; } export interface TemplateSearchOptions { page?: number; limit?: number; sortBy?: "name" | "code" | "createdAt" | "updatedAt" | "usage"; sortOrder?: "asc" | "desc"; } export interface TemplateSearchResult { templates: AlimTalkTemplate[]; total: number; page: number; limit: number; hasMore: boolean; } export interface TemplateVersion { version: number; template: AlimTalkTemplate; changes: string[]; createdAt: Date; createdBy?: string; } export interface TemplateHistory { templateId: string; versions: TemplateVersion[]; currentVersion: number; } export interface TemplateUsageStats { templateId: string; totalSent: number; totalDelivered: number; totalFailed: number; deliveryRate: number; failureRate: number; lastUsed?: Date; usageByDay: Array<{ date: string; sent: number; delivered: number; failed: number; }>; } export interface TemplateRegistryOptions { enableVersioning: boolean; maxVersionsPerTemplate: number; enableUsageTracking: boolean; enableAutoBackup: boolean; backupInterval: number; enableValidationOnRegister: boolean; } export declare class TemplateRegistry extends EventEmitter { private templates; private templatesByCode; private templatesByProvider; private templatesByCategory; private templateHistories; private usageStats; private backupTimer?; private defaultOptions; private options; constructor(options?: Partial); /** * Register a new template */ register(template: AlimTalkTemplate): Promise; /** * Update an existing template */ update(templateId: string, updates: Partial): Promise; /** * Get template by ID */ get(templateId: string): AlimTalkTemplate | null; /** * Get template by code and provider */ getByCode(code: string, provider: string): AlimTalkTemplate | null; /** * Search templates with filters and pagination */ search(filters?: TemplateSearchFilters, options?: TemplateSearchOptions): TemplateSearchResult; /** * Get templates by provider */ getByProvider(provider: string): AlimTalkTemplate[]; /** * Get templates by category */ getByCategory(category: TemplateCategory): AlimTalkTemplate[]; /** * Delete template */ delete(templateId: string): Promise; /** * Get template version history */ getHistory(templateId: string): TemplateHistory | null; /** * Get specific template version */ getVersion(templateId: string, version: number): AlimTalkTemplate | null; /** * Restore template to a specific version */ restoreVersion(templateId: string, version: number): Promise; /** * Get template usage statistics */ getUsageStats(templateId: string): TemplateUsageStats | null; /** * Update template usage statistics */ updateUsageStats(templateId: string, stats: { sent?: number; delivered?: number; failed?: number; }): void; /** * Get registry statistics */ getStats(): { totalTemplates: number; byProvider: Record; byCategory: Record; byStatus: Record; }; /** * Export templates to JSON */ export(filters?: TemplateSearchFilters): string; /** * Import templates from JSON */ import(jsonData: string, options?: { overwrite?: boolean; }): Promise<{ imported: number; skipped: number; errors: string[]; }>; /** * Clear all templates (use with caution!) */ clear(): void; /** * Stop the registry and cleanup */ destroy(): void; private updateIndexes; private initializeVersionHistory; private addVersionToHistory; private initializeUsageStats; private startAutoBackup; }