@nethesis/phone-island 0.7.63 → 0.7.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
- package/dist/_virtual/index2.js +1 -1
- package/dist/_virtual/index3.js +1 -1
- package/dist/_virtual/index4.js +1 -1
- package/dist/_virtual/index5.js +1 -1
- package/dist/_virtual/index6.js +1 -1
- package/dist/_virtual/index8.js +1 -1
- package/dist/components/AlertGuard.js +1 -1
- package/dist/components/AlertGuard.js.map +1 -1
- package/dist/components/AlertView/index.js +1 -1
- package/dist/components/AlertView/index.js.map +1 -1
- package/dist/components/CallView/Actions.js +1 -1
- package/dist/components/CallView/Actions.js.map +1 -1
- package/dist/components/CallView/BackCall.js +1 -1
- package/dist/components/CallView/BackCall.js.map +1 -1
- package/dist/components/CallView/Timer.d.ts +1 -0
- package/dist/components/CallView/Timer.js +1 -1
- package/dist/components/CallView/Timer.js.map +1 -1
- package/dist/components/CallView/index.js +1 -1
- package/dist/components/CallView/index.js.map +1 -1
- package/dist/components/Hangup.d.ts +10 -0
- package/dist/components/Hangup.js +2 -0
- package/dist/components/Hangup.js.map +1 -0
- package/dist/components/Island.js +1 -1
- package/dist/components/Island.js.map +1 -1
- package/dist/components/KeypadView/Actions.js +1 -1
- package/dist/components/KeypadView/Actions.js.map +1 -1
- package/dist/components/KeypadView/index.js +1 -1
- package/dist/components/KeypadView/index.js.map +1 -1
- package/dist/components/RestAPI.js +1 -1
- package/dist/components/RestAPI.js.map +1 -1
- package/dist/components/Socket.js +1 -1
- package/dist/components/Socket.js.map +1 -1
- package/dist/components/TransferView/ListAvatar.d.ts +7 -0
- package/dist/components/TransferView/ListAvatar.js +2 -0
- package/dist/components/TransferView/ListAvatar.js.map +1 -0
- package/dist/components/TransferView/TransferActions.d.ts +5 -0
- package/dist/components/TransferView/TransferActions.js +2 -0
- package/dist/components/TransferView/TransferActions.js.map +1 -0
- package/dist/components/TransferView/TransferList.d.ts +5 -0
- package/dist/components/TransferView/TransferList.js +2 -0
- package/dist/components/TransferView/TransferList.js.map +1 -0
- package/dist/components/TransferView/index.d.ts +2 -0
- package/dist/components/TransferView/index.js +2 -0
- package/dist/components/TransferView/index.js.map +1 -0
- package/dist/components/ViewsTransition.js +1 -1
- package/dist/components/ViewsTransition.js.map +1 -1
- package/dist/components/WebRTC.js +1 -1
- package/dist/components/WebRTC.js.map +1 -1
- package/dist/events/CallEvents.js +1 -1
- package/dist/events/CallEvents.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/lib/devices/devices.js +1 -1
- package/dist/lib/island/island.d.ts +4 -0
- package/dist/lib/island/island.js +1 -1
- package/dist/lib/island/island.js.map +1 -1
- package/dist/lib/phone/call.d.ts +19 -2
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/lib/user/extensions.d.ts +4 -0
- package/dist/lib/user/extensions.js.map +1 -1
- package/dist/models/alerts.js +1 -1
- package/dist/models/alerts.js.map +1 -1
- package/dist/models/animations.d.ts +466 -12
- package/dist/models/animations.js +1 -1
- package/dist/models/animations.js.map +1 -1
- package/dist/models/currentCall.d.ts +142 -0
- package/dist/models/currentCall.js +1 -1
- package/dist/models/currentCall.js.map +1 -1
- package/dist/models/currentUser.d.ts +2 -42
- package/dist/models/fetchDefaults.js +1 -1
- package/dist/models/fetchDefaults.js.map +1 -1
- package/dist/models/island.d.ts +1 -1
- package/dist/models/island.js.map +1 -1
- package/dist/models/users.d.ts +23 -5
- package/dist/models/users.js +1 -1
- package/dist/models/users.js.map +1 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/index.es.js +1 -1
- package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js.map +1 -1
- package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js +1 -1
- package/dist/node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js.map +1 -1
- package/dist/node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js +1 -1
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/mic-check/lib/index.js +1 -1
- package/dist/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/react-moment/dist/index.js +1 -1
- package/dist/node_modules/react-redux/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +1 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js +1 -1
- package/dist/node_modules/use-sync-external-store/shim/index.js +1 -1
- package/dist/services/astproxy.d.ts +13 -0
- package/dist/services/astproxy.js +2 -0
- package/dist/services/astproxy.js.map +1 -0
- package/dist/services/user.d.ts +5 -1
- package/dist/services/user.js +1 -1
- package/dist/services/user.js.map +1 -1
- package/dist/types/call.d.ts +5 -0
- package/dist/types/endpoints.d.ts +36 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/user.d.ts +2 -21
- package/dist/utils/genericFunctions/timestamp.d.ts +4 -0
- package/dist/utils/genericFunctions/timestamp.js +2 -0
- package/dist/utils/genericFunctions/timestamp.js.map +1 -0
- package/package.json +1 -1
- package/dist/_virtual/framesync.cjs.js +0 -2
- package/dist/_virtual/framesync.cjs.js.map +0 -1
- package/dist/_virtual/hey-listen.es.js +0 -2
- package/dist/_virtual/hey-listen.es.js.map +0 -1
- package/dist/_virtual/index.es.js +0 -2
- package/dist/_virtual/index.es.js.map +0 -1
- package/dist/_virtual/index9.js +0 -2
- package/dist/_virtual/index9.js.map +0 -1
- package/dist/_virtual/valueTypes.cjs.js +0 -2
- package/dist/_virtual/valueTypes.cjs.js.map +0 -1
- package/dist/node_modules/@motionone/animation/dist/Animation.es.js +0 -2
- package/dist/node_modules/@motionone/animation/dist/Animation.es.js.map +0 -1
- package/dist/node_modules/@motionone/animation/dist/utils/easing.es.js +0 -2
- package/dist/node_modules/@motionone/animation/dist/utils/easing.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/animate-style.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/animate-style.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/data.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/data.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/style.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/style.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/controls.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/controls.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/css-var.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/css-var.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/easing.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/easing.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/feature-detection.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/get-style-name.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/keyframes.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/options.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/options.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/stop-animation.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/style-object.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/style-object.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/style-string.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/style-string.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/animate/utils/transforms.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/animate/utils/transforms.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/easing/create-generator-easing.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/easing/glide/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/easing/glide/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/easing/spring/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/easing/spring/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/in-view.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/in-view.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/handle-element.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/handle-element.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/handle-window.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/handle-window.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/resize/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/info.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/info.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/edge.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/edge.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/inset.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/inset.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/offset.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/offset.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/offsets/presets.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/on-scroll-handler.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/gestures/scroll/on-scroll-handler.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/gestures/hover.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/gestures/hover.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/gestures/in-view.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/gestures/in-view.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/gestures/press.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/gestures/press.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/utils/events.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/utils/events.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/utils/has-changed.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/utils/has-changed.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/utils/is-variant.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/utils/is-variant.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/utils/resolve-variant.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/utils/resolve-variant.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/state/utils/schedule.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/state/utils/schedule.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/timeline/index.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/timeline/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/calc-time.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/calc-time.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/edit.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/edit.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/sort.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/timeline/utils/sort.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/utils/resolve-elements.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/utils/resolve-elements.es.js.map +0 -1
- package/dist/node_modules/@motionone/dom/dist/utils/stagger.es.js +0 -2
- package/dist/node_modules/@motionone/dom/dist/utils/stagger.es.js.map +0 -1
- package/dist/node_modules/@motionone/easing/dist/cubic-bezier.es.js +0 -2
- package/dist/node_modules/@motionone/easing/dist/cubic-bezier.es.js.map +0 -1
- package/dist/node_modules/@motionone/easing/dist/steps.es.js +0 -2
- package/dist/node_modules/@motionone/easing/dist/steps.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/glide/index.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/glide/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/spring/defaults.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/spring/defaults.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/spring/index.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/spring/index.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/spring/utils.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/spring/utils.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/utils/has-reached-target.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/utils/has-reached-target.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/utils/pregenerate-keyframes.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/utils/pregenerate-keyframes.es.js.map +0 -1
- package/dist/node_modules/@motionone/generators/dist/utils/velocity.es.js +0 -2
- package/dist/node_modules/@motionone/generators/dist/utils/velocity.es.js.map +0 -1
- package/dist/node_modules/@motionone/types/dist/MotionValue.es.js +0 -2
- package/dist/node_modules/@motionone/types/dist/MotionValue.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/array.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/array.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/clamp.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/clamp.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/defaults.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/defaults.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/easing.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/easing.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/interpolate.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/interpolate.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-cubic-bezier.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-cubic-bezier.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-easing-generator.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-easing-generator.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-easing-list.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-easing-list.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-function.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-function.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-number.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-number.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/is-string.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/is-string.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/mix.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/mix.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/noop.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/noop.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/offset.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/offset.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/progress.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/progress.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/time.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/time.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/velocity.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/velocity.es.js.map +0 -1
- package/dist/node_modules/@motionone/utils/dist/wrap.es.js +0 -2
- package/dist/node_modules/@motionone/utils/dist/wrap.es.js.map +0 -1
- package/dist/node_modules/framer-motion/dist/cjs/index.js +0 -2
- package/dist/node_modules/framer-motion/dist/cjs/index.js.map +0 -1
- package/dist/node_modules/framesync/dist/framesync.cjs.js +0 -2
- package/dist/node_modules/framesync/dist/framesync.cjs.js.map +0 -1
- package/dist/node_modules/hey-listen/dist/hey-listen.es.js +0 -2
- package/dist/node_modules/hey-listen/dist/hey-listen.es.js.map +0 -1
- package/dist/node_modules/style-value-types/dist/valueTypes.cjs.js +0 -2
- package/dist/node_modules/style-value-types/dist/valueTypes.cjs.js.map +0 -1
- package/dist/services/extensions.d.ts +0 -4
- package/dist/services/extensions.js +0 -2
- package/dist/services/extensions.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { faArrowLeft } from '@nethesis/nethesis-light-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport Actions from './Actions'\nimport {
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/KeypadView/index.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useRef } from 'react'\nimport { Button } from '../Button'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../../store'\nimport { faArrowLeft } from '@nethesis/nethesis-light-svg-icons'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport Actions from './Actions'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { backToCallView } from '../../lib/island/island'\nimport { playDtmfAudio } from '../../lib/phone/call'\nimport Hangup from '../Hangup'\n\nconst DTMF_KEYS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '*', '#']\n\nconst KeypadView: FC<KeypadViewTypes> = () => {\n const dispatch = useDispatch<Dispatch>()\n const { keypadValue } = useSelector((state: RootState) => state.currentCall)\n const { isOpen } = useSelector((state: RootState) => state.island)\n const keypadValueRef = useRef<typeof keypadValue>(keypadValue)\n\n function sendKey(key: string) {\n dispatch.currentCall.updateKeypadValue(`${keypadValueRef.current}${key}`)\n keypadValueRef.current = `${keypadValueRef.current}${key}`\n playDtmfAudio(key)\n sendDTMF(key)\n }\n\n useEffect(() => {\n function handlePhysicalKeydown(event) {\n if (DTMF_KEYS.includes(event.key)) {\n sendKey(event.key)\n }\n }\n window.addEventListener('keydown', handlePhysicalKeydown)\n return () => window.removeEventListener('keydown', handlePhysicalKeydown)\n }, [])\n\n return (\n <>\n {isOpen ? (\n <div className='pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button variant='transparent' onClick={backToCallView}>\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n readOnly\n value={keypadValue}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <Actions keyCallback={sendKey} />\n <div className='pi-flex pi-justify-center'>\n {/* The button to hangup the currentCall */}\n <Hangup />\n </div>\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base'>Keypad</div>\n )}\n </>\n )\n}\n\nexport default KeypadView\n\nexport interface KeypadViewTypes {}\n"],"names":["DTMF_KEYS","dispatch","useDispatch","keypadValue","useSelector","state","currentCall","isOpen","island","keypadValueRef","useRef","sendKey","key","updateKeypadValue","concat","current","playDtmfAudio","sendDTMF","useEffect","handlePhysicalKeydown","event","includes","window","addEventListener","removeEventListener","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","readOnly","value","autoFocus","Actions","keyCallback","Hangup"],"mappings":"gtBAeMA,EAAY,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,qBAElC,WACtC,IAAMC,EAAWC,EAAAA,cACTC,EAAgBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,2BACxDC,EAAWH,eAAY,SAACC,GAAqB,OAAAA,EAAMG,iBACrDC,EAAiBC,SAA2BP,GAElD,SAASQ,EAAQC,GACfX,EAASK,YAAYO,kBAAkB,GAAAC,OAAGL,EAAeM,SAAOD,OAAGF,IACnEH,EAAeM,QAAU,GAAGD,OAAAL,EAAeM,SAAOD,OAAGF,GACrDI,EAAaA,cAACJ,GACdK,EAAQA,SAACL,EACV,CAYD,OAVAM,EAAAA,WAAU,WACR,SAASC,EAAsBC,GACzBpB,EAAUqB,SAASD,EAAMR,MAC3BD,EAAQS,EAAMR,IAEjB,CAED,OADAU,OAAOC,iBAAiB,UAAWJ,GAC5B,WAAM,OAAAG,OAAOE,oBAAoB,UAAWL,GACpD,GAAE,IAGDM,UACGC,cAAAD,EAAA,QAAAE,SAAA,KAAApB,EACCkB,EAAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,gCACbH,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,oBACbH,EAAC,QAAAC,cAAAG,UAAOC,QAAQ,cAAcC,QAASC,kBACrCP,UAACC,cAAAO,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMC,EAAWA,eAE9CX,EAAA,QAAAC,cAAA,QAAA,CAAA,yBACyB,EACvBW,KAAK,OACLC,UACA,EAAAC,MAAOpC,EACPqC,WAAS,EACTZ,UAAU,oPAGdH,EAAAA,QAAAC,cAACe,EAAAA,QAAO,CAACC,YAAa/B,IACtBc,EAAAA,QAAKC,cAAA,MAAA,CAAAE,UAAU,6BAEbH,EAAAA,QAAAC,cAACiB,EAAAA,QAAS,QAIdlB,EAAA,QAAAC,cAAA,MAAA,CAAKE,UAAU,yCAIvB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),t=require("react"),r=require("../services/user.js"),s=require("../lib/avatars/avatars.js");require("../node_modules/react-redux/es/index.js");var n=require("../services/astproxy.js"),u=require("../node_modules/react-redux/es/hooks/useDispatch.js"),a=require("../node_modules/react-redux/es/hooks/useSelector.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=i(t);exports.RestAPI=function(i){var o=i.hostName,f=i.username,d=i.authToken,l=i.children,h=u.useDispatch(),v=a.useSelector((function(e){return e.fetchDefaults})).fetchReady;return t.useEffect((function(){f&&d&&o&&(h.fetchDefaults.updateFetchBaseURL("https://".concat(o,"/webrest")),h.fetchDefaults.updateFetchHeaders({Authorization:"".concat(f,":").concat(d)}),h.fetchDefaults.setFetchReady())}),[f,d,o]),t.useEffect((function(){v&&(function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getCurrentUserInfo()];case 1:return(t=e.sent())&&(h.currentUser.updateCurrentUser(t),h.currentUser.setCurrentUserReady(!0)),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,n.getAllExtensions()];case 1:return(t=e.sent())&&h.users.updateExtensions(t),[2]}}))}))}(),function(){e.__awaiter(this,void 0,void 0,(function(){var t;return e.__generator(this,(function(e){switch(e.label){case 0:return[4,r.getAllUsersEndpoints()];case 1:return(t=e.sent())&&h.users.updateEndpoints(t),[2]}}))}))}())}),[v]),t.useLayoutEffect((function(){f&&v&&s.retrieveAvatars(f)}),[v,f]),c.default.createElement(c.default.Fragment,null,v&&l)};
|
|
2
2
|
//# sourceMappingURL=RestAPI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/
|
|
1
|
+
{"version":3,"file":"RestAPI.js","sources":["../../src/components/RestAPI.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC, useEffect, useLayoutEffect } from 'react'\nimport { getCurrentUserInfo } from '../services/user'\nimport { retrieveAvatars } from '../lib/avatars/avatars'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Dispatch, RootState } from '../store'\nimport { getAllExtensions } from '../services/astproxy'\nimport { getAllUsersEndpoints } from '../services/user'\n\nexport const RestAPI: FC<RestAPIProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const { fetchReady } = useSelector((state: RootState) => state.fetchDefaults)\n\n useEffect(() => {\n if (username && authToken && hostName) {\n // Initialize API defaults\n dispatch.fetchDefaults.updateFetchBaseURL(`https://${hostName}/webrest`)\n dispatch.fetchDefaults.updateFetchHeaders({\n Authorization: `${username}:${authToken}`,\n })\n dispatch.fetchDefaults.setFetchReady()\n }\n }, [username, authToken, hostName])\n\n useEffect(() => {\n // Get users info and set to store\n async function initCurrentUser() {\n const userInfo = await getCurrentUserInfo()\n if (userInfo) {\n dispatch.currentUser.updateCurrentUser(userInfo)\n dispatch.currentUser.setCurrentUserReady(true)\n }\n }\n // Get all extensions info and set to store\n async function initExtensions() {\n const extensions = await getAllExtensions()\n if (extensions) {\n dispatch.users.updateExtensions(extensions)\n }\n }\n // Get all users and endpoints info and set to store\n async function initUsersEndpoints() {\n const usersEndpoints = await getAllUsersEndpoints()\n if (usersEndpoints) {\n dispatch.users.updateEndpoints(usersEndpoints)\n }\n }\n // Call the needed APIs on startup\n if (fetchReady) {\n initCurrentUser()\n initExtensions()\n initUsersEndpoints()\n }\n }, [fetchReady])\n\n useLayoutEffect(() => {\n // Initialize avatars request it or get from storage\n if (username && fetchReady) {\n retrieveAvatars(username)\n }\n }, [fetchReady, username])\n\n return <>{fetchReady && children}</>\n}\n\ninterface RestAPIProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","fetchReady","useSelector","state","fetchDefaults","useEffect","updateFetchBaseURL","concat","updateFetchHeaders","Authorization","setFetchReady","getCurrentUserInfo","userInfo","sent","currentUser","updateCurrentUser","setCurrentUserReady","initCurrentUser","getAllExtensions","extensions","users","updateExtensions","initExtensions","getAllUsersEndpoints","usersEndpoints","updateEndpoints","initUsersEndpoints","useLayoutEffect","retrieveAvatars","React","createElement","Fragment"],"mappings":"ohBAWyC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAQF,EAAAE,SAAEC,EAASH,EAAAG,UAAEC,EAAQJ,EAAAI,SAC3EC,EAAWC,EAAAA,cACTC,EAAeC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,4BAmD/D,OAjDAC,EAAAA,WAAU,WACJT,GAAYC,GAAaF,IAE3BI,EAASK,cAAcE,mBAAmB,WAAWC,OAAAZ,EAAkB,aACvEI,EAASK,cAAcI,mBAAmB,CACxCC,cAAe,GAAAF,OAAGX,EAAQ,KAAAW,OAAIV,KAEhCE,EAASK,cAAcM,gBAE1B,GAAE,CAACd,EAAUC,EAAWF,IAEzBU,EAAAA,WAAU,WAwBJJ,IAtBJ,0HACmB,MAAM,CAAA,EAAAU,EAAAA,oCAAjBC,EAAWlB,EAA0BmB,UAEzCd,EAASe,YAAYC,kBAAkBH,GACvCb,EAASe,YAAYE,qBAAoB,cAE5C,CAiBCC,GAfF,0HACqB,MAAM,CAAA,EAAAC,EAAAA,kCAAnBC,EAAazB,EAAwBmB,SAEzCd,EAASqB,MAAMC,iBAAiBF,aAEnC,CAWCG,GATF,0HACyB,MAAM,CAAA,EAAAC,EAAAA,sCAAvBC,EAAiB9B,EAA4BmB,SAEjDd,EAASqB,MAAMK,gBAAgBD,aAElC,CAKCE,GAEJ,GAAG,CAACzB,IAEJ0B,EAAAA,iBAAgB,WAEV/B,GAAYK,GACd2B,EAAeA,gBAAChC,EAEpB,GAAG,CAACK,EAAYL,IAETiC,EAAAA,QAAGC,cAAAD,EAAA,QAAAE,SAAA,KAAA9B,GAAcH,EAC1B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/tslib/tslib.es6.js"),n=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/socket.io-client/build/esm/index.js"),o=require("../lib/phone/conversation.js"),c=require("../utils/genericFunctions/withTimeout.js");require("../node_modules/mic-check/lib/index.js"),require("../lib/webrtc/janus.js");var r=require("../store/index.js");require("../node_modules/webrtc-adapter/src/js/adapter_core.js");var u=require("../events/SocketEvents.js"),s=require("../node_modules/react-redux/es/hooks/useDispatch.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var i=a(n);exports.Socket=function(a){var d=a.hostName,l=a.username,m=a.authToken,p=a.children,f=s.useDispatch(),b=n.useRef(),g=n.useRef();return n.useEffect((function(){return g.current=t.io(d,{upgrade:!1,transports:["websocket"],reconnection:!0,reconnectionDelay:2e3}),g.current.on("connect",(function(){console.debug("Socket connected sid: ".concat(g.current.id))})),g.current.on("disconnect",(function(e){console.log("Socket disconnect - reason: ".concat(e))})),g.current.io.on("error",(function(e){console.debug("Socket error: ",e)})),g.current.on("connect_error",(function(e){console.debug("Socket connect_error: ",e)})),g.current.io.on("reconnect",(function(e){console.debug("Socket reconnect attemp ".concat(e," (sid: ").concat(g.current.id,")"))})),g.current.io.on("reconnect_attempt",(function(e){console.debug("Socket reconnect_attempt ".concat(e))})),g.current.io.on("reconnect_error",(function(e){console.debug("Socket reconnect_error: ",e)})),g.current.io.on("reconnect_failed",(function(){console.debug("Socket reconnect_failed")})),b.current=setInterval((function(){var e=Date.now();g.current.volatile.emit("ping",c.withTimeout((function(){f.alerts.removeAlert("socket_down");var n=Date.now()-e;console.debug("Socket latency: ".concat(n,"ms")),console.debug("Socket is reachable!")}),(function(){f.alerts.setAlert("socket_down"),console.debug("Socket is unreachable!")}),2e3))}),5e3),g.current.on("connect",(function(){console.log("Socket on: "+d+" is connected!"),g.current.emit("login",{accessKeyId:"".concat(l),token:m,uaType:"desktop"})})),g.current.on("authe_ok",(function(){console.log("Socket authentication success!")})),g.current.on("userMainPresenceUpdate",(function(n){r.store.dispatch.users.updateEndpointMainPresence(e.__assign({},n.mainPresence)),u.dispatchMainPresence(n)})),g.current.on("extenUpdate",(function(e){f.users.updateExtension(e),u.dispatchConversations(e);var n=e.conversations[Object.keys(e.conversations)[0]]||{};e.username===l&&function(e,n){var t=e.status;if(Object.keys(n).length>0&&t){var c=r.store.getState().users.extensions;switch(t){case"ringing":f.currentCall.checkIncomingUpdateAndPlay({conversationId:n.id,displayName:o.getDisplayName(n),number:"".concat(n.counterpartNum),incomingSocket:!0,username:"".concat(c&&c[n.counterpartNum]&&c[n.counterpartNum].username)||""});break;case"busy":n&&n.connected?f.currentCall.updateCurrentCall({conversationId:n.id,displayName:o.getDisplayName(n),number:"".concat(n.counterpartNum),startTime:"".concat(n.startTime/1e3),username:"".concat(c&&c[n.counterpartNum]&&c[n.counterpartNum].username)||""}):n&&!n.connected&&"out"===n.direction&&f.currentCall.checkOutgoingUpdate({outgoingSocket:!0,displayName:o.getDisplayName(n),number:"".concat(n.counterpartNum),username:"".concat(c&&c[n.counterpartNum]&&c[n.counterpartNum].username)||""})}}}(e,n)})),g.current.on("queueUpdate",(function(e){u.dispatchQueueUpdate(e)})),g.current.on("queueMemberUpdate",(function(e){u.dispatchQueueMemberUpdate(e)})),function(){clearInterval(b.current),g.current.close()}}),[]),i.default.createElement(i.default.Fragment,null,p)};
|
|
2
2
|
//# sourceMappingURL=Socket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { withTimeout } from '../utils'\nimport type {\n ConversationsTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n} from '../types'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n\nexport const Socket: FC<SocketProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: any, conv: ConversationsTypes) => {\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n const status: string = res.status\n if (status) {\n const { extensions } = store.getState().users\n switch (status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdateAndPlay({\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Set current call accepted\n dispatch.currentCall.updateCurrentCall({\n accepted: true,\n incoming: false,\n outgoing: false,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n // Handle outgoing call\n else if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n default:\n break\n }\n }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n })\n socket.current.on('disconnect', (reason) => {\n console.log(`Socket disconnect - reason: ${reason}`)\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 2000,\n ),\n )\n }, 5000)\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.log('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res) => {\n // Pass data to dispatchMainPresence\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv: ConversationsTypes = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n }\n })\n\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","useEffect","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","concat","id","reason","log","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","res","dispatchMainPresence","users","updateExtension","dispatchConversations","conv","conversations","Object","keys","length","status_1","status","extensions","store","getState","currentCall","checkIncomingUpdateAndPlay","displayName","getDisplayName","number","counterpartNum","incomingSocket","connected","updateCurrentCall","accepted","incoming","outgoing","startTime","direction","checkOutgoingUpdate","outgoingSocket","handleCurrentUserEvents","dispatchQueueUpdate","dispatchQueueMemberUpdate","clearInterval","close","React","createElement","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Socket.js","sources":["../../src/components/Socket.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport { io } from 'socket.io-client'\nimport { getDisplayName } from '../lib/phone/conversation'\nimport {\n dispatchMainPresence,\n dispatchConversations,\n dispatchQueueUpdate,\n dispatchQueueMemberUpdate,\n} from '../events'\nimport { store } from '../store'\nimport { withTimeout } from '../utils'\nimport type {\n ConversationsTypes,\n ExtensionTypes,\n QueuesUpdateTypes,\n QueueUpdateMemberTypes,\n MainPresenceTypes,\n} from '../types'\n// import { userTotallyFree } from '../lib/user/extensions'\n\ninterface SocketProps {\n children: ReactNode\n hostName: string\n username: string\n authToken: string\n}\n\nexport const Socket: FC<SocketProps> = ({ hostName, username, authToken, children }) => {\n const dispatch = useDispatch<Dispatch>()\n const connectionCheckInterval = useRef<any>()\n const socket = useRef<any>()\n\n useEffect(() => {\n /**\n * Manages event and data for the currentUser\n *\n * @param res The data from the socket\n * @param conv The conversation data\n */\n const handleCurrentUserEvents = (res: any, conv: ConversationsTypes) => {\n // Initialize status\n const status: string = res.status\n // Check conversation isn't empty\n if (Object.keys(conv).length > 0) {\n // With conversation\n if (status) {\n const { extensions } = store.getState().users\n switch (status) {\n case 'ringing':\n // The name and the number are updated here not in webrtc\n dispatch.currentCall.checkIncomingUpdateAndPlay({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n incomingSocket: true,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n break\n // @ts-ignore\n case 'busy':\n if (conv && conv.connected) {\n // Current call accepted\n dispatch.currentCall.updateCurrentCall({\n conversationId: conv.id,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n startTime: `${conv.startTime / 1000}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n // Handle outgoing call\n else if (conv && !conv.connected && conv.direction === 'out') {\n // Update the current outgoing conversation\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingSocket: true,\n displayName: getDisplayName(conv),\n number: `${conv.counterpartNum}`,\n username:\n `${\n extensions &&\n extensions[conv.counterpartNum] &&\n extensions[conv.counterpartNum].username\n }` || '',\n })\n }\n default:\n break\n }\n }\n } else {\n // Without conversation for physical phone management\n // if (status) {\n // if (res.status == 'online' && userTotallyFree()) {\n // // Stop ringing sounds\n // dispatch.player.stopAudioPlayer()\n // // Reset current call info\n // dispatch.currentCall.reset()\n // }\n // }\n }\n }\n\n /**\n * Initialize socket connection and listeners\n */\n const initSocketConnection = () => {\n socket.current = io(hostName, {\n upgrade: false,\n transports: ['websocket'],\n reconnection: true,\n reconnectionDelay: 2000,\n })\n\n // Handle socket errors\n socket.current.on('connect', () => {\n console.debug(`Socket connected sid: ${socket.current.id}`)\n })\n socket.current.on('disconnect', (reason) => {\n console.log(`Socket disconnect - reason: ${reason}`)\n })\n socket.current.io.on('error', (err) => {\n console.debug(`Socket error: `, err)\n })\n socket.current.on('connect_error', (err) => {\n console.debug(`Socket connect_error: `, err)\n })\n socket.current.io.on('reconnect', (attempt) => {\n console.debug(`Socket reconnect attemp ${attempt} (sid: ${socket.current.id})`)\n })\n socket.current.io.on('reconnect_attempt', (attempt) => {\n console.debug(`Socket reconnect_attempt ${attempt}`)\n })\n socket.current.io.on('reconnect_error', (err) => {\n console.debug(`Socket reconnect_error: `, err)\n })\n socket.current.io.on('reconnect_failed', () => {\n console.debug(`Socket reconnect_failed`)\n })\n\n // Checks if socket is reachable every 5 seconds\n connectionCheckInterval.current = setInterval(() => {\n const start = Date.now()\n socket.current.volatile.emit(\n 'ping',\n withTimeout(\n () => {\n // Remove socket_down alert\n dispatch.alerts.removeAlert('socket_down')\n // Calculate and log latency\n const latency = Date.now() - start\n console.debug(`Socket latency: ${latency}ms`)\n console.debug('Socket is reachable!')\n },\n () => {\n // Set socket_down alert\n dispatch.alerts.setAlert('socket_down')\n console.debug('Socket is unreachable!')\n },\n 2000,\n ),\n )\n }, 5000)\n\n // Handle connection message\n socket.current.on('connect', () => {\n console.log('Socket on: ' + hostName + ' is connected!')\n socket.current.emit('login', {\n accessKeyId: `${username}`,\n token: authToken,\n uaType: 'desktop',\n })\n })\n\n // Handle authentication success message\n socket.current.on('authe_ok', () => {\n console.log('Socket authentication success!')\n })\n\n socket.current.on('userMainPresenceUpdate', (res: MainPresenceTypes) => {\n // Update endpoints store\n store.dispatch.users.updateEndpointMainPresence({ ...res.mainPresence })\n // Dispatch dispatchMainPresence Event\n dispatchMainPresence(res)\n })\n\n socket.current.on('extenUpdate', (res: ExtensionTypes) => {\n // Update extensions and conversations in users store\n dispatch.users.updateExtension(res)\n // Dispatch conversations event\n dispatchConversations(res)\n // Initialize conversation\n const conv: ConversationsTypes = res.conversations[Object.keys(res.conversations)[0]] || {}\n // Handle only the events of the user\n if (res.username === username) {\n handleCurrentUserEvents(res, conv)\n }\n })\n\n socket.current.on('queueUpdate', (res: QueuesUpdateTypes) => {\n // Dispatch queueUpdate event\n dispatchQueueUpdate(res)\n })\n\n socket.current.on('queueMemberUpdate', (res: QueueUpdateMemberTypes) => {\n // Dispatch queueMemberUpdate event\n dispatchQueueMemberUpdate(res)\n })\n }\n\n initSocketConnection()\n\n // Stop the check socket interval\n // Close the socket connection\n return () => {\n clearInterval(connectionCheckInterval.current)\n socket.current.close()\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["_a","hostName","username","authToken","children","dispatch","useDispatch","connectionCheckInterval","useRef","socket","useEffect","current","io","upgrade","transports","reconnection","reconnectionDelay","on","console","debug","concat","id","reason","log","err","attempt","setInterval","start","Date","now","volatile","emit","withTimeout","alerts","removeAlert","latency","setAlert","accessKeyId","token","uaType","res","store","users","updateEndpointMainPresence","__assign","mainPresence","dispatchMainPresence","updateExtension","dispatchConversations","conv","conversations","Object","keys","status","length","extensions","getState","currentCall","checkIncomingUpdateAndPlay","conversationId","displayName","getDisplayName","number","counterpartNum","incomingSocket","connected","updateCurrentCall","startTime","direction","checkOutgoingUpdate","outgoingSocket","handleCurrentUserEvents","dispatchQueueUpdate","dispatchQueueMemberUpdate","clearInterval","close","React","createElement","Fragment"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/react-redux/es/hooks/useSelector.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=t(e);exports.default=function(e){var t=e.username,i=e.status,n=r.useSelector((function(e){return e.avatars})).avatars;return a.default.createElement("div",{style:{backgroundImage:"url(".concat(n&&t&&n[t]&&n[t],")"),backgroundRepeat:"no-repeat",backgroundSize:"contain"},className:"pi-w-12 pi-h-12 pi-rounded-full pi-bg-gray-200 pi-flex-shrink-0 pi-relative"},i&&a.default.createElement("span",{style:{marginBottom:"1px",marginRight:"1px"},className:"pi-absolute pi-rounded-full pi-w-3 pi-h-3 ".concat("online"===i?"pi-bg-green-600":"pi-bg-red-600"," pi-bottom-0 pi-right-0 pi-border-2 pi-border-white")}))};
|
|
2
|
+
//# sourceMappingURL=ListAvatar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListAvatar.js","sources":["../../../src/components/TransferView/ListAvatar.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../store'\n\nconst ListAvatar: FC<ListAvatarProps> = ({ username, status }) => {\n const { avatars } = useSelector((state: RootState) => state.avatars)\n\n return (\n <div\n style={{\n backgroundImage: `url(${avatars && username && avatars[username] && avatars[username]})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'contain',\n }}\n className='pi-w-12 pi-h-12 pi-rounded-full pi-bg-gray-200 pi-flex-shrink-0 pi-relative'\n >\n {/* The status bullet */}\n {status && (\n <span\n style={{ marginBottom: '1px', marginRight: '1px' }}\n className={`pi-absolute pi-rounded-full pi-w-3 pi-h-3 ${\n status === 'online' ? 'pi-bg-green-600' : 'pi-bg-red-600'\n } pi-bottom-0 pi-right-0 pi-border-2 pi-border-white`}\n ></span>\n )}\n </div>\n )\n}\n\ninterface ListAvatarProps {\n username?: string\n status?: string\n}\n\nexport default ListAvatar\n"],"names":["_a","username","status","avatars","useSelector","state","React","createElement","style","backgroundImage","concat","backgroundRepeat","backgroundSize","className","marginBottom","marginRight"],"mappings":"4TAOwC,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAMF,EAAAE,OACjDC,EAAYC,eAAY,SAACC,GAAqB,OAAAA,EAAMF,mBAE5D,OACEG,UACEC,cAAA,MAAA,CAAAC,MAAO,CACLC,gBAAiB,OAAAC,OAAOP,GAAWF,GAAYE,EAAQF,IAAaE,EAAQF,GAAY,KACxFU,iBAAkB,YAClBC,eAAgB,WAElBC,UAAU,+EAGTX,GACCI,EAAA,QAAAC,cAAA,OAAA,CACEC,MAAO,CAAEM,aAAc,MAAOC,YAAa,OAC3CF,UAAW,6CACTH,OAAW,WAAXR,EAAsB,kBAAoB,gBAAe,yDAMrE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../Button.js"),r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),a=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),n=require("../../node_modules/@nethesis/nethesis-solid-svg-icons/index.mjs.js"),s=require("../../lib/webrtc/messages.js"),i=require("../../store/index.js");require("../../node_modules/react-redux/es/index.js");var u=require("../../static/outgoing_ringtone.js"),o=require("../../node_modules/react-redux/es/hooks/useDispatch.js"),l=require("../../node_modules/react-redux/es/hooks/useSelector.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=c(e);exports.TransferActions=function(){var c=o.useDispatch(),m=l.useSelector((function(e){return e.currentCall})),f=m.transferSwitching,p=m.transferringName,g=m.transferringStartTime,j=m.displayName,v=m.startTime;m.number;var x=e.useState(!0),y=x[0],h=x[1],S=e.useState({}),q=S[0],w=S[1],C=e.useState(""),E=C[0],T=C[1],A=e.useState(""),_=A[0],P=A[1];return e.useEffect((function(){f&&(c.currentCall.updateCurrentCall({transferringName:q[E].name,transferringStartTime:q[E].time}),c.currentCall.updateTransferSwitching(!1))}),[j]),e.useEffect((function(){_&&q[_]&&c.currentCall.updateCurrentCall({startTime:q[_].time})}),[v]),d.default.createElement("div",{className:"pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center"},d.default.createElement("div",null),d.default.createElement(t.Button,{onClick:function(){var e;y&&(w(((e={})[j]={name:j,time:v},e[p]={name:p,time:g},e)),h(!1)),T(j),P(p),c.currentCall.updateTransferSwitching(!0),s.sendDTMF("*"),i.store.getState().player.audioPlayerPlaying||c.player.updateAndPlayAudioPlayer({src:u.default,loop:!0}),setTimeout((function(){s.sendDTMF("4"),c.player.stopAudioPlayer()}),500)},active:f,variant:"default"},f?d.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:n.faArrowsRepeat}):d.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:a.faArrowsRepeat})),d.default.createElement(t.Button,{variant:"default"},d.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:a.faUsers})),d.default.createElement("div",null))};
|
|
2
|
+
//# sourceMappingURL=TransferActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferActions.js","sources":["../../../src/components/TransferView/TransferActions.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState } from 'react'\nimport { Button } from '../Button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faUsers, faArrowsRepeat } from '@nethesis/nethesis-light-svg-icons'\nimport { faArrowsRepeat as faArrowsRepeatSolid } from '@nethesis/nethesis-solid-svg-icons'\nimport { sendDTMF } from '../../lib/webrtc/messages'\nimport { store, Dispatch } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport outgoingRingtone from '../../static/outgoing_ringtone'\nimport { RootState } from '../../store'\n\nexport const TransferActions: FC<TransferActionsProps> = () => {\n const dispatch = useDispatch<Dispatch>()\n const {\n transferSwitching,\n transferringName,\n transferringStartTime,\n displayName,\n startTime,\n number,\n } = useSelector((state: RootState) => state.currentCall)\n const [firstSwitch, setFirstSwitch] = useState<boolean>(true)\n const [currentCalls, setCurrentCalls] = useState<CurrentCallsTypes>({})\n const [frontName, setFrontName] = useState<string>('')\n const [backName, setBackName] = useState<string>('')\n\n // Cancels the current transfer through dtmfs\n function switchTransfer() {\n if (firstSwitch) {\n // Save current calls info\n setCurrentCalls({\n [displayName]: {\n name: displayName,\n time: startTime,\n },\n [transferringName]: {\n name: transferringName,\n time: transferringStartTime,\n },\n })\n // Set firstSwitch\n setFirstSwitch(false)\n }\n setFrontName(displayName)\n setBackName(transferringName)\n // Set transferSwitching\n dispatch.currentCall.updateTransferSwitching(true)\n // Start sending the DTMFs for transferring\n sendDTMF('*')\n const { audioPlayerPlaying } = store.getState().player\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n setTimeout(() => {\n // Send the second DTMF for transferring\n sendDTMF('4')\n dispatch.player.stopAudioPlayer()\n }, 500)\n }\n\n useEffect(() => {\n if (transferSwitching) {\n // Update transferringName\n dispatch.currentCall.updateCurrentCall({\n transferringName: currentCalls[frontName].name,\n transferringStartTime: currentCalls[frontName].time,\n })\n // Set transfer when displayName was already changed\n dispatch.currentCall.updateTransferSwitching(false)\n }\n }, [displayName])\n\n useEffect(() => {\n if (backName && currentCalls[backName]) {\n // Update transferringName\n dispatch.currentCall.updateCurrentCall({\n startTime: currentCalls[backName].time,\n })\n }\n }, [startTime])\n\n return (\n <div className='pi-grid pi-grid-cols-4 pi-auto-cols-max pi-gap-y-5 pi-justify-items-center pi-place-items-center pi-justify-center'>\n <div></div>\n <Button onClick={switchTransfer} active={transferSwitching} variant='default'>\n {transferSwitching ? (\n <FontAwesomeIcon size='xl' icon={faArrowsRepeatSolid} />\n ) : (\n <FontAwesomeIcon size='xl' icon={faArrowsRepeat} />\n )}\n </Button>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faUsers} />\n </Button>\n <div></div>\n </div>\n )\n}\n\ninterface TransferActionsProps {}\n\ninterface CurrentCallsTypes {\n [name: string]: {\n name: string\n time: string\n }\n}\n"],"names":["dispatch","useDispatch","_a","useSelector","state","currentCall","transferSwitching","transferringName","transferringStartTime","displayName","startTime","_b","useState","firstSwitch","setFirstSwitch","_c","currentCalls","setCurrentCalls","_d","frontName","setFrontName","_e","backName","setBackName","useEffect","updateCurrentCall","name","time","updateTransferSwitching","React","createElement","className","Button","onClick","sendDTMF","store","getState","player","audioPlayerPlaying","updateAndPlayAudioPlayer","src","outgoingRingtone","loop","setTimeout","stopAudioPlayer","active","variant","FontAwesomeIcon","size","icon","faArrowsRepeatSolid","faArrowsRepeat","faUsers"],"mappings":"wwBAcyD,WACvD,IAAMA,EAAWC,EAAAA,cACXC,EAOFC,EAAWA,aAAC,SAACC,GAAqB,OAAAA,EAAMC,WAAN,IANpCC,EAAiBJ,EAAAI,kBACjBC,EAAgBL,EAAAK,iBAChBC,0BACAC,EAAWP,EAAAO,YACXC,EAASR,EAAAQ,mBAGL,IAAAC,EAAgCC,EAAAA,UAAkB,GAAjDC,EAAWF,EAAA,GAAEG,EAAcH,EAAA,GAC5BI,EAAkCH,EAAAA,SAA4B,CAAE,GAA/DI,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GAC9BG,EAA4BN,EAAAA,SAAiB,IAA5CO,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACxBG,EAA0BT,EAAAA,SAAiB,IAA1CU,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GA6D5B,OArBAG,EAAAA,WAAU,WACJlB,IAEFN,EAASK,YAAYoB,kBAAkB,CACrClB,iBAAkBS,EAAaG,GAAWO,KAC1ClB,sBAAuBQ,EAAaG,GAAWQ,OAGjD3B,EAASK,YAAYuB,yBAAwB,GAEjD,GAAG,CAACnB,IAEJe,EAAAA,WAAU,WACJF,GAAYN,EAAaM,IAE3BtB,EAASK,YAAYoB,kBAAkB,CACrCf,UAAWM,EAAaM,GAAUK,MAGxC,GAAG,CAACjB,IAGFmB,EAAA,QAAAC,cAAA,MAAA,CAAKC,UAAU,sHACbF,UAAWC,cAAA,MAAA,MACXD,EAAAA,QAACC,cAAAE,EAAAA,QAAOC,QA7DZ,iBACMpB,IAEFI,IAAef,EAAA,CAAA,GACZO,GAAc,CACbiB,KAAMjB,EACNkB,KAAMjB,GAERR,EAACK,GAAmB,CAClBmB,KAAMnB,EACNoB,KAAMnB,OAIVM,GAAe,IAEjBM,EAAaX,GACbc,EAAYhB,GAEZP,EAASK,YAAYuB,yBAAwB,GAE7CM,EAAQA,SAAC,KACsBC,EAAKA,MAACC,WAAWC,OAAMC,oBAGpDtC,EAASqC,OAAOE,yBAAyB,CACvCC,IAAKC,EAAgB,QACrBC,MAAM,IAGVC,YAAW,WAETT,EAAQA,SAAC,KACTlC,EAASqC,OAAOO,iBACjB,GAAE,IACJ,EA0BoCC,OAAQvC,EAAmBwC,QAAQ,WACjExC,EACCuB,EAAC,QAAAC,cAAAiB,EAAeA,gBAAC,CAAAC,KAAK,KAAKC,KAAMC,EAAmBC,iBAEpDtB,EAAA,QAAAC,cAACiB,kBAAgB,CAAAC,KAAK,KAAKC,KAAME,EAAcA,kBAGnDtB,EAAAA,QAAAC,cAACE,EAAAA,OAAM,CAACc,QAAQ,WACdjB,UAACC,cAAAiB,EAAAA,gBAAgB,CAAAC,KAAK,KAAKC,KAAMG,EAAOA,WAE1CvB,EAAAA,QAAWC,cAAA,MAAA,MAGjB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/tslib/tslib.es6.js"),t=require("react"),n=require("../Button.js");require("../../node_modules/react-redux/es/index.js");var r=require("../../node_modules/@fortawesome/react-fontawesome/index.es.js"),i=require("../../lib/island/island.js"),a=require("./ListAvatar.js"),l=require("../../node_modules/@nethesis/nethesis-light-svg-icons/index.mjs.js"),s=require("../../lib/phone/call.js"),u=require("../../utils/genericFunctions/timestamp.js"),o=require("../Hangup.js"),c=require("../../node_modules/react-redux/es/hooks/useSelector.js"),f=require("../../node_modules/react-redux/es/hooks/useDispatch.js");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(t);exports.TransferListView=function(){var d=c.useSelector((function(e){return e.island})).isOpen,m=c.useSelector((function(e){return e.users})).endpoints,v=c.useSelector((function(e){return e.currentUser})).username,x=t.useState(!1),w=x[0],h=x[1],E=t.useState([]),b=E[0],g=E[1],N=t.useRef(""),j=t.useState(),_=j[0],C=j[1],y=t.useRef(null),T=t.useState(!1),L=T[0],q=T[1],S=t.useState(10),k=S[0],A=S[1],F=t.useState(""),I=F[0],z=F[1],B=f.useDispatch(),W=c.useSelector((function(e){return e.currentCall})),P=W.displayName,V=W.number,D=W.startTime;function H(e){return v&&delete e[v],Object.values(e).filter((function(e){return e.endpoints.extension.find((function(e){return e.id.toLowerCase().startsWith(N.current.toLowerCase())}))||e.username.toLowerCase().startsWith(N.current.toLowerCase())||e.name.toLowerCase().startsWith(N.current.toLowerCase())}))}return t.useEffect((function(){m&&v&&(g(H(m)),h(!0))}),[m,v]),t.useEffect((function(){var e,t,n=function(){var e,t,n;q(!!(y.current&&y.current.scrollTop>3)),y.current&&(null===(e=y.current)||void 0===e?void 0:e.offsetHeight)+(null===(t=y.current)||void 0===t?void 0:t.scrollTop)>=(null===(n=y.current)||void 0===n?void 0:n.scrollHeight)-10&&A((function(e){return e+10}))};return d?null===(e=y.current)||void 0===e||e.addEventListener("scroll",n):null===(t=y.current)||void 0===t||t.removeEventListener("scroll",n),function(){var e;return null===(e=y.current)||void 0===e?void 0:e.removeEventListener("scroll",n)}}),[d]),t.useEffect((function(){z("")}),[N.current]),p.default.createElement(p.default.Fragment,null,d?p.default.createElement("div",{className:"pi-relative pi-flex pi-flex-col pi-gap-7"},p.default.createElement("div",{className:"pi-flex pi-gap-4"},p.default.createElement(n.Button,{variant:"transparent",onClick:i.backToCallView},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowLeft})),p.default.createElement("input",{"data-stop-propagation":!0,type:"text",onChange:function(e){N.current=e.currentTarget.value,m&&g(H(m)),/^[0-9*#+]+$/.test(N.current)?C(!0):C(!1)},value:N.current,autoFocus:!0,className:"pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0"})),p.default.createElement("div",{style:{height:"272px"},ref:y,className:"pi-relative pi-w-full pi-flex pi-flex-col pi-gap-2 pi-overflow-y-auto pi-overflow-x-hidden pi-custom-scrollbar"},L&&p.default.createElement("div",{style:{right:"35px",left:"35px"},className:"pi-fixed pi-z-10 pi-h-6 pi-bg-gradient-to-b pi-from-black pi-to-transparent pi-pointer-events-none"}),_&&0===b.length&&p.default.createElement("div",{className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1"},p.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},p.default.createElement(a.default,null),p.default.createElement("div",{style:{maxWidth:"146px"},className:"pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold"},N.current)),p.default.createElement("div",{className:"pi-flex pi-gap-3.5"},p.default.createElement(n.Button,{variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowUpToLine})),p.default.createElement(n.Button,{onClick:function(){return s.blindTransfer(N.current)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faPhone})))),b&&b.slice(0,k).map((function(t,i){return p.default.createElement("div",{key:i,className:"pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1"},p.default.createElement("div",{className:"pi-flex pi-items-center pi-gap-4"},p.default.createElement(a.default,{username:t.username,status:t.mainPresence}),p.default.createElement("div",{style:{maxWidth:"146px"},className:"pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold"},t.name)),p.default.createElement("div",{className:"pi-flex pi-gap-3.5"},p.default.createElement(n.Button,{active:t.username===I,onClick:function(){return z(t.username)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faArrowUpToLine})),p.default.createElement(n.Button,{onClick:function(){return function(t){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return[4,s.attendedTransfer(t.endpoints.mainextension[0].id)];case 1:return e.sent()&&(B.island.setIslandView("call"),B.currentCall.updateCurrentCall({username:t.username,displayName:t.name,number:t.endpoints.mainextension[0].id,startTime:"".concat(u.getTimestampInSeconds()),transferring:!0,transferringName:P,transferringNumber:V,transferringStartTime:D})),[2]}}))}))}(t)},variant:"default"},p.default.createElement(r.FontAwesomeIcon,{size:"xl",icon:l.faPhone}))))})),w&&0===b.length&&!_&&p.default.createElement("p",{className:"pi-font-sans pi-font-bold pi-w-full pi-flex pi-justify-center pi-text-sm"},"No users found.")),p.default.createElement(o.default,{isDestination:""!==I,clickCallback:function(){return e.__awaiter(this,void 0,void 0,(function(){return e.__generator(this,(function(e){switch(e.label){case 0:return I?[4,s.blindTransfer(m&&m[I].endpoints.mainextension[0].id||"")]:[3,2];case 1:!0===e.sent()&&(B.alerts.setAlert("call_transfered"),B.island.setIslandView("call"),setTimeout((function(){B.alerts.removeAlert("call_transfered")}),4e3)),e.label=2;case 2:return[2]}}))}))}})):p.default.createElement("div",{className:"pi-font-medium pi-text-base pi-font-sans"},"Transfer"))};
|
|
2
|
+
//# sourceMappingURL=TransferList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferList.js","sources":["../../../src/components/TransferView/TransferList.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type FC, useEffect, useState, FormEvent, useRef } from 'react'\nimport { Button } from '../Button'\nimport { RootState } from '../../store'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { backToCallView } from '../../lib/island/island'\nimport ListAvatar from './ListAvatar'\nimport {\n faArrowUpToLine,\n faPhone as faPhoneLight,\n faArrowLeft,\n} from '@nethesis/nethesis-light-svg-icons'\nimport { UserEndpointsTypes, UsersEndpointsTypes } from '../../types'\nimport { blindTransfer, attendedTransfer } from '../../lib/phone/call'\nimport { Dispatch } from '../../store'\nimport { getTimestampInSeconds } from '../../utils/genericFunctions/timestamp'\nimport Hangup from '../Hangup'\n\nconst USERS_NUMBER_PER_PAGE = 10\nconst SHOW_LIST_GRADIENT_DISTANCE = 3\n\nexport const TransferListView: FC<TransferListViewProps> = () => {\n const { isOpen } = useSelector((state: RootState) => state.island)\n const { endpoints } = useSelector((state: RootState) => state.users)\n const { username } = useSelector((state: RootState) => state.currentUser)\n const [loaded, setLoaded] = useState<boolean>(false)\n const [listUsers, setListUsers] = useState<UserEndpointsTypes[]>([])\n const searchValue = useRef<string>('')\n const [showCustomUser, setShowCustomUser] = useState<boolean>()\n const relativeRef = useRef<HTMLDivElement>(null)\n const [showGradient, setShowGradient] = useState<boolean>(false)\n const [showingUsers, setShowingUsers] = useState<number>(USERS_NUMBER_PER_PAGE)\n const [transferDestination, setTransferDestination] = useState<string>('')\n const dispatch = useDispatch<Dispatch>()\n const { displayName, number, startTime } = useSelector((state: RootState) => state.currentCall)\n\n function handleChange(event: FormEvent<HTMLInputElement>) {\n // Update search value\n searchValue.current = event.currentTarget.value\n // Filter the users list\n endpoints && setListUsers(filterUsers(endpoints))\n // Check if custom user to call must be visible\n if (/^[0-9*#+]+$/.test(searchValue.current)) {\n setShowCustomUser(true)\n } else {\n setShowCustomUser(false)\n }\n }\n\n function filterUsers(endpoints: UsersEndpointsTypes) {\n // Remove the currentUser from the list\n username && delete endpoints[username]\n // Filter the users\n return Object.values(endpoints).filter(\n (userEndpoints: UserEndpointsTypes) =>\n userEndpoints.endpoints.extension.find((extension) =>\n extension.id.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n ) ||\n userEndpoints.username.toLowerCase().startsWith(searchValue.current.toLowerCase()) ||\n userEndpoints.name.toLowerCase().startsWith(searchValue.current.toLowerCase()),\n )\n }\n\n async function handleHangupAndTransfer() {\n // Manage blind transfer and hangup\n if (transferDestination) {\n const transfered = await blindTransfer(\n (endpoints && endpoints[transferDestination].endpoints.mainextension[0].id) || '',\n )\n if (transfered === true) {\n dispatch.alerts.setAlert('call_transfered')\n dispatch.island.setIslandView('call')\n setTimeout(() => {\n dispatch.alerts.removeAlert('call_transfered')\n }, 4000)\n }\n }\n }\n\n async function handleAttendedTransfer(userEndpoints: UserEndpointsTypes) {\n const transferring = await attendedTransfer(userEndpoints.endpoints.mainextension[0].id)\n if (transferring) {\n dispatch.island.setIslandView('call')\n // Force current call to achieve the expected behavior\n dispatch.currentCall.updateCurrentCall({\n username: userEndpoints.username,\n displayName: userEndpoints.name,\n number: userEndpoints.endpoints.mainextension[0].id,\n startTime: `${getTimestampInSeconds()}`,\n transferring: true,\n transferringName: displayName,\n transferringNumber: number,\n transferringStartTime: startTime,\n })\n }\n }\n\n // Initialize users list\n useEffect(() => {\n if (endpoints && username) {\n setListUsers(filterUsers(endpoints))\n setLoaded(true)\n }\n }, [endpoints, username])\n\n useEffect(() => {\n // Handle users list scrolling\n const handleScroll = () => {\n setShowGradient(\n relativeRef.current && relativeRef.current.scrollTop > SHOW_LIST_GRADIENT_DISTANCE\n ? true\n : false,\n )\n // Manage scroll to bottom\n if (\n relativeRef.current &&\n relativeRef.current?.offsetHeight + relativeRef.current?.scrollTop >=\n relativeRef.current?.scrollHeight - 10\n ) {\n // Improve showing users\n setShowingUsers((state) => state + USERS_NUMBER_PER_PAGE)\n }\n }\n // Manage expansion and collapsing\n if (isOpen) {\n relativeRef.current?.addEventListener('scroll', handleScroll)\n } else {\n relativeRef.current?.removeEventListener('scroll', handleScroll)\n }\n return () => relativeRef.current?.removeEventListener('scroll', handleScroll)\n }, [isOpen])\n\n // Reset transfer destination value when search value changes\n useEffect(() => {\n setTransferDestination('')\n }, [searchValue.current])\n\n return (\n <>\n {isOpen ? (\n <div className='pi-relative pi-flex pi-flex-col pi-gap-7'>\n <div className='pi-flex pi-gap-4'>\n <Button variant='transparent' onClick={backToCallView}>\n <FontAwesomeIcon size='xl' icon={faArrowLeft} />\n </Button>\n <input\n data-stop-propagation={true}\n type='text'\n onChange={handleChange}\n value={searchValue.current}\n autoFocus\n className='pi-w-full pi-rounded-full pi-bg-black pi-border-2 pi-border-emerald-500 active:pi-border-emerald-500 focus:pi-border-emerald-500 pi-text-white pi-font-sans pi-font-light pi-text-xl pi-text-center pi-px-2 focus:pi-outline-0 focus:pi-ring-0'\n />\n </div>\n <div\n style={{ height: '272px' }}\n ref={relativeRef}\n className='pi-relative pi-w-full pi-flex pi-flex-col pi-gap-2 pi-overflow-y-auto pi-overflow-x-hidden pi-custom-scrollbar'\n >\n {showGradient && (\n <div\n style={{ right: '35px', left: '35px' }}\n className='pi-fixed pi-z-10 pi-h-6 pi-bg-gradient-to-b pi-from-black pi-to-transparent pi-pointer-events-none'\n ></div>\n )}\n {/* The custom user */}\n {showCustomUser && listUsers.length === 0 && (\n <div className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'>\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {searchValue.current}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button variant='default'>\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => blindTransfer(searchValue.current)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n )}\n {/* The users list */}\n {listUsers &&\n listUsers.slice(0, showingUsers).map((userEndpoints, i) => (\n <div\n key={i}\n className='pi-flex pi-items-center pi-w-full pi-justify-between pi-px-3 pi-py-1'\n >\n <div className='pi-flex pi-items-center pi-gap-4'>\n <ListAvatar\n username={userEndpoints.username}\n status={userEndpoints.mainPresence}\n />\n <div\n style={{ maxWidth: '146px' }}\n className='pi-h-fit pi-max-w-40 pi-font-sans pi-truncate pi-text-sm pi-font-bold'\n >\n {userEndpoints.name}\n </div>\n </div>\n <div className='pi-flex pi-gap-3.5'>\n <Button\n active={userEndpoints.username === transferDestination}\n onClick={() => setTransferDestination(userEndpoints.username)}\n variant='default'\n >\n <FontAwesomeIcon size='xl' icon={faArrowUpToLine} />\n </Button>\n <Button onClick={() => handleAttendedTransfer(userEndpoints)} variant='default'>\n <FontAwesomeIcon size='xl' icon={faPhoneLight} />\n </Button>\n </div>\n </div>\n ))}\n {loaded && listUsers.length === 0 && !showCustomUser && (\n <p className='pi-font-sans pi-font-bold pi-w-full pi-flex pi-justify-center pi-text-sm'>\n No users found.\n </p>\n )}\n </div>\n <Hangup\n isDestination={transferDestination !== ''}\n clickCallback={handleHangupAndTransfer}\n />\n </div>\n ) : (\n <div className='pi-font-medium pi-text-base pi-font-sans'>Transfer</div>\n )}\n </>\n )\n}\n\ninterface TransferListViewProps {}\n"],"names":["isOpen","useSelector","state","island","endpoints","users","username","currentUser","_a","useState","loaded","setLoaded","_b","listUsers","setListUsers","searchValue","useRef","_c","showCustomUser","setShowCustomUser","relativeRef","_d","showGradient","setShowGradient","_e","showingUsers","setShowingUsers","_f","transferDestination","setTransferDestination","dispatch","useDispatch","_g","currentCall","displayName","number","startTime","filterUsers","Object","values","filter","userEndpoints","extension","find","id","toLowerCase","startsWith","current","name","useEffect","handleScroll","scrollTop","offsetHeight","scrollHeight","addEventListener","removeEventListener","React","createElement","Fragment","className","Button","variant","onClick","backToCallView","FontAwesomeIcon","size","icon","faArrowLeft","type","onChange","event","currentTarget","value","test","autoFocus","style","height","ref","right","left","length","ListAvatar","maxWidth","faArrowUpToLine","blindTransfer","faPhoneLight","faPhone","slice","map","i","key","status","mainPresence","active","attendedTransfer","mainextension","sent","setIslandView","updateCurrentCall","concat","getTimestampInSeconds","transferring","transferringName","transferringNumber","transferringStartTime","handleAttendedTransfer","Hangup","isDestination","clickCallback","alerts","setAlert","setTimeout","removeAlert"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/framer-motion/dist/
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/framer-motion/dist/framer-motion.js"),require("../node_modules/react-redux/es/index.js");var r=require("../node_modules/react-redux/es/hooks/useSelector.js"),t=require("../_virtual/framer-motion.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=o(e);exports.default=function(e){var o=e.children,n=e.forView,u=r.useSelector((function(e){return e.island})).view;return i.default.createElement(t.framerMotion.exports.motion.div,{animate:u===n?{opacity:1}:{opacity:0},transition:{duration:.1}},o&&o)};
|
|
2
2
|
//# sourceMappingURL=ViewsTransition.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewsTransition.js","sources":["../../src/components/ViewsTransition.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC } from 'react'\nimport { motion } from 'framer-motion/dist/
|
|
1
|
+
{"version":3,"file":"ViewsTransition.js","sources":["../../src/components/ViewsTransition.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, type FC } from 'react'\nimport { motion } from 'framer-motion/dist/framer-motion'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\n\nconst ViewsTransition: FC<ViewTransitionTypes> = ({ children, forView }) => {\n const { view } = useSelector((state: RootState) => state.island)\n return (\n <motion.div\n animate={view === forView ? { opacity: 1 } : { opacity: 0 }}\n transition={{ duration: 0.1 }}\n >\n {children && children}\n </motion.div>\n )\n}\n\nexport default ViewsTransition\n\ninterface ViewTransitionTypes {\n children: ReactNode\n forView: string\n}\n"],"names":["_a","children","forView","view","useSelector","state","island","React","createElement","motion","div","animate","opacity","transition","duration"],"mappings":"+ZAQiD,SAACA,OAAEC,EAAQD,EAAAC,SAAEC,EAAOF,EAAAE,QAC3DC,EAASC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,eACzD,OACEC,EAAC,QAAAC,cAAAC,EAAAA,aAAAA,QAAAA,OAAOC,IAAG,CACTC,QAASR,IAASD,EAAU,CAAEU,QAAS,GAAM,CAAEA,QAAS,GACxDC,WAAY,CAAEC,SAAU,KAEvBb,GAAYA,EAGnB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),r=require("../lib/webrtc/janus.js"),a=require("../lib/webrtc/messages.js"),n=require("../store/index.js"),o=require("../lib/devices/devices.js"),s=require("../lib/phone/call.js"),i=require("../lib/webrtc/connection.js"),c=require("../static/outgoing_ringtone.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e),g=r.default;exports.WebRTC=function(r){var u=r.hostName,p=r.sipExten,b=r.sipSecret,f=r.children,m=l.useDispatch(),w=e.useRef(null);return e.useEffect((function(){o.checkMediaPermissions()}),[]),e.useEffect((function(){var e;return g.init({debug:"all",dependencies:g.useDefaultDependencies({adapter:t.default}),callback:function(){var e=new g({server:"https://".concat(u,"/janus"),success:function(){e.attach&&e.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){e&&(m.webrtc.updateWebRTC({sipcall:e}),a.register(p,b),e&&g.log&&g.log("SIP plugin attached! ("+e.getPlugin()+", id = )"))},error:function(e){g.error&&(g.error(" -- Error attaching plugin..."),g.error(e))},consentDialog:function(e){g.log&&g.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){g.log&&g.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){n.store.getState().webrtc.sipcall&&g.log&&g.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,t){g.log&&g.log("Janus "+(t?"started":"stopped")+" receiving our "+e)},slowLink:function(e,t){e?g.warn&&g.warn("SLOW link: several missing packets from janus (".concat(t,")")):g.warn&&g.warn("SLOW link: janus is not receiving all your packets (".concat(t,")"))},onmessage:function(e,t){var r=n.store.getState().webrtc.sipcall;g.debug&&(g.debug(" ::: Got a message :::"),g.debug(JSON.stringify(e)));var o=e.error;if(null==o||null==o){var i=e.result;if(null!=i&&void 0!==i.event&&null!==i.event)switch(i.event){case"registration_failed":g.error&&g.error("Registration failed: "+i.code+" "+i.reason);break;case"unregistered":g.log&&g.log("Successfully un-registered as "+i.username+"!");break;case"registered":g.log&&g.log("Successfully registered as "+i.username+"!"),n.store.getState().webrtc.registered||n.store.dispatch.webrtc.updateWebRTC({registered:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"registering":g.log&&g.log("janus registering");break;case"calling":m.currentCall.checkOutgoingUpdate({outgoingWebRTC:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"ringing":n.store.getState().player.audioPlayerPlaying||m.player.updateAndPlayAudioPlayer({src:c.default,loop:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"progress":g.log&&g.log("There's early media from "+i.username+", wairing for the call!"),null!=t&&a.handleRemote(t),m.webrtc.updateLastActivity((new Date).getTime());break;case"incomingcall":m.webrtc.updateWebRTC({jsepGlobal:t}),m.currentCall.checkIncomingUpdateAndPlay({incomingWebRTC:!0}),g.log&&g.log("Incoming call from "+i.username+"!"),m.webrtc.updateLastActivity((new Date).getTime());break;case"accepted":g.log&&g.log(i.username+" accepted the call!"),t&&a.handleRemote(t),m.currentCall.checkAcceptedUpdate({acceptedWebRTC:!0}),n.store.dispatch.player.stopAudioPlayer(),m.webrtc.updateLastActivity((new Date).getTime());break;case"hangup":s.hangupCurrentCall(),r.hangup(),g.log&&g.log("Call hung up ("+i.code+" "+i.reason+")!"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react");require("../node_modules/react-redux/es/index.js");var t=require("../node_modules/webrtc-adapter/src/js/adapter_core.js"),r=require("../lib/webrtc/janus.js"),a=require("../lib/webrtc/messages.js"),n=require("../store/index.js"),o=require("../lib/devices/devices.js"),s=require("../lib/phone/call.js"),i=require("../lib/webrtc/connection.js"),c=require("../static/outgoing_ringtone.js"),l=require("../node_modules/react-redux/es/hooks/useDispatch.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e),g=r.default;exports.WebRTC=function(r){var u=r.hostName,p=r.sipExten,b=r.sipSecret,f=r.children,m=l.useDispatch(),w=e.useRef(null);return e.useEffect((function(){o.checkMediaPermissions()}),[]),e.useEffect((function(){var e;return g.init({debug:"all",dependencies:g.useDefaultDependencies({adapter:t.default}),callback:function(){var e=new g({server:"https://".concat(u,"/janus"),success:function(){e.attach&&e.attach({plugin:"janus.plugin.sip",opaqueId:"sebastian_"+(new Date).getTime(),success:function(e){e&&(m.webrtc.updateWebRTC({sipcall:e}),a.register(p,b),e&&g.log&&g.log("SIP plugin attached! ("+e.getPlugin()+", id = )"))},error:function(e){g.error&&(g.error(" -- Error attaching plugin..."),g.error(e))},consentDialog:function(e){g.log&&g.log("janus consentDialog (on: ".concat(e,")"))},webrtcState:function(e){g.log&&g.log("Janus says our WebRTC PeerConnection is "+(e?"up":"down")+" now")},iceState:function(e){n.store.getState().webrtc.sipcall&&g.log&&g.log('ICE state of PeerConnection of handle has changed to "'.concat(e,'"'))},mediaState:function(e,t){g.log&&g.log("Janus "+(t?"started":"stopped")+" receiving our "+e)},slowLink:function(e,t){e?g.warn&&g.warn("SLOW link: several missing packets from janus (".concat(t,")")):g.warn&&g.warn("SLOW link: janus is not receiving all your packets (".concat(t,")"))},onmessage:function(e,t){var r=n.store.getState().webrtc.sipcall;g.debug&&(g.debug(" ::: Got a message :::"),g.debug(JSON.stringify(e)));var o=e.error;if(null==o||null==o){var i=e.result;if(null!=i&&void 0!==i.event&&null!==i.event)switch(i.event){case"registration_failed":g.error&&g.error("Registration failed: "+i.code+" "+i.reason);break;case"unregistered":g.log&&g.log("Successfully un-registered as "+i.username+"!");break;case"registered":g.log&&g.log("Successfully registered as "+i.username+"!"),n.store.getState().webrtc.registered||n.store.dispatch.webrtc.updateWebRTC({registered:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"registering":g.log&&g.log("janus registering");break;case"calling":m.currentCall.checkOutgoingUpdate({outgoingWebRTC:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"ringing":n.store.getState().player.audioPlayerPlaying||m.player.updateAndPlayAudioPlayer({src:c.default,loop:!0}),m.webrtc.updateLastActivity((new Date).getTime());break;case"progress":g.log&&g.log("There's early media from "+i.username+", wairing for the call!"),null!=t&&a.handleRemote(t),m.webrtc.updateLastActivity((new Date).getTime());break;case"incomingcall":m.webrtc.updateWebRTC({jsepGlobal:t}),m.currentCall.checkIncomingUpdateAndPlay({incomingWebRTC:!0}),g.log&&g.log("Incoming call from "+i.username+"!"),m.webrtc.updateLastActivity((new Date).getTime());break;case"accepted":g.log&&g.log(i.username+" accepted the call!"),t&&a.handleRemote(t),m.currentCall.checkAcceptedUpdate({acceptedWebRTC:!0}),n.store.dispatch.player.stopAudioPlayer(),m.webrtc.updateLastActivity((new Date).getTime());break;case"hangup":s.hangupCurrentCall(),r.hangup(),g.log&&g.log("Call hung up ("+i.code+" "+i.reason+")!"),m.webrtc.updateLastActivity((new Date).getTime())}}else n.store.getState().webrtc.registered?(r&&r.hangup(),n.store.dispatch.player.stopAudioPlayer()):g.log&&g.log("User is not registered")},onlocalstream:function(e){g.debug&&(g.debug(" ::: Got a local stream :::"),g.debug(e))},onremotestream:function(e){g.debug&&g.debug(" ::: Got a remote stream :::"),n.store.dispatch.player.stopAudioPlayer();var t=n.store.getState().player.remoteAudio,r=n.store.getState().player.remoteVideo,a=e.getAudioTracks(),o=e.getVideoTracks();if(g.attachMediaStream){if(a&&a.length>0){var s=new MediaStream(a);g.attachMediaStream(t,s),n.store.dispatch.webrtc.updateRemoteAudioStream(s)}else console.warn("No audio tracks on remote stream");if(o&&o.length>0){var i=new MediaStream(o);g.attachMediaStream(r,i)}else console.warn("No video tracks on remote stream")}},oncleanup:function(){g.log&&g.log(" ::: janus Got a cleanup notification :::")},detached:function(){g.warn&&g.warn("SIP plugin handle detached from the plugin itself")}})},error:function(e){g.log&&g.log("error",e),m.alerts.setAlert("webrtc_down")},destroyed:function(){m.webrtc.updateWebRTC({destroyed:!0}),m.alerts.setAlert("webrtc_down")}})}}),e=n.store.getState().webrtc.CHECK_INTERVAL_TIME,w.current||(w.current=setInterval((function(){return i.webrtcCheck((function(){a.register(p,b)}))}),e)),function(){a.unregister(),clearInterval(w.current)}}),[]),d.default.createElement(d.default.Fragment,null,f)};
|
|
2
2
|
//# sourceMappingURL=WebRTC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebRTC.js","sources":["../../src/components/WebRTC.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport adapter from 'webrtc-adapter'\nimport JanusLib from '../lib/webrtc/janus.js'\nimport type { JanusTypes } from '../types'\nimport { register, unregister, handleRemote } from '../lib/webrtc/messages'\nimport { store, type RootState } from '../store'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { hangupCurrentCall } from '../lib/phone/call'\nimport { webrtcCheck } from '../lib/webrtc/connection'\nimport outgoingRingtone from '../static/outgoing_ringtone'\n\ninterface WebRTCProps {\n children: ReactNode\n sipExten: string\n sipSecret: string\n hostName: string\n}\n\nconst Janus: JanusTypes = JanusLib\n\nexport const WebRTC: FC<WebRTCProps> = ({ hostName, sipExten, sipSecret, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n // Initialize janus check interval id\n const janusCheckInterval = useRef<any>(null)\n\n // check audio and video permissions\n useEffect(() => {\n checkMediaPermissions()\n }, [])\n\n useEffect(() => {\n const setupDeps = () =>\n Janus.useDefaultDependencies({\n adapter,\n })\n\n function initWebRTC() {\n Janus.init({\n debug: 'all',\n dependencies: setupDeps(),\n callback: function () {\n const janusInstance = new Janus({\n server: `https://${hostName}/janus`,\n success: () => {\n if (janusInstance.attach) {\n // Use Janus Sip Plugin\n janusInstance.attach({\n plugin: 'janus.plugin.sip',\n opaqueId: 'sebastian' + '_' + new Date().getTime(),\n success: function (pluginHandle) {\n // Set sipcall to the store\n if (pluginHandle) {\n dispatch.webrtc.updateWebRTC({\n sipcall: pluginHandle,\n })\n // Register the extension to the server\n register(sipExten, sipSecret)\n if (pluginHandle) {\n if (Janus.log)\n Janus.log(\n 'SIP plugin attached! (' + pluginHandle.getPlugin() + ', id = ' + ')',\n )\n }\n }\n },\n error: function (error) {\n if (Janus.error) {\n Janus.error(' -- Error attaching plugin...')\n Janus.error(error)\n }\n // reject()\n },\n consentDialog: function (on) {\n if (Janus.log) Janus.log(`janus consentDialog (on: ${on})`)\n },\n webrtcState: function (on) {\n if (Janus.log)\n Janus.log(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n iceState: function (newState) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n\n if (sipcall) {\n if (Janus.log)\n Janus.log(\n `ICE state of PeerConnection of handle has changed to \"${newState}\"`,\n )\n }\n },\n mediaState: function (medium, on) {\n if (Janus.log)\n Janus.log(\n 'Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium,\n )\n },\n slowLink: function (uplink, count) {\n if (uplink) {\n if (Janus.warn)\n Janus.warn(`SLOW link: several missing packets from janus (${count})`)\n } else {\n if (Janus.warn)\n Janus.warn(`SLOW link: janus is not receiving all your packets (${count})`)\n }\n },\n onmessage: function (msg, jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n\n if (Janus.debug) {\n Janus.debug(' ::: Got a message :::')\n Janus.debug(JSON.stringify(msg))\n }\n\n // Handle errors in message\n var error = msg['error']\n if (error != null && error != undefined) {\n if (!store.getState().webrtc.registered) {\n if (Janus.log) Janus.log('User is not registered')\n } else {\n // Reset status\n sipcall && sipcall.hangup()\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n return\n }\n // Manage events\n var result = msg['result']\n if (\n result !== null &&\n result !== undefined &&\n result['event'] !== undefined &&\n result['event'] !== null\n ) {\n // get event\n var event = result['event']\n\n //switch event\n switch (event) {\n case 'registration_failed':\n if (Janus.error)\n Janus.error(\n 'Registration failed: ' + result['code'] + ' ' + result['reason'],\n )\n break\n\n case 'unregistered':\n if (Janus.log)\n Janus.log('Successfully un-registered as ' + result['username'] + '!')\n // registered = false\n break\n\n case 'registered':\n if (Janus.log)\n Janus.log('Successfully registered as ' + result['username'] + '!')\n if (!store.getState().webrtc.registered) {\n store.dispatch.webrtc.updateWebRTC({\n registered: true,\n })\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'registering':\n if (Janus.log) Janus.log('janus registering')\n break\n\n // This event arrive on outgoing call start\n case 'calling':\n // Number and display name are updated inside socket\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingWebRTC: true,\n })\n\n // Update webrtc last activity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n // After an outgoing call start on 180 code, it means\n // ...that the local outgoing ringtone must be player\n case 'ringing':\n const { audioPlayerPlaying } = store.getState().player\n\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n // Update audio player and start playing\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n // After an outgoing call start on 183 code, it means\n // ...that the outgoing ringtone arrives from the stream\n // ...playing the local outgoing ringtone isn't needed\n case 'progress':\n if (Janus.log)\n Janus.log(\n \"There's early media from \" +\n result['username'] +\n ', wairing for the call!',\n )\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'incomingcall':\n dispatch.webrtc.updateWebRTC({ jsepGlobal: jsep })\n\n // Number and display name are updated inside socket\n dispatch.currentCall.checkIncomingUpdateAndPlay({\n incomingWebRTC: true,\n })\n\n if (Janus.log) Janus.log('Incoming call from ' + result['username'] + '!')\n // Update the webrtc last activity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'accepted':\n if (Janus.log) Janus.log(result['username'] + ' accepted the call!')\n if (jsep) {\n handleRemote(jsep)\n }\n // Set current call accepted\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedWebRTC: true,\n })\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'hangup':\n hangupCurrentCall()\n sipcall.hangup()\n // if (\n // result['code'] === 486 &&\n // result['event'] === 'hangup' &&\n // result['reason'] === 'Busy Here'\n // ) {\n // dispatch.player.updateAudioSource({\n // src: busyRingtone,\n // })\n // dispatch.player.playAudio()\n // }\n if (Janus.log)\n Janus.log(\n 'Call hung up (' + result['code'] + ' ' + result['reason'] + ')!',\n )\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n // stopScreenSharingI()\n break\n\n default:\n break\n }\n }\n },\n onlocalstream: function (stream) {\n // const localVideoElement = store.getState().player.localVideo\n if (Janus.debug) {\n Janus.debug(' ::: Got a local stream :::')\n Janus.debug(stream)\n }\n // if (Janus.attachMediaStream) Janus.attachMediaStream(localVideoElement, stream)\n /* IS VIDEO ENABLED ? */\n // var videoTracks = stream.getVideoTracks()\n /* */\n },\n onremotestream: function (stream: MediaStream) {\n if (Janus.debug) {\n Janus.debug(' ::: Got a remote stream :::')\n }\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n\n // Get remote audio and video elements\n const remoteAudioElement = store.getState().player.remoteAudio\n const remoteVideoElement = store.getState().player.remoteVideo\n\n // Get audio and video from stream\n const audioTracks: MediaStreamTrack[] = stream.getAudioTracks()\n const videoTracks: MediaStreamTrack[] = stream.getVideoTracks()\n\n if (Janus.attachMediaStream) {\n // Initialize the new media stream for remote audio\n if (audioTracks && audioTracks.length > 0) {\n const audioStream: MediaStream = new MediaStream(audioTracks)\n Janus.attachMediaStream(remoteAudioElement, audioStream)\n\n // Save the new audio stream to the store\n store.dispatch.webrtc.updateRemoteAudioStream(audioStream)\n } else {\n console.warn('No audio tracks on remote stream')\n }\n // Initialize the new media stream for remote video\n if (videoTracks && videoTracks.length > 0) {\n const videoStream: MediaStream = new MediaStream(videoTracks)\n Janus.attachMediaStream(remoteVideoElement, videoStream)\n } else {\n console.warn('No video tracks on remote stream')\n }\n }\n },\n oncleanup: function () {\n if (Janus.log) Janus.log(' ::: janus Got a cleanup notification :::')\n },\n detached: function () {\n if (Janus.warn) Janus.warn('SIP plugin handle detached from the plugin itself')\n },\n })\n }\n },\n error: (err: any) => {\n if (Janus.log) Janus.log('error', err)\n // Activate webrtc connection alert\n dispatch.alerts.setAlert('webrtc_down')\n },\n destroyed: () => {\n // Set webrtc destroyed status\n dispatch.webrtc.updateWebRTC({\n destroyed: true,\n })\n // Activate webrtc connection alert\n dispatch.alerts.setAlert('webrtc_down')\n },\n })\n },\n })\n }\n\n // Initializes the webrtc registration check interval\n function startWebrtcCheck() {\n const { CHECK_INTERVAL_TIME } = store.getState().webrtc\n if (!janusCheckInterval.current) {\n // Initialize the interval that check the webrtc\n janusCheckInterval.current = setInterval(\n () =>\n webrtcCheck(() => {\n // Do the register as callback of webrtc check\n register(sipExten, sipSecret)\n }),\n CHECK_INTERVAL_TIME,\n )\n }\n }\n\n // Start webrtc initialization and handlers\n initWebRTC()\n // Start the check of webrtc activity\n startWebrtcCheck()\n\n return () => {\n // Unregister from janus\n unregister()\n // Stop Janus check interval\n clearInterval(janusCheckInterval.current)\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["Janus","JanusLib","_a","hostName","sipExten","sipSecret","children","dispatch","useDispatch","janusCheckInterval","useRef","useEffect","checkMediaPermissions","CHECK_INTERVAL_TIME","init","debug","dependencies","useDefaultDependencies","adapter","callback","janusInstance","server","concat","success","attach","plugin","opaqueId","Date","getTime","pluginHandle","webrtc","updateWebRTC","sipcall","register","log","getPlugin","error","consentDialog","on","webrtcState","iceState","newState","store","getState","mediaState","medium","slowLink","uplink","count","warn","onmessage","msg","jsep","JSON","stringify","undefined","result","registered","updateLastActivity","currentCall","checkOutgoingUpdate","outgoingWebRTC","player","audioPlayerPlaying","updateAndPlayAudioPlayer","src","outgoingRingtone","loop","handleRemote","jsepGlobal","checkIncomingUpdateAndPlay","incomingWebRTC","checkAcceptedUpdate","acceptedWebRTC","stopAudioPlayer","hangupCurrentCall","hangup","onlocalstream","stream","onremotestream","remoteAudioElement","remoteAudio","remoteVideoElement","remoteVideo","audioTracks","getAudioTracks","videoTracks","getVideoTracks","attachMediaStream","length","audioStream","MediaStream","updateRemoteAudioStream","console","videoStream","oncleanup","detached","err","alerts","setAlert","destroyed","current","setInterval","webrtcCheck","unregister","clearInterval","React","createElement","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"WebRTC.js","sources":["../../src/components/WebRTC.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { type ReactNode, FC, useEffect, useState, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Dispatch } from '../store'\nimport adapter from 'webrtc-adapter'\nimport JanusLib from '../lib/webrtc/janus.js'\nimport type { JanusTypes } from '../types'\nimport { register, unregister, handleRemote } from '../lib/webrtc/messages'\nimport { store, type RootState } from '../store'\nimport { checkMediaPermissions } from '../lib/devices/devices'\nimport { hangupCurrentCall } from '../lib/phone/call'\nimport { webrtcCheck } from '../lib/webrtc/connection'\nimport outgoingRingtone from '../static/outgoing_ringtone'\n\ninterface WebRTCProps {\n children: ReactNode\n sipExten: string\n sipSecret: string\n hostName: string\n}\n\nconst Janus: JanusTypes = JanusLib\n\nexport const WebRTC: FC<WebRTCProps> = ({ hostName, sipExten, sipSecret, children }) => {\n const dispatch = useDispatch<Dispatch>()\n\n // Initialize janus check interval id\n const janusCheckInterval = useRef<any>(null)\n\n // check audio and video permissions\n useEffect(() => {\n checkMediaPermissions()\n }, [])\n\n useEffect(() => {\n const setupDeps = () =>\n Janus.useDefaultDependencies({\n adapter,\n })\n\n function initWebRTC() {\n Janus.init({\n debug: 'all',\n dependencies: setupDeps(),\n callback: function () {\n const janusInstance = new Janus({\n server: `https://${hostName}/janus`,\n success: () => {\n if (janusInstance.attach) {\n // Use Janus Sip Plugin\n janusInstance.attach({\n plugin: 'janus.plugin.sip',\n opaqueId: 'sebastian' + '_' + new Date().getTime(),\n success: function (pluginHandle) {\n // Set sipcall to the store\n if (pluginHandle) {\n dispatch.webrtc.updateWebRTC({\n sipcall: pluginHandle,\n })\n // Register the extension to the server\n register(sipExten, sipSecret)\n if (pluginHandle) {\n if (Janus.log)\n Janus.log(\n 'SIP plugin attached! (' + pluginHandle.getPlugin() + ', id = ' + ')',\n )\n }\n }\n },\n error: function (error) {\n if (Janus.error) {\n Janus.error(' -- Error attaching plugin...')\n Janus.error(error)\n }\n // reject()\n },\n consentDialog: function (on) {\n if (Janus.log) Janus.log(`janus consentDialog (on: ${on})`)\n },\n webrtcState: function (on) {\n if (Janus.log)\n Janus.log(\n 'Janus says our WebRTC PeerConnection is ' + (on ? 'up' : 'down') + ' now',\n )\n },\n iceState: function (newState) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n\n if (sipcall) {\n if (Janus.log)\n Janus.log(\n `ICE state of PeerConnection of handle has changed to \"${newState}\"`,\n )\n }\n },\n mediaState: function (medium, on) {\n if (Janus.log)\n Janus.log(\n 'Janus ' + (on ? 'started' : 'stopped') + ' receiving our ' + medium,\n )\n },\n slowLink: function (uplink, count) {\n if (uplink) {\n if (Janus.warn)\n Janus.warn(`SLOW link: several missing packets from janus (${count})`)\n } else {\n if (Janus.warn)\n Janus.warn(`SLOW link: janus is not receiving all your packets (${count})`)\n }\n },\n onmessage: function (msg, jsep) {\n const { sipcall }: { sipcall: any } = store.getState().webrtc\n\n if (Janus.debug) {\n Janus.debug(' ::: Got a message :::')\n Janus.debug(JSON.stringify(msg))\n }\n\n // Handle errors in message\n var error = msg['error']\n if (error != null && error != undefined) {\n if (!store.getState().webrtc.registered) {\n if (Janus.log) Janus.log('User is not registered')\n } else {\n // Reset status\n sipcall && sipcall.hangup()\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n }\n return\n }\n // Manage events\n var result = msg['result']\n if (\n result !== null &&\n result !== undefined &&\n result['event'] !== undefined &&\n result['event'] !== null\n ) {\n // get event\n var event = result['event']\n\n //switch event\n switch (event) {\n case 'registration_failed':\n if (Janus.error)\n Janus.error(\n 'Registration failed: ' + result['code'] + ' ' + result['reason'],\n )\n break\n\n case 'unregistered':\n if (Janus.log)\n Janus.log('Successfully un-registered as ' + result['username'] + '!')\n // registered = false\n break\n\n case 'registered':\n if (Janus.log)\n Janus.log('Successfully registered as ' + result['username'] + '!')\n if (!store.getState().webrtc.registered) {\n store.dispatch.webrtc.updateWebRTC({\n registered: true,\n })\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'registering':\n if (Janus.log) Janus.log('janus registering')\n break\n\n // This event arrive on outgoing call start\n case 'calling':\n // Number and display name are updated inside socket\n dispatch.currentCall.checkOutgoingUpdate({\n outgoingWebRTC: true,\n })\n\n // Update webrtc last activity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n // After an outgoing call start on 180 code, it means\n // ...that the local outgoing ringtone must be player\n case 'ringing':\n const { audioPlayerPlaying } = store.getState().player\n\n // Check if the local audio is already playing and start playing\n if (!audioPlayerPlaying) {\n // Update audio player and start playing\n dispatch.player.updateAndPlayAudioPlayer({\n src: outgoingRingtone,\n loop: true,\n })\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n // After an outgoing call start on 183 code, it means\n // ...that the outgoing ringtone arrives from the stream\n // ...playing the local outgoing ringtone isn't needed\n case 'progress':\n if (Janus.log)\n Janus.log(\n \"There's early media from \" +\n result['username'] +\n ', wairing for the call!',\n )\n if (jsep !== null && jsep !== undefined) {\n handleRemote(jsep)\n }\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'incomingcall':\n dispatch.webrtc.updateWebRTC({ jsepGlobal: jsep })\n\n // Number and display name are updated inside socket\n dispatch.currentCall.checkIncomingUpdateAndPlay({\n incomingWebRTC: true,\n })\n\n if (Janus.log) Janus.log('Incoming call from ' + result['username'] + '!')\n // Update the webrtc last activity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'accepted':\n if (Janus.log) Janus.log(result['username'] + ' accepted the call!')\n if (jsep) {\n handleRemote(jsep)\n }\n // Set current call accepted\n dispatch.currentCall.checkAcceptedUpdate({\n acceptedWebRTC: true,\n })\n\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n break\n\n case 'hangup':\n hangupCurrentCall()\n sipcall.hangup()\n // if (\n // result['code'] === 486 &&\n // result['event'] === 'hangup' &&\n // result['reason'] === 'Busy Here'\n // ) {\n // dispatch.player.updateAudioSource({\n // src: busyRingtone,\n // })\n // dispatch.player.playAudio()\n // }\n if (Janus.log)\n Janus.log(\n 'Call hung up (' + result['code'] + ' ' + result['reason'] + ')!',\n )\n // Update webrtc lastActivity time\n dispatch.webrtc.updateLastActivity(new Date().getTime())\n // stopScreenSharingI()\n break\n\n default:\n break\n }\n }\n },\n onlocalstream: function (stream) {\n // const localVideoElement = store.getState().player.localVideo\n if (Janus.debug) {\n Janus.debug(' ::: Got a local stream :::')\n Janus.debug(stream)\n }\n // if (Janus.attachMediaStream) Janus.attachMediaStream(localVideoElement, stream)\n /* IS VIDEO ENABLED ? */\n // var videoTracks = stream.getVideoTracks()\n /* */\n },\n onremotestream: function (stream: MediaStream) {\n if (Janus.debug) {\n Janus.debug(' ::: Got a remote stream :::')\n }\n // Stop the local audio element ringing\n store.dispatch.player.stopAudioPlayer()\n\n // Get remote audio and video elements\n const remoteAudioElement = store.getState().player.remoteAudio\n const remoteVideoElement = store.getState().player.remoteVideo\n\n // Get audio and video from stream\n const audioTracks: MediaStreamTrack[] = stream.getAudioTracks()\n const videoTracks: MediaStreamTrack[] = stream.getVideoTracks()\n\n if (Janus.attachMediaStream) {\n // Initialize the new media stream for remote audio\n if (audioTracks && audioTracks.length > 0) {\n const audioStream: MediaStream = new MediaStream(audioTracks)\n Janus.attachMediaStream(remoteAudioElement, audioStream)\n\n // Save the new audio stream to the store\n store.dispatch.webrtc.updateRemoteAudioStream(audioStream)\n } else {\n console.warn('No audio tracks on remote stream')\n }\n // Initialize the new media stream for remote video\n if (videoTracks && videoTracks.length > 0) {\n const videoStream: MediaStream = new MediaStream(videoTracks)\n Janus.attachMediaStream(remoteVideoElement, videoStream)\n } else {\n console.warn('No video tracks on remote stream')\n }\n }\n },\n oncleanup: function () {\n if (Janus.log) Janus.log(' ::: janus Got a cleanup notification :::')\n },\n detached: function () {\n if (Janus.warn) Janus.warn('SIP plugin handle detached from the plugin itself')\n },\n })\n }\n },\n error: (err: any) => {\n if (Janus.log) Janus.log('error', err)\n // Activate webrtc connection alert\n dispatch.alerts.setAlert('webrtc_down')\n },\n destroyed: () => {\n // Set webrtc destroyed status\n dispatch.webrtc.updateWebRTC({\n destroyed: true,\n })\n // Activate webrtc connection alert\n dispatch.alerts.setAlert('webrtc_down')\n },\n })\n },\n })\n }\n\n // Initializes the webrtc registration check interval\n function startWebrtcCheck() {\n const { CHECK_INTERVAL_TIME } = store.getState().webrtc\n if (!janusCheckInterval.current) {\n // Initialize the interval that check the webrtc\n janusCheckInterval.current = setInterval(\n () =>\n webrtcCheck(() => {\n // Do the register as callback of webrtc check\n register(sipExten, sipSecret)\n }),\n CHECK_INTERVAL_TIME,\n )\n }\n }\n\n // Start webrtc initialization and handlers\n initWebRTC()\n // Start the check of webrtc activity\n startWebrtcCheck()\n\n return () => {\n // Unregister from janus\n unregister()\n // Stop Janus check interval\n clearInterval(janusCheckInterval.current)\n }\n }, [])\n\n return <>{children}</>\n}\n"],"names":["Janus","JanusLib","_a","hostName","sipExten","sipSecret","children","dispatch","useDispatch","janusCheckInterval","useRef","useEffect","checkMediaPermissions","CHECK_INTERVAL_TIME","init","debug","dependencies","useDefaultDependencies","adapter","callback","janusInstance","server","concat","success","attach","plugin","opaqueId","Date","getTime","pluginHandle","webrtc","updateWebRTC","sipcall","register","log","getPlugin","error","consentDialog","on","webrtcState","iceState","newState","store","getState","mediaState","medium","slowLink","uplink","count","warn","onmessage","msg","jsep","JSON","stringify","undefined","result","registered","updateLastActivity","currentCall","checkOutgoingUpdate","outgoingWebRTC","player","audioPlayerPlaying","updateAndPlayAudioPlayer","src","outgoingRingtone","loop","handleRemote","jsepGlobal","checkIncomingUpdateAndPlay","incomingWebRTC","checkAcceptedUpdate","acceptedWebRTC","stopAudioPlayer","hangupCurrentCall","hangup","onlocalstream","stream","onremotestream","remoteAudioElement","remoteAudio","remoteVideoElement","remoteVideo","audioTracks","getAudioTracks","videoTracks","getVideoTracks","attachMediaStream","length","audioStream","MediaStream","updateRemoteAudioStream","console","videoStream","oncleanup","detached","err","alerts","setAlert","destroyed","current","setInterval","webrtcCheck","unregister","clearInterval","React","createElement","Fragment"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/customHooks/useEventListener.js"),r=require("../utils/genericFunctions/eventDispatch.js")
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("../utils/customHooks/useEventListener.js"),r=require("../utils/genericFunctions/eventDispatch.js");require("../node_modules/react-redux/es/index.js");var s=require("../lib/phone/call.js"),n=require("../node_modules/react-redux/es/hooks/useSelector.js");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("../node_modules/react-redux/es/components/Context.js"),require("../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js"),require("../node_modules/react-redux/node_modules/react-is/index.js");var o=u(e);exports.CallEvents=function(){var e=n.useSelector((function(e){return e.webrtc})).sipcall;return t.useEventListener("phone-island-call-start",(function(e){s.callNumber(e.number)})),e&&o.default.createElement(o.default.Fragment,null)},exports.dispatchOutgoingCallStarted=function(e,t){void 0===e&&(e=""),void 0===t&&(t="");var s={name:e,number:t};r.eventDispatch("phone-island-outgoing-call-started",s)};
|
|
2
2
|
//# sourceMappingURL=CallEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport {
|
|
1
|
+
{"version":3,"file":"CallEvents.js","sources":["../../src/events/CallEvents.tsx"],"sourcesContent":["// Copyright (C) 2022 Nethesis S.r.l.\n// SPDX-License-Identifier: AGPL-3.0-or-later\n\nimport React, { FC } from 'react'\nimport { useEventListener, eventDispatch } from '../utils'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../store'\nimport { callNumber } from '../lib/phone/call'\n\nexport const CallEvents: FC = () => {\n const { sipcall }: any = useSelector((state: RootState) => state.webrtc)\n /**\n * Event listner for phone-island-call-start event\n */\n useEventListener('phone-island-call-start', (data) => {\n callNumber(data.number)\n })\n return sipcall && <></>\n}\n\n// !TODO add phone-island-outgoing-call-started phone-island-outgoing-call-ended\n\n/**\n * Dispatch the phone-island-outgoing-call-started event\n */\nexport function dispatchOutgoingCallStarted(name: string = '', number: string = '') {\n const data: OutgoingCallStartedTypes = {\n name,\n number,\n }\n eventDispatch('phone-island-outgoing-call-started', data)\n}\n\nexport interface OutgoingCallStartedTypes {\n name: string\n number: string\n}\n"],"names":["sipcall","useSelector","state","webrtc","useEventListener","data","callNumber","number","React","createElement","Fragment","name","eventDispatch"],"mappings":"sqBAS8B,WACpB,IAAAA,EAAiBC,eAAY,SAACC,GAAqB,OAAAA,EAAMC,kBAOjE,OAHAC,mBAAiB,2BAA2B,SAACC,GAC3CC,aAAWD,EAAKE,OAClB,IACOP,GAAWQ,EAAAA,QAAAC,cAAAD,EAAAA,QAAAE,SAAA,KACpB,sCAOgB,SAA4BC,EAAmBJ,QAAnB,IAAAI,IAAAA,EAAiB,SAAE,IAAAJ,IAAAA,EAAmB,IAChF,IAAMF,EAAiC,CACrCM,KAAIA,EACJJ,OAAMA,GAERK,gBAAc,qCAAsCP,EACtD"}
|
package/dist/index.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-left-0{left:0}.pi-top-0{top:0}.pi-z-1000{z-index:1000}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-col-start-auto{grid-column-start:auto}.pi-mb-6{margin-bottom:1.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-full{width:100%}.pi-min-w-full{min-width:100%}.pi-shrink-0{flex-shrink:0}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-5{gap:1.25rem}.pi-gap-4{gap:1rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-7{gap:1.75rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-p-6{padding:1.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-pt-3{padding-top:.75rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.hover\:pi-border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:pi-bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.pi-pointer-events-none{pointer-events:none}.pi-pointer-events-auto{pointer-events:auto}.pi-fixed{position:fixed}.pi-absolute{position:absolute}.pi-relative{position:relative}.pi-left-0{left:0}.pi-top-0{top:0}.pi-bottom-0{bottom:0}.pi-right-0{right:0}.pi-z-1000{z-index:1000}.-pi-z-10{z-index:-10}.pi-z-10{z-index:10}.pi-col-start-auto{grid-column-start:auto}.pi-mb-6{margin-bottom:1.5rem}.-pi-mt-10{margin-top:-2.5rem}.pi-inline-block{display:inline-block}.pi-flex{display:flex}.pi-grid{display:grid}.pi-hidden{display:none}.pi-h-6{height:1.5rem}.pi-h-12{height:3rem}.pi-h-8{height:2rem}.pi-h-3{height:.75rem}.pi-h-fit{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content}.pi-min-h-full{min-height:100%}.pi-w-6{width:1.5rem}.pi-w-12{width:3rem}.pi-w-fit{width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.pi-w-0\.5{width:.125rem}.pi-w-0{width:0}.pi-w-full{width:100%}.pi-w-3{width:.75rem}.pi-min-w-full{min-width:100%}.pi-flex-shrink-0,.pi-shrink-0{flex-shrink:0}.pi-rotate-135{--tw-rotate:135deg}.pi-rotate-135,.pi-transform{-webkit-transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@-webkit-keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes pi-ping{75%,to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.pi-animate-ping{-webkit-animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite;animation:pi-ping 1s cubic-bezier(0,0,.2,1) infinite}.pi-cursor-pointer{cursor:pointer}.pi-auto-cols-max{grid-auto-columns:-webkit-max-content;grid-auto-columns:max-content}.pi-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.pi-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.pi-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.pi-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.pi-flex-col{flex-direction:column}.pi-place-items-center{place-items:center}.pi-content-center{align-content:center}.pi-items-center{align-items:center}.pi-justify-center{justify-content:center}.pi-justify-between{justify-content:space-between}.pi-justify-items-end{justify-items:end}.pi-justify-items-center{justify-items:center}.pi-gap-1{gap:.25rem}.pi-gap-4{gap:1rem}.pi-gap-5{gap:1.25rem}.pi-gap-3\.5{gap:.875rem}.pi-gap-3{gap:.75rem}.pi-gap-7{gap:1.75rem}.pi-gap-2{gap:.5rem}.pi-gap-y-5{row-gap:1.25rem}.pi-gap-y-6{row-gap:1.5rem}.pi-overflow-hidden{overflow:hidden}.pi-overflow-y-auto{overflow-y:auto}.pi-overflow-x-hidden{overflow-x:hidden}.pi-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pi-whitespace-nowrap{white-space:nowrap}.pi-rounded-sm{border-radius:.125rem}.pi-rounded-full{border-radius:9999px}.pi-rounded-md{border-radius:.375rem}.pi-rounded-2xl{border-radius:1rem}.pi-rounded-xl{border-radius:.75rem}.pi-border{border-width:1px}.pi-border-4{border-width:4px}.pi-border-2{border-width:2px}.pi-border-transparent{border-color:transparent}.pi-border-gray-700{--tw-border-opacity:1;border-color:rgb(55 65 81/var(--tw-border-opacity))}.pi-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.pi-border-orange-600{--tw-border-opacity:1;border-color:rgb(234 88 12/var(--tw-border-opacity))}.pi-border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity))}.pi-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.pi-border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.pi-bg-emerald-600{--tw-bg-opacity:1;background-color:rgb(5 150 105/var(--tw-bg-opacity))}.pi-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity))}.pi-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity))}.pi-bg-transparent{background-color:initial}.pi-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.pi-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.pi-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.pi-bg-sky-600{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity))}.pi-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity))}.pi-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.pi-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.pi-bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.pi-from-black{--tw-gradient-from:#000;--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.pi-to-transparent{--tw-gradient-to:transparent}.pi-p-6{padding:1.5rem}.pi-px-3{padding-left:.75rem;padding-right:.75rem}.pi-py-2{padding-bottom:.5rem;padding-top:.5rem}.pi-px-6{padding-left:1.5rem;padding-right:1.5rem}.pi-px-2{padding-left:.5rem;padding-right:.5rem}.pi-py-1{padding-bottom:.25rem;padding-top:.25rem}.pi-pt-3{padding-top:.75rem}.pi-text-center{text-align:center}.pi-font-sans{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.pi-text-sm{font-size:.875rem;line-height:1.25rem}.pi-text-base{font-size:1rem;line-height:1.5rem}.pi-text-xs{font-size:.75rem;line-height:1rem}.pi-text-2xl{font-size:1.5rem;line-height:2rem}.pi-text-xl{font-size:1.25rem;line-height:1.75rem}.pi-font-light{font-weight:300}.pi-font-medium{font-weight:500}.pi-font-bold{font-weight:700}.pi-leading-4{line-height:1rem}.pi-tracking-wide{letter-spacing:.025em}.pi-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.pi-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.pi-opacity-60{opacity:.6}.pi-outline-none{outline:2px solid transparent;outline-offset:2px}.pi-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-transform,-webkit-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.pi-duration-200{transition-duration:.2s}.hover\:pi-border-gray-500:hover{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.hover\:pi-bg-red-700:hover{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.hover\:pi-bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:pi-bg-gray-500:hover{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.hover\:pi-bg-sky-700:hover{--tw-bg-opacity:1;background-color:rgb(3 105 161/var(--tw-bg-opacity))}.focus\:pi-z-20:focus{z-index:20}.focus\:pi-border-emerald-500:focus{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.focus\:pi-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:pi-outline-0:focus{outline-width:0}.focus\:pi-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-0:focus,.focus\:pi-ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:pi-ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:pi-ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity))}.focus\:pi-ring-green-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.focus\:pi-ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity))}.focus\:pi-ring-sky-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(14 165 233/var(--tw-ring-opacity))}.focus\:pi-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus\:pi-ring-offset-black:focus{--tw-ring-offset-color:#000}.focus\:pi-ring-offset-white:focus{--tw-ring-offset-color:#fff}.active\:pi-border-emerald-500:active{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity))}.disabled\:pi-opacity-75:disabled{opacity:.75}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),r=require("../../store/index.js"),i=require("../../_virtual/
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("../../node_modules/mic-check/lib/index.js");var e=require("../webrtc/janus.js"),r=require("../../store/index.js"),i=require("../../_virtual/index8.js"),o=e.default;exports.checkMediaPermissions=function(){i.__exports.requestMediaPermissions({audio:!0,video:!1}).then((function(){})).catch((function(e){var s=e.type;e.name,e.message,s===i.__exports.MediaPermissionsErrorType.SystemPermissionDenied?(r.store.dispatch.alerts.setAlert("browser_permissions"),o.error&&o.error("WebRTC: browser does not have permission to access camera or microphone")):s===i.__exports.MediaPermissionsErrorType.UserPermissionDenied?(r.store.dispatch.alerts.setAlert("user_permissions"),o.error&&o.error("WebRTC: user didn't allow app to access camera or microphone")):s===i.__exports.MediaPermissionsErrorType.CouldNotStartVideoSource?(r.store.dispatch.alerts.setAlert("busy_camera"),o.error&&o.error("WebRTC: camera is in use by another application (Zoom, Skype) or browser tab (Google Meet, Messenger Video)")):(r.store.dispatch.alerts.setAlert("unknown_media_permissions"),o.error&&o.error("WebRTC: can't access audio or camere on this device. unknown error"))}))},exports.getSupportedDevices=function(e){var r,i,s=!1,t=!1,n=!1,a=!1;r=function(){var r={audio:s,audioCap:n,video:t,videoCap:a};o.log&&o.log("supportedDevices=",r),e()},i=[],navigator.mediaDevices.enumerateDevices().then((function(e){e.forEach((function(e){var r=!1;i.forEach((function(i){i.deviceId===e.deviceId&&i.kind===e.kind&&(r=!0)})),r||("videoinput"!==e.kind||a||(a=!0),"audioinput"!==e.kind||n||(n=!0),"audioinput"===e.kind&&(s=!0),e.kind,"videoinput"===e.kind&&(t=!0),i.push(e))})),r&&r()}))};
|
|
2
2
|
//# sourceMappingURL=devices.js.map
|