mirror of
https://github.com/jambonz/jambonz-api-server.git
synced 2026-11-08 20:43:46 +00:00
fix: speechmatics credential test ignored the configured region (#563)
The speechmatics branch of the /test route destructured only api_key out of the decrypted credential, so testSpeechmaticsStt() passed realtimeUrl: undefined to the sdk. ConnectionConfigFull only applies an override when the value is truthy, so every credential was silently tested against wss://eu2.rt.speechmatics.com/v2 no matter which region was stored - a neu or wus key was judged by whatever eu2 happened to answer. - pass speechmatics_stt_uri through from the route - normalize it before handing it to the sdk. The field holds a bare hostname, which the sdk cannot use as-is: it appends the language, yielding "eu2.rt.speechmatics.com/en" and ERR_INVALID_URL. At call time the same value goes to mod_speechmatics_transcribe as SPEECHMATICS_HOST, which always connects over wss on port 443 with a path of /v2, so build exactly that url. Anything else - a full ws url, a port - now fails the test with an actionable message rather than passing against an endpoint only the test can reach, and a credential that has lost the field fails too: the feature server omits SPEECHMATICS_HOST when it is unset and the module refuses the session, so defaulting to a hosted region here would show a green check on a dead credential. - record the speechmatics STT result with sttTestResult(), not ttsTestResult(), which is what every other STT vendor in this file does; the tts column was being stamped for an STT-only vendor Adds coverage for the url building to the main test suite - it is the part of this that can be exercised without an api key. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
53279a59c0
commit
baf80cb84c
4 files changed
+64
-5
No files matched your search
@@ -924,15 +924,15 @@ router.get('/:sid/test', async(req, res) => {
|
||||
}
|
||||
}
|
||||
} else if (cred.vendor === 'speechmatics') {
|
||||
const {api_key} = credential;
|
||||
const {api_key, speechmatics_stt_uri} = credential;
|
||||
if (cred.use_for_stt) {
|
||||
try {
|
||||
await testSpeechmaticsStt(logger, {api_key});
|
||||
await testSpeechmaticsStt(logger, {api_key, speechmatics_stt_uri});
|
||||
results.stt.status = 'ok';
|
||||
SpeechCredential.ttsTestResult(sid, true);
|
||||
SpeechCredential.sttTestResult(sid, true);
|
||||
} catch (err) {
|
||||
results.stt = {status: 'fail', reason: err.message};
|
||||
SpeechCredential.ttsTestResult(sid, false);
|
||||
SpeechCredential.sttTestResult(sid, false);
|
||||
}
|
||||
}
|
||||
} else if (cred.vendor === 'playht') {
|
||||
|
||||
Reference in new issue
Block a user