@mirai/core 0.4.664 → 0.4.666
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/build/components/Chat/components/Aura/Aura.js +40 -14
- package/build/components/Chat/components/Aura/Aura.js.map +1 -1
- package/build/components/Chat/components/Aura/helpers/getAllowedOpenUrl.js +30 -0
- package/build/components/Chat/components/Aura/helpers/getAllowedOpenUrl.js.map +1 -0
- package/build/components/Chat/components/Aura/helpers/index.js +17 -0
- package/build/components/Chat/components/Aura/helpers/index.js.map +1 -0
- package/build/components/Chat/components/Aura/hooks/useLiveSession.js +507 -0
- package/build/components/Chat/components/Aura/hooks/useLiveSession.js.map +1 -0
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js +6 -9
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js.map +1 -1
- package/build/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js +5 -6
- package/build/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js.map +1 -1
- package/build/components/helpers/constants.js +1 -0
- package/build/components/helpers/constants.js.map +1 -1
- package/build/helpers/getSuperProps.js +1 -1
- package/build/helpers/getSuperProps.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_slicedToArray","r","e","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","failedCallIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","audioResponseIds","createFunctionState","pendingCalls","Map","pendingFollowup","pendingFollowupReason","pendingFollowupResponse","handledOpenUrlCalls","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","mcpStateRef","responseStateRef","functionStateRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","sender","track","stop","localStream","getTracks","clearTimeout","srcObject","disconnect","audioContext","safeJsonParse","parse","_unused","isAllowedOpenUrl","url","trim","startsWith","enableMicrophone","enabled","clearPendingMcp","clearPendingFollowup","sendResponseCreate","reason","responseOverrides","size","channel","responsePayload","response","sendPendingFollowup","requestFollowupResponse","outputCallId","has","add","resumeMcpIfNeeded","delete","trackMcpStart","callId","getFunctionCallKey","responseId","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","requestFollowup","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","buildMcpFailureInstructions","localeHint","normalizedLocale","handleMcpFailure","failureKey","instructions","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","id","values","callKey","error","allowed_prefix","window","location","assign","startSession","_ref3","assistant_name","chainId","currency","hotelId","isChain","locale","onTranscript","setIsConnecting","setReady","fingerprint","getClientFingerprint","finalizeSession","errorMessage","message","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","addEventListener","connectionState","document","createElement","autoplay","ontrack","_ref4","streams","_streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","_mediaStream$getAudio","getAudioTracks","_mediaStream$getAudio2","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","event","AURA_START","introductionMessage","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","clear","_payload$item7","_payload$item8","_payload$item1","_payload$item10","status","_payload$item11","_payload$item12","_payload$item13","_payload$item14","approvalId","_payload$item15","_payload$item16","_payload$item19","_payload$item17","_payload$item18","_payload$item20","_response$status_deta","_response$status_deta2","hasMessage","some","status_details","code","_payload$transcript","transcript","_payload$transcript2","input","activeLocale","channelId","author","body","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\n\nconst createMcpState = () => ({\n pending: false,\n pendingCallIds: new Set(),\n pendingCount: 0,\n handledCallIds: new Set(),\n handledApprovalIds: new Set(),\n failedCallIds: new Set(),\n responseIds: new Set(),\n responsesDone: new Set(),\n responsesWithMessage: new Set(),\n resumeRequestedCallIds: new Set(),\n resumeRequestedAny: false,\n retry: { count: 0, timeoutId: null },\n});\n\nconst createResponseState = () => ({\n activeId: null,\n audioResponseIds: new Set(),\n});\n\nconst createFunctionState = () => ({\n pendingCalls: new Map(),\n pendingFollowup: false,\n pendingFollowupReason: null,\n pendingFollowupResponse: null,\n handledOpenUrlCalls: new Set(),\n});\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const mcpStateRef = useRef(createMcpState());\n const responseStateRef = useRef(createResponseState());\n const functionStateRef = useRef(createFunctionState());\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n responseStateRef.current = createResponseState();\n functionStateRef.current = createFunctionState();\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const safeJsonParse = useCallback((value) => {\n if (typeof value !== 'string') return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }, []);\n\n const isAllowedOpenUrl = useCallback((url) => {\n if (typeof url !== 'string') return false;\n return url.trim().startsWith('https://api.mirai');\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const clearPendingMcp = useCallback(() => {\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n }, []);\n\n const clearPendingFollowup = useCallback(() => {\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n functionStateRef.current.pendingFollowupResponse = null;\n }, []);\n\n const sendResponseCreate = useCallback((reason, responseOverrides) => {\n if (responseStateRef.current.activeId || responseStateRef.current.audioResponseIds.size > 0) {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n functionStateRef.current.pendingFollowupResponse = responseOverrides || null;\n return false;\n }\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n const responsePayload = responseOverrides\n ? { type: 'response.create', response: responseOverrides }\n : { type: 'response.create' };\n channel.send(JSON.stringify(responsePayload));\n return true;\n }\n return false;\n }, []);\n\n const sendPendingFollowup = useCallback(() => {\n if (\n responseStateRef.current.activeId ||\n responseStateRef.current.audioResponseIds.size > 0 ||\n !functionStateRef.current.pendingFollowup\n ) {\n return false;\n }\n\n const reason = functionStateRef.current.pendingFollowupReason;\n const responseOverrides = functionStateRef.current.pendingFollowupResponse;\n clearPendingFollowup();\n return sendResponseCreate(reason || 'followup', responseOverrides);\n }, [clearPendingFollowup, sendResponseCreate]);\n\n const requestFollowupResponse = useCallback(\n (reason, outputCallId, responseOverrides) => {\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return false;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return false;\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n return sendResponseCreate(reason || 'followup', responseOverrides);\n },\n [sendResponseCreate],\n );\n\n const resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n !mcpStateRef.current.resumeRequestedAny &&\n !functionStateRef.current.pendingFollowup\n ) {\n clearPendingMcp();\n }\n },\n [clearPendingMcp],\n );\n\n const trackMcpStart = useCallback((callId) => {\n mcpStateRef.current.pending = true;\n if (callId) {\n if (mcpStateRef.current.handledCallIds.has(callId)) return;\n if (mcpStateRef.current.pendingCallIds.has(callId)) return;\n mcpStateRef.current.pendingCallIds.add(callId);\n mcpStateRef.current.pendingCount += 1;\n return;\n }\n mcpStateRef.current.pendingCount += 1;\n }, []);\n\n const getFunctionCallKey = useCallback((callId, responseId, name) => {\n if (callId) return callId;\n if (responseId && name) return `${responseId}:${name}`;\n return null;\n }, []);\n\n const upsertFunctionCall = useCallback(({ key, name, responseId, callId, args }) => {\n if (!key) return;\n const existing = functionStateRef.current.pendingCalls.get(key) || { key };\n functionStateRef.current.pendingCalls.set(key, {\n ...existing,\n name: name ?? existing.name,\n responseId: responseId ?? existing.responseId,\n callId: callId ?? existing.callId,\n args: args ?? existing.args,\n });\n }, []);\n\n const handleMcpCompletion = useCallback(\n (outputCallId, requestFollowup = true) => {\n mcpStateRef.current.pending = true;\n if (outputCallId) {\n if (mcpStateRef.current.handledCallIds.has(outputCallId)) return;\n mcpStateRef.current.handledCallIds.add(outputCallId);\n }\n if (mcpStateRef.current.pendingCount > 0) mcpStateRef.current.pendingCount -= 1;\n if (requestFollowup && mcpStateRef.current.pendingCount === 0) {\n requestFollowupResponse('mcp_completed', outputCallId);\n }\n resumeMcpIfNeeded(outputCallId);\n },\n [requestFollowupResponse, resumeMcpIfNeeded],\n );\n\n const scheduleResumeRetry = useCallback(\n (outputCallId) => {\n if (!mcpStateRef.current.pending) return;\n if (mcpStateRef.current.retry.timeoutId) return;\n if (mcpStateRef.current.retry.count >= 2) {\n clearPendingMcp();\n return;\n }\n const attempt = mcpStateRef.current.retry.count + 1;\n const delay = attempt * 600;\n mcpStateRef.current.retry.count = attempt;\n mcpStateRef.current.retry.timeoutId = setTimeout(() => {\n mcpStateRef.current.retry.timeoutId = null;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.delete(outputCallId);\n mcpStateRef.current.resumeRequestedAny = false;\n requestFollowupResponse('mcp_completed', outputCallId);\n }, delay);\n },\n [clearPendingMcp, requestFollowupResponse],\n );\n\n const sendFunctionCallOutput = useCallback((callId, output) => {\n const channel = dataChannelRef.current;\n if (!callId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output || {}),\n },\n }),\n );\n return true;\n }, []);\n\n const sendItemRetrieve = useCallback((itemId) => {\n const channel = dataChannelRef.current;\n if (!itemId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.retrieve',\n item_id: itemId,\n }),\n );\n return true;\n }, []);\n\n const sendMcpApproval = useCallback((approvalRequestId, approve = true) => {\n const channel = dataChannelRef.current;\n if (!approvalRequestId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n previous_item_id: approvalRequestId,\n item: {\n type: 'mcp_approval_response',\n approval_request_id: approvalRequestId,\n approve,\n },\n }),\n );\n return true;\n }, []);\n\n const buildMcpFailureInstructions = useCallback((localeHint) => {\n const normalizedLocale = localeHint || 'en-US';\n return `Respond in the language that matches the locale code \"${normalizedLocale}\". The requested information could not be retrieved because a data source failed. Apologize briefly and ask if the user wants to try again or ask something else.`;\n }, []);\n\n const handleMcpFailure = useCallback(\n (callId, localeHint) => {\n const failureKey = callId || 'unknown';\n if (mcpStateRef.current.failedCallIds.has(failureKey)) return;\n mcpStateRef.current.failedCallIds.add(failureKey);\n const instructions = buildMcpFailureInstructions(localeHint);\n requestFollowupResponse('mcp_failed', callId, { instructions });\n },\n [buildMcpFailureInstructions, requestFollowupResponse],\n );\n\n const handleOpenUrlCalls = useCallback(\n ({ responseId, outputItems }) => {\n const responseOpenUrlItems = Array.isArray(outputItems)\n ? outputItems.filter((item) => item?.type === 'function_call' && item?.name === 'open_url')\n : [];\n responseOpenUrlItems.forEach((item) => {\n const key = getFunctionCallKey(item.call_id || item.id || null, responseId, item.name);\n upsertFunctionCall({\n key,\n name: item.name,\n responseId,\n callId: item.call_id || item.id || null,\n args: item.arguments || null,\n });\n });\n\n const pendingCalls = [...functionStateRef.current.pendingCalls.values()].filter((call) => {\n if (!call?.name || call.name !== 'open_url') return false;\n if (!responseId) return true;\n return !call.responseId || call.responseId === responseId;\n });\n\n for (const call of pendingCalls) {\n const callKey = call.key || call.callId || call.args || null;\n if (callKey && functionStateRef.current.handledOpenUrlCalls.has(callKey)) continue;\n const args = safeJsonParse(call.args);\n const url = args?.url;\n if (!isAllowedOpenUrl(url)) {\n if (call.callId) {\n sendFunctionCallOutput(call.callId, {\n error: 'blocked_url',\n allowed_prefix: 'https://api.mirai',\n });\n requestFollowupResponse('open_url_blocked', call.callId);\n }\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n continue;\n }\n if (callKey) functionStateRef.current.handledOpenUrlCalls.add(callKey);\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n cleanupRealtimeSession(true);\n window.location.assign(url.trim());\n return true;\n }\n return false;\n },\n [\n cleanupRealtimeSession,\n getFunctionCallKey,\n isAllowedOpenUrl,\n requestFollowupResponse,\n safeJsonParse,\n sendFunctionCallOutput,\n upsertFunctionCall,\n ],\n );\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupRealtimeSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupRealtimeSession(true);\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }&locale=${locale ?? ''}¤cy=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n peerConnection.addEventListener('connectionstatechange', () => {\n const { connectionState } = peerConnection;\n if (connectionState === 'failed' || connectionState === 'disconnected' || connectionState === 'closed') {\n finalizeSession();\n }\n });\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n dataChannel.addEventListener('close', () => {\n finalizeSession();\n });\n dataChannel.addEventListener('error', (event) => {\n finalizeSession(event);\n });\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n const { response } = payload;\n const itemId = payload.item?.id || payload.item_id || null;\n const callId = payload.item?.call_id || payload.call_id || itemId;\n const responseId = payload.response_id || response?.id || null;\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n if (responseId) responseStateRef.current.audioResponseIds.add(responseId);\n if (responseId) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n if (mcpStateRef.current.resumeRequestedAny) clearPendingFollowup();\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped' || payload.type === 'output_audio_buffer.cleared') {\n if (responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n } else {\n responseStateRef.current.audioResponseIds.clear();\n }\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n sendPendingFollowup();\n }\n\n if (\n payload.type === 'response.output_item.added' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (responseId) mcpStateRef.current.responseIds.add(responseId);\n trackMcpStart(callId);\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'function_call') {\n const name = payload.item?.name || payload.name || null;\n const key = getFunctionCallKey(callId, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId, args: payload.item?.arguments || null });\n }\n\n if (payload.type === 'response.function_call_arguments.done') {\n const name = payload.name || null;\n const key = getFunctionCallKey(payload.call_id || null, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId: payload.call_id || null, args: payload.arguments });\n }\n\n if (payload.type === 'response.mcp_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'response.mcp_tool_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'mcp_list_tools.in_progress' || payload.type === 'response.mcp_list_tools.in_progress') {\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (\n payload.type === 'response.output_item.done' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (payload.item?.error || payload.item?.status === 'failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (\n payload.type === 'response.mcp_call.completed' ||\n payload.type === 'response.mcp_call.failed' ||\n payload.type === 'response.mcp_tool_call.completed' ||\n payload.type === 'response.mcp_tool_call.failed'\n ) {\n if (payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (payload.type === 'conversation.item.added' || payload.type === 'conversation.item.retrieved') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n trackMcpStart(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'conversation.item.done') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n if (payload.item?.status === 'failed' || payload.item?.error) {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'response.done') {\n if (responseId) mcpStateRef.current.responsesDone.add(responseId);\n const outputItems = Array.isArray(response?.output) ? response.output : [];\n const hasMessage = outputItems.some((item) => item?.type === 'message');\n const status = response?.status;\n const reason = response?.status_details?.reason || response?.status_details?.error?.code || null;\n if (status !== 'completed' && responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n }\n if (status === 'completed') {\n if (\n hasMessage &&\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n mcpStateRef.current.responseIds.size === 0\n ) {\n clearPendingMcp();\n }\n } else if (mcpStateRef.current.pending) {\n if (status === 'failed') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n } else if (status === 'cancelled' && reason !== 'turn_detected') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n }\n }\n resumeMcpIfNeeded(callId);\n handleOpenUrlCalls({ responseId, outputItems });\n }\n\n if (payload.type === 'response.created') {\n if (responseId) responseStateRef.current.activeId = responseId;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.done' && responseId && responseStateRef.current.activeId === responseId) {\n responseStateRef.current.activeId = null;\n sendPendingFollowup();\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n const channelId = hotelId || chainId;\n if (channelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingFollowup,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleMcpFailure,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendPendingFollowup,\n sendItemRetrieve,\n sendMcpApproval,\n trackMcpStart,\n upsertFunctionCall,\n getFunctionCallKey,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_helpers3","_slicedToArray","r","e","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","failedCallIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","audioResponseIds","createFunctionState","pendingCalls","Map","pendingFollowup","pendingFollowupReason","pendingFollowupResponse","handledOpenUrlCalls","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","mcpStateRef","responseStateRef","functionStateRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","sender","track","stop","localStream","getTracks","clearTimeout","srcObject","disconnect","audioContext","safeJsonParse","parse","_unused","enableMicrophone","enabled","clearPendingMcp","clearPendingFollowup","sendResponseCreate","reason","responseOverrides","size","channel","responsePayload","response","sendPendingFollowup","requestFollowupResponse","outputCallId","has","add","resumeMcpIfNeeded","delete","trackMcpStart","callId","getFunctionCallKey","responseId","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","requestFollowup","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","buildMcpFailureInstructions","localeHint","normalizedLocale","handleMcpFailure","failureKey","instructions","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","id","values","callKey","allowedUrl","getAllowedOpenUrl","url","error","allowed_prefix","getAllowedOpenUrlPrefix","window","location","assign","startSession","_ref3","assistant_name","chainId","currency","hotelId","isChain","locale","onTranscript","setIsConnecting","setReady","fingerprint","getClientFingerprint","finalizeSession","errorMessage","message","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","addEventListener","connectionState","document","createElement","autoplay","ontrack","_ref4","streams","_streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","_mediaStream$getAudio","getAudioTracks","_mediaStream$getAudio2","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","event","AURA_START","introductionMessage","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","clear","_payload$item7","_payload$item8","_payload$item1","_payload$item10","status","_payload$item11","_payload$item12","_payload$item13","_payload$item14","approvalId","_payload$item15","_payload$item16","_payload$item19","_payload$item17","_payload$item18","_payload$item20","_response$status_deta","_response$status_deta2","hasMessage","some","status_details","code","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","channelId","author","body","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\nimport { getAllowedOpenUrl, getAllowedOpenUrlPrefix } from '../helpers';\n\nconst createMcpState = () => ({\n pending: false,\n pendingCallIds: new Set(),\n pendingCount: 0,\n handledCallIds: new Set(),\n handledApprovalIds: new Set(),\n failedCallIds: new Set(),\n responseIds: new Set(),\n responsesDone: new Set(),\n responsesWithMessage: new Set(),\n resumeRequestedCallIds: new Set(),\n resumeRequestedAny: false,\n retry: { count: 0, timeoutId: null },\n});\n\nconst createResponseState = () => ({\n activeId: null,\n audioResponseIds: new Set(),\n});\n\nconst createFunctionState = () => ({\n pendingCalls: new Map(),\n pendingFollowup: false,\n pendingFollowupReason: null,\n pendingFollowupResponse: null,\n handledOpenUrlCalls: new Set(),\n});\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const mcpStateRef = useRef(createMcpState());\n const responseStateRef = useRef(createResponseState());\n const functionStateRef = useRef(createFunctionState());\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n responseStateRef.current = createResponseState();\n functionStateRef.current = createFunctionState();\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const safeJsonParse = useCallback((value) => {\n if (typeof value !== 'string') return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const clearPendingMcp = useCallback(() => {\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n }, []);\n\n const clearPendingFollowup = useCallback(() => {\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n functionStateRef.current.pendingFollowupResponse = null;\n }, []);\n\n const sendResponseCreate = useCallback((reason, responseOverrides) => {\n if (responseStateRef.current.activeId || responseStateRef.current.audioResponseIds.size > 0) {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n functionStateRef.current.pendingFollowupResponse = responseOverrides || null;\n return false;\n }\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n const responsePayload = responseOverrides\n ? { type: 'response.create', response: responseOverrides }\n : { type: 'response.create' };\n channel.send(JSON.stringify(responsePayload));\n return true;\n }\n return false;\n }, []);\n\n const sendPendingFollowup = useCallback(() => {\n if (\n responseStateRef.current.activeId ||\n responseStateRef.current.audioResponseIds.size > 0 ||\n !functionStateRef.current.pendingFollowup\n ) {\n return false;\n }\n\n const reason = functionStateRef.current.pendingFollowupReason;\n const responseOverrides = functionStateRef.current.pendingFollowupResponse;\n clearPendingFollowup();\n return sendResponseCreate(reason || 'followup', responseOverrides);\n }, [clearPendingFollowup, sendResponseCreate]);\n\n const requestFollowupResponse = useCallback(\n (reason, outputCallId, responseOverrides) => {\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return false;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return false;\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n return sendResponseCreate(reason || 'followup', responseOverrides);\n },\n [sendResponseCreate],\n );\n\n const resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n !mcpStateRef.current.resumeRequestedAny &&\n !functionStateRef.current.pendingFollowup\n ) {\n clearPendingMcp();\n }\n },\n [clearPendingMcp],\n );\n\n const trackMcpStart = useCallback((callId) => {\n mcpStateRef.current.pending = true;\n if (callId) {\n if (mcpStateRef.current.handledCallIds.has(callId)) return;\n if (mcpStateRef.current.pendingCallIds.has(callId)) return;\n mcpStateRef.current.pendingCallIds.add(callId);\n mcpStateRef.current.pendingCount += 1;\n return;\n }\n mcpStateRef.current.pendingCount += 1;\n }, []);\n\n const getFunctionCallKey = useCallback((callId, responseId, name) => {\n if (callId) return callId;\n if (responseId && name) return `${responseId}:${name}`;\n return null;\n }, []);\n\n const upsertFunctionCall = useCallback(({ key, name, responseId, callId, args }) => {\n if (!key) return;\n const existing = functionStateRef.current.pendingCalls.get(key) || { key };\n functionStateRef.current.pendingCalls.set(key, {\n ...existing,\n name: name ?? existing.name,\n responseId: responseId ?? existing.responseId,\n callId: callId ?? existing.callId,\n args: args ?? existing.args,\n });\n }, []);\n\n const handleMcpCompletion = useCallback(\n (outputCallId, requestFollowup = true) => {\n mcpStateRef.current.pending = true;\n if (outputCallId) {\n if (mcpStateRef.current.handledCallIds.has(outputCallId)) return;\n mcpStateRef.current.handledCallIds.add(outputCallId);\n }\n if (mcpStateRef.current.pendingCount > 0) mcpStateRef.current.pendingCount -= 1;\n if (requestFollowup && mcpStateRef.current.pendingCount === 0) {\n requestFollowupResponse('mcp_completed', outputCallId);\n }\n resumeMcpIfNeeded(outputCallId);\n },\n [requestFollowupResponse, resumeMcpIfNeeded],\n );\n\n const scheduleResumeRetry = useCallback(\n (outputCallId) => {\n if (!mcpStateRef.current.pending) return;\n if (mcpStateRef.current.retry.timeoutId) return;\n if (mcpStateRef.current.retry.count >= 2) {\n clearPendingMcp();\n return;\n }\n const attempt = mcpStateRef.current.retry.count + 1;\n const delay = attempt * 600;\n mcpStateRef.current.retry.count = attempt;\n mcpStateRef.current.retry.timeoutId = setTimeout(() => {\n mcpStateRef.current.retry.timeoutId = null;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.delete(outputCallId);\n mcpStateRef.current.resumeRequestedAny = false;\n requestFollowupResponse('mcp_completed', outputCallId);\n }, delay);\n },\n [clearPendingMcp, requestFollowupResponse],\n );\n\n const sendFunctionCallOutput = useCallback((callId, output) => {\n const channel = dataChannelRef.current;\n if (!callId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output || {}),\n },\n }),\n );\n return true;\n }, []);\n\n const sendItemRetrieve = useCallback((itemId) => {\n const channel = dataChannelRef.current;\n if (!itemId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.retrieve',\n item_id: itemId,\n }),\n );\n return true;\n }, []);\n\n const sendMcpApproval = useCallback((approvalRequestId, approve = true) => {\n const channel = dataChannelRef.current;\n if (!approvalRequestId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n previous_item_id: approvalRequestId,\n item: {\n type: 'mcp_approval_response',\n approval_request_id: approvalRequestId,\n approve,\n },\n }),\n );\n return true;\n }, []);\n\n const buildMcpFailureInstructions = useCallback((localeHint) => {\n const normalizedLocale = localeHint || 'en-US';\n return `Respond in the language that matches the locale code \"${normalizedLocale}\". The requested information could not be retrieved because a data source failed. Apologize briefly and ask if the user wants to try again or ask something else.`;\n }, []);\n\n const handleMcpFailure = useCallback(\n (callId, localeHint) => {\n const failureKey = callId || 'unknown';\n if (mcpStateRef.current.failedCallIds.has(failureKey)) return;\n mcpStateRef.current.failedCallIds.add(failureKey);\n const instructions = buildMcpFailureInstructions(localeHint);\n requestFollowupResponse('mcp_failed', callId, { instructions });\n },\n [buildMcpFailureInstructions, requestFollowupResponse],\n );\n\n const handleOpenUrlCalls = useCallback(\n ({ responseId, outputItems }) => {\n const responseOpenUrlItems = Array.isArray(outputItems)\n ? outputItems.filter((item) => item?.type === 'function_call' && item?.name === 'open_url')\n : [];\n responseOpenUrlItems.forEach((item) => {\n const key = getFunctionCallKey(item.call_id || item.id || null, responseId, item.name);\n upsertFunctionCall({\n key,\n name: item.name,\n responseId,\n callId: item.call_id || item.id || null,\n args: item.arguments || null,\n });\n });\n\n const pendingCalls = [...functionStateRef.current.pendingCalls.values()].filter((call) => {\n if (!call?.name || call.name !== 'open_url') return false;\n if (!responseId) return true;\n return !call.responseId || call.responseId === responseId;\n });\n\n for (const call of pendingCalls) {\n const callKey = call.key || call.callId || call.args || null;\n if (callKey && functionStateRef.current.handledOpenUrlCalls.has(callKey)) continue;\n const args = safeJsonParse(call.args);\n const allowedUrl = getAllowedOpenUrl(args?.url);\n if (!allowedUrl) {\n if (call.callId) {\n sendFunctionCallOutput(call.callId, {\n error: 'blocked_url',\n allowed_prefix: getAllowedOpenUrlPrefix(),\n });\n requestFollowupResponse('open_url_blocked', call.callId);\n }\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n continue;\n }\n if (callKey) functionStateRef.current.handledOpenUrlCalls.add(callKey);\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n cleanupRealtimeSession(true);\n window.location.assign(allowedUrl);\n return true;\n }\n return false;\n },\n [\n cleanupRealtimeSession,\n getFunctionCallKey,\n requestFollowupResponse,\n safeJsonParse,\n sendFunctionCallOutput,\n upsertFunctionCall,\n ],\n );\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupRealtimeSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupRealtimeSession(true);\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }&locale=${locale ?? ''}¤cy=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n peerConnection.addEventListener('connectionstatechange', () => {\n const { connectionState } = peerConnection;\n if (connectionState === 'failed' || connectionState === 'disconnected' || connectionState === 'closed') {\n finalizeSession();\n }\n });\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n dataChannel.addEventListener('close', () => {\n finalizeSession();\n });\n dataChannel.addEventListener('error', (event) => {\n finalizeSession(event);\n });\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n const { response } = payload;\n const itemId = payload.item?.id || payload.item_id || null;\n const callId = payload.item?.call_id || payload.call_id || itemId;\n const responseId = payload.response_id || response?.id || null;\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n if (responseId) responseStateRef.current.audioResponseIds.add(responseId);\n if (responseId) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n if (mcpStateRef.current.resumeRequestedAny) clearPendingFollowup();\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped' || payload.type === 'output_audio_buffer.cleared') {\n if (responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n } else {\n responseStateRef.current.audioResponseIds.clear();\n }\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n sendPendingFollowup();\n }\n\n if (\n payload.type === 'response.output_item.added' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (responseId) mcpStateRef.current.responseIds.add(responseId);\n trackMcpStart(callId);\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'function_call') {\n const name = payload.item?.name || payload.name || null;\n const key = getFunctionCallKey(callId, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId, args: payload.item?.arguments || null });\n }\n\n if (payload.type === 'response.function_call_arguments.done') {\n const name = payload.name || null;\n const key = getFunctionCallKey(payload.call_id || null, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId: payload.call_id || null, args: payload.arguments });\n }\n\n if (payload.type === 'response.mcp_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'response.mcp_tool_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'mcp_list_tools.in_progress' || payload.type === 'response.mcp_list_tools.in_progress') {\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (\n payload.type === 'response.output_item.done' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (payload.item?.error || payload.item?.status === 'failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (\n payload.type === 'response.mcp_call.completed' ||\n payload.type === 'response.mcp_call.failed' ||\n payload.type === 'response.mcp_tool_call.completed' ||\n payload.type === 'response.mcp_tool_call.failed'\n ) {\n if (payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (payload.type === 'conversation.item.added' || payload.type === 'conversation.item.retrieved') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n trackMcpStart(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'conversation.item.done') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n if (payload.item?.status === 'failed' || payload.item?.error) {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'response.done') {\n if (responseId) mcpStateRef.current.responsesDone.add(responseId);\n const outputItems = Array.isArray(response?.output) ? response.output : [];\n const hasMessage = outputItems.some((item) => item?.type === 'message');\n const status = response?.status;\n const reason = response?.status_details?.reason || response?.status_details?.error?.code || null;\n if (status !== 'completed' && responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n }\n if (status === 'completed') {\n if (\n hasMessage &&\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n mcpStateRef.current.responseIds.size === 0\n ) {\n clearPendingMcp();\n }\n } else if (mcpStateRef.current.pending) {\n if (status === 'failed') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n } else if (status === 'cancelled' && reason !== 'turn_detected') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n }\n }\n resumeMcpIfNeeded(callId);\n handleOpenUrlCalls({ responseId, outputItems });\n }\n\n if (payload.type === 'response.created') {\n if (responseId) responseStateRef.current.activeId = responseId;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.done' && responseId && responseStateRef.current.activeId === responseId) {\n responseStateRef.current.activeId = null;\n sendPendingFollowup();\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n const channelId = hotelId || chainId;\n if (channelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingFollowup,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleMcpFailure,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendPendingFollowup,\n sendItemRetrieve,\n sendMcpApproval,\n trackMcpStart,\n upsertFunctionCall,\n getFunctionCallKey,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,11 +8,11 @@ var _dataSources = require("@mirai/data-sources");
|
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _helpers = require("../../../../helpers");
|
|
10
10
|
var _helpers2 = require("../../../helpers");
|
|
11
|
+
var _helpers3 = require("../helpers");
|
|
11
12
|
const XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';
|
|
12
13
|
const DEFAULT_MODEL = 'grok-voice-latest';
|
|
13
14
|
const SAMPLE_RATE = 24000;
|
|
14
15
|
const PROCESSOR_BUFFER_SIZE = 2048;
|
|
15
|
-
const ALLOWED_OPEN_URL_PREFIX = 'https://api.mirai';
|
|
16
16
|
const float32ToInt16 = float32 => {
|
|
17
17
|
const int16 = new Int16Array(float32.length);
|
|
18
18
|
for (let i = 0; i < float32.length; i += 1) {
|
|
@@ -206,9 +206,8 @@ const useXaiRealtimeSession = () => {
|
|
|
206
206
|
} catch (_unused3) {
|
|
207
207
|
parsed = null;
|
|
208
208
|
}
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
if (!allowed) {
|
|
209
|
+
const allowedUrl = (0, _helpers3.getAllowedOpenUrl)((_parsed = parsed) === null || _parsed === void 0 ? void 0 : _parsed.url);
|
|
210
|
+
if (!allowedUrl) {
|
|
212
211
|
sendJson({
|
|
213
212
|
type: 'conversation.item.create',
|
|
214
213
|
item: {
|
|
@@ -216,7 +215,7 @@ const useXaiRealtimeSession = () => {
|
|
|
216
215
|
call_id: callId,
|
|
217
216
|
output: JSON.stringify({
|
|
218
217
|
error: 'blocked_url',
|
|
219
|
-
allowed_prefix:
|
|
218
|
+
allowed_prefix: (0, _helpers3.getAllowedOpenUrlPrefix)()
|
|
220
219
|
})
|
|
221
220
|
}
|
|
222
221
|
});
|
|
@@ -226,7 +225,7 @@ const useXaiRealtimeSession = () => {
|
|
|
226
225
|
return;
|
|
227
226
|
}
|
|
228
227
|
cleanupSession();
|
|
229
|
-
window.location.assign(
|
|
228
|
+
window.location.assign(allowedUrl);
|
|
230
229
|
}, [cleanupSession, sendJson]);
|
|
231
230
|
const persistTranscriptPair = (0, _react.useCallback)(_ref2 => {
|
|
232
231
|
let fingerprint = _ref2.fingerprint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useXaiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","XAI_REALTIME_URL","DEFAULT_MODEL","SAMPLE_RATE","PROCESSOR_BUFFER_SIZE","ALLOWED_OPEN_URL_PREFIX","float32ToInt16","float32","int16","Int16Array","length","i","sample","Math","max","min","int16ToFloat32","Float32Array","base64FromInt16","bytes","Uint8Array","buffer","byteOffset","byteLength","binary","chunkSize","String","fromCharCode","apply","subarray","btoa","int16FromBase64","b64","atob","charCodeAt","floor","extractAudioDelta","payload","_payload$delta","delta","audio","useXaiRealtimeSession","wsRef","useRef","audioContextRef","inputSourceRef","scriptProcessorRef","inputAnalyserRef","outputAnalyserRef","inputMuteGainRef","localStreamRef","microphoneEnabledRef","playbackTimeRef","activePlaybackSourcesRef","Set","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","pendingSessionConfigRef","sessionAppliedRef","introSentRef","pendingUserTranscriptRef","handledOpenUrlCallsRef","cleanupSession","useCallback","ws","current","readyState","WebSocket","OPEN","CONNECTING","close","onaudioprocess","disconnect","forEach","source","stop","_unused","getTracks","track","stopPendingPlayback","_unused2","currentTime","scheduleAudioPlayback","audioBase64","context","analyser","createBuffer","copyToChannel","createBufferSource","connect","startAt","start","duration","add","onended","delete","sendJson","send","JSON","stringify","sendIntro","_ref","assistantName","locale","localeHint","text","concat","type","item","role","content","handleFunctionCall","_parsed","name","callId","call_id","has","parsed","parse","arguments","_unused3","url","allowed","trim","startsWith","output","error","allowed_prefix","window","location","assign","persistTranscriptPair","_ref2","fingerprint","hotelId","onTranscript","transcript","input","activeLocale","author","body","Event","publish","EVENT","METRICS","id","agent","startSession","_ref3","assistant_name","chainId","currency","isChain","setIsConnecting","setReady","getClientFingerprint","finalizeSession","errorMessage","message","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralToken","value","sessionConfig","session","model","Error","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","audioContext","sampleRate","state","resume","mediaStream","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","channelCount","inputSource","createMediaStreamSource","createAnalyser","fftSize","destination","frequencyBinCount","getByteFrequencyData","processor","createScriptProcessor","muteGain","createGain","gain","event","channelData","inputBuffer","getChannelData","encodeURIComponent","addEventListener","AURA_START","data","_unused4","_payload$transcript","_ref4","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\n\nconst XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL = 'grok-voice-latest';\nconst SAMPLE_RATE = 24000;\nconst PROCESSOR_BUFFER_SIZE = 2048;\nconst ALLOWED_OPEN_URL_PREFIX = 'https://api.mirai';\n\nconst float32ToInt16 = (float32) => {\n const int16 = new Int16Array(float32.length);\n for (let i = 0; i < float32.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, float32[i]));\n int16[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n }\n return int16;\n};\n\nconst int16ToFloat32 = (int16) => {\n const float32 = new Float32Array(int16.length);\n for (let i = 0; i < int16.length; i += 1) {\n float32[i] = int16[i] / 0x8000;\n }\n return float32;\n};\n\nconst base64FromInt16 = (int16) => {\n const bytes = new Uint8Array(int16.buffer, int16.byteOffset, int16.byteLength);\n let binary = '';\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n};\n\nconst int16FromBase64 = (b64) => {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n return new Int16Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 2));\n};\n\nconst extractAudioDelta = (payload) => {\n // xAI docs show response.output_audio.delta with delta: { type: 'audio_delta', audio: 'base64' }.\n // Stay defensive in case the server returns a plain string in delta or a top-level audio field.\n if (typeof payload?.delta === 'string') return payload.delta;\n if (typeof payload?.delta?.audio === 'string') return payload.delta.audio;\n if (typeof payload?.audio === 'string') return payload.audio;\n return null;\n};\n\nconst useXaiRealtimeSession = () => {\n const wsRef = useRef(null);\n const audioContextRef = useRef(null);\n const inputSourceRef = useRef(null);\n const scriptProcessorRef = useRef(null);\n const inputAnalyserRef = useRef(null);\n const outputAnalyserRef = useRef(null);\n const inputMuteGainRef = useRef(null);\n const localStreamRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const playbackTimeRef = useRef(0);\n const activePlaybackSourcesRef = useRef(new Set());\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n const pendingSessionConfigRef = useRef(null);\n const sessionAppliedRef = useRef(false);\n const introSentRef = useRef(false);\n const pendingUserTranscriptRef = useRef('');\n const handledOpenUrlCallsRef = useRef(new Set());\n\n const cleanupSession = useCallback(() => {\n const ws = wsRef.current;\n if (ws) {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) ws.close();\n wsRef.current = null;\n }\n\n if (scriptProcessorRef.current) {\n scriptProcessorRef.current.onaudioprocess = null;\n scriptProcessorRef.current.disconnect();\n scriptProcessorRef.current = null;\n }\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n if (inputMuteGainRef.current) {\n inputMuteGainRef.current.disconnect();\n inputMuteGainRef.current = null;\n }\n if (inputAnalyserRef.current) {\n inputAnalyserRef.current.disconnect();\n inputAnalyserRef.current = null;\n }\n if (outputAnalyserRef.current) {\n outputAnalyserRef.current.disconnect();\n outputAnalyserRef.current = null;\n }\n\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n\n if (localStreamRef.current) {\n localStreamRef.current.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n microphoneEnabledRef.current = false;\n playbackTimeRef.current = 0;\n pendingSessionConfigRef.current = null;\n sessionAppliedRef.current = false;\n introSentRef.current = false;\n pendingUserTranscriptRef.current = '';\n handledOpenUrlCallsRef.current = new Set();\n }, []);\n\n const stopPendingPlayback = useCallback(() => {\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n if (audioContextRef.current) playbackTimeRef.current = audioContextRef.current.currentTime;\n }, []);\n\n const scheduleAudioPlayback = useCallback((audioBase64) => {\n const context = audioContextRef.current;\n const analyser = outputAnalyserRef.current;\n if (!context || !analyser) return;\n const int16 = int16FromBase64(audioBase64);\n if (!int16.length) return;\n const float32 = int16ToFloat32(int16);\n const buffer = context.createBuffer(1, float32.length, SAMPLE_RATE);\n buffer.copyToChannel(float32, 0);\n const source = context.createBufferSource();\n source.buffer = buffer;\n source.connect(analyser);\n const startAt = Math.max(context.currentTime, playbackTimeRef.current);\n source.start(startAt);\n playbackTimeRef.current = startAt + buffer.duration;\n activePlaybackSourcesRef.current.add(source);\n source.onended = () => {\n activePlaybackSourcesRef.current.delete(source);\n };\n }, []);\n\n const sendJson = useCallback((payload) => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return false;\n ws.send(JSON.stringify(payload));\n return true;\n }, []);\n\n const sendIntro = useCallback(\n ({ assistantName, locale }) => {\n if (introSentRef.current) return;\n const localeHint = locale || 'en-US';\n const text = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistantName}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n sendJson({ type: 'response.create' });\n introSentRef.current = true;\n },\n [sendJson],\n );\n\n const handleFunctionCall = useCallback(\n (payload) => {\n const { name } = payload;\n const callId = payload.call_id;\n if (name !== 'open_url' || !callId) return;\n if (handledOpenUrlCallsRef.current.has(callId)) return;\n handledOpenUrlCallsRef.current.add(callId);\n\n let parsed = null;\n try {\n parsed = JSON.parse(payload.arguments || '{}');\n } catch {\n parsed = null;\n }\n const url = parsed?.url;\n const allowed = typeof url === 'string' && url.trim().startsWith(ALLOWED_OPEN_URL_PREFIX);\n\n if (!allowed) {\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify({ error: 'blocked_url', allowed_prefix: ALLOWED_OPEN_URL_PREFIX }),\n },\n });\n sendJson({ type: 'response.create' });\n return;\n }\n\n cleanupSession();\n window.location.assign(url.trim());\n },\n [cleanupSession, sendJson],\n );\n\n const persistTranscriptPair = useCallback(({ fingerprint, hotelId, locale, onTranscript, transcript }) => {\n if (!transcript || !pendingUserTranscriptRef.current) return;\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n const activeLocale = locale || 'en-US';\n\n if (hotelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }, []);\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupSession();\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?voiceModel=xai&fingerprint=${fingerprint}&hotelId=${\n isChain ? '' : hotelId ?? ''\n }&chainId=${isChain ? chainId ?? '' : ''}&locale=${locale ?? ''}¤cy=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralToken = sessionResponse?.value;\n const sessionConfig = sessionResponse?.session;\n const model = sessionResponse?.model || DEFAULT_MODEL;\n if (!ephemeralToken || !sessionConfig) throw new Error('Invalid xAI session response');\n pendingSessionConfigRef.current = sessionConfig;\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor({ sampleRate: SAMPLE_RATE });\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: SAMPLE_RATE,\n },\n });\n localStreamRef.current = mediaStream;\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n\n const inputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n inputAnalyserRef.current = inputAnalyser;\n inputSource.connect(inputAnalyser);\n\n const outputAnalyser = audioContext.createAnalyser();\n outputAnalyser.fftSize = 1024;\n outputAnalyserRef.current = outputAnalyser;\n outputAnalyser.connect(audioContext.destination);\n\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!inputAnalyserRef.current || !inputFrequencyDataRef.current) return null;\n inputAnalyserRef.current.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!outputAnalyserRef.current || !outputFrequencyDataRef.current) return null;\n outputAnalyserRef.current.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n // ScriptProcessor is deprecated but still the simplest portable way to obtain\n // raw PCM frames synchronously. It must be connected to the destination to be scheduled;\n // we route it through a muted GainNode so the mic input is never audible locally.\n const processor = audioContext.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1);\n scriptProcessorRef.current = processor;\n const muteGain = audioContext.createGain();\n muteGain.gain.value = 0;\n inputMuteGainRef.current = muteGain;\n inputSource.connect(processor);\n processor.connect(muteGain);\n muteGain.connect(audioContext.destination);\n\n processor.onaudioprocess = (event) => {\n if (!microphoneEnabledRef.current) return;\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n const channelData = event.inputBuffer.getChannelData(0);\n const int16 = float32ToInt16(channelData);\n ws.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64FromInt16(int16),\n }),\n );\n };\n\n const ws = new WebSocket(`${XAI_REALTIME_URL}?model=${encodeURIComponent(model)}`, [\n `xai-client-secret.${ephemeralToken}`,\n ]);\n wsRef.current = ws;\n\n ws.addEventListener('open', () => {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n sendJson({ type: 'session.update', session: pendingSessionConfigRef.current });\n });\n\n ws.addEventListener('error', () => finalizeSession('xAI WebSocket error'));\n ws.addEventListener('close', () => finalizeSession());\n\n ws.addEventListener('message', async (event) => {\n let payload;\n try {\n payload = JSON.parse(event.data);\n } catch {\n return;\n }\n\n switch (payload.type) {\n case 'session.created':\n case 'session.updated': {\n if (sessionAppliedRef.current) break;\n sessionAppliedRef.current = true;\n setReady(true);\n sendIntro({ assistantName: assistant_name, locale });\n break;\n }\n case 'response.output_audio.delta': {\n const audio = extractAudioDelta(payload);\n if (audio) scheduleAudioPlayback(audio);\n break;\n }\n case 'input_audio_buffer.speech_started': {\n // Barge-in: cut current playback so the user can take over the turn cleanly.\n stopPendingPlayback();\n break;\n }\n case 'response.function_call_arguments.done': {\n handleFunctionCall(payload);\n break;\n }\n case 'response.done': {\n // Open the microphone once the intro response finishes; subsequent turns use server VAD.\n if (!microphoneEnabledRef.current) microphoneEnabledRef.current = true;\n break;\n }\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n break;\n }\n case 'response.output_audio_transcript.done':\n case 'response.text.done': {\n const transcript = (payload.transcript || payload.text)?.trim();\n persistTranscriptPair({ fingerprint, hotelId, locale, onTranscript, transcript });\n break;\n }\n default:\n break;\n }\n });\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupSession,\n handleFunctionCall,\n persistTranscriptPair,\n scheduleAudioPlayback,\n sendIntro,\n sendJson,\n stopPendingPlayback,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupSession();\n }, [cleanupSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useXaiRealtimeSession };\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AAEA,MAAMI,gBAAgB,GAAG,4BAA4B;AACrD,MAAMC,aAAa,GAAG,mBAAmB;AACzC,MAAMC,WAAW,GAAG,KAAK;AACzB,MAAMC,qBAAqB,GAAG,IAAI;AAClC,MAAMC,uBAAuB,GAAG,mBAAmB;AAEnD,MAAMC,cAAc,GAAIC,OAAO,IAAK;EAClC,MAAMC,KAAK,GAAG,IAAIC,UAAU,CAACF,OAAO,CAACG,MAAM,CAAC;EAC5C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,OAAO,CAACG,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IAC1C,MAAMC,MAAM,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC,EAAED,IAAI,CAACE,GAAG,CAAC,CAAC,EAAER,OAAO,CAACI,CAAC,CAAC,CAAC,CAAC;IACpDH,KAAK,CAACG,CAAC,CAAC,GAAGC,MAAM,GAAG,CAAC,GAAGA,MAAM,GAAG,MAAM,GAAGA,MAAM,GAAG,MAAM;EAC3D;EACA,OAAOJ,KAAK;AACd,CAAC;AAED,MAAMQ,cAAc,GAAIR,KAAK,IAAK;EAChC,MAAMD,OAAO,GAAG,IAAIU,YAAY,CAACT,KAAK,CAACE,MAAM,CAAC;EAC9C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,KAAK,CAACE,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAE;IACxCJ,OAAO,CAACI,CAAC,CAAC,GAAGH,KAAK,CAACG,CAAC,CAAC,GAAG,MAAM;EAChC;EACA,OAAOJ,OAAO;AAChB,CAAC;AAED,MAAMW,eAAe,GAAIV,KAAK,IAAK;EACjC,MAAMW,KAAK,GAAG,IAAIC,UAAU,CAACZ,KAAK,CAACa,MAAM,EAAEb,KAAK,CAACc,UAAU,EAAEd,KAAK,CAACe,UAAU,CAAC;EAC9E,IAAIC,MAAM,GAAG,EAAE;EACf,MAAMC,SAAS,GAAG,MAAM;EACxB,KAAK,IAAId,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGQ,KAAK,CAACT,MAAM,EAAEC,CAAC,IAAIc,SAAS,EAAE;IAChDD,MAAM,IAAIE,MAAM,CAACC,YAAY,CAACC,KAAK,CAAC,IAAI,EAAET,KAAK,CAACU,QAAQ,CAAClB,CAAC,EAAEA,CAAC,GAAGc,SAAS,CAAC,CAAC;EAC7E;EACA,OAAOK,IAAI,CAACN,MAAM,CAAC;AACrB,CAAC;AAED,MAAMO,eAAe,GAAIC,GAAG,IAAK;EAC/B,MAAMR,MAAM,GAAGS,IAAI,CAACD,GAAG,CAAC;EACxB,MAAMb,KAAK,GAAG,IAAIC,UAAU,CAACI,MAAM,CAACd,MAAM,CAAC;EAC3C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,MAAM,CAACd,MAAM,EAAEC,CAAC,IAAI,CAAC,EAAEQ,KAAK,CAACR,CAAC,CAAC,GAAGa,MAAM,CAACU,UAAU,CAACvB,CAAC,CAAC;EAC1E,OAAO,IAAIF,UAAU,CAACU,KAAK,CAACE,MAAM,EAAEF,KAAK,CAACG,UAAU,EAAET,IAAI,CAACsB,KAAK,CAAChB,KAAK,CAACI,UAAU,GAAG,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAMa,iBAAiB,GAAIC,OAAO,IAAK;EAAA,IAAAC,cAAA;EACrC;EACA;EACA,IAAI,QAAOD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEE,KAAK,MAAK,QAAQ,EAAE,OAAOF,OAAO,CAACE,KAAK;EAC5D,IAAI,QAAOF,OAAO,aAAPA,OAAO,gBAAAC,cAAA,GAAPD,OAAO,CAAEE,KAAK,cAAAD,cAAA,uBAAdA,cAAA,CAAgBE,KAAK,MAAK,QAAQ,EAAE,OAAOH,OAAO,CAACE,KAAK,CAACC,KAAK;EACzE,IAAI,QAAOH,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEG,KAAK,MAAK,QAAQ,EAAE,OAAOH,OAAO,CAACG,KAAK;EAC5D,OAAO,IAAI;AACb,CAAC;AAED,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EAClC,MAAMC,KAAK,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EAC1B,MAAMC,eAAe,GAAG,IAAAD,aAAM,EAAC,IAAI,CAAC;EACpC,MAAME,cAAc,GAAG,IAAAF,aAAM,EAAC,IAAI,CAAC;EACnC,MAAMG,kBAAkB,GAAG,IAAAH,aAAM,EAAC,IAAI,CAAC;EACvC,MAAMI,gBAAgB,GAAG,IAAAJ,aAAM,EAAC,IAAI,CAAC;EACrC,MAAMK,iBAAiB,GAAG,IAAAL,aAAM,EAAC,IAAI,CAAC;EACtC,MAAMM,gBAAgB,GAAG,IAAAN,aAAM,EAAC,IAAI,CAAC;EACrC,MAAMO,cAAc,GAAG,IAAAP,aAAM,EAAC,IAAI,CAAC;EACnC,MAAMQ,oBAAoB,GAAG,IAAAR,aAAM,EAAC,KAAK,CAAC;EAC1C,MAAMS,eAAe,GAAG,IAAAT,aAAM,EAAC,CAAC,CAAC;EACjC,MAAMU,wBAAwB,GAAG,IAAAV,aAAM,EAAC,IAAIW,GAAG,CAAC,CAAC,CAAC;EAClD,MAAMC,qBAAqB,GAAG,IAAAZ,aAAM,EAAC,IAAI,CAAC;EAC1C,MAAMa,sBAAsB,GAAG,IAAAb,aAAM,EAAC,IAAI,CAAC;EAC3C,MAAMc,iBAAiB,GAAG,IAAAd,aAAM,EAAC;IAC/Be,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE,IAAI;IACpBC,yBAAyB,EAAEA,CAAA,KAAM,IAAI;IACrCC,0BAA0B,EAAEA,CAAA,KAAM;EACpC,CAAC,CAAC;EACF,MAAMC,uBAAuB,GAAG,IAAAnB,aAAM,EAAC,IAAI,CAAC;EAC5C,MAAMoB,iBAAiB,GAAG,IAAApB,aAAM,EAAC,KAAK,CAAC;EACvC,MAAMqB,YAAY,GAAG,IAAArB,aAAM,EAAC,KAAK,CAAC;EAClC,MAAMsB,wBAAwB,GAAG,IAAAtB,aAAM,EAAC,EAAE,CAAC;EAC3C,MAAMuB,sBAAsB,GAAG,IAAAvB,aAAM,EAAC,IAAIW,GAAG,CAAC,CAAC,CAAC;EAEhD,MAAMa,cAAc,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACvC,MAAMC,EAAE,GAAG3B,KAAK,CAAC4B,OAAO;IACxB,IAAID,EAAE,EAAE;MACN,IAAIA,EAAE,CAACE,UAAU,KAAKC,SAAS,CAACC,IAAI,IAAIJ,EAAE,CAACE,UAAU,KAAKC,SAAS,CAACE,UAAU,EAAEL,EAAE,CAACM,KAAK,CAAC,CAAC;MAC1FjC,KAAK,CAAC4B,OAAO,GAAG,IAAI;IACtB;IAEA,IAAIxB,kBAAkB,CAACwB,OAAO,EAAE;MAC9BxB,kBAAkB,CAACwB,OAAO,CAACM,cAAc,GAAG,IAAI;MAChD9B,kBAAkB,CAACwB,OAAO,CAACO,UAAU,CAAC,CAAC;MACvC/B,kBAAkB,CAACwB,OAAO,GAAG,IAAI;IACnC;IACA,IAAIzB,cAAc,CAACyB,OAAO,EAAE;MAC1BzB,cAAc,CAACyB,OAAO,CAACO,UAAU,CAAC,CAAC;MACnChC,cAAc,CAACyB,OAAO,GAAG,IAAI;IAC/B;IACA,IAAIrB,gBAAgB,CAACqB,OAAO,EAAE;MAC5BrB,gBAAgB,CAACqB,OAAO,CAACO,UAAU,CAAC,CAAC;MACrC5B,gBAAgB,CAACqB,OAAO,GAAG,IAAI;IACjC;IACA,IAAIvB,gBAAgB,CAACuB,OAAO,EAAE;MAC5BvB,gBAAgB,CAACuB,OAAO,CAACO,UAAU,CAAC,CAAC;MACrC9B,gBAAgB,CAACuB,OAAO,GAAG,IAAI;IACjC;IACA,IAAItB,iBAAiB,CAACsB,OAAO,EAAE;MAC7BtB,iBAAiB,CAACsB,OAAO,CAACO,UAAU,CAAC,CAAC;MACtC7B,iBAAiB,CAACsB,OAAO,GAAG,IAAI;IAClC;IAEAjB,wBAAwB,CAACiB,OAAO,CAACQ,OAAO,CAAEC,MAAM,IAAK;MACnD,IAAI;QACFA,MAAM,CAACC,IAAI,CAAC,CAAC;MACf,CAAC,CAAC,OAAAC,OAAA,EAAM;QACN;MAAA;IAEJ,CAAC,CAAC;IACF5B,wBAAwB,CAACiB,OAAO,GAAG,IAAIhB,GAAG,CAAC,CAAC;IAE5C,IAAIJ,cAAc,CAACoB,OAAO,EAAE;MAC1BpB,cAAc,CAACoB,OAAO,CAACY,SAAS,CAAC,CAAC,CAACJ,OAAO,CAAEK,KAAK,IAAKA,KAAK,CAACH,IAAI,CAAC,CAAC,CAAC;MACnE9B,cAAc,CAACoB,OAAO,GAAG,IAAI;IAC/B;IACA,IAAI1B,eAAe,CAAC0B,OAAO,EAAE;MAC3B1B,eAAe,CAAC0B,OAAO,CAACK,KAAK,CAAC,CAAC;MAC/B/B,eAAe,CAAC0B,OAAO,GAAG,IAAI;IAChC;IAEAb,iBAAiB,CAACa,OAAO,CAACZ,aAAa,GAAG,IAAI;IAC9CD,iBAAiB,CAACa,OAAO,CAACX,cAAc,GAAG,IAAI;IAC/CF,iBAAiB,CAACa,OAAO,CAACV,yBAAyB,GAAG,MAAM,IAAI;IAChEH,iBAAiB,CAACa,OAAO,CAACT,0BAA0B,GAAG,MAAM,IAAI;IACjEN,qBAAqB,CAACe,OAAO,GAAG,IAAI;IACpCd,sBAAsB,CAACc,OAAO,GAAG,IAAI;IACrCnB,oBAAoB,CAACmB,OAAO,GAAG,KAAK;IACpClB,eAAe,CAACkB,OAAO,GAAG,CAAC;IAC3BR,uBAAuB,CAACQ,OAAO,GAAG,IAAI;IACtCP,iBAAiB,CAACO,OAAO,GAAG,KAAK;IACjCN,YAAY,CAACM,OAAO,GAAG,KAAK;IAC5BL,wBAAwB,CAACK,OAAO,GAAG,EAAE;IACrCJ,sBAAsB,CAACI,OAAO,GAAG,IAAIhB,GAAG,CAAC,CAAC;EAC5C,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM8B,mBAAmB,GAAG,IAAAhB,kBAAW,EAAC,MAAM;IAC5Cf,wBAAwB,CAACiB,OAAO,CAACQ,OAAO,CAAEC,MAAM,IAAK;MACnD,IAAI;QACFA,MAAM,CAACC,IAAI,CAAC,CAAC;MACf,CAAC,CAAC,OAAAK,QAAA,EAAM;QACN;MAAA;IAEJ,CAAC,CAAC;IACFhC,wBAAwB,CAACiB,OAAO,GAAG,IAAIhB,GAAG,CAAC,CAAC;IAC5C,IAAIV,eAAe,CAAC0B,OAAO,EAAElB,eAAe,CAACkB,OAAO,GAAG1B,eAAe,CAAC0B,OAAO,CAACgB,WAAW;EAC5F,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,qBAAqB,GAAG,IAAAnB,kBAAW,EAAEoB,WAAW,IAAK;IACzD,MAAMC,OAAO,GAAG7C,eAAe,CAAC0B,OAAO;IACvC,MAAMoB,QAAQ,GAAG1C,iBAAiB,CAACsB,OAAO;IAC1C,IAAI,CAACmB,OAAO,IAAI,CAACC,QAAQ,EAAE;IAC3B,MAAMlF,KAAK,GAAGuB,eAAe,CAACyD,WAAW,CAAC;IAC1C,IAAI,CAAChF,KAAK,CAACE,MAAM,EAAE;IACnB,MAAMH,OAAO,GAAGS,cAAc,CAACR,KAAK,CAAC;IACrC,MAAMa,MAAM,GAAGoE,OAAO,CAACE,YAAY,CAAC,CAAC,EAAEpF,OAAO,CAACG,MAAM,EAAEP,WAAW,CAAC;IACnEkB,MAAM,CAACuE,aAAa,CAACrF,OAAO,EAAE,CAAC,CAAC;IAChC,MAAMwE,MAAM,GAAGU,OAAO,CAACI,kBAAkB,CAAC,CAAC;IAC3Cd,MAAM,CAAC1D,MAAM,GAAGA,MAAM;IACtB0D,MAAM,CAACe,OAAO,CAACJ,QAAQ,CAAC;IACxB,MAAMK,OAAO,GAAGlF,IAAI,CAACC,GAAG,CAAC2E,OAAO,CAACH,WAAW,EAAElC,eAAe,CAACkB,OAAO,CAAC;IACtES,MAAM,CAACiB,KAAK,CAACD,OAAO,CAAC;IACrB3C,eAAe,CAACkB,OAAO,GAAGyB,OAAO,GAAG1E,MAAM,CAAC4E,QAAQ;IACnD5C,wBAAwB,CAACiB,OAAO,CAAC4B,GAAG,CAACnB,MAAM,CAAC;IAC5CA,MAAM,CAACoB,OAAO,GAAG,MAAM;MACrB9C,wBAAwB,CAACiB,OAAO,CAAC8B,MAAM,CAACrB,MAAM,CAAC;IACjD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMsB,QAAQ,GAAG,IAAAjC,kBAAW,EAAE/B,OAAO,IAAK;IACxC,MAAMgC,EAAE,GAAG3B,KAAK,CAAC4B,OAAO;IACxB,IAAI,CAACD,EAAE,IAAIA,EAAE,CAACE,UAAU,KAAKC,SAAS,CAACC,IAAI,EAAE,OAAO,KAAK;IACzDJ,EAAE,CAACiC,IAAI,CAACC,IAAI,CAACC,SAAS,CAACnE,OAAO,CAAC,CAAC;IAChC,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMoE,SAAS,GAAG,IAAArC,kBAAW,EAC3BsC,IAAA,IAA+B;IAAA,IAA5BC,aAAa,GAAAD,IAAA,CAAbC,aAAa;MAAEC,MAAM,GAAAF,IAAA,CAANE,MAAM;IACtB,IAAI5C,YAAY,CAACM,OAAO,EAAE;IAC1B,MAAMuC,UAAU,GAAGD,MAAM,IAAI,OAAO;IACpC,MAAME,IAAI,6DAAAC,MAAA,CAA4DF,UAAU,wGAAAE,MAAA,CAAmGJ,aAAa,sIAAkI;IAElUN,QAAQ,CAAC;MACPW,IAAI,EAAE,0BAA0B;MAChCC,IAAI,EAAE;QACJD,IAAI,EAAE,SAAS;QACfE,IAAI,EAAE,MAAM;QACZC,OAAO,EAAE,CAAC;UAAEH,IAAI,EAAE,YAAY;UAAEF;QAAK,CAAC;MACxC;IACF,CAAC,CAAC;IACFT,QAAQ,CAAC;MAAEW,IAAI,EAAE;IAAkB,CAAC,CAAC;IACrChD,YAAY,CAACM,OAAO,GAAG,IAAI;EAC7B,CAAC,EACD,CAAC+B,QAAQ,CACX,CAAC;EAED,MAAMe,kBAAkB,GAAG,IAAAhD,kBAAW,EACnC/B,OAAO,IAAK;IAAA,IAAAgF,OAAA;IACX,MAAQC,IAAI,GAAKjF,OAAO,CAAhBiF,IAAI;IACZ,MAAMC,MAAM,GAAGlF,OAAO,CAACmF,OAAO;IAC9B,IAAIF,IAAI,KAAK,UAAU,IAAI,CAACC,MAAM,EAAE;IACpC,IAAIrD,sBAAsB,CAACI,OAAO,CAACmD,GAAG,CAACF,MAAM,CAAC,EAAE;IAChDrD,sBAAsB,CAACI,OAAO,CAAC4B,GAAG,CAACqB,MAAM,CAAC;IAE1C,IAAIG,MAAM,GAAG,IAAI;IACjB,IAAI;MACFA,MAAM,GAAGnB,IAAI,CAACoB,KAAK,CAACtF,OAAO,CAACuF,SAAS,IAAI,IAAI,CAAC;IAChD,CAAC,CAAC,OAAAC,QAAA,EAAM;MACNH,MAAM,GAAG,IAAI;IACf;IACA,MAAMI,GAAG,IAAAT,OAAA,GAAGK,MAAM,cAAAL,OAAA,uBAANA,OAAA,CAAQS,GAAG;IACvB,MAAMC,OAAO,GAAG,OAAOD,GAAG,KAAK,QAAQ,IAAIA,GAAG,CAACE,IAAI,CAAC,CAAC,CAACC,UAAU,CAAC5H,uBAAuB,CAAC;IAEzF,IAAI,CAAC0H,OAAO,EAAE;MACZ1B,QAAQ,CAAC;QACPW,IAAI,EAAE,0BAA0B;QAChCC,IAAI,EAAE;UACJD,IAAI,EAAE,sBAAsB;UAC5BQ,OAAO,EAAED,MAAM;UACfW,MAAM,EAAE3B,IAAI,CAACC,SAAS,CAAC;YAAE2B,KAAK,EAAE,aAAa;YAAEC,cAAc,EAAE/H;UAAwB,CAAC;QAC1F;MACF,CAAC,CAAC;MACFgG,QAAQ,CAAC;QAAEW,IAAI,EAAE;MAAkB,CAAC,CAAC;MACrC;IACF;IAEA7C,cAAc,CAAC,CAAC;IAChBkE,MAAM,CAACC,QAAQ,CAACC,MAAM,CAACT,GAAG,CAACE,IAAI,CAAC,CAAC,CAAC;EACpC,CAAC,EACD,CAAC7D,cAAc,EAAEkC,QAAQ,CAC3B,CAAC;EAED,MAAMmC,qBAAqB,GAAG,IAAApE,kBAAW,EAACqE,KAAA,IAAgE;IAAA,IAA7DC,WAAW,GAAAD,KAAA,CAAXC,WAAW;MAAEC,OAAO,GAAAF,KAAA,CAAPE,OAAO;MAAE/B,MAAM,GAAA6B,KAAA,CAAN7B,MAAM;MAAEgC,YAAY,GAAAH,KAAA,CAAZG,YAAY;MAAEC,UAAU,GAAAJ,KAAA,CAAVI,UAAU;IACjG,IAAI,CAACA,UAAU,IAAI,CAAC5E,wBAAwB,CAACK,OAAO,EAAE;IACtD,MAAMwE,KAAK,GAAG7E,wBAAwB,CAACK,OAAO,CAAC0D,IAAI,CAAC,CAAC;IACrD/D,wBAAwB,CAACK,OAAO,GAAG,EAAE;IACrC,MAAMyE,YAAY,GAAGnC,MAAM,IAAI,OAAO;IAEtC,IAAI+B,OAAO,IAAIC,YAAY,EAAE;MAC3BA,YAAY,CAAC;QAAEI,MAAM,EAAE,MAAM;QAAEC,IAAI,EAAEH;MAAM,CAAC,CAAC;MAC7CF,YAAY,CAAC;QAAEI,MAAM,EAAE,IAAI;QAAEC,IAAI,EAAEJ;MAAW,CAAC,CAAC;IAClD;IAEAK,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;MAC3BC,EAAE,EAAE,kBAAkB;MACtBZ,WAAW;MACX5B,IAAI,EAAE+B,UAAU;MAChBC,KAAK;MACLS,KAAK,EAAE,MAAM;MACb3C,MAAM,EAAEmC;IACV,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMS,YAAY,GAAG,IAAApF,kBAAW,EAC9B,MAAAqF,KAAA,IAUM;IAAA,IATJC,cAAc,GAAAD,KAAA,CAAdC,cAAc;MACdC,OAAO,GAAAF,KAAA,CAAPE,OAAO;MACPC,QAAQ,GAAAH,KAAA,CAARG,QAAQ;MACRjB,OAAO,GAAAc,KAAA,CAAPd,OAAO;MACPkB,OAAO,GAAAJ,KAAA,CAAPI,OAAO;MACPjD,MAAM,GAAA6C,KAAA,CAAN7C,MAAM;MACNgC,YAAY,GAAAa,KAAA,CAAZb,YAAY;MACZkB,eAAe,GAAAL,KAAA,CAAfK,eAAe;MACfC,QAAQ,GAAAN,KAAA,CAARM,QAAQ;IAER5F,cAAc,CAAC,CAAC;IAEhB,MAAMuE,WAAW,GAAG,IAAAsB,8BAAoB,EAAC,CAAC;IAC1C,MAAMC,eAAe,GAAI9B,KAAK,IAAK;MACjC,MAAM+B,YAAY,GAAG,OAAO/B,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEgC,OAAO;MACvE,IAAID,YAAY,EAAE;QAChBhB,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;UAAEC,EAAE,EAAEc,uBAAc,CAACC,UAAU;UAAElC,KAAK,EAAE+B;QAAa,CAAC,CAAC;MACtF;MACA/F,cAAc,CAAC,CAAC;MAChB4F,QAAQ,CAAC,KAAK,CAAC;MACfD,eAAe,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,IAAI;MACF,MAAMQ,eAAe,GAAG,MAAM,IAAAC,oBAAO,EAAC;QACpCC,QAAQ,+CAAAzD,MAAA,CAA+C2B,WAAW,eAAA3B,MAAA,CAChE8C,OAAO,GAAG,EAAE,GAAGlB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,eAAA5B,MAAA,CAClB8C,OAAO,GAAGF,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,GAAG,EAAE,cAAA5C,MAAA,CAAWH,MAAM,aAANA,MAAM,cAANA,MAAM,GAAI,EAAE,gBAAAG,MAAA,CAAa6C,QAAQ,aAARA,QAAQ,cAARA,QAAQ,GAAI,EAAE,CAAE;QAC5Fa,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,eAAe;QACrCC,MAAM,EAAE;MACV,CAAC,CAAC;MAEF,MAAMC,cAAc,GAAGR,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAES,KAAK;MAC7C,MAAMC,aAAa,GAAGV,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEW,OAAO;MAC9C,MAAMC,KAAK,GAAG,CAAAZ,eAAe,aAAfA,eAAe,uBAAfA,eAAe,CAAEY,KAAK,KAAIhL,aAAa;MACrD,IAAI,CAAC4K,cAAc,IAAI,CAACE,aAAa,EAAE,MAAM,IAAIG,KAAK,CAAC,8BAA8B,CAAC;MACtFrH,uBAAuB,CAACQ,OAAO,GAAG0G,aAAa;MAE/C,MAAMI,uBAAuB,GAAGC,UAAU,CAACC,YAAY,IAAID,UAAU,CAACE,kBAAkB;MACxF,IAAI,CAACH,uBAAuB,EAAE,MAAM,IAAID,KAAK,CAAC,4BAA4B,CAAC;MAC3E,MAAMK,YAAY,GAAG,IAAIJ,uBAAuB,CAAC;QAAEK,UAAU,EAAEtL;MAAY,CAAC,CAAC;MAC7EyC,eAAe,CAAC0B,OAAO,GAAGkH,YAAY;MACtC,IAAIA,YAAY,CAACE,KAAK,KAAK,WAAW,EAAE,MAAMF,YAAY,CAACG,MAAM,CAAC,CAAC;MAEnE,MAAMC,WAAW,GAAG,MAAMC,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;QAC5DvJ,KAAK,EAAE;UACLwJ,gBAAgB,EAAE,IAAI;UACtBC,gBAAgB,EAAE,IAAI;UACtBC,eAAe,EAAE,IAAI;UACrBC,YAAY,EAAE,CAAC;UACfV,UAAU,EAAEtL;QACd;MACF,CAAC,CAAC;MACF+C,cAAc,CAACoB,OAAO,GAAGsH,WAAW;MAEpC,MAAMQ,WAAW,GAAGZ,YAAY,CAACa,uBAAuB,CAACT,WAAW,CAAC;MACrE/I,cAAc,CAACyB,OAAO,GAAG8H,WAAW;MAEpC,MAAM1I,aAAa,GAAG8H,YAAY,CAACc,cAAc,CAAC,CAAC;MACnD5I,aAAa,CAAC6I,OAAO,GAAG,IAAI;MAC5BxJ,gBAAgB,CAACuB,OAAO,GAAGZ,aAAa;MACxC0I,WAAW,CAACtG,OAAO,CAACpC,aAAa,CAAC;MAElC,MAAMC,cAAc,GAAG6H,YAAY,CAACc,cAAc,CAAC,CAAC;MACpD3I,cAAc,CAAC4I,OAAO,GAAG,IAAI;MAC7BvJ,iBAAiB,CAACsB,OAAO,GAAGX,cAAc;MAC1CA,cAAc,CAACmC,OAAO,CAAC0F,YAAY,CAACgB,WAAW,CAAC;MAEhDjJ,qBAAqB,CAACe,OAAO,GAAG,IAAIlD,UAAU,CAACsC,aAAa,CAAC+I,iBAAiB,CAAC;MAC/EjJ,sBAAsB,CAACc,OAAO,GAAG,IAAIlD,UAAU,CAACuC,cAAc,CAAC8I,iBAAiB,CAAC;MACjFhJ,iBAAiB,CAACa,OAAO,CAACZ,aAAa,GAAGA,aAAa;MACvDD,iBAAiB,CAACa,OAAO,CAACX,cAAc,GAAGA,cAAc;MACzDF,iBAAiB,CAACa,OAAO,CAACV,yBAAyB,GAAG,MAAM;QAC1D,IAAI,CAACb,gBAAgB,CAACuB,OAAO,IAAI,CAACf,qBAAqB,CAACe,OAAO,EAAE,OAAO,IAAI;QAC5EvB,gBAAgB,CAACuB,OAAO,CAACoI,oBAAoB,CAACnJ,qBAAqB,CAACe,OAAO,CAAC;QAC5E,OAAOf,qBAAqB,CAACe,OAAO;MACtC,CAAC;MACDb,iBAAiB,CAACa,OAAO,CAACT,0BAA0B,GAAG,MAAM;QAC3D,IAAI,CAACb,iBAAiB,CAACsB,OAAO,IAAI,CAACd,sBAAsB,CAACc,OAAO,EAAE,OAAO,IAAI;QAC9EtB,iBAAiB,CAACsB,OAAO,CAACoI,oBAAoB,CAAClJ,sBAAsB,CAACc,OAAO,CAAC;QAC9E,OAAOd,sBAAsB,CAACc,OAAO;MACvC,CAAC;;MAED;MACA;MACA;MACA,MAAMqI,SAAS,GAAGnB,YAAY,CAACoB,qBAAqB,CAACxM,qBAAqB,EAAE,CAAC,EAAE,CAAC,CAAC;MACjF0C,kBAAkB,CAACwB,OAAO,GAAGqI,SAAS;MACtC,MAAME,QAAQ,GAAGrB,YAAY,CAACsB,UAAU,CAAC,CAAC;MAC1CD,QAAQ,CAACE,IAAI,CAAChC,KAAK,GAAG,CAAC;MACvB9H,gBAAgB,CAACqB,OAAO,GAAGuI,QAAQ;MACnCT,WAAW,CAACtG,OAAO,CAAC6G,SAAS,CAAC;MAC9BA,SAAS,CAAC7G,OAAO,CAAC+G,QAAQ,CAAC;MAC3BA,QAAQ,CAAC/G,OAAO,CAAC0F,YAAY,CAACgB,WAAW,CAAC;MAE1CG,SAAS,CAAC/H,cAAc,GAAIoI,KAAK,IAAK;QACpC,IAAI,CAAC7J,oBAAoB,CAACmB,OAAO,EAAE;QACnC,MAAMD,EAAE,GAAG3B,KAAK,CAAC4B,OAAO;QACxB,IAAI,CAACD,EAAE,IAAIA,EAAE,CAACE,UAAU,KAAKC,SAAS,CAACC,IAAI,EAAE;QAC7C,MAAMwI,WAAW,GAAGD,KAAK,CAACE,WAAW,CAACC,cAAc,CAAC,CAAC,CAAC;QACvD,MAAM3M,KAAK,GAAGF,cAAc,CAAC2M,WAAW,CAAC;QACzC5I,EAAE,CAACiC,IAAI,CACLC,IAAI,CAACC,SAAS,CAAC;UACbQ,IAAI,EAAE,2BAA2B;UACjCxE,KAAK,EAAEtB,eAAe,CAACV,KAAK;QAC9B,CAAC,CACH,CAAC;MACH,CAAC;MAED,MAAM6D,EAAE,GAAG,IAAIG,SAAS,IAAAuC,MAAA,CAAI9G,gBAAgB,aAAA8G,MAAA,CAAUqG,kBAAkB,CAAClC,KAAK,CAAC,GAAI,sBAAAnE,MAAA,CAC5D+D,cAAc,EACpC,CAAC;MACFpI,KAAK,CAAC4B,OAAO,GAAGD,EAAE;MAElBA,EAAE,CAACgJ,gBAAgB,CAAC,MAAM,EAAE,MAAM;QAChCnE,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;UAAEC,EAAE,EAAEc,uBAAc,CAACkD;QAAW,CAAC,CAAC;QAC/DjH,QAAQ,CAAC;UAAEW,IAAI,EAAE,gBAAgB;UAAEiE,OAAO,EAAEnH,uBAAuB,CAACQ;QAAQ,CAAC,CAAC;MAChF,CAAC,CAAC;MAEFD,EAAE,CAACgJ,gBAAgB,CAAC,OAAO,EAAE,MAAMpD,eAAe,CAAC,qBAAqB,CAAC,CAAC;MAC1E5F,EAAE,CAACgJ,gBAAgB,CAAC,OAAO,EAAE,MAAMpD,eAAe,CAAC,CAAC,CAAC;MAErD5F,EAAE,CAACgJ,gBAAgB,CAAC,SAAS,EAAE,MAAOL,KAAK,IAAK;QAC9C,IAAI3K,OAAO;QACX,IAAI;UACFA,OAAO,GAAGkE,IAAI,CAACoB,KAAK,CAACqF,KAAK,CAACO,IAAI,CAAC;QAClC,CAAC,CAAC,OAAAC,QAAA,EAAM;UACN;QACF;QAEA,QAAQnL,OAAO,CAAC2E,IAAI;UAClB,KAAK,iBAAiB;UACtB,KAAK,iBAAiB;YAAE;cACtB,IAAIjD,iBAAiB,CAACO,OAAO,EAAE;cAC/BP,iBAAiB,CAACO,OAAO,GAAG,IAAI;cAChCyF,QAAQ,CAAC,IAAI,CAAC;cACdtD,SAAS,CAAC;gBAAEE,aAAa,EAAE+C,cAAc;gBAAE9C;cAAO,CAAC,CAAC;cACpD;YACF;UACA,KAAK,6BAA6B;YAAE;cAClC,MAAMpE,KAAK,GAAGJ,iBAAiB,CAACC,OAAO,CAAC;cACxC,IAAIG,KAAK,EAAE+C,qBAAqB,CAAC/C,KAAK,CAAC;cACvC;YACF;UACA,KAAK,mCAAmC;YAAE;cACxC;cACA4C,mBAAmB,CAAC,CAAC;cACrB;YACF;UACA,KAAK,uCAAuC;YAAE;cAC5CgC,kBAAkB,CAAC/E,OAAO,CAAC;cAC3B;YACF;UACA,KAAK,eAAe;YAAE;cACpB;cACA,IAAI,CAACc,oBAAoB,CAACmB,OAAO,EAAEnB,oBAAoB,CAACmB,OAAO,GAAG,IAAI;cACtE;YACF;UACA,KAAK,uDAAuD;YAAE;cAAA,IAAAmJ,mBAAA;cAC5D,MAAM5E,UAAU,IAAA4E,mBAAA,GAAGpL,OAAO,CAACwG,UAAU,cAAA4E,mBAAA,uBAAlBA,mBAAA,CAAoBzF,IAAI,CAAC,CAAC;cAC7C,IAAIa,UAAU,EAAE5E,wBAAwB,CAACK,OAAO,IAAIuE,UAAU;cAC9D;YACF;UACA,KAAK,uCAAuC;UAC5C,KAAK,oBAAoB;YAAE;cAAA,IAAA6E,KAAA;cACzB,MAAM7E,UAAU,IAAA6E,KAAA,GAAIrL,OAAO,CAACwG,UAAU,IAAIxG,OAAO,CAACyE,IAAI,cAAA4G,KAAA,uBAAnCA,KAAA,CAAsC1F,IAAI,CAAC,CAAC;cAC/DQ,qBAAqB,CAAC;gBAAEE,WAAW;gBAAEC,OAAO;gBAAE/B,MAAM;gBAAEgC,YAAY;gBAAEC;cAAW,CAAC,CAAC;cACjF;YACF;UACA;YACE;QACJ;MACF,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOV,KAAK,EAAE;MACde,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;QAAEC,EAAE,EAAEc,uBAAc,CAACC,UAAU;QAAElC,KAAK,EAAEA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEgC;MAAQ,CAAC,CAAC;MACtFJ,QAAQ,CAAC,KAAK,CAAC;MACf,MAAM5B,KAAK;IACb,CAAC,SAAS;MACR2B,eAAe,CAAC,KAAK,CAAC;IACxB;EACF,CAAC,EACD,CACE3F,cAAc,EACdiD,kBAAkB,EAClBoB,qBAAqB,EACrBjD,qBAAqB,EACrBkB,SAAS,EACTJ,QAAQ,EACRjB,mBAAmB,CAEvB,CAAC;EAED,MAAMuI,UAAU,GAAG,IAAAvJ,kBAAW,EAAC,MAAM;IACnCD,cAAc,CAAC,CAAC;EAClB,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,OAAO;IAAEqF,YAAY;IAAEmE,UAAU;IAAEC,cAAc,EAAEnK,iBAAiB,CAACa;EAAQ,CAAC;AAChF,CAAC;AAACuJ,OAAA,CAAApL,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useXaiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_helpers3","XAI_REALTIME_URL","DEFAULT_MODEL","SAMPLE_RATE","PROCESSOR_BUFFER_SIZE","float32ToInt16","float32","int16","Int16Array","length","i","sample","Math","max","min","int16ToFloat32","Float32Array","base64FromInt16","bytes","Uint8Array","buffer","byteOffset","byteLength","binary","chunkSize","String","fromCharCode","apply","subarray","btoa","int16FromBase64","b64","atob","charCodeAt","floor","extractAudioDelta","payload","_payload$delta","delta","audio","useXaiRealtimeSession","wsRef","useRef","audioContextRef","inputSourceRef","scriptProcessorRef","inputAnalyserRef","outputAnalyserRef","inputMuteGainRef","localStreamRef","microphoneEnabledRef","playbackTimeRef","activePlaybackSourcesRef","Set","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","pendingSessionConfigRef","sessionAppliedRef","introSentRef","pendingUserTranscriptRef","handledOpenUrlCallsRef","cleanupSession","useCallback","ws","current","readyState","WebSocket","OPEN","CONNECTING","close","onaudioprocess","disconnect","forEach","source","stop","_unused","getTracks","track","stopPendingPlayback","_unused2","currentTime","scheduleAudioPlayback","audioBase64","context","analyser","createBuffer","copyToChannel","createBufferSource","connect","startAt","start","duration","add","onended","delete","sendJson","send","JSON","stringify","sendIntro","_ref","assistantName","locale","localeHint","text","concat","type","item","role","content","handleFunctionCall","_parsed","name","callId","call_id","has","parsed","parse","arguments","_unused3","allowedUrl","getAllowedOpenUrl","url","output","error","allowed_prefix","getAllowedOpenUrlPrefix","window","location","assign","persistTranscriptPair","_ref2","fingerprint","hotelId","onTranscript","transcript","input","trim","activeLocale","author","body","Event","publish","EVENT","METRICS","id","agent","startSession","_ref3","assistant_name","chainId","currency","isChain","setIsConnecting","setReady","getClientFingerprint","finalizeSession","errorMessage","message","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralToken","value","sessionConfig","session","model","Error","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","audioContext","sampleRate","state","resume","mediaStream","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","channelCount","inputSource","createMediaStreamSource","createAnalyser","fftSize","destination","frequencyBinCount","getByteFrequencyData","processor","createScriptProcessor","muteGain","createGain","gain","event","channelData","inputBuffer","getChannelData","encodeURIComponent","addEventListener","AURA_START","data","_unused4","_payload$transcript","_ref4","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\nimport { getAllowedOpenUrl, getAllowedOpenUrlPrefix } from '../helpers';\n\nconst XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL = 'grok-voice-latest';\nconst SAMPLE_RATE = 24000;\nconst PROCESSOR_BUFFER_SIZE = 2048;\n\nconst float32ToInt16 = (float32) => {\n const int16 = new Int16Array(float32.length);\n for (let i = 0; i < float32.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, float32[i]));\n int16[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n }\n return int16;\n};\n\nconst int16ToFloat32 = (int16) => {\n const float32 = new Float32Array(int16.length);\n for (let i = 0; i < int16.length; i += 1) {\n float32[i] = int16[i] / 0x8000;\n }\n return float32;\n};\n\nconst base64FromInt16 = (int16) => {\n const bytes = new Uint8Array(int16.buffer, int16.byteOffset, int16.byteLength);\n let binary = '';\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n};\n\nconst int16FromBase64 = (b64) => {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n return new Int16Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 2));\n};\n\nconst extractAudioDelta = (payload) => {\n // xAI docs show response.output_audio.delta with delta: { type: 'audio_delta', audio: 'base64' }.\n // Stay defensive in case the server returns a plain string in delta or a top-level audio field.\n if (typeof payload?.delta === 'string') return payload.delta;\n if (typeof payload?.delta?.audio === 'string') return payload.delta.audio;\n if (typeof payload?.audio === 'string') return payload.audio;\n return null;\n};\n\nconst useXaiRealtimeSession = () => {\n const wsRef = useRef(null);\n const audioContextRef = useRef(null);\n const inputSourceRef = useRef(null);\n const scriptProcessorRef = useRef(null);\n const inputAnalyserRef = useRef(null);\n const outputAnalyserRef = useRef(null);\n const inputMuteGainRef = useRef(null);\n const localStreamRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const playbackTimeRef = useRef(0);\n const activePlaybackSourcesRef = useRef(new Set());\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n const pendingSessionConfigRef = useRef(null);\n const sessionAppliedRef = useRef(false);\n const introSentRef = useRef(false);\n const pendingUserTranscriptRef = useRef('');\n const handledOpenUrlCallsRef = useRef(new Set());\n\n const cleanupSession = useCallback(() => {\n const ws = wsRef.current;\n if (ws) {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) ws.close();\n wsRef.current = null;\n }\n\n if (scriptProcessorRef.current) {\n scriptProcessorRef.current.onaudioprocess = null;\n scriptProcessorRef.current.disconnect();\n scriptProcessorRef.current = null;\n }\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n if (inputMuteGainRef.current) {\n inputMuteGainRef.current.disconnect();\n inputMuteGainRef.current = null;\n }\n if (inputAnalyserRef.current) {\n inputAnalyserRef.current.disconnect();\n inputAnalyserRef.current = null;\n }\n if (outputAnalyserRef.current) {\n outputAnalyserRef.current.disconnect();\n outputAnalyserRef.current = null;\n }\n\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n\n if (localStreamRef.current) {\n localStreamRef.current.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n microphoneEnabledRef.current = false;\n playbackTimeRef.current = 0;\n pendingSessionConfigRef.current = null;\n sessionAppliedRef.current = false;\n introSentRef.current = false;\n pendingUserTranscriptRef.current = '';\n handledOpenUrlCallsRef.current = new Set();\n }, []);\n\n const stopPendingPlayback = useCallback(() => {\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n if (audioContextRef.current) playbackTimeRef.current = audioContextRef.current.currentTime;\n }, []);\n\n const scheduleAudioPlayback = useCallback((audioBase64) => {\n const context = audioContextRef.current;\n const analyser = outputAnalyserRef.current;\n if (!context || !analyser) return;\n const int16 = int16FromBase64(audioBase64);\n if (!int16.length) return;\n const float32 = int16ToFloat32(int16);\n const buffer = context.createBuffer(1, float32.length, SAMPLE_RATE);\n buffer.copyToChannel(float32, 0);\n const source = context.createBufferSource();\n source.buffer = buffer;\n source.connect(analyser);\n const startAt = Math.max(context.currentTime, playbackTimeRef.current);\n source.start(startAt);\n playbackTimeRef.current = startAt + buffer.duration;\n activePlaybackSourcesRef.current.add(source);\n source.onended = () => {\n activePlaybackSourcesRef.current.delete(source);\n };\n }, []);\n\n const sendJson = useCallback((payload) => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return false;\n ws.send(JSON.stringify(payload));\n return true;\n }, []);\n\n const sendIntro = useCallback(\n ({ assistantName, locale }) => {\n if (introSentRef.current) return;\n const localeHint = locale || 'en-US';\n const text = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistantName}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n sendJson({ type: 'response.create' });\n introSentRef.current = true;\n },\n [sendJson],\n );\n\n const handleFunctionCall = useCallback(\n (payload) => {\n const { name } = payload;\n const callId = payload.call_id;\n if (name !== 'open_url' || !callId) return;\n if (handledOpenUrlCallsRef.current.has(callId)) return;\n handledOpenUrlCallsRef.current.add(callId);\n\n let parsed = null;\n try {\n parsed = JSON.parse(payload.arguments || '{}');\n } catch {\n parsed = null;\n }\n const allowedUrl = getAllowedOpenUrl(parsed?.url);\n\n if (!allowedUrl) {\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify({ error: 'blocked_url', allowed_prefix: getAllowedOpenUrlPrefix() }),\n },\n });\n sendJson({ type: 'response.create' });\n return;\n }\n\n cleanupSession();\n window.location.assign(allowedUrl);\n },\n [cleanupSession, sendJson],\n );\n\n const persistTranscriptPair = useCallback(({ fingerprint, hotelId, locale, onTranscript, transcript }) => {\n if (!transcript || !pendingUserTranscriptRef.current) return;\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n const activeLocale = locale || 'en-US';\n\n if (hotelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }, []);\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupSession();\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?voiceModel=xai&fingerprint=${fingerprint}&hotelId=${\n isChain ? '' : hotelId ?? ''\n }&chainId=${isChain ? chainId ?? '' : ''}&locale=${locale ?? ''}¤cy=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralToken = sessionResponse?.value;\n const sessionConfig = sessionResponse?.session;\n const model = sessionResponse?.model || DEFAULT_MODEL;\n if (!ephemeralToken || !sessionConfig) throw new Error('Invalid xAI session response');\n pendingSessionConfigRef.current = sessionConfig;\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor({ sampleRate: SAMPLE_RATE });\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: SAMPLE_RATE,\n },\n });\n localStreamRef.current = mediaStream;\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n\n const inputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n inputAnalyserRef.current = inputAnalyser;\n inputSource.connect(inputAnalyser);\n\n const outputAnalyser = audioContext.createAnalyser();\n outputAnalyser.fftSize = 1024;\n outputAnalyserRef.current = outputAnalyser;\n outputAnalyser.connect(audioContext.destination);\n\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!inputAnalyserRef.current || !inputFrequencyDataRef.current) return null;\n inputAnalyserRef.current.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!outputAnalyserRef.current || !outputFrequencyDataRef.current) return null;\n outputAnalyserRef.current.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n // ScriptProcessor is deprecated but still the simplest portable way to obtain\n // raw PCM frames synchronously. It must be connected to the destination to be scheduled;\n // we route it through a muted GainNode so the mic input is never audible locally.\n const processor = audioContext.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1);\n scriptProcessorRef.current = processor;\n const muteGain = audioContext.createGain();\n muteGain.gain.value = 0;\n inputMuteGainRef.current = muteGain;\n inputSource.connect(processor);\n processor.connect(muteGain);\n muteGain.connect(audioContext.destination);\n\n processor.onaudioprocess = (event) => {\n if (!microphoneEnabledRef.current) return;\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n const channelData = event.inputBuffer.getChannelData(0);\n const int16 = float32ToInt16(channelData);\n ws.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64FromInt16(int16),\n }),\n );\n };\n\n const ws = new WebSocket(`${XAI_REALTIME_URL}?model=${encodeURIComponent(model)}`, [\n `xai-client-secret.${ephemeralToken}`,\n ]);\n wsRef.current = ws;\n\n ws.addEventListener('open', () => {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n sendJson({ type: 'session.update', session: pendingSessionConfigRef.current });\n });\n\n ws.addEventListener('error', () => finalizeSession('xAI WebSocket error'));\n ws.addEventListener('close', () => finalizeSession());\n\n ws.addEventListener('message', async (event) => {\n let payload;\n try {\n payload = JSON.parse(event.data);\n } catch {\n return;\n }\n\n switch (payload.type) {\n case 'session.created':\n case 'session.updated': {\n if (sessionAppliedRef.current) break;\n sessionAppliedRef.current = true;\n setReady(true);\n sendIntro({ assistantName: assistant_name, locale });\n break;\n }\n case 'response.output_audio.delta': {\n const audio = extractAudioDelta(payload);\n if (audio) scheduleAudioPlayback(audio);\n break;\n }\n case 'input_audio_buffer.speech_started': {\n // Barge-in: cut current playback so the user can take over the turn cleanly.\n stopPendingPlayback();\n break;\n }\n case 'response.function_call_arguments.done': {\n handleFunctionCall(payload);\n break;\n }\n case 'response.done': {\n // Open the microphone once the intro response finishes; subsequent turns use server VAD.\n if (!microphoneEnabledRef.current) microphoneEnabledRef.current = true;\n break;\n }\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n break;\n }\n case 'response.output_audio_transcript.done':\n case 'response.text.done': {\n const transcript = (payload.transcript || payload.text)?.trim();\n persistTranscriptPair({ fingerprint, hotelId, locale, onTranscript, transcript });\n break;\n }\n default:\n break;\n }\n });\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupSession,\n handleFunctionCall,\n persistTranscriptPair,\n scheduleAudioPlayback,\n sendIntro,\n sendJson,\n stopPendingPlayback,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupSession();\n }, [cleanupSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useXaiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -111,6 +111,7 @@ const METRICS_EVENTS = exports.METRICS_EVENTS = {
|
|
|
111
111
|
AURA_CALL_END: 'AURA:CALL_END',
|
|
112
112
|
AURA_ERROR: 'AURA:ERROR',
|
|
113
113
|
AURA_START: 'AURA:START',
|
|
114
|
+
AURA_USAGE: 'AURA:USAGE',
|
|
114
115
|
BOOKING_INTERACTION: 'BOOKING:INTERACTION',
|
|
115
116
|
CHECKOUT_INTERACTION: 'CHECKOUT:INTERACTION',
|
|
116
117
|
CHECKOUT_READY: 'CHECKOUT:READY',
|