@pipedog/core 0.0.0 → 0.2.0
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 +25 -0
- package/NOTICE +9 -0
- package/dist/adapters/base_llm_adapter.d.ts +266 -0
- package/dist/adapters/base_llm_adapter.js +489 -0
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/schemas/direct_function.d.ts +202 -0
- package/dist/adapters/schemas/direct_function.js +302 -0
- package/dist/adapters/schemas/function_schema.d.ts +67 -0
- package/dist/adapters/schemas/function_schema.js +72 -0
- package/dist/adapters/schemas/index.d.ts +2 -0
- package/dist/adapters/schemas/index.js +8 -0
- package/dist/adapters/schemas/tools_schema.d.ts +57 -0
- package/dist/adapters/schemas/tools_schema.js +79 -0
- package/dist/adapters/services/index.d.ts +2 -0
- package/dist/adapters/services/index.js +8 -0
- package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
- package/dist/adapters/services/open_ai_adapter.js +250 -0
- package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
- package/dist/audio/dtmf/dtmf_data.js +22 -0
- package/dist/audio/dtmf/index.d.ts +2 -0
- package/dist/audio/dtmf/index.js +8 -0
- package/dist/audio/dtmf/types.d.ts +31 -0
- package/dist/audio/dtmf/types.js +35 -0
- package/dist/audio/dtmf/utils.d.ts +13 -0
- package/dist/audio/dtmf/utils.js +62 -0
- package/dist/audio/filters/base_audio_filter.d.ts +51 -0
- package/dist/audio/filters/base_audio_filter.js +17 -0
- package/dist/audio/filters/index.d.ts +2 -0
- package/dist/audio/filters/index.js +8 -0
- package/dist/audio/index.d.ts +2 -0
- package/dist/audio/index.js +8 -0
- package/dist/audio/krisp_instance.d.ts +95 -0
- package/dist/audio/krisp_instance.js +229 -0
- package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
- package/dist/audio/mixers/base_audio_mixer.js +16 -0
- package/dist/audio/mixers/index.d.ts +2 -0
- package/dist/audio/mixers/index.js +8 -0
- package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
- package/dist/audio/resamplers/base_audio_resampler.js +35 -0
- package/dist/audio/resamplers/engine.d.ts +60 -0
- package/dist/audio/resamplers/engine.js +89 -0
- package/dist/audio/resamplers/index.d.ts +2 -0
- package/dist/audio/resamplers/index.js +8 -0
- package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
- package/dist/audio/resamplers/resampy_resampler.js +15 -0
- package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
- package/dist/audio/resamplers/sinc_engine.js +235 -0
- package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
- package/dist/audio/resamplers/soxr_resampler.js +79 -0
- package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
- package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
- package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
- package/dist/audio/turn/base_turn_analyzer.js +61 -0
- package/dist/audio/turn/index.d.ts +2 -0
- package/dist/audio/turn/index.js +8 -0
- package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
- package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
- package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
- package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
- package/dist/audio/utils.d.ts +224 -0
- package/dist/audio/utils.js +634 -0
- package/dist/audio/vad/data/index.d.ts +2 -0
- package/dist/audio/vad/data/index.js +8 -0
- package/dist/audio/vad/index.d.ts +2 -0
- package/dist/audio/vad/index.js +8 -0
- package/dist/audio/vad/vad_analyzer.d.ts +134 -0
- package/dist/audio/vad/vad_analyzer.js +249 -0
- package/dist/audio/vad/vad_controller.d.ts +143 -0
- package/dist/audio/vad/vad_controller.js +228 -0
- package/dist/audio/volume.d.ts +38 -0
- package/dist/audio/volume.js +75 -0
- package/dist/bus/adapters/base.d.ts +35 -0
- package/dist/bus/adapters/base.js +19 -0
- package/dist/bus/adapters/index.d.ts +10 -0
- package/dist/bus/adapters/index.js +15 -0
- package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
- package/dist/bus/adapters/llm_context_adapter.js +82 -0
- package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
- package/dist/bus/adapters/tools_schema_adapter.js +70 -0
- package/dist/bus/bridge_processor.d.ts +111 -0
- package/dist/bus/bridge_processor.js +166 -0
- package/dist/bus/bus.d.ts +110 -0
- package/dist/bus/bus.js +200 -0
- package/dist/bus/index.d.ts +22 -0
- package/dist/bus/index.js +27 -0
- package/dist/bus/local/async_queue.d.ts +12 -0
- package/dist/bus/local/async_queue.js +21 -0
- package/dist/bus/local/index.d.ts +3 -0
- package/dist/bus/local/index.js +8 -0
- package/dist/bus/messages.d.ts +378 -0
- package/dist/bus/messages.js +357 -0
- package/dist/bus/network/index.d.ts +16 -0
- package/dist/bus/network/index.js +21 -0
- package/dist/bus/queue.d.ts +27 -0
- package/dist/bus/queue.js +51 -0
- package/dist/bus/serializers/base.d.ts +25 -0
- package/dist/bus/serializers/base.js +14 -0
- package/dist/bus/serializers/index.d.ts +9 -0
- package/dist/bus/serializers/index.js +14 -0
- package/dist/bus/serializers/json.d.ts +77 -0
- package/dist/bus/serializers/json.js +367 -0
- package/dist/bus/subscriber.d.ts +46 -0
- package/dist/bus/subscriber.js +27 -0
- package/dist/bus/ui/index.d.ts +3 -0
- package/dist/bus/ui/index.js +8 -0
- package/dist/bus/ui/messages.d.ts +186 -0
- package/dist/bus/ui/messages.js +171 -0
- package/dist/classifiers/base_classifier.d.ts +263 -0
- package/dist/classifiers/base_classifier.js +346 -0
- package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
- package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
- package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
- package/dist/classifiers/cloudflare/clef/client.js +234 -0
- package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/clef/index.js +8 -0
- package/dist/classifiers/cloudflare/index.d.ts +2 -0
- package/dist/classifiers/cloudflare/index.js +8 -0
- package/dist/classifiers/http_client.d.ts +70 -0
- package/dist/classifiers/http_client.js +161 -0
- package/dist/classifiers/index.d.ts +2 -0
- package/dist/classifiers/index.js +8 -0
- package/dist/classifiers/jev/classifier.d.ts +8 -0
- package/dist/classifiers/jev/classifier.js +13 -0
- package/dist/classifiers/jev/client.d.ts +8 -0
- package/dist/classifiers/jev/client.js +13 -0
- package/dist/classifiers/jev/index.d.ts +2 -0
- package/dist/classifiers/jev/index.js +8 -0
- package/dist/classifiers/llm/classifier.d.ts +72 -0
- package/dist/classifiers/llm/classifier.js +304 -0
- package/dist/classifiers/llm/index.d.ts +2 -0
- package/dist/classifiers/llm/index.js +8 -0
- package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
- package/dist/classifiers/openai/decisions/classifier.js +241 -0
- package/dist/classifiers/openai/decisions/client.d.ts +108 -0
- package/dist/classifiers/openai/decisions/client.js +234 -0
- package/dist/classifiers/openai/decisions/index.d.ts +2 -0
- package/dist/classifiers/openai/decisions/index.js +8 -0
- package/dist/classifiers/openai/index.d.ts +2 -0
- package/dist/classifiers/openai/index.js +8 -0
- package/dist/classifiers/typesafe/index.d.ts +2 -0
- package/dist/classifiers/typesafe/index.js +8 -0
- package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
- package/dist/classifiers/typesafe/jev/classifier.js +220 -0
- package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
- package/dist/classifiers/typesafe/jev/client.js +233 -0
- package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
- package/dist/classifiers/typesafe/jev/index.js +8 -0
- package/dist/clocks/base_clock.d.ts +13 -0
- package/dist/clocks/base_clock.js +14 -0
- package/dist/clocks/index.d.ts +2 -0
- package/dist/clocks/index.js +8 -0
- package/dist/clocks/system_clock.d.ts +15 -0
- package/dist/clocks/system_clock.js +25 -0
- package/dist/frames/frames.d.ts +2533 -0
- package/dist/frames/frames.js +2485 -0
- package/dist/frames/index.d.ts +2 -0
- package/dist/frames/index.js +8 -0
- package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
- package/dist/frames/protobufs/frames_pb2.js +466 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +56 -0
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.js +8 -0
- package/dist/metrics/metrics.d.ts +276 -0
- package/dist/metrics/metrics.js +254 -0
- package/dist/observers/base_observer.d.ts +173 -0
- package/dist/observers/base_observer.js +151 -0
- package/dist/observers/error_observer.d.ts +75 -0
- package/dist/observers/error_observer.js +87 -0
- package/dist/observers/function_call_observer.d.ts +157 -0
- package/dist/observers/function_call_observer.js +222 -0
- package/dist/observers/index.d.ts +2 -0
- package/dist/observers/index.js +8 -0
- package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
- package/dist/observers/loggers/debug_log_observer.js +228 -0
- package/dist/observers/loggers/index.d.ts +2 -0
- package/dist/observers/loggers/index.js +8 -0
- package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
- package/dist/observers/loggers/llm_log_observer.js +110 -0
- package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
- package/dist/observers/loggers/metrics_log_observer.js +186 -0
- package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
- package/dist/observers/loggers/transcription_log_observer.js +74 -0
- package/dist/observers/service_metrics_observer.d.ts +168 -0
- package/dist/observers/service_metrics_observer.js +236 -0
- package/dist/observers/speaking_observer.d.ts +104 -0
- package/dist/observers/speaking_observer.js +150 -0
- package/dist/observers/startup_timing_observer.d.ts +221 -0
- package/dist/observers/startup_timing_observer.js +365 -0
- package/dist/observers/turn_tracking_observer.d.ts +78 -0
- package/dist/observers/turn_tracking_observer.js +189 -0
- package/dist/observers/user_bot_latency_observer.d.ts +411 -0
- package/dist/observers/user_bot_latency_observer.js +974 -0
- package/dist/pipeline/base_pipeline.d.ts +49 -0
- package/dist/pipeline/base_pipeline.js +101 -0
- package/dist/pipeline/capabilities.d.ts +76 -0
- package/dist/pipeline/capabilities.js +97 -0
- package/dist/pipeline/index.d.ts +2 -0
- package/dist/pipeline/index.js +8 -0
- package/dist/pipeline/job_context.d.ts +317 -0
- package/dist/pipeline/job_context.js +450 -0
- package/dist/pipeline/job_decorator.d.ts +54 -0
- package/dist/pipeline/job_decorator.js +92 -0
- package/dist/pipeline/llm_switcher.d.ts +84 -0
- package/dist/pipeline/llm_switcher.js +107 -0
- package/dist/pipeline/llm_with_backend.d.ts +435 -0
- package/dist/pipeline/llm_with_backend.js +806 -0
- package/dist/pipeline/parallel_pipeline.d.ts +83 -0
- package/dist/pipeline/parallel_pipeline.js +200 -0
- package/dist/pipeline/pipeline.d.ts +126 -0
- package/dist/pipeline/pipeline.js +196 -0
- package/dist/pipeline/service_switcher.d.ts +287 -0
- package/dist/pipeline/service_switcher.js +509 -0
- package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
- package/dist/pipeline/sync_parallel_pipeline.js +387 -0
- package/dist/pipeline/worker.d.ts +821 -0
- package/dist/pipeline/worker.js +1656 -0
- package/dist/pipeline/worker_observer.d.ts +131 -0
- package/dist/pipeline/worker_observer.js +274 -0
- package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
- package/dist/pipeline/worker_ready_decorator.js +76 -0
- package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
- package/dist/processors/aggregators/async_tool_messages.js +291 -0
- package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
- package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
- package/dist/processors/aggregators/gated.d.ts +43 -0
- package/dist/processors/aggregators/gated.js +86 -0
- package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
- package/dist/processors/aggregators/gated_llm_context.js +86 -0
- package/dist/processors/aggregators/index.d.ts +2 -0
- package/dist/processors/aggregators/index.js +8 -0
- package/dist/processors/aggregators/llm_context.d.ts +370 -0
- package/dist/processors/aggregators/llm_context.js +580 -0
- package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
- package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
- package/dist/processors/aggregators/llm_response.d.ts +37 -0
- package/dist/processors/aggregators/llm_response.js +71 -0
- package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
- package/dist/processors/aggregators/llm_response_universal.js +2394 -0
- package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
- package/dist/processors/aggregators/llm_text_processor.js +102 -0
- package/dist/processors/aggregators/sentence.d.ts +39 -0
- package/dist/processors/aggregators/sentence.js +69 -0
- package/dist/processors/async_generator.d.ts +42 -0
- package/dist/processors/async_generator.js +76 -0
- package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
- package/dist/processors/audio/audio_buffer_processor.js +565 -0
- package/dist/processors/audio/index.d.ts +2 -0
- package/dist/processors/audio/index.js +8 -0
- package/dist/processors/audio/vad_processor.d.ts +67 -0
- package/dist/processors/audio/vad_processor.js +103 -0
- package/dist/processors/consumer_processor.d.ts +49 -0
- package/dist/processors/consumer_processor.js +85 -0
- package/dist/processors/filters/frame_filter.d.ts +39 -0
- package/dist/processors/filters/frame_filter.js +52 -0
- package/dist/processors/filters/function_filter.d.ts +59 -0
- package/dist/processors/filters/function_filter.js +78 -0
- package/dist/processors/filters/identity_filter.d.ts +33 -0
- package/dist/processors/filters/identity_filter.js +37 -0
- package/dist/processors/filters/index.d.ts +2 -0
- package/dist/processors/filters/index.js +8 -0
- package/dist/processors/filters/null_filter.d.ts +34 -0
- package/dist/processors/filters/null_filter.js +47 -0
- package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
- package/dist/processors/filters/wake_notifier_filter.js +49 -0
- package/dist/processors/frame_processor.d.ts +360 -0
- package/dist/processors/frame_processor.js +932 -0
- package/dist/processors/frameworks/index.d.ts +2 -0
- package/dist/processors/frameworks/index.js +8 -0
- package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
- package/dist/processors/frameworks/rtvi/frames.js +259 -0
- package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
- package/dist/processors/frameworks/rtvi/index.js +11 -0
- package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
- package/dist/processors/frameworks/rtvi/models.js +1807 -0
- package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
- package/dist/processors/frameworks/rtvi/observer.js +1113 -0
- package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
- package/dist/processors/frameworks/rtvi/processor.js +676 -0
- package/dist/processors/idle_frame_processor.d.ts +44 -0
- package/dist/processors/idle_frame_processor.js +86 -0
- package/dist/processors/index.d.ts +2 -0
- package/dist/processors/index.js +8 -0
- package/dist/processors/logger.d.ts +42 -0
- package/dist/processors/logger.js +87 -0
- package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
- package/dist/processors/metrics/frame_processor_metrics.js +372 -0
- package/dist/processors/metrics/index.d.ts +2 -0
- package/dist/processors/metrics/index.js +8 -0
- package/dist/processors/producer_processor.d.ts +68 -0
- package/dist/processors/producer_processor.js +78 -0
- package/dist/processors/text_transformer.d.ts +30 -0
- package/dist/processors/text_transformer.js +48 -0
- package/dist/registry/index.d.ts +3 -0
- package/dist/registry/index.js +8 -0
- package/dist/registry/registry.d.ts +69 -0
- package/dist/registry/registry.js +149 -0
- package/dist/registry/types.d.ts +47 -0
- package/dist/registry/types.js +39 -0
- package/dist/serializers/base_serializer.d.ts +94 -0
- package/dist/serializers/base_serializer.js +82 -0
- package/dist/serializers/index.d.ts +2 -0
- package/dist/serializers/index.js +8 -0
- package/dist/services/ai_service.d.ts +145 -0
- package/dist/services/ai_service.js +262 -0
- package/dist/services/anthropic/index.d.ts +2 -0
- package/dist/services/anthropic/index.js +7 -0
- package/dist/services/assemblyai/index.d.ts +2 -0
- package/dist/services/assemblyai/index.js +7 -0
- package/dist/services/asyncai/index.d.ts +2 -0
- package/dist/services/asyncai/index.js +7 -0
- package/dist/services/aws/index.d.ts +2 -0
- package/dist/services/aws/index.js +7 -0
- package/dist/services/azure/index.d.ts +2 -0
- package/dist/services/azure/index.js +7 -0
- package/dist/services/baseten/index.d.ts +2 -0
- package/dist/services/baseten/index.js +7 -0
- package/dist/services/bland/index.d.ts +2 -0
- package/dist/services/bland/index.js +7 -0
- package/dist/services/camb/index.d.ts +2 -0
- package/dist/services/camb/index.js +7 -0
- package/dist/services/cartesia/index.d.ts +2 -0
- package/dist/services/cartesia/index.js +7 -0
- package/dist/services/cerebras/index.d.ts +2 -0
- package/dist/services/cerebras/index.js +7 -0
- package/dist/services/crusoe/index.d.ts +2 -0
- package/dist/services/crusoe/index.js +7 -0
- package/dist/services/deepgram/index.d.ts +2 -0
- package/dist/services/deepgram/index.js +7 -0
- package/dist/services/deepseek/index.d.ts +2 -0
- package/dist/services/deepseek/index.js +7 -0
- package/dist/services/elevenlabs/index.d.ts +2 -0
- package/dist/services/elevenlabs/index.js +7 -0
- package/dist/services/fal/index.d.ts +2 -0
- package/dist/services/fal/index.js +7 -0
- package/dist/services/fireworks/index.d.ts +2 -0
- package/dist/services/fireworks/index.js +7 -0
- package/dist/services/fish/index.d.ts +2 -0
- package/dist/services/fish/index.js +7 -0
- package/dist/services/funasr/index.d.ts +3 -0
- package/dist/services/funasr/index.js +8 -0
- package/dist/services/gladia/index.d.ts +2 -0
- package/dist/services/gladia/index.js +7 -0
- package/dist/services/google/index.d.ts +2 -0
- package/dist/services/google/index.js +7 -0
- package/dist/services/gradium/index.d.ts +2 -0
- package/dist/services/gradium/index.js +7 -0
- package/dist/services/grok/index.d.ts +2 -0
- package/dist/services/grok/index.js +7 -0
- package/dist/services/groq/index.d.ts +2 -0
- package/dist/services/groq/index.js +7 -0
- package/dist/services/heygen/index.d.ts +2 -0
- package/dist/services/heygen/index.js +7 -0
- package/dist/services/hume/index.d.ts +2 -0
- package/dist/services/hume/index.js +7 -0
- package/dist/services/image_service.d.ts +52 -0
- package/dist/services/image_service.js +60 -0
- package/dist/services/inception/index.d.ts +2 -0
- package/dist/services/inception/index.js +7 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +8 -0
- package/dist/services/inworld/index.d.ts +2 -0
- package/dist/services/inworld/index.js +7 -0
- package/dist/services/keenable/index.d.ts +2 -0
- package/dist/services/keenable/index.js +7 -0
- package/dist/services/kokoro/index.d.ts +2 -0
- package/dist/services/kokoro/index.js +7 -0
- package/dist/services/llm_service.d.ts +1106 -0
- package/dist/services/llm_service.js +2231 -0
- package/dist/services/mem0/index.d.ts +2 -0
- package/dist/services/mem0/index.js +7 -0
- package/dist/services/meta/index.d.ts +2 -0
- package/dist/services/meta/index.js +7 -0
- package/dist/services/minimax/index.d.ts +2 -0
- package/dist/services/minimax/index.js +7 -0
- package/dist/services/mistral/index.d.ts +2 -0
- package/dist/services/mistral/index.js +7 -0
- package/dist/services/moondream/index.d.ts +2 -0
- package/dist/services/moondream/index.js +7 -0
- package/dist/services/moonshine/index.d.ts +2 -0
- package/dist/services/moonshine/index.js +7 -0
- package/dist/services/nebius/index.d.ts +2 -0
- package/dist/services/nebius/index.js +7 -0
- package/dist/services/neuphonic/index.d.ts +2 -0
- package/dist/services/neuphonic/index.js +7 -0
- package/dist/services/novita/index.d.ts +2 -0
- package/dist/services/novita/index.js +7 -0
- package/dist/services/nvidia/index.d.ts +2 -0
- package/dist/services/nvidia/index.js +11 -0
- package/dist/services/ollama/index.d.ts +2 -0
- package/dist/services/ollama/index.js +7 -0
- package/dist/services/openai/index.d.ts +2 -0
- package/dist/services/openai/index.js +7 -0
- package/dist/services/openclaw/index.d.ts +14 -0
- package/dist/services/openclaw/index.js +19 -0
- package/dist/services/openrouter/index.d.ts +2 -0
- package/dist/services/openrouter/index.js +7 -0
- package/dist/services/perplexity/index.d.ts +2 -0
- package/dist/services/perplexity/index.js +7 -0
- package/dist/services/piper/index.d.ts +2 -0
- package/dist/services/piper/index.js +7 -0
- package/dist/services/pocket_tts/index.d.ts +2 -0
- package/dist/services/pocket_tts/index.js +7 -0
- package/dist/services/qwen/index.d.ts +2 -0
- package/dist/services/qwen/index.js +7 -0
- package/dist/services/resembleai/index.d.ts +2 -0
- package/dist/services/resembleai/index.js +7 -0
- package/dist/services/rime/index.d.ts +2 -0
- package/dist/services/rime/index.js +7 -0
- package/dist/services/sambanova/index.d.ts +2 -0
- package/dist/services/sambanova/index.js +7 -0
- package/dist/services/sarvam/index.d.ts +2 -0
- package/dist/services/sarvam/index.js +7 -0
- package/dist/services/settings.d.ts +356 -0
- package/dist/services/settings.js +437 -0
- package/dist/services/simli/index.d.ts +2 -0
- package/dist/services/simli/index.js +7 -0
- package/dist/services/smallest/index.d.ts +2 -0
- package/dist/services/smallest/index.js +7 -0
- package/dist/services/soniox/index.d.ts +2 -0
- package/dist/services/soniox/index.js +7 -0
- package/dist/services/speechify/index.d.ts +2 -0
- package/dist/services/speechify/index.js +7 -0
- package/dist/services/speechmatics/index.d.ts +2 -0
- package/dist/services/speechmatics/index.js +7 -0
- package/dist/services/stt_latency.d.ts +62 -0
- package/dist/services/stt_latency.js +71 -0
- package/dist/services/stt_service.d.ts +601 -0
- package/dist/services/stt_service.js +1044 -0
- package/dist/services/tavus/index.d.ts +2 -0
- package/dist/services/tavus/index.js +7 -0
- package/dist/services/together/index.d.ts +2 -0
- package/dist/services/together/index.js +7 -0
- package/dist/services/tts_service.d.ts +909 -0
- package/dist/services/tts_service.js +2018 -0
- package/dist/services/ultravox/index.d.ts +2 -0
- package/dist/services/ultravox/index.js +9 -0
- package/dist/services/vision_service.d.ts +56 -0
- package/dist/services/vision_service.js +62 -0
- package/dist/services/websocket_service.d.ts +213 -0
- package/dist/services/websocket_service.js +654 -0
- package/dist/services/whisper/index.d.ts +2 -0
- package/dist/services/whisper/index.js +9 -0
- package/dist/services/xai/index.d.ts +2 -0
- package/dist/services/xai/index.js +9 -0
- package/dist/services/xtts/index.d.ts +2 -0
- package/dist/services/xtts/index.js +9 -0
- package/dist/tests/index.d.ts +2 -0
- package/dist/tests/index.js +8 -0
- package/dist/tests/utils.d.ts +123 -0
- package/dist/tests/utils.js +212 -0
- package/dist/transcriptions/index.d.ts +2 -0
- package/dist/transcriptions/index.js +8 -0
- package/dist/transcriptions/language.d.ts +376 -0
- package/dist/transcriptions/language.js +543 -0
- package/dist/transports/base_input.d.ts +149 -0
- package/dist/transports/base_input.js +338 -0
- package/dist/transports/base_output.d.ts +432 -0
- package/dist/transports/base_output.js +1231 -0
- package/dist/transports/base_transport.d.ts +223 -0
- package/dist/transports/base_transport.js +167 -0
- package/dist/transports/daily/index.d.ts +2 -0
- package/dist/transports/daily/index.js +9 -0
- package/dist/transports/heygen/index.d.ts +2 -0
- package/dist/transports/heygen/index.js +9 -0
- package/dist/transports/index.d.ts +2 -0
- package/dist/transports/index.js +8 -0
- package/dist/transports/lemonslice/index.d.ts +2 -0
- package/dist/transports/lemonslice/index.js +9 -0
- package/dist/transports/livekit/index.d.ts +2 -0
- package/dist/transports/livekit/index.js +9 -0
- package/dist/transports/local/index.d.ts +2 -0
- package/dist/transports/local/index.js +9 -0
- package/dist/transports/moq/index.d.ts +2 -0
- package/dist/transports/moq/index.js +9 -0
- package/dist/transports/smallwebrtc/index.d.ts +2 -0
- package/dist/transports/smallwebrtc/index.js +9 -0
- package/dist/transports/tavus/index.d.ts +2 -0
- package/dist/transports/tavus/index.js +9 -0
- package/dist/transports/video_in_sampler.d.ts +157 -0
- package/dist/transports/video_in_sampler.js +258 -0
- package/dist/transports/vonage/index.d.ts +2 -0
- package/dist/transports/vonage/index.js +9 -0
- package/dist/transports/websocket/index.d.ts +2 -0
- package/dist/transports/websocket/index.js +9 -0
- package/dist/transports/whatsapp/index.d.ts +2 -0
- package/dist/transports/whatsapp/index.js +9 -0
- package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
- package/dist/turns/eager_end_of_turn_mixin.js +122 -0
- package/dist/turns/empty_user_turn.d.ts +55 -0
- package/dist/turns/empty_user_turn.js +53 -0
- package/dist/turns/index.d.ts +2 -0
- package/dist/turns/index.js +8 -0
- package/dist/turns/speculation_gate.d.ts +169 -0
- package/dist/turns/speculation_gate.js +294 -0
- package/dist/turns/types.d.ts +33 -0
- package/dist/turns/types.js +35 -0
- package/dist/turns/user_idle_controller.d.ts +94 -0
- package/dist/turns/user_idle_controller.js +187 -0
- package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
- package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
- package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
- package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
- package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
- package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
- package/dist/turns/user_mute/index.d.ts +6 -0
- package/dist/turns/user_mute/index.js +11 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
- package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
- package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
- package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
- package/dist/turns/user_start/index.d.ts +8 -0
- package/dist/turns/user_start/index.js +16 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
- package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
- package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
- package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
- package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
- package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
- package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
- package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
- package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
- package/dist/turns/user_stop/eager_match_policy.js +50 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
- package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
- package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
- package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
- package/dist/turns/user_stop/index.d.ts +10 -0
- package/dist/turns/user_stop/index.js +15 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
- package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
- package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
- package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
- package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
- package/dist/turns/user_turn_completion_mixin.js +591 -0
- package/dist/turns/user_turn_controller.d.ts +134 -0
- package/dist/turns/user_turn_controller.js +335 -0
- package/dist/turns/user_turn_processor.d.ts +87 -0
- package/dist/turns/user_turn_processor.js +180 -0
- package/dist/turns/user_turn_strategies.d.ts +187 -0
- package/dist/turns/user_turn_strategies.js +222 -0
- package/dist/utils/async_tool_cancellation.d.ts +35 -0
- package/dist/utils/async_tool_cancellation.js +78 -0
- package/dist/utils/asyncio/index.d.ts +2 -0
- package/dist/utils/asyncio/index.js +7 -0
- package/dist/utils/asyncio/task_manager.d.ts +49 -0
- package/dist/utils/asyncio/task_manager.js +105 -0
- package/dist/utils/base_object.d.ts +76 -0
- package/dist/utils/base_object.js +154 -0
- package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
- package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
- package/dist/utils/context/audio_context_manager.d.ts +131 -0
- package/dist/utils/context/audio_context_manager.js +233 -0
- package/dist/utils/context/index.d.ts +2 -0
- package/dist/utils/context/index.js +7 -0
- package/dist/utils/context/llm_context_summarization.d.ts +258 -0
- package/dist/utils/context/llm_context_summarization.js +511 -0
- package/dist/utils/context/text_segment_map.d.ts +611 -0
- package/dist/utils/context/text_segment_map.js +1132 -0
- package/dist/utils/context/word_completion_tracker.d.ts +273 -0
- package/dist/utils/context/word_completion_tracker.js +441 -0
- package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
- package/dist/utils/context/word_timestamp_tracker.js +98 -0
- package/dist/utils/deprecation.d.ts +28 -0
- package/dist/utils/deprecation.js +75 -0
- package/dist/utils/env.d.ts +38 -0
- package/dist/utils/env.js +62 -0
- package/dist/utils/errors.d.ts +75 -0
- package/dist/utils/errors.js +202 -0
- package/dist/utils/file_resolver.d.ts +126 -0
- package/dist/utils/file_resolver.js +314 -0
- package/dist/utils/file_storage.d.ts +115 -0
- package/dist/utils/file_storage.js +178 -0
- package/dist/utils/frame_queue.d.ts +36 -0
- package/dist/utils/frame_queue.js +66 -0
- package/dist/utils/http.d.ts +39 -0
- package/dist/utils/http.js +53 -0
- package/dist/utils/image.d.ts +14 -0
- package/dist/utils/image.js +63 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/jpeg_encoder.d.ts +14 -0
- package/dist/utils/jpeg_encoder.js +315 -0
- package/dist/utils/log_config.d.ts +34 -0
- package/dist/utils/log_config.js +76 -0
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/mixin.d.ts +14 -0
- package/dist/utils/mixin.js +63 -0
- package/dist/utils/network.d.ts +73 -0
- package/dist/utils/network.js +90 -0
- package/dist/utils/security/allowed_origins.d.ts +16 -0
- package/dist/utils/security/allowed_origins.js +34 -0
- package/dist/utils/security/index.d.ts +2 -0
- package/dist/utils/security/index.js +7 -0
- package/dist/utils/security/redaction.d.ts +27 -0
- package/dist/utils/security/redaction.js +123 -0
- package/dist/utils/security/ssrf.d.ts +79 -0
- package/dist/utils/security/ssrf.js +327 -0
- package/dist/utils/shared.d.ts +35 -0
- package/dist/utils/shared.js +136 -0
- package/dist/utils/startup.d.ts +17 -0
- package/dist/utils/startup.js +130 -0
- package/dist/utils/string.d.ts +116 -0
- package/dist/utils/string.js +460 -0
- package/dist/utils/sync/base_notifier.d.ts +25 -0
- package/dist/utils/sync/base_notifier.js +16 -0
- package/dist/utils/sync/event_notifier.d.ts +38 -0
- package/dist/utils/sync/event_notifier.js +51 -0
- package/dist/utils/sync/index.d.ts +2 -0
- package/dist/utils/sync/index.js +7 -0
- package/dist/utils/text/alnum_utils.d.ts +109 -0
- package/dist/utils/text/alnum_utils.js +262 -0
- package/dist/utils/text/base_text_aggregator.d.ts +146 -0
- package/dist/utils/text/base_text_aggregator.js +102 -0
- package/dist/utils/text/base_text_filter.d.ts +54 -0
- package/dist/utils/text/base_text_filter.js +50 -0
- package/dist/utils/text/index.d.ts +2 -0
- package/dist/utils/text/index.js +7 -0
- package/dist/utils/text/markdown_text_filter.d.ts +147 -0
- package/dist/utils/text/markdown_text_filter.js +522 -0
- package/dist/utils/text/markup_utils.d.ts +54 -0
- package/dist/utils/text/markup_utils.js +156 -0
- package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
- package/dist/utils/text/pattern_pair_aggregator.js +478 -0
- package/dist/utils/text/phonemes.d.ts +60 -0
- package/dist/utils/text/phonemes.js +172 -0
- package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
- package/dist/utils/text/simple_text_aggregator.js +254 -0
- package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
- package/dist/utils/text/skip_tags_aggregator.js +147 -0
- package/dist/utils/text/transforms/acronyms.d.ts +21 -0
- package/dist/utils/text/transforms/acronyms.js +31 -0
- package/dist/utils/text/transforms/currency.d.ts +16 -0
- package/dist/utils/text/transforms/currency.js +56 -0
- package/dist/utils/text/transforms/dates.d.ts +18 -0
- package/dist/utils/text/transforms/dates.js +102 -0
- package/dist/utils/text/transforms/email.d.ts +17 -0
- package/dist/utils/text/transforms/email.js +35 -0
- package/dist/utils/text/transforms/index.d.ts +37 -0
- package/dist/utils/text/transforms/index.js +42 -0
- package/dist/utils/text/transforms/numbers.d.ts +25 -0
- package/dist/utils/text/transforms/numbers.js +59 -0
- package/dist/utils/text/transforms/percentages.d.ts +16 -0
- package/dist/utils/text/transforms/percentages.js +32 -0
- package/dist/utils/text/transforms/phone.d.ts +21 -0
- package/dist/utils/text/transforms/phone.js +39 -0
- package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
- package/dist/utils/text/transforms/pronunciations.js +112 -0
- package/dist/utils/text/transforms/replacements.d.ts +39 -0
- package/dist/utils/text/transforms/replacements.js +46 -0
- package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
- package/dist/utils/text/transforms/strip_markdown.js +60 -0
- package/dist/utils/text/transforms/units.d.ts +22 -0
- package/dist/utils/text/transforms/units.js +81 -0
- package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
- package/dist/utils/text/transforms/voice_formatter.js +98 -0
- package/dist/utils/text/unicode_digits.d.ts +3 -0
- package/dist/utils/text/unicode_digits.js +34 -0
- package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
- package/dist/utils/text/word_timestamp_utils.js +52 -0
- package/dist/utils/time.d.ts +13 -0
- package/dist/utils/time.js +31 -0
- package/dist/utils/tracing/index.d.ts +3 -0
- package/dist/utils/tracing/index.js +8 -0
- package/dist/utils/tracing/service_attributes.d.ts +198 -0
- package/dist/utils/tracing/service_attributes.js +434 -0
- package/dist/utils/tracing/service_decorators.d.ts +214 -0
- package/dist/utils/tracing/service_decorators.js +1662 -0
- package/dist/utils/tracing/setup.d.ts +107 -0
- package/dist/utils/tracing/setup.js +160 -0
- package/dist/utils/tracing/tracing_context.d.ts +55 -0
- package/dist/utils/tracing/tracing_context.js +97 -0
- package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
- package/dist/utils/tracing/turn_trace_observer.js +233 -0
- package/dist/utils/types.d.ts +80 -0
- package/dist/utils/types.js +108 -0
- package/dist/utils/utils.d.ts +5 -0
- package/dist/utils/utils.js +22 -0
- package/dist/utils/yaml.d.ts +179 -0
- package/dist/utils/yaml.js +556 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.js +7 -0
- package/dist/workers/base_worker.d.ts +772 -0
- package/dist/workers/base_worker.js +1298 -0
- package/dist/workers/index.d.ts +2 -0
- package/dist/workers/index.js +8 -0
- package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
- package/dist/workers/llm/backend_llm_worker.js +1055 -0
- package/dist/workers/llm/index.d.ts +6 -0
- package/dist/workers/llm/index.js +11 -0
- package/dist/workers/llm/llm_context_worker.d.ts +66 -0
- package/dist/workers/llm/llm_context_worker.js +72 -0
- package/dist/workers/llm/llm_worker.d.ts +180 -0
- package/dist/workers/llm/llm_worker.js +323 -0
- package/dist/workers/llm/tool_decorator.d.ts +68 -0
- package/dist/workers/llm/tool_decorator.js +60 -0
- package/dist/workers/proxy/index.d.ts +3 -0
- package/dist/workers/proxy/index.js +9 -0
- package/dist/workers/proxy/websocket/client.d.ts +110 -0
- package/dist/workers/proxy/websocket/client.js +196 -0
- package/dist/workers/proxy/websocket/index.d.ts +3 -0
- package/dist/workers/proxy/websocket/index.js +10 -0
- package/dist/workers/runner.d.ts +268 -0
- package/dist/workers/runner.js +489 -0
- package/dist/workers/ui/index.d.ts +22 -0
- package/dist/workers/ui/index.js +27 -0
- package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
- package/dist/workers/ui/ui_event_decorator.js +75 -0
- package/dist/workers/ui/ui_job_context.d.ts +12 -0
- package/dist/workers/ui/ui_job_context.js +17 -0
- package/dist/workers/ui/ui_prompts.d.ts +21 -0
- package/dist/workers/ui/ui_prompts.js +41 -0
- package/dist/workers/ui/ui_tools.d.ts +32 -0
- package/dist/workers/ui/ui_tools.js +112 -0
- package/dist/workers/ui/ui_worker.d.ts +571 -0
- package/dist/workers/ui/ui_worker.js +1156 -0
- package/package.json +61 -3
- package/README.md +0 -5
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/log_config.py
|
|
6
|
+
/**
|
|
7
|
+
* Process-wide controls for Pipecat's debug logging.
|
|
8
|
+
*
|
|
9
|
+
* Some debug output grows with the length of a session, such as the LLM context
|
|
10
|
+
* logged on every inference. The settings here choose how much of it to write,
|
|
11
|
+
* and each is read from an environment variable once, on first use.
|
|
12
|
+
*
|
|
13
|
+
* - `PIPECAT_LOG_LLM_CONTEXT`: how much of the context LLM services include
|
|
14
|
+
* in their DEBUG log lines. `full` (the default) logs every message;
|
|
15
|
+
* `off` logs the line without the context.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // PIPECAT_LOG_LLM_CONTEXT=off bun bot.ts
|
|
19
|
+
*/
|
|
20
|
+
import { getEnv, InvalidEnvVarValueError } from "./env.js";
|
|
21
|
+
export const _LLM_CONTEXT_LOG_ENV_VAR = "PIPECAT_LOG_LLM_CONTEXT";
|
|
22
|
+
/**
|
|
23
|
+
* How much of the context LLM services include in their DEBUG log lines.
|
|
24
|
+
*
|
|
25
|
+
* LLM services log a DEBUG line each time they generate a response, and
|
|
26
|
+
* realtime services when they set up their server-side conversation. The
|
|
27
|
+
* context is built only when DEBUG is enabled.
|
|
28
|
+
*
|
|
29
|
+
* - FULL: Every message of the context.
|
|
30
|
+
* - OFF: None of it; the line is logged without the context.
|
|
31
|
+
*/
|
|
32
|
+
export const _LLMContextLogMode = {
|
|
33
|
+
FULL: "full",
|
|
34
|
+
OFF: "off",
|
|
35
|
+
};
|
|
36
|
+
let llmContextLogMode = null;
|
|
37
|
+
/**
|
|
38
|
+
* Return how LLM services log the context.
|
|
39
|
+
*
|
|
40
|
+
* The mode named by `PIPECAT_LOG_LLM_CONTEXT`, or `full` when it is unset
|
|
41
|
+
* or empty. The environment variable is read once, on first use.
|
|
42
|
+
*
|
|
43
|
+
* @returns The current LLM context log mode.
|
|
44
|
+
* @throws InvalidEnvVarValueError If `PIPECAT_LOG_LLM_CONTEXT` is set to an unknown mode.
|
|
45
|
+
*/
|
|
46
|
+
export function _getLlmContextLogMode() {
|
|
47
|
+
if (llmContextLogMode === null) {
|
|
48
|
+
llmContextLogMode = _llmContextLogModeFromEnv();
|
|
49
|
+
}
|
|
50
|
+
return llmContextLogMode;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Forget the cached mode so the next `_getLlmContextLogMode()` reads the
|
|
54
|
+
* environment again. Python tests assign `_llm_context_log_mode = None`; a
|
|
55
|
+
* module variable can't be assigned from outside in JS.
|
|
56
|
+
*/
|
|
57
|
+
export function _resetLlmContextLogMode() {
|
|
58
|
+
llmContextLogMode = null;
|
|
59
|
+
}
|
|
60
|
+
export function _llmContextLogModeFromEnv() {
|
|
61
|
+
const raw = getEnv(_LLM_CONTEXT_LOG_ENV_VAR);
|
|
62
|
+
if (raw === undefined || !raw.trim()) {
|
|
63
|
+
return _LLMContextLogMode.FULL;
|
|
64
|
+
}
|
|
65
|
+
const value = raw.trim().toLowerCase();
|
|
66
|
+
const modes = Object.values(_LLMContextLogMode);
|
|
67
|
+
if (modes.includes(value)) {
|
|
68
|
+
return value;
|
|
69
|
+
}
|
|
70
|
+
throw new InvalidEnvVarValueError({
|
|
71
|
+
name: _LLM_CONTEXT_LOG_ENV_VAR,
|
|
72
|
+
value: raw,
|
|
73
|
+
expected: modes.join(" or "),
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=log_config.js.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export declare const LOG_LEVELS: {
|
|
2
|
+
readonly TRACE: 5;
|
|
3
|
+
readonly DEBUG: 10;
|
|
4
|
+
readonly INFO: 20;
|
|
5
|
+
readonly SUCCESS: 25;
|
|
6
|
+
readonly WARNING: 30;
|
|
7
|
+
readonly ERROR: 40;
|
|
8
|
+
readonly CRITICAL: 50;
|
|
9
|
+
};
|
|
10
|
+
export type LogLevel = keyof typeof LOG_LEVELS;
|
|
11
|
+
export interface LogRecord {
|
|
12
|
+
level: LogLevel;
|
|
13
|
+
message: string;
|
|
14
|
+
time: Date;
|
|
15
|
+
error?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export type LogSink = (record: LogRecord) => void;
|
|
18
|
+
declare class Logger {
|
|
19
|
+
#private;
|
|
20
|
+
/** Only records at or above `level` are emitted. */
|
|
21
|
+
setLevel(level: LogLevel): void;
|
|
22
|
+
isEnabledFor(level: LogLevel): boolean;
|
|
23
|
+
/** Replace all sinks (loguru `logger.remove()` + `logger.add(sink)`). */
|
|
24
|
+
setSink(...sinks: LogSink[]): void;
|
|
25
|
+
addSink(sink: LogSink): () => void;
|
|
26
|
+
log(level: LogLevel, message: string, error?: unknown): void;
|
|
27
|
+
trace(message: string): void;
|
|
28
|
+
debug(message: string): void;
|
|
29
|
+
info(message: string): void;
|
|
30
|
+
success(message: string): void;
|
|
31
|
+
warning(message: string): void;
|
|
32
|
+
warn(message: string): void;
|
|
33
|
+
error(message: string, error?: unknown): void;
|
|
34
|
+
/** loguru `logger.exception`: an error with its stack. */
|
|
35
|
+
exception(message: string, error?: unknown): void;
|
|
36
|
+
critical(message: string, error?: unknown): void;
|
|
37
|
+
}
|
|
38
|
+
export declare const logger: Logger;
|
|
39
|
+
export type { Logger };
|
|
40
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Copyright (c) 2026, pipedog contributors
|
|
2
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
//
|
|
4
|
+
// Stand-in for loguru, which upstream logs through. Same level names, so
|
|
5
|
+
// ported `logger.warning(...)` calls read the same. Replace the sink to route
|
|
6
|
+
// logs elsewhere (pino, console.json, Workers logs...).
|
|
7
|
+
export const LOG_LEVELS = {
|
|
8
|
+
TRACE: 5,
|
|
9
|
+
DEBUG: 10,
|
|
10
|
+
INFO: 20,
|
|
11
|
+
SUCCESS: 25,
|
|
12
|
+
WARNING: 30,
|
|
13
|
+
ERROR: 40,
|
|
14
|
+
CRITICAL: 50,
|
|
15
|
+
};
|
|
16
|
+
const consoleSink = (record) => {
|
|
17
|
+
const line = `${record.time.toISOString()} | ${record.level.padEnd(8)} | ${record.message}`;
|
|
18
|
+
if (LOG_LEVELS[record.level] >= LOG_LEVELS.ERROR) {
|
|
19
|
+
console.error(line, ...(record.error ? [record.error] : []));
|
|
20
|
+
}
|
|
21
|
+
else if (record.level === "WARNING") {
|
|
22
|
+
console.warn(line);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
console.log(line);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
function initialLevel() {
|
|
29
|
+
const env = globalThis.process
|
|
30
|
+
?.env;
|
|
31
|
+
const value = env?.PIPEDOG_LOG_LEVEL?.toUpperCase();
|
|
32
|
+
return value && value in LOG_LEVELS ? value : "DEBUG";
|
|
33
|
+
}
|
|
34
|
+
class Logger {
|
|
35
|
+
#level = LOG_LEVELS[initialLevel()];
|
|
36
|
+
#sinks = [consoleSink];
|
|
37
|
+
/** Only records at or above `level` are emitted. */
|
|
38
|
+
setLevel(level) {
|
|
39
|
+
this.#level = LOG_LEVELS[level];
|
|
40
|
+
}
|
|
41
|
+
isEnabledFor(level) {
|
|
42
|
+
return LOG_LEVELS[level] >= this.#level;
|
|
43
|
+
}
|
|
44
|
+
/** Replace all sinks (loguru `logger.remove()` + `logger.add(sink)`). */
|
|
45
|
+
setSink(...sinks) {
|
|
46
|
+
this.#sinks = sinks;
|
|
47
|
+
}
|
|
48
|
+
addSink(sink) {
|
|
49
|
+
this.#sinks.push(sink);
|
|
50
|
+
return () => {
|
|
51
|
+
this.#sinks = this.#sinks.filter((s) => s !== sink);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
log(level, message, error) {
|
|
55
|
+
if (LOG_LEVELS[level] < this.#level)
|
|
56
|
+
return;
|
|
57
|
+
const record = { level, message, time: new Date(), error };
|
|
58
|
+
for (const sink of this.#sinks)
|
|
59
|
+
sink(record);
|
|
60
|
+
}
|
|
61
|
+
trace(message) {
|
|
62
|
+
this.log("TRACE", message);
|
|
63
|
+
}
|
|
64
|
+
debug(message) {
|
|
65
|
+
this.log("DEBUG", message);
|
|
66
|
+
}
|
|
67
|
+
info(message) {
|
|
68
|
+
this.log("INFO", message);
|
|
69
|
+
}
|
|
70
|
+
success(message) {
|
|
71
|
+
this.log("SUCCESS", message);
|
|
72
|
+
}
|
|
73
|
+
warning(message) {
|
|
74
|
+
this.log("WARNING", message);
|
|
75
|
+
}
|
|
76
|
+
warn(message) {
|
|
77
|
+
this.log("WARNING", message);
|
|
78
|
+
}
|
|
79
|
+
error(message, error) {
|
|
80
|
+
this.log("ERROR", message, error);
|
|
81
|
+
}
|
|
82
|
+
/** loguru `logger.exception`: an error with its stack. */
|
|
83
|
+
exception(message, error) {
|
|
84
|
+
this.log("ERROR", message, error);
|
|
85
|
+
}
|
|
86
|
+
critical(message, error) {
|
|
87
|
+
this.log("CRITICAL", message, error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export const logger = new Logger();
|
|
91
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type Ctor<T = object> = abstract new (...args: any[]) => T;
|
|
2
|
+
export type Mixin<F extends (base: Ctor) => Ctor, I> = F & {
|
|
3
|
+
[Symbol.hasInstance](value: unknown): value is I;
|
|
4
|
+
};
|
|
5
|
+
export declare function defineMixin<I, F extends <B extends Ctor>(base: B) => Ctor>(name: string, factory: F): Mixin<F, I>;
|
|
6
|
+
/**
|
|
7
|
+
* Make `instanceof parent` true for instances of `child` without `child`
|
|
8
|
+
* extending it, like Python's `ABC.register`. Use it when upstream inherits
|
|
9
|
+
* from two concrete classes, e.g. `InputTextRawFrame(SystemFrame, TextFrame)`:
|
|
10
|
+
* `class InputTextRawFrame extends SystemFrame` + `addVirtualBase(InputTextRawFrame, TextFrame)`.
|
|
11
|
+
* The child must declare the parent's fields itself.
|
|
12
|
+
*/
|
|
13
|
+
export declare function addVirtualBase(child: Function, parent: Function): void;
|
|
14
|
+
//# sourceMappingURL=mixin.d.ts.map
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Copyright (c) 2026, pipedog contributors
|
|
2
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
3
|
+
//
|
|
4
|
+
// Python multiple inheritance (`class C(A, B)`) maps to a class-factory mixin:
|
|
5
|
+
// `class C extends B(A)`. `defineMixin` brands every class the factory
|
|
6
|
+
// produces so `x instanceof B` keeps working like `isinstance(x, B)`.
|
|
7
|
+
//
|
|
8
|
+
// export interface AudioRawFrame { audio: Uint8Array; ... }
|
|
9
|
+
// export const AudioRawFrame = defineMixin("AudioRawFrame", <B extends Ctor>(Base: B) => {
|
|
10
|
+
// abstract class AudioRawFrameMixin extends Base { ... }
|
|
11
|
+
// return AudioRawFrameMixin;
|
|
12
|
+
// });
|
|
13
|
+
// export class OutputAudioRawFrame extends AudioRawFrame(DataFrame) { ... }
|
|
14
|
+
// frame instanceof AudioRawFrame // true
|
|
15
|
+
//
|
|
16
|
+
// Constructors take one options object (Python's **kwargs), so a mixin reads
|
|
17
|
+
// its own keys from `args[0]` and forwards everything to `super(...args)`.
|
|
18
|
+
export function defineMixin(name, factory) {
|
|
19
|
+
const brand = Symbol.for(`pipedog.mixin.${name}`);
|
|
20
|
+
const apply = ((base) => {
|
|
21
|
+
const cls = factory(base);
|
|
22
|
+
Object.defineProperty(cls.prototype, brand, { value: true });
|
|
23
|
+
return cls;
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(apply, "name", { value: name });
|
|
26
|
+
Object.defineProperty(apply, Symbol.hasInstance, {
|
|
27
|
+
value: (value) => typeof value === "object" &&
|
|
28
|
+
value !== null &&
|
|
29
|
+
value[brand] === true,
|
|
30
|
+
});
|
|
31
|
+
return apply;
|
|
32
|
+
}
|
|
33
|
+
const virtualBases = new WeakMap();
|
|
34
|
+
/**
|
|
35
|
+
* Make `instanceof parent` true for instances of `child` without `child`
|
|
36
|
+
* extending it, like Python's `ABC.register`. Use it when upstream inherits
|
|
37
|
+
* from two concrete classes, e.g. `InputTextRawFrame(SystemFrame, TextFrame)`:
|
|
38
|
+
* `class InputTextRawFrame extends SystemFrame` + `addVirtualBase(InputTextRawFrame, TextFrame)`.
|
|
39
|
+
* The child must declare the parent's fields itself.
|
|
40
|
+
*/
|
|
41
|
+
export function addVirtualBase(child, parent) {
|
|
42
|
+
let children = virtualBases.get(parent);
|
|
43
|
+
if (!children) {
|
|
44
|
+
children = new Set();
|
|
45
|
+
virtualBases.set(parent, children);
|
|
46
|
+
Object.defineProperty(parent, Symbol.hasInstance, {
|
|
47
|
+
value(value) {
|
|
48
|
+
if (Function.prototype[Symbol.hasInstance].call(this, value))
|
|
49
|
+
return true;
|
|
50
|
+
const registered = virtualBases.get(this);
|
|
51
|
+
if (!registered)
|
|
52
|
+
return false;
|
|
53
|
+
for (const c of registered) {
|
|
54
|
+
if (Function.prototype[Symbol.hasInstance].call(c, value))
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
return false;
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
children.add(child);
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=mixin.js.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** Base class for network utilities, providing exponential backoff time calculation. */
|
|
2
|
+
/**
|
|
3
|
+
* Calculate exponential backoff wait time.
|
|
4
|
+
*
|
|
5
|
+
* @param attempt Current attempt number (1-based)
|
|
6
|
+
* @param minWait Minimum wait time in seconds
|
|
7
|
+
* @param maxWait Maximum wait time in seconds
|
|
8
|
+
* @param multiplier Base multiplier for exponential calculation
|
|
9
|
+
* @returns Wait time in seconds
|
|
10
|
+
*/
|
|
11
|
+
export declare function exponentialBackoffTime(attempt: number, minWait?: number, maxWait?: number, multiplier?: number): number;
|
|
12
|
+
export interface QuickFailureResultOptions {
|
|
13
|
+
isQuickFailure: boolean;
|
|
14
|
+
shouldGiveUp: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Outcome of recording one failed connection attempt.
|
|
18
|
+
*
|
|
19
|
+
* - `isQuickFailure`: Whether this attempt lasted less than the tracker's
|
|
20
|
+
* `minStableDuration`.
|
|
21
|
+
* - `shouldGiveUp`: Whether `maxConsecutiveFailures` quick failures have now
|
|
22
|
+
* happened in a row and the caller should stop retrying.
|
|
23
|
+
*/
|
|
24
|
+
export declare class QuickFailureResult {
|
|
25
|
+
isQuickFailure: boolean;
|
|
26
|
+
shouldGiveUp: boolean;
|
|
27
|
+
constructor(options: QuickFailureResultOptions);
|
|
28
|
+
}
|
|
29
|
+
export interface QuickFailureTrackerOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Minimum time, in seconds, a connection must survive to be considered
|
|
32
|
+
* stable rather than a quick failure.
|
|
33
|
+
*/
|
|
34
|
+
minStableDuration?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Number of consecutive quick failures after which `record()` reports that
|
|
37
|
+
* the caller should give up.
|
|
38
|
+
*/
|
|
39
|
+
maxConsecutiveFailures?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detects a connection that keeps failing immediately after connecting.
|
|
43
|
+
*
|
|
44
|
+
* Exponential backoff alone doesn't help when a connection attempt succeeds
|
|
45
|
+
* just enough to fail again right away (e.g. a server that accepts a
|
|
46
|
+
* WebSocket handshake but then immediately rejects invalid credentials) —
|
|
47
|
+
* waiting longer between attempts won't fix that, only stopping will.
|
|
48
|
+
*
|
|
49
|
+
* Call `record()` with how long each failed attempt lasted. Once
|
|
50
|
+
* `maxConsecutiveFailures` attempts in a row each lasted under
|
|
51
|
+
* `minStableDuration` seconds, the result's `shouldGiveUp` is true,
|
|
52
|
+
* telling the caller to stop retrying instead of trying again.
|
|
53
|
+
*/
|
|
54
|
+
export declare class QuickFailureTracker {
|
|
55
|
+
minStableDuration: number;
|
|
56
|
+
maxConsecutiveFailures: number;
|
|
57
|
+
count: number;
|
|
58
|
+
constructor(options?: QuickFailureTrackerOptions);
|
|
59
|
+
/**
|
|
60
|
+
* Record a failed connection attempt that lasted `duration` seconds.
|
|
61
|
+
*
|
|
62
|
+
* Increments the consecutive-failure streak if this attempt was a quick
|
|
63
|
+
* failure, or resets it if the attempt was stable.
|
|
64
|
+
*
|
|
65
|
+
* @param duration How long the failed attempt lasted, in seconds.
|
|
66
|
+
* @returns A `QuickFailureResult` describing this attempt and whether the
|
|
67
|
+
* caller should give up.
|
|
68
|
+
*/
|
|
69
|
+
record(duration: number): QuickFailureResult;
|
|
70
|
+
/** Reset the consecutive-failure streak, e.g. on a fresh connect. */
|
|
71
|
+
reset(): void;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=network.d.ts.map
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/network.py
|
|
6
|
+
/** Base class for network utilities, providing exponential backoff time calculation. */
|
|
7
|
+
/**
|
|
8
|
+
* Calculate exponential backoff wait time.
|
|
9
|
+
*
|
|
10
|
+
* @param attempt Current attempt number (1-based)
|
|
11
|
+
* @param minWait Minimum wait time in seconds
|
|
12
|
+
* @param maxWait Maximum wait time in seconds
|
|
13
|
+
* @param multiplier Base multiplier for exponential calculation
|
|
14
|
+
* @returns Wait time in seconds
|
|
15
|
+
*/
|
|
16
|
+
export function exponentialBackoffTime(attempt, minWait = 4, maxWait = 10, multiplier = 1) {
|
|
17
|
+
const exp = 2 ** (attempt - 1) * multiplier;
|
|
18
|
+
// Python raises OverflowError for huge exponents; JS yields Infinity/NaN.
|
|
19
|
+
if (Number.isNaN(exp)) {
|
|
20
|
+
return maxWait;
|
|
21
|
+
}
|
|
22
|
+
const result = Math.max(0, Math.min(exp, maxWait));
|
|
23
|
+
return Math.max(minWait, result);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Outcome of recording one failed connection attempt.
|
|
27
|
+
*
|
|
28
|
+
* - `isQuickFailure`: Whether this attempt lasted less than the tracker's
|
|
29
|
+
* `minStableDuration`.
|
|
30
|
+
* - `shouldGiveUp`: Whether `maxConsecutiveFailures` quick failures have now
|
|
31
|
+
* happened in a row and the caller should stop retrying.
|
|
32
|
+
*/
|
|
33
|
+
export class QuickFailureResult {
|
|
34
|
+
isQuickFailure;
|
|
35
|
+
shouldGiveUp;
|
|
36
|
+
constructor(options) {
|
|
37
|
+
this.isQuickFailure = options.isQuickFailure;
|
|
38
|
+
this.shouldGiveUp = options.shouldGiveUp;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Detects a connection that keeps failing immediately after connecting.
|
|
43
|
+
*
|
|
44
|
+
* Exponential backoff alone doesn't help when a connection attempt succeeds
|
|
45
|
+
* just enough to fail again right away (e.g. a server that accepts a
|
|
46
|
+
* WebSocket handshake but then immediately rejects invalid credentials) —
|
|
47
|
+
* waiting longer between attempts won't fix that, only stopping will.
|
|
48
|
+
*
|
|
49
|
+
* Call `record()` with how long each failed attempt lasted. Once
|
|
50
|
+
* `maxConsecutiveFailures` attempts in a row each lasted under
|
|
51
|
+
* `minStableDuration` seconds, the result's `shouldGiveUp` is true,
|
|
52
|
+
* telling the caller to stop retrying instead of trying again.
|
|
53
|
+
*/
|
|
54
|
+
export class QuickFailureTracker {
|
|
55
|
+
minStableDuration;
|
|
56
|
+
maxConsecutiveFailures;
|
|
57
|
+
count = 0;
|
|
58
|
+
constructor(options = {}) {
|
|
59
|
+
this.minStableDuration = options.minStableDuration ?? 5.0;
|
|
60
|
+
this.maxConsecutiveFailures = options.maxConsecutiveFailures ?? 3;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Record a failed connection attempt that lasted `duration` seconds.
|
|
64
|
+
*
|
|
65
|
+
* Increments the consecutive-failure streak if this attempt was a quick
|
|
66
|
+
* failure, or resets it if the attempt was stable.
|
|
67
|
+
*
|
|
68
|
+
* @param duration How long the failed attempt lasted, in seconds.
|
|
69
|
+
* @returns A `QuickFailureResult` describing this attempt and whether the
|
|
70
|
+
* caller should give up.
|
|
71
|
+
*/
|
|
72
|
+
record(duration) {
|
|
73
|
+
const isQuickFailure = duration < this.minStableDuration;
|
|
74
|
+
if (isQuickFailure) {
|
|
75
|
+
this.count += 1;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
this.count = 0;
|
|
79
|
+
}
|
|
80
|
+
return new QuickFailureResult({
|
|
81
|
+
isQuickFailure,
|
|
82
|
+
shouldGiveUp: isQuickFailure && this.count >= this.maxConsecutiveFailures,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/** Reset the consecutive-failure streak, e.g. on a fresh connect. */
|
|
86
|
+
reset() {
|
|
87
|
+
this.count = 0;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Return allowed origins from the `PIPECAT_ALLOWED_ORIGINS` env var.
|
|
3
|
+
*
|
|
4
|
+
* Parses a comma-separated list of origin strings. Returns an empty list
|
|
5
|
+
* (allow all) when the variable is unset or empty.
|
|
6
|
+
*/
|
|
7
|
+
export declare function defaultAllowedOrigins(): string[];
|
|
8
|
+
/**
|
|
9
|
+
* Return whether `origin` is permitted by `allowedOrigins`.
|
|
10
|
+
*
|
|
11
|
+
* @param origin The value of the `Origin` header, or an empty string if absent.
|
|
12
|
+
* @param allowedOrigins List of allowed origin strings. An empty list allows
|
|
13
|
+
* all origins. When non-empty, a missing or disallowed origin is rejected.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isOriginAllowed(origin: string, allowedOrigins: string[]): boolean;
|
|
16
|
+
//# sourceMappingURL=allowed_origins.d.ts.map
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/security/allowed_origins.py
|
|
6
|
+
/** Origin validation utilities. */
|
|
7
|
+
import { getEnv } from "../env.js";
|
|
8
|
+
/**
|
|
9
|
+
* Return allowed origins from the `PIPECAT_ALLOWED_ORIGINS` env var.
|
|
10
|
+
*
|
|
11
|
+
* Parses a comma-separated list of origin strings. Returns an empty list
|
|
12
|
+
* (allow all) when the variable is unset or empty.
|
|
13
|
+
*/
|
|
14
|
+
export function defaultAllowedOrigins() {
|
|
15
|
+
const val = getEnv("PIPECAT_ALLOWED_ORIGINS") ?? "";
|
|
16
|
+
return val
|
|
17
|
+
.split(",")
|
|
18
|
+
.map((o) => o.trim())
|
|
19
|
+
.filter((o) => o);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Return whether `origin` is permitted by `allowedOrigins`.
|
|
23
|
+
*
|
|
24
|
+
* @param origin The value of the `Origin` header, or an empty string if absent.
|
|
25
|
+
* @param allowedOrigins List of allowed origin strings. An empty list allows
|
|
26
|
+
* all origins. When non-empty, a missing or disallowed origin is rejected.
|
|
27
|
+
*/
|
|
28
|
+
export function isOriginAllowed(origin, allowedOrigins) {
|
|
29
|
+
if (allowedOrigins.length === 0) {
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
return new Set(allowedOrigins.map((o) => o.toLowerCase())).has(origin.toLowerCase());
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=allowed_origins.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Masks credentials in text bound for logs and error reports.
|
|
3
|
+
*
|
|
4
|
+
* Error messages often quote whatever a failure carried: an SDK exception that
|
|
5
|
+
* prints the headers it sent, a URL signed for one download, a provider body
|
|
6
|
+
* echoing the key it rejected. `redactSecrets` masks the credential and keeps
|
|
7
|
+
* the rest, so a message still says what went wrong.
|
|
8
|
+
*
|
|
9
|
+
* It masks three things:
|
|
10
|
+
*
|
|
11
|
+
* - The value of any `name=value` or `name: value` pair, quoted or not,
|
|
12
|
+
* whose name marks a credential (`api_key`, `Authorization`,
|
|
13
|
+
* `X-Amz-Signature`, `apiKey`...). This covers query strings, printed
|
|
14
|
+
* header dicts and plain prose alike.
|
|
15
|
+
* - A URL's password (`scheme://user:password@host`).
|
|
16
|
+
* - Tokens recognizable by their format alone: provider key prefixes, AWS
|
|
17
|
+
* access key IDs and JWTs.
|
|
18
|
+
*/
|
|
19
|
+
export declare const REDACTED = "[REDACTED]";
|
|
20
|
+
/**
|
|
21
|
+
* Mask the credentials in `text`, leaving the rest as written.
|
|
22
|
+
*
|
|
23
|
+
* @param text Text that may quote a credential, such as an error message.
|
|
24
|
+
* @returns The text with each credential replaced by `[REDACTED]`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function redactSecrets(text: string): string;
|
|
27
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// Copyright (c) 2024-2026, Daily
|
|
2
|
+
// Copyright (c) 2026, pipedog contributors
|
|
3
|
+
// SPDX-License-Identifier: BSD-2-Clause
|
|
4
|
+
//
|
|
5
|
+
// Ported from pipecat: src/pipecat/utils/security/redaction.py
|
|
6
|
+
/**
|
|
7
|
+
* Masks credentials in text bound for logs and error reports.
|
|
8
|
+
*
|
|
9
|
+
* Error messages often quote whatever a failure carried: an SDK exception that
|
|
10
|
+
* prints the headers it sent, a URL signed for one download, a provider body
|
|
11
|
+
* echoing the key it rejected. `redactSecrets` masks the credential and keeps
|
|
12
|
+
* the rest, so a message still says what went wrong.
|
|
13
|
+
*
|
|
14
|
+
* It masks three things:
|
|
15
|
+
*
|
|
16
|
+
* - The value of any `name=value` or `name: value` pair, quoted or not,
|
|
17
|
+
* whose name marks a credential (`api_key`, `Authorization`,
|
|
18
|
+
* `X-Amz-Signature`, `apiKey`...). This covers query strings, printed
|
|
19
|
+
* header dicts and plain prose alike.
|
|
20
|
+
* - A URL's password (`scheme://user:password@host`).
|
|
21
|
+
* - Tokens recognizable by their format alone: provider key prefixes, AWS
|
|
22
|
+
* access key IDs and JWTs.
|
|
23
|
+
*/
|
|
24
|
+
export const REDACTED = "[REDACTED]";
|
|
25
|
+
// A name marks a credential when one of its words is one of these, so
|
|
26
|
+
// `x-api-key` and `X-Amz-Security-Token` do while `keyterms` and `max_tokens`
|
|
27
|
+
// don't.
|
|
28
|
+
const CREDENTIAL_WORDS = new Set([
|
|
29
|
+
"apikey",
|
|
30
|
+
"auth",
|
|
31
|
+
"authorization",
|
|
32
|
+
"cookie",
|
|
33
|
+
"credential",
|
|
34
|
+
"credentials",
|
|
35
|
+
"creds",
|
|
36
|
+
"jwt",
|
|
37
|
+
"key",
|
|
38
|
+
"passwd",
|
|
39
|
+
"password",
|
|
40
|
+
"pwd",
|
|
41
|
+
"secret",
|
|
42
|
+
"sig",
|
|
43
|
+
"signature",
|
|
44
|
+
"token",
|
|
45
|
+
// Google's resumable upload session ID, which authorizes the upload by itself.
|
|
46
|
+
"uploadid",
|
|
47
|
+
]);
|
|
48
|
+
// `name=value` or `name: value` (or `:=`, `=>`), the name optionally quoted as
|
|
49
|
+
// in a printed dict, the value quoted or running to the next delimiter. A
|
|
50
|
+
// quoted value cut short before its closing quote, as a truncated repr leaves
|
|
51
|
+
// it, runs to the next delimiter instead. An auth scheme (`Bearer`, `Basic`...)
|
|
52
|
+
// ahead of the value is kept. A value already redacted is matched whole, so
|
|
53
|
+
// text redacted twice reads the same as text redacted once.
|
|
54
|
+
const PAIR = new RegExp(String.raw `(?<name>(?<![\w.-])(?<nq>["']?)[A-Za-z][\w.-]*\k<nq>)` +
|
|
55
|
+
String.raw `(?<sep>\s*(?::=|=>|[:=])\s*)` +
|
|
56
|
+
String.raw `(?<scheme>(?:Bearer|Basic|Token|Api-Token|Key|Digest|AWS4-HMAC-SHA256)\s+)?` +
|
|
57
|
+
String.raw `(?:(?<vq>["'])(?<quoted>.*?)\k<vq>` +
|
|
58
|
+
String.raw `|(?<oq>["']?)(?<bare>(?:\[REDACTED\]|[^\s,;&"'}\])\[])+))`, "g");
|
|
59
|
+
const URL_PASSWORD = /(?<prefix>\b[a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)[^\s/@]+(?=@)/gi;
|
|
60
|
+
// Formats after gitleaks' rules for the same credentials
|
|
61
|
+
// (github.com/gitleaks/gitleaks, config/gitleaks.toml), loosened where a
|
|
62
|
+
// looser match costs nothing: a log line is masked, not scanned for findings.
|
|
63
|
+
const KNOWN_TOKENS = new RegExp(String.raw `\b(?:` +
|
|
64
|
+
String.raw `sk-[A-Za-z0-9_-]{20,}` + // OpenAI, Anthropic
|
|
65
|
+
String.raw `|(?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z0-9]{16}` + // AWS access key IDs
|
|
66
|
+
String.raw `|ABSK[A-Za-z0-9+/]{109,269}={0,2}` + // Amazon Bedrock API keys, long-lived
|
|
67
|
+
String.raw `|bedrock-api-key-[A-Za-z0-9+/=_-]+` + // Amazon Bedrock API keys, short-lived
|
|
68
|
+
String.raw `|AIza[0-9A-Za-z_-]{35}` + // Google API keys
|
|
69
|
+
String.raw `|gh[pousr]_[A-Za-z0-9]{36,}|github_pat_\w{82,}` + // GitHub
|
|
70
|
+
String.raw `|xox[abeoprs]-[A-Za-z0-9-]{10,}|xapp-\d-[A-Za-z0-9-]{10,}` + // Slack
|
|
71
|
+
// Slack webhooks, whose path is the secret
|
|
72
|
+
String.raw `|(?:(?<=hooks\.slack\.com/services/)|(?<=hooks\.slack\.com/workflows/)` +
|
|
73
|
+
String.raw `|(?<=hooks\.slack\.com/triggers/))[A-Za-z0-9+/]{20,}` +
|
|
74
|
+
String.raw `|(?:hf|api_org)_[A-Za-z]{34}` + // Hugging Face
|
|
75
|
+
String.raw `|pplx-[A-Za-z0-9]{48}` + // Perplexity
|
|
76
|
+
String.raw `|SK[0-9a-fA-F]{32}` + // Twilio API keys
|
|
77
|
+
String.raw `|eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]*` + // JWTs, signed or not
|
|
78
|
+
String.raw `)` +
|
|
79
|
+
// A PEM private key, through its END line or, cut short, the end of the text.
|
|
80
|
+
String.raw `|-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----` +
|
|
81
|
+
String.raw `(?:[\s\S]*?-----END[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----|[\s\S]*)`, "g");
|
|
82
|
+
function stripQuotes(name) {
|
|
83
|
+
return name.replace(/^["']+/, "").replace(/["']+$/, "");
|
|
84
|
+
}
|
|
85
|
+
function isCredentialName(name) {
|
|
86
|
+
const words = stripQuotes(name)
|
|
87
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1_$2")
|
|
88
|
+
.toLowerCase();
|
|
89
|
+
const parts = words.split(/[-_.]/).filter((p) => p);
|
|
90
|
+
return CREDENTIAL_WORDS.has(parts.join("")) || parts.some((p) => CREDENTIAL_WORDS.has(p));
|
|
91
|
+
}
|
|
92
|
+
function redactPairs(text) {
|
|
93
|
+
// String.prototype.replace collects every match before calling the
|
|
94
|
+
// replacer, so recursing with the same global regex is safe.
|
|
95
|
+
return text.replace(PAIR, (...args) => redactPair(args[args.length - 1]));
|
|
96
|
+
}
|
|
97
|
+
function redactPair(match) {
|
|
98
|
+
const quote = match.vq || "";
|
|
99
|
+
let value;
|
|
100
|
+
if (isCredentialName(match.name)) {
|
|
101
|
+
value = REDACTED;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// The value may itself hold pairs, as `URL: https://...?token=...` does.
|
|
105
|
+
value = redactPairs(match.quoted || match.bare || "");
|
|
106
|
+
}
|
|
107
|
+
const opening = match.oq || "";
|
|
108
|
+
return `${match.name}${match.sep}${match.scheme || ""}${quote || opening}${value}${quote}`;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Mask the credentials in `text`, leaving the rest as written.
|
|
112
|
+
*
|
|
113
|
+
* @param text Text that may quote a credential, such as an error message.
|
|
114
|
+
* @returns The text with each credential replaced by `[REDACTED]`.
|
|
115
|
+
*/
|
|
116
|
+
export function redactSecrets(text) {
|
|
117
|
+
// Known formats go first: a PEM key spans lines, and masking its first line
|
|
118
|
+
// as a pair's value would leave the rest unrecognizable.
|
|
119
|
+
text = text.replace(KNOWN_TOKENS, REDACTED);
|
|
120
|
+
text = redactPairs(text);
|
|
121
|
+
return text.replace(URL_PASSWORD, `$<prefix>${REDACTED}`);
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=redaction.js.map
|