@mirai/core 0.4.654 → 0.4.655

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -111,20 +111,24 @@ const Chat = _ref => {
111
111
  };
112
112
  }, [hotelId, id, skeleton]);
113
113
  (0, _react.useEffect)(() => {
114
- var _client;
115
- if (!visible || inputMode !== _Chat.INPUT_MODE.TEXT) return (_client = client) === null || _client === void 0 ? void 0 : _client.disconnect();
114
+ var _client, _client2, _client3;
115
+ const keepAlive = visible && (inputMode === _Chat.INPUT_MODE.TEXT || inputMode === _Chat.INPUT_MODE.AUDIO);
116
+ if (!keepAlive) return (_client = client) === null || _client === void 0 ? void 0 : _client.disconnect();
117
+ const channelId = activeHotelId || id;
118
+ if ((_client2 = client) !== null && _client2 !== void 0 && _client2.socket && client.channelId === channelId && client.session === session) return;
119
+ (_client3 = client) === null || _client3 === void 0 || _client3.disconnect();
116
120
  client = new _helpers.ClientLobby({
117
- channelId: activeHotelId || id,
121
+ channelId,
118
122
  session
119
123
  });
120
124
  client.onMessage(message => {
121
- var _client2;
125
+ var _client4;
122
126
  const _ref2 = message || {},
123
127
  author = _ref2.author,
124
128
  body = _ref2.body,
125
129
  createdAt = _ref2.createdAt,
126
130
  fingerprint = _ref2.fingerprint;
127
- if (fingerprint !== ((_client2 = client) === null || _client2 === void 0 ? void 0 : _client2.fingerprint) || author !== 'human') return;
131
+ if (fingerprint !== ((_client4 = client) === null || _client4 === void 0 ? void 0 : _client4.fingerprint) || author !== 'human') return;
128
132
  setMessages(prev => [...prev, {
129
133
  synapse: true,
130
134
  text: body,
@@ -134,19 +138,19 @@ const Chat = _ref => {
134
138
  client.connect();
135
139
  }, [activeHotelId, id, inputMode, session, visible]);
136
140
  const handleInput = function (input) {
137
- var _client3;
141
+ var _client5;
138
142
  let shortcutMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
139
143
  const nextMessages = [...messages, {
140
144
  text: input,
141
145
  timestamp: new Date().getTime()
142
146
  }];
143
147
  setMessages(nextMessages);
144
- (_client3 = client) === null || _client3 === void 0 || _client3.send({
148
+ (_client5 = client) === null || _client5 === void 0 || _client5.send({
145
149
  body: input
146
150
  });
147
151
  setTimeout(async () => {
148
- var _client4;
149
- if ((_client4 = client) !== null && _client4 !== void 0 && _client4.aiBlocked) return;
152
+ var _client6;
153
+ if ((_client6 = client) !== null && _client6 !== void 0 && _client6.aiBlocked) return;
150
154
  setBusy(true);
151
155
  const context = {
152
156
  calendar,
@@ -170,11 +174,11 @@ const Chat = _ref => {
170
174
  mcp: false
171
175
  }).catch(() => {});
172
176
  if (response) {
173
- var _client5;
177
+ var _client7;
174
178
  setMessages([...nextMessages, _objectSpread({
175
179
  synapse: true
176
180
  }, response)]);
177
- (_client5 = client) === null || _client5 === void 0 || _client5.send({
181
+ (_client7 = client) === null || _client7 === void 0 || _client7.send({
178
182
  body: response.text,
179
183
  author: 'ai'
180
184
  });
@@ -267,7 +271,24 @@ const Chat = _ref => {
267
271
  })) : inputMode === _Chat.INPUT_MODE.AUDIO ? /*#__PURE__*/_react.default.createElement(_Aura.Aura, {
268
272
  hotelId: activeHotelId,
269
273
  settings: channelSettings,
270
- onCallEnd: () => setInputMode(_Chat.INPUT_MODE.RATING)
274
+ onCallEnd: () => setInputMode(_Chat.INPUT_MODE.RATING),
275
+ onTranscript: _ref5 => {
276
+ var _client8;
277
+ let author = _ref5.author,
278
+ body = _ref5.body;
279
+ if (!((_client8 = client) !== null && _client8 !== void 0 && _client8.send({
280
+ author,
281
+ body,
282
+ meta: {
283
+ audio: true
284
+ }
285
+ }))) {
286
+ _dataSources.Event.publish(_helpers2.EVENT.METRICS, {
287
+ id: _helpers2.METRICS_EVENTS.AURA_ERROR,
288
+ error: 'transcript_dropped'
289
+ });
290
+ }
291
+ }
271
292
  }) : inputMode === _Chat.INPUT_MODE.RATING ? /*#__PURE__*/_react.default.createElement(_components.Rating, {
272
293
  onRejoin: () => setInputMode(_Chat.INPUT_MODE.AUDIO),
273
294
  onReturnHome: handleClose
@@ -1 +1 @@
1
- {"version":3,"file":"Chat.js","names":["_dataSources","require","_locale","_services","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Chat","_Chat2","style","_components","_Aura","_helpers","_lobby","_Core","_helpers2","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","client","Chat","_ref","_channelSettings$web","hotelId","others","_useLocale","useLocale","translate","_useDevice","useDevice","isMobile","_useStore","useStore","_useStore$value","_useStore$value2","calendar","_useStore$value2$comp","components","currency","_useStore$value2$hote","hotel","id","language","locale","occupation","origin","session","_useStore$value2$skel","skeleton","type","_useStore$value2$urlP","urlParams","_useState","useState","_useState2","busy","setBusy","_useState3","_useState4","channelSettings","setChannelSettings","_useState5","_useState6","inputMode","setInputMode","_useState7","_useState8","messages","setMessages","_useState9","_useState0","visible","setVisible","activeHotelId","useEffect","Event","subscribe","EVENT","CHAT_OPEN","handleOpen","unsubscribe","active","loadSettings","channel","getChannelSettings","channelId","settings","_client","INPUT_MODE","TEXT","disconnect","ClientLobby","onMessage","message","_client2","_ref2","author","body","createdAt","fingerprint","prev","synapse","text","timestamp","connect","handleInput","input","_client3","shortcutMessage","undefined","nextMessages","Date","getTime","send","setTimeout","_client4","aiBlocked","context","TYPE","CHAIN","chain","response","ServiceSynapse","mcp","catch","_client5","audioNotification","DELAY_RESPONSE","handleInputMode","publish","METRICS","METRICS_EVENTS","SARAI_INTERACTION","action","method","WHATSAPP","handleClose","_ref3","_ref3$source","source","SARAI_SOURCE","CHAT_OPENED","event","CHAT_CLOSE","isSaraiForced","sarai","isReady","every","item","BANNED_COMPONENTS","includes","web","_ref4","_ref4$entities","entities","_getPrivacyPolicy","getPrivacyPolicy","chainId","features","genericName","L10N","LABEL_GENERIC_NAME","isChain","privacyName","privacyUrl","url","createElement","Fragment","Modal","fit","portal","className","styles","container","Header","onClose","Welcome","onInputMode","ScrollView","scrollTo","snap","map","index","Message","key","concat","disabled","Input","onValue","AUDIO","Aura","onCallEnd","RATING","Rating","onRejoin","onReturnHome","Text","light","tiny","warning","LABEL_PRIVACY_DISCLAIMER","link","Action","href","target","underline","privacyLink","ACTION_MORE_INFO","ButtonDispatcher","onPress","exports","propTypes","PropTypes","string"],"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 { Action, Modal, ScrollView, styles, Text, useDevice } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nimport { BANNED_COMPONENTS, 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 { getChannelSettings } from './services/lobby.service';\nimport { SARAI_SOURCE, TYPE } from '../../Core.constants';\nimport { EVENT, getPrivacyPolicy, METRICS_EVENTS } from '../helpers';\n\nlet client;\n\nconst Chat = ({ hotelId, ...others }) => {\n const { translate } = useLocale();\n const { isMobile } = useDevice();\n const {\n value: {\n calendar,\n components = {},\n currency,\n hotel = {},\n id,\n language,\n locale,\n occupation,\n origin,\n session,\n skeleton = false,\n type,\n urlParams = {},\n } = {},\n } = useStore();\n\n const [busy, setBusy] = useState(false);\n const [channelSettings, setChannelSettings] = useState();\n const [inputMode, setInputMode] = useState();\n const [messages, setMessages] = useState([]);\n const [visible, setVisible] = useState(false);\n const activeHotelId = hotelId || hotel.id;\n\n useEffect(() => {\n if (skeleton) return;\n\n Event.subscribe(EVENT.CHAT_OPEN, handleOpen);\n return () => Event.unsubscribe(EVENT.CHAT_OPEN, handleOpen);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [skeleton]);\n\n useEffect(() => {\n if (skeleton || (!id && !hotelId)) {\n setChannelSettings();\n return;\n }\n\n let active = true;\n\n const loadSettings = async () => {\n const channel = await getChannelSettings({ channelId: hotelId || id });\n if (!active) return;\n setChannelSettings(channel?.settings);\n };\n\n loadSettings();\n\n return () => {\n active = false;\n };\n }, [hotelId, id, skeleton]);\n\n useEffect(() => {\n if (!visible || inputMode !== INPUT_MODE.TEXT) return client?.disconnect();\n\n client = new ClientLobby({ channelId: activeHotelId || 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 }, [activeHotelId, 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 if (client?.aiBlocked) return;\n setBusy(true);\n\n const context = { calendar, currency, isMobile, locale, occupation, origin, shortcutMessage };\n if (type === TYPE.CHAIN && !hotelId) context.chain = { id };\n if (hotelId) context.hotel = { id: hotelId };\n else if (hotel.id) context.hotel = hotel;\n\n const response = await ServiceSynapse.message({\n context,\n input,\n session,\n mcp: false,\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: METRICS_EVENTS.SARAI_INTERACTION, action: 'click', method: next });\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: METRICS_EVENTS.SARAI_INTERACTION, action: 'open', method: inputMode });\n };\n\n const handleClose = () => {\n Event.publish(EVENT.CHAT_CLOSE, { inputMode });\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.SARAI_INTERACTION, action: 'close', method: inputMode });\n setVisible(false);\n setInputMode();\n };\n\n const isSaraiForced = urlParams.sarai === 'true';\n const isReady =\n !skeleton &&\n Object.keys(components).every((item) => !BANNED_COMPONENTS.includes(item)) &&\n (channelSettings?.web?.active || isSaraiForced);\n const { entities = {} } = messages[messages.length - 1] || {};\n\n const { name: privacyName, url: privacyUrl } = getPrivacyPolicy({\n chainId: id,\n features: hotel.features,\n genericName: translate(L10N.LABEL_GENERIC_NAME),\n hotelId: activeHotelId,\n isChain: type === TYPE.CHAIN,\n language,\n locale,\n });\n\n return isReady ? (\n <>\n <Modal {...others} fit portal visible={visible} className={styles(style.container, others.className)}>\n <Header settings={channelSettings} onClose={handleClose} />\n\n {!inputMode ? (\n <Welcome settings={channelSettings} 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 hotelId={activeHotelId} settings={channelSettings} 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_PRIVACY_DISCLAIMER, {\n name: privacyName,\n link: (\n <Action href={privacyUrl} target=\"_blank\" tiny underline className={style.privacyLink}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n ),\n })}\n </Text>\n </Modal>\n\n <ButtonDispatcher settings={channelSettings} visible={visible} onPress={handleOpen} />\n </>\n ) : null;\n};\n\nChat.propTypes = {\n hotelId: PropTypes.string,\n};\n\nexport { Chat };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Chat.js","names":["_dataSources","require","_locale","_services","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Chat","_Chat2","style","_components","_Aura","_helpers","_lobby","_Core","_helpers2","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","_objectSpread","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","l","iterator","u","next","done","return","isArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","client","Chat","_ref","_channelSettings$web","hotelId","others","_useLocale","useLocale","translate","_useDevice","useDevice","isMobile","_useStore","useStore","_useStore$value","_useStore$value2","calendar","_useStore$value2$comp","components","currency","_useStore$value2$hote","hotel","id","language","locale","occupation","origin","session","_useStore$value2$skel","skeleton","type","_useStore$value2$urlP","urlParams","_useState","useState","_useState2","busy","setBusy","_useState3","_useState4","channelSettings","setChannelSettings","_useState5","_useState6","inputMode","setInputMode","_useState7","_useState8","messages","setMessages","_useState9","_useState0","visible","setVisible","activeHotelId","useEffect","Event","subscribe","EVENT","CHAT_OPEN","handleOpen","unsubscribe","active","loadSettings","channel","getChannelSettings","channelId","settings","_client","_client2","_client3","keepAlive","INPUT_MODE","TEXT","AUDIO","disconnect","socket","ClientLobby","onMessage","message","_client4","_ref2","author","body","createdAt","fingerprint","prev","synapse","text","timestamp","connect","handleInput","input","_client5","shortcutMessage","undefined","nextMessages","Date","getTime","send","setTimeout","_client6","aiBlocked","context","TYPE","CHAIN","chain","response","ServiceSynapse","mcp","catch","_client7","audioNotification","DELAY_RESPONSE","handleInputMode","publish","METRICS","METRICS_EVENTS","SARAI_INTERACTION","action","method","WHATSAPP","handleClose","_ref3","_ref3$source","source","SARAI_SOURCE","CHAT_OPENED","event","CHAT_CLOSE","isSaraiForced","sarai","isReady","every","item","BANNED_COMPONENTS","includes","web","_ref4","_ref4$entities","entities","_getPrivacyPolicy","getPrivacyPolicy","chainId","features","genericName","L10N","LABEL_GENERIC_NAME","isChain","privacyName","privacyUrl","url","createElement","Fragment","Modal","fit","portal","className","styles","container","Header","onClose","Welcome","onInputMode","ScrollView","scrollTo","snap","map","index","Message","key","concat","disabled","Input","onValue","Aura","onCallEnd","RATING","onTranscript","_ref5","_client8","meta","audio","AURA_ERROR","error","Rating","onRejoin","onReturnHome","Text","light","tiny","warning","LABEL_PRIVACY_DISCLAIMER","link","Action","href","target","underline","privacyLink","ACTION_MORE_INFO","ButtonDispatcher","onPress","exports","propTypes","PropTypes","string"],"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 { Action, Modal, ScrollView, styles, Text, useDevice } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useState } from 'react';\n\nimport { BANNED_COMPONENTS, 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 { getChannelSettings } from './services/lobby.service';\nimport { SARAI_SOURCE, TYPE } from '../../Core.constants';\nimport { EVENT, getPrivacyPolicy, METRICS_EVENTS } from '../helpers';\n\nlet client;\n\nconst Chat = ({ hotelId, ...others }) => {\n const { translate } = useLocale();\n const { isMobile } = useDevice();\n const {\n value: {\n calendar,\n components = {},\n currency,\n hotel = {},\n id,\n language,\n locale,\n occupation,\n origin,\n session,\n skeleton = false,\n type,\n urlParams = {},\n } = {},\n } = useStore();\n\n const [busy, setBusy] = useState(false);\n const [channelSettings, setChannelSettings] = useState();\n const [inputMode, setInputMode] = useState();\n const [messages, setMessages] = useState([]);\n const [visible, setVisible] = useState(false);\n const activeHotelId = hotelId || hotel.id;\n\n useEffect(() => {\n if (skeleton) return;\n\n Event.subscribe(EVENT.CHAT_OPEN, handleOpen);\n return () => Event.unsubscribe(EVENT.CHAT_OPEN, handleOpen);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [skeleton]);\n\n useEffect(() => {\n if (skeleton || (!id && !hotelId)) {\n setChannelSettings();\n return;\n }\n\n let active = true;\n\n const loadSettings = async () => {\n const channel = await getChannelSettings({ channelId: hotelId || id });\n if (!active) return;\n setChannelSettings(channel?.settings);\n };\n\n loadSettings();\n\n return () => {\n active = false;\n };\n }, [hotelId, id, skeleton]);\n\n useEffect(() => {\n const keepAlive = visible && (inputMode === INPUT_MODE.TEXT || inputMode === INPUT_MODE.AUDIO);\n if (!keepAlive) return client?.disconnect();\n\n const channelId = activeHotelId || id;\n if (client?.socket && client.channelId === channelId && client.session === session) return;\n client?.disconnect();\n\n client = new ClientLobby({ channelId, 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 }, [activeHotelId, 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 if (client?.aiBlocked) return;\n setBusy(true);\n\n const context = { calendar, currency, isMobile, locale, occupation, origin, shortcutMessage };\n if (type === TYPE.CHAIN && !hotelId) context.chain = { id };\n if (hotelId) context.hotel = { id: hotelId };\n else if (hotel.id) context.hotel = hotel;\n\n const response = await ServiceSynapse.message({\n context,\n input,\n session,\n mcp: false,\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: METRICS_EVENTS.SARAI_INTERACTION, action: 'click', method: next });\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: METRICS_EVENTS.SARAI_INTERACTION, action: 'open', method: inputMode });\n };\n\n const handleClose = () => {\n Event.publish(EVENT.CHAT_CLOSE, { inputMode });\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.SARAI_INTERACTION, action: 'close', method: inputMode });\n setVisible(false);\n setInputMode();\n };\n\n const isSaraiForced = urlParams.sarai === 'true';\n const isReady =\n !skeleton &&\n Object.keys(components).every((item) => !BANNED_COMPONENTS.includes(item)) &&\n (channelSettings?.web?.active || isSaraiForced);\n const { entities = {} } = messages[messages.length - 1] || {};\n\n const { name: privacyName, url: privacyUrl } = getPrivacyPolicy({\n chainId: id,\n features: hotel.features,\n genericName: translate(L10N.LABEL_GENERIC_NAME),\n hotelId: activeHotelId,\n isChain: type === TYPE.CHAIN,\n language,\n locale,\n });\n\n return isReady ? (\n <>\n <Modal {...others} fit portal visible={visible} className={styles(style.container, others.className)}>\n <Header settings={channelSettings} onClose={handleClose} />\n\n {!inputMode ? (\n <Welcome settings={channelSettings} 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\n hotelId={activeHotelId}\n settings={channelSettings}\n onCallEnd={() => setInputMode(INPUT_MODE.RATING)}\n onTranscript={({ author, body }) => {\n if (!client?.send({ author, body, meta: { audio: true } })) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: 'transcript_dropped' });\n }\n }}\n />\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_PRIVACY_DISCLAIMER, {\n name: privacyName,\n link: (\n <Action href={privacyUrl} target=\"_blank\" tiny underline className={style.privacyLink}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n ),\n })}\n </Text>\n </Modal>\n\n <ButtonDispatcher settings={channelSettings} visible={visible} onPress={handleOpen} />\n </>\n ) : null;\n};\n\nChat.propTypes = {\n hotelId: PropTypes.string,\n};\n\nexport { Chat };\n"],"mappings":"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","ignoreList":[]}
@@ -31,6 +31,7 @@ const Aura = _ref => {
31
31
  let hotelId = _ref.hotelId,
32
32
  _ref$onCallEnd = _ref.onCallEnd,
33
33
  onCallEnd = _ref$onCallEnd === void 0 ? () => {} : _ref$onCallEnd,
34
+ onTranscript = _ref.onTranscript,
34
35
  settings = _ref.settings;
35
36
  const openAiSession = (0, _useOpenAiRealtimeSession.useOpenAiRealtimeSession)();
36
37
  const xaiSession = (0, _useXaiRealtimeSession.useXaiRealtimeSession)();
@@ -110,6 +111,7 @@ const Aura = _ref => {
110
111
  hotelId,
111
112
  isChain,
112
113
  locale,
114
+ onTranscript,
113
115
  setIsConnecting,
114
116
  setReady
115
117
  });
@@ -143,6 +145,7 @@ Aura.displayName = 'Mirai:Core:Chat.Aura';
143
145
  Aura.propTypes = {
144
146
  hotelId: _propTypes.default.string,
145
147
  onCallEnd: _propTypes.default.func,
148
+ onTranscript: _propTypes.default.func,
146
149
  settings: _propTypes.default.shape({
147
150
  ai: _propTypes.default.shape({
148
151
  name: _propTypes.default.string
@@ -1 +1 @@
1
- {"version":3,"file":"Aura.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Aura","style","_Aura2","_useOpenAiRealtimeSession","_useXaiRealtimeSession","_Core","_helpers","_Chat","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","VOICE_MODEL_XAI","Aura","_ref","_urlParams$voiceMode","hotelId","_ref$onCallEnd","onCallEnd","settings","openAiSession","useOpenAiRealtimeSession","xaiSession","useXaiRealtimeSession","_useStore","useStore","_useStore$value","_useStore$value2","id","locale","type","_useStore$value2$urlP","urlParams","useXai","toLowerCase","_ref2","startSession","endSession","audioAnalyzers","_useLocale","useLocale","translate","_ref3","_ref3$ai","ai","_ref3$ai2","_ref3$ai2$name","assistantName","DEFAULT_NAME","_useState","useState","_useState2","context","setContext","_useState3","_useState4","isConnecting","setIsConnecting","_useState5","_useState6","ready","setReady","useEffect","TYPE","CHAIN","handleCallEnd","useCallback","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_CALL_END","handleCallStart","callback","subscribe","CHAT_CLOSE","unsubscribe","isChain","chainId","undefined","navigator","mediaDevices","AURA_ERROR","assistant_name","error","createElement","Fragment","Waveform","active","conversation","View","className","footer","Text","action","L10N","LABEL_CALLING","Button","busy","rounded","squared","large","tooltip","LABEL_HANG_UP","onPress","styles","button","Icon","ICON","HANG_UP","exports","displayName","propTypes","PropTypes","string","func","shape"],"sources":["../../../../../src/components/Chat/components/Aura/Aura.jsx"],"sourcesContent":["import { 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 { useOpenAiRealtimeSession } from './hooks/useOpenAiRealtimeSession';\nimport { useXaiRealtimeSession } from './hooks/useXaiRealtimeSession';\nimport { TYPE } from '../../../../Core.constants';\nimport { EVENT, ICON, METRICS_EVENTS } from '../../../helpers';\nimport { DEFAULT_NAME } from '../../Chat.constants';\n\nconst VOICE_MODEL_XAI = 'xai';\n\nconst Aura = ({ hotelId, onCallEnd = () => {}, settings }) => {\n const openAiSession = useOpenAiRealtimeSession();\n const xaiSession = useXaiRealtimeSession();\n const { value: { id, locale, type, urlParams = {} } = {} } = useStore();\n const useXai = urlParams['voice-model']?.toLowerCase() === VOICE_MODEL_XAI;\n const { startSession, endSession, audioAnalyzers } = useXai ? xaiSession : openAiSession;\n const { translate } = useLocale();\n const { ai: { name: assistantName = DEFAULT_NAME } = {} } = settings || {};\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 && !hotelId) return;\n\n setContext({ hotelId });\n }, [hotelId, type]);\n\n const handleCallEnd = useCallback(() => {\n endSession();\n setReady(false);\n onCallEnd();\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_CALL_END });\n }, [endSession, onCallEnd]);\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 isChain = type === TYPE.CHAIN && !hotelId;\n const chainId = isChain ? id : undefined;\n\n if (!navigator.mediaDevices || (!context && !chainId)) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR });\n return;\n }\n\n setIsConnecting(true);\n try {\n await startSession({\n assistant_name: assistantName,\n chainId,\n hotelId,\n isChain,\n locale,\n setIsConnecting,\n setReady,\n });\n } catch (error) {\n setIsConnecting(false);\n }\n };\n\n return !(!context && !(type === TYPE.CHAIN && !hotelId)) ? (\n <>\n <Waveform active={ready} conversation={audioAnalyzers} />\n <View className={style.footer}>\n {isConnecting && <Text action>{translate(L10N.LABEL_CALLING, { name: assistantName })}</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 hotelId: PropTypes.string,\n onCallEnd: PropTypes.func,\n settings: PropTypes.shape({\n ai: PropTypes.shape({\n name: PropTypes.string,\n }),\n }),\n};\n\nexport { Aura };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Aura.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Aura","style","_Aura2","_useOpenAiRealtimeSession","_useXaiRealtimeSession","_Core","_helpers","_Chat","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","toString","slice","constructor","name","Array","from","test","length","l","Symbol","iterator","u","next","done","push","value","return","isArray","VOICE_MODEL_XAI","Aura","_ref","_urlParams$voiceMode","hotelId","_ref$onCallEnd","onCallEnd","onTranscript","settings","openAiSession","useOpenAiRealtimeSession","xaiSession","useXaiRealtimeSession","_useStore","useStore","_useStore$value","_useStore$value2","id","locale","type","_useStore$value2$urlP","urlParams","useXai","toLowerCase","_ref2","startSession","endSession","audioAnalyzers","_useLocale","useLocale","translate","_ref3","_ref3$ai","ai","_ref3$ai2","_ref3$ai2$name","assistantName","DEFAULT_NAME","_useState","useState","_useState2","context","setContext","_useState3","_useState4","isConnecting","setIsConnecting","_useState5","_useState6","ready","setReady","useEffect","TYPE","CHAIN","handleCallEnd","useCallback","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_CALL_END","handleCallStart","callback","subscribe","CHAT_CLOSE","unsubscribe","isChain","chainId","undefined","navigator","mediaDevices","AURA_ERROR","assistant_name","error","createElement","Fragment","Waveform","active","conversation","View","className","footer","Text","action","L10N","LABEL_CALLING","Button","busy","rounded","squared","large","tooltip","LABEL_HANG_UP","onPress","styles","button","Icon","ICON","HANG_UP","exports","displayName","propTypes","PropTypes","string","func","shape"],"sources":["../../../../../src/components/Chat/components/Aura/Aura.jsx"],"sourcesContent":["import { 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 { useOpenAiRealtimeSession } from './hooks/useOpenAiRealtimeSession';\nimport { useXaiRealtimeSession } from './hooks/useXaiRealtimeSession';\nimport { TYPE } from '../../../../Core.constants';\nimport { EVENT, ICON, METRICS_EVENTS } from '../../../helpers';\nimport { DEFAULT_NAME } from '../../Chat.constants';\n\nconst VOICE_MODEL_XAI = 'xai';\n\nconst Aura = ({ hotelId, onCallEnd = () => {}, onTranscript, settings }) => {\n const openAiSession = useOpenAiRealtimeSession();\n const xaiSession = useXaiRealtimeSession();\n const { value: { id, locale, type, urlParams = {} } = {} } = useStore();\n const useXai = urlParams['voice-model']?.toLowerCase() === VOICE_MODEL_XAI;\n const { startSession, endSession, audioAnalyzers } = useXai ? xaiSession : openAiSession;\n const { translate } = useLocale();\n const { ai: { name: assistantName = DEFAULT_NAME } = {} } = settings || {};\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 && !hotelId) return;\n\n setContext({ hotelId });\n }, [hotelId, type]);\n\n const handleCallEnd = useCallback(() => {\n endSession();\n setReady(false);\n onCallEnd();\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_CALL_END });\n }, [endSession, onCallEnd]);\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 isChain = type === TYPE.CHAIN && !hotelId;\n const chainId = isChain ? id : undefined;\n\n if (!navigator.mediaDevices || (!context && !chainId)) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR });\n return;\n }\n\n setIsConnecting(true);\n try {\n await startSession({\n assistant_name: assistantName,\n chainId,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n });\n } catch (error) {\n setIsConnecting(false);\n }\n };\n\n return !(!context && !(type === TYPE.CHAIN && !hotelId)) ? (\n <>\n <Waveform active={ready} conversation={audioAnalyzers} />\n <View className={style.footer}>\n {isConnecting && <Text action>{translate(L10N.LABEL_CALLING, { name: assistantName })}</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 hotelId: PropTypes.string,\n onCallEnd: PropTypes.func,\n onTranscript: PropTypes.func,\n settings: PropTypes.shape({\n ai: PropTypes.shape({\n name: PropTypes.string,\n }),\n }),\n};\n\nexport { Aura };\n"],"mappings":"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","ignoreList":[]}
@@ -8,7 +8,6 @@ var _dataSources = require("@mirai/data-sources");
8
8
  var _react = require("react");
9
9
  var _helpers = require("../../../../helpers");
10
10
  var _helpers2 = require("../../../helpers");
11
- var _lobby = require("../../../services/lobby.service");
12
11
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
13
12
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
14
13
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
@@ -368,6 +367,7 @@ const useOpenAiRealtimeSession = () => {
368
367
  hotelId = _ref3.hotelId,
369
368
  isChain = _ref3.isChain,
370
369
  locale = _ref3.locale,
370
+ onTranscript = _ref3.onTranscript,
371
371
  setIsConnecting = _ref3.setIsConnecting,
372
372
  setReady = _ref3.setReady;
373
373
  cleanupRealtimeSession();
@@ -654,39 +654,15 @@ const useOpenAiRealtimeSession = () => {
654
654
  pendingUserTranscriptRef.current = '';
655
655
  const activeLocale = locale || 'en-US';
656
656
  const channelId = hotelId || chainId;
657
- if (channelId) {
658
- try {
659
- const chatId = await (0, _lobby.ensureChatId)({
660
- fingerprint,
661
- channelId,
662
- session: {
663
- locale: activeLocale
664
- }
665
- });
666
- if (chatId) {
667
- await (0, _lobby.createChatMessage)({
668
- author: 'user',
669
- body: input,
670
- chatId,
671
- meta: {
672
- audio: true
673
- }
674
- });
675
- await (0, _lobby.createChatMessage)({
676
- author: 'ai',
677
- body: transcript,
678
- chatId,
679
- meta: {
680
- audio: true
681
- }
682
- });
683
- }
684
- } catch (error) {
685
- _dataSources.Event.publish(_helpers.EVENT.METRICS, {
686
- id: _helpers.METRICS_EVENTS.AURA_ERROR,
687
- error: error === null || error === void 0 ? void 0 : error.message
688
- });
689
- }
657
+ if (channelId && onTranscript) {
658
+ onTranscript({
659
+ author: 'user',
660
+ body: input
661
+ });
662
+ onTranscript({
663
+ author: 'ai',
664
+ body: transcript
665
+ });
690
666
  }
691
667
  _dataSources.Event.publish(_helpers.EVENT.METRICS, {
692
668
  id: 'SYNAPSE_RESPONSE',
@@ -1 +1 @@
1
- {"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_lobby","_slicedToArray","r","e","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","failedCallIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","audioResponseIds","createFunctionState","pendingCalls","Map","pendingFollowup","pendingFollowupReason","pendingFollowupResponse","handledOpenUrlCalls","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","mcpStateRef","responseStateRef","functionStateRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","sender","track","stop","localStream","getTracks","clearTimeout","srcObject","disconnect","audioContext","safeJsonParse","parse","_unused","isAllowedOpenUrl","url","trim","startsWith","enableMicrophone","enabled","clearPendingMcp","clearPendingFollowup","sendResponseCreate","reason","responseOverrides","size","channel","responsePayload","response","sendPendingFollowup","requestFollowupResponse","outputCallId","has","add","resumeMcpIfNeeded","delete","trackMcpStart","callId","getFunctionCallKey","responseId","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","requestFollowup","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","buildMcpFailureInstructions","localeHint","normalizedLocale","handleMcpFailure","failureKey","instructions","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","id","values","callKey","error","allowed_prefix","window","location","assign","startSession","_ref3","assistant_name","chainId","currency","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","getClientFingerprint","finalizeSession","errorMessage","message","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","addEventListener","connectionState","document","createElement","autoplay","ontrack","_ref4","streams","_streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","_mediaStream$getAudio","getAudioTracks","_mediaStream$getAudio2","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","event","AURA_START","introductionMessage","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","clear","_payload$item7","_payload$item8","_payload$item1","_payload$item10","status","_payload$item11","_payload$item12","_payload$item13","_payload$item14","approvalId","_payload$item15","_payload$item16","_payload$item19","_payload$item17","_payload$item18","_payload$item20","_response$status_deta","_response$status_deta2","hasMessage","some","status_details","code","_payload$transcript","transcript","_payload$transcript2","input","activeLocale","channelId","chatId","ensureChatId","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, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } 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 audioResponseIds: new Set(),\n});\n\nconst createFunctionState = () => ({\n pendingCalls: new Map(),\n pendingFollowup: false,\n pendingFollowupReason: null,\n pendingFollowupResponse: null,\n handledOpenUrlCalls: new Set(),\n});\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const mcpStateRef = useRef(createMcpState());\n const responseStateRef = useRef(createResponseState());\n const functionStateRef = useRef(createFunctionState());\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n responseStateRef.current = createResponseState();\n functionStateRef.current = createFunctionState();\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const safeJsonParse = useCallback((value) => {\n if (typeof value !== 'string') return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }, []);\n\n const isAllowedOpenUrl = useCallback((url) => {\n if (typeof url !== 'string') return false;\n return url.trim().startsWith('https://api.mirai');\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const clearPendingMcp = useCallback(() => {\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n }, []);\n\n const clearPendingFollowup = useCallback(() => {\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n functionStateRef.current.pendingFollowupResponse = null;\n }, []);\n\n const sendResponseCreate = useCallback((reason, responseOverrides) => {\n if (responseStateRef.current.activeId || responseStateRef.current.audioResponseIds.size > 0) {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n functionStateRef.current.pendingFollowupResponse = responseOverrides || null;\n return false;\n }\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n const responsePayload = responseOverrides\n ? { type: 'response.create', response: responseOverrides }\n : { type: 'response.create' };\n channel.send(JSON.stringify(responsePayload));\n return true;\n }\n return false;\n }, []);\n\n const sendPendingFollowup = useCallback(() => {\n if (\n responseStateRef.current.activeId ||\n responseStateRef.current.audioResponseIds.size > 0 ||\n !functionStateRef.current.pendingFollowup\n ) {\n return false;\n }\n\n const reason = functionStateRef.current.pendingFollowupReason;\n const responseOverrides = functionStateRef.current.pendingFollowupResponse;\n clearPendingFollowup();\n return sendResponseCreate(reason || 'followup', responseOverrides);\n }, [clearPendingFollowup, sendResponseCreate]);\n\n const requestFollowupResponse = useCallback(\n (reason, outputCallId, responseOverrides) => {\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return false;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return false;\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n return sendResponseCreate(reason || 'followup', responseOverrides);\n },\n [sendResponseCreate],\n );\n\n const resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n !mcpStateRef.current.resumeRequestedAny &&\n !functionStateRef.current.pendingFollowup\n ) {\n clearPendingMcp();\n }\n },\n [clearPendingMcp],\n );\n\n const trackMcpStart = useCallback((callId) => {\n mcpStateRef.current.pending = true;\n if (callId) {\n if (mcpStateRef.current.handledCallIds.has(callId)) return;\n if (mcpStateRef.current.pendingCallIds.has(callId)) return;\n mcpStateRef.current.pendingCallIds.add(callId);\n mcpStateRef.current.pendingCount += 1;\n return;\n }\n mcpStateRef.current.pendingCount += 1;\n }, []);\n\n const getFunctionCallKey = useCallback((callId, responseId, name) => {\n if (callId) return callId;\n if (responseId && name) return `${responseId}:${name}`;\n return null;\n }, []);\n\n const upsertFunctionCall = useCallback(({ key, name, responseId, callId, args }) => {\n if (!key) return;\n const existing = functionStateRef.current.pendingCalls.get(key) || { key };\n functionStateRef.current.pendingCalls.set(key, {\n ...existing,\n name: name ?? existing.name,\n responseId: responseId ?? existing.responseId,\n callId: callId ?? existing.callId,\n args: args ?? existing.args,\n });\n }, []);\n\n const handleMcpCompletion = useCallback(\n (outputCallId, requestFollowup = true) => {\n mcpStateRef.current.pending = true;\n if (outputCallId) {\n if (mcpStateRef.current.handledCallIds.has(outputCallId)) return;\n mcpStateRef.current.handledCallIds.add(outputCallId);\n }\n if (mcpStateRef.current.pendingCount > 0) mcpStateRef.current.pendingCount -= 1;\n if (requestFollowup && mcpStateRef.current.pendingCount === 0) {\n requestFollowupResponse('mcp_completed', outputCallId);\n }\n resumeMcpIfNeeded(outputCallId);\n },\n [requestFollowupResponse, resumeMcpIfNeeded],\n );\n\n const scheduleResumeRetry = useCallback(\n (outputCallId) => {\n if (!mcpStateRef.current.pending) return;\n if (mcpStateRef.current.retry.timeoutId) return;\n if (mcpStateRef.current.retry.count >= 2) {\n clearPendingMcp();\n return;\n }\n const attempt = mcpStateRef.current.retry.count + 1;\n const delay = attempt * 600;\n mcpStateRef.current.retry.count = attempt;\n mcpStateRef.current.retry.timeoutId = setTimeout(() => {\n mcpStateRef.current.retry.timeoutId = null;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.delete(outputCallId);\n mcpStateRef.current.resumeRequestedAny = false;\n requestFollowupResponse('mcp_completed', outputCallId);\n }, delay);\n },\n [clearPendingMcp, requestFollowupResponse],\n );\n\n const sendFunctionCallOutput = useCallback((callId, output) => {\n const channel = dataChannelRef.current;\n if (!callId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output || {}),\n },\n }),\n );\n return true;\n }, []);\n\n const sendItemRetrieve = useCallback((itemId) => {\n const channel = dataChannelRef.current;\n if (!itemId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.retrieve',\n item_id: itemId,\n }),\n );\n return true;\n }, []);\n\n const sendMcpApproval = useCallback((approvalRequestId, approve = true) => {\n const channel = dataChannelRef.current;\n if (!approvalRequestId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n previous_item_id: approvalRequestId,\n item: {\n type: 'mcp_approval_response',\n approval_request_id: approvalRequestId,\n approve,\n },\n }),\n );\n return true;\n }, []);\n\n const buildMcpFailureInstructions = useCallback((localeHint) => {\n const normalizedLocale = localeHint || 'en-US';\n return `Respond in the language that matches the locale code \"${normalizedLocale}\". The requested information could not be retrieved because a data source failed. Apologize briefly and ask if the user wants to try again or ask something else.`;\n }, []);\n\n const handleMcpFailure = useCallback(\n (callId, localeHint) => {\n const failureKey = callId || 'unknown';\n if (mcpStateRef.current.failedCallIds.has(failureKey)) return;\n mcpStateRef.current.failedCallIds.add(failureKey);\n const instructions = buildMcpFailureInstructions(localeHint);\n requestFollowupResponse('mcp_failed', callId, { instructions });\n },\n [buildMcpFailureInstructions, requestFollowupResponse],\n );\n\n const handleOpenUrlCalls = useCallback(\n ({ responseId, outputItems }) => {\n const responseOpenUrlItems = Array.isArray(outputItems)\n ? outputItems.filter((item) => item?.type === 'function_call' && item?.name === 'open_url')\n : [];\n responseOpenUrlItems.forEach((item) => {\n const key = getFunctionCallKey(item.call_id || item.id || null, responseId, item.name);\n upsertFunctionCall({\n key,\n name: item.name,\n responseId,\n callId: item.call_id || item.id || null,\n args: item.arguments || null,\n });\n });\n\n const pendingCalls = [...functionStateRef.current.pendingCalls.values()].filter((call) => {\n if (!call?.name || call.name !== 'open_url') return false;\n if (!responseId) return true;\n return !call.responseId || call.responseId === responseId;\n });\n\n for (const call of pendingCalls) {\n const callKey = call.key || call.callId || call.args || null;\n if (callKey && functionStateRef.current.handledOpenUrlCalls.has(callKey)) continue;\n const args = safeJsonParse(call.args);\n const url = args?.url;\n if (!isAllowedOpenUrl(url)) {\n if (call.callId) {\n sendFunctionCallOutput(call.callId, {\n error: 'blocked_url',\n allowed_prefix: 'https://api.mirai',\n });\n requestFollowupResponse('open_url_blocked', call.callId);\n }\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n continue;\n }\n if (callKey) functionStateRef.current.handledOpenUrlCalls.add(callKey);\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n cleanupRealtimeSession(true);\n window.location.assign(url.trim());\n return true;\n }\n return false;\n },\n [\n cleanupRealtimeSession,\n getFunctionCallKey,\n isAllowedOpenUrl,\n requestFollowupResponse,\n safeJsonParse,\n sendFunctionCallOutput,\n upsertFunctionCall,\n ],\n );\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, currency, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupRealtimeSession(true);\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }&locale=${locale ?? ''}&currency=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n peerConnection.addEventListener('connectionstatechange', () => {\n const { connectionState } = peerConnection;\n if (connectionState === 'failed' || connectionState === 'disconnected' || connectionState === 'closed') {\n finalizeSession();\n }\n });\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n dataChannel.addEventListener('close', () => {\n finalizeSession();\n });\n dataChannel.addEventListener('error', (event) => {\n finalizeSession(event);\n });\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n const { response } = payload;\n const itemId = payload.item?.id || payload.item_id || null;\n const callId = payload.item?.call_id || payload.call_id || itemId;\n const responseId = payload.response_id || response?.id || null;\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n if (responseId) responseStateRef.current.audioResponseIds.add(responseId);\n if (responseId) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n if (mcpStateRef.current.resumeRequestedAny) clearPendingFollowup();\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped' || payload.type === 'output_audio_buffer.cleared') {\n if (responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n } else {\n responseStateRef.current.audioResponseIds.clear();\n }\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n sendPendingFollowup();\n }\n\n if (\n payload.type === 'response.output_item.added' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (responseId) mcpStateRef.current.responseIds.add(responseId);\n trackMcpStart(callId);\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'function_call') {\n const name = payload.item?.name || payload.name || null;\n const key = getFunctionCallKey(callId, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId, args: payload.item?.arguments || null });\n }\n\n if (payload.type === 'response.function_call_arguments.done') {\n const name = payload.name || null;\n const key = getFunctionCallKey(payload.call_id || null, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId: payload.call_id || null, args: payload.arguments });\n }\n\n if (payload.type === 'response.mcp_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'response.mcp_tool_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'mcp_list_tools.in_progress' || payload.type === 'response.mcp_list_tools.in_progress') {\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (\n payload.type === 'response.output_item.done' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (payload.item?.error || payload.item?.status === 'failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (\n payload.type === 'response.mcp_call.completed' ||\n payload.type === 'response.mcp_call.failed' ||\n payload.type === 'response.mcp_tool_call.completed' ||\n payload.type === 'response.mcp_tool_call.failed'\n ) {\n if (payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (payload.type === 'conversation.item.added' || payload.type === 'conversation.item.retrieved') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n trackMcpStart(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'conversation.item.done') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n if (payload.item?.status === 'failed' || payload.item?.error) {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'response.done') {\n if (responseId) mcpStateRef.current.responsesDone.add(responseId);\n const outputItems = Array.isArray(response?.output) ? response.output : [];\n const hasMessage = outputItems.some((item) => item?.type === 'message');\n const status = response?.status;\n const reason = response?.status_details?.reason || response?.status_details?.error?.code || null;\n if (status !== 'completed' && responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n }\n if (status === 'completed') {\n if (\n hasMessage &&\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n mcpStateRef.current.responseIds.size === 0\n ) {\n clearPendingMcp();\n }\n } else if (mcpStateRef.current.pending) {\n if (status === 'failed') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n } else if (status === 'cancelled' && reason !== 'turn_detected') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n }\n }\n resumeMcpIfNeeded(callId);\n handleOpenUrlCalls({ responseId, outputItems });\n }\n\n if (payload.type === 'response.created') {\n if (responseId) responseStateRef.current.activeId = responseId;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.done' && responseId && responseStateRef.current.activeId === responseId) {\n responseStateRef.current.activeId = null;\n sendPendingFollowup();\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n const channelId = hotelId || chainId;\n if (channelId) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n }\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingFollowup,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleMcpFailure,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendPendingFollowup,\n sendItemRetrieve,\n sendMcpApproval,\n trackMcpStart,\n upsertFunctionCall,\n getFunctionCallKey,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_slicedToArray","r","e","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","TypeError","a","_arrayLikeToArray","t","toString","call","slice","constructor","name","Array","from","test","length","n","l","Symbol","iterator","i","u","f","o","next","Object","done","push","value","return","isArray","ownKeys","keys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","arguments","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","configurable","writable","_toPrimitive","toPrimitive","String","Number","createMcpState","pending","pendingCallIds","Set","pendingCount","handledCallIds","handledApprovalIds","failedCallIds","responseIds","responsesDone","responsesWithMessage","resumeRequestedCallIds","resumeRequestedAny","retry","count","timeoutId","createResponseState","activeId","audioResponseIds","createFunctionState","pendingCalls","Map","pendingFollowup","pendingFollowupReason","pendingFollowupResponse","handledOpenUrlCalls","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","mcpStateRef","responseStateRef","functionStateRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","sender","track","stop","localStream","getTracks","clearTimeout","srcObject","disconnect","audioContext","safeJsonParse","parse","_unused","isAllowedOpenUrl","url","trim","startsWith","enableMicrophone","enabled","clearPendingMcp","clearPendingFollowup","sendResponseCreate","reason","responseOverrides","size","channel","responsePayload","response","sendPendingFollowup","requestFollowupResponse","outputCallId","has","add","resumeMcpIfNeeded","delete","trackMcpStart","callId","getFunctionCallKey","responseId","concat","upsertFunctionCall","_ref","key","args","existing","get","set","handleMcpCompletion","requestFollowup","scheduleResumeRetry","attempt","delay","setTimeout","sendFunctionCallOutput","output","item","call_id","sendItemRetrieve","itemId","item_id","sendMcpApproval","approvalRequestId","approve","previous_item_id","approval_request_id","buildMcpFailureInstructions","localeHint","normalizedLocale","handleMcpFailure","failureKey","instructions","handleOpenUrlCalls","_ref2","outputItems","responseOpenUrlItems","id","values","callKey","error","allowed_prefix","window","location","assign","startSession","_ref3","assistant_name","chainId","currency","hotelId","isChain","locale","onTranscript","setIsConnecting","setReady","fingerprint","getClientFingerprint","finalizeSession","errorMessage","message","Event","publish","EVENT","METRICS","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","RTCPeerConnection","addEventListener","connectionState","document","createElement","autoplay","ontrack","_ref4","streams","_streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","_mediaStream$getAudio","getAudioTracks","_mediaStream$getAudio2","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","event","AURA_START","introductionMessage","_payload$item","_payload$item2","_payload$item3","_payload$item4","_payload$item5","_payload$item6","_payload$item9","_payload$item0","payload","data","response_id","clear","_payload$item7","_payload$item8","_payload$item1","_payload$item10","status","_payload$item11","_payload$item12","_payload$item13","_payload$item14","approvalId","_payload$item15","_payload$item16","_payload$item19","_payload$item17","_payload$item18","_payload$item20","_response$status_deta","_response$status_deta2","hasMessage","some","status_details","code","_payload$transcript","transcript","_payload$transcript2","input","activeLocale","channelId","author","body","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\n\nconst createMcpState = () => ({\n pending: false,\n pendingCallIds: new Set(),\n pendingCount: 0,\n handledCallIds: new Set(),\n handledApprovalIds: new Set(),\n failedCallIds: new Set(),\n responseIds: new Set(),\n responsesDone: new Set(),\n responsesWithMessage: new Set(),\n resumeRequestedCallIds: new Set(),\n resumeRequestedAny: false,\n retry: { count: 0, timeoutId: null },\n});\n\nconst createResponseState = () => ({\n activeId: null,\n audioResponseIds: new Set(),\n});\n\nconst createFunctionState = () => ({\n pendingCalls: new Map(),\n pendingFollowup: false,\n pendingFollowupReason: null,\n pendingFollowupResponse: null,\n handledOpenUrlCalls: new Set(),\n});\n\nconst useOpenAiRealtimeSession = () => {\n const audioElementRef = useRef(null);\n const audioContextRef = useRef(null);\n const peerConnectionRef = useRef(null);\n const dataChannelRef = useRef(null);\n const localStreamRef = useRef(null);\n const localAudioTrackRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const pendingIntroRef = useRef(false);\n const introResponseIdRef = useRef(null);\n const mcpStateRef = useRef(createMcpState());\n const responseStateRef = useRef(createResponseState());\n const functionStateRef = useRef(createFunctionState());\n const pendingUserTranscriptRef = useRef('');\n const inputSourceRef = useRef(null);\n const outputSourceRef = useRef(null);\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n\n const cleanupRealtimeSession = useCallback((shouldSignal = false) => {\n const dataChannel = dataChannelRef.current;\n if (dataChannel) {\n if (shouldSignal && dataChannel.readyState === 'open') {\n dataChannel.send(JSON.stringify({ type: 'session.close' }));\n }\n dataChannel.close();\n dataChannelRef.current = null;\n }\n\n const peerConnection = peerConnectionRef.current;\n if (peerConnection) {\n peerConnection.getSenders().forEach((sender) => {\n if (sender.track) sender.track.stop();\n });\n peerConnection.close();\n peerConnectionRef.current = null;\n }\n\n const localStream = localStreamRef.current;\n if (localStream) {\n localStream.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n\n localAudioTrackRef.current = null;\n microphoneEnabledRef.current = false;\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n responseStateRef.current = createResponseState();\n functionStateRef.current = createFunctionState();\n\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = null;\n audioElementRef.current = null;\n }\n\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n\n if (outputSourceRef.current) {\n outputSourceRef.current.disconnect();\n outputSourceRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n\n const audioContext = audioContextRef.current;\n if (audioContext) {\n audioContext.close();\n audioContextRef.current = null;\n }\n\n pendingUserTranscriptRef.current = '';\n }, []);\n\n const safeJsonParse = useCallback((value) => {\n if (typeof value !== 'string') return null;\n try {\n return JSON.parse(value);\n } catch {\n return null;\n }\n }, []);\n\n const isAllowedOpenUrl = useCallback((url) => {\n if (typeof url !== 'string') return false;\n return url.trim().startsWith('https://api.mirai');\n }, []);\n\n const enableMicrophone = useCallback(() => {\n const track = localAudioTrackRef.current;\n if (!track || microphoneEnabledRef.current) return;\n track.enabled = true;\n microphoneEnabledRef.current = true;\n }, []);\n\n const clearPendingMcp = useCallback(() => {\n if (mcpStateRef.current.retry.timeoutId) {\n clearTimeout(mcpStateRef.current.retry.timeoutId);\n }\n mcpStateRef.current = createMcpState();\n }, []);\n\n const clearPendingFollowup = useCallback(() => {\n functionStateRef.current.pendingFollowup = false;\n functionStateRef.current.pendingFollowupReason = null;\n functionStateRef.current.pendingFollowupResponse = null;\n }, []);\n\n const sendResponseCreate = useCallback((reason, responseOverrides) => {\n if (responseStateRef.current.activeId || responseStateRef.current.audioResponseIds.size > 0) {\n functionStateRef.current.pendingFollowup = true;\n functionStateRef.current.pendingFollowupReason = reason || null;\n functionStateRef.current.pendingFollowupResponse = responseOverrides || null;\n return false;\n }\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n const responsePayload = responseOverrides\n ? { type: 'response.create', response: responseOverrides }\n : { type: 'response.create' };\n channel.send(JSON.stringify(responsePayload));\n return true;\n }\n return false;\n }, []);\n\n const sendPendingFollowup = useCallback(() => {\n if (\n responseStateRef.current.activeId ||\n responseStateRef.current.audioResponseIds.size > 0 ||\n !functionStateRef.current.pendingFollowup\n ) {\n return false;\n }\n\n const reason = functionStateRef.current.pendingFollowupReason;\n const responseOverrides = functionStateRef.current.pendingFollowupResponse;\n clearPendingFollowup();\n return sendResponseCreate(reason || 'followup', responseOverrides);\n }, [clearPendingFollowup, sendResponseCreate]);\n\n const requestFollowupResponse = useCallback(\n (reason, outputCallId, responseOverrides) => {\n if (outputCallId && mcpStateRef.current.resumeRequestedCallIds.has(outputCallId)) return false;\n if (!outputCallId && mcpStateRef.current.resumeRequestedAny) return false;\n mcpStateRef.current.resumeRequestedAny = true;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.add(outputCallId);\n return sendResponseCreate(reason || 'followup', responseOverrides);\n },\n [sendResponseCreate],\n );\n\n const resumeMcpIfNeeded = useCallback(\n (outputCallId) => {\n if (outputCallId) {\n mcpStateRef.current.pendingCallIds.delete(outputCallId);\n }\n if (\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n !mcpStateRef.current.resumeRequestedAny &&\n !functionStateRef.current.pendingFollowup\n ) {\n clearPendingMcp();\n }\n },\n [clearPendingMcp],\n );\n\n const trackMcpStart = useCallback((callId) => {\n mcpStateRef.current.pending = true;\n if (callId) {\n if (mcpStateRef.current.handledCallIds.has(callId)) return;\n if (mcpStateRef.current.pendingCallIds.has(callId)) return;\n mcpStateRef.current.pendingCallIds.add(callId);\n mcpStateRef.current.pendingCount += 1;\n return;\n }\n mcpStateRef.current.pendingCount += 1;\n }, []);\n\n const getFunctionCallKey = useCallback((callId, responseId, name) => {\n if (callId) return callId;\n if (responseId && name) return `${responseId}:${name}`;\n return null;\n }, []);\n\n const upsertFunctionCall = useCallback(({ key, name, responseId, callId, args }) => {\n if (!key) return;\n const existing = functionStateRef.current.pendingCalls.get(key) || { key };\n functionStateRef.current.pendingCalls.set(key, {\n ...existing,\n name: name ?? existing.name,\n responseId: responseId ?? existing.responseId,\n callId: callId ?? existing.callId,\n args: args ?? existing.args,\n });\n }, []);\n\n const handleMcpCompletion = useCallback(\n (outputCallId, requestFollowup = true) => {\n mcpStateRef.current.pending = true;\n if (outputCallId) {\n if (mcpStateRef.current.handledCallIds.has(outputCallId)) return;\n mcpStateRef.current.handledCallIds.add(outputCallId);\n }\n if (mcpStateRef.current.pendingCount > 0) mcpStateRef.current.pendingCount -= 1;\n if (requestFollowup && mcpStateRef.current.pendingCount === 0) {\n requestFollowupResponse('mcp_completed', outputCallId);\n }\n resumeMcpIfNeeded(outputCallId);\n },\n [requestFollowupResponse, resumeMcpIfNeeded],\n );\n\n const scheduleResumeRetry = useCallback(\n (outputCallId) => {\n if (!mcpStateRef.current.pending) return;\n if (mcpStateRef.current.retry.timeoutId) return;\n if (mcpStateRef.current.retry.count >= 2) {\n clearPendingMcp();\n return;\n }\n const attempt = mcpStateRef.current.retry.count + 1;\n const delay = attempt * 600;\n mcpStateRef.current.retry.count = attempt;\n mcpStateRef.current.retry.timeoutId = setTimeout(() => {\n mcpStateRef.current.retry.timeoutId = null;\n if (outputCallId) mcpStateRef.current.resumeRequestedCallIds.delete(outputCallId);\n mcpStateRef.current.resumeRequestedAny = false;\n requestFollowupResponse('mcp_completed', outputCallId);\n }, delay);\n },\n [clearPendingMcp, requestFollowupResponse],\n );\n\n const sendFunctionCallOutput = useCallback((callId, output) => {\n const channel = dataChannelRef.current;\n if (!callId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output || {}),\n },\n }),\n );\n return true;\n }, []);\n\n const sendItemRetrieve = useCallback((itemId) => {\n const channel = dataChannelRef.current;\n if (!itemId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.retrieve',\n item_id: itemId,\n }),\n );\n return true;\n }, []);\n\n const sendMcpApproval = useCallback((approvalRequestId, approve = true) => {\n const channel = dataChannelRef.current;\n if (!approvalRequestId || !channel || channel.readyState !== 'open') return false;\n channel.send(\n JSON.stringify({\n type: 'conversation.item.create',\n previous_item_id: approvalRequestId,\n item: {\n type: 'mcp_approval_response',\n approval_request_id: approvalRequestId,\n approve,\n },\n }),\n );\n return true;\n }, []);\n\n const buildMcpFailureInstructions = useCallback((localeHint) => {\n const normalizedLocale = localeHint || 'en-US';\n return `Respond in the language that matches the locale code \"${normalizedLocale}\". The requested information could not be retrieved because a data source failed. Apologize briefly and ask if the user wants to try again or ask something else.`;\n }, []);\n\n const handleMcpFailure = useCallback(\n (callId, localeHint) => {\n const failureKey = callId || 'unknown';\n if (mcpStateRef.current.failedCallIds.has(failureKey)) return;\n mcpStateRef.current.failedCallIds.add(failureKey);\n const instructions = buildMcpFailureInstructions(localeHint);\n requestFollowupResponse('mcp_failed', callId, { instructions });\n },\n [buildMcpFailureInstructions, requestFollowupResponse],\n );\n\n const handleOpenUrlCalls = useCallback(\n ({ responseId, outputItems }) => {\n const responseOpenUrlItems = Array.isArray(outputItems)\n ? outputItems.filter((item) => item?.type === 'function_call' && item?.name === 'open_url')\n : [];\n responseOpenUrlItems.forEach((item) => {\n const key = getFunctionCallKey(item.call_id || item.id || null, responseId, item.name);\n upsertFunctionCall({\n key,\n name: item.name,\n responseId,\n callId: item.call_id || item.id || null,\n args: item.arguments || null,\n });\n });\n\n const pendingCalls = [...functionStateRef.current.pendingCalls.values()].filter((call) => {\n if (!call?.name || call.name !== 'open_url') return false;\n if (!responseId) return true;\n return !call.responseId || call.responseId === responseId;\n });\n\n for (const call of pendingCalls) {\n const callKey = call.key || call.callId || call.args || null;\n if (callKey && functionStateRef.current.handledOpenUrlCalls.has(callKey)) continue;\n const args = safeJsonParse(call.args);\n const url = args?.url;\n if (!isAllowedOpenUrl(url)) {\n if (call.callId) {\n sendFunctionCallOutput(call.callId, {\n error: 'blocked_url',\n allowed_prefix: 'https://api.mirai',\n });\n requestFollowupResponse('open_url_blocked', call.callId);\n }\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n continue;\n }\n if (callKey) functionStateRef.current.handledOpenUrlCalls.add(callKey);\n if (call.key) functionStateRef.current.pendingCalls.delete(call.key);\n cleanupRealtimeSession(true);\n window.location.assign(url.trim());\n return true;\n }\n return false;\n },\n [\n cleanupRealtimeSession,\n getFunctionCallKey,\n isAllowedOpenUrl,\n requestFollowupResponse,\n safeJsonParse,\n sendFunctionCallOutput,\n upsertFunctionCall,\n ],\n );\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupRealtimeSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupRealtimeSession(true);\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }&locale=${locale ?? ''}&currency=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n peerConnection.addEventListener('connectionstatechange', () => {\n const { connectionState } = peerConnection;\n if (connectionState === 'failed' || connectionState === 'disconnected' || connectionState === 'closed') {\n finalizeSession();\n }\n });\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n dataChannel.addEventListener('close', () => {\n finalizeSession();\n });\n dataChannel.addEventListener('error', (event) => {\n finalizeSession(event);\n });\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n const { response } = payload;\n const itemId = payload.item?.id || payload.item_id || null;\n const callId = payload.item?.call_id || payload.call_id || itemId;\n const responseId = payload.response_id || response?.id || null;\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'message') {\n if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {\n introResponseIdRef.current = payload.response_id;\n }\n if (responseId) responseStateRef.current.audioResponseIds.add(responseId);\n if (responseId) {\n mcpStateRef.current.responsesWithMessage.add(responseId);\n mcpStateRef.current.responseIds.delete(responseId);\n }\n if (mcpStateRef.current.pending && mcpStateRef.current.pendingCount === 0) {\n if (mcpStateRef.current.resumeRequestedAny) clearPendingFollowup();\n clearPendingMcp();\n }\n }\n\n if (payload.type === 'output_audio_buffer.stopped' || payload.type === 'output_audio_buffer.cleared') {\n if (responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n } else {\n responseStateRef.current.audioResponseIds.clear();\n }\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n sendPendingFollowup();\n }\n\n if (\n payload.type === 'response.output_item.added' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (responseId) mcpStateRef.current.responseIds.add(responseId);\n trackMcpStart(callId);\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'function_call') {\n const name = payload.item?.name || payload.name || null;\n const key = getFunctionCallKey(callId, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId, args: payload.item?.arguments || null });\n }\n\n if (payload.type === 'response.function_call_arguments.done') {\n const name = payload.name || null;\n const key = getFunctionCallKey(payload.call_id || null, responseId, name);\n upsertFunctionCall({ key, name, responseId, callId: payload.call_id || null, args: payload.arguments });\n }\n\n if (payload.type === 'response.mcp_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'response.mcp_tool_call.in_progress') {\n trackMcpStart(callId);\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (payload.type === 'mcp_list_tools.in_progress' || payload.type === 'response.mcp_list_tools.in_progress') {\n if (payload.item_id) sendItemRetrieve(payload.item_id);\n }\n\n if (\n payload.type === 'response.output_item.done' &&\n (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call')\n ) {\n if (payload.item?.error || payload.item?.status === 'failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (\n payload.type === 'response.mcp_call.completed' ||\n payload.type === 'response.mcp_call.failed' ||\n payload.type === 'response.mcp_tool_call.completed' ||\n payload.type === 'response.mcp_tool_call.failed'\n ) {\n if (payload.type === 'response.mcp_call.failed' || payload.type === 'response.mcp_tool_call.failed') {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n\n if (payload.type === 'conversation.item.added' || payload.type === 'conversation.item.retrieved') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n trackMcpStart(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'conversation.item.done') {\n if (payload.item?.type === 'mcp_call' || payload.item?.type === 'mcp_tool_call') {\n if (payload.item?.status === 'failed' || payload.item?.error) {\n handleMcpFailure(callId, locale);\n }\n handleMcpCompletion(callId);\n }\n if (payload.item?.type === 'mcp_approval_request') {\n const approvalId = payload.item?.id || payload.item_id || null;\n if (approvalId && !mcpStateRef.current.handledApprovalIds.has(approvalId)) {\n mcpStateRef.current.handledApprovalIds.add(approvalId);\n sendMcpApproval(approvalId, true);\n }\n }\n }\n\n if (payload.type === 'response.done') {\n if (responseId) mcpStateRef.current.responsesDone.add(responseId);\n const outputItems = Array.isArray(response?.output) ? response.output : [];\n const hasMessage = outputItems.some((item) => item?.type === 'message');\n const status = response?.status;\n const reason = response?.status_details?.reason || response?.status_details?.error?.code || null;\n if (status !== 'completed' && responseId) {\n responseStateRef.current.audioResponseIds.delete(responseId);\n }\n if (status === 'completed') {\n if (\n hasMessage &&\n mcpStateRef.current.pending &&\n mcpStateRef.current.pendingCount === 0 &&\n mcpStateRef.current.responseIds.size === 0\n ) {\n clearPendingMcp();\n }\n } else if (mcpStateRef.current.pending) {\n if (status === 'failed') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n } else if (status === 'cancelled' && reason !== 'turn_detected') {\n if (mcpStateRef.current.failedCallIds.size === 0) {\n scheduleResumeRetry(callId);\n }\n }\n }\n resumeMcpIfNeeded(callId);\n handleOpenUrlCalls({ responseId, outputItems });\n }\n\n if (payload.type === 'response.created') {\n if (responseId) responseStateRef.current.activeId = responseId;\n }\n\n if (payload.type === 'conversation.item.input_audio_transcription.completed') {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n }\n\n if (payload.type === 'response.done' && responseId && responseStateRef.current.activeId === responseId) {\n responseStateRef.current.activeId = null;\n sendPendingFollowup();\n }\n\n if (payload.type === 'response.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n const channelId = hotelId || chainId;\n if (channelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupRealtimeSession,\n clearPendingFollowup,\n clearPendingMcp,\n enableMicrophone,\n handleMcpCompletion,\n handleMcpFailure,\n handleOpenUrlCalls,\n resumeMcpIfNeeded,\n scheduleResumeRetry,\n sendPendingFollowup,\n sendItemRetrieve,\n sendMcpApproval,\n trackMcpStart,\n upsertFunctionCall,\n getFunctionCallKey,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupRealtimeSession(true);\n }, [cleanupRealtimeSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useOpenAiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
@@ -8,7 +8,6 @@ var _dataSources = require("@mirai/data-sources");
8
8
  var _react = require("react");
9
9
  var _helpers = require("../../../../helpers");
10
10
  var _helpers2 = require("../../../helpers");
11
- var _lobby = require("../../../services/lobby.service");
12
11
  const XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';
13
12
  const DEFAULT_MODEL = 'grok-voice-latest';
14
13
  const SAMPLE_RATE = 24000;
@@ -229,48 +228,25 @@ const useXaiRealtimeSession = () => {
229
228
  cleanupSession();
230
229
  window.location.assign(url.trim());
231
230
  }, [cleanupSession, sendJson]);
232
- const persistTranscriptPair = (0, _react.useCallback)(async _ref2 => {
231
+ const persistTranscriptPair = (0, _react.useCallback)(_ref2 => {
233
232
  let fingerprint = _ref2.fingerprint,
234
233
  hotelId = _ref2.hotelId,
235
234
  locale = _ref2.locale,
235
+ onTranscript = _ref2.onTranscript,
236
236
  transcript = _ref2.transcript;
237
237
  if (!transcript || !pendingUserTranscriptRef.current) return;
238
238
  const input = pendingUserTranscriptRef.current.trim();
239
239
  pendingUserTranscriptRef.current = '';
240
240
  const activeLocale = locale || 'en-US';
241
- if (hotelId) {
242
- try {
243
- const chatId = await (0, _lobby.ensureChatId)({
244
- fingerprint,
245
- channelId: hotelId,
246
- session: {
247
- locale: activeLocale
248
- }
249
- });
250
- if (chatId) {
251
- await (0, _lobby.createChatMessage)({
252
- author: 'user',
253
- body: input,
254
- chatId,
255
- meta: {
256
- audio: true
257
- }
258
- });
259
- await (0, _lobby.createChatMessage)({
260
- author: 'ai',
261
- body: transcript,
262
- chatId,
263
- meta: {
264
- audio: true
265
- }
266
- });
267
- }
268
- } catch (error) {
269
- _dataSources.Event.publish(_helpers.EVENT.METRICS, {
270
- id: _helpers.METRICS_EVENTS.AURA_ERROR,
271
- error: error === null || error === void 0 ? void 0 : error.message
272
- });
273
- }
241
+ if (hotelId && onTranscript) {
242
+ onTranscript({
243
+ author: 'user',
244
+ body: input
245
+ });
246
+ onTranscript({
247
+ author: 'ai',
248
+ body: transcript
249
+ });
274
250
  }
275
251
  _dataSources.Event.publish(_helpers.EVENT.METRICS, {
276
252
  id: 'SYNAPSE_RESPONSE',
@@ -288,6 +264,7 @@ const useXaiRealtimeSession = () => {
288
264
  hotelId = _ref3.hotelId,
289
265
  isChain = _ref3.isChain,
290
266
  locale = _ref3.locale,
267
+ onTranscript = _ref3.onTranscript,
291
268
  setIsConnecting = _ref3.setIsConnecting,
292
269
  setReady = _ref3.setReady;
293
270
  cleanupSession();
@@ -447,10 +424,11 @@ const useXaiRealtimeSession = () => {
447
424
  {
448
425
  var _ref4;
449
426
  const transcript = (_ref4 = payload.transcript || payload.text) === null || _ref4 === void 0 ? void 0 : _ref4.trim();
450
- await persistTranscriptPair({
427
+ persistTranscriptPair({
451
428
  fingerprint,
452
429
  hotelId,
453
430
  locale,
431
+ onTranscript,
454
432
  transcript
455
433
  });
456
434
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"useXaiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","_lobby","XAI_REALTIME_URL","DEFAULT_MODEL","SAMPLE_RATE","PROCESSOR_BUFFER_SIZE","ALLOWED_OPEN_URL_PREFIX","float32ToInt16","float32","int16","Int16Array","length","i","sample","Math","max","min","int16ToFloat32","Float32Array","base64FromInt16","bytes","Uint8Array","buffer","byteOffset","byteLength","binary","chunkSize","String","fromCharCode","apply","subarray","btoa","int16FromBase64","b64","atob","charCodeAt","floor","extractAudioDelta","payload","_payload$delta","delta","audio","useXaiRealtimeSession","wsRef","useRef","audioContextRef","inputSourceRef","scriptProcessorRef","inputAnalyserRef","outputAnalyserRef","inputMuteGainRef","localStreamRef","microphoneEnabledRef","playbackTimeRef","activePlaybackSourcesRef","Set","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","pendingSessionConfigRef","sessionAppliedRef","introSentRef","pendingUserTranscriptRef","handledOpenUrlCallsRef","cleanupSession","useCallback","ws","current","readyState","WebSocket","OPEN","CONNECTING","close","onaudioprocess","disconnect","forEach","source","stop","_unused","getTracks","track","stopPendingPlayback","_unused2","currentTime","scheduleAudioPlayback","audioBase64","context","analyser","createBuffer","copyToChannel","createBufferSource","connect","startAt","start","duration","add","onended","delete","sendJson","send","JSON","stringify","sendIntro","_ref","assistantName","locale","localeHint","text","concat","type","item","role","content","handleFunctionCall","_parsed","name","callId","call_id","has","parsed","parse","arguments","_unused3","url","allowed","trim","startsWith","output","error","allowed_prefix","window","location","assign","persistTranscriptPair","_ref2","fingerprint","hotelId","transcript","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","Event","publish","EVENT","METRICS","id","METRICS_EVENTS","AURA_ERROR","message","agent","startSession","_ref3","assistant_name","chainId","currency","isChain","setIsConnecting","setReady","getClientFingerprint","finalizeSession","errorMessage","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralToken","value","sessionConfig","model","Error","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","audioContext","sampleRate","state","resume","mediaStream","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","channelCount","inputSource","createMediaStreamSource","createAnalyser","fftSize","destination","frequencyBinCount","getByteFrequencyData","processor","createScriptProcessor","muteGain","createGain","gain","event","channelData","inputBuffer","getChannelData","encodeURIComponent","addEventListener","AURA_START","data","_unused4","_payload$transcript","_ref4","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\n\nconst XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL = 'grok-voice-latest';\nconst SAMPLE_RATE = 24000;\nconst PROCESSOR_BUFFER_SIZE = 2048;\nconst ALLOWED_OPEN_URL_PREFIX = 'https://api.mirai';\n\nconst float32ToInt16 = (float32) => {\n const int16 = new Int16Array(float32.length);\n for (let i = 0; i < float32.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, float32[i]));\n int16[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n }\n return int16;\n};\n\nconst int16ToFloat32 = (int16) => {\n const float32 = new Float32Array(int16.length);\n for (let i = 0; i < int16.length; i += 1) {\n float32[i] = int16[i] / 0x8000;\n }\n return float32;\n};\n\nconst base64FromInt16 = (int16) => {\n const bytes = new Uint8Array(int16.buffer, int16.byteOffset, int16.byteLength);\n let binary = '';\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n};\n\nconst int16FromBase64 = (b64) => {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n return new Int16Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 2));\n};\n\nconst extractAudioDelta = (payload) => {\n // xAI docs show response.output_audio.delta with delta: { type: 'audio_delta', audio: 'base64' }.\n // Stay defensive in case the server returns a plain string in delta or a top-level audio field.\n if (typeof payload?.delta === 'string') return payload.delta;\n if (typeof payload?.delta?.audio === 'string') return payload.delta.audio;\n if (typeof payload?.audio === 'string') return payload.audio;\n return null;\n};\n\nconst useXaiRealtimeSession = () => {\n const wsRef = useRef(null);\n const audioContextRef = useRef(null);\n const inputSourceRef = useRef(null);\n const scriptProcessorRef = useRef(null);\n const inputAnalyserRef = useRef(null);\n const outputAnalyserRef = useRef(null);\n const inputMuteGainRef = useRef(null);\n const localStreamRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const playbackTimeRef = useRef(0);\n const activePlaybackSourcesRef = useRef(new Set());\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n const pendingSessionConfigRef = useRef(null);\n const sessionAppliedRef = useRef(false);\n const introSentRef = useRef(false);\n const pendingUserTranscriptRef = useRef('');\n const handledOpenUrlCallsRef = useRef(new Set());\n\n const cleanupSession = useCallback(() => {\n const ws = wsRef.current;\n if (ws) {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) ws.close();\n wsRef.current = null;\n }\n\n if (scriptProcessorRef.current) {\n scriptProcessorRef.current.onaudioprocess = null;\n scriptProcessorRef.current.disconnect();\n scriptProcessorRef.current = null;\n }\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n if (inputMuteGainRef.current) {\n inputMuteGainRef.current.disconnect();\n inputMuteGainRef.current = null;\n }\n if (inputAnalyserRef.current) {\n inputAnalyserRef.current.disconnect();\n inputAnalyserRef.current = null;\n }\n if (outputAnalyserRef.current) {\n outputAnalyserRef.current.disconnect();\n outputAnalyserRef.current = null;\n }\n\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n\n if (localStreamRef.current) {\n localStreamRef.current.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n microphoneEnabledRef.current = false;\n playbackTimeRef.current = 0;\n pendingSessionConfigRef.current = null;\n sessionAppliedRef.current = false;\n introSentRef.current = false;\n pendingUserTranscriptRef.current = '';\n handledOpenUrlCallsRef.current = new Set();\n }, []);\n\n const stopPendingPlayback = useCallback(() => {\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n if (audioContextRef.current) playbackTimeRef.current = audioContextRef.current.currentTime;\n }, []);\n\n const scheduleAudioPlayback = useCallback((audioBase64) => {\n const context = audioContextRef.current;\n const analyser = outputAnalyserRef.current;\n if (!context || !analyser) return;\n const int16 = int16FromBase64(audioBase64);\n if (!int16.length) return;\n const float32 = int16ToFloat32(int16);\n const buffer = context.createBuffer(1, float32.length, SAMPLE_RATE);\n buffer.copyToChannel(float32, 0);\n const source = context.createBufferSource();\n source.buffer = buffer;\n source.connect(analyser);\n const startAt = Math.max(context.currentTime, playbackTimeRef.current);\n source.start(startAt);\n playbackTimeRef.current = startAt + buffer.duration;\n activePlaybackSourcesRef.current.add(source);\n source.onended = () => {\n activePlaybackSourcesRef.current.delete(source);\n };\n }, []);\n\n const sendJson = useCallback((payload) => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return false;\n ws.send(JSON.stringify(payload));\n return true;\n }, []);\n\n const sendIntro = useCallback(\n ({ assistantName, locale }) => {\n if (introSentRef.current) return;\n const localeHint = locale || 'en-US';\n const text = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistantName}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n sendJson({ type: 'response.create' });\n introSentRef.current = true;\n },\n [sendJson],\n );\n\n const handleFunctionCall = useCallback(\n (payload) => {\n const { name } = payload;\n const callId = payload.call_id;\n if (name !== 'open_url' || !callId) return;\n if (handledOpenUrlCallsRef.current.has(callId)) return;\n handledOpenUrlCallsRef.current.add(callId);\n\n let parsed = null;\n try {\n parsed = JSON.parse(payload.arguments || '{}');\n } catch {\n parsed = null;\n }\n const url = parsed?.url;\n const allowed = typeof url === 'string' && url.trim().startsWith(ALLOWED_OPEN_URL_PREFIX);\n\n if (!allowed) {\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify({ error: 'blocked_url', allowed_prefix: ALLOWED_OPEN_URL_PREFIX }),\n },\n });\n sendJson({ type: 'response.create' });\n return;\n }\n\n cleanupSession();\n window.location.assign(url.trim());\n },\n [cleanupSession, sendJson],\n );\n\n const persistTranscriptPair = useCallback(async ({ fingerprint, hotelId, locale, transcript }) => {\n if (!transcript || !pendingUserTranscriptRef.current) return;\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n const activeLocale = locale || 'en-US';\n\n if (hotelId) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId: hotelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n }\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }, []);\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, currency, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupSession();\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?voiceModel=xai&fingerprint=${fingerprint}&hotelId=${\n isChain ? '' : hotelId ?? ''\n }&chainId=${isChain ? chainId ?? '' : ''}&locale=${locale ?? ''}&currency=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralToken = sessionResponse?.value;\n const sessionConfig = sessionResponse?.session;\n const model = sessionResponse?.model || DEFAULT_MODEL;\n if (!ephemeralToken || !sessionConfig) throw new Error('Invalid xAI session response');\n pendingSessionConfigRef.current = sessionConfig;\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor({ sampleRate: SAMPLE_RATE });\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: SAMPLE_RATE,\n },\n });\n localStreamRef.current = mediaStream;\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n\n const inputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n inputAnalyserRef.current = inputAnalyser;\n inputSource.connect(inputAnalyser);\n\n const outputAnalyser = audioContext.createAnalyser();\n outputAnalyser.fftSize = 1024;\n outputAnalyserRef.current = outputAnalyser;\n outputAnalyser.connect(audioContext.destination);\n\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!inputAnalyserRef.current || !inputFrequencyDataRef.current) return null;\n inputAnalyserRef.current.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!outputAnalyserRef.current || !outputFrequencyDataRef.current) return null;\n outputAnalyserRef.current.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n // ScriptProcessor is deprecated but still the simplest portable way to obtain\n // raw PCM frames synchronously. It must be connected to the destination to be scheduled;\n // we route it through a muted GainNode so the mic input is never audible locally.\n const processor = audioContext.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1);\n scriptProcessorRef.current = processor;\n const muteGain = audioContext.createGain();\n muteGain.gain.value = 0;\n inputMuteGainRef.current = muteGain;\n inputSource.connect(processor);\n processor.connect(muteGain);\n muteGain.connect(audioContext.destination);\n\n processor.onaudioprocess = (event) => {\n if (!microphoneEnabledRef.current) return;\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n const channelData = event.inputBuffer.getChannelData(0);\n const int16 = float32ToInt16(channelData);\n ws.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64FromInt16(int16),\n }),\n );\n };\n\n const ws = new WebSocket(`${XAI_REALTIME_URL}?model=${encodeURIComponent(model)}`, [\n `xai-client-secret.${ephemeralToken}`,\n ]);\n wsRef.current = ws;\n\n ws.addEventListener('open', () => {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n sendJson({ type: 'session.update', session: pendingSessionConfigRef.current });\n });\n\n ws.addEventListener('error', () => finalizeSession('xAI WebSocket error'));\n ws.addEventListener('close', () => finalizeSession());\n\n ws.addEventListener('message', async (event) => {\n let payload;\n try {\n payload = JSON.parse(event.data);\n } catch {\n return;\n }\n\n switch (payload.type) {\n case 'session.created':\n case 'session.updated': {\n if (sessionAppliedRef.current) break;\n sessionAppliedRef.current = true;\n setReady(true);\n sendIntro({ assistantName: assistant_name, locale });\n break;\n }\n case 'response.output_audio.delta': {\n const audio = extractAudioDelta(payload);\n if (audio) scheduleAudioPlayback(audio);\n break;\n }\n case 'input_audio_buffer.speech_started': {\n // Barge-in: cut current playback so the user can take over the turn cleanly.\n stopPendingPlayback();\n break;\n }\n case 'response.function_call_arguments.done': {\n handleFunctionCall(payload);\n break;\n }\n case 'response.done': {\n // Open the microphone once the intro response finishes; subsequent turns use server VAD.\n if (!microphoneEnabledRef.current) microphoneEnabledRef.current = true;\n break;\n }\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n break;\n }\n case 'response.output_audio_transcript.done':\n case 'response.text.done': {\n const transcript = (payload.transcript || payload.text)?.trim();\n await persistTranscriptPair({ fingerprint, hotelId, locale, transcript });\n break;\n }\n default:\n break;\n }\n });\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupSession,\n handleFunctionCall,\n persistTranscriptPair,\n scheduleAudioPlayback,\n sendIntro,\n sendJson,\n stopPendingPlayback,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupSession();\n }, [cleanupSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useXaiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useXaiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","_helpers2","XAI_REALTIME_URL","DEFAULT_MODEL","SAMPLE_RATE","PROCESSOR_BUFFER_SIZE","ALLOWED_OPEN_URL_PREFIX","float32ToInt16","float32","int16","Int16Array","length","i","sample","Math","max","min","int16ToFloat32","Float32Array","base64FromInt16","bytes","Uint8Array","buffer","byteOffset","byteLength","binary","chunkSize","String","fromCharCode","apply","subarray","btoa","int16FromBase64","b64","atob","charCodeAt","floor","extractAudioDelta","payload","_payload$delta","delta","audio","useXaiRealtimeSession","wsRef","useRef","audioContextRef","inputSourceRef","scriptProcessorRef","inputAnalyserRef","outputAnalyserRef","inputMuteGainRef","localStreamRef","microphoneEnabledRef","playbackTimeRef","activePlaybackSourcesRef","Set","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","pendingSessionConfigRef","sessionAppliedRef","introSentRef","pendingUserTranscriptRef","handledOpenUrlCallsRef","cleanupSession","useCallback","ws","current","readyState","WebSocket","OPEN","CONNECTING","close","onaudioprocess","disconnect","forEach","source","stop","_unused","getTracks","track","stopPendingPlayback","_unused2","currentTime","scheduleAudioPlayback","audioBase64","context","analyser","createBuffer","copyToChannel","createBufferSource","connect","startAt","start","duration","add","onended","delete","sendJson","send","JSON","stringify","sendIntro","_ref","assistantName","locale","localeHint","text","concat","type","item","role","content","handleFunctionCall","_parsed","name","callId","call_id","has","parsed","parse","arguments","_unused3","url","allowed","trim","startsWith","output","error","allowed_prefix","window","location","assign","persistTranscriptPair","_ref2","fingerprint","hotelId","onTranscript","transcript","input","activeLocale","author","body","Event","publish","EVENT","METRICS","id","agent","startSession","_ref3","assistant_name","chainId","currency","isChain","setIsConnecting","setReady","getClientFingerprint","finalizeSession","errorMessage","message","METRICS_EVENTS","AURA_ERROR","sessionResponse","request","endpoint","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralToken","value","sessionConfig","session","model","Error","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","audioContext","sampleRate","state","resume","mediaStream","navigator","mediaDevices","getUserMedia","echoCancellation","noiseSuppression","autoGainControl","channelCount","inputSource","createMediaStreamSource","createAnalyser","fftSize","destination","frequencyBinCount","getByteFrequencyData","processor","createScriptProcessor","muteGain","createGain","gain","event","channelData","inputBuffer","getChannelData","encodeURIComponent","addEventListener","AURA_START","data","_unused4","_payload$transcript","_ref4","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useXaiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT, METRICS_EVENTS } from '../../../../helpers';\nimport { getClientFingerprint } from '../../../helpers';\n\nconst XAI_REALTIME_URL = 'wss://api.x.ai/v1/realtime';\nconst DEFAULT_MODEL = 'grok-voice-latest';\nconst SAMPLE_RATE = 24000;\nconst PROCESSOR_BUFFER_SIZE = 2048;\nconst ALLOWED_OPEN_URL_PREFIX = 'https://api.mirai';\n\nconst float32ToInt16 = (float32) => {\n const int16 = new Int16Array(float32.length);\n for (let i = 0; i < float32.length; i += 1) {\n const sample = Math.max(-1, Math.min(1, float32[i]));\n int16[i] = sample < 0 ? sample * 0x8000 : sample * 0x7fff;\n }\n return int16;\n};\n\nconst int16ToFloat32 = (int16) => {\n const float32 = new Float32Array(int16.length);\n for (let i = 0; i < int16.length; i += 1) {\n float32[i] = int16[i] / 0x8000;\n }\n return float32;\n};\n\nconst base64FromInt16 = (int16) => {\n const bytes = new Uint8Array(int16.buffer, int16.byteOffset, int16.byteLength);\n let binary = '';\n const chunkSize = 0x8000;\n for (let i = 0; i < bytes.length; i += chunkSize) {\n binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));\n }\n return btoa(binary);\n};\n\nconst int16FromBase64 = (b64) => {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);\n return new Int16Array(bytes.buffer, bytes.byteOffset, Math.floor(bytes.byteLength / 2));\n};\n\nconst extractAudioDelta = (payload) => {\n // xAI docs show response.output_audio.delta with delta: { type: 'audio_delta', audio: 'base64' }.\n // Stay defensive in case the server returns a plain string in delta or a top-level audio field.\n if (typeof payload?.delta === 'string') return payload.delta;\n if (typeof payload?.delta?.audio === 'string') return payload.delta.audio;\n if (typeof payload?.audio === 'string') return payload.audio;\n return null;\n};\n\nconst useXaiRealtimeSession = () => {\n const wsRef = useRef(null);\n const audioContextRef = useRef(null);\n const inputSourceRef = useRef(null);\n const scriptProcessorRef = useRef(null);\n const inputAnalyserRef = useRef(null);\n const outputAnalyserRef = useRef(null);\n const inputMuteGainRef = useRef(null);\n const localStreamRef = useRef(null);\n const microphoneEnabledRef = useRef(false);\n const playbackTimeRef = useRef(0);\n const activePlaybackSourcesRef = useRef(new Set());\n const inputFrequencyDataRef = useRef(null);\n const outputFrequencyDataRef = useRef(null);\n const audioAnalyzersRef = useRef({\n inputAnalyser: null,\n outputAnalyser: null,\n getInputByteFrequencyData: () => null,\n getOutputByteFrequencyData: () => null,\n });\n const pendingSessionConfigRef = useRef(null);\n const sessionAppliedRef = useRef(false);\n const introSentRef = useRef(false);\n const pendingUserTranscriptRef = useRef('');\n const handledOpenUrlCallsRef = useRef(new Set());\n\n const cleanupSession = useCallback(() => {\n const ws = wsRef.current;\n if (ws) {\n if (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING) ws.close();\n wsRef.current = null;\n }\n\n if (scriptProcessorRef.current) {\n scriptProcessorRef.current.onaudioprocess = null;\n scriptProcessorRef.current.disconnect();\n scriptProcessorRef.current = null;\n }\n if (inputSourceRef.current) {\n inputSourceRef.current.disconnect();\n inputSourceRef.current = null;\n }\n if (inputMuteGainRef.current) {\n inputMuteGainRef.current.disconnect();\n inputMuteGainRef.current = null;\n }\n if (inputAnalyserRef.current) {\n inputAnalyserRef.current.disconnect();\n inputAnalyserRef.current = null;\n }\n if (outputAnalyserRef.current) {\n outputAnalyserRef.current.disconnect();\n outputAnalyserRef.current = null;\n }\n\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n\n if (localStreamRef.current) {\n localStreamRef.current.getTracks().forEach((track) => track.stop());\n localStreamRef.current = null;\n }\n if (audioContextRef.current) {\n audioContextRef.current.close();\n audioContextRef.current = null;\n }\n\n audioAnalyzersRef.current.inputAnalyser = null;\n audioAnalyzersRef.current.outputAnalyser = null;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => null;\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => null;\n inputFrequencyDataRef.current = null;\n outputFrequencyDataRef.current = null;\n microphoneEnabledRef.current = false;\n playbackTimeRef.current = 0;\n pendingSessionConfigRef.current = null;\n sessionAppliedRef.current = false;\n introSentRef.current = false;\n pendingUserTranscriptRef.current = '';\n handledOpenUrlCallsRef.current = new Set();\n }, []);\n\n const stopPendingPlayback = useCallback(() => {\n activePlaybackSourcesRef.current.forEach((source) => {\n try {\n source.stop();\n } catch {\n // already stopped\n }\n });\n activePlaybackSourcesRef.current = new Set();\n if (audioContextRef.current) playbackTimeRef.current = audioContextRef.current.currentTime;\n }, []);\n\n const scheduleAudioPlayback = useCallback((audioBase64) => {\n const context = audioContextRef.current;\n const analyser = outputAnalyserRef.current;\n if (!context || !analyser) return;\n const int16 = int16FromBase64(audioBase64);\n if (!int16.length) return;\n const float32 = int16ToFloat32(int16);\n const buffer = context.createBuffer(1, float32.length, SAMPLE_RATE);\n buffer.copyToChannel(float32, 0);\n const source = context.createBufferSource();\n source.buffer = buffer;\n source.connect(analyser);\n const startAt = Math.max(context.currentTime, playbackTimeRef.current);\n source.start(startAt);\n playbackTimeRef.current = startAt + buffer.duration;\n activePlaybackSourcesRef.current.add(source);\n source.onended = () => {\n activePlaybackSourcesRef.current.delete(source);\n };\n }, []);\n\n const sendJson = useCallback((payload) => {\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return false;\n ws.send(JSON.stringify(payload));\n return true;\n }, []);\n\n const sendIntro = useCallback(\n ({ assistantName, locale }) => {\n if (introSentRef.current) return;\n const localeHint = locale || 'en-US';\n const text = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistantName}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text }],\n },\n });\n sendJson({ type: 'response.create' });\n introSentRef.current = true;\n },\n [sendJson],\n );\n\n const handleFunctionCall = useCallback(\n (payload) => {\n const { name } = payload;\n const callId = payload.call_id;\n if (name !== 'open_url' || !callId) return;\n if (handledOpenUrlCallsRef.current.has(callId)) return;\n handledOpenUrlCallsRef.current.add(callId);\n\n let parsed = null;\n try {\n parsed = JSON.parse(payload.arguments || '{}');\n } catch {\n parsed = null;\n }\n const url = parsed?.url;\n const allowed = typeof url === 'string' && url.trim().startsWith(ALLOWED_OPEN_URL_PREFIX);\n\n if (!allowed) {\n sendJson({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify({ error: 'blocked_url', allowed_prefix: ALLOWED_OPEN_URL_PREFIX }),\n },\n });\n sendJson({ type: 'response.create' });\n return;\n }\n\n cleanupSession();\n window.location.assign(url.trim());\n },\n [cleanupSession, sendJson],\n );\n\n const persistTranscriptPair = useCallback(({ fingerprint, hotelId, locale, onTranscript, transcript }) => {\n if (!transcript || !pendingUserTranscriptRef.current) return;\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n const activeLocale = locale || 'en-US';\n\n if (hotelId && onTranscript) {\n onTranscript({ author: 'user', body: input });\n onTranscript({ author: 'ai', body: transcript });\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }, []);\n\n const startSession = useCallback(\n async ({\n assistant_name,\n chainId,\n currency,\n hotelId,\n isChain,\n locale,\n onTranscript,\n setIsConnecting,\n setReady,\n }) => {\n cleanupSession();\n\n const fingerprint = getClientFingerprint();\n const finalizeSession = (error) => {\n const errorMessage = typeof error === 'string' ? error : error?.message;\n if (errorMessage) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: errorMessage });\n }\n cleanupSession();\n setReady(false);\n setIsConnecting(false);\n };\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?voiceModel=xai&fingerprint=${fingerprint}&hotelId=${\n isChain ? '' : hotelId ?? ''\n }&chainId=${isChain ? chainId ?? '' : ''}&locale=${locale ?? ''}&currency=${currency ?? ''}`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralToken = sessionResponse?.value;\n const sessionConfig = sessionResponse?.session;\n const model = sessionResponse?.model || DEFAULT_MODEL;\n if (!ephemeralToken || !sessionConfig) throw new Error('Invalid xAI session response');\n pendingSessionConfigRef.current = sessionConfig;\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor({ sampleRate: SAMPLE_RATE });\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: SAMPLE_RATE,\n },\n });\n localStreamRef.current = mediaStream;\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n\n const inputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n inputAnalyserRef.current = inputAnalyser;\n inputSource.connect(inputAnalyser);\n\n const outputAnalyser = audioContext.createAnalyser();\n outputAnalyser.fftSize = 1024;\n outputAnalyserRef.current = outputAnalyser;\n outputAnalyser.connect(audioContext.destination);\n\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!inputAnalyserRef.current || !inputFrequencyDataRef.current) return null;\n inputAnalyserRef.current.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!outputAnalyserRef.current || !outputFrequencyDataRef.current) return null;\n outputAnalyserRef.current.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n // ScriptProcessor is deprecated but still the simplest portable way to obtain\n // raw PCM frames synchronously. It must be connected to the destination to be scheduled;\n // we route it through a muted GainNode so the mic input is never audible locally.\n const processor = audioContext.createScriptProcessor(PROCESSOR_BUFFER_SIZE, 1, 1);\n scriptProcessorRef.current = processor;\n const muteGain = audioContext.createGain();\n muteGain.gain.value = 0;\n inputMuteGainRef.current = muteGain;\n inputSource.connect(processor);\n processor.connect(muteGain);\n muteGain.connect(audioContext.destination);\n\n processor.onaudioprocess = (event) => {\n if (!microphoneEnabledRef.current) return;\n const ws = wsRef.current;\n if (!ws || ws.readyState !== WebSocket.OPEN) return;\n const channelData = event.inputBuffer.getChannelData(0);\n const int16 = float32ToInt16(channelData);\n ws.send(\n JSON.stringify({\n type: 'input_audio_buffer.append',\n audio: base64FromInt16(int16),\n }),\n );\n };\n\n const ws = new WebSocket(`${XAI_REALTIME_URL}?model=${encodeURIComponent(model)}`, [\n `xai-client-secret.${ephemeralToken}`,\n ]);\n wsRef.current = ws;\n\n ws.addEventListener('open', () => {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_START });\n sendJson({ type: 'session.update', session: pendingSessionConfigRef.current });\n });\n\n ws.addEventListener('error', () => finalizeSession('xAI WebSocket error'));\n ws.addEventListener('close', () => finalizeSession());\n\n ws.addEventListener('message', async (event) => {\n let payload;\n try {\n payload = JSON.parse(event.data);\n } catch {\n return;\n }\n\n switch (payload.type) {\n case 'session.created':\n case 'session.updated': {\n if (sessionAppliedRef.current) break;\n sessionAppliedRef.current = true;\n setReady(true);\n sendIntro({ assistantName: assistant_name, locale });\n break;\n }\n case 'response.output_audio.delta': {\n const audio = extractAudioDelta(payload);\n if (audio) scheduleAudioPlayback(audio);\n break;\n }\n case 'input_audio_buffer.speech_started': {\n // Barge-in: cut current playback so the user can take over the turn cleanly.\n stopPendingPlayback();\n break;\n }\n case 'response.function_call_arguments.done': {\n handleFunctionCall(payload);\n break;\n }\n case 'response.done': {\n // Open the microphone once the intro response finishes; subsequent turns use server VAD.\n if (!microphoneEnabledRef.current) microphoneEnabledRef.current = true;\n break;\n }\n case 'conversation.item.input_audio_transcription.completed': {\n const transcript = payload.transcript?.trim();\n if (transcript) pendingUserTranscriptRef.current += transcript;\n break;\n }\n case 'response.output_audio_transcript.done':\n case 'response.text.done': {\n const transcript = (payload.transcript || payload.text)?.trim();\n persistTranscriptPair({ fingerprint, hotelId, locale, onTranscript, transcript });\n break;\n }\n default:\n break;\n }\n });\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: METRICS_EVENTS.AURA_ERROR, error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [\n cleanupSession,\n handleFunctionCall,\n persistTranscriptPair,\n scheduleAudioPlayback,\n sendIntro,\n sendJson,\n stopPendingPlayback,\n ],\n );\n\n const endSession = useCallback(() => {\n cleanupSession();\n }, [cleanupSession]);\n\n return { startSession, endSession, audioAnalyzers: audioAnalyzersRef.current };\n};\n\nexport { useXaiRealtimeSession };\n"],"mappings":"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","ignoreList":[]}
@@ -138,17 +138,20 @@ class ClientLobby {
138
138
  send(_ref4) {
139
139
  let body = _ref4.body,
140
140
  _ref4$author = _ref4.author,
141
- author = _ref4$author === void 0 ? 'user' : _ref4$author;
142
- if (!this.socket) return;
143
- if (author === 'ai' && this.aiBlocked) return;
141
+ author = _ref4$author === void 0 ? 'user' : _ref4$author,
142
+ meta = _ref4.meta;
143
+ if (!this.socket) return false;
144
+ if (author === 'ai' && this.aiBlocked) return true;
144
145
  this.socket.emit('message', {
145
146
  chatId: this.chatId,
146
147
  body,
147
148
  author,
149
+ meta,
148
150
  session: this.session,
149
151
  channelId: this.channelId,
150
152
  fingerprint: this.fingerprint
151
153
  });
154
+ return true;
152
155
  }
153
156
  }
154
157
  exports.ClientLobby = ClientLobby;
@@ -1 +1 @@
1
- {"version":3,"file":"clientLobby.js","names":["_socket","require","_getClientFingerprint","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ClientLobby","constructor","_ref","undefined","url","channelId","_ref$session","session","process","env","SERVICE_LOBBY","window","concat","location","protocol","hostname","fingerprint","getClientFingerprint","Error","title","firstName","lastName","trim","email","socket","chatId","callbacks","message","blockState","presence","status","aiBlocked","lastPresence","onMessage","cb","off","onBlockState","onPresence","onStatus","type","fn","_emit","payload","connect","_this","io","replace","auth","path","transports","on","emit","msg","_msg$createdAt","createdAt","Date","now","_ref2","blocked","_ref3","online","snapshot","disconnect","requestHumanSupport","send","_ref4","body","_ref4$author","author","exports"],"sources":["../../../../src/components/Chat/helpers/clientLobby.js"],"sourcesContent":["import { io } from 'socket.io-client';\n\nimport { getClientFingerprint } from './getClientFingerprint';\n\nexport class ClientLobby {\n constructor({ url, channelId, session = {} } = {}) {\n this.url =\n url ||\n process.env.SERVICE_LOBBY ||\n (typeof window !== 'undefined'\n ? `${window.location.protocol}//${window.location.hostname}:4000`\n : 'http://localhost:4000');\n\n this.fingerprint = getClientFingerprint();\n\n this.channelId = channelId;\n if (!this.channelId) throw new Error('channelId es obligatorio');\n\n this.title = session?.firstName\n ? `${session.firstName} ${session.lastName || ''}`.trim()\n : session?.email || `Guest ${this.fingerprint}`;\n this.session = session;\n this.socket = null;\n this.chatId = this.fingerprint;\n this.callbacks = {\n message: [],\n blockState: [],\n presence: [],\n status: [],\n };\n this.aiBlocked = false;\n this.lastPresence = null;\n }\n\n onMessage(cb) {\n this.callbacks.message.push(cb);\n return () => this.off('message', cb);\n }\n\n onBlockState(cb) {\n this.callbacks.blockState.push(cb);\n return () => this.off('blockState', cb);\n }\n\n onPresence(cb) {\n this.callbacks.presence.push(cb);\n return () => this.off('presence', cb);\n }\n\n onStatus(cb) {\n this.callbacks.status.push(cb);\n return () => this.off('status', cb);\n }\n\n off(type, cb) {\n this.callbacks[type] = (this.callbacks[type] || []).filter((fn) => fn !== cb);\n }\n\n _emit(type, payload) {\n (this.callbacks[type] || []).forEach((cb) => cb(payload));\n }\n\n connect() {\n if (this.socket) return;\n this.socket = io(this.url.replace('/lobby', ''), {\n auth: {\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n },\n path: '/lobby/socket.io',\n transports: ['websocket'],\n });\n this._emit('status', 'connecting');\n\n this.socket.on('connect', () => {\n this._emit('status', 'connected');\n this.socket.emit('join_chat', {\n chatId: this.chatId,\n title: this.title,\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n });\n });\n\n this.socket.on('disconnect', () => {\n this._emit('status', 'disconnected');\n });\n\n this.socket.on('message', (msg) => {\n this._emit('message', { ...msg, createdAt: msg.createdAt ?? Date.now() });\n });\n\n this.socket.on('ai_block_state', ({ chatId, fingerprint, blocked }) => {\n if (chatId === this.chatId || fingerprint === this.fingerprint) {\n if (chatId && chatId !== this.chatId) this.chatId = chatId;\n if (this.aiBlocked !== blocked) {\n this.aiBlocked = blocked;\n this._emit('blockState', blocked);\n }\n }\n });\n\n this.socket.on('presence', ({ chatId, online }) => {\n if (chatId === this.chatId) {\n if (this.lastPresence !== online) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n }\n });\n this.socket.on('presence_snapshot', (snapshot = {}) => {\n const online = snapshot[this.chatId];\n if (online !== undefined && online !== this.lastPresence) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n this._emit('status', 'disconnected');\n }\n }\n\n requestHumanSupport() {\n if (!this.socket) return;\n this.socket.emit('request_human_support', {\n chatId: this.chatId,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n\n send({ body, author = 'user' }) {\n if (!this.socket) return;\n if (author === 'ai' && this.aiBlocked) return;\n this.socket.emit('message', {\n chatId: this.chatId,\n body,\n author,\n session: this.session,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"clientLobby.js","names":["_socket","require","_getClientFingerprint","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ClientLobby","constructor","_ref","undefined","url","channelId","_ref$session","session","process","env","SERVICE_LOBBY","window","concat","location","protocol","hostname","fingerprint","getClientFingerprint","Error","title","firstName","lastName","trim","email","socket","chatId","callbacks","message","blockState","presence","status","aiBlocked","lastPresence","onMessage","cb","off","onBlockState","onPresence","onStatus","type","fn","_emit","payload","connect","_this","io","replace","auth","path","transports","on","emit","msg","_msg$createdAt","createdAt","Date","now","_ref2","blocked","_ref3","online","snapshot","disconnect","requestHumanSupport","send","_ref4","body","_ref4$author","author","meta","exports"],"sources":["../../../../src/components/Chat/helpers/clientLobby.js"],"sourcesContent":["import { io } from 'socket.io-client';\n\nimport { getClientFingerprint } from './getClientFingerprint';\n\nexport class ClientLobby {\n constructor({ url, channelId, session = {} } = {}) {\n this.url =\n url ||\n process.env.SERVICE_LOBBY ||\n (typeof window !== 'undefined'\n ? `${window.location.protocol}//${window.location.hostname}:4000`\n : 'http://localhost:4000');\n\n this.fingerprint = getClientFingerprint();\n\n this.channelId = channelId;\n if (!this.channelId) throw new Error('channelId es obligatorio');\n\n this.title = session?.firstName\n ? `${session.firstName} ${session.lastName || ''}`.trim()\n : session?.email || `Guest ${this.fingerprint}`;\n this.session = session;\n this.socket = null;\n this.chatId = this.fingerprint;\n this.callbacks = {\n message: [],\n blockState: [],\n presence: [],\n status: [],\n };\n this.aiBlocked = false;\n this.lastPresence = null;\n }\n\n onMessage(cb) {\n this.callbacks.message.push(cb);\n return () => this.off('message', cb);\n }\n\n onBlockState(cb) {\n this.callbacks.blockState.push(cb);\n return () => this.off('blockState', cb);\n }\n\n onPresence(cb) {\n this.callbacks.presence.push(cb);\n return () => this.off('presence', cb);\n }\n\n onStatus(cb) {\n this.callbacks.status.push(cb);\n return () => this.off('status', cb);\n }\n\n off(type, cb) {\n this.callbacks[type] = (this.callbacks[type] || []).filter((fn) => fn !== cb);\n }\n\n _emit(type, payload) {\n (this.callbacks[type] || []).forEach((cb) => cb(payload));\n }\n\n connect() {\n if (this.socket) return;\n this.socket = io(this.url.replace('/lobby', ''), {\n auth: {\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n },\n path: '/lobby/socket.io',\n transports: ['websocket'],\n });\n this._emit('status', 'connecting');\n\n this.socket.on('connect', () => {\n this._emit('status', 'connected');\n this.socket.emit('join_chat', {\n chatId: this.chatId,\n title: this.title,\n fingerprint: this.fingerprint,\n channelId: this.channelId,\n session: this.session,\n });\n });\n\n this.socket.on('disconnect', () => {\n this._emit('status', 'disconnected');\n });\n\n this.socket.on('message', (msg) => {\n this._emit('message', { ...msg, createdAt: msg.createdAt ?? Date.now() });\n });\n\n this.socket.on('ai_block_state', ({ chatId, fingerprint, blocked }) => {\n if (chatId === this.chatId || fingerprint === this.fingerprint) {\n if (chatId && chatId !== this.chatId) this.chatId = chatId;\n if (this.aiBlocked !== blocked) {\n this.aiBlocked = blocked;\n this._emit('blockState', blocked);\n }\n }\n });\n\n this.socket.on('presence', ({ chatId, online }) => {\n if (chatId === this.chatId) {\n if (this.lastPresence !== online) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n }\n });\n this.socket.on('presence_snapshot', (snapshot = {}) => {\n const online = snapshot[this.chatId];\n if (online !== undefined && online !== this.lastPresence) {\n this.lastPresence = online;\n this._emit('presence', online);\n }\n });\n }\n\n disconnect() {\n if (this.socket) {\n this.socket.disconnect();\n this.socket = null;\n this._emit('status', 'disconnected');\n }\n }\n\n requestHumanSupport() {\n if (!this.socket) return;\n this.socket.emit('request_human_support', {\n chatId: this.chatId,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n }\n\n send({ body, author = 'user', meta }) {\n if (!this.socket) return false;\n if (author === 'ai' && this.aiBlocked) return true;\n this.socket.emit('message', {\n chatId: this.chatId,\n body,\n author,\n meta,\n session: this.session,\n channelId: this.channelId,\n fingerprint: this.fingerprint,\n });\n return true;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,62 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getChannelSettings = exports.ensureChatId = exports.createChatMessage = void 0;
6
+ exports.getChannelSettings = void 0;
7
7
  var _dataSources = require("@mirai/data-sources");
8
- const createChatMessage = async function () {
9
- let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
10
- author = _ref.author,
11
- body = _ref.body,
12
- chatId = _ref.chatId,
13
- meta = _ref.meta,
14
- session = _ref.session;
15
- if (!chatId) return null;
16
- try {
17
- return await (0, _dataSources.request)({
18
- endpoint: "/api/chats/".concat(chatId, "/messages"),
19
- hostname: process.env.SERVICE_LOBBY,
20
- method: 'POST',
21
- headers: {
22
- 'x-mcp-secret': process.env.MCP_SECRET
23
- },
24
- author,
25
- body,
26
- meta,
27
- session
28
- });
29
- } catch (_unused) {
30
- return null;
31
- }
32
- };
33
- exports.createChatMessage = createChatMessage;
34
- const ensureChatId = async function () {
35
- let _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
36
- fingerprint = _ref2.fingerprint,
37
- channelId = _ref2.channelId,
38
- session = _ref2.session;
39
- if (!fingerprint || !channelId) return null;
40
- try {
41
- var _ensured$chat;
42
- const ensured = await (0, _dataSources.request)({
43
- endpoint: '/api/chats/ensure',
44
- hostname: process.env.SERVICE_LOBBY,
45
- method: 'POST',
46
- headers: {
47
- 'x-mcp-secret': process.env.MCP_SECRET
48
- },
49
- fingerprint,
50
- channelId,
51
- session
52
- });
53
- return (ensured === null || ensured === void 0 || (_ensured$chat = ensured.chat) === null || _ensured$chat === void 0 ? void 0 : _ensured$chat.id) || null;
54
- } catch (_unused2) {
55
- return null;
56
- }
57
- };
58
- exports.ensureChatId = ensureChatId;
59
8
  const getChannelSettings = async function () {
60
- let _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
61
- channelId = _ref3.channelId;
9
+ let _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
10
+ channelId = _ref.channelId;
62
11
  if (!channelId) return null;
63
12
  try {
64
13
  return await (0, _dataSources.request)({
@@ -66,7 +15,7 @@ const getChannelSettings = async function () {
66
15
  hostname: process.env.SERVICE_LOBBY,
67
16
  method: 'GET'
68
17
  });
69
- } catch (_unused3) {
18
+ } catch (_unused) {
70
19
  return null;
71
20
  }
72
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"lobby.service.js","names":["_dataSources","require","createChatMessage","_ref","arguments","length","undefined","author","body","chatId","meta","session","request","endpoint","concat","hostname","process","env","SERVICE_LOBBY","method","headers","MCP_SECRET","_unused","exports","ensureChatId","_ref2","fingerprint","channelId","_ensured$chat","ensured","chat","id","_unused2","getChannelSettings","_ref3","_unused3"],"sources":["../../../../src/components/Chat/services/lobby.service.js"],"sourcesContent":["import { request } from '@mirai/data-sources';\n\nexport const createChatMessage = async ({ author, body, chatId, meta, session } = {}) => {\n if (!chatId) return null;\n\n try {\n return await request({\n endpoint: `/api/chats/${chatId}/messages`,\n hostname: process.env.SERVICE_LOBBY,\n method: 'POST',\n headers: { 'x-mcp-secret': process.env.MCP_SECRET },\n author,\n body,\n meta,\n session,\n });\n } catch {\n return null;\n }\n};\n\nexport const ensureChatId = async ({ fingerprint, channelId, session } = {}) => {\n if (!fingerprint || !channelId) return null;\n\n try {\n const ensured = await request({\n endpoint: '/api/chats/ensure',\n hostname: process.env.SERVICE_LOBBY,\n method: 'POST',\n headers: { 'x-mcp-secret': process.env.MCP_SECRET },\n fingerprint,\n channelId,\n session,\n });\n\n return ensured?.chat?.id || null;\n } catch {\n return null;\n }\n};\n\nexport const getChannelSettings = async ({ channelId } = {}) => {\n if (!channelId) return null;\n\n try {\n return await request({\n endpoint: `/api/channels/${channelId}/settings/public`,\n hostname: process.env.SERVICE_LOBBY,\n method: 'GET',\n });\n } catch {\n return null;\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,iBAAiB,GAAG,eAAAA,CAAA,EAAwD;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAP,CAAC,CAAC;IAA1CG,MAAM,GAAAJ,IAAA,CAANI,MAAM;IAAEC,IAAI,GAAAL,IAAA,CAAJK,IAAI;IAAEC,MAAM,GAAAN,IAAA,CAANM,MAAM;IAAEC,IAAI,GAAAP,IAAA,CAAJO,IAAI;IAAEC,OAAO,GAAAR,IAAA,CAAPQ,OAAO;EAC3E,IAAI,CAACF,MAAM,EAAE,OAAO,IAAI;EAExB,IAAI;IACF,OAAO,MAAM,IAAAG,oBAAO,EAAC;MACnBC,QAAQ,gBAAAC,MAAA,CAAgBL,MAAM,cAAW;MACzCM,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QAAE,cAAc,EAAEJ,OAAO,CAACC,GAAG,CAACI;MAAW,CAAC;MACnDd,MAAM;MACNC,IAAI;MACJE,IAAI;MACJC;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAAW,OAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACC,OAAA,CAAArB,iBAAA,GAAAA,iBAAA;AAEK,MAAMsB,YAAY,GAAG,eAAAA,CAAA,EAAoD;EAAA,IAAAC,KAAA,GAAArB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAP,CAAC,CAAC;IAAtCsB,WAAW,GAAAD,KAAA,CAAXC,WAAW;IAAEC,SAAS,GAAAF,KAAA,CAATE,SAAS;IAAEhB,OAAO,GAAAc,KAAA,CAAPd,OAAO;EAClE,IAAI,CAACe,WAAW,IAAI,CAACC,SAAS,EAAE,OAAO,IAAI;EAE3C,IAAI;IAAA,IAAAC,aAAA;IACF,MAAMC,OAAO,GAAG,MAAM,IAAAjB,oBAAO,EAAC;MAC5BC,QAAQ,EAAE,mBAAmB;MAC7BE,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QAAE,cAAc,EAAEJ,OAAO,CAACC,GAAG,CAACI;MAAW,CAAC;MACnDK,WAAW;MACXC,SAAS;MACThB;IACF,CAAC,CAAC;IAEF,OAAO,CAAAkB,OAAO,aAAPA,OAAO,gBAAAD,aAAA,GAAPC,OAAO,CAAEC,IAAI,cAAAF,aAAA,uBAAbA,aAAA,CAAeG,EAAE,KAAI,IAAI;EAClC,CAAC,CAAC,OAAAC,QAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACT,OAAA,CAAAC,YAAA,GAAAA,YAAA;AAEK,MAAMS,kBAAkB,GAAG,eAAAA,CAAA,EAA8B;EAAA,IAAAC,KAAA,GAAA9B,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAP,CAAC,CAAC;IAAhBuB,SAAS,GAAAO,KAAA,CAATP,SAAS;EAClD,IAAI,CAACA,SAAS,EAAE,OAAO,IAAI;EAE3B,IAAI;IACF,OAAO,MAAM,IAAAf,oBAAO,EAAC;MACnBC,QAAQ,mBAAAC,MAAA,CAAmBa,SAAS,qBAAkB;MACtDZ,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,CAAC,OAAAgB,QAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACZ,OAAA,CAAAU,kBAAA,GAAAA,kBAAA","ignoreList":[]}
1
+ {"version":3,"file":"lobby.service.js","names":["_dataSources","require","getChannelSettings","_ref","arguments","length","undefined","channelId","request","endpoint","concat","hostname","process","env","SERVICE_LOBBY","method","_unused","exports"],"sources":["../../../../src/components/Chat/services/lobby.service.js"],"sourcesContent":["import { request } from '@mirai/data-sources';\n\nexport const getChannelSettings = async ({ channelId } = {}) => {\n if (!channelId) return null;\n\n try {\n return await request({\n endpoint: `/api/channels/${channelId}/settings/public`,\n hostname: process.env.SERVICE_LOBBY,\n method: 'GET',\n });\n } catch {\n return null;\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,kBAAkB,GAAG,eAAAA,CAAA,EAA8B;EAAA,IAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAP,CAAC,CAAC;IAAhBG,SAAS,GAAAJ,IAAA,CAATI,SAAS;EAClD,IAAI,CAACA,SAAS,EAAE,OAAO,IAAI;EAE3B,IAAI;IACF,OAAO,MAAM,IAAAC,oBAAO,EAAC;MACnBC,QAAQ,mBAAAC,MAAA,CAAmBH,SAAS,qBAAkB;MACtDI,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE;IACV,CAAC,CAAC;EACJ,CAAC,CAAC,OAAAC,OAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACC,OAAA,CAAAf,kBAAA,GAAAA,kBAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mirai/core",
3
- "version": "0.4.654",
3
+ "version": "0.4.655",
4
4
  "source": "src/index.js",
5
5
  "files": [
6
6
  "build"