All checks were successful
ci / 정본·보안·린트·타입·테스트 (push) Successful in 52s
ci / 모바일 린트·타입·Jest (push) Successful in 41s
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 22s
ci / .NET API 서버 테스트 (push) Successful in 14s
deploy-site / deploy (push) Successful in 41s
ci / 워크스페이스 빌드 검증 (push) Successful in 36s
A five-second phone recording took over a minute: stt-proxy waited up to 60 s for the self-hosted gateway, whose GPU endpoint was off and whose NAS CPU Whisper needs 30-90 s per clip. With a direct provider configured the gateway now gets 5 s plus the clip length (30 s cap). The direct OpenAI fallback never produced a result. The production key held characters that are not valid in an HTTP header, so every request threw while being built; provider keys are now stripped of BOM/zero-width characters and a still-invalid key counts as not configured. whisper-1 verbose_json reports the language by name, which the result contract rejected; names now map to codes. Fail-closed responses list each provider's failure (status or error class, no secrets) so an outage can be diagnosed without log access.
16 lines
855 B
TypeScript
16 lines
855 B
TypeScript
import { sanitizeProviderKey } from './provider-key.ts'
|
||
|
||
function assert(condition: boolean, message: string): asserts condition {
|
||
if (!condition) throw new Error(message)
|
||
}
|
||
|
||
Deno.test('provider keys lose BOMs, zero-width characters and whitespace', () => {
|
||
assert(sanitizeProviderKey('sk-abc123\r\n') === 'sk-abc123', 'BOM and line ending were kept')
|
||
assert(sanitizeProviderKey(' sk-abc123 ') === 'sk-abc123', 'zero-width space was kept')
|
||
assert(new Headers({ Authorization: `Bearer ${sanitizeProviderKey('sk-x')}` }).has('Authorization'), 'header was not constructible')
|
||
})
|
||
|
||
Deno.test('a key that is still not printable ASCII counts as not configured', () => {
|
||
assert(sanitizeProviderKey('키를 여기에') === '', 'non-ASCII placeholder was accepted')
|
||
assert(sanitizeProviderKey(undefined) === '', 'missing key was not empty')
|
||
})
|