@mirai/core 0.4.520 → 0.4.522
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 +3 -0
- package/build/components/Chat/Chat.js.map +1 -1
- package/build/components/Chat/components/Aura/Aura.js +19 -19
- package/build/components/Chat/components/Aura/Aura.js.map +1 -1
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js +85 -20
- package/build/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js.map +1 -1
- package/build/components/helpers/constants.js +1 -0
- package/build/components/helpers/constants.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chat.js","names":["_dataSources","require","_locale","_services","_ui","_react","_interopRequireWildcard","_Chat","_Chat2","style","_components","_Aura","_helpers","_Core","_helpers2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_objectDestructuringEmpty","_extends","assign","bind","client","Chat","_ref","others","translate","useLocale","isMobile","useDevice","assistant","calendar","components","currency","hotel","id","locale","occupation","origin","session","skeleton","type","urlParams","synapse","useStore","busy","setBusy","useState","inputMode","setInputMode","messages","setMessages","visible","setVisible","useEffect","Event","subscribe","EVENT","CHAT_OPEN","handleOpen","unsubscribe","_client","INPUT_MODE","TEXT","disconnect","ClientLobby","channelId","onMessage","message","_client2","author","body","createdAt","fingerprint","prev","text","timestamp","connect","handleInput","input","_client3","shortcutMessage","undefined","nextMessages","Date","getTime","send","setTimeout","context","TYPE","CHAIN","process","env","NODE_ENV","chain","response","ServiceSynapse","mcp","catch","_client4","audioNotification","DELAY_RESPONSE","handleInputMode","next","publish","METRICS","concat","toUpperCase","WHATSAPP","handleClose","source","SARAI_SOURCE","CHAT_OPENED","event","isReady","every","item","BANNED_COMPONENTS","includes","enabled","entities","createElement","Fragment","Modal","fit","portal","className","styles","container","Header","onClose","Welcome","onInputMode","ScrollView","scrollTo","snap","map","index","Message","key","disabled","Input","onValue","AUDIO","Aura","onCallEnd","RATING","Rating","onRejoin","onReturnHome","Text","light","tiny","warning","L10N","LABEL_WARNING_RESPONSES","name","DEFAULT_NAME","ButtonDispatcher","onPress","exports"],"sources":["../../../src/components/Chat/Chat.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { ServiceSynapse } from '@mirai/services';\nimport { Modal, ScrollView, styles, Text, useDevice } from '@mirai/ui';\nimport React, { useEffect, useState } from 'react';\n\nimport { BANNED_COMPONENTS, DEFAULT_NAME, DELAY_RESPONSE, INPUT_MODE } from './Chat.constants';\nimport { L10N } from './Chat.l10n';\nimport * as style from './Chat.module.css';\nimport { ButtonDispatcher, Header, Input, Message, Rating, Welcome } from './components';\nimport { Aura } from './components/Aura/Aura';\nimport { audioNotification, ClientLobby } from './helpers';\nimport { SARAI_SOURCE, TYPE } from '../../Core.constants';\nimport { EVENT } from '../helpers';\n\nlet client;\n\nconst Chat = ({ ...others }) => {\n const { translate } = useLocale();\n const { isMobile } = useDevice();\n const {\n value: {\n assistant = {},\n calendar,\n components = {},\n currency,\n hotel,\n id,\n locale,\n occupation,\n origin,\n session,\n skeleton = false,\n type,\n urlParams: { synapse = 'v1' } = {},\n } = {},\n } = useStore();\n\n const [busy, setBusy] = useState(false);\n const [inputMode, setInputMode] = useState();\n const [messages, setMessages] = useState([]);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (skeleton) return;\n\n Event.subscribe(EVENT.CHAT_OPEN, handleOpen);\n return () => Event.unsubscribe(EVENT.CHAT_OPEN, handleOpen);\n }, [skeleton]);\n\n useEffect(() => {\n if (!visible || inputMode !== INPUT_MODE.TEXT) return client?.disconnect();\n\n client = new ClientLobby({ channelId: id, session });\n\n client.onMessage((message) => {\n const { author, body, createdAt, fingerprint } = message || {};\n if (fingerprint !== client?.fingerprint || author !== 'human') return;\n setMessages((prev) => [...prev, { synapse: true, text: body, timestamp: createdAt }]);\n });\n\n client.connect();\n }, [id, inputMode, session, visible]);\n\n const handleInput = (input, shortcutMessage = false) => {\n const nextMessages = [...messages, { text: input, timestamp: new Date().getTime() }];\n setMessages(nextMessages);\n\n client?.send({ body: input });\n\n setTimeout(async () => {\n setBusy(true);\n\n const context = { calendar, currency, isMobile, locale, occupation, origin, shortcutMessage };\n if (type === TYPE.CHAIN || (process.env.NODE_ENV === 'preproduction' && id === '100379008')) {\n context.chain = { id: process.env.NODE_ENV === 'preproduction' && id === '100379008' ? '500659' : id };\n }\n if (hotel.id) context.hotel = hotel;\n\n const response = await ServiceSynapse.message({\n context,\n input,\n session,\n mcp: synapse === 'v2',\n }).catch(() => {});\n\n if (response) {\n setMessages([...nextMessages, { synapse: true, ...response }]);\n client?.send({ body: response.text, author: 'ai' });\n\n // ! TODO: Handle locale\n // if (response.locale !== locale) Event.publish(EVENT.INTENT_LOCALE, { locale: response.locale });\n audioNotification();\n }\n setBusy(false);\n }, DELAY_RESPONSE);\n };\n\n const handleInputMode = (next) => {\n Event.publish(EVENT.METRICS, { id: `SARAI:INPUT_MODE:${next.toUpperCase()}` });\n if (next === INPUT_MODE.WHATSAPP) return handleClose();\n setInputMode(next);\n };\n\n const handleOpen = ({ source = SARAI_SOURCE } = {}) => {\n setVisible(true);\n Event.publish(EVENT.CHAT_OPENED, { event: EVENT.CHAT_OPENED, source });\n Event.publish(EVENT.METRICS, { id: 'SARAI:OPEN' });\n };\n\n const handleClose = () => {\n Event.publish(EVENT.METRICS, { id: 'SARAI:CLOSE' });\n setVisible(false);\n setInputMode();\n };\n\n const isReady =\n !skeleton && Object.keys(components).every((item) => !BANNED_COMPONENTS.includes(item)) && assistant.enabled;\n const { entities = {} } = messages[messages.length - 1] || {};\n\n return isReady ? (\n <>\n <Modal {...others} fit portal visible={visible} className={styles(style.container, others.className)}>\n <Header onClose={handleClose} />\n\n {!inputMode ? (\n <Welcome onInputMode={handleInputMode} />\n ) : inputMode === INPUT_MODE.TEXT ? (\n <>\n <ScrollView scrollTo={new Date().getTime()} snap={false} className={style.messages}>\n {messages.map((message, index) => (\n <Message key={`message:${index}`} disabled={busy || index < messages.length - 1} {...message} />\n ))}\n {busy && <Message busy synapse />}\n </ScrollView>\n <Input disabled={busy} entities={entities} onValue={handleInput} className={style.input} />\n </>\n ) : inputMode === INPUT_MODE.AUDIO ? (\n <Aura onCallEnd={() => setInputMode(INPUT_MODE.RATING)} />\n ) : inputMode === INPUT_MODE.RATING ? (\n <Rating onRejoin={() => setInputMode(INPUT_MODE.AUDIO)} onReturnHome={handleClose} />\n ) : null}\n <Text light tiny className={style.warning}>\n {translate(L10N.LABEL_WARNING_RESPONSES, { name: assistant.name || DEFAULT_NAME })}\n </Text>\n </Modal>\n\n <ButtonDispatcher visible={visible} onPress={handleOpen} />\n </>\n ) : null;\n};\n\nexport { Chat };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Chat.js","names":["_dataSources","require","_locale","_services","_ui","_react","_interopRequireWildcard","_Chat","_Chat2","style","_components","_Aura","_helpers","_Core","_helpers2","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_objectDestructuringEmpty","_extends","assign","bind","client","Chat","_ref","others","translate","useLocale","isMobile","useDevice","assistant","calendar","components","currency","hotel","id","locale","occupation","origin","session","skeleton","type","urlParams","synapse","useStore","busy","setBusy","useState","inputMode","setInputMode","messages","setMessages","visible","setVisible","useEffect","Event","subscribe","EVENT","CHAT_OPEN","handleOpen","unsubscribe","_client","INPUT_MODE","TEXT","disconnect","ClientLobby","channelId","onMessage","message","_client2","author","body","createdAt","fingerprint","prev","text","timestamp","connect","handleInput","input","_client3","shortcutMessage","undefined","nextMessages","Date","getTime","send","setTimeout","context","TYPE","CHAIN","process","env","NODE_ENV","chain","response","ServiceSynapse","mcp","catch","_client4","audioNotification","DELAY_RESPONSE","handleInputMode","next","publish","METRICS","concat","toUpperCase","WHATSAPP","handleClose","source","SARAI_SOURCE","CHAT_OPENED","event","CHAT_CLOSE","isReady","every","item","BANNED_COMPONENTS","includes","enabled","entities","createElement","Fragment","Modal","fit","portal","className","styles","container","Header","onClose","Welcome","onInputMode","ScrollView","scrollTo","snap","map","index","Message","key","disabled","Input","onValue","AUDIO","Aura","onCallEnd","RATING","Rating","onRejoin","onReturnHome","Text","light","tiny","warning","L10N","LABEL_WARNING_RESPONSES","name","DEFAULT_NAME","ButtonDispatcher","onPress","exports"],"sources":["../../../src/components/Chat/Chat.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { ServiceSynapse } from '@mirai/services';\nimport { Modal, ScrollView, styles, Text, useDevice } from '@mirai/ui';\nimport React, { useEffect, useState } from 'react';\n\nimport { BANNED_COMPONENTS, DEFAULT_NAME, DELAY_RESPONSE, INPUT_MODE } from './Chat.constants';\nimport { L10N } from './Chat.l10n';\nimport * as style from './Chat.module.css';\nimport { ButtonDispatcher, Header, Input, Message, Rating, Welcome } from './components';\nimport { Aura } from './components/Aura/Aura';\nimport { audioNotification, ClientLobby } from './helpers';\nimport { SARAI_SOURCE, TYPE } from '../../Core.constants';\nimport { EVENT } from '../helpers';\n\nlet client;\n\nconst Chat = ({ ...others }) => {\n const { translate } = useLocale();\n const { isMobile } = useDevice();\n const {\n value: {\n assistant = {},\n calendar,\n components = {},\n currency,\n hotel,\n id,\n locale,\n occupation,\n origin,\n session,\n skeleton = false,\n type,\n urlParams: { synapse = 'v1' } = {},\n } = {},\n } = useStore();\n\n const [busy, setBusy] = useState(false);\n const [inputMode, setInputMode] = useState();\n const [messages, setMessages] = useState([]);\n const [visible, setVisible] = useState(false);\n\n useEffect(() => {\n if (skeleton) return;\n\n Event.subscribe(EVENT.CHAT_OPEN, handleOpen);\n return () => Event.unsubscribe(EVENT.CHAT_OPEN, handleOpen);\n }, [skeleton]);\n\n useEffect(() => {\n if (!visible || inputMode !== INPUT_MODE.TEXT) return client?.disconnect();\n\n client = new ClientLobby({ channelId: id, session });\n\n client.onMessage((message) => {\n const { author, body, createdAt, fingerprint } = message || {};\n if (fingerprint !== client?.fingerprint || author !== 'human') return;\n setMessages((prev) => [...prev, { synapse: true, text: body, timestamp: createdAt }]);\n });\n\n client.connect();\n }, [id, inputMode, session, visible]);\n\n const handleInput = (input, shortcutMessage = false) => {\n const nextMessages = [...messages, { text: input, timestamp: new Date().getTime() }];\n setMessages(nextMessages);\n\n client?.send({ body: input });\n\n setTimeout(async () => {\n setBusy(true);\n\n const context = { calendar, currency, isMobile, locale, occupation, origin, shortcutMessage };\n if (type === TYPE.CHAIN || (process.env.NODE_ENV === 'preproduction' && id === '100379008')) {\n context.chain = { id: process.env.NODE_ENV === 'preproduction' && id === '100379008' ? '500659' : id };\n }\n if (hotel.id) context.hotel = hotel;\n\n const response = await ServiceSynapse.message({\n context,\n input,\n session,\n mcp: synapse === 'v2',\n }).catch(() => {});\n\n if (response) {\n setMessages([...nextMessages, { synapse: true, ...response }]);\n client?.send({ body: response.text, author: 'ai' });\n\n // ! TODO: Handle locale\n // if (response.locale !== locale) Event.publish(EVENT.INTENT_LOCALE, { locale: response.locale });\n audioNotification();\n }\n setBusy(false);\n }, DELAY_RESPONSE);\n };\n\n const handleInputMode = (next) => {\n Event.publish(EVENT.METRICS, { id: `SARAI:INPUT_MODE:${next.toUpperCase()}` });\n if (next === INPUT_MODE.WHATSAPP) return handleClose();\n setInputMode(next);\n };\n\n const handleOpen = ({ source = SARAI_SOURCE } = {}) => {\n setVisible(true);\n Event.publish(EVENT.CHAT_OPENED, { event: EVENT.CHAT_OPENED, source });\n Event.publish(EVENT.METRICS, { id: 'SARAI:OPEN' });\n };\n\n const handleClose = () => {\n Event.publish(EVENT.CHAT_CLOSE, { inputMode });\n Event.publish(EVENT.METRICS, { id: 'SARAI:CLOSE' });\n setVisible(false);\n setInputMode();\n };\n\n const isReady =\n !skeleton && Object.keys(components).every((item) => !BANNED_COMPONENTS.includes(item)) && assistant.enabled;\n const { entities = {} } = messages[messages.length - 1] || {};\n\n return isReady ? (\n <>\n <Modal {...others} fit portal visible={visible} className={styles(style.container, others.className)}>\n <Header onClose={handleClose} />\n\n {!inputMode ? (\n <Welcome onInputMode={handleInputMode} />\n ) : inputMode === INPUT_MODE.TEXT ? (\n <>\n <ScrollView scrollTo={new Date().getTime()} snap={false} className={style.messages}>\n {messages.map((message, index) => (\n <Message key={`message:${index}`} disabled={busy || index < messages.length - 1} {...message} />\n ))}\n {busy && <Message busy synapse />}\n </ScrollView>\n <Input disabled={busy} entities={entities} onValue={handleInput} className={style.input} />\n </>\n ) : inputMode === INPUT_MODE.AUDIO ? (\n <Aura onCallEnd={() => setInputMode(INPUT_MODE.RATING)} />\n ) : inputMode === INPUT_MODE.RATING ? (\n <Rating onRejoin={() => setInputMode(INPUT_MODE.AUDIO)} onReturnHome={handleClose} />\n ) : null}\n <Text light tiny className={style.warning}>\n {translate(L10N.LABEL_WARNING_RESPONSES, { name: assistant.name || DEFAULT_NAME })}\n </Text>\n </Modal>\n\n <ButtonDispatcher visible={visible} onPress={handleOpen} />\n </>\n ) : null;\n};\n\nexport { Chat };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -38,6 +38,7 @@ const Aura = _ref => {
|
|
|
38
38
|
const {
|
|
39
39
|
value: {
|
|
40
40
|
assistant = {},
|
|
41
|
+
currency,
|
|
41
42
|
hotel = {},
|
|
42
43
|
id,
|
|
43
44
|
locale,
|
|
@@ -53,27 +54,33 @@ const Aura = _ref => {
|
|
|
53
54
|
const [context, setContext] = (0, _react2.useState)(null);
|
|
54
55
|
const [isConnecting, setIsConnecting] = (0, _react2.useState)(false);
|
|
55
56
|
const [ready, setReady] = (0, _react2.useState)(false);
|
|
56
|
-
(0, _react2.useEffect)(() => {
|
|
57
|
-
const callback = async () => {
|
|
58
|
-
if (ready) handleCallEnd();
|
|
59
|
-
};
|
|
60
|
-
_dataSources.Event.subscribe(_helpers2.EVENT.SARAI_MESSAGE_SENT, callback);
|
|
61
|
-
return () => {
|
|
62
|
-
_dataSources.Event.unsubscribe(_helpers2.EVENT.SARAI_MESSAGE_SENT, callback);
|
|
63
|
-
if (synapse === 'v2') callback();
|
|
64
|
-
};
|
|
65
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
66
|
-
}, [conversation, ready]);
|
|
67
57
|
(0, _react2.useEffect)(() => {
|
|
68
58
|
if (type === _Core.TYPE.CHAIN && !hotel.id) return;
|
|
69
59
|
setContext({
|
|
70
60
|
hotelId: hotel.id
|
|
71
61
|
});
|
|
72
62
|
}, [hotel.id, type]);
|
|
63
|
+
const handleCallEnd = (0, _react2.useCallback)(() => {
|
|
64
|
+
if (synapse === 'v2') endSession();else conversation.endSession();
|
|
65
|
+
setReady(false);
|
|
66
|
+
onCallEnd();
|
|
67
|
+
_dataSources.Event.publish(_helpers2.EVENT.METRICS, {
|
|
68
|
+
id: 'AURA:CALL_END'
|
|
69
|
+
});
|
|
70
|
+
}, [conversation, endSession, onCallEnd, synapse]);
|
|
73
71
|
(0, _react2.useEffect)(() => {
|
|
74
72
|
handleCallStart();
|
|
75
73
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
76
74
|
}, [context]);
|
|
75
|
+
(0, _react2.useEffect)(() => {
|
|
76
|
+
const callback = () => {
|
|
77
|
+
if (ready) handleCallEnd();
|
|
78
|
+
};
|
|
79
|
+
_dataSources.Event.subscribe(_helpers2.EVENT.CHAT_CLOSE, callback);
|
|
80
|
+
return () => {
|
|
81
|
+
_dataSources.Event.unsubscribe(_helpers2.EVENT.CHAT_CLOSE, callback);
|
|
82
|
+
};
|
|
83
|
+
}, [handleCallEnd, ready]);
|
|
77
84
|
const handleCallStart = async () => {
|
|
78
85
|
const {
|
|
79
86
|
name: assistant_name = 'Sarai'
|
|
@@ -92,6 +99,7 @@ const Aura = _ref => {
|
|
|
92
99
|
await startSession({
|
|
93
100
|
assistant_name,
|
|
94
101
|
chainId,
|
|
102
|
+
currency,
|
|
95
103
|
hotelId: context === null || context === void 0 ? void 0 : context.hotelId,
|
|
96
104
|
isChain,
|
|
97
105
|
locale,
|
|
@@ -141,14 +149,6 @@ const Aura = _ref => {
|
|
|
141
149
|
setIsConnecting(false);
|
|
142
150
|
}
|
|
143
151
|
};
|
|
144
|
-
const handleCallEnd = () => {
|
|
145
|
-
if (synapse === 'v2') endSession();else conversation.endSession();
|
|
146
|
-
setReady(false);
|
|
147
|
-
onCallEnd();
|
|
148
|
-
_dataSources.Event.publish(_helpers2.EVENT.METRICS, {
|
|
149
|
-
id: 'AURA:CALL_END'
|
|
150
|
-
});
|
|
151
|
-
};
|
|
152
152
|
return !(!context && !(type === _Core.TYPE.CHAIN && !hotel.id)) ? /*#__PURE__*/_react2.default.createElement(_react2.default.Fragment, null, /*#__PURE__*/_react2.default.createElement(_Aura2.Waveform, {
|
|
153
153
|
active: ready,
|
|
154
154
|
conversation: synapse === 'v2' ? audioAnalyzers : conversation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Aura.js","names":["_react","require","_dataSources","_locale","_ui","_propTypes","_interopRequireDefault","_react2","_interopRequireWildcard","_Aura","style","_Aura2","_helpers","_useOpenAiRealtimeSession","_Core","_helpers2","_Chat","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","Aura","_ref","onCallEnd","conversation","useConversation","startSession","endSession","audioAnalyzers","useOpenAiRealtimeSession","assistant","hotel","id","locale","type","urlParams","synapse","useStore","translate","useLocale","context","setContext","useState","isConnecting","setIsConnecting","ready","setReady","useEffect","callback","handleCallEnd","Event","subscribe","EVENT","SARAI_MESSAGE_SENT","unsubscribe","TYPE","CHAIN","hotelId","handleCallStart","name","assistant_name","isChain","chainId","undefined","navigator","mediaDevices","publish","METRICS","getUserMedia","audio","sessionConfig","clientTools","open_url","toolOpenUrl","dynamicVariables","chain_id","overrides","agent","language","split","signedUrl","getSignedUrl","onConnect","onDisconnect","onError","error","message","createElement","Fragment","Waveform","active","View","className","footer","Text","action","L10N","LABEL_CALLING","DEFAULT_NAME","Button","busy","rounded","squared","large","tooltip","LABEL_HANG_UP","onPress","styles","button","Icon","ICON","HANG_UP","exports","displayName","propTypes","PropTypes","func"],"sources":["../../../../../src/components/Chat/components/Aura/Aura.jsx"],"sourcesContent":["import { useConversation } from '@elevenlabs/react';\nimport { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Button, Icon, styles, Text, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nimport { L10N } from './Aura.l10n';\nimport * as style from './Aura.module.css';\nimport { Waveform } from './Aura.waveform';\nimport { getSignedUrl, toolOpenUrl } from './helpers';\nimport { useOpenAiRealtimeSession } from './hooks/useOpenAiRealtimeSession';\nimport { TYPE } from '../../../../Core.constants';\nimport { EVENT, ICON } from '../../../helpers';\nimport { DEFAULT_NAME } from '../../Chat.constants';\n\nconst Aura = ({ onCallEnd = () => {} }) => {\n const conversation = useConversation();\n const { startSession, endSession, audioAnalyzers } = useOpenAiRealtimeSession();\n const { value: { assistant = {}, hotel = {}, id, locale, type, urlParams: { synapse = 'v1' } = {} } = {} } =\n useStore();\n const { translate } = useLocale();\n\n const [context, setContext] = useState(null);\n const [isConnecting, setIsConnecting] = useState(false);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n const callback = async () => {\n if (ready) handleCallEnd();\n };\n\n Event.subscribe(EVENT.SARAI_MESSAGE_SENT, callback);\n return () => {\n Event.unsubscribe(EVENT.SARAI_MESSAGE_SENT, callback);\n if (synapse === 'v2') callback();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [conversation, ready]);\n\n useEffect(() => {\n if (type === TYPE.CHAIN && !hotel.id) return;\n\n setContext({ hotelId: hotel.id });\n }, [hotel.id, type]);\n\n useEffect(() => {\n handleCallStart();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [context]);\n\n const handleCallStart = async () => {\n const { name: assistant_name = 'Sarai' } = assistant;\n const isChain = type === TYPE.CHAIN && !hotel.id;\n const chainId = isChain ? id : undefined;\n\n if (!navigator.mediaDevices || !conversation || (!context && !chainId)) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR' });\n return;\n }\n\n setIsConnecting(true);\n try {\n if (synapse === 'v2') {\n await startSession({\n assistant_name,\n chainId,\n hotelId: context?.hotelId,\n isChain,\n locale,\n setIsConnecting,\n setReady,\n });\n return;\n }\n\n await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const sessionConfig = {\n clientTools: { open_url: toolOpenUrl },\n dynamicVariables: { assistant_name, ...(chainId ? { chain_id: chainId } : { hotelId: context.hotelId }) },\n overrides: { agent: { language: locale.split('-')[0] } },\n signedUrl: await getSignedUrl(!!chainId),\n onConnect: () => {\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n setIsConnecting(false);\n setReady(true);\n },\n onDisconnect: handleCallEnd,\n onError: (error) => {\n setIsConnecting(false);\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n },\n };\n\n await conversation.startSession(sessionConfig);\n } catch (error) {\n setIsConnecting(false);\n }\n };\n\n const handleCallEnd = () => {\n if (synapse === 'v2') endSession();\n else conversation.endSession();\n setReady(false);\n onCallEnd();\n Event.publish(EVENT.METRICS, { id: 'AURA:CALL_END' });\n };\n\n return !(!context && !(type === TYPE.CHAIN && !hotel.id)) ? (\n <>\n <Waveform active={ready} conversation={synapse === 'v2' ? audioAnalyzers : conversation} />\n <View className={style.footer}>\n {isConnecting && <Text action>{translate(L10N.LABEL_CALLING, { name: assistant.name || DEFAULT_NAME })}</Text>}\n <Button\n busy={isConnecting}\n rounded\n squared\n large\n tooltip={translate(L10N.LABEL_HANG_UP)}\n onPress={handleCallEnd}\n className={styles(style.button, ready && style.ready)}\n >\n <Icon value={ICON.HANG_UP} />\n </Button>\n </View>\n </>\n ) : null;\n};\n\nAura.displayName = 'Mirai:Core:Chat.Aura';\n\nAura.propTypes = {\n onCallEnd: PropTypes.func,\n};\n\nexport { Aura };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Aura.js","names":["_react","require","_dataSources","_locale","_ui","_propTypes","_interopRequireDefault","_react2","_interopRequireWildcard","_Aura","style","_Aura2","_helpers","_useOpenAiRealtimeSession","_Core","_helpers2","_Chat","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","Aura","_ref","onCallEnd","conversation","useConversation","startSession","endSession","audioAnalyzers","useOpenAiRealtimeSession","assistant","currency","hotel","id","locale","type","urlParams","synapse","useStore","translate","useLocale","context","setContext","useState","isConnecting","setIsConnecting","ready","setReady","useEffect","TYPE","CHAIN","hotelId","handleCallEnd","useCallback","Event","publish","EVENT","METRICS","handleCallStart","callback","subscribe","CHAT_CLOSE","unsubscribe","name","assistant_name","isChain","chainId","undefined","navigator","mediaDevices","getUserMedia","audio","sessionConfig","clientTools","open_url","toolOpenUrl","dynamicVariables","chain_id","overrides","agent","language","split","signedUrl","getSignedUrl","onConnect","onDisconnect","onError","error","message","createElement","Fragment","Waveform","active","View","className","footer","Text","action","L10N","LABEL_CALLING","DEFAULT_NAME","Button","busy","rounded","squared","large","tooltip","LABEL_HANG_UP","onPress","styles","button","Icon","ICON","HANG_UP","exports","displayName","propTypes","PropTypes","func"],"sources":["../../../../../src/components/Chat/components/Aura/Aura.jsx"],"sourcesContent":["import { useConversation } from '@elevenlabs/react';\nimport { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Button, Icon, styles, Text, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { L10N } from './Aura.l10n';\nimport * as style from './Aura.module.css';\nimport { Waveform } from './Aura.waveform';\nimport { getSignedUrl, toolOpenUrl } from './helpers';\nimport { useOpenAiRealtimeSession } from './hooks/useOpenAiRealtimeSession';\nimport { TYPE } from '../../../../Core.constants';\nimport { EVENT, ICON } from '../../../helpers';\nimport { DEFAULT_NAME } from '../../Chat.constants';\n\nconst Aura = ({ onCallEnd = () => {} }) => {\n const conversation = useConversation();\n const { startSession, endSession, audioAnalyzers } = useOpenAiRealtimeSession();\n const { value: { assistant = {}, currency, hotel = {}, id, locale, type, urlParams: { synapse = 'v1' } = {} } = {} } =\n useStore();\n const { translate } = useLocale();\n\n const [context, setContext] = useState(null);\n const [isConnecting, setIsConnecting] = useState(false);\n const [ready, setReady] = useState(false);\n\n useEffect(() => {\n if (type === TYPE.CHAIN && !hotel.id) return;\n\n setContext({ hotelId: hotel.id });\n }, [hotel.id, type]);\n\n const handleCallEnd = useCallback(() => {\n if (synapse === 'v2') endSession();\n else conversation.endSession();\n setReady(false);\n onCallEnd();\n Event.publish(EVENT.METRICS, { id: 'AURA:CALL_END' });\n }, [conversation, endSession, onCallEnd, synapse]);\n\n useEffect(() => {\n handleCallStart();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [context]);\n\n useEffect(() => {\n const callback = () => {\n if (ready) handleCallEnd();\n };\n\n Event.subscribe(EVENT.CHAT_CLOSE, callback);\n return () => {\n Event.unsubscribe(EVENT.CHAT_CLOSE, callback);\n };\n }, [handleCallEnd, ready]);\n\n const handleCallStart = async () => {\n const { name: assistant_name = 'Sarai' } = assistant;\n const isChain = type === TYPE.CHAIN && !hotel.id;\n const chainId = isChain ? id : undefined;\n\n if (!navigator.mediaDevices || !conversation || (!context && !chainId)) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR' });\n return;\n }\n\n setIsConnecting(true);\n try {\n if (synapse === 'v2') {\n await startSession({\n assistant_name,\n chainId,\n currency,\n hotelId: context?.hotelId,\n isChain,\n locale,\n setIsConnecting,\n setReady,\n });\n return;\n }\n\n await navigator.mediaDevices.getUserMedia({ audio: true });\n\n const sessionConfig = {\n clientTools: { open_url: toolOpenUrl },\n dynamicVariables: { assistant_name, ...(chainId ? { chain_id: chainId } : { hotelId: context.hotelId }) },\n overrides: { agent: { language: locale.split('-')[0] } },\n signedUrl: await getSignedUrl(!!chainId),\n onConnect: () => {\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n setIsConnecting(false);\n setReady(true);\n },\n onDisconnect: handleCallEnd,\n onError: (error) => {\n setIsConnecting(false);\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n },\n };\n\n await conversation.startSession(sessionConfig);\n } catch (error) {\n setIsConnecting(false);\n }\n };\n\n return !(!context && !(type === TYPE.CHAIN && !hotel.id)) ? (\n <>\n <Waveform active={ready} conversation={synapse === 'v2' ? audioAnalyzers : conversation} />\n <View className={style.footer}>\n {isConnecting && <Text action>{translate(L10N.LABEL_CALLING, { name: assistant.name || DEFAULT_NAME })}</Text>}\n <Button\n busy={isConnecting}\n rounded\n squared\n large\n tooltip={translate(L10N.LABEL_HANG_UP)}\n onPress={handleCallEnd}\n className={styles(style.button, ready && style.ready)}\n >\n <Icon value={ICON.HANG_UP} />\n </Button>\n </View>\n </>\n ) : null;\n};\n\nAura.displayName = 'Mirai:Core:Chat.Aura';\n\nAura.propTypes = {\n onCallEnd: PropTypes.func,\n};\n\nexport { Aura };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,6 +19,7 @@ const createMcpState = () => ({
|
|
|
19
19
|
pendingCount: 0,
|
|
20
20
|
handledCallIds: new Set(),
|
|
21
21
|
handledApprovalIds: new Set(),
|
|
22
|
+
failedCallIds: new Set(),
|
|
22
23
|
responseIds: new Set(),
|
|
23
24
|
responsesDone: new Set(),
|
|
24
25
|
responsesWithMessage: new Set(),
|
|
@@ -37,6 +38,7 @@ const createFunctionState = () => ({
|
|
|
37
38
|
pendingCalls: new Map(),
|
|
38
39
|
pendingFollowup: false,
|
|
39
40
|
pendingFollowupReason: null,
|
|
41
|
+
pendingFollowupResponse: null,
|
|
40
42
|
handledOpenUrlCalls: new Set()
|
|
41
43
|
});
|
|
42
44
|
const useOpenAiRealtimeSession = () => {
|
|
@@ -147,17 +149,22 @@ const useOpenAiRealtimeSession = () => {
|
|
|
147
149
|
}
|
|
148
150
|
mcpStateRef.current = createMcpState();
|
|
149
151
|
}, []);
|
|
150
|
-
const sendResponseCreate = (0, _react.useCallback)(reason => {
|
|
152
|
+
const sendResponseCreate = (0, _react.useCallback)((reason, responseOverrides) => {
|
|
151
153
|
if (responseStateRef.current.activeId) {
|
|
152
154
|
functionStateRef.current.pendingFollowup = true;
|
|
153
155
|
functionStateRef.current.pendingFollowupReason = reason || null;
|
|
156
|
+
functionStateRef.current.pendingFollowupResponse = responseOverrides || null;
|
|
154
157
|
return false;
|
|
155
158
|
}
|
|
156
159
|
const channel = dataChannelRef.current;
|
|
157
160
|
if (channel && channel.readyState === 'open') {
|
|
158
|
-
|
|
161
|
+
const responsePayload = responseOverrides ? {
|
|
162
|
+
type: 'response.create',
|
|
163
|
+
response: responseOverrides
|
|
164
|
+
} : {
|
|
159
165
|
type: 'response.create'
|
|
160
|
-
}
|
|
166
|
+
};
|
|
167
|
+
channel.send(JSON.stringify(responsePayload));
|
|
161
168
|
return true;
|
|
162
169
|
}
|
|
163
170
|
return false;
|
|
@@ -277,14 +284,28 @@ const useOpenAiRealtimeSession = () => {
|
|
|
277
284
|
}));
|
|
278
285
|
return true;
|
|
279
286
|
}, []);
|
|
280
|
-
const requestFollowupResponse = (0, _react.useCallback)((reason, outputCallId) => {
|
|
287
|
+
const requestFollowupResponse = (0, _react.useCallback)((reason, outputCallId, responseOverrides) => {
|
|
281
288
|
functionStateRef.current.pendingFollowup = true;
|
|
282
289
|
functionStateRef.current.pendingFollowupReason = reason || null;
|
|
283
|
-
|
|
290
|
+
functionStateRef.current.pendingFollowupResponse = responseOverrides || null;
|
|
291
|
+
if (sendResponseCreate(reason || 'followup', responseOverrides)) {
|
|
284
292
|
mcpStateRef.current.resumeRequestedAny = true;
|
|
285
293
|
if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);
|
|
286
294
|
}
|
|
287
295
|
}, [sendResponseCreate]);
|
|
296
|
+
const buildMcpFailureInstructions = (0, _react.useCallback)(localeHint => {
|
|
297
|
+
const normalizedLocale = localeHint || 'en-US';
|
|
298
|
+
return "Respond in the language that matches the locale code \"".concat(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.");
|
|
299
|
+
}, []);
|
|
300
|
+
const handleMcpFailure = (0, _react.useCallback)((callId, localeHint) => {
|
|
301
|
+
const failureKey = callId || 'unknown';
|
|
302
|
+
if (mcpStateRef.current.failedCallIds.has(failureKey)) return;
|
|
303
|
+
mcpStateRef.current.failedCallIds.add(failureKey);
|
|
304
|
+
const instructions = buildMcpFailureInstructions(localeHint);
|
|
305
|
+
requestFollowupResponse('mcp_failed', callId, {
|
|
306
|
+
instructions
|
|
307
|
+
});
|
|
308
|
+
}, [buildMcpFailureInstructions, requestFollowupResponse]);
|
|
288
309
|
const handleOpenUrlCalls = (0, _react.useCallback)(_ref2 => {
|
|
289
310
|
let {
|
|
290
311
|
responseId,
|
|
@@ -334,6 +355,7 @@ const useOpenAiRealtimeSession = () => {
|
|
|
334
355
|
let {
|
|
335
356
|
assistant_name,
|
|
336
357
|
chainId,
|
|
358
|
+
currency,
|
|
337
359
|
hotelId,
|
|
338
360
|
isChain,
|
|
339
361
|
locale,
|
|
@@ -342,15 +364,35 @@ const useOpenAiRealtimeSession = () => {
|
|
|
342
364
|
} = _ref3;
|
|
343
365
|
cleanupRealtimeSession();
|
|
344
366
|
const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');
|
|
367
|
+
const finalizeSession = error => {
|
|
368
|
+
const errorMessage = typeof error === 'string' ? error : error === null || error === void 0 ? void 0 : error.message;
|
|
369
|
+
if (errorMessage) {
|
|
370
|
+
_dataSources.Event.publish(_helpers.EVENT.METRICS, {
|
|
371
|
+
id: 'AURA:ERROR',
|
|
372
|
+
error: errorMessage
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
cleanupRealtimeSession(true);
|
|
376
|
+
setReady(false);
|
|
377
|
+
setIsConnecting(false);
|
|
378
|
+
};
|
|
345
379
|
try {
|
|
346
380
|
const sessionResponse = await (0, _dataSources.request)({
|
|
347
|
-
endpoint: "/audio/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : ''),
|
|
381
|
+
endpoint: "/audio/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : '', "&locale=").concat(locale !== null && locale !== void 0 ? locale : '', "¤cy=").concat(currency !== null && currency !== void 0 ? currency : ''),
|
|
348
382
|
hostname: process.env.SERVICE_SYNAPSE,
|
|
349
383
|
method: 'GET'
|
|
350
384
|
});
|
|
351
385
|
const ephemeralKey = sessionResponse.value;
|
|
352
386
|
const peerConnection = new RTCPeerConnection();
|
|
353
387
|
peerConnectionRef.current = peerConnection;
|
|
388
|
+
peerConnection.addEventListener('connectionstatechange', () => {
|
|
389
|
+
const {
|
|
390
|
+
connectionState
|
|
391
|
+
} = peerConnection;
|
|
392
|
+
if (connectionState === 'failed' || connectionState === 'disconnected' || connectionState === 'closed') {
|
|
393
|
+
finalizeSession();
|
|
394
|
+
}
|
|
395
|
+
});
|
|
354
396
|
audioElementRef.current = document.createElement('audio');
|
|
355
397
|
audioElementRef.current.autoplay = true;
|
|
356
398
|
peerConnection.ontrack = _ref4 => {
|
|
@@ -415,6 +457,12 @@ const useOpenAiRealtimeSession = () => {
|
|
|
415
457
|
}
|
|
416
458
|
const dataChannel = peerConnection.createDataChannel('oai-events');
|
|
417
459
|
dataChannelRef.current = dataChannel;
|
|
460
|
+
dataChannel.addEventListener('close', () => {
|
|
461
|
+
finalizeSession();
|
|
462
|
+
});
|
|
463
|
+
dataChannel.addEventListener('error', event => {
|
|
464
|
+
finalizeSession(event);
|
|
465
|
+
});
|
|
418
466
|
dataChannel.addEventListener('open', () => {
|
|
419
467
|
pendingUserTranscriptRef.current = '';
|
|
420
468
|
_dataSources.Event.publish(_helpers.EVENT.METRICS, {
|
|
@@ -498,19 +546,26 @@ const useOpenAiRealtimeSession = () => {
|
|
|
498
546
|
if (payload.item_id) sendItemRetrieve(payload.item_id);
|
|
499
547
|
}
|
|
500
548
|
if (payload.type === 'response.output_item.done' && (((_payload$item9 = payload.item) === null || _payload$item9 === void 0 ? void 0 : _payload$item9.type) === 'mcp_call' || ((_payload$item0 = payload.item) === null || _payload$item0 === void 0 ? void 0 : _payload$item0.type) === 'mcp_tool_call')) {
|
|
549
|
+
var _payload$item1, _payload$item10;
|
|
550
|
+
if ((_payload$item1 = payload.item) !== null && _payload$item1 !== void 0 && _payload$item1.error || ((_payload$item10 = payload.item) === null || _payload$item10 === void 0 ? void 0 : _payload$item10.status) === 'failed') {
|
|
551
|
+
handleMcpFailure(callId, locale);
|
|
552
|
+
}
|
|
501
553
|
handleMcpCompletion(callId);
|
|
502
554
|
}
|
|
503
555
|
if (payload.type === 'response.mcp_call.completed' || payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.completed' || payload.type === 'response.mcp_tool_call.failed') {
|
|
556
|
+
if (payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.failed') {
|
|
557
|
+
handleMcpFailure(callId, locale);
|
|
558
|
+
}
|
|
504
559
|
handleMcpCompletion(callId);
|
|
505
560
|
}
|
|
506
561
|
if (payload.type === 'conversation.item.added' || payload.type === 'conversation.item.retrieved') {
|
|
507
|
-
var _payload$
|
|
508
|
-
if (((_payload$
|
|
562
|
+
var _payload$item11, _payload$item12, _payload$item13;
|
|
563
|
+
if (((_payload$item11 = payload.item) === null || _payload$item11 === void 0 ? void 0 : _payload$item11.type) === 'mcp_call' || ((_payload$item12 = payload.item) === null || _payload$item12 === void 0 ? void 0 : _payload$item12.type) === 'mcp_tool_call') {
|
|
509
564
|
trackMcpStart(callId);
|
|
510
565
|
}
|
|
511
|
-
if (((_payload$
|
|
512
|
-
var _payload$
|
|
513
|
-
const approvalId = ((_payload$
|
|
566
|
+
if (((_payload$item13 = payload.item) === null || _payload$item13 === void 0 ? void 0 : _payload$item13.type) === 'mcp_approval_request') {
|
|
567
|
+
var _payload$item14;
|
|
568
|
+
const approvalId = ((_payload$item14 = payload.item) === null || _payload$item14 === void 0 ? void 0 : _payload$item14.id) || payload.item_id || null;
|
|
514
569
|
if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {
|
|
515
570
|
mcpStateRef.current.handledApprovalIds.add(approvalId);
|
|
516
571
|
sendMcpApproval(approvalId, true);
|
|
@@ -518,13 +573,17 @@ const useOpenAiRealtimeSession = () => {
|
|
|
518
573
|
}
|
|
519
574
|
}
|
|
520
575
|
if (payload.type === 'conversation.item.done') {
|
|
521
|
-
var _payload$
|
|
522
|
-
if (((_payload$
|
|
576
|
+
var _payload$item15, _payload$item16, _payload$item19;
|
|
577
|
+
if (((_payload$item15 = payload.item) === null || _payload$item15 === void 0 ? void 0 : _payload$item15.type) === 'mcp_call' || ((_payload$item16 = payload.item) === null || _payload$item16 === void 0 ? void 0 : _payload$item16.type) === 'mcp_tool_call') {
|
|
578
|
+
var _payload$item17, _payload$item18;
|
|
579
|
+
if (((_payload$item17 = payload.item) === null || _payload$item17 === void 0 ? void 0 : _payload$item17.status) === 'failed' || (_payload$item18 = payload.item) !== null && _payload$item18 !== void 0 && _payload$item18.error) {
|
|
580
|
+
handleMcpFailure(callId, locale);
|
|
581
|
+
}
|
|
523
582
|
handleMcpCompletion(callId);
|
|
524
583
|
}
|
|
525
|
-
if (((_payload$
|
|
526
|
-
var _payload$
|
|
527
|
-
const approvalId = ((_payload$
|
|
584
|
+
if (((_payload$item19 = payload.item) === null || _payload$item19 === void 0 ? void 0 : _payload$item19.type) === 'mcp_approval_request') {
|
|
585
|
+
var _payload$item20;
|
|
586
|
+
const approvalId = ((_payload$item20 = payload.item) === null || _payload$item20 === void 0 ? void 0 : _payload$item20.id) || payload.item_id || null;
|
|
528
587
|
if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {
|
|
529
588
|
mcpStateRef.current.handledApprovalIds.add(approvalId);
|
|
530
589
|
sendMcpApproval(approvalId, true);
|
|
@@ -544,9 +603,13 @@ const useOpenAiRealtimeSession = () => {
|
|
|
544
603
|
}
|
|
545
604
|
} else if (mcpStateRef.current.pending) {
|
|
546
605
|
if (status === 'failed') {
|
|
547
|
-
|
|
606
|
+
if (mcpStateRef.current.failedCallIds.size === 0) {
|
|
607
|
+
scheduleResumeRetry(callId);
|
|
608
|
+
}
|
|
548
609
|
} else if (status === 'cancelled' && reason !== 'turn_detected') {
|
|
549
|
-
|
|
610
|
+
if (mcpStateRef.current.failedCallIds.size === 0) {
|
|
611
|
+
scheduleResumeRetry(callId);
|
|
612
|
+
}
|
|
550
613
|
}
|
|
551
614
|
}
|
|
552
615
|
resumeMcpIfNeeded(callId);
|
|
@@ -572,9 +635,11 @@ const useOpenAiRealtimeSession = () => {
|
|
|
572
635
|
}
|
|
573
636
|
if (functionStateRef.current.pendingFollowup) {
|
|
574
637
|
const reason = functionStateRef.current.pendingFollowupReason;
|
|
638
|
+
const responseOverrides = functionStateRef.current.pendingFollowupResponse;
|
|
575
639
|
functionStateRef.current.pendingFollowup = false;
|
|
576
640
|
functionStateRef.current.pendingFollowupReason = null;
|
|
577
|
-
|
|
641
|
+
functionStateRef.current.pendingFollowupResponse = null;
|
|
642
|
+
sendResponseCreate(reason || 'followup', responseOverrides);
|
|
578
643
|
}
|
|
579
644
|
}
|
|
580
645
|
if (payload.type === 'response.output_audio_transcript.done') {
|
|
@@ -655,7 +720,7 @@ const useOpenAiRealtimeSession = () => {
|
|
|
655
720
|
} finally {
|
|
656
721
|
setIsConnecting(false);
|
|
657
722
|
}
|
|
658
|
-
}, [cleanupRealtimeSession, clearPendingMcp, enableMicrophone, handleMcpCompletion, handleOpenUrlCalls, resumeMcpIfNeeded, scheduleResumeRetry, sendItemRetrieve, sendMcpApproval, sendResponseCreate, trackMcpStart, upsertFunctionCall, getFunctionCallKey]);
|
|
723
|
+
}, [cleanupRealtimeSession, clearPendingMcp, enableMicrophone, handleMcpCompletion, handleMcpFailure, handleOpenUrlCalls, resumeMcpIfNeeded, scheduleResumeRetry, sendItemRetrieve, sendMcpApproval, sendResponseCreate, trackMcpStart, upsertFunctionCall, getFunctionCallKey]);
|
|
659
724
|
const endSession = (0, _react.useCallback)(() => {
|
|
660
725
|
cleanupRealtimeSession(true);
|
|
661
726
|
}, [cleanupRealtimeSession]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_lobby","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","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","resumeAfterActive","createFunctionState","pendingCalls","Map","pendingFollowup","pendingFollowupReason","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","sendResponseCreate","reason","channel","resumeMcpIfNeeded","outputCallId","delete","has","size","shouldResume","some","responseId","add","trackMcpStart","callId","getFunctionCallKey","name","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","requestFollowupResponse","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","Array","isArray","id","values","callKey","error","allowed_prefix","window","location","assign","startSession","_ref3","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","document","createElement","autoplay","ontrack","_ref4","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","Event","publish","EVENT","METRICS","localeHint","introductionMessage","response","instructions","event","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","_payload$item7","_payload$item8","_payload$item1","_payload$item10","_payload$item11","_payload$item12","approvalId","_payload$item13","_payload$item14","_payload$item15","_payload$item16","_response$status_deta","_response$status_deta2","_response$status_deta3","hasMessage","status","status_details","code","_payload$transcript","transcript","_payload$transcript2","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","message","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 } from '../../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\n\nconst createMcpState = () => ({\n pending: false,\n pendingCallIds: new Set(),\n pendingCount: 0,\n handledCallIds: new Set(),\n handledApprovalIds: 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 resumeAfterActive: false,\n});\n\nconst createFunctionState = () => ({\n pendingCalls: new Map(),\n pendingFollowup: false,\n pendingFollowupReason: 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://reservation.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 sendResponseCreate = useCallback((reason) => {\n if (responseStateRef.current.activeId) {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n return false;\n }\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n channel.send(JSON.stringify({ type: 'response.create' }));\n return true;\n }\n return false;\n }, []);\n\n const resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (!mcpStateRef.current.pending || mcpStateRef.current.pendingCount > 0) return;\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return;\n if (!outputCallId && mcpStateRef.current.resumeRequestedCallIds.size > 0) return;\n const shouldResume = [...mcpStateRef.current.responseIds].some(\n (responseId) =>\n mcpStateRef.current.responsesDone.has(responseId) &&\n !mcpStateRef.current.responsesWithMessage.has(responseId),\n );\n if (!shouldResume) return;\n if (sendResponseCreate('mcp_completed')) {\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n if (!outputCallId) mcpStateRef.current.resumeRequestedAny = true;\n } else if (responseStateRef.current.activeId) {\n responseStateRef.current.resumeAfterActive = true;\n }\n },\n [sendResponseCreate],\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) => {\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 resumeMcpIfNeeded(outputCallId);\n },\n [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 resumeMcpIfNeeded(outputCallId);\n }, delay);\n },\n [clearPendingMcp, resumeMcpIfNeeded],\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 requestFollowupResponse = useCallback(\n (reason, outputCallId) => {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n if (sendResponseCreate(reason || 'followup')) {\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n }\n },\n [sendResponseCreate],\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://reservation.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 ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/audio/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\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\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\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: '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) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped') {\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 }\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 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 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 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') {\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 scheduleResumeRetry(callId);\n } else if (status === 'cancelled' && reason !== 'turn_detected') {\n scheduleResumeRetry(callId);\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 if (responseStateRef.current.resumeAfterActive) {\n responseStateRef.current.resumeAfterActive = false;\n mcpStateRef.current.resumeRequestedAny = false;\n resumeMcpIfNeeded();\n }\n if (functionStateRef.current.pendingFollowup) {\n const reason = functionStateRef.current.pendingFollowupReason;\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n sendResponseCreate(reason || 'followup');\n }\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 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: '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\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: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendItemRetrieve,\n sendMcpApproval,\n sendResponseCreate,\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":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAAkF,SAAAI,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;AAElF,MAAM8B,cAAc,GAAGA,CAAA,MAAO;EAC5BC,OAAO,EAAE,KAAK;EACdC,cAAc,EAAE,IAAIC,GAAG,CAAC,CAAC;EACzBC,YAAY,EAAE,CAAC;EACfC,cAAc,EAAE,IAAIF,GAAG,CAAC,CAAC;EACzBG,kBAAkB,EAAE,IAAIH,GAAG,CAAC,CAAC;EAC7BI,WAAW,EAAE,IAAIJ,GAAG,CAAC,CAAC;EACtBK,aAAa,EAAE,IAAIL,GAAG,CAAC,CAAC;EACxBM,oBAAoB,EAAE,IAAIN,GAAG,CAAC,CAAC;EAC/BO,sBAAsB,EAAE,IAAIP,GAAG,CAAC,CAAC;EACjCQ,kBAAkB,EAAE,KAAK;EACzBC,KAAK,EAAE;IAAEC,KAAK,EAAE,CAAC;IAAEC,SAAS,EAAE;EAAK;AACrC,CAAC,CAAC;AAEF,MAAMC,mBAAmB,GAAGA,CAAA,MAAO;EACjCC,QAAQ,EAAE,IAAI;EACdC,iBAAiB,EAAE;AACrB,CAAC,CAAC;AAEF,MAAMC,mBAAmB,GAAGA,CAAA,MAAO;EACjCC,YAAY,EAAE,IAAIC,GAAG,CAAC,CAAC;EACvBC,eAAe,EAAE,KAAK;EACtBC,qBAAqB,EAAE,IAAI;EAC3BC,mBAAmB,EAAE,IAAIpB,GAAG,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAMqB,wBAAwB,GAAGA,CAAA,KAAM;EACrC,MAAMC,eAAe,GAAG,IAAAC,aAAM,EAAC,IAAI,CAAC;EACpC,MAAMC,eAAe,GAAG,IAAAD,aAAM,EAAC,IAAI,CAAC;EACpC,MAAME,iBAAiB,GAAG,IAAAF,aAAM,EAAC,IAAI,CAAC;EACtC,MAAMG,cAAc,GAAG,IAAAH,aAAM,EAAC,IAAI,CAAC;EACnC,MAAMI,cAAc,GAAG,IAAAJ,aAAM,EAAC,IAAI,CAAC;EACnC,MAAMK,kBAAkB,GAAG,IAAAL,aAAM,EAAC,IAAI,CAAC;EACvC,MAAMM,oBAAoB,GAAG,IAAAN,aAAM,EAAC,KAAK,CAAC;EAC1C,MAAMO,eAAe,GAAG,IAAAP,aAAM,EAAC,KAAK,CAAC;EACrC,MAAMQ,kBAAkB,GAAG,IAAAR,aAAM,EAAC,IAAI,CAAC;EACvC,MAAMS,WAAW,GAAG,IAAAT,aAAM,EAAC1B,cAAc,CAAC,CAAC,CAAC;EAC5C,MAAMoC,gBAAgB,GAAG,IAAAV,aAAM,EAACX,mBAAmB,CAAC,CAAC,CAAC;EACtD,MAAMsB,gBAAgB,GAAG,IAAAX,aAAM,EAACR,mBAAmB,CAAC,CAAC,CAAC;EACtD,MAAMoB,wBAAwB,GAAG,IAAAZ,aAAM,EAAC,EAAE,CAAC;EAC3C,MAAMa,cAAc,GAAG,IAAAb,aAAM,EAAC,IAAI,CAAC;EACnC,MAAMc,eAAe,GAAG,IAAAd,aAAM,EAAC,IAAI,CAAC;EACpC,MAAMe,qBAAqB,GAAG,IAAAf,aAAM,EAAC,IAAI,CAAC;EAC1C,MAAMgB,sBAAsB,GAAG,IAAAhB,aAAM,EAAC,IAAI,CAAC;EAC3C,MAAMiB,iBAAiB,GAAG,IAAAjB,aAAM,EAAC;IAC/BkB,aAAa,EAAE,IAAI;IACnBC,cAAc,EAAE,IAAI;IACpBC,yBAAyB,EAAEA,CAAA,KAAM,IAAI;IACrCC,0BAA0B,EAAEA,CAAA,KAAM;EACpC,CAAC,CAAC;EAEF,MAAMC,sBAAsB,GAAG,IAAAC,kBAAW,EAAC,YAA0B;IAAA,IAAzBC,YAAY,GAAArE,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAsE,SAAA,GAAAtE,SAAA,MAAG,KAAK;IAC9D,MAAMuE,WAAW,GAAGvB,cAAc,CAACwB,OAAO;IAC1C,IAAID,WAAW,EAAE;MACf,IAAIF,YAAY,IAAIE,WAAW,CAACE,UAAU,KAAK,MAAM,EAAE;QACrDF,WAAW,CAACG,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;UAAEC,IAAI,EAAE;QAAgB,CAAC,CAAC,CAAC;MAC7D;MACAN,WAAW,CAACO,KAAK,CAAC,CAAC;MACnB9B,cAAc,CAACwB,OAAO,GAAG,IAAI;IAC/B;IAEA,MAAMO,cAAc,GAAGhC,iBAAiB,CAACyB,OAAO;IAChD,IAAIO,cAAc,EAAE;MAClBA,cAAc,CAACC,UAAU,CAAC,CAAC,CAAC9E,OAAO,CAAE+E,MAAM,IAAK;QAC9C,IAAIA,MAAM,CAACC,KAAK,EAAED,MAAM,CAACC,KAAK,CAACC,IAAI,CAAC,CAAC;MACvC,CAAC,CAAC;MACFJ,cAAc,CAACD,KAAK,CAAC,CAAC;MACtB/B,iBAAiB,CAACyB,OAAO,GAAG,IAAI;IAClC;IAEA,MAAMY,WAAW,GAAGnC,cAAc,CAACuB,OAAO;IAC1C,IAAIY,WAAW,EAAE;MACfA,WAAW,CAACC,SAAS,CAAC,CAAC,CAACnF,OAAO,CAAEgF,KAAK,IAAKA,KAAK,CAACC,IAAI,CAAC,CAAC,CAAC;MACxDlC,cAAc,CAACuB,OAAO,GAAG,IAAI;IAC/B;IAEAtB,kBAAkB,CAACsB,OAAO,GAAG,IAAI;IACjCrB,oBAAoB,CAACqB,OAAO,GAAG,KAAK;IACpCpB,eAAe,CAACoB,OAAO,GAAG,KAAK;IAC/BnB,kBAAkB,CAACmB,OAAO,GAAG,IAAI;IACjC,IAAIlB,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,EAAE;MACvCqD,YAAY,CAAChC,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,CAAC;IACnD;IACAqB,WAAW,CAACkB,OAAO,GAAGrD,cAAc,CAAC,CAAC;IACtCoC,gBAAgB,CAACiB,OAAO,GAAGtC,mBAAmB,CAAC,CAAC;IAChDsB,gBAAgB,CAACgB,OAAO,GAAGnC,mBAAmB,CAAC,CAAC;IAEhD,IAAIO,eAAe,CAAC4B,OAAO,EAAE;MAC3B5B,eAAe,CAAC4B,OAAO,CAACe,SAAS,GAAG,IAAI;MACxC3C,eAAe,CAAC4B,OAAO,GAAG,IAAI;IAChC;IAEA,IAAId,cAAc,CAACc,OAAO,EAAE;MAC1Bd,cAAc,CAACc,OAAO,CAACgB,UAAU,CAAC,CAAC;MACnC9B,cAAc,CAACc,OAAO,GAAG,IAAI;IAC/B;IAEA,IAAIb,eAAe,CAACa,OAAO,EAAE;MAC3Bb,eAAe,CAACa,OAAO,CAACgB,UAAU,CAAC,CAAC;MACpC7B,eAAe,CAACa,OAAO,GAAG,IAAI;IAChC;IAEAV,iBAAiB,CAACU,OAAO,CAACT,aAAa,GAAG,IAAI;IAC9CD,iBAAiB,CAACU,OAAO,CAACR,cAAc,GAAG,IAAI;IAC/CF,iBAAiB,CAACU,OAAO,CAACP,yBAAyB,GAAG,MAAM,IAAI;IAChEH,iBAAiB,CAACU,OAAO,CAACN,0BAA0B,GAAG,MAAM,IAAI;IACjEN,qBAAqB,CAACY,OAAO,GAAG,IAAI;IACpCX,sBAAsB,CAACW,OAAO,GAAG,IAAI;IAErC,MAAMiB,YAAY,GAAG3C,eAAe,CAAC0B,OAAO;IAC5C,IAAIiB,YAAY,EAAE;MAChBA,YAAY,CAACX,KAAK,CAAC,CAAC;MACpBhC,eAAe,CAAC0B,OAAO,GAAG,IAAI;IAChC;IAEAf,wBAAwB,CAACe,OAAO,GAAG,EAAE;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMkB,aAAa,GAAG,IAAAtB,kBAAW,EAAE5D,KAAK,IAAK;IAC3C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAO,IAAI;IAC1C,IAAI;MACF,OAAOmE,IAAI,CAACgB,KAAK,CAACnF,KAAK,CAAC;IAC1B,CAAC,CAAC,OAAAoF,OAAA,EAAM;MACN,OAAO,IAAI;IACb;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,gBAAgB,GAAG,IAAAzB,kBAAW,EAAE0B,GAAG,IAAK;IAC5C,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;IACzC,OAAOA,GAAG,CAACC,IAAI,CAAC,CAAC,CAACC,UAAU,CAAC,2BAA2B,CAAC;EAC3D,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,gBAAgB,GAAG,IAAA7B,kBAAW,EAAC,MAAM;IACzC,MAAMc,KAAK,GAAGhC,kBAAkB,CAACsB,OAAO;IACxC,IAAI,CAACU,KAAK,IAAI/B,oBAAoB,CAACqB,OAAO,EAAE;IAC5CU,KAAK,CAACgB,OAAO,GAAG,IAAI;IACpB/C,oBAAoB,CAACqB,OAAO,GAAG,IAAI;EACrC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM2B,eAAe,GAAG,IAAA/B,kBAAW,EAAC,MAAM;IACxC,IAAId,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,EAAE;MACvCqD,YAAY,CAAChC,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,CAAC;IACnD;IACAqB,WAAW,CAACkB,OAAO,GAAGrD,cAAc,CAAC,CAAC;EACxC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMiF,kBAAkB,GAAG,IAAAhC,kBAAW,EAAEiC,MAAM,IAAK;IACjD,IAAI9C,gBAAgB,CAACiB,OAAO,CAACrC,QAAQ,EAAE;MACrCqB,gBAAgB,CAACgB,OAAO,CAAChC,eAAe,GAAG,IAAI;MAC/CgB,gBAAgB,CAACgB,OAAO,CAAC/B,qBAAqB,GAAG4D,MAAM,IAAI,IAAI;MAC/D,OAAO,KAAK;IACd;IACA,MAAMC,OAAO,GAAGtD,cAAc,CAACwB,OAAO;IACtC,IAAI8B,OAAO,IAAIA,OAAO,CAAC7B,UAAU,KAAK,MAAM,EAAE;MAC5C6B,OAAO,CAAC5B,IAAI,CAACC,IAAI,CAACC,SAAS,CAAC;QAAEC,IAAI,EAAE;MAAkB,CAAC,CAAC,CAAC;MACzD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM0B,iBAAiB,GAAG,IAAAnC,kBAAW,EAClCoC,YAAY,IAAK;IAChB,IAAIA,YAAY,EAAE;MAChBlD,WAAW,CAACkB,OAAO,CAACnD,cAAc,CAACoF,MAAM,CAACD,YAAY,CAAC;IACzD;IACA,IAAI,CAAClD,WAAW,CAACkB,OAAO,CAACpD,OAAO,IAAIkC,WAAW,CAACkB,OAAO,CAACjD,YAAY,GAAG,CAAC,EAAE;IAC1E,IAAIiF,YAAY,IAAIlD,WAAW,CAACkB,OAAO,CAAC3C,sBAAsB,CAAC6E,GAAG,CAACF,YAAY,CAAC,EAAE;IAClF,IAAI,CAACA,YAAY,IAAIlD,WAAW,CAACkB,OAAO,CAAC1C,kBAAkB,EAAE;IAC7D,IAAI,CAAC0E,YAAY,IAAIlD,WAAW,CAACkB,OAAO,CAAC3C,sBAAsB,CAAC8E,IAAI,GAAG,CAAC,EAAE;IAC1E,MAAMC,YAAY,GAAG,CAAC,GAAGtD,WAAW,CAACkB,OAAO,CAAC9C,WAAW,CAAC,CAACmF,IAAI,CAC3DC,UAAU,IACTxD,WAAW,CAACkB,OAAO,CAAC7C,aAAa,CAAC+E,GAAG,CAACI,UAAU,CAAC,IACjD,CAACxD,WAAW,CAACkB,OAAO,CAAC5C,oBAAoB,CAAC8E,GAAG,CAACI,UAAU,CAC5D,CAAC;IACD,IAAI,CAACF,YAAY,EAAE;IACnB,IAAIR,kBAAkB,CAAC,eAAe,CAAC,EAAE;MACvC,IAAII,YAAY,EAAElD,WAAW,CAACkB,OAAO,CAAC3C,sBAAsB,CAACkF,GAAG,CAACP,YAAY,CAAC;MAC9E,IAAI,CAACA,YAAY,EAAElD,WAAW,CAACkB,OAAO,CAAC1C,kBAAkB,GAAG,IAAI;IAClE,CAAC,MAAM,IAAIyB,gBAAgB,CAACiB,OAAO,CAACrC,QAAQ,EAAE;MAC5CoB,gBAAgB,CAACiB,OAAO,CAACpC,iBAAiB,GAAG,IAAI;IACnD;EACF,CAAC,EACD,CAACgE,kBAAkB,CACrB,CAAC;EAED,MAAMY,aAAa,GAAG,IAAA5C,kBAAW,EAAE6C,MAAM,IAAK;IAC5C3D,WAAW,CAACkB,OAAO,CAACpD,OAAO,GAAG,IAAI;IAClC,IAAI6F,MAAM,EAAE;MACV,IAAI3D,WAAW,CAACkB,OAAO,CAAChD,cAAc,CAACkF,GAAG,CAACO,MAAM,CAAC,EAAE;MACpD,IAAI3D,WAAW,CAACkB,OAAO,CAACnD,cAAc,CAACqF,GAAG,CAACO,MAAM,CAAC,EAAE;MACpD3D,WAAW,CAACkB,OAAO,CAACnD,cAAc,CAAC0F,GAAG,CAACE,MAAM,CAAC;MAC9C3D,WAAW,CAACkB,OAAO,CAACjD,YAAY,IAAI,CAAC;MACrC;IACF;IACA+B,WAAW,CAACkB,OAAO,CAACjD,YAAY,IAAI,CAAC;EACvC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAM2F,kBAAkB,GAAG,IAAA9C,kBAAW,EAAC,CAAC6C,MAAM,EAAEH,UAAU,EAAEK,IAAI,KAAK;IACnE,IAAIF,MAAM,EAAE,OAAOA,MAAM;IACzB,IAAIH,UAAU,IAAIK,IAAI,EAAE,UAAAC,MAAA,CAAUN,UAAU,OAAAM,MAAA,CAAID,IAAI;IACpD,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,kBAAkB,GAAG,IAAAjD,kBAAW,EAACkD,IAAA,IAA6C;IAAA,IAA5C;MAAEC,GAAG;MAAEJ,IAAI;MAAEL,UAAU;MAAEG,MAAM;MAAEO;IAAK,CAAC,GAAAF,IAAA;IAC7E,IAAI,CAACC,GAAG,EAAE;IACV,MAAME,QAAQ,GAAGjE,gBAAgB,CAACgB,OAAO,CAAClC,YAAY,CAACoF,GAAG,CAACH,GAAG,CAAC,IAAI;MAAEA;IAAI,CAAC;IAC1E/D,gBAAgB,CAACgB,OAAO,CAAClC,YAAY,CAACqF,GAAG,CAACJ,GAAG,EAAAxH,aAAA,CAAAA,aAAA,KACxC0H,QAAQ;MACXN,IAAI,EAAEA,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAIM,QAAQ,CAACN,IAAI;MAC3BL,UAAU,EAAEA,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAIW,QAAQ,CAACX,UAAU;MAC7CG,MAAM,EAAEA,MAAM,aAANA,MAAM,cAANA,MAAM,GAAIQ,QAAQ,CAACR,MAAM;MACjCO,IAAI,EAAEA,IAAI,aAAJA,IAAI,cAAJA,IAAI,GAAIC,QAAQ,CAACD;IAAI,EAC5B,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,mBAAmB,GAAG,IAAAxD,kBAAW,EACpCoC,YAAY,IAAK;IAChBlD,WAAW,CAACkB,OAAO,CAACpD,OAAO,GAAG,IAAI;IAClC,IAAIoF,YAAY,EAAE;MAChB,IAAIlD,WAAW,CAACkB,OAAO,CAAChD,cAAc,CAACkF,GAAG,CAACF,YAAY,CAAC,EAAE;MAC1DlD,WAAW,CAACkB,OAAO,CAAChD,cAAc,CAACuF,GAAG,CAACP,YAAY,CAAC;IACtD;IACA,IAAIlD,WAAW,CAACkB,OAAO,CAACjD,YAAY,GAAG,CAAC,EAAE+B,WAAW,CAACkB,OAAO,CAACjD,YAAY,IAAI,CAAC;IAC/EgF,iBAAiB,CAACC,YAAY,CAAC;EACjC,CAAC,EACD,CAACD,iBAAiB,CACpB,CAAC;EAED,MAAMsB,mBAAmB,GAAG,IAAAzD,kBAAW,EACpCoC,YAAY,IAAK;IAChB,IAAI,CAAClD,WAAW,CAACkB,OAAO,CAACpD,OAAO,EAAE;IAClC,IAAIkC,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,EAAE;IACzC,IAAIqB,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACC,KAAK,IAAI,CAAC,EAAE;MACxCmE,eAAe,CAAC,CAAC;MACjB;IACF;IACA,MAAM2B,OAAO,GAAGxE,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACC,KAAK,GAAG,CAAC;IACnD,MAAM+F,KAAK,GAAGD,OAAO,GAAG,GAAG;IAC3BxE,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACC,KAAK,GAAG8F,OAAO;IACzCxE,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,GAAG+F,UAAU,CAAC,MAAM;MACrD1E,WAAW,CAACkB,OAAO,CAACzC,KAAK,CAACE,SAAS,GAAG,IAAI;MAC1C,IAAIuE,YAAY,EAAElD,WAAW,CAACkB,OAAO,CAAC3C,sBAAsB,CAAC4E,MAAM,CAACD,YAAY,CAAC;MACjFlD,WAAW,CAACkB,OAAO,CAAC1C,kBAAkB,GAAG,KAAK;MAC9CyE,iBAAiB,CAACC,YAAY,CAAC;IACjC,CAAC,EAAEuB,KAAK,CAAC;EACX,CAAC,EACD,CAAC5B,eAAe,EAAEI,iBAAiB,CACrC,CAAC;EAED,MAAM0B,sBAAsB,GAAG,IAAA7D,kBAAW,EAAC,CAAC6C,MAAM,EAAEiB,MAAM,KAAK;IAC7D,MAAM5B,OAAO,GAAGtD,cAAc,CAACwB,OAAO;IACtC,IAAI,CAACyC,MAAM,IAAI,CAACX,OAAO,IAAIA,OAAO,CAAC7B,UAAU,KAAK,MAAM,EAAE,OAAO,KAAK;IACtE6B,OAAO,CAAC5B,IAAI,CACVC,IAAI,CAACC,SAAS,CAAC;MACbC,IAAI,EAAE,0BAA0B;MAChCsD,IAAI,EAAE;QACJtD,IAAI,EAAE,sBAAsB;QAC5BuD,OAAO,EAAEnB,MAAM;QACfiB,MAAM,EAAEvD,IAAI,CAACC,SAAS,CAACsD,MAAM,IAAI,CAAC,CAAC;MACrC;IACF,CAAC,CACH,CAAC;IACD,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,gBAAgB,GAAG,IAAAjE,kBAAW,EAAEkE,MAAM,IAAK;IAC/C,MAAMhC,OAAO,GAAGtD,cAAc,CAACwB,OAAO;IACtC,IAAI,CAAC8D,MAAM,IAAI,CAAChC,OAAO,IAAIA,OAAO,CAAC7B,UAAU,KAAK,MAAM,EAAE,OAAO,KAAK;IACtE6B,OAAO,CAAC5B,IAAI,CACVC,IAAI,CAACC,SAAS,CAAC;MACbC,IAAI,EAAE,4BAA4B;MAClC0D,OAAO,EAAED;IACX,CAAC,CACH,CAAC;IACD,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,eAAe,GAAG,IAAApE,kBAAW,EAAC,UAACqE,iBAAiB,EAAqB;IAAA,IAAnBC,OAAO,GAAA1I,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAsE,SAAA,GAAAtE,SAAA,MAAG,IAAI;IACpE,MAAMsG,OAAO,GAAGtD,cAAc,CAACwB,OAAO;IACtC,IAAI,CAACiE,iBAAiB,IAAI,CAACnC,OAAO,IAAIA,OAAO,CAAC7B,UAAU,KAAK,MAAM,EAAE,OAAO,KAAK;IACjF6B,OAAO,CAAC5B,IAAI,CACVC,IAAI,CAACC,SAAS,CAAC;MACbC,IAAI,EAAE,0BAA0B;MAChC8D,gBAAgB,EAAEF,iBAAiB;MACnCN,IAAI,EAAE;QACJtD,IAAI,EAAE,uBAAuB;QAC7B+D,mBAAmB,EAAEH,iBAAiB;QACtCC;MACF;IACF,CAAC,CACH,CAAC;IACD,OAAO,IAAI;EACb,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMG,uBAAuB,GAAG,IAAAzE,kBAAW,EACzC,CAACiC,MAAM,EAAEG,YAAY,KAAK;IACxBhD,gBAAgB,CAACgB,OAAO,CAAChC,eAAe,GAAG,IAAI;IAC/CgB,gBAAgB,CAACgB,OAAO,CAAC/B,qBAAqB,GAAG4D,MAAM,IAAI,IAAI;IAC/D,IAAID,kBAAkB,CAACC,MAAM,IAAI,UAAU,CAAC,EAAE;MAC5C/C,WAAW,CAACkB,OAAO,CAAC1C,kBAAkB,GAAG,IAAI;MAC7C,IAAI0E,YAAY,EAAElD,WAAW,CAACkB,OAAO,CAAC3C,sBAAsB,CAACkF,GAAG,CAACP,YAAY,CAAC;IAChF;EACF,CAAC,EACD,CAACJ,kBAAkB,CACrB,CAAC;EAED,MAAM0C,kBAAkB,GAAG,IAAA1E,kBAAW,EACpC2E,KAAA,IAAiC;IAAA,IAAhC;MAAEjC,UAAU;MAAEkC;IAAY,CAAC,GAAAD,KAAA;IAC1B,MAAME,oBAAoB,GAAGC,KAAK,CAACC,OAAO,CAACH,WAAW,CAAC,GACnDA,WAAW,CAACtJ,MAAM,CAAEyI,IAAI,IAAK,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEtD,IAAI,MAAK,eAAe,IAAI,CAAAsD,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEhB,IAAI,MAAK,UAAU,CAAC,GACzF,EAAE;IACN8B,oBAAoB,CAAC/I,OAAO,CAAEiI,IAAI,IAAK;MACrC,MAAMZ,GAAG,GAAGL,kBAAkB,CAACiB,IAAI,CAACC,OAAO,IAAID,IAAI,CAACiB,EAAE,IAAI,IAAI,EAAEtC,UAAU,EAAEqB,IAAI,CAAChB,IAAI,CAAC;MACtFE,kBAAkB,CAAC;QACjBE,GAAG;QACHJ,IAAI,EAAEgB,IAAI,CAAChB,IAAI;QACfL,UAAU;QACVG,MAAM,EAAEkB,IAAI,CAACC,OAAO,IAAID,IAAI,CAACiB,EAAE,IAAI,IAAI;QACvC5B,IAAI,EAAEW,IAAI,CAACnI,SAAS,IAAI;MAC1B,CAAC,CAAC;IACJ,CAAC,CAAC;IAEF,MAAMsC,YAAY,GAAG,CAAC,GAAGkB,gBAAgB,CAACgB,OAAO,CAAClC,YAAY,CAAC+G,MAAM,CAAC,CAAC,CAAC,CAAC3J,MAAM,CAAEqB,IAAI,IAAK;MACxF,IAAI,EAACA,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEoG,IAAI,KAAIpG,IAAI,CAACoG,IAAI,KAAK,UAAU,EAAE,OAAO,KAAK;MACzD,IAAI,CAACL,UAAU,EAAE,OAAO,IAAI;MAC5B,OAAO,CAAC/F,IAAI,CAAC+F,UAAU,IAAI/F,IAAI,CAAC+F,UAAU,KAAKA,UAAU;IAC3D,CAAC,CAAC;IAEF,KAAK,MAAM/F,IAAI,IAAIuB,YAAY,EAAE;MAC/B,MAAMgH,OAAO,GAAGvI,IAAI,CAACwG,GAAG,IAAIxG,IAAI,CAACkG,MAAM,IAAIlG,IAAI,CAACyG,IAAI,IAAI,IAAI;MAC5D,IAAI8B,OAAO,IAAI9F,gBAAgB,CAACgB,OAAO,CAAC9B,mBAAmB,CAACgE,GAAG,CAAC4C,OAAO,CAAC,EAAE;MAC1E,MAAM9B,IAAI,GAAG9B,aAAa,CAAC3E,IAAI,CAACyG,IAAI,CAAC;MACrC,MAAM1B,GAAG,GAAG0B,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAE1B,GAAG;MACrB,IAAI,CAACD,gBAAgB,CAACC,GAAG,CAAC,EAAE;QAC1B,IAAI/E,IAAI,CAACkG,MAAM,EAAE;UACfgB,sBAAsB,CAAClH,IAAI,CAACkG,MAAM,EAAE;YAClCsC,KAAK,EAAE,aAAa;YACpBC,cAAc,EAAE;UAClB,CAAC,CAAC;UACFX,uBAAuB,CAAC,kBAAkB,EAAE9H,IAAI,CAACkG,MAAM,CAAC;QAC1D;QACA,IAAIlG,IAAI,CAACwG,GAAG,EAAE/D,gBAAgB,CAACgB,OAAO,CAAClC,YAAY,CAACmE,MAAM,CAAC1F,IAAI,CAACwG,GAAG,CAAC;QACpE;MACF;MACA,IAAI+B,OAAO,EAAE9F,gBAAgB,CAACgB,OAAO,CAAC9B,mBAAmB,CAACqE,GAAG,CAACuC,OAAO,CAAC;MACtE,IAAIvI,IAAI,CAACwG,GAAG,EAAE/D,gBAAgB,CAACgB,OAAO,CAAClC,YAAY,CAACmE,MAAM,CAAC1F,IAAI,CAACwG,GAAG,CAAC;MACpEpD,sBAAsB,CAAC,IAAI,CAAC;MAC5BsF,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC7D,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC;MAClC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC,EACD,CACE5B,sBAAsB,EACtB+C,kBAAkB,EAClBrB,gBAAgB,EAChBgD,uBAAuB,EACvBnD,aAAa,EACbuC,sBAAsB,EACtBZ,kBAAkB,CAEtB,CAAC;EAED,MAAMuC,YAAY,GAAG,IAAAxF,kBAAW,EAC9B,MAAAyF,KAAA,IAA4F;IAAA,IAArF;MAAEC,cAAc;MAAEC,OAAO;MAAEC,OAAO;MAAEC,OAAO;MAAEC,MAAM;MAAEC,eAAe;MAAEC;IAAS,CAAC,GAAAP,KAAA;IACrF1F,sBAAsB,CAAC,CAAC;IAExB,MAAMkG,WAAW,GAAGC,YAAY,CAACC,OAAO,CAAC,mBAAmB,CAAC;IAE7D,IAAI;MACF,MAAMC,eAAe,GAAG,MAAM,IAAAC,oBAAO,EAAC;QACpCC,QAAQ,gCAAAtD,MAAA,CAAgCiD,WAAW,eAAAjD,MAAA,CAAY6C,OAAO,GAAG,EAAE,GAAGD,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,eAAA5C,MAAA,CACzF6C,OAAO,GAAGF,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE,GAAG,EAAE,CAC5B;QACFY,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,eAAe;QACrCC,MAAM,EAAE;MACV,CAAC,CAAC;MAEF,MAAMC,YAAY,GAAGR,eAAe,CAAChK,KAAK;MAC1C,MAAMuE,cAAc,GAAG,IAAIkG,iBAAiB,CAAC,CAAC;MAC9ClI,iBAAiB,CAACyB,OAAO,GAAGO,cAAc;MAE1CnC,eAAe,CAAC4B,OAAO,GAAG0G,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;MACzDvI,eAAe,CAAC4B,OAAO,CAAC4G,QAAQ,GAAG,IAAI;MACvCrG,cAAc,CAACsG,OAAO,GAAGC,KAAA,IAAiB;QAAA,IAAhB;UAAEC;QAAQ,CAAC,GAAAD,KAAA;QACnC,MAAM,CAACE,YAAY,CAAC,GAAGD,OAAO;QAC9B,IAAI3I,eAAe,CAAC4B,OAAO,EAAE;UAC3B5B,eAAe,CAAC4B,OAAO,CAACe,SAAS,GAAGiG,YAAY,IAAI,IAAI;QAC1D;QACA,IAAI,CAAC1I,eAAe,CAAC0B,OAAO,IAAI,CAACV,iBAAiB,CAACU,OAAO,CAACR,cAAc,IAAI,CAACwH,YAAY,EAAE;QAC5F,IAAI7H,eAAe,CAACa,OAAO,EAAEb,eAAe,CAACa,OAAO,CAACgB,UAAU,CAAC,CAAC;QACjE7B,eAAe,CAACa,OAAO,GAAG1B,eAAe,CAAC0B,OAAO,CAACiH,uBAAuB,CAACD,YAAY,CAAC;QACvF7H,eAAe,CAACa,OAAO,CAACkH,OAAO,CAAC5H,iBAAiB,CAACU,OAAO,CAACR,cAAc,CAAC;MAC3E,CAAC;MAED,MAAM2H,WAAW,GAAG,MAAMC,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;QAC5DC,KAAK,EAAE;UACLC,gBAAgB,EAAE,IAAI;UACtBC,gBAAgB,EAAE,IAAI;UACtBC,eAAe,EAAE,IAAI;UACrBC,YAAY,EAAE,CAAC;UACfC,UAAU,EAAE;QACd;MACF,CAAC,CAAC;MAEFnJ,cAAc,CAACuB,OAAO,GAAGmH,WAAW;MACpC,MAAM,CAACzG,KAAK,CAAC,GAAGyG,WAAW,CAACU,cAAc,CAAC,CAAC;MAE5C,MAAMC,uBAAuB,GAAGC,UAAU,CAACC,YAAY,IAAID,UAAU,CAACE,kBAAkB;MACxF,IAAI,CAACH,uBAAuB,EAAE,MAAM,IAAII,KAAK,CAAC,4BAA4B,CAAC;MAC3E,MAAMjH,YAAY,GAAG,IAAI6G,uBAAuB,CAAC,CAAC;MAClDxJ,eAAe,CAAC0B,OAAO,GAAGiB,YAAY;MACtC,IAAIA,YAAY,CAACkH,KAAK,KAAK,WAAW,EAAE,MAAMlH,YAAY,CAACmH,MAAM,CAAC,CAAC;MACnE,MAAM7I,aAAa,GAAG0B,YAAY,CAACoH,cAAc,CAAC,CAAC;MACnD,MAAM7I,cAAc,GAAGyB,YAAY,CAACoH,cAAc,CAAC,CAAC;MACpD9I,aAAa,CAAC+I,OAAO,GAAG,IAAI;MAC5B9I,cAAc,CAAC8I,OAAO,GAAG,IAAI;MAC7BhJ,iBAAiB,CAACU,OAAO,CAACT,aAAa,GAAGA,aAAa;MACvDD,iBAAiB,CAACU,OAAO,CAACR,cAAc,GAAGA,cAAc;MACzDJ,qBAAqB,CAACY,OAAO,GAAG,IAAIuI,UAAU,CAAChJ,aAAa,CAACiJ,iBAAiB,CAAC;MAC/EnJ,sBAAsB,CAACW,OAAO,GAAG,IAAIuI,UAAU,CAAC/I,cAAc,CAACgJ,iBAAiB,CAAC;MACjFlJ,iBAAiB,CAACU,OAAO,CAACP,yBAAyB,GAAG,MAAM;QAC1D,IAAI,CAACH,iBAAiB,CAACU,OAAO,CAACT,aAAa,IAAI,CAACH,qBAAqB,CAACY,OAAO,EAAE,OAAO,IAAI;QAC3FV,iBAAiB,CAACU,OAAO,CAACT,aAAa,CAACkJ,oBAAoB,CAACrJ,qBAAqB,CAACY,OAAO,CAAC;QAC3F,OAAOZ,qBAAqB,CAACY,OAAO;MACtC,CAAC;MACDV,iBAAiB,CAACU,OAAO,CAACN,0BAA0B,GAAG,MAAM;QAC3D,IAAI,CAACJ,iBAAiB,CAACU,OAAO,CAACR,cAAc,IAAI,CAACH,sBAAsB,CAACW,OAAO,EAAE,OAAO,IAAI;QAC7FV,iBAAiB,CAACU,OAAO,CAACR,cAAc,CAACiJ,oBAAoB,CAACpJ,sBAAsB,CAACW,OAAO,CAAC;QAC7F,OAAOX,sBAAsB,CAACW,OAAO;MACvC,CAAC;MAED,MAAM0I,WAAW,GAAGzH,YAAY,CAACgG,uBAAuB,CAACE,WAAW,CAAC;MACrEjI,cAAc,CAACc,OAAO,GAAG0I,WAAW;MACpCA,WAAW,CAACxB,OAAO,CAAC3H,aAAa,CAAC;MAElC,IAAImB,KAAK,EAAE;QACThC,kBAAkB,CAACsB,OAAO,GAAGU,KAAK;QAClCA,KAAK,CAACgB,OAAO,GAAG,KAAK;QACrB,MAAMhB,KAAK,CAACiI,gBAAgB,CAAC;UAC3BnB,gBAAgB,EAAE,IAAI;UACtBC,gBAAgB,EAAE,IAAI;UACtBC,eAAe,EAAE;QACnB,CAAC,CAAC;QACFnH,cAAc,CAACqI,QAAQ,CAAClI,KAAK,EAAEyG,WAAW,CAAC;MAC7C;MAEA,MAAMpH,WAAW,GAAGQ,cAAc,CAACsI,iBAAiB,CAAC,YAAY,CAAC;MAClErK,cAAc,CAACwB,OAAO,GAAGD,WAAW;MAEpCA,WAAW,CAAC+I,gBAAgB,CAAC,MAAM,EAAE,MAAM;QACzC7J,wBAAwB,CAACe,OAAO,GAAG,EAAE;QACrC+I,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;UAAEtE,EAAE,EAAE;QAAa,CAAC,CAAC;QAElD,MAAMuE,UAAU,GAAGzD,MAAM,IAAI,OAAO;QACpC,MAAM0D,mBAAmB,6DAAAxG,MAAA,CAA4DuG,UAAU,wGAAAvG,MAAA,CAAmG0C,cAAc,sIAAkI;QAElV1G,eAAe,CAACoB,OAAO,GAAG,IAAI;QAC9BnB,kBAAkB,CAACmB,OAAO,GAAG,IAAI;QACjCD,WAAW,CAACG,IAAI,CACdC,IAAI,CAACC,SAAS,CAAC;UACbC,IAAI,EAAE,iBAAiB;UACvBgJ,QAAQ,EAAE;YACRC,YAAY,EAAEF;UAChB;QACF,CAAC,CACH,CAAC;MACH,CAAC,CAAC;MAEFrJ,WAAW,CAAC+I,gBAAgB,CAAC,SAAS,EAAE,MAAOS,KAAK,IAAK;QAAA,IAAAC,aAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA,EAAAC,cAAA;QACvD,MAAMC,OAAO,GAAG7J,IAAI,CAACgB,KAAK,CAACoI,KAAK,CAACU,IAAI,CAAC;QACtC,MAAM;UAAEZ;QAAS,CAAC,GAAGW,OAAO;QAC5B,MAAMlG,MAAM,GAAG,EAAA0F,aAAA,GAAAQ,OAAO,CAACrG,IAAI,cAAA6F,aAAA,uBAAZA,aAAA,CAAc5E,EAAE,KAAIoF,OAAO,CAACjG,OAAO,IAAI,IAAI;QAC1D,MAAMtB,MAAM,GAAG,EAAAgH,cAAA,GAAAO,OAAO,CAACrG,IAAI,cAAA8F,cAAA,uBAAZA,cAAA,CAAc7F,OAAO,KAAIoG,OAAO,CAACpG,OAAO,IAAIE,MAAM;QACjE,MAAMxB,UAAU,GAAG0H,OAAO,CAACE,WAAW,KAAIb,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEzE,EAAE,KAAI,IAAI;QAE9D,IAAIoF,OAAO,CAAC3J,IAAI,KAAK,4BAA4B,IAAI,EAAAqJ,cAAA,GAAAM,OAAO,CAACrG,IAAI,cAAA+F,cAAA,uBAAZA,cAAA,CAAcrJ,IAAI,MAAK,SAAS,EAAE;UACrF,IAAIzB,eAAe,CAACoB,OAAO,IAAI,CAACnB,kBAAkB,CAACmB,OAAO,IAAIgK,OAAO,CAACE,WAAW,EAAE;YACjFrL,kBAAkB,CAACmB,OAAO,GAAGgK,OAAO,CAACE,WAAW;UAClD;UACA,IAAI5H,UAAU,EAAE;YACdxD,WAAW,CAACkB,OAAO,CAAC5C,oBAAoB,CAACmF,GAAG,CAACD,UAAU,CAAC;YACxDxD,WAAW,CAACkB,OAAO,CAAC9C,WAAW,CAAC+E,MAAM,CAACK,UAAU,CAAC;UACpD;UACA,IAAIxD,WAAW,CAACkB,OAAO,CAACpD,OAAO,IAAIkC,WAAW,CAACkB,OAAO,CAACjD,YAAY,KAAK,CAAC,EAAE;YACzE4E,eAAe,CAAC,CAAC;UACnB;QACF;QAEA,IAAIqI,OAAO,CAAC3J,IAAI,KAAK,6BAA6B,EAAE;UAClD,IACEzB,eAAe,CAACoB,OAAO,IACvBnB,kBAAkB,CAACmB,OAAO,IAC1BgK,OAAO,CAACE,WAAW,KAAKrL,kBAAkB,CAACmB,OAAO,EAClD;YACAyB,gBAAgB,CAAC,CAAC;YAClB7C,eAAe,CAACoB,OAAO,GAAG,KAAK;YAC/BnB,kBAAkB,CAACmB,OAAO,GAAG,IAAI;UACnC;QACF;QAEA,IACEgK,OAAO,CAAC3J,IAAI,KAAK,4BAA4B,KAC5C,EAAAsJ,cAAA,GAAAK,OAAO,CAACrG,IAAI,cAAAgG,cAAA,uBAAZA,cAAA,CAActJ,IAAI,MAAK,UAAU,IAAI,EAAAuJ,cAAA,GAAAI,OAAO,CAACrG,IAAI,cAAAiG,cAAA,uBAAZA,cAAA,CAAcvJ,IAAI,MAAK,eAAe,CAAC,EAC7E;UACA,IAAIiC,UAAU,EAAExD,WAAW,CAACkB,OAAO,CAAC9C,WAAW,CAACqF,GAAG,CAACD,UAAU,CAAC;UAC/DE,aAAa,CAACC,MAAM,CAAC;QACvB;QAEA,IAAIuH,OAAO,CAAC3J,IAAI,KAAK,4BAA4B,IAAI,EAAAwJ,cAAA,GAAAG,OAAO,CAACrG,IAAI,cAAAkG,cAAA,uBAAZA,cAAA,CAAcxJ,IAAI,MAAK,eAAe,EAAE;UAAA,IAAA8J,cAAA,EAAAC,cAAA;UAC3F,MAAMzH,IAAI,GAAG,EAAAwH,cAAA,GAAAH,OAAO,CAACrG,IAAI,cAAAwG,cAAA,uBAAZA,cAAA,CAAcxH,IAAI,KAAIqH,OAAO,CAACrH,IAAI,IAAI,IAAI;UACvD,MAAMI,GAAG,GAAGL,kBAAkB,CAACD,MAAM,EAAEH,UAAU,EAAEK,IAAI,CAAC;UACxDE,kBAAkB,CAAC;YAAEE,GAAG;YAAEJ,IAAI;YAAEL,UAAU;YAAEG,MAAM;YAAEO,IAAI,EAAE,EAAAoH,cAAA,GAAAJ,OAAO,CAACrG,IAAI,cAAAyG,cAAA,uBAAZA,cAAA,CAAc5O,SAAS,KAAI;UAAK,CAAC,CAAC;QAC9F;QAEA,IAAIwO,OAAO,CAAC3J,IAAI,KAAK,uCAAuC,EAAE;UAC5D,MAAMsC,IAAI,GAAGqH,OAAO,CAACrH,IAAI,IAAI,IAAI;UACjC,MAAMI,GAAG,GAAGL,kBAAkB,CAACsH,OAAO,CAACpG,OAAO,IAAI,IAAI,EAAEtB,UAAU,EAAEK,IAAI,CAAC;UACzEE,kBAAkB,CAAC;YAAEE,GAAG;YAAEJ,IAAI;YAAEL,UAAU;YAAEG,MAAM,EAAEuH,OAAO,CAACpG,OAAO,IAAI,IAAI;YAAEZ,IAAI,EAAEgH,OAAO,CAACxO;UAAU,CAAC,CAAC;QACzG;QAEA,IAAIwO,OAAO,CAAC3J,IAAI,KAAK,+BAA+B,EAAE;UACpDmC,aAAa,CAACC,MAAM,CAAC;UACrB,IAAIuH,OAAO,CAACjG,OAAO,EAAEF,gBAAgB,CAACmG,OAAO,CAACjG,OAAO,CAAC;QACxD;QAEA,IAAIiG,OAAO,CAAC3J,IAAI,KAAK,oCAAoC,EAAE;UACzDmC,aAAa,CAACC,MAAM,CAAC;UACrB,IAAIuH,OAAO,CAACjG,OAAO,EAAEF,gBAAgB,CAACmG,OAAO,CAACjG,OAAO,CAAC;QACxD;QAEA,IAAIiG,OAAO,CAAC3J,IAAI,KAAK,4BAA4B,IAAI2J,OAAO,CAAC3J,IAAI,KAAK,qCAAqC,EAAE;UAC3G,IAAI2J,OAAO,CAACjG,OAAO,EAAEF,gBAAgB,CAACmG,OAAO,CAACjG,OAAO,CAAC;QACxD;QAEA,IACEiG,OAAO,CAAC3J,IAAI,KAAK,2BAA2B,KAC3C,EAAAyJ,cAAA,GAAAE,OAAO,CAACrG,IAAI,cAAAmG,cAAA,uBAAZA,cAAA,CAAczJ,IAAI,MAAK,UAAU,IAAI,EAAA0J,cAAA,GAAAC,OAAO,CAACrG,IAAI,cAAAoG,cAAA,uBAAZA,cAAA,CAAc1J,IAAI,MAAK,eAAe,CAAC,EAC7E;UACA+C,mBAAmB,CAACX,MAAM,CAAC;QAC7B;QAEA,IACEuH,OAAO,CAAC3J,IAAI,KAAK,6BAA6B,IAC9C2J,OAAO,CAAC3J,IAAI,KAAK,0BAA0B,IAC3C2J,OAAO,CAAC3J,IAAI,KAAK,kCAAkC,IACnD2J,OAAO,CAAC3J,IAAI,KAAK,+BAA+B,EAChD;UACA+C,mBAAmB,CAACX,MAAM,CAAC;QAC7B;QAEA,IAAIuH,OAAO,CAAC3J,IAAI,KAAK,yBAAyB,IAAI2J,OAAO,CAAC3J,IAAI,KAAK,6BAA6B,EAAE;UAAA,IAAAgK,cAAA,EAAAC,eAAA,EAAAC,eAAA;UAChG,IAAI,EAAAF,cAAA,GAAAL,OAAO,CAACrG,IAAI,cAAA0G,cAAA,uBAAZA,cAAA,CAAchK,IAAI,MAAK,UAAU,IAAI,EAAAiK,eAAA,GAAAN,OAAO,CAACrG,IAAI,cAAA2G,eAAA,uBAAZA,eAAA,CAAcjK,IAAI,MAAK,eAAe,EAAE;YAC/EmC,aAAa,CAACC,MAAM,CAAC;UACvB;UACA,IAAI,EAAA8H,eAAA,GAAAP,OAAO,CAACrG,IAAI,cAAA4G,eAAA,uBAAZA,eAAA,CAAclK,IAAI,MAAK,sBAAsB,EAAE;YAAA,IAAAmK,eAAA;YACjD,MAAMC,UAAU,GAAG,EAAAD,eAAA,GAAAR,OAAO,CAACrG,IAAI,cAAA6G,eAAA,uBAAZA,eAAA,CAAc5F,EAAE,KAAIoF,OAAO,CAACjG,OAAO,IAAI,IAAI;YAC9D,IAAI0G,UAAU,IAAI,CAAC3L,WAAW,CAACkB,OAAO,CAAC/C,kBAAkB,CAACiF,GAAG,CAACuI,UAAU,CAAC,EAAE;cACzE3L,WAAW,CAACkB,OAAO,CAAC/C,kBAAkB,CAACsF,GAAG,CAACkI,UAAU,CAAC;cACtDzG,eAAe,CAACyG,UAAU,EAAE,IAAI,CAAC;YACnC;UACF;QACF;QAEA,IAAIT,OAAO,CAAC3J,IAAI,KAAK,wBAAwB,EAAE;UAAA,IAAAqK,eAAA,EAAAC,eAAA,EAAAC,eAAA;UAC7C,IAAI,EAAAF,eAAA,GAAAV,OAAO,CAACrG,IAAI,cAAA+G,eAAA,uBAAZA,eAAA,CAAcrK,IAAI,MAAK,UAAU,IAAI,EAAAsK,eAAA,GAAAX,OAAO,CAACrG,IAAI,cAAAgH,eAAA,uBAAZA,eAAA,CAActK,IAAI,MAAK,eAAe,EAAE;YAC/E+C,mBAAmB,CAACX,MAAM,CAAC;UAC7B;UACA,IAAI,EAAAmI,eAAA,GAAAZ,OAAO,CAACrG,IAAI,cAAAiH,eAAA,uBAAZA,eAAA,CAAcvK,IAAI,MAAK,sBAAsB,EAAE;YAAA,IAAAwK,eAAA;YACjD,MAAMJ,UAAU,GAAG,EAAAI,eAAA,GAAAb,OAAO,CAACrG,IAAI,cAAAkH,eAAA,uBAAZA,eAAA,CAAcjG,EAAE,KAAIoF,OAAO,CAACjG,OAAO,IAAI,IAAI;YAC9D,IAAI0G,UAAU,IAAI,CAAC3L,WAAW,CAACkB,OAAO,CAAC/C,kBAAkB,CAACiF,GAAG,CAACuI,UAAU,CAAC,EAAE;cACzE3L,WAAW,CAACkB,OAAO,CAAC/C,kBAAkB,CAACsF,GAAG,CAACkI,UAAU,CAAC;cACtDzG,eAAe,CAACyG,UAAU,EAAE,IAAI,CAAC;YACnC;UACF;QACF;QAEA,IAAIT,OAAO,CAAC3J,IAAI,KAAK,eAAe,EAAE;UAAA,IAAAyK,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;UACpC,IAAI1I,UAAU,EAAExD,WAAW,CAACkB,OAAO,CAAC7C,aAAa,CAACoF,GAAG,CAACD,UAAU,CAAC;UACjE,MAAMkC,WAAW,GAAGE,KAAK,CAACC,OAAO,CAAC0E,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE3F,MAAM,CAAC,GAAG2F,QAAQ,CAAC3F,MAAM,GAAG,EAAE;UAC1E,MAAMuH,UAAU,GAAGzG,WAAW,CAACnC,IAAI,CAAEsB,IAAI,IAAK,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEtD,IAAI,MAAK,SAAS,CAAC;UACvE,MAAM6K,MAAM,GAAG7B,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAE6B,MAAM;UAC/B,MAAMrJ,MAAM,GAAG,CAAAwH,QAAQ,aAARA,QAAQ,wBAAAyB,qBAAA,GAARzB,QAAQ,CAAE8B,cAAc,cAAAL,qBAAA,uBAAxBA,qBAAA,CAA0BjJ,MAAM,MAAIwH,QAAQ,aAARA,QAAQ,wBAAA0B,sBAAA,GAAR1B,QAAQ,CAAE8B,cAAc,cAAAJ,sBAAA,wBAAAC,sBAAA,GAAxBD,sBAAA,CAA0BhG,KAAK,cAAAiG,sBAAA,uBAA/BA,sBAAA,CAAiCI,IAAI,KAAI,IAAI;UAChG,IAAIF,MAAM,KAAK,WAAW,EAAE;YAC1B,IACED,UAAU,IACVnM,WAAW,CAACkB,OAAO,CAACpD,OAAO,IAC3BkC,WAAW,CAACkB,OAAO,CAACjD,YAAY,KAAK,CAAC,IACtC+B,WAAW,CAACkB,OAAO,CAAC9C,WAAW,CAACiF,IAAI,KAAK,CAAC,EAC1C;cACAR,eAAe,CAAC,CAAC;YACnB;UACF,CAAC,MAAM,IAAI7C,WAAW,CAACkB,OAAO,CAACpD,OAAO,EAAE;YACtC,IAAIsO,MAAM,KAAK,QAAQ,EAAE;cACvB7H,mBAAmB,CAACZ,MAAM,CAAC;YAC7B,CAAC,MAAM,IAAIyI,MAAM,KAAK,WAAW,IAAIrJ,MAAM,KAAK,eAAe,EAAE;cAC/DwB,mBAAmB,CAACZ,MAAM,CAAC;YAC7B;UACF;UACAV,iBAAiB,CAACU,MAAM,CAAC;UACzB6B,kBAAkB,CAAC;YAAEhC,UAAU;YAAEkC;UAAY,CAAC,CAAC;QACjD;QAEA,IAAIwF,OAAO,CAAC3J,IAAI,KAAK,kBAAkB,EAAE;UACvC,IAAIiC,UAAU,EAAEvD,gBAAgB,CAACiB,OAAO,CAACrC,QAAQ,GAAG2E,UAAU;QAChE;QAEA,IAAI0H,OAAO,CAAC3J,IAAI,KAAK,uDAAuD,EAAE;UAAA,IAAAgL,mBAAA;UAC5E,MAAMC,UAAU,IAAAD,mBAAA,GAAGrB,OAAO,CAACsB,UAAU,cAAAD,mBAAA,uBAAlBA,mBAAA,CAAoB9J,IAAI,CAAC,CAAC;UAC7C,IAAI+J,UAAU,EAAErM,wBAAwB,CAACe,OAAO,IAAIsL,UAAU;QAChE;QAEA,IAAItB,OAAO,CAAC3J,IAAI,KAAK,eAAe,IAAIiC,UAAU,IAAIvD,gBAAgB,CAACiB,OAAO,CAACrC,QAAQ,KAAK2E,UAAU,EAAE;UACtGvD,gBAAgB,CAACiB,OAAO,CAACrC,QAAQ,GAAG,IAAI;UACxC,IAAIoB,gBAAgB,CAACiB,OAAO,CAACpC,iBAAiB,EAAE;YAC9CmB,gBAAgB,CAACiB,OAAO,CAACpC,iBAAiB,GAAG,KAAK;YAClDkB,WAAW,CAACkB,OAAO,CAAC1C,kBAAkB,GAAG,KAAK;YAC9CyE,iBAAiB,CAAC,CAAC;UACrB;UACA,IAAI/C,gBAAgB,CAACgB,OAAO,CAAChC,eAAe,EAAE;YAC5C,MAAM6D,MAAM,GAAG7C,gBAAgB,CAACgB,OAAO,CAAC/B,qBAAqB;YAC7De,gBAAgB,CAACgB,OAAO,CAAChC,eAAe,GAAG,KAAK;YAChDgB,gBAAgB,CAACgB,OAAO,CAAC/B,qBAAqB,GAAG,IAAI;YACrD2D,kBAAkB,CAACC,MAAM,IAAI,UAAU,CAAC;UAC1C;QACF;QAEA,IAAImI,OAAO,CAAC3J,IAAI,KAAK,uCAAuC,EAAE;UAAA,IAAAkL,oBAAA;UAC5D,MAAMD,UAAU,IAAAC,oBAAA,GAAGvB,OAAO,CAACsB,UAAU,cAAAC,oBAAA,uBAAlBA,oBAAA,CAAoBhK,IAAI,CAAC,CAAC;UAC7C,IAAI,CAAC+J,UAAU,IAAI,CAACrM,wBAAwB,CAACe,OAAO,EAAE;UAEtD,MAAMwL,KAAK,GAAGvM,wBAAwB,CAACe,OAAO,CAACuB,IAAI,CAAC,CAAC;UACrDtC,wBAAwB,CAACe,OAAO,GAAG,EAAE;UAErC,MAAMyL,YAAY,GAAG/F,MAAM,IAAI,OAAO;UAEtC,IAAIF,OAAO,EAAE;YACX,IAAI;cACF,MAAMkG,MAAM,GAAG,MAAM,IAAAC,mBAAY,EAAC;gBAChC9F,WAAW;gBACX+F,SAAS,EAAEpG,OAAO;gBAClBqG,OAAO,EAAE;kBAAEnG,MAAM,EAAE+F;gBAAa;cAClC,CAAC,CAAC;cACF,IAAIC,MAAM,EAAE;gBACV,MAAM,IAAAI,wBAAiB,EAAC;kBAAEC,MAAM,EAAE,MAAM;kBAAEC,IAAI,EAAER,KAAK;kBAAEE,MAAM;kBAAEO,IAAI,EAAE;oBAAE1E,KAAK,EAAE;kBAAK;gBAAE,CAAC,CAAC;gBACvF,MAAM,IAAAuE,wBAAiB,EAAC;kBAAEC,MAAM,EAAE,IAAI;kBAAEC,IAAI,EAAEV,UAAU;kBAAEI,MAAM;kBAAEO,IAAI,EAAE;oBAAE1E,KAAK,EAAE;kBAAK;gBAAE,CAAC,CAAC;cAC5F;YACF,CAAC,CAAC,OAAOxC,KAAK,EAAE;cACdgE,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;gBAAEtE,EAAE,EAAE,YAAY;gBAAEG,KAAK,EAAEA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEmH;cAAQ,CAAC,CAAC;YAC3E;UACF;UAEAnD,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;YAC3BtE,EAAE,EAAE,kBAAkB;YACtBiB,WAAW;YACXsG,IAAI,EAAEb,UAAU;YAChBE,KAAK;YACLY,KAAK,EAAE,MAAM;YACb1G,MAAM,EAAE+F;UACV,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;MAEF,MAAMY,KAAK,GAAG,MAAM9L,cAAc,CAAC+L,WAAW,CAAC,CAAC;MAChD,MAAM/L,cAAc,CAACgM,mBAAmB,CAACF,KAAK,CAAC;MAE/C,MAAMG,WAAW,GAAG,MAAMC,KAAK,CAAC,0CAA0C,EAAE;QAC1ElG,MAAM,EAAE,MAAM;QACdyF,IAAI,EAAEK,KAAK,CAACK,GAAG;QACfC,OAAO,EAAE;UACPC,aAAa,YAAAhK,MAAA,CAAY4D,YAAY,CAAE;UACvC,cAAc,EAAE;QAClB;MACF,CAAC,CAAC;MAEF,IAAI,CAACgG,WAAW,CAACK,EAAE,EAAE,MAAM,IAAI3E,KAAK,CAAC,6CAA6C,CAAC;MAEnF,MAAM4E,MAAM,GAAG;QAAEzM,IAAI,EAAE,QAAQ;QAAEqM,GAAG,EAAE,MAAMF,WAAW,CAACL,IAAI,CAAC;MAAE,CAAC;MAEhE,MAAM5L,cAAc,CAACwM,oBAAoB,CAACD,MAAM,CAAC;MACjDlH,QAAQ,CAAC,IAAI,CAAC;IAChB,CAAC,CAAC,OAAOb,KAAK,EAAE;MACdgE,kBAAK,CAACC,OAAO,CAACC,cAAK,CAACC,OAAO,EAAE;QAAEtE,EAAE,EAAE,YAAY;QAAEG,KAAK,EAAEA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEmH;MAAQ,CAAC,CAAC;MACzEtG,QAAQ,CAAC,KAAK,CAAC;MACf,MAAMb,KAAK;IACb,CAAC,SAAS;MACRY,eAAe,CAAC,KAAK,CAAC;IACxB;EACF,CAAC,EACD,CACEhG,sBAAsB,EACtBgC,eAAe,EACfF,gBAAgB,EAChB2B,mBAAmB,EACnBkB,kBAAkB,EAClBvC,iBAAiB,EACjBsB,mBAAmB,EACnBQ,gBAAgB,EAChBG,eAAe,EACfpC,kBAAkB,EAClBY,aAAa,EACbK,kBAAkB,EAClBH,kBAAkB,CAEtB,CAAC;EAED,MAAMsK,UAAU,GAAG,IAAApN,kBAAW,EAAC,MAAM;IACnCD,sBAAsB,CAAC,IAAI,CAAC;EAC9B,CAAC,EAAE,CAACA,sBAAsB,CAAC,CAAC;EAE5B,OAAO;IAAEyF,YAAY;IAAE4H,UAAU;IAAEC,cAAc,EAAE3N,iBAAiB,CAACU;EAAQ,CAAC;AAChF,CAAC;AAACkN,OAAA,CAAA/O,wBAAA,GAAAA,wBAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_lobby","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","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","failedCallIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","resumeAfterActive","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","sendResponseCreate","reason","responseOverrides","channel","responsePayload","response","resumeMcpIfNeeded","outputCallId","delete","has","size","shouldResume","some","responseId","add","trackMcpStart","callId","getFunctionCallKey","name","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","requestFollowupResponse","buildMcpFailureInstructions","localeHint","normalizedLocale","handleMcpFailure","failureKey","instructions","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","Array","isArray","id","values","callKey","error","allowed_prefix","window","location","assign","startSession","_ref3","assistant_name","chainId","currency","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","finalizeSession","errorMessage","message","Event","publish","EVENT","METRICS","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","addEventListener","connectionState","document","createElement","autoplay","ontrack","_ref4","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","event","introductionMessage","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","_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","_response$status_deta3","hasMessage","status_details","code","_payload$transcript","transcript","_payload$transcript2","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","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 } from '../../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\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 resumeAfterActive: false,\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://reservation.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 sendResponseCreate = useCallback((reason, responseOverrides) => {\n if (responseStateRef.current.activeId) {\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 resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (!mcpStateRef.current.pending || mcpStateRef.current.pendingCount > 0) return;\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return;\n if (!outputCallId && mcpStateRef.current.resumeRequestedCallIds.size > 0) return;\n const shouldResume = [...mcpStateRef.current.responseIds].some(\n (responseId) =>\n mcpStateRef.current.responsesDone.has(responseId) &&\n !mcpStateRef.current.responsesWithMessage.has(responseId),\n );\n if (!shouldResume) return;\n if (sendResponseCreate('mcp_completed')) {\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n if (!outputCallId) mcpStateRef.current.resumeRequestedAny = true;\n } else if (responseStateRef.current.activeId) {\n responseStateRef.current.resumeAfterActive = true;\n }\n },\n [sendResponseCreate],\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) => {\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 resumeMcpIfNeeded(outputCallId);\n },\n [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 resumeMcpIfNeeded(outputCallId);\n }, delay);\n },\n [clearPendingMcp, resumeMcpIfNeeded],\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 requestFollowupResponse = useCallback(\n (reason, outputCallId, responseOverrides) => {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n functionStateRef.current.pendingFollowupResponse = responseOverrides || null;\n if (sendResponseCreate(reason || 'followup', responseOverrides)) {\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n }\n },\n [sendResponseCreate],\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://reservation.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 ({ assistant_name, chainId, currency, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: '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: `/audio/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: '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) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped') {\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 }\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') {\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 if (responseStateRef.current.resumeAfterActive) {\n responseStateRef.current.resumeAfterActive = false;\n mcpStateRef.current.resumeRequestedAny = false;\n resumeMcpIfNeeded();\n }\n if (functionStateRef.current.pendingFollowup) {\n const reason = functionStateRef.current.pendingFollowupReason;\n const responseOverrides = functionStateRef.current.pendingFollowupResponse;\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n functionStateRef.current.pendingFollowupResponse = null;\n sendResponseCreate(reason || 'followup', responseOverrides);\n }\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 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: '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\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: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleMcpFailure,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendItemRetrieve,\n sendMcpApproval,\n sendResponseCreate,\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["_ui","require","ACCOMMODATION_TYPE","exports","ROOM","APARTMENT","PITCH","ACCOMMODATION","VILLA","CALENDAR_FORMAT","EVENT","BOOKING_RESPONSE","BOOKING_CANCEL","CHAT_OPEN","CHAT_OPENED","CHECKOUT_RESPONSE","CHECKOUT_FORM","COOKIE_BANNER_OPEN","CORE_READY","EXTERNAL_TWIN","FINDER","FINDER_FIELD_CHANGE","FINDER_READY","FOOTER_HEIGHT_CHANGE","INTENT_CURRENCY","INTENT_LOCALE","LOGGED","LOGGED_OUT","LOGIN","LOCALE_CHANGED","METRICS","NOTIFICATION","OTA_PRICES_READY","PAY_LATER","RATES_ADD_TO_CART","RATES_RESPONSE","RATES_FILTER_CLUB","RATES_FILTER_PROMOCODE","SARAI_MESSAGE_SENT","MODAL_VISIBLE","MODAL_EVENT_VISIBLE","LOCALES","MONTHS_IN_MOBILE","OCCUPATION_TYPE","GUEST","ADULT","CHILD","BABY","PAYMENT_CARD","AMERICAN_EXPRESS","DINERS_CLUB","DISCOVER","JCB","MAESTRO","MASTERCARD","UNIONPAY","VISA","PAYMENT_METHOD","ALIPAY","AMAZON_PAY","APLAZAME","BIZUM","CARD","CARD_PREPAY","CRIPTAN","IDEAL","OXXO","PAYLATER","PAYPAL","PCIPROXY","SOFORT","TPV","TRANSFER","WECHATPAY","PAYMENT_PROVIDER","ADDON","ADYEN","CARDNET","CHECKOUT","HIPAY","HOTELPAY","LINKAGEPAY","MULTIPAGOS","OPENPAY","PAYBOX","PAYBYRD","PAYCOMET","PAYNOPAIN","REDSYS","REDUNIQ","SIPAY","STRIPE","STEP","BOOKING_CANCELLATION","BOOKING_CONFIRMATION","HOTELS","RATES","SUBMIT_DELAY"],"sources":["../../../src/components/helpers/constants.js"],"sourcesContent":["import { MODAL_EVENT_VISIBLE } from '@mirai/ui';\n\nconst ACCOMMODATION_TYPE = {\n ROOM: 1,\n APARTMENT: 2,\n PITCH: 3,\n ACCOMMODATION: 4,\n VILLA: 5,\n};\n\nconst CALENDAR_FORMAT = 'DD/MM/YYYY';\n\nconst EVENT = {\n // -- @mirai/core\n BOOKING_RESPONSE: 'bookingResponse',\n BOOKING_CANCEL: 'bookingCancel',\n CHAT_OPEN: 'chatOpen',\n CHAT_OPENED: 'chatOpened',\n CHECKOUT_RESPONSE: 'checkoutResponse',\n CHECKOUT_FORM: 'checkoutForm',\n COOKIE_BANNER_OPEN: 'cookieBannerOpen',\n CORE_READY: 'coreReady',\n EXTERNAL_TWIN: 'externalTwin',\n FINDER: 'finder',\n FINDER_FIELD_CHANGE: 'finderFieldChange',\n FINDER_READY: 'finderReady',\n FOOTER_HEIGHT_CHANGE: 'footerHeightChenge',\n INTENT_CURRENCY: 'intentCurrency',\n INTENT_LOCALE: 'intentLocale',\n LOGGED: 'logged',\n LOGGED_OUT: 'loggedOut',\n LOGIN: 'login',\n LOCALE_CHANGED: 'localeChanged',\n METRICS: 'metrics',\n NOTIFICATION: 'notification',\n OTA_PRICES_READY: 'otaPricesReady',\n PAY_LATER: 'payLater',\n RATES_ADD_TO_CART: 'ratesAddToCart',\n RATES_RESPONSE: 'ratesResponse',\n RATES_FILTER_CLUB: 'ratesFilterClub',\n RATES_FILTER_PROMOCODE: 'ratesFilterPromocode',\n SARAI_MESSAGE_SENT: 'saraiMessageSent',\n // -- @mirai/ui\n MODAL_VISIBLE: MODAL_EVENT_VISIBLE,\n};\n\nconst LOCALES = [\n 'en-GB',\n 'es-ES',\n 'fr-FR',\n 'de-DE',\n 'ja-JP',\n 'it-IT',\n 'pt-PT',\n 'da-DK',\n 'fi-FI',\n 'nb-NO',\n 'nl-NL',\n 'pl-PL',\n 'ro-RO',\n 'ru-RU',\n 'sv-SE',\n 'tr-TR',\n 'zh-CN',\n 'cs-CZ',\n 'el-GR',\n 'ar-DZ',\n 'hu-HU',\n 'ca-ES',\n 'eu-ES',\n 'vi-VN',\n];\n\nconst MONTHS_IN_MOBILE = 3;\n\nconst OCCUPATION_TYPE = {\n GUEST: 1,\n ADULT: 2,\n CHILD: 3,\n BABY: 4,\n};\n\nconst PAYMENT_CARD = {\n AMERICAN_EXPRESS: 'AMERICAN_EXPRESS',\n DINERS_CLUB: 'DINERS_CLUB',\n DISCOVER: 'DISCOVER',\n JCB: 'JCB',\n MAESTRO: 'MAESTRO', // low resolution logo\n MASTERCARD: 'MASTERCARD',\n UNIONPAY: 'UNIONPAY',\n VISA: 'VISA',\n};\n\nconst PAYMENT_METHOD = {\n ALIPAY: 'ALIPAY',\n AMAZON_PAY: 'AMAZON_PAY',\n APLAZAME: 'APLAZAME',\n BIZUM: 'BIZUM',\n CARD: 'CARD',\n CARD_PREPAY: 'CARD_PREPAY',\n CRIPTAN: 'CRIPTAN',\n IDEAL: 'IDEAL',\n OXXO: 'OXXO',\n PAYLATER: 'PAYLATER',\n PAYPAL: 'PAYPAL',\n PCIPROXY: 'PCIPROXY',\n SOFORT: 'SOFORT',\n TPV: 'TPV',\n TRANSFER: 'TRANSFER',\n WECHATPAY: 'WECHATPAY',\n};\n\nconst PAYMENT_PROVIDER = {\n ADDON: 'ADDON',\n ADYEN: 'ADYEN',\n CARDNET: 'CARDNET',\n CHECKOUT: 'CHECKOUT',\n HIPAY: 'HIPAY',\n HOTELPAY: 'HOTELPAY',\n LINKAGEPAY: 'LINKAGEPAY',\n MULTIPAGOS: 'MULTIPAGOS',\n OPENPAY: 'OPENPAY',\n PAYBOX: 'PAYBOX',\n PAYBYRD: 'PAYBYRD',\n PAYCOMET: 'PAYCOMET',\n PAYNOPAIN: 'PAYNOPAIN',\n REDSYS: 'REDSYS',\n REDUNIQ: 'REDUNIQ',\n SIPAY: 'SIPAY',\n STRIPE: 'STRIPE',\n};\n\nconst STEP = {\n BOOKING_CANCELLATION: 'CANCELLATION',\n BOOKING_CONFIRMATION: 'CONFIRMATION',\n CHECKOUT: 'CLIENTFORM',\n FINDER: 'BOOKINGENTRANCE',\n HOTELS: 'CHAINRESULT',\n RATES: 'BOOKINGSTEP1',\n};\n\nconst SUBMIT_DELAY = 800;\n\nexport {\n ACCOMMODATION_TYPE,\n CALENDAR_FORMAT,\n EVENT,\n LOCALES,\n MONTHS_IN_MOBILE,\n OCCUPATION_TYPE,\n PAYMENT_CARD,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER,\n STEP,\n SUBMIT_DELAY,\n};\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AAEA,MAAMC,kBAAkB,GAAAC,OAAA,CAAAD,kBAAA,GAAG;EACzBE,IAAI,EAAE,CAAC;EACPC,SAAS,EAAE,CAAC;EACZC,KAAK,EAAE,CAAC;EACRC,aAAa,EAAE,CAAC;EAChBC,KAAK,EAAE;AACT,CAAC;AAED,MAAMC,eAAe,GAAAN,OAAA,CAAAM,eAAA,GAAG,YAAY;AAEpC,MAAMC,KAAK,GAAAP,OAAA,CAAAO,KAAA,GAAG;EACZ;EACAC,gBAAgB,EAAE,iBAAiB;EACnCC,cAAc,EAAE,eAAe;EAC/BC,SAAS,EAAE,UAAU;EACrBC,WAAW,EAAE,YAAY;EACzBC,iBAAiB,EAAE,kBAAkB;EACrCC,aAAa,EAAE,cAAc;EAC7BC,kBAAkB,EAAE,kBAAkB;EACtCC,UAAU,EAAE,WAAW;EACvBC,aAAa,EAAE,cAAc;EAC7BC,MAAM,EAAE,QAAQ;EAChBC,mBAAmB,EAAE,mBAAmB;EACxCC,YAAY,EAAE,aAAa;EAC3BC,oBAAoB,EAAE,oBAAoB;EAC1CC,eAAe,EAAE,gBAAgB;EACjCC,aAAa,EAAE,cAAc;EAC7BC,MAAM,EAAE,QAAQ;EAChBC,UAAU,EAAE,WAAW;EACvBC,KAAK,EAAE,OAAO;EACdC,cAAc,EAAE,eAAe;EAC/BC,OAAO,EAAE,SAAS;EAClBC,YAAY,EAAE,cAAc;EAC5BC,gBAAgB,EAAE,gBAAgB;EAClCC,SAAS,EAAE,UAAU;EACrBC,iBAAiB,EAAE,gBAAgB;EACnCC,cAAc,EAAE,eAAe;EAC/BC,iBAAiB,EAAE,iBAAiB;EACpCC,sBAAsB,EAAE,sBAAsB;EAC9CC,kBAAkB,EAAE,kBAAkB;EACtC;EACAC,aAAa,EAAEC;AACjB,CAAC;AAED,MAAMC,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.js","names":["_ui","require","ACCOMMODATION_TYPE","exports","ROOM","APARTMENT","PITCH","ACCOMMODATION","VILLA","CALENDAR_FORMAT","EVENT","BOOKING_RESPONSE","BOOKING_CANCEL","CHAT_CLOSE","CHAT_OPEN","CHAT_OPENED","CHECKOUT_RESPONSE","CHECKOUT_FORM","COOKIE_BANNER_OPEN","CORE_READY","EXTERNAL_TWIN","FINDER","FINDER_FIELD_CHANGE","FINDER_READY","FOOTER_HEIGHT_CHANGE","INTENT_CURRENCY","INTENT_LOCALE","LOGGED","LOGGED_OUT","LOGIN","LOCALE_CHANGED","METRICS","NOTIFICATION","OTA_PRICES_READY","PAY_LATER","RATES_ADD_TO_CART","RATES_RESPONSE","RATES_FILTER_CLUB","RATES_FILTER_PROMOCODE","SARAI_MESSAGE_SENT","MODAL_VISIBLE","MODAL_EVENT_VISIBLE","LOCALES","MONTHS_IN_MOBILE","OCCUPATION_TYPE","GUEST","ADULT","CHILD","BABY","PAYMENT_CARD","AMERICAN_EXPRESS","DINERS_CLUB","DISCOVER","JCB","MAESTRO","MASTERCARD","UNIONPAY","VISA","PAYMENT_METHOD","ALIPAY","AMAZON_PAY","APLAZAME","BIZUM","CARD","CARD_PREPAY","CRIPTAN","IDEAL","OXXO","PAYLATER","PAYPAL","PCIPROXY","SOFORT","TPV","TRANSFER","WECHATPAY","PAYMENT_PROVIDER","ADDON","ADYEN","CARDNET","CHECKOUT","HIPAY","HOTELPAY","LINKAGEPAY","MULTIPAGOS","OPENPAY","PAYBOX","PAYBYRD","PAYCOMET","PAYNOPAIN","REDSYS","REDUNIQ","SIPAY","STRIPE","STEP","BOOKING_CANCELLATION","BOOKING_CONFIRMATION","HOTELS","RATES","SUBMIT_DELAY"],"sources":["../../../src/components/helpers/constants.js"],"sourcesContent":["import { MODAL_EVENT_VISIBLE } from '@mirai/ui';\n\nconst ACCOMMODATION_TYPE = {\n ROOM: 1,\n APARTMENT: 2,\n PITCH: 3,\n ACCOMMODATION: 4,\n VILLA: 5,\n};\n\nconst CALENDAR_FORMAT = 'DD/MM/YYYY';\n\nconst EVENT = {\n // -- @mirai/core\n BOOKING_RESPONSE: 'bookingResponse',\n BOOKING_CANCEL: 'bookingCancel',\n CHAT_CLOSE: 'chatClose',\n CHAT_OPEN: 'chatOpen',\n CHAT_OPENED: 'chatOpened',\n CHECKOUT_RESPONSE: 'checkoutResponse',\n CHECKOUT_FORM: 'checkoutForm',\n COOKIE_BANNER_OPEN: 'cookieBannerOpen',\n CORE_READY: 'coreReady',\n EXTERNAL_TWIN: 'externalTwin',\n FINDER: 'finder',\n FINDER_FIELD_CHANGE: 'finderFieldChange',\n FINDER_READY: 'finderReady',\n FOOTER_HEIGHT_CHANGE: 'footerHeightChenge',\n INTENT_CURRENCY: 'intentCurrency',\n INTENT_LOCALE: 'intentLocale',\n LOGGED: 'logged',\n LOGGED_OUT: 'loggedOut',\n LOGIN: 'login',\n LOCALE_CHANGED: 'localeChanged',\n METRICS: 'metrics',\n NOTIFICATION: 'notification',\n OTA_PRICES_READY: 'otaPricesReady',\n PAY_LATER: 'payLater',\n RATES_ADD_TO_CART: 'ratesAddToCart',\n RATES_RESPONSE: 'ratesResponse',\n RATES_FILTER_CLUB: 'ratesFilterClub',\n RATES_FILTER_PROMOCODE: 'ratesFilterPromocode',\n SARAI_MESSAGE_SENT: 'saraiMessageSent',\n // -- @mirai/ui\n MODAL_VISIBLE: MODAL_EVENT_VISIBLE,\n};\n\nconst LOCALES = [\n 'en-GB',\n 'es-ES',\n 'fr-FR',\n 'de-DE',\n 'ja-JP',\n 'it-IT',\n 'pt-PT',\n 'da-DK',\n 'fi-FI',\n 'nb-NO',\n 'nl-NL',\n 'pl-PL',\n 'ro-RO',\n 'ru-RU',\n 'sv-SE',\n 'tr-TR',\n 'zh-CN',\n 'cs-CZ',\n 'el-GR',\n 'ar-DZ',\n 'hu-HU',\n 'ca-ES',\n 'eu-ES',\n 'vi-VN',\n];\n\nconst MONTHS_IN_MOBILE = 3;\n\nconst OCCUPATION_TYPE = {\n GUEST: 1,\n ADULT: 2,\n CHILD: 3,\n BABY: 4,\n};\n\nconst PAYMENT_CARD = {\n AMERICAN_EXPRESS: 'AMERICAN_EXPRESS',\n DINERS_CLUB: 'DINERS_CLUB',\n DISCOVER: 'DISCOVER',\n JCB: 'JCB',\n MAESTRO: 'MAESTRO', // low resolution logo\n MASTERCARD: 'MASTERCARD',\n UNIONPAY: 'UNIONPAY',\n VISA: 'VISA',\n};\n\nconst PAYMENT_METHOD = {\n ALIPAY: 'ALIPAY',\n AMAZON_PAY: 'AMAZON_PAY',\n APLAZAME: 'APLAZAME',\n BIZUM: 'BIZUM',\n CARD: 'CARD',\n CARD_PREPAY: 'CARD_PREPAY',\n CRIPTAN: 'CRIPTAN',\n IDEAL: 'IDEAL',\n OXXO: 'OXXO',\n PAYLATER: 'PAYLATER',\n PAYPAL: 'PAYPAL',\n PCIPROXY: 'PCIPROXY',\n SOFORT: 'SOFORT',\n TPV: 'TPV',\n TRANSFER: 'TRANSFER',\n WECHATPAY: 'WECHATPAY',\n};\n\nconst PAYMENT_PROVIDER = {\n ADDON: 'ADDON',\n ADYEN: 'ADYEN',\n CARDNET: 'CARDNET',\n CHECKOUT: 'CHECKOUT',\n HIPAY: 'HIPAY',\n HOTELPAY: 'HOTELPAY',\n LINKAGEPAY: 'LINKAGEPAY',\n MULTIPAGOS: 'MULTIPAGOS',\n OPENPAY: 'OPENPAY',\n PAYBOX: 'PAYBOX',\n PAYBYRD: 'PAYBYRD',\n PAYCOMET: 'PAYCOMET',\n PAYNOPAIN: 'PAYNOPAIN',\n REDSYS: 'REDSYS',\n REDUNIQ: 'REDUNIQ',\n SIPAY: 'SIPAY',\n STRIPE: 'STRIPE',\n};\n\nconst STEP = {\n BOOKING_CANCELLATION: 'CANCELLATION',\n BOOKING_CONFIRMATION: 'CONFIRMATION',\n CHECKOUT: 'CLIENTFORM',\n FINDER: 'BOOKINGENTRANCE',\n HOTELS: 'CHAINRESULT',\n RATES: 'BOOKINGSTEP1',\n};\n\nconst SUBMIT_DELAY = 800;\n\nexport {\n ACCOMMODATION_TYPE,\n CALENDAR_FORMAT,\n EVENT,\n LOCALES,\n MONTHS_IN_MOBILE,\n OCCUPATION_TYPE,\n PAYMENT_CARD,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER,\n STEP,\n SUBMIT_DELAY,\n};\n"],"mappings":"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","ignoreList":[]}
|