- 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
28 lines
774 B
TypeScript
28 lines
774 B
TypeScript
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;
|
|
}
|