@nethesis/phone-island 0.7.78 → 0.7.80
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.d.ts +1 -0
- package/dist/App.js +1 -1
- package/dist/App.js.map +1 -1
- package/dist/_virtual/_rollupPluginBabelHelpers.js +1 -1
- package/dist/_virtual/floating-ui.dom.esm.js +2 -0
- package/dist/_virtual/floating-ui.dom.esm.js.map +1 -0
- package/dist/_virtual/index.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/_virtual/index9.js +2 -0
- package/dist/_virtual/index9.js.map +1 -0
- package/dist/_virtual/react-tooltip.min.cjs.js +2 -0
- package/dist/_virtual/react-tooltip.min.cjs.js.map +1 -0
- package/dist/components/Button.js +1 -1
- package/dist/components/Button.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/Avatar.js +1 -1
- package/dist/components/CallView/Avatar.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/DisplayName.js +1 -1
- package/dist/components/CallView/DisplayName.js.map +1 -1
- package/dist/components/CallView/index.js +1 -1
- package/dist/components/CallView/index.js.map +1 -1
- package/dist/components/Events.d.ts +1 -0
- package/dist/components/Events.js +1 -1
- package/dist/components/Events.js.map +1 -1
- package/dist/components/Hangup.d.ts +1 -0
- package/dist/components/Hangup.js +1 -1
- package/dist/components/Hangup.js.map +1 -1
- package/dist/components/Island.js +1 -1
- package/dist/components/Island.js.map +1 -1
- package/dist/components/KeypadView/index.js +1 -1
- package/dist/components/KeypadView/index.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 +2 -2
- package/dist/components/TransferView/ListAvatar.js +1 -1
- package/dist/components/TransferView/ListAvatar.js.map +1 -1
- package/dist/components/TransferView/TransferActions.js +1 -1
- package/dist/components/TransferView/TransferActions.js.map +1 -1
- package/dist/components/TransferView/TransferList.js +1 -1
- package/dist/components/TransferView/TransferList.js.map +1 -1
- package/dist/components/WebRTC.d.ts +2 -0
- package/dist/components/WebRTC.js +1 -1
- package/dist/components/WebRTC.js.map +1 -1
- package/dist/events/CallEvents.d.ts +3 -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/phone/call.d.ts +2 -2
- package/dist/lib/phone/call.js +1 -1
- package/dist/lib/phone/call.js.map +1 -1
- package/dist/lib/webrtc/messages.d.ts +6 -1
- package/dist/lib/webrtc/messages.js +1 -1
- package/dist/lib/webrtc/messages.js.map +1 -1
- package/dist/models/currentCall.d.ts +67 -0
- package/dist/models/currentCall.js +1 -1
- package/dist/models/currentCall.js.map +1 -1
- package/dist/models/motions.js +1 -1
- package/dist/models/motions.js.map +1 -1
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js +1 -1
- package/dist/node_modules/@emotion/stylis/dist/stylis.browser.esm.js.map +1 -1
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs.js +2 -0
- package/dist/node_modules/@floating-ui/core/dist/floating-ui.core.browser.min.mjs.js.map +1 -0
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js +2 -0
- package/dist/node_modules/@floating-ui/dom/dist/floating-ui.dom.esm.js.map +1 -0
- 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/@rematch/core/dist/core.esm.js +1 -1
- package/dist/node_modules/@rematch/core/dist/core.esm.js.map +1 -1
- package/dist/node_modules/bowser/es5.js +1 -1
- package/dist/node_modules/bowser/es5.js.map +1 -1
- package/dist/node_modules/classnames/index.js +7 -0
- package/dist/node_modules/classnames/index.js.map +1 -0
- package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/has-cors.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseqs.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/parseuri.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/contrib/yeast.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/globalThis.browser.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transport.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/index.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/polling.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket-constructor.browser.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/websocket.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/transports/xmlhttprequest.browser.js.map +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js +1 -1
- package/dist/node_modules/engine.io-client/build/esm/util.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/commons.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/commons.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/decodePacket.browser.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/encodePacket.browser.js.map +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/index.js +1 -1
- package/dist/node_modules/engine.io-parser/build/esm/index.js.map +1 -1
- package/dist/node_modules/framer-motion/dist/framer-motion.js +1 -1
- package/dist/node_modules/framer-motion/dist/framer-motion.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/cjs/react-is.development.js +9 -1
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js +9 -1
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/hoist-non-react-statics/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/immer/dist/immer.esm.mjs.js +1 -1
- package/dist/node_modules/immer/dist/immer.esm.mjs.js.map +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js +1 -1
- package/dist/node_modules/js-base64/base64.mjs.js.map +1 -1
- package/dist/node_modules/mic-check/lib/index.js +1 -1
- package/dist/node_modules/mic-check/lib/requestMediaPermissions.js +1 -1
- package/dist/node_modules/mic-check/lib/requestMediaPermissions.js.map +1 -1
- package/dist/node_modules/moment/moment.js +2 -2
- package/dist/node_modules/moment/moment.js.map +1 -1
- package/dist/node_modules/prop-types/checkPropTypes.js +1 -1
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +1 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -1
- package/dist/node_modules/prop-types/index.js +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +9 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +9 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js +9 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +9 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/react-is/index.js.map +1 -1
- package/dist/node_modules/react-moment/dist/index.js +2 -2
- package/dist/node_modules/react-moment/dist/index.js.map +1 -1
- package/dist/node_modules/react-redux/es/components/Context.js +1 -1
- package/dist/node_modules/react-redux/es/components/Context.js.map +1 -1
- package/dist/node_modules/react-redux/es/components/Provider.js +1 -1
- package/dist/node_modules/react-redux/es/components/Provider.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useDispatch.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useDispatch.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useReduxContext.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useReduxContext.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useSelector.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useSelector.js.map +1 -1
- package/dist/node_modules/react-redux/es/hooks/useStore.js +1 -1
- package/dist/node_modules/react-redux/es/hooks/useStore.js.map +1 -1
- package/dist/node_modules/react-redux/es/utils/Subscription.js +1 -1
- package/dist/node_modules/react-redux/es/utils/Subscription.js.map +1 -1
- package/dist/node_modules/react-redux/es/utils/batch.js +1 -1
- package/dist/node_modules/react-redux/es/utils/batch.js.map +1 -1
- package/dist/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js +1 -1
- package/dist/node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js.map +1 -1
- package/dist/node_modules/react-redux/es/utils/useSyncExternalStore.js +1 -1
- package/dist/node_modules/react-redux/es/utils/useSyncExternalStore.js.map +1 -1
- package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.development.js +10 -1
- package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.development.js.map +1 -1
- package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js +10 -1
- package/dist/node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js.map +1 -1
- package/dist/node_modules/react-redux/node_modules/react-is/index.js +1 -1
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js +2 -0
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.cjs.js.map +1 -0
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.css.js +2 -0
- package/dist/node_modules/react-tooltip/dist/react-tooltip.min.css.js.map +1 -0
- package/dist/node_modules/redux/es/redux.js +1 -1
- package/dist/node_modules/redux/es/redux.js.map +1 -1
- package/dist/node_modules/sdp/sdp.js +1 -1
- package/dist/node_modules/sdp/sdp.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/index.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/index.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/manager.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/manager.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/socket.js.map +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js +1 -1
- package/dist/node_modules/socket.io-client/build/esm/url.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/binary.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/binary.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/index.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/index.js.map +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js +1 -1
- package/dist/node_modules/socket.io-parser/build/esm/is-binary.js.map +1 -1
- package/dist/node_modules/style-inject/dist/style-inject.es.js +2 -0
- package/dist/node_modules/style-inject/dist/style-inject.es.js.map +1 -0
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js +1 -1
- package/dist/node_modules/styled-components/dist/styled-components.browser.esm.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.js +1 -1
- package/dist/node_modules/tslib/tslib.es6.js.map +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/node_modules/webrtc-adapter/src/js/adapter_core.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/adapter_core.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/adapter_factory.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/chrome_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/getdisplaymedia.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/chrome/getusermedia.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/common_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/firefox_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/getdisplaymedia.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/getusermedia.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/firefox/getusermedia.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/safari/safari_shim.js.map +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/utils.js +1 -1
- package/dist/node_modules/webrtc-adapter/src/js/utils.js.map +1 -1
- package/dist/services/astproxy.js +1 -1
- package/dist/services/astproxy.js.map +1 -1
- package/dist/styles/Island.styles.js +1 -1
- package/dist/styles/Island.styles.js.map +1 -1
- package/package.json +3 -2
- package/dist/node_modules/engine.io-client/build/esm/index.js +0 -2
- package/dist/node_modules/engine.io-client/build/esm/index.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var r=require("../../_virtual/_rollupPluginBabelHelpers.js"),e=require("../../_virtual/sdp.js");!function(e){var t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(r){return r.trim().split("\n").map((function(r){return r.trim()}))},t.splitSections=function(r){return r.split("\nm=").map((function(r,e){return(e>0?"m="+r:r).trim()+"\r\n"}))},t.getDescription=function(r){var e=t.splitSections(r);return e&&e[0]},t.getMediaSections=function(r){var e=t.splitSections(r);return e.shift(),e},t.matchPrefix=function(r,e){return t.splitLines(r).filter((function(r){return 0===r.indexOf(e)}))},t.parseCandidate=function(r){for(var e,t={foundation:(e=0===r.indexOf("a=candidate:")?r.substring(12).split(" "):r.substring(10).split(" "))[0],component:{1:"rtp",2:"rtcp"}[e[1]]||e[1],protocol:e[2].toLowerCase(),priority:parseInt(e[3],10),ip:e[4],address:e[4],port:parseInt(e[5],10),type:e[7]},a=8;a<e.length;a+=2)switch(e[a]){case"raddr":t.relatedAddress=e[a+1];break;case"rport":t.relatedPort=parseInt(e[a+1],10);break;case"tcptype":t.tcpType=e[a+1];break;case"ufrag":t.ufrag=e[a+1],t.usernameFragment=e[a+1];break;default:void 0===t[e[a]]&&(t[e[a]]=e[a+1])}return t},t.writeCandidate=function(r){var e=[];e.push(r.foundation);var t=r.component;"rtp"===t?e.push(1):"rtcp"===t?e.push(2):e.push(t),e.push(r.protocol.toUpperCase()),e.push(r.priority),e.push(r.address||r.ip),e.push(r.port);var a=r.type;return e.push("typ"),e.push(a),"host"!==a&&r.relatedAddress&&r.relatedPort&&(e.push("raddr"),e.push(r.relatedAddress),e.push("rport"),e.push(r.relatedPort)),r.tcpType&&"tcp"===r.protocol.toLowerCase()&&(e.push("tcptype"),e.push(r.tcpType)),(r.usernameFragment||r.ufrag)&&(e.push("ufrag"),e.push(r.usernameFragment||r.ufrag)),"candidate:"+e.join(" ")},t.parseIceOptions=function(r){return r.substr(14).split(" ")},t.parseRtpMap=function(r){var e=r.substr(9).split(" "),t={payloadType:parseInt(e.shift(),10)};return e=e[0].split("/"),t.name=e[0],t.clockRate=parseInt(e[1],10),t.channels=3===e.length?parseInt(e[2],10):1,t.numChannels=t.channels,t},t.writeRtpMap=function(r){var e=r.payloadType;void 0!==r.preferredPayloadType&&(e=r.preferredPayloadType);var t=r.channels||r.numChannels||1;return"a=rtpmap:"+e+" "+r.name+"/"+r.clockRate+(1!==t?"/"+t:"")+"\r\n"},t.parseExtmap=function(r){var e=r.substr(9).split(" ");return{id:parseInt(e[0],10),direction:e[0].indexOf("/")>0?e[0].split("/")[1]:"sendrecv",uri:e[1]}},t.writeExtmap=function(r){return"a=extmap:"+(r.id||r.preferredId)+(r.direction&&"sendrecv"!==r.direction?"/"+r.direction:"")+" "+r.uri+"\r\n"},t.parseFmtp=function(r){for(var e,t={},a=r.substr(r.indexOf(" ")+1).split(";"),n=0;n<a.length;n++)t[(e=a[n].trim().split("="))[0].trim()]=e[1];return t},t.writeFmtp=function(r){var e="",t=r.payloadType;if(void 0!==r.preferredPayloadType&&(t=r.preferredPayloadType),r.parameters&&Object.keys(r.parameters).length){var a=[];Object.keys(r.parameters).forEach((function(e){void 0!==r.parameters[e]?a.push(e+"="+r.parameters[e]):a.push(e)})),e+="a=fmtp:"+t+" "+a.join(";")+"\r\n"}return e},t.parseRtcpFb=function(r){var e=r.substr(r.indexOf(" ")+1).split(" ");return{type:e.shift(),parameter:e.join(" ")}},t.writeRtcpFb=function(r){var e="",t=r.payloadType;return void 0!==r.preferredPayloadType&&(t=r.preferredPayloadType),r.rtcpFeedback&&r.rtcpFeedback.length&&r.rtcpFeedback.forEach((function(r){e+="a=rtcp-fb:"+t+" "+r.type+(r.parameter&&r.parameter.length?" "+r.parameter:"")+"\r\n"})),e},t.parseSsrcMedia=function(r){var e=r.indexOf(" "),t={ssrc:parseInt(r.substr(7,e-7),10)},a=r.indexOf(":",e);return a>-1?(t.attribute=r.substr(e+1,a-e-1),t.value=r.substr(a+1)):t.attribute=r.substr(e+1),t},t.parseSsrcGroup=function(r){var e=r.substr(13).split(" ");return{semantics:e.shift(),ssrcs:e.map((function(r){return parseInt(r,10)}))}},t.getMid=function(r){var e=t.matchPrefix(r,"a=mid:")[0];if(e)return e.substr(6)},t.parseFingerprint=function(r){var e=r.substr(14).split(" ");return{algorithm:e[0].toLowerCase(),value:e[1].toUpperCase()}},t.getDtlsParameters=function(r,e){return{role:"auto",fingerprints:t.matchPrefix(r+e,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(r,e){var t="a=setup:"+e+"\r\n";return r.fingerprints.forEach((function(r){t+="a=fingerprint:"+r.algorithm+" "+r.value+"\r\n"})),t},t.parseCryptoLine=function(r){var e=r.substr(9).split(" ");return{tag:parseInt(e[0],10),cryptoSuite:e[1],keyParams:e[2],sessionParams:e.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"===r.typeof(e.keyParams)?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(r){if(0!==r.indexOf("inline:"))return null;var e=r.substr(7).split("|");return{keyMethod:"inline",keySalt:e[0],lifeTime:e[1],mkiValue:e[2]?e[2].split(":")[0]:void 0,mkiLength:e[2]?e[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(r){return r.keyMethod+":"+r.keySalt+(r.lifeTime?"|"+r.lifeTime:"")+(r.mkiValue&&r.mkiLength?"|"+r.mkiValue+":"+r.mkiLength:"")},t.getCryptoParameters=function(r,e){return t.matchPrefix(r+e,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(r,e){var a=t.matchPrefix(r+e,"a=ice-ufrag:")[0],n=t.matchPrefix(r+e,"a=ice-pwd:")[0];return a&&n?{usernameFragment:a.substr(12),password:n.substr(10)}:null},t.writeIceParameters=function(r){var e="a=ice-ufrag:"+r.usernameFragment+"\r\na=ice-pwd:"+r.password+"\r\n";return r.iceLite&&(e+="a=ice-lite\r\n"),e},t.parseRtpParameters=function(r){for(var e={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},a=t.splitLines(r)[0].split(" "),n=3;n<a.length;n++){var s=a[n],i=t.matchPrefix(r,"a=rtpmap:"+s+" ")[0];if(i){var p=t.parseRtpMap(i),c=t.matchPrefix(r,"a=fmtp:"+s+" ");switch(p.parameters=c.length?t.parseFmtp(c[0]):{},p.rtcpFeedback=t.matchPrefix(r,"a=rtcp-fb:"+s+" ").map(t.parseRtcpFb),e.codecs.push(p),p.name.toUpperCase()){case"RED":case"ULPFEC":e.fecMechanisms.push(p.name.toUpperCase())}}}return t.matchPrefix(r,"a=extmap:").forEach((function(r){e.headerExtensions.push(t.parseExtmap(r))})),e},t.writeRtpDescription=function(r,e){var a="";a+="m="+r+" ",a+=e.codecs.length>0?"9":"0",a+=" UDP/TLS/RTP/SAVPF ",a+=e.codecs.map((function(r){return void 0!==r.preferredPayloadType?r.preferredPayloadType:r.payloadType})).join(" ")+"\r\n",a+="c=IN IP4 0.0.0.0\r\n",a+="a=rtcp:9 IN IP4 0.0.0.0\r\n",e.codecs.forEach((function(r){a+=t.writeRtpMap(r),a+=t.writeFmtp(r),a+=t.writeRtcpFb(r)}));var n=0;return e.codecs.forEach((function(r){r.maxptime>n&&(n=r.maxptime)})),n>0&&(a+="a=maxptime:"+n+"\r\n"),e.headerExtensions&&e.headerExtensions.forEach((function(r){a+=t.writeExtmap(r)})),a},t.parseRtpEncodingParameters=function(r){var e,a=[],n=t.parseRtpParameters(r),s=-1!==n.fecMechanisms.indexOf("RED"),i=-1!==n.fecMechanisms.indexOf("ULPFEC"),p=t.matchPrefix(r,"a=ssrc:").map((function(r){return t.parseSsrcMedia(r)})).filter((function(r){return"cname"===r.attribute})),c=p.length>0&&p[0].ssrc,o=t.matchPrefix(r,"a=ssrc-group:FID").map((function(r){return r.substr(17).split(" ").map((function(r){return parseInt(r,10)}))}));o.length>0&&o[0].length>1&&o[0][0]===c&&(e=o[0][1]),n.codecs.forEach((function(r){if("RTX"===r.name.toUpperCase()&&r.parameters.apt){var t={ssrc:c,codecPayloadType:parseInt(r.parameters.apt,10)};c&&e&&(t.rtx={ssrc:e}),a.push(t),s&&((t=JSON.parse(JSON.stringify(t))).fec={ssrc:c,mechanism:i?"red+ulpfec":"red"},a.push(t))}})),0===a.length&&c&&a.push({ssrc:c});var u=t.matchPrefix(r,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substr(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substr(5),10)*.95-16e3:void 0,a.forEach((function(r){r.maxBitrate=u}))),a},t.parseRtcpParameters=function(r){var e={},a=t.matchPrefix(r,"a=ssrc:").map((function(r){return t.parseSsrcMedia(r)})).filter((function(r){return"cname"===r.attribute}))[0];a&&(e.cname=a.value,e.ssrc=a.ssrc);var n=t.matchPrefix(r,"a=rtcp-rsize");e.reducedSize=n.length>0,e.compound=0===n.length;var s=t.matchPrefix(r,"a=rtcp-mux");return e.mux=s.length>0,e},t.writeRtcpParameters=function(r){var e="";return r.reducedSize&&(e+="a=rtcp-rsize\r\n"),r.mux&&(e+="a=rtcp-mux\r\n"),void 0!==r.ssrc&&r.cname&&(e+="a=ssrc:"+r.ssrc+" cname:"+r.cname+"\r\n"),e},t.parseMsid=function(r){var e,a=t.matchPrefix(r,"a=msid:");if(1===a.length)return{stream:(e=a[0].substr(7).split(" "))[0],track:e[1]};var n=t.matchPrefix(r,"a=ssrc:").map((function(r){return t.parseSsrcMedia(r)})).filter((function(r){return"msid"===r.attribute}));return n.length>0?{stream:(e=n[0].value.split(" "))[0],track:e[1]}:void 0},t.parseSctpDescription=function(r){var e,a=t.parseMLine(r),n=t.matchPrefix(r,"a=max-message-size:");n.length>0&&(e=parseInt(n[0].substr(19),10)),isNaN(e)&&(e=65536);var s=t.matchPrefix(r,"a=sctp-port:");if(s.length>0)return{port:parseInt(s[0].substr(12),10),protocol:a.fmt,maxMessageSize:e};var i=t.matchPrefix(r,"a=sctpmap:");if(i.length>0){var p=i[0].substr(10).split(" ");return{port:parseInt(p[0],10),protocol:p[1],maxMessageSize:e}}},t.writeSctpDescription=function(r,e){var t=[];return t="DTLS/SCTP"!==r.protocol?["m="+r.kind+" 9 "+r.protocol+" "+e.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+e.port+"\r\n"]:["m="+r.kind+" 9 "+r.protocol+" "+e.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+e.port+" "+e.protocol+" 65535\r\n"],void 0!==e.maxMessageSize&&t.push("a=max-message-size:"+e.maxMessageSize+"\r\n"),t.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(r,e,a){var n=void 0!==e?e:2;return"v=0\r\no="+(a||"thisisadapterortc")+" "+(r||t.generateSessionId())+" "+n+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(r,e){for(var a=t.splitLines(r),n=0;n<a.length;n++)switch(a[n]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return a[n].substr(2)}return e?t.getDirection(e):"sendrecv"},t.getKind=function(r){return t.splitLines(r)[0].split(" ")[0].substr(2)},t.isRejected=function(r){return"0"===r.split(" ",2)[1]},t.parseMLine=function(r){var e=t.splitLines(r)[0].substr(2).split(" ");return{kind:e[0],port:parseInt(e[1],10),protocol:e[2],fmt:e.slice(3).join(" ")}},t.parseOLine=function(r){var e=t.matchPrefix(r,"o=")[0].substr(2).split(" ");return{username:e[0],sessionId:e[1],sessionVersion:parseInt(e[2],10),netType:e[3],addressType:e[4],address:e[5]}},t.isValidSDP=function(r){if("string"!=typeof r||0===r.length)return!1;for(var e=t.splitLines(r),a=0;a<e.length;a++)if(e[a].length<2||"="!==e[a].charAt(1))return!1;return!0},e.exports=t}(e.sdp);var t=e.sdp.exports;exports.default=t;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/sdp.js");!function(e){const t={generateIdentifier:function(){return Math.random().toString(36).substr(2,10)}};t.localCName=t.generateIdentifier(),t.splitLines=function(e){return e.trim().split("\n").map((e=>e.trim()))},t.splitSections=function(e){return e.split("\nm=").map(((e,t)=>(t>0?"m="+e:e).trim()+"\r\n"))},t.getDescription=function(e){const r=t.splitSections(e);return r&&r[0]},t.getMediaSections=function(e){const r=t.splitSections(e);return r.shift(),r},t.matchPrefix=function(e,r){return t.splitLines(e).filter((e=>0===e.indexOf(r)))},t.parseCandidate=function(e){let t;t=0===e.indexOf("a=candidate:")?e.substring(12).split(" "):e.substring(10).split(" ");const r={foundation:t[0],component:{1:"rtp",2:"rtcp"}[t[1]]||t[1],protocol:t[2].toLowerCase(),priority:parseInt(t[3],10),ip:t[4],address:t[4],port:parseInt(t[5],10),type:t[7]};for(let e=8;e<t.length;e+=2)switch(t[e]){case"raddr":r.relatedAddress=t[e+1];break;case"rport":r.relatedPort=parseInt(t[e+1],10);break;case"tcptype":r.tcpType=t[e+1];break;case"ufrag":r.ufrag=t[e+1],r.usernameFragment=t[e+1];break;default:void 0===r[t[e]]&&(r[t[e]]=t[e+1])}return r},t.writeCandidate=function(e){const t=[];t.push(e.foundation);const r=e.component;"rtp"===r?t.push(1):"rtcp"===r?t.push(2):t.push(r),t.push(e.protocol.toUpperCase()),t.push(e.priority),t.push(e.address||e.ip),t.push(e.port);const s=e.type;return t.push("typ"),t.push(s),"host"!==s&&e.relatedAddress&&e.relatedPort&&(t.push("raddr"),t.push(e.relatedAddress),t.push("rport"),t.push(e.relatedPort)),e.tcpType&&"tcp"===e.protocol.toLowerCase()&&(t.push("tcptype"),t.push(e.tcpType)),(e.usernameFragment||e.ufrag)&&(t.push("ufrag"),t.push(e.usernameFragment||e.ufrag)),"candidate:"+t.join(" ")},t.parseIceOptions=function(e){return e.substr(14).split(" ")},t.parseRtpMap=function(e){let t=e.substr(9).split(" ");const r={payloadType:parseInt(t.shift(),10)};return t=t[0].split("/"),r.name=t[0],r.clockRate=parseInt(t[1],10),r.channels=3===t.length?parseInt(t[2],10):1,r.numChannels=r.channels,r},t.writeRtpMap=function(e){let t=e.payloadType;void 0!==e.preferredPayloadType&&(t=e.preferredPayloadType);const r=e.channels||e.numChannels||1;return"a=rtpmap:"+t+" "+e.name+"/"+e.clockRate+(1!==r?"/"+r:"")+"\r\n"},t.parseExtmap=function(e){const t=e.substr(9).split(" ");return{id:parseInt(t[0],10),direction:t[0].indexOf("/")>0?t[0].split("/")[1]:"sendrecv",uri:t[1]}},t.writeExtmap=function(e){return"a=extmap:"+(e.id||e.preferredId)+(e.direction&&"sendrecv"!==e.direction?"/"+e.direction:"")+" "+e.uri+"\r\n"},t.parseFmtp=function(e){const t={};let r;const s=e.substr(e.indexOf(" ")+1).split(";");for(let e=0;e<s.length;e++)r=s[e].trim().split("="),t[r[0].trim()]=r[1];return t},t.writeFmtp=function(e){let t="",r=e.payloadType;if(void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.parameters&&Object.keys(e.parameters).length){const s=[];Object.keys(e.parameters).forEach((t=>{void 0!==e.parameters[t]?s.push(t+"="+e.parameters[t]):s.push(t)})),t+="a=fmtp:"+r+" "+s.join(";")+"\r\n"}return t},t.parseRtcpFb=function(e){const t=e.substr(e.indexOf(" ")+1).split(" ");return{type:t.shift(),parameter:t.join(" ")}},t.writeRtcpFb=function(e){let t="",r=e.payloadType;return void 0!==e.preferredPayloadType&&(r=e.preferredPayloadType),e.rtcpFeedback&&e.rtcpFeedback.length&&e.rtcpFeedback.forEach((e=>{t+="a=rtcp-fb:"+r+" "+e.type+(e.parameter&&e.parameter.length?" "+e.parameter:"")+"\r\n"})),t},t.parseSsrcMedia=function(e){const t=e.indexOf(" "),r={ssrc:parseInt(e.substr(7,t-7),10)},s=e.indexOf(":",t);return s>-1?(r.attribute=e.substr(t+1,s-t-1),r.value=e.substr(s+1)):r.attribute=e.substr(t+1),r},t.parseSsrcGroup=function(e){const t=e.substr(13).split(" ");return{semantics:t.shift(),ssrcs:t.map((e=>parseInt(e,10)))}},t.getMid=function(e){const r=t.matchPrefix(e,"a=mid:")[0];if(r)return r.substr(6)},t.parseFingerprint=function(e){const t=e.substr(14).split(" ");return{algorithm:t[0].toLowerCase(),value:t[1].toUpperCase()}},t.getDtlsParameters=function(e,r){return{role:"auto",fingerprints:t.matchPrefix(e+r,"a=fingerprint:").map(t.parseFingerprint)}},t.writeDtlsParameters=function(e,t){let r="a=setup:"+t+"\r\n";return e.fingerprints.forEach((e=>{r+="a=fingerprint:"+e.algorithm+" "+e.value+"\r\n"})),r},t.parseCryptoLine=function(e){const t=e.substr(9).split(" ");return{tag:parseInt(t[0],10),cryptoSuite:t[1],keyParams:t[2],sessionParams:t.slice(3)}},t.writeCryptoLine=function(e){return"a=crypto:"+e.tag+" "+e.cryptoSuite+" "+("object"==typeof e.keyParams?t.writeCryptoKeyParams(e.keyParams):e.keyParams)+(e.sessionParams?" "+e.sessionParams.join(" "):"")+"\r\n"},t.parseCryptoKeyParams=function(e){if(0!==e.indexOf("inline:"))return null;const t=e.substr(7).split("|");return{keyMethod:"inline",keySalt:t[0],lifeTime:t[1],mkiValue:t[2]?t[2].split(":")[0]:void 0,mkiLength:t[2]?t[2].split(":")[1]:void 0}},t.writeCryptoKeyParams=function(e){return e.keyMethod+":"+e.keySalt+(e.lifeTime?"|"+e.lifeTime:"")+(e.mkiValue&&e.mkiLength?"|"+e.mkiValue+":"+e.mkiLength:"")},t.getCryptoParameters=function(e,r){return t.matchPrefix(e+r,"a=crypto:").map(t.parseCryptoLine)},t.getIceParameters=function(e,r){const s=t.matchPrefix(e+r,"a=ice-ufrag:")[0],n=t.matchPrefix(e+r,"a=ice-pwd:")[0];return s&&n?{usernameFragment:s.substr(12),password:n.substr(10)}:null},t.writeIceParameters=function(e){let t="a=ice-ufrag:"+e.usernameFragment+"\r\na=ice-pwd:"+e.password+"\r\n";return e.iceLite&&(t+="a=ice-lite\r\n"),t},t.parseRtpParameters=function(e){const r={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},s=t.splitLines(e)[0].split(" ");for(let n=3;n<s.length;n++){const a=s[n],i=t.matchPrefix(e,"a=rtpmap:"+a+" ")[0];if(i){const s=t.parseRtpMap(i),n=t.matchPrefix(e,"a=fmtp:"+a+" ");switch(s.parameters=n.length?t.parseFmtp(n[0]):{},s.rtcpFeedback=t.matchPrefix(e,"a=rtcp-fb:"+a+" ").map(t.parseRtcpFb),r.codecs.push(s),s.name.toUpperCase()){case"RED":case"ULPFEC":r.fecMechanisms.push(s.name.toUpperCase())}}}return t.matchPrefix(e,"a=extmap:").forEach((e=>{r.headerExtensions.push(t.parseExtmap(e))})),r},t.writeRtpDescription=function(e,r){let s="";s+="m="+e+" ",s+=r.codecs.length>0?"9":"0",s+=" UDP/TLS/RTP/SAVPF ",s+=r.codecs.map((e=>void 0!==e.preferredPayloadType?e.preferredPayloadType:e.payloadType)).join(" ")+"\r\n",s+="c=IN IP4 0.0.0.0\r\n",s+="a=rtcp:9 IN IP4 0.0.0.0\r\n",r.codecs.forEach((e=>{s+=t.writeRtpMap(e),s+=t.writeFmtp(e),s+=t.writeRtcpFb(e)}));let n=0;return r.codecs.forEach((e=>{e.maxptime>n&&(n=e.maxptime)})),n>0&&(s+="a=maxptime:"+n+"\r\n"),r.headerExtensions&&r.headerExtensions.forEach((e=>{s+=t.writeExtmap(e)})),s},t.parseRtpEncodingParameters=function(e){const r=[],s=t.parseRtpParameters(e),n=-1!==s.fecMechanisms.indexOf("RED"),a=-1!==s.fecMechanisms.indexOf("ULPFEC"),i=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute)),p=i.length>0&&i[0].ssrc;let c;const o=t.matchPrefix(e,"a=ssrc-group:FID").map((e=>e.substr(17).split(" ").map((e=>parseInt(e,10)))));o.length>0&&o[0].length>1&&o[0][0]===p&&(c=o[0][1]),s.codecs.forEach((e=>{if("RTX"===e.name.toUpperCase()&&e.parameters.apt){let t={ssrc:p,codecPayloadType:parseInt(e.parameters.apt,10)};p&&c&&(t.rtx={ssrc:c}),r.push(t),n&&(t=JSON.parse(JSON.stringify(t)),t.fec={ssrc:p,mechanism:a?"red+ulpfec":"red"},r.push(t))}})),0===r.length&&p&&r.push({ssrc:p});let u=t.matchPrefix(e,"b=");return u.length&&(u=0===u[0].indexOf("b=TIAS:")?parseInt(u[0].substr(7),10):0===u[0].indexOf("b=AS:")?1e3*parseInt(u[0].substr(5),10)*.95-16e3:void 0,r.forEach((e=>{e.maxBitrate=u}))),r},t.parseRtcpParameters=function(e){const r={},s=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"cname"===e.attribute))[0];s&&(r.cname=s.value,r.ssrc=s.ssrc);const n=t.matchPrefix(e,"a=rtcp-rsize");r.reducedSize=n.length>0,r.compound=0===n.length;const a=t.matchPrefix(e,"a=rtcp-mux");return r.mux=a.length>0,r},t.writeRtcpParameters=function(e){let t="";return e.reducedSize&&(t+="a=rtcp-rsize\r\n"),e.mux&&(t+="a=rtcp-mux\r\n"),void 0!==e.ssrc&&e.cname&&(t+="a=ssrc:"+e.ssrc+" cname:"+e.cname+"\r\n"),t},t.parseMsid=function(e){let r;const s=t.matchPrefix(e,"a=msid:");if(1===s.length)return r=s[0].substr(7).split(" "),{stream:r[0],track:r[1]};const n=t.matchPrefix(e,"a=ssrc:").map((e=>t.parseSsrcMedia(e))).filter((e=>"msid"===e.attribute));return n.length>0?(r=n[0].value.split(" "),{stream:r[0],track:r[1]}):void 0},t.parseSctpDescription=function(e){const r=t.parseMLine(e),s=t.matchPrefix(e,"a=max-message-size:");let n;s.length>0&&(n=parseInt(s[0].substr(19),10)),isNaN(n)&&(n=65536);const a=t.matchPrefix(e,"a=sctp-port:");if(a.length>0)return{port:parseInt(a[0].substr(12),10),protocol:r.fmt,maxMessageSize:n};const i=t.matchPrefix(e,"a=sctpmap:");if(i.length>0){const e=i[0].substr(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:n}}},t.writeSctpDescription=function(e,t){let r=[];return r="DTLS/SCTP"!==e.protocol?["m="+e.kind+" 9 "+e.protocol+" "+t.protocol+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctp-port:"+t.port+"\r\n"]:["m="+e.kind+" 9 "+e.protocol+" "+t.port+"\r\n","c=IN IP4 0.0.0.0\r\n","a=sctpmap:"+t.port+" "+t.protocol+" 65535\r\n"],void 0!==t.maxMessageSize&&r.push("a=max-message-size:"+t.maxMessageSize+"\r\n"),r.join("")},t.generateSessionId=function(){return Math.random().toString().substr(2,21)},t.writeSessionBoilerplate=function(e,r,s){let n;const a=void 0!==r?r:2;n=e||t.generateSessionId();return"v=0\r\no="+(s||"thisisadapterortc")+" "+n+" "+a+" IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\n"},t.getDirection=function(e,r){const s=t.splitLines(e);for(let e=0;e<s.length;e++)switch(s[e]){case"a=sendrecv":case"a=sendonly":case"a=recvonly":case"a=inactive":return s[e].substr(2)}return r?t.getDirection(r):"sendrecv"},t.getKind=function(e){return t.splitLines(e)[0].split(" ")[0].substr(2)},t.isRejected=function(e){return"0"===e.split(" ",2)[1]},t.parseMLine=function(e){const r=t.splitLines(e)[0].substr(2).split(" ");return{kind:r[0],port:parseInt(r[1],10),protocol:r[2],fmt:r.slice(3).join(" ")}},t.parseOLine=function(e){const r=t.matchPrefix(e,"o=")[0].substr(2).split(" ");return{username:r[0],sessionId:r[1],sessionVersion:parseInt(r[2],10),netType:r[3],addressType:r[4],address:r[5]}},t.isValidSDP=function(e){if("string"!=typeof e||0===e.length)return!1;const r=t.splitLines(e);for(let e=0;e<r.length;e++)if(r[e].length<2||"="!==r[e].charAt(1))return!1;return!0},e.exports=t}(e.sdp);var t=e.sdp.exports;exports.default=t;
|
|
2
2
|
//# sourceMappingURL=sdp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdp.js","sources":["../../../node_modules/sdp/sdp.js"],"sourcesContent":["/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n"],"names":["SDPUtils","Math","random","toString","substr","localCName","generateIdentifier","splitLines","blob","trim","split","map","line","splitSections","part","index","getDescription","sections","getMediaSections","shift","matchPrefix","prefix","filter","indexOf","parseCandidate","parts","candidate","foundation","substring","component","protocol","toLowerCase","priority","parseInt","ip","address","port","type","i","length","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","undefined","writeCandidate","sdp","push","toUpperCase","join","parseIceOptions","parseRtpMap","parsed","payloadType","name","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","id","direction","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","Object","keys","params","forEach","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","value","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","slice","writeCryptoLine","_typeof","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","description","codecs","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","kind","caps","maxptime","extension","parseRtpEncodingParameters","secondarySsrc","encodingParameters","hasRed","hasUlpfec","primarySsrc","flows","apt","encParam","codecPayloadType","rtx","JSON","parse","stringify","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","obj","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","stream","track","planB","msidParts","parseSctpDescription","maxMessageSize","parseMLine","maxSizeLine","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","sctp","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","version","getDirection","getKind","isRejected","parseOLine","username","sessionId","sessionVersion","netType","addressType","isValidSDP","charAt","module","exports"],"mappings":"iLAIA,IAAMA,EAAW,CAIjBA,mBAA8B,WAC5B,OAAOC,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,MAI9CJ,EAASK,WAAaL,EAASM,qBAG/BN,EAASO,WAAa,SAASC,GAC7B,OAAOA,EAAKC,OAAOC,MAAM,MAAMC,KAAI,SAAAC,GAAI,OAAIA,EAAKH,WAGlDT,EAASa,cAAgB,SAASL,GAEhC,OADcA,EAAKE,MAAM,QACZC,KAAI,SAACG,EAAMC,GAAK,OAAMA,EAAQ,EACzC,KAAOD,EAAOA,GAAML,OAAS,WAIjCT,EAASgB,eAAiB,SAASR,GACjC,IAAMS,EAAWjB,EAASa,cAAcL,GACxC,OAAOS,GAAYA,EAAS,IAI9BjB,EAASkB,iBAAmB,SAASV,GACnC,IAAMS,EAAWjB,EAASa,cAAcL,GAExC,OADAS,EAASE,QACFF,GAITjB,EAASoB,YAAc,SAASZ,EAAMa,GACpC,OAAOrB,EAASO,WAAWC,GAAMc,QAAO,SAAAV,GAAI,OAA6B,IAAzBA,EAAKW,QAAQF,OAO/DrB,EAASwB,eAAiB,SAASZ,GAqBjC,IApBA,IAAIa,EAQEC,EAAY,CAChBC,YANAF,EADmC,IAAjCb,EAAKW,QAAQ,gBACPX,EAAKgB,UAAU,IAAIlB,MAAM,KAEzBE,EAAKgB,UAAU,IAAIlB,MAAM,MAIf,GAClBmB,UAAW,CAAC,EAAG,MAAO,EAAG,QAAQJ,EAAM,KAAOA,EAAM,GACpDK,SAAUL,EAAM,GAAGM,cACnBC,SAAUC,SAASR,EAAM,GAAI,IAC7BS,GAAIT,EAAM,GACVU,QAASV,EAAM,GACfW,KAAMH,SAASR,EAAM,GAAI,IAEzBY,KAAMZ,EAAM,IAGLa,EAAI,EAAGA,EAAIb,EAAMc,OAAQD,GAAK,EACrC,OAAQb,EAAMa,IACZ,IAAK,QACHZ,EAAUc,eAAiBf,EAAMa,EAAI,GACrC,MACF,IAAK,QACHZ,EAAUe,YAAcR,SAASR,EAAMa,EAAI,GAAI,IAC/C,MACF,IAAK,UACHZ,EAAUgB,QAAUjB,EAAMa,EAAI,GAC9B,MACF,IAAK,QACHZ,EAAUiB,MAAQlB,EAAMa,EAAI,GAC5BZ,EAAUkB,iBAAmBnB,EAAMa,EAAI,GACvC,MACF,aAC8BO,IAAxBnB,EAAUD,EAAMa,MAClBZ,EAAUD,EAAMa,IAAMb,EAAMa,EAAI,IAKxC,OAAOZ,GAKT1B,EAAS8C,eAAiB,SAASpB,GACjC,IAAMqB,EAAM,GACZA,EAAIC,KAAKtB,EAAUC,YAEnB,IAAME,EAAYH,EAAUG,UACV,QAAdA,EACFkB,EAAIC,KAAK,GACc,SAAdnB,EACTkB,EAAIC,KAAK,GAETD,EAAIC,KAAKnB,GAEXkB,EAAIC,KAAKtB,EAAUI,SAASmB,eAC5BF,EAAIC,KAAKtB,EAAUM,UACnBe,EAAIC,KAAKtB,EAAUS,SAAWT,EAAUQ,IACxCa,EAAIC,KAAKtB,EAAUU,MAEnB,IAAMC,EAAOX,EAAUW,KAkBvB,OAjBAU,EAAIC,KAAK,OACTD,EAAIC,KAAKX,GACI,SAATA,GAAmBX,EAAUc,gBAC7Bd,EAAUe,cACZM,EAAIC,KAAK,SACTD,EAAIC,KAAKtB,EAAUc,gBACnBO,EAAIC,KAAK,SACTD,EAAIC,KAAKtB,EAAUe,cAEjBf,EAAUgB,SAAgD,QAArChB,EAAUI,SAASC,gBAC1CgB,EAAIC,KAAK,WACTD,EAAIC,KAAKtB,EAAUgB,WAEjBhB,EAAUkB,kBAAoBlB,EAAUiB,SAC1CI,EAAIC,KAAK,SACTD,EAAIC,KAAKtB,EAAUkB,kBAAoBlB,EAAUiB,QAE5C,aAAeI,EAAIG,KAAK,MAMjClD,EAASmD,gBAAkB,SAASvC,GAClC,OAAOA,EAAKR,OAAO,IAAIM,MAAM,MAK/BV,EAASoD,YAAc,SAASxC,GAC9B,IAAIa,EAAQb,EAAKR,OAAO,GAAGM,MAAM,KAC3B2C,EAAS,CACbC,YAAarB,SAASR,EAAMN,QAAS,KAUvC,OAPAM,EAAQA,EAAM,GAAGf,MAAM,KAEvB2C,EAAOE,KAAO9B,EAAM,GACpB4B,EAAOG,UAAYvB,SAASR,EAAM,GAAI,IACtC4B,EAAOI,SAA4B,IAAjBhC,EAAMc,OAAeN,SAASR,EAAM,GAAI,IAAM,EAEhE4B,EAAOK,YAAcL,EAAOI,SACrBJ,GAKTrD,EAAS2D,YAAc,SAASC,GAC9B,IAAIC,EAAKD,EAAMN,iBACoBT,IAA/Be,EAAME,uBACRD,EAAKD,EAAME,sBAEb,IAAML,EAAWG,EAAMH,UAAYG,EAAMF,aAAe,EACxD,MAAO,YAAcG,EAAK,IAAMD,EAAML,KAAO,IAAMK,EAAMJ,WACvC,IAAbC,EAAiB,IAAMA,EAAW,IAAM,QAM/CzD,EAAS+D,YAAc,SAASnD,GAC9B,IAAMa,EAAQb,EAAKR,OAAO,GAAGM,MAAM,KACnC,MAAO,CACLsD,GAAI/B,SAASR,EAAM,GAAI,IACvBwC,UAAWxC,EAAM,GAAGF,QAAQ,KAAO,EAAIE,EAAM,GAAGf,MAAM,KAAK,GAAK,WAChEwD,IAAKzC,EAAM,KAMfzB,EAASmE,YAAc,SAASC,GAC9B,MAAO,aAAeA,EAAgBJ,IAAMI,EAAgBC,cACvDD,EAAgBH,WAA2C,aAA9BG,EAAgBH,UAC1C,IAAMG,EAAgBH,UACtB,IACJ,IAAMG,EAAgBF,IAAM,QAMlClE,EAASsE,UAAY,SAAS1D,GAI5B,IAHA,IACI2D,EADElB,EAAS,CAAA,EAET5B,EAAQb,EAAKR,OAAOQ,EAAKW,QAAQ,KAAO,GAAGb,MAAM,KAC9C8D,EAAI,EAAGA,EAAI/C,EAAMc,OAAQiC,IAEhCnB,GADAkB,EAAK9C,EAAM+C,GAAG/D,OAAOC,MAAM,MACjB,GAAGD,QAAU8D,EAAG,GAE5B,OAAOlB,GAITrD,EAASyE,UAAY,SAASb,GAC5B,IAAIhD,EAAO,GACPiD,EAAKD,EAAMN,YAIf,QAHmCT,IAA/Be,EAAME,uBACRD,EAAKD,EAAME,sBAETF,EAAMc,YAAcC,OAAOC,KAAKhB,EAAMc,YAAYnC,OAAQ,CAC5D,IAAMsC,EAAS,GACfF,OAAOC,KAAKhB,EAAMc,YAAYI,SAAQ,SAAAC,QACJlC,IAA5Be,EAAMc,WAAWK,GACnBF,EAAO7B,KAAK+B,EAAQ,IAAMnB,EAAMc,WAAWK,IAE3CF,EAAO7B,KAAK+B,EAEpB,IACInE,GAAQ,UAAYiD,EAAK,IAAMgB,EAAO3B,KAAK,KAAO,MACnD,CACD,OAAOtC,GAKTZ,EAASgF,YAAc,SAASpE,GAC9B,IAAMa,EAAQb,EAAKR,OAAOQ,EAAKW,QAAQ,KAAO,GAAGb,MAAM,KACvD,MAAO,CACL2B,KAAMZ,EAAMN,QACZ8D,UAAWxD,EAAMyB,KAAK,OAK1BlD,EAASkF,YAAc,SAAStB,GAC9B,IAAIuB,EAAQ,GACRtB,EAAKD,EAAMN,YAYf,YAXmCT,IAA/Be,EAAME,uBACRD,EAAKD,EAAME,sBAETF,EAAMwB,cAAgBxB,EAAMwB,aAAa7C,QAE3CqB,EAAMwB,aAAaN,SAAQ,SAAAO,GACzBF,GAAS,aAAetB,EAAK,IAAMwB,EAAGhD,MACrCgD,EAAGJ,WAAaI,EAAGJ,UAAU1C,OAAS,IAAM8C,EAAGJ,UAAY,IACxD,MACV,IAESE,GAKTnF,EAASsF,eAAiB,SAAS1E,GACjC,IAAM2E,EAAK3E,EAAKW,QAAQ,KAClBE,EAAQ,CACZ+D,KAAMvD,SAASrB,EAAKR,OAAO,EAAGmF,EAAK,GAAI,KAEnCE,EAAQ7E,EAAKW,QAAQ,IAAKgE,GAOhC,OANIE,GAAS,GACXhE,EAAMiE,UAAY9E,EAAKR,OAAOmF,EAAK,EAAGE,EAAQF,EAAK,GACnD9D,EAAMkE,MAAQ/E,EAAKR,OAAOqF,EAAQ,IAElChE,EAAMiE,UAAY9E,EAAKR,OAAOmF,EAAK,GAE9B9D,GAKTzB,EAAS4F,eAAiB,SAAShF,GACjC,IAAMa,EAAQb,EAAKR,OAAO,IAAIM,MAAM,KACpC,MAAO,CACLmF,UAAWpE,EAAMN,QACjB2E,MAAOrE,EAAMd,KAAI,SAAA6E,GAAI,OAAIvD,SAASuD,EAAM,GAAG,MAM/CxF,EAAS+F,OAAS,SAASC,GACzB,IAAMC,EAAMjG,EAASoB,YAAY4E,EAAc,UAAU,GACzD,GAAIC,EACF,OAAOA,EAAI7F,OAAO,IAKtBJ,EAASkG,iBAAmB,SAAStF,GACnC,IAAMa,EAAQb,EAAKR,OAAO,IAAIM,MAAM,KACpC,MAAO,CACLyF,UAAW1E,EAAM,GAAGM,cACpB4D,MAAOlE,EAAM,GAAGwB,gBAOpBjD,EAASoG,kBAAoB,SAASJ,EAAcK,GAIlD,MAAO,CACLC,KAAM,OACNC,aALYvG,EAASoB,YAAY4E,EAAeK,EAChD,kBAIoB1F,IAAIX,EAASkG,oBAKrClG,EAASwG,oBAAsB,SAAS3B,EAAQ4B,GAC9C,IAAI1D,EAAM,WAAa0D,EAAY,OAInC,OAHA5B,EAAO0B,aAAazB,SAAQ,SAAA4B,GAC1B3D,GAAO,iBAAmB2D,EAAGP,UAAY,IAAMO,EAAGf,MAAQ,MAC9D,IACS5C,GAKT/C,EAAS2G,gBAAkB,SAAS/F,GAClC,IAAMa,EAAQb,EAAKR,OAAO,GAAGM,MAAM,KACnC,MAAO,CACLkG,IAAK3E,SAASR,EAAM,GAAI,IACxBoF,YAAapF,EAAM,GACnBqF,UAAWrF,EAAM,GACjBsF,cAAetF,EAAMuF,MAAM,KAI/BhH,EAASiH,gBAAkB,SAASvC,GAClC,MAAO,YAAcA,EAAWkC,IAAM,IACpClC,EAAWmC,YAAc,KACQ,WAAhCK,EAAAA,OAAOxC,EAAWoC,WACf9G,EAASmH,qBAAqBzC,EAAWoC,WACzCpC,EAAWoC,YACdpC,EAAWqC,cAAgB,IAAMrC,EAAWqC,cAAc7D,KAAK,KAAO,IACvE,QAKJlD,EAASoH,qBAAuB,SAASN,GACvC,GAAqC,IAAjCA,EAAUvF,QAAQ,WACpB,OAAO,KAET,IAAME,EAAQqF,EAAU1G,OAAO,GAAGM,MAAM,KACxC,MAAO,CACL2G,UAAW,SACXC,QAAS7F,EAAM,GACf8F,SAAU9F,EAAM,GAChB+F,SAAU/F,EAAM,GAAKA,EAAM,GAAGf,MAAM,KAAK,QAAKmC,EAC9C4E,UAAWhG,EAAM,GAAKA,EAAM,GAAGf,MAAM,KAAK,QAAKmC,IAInD7C,EAASmH,qBAAuB,SAASL,GACvC,OAAOA,EAAUO,UAAY,IACzBP,EAAUQ,SACXR,EAAUS,SAAW,IAAMT,EAAUS,SAAW,KAChDT,EAAUU,UAAYV,EAAUW,UAC7B,IAAMX,EAAUU,SAAW,IAAMV,EAAUW,UAC3C,KAIRzH,EAAS0H,oBAAsB,SAAS1B,EAAcK,GAGpD,OAFcrG,EAASoB,YAAY4E,EAAeK,EAChD,aACW1F,IAAIX,EAAS2G,kBAM5B3G,EAAS2H,iBAAmB,SAAS3B,EAAcK,GACjD,IAAM1D,EAAQ3C,EAASoB,YAAY4E,EAAeK,EAChD,gBAAgB,GACZuB,EAAM5H,EAASoB,YAAY4E,EAAeK,EAC9C,cAAc,GAChB,OAAM1D,GAASiF,EAGR,CACLhF,iBAAkBD,EAAMvC,OAAO,IAC/ByH,SAAUD,EAAIxH,OAAO,KAJd,MASXJ,EAAS8H,mBAAqB,SAASjD,GACrC,IAAI9B,EAAM,eAAiB8B,EAAOjC,iBAAxB,iBACSiC,EAAOgD,SAAW,OAIrC,OAHIhD,EAAOkD,UACThF,GAAO,kBAEFA,GAIT/C,EAASgI,mBAAqB,SAAShC,GASrC,IARA,IAAMiC,EAAc,CAClBC,OAAQ,GACRC,iBAAkB,GAClBC,cAAe,GACfC,KAAM,IAGFC,EADQtI,EAASO,WAAWyF,GACd,GAAGtF,MAAM,KACpB4B,EAAI,EAAGA,EAAIgG,EAAM/F,OAAQD,IAAK,CACrC,IAAMuB,EAAKyE,EAAMhG,GACXiG,EAAavI,EAASoB,YAC1B4E,EAAc,YAAcnC,EAAK,KAAK,GACxC,GAAI0E,EAAY,CACd,IAAM3E,EAAQ5D,EAASoD,YAAYmF,GAC7BC,EAAQxI,EAASoB,YACrB4E,EAAc,UAAYnC,EAAK,KAQjC,OANAD,EAAMc,WAAa8D,EAAMjG,OAASvC,EAASsE,UAAUkE,EAAM,IAAM,GACjE5E,EAAMwB,aAAepF,EAASoB,YAC5B4E,EAAc,aAAenC,EAAK,KACjClD,IAAIX,EAASgF,aAChBiD,EAAYC,OAAOlF,KAAKY,GAEhBA,EAAML,KAAKN,eACjB,IAAK,MACL,IAAK,SACHgF,EAAYG,cAAcpF,KAAKY,EAAML,KAAKN,eAK/C,CACF,CAKD,OAJAjD,EAASoB,YAAY4E,EAAc,aAAalB,SAAQ,SAAAlE,GACtDqH,EAAYE,iBAAiBnF,KAAKhD,EAAS+D,YAAYnD,GAC3D,IAESqH,GAKTjI,EAASyI,oBAAsB,SAASC,EAAMC,GAC5C,IAAI5F,EAAM,GAGVA,GAAO,KAAO2F,EAAO,IACrB3F,GAAO4F,EAAKT,OAAO3F,OAAS,EAAI,IAAM,IACtCQ,GAAO,sBACPA,GAAO4F,EAAKT,OAAOvH,KAAI,SAAAiD,GACrB,YAAmCf,IAA/Be,EAAME,qBACDF,EAAME,qBAERF,EAAMN,WACd,IAAEJ,KAAK,KAAO,OAEfH,GAAO,uBACPA,GAAO,8BAGP4F,EAAKT,OAAOpD,SAAQ,SAAAlB,GAClBb,GAAO/C,EAAS2D,YAAYC,GAC5Bb,GAAO/C,EAASyE,UAAUb,GAC1Bb,GAAO/C,EAASkF,YAAYtB,EAChC,IACE,IAAIgF,EAAW,EAgBf,OAfAD,EAAKT,OAAOpD,SAAQ,SAAAlB,GACdA,EAAMgF,SAAWA,IACnBA,EAAWhF,EAAMgF,SAEvB,IACMA,EAAW,IACb7F,GAAO,cAAgB6F,EAAW,QAGhCD,EAAKR,kBACPQ,EAAKR,iBAAiBrD,SAAQ,SAAA+D,GAC5B9F,GAAO/C,EAASmE,YAAY0E,EAClC,IAGS9F,GAKT/C,EAAS8I,2BAA6B,SAAS9C,GAC7C,IAUI+C,EAVEC,EAAqB,GACrBf,EAAcjI,EAASgI,mBAAmBhC,GAC1CiD,GAAuD,IAA9ChB,EAAYG,cAAc7G,QAAQ,OAC3C2H,GAA6D,IAAjDjB,EAAYG,cAAc7G,QAAQ,UAG9CuE,EAAQ9F,EAASoB,YAAY4E,EAAc,WAC9CrF,KAAI,SAAAC,GAAI,OAAIZ,EAASsF,eAAe1E,EAAK,IACzCU,QAAO,SAAAG,GAAK,MAAwB,UAApBA,EAAMiE,aACnByD,EAAcrD,EAAMvD,OAAS,GAAKuD,EAAM,GAAGN,KAG3C4D,EAAQpJ,EAASoB,YAAY4E,EAAc,oBAC9CrF,KAAI,SAAAC,GAEH,OADcA,EAAKR,OAAO,IAAIM,MAAM,KACvBC,KAAI,SAAAG,GAAI,OAAImB,SAASnB,EAAM,MAC9C,IACMsI,EAAM7G,OAAS,GAAK6G,EAAM,GAAG7G,OAAS,GAAK6G,EAAM,GAAG,KAAOD,IAC7DJ,EAAgBK,EAAM,GAAG,IAG3BnB,EAAYC,OAAOpD,SAAQ,SAAAlB,GACzB,GAAiC,QAA7BA,EAAML,KAAKN,eAA2BW,EAAMc,WAAW2E,IAAK,CAC9D,IAAIC,EAAW,CACb9D,KAAM2D,EACNI,iBAAkBtH,SAAS2B,EAAMc,WAAW2E,IAAK,KAE/CF,GAAeJ,IACjBO,EAASE,IAAM,CAAChE,KAAMuD,IAExBC,EAAmBhG,KAAKsG,GACpBL,KACFK,EAAWG,KAAKC,MAAMD,KAAKE,UAAUL,KAC5BM,IAAM,CACbpE,KAAM2D,EACNU,UAAWX,EAAY,aAAe,OAExCF,EAAmBhG,KAAKsG,GAE3B,CACL,IACoC,IAA9BN,EAAmBzG,QAAgB4G,GACrCH,EAAmBhG,KAAK,CACtBwC,KAAM2D,IAKV,IAAIW,EAAY9J,EAASoB,YAAY4E,EAAc,MAenD,OAdI8D,EAAUvH,SAEVuH,EADsC,IAApCA,EAAU,GAAGvI,QAAQ,WACXU,SAAS6H,EAAU,GAAG1J,OAAO,GAAI,IACF,IAAlC0J,EAAU,GAAGvI,QAAQ,SAEqB,IAAvCU,SAAS6H,EAAU,GAAG1J,OAAO,GAAI,IAAa,IACnD,UAEKyC,EAEdmG,EAAmBlE,SAAQ,SAAAD,GACzBA,EAAOkF,WAAaD,CAC1B,KAESd,GAIThJ,EAASgK,oBAAsB,SAAShE,GACtC,IAAMiE,EAAiB,CAAA,EAIjBC,EAAalK,EAASoB,YAAY4E,EAAc,WACnDrF,KAAI,SAAAC,GAAI,OAAIZ,EAASsF,eAAe1E,EAAK,IACzCU,QAAO,SAAA6I,GAAG,MAAsB,UAAlBA,EAAIzE,aAAuB,GACxCwE,IACFD,EAAeG,MAAQF,EAAWvE,MAClCsE,EAAezE,KAAO0E,EAAW1E,MAKnC,IAAM6E,EAAQrK,EAASoB,YAAY4E,EAAc,gBACjDiE,EAAeK,YAAcD,EAAM9H,OAAS,EAC5C0H,EAAeM,SAA4B,IAAjBF,EAAM9H,OAIhC,IAAMiI,EAAMxK,EAASoB,YAAY4E,EAAc,cAG/C,OAFAiE,EAAeO,IAAMA,EAAIjI,OAAS,EAE3B0H,GAGTjK,EAASyK,oBAAsB,SAASR,GACtC,IAAIlH,EAAM,GAWV,OAVIkH,EAAeK,cACjBvH,GAAO,oBAELkH,EAAeO,MACjBzH,GAAO,uBAEmBF,IAAxBoH,EAAezE,MAAsByE,EAAeG,QACtDrH,GAAO,UAAYkH,EAAezE,KAChC,UAAYyE,EAAeG,MAAQ,QAEhCrH,GAMT/C,EAAS0K,UAAY,SAAS1E,GAC5B,IAAIvE,EACEkJ,EAAO3K,EAASoB,YAAY4E,EAAc,WAChD,GAAoB,IAAhB2E,EAAKpI,OAEP,MAAO,CAACqI,QADRnJ,EAAQkJ,EAAK,GAAGvK,OAAO,GAAGM,MAAM,MACV,GAAImK,MAAOpJ,EAAM,IAEzC,IAAMqJ,EAAQ9K,EAASoB,YAAY4E,EAAc,WAC9CrF,KAAI,SAAAC,GAAI,OAAIZ,EAASsF,eAAe1E,EAAK,IACzCU,QAAO,SAAAyJ,GAAS,MAA4B,SAAxBA,EAAUrF,aACjC,OAAIoF,EAAMvI,OAAS,EAEV,CAACqI,QADRnJ,EAAQqJ,EAAM,GAAGnF,MAAMjF,MAAM,MACP,GAAImK,MAAOpJ,EAAM,SAFzC,GASFzB,EAASgL,qBAAuB,SAAShF,GACvC,IAEIiF,EAFE3C,EAAQtI,EAASkL,WAAWlF,GAC5BmF,EAAcnL,EAASoB,YAAY4E,EAAc,uBAEnDmF,EAAY5I,OAAS,IACvB0I,EAAiBhJ,SAASkJ,EAAY,GAAG/K,OAAO,IAAK,KAEnDgL,MAAMH,KACRA,EAAiB,OAEnB,IAAMI,EAAWrL,EAASoB,YAAY4E,EAAc,gBACpD,GAAIqF,EAAS9I,OAAS,EACpB,MAAO,CACLH,KAAMH,SAASoJ,EAAS,GAAGjL,OAAO,IAAK,IACvC0B,SAAUwG,EAAMgD,IAChBL,eAAAA,GAGJ,IAAMM,EAAevL,EAASoB,YAAY4E,EAAc,cACxD,GAAIuF,EAAahJ,OAAS,EAAG,CAC3B,IAAMd,EAAQ8J,EAAa,GACxBnL,OAAO,IACPM,MAAM,KACT,MAAO,CACL0B,KAAMH,SAASR,EAAM,GAAI,IACzBK,SAAUL,EAAM,GAChBwJ,eAAAA,EAEH,GAQHjL,EAASwL,qBAAuB,SAASC,EAAOC,GAC9C,IAAIC,EAAS,GAiBb,OAfEA,EADqB,cAAnBF,EAAM3J,SACC,CACP,KAAO2J,EAAM/C,KAAO,MAAQ+C,EAAM3J,SAAW,IAAM4J,EAAK5J,SAAW,OACnE,uBACA,eAAiB4J,EAAKtJ,KAAO,QAGtB,CACP,KAAOqJ,EAAM/C,KAAO,MAAQ+C,EAAM3J,SAAW,IAAM4J,EAAKtJ,KAAO,OAC/D,uBACA,aAAesJ,EAAKtJ,KAAO,IAAMsJ,EAAK5J,SAAW,mBAGzBe,IAAxB6I,EAAKT,gBACPU,EAAO3I,KAAK,sBAAwB0I,EAAKT,eAAiB,QAErDU,EAAOzI,KAAK,KAOrBlD,EAAS4L,kBAAoB,WAC3B,OAAO3L,KAAKC,SAASC,WAAWC,OAAO,EAAG,KAQ5CJ,EAAS6L,wBAA0B,SAASC,EAAQC,EAASC,GAC3D,IACMC,OAAsBpJ,IAAZkJ,EAAwBA,EAAU,EAQlD,MAAO,aAFMC,GAAY,qBAGP,KARdF,GAGU9L,EAAS4L,qBAKa,IAAMK,EADnC,yCAQTjM,EAASkM,aAAe,SAASlG,EAAcK,GAG7C,IADA,IAAMlB,EAAQnF,EAASO,WAAWyF,GACzB1D,EAAI,EAAGA,EAAI6C,EAAM5C,OAAQD,IAChC,OAAQ6C,EAAM7C,IACZ,IAAK,aACL,IAAK,aACL,IAAK,aACL,IAAK,aACH,OAAO6C,EAAM7C,GAAGlC,OAAO,GAK7B,OAAIiG,EACKrG,EAASkM,aAAa7F,GAExB,YAGTrG,EAASmM,QAAU,SAASnG,GAG1B,OAFchG,EAASO,WAAWyF,GACd,GAAGtF,MAAM,KAChB,GAAGN,OAAO,IAGzBJ,EAASoM,WAAa,SAASpG,GAC7B,MAAyC,MAAlCA,EAAatF,MAAM,IAAK,GAAG,IAGpCV,EAASkL,WAAa,SAASlF,GAC7B,IACMvE,EADQzB,EAASO,WAAWyF,GACd,GAAG5F,OAAO,GAAGM,MAAM,KACvC,MAAO,CACLgI,KAAMjH,EAAM,GACZW,KAAMH,SAASR,EAAM,GAAI,IACzBK,SAAUL,EAAM,GAChB6J,IAAK7J,EAAMuF,MAAM,GAAG9D,KAAK,OAI7BlD,EAASqM,WAAa,SAASrG,GAC7B,IACMvE,EADOzB,EAASoB,YAAY4E,EAAc,MAAM,GACnC5F,OAAO,GAAGM,MAAM,KACnC,MAAO,CACL4L,SAAU7K,EAAM,GAChB8K,UAAW9K,EAAM,GACjB+K,eAAgBvK,SAASR,EAAM,GAAI,IACnCgL,QAAShL,EAAM,GACfiL,YAAajL,EAAM,GACnBU,QAASV,EAAM,KAKnBzB,EAAS2M,WAAa,SAASnM,GAC7B,GAAoB,iBAATA,GAAqC,IAAhBA,EAAK+B,OACnC,OAAO,EAGT,IADA,IAAM4C,EAAQnF,EAASO,WAAWC,GACzB8B,EAAI,EAAGA,EAAI6C,EAAM5C,OAAQD,IAChC,GAAI6C,EAAM7C,GAAGC,OAAS,GAA4B,MAAvB4C,EAAM7C,GAAGsK,OAAO,GACzC,OAAO,EAIX,OAAO,GAKPC,EAAAC,QAAiB9M"}
|
|
1
|
+
{"version":3,"file":"sdp.js","sources":["../../../node_modules/sdp/sdp.js"],"sourcesContent":["/* eslint-env node */\n'use strict';\n\n// SDP helpers.\nconst SDPUtils = {};\n\n// Generate an alphanumeric identifier for cname or mids.\n// TODO: use UUIDs instead? https://gist.github.com/jed/982883\nSDPUtils.generateIdentifier = function() {\n return Math.random().toString(36).substr(2, 10);\n};\n\n// The RTCP CNAME used by all peerconnections from the same JS.\nSDPUtils.localCName = SDPUtils.generateIdentifier();\n\n// Splits SDP into lines, dealing with both CRLF and LF.\nSDPUtils.splitLines = function(blob) {\n return blob.trim().split('\\n').map(line => line.trim());\n};\n// Splits SDP into sessionpart and mediasections. Ensures CRLF.\nSDPUtils.splitSections = function(blob) {\n const parts = blob.split('\\nm=');\n return parts.map((part, index) => (index > 0 ?\n 'm=' + part : part).trim() + '\\r\\n');\n};\n\n// Returns the session description.\nSDPUtils.getDescription = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n return sections && sections[0];\n};\n\n// Returns the individual media sections.\nSDPUtils.getMediaSections = function(blob) {\n const sections = SDPUtils.splitSections(blob);\n sections.shift();\n return sections;\n};\n\n// Returns lines that start with a certain prefix.\nSDPUtils.matchPrefix = function(blob, prefix) {\n return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n};\n\n// Parses an ICE candidate line. Sample input:\n// candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n// rport 55996\"\n// Input can be prefixed with a=.\nSDPUtils.parseCandidate = function(line) {\n let parts;\n // Parse both variants.\n if (line.indexOf('a=candidate:') === 0) {\n parts = line.substring(12).split(' ');\n } else {\n parts = line.substring(10).split(' ');\n }\n\n const candidate = {\n foundation: parts[0],\n component: {1: 'rtp', 2: 'rtcp'}[parts[1]] || parts[1],\n protocol: parts[2].toLowerCase(),\n priority: parseInt(parts[3], 10),\n ip: parts[4],\n address: parts[4], // address is an alias for ip.\n port: parseInt(parts[5], 10),\n // skip parts[6] == 'typ'\n type: parts[7],\n };\n\n for (let i = 8; i < parts.length; i += 2) {\n switch (parts[i]) {\n case 'raddr':\n candidate.relatedAddress = parts[i + 1];\n break;\n case 'rport':\n candidate.relatedPort = parseInt(parts[i + 1], 10);\n break;\n case 'tcptype':\n candidate.tcpType = parts[i + 1];\n break;\n case 'ufrag':\n candidate.ufrag = parts[i + 1]; // for backward compatibility.\n candidate.usernameFragment = parts[i + 1];\n break;\n default: // extension handling, in particular ufrag. Don't overwrite.\n if (candidate[parts[i]] === undefined) {\n candidate[parts[i]] = parts[i + 1];\n }\n break;\n }\n }\n return candidate;\n};\n\n// Translates a candidate object into SDP candidate attribute.\n// This does not include the a= prefix!\nSDPUtils.writeCandidate = function(candidate) {\n const sdp = [];\n sdp.push(candidate.foundation);\n\n const component = candidate.component;\n if (component === 'rtp') {\n sdp.push(1);\n } else if (component === 'rtcp') {\n sdp.push(2);\n } else {\n sdp.push(component);\n }\n sdp.push(candidate.protocol.toUpperCase());\n sdp.push(candidate.priority);\n sdp.push(candidate.address || candidate.ip);\n sdp.push(candidate.port);\n\n const type = candidate.type;\n sdp.push('typ');\n sdp.push(type);\n if (type !== 'host' && candidate.relatedAddress &&\n candidate.relatedPort) {\n sdp.push('raddr');\n sdp.push(candidate.relatedAddress);\n sdp.push('rport');\n sdp.push(candidate.relatedPort);\n }\n if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n sdp.push('tcptype');\n sdp.push(candidate.tcpType);\n }\n if (candidate.usernameFragment || candidate.ufrag) {\n sdp.push('ufrag');\n sdp.push(candidate.usernameFragment || candidate.ufrag);\n }\n return 'candidate:' + sdp.join(' ');\n};\n\n// Parses an ice-options line, returns an array of option tags.\n// Sample input:\n// a=ice-options:foo bar\nSDPUtils.parseIceOptions = function(line) {\n return line.substr(14).split(' ');\n};\n\n// Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n// a=rtpmap:111 opus/48000/2\nSDPUtils.parseRtpMap = function(line) {\n let parts = line.substr(9).split(' ');\n const parsed = {\n payloadType: parseInt(parts.shift(), 10), // was: id\n };\n\n parts = parts[0].split('/');\n\n parsed.name = parts[0];\n parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n // legacy alias, got renamed back to channels in ORTC.\n parsed.numChannels = parsed.channels;\n return parsed;\n};\n\n// Generates a rtpmap line from RTCRtpCodecCapability or\n// RTCRtpCodecParameters.\nSDPUtils.writeRtpMap = function(codec) {\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n const channels = codec.channels || codec.numChannels || 1;\n return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate +\n (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n};\n\n// Parses a extmap line (headerextension from RFC 5285). Sample input:\n// a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n// a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\nSDPUtils.parseExtmap = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n id: parseInt(parts[0], 10),\n direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n uri: parts[1],\n };\n};\n\n// Generates an extmap line from RTCRtpHeaderExtensionParameters or\n// RTCRtpHeaderExtension.\nSDPUtils.writeExtmap = function(headerExtension) {\n return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) +\n (headerExtension.direction && headerExtension.direction !== 'sendrecv'\n ? '/' + headerExtension.direction\n : '') +\n ' ' + headerExtension.uri + '\\r\\n';\n};\n\n// Parses a fmtp line, returns dictionary. Sample input:\n// a=fmtp:96 vbr=on;cng=on\n// Also deals with vbr=on; cng=on\nSDPUtils.parseFmtp = function(line) {\n const parsed = {};\n let kv;\n const parts = line.substr(line.indexOf(' ') + 1).split(';');\n for (let j = 0; j < parts.length; j++) {\n kv = parts[j].trim().split('=');\n parsed[kv[0].trim()] = kv[1];\n }\n return parsed;\n};\n\n// Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeFmtp = function(codec) {\n let line = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.parameters && Object.keys(codec.parameters).length) {\n const params = [];\n Object.keys(codec.parameters).forEach(param => {\n if (codec.parameters[param] !== undefined) {\n params.push(param + '=' + codec.parameters[param]);\n } else {\n params.push(param);\n }\n });\n line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n }\n return line;\n};\n\n// Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n// a=rtcp-fb:98 nack rpsi\nSDPUtils.parseRtcpFb = function(line) {\n const parts = line.substr(line.indexOf(' ') + 1).split(' ');\n return {\n type: parts.shift(),\n parameter: parts.join(' '),\n };\n};\n\n// Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\nSDPUtils.writeRtcpFb = function(codec) {\n let lines = '';\n let pt = codec.payloadType;\n if (codec.preferredPayloadType !== undefined) {\n pt = codec.preferredPayloadType;\n }\n if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n // FIXME: special handling for trr-int?\n codec.rtcpFeedback.forEach(fb => {\n lines += 'a=rtcp-fb:' + pt + ' ' + fb.type +\n (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') +\n '\\r\\n';\n });\n }\n return lines;\n};\n\n// Parses a RFC 5576 ssrc media attribute. Sample input:\n// a=ssrc:3735928559 cname:something\nSDPUtils.parseSsrcMedia = function(line) {\n const sp = line.indexOf(' ');\n const parts = {\n ssrc: parseInt(line.substr(7, sp - 7), 10),\n };\n const colon = line.indexOf(':', sp);\n if (colon > -1) {\n parts.attribute = line.substr(sp + 1, colon - sp - 1);\n parts.value = line.substr(colon + 1);\n } else {\n parts.attribute = line.substr(sp + 1);\n }\n return parts;\n};\n\n// Parse a ssrc-group line (see RFC 5576). Sample input:\n// a=ssrc-group:semantics 12 34\nSDPUtils.parseSsrcGroup = function(line) {\n const parts = line.substr(13).split(' ');\n return {\n semantics: parts.shift(),\n ssrcs: parts.map(ssrc => parseInt(ssrc, 10)),\n };\n};\n\n// Extracts the MID (RFC 5888) from a media section.\n// Returns the MID or undefined if no mid line was found.\nSDPUtils.getMid = function(mediaSection) {\n const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n if (mid) {\n return mid.substr(6);\n }\n};\n\n// Parses a fingerprint line for DTLS-SRTP.\nSDPUtils.parseFingerprint = function(line) {\n const parts = line.substr(14).split(' ');\n return {\n algorithm: parts[0].toLowerCase(), // algorithm is case-sensitive in Edge.\n value: parts[1].toUpperCase(), // the definition is upper-case in RFC 4572.\n };\n};\n\n// Extracts DTLS parameters from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the fingerprint line as input. See also getIceParameters.\nSDPUtils.getDtlsParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=fingerprint:');\n // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n return {\n role: 'auto',\n fingerprints: lines.map(SDPUtils.parseFingerprint),\n };\n};\n\n// Serializes DTLS parameters to SDP.\nSDPUtils.writeDtlsParameters = function(params, setupType) {\n let sdp = 'a=setup:' + setupType + '\\r\\n';\n params.fingerprints.forEach(fp => {\n sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n });\n return sdp;\n};\n\n// Parses a=crypto lines into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\nSDPUtils.parseCryptoLine = function(line) {\n const parts = line.substr(9).split(' ');\n return {\n tag: parseInt(parts[0], 10),\n cryptoSuite: parts[1],\n keyParams: parts[2],\n sessionParams: parts.slice(3),\n };\n};\n\nSDPUtils.writeCryptoLine = function(parameters) {\n return 'a=crypto:' + parameters.tag + ' ' +\n parameters.cryptoSuite + ' ' +\n (typeof parameters.keyParams === 'object'\n ? SDPUtils.writeCryptoKeyParams(parameters.keyParams)\n : parameters.keyParams) +\n (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') +\n '\\r\\n';\n};\n\n// Parses the crypto key parameters into\n// https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\nSDPUtils.parseCryptoKeyParams = function(keyParams) {\n if (keyParams.indexOf('inline:') !== 0) {\n return null;\n }\n const parts = keyParams.substr(7).split('|');\n return {\n keyMethod: 'inline',\n keySalt: parts[0],\n lifeTime: parts[1],\n mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n mkiLength: parts[2] ? parts[2].split(':')[1] : undefined,\n };\n};\n\nSDPUtils.writeCryptoKeyParams = function(keyParams) {\n return keyParams.keyMethod + ':'\n + keyParams.keySalt +\n (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') +\n (keyParams.mkiValue && keyParams.mkiLength\n ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength\n : '');\n};\n\n// Extracts all SDES parameters.\nSDPUtils.getCryptoParameters = function(mediaSection, sessionpart) {\n const lines = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=crypto:');\n return lines.map(SDPUtils.parseCryptoLine);\n};\n\n// Parses ICE information from SDP media section or sessionpart.\n// FIXME: for consistency with other functions this should only\n// get the ice-ufrag and ice-pwd lines as input.\nSDPUtils.getIceParameters = function(mediaSection, sessionpart) {\n const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-ufrag:')[0];\n const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart,\n 'a=ice-pwd:')[0];\n if (!(ufrag && pwd)) {\n return null;\n }\n return {\n usernameFragment: ufrag.substr(12),\n password: pwd.substr(10),\n };\n};\n\n// Serializes ICE parameters to SDP.\nSDPUtils.writeIceParameters = function(params) {\n let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' +\n 'a=ice-pwd:' + params.password + '\\r\\n';\n if (params.iceLite) {\n sdp += 'a=ice-lite\\r\\n';\n }\n return sdp;\n};\n\n// Parses the SDP media section and returns RTCRtpParameters.\nSDPUtils.parseRtpParameters = function(mediaSection) {\n const description = {\n codecs: [],\n headerExtensions: [],\n fecMechanisms: [],\n rtcp: [],\n };\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n for (let i = 3; i < mline.length; i++) { // find all codecs from mline[3..]\n const pt = mline[i];\n const rtpmapline = SDPUtils.matchPrefix(\n mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n if (rtpmapline) {\n const codec = SDPUtils.parseRtpMap(rtpmapline);\n const fmtps = SDPUtils.matchPrefix(\n mediaSection, 'a=fmtp:' + pt + ' ');\n // Only the first a=fmtp:<pt> is considered.\n codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n codec.rtcpFeedback = SDPUtils.matchPrefix(\n mediaSection, 'a=rtcp-fb:' + pt + ' ')\n .map(SDPUtils.parseRtcpFb);\n description.codecs.push(codec);\n // parse FEC mechanisms from rtpmap lines.\n switch (codec.name.toUpperCase()) {\n case 'RED':\n case 'ULPFEC':\n description.fecMechanisms.push(codec.name.toUpperCase());\n break;\n default: // only RED and ULPFEC are recognized as FEC mechanisms.\n break;\n }\n }\n }\n SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n description.headerExtensions.push(SDPUtils.parseExtmap(line));\n });\n // FIXME: parse rtcp.\n return description;\n};\n\n// Generates parts of the SDP media section describing the capabilities /\n// parameters.\nSDPUtils.writeRtpDescription = function(kind, caps) {\n let sdp = '';\n\n // Build the mline.\n sdp += 'm=' + kind + ' ';\n sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n sdp += ' UDP/TLS/RTP/SAVPF ';\n sdp += caps.codecs.map(codec => {\n if (codec.preferredPayloadType !== undefined) {\n return codec.preferredPayloadType;\n }\n return codec.payloadType;\n }).join(' ') + '\\r\\n';\n\n sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n caps.codecs.forEach(codec => {\n sdp += SDPUtils.writeRtpMap(codec);\n sdp += SDPUtils.writeFmtp(codec);\n sdp += SDPUtils.writeRtcpFb(codec);\n });\n let maxptime = 0;\n caps.codecs.forEach(codec => {\n if (codec.maxptime > maxptime) {\n maxptime = codec.maxptime;\n }\n });\n if (maxptime > 0) {\n sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n }\n\n if (caps.headerExtensions) {\n caps.headerExtensions.forEach(extension => {\n sdp += SDPUtils.writeExtmap(extension);\n });\n }\n // FIXME: write fecMechanisms.\n return sdp;\n};\n\n// Parses the SDP media section and returns an array of\n// RTCRtpEncodingParameters.\nSDPUtils.parseRtpEncodingParameters = function(mediaSection) {\n const encodingParameters = [];\n const description = SDPUtils.parseRtpParameters(mediaSection);\n const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n // filter a=ssrc:... cname:, ignore PlanB-msid\n const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(parts => parts.attribute === 'cname');\n const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n let secondarySsrc;\n\n const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID')\n .map(line => {\n const parts = line.substr(17).split(' ');\n return parts.map(part => parseInt(part, 10));\n });\n if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n secondarySsrc = flows[0][1];\n }\n\n description.codecs.forEach(codec => {\n if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n let encParam = {\n ssrc: primarySsrc,\n codecPayloadType: parseInt(codec.parameters.apt, 10),\n };\n if (primarySsrc && secondarySsrc) {\n encParam.rtx = {ssrc: secondarySsrc};\n }\n encodingParameters.push(encParam);\n if (hasRed) {\n encParam = JSON.parse(JSON.stringify(encParam));\n encParam.fec = {\n ssrc: primarySsrc,\n mechanism: hasUlpfec ? 'red+ulpfec' : 'red',\n };\n encodingParameters.push(encParam);\n }\n }\n });\n if (encodingParameters.length === 0 && primarySsrc) {\n encodingParameters.push({\n ssrc: primarySsrc,\n });\n }\n\n // we support both b=AS and b=TIAS but interpret AS as TIAS.\n let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n if (bandwidth.length) {\n if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n bandwidth = parseInt(bandwidth[0].substr(7), 10);\n } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n // use formula from JSEP to convert b=AS to TIAS value.\n bandwidth = parseInt(bandwidth[0].substr(5), 10) * 1000 * 0.95\n - (50 * 40 * 8);\n } else {\n bandwidth = undefined;\n }\n encodingParameters.forEach(params => {\n params.maxBitrate = bandwidth;\n });\n }\n return encodingParameters;\n};\n\n// parses http://draft.ortc.org/#rtcrtcpparameters*\nSDPUtils.parseRtcpParameters = function(mediaSection) {\n const rtcpParameters = {};\n\n // Gets the first SSRC. Note that with RTX there might be multiple\n // SSRCs.\n const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(obj => obj.attribute === 'cname')[0];\n if (remoteSsrc) {\n rtcpParameters.cname = remoteSsrc.value;\n rtcpParameters.ssrc = remoteSsrc.ssrc;\n }\n\n // Edge uses the compound attribute instead of reducedSize\n // compound is !reducedSize\n const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n rtcpParameters.reducedSize = rsize.length > 0;\n rtcpParameters.compound = rsize.length === 0;\n\n // parses the rtcp-mux attrіbute.\n // Note that Edge does not support unmuxed RTCP.\n const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n rtcpParameters.mux = mux.length > 0;\n\n return rtcpParameters;\n};\n\nSDPUtils.writeRtcpParameters = function(rtcpParameters) {\n let sdp = '';\n if (rtcpParameters.reducedSize) {\n sdp += 'a=rtcp-rsize\\r\\n';\n }\n if (rtcpParameters.mux) {\n sdp += 'a=rtcp-mux\\r\\n';\n }\n if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n sdp += 'a=ssrc:' + rtcpParameters.ssrc +\n ' cname:' + rtcpParameters.cname + '\\r\\n';\n }\n return sdp;\n};\n\n\n// parses either a=msid: or a=ssrc:... msid lines and returns\n// the id of the MediaStream and MediaStreamTrack.\nSDPUtils.parseMsid = function(mediaSection) {\n let parts;\n const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n if (spec.length === 1) {\n parts = spec[0].substr(7).split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:')\n .map(line => SDPUtils.parseSsrcMedia(line))\n .filter(msidParts => msidParts.attribute === 'msid');\n if (planB.length > 0) {\n parts = planB[0].value.split(' ');\n return {stream: parts[0], track: parts[1]};\n }\n};\n\n// SCTP\n// parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n// to draft-ietf-mmusic-sctp-sdp-05\nSDPUtils.parseSctpDescription = function(mediaSection) {\n const mline = SDPUtils.parseMLine(mediaSection);\n const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n let maxMessageSize;\n if (maxSizeLine.length > 0) {\n maxMessageSize = parseInt(maxSizeLine[0].substr(19), 10);\n }\n if (isNaN(maxMessageSize)) {\n maxMessageSize = 65536;\n }\n const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n if (sctpPort.length > 0) {\n return {\n port: parseInt(sctpPort[0].substr(12), 10),\n protocol: mline.fmt,\n maxMessageSize,\n };\n }\n const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n if (sctpMapLines.length > 0) {\n const parts = sctpMapLines[0]\n .substr(10)\n .split(' ');\n return {\n port: parseInt(parts[0], 10),\n protocol: parts[1],\n maxMessageSize,\n };\n }\n};\n\n// SCTP\n// outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n// support by now receiving in this format, unless we originally parsed\n// as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n// protocol of DTLS/SCTP -- without UDP/ or TCP/)\nSDPUtils.writeSctpDescription = function(media, sctp) {\n let output = [];\n if (media.protocol !== 'DTLS/SCTP') {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctp-port:' + sctp.port + '\\r\\n',\n ];\n } else {\n output = [\n 'm=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n',\n 'c=IN IP4 0.0.0.0\\r\\n',\n 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n',\n ];\n }\n if (sctp.maxMessageSize !== undefined) {\n output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n }\n return output.join('');\n};\n\n// Generate a session ID for SDP.\n// https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n// recommends using a cryptographically random +ve 64-bit value\n// but right now this should be acceptable and within the right range\nSDPUtils.generateSessionId = function() {\n return Math.random().toString().substr(2, 21);\n};\n\n// Write boiler plate for start of SDP\n// sessId argument is optional - if not supplied it will\n// be generated randomly\n// sessVersion is optional and defaults to 2\n// sessUser is optional and defaults to 'thisisadapterortc'\nSDPUtils.writeSessionBoilerplate = function(sessId, sessVer, sessUser) {\n let sessionId;\n const version = sessVer !== undefined ? sessVer : 2;\n if (sessId) {\n sessionId = sessId;\n } else {\n sessionId = SDPUtils.generateSessionId();\n }\n const user = sessUser || 'thisisadapterortc';\n // FIXME: sess-id should be an NTP timestamp.\n return 'v=0\\r\\n' +\n 'o=' + user + ' ' + sessionId + ' ' + version +\n ' IN IP4 127.0.0.1\\r\\n' +\n 's=-\\r\\n' +\n 't=0 0\\r\\n';\n};\n\n// Gets the direction from the mediaSection or the sessionpart.\nSDPUtils.getDirection = function(mediaSection, sessionpart) {\n // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n const lines = SDPUtils.splitLines(mediaSection);\n for (let i = 0; i < lines.length; i++) {\n switch (lines[i]) {\n case 'a=sendrecv':\n case 'a=sendonly':\n case 'a=recvonly':\n case 'a=inactive':\n return lines[i].substr(2);\n default:\n // FIXME: What should happen here?\n }\n }\n if (sessionpart) {\n return SDPUtils.getDirection(sessionpart);\n }\n return 'sendrecv';\n};\n\nSDPUtils.getKind = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const mline = lines[0].split(' ');\n return mline[0].substr(2);\n};\n\nSDPUtils.isRejected = function(mediaSection) {\n return mediaSection.split(' ', 2)[1] === '0';\n};\n\nSDPUtils.parseMLine = function(mediaSection) {\n const lines = SDPUtils.splitLines(mediaSection);\n const parts = lines[0].substr(2).split(' ');\n return {\n kind: parts[0],\n port: parseInt(parts[1], 10),\n protocol: parts[2],\n fmt: parts.slice(3).join(' '),\n };\n};\n\nSDPUtils.parseOLine = function(mediaSection) {\n const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n const parts = line.substr(2).split(' ');\n return {\n username: parts[0],\n sessionId: parts[1],\n sessionVersion: parseInt(parts[2], 10),\n netType: parts[3],\n addressType: parts[4],\n address: parts[5],\n };\n};\n\n// a very naive interpretation of a valid SDP.\nSDPUtils.isValidSDP = function(blob) {\n if (typeof blob !== 'string' || blob.length === 0) {\n return false;\n }\n const lines = SDPUtils.splitLines(blob);\n for (let i = 0; i < lines.length; i++) {\n if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n return false;\n }\n // TODO: check the modifier a bit more.\n }\n return true;\n};\n\n// Expose public methods.\nif (typeof module === 'object') {\n module.exports = SDPUtils;\n}\n"],"names":["SDPUtils","Math","random","toString","substr","localCName","generateIdentifier","splitLines","blob","trim","split","map","line","splitSections","part","index","getDescription","sections","getMediaSections","shift","matchPrefix","prefix","filter","indexOf","parseCandidate","parts","substring","candidate","foundation","component","protocol","toLowerCase","priority","parseInt","ip","address","port","type","i","length","relatedAddress","relatedPort","tcpType","ufrag","usernameFragment","undefined","writeCandidate","sdp","push","toUpperCase","join","parseIceOptions","parseRtpMap","parsed","payloadType","name","clockRate","channels","numChannels","writeRtpMap","codec","pt","preferredPayloadType","parseExtmap","id","direction","uri","writeExtmap","headerExtension","preferredId","parseFmtp","kv","j","writeFmtp","parameters","Object","keys","params","forEach","param","parseRtcpFb","parameter","writeRtcpFb","lines","rtcpFeedback","fb","parseSsrcMedia","sp","ssrc","colon","attribute","value","parseSsrcGroup","semantics","ssrcs","getMid","mediaSection","mid","parseFingerprint","algorithm","getDtlsParameters","sessionpart","role","fingerprints","writeDtlsParameters","setupType","fp","parseCryptoLine","tag","cryptoSuite","keyParams","sessionParams","slice","writeCryptoLine","writeCryptoKeyParams","parseCryptoKeyParams","keyMethod","keySalt","lifeTime","mkiValue","mkiLength","getCryptoParameters","getIceParameters","pwd","password","writeIceParameters","iceLite","parseRtpParameters","description","codecs","headerExtensions","fecMechanisms","rtcp","mline","rtpmapline","fmtps","writeRtpDescription","kind","caps","maxptime","extension","parseRtpEncodingParameters","encodingParameters","hasRed","hasUlpfec","primarySsrc","secondarySsrc","flows","apt","encParam","codecPayloadType","rtx","JSON","parse","stringify","fec","mechanism","bandwidth","maxBitrate","parseRtcpParameters","rtcpParameters","remoteSsrc","obj","cname","rsize","reducedSize","compound","mux","writeRtcpParameters","parseMsid","spec","stream","track","planB","msidParts","parseSctpDescription","parseMLine","maxSizeLine","maxMessageSize","isNaN","sctpPort","fmt","sctpMapLines","writeSctpDescription","media","sctp","output","generateSessionId","writeSessionBoilerplate","sessId","sessVer","sessUser","sessionId","version","getDirection","getKind","isRejected","parseOLine","username","sessionVersion","netType","addressType","isValidSDP","charAt","module","exports"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./url.js"),r=require("./manager.js"),o=require("./socket.js"),t=require("../../../socket.io-parser/build/esm/index.js");const n={};function s(o,t){"object"==typeof o&&(t=o,o=void 0),t=t||{};const s=e.url(o,t.path||"/socket.io"),c=s.source,a=s.id,i=s.path,u=n[a]&&i in n[a].nsps;let p;return t.forceNew||t["force new connection"]||!1===t.multiplex||u?p=new r.Manager(c,t):(n[a]||(n[a]=new r.Manager(c,t)),p=n[a]),s.query&&!t.query&&(t.query=s.queryKey),p.socket(s.path,t)}Object.assign(s,{Manager:r.Manager,Socket:o.Socket,io:s,connect:s}),exports.Manager=r.Manager,exports.Socket=o.Socket,exports.protocol=t.protocol,exports.connect=s,exports.default=s,exports.io=s;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../node_modules/socket.io-client/build/esm/index.js"],"sourcesContent":["import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n"],"names":["cache","lookup","uri","opts","
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../node_modules/socket.io-client/build/esm/index.js"],"sourcesContent":["import { url } from \"./url.js\";\nimport { Manager } from \"./manager.js\";\nimport { Socket } from \"./socket.js\";\n/**\n * Managers cache.\n */\nconst cache = {};\nfunction lookup(uri, opts) {\n if (typeof uri === \"object\") {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n const parsed = url(uri, opts.path || \"/socket.io\");\n const source = parsed.source;\n const id = parsed.id;\n const path = parsed.path;\n const sameNamespace = cache[id] && path in cache[id][\"nsps\"];\n const newConnection = opts.forceNew ||\n opts[\"force new connection\"] ||\n false === opts.multiplex ||\n sameNamespace;\n let io;\n if (newConnection) {\n io = new Manager(source, opts);\n }\n else {\n if (!cache[id]) {\n cache[id] = new Manager(source, opts);\n }\n io = cache[id];\n }\n if (parsed.query && !opts.query) {\n opts.query = parsed.queryKey;\n }\n return io.socket(parsed.path, opts);\n}\n// so that \"lookup\" can be used both as a function (e.g. `io(...)`) and as a\n// namespace (e.g. `io.connect(...)`), for backward compatibility\nObject.assign(lookup, {\n Manager,\n Socket,\n io: lookup,\n connect: lookup,\n});\n/**\n * Protocol version.\n *\n * @public\n */\nexport { protocol } from \"socket.io-parser\";\n/**\n * Expose constructors for standalone build.\n *\n * @public\n */\nexport { Manager, Socket, lookup as io, lookup as connect, lookup as default, };\n"],"names":["cache","lookup","uri","opts","undefined","parsed","url","path","source","id","sameNamespace","io","forceNew","multiplex","Manager","query","queryKey","socket","Object","assign","Socket","connect"],"mappings":"2MAMA,MAAMA,EAAQ,CAAA,EACd,SAASC,EAAOC,EAAKC,GACE,iBAARD,IACPC,EAAOD,EACPA,OAAME,GAEVD,EAAOA,GAAQ,GACf,MAAME,EAASC,EAAAA,IAAIJ,EAAKC,EAAKI,MAAQ,cAC/BC,EAASH,EAAOG,OAChBC,EAAKJ,EAAOI,GACZF,EAAOF,EAAOE,KACdG,EAAgBV,EAAMS,IAAOF,KAAQP,EAAMS,GAAU,KAK3D,IAAIE,EAaJ,OAjBsBR,EAAKS,UACvBT,EAAK,0BACL,IAAUA,EAAKU,WACfH,EAGAC,EAAK,IAAIG,EAAAA,QAAQN,EAAQL,IAGpBH,EAAMS,KACPT,EAAMS,GAAM,IAAIK,EAAOA,QAACN,EAAQL,IAEpCQ,EAAKX,EAAMS,IAEXJ,EAAOU,QAAUZ,EAAKY,QACtBZ,EAAKY,MAAQV,EAAOW,UAEjBL,EAAGM,OAAOZ,EAAOE,KAAMJ,EAClC,CAGAe,OAAOC,OAAOlB,EAAQ,SAClBa,EAAOA,eACPM,EAAMA,OACNT,GAAIV,EACJoB,QAASpB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../engine.io-client/build/esm/socket.js");require("../../../engine.io-parser/build/esm/encodePacket.browser.js"),require("../../../engine.io-parser/build/esm/commons.js"),require("../../../engine.io-parser/build/esm/contrib/base64-arraybuffer.js");var t=require("../../../@socket.io/component-emitter/index.mjs.js"),n=require("../../../engine.io-client/build/esm/util.js");require("../../../engine.io-client/build/esm/transports/polling.js"),require("../../../engine.io-client/build/esm/transports/websocket.js");var i=require("../../../engine.io-client/build/esm/transports/websocket-constructor.browser.js"),s=require("./socket.js"),o=require("../../../socket.io-parser/build/esm/index.js"),r=require("./on.js"),c=require("./contrib/backo2.js");class h extends t.Emitter{constructor(e,t){var i;super(),this.nsps={},this.subs=[],e&&"object"==typeof e&&(t=e,e=void 0),(t=t||{}).path=t.path||"/socket.io",this.opts=t,n.installTimerFunctions(this,t),this.reconnection(!1!==t.reconnection),this.reconnectionAttempts(t.reconnectionAttempts||1/0),this.reconnectionDelay(t.reconnectionDelay||1e3),this.reconnectionDelayMax(t.reconnectionDelayMax||5e3),this.randomizationFactor(null!==(i=t.randomizationFactor)&&void 0!==i?i:.5),this.backoff=new c.Backoff({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==t.timeout?2e4:t.timeout),this._readyState="closed",this.uri=e;const s=t.parser||o;this.encoder=new s.Encoder,this.decoder=new s.Decoder,this._autoConnect=!1!==t.autoConnect,this._autoConnect&&this.open()}reconnection(e){return arguments.length?(this._reconnection=!!e,this):this._reconnection}reconnectionAttempts(e){return void 0===e?this._reconnectionAttempts:(this._reconnectionAttempts=e,this)}reconnectionDelay(e){var t;return void 0===e?this._reconnectionDelay:(this._reconnectionDelay=e,null===(t=this.backoff)||void 0===t||t.setMin(e),this)}randomizationFactor(e){var t;return void 0===e?this._randomizationFactor:(this._randomizationFactor=e,null===(t=this.backoff)||void 0===t||t.setJitter(e),this)}reconnectionDelayMax(e){var t;return void 0===e?this._reconnectionDelayMax:(this._reconnectionDelayMax=e,null===(t=this.backoff)||void 0===t||t.setMax(e),this)}timeout(e){return arguments.length?(this._timeout=e,this):this._timeout}maybeReconnectOnOpen(){!this._reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()}open(t){if(~this._readyState.indexOf("open"))return this;this.engine=new e.Socket(this.uri,this.opts);const n=this.engine,i=this;this._readyState="opening",this.skipReconnect=!1;const s=r.on(n,"open",(function(){i.onopen(),t&&t()})),o=r.on(n,"error",(e=>{i.cleanup(),i._readyState="closed",this.emitReserved("error",e),t?t(e):i.maybeReconnectOnOpen()}));if(!1!==this._timeout){const e=this._timeout;0===e&&s();const t=this.setTimeoutFn((()=>{s(),n.close(),n.emit("error",new Error("timeout"))}),e);this.opts.autoUnref&&t.unref(),this.subs.push((function(){clearTimeout(t)}))}return this.subs.push(s),this.subs.push(o),this}connect(e){return this.open(e)}onopen(){this.cleanup(),this._readyState="open",this.emitReserved("open");const e=this.engine;this.subs.push(r.on(e,"ping",this.onping.bind(this)),r.on(e,"data",this.ondata.bind(this)),r.on(e,"error",this.onerror.bind(this)),r.on(e,"close",this.onclose.bind(this)),r.on(this.decoder,"decoded",this.ondecoded.bind(this)))}onping(){this.emitReserved("ping")}ondata(e){try{this.decoder.add(e)}catch(e){this.onclose("parse error",e)}}ondecoded(e){i.nextTick((()=>{this.emitReserved("packet",e)}),this.setTimeoutFn)}onerror(e){this.emitReserved("error",e)}socket(e,t){let n=this.nsps[e];return n||(n=new s.Socket(this,e,t),this.nsps[e]=n),n}_destroy(e){const t=Object.keys(this.nsps);for(const e of t){if(this.nsps[e].active)return}this._close()}_packet(e){const t=this.encoder.encode(e);for(let n=0;n<t.length;n++)this.engine.write(t[n],e.options)}cleanup(){this.subs.forEach((e=>e())),this.subs.length=0,this.decoder.destroy()}_close(){this.skipReconnect=!0,this._reconnecting=!1,this.onclose("forced close"),this.engine&&this.engine.close()}disconnect(){return this._close()}onclose(e,t){this.cleanup(),this.backoff.reset(),this._readyState="closed",this.emitReserved("close",e,t),this._reconnection&&!this.skipReconnect&&this.reconnect()}reconnect(){if(this._reconnecting||this.skipReconnect)return this;const e=this;if(this.backoff.attempts>=this._reconnectionAttempts)this.backoff.reset(),this.emitReserved("reconnect_failed"),this._reconnecting=!1;else{const t=this.backoff.duration();this._reconnecting=!0;const n=this.setTimeoutFn((()=>{e.skipReconnect||(this.emitReserved("reconnect_attempt",e.backoff.attempts),e.skipReconnect||e.open((t=>{t?(e._reconnecting=!1,e.reconnect(),this.emitReserved("reconnect_error",t)):e.onreconnect()})))}),t);this.opts.autoUnref&&n.unref(),this.subs.push((function(){clearTimeout(n)}))}}onreconnect(){const e=this.backoff.attempts;this._reconnecting=!1,this.backoff.reset(),this.emitReserved("reconnect",e)}}exports.Manager=h;
|
|
2
2
|
//# sourceMappingURL=manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.js","sources":["../../../../../node_modules/socket.io-client/build/esm/manager.js"],"sourcesContent":["import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n"],"names":["Manager","_Emitter","_inherits","_super","_createSuper","uri","opts","_this","_a","_classCallCheck","this","call","nsps","subs","_typeof","undefined","path","installTimerFunctions","_assertThisInitialized","assertThisInitialized","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","_readyState","_parser","parser","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","open","_createClass","createClass","key","value","v","arguments","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","_reconnecting","attempts","reconnect","fn","_this2","indexOf","engine","Engine","Socket","socket","self","skipReconnect","openSubDestroy","on","onopen","errorSub","err","cleanup","emitReserved","maybeReconnectOnOpen","timer","setTimeoutFn","close","emit","Error","autoUnref","unref","push","clearTimeout","onping","bind","ondata","onerror","onclose","ondecoded","data","add","e","packet","_this3","nextTick","nsp","_i","_nsps","Object","keys","active","_close","encodedPackets","encode","i","write","options","forEach","subDestroy","destroy","reason","description","reset","_this4","delay","duration","onreconnect","attempt","Emitter"],"mappings":"6lBAMaA,EAAO,SAAAC,GAAAC,WAAAF,EAAAC,GAAA,IAAAE,EAAAC,cAAAJ,GAChB,SAAYK,EAAAA,EAAKC,GAAM,IAAAC,EACfC,EADeC,iBAAAC,KAAAV,IAEnBO,EAAAJ,EAAAQ,KAAAD,OACKE,KAAO,GACZL,EAAKM,KAAO,GACRR,GAAO,WAAQS,EAAA,OAAYT,KAC3BC,EAAOD,EACPA,OAAMU,IAEVT,EAAOA,GAAQ,IACVU,KAAOV,EAAKU,MAAQ,aACzBT,EAAKD,KAAOA,EACZW,EAAAA,sBAAqBC,EAAAC,sBAAAZ,GAAOD,GAC5BC,EAAKa,cAAmC,IAAtBd,EAAKc,cACvBb,EAAKc,qBAAqBf,EAAKe,sBAAwBC,KACvDf,EAAKgB,kBAAkBjB,EAAKiB,mBAAqB,KACjDhB,EAAKiB,qBAAqBlB,EAAKkB,sBAAwB,KACvDjB,EAAKkB,oBAAwD,QAAnCjB,EAAKF,EAAKmB,2BAAwC,IAAPjB,EAAgBA,EAAK,IAC1FD,EAAKmB,QAAU,IAAIC,UAAQ,CACvBC,IAAKrB,EAAKgB,oBACVM,IAAKtB,EAAKiB,uBACVM,OAAQvB,EAAKkB,wBAEjBlB,EAAKwB,QAAQ,MAAQzB,EAAKyB,QAAU,IAAQzB,EAAKyB,SACjDxB,EAAKyB,YAAc,SACnBzB,EAAKF,IAAMA,EACX,IAAM4B,EAAU3B,EAAK4B,QAAUA,EAKf,OAJhB3B,EAAK4B,QAAU,IAAIF,EAAQG,QAC3B7B,EAAK8B,QAAU,IAAIJ,EAAQK,QAC3B/B,EAAKgC,cAAoC,IAArBjC,EAAKkC,YACrBjC,EAAKgC,cACLhC,EAAKkC,OAAOlC,CACpB,CA6TC,OA7TAmC,EAAAC,YAAA3C,EAAA,CAAA,CAAA4C,IAAA,eAAAC,MACD,SAAaC,GACT,OAAKC,UAAUC,QAEftC,KAAKuC,gBAAkBH,EAChBpC,MAFIA,KAAKuC,aAGpB,GAAC,CAAAL,IAAA,uBAAAC,MACD,SAAqBC,GACjB,YAAU/B,IAAN+B,EACOpC,KAAKwC,uBAChBxC,KAAKwC,sBAAwBJ,EACtBpC,KACX,GAAC,CAAAkC,IAAA,oBAAAC,MACD,SAAkBC,GACd,IAAItC,EACJ,YAAUO,IAAN+B,EACOpC,KAAKyC,oBAChBzC,KAAKyC,mBAAqBL,EACF,QAAvBtC,EAAKE,KAAKgB,eAA4B,IAAPlB,GAAyBA,EAAG4C,OAAON,GAC5DpC,KACX,GAAC,CAAAkC,IAAA,sBAAAC,MACD,SAAoBC,GAChB,IAAItC,EACJ,YAAUO,IAAN+B,EACOpC,KAAK2C,sBAChB3C,KAAK2C,qBAAuBP,EACJ,QAAvBtC,EAAKE,KAAKgB,eAA4B,IAAPlB,GAAyBA,EAAG8C,UAAUR,GAC/DpC,KACX,GAAC,CAAAkC,IAAA,uBAAAC,MACD,SAAqBC,GACjB,IAAItC,EACJ,YAAUO,IAAN+B,EACOpC,KAAK6C,uBAChB7C,KAAK6C,sBAAwBT,EACL,QAAvBtC,EAAKE,KAAKgB,eAA4B,IAAPlB,GAAyBA,EAAGgD,OAAOV,GAC5DpC,KACX,GAAC,CAAAkC,IAAA,UAAAC,MACD,SAAQC,GACJ,OAAKC,UAAUC,QAEftC,KAAK+C,SAAWX,EACTpC,MAFIA,KAAK+C,QAGpB,GACA,CAAAb,IAAA,uBAAAC,MAMA,YAESnC,KAAKgD,eACNhD,KAAKuC,eACqB,IAA1BvC,KAAKgB,QAAQiC,UAEbjD,KAAKkD,WAEb,GACA,CAAAhB,IAAA,OAAAC,MAOA,SAAKgB,GAAI,IAAAC,EAAApD,KACL,IAAKA,KAAKsB,YAAY+B,QAAQ,QAC1B,OAAOrD,KACXA,KAAKsD,OAAS,IAAIC,EAAMC,OAACxD,KAAKL,IAAKK,KAAKJ,MACxC,IAAM6D,EAASzD,KAAKsD,OACdI,EAAO1D,KACbA,KAAKsB,YAAc,UACnBtB,KAAK2D,eAAgB,EAErB,IAAMC,EAAiBC,EAAAA,GAAGJ,EAAQ,QAAQ,WACtCC,EAAKI,SACLX,GAAMA,GACV,IAEMY,EAAWF,EAAEA,GAACJ,EAAQ,SAAS,SAACO,GAClCN,EAAKO,UACLP,EAAKpC,YAAc,SACnB8B,EAAKc,aAAa,QAASF,GACvBb,EACAA,EAAGa,GAIHN,EAAKS,sBAEb,IACA,IAAI,IAAUnE,KAAK+C,SAAU,CACzB,IAAM1B,EAAUrB,KAAK+C,SACL,IAAZ1B,GACAuC,IAGJ,IAAMQ,EAAQpE,KAAKqE,cAAa,WAC5BT,IACAH,EAAOa,QAEPb,EAAOc,KAAK,QAAS,IAAIC,MAAM,WAClC,GAAEnD,GACCrB,KAAKJ,KAAK6E,WACVL,EAAMM,QAEV1E,KAAKG,KAAKwE,MAAK,WACXC,aAAaR,EACjB,GACJ,CAGA,OAFApE,KAAKG,KAAKwE,KAAKf,GACf5D,KAAKG,KAAKwE,KAAKZ,GACR/D,IACX,GACA,CAAAkC,IAAA,UAAAC,MAMA,SAAQgB,GACJ,OAAOnD,KAAK+B,KAAKoB,EACrB,GACA,CAAAjB,IAAA,SAAAC,MAKA,WAEInC,KAAKiE,UAELjE,KAAKsB,YAAc,OACnBtB,KAAKkE,aAAa,QAElB,IAAMT,EAASzD,KAAKsD,OACpBtD,KAAKG,KAAKwE,KAAKd,KAAGJ,EAAQ,OAAQzD,KAAK6E,OAAOC,KAAK9E,OAAQ6D,EAAAA,GAAGJ,EAAQ,OAAQzD,KAAK+E,OAAOD,KAAK9E,OAAQ6D,KAAGJ,EAAQ,QAASzD,KAAKgF,QAAQF,KAAK9E,OAAQ6D,EAAAA,GAAGJ,EAAQ,QAASzD,KAAKiF,QAAQH,KAAK9E,OAAQ6D,EAAEA,GAAC7D,KAAK2B,QAAS,UAAW3B,KAAKkF,UAAUJ,KAAK9E,OACvP,GACA,CAAAkC,IAAA,SAAAC,MAKA,WACInC,KAAKkE,aAAa,OACtB,GACA,CAAAhC,IAAA,SAAAC,MAKA,SAAOgD,GACH,IACInF,KAAK2B,QAAQyD,IAAID,EAIrB,CAFA,MAAOE,GACHrF,KAAKiF,QAAQ,cAAeI,EAChC,CACJ,GACA,CAAAnD,IAAA,YAAAC,MAKA,SAAUmD,GAAQ,IAAAC,EAAAvF,KAEdwF,EAAAA,UAAS,WACLD,EAAKrB,aAAa,SAAUoB,EAChC,GAAGtF,KAAKqE,aACZ,GACA,CAAAnC,IAAA,UAAAC,MAKA,SAAQ6B,GACJhE,KAAKkE,aAAa,QAASF,EAC/B,GACA,CAAA9B,IAAA,SAAAC,MAMA,SAAOsD,EAAK7F,GACR,IAAI6D,EAASzD,KAAKE,KAAKuF,GAKvB,OAJKhC,IACDA,EAAS,IAAID,EAAMA,OAACxD,KAAMyF,EAAK7F,GAC/BI,KAAKE,KAAKuF,GAAOhC,GAEdA,CACX,GACA,CAAAvB,IAAA,WAAAC,MAMA,SAASsB,GAEL,IADA,IACAiC,EAAA,EAAAC,EADaC,OAAOC,KAAK7F,KAAKE,MACNwF,EAAAC,EAAArD,OAAAoD,IAAA,CAAnB,IAAMD,EAAGE,EAAAD,GAEV,GADe1F,KAAKE,KAAKuF,GACdK,OACP,MAER,CACA9F,KAAK+F,QACT,GACA,CAAA7D,IAAA,UAAAC,MAMA,SAAQmD,GAEJ,IADA,IAAMU,EAAiBhG,KAAKyB,QAAQwE,OAAOX,GAClCY,EAAI,EAAGA,EAAIF,EAAe1D,OAAQ4D,IACvClG,KAAKsD,OAAO6C,MAAMH,EAAeE,GAAIZ,EAAOc,QAEpD,GACA,CAAAlE,IAAA,UAAAC,MAKA,WACInC,KAAKG,KAAKkG,SAAQ,SAACC,GAAU,OAAKA,OAClCtG,KAAKG,KAAKmC,OAAS,EACnBtC,KAAK2B,QAAQ4E,SACjB,GACA,CAAArE,IAAA,SAAAC,MAKA,WACInC,KAAK2D,eAAgB,EACrB3D,KAAKgD,eAAgB,EACrBhD,KAAKiF,QAAQ,gBACTjF,KAAKsD,QACLtD,KAAKsD,OAAOgB,OACpB,GACA,CAAApC,IAAA,aAAAC,MAKA,WACI,OAAOnC,KAAK+F,QAChB,GACA,CAAA7D,IAAA,UAAAC,MAKA,SAAQqE,EAAQC,GACZzG,KAAKiE,UACLjE,KAAKgB,QAAQ0F,QACb1G,KAAKsB,YAAc,SACnBtB,KAAKkE,aAAa,QAASsC,EAAQC,GAC/BzG,KAAKuC,gBAAkBvC,KAAK2D,eAC5B3D,KAAKkD,WAEb,GACA,CAAAhB,IAAA,YAAAC,MAKA,WAAY,IAAAwE,EAAA3G,KACR,GAAIA,KAAKgD,eAAiBhD,KAAK2D,cAC3B,OAAO3D,KACX,IAAM0D,EAAO1D,KACb,GAAIA,KAAKgB,QAAQiC,UAAYjD,KAAKwC,sBAC9BxC,KAAKgB,QAAQ0F,QACb1G,KAAKkE,aAAa,oBAClBlE,KAAKgD,eAAgB,MAEpB,CACD,IAAM4D,EAAQ5G,KAAKgB,QAAQ6F,WAC3B7G,KAAKgD,eAAgB,EACrB,IAAMoB,EAAQpE,KAAKqE,cAAa,WACxBX,EAAKC,gBAETgD,EAAKzC,aAAa,oBAAqBR,EAAK1C,QAAQiC,UAEhDS,EAAKC,eAETD,EAAK3B,MAAK,SAACiC,GACHA,GACAN,EAAKV,eAAgB,EACrBU,EAAKR,YACLyD,EAAKzC,aAAa,kBAAmBF,IAGrCN,EAAKoD,aAEb,IACH,GAAEF,GACC5G,KAAKJ,KAAK6E,WACVL,EAAMM,QAEV1E,KAAKG,KAAKwE,MAAK,WACXC,aAAaR,EACjB,GACJ,CACJ,GACA,CAAAlC,IAAA,cAAAC,MAKA,WACI,IAAM4E,EAAU/G,KAAKgB,QAAQiC,SAC7BjD,KAAKgD,eAAgB,EACrBhD,KAAKgB,QAAQ0F,QACb1G,KAAKkE,aAAa,YAAa6C,EACnC,KAACzH,CAAA,CA9Ve,CAAS0H,EAAOA"}
|
|
1
|
+
{"version":3,"file":"manager.js","sources":["../../../../../node_modules/socket.io-client/build/esm/manager.js"],"sourcesContent":["import { Socket as Engine, installTimerFunctions, nextTick, } from \"engine.io-client\";\nimport { Socket } from \"./socket.js\";\nimport * as parser from \"socket.io-parser\";\nimport { on } from \"./on.js\";\nimport { Backoff } from \"./contrib/backo2.js\";\nimport { Emitter, } from \"@socket.io/component-emitter\";\nexport class Manager extends Emitter {\n constructor(uri, opts) {\n var _a;\n super();\n this.nsps = {};\n this.subs = [];\n if (uri && \"object\" === typeof uri) {\n opts = uri;\n uri = undefined;\n }\n opts = opts || {};\n opts.path = opts.path || \"/socket.io\";\n this.opts = opts;\n installTimerFunctions(this, opts);\n this.reconnection(opts.reconnection !== false);\n this.reconnectionAttempts(opts.reconnectionAttempts || Infinity);\n this.reconnectionDelay(opts.reconnectionDelay || 1000);\n this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000);\n this.randomizationFactor((_a = opts.randomizationFactor) !== null && _a !== void 0 ? _a : 0.5);\n this.backoff = new Backoff({\n min: this.reconnectionDelay(),\n max: this.reconnectionDelayMax(),\n jitter: this.randomizationFactor(),\n });\n this.timeout(null == opts.timeout ? 20000 : opts.timeout);\n this._readyState = \"closed\";\n this.uri = uri;\n const _parser = opts.parser || parser;\n this.encoder = new _parser.Encoder();\n this.decoder = new _parser.Decoder();\n this._autoConnect = opts.autoConnect !== false;\n if (this._autoConnect)\n this.open();\n }\n reconnection(v) {\n if (!arguments.length)\n return this._reconnection;\n this._reconnection = !!v;\n return this;\n }\n reconnectionAttempts(v) {\n if (v === undefined)\n return this._reconnectionAttempts;\n this._reconnectionAttempts = v;\n return this;\n }\n reconnectionDelay(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelay;\n this._reconnectionDelay = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMin(v);\n return this;\n }\n randomizationFactor(v) {\n var _a;\n if (v === undefined)\n return this._randomizationFactor;\n this._randomizationFactor = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setJitter(v);\n return this;\n }\n reconnectionDelayMax(v) {\n var _a;\n if (v === undefined)\n return this._reconnectionDelayMax;\n this._reconnectionDelayMax = v;\n (_a = this.backoff) === null || _a === void 0 ? void 0 : _a.setMax(v);\n return this;\n }\n timeout(v) {\n if (!arguments.length)\n return this._timeout;\n this._timeout = v;\n return this;\n }\n /**\n * Starts trying to reconnect if reconnection is enabled and we have not\n * started reconnecting yet\n *\n * @private\n */\n maybeReconnectOnOpen() {\n // Only try to reconnect if it's the first time we're connecting\n if (!this._reconnecting &&\n this._reconnection &&\n this.backoff.attempts === 0) {\n // keeps reconnection from firing twice for the same reconnection loop\n this.reconnect();\n }\n }\n /**\n * Sets the current transport `socket`.\n *\n * @param {Function} fn - optional, callback\n * @return self\n * @public\n */\n open(fn) {\n if (~this._readyState.indexOf(\"open\"))\n return this;\n this.engine = new Engine(this.uri, this.opts);\n const socket = this.engine;\n const self = this;\n this._readyState = \"opening\";\n this.skipReconnect = false;\n // emit `open`\n const openSubDestroy = on(socket, \"open\", function () {\n self.onopen();\n fn && fn();\n });\n // emit `error`\n const errorSub = on(socket, \"error\", (err) => {\n self.cleanup();\n self._readyState = \"closed\";\n this.emitReserved(\"error\", err);\n if (fn) {\n fn(err);\n }\n else {\n // Only do this if there is no fn to handle the error\n self.maybeReconnectOnOpen();\n }\n });\n if (false !== this._timeout) {\n const timeout = this._timeout;\n if (timeout === 0) {\n openSubDestroy(); // prevents a race condition with the 'open' event\n }\n // set timer\n const timer = this.setTimeoutFn(() => {\n openSubDestroy();\n socket.close();\n // @ts-ignore\n socket.emit(\"error\", new Error(\"timeout\"));\n }, timeout);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n this.subs.push(openSubDestroy);\n this.subs.push(errorSub);\n return this;\n }\n /**\n * Alias for open()\n *\n * @return self\n * @public\n */\n connect(fn) {\n return this.open(fn);\n }\n /**\n * Called upon transport open.\n *\n * @private\n */\n onopen() {\n // clear old subs\n this.cleanup();\n // mark as open\n this._readyState = \"open\";\n this.emitReserved(\"open\");\n // add new subs\n const socket = this.engine;\n this.subs.push(on(socket, \"ping\", this.onping.bind(this)), on(socket, \"data\", this.ondata.bind(this)), on(socket, \"error\", this.onerror.bind(this)), on(socket, \"close\", this.onclose.bind(this)), on(this.decoder, \"decoded\", this.ondecoded.bind(this)));\n }\n /**\n * Called upon a ping.\n *\n * @private\n */\n onping() {\n this.emitReserved(\"ping\");\n }\n /**\n * Called with data.\n *\n * @private\n */\n ondata(data) {\n try {\n this.decoder.add(data);\n }\n catch (e) {\n this.onclose(\"parse error\", e);\n }\n }\n /**\n * Called when parser fully decodes a packet.\n *\n * @private\n */\n ondecoded(packet) {\n // the nextTick call prevents an exception in a user-provided event listener from triggering a disconnection due to a \"parse error\"\n nextTick(() => {\n this.emitReserved(\"packet\", packet);\n }, this.setTimeoutFn);\n }\n /**\n * Called upon socket error.\n *\n * @private\n */\n onerror(err) {\n this.emitReserved(\"error\", err);\n }\n /**\n * Creates a new socket for the given `nsp`.\n *\n * @return {Socket}\n * @public\n */\n socket(nsp, opts) {\n let socket = this.nsps[nsp];\n if (!socket) {\n socket = new Socket(this, nsp, opts);\n this.nsps[nsp] = socket;\n }\n return socket;\n }\n /**\n * Called upon a socket close.\n *\n * @param socket\n * @private\n */\n _destroy(socket) {\n const nsps = Object.keys(this.nsps);\n for (const nsp of nsps) {\n const socket = this.nsps[nsp];\n if (socket.active) {\n return;\n }\n }\n this._close();\n }\n /**\n * Writes a packet.\n *\n * @param packet\n * @private\n */\n _packet(packet) {\n const encodedPackets = this.encoder.encode(packet);\n for (let i = 0; i < encodedPackets.length; i++) {\n this.engine.write(encodedPackets[i], packet.options);\n }\n }\n /**\n * Clean up transport subscriptions and packet buffer.\n *\n * @private\n */\n cleanup() {\n this.subs.forEach((subDestroy) => subDestroy());\n this.subs.length = 0;\n this.decoder.destroy();\n }\n /**\n * Close the current socket.\n *\n * @private\n */\n _close() {\n this.skipReconnect = true;\n this._reconnecting = false;\n this.onclose(\"forced close\");\n if (this.engine)\n this.engine.close();\n }\n /**\n * Alias for close()\n *\n * @private\n */\n disconnect() {\n return this._close();\n }\n /**\n * Called upon engine close.\n *\n * @private\n */\n onclose(reason, description) {\n this.cleanup();\n this.backoff.reset();\n this._readyState = \"closed\";\n this.emitReserved(\"close\", reason, description);\n if (this._reconnection && !this.skipReconnect) {\n this.reconnect();\n }\n }\n /**\n * Attempt a reconnection.\n *\n * @private\n */\n reconnect() {\n if (this._reconnecting || this.skipReconnect)\n return this;\n const self = this;\n if (this.backoff.attempts >= this._reconnectionAttempts) {\n this.backoff.reset();\n this.emitReserved(\"reconnect_failed\");\n this._reconnecting = false;\n }\n else {\n const delay = this.backoff.duration();\n this._reconnecting = true;\n const timer = this.setTimeoutFn(() => {\n if (self.skipReconnect)\n return;\n this.emitReserved(\"reconnect_attempt\", self.backoff.attempts);\n // check again for the case socket closed in above events\n if (self.skipReconnect)\n return;\n self.open((err) => {\n if (err) {\n self._reconnecting = false;\n self.reconnect();\n this.emitReserved(\"reconnect_error\", err);\n }\n else {\n self.onreconnect();\n }\n });\n }, delay);\n if (this.opts.autoUnref) {\n timer.unref();\n }\n this.subs.push(function subDestroy() {\n clearTimeout(timer);\n });\n }\n }\n /**\n * Called upon successful reconnect.\n *\n * @private\n */\n onreconnect() {\n const attempt = this.backoff.attempts;\n this._reconnecting = false;\n this.backoff.reset();\n this.emitReserved(\"reconnect\", attempt);\n }\n}\n"],"names":["Manager","Emitter","constructor","uri","opts","_a","super","this","nsps","subs","undefined","path","installTimerFunctions","reconnection","reconnectionAttempts","Infinity","reconnectionDelay","reconnectionDelayMax","randomizationFactor","backoff","Backoff","min","max","jitter","timeout","_readyState","_parser","parser","encoder","Encoder","decoder","Decoder","_autoConnect","autoConnect","open","v","arguments","length","_reconnection","_reconnectionAttempts","_reconnectionDelay","setMin","_randomizationFactor","setJitter","_reconnectionDelayMax","setMax","_timeout","maybeReconnectOnOpen","_reconnecting","attempts","reconnect","fn","indexOf","engine","Engine","Socket","socket","self","skipReconnect","openSubDestroy","on","onopen","errorSub","err","cleanup","emitReserved","timer","setTimeoutFn","close","emit","Error","autoUnref","unref","push","clearTimeout","connect","onping","bind","ondata","onerror","onclose","ondecoded","data","add","e","packet","nextTick","nsp","_destroy","Object","keys","active","_close","_packet","encodedPackets","encode","i","write","options","forEach","subDestroy","destroy","disconnect","reason","description","reset","delay","duration","onreconnect","attempt"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("../../../socket.io-parser/build/esm/index.js"),e=require("./on.js"),s=require("../../../@socket.io/component-emitter/index.mjs.js");const i=Object.freeze({connect:1,connect_error:1,disconnect:1,disconnecting:1,newListener:1,removeListener:1});class n extends s.Emitter{constructor(t,e,s){super(),this.connected=!1,this.receiveBuffer=[],this.sendBuffer=[],this.ids=0,this.acks={},this.flags={},this.io=t,this.nsp=e,s&&s.auth&&(this.auth=s.auth),this.io._autoConnect&&this.open()}get disconnected(){return!this.connected}subEvents(){if(this.subs)return;const t=this.io;this.subs=[e.on(t,"open",this.onopen.bind(this)),e.on(t,"packet",this.onpacket.bind(this)),e.on(t,"error",this.onerror.bind(this)),e.on(t,"close",this.onclose.bind(this))]}get active(){return!!this.subs}connect(){return this.connected||(this.subEvents(),this.io._reconnecting||this.io.open(),"open"===this.io._readyState&&this.onopen()),this}open(){return this.connect()}send(){for(var t=arguments.length,e=new Array(t),s=0;s<t;s++)e[s]=arguments[s];return e.unshift("message"),this.emit.apply(this,e),this}emit(e){if(i.hasOwnProperty(e))throw new Error('"'+e.toString()+'" is a reserved event name');for(var s=arguments.length,n=new Array(s>1?s-1:0),r=1;r<s;r++)n[r-1]=arguments[r];n.unshift(e);const o={type:t.PacketType.EVENT,data:n,options:{}};if(o.options.compress=!1!==this.flags.compress,"function"==typeof n[n.length-1]){const t=this.ids++,e=n.pop();this._registerAckCallback(t,e),o.id=t}const h=this.io.engine&&this.io.engine.transport&&this.io.engine.transport.writable;return this.flags.volatile&&(!h||!this.connected)||(this.connected?(this.notifyOutgoingListeners(o),this.packet(o)):this.sendBuffer.push(o)),this.flags={},this}_registerAckCallback(t,e){var s=this;const i=this.flags.timeout;if(void 0===i)return void(this.acks[t]=e);const n=this.io.setTimeoutFn((()=>{delete this.acks[t];for(let e=0;e<this.sendBuffer.length;e++)this.sendBuffer[e].id===t&&this.sendBuffer.splice(e,1);e.call(this,new Error("operation has timed out"))}),i);this.acks[t]=function(){s.io.clearTimeoutFn(n);for(var t=arguments.length,i=new Array(t),r=0;r<t;r++)i[r]=arguments[r];e.apply(s,[null,...i])}}packet(t){t.nsp=this.nsp,this.io._packet(t)}onopen(){"function"==typeof this.auth?this.auth((e=>{this.packet({type:t.PacketType.CONNECT,data:e})})):this.packet({type:t.PacketType.CONNECT,data:this.auth})}onerror(t){this.connected||this.emitReserved("connect_error",t)}onclose(t,e){this.connected=!1,delete this.id,this.emitReserved("disconnect",t,e)}onpacket(e){if(e.nsp===this.nsp)switch(e.type){case t.PacketType.CONNECT:if(e.data&&e.data.sid){const t=e.data.sid;this.onconnect(t)}else this.emitReserved("connect_error",new Error("It seems you are trying to reach a Socket.IO server in v2.x with a v3.x client, but they are not compatible (more information here: https://socket.io/docs/v3/migrating-from-2-x-to-3-0/)"));break;case t.PacketType.EVENT:case t.PacketType.BINARY_EVENT:this.onevent(e);break;case t.PacketType.ACK:case t.PacketType.BINARY_ACK:this.onack(e);break;case t.PacketType.DISCONNECT:this.ondisconnect();break;case t.PacketType.CONNECT_ERROR:this.destroy();const s=new Error(e.data.message);s.data=e.data.data,this.emitReserved("connect_error",s)}}onevent(t){const e=t.data||[];null!=t.id&&e.push(this.ack(t.id)),this.connected?this.emitEvent(e):this.receiveBuffer.push(Object.freeze(e))}emitEvent(t){if(this._anyListeners&&this._anyListeners.length){const e=this._anyListeners.slice();for(const s of e)s.apply(this,t)}super.emit.apply(this,t)}ack(e){const s=this;let i=!1;return function(){if(!i){i=!0;for(var n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];s.packet({type:t.PacketType.ACK,id:e,data:r})}}}onack(t){const e=this.acks[t.id];"function"==typeof e&&(e.apply(this,t.data),delete this.acks[t.id])}onconnect(t){this.id=t,this.connected=!0,this.emitBuffered(),this.emitReserved("connect")}emitBuffered(){this.receiveBuffer.forEach((t=>this.emitEvent(t))),this.receiveBuffer=[],this.sendBuffer.forEach((t=>{this.notifyOutgoingListeners(t),this.packet(t)})),this.sendBuffer=[]}ondisconnect(){this.destroy(),this.onclose("io server disconnect")}destroy(){this.subs&&(this.subs.forEach((t=>t())),this.subs=void 0),this.io._destroy(this)}disconnect(){return this.connected&&this.packet({type:t.PacketType.DISCONNECT}),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}close(){return this.disconnect()}compress(t){return this.flags.compress=t,this}get volatile(){return this.flags.volatile=!0,this}timeout(t){return this.flags.timeout=t,this}onAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.push(t),this}prependAny(t){return this._anyListeners=this._anyListeners||[],this._anyListeners.unshift(t),this}offAny(t){if(!this._anyListeners)return this;if(t){const e=this._anyListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyListeners=[];return this}listenersAny(){return this._anyListeners||[]}onAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.push(t),this}prependAnyOutgoing(t){return this._anyOutgoingListeners=this._anyOutgoingListeners||[],this._anyOutgoingListeners.unshift(t),this}offAnyOutgoing(t){if(!this._anyOutgoingListeners)return this;if(t){const e=this._anyOutgoingListeners;for(let s=0;s<e.length;s++)if(t===e[s])return e.splice(s,1),this}else this._anyOutgoingListeners=[];return this}listenersAnyOutgoing(){return this._anyOutgoingListeners||[]}notifyOutgoingListeners(t){if(this._anyOutgoingListeners&&this._anyOutgoingListeners.length){const e=this._anyOutgoingListeners.slice();for(const s of e)s.apply(this,t.data)}}}exports.Socket=n;
|
|
2
2
|
//# sourceMappingURL=socket.js.map
|