openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
37 lines (36 loc) • 1.49 kB
JavaScript
import { s as normalizeOptionalLowercaseString } from "./string-coerce-mnp54Vah.js";
import "./string-coerce-runtime-CEGJWkQ_.js";
import "./realtime-voice-BRCFRGg7.js";
//#region extensions/voice-call/src/telephony-audio.ts
/**
* Chunk audio buffer into 20ms frames for streaming (8kHz mono mu-law).
*/
function chunkAudio(audio, chunkSize = 160) {
return (function* () {
for (let i = 0; i < audio.length; i += chunkSize) yield audio.subarray(i, Math.min(i + chunkSize, audio.length));
})();
}
//#endregion
//#region extensions/voice-call/src/providers/shared/call-status.ts
const TERMINAL_PROVIDER_STATUS_TO_END_REASON = {
completed: "completed",
failed: "failed",
busy: "busy",
"no-answer": "no-answer",
canceled: "hangup-bot"
};
/** Normalize provider status text, falling back to "unknown". */
function normalizeProviderStatus(status) {
const normalized = normalizeOptionalLowercaseString(status);
return normalized && normalized.length > 0 ? normalized : "unknown";
}
/** Map terminal provider status strings to OpenClaw end reasons. */
function mapProviderStatusToEndReason(status) {
return TERMINAL_PROVIDER_STATUS_TO_END_REASON[normalizeProviderStatus(status)] ?? null;
}
/** Return true when a provider status is terminal. */
function isProviderStatusTerminal(status) {
return mapProviderStatusToEndReason(status) !== null;
}
//#endregion
export { chunkAudio as i, mapProviderStatusToEndReason as n, normalizeProviderStatus as r, isProviderStatusTerminal as t };