@mirai/core 0.4.653 → 0.4.655
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/Chat.js +33 -12
- package/build/components/Chat/Chat.js.map +1 -1
- package/build/components/Chat/components/Aura/Aura.js +3 -0
- package/build/components/Chat/components/Aura/Aura.js.map +1 -1
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js +10 -34
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js.map +1 -1
- package/build/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js +14 -36
- package/build/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js.map +1 -1
- package/build/components/Chat/helpers/clientLobby.js +6 -3
- package/build/components/Chat/helpers/clientLobby.js.map +1 -1
- package/build/components/Chat/services/lobby.service.js +4 -55
- package/build/components/Chat/services/lobby.service.js.map +1 -1
- package/build/components/__shared__/ButtonPayment/components/InputField/InputField.module.css +3 -1
- package/build/components/__shared__/Payment/components/PCI/helpers/getStyle.js +2 -2
- package/build/components/__shared__/Payment/components/PCI/helpers/getStyle.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useXaiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_lobby","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","transcript","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","Event","publish","EVENT","METRICS","id","METRICS_EVENTS","AURA_ERROR","message","agent","startSession","_ref3","assistant_name","chainId","currency","isChain","setIsConnecting","setReady","getClientFingerprint","finalizeSession","errorMessage","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralToken","value","sessionConfig","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 { createChatMessage, ensureChatId } from '../../../services/lobby.service';\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(async ({ fingerprint, hotelId, locale, 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) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId: hotelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n }\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 ({ assistant_name, chainId, currency, hotelId, isChain, locale, setIsConnecting, setReady }) => {\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 await persistTranscriptPair({ fingerprint, hotelId, locale, 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":[]}
|
|
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":"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","ignoreList":[]}
|
|
@@ -138,17 +138,20 @@ class ClientLobby {
|
|
|
138
138
|
send(_ref4) {
|
|
139
139
|
let body = _ref4.body,
|
|
140
140
|
_ref4$author = _ref4.author,
|
|
141
|
-
author = _ref4$author === void 0 ? 'user' : _ref4$author
|
|
142
|
-
|
|
143
|
-
if (
|
|
141
|
+
author = _ref4$author === void 0 ? 'user' : _ref4$author,
|
|
142
|
+
meta = _ref4.meta;
|
|
143
|
+
if (!this.socket) return false;
|
|
144
|
+
if (author === 'ai' && this.aiBlocked) return true;
|
|
144
145
|
this.socket.emit('message', {
|
|
145
146
|
chatId: this.chatId,
|
|
146
147
|
body,
|
|
147
148
|
author,
|
|
149
|
+
meta,
|
|
148
150
|
session: this.session,
|
|
149
151
|
channelId: this.channelId,
|
|
150
152
|
fingerprint: this.fingerprint
|
|
151
153
|
});
|
|
154
|
+
return true;
|
|
152
155
|
}
|
|
153
156
|
}
|
|
154
157
|
exports.ClientLobby = ClientLobby;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clientLobby.js","names":["_socket","require","_getClientFingerprint","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ClientLobby","constructor","_ref","undefined","url","channelId","_ref$session","session","process","env","SERVICE_LOBBY","window","concat","location","protocol","hostname","fingerprint","getClientFingerprint","Error","title","firstName","lastName","trim","email","socket","chatId","callbacks","message","blockState","presence","status","aiBlocked","lastPresence","onMessage","cb","off","onBlockState","onPresence","onStatus","type","fn","_emit","payload","connect","_this","io","replace","auth","path","transports","on","emit","msg","_msg$createdAt","createdAt","Date","now","_ref2","blocked","_ref3","online","snapshot","disconnect","requestHumanSupport","send","_ref4","body","_ref4$author","author","exports"],"sources":["../../../../src/components/Chat/helpers/clientLobby.js"],"sourcesContent":["import { io } from 'socket.io-client';\n\nimport { getClientFingerprint } from './getClientFingerprint';\n\nexport class ClientLobby {\n constructor({ url, channelId, session = {} } = {}) {\n this.url =\n url ||\n process.env.SERVICE_LOBBY ||\n (typeof window !== 'undefined'\n ? `${window.location.protocol}//${window.location.hostname}:4000`\n : 'http://localhost:4000');\n\n this.fingerprint = getClientFingerprint();\n\n this.channelId = channelId;\n if (!this.channelId) throw new Error('channelId es obligatorio');\n\n this.title = session?.firstName\n ? `${session.firstName} ${session.lastName || ''}`.trim()\n : session?.email || `Guest ${this.fingerprint}`;\n this.session = session;\n this.socket = null;\n this.chatId = this.fingerprint;\n this.callbacks = {\n message: [],\n blockState: [],\n presence: [],\n status: [],\n };\n this.aiBlocked = false;\n this.lastPresence = null;\n }\n\n onMessage(cb) {\n this.callbacks.message.push(cb);\n return () => this.off('message', cb);\n }\n\n onBlockState(cb) {\n this.callbacks.blockState.push(cb);\n return () => this.off('blockState', cb);\n }\n\n onPresence(cb) {\n this.callbacks.presence.push(cb);\n return () => this.off('presence', cb);\n }\n\n onStatus(cb) {\n this.callbacks.status.push(cb);\n return () => this.off('status', cb);\n }\n\n off(type, cb) {\n this.callbacks[type] = (this.callbacks[type] || []).filter((fn) => fn !== cb);\n }\n\n _emit(type, payload) {\n (this.callbacks[type] || []).forEach((cb) => cb(payload));\n }\n\n connect() {\n if (this.socket) return;\n this.socket = io(this.url.replace('/lobby', ''), {\n auth: {\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n },\n path: '/lobby/socket.io',\n transports: ['websocket'],\n });\n this._emit('status', 'connecting');\n\n this.socket.on('connect', () => {\n this._emit('status', 'connected');\n this.socket.emit('join_chat', {\n chatId: this.chatId,\n title: this.title,\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n });\n });\n\n this.socket.on('disconnect', () => {\n this._emit('status', 'disconnected');\n });\n\n this.socket.on('message', (msg) => {\n this._emit('message', { ...msg, createdAt: msg.createdAt ?? Date.now() });\n });\n\n this.socket.on('ai_block_state', ({ chatId, fingerprint, blocked }) => {\n if (chatId === this.chatId || fingerprint === this.fingerprint) {\n if (chatId && chatId !== this.chatId) this.chatId = chatId;\n if (this.aiBlocked !== blocked) {\n this.aiBlocked = blocked;\n this._emit('blockState', blocked);\n }\n }\n });\n\n this.socket.on('presence', ({ chatId, online }) => {\n if (chatId === this.chatId) {\n if (this.lastPresence !== online) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n }\n });\n this.socket.on('presence_snapshot', (snapshot = {}) => {\n const online = snapshot[this.chatId];\n if (online !== undefined && online !== this.lastPresence) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n this._emit('status', 'disconnected');\n }\n }\n\n requestHumanSupport() {\n if (!this.socket) return;\n this.socket.emit('request_human_support', {\n chatId: this.chatId,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n\n send({ body, author = 'user' }) {\n if (!this.socket) return;\n if (author === 'ai' && this.aiBlocked) return;\n this.socket.emit('message', {\n chatId: this.chatId,\n body,\n author,\n session: this.session,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"clientLobby.js","names":["_socket","require","_getClientFingerprint","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ClientLobby","constructor","_ref","undefined","url","channelId","_ref$session","session","process","env","SERVICE_LOBBY","window","concat","location","protocol","hostname","fingerprint","getClientFingerprint","Error","title","firstName","lastName","trim","email","socket","chatId","callbacks","message","blockState","presence","status","aiBlocked","lastPresence","onMessage","cb","off","onBlockState","onPresence","onStatus","type","fn","_emit","payload","connect","_this","io","replace","auth","path","transports","on","emit","msg","_msg$createdAt","createdAt","Date","now","_ref2","blocked","_ref3","online","snapshot","disconnect","requestHumanSupport","send","_ref4","body","_ref4$author","author","meta","exports"],"sources":["../../../../src/components/Chat/helpers/clientLobby.js"],"sourcesContent":["import { io } from 'socket.io-client';\n\nimport { getClientFingerprint } from './getClientFingerprint';\n\nexport class ClientLobby {\n constructor({ url, channelId, session = {} } = {}) {\n this.url =\n url ||\n process.env.SERVICE_LOBBY ||\n (typeof window !== 'undefined'\n ? `${window.location.protocol}//${window.location.hostname}:4000`\n : 'http://localhost:4000');\n\n this.fingerprint = getClientFingerprint();\n\n this.channelId = channelId;\n if (!this.channelId) throw new Error('channelId es obligatorio');\n\n this.title = session?.firstName\n ? `${session.firstName} ${session.lastName || ''}`.trim()\n : session?.email || `Guest ${this.fingerprint}`;\n this.session = session;\n this.socket = null;\n this.chatId = this.fingerprint;\n this.callbacks = {\n message: [],\n blockState: [],\n presence: [],\n status: [],\n };\n this.aiBlocked = false;\n this.lastPresence = null;\n }\n\n onMessage(cb) {\n this.callbacks.message.push(cb);\n return () => this.off('message', cb);\n }\n\n onBlockState(cb) {\n this.callbacks.blockState.push(cb);\n return () => this.off('blockState', cb);\n }\n\n onPresence(cb) {\n this.callbacks.presence.push(cb);\n return () => this.off('presence', cb);\n }\n\n onStatus(cb) {\n this.callbacks.status.push(cb);\n return () => this.off('status', cb);\n }\n\n off(type, cb) {\n this.callbacks[type] = (this.callbacks[type] || []).filter((fn) => fn !== cb);\n }\n\n _emit(type, payload) {\n (this.callbacks[type] || []).forEach((cb) => cb(payload));\n }\n\n connect() {\n if (this.socket) return;\n this.socket = io(this.url.replace('/lobby', ''), {\n auth: {\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n },\n path: '/lobby/socket.io',\n transports: ['websocket'],\n });\n this._emit('status', 'connecting');\n\n this.socket.on('connect', () => {\n this._emit('status', 'connected');\n this.socket.emit('join_chat', {\n chatId: this.chatId,\n title: this.title,\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n });\n });\n\n this.socket.on('disconnect', () => {\n this._emit('status', 'disconnected');\n });\n\n this.socket.on('message', (msg) => {\n this._emit('message', { ...msg, createdAt: msg.createdAt ?? Date.now() });\n });\n\n this.socket.on('ai_block_state', ({ chatId, fingerprint, blocked }) => {\n if (chatId === this.chatId || fingerprint === this.fingerprint) {\n if (chatId && chatId !== this.chatId) this.chatId = chatId;\n if (this.aiBlocked !== blocked) {\n this.aiBlocked = blocked;\n this._emit('blockState', blocked);\n }\n }\n });\n\n this.socket.on('presence', ({ chatId, online }) => {\n if (chatId === this.chatId) {\n if (this.lastPresence !== online) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n }\n });\n this.socket.on('presence_snapshot', (snapshot = {}) => {\n const online = snapshot[this.chatId];\n if (online !== undefined && online !== this.lastPresence) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n this._emit('status', 'disconnected');\n }\n }\n\n requestHumanSupport() {\n if (!this.socket) return;\n this.socket.emit('request_human_support', {\n chatId: this.chatId,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n\n send({ body, author = 'user', meta }) {\n if (!this.socket) return false;\n if (author === 'ai' && this.aiBlocked) return true;\n this.socket.emit('message', {\n chatId: this.chatId,\n body,\n author,\n meta,\n session: this.session,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n return true;\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,qBAAA,GAAAD,OAAA;AAA8D,SAAAE,QAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,GAAAC,MAAA,CAAAC,IAAA,CAAAJ,CAAA,OAAAG,MAAA,CAAAE,qBAAA,QAAAC,CAAA,GAAAH,MAAA,CAAAE,qBAAA,CAAAL,CAAA,GAAAC,CAAA,KAAAK,CAAA,GAAAA,CAAA,CAAAC,MAAA,WAAAN,CAAA,WAAAE,MAAA,CAAAK,wBAAA,CAAAR,CAAA,EAAAC,CAAA,EAAAQ,UAAA,OAAAP,CAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,CAAA,EAAAI,CAAA,YAAAJ,CAAA;AAAA,SAAAU,cAAAZ,CAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAY,SAAA,CAAAC,MAAA,EAAAb,CAAA,UAAAC,CAAA,WAAAW,SAAA,CAAAZ,CAAA,IAAAY,SAAA,CAAAZ,CAAA,QAAAA,CAAA,OAAAF,OAAA,CAAAI,MAAA,CAAAD,CAAA,OAAAa,OAAA,WAAAd,CAAA,IAAAe,eAAA,CAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,CAAAD,CAAA,SAAAE,MAAA,CAAAc,yBAAA,GAAAd,MAAA,CAAAe,gBAAA,CAAAlB,CAAA,EAAAG,MAAA,CAAAc,yBAAA,CAAAf,CAAA,KAAAH,OAAA,CAAAI,MAAA,CAAAD,CAAA,GAAAa,OAAA,WAAAd,CAAA,IAAAE,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,EAAAE,MAAA,CAAAK,wBAAA,CAAAN,CAAA,EAAAD,CAAA,iBAAAD,CAAA;AAAA,SAAAgB,gBAAAhB,CAAA,EAAAC,CAAA,EAAAC,CAAA,YAAAD,CAAA,GAAAmB,cAAA,CAAAnB,CAAA,MAAAD,CAAA,GAAAG,MAAA,CAAAgB,cAAA,CAAAnB,CAAA,EAAAC,CAAA,IAAAoB,KAAA,EAAAnB,CAAA,EAAAO,UAAA,MAAAa,YAAA,MAAAC,QAAA,UAAAvB,CAAA,CAAAC,CAAA,IAAAC,CAAA,EAAAF,CAAA;AAAA,SAAAoB,eAAAlB,CAAA,QAAAsB,CAAA,GAAAC,YAAA,CAAAvB,CAAA,uCAAAsB,CAAA,GAAAA,CAAA,GAAAA,CAAA;AAAA,SAAAC,aAAAvB,CAAA,EAAAD,CAAA,2BAAAC,CAAA,KAAAA,CAAA,SAAAA,CAAA,MAAAF,CAAA,GAAAE,CAAA,CAAAwB,MAAA,CAAAC,WAAA,kBAAA3B,CAAA,QAAAwB,CAAA,GAAAxB,CAAA,CAAA4B,IAAA,CAAA1B,CAAA,EAAAD,CAAA,uCAAAuB,CAAA,SAAAA,CAAA,YAAAK,SAAA,yEAAA5B,CAAA,GAAA6B,MAAA,GAAAC,MAAA,EAAA7B,CAAA;AAEvD,MAAM8B,WAAW,CAAC;EACvBC,WAAWA,CAAA,EAAwC;IAAA,IAAAC,IAAA,GAAArB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAsB,SAAA,GAAAtB,SAAA,MAAJ,CAAC,CAAC;MAAnCuB,GAAG,GAAAF,IAAA,CAAHE,GAAG;MAAEC,SAAS,GAAAH,IAAA,CAATG,SAAS;MAAAC,YAAA,GAAAJ,IAAA,CAAEK,OAAO;MAAPA,OAAO,GAAAD,YAAA,cAAG,CAAC,CAAC,GAAAA,YAAA;IACxC,IAAI,CAACF,GAAG,GACNA,GAAG,IACHI,OAAO,CAACC,GAAG,CAACC,aAAa,KACxB,OAAOC,MAAM,KAAK,WAAW,MAAAC,MAAA,CACvBD,MAAM,CAACE,QAAQ,CAACC,QAAQ,QAAAF,MAAA,CAAKD,MAAM,CAACE,QAAQ,CAACE,QAAQ,aACxD,uBAAuB,CAAC;IAE9B,IAAI,CAACC,WAAW,GAAG,IAAAC,0CAAoB,EAAC,CAAC;IAEzC,IAAI,CAACZ,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAAC,IAAI,CAACA,SAAS,EAAE,MAAM,IAAIa,KAAK,CAAC,0BAA0B,CAAC;IAEhE,IAAI,CAACC,KAAK,GAAGZ,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEa,SAAS,GAC3B,GAAAR,MAAA,CAAGL,OAAO,CAACa,SAAS,OAAAR,MAAA,CAAIL,OAAO,CAACc,QAAQ,IAAI,EAAE,EAAGC,IAAI,CAAC,CAAC,GACvD,CAAAf,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEgB,KAAK,cAAAX,MAAA,CAAa,IAAI,CAACI,WAAW,CAAE;IACjD,IAAI,CAACT,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACiB,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,MAAM,GAAG,IAAI,CAACT,WAAW;IAC9B,IAAI,CAACU,SAAS,GAAG;MACfC,OAAO,EAAE,EAAE;MACXC,UAAU,EAAE,EAAE;MACdC,QAAQ,EAAE,EAAE;MACZC,MAAM,EAAE;IACV,CAAC;IACD,IAAI,CAACC,SAAS,GAAG,KAAK;IACtB,IAAI,CAACC,YAAY,GAAG,IAAI;EAC1B;EAEAC,SAASA,CAACC,EAAE,EAAE;IACZ,IAAI,CAACR,SAAS,CAACC,OAAO,CAACjD,IAAI,CAACwD,EAAE,CAAC;IAC/B,OAAO,MAAM,IAAI,CAACC,GAAG,CAAC,SAAS,EAAED,EAAE,CAAC;EACtC;EAEAE,YAAYA,CAACF,EAAE,EAAE;IACf,IAAI,CAACR,SAAS,CAACE,UAAU,CAAClD,IAAI,CAACwD,EAAE,CAAC;IAClC,OAAO,MAAM,IAAI,CAACC,GAAG,CAAC,YAAY,EAAED,EAAE,CAAC;EACzC;EAEAG,UAAUA,CAACH,EAAE,EAAE;IACb,IAAI,CAACR,SAAS,CAACG,QAAQ,CAACnD,IAAI,CAACwD,EAAE,CAAC;IAChC,OAAO,MAAM,IAAI,CAACC,GAAG,CAAC,UAAU,EAAED,EAAE,CAAC;EACvC;EAEAI,QAAQA,CAACJ,EAAE,EAAE;IACX,IAAI,CAACR,SAAS,CAACI,MAAM,CAACpD,IAAI,CAACwD,EAAE,CAAC;IAC9B,OAAO,MAAM,IAAI,CAACC,GAAG,CAAC,QAAQ,EAAED,EAAE,CAAC;EACrC;EAEAC,GAAGA,CAACI,IAAI,EAAEL,EAAE,EAAE;IACZ,IAAI,CAACR,SAAS,CAACa,IAAI,CAAC,GAAG,CAAC,IAAI,CAACb,SAAS,CAACa,IAAI,CAAC,IAAI,EAAE,EAAEhE,MAAM,CAAEiE,EAAE,IAAKA,EAAE,KAAKN,EAAE,CAAC;EAC/E;EAEAO,KAAKA,CAACF,IAAI,EAAEG,OAAO,EAAE;IACnB,CAAC,IAAI,CAAChB,SAAS,CAACa,IAAI,CAAC,IAAI,EAAE,EAAExD,OAAO,CAAEmD,EAAE,IAAKA,EAAE,CAACQ,OAAO,CAAC,CAAC;EAC3D;EAEAC,OAAOA,CAAA,EAAG;IAAA,IAAAC,KAAA;IACR,IAAI,IAAI,CAACpB,MAAM,EAAE;IACjB,IAAI,CAACA,MAAM,GAAG,IAAAqB,UAAE,EAAC,IAAI,CAACzC,GAAG,CAAC0C,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE;MAC/CC,IAAI,EAAE;QACJ/B,WAAW,EAAE,IAAI,CAACA,WAAW;QAC7BX,SAAS,EAAE,IAAI,CAACA,SAAS;QACzBE,OAAO,EAAE,IAAI,CAACA;MAChB,CAAC;MACDyC,IAAI,EAAE,kBAAkB;MACxBC,UAAU,EAAE,CAAC,WAAW;IAC1B,CAAC,CAAC;IACF,IAAI,CAACR,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC;IAElC,IAAI,CAACjB,MAAM,CAAC0B,EAAE,CAAC,SAAS,EAAE,MAAM;MAC9B,IAAI,CAACT,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC;MACjC,IAAI,CAACjB,MAAM,CAAC2B,IAAI,CAAC,WAAW,EAAE;QAC5B1B,MAAM,EAAE,IAAI,CAACA,MAAM;QACnBN,KAAK,EAAE,IAAI,CAACA,KAAK;QACjBH,WAAW,EAAE,IAAI,CAACA,WAAW;QAC7BX,SAAS,EAAE,IAAI,CAACA,SAAS;QACzBE,OAAO,EAAE,IAAI,CAACA;MAChB,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,CAACiB,MAAM,CAAC0B,EAAE,CAAC,YAAY,EAAE,MAAM;MACjC,IAAI,CAACT,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;IACtC,CAAC,CAAC;IAEF,IAAI,CAACjB,MAAM,CAAC0B,EAAE,CAAC,SAAS,EAAGE,GAAG,IAAK;MAAA,IAAAC,cAAA;MACjC,IAAI,CAACZ,KAAK,CAAC,SAAS,EAAA7D,aAAA,CAAAA,aAAA,KAAOwE,GAAG;QAAEE,SAAS,GAAAD,cAAA,GAAED,GAAG,CAACE,SAAS,cAAAD,cAAA,cAAAA,cAAA,GAAIE,IAAI,CAACC,GAAG,CAAC;MAAC,EAAE,CAAC;IAC3E,CAAC,CAAC;IAEF,IAAI,CAAChC,MAAM,CAAC0B,EAAE,CAAC,gBAAgB,EAAEO,KAAA,IAAsC;MAAA,IAAnChC,MAAM,GAAAgC,KAAA,CAANhC,MAAM;QAAET,WAAW,GAAAyC,KAAA,CAAXzC,WAAW;QAAE0C,OAAO,GAAAD,KAAA,CAAPC,OAAO;MAC9D,IAAIjC,MAAM,KAAK,IAAI,CAACA,MAAM,IAAIT,WAAW,KAAK,IAAI,CAACA,WAAW,EAAE;QAC9D,IAAIS,MAAM,IAAIA,MAAM,KAAK,IAAI,CAACA,MAAM,EAAE,IAAI,CAACA,MAAM,GAAGA,MAAM;QAC1D,IAAI,IAAI,CAACM,SAAS,KAAK2B,OAAO,EAAE;UAC9B,IAAI,CAAC3B,SAAS,GAAG2B,OAAO;UACxB,IAAI,CAACjB,KAAK,CAAC,YAAY,EAAEiB,OAAO,CAAC;QACnC;MACF;IACF,CAAC,CAAC;IAEF,IAAI,CAAClC,MAAM,CAAC0B,EAAE,CAAC,UAAU,EAAES,KAAA,IAAwB;MAAA,IAArBlC,MAAM,GAAAkC,KAAA,CAANlC,MAAM;QAAEmC,MAAM,GAAAD,KAAA,CAANC,MAAM;MAC1C,IAAInC,MAAM,KAAK,IAAI,CAACA,MAAM,EAAE;QAC1B,IAAI,IAAI,CAACO,YAAY,KAAK4B,MAAM,EAAE;UAChC,IAAI,CAAC5B,YAAY,GAAG4B,MAAM;UAC1B,IAAI,CAACnB,KAAK,CAAC,UAAU,EAAEmB,MAAM,CAAC;QAChC;MACF;IACF,CAAC,CAAC;IACF,IAAI,CAACpC,MAAM,CAAC0B,EAAE,CAAC,mBAAmB,EAAE,YAAmB;MAAA,IAAlBW,QAAQ,GAAAhF,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAsB,SAAA,GAAAtB,SAAA,MAAG,CAAC,CAAC;MAChD,MAAM+E,MAAM,GAAGC,QAAQ,CAACjB,KAAI,CAACnB,MAAM,CAAC;MACpC,IAAImC,MAAM,KAAKzD,SAAS,IAAIyD,MAAM,KAAKhB,KAAI,CAACZ,YAAY,EAAE;QACxDY,KAAI,CAACZ,YAAY,GAAG4B,MAAM;QAC1BhB,KAAI,CAACH,KAAK,CAAC,UAAU,EAAEmB,MAAM,CAAC;MAChC;IACF,CAAC,CAAC;EACJ;EAEAE,UAAUA,CAAA,EAAG;IACX,IAAI,IAAI,CAACtC,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACsC,UAAU,CAAC,CAAC;MACxB,IAAI,CAACtC,MAAM,GAAG,IAAI;MAClB,IAAI,CAACiB,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC;IACtC;EACF;EAEAsB,mBAAmBA,CAAA,EAAG;IACpB,IAAI,CAAC,IAAI,CAACvC,MAAM,EAAE;IAClB,IAAI,CAACA,MAAM,CAAC2B,IAAI,CAAC,uBAAuB,EAAE;MACxC1B,MAAM,EAAE,IAAI,CAACA,MAAM;MACnBpB,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBW,WAAW,EAAE,IAAI,CAACA;IACpB,CAAC,CAAC;EACJ;EAEAgD,IAAIA,CAAAC,KAAA,EAAkC;IAAA,IAA/BC,IAAI,GAAAD,KAAA,CAAJC,IAAI;MAAAC,YAAA,GAAAF,KAAA,CAAEG,MAAM;MAANA,MAAM,GAAAD,YAAA,cAAG,MAAM,GAAAA,YAAA;MAAEE,IAAI,GAAAJ,KAAA,CAAJI,IAAI;IAChC,IAAI,CAAC,IAAI,CAAC7C,MAAM,EAAE,OAAO,KAAK;IAC9B,IAAI4C,MAAM,KAAK,IAAI,IAAI,IAAI,CAACrC,SAAS,EAAE,OAAO,IAAI;IAClD,IAAI,CAACP,MAAM,CAAC2B,IAAI,CAAC,SAAS,EAAE;MAC1B1B,MAAM,EAAE,IAAI,CAACA,MAAM;MACnByC,IAAI;MACJE,MAAM;MACNC,IAAI;MACJ9D,OAAO,EAAE,IAAI,CAACA,OAAO;MACrBF,SAAS,EAAE,IAAI,CAACA,SAAS;MACzBW,WAAW,EAAE,IAAI,CAACA;IACpB,CAAC,CAAC;IACF,OAAO,IAAI;EACb;AACF;AAACsD,OAAA,CAAAtE,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -3,62 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getChannelSettings =
|
|
6
|
+
exports.getChannelSettings = void 0;
|
|
7
7
|
var _dataSources = require("@mirai/data-sources");
|
|
8
|
-
const createChatMessage = async function () {
|
|
9
|
-
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
10
|
-
author = _ref.author,
|
|
11
|
-
body = _ref.body,
|
|
12
|
-
chatId = _ref.chatId,
|
|
13
|
-
meta = _ref.meta,
|
|
14
|
-
session = _ref.session;
|
|
15
|
-
if (!chatId) return null;
|
|
16
|
-
try {
|
|
17
|
-
return await (0, _dataSources.request)({
|
|
18
|
-
endpoint: "/api/chats/".concat(chatId, "/messages"),
|
|
19
|
-
hostname: process.env.SERVICE_LOBBY,
|
|
20
|
-
method: 'POST',
|
|
21
|
-
headers: {
|
|
22
|
-
'x-mcp-secret': process.env.MCP_SECRET
|
|
23
|
-
},
|
|
24
|
-
author,
|
|
25
|
-
body,
|
|
26
|
-
meta,
|
|
27
|
-
session
|
|
28
|
-
});
|
|
29
|
-
} catch (_unused) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
exports.createChatMessage = createChatMessage;
|
|
34
|
-
const ensureChatId = async function () {
|
|
35
|
-
let _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
36
|
-
fingerprint = _ref2.fingerprint,
|
|
37
|
-
channelId = _ref2.channelId,
|
|
38
|
-
session = _ref2.session;
|
|
39
|
-
if (!fingerprint || !channelId) return null;
|
|
40
|
-
try {
|
|
41
|
-
var _ensured$chat;
|
|
42
|
-
const ensured = await (0, _dataSources.request)({
|
|
43
|
-
endpoint: '/api/chats/ensure',
|
|
44
|
-
hostname: process.env.SERVICE_LOBBY,
|
|
45
|
-
method: 'POST',
|
|
46
|
-
headers: {
|
|
47
|
-
'x-mcp-secret': process.env.MCP_SECRET
|
|
48
|
-
},
|
|
49
|
-
fingerprint,
|
|
50
|
-
channelId,
|
|
51
|
-
session
|
|
52
|
-
});
|
|
53
|
-
return (ensured === null || ensured === void 0 || (_ensured$chat = ensured.chat) === null || _ensured$chat === void 0 ? void 0 : _ensured$chat.id) || null;
|
|
54
|
-
} catch (_unused2) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
exports.ensureChatId = ensureChatId;
|
|
59
8
|
const getChannelSettings = async function () {
|
|
60
|
-
let
|
|
61
|
-
channelId =
|
|
9
|
+
let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
10
|
+
channelId = _ref.channelId;
|
|
62
11
|
if (!channelId) return null;
|
|
63
12
|
try {
|
|
64
13
|
return await (0, _dataSources.request)({
|
|
@@ -66,7 +15,7 @@ const getChannelSettings = async function () {
|
|
|
66
15
|
hostname: process.env.SERVICE_LOBBY,
|
|
67
16
|
method: 'GET'
|
|
68
17
|
});
|
|
69
|
-
} catch (
|
|
18
|
+
} catch (_unused) {
|
|
70
19
|
return null;
|
|
71
20
|
}
|
|
72
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lobby.service.js","names":["_dataSources","require","
|
|
1
|
+
{"version":3,"file":"lobby.service.js","names":["_dataSources","require","getChannelSettings","_ref","arguments","length","undefined","channelId","request","endpoint","concat","hostname","process","env","SERVICE_LOBBY","method","_unused","exports"],"sources":["../../../../src/components/Chat/services/lobby.service.js"],"sourcesContent":["import { request } from '@mirai/data-sources';\n\nexport const getChannelSettings = async ({ channelId } = {}) => {\n if (!channelId) return null;\n\n try {\n return await request({\n endpoint: `/api/channels/${channelId}/settings/public`,\n hostname: process.env.SERVICE_LOBBY,\n method: 'GET',\n });\n } catch {\n return null;\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,kBAAkB,GAAG,eAAAA,CAAA,EAA8B;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAP,CAAC,CAAC;IAAhBG,SAAS,GAAAJ,IAAA,CAATI,SAAS;EAClD,IAAI,CAACA,SAAS,EAAE,OAAO,IAAI;EAE3B,IAAI;IACF,OAAO,MAAM,IAAAC,oBAAO,EAAC;MACnBC,QAAQ,mBAAAC,MAAA,CAAmBH,SAAS,qBAAkB;MACtDI,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACC,OAAA,CAAAf,kBAAA,GAAAA,kBAAA","ignoreList":[]}
|
|
@@ -20,8 +20,8 @@ const getStyle = () => {
|
|
|
20
20
|
letterSpacing: 0
|
|
21
21
|
},
|
|
22
22
|
'*::placeholder': "color:".concat(inputDisabled),
|
|
23
|
-
cardNumber: 'padding: 0;',
|
|
24
|
-
cvv: 'padding: 0;'
|
|
23
|
+
cardNumber: 'border: 0; outline: 0; padding: 0;',
|
|
24
|
+
cvv: 'border: 0; outline: 0; padding: 0;'
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getStyle.js","names":["_ui","require","getStyle","_Theme$get","Theme","get","content","font","inputDisabled","inputFontSize","styles","color","fontFamily","fontSize","concat","letterSpacing","cardNumber","cvv","exports"],"sources":["../../../../../../../src/components/__shared__/Payment/components/PCI/helpers/getStyle.js"],"sourcesContent":["import { Theme } from '@mirai/ui';\n\nexport const getStyle = () => {\n const { content, font, inputDisabled, inputFontSize } = Theme.get();\n\n return {\n styles: {\n '*': {\n color: content,\n fontFamily: font,\n fontSize: `${inputFontSize}px`,\n letterSpacing: 0,\n },\n '*::placeholder': `color:${inputDisabled}`,\n cardNumber: 'padding: 0;',\n cvv: 'padding: 0;',\n },\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AAEO,MAAMC,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAAC,UAAA,GAAwDC,SAAK,CAACC,GAAG,CAAC,CAAC;IAA3DC,OAAO,GAAAH,UAAA,CAAPG,OAAO;IAAEC,IAAI,GAAAJ,UAAA,CAAJI,IAAI;IAAEC,aAAa,GAAAL,UAAA,CAAbK,aAAa;IAAEC,aAAa,GAAAN,UAAA,CAAbM,aAAa;EAEnD,OAAO;IACLC,MAAM,EAAE;MACN,GAAG,EAAE;QACHC,KAAK,EAAEL,OAAO;QACdM,UAAU,EAAEL,IAAI;QAChBM,QAAQ,KAAAC,MAAA,CAAKL,aAAa,OAAI;QAC9BM,aAAa,EAAE;MACjB,CAAC;MACD,gBAAgB,WAAAD,MAAA,CAAWN,aAAa,CAAE;MAC1CQ,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"getStyle.js","names":["_ui","require","getStyle","_Theme$get","Theme","get","content","font","inputDisabled","inputFontSize","styles","color","fontFamily","fontSize","concat","letterSpacing","cardNumber","cvv","exports"],"sources":["../../../../../../../src/components/__shared__/Payment/components/PCI/helpers/getStyle.js"],"sourcesContent":["import { Theme } from '@mirai/ui';\n\nexport const getStyle = () => {\n const { content, font, inputDisabled, inputFontSize } = Theme.get();\n\n return {\n styles: {\n '*': {\n color: content,\n fontFamily: font,\n fontSize: `${inputFontSize}px`,\n letterSpacing: 0,\n },\n '*::placeholder': `color:${inputDisabled}`,\n cardNumber: 'border: 0; outline: 0; padding: 0;',\n cvv: 'border: 0; outline: 0; padding: 0;',\n },\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AAEO,MAAMC,QAAQ,GAAGA,CAAA,KAAM;EAC5B,MAAAC,UAAA,GAAwDC,SAAK,CAACC,GAAG,CAAC,CAAC;IAA3DC,OAAO,GAAAH,UAAA,CAAPG,OAAO;IAAEC,IAAI,GAAAJ,UAAA,CAAJI,IAAI;IAAEC,aAAa,GAAAL,UAAA,CAAbK,aAAa;IAAEC,aAAa,GAAAN,UAAA,CAAbM,aAAa;EAEnD,OAAO;IACLC,MAAM,EAAE;MACN,GAAG,EAAE;QACHC,KAAK,EAAEL,OAAO;QACdM,UAAU,EAAEL,IAAI;QAChBM,QAAQ,KAAAC,MAAA,CAAKL,aAAa,OAAI;QAC9BM,aAAa,EAAE;MACjB,CAAC;MACD,gBAAgB,WAAAD,MAAA,CAAWN,aAAa,CAAE;MAC1CQ,UAAU,EAAE,oCAAoC;MAChDC,GAAG,EAAE;IACP;EACF,CAAC;AACH,CAAC;AAACC,OAAA,CAAAhB,QAAA,GAAAA,QAAA","ignoreList":[]}
|