wulf-pulse/lib/services/addigy-factory.ts

29 lines
774 B
TypeScript
Raw Normal View History

Add Addigy API integration and Docker deployment with Redis caching - Implemented complete Addigy API v2 client with authentication via x-api-key - Added device and policy endpoints with automatic org ID resolution - Created field mapping from snake_case to Title Case for UI compatibility - Handles nested 'facts' response structure from Addigy devices API - Added comprehensive API documentation in ADDIGY_API_GUIDE.md - Multi-stage Dockerfile with optimized production build - Custom ports: App on 3100, Redis on 6380 (avoids conflicts) - Docker Compose orchestration with health checks - Standalone Next.js output for smaller container images - Non-root user execution for security - Implemented Redis caching layer for API responses - 5-minute TTL with graceful fallback if Redis unavailable - Cache key structure: service:entity:filter1:filter2 - Applied to Addigy devices endpoint with cache hit/miss logging - Fixed TypeScript strict mode errors for production builds - Added null safety checks with optional chaining throughout API routes - Wrapped useSearchParams in Suspense boundary for Next.js 15+ compatibility - Fixed type assertions for dynamic API responses - Corrected Set<string> type mismatches in device comparison logic - Created DOCKER_README.md with complete deployment guide - Updated ADDIGY_API_GUIDE.md with real-world API patterns - Documented response structures, field mappings, and troubleshooting - Next.js 16.0.0 with Turbopack - Redis 7 with AOF persistence - Podman/Docker compatible - TypeScript strict mode compliant
2025-10-28 22:49:08 -04:00
import { AddigyClient } from './addigy-client';
import { AddigyConfig } from '@/lib/types/addigy';
let cachedAddigyClient: AddigyClient | null = null;
export function getAddigyClient(): AddigyClient {
if (cachedAddigyClient) {
return cachedAddigyClient;
}
const config: AddigyConfig = {
apiUrl: process.env.ADDIGY_API_URL || 'https://api.addigy.com/api/v2',
apiToken: process.env.ADDIGY_API_TOKEN || '',
organizationId: process.env.ADDIGY_ORG_ID,
};
// Validate required config
if (!config.apiToken) {
throw new Error('ADDIGY_API_TOKEN environment variable is required');
}
cachedAddigyClient = new AddigyClient(config);
return cachedAddigyClient;
}
export function clearAddigyClientCache(): void {
cachedAddigyClient = null;
}