naruto-run
Version:
A simple React component for running Vonage's Network Precall Test.
110 lines (89 loc) • 5.49 kB
JavaScript
;
require("core-js/modules/web.dom-collections.iterator.js");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es.object.assign.js");
require("core-js/modules/es.number.to-fixed.js");
require("core-js/modules/es.parse-float.js");
var _react = _interopRequireWildcard(require("react"));
var _opentokNetworkTestJs = _interopRequireDefault(require("opentok-network-test-js"));
var _client = _interopRequireDefault(require("@opentok/client"));
var _opentok = _interopRequireDefault(require("opentok"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const OpenTokNetworkTest = props => {
(0, _react.useEffect)(() => {
if (props.apiKey !== "" && props.apiSecret !== "") generateToken();else props === null || props === void 0 ? void 0 : props.onFailure({
message: "Please add missing API key/secret",
error: {
message: "No API Key or API Secret"
}
});
}, []);
const generateToken = () => {
const opentok = new _opentok.default(props === null || props === void 0 ? void 0 : props.apiKey, props === null || props === void 0 ? void 0 : props.apiSecret);
opentok.createSession({
mediaMode: "routed"
}, function (error, session) {
if (error) props === null || props === void 0 ? void 0 : props.onFailure({
message: "Error creating session",
error
});else {
const sessionid = session.sessionId;
const token = opentok.generateToken(sessionid);
openTokNetworkTest(sessionid, token);
}
});
};
const getQuality = function getQuality() {
let mos = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (mos >= 3.8) return "Excellent";else if (mos >= 3.1 && mos <= 3.79) return "Good";else if (mos >= 2.4 && mos <= 3.09) return "Fair";else if (mos >= 1.7 && mos <= 2.39) return "Poor";else return "Bad";
};
const openTokNetworkTest = (sessionId, token) => {
const otNetworkTest = new _opentokNetworkTestJs.default(_client.default, {
apiKey: props === null || props === void 0 ? void 0 : props.apiKey,
sessionId,
token
});
otNetworkTest.testConnectivity().then(_ => {
props === null || props === void 0 ? void 0 : props.onStart();
otNetworkTest.testQuality(function updateCallback(_) {}).then(results => {
var _networkTestResults$a, _networkTestResults$v;
const networkTestResults = results;
Object.assign(networkTestResults === null || networkTestResults === void 0 ? void 0 : networkTestResults.audio, {
quality: getQuality(parseFloat(networkTestResults === null || networkTestResults === void 0 ? void 0 : (_networkTestResults$a = networkTestResults.audio) === null || _networkTestResults$a === void 0 ? void 0 : _networkTestResults$a.mos).toFixed(2))
});
Object.assign(networkTestResults === null || networkTestResults === void 0 ? void 0 : networkTestResults.video, {
quality: getQuality(parseFloat(networkTestResults === null || networkTestResults === void 0 ? void 0 : (_networkTestResults$v = networkTestResults.video) === null || _networkTestResults$v === void 0 ? void 0 : _networkTestResults$v.mos).toFixed(2))
});
props === null || props === void 0 ? void 0 : props.onSuccess(networkTestResults);
}).catch(error => props === null || props === void 0 ? void 0 : props.onFailure({
message: "OpenTok quality test error",
error
}));
}).catch(error => props === null || props === void 0 ? void 0 : props.onFailure({
message: "OpenTok connectivity test error",
error
}));
};
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {});
};
OpenTokNetworkTest.propTypes = {
apiKey: _propTypes.default.string.isRequired,
apiSecret: _propTypes.default.string.isRequired,
onSuccess: _propTypes.default.func,
onFailure: _propTypes.default.func,
onStart: _propTypes.default.func
};
OpenTokNetworkTest.defaultProps = {
onSuccess: res => {},
onFailure: err => console.error(err),
onStart: () => {}
};
var _default = OpenTokNetworkTest;
exports.default = _default;