@loonylabs/tts-middleware 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -0
  3. package/dist/index.d.ts +22 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +39 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/middleware/services/tts/index.d.ts +30 -0
  8. package/dist/middleware/services/tts/index.d.ts.map +1 -0
  9. package/dist/middleware/services/tts/index.js +69 -0
  10. package/dist/middleware/services/tts/index.js.map +1 -0
  11. package/dist/middleware/services/tts/providers/azure-provider.d.ts +131 -0
  12. package/dist/middleware/services/tts/providers/azure-provider.d.ts.map +1 -0
  13. package/dist/middleware/services/tts/providers/azure-provider.js +375 -0
  14. package/dist/middleware/services/tts/providers/azure-provider.js.map +1 -0
  15. package/dist/middleware/services/tts/providers/base-tts-provider.d.ts +204 -0
  16. package/dist/middleware/services/tts/providers/base-tts-provider.d.ts.map +1 -0
  17. package/dist/middleware/services/tts/providers/base-tts-provider.js +267 -0
  18. package/dist/middleware/services/tts/providers/base-tts-provider.js.map +1 -0
  19. package/dist/middleware/services/tts/providers/edenai-provider.d.ts +112 -0
  20. package/dist/middleware/services/tts/providers/edenai-provider.d.ts.map +1 -0
  21. package/dist/middleware/services/tts/providers/edenai-provider.js +289 -0
  22. package/dist/middleware/services/tts/providers/edenai-provider.js.map +1 -0
  23. package/dist/middleware/services/tts/providers/index.d.ts +9 -0
  24. package/dist/middleware/services/tts/providers/index.d.ts.map +1 -0
  25. package/dist/middleware/services/tts/providers/index.js +29 -0
  26. package/dist/middleware/services/tts/providers/index.js.map +1 -0
  27. package/dist/middleware/services/tts/tts.service.d.ts +175 -0
  28. package/dist/middleware/services/tts/tts.service.d.ts.map +1 -0
  29. package/dist/middleware/services/tts/tts.service.js +287 -0
  30. package/dist/middleware/services/tts/tts.service.js.map +1 -0
  31. package/dist/middleware/services/tts/types/common.types.d.ts +303 -0
  32. package/dist/middleware/services/tts/types/common.types.d.ts.map +1 -0
  33. package/dist/middleware/services/tts/types/common.types.js +42 -0
  34. package/dist/middleware/services/tts/types/common.types.js.map +1 -0
  35. package/dist/middleware/services/tts/types/index.d.ts +22 -0
  36. package/dist/middleware/services/tts/types/index.d.ts.map +1 -0
  37. package/dist/middleware/services/tts/types/index.js +46 -0
  38. package/dist/middleware/services/tts/types/index.js.map +1 -0
  39. package/dist/middleware/services/tts/types/provider-options.types.d.ts +414 -0
  40. package/dist/middleware/services/tts/types/provider-options.types.d.ts.map +1 -0
  41. package/dist/middleware/services/tts/types/provider-options.types.js +71 -0
  42. package/dist/middleware/services/tts/types/provider-options.types.js.map +1 -0
  43. package/dist/middleware/services/tts/utils/character-counter.utils.d.ts +160 -0
  44. package/dist/middleware/services/tts/utils/character-counter.utils.d.ts.map +1 -0
  45. package/dist/middleware/services/tts/utils/character-counter.utils.js +205 -0
  46. package/dist/middleware/services/tts/utils/character-counter.utils.js.map +1 -0
  47. package/dist/middleware/services/tts/utils/index.d.ts +9 -0
  48. package/dist/middleware/services/tts/utils/index.d.ts.map +1 -0
  49. package/dist/middleware/services/tts/utils/index.js +25 -0
  50. package/dist/middleware/services/tts/utils/index.js.map +1 -0
  51. package/dist/middleware/services/tts/utils/logger.utils.d.ts +116 -0
  52. package/dist/middleware/services/tts/utils/logger.utils.d.ts.map +1 -0
  53. package/dist/middleware/services/tts/utils/logger.utils.js +186 -0
  54. package/dist/middleware/services/tts/utils/logger.utils.js.map +1 -0
  55. package/dist/middleware/shared/config/tts.config.d.ts +147 -0
  56. package/dist/middleware/shared/config/tts.config.d.ts.map +1 -0
  57. package/dist/middleware/shared/config/tts.config.js +162 -0
  58. package/dist/middleware/shared/config/tts.config.js.map +1 -0
  59. package/package.json +94 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * TTS Middleware Configuration
3
+ *
4
+ * @description Central configuration for TTS middleware
5
+ * Manages environment variables, provider settings, and validation
6
+ *
7
+ * @critical Configuration errors can prevent synthesis - validate early
8
+ */
9
+ import { TTSProvider } from '../../services/tts/types';
10
+ /**
11
+ * Azure Speech Services Configuration
12
+ */
13
+ export interface AzureConfig {
14
+ /**
15
+ * Azure Speech Services subscription key
16
+ * @env AZURE_SPEECH_KEY
17
+ * @required true
18
+ * @example 'abc123def456...'
19
+ */
20
+ KEY: string;
21
+ /**
22
+ * Azure region for Speech Services
23
+ * @env AZURE_SPEECH_REGION
24
+ * @required true
25
+ * @default 'germanywestcentral'
26
+ * @example 'germanywestcentral', 'westus', 'eastus'
27
+ */
28
+ REGION: string;
29
+ /**
30
+ * Custom Azure Speech endpoint (optional)
31
+ * @env AZURE_SPEECH_ENDPOINT
32
+ * @required false
33
+ * @example 'https://germanywestcentral.tts.speech.microsoft.com'
34
+ */
35
+ ENDPOINT?: string;
36
+ /**
37
+ * DSGVO/GDPR compliance flag
38
+ * @description When true, uses EU-based regions for data processing
39
+ * @default true (for German region)
40
+ */
41
+ DSGVO_COMPLIANT: boolean;
42
+ /**
43
+ * Free tier character limit per month
44
+ * @description Azure Free Tier: 500,000 characters/month
45
+ * @see https://azure.microsoft.com/en-us/pricing/details/cognitive-services/speech-services/
46
+ */
47
+ FREE_TIER_CHARS_PER_MONTH: number;
48
+ }
49
+ /**
50
+ * EdenAI Configuration
51
+ */
52
+ export interface EdenAIConfig {
53
+ /**
54
+ * EdenAI API key
55
+ * @env EDENAI_API_KEY
56
+ * @required true
57
+ * @example 'edenai_xxx...'
58
+ */
59
+ API_KEY: string;
60
+ }
61
+ /**
62
+ * TTS Middleware Configuration Object
63
+ */
64
+ export interface TTSConfig {
65
+ /**
66
+ * Default TTS provider
67
+ * @env TTS_DEFAULT_PROVIDER
68
+ * @default 'azure'
69
+ */
70
+ DEFAULT_PROVIDER: TTSProvider;
71
+ /**
72
+ * Azure Speech Services configuration
73
+ */
74
+ AZURE: AzureConfig;
75
+ /**
76
+ * EdenAI configuration
77
+ */
78
+ EDENAI: EdenAIConfig;
79
+ /**
80
+ * Enable debug logging
81
+ * @env TTS_DEBUG
82
+ * @default false
83
+ */
84
+ DEBUG: boolean;
85
+ /**
86
+ * Maximum text length per synthesis request
87
+ * @description Prevents excessive API costs
88
+ * @default 3000 (Azure limit)
89
+ */
90
+ MAX_TEXT_LENGTH: number;
91
+ /**
92
+ * Default audio format
93
+ * @default 'mp3'
94
+ */
95
+ DEFAULT_AUDIO_FORMAT: 'mp3' | 'wav' | 'opus';
96
+ /**
97
+ * Default sample rate in Hz
98
+ * @default 24000
99
+ */
100
+ DEFAULT_SAMPLE_RATE: number;
101
+ }
102
+ /**
103
+ * Load and validate TTS configuration from environment variables
104
+ *
105
+ * @returns {TTSConfig} Validated TTS configuration
106
+ * @throws {Error} If required environment variables are missing
107
+ *
108
+ * @example
109
+ * ```typescript
110
+ * const config = getTTSConfig();
111
+ * console.log(config.AZURE.REGION); // 'germanywestcentral'
112
+ * ```
113
+ */
114
+ export declare function getTTSConfig(): TTSConfig;
115
+ /**
116
+ * Validate TTS configuration
117
+ *
118
+ * @param {TTSConfig} config - Configuration to validate
119
+ * @throws {Error} If configuration is invalid
120
+ *
121
+ * @description
122
+ * Validates that all required configuration values are present and valid.
123
+ * Should be called before initializing TTS services.
124
+ *
125
+ * @example
126
+ * ```typescript
127
+ * const config = getTTSConfig();
128
+ * validateTTSConfig(config);
129
+ * // If validation passes, config is safe to use
130
+ * ```
131
+ */
132
+ export declare function validateTTSConfig(config: TTSConfig): void;
133
+ /**
134
+ * Singleton TTS configuration instance
135
+ *
136
+ * @description
137
+ * Pre-loaded and validated configuration for easy access across the application.
138
+ * Use this instead of calling getTTSConfig() multiple times.
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * import { TTS_CONFIG } from './tts.config';
143
+ * console.log(TTS_CONFIG.AZURE.REGION);
144
+ * ```
145
+ */
146
+ export declare const TTS_CONFIG: TTSConfig;
147
+ //# sourceMappingURL=tts.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts.config.d.ts","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,eAAe,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,gBAAgB,EAAE,WAAW,CAAC;IAE9B;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IAErB;;;;OAIG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,oBAAoB,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IAE7C;;;OAGG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,IAAI,SAAS,CAyCxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyEzD;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU,EAAE,SAA0B,CAAC"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ /**
3
+ * TTS Middleware Configuration
4
+ *
5
+ * @description Central configuration for TTS middleware
6
+ * Manages environment variables, provider settings, and validation
7
+ *
8
+ * @critical Configuration errors can prevent synthesis - validate early
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.TTS_CONFIG = void 0;
12
+ exports.getTTSConfig = getTTSConfig;
13
+ exports.validateTTSConfig = validateTTSConfig;
14
+ const types_1 = require("../../services/tts/types");
15
+ /**
16
+ * Load and validate TTS configuration from environment variables
17
+ *
18
+ * @returns {TTSConfig} Validated TTS configuration
19
+ * @throws {Error} If required environment variables are missing
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const config = getTTSConfig();
24
+ * console.log(config.AZURE.REGION); // 'germanywestcentral'
25
+ * ```
26
+ */
27
+ function getTTSConfig() {
28
+ // Read environment variables
29
+ const azureKey = process.env.AZURE_SPEECH_KEY || '';
30
+ const azureRegion = process.env.AZURE_SPEECH_REGION?.trim() || 'germanywestcentral';
31
+ const azureEndpoint = process.env.AZURE_SPEECH_ENDPOINT;
32
+ const edenaiApiKey = process.env.EDENAI_API_KEY || '';
33
+ const defaultProvider = process.env.TTS_DEFAULT_PROVIDER || types_1.TTSProvider.AZURE;
34
+ const debug = process.env.TTS_DEBUG === 'true';
35
+ // Determine DSGVO compliance based on region
36
+ const euRegions = [
37
+ 'germanywestcentral',
38
+ 'northeurope',
39
+ 'westeurope',
40
+ 'francecentral',
41
+ 'switzerlandnorth',
42
+ 'uksouth',
43
+ ];
44
+ const isDsgvoCompliant = euRegions.includes(azureRegion.toLowerCase());
45
+ // Build configuration object
46
+ const config = {
47
+ DEFAULT_PROVIDER: defaultProvider,
48
+ AZURE: {
49
+ KEY: azureKey,
50
+ REGION: azureRegion,
51
+ ENDPOINT: azureEndpoint,
52
+ DSGVO_COMPLIANT: isDsgvoCompliant,
53
+ FREE_TIER_CHARS_PER_MONTH: 500000,
54
+ },
55
+ EDENAI: {
56
+ API_KEY: edenaiApiKey,
57
+ },
58
+ DEBUG: debug,
59
+ MAX_TEXT_LENGTH: 3000,
60
+ DEFAULT_AUDIO_FORMAT: 'mp3',
61
+ DEFAULT_SAMPLE_RATE: 24000,
62
+ };
63
+ return config;
64
+ }
65
+ /**
66
+ * Validate TTS configuration
67
+ *
68
+ * @param {TTSConfig} config - Configuration to validate
69
+ * @throws {Error} If configuration is invalid
70
+ *
71
+ * @description
72
+ * Validates that all required configuration values are present and valid.
73
+ * Should be called before initializing TTS services.
74
+ *
75
+ * @example
76
+ * ```typescript
77
+ * const config = getTTSConfig();
78
+ * validateTTSConfig(config);
79
+ * // If validation passes, config is safe to use
80
+ * ```
81
+ */
82
+ function validateTTSConfig(config) {
83
+ const errors = [];
84
+ // Validate default provider
85
+ if (!config.DEFAULT_PROVIDER) {
86
+ errors.push('DEFAULT_PROVIDER is required');
87
+ }
88
+ const validProviders = Object.values(types_1.TTSProvider);
89
+ if (!validProviders.includes(config.DEFAULT_PROVIDER)) {
90
+ errors.push(`DEFAULT_PROVIDER must be one of: ${validProviders.join(', ')}`);
91
+ }
92
+ // Validate Azure configuration (required for MVP)
93
+ if (config.DEFAULT_PROVIDER === types_1.TTSProvider.AZURE) {
94
+ if (!config.AZURE.KEY) {
95
+ errors.push('AZURE_SPEECH_KEY is required when using Azure provider (set in environment variable)');
96
+ }
97
+ if (!config.AZURE.REGION) {
98
+ errors.push('AZURE_SPEECH_REGION is required when using Azure provider (set in environment variable)');
99
+ }
100
+ // Validate region format (should be lowercase, no spaces)
101
+ if (config.AZURE.REGION && /\s/.test(config.AZURE.REGION)) {
102
+ errors.push('AZURE_SPEECH_REGION cannot contain spaces');
103
+ }
104
+ // Validate key format (should be alphanumeric, allow hyphens for testing)
105
+ if (config.AZURE.KEY &&
106
+ !/^[a-zA-Z0-9-]+$/.test(config.AZURE.KEY) &&
107
+ config.AZURE.KEY !== '') {
108
+ errors.push('AZURE_SPEECH_KEY should be alphanumeric');
109
+ }
110
+ // Validate endpoint format if provided
111
+ if (config.AZURE.ENDPOINT && !config.AZURE.ENDPOINT.startsWith('https://')) {
112
+ errors.push('AZURE_SPEECH_ENDPOINT must start with https://');
113
+ }
114
+ }
115
+ // Validate EdenAI configuration (if used as default provider)
116
+ if (config.DEFAULT_PROVIDER === types_1.TTSProvider.EDENAI) {
117
+ if (!config.EDENAI.API_KEY) {
118
+ errors.push('EDENAI_API_KEY is required when using EdenAI provider (set in environment variable)');
119
+ }
120
+ }
121
+ // Validate numeric values
122
+ if (config.MAX_TEXT_LENGTH <= 0) {
123
+ errors.push('MAX_TEXT_LENGTH must be greater than 0');
124
+ }
125
+ if (config.DEFAULT_SAMPLE_RATE <= 0) {
126
+ errors.push('DEFAULT_SAMPLE_RATE must be greater than 0');
127
+ }
128
+ // Throw if any errors
129
+ if (errors.length > 0) {
130
+ throw new Error(`TTS Configuration validation failed:\n- ${errors.join('\n- ')}`);
131
+ }
132
+ }
133
+ /**
134
+ * Singleton TTS configuration instance
135
+ *
136
+ * @description
137
+ * Pre-loaded and validated configuration for easy access across the application.
138
+ * Use this instead of calling getTTSConfig() multiple times.
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * import { TTS_CONFIG } from './tts.config';
143
+ * console.log(TTS_CONFIG.AZURE.REGION);
144
+ * ```
145
+ */
146
+ exports.TTS_CONFIG = getTTSConfig();
147
+ // Validate configuration on module load (fail fast)
148
+ try {
149
+ validateTTSConfig(exports.TTS_CONFIG);
150
+ }
151
+ catch (error) {
152
+ if (exports.TTS_CONFIG.DEBUG) {
153
+ console.warn('[TTS Config] Validation failed:', error.message);
154
+ }
155
+ // Don't throw in tests or when key is not set (allows testing without credentials)
156
+ if (process.env.NODE_ENV !== 'test' &&
157
+ exports.TTS_CONFIG.DEFAULT_PROVIDER === types_1.TTSProvider.AZURE &&
158
+ exports.TTS_CONFIG.AZURE.KEY) {
159
+ throw error;
160
+ }
161
+ }
162
+ //# sourceMappingURL=tts.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tts.config.js","sourceRoot":"","sources":["../../../../src/middleware/shared/config/tts.config.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@loonylabs/tts-middleware",
3
+ "version": "0.1.1",
4
+ "description": "Provider-agnostic Text-to-Speech middleware for Azure, OpenAI, ElevenLabs, Google Cloud, and Deepgram",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "LICENSE",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "test": "jest",
15
+ "test:watch": "jest --watch",
16
+ "test:coverage": "jest --coverage",
17
+ "test:ci": "jest --ci --coverage --maxWorkers=2",
18
+ "lint": "eslint src --ext .ts",
19
+ "format": "prettier --write \"src/**/*.ts\"",
20
+ "clean": "rm -rf dist coverage",
21
+ "prepare": "npm run build",
22
+ "prepublishOnly": "npm run test:ci && npm run lint"
23
+ },
24
+ "keywords": [
25
+ "tts",
26
+ "text-to-speech",
27
+ "azure",
28
+ "openai",
29
+ "elevenlabs",
30
+ "google-cloud",
31
+ "deepgram",
32
+ "middleware",
33
+ "provider-agnostic",
34
+ "speech-synthesis",
35
+ "voice-generation",
36
+ "ai-speech"
37
+ ],
38
+ "author": "LoonyLabs Team",
39
+ "license": "MIT",
40
+ "repository": {
41
+ "type": "git",
42
+ "url": "git+https://github.com/loonylabs-dev/tts-middleware.git"
43
+ },
44
+ "bugs": {
45
+ "url": "https://github.com/loonylabs-dev/tts-middleware/issues"
46
+ },
47
+ "homepage": "https://github.com/loonylabs-dev/tts-middleware#readme",
48
+ "dependencies": {
49
+ "microsoft-cognitiveservices-speech-sdk": "^1.38.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/jest": "^29.5.8",
53
+ "@types/node": "^20.10.0",
54
+ "@typescript-eslint/eslint-plugin": "^6.13.0",
55
+ "@typescript-eslint/parser": "^6.13.0",
56
+ "eslint": "^8.54.0",
57
+ "jest": "^29.7.0",
58
+ "prettier": "^3.1.0",
59
+ "ts-jest": "^29.1.1",
60
+ "typescript": "^5.3.2"
61
+ },
62
+ "engines": {
63
+ "node": ">=18.0.0"
64
+ },
65
+ "jest": {
66
+ "preset": "ts-jest",
67
+ "testEnvironment": "node",
68
+ "roots": [
69
+ "<rootDir>/src"
70
+ ],
71
+ "testMatch": [
72
+ "**/__tests__/**/*.test.ts"
73
+ ],
74
+ "collectCoverageFrom": [
75
+ "src/**/*.ts",
76
+ "!src/**/*.d.ts",
77
+ "!src/**/index.ts"
78
+ ],
79
+ "coverageDirectory": "coverage",
80
+ "coverageReporters": [
81
+ "text",
82
+ "html",
83
+ "lcov"
84
+ ],
85
+ "coverageThreshold": {
86
+ "global": {
87
+ "branches": 85,
88
+ "functions": 90,
89
+ "lines": 90,
90
+ "statements": 90
91
+ }
92
+ }
93
+ }
94
+ }