{"version":3,"sources":["../src/schema.ts","../src/models.ts"],"sourcesContent":["import type { Transport, UrlBuilder } from '@saraudio/core';\nimport { JsonPrimitiveSchema, JsonValueSchema } from '@saraudio/core/json';\nimport type { Logger } from '@saraudio/utils';\nimport { z } from 'zod';\nimport { SONIOX_MODEL_DEFINITIONS, type SonioxModelId } from './models';\n\nconst SONIOX_FIELD_DESCRIPTIONS = {\n  auth: {\n    group:\n      'Authentication for Soniox. Provide either a short-lived token (recommended for client apps) or a long-lived API key.',\n    getToken:\n      'Async callback that returns a short-lived Soniox credential (e.g. a temporary API key created via Soniox Auth API). Takes precedence over token/apiKey.',\n    token:\n      'Short-lived token / temporary API key. Sent as `api_key` in the realtime WebSocket init message (and used for REST as a Bearer token when applicable). Overrides apiKey.',\n    apiKey:\n      'Long-lived Soniox API key. Sent as `api_key` in the realtime WebSocket init message (and used for REST as a Bearer token).',\n  },\n  baseUrl:\n    'Override Soniox endpoints. Use a WSS URL for realtime (default: wss://stt-rt.soniox.com/transcribe-websocket) or an HTTPS URL for REST (default: https://api.soniox.com/v1). If the value starts with `ws`, it overrides the realtime endpoint; if it starts with `http`, it overrides the REST base.',\n  query:\n    'Extra query parameters appended to the realtime WebSocket URL. Values are stringified; null/undefined are omitted. Most Soniox realtime options are sent in the init JSON, not as URL params.',\n  headers:\n    'Additional HTTP headers to include in REST requests (batch/file flows). Not used for WebSocket in browsers (custom WS headers are not supported).',\n  wsProtocols: 'Additional WebSocket subprotocols. Most Soniox integrations do not need this.',\n  wsKeepaliveMs:\n    'WebSocket keepalive interval in milliseconds. When the client is not sending audio, the SDK periodically sends {\"type\":\"keepalive\"} to keep the realtime connection alive (Soniox requires at least one keepalive message every 20 seconds while idle).',\n\n  model:\n    'Soniox model id to use for transcription (e.g. `stt-rt-v3`). You can list available models via Soniox REST `GET /v1/models`.',\n  sampleRate:\n    'Audio sample rate in Hz. Required for raw audio formats; for containerized audio (`audioFormat: \"auto\"`) Soniox can infer this from container headers.',\n  channels:\n    'Number of audio channels (1 = mono, 2 = stereo). Sent as `num_channels` in the realtime init message and must match the actual audio stream.',\n  audioFormat:\n    'Audio format for Soniox realtime (`audio_format`). Use `auto` for containerized audio (wav/mp3/webm/etc). For raw PCM/codecs (e.g. pcm_s16le) you must provide sampleRate and channels.',\n  languageHints:\n    'Optional list of ISO language codes to bias recognition. This is a hint/prioritization (not a hard restriction).',\n  languageHintsStrict:\n    'When true, Soniox relies more on language_hints to restrict the recognized language (best-effort; see Soniox language restrictions docs).',\n  translation:\n    'Optional realtime/batch translation configuration. One-way: { type: \"one_way\", targetLanguage }. Two-way: { type: \"two_way\", languageA, languageB }.',\n  diarization: 'Enable speaker diarization (adds speaker labels to tokens; Soniox supports up to ~15 speakers).',\n  endpointDetection:\n    'Enable endpoint detection (end-of-utterance). When triggered, Soniox finalizes accumulated tokens and emits an `<end>` marker.',\n  languageIdentification:\n    'Enable language identification for multilingual audio. Tokens may include detected language metadata.',\n  queueBudgetMs:\n    'Client-side backpressure budget (milliseconds of audio buffered before dropping oldest frames). Lower values reduce latency; higher values reduce drops but increase latency. Clamped to a safe range by the SDK.',\n} as const;\n\ntype TokenProvider = () => Promise<string>;\n\ntype HeadersCallback = (ctx: { transport: Transport }) => Record<string, string> | Promise<Record<string, string>>;\n\nconst TokenProviderSchema = z.custom<TokenProvider>((value) => typeof value === 'function');\n\nconst UrlBuilderSchema = z.custom<UrlBuilder>((value) => typeof value === 'function');\n\nconst HeadersCallbackSchema = z.custom<HeadersCallback>((value) => typeof value === 'function');\n\nconst LoggerSchema = z.custom<Logger>((value) => !!value && typeof value === 'object');\n\nconst ProviderAuthSchema = z\n  .object({\n    getToken: TokenProviderSchema.describe(SONIOX_FIELD_DESCRIPTIONS.auth.getToken).optional(),\n    token: z.string().min(1).describe(SONIOX_FIELD_DESCRIPTIONS.auth.token).optional(),\n    apiKey: z.string().min(1).describe(SONIOX_FIELD_DESCRIPTIONS.auth.apiKey).optional(),\n  })\n  .strict()\n  .describe(SONIOX_FIELD_DESCRIPTIONS.auth.group);\n\nconst ProviderAuthOverridesSchema = z\n  .object({\n    token: z.string().min(1).describe(SONIOX_FIELD_DESCRIPTIONS.auth.token).optional(),\n    apiKey: z.string().min(1).describe(SONIOX_FIELD_DESCRIPTIONS.auth.apiKey).optional(),\n  })\n  .strict()\n  .describe(SONIOX_FIELD_DESCRIPTIONS.auth.group);\n\nexport const SonioxModelIdSchema = z.custom<SonioxModelId>(\n  (value) => typeof value === 'string' && value in SONIOX_MODEL_DEFINITIONS,\n);\n\nexport const SonioxOptionsSchema = z\n  .object({\n    auth: ProviderAuthSchema.optional(),\n    baseUrl: z\n      .union([z.string().min(1), UrlBuilderSchema])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.baseUrl)\n      .optional(),\n    query: z\n      .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null(), z.undefined()]))\n      .describe(SONIOX_FIELD_DESCRIPTIONS.query)\n      .optional(),\n    headers: z\n      .union([z.record(z.string(), z.string()), HeadersCallbackSchema])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.headers)\n      .optional(),\n    wsProtocols: z.array(z.string()).describe(SONIOX_FIELD_DESCRIPTIONS.wsProtocols).optional(),\n    wsKeepaliveMs: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.wsKeepaliveMs).optional(),\n    logger: LoggerSchema.optional(),\n\n    model: SonioxModelIdSchema.describe(SONIOX_FIELD_DESCRIPTIONS.model),\n    sampleRate: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.sampleRate).optional(),\n    channels: z\n      .union([z.literal(1), z.literal(2)])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.channels)\n      .optional(),\n    audioFormat: z.string().describe(SONIOX_FIELD_DESCRIPTIONS.audioFormat).optional(),\n    languageHints: z.array(z.string()).describe(SONIOX_FIELD_DESCRIPTIONS.languageHints).optional(),\n    languageHintsStrict: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.languageHintsStrict).optional(),\n    translation: z\n      .union([\n        z\n          .object({\n            type: z.literal('one_way'),\n            targetLanguage: z.string().min(1),\n          })\n          .strict(),\n        z\n          .object({\n            type: z.literal('two_way'),\n            languageA: z.string().min(1),\n            languageB: z.string().min(1),\n          })\n          .strict(),\n      ])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.translation)\n      .optional(),\n    diarization: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.diarization).optional(),\n    endpointDetection: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.endpointDetection).optional(),\n    languageIdentification: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.languageIdentification).optional(),\n    queueBudgetMs: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.queueBudgetMs).optional(),\n  })\n  .passthrough();\n\nexport type SonioxOptions = z.infer<typeof SonioxOptionsSchema>;\n\nexport const SonioxOverridesSchema = z\n  .object({\n    auth: ProviderAuthOverridesSchema.optional(),\n    baseUrl: z.string().min(1).describe(SONIOX_FIELD_DESCRIPTIONS.baseUrl).optional(),\n    query: z.record(z.string(), JsonPrimitiveSchema).describe(SONIOX_FIELD_DESCRIPTIONS.query).optional(),\n    headers: z.record(z.string(), z.string()).describe(SONIOX_FIELD_DESCRIPTIONS.headers).optional(),\n    wsProtocols: z.array(z.string()).describe(SONIOX_FIELD_DESCRIPTIONS.wsProtocols).optional(),\n    wsKeepaliveMs: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.wsKeepaliveMs).optional(),\n    logger: z.never().optional(),\n\n    model: SonioxModelIdSchema.describe(SONIOX_FIELD_DESCRIPTIONS.model).optional(),\n    sampleRate: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.sampleRate).optional(),\n    channels: z\n      .union([z.literal(1), z.literal(2)])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.channels)\n      .optional(),\n    audioFormat: z.string().describe(SONIOX_FIELD_DESCRIPTIONS.audioFormat).optional(),\n    languageHints: z.array(z.string()).describe(SONIOX_FIELD_DESCRIPTIONS.languageHints).optional(),\n    languageHintsStrict: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.languageHintsStrict).optional(),\n    translation: z\n      .union([\n        z\n          .object({\n            type: z.literal('one_way'),\n            targetLanguage: z.string().min(1),\n          })\n          .strict(),\n        z\n          .object({\n            type: z.literal('two_way'),\n            languageA: z.string().min(1),\n            languageB: z.string().min(1),\n          })\n          .strict(),\n      ])\n      .describe(SONIOX_FIELD_DESCRIPTIONS.translation)\n      .optional(),\n    diarization: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.diarization).optional(),\n    endpointDetection: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.endpointDetection).optional(),\n    languageIdentification: z.boolean().describe(SONIOX_FIELD_DESCRIPTIONS.languageIdentification).optional(),\n    queueBudgetMs: z.number().positive().describe(SONIOX_FIELD_DESCRIPTIONS.queueBudgetMs).optional(),\n  })\n  .catchall(JsonValueSchema);\n\nexport type SonioxOverrides = z.infer<typeof SonioxOverridesSchema>;\n\nexport const DEFAULT_SONIOX_OVERRIDES: SonioxOverrides = {\n  model: 'stt-rt-v3',\n};\n","/** Soniox официальные модели (полные имена для API). */\nexport const SONIOX_REALTIME_MODELS = ['stt-rt-v3'] as const;\nexport const SONIOX_ASYNC_MODELS = ['stt-async-v3'] as const;\n\nexport type SonioxRealtimeModelId = (typeof SONIOX_REALTIME_MODELS)[number];\nexport type SonioxAsyncModelId = (typeof SONIOX_ASYNC_MODELS)[number];\nexport type SonioxModelId = SonioxRealtimeModelId | SonioxAsyncModelId;\n\nexport const SONIOX_MODEL_DEFINITIONS: Record<SonioxModelId, { type: 'realtime' | 'async'; label: string }> = {\n  'stt-rt-v3': { type: 'realtime', label: 'Speech-to-Text Real-time v3' },\n  'stt-async-v3': { type: 'async', label: 'Speech-to-Text Async v3' },\n} as const;\n"],"mappings":"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","names":[]}