@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.
- package/LICENSE +21 -0
- package/README.md +201 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/services/tts/index.d.ts +30 -0
- package/dist/middleware/services/tts/index.d.ts.map +1 -0
- package/dist/middleware/services/tts/index.js +69 -0
- package/dist/middleware/services/tts/index.js.map +1 -0
- package/dist/middleware/services/tts/providers/azure-provider.d.ts +131 -0
- package/dist/middleware/services/tts/providers/azure-provider.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/azure-provider.js +375 -0
- package/dist/middleware/services/tts/providers/azure-provider.js.map +1 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.d.ts +204 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.js +267 -0
- package/dist/middleware/services/tts/providers/base-tts-provider.js.map +1 -0
- package/dist/middleware/services/tts/providers/edenai-provider.d.ts +112 -0
- package/dist/middleware/services/tts/providers/edenai-provider.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/edenai-provider.js +289 -0
- package/dist/middleware/services/tts/providers/edenai-provider.js.map +1 -0
- package/dist/middleware/services/tts/providers/index.d.ts +9 -0
- package/dist/middleware/services/tts/providers/index.d.ts.map +1 -0
- package/dist/middleware/services/tts/providers/index.js +29 -0
- package/dist/middleware/services/tts/providers/index.js.map +1 -0
- package/dist/middleware/services/tts/tts.service.d.ts +175 -0
- package/dist/middleware/services/tts/tts.service.d.ts.map +1 -0
- package/dist/middleware/services/tts/tts.service.js +287 -0
- package/dist/middleware/services/tts/tts.service.js.map +1 -0
- package/dist/middleware/services/tts/types/common.types.d.ts +303 -0
- package/dist/middleware/services/tts/types/common.types.d.ts.map +1 -0
- package/dist/middleware/services/tts/types/common.types.js +42 -0
- package/dist/middleware/services/tts/types/common.types.js.map +1 -0
- package/dist/middleware/services/tts/types/index.d.ts +22 -0
- package/dist/middleware/services/tts/types/index.d.ts.map +1 -0
- package/dist/middleware/services/tts/types/index.js +46 -0
- package/dist/middleware/services/tts/types/index.js.map +1 -0
- package/dist/middleware/services/tts/types/provider-options.types.d.ts +414 -0
- package/dist/middleware/services/tts/types/provider-options.types.d.ts.map +1 -0
- package/dist/middleware/services/tts/types/provider-options.types.js +71 -0
- package/dist/middleware/services/tts/types/provider-options.types.js.map +1 -0
- package/dist/middleware/services/tts/utils/character-counter.utils.d.ts +160 -0
- package/dist/middleware/services/tts/utils/character-counter.utils.d.ts.map +1 -0
- package/dist/middleware/services/tts/utils/character-counter.utils.js +205 -0
- package/dist/middleware/services/tts/utils/character-counter.utils.js.map +1 -0
- package/dist/middleware/services/tts/utils/index.d.ts +9 -0
- package/dist/middleware/services/tts/utils/index.d.ts.map +1 -0
- package/dist/middleware/services/tts/utils/index.js +25 -0
- package/dist/middleware/services/tts/utils/index.js.map +1 -0
- package/dist/middleware/services/tts/utils/logger.utils.d.ts +116 -0
- package/dist/middleware/services/tts/utils/logger.utils.d.ts.map +1 -0
- package/dist/middleware/services/tts/utils/logger.utils.js +186 -0
- package/dist/middleware/services/tts/utils/logger.utils.js.map +1 -0
- package/dist/middleware/shared/config/tts.config.d.ts +147 -0
- package/dist/middleware/shared/config/tts.config.d.ts.map +1 -0
- package/dist/middleware/shared/config/tts.config.js +162 -0
- package/dist/middleware/shared/config/tts.config.js.map +1 -0
- 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
|
+
}
|