@mirai/core 0.4.511 → 0.4.513

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.
@@ -17,12 +17,12 @@ var _helpers = require("../helpers");
17
17
  const _excluded = ["clubConditions"];
18
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
19
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
20
21
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
21
22
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
22
23
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
23
24
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
24
25
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
25
- function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
26
26
  function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
27
27
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
28
28
  const Banner = _ref => {
@@ -81,7 +81,7 @@ const Banner = _ref => {
81
81
  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
82
82
  return id.toString() === hotelId.toString();
83
83
  }) : club;
84
- nextBanner && setBanner(nextBanner);
84
+ nextBanner && setBanner(_objectSpread(_objectSpread({}, banner), nextBanner));
85
85
  setClubActive(clubVariant === null || clubVariant === void 0 ? void 0 : clubVariant.active);
86
86
  }
87
87
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -1 +1 @@
1
- {"version":3,"file":"Banner.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Banner","_Banner2","style","_Banner3","_helpers","_excluded","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ownKeys","keys","getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","_toPropertyKey","value","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","_extends","assign","bind","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","Banner","_ref","_itemRef$current","clubConditions","others","isDesktop","isMobile","useDevice","locale","stateLocale","translate","useLocale","banner","storeBanner","club","finder","place","session","skeleton","useStore","setBanner","useState","clubActive","setClubActive","active","clubDiscount","setClubDiscount","discount","expanded","setExpanded","scrollIndex","setScrollIndex","itemRef","useRef","useEffect","callback","nextClubDiscount","undefined","Event","subscribe","EVENT","RATES_FILTER_CLUB","unsubscribe","id","hotelId","isHotel","variants","clubVariants","nextBanner","clubVariant","find","toString","handleExpanded","handlePressBenefit","index","handlePressFilter","publish","Filter","createElement","View","row","className","Text","action","medium","L10N","LABEL_ONLY_MEMBERS","Switch","checked","name","onChange","benefits","description","isClub","title","url","buttonProps","secondary","squared","rounded","lastBenefit","getNormalizedLocale","shouldRender","testId","container","highlight","bold","brand","headline","level","DEFAULT_LOCALE","small","Fragment","Action","href","target","underline","textInline","ACTION_MORE_INFO","LABEL_CLUB_CONDITIONS","conditions","ACTION_CLUB_VIEW_CONDITIONS","Button","transparent","onPress","Icon","ICON","EXPAND_LESS","EXPAND_MORE","wide","LEFT","React","ScrollView","horizontal","scrollTo","current","offsetWidth","BENEFIT_MIN_WIDTH","list","map","icon","ref","key","accent","AMENITY","REPLAY","RIGHT","exports","displayName","propTypes","PropTypes","string"],"sources":["../../../src/components/Banner/Banner.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Action, Button, Icon, ScrollView, Switch, Text, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { DEFAULT_LOCALE, BENEFIT_MIN_WIDTH } from './Banner.constants';\nimport { L10N } from './Banner.l10n';\nimport * as style from './Banner.module.css';\nimport Skeleton from './Banner.skeleton';\nimport { EVENT, getNormalizedLocale, ICON } from '../helpers';\n\nconst Banner = ({ clubConditions, ...others }) => {\n const { isDesktop, isMobile } = useDevice();\n const { locale: stateLocale, translate } = useLocale();\n const {\n value: { banner: storeBanner, club = {}, finder: { place } = {}, session, skeleton = false },\n } = useStore();\n\n const [banner, setBanner] = useState(storeBanner);\n const [clubActive, setClubActive] = useState(club.active);\n const [clubDiscount, setClubDiscount] = useState(club.discount);\n const [expanded, setExpanded] = useState(false);\n const [scrollIndex, setScrollIndex] = useState(0);\n\n const itemRef = useRef();\n\n useEffect(() => {\n const callback = (nextClubDiscount) =>\n setClubDiscount(typeof nextClubDiscount !== 'object' ? nextClubDiscount : undefined);\n\n Event.subscribe(EVENT.RATES_FILTER_CLUB, callback);\n\n return () => Event.unsubscribe(EVENT.RATES_FILTER_CLUB, callback);\n }, []);\n\n useEffect(() => {\n if (!place) return;\n\n const { id: [hotelId] = [], isHotel } = place || {};\n const { variants } = storeBanner || {};\n const { variants: clubVariants } = club;\n if (hotelId && (variants || clubVariants)) {\n const nextBanner = variants[isHotel && hotelId] || storeBanner || {};\n const clubVariant = isHotel\n ? clubVariants?.find(({ id = '' } = {}) => id.toString() === hotelId.toString())\n : club;\n\n nextBanner && setBanner(nextBanner);\n setClubActive(clubVariant?.active);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [place]);\n\n const handleExpanded = () => {\n setExpanded(!expanded);\n };\n\n const handlePressBenefit = (index) => {\n setScrollIndex(index);\n };\n\n const handlePressFilter = (value) => {\n Event.publish(EVENT.RATES_FILTER_CLUB, value);\n };\n\n const Filter = () => (\n <View row className={style.filter}>\n <Text action medium>\n {translate(L10N.LABEL_ONLY_MEMBERS)}\n </Text>\n <Switch\n checked={clubDiscount}\n name={`switch`}\n onChange={handlePressFilter}\n aria-label={translate(L10N.LABEL_ONLY_MEMBERS)}\n />\n </View>\n );\n\n const { benefits = [], description = {}, isClub, title, url } = banner || {};\n const buttonProps = { secondary: true, squared: true, rounded: true };\n const lastBenefit = scrollIndex === benefits.length - 4;\n const locale = getNormalizedLocale(stateLocale);\n const shouldRender = (clubActive && !session) || (!isClub && banner);\n\n return shouldRender && skeleton ? (\n <Skeleton />\n ) : shouldRender && title ? (\n <View testId={others.testId} className={[style.container, others.className]}>\n <View row className={style.highlight}>\n <View>\n <Text bold brand headline level={isDesktop ? 2 : 3} className={style.title}>\n {title[locale] || title[DEFAULT_LOCALE]}\n </Text>\n <Text action={isDesktop} small={!isDesktop}>\n {description[locale] || description[DEFAULT_LOCALE]}\n {url && (\n <>\n {' '}\n <Action bold href={url} target=\"_blank\" underline className={style.textInline}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n </>\n )}\n </Text>\n {clubConditions && (\n <Text action={isDesktop} small={!isDesktop}>\n {translate(L10N.LABEL_CLUB_CONDITIONS, {\n conditions: (\n <Action href={clubConditions} target=\"_blank\" underline className={style.textInline}>\n {translate(L10N.ACTION_CLUB_VIEW_CONDITIONS)}\n </Action>\n ),\n })}\n </Text>\n )}\n </View>\n\n {isMobile ? (\n <Button small squared transparent onPress={handleExpanded}>\n <Icon value={expanded ? ICON.EXPAND_LESS : ICON.EXPAND_MORE} />\n </Button>\n ) : (\n clubDiscount !== undefined && <Filter />\n )}\n </View>\n\n {(!isMobile || expanded) && benefits.length > 0 && (\n <View row wide>\n {!isMobile && scrollIndex !== 0 && (\n <Button {...buttonProps} onPress={() => handlePressBenefit(scrollIndex - 1)}>\n <Icon value={ICON.LEFT} />\n </Button>\n )}\n\n {React.createElement(\n isMobile ? View : ScrollView,\n {\n ...(!isMobile\n ? {\n horizontal: !isMobile,\n scrollTo: scrollIndex * (itemRef?.current?.offsetWidth || BENEFIT_MIN_WIDTH),\n }\n : {}),\n className: style.list,\n },\n benefits.map(({ description = {}, icon } = {}, index) => (\n <View ref={index === 0 ? itemRef : undefined} row key={index}>\n <Icon accent headline level={!isDesktop ? 3 : 2} value={ICON[icon] || ICON.AMENITY} />\n <Text action={isDesktop} small={!isDesktop}>\n {description[locale] || description[DEFAULT_LOCALE]}\n </Text>\n </View>\n )),\n )}\n\n {!isMobile && benefits.length > 4 && (\n <Button {...buttonProps} onPress={() => handlePressBenefit(lastBenefit ? 0 : scrollIndex + 1)}>\n <Icon value={lastBenefit ? ICON.REPLAY : ICON.RIGHT} />\n </Button>\n )}\n </View>\n )}\n\n {isMobile && clubDiscount !== undefined && <Filter />}\n </View>\n ) : null;\n};\n\nBanner.displayName = 'Mirai:Core:Banner';\n\nBanner.propTypes = {\n clubConditions: PropTypes.string,\n};\n\nexport { Banner };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Banner.js","names":["_dataSources","require","_locale","_ui","_propTypes","_interopRequireDefault","_react","_interopRequireWildcard","_Banner","_Banner2","style","_Banner3","_helpers","_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","_objectWithoutProperties","_objectWithoutPropertiesLoose","indexOf","propertyIsEnumerable","Banner","_ref","_itemRef$current","clubConditions","others","isDesktop","isMobile","useDevice","locale","stateLocale","translate","useLocale","banner","storeBanner","club","finder","place","session","skeleton","useStore","setBanner","useState","clubActive","setClubActive","active","clubDiscount","setClubDiscount","discount","expanded","setExpanded","scrollIndex","setScrollIndex","itemRef","useRef","useEffect","callback","nextClubDiscount","undefined","Event","subscribe","EVENT","RATES_FILTER_CLUB","unsubscribe","id","hotelId","isHotel","variants","clubVariants","nextBanner","clubVariant","find","toString","handleExpanded","handlePressBenefit","index","handlePressFilter","publish","Filter","createElement","View","row","className","Text","action","medium","L10N","LABEL_ONLY_MEMBERS","Switch","checked","name","onChange","benefits","description","isClub","title","url","buttonProps","secondary","squared","rounded","lastBenefit","getNormalizedLocale","shouldRender","testId","container","highlight","bold","brand","headline","level","DEFAULT_LOCALE","small","Fragment","Action","href","target","underline","textInline","ACTION_MORE_INFO","LABEL_CLUB_CONDITIONS","conditions","ACTION_CLUB_VIEW_CONDITIONS","Button","transparent","onPress","Icon","ICON","EXPAND_LESS","EXPAND_MORE","wide","LEFT","React","ScrollView","horizontal","scrollTo","current","offsetWidth","BENEFIT_MIN_WIDTH","list","map","icon","ref","key","accent","AMENITY","REPLAY","RIGHT","exports","displayName","propTypes","PropTypes","string"],"sources":["../../../src/components/Banner/Banner.jsx"],"sourcesContent":["import { Event, useStore } from '@mirai/data-sources';\nimport { useLocale } from '@mirai/locale';\nimport { Action, Button, Icon, ScrollView, Switch, Text, useDevice, View } from '@mirai/ui';\nimport PropTypes from 'prop-types';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { DEFAULT_LOCALE, BENEFIT_MIN_WIDTH } from './Banner.constants';\nimport { L10N } from './Banner.l10n';\nimport * as style from './Banner.module.css';\nimport Skeleton from './Banner.skeleton';\nimport { EVENT, getNormalizedLocale, ICON } from '../helpers';\n\nconst Banner = ({ clubConditions, ...others }) => {\n const { isDesktop, isMobile } = useDevice();\n const { locale: stateLocale, translate } = useLocale();\n const {\n value: { banner: storeBanner, club = {}, finder: { place } = {}, session, skeleton = false },\n } = useStore();\n\n const [banner, setBanner] = useState(storeBanner);\n const [clubActive, setClubActive] = useState(club.active);\n const [clubDiscount, setClubDiscount] = useState(club.discount);\n const [expanded, setExpanded] = useState(false);\n const [scrollIndex, setScrollIndex] = useState(0);\n\n const itemRef = useRef();\n\n useEffect(() => {\n const callback = (nextClubDiscount) =>\n setClubDiscount(typeof nextClubDiscount !== 'object' ? nextClubDiscount : undefined);\n\n Event.subscribe(EVENT.RATES_FILTER_CLUB, callback);\n\n return () => Event.unsubscribe(EVENT.RATES_FILTER_CLUB, callback);\n }, []);\n\n useEffect(() => {\n if (!place) return;\n\n const { id: [hotelId] = [], isHotel } = place || {};\n const { variants } = storeBanner || {};\n const { variants: clubVariants } = club;\n if (hotelId && (variants || clubVariants)) {\n const nextBanner = variants[isHotel && hotelId] || storeBanner || {};\n const clubVariant = isHotel\n ? clubVariants?.find(({ id = '' } = {}) => id.toString() === hotelId.toString())\n : club;\n\n nextBanner && setBanner({ ...banner, ...nextBanner });\n setClubActive(clubVariant?.active);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [place]);\n\n const handleExpanded = () => {\n setExpanded(!expanded);\n };\n\n const handlePressBenefit = (index) => {\n setScrollIndex(index);\n };\n\n const handlePressFilter = (value) => {\n Event.publish(EVENT.RATES_FILTER_CLUB, value);\n };\n\n const Filter = () => (\n <View row className={style.filter}>\n <Text action medium>\n {translate(L10N.LABEL_ONLY_MEMBERS)}\n </Text>\n <Switch\n checked={clubDiscount}\n name={`switch`}\n onChange={handlePressFilter}\n aria-label={translate(L10N.LABEL_ONLY_MEMBERS)}\n />\n </View>\n );\n\n const { benefits = [], description = {}, isClub, title, url } = banner || {};\n const buttonProps = { secondary: true, squared: true, rounded: true };\n const lastBenefit = scrollIndex === benefits.length - 4;\n const locale = getNormalizedLocale(stateLocale);\n const shouldRender = (clubActive && !session) || (!isClub && banner);\n\n return shouldRender && skeleton ? (\n <Skeleton />\n ) : shouldRender && title ? (\n <View testId={others.testId} className={[style.container, others.className]}>\n <View row className={style.highlight}>\n <View>\n <Text bold brand headline level={isDesktop ? 2 : 3} className={style.title}>\n {title[locale] || title[DEFAULT_LOCALE]}\n </Text>\n <Text action={isDesktop} small={!isDesktop}>\n {description[locale] || description[DEFAULT_LOCALE]}\n {url && (\n <>\n {' '}\n <Action bold href={url} target=\"_blank\" underline className={style.textInline}>\n {translate(L10N.ACTION_MORE_INFO)}\n </Action>\n </>\n )}\n </Text>\n {clubConditions && (\n <Text action={isDesktop} small={!isDesktop}>\n {translate(L10N.LABEL_CLUB_CONDITIONS, {\n conditions: (\n <Action href={clubConditions} target=\"_blank\" underline className={style.textInline}>\n {translate(L10N.ACTION_CLUB_VIEW_CONDITIONS)}\n </Action>\n ),\n })}\n </Text>\n )}\n </View>\n\n {isMobile ? (\n <Button small squared transparent onPress={handleExpanded}>\n <Icon value={expanded ? ICON.EXPAND_LESS : ICON.EXPAND_MORE} />\n </Button>\n ) : (\n clubDiscount !== undefined && <Filter />\n )}\n </View>\n\n {(!isMobile || expanded) && benefits.length > 0 && (\n <View row wide>\n {!isMobile && scrollIndex !== 0 && (\n <Button {...buttonProps} onPress={() => handlePressBenefit(scrollIndex - 1)}>\n <Icon value={ICON.LEFT} />\n </Button>\n )}\n\n {React.createElement(\n isMobile ? View : ScrollView,\n {\n ...(!isMobile\n ? {\n horizontal: !isMobile,\n scrollTo: scrollIndex * (itemRef?.current?.offsetWidth || BENEFIT_MIN_WIDTH),\n }\n : {}),\n className: style.list,\n },\n benefits.map(({ description = {}, icon } = {}, index) => (\n <View ref={index === 0 ? itemRef : undefined} row key={index}>\n <Icon accent headline level={!isDesktop ? 3 : 2} value={ICON[icon] || ICON.AMENITY} />\n <Text action={isDesktop} small={!isDesktop}>\n {description[locale] || description[DEFAULT_LOCALE]}\n </Text>\n </View>\n )),\n )}\n\n {!isMobile && benefits.length > 4 && (\n <Button {...buttonProps} onPress={() => handlePressBenefit(lastBenefit ? 0 : scrollIndex + 1)}>\n <Icon value={lastBenefit ? ICON.REPLAY : ICON.RIGHT} />\n </Button>\n )}\n </View>\n )}\n\n {isMobile && clubDiscount !== undefined && <Filter />}\n </View>\n ) : null;\n};\n\nBanner.displayName = 'Mirai:Core:Banner';\n\nBanner.propTypes = {\n clubConditions: PropTypes.string,\n};\n\nexport { Banner };\n"],"mappings":"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","ignoreList":[]}
@@ -7,12 +7,19 @@ exports.useOpenAiRealtimeSession = void 0;
7
7
  var _dataSources = require("@mirai/data-sources");
8
8
  var _react = require("react");
9
9
  var _helpers = require("../../../../helpers");
10
+ var _lobby = require("../../../services/lobby.service");
10
11
  const useOpenAiRealtimeSession = () => {
11
12
  const audioElementRef = (0, _react.useRef)(null);
12
13
  const audioContextRef = (0, _react.useRef)(null);
13
14
  const peerConnectionRef = (0, _react.useRef)(null);
14
15
  const dataChannelRef = (0, _react.useRef)(null);
15
16
  const localStreamRef = (0, _react.useRef)(null);
17
+ const localAudioTrackRef = (0, _react.useRef)(null);
18
+ const microphoneEnabledRef = (0, _react.useRef)(false);
19
+ const pendingIntroRef = (0, _react.useRef)(false);
20
+ const introResponseIdRef = (0, _react.useRef)(null);
21
+ const pendingMcpRef = (0, _react.useRef)(false);
22
+ const pendingMcpCallIdRef = (0, _react.useRef)(null);
16
23
  const pendingUserTranscriptRef = (0, _react.useRef)('');
17
24
  const inputSourceRef = (0, _react.useRef)(null);
18
25
  const outputSourceRef = (0, _react.useRef)(null);
@@ -49,6 +56,12 @@ const useOpenAiRealtimeSession = () => {
49
56
  localStream.getTracks().forEach(track => track.stop());
50
57
  localStreamRef.current = null;
51
58
  }
59
+ localAudioTrackRef.current = null;
60
+ microphoneEnabledRef.current = false;
61
+ pendingIntroRef.current = false;
62
+ introResponseIdRef.current = null;
63
+ pendingMcpRef.current = false;
64
+ pendingMcpCallIdRef.current = null;
52
65
  if (audioElementRef.current) {
53
66
  audioElementRef.current.srcObject = null;
54
67
  audioElementRef.current = null;
@@ -74,6 +87,25 @@ const useOpenAiRealtimeSession = () => {
74
87
  }
75
88
  pendingUserTranscriptRef.current = '';
76
89
  }, []);
90
+ const enableMicrophone = (0, _react.useCallback)(() => {
91
+ const track = localAudioTrackRef.current;
92
+ if (!track || microphoneEnabledRef.current) return;
93
+ track.enabled = true;
94
+ microphoneEnabledRef.current = true;
95
+ }, []);
96
+ const resumeMcpIfNeeded = (0, _react.useCallback)(outputCallId => {
97
+ if (!pendingMcpRef.current) return;
98
+ const pendingCallId = pendingMcpCallIdRef.current;
99
+ if (pendingCallId && outputCallId && pendingCallId !== outputCallId) return;
100
+ const channel = dataChannelRef.current;
101
+ if (channel && channel.readyState === 'open') {
102
+ channel.send(JSON.stringify({
103
+ type: 'response.create'
104
+ }));
105
+ }
106
+ pendingMcpRef.current = false;
107
+ pendingMcpCallIdRef.current = null;
108
+ }, []);
77
109
  const startSession = (0, _react.useCallback)(async _ref => {
78
110
  let {
79
111
  assistant_name,
@@ -88,7 +120,7 @@ const useOpenAiRealtimeSession = () => {
88
120
  const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');
89
121
  try {
90
122
  const sessionResponse = await (0, _dataSources.request)({
91
- endpoint: "/audio/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : ''),
123
+ endpoint: "/voice/session?fingerprint=".concat(fingerprint, "&hotelId=").concat(isChain ? '' : hotelId !== null && hotelId !== void 0 ? hotelId : '', "&chainId=").concat(isChain ? chainId !== null && chainId !== void 0 ? chainId : '' : ''),
92
124
  hostname: process.env.SERVICE_SYNAPSE,
93
125
  method: 'GET'
94
126
  });
@@ -97,10 +129,14 @@ const useOpenAiRealtimeSession = () => {
97
129
  peerConnectionRef.current = peerConnection;
98
130
  audioElementRef.current = document.createElement('audio');
99
131
  audioElementRef.current.autoplay = true;
100
- peerConnection.ontrack = event => {
101
- // eslint-disable-next-line prefer-destructuring
102
- audioElementRef.current.srcObject = event.streams[0];
103
- const [remoteStream] = event.streams;
132
+ peerConnection.ontrack = _ref2 => {
133
+ let {
134
+ streams
135
+ } = _ref2;
136
+ const [remoteStream] = streams;
137
+ if (audioElementRef.current) {
138
+ audioElementRef.current.srcObject = remoteStream || null;
139
+ }
104
140
  if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;
105
141
  if (outputSourceRef.current) outputSourceRef.current.disconnect();
106
142
  outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);
@@ -144,6 +180,8 @@ const useOpenAiRealtimeSession = () => {
144
180
  inputSourceRef.current = inputSource;
145
181
  inputSource.connect(inputAnalyser);
146
182
  if (track) {
183
+ localAudioTrackRef.current = track;
184
+ track.enabled = false;
147
185
  await track.applyConstraints({
148
186
  echoCancellation: true,
149
187
  noiseSuppression: true,
@@ -160,6 +198,8 @@ const useOpenAiRealtimeSession = () => {
160
198
  });
161
199
  const localeHint = locale || 'en-US';
162
200
  const introductionMessage = "Respond in the language that matches the locale code \"".concat(localeHint, "\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ").concat(assistant_name, ", your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"");
201
+ pendingIntroRef.current = true;
202
+ introResponseIdRef.current = null;
163
203
  dataChannel.send(JSON.stringify({
164
204
  type: 'response.create',
165
205
  response: {
@@ -167,16 +207,35 @@ const useOpenAiRealtimeSession = () => {
167
207
  }
168
208
  }));
169
209
  });
170
- dataChannel.addEventListener('message', event => {
171
- var _payload$item;
210
+ dataChannel.addEventListener('message', async event => {
211
+ var _payload$item, _payload$item2, _payload$item5, _payload$item8;
172
212
  const payload = JSON.parse(event.data);
173
- if (payload.type === 'response.output_item.done' && ((_payload$item = payload.item) === null || _payload$item === void 0 ? void 0 : _payload$item.type) === 'mcp_call') {
174
- dataChannel.send(JSON.stringify({
175
- type: 'response.create',
176
- response: {
177
- response_id: payload.response_id
178
- }
179
- }));
213
+ if (payload.type === 'response.output_item.added' && ((_payload$item = payload.item) === null || _payload$item === void 0 ? void 0 : _payload$item.type) === 'message') {
214
+ if (pendingIntroRef.current && !introResponseIdRef.current && payload.response_id) {
215
+ introResponseIdRef.current = payload.response_id;
216
+ }
217
+ }
218
+ if (payload.type === 'output_audio_buffer.stopped') {
219
+ if (pendingIntroRef.current && introResponseIdRef.current && payload.response_id === introResponseIdRef.current) {
220
+ enableMicrophone();
221
+ pendingIntroRef.current = false;
222
+ introResponseIdRef.current = null;
223
+ }
224
+ }
225
+ if (payload.type === 'response.output_item.added' && ((_payload$item2 = payload.item) === null || _payload$item2 === void 0 ? void 0 : _payload$item2.type) === 'mcp_call') {
226
+ var _payload$item3, _payload$item4;
227
+ pendingMcpRef.current = true;
228
+ pendingMcpCallIdRef.current = ((_payload$item3 = payload.item) === null || _payload$item3 === void 0 ? void 0 : _payload$item3.call_id) || ((_payload$item4 = payload.item) === null || _payload$item4 === void 0 ? void 0 : _payload$item4.id) || null;
229
+ }
230
+ if (payload.type === 'response.output_item.done' && ((_payload$item5 = payload.item) === null || _payload$item5 === void 0 ? void 0 : _payload$item5.type) === 'mcp_call') {
231
+ var _payload$item6, _payload$item7;
232
+ const outputCallId = ((_payload$item6 = payload.item) === null || _payload$item6 === void 0 ? void 0 : _payload$item6.call_id) || ((_payload$item7 = payload.item) === null || _payload$item7 === void 0 ? void 0 : _payload$item7.id) || null;
233
+ resumeMcpIfNeeded(outputCallId);
234
+ }
235
+ if (payload.type === 'response.output_item.done' && ((_payload$item8 = payload.item) === null || _payload$item8 === void 0 ? void 0 : _payload$item8.type) === 'mcp_call_output') {
236
+ var _payload$item9, _payload$item0, _payload$item1;
237
+ const outputCallId = ((_payload$item9 = payload.item) === null || _payload$item9 === void 0 ? void 0 : _payload$item9.call_id) || ((_payload$item0 = payload.item) === null || _payload$item0 === void 0 ? void 0 : _payload$item0.mcp_call_id) || ((_payload$item1 = payload.item) === null || _payload$item1 === void 0 ? void 0 : _payload$item1.id) || null;
238
+ resumeMcpIfNeeded(outputCallId);
180
239
  }
181
240
  if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {
182
241
  const {
@@ -196,6 +255,40 @@ const useOpenAiRealtimeSession = () => {
196
255
  const input = pendingUserTranscriptRef.current.trim();
197
256
  pendingUserTranscriptRef.current = '';
198
257
  const activeLocale = locale || 'en-US';
258
+ if (hotelId) {
259
+ try {
260
+ const chatId = await (0, _lobby.ensureChatId)({
261
+ fingerprint,
262
+ channelId: hotelId,
263
+ session: {
264
+ locale: activeLocale
265
+ }
266
+ });
267
+ if (chatId) {
268
+ await (0, _lobby.createChatMessage)({
269
+ author: 'user',
270
+ body: input,
271
+ chatId,
272
+ meta: {
273
+ audio: true
274
+ }
275
+ });
276
+ await (0, _lobby.createChatMessage)({
277
+ author: 'ai',
278
+ body: transcript,
279
+ chatId,
280
+ meta: {
281
+ audio: true
282
+ }
283
+ });
284
+ }
285
+ } catch (error) {
286
+ _dataSources.Event.publish(_helpers.EVENT.METRICS, {
287
+ id: 'AURA:ERROR',
288
+ error: error === null || error === void 0 ? void 0 : error.message
289
+ });
290
+ }
291
+ }
199
292
  _dataSources.Event.publish(_helpers.EVENT.METRICS, {
200
293
  id: 'SYNAPSE_RESPONSE',
201
294
  fingerprint,
@@ -233,7 +326,7 @@ const useOpenAiRealtimeSession = () => {
233
326
  } finally {
234
327
  setIsConnecting(false);
235
328
  }
236
- }, [cleanupRealtimeSession]);
329
+ }, [cleanupRealtimeSession, enableMicrophone, resumeMcpIfNeeded]);
237
330
  const endSession = (0, _react.useCallback)(() => {
238
331
  cleanupRealtimeSession(true);
239
332
  }, [cleanupRealtimeSession]);
@@ -1 +1 @@
1
- {"version":3,"file":"useOpenAiRealtimeSession.js","names":["_dataSources","require","_react","_helpers","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","arguments","length","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","forEach","sender","track","stop","localStream","getTracks","srcObject","disconnect","audioContext","startSession","_ref","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","concat","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","value","RTCPeerConnection","document","createElement","autoplay","ontrack","event","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","Event","publish","EVENT","METRICS","id","localeHint","introductionMessage","response","instructions","_payload$item","payload","parse","data","item","response_id","name","url","window","location","href","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","body","sdp","headers","Authorization","ok","answer","setRemoteDescription","error","message","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT } from '../../../../helpers';\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 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 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 startSession = useCallback(\n async ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/audio/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = (event) => {\n // eslint-disable-next-line prefer-destructuring\n audioElementRef.current.srcObject = event.streams[0];\n const [remoteStream] = event.streams;\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 await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', (event) => {\n const payload = JSON.parse(event.data);\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call') {\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n response_id: payload.response_id,\n },\n }),\n );\n }\n\n if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {\n const { url } = JSON.parse(payload.arguments);\n window.location.href = url;\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.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 Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [cleanupRealtimeSession],\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","_lobby","useOpenAiRealtimeSession","audioElementRef","useRef","audioContextRef","peerConnectionRef","dataChannelRef","localStreamRef","localAudioTrackRef","microphoneEnabledRef","pendingIntroRef","introResponseIdRef","pendingMcpRef","pendingMcpCallIdRef","pendingUserTranscriptRef","inputSourceRef","outputSourceRef","inputFrequencyDataRef","outputFrequencyDataRef","audioAnalyzersRef","inputAnalyser","outputAnalyser","getInputByteFrequencyData","getOutputByteFrequencyData","cleanupRealtimeSession","useCallback","shouldSignal","arguments","length","undefined","dataChannel","current","readyState","send","JSON","stringify","type","close","peerConnection","getSenders","forEach","sender","track","stop","localStream","getTracks","srcObject","disconnect","audioContext","enableMicrophone","enabled","resumeMcpIfNeeded","outputCallId","pendingCallId","channel","startSession","_ref","assistant_name","chainId","hotelId","isChain","locale","setIsConnecting","setReady","fingerprint","localStorage","getItem","sessionResponse","request","endpoint","concat","hostname","process","env","SERVICE_SYNAPSE","method","ephemeralKey","value","RTCPeerConnection","document","createElement","autoplay","ontrack","_ref2","streams","remoteStream","createMediaStreamSource","connect","mediaStream","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","channelCount","sampleRate","getAudioTracks","AudioContextConstructor","globalThis","AudioContext","webkitAudioContext","Error","state","resume","createAnalyser","fftSize","Uint8Array","frequencyBinCount","getByteFrequencyData","inputSource","applyConstraints","addTrack","createDataChannel","addEventListener","Event","publish","EVENT","METRICS","id","localeHint","introductionMessage","response","instructions","event","_payload$item","_payload$item2","_payload$item5","_payload$item8","payload","parse","data","item","response_id","_payload$item3","_payload$item4","call_id","_payload$item6","_payload$item7","_payload$item9","_payload$item0","_payload$item1","mcp_call_id","name","url","window","location","href","_payload$transcript","transcript","trim","_payload$transcript2","input","activeLocale","chatId","ensureChatId","channelId","session","createChatMessage","author","body","meta","error","message","text","agent","offer","createOffer","setLocalDescription","sdpResponse","fetch","sdp","headers","Authorization","ok","answer","setRemoteDescription","endSession","audioAnalyzers","exports"],"sources":["../../../../../../src/components/Chat/components/Aura/hooks/useOpenAiRealtimeSession.js"],"sourcesContent":["import { Event, request } from '@mirai/data-sources';\nimport { useCallback, useRef } from 'react';\n\nimport { EVENT } from '../../../../helpers';\nimport { createChatMessage, ensureChatId } from '../../../services/lobby.service';\n\nconst 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 pendingMcpRef = useRef(false);\n const pendingMcpCallIdRef = useRef(null);\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 pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\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 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 resumeMcpIfNeeded = useCallback((outputCallId) => {\n if (!pendingMcpRef.current) return;\n const pendingCallId = pendingMcpCallIdRef.current;\n if (pendingCallId && outputCallId && pendingCallId !== outputCallId) return;\n const channel = dataChannelRef.current;\n if (channel && channel.readyState === 'open') {\n channel.send(JSON.stringify({ type: 'response.create' }));\n }\n pendingMcpRef.current = false;\n pendingMcpCallIdRef.current = null;\n }, []);\n\n const startSession = useCallback(\n async ({ assistant_name, chainId, hotelId, isChain, locale, setIsConnecting, setReady }) => {\n cleanupRealtimeSession();\n\n const fingerprint = localStorage.getItem('MIRAI:FINGERPRINT');\n\n try {\n const sessionResponse = await request({\n endpoint: `/voice/session?fingerprint=${fingerprint}&hotelId=${isChain ? '' : hotelId ?? ''}&chainId=${\n isChain ? chainId ?? '' : ''\n }`,\n hostname: process.env.SERVICE_SYNAPSE,\n method: 'GET',\n });\n\n const ephemeralKey = sessionResponse.value;\n const peerConnection = new RTCPeerConnection();\n peerConnectionRef.current = peerConnection;\n\n audioElementRef.current = document.createElement('audio');\n audioElementRef.current.autoplay = true;\n peerConnection.ontrack = ({ streams }) => {\n const [remoteStream] = streams;\n if (audioElementRef.current) {\n audioElementRef.current.srcObject = remoteStream || null;\n }\n if (!audioContextRef.current || !audioAnalyzersRef.current.outputAnalyser || !remoteStream) return;\n if (outputSourceRef.current) outputSourceRef.current.disconnect();\n outputSourceRef.current = audioContextRef.current.createMediaStreamSource(remoteStream);\n outputSourceRef.current.connect(audioAnalyzersRef.current.outputAnalyser);\n };\n\n const mediaStream = await navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 48000,\n },\n });\n\n localStreamRef.current = mediaStream;\n const [track] = mediaStream.getAudioTracks();\n\n const AudioContextConstructor = globalThis.AudioContext || globalThis.webkitAudioContext;\n if (!AudioContextConstructor) throw new Error('AudioContext not supported');\n const audioContext = new AudioContextConstructor();\n audioContextRef.current = audioContext;\n if (audioContext.state === 'suspended') await audioContext.resume();\n const inputAnalyser = audioContext.createAnalyser();\n const outputAnalyser = audioContext.createAnalyser();\n inputAnalyser.fftSize = 1024;\n outputAnalyser.fftSize = 1024;\n audioAnalyzersRef.current.inputAnalyser = inputAnalyser;\n audioAnalyzersRef.current.outputAnalyser = outputAnalyser;\n inputFrequencyDataRef.current = new Uint8Array(inputAnalyser.frequencyBinCount);\n outputFrequencyDataRef.current = new Uint8Array(outputAnalyser.frequencyBinCount);\n audioAnalyzersRef.current.getInputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.inputAnalyser || !inputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.inputAnalyser.getByteFrequencyData(inputFrequencyDataRef.current);\n return inputFrequencyDataRef.current;\n };\n audioAnalyzersRef.current.getOutputByteFrequencyData = () => {\n if (!audioAnalyzersRef.current.outputAnalyser || !outputFrequencyDataRef.current) return null;\n audioAnalyzersRef.current.outputAnalyser.getByteFrequencyData(outputFrequencyDataRef.current);\n return outputFrequencyDataRef.current;\n };\n\n const inputSource = audioContext.createMediaStreamSource(mediaStream);\n inputSourceRef.current = inputSource;\n inputSource.connect(inputAnalyser);\n\n if (track) {\n localAudioTrackRef.current = track;\n track.enabled = false;\n await track.applyConstraints({\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n });\n peerConnection.addTrack(track, mediaStream);\n }\n\n const dataChannel = peerConnection.createDataChannel('oai-events');\n dataChannelRef.current = dataChannel;\n\n dataChannel.addEventListener('open', () => {\n pendingUserTranscriptRef.current = '';\n Event.publish(EVENT.METRICS, { id: 'AURA:START' });\n\n const localeHint = locale || 'en-US';\n const introductionMessage = `Respond in the language that matches the locale code \"${localeHint}\". Introduce yourself using the following sentence, translated into that language: \"Hello, I am ${assistant_name}, your virtual assistant. I can help you with information about our services and facilities. What would you like to know today?\"`;\n\n pendingIntroRef.current = true;\n introResponseIdRef.current = null;\n dataChannel.send(\n JSON.stringify({\n type: 'response.create',\n response: {\n instructions: introductionMessage,\n },\n }),\n );\n });\n\n dataChannel.addEventListener('message', async (event) => {\n const payload = JSON.parse(event.data);\n\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 }\n\n if (payload.type === 'output_audio_buffer.stopped') {\n if (\n pendingIntroRef.current &&\n introResponseIdRef.current &&\n payload.response_id === introResponseIdRef.current\n ) {\n enableMicrophone();\n pendingIntroRef.current = false;\n introResponseIdRef.current = null;\n }\n }\n\n if (payload.type === 'response.output_item.added' && payload.item?.type === 'mcp_call') {\n pendingMcpRef.current = true;\n pendingMcpCallIdRef.current = payload.item?.call_id || payload.item?.id || null;\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call') {\n const outputCallId = payload.item?.call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.output_item.done' && payload.item?.type === 'mcp_call_output') {\n const outputCallId = payload.item?.call_id || payload.item?.mcp_call_id || payload.item?.id || null;\n resumeMcpIfNeeded(outputCallId);\n }\n\n if (payload.type === 'response.function_call_arguments.done' && payload.name === 'open_url') {\n const { url } = JSON.parse(payload.arguments);\n window.location.href = url;\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.output_audio_transcript.done') {\n const transcript = payload.transcript?.trim();\n if (!transcript || !pendingUserTranscriptRef.current) return;\n\n const input = pendingUserTranscriptRef.current.trim();\n pendingUserTranscriptRef.current = '';\n\n const activeLocale = locale || 'en-US';\n\n if (hotelId) {\n try {\n const chatId = await ensureChatId({\n fingerprint,\n channelId: hotelId,\n session: { locale: activeLocale },\n });\n if (chatId) {\n await createChatMessage({ author: 'user', body: input, chatId, meta: { audio: true } });\n await createChatMessage({ author: 'ai', body: transcript, chatId, meta: { audio: true } });\n }\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n }\n }\n\n Event.publish(EVENT.METRICS, {\n id: 'SYNAPSE_RESPONSE',\n fingerprint,\n text: transcript,\n input,\n agent: 'aura',\n locale: activeLocale,\n });\n }\n });\n\n const offer = await peerConnection.createOffer();\n await peerConnection.setLocalDescription(offer);\n\n const sdpResponse = await fetch('https://api.openai.com/v1/realtime/calls', {\n method: 'POST',\n body: offer.sdp,\n headers: {\n Authorization: `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n },\n });\n\n if (!sdpResponse.ok) throw new Error('Failed to establish OpenAI Realtime session');\n\n const answer = { type: 'answer', sdp: await sdpResponse.text() };\n\n await peerConnection.setRemoteDescription(answer);\n setReady(true);\n } catch (error) {\n Event.publish(EVENT.METRICS, { id: 'AURA:ERROR', error: error?.message });\n setReady(false);\n throw error;\n } finally {\n setIsConnecting(false);\n }\n },\n [cleanupRealtimeSession, enableMicrophone, resumeMcpIfNeeded],\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":[]}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ensureChatId = exports.createChatMessage = void 0;
7
+ var _dataSources = require("@mirai/data-sources");
8
+ const createChatMessage = async function () {
9
+ let {
10
+ author,
11
+ body,
12
+ chatId,
13
+ meta,
14
+ session
15
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
16
+ if (!chatId) return null;
17
+ try {
18
+ return await (0, _dataSources.request)({
19
+ endpoint: "/api/chats/".concat(chatId, "/messages"),
20
+ hostname: process.env.SERVICE_LOBBY,
21
+ method: 'POST',
22
+ headers: {
23
+ 'x-mcp-secret': process.env.MCP_SECRET
24
+ },
25
+ author,
26
+ body,
27
+ meta,
28
+ session
29
+ });
30
+ } catch (_unused) {
31
+ return null;
32
+ }
33
+ };
34
+ exports.createChatMessage = createChatMessage;
35
+ const ensureChatId = async function () {
36
+ let {
37
+ fingerprint,
38
+ channelId,
39
+ session
40
+ } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
41
+ if (!fingerprint || !channelId) return null;
42
+ try {
43
+ var _ensured$chat;
44
+ const ensured = await (0, _dataSources.request)({
45
+ endpoint: '/api/chats/ensure',
46
+ hostname: process.env.SERVICE_LOBBY,
47
+ method: 'POST',
48
+ headers: {
49
+ 'x-mcp-secret': process.env.MCP_SECRET
50
+ },
51
+ fingerprint,
52
+ channelId,
53
+ session
54
+ });
55
+ return (ensured === null || ensured === void 0 ? void 0 : (_ensured$chat = ensured.chat) === null || _ensured$chat === void 0 ? void 0 : _ensured$chat.id) || null;
56
+ } catch (_unused2) {
57
+ return null;
58
+ }
59
+ };
60
+ exports.ensureChatId = ensureChatId;
61
+ //# sourceMappingURL=lobby.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lobby.service.js","names":["_dataSources","require","createChatMessage","author","body","chatId","meta","session","arguments","length","undefined","request","endpoint","concat","hostname","process","env","SERVICE_LOBBY","method","headers","MCP_SECRET","_unused","exports","ensureChatId","fingerprint","channelId","_ensured$chat","ensured","chat","id","_unused2"],"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"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAEO,MAAMC,iBAAiB,GAAG,eAAAA,CAAA,EAAwD;EAAA,IAAjD;IAAEC,MAAM;IAAEC,IAAI;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAQ,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EAClF,IAAI,CAACH,MAAM,EAAE,OAAO,IAAI;EAExB,IAAI;IACF,OAAO,MAAM,IAAAM,oBAAO,EAAC;MACnBC,QAAQ,gBAAAC,MAAA,CAAgBR,MAAM,cAAW;MACzCS,QAAQ,EAAEC,OAAO,CAACC,GAAG,CAACC,aAAa;MACnCC,MAAM,EAAE,MAAM;MACdC,OAAO,EAAE;QAAE,cAAc,EAAEJ,OAAO,CAACC,GAAG,CAACI;MAAW,CAAC;MACnDjB,MAAM;MACNC,IAAI;MACJE,IAAI;MACJC;IACF,CAAC,CAAC;EACJ,CAAC,CAAC,OAAAc,OAAA,EAAM;IACN,OAAO,IAAI;EACb;AACF,CAAC;AAACC,OAAA,CAAApB,iBAAA,GAAAA,iBAAA;AAEK,MAAMqB,YAAY,GAAG,eAAAA,CAAA,EAAoD;EAAA,IAA7C;IAAEC,WAAW;IAAEC,SAAS;IAAElB;EAAQ,CAAC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;EACzE,IAAI,CAACgB,WAAW,IAAI,CAACC,SAAS,EAAE,OAAO,IAAI;EAE3C,IAAI;IAAA,IAAAC,aAAA;IACF,MAAMC,OAAO,GAAG,MAAM,IAAAhB,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;MACnDI,WAAW;MACXC,SAAS;MACTlB;IACF,CAAC,CAAC;IAEF,OAAO,CAAAoB,OAAO,aAAPA,OAAO,wBAAAD,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;AAACR,OAAA,CAAAC,YAAA,GAAAA,YAAA","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mirai/core",
3
- "version": "0.4.511",
3
+ "version": "0.4.513",
4
4
  "source": "src/index.js",
5
5
  "repository": "https://gitlab.com/miraicorp/dev/frontend/core",
6
6
  "author": "JΛVI <hello@soyjavi.com>",