@livekit/agents 0.0.0-20260120144724
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 +201 -0
- package/README.md +17 -0
- package/dist/_exceptions.cjs +109 -0
- package/dist/_exceptions.cjs.map +1 -0
- package/dist/_exceptions.d.cts +64 -0
- package/dist/_exceptions.d.ts +64 -0
- package/dist/_exceptions.d.ts.map +1 -0
- package/dist/_exceptions.js +80 -0
- package/dist/_exceptions.js.map +1 -0
- package/dist/audio.cjs +170 -0
- package/dist/audio.cjs.map +1 -0
- package/dist/audio.d.cts +46 -0
- package/dist/audio.d.ts +46 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +133 -0
- package/dist/audio.js.map +1 -0
- package/dist/cli.cjs +171 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +14 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +145 -0
- package/dist/cli.js.map +1 -0
- package/dist/connection_pool.cjs +242 -0
- package/dist/connection_pool.cjs.map +1 -0
- package/dist/connection_pool.d.cts +123 -0
- package/dist/connection_pool.d.ts +123 -0
- package/dist/connection_pool.d.ts.map +1 -0
- package/dist/connection_pool.js +218 -0
- package/dist/connection_pool.js.map +1 -0
- package/dist/connection_pool.test.cjs +256 -0
- package/dist/connection_pool.test.cjs.map +1 -0
- package/dist/connection_pool.test.js +255 -0
- package/dist/connection_pool.test.js.map +1 -0
- package/dist/constants.cjs +44 -0
- package/dist/constants.cjs.map +1 -0
- package/dist/constants.d.cts +7 -0
- package/dist/constants.d.ts +7 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +15 -0
- package/dist/constants.js.map +1 -0
- package/dist/generator.cjs +36 -0
- package/dist/generator.cjs.map +1 -0
- package/dist/generator.d.cts +23 -0
- package/dist/generator.d.ts +23 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +11 -0
- package/dist/generator.js.map +1 -0
- package/dist/http_server.cjs +75 -0
- package/dist/http_server.cjs.map +1 -0
- package/dist/http_server.d.cts +20 -0
- package/dist/http_server.d.ts +20 -0
- package/dist/http_server.d.ts.map +1 -0
- package/dist/http_server.js +51 -0
- package/dist/http_server.js.map +1 -0
- package/dist/index.cjs +100 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/inference/api_protos.cjs +104 -0
- package/dist/inference/api_protos.cjs.map +1 -0
- package/dist/inference/api_protos.d.cts +222 -0
- package/dist/inference/api_protos.d.ts +222 -0
- package/dist/inference/api_protos.d.ts.map +1 -0
- package/dist/inference/api_protos.js +70 -0
- package/dist/inference/api_protos.js.map +1 -0
- package/dist/inference/index.cjs +56 -0
- package/dist/inference/index.cjs.map +1 -0
- package/dist/inference/index.d.cts +8 -0
- package/dist/inference/index.d.ts +8 -0
- package/dist/inference/index.d.ts.map +1 -0
- package/dist/inference/index.js +23 -0
- package/dist/inference/index.js.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.cjs +152 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.cjs.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.cts +50 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.ts +50 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.d.ts.map +1 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.js +125 -0
- package/dist/inference/interruption/AdaptiveInterruptionDetector.js.map +1 -0
- package/dist/inference/interruption/InterruptionStream.cjs +310 -0
- package/dist/inference/interruption/InterruptionStream.cjs.map +1 -0
- package/dist/inference/interruption/InterruptionStream.d.cts +57 -0
- package/dist/inference/interruption/InterruptionStream.d.ts +57 -0
- package/dist/inference/interruption/InterruptionStream.d.ts.map +1 -0
- package/dist/inference/interruption/InterruptionStream.js +288 -0
- package/dist/inference/interruption/InterruptionStream.js.map +1 -0
- package/dist/inference/interruption/defaults.cjs +76 -0
- package/dist/inference/interruption/defaults.cjs.map +1 -0
- package/dist/inference/interruption/defaults.d.cts +14 -0
- package/dist/inference/interruption/defaults.d.ts +14 -0
- package/dist/inference/interruption/defaults.d.ts.map +1 -0
- package/dist/inference/interruption/defaults.js +42 -0
- package/dist/inference/interruption/defaults.js.map +1 -0
- package/dist/inference/interruption/errors.cjs +2 -0
- package/dist/inference/interruption/errors.cjs.map +1 -0
- package/dist/inference/interruption/errors.d.cts +2 -0
- package/dist/inference/interruption/errors.d.ts +2 -0
- package/dist/inference/interruption/errors.d.ts.map +1 -0
- package/dist/inference/interruption/errors.js +1 -0
- package/dist/inference/interruption/errors.js.map +1 -0
- package/dist/inference/interruption/http_transport.cjs +57 -0
- package/dist/inference/interruption/http_transport.cjs.map +1 -0
- package/dist/inference/interruption/http_transport.d.cts +23 -0
- package/dist/inference/interruption/http_transport.d.ts +23 -0
- package/dist/inference/interruption/http_transport.d.ts.map +1 -0
- package/dist/inference/interruption/http_transport.js +33 -0
- package/dist/inference/interruption/http_transport.js.map +1 -0
- package/dist/inference/interruption/index.cjs +34 -0
- package/dist/inference/interruption/index.cjs.map +1 -0
- package/dist/inference/interruption/index.d.cts +5 -0
- package/dist/inference/interruption/index.d.ts +5 -0
- package/dist/inference/interruption/index.d.ts.map +1 -0
- package/dist/inference/interruption/index.js +7 -0
- package/dist/inference/interruption/index.js.map +1 -0
- package/dist/inference/interruption/interruption.cjs +85 -0
- package/dist/inference/interruption/interruption.cjs.map +1 -0
- package/dist/inference/interruption/interruption.d.cts +48 -0
- package/dist/inference/interruption/interruption.d.ts +48 -0
- package/dist/inference/interruption/interruption.d.ts.map +1 -0
- package/dist/inference/interruption/interruption.js +59 -0
- package/dist/inference/interruption/interruption.js.map +1 -0
- package/dist/inference/llm.cjs +347 -0
- package/dist/inference/llm.cjs.map +1 -0
- package/dist/inference/llm.d.cts +114 -0
- package/dist/inference/llm.d.ts +114 -0
- package/dist/inference/llm.d.ts.map +1 -0
- package/dist/inference/llm.js +318 -0
- package/dist/inference/llm.js.map +1 -0
- package/dist/inference/stt.cjs +371 -0
- package/dist/inference/stt.cjs.map +1 -0
- package/dist/inference/stt.d.cts +91 -0
- package/dist/inference/stt.d.ts +91 -0
- package/dist/inference/stt.d.ts.map +1 -0
- package/dist/inference/stt.js +350 -0
- package/dist/inference/stt.js.map +1 -0
- package/dist/inference/tts.cjs +439 -0
- package/dist/inference/tts.cjs.map +1 -0
- package/dist/inference/tts.d.cts +80 -0
- package/dist/inference/tts.d.ts +80 -0
- package/dist/inference/tts.d.ts.map +1 -0
- package/dist/inference/tts.js +417 -0
- package/dist/inference/tts.js.map +1 -0
- package/dist/inference/utils.cjs +89 -0
- package/dist/inference/utils.cjs.map +1 -0
- package/dist/inference/utils.d.cts +6 -0
- package/dist/inference/utils.d.ts +6 -0
- package/dist/inference/utils.d.ts.map +1 -0
- package/dist/inference/utils.js +63 -0
- package/dist/inference/utils.js.map +1 -0
- package/dist/inference/utils.test.cjs +20 -0
- package/dist/inference/utils.test.cjs.map +1 -0
- package/dist/inference/utils.test.js +19 -0
- package/dist/inference/utils.test.js.map +1 -0
- package/dist/inference_runner.cjs +37 -0
- package/dist/inference_runner.cjs.map +1 -0
- package/dist/inference_runner.d.cts +11 -0
- package/dist/inference_runner.d.ts +11 -0
- package/dist/inference_runner.d.ts.map +1 -0
- package/dist/inference_runner.js +13 -0
- package/dist/inference_runner.js.map +1 -0
- package/dist/ipc/index.cjs +23 -0
- package/dist/ipc/index.cjs.map +1 -0
- package/dist/ipc/index.d.cts +2 -0
- package/dist/ipc/index.d.ts +2 -0
- package/dist/ipc/index.d.ts.map +1 -0
- package/dist/ipc/index.js +2 -0
- package/dist/ipc/index.js.map +1 -0
- package/dist/ipc/inference_executor.cjs +17 -0
- package/dist/ipc/inference_executor.cjs.map +1 -0
- package/dist/ipc/inference_executor.d.cts +4 -0
- package/dist/ipc/inference_executor.d.ts +4 -0
- package/dist/ipc/inference_executor.d.ts.map +1 -0
- package/dist/ipc/inference_executor.js +1 -0
- package/dist/ipc/inference_executor.js.map +1 -0
- package/dist/ipc/inference_proc_executor.cjs +101 -0
- package/dist/ipc/inference_proc_executor.cjs.map +1 -0
- package/dist/ipc/inference_proc_executor.d.cts +23 -0
- package/dist/ipc/inference_proc_executor.d.ts +23 -0
- package/dist/ipc/inference_proc_executor.d.ts.map +1 -0
- package/dist/ipc/inference_proc_executor.js +75 -0
- package/dist/ipc/inference_proc_executor.js.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.cjs +86 -0
- package/dist/ipc/inference_proc_lazy_main.cjs.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.d.cts +2 -0
- package/dist/ipc/inference_proc_lazy_main.d.ts +2 -0
- package/dist/ipc/inference_proc_lazy_main.d.ts.map +1 -0
- package/dist/ipc/inference_proc_lazy_main.js +85 -0
- package/dist/ipc/inference_proc_lazy_main.js.map +1 -0
- package/dist/ipc/job_executor.cjs +34 -0
- package/dist/ipc/job_executor.cjs.map +1 -0
- package/dist/ipc/job_executor.d.cts +18 -0
- package/dist/ipc/job_executor.d.ts +18 -0
- package/dist/ipc/job_executor.d.ts.map +1 -0
- package/dist/ipc/job_executor.js +10 -0
- package/dist/ipc/job_executor.js.map +1 -0
- package/dist/ipc/job_proc_executor.cjs +115 -0
- package/dist/ipc/job_proc_executor.cjs.map +1 -0
- package/dist/ipc/job_proc_executor.d.cts +19 -0
- package/dist/ipc/job_proc_executor.d.ts +19 -0
- package/dist/ipc/job_proc_executor.d.ts.map +1 -0
- package/dist/ipc/job_proc_executor.js +89 -0
- package/dist/ipc/job_proc_executor.js.map +1 -0
- package/dist/ipc/job_proc_lazy_main.cjs +210 -0
- package/dist/ipc/job_proc_lazy_main.cjs.map +1 -0
- package/dist/ipc/job_proc_lazy_main.d.cts +2 -0
- package/dist/ipc/job_proc_lazy_main.d.ts +2 -0
- package/dist/ipc/job_proc_lazy_main.d.ts.map +1 -0
- package/dist/ipc/job_proc_lazy_main.js +187 -0
- package/dist/ipc/job_proc_lazy_main.js.map +1 -0
- package/dist/ipc/message.cjs +17 -0
- package/dist/ipc/message.cjs.map +1 -0
- package/dist/ipc/message.d.cts +58 -0
- package/dist/ipc/message.d.ts +58 -0
- package/dist/ipc/message.d.ts.map +1 -0
- package/dist/ipc/message.js +1 -0
- package/dist/ipc/message.js.map +1 -0
- package/dist/ipc/proc_pool.cjs +164 -0
- package/dist/ipc/proc_pool.cjs.map +1 -0
- package/dist/ipc/proc_pool.d.cts +31 -0
- package/dist/ipc/proc_pool.d.ts +31 -0
- package/dist/ipc/proc_pool.d.ts.map +1 -0
- package/dist/ipc/proc_pool.js +140 -0
- package/dist/ipc/proc_pool.js.map +1 -0
- package/dist/ipc/supervised_proc.cjs +229 -0
- package/dist/ipc/supervised_proc.cjs.map +1 -0
- package/dist/ipc/supervised_proc.d.cts +32 -0
- package/dist/ipc/supervised_proc.d.ts +32 -0
- package/dist/ipc/supervised_proc.d.ts.map +1 -0
- package/dist/ipc/supervised_proc.js +195 -0
- package/dist/ipc/supervised_proc.js.map +1 -0
- package/dist/ipc/supervised_proc.test.cjs +145 -0
- package/dist/ipc/supervised_proc.test.cjs.map +1 -0
- package/dist/ipc/supervised_proc.test.js +122 -0
- package/dist/ipc/supervised_proc.test.js.map +1 -0
- package/dist/job.cjs +373 -0
- package/dist/job.cjs.map +1 -0
- package/dist/job.d.cts +141 -0
- package/dist/job.d.ts +141 -0
- package/dist/job.d.ts.map +1 -0
- package/dist/job.js +332 -0
- package/dist/job.js.map +1 -0
- package/dist/llm/chat_context.cjs +527 -0
- package/dist/llm/chat_context.cjs.map +1 -0
- package/dist/llm/chat_context.d.cts +223 -0
- package/dist/llm/chat_context.d.ts +223 -0
- package/dist/llm/chat_context.d.ts.map +1 -0
- package/dist/llm/chat_context.js +496 -0
- package/dist/llm/chat_context.js.map +1 -0
- package/dist/llm/chat_context.test.cjs +911 -0
- package/dist/llm/chat_context.test.cjs.map +1 -0
- package/dist/llm/chat_context.test.js +916 -0
- package/dist/llm/chat_context.test.js.map +1 -0
- package/dist/llm/fallback_adapter.cjs +278 -0
- package/dist/llm/fallback_adapter.cjs.map +1 -0
- package/dist/llm/fallback_adapter.d.cts +73 -0
- package/dist/llm/fallback_adapter.d.ts +73 -0
- package/dist/llm/fallback_adapter.d.ts.map +1 -0
- package/dist/llm/fallback_adapter.js +254 -0
- package/dist/llm/fallback_adapter.js.map +1 -0
- package/dist/llm/fallback_adapter.test.cjs +176 -0
- package/dist/llm/fallback_adapter.test.cjs.map +1 -0
- package/dist/llm/fallback_adapter.test.js +175 -0
- package/dist/llm/fallback_adapter.test.js.map +1 -0
- package/dist/llm/index.cjs +79 -0
- package/dist/llm/index.cjs.map +1 -0
- package/dist/llm/index.d.cts +9 -0
- package/dist/llm/index.d.ts +9 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +61 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm.cjs +226 -0
- package/dist/llm/llm.cjs.map +1 -0
- package/dist/llm/llm.d.cts +94 -0
- package/dist/llm/llm.d.ts +94 -0
- package/dist/llm/llm.d.ts.map +1 -0
- package/dist/llm/llm.js +201 -0
- package/dist/llm/llm.js.map +1 -0
- package/dist/llm/provider_format/google.cjs +132 -0
- package/dist/llm/provider_format/google.cjs.map +1 -0
- package/dist/llm/provider_format/google.d.cts +6 -0
- package/dist/llm/provider_format/google.d.ts +6 -0
- package/dist/llm/provider_format/google.d.ts.map +1 -0
- package/dist/llm/provider_format/google.js +108 -0
- package/dist/llm/provider_format/google.js.map +1 -0
- package/dist/llm/provider_format/google.test.cjs +724 -0
- package/dist/llm/provider_format/google.test.cjs.map +1 -0
- package/dist/llm/provider_format/google.test.js +728 -0
- package/dist/llm/provider_format/google.test.js.map +1 -0
- package/dist/llm/provider_format/index.cjs +40 -0
- package/dist/llm/provider_format/index.cjs.map +1 -0
- package/dist/llm/provider_format/index.d.cts +4 -0
- package/dist/llm/provider_format/index.d.ts +4 -0
- package/dist/llm/provider_format/index.d.ts.map +1 -0
- package/dist/llm/provider_format/index.js +16 -0
- package/dist/llm/provider_format/index.js.map +1 -0
- package/dist/llm/provider_format/openai.cjs +138 -0
- package/dist/llm/provider_format/openai.cjs.map +1 -0
- package/dist/llm/provider_format/openai.d.cts +3 -0
- package/dist/llm/provider_format/openai.d.ts +3 -0
- package/dist/llm/provider_format/openai.d.ts.map +1 -0
- package/dist/llm/provider_format/openai.js +114 -0
- package/dist/llm/provider_format/openai.js.map +1 -0
- package/dist/llm/provider_format/openai.test.cjs +557 -0
- package/dist/llm/provider_format/openai.test.cjs.map +1 -0
- package/dist/llm/provider_format/openai.test.js +561 -0
- package/dist/llm/provider_format/openai.test.js.map +1 -0
- package/dist/llm/provider_format/utils.cjs +146 -0
- package/dist/llm/provider_format/utils.cjs.map +1 -0
- package/dist/llm/provider_format/utils.d.cts +38 -0
- package/dist/llm/provider_format/utils.d.ts +38 -0
- package/dist/llm/provider_format/utils.d.ts.map +1 -0
- package/dist/llm/provider_format/utils.js +122 -0
- package/dist/llm/provider_format/utils.js.map +1 -0
- package/dist/llm/realtime.cjs +77 -0
- package/dist/llm/realtime.cjs.map +1 -0
- package/dist/llm/realtime.d.cts +106 -0
- package/dist/llm/realtime.d.ts +106 -0
- package/dist/llm/realtime.d.ts.map +1 -0
- package/dist/llm/realtime.js +52 -0
- package/dist/llm/realtime.js.map +1 -0
- package/dist/llm/remote_chat_context.cjs +112 -0
- package/dist/llm/remote_chat_context.cjs.map +1 -0
- package/dist/llm/remote_chat_context.d.cts +25 -0
- package/dist/llm/remote_chat_context.d.ts +25 -0
- package/dist/llm/remote_chat_context.d.ts.map +1 -0
- package/dist/llm/remote_chat_context.js +88 -0
- package/dist/llm/remote_chat_context.js.map +1 -0
- package/dist/llm/remote_chat_context.test.cjs +225 -0
- package/dist/llm/remote_chat_context.test.cjs.map +1 -0
- package/dist/llm/remote_chat_context.test.js +224 -0
- package/dist/llm/remote_chat_context.test.js.map +1 -0
- package/dist/llm/tool_context.cjs +152 -0
- package/dist/llm/tool_context.cjs.map +1 -0
- package/dist/llm/tool_context.d.cts +153 -0
- package/dist/llm/tool_context.d.ts +153 -0
- package/dist/llm/tool_context.d.ts.map +1 -0
- package/dist/llm/tool_context.js +119 -0
- package/dist/llm/tool_context.js.map +1 -0
- package/dist/llm/tool_context.test.cjs +359 -0
- package/dist/llm/tool_context.test.cjs.map +1 -0
- package/dist/llm/tool_context.test.js +336 -0
- package/dist/llm/tool_context.test.js.map +1 -0
- package/dist/llm/tool_context.type.test.cjs +92 -0
- package/dist/llm/tool_context.type.test.cjs.map +1 -0
- package/dist/llm/tool_context.type.test.js +91 -0
- package/dist/llm/tool_context.type.test.js.map +1 -0
- package/dist/llm/utils.cjs +267 -0
- package/dist/llm/utils.cjs.map +1 -0
- package/dist/llm/utils.d.cts +41 -0
- package/dist/llm/utils.d.ts +41 -0
- package/dist/llm/utils.d.ts.map +1 -0
- package/dist/llm/utils.js +230 -0
- package/dist/llm/utils.js.map +1 -0
- package/dist/llm/utils.test.cjs +513 -0
- package/dist/llm/utils.test.cjs.map +1 -0
- package/dist/llm/utils.test.js +490 -0
- package/dist/llm/utils.test.js.map +1 -0
- package/dist/llm/zod-utils.cjs +102 -0
- package/dist/llm/zod-utils.cjs.map +1 -0
- package/dist/llm/zod-utils.d.cts +65 -0
- package/dist/llm/zod-utils.d.ts +65 -0
- package/dist/llm/zod-utils.d.ts.map +1 -0
- package/dist/llm/zod-utils.js +64 -0
- package/dist/llm/zod-utils.js.map +1 -0
- package/dist/llm/zod-utils.test.cjs +472 -0
- package/dist/llm/zod-utils.test.cjs.map +1 -0
- package/dist/llm/zod-utils.test.js +455 -0
- package/dist/llm/zod-utils.test.js.map +1 -0
- package/dist/log.cjs +81 -0
- package/dist/log.cjs.map +1 -0
- package/dist/log.d.cts +20 -0
- package/dist/log.d.ts +20 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +54 -0
- package/dist/log.js.map +1 -0
- package/dist/metrics/base.cjs +17 -0
- package/dist/metrics/base.cjs.map +1 -0
- package/dist/metrics/base.d.cts +150 -0
- package/dist/metrics/base.d.ts +150 -0
- package/dist/metrics/base.d.ts.map +1 -0
- package/dist/metrics/base.js +1 -0
- package/dist/metrics/base.js.map +1 -0
- package/dist/metrics/index.cjs +32 -0
- package/dist/metrics/index.cjs.map +1 -0
- package/dist/metrics/index.d.cts +4 -0
- package/dist/metrics/index.d.ts +4 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +7 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/usage_collector.cjs +58 -0
- package/dist/metrics/usage_collector.cjs.map +1 -0
- package/dist/metrics/usage_collector.d.cts +15 -0
- package/dist/metrics/usage_collector.d.ts +15 -0
- package/dist/metrics/usage_collector.d.ts.map +1 -0
- package/dist/metrics/usage_collector.js +34 -0
- package/dist/metrics/usage_collector.js.map +1 -0
- package/dist/metrics/utils.cjs +74 -0
- package/dist/metrics/utils.cjs.map +1 -0
- package/dist/metrics/utils.d.cts +3 -0
- package/dist/metrics/utils.d.ts +3 -0
- package/dist/metrics/utils.d.ts.map +1 -0
- package/dist/metrics/utils.js +50 -0
- package/dist/metrics/utils.js.map +1 -0
- package/dist/plugin.cjs +62 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +24 -0
- package/dist/plugin.d.ts +24 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +37 -0
- package/dist/plugin.js.map +1 -0
- package/dist/stream/deferred_stream.cjs +106 -0
- package/dist/stream/deferred_stream.cjs.map +1 -0
- package/dist/stream/deferred_stream.d.cts +32 -0
- package/dist/stream/deferred_stream.d.ts +32 -0
- package/dist/stream/deferred_stream.d.ts.map +1 -0
- package/dist/stream/deferred_stream.js +81 -0
- package/dist/stream/deferred_stream.js.map +1 -0
- package/dist/stream/deferred_stream.test.cjs +527 -0
- package/dist/stream/deferred_stream.test.cjs.map +1 -0
- package/dist/stream/deferred_stream.test.js +526 -0
- package/dist/stream/deferred_stream.test.js.map +1 -0
- package/dist/stream/identity_transform.cjs +42 -0
- package/dist/stream/identity_transform.cjs.map +1 -0
- package/dist/stream/identity_transform.d.cts +6 -0
- package/dist/stream/identity_transform.d.ts +6 -0
- package/dist/stream/identity_transform.d.ts.map +1 -0
- package/dist/stream/identity_transform.js +18 -0
- package/dist/stream/identity_transform.js.map +1 -0
- package/dist/stream/identity_transform.test.cjs +125 -0
- package/dist/stream/identity_transform.test.cjs.map +1 -0
- package/dist/stream/identity_transform.test.js +124 -0
- package/dist/stream/identity_transform.test.js.map +1 -0
- package/dist/stream/index.cjs +38 -0
- package/dist/stream/index.cjs.map +1 -0
- package/dist/stream/index.d.cts +5 -0
- package/dist/stream/index.d.ts +5 -0
- package/dist/stream/index.d.ts.map +1 -0
- package/dist/stream/index.js +11 -0
- package/dist/stream/index.js.map +1 -0
- package/dist/stream/merge_readable_streams.cjs +59 -0
- package/dist/stream/merge_readable_streams.cjs.map +1 -0
- package/dist/stream/merge_readable_streams.d.cts +4 -0
- package/dist/stream/merge_readable_streams.d.ts +4 -0
- package/dist/stream/merge_readable_streams.d.ts.map +1 -0
- package/dist/stream/merge_readable_streams.js +35 -0
- package/dist/stream/merge_readable_streams.js.map +1 -0
- package/dist/stream/stream_channel.cjs +57 -0
- package/dist/stream/stream_channel.cjs.map +1 -0
- package/dist/stream/stream_channel.d.cts +11 -0
- package/dist/stream/stream_channel.d.ts +11 -0
- package/dist/stream/stream_channel.d.ts.map +1 -0
- package/dist/stream/stream_channel.js +33 -0
- package/dist/stream/stream_channel.js.map +1 -0
- package/dist/stream/stream_channel.test.cjs +124 -0
- package/dist/stream/stream_channel.test.cjs.map +1 -0
- package/dist/stream/stream_channel.test.js +123 -0
- package/dist/stream/stream_channel.test.js.map +1 -0
- package/dist/stt/index.cjs +38 -0
- package/dist/stt/index.cjs.map +1 -0
- package/dist/stt/index.d.cts +3 -0
- package/dist/stt/index.d.ts +3 -0
- package/dist/stt/index.d.ts.map +1 -0
- package/dist/stt/index.js +14 -0
- package/dist/stt/index.js.map +1 -0
- package/dist/stt/stream_adapter.cjs +115 -0
- package/dist/stt/stream_adapter.cjs.map +1 -0
- package/dist/stt/stream_adapter.d.cts +23 -0
- package/dist/stt/stream_adapter.d.ts +23 -0
- package/dist/stt/stream_adapter.d.ts.map +1 -0
- package/dist/stt/stream_adapter.js +90 -0
- package/dist/stt/stream_adapter.js.map +1 -0
- package/dist/stt/stt.cjs +253 -0
- package/dist/stt/stt.cjs.map +1 -0
- package/dist/stt/stt.d.cts +158 -0
- package/dist/stt/stt.d.ts +158 -0
- package/dist/stt/stt.d.ts.map +1 -0
- package/dist/stt/stt.js +227 -0
- package/dist/stt/stt.js.map +1 -0
- package/dist/telemetry/index.cjs +72 -0
- package/dist/telemetry/index.cjs.map +1 -0
- package/dist/telemetry/index.d.cts +7 -0
- package/dist/telemetry/index.d.ts +7 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +37 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/logging.cjs +65 -0
- package/dist/telemetry/logging.cjs.map +1 -0
- package/dist/telemetry/logging.d.cts +21 -0
- package/dist/telemetry/logging.d.ts +21 -0
- package/dist/telemetry/logging.d.ts.map +1 -0
- package/dist/telemetry/logging.js +40 -0
- package/dist/telemetry/logging.js.map +1 -0
- package/dist/telemetry/otel_http_exporter.cjs +147 -0
- package/dist/telemetry/otel_http_exporter.cjs.map +1 -0
- package/dist/telemetry/otel_http_exporter.d.cts +62 -0
- package/dist/telemetry/otel_http_exporter.d.ts +62 -0
- package/dist/telemetry/otel_http_exporter.d.ts.map +1 -0
- package/dist/telemetry/otel_http_exporter.js +123 -0
- package/dist/telemetry/otel_http_exporter.js.map +1 -0
- package/dist/telemetry/pino_otel_transport.cjs +217 -0
- package/dist/telemetry/pino_otel_transport.cjs.map +1 -0
- package/dist/telemetry/pino_otel_transport.d.cts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts +58 -0
- package/dist/telemetry/pino_otel_transport.d.ts.map +1 -0
- package/dist/telemetry/pino_otel_transport.js +189 -0
- package/dist/telemetry/pino_otel_transport.js.map +1 -0
- package/dist/telemetry/trace_types.cjs +206 -0
- package/dist/telemetry/trace_types.cjs.map +1 -0
- package/dist/telemetry/trace_types.d.cts +61 -0
- package/dist/telemetry/trace_types.d.ts +61 -0
- package/dist/telemetry/trace_types.d.ts.map +1 -0
- package/dist/telemetry/trace_types.js +123 -0
- package/dist/telemetry/trace_types.js.map +1 -0
- package/dist/telemetry/traces.cjs +444 -0
- package/dist/telemetry/traces.cjs.map +1 -0
- package/dist/telemetry/traces.d.cts +114 -0
- package/dist/telemetry/traces.d.ts +114 -0
- package/dist/telemetry/traces.d.ts.map +1 -0
- package/dist/telemetry/traces.js +409 -0
- package/dist/telemetry/traces.js.map +1 -0
- package/dist/telemetry/utils.cjs +86 -0
- package/dist/telemetry/utils.cjs.map +1 -0
- package/dist/telemetry/utils.d.cts +5 -0
- package/dist/telemetry/utils.d.ts +5 -0
- package/dist/telemetry/utils.d.ts.map +1 -0
- package/dist/telemetry/utils.js +51 -0
- package/dist/telemetry/utils.js.map +1 -0
- package/dist/tokenize/basic/basic.cjs +105 -0
- package/dist/tokenize/basic/basic.cjs.map +1 -0
- package/dist/tokenize/basic/basic.d.cts +24 -0
- package/dist/tokenize/basic/basic.d.ts +24 -0
- package/dist/tokenize/basic/basic.d.ts.map +1 -0
- package/dist/tokenize/basic/basic.js +67 -0
- package/dist/tokenize/basic/basic.js.map +1 -0
- package/dist/tokenize/basic/hyphenator.cjs +425 -0
- package/dist/tokenize/basic/hyphenator.cjs.map +1 -0
- package/dist/tokenize/basic/hyphenator.d.cts +17 -0
- package/dist/tokenize/basic/hyphenator.d.ts +17 -0
- package/dist/tokenize/basic/hyphenator.d.ts.map +1 -0
- package/dist/tokenize/basic/hyphenator.js +401 -0
- package/dist/tokenize/basic/hyphenator.js.map +1 -0
- package/dist/tokenize/basic/index.cjs +37 -0
- package/dist/tokenize/basic/index.cjs.map +1 -0
- package/dist/tokenize/basic/index.d.cts +2 -0
- package/dist/tokenize/basic/index.d.ts +2 -0
- package/dist/tokenize/basic/index.d.ts.map +1 -0
- package/dist/tokenize/basic/index.js +15 -0
- package/dist/tokenize/basic/index.js.map +1 -0
- package/dist/tokenize/basic/paragraph.cjs +57 -0
- package/dist/tokenize/basic/paragraph.cjs.map +1 -0
- package/dist/tokenize/basic/paragraph.d.cts +5 -0
- package/dist/tokenize/basic/paragraph.d.ts +5 -0
- package/dist/tokenize/basic/paragraph.d.ts.map +1 -0
- package/dist/tokenize/basic/paragraph.js +33 -0
- package/dist/tokenize/basic/paragraph.js.map +1 -0
- package/dist/tokenize/basic/sentence.cjs +97 -0
- package/dist/tokenize/basic/sentence.cjs.map +1 -0
- package/dist/tokenize/basic/sentence.d.cts +5 -0
- package/dist/tokenize/basic/sentence.d.ts +5 -0
- package/dist/tokenize/basic/sentence.d.ts.map +1 -0
- package/dist/tokenize/basic/sentence.js +73 -0
- package/dist/tokenize/basic/sentence.js.map +1 -0
- package/dist/tokenize/basic/word.cjs +44 -0
- package/dist/tokenize/basic/word.cjs.map +1 -0
- package/dist/tokenize/basic/word.d.cts +5 -0
- package/dist/tokenize/basic/word.d.ts +5 -0
- package/dist/tokenize/basic/word.d.ts.map +1 -0
- package/dist/tokenize/basic/word.js +20 -0
- package/dist/tokenize/basic/word.js.map +1 -0
- package/dist/tokenize/index.cjs +55 -0
- package/dist/tokenize/index.cjs.map +1 -0
- package/dist/tokenize/index.d.cts +5 -0
- package/dist/tokenize/index.d.ts +5 -0
- package/dist/tokenize/index.d.ts.map +1 -0
- package/dist/tokenize/index.js +19 -0
- package/dist/tokenize/index.js.map +1 -0
- package/dist/tokenize/token_stream.cjs +168 -0
- package/dist/tokenize/token_stream.cjs.map +1 -0
- package/dist/tokenize/token_stream.d.cts +40 -0
- package/dist/tokenize/token_stream.d.ts +40 -0
- package/dist/tokenize/token_stream.d.ts.map +1 -0
- package/dist/tokenize/token_stream.js +142 -0
- package/dist/tokenize/token_stream.js.map +1 -0
- package/dist/tokenize/tokenizer.cjs +184 -0
- package/dist/tokenize/tokenizer.cjs.map +1 -0
- package/dist/tokenize/tokenizer.d.cts +55 -0
- package/dist/tokenize/tokenizer.d.ts +55 -0
- package/dist/tokenize/tokenizer.d.ts.map +1 -0
- package/dist/tokenize/tokenizer.js +156 -0
- package/dist/tokenize/tokenizer.js.map +1 -0
- package/dist/tokenize/tokenizer.test.cjs +220 -0
- package/dist/tokenize/tokenizer.test.cjs.map +1 -0
- package/dist/tokenize/tokenizer.test.js +219 -0
- package/dist/tokenize/tokenizer.test.js.map +1 -0
- package/dist/transcription.cjs +247 -0
- package/dist/transcription.cjs.map +1 -0
- package/dist/transcription.d.cts +31 -0
- package/dist/transcription.d.ts +31 -0
- package/dist/transcription.d.ts.map +1 -0
- package/dist/transcription.js +222 -0
- package/dist/transcription.js.map +1 -0
- package/dist/tts/index.cjs +38 -0
- package/dist/tts/index.cjs.map +1 -0
- package/dist/tts/index.d.cts +3 -0
- package/dist/tts/index.d.ts +3 -0
- package/dist/tts/index.d.ts.map +1 -0
- package/dist/tts/index.js +14 -0
- package/dist/tts/index.js.map +1 -0
- package/dist/tts/stream_adapter.cjs +105 -0
- package/dist/tts/stream_adapter.cjs.map +1 -0
- package/dist/tts/stream_adapter.d.cts +20 -0
- package/dist/tts/stream_adapter.d.ts +20 -0
- package/dist/tts/stream_adapter.d.ts.map +1 -0
- package/dist/tts/stream_adapter.js +80 -0
- package/dist/tts/stream_adapter.js.map +1 -0
- package/dist/tts/tts.cjs +431 -0
- package/dist/tts/tts.cjs.map +1 -0
- package/dist/tts/tts.d.cts +161 -0
- package/dist/tts/tts.d.ts +161 -0
- package/dist/tts/tts.d.ts.map +1 -0
- package/dist/tts/tts.js +405 -0
- package/dist/tts/tts.js.map +1 -0
- package/dist/types.cjs +49 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +44 -0
- package/dist/types.d.ts +44 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/ws_transport.cjs +51 -0
- package/dist/utils/ws_transport.cjs.map +1 -0
- package/dist/utils/ws_transport.d.cts +9 -0
- package/dist/utils/ws_transport.d.ts +9 -0
- package/dist/utils/ws_transport.d.ts.map +1 -0
- package/dist/utils/ws_transport.js +17 -0
- package/dist/utils/ws_transport.js.map +1 -0
- package/dist/utils/ws_transport.test.cjs +212 -0
- package/dist/utils/ws_transport.test.cjs.map +1 -0
- package/dist/utils/ws_transport.test.js +211 -0
- package/dist/utils/ws_transport.test.js.map +1 -0
- package/dist/utils.cjs +669 -0
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.cts +244 -0
- package/dist/utils.d.ts +244 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +617 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.test.cjs +492 -0
- package/dist/utils.test.cjs.map +1 -0
- package/dist/utils.test.js +491 -0
- package/dist/utils.test.js.map +1 -0
- package/dist/vad.cjs +211 -0
- package/dist/vad.cjs.map +1 -0
- package/dist/vad.d.cts +105 -0
- package/dist/vad.d.ts +105 -0
- package/dist/vad.d.ts.map +1 -0
- package/dist/vad.js +185 -0
- package/dist/vad.js.map +1 -0
- package/dist/version.cjs +29 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.d.cts +2 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/voice/agent.cjs +308 -0
- package/dist/voice/agent.cjs.map +1 -0
- package/dist/voice/agent.d.cts +83 -0
- package/dist/voice/agent.d.ts +83 -0
- package/dist/voice/agent.d.ts.map +1 -0
- package/dist/voice/agent.js +287 -0
- package/dist/voice/agent.js.map +1 -0
- package/dist/voice/agent.test.cjs +61 -0
- package/dist/voice/agent.test.cjs.map +1 -0
- package/dist/voice/agent.test.js +60 -0
- package/dist/voice/agent.test.js.map +1 -0
- package/dist/voice/agent_activity.cjs +1784 -0
- package/dist/voice/agent_activity.cjs.map +1 -0
- package/dist/voice/agent_activity.d.cts +116 -0
- package/dist/voice/agent_activity.d.ts +116 -0
- package/dist/voice/agent_activity.d.ts.map +1 -0
- package/dist/voice/agent_activity.js +1780 -0
- package/dist/voice/agent_activity.js.map +1 -0
- package/dist/voice/agent_session.cjs +592 -0
- package/dist/voice/agent_session.cjs.map +1 -0
- package/dist/voice/agent_session.d.cts +165 -0
- package/dist/voice/agent_session.d.ts +165 -0
- package/dist/voice/agent_session.d.ts.map +1 -0
- package/dist/voice/agent_session.js +582 -0
- package/dist/voice/agent_session.js.map +1 -0
- package/dist/voice/audio_recognition.cjs +668 -0
- package/dist/voice/audio_recognition.cjs.map +1 -0
- package/dist/voice/audio_recognition.d.cts +127 -0
- package/dist/voice/audio_recognition.d.ts +127 -0
- package/dist/voice/audio_recognition.d.ts.map +1 -0
- package/dist/voice/audio_recognition.js +647 -0
- package/dist/voice/audio_recognition.js.map +1 -0
- package/dist/voice/avatar/datastream_io.cjs +204 -0
- package/dist/voice/avatar/datastream_io.cjs.map +1 -0
- package/dist/voice/avatar/datastream_io.d.cts +37 -0
- package/dist/voice/avatar/datastream_io.d.ts +37 -0
- package/dist/voice/avatar/datastream_io.d.ts.map +1 -0
- package/dist/voice/avatar/datastream_io.js +188 -0
- package/dist/voice/avatar/datastream_io.js.map +1 -0
- package/dist/voice/avatar/index.cjs +23 -0
- package/dist/voice/avatar/index.cjs.map +1 -0
- package/dist/voice/avatar/index.d.cts +2 -0
- package/dist/voice/avatar/index.d.ts +2 -0
- package/dist/voice/avatar/index.d.ts.map +1 -0
- package/dist/voice/avatar/index.js +2 -0
- package/dist/voice/avatar/index.js.map +1 -0
- package/dist/voice/background_audio.cjs +366 -0
- package/dist/voice/background_audio.cjs.map +1 -0
- package/dist/voice/background_audio.d.cts +121 -0
- package/dist/voice/background_audio.d.ts +121 -0
- package/dist/voice/background_audio.d.ts.map +1 -0
- package/dist/voice/background_audio.js +342 -0
- package/dist/voice/background_audio.js.map +1 -0
- package/dist/voice/events.cjs +147 -0
- package/dist/voice/events.cjs.map +1 -0
- package/dist/voice/events.d.cts +127 -0
- package/dist/voice/events.d.ts +127 -0
- package/dist/voice/events.d.ts.map +1 -0
- package/dist/voice/events.js +112 -0
- package/dist/voice/events.js.map +1 -0
- package/dist/voice/generation.cjs +747 -0
- package/dist/voice/generation.cjs.map +1 -0
- package/dist/voice/generation.d.cts +116 -0
- package/dist/voice/generation.d.ts +116 -0
- package/dist/voice/generation.d.ts.map +1 -0
- package/dist/voice/generation.js +719 -0
- package/dist/voice/generation.js.map +1 -0
- package/dist/voice/generation_tools.test.cjs +236 -0
- package/dist/voice/generation_tools.test.cjs.map +1 -0
- package/dist/voice/generation_tools.test.js +235 -0
- package/dist/voice/generation_tools.test.js.map +1 -0
- package/dist/voice/index.cjs +49 -0
- package/dist/voice/index.cjs.map +1 -0
- package/dist/voice/index.d.cts +10 -0
- package/dist/voice/index.d.ts +10 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +16 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/interruption_detection.test.cjs +114 -0
- package/dist/voice/interruption_detection.test.cjs.map +1 -0
- package/dist/voice/interruption_detection.test.js +113 -0
- package/dist/voice/interruption_detection.test.js.map +1 -0
- package/dist/voice/io.cjs +270 -0
- package/dist/voice/io.cjs.map +1 -0
- package/dist/voice/io.d.cts +126 -0
- package/dist/voice/io.d.ts +126 -0
- package/dist/voice/io.d.ts.map +1 -0
- package/dist/voice/io.js +242 -0
- package/dist/voice/io.js.map +1 -0
- package/dist/voice/recorder_io/index.cjs +23 -0
- package/dist/voice/recorder_io/index.cjs.map +1 -0
- package/dist/voice/recorder_io/index.d.cts +2 -0
- package/dist/voice/recorder_io/index.d.ts +2 -0
- package/dist/voice/recorder_io/index.d.ts.map +1 -0
- package/dist/voice/recorder_io/index.js +2 -0
- package/dist/voice/recorder_io/index.js.map +1 -0
- package/dist/voice/recorder_io/recorder_io.cjs +542 -0
- package/dist/voice/recorder_io/recorder_io.cjs.map +1 -0
- package/dist/voice/recorder_io/recorder_io.d.cts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts +100 -0
- package/dist/voice/recorder_io/recorder_io.d.ts.map +1 -0
- package/dist/voice/recorder_io/recorder_io.js +508 -0
- package/dist/voice/recorder_io/recorder_io.js.map +1 -0
- package/dist/voice/report.cjs +75 -0
- package/dist/voice/report.cjs.map +1 -0
- package/dist/voice/report.d.cts +42 -0
- package/dist/voice/report.d.ts +42 -0
- package/dist/voice/report.d.ts.map +1 -0
- package/dist/voice/report.js +50 -0
- package/dist/voice/report.js.map +1 -0
- package/dist/voice/room_io/_input.cjs +133 -0
- package/dist/voice/room_io/_input.cjs.map +1 -0
- package/dist/voice/room_io/_input.d.cts +24 -0
- package/dist/voice/room_io/_input.d.ts +24 -0
- package/dist/voice/room_io/_input.d.ts.map +1 -0
- package/dist/voice/room_io/_input.js +114 -0
- package/dist/voice/room_io/_input.js.map +1 -0
- package/dist/voice/room_io/_output.cjs +359 -0
- package/dist/voice/room_io/_output.cjs.map +1 -0
- package/dist/voice/room_io/_output.d.cts +77 -0
- package/dist/voice/room_io/_output.d.ts +77 -0
- package/dist/voice/room_io/_output.d.ts.map +1 -0
- package/dist/voice/room_io/_output.js +343 -0
- package/dist/voice/room_io/_output.js.map +1 -0
- package/dist/voice/room_io/index.cjs +25 -0
- package/dist/voice/room_io/index.cjs.map +1 -0
- package/dist/voice/room_io/index.d.cts +3 -0
- package/dist/voice/room_io/index.d.ts +3 -0
- package/dist/voice/room_io/index.d.ts.map +1 -0
- package/dist/voice/room_io/index.js +3 -0
- package/dist/voice/room_io/index.js.map +1 -0
- package/dist/voice/room_io/room_io.cjs +373 -0
- package/dist/voice/room_io/room_io.cjs.map +1 -0
- package/dist/voice/room_io/room_io.d.cts +94 -0
- package/dist/voice/room_io/room_io.d.ts +94 -0
- package/dist/voice/room_io/room_io.d.ts.map +1 -0
- package/dist/voice/room_io/room_io.js +364 -0
- package/dist/voice/room_io/room_io.js.map +1 -0
- package/dist/voice/run_context.cjs +51 -0
- package/dist/voice/run_context.cjs.map +1 -0
- package/dist/voice/run_context.d.cts +22 -0
- package/dist/voice/run_context.d.ts +22 -0
- package/dist/voice/run_context.d.ts.map +1 -0
- package/dist/voice/run_context.js +27 -0
- package/dist/voice/run_context.js.map +1 -0
- package/dist/voice/speech_handle.cjs +228 -0
- package/dist/voice/speech_handle.cjs.map +1 -0
- package/dist/voice/speech_handle.d.cts +97 -0
- package/dist/voice/speech_handle.d.ts +97 -0
- package/dist/voice/speech_handle.d.ts.map +1 -0
- package/dist/voice/speech_handle.js +204 -0
- package/dist/voice/speech_handle.js.map +1 -0
- package/dist/voice/transcription/_utils.cjs +45 -0
- package/dist/voice/transcription/_utils.cjs.map +1 -0
- package/dist/voice/transcription/_utils.d.cts +3 -0
- package/dist/voice/transcription/_utils.d.ts +3 -0
- package/dist/voice/transcription/_utils.d.ts.map +1 -0
- package/dist/voice/transcription/_utils.js +21 -0
- package/dist/voice/transcription/_utils.js.map +1 -0
- package/dist/voice/transcription/index.cjs +23 -0
- package/dist/voice/transcription/index.cjs.map +1 -0
- package/dist/voice/transcription/index.d.cts +2 -0
- package/dist/voice/transcription/index.d.ts +2 -0
- package/dist/voice/transcription/index.d.ts.map +1 -0
- package/dist/voice/transcription/index.js +2 -0
- package/dist/voice/transcription/index.js.map +1 -0
- package/dist/voice/transcription/synchronizer.cjs +379 -0
- package/dist/voice/transcription/synchronizer.cjs.map +1 -0
- package/dist/voice/transcription/synchronizer.d.cts +87 -0
- package/dist/voice/transcription/synchronizer.d.ts +87 -0
- package/dist/voice/transcription/synchronizer.d.ts.map +1 -0
- package/dist/voice/transcription/synchronizer.js +354 -0
- package/dist/voice/transcription/synchronizer.js.map +1 -0
- package/dist/worker.cjs +680 -0
- package/dist/worker.cjs.map +1 -0
- package/dist/worker.d.cts +119 -0
- package/dist/worker.d.ts +119 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +645 -0
- package/dist/worker.js.map +1 -0
- package/package.json +86 -0
- package/resources/NOTICE +2 -0
- package/resources/keyboard-typing.ogg +0 -0
- package/resources/keyboard-typing2.ogg +0 -0
- package/resources/office-ambience.ogg +0 -0
- package/src/_exceptions.ts +137 -0
- package/src/audio.ts +205 -0
- package/src/cli.ts +224 -0
- package/src/connection_pool.test.ts +346 -0
- package/src/connection_pool.ts +307 -0
- package/src/constants.ts +9 -0
- package/src/generator.ts +38 -0
- package/src/http_server.ts +64 -0
- package/src/index.ts +41 -0
- package/src/inference/api_protos.ts +82 -0
- package/src/inference/index.ts +32 -0
- package/src/inference/interruption/AdaptiveInterruptionDetector.ts +166 -0
- package/src/inference/interruption/InterruptionStream.ts +397 -0
- package/src/inference/interruption/defaults.ts +33 -0
- package/src/inference/interruption/errors.ts +0 -0
- package/src/inference/interruption/http_transport.ts +61 -0
- package/src/inference/interruption/index.ts +4 -0
- package/src/inference/interruption/interruption.ts +88 -0
- package/src/inference/llm.ts +532 -0
- package/src/inference/stt.ts +524 -0
- package/src/inference/tts.ts +574 -0
- package/src/inference/utils.test.ts +31 -0
- package/src/inference/utils.ts +81 -0
- package/src/inference_runner.ts +19 -0
- package/src/ipc/index.ts +5 -0
- package/src/ipc/inference_executor.ts +7 -0
- package/src/ipc/inference_proc_executor.ts +101 -0
- package/src/ipc/inference_proc_lazy_main.ts +115 -0
- package/src/ipc/job_executor.ts +23 -0
- package/src/ipc/job_proc_executor.ts +122 -0
- package/src/ipc/job_proc_lazy_main.ts +247 -0
- package/src/ipc/message.ts +52 -0
- package/src/ipc/proc_pool.ts +164 -0
- package/src/ipc/supervised_proc.test.ts +153 -0
- package/src/ipc/supervised_proc.ts +242 -0
- package/src/job.ts +461 -0
- package/src/llm/__snapshots__/chat_context.test.ts.snap +527 -0
- package/src/llm/__snapshots__/tool_context.test.ts.snap +177 -0
- package/src/llm/__snapshots__/zod-utils.test.ts.snap +559 -0
- package/src/llm/chat_context.test.ts +1057 -0
- package/src/llm/chat_context.ts +759 -0
- package/src/llm/fallback_adapter.test.ts +238 -0
- package/src/llm/fallback_adapter.ts +391 -0
- package/src/llm/index.ts +74 -0
- package/src/llm/llm.ts +303 -0
- package/src/llm/provider_format/google.test.ts +843 -0
- package/src/llm/provider_format/google.ts +134 -0
- package/src/llm/provider_format/index.ts +23 -0
- package/src/llm/provider_format/openai.test.ts +675 -0
- package/src/llm/provider_format/openai.ts +146 -0
- package/src/llm/provider_format/utils.ts +187 -0
- package/src/llm/realtime.ts +163 -0
- package/src/llm/remote_chat_context.test.ts +290 -0
- package/src/llm/remote_chat_context.ts +114 -0
- package/src/llm/tool_context.test.ts +407 -0
- package/src/llm/tool_context.ts +343 -0
- package/src/llm/tool_context.type.test.ts +115 -0
- package/src/llm/utils.test.ts +670 -0
- package/src/llm/utils.ts +336 -0
- package/src/llm/zod-utils.test.ts +577 -0
- package/src/llm/zod-utils.ts +153 -0
- package/src/log.ts +83 -0
- package/src/metrics/base.ts +168 -0
- package/src/metrics/index.ts +15 -0
- package/src/metrics/usage_collector.ts +46 -0
- package/src/metrics/utils.ts +64 -0
- package/src/plugin.ts +46 -0
- package/src/stream/deferred_stream.test.ts +755 -0
- package/src/stream/deferred_stream.ts +127 -0
- package/src/stream/identity_transform.test.ts +179 -0
- package/src/stream/identity_transform.ts +18 -0
- package/src/stream/index.ts +7 -0
- package/src/stream/merge_readable_streams.ts +40 -0
- package/src/stream/stream_channel.test.ts +166 -0
- package/src/stream/stream_channel.ts +44 -0
- package/src/stt/index.ts +15 -0
- package/src/stt/stream_adapter.ts +107 -0
- package/src/stt/stt.ts +374 -0
- package/src/telemetry/index.ts +28 -0
- package/src/telemetry/logging.ts +55 -0
- package/src/telemetry/otel_http_exporter.ts +195 -0
- package/src/telemetry/pino_otel_transport.ts +265 -0
- package/src/telemetry/trace_types.ts +95 -0
- package/src/telemetry/traces.ts +612 -0
- package/src/telemetry/utils.ts +61 -0
- package/src/tokenize/basic/basic.ts +83 -0
- package/src/tokenize/basic/hyphenator.ts +434 -0
- package/src/tokenize/basic/index.ts +11 -0
- package/src/tokenize/basic/paragraph.ts +43 -0
- package/src/tokenize/basic/sentence.ts +89 -0
- package/src/tokenize/basic/word.ts +27 -0
- package/src/tokenize/index.ts +16 -0
- package/src/tokenize/token_stream.ts +180 -0
- package/src/tokenize/tokenizer.test.ts +255 -0
- package/src/tokenize/tokenizer.ts +152 -0
- package/src/transcription.ts +307 -0
- package/src/tts/index.ts +12 -0
- package/src/tts/stream_adapter.ts +110 -0
- package/src/tts/tts.ts +598 -0
- package/src/types.ts +66 -0
- package/src/utils/ws_transport.test.ts +282 -0
- package/src/utils/ws_transport.ts +22 -0
- package/src/utils.test.ts +651 -0
- package/src/utils.ts +871 -0
- package/src/vad.ts +262 -0
- package/src/version.ts +5 -0
- package/src/voice/agent.test.ts +80 -0
- package/src/voice/agent.ts +418 -0
- package/src/voice/agent_activity.ts +2375 -0
- package/src/voice/agent_session.ts +866 -0
- package/src/voice/audio_recognition.ts +877 -0
- package/src/voice/avatar/datastream_io.ts +247 -0
- package/src/voice/avatar/index.ts +4 -0
- package/src/voice/background_audio.ts +491 -0
- package/src/voice/events.ts +261 -0
- package/src/voice/generation.ts +946 -0
- package/src/voice/generation_tools.test.ts +268 -0
- package/src/voice/index.ts +12 -0
- package/src/voice/interruption_detection.test.ts +151 -0
- package/src/voice/io.ts +347 -0
- package/src/voice/recorder_io/index.ts +4 -0
- package/src/voice/recorder_io/recorder_io.ts +690 -0
- package/src/voice/report.ts +100 -0
- package/src/voice/room_io/_input.ts +162 -0
- package/src/voice/room_io/_output.ts +439 -0
- package/src/voice/room_io/index.ts +5 -0
- package/src/voice/room_io/room_io.ts +518 -0
- package/src/voice/run_context.ts +34 -0
- package/src/voice/speech_handle.ts +250 -0
- package/src/voice/transcription/_utils.ts +25 -0
- package/src/voice/transcription/index.ts +4 -0
- package/src/voice/transcription/synchronizer.ts +477 -0
- package/src/worker.ts +798 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var ws_transport_exports = {};
|
|
30
|
+
__export(ws_transport_exports, {
|
|
31
|
+
webSocketStream: () => webSocketStream
|
|
32
|
+
});
|
|
33
|
+
module.exports = __toCommonJS(ws_transport_exports);
|
|
34
|
+
var import_node_stream = require("node:stream");
|
|
35
|
+
var import_ws = __toESM(require("ws"), 1);
|
|
36
|
+
function webSocketStream(wsUrl) {
|
|
37
|
+
const ws = new import_ws.default(wsUrl);
|
|
38
|
+
const duplex = (0, import_ws.createWebSocketStream)(ws);
|
|
39
|
+
duplex.on("error", console.error);
|
|
40
|
+
duplex.on("end", () => {
|
|
41
|
+
duplex.end();
|
|
42
|
+
});
|
|
43
|
+
const writable = import_node_stream.Writable.toWeb(duplex);
|
|
44
|
+
const readable = import_node_stream.Readable.toWeb(duplex);
|
|
45
|
+
return { readable, writable, close: ws.close };
|
|
46
|
+
}
|
|
47
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
48
|
+
0 && (module.exports = {
|
|
49
|
+
webSocketStream
|
|
50
|
+
});
|
|
51
|
+
//# sourceMappingURL=ws_transport.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/ws_transport.ts"],"sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport WebSocket, { createWebSocketStream } from 'ws';\n\nexport function webSocketStream(wsUrl: string) {\n const ws = new WebSocket(wsUrl);\n const duplex = createWebSocketStream(ws);\n duplex.on('error', console.error);\n\n // End the write side when the read side ends to properly close the stream.\n // This is needed because Readable.toWeb() waits for both sides of the duplex\n // to close before signaling done on the ReadableStream.\n duplex.on('end', () => {\n duplex.end();\n });\n\n // Convert the writable side\n const writable = Writable.toWeb(duplex);\n // Convert the readable side\n const readable = Readable.toWeb(duplex);\n\n return { readable, writable, close: ws.close };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAmC;AACnC,gBAAiD;AAE1C,SAAS,gBAAgB,OAAe;AAC7C,QAAM,KAAK,IAAI,UAAAA,QAAU,KAAK;AAC9B,QAAM,aAAS,iCAAsB,EAAE;AACvC,SAAO,GAAG,SAAS,QAAQ,KAAK;AAKhC,SAAO,GAAG,OAAO,MAAM;AACrB,WAAO,IAAI;AAAA,EACb,CAAC;AAGD,QAAM,WAAW,4BAAS,MAAM,MAAM;AAEtC,QAAM,WAAW,4BAAS,MAAM,MAAM;AAEtC,SAAO,EAAE,UAAU,UAAU,OAAO,GAAG,MAAM;AAC/C;","names":["WebSocket"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
+
export declare function webSocketStream(wsUrl: string): {
|
|
5
|
+
readable: import("stream/web").ReadableStream<any>;
|
|
6
|
+
writable: import("stream/web").WritableStream<any>;
|
|
7
|
+
close: (code?: number | undefined, data?: string | Buffer | undefined) => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=ws_transport.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
4
|
+
export declare function webSocketStream(wsUrl: string): {
|
|
5
|
+
readable: import("stream/web").ReadableStream<any>;
|
|
6
|
+
writable: import("stream/web").WritableStream<any>;
|
|
7
|
+
close: (code?: number | undefined, data?: string | Buffer | undefined) => void;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=ws_transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws_transport.d.ts","sourceRoot":"","sources":["../../src/utils/ws_transport.ts"],"names":[],"mappings":";;;AAGA,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM;;;;EAkB5C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Readable, Writable } from "node:stream";
|
|
2
|
+
import WebSocket, { createWebSocketStream } from "ws";
|
|
3
|
+
function webSocketStream(wsUrl) {
|
|
4
|
+
const ws = new WebSocket(wsUrl);
|
|
5
|
+
const duplex = createWebSocketStream(ws);
|
|
6
|
+
duplex.on("error", console.error);
|
|
7
|
+
duplex.on("end", () => {
|
|
8
|
+
duplex.end();
|
|
9
|
+
});
|
|
10
|
+
const writable = Writable.toWeb(duplex);
|
|
11
|
+
const readable = Readable.toWeb(duplex);
|
|
12
|
+
return { readable, writable, close: ws.close };
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
webSocketStream
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=ws_transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/ws_transport.ts"],"sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport WebSocket, { createWebSocketStream } from 'ws';\n\nexport function webSocketStream(wsUrl: string) {\n const ws = new WebSocket(wsUrl);\n const duplex = createWebSocketStream(ws);\n duplex.on('error', console.error);\n\n // End the write side when the read side ends to properly close the stream.\n // This is needed because Readable.toWeb() waits for both sides of the duplex\n // to close before signaling done on the ReadableStream.\n duplex.on('end', () => {\n duplex.end();\n });\n\n // Convert the writable side\n const writable = Writable.toWeb(duplex);\n // Convert the readable side\n const readable = Readable.toWeb(duplex);\n\n return { readable, writable, close: ws.close };\n}\n"],"mappings":"AAAA,SAAS,UAAU,gBAAgB;AACnC,OAAO,aAAa,6BAA6B;AAE1C,SAAS,gBAAgB,OAAe;AAC7C,QAAM,KAAK,IAAI,UAAU,KAAK;AAC9B,QAAM,SAAS,sBAAsB,EAAE;AACvC,SAAO,GAAG,SAAS,QAAQ,KAAK;AAKhC,SAAO,GAAG,OAAO,MAAM;AACrB,WAAO,IAAI;AAAA,EACb,CAAC;AAGD,QAAM,WAAW,SAAS,MAAM,MAAM;AAEtC,QAAM,WAAW,SAAS,MAAM,MAAM;AAEtC,SAAO,EAAE,UAAU,UAAU,OAAO,GAAG,MAAM;AAC/C;","names":[]}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var import_vitest = require("vitest");
|
|
3
|
+
var import_ws = require("ws");
|
|
4
|
+
var import_ws_transport = require("./ws_transport.cjs");
|
|
5
|
+
(0, import_vitest.describe)("webSocketStream", () => {
|
|
6
|
+
(0, import_vitest.describe)("readable stream", () => {
|
|
7
|
+
(0, import_vitest.it)("receives messages from the WebSocket", async () => {
|
|
8
|
+
const wss = await new Promise((resolve) => {
|
|
9
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
10
|
+
});
|
|
11
|
+
const port = wss.address().port;
|
|
12
|
+
wss.on("connection", (serverWs) => {
|
|
13
|
+
serverWs.send("hello");
|
|
14
|
+
serverWs.send("world");
|
|
15
|
+
serverWs.close();
|
|
16
|
+
});
|
|
17
|
+
const { readable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
18
|
+
const reader = readable.getReader();
|
|
19
|
+
const messages = [];
|
|
20
|
+
try {
|
|
21
|
+
while (true) {
|
|
22
|
+
const { done, value } = await reader.read();
|
|
23
|
+
if (done) break;
|
|
24
|
+
messages.push(Buffer.from(value).toString());
|
|
25
|
+
}
|
|
26
|
+
} finally {
|
|
27
|
+
reader.releaseLock();
|
|
28
|
+
}
|
|
29
|
+
(0, import_vitest.expect)(messages).toEqual(["hello", "world"]);
|
|
30
|
+
wss.close();
|
|
31
|
+
});
|
|
32
|
+
(0, import_vitest.it)("handles binary messages", async () => {
|
|
33
|
+
const wss = await new Promise((resolve) => {
|
|
34
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
35
|
+
});
|
|
36
|
+
const port = wss.address().port;
|
|
37
|
+
const binaryData = new Uint8Array([1, 2, 3, 4, 5]);
|
|
38
|
+
wss.on("connection", (serverWs) => {
|
|
39
|
+
serverWs.send(binaryData);
|
|
40
|
+
serverWs.close();
|
|
41
|
+
});
|
|
42
|
+
const { readable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
43
|
+
const reader = readable.getReader();
|
|
44
|
+
const chunks = [];
|
|
45
|
+
try {
|
|
46
|
+
while (true) {
|
|
47
|
+
const { done, value } = await reader.read();
|
|
48
|
+
if (done) break;
|
|
49
|
+
chunks.push(new Uint8Array(value));
|
|
50
|
+
}
|
|
51
|
+
} finally {
|
|
52
|
+
reader.releaseLock();
|
|
53
|
+
}
|
|
54
|
+
(0, import_vitest.expect)(chunks).toHaveLength(1);
|
|
55
|
+
(0, import_vitest.expect)(Array.from(chunks[0])).toEqual([1, 2, 3, 4, 5]);
|
|
56
|
+
wss.close();
|
|
57
|
+
});
|
|
58
|
+
(0, import_vitest.it)("handles empty stream when connection closes immediately", async () => {
|
|
59
|
+
const wss = await new Promise((resolve) => {
|
|
60
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
61
|
+
});
|
|
62
|
+
const port = wss.address().port;
|
|
63
|
+
wss.on("connection", (serverWs) => {
|
|
64
|
+
serverWs.close();
|
|
65
|
+
});
|
|
66
|
+
const { readable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
67
|
+
const reader = readable.getReader();
|
|
68
|
+
const chunks = [];
|
|
69
|
+
try {
|
|
70
|
+
while (true) {
|
|
71
|
+
const { done, value } = await reader.read();
|
|
72
|
+
if (done) break;
|
|
73
|
+
chunks.push(value);
|
|
74
|
+
}
|
|
75
|
+
} finally {
|
|
76
|
+
reader.releaseLock();
|
|
77
|
+
}
|
|
78
|
+
(0, import_vitest.expect)(chunks).toEqual([]);
|
|
79
|
+
wss.close();
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
(0, import_vitest.describe)("writable stream", () => {
|
|
83
|
+
(0, import_vitest.it)("sends messages through the WebSocket", async () => {
|
|
84
|
+
const wss = await new Promise((resolve) => {
|
|
85
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
86
|
+
});
|
|
87
|
+
const port = wss.address().port;
|
|
88
|
+
const ws = new import_ws.WebSocket(`ws://localhost:${port}`);
|
|
89
|
+
const connected = new Promise((resolve) => {
|
|
90
|
+
ws.on("open", resolve);
|
|
91
|
+
});
|
|
92
|
+
const messagesReceived = [];
|
|
93
|
+
const serverClosed = new Promise((resolve) => {
|
|
94
|
+
wss.on("connection", (serverWs) => {
|
|
95
|
+
serverWs.on("message", (data) => {
|
|
96
|
+
messagesReceived.push(data.toString());
|
|
97
|
+
});
|
|
98
|
+
serverWs.on("close", resolve);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
await connected;
|
|
102
|
+
const { writable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
103
|
+
const writer = writable.getWriter();
|
|
104
|
+
await writer.write(new TextEncoder().encode("hello"));
|
|
105
|
+
await writer.write(new TextEncoder().encode("world"));
|
|
106
|
+
await writer.close();
|
|
107
|
+
await serverClosed;
|
|
108
|
+
(0, import_vitest.expect)(messagesReceived).toEqual(["hello", "world"]);
|
|
109
|
+
wss.close();
|
|
110
|
+
});
|
|
111
|
+
(0, import_vitest.it)("sends binary data through the WebSocket", async () => {
|
|
112
|
+
const wss = await new Promise((resolve) => {
|
|
113
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
114
|
+
});
|
|
115
|
+
const port = wss.address().port;
|
|
116
|
+
const chunksReceived = [];
|
|
117
|
+
const serverClosed = new Promise((resolve) => {
|
|
118
|
+
wss.on("connection", (serverWs) => {
|
|
119
|
+
serverWs.on("message", (data) => {
|
|
120
|
+
chunksReceived.push(Buffer.from(data));
|
|
121
|
+
});
|
|
122
|
+
serverWs.on("close", resolve);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
const { writable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
126
|
+
const writer = writable.getWriter();
|
|
127
|
+
const binaryData = new Uint8Array([10, 20, 30, 40, 50]);
|
|
128
|
+
await writer.write(binaryData);
|
|
129
|
+
await writer.close();
|
|
130
|
+
await serverClosed;
|
|
131
|
+
(0, import_vitest.expect)(chunksReceived).toHaveLength(1);
|
|
132
|
+
(0, import_vitest.expect)(Array.from(chunksReceived[0])).toEqual([10, 20, 30, 40, 50]);
|
|
133
|
+
wss.close();
|
|
134
|
+
});
|
|
135
|
+
(0, import_vitest.it)("buffers writes if readyState is CONNECTING", async () => {
|
|
136
|
+
const wss = await new Promise((resolve) => {
|
|
137
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
138
|
+
});
|
|
139
|
+
const port = wss.address().port;
|
|
140
|
+
const { writable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
141
|
+
const writer = writable.getWriter();
|
|
142
|
+
const messagesReceived = [];
|
|
143
|
+
const serverClosed = new Promise((resolve) => {
|
|
144
|
+
wss.on("connection", (serverWs) => {
|
|
145
|
+
serverWs.on("message", (data) => {
|
|
146
|
+
messagesReceived.push(data.toString());
|
|
147
|
+
});
|
|
148
|
+
serverWs.on("close", resolve);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
await writer.write(new TextEncoder().encode("buffered message"));
|
|
152
|
+
await writer.close();
|
|
153
|
+
await serverClosed;
|
|
154
|
+
(0, import_vitest.expect)(messagesReceived).toEqual(["buffered message"]);
|
|
155
|
+
wss.close();
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
(0, import_vitest.describe)("bidirectional communication", () => {
|
|
159
|
+
(0, import_vitest.it)("supports echo pattern with readable and writable", async () => {
|
|
160
|
+
const wss = await new Promise((resolve) => {
|
|
161
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
162
|
+
});
|
|
163
|
+
const port = wss.address().port;
|
|
164
|
+
wss.on("connection", (serverWs) => {
|
|
165
|
+
serverWs.on("message", (data) => {
|
|
166
|
+
serverWs.send(data);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
const { readable, writable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
170
|
+
const writer = writable.getWriter();
|
|
171
|
+
const reader = readable.getReader();
|
|
172
|
+
await writer.write(new TextEncoder().encode("ping1"));
|
|
173
|
+
await writer.write(new TextEncoder().encode("ping2"));
|
|
174
|
+
const { value: response1 } = await reader.read();
|
|
175
|
+
const { value: response2 } = await reader.read();
|
|
176
|
+
(0, import_vitest.expect)(Buffer.from(response1).toString()).toBe("ping1");
|
|
177
|
+
(0, import_vitest.expect)(Buffer.from(response2).toString()).toBe("ping2");
|
|
178
|
+
reader.releaseLock();
|
|
179
|
+
await writer.close();
|
|
180
|
+
wss.close();
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
(0, import_vitest.describe)("error handling", () => {
|
|
184
|
+
(0, import_vitest.it)("readable stream ends when WebSocket closes unexpectedly", async () => {
|
|
185
|
+
const wss = await new Promise((resolve) => {
|
|
186
|
+
const server = new import_ws.WebSocketServer({ port: 0 }, () => resolve(server));
|
|
187
|
+
});
|
|
188
|
+
const port = wss.address().port;
|
|
189
|
+
wss.on("connection", (serverWs) => {
|
|
190
|
+
serverWs.send("before close");
|
|
191
|
+
serverWs.terminate();
|
|
192
|
+
});
|
|
193
|
+
const { readable } = (0, import_ws_transport.webSocketStream)(`ws://localhost:${port}`);
|
|
194
|
+
const reader = readable.getReader();
|
|
195
|
+
const chunks = [];
|
|
196
|
+
try {
|
|
197
|
+
while (true) {
|
|
198
|
+
const { done, value } = await reader.read();
|
|
199
|
+
if (done) break;
|
|
200
|
+
chunks.push(Buffer.from(value).toString());
|
|
201
|
+
}
|
|
202
|
+
} catch (error) {
|
|
203
|
+
console.error(error);
|
|
204
|
+
} finally {
|
|
205
|
+
reader.releaseLock();
|
|
206
|
+
}
|
|
207
|
+
(0, import_vitest.expect)(chunks).toContain("before close");
|
|
208
|
+
wss.close();
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
//# sourceMappingURL=ws_transport.test.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/ws_transport.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport { WebSocket, WebSocketServer } from 'ws';\nimport { webSocketStream } from './ws_transport.js';\n\ndescribe('webSocketStream', () => {\n describe('readable stream', () => {\n it('receives messages from the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.send('hello');\n serverWs.send('world');\n serverWs.close();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const messages: string[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n messages.push(Buffer.from(value).toString());\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(messages).toEqual(['hello', 'world']);\n\n wss.close();\n });\n\n it('handles binary messages', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const binaryData = new Uint8Array([1, 2, 3, 4, 5]);\n\n wss.on('connection', (serverWs) => {\n serverWs.send(binaryData);\n serverWs.close();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: Uint8Array[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(new Uint8Array(value));\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(chunks).toHaveLength(1);\n expect(Array.from(chunks[0]!)).toEqual([1, 2, 3, 4, 5]);\n\n wss.close();\n });\n\n it('handles empty stream when connection closes immediately', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.close();\n });\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: Uint8Array[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(chunks).toEqual([]);\n\n wss.close();\n });\n });\n\n describe('writable stream', () => {\n it('sends messages through the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n const ws = new WebSocket(`ws://localhost:${port}`);\n\n const connected = new Promise<void>((resolve) => {\n ws.on('open', resolve);\n });\n\n const messagesReceived: string[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n messagesReceived.push(data.toString());\n });\n serverWs.on('close', resolve);\n });\n });\n\n await connected;\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n await writer.write(new TextEncoder().encode('hello'));\n await writer.write(new TextEncoder().encode('world'));\n await writer.close();\n\n await serverClosed;\n\n expect(messagesReceived).toEqual(['hello', 'world']);\n\n wss.close();\n });\n\n it('sends binary data through the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const chunksReceived: Buffer[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n chunksReceived.push(Buffer.from(data as Buffer));\n });\n serverWs.on('close', resolve);\n });\n });\n\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n const binaryData = new Uint8Array([10, 20, 30, 40, 50]);\n await writer.write(binaryData);\n await writer.close();\n\n await serverClosed;\n\n expect(chunksReceived).toHaveLength(1);\n expect(Array.from(chunksReceived[0]!)).toEqual([10, 20, 30, 40, 50]);\n\n wss.close();\n });\n\n it('buffers writes if readyState is CONNECTING', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n const messagesReceived: string[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n messagesReceived.push(data.toString());\n });\n serverWs.on('close', resolve);\n });\n });\n\n // These writes should be buffered\n await writer.write(new TextEncoder().encode('buffered message'));\n await writer.close();\n\n await serverClosed;\n\n expect(messagesReceived).toEqual(['buffered message']);\n\n wss.close();\n });\n });\n\n describe('bidirectional communication', () => {\n it('supports echo pattern with readable and writable', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n // Server echoes messages back\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n serverWs.send(data);\n });\n });\n\n const { readable, writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n const reader = readable.getReader();\n\n // Send messages\n await writer.write(new TextEncoder().encode('ping1'));\n await writer.write(new TextEncoder().encode('ping2'));\n\n // Read echoed responses\n const { value: response1 } = await reader.read();\n const { value: response2 } = await reader.read();\n\n expect(Buffer.from(response1!).toString()).toBe('ping1');\n expect(Buffer.from(response2!).toString()).toBe('ping2');\n\n reader.releaseLock();\n await writer.close();\n\n wss.close();\n });\n });\n\n describe('error handling', () => {\n it('readable stream ends when WebSocket closes unexpectedly', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.send('before close');\n // Terminate connection abruptly\n serverWs.terminate();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: string[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(Buffer.from(value).toString());\n }\n } catch (error) {\n console.error(error);\n // Connection terminated, stream may error\n } finally {\n reader.releaseLock();\n }\n\n // Should have received the message sent before termination\n expect(chunks).toContain('before close');\n\n wss.close();\n });\n });\n});\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { WebSocket, WebSocketServer } from "ws";
|
|
3
|
+
import { webSocketStream } from "./ws_transport.js";
|
|
4
|
+
describe("webSocketStream", () => {
|
|
5
|
+
describe("readable stream", () => {
|
|
6
|
+
it("receives messages from the WebSocket", async () => {
|
|
7
|
+
const wss = await new Promise((resolve) => {
|
|
8
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
9
|
+
});
|
|
10
|
+
const port = wss.address().port;
|
|
11
|
+
wss.on("connection", (serverWs) => {
|
|
12
|
+
serverWs.send("hello");
|
|
13
|
+
serverWs.send("world");
|
|
14
|
+
serverWs.close();
|
|
15
|
+
});
|
|
16
|
+
const { readable } = webSocketStream(`ws://localhost:${port}`);
|
|
17
|
+
const reader = readable.getReader();
|
|
18
|
+
const messages = [];
|
|
19
|
+
try {
|
|
20
|
+
while (true) {
|
|
21
|
+
const { done, value } = await reader.read();
|
|
22
|
+
if (done) break;
|
|
23
|
+
messages.push(Buffer.from(value).toString());
|
|
24
|
+
}
|
|
25
|
+
} finally {
|
|
26
|
+
reader.releaseLock();
|
|
27
|
+
}
|
|
28
|
+
expect(messages).toEqual(["hello", "world"]);
|
|
29
|
+
wss.close();
|
|
30
|
+
});
|
|
31
|
+
it("handles binary messages", async () => {
|
|
32
|
+
const wss = await new Promise((resolve) => {
|
|
33
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
34
|
+
});
|
|
35
|
+
const port = wss.address().port;
|
|
36
|
+
const binaryData = new Uint8Array([1, 2, 3, 4, 5]);
|
|
37
|
+
wss.on("connection", (serverWs) => {
|
|
38
|
+
serverWs.send(binaryData);
|
|
39
|
+
serverWs.close();
|
|
40
|
+
});
|
|
41
|
+
const { readable } = webSocketStream(`ws://localhost:${port}`);
|
|
42
|
+
const reader = readable.getReader();
|
|
43
|
+
const chunks = [];
|
|
44
|
+
try {
|
|
45
|
+
while (true) {
|
|
46
|
+
const { done, value } = await reader.read();
|
|
47
|
+
if (done) break;
|
|
48
|
+
chunks.push(new Uint8Array(value));
|
|
49
|
+
}
|
|
50
|
+
} finally {
|
|
51
|
+
reader.releaseLock();
|
|
52
|
+
}
|
|
53
|
+
expect(chunks).toHaveLength(1);
|
|
54
|
+
expect(Array.from(chunks[0])).toEqual([1, 2, 3, 4, 5]);
|
|
55
|
+
wss.close();
|
|
56
|
+
});
|
|
57
|
+
it("handles empty stream when connection closes immediately", async () => {
|
|
58
|
+
const wss = await new Promise((resolve) => {
|
|
59
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
60
|
+
});
|
|
61
|
+
const port = wss.address().port;
|
|
62
|
+
wss.on("connection", (serverWs) => {
|
|
63
|
+
serverWs.close();
|
|
64
|
+
});
|
|
65
|
+
const { readable } = webSocketStream(`ws://localhost:${port}`);
|
|
66
|
+
const reader = readable.getReader();
|
|
67
|
+
const chunks = [];
|
|
68
|
+
try {
|
|
69
|
+
while (true) {
|
|
70
|
+
const { done, value } = await reader.read();
|
|
71
|
+
if (done) break;
|
|
72
|
+
chunks.push(value);
|
|
73
|
+
}
|
|
74
|
+
} finally {
|
|
75
|
+
reader.releaseLock();
|
|
76
|
+
}
|
|
77
|
+
expect(chunks).toEqual([]);
|
|
78
|
+
wss.close();
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe("writable stream", () => {
|
|
82
|
+
it("sends messages through the WebSocket", async () => {
|
|
83
|
+
const wss = await new Promise((resolve) => {
|
|
84
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
85
|
+
});
|
|
86
|
+
const port = wss.address().port;
|
|
87
|
+
const ws = new WebSocket(`ws://localhost:${port}`);
|
|
88
|
+
const connected = new Promise((resolve) => {
|
|
89
|
+
ws.on("open", resolve);
|
|
90
|
+
});
|
|
91
|
+
const messagesReceived = [];
|
|
92
|
+
const serverClosed = new Promise((resolve) => {
|
|
93
|
+
wss.on("connection", (serverWs) => {
|
|
94
|
+
serverWs.on("message", (data) => {
|
|
95
|
+
messagesReceived.push(data.toString());
|
|
96
|
+
});
|
|
97
|
+
serverWs.on("close", resolve);
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
await connected;
|
|
101
|
+
const { writable } = webSocketStream(`ws://localhost:${port}`);
|
|
102
|
+
const writer = writable.getWriter();
|
|
103
|
+
await writer.write(new TextEncoder().encode("hello"));
|
|
104
|
+
await writer.write(new TextEncoder().encode("world"));
|
|
105
|
+
await writer.close();
|
|
106
|
+
await serverClosed;
|
|
107
|
+
expect(messagesReceived).toEqual(["hello", "world"]);
|
|
108
|
+
wss.close();
|
|
109
|
+
});
|
|
110
|
+
it("sends binary data through the WebSocket", async () => {
|
|
111
|
+
const wss = await new Promise((resolve) => {
|
|
112
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
113
|
+
});
|
|
114
|
+
const port = wss.address().port;
|
|
115
|
+
const chunksReceived = [];
|
|
116
|
+
const serverClosed = new Promise((resolve) => {
|
|
117
|
+
wss.on("connection", (serverWs) => {
|
|
118
|
+
serverWs.on("message", (data) => {
|
|
119
|
+
chunksReceived.push(Buffer.from(data));
|
|
120
|
+
});
|
|
121
|
+
serverWs.on("close", resolve);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
const { writable } = webSocketStream(`ws://localhost:${port}`);
|
|
125
|
+
const writer = writable.getWriter();
|
|
126
|
+
const binaryData = new Uint8Array([10, 20, 30, 40, 50]);
|
|
127
|
+
await writer.write(binaryData);
|
|
128
|
+
await writer.close();
|
|
129
|
+
await serverClosed;
|
|
130
|
+
expect(chunksReceived).toHaveLength(1);
|
|
131
|
+
expect(Array.from(chunksReceived[0])).toEqual([10, 20, 30, 40, 50]);
|
|
132
|
+
wss.close();
|
|
133
|
+
});
|
|
134
|
+
it("buffers writes if readyState is CONNECTING", async () => {
|
|
135
|
+
const wss = await new Promise((resolve) => {
|
|
136
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
137
|
+
});
|
|
138
|
+
const port = wss.address().port;
|
|
139
|
+
const { writable } = webSocketStream(`ws://localhost:${port}`);
|
|
140
|
+
const writer = writable.getWriter();
|
|
141
|
+
const messagesReceived = [];
|
|
142
|
+
const serverClosed = new Promise((resolve) => {
|
|
143
|
+
wss.on("connection", (serverWs) => {
|
|
144
|
+
serverWs.on("message", (data) => {
|
|
145
|
+
messagesReceived.push(data.toString());
|
|
146
|
+
});
|
|
147
|
+
serverWs.on("close", resolve);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
await writer.write(new TextEncoder().encode("buffered message"));
|
|
151
|
+
await writer.close();
|
|
152
|
+
await serverClosed;
|
|
153
|
+
expect(messagesReceived).toEqual(["buffered message"]);
|
|
154
|
+
wss.close();
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe("bidirectional communication", () => {
|
|
158
|
+
it("supports echo pattern with readable and writable", async () => {
|
|
159
|
+
const wss = await new Promise((resolve) => {
|
|
160
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
161
|
+
});
|
|
162
|
+
const port = wss.address().port;
|
|
163
|
+
wss.on("connection", (serverWs) => {
|
|
164
|
+
serverWs.on("message", (data) => {
|
|
165
|
+
serverWs.send(data);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
const { readable, writable } = webSocketStream(`ws://localhost:${port}`);
|
|
169
|
+
const writer = writable.getWriter();
|
|
170
|
+
const reader = readable.getReader();
|
|
171
|
+
await writer.write(new TextEncoder().encode("ping1"));
|
|
172
|
+
await writer.write(new TextEncoder().encode("ping2"));
|
|
173
|
+
const { value: response1 } = await reader.read();
|
|
174
|
+
const { value: response2 } = await reader.read();
|
|
175
|
+
expect(Buffer.from(response1).toString()).toBe("ping1");
|
|
176
|
+
expect(Buffer.from(response2).toString()).toBe("ping2");
|
|
177
|
+
reader.releaseLock();
|
|
178
|
+
await writer.close();
|
|
179
|
+
wss.close();
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
describe("error handling", () => {
|
|
183
|
+
it("readable stream ends when WebSocket closes unexpectedly", async () => {
|
|
184
|
+
const wss = await new Promise((resolve) => {
|
|
185
|
+
const server = new WebSocketServer({ port: 0 }, () => resolve(server));
|
|
186
|
+
});
|
|
187
|
+
const port = wss.address().port;
|
|
188
|
+
wss.on("connection", (serverWs) => {
|
|
189
|
+
serverWs.send("before close");
|
|
190
|
+
serverWs.terminate();
|
|
191
|
+
});
|
|
192
|
+
const { readable } = webSocketStream(`ws://localhost:${port}`);
|
|
193
|
+
const reader = readable.getReader();
|
|
194
|
+
const chunks = [];
|
|
195
|
+
try {
|
|
196
|
+
while (true) {
|
|
197
|
+
const { done, value } = await reader.read();
|
|
198
|
+
if (done) break;
|
|
199
|
+
chunks.push(Buffer.from(value).toString());
|
|
200
|
+
}
|
|
201
|
+
} catch (error) {
|
|
202
|
+
console.error(error);
|
|
203
|
+
} finally {
|
|
204
|
+
reader.releaseLock();
|
|
205
|
+
}
|
|
206
|
+
expect(chunks).toContain("before close");
|
|
207
|
+
wss.close();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
//# sourceMappingURL=ws_transport.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/ws_transport.test.ts"],"sourcesContent":["// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\nimport { describe, expect, it } from 'vitest';\nimport { WebSocket, WebSocketServer } from 'ws';\nimport { webSocketStream } from './ws_transport.js';\n\ndescribe('webSocketStream', () => {\n describe('readable stream', () => {\n it('receives messages from the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.send('hello');\n serverWs.send('world');\n serverWs.close();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const messages: string[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n messages.push(Buffer.from(value).toString());\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(messages).toEqual(['hello', 'world']);\n\n wss.close();\n });\n\n it('handles binary messages', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const binaryData = new Uint8Array([1, 2, 3, 4, 5]);\n\n wss.on('connection', (serverWs) => {\n serverWs.send(binaryData);\n serverWs.close();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: Uint8Array[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(new Uint8Array(value));\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(chunks).toHaveLength(1);\n expect(Array.from(chunks[0]!)).toEqual([1, 2, 3, 4, 5]);\n\n wss.close();\n });\n\n it('handles empty stream when connection closes immediately', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.close();\n });\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: Uint8Array[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(value);\n }\n } finally {\n reader.releaseLock();\n }\n\n expect(chunks).toEqual([]);\n\n wss.close();\n });\n });\n\n describe('writable stream', () => {\n it('sends messages through the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n const ws = new WebSocket(`ws://localhost:${port}`);\n\n const connected = new Promise<void>((resolve) => {\n ws.on('open', resolve);\n });\n\n const messagesReceived: string[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n messagesReceived.push(data.toString());\n });\n serverWs.on('close', resolve);\n });\n });\n\n await connected;\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n await writer.write(new TextEncoder().encode('hello'));\n await writer.write(new TextEncoder().encode('world'));\n await writer.close();\n\n await serverClosed;\n\n expect(messagesReceived).toEqual(['hello', 'world']);\n\n wss.close();\n });\n\n it('sends binary data through the WebSocket', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const chunksReceived: Buffer[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n chunksReceived.push(Buffer.from(data as Buffer));\n });\n serverWs.on('close', resolve);\n });\n });\n\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n const binaryData = new Uint8Array([10, 20, 30, 40, 50]);\n await writer.write(binaryData);\n await writer.close();\n\n await serverClosed;\n\n expect(chunksReceived).toHaveLength(1);\n expect(Array.from(chunksReceived[0]!)).toEqual([10, 20, 30, 40, 50]);\n\n wss.close();\n });\n\n it('buffers writes if readyState is CONNECTING', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n const { writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n\n const messagesReceived: string[] = [];\n const serverClosed = new Promise<void>((resolve) => {\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n messagesReceived.push(data.toString());\n });\n serverWs.on('close', resolve);\n });\n });\n\n // These writes should be buffered\n await writer.write(new TextEncoder().encode('buffered message'));\n await writer.close();\n\n await serverClosed;\n\n expect(messagesReceived).toEqual(['buffered message']);\n\n wss.close();\n });\n });\n\n describe('bidirectional communication', () => {\n it('supports echo pattern with readable and writable', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n // Server echoes messages back\n wss.on('connection', (serverWs) => {\n serverWs.on('message', (data) => {\n serverWs.send(data);\n });\n });\n\n const { readable, writable } = webSocketStream(`ws://localhost:${port}`);\n const writer = writable.getWriter();\n const reader = readable.getReader();\n\n // Send messages\n await writer.write(new TextEncoder().encode('ping1'));\n await writer.write(new TextEncoder().encode('ping2'));\n\n // Read echoed responses\n const { value: response1 } = await reader.read();\n const { value: response2 } = await reader.read();\n\n expect(Buffer.from(response1!).toString()).toBe('ping1');\n expect(Buffer.from(response2!).toString()).toBe('ping2');\n\n reader.releaseLock();\n await writer.close();\n\n wss.close();\n });\n });\n\n describe('error handling', () => {\n it('readable stream ends when WebSocket closes unexpectedly', async () => {\n const wss = await new Promise<WebSocketServer>((resolve) => {\n const server: WebSocketServer = new WebSocketServer({ port: 0 }, () => resolve(server));\n });\n\n const port = (wss.address() as { port: number }).port;\n\n wss.on('connection', (serverWs) => {\n serverWs.send('before close');\n // Terminate connection abruptly\n serverWs.terminate();\n });\n\n const { readable } = webSocketStream(`ws://localhost:${port}`);\n const reader = readable.getReader();\n\n const chunks: string[] = [];\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n chunks.push(Buffer.from(value).toString());\n }\n } catch (error) {\n console.error(error);\n // Connection terminated, stream may error\n } finally {\n reader.releaseLock();\n }\n\n // Should have received the message sent before termination\n expect(chunks).toContain('before close');\n\n wss.close();\n });\n });\n});\n"],"mappings":"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","names":[]}
|