11/**
22 * Dependency injection factory for Auralyze Engine clients.
33 *
4- * Builds AuralyzeEngineDeps object containing HTTP clients for microservices
5- * (metadata, analysis, feedback) or stub clients for development/testing .
4+ * Builds AuralyzeEngineDeps object containing HTTP clients for microservices.
5+ * **STUBS DISABLED:** Always requires real service configuration or fails at startup .
66 *
77 * **Architecture:**
88 * Auralyze API orchestrates 3 microservices via HTTP:
99 * 1. **audio-metadata-service**: Extract file info with ffprobe
1010 * 2. **audio-analysis-service**: DSP processing (loudness, dynamics, spectrum, stereo)
11- * 3. **audio-feedback-service**: LLM-based feedback generation
11+ * 3. **audio-feedback-service**: LLM-based feedback generation (optional - can use OpenAI direct)
1212 *
1313 * **Client Selection Strategy:**
1414 * Controlled by environment variables (AppEnv):
15- * - `useStubClients=true`: Use stub clients for integration tests (no real services)
16- * - `FEEDBACK_MODE='stub'`: Stub feedback (real metadata + analysis)
1715 * - `FEEDBACK_MODE='service'`: HTTP feedback client (remote feedback service)
1816 * - `FEEDBACK_MODE='openai'`: OpenAI direct client (API calls OpenAI, no feedback service)
1917 *
2018 * **Why Dependency Injection?**
21- * - Testing: Swap real clients with stubs without modifying engine code
22- * - Flexibility: Support multiple feedback implementations (OpenAI direct, service, stub )
23- * - Development: Run API without spinning up all microservices (stub mode )
24- * - Configuration: Environment-driven client selection (dev vs prod )
19+ * - Testing: Engine tests can still use stubs by passing createStubDeps() directly
20+ * - Flexibility: Support multiple feedback implementations (OpenAI direct vs service )
21+ * - Fail Fast: Missing configuration causes immediate startup failure (not runtime errors )
22+ * - Configuration: Environment-driven client selection (service vs OpenAI direct )
2523 *
2624 * **API Key Authentication:**
2725 * All HTTP clients use x-api-key header for simple symmetric auth.
@@ -46,25 +44,9 @@ import type { AppEnv } from '../config/env.ts';
4644/**
4745 * Build AuralyzeEngineDeps from environment configuration.
4846 *
49- * **Configuration Modes:**
47+ * **STUBS DISABLED - Configuration Modes:**
5048 *
51- * **1. Full Stub Mode (Development/Testing):**
52- * ```env
53- * USE_STUB_CLIENTS=true
54- * ```
55- * Returns stub clients for all services (no HTTP calls).
56- *
57- * **2. Hybrid Mode (Real services + Stub feedback):**
58- * ```env
59- * METADATA_SERVICE_URL=http://localhost:3001
60- * METADATA_SERVICE_API_KEY=...
61- * ANALYSIS_SERVICE_URL=http://localhost:3002
62- * ANALYSIS_SERVICE_API_KEY=...
63- * FEEDBACK_MODE=stub
64- * ```
65- * Real metadata/analysis, stub feedback (for testing feedback logic).
66- *
67- * **3. Full Service Mode (Production):**
49+ * **1. Service Mode (Recommended for Production):**
6850 * ```env
6951 * METADATA_SERVICE_URL=http://metadata:3001
7052 * METADATA_SERVICE_API_KEY=...
@@ -76,7 +58,7 @@ import type { AppEnv } from '../config/env.ts';
7658 * ```
7759 * All clients use HTTP microservices.
7860 *
79- * **4 . OpenAI Direct Mode (Bypass feedback service):**
61+ * **2 . OpenAI Direct Mode (Bypass feedback service):**
8062 * ```env
8163 * METADATA_SERVICE_URL=http://metadata:3001
8264 * METADATA_SERVICE_API_KEY=...
@@ -106,10 +88,7 @@ import type { AppEnv } from '../config/env.ts';
10688 * ```
10789 */
10890export function buildEngineDeps ( env : AppEnv ) : AuralyzeEngineDeps {
109- if ( env . useStubClients ) {
110- return createStubDeps ( ) ;
111- }
112-
91+ // STUBS DISABLED: Always use real services or fail
11392 if ( ! env . METADATA_SERVICE_URL || ! env . ANALYSIS_SERVICE_URL ) {
11493 throw new Error ( 'Both METADATA_SERVICE_URL and ANALYSIS_SERVICE_URL are required' ) ;
11594 }
@@ -128,9 +107,7 @@ export function buildEngineDeps(env: AppEnv): AuralyzeEngineDeps {
128107 } ) ;
129108
130109 let feedbackClient : AuralyzeEngineDeps [ 'feedbackClient' ] ;
131- if ( env . FEEDBACK_MODE === 'stub' ) {
132- feedbackClient = createStubDeps ( ) . feedbackClient ;
133- } else if ( env . FEEDBACK_MODE === 'service' ) {
110+ if ( env . FEEDBACK_MODE === 'service' ) {
134111 if ( ! env . FEEDBACK_SERVICE_URL || ! env . FEEDBACK_SERVICE_API_KEY ) {
135112 throw new Error ( 'FEEDBACK_SERVICE_URL and FEEDBACK_SERVICE_API_KEY are required' ) ;
136113 }
0 commit comments